<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>50908</bug_id>
          
          <creation_ts>2024-07-15 15:13:59 +0300</creation_ts>
          <short_desc>SECURITY ALERT: Host header forgery detected on conn local= remote= FD flags= (local IP does not match any domain IP)</short_desc>
          <delta_ts>2024-07-15 15:43:15 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>squid</component>
          <version>unstable</version>
          <rep_platform>x86_64</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P5</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Barsook">knaz-san</reporter>
          <assigned_to name="Egor Ignatov">egori</assigned_to>
          <cc>amakeenk</cc>
    
    <cc>egori</cc>
    
    <cc>knaz-san</cc>
    
    <cc>shaba</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>248862</commentid>
    <comment_count>0</comment_count>
      <attachid>16424</attachid>
    <who name="Barsook">knaz-san</who>
    <bug_when>2024-07-15 15:13:59 +0300</bug_when>
    <thetext>Created attachment 16424
Исправленный файл

Давняя &quot;фитча&quot; squid
https://wiki.squid-cache.org/KnowledgeBase/HostHeaderForgery

Решается давним патчем файла src/client_side_request.cc
Взято с https://habr.com/ru/articles/354708/

для версий 6.6 и 6.10 так же подходит.
пересобрал у себя локально.

Патчи писать не умею, потому правил прямо в файле во вложении со строки 497</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248863</commentid>
    <comment_count>1</comment_count>
      <attachid>16425</attachid>
    <who name="Barsook">knaz-san</who>
    <bug_when>2024-07-15 15:14:47 +0300</bug_when>
    <thetext>Created attachment 16425
Вид ошибки</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>16424</attachid>
            <date>2024-07-15 15:13:59 +0300</date>
            <delta_ts>2024-07-15 15:13:59 +0300</delta_ts>
            <desc>Исправленный файл</desc>
            <filename>client_side_request.cc</filename>
            <type>text/x-c++src</type>
            <size>77210</size>
            <attacher name="Barsook">knaz-san</attacher>
            
              <data encoding="base64">LyoKICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjMgVGhlIFNxdWlkIFNvZnR3YXJlIEZvdW5kYXRp
b24gYW5kIGNvbnRyaWJ1dG9ycwogKgogKiBTcXVpZCBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCB1
bmRlciBHUEx2MisgbGljZW5zZSBhbmQgaW5jbHVkZXMKICogY29udHJpYnV0aW9ucyBmcm9tIG51
bWVyb3VzIGluZGl2aWR1YWxzIGFuZCBvcmdhbml6YXRpb25zLgogKiBQbGVhc2Ugc2VlIHRoZSBD
T1BZSU5HIGFuZCBDT05UUklCVVRPUlMgZmlsZXMgZm9yIGRldGFpbHMuCiAqLwoKLyogREVCVUc6
IHNlY3Rpb24gODUgICAgQ2xpZW50LXNpZGUgUmVxdWVzdCBSb3V0aW5lcyAqLwoKLyoKICogR2Vu
ZXJhbCBsb2dpYyBvZiByZXF1ZXN0IHByb2Nlc3Npbmc6CiAqCiAqIFdlIHJ1biBhIHNlcmllcyBv
ZiB0ZXN0cyB0byBkZXRlcm1pbmUgaWYgYWNjZXNzIHdpbGwgYmUgcGVybWl0dGVkLCBhbmQgdG8g
ZG8KICogYW55IHJlZGlyZWN0aW9uLiBUaGVuIHdlIGNhbGwgaW50byB0aGUgcmVzdWx0IGNsaWVu
dFN0cmVhbSB0byByZXRyaWV2ZSBkYXRhLgogKiBGcm9tIHRoYXQgcG9pbnQgb24gaXQncyB1cCB0
byByZXBseSBtYW5hZ2VtZW50LgogKi8KCiNpbmNsdWRlICJzcXVpZC5oIgojaW5jbHVkZSAiYWNs
L0ZpbGxlZENoZWNrbGlzdC5oIgojaW5jbHVkZSAiYWNsL0dhZGdldHMuaCIKI2luY2x1ZGUgImFu
eXAvUG9ydENmZy5oIgojaW5jbHVkZSAiYmFzZS9Bc3luY0pvYkNhbGxzLmgiCiNpbmNsdWRlICJj
bGllbnRfc2lkZS5oIgojaW5jbHVkZSAiY2xpZW50X3NpZGVfcmVwbHkuaCIKI2luY2x1ZGUgImNs
aWVudF9zaWRlX3JlcXVlc3QuaCIKI2luY2x1ZGUgIkNsaWVudFJlcXVlc3RDb250ZXh0LmgiCiNp
bmNsdWRlICJjbGllbnRTdHJlYW0uaCIKI2luY2x1ZGUgImNvbW0vQ29ubmVjdGlvbi5oIgojaW5j
bHVkZSAiY29tbS9Xcml0ZS5oIgojaW5jbHVkZSAiZXJyb3IvRGV0YWlsLmgiCiNpbmNsdWRlICJl
cnJvcnBhZ2UuaCIKI2luY2x1ZGUgImZkLmgiCiNpbmNsdWRlICJmZGUuaCIKI2luY2x1ZGUgImZv
cm1hdC9Ub2tlbi5oIgojaW5jbHVkZSAiRndkU3RhdGUuaCIKI2luY2x1ZGUgImhlbHBlci5oIgoj
aW5jbHVkZSAiaGVscGVyL1JlcGx5LmgiCiNpbmNsdWRlICJodHRwLmgiCiNpbmNsdWRlICJodHRw
L1N0cmVhbS5oIgojaW5jbHVkZSAiSHR0cEhkckNjLmgiCiNpbmNsdWRlICJIdHRwUmVwbHkuaCIK
I2luY2x1ZGUgIkh0dHBSZXF1ZXN0LmgiCiNpbmNsdWRlICJpcC9OZk1hcmtDb25maWcuaCIKI2lu
Y2x1ZGUgImlwL1Fvc0NvbmZpZy5oIgojaW5jbHVkZSAiaXBjYWNoZS5oIgojaW5jbHVkZSAibG9n
L2FjY2Vzc19sb2cuaCIKI2luY2x1ZGUgIk1lbU9iamVjdC5oIgojaW5jbHVkZSAiUGFyc2luZy5o
IgojaW5jbHVkZSAicHJveHlwL0hlYWRlci5oIgojaW5jbHVkZSAicmVkaXJlY3QuaCIKI2luY2x1
ZGUgInJmYzE3MzguaCIKI2luY2x1ZGUgInNidWYvU3RyaW5nQ29udmVydC5oIgojaW5jbHVkZSAi
U3F1aWRDb25maWcuaCIKI2luY2x1ZGUgIlN0b3JlLmgiCiNpbmNsdWRlICJTdHJMaXN0LmgiCiNp
bmNsdWRlICJ0b29scy5oIgojaW5jbHVkZSAid29yZGxpc3QuaCIKI2lmIFVTRV9BVVRICiNpbmNs
dWRlICJhdXRoL1VzZXJSZXF1ZXN0LmgiCiNlbmRpZgojaWYgVVNFX0FEQVBUQVRJT04KI2luY2x1
ZGUgImFkYXB0YXRpb24vQWNjZXNzQ2hlY2suaCIKI2luY2x1ZGUgImFkYXB0YXRpb24vQW5zd2Vy
LmgiCiNpbmNsdWRlICJhZGFwdGF0aW9uL0l0ZXJhdG9yLmgiCiNpbmNsdWRlICJhZGFwdGF0aW9u
L1NlcnZpY2UuaCIKI2lmIElDQVBfQ0xJRU5UCiNpbmNsdWRlICJhZGFwdGF0aW9uL2ljYXAvSGlz
dG9yeS5oIgojZW5kaWYKI2VuZGlmCiNpZiBVU0VfT1BFTlNTTAojaW5jbHVkZSAic3NsL1NlcnZl
ckJ1bXAuaCIKI2luY2x1ZGUgInNzbC9zdXBwb3J0LmgiCiNlbmRpZgoKI2lmIEZPTExPV19YX0ZP
UldBUkRFRF9GT1IKCiNpZiAhZGVmaW5lZChTUVVJRF9YX0ZPUldBUkRFRF9GT1JfSE9QX01BWCkK
I2RlZmluZSBTUVVJRF9YX0ZPUldBUkRFRF9GT1JfSE9QX01BWCA2NAojZW5kaWYKCnN0YXRpYyB2
b2lkIGNsaWVudEZvbGxvd1hGb3J3YXJkZWRGb3JDaGVjayhBY2w6OkFuc3dlciBhbnN3ZXIsIHZv
aWQgKmRhdGEpOwojZW5kaWYgLyogRk9MTE9XX1hfRk9SV0FSREVEX0ZPUiAqLwoKRXJyb3JTdGF0
ZSAqY2xpZW50QnVpbGRFcnJvcihlcnJfdHlwZSwgSHR0cDo6U3RhdHVzQ29kZSwgY2hhciBjb25z
dCAqdXJsLCBjb25zdCBDb25uU3RhdGVEYXRhICosIEh0dHBSZXF1ZXN0ICosIGNvbnN0IEFjY2Vz
c0xvZ0VudHJ5OjpQb2ludGVyICYpOwoKQ0JEQVRBX0NMQVNTX0lOSVQoQ2xpZW50UmVxdWVzdENv
bnRleHQpOwoKLyogTG9jYWwgZnVuY3Rpb25zICovCi8qIG90aGVyICovCnN0YXRpYyB2b2lkIGNs
aWVudEFjY2Vzc0NoZWNrRG9uZVdyYXBwZXIoQWNsOjpBbnN3ZXIsIHZvaWQgKik7CiNpZiBVU0Vf
T1BFTlNTTApzdGF0aWMgdm9pZCBzc2xCdW1wQWNjZXNzQ2hlY2tEb25lV3JhcHBlcihBY2w6OkFu
c3dlciwgdm9pZCAqKTsKI2VuZGlmCnN0YXRpYyBpbnQgY2xpZW50SGllcmFyY2hpY2FsKENsaWVu
dEh0dHBSZXF1ZXN0ICogaHR0cCk7CnN0YXRpYyB2b2lkIGNsaWVudEludGVycHJldFJlcXVlc3RI
ZWFkZXJzKENsaWVudEh0dHBSZXF1ZXN0ICogaHR0cCk7CnN0YXRpYyBITFBDQiBjbGllbnRSZWRp
cmVjdERvbmVXcmFwcGVyOwpzdGF0aWMgSExQQ0IgY2xpZW50U3RvcmVJZERvbmVXcmFwcGVyOwpz
dGF0aWMgdm9pZCBjaGVja05vQ2FjaGVEb25lV3JhcHBlcihBY2w6OkFuc3dlciwgdm9pZCAqKTsK
U1FVSURDRVhURVJOIENTUiBjbGllbnRHZXRNb3JlRGF0YTsKU1FVSURDRVhURVJOIENTUyBjbGll
bnRSZXBseVN0YXR1czsKU1FVSURDRVhURVJOIENTRCBjbGllbnRSZXBseURldGFjaDsKc3RhdGlj
IHZvaWQgY2hlY2tGYWlsdXJlUmF0aW8oZXJyX3R5cGUsIGhpZXJfY29kZSk7CgpDbGllbnRSZXF1
ZXN0Q29udGV4dDo6fkNsaWVudFJlcXVlc3RDb250ZXh0KCkKewogICAgLyoKICAgICAqIFJlbGVh
c2Ugb3VyICJsb2NrIiBvbiBvdXIgcGFyZW50LCBDbGllbnRIdHRwUmVxdWVzdCwgaWYgd2UKICAg
ICAqIHN0aWxsIGhhdmUgb25lCiAgICAgKi8KCiAgICBpZiAoaHR0cCkKICAgICAgICBjYmRhdGFS
ZWZlcmVuY2VEb25lKGh0dHApOwoKICAgIGRlbGV0ZSBlcnJvcjsKICAgIGRlYnVncyg4NSwzLCAi
Q2xpZW50UmVxdWVzdENvbnRleHQgZGVzdHJ1Y3RlZCwgdGhpcz0iIDw8IHRoaXMpOwp9CgpDbGll
bnRSZXF1ZXN0Q29udGV4dDo6Q2xpZW50UmVxdWVzdENvbnRleHQoQ2xpZW50SHR0cFJlcXVlc3Qg
KmFuSHR0cCkgOgogICAgaHR0cChjYmRhdGFSZWZlcmVuY2UoYW5IdHRwKSkKewogICAgZGVidWdz
KDg1LCAzLCAiQ2xpZW50UmVxdWVzdENvbnRleHQgY29uc3RydWN0ZWQsIHRoaXM9IiA8PCB0aGlz
KTsKfQoKQ0JEQVRBX0NMQVNTX0lOSVQoQ2xpZW50SHR0cFJlcXVlc3QpOwoKQ2xpZW50SHR0cFJl
cXVlc3Q6OkNsaWVudEh0dHBSZXF1ZXN0KENvbm5TdGF0ZURhdGEgKiBhQ29ubikgOgojaWYgVVNF
X0FEQVBUQVRJT04KICAgIEFzeW5jSm9iKCJDbGllbnRIdHRwUmVxdWVzdCIpLAojZW5kaWYKICAg
IGFsKG5ldyBBY2Nlc3NMb2dFbnRyeSgpKSwKICAgIGNvbm5fKGNiZGF0YVJlZmVyZW5jZShhQ29u
bikpCnsKICAgIENvZGVDb250ZXh0OjpSZXNldChhbCk7CiAgICBhbC0+Y2FjaGUuc3RhcnRfdGlt
ZSA9IGN1cnJlbnRfdGltZTsKICAgIGlmIChhQ29ubikgewogICAgICAgIGFsLT50Y3BDbGllbnQg
PSBhQ29ubi0+Y2xpZW50Q29ubmVjdGlvbjsKICAgICAgICBhbC0+Y2FjaGUucG9ydCA9IGFDb25u
LT5wb3J0OwogICAgICAgIGFsLT5jYWNoZS5jYWRkciA9IGFDb25uLT5sb2dfYWRkcjsKICAgICAg
ICBhbC0+cHJveHlQcm90b2NvbEhlYWRlciA9IGFDb25uLT5wcm94eVByb3RvY29sSGVhZGVyKCk7
CiAgICAgICAgYWwtPnVwZGF0ZUVycm9yKGFDb25uLT5iYXJlRXJyb3IpOwoKI2lmIFVTRV9PUEVO
U1NMCiAgICAgICAgaWYgKGFDb25uLT5jbGllbnRDb25uZWN0aW9uICE9IG51bGxwdHIgJiYgYUNv
bm4tPmNsaWVudENvbm5lY3Rpb24tPmlzT3BlbigpKSB7CiAgICAgICAgICAgIGlmIChhdXRvIHNz
bCA9IGZkX3RhYmxlW2FDb25uLT5jbGllbnRDb25uZWN0aW9uLT5mZF0uc3NsLmdldCgpKQogICAg
ICAgICAgICAgICAgYWwtPmNhY2hlLnNzbENsaWVudENlcnQucmVzZXRXaXRob3V0TG9ja2luZyhT
U0xfZ2V0X3BlZXJfY2VydGlmaWNhdGUoc3NsKSk7CiAgICAgICAgfQojZW5kaWYKICAgIH0KICAg
IGRsaW5rQWRkKHRoaXMsICZhY3RpdmUsICZDbGllbnRBY3RpdmVSZXF1ZXN0cyk7Cn0KCi8qCiAq
IHJldHVybnMgdHJ1ZSBpZiBjbGllbnQgc3BlY2lmaWVkIHRoYXQgdGhlIG9iamVjdCBtdXN0IGNv
bWUgZnJvbSB0aGUgY2FjaGUKICogd2l0aG91dCBjb250YWN0aW5nIG9yaWdpbiBzZXJ2ZXIKICov
CmJvb2wKQ2xpZW50SHR0cFJlcXVlc3Q6Om9ubHlJZkNhY2hlZCgpY29uc3QKewogICAgYXNzZXJ0
KHJlcXVlc3QpOwogICAgcmV0dXJuIHJlcXVlc3QtPmNhY2hlX2NvbnRyb2wgJiYKICAgICAgICAg
ICByZXF1ZXN0LT5jYWNoZV9jb250cm9sLT5oYXNPbmx5SWZDYWNoZWQoKTsKfQoKLyoqCiAqIFRo
aXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gc2VydmUgYSBmYWlybHkgc3BlY2lmaWMgcHVycG9z
ZS4KICogT2NjYXNpb25hbGx5IG91ciB2Qk5TLWNvbm5lY3RlZCBjYWNoZXMgY2FuIHRhbGsgdG8g
ZWFjaCBvdGhlciwgYnV0IG5vdAogKiB0aGUgcmVzdCBvZiB0aGUgd29ybGQuICBIZXJlIHdlIHRy
eSB0byBkZXRlY3QgZnJlcXVlbnQgZmFpbHVyZXMgd2hpY2gKICogbWFrZSB0aGUgY2FjaGUgdW51
c2FibGUgKGUuZy4gRE5TIGxvb2t1cCBhbmQgY29ubmVjdCgpIGZhaWx1cmVzKS4gIElmCiAqIHRo
ZSBmYWlsdXJlOnN1Y2Nlc3MgcmF0aW8gZ29lcyBhYm92ZSAxLjAgdGhlbiB3ZSBnbyBpbnRvICJo
aXQgb25seSIKICogbW9kZSB3aGVyZSB3ZSBvbmx5IHJldHVybiBVRFBfSElUIG9yIFVEUF9NSVNT
X05PRkVUQ0guICBOZWlnaGJvcnMKICogd2lsbCBvbmx5IGZldGNoIEhJVHMgZnJvbSB1cyBpZiB0
aGV5IGFyZSB1c2luZyB0aGUgSUNQIHByb3RvY29sLiAgV2UKICogc3RheSBpbiB0aGlzIG1vZGUg
Zm9yIDUgbWludXRlcy4KICoKICogRHVhbmUgVy4sIFNlcHQgMTYsIDE5OTYKICovCnN0YXRpYyB2
b2lkCmNoZWNrRmFpbHVyZVJhdGlvKGVycl90eXBlIGV0eXBlLCBoaWVyX2NvZGUgaGNvZGUpCnsK
ICAgIC8vIENhbiBiZSBzZXQgYXQgY29tcGlsZSB0aW1lIHdpdGggLUQgY29tcGlsZXIgZmxhZwoj
aWZuZGVmIEZBSUxVUkVfTU9ERV9USU1FCiNkZWZpbmUgRkFJTFVSRV9NT0RFX1RJTUUgMzAwCiNl
bmRpZgoKICAgIGlmIChoY29kZSA9PSBISUVSX05PTkUpCiAgICAgICAgcmV0dXJuOwoKICAgIC8v
IGRvbid0IGJvdGhlciB3aGVuIElDUCBpcyBkaXNhYmxlZC4KICAgIGlmIChDb25maWcuUG9ydC5p
Y3AgPD0gMCkKICAgICAgICByZXR1cm47CgogICAgc3RhdGljIGRvdWJsZSBtYWdpY19mYWN0b3Ig
PSAxMDAuMDsKICAgIGRvdWJsZSBuX2dvb2Q7CiAgICBkb3VibGUgbl9iYWQ7CgogICAgbl9nb29k
ID0gbWFnaWNfZmFjdG9yIC8gKDEuMCArIHJlcXVlc3RfZmFpbHVyZV9yYXRpbyk7CgogICAgbl9i
YWQgPSBtYWdpY19mYWN0b3IgLSBuX2dvb2Q7CgogICAgc3dpdGNoIChldHlwZSkgewoKICAgIGNh
c2UgRVJSX0ROU19GQUlMOgoKICAgIGNhc2UgRVJSX0NPTk5FQ1RfRkFJTDoKICAgIGNhc2UgRVJS
X1NFQ1VSRV9DT05ORUNUX0ZBSUw6CgogICAgY2FzZSBFUlJfUkVBRF9FUlJPUjoKICAgICAgICAr
K25fYmFkOwogICAgICAgIGJyZWFrOwoKICAgIGRlZmF1bHQ6CiAgICAgICAgKytuX2dvb2Q7CiAg
ICB9CgogICAgcmVxdWVzdF9mYWlsdXJlX3JhdGlvID0gbl9iYWQgLyBuX2dvb2Q7CgogICAgaWYg
KGhpdF9vbmx5X21vZGVfdW50aWwgPiBzcXVpZF9jdXJ0aW1lKQogICAgICAgIHJldHVybjsKCiAg
ICBpZiAocmVxdWVzdF9mYWlsdXJlX3JhdGlvIDwgMS4wKQogICAgICAgIHJldHVybjsKCiAgICBk
ZWJ1Z3MoMzMsIERCR19DUklUSUNBTCwgIldBUk5JTkc6IEZhaWx1cmUgUmF0aW8gYXQgIjw8IHN0
ZDo6c2V0dyg0KTw8CiAgICAgICAgICAgc3RkOjpzZXRwcmVjaXNpb24oMykgPDwgcmVxdWVzdF9m
YWlsdXJlX3JhdGlvKTsKCiAgICBkZWJ1Z3MoMzMsIERCR19DUklUSUNBTCwgIldBUk5JTkc6IElD
UCBnb2luZyBpbnRvIEhJVC1vbmx5IG1vZGUgZm9yICIgPDwKICAgICAgICAgICBGQUlMVVJFX01P
REVfVElNRSAvIDYwIDw8ICIgbWludXRlcy4uLiIpOwoKICAgIGhpdF9vbmx5X21vZGVfdW50aWwg
PSBzcXVpZF9jdXJ0aW1lICsgRkFJTFVSRV9NT0RFX1RJTUU7CgogICAgcmVxdWVzdF9mYWlsdXJl
X3JhdGlvID0gMC44OyAgICAvKiByZXNldCB0byBzb21ldGhpbmcgbGVzcyB0aGFuIDEuMCAqLwp9
CgpDbGllbnRIdHRwUmVxdWVzdDo6fkNsaWVudEh0dHBSZXF1ZXN0KCkKewogICAgZGVidWdzKDMz
LCAzLCAiaHR0cFJlcXVlc3RGcmVlOiAiIDw8IHVyaSk7CgogICAgLy8gRXZlbiB0aG91Z2ggZnJl
ZVJlc291cmNlcygpIGJlbG93IG1heSBkZXN0cm95IHRoZSByZXF1ZXN0LAogICAgLy8gd2Ugbm8g
bG9uZ2VyIHNldCByZXF1ZXN0LT5ib2R5X3BpcGUgdG8gTlVMTCBoZXJlCiAgICAvLyBiZWNhdXNl
IHdlIGRpZCBub3QgaW5pdGlhdGUgdGhhdCBwaXBlIChDb25uU3RhdGVEYXRhIGRpZCkKCiAgICAv
KiB0aGUgSUNQIGNoZWNrIGhlcmUgd2FzIGVycm9uZW91cwogICAgICogLSBTdG9yZUVudHJ5Ojpy
ZWxlYXNlUmVxdWVzdCB3YXMgYWx3YXlzIGNhbGxlZCBpZiBlbnRyeSB3YXMgdmFsaWQKICAgICAq
LwoKICAgIGxvZ1JlcXVlc3QoKTsKCiAgICBsb2dnaW5nRW50cnkobnVsbHB0cik7CgogICAgaWYg
KHJlcXVlc3QpCiAgICAgICAgY2hlY2tGYWlsdXJlUmF0aW8ocmVxdWVzdC0+ZXJyb3IuY2F0ZWdv
cnksIGFsLT5oaWVyLmNvZGUpOwoKICAgIGZyZWVSZXNvdXJjZXMoKTsKCiNpZiBVU0VfQURBUFRB
VElPTgogICAgYW5ub3VuY2VJbml0aWF0b3JBYm9ydCh2aXJnaW5IZWFkU291cmNlKTsKCiAgICBp
ZiAoYWRhcHRlZEJvZHlTb3VyY2UgIT0gbnVsbHB0cikKICAgICAgICBzdG9wQ29uc3VtaW5nRnJv
bShhZGFwdGVkQm9keVNvdXJjZSk7CiNlbmRpZgoKICAgIGRlbGV0ZSBjYWxsb3V0Q29udGV4dDsK
CiAgICBpZiAoY29ubl8pCiAgICAgICAgY2JkYXRhUmVmZXJlbmNlRG9uZShjb25uXyk7CgogICAg
LyogbW92aW5nIHRvIHRoZSBuZXh0IGNvbm5lY3Rpb24gaXMgaGFuZGxlZCBieSB0aGUgY29udGV4
dCBmcmVlICovCiAgICBkbGlua0RlbGV0ZSgmYWN0aXZlLCAmQ2xpZW50QWN0aXZlUmVxdWVzdHMp
Owp9CgovKioKICogQ3JlYXRlIGEgcmVxdWVzdCBhbmQga2ljayBpdCBvZmYKICoKICogXHJldHZh
bCAwICAgICBzdWNjZXNzCiAqIFxyZXR2YWwgLTEgICAgZmFpbHVyZQogKgogKiBUT0RPOiBQYXNz
IGluIHRoZSBidWZmZXJzIHRvIGJlIHVzZWQgaW4gdGhlIGluaXRpYWwgUmVhZCByZXF1ZXN0LCBh
cyB0aGV5IGFyZQogKiBkZXRlcm1pbmVkIGJ5IHRoZSB1c2VyCiAqLwppbnQKY2xpZW50QmVnaW5S
ZXF1ZXN0KGNvbnN0IEh0dHBSZXF1ZXN0TWV0aG9kJiBtZXRob2QsIGNoYXIgY29uc3QgKnVybCwg
Q1NDQiAqIHN0cmVhbWNhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgQ1NEICogc3RyZWFtZGV0
YWNoLCBDbGllbnRTdHJlYW1EYXRhIHN0cmVhbWRhdGEsIEh0dHBIZWFkZXIgY29uc3QgKmhlYWRl
ciwKICAgICAgICAgICAgICAgICAgIGNoYXIgKnRhaWxidWYsIHNpemVfdCB0YWlsbGVuLCBjb25z
dCBNYXN0ZXJYYWN0aW9uOjpQb2ludGVyICZteCkKewogICAgc2l6ZV90IHVybF9zejsKICAgIENs
aWVudEh0dHBSZXF1ZXN0ICpodHRwID0gbmV3IENsaWVudEh0dHBSZXF1ZXN0KG51bGxwdHIpOwog
ICAgSHR0cFJlcXVlc3QgKnJlcXVlc3Q7CiAgICBTdG9yZUlPQnVmZmVyIHRlbXBCdWZmZXI7CiAg
ICBpZiAoaHR0cC0+YWwgIT0gbnVsbHB0cikKICAgICAgICBodHRwLT5hbC0+Y2FjaGUuc3RhcnRf
dGltZSA9IGN1cnJlbnRfdGltZTsKICAgIC8qIHRoaXMgaXMgb25seSB1c2VkIHRvIGFkanVzdCB0
aGUgY29ubmVjdGlvbiBvZmZzZXQgaW4gY2xpZW50X3NpZGUuYyAqLwogICAgaHR0cC0+cmVxX3N6
ID0gMDsKICAgIHRlbXBCdWZmZXIubGVuZ3RoID0gdGFpbGxlbjsKICAgIHRlbXBCdWZmZXIuZGF0
YSA9IHRhaWxidWY7CiAgICAvKiBjbGllbnQgc3RyZWFtIHNldHVwICovCiAgICBjbGllbnRTdHJl
YW1Jbml0KCZodHRwLT5jbGllbnRfc3RyZWFtLCBjbGllbnRHZXRNb3JlRGF0YSwgY2xpZW50UmVw
bHlEZXRhY2gsCiAgICAgICAgICAgICAgICAgICAgIGNsaWVudFJlcGx5U3RhdHVzLCBuZXcgY2xp
ZW50UmVwbHlDb250ZXh0KGh0dHApLCBzdHJlYW1jYWxsYmFjaywKICAgICAgICAgICAgICAgICAg
ICAgc3RyZWFtZGV0YWNoLCBzdHJlYW1kYXRhLCB0ZW1wQnVmZmVyKTsKICAgIC8qIG1ha2UgaXQg
dmlzaWJsZSBpbiB0aGUgJ2N1cnJlbnQgYWNjdGl2ZSByZXF1ZXN0cyBsaXN0JyAqLwogICAgLyog
U2V0IGZsYWdzICovCiAgICAvKiBpbnRlcm5hbCByZXF1ZXN0cyBvbmx5IG1ha2VzIHNlbnNlIGlu
IGFuCiAgICAgKiBhY2NlbGVyYXRvciB0b2RheS4gVE9ETzogYWNjZXB0IGZsYWdzID8gKi8KICAg
IGh0dHAtPmZsYWdzLmFjY2VsID0gdHJ1ZTsKICAgIC8qIGFsbG93IHNpemUgZm9yIHVybCByZXdy
aXRpbmcgKi8KICAgIHVybF9zeiA9IHN0cmxlbih1cmwpICsgQ29uZmlnLmFwcGVuZERvbWFpbkxl
biArIDU7CiAgICBodHRwLT51cmkgPSAoY2hhciAqKXhjYWxsb2ModXJsX3N6LCAxKTsKICAgIHN0
cmNweShodHRwLT51cmksIHVybCk7IC8vIFhYWDogcG9sbHV0aW5nIGh0dHAtPnVyaSBiZWZvcmUg
cGFyc2VyIHZhbGlkYXRpb24KCiAgICByZXF1ZXN0ID0gSHR0cFJlcXVlc3Q6OkZyb21VcmxYWFgo
aHR0cC0+dXJpLCBteCwgbWV0aG9kKTsKICAgIGlmICghcmVxdWVzdCkgewogICAgICAgIGRlYnVn
cyg4NSwgNSwgIkludmFsaWQgVVJMOiAiIDw8IGh0dHAtPnVyaSk7CiAgICAgICAgcmV0dXJuIC0x
OwogICAgfQoKICAgIC8qCiAgICAgKiBub3cgdXBkYXRlIHRoZSBoZWFkZXJzIGluIHJlcXVlc3Qg
d2l0aCBvdXIgc3VwcGxpZWQgaGVhZGVycy4KICAgICAqIEh0dHBSZXF1ZXN0OjpGcm9tVXJsKCkg
c2hvdWxkIHJldHVybiBhIGJsYW5rIGhlYWRlciBzZXQsIGJ1dAogICAgICogd2UgdXNlIFVwZGF0
ZSB0byBiZSBzdXJlIG9mIGNvcnJlY3RuZXNzLgogICAgICovCiAgICBpZiAoaGVhZGVyKQogICAg
ICAgIHJlcXVlc3QtPmhlYWRlci51cGRhdGUoaGVhZGVyKTsKCiAgICAvKiBodHRwIHN0cnVjdCBu
b3cgcmVhZHkgKi8KCiAgICAvKgogICAgICogYnVpbGQgbmV3IGhlYWRlciBsaXN0ICo/IFRPRE8K
ICAgICAqLwogICAgcmVxdWVzdC0+ZmxhZ3MuYWNjZWxlcmF0ZWQgPSBodHRwLT5mbGFncy5hY2Nl
bDsKCiAgICAvKiB0aGlzIGlzIGFuIGludGVybmFsbHkgY3JlYXRlZAogICAgICogcmVxdWVzdCwg
bm90IHN1YmplY3QgdG8gYWNjZWxlcmF0aW9uCiAgICAgKiB0YXJnZXQgb3ZlcnJpZGVzICovCiAg
ICAvLyBUT0RPOiBkZXRlY3QgYW5kIGhhbmRsZSBpbnRlcm5hbCByZXF1ZXN0cyBvZiBpbnRlcm5h
bCBvYmplY3RzPwoKICAgIC8qIEludGVybmFsbHkgY3JlYXRlZCByZXF1ZXN0cyBjYW5ub3QgaGF2
ZSBib2RpZXMgdG9kYXkgKi8KICAgIHJlcXVlc3QtPmNvbnRlbnRfbGVuZ3RoID0gMDsKCiAgICBy
ZXF1ZXN0LT5jbGllbnRfYWRkci5zZXROb0FkZHIoKTsKCiNpZiBGT0xMT1dfWF9GT1JXQVJERURf
Rk9SCiAgICByZXF1ZXN0LT5pbmRpcmVjdF9jbGllbnRfYWRkci5zZXROb0FkZHIoKTsKI2VuZGlm
IC8qIEZPTExPV19YX0ZPUldBUkRFRF9GT1IgKi8KCiAgICByZXF1ZXN0LT5teV9hZGRyLnNldE5v
QWRkcigpOyAgIC8qIHVuZGVmaW5lZCBmb3IgaW50ZXJuYWwgcmVxdWVzdHMgKi8KCiAgICByZXF1
ZXN0LT5teV9hZGRyLnBvcnQoMCk7CgogICAgcmVxdWVzdC0+aHR0cF92ZXIgPSBIdHRwOjpQcm90
b2NvbFZlcnNpb24oKTsKCiAgICBodHRwLT5pbml0UmVxdWVzdChyZXF1ZXN0KTsKCiAgICAvKiBv
cHRpb25hbCAtIHNraXAgdGhlIGFjY2VzcyBjaGVjayA/ICovCiAgICBodHRwLT5jYWxsb3V0Q29u
dGV4dCA9IG5ldyBDbGllbnRSZXF1ZXN0Q29udGV4dChodHRwKTsKCiAgICBodHRwLT5jYWxsb3V0
Q29udGV4dC0+aHR0cF9hY2Nlc3NfZG9uZSA9IGZhbHNlOwoKICAgIGh0dHAtPmNhbGxvdXRDb250
ZXh0LT5yZWRpcmVjdF9kb25lID0gdHJ1ZTsKCiAgICBodHRwLT5jYWxsb3V0Q29udGV4dC0+bm9f
Y2FjaGVfZG9uZSA9IHRydWU7CgogICAgaHR0cC0+ZG9DYWxsb3V0cygpOwoKICAgIHJldHVybiAw
Owp9Cgpib29sCkNsaWVudFJlcXVlc3RDb250ZXh0OjpodHRwU3RhdGVJc1ZhbGlkKCkKewogICAg
Q2xpZW50SHR0cFJlcXVlc3QgKmh0dHBfID0gaHR0cDsKCiAgICBpZiAoY2JkYXRhUmVmZXJlbmNl
VmFsaWQoaHR0cF8pKQogICAgICAgIHJldHVybiB0cnVlOwoKICAgIGh0dHAgPSBudWxscHRyOwoK
ICAgIGNiZGF0YVJlZmVyZW5jZURvbmUoaHR0cF8pOwoKICAgIHJldHVybiBmYWxzZTsKfQoKI2lm
IEZPTExPV19YX0ZPUldBUkRFRF9GT1IKLyoqCiAqIGNsaWVudEZvbGxvd1hGb3J3YXJkZWRGb3JD
aGVjaygpIGNoZWNrcyB0aGUgY29udGVudCBvZiBYLUZvcndhcmRlZC1Gb3I6CiAqIGFnYWluc3Qg
dGhlIGZvbGxvd1hGRiBBQ0wsIG9yIGNsZWFucyB1cCBhbmQgcGFzc2VzIGNvbnRyb2wgdG8KICog
Y2xpZW50QWNjZXNzQ2hlY2soKS4KICoKICogVGhlIHRydXN0IG1vZGVsIGhlcmUgaXMgYSBsaXR0
bGUgYW1iaWd1b3VzLiBTbyB0byBjbGFyaWZ5IHRoZSBsb2dpYzoKICogLSB3ZSBtYXkgYWx3YXlz
IHVzZSB0aGUgZGlyZWN0IGNsaWVudCBhZGRyZXNzIGFzIHRoZSBjbGllbnQgSVAuCiAqIC0gdGhl
c2UgdHJ1c3QgdGVzdHMgbWVyZXkgdGVsbCB3aGV0aGVyIHdlIHRydXN0IGdpdmVuIElQIGVub3Vn
aCB0byBiZWxpZXZlIHRoZQogKiAgIElQIHN0cmluZyB3aGljaCBpdCBhcHBlbmRlZCB0byB0aGUg
WC1Gb3J3YXJkZWQtRm9yOiBoZWFkZXIuCiAqIC0gaWYgYXQgYW55IHBvaW50IHdlIGRvbid0IHRy
dXN0IHdoYXQgYW4gSVAgYWRkcyB3ZSBzdG9wIGxvb2tpbmcuCiAqIC0gYXQgdGhhdCBwb2ludCB0
aGUgY3VycmVudCBjb250ZW50cyBvZiBpbmRpcmVjdF9jbGllbnRfYWRkciBhcmUgdGhlIHZhbHVl
IHNldAogKiAgIGJ5IHRoZSBsYXN0IHByZXZpb3VzbHkgdHJ1c3RlZCBJUC4KICogKysgaW5kaXJl
Y3RfY2xpZW50X2FkZHIgY29udGFpbnMgdGhlIHJlbW90ZSBkaXJlY3QgY2xpZW50IGZyb20gdGhl
IHRydXN0ZWQgcGVlcnMgdmlld3BvaW50LgogKi8Kc3RhdGljIHZvaWQKY2xpZW50Rm9sbG93WEZv
cndhcmRlZEZvckNoZWNrKEFjbDo6QW5zd2VyIGFuc3dlciwgdm9pZCAqZGF0YSkKewogICAgQ2xp
ZW50UmVxdWVzdENvbnRleHQgKmNhbGxvdXRDb250ZXh0ID0gKENsaWVudFJlcXVlc3RDb250ZXh0
ICopIGRhdGE7CgogICAgaWYgKCFjYWxsb3V0Q29udGV4dC0+aHR0cFN0YXRlSXNWYWxpZCgpKQog
ICAgICAgIHJldHVybjsKCiAgICBDbGllbnRIdHRwUmVxdWVzdCAqaHR0cCA9IGNhbGxvdXRDb250
ZXh0LT5odHRwOwogICAgSHR0cFJlcXVlc3QgKnJlcXVlc3QgPSBodHRwLT5yZXF1ZXN0OwoKICAg
IGlmIChhbnN3ZXIuYWxsb3dlZCgpICYmIHJlcXVlc3QtPnhfZm9yd2FyZGVkX2Zvcl9pdGVyYXRv
ci5zaXplKCkgIT0gMCkgewoKICAgICAgICAvKgogICAgICAgICAqIFJlbW92ZSB0aGUgbGFzdCBj
b21tYS1kZWxpbWl0ZWQgZWxlbWVudCBmcm9tIHRoZQogICAgICAgICAqIHhfZm9yd2FyZGVkX2Zv
cl9pdGVyYXRvciBhbmQgdXNlIGl0IHRvIHJlcGVhdCB0aGUgY3ljbGUuCiAgICAgICAgICovCiAg
ICAgICAgY29uc3QgY2hhciAqcDsKICAgICAgICBjb25zdCBjaGFyICphc2NpaWFkZHI7CiAgICAg
ICAgaW50IGw7CiAgICAgICAgSXA6OkFkZHJlc3MgYWRkcjsKICAgICAgICBwID0gcmVxdWVzdC0+
eF9mb3J3YXJkZWRfZm9yX2l0ZXJhdG9yLnRlcm1lZEJ1ZigpOwogICAgICAgIGwgPSByZXF1ZXN0
LT54X2ZvcndhcmRlZF9mb3JfaXRlcmF0b3Iuc2l6ZSgpOwoKICAgICAgICAvKgogICAgICAgICog
WFhYIHhfZm9yd2FyZGVkX2Zvcl9pdGVyYXRvciBzaG91bGQgcmVhbGx5IGJlIGEgbGlzdCBvZgog
ICAgICAgICogSVAgYWRkcmVzc2VzLCBidXQgaXQncyBhIFN0cmluZyBpbnN0ZWFkLiAgV2UgaGF2
ZSB0bwogICAgICAgICogd2FsayBiYWNrd2FyZHMgdGhyb3VnaCB0aGUgU3RyaW5nLCBiaXRpbmcg
b2ZmIHRoZSBsYXN0CiAgICAgICAgKiBjb21tYS1kZWxpbWl0ZWQgcGFydCBlYWNoIHRpbWUuICBB
cyBsb25nIGFzIHRoZSBkYXRhIGlzIGluCiAgICAgICAgKiBhIFN0cmluZywgd2Ugc2hvdWxkIHBy
b2JhYmx5IGltcGxlbWVudCBhbmQgdXNlIGEgdmFyaWFudCBvZgogICAgICAgICogc3RyTGlzdEdl
dEl0ZW0oKSB0aGF0IHdhbGtzIGJhY2t3YXJkcyBpbnN0ZWFkIG9mIGZvcndhcmRzCiAgICAgICAg
KiB0aHJvdWdoIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QuICBCdXQgd2UgZG9uJ3QgZXZlbiBkbyB0
aGF0OwogICAgICAgICogd2UganVzdCBkbyB0aGUgd29yayBpbi1saW5lIGhlcmUuCiAgICAgICAg
Ki8KICAgICAgICAvKiBza2lwIHRyYWlsaW5nIHNwYWNlIGFuZCBjb21tYXMgKi8KICAgICAgICB3
aGlsZSAobCA+IDAgJiYgKHBbbC0xXSA9PSAnLCcgfHwgeGlzc3BhY2UocFtsLTFdKSkpCiAgICAg
ICAgICAgIC0tbDsKICAgICAgICByZXF1ZXN0LT54X2ZvcndhcmRlZF9mb3JfaXRlcmF0b3IuY3V0
KGwpOwogICAgICAgIC8qIGxvb2sgZm9yIHN0YXJ0IG9mIGxhc3QgaXRlbSBpbiBsaXN0ICovCiAg
ICAgICAgd2hpbGUgKGwgPiAwICYmICEgKHBbbC0xXSA9PSAnLCcgfHwgeGlzc3BhY2UocFtsLTFd
KSkpCiAgICAgICAgICAgIC0tbDsKICAgICAgICBhc2NpaWFkZHIgPSBwK2w7CiAgICAgICAgaWYg
KChhZGRyID0gYXNjaWlhZGRyKSkgewogICAgICAgICAgICByZXF1ZXN0LT5pbmRpcmVjdF9jbGll
bnRfYWRkciA9IGFkZHI7CiAgICAgICAgICAgIHJlcXVlc3QtPnhfZm9yd2FyZGVkX2Zvcl9pdGVy
YXRvci5jdXQobCk7CiAgICAgICAgICAgIGNhbGxvdXRDb250ZXh0LT5hY2xfY2hlY2tsaXN0ID0g
Y2xpZW50QWNsQ2hlY2tsaXN0Q3JlYXRlKENvbmZpZy5hY2Nlc3NMaXN0LmZvbGxvd1hGRiwgaHR0
cCk7CiAgICAgICAgICAgIGlmICghQ29uZmlnLm9ub2ZmLmFjbF91c2VzX2luZGlyZWN0X2NsaWVu
dCkgewogICAgICAgICAgICAgICAgLyogb3ZlcnJpZGUgdGhlIGRlZmF1bHQgc3JjX2FkZHIgdGVz
dGVkIGlmIHdlIGhhdmUgdG8gZ28gZGVlcGVyIHRoYW4gb25lIGxldmVsIGludG8gWEZGICovCiAg
ICAgICAgICAgICAgICBGaWxsZWQoY2FsbG91dENvbnRleHQtPmFjbF9jaGVja2xpc3QpLT5zcmNf
YWRkciA9IHJlcXVlc3QtPmluZGlyZWN0X2NsaWVudF9hZGRyOwogICAgICAgICAgICB9CiAgICAg
ICAgICAgIGlmICgrK2NhbGxvdXRDb250ZXh0LT5jdXJyZW50WGZmSG9wTnVtYmVyIDwgU1FVSURf
WF9GT1JXQVJERURfRk9SX0hPUF9NQVgpIHsKICAgICAgICAgICAgICAgIGNhbGxvdXRDb250ZXh0
LT5hY2xfY2hlY2tsaXN0LT5ub25CbG9ja2luZ0NoZWNrKGNsaWVudEZvbGxvd1hGb3J3YXJkZWRG
b3JDaGVjaywgZGF0YSk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAg
ICAgICAgICAgY29uc3QgYXV0byBoZWFkZXJOYW1lID0gSHR0cDo6SGVhZGVyTG9va3VwVGFibGUu
bG9va3VwKEh0dHA6OkhkclR5cGU6OlhfRk9SV0FSREVEX0ZPUikubmFtZTsKICAgICAgICAgICAg
ZGVidWdzKDI4LCBEQkdfQ1JJVElDQUwsICJFUlJPUjogSWdub3JpbmcgdHJhaWxpbmcgIiA8PCBo
ZWFkZXJOYW1lIDw8ICIgYWRkcmVzc2VzIiA8PAogICAgICAgICAgICAgICAgICAgRGVidWc6OkV4
dHJhIDw8ICJhZGRyZXNzZXMgYWxsb3dlZCBieSBmb2xsb3dfeF9mb3J3YXJkZWRfZm9yOiAiIDw8
IGNhbGxvdXRDb250ZXh0LT5jdXJyZW50WGZmSG9wTnVtYmVyIDw8CiAgICAgICAgICAgICAgICAg
ICBEZWJ1Zzo6RXh0cmEgPDwgImxhc3QvYWNjZXB0ZWQgYWRkcmVzczogIiA8PCByZXF1ZXN0LT5p
bmRpcmVjdF9jbGllbnRfYWRkciA8PAogICAgICAgICAgICAgICAgICAgRGVidWc6OkV4dHJhIDw8
ICJpZ25vcmVkIHRyYWlsaW5nIGFkZHJlc3NlczogIiA8PCByZXF1ZXN0LT54X2ZvcndhcmRlZF9m
b3JfaXRlcmF0b3IpOwogICAgICAgICAgICAvLyBmYWxsIHRocm91Z2ggdG8gcmVzdW1lIGNsaWVu
dEFjY2Vzc0NoZWNrKCkgcHJvY2Vzc2luZwogICAgICAgIH0KICAgIH0KCiAgICAvKiBjbGVhbiB1
cCwgYW5kIHBhc3MgY29udHJvbCB0byBjbGllbnRBY2Nlc3NDaGVjayAqLwogICAgaWYgKENvbmZp
Zy5vbm9mZi5sb2dfdXNlc19pbmRpcmVjdF9jbGllbnQpIHsKICAgICAgICAvKgogICAgICAgICog
RW5zdXJlIHRoYXQgdGhlIGFjY2VzcyBsb2cgc2hvd3MgdGhlIGluZGlyZWN0IGNsaWVudAogICAg
ICAgICogaW5zdGVhZCBvZiB0aGUgZGlyZWN0IGNsaWVudC4KICAgICAgICAqLwogICAgICAgIGh0
dHAtPmFsLT5jYWNoZS5jYWRkciA9IHJlcXVlc3QtPmluZGlyZWN0X2NsaWVudF9hZGRyOwogICAg
ICAgIGlmIChDb25uU3RhdGVEYXRhICpjb25uID0gaHR0cC0+Z2V0Q29ubigpKQogICAgICAgICAg
ICBjb25uLT5sb2dfYWRkciA9IHJlcXVlc3QtPmluZGlyZWN0X2NsaWVudF9hZGRyOwogICAgfQog
ICAgcmVxdWVzdC0+eF9mb3J3YXJkZWRfZm9yX2l0ZXJhdG9yLmNsZWFuKCk7CiAgICByZXF1ZXN0
LT5mbGFncy5kb25lX2ZvbGxvd194X2ZvcndhcmRlZF9mb3IgPSB0cnVlOwoKICAgIGlmIChhbnN3
ZXIuY29uZmxpY3RlZCgpKSB7CiAgICAgICAgZGVidWdzKDI4LCBEQkdfQ1JJVElDQUwsICJFUlJP
UjogUHJvY2Vzc2luZyBYLUZvcndhcmRlZC1Gb3IuIFN0b3BwaW5nIGF0IElQIGFkZHJlc3M6ICIg
PDwgcmVxdWVzdC0+aW5kaXJlY3RfY2xpZW50X2FkZHIgKTsKICAgIH0KCiAgICAvKiBwcm9jZXNz
IGFjdHVhbCBhY2Nlc3MgQUNMIGFzIG5vcm1hbC4gKi8KICAgIGNhbGxvdXRDb250ZXh0LT5jbGll
bnRBY2Nlc3NDaGVjaygpOwp9CiNlbmRpZiAvKiBGT0xMT1dfWF9GT1JXQVJERURfRk9SICovCgpz
dGF0aWMgdm9pZApob3N0SGVhZGVySXBWZXJpZnlXcmFwcGVyKGNvbnN0IGlwY2FjaGVfYWRkcnMq
IGlhLCBjb25zdCBEbnM6Okxvb2t1cERldGFpbHMgJmRucywgdm9pZCAqZGF0YSkKewogICAgQ2xp
ZW50UmVxdWVzdENvbnRleHQgKmMgPSBzdGF0aWNfY2FzdDxDbGllbnRSZXF1ZXN0Q29udGV4dCo+
KGRhdGEpOwogICAgYy0+aG9zdEhlYWRlcklwVmVyaWZ5KGlhLCBkbnMpOwp9Cgp2b2lkCkNsaWVu
dFJlcXVlc3RDb250ZXh0Ojpob3N0SGVhZGVySXBWZXJpZnkoY29uc3QgaXBjYWNoZV9hZGRycyog
aWEsIGNvbnN0IERuczo6TG9va3VwRGV0YWlscyAmZG5zKQp7CiAgICBDb21tOjpDb25uZWN0aW9u
UG9pbnRlciBjbGllbnRDb25uID0gaHR0cC0+Z2V0Q29ubigpLT5jbGllbnRDb25uZWN0aW9uOwoK
ICAgIC8vIG5vdGUgdGhlIEROUyBkZXRhaWxzIGZvciB0aGUgdHJhbnNhY3Rpb24gc3RhdHMuCiAg
ICBodHRwLT5yZXF1ZXN0LT5yZWNvcmRMb29rdXAoZG5zKTsKCiAgICAvLyBJcyB0aGUgTkFUIGRl
c3RpbmF0aW9uIElQIGluIEROUz8KIyAgICBpZiAoaWEgJiYgaWEtPmhhdmUoY2xpZW50Q29ubi0+
bG9jYWwpKSB7CiMgICAgICAgIGRlYnVncyg4NSwgMywgInZhbGlkYXRlIElQICIgPDwgY2xpZW50
Q29ubi0+bG9jYWwgPDwgIiBwb3NzaWJsZSBmcm9tIEhvc3Q6Iik7CiMgICAgICAgIGh0dHAtPnJl
cXVlc3QtPmZsYWdzLmhvc3RWZXJpZmllZCA9IHRydWU7CiMgICAgICAgIGh0dHAtPmRvQ2FsbG91
dHMoKTsKIyAgICAgICAgcmV0dXJuOwojICAgIH0KIyAgICBkZWJ1Z3MoODUsIDMsICJGQUlMOiB2
YWxpZGF0ZSBJUCAiIDw8IGNsaWVudENvbm4tPmxvY2FsIDw8ICIgcG9zc2libGUgZnJvbSBIb3N0
OiIpOwojICAgIGhvc3RIZWFkZXJWZXJpZnlGYWlsZWQoImxvY2FsIElQIiwgImFueSBkb21haW4g
SVAiKTsKCiAgICBkZWJ1Z3MoODUsIDMsIEhFUkUgPDwgInZhbGlkYXRlIElQICIgPDwgY2xpZW50
Q29ubi0+bG9jYWwgPDwgIiBwb3NzaWJsZSBmcm9tIEhvc3Q6Iik7CiAgaHR0cC0+cmVxdWVzdC0+
ZmxhZ3MuaG9zdFZlcmlmaWVkID0gdHJ1ZTsKICBodHRwLT5kb0NhbGxvdXRzKCk7CiAgcmV0dXJu
Owp9Cgp2b2lkCkNsaWVudFJlcXVlc3RDb250ZXh0Ojpob3N0SGVhZGVyVmVyaWZ5RmFpbGVkKGNv
bnN0IGNoYXIgKkEsIGNvbnN0IGNoYXIgKkIpCnsKICAgIC8vIElQIGFkZHJlc3MgdmFsaWRhdGlv
biBmb3IgSG9zdDogZmFpbGVkLiBBZG1pbiB3YW50cyB0byBpZ25vcmUgdGhlbS4KICAgIC8vIE5Q
OiB3ZSBkbyBub3QgeWV0IGhhbmRsZSBDT05ORUNUIHR1bm5lbHMgd2VsbCwgc28gaWdub3JlIGZv
ciB0aGVtCiAgICBpZiAoIUNvbmZpZy5vbm9mZi5ob3N0U3RyaWN0VmVyaWZ5ICYmIGh0dHAtPnJl
cXVlc3QtPm1ldGhvZCAhPSBIdHRwOjpNRVRIT0RfQ09OTkVDVCkgewogICAgICAgIGRlYnVncyg4
NSwgMywgIlNFQ1VSSVRZIEFMRVJUOiBIb3N0IGhlYWRlciBmb3JnZXJ5IGRldGVjdGVkIG9uICIg
PDwgaHR0cC0+Z2V0Q29ubigpLT5jbGllbnRDb25uZWN0aW9uIDw8CiAgICAgICAgICAgICAgICIg
KCIgPDwgQSA8PCAiIGRvZXMgbm90IG1hdGNoICIgPDwgQiA8PCAiKSBvbiBVUkw6ICIgPDwgaHR0
cC0+cmVxdWVzdC0+ZWZmZWN0aXZlUmVxdWVzdFVyaSgpKTsKCiAgICAgICAgLy8gTVVTVCBOT1Qg
Y2FjaGUgKGZvciBub3cpLiBJdCBpcyB0ZW1wdGluZyB0byBzZXQgZmxhZ3Mubm9DYWNoZSwgYnV0
CiAgICAgICAgLy8gdGhhdCBmbGFnIGlzIGFib3V0IHNhdGlzZnlpbmcgX3RoaXNfIHJlcXVlc3Qu
IFdlIGFyZSBhY3R1YWxseSBPSyB3aXRoCiAgICAgICAgLy8gc2F0aXNmeWluZyB0aGlzIHJlcXVl
c3QgZnJvbSB0aGUgY2FjaGUsIGJ1dCB3YW50IHRvIHByZXZlbnQgX290aGVyXwogICAgICAgIC8v
IHJlcXVlc3RzIGZyb20gYmVpbmcgc2F0aXNmaWVkIHVzaW5nIHRoaXMgcmVzcG9uc2UuCiAgICAg
ICAgaHR0cC0+cmVxdWVzdC0+ZmxhZ3MuY2FjaGFibGUudmV0bygpOwoKICAgICAgICAvLyBYWFg6
IHdoZW4gd2UgaGF2ZSB1cGRhdGVkIHRoZSBjYWNoZSBrZXkgdG8gYmFzZSBvbiByYXctSVAgKyBV
UkkgdGhpcyBjYWNoZWFibGUgbGltaXQgY2FuIGdvLgogICAgICAgIGh0dHAtPnJlcXVlc3QtPmZs
YWdzLmhpZXJhcmNoaWNhbCA9IGZhbHNlOyAvLyBNVVNUIE5PVCBwYXNzIHRvIHBlZXJzIChmb3Ig
bm93KQogICAgICAgIC8vIFhYWDogd2hlbiB3ZSBoYXZlIHNvcnRlZCBvdXQgdGhlIGJlc3Qgd2F5
IHRvIHJlbGF5IHJlcXVlc3RzIHByb3Blcmx5IHRvIHBlZXJzIHRoaXMgaGllcmFyY2hpY2FsIGxp
bWl0IGNhbiBnby4KICAgICAgICBodHRwLT5kb0NhbGxvdXRzKCk7CiAgICAgICAgcmV0dXJuOwog
ICAgfQoKICAgIGRlYnVncyg4NSwgREJHX0lNUE9SVEFOVCwgIlNFQ1VSSVRZIEFMRVJUOiBIb3N0
IGhlYWRlciBmb3JnZXJ5IGRldGVjdGVkIG9uICIgPDwKICAgICAgICAgICBodHRwLT5nZXRDb25u
KCktPmNsaWVudENvbm5lY3Rpb24gPDwgIiAoIiA8PCBBIDw8ICIgZG9lcyBub3QgbWF0Y2ggIiA8
PCBCIDw8ICIpIik7CiAgICBpZiAoY29uc3QgY2hhciAqdWEgPSBodHRwLT5yZXF1ZXN0LT5oZWFk
ZXIuZ2V0U3RyKEh0dHA6OkhkclR5cGU6OlVTRVJfQUdFTlQpKQogICAgICAgIGRlYnVncyg4NSwg
REJHX0lNUE9SVEFOVCwgIlNFQ1VSSVRZIEFMRVJUOiBCeSB1c2VyIGFnZW50OiAiIDw8IHVhKTsK
ICAgIGRlYnVncyg4NSwgREJHX0lNUE9SVEFOVCwgIlNFQ1VSSVRZIEFMRVJUOiBvbiBVUkw6ICIg
PDwgaHR0cC0+cmVxdWVzdC0+ZWZmZWN0aXZlUmVxdWVzdFVyaSgpKTsKCiAgICAvLyBJUCBhZGRy
ZXNzIHZhbGlkYXRpb24gZm9yIEhvc3Q6IGZhaWxlZC4gcmVqZWN0IHRoZSBjb25uZWN0aW9uLgog
ICAgY2xpZW50U3RyZWFtTm9kZSAqbm9kZSA9IChjbGllbnRTdHJlYW1Ob2RlICopaHR0cC0+Y2xp
ZW50X3N0cmVhbS50YWlsLT5wcmV2LT5kYXRhOwogICAgY2xpZW50UmVwbHlDb250ZXh0ICpyZXBD
b250ZXh0ID0gZHluYW1pY19jYXN0PGNsaWVudFJlcGx5Q29udGV4dCAqPihub2RlLT5kYXRhLmdl
dFJhdygpKTsKICAgIGFzc2VydCAocmVwQ29udGV4dCk7CiAgICByZXBDb250ZXh0LT5zZXRSZXBs
eVRvRXJyb3IoRVJSX0NPTkZMSUNUX0hPU1QsIEh0dHA6OnNjQ29uZmxpY3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnVsbHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBodHRwLT5nZXRDb25uKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0
cC0+cmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxscHRyLAojaWYg
VVNFX0FVVEgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwLT5nZXRDb25uKCkg
IT0gbnVsbHB0ciAmJiBodHRwLT5nZXRDb25uKCktPmdldEF1dGgoKSAhPSBudWxscHRyID8KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwLT5nZXRDb25uKCktPmdldEF1dGgoKSA6
IGh0dHAtPnJlcXVlc3QtPmF1dGhfdXNlcl9yZXF1ZXN0KTsKI2Vsc2UKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBudWxscHRyKTsKI2VuZGlmCiAgICBub2RlID0gKGNsaWVudFN0cmVh
bU5vZGUgKilodHRwLT5jbGllbnRfc3RyZWFtLnRhaWwtPmRhdGE7CiAgICBjbGllbnRTdHJlYW1S
ZWFkKG5vZGUsIGh0dHAsIG5vZGUtPnJlYWRCdWZmZXIpOwp9Cgp2b2lkCkNsaWVudFJlcXVlc3RD
b250ZXh0Ojpob3N0SGVhZGVyVmVyaWZ5KCkKewogICAgLy8gUmVxdWlyZSBhIEhvc3Q6IGhlYWRl
ci4KICAgIGNvbnN0IGNoYXIgKmhvc3QgPSBodHRwLT5yZXF1ZXN0LT5oZWFkZXIuZ2V0U3RyKEh0
dHA6OkhkclR5cGU6OkhPU1QpOwoKICAgIGlmICghaG9zdCkgewogICAgICAgIC8vIFRPRE86IGR1
bXAgb3V0IHRoZSBIVFRQLzEuMSBlcnJvciBhYm91dCBtaXNzaW5nIGhvc3QgaGVhZGVyLgogICAg
ICAgIC8vIG90aGVyd2lzZSB0aGlzIGlzIGZpbmUsIGNhbid0IGZvcmdlIGEgaGVhZGVyIHZhbHVl
IHdoZW4gaXRzIG5vdCBldmVuIHNldC4KICAgICAgICBkZWJ1Z3MoODUsIDMsICJ2YWxpZGF0ZSBz
a2lwcGVkIHdpdGggbm8gSG9zdDogaGVhZGVyIHByZXNlbnQuIik7CiAgICAgICAgaHR0cC0+ZG9D
YWxsb3V0cygpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoaHR0cC0+cmVxdWVzdC0+
ZmxhZ3MuaW50ZXJuYWwpIHsKICAgICAgICAvLyBUT0RPOiBraWxsIHRoaXMgd2hlbiBVUkwgaGFu
ZGxpbmcgYWxsb3dzIHBhcnRpYWwgVVJMcyBvdXQgb2YgYWNjZWwgbW9kZQogICAgICAgIC8vICAg
ICAgIGFuZCB3ZSBubyBsb25nZXIgc2NyZXcgd2l0aCB0aGUgVVJMIGp1c3QgdG8gYWRkIG91ciBp
bnRlcm5hbCBob3N0IHRoZXJlCiAgICAgICAgZGVidWdzKDg1LCA2LCAidmFsaWRhdGUgc2tpcHBl
ZCBkdWUgdG8gaW50ZXJuYWwgY29tcG9zaXRlIFVSTC4iKTsKICAgICAgICBodHRwLT5kb0NhbGxv
dXRzKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIExvY2F0ZSBpZiB0aGVyZSBpcyBh
IHBvcnQgYXR0YWNoZWQsIHN0cmlwIHJlYWR5IGZvciBJUCBsb29rdXAKICAgIGNoYXIgKnBvcnRT
dHIgPSBudWxscHRyOwogICAgY2hhciAqaG9zdEIgPSB4c3RyZHVwKGhvc3QpOwogICAgaG9zdCA9
IGhvc3RCOwogICAgaWYgKGhvc3RbMF0gPT0gJ1snKSB7CiAgICAgICAgLy8gSVB2NiBsaXRlcmFs
LgogICAgICAgIHBvcnRTdHIgPSBzdHJjaHIoaG9zdEIsICddJyk7CiAgICAgICAgaWYgKHBvcnRT
dHIgJiYgKigrK3BvcnRTdHIpICE9ICc6JykgewogICAgICAgICAgICBwb3J0U3RyID0gbnVsbHB0
cjsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIC8vIERvbWFpbiBvciBJUHY0IGxpdGVy
YWwgd2l0aCBwb3J0CiAgICAgICAgcG9ydFN0ciA9IHN0cnJjaHIoaG9zdEIsICc6Jyk7CiAgICB9
CgogICAgdWludDE2X3QgcG9ydCA9IDA7CiAgICBpZiAocG9ydFN0cikgewogICAgICAgICpwb3J0
U3RyID0gJ1wwJzsgLy8gc3RyaXAgdGhlICc6JwogICAgICAgIGlmICgqKCsrcG9ydFN0cikgIT0g
J1wwJykgewogICAgICAgICAgICBjaGFyICplbmQgPSBudWxscHRyOwogICAgICAgICAgICBpbnQ2
NF90IHJldCA9IHN0cnRvbGwocG9ydFN0ciwgJmVuZCwgMTApOwogICAgICAgICAgICBpZiAoZW5k
ID09IHBvcnRTdHIgfHwgKmVuZCAhPSAnXDAnIHx8IHJldCA8IDEgfHwgcmV0ID4gMHhGRkZGKSB7
CiAgICAgICAgICAgICAgICAvLyBpbnZhbGlkIHBvcnQgZGV0YWlscy4gUmVwbGFjZSB0aGUgJzon
CiAgICAgICAgICAgICAgICAqKC0tcG9ydFN0cikgPSAnOic7CiAgICAgICAgICAgICAgICBwb3J0
U3RyID0gbnVsbHB0cjsKICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICBwb3J0ID0g
KHJldCAmIDB4RkZGRik7CiAgICAgICAgfQogICAgfQoKICAgIGRlYnVncyg4NSwgMywgInZhbGlk
YXRlIGhvc3Q9IiA8PCBob3N0IDw8ICIsIHBvcnQ9IiA8PCBwb3J0IDw8ICIsIHBvcnRTdHI9IiA8
PCAocG9ydFN0cj9wb3J0U3RyOiJOVUxMIikpOwogICAgaWYgKGh0dHAtPnJlcXVlc3QtPmZsYWdz
LmludGVyY2VwdGVkIHx8IGh0dHAtPnJlcXVlc3QtPmZsYWdzLmludGVyY2VwdFRwcm94eSkgewog
ICAgICAgIC8vIHZlcmlmeSB0aGUgSG9zdDogcG9ydCAoaWYgYW55KSBtYXRjaGVzIHRoZSBhcHBh
cmVudCBkZXN0aW5hdGlvbgogICAgICAgIGlmIChwb3J0U3RyICYmIHBvcnQgIT0gaHR0cC0+Z2V0
Q29ubigpLT5jbGllbnRDb25uZWN0aW9uLT5sb2NhbC5wb3J0KCkpIHsKICAgICAgICAgICAgZGVi
dWdzKDg1LCAzLCAiRkFJTCBvbiB2YWxpZGF0ZSBwb3J0ICIgPDwgaHR0cC0+Z2V0Q29ubigpLT5j
bGllbnRDb25uZWN0aW9uLT5sb2NhbC5wb3J0KCkgPDwKICAgICAgICAgICAgICAgICAgICIgbWF0
Y2hlcyBIb3N0OiBwb3J0ICIgPDwgcG9ydCA8PCAiICgiIDw8IHBvcnRTdHIgPDwgIikiKTsKICAg
ICAgICAgICAgaG9zdEhlYWRlclZlcmlmeUZhaWxlZCgiaW50ZXJjZXB0ZWQgcG9ydCIsIHBvcnRT
dHIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFhYWDogbWF0Y2ggdGhlIHNjaGVt
ZSBkZWZhdWx0IHBvcnQgYWdhaW5zdCB0aGUgYXBwYXJlbnQgZGVzdGluYXRpb24KCiAgICAgICAg
ICAgIC8vIHZlcmlmeSB0aGUgZGVzdGluYXRpb24gRE5TIGlzIG9uZSBvZiB0aGUgSG9zdDogaGVh
ZGVycyBJUHMKICAgICAgICAgICAgaXBjYWNoZV9uYmdldGhvc3RieW5hbWUoaG9zdCwgaG9zdEhl
YWRlcklwVmVyaWZ5V3JhcHBlciwgdGhpcyk7CiAgICAgICAgfQogICAgfSBlbHNlIGlmICghQ29u
ZmlnLm9ub2ZmLmhvc3RTdHJpY3RWZXJpZnkpIHsKICAgICAgICBkZWJ1Z3MoODUsIDMsICJ2YWxp
ZGF0ZSBza2lwcGVkLiIpOwogICAgICAgIGh0dHAtPmRvQ2FsbG91dHMoKTsKICAgIH0gZWxzZSBp
ZiAoc3RybGVuKGhvc3QpICE9IHN0cmxlbihodHRwLT5yZXF1ZXN0LT51cmwuaG9zdCgpKSkgewog
ICAgICAgIC8vIFZlcmlmeSBmb3J3YXJkLXByb3h5IHJlcXVlc3RlZCBVUkwgZG9tYWluIG1hdGNo
ZXMgdGhlIEhvc3Q6IGhlYWRlcgogICAgICAgIGRlYnVncyg4NSwgMywgIkZBSUwgb24gdmFsaWRh
dGUgVVJMIGRvbWFpbiBsZW5ndGggIiA8PCBodHRwLT5yZXF1ZXN0LT51cmwuaG9zdCgpIDw8ICIg
bWF0Y2hlcyBIb3N0OiAiIDw8IGhvc3QpOwogICAgICAgIGhvc3RIZWFkZXJWZXJpZnlGYWlsZWQo
aG9zdCwgaHR0cC0+cmVxdWVzdC0+dXJsLmhvc3QoKSk7CiAgICB9IGVsc2UgaWYgKG1hdGNoRG9t
YWluTmFtZShob3N0LCBodHRwLT5yZXF1ZXN0LT51cmwuaG9zdCgpKSAhPSAwKSB7CiAgICAgICAg
Ly8gVmVyaWZ5IGZvcndhcmQtcHJveHkgcmVxdWVzdGVkIFVSTCBkb21haW4gbWF0Y2hlcyB0aGUg
SG9zdDogaGVhZGVyCiAgICAgICAgZGVidWdzKDg1LCAzLCAiRkFJTCBvbiB2YWxpZGF0ZSBVUkwg
ZG9tYWluICIgPDwgaHR0cC0+cmVxdWVzdC0+dXJsLmhvc3QoKSA8PCAiIG1hdGNoZXMgSG9zdDog
IiA8PCBob3N0KTsKICAgICAgICBob3N0SGVhZGVyVmVyaWZ5RmFpbGVkKGhvc3QsIGh0dHAtPnJl
cXVlc3QtPnVybC5ob3N0KCkpOwogICAgfSBlbHNlIGlmIChwb3J0U3RyICYmIHBvcnQgIT0gaHR0
cC0+cmVxdWVzdC0+dXJsLnBvcnQoKSkgewogICAgICAgIC8vIFZlcmlmeSBmb3J3YXJkLXByb3h5
IHJlcXVlc3RlZCBVUkwgZG9tYWluIG1hdGNoZXMgdGhlIEhvc3Q6IGhlYWRlcgogICAgICAgIGRl
YnVncyg4NSwgMywgIkZBSUwgb24gdmFsaWRhdGUgVVJMIHBvcnQgIiA8PCBodHRwLT5yZXF1ZXN0
LT51cmwucG9ydCgpIDw8ICIgbWF0Y2hlcyBIb3N0OiBwb3J0ICIgPDwgcG9ydFN0cik7CiAgICAg
ICAgaG9zdEhlYWRlclZlcmlmeUZhaWxlZCgiVVJMIHBvcnQiLCBwb3J0U3RyKTsKICAgIH0gZWxz
ZSBpZiAoIXBvcnRTdHIgJiYgaHR0cC0+cmVxdWVzdC0+bWV0aG9kICE9IEh0dHA6Ok1FVEhPRF9D
T05ORUNUICYmIGh0dHAtPnJlcXVlc3QtPnVybC5wb3J0KCkgIT0gaHR0cC0+cmVxdWVzdC0+dXJs
LmdldFNjaGVtZSgpLmRlZmF1bHRQb3J0KCkpIHsKICAgICAgICAvLyBWZXJpZnkgZm9yd2FyZC1w
cm94eSByZXF1ZXN0ZWQgVVJMIGRvbWFpbiBtYXRjaGVzIHRoZSBIb3N0OiBoZWFkZXIKICAgICAg
ICAvLyBTcGVjaWFsIGNhc2U6IHdlIGRvbid0IGhhdmUgYSBkZWZhdWx0LXBvcnQgdG8gY2hlY2sg
Zm9yIENPTk5FQ1QuIEFzc3VtZSBVUkwgaXMgY29ycmVjdC4KICAgICAgICBkZWJ1Z3MoODUsIDMs
ICJGQUlMIG9uIHZhbGlkYXRlIFVSTCBwb3J0ICIgPDwgaHR0cC0+cmVxdWVzdC0+dXJsLnBvcnQo
KSA8PCAiIG1hdGNoZXMgSG9zdDogZGVmYXVsdCBwb3J0ICIgPDwgaHR0cC0+cmVxdWVzdC0+dXJs
LmdldFNjaGVtZSgpLmRlZmF1bHRQb3J0KCkpOwogICAgICAgIGhvc3RIZWFkZXJWZXJpZnlGYWls
ZWQoIlVSTCBwb3J0IiwgImRlZmF1bHQgcG9ydCIpOwogICAgfSBlbHNlIHsKICAgICAgICAvLyBP
a2F5IG5vIHByb2JsZW0uCiAgICAgICAgZGVidWdzKDg1LCAzLCAidmFsaWRhdGUgcGFzc2VkLiIp
OwogICAgICAgIGh0dHAtPnJlcXVlc3QtPmZsYWdzLmhvc3RWZXJpZmllZCA9IHRydWU7CiAgICAg
ICAgaHR0cC0+ZG9DYWxsb3V0cygpOwogICAgfQogICAgc2FmZV9mcmVlKGhvc3RCKTsKfQoKLyog
VGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGV4dGVybmFsIHVzZXJzIG9mIHRoZSBjbGllbnRf
c2lkZSByb3V0aW5lcyAqLwp2b2lkCkNsaWVudFJlcXVlc3RDb250ZXh0OjpjbGllbnRBY2Nlc3ND
aGVjaygpCnsKI2lmIEZPTExPV19YX0ZPUldBUkRFRF9GT1IKICAgIGlmICghaHR0cC0+cmVxdWVz
dC0+ZmxhZ3MuZG9uZUZvbGxvd1hmZigpICYmCiAgICAgICAgICAgIENvbmZpZy5hY2Nlc3NMaXN0
LmZvbGxvd1hGRiAmJgogICAgICAgICAgICBodHRwLT5yZXF1ZXN0LT5oZWFkZXIuaGFzKEh0dHA6
OkhkclR5cGU6OlhfRk9SV0FSREVEX0ZPUikpIHsKCiAgICAgICAgLyogd2UgYWx3YXlzIHRydXN0
IHRoZSBkaXJlY3QgY2xpZW50IGFkZHJlc3MgZm9yIGFjdHVhbCB1c2UgKi8KICAgICAgICBodHRw
LT5yZXF1ZXN0LT5pbmRpcmVjdF9jbGllbnRfYWRkciA9IGh0dHAtPnJlcXVlc3QtPmNsaWVudF9h
ZGRyOwogICAgICAgIGh0dHAtPnJlcXVlc3QtPmluZGlyZWN0X2NsaWVudF9hZGRyLnBvcnQoMCk7
CgogICAgICAgIC8qIHNldHVwIHRoZSBYRkYgaXRlcmF0b3IgZm9yIHByb2Nlc3NpbmcgKi8KICAg
ICAgICBodHRwLT5yZXF1ZXN0LT54X2ZvcndhcmRlZF9mb3JfaXRlcmF0b3IgPSBodHRwLT5yZXF1
ZXN0LT5oZWFkZXIuZ2V0TGlzdChIdHRwOjpIZHJUeXBlOjpYX0ZPUldBUkRFRF9GT1IpOwoKICAg
ICAgICAvKiBiZWdpbiBieSBjaGVja2luZyB0byBzZWUgaWYgd2UgdHJ1c3QgZGlyZWN0IGNsaWVu
dCBlbm91Z2ggdG8gd2FsayBYRkYgKi8KICAgICAgICBhY2xfY2hlY2tsaXN0ID0gY2xpZW50QWNs
Q2hlY2tsaXN0Q3JlYXRlKENvbmZpZy5hY2Nlc3NMaXN0LmZvbGxvd1hGRiwgaHR0cCk7CiAgICAg
ICAgYWNsX2NoZWNrbGlzdC0+bm9uQmxvY2tpbmdDaGVjayhjbGllbnRGb2xsb3dYRm9yd2FyZGVk
Rm9yQ2hlY2ssIHRoaXMpOwogICAgICAgIHJldHVybjsKICAgIH0KI2VuZGlmCgogICAgaWYgKENv
bmZpZy5hY2Nlc3NMaXN0Lmh0dHApIHsKICAgICAgICBhY2xfY2hlY2tsaXN0ID0gY2xpZW50QWNs
Q2hlY2tsaXN0Q3JlYXRlKENvbmZpZy5hY2Nlc3NMaXN0Lmh0dHAsIGh0dHApOwogICAgICAgIGFj
bF9jaGVja2xpc3QtPm5vbkJsb2NraW5nQ2hlY2soY2xpZW50QWNjZXNzQ2hlY2tEb25lV3JhcHBl
ciwgdGhpcyk7CiAgICB9IGVsc2UgewogICAgICAgIGRlYnVncygwLCBEQkdfQ1JJVElDQUwsICJO
byBodHRwX2FjY2VzcyBjb25maWd1cmF0aW9uIGZvdW5kLiBUaGlzIHdpbGwgYmxvY2sgQUxMIHRy
YWZmaWMiKTsKICAgICAgICBjbGllbnRBY2Nlc3NDaGVja0RvbmUoQUNDRVNTX0RFTklFRCk7CiAg
ICB9Cn0KCi8qKgogKiBJZGVudGljYWwgaW4gb3BlcmF0aW9uIHRvIGNsaWVudEFjY2Vzc0NoZWNr
KCkgYnV0IHBlcmZvcm1lZCBsYXRlciB1c2luZyBkaWZmZXJlbnQgY29uZmlndXJlZCBBQ0wgbGlz
dC4KICogVGhlIGRlZmF1bHQgaGVyZSBpcyB0byBhbGxvdyBhbGwuIFNpbmNlIHRoZSBlYXJsaWVy
IGh0dHBfYWNjZXNzIHNob3VsZCBkbyBhIGRlZmF1bHQgZGVueSBhbGwuCiAqIFRoaXMgY2hlY2sg
aXMganVzdCBmb3IgYSBsYXN0LW1pbnV0ZSBkZW5pYWwgYmFzZWQgb24gYWRhcHRlZCByZXF1ZXN0
IGhlYWRlcnMuCiAqLwp2b2lkCkNsaWVudFJlcXVlc3RDb250ZXh0OjpjbGllbnRBY2Nlc3NDaGVj
azIoKQp7CiAgICBpZiAoQ29uZmlnLmFjY2Vzc0xpc3QuYWRhcHRlZF9odHRwKSB7CiAgICAgICAg
YWNsX2NoZWNrbGlzdCA9IGNsaWVudEFjbENoZWNrbGlzdENyZWF0ZShDb25maWcuYWNjZXNzTGlz
dC5hZGFwdGVkX2h0dHAsIGh0dHApOwogICAgICAgIGFjbF9jaGVja2xpc3QtPm5vbkJsb2NraW5n
Q2hlY2soY2xpZW50QWNjZXNzQ2hlY2tEb25lV3JhcHBlciwgdGhpcyk7CiAgICB9IGVsc2Ugewog
ICAgICAgIGRlYnVncyg4NSwgMiwgIk5vIGFkYXB0ZWRfaHR0cF9hY2Nlc3MgY29uZmlndXJhdGlv
bi4gZGVmYXVsdDogQUxMT1ciKTsKICAgICAgICBjbGllbnRBY2Nlc3NDaGVja0RvbmUoQUNDRVNT
X0FMTE9XRUQpOwogICAgfQp9Cgp2b2lkCmNsaWVudEFjY2Vzc0NoZWNrRG9uZVdyYXBwZXIoQWNs
OjpBbnN3ZXIgYW5zd2VyLCB2b2lkICpkYXRhKQp7CiAgICBDbGllbnRSZXF1ZXN0Q29udGV4dCAq
Y2FsbG91dENvbnRleHQgPSAoQ2xpZW50UmVxdWVzdENvbnRleHQgKikgZGF0YTsKCiAgICBpZiAo
IWNhbGxvdXRDb250ZXh0LT5odHRwU3RhdGVJc1ZhbGlkKCkpCiAgICAgICAgcmV0dXJuOwoKICAg
IGNhbGxvdXRDb250ZXh0LT5jbGllbnRBY2Nlc3NDaGVja0RvbmUoYW5zd2VyKTsKfQoKdm9pZApD
bGllbnRSZXF1ZXN0Q29udGV4dDo6Y2xpZW50QWNjZXNzQ2hlY2tEb25lKGNvbnN0IEFjbDo6QW5z
d2VyICZhbnN3ZXIpCnsKICAgIGFjbF9jaGVja2xpc3QgPSBudWxscHRyOwogICAgZXJyX3R5cGUg
cGFnZV9pZDsKICAgIEh0dHA6OlN0YXR1c0NvZGUgc3RhdHVzOwogICAgZGVidWdzKDg1LCAyLCAi
VGhlIHJlcXVlc3QgIiA8PCBodHRwLT5yZXF1ZXN0LT5tZXRob2QgPDwgJyAnIDw8CiAgICAgICAg
ICAgaHR0cC0+dXJpIDw8ICIgaXMgIiA8PCBhbnN3ZXIgPDwKICAgICAgICAgICAiOyBsYXN0IEFD
TCBjaGVja2VkOiAiIDw8IChBY2xNYXRjaGVkTmFtZSA/IEFjbE1hdGNoZWROYW1lIDogIltub25l
XSIpKTsKCiNpZiBVU0VfQVVUSAogICAgY2hhciBjb25zdCAqcHJveHlfYXV0aF9tc2cgPSAiPG51
bGw+IjsKICAgIGlmIChodHRwLT5nZXRDb25uKCkgIT0gbnVsbHB0ciAmJiBodHRwLT5nZXRDb25u
KCktPmdldEF1dGgoKSAhPSBudWxscHRyKQogICAgICAgIHByb3h5X2F1dGhfbXNnID0gaHR0cC0+
Z2V0Q29ubigpLT5nZXRBdXRoKCktPmRlbnlNZXNzYWdlKCI8bnVsbD4iKTsKICAgIGVsc2UgaWYg
KGh0dHAtPnJlcXVlc3QtPmF1dGhfdXNlcl9yZXF1ZXN0ICE9IG51bGxwdHIpCiAgICAgICAgcHJv
eHlfYXV0aF9tc2cgPSBodHRwLT5yZXF1ZXN0LT5hdXRoX3VzZXJfcmVxdWVzdC0+ZGVueU1lc3Nh
Z2UoIjxudWxsPiIpOwojZW5kaWYKCiAgICBpZiAoIWFuc3dlci5hbGxvd2VkKCkpIHsKICAgICAg
ICAvLyBhdXRoIGhhcyBhIGdyYWNlIHBlcmlvZCB3aGVyZSBjcmVkZW50aWFscyBjYW4gYmUgZXhw
aXJlZCBidXQgb2theSBub3QgdG8gY2hhbGxlbmdlLgoKICAgICAgICAvKiBTZW5kIGFuIGF1dGgg
Y2hhbGxlbmdlIG9yIGVycm9yICovCiAgICAgICAgLy8gWFhYOiBkbyB3ZSBzdGlsbCBuZWVkIGFj
bElzUHJveHlBdXRoKCkgPwogICAgICAgIGJvb2wgYXV0aF9jaGFsbGVuZ2UgPSAoYW5zd2VyID09
IEFDQ0VTU19BVVRIX1JFUVVJUkVEIHx8IGFjbElzUHJveHlBdXRoKEFjbE1hdGNoZWROYW1lKSk7
CiAgICAgICAgZGVidWdzKDg1LCA1LCAiQWNjZXNzIERlbmllZDogIiA8PCBodHRwLT51cmkpOwog
ICAgICAgIGRlYnVncyg4NSwgNSwgIkFjbE1hdGNoZWROYW1lID0gIiA8PCAoQWNsTWF0Y2hlZE5h
bWUgPyBBY2xNYXRjaGVkTmFtZSA6ICI8bnVsbD4iKSk7CiNpZiBVU0VfQVVUSAogICAgICAgIGlm
IChhdXRoX2NoYWxsZW5nZSkKICAgICAgICAgICAgZGVidWdzKDMzLCA1LCAiUHJveHkgQXV0aCBN
ZXNzYWdlID0gIiA8PCAocHJveHlfYXV0aF9tc2cgPyBwcm94eV9hdXRoX21zZyA6ICI8bnVsbD4i
KSk7CiNlbmRpZgoKICAgICAgICAvKgogICAgICAgICAqIE5PVEU6IGdldCBwYWdlX2lkIGhlcmUs
IGJhc2VkIG9uIEFjbE1hdGNoZWROYW1lIGJlY2F1c2UgaWYKICAgICAgICAgKiBVU0VfREVMQVlf
UE9PTFMgaXMgZW5hYmxlZCwgdGhlbiBBY2xNYXRjaGVkTmFtZSBnZXRzIGNsb2JiZXJlZCBpbgog
ICAgICAgICAqIHRoZSBjbGllbnRDcmVhdGVTdG9yZUVudHJ5KCkgY2FsbCBqdXN0IGJlbG93LiAg
UGVkcm8gUmliZWlybwogICAgICAgICAqIDxwcmliZWlyb0Bpc2VsLnB0PgogICAgICAgICAqLwog
ICAgICAgIHBhZ2VfaWQgPSBhY2xHZXREZW55SW5mb1BhZ2UoJkNvbmZpZy5kZW55SW5mb0xpc3Qs
IEFjbE1hdGNoZWROYW1lLCBhbnN3ZXIgIT0gQUNDRVNTX0FVVEhfUkVRVUlSRUQpOwoKICAgICAg
ICBodHRwLT51cGRhdGVMb2dnaW5nVGFncyhMT0dfVENQX0RFTklFRCk7CgogICAgICAgIGlmIChh
dXRoX2NoYWxsZW5nZSkgewojaWYgVVNFX0FVVEgKICAgICAgICAgICAgaWYgKGh0dHAtPnJlcXVl
c3QtPmZsYWdzLnNzbEJ1bXBlZCkgewogICAgICAgICAgICAgICAgLypTU0wgQnVtcGVkIHJlcXVl
c3QsIGF1dGhlbnRpY2F0aW9uIGlzIG5vdCBwb3NzaWJsZSovCiAgICAgICAgICAgICAgICBzdGF0
dXMgPSBIdHRwOjpzY0ZvcmJpZGRlbjsKICAgICAgICAgICAgfSBlbHNlIGlmICghaHR0cC0+Zmxh
Z3MuYWNjZWwpIHsKICAgICAgICAgICAgICAgIC8qIFByb3h5IGF1dGhvcmlzYXRpb24gbmVlZGVk
ICovCiAgICAgICAgICAgICAgICBzdGF0dXMgPSBIdHRwOjpzY1Byb3h5QXV0aGVudGljYXRpb25S
ZXF1aXJlZDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8qIFdXVyBhdXRo
b3Jpc2F0aW9uIG5lZWRlZCAqLwogICAgICAgICAgICAgICAgc3RhdHVzID0gSHR0cDo6c2NVbmF1
dGhvcml6ZWQ7CiAgICAgICAgICAgIH0KI2Vsc2UKICAgICAgICAgICAgLy8gbmVlZCBhdXRoLCBi
dXQgbm90IHBvc3NpYmxlIHRvIGRvLgogICAgICAgICAgICBzdGF0dXMgPSBIdHRwOjpzY0ZvcmJp
ZGRlbjsKI2VuZGlmCiAgICAgICAgICAgIGlmIChwYWdlX2lkID09IEVSUl9OT05FKQogICAgICAg
ICAgICAgICAgcGFnZV9pZCA9IEVSUl9DQUNIRV9BQ0NFU1NfREVOSUVEOwogICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgIHN0YXR1cyA9IEh0dHA6OnNjRm9yYmlkZGVuOwoKICAgICAgICAgICAg
aWYgKHBhZ2VfaWQgPT0gRVJSX05PTkUpCiAgICAgICAgICAgICAgICBwYWdlX2lkID0gRVJSX0FD
Q0VTU19ERU5JRUQ7CiAgICAgICAgfQoKICAgICAgICBlcnJvciA9IGNsaWVudEJ1aWxkRXJyb3Io
cGFnZV9pZCwgc3RhdHVzLCBudWxscHRyLCBodHRwLT5nZXRDb25uKCksIGh0dHAtPnJlcXVlc3Qs
IGh0dHAtPmFsKTsKCiNpZiBVU0VfQVVUSAogICAgICAgIGVycm9yLT5hdXRoX3VzZXJfcmVxdWVz
dCA9CiAgICAgICAgICAgIGh0dHAtPmdldENvbm4oKSAhPSBudWxscHRyICYmIGh0dHAtPmdldENv
bm4oKS0+Z2V0QXV0aCgpICE9IG51bGxwdHIgPwogICAgICAgICAgICBodHRwLT5nZXRDb25uKCkt
PmdldEF1dGgoKSA6IGh0dHAtPnJlcXVlc3QtPmF1dGhfdXNlcl9yZXF1ZXN0OwojZW5kaWYKCiAg
ICAgICAgcmVhZE5leHRSZXF1ZXN0ID0gdHJ1ZTsKICAgIH0KCiAgICAvKiBBQ0NFU1NfQUxMT1dF
RCBjb250aW51ZXMgaGVyZSAuLi4gKi8KICAgIHhmcmVlKGh0dHAtPnVyaSk7CiAgICBodHRwLT51
cmkgPSBTQnVmVG9Dc3RyaW5nKGh0dHAtPnJlcXVlc3QtPmVmZmVjdGl2ZVJlcXVlc3RVcmkoKSk7
CiAgICBodHRwLT5kb0NhbGxvdXRzKCk7Cn0KCiNpZiBVU0VfQURBUFRBVElPTgp2b2lkCkNsaWVu
dEh0dHBSZXF1ZXN0Ojpub3RlQWRhcHRhdGlvbkFjbENoZWNrRG9uZShBZGFwdGF0aW9uOjpTZXJ2
aWNlR3JvdXBQb2ludGVyIGcpCnsKICAgIGRlYnVncyg5MywzLCB0aGlzIDw8ICIgYWRhcHRhdGlv
bkFjbENoZWNrRG9uZSBjYWxsZWQiKTsKCiNpZiBJQ0FQX0NMSUVOVAogICAgQWRhcHRhdGlvbjo6
SWNhcDo6SGlzdG9yeTo6UG9pbnRlciBpaCA9IHJlcXVlc3QtPmljYXBIaXN0b3J5KCk7CiAgICBp
ZiAoaWggIT0gbnVsbHB0cikgewogICAgICAgIGlmIChnZXRDb25uKCkgIT0gbnVsbHB0ciAmJiBn
ZXRDb25uKCktPmNsaWVudENvbm5lY3Rpb24gIT0gbnVsbHB0cikgewogICAgICAgICAgICBpaC0+
cmZjOTMxID0gZ2V0Q29ubigpLT5jbGllbnRDb25uZWN0aW9uLT5yZmM5MzE7CiNpZiBVU0VfT1BF
TlNTTAogICAgICAgICAgICBpZiAoZ2V0Q29ubigpLT5jbGllbnRDb25uZWN0aW9uLT5pc09wZW4o
KSkgewogICAgICAgICAgICAgICAgaWgtPnNzbHVzZXIgPSBzc2xHZXRVc2VyRW1haWwoZmRfdGFi
bGVbZ2V0Q29ubigpLT5jbGllbnRDb25uZWN0aW9uLT5mZF0uc3NsLmdldCgpKTsKICAgICAgICAg
ICAgfQojZW5kaWYKICAgICAgICB9CiAgICAgICAgaWgtPmxvZ191cmkgPSBsb2dfdXJpOwogICAg
ICAgIGloLT5yZXFfc3ogPSByZXFfc3o7CiAgICB9CiNlbmRpZgoKICAgIGlmICghZykgewogICAg
ICAgIGRlYnVncyg4NSwzLCAibm8gYWRhcHRhdGlvbiBuZWVkZWQiKTsKICAgICAgICBkb0NhbGxv
dXRzKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHN0YXJ0QWRhcHRhdGlvbihnKTsKfQoK
I2VuZGlmCgpzdGF0aWMgdm9pZApjbGllbnRSZWRpcmVjdEFjY2Vzc0NoZWNrRG9uZShBY2w6OkFu
c3dlciBhbnN3ZXIsIHZvaWQgKmRhdGEpCnsKICAgIENsaWVudFJlcXVlc3RDb250ZXh0ICpjb250
ZXh0ID0gKENsaWVudFJlcXVlc3RDb250ZXh0ICopZGF0YTsKICAgIENsaWVudEh0dHBSZXF1ZXN0
ICpodHRwID0gY29udGV4dC0+aHR0cDsKICAgIGNvbnRleHQtPmFjbF9jaGVja2xpc3QgPSBudWxs
cHRyOwoKICAgIGlmIChhbnN3ZXIuYWxsb3dlZCgpKQogICAgICAgIHJlZGlyZWN0U3RhcnQoaHR0
cCwgY2xpZW50UmVkaXJlY3REb25lV3JhcHBlciwgY29udGV4dCk7CiAgICBlbHNlIHsKICAgICAg
ICBIZWxwZXI6OlJlcGx5IGNvbnN0IG5pbFJlcGx5KEhlbHBlcjo6RXJyb3IpOwogICAgICAgIGNv
bnRleHQtPmNsaWVudFJlZGlyZWN0RG9uZShuaWxSZXBseSk7CiAgICB9Cn0KCnZvaWQKQ2xpZW50
UmVxdWVzdENvbnRleHQ6OmNsaWVudFJlZGlyZWN0U3RhcnQoKQp7CiAgICBkZWJ1Z3MoMzMsIDUs
ICInIiA8PCBodHRwLT51cmkgPDwgIiciKTsKICAgIGh0dHAtPmFsLT5zeW5jTm90ZXMoaHR0cC0+
cmVxdWVzdCk7CiAgICBpZiAoQ29uZmlnLmFjY2Vzc0xpc3QucmVkaXJlY3RvcikgewogICAgICAg
IGFjbF9jaGVja2xpc3QgPSBjbGllbnRBY2xDaGVja2xpc3RDcmVhdGUoQ29uZmlnLmFjY2Vzc0xp
c3QucmVkaXJlY3RvciwgaHR0cCk7CiAgICAgICAgYWNsX2NoZWNrbGlzdC0+bm9uQmxvY2tpbmdD
aGVjayhjbGllbnRSZWRpcmVjdEFjY2Vzc0NoZWNrRG9uZSwgdGhpcyk7CiAgICB9IGVsc2UKICAg
ICAgICByZWRpcmVjdFN0YXJ0KGh0dHAsIGNsaWVudFJlZGlyZWN0RG9uZVdyYXBwZXIsIHRoaXMp
Owp9CgovKioKICogVGhpcyBtZXRob2RzIGhhbmRsZXMgQWNjZXNzIGNoZWNrcyByZXN1bHQgb2Yg
U3RvcmVJZCBhY2Nlc3MgbGlzdC4KICogV2lsbCBoYW5kbGUgYXMgIkVSUiIgKG5vIGNoYW5nZSkg
aW4gYSBjYXNlIEFjY2VzcyBpcyBub3QgYWxsb3dlZC4KICovCnN0YXRpYyB2b2lkCmNsaWVudFN0
b3JlSWRBY2Nlc3NDaGVja0RvbmUoQWNsOjpBbnN3ZXIgYW5zd2VyLCB2b2lkICpkYXRhKQp7CiAg
ICBDbGllbnRSZXF1ZXN0Q29udGV4dCAqY29udGV4dCA9IHN0YXRpY19jYXN0PENsaWVudFJlcXVl
c3RDb250ZXh0ICo+KGRhdGEpOwogICAgQ2xpZW50SHR0cFJlcXVlc3QgKmh0dHAgPSBjb250ZXh0
LT5odHRwOwogICAgY29udGV4dC0+YWNsX2NoZWNrbGlzdCA9IG51bGxwdHI7CgogICAgaWYgKGFu
c3dlci5hbGxvd2VkKCkpCiAgICAgICAgc3RvcmVJZFN0YXJ0KGh0dHAsIGNsaWVudFN0b3JlSWRE
b25lV3JhcHBlciwgY29udGV4dCk7CiAgICBlbHNlIHsKICAgICAgICBkZWJ1Z3MoODUsIDMsICJh
Y2Nlc3MgZGVuaWVkIGV4cGVjdGVkIEVSUiByZXBseSBoYW5kbGluZzogIiA8PCBhbnN3ZXIpOwog
ICAgICAgIEhlbHBlcjo6UmVwbHkgY29uc3QgbmlsUmVwbHkoSGVscGVyOjpFcnJvcik7CiAgICAg
ICAgY29udGV4dC0+Y2xpZW50U3RvcmVJZERvbmUobmlsUmVwbHkpOwogICAgfQp9CgovKioKICog
U3RhcnQgbG9jYXRpbmcgYW4gYWx0ZXJuYXRpdmUgc3RvcmFnZSBJRCBzdHJpbmcgKGlmIGFueSkg
ZnJvbSBhZG1pbgogKiBjb25maWd1cmVkIGhlbHBlciBwcm9ncmFtLiBUaGlzIGlzIGFuIGFzeW5j
aHJvbm91cyBvcGVyYXRpb24gdGVybWluYXRpbmcgaW4KICogQ2xpZW50UmVxdWVzdENvbnRleHQ6
OmNsaWVudFN0b3JlSWREb25lKCkgd2hlbiBjb21wbGV0ZWQuCiAqLwp2b2lkCkNsaWVudFJlcXVl
c3RDb250ZXh0OjpjbGllbnRTdG9yZUlkU3RhcnQoKQp7CiAgICBkZWJ1Z3MoMzMsIDUsIiciIDw8
IGh0dHAtPnVyaSA8PCAiJyIpOwoKICAgIGlmIChDb25maWcuYWNjZXNzTGlzdC5zdG9yZV9pZCkg
ewogICAgICAgIGFjbF9jaGVja2xpc3QgPSBjbGllbnRBY2xDaGVja2xpc3RDcmVhdGUoQ29uZmln
LmFjY2Vzc0xpc3Quc3RvcmVfaWQsIGh0dHApOwogICAgICAgIGFjbF9jaGVja2xpc3QtPm5vbkJs
b2NraW5nQ2hlY2soY2xpZW50U3RvcmVJZEFjY2Vzc0NoZWNrRG9uZSwgdGhpcyk7CiAgICB9IGVs
c2UKICAgICAgICBzdG9yZUlkU3RhcnQoaHR0cCwgY2xpZW50U3RvcmVJZERvbmVXcmFwcGVyLCB0
aGlzKTsKfQoKc3RhdGljIGludApjbGllbnRIaWVyYXJjaGljYWwoQ2xpZW50SHR0cFJlcXVlc3Qg
KiBodHRwKQp7CiAgICBIdHRwUmVxdWVzdCAqcmVxdWVzdCA9IGh0dHAtPnJlcXVlc3Q7CiAgICBI
dHRwUmVxdWVzdE1ldGhvZCBtZXRob2QgPSByZXF1ZXN0LT5tZXRob2Q7CgogICAgLy8gaW50ZXJj
ZXB0ZWQgcmVxdWVzdHMgTVVTVCBOT1QgKHlldCkgYmUgc2VudCB0byBwZWVycyB1bmxlc3MgdmVy
aWZpZWQKICAgIGlmICghcmVxdWVzdC0+ZmxhZ3MuaG9zdFZlcmlmaWVkICYmIChyZXF1ZXN0LT5m
bGFncy5pbnRlcmNlcHRlZCB8fCByZXF1ZXN0LT5mbGFncy5pbnRlcmNlcHRUcHJveHkpKQogICAg
ICAgIHJldHVybiAwOwoKICAgIC8qCiAgICAgKiBJTVMgbmVlZHMgYSBwcml2YXRlIGtleSwgc28g
d2UgY2FuIHVzZSB0aGUgaGllcmFyY2h5IGZvciBJTVMgb25seSBpZiBvdXIKICAgICAqIG5laWdo
Ym9ycyBzdXBwb3J0IHByaXZhdGUga2V5cwogICAgICovCgogICAgaWYgKHJlcXVlc3QtPmZsYWdz
LmltcyAmJiAhbmVpZ2hib3JzX2RvX3ByaXZhdGVfa2V5cykKICAgICAgICByZXR1cm4gMDsKCiAg
ICAvKgogICAgICogVGhpcyBpcyBpbmNvcnJlY3Q6IGF1dGhlbnRpY2F0aW5nIHJlcXVlc3RzIGNh
biBiZSBzZW50IHZpYSBhIGhpZXJhcmNoeQogICAgICogKHRoZXkgY2FuIGV2ZW4gYmUgY2FjaGVk
IGlmIHRoZSBjb3JyZWN0IGhlYWRlcnMgYXJlIHNldCBvbiB0aGUgcmVwbHkpCiAgICAgKi8KICAg
IGlmIChyZXF1ZXN0LT5mbGFncy5hdXRoKQogICAgICAgIHJldHVybiAwOwoKICAgIGlmIChtZXRo
b2QgPT0gSHR0cDo6TUVUSE9EX1RSQUNFKQogICAgICAgIHJldHVybiAxOwoKICAgIGlmIChtZXRo
b2QgIT0gSHR0cDo6TUVUSE9EX0dFVCkKICAgICAgICByZXR1cm4gMDsKCiAgICBpZiAocmVxdWVz
dC0+ZmxhZ3MubG9vcERldGVjdGVkKQogICAgICAgIHJldHVybiAwOwoKICAgIGlmIChyZXF1ZXN0
LT51cmwuZ2V0U2NoZW1lKCkgPT0gQW55UDo6UFJPVE9fSFRUUCkKICAgICAgICByZXR1cm4gbWV0
aG9kLnJlc3BNYXliZUNhY2hlYWJsZSgpOwoKICAgIGlmIChyZXF1ZXN0LT51cmwuZ2V0U2NoZW1l
KCkgPT0gQW55UDo6UFJPVE9fQ0FDSEVfT0JKRUNUKQogICAgICAgIHJldHVybiAwOwoKICAgIHJl
dHVybiAxOwp9CgpzdGF0aWMgdm9pZApjbGllbnRDaGVja1Bpbm5pbmcoQ2xpZW50SHR0cFJlcXVl
c3QgKiBodHRwKQp7CiAgICBIdHRwUmVxdWVzdCAqcmVxdWVzdCA9IGh0dHAtPnJlcXVlc3Q7CiAg
ICBIdHRwSGVhZGVyICpyZXFfaGRyID0gJnJlcXVlc3QtPmhlYWRlcjsKICAgIENvbm5TdGF0ZURh
dGEgKmh0dHBfY29ubiA9IGh0dHAtPmdldENvbm4oKTsKCiAgICAvKiBJbnRlcm5hbCByZXF1ZXN0
cyBzdWNoIGFzIHRob3NlIGZyb20gRVNJIGluY2x1ZGVzIG1heSBiZSB3aXRob3V0CiAgICAgKiBh
IGNsaWVudCBjb25uZWN0aW9uCiAgICAgKi8KICAgIGlmICghaHR0cF9jb25uKQogICAgICAgIHJl
dHVybjsKCiAgICByZXF1ZXN0LT5mbGFncy5jb25uZWN0aW9uQXV0aERpc2FibGVkID0gaHR0cF9j
b25uLT5wb3J0LT5jb25uZWN0aW9uX2F1dGhfZGlzYWJsZWQ7CiAgICBpZiAoIXJlcXVlc3QtPmZs
YWdzLmNvbm5lY3Rpb25BdXRoRGlzYWJsZWQpIHsKICAgICAgICBpZiAoQ29tbTo6SXNDb25uT3Bl
bihodHRwX2Nvbm4tPnBpbm5pbmcuc2VydmVyQ29ubmVjdGlvbikpIHsKICAgICAgICAgICAgaWYg
KGh0dHBfY29ubi0+cGlubmluZy5hdXRoKSB7CiAgICAgICAgICAgICAgICByZXF1ZXN0LT5mbGFn
cy5jb25uZWN0aW9uQXV0aCA9IHRydWU7CiAgICAgICAgICAgICAgICByZXF1ZXN0LT5mbGFncy5h
dXRoID0gdHJ1ZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJlcXVlc3Qt
PmZsYWdzLmNvbm5lY3Rpb25Qcm94eUF1dGggPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAg
ICAgIC8vIFRoZXNlIHNob3VsZCBhbHJlYWR5IGJlIGxpbmtlZCBjb3JyZWN0bHkuCiAgICAgICAg
ICAgIGFzc2VydChyZXF1ZXN0LT5jbGllbnRDb25uZWN0aW9uTWFuYWdlciA9PSBodHRwX2Nvbm4p
OwogICAgICAgIH0KICAgIH0KCiAgICAvKiBjaGVjayBpZiBjb25uZWN0aW9uIGF1dGggaXMgdXNl
ZCwgYW5kIGZsYWcgYXMgY2FuZGlkYXRlIGZvciBwaW5uaW5nCiAgICAgKiBpbiBzdWNoIGNhc2Uu
CiAgICAgKiBOb3RlOiB3ZSBtYXkgbmVlZCB0byBzZXQgZmxhZ3MuY29ubmVjdGlvbkF1dGggZXZl
biBpZiB0aGUgY29ubmVjdGlvbgogICAgICogaXMgYWxyZWFkeSBwaW5uZWQgaWYgaXQgd2FzIHBp
bm5lZCBlYXJsaWVyIGR1ZSB0byBwcm94eSBhdXRoCiAgICAgKi8KICAgIGlmICghcmVxdWVzdC0+
ZmxhZ3MuY29ubmVjdGlvbkF1dGgpIHsKICAgICAgICBpZiAocmVxX2hkci0+aGFzKEh0dHA6Okhk
clR5cGU6OkFVVEhPUklaQVRJT04pIHx8IHJlcV9oZHItPmhhcyhIdHRwOjpIZHJUeXBlOjpQUk9Y
WV9BVVRIT1JJWkFUSU9OKSkgewogICAgICAgICAgICBIdHRwSGVhZGVyUG9zIHBvcyA9IEh0dHBI
ZWFkZXJJbml0UG9zOwogICAgICAgICAgICBIdHRwSGVhZGVyRW50cnkgKmU7CiAgICAgICAgICAg
IGludCBtYXlfcGluID0gMDsKICAgICAgICAgICAgd2hpbGUgKChlID0gcmVxX2hkci0+Z2V0RW50
cnkoJnBvcykpKSB7CiAgICAgICAgICAgICAgICBpZiAoZS0+aWQgPT0gSHR0cDo6SGRyVHlwZTo6
QVVUSE9SSVpBVElPTiB8fCBlLT5pZCA9PSBIdHRwOjpIZHJUeXBlOjpQUk9YWV9BVVRIT1JJWkFU
SU9OKSB7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdmFsdWUgPSBlLT52YWx1ZS5y
YXdCdWYoKTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RybmNhc2VjbXAodmFsdWUsICJOVExN
ICIsIDUpID09IDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHJuY2FzZWNtcCh2YWx1ZSwgIk5lZ290aWF0ZSAiLCAxMCkgPT0gMAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0cm5jYXNlY21wKHZhbHVlLCAiS2VyYmVyb3MgIiwgOSkgPT0gMCkgewogICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoZS0+aWQgPT0gSHR0cDo6SGRyVHlwZTo6QVVUSE9SSVpBVElPTikgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC0+ZmxhZ3MuY29ubmVjdGlvbkF1dGgg
PSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5X3BpbiA9IDE7CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1
ZXN0LT5mbGFncy5jb25uZWN0aW9uUHJveHlBdXRoID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1heV9waW4gPSAxOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAg
IGlmIChtYXlfcGluICYmICFyZXF1ZXN0LT5waW5uZWRDb25uZWN0aW9uKCkpIHsKICAgICAgICAg
ICAgICAgIC8vIFRoZXNlIHNob3VsZCBhbHJlYWR5IGJlIGxpbmtlZCBjb3JyZWN0bHkuIEp1c3Qg
bmVlZCB0aGUgU2VydmVyQ29ubmVjdGlvbiB0byBwaW5uLgogICAgICAgICAgICAgICAgYXNzZXJ0
KHJlcXVlc3QtPmNsaWVudENvbm5lY3Rpb25NYW5hZ2VyID09IGh0dHBfY29ubik7CiAgICAgICAg
ICAgIH0KICAgICAgICB9CiAgICB9Cn0KCnN0YXRpYyB2b2lkCmNsaWVudEludGVycHJldFJlcXVl
c3RIZWFkZXJzKENsaWVudEh0dHBSZXF1ZXN0ICogaHR0cCkKewogICAgSHR0cFJlcXVlc3QgKnJl
cXVlc3QgPSBodHRwLT5yZXF1ZXN0OwogICAgSHR0cEhlYWRlciAqcmVxX2hkciA9ICZyZXF1ZXN0
LT5oZWFkZXI7CiAgICBib29sIG5vX2NhY2hlID0gZmFsc2U7CgogICAgcmVxdWVzdC0+aW1zbGVu
ID0gLTE7CiAgICByZXF1ZXN0LT5pbXMgPSByZXFfaGRyLT5nZXRUaW1lKEh0dHA6OkhkclR5cGU6
OklGX01PRElGSUVEX1NJTkNFKTsKCiAgICBpZiAocmVxdWVzdC0+aW1zID4gMCkKICAgICAgICBy
ZXF1ZXN0LT5mbGFncy5pbXMgPSB0cnVlOwoKICAgIGlmICghcmVxdWVzdC0+ZmxhZ3MuaWdub3Jl
Q2MpIHsKICAgICAgICBpZiAocmVxdWVzdC0+Y2FjaGVfY29udHJvbCkgewogICAgICAgICAgICBp
ZiAocmVxdWVzdC0+Y2FjaGVfY29udHJvbC0+aGFzTm9DYWNoZSgpKQogICAgICAgICAgICAgICAg
bm9fY2FjaGU9dHJ1ZTsKCiAgICAgICAgICAgIC8vIFJGQyAyNjE2OiB0cmVhdCBQcmFnbWE6bm8t
Y2FjaGUgYXMgaWYgaXQgd2FzIENhY2hlLUNvbnRyb2w6bm8tY2FjaGUgd2hlbiBDYWNoZS1Db250
cm9sIGlzIG1pc3NpbmcKICAgICAgICB9IGVsc2UgaWYgKHJlcV9oZHItPmhhcyhIdHRwOjpIZHJU
eXBlOjpQUkFHTUEpKQogICAgICAgICAgICBub19jYWNoZSA9IHJlcV9oZHItPmhhc0xpc3RNZW1i
ZXIoSHR0cDo6SGRyVHlwZTo6UFJBR01BLCJuby1jYWNoZSIsJywnKTsKICAgIH0KCiAgICBpZiAo
cmVxdWVzdC0+bWV0aG9kID09IEh0dHA6Ok1FVEhPRF9PVEhFUikgewogICAgICAgIG5vX2NhY2hl
PXRydWU7CiAgICB9CgogICAgaWYgKG5vX2NhY2hlKSB7CiNpZiBVU0VfSFRUUF9WSU9MQVRJT05T
CgogICAgICAgIGlmIChDb25maWcub25vZmYucmVsb2FkX2ludG9faW1zKQogICAgICAgICAgICBy
ZXF1ZXN0LT5mbGFncy5ub2NhY2hlSGFjayA9IHRydWU7CiAgICAgICAgZWxzZSBpZiAocmVmcmVz
aF9ub2NhY2hlX2hhY2spCiAgICAgICAgICAgIHJlcXVlc3QtPmZsYWdzLm5vY2FjaGVIYWNrID0g
dHJ1ZTsKICAgICAgICBlbHNlCiNlbmRpZgoKICAgICAgICAgICAgcmVxdWVzdC0+ZmxhZ3Mubm9D
YWNoZSA9IHRydWU7CiAgICB9CgogICAgLyogaWdub3JlIHJhbmdlIGhlYWRlciBpbiBub24tR0VU
cyBvciBub24tSEVBRHMgKi8KICAgIGlmIChyZXF1ZXN0LT5tZXRob2QgPT0gSHR0cDo6TUVUSE9E
X0dFVCB8fCByZXF1ZXN0LT5tZXRob2QgPT0gSHR0cDo6TUVUSE9EX0hFQUQpIHsKICAgICAgICAv
LyBYWFg6IGluaXRpYWxpemUgaWYgd2UgZ290IGhlcmUgd2l0aG91dCBIdHRwUmVxdWVzdDo6cGFy
c2VIZWFkZXIoKQogICAgICAgIGlmICghcmVxdWVzdC0+cmFuZ2UpCiAgICAgICAgICAgIHJlcXVl
c3QtPnJhbmdlID0gcmVxX2hkci0+Z2V0UmFuZ2UoKTsKCiAgICAgICAgaWYgKHJlcXVlc3QtPnJh
bmdlKSB7CiAgICAgICAgICAgIHJlcXVlc3QtPmZsYWdzLmlzUmFuZ2VkID0gdHJ1ZTsKICAgICAg
ICAgICAgY2xpZW50U3RyZWFtTm9kZSAqbm9kZSA9IChjbGllbnRTdHJlYW1Ob2RlICopaHR0cC0+
Y2xpZW50X3N0cmVhbS50YWlsLT5kYXRhOwogICAgICAgICAgICAvKiBYWFg6IFRoaXMgaXMgc3Vi
b3B0aW1hbC4gV2Ugc2hvdWxkIGdpdmUgdGhlIHN0cmVhbSB0aGUgcmFuZ2Ugc2V0LAogICAgICAg
ICAgICAgKiBhbmQgdGhlcmVieSBsZXQgdGhlIHRvcCBvZiB0aGUgc3RyZWFtIHNldCB0aGUgb2Zm
c2V0IHdoZW4gdGhlCiAgICAgICAgICAgICAqIHNpemUgYmVjb21lcyBrbm93bi4gQXMgaXQgaXMs
IHdlIHdpbGwgZW5kIHVwIHJlcXVlc3RpbmcgZnJvbSAwCiAgICAgICAgICAgICAqIGZvciBldmV5
IC1YIHJhbmdlIHNwZWNpZmljYXRpb24uCiAgICAgICAgICAgICAqIFJCQyAtIHRoaXMgbWF5IGJl
IHNvbWV3aGF0IHdyb25nLiBXZSBzaG91bGQgcHJvYmFibHkgc2V0IHRoZSByYW5nZQogICAgICAg
ICAgICAgKiBpdGVyIHVwIGF0IHRoaXMgcG9pbnQuCiAgICAgICAgICAgICAqLwogICAgICAgICAg
ICBub2RlLT5yZWFkQnVmZmVyLm9mZnNldCA9IHJlcXVlc3QtPnJhbmdlLT5sb3dlc3RPZmZzZXQo
MCk7CiAgICAgICAgfQogICAgfQoKICAgIC8qIE9ubHkgSEVBRCBhbmQgR0VUIHJlcXVlc3RzIHBl
cm1pdCBhIFJhbmdlIG9yIFJlcXVlc3QtUmFuZ2UgaGVhZGVyLgogICAgICogSWYgdGhlc2UgaGVh
ZGVycyBhcHBlYXIgb24gYW55IG90aGVyIHR5cGUgb2YgcmVxdWVzdCwgZGVsZXRlIHRoZW0gbm93
LgogICAgICovCiAgICBlbHNlIHsKICAgICAgICByZXFfaGRyLT5kZWxCeUlkKEh0dHA6OkhkclR5
cGU6OlJBTkdFKTsKICAgICAgICByZXFfaGRyLT5kZWxCeUlkKEh0dHA6OkhkclR5cGU6OlJFUVVF
U1RfUkFOR0UpOwogICAgICAgIHJlcXVlc3QtPmlnbm9yZVJhbmdlKCJuZWl0aGVyIEhFQUQgbm9y
IEdFVCIpOwogICAgfQoKICAgIGlmIChyZXFfaGRyLT5oYXMoSHR0cDo6SGRyVHlwZTo6QVVUSE9S
SVpBVElPTikpCiAgICAgICAgcmVxdWVzdC0+ZmxhZ3MuYXV0aCA9IHRydWU7CgogICAgY2xpZW50
Q2hlY2tQaW5uaW5nKGh0dHApOwoKICAgIGlmICghcmVxdWVzdC0+dXJsLnVzZXJJbmZvKCkuaXNF
bXB0eSgpKQogICAgICAgIHJlcXVlc3QtPmZsYWdzLmF1dGggPSB0cnVlOwoKICAgIGlmIChyZXFf
aGRyLT5oYXMoSHR0cDo6SGRyVHlwZTo6VklBKSkgewogICAgICAgIFN0cmluZyBzID0gcmVxX2hk
ci0+Z2V0TGlzdChIdHRwOjpIZHJUeXBlOjpWSUEpOwogICAgICAgIC8qCiAgICAgICAgICogVGhp
c0NhY2hlIGNhbm5vdCBiZSBhIG1lbWJlciBvZiBWaWEgaGVhZGVyLCAiMS4xIFRoaXNDYWNoZSIg
Y2FuLgogICAgICAgICAqIE5vdGUgVGhpc0NhY2hlMiBoYXMgYSBzcGFjZSBwcmVwZW5kZWQgdG8g
dGhlIGhvc3RuYW1lIHNvIHdlIGRvbid0CiAgICAgICAgICogYWNjaWRlbnRhbGx5IG1hdGNoIHN1
cGVyLWRvbWFpbnMuCiAgICAgICAgICovCgogICAgICAgIGlmIChzdHJMaXN0SXNTdWJzdHIoJnMs
IFRoaXNDYWNoZTIsICcsJykpIHsKICAgICAgICAgICAgcmVxdWVzdC0+ZmxhZ3MubG9vcERldGVj
dGVkID0gdHJ1ZTsKICAgICAgICB9CgojaWYgVVNFX0ZPUldfVklBX0RCCiAgICAgICAgZnZkYkNv
dW50VmlhKFN0cmluZ1RvU0J1ZihzKSk7CgojZW5kaWYKCiAgICAgICAgcy5jbGVhbigpOwogICAg
fQoKICAgIC8vIGhlYWRlcnMgb25seSByZWxldmFudCB0byByZXZlcnNlLXByb3h5CiAgICBpZiAo
cmVxdWVzdC0+ZmxhZ3MuYWNjZWxlcmF0ZWQpIHsKICAgICAgICAvLyBjaGVjayBmb3IgYSBjZG4t
aW5mbyBtZW1iZXIgd2l0aCBhIGNkbi1pZCBtYXRjaGluZyBzdXJyb2dhdGVfaWQKICAgICAgICAv
LyBYWFg6IEh0dHBIZWFkZXI6Omhhc0xpc3RNZW1iZXIoKSBkb2VzIG5vdCBoYW5kbGUgT1dTIGFy
b3VuZCAiOyIgeWV0CiAgICAgICAgaWYgKHJlcV9oZHItPmhhc0xpc3RNZW1iZXIoSHR0cDo6SGRy
VHlwZTo6Q0ROX0xPT1AsIENvbmZpZy5BY2NlbC5zdXJyb2dhdGVfaWQsICcsJykpCiAgICAgICAg
ICAgIHJlcXVlc3QtPmZsYWdzLmxvb3BEZXRlY3RlZCA9IHRydWU7CiAgICB9CgogICAgaWYgKHJl
cXVlc3QtPmZsYWdzLmxvb3BEZXRlY3RlZCkgewogICAgICAgIGRlYnVnT2JqKDMzLCBEQkdfSU1Q
T1JUQU5ULCAiV0FSTklORzogRm9yd2FyZGluZyBsb29wIGRldGVjdGVkIGZvcjpcbiIsCiAgICAg
ICAgICAgICAgICAgcmVxdWVzdCwgKE9ialBhY2tNZXRob2QpICYgaHR0cFJlcXVlc3RQYWNrKTsK
ICAgIH0KCiNpZiBVU0VfRk9SV19WSUFfREIKCiAgICBpZiAocmVxX2hkci0+aGFzKEh0dHA6Okhk
clR5cGU6OlhfRk9SV0FSREVEX0ZPUikpIHsKICAgICAgICBTdHJpbmcgcyA9IHJlcV9oZHItPmdl
dExpc3QoSHR0cDo6SGRyVHlwZTo6WF9GT1JXQVJERURfRk9SKTsKICAgICAgICBmdmRiQ291bnRG
b3J3YXJkZWQoU3RyaW5nVG9TQnVmKHMpKTsKICAgICAgICBzLmNsZWFuKCk7CiAgICB9CgojZW5k
aWYKCiAgICBpZiAoaHR0cC0+cmVxdWVzdC0+bWF5YmVDYWNoZWFibGUoKSkKICAgICAgICByZXF1
ZXN0LT5mbGFncy5jYWNoYWJsZS5zdXBwb3J0KCk7CiAgICBlbHNlCiAgICAgICAgcmVxdWVzdC0+
ZmxhZ3MuY2FjaGFibGUudmV0bygpOwoKICAgIGlmIChjbGllbnRIaWVyYXJjaGljYWwoaHR0cCkp
CiAgICAgICAgcmVxdWVzdC0+ZmxhZ3MuaGllcmFyY2hpY2FsID0gdHJ1ZTsKCiAgICBkZWJ1Z3Mo
ODUsIDUsICJjbGllbnRJbnRlcnByZXRSZXF1ZXN0SGVhZGVyczogUkVRX05PQ0FDSEUgPSAiIDw8
CiAgICAgICAgICAgKHJlcXVlc3QtPmZsYWdzLm5vQ2FjaGUgPyAiU0VUIiA6ICJOT1QgU0VUIikp
OwogICAgZGVidWdzKDg1LCA1LCAiY2xpZW50SW50ZXJwcmV0UmVxdWVzdEhlYWRlcnM6IFJFUV9D
QUNIQUJMRSA9ICIgPDwKICAgICAgICAgICAocmVxdWVzdC0+ZmxhZ3MuY2FjaGFibGUgPyAiU0VU
IiA6ICJOT1QgU0VUIikpOwogICAgZGVidWdzKDg1LCA1LCAiY2xpZW50SW50ZXJwcmV0UmVxdWVz
dEhlYWRlcnM6IFJFUV9ISUVSQVJDSElDQUwgPSAiIDw8CiAgICAgICAgICAgKHJlcXVlc3QtPmZs
YWdzLmhpZXJhcmNoaWNhbCA/ICJTRVQiIDogIk5PVCBTRVQiKSk7Cgp9Cgp2b2lkCmNsaWVudFJl
ZGlyZWN0RG9uZVdyYXBwZXIodm9pZCAqZGF0YSwgY29uc3QgSGVscGVyOjpSZXBseSAmcmVzdWx0
KQp7CiAgICBDbGllbnRSZXF1ZXN0Q29udGV4dCAqY2FsbG91dENvbnRleHQgPSAoQ2xpZW50UmVx
dWVzdENvbnRleHQgKilkYXRhOwoKICAgIGlmICghY2FsbG91dENvbnRleHQtPmh0dHBTdGF0ZUlz
VmFsaWQoKSkKICAgICAgICByZXR1cm47CgogICAgY2FsbG91dENvbnRleHQtPmNsaWVudFJlZGly
ZWN0RG9uZShyZXN1bHQpOwp9Cgp2b2lkCmNsaWVudFN0b3JlSWREb25lV3JhcHBlcih2b2lkICpk
YXRhLCBjb25zdCBIZWxwZXI6OlJlcGx5ICZyZXN1bHQpCnsKICAgIENsaWVudFJlcXVlc3RDb250
ZXh0ICpjYWxsb3V0Q29udGV4dCA9IChDbGllbnRSZXF1ZXN0Q29udGV4dCAqKWRhdGE7CgogICAg
aWYgKCFjYWxsb3V0Q29udGV4dC0+aHR0cFN0YXRlSXNWYWxpZCgpKQogICAgICAgIHJldHVybjsK
CiAgICBjYWxsb3V0Q29udGV4dC0+Y2xpZW50U3RvcmVJZERvbmUocmVzdWx0KTsKfQoKdm9pZApD
bGllbnRSZXF1ZXN0Q29udGV4dDo6Y2xpZW50UmVkaXJlY3REb25lKGNvbnN0IEhlbHBlcjo6UmVw
bHkgJnJlcGx5KQp7CiAgICBIdHRwUmVxdWVzdCAqb2xkX3JlcXVlc3QgPSBodHRwLT5yZXF1ZXN0
OwogICAgZGVidWdzKDg1LCA1LCAiJyIgPDwgaHR0cC0+dXJpIDw8ICInIHJlc3VsdD0iIDw8IHJl
cGx5KTsKICAgIGFzc2VydChyZWRpcmVjdF9zdGF0ZSA9PSBSRURJUkVDVF9QRU5ESU5HKTsKICAg
IHJlZGlyZWN0X3N0YXRlID0gUkVESVJFQ1RfRE9ORTsKCiAgICAvLyBQdXQgaGVscGVyIHJlc3Bv
bnNlIE5vdGVzIGludG8gdGhlIHRyYW5zYWN0aW9uIHN0YXRlIHJlY29yZCAoQUxFKSBldmVudHVh
bGx5CiAgICAvLyBkbyBpdCBlYXJseSB0byBlbnN1cmUgdGhhdCBubyBtYXR0ZXIgd2hhdCB0aGUg
b3V0Y29tZSB0aGUgbm90ZXMgYXJlIHByZXNlbnQuCiAgICBpZiAoaHR0cC0+YWwpCiAgICAgICAg
aHR0cC0+YWwtPnN5bmNOb3RlcyhvbGRfcmVxdWVzdCk7CgogICAgVXBkYXRlUmVxdWVzdE5vdGVz
KGh0dHAtPmdldENvbm4oKSwgKm9sZF9yZXF1ZXN0LCByZXBseS5ub3Rlcyk7CgogICAgc3dpdGNo
IChyZXBseS5yZXN1bHQpIHsKICAgIGNhc2UgSGVscGVyOjpUaW1lZE91dDoKICAgICAgICBpZiAo
Q29uZmlnLm9uVXJsUmV3cml0ZVRpbWVvdXQuYWN0aW9uICE9IHRvdXRBY3RCeXBhc3MpIHsKICAg
ICAgICAgICAgc3RhdGljIGNvbnN0IGF1dG8gZCA9IE1ha2VOYW1lZEVycm9yRGV0YWlsKCJSRURJ
UkVDVE9SX1RJTUVET1VUIik7CiAgICAgICAgICAgIGh0dHAtPmNhbGxvdXRzRXJyb3IoRVJSX0dB
VEVXQVlfRkFJTFVSRSwgZCk7CiAgICAgICAgICAgIGRlYnVncyg4NSwgREJHX0lNUE9SVEFOVCwg
IkVSUk9SOiBVUkwgcmV3cml0ZSBoZWxwZXI6IFRpbWVkb3V0Iik7CiAgICAgICAgfQogICAgICAg
IGJyZWFrOwoKICAgIGNhc2UgSGVscGVyOjpVbmtub3duOgogICAgY2FzZSBIZWxwZXI6OlRUOgog
ICAgICAgIC8vIEhhbmRsZXIgaW4gcmVkaXJlY3QuY2Mgc2hvdWxkIGhhdmUgYWxyZWFkeSBtYXBw
ZWQgVW5rbm93bgogICAgICAgIC8vIElGIGl0IGNvbnRhaW5lZCB2YWxpZCBlbnRyeSBmb3IgdGhl
IG9sZCBVUkwtcmV3cml0ZSBoZWxwZXIgcHJvdG9jb2wKICAgICAgICBkZWJ1Z3MoODUsIERCR19J
TVBPUlRBTlQsICJFUlJPUjogVVJMIHJld3JpdGUgaGVscGVyIHJldHVybmVkIGludmFsaWQgcmVz
dWx0IGNvZGUuIFdyb25nIGhlbHBlcj8gIiA8PCByZXBseSk7CiAgICAgICAgYnJlYWs7CgogICAg
Y2FzZSBIZWxwZXI6OkJyb2tlbkhlbHBlcjoKICAgICAgICBkZWJ1Z3MoODUsIERCR19JTVBPUlRB
TlQsICJFUlJPUjogVVJMIHJld3JpdGUgaGVscGVyOiAiIDw8IHJlcGx5KTsKICAgICAgICBicmVh
azsKCiAgICBjYXNlIEhlbHBlcjo6RXJyb3I6CiAgICAgICAgLy8gbm8gY2hhbmdlIHRvIGJlIGRv
bmUuCiAgICAgICAgYnJlYWs7CgogICAgY2FzZSBIZWxwZXI6Ok9rYXk6IHsKICAgICAgICAvLyAj
MTogcmVkaXJlY3Qgd2l0aCBhIHNwZWNpZmljIHN0YXR1cyBjb2RlICAgIE9LIHN0YXR1cz1OTk4g
dXJsPSIuLi4iCiAgICAgICAgLy8gIzI6IHJlZGlyZWN0IHdpdGggYSBkZWZhdWx0IHN0YXR1cyBj
b2RlICAgICBPSyB1cmw9Ii4uLiIKICAgICAgICAvLyAjMzogcmUtd3JpdGUgdGhlIFVSTCAgICAg
ICAgICAgICAgICAgICAgICAgIE9LIHJld3JpdGUtdXJsPSIuLi4iCgogICAgICAgIGNvbnN0IGNo
YXIgKnN0YXR1c05vdGUgPSByZXBseS5ub3Rlcy5maW5kRmlyc3QoInN0YXR1cyIpOwogICAgICAg
IGNvbnN0IGNoYXIgKnVybE5vdGUgPSByZXBseS5ub3Rlcy5maW5kRmlyc3QoInVybCIpOwoKICAg
ICAgICBpZiAodXJsTm90ZSAhPSBudWxscHRyKSB7CiAgICAgICAgICAgIC8vIEhUVFAgcHJvdG9j
b2wgcmVkaXJlY3QgdG8gYmUgZG9uZS4KCiAgICAgICAgICAgIC8vIFRPRE86IGNoYW5nZSBkZWZh
dWx0IHJlZGlyZWN0IHN0YXR1cyBmb3IgYXBwcm9wcmlhdGUgcmVxdWVzdHMKICAgICAgICAgICAg
Ly8gU3F1aWQgZGVmYXVsdHMgdG8gMzAyIHN0YXR1cyBmb3Igbm93IGZvciBiZXR0ZXIgY29tcGF0
aWJpbGl0eSB3aXRoIG9sZCBjbGllbnRzLgogICAgICAgICAgICAvLyBIVFRQLzEuMCBjbGllbnQg
c2hvdWxkIGdldCAzMDIgKEh0dHA6OnNjRm91bmQpCiAgICAgICAgICAgIC8vIEhUVFAvMS4xIGNs
aWVudCBjb250YWN0aW5nIHJldmVyc2UtcHJveHkgc2hvdWxkIGdldCAzMDcgKEh0dHA6OnNjVGVt
cG9yYXJ5UmVkaXJlY3QpCiAgICAgICAgICAgIC8vIEhUVFAvMS4xIGNsaWVudCBiZWluZyBkaXZl
cnRlZCBieSBmb3J3YXJkLXByb3h5IHNob3VsZCBnZXQgMzAzIChIdHRwOjpzY1NlZU90aGVyKQog
ICAgICAgICAgICBIdHRwOjpTdGF0dXNDb2RlIHN0YXR1cyA9IEh0dHA6OnNjRm91bmQ7CiAgICAg
ICAgICAgIGlmIChzdGF0dXNOb3RlICE9IG51bGxwdHIpIHsKICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKiByZXN1bHQgPSBzdGF0dXNOb3RlOwogICAgICAgICAgICAgICAgc3RhdHVzID0gc3Rh
dGljX2Nhc3Q8SHR0cDo6U3RhdHVzQ29kZT4oYXRvaShyZXN1bHQpKTsKICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBIdHRwOjpzY01vdmVkUGVybWFuZW50bHkKICAgICAg
ICAgICAgICAgICAgICB8fCBzdGF0dXMgPT0gSHR0cDo6c2NGb3VuZAogICAgICAgICAgICAgICAg
ICAgIHx8IHN0YXR1cyA9PSBIdHRwOjpzY1NlZU90aGVyCiAgICAgICAgICAgICAgICAgICAgfHwg
c3RhdHVzID09IEh0dHA6OnNjUGVybWFuZW50UmVkaXJlY3QKICAgICAgICAgICAgICAgICAgICB8
fCBzdGF0dXMgPT0gSHR0cDo6c2NUZW1wb3JhcnlSZWRpcmVjdCkgewogICAgICAgICAgICAgICAg
aHR0cC0+cmVkaXJlY3Quc3RhdHVzID0gc3RhdHVzOwogICAgICAgICAgICAgICAgaHR0cC0+cmVk
aXJlY3QubG9jYXRpb24gPSB4c3RyZHVwKHVybE5vdGUpOwogICAgICAgICAgICAgICAgLy8gVE9E
TzogdmFsaWRhdGUgdGhlIFVSTCBwcm9kdWNlZCBoZXJlIGlzIFJGQyAyNjE2IGNvbXBsaWFudCBh
YnNvbHV0ZSBVUkkKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGRlYnVncyg4
NSwgREJHX0NSSVRJQ0FMLCAiRVJST1I6IFVSTC1yZXdyaXRlIHByb2R1Y2VzIGludmFsaWQgIiA8
PCBzdGF0dXMgPDwgIiByZWRpcmVjdCBMb2NhdGlvbjogIiA8PCB1cmxOb3RlKTsKICAgICAgICAg
ICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFVSTC1yZXdyaXRlIHdhbnRlZC4g
RXcuCiAgICAgICAgICAgIHVybE5vdGUgPSByZXBseS5ub3Rlcy5maW5kRmlyc3QoInJld3JpdGUt
dXJsIik7CgogICAgICAgICAgICAvLyBwcmV2ZW50IGJyb2tlbiBoZWxwZXJzIGNhdXNpbmcgdG9v
IG11Y2ggZGFtYWdlLiBJZiBvbGQgVVJMID09IG5ldyBVUkwgc2tpcCB0aGUgcmUtd3JpdGUuCiAg
ICAgICAgICAgIGlmICh1cmxOb3RlICE9IG51bGxwdHIgJiYgc3RyY21wKHVybE5vdGUsIGh0dHAt
PnVyaSkpIHsKICAgICAgICAgICAgICAgIEFueVA6OlVyaSB0bXBVcmw7CiAgICAgICAgICAgICAg
ICBpZiAodG1wVXJsLnBhcnNlKG9sZF9yZXF1ZXN0LT5tZXRob2QsIFNCdWYodXJsTm90ZSkpKSB7
CiAgICAgICAgICAgICAgICAgICAgSHR0cFJlcXVlc3QgKm5ld19yZXF1ZXN0ID0gb2xkX3JlcXVl
c3QtPmNsb25lKCk7CiAgICAgICAgICAgICAgICAgICAgbmV3X3JlcXVlc3QtPnVybCA9IHRtcFVy
bDsKICAgICAgICAgICAgICAgICAgICBkZWJ1Z3MoNjEsIDIsICJVUkwtcmV3cml0ZXIgZGl2ZXJ0
cyBVUkwgZnJvbSAiIDw8IG9sZF9yZXF1ZXN0LT5lZmZlY3RpdmVSZXF1ZXN0VXJpKCkgPDwgIiB0
byAiIDw8IG5ld19yZXF1ZXN0LT5lZmZlY3RpdmVSZXF1ZXN0VXJpKCkpOwoKICAgICAgICAgICAg
ICAgICAgICAvLyB1cGRhdGUgdGhlIG5ldyByZXF1ZXN0IHRvIGZsYWcgdGhlIHJlLXdyaXRpbmcg
d2FzIGRvbmUgb24gaXQKICAgICAgICAgICAgICAgICAgICBuZXdfcmVxdWVzdC0+ZmxhZ3MucmVk
aXJlY3RlZCA9IHRydWU7CgogICAgICAgICAgICAgICAgICAgIC8vIHVubGluayBib2R5cGlwZSBm
cm9tIHRoZSBvbGQgcmVxdWVzdC4gTm90IG5lZWRlZCB0aGVyZSBhbnkgbG9uZ2VyLgogICAgICAg
ICAgICAgICAgICAgIGlmIChvbGRfcmVxdWVzdC0+Ym9keV9waXBlICE9IG51bGxwdHIpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgb2xkX3JlcXVlc3QtPmJvZHlfcGlwZSA9IG51bGxwdHI7CiAg
ICAgICAgICAgICAgICAgICAgICAgIGRlYnVncyg2MSwyLCAiVVJMLXJld3JpdGVyIGRpdmVydHMg
Ym9keV9waXBlICIgPDwgbmV3X3JlcXVlc3QtPmJvZHlfcGlwZSA8PAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIiBmcm9tIHJlcXVlc3QgIiA8PCBvbGRfcmVxdWVzdCA8PCAiIHRvICIg
PDwgbmV3X3JlcXVlc3QpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAg
ICAgaHR0cC0+cmVzZXRSZXF1ZXN0KG5ld19yZXF1ZXN0KTsKICAgICAgICAgICAgICAgICAgICBv
bGRfcmVxdWVzdCA9IG51bGxwdHI7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgICAgIGRlYnVncyg4NSwgREJHX0NSSVRJQ0FMLCAiRVJST1I6IFVSTC1yZXdyaXRlIHBy
b2R1Y2VzIGludmFsaWQgcmVxdWVzdDogIiA8PAogICAgICAgICAgICAgICAgICAgICAgICAgICBv
bGRfcmVxdWVzdC0+bWV0aG9kIDw8ICIgIiA8PCB1cmxOb3RlIDw8ICIgIiA8PCBvbGRfcmVxdWVz
dC0+aHR0cF92ZXIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgfQogICAgYnJlYWs7CiAgICB9CgogICAgLyogWFhYIFBJUEVMSU5FOiBUaGlzIGlzIGluYWNj
dXJhdGUgZHVyaW5nIHBpcGVsaW5pbmcgKi8KCiAgICBpZiAoaHR0cC0+Z2V0Q29ubigpICE9IG51
bGxwdHIgJiYgQ29tbTo6SXNDb25uT3BlbihodHRwLT5nZXRDb25uKCktPmNsaWVudENvbm5lY3Rp
b24pKQogICAgICAgIGZkX25vdGUoaHR0cC0+Z2V0Q29ubigpLT5jbGllbnRDb25uZWN0aW9uLT5m
ZCwgaHR0cC0+dXJpKTsKCiAgICBhc3NlcnQoaHR0cC0+dXJpKTsKCiAgICBodHRwLT5kb0NhbGxv
dXRzKCk7Cn0KCi8qKgogKiBUaGlzIG1ldGhvZCBoYW5kbGVzIHRoZSBkaWZmZXJlbnQgcmVwbGll
cyBmcm9tIFN0b3JlSUQgaGVscGVyLgogKi8Kdm9pZApDbGllbnRSZXF1ZXN0Q29udGV4dDo6Y2xp
ZW50U3RvcmVJZERvbmUoY29uc3QgSGVscGVyOjpSZXBseSAmcmVwbHkpCnsKICAgIEh0dHBSZXF1
ZXN0ICpvbGRfcmVxdWVzdCA9IGh0dHAtPnJlcXVlc3Q7CiAgICBkZWJ1Z3MoODUsIDUsICInIiA8
PCBodHRwLT51cmkgPDwgIicgcmVzdWx0PSIgPDwgcmVwbHkpOwogICAgYXNzZXJ0KHN0b3JlX2lk
X3N0YXRlID09IFJFRElSRUNUX1BFTkRJTkcpOwogICAgc3RvcmVfaWRfc3RhdGUgPSBSRURJUkVD
VF9ET05FOwoKICAgIC8vIFB1dCBoZWxwZXIgcmVzcG9uc2UgTm90ZXMgaW50byB0aGUgdHJhbnNh
Y3Rpb24gc3RhdGUgcmVjb3JkIChBTEUpIGV2ZW50dWFsbHkKICAgIC8vIGRvIGl0IGVhcmx5IHRv
IGVuc3VyZSB0aGF0IG5vIG1hdHRlciB3aGF0IHRoZSBvdXRjb21lIHRoZSBub3RlcyBhcmUgcHJl
c2VudC4KICAgIGlmIChodHRwLT5hbCkKICAgICAgICBodHRwLT5hbC0+c3luY05vdGVzKG9sZF9y
ZXF1ZXN0KTsKCiAgICBVcGRhdGVSZXF1ZXN0Tm90ZXMoaHR0cC0+Z2V0Q29ubigpLCAqb2xkX3Jl
cXVlc3QsIHJlcGx5Lm5vdGVzKTsKCiAgICBzd2l0Y2ggKHJlcGx5LnJlc3VsdCkgewogICAgY2Fz
ZSBIZWxwZXI6OlVua25vd246CiAgICBjYXNlIEhlbHBlcjo6VFQ6CiAgICAgICAgLy8gSGFuZGxl
ciBpbiByZWRpcmVjdC5jYyBzaG91bGQgaGF2ZSBhbHJlYWR5IG1hcHBlZCBVbmtub3duCiAgICAg
ICAgLy8gSUYgaXQgY29udGFpbmVkIHZhbGlkIGVudHJ5IGZvciB0aGUgb2xkIGhlbHBlciBwcm90
b2NvbAogICAgICAgIGRlYnVncyg4NSwgREJHX0lNUE9SVEFOVCwgIkVSUk9SOiBzdG9yZUlEIGhl
bHBlciByZXR1cm5lZCBpbnZhbGlkIHJlc3VsdCBjb2RlLiBXcm9uZyBoZWxwZXI/ICIgPDwgcmVw
bHkpOwogICAgICAgIGJyZWFrOwoKICAgIGNhc2UgSGVscGVyOjpUaW1lZE91dDoKICAgIC8vIFRp
bWVvdXRzIGZvciBzdG9yZUlEIGFyZSBub3QgaW1wbGVtZW50ZWQKICAgIGNhc2UgSGVscGVyOjpC
cm9rZW5IZWxwZXI6CiAgICAgICAgZGVidWdzKDg1LCBEQkdfSU1QT1JUQU5ULCAiRVJST1I6IHN0
b3JlSUQgaGVscGVyOiAiIDw8IHJlcGx5KTsKICAgICAgICBicmVhazsKCiAgICBjYXNlIEhlbHBl
cjo6RXJyb3I6CiAgICAgICAgLy8gbm8gY2hhbmdlIHRvIGJlIGRvbmUuCiAgICAgICAgYnJlYWs7
CgogICAgY2FzZSBIZWxwZXI6Ok9rYXk6IHsKICAgICAgICBjb25zdCBjaGFyICp1cmxOb3RlID0g
cmVwbHkubm90ZXMuZmluZEZpcnN0KCJzdG9yZS1pZCIpOwoKICAgICAgICAvLyBwcmV2ZW50IGJy
b2tlbiBoZWxwZXJzIGNhdXNpbmcgdG9vIG11Y2ggZGFtYWdlLiBJZiBvbGQgVVJMID09IG5ldyBV
Ukwgc2tpcCB0aGUgcmUtd3JpdGUuCiAgICAgICAgaWYgKHVybE5vdGUgIT0gbnVsbHB0ciAmJiBz
dHJjbXAodXJsTm90ZSwgaHR0cC0+dXJpKSApIHsKICAgICAgICAgICAgLy8gRGVidWcgc2VjdGlv
biByZXF1aXJlZCBmb3Igc29tZSB2ZXJ5IHNwZWNpZmljIGNhc2VzLgogICAgICAgICAgICBkZWJ1
Z3MoODUsIDksICJTZXR0aW5nIHN0b3JlSUQgd2l0aDogIiA8PCB1cmxOb3RlICk7CiAgICAgICAg
ICAgIGh0dHAtPnJlcXVlc3QtPnN0b3JlX2lkID0gdXJsTm90ZTsKICAgICAgICAgICAgaHR0cC0+
c3RvcmVfaWQgPSB1cmxOb3RlOwogICAgICAgIH0KICAgIH0KICAgIGJyZWFrOwogICAgfQoKICAg
IGh0dHAtPmRvQ2FsbG91dHMoKTsKfQoKLy8vIGFwcGxpZXMgImNhY2hlIGFsbG93L2RlbnkiIHJ1
bGVzLCBhc3luY2hyb25vdXNseSBpZiBuZWVkZWQKdm9pZApDbGllbnRSZXF1ZXN0Q29udGV4dDo6
Y2hlY2tOb0NhY2hlKCkKewogICAgaWYgKENvbmZpZy5hY2Nlc3NMaXN0Lm5vQ2FjaGUpIHsKICAg
ICAgICBhY2xfY2hlY2tsaXN0ID0gY2xpZW50QWNsQ2hlY2tsaXN0Q3JlYXRlKENvbmZpZy5hY2Nl
c3NMaXN0Lm5vQ2FjaGUsIGh0dHApOwogICAgICAgIGFjbF9jaGVja2xpc3QtPm5vbkJsb2NraW5n
Q2hlY2soY2hlY2tOb0NhY2hlRG9uZVdyYXBwZXIsIHRoaXMpOwogICAgfSBlbHNlIHsKICAgICAg
ICAvKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCwgd2UgdHJ5IHRvIGNhY2hlLiAqLwogICAg
ICAgIGNoZWNrTm9DYWNoZURvbmUoQUNDRVNTX0FMTE9XRUQpOwogICAgfQp9CgpzdGF0aWMgdm9p
ZApjaGVja05vQ2FjaGVEb25lV3JhcHBlcihBY2w6OkFuc3dlciBhbnN3ZXIsIHZvaWQgKmRhdGEp
CnsKICAgIENsaWVudFJlcXVlc3RDb250ZXh0ICpjYWxsb3V0Q29udGV4dCA9IChDbGllbnRSZXF1
ZXN0Q29udGV4dCAqKSBkYXRhOwoKICAgIGlmICghY2FsbG91dENvbnRleHQtPmh0dHBTdGF0ZUlz
VmFsaWQoKSkKICAgICAgICByZXR1cm47CgogICAgY2FsbG91dENvbnRleHQtPmNoZWNrTm9DYWNo
ZURvbmUoYW5zd2VyKTsKfQoKdm9pZApDbGllbnRSZXF1ZXN0Q29udGV4dDo6Y2hlY2tOb0NhY2hl
RG9uZShjb25zdCBBY2w6OkFuc3dlciAmYW5zd2VyKQp7CiAgICBhY2xfY2hlY2tsaXN0ID0gbnVs
bHB0cjsKICAgIGlmIChhbnN3ZXIuZGVuaWVkKCkpIHsKICAgICAgICBodHRwLT5yZXF1ZXN0LT5m
bGFncy5kaXNhYmxlQ2FjaGVVc2UoImEgY2FjaGUgZGVueSBydWxlIG1hdGNoZWQiKTsKICAgIH0K
ICAgIGh0dHAtPmRvQ2FsbG91dHMoKTsKfQoKI2lmIFVTRV9PUEVOU1NMCmJvb2wKQ2xpZW50UmVx
dWVzdENvbnRleHQ6OnNzbEJ1bXBBY2Nlc3NDaGVjaygpCnsKICAgIGlmICghaHR0cC0+Z2V0Q29u
bigpKSB7CiAgICAgICAgaHR0cC0+YWwtPnNzbC5idW1wTW9kZSA9IFNzbDo6YnVtcEVuZDsgLy8g
U3NsQnVtcCBkb2VzIG5vdCBhcHBseTsgbG9nIC0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9
CgogICAgY29uc3QgU3NsOjpCdW1wTW9kZSBidW1wTW9kZSA9IGh0dHAtPmdldENvbm4oKS0+c3Ns
QnVtcE1vZGU7CiAgICBpZiAoaHR0cC0+cmVxdWVzdC0+ZmxhZ3MuZm9yY2VUdW5uZWwpIHsKICAg
ICAgICBkZWJ1Z3MoODUsIDUsICJub3QgbmVlZGVkOyBhbHJlYWR5IGRlY2lkZWQgdG8gdHVubmVs
ICIgPDwgaHR0cC0+Z2V0Q29ubigpKTsKICAgICAgICBpZiAoYnVtcE1vZGUgIT0gU3NsOjpidW1w
RW5kKQogICAgICAgICAgICBodHRwLT5hbC0+c3NsLmJ1bXBNb2RlID0gYnVtcE1vZGU7IC8vIGlu
aGVyaXRlZCBmcm9tIGJ1bXBlZCBjb25uZWN0aW9uCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
fQoKICAgIC8vIElmIFNTTCBjb25uZWN0aW9uIHR1bm5lbGluZyBvciBidW1waW5nIGRlY2lzaW9u
IGhhcyBiZWVuIG1hZGUsIG9iZXkgaXQuCiAgICBpZiAoYnVtcE1vZGUgIT0gU3NsOjpidW1wRW5k
KSB7CiAgICAgICAgZGVidWdzKDg1LCA1LCAiU3NsQnVtcCBhbHJlYWR5IGRlY2lkZWQgKCIgPDwg
YnVtcE1vZGUgPDwKICAgICAgICAgICAgICAgIiksICIgPDwgImlnbm9yaW5nIHNzbF9idW1wIGZv
ciAiIDw8IGh0dHAtPmdldENvbm4oKSk7CgogICAgICAgIC8vIFdlIG5lZWQgdGhlIGZvbGxvd2lu
ZyAiaWYiIGZvciB0cmFuc3BhcmVudGx5IGJ1bXBlZCBUTFMgY29ubmVjdGlvbiwKICAgICAgICAv
LyBiZWNhdXNlIGluIHRoaXMgY2FzZSB3ZSBhcmUgcnVubmluZyBzc2xfYnVtcCBhY2Nlc3MgbGlz
dCBiZWZvcmUKICAgICAgICAvLyB0aGUgZG9DYWxsb3V0cyBydW5zLiBJdCBjYW4gYmUgcmVtb3Zl
ZCBhZnRlciB0aGUgYnVnICM0MzQwIGZpeGVkLgogICAgICAgIC8vIFdlIGRvIG5vdCB3YW50IHRv
IHByb2NlZWQgdG8gYnVtcGluZyBzdGVwczoKICAgICAgICAvLyAgLSBpZiB0aGUgVExTIGNvbm5l
Y3Rpb24gd2l0aCB0aGUgY2xpZW50IGlzIGFscmVhZHkgZXN0YWJsaXNoZWQKICAgICAgICAvLyAg
ICBiZWNhdXNlIHdlIGFyZSBhY2NlcHRpbmcgbm9ybWFsIEhUVFAgcmVxdWVzdHMgb24gVExTIHBv
cnQsCiAgICAgICAgLy8gICAgb3IgYmVjYXVzZSBvZiB0aGUgY2xpZW50LWZpcnN0IGJ1bXBpbmcg
bW9kZQogICAgICAgIC8vICAtIFdoZW4gdGhlIGJ1bXBpbmcgaXMgYWxyZWFkeSBzdGFydGVkCiAg
ICAgICAgaWYgKCFodHRwLT5nZXRDb25uKCktPnN3aXRjaGVkVG9IdHRwcygpICYmCiAgICAgICAg
ICAgICAgICAhaHR0cC0+Z2V0Q29ubigpLT5zZXJ2ZXJCdW1wKCkpCiAgICAgICAgICAgIGh0dHAt
PnNzbEJ1bXBOZWVkKGJ1bXBNb2RlKTsgLy8gZm9yIHByb2Nlc3NSZXF1ZXN0KCkgdG8gYnVtcCBp
ZiBuZWVkZWQgYW5kIG5vdCBhbHJlYWR5IGJ1bXBlZAogICAgICAgIGh0dHAtPmFsLT5zc2wuYnVt
cE1vZGUgPSBidW1wTW9kZTsgLy8gaW5oZXJpdGVkIGZyb20gYnVtcGVkIGNvbm5lY3Rpb24KICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLy8gSWYgd2UgaGF2ZSBub3QgZGVjaWRlZCB5
ZXQsIGRlY2lkZSB3aGV0aGVyIHRvIGJ1bXAgbm93LgoKICAgIC8vIEJ1bXBpbmcgaGVyZSBjYW4g
b25seSBzdGFydCB3aXRoIGEgQ09OTkVDVCByZXF1ZXN0IG9uIGEgYnVtcGluZyBwb3J0CiAgICAv
LyAoYnVtcGluZyBvZiBpbnRlcmNlcHRlZCBTU0wgY29ubnMgaXMgZGVjaWRlZCBiZWZvcmUgd2Ug
Z2V0IDFzdCByZXF1ZXN0KS4KICAgIC8vIFdlIGFsc28gZG8gbm90IGJ1bXAgcmVkaXJlY3RlZCBD
T05ORUNUIHJlcXVlc3RzLgogICAgaWYgKGh0dHAtPnJlcXVlc3QtPm1ldGhvZCAhPSBIdHRwOjpN
RVRIT0RfQ09OTkVDVCB8fCBodHRwLT5yZWRpcmVjdC5zdGF0dXMgfHwKICAgICAgICAgICAgIUNv
bmZpZy5hY2Nlc3NMaXN0LnNzbF9idW1wIHx8CiAgICAgICAgICAgICFodHRwLT5nZXRDb25uKCkt
PnBvcnQtPmZsYWdzLnR1bm5lbFNzbEJ1bXBpbmcpIHsKICAgICAgICBodHRwLT5hbC0+c3NsLmJ1
bXBNb2RlID0gU3NsOjpidW1wRW5kOyAvLyBTc2xCdW1wIGRvZXMgbm90IGFwcGx5OyBsb2cgLQog
ICAgICAgIGRlYnVncyg4NSwgNSwgImNhbm5vdCBTc2xCdW1wIHRoaXMgcmVxdWVzdCIpOwogICAg
ICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvLyBEbyBub3QgYnVtcCBkdXJpbmcgYXV0aGVu
dGljYXRpb246IGNsaWVudHMgd291bGQgbm90IHByb3h5LWF1dGhlbnRpY2F0ZQogICAgLy8gaWYg
d2UgZGVsYXkgYSA0MDcgcmVzcG9uc2UgYW5kIHJlc3BvbmQgd2l0aCAyMDAgT0sgdG8gQ09OTkVD
VC4KICAgIGlmIChlcnJvciAmJiBlcnJvci0+aHR0cFN0YXR1cyA9PSBIdHRwOjpzY1Byb3h5QXV0
aGVudGljYXRpb25SZXF1aXJlZCkgewogICAgICAgIGh0dHAtPmFsLT5zc2wuYnVtcE1vZGUgPSBT
c2w6OmJ1bXBFbmQ7IC8vIFNzbEJ1bXAgZG9lcyBub3QgYXBwbHk7IGxvZyAtCiAgICAgICAgZGVi
dWdzKDg1LCA1LCAibm8gU3NsQnVtcCBkdXJpbmcgcHJveHkgYXV0aGVudGljYXRpb24iKTsKICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaWYgKGVycm9yKSB7CiAgICAgICAgZGVidWdz
KDg1LCA1LCAiU3NsQnVtcCBhcHBsaWVzLiBGb3JjZSBidW1wIGFjdGlvbiBvbiBlcnJvciAiIDw8
IGVycm9yVHlwZU5hbWUoZXJyb3ItPnR5cGUpKTsKICAgICAgICBodHRwLT5zc2xCdW1wTmVlZChT
c2w6OmJ1bXBCdW1wKTsKICAgICAgICBodHRwLT5hbC0+c3NsLmJ1bXBNb2RlID0gU3NsOjpidW1w
QnVtcDsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgZGVidWdzKDg1LCA1LCAiU3Ns
QnVtcCBwb3NzaWJsZSwgY2hlY2tpbmcgQUNMIik7CgogICAgQUNMRmlsbGVkQ2hlY2tsaXN0ICph
Y2xDaGVja2xpc3QgPSBjbGllbnRBY2xDaGVja2xpc3RDcmVhdGUoQ29uZmlnLmFjY2Vzc0xpc3Qu
c3NsX2J1bXAsIGh0dHApOwogICAgYWNsQ2hlY2tsaXN0LT5ub25CbG9ja2luZ0NoZWNrKHNzbEJ1
bXBBY2Nlc3NDaGVja0RvbmVXcmFwcGVyLCB0aGlzKTsKICAgIHJldHVybiB0cnVlOwp9CgovKioK
ICogQSB3cmFwcGVyIGZ1bmN0aW9uIHRvIHVzZSB0aGUgQ2xpZW50UmVxdWVzdENvbnRleHQ6OnNz
bEJ1bXBBY2Nlc3NDaGVja0RvbmUgbWV0aG9kCiAqIGFzIEFDTEZpbGxlZENoZWNrbGlzdCBjYWxs
YmFjawogKi8Kc3RhdGljIHZvaWQKc3NsQnVtcEFjY2Vzc0NoZWNrRG9uZVdyYXBwZXIoQWNsOjpB
bnN3ZXIgYW5zd2VyLCB2b2lkICpkYXRhKQp7CiAgICBDbGllbnRSZXF1ZXN0Q29udGV4dCAqY2Fs
bG91dENvbnRleHQgPSBzdGF0aWNfY2FzdDxDbGllbnRSZXF1ZXN0Q29udGV4dCAqPihkYXRhKTsK
CiAgICBpZiAoIWNhbGxvdXRDb250ZXh0LT5odHRwU3RhdGVJc1ZhbGlkKCkpCiAgICAgICAgcmV0
dXJuOwogICAgY2FsbG91dENvbnRleHQtPnNzbEJ1bXBBY2Nlc3NDaGVja0RvbmUoYW5zd2VyKTsK
fQoKdm9pZApDbGllbnRSZXF1ZXN0Q29udGV4dDo6c3NsQnVtcEFjY2Vzc0NoZWNrRG9uZShjb25z
dCBBY2w6OkFuc3dlciAmYW5zd2VyKQp7CiAgICBpZiAoIWh0dHBTdGF0ZUlzVmFsaWQoKSkKICAg
ICAgICByZXR1cm47CgogICAgY29uc3QgU3NsOjpCdW1wTW9kZSBidW1wTW9kZSA9IGFuc3dlci5h
bGxvd2VkKCkgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PFNzbDo6QnVtcE1vZGU+KGFuc3dlci5raW5kKSA6IFNzbDo6YnVtcFNwbGljZTsKICAgIGh0dHAt
PnNzbEJ1bXBOZWVkKGJ1bXBNb2RlKTsgLy8gZm9yIHByb2Nlc3NSZXF1ZXN0KCkgdG8gYnVtcCBp
ZiBuZWVkZWQKICAgIGh0dHAtPmFsLT5zc2wuYnVtcE1vZGUgPSBidW1wTW9kZTsgLy8gZm9yIGxv
Z2dpbmcKCiAgICBpZiAoYnVtcE1vZGUgPT0gU3NsOjpidW1wVGVybWluYXRlKSB7CiAgICAgICAg
Y29uc3QgQ29tbTo6Q29ubmVjdGlvblBvaW50ZXIgY2xpZW50Q29ubiA9IGh0dHAtPmdldENvbm4o
KSA/IGh0dHAtPmdldENvbm4oKS0+Y2xpZW50Q29ubmVjdGlvbiA6IG51bGxwdHI7CiAgICAgICAg
aWYgKENvbW06OklzQ29ubk9wZW4oY2xpZW50Q29ubikpIHsKICAgICAgICAgICAgZGVidWdzKDg1
LCAzLCAiY2xvc2luZyBhZnRlciBTc2w6OmJ1bXBUZXJtaW5hdGUgIik7CiAgICAgICAgICAgIGNs
aWVudENvbm4tPmNsb3NlKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBo
dHRwLT5kb0NhbGxvdXRzKCk7Cn0KI2VuZGlmCgovKgogKiBJZGVudGlmeSByZXF1ZXN0cyB0aGF0
IGRvIG5vdCBnbyB0aHJvdWdoIHRoZSBzdG9yZSBhbmQgY2xpZW50IHNpZGUgc3RyZWFtCiAqIGFu
ZCBmb3J3YXJkIHRoZW0gdG8gdGhlIGFwcHJvcHJpYXRlIGxvY2F0aW9uLiBBbGwgb3RoZXIgcmVx
dWVzdHMsIHJlcXVlc3QKICogdGhlbS4KICovCnZvaWQKQ2xpZW50SHR0cFJlcXVlc3Q6OnByb2Nl
c3NSZXF1ZXN0KCkKewogICAgZGVidWdzKDg1LCA0LCByZXF1ZXN0LT5tZXRob2QgPDwgJyAnIDw8
IHVyaSk7CgogICAgY29uc3QgYm9vbCB1bnRvdWNoZWRDb25uZWN0ID0gcmVxdWVzdC0+bWV0aG9k
ID09IEh0dHA6Ok1FVEhPRF9DT05ORUNUICYmICFyZWRpcmVjdC5zdGF0dXM7CgojaWYgVVNFX09Q
RU5TU0wKICAgIGlmICh1bnRvdWNoZWRDb25uZWN0ICYmIHNzbEJ1bXBOZWVkZWQoKSkgewogICAg
ICAgIGFzc2VydCghcmVxdWVzdC0+ZmxhZ3MuZm9yY2VUdW5uZWwpOwogICAgICAgIHNzbEJ1bXBT
dGFydCgpOwogICAgICAgIHJldHVybjsKICAgIH0KI2VuZGlmCgogICAgaWYgKHVudG91Y2hlZENv
bm5lY3QgfHwgcmVxdWVzdC0+ZmxhZ3MuZm9yY2VUdW5uZWwpIHsKICAgICAgICBnZXRDb25uKCkt
PnN0b3BSZWFkaW5nKCk7IC8vIHR1bm5lbHMgcmVhZCBmb3IgdGhlbXNlbHZlcwogICAgICAgIHR1
bm5lbFN0YXJ0KHRoaXMpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBodHRwU3RhcnQoKTsK
fQoKdm9pZApDbGllbnRIdHRwUmVxdWVzdDo6aHR0cFN0YXJ0KCkKewogICAgLy8gWFhYOiBSZS1p
bml0aWFsaXplcyByYXRoZXIgdGhhbiB1cGRhdGVzLiBTaG91bGQgbm90IGJlIG5lZWRlZCBhdCBh
bGwuCiAgICB1cGRhdGVMb2dnaW5nVGFncyhMT0dfVEFHX05PTkUpOwogICAgZGVidWdzKDg1LCA0
LCBsb2dnaW5nVGFncygpLmNfc3RyKCkgPDwgIiBmb3IgJyIgPDwgdXJpIDw8ICInIik7CgogICAg
Lyogbm8gb25lIHNob3VsZCBoYXZlIHRvdWNoZWQgdGhpcyAqLwogICAgYXNzZXJ0KG91dC5vZmZz
ZXQgPT0gMCk7CiAgICAvKiBVc2UgdGhlIFN0cmVhbSBMdWtlICovCiAgICBjbGllbnRTdHJlYW1O
b2RlICpub2RlID0gKGNsaWVudFN0cmVhbU5vZGUgKiljbGllbnRfc3RyZWFtLnRhaWwtPmRhdGE7
CiAgICBjbGllbnRTdHJlYW1SZWFkKG5vZGUsIHRoaXMsIG5vZGUtPnJlYWRCdWZmZXIpOwp9Cgoj
aWYgVVNFX09QRU5TU0wKCnZvaWQKQ2xpZW50SHR0cFJlcXVlc3Q6OnNzbEJ1bXBOZWVkKFNzbDo6
QnVtcE1vZGUgbW9kZSkKewogICAgZGVidWdzKDgzLCAzLCAic3NsQnVtcCByZXF1aXJlZDogIjw8
IFNzbDo6YnVtcE1vZGUobW9kZSkpOwogICAgc3NsQnVtcE5lZWRfID0gbW9kZTsKfQoKLy8gY2Fs
bGVkIHdoZW4gY29tbV93cml0ZSBoYXMgY29tcGxldGVkCnN0YXRpYyB2b2lkClNzbEJ1bXBFc3Rh
Ymxpc2goY29uc3QgQ29tbTo6Q29ubmVjdGlvblBvaW50ZXIgJiwgY2hhciAqLCBzaXplX3QsIENv
bW06OkZsYWcgZXJyZmxhZywgaW50LCB2b2lkICpkYXRhKQp7CiAgICBDbGllbnRIdHRwUmVxdWVz
dCAqciA9IHN0YXRpY19jYXN0PENsaWVudEh0dHBSZXF1ZXN0Kj4oZGF0YSk7CiAgICBkZWJ1Z3Mo
ODUsIDUsICJyZXNwb25kZWQgdG8gQ09OTkVDVDogIiA8PCByIDw8ICIgPyAiIDw8IGVycmZsYWcp
OwoKICAgIGFzc2VydChyICYmIGNiZGF0YVJlZmVyZW5jZVZhbGlkKHIpKTsKICAgIHItPnNzbEJ1
bXBFc3RhYmxpc2goZXJyZmxhZyk7Cn0KCnZvaWQKQ2xpZW50SHR0cFJlcXVlc3Q6OnNzbEJ1bXBF
c3RhYmxpc2goQ29tbTo6RmxhZyBlcnJmbGFnKQp7CiAgICAvLyBCYWlsIG91dCBxdWlja2x5IG9u
IENvbW06OkVSUl9DTE9TSU5HIC0gY2xvc2UgaGFuZGxlcnMgd2lsbCB0aWR5IHVwCiAgICBpZiAo
ZXJyZmxhZyA9PSBDb21tOjpFUlJfQ0xPU0lORykKICAgICAgICByZXR1cm47CgogICAgaWYgKGVy
cmZsYWcpIHsKICAgICAgICBkZWJ1Z3MoODUsIDMsICJDT05ORUNUIHJlc3BvbnNlIGZhaWx1cmUg
aW4gU3NsQnVtcDogIiA8PCBlcnJmbGFnKTsKICAgICAgICBnZXRDb25uKCktPmNsaWVudENvbm5l
Y3Rpb24tPmNsb3NlKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKI2lmIFVTRV9BVVRICiAgICAv
LyBQcmVzZXJ2ZSBhdXRoZW50aWNhdGlvbiBpbmZvIGZvciB0aGUgc3NsLWJ1bXBlZCByZXF1ZXN0
CiAgICBpZiAocmVxdWVzdC0+YXV0aF91c2VyX3JlcXVlc3QgIT0gbnVsbHB0cikKICAgICAgICBn
ZXRDb25uKCktPnNldEF1dGgocmVxdWVzdC0+YXV0aF91c2VyX3JlcXVlc3QsICJTU0wtYnVtcGVk
IENPTk5FQ1QiKTsKI2VuZGlmCgogICAgYXNzZXJ0KHNzbEJ1bXBOZWVkZWQoKSk7CiAgICBnZXRD
b25uKCktPnN3aXRjaFRvSHR0cHModGhpcywgc3NsQnVtcE5lZWRfKTsKfQoKdm9pZApDbGllbnRI
dHRwUmVxdWVzdDo6c3NsQnVtcFN0YXJ0KCkKewogICAgZGVidWdzKDg1LCA1LCAiQ29uZmlybWlu
ZyAiIDw8IFNzbDo6YnVtcE1vZGUoc3NsQnVtcE5lZWRfKSA8PAogICAgICAgICAgICItYnVtcGVk
IENPTk5FQ1QgdHVubmVsIG9uIEZEICIgPDwgZ2V0Q29ubigpLT5jbGllbnRDb25uZWN0aW9uKTsK
ICAgIGdldENvbm4oKS0+c3NsQnVtcE1vZGUgPSBzc2xCdW1wTmVlZF87CgogICAgQXN5bmNDYWxs
OjpQb2ludGVyIGJ1bXBDYWxsID0gY29tbUNiQ2FsbCg4NSwgNSwgIkNsaWVudFNvY2tldENvbnRl
eHQ6OnNzbEJ1bXBFc3RhYmxpc2giLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q29tbUlvQ2JQdHJGdW4oJlNzbEJ1bXBFc3RhYmxpc2gsIHRoaXMpKTsKCiAgICBpZiAocmVxdWVz
dC0+ZmxhZ3MuaW50ZXJjZXB0VHByb3h5IHx8IHJlcXVlc3QtPmZsYWdzLmludGVyY2VwdGVkKSB7
CiAgICAgICAgQ29tbUlvQ2JQYXJhbXMgJnBhcmFtcyA9IEdldENvbW1QYXJhbXM8Q29tbUlvQ2JQ
YXJhbXM+KGJ1bXBDYWxsKTsKICAgICAgICBwYXJhbXMuZmxhZyA9IENvbW06Ok9LOwogICAgICAg
IHBhcmFtcy5jb25uID0gZ2V0Q29ubigpLT5jbGllbnRDb25uZWN0aW9uOwogICAgICAgIFNjaGVk
dWxlQ2FsbEhlcmUoYnVtcENhbGwpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBhbC0+cmVw
bHkgPSBIdHRwUmVwbHk6Ok1ha2VDb25uZWN0aW9uRXN0YWJsaXNoZWQoKTsKCiAgICBjb25zdCBh
dXRvIG1iID0gYWwtPnJlcGx5LT5wYWNrKCk7CiAgICAvLyBzZW5kIGFuIEhUVFAgMjAwIHJlc3Bv
bnNlIHRvIGtpY2sgY2xpZW50IFNTTCBuZWdvdGlhdGlvbgogICAgLy8gVE9ETzogVW5pZnkgd2l0
aCB0dW5uZWwuY2MgYW5kIGFkZCBhIFNlcnZlcig/KSBoZWFkZXIKICAgIENvbW06OldyaXRlKGdl
dENvbm4oKS0+Y2xpZW50Q29ubmVjdGlvbiwgbWIsIGJ1bXBDYWxsKTsKICAgIGRlbGV0ZSBtYjsK
fQoKI2VuZGlmCgp2b2lkCkNsaWVudEh0dHBSZXF1ZXN0Ojp1cGRhdGVFcnJvcihjb25zdCBFcnJv
ciAmZXJyb3IpCnsKICAgIGlmIChyZXF1ZXN0KQogICAgICAgIHJlcXVlc3QtPmVycm9yLnVwZGF0
ZShlcnJvcik7CiAgICBlbHNlCiAgICAgICAgYWwtPnVwZGF0ZUVycm9yKGVycm9yKTsKfQoKYm9v
bApDbGllbnRIdHRwUmVxdWVzdDo6Z290RW5vdWdoKCkgY29uc3QKewogICAgLy8gVE9ETzogU2Vl
IGFsc28gKGFuZCB1bmlmeSB3aXRoKSBjbGllbnRSZXBseUNvbnRleHQ6OnN0b3JlTm90T0tUcmFu
c2ZlckRvbmUoKQogICAgaW50NjRfdCBjb250ZW50TGVuZ3RoID0KICAgICAgICBtZW1PYmplY3Qo
KS0+YmFzZVJlcGx5KCkuYm9keVNpemUocmVxdWVzdC0+bWV0aG9kKTsKICAgIGFzc2VydChjb250
ZW50TGVuZ3RoID49IDApOwoKICAgIGlmIChvdXQub2Zmc2V0IDwgY29udGVudExlbmd0aCkKICAg
ICAgICByZXR1cm4gZmFsc2U7CgogICAgcmV0dXJuIHRydWU7Cn0KCnZvaWQKQ2xpZW50SHR0cFJl
cXVlc3Q6OnN0b3JlRW50cnkoU3RvcmVFbnRyeSAqbmV3RW50cnkpCnsKICAgIGVudHJ5XyA9IG5l
d0VudHJ5Owp9Cgp2b2lkCkNsaWVudEh0dHBSZXF1ZXN0Ojpsb2dnaW5nRW50cnkoU3RvcmVFbnRy
eSAqbmV3RW50cnkpCnsKICAgIGlmIChsb2dnaW5nRW50cnlfKQogICAgICAgIGxvZ2dpbmdFbnRy
eV8tPnVubG9jaygiQ2xpZW50SHR0cFJlcXVlc3Q6OmxvZ2dpbmdFbnRyeSIpOwoKICAgIGxvZ2dp
bmdFbnRyeV8gPSBuZXdFbnRyeTsKCiAgICBpZiAobG9nZ2luZ0VudHJ5XykKICAgICAgICBsb2dn
aW5nRW50cnlfLT5sb2NrKCJDbGllbnRIdHRwUmVxdWVzdDo6bG9nZ2luZ0VudHJ5Iik7Cn0KCnZv
aWQKQ2xpZW50SHR0cFJlcXVlc3Q6OmluaXRSZXF1ZXN0KEh0dHBSZXF1ZXN0ICphUmVxdWVzdCkK
ewogICAgYXNzaWduUmVxdWVzdChhUmVxdWVzdCk7CiAgICBpZiAoY29uc3QgYXV0byBjc2QgPSBn
ZXRDb25uKCkpIHsKICAgICAgICBpZiAoIWNzZC0+bm90ZXMoKS0+ZW1wdHkoKSkKICAgICAgICAg
ICAgcmVxdWVzdC0+bm90ZXMoKS0+YXBwZW5kTmV3T25seShjc2QtPm5vdGVzKCkuZ2V0UmF3KCkp
OwogICAgfQogICAgLy8gYWwgaXMgY3JlYXRlZCBpbiB0aGUgY29uc3RydWN0b3IKICAgIGFzc2Vy
dChhbCk7CiAgICBpZiAoIWFsLT5yZXF1ZXN0KSB7CiAgICAgICAgYWwtPnJlcXVlc3QgPSByZXF1
ZXN0OwogICAgICAgIEhUVFBNU0dMT0NLKGFsLT5yZXF1ZXN0KTsKICAgICAgICBhbC0+c3luY05v
dGVzKHJlcXVlc3QpOwogICAgfQp9Cgp2b2lkCkNsaWVudEh0dHBSZXF1ZXN0OjpyZXNldFJlcXVl
c3QoSHR0cFJlcXVlc3QgKm5ld1JlcXVlc3QpCnsKICAgIGFzc2VydChyZXF1ZXN0ICE9IG5ld1Jl
cXVlc3QpOwogICAgY2xlYXJSZXF1ZXN0KCk7CiAgICBhc3NpZ25SZXF1ZXN0KG5ld1JlcXVlc3Qp
OwogICAgeGZyZWUodXJpKTsKICAgIHVyaSA9IFNCdWZUb0NzdHJpbmcocmVxdWVzdC0+ZWZmZWN0
aXZlUmVxdWVzdFVyaSgpKTsKfQoKdm9pZApDbGllbnRIdHRwUmVxdWVzdDo6YXNzaWduUmVxdWVz
dChIdHRwUmVxdWVzdCAqbmV3UmVxdWVzdCkKewogICAgYXNzZXJ0KG5ld1JlcXVlc3QpOwogICAg
YXNzZXJ0KCFyZXF1ZXN0KTsKICAgIGNvbnN0X2Nhc3Q8SHR0cFJlcXVlc3QgKiY+KHJlcXVlc3Qp
ID0gbmV3UmVxdWVzdDsKICAgIEhUVFBNU0dMT0NLKHJlcXVlc3QpOwogICAgc2V0TG9nVXJpVG9S
ZXF1ZXN0VXJpKCk7Cn0KCnZvaWQKQ2xpZW50SHR0cFJlcXVlc3Q6OmNsZWFyUmVxdWVzdCgpCnsK
ICAgIEh0dHBSZXF1ZXN0ICpvbGRSZXF1ZXN0ID0gcmVxdWVzdDsKICAgIEhUVFBNU0dVTkxPQ0so
b2xkUmVxdWVzdCk7CiAgICBjb25zdF9jYXN0PEh0dHBSZXF1ZXN0IComPihyZXF1ZXN0KSA9IG51
bGxwdHI7CiAgICBhYnNvcmJMb2dVcmkobnVsbHB0cik7Cn0KCi8qCiAqIGRvQ2FsbG91dHMoKSAt
IFRoaXMgZnVuY3Rpb24gY29udHJvbHMgdGhlIG9yZGVyIG9mICJjYWxsb3V0IgogKiBleGVjdXRp
b25zLCBpbmNsdWRpbmcgbm9uLWJsb2NraW5nIGFjY2VzcyBjb250cm9sIGNoZWNrcywgdGhlCiAq
IHJlZGlyZWN0b3IsIGFuZCBJQ0FQLiAgUHJldmlvdXNseSwgdGhlc2UgY2FsbG91dHMgd2VyZSBj
aGFpbmVkCiAqIHRvZ2V0aGVyIHN1Y2ggdGhhdCAiY2xpZW50QWNjZXNzQ2hlY2tEb25lKCkiIHdv
dWxkIGNhbGwKICogImNsaWVudFJlZGlyZWN0U3RhcnQoKSIgYW5kIHNvIG9uLgogKgogKiBUaGUg
Q2xpZW50UmVxdWVzdENvbnRleHQgKGFrYSBjYWxsb3V0Q29udGV4dCkgY2xhc3MgaG9sZHMgY2Vy
dGFpbgogKiBzdGF0ZSBkYXRhIGZvciB0aGUgY2FsbG91dC9jYWxsYmFjayBvcGVyYXRpb25zLiAg
UHJldmlvdXNseQogKiBDbGllbnRIdHRwUmVxdWVzdCB3b3VsZCBzb3J0IG9mIGhhbmQgb2ZmIGNv
bnRyb2wgdG8gQ2xpZW50UmVxdWVzdENvbnRleHQKICogZm9yIGEgc2hvcnQgdGltZS4gIENsaWVu
dFJlcXVlc3RDb250ZXh0IHdvdWxkIHRoZW4gZGVsZXRlIGl0c2VsZgogKiBhbmQgcGFzcyBjb250
cm9sIGJhY2sgdG8gQ2xpZW50SHR0cFJlcXVlc3Qgd2hlbiBhbGwgY2FsbG91dHMKICogd2VyZSBm
aW5pc2hlZC4KICoKICogVGhpcyBjYXVzZWQgc29tZSBwcm9ibGVtcyBmb3IgSUNBUCBiZWNhdXNl
IHdlIHdhbnQgdG8gbWFrZSB0aGUKICogSUNBUCBjYWxsb3V0IGFmdGVyIGNoZWNraW5nIEFDTHMs
IGJ1dCBiZWZvcmUgY2hlY2tpbmcgdGhlIG5vX2NhY2hlCiAqIGxpc3QuICBXZSBjYW4ndCBzdHVm
ZiB0aGUgSUNBUCBzdGF0ZSBpbnRvIHRoZSBDbGllbnRSZXF1ZXN0Q29udGV4dAogKiBjbGFzcyBi
ZWNhdXNlIHdlIHN0aWxsIG5lZWQgdGhlIElDQVAgc3RhdGUgYWZ0ZXIgQ2xpZW50UmVxdWVzdENv
bnRleHQKICogZ29lcyBhd2F5LgogKgogKiBOb3RlIHRoYXQgQ2xpZW50UmVxdWVzdENvbnRleHQg
aXMgY3JlYXRlZCBiZWZvcmUgdGhlIGZpcnN0IGNhbGwKICogdG8gZG9DYWxsb3V0cygpLgogKgog
KiBJZiBvbmUgb2YgdGhlIGNhbGxvdXRzIG5vdGljZXMgdGhhdCBDbGllbnRIdHRwUmVxdWVzdCBp
cyBubwogKiBsb25nZXIgdmFsaWQsIGl0IHNob3VsZCBjYWxsIGNiZGF0YVJlZmVyZW5jZURvbmUo
KSBzbyB0aGF0CiAqIENsaWVudEh0dHBSZXF1ZXN0J3MgcmVmZXJlbmNlIGNvdW50IGdvZXMgdG8g
emVybyBhbmQgaXQgd2lsbCBnZXQKICogZGVsZXRlZC4gIENsaWVudEh0dHBSZXF1ZXN0IHdpbGwg
dGhlbiBkZWxldGUgQ2xpZW50UmVxdWVzdENvbnRleHQuCiAqCiAqIE5vdGUgdGhhdCB3ZSBzZXQg
dGhlIF9kb25lIGZsYWdzIGhlcmUgYmVmb3JlIGFjdHVhbGx5IHN0YXJ0aW5nCiAqIHRoZSBjYWxs
b3V0LiAgVGhpcyBpcyBzdHJpY3RseSBmb3IgY29udmVuaWVuY2UuCiAqLwoKdm9pZApDbGllbnRI
dHRwUmVxdWVzdDo6ZG9DYWxsb3V0cygpCnsKICAgIGFzc2VydChjYWxsb3V0Q29udGV4dCk7Cgog
ICAgaWYgKCFjYWxsb3V0Q29udGV4dC0+ZXJyb3IpIHsKICAgICAgICAvLyBDVkUtMjAwOS0wODAx
OiB2ZXJpZnkgdGhlIEhvc3Q6IGhlYWRlciBpcyBjb25zaXN0ZW50IHdpdGggb3RoZXIga25vd24g
ZGV0YWlscy4KICAgICAgICBpZiAoIWNhbGxvdXRDb250ZXh0LT5ob3N0X2hlYWRlcl92ZXJpZnlf
ZG9uZSkgewogICAgICAgICAgICBkZWJ1Z3MoODMsIDMsICJEb2luZyBjYWxsb3V0Q29udGV4dC0+
aG9zdEhlYWRlclZlcmlmeSgpIik7CiAgICAgICAgICAgIGNhbGxvdXRDb250ZXh0LT5ob3N0X2hl
YWRlcl92ZXJpZnlfZG9uZSA9IHRydWU7CiAgICAgICAgICAgIGNhbGxvdXRDb250ZXh0LT5ob3N0
SGVhZGVyVmVyaWZ5KCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGlm
ICghY2FsbG91dENvbnRleHQtPmh0dHBfYWNjZXNzX2RvbmUpIHsKICAgICAgICAgICAgZGVidWdz
KDgzLCAzLCAiRG9pbmcgY2FsbG91dENvbnRleHQtPmNsaWVudEFjY2Vzc0NoZWNrKCkiKTsKICAg
ICAgICAgICAgY2FsbG91dENvbnRleHQtPmh0dHBfYWNjZXNzX2RvbmUgPSB0cnVlOwogICAgICAg
ICAgICBjYWxsb3V0Q29udGV4dC0+Y2xpZW50QWNjZXNzQ2hlY2soKTsKICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgIH0KCiNpZiBVU0VfQURBUFRBVElPTgogICAgICAgIGlmICghY2FsbG91dENv
bnRleHQtPmFkYXB0YXRpb25fYWNsX2NoZWNrX2RvbmUpIHsKICAgICAgICAgICAgY2FsbG91dENv
bnRleHQtPmFkYXB0YXRpb25fYWNsX2NoZWNrX2RvbmUgPSB0cnVlOwogICAgICAgICAgICBpZiAo
QWRhcHRhdGlvbjo6QWNjZXNzQ2hlY2s6OlN0YXJ0KAogICAgICAgICAgICAgICAgICAgICAgICBB
ZGFwdGF0aW9uOjptZXRob2RSZXFtb2QsIEFkYXB0YXRpb246OnBvaW50UHJlQ2FjaGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgIHJlcXVlc3QsIG51bGxwdHIsIGNhbGxvdXRDb250ZXh0LT5odHRw
LT5hbCwgdGhpcykpCiAgICAgICAgICAgICAgICByZXR1cm47IC8vIHdpbGwgY2FsbCBjYWxsYmFj
awogICAgICAgIH0KI2VuZGlmCgogICAgICAgIGlmICghY2FsbG91dENvbnRleHQtPnJlZGlyZWN0
X2RvbmUpIHsKICAgICAgICAgICAgY2FsbG91dENvbnRleHQtPnJlZGlyZWN0X2RvbmUgPSB0cnVl
OwoKICAgICAgICAgICAgaWYgKENvbmZpZy5Qcm9ncmFtLnJlZGlyZWN0KSB7CiAgICAgICAgICAg
ICAgICBkZWJ1Z3MoODMsIDMsICJEb2luZyBjYWxsb3V0Q29udGV4dC0+Y2xpZW50UmVkaXJlY3RT
dGFydCgpIik7CiAgICAgICAgICAgICAgICBjYWxsb3V0Q29udGV4dC0+cmVkaXJlY3Rfc3RhdGUg
PSBSRURJUkVDVF9QRU5ESU5HOwogICAgICAgICAgICAgICAgY2FsbG91dENvbnRleHQtPmNsaWVu
dFJlZGlyZWN0U3RhcnQoKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQog
ICAgICAgIH0KCiAgICAgICAgaWYgKCFjYWxsb3V0Q29udGV4dC0+YWRhcHRlZF9odHRwX2FjY2Vz
c19kb25lKSB7CiAgICAgICAgICAgIGRlYnVncyg4MywgMywgIkRvaW5nIGNhbGxvdXRDb250ZXh0
LT5jbGllbnRBY2Nlc3NDaGVjazIoKSIpOwogICAgICAgICAgICBjYWxsb3V0Q29udGV4dC0+YWRh
cHRlZF9odHRwX2FjY2Vzc19kb25lID0gdHJ1ZTsKICAgICAgICAgICAgY2FsbG91dENvbnRleHQt
PmNsaWVudEFjY2Vzc0NoZWNrMigpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAg
ICAgICBpZiAoIWNhbGxvdXRDb250ZXh0LT5zdG9yZV9pZF9kb25lKSB7CiAgICAgICAgICAgIGNh
bGxvdXRDb250ZXh0LT5zdG9yZV9pZF9kb25lID0gdHJ1ZTsKCiAgICAgICAgICAgIGlmIChDb25m
aWcuUHJvZ3JhbS5zdG9yZV9pZCkgewogICAgICAgICAgICAgICAgZGVidWdzKDgzLCAzLCJEb2lu
ZyBjYWxsb3V0Q29udGV4dC0+Y2xpZW50U3RvcmVJZFN0YXJ0KCkiKTsKICAgICAgICAgICAgICAg
IGNhbGxvdXRDb250ZXh0LT5zdG9yZV9pZF9zdGF0ZSA9IFJFRElSRUNUX1BFTkRJTkc7CiAgICAg
ICAgICAgICAgICBjYWxsb3V0Q29udGV4dC0+Y2xpZW50U3RvcmVJZFN0YXJ0KCk7CiAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICghY2Fs
bG91dENvbnRleHQtPmludGVycHJldGVkX3JlcV9oZHJzKSB7CiAgICAgICAgICAgIGRlYnVncyg4
MywgMywgIkRvaW5nIGNsaWVudEludGVycHJldFJlcXVlc3RIZWFkZXJzKCkiKTsKICAgICAgICAg
ICAgY2FsbG91dENvbnRleHQtPmludGVycHJldGVkX3JlcV9oZHJzID0gMTsKICAgICAgICAgICAg
Y2xpZW50SW50ZXJwcmV0UmVxdWVzdEhlYWRlcnModGhpcyk7CiAgICAgICAgfQoKICAgICAgICBp
ZiAoIWNhbGxvdXRDb250ZXh0LT5ub19jYWNoZV9kb25lKSB7CiAgICAgICAgICAgIGNhbGxvdXRD
b250ZXh0LT5ub19jYWNoZV9kb25lID0gdHJ1ZTsKCiAgICAgICAgICAgIGlmIChDb25maWcuYWNj
ZXNzTGlzdC5ub0NhY2hlICYmIHJlcXVlc3QtPmZsYWdzLmNhY2hhYmxlKSB7CiAgICAgICAgICAg
ICAgICBkZWJ1Z3MoODMsIDMsICJEb2luZyBjYWxsb3V0Q29udGV4dC0+Y2hlY2tOb0NhY2hlKCki
KTsKICAgICAgICAgICAgICAgIGNhbGxvdXRDb250ZXh0LT5jaGVja05vQ2FjaGUoKTsKICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0gLy8gIGlmICFj
YWxsb3V0Q29udGV4dC0+ZXJyb3IKCiAgICAvLyBTZXQgYXBwcm9wcmlhdGUgTUFSS3MgYW5kIENP
Tk5NQVJLcyBpZiBuZWVkZWQuCiAgICBpZiAoZ2V0Q29ubigpICYmIENvbW06OklzQ29ubk9wZW4o
Z2V0Q29ubigpLT5jbGllbnRDb25uZWN0aW9uKSkgewogICAgICAgIEFDTEZpbGxlZENoZWNrbGlz
dCBjaChudWxscHRyLCByZXF1ZXN0LCBudWxscHRyKTsKICAgICAgICBjaC5hbCA9IGNhbGxvdXRD
b250ZXh0LT5odHRwLT5hbDsKICAgICAgICBjaC5zcmNfYWRkciA9IHJlcXVlc3QtPmNsaWVudF9h
ZGRyOwogICAgICAgIGNoLm15X2FkZHIgPSByZXF1ZXN0LT5teV9hZGRyOwogICAgICAgIGNoLnN5
bmNBbGUocmVxdWVzdCwgbG9nX3VyaSk7CgogICAgICAgIGlmICghY2FsbG91dENvbnRleHQtPnRv
Q2xpZW50TWFya2luZ0RvbmUpIHsKICAgICAgICAgICAgY2FsbG91dENvbnRleHQtPnRvQ2xpZW50
TWFya2luZ0RvbmUgPSB0cnVlOwogICAgICAgICAgICB0b3NfdCB0b3MgPSBhY2xNYXBUT1MoSXA6
OlFvczo6VGhlQ29uZmlnLnRvc1RvQ2xpZW50LCAmY2gpOwogICAgICAgICAgICBpZiAodG9zKQog
ICAgICAgICAgICAgICAgSXA6OlFvczo6c2V0U29ja1RvcyhnZXRDb25uKCktPmNsaWVudENvbm5l
Y3Rpb24sIHRvcyk7CgogICAgICAgICAgICBjb25zdCBhdXRvIHBhY2tldE1hcmsgPSBhY2xGaW5k
TmZNYXJrQ29uZmlnKElwOjpRb3M6OlRoZUNvbmZpZy5uZm1hcmtUb0NsaWVudCwgJmNoKTsKICAg
ICAgICAgICAgaWYgKCFwYWNrZXRNYXJrLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgIElwOjpR
b3M6OnNldFNvY2tOZm1hcmsoZ2V0Q29ubigpLT5jbGllbnRDb25uZWN0aW9uLCBwYWNrZXRNYXJr
Lm1hcmspOwoKICAgICAgICAgICAgY29uc3QgYXV0byBjb25ubWFyayA9IGFjbEZpbmROZk1hcmtD
b25maWcoSXA6OlFvczo6VGhlQ29uZmlnLm5mQ29ubm1hcmtUb0NsaWVudCwgJmNoKTsKICAgICAg
ICAgICAgaWYgKCFjb25ubWFyay5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICBJcDo6UW9zOjpz
ZXROZkNvbm5tYXJrKGdldENvbm4oKS0+Y2xpZW50Q29ubmVjdGlvbiwgSXA6OlFvczo6ZGlyQWNj
ZXB0ZWQsIGNvbm5tYXJrKTsKICAgICAgICB9CiAgICB9CgojaWYgVVNFX09QRU5TU0wKICAgIC8v
IEV2ZW4gd2l0aCBjYWxsb3V0Q29udGV4dC0+ZXJyb3IsIHdlIGNhbGwgc3NsQnVtcEFjY2Vzc0No
ZWNrKCkgdG8gZGVjaWRlCiAgICAvLyB3aGV0aGVyIFNzbEJ1bXAgYXBwbGllcyB0byB0aGlzIHRy
YW5zYWN0aW9uLiBJZiBpdCBhcHBsaWVzLCB3ZSB3aWxsCiAgICAvLyBhdHRlbXB0IHRvIGJ1bXAg
dGhlIGNsaWVudCB0byBzZXJ2ZSB0aGUgZXJyb3IuCiAgICBpZiAoIWNhbGxvdXRDb250ZXh0LT5z
c2xCdW1wQ2hlY2tEb25lKSB7CiAgICAgICAgY2FsbG91dENvbnRleHQtPnNzbEJ1bXBDaGVja0Rv
bmUgPSB0cnVlOwogICAgICAgIGlmIChjYWxsb3V0Q29udGV4dC0+c3NsQnVtcEFjY2Vzc0NoZWNr
KCkpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAvKiBlbHNlIG5vIHNzbCBidW1wIHJlcXVp
cmVkKi8KICAgIH0KI2VuZGlmCgogICAgaWYgKGNhbGxvdXRDb250ZXh0LT5lcnJvcikgewogICAg
ICAgIC8vIFhYWDogcHJmb3JtYW5jZSByZWdyZXNzaW9uLiBjX3N0cigpIHJlYWxsb2NhdGVzCiAg
ICAgICAgU0J1ZiBzdG9yZVVyaUJ1ZihyZXF1ZXN0LT5zdG9yZUlkKCkpOwogICAgICAgIGNvbnN0
IGNoYXIgKnN0b3JlVXJpID0gc3RvcmVVcmlCdWYuY19zdHIoKTsKICAgICAgICBTdG9yZUVudHJ5
ICplID0gc3RvcmVDcmVhdGVFbnRyeShzdG9yZVVyaSwgc3RvcmVVcmksIHJlcXVlc3QtPmZsYWdz
LCByZXF1ZXN0LT5tZXRob2QpOwojaWYgVVNFX09QRU5TU0wKICAgICAgICBpZiAoc3NsQnVtcE5l
ZWRlZCgpKSB7CiAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gc2VydmUgYW4gZXJyb3IsIHNvIGJ1
bXAgdGhlIGNsaWVudCBmaXJzdC4KICAgICAgICAgICAgc3NsQnVtcE5lZWQoU3NsOjpidW1wQ2xp
ZW50Rmlyc3QpOwogICAgICAgICAgICAvLyBzZXQgZmluYWwgZXJyb3IgYnV0IGRlbGF5IHNlbmRp
bmcgdW50aWwgd2UgYnVtcAogICAgICAgICAgICBTc2w6OlNlcnZlckJ1bXAgKnNydkJ1bXAgPSBu
ZXcgU3NsOjpTZXJ2ZXJCdW1wKHRoaXMsIGUsIFNzbDo6YnVtcENsaWVudEZpcnN0KTsKICAgICAg
ICAgICAgZXJyb3JBcHBlbmRFbnRyeShlLCBjYWxsb3V0Q29udGV4dC0+ZXJyb3IpOwogICAgICAg
ICAgICBjYWxsb3V0Q29udGV4dC0+ZXJyb3IgPSBudWxscHRyOwogICAgICAgICAgICBnZXRDb25u
KCktPnNldFNlcnZlckJ1bXAoc3J2QnVtcCk7CiAgICAgICAgICAgIGUtPnVubG9jaygiQ2xpZW50
SHR0cFJlcXVlc3Q6OmRvQ2FsbG91dHMrc3NsQnVtcE5lZWRlZCIpOwogICAgICAgIH0gZWxzZQoj
ZW5kaWYKICAgICAgICB7CiAgICAgICAgICAgIC8vIHNlbmQgdGhlIGVycm9yIHRvIHRoZSBjbGll
bnQgbm93CiAgICAgICAgICAgIGNsaWVudFN0cmVhbU5vZGUgKm5vZGUgPSAoY2xpZW50U3RyZWFt
Tm9kZSAqKWNsaWVudF9zdHJlYW0udGFpbC0+cHJldi0+ZGF0YTsKICAgICAgICAgICAgY2xpZW50
UmVwbHlDb250ZXh0ICpyZXBDb250ZXh0ID0gZHluYW1pY19jYXN0PGNsaWVudFJlcGx5Q29udGV4
dCAqPihub2RlLT5kYXRhLmdldFJhdygpKTsKICAgICAgICAgICAgYXNzZXJ0IChyZXBDb250ZXh0
KTsKICAgICAgICAgICAgcmVwQ29udGV4dC0+c2V0UmVwbHlUb1N0b3JlRW50cnkoZSwgImltbWVk
aWF0ZSBTc2xCdW1wIGVycm9yIik7CiAgICAgICAgICAgIGVycm9yQXBwZW5kRW50cnkoZSwgY2Fs
bG91dENvbnRleHQtPmVycm9yKTsKICAgICAgICAgICAgY2FsbG91dENvbnRleHQtPmVycm9yID0g
bnVsbHB0cjsKICAgICAgICAgICAgaWYgKGNhbGxvdXRDb250ZXh0LT5yZWFkTmV4dFJlcXVlc3Qg
JiYgZ2V0Q29ubigpKQogICAgICAgICAgICAgICAgZ2V0Q29ubigpLT5mbGFncy5yZWFkTW9yZSA9
IHRydWU7IC8vIHJlc3VtZSBhbnkgcGlwZWxpbmUgcmVhZHMuCiAgICAgICAgICAgIG5vZGUgPSAo
Y2xpZW50U3RyZWFtTm9kZSAqKWNsaWVudF9zdHJlYW0udGFpbC0+ZGF0YTsKICAgICAgICAgICAg
Y2xpZW50U3RyZWFtUmVhZChub2RlLCB0aGlzLCBub2RlLT5yZWFkQnVmZmVyKTsKICAgICAgICAg
ICAgZS0+dW5sb2NrKCJDbGllbnRIdHRwUmVxdWVzdDo6ZG9DYWxsb3V0cy1zc2xCdW1wTmVlZGVk
Iik7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgY2JkYXRhUmVmZXJl
bmNlRG9uZShjYWxsb3V0Q29udGV4dC0+aHR0cCk7CiAgICBkZWxldGUgY2FsbG91dENvbnRleHQ7
CiAgICBjYWxsb3V0Q29udGV4dCA9IG51bGxwdHI7CiNpZiBIRUFERVJTX0xPRwoKICAgIGhlYWRl
cnNMb2coMCwgMSwgcmVxdWVzdC0+bWV0aG9kLCByZXF1ZXN0KTsKI2VuZGlmCgogICAgZGVidWdz
KDgzLCAzLCAiY2FsbGluZyBwcm9jZXNzUmVxdWVzdCgpIik7CiAgICBwcm9jZXNzUmVxdWVzdCgp
OwoKI2lmIElDQVBfQ0xJRU5UCiAgICBBZGFwdGF0aW9uOjpJY2FwOjpIaXN0b3J5OjpQb2ludGVy
IGloID0gcmVxdWVzdC0+aWNhcEhpc3RvcnkoKTsKICAgIGlmIChpaCAhPSBudWxscHRyKQogICAg
ICAgIGloLT5sb2dUeXBlID0gbG9nZ2luZ1RhZ3MoKTsKI2VuZGlmCn0KCnZvaWQKQ2xpZW50SHR0
cFJlcXVlc3Q6OnNldExvZ1VyaVRvUmVxdWVzdFVyaSgpCnsKICAgIGFzc2VydChyZXF1ZXN0KTsK
ICAgIGNvbnN0IGF1dG8gY2Fub25pY2FsVXJpID0gcmVxdWVzdC0+Y2Fub25pY2FsQ2xlYW5Vcmwo
KTsKICAgIGFic29yYkxvZ1VyaSh4c3RybmR1cChjYW5vbmljYWxVcmksIE1BWF9VUkwpKTsKfQoK
dm9pZApDbGllbnRIdHRwUmVxdWVzdDo6c2V0TG9nVXJpVG9SYXdVcmkoY29uc3QgY2hhciAqcmF3
VXJpLCBjb25zdCBIdHRwUmVxdWVzdE1ldGhvZCAmbWV0aG9kKQp7CiAgICBhc3NlcnQocmF3VXJp
KTsKICAgIC8vIFNob3VsZCghcmVxdWVzdCk7CgogICAgLy8gVE9ETzogU0J1ZigpIHBlcmZvcm1h
bmNlIHJlZ3Jlc3Npb24sIGZpeCBieSBjb252ZXJ0aW5nIHJhd1VyaSB0byBTQnVmCiAgICBjaGFy
ICpjYW5vbmljYWxVcmkgPSB1cmxDYW5vbmljYWxDbGVhbldpdGhvdXRSZXF1ZXN0KFNCdWYocmF3
VXJpKSwgbWV0aG9kLCBBbnlQOjpVcmlTY2hlbWUoKSk7CgogICAgYWJzb3JiTG9nVXJpKEFueVA6
OlVyaTo6Y2xlYW51cChjYW5vbmljYWxVcmkpKTsKCiAgICBjaGFyICpjbGVhbmVkUmF3VXJpID0g
QW55UDo6VXJpOjpjbGVhbnVwKHJhd1VyaSk7CiAgICBhbC0+c2V0VmlyZ2luVXJsRm9yTWlzc2lu
Z1JlcXVlc3QoU0J1ZihjbGVhbmVkUmF3VXJpKSk7CiAgICB4ZnJlZShjbGVhbmVkUmF3VXJpKTsK
fQoKdm9pZApDbGllbnRIdHRwUmVxdWVzdDo6YWJzb3JiTG9nVXJpKGNoYXIgKmFVcmkpCnsKICAg
IHhmcmVlKGxvZ191cmkpOwogICAgY29uc3RfY2FzdDxjaGFyIComPihsb2dfdXJpKSA9IGFVcmk7
Cn0KCnZvaWQKQ2xpZW50SHR0cFJlcXVlc3Q6OnNldEVycm9yVXJpKGNvbnN0IGNoYXIgKmFVcmkp
CnsKICAgIGFzc2VydCghdXJpKTsKICAgIGFzc2VydChhVXJpKTsKICAgIC8vIFNob3VsZCghcmVx
dWVzdCk7CgogICAgdXJpID0geHN0cmR1cChhVXJpKTsKICAgIC8vIFRPRE86IFNCdWYoKSBwZXJm
b3JtYW5jZSByZWdyZXNzaW9uLCBmaXggYnkgY29udmVydGluZyBzZXRFcnJvclVyaSgpIHBhcmFt
ZXRlciB0byBTQnVmCiAgICBjb25zdCBTQnVmIGVycm9yVXJpKGFVcmkpOwogICAgY29uc3QgYXV0
byBjYW5vbmljYWxVcmkgPSB1cmxDYW5vbmljYWxDbGVhbldpdGhvdXRSZXF1ZXN0KGVycm9yVXJp
LCBIdHRwUmVxdWVzdE1ldGhvZCgpLCBBbnlQOjpVcmlTY2hlbWUoKSk7CiAgICBhYnNvcmJMb2dV
cmkoeHN0cm5kdXAoY2Fub25pY2FsVXJpLCBNQVhfVVJMKSk7CgogICAgYWwtPnNldFZpcmdpblVy
bEZvck1pc3NpbmdSZXF1ZXN0KGVycm9yVXJpKTsKfQoKLy8gWFhYOiBUaGlzIHNob3VsZCBub3Qg
YmUgYSBfcmVxdWVzdF8gbWV0aG9kLiBNb3ZlIHJhbmdlX2l0ZXIgZWxzZXdoZXJlLgppbnQ2NF90
CkNsaWVudEh0dHBSZXF1ZXN0OjpwcmVwUGFydGlhbFJlc3BvbnNlR2VuZXJhdGlvbigpCnsKICAg
IGFzc2VydChyZXF1ZXN0KTsKICAgIGFzc2VydChyZXF1ZXN0LT5yYW5nZSk7CgogICAgcmFuZ2Vf
aXRlci5wb3MgPSByZXF1ZXN0LT5yYW5nZS0+YmVnaW4oKTsKICAgIHJhbmdlX2l0ZXIuZW5kID0g
cmVxdWVzdC0+cmFuZ2UtPmVuZCgpOwogICAgcmFuZ2VfaXRlci5kZWJ0X3NpemUgPSAwOwogICAg
Y29uc3QgYXV0byBtdWx0aXBhcnQgPSByZXF1ZXN0LT5yYW5nZS0+c3BlY3Muc2l6ZSgpID4gMTsK
ICAgIGlmIChtdWx0aXBhcnQpCiAgICAgICAgcmFuZ2VfaXRlci5ib3VuZGFyeSA9IHJhbmdlQm91
bmRhcnlTdHIoKTsKICAgIHJhbmdlX2l0ZXIudmFsaWQgPSB0cnVlOyAvLyBUT0RPOiBSZW1vdmUu
CiAgICByYW5nZV9pdGVyLnVwZGF0ZVNwZWMoKTsgLy8gVE9ETzogUmVmYWN0b3IgdG8gaW5pdGlh
bGl6ZSByYXRoZXIgdGhhbiB1cGRhdGUuCgogICAgYXNzZXJ0KHJhbmdlX2l0ZXIucG9zICE9IHJh
bmdlX2l0ZXIuZW5kKTsKICAgIGNvbnN0IGF1dG8gJmZpcnN0UmFuZ2UgPSAqcmFuZ2VfaXRlci5w
b3M7CiAgICBhc3NlcnQoZmlyc3RSYW5nZSk7CiAgICBvdXQub2Zmc2V0ID0gZmlyc3RSYW5nZS0+
b2Zmc2V0OwoKICAgIHJldHVybiBtdWx0aXBhcnQgPyBtUmFuZ2VDTGVuKCkgOiBmaXJzdFJhbmdl
LT5sZW5ndGg7Cn0KCiNpZiBVU0VfQURBUFRBVElPTgovLy8gSW5pdGlhdGUgYW4gYXN5bmNocm9u
b3VzIGFkYXB0YXRpb24gdHJhbnNhY3Rpb24gd2hpY2ggd2lsbCBjYWxsIHVzIGJhY2suCnZvaWQK
Q2xpZW50SHR0cFJlcXVlc3Q6OnN0YXJ0QWRhcHRhdGlvbihjb25zdCBBZGFwdGF0aW9uOjpTZXJ2
aWNlR3JvdXBQb2ludGVyICZnKQp7CiAgICBkZWJ1Z3MoODUsIDMsICJhZGFwdGF0aW9uIG5lZWRl
ZCBmb3IgIiA8PCB0aGlzKTsKICAgIGFzc2VydCghdmlyZ2luSGVhZFNvdXJjZSk7CiAgICBhc3Nl
cnQoIWFkYXB0ZWRCb2R5U291cmNlKTsKICAgIHZpcmdpbkhlYWRTb3VyY2UgPSBpbml0aWF0ZUFk
YXB0YXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBBZGFwdGF0aW9uOjpJdGVy
YXRvcihyZXF1ZXN0LCBudWxscHRyLCBhbCwgZykpOwoKICAgIC8vIHdlIGNvdWxkIHRyeSB0byBn
dWVzcyB3aGV0aGVyIHdlIGNhbiBieXBhc3MgdGhpcyBhZGFwdGF0aW9uCiAgICAvLyBpbml0aWF0
aW9uIGZhaWx1cmUsIGJ1dCBpdCBzaG91bGQgbm90IHJlYWxseSBoYXBwZW4KICAgIE11c3QoaW5p
dGlhdGVkKHZpcmdpbkhlYWRTb3VyY2UpKTsKfQoKdm9pZApDbGllbnRIdHRwUmVxdWVzdDo6bm90
ZUFkYXB0YXRpb25BbnN3ZXIoY29uc3QgQWRhcHRhdGlvbjo6QW5zd2VyICZhbnN3ZXIpCnsKICAg
IGFzc2VydChjYmRhdGFSZWZlcmVuY2VWYWxpZCh0aGlzKSk7ICAgICAvLyBpbmRpY2F0ZXMgYnVn
CiAgICBjbGVhckFkYXB0YXRpb24odmlyZ2luSGVhZFNvdXJjZSk7CiAgICBhc3NlcnQoIWFkYXB0
ZWRCb2R5U291cmNlKTsKCiAgICBzd2l0Y2ggKGFuc3dlci5raW5kKSB7CiAgICBjYXNlIEFkYXB0
YXRpb246OkFuc3dlcjo6YWtGb3J3YXJkOgogICAgICAgIGhhbmRsZUFkYXB0ZWRIZWFkZXIoY29u
c3RfY2FzdDxIdHRwOjpNZXNzYWdlKj4oYW5zd2VyLm1lc3NhZ2UuZ2V0UmF3KCkpKTsKICAgICAg
ICBicmVhazsKCiAgICBjYXNlIEFkYXB0YXRpb246OkFuc3dlcjo6YWtCbG9jazoKICAgICAgICBo
YW5kbGVBZGFwdGF0aW9uQmxvY2soYW5zd2VyKTsKICAgICAgICBicmVhazsKCiAgICBjYXNlIEFk
YXB0YXRpb246OkFuc3dlcjo6YWtFcnJvcjogewogICAgICAgIHN0YXRpYyBjb25zdCBhdXRvIGQg
PSBNYWtlTmFtZWRFcnJvckRldGFpbCgiQ0xUX1JFUU1PRF9BQk9SVCIpOwogICAgICAgIGhhbmRs
ZUFkYXB0YXRpb25GYWlsdXJlKGQsICFhbnN3ZXIuZmluYWwpOwogICAgICAgIGJyZWFrOwogICAg
fQogICAgfQp9Cgp2b2lkCkNsaWVudEh0dHBSZXF1ZXN0OjpoYW5kbGVBZGFwdGVkSGVhZGVyKEh0
dHA6Ok1lc3NhZ2UgKm1zZykKewogICAgYXNzZXJ0KG1zZyk7CgogICAgaWYgKEh0dHBSZXF1ZXN0
ICpuZXdfcmVxID0gZHluYW1pY19jYXN0PEh0dHBSZXF1ZXN0Kj4obXNnKSkgewogICAgICAgIC8v
IHVwZGF0ZSB0aGUgbmV3IG1lc3NhZ2UgdG8gZmxhZyB3aGV0aGVyIFVSTCByZS13cml0aW5nIHdh
cyBkb25lIG9uIGl0CiAgICAgICAgaWYgKHJlcXVlc3QtPmVmZmVjdGl2ZVJlcXVlc3RVcmkoKSAh
PSBuZXdfcmVxLT5lZmZlY3RpdmVSZXF1ZXN0VXJpKCkpCiAgICAgICAgICAgIG5ld19yZXEtPmZs
YWdzLnJlZGlyZWN0ZWQgPSB0cnVlOwogICAgICAgIHJlc2V0UmVxdWVzdChuZXdfcmVxKTsKICAg
ICAgICBhc3NlcnQocmVxdWVzdC0+bWV0aG9kLmlkKCkpOwogICAgfSBlbHNlIGlmIChIdHRwUmVw
bHkgKm5ld19yZXAgPSBkeW5hbWljX2Nhc3Q8SHR0cFJlcGx5Kj4obXNnKSkgewogICAgICAgIGRl
YnVncyg4NSwzLCAiUkVRTU9EIHJlcGx5IGlzIEhUVFAgcmVwbHkiKTsKCiAgICAgICAgLy8gc3Vi
c2NyaWJlIHRvIHJlY2VpdmUgcmVwbHkgYm9keQogICAgICAgIGlmIChuZXdfcmVwLT5ib2R5X3Bp
cGUgIT0gbnVsbHB0cikgewogICAgICAgICAgICBhZGFwdGVkQm9keVNvdXJjZSA9IG5ld19yZXAt
PmJvZHlfcGlwZTsKICAgICAgICAgICAgaW50IGNvbnN1bWVyX29rID0gYWRhcHRlZEJvZHlTb3Vy
Y2UtPnNldENvbnN1bWVySWZOb3RMYXRlKHRoaXMpOwogICAgICAgICAgICBhc3NlcnQoY29uc3Vt
ZXJfb2spOwogICAgICAgIH0KCiAgICAgICAgY2xpZW50U3RyZWFtTm9kZSAqbm9kZSA9IChjbGll
bnRTdHJlYW1Ob2RlICopY2xpZW50X3N0cmVhbS50YWlsLT5wcmV2LT5kYXRhOwogICAgICAgIGNs
aWVudFJlcGx5Q29udGV4dCAqcmVwQ29udGV4dCA9IGR5bmFtaWNfY2FzdDxjbGllbnRSZXBseUNv
bnRleHQgKj4obm9kZS0+ZGF0YS5nZXRSYXcoKSk7CiAgICAgICAgYXNzZXJ0KHJlcENvbnRleHQp
OwogICAgICAgIHJlcENvbnRleHQtPmNyZWF0ZVN0b3JlRW50cnkocmVxdWVzdC0+bWV0aG9kLCBy
ZXF1ZXN0LT5mbGFncyk7CgogICAgICAgIHJlcXVlc3Rfc2F0aXNmYWN0aW9uX21vZGUgPSB0cnVl
OwogICAgICAgIHJlcXVlc3Rfc2F0aXNmYWN0aW9uX29mZnNldCA9IDA7CiAgICAgICAgc3RvcmVF
bnRyeSgpLT5yZXBsYWNlSHR0cFJlcGx5KG5ld19yZXApOwogICAgICAgIHN0b3JlRW50cnkoKS0+
dGltZXN0YW1wc1NldCgpOwoKICAgICAgICBhbC0+cmVwbHkgPSBuZXdfcmVwOwoKICAgICAgICBp
ZiAoIWFkYXB0ZWRCb2R5U291cmNlKSAvLyBubyBib2R5CiAgICAgICAgICAgIHN0b3JlRW50cnko
KS0+Y29tcGxldGUoKTsKICAgICAgICBjbGllbnRHZXRNb3JlRGF0YShub2RlLCB0aGlzKTsKICAg
IH0KCiAgICAvLyB3ZSBhcmUgZG9uZSB3aXRoIGdldHRpbmcgaGVhZGVycyAoYnV0IG1heSBiZSBy
ZWNlaXZpbmcgYm9keSkKICAgIGNsZWFyQWRhcHRhdGlvbih2aXJnaW5IZWFkU291cmNlKTsKCiAg
ICBpZiAoIXJlcXVlc3Rfc2F0aXNmYWN0aW9uX21vZGUpCiAgICAgICAgZG9DYWxsb3V0cygpOwp9
Cgp2b2lkCkNsaWVudEh0dHBSZXF1ZXN0OjpoYW5kbGVBZGFwdGF0aW9uQmxvY2soY29uc3QgQWRh
cHRhdGlvbjo6QW5zd2VyICZhbnN3ZXIpCnsKICAgIHN0YXRpYyBjb25zdCBhdXRvIGQgPSBNYWtl
TmFtZWRFcnJvckRldGFpbCgiUkVRTU9EX0JMT0NLIik7CiAgICByZXF1ZXN0LT5kZXRhaWxFcnJv
cihFUlJfQUNDRVNTX0RFTklFRCwgZCk7CiAgICBBY2xNYXRjaGVkTmFtZSA9IGFuc3dlci5ydWxl
SWQudGVybWVkQnVmKCk7CiAgICBhc3NlcnQoY2FsbG91dENvbnRleHQpOwogICAgY2FsbG91dENv
bnRleHQtPmNsaWVudEFjY2Vzc0NoZWNrRG9uZShBQ0NFU1NfREVOSUVEKTsKICAgIEFjbE1hdGNo
ZWROYW1lID0gbnVsbHB0cjsKfQoKdm9pZApDbGllbnRIdHRwUmVxdWVzdDo6cmVzdW1lQm9keVN0
b3JhZ2UoKQp7CiAgICBpZiAoIWFkYXB0ZWRCb2R5U291cmNlKQogICAgICAgIHJldHVybjsKCiAg
ICBub3RlTW9yZUJvZHlEYXRhQXZhaWxhYmxlKGFkYXB0ZWRCb2R5U291cmNlKTsKfQoKdm9pZApD
bGllbnRIdHRwUmVxdWVzdDo6bm90ZU1vcmVCb2R5RGF0YUF2YWlsYWJsZShCb2R5UGlwZTo6UG9p
bnRlcikKewogICAgYXNzZXJ0KHJlcXVlc3Rfc2F0aXNmYWN0aW9uX21vZGUpOwogICAgYXNzZXJ0
KGFkYXB0ZWRCb2R5U291cmNlICE9IG51bGxwdHIpOwoKICAgIGlmIChzaXplX3QgY29udGVudFNp
emUgPSBhZGFwdGVkQm9keVNvdXJjZS0+YnVmKCkuY29udGVudFNpemUoKSkgewogICAgICAgIGNv
bnN0IHNpemVfdCBzcGFjZUF2YWlsYWJsZSA9IHN0b3JlRW50cnkoKS0+Ynl0ZXNXYW50ZWQoUmFu
Z2U8c2l6ZV90PigwLGNvbnRlbnRTaXplKSk7CgogICAgICAgIGlmIChzcGFjZUF2YWlsYWJsZSA8
IGNvbnRlbnRTaXplICkgewogICAgICAgICAgICAvLyBObyBvciBwYXJ0aWFsIGJvZHkgZGF0YSBj
b25zdW1pbmcKICAgICAgICAgICAgdHlwZWRlZiBOdWxsYXJ5TWVtRnVuVDxDbGllbnRIdHRwUmVx
dWVzdD4gRGlhbGVyOwogICAgICAgICAgICBBc3luY0NhbGw6OlBvaW50ZXIgY2FsbCA9IGFzeW5j
Q2FsbCg5MywgNSwgIkNsaWVudEh0dHBSZXF1ZXN0OjpyZXN1bWVCb2R5U3RvcmFnZSIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpYWxlcih0aGlzLCAm
Q2xpZW50SHR0cFJlcXVlc3Q6OnJlc3VtZUJvZHlTdG9yYWdlKSk7CiAgICAgICAgICAgIHN0b3Jl
RW50cnkoKS0+ZGVmZXJQcm9kdWNlcihjYWxsKTsKICAgICAgICB9CgogICAgICAgIGlmICghc3Bh
Y2VBdmFpbGFibGUpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgaWYgKHNwYWNlQXZhaWxh
YmxlIDwgY29udGVudFNpemUgKQogICAgICAgICAgICBjb250ZW50U2l6ZSA9IHNwYWNlQXZhaWxh
YmxlOwoKICAgICAgICBCb2R5UGlwZUNoZWNrb3V0IGJwYygqYWRhcHRlZEJvZHlTb3VyY2UpOwog
ICAgICAgIGNvbnN0IFN0b3JlSU9CdWZmZXIgaW9CdWYoJmJwYy5idWYsIHJlcXVlc3Rfc2F0aXNm
YWN0aW9uX29mZnNldCwgY29udGVudFNpemUpOwogICAgICAgIHN0b3JlRW50cnkoKS0+d3JpdGUo
aW9CdWYpOwogICAgICAgIC8vIGFzc3VtZSBTdG9yZUVudHJ5Ojp3cml0ZSgpIHdyaXRlcyB0aGUg
ZW50aXJlIGlvQnVmCiAgICAgICAgcmVxdWVzdF9zYXRpc2ZhY3Rpb25fb2Zmc2V0ICs9IGlvQnVm
Lmxlbmd0aDsKICAgICAgICBicGMuYnVmLmNvbnN1bWUoY29udGVudFNpemUpOwogICAgICAgIGJw
Yy5jaGVja0luKCk7CiAgICB9CgogICAgaWYgKGFkYXB0ZWRCb2R5U291cmNlLT5leGhhdXN0ZWQo
KSkgewogICAgICAgIC8vIFhYWDogU2V0dGluZyByZWNlaXZlZFdob2xlQWRhcHRlZFJlcGx5IGhl
cmUgaXMgYSB3b3JrYXJvdW5kIGZvciBhCiAgICAgICAgLy8gcmVncmVzc2lvbiwgYXMgZGVzY3Jp
YmVkIGluIGh0dHBzOi8vYnVncy5zcXVpZC1jYWNoZS5vcmcvc2hvd19idWcuY2dpP2lkPTUxODcj
YzYKICAgICAgICByZWNlaXZlZFdob2xlQWRhcHRlZFJlcGx5ID0gdHJ1ZTsKICAgICAgICBkZWJ1
Z3MoODUsIERCR19JTVBPUlRBTlQsICJXQVJOSU5HOiBTcXVpZCBidWcgNTE4NyB3b3JrYXJvdW5k
IHRyaWdnZXJlZCIpOwogICAgICAgIGVuZFJlcXVlc3RTYXRpc2ZhY3Rpb24oKTsKICAgIH0KICAg
IC8vIGVsc2Ugd2FpdCBmb3IgbW9yZSBib2R5IGRhdGEKfQoKdm9pZApDbGllbnRIdHRwUmVxdWVz
dDo6bm90ZUJvZHlQcm9kdWN0aW9uRW5kZWQoQm9keVBpcGU6OlBvaW50ZXIpCnsKICAgIGFzc2Vy
dCghdmlyZ2luSGVhZFNvdXJjZSk7CgogICAgLy8gZGlzdGluZ3Vpc2ggdGhpcyBjb2RlIHBhdGgg
ZnJvbSBmdXR1cmUgbm90ZUJvZHlQcm9kdWNlckFib3J0ZWQoKSB0aGF0CiAgICAvLyB3b3VsZCBj
b250aW51ZSBzdG9yaW5nL2RlbGl2ZXJpbmcgKHRydW5jYXRlZCkgcmVwbHkgaWYgbmVjZXNzYXJ5
IChUT0RPKQogICAgcmVjZWl2ZWRXaG9sZUFkYXB0ZWRSZXBseSA9IHRydWU7CgogICAgLy8gc2hv
dWxkIHdlIGVuZCByZXF1ZXN0IHNhdGlzZmFjdGlvbiBub3c/CiAgICBpZiAoYWRhcHRlZEJvZHlT
b3VyY2UgIT0gbnVsbHB0ciAmJiBhZGFwdGVkQm9keVNvdXJjZS0+ZXhoYXVzdGVkKCkpCiAgICAg
ICAgZW5kUmVxdWVzdFNhdGlzZmFjdGlvbigpOwp9Cgp2b2lkCkNsaWVudEh0dHBSZXF1ZXN0Ojpl
bmRSZXF1ZXN0U2F0aXNmYWN0aW9uKCkKewogICAgZGVidWdzKDg1LDQsIHRoaXMgPDwgIiBlbmRz
IHJlcXVlc3Qgc2F0aXNmYWN0aW9uIik7CiAgICBhc3NlcnQocmVxdWVzdF9zYXRpc2ZhY3Rpb25f
bW9kZSk7CiAgICBzdG9wQ29uc3VtaW5nRnJvbShhZGFwdGVkQm9keVNvdXJjZSk7CgogICAgLy8g
VE9ETzogYW55dGhpbmcgZWxzZSBuZWVkZWQgdG8gZW5kIHN0b3JlIGVudHJ5IGZvcm1hdGlvbiBj
b3JyZWN0bHk/CiAgICBpZiAocmVjZWl2ZWRXaG9sZUFkYXB0ZWRSZXBseSkgewogICAgICAgIC8v
IFdlIHJlY2VpdmVkIHRoZSBlbnRpcmUgcmVwbHkgcGVyIHJlY2VpdmVkV2hvbGVBZGFwdGVkUmVw
bHkuCiAgICAgICAgLy8gV2UgYXJlIGNhbGxlZCB3aGVuIHdlIGNvbnN1bWVkIGV2ZXJ5dGhpbmcg
cmVjZWl2ZWQgKHBlciBvdXIgY2FsbGVycykuCiAgICAgICAgLy8gV2UgY29uc3VtZSBvbmx5IHdo
YXQgd2Ugc3RvcmUgcGVyIG5vdGVNb3JlQm9keURhdGFBdmFpbGFibGUoKS4KICAgICAgICBzdG9y
ZUVudHJ5KCktPmNvbXBsZXRlU3VjY2Vzc2Z1bGx5KCJyZWNlaXZlZCwgY29uc3VtZWQsIGFuZCwg
aGVuY2UsIHN0b3JlZCB0aGUgZW50aXJlIFJFUU1PRCByZXBseSIpOwogICAgfSBlbHNlIHsKICAg
ICAgICBzdG9yZUVudHJ5KCktPmNvbXBsZXRlVHJ1bmNhdGVkKCJSRVFNT0QgcmVxdWVzdCBzYXRp
c2ZhY3Rpb24gZGVmYXVsdCIpOwogICAgfQp9Cgp2b2lkCkNsaWVudEh0dHBSZXF1ZXN0Ojpub3Rl
Qm9keVByb2R1Y2VyQWJvcnRlZChCb2R5UGlwZTo6UG9pbnRlcikKewogICAgYXNzZXJ0KCF2aXJn
aW5IZWFkU291cmNlKTsKICAgIHN0b3BDb25zdW1pbmdGcm9tKGFkYXB0ZWRCb2R5U291cmNlKTsK
CiAgICBkZWJ1Z3MoODUsMywgIlJFUU1PRCBib2R5IHByb2R1Y3Rpb24gZmFpbGVkIik7CiAgICBp
ZiAocmVxdWVzdF9zYXRpc2ZhY3Rpb25fbW9kZSkgeyAvLyB0b28gbGF0ZSB0byByZWNvdmVyIG9y
IHNlcnZlIGFuIGVycm9yCiAgICAgICAgc3RhdGljIGNvbnN0IGF1dG8gZCA9IE1ha2VOYW1lZEVy
cm9yRGV0YWlsKCJDTFRfUkVRTU9EX1JFU1BfQk9EWSIpOwogICAgICAgIHJlcXVlc3QtPmRldGFp
bEVycm9yKEVSUl9JQ0FQX0ZBSUxVUkUsIGQpOwogICAgICAgIGNvbnN0IENvbW06OkNvbm5lY3Rp
b25Qb2ludGVyIGMgPSBnZXRDb25uKCktPmNsaWVudENvbm5lY3Rpb247CiAgICAgICAgTXVzdChD
b21tOjpJc0Nvbm5PcGVuKGMpKTsKICAgICAgICBjLT5jbG9zZSgpOyAvLyBkcmFzdGljLCBidXQg
d2UgbWF5IGJlIHdyaXRpbmcgYSByZXNwb25zZSBhbHJlYWR5CiAgICB9IGVsc2UgewogICAgICAg
IHN0YXRpYyBjb25zdCBhdXRvIGQgPSBNYWtlTmFtZWRFcnJvckRldGFpbCgiQ0xUX1JFUU1PRF9S
RVFfQk9EWSIpOwogICAgICAgIGhhbmRsZUFkYXB0YXRpb25GYWlsdXJlKGQpOwogICAgfQp9Cgp2
b2lkCkNsaWVudEh0dHBSZXF1ZXN0OjpoYW5kbGVBZGFwdGF0aW9uRmFpbHVyZShjb25zdCBFcnJv
ckRldGFpbDo6UG9pbnRlciAmZXJyRGV0YWlsLCBib29sIGJ5cGFzc2FibGUpCnsKICAgIGRlYnVn
cyg4NSwzLCAiaGFuZGxlQWRhcHRhdGlvbkZhaWx1cmUoIiA8PCBieXBhc3NhYmxlIDw8ICIpIik7
CgogICAgY29uc3QgYm9vbCB1c2VkU3RvcmUgPSBzdG9yZUVudHJ5KCkgJiYgIXN0b3JlRW50cnko
KS0+aXNFbXB0eSgpOwogICAgY29uc3QgYm9vbCB1c2VkUGlwZSA9IHJlcXVlc3QtPmJvZHlfcGlw
ZSAhPSBudWxscHRyICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC0+Ym9keV9w
aXBlLT5jb25zdW1lZFNpemUoKSA+IDA7CgogICAgaWYgKGJ5cGFzc2FibGUgJiYgIXVzZWRTdG9y
ZSAmJiAhdXNlZFBpcGUpIHsKICAgICAgICBkZWJ1Z3MoODUsMywgIklDQVAgUkVRTU9EIGNhbGxv
dXQgZmFpbGVkLCBieXBhc3Npbmc6ICIgPDwgY2FsbG91dENvbnRleHQpOwogICAgICAgIGlmIChj
YWxsb3V0Q29udGV4dCkKICAgICAgICAgICAgZG9DYWxsb3V0cygpOwogICAgICAgIHJldHVybjsK
ICAgIH0KCiAgICBkZWJ1Z3MoODUsMywgIklDQVAgUkVRTU9EIGNhbGxvdXQgZmFpbGVkLCByZXNw
b25kaW5nIHdpdGggZXJyb3IiKTsKCiAgICBjbGllbnRTdHJlYW1Ob2RlICpub2RlID0gKGNsaWVu
dFN0cmVhbU5vZGUgKiljbGllbnRfc3RyZWFtLnRhaWwtPnByZXYtPmRhdGE7CiAgICBjbGllbnRS
ZXBseUNvbnRleHQgKnJlcENvbnRleHQgPSBkeW5hbWljX2Nhc3Q8Y2xpZW50UmVwbHlDb250ZXh0
ICo+KG5vZGUtPmRhdGEuZ2V0UmF3KCkpOwogICAgYXNzZXJ0KHJlcENvbnRleHQpOwoKICAgIGNh
bGxvdXRzRXJyb3IoRVJSX0lDQVBfRkFJTFVSRSwgZXJyRGV0YWlsKTsKCiAgICBpZiAoY2FsbG91
dENvbnRleHQpCiAgICAgICAgZG9DYWxsb3V0cygpOwp9Cgp2b2lkCkNsaWVudEh0dHBSZXF1ZXN0
OjpjYWxsRXhjZXB0aW9uKGNvbnN0IHN0ZDo6ZXhjZXB0aW9uICZleCkKewogICAgaWYgKGNvbnN0
IGF1dG8gY2xpZW50Q29ubiA9IGdldENvbm4oKSA/IGdldENvbm4oKS0+Y2xpZW50Q29ubmVjdGlv
biA6IG51bGxwdHIpIHsKICAgICAgICBpZiAoQ29tbTo6SXNDb25uT3BlbihjbGllbnRDb25uKSkg
ewogICAgICAgICAgICBkZWJ1Z3MoODUsIDMsICJjbG9zaW5nIGFmdGVyIGV4Y2VwdGlvbjogIiA8
PCBleC53aGF0KCkpOwogICAgICAgICAgICBjbGllbnRDb25uLT5jbG9zZSgpOyAvLyBpbml0aWF0
ZSBvcmRlcmx5IHRvcC10by1ib3R0b20gY2xlYW51cAogICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgfQogICAgfQogICAgZGVidWdzKDg1LCBEQkdfSU1QT1JUQU5ULCAiQ2xpZW50SHR0cFJlcXVl
c3QgZXhjZXB0aW9uIHdpdGhvdXQgY29ubmVjdGlvbi4gSWdub3JpbmcgIiA8PCBleC53aGF0KCkp
OwogICAgLy8gWFhYOiBOb3JtYWxseSwgd2UgbXVzdFN0b3AoKSBidXQgd2UgY2Fubm90IGRvIHRo
YXQgaGVyZSBiZWNhdXNlIGl0IGlzCiAgICAvLyBsaWtlbHkgdG8gbGVhdmUgSHR0cDo6U3RyZWFt
IGFuZCBDb25uU3RhdGVEYXRhIHdpdGggYSBkYW5nbGluZyBodHRwCiAgICAvLyBwb2ludGVyLiBT
ZWUgcjEzNDgwIG9yIFhYWCBpbiBIdHRwOjpTdHJlYW0gY2xhc3MgZGVzY3JpcHRpb24uCn0KI2Vu
ZGlmCgovLyBYWFg6IG1vZGlmeSBhbmQgdXNlIHdpdGggQ2xpZW50UmVxdWVzdENvbnRleHQ6OmNs
aWVudEFjY2Vzc0NoZWNrRG9uZSB0b28uCnZvaWQKQ2xpZW50SHR0cFJlcXVlc3Q6OmNhbGxvdXRz
RXJyb3IoY29uc3QgZXJyX3R5cGUgZXJyb3IsIGNvbnN0IEVycm9yRGV0YWlsOjpQb2ludGVyICZl
cnJEZXRhaWwpCnsKICAgIC8vIFRoZSBvcmlnaW5hbCBhdXRob3Igb2YgdGhlIGNvZGUgYWxzbyB3
YW50ZWQgdG8gcGFzcyBhbiBlcnJubyB0bwogICAgLy8gc2V0UmVwbHlUb0Vycm9yLCBidXQgaXQg
c2VlbXMgdW5saWtlbHkgdGhhdCB0aGUgZXJybm8gcmVmbGVjdHMgdGhlCiAgICAvLyB0cnVlIGNh
dXNlIG9mIHRoZSBlcnJvciBhdCB0aGlzIHBvaW50LCBzbyBJIGRpZCBub3QgcGFzcyBpdC4KICAg
IGlmIChjYWxsb3V0Q29udGV4dCkgewogICAgICAgIENvbm5TdGF0ZURhdGEgKiBjID0gZ2V0Q29u
bigpOwogICAgICAgIGNhbGxvdXRDb250ZXh0LT5lcnJvciA9IGNsaWVudEJ1aWxkRXJyb3IoZXJy
b3IsIEh0dHA6OnNjSW50ZXJuYWxTZXJ2ZXJFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBudWxscHRyLCBjLCByZXF1ZXN0LCBhbCk7CiNpZiBVU0VfQVVUSAogICAgICAgIGNh
bGxvdXRDb250ZXh0LT5lcnJvci0+YXV0aF91c2VyX3JlcXVlc3QgPQogICAgICAgICAgICBjICE9
IG51bGxwdHIgJiYgYy0+Z2V0QXV0aCgpICE9IG51bGxwdHIgPyBjLT5nZXRBdXRoKCkgOiByZXF1
ZXN0LT5hdXRoX3VzZXJfcmVxdWVzdDsKI2VuZGlmCiAgICAgICAgY2FsbG91dENvbnRleHQtPmVy
cm9yLT5kZXRhaWxFcnJvcihlcnJEZXRhaWwpOwogICAgICAgIGNhbGxvdXRDb250ZXh0LT5yZWFk
TmV4dFJlcXVlc3QgPSB0cnVlOwogICAgICAgIGlmIChjICE9IG51bGxwdHIpCiAgICAgICAgICAg
IGMtPmV4cGVjdE5vRm9yd2FyZGluZygpOwogICAgfQogICAgLy9lbHNlIGlmKGNhbGxvdXRDb250
ZXh0ID09IE5VTEwpIGlzIGl0IHBvc3NpYmxlPwp9Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>16425</attachid>
            <date>2024-07-15 15:14:47 +0300</date>
            <delta_ts>2024-07-15 15:14:47 +0300</delta_ts>
            <desc>Вид ошибки</desc>
            <filename>Cache.log.png</filename>
            <type>image/png</type>
            <size>57236</size>
            <attacher name="Barsook">knaz-san</attacher>
            
              <data encoding="base64">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
SUVORK5CYII=
</data>

          </attachment>
      

    </bug>

</bugzilla>