<?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>6057</bug_id>
          
          <creation_ts>2005-12-12 23:23:37 -0800</creation_ts>
          <short_desc>XMLTokenizer does not parse incrementally as it should.</short_desc>
          <delta_ts>2019-02-06 09:04:12 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Major</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>6058</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          <cc>cdumez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>25883</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-12 23:23:37 -0800</bug_when>
    <thetext>XMLTokenizer does not parse incrementally as it should.

Currently it builds everything up and then does one big parse in finish().  This is bad for lots of reasons.  
One of them being that it completely kills performance of large files.

Once this is fixed, we&apos;ll need to look into running &lt;script&gt; tags as we parse them, instead of all at once at 
the end.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>32296</commentid>
    <comment_count>1</comment_count>
      <attachid>6451</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-02-12 22:09:50 -0800</bug_when>
    <thetext>Created attachment 6451
fixes the xml parser to parse incremental (accounting for the xslt fallout)

This patch does a few things:
1.  removes (unused) onHold support from Tokenizer
2.  makes the xml parser parse incrementally.
3.  adds serialization of DTDs for xml documents (I added this in my first attempts at fixing xslt)
4. Fixes xslt support to no longer depend on synchronous parsing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>32456</commentid>
    <comment_count>2</comment_count>
      <attachid>6479</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-02-14 03:13:30 -0800</bug_when>
    <thetext>Created attachment 6479
Fixes incremental xml parsing in all cases (includes test results and ChangeLog)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>32511</commentid>
    <comment_count>3</comment_count>
      <attachid>6479</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-02-14 13:14:24 -0800</bug_when>
    <thetext>Comment on attachment 6479
Fixes incremental xml parsing in all cases (includes test results and ChangeLog)

I gave Eric a few comments in person, but none that seem to block landing this as-is.

r=me

(Eliminate XSLStyleSheetImpl::setDocument, write test for bug fix in DocumentImpl::recalcStyleSelector that affects recursive transform with CSS style sheets.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503124</commentid>
    <comment_count>4</comment_count>
    <who name="Lucas Forschler">lforschler</who>
    <bug_when>2019-02-06 09:04:12 -0800</bug_when>
    <thetext>Mass moving XML DOM bugs to the &quot;DOM&quot; Component.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>6451</attachid>
            <date>2006-02-12 22:09:50 -0800</date>
            <delta_ts>2006-02-14 03:13:30 -0800</delta_ts>
            <desc>fixes the xml parser to parse incremental (accounting for the xslt fallout)</desc>
            <filename>incremental.patch</filename>
            <type>text/plain</type>
            <size>21964</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2VkaXRpbmcvbWFya3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9lZGl0
aW5nL21hcmt1cC5jcHAJKHJldmlzaW9uIDEyNzc3KQorKysga2h0bWwvZWRpdGluZy9tYXJrdXAu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiSW5saW5lVGV4
dEJveC5oIgogI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogI2luY2x1ZGUgIkRvY3VtZW50SW1wbC5o
IgorI2luY2x1ZGUgIkRvY3VtZW50VHlwZUltcGwuaCIKICNpbmNsdWRlICJDb21tZW50SW1wbC5o
IgogCiB1c2luZyBuYW1lc3BhY2UgRE9NOjpIVE1MTmFtZXM7CkBAIC0xODEsMTIgKzE4MiwyMCBA
QCBzdGF0aWMgUVN0cmluZyBzdGFydE1hcmt1cChjb25zdCBOb2RlSW1wCiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBOb2RlOjpDT01NRU5UX05PREU6CiAgICAgICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Y29uc3QgQ29tbWVudEltcGwgKj4obm9kZSktPnRvU3RyaW5nKCkucXN0cmluZygpOwot
ICAgICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX05PREU6CisgICAgICAgIGNhc2UgTm9kZTo6RE9D
VU1FTlRfTk9ERTogeworICAgICAgICAgICAgLy8gRG9jdW1lbnRzIGRvIG5vdCBub3JtYWxseSBj
b250YWluIGEgZG9jVHlwZSBhcyBhIGNoaWxkIG5vZGUsIGZvcmNlIGl0IHRvIHByaW50IGhlcmUg
aW5zdGVhZC4KKyAgICAgICAgICAgIGNvbnN0IERvY3VtZW50VHlwZUltcGwqIGRvY1R5cGUgPSBz
dGF0aWNfY2FzdDxjb25zdCBEb2N1bWVudEltcGwqPihub2RlKS0+ZG9jdHlwZSgpOworICAgICAg
ICAgICAgaWYgKGRvY1R5cGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGRvY1R5cGUtPnRvU3Ry
aW5nKCkucXN0cmluZygpOworICAgICAgICAgICAgcmV0dXJuICIiOworICAgICAgICB9CiAgICAg
ICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfRlJBR01FTlRfTk9ERToKICAgICAgICAgICAgIHJldHVy
biAiIjsKKyAgICAgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9UWVBFX05PREU6CisgICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgRG9jdW1lbnRUeXBlSW1wbCo+KG5vZGUpLT50b1N0
cmluZygpLnFzdHJpbmcoKTsKICAgICAgICAgY2FzZSBOb2RlOjpQUk9DRVNTSU5HX0lOU1RSVUNU
SU9OX05PREU6CiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUHJvY2Vzc2lu
Z0luc3RydWN0aW9uSW1wbCAqPihub2RlKS0+dG9TdHJpbmcoKS5xc3RyaW5nKCk7Ci0gICAgICAg
IGRlZmF1bHQ6IHsKKyAgICAgICAgY2FzZSBOb2RlOjpFTEVNRU5UX05PREU6IHsKICAgICAgICAg
ICAgIFFTdHJpbmcgbWFya3VwID0gUUNoYXIoJzwnKSArIG5vZGUtPm5vZGVOYW1lKCkucXN0cmlu
ZygpOwogICAgICAgICAgICAgaWYgKHR5cGUgPT0gTm9kZTo6RUxFTUVOVF9OT0RFKSB7CiAgICAg
ICAgICAgICAgICAgY29uc3QgRWxlbWVudEltcGwgKmVsID0gc3RhdGljX2Nhc3Q8Y29uc3QgRWxl
bWVudEltcGwgKj4obm9kZSk7CkBAIC0yMzQsNiArMjQzLDcgQEAgc3RhdGljIFFTdHJpbmcgc3Rh
cnRNYXJrdXAoY29uc3QgTm9kZUltcAogICAgICAgICAgICAgcmV0dXJuIG1hcmt1cDsKICAgICAg
ICAgfQogICAgIH0KKyAgICByZXR1cm4gIiI7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBkb2Vz
SFRNTEZvcmJpZEVuZFRhZyhjb25zdCBOb2RlSW1wbCAqbm9kZSkKSW5kZXg6IGtodG1sL2h0bWwv
aHRtbHRva2VuaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2h0bWwvaHRtbHRva2VuaXplci5o
CShyZXZpc2lvbiAxMjc3NykKKysrIGtodG1sL2h0bWwvaHRtbHRva2VuaXplci5oCSh3b3JraW5n
IGNvcHkpCkBAIC05MCw3ICs5MCw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCB3cml0
ZShjb25zdCBTZWdtZW50ZWRTdHJpbmcgJnN0ciwgYm9vbCBhcHBlbmREYXRhKTsKICAgICB2aXJ0
dWFsIHZvaWQgZmluaXNoKCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldE9uSG9sZChib29sIG9uSG9s
ZCk7CiAgICAgdmlydHVhbCB2b2lkIHNldEZvcmNlU3luY2hyb25vdXMoYm9vbCBmb3JjZSk7CiAg
ICAgdmlydHVhbCBib29sIGlzV2FpdGluZ0ZvclNjcmlwdHMoKSBjb25zdDsKICAgICB2aXJ0dWFs
IHZvaWQgc3RvcFBhcnNpbmcoKTsKQEAgLTMxNiw4ICszMTUsNiBAQCBwcml2YXRlOgogICAgIGlu
dCBtX2V4ZWN1dGluZ1NjcmlwdDsKICAgICBRUHRyUXVldWU8Q2FjaGVkU2NyaXB0PiBwZW5kaW5n
U2NyaXB0czsKICAgICBSZWZQdHI8Tm9kZUltcGw+IHNjcmlwdE5vZGU7Ci0gICAgLy8geW91IGNh
biBwYXVzZSB0aGUgdG9rZW5pemVyIGlmIHlvdSBuZWVkIHRvIGRpc3BsYXkgYSBkaWFsb2cgb3Ig
c29tZXRoaW5nCi0gICAgYm9vbCBvbkhvbGQ7CiAKICAgICAvLyBpZiB3ZSBmb3VuZCBvbmUgYnJv
a2VuIGNvbW1lbnQsIHRoZXJlIGFyZSBtb3N0IGxpa2VseSBvdGhlcnMgYXMgd2VsbAogICAgIC8v
IHN0b3JlIGEgZmxhZyB0byBnZXQgcmlkIG9mIHRoZSBPKG5eMikgYmVoYXZpb3VyIGluIHN1Y2gg
YSBjYXNlLgpJbmRleDoga2h0bWwvaHRtbC9odG1sdG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBraHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuY3BwCShyZXZpc2lvbiAxMjc3NykKKysrIGtodG1s
L2h0bWwvaHRtbHRva2VuaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Myw3ICsxNDMsNiBA
QCBIVE1MVG9rZW5pemVyOjpIVE1MVG9rZW5pemVyKERvY3VtZW50SW1wCiAgICAgc2NyaXB0Q29k
ZVNpemUgPSBzY3JpcHRDb2RlTWF4U2l6ZSA9IHNjcmlwdENvZGVSZXN5bmMgPSAwOwogICAgIHBh
cnNlciA9IG5ldyBIVE1MUGFyc2VyKF92aWV3LCBfZG9jLCBpbmNsdWRlc0NvbW1lbnRzKTsKICAg
ICBtX2V4ZWN1dGluZ1NjcmlwdCA9IDA7Ci0gICAgb25Ib2xkID0gZmFsc2U7CiAgICAgaW5jbHVk
ZXNDb21tZW50c0luRE9NID0gaW5jbHVkZXNDb21tZW50czsKICAgICAKICAgICBiZWdpbigpOwpA
QCAtMTU4LDcgKzE1Nyw2IEBAIEhUTUxUb2tlbml6ZXI6OkhUTUxUb2tlbml6ZXIoRG9jdW1lbnRJ
bXAKICAgICBzY3JpcHRDb2RlU2l6ZSA9IHNjcmlwdENvZGVNYXhTaXplID0gc2NyaXB0Q29kZVJl
c3luYyA9IDA7CiAgICAgcGFyc2VyID0gbmV3IEhUTUxQYXJzZXIoaSwgX2RvYywgaW5jbHVkZXND
b21tZW50cyk7CiAgICAgbV9leGVjdXRpbmdTY3JpcHQgPSAwOwotICAgIG9uSG9sZCA9IGZhbHNl
OwogICAgIGluY2x1ZGVzQ29tbWVudHNJbkRPTSA9IGluY2x1ZGVzQ29tbWVudHM7CiAKICAgICBi
ZWdpbigpOwpAQCAtMTY3LDcgKzE2NSw2IEBAIEhUTUxUb2tlbml6ZXI6OkhUTUxUb2tlbml6ZXIo
RG9jdW1lbnRJbXAKIHZvaWQgSFRNTFRva2VuaXplcjo6cmVzZXQoKQogewogICAgIEFTU0VSVCht
X2V4ZWN1dGluZ1NjcmlwdCA9PSAwKTsKLSAgICBBU1NFUlQob25Ib2xkID09IGZhbHNlKTsKIAog
ICAgIHdoaWxlICghcGVuZGluZ1NjcmlwdHMuaXNFbXB0eSgpKSB7CiAgICAgICBDYWNoZWRTY3Jp
cHQgKmNzID0gcGVuZGluZ1NjcmlwdHMuZGVxdWV1ZSgpOwpAQCAtMTk2LDcgKzE5Myw2IEBAIHZv
aWQgSFRNTFRva2VuaXplcjo6YmVnaW4oKQogewogICAgIG1fZXhlY3V0aW5nU2NyaXB0ID0gMDsK
ICAgICBtX3N0YXRlLnNldExvYWRpbmdFeHRTY3JpcHQoZmFsc2UpOwotICAgIG9uSG9sZCA9IGZh
bHNlOwogICAgIHJlc2V0KCk7CiAgICAgc2l6ZSA9IDI1NDsKICAgICBidWZmZXIgPSBLSFRNTF9B
TExPQ19RQ0hBUl9WRUMoIDI1NSApOwpAQCAtMTM0OSwxMSArMTM0NSw2IEBAIGJvb2wgSFRNTFRv
a2VuaXplcjo6d3JpdGUoY29uc3QgU2VnbWVudGUKICAgICAgICAgfQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQotCi0gICAgaWYgKG9uSG9sZCkgewotICAgICAgICBzcmMuYXBwZW5kKHN0
cik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CiAgICAgCiAgICAgaWYgKCFzcmMuaXNF
bXB0eSgpKQogICAgICAgICBzcmMuYXBwZW5kKHN0cik7CkBAIC0xNjExLDcgKzE2MDIsNyBAQCB2
b2lkIEhUTUxUb2tlbml6ZXI6OmZpbmlzaCgpCiAgICAgLy8gdGhpcyBpbmRpY2F0ZXMgd2Ugd2ls
bCBub3QgcmVjZWl2ZSBhbnkgbW9yZSBkYXRhLi4uIGJ1dCBpZiB3ZSBhcmUgd2FpdGluZyBvbgog
ICAgIC8vIGFuIGV4dGVybmFsIHNjcmlwdCB0byBsb2FkLCB3ZSBjYW4ndCBmaW5pc2ggcGFyc2lu
ZyB1bnRpbCB0aGF0IGlzIGRvbmUKICAgICBub01vcmVEYXRhID0gdHJ1ZTsKLSAgICBpZiAoIWlu
V3JpdGUgJiYgIW1fc3RhdGUubG9hZGluZ0V4dFNjcmlwdCgpICYmICFtX2V4ZWN1dGluZ1Njcmlw
dCAmJiAhb25Ib2xkICYmICFtX3RpbWVyLmlzQWN0aXZlKCkpCisgICAgaWYgKCFpbldyaXRlICYm
ICFtX3N0YXRlLmxvYWRpbmdFeHRTY3JpcHQoKSAmJiAhbV9leGVjdXRpbmdTY3JpcHQgJiYgIW1f
dGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgZW5kKCk7IC8vIHRoaXMgYWN0dWFsbHkgY2F1c2Vz
IHVzIHRvIGJlIGRlbGV0ZWQKIH0KIApAQCAtMTc4MCwxMSArMTc3MSw2IEBAIHZvaWQgSFRNTFRv
a2VuaXplcjo6c2V0U3JjKGNvbnN0IFNlZ21lbnQKICAgICBzcmMucmVzZXRMaW5lQ291bnQoKTsK
IH0KIAotdm9pZCBIVE1MVG9rZW5pemVyOjpzZXRPbkhvbGQoYm9vbCBfb25Ib2xkKQotewotICAg
IG9uSG9sZCA9IF9vbkhvbGQ7Ci19Ci0KIHZvaWQgcGFyc2VIVE1MRG9jdW1lbnRGcmFnbWVudChj
b25zdCBET01TdHJpbmcgJnNvdXJjZSwgRG9jdW1lbnRGcmFnbWVudEltcGwgKmZyYWdtZW50KQog
ewogICAgIEhUTUxUb2tlbml6ZXIgdG9rKGZyYWdtZW50LT5nZXREb2N1bWVudCgpLCBmcmFnbWVu
dCk7CkluZGV4OiBraHRtbC94c2wveHNsX3N0eWxlc2hlZXRpbXBsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBraHRtbC94c2wveHNsX3N0eWxlc2hlZXRpbXBsLmNwcAkocmV2aXNpb24gMTI3NzcpCisrKyBr
aHRtbC94c2wveHNsX3N0eWxlc2hlZXRpbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsMjUg
KzQ1LDI3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKIFhTTFN0eWxlU2hlZXRJbXBsOjpY
U0xTdHlsZVNoZWV0SW1wbChYU0xJbXBvcnRSdWxlSW1wbCAqcGFyZW50UnVsZSwgRE9NU3RyaW5n
IGhyZWYpCiAgICAgOiBTdHlsZVNoZWV0SW1wbChwYXJlbnRSdWxlLCBocmVmKQorICAgICwgbV9v
d25lckRvY3VtZW50KDApCisgICAgLCBtX3N0eWxlc2hlZXREb2MoMCkKKyAgICAsIG1fZW1iZWRk
ZWQoZmFsc2UpCisgICAgLCBtX3Byb2Nlc3NlZChmYWxzZSkgLy8gQ2hpbGQgc2hlZXRzIGdldCBt
YXJrZWQgYXMgcHJvY2Vzc2VkIHdoZW4gdGhlIGxpYnhzbHQgZW5naW5lIGhhcyBmaW5hbGx5IHNl
ZW4gdGhlbS4KIHsKICAgICBtX2xzdENoaWxkcmVuID0gbmV3IFFQdHJMaXN0PFN0eWxlQmFzZUlt
cGw+OwotICAgIG1fb3duZXJEb2N1bWVudCA9IDA7Ci0gICAgbV9wcm9jZXNzZWQgPSBmYWxzZTsg
Ly8gQ2hpbGQgc2hlZXRzIGdldCBtYXJrZWQgYXMgcHJvY2Vzc2VkIHdoZW4gdGhlIGxpYnhzbHQg
ZW5naW5lIGhhcyBmaW5hbGx5IHNlZW4gdGhlbS4KIH0KIAogWFNMU3R5bGVTaGVldEltcGw6OlhT
TFN0eWxlU2hlZXRJbXBsKE5vZGVJbXBsICpwYXJlbnROb2RlLCBET01TdHJpbmcgaHJlZiwgIGJv
b2wgZW1iZWRkZWQpCiAgICAgOiBTdHlsZVNoZWV0SW1wbChwYXJlbnROb2RlLCBocmVmKQorICAg
ICwgbV9vd25lckRvY3VtZW50KHBhcmVudE5vZGUtPmdldERvY3VtZW50KCkpCisgICAgLCBtX3N0
eWxlc2hlZXREb2MoMCkKKyAgICAsIG1fZW1iZWRkZWQoZW1iZWRkZWQpCisgICAgLCBtX3Byb2Nl
c3NlZCh0cnVlKSAvLyBUaGUgcm9vdCBzaGVldCBzdGFydHMgb2ZmIHByb2Nlc3NlZC4KIHsKICAg
ICBtX2xzdENoaWxkcmVuID0gbmV3IFFQdHJMaXN0PFN0eWxlQmFzZUltcGw+OwotICAgIG1fb3du
ZXJEb2N1bWVudCA9IHBhcmVudE5vZGUtPmdldERvY3VtZW50KCk7Ci0gICAgbV9lbWJlZGRlZCA9
IGVtYmVkZGVkOwotICAgIG1fcHJvY2Vzc2VkID0gdHJ1ZTsgLy8gVGhlIHJvb3Qgc2hlZXQgc3Rh
cnRzIG9mZiBwcm9jZXNzZWQuCiB9CiAKIFhTTFN0eWxlU2hlZXRJbXBsOjp+WFNMU3R5bGVTaGVl
dEltcGwoKQogewotICAgIGlmICghbV9lbWJlZGRlZCkKLSAgICAgICAgeG1sRnJlZURvYyhtX3N0
eWxlc2hlZXREb2MpOworICAgIHhtbEZyZWVEb2MobV9zdHlsZXNoZWV0RG9jKTsKIH0KIAogYm9v
bCBYU0xTdHlsZVNoZWV0SW1wbDo6aXNMb2FkaW5nKCkKQEAgLTg4LDYgKzkwLDIyIEBAIHZvaWQg
WFNMU3R5bGVTaGVldEltcGw6OmNoZWNrTG9hZGVkKCkKICAgICAgICAgbV9wYXJlbnROb2RlLT5z
aGVldExvYWRlZCgpOwogfQogCit4bWxEb2NQdHIgWFNMU3R5bGVTaGVldEltcGw6OmRvY3VtZW50
KCkKK3sKKyAgICBpZiAobV9lbWJlZGRlZCAmJiBvd25lckRvY3VtZW50KCkpCisgICAgICAgIHJl
dHVybiAoeG1sRG9jUHRyKW93bmVyRG9jdW1lbnQoKS0+dHJhbnNmb3JtU291cmNlKCk7CisgICAg
cmV0dXJuIG1fc3R5bGVzaGVldERvYzsKK30KKwordm9pZCBYU0xTdHlsZVNoZWV0SW1wbDo6c2V0
RG9jdW1lbnQoeG1sRG9jUHRyIG5ld0RvYykKK3sKKyAgICBpZiAobV9zdHlsZXNoZWV0RG9jICE9
IG5ld0RvYykgeworICAgICAgICB4bWxGcmVlRG9jKG1fc3R5bGVzaGVldERvYyk7CisgICAgICAg
IG1fc3R5bGVzaGVldERvYyA9IDA7CisgICAgfQorICAgIG1fc3R5bGVzaGVldERvYyA9IG5ld0Rv
YzsgICAgCit9CisKIHZvaWQgWFNMU3R5bGVTaGVldEltcGw6OmNsZWFyRG9jdW1lbnRzKCkKIHsK
ICAgICBtX3N0eWxlc2hlZXREb2MgPSAwOwpAQCAtMTEzLDI2ICsxMzEsMjcgQEAgYm9vbCBYU0xT
dHlsZVNoZWV0SW1wbDo6cGFyc2VTdHJpbmcoY29ucwogICAgIGNvbnN0IFFDaGFyIEJPTSgweEZF
RkYpOwogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgQk9NSGlnaEJ5dGUgPSAqcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyICo+KCZCT00pOwogICAgIHNldExvYWRlckZvckxpYlhN
TENhbGxiYWNrcyhkb2NMb2FkZXIoKSk7Ci0gICAgbV9zdHlsZXNoZWV0RG9jID0geG1sUmVhZE1l
bW9yeShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIgKj4oc3RyaW5nLnVuaWNvZGUoKSksCisg
ICAgeG1sRG9jUHRyIG5ld0RvYyA9IHhtbFJlYWRNZW1vcnkocmVpbnRlcnByZXRfY2FzdDxjb25z
dCBjaGFyICo+KHN0cmluZy51bmljb2RlKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RyaW5nLmxlbmd0aCgpICogc2l6ZW9mKFFDaGFyKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fb3duZXJEb2N1bWVudC0+VVJMKCkuYXNjaWkoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPTUhpZ2hCeXRlID09IDB4RkYgPyAi
VVRGLTE2TEUiIDogIlVURi0xNkJFIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBYTUxfUEFSU0VfTk9DREFUQXxYTUxfUEFSU0VfRFREQVRUUnxYTUxfUEFSU0VfTk9FTlQp
OworICAgIHNldERvY3VtZW50KG5ld0RvYyk7CiAgICAgbG9hZENoaWxkU2hlZXRzKCk7CiAgICAg
c2V0TG9hZGVyRm9yTGliWE1MQ2FsbGJhY2tzKDApOwotICAgIHJldHVybiBtX3N0eWxlc2hlZXRE
b2M7CisgICAgcmV0dXJuIG5ld0RvYzsKIH0KIAogdm9pZCBYU0xTdHlsZVNoZWV0SW1wbDo6bG9h
ZENoaWxkU2hlZXRzKCkKIHsKLSAgICBpZiAoIW1fc3R5bGVzaGVldERvYykKKyAgICBpZiAoIWRv
Y3VtZW50KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICB4bWxOb2RlUHRyIHN0eWxlc2hl
ZXRSb290ID0gbV9zdHlsZXNoZWV0RG9jLT5jaGlsZHJlbjsKKyAgICB4bWxOb2RlUHRyIHN0eWxl
c2hlZXRSb290ID0gZG9jdW1lbnQoKS0+Y2hpbGRyZW47CiAgICAgaWYgKG1fZW1iZWRkZWQpIHsK
ICAgICAgICAgLy8gV2UgaGF2ZSB0byBsb2NhdGUgKGJ5IElEKSB0aGUgYXBwcm9wcmlhdGUgZW1i
ZWRkZWQgc3R5bGVzaGVldCBlbGVtZW50LCBzbyB0aGF0IHdlIGNhbiB3YWxrIHRoZSAKICAgICAg
ICAgLy8gaW1wb3J0L2luY2x1ZGUgbGlzdC4KLSAgICAgICAgeG1sQXR0clB0ciBpZE5vZGUgPSB4
bWxHZXRJRChtX3N0eWxlc2hlZXREb2MsIChjb25zdCB4bWxDaGFyKikoaHJlZigpLnFzdHJpbmco
KS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIHhtbEF0dHJQdHIgaWROb2RlID0geG1sR2V0SUQo
ZG9jdW1lbnQoKSwgKGNvbnN0IHhtbENoYXIqKShocmVmKCkucXN0cmluZygpLnV0ZjgoKS5kYXRh
KCkpKTsKICAgICAgICAgaWYgKGlkTm9kZSA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICBzdHlsZXNoZWV0Um9vdCA9IGlkTm9kZS0+cGFyZW50OwpAQCAtMTg3LDIxICsyMDYs
MjIgQEAgeHNsdFN0eWxlc2hlZXRQdHIgWFNMU3R5bGVTaGVldEltcGw6OmNvbQogewogICAgIC8v
IEZJWE1FOiBIb29rIHVwIGVycm9yIHJlcG9ydGluZyBmb3IgdGhlIHN0eWxlc2hlZXQgY29tcGls
YXRpb24gcHJvY2Vzcy4KICAgICBpZiAobV9lbWJlZGRlZCkKLSAgICAgICAgcmV0dXJuIHhzbHRM
b2FkU3R5bGVzaGVldFBJKG1fc3R5bGVzaGVldERvYyk7CisgICAgICAgIHJldHVybiB4c2x0TG9h
ZFN0eWxlc2hlZXRQSShkb2N1bWVudCgpKTsKICAgICBlbHNlCi0gICAgICAgIHJldHVybiB4c2x0
UGFyc2VTdHlsZXNoZWV0RG9jKG1fc3R5bGVzaGVldERvYyk7CisgICAgICAgIHJldHVybiB4c2x0
UGFyc2VTdHlsZXNoZWV0RG9jKGRvY3VtZW50KCkpOwogfQogCiB4bWxEb2NQdHIgWFNMU3R5bGVT
aGVldEltcGw6OmxvY2F0ZVN0eWxlc2hlZXRTdWJSZXNvdXJjZSh4bWxEb2NQdHIgcGFyZW50RG9j
LCBjb25zdCB4bWxDaGFyKiB1cmkpCiB7Ci0gICAgYm9vbCBtYXRjaGVkUGFyZW50ID0gKHBhcmVu
dERvYyA9PSBtX3N0eWxlc2hlZXREb2MpOworICAgIGJvb2wgbWF0Y2hlZFBhcmVudCA9IChwYXJl
bnREb2MgPT0gZG9jdW1lbnQoKSk7CiAgICAgZm9yIChTdHlsZUJhc2VJbXBsKiBydWxlID0gbV9s
c3RDaGlsZHJlbi0+Zmlyc3QoKTsgcnVsZTsgcnVsZSA9IG1fbHN0Q2hpbGRyZW4tPm5leHQoKSkg
ewogICAgICAgICBpZiAocnVsZS0+aXNJbXBvcnRSdWxlKCkpIHsKICAgICAgICAgICAgIFhTTElt
cG9ydFJ1bGVJbXBsKiBpbXBvcnQgPSBzdGF0aWNfY2FzdDxYU0xJbXBvcnRSdWxlSW1wbCo+KHJ1
bGUpOwogICAgICAgICAgICAgWFNMU3R5bGVTaGVldEltcGwqIGNoaWxkID0gaW1wb3J0LT5zdHls
ZVNoZWV0KCk7CiAgICAgICAgICAgICBpZiAoIWNoaWxkKSBjb250aW51ZTsKICAgICAgICAgICAg
IGlmIChtYXRjaGVkUGFyZW50KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5wcm9jZXNz
ZWQoKSkgY29udGludWU7IC8vIGxpYnhzbHQgaGFzIGJlZW4gZ2l2ZW4gdGhpcyBzaGVldCBhbHJl
YWR5LgorICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+cHJvY2Vzc2VkKCkpCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOyAvLyBsaWJ4c2x0IGhhcyBiZWVuIGdpdmVuIHRoaXMgc2hlZXQg
YWxyZWFkeS4KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBDaGVjayB0aGUg
VVJJIG9mIHRoZSBjaGlsZCBzdHlsZXNoZWV0IGFnYWluc3QgdGhlIGRvYyBVUkkuCiAgICAgICAg
ICAgICAgICAgLy8gSW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgbGlieG1sIGNhbm9uaWNhbGl6ZWQg
Ym90aCBVUkxzLCB3ZSBnZXQgdGhlIG9yaWdpbmFsIGhyZWYKQEAgLTIyMyw3ICsyNDMsNyBAQCB4
bWxEb2NQdHIgWFNMU3R5bGVTaGVldEltcGw6OmxvY2F0ZVN0eWxlCiAgICAgICAgIH0KICAgICB9
CiAgICAgCi0gICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIDA7CiB9CiAKIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KSW5kZXg6IGtodG1sL3hzbC94c2xfc3R5bGVz
aGVldGltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC94c2wveHNsX3N0eWxlc2hlZXRpbXBsLmgJ
KHJldmlzaW9uIDEyNzc3KQorKysga2h0bWwveHNsL3hzbF9zdHlsZXNoZWV0aW1wbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Miw4ICs2Miw4IEBAIHB1YmxpYzoKICAgICBEb2N1bWVudEltcGwqIG93
bmVyRG9jdW1lbnQoKSB7IHJldHVybiBtX293bmVyRG9jdW1lbnQ7IH0KICAgICB2b2lkIHNldE93
bmVyRG9jdW1lbnQoRG9jdW1lbnRJbXBsKiBkb2MpIHsgbV9vd25lckRvY3VtZW50ID0gZG9jOyB9
CiAKLSAgICB4bWxEb2NQdHIgZG9jdW1lbnQoKSB7IHJldHVybiBtX3N0eWxlc2hlZXREb2M7IH0K
LSAgICB2b2lkIHNldERvY3VtZW50KHhtbERvY1B0ciBkb2MpIHsgbV9zdHlsZXNoZWV0RG9jID0g
ZG9jOyB9CisgICAgeG1sRG9jUHRyIGRvY3VtZW50KCk7CisgICAgdm9pZCBzZXREb2N1bWVudCh4
bWxEb2NQdHIpOwogCiAgICAgdm9pZCBjbGVhckRvY3VtZW50cygpOwogCkBAIC03MSw2ICs3MSw4
IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIG1hcmtBc1Byb2Nlc3NlZCgpIHsgbV9wcm9jZXNz
ZWQgPSB0cnVlOyB9CiAgICAgYm9vbCBwcm9jZXNzZWQoKSBjb25zdCB7IHJldHVybiBtX3Byb2Nl
c3NlZDsgfQorICAgIAorICAgIGJvb2wgaXNFbWJlZGRlZCgpIHsgcmV0dXJuIG1fZW1iZWRkZWQ7
IH0KIAogcHJvdGVjdGVkOgogICAgIERvY3VtZW50SW1wbCogbV9vd25lckRvY3VtZW50OwpJbmRl
eDogZG9tL2RvbV94bWxpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkb20vZG9tX3htbGltcGwuY3Bw
CShyZXZpc2lvbiAxMjc3NykKKysrIGRvbS9kb21feG1saW1wbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDYgKzM1LDcgQEAKIAogI2lmIEtIVE1MX1hTTFQKICNpbmNsdWRlICJ4c2xfc3R5bGVz
aGVldGltcGwuaCIKKyNpbmNsdWRlICJtYXJrdXAuaCIKICNlbmRpZgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC0zMDIsMTEgKzMwMyw2IEBAIGJvb2wgUHJvY2Vzc2luZ0luc3RydWN0aW9uSW1w
bDo6Y2hlY2tTdHkKICNlbmRpZgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSNpZiBLSFRN
TF9YU0xUCi0gICAgICAgIGlmIChtX2lzWFNMKQotICAgICAgICAgICAgZ2V0RG9jdW1lbnQoKS0+
dG9rZW5pemVyKCktPnNldFRyYW5zZm9ybVNvdXJjZShnZXREb2N1bWVudCgpKTsKLSNlbmRpZgot
CiAgICAgICAgIERPTVN0cmluZyBocmVmID0gYXR0cnMuZ2V0KCJocmVmIik7CiAKICAgICAgICAg
aWYgKGhyZWYubGVuZ3RoKCkgPiAxKSB7CkBAIC0zMTYsMTAgKzMxMiw3IEBAIGJvb2wgUHJvY2Vz
c2luZ0luc3RydWN0aW9uSW1wbDo6Y2hlY2tTdHkKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVk
IHRvIG1ha2UgYSBzeW50aGV0aWMgWFNMU3R5bGVTaGVldEltcGwgdGhhdCBpcyBlbWJlZGRlZC4g
IEl0IG5lZWRzIHRvIGJlIGFibGUKICAgICAgICAgICAgICAgICAvLyB0byBraWNrIG9mZiBpbXBv
cnQvaW5jbHVkZSBsb2FkcyB0aGF0IGNhbiBoYW5nIG9mZiBzb21lIHBhcmVudCBzaGVldC4KICAg
ICAgICAgICAgICAgICBpZiAobV9pc1hTTCkgewotICAgICAgICAgICAgICAgICAgICBSZWZQdHI8
WFNMU3R5bGVTaGVldEltcGw+IGxvY2FsU2hlZXQgPSBuZXcgWFNMU3R5bGVTaGVldEltcGwodGhp
cywgbV9sb2NhbEhyZWYuZ2V0KCksIHRydWUpOwotICAgICAgICAgICAgICAgICAgICBsb2NhbFNo
ZWV0LT5zZXREb2N1bWVudCgoeG1sRG9jUHRyKWdldERvY3VtZW50KCktPnRyYW5zZm9ybVNvdXJj
ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgbG9jYWxTaGVldC0+bG9hZENoaWxkU2hlZXRzKCk7
Ci0gICAgICAgICAgICAgICAgICAgIG1fc2hlZXQgPSBsb2NhbFNoZWV0LnJlbGVhc2UoKTsKKyAg
ICAgICAgICAgICAgICAgICAgbV9zaGVldCA9IG5ldyBYU0xTdHlsZVNoZWV0SW1wbCh0aGlzLCBt
X2xvY2FsSHJlZi5nZXQoKSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIG1fbG9hZGluZyA9
IGZhbHNlOwogICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIHJldHVybiAhbV9pc1hTTDsKQEAgLTMzMiw3ICszMjUsOCBAQCBib29sIFByb2Nlc3Np
bmdJbnN0cnVjdGlvbkltcGw6OmNoZWNrU3R5CiAgICAgICAgICAgICAgICAgaWYgKGdldERvY3Vt
ZW50KCktPmZyYW1lKCkpIHsKICAgICAgICAgICAgICAgICAgICAgbV9sb2FkaW5nID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICAgICAgZ2V0RG9jdW1lbnQoKS0+YWRkUGVuZGluZ1NoZWV0KCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChtX2NhY2hlZFNoZWV0KSBtX2NhY2hlZFNoZWV0LT5kZXJl
Zih0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fY2FjaGVkU2hlZXQpCisgICAgICAg
ICAgICAgICAgICAgICAgICBtX2NhY2hlZFNoZWV0LT5kZXJlZih0aGlzKTsKICNpZiBLSFRNTF9Y
U0xUCiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2lzWFNMKQogICAgICAgICAgICAgICAgICAg
ICAgICAgbV9jYWNoZWRTaGVldCA9IGdldERvY3VtZW50KCktPmRvY0xvYWRlcigpLT5yZXF1ZXN0
WFNMU3R5bGVTaGVldChnZXREb2N1bWVudCgpLT5jb21wbGV0ZVVSTChocmVmKSk7CkluZGV4OiBk
b20veG1sX3Rva2VuaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS94bWxfdG9rZW5pemVyLmgJKHJl
dmlzaW9uIDEyNzc3KQorKysgZG9tL3htbF90b2tlbml6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NDgsNyArNDgsNiBAQCBwdWJsaWM6CiAgICAgLy8gZG9jdW1lbnQud3JpdGUoKSBhbHdheXMgdXNl
cyBmYWxzZSwgd2hpbGUgdGhlIGxvYWRlciB1c2VzIHRydWUuCiAgICAgdmlydHVhbCBib29sIHdy
aXRlKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYsIGJvb2wgYXBwZW5kRGF0YSkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBmaW5pc2goKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldE9uSG9sZChib29s
IG9uSG9sZCkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc1dhaXRpbmdGb3JTY3JpcHRzKCkgY29u
c3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzdG9wUGFyc2luZygpIHsgbV9wYXJzZXJTdG9wcGVk
ID0gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBwcm9jZXNzaW5nRGF0YSgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CkBAIC01OCwxMSArNTcsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gaXQgc3Rv
cHMgcmVjZWl2aW5nIGRhdGEuIFdlIHVzZSBtX3BhcnNlclN0b3BwZWQgdG8gc3RvcCB0aGUgdG9r
ZW5pemVyCiAgICAgLy8gZXZlbiB3aGVuIGl0IGhhcyBidWZmZXJlZCBkYXRhLgogICAgIGJvb2wg
bV9wYXJzZXJTdG9wcGVkOwotICAgIAotI2lmIEtIVE1MX1hTTFQKLXB1YmxpYzoKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0VHJhbnNmb3JtU291cmNlKERvY3VtZW50SW1wbCopIHt9Ci0jZW5kaWYKIAog
c2lnbmFsczoKICAgICB2b2lkIGZpbmlzaGVkUGFyc2luZygpOwpJbmRleDogZG9tL0RvY3VtZW50
SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gZG9tL0RvY3VtZW50SW1wbC5jcHAJKHJldmlzaW9uIDEy
Nzc3KQorKysgZG9tL0RvY3VtZW50SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OSw3ICsx
OTksNyBAQCBEb2N1bWVudEltcGw6OkRvY3VtZW50SW1wbChET01JbXBsZW1lbnRhCiAjaWYgIUtI
VE1MX05PX1hCTAogICAgICwgbV9iaW5kaW5nTWFuYWdlcihuZXcgWEJMQmluZGluZ01hbmFnZXIo
dGhpcykpCiAjZW5kaWYKLSNpZiBLSFRNTF9YU0xUCisjaWZkZWYgS0hUTUxfWFNMVAogICAgICwg
bV90cmFuc2Zvcm1Tb3VyY2UoMCkKICNlbmRpZgogICAgICwgbV9maW5pc2hlZFBhcnNpbmcodGhp
cywgU0lHTkFMKGZpbmlzaGVkUGFyc2luZygpKSkKQEAgLTQzMiwxMSArNDMyLDExIEBAIFByb2Nl
c3NpbmdJbnN0cnVjdGlvbkltcGwgKkRvY3VtZW50SW1wbDoKIHsKICAgICBpZiAoIWlzVmFsaWRO
YW1lKHRhcmdldCkpIHsKICAgICAgICAgZXhjZXB0aW9uID0gRE9NRXhjZXB0aW9uOjpJTlZBTElE
X0NIQVJBQ1RFUl9FUlI7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICByZXR1cm4gMDsK
ICAgICB9CiAgICAgaWYgKGlzSFRNTERvY3VtZW50KCkpIHsKICAgICAgICAgZXhjZXB0aW9uID0g
RE9NRXhjZXB0aW9uOjpOT1RfU1VQUE9SVEVEX0VSUjsKLSAgICAgICAgcmV0dXJuIE5VTEw7Cisg
ICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICByZXR1cm4gbmV3IFByb2Nlc3NpbmdJbnN0cnVj
dGlvbkltcGwodGhpcywgdGFyZ2V0LCBkYXRhKTsKIH0KQEAgLTEwODgsMjMgKzEwODgsMjEgQEAg
VG9rZW5pemVyICpEb2N1bWVudEltcGw6OmNyZWF0ZVRva2VuaXplcgogICAgIHJldHVybiBuZXdY
TUxUb2tlbml6ZXIodGhpcywgbV92aWV3KTsKIH0KIAotdm9pZCBEb2N1bWVudEltcGw6Om9wZW4o
ICApCit2b2lkIERvY3VtZW50SW1wbDo6b3BlbigpCiB7Ci0gICAgaWYgKHBhcnNpbmcoKSkgcmV0
dXJuOworICAgIGlmIChwYXJzaW5nKCkpCisgICAgICAgIHJldHVybjsKIAogICAgIGltcGxpY2l0
T3BlbigpOwogCi0gICAgaWYgKGZyYW1lKCkpIHsKKyAgICBpZiAoZnJhbWUoKSkKICAgICAgICAg
ZnJhbWUoKS0+ZGlkRXhwbGljaXRPcGVuKCk7Ci0gICAgfQogCiAgICAgLy8gVGhpcyBpcyB3b3Jr
IHRoYXQgd2Ugc2hvdWxkIHByb2JhYmx5IGRvIGluIGNsZWFyKCksIGJ1dCB3ZSBjYW4ndCBoYXZl
IGl0CiAgICAgLy8gaGFwcGVuIHdoZW4gaW1wbGljaXRPcGVuKCkgaXMgY2FsbGVkIHVubGVzcyB3
ZSByZW9yZ2FuaXplIEZyYW1lIGNvZGUuCiAgICAgc2V0VVJMKFFTdHJpbmcoKSk7Ci0gICAgRG9j
dW1lbnRJbXBsICpwYXJlbnQgPSBwYXJlbnREb2N1bWVudCgpOwotICAgIGlmIChwYXJlbnQpIHsK
KyAgICBpZiAoRG9jdW1lbnRJbXBsICpwYXJlbnQgPSBwYXJlbnREb2N1bWVudCgpKQogICAgICAg
ICBzZXRCYXNlVVJMKHBhcmVudC0+YmFzZVVSTCgpKTsKLSAgICB9CiB9CiAKIHZvaWQgRG9jdW1l
bnRJbXBsOjpjYW5jZWxQYXJzaW5nKCkKQEAgLTE4MzIsOSArMTgzMCwxMCBAQCB2b2lkIERvY3Vt
ZW50SW1wbDo6cmVjYWxjU3R5bGVTZWxlY3RvcigpCiAgICAgICAgICAgICBQcm9jZXNzaW5nSW5z
dHJ1Y3Rpb25JbXBsKiBwaSA9IHN0YXRpY19jYXN0PFByb2Nlc3NpbmdJbnN0cnVjdGlvbkltcGwq
PihuKTsKICAgICAgICAgICAgIHNoZWV0ID0gcGktPnNoZWV0KCk7CiAjaWZkZWYgS0hUTUxfWFNM
VAotICAgICAgICAgICAgaWYgKHBpLT5pc1hTTCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRG9u
J3QgYXBwbHkgdHJhbnNmb3JtcyB0byBhbHJlYWR5IHRyYW5zZm9ybWVkIGRvY3VtZW50cyAtLSA8
cmRhcjovL3Byb2JsZW0vNDEzMjgwNj4KLSAgICAgICAgICAgICAgICBpZiAoIXRyYW5zZm9ybVNv
dXJjZURvY3VtZW50KCkpCisgICAgICAgICAgICAvLyBEb24ndCBhcHBseSBYU0wgdHJhbnNmb3Jt
cyB0byBhbHJlYWR5IHRyYW5zZm9ybWVkIGRvY3VtZW50cyAtLSA8cmRhcjovL3Byb2JsZW0vNDEz
MjgwNj4KKyAgICAgICAgICAgIGlmIChwaS0+aXNYU0woKSAmJiAhdHJhbnNmb3JtU291cmNlRG9j
dW1lbnQoKSkgeworICAgICAgICAgICAgICAgIC8vIERvbid0IGFwcGx5IFhTTCB0cmFuc2Zvcm1z
IHVudGlsIGxvYWRpbmcgaXMgZmluaXNoZWQuCisgICAgICAgICAgICAgICAgaWYgKCFwYXJzaW5n
KCkpCiAgICAgICAgICAgICAgICAgICAgIGFwcGx5WFNMVHJhbnNmb3JtKHBpKTsKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkluZGV4OiBkb20veG1sX3Rva2VuaXplci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gZG9tL3htbF90b2tlbml6ZXIuY3BwCShyZXZpc2lvbiAxMjc3NykK
KysrIGRvbS94bWxfdG9rZW5pemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsMTcgKzgzLDEy
IEBAIHB1YmxpYzoKICAgICAvLyBmcm9tIFRva2VuaXplcgogICAgIHZpcnR1YWwgYm9vbCB3cml0
ZShjb25zdCBTZWdtZW50ZWRTdHJpbmcgJnN0ciwgYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIGZp
bmlzaCgpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRPbkhvbGQoYm9vbCBvbkhvbGQpOwogICAgIHZp
cnR1YWwgYm9vbCBpc1dhaXRpbmdGb3JTY3JpcHRzKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lk
IHN0b3BQYXJzaW5nKCk7CiAKICAgICB2b2lkIHNldElzWEhUTUxEb2N1bWVudChib29sIGlzWEhU
TUwpIHsgbV9pc1hIVE1MRG9jdW1lbnQgPSBpc1hIVE1MOyB9CiAgICAgYm9vbCBpc1hIVE1MRG9j
dW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2lzWEhUTUxEb2N1bWVudDsgfQogCi0jaWZkZWYgS0hU
TUxfWFNMVAotICAgIHZvaWQgc2V0VHJhbnNmb3JtU291cmNlKERvY3VtZW50SW1wbCogZG9jKTsK
LSNlbmRpZgotCiAgICAgLy8gZnJvbSBDYWNoZWRPYmplY3RDbGllbnQKICAgICB2aXJ0dWFsIHZv
aWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkT2JqZWN0ICpmaW5pc2hlZE9iaik7CiAKQEAgLTEwOCw2
ICsxMDMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnRlcm5hbFN1YnNldChjb25zdCB4bWxDaGFy
ICpuYW1lLCBjb25zdCB4bWxDaGFyICpleHRlcm5hbElELCBjb25zdCB4bWxDaGFyICpzeXN0ZW1J
RCk7CiAKIHByaXZhdGU6CisgICAgdm9pZCBpbml0aWFsaXplUGFyc2VyQ29udGV4dCgpOwogICAg
IHZvaWQgc2V0Q3VycmVudE5vZGUoTm9kZUltcGwqKTsKIAogICAgIGludCBsaW5lTnVtYmVyKCkg
Y29uc3Q7CkBAIC0xMjMsOCArMTE5LDggQEAgcHJpdmF0ZToKIAogICAgIERvY3VtZW50SW1wbCAq
bV9kb2M7CiAgICAgRnJhbWVWaWV3ICptX3ZpZXc7Ci0KLSAgICBRU3RyaW5nIG1feG1sQ29kZTsK
KyAgICAKKyAgICBRU3RyaW5nIG1fb3JpZ2luYWxTb3VyY2VGb3JUcmFuc2Zvcm07CiAKICAgICB4
bWxQYXJzZXJDdHh0UHRyIG1fY29udGV4dDsKICAgICBOb2RlSW1wbCAqbV9jdXJyZW50Tm9kZTsK
QEAgLTEzMiw2ICsxMjgsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX3Nhd0Vycm9yOwogICAg
IGJvb2wgbV9zYXdYU0xUcmFuc2Zvcm07CisgICAgYm9vbCBtX3Nhd0ZpcnN0RWxlbWVudDsKICAg
ICBib29sIG1faXNYSFRNTERvY3VtZW50OwogICAgIAogICAgIGludCBtX2Vycm9yQ291bnQ7CkBA
IC0yNTAsMTMgKzI0Nyw2IEBAIHN0YXRpYyB4bWxQYXJzZXJDdHh0UHRyIGNyZWF0ZVFTdHJpbmdQ
YXIKICAgICByZXR1cm4gcGFyc2VyOwogfQogCi1zdGF0aWMgaW50IHBhcnNlUVN0cmluZyh4bWxQ
YXJzZXJDdHh0UHRyIHBhcnNlciwgY29uc3QgUVN0cmluZyAmc3RyaW5nKQotewotICAgIHJldHVy
biB4bWxQYXJzZUNodW5rKHBhcnNlciwKLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBj
aGFyICo+KHN0cmluZy51bmljb2RlKCkpLAotICAgICAgICBzdHJpbmcubGVuZ3RoKCkgKiBzaXpl
b2YoUUNoYXIpLCAxKTsKLX0KLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAogWE1MVG9rZW5pemVyOjpYTUxUb2tlbml6ZXIoRG9jdW1lbnRJbXBsICpfZG9jLCBGcmFtZVZp
ZXcgKl92aWV3KQpAQCAtMjY3LDYgKzI1Nyw3IEBAIFhNTFRva2VuaXplcjo6WE1MVG9rZW5pemVy
KERvY3VtZW50SW1wbCAKICAgICAsIG1fY3VycmVudE5vZGVJc1JlZmVyZW5jZWQoZmFsc2UpCiAg
ICAgLCBtX3Nhd0Vycm9yKGZhbHNlKQogICAgICwgbV9zYXdYU0xUcmFuc2Zvcm0oZmFsc2UpCisg
ICAgLCBtX3Nhd0ZpcnN0RWxlbWVudChmYWxzZSkKICAgICAsIG1faXNYSFRNTERvY3VtZW50KGZh
bHNlKQogICAgICwgbV9lcnJvckNvdW50KDApCiAgICAgLCBtX2xhc3RFcnJvckxpbmUoMCkKQEAg
LTI4NSw2ICsyNzYsNyBAQCBYTUxUb2tlbml6ZXI6OlhNTFRva2VuaXplcihEb2N1bWVudEZyYWdt
CiAgICAgLCBtX2N1cnJlbnROb2RlSXNSZWZlcmVuY2VkKGZyYWdtZW50KQogICAgICwgbV9zYXdF
cnJvcihmYWxzZSkKICAgICAsIG1fc2F3WFNMVHJhbnNmb3JtKGZhbHNlKQorICAgICwgbV9zYXdG
aXJzdEVsZW1lbnQoZmFsc2UpCiAgICAgLCBtX2lzWEhUTUxEb2N1bWVudChmYWxzZSkKICAgICAs
IG1fZXJyb3JDb3VudCgwKQogICAgICwgbV9sYXN0RXJyb3JMaW5lKDApCkBAIC0zNDQsMTMgKzMz
NiwxOCBAQCB2b2lkIFhNTFRva2VuaXplcjo6c2V0Q3VycmVudE5vZGUoTm9kZUltCiAKIGJvb2wg
WE1MVG9rZW5pemVyOjp3cml0ZShjb25zdCBTZWdtZW50ZWRTdHJpbmcgJnMsIGJvb2wgLyphcHBl
bmREYXRhKi8gKQogewotICAgIG1feG1sQ29kZSArPSBzLnRvU3RyaW5nKCk7Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQorICAgIGlmIChtX3Nhd1hTTFRyYW5zZm9ybSB8fCAhbV9zYXdGaXJzdEVsZW1l
bnQpCisgICAgICAgIG1fb3JpZ2luYWxTb3VyY2VGb3JUcmFuc2Zvcm0gKz0gcy50b1N0cmluZygp
OwogCi12b2lkIFhNTFRva2VuaXplcjo6c2V0T25Ib2xkKGJvb2wgb25Ib2xkKQotewotICAgIC8v
IFdpbGwgd2UgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyB3aGVuIHdlIGRvIGluY3JlbWVudGFsIFhN
TCBwYXJzaW5nPworICAgIGlmIChtX3BhcnNlclN0b3BwZWQgfHwgbV9zYXdYU0xUcmFuc2Zvcm0p
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fY29udGV4dCkKKyAgICAgICAgaW5p
dGlhbGl6ZVBhcnNlckNvbnRleHQoKTsKKyAgICAKKyAgICBRU3RyaW5nIHBhcnNlU3RyaW5nID0g
cy50b1N0cmluZygpOworICAgIHhtbFBhcnNlQ2h1bmsobV9jb250ZXh0LCByZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIgKj4ocGFyc2VTdHJpbmcudW5pY29kZSgpKSwgcGFyc2VTdHJpbmcubGVu
Z3RoKCkgKiBzaXplb2YoUUNoYXIpLCAwKTsKKyAgICAKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAK
IGlubGluZSBRU3RyaW5nIHRvUVN0cmluZyhjb25zdCB4bWxDaGFyICpzdHIsIHVuc2lnbmVkIGlu
dCBsZW4pCkBAIC00MjMsNiArNDIwLDggQEAgdm9pZCBYTUxUb2tlbml6ZXI6OnN0YXJ0RWxlbWVu
dE5zKGNvbnN0IAogewogICAgIGlmIChtX3BhcnNlclN0b3BwZWQpCiAgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBtX3Nhd0ZpcnN0RWxlbWVudCA9IHRydWU7CiAKICAgICBleGl0VGV4dCgpOwog
CkBAIC03NzgsMTEgKzc3Nyw4IEBAIHN0YXRpYyB2b2lkIGlnbm9yYWJsZVdoaXRlc3BhY2VIYW5k
bGVyKHYKICAgICAvLyBodHRwOi8vYnVnemlsbGEub3BlbmRhcndpbi5vcmcvc2hvd19idWcuY2dp
P2lkPTU3OTIKIH0KIAotdm9pZCBYTUxUb2tlbml6ZXI6OmZpbmlzaCgpCit2b2lkIFhNTFRva2Vu
aXplcjo6aW5pdGlhbGl6ZVBhcnNlckNvbnRleHQoKQogewotICAgIGlmIChtX3htbENvZGUuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KICAgICB4bWxTQVhIYW5kbGVyIHNheDsKICAgICBt
ZW1zZXQoJnNheCwgMCwgc2l6ZW9mKHNheCkpOwogICAgIHNheC5lcnJvciA9IG5vcm1hbEVycm9y
SGFuZGxlcjsKQEAgLTgwNSwxMyArODAxLDMxIEBAIHZvaWQgWE1MVG9rZW5pemVyOjpmaW5pc2go
KQogICAgIG1fcGFyc2VyU3RvcHBlZCA9IGZhbHNlOwogICAgIG1fc2F3RXJyb3IgPSBmYWxzZTsK
ICAgICBtX3Nhd1hTTFRyYW5zZm9ybSA9IGZhbHNlOworICAgIG1fc2F3Rmlyc3RFbGVtZW50ID0g
ZmFsc2U7CiAgICAgbV9jb250ZXh0ID0gY3JlYXRlUVN0cmluZ1BhcnNlcigmc2F4LCB0aGlzKTsK
LSAgICBwYXJzZVFTdHJpbmcobV9jb250ZXh0LCBtX3htbENvZGUpOwotICAgIGlmIChtX2NvbnRl
eHQtPm15RG9jKQotICAgICAgICB4bWxGcmVlRG9jKG1fY29udGV4dC0+bXlEb2MpOwotICAgIHht
bEZyZWVQYXJzZXJDdHh0KG1fY29udGV4dCk7Ci0gICAgbV9jb250ZXh0ID0gMDsKK30KIAordm9p
ZCBYTUxUb2tlbml6ZXI6OmZpbmlzaCgpCit7CisgICAgaWYgKG1fc2F3WFNMVHJhbnNmb3JtKSB7
CisgICAgICAgIG1fZG9jLT5zZXRUcmFuc2Zvcm1Tb3VyY2UoeG1sRG9jUHRyRm9yU3RyaW5nKG1f
b3JpZ2luYWxTb3VyY2VGb3JUcmFuc2Zvcm0sIG1fZG9jLT5VUkwoKSkpOworICAgICAgICAKKyAg
ICAgICAgbV9kb2MtPnNldFBhcnNpbmcoZmFsc2UpOyAvLyBNYWtlIHRoZSBkb2MgdGhpbmsgaXQn
cyBkb25lLCBzbyBpdCB3aWxsIGFwcGx5IHhzbCBzaGVldHMuCisgICAgICAgIG1fZG9jLT51cGRh
dGVTdHlsZVNlbGVjdG9yKCk7CisgICAgICAgIG1fZG9jLT5zZXRQYXJzaW5nKHRydWUpOworICAg
ICAgICBtX3BhcnNlclN0b3BwZWQgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAobV9jb250
ZXh0KSB7CisgICAgICAgIC8vIFRlbGwgbGlieG1sIHdlJ3JlIGRvbmUuCisgICAgICAgIHhtbFBh
cnNlQ2h1bmsobV9jb250ZXh0LCAwLCAwLCAxKTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2Nv
bnRleHQtPm15RG9jKQorICAgICAgICAgICAgeG1sRnJlZURvYyhtX2NvbnRleHQtPm15RG9jKTsK
KyAgICAgICAgeG1sRnJlZVBhcnNlckN0eHQobV9jb250ZXh0KTsKKyAgICAgICAgbV9jb250ZXh0
ID0gMDsKKyAgICB9CisgICAgCiAgICAgaWYgKG1fc2F3RXJyb3IpCiAgICAgICAgIGluc2VydEVy
cm9yTWVzc2FnZUJsb2NrKCk7CiAgICAgZWxzZSB7CkBAIC05ODYsMTIgKzEwMDAsNiBAQCB2b2lk
ICp4bWxEb2NQdHJGb3JTdHJpbmcoY29uc3QgUVN0cmluZyAmCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgWE1MX1BBUlNFX05PQ0RBVEF8WE1MX1BBUlNFX0RUREFUVFJ8
WE1MX1BBUlNFX05PRU5UKTsKICAgICByZXR1cm4gc291cmNlRG9jOwogfQotCi12b2lkIFhNTFRv
a2VuaXplcjo6c2V0VHJhbnNmb3JtU291cmNlKERvY3VtZW50SW1wbCAqZG9jKQotewotICAgIC8v
IFRpbWUgdG8gc3BpbiB1cCBhIG5ldyBwYXJzZSBhbmQgc2F2ZSB0aGUgeG1sRG9jUHRyLgotICAg
IGRvYy0+c2V0VHJhbnNmb3JtU291cmNlKHhtbERvY1B0ckZvclN0cmluZyhtX3htbENvZGUsIGRv
Yy0+VVJMKCkpKTsKLX0KICNlbmRpZgogCiBUb2tlbml6ZXIgKm5ld1hNTFRva2VuaXplcihEb2N1
bWVudEltcGwgKmQsIEZyYW1lVmlldyAqdikKQEAgLTExMTUsNyArMTEyMyw4IEBAIEhhc2hNYXA8
RE9NU3RyaW5nLCBET01TdHJpbmc+IHBhcnNlQXR0cmkKICAgICBzYXguc3RhcnRFbGVtZW50TnMg
PSBhdHRyaWJ1dGVzU3RhcnRFbGVtZW50TnNIYW5kbGVyOwogICAgIHNheC5pbml0aWFsaXplZCA9
IFhNTF9TQVgyX01BR0lDOwogICAgIHhtbFBhcnNlckN0eHRQdHIgcGFyc2VyID0gY3JlYXRlUVN0
cmluZ1BhcnNlcigmc2F4LCAmc3RhdGUpOwotICAgIHBhcnNlUVN0cmluZyhwYXJzZXIsICI8P3ht
bCB2ZXJzaW9uPVwiMS4wXCI/PjxhdHRycyAiICsgc3RyaW5nLnFzdHJpbmcoKSArICIgLz4iKTsK
KyAgICBRU3RyaW5nIHBhcnNlU3RyaW5nID0gIjw/eG1sIHZlcnNpb249XCIxLjBcIj8+PGF0dHJz
ICIgKyBzdHJpbmcucXN0cmluZygpICsgIiAvPiI7CisgICAgeG1sUGFyc2VDaHVuayhwYXJzZXIs
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhciAqPihwYXJzZVN0cmluZy51bmljb2RlKCkpLCBw
YXJzZVN0cmluZy5sZW5ndGgoKSAqIHNpemVvZihRQ2hhciksIDEpOwogICAgIGlmIChwYXJzZXIt
Pm15RG9jKQogICAgICAgICB4bWxGcmVlRG9jKHBhcnNlci0+bXlEb2MpOwogICAgIHhtbEZyZWVQ
YXJzZXJDdHh0KHBhcnNlcik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>6479</attachid>
            <date>2006-02-14 03:13:30 -0800</date>
            <delta_ts>2006-02-14 13:14:24 -0800</delta_ts>
            <desc>Fixes incremental xml parsing in all cases (includes test results and ChangeLog)</desc>
            <filename>incremental.patch</filename>
            <type>text/plain</type>
            <size>30713</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDEyNzkxKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMDYtMDItMTQgIEVyaWMgU2VpZGVsICA8ZXNl
aWRlbEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisg
ICAgICAgIAorICAgICAgICBBZGQgaW5jcmVtZW50YWwgcGFyc2luZyBzdXBwb3J0IHRvIFhNTFRv
a2VuaXplci4KKyAgICAgICAgQWxzbyBhZGRzIHNlcmlhbGl6YXRpb24gb2YgRE9DVFlQRXMgZm9y
IHhtbCBkb2N1bWVudHMuCisgICAgICAgIGh0dHA6Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjA1NworCisgICAgICAgICogZmFzdC9kb20vZG9tLXBhcnNlLXNlcmlh
bGl6ZS1kaXNwbGF5LWV4cGVjdGVkLmNoZWNrc3VtOgorICAgICAgICAqIGZhc3QvZG9tL2RvbS1w
YXJzZS1zZXJpYWxpemUtZGlzcGxheS1leHBlY3RlZC5wbmc6CisgICAgICAgICogZmFzdC9kb20v
ZG9tLXBhcnNlLXNlcmlhbGl6ZS1kaXNwbGF5LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0
L2RvbS9kb20tcGFyc2Utc2VyaWFsaXplLWV4cGVjdGVkLmNoZWNrc3VtOgorICAgICAgICAqIGZh
c3QvZG9tL2RvbS1wYXJzZS1zZXJpYWxpemUtZXhwZWN0ZWQucG5nOgorICAgICAgICAqIGZhc3Qv
ZG9tL2RvbS1wYXJzZS1zZXJpYWxpemUtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvZG9t
L3htbGh0dHByZXF1ZXN0LWdldC1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC94c2wveHNs
dC1wcm9jZXNzZXItZXhwZWN0ZWQudHh0OgorCiAyMDA2LTAxLTMxICBEYXZpZCBIYXJyaXNvbiAg
PGhhcnJpc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGVkIHRlc3QgY2FzZSBhZnRlciBp
bXByb3ZpbmcgdGFibGUgZGVsZXRpb24uCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9kb20t
cGFyc2Utc2VyaWFsaXplLWRpc3BsYXktZXhwZWN0ZWQucG5nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRp
c3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBpbWFn
ZS9wbmcKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL2RvbS1wYXJzZS1zZXJpYWxpemUtZGlz
cGxheS1leHBlY3RlZC5jaGVja3N1bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Rv
bS9kb20tcGFyc2Utc2VyaWFsaXplLWRpc3BsYXktZXhwZWN0ZWQuY2hlY2tzdW0JKHJldmlzaW9u
IDEyNzkxKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vZG9tLXBhcnNlLXNlcmlhbGl6ZS1kaXNw
bGF5LWV4cGVjdGVkLmNoZWNrc3VtCSh3b3JraW5nIGNvcHkpCkBAIC0xICsxIEBACi05MjgyNmM4
ZGI4MmJmM2E3ZWE4ODU5M2FiNDcxZGU4NApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2Ux
Njg0M2IwYTY4NzlkMzBlODMyYjBmNjQxN2Q1M2YzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls
ZQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vZG9tLXBhcnNlLXNlcmlhbGl6ZS1kaXNwbGF5
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9kb20tcGFy
c2Utc2VyaWFsaXplLWRpc3BsYXktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxMjc5MSkKKysrIExh
eW91dFRlc3RzL2Zhc3QvZG9tL2RvbS1wYXJzZS1zZXJpYWxpemUtZGlzcGxheS1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQzLDggQEAgbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4
MDB4NjAwCiAgICAgICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDE3OTogImRvY3Vt
ZW50IG9iamVjdCBzZXJpYWxpemVkIgogICAgICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgw
LDApIHNpemUgMHgwCiAgICAgICAgIFJlbmRlckJsb2NrIHtQUkV9IGF0ICgyNywzMikgc2l6ZSA3
NTZ4NjAKLSAgICAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDUzNng2MAot
ICAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggNDY0OiAiPD94bWwtc3R5bGVzaGVl
dCBocmVmPVwiZGlzcGxheS5jc3NcIiB0eXBlPVwidGV4dC9jc3NcIj8+PGRvYz4iCisgICAgICAg
ICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSA1NzZ4NjAKKyAgICAgICAgICAgIHRl
eHQgcnVuIGF0ICgwLDApIHdpZHRoIDU3NjogIjwhRE9DVFlQRSBkb2M+PD94bWwtc3R5bGVzaGVl
dCBocmVmPVwiZGlzcGxheS5jc3NcIiB0eXBlPVwidGV4dC9jc3NcIj8+PGRvYz4iCiAgICAgICAg
ICAgICB0ZXh0IHJ1biBhdCAoMCwxNSkgd2lkdGggNTM2OiAiICA8Zm9vIHhtbG5zPVwiZm9vYmFy
XCI+T25lPC9mb28+IDx4OmJhciB4bWxuczp4PVwiYmFyZm9vXCI+VHdvPC94OmJhcj4iCiAgICAg
ICAgICAgICB0ZXh0IHJ1biBhdCAoMCwzMCkgd2lkdGggMTg0OiAiICA8ZCBpZD1cImlkM1wiPlRo
cmVlPC9kPiIKICAgICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDQ1KSB3aWR0aCA0ODogIjwvZG9j
PiIKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL2RvbS1wYXJzZS1zZXJpYWxpemUtZXhwZWN0
ZWQucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5
IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBpbWFnZS9wbmcKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
ZG9tL3htbGh0dHByZXF1ZXN0LWdldC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9kb20veG1saHR0cHJlcXVlc3QtZ2V0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MTI3OTEpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS94bWxodHRwcmVxdWVzdC1nZXQtZXhwZWN0
ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMCw3ICsxMCw3IEBAIHJlc3BvbnNlVGV4dAogICA8
ZCBpZD0iaWQzIj5UaHJlZTwvZD4KIDwvZG9jPgogcmVzcG9uc2VYTUwgc2VyaWFsaXplZAotPGRv
Yz4KKzwhRE9DVFlQRSBkb2M+PGRvYz4KICAgPGZvbyB4bWxucz0iZm9vYmFyIj5PbmU8L2Zvbz4g
PHg6YmFyIHhtbG5zOng9ImJhcmZvbyI+VHdvPC94OmJhcj4KICAgPGQgaWQ9ImlkMyI+VGhyZWU8
L2Q+CiA8L2RvYz4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL2RvbS1wYXJzZS1zZXJpYWxp
emUtZXhwZWN0ZWQuY2hlY2tzdW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20v
ZG9tLXBhcnNlLXNlcmlhbGl6ZS1leHBlY3RlZC5jaGVja3N1bQkocmV2aXNpb24gMTI3OTEpCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9kb20tcGFyc2Utc2VyaWFsaXplLWV4cGVjdGVkLmNoZWNr
c3VtCSh3b3JraW5nIGNvcHkpCkBAIC0xICsxIEBACi0yMmZhYTJhODQ5ZGM4ODExMTMyYzkxMDg2
NDNkYWI0OApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzVkYzAzZDdhMDlhZGMwZTFlNjE5
NGEyMzM5MmY4YmNlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9kb20vZG9tLXBhcnNlLXNlcmlhbGl6ZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vZG9tLXBhcnNlLXNlcmlhbGl6ZS1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDEyNzkxKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vZG9tLXBhcnNlLXNlcmlh
bGl6ZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgbGF5ZXIg
YXQgKDAsMCkgc2l6ZSA4MDB4NjAwCiAgICAgICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAs
MCkgc2l6ZSAweDAKICAgICAgICAgUmVuZGVyQmxvY2sge1BSRX0gYXQgKDI3LDMyKSBzaXplIDc1
Nng2MAogICAgICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgNTM2eDYwCi0g
ICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCA0MDogIjxkb2M+IgorICAgICAgICAg
ICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMTUyOiAiPCFET0NUWVBFIGRvYz48ZG9jPiIKICAg
ICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDE1KSB3aWR0aCA1MzY6ICIgIDxmb28geG1sbnM9XCJm
b29iYXJcIj5PbmU8L2Zvbz4gPHg6YmFyIHhtbG5zOng9XCJiYXJmb29cIj5Ud288L3g6YmFyPiIK
ICAgICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDMwKSB3aWR0aCAxODQ6ICIgIDxkIGlkPVwiaWQz
XCI+VGhyZWU8L2Q+IgogICAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsNDUpIHdpZHRoIDUyMDog
IjxmIGlkPVwiJmFtcDsmbHQ7Jmd0O1wiPkZvdXImYW1wOyZsdDsmZ3Q7PC9mPjxlbXB0eS8+PGVt
cHR5Lz48L2RvYz4iCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3hzbC94c2x0LXByb2Nlc3Nlci1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC94c2wveHNsdC1wcm9j
ZXNzZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxMjc5MSkKKysrIExheW91dFRlc3RzL2Zhc3Qv
eHNsL3hzbHQtcHJvY2Vzc2VyLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyAr
NDAsNyBAQAogICAgICAgICAgICAgICBDSEFSQUNURVJTIElOIFhTTFQ6IMOpw6nDqcOpw6nDqcOp
w6nDqcOpw6kgPEJSPjxCUj5TT1VSQ0UgWE1MOiAmbHQ7Jmx0OyZsdDsmYW1wO9GC0LXRgdGCJmFt
cDsmZ3Q7Jmd0OyZndDsKIDwvQk9EWT48L0hUTUw+CiAxLjIgSW1wb3J0IHNhbWUgc3R5bGVzaGVl
dCB0d2ljZToKLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKzwh
RE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iICJo
dHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj48aHRtbCB4
bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+CiA8aGVhZD48dGl0bGU+PC90aXRs
ZT48L2hlYWQ+CiA8Ym9keT4KIDxwcmU+Q0hBUkFDVEVSUyBJTiBYU0xUOiA8PDwm0YLQtdGB0YIm
Pj4+CkluZGV4OiBXZWJDb3JlL2todG1sL2VkaXRpbmcvbWFya3VwLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2todG1sL2VkaXRpbmcvbWFya3VwLmNwcAkocmV2aXNpb24gMTI3ODgpCisrKyBX
ZWJDb3JlL2todG1sL2VkaXRpbmcvbWFya3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiAr
MzksNyBAQAogI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKICNpbmNsdWRlICJodG1sbmFtZXMu
aCIKICNpbmNsdWRlICJEb2N1bWVudEltcGwuaCIKKyNpbmNsdWRlICJEb2N1bWVudFR5cGVJbXBs
LmgiCiAjaW5jbHVkZSAiQ29tbWVudEltcGwuaCIKIAogdXNpbmcgbmFtZXNwYWNlIERPTTo6SFRN
TE5hbWVzOwpAQCAtMTgxLDEyICsxODIsMjAgQEAgc3RhdGljIFFTdHJpbmcgc3RhcnRNYXJrdXAo
Y29uc3QgTm9kZUltcAogICAgICAgICB9CiAgICAgICAgIGNhc2UgTm9kZTo6Q09NTUVOVF9OT0RF
OgogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IENvbW1lbnRJbXBsICo+KG5v
ZGUpLT50b1N0cmluZygpLnFzdHJpbmcoKTsKLSAgICAgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9O
T0RFOgorICAgICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX05PREU6IHsKKyAgICAgICAgICAgIC8v
IERvY3VtZW50cyBkbyBub3Qgbm9ybWFsbHkgY29udGFpbiBhIGRvY1R5cGUgYXMgYSBjaGlsZCBu
b2RlLCBmb3JjZSBpdCB0byBwcmludCBoZXJlIGluc3RlYWQuCisgICAgICAgICAgICBjb25zdCBE
b2N1bWVudFR5cGVJbXBsKiBkb2NUeXBlID0gc3RhdGljX2Nhc3Q8Y29uc3QgRG9jdW1lbnRJbXBs
Kj4obm9kZSktPmRvY3R5cGUoKTsKKyAgICAgICAgICAgIGlmIChkb2NUeXBlKQorICAgICAgICAg
ICAgICAgIHJldHVybiBkb2NUeXBlLT50b1N0cmluZygpLnFzdHJpbmcoKTsKKyAgICAgICAgICAg
IHJldHVybiAiIjsKKyAgICAgICAgfQogICAgICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX0ZSQUdN
RU5UX05PREU6CiAgICAgICAgICAgICByZXR1cm4gIiI7CisgICAgICAgIGNhc2UgTm9kZTo6RE9D
VU1FTlRfVFlQRV9OT0RFOgorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IERv
Y3VtZW50VHlwZUltcGwqPihub2RlKS0+dG9TdHJpbmcoKS5xc3RyaW5nKCk7CiAgICAgICAgIGNh
c2UgTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFOgogICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGNvbnN0IFByb2Nlc3NpbmdJbnN0cnVjdGlvbkltcGwgKj4obm9kZSktPnRv
U3RyaW5nKCkucXN0cmluZygpOwotICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgIGNhc2UgTm9k
ZTo6RUxFTUVOVF9OT0RFOiB7CiAgICAgICAgICAgICBRU3RyaW5nIG1hcmt1cCA9IFFDaGFyKCc8
JykgKyBub2RlLT5ub2RlTmFtZSgpLnFzdHJpbmcoKTsKICAgICAgICAgICAgIGlmICh0eXBlID09
IE5vZGU6OkVMRU1FTlRfTk9ERSkgewogICAgICAgICAgICAgICAgIGNvbnN0IEVsZW1lbnRJbXBs
ICplbCA9IHN0YXRpY19jYXN0PGNvbnN0IEVsZW1lbnRJbXBsICo+KG5vZGUpOwpAQCAtMjM0LDYg
KzI0Myw3IEBAIHN0YXRpYyBRU3RyaW5nIHN0YXJ0TWFya3VwKGNvbnN0IE5vZGVJbXAKICAgICAg
ICAgICAgIHJldHVybiBtYXJrdXA7CiAgICAgICAgIH0KICAgICB9CisgICAgcmV0dXJuICIiOwog
fQogCiBzdGF0aWMgaW5saW5lIGJvb2wgZG9lc0hUTUxGb3JiaWRFbmRUYWcoY29uc3QgTm9kZUlt
cGwgKm5vZGUpCkluZGV4OiBXZWJDb3JlL2todG1sL2h0bWwvaHRtbHRva2VuaXplci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUva2h0bWwvaHRtbC9odG1sdG9rZW5pemVyLmgJKHJldmlzaW9uIDEy
Nzg4KQorKysgV2ViQ29yZS9raHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtOTAsNyArOTAsNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgd3JpdGUoY29u
c3QgU2VnbWVudGVkU3RyaW5nICZzdHIsIGJvb2wgYXBwZW5kRGF0YSk7CiAgICAgdmlydHVhbCB2
b2lkIGZpbmlzaCgpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRPbkhvbGQoYm9vbCBvbkhvbGQpOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRGb3JjZVN5bmNocm9ub3VzKGJvb2wgZm9yY2UpOwogICAgIHZp
cnR1YWwgYm9vbCBpc1dhaXRpbmdGb3JTY3JpcHRzKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lk
IHN0b3BQYXJzaW5nKCk7CkBAIC0zMTYsOCArMzE1LDYgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9l
eGVjdXRpbmdTY3JpcHQ7CiAgICAgUVB0clF1ZXVlPENhY2hlZFNjcmlwdD4gcGVuZGluZ1Njcmlw
dHM7CiAgICAgUmVmUHRyPE5vZGVJbXBsPiBzY3JpcHROb2RlOwotICAgIC8vIHlvdSBjYW4gcGF1
c2UgdGhlIHRva2VuaXplciBpZiB5b3UgbmVlZCB0byBkaXNwbGF5IGEgZGlhbG9nIG9yIHNvbWV0
aGluZwotICAgIGJvb2wgb25Ib2xkOwogCiAgICAgLy8gaWYgd2UgZm91bmQgb25lIGJyb2tlbiBj
b21tZW50LCB0aGVyZSBhcmUgbW9zdCBsaWtlbHkgb3RoZXJzIGFzIHdlbGwKICAgICAvLyBzdG9y
ZSBhIGZsYWcgdG8gZ2V0IHJpZCBvZiB0aGUgTyhuXjIpIGJlaGF2aW91ciBpbiBzdWNoIGEgY2Fz
ZS4KSW5kZXg6IFdlYkNvcmUva2h0bWwvaHRtbC9odG1sdG9rZW5pemVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2todG1sL2h0bWwvaHRtbHRva2VuaXplci5jcHAJKHJldmlzaW9uIDEyNzg4
KQorKysgV2ViQ29yZS9raHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDMsNyArMTQzLDYgQEAgSFRNTFRva2VuaXplcjo6SFRNTFRva2VuaXplcihEb2N1bWVu
dEltcAogICAgIHNjcmlwdENvZGVTaXplID0gc2NyaXB0Q29kZU1heFNpemUgPSBzY3JpcHRDb2Rl
UmVzeW5jID0gMDsKICAgICBwYXJzZXIgPSBuZXcgSFRNTFBhcnNlcihfdmlldywgX2RvYywgaW5j
bHVkZXNDb21tZW50cyk7CiAgICAgbV9leGVjdXRpbmdTY3JpcHQgPSAwOwotICAgIG9uSG9sZCA9
IGZhbHNlOwogICAgIGluY2x1ZGVzQ29tbWVudHNJbkRPTSA9IGluY2x1ZGVzQ29tbWVudHM7CiAg
ICAgCiAgICAgYmVnaW4oKTsKQEAgLTE1OCw3ICsxNTcsNiBAQCBIVE1MVG9rZW5pemVyOjpIVE1M
VG9rZW5pemVyKERvY3VtZW50SW1wCiAgICAgc2NyaXB0Q29kZVNpemUgPSBzY3JpcHRDb2RlTWF4
U2l6ZSA9IHNjcmlwdENvZGVSZXN5bmMgPSAwOwogICAgIHBhcnNlciA9IG5ldyBIVE1MUGFyc2Vy
KGksIF9kb2MsIGluY2x1ZGVzQ29tbWVudHMpOwogICAgIG1fZXhlY3V0aW5nU2NyaXB0ID0gMDsK
LSAgICBvbkhvbGQgPSBmYWxzZTsKICAgICBpbmNsdWRlc0NvbW1lbnRzSW5ET00gPSBpbmNsdWRl
c0NvbW1lbnRzOwogCiAgICAgYmVnaW4oKTsKQEAgLTE2Nyw3ICsxNjUsNiBAQCBIVE1MVG9rZW5p
emVyOjpIVE1MVG9rZW5pemVyKERvY3VtZW50SW1wCiB2b2lkIEhUTUxUb2tlbml6ZXI6OnJlc2V0
KCkKIHsKICAgICBBU1NFUlQobV9leGVjdXRpbmdTY3JpcHQgPT0gMCk7Ci0gICAgQVNTRVJUKG9u
SG9sZCA9PSBmYWxzZSk7CiAKICAgICB3aGlsZSAoIXBlbmRpbmdTY3JpcHRzLmlzRW1wdHkoKSkg
ewogICAgICAgQ2FjaGVkU2NyaXB0ICpjcyA9IHBlbmRpbmdTY3JpcHRzLmRlcXVldWUoKTsKQEAg
LTE5Niw3ICsxOTMsNiBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6OmJlZ2luKCkKIHsKICAgICBtX2V4
ZWN1dGluZ1NjcmlwdCA9IDA7CiAgICAgbV9zdGF0ZS5zZXRMb2FkaW5nRXh0U2NyaXB0KGZhbHNl
KTsKLSAgICBvbkhvbGQgPSBmYWxzZTsKICAgICByZXNldCgpOwogICAgIHNpemUgPSAyNTQ7CiAg
ICAgYnVmZmVyID0gS0hUTUxfQUxMT0NfUUNIQVJfVkVDKCAyNTUgKTsKQEAgLTEzNDksMTEgKzEz
NDUsNiBAQCBib29sIEhUTUxUb2tlbml6ZXI6OndyaXRlKGNvbnN0IFNlZ21lbnRlCiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLQotICAgIGlmIChvbkhvbGQpIHsKLSAg
ICAgICAgc3JjLmFwcGVuZChzdHIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQogICAg
IAogICAgIGlmICghc3JjLmlzRW1wdHkoKSkKICAgICAgICAgc3JjLmFwcGVuZChzdHIpOwpAQCAt
MTYxMSw3ICsxNjAyLDcgQEAgdm9pZCBIVE1MVG9rZW5pemVyOjpmaW5pc2goKQogICAgIC8vIHRo
aXMgaW5kaWNhdGVzIHdlIHdpbGwgbm90IHJlY2VpdmUgYW55IG1vcmUgZGF0YS4uLiBidXQgaWYg
d2UgYXJlIHdhaXRpbmcgb24KICAgICAvLyBhbiBleHRlcm5hbCBzY3JpcHQgdG8gbG9hZCwgd2Ug
Y2FuJ3QgZmluaXNoIHBhcnNpbmcgdW50aWwgdGhhdCBpcyBkb25lCiAgICAgbm9Nb3JlRGF0YSA9
IHRydWU7Ci0gICAgaWYgKCFpbldyaXRlICYmICFtX3N0YXRlLmxvYWRpbmdFeHRTY3JpcHQoKSAm
JiAhbV9leGVjdXRpbmdTY3JpcHQgJiYgIW9uSG9sZCAmJiAhbV90aW1lci5pc0FjdGl2ZSgpKQor
ICAgIGlmICghaW5Xcml0ZSAmJiAhbV9zdGF0ZS5sb2FkaW5nRXh0U2NyaXB0KCkgJiYgIW1fZXhl
Y3V0aW5nU2NyaXB0ICYmICFtX3RpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIGVuZCgpOyAvLyB0
aGlzIGFjdHVhbGx5IGNhdXNlcyB1cyB0byBiZSBkZWxldGVkCiB9CiAKQEAgLTE3ODAsMTEgKzE3
NzEsNiBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6OnNldFNyYyhjb25zdCBTZWdtZW50CiAgICAgc3Jj
LnJlc2V0TGluZUNvdW50KCk7CiB9CiAKLXZvaWQgSFRNTFRva2VuaXplcjo6c2V0T25Ib2xkKGJv
b2wgX29uSG9sZCkKLXsKLSAgICBvbkhvbGQgPSBfb25Ib2xkOwotfQotCiB2b2lkIHBhcnNlSFRN
TERvY3VtZW50RnJhZ21lbnQoY29uc3QgRE9NU3RyaW5nICZzb3VyY2UsIERvY3VtZW50RnJhZ21l
bnRJbXBsICpmcmFnbWVudCkKIHsKICAgICBIVE1MVG9rZW5pemVyIHRvayhmcmFnbWVudC0+Z2V0
RG9jdW1lbnQoKSwgZnJhZ21lbnQpOwpJbmRleDogV2ViQ29yZS9raHRtbC94c2wveHNsX3N0eWxl
c2hlZXRpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2todG1sL3hzbC94c2xfc3R5bGVz
aGVldGltcGwuY3BwCShyZXZpc2lvbiAxMjc4OCkKKysrIFdlYkNvcmUva2h0bWwveHNsL3hzbF9z
dHlsZXNoZWV0aW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDI2ICs0NSwyNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgCiBYU0xTdHlsZVNoZWV0SW1wbDo6WFNMU3R5bGVTaGVldElt
cGwoWFNMSW1wb3J0UnVsZUltcGwgKnBhcmVudFJ1bGUsIERPTVN0cmluZyBocmVmKQogICAgIDog
U3R5bGVTaGVldEltcGwocGFyZW50UnVsZSwgaHJlZikKKyAgICAsIG1fb3duZXJEb2N1bWVudCgw
KQorICAgICwgbV9zdHlsZXNoZWV0RG9jKDApCisgICAgLCBtX2VtYmVkZGVkKGZhbHNlKQorICAg
ICwgbV9wcm9jZXNzZWQoZmFsc2UpIC8vIENoaWxkIHNoZWV0cyBnZXQgbWFya2VkIGFzIHByb2Nl
c3NlZCB3aGVuIHRoZSBsaWJ4c2x0IGVuZ2luZSBoYXMgZmluYWxseSBzZWVuIHRoZW0uCiB7CiAg
ICAgbV9sc3RDaGlsZHJlbiA9IG5ldyBRUHRyTGlzdDxTdHlsZUJhc2VJbXBsPjsKLSAgICBtX293
bmVyRG9jdW1lbnQgPSAwOwotICAgIG1fZW1iZWRkZWQgPSBmYWxzZTsKLSAgICBtX3Byb2Nlc3Nl
ZCA9IGZhbHNlOyAvLyBDaGlsZCBzaGVldHMgZ2V0IG1hcmtlZCBhcyBwcm9jZXNzZWQgd2hlbiB0
aGUgbGlieHNsdCBlbmdpbmUgaGFzIGZpbmFsbHkgc2VlbiB0aGVtLgogfQogCiBYU0xTdHlsZVNo
ZWV0SW1wbDo6WFNMU3R5bGVTaGVldEltcGwoTm9kZUltcGwgKnBhcmVudE5vZGUsIERPTVN0cmlu
ZyBocmVmLCAgYm9vbCBlbWJlZGRlZCkKICAgICA6IFN0eWxlU2hlZXRJbXBsKHBhcmVudE5vZGUs
IGhyZWYpCisgICAgLCBtX293bmVyRG9jdW1lbnQocGFyZW50Tm9kZS0+Z2V0RG9jdW1lbnQoKSkK
KyAgICAsIG1fc3R5bGVzaGVldERvYygwKQorICAgICwgbV9lbWJlZGRlZChlbWJlZGRlZCkKKyAg
ICAsIG1fcHJvY2Vzc2VkKHRydWUpIC8vIFRoZSByb290IHNoZWV0IHN0YXJ0cyBvZmYgcHJvY2Vz
c2VkLgogewogICAgIG1fbHN0Q2hpbGRyZW4gPSBuZXcgUVB0ckxpc3Q8U3R5bGVCYXNlSW1wbD47
Ci0gICAgbV9vd25lckRvY3VtZW50ID0gcGFyZW50Tm9kZS0+Z2V0RG9jdW1lbnQoKTsKLSAgICBt
X2VtYmVkZGVkID0gZW1iZWRkZWQ7Ci0gICAgbV9wcm9jZXNzZWQgPSB0cnVlOyAvLyBUaGUgcm9v
dCBzaGVldCBzdGFydHMgb2ZmIHByb2Nlc3NlZC4KIH0KIAogWFNMU3R5bGVTaGVldEltcGw6On5Y
U0xTdHlsZVNoZWV0SW1wbCgpCiB7Ci0gICAgaWYgKCFtX2VtYmVkZGVkKQotICAgICAgICB4bWxG
cmVlRG9jKG1fc3R5bGVzaGVldERvYyk7CisgICAgeG1sRnJlZURvYyhtX3N0eWxlc2hlZXREb2Mp
OwogfQogCiBib29sIFhTTFN0eWxlU2hlZXRJbXBsOjppc0xvYWRpbmcoKQpAQCAtODksNiArOTAs
MjIgQEAgdm9pZCBYU0xTdHlsZVNoZWV0SW1wbDo6Y2hlY2tMb2FkZWQoKQogICAgICAgICBtX3Bh
cmVudE5vZGUtPnNoZWV0TG9hZGVkKCk7CiB9CiAKK3htbERvY1B0ciBYU0xTdHlsZVNoZWV0SW1w
bDo6ZG9jdW1lbnQoKQoreworICAgIGlmIChtX2VtYmVkZGVkICYmIG93bmVyRG9jdW1lbnQoKSkK
KyAgICAgICAgcmV0dXJuICh4bWxEb2NQdHIpb3duZXJEb2N1bWVudCgpLT50cmFuc2Zvcm1Tb3Vy
Y2UoKTsKKyAgICByZXR1cm4gbV9zdHlsZXNoZWV0RG9jOworfQorCit2b2lkIFhTTFN0eWxlU2hl
ZXRJbXBsOjpzZXREb2N1bWVudCh4bWxEb2NQdHIgbmV3RG9jKQoreworICAgIGlmIChtX3N0eWxl
c2hlZXREb2MgIT0gbmV3RG9jKSB7CisgICAgICAgIHhtbEZyZWVEb2MobV9zdHlsZXNoZWV0RG9j
KTsKKyAgICAgICAgbV9zdHlsZXNoZWV0RG9jID0gMDsKKyAgICB9CisgICAgbV9zdHlsZXNoZWV0
RG9jID0gbmV3RG9jOyAgICAKK30KKwogdm9pZCBYU0xTdHlsZVNoZWV0SW1wbDo6Y2xlYXJEb2N1
bWVudHMoKQogewogICAgIG1fc3R5bGVzaGVldERvYyA9IDA7CkBAIC0xMTQsMjYgKzEzMSwyNyBA
QCBib29sIFhTTFN0eWxlU2hlZXRJbXBsOjpwYXJzZVN0cmluZyhjb25zCiAgICAgY29uc3QgUUNo
YXIgQk9NKDB4RkVGRik7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciBCT01IaWdoQnl0ZSA9ICpy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIgKj4oJkJPTSk7CiAgICAgc2V0TG9h
ZGVyRm9yTGliWE1MQ2FsbGJhY2tzKGRvY0xvYWRlcigpKTsKLSAgICBtX3N0eWxlc2hlZXREb2Mg
PSB4bWxSZWFkTWVtb3J5KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhciAqPihzdHJpbmcudW5p
Y29kZSgpKSwKKyAgICB4bWxEb2NQdHIgbmV3RG9jID0geG1sUmVhZE1lbW9yeShyZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIgKj4oc3RyaW5nLnVuaWNvZGUoKSksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJpbmcubGVuZ3RoKCkgKiBzaXplb2YoUUNoYXIpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9vd25lckRvY3VtZW50LT5VUkwoKS5h
c2NpaSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9NSGlnaEJ5dGUg
PT0gMHhGRiA/ICJVVEYtMTZMRSIgOiAiVVRGLTE2QkUiLCAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFhNTF9QQVJTRV9OT0NEQVRBfFhNTF9QQVJTRV9EVERBVFRSfFhNTF9Q
QVJTRV9OT0VOVCk7CisgICAgc2V0RG9jdW1lbnQobmV3RG9jKTsKICAgICBsb2FkQ2hpbGRTaGVl
dHMoKTsKICAgICBzZXRMb2FkZXJGb3JMaWJYTUxDYWxsYmFja3MoMCk7Ci0gICAgcmV0dXJuIG1f
c3R5bGVzaGVldERvYzsKKyAgICByZXR1cm4gbmV3RG9jOwogfQogCiB2b2lkIFhTTFN0eWxlU2hl
ZXRJbXBsOjpsb2FkQ2hpbGRTaGVldHMoKQogewotICAgIGlmICghbV9zdHlsZXNoZWV0RG9jKQor
ICAgIGlmICghZG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIHhtbE5vZGVQ
dHIgc3R5bGVzaGVldFJvb3QgPSBtX3N0eWxlc2hlZXREb2MtPmNoaWxkcmVuOworICAgIHhtbE5v
ZGVQdHIgc3R5bGVzaGVldFJvb3QgPSBkb2N1bWVudCgpLT5jaGlsZHJlbjsKICAgICBpZiAobV9l
bWJlZGRlZCkgewogICAgICAgICAvLyBXZSBoYXZlIHRvIGxvY2F0ZSAoYnkgSUQpIHRoZSBhcHBy
b3ByaWF0ZSBlbWJlZGRlZCBzdHlsZXNoZWV0IGVsZW1lbnQsIHNvIHRoYXQgd2UgY2FuIHdhbGsg
dGhlIAogICAgICAgICAvLyBpbXBvcnQvaW5jbHVkZSBsaXN0LgotICAgICAgICB4bWxBdHRyUHRy
IGlkTm9kZSA9IHhtbEdldElEKG1fc3R5bGVzaGVldERvYywgKGNvbnN0IHhtbENoYXIqKShocmVm
KCkucXN0cmluZygpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgeG1sQXR0clB0ciBpZE5vZGUg
PSB4bWxHZXRJRChkb2N1bWVudCgpLCAoY29uc3QgeG1sQ2hhciopKGhyZWYoKS5xc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSkpOwogICAgICAgICBpZiAoaWROb2RlID09IE5VTEwpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIHN0eWxlc2hlZXRSb290ID0gaWROb2RlLT5wYXJlbnQ7CkBAIC0x
ODgsMjEgKzIwNiwyMiBAQCB4c2x0U3R5bGVzaGVldFB0ciBYU0xTdHlsZVNoZWV0SW1wbDo6Y29t
CiB7CiAgICAgLy8gRklYTUU6IEhvb2sgdXAgZXJyb3IgcmVwb3J0aW5nIGZvciB0aGUgc3R5bGVz
aGVldCBjb21waWxhdGlvbiBwcm9jZXNzLgogICAgIGlmIChtX2VtYmVkZGVkKQotICAgICAgICBy
ZXR1cm4geHNsdExvYWRTdHlsZXNoZWV0UEkobV9zdHlsZXNoZWV0RG9jKTsKKyAgICAgICAgcmV0
dXJuIHhzbHRMb2FkU3R5bGVzaGVldFBJKGRvY3VtZW50KCkpOwogICAgIGVsc2UKLSAgICAgICAg
cmV0dXJuIHhzbHRQYXJzZVN0eWxlc2hlZXREb2MobV9zdHlsZXNoZWV0RG9jKTsKKyAgICAgICAg
cmV0dXJuIHhzbHRQYXJzZVN0eWxlc2hlZXREb2MoZG9jdW1lbnQoKSk7CiB9CiAKIHhtbERvY1B0
ciBYU0xTdHlsZVNoZWV0SW1wbDo6bG9jYXRlU3R5bGVzaGVldFN1YlJlc291cmNlKHhtbERvY1B0
ciBwYXJlbnREb2MsIGNvbnN0IHhtbENoYXIqIHVyaSkKIHsKLSAgICBib29sIG1hdGNoZWRQYXJl
bnQgPSAocGFyZW50RG9jID09IG1fc3R5bGVzaGVldERvYyk7CisgICAgYm9vbCBtYXRjaGVkUGFy
ZW50ID0gKHBhcmVudERvYyA9PSBkb2N1bWVudCgpKTsKICAgICBmb3IgKFN0eWxlQmFzZUltcGwq
IHJ1bGUgPSBtX2xzdENoaWxkcmVuLT5maXJzdCgpOyBydWxlOyBydWxlID0gbV9sc3RDaGlsZHJl
bi0+bmV4dCgpKSB7CiAgICAgICAgIGlmIChydWxlLT5pc0ltcG9ydFJ1bGUoKSkgewogICAgICAg
ICAgICAgWFNMSW1wb3J0UnVsZUltcGwqIGltcG9ydCA9IHN0YXRpY19jYXN0PFhTTEltcG9ydFJ1
bGVJbXBsKj4ocnVsZSk7CiAgICAgICAgICAgICBYU0xTdHlsZVNoZWV0SW1wbCogY2hpbGQgPSBp
bXBvcnQtPnN0eWxlU2hlZXQoKTsKICAgICAgICAgICAgIGlmICghY2hpbGQpIGNvbnRpbnVlOwog
ICAgICAgICAgICAgaWYgKG1hdGNoZWRQYXJlbnQpIHsKLSAgICAgICAgICAgICAgICBpZiAoY2hp
bGQtPnByb2Nlc3NlZCgpKSBjb250aW51ZTsgLy8gbGlieHNsdCBoYXMgYmVlbiBnaXZlbiB0aGlz
IHNoZWV0IGFscmVhZHkuCisgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5wcm9jZXNzZWQoKSkK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8vIGxpYnhzbHQgaGFzIGJlZW4gZ2l2ZW4g
dGhpcyBzaGVldCBhbHJlYWR5LgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8v
IENoZWNrIHRoZSBVUkkgb2YgdGhlIGNoaWxkIHN0eWxlc2hlZXQgYWdhaW5zdCB0aGUgZG9jIFVS
SS4KICAgICAgICAgICAgICAgICAvLyBJbiBvcmRlciB0byBlbnN1cmUgdGhhdCBsaWJ4bWwgY2Fu
b25pY2FsaXplZCBib3RoIFVSTHMsIHdlIGdldCB0aGUgb3JpZ2luYWwgaHJlZgpAQCAtMjI0LDcg
KzI0Myw3IEBAIHhtbERvY1B0ciBYU0xTdHlsZVNoZWV0SW1wbDo6bG9jYXRlU3R5bGUKICAgICAg
ICAgfQogICAgIH0KICAgICAKLSAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gMDsKIH0KIAog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpJbmRleDogV2ViQ29yZS9r
aHRtbC94c2wveHNsX3N0eWxlc2hlZXRpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9raHRt
bC94c2wveHNsX3N0eWxlc2hlZXRpbXBsLmgJKHJldmlzaW9uIDEyNzg4KQorKysgV2ViQ29yZS9r
aHRtbC94c2wveHNsX3N0eWxlc2hlZXRpbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDggKzYy
LDggQEAgcHVibGljOgogICAgIERvY3VtZW50SW1wbCogb3duZXJEb2N1bWVudCgpIHsgcmV0dXJu
IG1fb3duZXJEb2N1bWVudDsgfQogICAgIHZvaWQgc2V0T3duZXJEb2N1bWVudChEb2N1bWVudElt
cGwqIGRvYykgeyBtX293bmVyRG9jdW1lbnQgPSBkb2M7IH0KIAotICAgIHhtbERvY1B0ciBkb2N1
bWVudCgpIHsgcmV0dXJuIG1fc3R5bGVzaGVldERvYzsgfQotICAgIHZvaWQgc2V0RG9jdW1lbnQo
eG1sRG9jUHRyIGRvYykgeyBtX3N0eWxlc2hlZXREb2MgPSBkb2M7IH0KKyAgICB4bWxEb2NQdHIg
ZG9jdW1lbnQoKTsKKyAgICB2b2lkIHNldERvY3VtZW50KHhtbERvY1B0cik7CiAKICAgICB2b2lk
IGNsZWFyRG9jdW1lbnRzKCk7CiAKSW5kZXg6IFdlYkNvcmUvZG9tL2RvbV94bWxpbXBsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9kb21feG1saW1wbC5jcHAJKHJldmlzaW9uIDEyNzg4
KQorKysgV2ViQ29yZS9kb20vZG9tX3htbGltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDIs
MTEgKzMwMiw2IEBAIGJvb2wgUHJvY2Vzc2luZ0luc3RydWN0aW9uSW1wbDo6Y2hlY2tTdHkKICNl
bmRpZgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSNpZiBLSFRNTF9YU0xUCi0gICAgICAg
IGlmIChtX2lzWFNMKQotICAgICAgICAgICAgZ2V0RG9jdW1lbnQoKS0+dG9rZW5pemVyKCktPnNl
dFRyYW5zZm9ybVNvdXJjZShnZXREb2N1bWVudCgpKTsKLSNlbmRpZgotCiAgICAgICAgIERPTVN0
cmluZyBocmVmID0gYXR0cnMuZ2V0KCJocmVmIik7CiAKICAgICAgICAgaWYgKGhyZWYubGVuZ3Ro
KCkgPiAxKSB7CkBAIC0zMTYsMTAgKzMxMSw3IEBAIGJvb2wgUHJvY2Vzc2luZ0luc3RydWN0aW9u
SW1wbDo6Y2hlY2tTdHkKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIG1ha2UgYSBzeW50
aGV0aWMgWFNMU3R5bGVTaGVldEltcGwgdGhhdCBpcyBlbWJlZGRlZC4gIEl0IG5lZWRzIHRvIGJl
IGFibGUKICAgICAgICAgICAgICAgICAvLyB0byBraWNrIG9mZiBpbXBvcnQvaW5jbHVkZSBsb2Fk
cyB0aGF0IGNhbiBoYW5nIG9mZiBzb21lIHBhcmVudCBzaGVldC4KICAgICAgICAgICAgICAgICBp
ZiAobV9pc1hTTCkgewotICAgICAgICAgICAgICAgICAgICBSZWZQdHI8WFNMU3R5bGVTaGVldElt
cGw+IGxvY2FsU2hlZXQgPSBuZXcgWFNMU3R5bGVTaGVldEltcGwodGhpcywgbV9sb2NhbEhyZWYu
Z2V0KCksIHRydWUpOwotICAgICAgICAgICAgICAgICAgICBsb2NhbFNoZWV0LT5zZXREb2N1bWVu
dCgoeG1sRG9jUHRyKWdldERvY3VtZW50KCktPnRyYW5zZm9ybVNvdXJjZSgpKTsKLSAgICAgICAg
ICAgICAgICAgICAgbG9jYWxTaGVldC0+bG9hZENoaWxkU2hlZXRzKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIG1fc2hlZXQgPSBsb2NhbFNoZWV0LnJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9zaGVldCA9IG5ldyBYU0xTdHlsZVNoZWV0SW1wbCh0aGlzLCBtX2xvY2FsSHJlZi5nZXQo
KSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIG1fbG9hZGluZyA9IGZhbHNlOwogICAgICAg
ICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHJldHVybiAh
bV9pc1hTTDsKQEAgLTMzMiw3ICszMjQsOCBAQCBib29sIFByb2Nlc3NpbmdJbnN0cnVjdGlvbklt
cGw6OmNoZWNrU3R5CiAgICAgICAgICAgICAgICAgaWYgKGdldERvY3VtZW50KCktPmZyYW1lKCkp
IHsKICAgICAgICAgICAgICAgICAgICAgbV9sb2FkaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICAgICAgZ2V0RG9jdW1lbnQoKS0+YWRkUGVuZGluZ1NoZWV0KCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChtX2NhY2hlZFNoZWV0KSBtX2NhY2hlZFNoZWV0LT5kZXJlZih0aGlzKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG1fY2FjaGVkU2hlZXQpCisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2NhY2hlZFNoZWV0LT5kZXJlZih0aGlzKTsKICNpZiBLSFRNTF9YU0xUCiAgICAgICAgICAg
ICAgICAgICAgIGlmIChtX2lzWFNMKQogICAgICAgICAgICAgICAgICAgICAgICAgbV9jYWNoZWRT
aGVldCA9IGdldERvY3VtZW50KCktPmRvY0xvYWRlcigpLT5yZXF1ZXN0WFNMU3R5bGVTaGVldChn
ZXREb2N1bWVudCgpLT5jb21wbGV0ZVVSTChocmVmKSk7CkluZGV4OiBXZWJDb3JlL2RvbS94bWxf
dG9rZW5pemVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20veG1sX3Rva2VuaXplci5oCShy
ZXZpc2lvbiAxMjc4OCkKKysrIFdlYkNvcmUvZG9tL3htbF90b2tlbml6ZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNDgsNyArNDgsNiBAQCBwdWJsaWM6CiAgICAgLy8gZG9jdW1lbnQud3JpdGUoKSBh
bHdheXMgdXNlcyBmYWxzZSwgd2hpbGUgdGhlIGxvYWRlciB1c2VzIHRydWUuCiAgICAgdmlydHVh
bCBib29sIHdyaXRlKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYsIGJvb2wgYXBwZW5kRGF0YSkgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBmaW5pc2goKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldE9u
SG9sZChib29sIG9uSG9sZCkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc1dhaXRpbmdGb3JTY3Jp
cHRzKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzdG9wUGFyc2luZygpIHsgbV9wYXJz
ZXJTdG9wcGVkID0gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBwcm9jZXNzaW5nRGF0YSgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC01OCwxMSArNTcsNiBAQCBwcm90ZWN0ZWQ6CiAgICAg
Ly8gaXQgc3RvcHMgcmVjZWl2aW5nIGRhdGEuIFdlIHVzZSBtX3BhcnNlclN0b3BwZWQgdG8gc3Rv
cCB0aGUgdG9rZW5pemVyCiAgICAgLy8gZXZlbiB3aGVuIGl0IGhhcyBidWZmZXJlZCBkYXRhLgog
ICAgIGJvb2wgbV9wYXJzZXJTdG9wcGVkOwotICAgIAotI2lmIEtIVE1MX1hTTFQKLXB1YmxpYzoK
LSAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtU291cmNlKERvY3VtZW50SW1wbCopIHt9Ci0j
ZW5kaWYKIAogc2lnbmFsczoKICAgICB2b2lkIGZpbmlzaGVkUGFyc2luZygpOwpJbmRleDogV2Vi
Q29yZS9kb20vRG9jdW1lbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1
bWVudEltcGwuY3BwCShyZXZpc2lvbiAxMjc4OCkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50SW1w
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OSw3ICsxOTksNyBAQCBEb2N1bWVudEltcGw6OkRv
Y3VtZW50SW1wbChET01JbXBsZW1lbnRhCiAjaWYgIUtIVE1MX05PX1hCTAogICAgICwgbV9iaW5k
aW5nTWFuYWdlcihuZXcgWEJMQmluZGluZ01hbmFnZXIodGhpcykpCiAjZW5kaWYKLSNpZiBLSFRN
TF9YU0xUCisjaWZkZWYgS0hUTUxfWFNMVAogICAgICwgbV90cmFuc2Zvcm1Tb3VyY2UoMCkKICNl
bmRpZgogICAgICwgbV9maW5pc2hlZFBhcnNpbmcodGhpcywgU0lHTkFMKGZpbmlzaGVkUGFyc2lu
ZygpKSkKQEAgLTQzMiwxMSArNDMyLDExIEBAIFByb2Nlc3NpbmdJbnN0cnVjdGlvbkltcGwgKkRv
Y3VtZW50SW1wbDoKIHsKICAgICBpZiAoIWlzVmFsaWROYW1lKHRhcmdldCkpIHsKICAgICAgICAg
ZXhjZXB0aW9uID0gRE9NRXhjZXB0aW9uOjpJTlZBTElEX0NIQVJBQ1RFUl9FUlI7Ci0gICAgICAg
IHJldHVybiBOVUxMOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgaWYgKGlzSFRNTERv
Y3VtZW50KCkpIHsKICAgICAgICAgZXhjZXB0aW9uID0gRE9NRXhjZXB0aW9uOjpOT1RfU1VQUE9S
VEVEX0VSUjsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiAwOwogICAgIH0K
ICAgICByZXR1cm4gbmV3IFByb2Nlc3NpbmdJbnN0cnVjdGlvbkltcGwodGhpcywgdGFyZ2V0LCBk
YXRhKTsKIH0KQEAgLTEwODgsMjMgKzEwODgsMjEgQEAgVG9rZW5pemVyICpEb2N1bWVudEltcGw6
OmNyZWF0ZVRva2VuaXplcgogICAgIHJldHVybiBuZXdYTUxUb2tlbml6ZXIodGhpcywgbV92aWV3
KTsKIH0KIAotdm9pZCBEb2N1bWVudEltcGw6Om9wZW4oICApCit2b2lkIERvY3VtZW50SW1wbDo6
b3BlbigpCiB7Ci0gICAgaWYgKHBhcnNpbmcoKSkgcmV0dXJuOworICAgIGlmIChwYXJzaW5nKCkp
CisgICAgICAgIHJldHVybjsKIAogICAgIGltcGxpY2l0T3BlbigpOwogCi0gICAgaWYgKGZyYW1l
KCkpIHsKKyAgICBpZiAoZnJhbWUoKSkKICAgICAgICAgZnJhbWUoKS0+ZGlkRXhwbGljaXRPcGVu
KCk7Ci0gICAgfQogCiAgICAgLy8gVGhpcyBpcyB3b3JrIHRoYXQgd2Ugc2hvdWxkIHByb2JhYmx5
IGRvIGluIGNsZWFyKCksIGJ1dCB3ZSBjYW4ndCBoYXZlIGl0CiAgICAgLy8gaGFwcGVuIHdoZW4g
aW1wbGljaXRPcGVuKCkgaXMgY2FsbGVkIHVubGVzcyB3ZSByZW9yZ2FuaXplIEZyYW1lIGNvZGUu
CiAgICAgc2V0VVJMKFFTdHJpbmcoKSk7Ci0gICAgRG9jdW1lbnRJbXBsICpwYXJlbnQgPSBwYXJl
bnREb2N1bWVudCgpOwotICAgIGlmIChwYXJlbnQpIHsKKyAgICBpZiAoRG9jdW1lbnRJbXBsICpw
YXJlbnQgPSBwYXJlbnREb2N1bWVudCgpKQogICAgICAgICBzZXRCYXNlVVJMKHBhcmVudC0+YmFz
ZVVSTCgpKTsKLSAgICB9CiB9CiAKIHZvaWQgRG9jdW1lbnRJbXBsOjpjYW5jZWxQYXJzaW5nKCkK
QEAgLTE4MzIsOSArMTgzMCwxMCBAQCB2b2lkIERvY3VtZW50SW1wbDo6cmVjYWxjU3R5bGVTZWxl
Y3RvcigpCiAgICAgICAgICAgICBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25JbXBsKiBwaSA9IHN0YXRp
Y19jYXN0PFByb2Nlc3NpbmdJbnN0cnVjdGlvbkltcGwqPihuKTsKICAgICAgICAgICAgIHNoZWV0
ID0gcGktPnNoZWV0KCk7CiAjaWZkZWYgS0hUTUxfWFNMVAotICAgICAgICAgICAgaWYgKHBpLT5p
c1hTTCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRG9uJ3QgYXBwbHkgdHJhbnNmb3JtcyB0byBh
bHJlYWR5IHRyYW5zZm9ybWVkIGRvY3VtZW50cyAtLSA8cmRhcjovL3Byb2JsZW0vNDEzMjgwNj4K
LSAgICAgICAgICAgICAgICBpZiAoIXRyYW5zZm9ybVNvdXJjZURvY3VtZW50KCkpCisgICAgICAg
ICAgICAvLyBEb24ndCBhcHBseSBYU0wgdHJhbnNmb3JtcyB0byBhbHJlYWR5IHRyYW5zZm9ybWVk
IGRvY3VtZW50cyAtLSA8cmRhcjovL3Byb2JsZW0vNDEzMjgwNj4KKyAgICAgICAgICAgIGlmIChw
aS0+aXNYU0woKSAmJiAhdHJhbnNmb3JtU291cmNlRG9jdW1lbnQoKSkgeworICAgICAgICAgICAg
ICAgIC8vIERvbid0IGFwcGx5IFhTTCB0cmFuc2Zvcm1zIHVudGlsIGxvYWRpbmcgaXMgZmluaXNo
ZWQuCisgICAgICAgICAgICAgICAgaWYgKCFwYXJzaW5nKCkpCiAgICAgICAgICAgICAgICAgICAg
IGFwcGx5WFNMVHJhbnNmb3JtKHBpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9CkluZGV4OiBXZWJDb3JlL2RvbS94bWxfdG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS94bWxfdG9rZW5pemVyLmNwcAkocmV2aXNpb24gMTI3ODgpCisrKyBXZWJD
b3JlL2RvbS94bWxfdG9rZW5pemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsMTcgKzgzLDEy
IEBAIHB1YmxpYzoKICAgICAvLyBmcm9tIFRva2VuaXplcgogICAgIHZpcnR1YWwgYm9vbCB3cml0
ZShjb25zdCBTZWdtZW50ZWRTdHJpbmcgJnN0ciwgYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIGZp
bmlzaCgpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRPbkhvbGQoYm9vbCBvbkhvbGQpOwogICAgIHZp
cnR1YWwgYm9vbCBpc1dhaXRpbmdGb3JTY3JpcHRzKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lk
IHN0b3BQYXJzaW5nKCk7CiAKICAgICB2b2lkIHNldElzWEhUTUxEb2N1bWVudChib29sIGlzWEhU
TUwpIHsgbV9pc1hIVE1MRG9jdW1lbnQgPSBpc1hIVE1MOyB9CiAgICAgYm9vbCBpc1hIVE1MRG9j
dW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2lzWEhUTUxEb2N1bWVudDsgfQogCi0jaWZkZWYgS0hU
TUxfWFNMVAotICAgIHZvaWQgc2V0VHJhbnNmb3JtU291cmNlKERvY3VtZW50SW1wbCogZG9jKTsK
LSNlbmRpZgotCiAgICAgLy8gZnJvbSBDYWNoZWRPYmplY3RDbGllbnQKICAgICB2aXJ0dWFsIHZv
aWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkT2JqZWN0ICpmaW5pc2hlZE9iaik7CiAKQEAgLTEwOCw2
ICsxMDMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnRlcm5hbFN1YnNldChjb25zdCB4bWxDaGFy
ICpuYW1lLCBjb25zdCB4bWxDaGFyICpleHRlcm5hbElELCBjb25zdCB4bWxDaGFyICpzeXN0ZW1J
RCk7CiAKIHByaXZhdGU6CisgICAgdm9pZCBpbml0aWFsaXplUGFyc2VyQ29udGV4dCgpOwogICAg
IHZvaWQgc2V0Q3VycmVudE5vZGUoTm9kZUltcGwqKTsKIAogICAgIGludCBsaW5lTnVtYmVyKCkg
Y29uc3Q7CkBAIC0xMjMsOCArMTE5LDggQEAgcHJpdmF0ZToKIAogICAgIERvY3VtZW50SW1wbCAq
bV9kb2M7CiAgICAgRnJhbWVWaWV3ICptX3ZpZXc7Ci0KLSAgICBRU3RyaW5nIG1feG1sQ29kZTsK
KyAgICAKKyAgICBRU3RyaW5nIG1fb3JpZ2luYWxTb3VyY2VGb3JUcmFuc2Zvcm07CiAKICAgICB4
bWxQYXJzZXJDdHh0UHRyIG1fY29udGV4dDsKICAgICBOb2RlSW1wbCAqbV9jdXJyZW50Tm9kZTsK
QEAgLTEzMiw2ICsxMjgsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX3Nhd0Vycm9yOwogICAg
IGJvb2wgbV9zYXdYU0xUcmFuc2Zvcm07CisgICAgYm9vbCBtX3Nhd0ZpcnN0RWxlbWVudDsKICAg
ICBib29sIG1faXNYSFRNTERvY3VtZW50OwogICAgIAogICAgIGludCBtX2Vycm9yQ291bnQ7CkBA
IC0yNTAsMTMgKzI0Nyw2IEBAIHN0YXRpYyB4bWxQYXJzZXJDdHh0UHRyIGNyZWF0ZVFTdHJpbmdQ
YXIKICAgICByZXR1cm4gcGFyc2VyOwogfQogCi1zdGF0aWMgaW50IHBhcnNlUVN0cmluZyh4bWxQ
YXJzZXJDdHh0UHRyIHBhcnNlciwgY29uc3QgUVN0cmluZyAmc3RyaW5nKQotewotICAgIHJldHVy
biB4bWxQYXJzZUNodW5rKHBhcnNlciwKLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBj
aGFyICo+KHN0cmluZy51bmljb2RlKCkpLAotICAgICAgICBzdHJpbmcubGVuZ3RoKCkgKiBzaXpl
b2YoUUNoYXIpLCAxKTsKLX0KLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAogWE1MVG9rZW5pemVyOjpYTUxUb2tlbml6ZXIoRG9jdW1lbnRJbXBsICpfZG9jLCBGcmFtZVZp
ZXcgKl92aWV3KQpAQCAtMjY3LDYgKzI1Nyw3IEBAIFhNTFRva2VuaXplcjo6WE1MVG9rZW5pemVy
KERvY3VtZW50SW1wbCAKICAgICAsIG1fY3VycmVudE5vZGVJc1JlZmVyZW5jZWQoZmFsc2UpCiAg
ICAgLCBtX3Nhd0Vycm9yKGZhbHNlKQogICAgICwgbV9zYXdYU0xUcmFuc2Zvcm0oZmFsc2UpCisg
ICAgLCBtX3Nhd0ZpcnN0RWxlbWVudChmYWxzZSkKICAgICAsIG1faXNYSFRNTERvY3VtZW50KGZh
bHNlKQogICAgICwgbV9lcnJvckNvdW50KDApCiAgICAgLCBtX2xhc3RFcnJvckxpbmUoMCkKQEAg
LTI4NSw2ICsyNzYsNyBAQCBYTUxUb2tlbml6ZXI6OlhNTFRva2VuaXplcihEb2N1bWVudEZyYWdt
CiAgICAgLCBtX2N1cnJlbnROb2RlSXNSZWZlcmVuY2VkKGZyYWdtZW50KQogICAgICwgbV9zYXdF
cnJvcihmYWxzZSkKICAgICAsIG1fc2F3WFNMVHJhbnNmb3JtKGZhbHNlKQorICAgICwgbV9zYXdG
aXJzdEVsZW1lbnQoZmFsc2UpCiAgICAgLCBtX2lzWEhUTUxEb2N1bWVudChmYWxzZSkKICAgICAs
IG1fZXJyb3JDb3VudCgwKQogICAgICwgbV9sYXN0RXJyb3JMaW5lKDApCkBAIC0zNDQsMTMgKzMz
NiwyNiBAQCB2b2lkIFhNTFRva2VuaXplcjo6c2V0Q3VycmVudE5vZGUoTm9kZUltCiAKIGJvb2wg
WE1MVG9rZW5pemVyOjp3cml0ZShjb25zdCBTZWdtZW50ZWRTdHJpbmcgJnMsIGJvb2wgLyphcHBl
bmREYXRhKi8gKQogewotICAgIG1feG1sQ29kZSArPSBzLnRvU3RyaW5nKCk7Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQorICAgIFFTdHJpbmcgcGFyc2VTdHJpbmcgPSBzLnRvU3RyaW5nKCk7CisgICAg
aWYgKG1fc2F3WFNMVHJhbnNmb3JtIHx8ICFtX3Nhd0ZpcnN0RWxlbWVudCkKKyAgICAgICAgbV9v
cmlnaW5hbFNvdXJjZUZvclRyYW5zZm9ybSArPSBwYXJzZVN0cmluZzsKIAotdm9pZCBYTUxUb2tl
bml6ZXI6OnNldE9uSG9sZChib29sIG9uSG9sZCkKLXsKLSAgICAvLyBXaWxsIHdlIG5lZWQgdG8g
aW1wbGVtZW50IHRoaXMgd2hlbiB3ZSBkbyBpbmNyZW1lbnRhbCBYTUwgcGFyc2luZz8KKyAgICBp
ZiAobV9wYXJzZXJTdG9wcGVkIHx8IG1fc2F3WFNMVHJhbnNmb3JtKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKCFtX2NvbnRleHQpCisgICAgICAgIGluaXRpYWxpemVQYXJzZXJDb250
ZXh0KCk7CisgICAgCisgICAgLy8gSGFjayBhcm91bmQgbGlieG1sMidzIGxhY2sgb2YgZW5jb2Rp
bmcgb3ZlcmlkZSBzdXBwb3J0IGJ5IG1hbnVhbGx5CisgICAgLy8gcmVzZXR0aW5nIHRoZSBlbmNv
ZGluZyB0byBVVEYtMTYgYmVmb3JlIGV2ZXJ5IGNodW5rLiAgT3RoZXJ3aXNlIGxpYnhtbAorICAg
IC8vIHdpbGwgZGV0ZWN0IDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IjxlbmNvZGluZyBu
YW1lPiI/PiBibG9ja3MgCisgICAgLy8gYW5kIHN3aXRjaCBlbmNvZGluZ3MsIGNhdXNpbmcgdGhl
IHBhcnNlIHRvIGZhaWwuCisgICAgY29uc3QgUUNoYXIgQk9NKDB4RkVGRik7CisgICAgY29uc3Qg
dW5zaWduZWQgY2hhciBCT01IaWdoQnl0ZSA9ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2ln
bmVkIGNoYXIgKj4oJkJPTSk7CisgICAgeG1sU3dpdGNoRW5jb2RpbmcobV9jb250ZXh0LCBCT01I
aWdoQnl0ZSA9PSAweEZGID8gWE1MX0NIQVJfRU5DT0RJTkdfVVRGMTZMRSA6IFhNTF9DSEFSX0VO
Q09ESU5HX1VURjE2QkUpOworICAgIAorICAgIHhtbFBhcnNlQ2h1bmsobV9jb250ZXh0LCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IGNoYXIgKj4ocGFyc2VTdHJpbmcudW5pY29kZSgpKSwgc2l6ZW9m
KFFDaGFyKSAqIHBhcnNlU3RyaW5nLmxlbmd0aCgpLCAwKTsKKyAgICAKKyAgICByZXR1cm4gZmFs
c2U7CiB9CiAKIGlubGluZSBRU3RyaW5nIHRvUVN0cmluZyhjb25zdCB4bWxDaGFyICpzdHIsIHVu
c2lnbmVkIGludCBsZW4pCkBAIC00MjMsNiArNDI4LDggQEAgdm9pZCBYTUxUb2tlbml6ZXI6OnN0
YXJ0RWxlbWVudE5zKGNvbnN0IAogewogICAgIGlmIChtX3BhcnNlclN0b3BwZWQpCiAgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBtX3Nhd0ZpcnN0RWxlbWVudCA9IHRydWU7CiAKICAgICBleGl0
VGV4dCgpOwogCkBAIC01NDcsNyArNTU0LDcgQEAgdm9pZCBYTUxUb2tlbml6ZXI6OmVycm9yKEVy
cm9yVHlwZSB0eXBlLAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBm
YXRhbDoKICAgICAgICAgICAgICAgICAvLyBmYWxsIHRocm91Z2gKLSAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBjYXNlIG5vbkZhdGFsOgogICAgICAgICAgICAgICAgIGZvcm1hdCA9
IFFTdHJpbmcoImVycm9yIG9uIGxpbmUgJTIgYXQgY29sdW1uICUzOiAlMSIpOwogICAgICAgICB9
CiAKQEAgLTc3OCwxMSArNzg1LDggQEAgc3RhdGljIHZvaWQgaWdub3JhYmxlV2hpdGVzcGFjZUhh
bmRsZXIodgogICAgIC8vIGh0dHA6Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTc5MgogfQogCi12b2lkIFhNTFRva2VuaXplcjo6ZmluaXNoKCkKK3ZvaWQgWE1MVG9r
ZW5pemVyOjppbml0aWFsaXplUGFyc2VyQ29udGV4dCgpCiB7Ci0gICAgaWYgKG1feG1sQ29kZS5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIHhtbFNBWEhhbmRsZXIgc2F4OwogICAg
IG1lbXNldCgmc2F4LCAwLCBzaXplb2Yoc2F4KSk7CiAgICAgc2F4LmVycm9yID0gbm9ybWFsRXJy
b3JIYW5kbGVyOwpAQCAtODA1LDEzICs4MDksMzEgQEAgdm9pZCBYTUxUb2tlbml6ZXI6OmZpbmlz
aCgpCiAgICAgbV9wYXJzZXJTdG9wcGVkID0gZmFsc2U7CiAgICAgbV9zYXdFcnJvciA9IGZhbHNl
OwogICAgIG1fc2F3WFNMVHJhbnNmb3JtID0gZmFsc2U7CisgICAgbV9zYXdGaXJzdEVsZW1lbnQg
PSBmYWxzZTsKICAgICBtX2NvbnRleHQgPSBjcmVhdGVRU3RyaW5nUGFyc2VyKCZzYXgsIHRoaXMp
OwotICAgIHBhcnNlUVN0cmluZyhtX2NvbnRleHQsIG1feG1sQ29kZSk7Ci0gICAgaWYgKG1fY29u
dGV4dC0+bXlEb2MpCi0gICAgICAgIHhtbEZyZWVEb2MobV9jb250ZXh0LT5teURvYyk7Ci0gICAg
eG1sRnJlZVBhcnNlckN0eHQobV9jb250ZXh0KTsKLSAgICBtX2NvbnRleHQgPSAwOworfQogCit2
b2lkIFhNTFRva2VuaXplcjo6ZmluaXNoKCkKK3sKKyAgICBpZiAobV9zYXdYU0xUcmFuc2Zvcm0p
IHsKKyAgICAgICAgbV9kb2MtPnNldFRyYW5zZm9ybVNvdXJjZSh4bWxEb2NQdHJGb3JTdHJpbmco
bV9vcmlnaW5hbFNvdXJjZUZvclRyYW5zZm9ybSwgbV9kb2MtPlVSTCgpKSk7CisgICAgICAgIAor
ICAgICAgICBtX2RvYy0+c2V0UGFyc2luZyhmYWxzZSk7IC8vIE1ha2UgdGhlIGRvYyB0aGluayBp
dCdzIGRvbmUsIHNvIGl0IHdpbGwgYXBwbHkgeHNsIHNoZWV0cy4KKyAgICAgICAgbV9kb2MtPnVw
ZGF0ZVN0eWxlU2VsZWN0b3IoKTsKKyAgICAgICAgbV9kb2MtPnNldFBhcnNpbmcodHJ1ZSk7Cisg
ICAgICAgIG1fcGFyc2VyU3RvcHBlZCA9IHRydWU7CisgICAgfQorICAgIAorICAgIGlmIChtX2Nv
bnRleHQpIHsKKyAgICAgICAgLy8gVGVsbCBsaWJ4bWwgd2UncmUgZG9uZS4KKyAgICAgICAgeG1s
UGFyc2VDaHVuayhtX2NvbnRleHQsIDAsIDAsIDEpOworICAgICAgICAKKyAgICAgICAgaWYgKG1f
Y29udGV4dC0+bXlEb2MpCisgICAgICAgICAgICB4bWxGcmVlRG9jKG1fY29udGV4dC0+bXlEb2Mp
OworICAgICAgICB4bWxGcmVlUGFyc2VyQ3R4dChtX2NvbnRleHQpOworICAgICAgICBtX2NvbnRl
eHQgPSAwOworICAgIH0KKyAgICAKICAgICBpZiAobV9zYXdFcnJvcikKICAgICAgICAgaW5zZXJ0
RXJyb3JNZXNzYWdlQmxvY2soKTsKICAgICBlbHNlIHsKQEAgLTk4NiwxMiArMTAwOCw2IEBAIHZv
aWQgKnhtbERvY1B0ckZvclN0cmluZyhjb25zdCBRU3RyaW5nICYKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBYTUxfUEFSU0VfTk9DREFUQXxYTUxfUEFSU0VfRFREQVRU
UnxYTUxfUEFSU0VfTk9FTlQpOwogICAgIHJldHVybiBzb3VyY2VEb2M7CiB9Ci0KLXZvaWQgWE1M
VG9rZW5pemVyOjpzZXRUcmFuc2Zvcm1Tb3VyY2UoRG9jdW1lbnRJbXBsICpkb2MpCi17Ci0gICAg
Ly8gVGltZSB0byBzcGluIHVwIGEgbmV3IHBhcnNlIGFuZCBzYXZlIHRoZSB4bWxEb2NQdHIuCi0g
ICAgZG9jLT5zZXRUcmFuc2Zvcm1Tb3VyY2UoeG1sRG9jUHRyRm9yU3RyaW5nKG1feG1sQ29kZSwg
ZG9jLT5VUkwoKSkpOwotfQogI2VuZGlmCiAKIFRva2VuaXplciAqbmV3WE1MVG9rZW5pemVyKERv
Y3VtZW50SW1wbCAqZCwgRnJhbWVWaWV3ICp2KQpAQCAtMTExNSw3ICsxMTMxLDggQEAgSGFzaE1h
cDxET01TdHJpbmcsIERPTVN0cmluZz4gcGFyc2VBdHRyaQogICAgIHNheC5zdGFydEVsZW1lbnRO
cyA9IGF0dHJpYnV0ZXNTdGFydEVsZW1lbnROc0hhbmRsZXI7CiAgICAgc2F4LmluaXRpYWxpemVk
ID0gWE1MX1NBWDJfTUFHSUM7CiAgICAgeG1sUGFyc2VyQ3R4dFB0ciBwYXJzZXIgPSBjcmVhdGVR
U3RyaW5nUGFyc2VyKCZzYXgsICZzdGF0ZSk7Ci0gICAgcGFyc2VRU3RyaW5nKHBhcnNlciwgIjw/
eG1sIHZlcnNpb249XCIxLjBcIj8+PGF0dHJzICIgKyBzdHJpbmcucXN0cmluZygpICsgIiAvPiIp
OworICAgIFFTdHJpbmcgcGFyc2VTdHJpbmcgPSAiPD94bWwgdmVyc2lvbj1cIjEuMFwiPz48YXR0
cnMgIiArIHN0cmluZy5xc3RyaW5nKCkgKyAiIC8+IjsKKyAgICB4bWxQYXJzZUNodW5rKHBhcnNl
ciwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyICo+KHBhcnNlU3RyaW5nLnVuaWNvZGUoKSks
IHBhcnNlU3RyaW5nLmxlbmd0aCgpICogc2l6ZW9mKFFDaGFyKSwgMSk7CiAgICAgaWYgKHBhcnNl
ci0+bXlEb2MpCiAgICAgICAgIHhtbEZyZWVEb2MocGFyc2VyLT5teURvYyk7CiAgICAgeG1sRnJl
ZVBhcnNlckN0eHQocGFyc2VyKTsKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjc5MSkKKysrIFdlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTEgQEAKKzIwMDYtMDItMTQgIEVyaWMgU2Vp
ZGVsICA8ZXNlaWRlbEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIGluY3JlbWVudGFsIHBhcnNpbmcgc3VwcG9ydCB0byBYTUxU
b2tlbml6ZXIuCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBkb2VzIGEgZmV3IG90aGVyIGxpdHRs
ZSB0aGluZ3M6CisgICAgICAgIC0gcmVtb3ZlcyAodW51c2VkKSBvbkhvbGQgc3VwcG9ydCBmcm9t
IFRva2VuaXplcgorICAgICAgICAtIGFkZHMgc2VyaWFsaXphdGlvbiBvZiBET0NUWVBFcyBmb3Ig
eG1sIGRvY3VtZW50cworICAgICAgICAtIGZpeGVzIHhzbHQgc3VwcG9ydCB0byBubyBsb25nZXIg
ZGVwZW5kIG9uIHN5bmNocm9ub3VzIHBhcnNpbmcKKyAgICAgICAgaHR0cDovL2J1Z3ppbGxhLm9w
ZW5kYXJ3aW4ub3JnL3Nob3dfYnVnLmNnaT9pZD02MDU3CisKKyAgICAgICAgKiBkb20vRG9jdW1l
bnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50SW1wbDo6RG9jdW1lbnRJbXBs
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50SW1wbDo6Y3JlYXRlUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50SW1wbDo6b3Blbik6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudEltcGw6OnJlY2FsY1N0eWxlU2VsZWN0b3IpOgorICAgICAgICAq
IGRvbS9kb21feG1saW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQcm9jZXNzaW5nSW5zdHJ1
Y3Rpb25JbXBsOjpjaGVja1N0eWxlU2hlZXQpOgorICAgICAgICAqIGRvbS94bWxfdG9rZW5pemVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTFRva2VuaXplcjo6WE1MVG9rZW5pemVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhNTFRva2VuaXplcjo6d3JpdGUpOgorICAgICAgICAoV2ViQ29yZTo6
WE1MVG9rZW5pemVyOjpzdGFydEVsZW1lbnROcyk6CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tl
bml6ZXI6OmVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTFRva2VuaXplcjo6aW5pdGlhbGl6
ZVBhcnNlckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MVG9rZW5pemVyOjpmaW5pc2gp
OgorICAgICAgICAoV2ViQ29yZTo6eG1sRG9jUHRyRm9yU3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OnBhcnNlQXR0cmlidXRlcyk6CisgICAgICAgICogZG9tL3htbF90b2tlbml6ZXIuaDoKKyAg
ICAgICAgKiBraHRtbC9lZGl0aW5nL21hcmt1cC5jcHA6CisgICAgICAgIChraHRtbDo6c3RhcnRN
YXJrdXApOiBET0NUWVBFIHNlcmlhbGl6YXRpb24KKyAgICAgICAgKiBraHRtbC9odG1sL2h0bWx0
b2tlbml6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRva2VuaXplcjo6SFRNTFRva2Vu
aXplcik6IHJlbW92ZWQgb25Ib2xkCisgICAgICAgIChXZWJDb3JlOjpIVE1MVG9rZW5pemVyOjpy
ZXNldCk6IHJlbW92ZWQgb25Ib2xkCisgICAgICAgIChXZWJDb3JlOjpIVE1MVG9rZW5pemVyOjpi
ZWdpbik6IHJlbW92ZWQgb25Ib2xkCisgICAgICAgIChXZWJDb3JlOjpIVE1MVG9rZW5pemVyOjp3
cml0ZSk6IHJlbW92ZWQgb25Ib2xkCisgICAgICAgIChXZWJDb3JlOjpIVE1MVG9rZW5pemVyOjpm
aW5pc2gpOiByZW1vdmVkIG9uSG9sZAorICAgICAgICAqIGtodG1sL2h0bWwvaHRtbHRva2VuaXpl
ci5oOiByZW1vdmVkIG9uSG9sZCBzdXBwb3J0CisgICAgICAgICoga2h0bWwveHNsL3hzbF9zdHls
ZXNoZWV0aW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYU0xTdHlsZVNoZWV0SW1wbDo6WFNM
U3R5bGVTaGVldEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6WFNMU3R5bGVTaGVldEltcGw6On5Y
U0xTdHlsZVNoZWV0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpYU0xTdHlsZVNoZWV0SW1wbDo6
ZG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6WFNMU3R5bGVTaGVldEltcGw6OnNldERvY3Vt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhTTFN0eWxlU2hlZXRJbXBsOjpwYXJzZVN0cmluZyk6
CisgICAgICAgIChXZWJDb3JlOjpYU0xTdHlsZVNoZWV0SW1wbDo6bG9hZENoaWxkU2hlZXRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlhTTFN0eWxlU2hlZXRJbXBsOjpjb21waWxlU3R5bGVTaGVldCk6
CisgICAgICAgIChXZWJDb3JlOjpYU0xTdHlsZVNoZWV0SW1wbDo6bG9jYXRlU3R5bGVzaGVldFN1
YlJlc291cmNlKToKKyAgICAgICAgKiBraHRtbC94c2wveHNsX3N0eWxlc2hlZXRpbXBsLmg6IG1v
dmVkIGZ1bmN0aW9ucyB0byAuY3BwIGZpbGUKKwogMjAwNi0wMi0xMyAgRGFyaW4gQWRsZXIgIDxk
YXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFjaWVqLgo=
</data>
<flag name="review"
          id="1608"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>