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

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

    <bug>
          <bug_id>57506</bug_id>
          
          <creation_ts>2011-03-30 14:37:58 -0700</creation_ts>
          <short_desc>[Qt] Rename certain POSIXy CoreIPC/qt and Platform/qt files</short_desc>
          <delta_ts>2011-03-30 15:58:15 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>49791</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt, QtTriaged</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Siddharth Mathur">s.mathur</reporter>
          <assigned_to name="Siddharth Mathur">s.mathur</assigned_to>
          <cc>kbalazs</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>ossy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>376680</commentid>
    <comment_count>0</comment_count>
    <who name="Siddharth Mathur">s.mathur</who>
    <bug_when>2011-03-30 14:37:58 -0700</bug_when>
    <thetext>In Source/WebKit2/Platform/qt/, rename SharedMemoryQt.cpp to SharedMemoryPosix.cpp. 
In Source/WebKit2/Platform/CoreIPC/qt/, rename ConnectionQt.cpp to ConnectionPosix.cpp

Both these files are very non-portable POSIX in their implementation, and of little use for WebKit2 on Symbian or Windows via Qt. Hence renaming them in preparation of Bug 55875 Bug 55877 which will add SharedMemorySymbian.cpp and ConnectionSymbian.cpp to the abovementioned folders.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376706</commentid>
    <comment_count>1</comment_count>
      <attachid>87624</attachid>
    <who name="Siddharth Mathur">s.mathur</who>
    <bug_when>2011-03-30 14:59:08 -0700</bug_when>
    <thetext>Created attachment 87624
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376755</commentid>
    <comment_count>2</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-03-30 15:58:15 -0700</bug_when>
    <thetext>We can handle the renames in the GTK patch. I have commented on that.

*** This bug has been marked as a duplicate of bug 49791 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87624</attachid>
            <date>2011-03-30 14:59:08 -0700</date>
            <delta_ts>2011-03-30 14:59:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>57506_v1.patch</filename>
            <type>text/plain</type>
            <size>40889</size>
            <attacher name="Siddharth Mathur">s.mathur</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAwMDYwZjEwLi40MTU0YmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYg
QEAKKzIwMTEtMDMtMzAgIFNpZGRoYXJ0aCBNYXRodXIgIDxzaWRkaGFydGgubWF0aHVyQG5va2lh
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworCVtRdF0gUmVu
YW1lIGNlcnRhaW4gUE9TSVh5IENvcmVJUEMvcXQgYW5kIFBsYXRmb3JtL3F0IGZpbGVzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NzUwNgorCisgICAg
ICAgIFJlbmFtZWQgY2VydGFpbiBRdCBJUEMgZmlsZXMgdGhhdCBub3cgZGlyZWN0bHkgdXNlIFBP
U0lYIEFQSXMgYW5kIGhlbmNlIG5vdCBwb3J0YWJsZSB0byBTeW1iaW4gb3IgV2luZG93cyAKKwor
ICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvcXQvQ29ubmVjdGlvblBvc2l4LmNwcDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvQ29ubmVjdGlvblF0LmNw
cC4KKyAgICAgICAgKiBQbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlQb3NpeC5jcHA6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlRdC5jcHAuCisgICAg
ICAgICogV2ViS2l0Mi5wcm86CisKIDIwMTEtMDMtMzAgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L0Nvbm5lY3Rpb25Qb3NpeC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L0Nvbm5lY3Rpb25Qb3NpeC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI1ZDdkYwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvQ29ubmVjdGlvblBvc2l4
LmNwcApAQCAtMCwwICsxLDM2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisKKyNpbmNsdWRlICJBcmd1bWVu
dEVuY29kZXIuaCIKKyNpbmNsdWRlICJQcm9jZXNzTGF1bmNoZXIuaCIKKyNpbmNsdWRlICJXb3Jr
SXRlbS5oIgorI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NQ
cm94eS5oIgorI2luY2x1ZGUgPFFBcHBsaWNhdGlvbj4KKyNpbmNsdWRlIDxRU29ja2V0Tm90aWZp
ZXI+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1
ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgQ29yZUlQQyB7CisKK3N0
YXRpYyBjb25zdCBzaXplX3QgbWVzc2FnZU1heFNpemUgPSA0MDk2Oworc3RhdGljIGNvbnN0IHNp
emVfdCBhdHRhY2htZW50TWF4QW1vdW50ID0gMjU1OworCitlbnVtIHsKKyAgICBNZXNzYWdlQm9k
eUlzT09MID0gMSA8PCAzMQorfTsKKworY2xhc3MgTWVzc2FnZUluZm8geworcHVibGljOgorICAg
IE1lc3NhZ2VJbmZvKCkgeyB9CisKKyAgICBNZXNzYWdlSW5mbyhNZXNzYWdlSUQgbWVzc2FnZUlE
LCBzaXplX3QgYm9keVNpemUsIHNpemVfdCBpbml0aWFsQXR0YWNobWVudENvdW50KQorICAgICAg
ICA6IG1fbWVzc2FnZUlEKG1lc3NhZ2VJRC50b0ludCgpKQorICAgICAgICAsIG1fYm9keVNpemUo
Ym9keVNpemUpCisgICAgICAgICwgbV9hdHRhY2htZW50Q291bnQoaW5pdGlhbEF0dGFjaG1lbnRD
b3VudCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghKG1fbWVzc2FnZUlEICYgTWVzc2FnZUJvZHlJ
c09PTCkpOworICAgIH0KKworICAgIHZvaWQgc2V0TWVzc2FnZUJvZHlPT0woKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKCFpc01lc3NhZ2VCb2R5T09MKCkpOworCisgICAgICAgIG1fbWVzc2FnZUlE
IHw9IE1lc3NhZ2VCb2R5SXNPT0w7CisgICAgICAgIG1fYXR0YWNobWVudENvdW50Kys7CisgICAg
fQorCisgICAgYm9vbCBpc01lc3NhZ2VCb2R5T09MKCkgY29uc3QgeyByZXR1cm4gbV9tZXNzYWdl
SUQgJiBNZXNzYWdlQm9keUlzT09MOyB9CisKKyAgICBzaXplX3QgYm9keVNpemUoKSBjb25zdCB7
IHJldHVybiBtX2JvZHlTaXplOyB9CisKKyAgICBNZXNzYWdlSUQgbWVzc2FnZUlEKCkgY29uc3Qg
eyByZXR1cm4gTWVzc2FnZUlEOjpmcm9tSW50KG1fbWVzc2FnZUlEICYgfk1lc3NhZ2VCb2R5SXNP
T0wpOyB9CisKKyAgICBzaXplX3QgYXR0YWNobWVudENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9h
dHRhY2htZW50Q291bnQ7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MzJfdCBtX21lc3NhZ2VJRDsK
KyAgICBzaXplX3QgbV9ib2R5U2l6ZTsKKyAgICBzaXplX3QgbV9hdHRhY2htZW50Q291bnQ7Cit9
OworCit2b2lkIENvbm5lY3Rpb246OnBsYXRmb3JtSW5pdGlhbGl6ZShJZGVudGlmaWVyIGlkZW50
aWZpZXIpCit7CisgICAgbV9zb2NrZXREZXNjcmlwdG9yID0gaWRlbnRpZmllcjsKKyAgICBtX3Nv
Y2tldE5vdGlmaWVyID0gMDsKKyAgICBtX3JlYWRCdWZmZXIucmVzaXplKG1lc3NhZ2VNYXhTaXpl
KTsKKyAgICBtX2N1cnJlbnRNZXNzYWdlU2l6ZSA9IDA7Cit9CisKK3ZvaWQgQ29ubmVjdGlvbjo6
cGxhdGZvcm1JbnZhbGlkYXRlKCkKK3sKKyAgICBpZiAobV9zb2NrZXREZXNjcmlwdG9yICE9IC0x
KQorICAgICAgICB3aGlsZSAoY2xvc2UobV9zb2NrZXREZXNjcmlwdG9yKSA9PSAtMSAmJiBlcnJu
byA9PSBFSU5UUikgeyB9CisKKyAgICBpZiAoIW1faXNDb25uZWN0ZWQpCisgICAgICAgIHJldHVy
bjsKKworICAgIGRlbGV0ZSBtX3NvY2tldE5vdGlmaWVyOworICAgIG1fc29ja2V0Tm90aWZpZXIg
PSAwOworICAgIG1fc29ja2V0RGVzY3JpcHRvciA9IC0xOworICAgIG1faXNDb25uZWN0ZWQgPSBm
YWxzZTsKK30KKworY2xhc3MgU29ja2V0Tm90aWZpZXJSZXNvdXJjZUd1YXJkIHsKK3B1YmxpYzoK
KyAgICBTb2NrZXROb3RpZmllclJlc291cmNlR3VhcmQoUVNvY2tldE5vdGlmaWVyKiBzb2NrZXRO
b3RpZmllcikKKyAgICAgICAgOiBtX3NvY2tldE5vdGlmaWVyKHNvY2tldE5vdGlmaWVyKQorICAg
IHsKKyAgICAgICAgbV9zb2NrZXROb3RpZmllci0+c2V0RW5hYmxlZChmYWxzZSk7CisgICAgfQor
CisgICAgflNvY2tldE5vdGlmaWVyUmVzb3VyY2VHdWFyZCgpCisgICAgeworICAgICAgICBtX3Nv
Y2tldE5vdGlmaWVyLT5zZXRFbmFibGVkKHRydWUpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBR
U29ja2V0Tm90aWZpZXIqIGNvbnN0IG1fc29ja2V0Tm90aWZpZXI7Cit9OworCit0ZW1wbGF0ZTxj
bGFzcyBULCBjbGFzcyBpdGVyYXRvcj4KK2NsYXNzIEF0dGFjaG1lbnRSZXNvdXJjZUd1YXJkIHsK
K3B1YmxpYzoKKyAgICBBdHRhY2htZW50UmVzb3VyY2VHdWFyZChUJiBhdHRhY2htZW50cykKKyAg
ICAgICAgOiBtX2F0dGFjaG1lbnRzKGF0dGFjaG1lbnRzKQorICAgIHsKKyAgICB9CisgICAgfkF0
dGFjaG1lbnRSZXNvdXJjZUd1YXJkKCkKKyAgICB7CisgICAgICAgIGl0ZXJhdG9yIGVuZCA9IG1f
YXR0YWNobWVudHMuZW5kKCk7CisgICAgICAgIGZvciAoaXRlcmF0b3IgaSA9IG1fYXR0YWNobWVu
dHMuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkKKyAgICAgICAgICAgIGktPmRpc3Bvc2UoKTsKKyAg
ICB9Citwcml2YXRlOgorICAgIFQmIG1fYXR0YWNobWVudHM7Cit9OworCit2b2lkIENvbm5lY3Rp
b246OnJlYWR5UmVhZEhhbmRsZXIoKQoreworICAgIERlcXVlPEF0dGFjaG1lbnQ+IGF0dGFjaG1l
bnRzOworICAgIFNvY2tldE5vdGlmaWVyUmVzb3VyY2VHdWFyZCBzb2NrZXROb3RpZmllckVuYWJs
ZXIobV9zb2NrZXROb3RpZmllcik7CisgICAgQXR0YWNobWVudFJlc291cmNlR3VhcmQ8RGVxdWU8
QXR0YWNobWVudD4sIERlcXVlPEF0dGFjaG1lbnQ+OjppdGVyYXRvcj4gYXR0YWNoZW1lbnREaXNw
b3NlcihhdHRhY2htZW50cyk7CisKKyAgICBjaGFyIGF0dGFjaG1lbnREZXNjcmlwdG9yQnVmZmVy
W0NNU0dfU1BBQ0Uoc2l6ZW9mKGludCkgKiAoYXR0YWNobWVudE1heEFtb3VudCkpXTsKKyAgICBz
dHJ1Y3QgbXNnaGRyIG1lc3NhZ2U7CisgICAgbWVtc2V0KCZtZXNzYWdlLCAwLCBzaXplb2YobWVz
c2FnZSkpOworCisgICAgc3RydWN0IGlvdmVjIGlvdlsxXTsKKyAgICBtZW1zZXQoJmlvdiwgMCwg
c2l6ZW9mKGlvdikpOworCisgICAgbWVzc2FnZS5tc2dfY29udHJvbCA9IGF0dGFjaG1lbnREZXNj
cmlwdG9yQnVmZmVyOworICAgIG1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBDTVNHX1NQQUNFKHNp
emVvZihpbnQpICogKGF0dGFjaG1lbnRNYXhBbW91bnQpKTsKKworICAgIGlvdlswXS5pb3ZfYmFz
ZSA9IG1fcmVhZEJ1ZmZlci5kYXRhKCk7CisgICAgaW92WzBdLmlvdl9sZW4gPSBtX3JlYWRCdWZm
ZXIuc2l6ZSgpOworCisgICAgbWVzc2FnZS5tc2dfaW92ID0gaW92OworICAgIG1lc3NhZ2UubXNn
X2lvdmxlbiA9IDE7CisKKworICAgIGludCBtZXNzYWdlTGVuZ3RoID0gMDsKKyAgICB3aGlsZSAo
KG1lc3NhZ2VMZW5ndGggPSByZWN2bXNnKG1fc29ja2V0RGVzY3JpcHRvciwgJm1lc3NhZ2UsIDAp
KSA9PSAtMSkgeworICAgICAgICBpZiAoZXJybm8gIT0gRUlOVFIpCisgICAgICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgc3RydWN0IGNtc2doZHIqIGNvbnRyb2xNZXNzYWdlID0gQ01TR19G
SVJTVEhEUigmbWVzc2FnZSk7CisKKyAgICBNZXNzYWdlSW5mbyBtZXNzYWdlSW5mbzsKKyAgICB1
bnNpZ25lZCBjaGFyKiBtZXNzYWdlRGF0YSA9IG1fcmVhZEJ1ZmZlci5kYXRhKCk7CisKKyAgICBt
ZW1jcHkoJm1lc3NhZ2VJbmZvLCBtZXNzYWdlRGF0YSwgc2l6ZW9mKG1lc3NhZ2VJbmZvKSk7Cisg
ICAgQVNTRVJUKG1lc3NhZ2VMZW5ndGggPT0gc2l6ZW9mKG1lc3NhZ2VJbmZvKSArIG1lc3NhZ2VJ
bmZvLmF0dGFjaG1lbnRDb3VudCgpICogc2l6ZW9mKHNpemVfdCkgKyAobWVzc2FnZUluZm8uaXNN
ZXNzYWdlQm9keU9PTCgpID8gMCA6IG1lc3NhZ2VJbmZvLmJvZHlTaXplKCkpKTsKKworICAgIG1l
c3NhZ2VEYXRhICs9IHNpemVvZihtZXNzYWdlSW5mbyk7CisKKyAgICBSZWZQdHI8V2ViS2l0OjpT
aGFyZWRNZW1vcnk+IG9vbE1lc3NhZ2VCb2R5OworCisgICAgaWYgKG1lc3NhZ2VJbmZvLmF0dGFj
aG1lbnRDb3VudCgpKSB7CisgICAgICAgIGlmIChjb250cm9sTWVzc2FnZSAmJiBjb250cm9sTWVz
c2FnZS0+Y21zZ19sZXZlbCA9PSBTT0xfU09DS0VUICYmIGNvbnRyb2xNZXNzYWdlLT5jbXNnX3R5
cGUgPT0gU0NNX1JJR0hUUykgeworICAgICAgICAgICAgc2l6ZV90IGF0dGFjaG1lbnRTaXplc1tt
ZXNzYWdlSW5mby5hdHRhY2htZW50Q291bnQoKV07CisgICAgICAgICAgICBtZW1jcHkoYXR0YWNo
bWVudFNpemVzLCBtZXNzYWdlRGF0YSwgc2l6ZW9mKGF0dGFjaG1lbnRTaXplcykpOworCisgICAg
ICAgICAgICBtZXNzYWdlRGF0YSArPSBzaXplb2YoYXR0YWNobWVudFNpemVzKTsKKworICAgICAg
ICAgICAgaW50IGZpbGVEZXNjcmlwdG9yc1ttZXNzYWdlSW5mby5hdHRhY2htZW50Q291bnQoKV07
CisgICAgICAgICAgICBtZW1jcHkoZmlsZURlc2NyaXB0b3JzLCBDTVNHX0RBVEEoY29udHJvbE1l
c3NhZ2UpLCBzaXplb2YoZmlsZURlc2NyaXB0b3JzKSk7CisKKyAgICAgICAgICAgIGludCBhdHRh
Y2htZW50Q291bnQgPSBtZXNzYWdlSW5mby5hdHRhY2htZW50Q291bnQoKTsKKworICAgICAgICAg
ICAgaWYgKG1lc3NhZ2VJbmZvLmlzTWVzc2FnZUJvZHlPT0woKSkKKyAgICAgICAgICAgICAgICBh
dHRhY2htZW50Q291bnQtLTsKKworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRh
Y2htZW50Q291bnQ7ICsraSkgeworICAgICAgICAgICAgICAgIHdoaWxlIChmY250bChmaWxlRGVz
Y3JpcHRvcnNbaV0sIEZfU0VURkwsIEZEX0NMT0VYRUMpID09IC0xKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChlcnJubyAhPSBFSU5UUikgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0YWNobWVudENvdW50OyArK2kpCisgICAg
ICAgICAgICAgICAgYXR0YWNobWVudHMuYXBwZW5kKEF0dGFjaG1lbnQoZmlsZURlc2NyaXB0b3Jz
W2ldLCBhdHRhY2htZW50U2l6ZXNbaV0pKTsKKworICAgICAgICAgICAgaWYgKG1lc3NhZ2VJbmZv
LmlzTWVzc2FnZUJvZHlPT0woKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChtZXNzYWdlSW5m
by5ib2R5U2l6ZSgpKTsKKworICAgICAgICAgICAgICAgIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpI
YW5kbGUgaGFuZGxlOworICAgICAgICAgICAgICAgIGhhbmRsZS5hZG9wdEZyb21BdHRhY2htZW50
KGZpbGVEZXNjcmlwdG9yc1thdHRhY2htZW50Q291bnRdLCBhdHRhY2htZW50U2l6ZXNbYXR0YWNo
bWVudENvdW50XSk7CisgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS5pc051bGwoKSkgeworICAg
ICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG9vbE1lc3Nh
Z2VCb2R5ID0gV2ViS2l0OjpTaGFyZWRNZW1vcnk6OmNyZWF0ZShoYW5kbGUsIFdlYktpdDo6U2hh
cmVkTWVtb3J5OjpSZWFkT25seSk7CisgICAgICAgICAgICAgICAgaWYgKCFvb2xNZXNzYWdlQm9k
eSkgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgY29udHJvbE1lc3NhZ2UgPSBDTVNHX05YVEhEUigmbWVzc2FnZSwgY29udHJv
bE1lc3NhZ2UpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBBU1NF
UlQoYXR0YWNobWVudHMuc2l6ZSgpID09IG1lc3NhZ2VJbmZvLmlzTWVzc2FnZUJvZHlPT0woKSA/
IG1lc3NhZ2VJbmZvLmF0dGFjaG1lbnRDb3VudCgpIC0gMSA6IG1lc3NhZ2VJbmZvLmF0dGFjaG1l
bnRDb3VudCgpKTsKKworICAgIHVuc2lnbmVkIGNoYXIqIG1lc3NhZ2VCb2R5ID0gbWVzc2FnZURh
dGE7CisKKyAgICBpZiAobWVzc2FnZUluZm8uaXNNZXNzYWdlQm9keU9PTCgpKQorICAgICAgICBt
ZXNzYWdlQm9keSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KG9vbE1lc3NhZ2VC
b2R5LT5kYXRhKCkpOworCisgICAgQXJndW1lbnREZWNvZGVyKiBhcmd1bWVudERlY29kZXI7Cisg
ICAgaWYgKGF0dGFjaG1lbnRzLmlzRW1wdHkoKSkKKyAgICAgICAgYXJndW1lbnREZWNvZGVyID0g
bmV3IEFyZ3VtZW50RGVjb2RlcihtZXNzYWdlQm9keSwgbWVzc2FnZUluZm8uYm9keVNpemUoKSk7
CisgICAgZWxzZQorICAgICAgICBhcmd1bWVudERlY29kZXIgPSBuZXcgQXJndW1lbnREZWNvZGVy
KG1lc3NhZ2VCb2R5LCBtZXNzYWdlSW5mby5ib2R5U2l6ZSgpLCBhdHRhY2htZW50cyk7CisKKyAg
ICBwcm9jZXNzSW5jb21pbmdNZXNzYWdlKG1lc3NhZ2VJbmZvLm1lc3NhZ2VJRCgpLCBhZG9wdFB0
cihhcmd1bWVudERlY29kZXIpKTsKKworICAgIEFTU0VSVCghY29udHJvbE1lc3NhZ2UpOworfQor
Citib29sIENvbm5lY3Rpb246Om9wZW4oKQoreworICAgIEFTU0VSVCghbV9zb2NrZXROb3RpZmll
cik7CisgICAgaW50IGZsYWdzID0gZmNudGwobV9zb2NrZXREZXNjcmlwdG9yLCBGX0dFVEZMLCAw
KTsKKyAgICB3aGlsZSAoZmNudGwobV9zb2NrZXREZXNjcmlwdG9yLCBGX1NFVEZMLCBmbGFncyB8
IE9fTk9OQkxPQ0spID09IC0xKSB7CisgICAgICAgIGlmIChlcnJubyAhPSBFSU5UUikgeworICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX2lzQ29ubmVjdGVkID0gdHJ1ZTsKKyAgICBtX3Nv
Y2tldE5vdGlmaWVyID0gbV9jb25uZWN0aW9uUXVldWUucmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRs
ZXIobV9zb2NrZXREZXNjcmlwdG9yLCBRU29ja2V0Tm90aWZpZXI6OlJlYWQsIFdvcmtJdGVtOjpj
cmVhdGUodGhpcywgJkNvbm5lY3Rpb246OnJlYWR5UmVhZEhhbmRsZXIpKTsKKworICAgIC8vIFNj
aGVkdWxlIGEgY2FsbCB0byByZWFkeVJlYWRIYW5kbGVyLiBEYXRhIG1heSBoYXZlIGFycml2ZWQg
YmVmb3JlIGluc3RhbGxhdGlvbiBvZiB0aGUgc2lnbmFsCisgICAgLy8gaGFuZGxlci4KKyAgICBt
X2Nvbm5lY3Rpb25RdWV1ZS5zY2hlZHVsZVdvcmsoV29ya0l0ZW06OmNyZWF0ZSh0aGlzLCAmQ29u
bmVjdGlvbjo6cmVhZHlSZWFkSGFuZGxlcikpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgQ29ubmVjdGlvbjo6cGxhdGZvcm1DYW5TZW5kT3V0Z29pbmdNZXNzYWdlcygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fc29ja2V0Tm90aWZpZXI7Cit9CisKK2Jvb2wgQ29ubmVjdGlvbjo6c2Vu
ZE91dGdvaW5nTWVzc2FnZShNZXNzYWdlSUQgbWVzc2FnZUlELCBQYXNzT3duUHRyPEFyZ3VtZW50
RW5jb2Rlcj4gYXJndW1lbnRzKQoreworICAgIEFTU0VSVChtX3NvY2tldE5vdGlmaWVyKTsKKyAg
ICBDT01QSUxFX0FTU0VSVChzaXplb2YoTWVzc2FnZUluZm8pICsgYXR0YWNobWVudE1heEFtb3Vu
dCAqIHNpemVvZihzaXplX3QpIDw9IG1lc3NhZ2VNYXhTaXplLCBBdHRhY2htZW50c0ZpdFRvTWVz
c2FnZUlubGluZSk7CisKKyAgICBWZWN0b3I8QXR0YWNobWVudD4gYXR0YWNobWVudHMgPSBhcmd1
bWVudHMtPnJlbGVhc2VBdHRhY2htZW50cygpOworICAgIEF0dGFjaG1lbnRSZXNvdXJjZUd1YXJk
PFZlY3RvcjxBdHRhY2htZW50PiwgVmVjdG9yPEF0dGFjaG1lbnQ+OjppdGVyYXRvcj4gYXR0YWNo
ZW1lbnREaXNwb3NlcihhdHRhY2htZW50cyk7CisKKyAgICBpZiAoYXR0YWNobWVudHMuc2l6ZSgp
ID4gKGF0dGFjaG1lbnRNYXhBbW91bnQgLSAxKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIE1lc3NhZ2VJbmZvIG1l
c3NhZ2VJbmZvKG1lc3NhZ2VJRCwgYXJndW1lbnRzLT5idWZmZXJTaXplKCksIGF0dGFjaG1lbnRz
LnNpemUoKSk7CisgICAgc2l6ZV90IG1lc3NhZ2VTaXplV2l0aEJvZHlJbmxpbmUgPSBzaXplb2Yo
bWVzc2FnZUluZm8pICsgKGF0dGFjaG1lbnRzLnNpemUoKSAqIHNpemVvZihzaXplX3QpKSArIGFy
Z3VtZW50cy0+YnVmZmVyU2l6ZSgpOworICAgIGlmIChtZXNzYWdlU2l6ZVdpdGhCb2R5SW5saW5l
ID4gbWVzc2FnZU1heFNpemUgJiYgYXJndW1lbnRzLT5idWZmZXJTaXplKCkpIHsKKyAgICAgICAg
UmVmUHRyPFdlYktpdDo6U2hhcmVkTWVtb3J5PiBvb2xNZXNzYWdlQm9keSA9IFdlYktpdDo6U2hh
cmVkTWVtb3J5OjpjcmVhdGUoYXJndW1lbnRzLT5idWZmZXJTaXplKCkpOworICAgICAgICBpZiAo
IW9vbE1lc3NhZ2VCb2R5KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFdl
YktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOworICAgICAgICBpZiAoIW9vbE1lc3Nh
Z2VCb2R5LT5jcmVhdGVIYW5kbGUoaGFuZGxlLCBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6UmVhZE9u
bHkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIG1lc3NhZ2VJbmZvLnNl
dE1lc3NhZ2VCb2R5T09MKCk7CisKKyAgICAgICAgbWVtY3B5KG9vbE1lc3NhZ2VCb2R5LT5kYXRh
KCksIGFyZ3VtZW50cy0+YnVmZmVyKCksIGFyZ3VtZW50cy0+YnVmZmVyU2l6ZSgpKTsKKworICAg
ICAgICBhdHRhY2htZW50cy5hcHBlbmQoaGFuZGxlLnJlbGVhc2VUb0F0dGFjaG1lbnQoKSk7Cisg
ICAgfQorCisgICAgc3RydWN0IG1zZ2hkciBtZXNzYWdlOworICAgIG1lbXNldCgmbWVzc2FnZSwg
MCwgc2l6ZW9mKG1lc3NhZ2UpKTsKKworICAgIHN0cnVjdCBpb3ZlYyBpb3ZbM107CisgICAgbWVt
c2V0KCZpb3YsIDAsIHNpemVvZihpb3YpKTsKKworICAgIG1lc3NhZ2UubXNnX2lvdiA9IGlvdjsK
KyAgICBpbnQgaW92TGVuZ3RoID0gMTsKKworICAgIGlvdlswXS5pb3ZfYmFzZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KCZtZXNzYWdlSW5mbyk7CisgICAgaW92WzBdLmlvdl9sZW4gPSBzaXpl
b2YobWVzc2FnZUluZm8pOworCisgICAgY2hhciBhdHRhY2htZW50RkRCdWZmZXJbQ01TR19TUEFD
RShzaXplb2YoaW50KSAqIChhdHRhY2htZW50cy5zaXplKCkpKV07CisgICAgc2l6ZV90IGF0dGFj
aG1lbnRTaXplc1thdHRhY2htZW50cy5zaXplKCldOworCisgICAgaWYgKCFhdHRhY2htZW50cy5p
c0VtcHR5KCkpIHsKKyAgICAgICAgbWVzc2FnZS5tc2dfY29udHJvbCA9IGF0dGFjaG1lbnRGREJ1
ZmZlcjsKKyAgICAgICAgbWVzc2FnZS5tc2dfY29udHJvbGxlbiA9IHNpemVvZihhdHRhY2htZW50
RkRCdWZmZXIpOworCisgICAgICAgIHN0cnVjdCBjbXNnaGRyKiBjbXNnID0gQ01TR19GSVJTVEhE
UigmbWVzc2FnZSk7CisgICAgICAgIGNtc2ctPmNtc2dfbGV2ZWwgPSBTT0xfU09DS0VUOworICAg
ICAgICBjbXNnLT5jbXNnX3R5cGUgPSBTQ01fUklHSFRTOworICAgICAgICBjbXNnLT5jbXNnX2xl
biA9IENNU0dfTEVOKHNpemVvZihpbnQpICogYXR0YWNobWVudHMuc2l6ZSgpKTsKKworICAgICAg
ICBpbnQqIGZkcHRyID0gcmVpbnRlcnByZXRfY2FzdDxpbnQqPihDTVNHX0RBVEEoY21zZykpOwor
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dGFjaG1lbnRzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgICAgICBhdHRhY2htZW50U2l6ZXNbaV0gPSBhdHRhY2htZW50c1tpXS5zaXplKCk7Cisg
ICAgICAgICAgICBmZHB0cltpXSA9IGF0dGFjaG1lbnRzW2ldLmZpbGVEZXNjcmlwdG9yKCk7Cisg
ICAgICAgIH0KKworICAgICAgICBtZXNzYWdlLm1zZ19jb250cm9sbGVuID0gY21zZy0+Y21zZ19s
ZW47CisKKyAgICAgICAgaW92W2lvdkxlbmd0aF0uaW92X2Jhc2UgPSBhdHRhY2htZW50U2l6ZXM7
CisgICAgICAgIGlvdltpb3ZMZW5ndGhdLmlvdl9sZW4gPSBzaXplb2YoYXR0YWNobWVudFNpemVz
KTsKKyAgICAgICAgKytpb3ZMZW5ndGg7CisgICAgfQorCisgICAgaWYgKCFtZXNzYWdlSW5mby5p
c01lc3NhZ2VCb2R5T09MKCkgJiYgYXJndW1lbnRzLT5idWZmZXJTaXplKCkpIHsKKyAgICAgICAg
aW92W2lvdkxlbmd0aF0uaW92X2Jhc2UgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihhcmd1bWVu
dHMtPmJ1ZmZlcigpKTsKKyAgICAgICAgaW92W2lvdkxlbmd0aF0uaW92X2xlbiA9IGFyZ3VtZW50
cy0+YnVmZmVyU2l6ZSgpOworICAgICAgICArK2lvdkxlbmd0aDsKKyAgICB9CisKKyAgICBtZXNz
YWdlLm1zZ19pb3ZsZW4gPSBpb3ZMZW5ndGg7CisKKyAgICBpbnQgYnl0ZXNTZW50ID0gMDsKKyAg
ICB3aGlsZSAoKGJ5dGVzU2VudCA9IHNlbmRtc2cobV9zb2NrZXREZXNjcmlwdG9yLCAmbWVzc2Fn
ZSwgMCkpID09IC0xKSB7CisgICAgICAgIGlmIChlcnJubyAhPSBFSU5UUikKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ29ubmVj
dGlvbjo6c2V0U2hvdWxkQ2xvc2VDb25uZWN0aW9uT25Qcm9jZXNzVGVybWluYXRpb24oV2ViS2l0
OjpQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyIHByb2Nlc3MpCit7CisgICAgbV9jb25uZWN0aW9u
UXVldWUuc2NoZWR1bGVXb3JrT25UZXJtaW5hdGlvbihwcm9jZXNzLCBXb3JrSXRlbTo6Y3JlYXRl
KHRoaXMsICZDb25uZWN0aW9uOjpjb25uZWN0aW9uRGlkQ2xvc2UpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgQ29yZUlQQwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQ
Qy9xdC9Db25uZWN0aW9uUXQuY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9x
dC9Db25uZWN0aW9uUXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjVkN2Rj
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvQ29ubmVj
dGlvblF0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM2OSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIK
LQotI2luY2x1ZGUgIkFyZ3VtZW50RW5jb2Rlci5oIgotI2luY2x1ZGUgIlByb2Nlc3NMYXVuY2hl
ci5oIgotI2luY2x1ZGUgIldvcmtJdGVtLmgiCi0jaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCi0j
aW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCi0jaW5jbHVkZSA8UUFwcGxpY2F0aW9uPgotI2lu
Y2x1ZGUgPFFTb2NrZXROb3RpZmllcj4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaW5jbHVk
ZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVz
cGFjZSBDb3JlSVBDIHsKLQotc3RhdGljIGNvbnN0IHNpemVfdCBtZXNzYWdlTWF4U2l6ZSA9IDQw
OTY7Ci1zdGF0aWMgY29uc3Qgc2l6ZV90IGF0dGFjaG1lbnRNYXhBbW91bnQgPSAyNTU7Ci0KLWVu
dW0gewotICAgIE1lc3NhZ2VCb2R5SXNPT0wgPSAxIDw8IDMxCi19OwotCi1jbGFzcyBNZXNzYWdl
SW5mbyB7Ci1wdWJsaWM6Ci0gICAgTWVzc2FnZUluZm8oKSB7IH0KLQotICAgIE1lc3NhZ2VJbmZv
KE1lc3NhZ2VJRCBtZXNzYWdlSUQsIHNpemVfdCBib2R5U2l6ZSwgc2l6ZV90IGluaXRpYWxBdHRh
Y2htZW50Q291bnQpCi0gICAgICAgIDogbV9tZXNzYWdlSUQobWVzc2FnZUlELnRvSW50KCkpCi0g
ICAgICAgICwgbV9ib2R5U2l6ZShib2R5U2l6ZSkKLSAgICAgICAgLCBtX2F0dGFjaG1lbnRDb3Vu
dChpbml0aWFsQXR0YWNobWVudENvdW50KQotICAgIHsKLSAgICAgICAgQVNTRVJUKCEobV9tZXNz
YWdlSUQgJiBNZXNzYWdlQm9keUlzT09MKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRNZXNzYWdl
Qm9keU9PTCgpCi0gICAgewotICAgICAgICBBU1NFUlQoIWlzTWVzc2FnZUJvZHlPT0woKSk7Ci0K
LSAgICAgICAgbV9tZXNzYWdlSUQgfD0gTWVzc2FnZUJvZHlJc09PTDsKLSAgICAgICAgbV9hdHRh
Y2htZW50Q291bnQrKzsKLSAgICB9Ci0KLSAgICBib29sIGlzTWVzc2FnZUJvZHlPT0woKSBjb25z
dCB7IHJldHVybiBtX21lc3NhZ2VJRCAmIE1lc3NhZ2VCb2R5SXNPT0w7IH0KLQotICAgIHNpemVf
dCBib2R5U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm9keVNpemU7IH0KLQotICAgIE1lc3NhZ2VJ
RCBtZXNzYWdlSUQoKSBjb25zdCB7IHJldHVybiBNZXNzYWdlSUQ6OmZyb21JbnQobV9tZXNzYWdl
SUQgJiB+TWVzc2FnZUJvZHlJc09PTCk7IH0KLQotICAgIHNpemVfdCBhdHRhY2htZW50Q291bnQo
KSBjb25zdCB7IHJldHVybiBtX2F0dGFjaG1lbnRDb3VudDsgfQotCi1wcml2YXRlOgotICAgIHVp
bnQzMl90IG1fbWVzc2FnZUlEOwotICAgIHNpemVfdCBtX2JvZHlTaXplOwotICAgIHNpemVfdCBt
X2F0dGFjaG1lbnRDb3VudDsKLX07Ci0KLXZvaWQgQ29ubmVjdGlvbjo6cGxhdGZvcm1Jbml0aWFs
aXplKElkZW50aWZpZXIgaWRlbnRpZmllcikKLXsKLSAgICBtX3NvY2tldERlc2NyaXB0b3IgPSBp
ZGVudGlmaWVyOwotICAgIG1fc29ja2V0Tm90aWZpZXIgPSAwOwotICAgIG1fcmVhZEJ1ZmZlci5y
ZXNpemUobWVzc2FnZU1heFNpemUpOwotICAgIG1fY3VycmVudE1lc3NhZ2VTaXplID0gMDsKLX0K
LQotdm9pZCBDb25uZWN0aW9uOjpwbGF0Zm9ybUludmFsaWRhdGUoKQotewotICAgIGlmIChtX3Nv
Y2tldERlc2NyaXB0b3IgIT0gLTEpCi0gICAgICAgIHdoaWxlIChjbG9zZShtX3NvY2tldERlc2Ny
aXB0b3IpID09IC0xICYmIGVycm5vID09IEVJTlRSKSB7IH0KLQotICAgIGlmICghbV9pc0Nvbm5l
Y3RlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZGVsZXRlIG1fc29ja2V0Tm90aWZpZXI7Ci0g
ICAgbV9zb2NrZXROb3RpZmllciA9IDA7Ci0gICAgbV9zb2NrZXREZXNjcmlwdG9yID0gLTE7Ci0g
ICAgbV9pc0Nvbm5lY3RlZCA9IGZhbHNlOwotfQotCi1jbGFzcyBTb2NrZXROb3RpZmllclJlc291
cmNlR3VhcmQgewotcHVibGljOgotICAgIFNvY2tldE5vdGlmaWVyUmVzb3VyY2VHdWFyZChRU29j
a2V0Tm90aWZpZXIqIHNvY2tldE5vdGlmaWVyKQotICAgICAgICA6IG1fc29ja2V0Tm90aWZpZXIo
c29ja2V0Tm90aWZpZXIpCi0gICAgewotICAgICAgICBtX3NvY2tldE5vdGlmaWVyLT5zZXRFbmFi
bGVkKGZhbHNlKTsKLSAgICB9Ci0KLSAgICB+U29ja2V0Tm90aWZpZXJSZXNvdXJjZUd1YXJkKCkK
LSAgICB7Ci0gICAgICAgIG1fc29ja2V0Tm90aWZpZXItPnNldEVuYWJsZWQodHJ1ZSk7Ci0gICAg
fQotCi1wcml2YXRlOgotICAgIFFTb2NrZXROb3RpZmllciogY29uc3QgbV9zb2NrZXROb3RpZmll
cjsKLX07Ci0KLXRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIGl0ZXJhdG9yPgotY2xhc3MgQXR0YWNo
bWVudFJlc291cmNlR3VhcmQgewotcHVibGljOgotICAgIEF0dGFjaG1lbnRSZXNvdXJjZUd1YXJk
KFQmIGF0dGFjaG1lbnRzKQotICAgICAgICA6IG1fYXR0YWNobWVudHMoYXR0YWNobWVudHMpCi0g
ICAgewotICAgIH0KLSAgICB+QXR0YWNobWVudFJlc291cmNlR3VhcmQoKQotICAgIHsKLSAgICAg
ICAgaXRlcmF0b3IgZW5kID0gbV9hdHRhY2htZW50cy5lbmQoKTsKLSAgICAgICAgZm9yIChpdGVy
YXRvciBpID0gbV9hdHRhY2htZW50cy5iZWdpbigpOyBpICE9IGVuZDsgKytpKQotICAgICAgICAg
ICAgaS0+ZGlzcG9zZSgpOwotICAgIH0KLXByaXZhdGU6Ci0gICAgVCYgbV9hdHRhY2htZW50czsK
LX07Ci0KLXZvaWQgQ29ubmVjdGlvbjo6cmVhZHlSZWFkSGFuZGxlcigpCi17Ci0gICAgRGVxdWU8
QXR0YWNobWVudD4gYXR0YWNobWVudHM7Ci0gICAgU29ja2V0Tm90aWZpZXJSZXNvdXJjZUd1YXJk
IHNvY2tldE5vdGlmaWVyRW5hYmxlcihtX3NvY2tldE5vdGlmaWVyKTsKLSAgICBBdHRhY2htZW50
UmVzb3VyY2VHdWFyZDxEZXF1ZTxBdHRhY2htZW50PiwgRGVxdWU8QXR0YWNobWVudD46Oml0ZXJh
dG9yPiBhdHRhY2hlbWVudERpc3Bvc2VyKGF0dGFjaG1lbnRzKTsKLQotICAgIGNoYXIgYXR0YWNo
bWVudERlc2NyaXB0b3JCdWZmZXJbQ01TR19TUEFDRShzaXplb2YoaW50KSAqIChhdHRhY2htZW50
TWF4QW1vdW50KSldOwotICAgIHN0cnVjdCBtc2doZHIgbWVzc2FnZTsKLSAgICBtZW1zZXQoJm1l
c3NhZ2UsIDAsIHNpemVvZihtZXNzYWdlKSk7Ci0KLSAgICBzdHJ1Y3QgaW92ZWMgaW92WzFdOwot
ICAgIG1lbXNldCgmaW92LCAwLCBzaXplb2YoaW92KSk7Ci0KLSAgICBtZXNzYWdlLm1zZ19jb250
cm9sID0gYXR0YWNobWVudERlc2NyaXB0b3JCdWZmZXI7Ci0gICAgbWVzc2FnZS5tc2dfY29udHJv
bGxlbiA9IENNU0dfU1BBQ0Uoc2l6ZW9mKGludCkgKiAoYXR0YWNobWVudE1heEFtb3VudCkpOwot
Ci0gICAgaW92WzBdLmlvdl9iYXNlID0gbV9yZWFkQnVmZmVyLmRhdGEoKTsKLSAgICBpb3ZbMF0u
aW92X2xlbiA9IG1fcmVhZEJ1ZmZlci5zaXplKCk7Ci0KLSAgICBtZXNzYWdlLm1zZ19pb3YgPSBp
b3Y7Ci0gICAgbWVzc2FnZS5tc2dfaW92bGVuID0gMTsKLQotCi0gICAgaW50IG1lc3NhZ2VMZW5n
dGggPSAwOwotICAgIHdoaWxlICgobWVzc2FnZUxlbmd0aCA9IHJlY3Ztc2cobV9zb2NrZXREZXNj
cmlwdG9yLCAmbWVzc2FnZSwgMCkpID09IC0xKSB7Ci0gICAgICAgIGlmIChlcnJubyAhPSBFSU5U
UikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzdHJ1Y3QgY21zZ2hkciogY29u
dHJvbE1lc3NhZ2UgPSBDTVNHX0ZJUlNUSERSKCZtZXNzYWdlKTsKLQotICAgIE1lc3NhZ2VJbmZv
IG1lc3NhZ2VJbmZvOwotICAgIHVuc2lnbmVkIGNoYXIqIG1lc3NhZ2VEYXRhID0gbV9yZWFkQnVm
ZmVyLmRhdGEoKTsKLQotICAgIG1lbWNweSgmbWVzc2FnZUluZm8sIG1lc3NhZ2VEYXRhLCBzaXpl
b2YobWVzc2FnZUluZm8pKTsKLSAgICBBU1NFUlQobWVzc2FnZUxlbmd0aCA9PSBzaXplb2YobWVz
c2FnZUluZm8pICsgbWVzc2FnZUluZm8uYXR0YWNobWVudENvdW50KCkgKiBzaXplb2Yoc2l6ZV90
KSArIChtZXNzYWdlSW5mby5pc01lc3NhZ2VCb2R5T09MKCkgPyAwIDogbWVzc2FnZUluZm8uYm9k
eVNpemUoKSkpOwotCi0gICAgbWVzc2FnZURhdGEgKz0gc2l6ZW9mKG1lc3NhZ2VJbmZvKTsKLQot
ICAgIFJlZlB0cjxXZWJLaXQ6OlNoYXJlZE1lbW9yeT4gb29sTWVzc2FnZUJvZHk7Ci0KLSAgICBp
ZiAobWVzc2FnZUluZm8uYXR0YWNobWVudENvdW50KCkpIHsKLSAgICAgICAgaWYgKGNvbnRyb2xN
ZXNzYWdlICYmIGNvbnRyb2xNZXNzYWdlLT5jbXNnX2xldmVsID09IFNPTF9TT0NLRVQgJiYgY29u
dHJvbE1lc3NhZ2UtPmNtc2dfdHlwZSA9PSBTQ01fUklHSFRTKSB7Ci0gICAgICAgICAgICBzaXpl
X3QgYXR0YWNobWVudFNpemVzW21lc3NhZ2VJbmZvLmF0dGFjaG1lbnRDb3VudCgpXTsKLSAgICAg
ICAgICAgIG1lbWNweShhdHRhY2htZW50U2l6ZXMsIG1lc3NhZ2VEYXRhLCBzaXplb2YoYXR0YWNo
bWVudFNpemVzKSk7Ci0KLSAgICAgICAgICAgIG1lc3NhZ2VEYXRhICs9IHNpemVvZihhdHRhY2ht
ZW50U2l6ZXMpOwotCi0gICAgICAgICAgICBpbnQgZmlsZURlc2NyaXB0b3JzW21lc3NhZ2VJbmZv
LmF0dGFjaG1lbnRDb3VudCgpXTsKLSAgICAgICAgICAgIG1lbWNweShmaWxlRGVzY3JpcHRvcnMs
IENNU0dfREFUQShjb250cm9sTWVzc2FnZSksIHNpemVvZihmaWxlRGVzY3JpcHRvcnMpKTsKLQot
ICAgICAgICAgICAgaW50IGF0dGFjaG1lbnRDb3VudCA9IG1lc3NhZ2VJbmZvLmF0dGFjaG1lbnRD
b3VudCgpOwotCi0gICAgICAgICAgICBpZiAobWVzc2FnZUluZm8uaXNNZXNzYWdlQm9keU9PTCgp
KQotICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRDb3VudC0tOwotCi0gICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGF0dGFjaG1lbnRDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICAgICAg
d2hpbGUgKGZjbnRsKGZpbGVEZXNjcmlwdG9yc1tpXSwgRl9TRVRGTCwgRkRfQ0xPRVhFQykgPT0g
LTEpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGVycm5vICE9IEVJTlRSKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRhY2ht
ZW50Q291bnQ7ICsraSkKLSAgICAgICAgICAgICAgICBhdHRhY2htZW50cy5hcHBlbmQoQXR0YWNo
bWVudChmaWxlRGVzY3JpcHRvcnNbaV0sIGF0dGFjaG1lbnRTaXplc1tpXSkpOwotCi0gICAgICAg
ICAgICBpZiAobWVzc2FnZUluZm8uaXNNZXNzYWdlQm9keU9PTCgpKSB7Ci0gICAgICAgICAgICAg
ICAgQVNTRVJUKG1lc3NhZ2VJbmZvLmJvZHlTaXplKCkpOwotCi0gICAgICAgICAgICAgICAgV2Vi
S2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7Ci0gICAgICAgICAgICAgICAgaGFuZGxl
LmFkb3B0RnJvbUF0dGFjaG1lbnQoZmlsZURlc2NyaXB0b3JzW2F0dGFjaG1lbnRDb3VudF0sIGF0
dGFjaG1lbnRTaXplc1thdHRhY2htZW50Q291bnRdKTsKLSAgICAgICAgICAgICAgICBpZiAoaGFu
ZGxlLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgb29sTWVzc2FnZUJvZHkgPSBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6Y3JlYXRl
KGhhbmRsZSwgV2ViS2l0OjpTaGFyZWRNZW1vcnk6OlJlYWRPbmx5KTsKLSAgICAgICAgICAgICAg
ICBpZiAoIW9vbE1lc3NhZ2VCb2R5KSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjb250cm9sTWVzc2FnZSA9IENNU0dfTlhU
SERSKCZtZXNzYWdlLCBjb250cm9sTWVzc2FnZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIEFTU0VSVChhdHRhY2htZW50cy5zaXplKCkgPT0gbWVzc2FnZUluZm8u
aXNNZXNzYWdlQm9keU9PTCgpID8gbWVzc2FnZUluZm8uYXR0YWNobWVudENvdW50KCkgLSAxIDog
bWVzc2FnZUluZm8uYXR0YWNobWVudENvdW50KCkpOwotCi0gICAgdW5zaWduZWQgY2hhciogbWVz
c2FnZUJvZHkgPSBtZXNzYWdlRGF0YTsKLQotICAgIGlmIChtZXNzYWdlSW5mby5pc01lc3NhZ2VC
b2R5T09MKCkpCi0gICAgICAgIG1lc3NhZ2VCb2R5ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZCBjaGFyKj4ob29sTWVzc2FnZUJvZHktPmRhdGEoKSk7Ci0KLSAgICBBcmd1bWVudERlY29kZXIq
IGFyZ3VtZW50RGVjb2RlcjsKLSAgICBpZiAoYXR0YWNobWVudHMuaXNFbXB0eSgpKQotICAgICAg
ICBhcmd1bWVudERlY29kZXIgPSBuZXcgQXJndW1lbnREZWNvZGVyKG1lc3NhZ2VCb2R5LCBtZXNz
YWdlSW5mby5ib2R5U2l6ZSgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFyZ3VtZW50RGVjb2RlciA9
IG5ldyBBcmd1bWVudERlY29kZXIobWVzc2FnZUJvZHksIG1lc3NhZ2VJbmZvLmJvZHlTaXplKCks
IGF0dGFjaG1lbnRzKTsKLQotICAgIHByb2Nlc3NJbmNvbWluZ01lc3NhZ2UobWVzc2FnZUluZm8u
bWVzc2FnZUlEKCksIGFkb3B0UHRyKGFyZ3VtZW50RGVjb2RlcikpOwotCi0gICAgQVNTRVJUKCFj
b250cm9sTWVzc2FnZSk7Ci19Ci0KLWJvb2wgQ29ubmVjdGlvbjo6b3BlbigpCi17Ci0gICAgQVNT
RVJUKCFtX3NvY2tldE5vdGlmaWVyKTsKLSAgICBpbnQgZmxhZ3MgPSBmY250bChtX3NvY2tldERl
c2NyaXB0b3IsIEZfR0VURkwsIDApOwotICAgIHdoaWxlIChmY250bChtX3NvY2tldERlc2NyaXB0
b3IsIEZfU0VURkwsIGZsYWdzIHwgT19OT05CTE9DSykgPT0gLTEpIHsKLSAgICAgICAgaWYgKGVy
cm5vICE9IEVJTlRSKSB7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1faXNDb25uZWN0
ZWQgPSB0cnVlOwotICAgIG1fc29ja2V0Tm90aWZpZXIgPSBtX2Nvbm5lY3Rpb25RdWV1ZS5yZWdp
c3RlclNvY2tldEV2ZW50SGFuZGxlcihtX3NvY2tldERlc2NyaXB0b3IsIFFTb2NrZXROb3RpZmll
cjo6UmVhZCwgV29ya0l0ZW06OmNyZWF0ZSh0aGlzLCAmQ29ubmVjdGlvbjo6cmVhZHlSZWFkSGFu
ZGxlcikpOwotCi0gICAgLy8gU2NoZWR1bGUgYSBjYWxsIHRvIHJlYWR5UmVhZEhhbmRsZXIuIERh
dGEgbWF5IGhhdmUgYXJyaXZlZCBiZWZvcmUgaW5zdGFsbGF0aW9uIG9mIHRoZSBzaWduYWwKLSAg
ICAvLyBoYW5kbGVyLgotICAgIG1fY29ubmVjdGlvblF1ZXVlLnNjaGVkdWxlV29yayhXb3JrSXRl
bTo6Y3JlYXRlKHRoaXMsICZDb25uZWN0aW9uOjpyZWFkeVJlYWRIYW5kbGVyKSk7Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDb25uZWN0aW9uOjpwbGF0Zm9ybUNhblNlbmRPdXRnb2lu
Z01lc3NhZ2VzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zb2NrZXROb3RpZmllcjsKLX0KLQot
Ym9vbCBDb25uZWN0aW9uOjpzZW5kT3V0Z29pbmdNZXNzYWdlKE1lc3NhZ2VJRCBtZXNzYWdlSUQs
IFBhc3NPd25QdHI8QXJndW1lbnRFbmNvZGVyPiBhcmd1bWVudHMpCi17Ci0gICAgQVNTRVJUKG1f
c29ja2V0Tm90aWZpZXIpOwotICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihNZXNzYWdlSW5mbykg
KyBhdHRhY2htZW50TWF4QW1vdW50ICogc2l6ZW9mKHNpemVfdCkgPD0gbWVzc2FnZU1heFNpemUs
IEF0dGFjaG1lbnRzRml0VG9NZXNzYWdlSW5saW5lKTsKLQotICAgIFZlY3RvcjxBdHRhY2htZW50
PiBhdHRhY2htZW50cyA9IGFyZ3VtZW50cy0+cmVsZWFzZUF0dGFjaG1lbnRzKCk7Ci0gICAgQXR0
YWNobWVudFJlc291cmNlR3VhcmQ8VmVjdG9yPEF0dGFjaG1lbnQ+LCBWZWN0b3I8QXR0YWNobWVu
dD46Oml0ZXJhdG9yPiBhdHRhY2hlbWVudERpc3Bvc2VyKGF0dGFjaG1lbnRzKTsKLQotICAgIGlm
IChhdHRhY2htZW50cy5zaXplKCkgPiAoYXR0YWNobWVudE1heEFtb3VudCAtIDEpKSB7Ci0gICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgTWVzc2FnZUluZm8gbWVzc2FnZUluZm8obWVzc2FnZUlELCBhcmd1bWVudHMtPmJ1ZmZl
clNpemUoKSwgYXR0YWNobWVudHMuc2l6ZSgpKTsKLSAgICBzaXplX3QgbWVzc2FnZVNpemVXaXRo
Qm9keUlubGluZSA9IHNpemVvZihtZXNzYWdlSW5mbykgKyAoYXR0YWNobWVudHMuc2l6ZSgpICog
c2l6ZW9mKHNpemVfdCkpICsgYXJndW1lbnRzLT5idWZmZXJTaXplKCk7Ci0gICAgaWYgKG1lc3Nh
Z2VTaXplV2l0aEJvZHlJbmxpbmUgPiBtZXNzYWdlTWF4U2l6ZSAmJiBhcmd1bWVudHMtPmJ1ZmZl
clNpemUoKSkgewotICAgICAgICBSZWZQdHI8V2ViS2l0OjpTaGFyZWRNZW1vcnk+IG9vbE1lc3Nh
Z2VCb2R5ID0gV2ViS2l0OjpTaGFyZWRNZW1vcnk6OmNyZWF0ZShhcmd1bWVudHMtPmJ1ZmZlclNp
emUoKSk7Ci0gICAgICAgIGlmICghb29sTWVzc2FnZUJvZHkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAgICAgV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7Ci0g
ICAgICAgIGlmICghb29sTWVzc2FnZUJvZHktPmNyZWF0ZUhhbmRsZShoYW5kbGUsIFdlYktpdDo6
U2hhcmVkTWVtb3J5OjpSZWFkT25seSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgbWVzc2FnZUluZm8uc2V0TWVzc2FnZUJvZHlPT0woKTsKLQotICAgICAgICBtZW1jcHko
b29sTWVzc2FnZUJvZHktPmRhdGEoKSwgYXJndW1lbnRzLT5idWZmZXIoKSwgYXJndW1lbnRzLT5i
dWZmZXJTaXplKCkpOwotCi0gICAgICAgIGF0dGFjaG1lbnRzLmFwcGVuZChoYW5kbGUucmVsZWFz
ZVRvQXR0YWNobWVudCgpKTsKLSAgICB9Ci0KLSAgICBzdHJ1Y3QgbXNnaGRyIG1lc3NhZ2U7Ci0g
ICAgbWVtc2V0KCZtZXNzYWdlLCAwLCBzaXplb2YobWVzc2FnZSkpOwotCi0gICAgc3RydWN0IGlv
dmVjIGlvdlszXTsKLSAgICBtZW1zZXQoJmlvdiwgMCwgc2l6ZW9mKGlvdikpOwotCi0gICAgbWVz
c2FnZS5tc2dfaW92ID0gaW92OwotICAgIGludCBpb3ZMZW5ndGggPSAxOwotCi0gICAgaW92WzBd
Lmlvdl9iYXNlID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oJm1lc3NhZ2VJbmZvKTsKLSAgICBp
b3ZbMF0uaW92X2xlbiA9IHNpemVvZihtZXNzYWdlSW5mbyk7Ci0KLSAgICBjaGFyIGF0dGFjaG1l
bnRGREJ1ZmZlcltDTVNHX1NQQUNFKHNpemVvZihpbnQpICogKGF0dGFjaG1lbnRzLnNpemUoKSkp
XTsKLSAgICBzaXplX3QgYXR0YWNobWVudFNpemVzW2F0dGFjaG1lbnRzLnNpemUoKV07Ci0KLSAg
ICBpZiAoIWF0dGFjaG1lbnRzLmlzRW1wdHkoKSkgewotICAgICAgICBtZXNzYWdlLm1zZ19jb250
cm9sID0gYXR0YWNobWVudEZEQnVmZmVyOwotICAgICAgICBtZXNzYWdlLm1zZ19jb250cm9sbGVu
ID0gc2l6ZW9mKGF0dGFjaG1lbnRGREJ1ZmZlcik7Ci0KLSAgICAgICAgc3RydWN0IGNtc2doZHIq
IGNtc2cgPSBDTVNHX0ZJUlNUSERSKCZtZXNzYWdlKTsKLSAgICAgICAgY21zZy0+Y21zZ19sZXZl
bCA9IFNPTF9TT0NLRVQ7Ci0gICAgICAgIGNtc2ctPmNtc2dfdHlwZSA9IFNDTV9SSUdIVFM7Ci0g
ICAgICAgIGNtc2ctPmNtc2dfbGVuID0gQ01TR19MRU4oc2l6ZW9mKGludCkgKiBhdHRhY2htZW50
cy5zaXplKCkpOwotCi0gICAgICAgIGludCogZmRwdHIgPSByZWludGVycHJldF9jYXN0PGludCo+
KENNU0dfREFUQShjbXNnKSk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0YWNobWVu
dHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGF0dGFjaG1lbnRTaXplc1tpXSA9IGF0dGFj
aG1lbnRzW2ldLnNpemUoKTsKLSAgICAgICAgICAgIGZkcHRyW2ldID0gYXR0YWNobWVudHNbaV0u
ZmlsZURlc2NyaXB0b3IoKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1lc3NhZ2UubXNnX2NvbnRy
b2xsZW4gPSBjbXNnLT5jbXNnX2xlbjsKLQotICAgICAgICBpb3ZbaW92TGVuZ3RoXS5pb3ZfYmFz
ZSA9IGF0dGFjaG1lbnRTaXplczsKLSAgICAgICAgaW92W2lvdkxlbmd0aF0uaW92X2xlbiA9IHNp
emVvZihhdHRhY2htZW50U2l6ZXMpOwotICAgICAgICArK2lvdkxlbmd0aDsKLSAgICB9Ci0KLSAg
ICBpZiAoIW1lc3NhZ2VJbmZvLmlzTWVzc2FnZUJvZHlPT0woKSAmJiBhcmd1bWVudHMtPmJ1ZmZl
clNpemUoKSkgewotICAgICAgICBpb3ZbaW92TGVuZ3RoXS5pb3ZfYmFzZSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KGFyZ3VtZW50cy0+YnVmZmVyKCkpOwotICAgICAgICBpb3ZbaW92TGVuZ3Ro
XS5pb3ZfbGVuID0gYXJndW1lbnRzLT5idWZmZXJTaXplKCk7Ci0gICAgICAgICsraW92TGVuZ3Ro
OwotICAgIH0KLQotICAgIG1lc3NhZ2UubXNnX2lvdmxlbiA9IGlvdkxlbmd0aDsKLQotICAgIGlu
dCBieXRlc1NlbnQgPSAwOwotICAgIHdoaWxlICgoYnl0ZXNTZW50ID0gc2VuZG1zZyhtX3NvY2tl
dERlc2NyaXB0b3IsICZtZXNzYWdlLCAwKSkgPT0gLTEpIHsKLSAgICAgICAgaWYgKGVycm5vICE9
IEVJTlRSKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdm9pZCBDb25uZWN0aW9uOjpzZXRTaG91bGRDbG9zZUNvbm5lY3Rpb25PblByb2Nl
c3NUZXJtaW5hdGlvbihXZWJLaXQ6OlBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIgcHJvY2VzcykK
LXsKLSAgICBtX2Nvbm5lY3Rpb25RdWV1ZS5zY2hlZHVsZVdvcmtPblRlcm1pbmF0aW9uKHByb2Nl
c3MsIFdvcmtJdGVtOjpjcmVhdGUodGhpcywgJkNvbm5lY3Rpb246OmNvbm5lY3Rpb25EaWRDbG9z
ZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBDb3JlSVBDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlQb3NpeC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlQb3NpeC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uOGQ1ZDcwZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtL3F0L1NoYXJlZE1lbW9yeVBvc2l4LmNwcApAQCAtMCwwICsxLDIyOCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKGMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgorCisj
aW5jbHVkZSAiQXJndW1lbnREZWNvZGVyLmgiCisjaW5jbHVkZSAiQXJndW1lbnRFbmNvZGVyLmgi
CisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSA8UURpcj4KKyNp
bmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+
CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUg
PHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitTaGFyZWRNZW1vcnk6OkhhbmRsZTo6SGFuZGxlKCkKKyAgICA6IG1fZmlsZURlc2NyaXB0
b3IoLTEpCisgICAgLCBtX3NpemUoMCkKK3sKK30KKworU2hhcmVkTWVtb3J5OjpIYW5kbGU6On5I
YW5kbGUoKQoreworICAgIGlmICghaXNOdWxsKCkpCisgICAgICAgIHdoaWxlIChjbG9zZShtX2Zp
bGVEZXNjcmlwdG9yKSA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUikgeyB9Cit9CisKK2Jvb2wgU2hh
cmVkTWVtb3J5OjpIYW5kbGU6OmlzTnVsbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZmlsZURl
c2NyaXB0b3IgPT0gLTE7Cit9CisKK3ZvaWQgU2hhcmVkTWVtb3J5OjpIYW5kbGU6OmVuY29kZShD
b3JlSVBDOjpBcmd1bWVudEVuY29kZXIqIGVuY29kZXIpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFp
c051bGwoKSk7CisKKyAgICBlbmNvZGVyLT5lbmNvZGUocmVsZWFzZVRvQXR0YWNobWVudCgpKTsK
K30KKworYm9vbCBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50
RGVjb2RlciogZGVjb2RlciwgSGFuZGxlJiBoYW5kbGUpCit7CisgICAgQVNTRVJUX0FSRyhoYW5k
bGUsICFoYW5kbGUubV9zaXplKTsKKyAgICBBU1NFUlRfQVJHKGhhbmRsZSwgaGFuZGxlLmlzTnVs
bCgpKTsKKworICAgIENvcmVJUEM6OkF0dGFjaG1lbnQgYXR0YWNobWVudDsKKyAgICBpZiAoIWRl
Y29kZXItPmRlY29kZShhdHRhY2htZW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aGFuZGxlLmFkb3B0RnJvbUF0dGFjaG1lbnQoYXR0YWNobWVudC5yZWxlYXNlRmlsZURlc2NyaXB0
b3IoKSwgYXR0YWNobWVudC5zaXplKCkpOworICAgIHJldHVybiB0cnVlOworfQorCitDb3JlSVBD
OjpBdHRhY2htZW50IFNoYXJlZE1lbW9yeTo6SGFuZGxlOjpyZWxlYXNlVG9BdHRhY2htZW50KCkg
Y29uc3QKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKKworICAgIGludCB0ZW1wID0gbV9maWxl
RGVzY3JpcHRvcjsKKyAgICBtX2ZpbGVEZXNjcmlwdG9yID0gLTE7CisgICAgcmV0dXJuIENvcmVJ
UEM6OkF0dGFjaG1lbnQodGVtcCwgbV9zaXplKTsKK30KKwordm9pZCBTaGFyZWRNZW1vcnk6Okhh
bmRsZTo6YWRvcHRGcm9tQXR0YWNobWVudChpbnQgZmlsZURlc2NyaXB0b3IsIHNpemVfdCBzaXpl
KQoreworICAgIEFTU0VSVCghbV9zaXplKTsKKyAgICBBU1NFUlQoaXNOdWxsKCkpOworCisgICAg
bV9maWxlRGVzY3JpcHRvciA9IGZpbGVEZXNjcmlwdG9yOworICAgIG1fc2l6ZSA9IHNpemU7Cit9
CisKK1Bhc3NSZWZQdHI8U2hhcmVkTWVtb3J5PiBTaGFyZWRNZW1vcnk6OmNyZWF0ZShzaXplX3Qg
c2l6ZSkKK3sKKyAgICBRU3RyaW5nIHRlbXBOYW1lID0gUURpcjo6dGVtcCgpLmZpbGVQYXRoKFFM
YXRpbjFTdHJpbmcoInF3a3NobS5YWFhYWFgiKSk7CisgICAgUUJ5dGVBcnJheSB0ZW1wTmFtZUNT
VFIgPSB0ZW1wTmFtZS50b0xvY2FsOEJpdCgpOworICAgIGNoYXIqIHRlbXBOYW1lQyA9IHRlbXBO
YW1lQ1NUUi5kYXRhKCk7CisKKyAgICBpbnQgZmlsZURlc2NyaXB0b3I7CisgICAgd2hpbGUgKChm
aWxlRGVzY3JpcHRvciA9IG1rc3RlbXAodGVtcE5hbWVDKSkgPT0gLTEpIHsKKyAgICAgICAgaWYg
KGVycm5vICE9IEVJTlRSKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHdoaWxl
IChmY250bChmaWxlRGVzY3JpcHRvciwgRl9TRVRGRCwgRkRfQ0xPRVhFQykgPT0gLTEpIHsKKyAg
ICAgICAgaWYgKGVycm5vICE9IEVJTlRSKSB7CisgICAgICAgICAgICB3aGlsZSAoY2xvc2UoZmls
ZURlc2NyaXB0b3IpID09IC0xICYmIGVycm5vID09IEVJTlRSKSB7IH0KKyAgICAgICAgICAgIHVu
bGluayh0ZW1wTmFtZUMpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB3aGlsZSAoZnRydW5jYXRlKGZpbGVEZXNjcmlwdG9yLCBzaXplKSA9PSAtMSkgewor
ICAgICAgICBpZiAoZXJybm8gIT0gRUlOVFIpIHsKKyAgICAgICAgICAgIHdoaWxlIChjbG9zZShm
aWxlRGVzY3JpcHRvcikgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpIHsgfQorICAgICAgICAgICAg
dW5saW5rKHRlbXBOYW1lQyk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHZvaWQqIGRhdGEgPSBtbWFwKDAsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJ
VEUsIE1BUF9TSEFSRUQsIGZpbGVEZXNjcmlwdG9yLCAwKTsKKyAgICBpZiAoZGF0YSA9PSBNQVBf
RkFJTEVEKSB7CisgICAgICAgIHdoaWxlIChjbG9zZShmaWxlRGVzY3JpcHRvcikgPT0gLTEgJiYg
ZXJybm8gPT0gRUlOVFIpIHsgfQorICAgICAgICB1bmxpbmsodGVtcE5hbWVDKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorCisgICAgdW5saW5rKHRlbXBOYW1lQyk7CisKKyAgICBSZWZQdHI8
U2hhcmVkTWVtb3J5PiBpbnN0YW5jZSA9IGFkb3B0UmVmKG5ldyBTaGFyZWRNZW1vcnkoKSk7Cisg
ICAgaW5zdGFuY2UtPm1fZGF0YSA9IGRhdGE7CisgICAgaW5zdGFuY2UtPm1fZmlsZURlc2NyaXB0
b3IgPSBmaWxlRGVzY3JpcHRvcjsKKyAgICBpbnN0YW5jZS0+bV9zaXplID0gc2l6ZTsKKyAgICBy
ZXR1cm4gaW5zdGFuY2UucmVsZWFzZSgpOworfQorCitzdGF0aWMgaW5saW5lIGludCBhY2Nlc3NN
b2RlTU1hcChTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb24gcHJvdGVjdGlvbikKK3sKKyAgICBzd2l0
Y2ggKHByb3RlY3Rpb24pIHsKKyAgICBjYXNlIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHk6CisgICAg
ICAgIHJldHVybiBQUk9UX1JFQUQ7CisgICAgY2FzZSBTaGFyZWRNZW1vcnk6OlJlYWRXcml0ZToK
KyAgICAgICAgcmV0dXJuIFBST1RfUkVBRCB8IFBST1RfV1JJVEU7CisgICAgfQorCisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFBST1RfUkVBRCB8IFBST1RfV1JJVEU7Cit9
CisKK1Bhc3NSZWZQdHI8U2hhcmVkTWVtb3J5PiBTaGFyZWRNZW1vcnk6OmNyZWF0ZShjb25zdCBI
YW5kbGUmIGhhbmRsZSwgUHJvdGVjdGlvbiBwcm90ZWN0aW9uKQoreworICAgIEFTU0VSVCghaGFu
ZGxlLmlzTnVsbCgpKTsKKworICAgIHZvaWQqIGRhdGEgPSBtbWFwKDAsIGhhbmRsZS5tX3NpemUs
IGFjY2Vzc01vZGVNTWFwKHByb3RlY3Rpb24pLCBNQVBfU0hBUkVELCBoYW5kbGUubV9maWxlRGVz
Y3JpcHRvciwgMCk7CisgICAgaWYgKGRhdGEgPT0gTUFQX0ZBSUxFRCkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBpbnN0YW5jZSA9IGFkb3B0UmVmKG5ldyBT
aGFyZWRNZW1vcnkoKSk7CisgICAgaW5zdGFuY2UtPm1fZGF0YSA9IGRhdGE7CisgICAgaW5zdGFu
Y2UtPm1fZmlsZURlc2NyaXB0b3IgPSBoYW5kbGUubV9maWxlRGVzY3JpcHRvcjsKKyAgICBpbnN0
YW5jZS0+bV9zaXplID0gaGFuZGxlLm1fc2l6ZTsKKyAgICBoYW5kbGUubV9maWxlRGVzY3JpcHRv
ciA9IC0xOworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKworU2hhcmVkTWVtb3J5Ojp+U2hhcmVk
TWVtb3J5KCkKK3sKKyAgICBtdW5tYXAobV9kYXRhLCBtX3NpemUpOworICAgIHdoaWxlIChjbG9z
ZShtX2ZpbGVEZXNjcmlwdG9yKSA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUikgeyB9Cit9CisKK3N0
YXRpYyBpbmxpbmUgaW50IGFjY2Vzc01vZGVGaWxlKFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbiBw
cm90ZWN0aW9uKQoreworICAgIHN3aXRjaCAocHJvdGVjdGlvbikgeworICAgIGNhc2UgU2hhcmVk
TWVtb3J5OjpSZWFkT25seToKKyAgICAgICAgcmV0dXJuIE9fUkRPTkxZOworICAgIGNhc2UgU2hh
cmVkTWVtb3J5OjpSZWFkV3JpdGU6CisgICAgICAgIHJldHVybiBPX1JEV1I7CisgICAgfQorCisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIE9fUkRXUjsKK30KKworYm9vbCBT
aGFyZWRNZW1vcnk6OmNyZWF0ZUhhbmRsZShIYW5kbGUmIGhhbmRsZSwgUHJvdGVjdGlvbiBwcm90
ZWN0aW9uKQoreworICAgIEFTU0VSVF9BUkcoaGFuZGxlLCAhaGFuZGxlLm1fc2l6ZSk7CisgICAg
QVNTRVJUX0FSRyhoYW5kbGUsIGhhbmRsZS5pc051bGwoKSk7CisKKyAgICBpbnQgZHVwbGljYXRl
ZEhhbmRsZTsKKyAgICB3aGlsZSAoKGR1cGxpY2F0ZWRIYW5kbGUgPSBkdXAobV9maWxlRGVzY3Jp
cHRvcikpID09IC0xKSB7CisgICAgICAgIGlmIChlcnJubyAhPSBFSU5UUikgeworICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB3aGlsZSAoKGZjbnRsKGR1cGxpY2F0ZWRIYW5kbGUsIEZfU0VU
RkQsIEZEX0NMT0VYRUMgfCBhY2Nlc3NNb2RlRmlsZShwcm90ZWN0aW9uKSkgPT0gLTEpKSB7Cisg
ICAgICAgIGlmIChlcnJubyAhPSBFSU5UUikgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICB3aGlsZSAoY2xvc2UoZHVwbGljYXRlZEhhbmRsZSkgPT0gLTEg
JiYgZXJybm8gPT0gRUlOVFIpIHsgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgfQorICAgIGhhbmRsZS5tX2ZpbGVEZXNjcmlwdG9yID0gZHVwbGljYXRlZEhhbmRs
ZTsKKyAgICBoYW5kbGUubV9zaXplID0gbV9zaXplOworICAgIHJldHVybiB0cnVlOworfQorCit1
bnNpZ25lZCBTaGFyZWRNZW1vcnk6OnN5c3RlbVBhZ2VTaXplKCkKK3sKKyAgICBzdGF0aWMgdW5z
aWduZWQgcGFnZVNpemUgPSAwOworCisgICAgaWYgKCFwYWdlU2l6ZSkKKyAgICAgICAgcGFnZVNp
emUgPSBnZXRwYWdlc2l6ZSgpOworCisgICAgcmV0dXJuIHBhZ2VTaXplOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0L1No
YXJlZE1lbW9yeVF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0L1NoYXJlZE1lbW9y
eVF0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ1ZDcwZi4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlRdC5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwyMjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgVW5pdmVy
c2l0eSBvZiBTemVnZWQKLSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgotCi0jaW5jbHVkZSAiQXJndW1lbnREZWNvZGVy
LmgiCi0jaW5jbHVkZSAiQXJndW1lbnRFbmNvZGVyLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzLmgiCi0jaW5jbHVkZSA8UURpcj4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1
ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3lzL21tYW4uaD4K
LSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUg
PHVuaXN0ZC5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0N1
cnJlbnRUaW1lLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1TaGFyZWRNZW1vcnk6OkhhbmRs
ZTo6SGFuZGxlKCkKLSAgICA6IG1fZmlsZURlc2NyaXB0b3IoLTEpCi0gICAgLCBtX3NpemUoMCkK
LXsKLX0KLQotU2hhcmVkTWVtb3J5OjpIYW5kbGU6On5IYW5kbGUoKQotewotICAgIGlmICghaXNO
dWxsKCkpCi0gICAgICAgIHdoaWxlIChjbG9zZShtX2ZpbGVEZXNjcmlwdG9yKSA9PSAtMSAmJiBl
cnJubyA9PSBFSU5UUikgeyB9Ci19Ci0KLWJvb2wgU2hhcmVkTWVtb3J5OjpIYW5kbGU6OmlzTnVs
bCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZmlsZURlc2NyaXB0b3IgPT0gLTE7Ci19Ci0KLXZv
aWQgU2hhcmVkTWVtb3J5OjpIYW5kbGU6OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIq
IGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFpc051bGwoKSk7Ci0KLSAgICBlbmNvZGVy
LT5lbmNvZGUocmVsZWFzZVRvQXR0YWNobWVudCgpKTsKLX0KLQotYm9vbCBTaGFyZWRNZW1vcnk6
OkhhbmRsZTo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgSGFuZGxl
JiBoYW5kbGUpCi17Ci0gICAgQVNTRVJUX0FSRyhoYW5kbGUsICFoYW5kbGUubV9zaXplKTsKLSAg
ICBBU1NFUlRfQVJHKGhhbmRsZSwgaGFuZGxlLmlzTnVsbCgpKTsKLQotICAgIENvcmVJUEM6OkF0
dGFjaG1lbnQgYXR0YWNobWVudDsKLSAgICBpZiAoIWRlY29kZXItPmRlY29kZShhdHRhY2htZW50
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaGFuZGxlLmFkb3B0RnJvbUF0dGFjaG1l
bnQoYXR0YWNobWVudC5yZWxlYXNlRmlsZURlc2NyaXB0b3IoKSwgYXR0YWNobWVudC5zaXplKCkp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi1Db3JlSVBDOjpBdHRhY2htZW50IFNoYXJlZE1lbW9y
eTo6SGFuZGxlOjpyZWxlYXNlVG9BdHRhY2htZW50KCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIWlz
TnVsbCgpKTsKLQotICAgIGludCB0ZW1wID0gbV9maWxlRGVzY3JpcHRvcjsKLSAgICBtX2ZpbGVE
ZXNjcmlwdG9yID0gLTE7Ci0gICAgcmV0dXJuIENvcmVJUEM6OkF0dGFjaG1lbnQodGVtcCwgbV9z
aXplKTsKLX0KLQotdm9pZCBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6YWRvcHRGcm9tQXR0YWNobWVu
dChpbnQgZmlsZURlc2NyaXB0b3IsIHNpemVfdCBzaXplKQotewotICAgIEFTU0VSVCghbV9zaXpl
KTsKLSAgICBBU1NFUlQoaXNOdWxsKCkpOwotCi0gICAgbV9maWxlRGVzY3JpcHRvciA9IGZpbGVE
ZXNjcmlwdG9yOwotICAgIG1fc2l6ZSA9IHNpemU7Ci19Ci0KLVBhc3NSZWZQdHI8U2hhcmVkTWVt
b3J5PiBTaGFyZWRNZW1vcnk6OmNyZWF0ZShzaXplX3Qgc2l6ZSkKLXsKLSAgICBRU3RyaW5nIHRl
bXBOYW1lID0gUURpcjo6dGVtcCgpLmZpbGVQYXRoKFFMYXRpbjFTdHJpbmcoInF3a3NobS5YWFhY
WFgiKSk7Ci0gICAgUUJ5dGVBcnJheSB0ZW1wTmFtZUNTVFIgPSB0ZW1wTmFtZS50b0xvY2FsOEJp
dCgpOwotICAgIGNoYXIqIHRlbXBOYW1lQyA9IHRlbXBOYW1lQ1NUUi5kYXRhKCk7Ci0KLSAgICBp
bnQgZmlsZURlc2NyaXB0b3I7Ci0gICAgd2hpbGUgKChmaWxlRGVzY3JpcHRvciA9IG1rc3RlbXAo
dGVtcE5hbWVDKSkgPT0gLTEpIHsKLSAgICAgICAgaWYgKGVycm5vICE9IEVJTlRSKQotICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHdoaWxlIChmY250bChmaWxlRGVzY3JpcHRvciwg
Rl9TRVRGRCwgRkRfQ0xPRVhFQykgPT0gLTEpIHsKLSAgICAgICAgaWYgKGVycm5vICE9IEVJTlRS
KSB7Ci0gICAgICAgICAgICB3aGlsZSAoY2xvc2UoZmlsZURlc2NyaXB0b3IpID09IC0xICYmIGVy
cm5vID09IEVJTlRSKSB7IH0KLSAgICAgICAgICAgIHVubGluayh0ZW1wTmFtZUMpOwotICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB3aGlsZSAoZnRydW5jYXRl
KGZpbGVEZXNjcmlwdG9yLCBzaXplKSA9PSAtMSkgewotICAgICAgICBpZiAoZXJybm8gIT0gRUlO
VFIpIHsKLSAgICAgICAgICAgIHdoaWxlIChjbG9zZShmaWxlRGVzY3JpcHRvcikgPT0gLTEgJiYg
ZXJybm8gPT0gRUlOVFIpIHsgfQotICAgICAgICAgICAgdW5saW5rKHRlbXBOYW1lQyk7Ci0gICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQqIGRhdGEgPSBt
bWFwKDAsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZpbGVEZXNj
cmlwdG9yLCAwKTsKLSAgICBpZiAoZGF0YSA9PSBNQVBfRkFJTEVEKSB7Ci0gICAgICAgIHdoaWxl
IChjbG9zZShmaWxlRGVzY3JpcHRvcikgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpIHsgfQotICAg
ICAgICB1bmxpbmsodGVtcE5hbWVDKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAg
dW5saW5rKHRlbXBOYW1lQyk7Ci0KLSAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBpbnN0YW5jZSA9
IGFkb3B0UmVmKG5ldyBTaGFyZWRNZW1vcnkoKSk7Ci0gICAgaW5zdGFuY2UtPm1fZGF0YSA9IGRh
dGE7Ci0gICAgaW5zdGFuY2UtPm1fZmlsZURlc2NyaXB0b3IgPSBmaWxlRGVzY3JpcHRvcjsKLSAg
ICBpbnN0YW5jZS0+bV9zaXplID0gc2l6ZTsKLSAgICByZXR1cm4gaW5zdGFuY2UucmVsZWFzZSgp
OwotfQotCi1zdGF0aWMgaW5saW5lIGludCBhY2Nlc3NNb2RlTU1hcChTaGFyZWRNZW1vcnk6OlBy
b3RlY3Rpb24gcHJvdGVjdGlvbikKLXsKLSAgICBzd2l0Y2ggKHByb3RlY3Rpb24pIHsKLSAgICBj
YXNlIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHk6Ci0gICAgICAgIHJldHVybiBQUk9UX1JFQUQ7Ci0g
ICAgY2FzZSBTaGFyZWRNZW1vcnk6OlJlYWRXcml0ZToKLSAgICAgICAgcmV0dXJuIFBST1RfUkVB
RCB8IFBST1RfV1JJVEU7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
cmV0dXJuIFBST1RfUkVBRCB8IFBST1RfV1JJVEU7Ci19Ci0KLVBhc3NSZWZQdHI8U2hhcmVkTWVt
b3J5PiBTaGFyZWRNZW1vcnk6OmNyZWF0ZShjb25zdCBIYW5kbGUmIGhhbmRsZSwgUHJvdGVjdGlv
biBwcm90ZWN0aW9uKQotewotICAgIEFTU0VSVCghaGFuZGxlLmlzTnVsbCgpKTsKLQotICAgIHZv
aWQqIGRhdGEgPSBtbWFwKDAsIGhhbmRsZS5tX3NpemUsIGFjY2Vzc01vZGVNTWFwKHByb3RlY3Rp
b24pLCBNQVBfU0hBUkVELCBoYW5kbGUubV9maWxlRGVzY3JpcHRvciwgMCk7Ci0gICAgaWYgKGRh
dGEgPT0gTUFQX0ZBSUxFRCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBSZWZQdHI8U2hhcmVk
TWVtb3J5PiBpbnN0YW5jZSA9IGFkb3B0UmVmKG5ldyBTaGFyZWRNZW1vcnkoKSk7Ci0gICAgaW5z
dGFuY2UtPm1fZGF0YSA9IGRhdGE7Ci0gICAgaW5zdGFuY2UtPm1fZmlsZURlc2NyaXB0b3IgPSBo
YW5kbGUubV9maWxlRGVzY3JpcHRvcjsKLSAgICBpbnN0YW5jZS0+bV9zaXplID0gaGFuZGxlLm1f
c2l6ZTsKLSAgICBoYW5kbGUubV9maWxlRGVzY3JpcHRvciA9IC0xOwotICAgIHJldHVybiBpbnN0
YW5jZTsKLX0KLQotU2hhcmVkTWVtb3J5Ojp+U2hhcmVkTWVtb3J5KCkKLXsKLSAgICBtdW5tYXAo
bV9kYXRhLCBtX3NpemUpOwotICAgIHdoaWxlIChjbG9zZShtX2ZpbGVEZXNjcmlwdG9yKSA9PSAt
MSAmJiBlcnJubyA9PSBFSU5UUikgeyB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGFjY2Vzc01v
ZGVGaWxlKFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbiBwcm90ZWN0aW9uKQotewotICAgIHN3aXRj
aCAocHJvdGVjdGlvbikgewotICAgIGNhc2UgU2hhcmVkTWVtb3J5OjpSZWFkT25seToKLSAgICAg
ICAgcmV0dXJuIE9fUkRPTkxZOwotICAgIGNhc2UgU2hhcmVkTWVtb3J5OjpSZWFkV3JpdGU6Ci0g
ICAgICAgIHJldHVybiBPX1JEV1I7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgcmV0dXJuIE9fUkRXUjsKLX0KLQotYm9vbCBTaGFyZWRNZW1vcnk6OmNyZWF0ZUhhbmRs
ZShIYW5kbGUmIGhhbmRsZSwgUHJvdGVjdGlvbiBwcm90ZWN0aW9uKQotewotICAgIEFTU0VSVF9B
UkcoaGFuZGxlLCAhaGFuZGxlLm1fc2l6ZSk7Ci0gICAgQVNTRVJUX0FSRyhoYW5kbGUsIGhhbmRs
ZS5pc051bGwoKSk7Ci0KLSAgICBpbnQgZHVwbGljYXRlZEhhbmRsZTsKLSAgICB3aGlsZSAoKGR1
cGxpY2F0ZWRIYW5kbGUgPSBkdXAobV9maWxlRGVzY3JpcHRvcikpID09IC0xKSB7Ci0gICAgICAg
IGlmIChlcnJubyAhPSBFSU5UUikgewotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB3aGls
ZSAoKGZjbnRsKGR1cGxpY2F0ZWRIYW5kbGUsIEZfU0VURkQsIEZEX0NMT0VYRUMgfCBhY2Nlc3NN
b2RlRmlsZShwcm90ZWN0aW9uKSkgPT0gLTEpKSB7Ci0gICAgICAgIGlmIChlcnJubyAhPSBFSU5U
UikgewotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB3aGls
ZSAoY2xvc2UoZHVwbGljYXRlZEhhbmRsZSkgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpIHsgfQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIGhhbmRsZS5t
X2ZpbGVEZXNjcmlwdG9yID0gZHVwbGljYXRlZEhhbmRsZTsKLSAgICBoYW5kbGUubV9zaXplID0g
bV9zaXplOwotICAgIHJldHVybiB0cnVlOwotfQotCi11bnNpZ25lZCBTaGFyZWRNZW1vcnk6OnN5
c3RlbVBhZ2VTaXplKCkKLXsKLSAgICBzdGF0aWMgdW5zaWduZWQgcGFnZVNpemUgPSAwOwotCi0g
ICAgaWYgKCFwYWdlU2l6ZSkKLSAgICAgICAgcGFnZVNpemUgPSBnZXRwYWdlc2l6ZSgpOwotCi0g
ICAgcmV0dXJuIHBhZ2VTaXplOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJvIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5w
cm8KaW5kZXggZDNiMDgxNC4uNmE2YmRkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
S2l0Mi5wcm8KKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8KQEAgLTI5OCwxNCArMjk4
LDE0IEBAIFNPVVJDRVMgKz0gXAogICAgIFBsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5jcHAg
XAogICAgIFBsYXRmb3JtL0NvcmVJUEMvRGF0YVJlZmVyZW5jZS5jcHAgXAogICAgIFBsYXRmb3Jt
L0NvcmVJUEMvcXQvQXR0YWNobWVudFF0LmNwcCBcCi0gICAgUGxhdGZvcm0vQ29yZUlQQy9xdC9D
b25uZWN0aW9uUXQuY3BwIFwKKyAgICBQbGF0Zm9ybS9Db3JlSVBDL3F0L0Nvbm5lY3Rpb25Qb3Np
eC5jcHAgXAogICAgIFBsYXRmb3JtL0xvZ2dpbmcuY3BwIFwKICAgICBQbGF0Zm9ybS9Nb2R1bGUu
Y3BwIFwKICAgICBQbGF0Zm9ybS9SdW5Mb29wLmNwcCBcCiAgICAgUGxhdGZvcm0vV29ya1F1ZXVl
LmNwcCBcCiAgICAgUGxhdGZvcm0vcXQvTW9kdWxlUXQuY3BwIFwKICAgICBQbGF0Zm9ybS9xdC9S
dW5Mb29wUXQuY3BwIFwKLSAgICBQbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlRdC5jcHAgXAorICAg
IFBsYXRmb3JtL3F0L1NoYXJlZE1lbW9yeVBvc2l4LmNwcCBcCiAgICAgUGxhdGZvcm0vcXQvV29y
a1F1ZXVlUXQuY3BwIFwKICAgICBTaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdp
bk1vZHVsZS5jcHAgXAogICAgIFNoYXJlZC9QbHVnaW5zL05ldHNjYXBlL3gxMS9OZXRzY2FwZVBs
dWdpbk1vZHVsZVgxMS5jcHAgXAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>