<?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>137858</bug_id>
          
          <creation_ts>2014-10-18 15:14:41 -0700</creation_ts>
          <short_desc>Kill toRenderedDocumentMarker() by using tighter typing</short_desc>
          <delta_ts>2017-10-19 13:25:32 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=135631</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>kling</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1042644</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-18 15:14:41 -0700</bug_when>
    <thetext>Kill toRenderedDocumentMarker() by using tighter typing. This method was doing no type validation, just a static_cast&lt;&gt;().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042645</commentid>
    <comment_count>1</comment_count>
      <attachid>240074</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-18 15:21:13 -0700</bug_when>
    <thetext>Created attachment 240074
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042648</commentid>
    <comment_count>2</comment_count>
      <attachid>240075</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-18 15:54:24 -0700</bug_when>
    <thetext>Created attachment 240075
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042658</commentid>
    <comment_count>3</comment_count>
      <attachid>240079</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-18 18:27:07 -0700</bug_when>
    <thetext>Created attachment 240079
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042713</commentid>
    <comment_count>4</comment_count>
      <attachid>240079</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-10-19 19:51:52 -0700</bug_when>
    <thetext>Comment on attachment 240079
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=240079&amp;action=review

&gt; Source/WebCore/dom/DocumentMarkerController.cpp:409
&gt; +        Vector&lt;RenderedDocumentMarker*&gt; markers = markersFor(node);
&gt; +        for (auto* marker : markers) {

Believe it or not, we don’t even need the local variable here. This will work:

    for (auto* marker : markersFor(node)) {

However, some other similar constructions wouldn’t work. Only the result of the entire expression on the right gets its lifetime extended in the right way. So maybe you don’t want to do this?

&gt; Source/WebCore/dom/DocumentMarkerController.cpp:681
&gt; +        Vector&lt;RenderedDocumentMarker*&gt; markers = markersFor(node);
&gt; +        for (auto* marker : markers) {

Same thing again.

&gt; Source/WebCore/editing/AlternativeTextController.cpp:474
&gt; +    Vector&lt;RenderedDocumentMarker*&gt; markers = node-&gt;document().markers().markersFor(node);
&gt; +    for (const auto* marker : markers) {

Same thing again. Also not sure why we bother putting the const here; doesn’t add much.

&gt; Source/WebCore/editing/AlternativeTextController.cpp:554
&gt; +    Vector&lt;RenderedDocumentMarker*&gt; correctedOnceMarkers = markers.markersInRange(rangeOfCorrection, DocumentMarker::Autocorrected);

A line like this is where other people hate, and I love, auto.

&gt; Source/WebCore/editing/AlternativeTextController.cpp:735
&gt;      for (size_t i = 0; i &lt; dictationAlternativesMarkers.size(); ++i)

Could use a modern for loop here.

&gt; Source/WebCore/rendering/InlineTextBox.h:161
&gt; -    void paintDocumentMarker(GraphicsContext*, const FloatPoint&amp; boxOrigin, DocumentMarker*, const RenderStyle&amp;, const Font&amp;, bool grammar);
&gt; -    void paintTextMatchMarker(GraphicsContext*, const FloatPoint&amp; boxOrigin, DocumentMarker*, const RenderStyle&amp;, const Font&amp;);
&gt; +    void paintDocumentMarker(GraphicsContext*, const FloatPoint&amp; boxOrigin, RenderedDocumentMarker*, const RenderStyle&amp;, const Font&amp;, bool grammar);
&gt; +    void paintTextMatchMarker(GraphicsContext*, const FloatPoint&amp; boxOrigin, RenderedDocumentMarker*, const RenderStyle&amp;, const Font&amp;);
&gt;  
&gt; -    void computeRectForReplacementMarker(DocumentMarker*, const RenderStyle&amp;, const Font&amp;);
&gt; +    void computeRectForReplacementMarker(RenderedDocumentMarker*, const RenderStyle&amp;, const Font&amp;);

Seems like these should all take references, not pointers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042729</commentid>
    <comment_count>5</comment_count>
      <attachid>240096</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-19 20:52:32 -0700</bug_when>
    <thetext>Created attachment 240096
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042735</commentid>
    <comment_count>6</comment_count>
      <attachid>240096</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-19 22:17:06 -0700</bug_when>
    <thetext>Comment on attachment 240096
Patch

Clearing flags on attachment: 240096

Committed r174876: &lt;http://trac.webkit.org/changeset/174876&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042736</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-19 22:17:13 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362287</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-19 13:25:32 -0700</bug_when>
    <thetext>Nice!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240074</attachid>
            <date>2014-10-18 15:21:13 -0700</date>
            <delta_ts>2014-10-18 15:54:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137858-20141018152118.patch</filename>
            <type>text/plain</type>
            <size>29562</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0ODY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjcxMzE1ZDk5ZDE3ZWIx
YjZmMTVlZjFiY2ZlMjQ2ZGNkN2JlNzc2Zi4uMzJiZWVjYzhmMmJlYTZhNzIxODkwM2M0OGM1OTQ3
YzlkYTRhMjcyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDUzIEBACiAyMDE0LTEwLTE4ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgS2lsbCB0b1JlbmRlcmVkRG9j
dW1lbnRNYXJrZXIoKSBieSB1c2luZyB0aWdodGVyIHR5cGluZworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3ODU4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgS2lsbCB0b1JlbmRlcmVkRG9jdW1lbnRNYXJr
ZXIoKSBieSB1c2luZyB0aWdodGVyIHR5cGluZy4gVGhpcyBtZXRob2QKKyAgICAgICAgd2FzIGRv
aW5nIG5vIHR5cGUgdmFsaWRhdGlvbiwganVzdCBhIHN0YXRpY19jYXN0PD4oKS4KKworICAgICAg
ICBObyBuZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIGRvbS9Eb2N1
bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjphZGRUZXh0TWF0Y2hNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJzRm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFya2Vyc0luUmFuZ2UpOgorICAgICAgICAoRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjpoYXNNYXJrZXJzKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyLmg6CisgICAgICAgICogZG9tL1JlbmRlcmVkRG9jdW1lbnRNYXJrZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6OnRvUmVuZGVyZWREb2N1bWVudE1hcmtlcik6IERlbGV0ZWQu
CisgICAgICAgICogZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Om1hcmtlcnNIYXZlSWRlbnRpY2FsRGVzY3JpcHRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVj
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZWNv
cmRTcGVsbGNoZWNrZXJSZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpwcm9jZXNzTWFya2Vyc09uVGV4dFRv
QmVSZXBsYWNlZEJ5UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OmFwcGx5RGljdGF0aW9uQWx0ZXJuYXRpdmUpOgorICAgICAgICAqIGVkaXRpbmcv
Q29tcG9zaXRlRWRpdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29weU1hcmtlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VUZXh0SW5O
b2RlUHJlc2VydmluZ01hcmtlcnMpOgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9u
Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpv
cmlnaW5hbFN0cmluZ0ZvckF1dG9jb3JyZWN0aW9uQXRCZWdpbm5pbmdPZlNlbGVjdGlvbik6Cisg
ICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp1
cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzTWFya2VyRm9yKToKKyAgICAgICAgKiByZW5kZXJp
bmcvSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpw
YWludERvY3VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBh
aW50VGV4dE1hdGNoTWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmNv
bXB1dGVSZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
VGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcnMpOgorICAgICAgICAqIHJlbmRlcmluZy9Jbmxp
bmVUZXh0Qm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVGbG93Qm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZUZsb3dCb3g6OmNvbXB1dGVUZXh0TWF0Y2hN
YXJrZXJSZWN0Rm9yUmVuZGVyZXIpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6bWFya2VyQXQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZXJuYWxzOjptYXJrZXJSYW5nZUZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW50
ZXJuYWxzOjptYXJrZXJEZXNjcmlwdGlvbkZvck5vZGUpOgorICAgICAgICAqIHRlc3RpbmcvSW50
ZXJuYWxzLmg6CisKKzIwMTQtMTAtMTggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
KwogICAgICAgICBbTWFjXSBVc2UgRmFzdCBlbnVtZXJhdGlvbiBjb25zaXN0ZW50bHkgaW4gV2Vi
Rm9udENhY2hlLm1tCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzc3OTEKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFy
a2VyQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyLmNwcAppbmRleCA5Y2I4YWU2NTdkNmVhZDZmY2FlZjNiMTkxY2Y2YWUwYWVhYjcwZmQw
Li40ZGNkZWU3OTM2MWI5NjQ5YWZlYzc0ZGMwZWVhZWE1OGNhMzQ1NWIyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcApAQCAtMTAxLDggKzEw
MSw4IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRUZXh0TWF0Y2hNYXJrZXIo
Y29uc3QgUmFuZ2UqIHJhbmdlLCBib29sIGFjdGl2CiAgICAgICAgICAgICAvLyB0aGUgd2hvbGUg
cHVycG9zZSBvZiB0aWNrbWFya3Mgb24gdGhlIHNjcm9sbGJhciBpcyB0byBzaG93IHdoZXJlCiAg
ICAgICAgICAgICAvLyBtYXRjaGVzIG9mZi1zY3JlZW4gYXJlICh0aGF0IGhhdmVuJ3QgYmVlbiBw
YWludGVkIHlldCkuCiAgICAgICAgICAgICBOb2RlKiBub2RlID0gdGV4dFBpZWNlLT5zdGFydENv
bnRhaW5lcigpOwotICAgICAgICAgICAgVmVjdG9yPERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9
IG1hcmtlcnNGb3Iobm9kZSk7Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJlZERvY3Vt
ZW50TWFya2VyKj4obWFya2Vyc1ttYXJrZXJzLnNpemUoKSAtIDFdKS0+c2V0UmVuZGVyZWRSZWN0
KHJhbmdlLT5ib3VuZGluZ0JveCgpKTsKKyAgICAgICAgICAgIFZlY3RvcjxSZW5kZXJlZERvY3Vt
ZW50TWFya2VyKj4gbWFya2VycyA9IG1hcmtlcnNGb3Iobm9kZSk7CisgICAgICAgICAgICBtYXJr
ZXJzW21hcmtlcnMuc2l6ZSgpIC0gMV0tPnNldFJlbmRlcmVkUmVjdChyYW5nZS0+Ym91bmRpbmdC
b3goKSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0zNzYsOSArMzc2LDkgQEAgRG9jdW1lbnRN
YXJrZXIqIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFya2VyQ29udGFpbmluZ1BvaW50KGNv
bnN0IExheW91dFBvaW4KICAgICByZXR1cm4gMDsKIH0KIAotVmVjdG9yPERvY3VtZW50TWFya2Vy
Kj4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJzRm9yKE5vZGUqIG5vZGUsIERvY3Vt
ZW50TWFya2VyOjpNYXJrZXJUeXBlcyBtYXJrZXJUeXBlcykKK1ZlY3RvcjxSZW5kZXJlZERvY3Vt
ZW50TWFya2VyKj4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJzRm9yKE5vZGUqIG5v
ZGUsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyBtYXJrZXJUeXBlcykKIHsKLSAgICBWZWN0
b3I8RG9jdW1lbnRNYXJrZXIqPiByZXN1bHQ7CisgICAgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRN
YXJrZXIqPiByZXN1bHQ7CiAgICAgTWFya2VyTGlzdCogbGlzdCA9IG1fbWFya2Vycy5nZXQobm9k
ZSk7CiAgICAgaWYgKCFsaXN0KQogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMzkxLDEyICsz
OTEsMTIgQEAgVmVjdG9yPERvY3VtZW50TWFya2VyKj4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjptYXJrZXJzRm9yKE5vZGUqIG5vZGUsIERvY3VtZW4KICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci1WZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtl
cnNJblJhbmdlKFJhbmdlKiByYW5nZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGVzIG1hcmtl
clR5cGVzKQorVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBEb2N1bWVudE1hcmtlckNv
bnRyb2xsZXI6Om1hcmtlcnNJblJhbmdlKFJhbmdlKiByYW5nZSwgRG9jdW1lbnRNYXJrZXI6Ok1h
cmtlclR5cGVzIG1hcmtlclR5cGVzKQogewogICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKG1h
cmtlclR5cGVzKSkKLSAgICAgICAgcmV0dXJuIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+KCk7Cisg
ICAgICAgIHJldHVybiBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+KCk7CiAKLSAgICBW
ZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiBmb3VuZE1hcmtlcnM7CisgICAgVmVjdG9yPFJlbmRlcmVk
RG9jdW1lbnRNYXJrZXIqPiBmb3VuZE1hcmtlcnM7CiAKICAgICBOb2RlKiBzdGFydENvbnRhaW5l
ciA9IHJhbmdlLT5zdGFydENvbnRhaW5lcigpOwogICAgIEFTU0VSVChzdGFydENvbnRhaW5lcik7
CkBAIC00MDUsMTAgKzQwNSw4IEBAIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+IERvY3VtZW50TWFy
a2VyQ29udHJvbGxlcjo6bWFya2Vyc0luUmFuZ2UoUmFuZ2UqIHJhbmdlLCBECiAKICAgICBOb2Rl
KiBwYXN0TGFzdE5vZGUgPSByYW5nZS0+cGFzdExhc3ROb2RlKCk7CiAgICAgZm9yIChOb2RlKiBu
b2RlID0gcmFuZ2UtPmZpcnN0Tm9kZSgpOyBub2RlICE9IHBhc3RMYXN0Tm9kZTsgbm9kZSA9IE5v
ZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKLSAgICAgICAgVmVjdG9yPERvY3VtZW50TWFya2Vy
Kj4gbWFya2VycyA9IG1hcmtlcnNGb3Iobm9kZSk7Ci0gICAgICAgIFZlY3RvcjxEb2N1bWVudE1h
cmtlcio+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXJrZXJzLmVuZCgpOwotICAgICAgICBmb3Ig
KFZlY3RvcjxEb2N1bWVudE1hcmtlcio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1hcmtlcnMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBEb2N1bWVudE1hcmtlciogbWFy
a2VyID0gKml0OworICAgICAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtl
cnMgPSBtYXJrZXJzRm9yKG5vZGUpOworICAgICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IG1hcmtl
cnMpIHsKICAgICAgICAgICAgIGlmICghbWFya2VyVHlwZXMuY29udGFpbnMobWFya2VyLT50eXBl
KCkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKG5vZGUgPT0g
c3RhcnRDb250YWluZXIgJiYgbWFya2VyLT5lbmRPZmZzZXQoKSA8PSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4ocmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpKQpAQCAtNjc5LDEwICs2NzcsOCBAQCBib29sIERv
Y3VtZW50TWFya2VyQ29udHJvbGxlcjo6aGFzTWFya2VycyhSYW5nZSogcmFuZ2UsIERvY3VtZW50
TWFya2VyOjpNYXJrZXJUeQogCiAgICAgTm9kZSogcGFzdExhc3ROb2RlID0gcmFuZ2UtPnBhc3RM
YXN0Tm9kZSgpOwogICAgIGZvciAoTm9kZSogbm9kZSA9IHJhbmdlLT5maXJzdE5vZGUoKTsgbm9k
ZSAhPSBwYXN0TGFzdE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7Ci0g
ICAgICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBtYXJrZXJzRm9yKG5vZGUp
OwotICAgICAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bWFya2Vycy5lbmQoKTsKLSAgICAgICAgZm9yIChWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPjo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtYXJrZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICAgICAgRG9jdW1lbnRNYXJrZXIqIG1hcmtlciA9ICppdDsKKyAgICAgICAgVmVjdG9yPFJl
bmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gbWFya2Vyc0Zvcihub2RlKTsKKyAgICAg
ICAgZm9yIChhdXRvKiBtYXJrZXIgOiBtYXJrZXJzKSB7CiAgICAgICAgICAgICBpZiAoIW1hcmtl
clR5cGVzLmNvbnRhaW5zKG1hcmtlci0+dHlwZSgpKSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIGlmIChub2RlID09IHN0YXJ0Q29udGFpbmVyICYmIG1hcmtlci0+ZW5k
T2Zmc2V0KCkgPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJhbmdlLT5zdGFydE9mZnNldCgpKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaAppbmRleCBi
ODVhMzkzNDQyM2UxMzk2OGNkMTQ1YTE3YmYyMWJkNmU0YWNiYjJiLi43NjlkZDkyMjdmNDlhZGY5
YmE1MTA0ZmNjMDhjNjViNjA0NTdmNjNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50TWFya2VyQ29udHJvbGxlci5oCkBAIC04NCw4ICs4NCw4IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldE1hcmtlcnNBY3RpdmUoTm9kZSosIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBl
bmRPZmZzZXQsIGJvb2wpOwogCiAgICAgRG9jdW1lbnRNYXJrZXIqIG1hcmtlckNvbnRhaW5pbmdQ
b2ludChjb25zdCBMYXlvdXRQb2ludCYsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlKTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzRm9yKE5vZGUq
LCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZXMgPSBEb2N1bWVudE1hcmtlcjo6QWxsTWFya2Vy
cygpKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJz
SW5SYW5nZShSYW5nZSosIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyk7CisgICAgV0VCQ09S
RV9FWFBPUlQgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzRm9yKE5vZGUq
LCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZXMgPSBEb2N1bWVudE1hcmtlcjo6QWxsTWFya2Vy
cygpKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+
IG1hcmtlcnNJblJhbmdlKFJhbmdlKiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGVzKTsKICAg
ICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8SW50UmVjdD4gcmVuZGVyZWRSZWN0c0Zvck1hcmtlcnMo
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUpOwogICAgIHZvaWQgY2xlYXJEZXNjcmlwdGlvbk9u
TWFya2Vyc0ludGVyc2VjdGluZ1JhbmdlKFJhbmdlKiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5
cGVzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JlbmRlcmVkRG9jdW1lbnRN
YXJrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SZW5kZXJlZERvY3VtZW50TWFya2VyLmgKaW5k
ZXggN2U4ZmUyYjU1MmQ0YTVmMGIzM2ZkYWVlNzY1ZTg5MWE0Nzk5ODM0OC4uN2Q0ODExNWQxMDI5
MjQxOWY5NzkyZDc4Njk2NGRhYjQzMzhhYjQyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL1JlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmVu
ZGVyZWREb2N1bWVudE1hcmtlci5oCkBAIC02MiwxMSArNjIsNiBAQCBpbmxpbmUgdm9pZCBSZW5k
ZXJlZERvY3VtZW50TWFya2VyOjppbnZhbGlkYXRlKGNvbnN0IExheW91dFJlY3QmIHIpCiAgICAg
ICAgIGludmFsaWRhdGUoKTsKIH0KIAotaW5saW5lIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqIHRv
UmVuZGVyZWREb2N1bWVudE1hcmtlcihEb2N1bWVudE1hcmtlciogbWFya2VyKQotewotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4obWFya2VyKTsKLX0KLQog
fSAvLyBuYW1lc3BhY2UKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAppbmRleCAzYzE0ZGZjMDVjNWYzYTU3NDI2
NWE2OWYzYTM0NTY4MmUyNDUyZjA4Li5kM2E1OWE2YjY5MWVjMDI3ZWE4OTVlZjljNjA5ZDQ1ZmZl
OGRlYTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlci5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJGcmFtZS5oIgog
I2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJSZW5k
ZXJlZERvY3VtZW50TWFya2VyLmgiCiAjaW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFu
ZC5oIgogI2luY2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiVGV4dENoZWNr
aW5nSGVscGVyLmgiCkBAIC0xMTQsNyArMTE1LDcgQEAgc3RhdGljIGNvbnN0IFZlY3RvcjxEb2N1
bWVudE1hcmtlcjo6TWFya2VyVHlwZT4mIG1hcmtlclR5cGVzRm9yQXBwbGllZERpY3RhdGlvbkEK
ICAgICByZXR1cm4gbWFya2VyVHlwZXNGb3JBcHBsaWVkRGljdGF0aW9uQWx0ZXJuYXRpdmU7CiB9
CiAKLXN0YXRpYyBib29sIG1hcmtlcnNIYXZlSWRlbnRpY2FsRGVzY3JpcHRpb24oY29uc3QgVmVj
dG9yPERvY3VtZW50TWFya2VyKj4mIG1hcmtlcnMpCitzdGF0aWMgYm9vbCBtYXJrZXJzSGF2ZUlk
ZW50aWNhbERlc2NyaXB0aW9uKGNvbnN0IFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4m
IG1hcmtlcnMpCiB7CiAgICAgaWYgKG1hcmtlcnMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTQ2OSwxMyArNDcwLDkgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
OjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24KICAgICAg
ICAgcmV0dXJuOwogCiAgICAgTm9kZSogbm9kZSA9IHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsK
LSAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gbm9kZS0+ZG9jdW1lbnQoKS5t
YXJrZXJzKCkubWFya2Vyc0Zvcihub2RlKTsKLSAgICBzaXplX3QgbWFya2VyQ291bnQgPSBtYXJr
ZXJzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcmtlckNvdW50OyArK2kp
IHsKLSAgICAgICAgY29uc3QgRG9jdW1lbnRNYXJrZXIqIG1hcmtlciA9IG1hcmtlcnNbaV07Ci0g
ICAgICAgIGlmICghbWFya2VyKQotICAgICAgICAgICAgY29udGludWU7Ci0KKyAgICBWZWN0b3I8
UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBub2RlLT5kb2N1bWVudCgpLm1hcmtl
cnMoKS5tYXJrZXJzRm9yKG5vZGUpOworICAgIGZvciAoY29uc3QgYXV0byogbWFya2VyIDogbWFy
a2VycykgeworICAgICAgICBBU1NFUlQobWFya2VyKTsKICAgICAgICAgaWYgKHJlc3BvbmRUb01h
cmtlckF0RW5kT2ZXb3JkKCptYXJrZXIsIHBvc2l0aW9uKSkKICAgICAgICAgICAgIGJyZWFrOwog
ICAgIH0KQEAgLTU1NCw3ICs1NTEsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
OnJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKAogICAgIGlm
ICghcmFuZ2VPZkNvcnJlY3Rpb24pCiAgICAgICAgIHJldHVybjsKICAgICBEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXImIG1hcmtlcnMgPSByYW5nZU9mQ29ycmVjdGlvbi0+c3RhcnRDb250YWluZXIo
KS0+ZG9jdW1lbnQoKS5tYXJrZXJzKCk7Ci0gICAgVmVjdG9yPERvY3VtZW50TWFya2VyKj4gY29y
cmVjdGVkT25jZU1hcmtlcnMgPSBtYXJrZXJzLm1hcmtlcnNJblJhbmdlKHJhbmdlT2ZDb3JyZWN0
aW9uLCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCk7CisgICAgVmVjdG9yPFJlbmRlcmVk
RG9jdW1lbnRNYXJrZXIqPiBjb3JyZWN0ZWRPbmNlTWFya2VycyA9IG1hcmtlcnMubWFya2Vyc0lu
UmFuZ2UocmFuZ2VPZkNvcnJlY3Rpb24sIERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkKTsK
ICAgICBpZiAoY29ycmVjdGVkT25jZU1hcmtlcnMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47
CiAKQEAgLTYxMywxMCArNjEwLDkgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpw
cm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KGNvbnN0IFQKICAgICBQb3Np
dGlvbiBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiA9IGJlZ2lubmluZ09mUmFuZ2UucHJldmlv
dXMoKTsKICAgICBSZWZQdHI8UmFuZ2U+IHByZWNlZGluZ0NoYXJhY3RlclJhbmdlID0gUmFuZ2U6
OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiwg
YmVnaW5uaW5nT2ZSYW5nZSk7CiAKLSAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJz
ID0gbWFya2VyQ29udHJvbGxlci5tYXJrZXJzSW5SYW5nZShwcmVjZWRpbmdDaGFyYWN0ZXJSYW5n
ZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkRlbGV0ZWRBdXRvY29ycmVjdGlvbik7Ci0KLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcmtlcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYg
KG1hcmtlcnNbaV0tPmRlc2NyaXB0aW9uKCkgPT0gc3RyaW5nVG9CZVJlcGxhY2VkKQorICAgIFZl
Y3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IG1hcmtlckNvbnRyb2xsZXIu
bWFya2Vyc0luUmFuZ2UocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFy
a2VyOjpEZWxldGVkQXV0b2NvcnJlY3Rpb24pOworICAgIGZvciAoY29uc3QgYXV0byogbWFya2Vy
IDogbWFya2VycykgeworICAgICAgICBpZiAobWFya2VyLT5kZXNjcmlwdGlvbigpID09IHN0cmlu
Z1RvQmVSZXBsYWNlZCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTcz
NSw3ICs3MzEsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5RGljdGF0
aW9uQWx0ZXJuYXRpdmUoY29uc3QgU3RyaW5nJiBhbHRlcm5hdAogICAgIGlmICghc2VsZWN0aW9u
IHx8ICFlZGl0b3Iuc2hvdWxkSW5zZXJ0VGV4dChhbHRlcm5hdGl2ZVN0cmluZywgc2VsZWN0aW9u
LmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25QYXN0ZWQpKQogICAgICAgICByZXR1cm47CiAgICAg
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyJiBtYXJrZXJzID0gc2VsZWN0aW9uLT5zdGFydENvbnRh
aW5lcigpLT5kb2N1bWVudCgpLm1hcmtlcnMoKTsKLSAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXIq
PiBkaWN0YXRpb25BbHRlcm5hdGl2ZXNNYXJrZXJzID0gbWFya2Vycy5tYXJrZXJzSW5SYW5nZShz
ZWxlY3Rpb24uZ2V0KCksIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMpOwor
ICAgIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gZGljdGF0aW9uQWx0ZXJuYXRpdmVz
TWFya2VycyA9IG1hcmtlcnMubWFya2Vyc0luUmFuZ2Uoc2VsZWN0aW9uLmdldCgpLCBEb2N1bWVu
dE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGRpY3RhdGlvbkFsdGVybmF0aXZlc01hcmtlcnMuc2l6ZSgpOyArK2kpCiAgICAgICAgIHJl
bW92ZURpY3RhdGlvbkFsdGVybmF0aXZlc0Zvck1hcmtlcihkaWN0YXRpb25BbHRlcm5hdGl2ZXNN
YXJrZXJzW2ldKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3Np
dGVFZGl0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRD
b21tYW5kLmNwcAppbmRleCAwNjY1NGVhMmNhNTIwZjY2MmNhN2U4ZTkzZTE1MGQ4NjU0YWEzYzNh
Li42NWU0YTYwOGYwNGZiYjk5ODFmMzYzNjQ3ZmQwMTU0MDQzNjAwZGVmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcApAQCAtNTcsNiArNTcs
NyBAQAogI2luY2x1ZGUgIlJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kLmgiCiAj
aW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgorI2lu
Y2x1ZGUgIlJlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaCIKICNpbmNsdWRlICJSZXBsYWNlTm9kZVdp
dGhTcGFuQ29tbWFuZC5oIgogI2luY2x1ZGUgIlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgiCiAj
aW5jbHVkZSAiU2NvcGVkRXZlbnRRdWV1ZS5oIgpAQCAtNTc0LDcgKzU3NSw3IEBAIFBvc2l0aW9u
IENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZXBsYWNlU2VsZWN0ZWRUZXh0SW5Ob2RlKGNvbnN0IFN0
cmluZyYgdGV4dCkKICAgICByZXR1cm4gUG9zaXRpb24odGV4dE5vZGUucmVsZWFzZSgpLCBzdGFy
dC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSArIHRleHQubGVuZ3RoKCkpOwogfQogCi1zdGF0aWMg
dm9pZCBjb3B5TWFya2Vycyhjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiYgbWFya2VyUG9p
bnRlcnMsIFZlY3RvcjxEb2N1bWVudE1hcmtlcj4mIG1hcmtlcnMpCitzdGF0aWMgdm9pZCBjb3B5
TWFya2Vycyhjb25zdCBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+JiBtYXJrZXJQb2lu
dGVycywgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXI+JiBtYXJrZXJzKQogewogICAgIHNp
emVfdCBhcnJheVNpemUgPSBtYXJrZXJQb2ludGVycy5zaXplKCk7CiAgICAgbWFya2Vycy5yZXNl
cnZlQ2FwYWNpdHkoYXJyYXlTaXplKTsKQEAgLTU4NiwxNSArNTg3LDE1IEBAIHZvaWQgQ29tcG9z
aXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VUZXh0SW5Ob2RlUHJlc2VydmluZ01hcmtlcnMoUGFzc1Jl
ZlB0cjxUZXh0PiBwCiB7CiAgICAgUmVmUHRyPFRleHQ+IG5vZGUocHJwTm9kZSk7CiAgICAgRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyJiBtYXJrZXJDb250cm9sbGVyID0gZG9jdW1lbnQoKS5tYXJr
ZXJzKCk7Ci0gICAgVmVjdG9yPERvY3VtZW50TWFya2VyPiBtYXJrZXJzOworICAgIFZlY3RvcjxS
ZW5kZXJlZERvY3VtZW50TWFya2VyPiBtYXJrZXJzOwogICAgIGNvcHlNYXJrZXJzKG1hcmtlckNv
bnRyb2xsZXIubWFya2Vyc0luUmFuZ2UoUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBub2RlLCBv
ZmZzZXQsIG5vZGUsIG9mZnNldCArIGNvdW50KS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkFsbE1h
cmtlcnMoKSksIG1hcmtlcnMpOwogICAgIHJlcGxhY2VUZXh0SW5Ob2RlKG5vZGUsIG9mZnNldCwg
Y291bnQsIHJlcGxhY2VtZW50VGV4dCk7CiAgICAgUmVmUHRyPFJhbmdlPiBuZXdSYW5nZSA9IFJh
bmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgbm9kZSwgb2Zmc2V0LCBub2RlLCBvZmZzZXQgKyByZXBs
YWNlbWVudFRleHQubGVuZ3RoKCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWFya2Vy
cy5zaXplKCk7ICsraSkKKyAgICBmb3IgKGNvbnN0IGF1dG8mIG1hcmtlciA6IG1hcmtlcnMpCiAj
aWYgUExBVEZPUk0oSU9TKQotICAgICAgICBtYXJrZXJDb250cm9sbGVyLmFkZE1hcmtlcihuZXdS
YW5nZS5nZXQoKSwgbWFya2Vyc1tpXS50eXBlKCksIG1hcmtlcnNbaV0uZGVzY3JpcHRpb24oKSwg
bWFya2Vyc1tpXS5hbHRlcm5hdGl2ZXMoKSwgbWFya2Vyc1tpXS5tZXRhZGF0YSgpKTsKKyAgICAg
ICAgbWFya2VyQ29udHJvbGxlci5hZGRNYXJrZXIobmV3UmFuZ2UuZ2V0KCksIG1hcmtlci50eXBl
KCksIG1hcmtlci5kZXNjcmlwdGlvbigpLCBtYXJrZXIuYWx0ZXJuYXRpdmVzKCksIG1hcmtlci5t
ZXRhZGF0YSgpKTsKICNlbHNlCi0gICAgICAgIG1hcmtlckNvbnRyb2xsZXIuYWRkTWFya2VyKG5l
d1JhbmdlLmdldCgpLCBtYXJrZXJzW2ldLnR5cGUoKSwgbWFya2Vyc1tpXS5kZXNjcmlwdGlvbigp
KTsKKyAgICAgICAgbWFya2VyQ29udHJvbGxlci5hZGRNYXJrZXIobmV3UmFuZ2UuZ2V0KCksIG1h
cmtlci50eXBlKCksIG1hcmtlci5kZXNjcmlwdGlvbigpKTsKICNlbmRpZiAvLyBQTEFURk9STShJ
T1MpCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQuY3BwCmluZGV4IGExMDdlNjk2ZTQxNWE4ODhiMDQ2OTZjYWU1ZDVkNGE5M2VhMjMxY2Mu
LjlkYTNjYmNlZjc2M2NjNzQxYWRmNTA3ZWQ4OWE3YjI2NzNkZDVjMmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtNDEsNiAr
NDEsNyBAQAogI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJs
ZUNlbGwuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCisjaW5jbHVkZSAiUmVuZGVyZWREb2N1
bWVudE1hcmtlci5oIgogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJWaXNpYmxlVW5pdHMu
aCIKIApAQCAtNzY1LDkgKzc2Niw4IEBAIFN0cmluZyBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpv
cmlnaW5hbFN0cmluZ0ZvckF1dG9jb3JyZWN0aW9uQXRCZWdpbm5pbmdPZlNlbGVjCiAgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKIAogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VPZkZpcnN0Q2hhcmFj
dGVyID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBzdGFydE9mU2VsZWN0aW9uLmRlZXBFcXVp
dmFsZW50KCksIG5leHRQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpKTsKLSAgICBWZWN0b3I8RG9j
dW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0luUmFu
Z2UocmFuZ2VPZkZpcnN0Q2hhcmFjdGVyLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJl
Y3RlZCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXJrZXJzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIGNvbnN0IERvY3VtZW50TWFya2VyKiBtYXJrZXIgPSBtYXJrZXJzW2ldOworICAg
IFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IGRvY3VtZW50KCkubWFy
a2VycygpLm1hcmtlcnNJblJhbmdlKHJhbmdlT2ZGaXJzdENoYXJhY3Rlci5nZXQoKSwgRG9jdW1l
bnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQpOworICAgIGZvciAoYXV0byogbWFya2VyIDogbWFya2Vy
cykgewogICAgICAgICBpbnQgc3RhcnRPZmZzZXQgPSBtYXJrZXItPnN0YXJ0T2Zmc2V0KCk7CiAg
ICAgICAgIGlmIChzdGFydE9mZnNldCA9PSBzdGFydE9mU2VsZWN0aW9uLmRlZXBFcXVpdmFsZW50
KCkub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpCiAgICAgICAgICAgICByZXR1cm4gbWFya2VyLT5k
ZXNjcmlwdGlvbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3Iu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDc3NTljNmZhMGNk
NDVmMmZmOTg0YzIzYmExZmM2M2Y4YzhmZDI5NmQuLjZlMDg5NTE1MzdlMjI2NWRjZGFiN2VlMTYy
MjVkZDBkMGEwYzI3YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9y
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTcxLDYgKzcx
LDcgQEAKICNpbmNsdWRlICJSZW1vdmVGb3JtYXRDb21tYW5kLmgiCiAjaW5jbHVkZSAiUmVuZGVy
QmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbC5oIgorI2luY2x1ZGUgIlJlbmRl
cmVkRG9jdW1lbnRNYXJrZXIuaCIKICNpbmNsdWRlICJSZW5kZXJlZFBvc2l0aW9uLmgiCiAjaW5j
bHVkZSAiUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgpA
QCAtMjc1Myw5ICsyNzU0LDkgQEAgdm9pZCBFZGl0b3I6OnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0Fm
ZmVjdGVkQnlFZGl0aW5nKGJvb2wgZG9Ob3RSZW1vdmVJZlNlbGVjdGlvbkEKICAgICAvLyBvZiBt
YXJrZXIgdGhhdCBjb250YWlucyB0aGUgd29yZCBpbiBxdWVzdGlvbiwgYW5kIHJlbW92ZSBtYXJr
ZXIgb24gdGhhdCB3aG9sZSByYW5nZS4KICAgICBSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9IFJh
bmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3RhcnRPZkZpcnN0V29yZC5kZWVwRXF1aXZhbGVudCgp
LCBlbmRPZkxhc3RXb3JkLmRlZXBFcXVpdmFsZW50KCkpOwogCi0gICAgVmVjdG9yPERvY3VtZW50
TWFya2VyKj4gbWFya2VycyA9IGRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNJblJhbmdlKHdv
cmRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlcyk7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXJrZXJzLnNpemUoKTsgKytpKQotICAgICAgICBt
X2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPnJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlc0Zv
ck1hcmtlcihtYXJrZXJzW2ldKTsKKyAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+
IG1hcmtlcnMgPSBkb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzSW5SYW5nZSh3b3JkUmFuZ2Uu
Z2V0KCksIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMpOworICAgIGZvciAo
YXV0byogbWFya2VyIDogbWFya2VycykKKyAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyLT5yZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXNGb3JNYXJrZXIobWFya2VyKTsKIAogI2lm
IFBMQVRGT1JNKElPUykKICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKHdv
cmRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nIHwgRG9jdW1lbnRNYXJrZXI6
OkNvcnJlY3Rpb25JbmRpY2F0b3IgfCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1w
dGlvbiB8IERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMgfCBEb2N1bWVudE1h
cmtlcjo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcywgRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CkBAIC0zNTQyLDkgKzM1
NDMsOCBAQCBib29sIEVkaXRvcjo6c2VsZWN0aW9uU3RhcnRIYXNNYXJrZXJGb3IoRG9jdW1lbnRN
YXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSwgaQogCiAgICAgdW5zaWduZWQgaW50IHN0YXJ0
T2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihmcm9tKTsKICAgICB1bnNpZ25lZCBp
bnQgZW5kT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihmcm9tICsgbGVuZ3RoKTsK
LSAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gZG9jdW1lbnQoKS5tYXJrZXJz
KCkubWFya2Vyc0Zvcihub2RlKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcmtlcnMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgRG9jdW1lbnRNYXJrZXIqIG1hcmtlciA9IG1hcmtlcnNb
aV07CisgICAgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gZG9jdW1l
bnQoKS5tYXJrZXJzKCkubWFya2Vyc0Zvcihub2RlKTsKKyAgICBmb3IgKGF1dG8qIG1hcmtlciA6
IG1hcmtlcnMpIHsKICAgICAgICAgaWYgKG1hcmtlci0+c3RhcnRPZmZzZXQoKSA8PSBzdGFydE9m
ZnNldCAmJiBlbmRPZmZzZXQgPD0gbWFya2VyLT5lbmRPZmZzZXQoKSAmJiBtYXJrZXItPnR5cGUo
KSA9PSBtYXJrZXJUeXBlKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCmluZGV4IDM1NDc5MGNmMzkyYTE4
MzdlYWI3NDViMDg2YjgwMjBmZDdjYmVlY2QuLmNkMWQ5OTVkMDQzOTFlMGNkNmZkMDEzN2MyMGMx
MTU1M2FlZDA1OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVU
ZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5j
cHAKQEAgLTEwNjEsNyArMTA2MSw3IEBAIHN0YXRpYyBHcmFwaGljc0NvbnRleHQ6OkRvY3VtZW50
TWFya2VyTGluZVN0eWxlIGxpbmVTdHlsZUZvck1hcmtlclR5cGUoRG9jdW1lbnRNCiAgICAgfQog
fQogCi12b2lkIElubGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXIoR3JhcGhpY3NDb250
ZXh0KiBwdCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBEb2N1bWVudE1hcmtlciogbWFy
a2VyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQsIGJvb2wgZ3Jh
bW1hcikKK3ZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcihHcmFwaGljc0Nv
bnRleHQqIHB0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFJlbmRlcmVkRG9jdW1lbnRN
YXJrZXIqIG1hcmtlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250JiBmb250
LCBib29sIGdyYW1tYXIpCiB7CiAgICAgLy8gTmV2ZXIgcHJpbnQgc3BlbGxpbmcvZ3JhbW1hciBt
YXJrZXJzICg1MzI3ODg3KQogICAgIGlmIChyZW5kZXJlcigpLmRvY3VtZW50KCkucHJpbnRpbmco
KSkKQEAgLTExMDcsNyArMTEwNyw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVu
dE1hcmtlcihHcmFwaGljc0NvbnRleHQqIHB0LCBjb25zdCBGbG9hdFBvaW50JiBiCiAgICAgICAg
IGlmIChncmFtbWFyIHx8IGlzRGljdGF0aW9uTWFya2VyKSB7CiAgICAgICAgICAgICBtYXJrZXJS
ZWN0Lm1vdmUoLWJveE9yaWdpbi54KCksIC1ib3hPcmlnaW4ueSgpKTsKICAgICAgICAgICAgIG1h
cmtlclJlY3QgPSByZW5kZXJlcigpLmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KG1hcmtl
clJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwotICAgICAgICAgICAgdG9SZW5kZXJlZERv
Y3VtZW50TWFya2VyKG1hcmtlciktPnNldFJlbmRlcmVkUmVjdChtYXJrZXJSZWN0KTsKKyAgICAg
ICAgICAgIG1hcmtlci0+c2V0UmVuZGVyZWRSZWN0KG1hcmtlclJlY3QpOwogICAgICAgICB9CiAg
ICAgfQogICAgIApAQCAtMTEzMSw3ICsxMTMxLDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWlu
dERvY3VtZW50TWFya2VyKEdyYXBoaWNzQ29udGV4dCogcHQsIGNvbnN0IEZsb2F0UG9pbnQmIGIK
ICAgICBwdC0+ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihGbG9hdFBvaW50KGJveE9yaWdpbi54
KCkgKyBzdGFydCwgYm94T3JpZ2luLnkoKSArIHVuZGVybGluZU9mZnNldCksIHdpZHRoLCBsaW5l
U3R5bGVGb3JNYXJrZXJUeXBlKG1hcmtlci0+dHlwZSgpKSk7CiB9CiAKLXZvaWQgSW5saW5lVGV4
dEJveDo6cGFpbnRUZXh0TWF0Y2hNYXJrZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIERvY3VtZW50TWFya2VyKiBtYXJrZXIsIGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCkKK3ZvaWQgSW5saW5lVGV4dEJveDo6
cGFpbnRUZXh0TWF0Y2hNYXJrZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9h
dFBvaW50JiBib3hPcmlnaW4sIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqIG1hcmtlciwgY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250JiBmb250KQogewogICAgIExheW91dFVuaXQg
c2VsZWN0aW9uSGVpZ2h0ID0gdGhpcy0+c2VsZWN0aW9uSGVpZ2h0KCk7CiAKQEAgLTExNDUsNyAr
MTE0NSw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0TWF0Y2hNYXJrZXIoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFBvCiAgICAgZm9udC5hZGp1c3RTZWxlY3Rp
b25SZWN0Rm9yVGV4dChydW4sIHJlbmRlcmVkUmVjdCwgc1BvcywgZVBvcyk7CiAgICAgSW50UmVj
dCBtYXJrZXJSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChyZW5kZXJlZFJlY3QpOwogICAgIG1hcmtl
clJlY3QgPSByZW5kZXJlcigpLmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRRdWFkKG1hcmtlclJl
Y3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwotICAgIHRvUmVuZGVyZWREb2N1bWVudE1hcmtl
cihtYXJrZXIpLT5zZXRSZW5kZXJlZFJlY3QobWFya2VyUmVjdCk7CisgICAgbWFya2VyLT5zZXRS
ZW5kZXJlZFJlY3QobWFya2VyUmVjdCk7CiAgICAgCiAgICAgLy8gT3B0aW9uYWxseSBoaWdobGln
aHQgdGhlIHRleHQKICAgICBpZiAocmVuZGVyZXIoKS5mcmFtZSgpLmVkaXRvcigpLm1hcmtlZFRl
eHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoKSkgewpAQCAtMTE2Miw3ICsxMTYyLDcgQEAgdm9pZCBJ
bmxpbmVUZXh0Qm94OjpwYWludFRleHRNYXRjaE1hcmtlcihHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IEZsb2F0UG8KICAgICB9CiB9CiAKLXZvaWQgSW5saW5lVGV4dEJveDo6Y29tcHV0
ZVJlY3RGb3JSZXBsYWNlbWVudE1hcmtlcihEb2N1bWVudE1hcmtlciogbWFya2VyLCBjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQpCit2b2lkIElubGluZVRleHRCb3g6
OmNvbXB1dGVSZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXIoUmVuZGVyZWREb2N1bWVudE1hcmtlciog
bWFya2VyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQpCiB7CiAg
ICAgLy8gUmVwbGFjZW1lbnQgbWFya2VycyBhcmUgbm90IGFjdHVhbGx5IGRyYXduLCBidXQgdGhl
aXIgcmVjdHMgbmVlZCB0byBiZSBjb21wdXRlZCBmb3IgaGl0IHRlc3RpbmcuCiAgICAgTGF5b3V0
VW5pdCB0b3AgPSBzZWxlY3Rpb25Ub3AoKTsKQEAgLTExNzcsNyArMTE3Nyw3IEBAIHZvaWQgSW5s
aW5lVGV4dEJveDo6Y29tcHV0ZVJlY3RGb3JSZXBsYWNlbWVudE1hcmtlcihEb2N1bWVudE1hcmtl
ciogbWFya2VyLCBjb25zCiAgICAgZm9udC5hZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dChydW4s
IHNlbGVjdGlvblJlY3QsIHNQb3MsIGVQb3MpOwogICAgIEludFJlY3QgbWFya2VyUmVjdCA9IGVu
Y2xvc2luZ0ludFJlY3Qoc2VsZWN0aW9uUmVjdCk7CiAgICAgbWFya2VyUmVjdCA9IHJlbmRlcmVy
KCkubG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QobWFya2VyUmVjdCkpLmVuY2xvc2luZ0Jv
dW5kaW5nQm94KCk7Ci0gICAgdG9SZW5kZXJlZERvY3VtZW50TWFya2VyKG1hcmtlciktPnNldFJl
bmRlcmVkUmVjdChtYXJrZXJSZWN0KTsKKyAgICBtYXJrZXItPnNldFJlbmRlcmVkUmVjdChtYXJr
ZXJSZWN0KTsKIH0KICAgICAKIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtl
cnMoR3JhcGhpY3NDb250ZXh0KiBwdCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQsIGJvb2wgYmFja2dyb3VuZCkK
QEAgLTExODUsMTQgKzExODUsMTEgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50
TWFya2VycyhHcmFwaGljc0NvbnRleHQqIHB0LCBjb25zdCBGbG9hdFBvaW50JgogICAgIGlmICgh
cmVuZGVyZXIoKS50ZXh0Tm9kZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8RG9j
dW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gcmVuZGVyZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5t
YXJrZXJzRm9yKHJlbmRlcmVyKCkudGV4dE5vZGUoKSk7Ci0gICAgVmVjdG9yPERvY3VtZW50TWFy
a2VyKj46OmNvbnN0X2l0ZXJhdG9yIG1hcmtlckl0ID0gbWFya2Vycy5iZWdpbigpOworICAgIFZl
Y3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IHJlbmRlcmVyKCkuZG9jdW1l
bnQoKS5tYXJrZXJzKCkubWFya2Vyc0ZvcihyZW5kZXJlcigpLnRleHROb2RlKCkpOwogCiAgICAg
Ly8gR2l2ZSBhbnkgZG9jdW1lbnQgbWFya2VycyB0aGF0IHRvdWNoIHRoaXMgcnVuIGEgY2hhbmNl
IHRvIGRyYXcgYmVmb3JlIHRoZSB0ZXh0IGhhcyBiZWVuIGRyYXduLgogICAgIC8vIE5vdGUgZW5k
KCkgcG9pbnRzIGF0IHRoZSBsYXN0IGNoYXIsIG5vdCBvbmUgcGFzdCBpdCBsaWtlIGVuZE9mZnNl
dCBhbmQgcmFuZ2VzIGRvLgotICAgIGZvciAoIDsgbWFya2VySXQgIT0gbWFya2Vycy5lbmQoKTsg
KyttYXJrZXJJdCkgewotICAgICAgICBEb2N1bWVudE1hcmtlciogbWFya2VyID0gKm1hcmtlckl0
OwotICAgICAgICAKKyAgICBmb3IgKGF1dG8qIG1hcmtlciA6IG1hcmtlcnMpIHsKICAgICAgICAg
Ly8gUGFpbnQgZWl0aGVyIHRoZSBiYWNrZ3JvdW5kIG1hcmtlcnMgb3IgdGhlIGZvcmVncm91bmQg
bWFya2VycywgYnV0IG5vdCBib3RoCiAgICAgICAgIHN3aXRjaCAobWFya2VyLT50eXBlKCkpIHsK
ICAgICAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXI6CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZVRleHRCb3guaAppbmRleCA0ZGEwYmE4ZmY5ZTUwMGRkN2QwMjUyYWZl
YjMzMGM1MDI2ZGYyODdmLi42ODNhNWMyZTRhZDJjODNkODI4ZGJmMGRmODU5OWI1ZjY4M2MzNzRl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKQEAgLTMwLDcgKzMw
LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IENvbXBvc2l0aW9uVW5kZXJsaW5l
OwotY2xhc3MgRG9jdW1lbnRNYXJrZXI7CitjbGFzcyBSZW5kZXJlZERvY3VtZW50TWFya2VyOwog
Y2xhc3MgVGV4dFBhaW50ZXI7CiAKIGNvbnN0IHVuc2lnbmVkIHNob3J0IGNOb1RydW5jYXRpb24g
PSBVU0hSVF9NQVg7CkBAIC0xNTUsMTAgKzE1NSwxMCBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgog
ICAgIHZvaWQgcGFpbnREZWNvcmF0aW9uKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9p
bnQmIGJveE9yaWdpbiwgVGV4dERlY29yYXRpb24sIFRleHREZWNvcmF0aW9uU3R5bGUsIGNvbnN0
IFNoYWRvd0RhdGEqLCBUZXh0UGFpbnRlciYpOwogICAgIHZvaWQgcGFpbnRTZWxlY3Rpb24oR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJT
dHlsZSYsIGNvbnN0IEZvbnQmLCBDb2xvciB0ZXh0Q29sb3IpOwotICAgIHZvaWQgcGFpbnREb2N1
bWVudE1hcmtlcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4s
IERvY3VtZW50TWFya2VyKiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250JiwgYm9vbCBn
cmFtbWFyKTsKLSAgICB2b2lkIHBhaW50VGV4dE1hdGNoTWFya2VyKEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgRG9jdW1lbnRNYXJrZXIqLCBjb25zdCBSZW5k
ZXJTdHlsZSYsIGNvbnN0IEZvbnQmKTsKKyAgICB2b2lkIHBhaW50RG9jdW1lbnRNYXJrZXIoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJlZERvY3Vt
ZW50TWFya2VyKiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250JiwgYm9vbCBncmFtbWFy
KTsKKyAgICB2b2lkIHBhaW50VGV4dE1hdGNoTWFya2VyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgUmVuZGVyZWREb2N1bWVudE1hcmtlciosIGNvbnN0IFJl
bmRlclN0eWxlJiwgY29uc3QgRm9udCYpOwogCi0gICAgdm9pZCBjb21wdXRlUmVjdEZvclJlcGxh
Y2VtZW50TWFya2VyKERvY3VtZW50TWFya2VyKiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBG
b250Jik7CisgICAgdm9pZCBjb21wdXRlUmVjdEZvclJlcGxhY2VtZW50TWFya2VyKFJlbmRlcmVk
RG9jdW1lbnRNYXJrZXIqLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmKTsKIAogICAg
IFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yKCkgY29uc3QKICAg
ICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZs
b3dCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVGbG93Qm94
LmNwcAppbmRleCBmMmM5ODg4YTFhM2I0ODA0MDZlYTE3OGE0Yzk3NzkxZTY4NWUzZjNlLi5hZDM0
NWYwYzljZmVjZTRlNGEzNzY3MTk2Zjg1YjhhNDIwMDI2MzEwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3guY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lRmxvd0JveC5jcHAKQEAgLTgzLDEyICs4Myw4
IEBAIHZvaWQgU1ZHSW5saW5lRmxvd0JveDo6Y29tcHV0ZVRleHRNYXRjaE1hcmtlclJlY3RGb3JS
ZW5kZXJlcihSZW5kZXJTVkdJbmxpbmVUZXh0CiAgICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gdGV4
dFJlbmRlcmVyLT5zdHlsZSgpOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIGZyYWdtZW50VHJhbnNm
b3JtOwotICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSB0ZXh0UmVuZGVyZXIt
PmRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNGb3IoJnRleHROb2RlKTsKLQotICAgIFZlY3Rv
cjxEb2N1bWVudE1hcmtlcio+OjppdGVyYXRvciBtYXJrZXJFbmQgPSBtYXJrZXJzLmVuZCgpOwot
ICAgIGZvciAoVmVjdG9yPERvY3VtZW50TWFya2VyKj46Oml0ZXJhdG9yIG1hcmtlckl0ID0gbWFy
a2Vycy5iZWdpbigpOyBtYXJrZXJJdCAhPSBtYXJrZXJFbmQ7ICsrbWFya2VySXQpIHsKLSAgICAg
ICAgRG9jdW1lbnRNYXJrZXIqIG1hcmtlciA9ICptYXJrZXJJdDsKLQorICAgIFZlY3RvcjxSZW5k
ZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IHRleHRSZW5kZXJlci0+ZG9jdW1lbnQoKS5t
YXJrZXJzKCkubWFya2Vyc0ZvcigmdGV4dE5vZGUpOworICAgIGZvciAoYXV0byogbWFya2VyIDog
bWFya2VycykgewogICAgICAgICAvLyBTVkcgaXMgb25seSBpbnRlcmVzc3RlZCBpbiB0aGUgVGV4
dE1hdGNoIG1hcmtlciwgZm9yIG5vdy4KICAgICAgICAgaWYgKG1hcmtlci0+dHlwZSgpICE9IERv
Y3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTEyOCw3
ICsxMjQsNyBAQCB2b2lkIFNWR0lubGluZUZsb3dCb3g6OmNvbXB1dGVUZXh0TWF0Y2hNYXJrZXJS
ZWN0Rm9yUmVuZGVyZXIoUmVuZGVyU1ZHSW5saW5lVGV4dAogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAKLSAgICAgICAgdG9SZW5kZXJlZERvY3VtZW50TWFya2VyKG1hcmtlciktPnNldFJlbmRl
cmVkUmVjdCh0ZXh0UmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQobWFya2VyUmVjdCkuZW5j
bG9zaW5nQm91bmRpbmdCb3goKSk7CisgICAgICAgIG1hcmtlci0+c2V0UmVuZGVyZWRSZWN0KHRl
eHRSZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChtYXJrZXJSZWN0KS5lbmNsb3NpbmdCb3Vu
ZGluZ0JveCgpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApp
bmRleCAxNDhkM2MyM2UzMDQ1NDFlNGY4M2JjMjVlZGI5ZmU1MTY1NWQ3Y2YzLi4zNWU0MmUxZTFl
ZTZjMmE4NGJkNjMzN2U3YTk4ZGM3ZDFhNzQxODM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuY3BwCkBAIC04NSw2ICs4NSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyTWVudUxpc3QuaCIK
ICNpbmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgor
I2luY2x1ZGUgIlJlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaCIKICNpbmNsdWRlICJSdW50aW1lRW5h
YmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NoZW1lUmVnaXN0cnkuaCIKICNpbmNsdWRlICJT
Y3JvbGxpbmdDb29yZGluYXRvci5oIgpAQCAtNzc5LDM5ICs3ODAsMzkgQEAgdW5zaWduZWQgSW50
ZXJuYWxzOjptYXJrZXJDb3VudEZvck5vZGUoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBtYXJr
ZXJUeXBlLCBFeGMKICAgICByZXR1cm4gbm9kZS0+ZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vy
c0Zvcihub2RlLCBtYXJrZXJUeXBlcykuc2l6ZSgpOwogfQogCi1Eb2N1bWVudE1hcmtlciogSW50
ZXJuYWxzOjptYXJrZXJBdChOb2RlKiBub2RlLCBjb25zdCBTdHJpbmcmIG1hcmtlclR5cGUsIHVu
c2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKK1JlbmRlcmVkRG9jdW1lbnRNYXJrZXIq
IEludGVybmFsczo6bWFya2VyQXQoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBtYXJrZXJUeXBl
LCB1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgbm9kZS0+ZG9jdW1l
bnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICAgICBpZiAoIW5v
ZGUpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7Ci0gICAgICAgIHJldHVybiAw
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBEb2N1bWVudE1hcmtlcjo6
TWFya2VyVHlwZXMgbWFya2VyVHlwZXMgPSAwOwogICAgIGlmICghbWFya2VyVHlwZXNGcm9tKG1h
cmtlclR5cGUsIG1hcmtlclR5cGVzKSkgewogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7Ci0gICAg
ICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBub2Rl
LT5kb2N1bWVudCgpLmZyYW1lKCktPmVkaXRvcigpLnVwZGF0ZUVkaXRvclVJTm93SWZTY2hlZHVs
ZWQoKTsKIAotICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBub2RlLT5kb2N1
bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzRm9yKG5vZGUsIG1hcmtlclR5cGVzKTsKKyAgICBWZWN0
b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBub2RlLT5kb2N1bWVudCgpLm1h
cmtlcnMoKS5tYXJrZXJzRm9yKG5vZGUsIG1hcmtlclR5cGVzKTsKICAgICBpZiAobWFya2Vycy5z
aXplKCkgPD0gaW5kZXgpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICByZXR1cm4gbWFya2Vyc1tpbmRleF07CiB9CiAKIFBhc3NSZWZQdHI8UmFuZ2U+IElu
dGVybmFsczo6bWFya2VyUmFuZ2VGb3JOb2RlKE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgbWFy
a2VyVHlwZSwgdW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIERvY3Vt
ZW50TWFya2VyKiBtYXJrZXIgPSBtYXJrZXJBdChub2RlLCBtYXJrZXJUeXBlLCBpbmRleCwgZWMp
OworICAgIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqIG1hcmtlciA9IG1hcmtlckF0KG5vZGUsIG1h
cmtlclR5cGUsIGluZGV4LCBlYyk7CiAgICAgaWYgKCFtYXJrZXIpCi0gICAgICAgIHJldHVybiAw
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShub2Rl
LT5kb2N1bWVudCgpLCBub2RlLCBtYXJrZXItPnN0YXJ0T2Zmc2V0KCksIG5vZGUsIG1hcmtlci0+
ZW5kT2Zmc2V0KCkpOwogfQogCiBTdHJpbmcgSW50ZXJuYWxzOjptYXJrZXJEZXNjcmlwdGlvbkZv
ck5vZGUoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBtYXJrZXJUeXBlLCB1bnNpZ25lZCBpbmRl
eCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgRG9jdW1lbnRNYXJrZXIqIG1hcmtlciA9IG1h
cmtlckF0KG5vZGUsIG1hcmtlclR5cGUsIGluZGV4LCBlYyk7CisgICAgUmVuZGVyZWREb2N1bWVu
dE1hcmtlciogbWFya2VyID0gbWFya2VyQXQobm9kZSwgbWFya2VyVHlwZSwgaW5kZXgsIGVjKTsK
ICAgICBpZiAoIW1hcmtlcikKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIHJldHVybiBt
YXJrZXItPmRlc2NyaXB0aW9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFscy5oIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAppbmRleCBk
ZjAyZTM0YTgxMjhlOGE5ODE1ZmVhZTY2NDU2MDQ4MDlhZDk2MzJiLi4wZTM1ZTkyMWJmOWNlMmVl
NjQyYzgxYTMzNTMyYzFmOWU4NTc2ZWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgK
QEAgLTQ2LDcgKzQ2LDYgQEAgY2xhc3MgQ2xpZW50UmVjdExpc3Q7CiBjbGFzcyBET01TdHJpbmdM
aXN0OwogY2xhc3MgRE9NV2luZG93OwogY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBEb2N1bWVudE1h
cmtlcjsKIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbER1bW15OwpAQCAtNTcsNiArNTYsNyBAQCBjbGFzcyBNZW1vcnlJbmZvOwogY2xh
c3MgTm9kZTsKIGNsYXNzIFBhZ2U7CiBjbGFzcyBSYW5nZTsKK2NsYXNzIFJlbmRlcmVkRG9jdW1l
bnRNYXJrZXI7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOwogY2xhc3MgU291cmNlQnVmZmVyOwpAQCAtMzUxLDcgKzM1MSw3IEBAIHBy
aXZhdGU6CiAgICAgRnJhbWUqIGZyYW1lKCkgY29uc3Q7CiAgICAgVmVjdG9yPFN0cmluZz4gaWNv
blVSTHMoRG9jdW1lbnQqLCBpbnQgaWNvblR5cGVzTWFzaykgY29uc3Q7CiAKLSAgICBEb2N1bWVu
dE1hcmtlciogbWFya2VyQXQoTm9kZSosIGNvbnN0IFN0cmluZyYgbWFya2VyVHlwZSwgdW5zaWdu
ZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBSZW5kZXJlZERvY3VtZW50TWFya2VyKiBt
YXJrZXJBdChOb2RlKiwgY29uc3QgU3RyaW5nJiBtYXJrZXJUeXBlLCB1bnNpZ25lZCBpbmRleCwg
RXhjZXB0aW9uQ29kZSYpOwogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgUmVmUHRyPERPTVdp
bmRvdz4gbV9mcm9udGVuZFdpbmRvdzsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yRnJv
bnRlbmRDbGllbnREdW1teT4gbV9mcm9udGVuZENsaWVudDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240075</attachid>
            <date>2014-10-18 15:54:24 -0700</date>
            <delta_ts>2014-10-18 18:27:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137858-20141018155430.patch</filename>
            <type>text/plain</type>
            <size>31534</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0ODY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjcxMzE1ZDk5ZDE3ZWIx
YjZmMTVlZjFiY2ZlMjQ2ZGNkN2JlNzc2Zi4uMzJiZWVjYzhmMmJlYTZhNzIxODkwM2M0OGM1OTQ3
YzlkYTRhMjcyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDUzIEBACiAyMDE0LTEwLTE4ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgS2lsbCB0b1JlbmRlcmVkRG9j
dW1lbnRNYXJrZXIoKSBieSB1c2luZyB0aWdodGVyIHR5cGluZworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3ODU4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgS2lsbCB0b1JlbmRlcmVkRG9jdW1lbnRNYXJr
ZXIoKSBieSB1c2luZyB0aWdodGVyIHR5cGluZy4gVGhpcyBtZXRob2QKKyAgICAgICAgd2FzIGRv
aW5nIG5vIHR5cGUgdmFsaWRhdGlvbiwganVzdCBhIHN0YXRpY19jYXN0PD4oKS4KKworICAgICAg
ICBObyBuZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIGRvbS9Eb2N1
bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjphZGRUZXh0TWF0Y2hNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJzRm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFya2Vyc0luUmFuZ2UpOgorICAgICAgICAoRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjpoYXNNYXJrZXJzKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyLmg6CisgICAgICAgICogZG9tL1JlbmRlcmVkRG9jdW1lbnRNYXJrZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6OnRvUmVuZGVyZWREb2N1bWVudE1hcmtlcik6IERlbGV0ZWQu
CisgICAgICAgICogZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Om1hcmtlcnNIYXZlSWRlbnRpY2FsRGVzY3JpcHRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVj
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZWNv
cmRTcGVsbGNoZWNrZXJSZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpwcm9jZXNzTWFya2Vyc09uVGV4dFRv
QmVSZXBsYWNlZEJ5UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OmFwcGx5RGljdGF0aW9uQWx0ZXJuYXRpdmUpOgorICAgICAgICAqIGVkaXRpbmcv
Q29tcG9zaXRlRWRpdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29weU1hcmtlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VUZXh0SW5O
b2RlUHJlc2VydmluZ01hcmtlcnMpOgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9u
Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpv
cmlnaW5hbFN0cmluZ0ZvckF1dG9jb3JyZWN0aW9uQXRCZWdpbm5pbmdPZlNlbGVjdGlvbik6Cisg
ICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp1
cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzTWFya2VyRm9yKToKKyAgICAgICAgKiByZW5kZXJp
bmcvSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpw
YWludERvY3VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBh
aW50VGV4dE1hdGNoTWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmNv
bXB1dGVSZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
VGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcnMpOgorICAgICAgICAqIHJlbmRlcmluZy9Jbmxp
bmVUZXh0Qm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVGbG93Qm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZUZsb3dCb3g6OmNvbXB1dGVUZXh0TWF0Y2hN
YXJrZXJSZWN0Rm9yUmVuZGVyZXIpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6bWFya2VyQXQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZXJuYWxzOjptYXJrZXJSYW5nZUZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW50
ZXJuYWxzOjptYXJrZXJEZXNjcmlwdGlvbkZvck5vZGUpOgorICAgICAgICAqIHRlc3RpbmcvSW50
ZXJuYWxzLmg6CisKKzIwMTQtMTAtMTggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
KwogICAgICAgICBbTWFjXSBVc2UgRmFzdCBlbnVtZXJhdGlvbiBjb25zaXN0ZW50bHkgaW4gV2Vi
Rm9udENhY2hlLm1tCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzc3OTEKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFy
a2VyQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyLmNwcAppbmRleCA5Y2I4YWU2NTdkNmVhZDZmY2FlZjNiMTkxY2Y2YWUwYWVhYjcwZmQw
Li40ZGNkZWU3OTM2MWI5NjQ5YWZlYzc0ZGMwZWVhZWE1OGNhMzQ1NWIyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcApAQCAtMTAxLDggKzEw
MSw4IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRUZXh0TWF0Y2hNYXJrZXIo
Y29uc3QgUmFuZ2UqIHJhbmdlLCBib29sIGFjdGl2CiAgICAgICAgICAgICAvLyB0aGUgd2hvbGUg
cHVycG9zZSBvZiB0aWNrbWFya3Mgb24gdGhlIHNjcm9sbGJhciBpcyB0byBzaG93IHdoZXJlCiAg
ICAgICAgICAgICAvLyBtYXRjaGVzIG9mZi1zY3JlZW4gYXJlICh0aGF0IGhhdmVuJ3QgYmVlbiBw
YWludGVkIHlldCkuCiAgICAgICAgICAgICBOb2RlKiBub2RlID0gdGV4dFBpZWNlLT5zdGFydENv
bnRhaW5lcigpOwotICAgICAgICAgICAgVmVjdG9yPERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9
IG1hcmtlcnNGb3Iobm9kZSk7Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJlZERvY3Vt
ZW50TWFya2VyKj4obWFya2Vyc1ttYXJrZXJzLnNpemUoKSAtIDFdKS0+c2V0UmVuZGVyZWRSZWN0
KHJhbmdlLT5ib3VuZGluZ0JveCgpKTsKKyAgICAgICAgICAgIFZlY3RvcjxSZW5kZXJlZERvY3Vt
ZW50TWFya2VyKj4gbWFya2VycyA9IG1hcmtlcnNGb3Iobm9kZSk7CisgICAgICAgICAgICBtYXJr
ZXJzW21hcmtlcnMuc2l6ZSgpIC0gMV0tPnNldFJlbmRlcmVkUmVjdChyYW5nZS0+Ym91bmRpbmdC
b3goKSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0zNzYsOSArMzc2LDkgQEAgRG9jdW1lbnRN
YXJrZXIqIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFya2VyQ29udGFpbmluZ1BvaW50KGNv
bnN0IExheW91dFBvaW4KICAgICByZXR1cm4gMDsKIH0KIAotVmVjdG9yPERvY3VtZW50TWFya2Vy
Kj4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJzRm9yKE5vZGUqIG5vZGUsIERvY3Vt
ZW50TWFya2VyOjpNYXJrZXJUeXBlcyBtYXJrZXJUeXBlcykKK1ZlY3RvcjxSZW5kZXJlZERvY3Vt
ZW50TWFya2VyKj4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJzRm9yKE5vZGUqIG5v
ZGUsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyBtYXJrZXJUeXBlcykKIHsKLSAgICBWZWN0
b3I8RG9jdW1lbnRNYXJrZXIqPiByZXN1bHQ7CisgICAgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRN
YXJrZXIqPiByZXN1bHQ7CiAgICAgTWFya2VyTGlzdCogbGlzdCA9IG1fbWFya2Vycy5nZXQobm9k
ZSk7CiAgICAgaWYgKCFsaXN0KQogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMzkxLDEyICsz
OTEsMTIgQEAgVmVjdG9yPERvY3VtZW50TWFya2VyKj4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjptYXJrZXJzRm9yKE5vZGUqIG5vZGUsIERvY3VtZW4KICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci1WZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtl
cnNJblJhbmdlKFJhbmdlKiByYW5nZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGVzIG1hcmtl
clR5cGVzKQorVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBEb2N1bWVudE1hcmtlckNv
bnRyb2xsZXI6Om1hcmtlcnNJblJhbmdlKFJhbmdlKiByYW5nZSwgRG9jdW1lbnRNYXJrZXI6Ok1h
cmtlclR5cGVzIG1hcmtlclR5cGVzKQogewogICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKG1h
cmtlclR5cGVzKSkKLSAgICAgICAgcmV0dXJuIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+KCk7Cisg
ICAgICAgIHJldHVybiBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+KCk7CiAKLSAgICBW
ZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiBmb3VuZE1hcmtlcnM7CisgICAgVmVjdG9yPFJlbmRlcmVk
RG9jdW1lbnRNYXJrZXIqPiBmb3VuZE1hcmtlcnM7CiAKICAgICBOb2RlKiBzdGFydENvbnRhaW5l
ciA9IHJhbmdlLT5zdGFydENvbnRhaW5lcigpOwogICAgIEFTU0VSVChzdGFydENvbnRhaW5lcik7
CkBAIC00MDUsMTAgKzQwNSw4IEBAIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+IERvY3VtZW50TWFy
a2VyQ29udHJvbGxlcjo6bWFya2Vyc0luUmFuZ2UoUmFuZ2UqIHJhbmdlLCBECiAKICAgICBOb2Rl
KiBwYXN0TGFzdE5vZGUgPSByYW5nZS0+cGFzdExhc3ROb2RlKCk7CiAgICAgZm9yIChOb2RlKiBu
b2RlID0gcmFuZ2UtPmZpcnN0Tm9kZSgpOyBub2RlICE9IHBhc3RMYXN0Tm9kZTsgbm9kZSA9IE5v
ZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKLSAgICAgICAgVmVjdG9yPERvY3VtZW50TWFya2Vy
Kj4gbWFya2VycyA9IG1hcmtlcnNGb3Iobm9kZSk7Ci0gICAgICAgIFZlY3RvcjxEb2N1bWVudE1h
cmtlcio+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXJrZXJzLmVuZCgpOwotICAgICAgICBmb3Ig
KFZlY3RvcjxEb2N1bWVudE1hcmtlcio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1hcmtlcnMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBEb2N1bWVudE1hcmtlciogbWFy
a2VyID0gKml0OworICAgICAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtl
cnMgPSBtYXJrZXJzRm9yKG5vZGUpOworICAgICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IG1hcmtl
cnMpIHsKICAgICAgICAgICAgIGlmICghbWFya2VyVHlwZXMuY29udGFpbnMobWFya2VyLT50eXBl
KCkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKG5vZGUgPT0g
c3RhcnRDb250YWluZXIgJiYgbWFya2VyLT5lbmRPZmZzZXQoKSA8PSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4ocmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpKQpAQCAtNjc5LDEwICs2NzcsOCBAQCBib29sIERv
Y3VtZW50TWFya2VyQ29udHJvbGxlcjo6aGFzTWFya2VycyhSYW5nZSogcmFuZ2UsIERvY3VtZW50
TWFya2VyOjpNYXJrZXJUeQogCiAgICAgTm9kZSogcGFzdExhc3ROb2RlID0gcmFuZ2UtPnBhc3RM
YXN0Tm9kZSgpOwogICAgIGZvciAoTm9kZSogbm9kZSA9IHJhbmdlLT5maXJzdE5vZGUoKTsgbm9k
ZSAhPSBwYXN0TGFzdE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7Ci0g
ICAgICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBtYXJrZXJzRm9yKG5vZGUp
OwotICAgICAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bWFya2Vycy5lbmQoKTsKLSAgICAgICAgZm9yIChWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPjo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtYXJrZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICAgICAgRG9jdW1lbnRNYXJrZXIqIG1hcmtlciA9ICppdDsKKyAgICAgICAgVmVjdG9yPFJl
bmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gbWFya2Vyc0Zvcihub2RlKTsKKyAgICAg
ICAgZm9yIChhdXRvKiBtYXJrZXIgOiBtYXJrZXJzKSB7CiAgICAgICAgICAgICBpZiAoIW1hcmtl
clR5cGVzLmNvbnRhaW5zKG1hcmtlci0+dHlwZSgpKSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIGlmIChub2RlID09IHN0YXJ0Q29udGFpbmVyICYmIG1hcmtlci0+ZW5k
T2Zmc2V0KCkgPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJhbmdlLT5zdGFydE9mZnNldCgpKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaAppbmRleCBi
ODVhMzkzNDQyM2UxMzk2OGNkMTQ1YTE3YmYyMWJkNmU0YWNiYjJiLi43NjlkZDkyMjdmNDlhZGY5
YmE1MTA0ZmNjMDhjNjViNjA0NTdmNjNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50TWFya2VyQ29udHJvbGxlci5oCkBAIC04NCw4ICs4NCw4IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldE1hcmtlcnNBY3RpdmUoTm9kZSosIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBl
bmRPZmZzZXQsIGJvb2wpOwogCiAgICAgRG9jdW1lbnRNYXJrZXIqIG1hcmtlckNvbnRhaW5pbmdQ
b2ludChjb25zdCBMYXlvdXRQb2ludCYsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlKTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzRm9yKE5vZGUq
LCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZXMgPSBEb2N1bWVudE1hcmtlcjo6QWxsTWFya2Vy
cygpKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJz
SW5SYW5nZShSYW5nZSosIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyk7CisgICAgV0VCQ09S
RV9FWFBPUlQgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzRm9yKE5vZGUq
LCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZXMgPSBEb2N1bWVudE1hcmtlcjo6QWxsTWFya2Vy
cygpKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+
IG1hcmtlcnNJblJhbmdlKFJhbmdlKiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGVzKTsKICAg
ICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8SW50UmVjdD4gcmVuZGVyZWRSZWN0c0Zvck1hcmtlcnMo
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUpOwogICAgIHZvaWQgY2xlYXJEZXNjcmlwdGlvbk9u
TWFya2Vyc0ludGVyc2VjdGluZ1JhbmdlKFJhbmdlKiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5
cGVzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JlbmRlcmVkRG9jdW1lbnRN
YXJrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SZW5kZXJlZERvY3VtZW50TWFya2VyLmgKaW5k
ZXggN2U4ZmUyYjU1MmQ0YTVmMGIzM2ZkYWVlNzY1ZTg5MWE0Nzk5ODM0OC4uN2Q0ODExNWQxMDI5
MjQxOWY5NzkyZDc4Njk2NGRhYjQzMzhhYjQyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL1JlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmVu
ZGVyZWREb2N1bWVudE1hcmtlci5oCkBAIC02MiwxMSArNjIsNiBAQCBpbmxpbmUgdm9pZCBSZW5k
ZXJlZERvY3VtZW50TWFya2VyOjppbnZhbGlkYXRlKGNvbnN0IExheW91dFJlY3QmIHIpCiAgICAg
ICAgIGludmFsaWRhdGUoKTsKIH0KIAotaW5saW5lIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqIHRv
UmVuZGVyZWREb2N1bWVudE1hcmtlcihEb2N1bWVudE1hcmtlciogbWFya2VyKQotewotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4obWFya2VyKTsKLX0KLQog
fSAvLyBuYW1lc3BhY2UKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAppbmRleCAzYzE0ZGZjMDVjNWYzYTU3NDI2
NWE2OWYzYTM0NTY4MmUyNDUyZjA4Li5kM2E1OWE2YjY5MWVjMDI3ZWE4OTVlZjljNjA5ZDQ1ZmZl
OGRlYTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlci5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJGcmFtZS5oIgog
I2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJSZW5k
ZXJlZERvY3VtZW50TWFya2VyLmgiCiAjaW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFu
ZC5oIgogI2luY2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiVGV4dENoZWNr
aW5nSGVscGVyLmgiCkBAIC0xMTQsNyArMTE1LDcgQEAgc3RhdGljIGNvbnN0IFZlY3RvcjxEb2N1
bWVudE1hcmtlcjo6TWFya2VyVHlwZT4mIG1hcmtlclR5cGVzRm9yQXBwbGllZERpY3RhdGlvbkEK
ICAgICByZXR1cm4gbWFya2VyVHlwZXNGb3JBcHBsaWVkRGljdGF0aW9uQWx0ZXJuYXRpdmU7CiB9
CiAKLXN0YXRpYyBib29sIG1hcmtlcnNIYXZlSWRlbnRpY2FsRGVzY3JpcHRpb24oY29uc3QgVmVj
dG9yPERvY3VtZW50TWFya2VyKj4mIG1hcmtlcnMpCitzdGF0aWMgYm9vbCBtYXJrZXJzSGF2ZUlk
ZW50aWNhbERlc2NyaXB0aW9uKGNvbnN0IFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4m
IG1hcmtlcnMpCiB7CiAgICAgaWYgKG1hcmtlcnMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTQ2OSwxMyArNDcwLDkgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
OjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24KICAgICAg
ICAgcmV0dXJuOwogCiAgICAgTm9kZSogbm9kZSA9IHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsK
LSAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gbm9kZS0+ZG9jdW1lbnQoKS5t
YXJrZXJzKCkubWFya2Vyc0Zvcihub2RlKTsKLSAgICBzaXplX3QgbWFya2VyQ291bnQgPSBtYXJr
ZXJzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcmtlckNvdW50OyArK2kp
IHsKLSAgICAgICAgY29uc3QgRG9jdW1lbnRNYXJrZXIqIG1hcmtlciA9IG1hcmtlcnNbaV07Ci0g
ICAgICAgIGlmICghbWFya2VyKQotICAgICAgICAgICAgY29udGludWU7Ci0KKyAgICBWZWN0b3I8
UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBub2RlLT5kb2N1bWVudCgpLm1hcmtl
cnMoKS5tYXJrZXJzRm9yKG5vZGUpOworICAgIGZvciAoY29uc3QgYXV0byogbWFya2VyIDogbWFy
a2VycykgeworICAgICAgICBBU1NFUlQobWFya2VyKTsKICAgICAgICAgaWYgKHJlc3BvbmRUb01h
cmtlckF0RW5kT2ZXb3JkKCptYXJrZXIsIHBvc2l0aW9uKSkKICAgICAgICAgICAgIGJyZWFrOwog
ICAgIH0KQEAgLTU1NCw3ICs1NTEsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
OnJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKAogICAgIGlm
ICghcmFuZ2VPZkNvcnJlY3Rpb24pCiAgICAgICAgIHJldHVybjsKICAgICBEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXImIG1hcmtlcnMgPSByYW5nZU9mQ29ycmVjdGlvbi0+c3RhcnRDb250YWluZXIo
KS0+ZG9jdW1lbnQoKS5tYXJrZXJzKCk7Ci0gICAgVmVjdG9yPERvY3VtZW50TWFya2VyKj4gY29y
cmVjdGVkT25jZU1hcmtlcnMgPSBtYXJrZXJzLm1hcmtlcnNJblJhbmdlKHJhbmdlT2ZDb3JyZWN0
aW9uLCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCk7CisgICAgVmVjdG9yPFJlbmRlcmVk
RG9jdW1lbnRNYXJrZXIqPiBjb3JyZWN0ZWRPbmNlTWFya2VycyA9IG1hcmtlcnMubWFya2Vyc0lu
UmFuZ2UocmFuZ2VPZkNvcnJlY3Rpb24sIERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkKTsK
ICAgICBpZiAoY29ycmVjdGVkT25jZU1hcmtlcnMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47
CiAKQEAgLTYxMywxMCArNjEwLDkgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpw
cm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KGNvbnN0IFQKICAgICBQb3Np
dGlvbiBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiA9IGJlZ2lubmluZ09mUmFuZ2UucHJldmlv
dXMoKTsKICAgICBSZWZQdHI8UmFuZ2U+IHByZWNlZGluZ0NoYXJhY3RlclJhbmdlID0gUmFuZ2U6
OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiwg
YmVnaW5uaW5nT2ZSYW5nZSk7CiAKLSAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJz
ID0gbWFya2VyQ29udHJvbGxlci5tYXJrZXJzSW5SYW5nZShwcmVjZWRpbmdDaGFyYWN0ZXJSYW5n
ZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkRlbGV0ZWRBdXRvY29ycmVjdGlvbik7Ci0KLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcmtlcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYg
KG1hcmtlcnNbaV0tPmRlc2NyaXB0aW9uKCkgPT0gc3RyaW5nVG9CZVJlcGxhY2VkKQorICAgIFZl
Y3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IG1hcmtlckNvbnRyb2xsZXIu
bWFya2Vyc0luUmFuZ2UocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFy
a2VyOjpEZWxldGVkQXV0b2NvcnJlY3Rpb24pOworICAgIGZvciAoY29uc3QgYXV0byogbWFya2Vy
IDogbWFya2VycykgeworICAgICAgICBpZiAobWFya2VyLT5kZXNjcmlwdGlvbigpID09IHN0cmlu
Z1RvQmVSZXBsYWNlZCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTcz
NSw3ICs3MzEsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5RGljdGF0
aW9uQWx0ZXJuYXRpdmUoY29uc3QgU3RyaW5nJiBhbHRlcm5hdAogICAgIGlmICghc2VsZWN0aW9u
IHx8ICFlZGl0b3Iuc2hvdWxkSW5zZXJ0VGV4dChhbHRlcm5hdGl2ZVN0cmluZywgc2VsZWN0aW9u
LmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25QYXN0ZWQpKQogICAgICAgICByZXR1cm47CiAgICAg
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyJiBtYXJrZXJzID0gc2VsZWN0aW9uLT5zdGFydENvbnRh
aW5lcigpLT5kb2N1bWVudCgpLm1hcmtlcnMoKTsKLSAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXIq
PiBkaWN0YXRpb25BbHRlcm5hdGl2ZXNNYXJrZXJzID0gbWFya2Vycy5tYXJrZXJzSW5SYW5nZShz
ZWxlY3Rpb24uZ2V0KCksIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMpOwor
ICAgIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gZGljdGF0aW9uQWx0ZXJuYXRpdmVz
TWFya2VycyA9IG1hcmtlcnMubWFya2Vyc0luUmFuZ2Uoc2VsZWN0aW9uLmdldCgpLCBEb2N1bWVu
dE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGRpY3RhdGlvbkFsdGVybmF0aXZlc01hcmtlcnMuc2l6ZSgpOyArK2kpCiAgICAgICAgIHJl
bW92ZURpY3RhdGlvbkFsdGVybmF0aXZlc0Zvck1hcmtlcihkaWN0YXRpb25BbHRlcm5hdGl2ZXNN
YXJrZXJzW2ldKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3Np
dGVFZGl0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRD
b21tYW5kLmNwcAppbmRleCAwNjY1NGVhMmNhNTIwZjY2MmNhN2U4ZTkzZTE1MGQ4NjU0YWEzYzNh
Li42NWU0YTYwOGYwNGZiYjk5ODFmMzYzNjQ3ZmQwMTU0MDQzNjAwZGVmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcApAQCAtNTcsNiArNTcs
NyBAQAogI2luY2x1ZGUgIlJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kLmgiCiAj
aW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgorI2lu
Y2x1ZGUgIlJlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaCIKICNpbmNsdWRlICJSZXBsYWNlTm9kZVdp
dGhTcGFuQ29tbWFuZC5oIgogI2luY2x1ZGUgIlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgiCiAj
aW5jbHVkZSAiU2NvcGVkRXZlbnRRdWV1ZS5oIgpAQCAtNTc0LDcgKzU3NSw3IEBAIFBvc2l0aW9u
IENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZXBsYWNlU2VsZWN0ZWRUZXh0SW5Ob2RlKGNvbnN0IFN0
cmluZyYgdGV4dCkKICAgICByZXR1cm4gUG9zaXRpb24odGV4dE5vZGUucmVsZWFzZSgpLCBzdGFy
dC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSArIHRleHQubGVuZ3RoKCkpOwogfQogCi1zdGF0aWMg
dm9pZCBjb3B5TWFya2Vycyhjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiYgbWFya2VyUG9p
bnRlcnMsIFZlY3RvcjxEb2N1bWVudE1hcmtlcj4mIG1hcmtlcnMpCitzdGF0aWMgdm9pZCBjb3B5
TWFya2Vycyhjb25zdCBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+JiBtYXJrZXJQb2lu
dGVycywgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXI+JiBtYXJrZXJzKQogewogICAgIHNp
emVfdCBhcnJheVNpemUgPSBtYXJrZXJQb2ludGVycy5zaXplKCk7CiAgICAgbWFya2Vycy5yZXNl
cnZlQ2FwYWNpdHkoYXJyYXlTaXplKTsKQEAgLTU4NiwxNSArNTg3LDE1IEBAIHZvaWQgQ29tcG9z
aXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VUZXh0SW5Ob2RlUHJlc2VydmluZ01hcmtlcnMoUGFzc1Jl
ZlB0cjxUZXh0PiBwCiB7CiAgICAgUmVmUHRyPFRleHQ+IG5vZGUocHJwTm9kZSk7CiAgICAgRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyJiBtYXJrZXJDb250cm9sbGVyID0gZG9jdW1lbnQoKS5tYXJr
ZXJzKCk7Ci0gICAgVmVjdG9yPERvY3VtZW50TWFya2VyPiBtYXJrZXJzOworICAgIFZlY3RvcjxS
ZW5kZXJlZERvY3VtZW50TWFya2VyPiBtYXJrZXJzOwogICAgIGNvcHlNYXJrZXJzKG1hcmtlckNv
bnRyb2xsZXIubWFya2Vyc0luUmFuZ2UoUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBub2RlLCBv
ZmZzZXQsIG5vZGUsIG9mZnNldCArIGNvdW50KS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkFsbE1h
cmtlcnMoKSksIG1hcmtlcnMpOwogICAgIHJlcGxhY2VUZXh0SW5Ob2RlKG5vZGUsIG9mZnNldCwg
Y291bnQsIHJlcGxhY2VtZW50VGV4dCk7CiAgICAgUmVmUHRyPFJhbmdlPiBuZXdSYW5nZSA9IFJh
bmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgbm9kZSwgb2Zmc2V0LCBub2RlLCBvZmZzZXQgKyByZXBs
YWNlbWVudFRleHQubGVuZ3RoKCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWFya2Vy
cy5zaXplKCk7ICsraSkKKyAgICBmb3IgKGNvbnN0IGF1dG8mIG1hcmtlciA6IG1hcmtlcnMpCiAj
aWYgUExBVEZPUk0oSU9TKQotICAgICAgICBtYXJrZXJDb250cm9sbGVyLmFkZE1hcmtlcihuZXdS
YW5nZS5nZXQoKSwgbWFya2Vyc1tpXS50eXBlKCksIG1hcmtlcnNbaV0uZGVzY3JpcHRpb24oKSwg
bWFya2Vyc1tpXS5hbHRlcm5hdGl2ZXMoKSwgbWFya2Vyc1tpXS5tZXRhZGF0YSgpKTsKKyAgICAg
ICAgbWFya2VyQ29udHJvbGxlci5hZGRNYXJrZXIobmV3UmFuZ2UuZ2V0KCksIG1hcmtlci50eXBl
KCksIG1hcmtlci5kZXNjcmlwdGlvbigpLCBtYXJrZXIuYWx0ZXJuYXRpdmVzKCksIG1hcmtlci5t
ZXRhZGF0YSgpKTsKICNlbHNlCi0gICAgICAgIG1hcmtlckNvbnRyb2xsZXIuYWRkTWFya2VyKG5l
d1JhbmdlLmdldCgpLCBtYXJrZXJzW2ldLnR5cGUoKSwgbWFya2Vyc1tpXS5kZXNjcmlwdGlvbigp
KTsKKyAgICAgICAgbWFya2VyQ29udHJvbGxlci5hZGRNYXJrZXIobmV3UmFuZ2UuZ2V0KCksIG1h
cmtlci50eXBlKCksIG1hcmtlci5kZXNjcmlwdGlvbigpKTsKICNlbmRpZiAvLyBQTEFURk9STShJ
T1MpCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQuY3BwCmluZGV4IGExMDdlNjk2ZTQxNWE4ODhiMDQ2OTZjYWU1ZDVkNGE5M2VhMjMxY2Mu
LjlkYTNjYmNlZjc2M2NjNzQxYWRmNTA3ZWQ4OWE3YjI2NzNkZDVjMmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtNDEsNiAr
NDEsNyBAQAogI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJs
ZUNlbGwuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCisjaW5jbHVkZSAiUmVuZGVyZWREb2N1
bWVudE1hcmtlci5oIgogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJWaXNpYmxlVW5pdHMu
aCIKIApAQCAtNzY1LDkgKzc2Niw4IEBAIFN0cmluZyBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpv
cmlnaW5hbFN0cmluZ0ZvckF1dG9jb3JyZWN0aW9uQXRCZWdpbm5pbmdPZlNlbGVjCiAgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKIAogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VPZkZpcnN0Q2hhcmFj
dGVyID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBzdGFydE9mU2VsZWN0aW9uLmRlZXBFcXVp
dmFsZW50KCksIG5leHRQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpKTsKLSAgICBWZWN0b3I8RG9j
dW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0luUmFu
Z2UocmFuZ2VPZkZpcnN0Q2hhcmFjdGVyLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJl
Y3RlZCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXJrZXJzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIGNvbnN0IERvY3VtZW50TWFya2VyKiBtYXJrZXIgPSBtYXJrZXJzW2ldOworICAg
IFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IGRvY3VtZW50KCkubWFy
a2VycygpLm1hcmtlcnNJblJhbmdlKHJhbmdlT2ZGaXJzdENoYXJhY3Rlci5nZXQoKSwgRG9jdW1l
bnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQpOworICAgIGZvciAoYXV0byogbWFya2VyIDogbWFya2Vy
cykgewogICAgICAgICBpbnQgc3RhcnRPZmZzZXQgPSBtYXJrZXItPnN0YXJ0T2Zmc2V0KCk7CiAg
ICAgICAgIGlmIChzdGFydE9mZnNldCA9PSBzdGFydE9mU2VsZWN0aW9uLmRlZXBFcXVpdmFsZW50
KCkub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpCiAgICAgICAgICAgICByZXR1cm4gbWFya2VyLT5k
ZXNjcmlwdGlvbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3Iu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDc3NTljNmZhMGNk
NDVmMmZmOTg0YzIzYmExZmM2M2Y4YzhmZDI5NmQuLjZlMDg5NTE1MzdlMjI2NWRjZGFiN2VlMTYy
MjVkZDBkMGEwYzI3YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9y
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTcxLDYgKzcx
LDcgQEAKICNpbmNsdWRlICJSZW1vdmVGb3JtYXRDb21tYW5kLmgiCiAjaW5jbHVkZSAiUmVuZGVy
QmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbC5oIgorI2luY2x1ZGUgIlJlbmRl
cmVkRG9jdW1lbnRNYXJrZXIuaCIKICNpbmNsdWRlICJSZW5kZXJlZFBvc2l0aW9uLmgiCiAjaW5j
bHVkZSAiUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgpA
QCAtMjc1Myw5ICsyNzU0LDkgQEAgdm9pZCBFZGl0b3I6OnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0Fm
ZmVjdGVkQnlFZGl0aW5nKGJvb2wgZG9Ob3RSZW1vdmVJZlNlbGVjdGlvbkEKICAgICAvLyBvZiBt
YXJrZXIgdGhhdCBjb250YWlucyB0aGUgd29yZCBpbiBxdWVzdGlvbiwgYW5kIHJlbW92ZSBtYXJr
ZXIgb24gdGhhdCB3aG9sZSByYW5nZS4KICAgICBSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9IFJh
bmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3RhcnRPZkZpcnN0V29yZC5kZWVwRXF1aXZhbGVudCgp
LCBlbmRPZkxhc3RXb3JkLmRlZXBFcXVpdmFsZW50KCkpOwogCi0gICAgVmVjdG9yPERvY3VtZW50
TWFya2VyKj4gbWFya2VycyA9IGRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNJblJhbmdlKHdv
cmRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlcyk7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXJrZXJzLnNpemUoKTsgKytpKQotICAgICAgICBt
X2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPnJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlc0Zv
ck1hcmtlcihtYXJrZXJzW2ldKTsKKyAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+
IG1hcmtlcnMgPSBkb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzSW5SYW5nZSh3b3JkUmFuZ2Uu
Z2V0KCksIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMpOworICAgIGZvciAo
YXV0byogbWFya2VyIDogbWFya2VycykKKyAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyLT5yZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXNGb3JNYXJrZXIobWFya2VyKTsKIAogI2lm
IFBMQVRGT1JNKElPUykKICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKHdv
cmRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nIHwgRG9jdW1lbnRNYXJrZXI6
OkNvcnJlY3Rpb25JbmRpY2F0b3IgfCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1w
dGlvbiB8IERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMgfCBEb2N1bWVudE1h
cmtlcjo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcywgRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CkBAIC0zNTQyLDkgKzM1
NDMsOCBAQCBib29sIEVkaXRvcjo6c2VsZWN0aW9uU3RhcnRIYXNNYXJrZXJGb3IoRG9jdW1lbnRN
YXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSwgaQogCiAgICAgdW5zaWduZWQgaW50IHN0YXJ0
T2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihmcm9tKTsKICAgICB1bnNpZ25lZCBp
bnQgZW5kT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihmcm9tICsgbGVuZ3RoKTsK
LSAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gZG9jdW1lbnQoKS5tYXJrZXJz
KCkubWFya2Vyc0Zvcihub2RlKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcmtlcnMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgRG9jdW1lbnRNYXJrZXIqIG1hcmtlciA9IG1hcmtlcnNb
aV07CisgICAgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gZG9jdW1l
bnQoKS5tYXJrZXJzKCkubWFya2Vyc0Zvcihub2RlKTsKKyAgICBmb3IgKGF1dG8qIG1hcmtlciA6
IG1hcmtlcnMpIHsKICAgICAgICAgaWYgKG1hcmtlci0+c3RhcnRPZmZzZXQoKSA8PSBzdGFydE9m
ZnNldCAmJiBlbmRPZmZzZXQgPD0gbWFya2VyLT5lbmRPZmZzZXQoKSAmJiBtYXJrZXItPnR5cGUo
KSA9PSBtYXJrZXJUeXBlKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCmluZGV4IDM1NDc5MGNmMzkyYTE4
MzdlYWI3NDViMDg2YjgwMjBmZDdjYmVlY2QuLmNkMWQ5OTVkMDQzOTFlMGNkNmZkMDEzN2MyMGMx
MTU1M2FlZDA1OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVU
ZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5j
cHAKQEAgLTEwNjEsNyArMTA2MSw3IEBAIHN0YXRpYyBHcmFwaGljc0NvbnRleHQ6OkRvY3VtZW50
TWFya2VyTGluZVN0eWxlIGxpbmVTdHlsZUZvck1hcmtlclR5cGUoRG9jdW1lbnRNCiAgICAgfQog
fQogCi12b2lkIElubGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXIoR3JhcGhpY3NDb250
ZXh0KiBwdCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBEb2N1bWVudE1hcmtlciogbWFy
a2VyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQsIGJvb2wgZ3Jh
bW1hcikKK3ZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcihHcmFwaGljc0Nv
bnRleHQqIHB0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFJlbmRlcmVkRG9jdW1lbnRN
YXJrZXIqIG1hcmtlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250JiBmb250
LCBib29sIGdyYW1tYXIpCiB7CiAgICAgLy8gTmV2ZXIgcHJpbnQgc3BlbGxpbmcvZ3JhbW1hciBt
YXJrZXJzICg1MzI3ODg3KQogICAgIGlmIChyZW5kZXJlcigpLmRvY3VtZW50KCkucHJpbnRpbmco
KSkKQEAgLTExMDcsNyArMTEwNyw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVu
dE1hcmtlcihHcmFwaGljc0NvbnRleHQqIHB0LCBjb25zdCBGbG9hdFBvaW50JiBiCiAgICAgICAg
IGlmIChncmFtbWFyIHx8IGlzRGljdGF0aW9uTWFya2VyKSB7CiAgICAgICAgICAgICBtYXJrZXJS
ZWN0Lm1vdmUoLWJveE9yaWdpbi54KCksIC1ib3hPcmlnaW4ueSgpKTsKICAgICAgICAgICAgIG1h
cmtlclJlY3QgPSByZW5kZXJlcigpLmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KG1hcmtl
clJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwotICAgICAgICAgICAgdG9SZW5kZXJlZERv
Y3VtZW50TWFya2VyKG1hcmtlciktPnNldFJlbmRlcmVkUmVjdChtYXJrZXJSZWN0KTsKKyAgICAg
ICAgICAgIG1hcmtlci0+c2V0UmVuZGVyZWRSZWN0KG1hcmtlclJlY3QpOwogICAgICAgICB9CiAg
ICAgfQogICAgIApAQCAtMTEzMSw3ICsxMTMxLDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWlu
dERvY3VtZW50TWFya2VyKEdyYXBoaWNzQ29udGV4dCogcHQsIGNvbnN0IEZsb2F0UG9pbnQmIGIK
ICAgICBwdC0+ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihGbG9hdFBvaW50KGJveE9yaWdpbi54
KCkgKyBzdGFydCwgYm94T3JpZ2luLnkoKSArIHVuZGVybGluZU9mZnNldCksIHdpZHRoLCBsaW5l
U3R5bGVGb3JNYXJrZXJUeXBlKG1hcmtlci0+dHlwZSgpKSk7CiB9CiAKLXZvaWQgSW5saW5lVGV4
dEJveDo6cGFpbnRUZXh0TWF0Y2hNYXJrZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIERvY3VtZW50TWFya2VyKiBtYXJrZXIsIGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCkKK3ZvaWQgSW5saW5lVGV4dEJveDo6
cGFpbnRUZXh0TWF0Y2hNYXJrZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9h
dFBvaW50JiBib3hPcmlnaW4sIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqIG1hcmtlciwgY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250JiBmb250KQogewogICAgIExheW91dFVuaXQg
c2VsZWN0aW9uSGVpZ2h0ID0gdGhpcy0+c2VsZWN0aW9uSGVpZ2h0KCk7CiAKQEAgLTExNDUsNyAr
MTE0NSw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0TWF0Y2hNYXJrZXIoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFBvCiAgICAgZm9udC5hZGp1c3RTZWxlY3Rp
b25SZWN0Rm9yVGV4dChydW4sIHJlbmRlcmVkUmVjdCwgc1BvcywgZVBvcyk7CiAgICAgSW50UmVj
dCBtYXJrZXJSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChyZW5kZXJlZFJlY3QpOwogICAgIG1hcmtl
clJlY3QgPSByZW5kZXJlcigpLmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRRdWFkKG1hcmtlclJl
Y3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwotICAgIHRvUmVuZGVyZWREb2N1bWVudE1hcmtl
cihtYXJrZXIpLT5zZXRSZW5kZXJlZFJlY3QobWFya2VyUmVjdCk7CisgICAgbWFya2VyLT5zZXRS
ZW5kZXJlZFJlY3QobWFya2VyUmVjdCk7CiAgICAgCiAgICAgLy8gT3B0aW9uYWxseSBoaWdobGln
aHQgdGhlIHRleHQKICAgICBpZiAocmVuZGVyZXIoKS5mcmFtZSgpLmVkaXRvcigpLm1hcmtlZFRl
eHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoKSkgewpAQCAtMTE2Miw3ICsxMTYyLDcgQEAgdm9pZCBJ
bmxpbmVUZXh0Qm94OjpwYWludFRleHRNYXRjaE1hcmtlcihHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IEZsb2F0UG8KICAgICB9CiB9CiAKLXZvaWQgSW5saW5lVGV4dEJveDo6Y29tcHV0
ZVJlY3RGb3JSZXBsYWNlbWVudE1hcmtlcihEb2N1bWVudE1hcmtlciogbWFya2VyLCBjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQpCit2b2lkIElubGluZVRleHRCb3g6
OmNvbXB1dGVSZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXIoUmVuZGVyZWREb2N1bWVudE1hcmtlciog
bWFya2VyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQpCiB7CiAg
ICAgLy8gUmVwbGFjZW1lbnQgbWFya2VycyBhcmUgbm90IGFjdHVhbGx5IGRyYXduLCBidXQgdGhl
aXIgcmVjdHMgbmVlZCB0byBiZSBjb21wdXRlZCBmb3IgaGl0IHRlc3RpbmcuCiAgICAgTGF5b3V0
VW5pdCB0b3AgPSBzZWxlY3Rpb25Ub3AoKTsKQEAgLTExNzcsNyArMTE3Nyw3IEBAIHZvaWQgSW5s
aW5lVGV4dEJveDo6Y29tcHV0ZVJlY3RGb3JSZXBsYWNlbWVudE1hcmtlcihEb2N1bWVudE1hcmtl
ciogbWFya2VyLCBjb25zCiAgICAgZm9udC5hZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dChydW4s
IHNlbGVjdGlvblJlY3QsIHNQb3MsIGVQb3MpOwogICAgIEludFJlY3QgbWFya2VyUmVjdCA9IGVu
Y2xvc2luZ0ludFJlY3Qoc2VsZWN0aW9uUmVjdCk7CiAgICAgbWFya2VyUmVjdCA9IHJlbmRlcmVy
KCkubG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QobWFya2VyUmVjdCkpLmVuY2xvc2luZ0Jv
dW5kaW5nQm94KCk7Ci0gICAgdG9SZW5kZXJlZERvY3VtZW50TWFya2VyKG1hcmtlciktPnNldFJl
bmRlcmVkUmVjdChtYXJrZXJSZWN0KTsKKyAgICBtYXJrZXItPnNldFJlbmRlcmVkUmVjdChtYXJr
ZXJSZWN0KTsKIH0KICAgICAKIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtl
cnMoR3JhcGhpY3NDb250ZXh0KiBwdCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQsIGJvb2wgYmFja2dyb3VuZCkK
QEAgLTExODUsMTQgKzExODUsMTEgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50
TWFya2VycyhHcmFwaGljc0NvbnRleHQqIHB0LCBjb25zdCBGbG9hdFBvaW50JgogICAgIGlmICgh
cmVuZGVyZXIoKS50ZXh0Tm9kZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8RG9j
dW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gcmVuZGVyZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5t
YXJrZXJzRm9yKHJlbmRlcmVyKCkudGV4dE5vZGUoKSk7Ci0gICAgVmVjdG9yPERvY3VtZW50TWFy
a2VyKj46OmNvbnN0X2l0ZXJhdG9yIG1hcmtlckl0ID0gbWFya2Vycy5iZWdpbigpOworICAgIFZl
Y3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IHJlbmRlcmVyKCkuZG9jdW1l
bnQoKS5tYXJrZXJzKCkubWFya2Vyc0ZvcihyZW5kZXJlcigpLnRleHROb2RlKCkpOwogCiAgICAg
Ly8gR2l2ZSBhbnkgZG9jdW1lbnQgbWFya2VycyB0aGF0IHRvdWNoIHRoaXMgcnVuIGEgY2hhbmNl
IHRvIGRyYXcgYmVmb3JlIHRoZSB0ZXh0IGhhcyBiZWVuIGRyYXduLgogICAgIC8vIE5vdGUgZW5k
KCkgcG9pbnRzIGF0IHRoZSBsYXN0IGNoYXIsIG5vdCBvbmUgcGFzdCBpdCBsaWtlIGVuZE9mZnNl
dCBhbmQgcmFuZ2VzIGRvLgotICAgIGZvciAoIDsgbWFya2VySXQgIT0gbWFya2Vycy5lbmQoKTsg
KyttYXJrZXJJdCkgewotICAgICAgICBEb2N1bWVudE1hcmtlciogbWFya2VyID0gKm1hcmtlckl0
OwotICAgICAgICAKKyAgICBmb3IgKGF1dG8qIG1hcmtlciA6IG1hcmtlcnMpIHsKICAgICAgICAg
Ly8gUGFpbnQgZWl0aGVyIHRoZSBiYWNrZ3JvdW5kIG1hcmtlcnMgb3IgdGhlIGZvcmVncm91bmQg
bWFya2VycywgYnV0IG5vdCBib3RoCiAgICAgICAgIHN3aXRjaCAobWFya2VyLT50eXBlKCkpIHsK
ICAgICAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXI6CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZVRleHRCb3guaAppbmRleCA0ZGEwYmE4ZmY5ZTUwMGRkN2QwMjUyYWZl
YjMzMGM1MDI2ZGYyODdmLi42ODNhNWMyZTRhZDJjODNkODI4ZGJmMGRmODU5OWI1ZjY4M2MzNzRl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKQEAgLTMwLDcgKzMw
LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IENvbXBvc2l0aW9uVW5kZXJsaW5l
OwotY2xhc3MgRG9jdW1lbnRNYXJrZXI7CitjbGFzcyBSZW5kZXJlZERvY3VtZW50TWFya2VyOwog
Y2xhc3MgVGV4dFBhaW50ZXI7CiAKIGNvbnN0IHVuc2lnbmVkIHNob3J0IGNOb1RydW5jYXRpb24g
PSBVU0hSVF9NQVg7CkBAIC0xNTUsMTAgKzE1NSwxMCBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgog
ICAgIHZvaWQgcGFpbnREZWNvcmF0aW9uKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9p
bnQmIGJveE9yaWdpbiwgVGV4dERlY29yYXRpb24sIFRleHREZWNvcmF0aW9uU3R5bGUsIGNvbnN0
IFNoYWRvd0RhdGEqLCBUZXh0UGFpbnRlciYpOwogICAgIHZvaWQgcGFpbnRTZWxlY3Rpb24oR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJT
dHlsZSYsIGNvbnN0IEZvbnQmLCBDb2xvciB0ZXh0Q29sb3IpOwotICAgIHZvaWQgcGFpbnREb2N1
bWVudE1hcmtlcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4s
IERvY3VtZW50TWFya2VyKiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250JiwgYm9vbCBn
cmFtbWFyKTsKLSAgICB2b2lkIHBhaW50VGV4dE1hdGNoTWFya2VyKEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgRG9jdW1lbnRNYXJrZXIqLCBjb25zdCBSZW5k
ZXJTdHlsZSYsIGNvbnN0IEZvbnQmKTsKKyAgICB2b2lkIHBhaW50RG9jdW1lbnRNYXJrZXIoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJlZERvY3Vt
ZW50TWFya2VyKiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250JiwgYm9vbCBncmFtbWFy
KTsKKyAgICB2b2lkIHBhaW50VGV4dE1hdGNoTWFya2VyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgUmVuZGVyZWREb2N1bWVudE1hcmtlciosIGNvbnN0IFJl
bmRlclN0eWxlJiwgY29uc3QgRm9udCYpOwogCi0gICAgdm9pZCBjb21wdXRlUmVjdEZvclJlcGxh
Y2VtZW50TWFya2VyKERvY3VtZW50TWFya2VyKiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBG
b250Jik7CisgICAgdm9pZCBjb21wdXRlUmVjdEZvclJlcGxhY2VtZW50TWFya2VyKFJlbmRlcmVk
RG9jdW1lbnRNYXJrZXIqLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmKTsKIAogICAg
IFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yKCkgY29uc3QKICAg
ICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZs
b3dCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVGbG93Qm94
LmNwcAppbmRleCBmMmM5ODg4YTFhM2I0ODA0MDZlYTE3OGE0Yzk3NzkxZTY4NWUzZjNlLi5hZDM0
NWYwYzljZmVjZTRlNGEzNzY3MTk2Zjg1YjhhNDIwMDI2MzEwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3guY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lRmxvd0JveC5jcHAKQEAgLTgzLDEyICs4Myw4
IEBAIHZvaWQgU1ZHSW5saW5lRmxvd0JveDo6Y29tcHV0ZVRleHRNYXRjaE1hcmtlclJlY3RGb3JS
ZW5kZXJlcihSZW5kZXJTVkdJbmxpbmVUZXh0CiAgICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gdGV4
dFJlbmRlcmVyLT5zdHlsZSgpOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIGZyYWdtZW50VHJhbnNm
b3JtOwotICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSB0ZXh0UmVuZGVyZXIt
PmRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNGb3IoJnRleHROb2RlKTsKLQotICAgIFZlY3Rv
cjxEb2N1bWVudE1hcmtlcio+OjppdGVyYXRvciBtYXJrZXJFbmQgPSBtYXJrZXJzLmVuZCgpOwot
ICAgIGZvciAoVmVjdG9yPERvY3VtZW50TWFya2VyKj46Oml0ZXJhdG9yIG1hcmtlckl0ID0gbWFy
a2Vycy5iZWdpbigpOyBtYXJrZXJJdCAhPSBtYXJrZXJFbmQ7ICsrbWFya2VySXQpIHsKLSAgICAg
ICAgRG9jdW1lbnRNYXJrZXIqIG1hcmtlciA9ICptYXJrZXJJdDsKLQorICAgIFZlY3RvcjxSZW5k
ZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IHRleHRSZW5kZXJlci0+ZG9jdW1lbnQoKS5t
YXJrZXJzKCkubWFya2Vyc0ZvcigmdGV4dE5vZGUpOworICAgIGZvciAoYXV0byogbWFya2VyIDog
bWFya2VycykgewogICAgICAgICAvLyBTVkcgaXMgb25seSBpbnRlcmVzc3RlZCBpbiB0aGUgVGV4
dE1hdGNoIG1hcmtlciwgZm9yIG5vdy4KICAgICAgICAgaWYgKG1hcmtlci0+dHlwZSgpICE9IERv
Y3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTEyOCw3
ICsxMjQsNyBAQCB2b2lkIFNWR0lubGluZUZsb3dCb3g6OmNvbXB1dGVUZXh0TWF0Y2hNYXJrZXJS
ZWN0Rm9yUmVuZGVyZXIoUmVuZGVyU1ZHSW5saW5lVGV4dAogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAKLSAgICAgICAgdG9SZW5kZXJlZERvY3VtZW50TWFya2VyKG1hcmtlciktPnNldFJlbmRl
cmVkUmVjdCh0ZXh0UmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQobWFya2VyUmVjdCkuZW5j
bG9zaW5nQm91bmRpbmdCb3goKSk7CisgICAgICAgIG1hcmtlci0+c2V0UmVuZGVyZWRSZWN0KHRl
eHRSZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChtYXJrZXJSZWN0KS5lbmNsb3NpbmdCb3Vu
ZGluZ0JveCgpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApp
bmRleCAxNDhkM2MyM2UzMDQ1NDFlNGY4M2JjMjVlZGI5ZmU1MTY1NWQ3Y2YzLi4zNWU0MmUxZTFl
ZTZjMmE4NGJkNjMzN2U3YTk4ZGM3ZDFhNzQxODM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuY3BwCkBAIC04NSw2ICs4NSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyTWVudUxpc3QuaCIK
ICNpbmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgor
I2luY2x1ZGUgIlJlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaCIKICNpbmNsdWRlICJSdW50aW1lRW5h
YmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NoZW1lUmVnaXN0cnkuaCIKICNpbmNsdWRlICJT
Y3JvbGxpbmdDb29yZGluYXRvci5oIgpAQCAtNzc5LDM5ICs3ODAsMzkgQEAgdW5zaWduZWQgSW50
ZXJuYWxzOjptYXJrZXJDb3VudEZvck5vZGUoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBtYXJr
ZXJUeXBlLCBFeGMKICAgICByZXR1cm4gbm9kZS0+ZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vy
c0Zvcihub2RlLCBtYXJrZXJUeXBlcykuc2l6ZSgpOwogfQogCi1Eb2N1bWVudE1hcmtlciogSW50
ZXJuYWxzOjptYXJrZXJBdChOb2RlKiBub2RlLCBjb25zdCBTdHJpbmcmIG1hcmtlclR5cGUsIHVu
c2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKK1JlbmRlcmVkRG9jdW1lbnRNYXJrZXIq
IEludGVybmFsczo6bWFya2VyQXQoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBtYXJrZXJUeXBl
LCB1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgbm9kZS0+ZG9jdW1l
bnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICAgICBpZiAoIW5v
ZGUpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7Ci0gICAgICAgIHJldHVybiAw
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBEb2N1bWVudE1hcmtlcjo6
TWFya2VyVHlwZXMgbWFya2VyVHlwZXMgPSAwOwogICAgIGlmICghbWFya2VyVHlwZXNGcm9tKG1h
cmtlclR5cGUsIG1hcmtlclR5cGVzKSkgewogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7Ci0gICAg
ICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBub2Rl
LT5kb2N1bWVudCgpLmZyYW1lKCktPmVkaXRvcigpLnVwZGF0ZUVkaXRvclVJTm93SWZTY2hlZHVs
ZWQoKTsKIAotICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBub2RlLT5kb2N1
bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzRm9yKG5vZGUsIG1hcmtlclR5cGVzKTsKKyAgICBWZWN0
b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBub2RlLT5kb2N1bWVudCgpLm1h
cmtlcnMoKS5tYXJrZXJzRm9yKG5vZGUsIG1hcmtlclR5cGVzKTsKICAgICBpZiAobWFya2Vycy5z
aXplKCkgPD0gaW5kZXgpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICByZXR1cm4gbWFya2Vyc1tpbmRleF07CiB9CiAKIFBhc3NSZWZQdHI8UmFuZ2U+IElu
dGVybmFsczo6bWFya2VyUmFuZ2VGb3JOb2RlKE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgbWFy
a2VyVHlwZSwgdW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIERvY3Vt
ZW50TWFya2VyKiBtYXJrZXIgPSBtYXJrZXJBdChub2RlLCBtYXJrZXJUeXBlLCBpbmRleCwgZWMp
OworICAgIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqIG1hcmtlciA9IG1hcmtlckF0KG5vZGUsIG1h
cmtlclR5cGUsIGluZGV4LCBlYyk7CiAgICAgaWYgKCFtYXJrZXIpCi0gICAgICAgIHJldHVybiAw
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShub2Rl
LT5kb2N1bWVudCgpLCBub2RlLCBtYXJrZXItPnN0YXJ0T2Zmc2V0KCksIG5vZGUsIG1hcmtlci0+
ZW5kT2Zmc2V0KCkpOwogfQogCiBTdHJpbmcgSW50ZXJuYWxzOjptYXJrZXJEZXNjcmlwdGlvbkZv
ck5vZGUoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBtYXJrZXJUeXBlLCB1bnNpZ25lZCBpbmRl
eCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgRG9jdW1lbnRNYXJrZXIqIG1hcmtlciA9IG1h
cmtlckF0KG5vZGUsIG1hcmtlclR5cGUsIGluZGV4LCBlYyk7CisgICAgUmVuZGVyZWREb2N1bWVu
dE1hcmtlciogbWFya2VyID0gbWFya2VyQXQobm9kZSwgbWFya2VyVHlwZSwgaW5kZXgsIGVjKTsK
ICAgICBpZiAoIW1hcmtlcikKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIHJldHVybiBt
YXJrZXItPmRlc2NyaXB0aW9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFscy5oIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAppbmRleCBk
ZjAyZTM0YTgxMjhlOGE5ODE1ZmVhZTY2NDU2MDQ4MDlhZDk2MzJiLi4wZTM1ZTkyMWJmOWNlMmVl
NjQyYzgxYTMzNTMyYzFmOWU4NTc2ZWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgK
QEAgLTQ2LDcgKzQ2LDYgQEAgY2xhc3MgQ2xpZW50UmVjdExpc3Q7CiBjbGFzcyBET01TdHJpbmdM
aXN0OwogY2xhc3MgRE9NV2luZG93OwogY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBEb2N1bWVudE1h
cmtlcjsKIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbER1bW15OwpAQCAtNTcsNiArNTYsNyBAQCBjbGFzcyBNZW1vcnlJbmZvOwogY2xh
c3MgTm9kZTsKIGNsYXNzIFBhZ2U7CiBjbGFzcyBSYW5nZTsKK2NsYXNzIFJlbmRlcmVkRG9jdW1l
bnRNYXJrZXI7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOwogY2xhc3MgU291cmNlQnVmZmVyOwpAQCAtMzUxLDcgKzM1MSw3IEBAIHBy
aXZhdGU6CiAgICAgRnJhbWUqIGZyYW1lKCkgY29uc3Q7CiAgICAgVmVjdG9yPFN0cmluZz4gaWNv
blVSTHMoRG9jdW1lbnQqLCBpbnQgaWNvblR5cGVzTWFzaykgY29uc3Q7CiAKLSAgICBEb2N1bWVu
dE1hcmtlciogbWFya2VyQXQoTm9kZSosIGNvbnN0IFN0cmluZyYgbWFya2VyVHlwZSwgdW5zaWdu
ZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBSZW5kZXJlZERvY3VtZW50TWFya2VyKiBt
YXJrZXJBdChOb2RlKiwgY29uc3QgU3RyaW5nJiBtYXJrZXJUeXBlLCB1bnNpZ25lZCBpbmRleCwg
RXhjZXB0aW9uQ29kZSYpOwogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgUmVmUHRyPERPTVdp
bmRvdz4gbV9mcm9udGVuZFdpbmRvdzsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yRnJv
bnRlbmRDbGllbnREdW1teT4gbV9mcm9udGVuZENsaWVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0RXhwb3J0R2VuZXJhdG9yL1dlYktpdEV4cG9ydHMu
ZGVmLmluIGIvU291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJLaXRFeHBvcnRHZW5lcmF0
b3IvV2ViS2l0RXhwb3J0cy5kZWYuaW4KaW5kZXggNzVkNzM1OGQ3MzhjNTc1ZWY0MjkzNzVjMmRj
NTliYTA4ZDJlODMzNS4uNjA2Mjc0N2UyZTk3NzBhZDhkNmZiM2FmMGE3Y2Q5Y2I5NmRmOTkwZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJLaXRFeHBvcnRHZW5l
cmF0b3IvV2ViS2l0RXhwb3J0cy5kZWYuaW4KKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQudmN4
cHJvai9XZWJLaXRFeHBvcnRHZW5lcmF0b3IvV2ViS2l0RXhwb3J0cy5kZWYuaW4KQEAgLTQyNyw3
ICs0MjcsNiBAQCBFWFBPUlRTCiAgICAgICAgIHN5bWJvbFdpdGhQb2ludGVyKD9zZXRBdXRvZmls
bGVkQEhUTUxJbnB1dEVsZW1lbnRAV2ViQ29yZUBAUUFFWF9OQFosID9zZXRBdXRvZmlsbGVkQEhU
TUxJbnB1dEVsZW1lbnRAV2ViQ29yZUBAUUVBQVhfTkBaKQogICAgICAgICBzeW1ib2xXaXRoUG9p
bnRlcig/c2V0RG9jdW1lbnRTdGF0ZUBIaXN0b3J5SXRlbUBXZWJDb3JlQEBRQUVYQUJWPyRWZWN0
b3JAVlN0cmluZ0BXVEZAQCQwQUBWQ3Jhc2hPbk92ZXJmbG93QDJAQFdURkBAQFosID9zZXREb2N1
bWVudFN0YXRlQEhpc3RvcnlJdGVtQFdlYkNvcmVAQFFFQUFYQUVCVj8kVmVjdG9yQFZTdHJpbmdA
V1RGQEAkMEFAVkNyYXNoT25PdmVyZmxvd0AyQEBXVEZAQEBaKQogICAgICAgICBzeW1ib2xXaXRo
UG9pbnRlcig/b3ZlcnJpZGVVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzQFdlYkNvcmVAQFlBWEFCVj8k
VmVjdG9yQFZTdHJpbmdAV1RGQEAkMEFAVkNyYXNoT25PdmVyZmxvd0AyQEBXVEZAQEBaLCA/b3Zl
cnJpZGVVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzQFdlYkNvcmVAQFlBWEFFQlY/JFZlY3RvckBWU3Ry
aW5nQFdURkBAJDBBQFZDcmFzaE9uT3ZlcmZsb3dAMkBAV1RGQEBAWikKLSAgICAgICAgc3ltYm9s
V2l0aFBvaW50ZXIoP21hcmtlcnNGb3JARG9jdW1lbnRNYXJrZXJDb250cm9sbGVyQFdlYkNvcmVA
QFFBRT9BVj8kVmVjdG9yQFBBVkRvY3VtZW50TWFya2VyQFdlYkNvcmVAQCQwQUBWQ3Jhc2hPbk92
ZXJmbG93QFdURkBAQFdURkBAUEFWTm9kZUAyQFZNYXJrZXJUeXBlc0BEb2N1bWVudE1hcmtlckAy
QEBaLCA/bWFya2Vyc0ZvckBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXJAV2ViQ29yZUBAUUVBQT9B
Vj8kVmVjdG9yQFBFQVZEb2N1bWVudE1hcmtlckBXZWJDb3JlQEAkMEFAVkNyYXNoT25PdmVyZmxv
d0BXVEZAQEBXVEZAQFBFQVZOb2RlQDJAVk1hcmtlclR5cGVzQERvY3VtZW50TWFya2VyQDJAQFop
CiAgICAgICAgIHN5bWJvbFdpdGhQb2ludGVyKD9nZXRSZWZlcmVuY2VkRmlsZVBhdGhzQEZvcm1D
b250cm9sbGVyQFdlYkNvcmVAQFNBP0FWPyRWZWN0b3JAVlN0cmluZ0BXVEZAQCQwQUBWQ3Jhc2hP
bk92ZXJmbG93QDJAQFdURkBAQUJWMzRAQFosID9nZXRSZWZlcmVuY2VkRmlsZVBhdGhzQEZvcm1D
b250cm9sbGVyQFdlYkNvcmVAQFNBP0FWPyRWZWN0b3JAVlN0cmluZ0BXVEZAQCQwQUBWQ3Jhc2hP
bk92ZXJmbG93QDJAQFdURkBAQUVCVjM0QEBaKQogICAgICAgICBzeW1ib2xXaXRoUG9pbnRlcig/
aWNvblVSTHNARG9jdW1lbnRAV2ViQ29yZUBAUUFFQUJWPyRWZWN0b3JAVUljb25VUkxAV2ViQ29y
ZUBAJDBBQFZDcmFzaE9uT3ZlcmZsb3dAV1RGQEBAV1RGQEBIQFosID9pY29uVVJMc0BEb2N1bWVu
dEBXZWJDb3JlQEBRRUFBQUVCVj8kVmVjdG9yQFVJY29uVVJMQFdlYkNvcmVAQCQwQUBWQ3Jhc2hP
bk92ZXJmbG93QFdURkBAQFdURkBASEBaKQogICAgICAgICA/dXNlclByZWZlcnJlZExhbmd1YWdl
c0BXZWJDb3JlQEBZQT9BVj8kVmVjdG9yQFZTdHJpbmdAV1RGQEAkMEFAVkNyYXNoT25PdmVyZmxv
d0AyQEBXVEZAQFhaCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240079</attachid>
            <date>2014-10-18 18:27:07 -0700</date>
            <delta_ts>2014-10-19 20:52:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137858-20141018182712.patch</filename>
            <type>text/plain</type>
            <size>32616</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0ODY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjcxMzE1ZDk5ZDE3ZWIx
YjZmMTVlZjFiY2ZlMjQ2ZGNkN2JlNzc2Zi4uMzJiZWVjYzhmMmJlYTZhNzIxODkwM2M0OGM1OTQ3
YzlkYTRhMjcyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDUzIEBACiAyMDE0LTEwLTE4ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgS2lsbCB0b1JlbmRlcmVkRG9j
dW1lbnRNYXJrZXIoKSBieSB1c2luZyB0aWdodGVyIHR5cGluZworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3ODU4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgS2lsbCB0b1JlbmRlcmVkRG9jdW1lbnRNYXJr
ZXIoKSBieSB1c2luZyB0aWdodGVyIHR5cGluZy4gVGhpcyBtZXRob2QKKyAgICAgICAgd2FzIGRv
aW5nIG5vIHR5cGUgdmFsaWRhdGlvbiwganVzdCBhIHN0YXRpY19jYXN0PD4oKS4KKworICAgICAg
ICBObyBuZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIGRvbS9Eb2N1
bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjphZGRUZXh0TWF0Y2hNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJzRm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFya2Vyc0luUmFuZ2UpOgorICAgICAgICAoRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjpoYXNNYXJrZXJzKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyLmg6CisgICAgICAgICogZG9tL1JlbmRlcmVkRG9jdW1lbnRNYXJrZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6OnRvUmVuZGVyZWREb2N1bWVudE1hcmtlcik6IERlbGV0ZWQu
CisgICAgICAgICogZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Om1hcmtlcnNIYXZlSWRlbnRpY2FsRGVzY3JpcHRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVj
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZWNv
cmRTcGVsbGNoZWNrZXJSZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpwcm9jZXNzTWFya2Vyc09uVGV4dFRv
QmVSZXBsYWNlZEJ5UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OmFwcGx5RGljdGF0aW9uQWx0ZXJuYXRpdmUpOgorICAgICAgICAqIGVkaXRpbmcv
Q29tcG9zaXRlRWRpdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29weU1hcmtlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VUZXh0SW5O
b2RlUHJlc2VydmluZ01hcmtlcnMpOgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9u
Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpv
cmlnaW5hbFN0cmluZ0ZvckF1dG9jb3JyZWN0aW9uQXRCZWdpbm5pbmdPZlNlbGVjdGlvbik6Cisg
ICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp1
cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzTWFya2VyRm9yKToKKyAgICAgICAgKiByZW5kZXJp
bmcvSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpw
YWludERvY3VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBh
aW50VGV4dE1hdGNoTWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmNv
bXB1dGVSZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
VGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcnMpOgorICAgICAgICAqIHJlbmRlcmluZy9Jbmxp
bmVUZXh0Qm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVGbG93Qm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZUZsb3dCb3g6OmNvbXB1dGVUZXh0TWF0Y2hN
YXJrZXJSZWN0Rm9yUmVuZGVyZXIpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6bWFya2VyQXQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZXJuYWxzOjptYXJrZXJSYW5nZUZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW50
ZXJuYWxzOjptYXJrZXJEZXNjcmlwdGlvbkZvck5vZGUpOgorICAgICAgICAqIHRlc3RpbmcvSW50
ZXJuYWxzLmg6CisKKzIwMTQtMTAtMTggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
KwogICAgICAgICBbTWFjXSBVc2UgRmFzdCBlbnVtZXJhdGlvbiBjb25zaXN0ZW50bHkgaW4gV2Vi
Rm9udENhY2hlLm1tCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzc3OTEKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA3NDhlMTNlMWNhYzQ5YTZlM2NjNjU5MmUwNmE0MzQy
Zjc3NDgyMWIxLi40ZmQ4ZWI1ZDkyM2EwM2JlYTIxNWNiZTlkNjllNWI2MzlmMDNmOWNiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE0LTEwLTE4ICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CisKKyAgICAgICAgS2lsbCB0b1JlbmRlcmVkRG9jdW1lbnRNYXJrZXIoKSBieSB1
c2luZyB0aWdodGVyIHR5cGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTM3ODU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVXBkYXRlIHN5bWJvbCBleHBvcnQgZm9yIFdpbmRvd3MgZHVlIHRvIGFyZ3Vt
ZW50IHR5cGUgY2hhbmdlLgorCisgICAgICAgICogV2ViS2l0LnZjeHByb2ovV2ViS2l0RXhwb3J0
R2VuZXJhdG9yL1dlYktpdEV4cG9ydHMuZGVmLmluOgorCiAyMDE0LTEwLTE3ICBwZWF2b0BvdXRs
b29rLmNvbSAgPHBlYXZvQG91dGxvb2suY29tPgogCiAgICAgICAgIFtXaW5DYWlyb10gQWNjZWxl
cmF0ZWQgY29tcG9zaXRpbmcgaXMgbm90IGltcGxlbWVudGVkLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcAppbmRleCA5Y2I4YWU2NTdkNmVhZDZm
Y2FlZjNiMTkxY2Y2YWUwYWVhYjcwZmQwLi40ZGNkZWU3OTM2MWI5NjQ5YWZlYzc0ZGMwZWVhZWE1
OGNhMzQ1NWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyLmNwcApAQCAtMTAxLDggKzEwMSw4IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjphZGRUZXh0TWF0Y2hNYXJrZXIoY29uc3QgUmFuZ2UqIHJhbmdlLCBib29sIGFjdGl2CiAg
ICAgICAgICAgICAvLyB0aGUgd2hvbGUgcHVycG9zZSBvZiB0aWNrbWFya3Mgb24gdGhlIHNjcm9s
bGJhciBpcyB0byBzaG93IHdoZXJlCiAgICAgICAgICAgICAvLyBtYXRjaGVzIG9mZi1zY3JlZW4g
YXJlICh0aGF0IGhhdmVuJ3QgYmVlbiBwYWludGVkIHlldCkuCiAgICAgICAgICAgICBOb2RlKiBu
b2RlID0gdGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcigpOwotICAgICAgICAgICAgVmVjdG9yPERv
Y3VtZW50TWFya2VyKj4gbWFya2VycyA9IG1hcmtlcnNGb3Iobm9kZSk7Ci0gICAgICAgICAgICBz
dGF0aWNfY2FzdDxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4obWFya2Vyc1ttYXJrZXJzLnNpemUo
KSAtIDFdKS0+c2V0UmVuZGVyZWRSZWN0KHJhbmdlLT5ib3VuZGluZ0JveCgpKTsKKyAgICAgICAg
ICAgIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IG1hcmtlcnNGb3Io
bm9kZSk7CisgICAgICAgICAgICBtYXJrZXJzW21hcmtlcnMuc2l6ZSgpIC0gMV0tPnNldFJlbmRl
cmVkUmVjdChyYW5nZS0+Ym91bmRpbmdCb3goKSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0z
NzYsOSArMzc2LDkgQEAgRG9jdW1lbnRNYXJrZXIqIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6
bWFya2VyQ29udGFpbmluZ1BvaW50KGNvbnN0IExheW91dFBvaW4KICAgICByZXR1cm4gMDsKIH0K
IAotVmVjdG9yPERvY3VtZW50TWFya2VyKj4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJr
ZXJzRm9yKE5vZGUqIG5vZGUsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyBtYXJrZXJUeXBl
cykKK1ZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjptYXJrZXJzRm9yKE5vZGUqIG5vZGUsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyBt
YXJrZXJUeXBlcykKIHsKLSAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiByZXN1bHQ7CisgICAg
VmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiByZXN1bHQ7CiAgICAgTWFya2VyTGlzdCog
bGlzdCA9IG1fbWFya2Vycy5nZXQobm9kZSk7CiAgICAgaWYgKCFsaXN0KQogICAgICAgICByZXR1
cm4gcmVzdWx0OwpAQCAtMzkxLDEyICszOTEsMTIgQEAgVmVjdG9yPERvY3VtZW50TWFya2VyKj4g
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJzRm9yKE5vZGUqIG5vZGUsIERvY3VtZW4K
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1WZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiBEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlcnNJblJhbmdlKFJhbmdlKiByYW5nZSwgRG9jdW1lbnRN
YXJrZXI6Ok1hcmtlclR5cGVzIG1hcmtlclR5cGVzKQorVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRN
YXJrZXIqPiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlcnNJblJhbmdlKFJhbmdlKiBy
YW5nZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGVzIG1hcmtlclR5cGVzKQogewogICAgIGlm
ICghcG9zc2libHlIYXNNYXJrZXJzKG1hcmtlclR5cGVzKSkKLSAgICAgICAgcmV0dXJuIFZlY3Rv
cjxEb2N1bWVudE1hcmtlcio+KCk7CisgICAgICAgIHJldHVybiBWZWN0b3I8UmVuZGVyZWREb2N1
bWVudE1hcmtlcio+KCk7CiAKLSAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiBmb3VuZE1hcmtl
cnM7CisgICAgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBmb3VuZE1hcmtlcnM7CiAK
ICAgICBOb2RlKiBzdGFydENvbnRhaW5lciA9IHJhbmdlLT5zdGFydENvbnRhaW5lcigpOwogICAg
IEFTU0VSVChzdGFydENvbnRhaW5lcik7CkBAIC00MDUsMTAgKzQwNSw4IEBAIFZlY3RvcjxEb2N1
bWVudE1hcmtlcio+IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFya2Vyc0luUmFuZ2UoUmFu
Z2UqIHJhbmdlLCBECiAKICAgICBOb2RlKiBwYXN0TGFzdE5vZGUgPSByYW5nZS0+cGFzdExhc3RO
b2RlKCk7CiAgICAgZm9yIChOb2RlKiBub2RlID0gcmFuZ2UtPmZpcnN0Tm9kZSgpOyBub2RlICE9
IHBhc3RMYXN0Tm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKLSAgICAg
ICAgVmVjdG9yPERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IG1hcmtlcnNGb3Iobm9kZSk7Ci0g
ICAgICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXJr
ZXJzLmVuZCgpOwotICAgICAgICBmb3IgKFZlY3RvcjxEb2N1bWVudE1hcmtlcio+Ojpjb25zdF9p
dGVyYXRvciBpdCA9IG1hcmtlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
ICAgICBEb2N1bWVudE1hcmtlciogbWFya2VyID0gKml0OworICAgICAgICBWZWN0b3I8UmVuZGVy
ZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBtYXJrZXJzRm9yKG5vZGUpOworICAgICAgICBm
b3IgKGF1dG8qIG1hcmtlciA6IG1hcmtlcnMpIHsKICAgICAgICAgICAgIGlmICghbWFya2VyVHlw
ZXMuY29udGFpbnMobWFya2VyLT50eXBlKCkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgaWYgKG5vZGUgPT0gc3RhcnRDb250YWluZXIgJiYgbWFya2VyLT5lbmRPZmZz
ZXQoKSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpKQpAQCAt
Njc5LDEwICs2NzcsOCBAQCBib29sIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6aGFzTWFya2Vy
cyhSYW5nZSogcmFuZ2UsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeQogCiAgICAgTm9kZSogcGFz
dExhc3ROb2RlID0gcmFuZ2UtPnBhc3RMYXN0Tm9kZSgpOwogICAgIGZvciAoTm9kZSogbm9kZSA9
IHJhbmdlLT5maXJzdE5vZGUoKTsgbm9kZSAhPSBwYXN0TGFzdE5vZGU7IG5vZGUgPSBOb2RlVHJh
dmVyc2FsOjpuZXh0KG5vZGUpKSB7Ci0gICAgICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+IG1h
cmtlcnMgPSBtYXJrZXJzRm9yKG5vZGUpOwotICAgICAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXIq
Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFya2Vycy5lbmQoKTsKLSAgICAgICAgZm9yIChWZWN0
b3I8RG9jdW1lbnRNYXJrZXIqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXJrZXJzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgRG9jdW1lbnRNYXJrZXIqIG1hcmtlciA9
ICppdDsKKyAgICAgICAgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0g
bWFya2Vyc0Zvcihub2RlKTsKKyAgICAgICAgZm9yIChhdXRvKiBtYXJrZXIgOiBtYXJrZXJzKSB7
CiAgICAgICAgICAgICBpZiAoIW1hcmtlclR5cGVzLmNvbnRhaW5zKG1hcmtlci0+dHlwZSgpKSkK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmIChub2RlID09IHN0YXJ0
Q29udGFpbmVyICYmIG1hcmtlci0+ZW5kT2Zmc2V0KCkgPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHJhbmdlLT5zdGFydE9mZnNldCgpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1h
cmtlckNvbnRyb2xsZXIuaAppbmRleCBiODVhMzkzNDQyM2UxMzk2OGNkMTQ1YTE3YmYyMWJkNmU0
YWNiYjJiLi43NjlkZDkyMjdmNDlhZGY5YmE1MTA0ZmNjMDhjNjViNjA0NTdmNjNjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5oCkBAIC04NCw4ICs4
NCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE1hcmtlcnNBY3RpdmUoTm9kZSosIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGJvb2wpOwogCiAgICAgRG9jdW1lbnRN
YXJrZXIqIG1hcmtlckNvbnRhaW5pbmdQb2ludChjb25zdCBMYXlvdXRQb2ludCYsIERvY3VtZW50
TWFya2VyOjpNYXJrZXJUeXBlKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8RG9jdW1lbnRN
YXJrZXIqPiBtYXJrZXJzRm9yKE5vZGUqLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZXMgPSBE
b2N1bWVudE1hcmtlcjo6QWxsTWFya2VycygpKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8
RG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzSW5SYW5nZShSYW5nZSosIERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlcyk7CisgICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRN
YXJrZXIqPiBtYXJrZXJzRm9yKE5vZGUqLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZXMgPSBE
b2N1bWVudE1hcmtlcjo6QWxsTWFya2VycygpKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8
UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnNJblJhbmdlKFJhbmdlKiwgRG9jdW1lbnRN
YXJrZXI6Ok1hcmtlclR5cGVzKTsKICAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8SW50UmVjdD4g
cmVuZGVyZWRSZWN0c0Zvck1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUpOwogICAg
IHZvaWQgY2xlYXJEZXNjcmlwdGlvbk9uTWFya2Vyc0ludGVyc2VjdGluZ1JhbmdlKFJhbmdlKiwg
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGVzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL1JlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SZW5k
ZXJlZERvY3VtZW50TWFya2VyLmgKaW5kZXggN2U4ZmUyYjU1MmQ0YTVmMGIzM2ZkYWVlNzY1ZTg5
MWE0Nzk5ODM0OC4uN2Q0ODExNWQxMDI5MjQxOWY5NzkyZDc4Njk2NGRhYjQzMzhhYjQyYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vUmVuZGVyZWREb2N1bWVudE1hcmtlci5oCkBAIC02MiwxMSAr
NjIsNiBAQCBpbmxpbmUgdm9pZCBSZW5kZXJlZERvY3VtZW50TWFya2VyOjppbnZhbGlkYXRlKGNv
bnN0IExheW91dFJlY3QmIHIpCiAgICAgICAgIGludmFsaWRhdGUoKTsKIH0KIAotaW5saW5lIFJl
bmRlcmVkRG9jdW1lbnRNYXJrZXIqIHRvUmVuZGVyZWREb2N1bWVudE1hcmtlcihEb2N1bWVudE1h
cmtlciogbWFya2VyKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJlZERvY3VtZW50
TWFya2VyKj4obWFya2VyKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UKIAogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcApp
bmRleCAzYzE0ZGZjMDVjNWYzYTU3NDI2NWE2OWYzYTM0NTY4MmUyNDUyZjA4Li5kM2E1OWE2YjY5
MWVjMDI3ZWE4OTVlZjljNjA5ZDQ1ZmZlOGRlYTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKQEAgLTM3LDYgKzM3LDcg
QEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUg
IlBhZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJlZERvY3VtZW50TWFya2VyLmgiCiAjaW5jbHVkZSAi
U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oIgogI2luY2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50
LmgiCiAjaW5jbHVkZSAiVGV4dENoZWNraW5nSGVscGVyLmgiCkBAIC0xMTQsNyArMTE1LDcgQEAg
c3RhdGljIGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4mIG1hcmtlclR5
cGVzRm9yQXBwbGllZERpY3RhdGlvbkEKICAgICByZXR1cm4gbWFya2VyVHlwZXNGb3JBcHBsaWVk
RGljdGF0aW9uQWx0ZXJuYXRpdmU7CiB9CiAKLXN0YXRpYyBib29sIG1hcmtlcnNIYXZlSWRlbnRp
Y2FsRGVzY3JpcHRpb24oY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyKj4mIG1hcmtlcnMpCitz
dGF0aWMgYm9vbCBtYXJrZXJzSGF2ZUlkZW50aWNhbERlc2NyaXB0aW9uKGNvbnN0IFZlY3RvcjxS
ZW5kZXJlZERvY3VtZW50TWFya2VyKj4mIG1hcmtlcnMpCiB7CiAgICAgaWYgKG1hcmtlcnMuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ2OSwxMyArNDcwLDkgQEAgdm9pZCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24KICAgICAgICAgcmV0dXJuOwogCiAgICAgTm9kZSogbm9kZSA9IHBv
c2l0aW9uLmNvbnRhaW5lck5vZGUoKTsKLSAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiBtYXJr
ZXJzID0gbm9kZS0+ZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0Zvcihub2RlKTsKLSAgICBz
aXplX3QgbWFya2VyQ291bnQgPSBtYXJrZXJzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1hcmtlckNvdW50OyArK2kpIHsKLSAgICAgICAgY29uc3QgRG9jdW1lbnRNYXJrZXIq
IG1hcmtlciA9IG1hcmtlcnNbaV07Ci0gICAgICAgIGlmICghbWFya2VyKQotICAgICAgICAgICAg
Y29udGludWU7Ci0KKyAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnMg
PSBub2RlLT5kb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzRm9yKG5vZGUpOworICAgIGZvciAo
Y29uc3QgYXV0byogbWFya2VyIDogbWFya2VycykgeworICAgICAgICBBU1NFUlQobWFya2VyKTsK
ICAgICAgICAgaWYgKHJlc3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKCptYXJrZXIsIHBvc2l0aW9u
KSkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTU1NCw3ICs1NTEsNyBAQCB2b2lkIEFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9k
aWZpZWRDb3JyZWN0aW9uKAogICAgIGlmICghcmFuZ2VPZkNvcnJlY3Rpb24pCiAgICAgICAgIHJl
dHVybjsKICAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXImIG1hcmtlcnMgPSByYW5nZU9mQ29y
cmVjdGlvbi0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS5tYXJrZXJzKCk7Ci0gICAgVmVj
dG9yPERvY3VtZW50TWFya2VyKj4gY29ycmVjdGVkT25jZU1hcmtlcnMgPSBtYXJrZXJzLm1hcmtl
cnNJblJhbmdlKHJhbmdlT2ZDb3JyZWN0aW9uLCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3Rl
ZCk7CisgICAgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBjb3JyZWN0ZWRPbmNlTWFy
a2VycyA9IG1hcmtlcnMubWFya2Vyc0luUmFuZ2UocmFuZ2VPZkNvcnJlY3Rpb24sIERvY3VtZW50
TWFya2VyOjpBdXRvY29ycmVjdGVkKTsKICAgICBpZiAoY29ycmVjdGVkT25jZU1hcmtlcnMuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTYxMywxMCArNjEwLDkgQEAgYm9vbCBBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjpwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5
UmVzdWx0KGNvbnN0IFQKICAgICBQb3NpdGlvbiBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiA9
IGJlZ2lubmluZ09mUmFuZ2UucHJldmlvdXMoKTsKICAgICBSZWZQdHI8UmFuZ2U+IHByZWNlZGlu
Z0NoYXJhY3RlclJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBwcmVj
ZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiwgYmVnaW5uaW5nT2ZSYW5nZSk7CiAKLSAgICBWZWN0b3I8
RG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gbWFya2VyQ29udHJvbGxlci5tYXJrZXJzSW5SYW5n
ZShwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkRlbGV0ZWRB
dXRvY29ycmVjdGlvbik7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcmtlcnMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1hcmtlcnNbaV0tPmRlc2NyaXB0aW9uKCkgPT0gc3Ry
aW5nVG9CZVJlcGxhY2VkKQorICAgIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFy
a2VycyA9IG1hcmtlckNvbnRyb2xsZXIubWFya2Vyc0luUmFuZ2UocHJlY2VkaW5nQ2hhcmFjdGVy
UmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpEZWxldGVkQXV0b2NvcnJlY3Rpb24pOworICAg
IGZvciAoY29uc3QgYXV0byogbWFya2VyIDogbWFya2VycykgeworICAgICAgICBpZiAobWFya2Vy
LT5kZXNjcmlwdGlvbigpID09IHN0cmluZ1RvQmVSZXBsYWNlZCkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKQEAgLTczNSw3ICs3MzEsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OmFwcGx5RGljdGF0aW9uQWx0ZXJuYXRpdmUoY29uc3QgU3RyaW5nJiBhbHRl
cm5hdAogICAgIGlmICghc2VsZWN0aW9uIHx8ICFlZGl0b3Iuc2hvdWxkSW5zZXJ0VGV4dChhbHRl
cm5hdGl2ZVN0cmluZywgc2VsZWN0aW9uLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25QYXN0ZWQp
KQogICAgICAgICByZXR1cm47CiAgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyJiBtYXJrZXJz
ID0gc2VsZWN0aW9uLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLm1hcmtlcnMoKTsKLSAg
ICBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiBkaWN0YXRpb25BbHRlcm5hdGl2ZXNNYXJrZXJzID0g
bWFya2Vycy5tYXJrZXJzSW5SYW5nZShzZWxlY3Rpb24uZ2V0KCksIERvY3VtZW50TWFya2VyOjpE
aWN0YXRpb25BbHRlcm5hdGl2ZXMpOworICAgIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2Vy
Kj4gZGljdGF0aW9uQWx0ZXJuYXRpdmVzTWFya2VycyA9IG1hcmtlcnMubWFya2Vyc0luUmFuZ2Uo
c2VsZWN0aW9uLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzKTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRpY3RhdGlvbkFsdGVybmF0aXZlc01hcmtlcnMu
c2l6ZSgpOyArK2kpCiAgICAgICAgIHJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlc0Zvck1hcmtl
cihkaWN0YXRpb25BbHRlcm5hdGl2ZXNNYXJrZXJzW2ldKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAppbmRleCAwNjY1NGVhMmNhNTIwZjY2
MmNhN2U4ZTkzZTE1MGQ4NjU0YWEzYzNhLi42NWU0YTYwOGYwNGZiYjk5ODFmMzYzNjQ3ZmQwMTU0
MDQzNjAwZGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVk
aXRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRD
b21tYW5kLmNwcApAQCAtNTcsNiArNTcsNyBAQAogI2luY2x1ZGUgIlJlbW92ZU5vZGVQcmVzZXJ2
aW5nQ2hpbGRyZW5Db21tYW5kLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCiAjaW5j
bHVkZSAiUmVuZGVyVGV4dC5oIgorI2luY2x1ZGUgIlJlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaCIK
ICNpbmNsdWRlICJSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZC5oIgogI2luY2x1ZGUgIlJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kLmgiCiAjaW5jbHVkZSAiU2NvcGVkRXZlbnRRdWV1ZS5oIgpAQCAt
NTc0LDcgKzU3NSw3IEBAIFBvc2l0aW9uIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZXBsYWNlU2Vs
ZWN0ZWRUZXh0SW5Ob2RlKGNvbnN0IFN0cmluZyYgdGV4dCkKICAgICByZXR1cm4gUG9zaXRpb24o
dGV4dE5vZGUucmVsZWFzZSgpLCBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSArIHRleHQu
bGVuZ3RoKCkpOwogfQogCi1zdGF0aWMgdm9pZCBjb3B5TWFya2Vycyhjb25zdCBWZWN0b3I8RG9j
dW1lbnRNYXJrZXIqPiYgbWFya2VyUG9pbnRlcnMsIFZlY3RvcjxEb2N1bWVudE1hcmtlcj4mIG1h
cmtlcnMpCitzdGF0aWMgdm9pZCBjb3B5TWFya2Vycyhjb25zdCBWZWN0b3I8UmVuZGVyZWREb2N1
bWVudE1hcmtlcio+JiBtYXJrZXJQb2ludGVycywgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJr
ZXI+JiBtYXJrZXJzKQogewogICAgIHNpemVfdCBhcnJheVNpemUgPSBtYXJrZXJQb2ludGVycy5z
aXplKCk7CiAgICAgbWFya2Vycy5yZXNlcnZlQ2FwYWNpdHkoYXJyYXlTaXplKTsKQEAgLTU4Niwx
NSArNTg3LDE1IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VUZXh0SW5Ob2Rl
UHJlc2VydmluZ01hcmtlcnMoUGFzc1JlZlB0cjxUZXh0PiBwCiB7CiAgICAgUmVmUHRyPFRleHQ+
IG5vZGUocHJwTm9kZSk7CiAgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyJiBtYXJrZXJDb250
cm9sbGVyID0gZG9jdW1lbnQoKS5tYXJrZXJzKCk7Ci0gICAgVmVjdG9yPERvY3VtZW50TWFya2Vy
PiBtYXJrZXJzOworICAgIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyPiBtYXJrZXJzOwog
ICAgIGNvcHlNYXJrZXJzKG1hcmtlckNvbnRyb2xsZXIubWFya2Vyc0luUmFuZ2UoUmFuZ2U6OmNy
ZWF0ZShkb2N1bWVudCgpLCBub2RlLCBvZmZzZXQsIG5vZGUsIG9mZnNldCArIGNvdW50KS5nZXQo
KSwgRG9jdW1lbnRNYXJrZXI6OkFsbE1hcmtlcnMoKSksIG1hcmtlcnMpOwogICAgIHJlcGxhY2VU
ZXh0SW5Ob2RlKG5vZGUsIG9mZnNldCwgY291bnQsIHJlcGxhY2VtZW50VGV4dCk7CiAgICAgUmVm
UHRyPFJhbmdlPiBuZXdSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgbm9kZSwgb2Zm
c2V0LCBub2RlLCBvZmZzZXQgKyByZXBsYWNlbWVudFRleHQubGVuZ3RoKCkpOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbWFya2Vycy5zaXplKCk7ICsraSkKKyAgICBmb3IgKGNvbnN0IGF1
dG8mIG1hcmtlciA6IG1hcmtlcnMpCiAjaWYgUExBVEZPUk0oSU9TKQotICAgICAgICBtYXJrZXJD
b250cm9sbGVyLmFkZE1hcmtlcihuZXdSYW5nZS5nZXQoKSwgbWFya2Vyc1tpXS50eXBlKCksIG1h
cmtlcnNbaV0uZGVzY3JpcHRpb24oKSwgbWFya2Vyc1tpXS5hbHRlcm5hdGl2ZXMoKSwgbWFya2Vy
c1tpXS5tZXRhZGF0YSgpKTsKKyAgICAgICAgbWFya2VyQ29udHJvbGxlci5hZGRNYXJrZXIobmV3
UmFuZ2UuZ2V0KCksIG1hcmtlci50eXBlKCksIG1hcmtlci5kZXNjcmlwdGlvbigpLCBtYXJrZXIu
YWx0ZXJuYXRpdmVzKCksIG1hcmtlci5tZXRhZGF0YSgpKTsKICNlbHNlCi0gICAgICAgIG1hcmtl
ckNvbnRyb2xsZXIuYWRkTWFya2VyKG5ld1JhbmdlLmdldCgpLCBtYXJrZXJzW2ldLnR5cGUoKSwg
bWFya2Vyc1tpXS5kZXNjcmlwdGlvbigpKTsKKyAgICAgICAgbWFya2VyQ29udHJvbGxlci5hZGRN
YXJrZXIobmV3UmFuZ2UuZ2V0KCksIG1hcmtlci50eXBlKCksIG1hcmtlci5kZXNjcmlwdGlvbigp
KTsKICNlbmRpZiAvLyBQTEFURk9STShJT1MpCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IGExMDdlNjk2ZTQxNWE4ODhi
MDQ2OTZjYWU1ZDVkNGE5M2VhMjMxY2MuLjlkYTNjYmNlZjc2M2NjNzQxYWRmNTA3ZWQ4OWE3YjI2
NzNkZDVjMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rp
b25Db21tYW5kLmNwcApAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwu
aCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Lmgi
CisjaW5jbHVkZSAiUmVuZGVyZWREb2N1bWVudE1hcmtlci5oIgogI2luY2x1ZGUgIlRleHQuaCIK
ICNpbmNsdWRlICJWaXNpYmxlVW5pdHMuaCIKIApAQCAtNzY1LDkgKzc2Niw4IEBAIFN0cmluZyBE
ZWxldGVTZWxlY3Rpb25Db21tYW5kOjpvcmlnaW5hbFN0cmluZ0ZvckF1dG9jb3JyZWN0aW9uQXRC
ZWdpbm5pbmdPZlNlbGVjCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAgIFJlZlB0cjxS
YW5nZT4gcmFuZ2VPZkZpcnN0Q2hhcmFjdGVyID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBz
dGFydE9mU2VsZWN0aW9uLmRlZXBFcXVpdmFsZW50KCksIG5leHRQb3NpdGlvbi5kZWVwRXF1aXZh
bGVudCgpKTsKLSAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gZG9jdW1lbnQo
KS5tYXJrZXJzKCkubWFya2Vyc0luUmFuZ2UocmFuZ2VPZkZpcnN0Q2hhcmFjdGVyLmdldCgpLCBE
b2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtYXJrZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IERvY3VtZW50TWFya2VyKiBt
YXJrZXIgPSBtYXJrZXJzW2ldOworICAgIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4g
bWFya2VycyA9IGRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNJblJhbmdlKHJhbmdlT2ZGaXJz
dENoYXJhY3Rlci5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQpOworICAgIGZv
ciAoYXV0byogbWFya2VyIDogbWFya2VycykgewogICAgICAgICBpbnQgc3RhcnRPZmZzZXQgPSBt
YXJrZXItPnN0YXJ0T2Zmc2V0KCk7CiAgICAgICAgIGlmIChzdGFydE9mZnNldCA9PSBzdGFydE9m
U2VsZWN0aW9uLmRlZXBFcXVpdmFsZW50KCkub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpCiAgICAg
ICAgICAgICByZXR1cm4gbWFya2VyLT5kZXNjcmlwdGlvbigpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuY3BwCmluZGV4IDc3NTljNmZhMGNkNDVmMmZmOTg0YzIzYmExZmM2M2Y4YzhmZDI5NmQuLjZl
MDg5NTE1MzdlMjI2NWRjZGFiN2VlMTYyMjVkZDBkMGEwYzI3YzEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5jcHAKQEAgLTcxLDYgKzcxLDcgQEAKICNpbmNsdWRlICJSZW1vdmVGb3JtYXRDb21t
YW5kLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29u
dHJvbC5oIgorI2luY2x1ZGUgIlJlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaCIKICNpbmNsdWRlICJS
ZW5kZXJlZFBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaCIK
ICNpbmNsdWRlICJTZXR0aW5ncy5oIgpAQCAtMjc1Myw5ICsyNzU0LDkgQEAgdm9pZCBFZGl0b3I6
OnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGJvb2wgZG9Ob3RSZW1vdmVJ
ZlNlbGVjdGlvbkEKICAgICAvLyBvZiBtYXJrZXIgdGhhdCBjb250YWlucyB0aGUgd29yZCBpbiBx
dWVzdGlvbiwgYW5kIHJlbW92ZSBtYXJrZXIgb24gdGhhdCB3aG9sZSByYW5nZS4KICAgICBSZWZQ
dHI8UmFuZ2U+IHdvcmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3RhcnRPZkZp
cnN0V29yZC5kZWVwRXF1aXZhbGVudCgpLCBlbmRPZkxhc3RXb3JkLmRlZXBFcXVpdmFsZW50KCkp
OwogCi0gICAgVmVjdG9yPERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IGRvY3VtZW50KCkubWFy
a2VycygpLm1hcmtlcnNJblJhbmdlKHdvcmRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkRp
Y3RhdGlvbkFsdGVybmF0aXZlcyk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXJrZXJz
LnNpemUoKTsgKytpKQotICAgICAgICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPnJlbW92
ZURpY3RhdGlvbkFsdGVybmF0aXZlc0Zvck1hcmtlcihtYXJrZXJzW2ldKTsKKyAgICBWZWN0b3I8
UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBkb2N1bWVudCgpLm1hcmtlcnMoKS5t
YXJrZXJzSW5SYW5nZSh3b3JkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25B
bHRlcm5hdGl2ZXMpOworICAgIGZvciAoYXV0byogbWFya2VyIDogbWFya2VycykKKyAgICAgICAg
bV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXNG
b3JNYXJrZXIobWFya2VyKTsKIAogI2lmIFBMQVRGT1JNKElPUykKICAgICBkb2N1bWVudCgpLm1h
cmtlcnMoKS5yZW1vdmVNYXJrZXJzKHdvcmRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNw
ZWxsaW5nIHwgRG9jdW1lbnRNYXJrZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3IgfCBEb2N1bWVudE1h
cmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbiB8IERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25B
bHRlcm5hdGl2ZXMgfCBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0
aXZlcywgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGlu
Z01hcmtlcik7CkBAIC0zNTQyLDkgKzM1NDMsOCBAQCBib29sIEVkaXRvcjo6c2VsZWN0aW9uU3Rh
cnRIYXNNYXJrZXJGb3IoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSwgaQog
CiAgICAgdW5zaWduZWQgaW50IHN0YXJ0T2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50
Pihmcm9tKTsKICAgICB1bnNpZ25lZCBpbnQgZW5kT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgaW50Pihmcm9tICsgbGVuZ3RoKTsKLSAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiBtYXJr
ZXJzID0gZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0Zvcihub2RlKTsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1hcmtlcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgRG9jdW1lbnRN
YXJrZXIqIG1hcmtlciA9IG1hcmtlcnNbaV07CisgICAgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRN
YXJrZXIqPiBtYXJrZXJzID0gZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0Zvcihub2RlKTsK
KyAgICBmb3IgKGF1dG8qIG1hcmtlciA6IG1hcmtlcnMpIHsKICAgICAgICAgaWYgKG1hcmtlci0+
c3RhcnRPZmZzZXQoKSA8PSBzdGFydE9mZnNldCAmJiBlbmRPZmZzZXQgPD0gbWFya2VyLT5lbmRP
ZmZzZXQoKSAmJiBtYXJrZXItPnR5cGUoKSA9PSBtYXJrZXJUeXBlKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3gu
Y3BwCmluZGV4IDM1NDc5MGNmMzkyYTE4MzdlYWI3NDViMDg2YjgwMjBmZDdjYmVlY2QuLmNkMWQ5
OTVkMDQzOTFlMGNkNmZkMDEzN2MyMGMxMTU1M2FlZDA1OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKQEAgLTEwNjEsNyArMTA2MSw3IEBAIHN0YXRpYyBH
cmFwaGljc0NvbnRleHQ6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlIGxpbmVTdHlsZUZvck1hcmtl
clR5cGUoRG9jdW1lbnRNCiAgICAgfQogfQogCi12b2lkIElubGluZVRleHRCb3g6OnBhaW50RG9j
dW1lbnRNYXJrZXIoR3JhcGhpY3NDb250ZXh0KiBwdCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3Jp
Z2luLCBEb2N1bWVudE1hcmtlciogbWFya2VyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNv
bnN0IEZvbnQmIGZvbnQsIGJvb2wgZ3JhbW1hcikKK3ZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRE
b2N1bWVudE1hcmtlcihHcmFwaGljc0NvbnRleHQqIHB0LCBjb25zdCBGbG9hdFBvaW50JiBib3hP
cmlnaW4sIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqIG1hcmtlciwgY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlLCBjb25zdCBGb250JiBmb250LCBib29sIGdyYW1tYXIpCiB7CiAgICAgLy8gTmV2ZXIg
cHJpbnQgc3BlbGxpbmcvZ3JhbW1hciBtYXJrZXJzICg1MzI3ODg3KQogICAgIGlmIChyZW5kZXJl
cigpLmRvY3VtZW50KCkucHJpbnRpbmcoKSkKQEAgLTExMDcsNyArMTEwNyw3IEBAIHZvaWQgSW5s
aW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcihHcmFwaGljc0NvbnRleHQqIHB0LCBjb25z
dCBGbG9hdFBvaW50JiBiCiAgICAgICAgIGlmIChncmFtbWFyIHx8IGlzRGljdGF0aW9uTWFya2Vy
KSB7CiAgICAgICAgICAgICBtYXJrZXJSZWN0Lm1vdmUoLWJveE9yaWdpbi54KCksIC1ib3hPcmln
aW4ueSgpKTsKICAgICAgICAgICAgIG1hcmtlclJlY3QgPSByZW5kZXJlcigpLmxvY2FsVG9BYnNv
bHV0ZVF1YWQoRmxvYXRSZWN0KG1hcmtlclJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwot
ICAgICAgICAgICAgdG9SZW5kZXJlZERvY3VtZW50TWFya2VyKG1hcmtlciktPnNldFJlbmRlcmVk
UmVjdChtYXJrZXJSZWN0KTsKKyAgICAgICAgICAgIG1hcmtlci0+c2V0UmVuZGVyZWRSZWN0KG1h
cmtlclJlY3QpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtMTEzMSw3ICsxMTMxLDcgQEAg
dm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50TWFya2VyKEdyYXBoaWNzQ29udGV4dCog
cHQsIGNvbnN0IEZsb2F0UG9pbnQmIGIKICAgICBwdC0+ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtl
cihGbG9hdFBvaW50KGJveE9yaWdpbi54KCkgKyBzdGFydCwgYm94T3JpZ2luLnkoKSArIHVuZGVy
bGluZU9mZnNldCksIHdpZHRoLCBsaW5lU3R5bGVGb3JNYXJrZXJUeXBlKG1hcmtlci0+dHlwZSgp
KSk7CiB9CiAKLXZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0TWF0Y2hNYXJrZXIoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIERvY3VtZW50
TWFya2VyKiBtYXJrZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udCYgZm9u
dCkKK3ZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0TWF0Y2hNYXJrZXIoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFJlbmRlcmVkRG9jdW1l
bnRNYXJrZXIqIG1hcmtlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250JiBm
b250KQogewogICAgIExheW91dFVuaXQgc2VsZWN0aW9uSGVpZ2h0ID0gdGhpcy0+c2VsZWN0aW9u
SGVpZ2h0KCk7CiAKQEAgLTExNDUsNyArMTE0NSw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFp
bnRUZXh0TWF0Y2hNYXJrZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFBv
CiAgICAgZm9udC5hZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dChydW4sIHJlbmRlcmVkUmVjdCwg
c1BvcywgZVBvcyk7CiAgICAgSW50UmVjdCBtYXJrZXJSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChy
ZW5kZXJlZFJlY3QpOwogICAgIG1hcmtlclJlY3QgPSByZW5kZXJlcigpLmxvY2FsVG9BYnNvbHV0
ZVF1YWQoRmxvYXRRdWFkKG1hcmtlclJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwotICAg
IHRvUmVuZGVyZWREb2N1bWVudE1hcmtlcihtYXJrZXIpLT5zZXRSZW5kZXJlZFJlY3QobWFya2Vy
UmVjdCk7CisgICAgbWFya2VyLT5zZXRSZW5kZXJlZFJlY3QobWFya2VyUmVjdCk7CiAgICAgCiAg
ICAgLy8gT3B0aW9uYWxseSBoaWdobGlnaHQgdGhlIHRleHQKICAgICBpZiAocmVuZGVyZXIoKS5m
cmFtZSgpLmVkaXRvcigpLm1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoKSkgewpAQCAt
MTE2Miw3ICsxMTYyLDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFRleHRNYXRjaE1hcmtl
cihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UG8KICAgICB9CiB9CiAKLXZv
aWQgSW5saW5lVGV4dEJveDo6Y29tcHV0ZVJlY3RGb3JSZXBsYWNlbWVudE1hcmtlcihEb2N1bWVu
dE1hcmtlciogbWFya2VyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZv
bnQpCit2b2lkIElubGluZVRleHRCb3g6OmNvbXB1dGVSZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXIo
UmVuZGVyZWREb2N1bWVudE1hcmtlciogbWFya2VyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUs
IGNvbnN0IEZvbnQmIGZvbnQpCiB7CiAgICAgLy8gUmVwbGFjZW1lbnQgbWFya2VycyBhcmUgbm90
IGFjdHVhbGx5IGRyYXduLCBidXQgdGhlaXIgcmVjdHMgbmVlZCB0byBiZSBjb21wdXRlZCBmb3Ig
aGl0IHRlc3RpbmcuCiAgICAgTGF5b3V0VW5pdCB0b3AgPSBzZWxlY3Rpb25Ub3AoKTsKQEAgLTEx
NzcsNyArMTE3Nyw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6Y29tcHV0ZVJlY3RGb3JSZXBsYWNl
bWVudE1hcmtlcihEb2N1bWVudE1hcmtlciogbWFya2VyLCBjb25zCiAgICAgZm9udC5hZGp1c3RT
ZWxlY3Rpb25SZWN0Rm9yVGV4dChydW4sIHNlbGVjdGlvblJlY3QsIHNQb3MsIGVQb3MpOwogICAg
IEludFJlY3QgbWFya2VyUmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qoc2VsZWN0aW9uUmVjdCk7CiAg
ICAgbWFya2VyUmVjdCA9IHJlbmRlcmVyKCkubG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3Qo
bWFya2VyUmVjdCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7Ci0gICAgdG9SZW5kZXJlZERvY3Vt
ZW50TWFya2VyKG1hcmtlciktPnNldFJlbmRlcmVkUmVjdChtYXJrZXJSZWN0KTsKKyAgICBtYXJr
ZXItPnNldFJlbmRlcmVkUmVjdChtYXJrZXJSZWN0KTsKIH0KICAgICAKIHZvaWQgSW5saW5lVGV4
dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcnMoR3JhcGhpY3NDb250ZXh0KiBwdCwgY29uc3QgRmxv
YXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQm
IGZvbnQsIGJvb2wgYmFja2dyb3VuZCkKQEAgLTExODUsMTQgKzExODUsMTEgQEAgdm9pZCBJbmxp
bmVUZXh0Qm94OjpwYWludERvY3VtZW50TWFya2VycyhHcmFwaGljc0NvbnRleHQqIHB0LCBjb25z
dCBGbG9hdFBvaW50JgogICAgIGlmICghcmVuZGVyZXIoKS50ZXh0Tm9kZSgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gcmVuZGVyZXIo
KS5kb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzRm9yKHJlbmRlcmVyKCkudGV4dE5vZGUoKSk7
Ci0gICAgVmVjdG9yPERvY3VtZW50TWFya2VyKj46OmNvbnN0X2l0ZXJhdG9yIG1hcmtlckl0ID0g
bWFya2Vycy5iZWdpbigpOworICAgIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFy
a2VycyA9IHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0ZvcihyZW5kZXJl
cigpLnRleHROb2RlKCkpOwogCiAgICAgLy8gR2l2ZSBhbnkgZG9jdW1lbnQgbWFya2VycyB0aGF0
IHRvdWNoIHRoaXMgcnVuIGEgY2hhbmNlIHRvIGRyYXcgYmVmb3JlIHRoZSB0ZXh0IGhhcyBiZWVu
IGRyYXduLgogICAgIC8vIE5vdGUgZW5kKCkgcG9pbnRzIGF0IHRoZSBsYXN0IGNoYXIsIG5vdCBv
bmUgcGFzdCBpdCBsaWtlIGVuZE9mZnNldCBhbmQgcmFuZ2VzIGRvLgotICAgIGZvciAoIDsgbWFy
a2VySXQgIT0gbWFya2Vycy5lbmQoKTsgKyttYXJrZXJJdCkgewotICAgICAgICBEb2N1bWVudE1h
cmtlciogbWFya2VyID0gKm1hcmtlckl0OwotICAgICAgICAKKyAgICBmb3IgKGF1dG8qIG1hcmtl
ciA6IG1hcmtlcnMpIHsKICAgICAgICAgLy8gUGFpbnQgZWl0aGVyIHRoZSBiYWNrZ3JvdW5kIG1h
cmtlcnMgb3IgdGhlIGZvcmVncm91bmQgbWFya2VycywgYnV0IG5vdCBib3RoCiAgICAgICAgIHN3
aXRjaCAobWFya2VyLT50eXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6
OkdyYW1tYXI6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4
dEJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAppbmRleCA0
ZGEwYmE4ZmY5ZTUwMGRkN2QwMjUyYWZlYjMzMGM1MDI2ZGYyODdmLi42ODNhNWMyZTRhZDJjODNk
ODI4ZGJmMGRmODU5OWI1ZjY4M2MzNzRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lVGV4dEJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVUZXh0Qm94LmgKQEAgLTMwLDcgKzMwLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3Ry
dWN0IENvbXBvc2l0aW9uVW5kZXJsaW5lOwotY2xhc3MgRG9jdW1lbnRNYXJrZXI7CitjbGFzcyBS
ZW5kZXJlZERvY3VtZW50TWFya2VyOwogY2xhc3MgVGV4dFBhaW50ZXI7CiAKIGNvbnN0IHVuc2ln
bmVkIHNob3J0IGNOb1RydW5jYXRpb24gPSBVU0hSVF9NQVg7CkBAIC0xNTUsMTAgKzE1NSwxMCBA
QCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIHZvaWQgcGFpbnREZWNvcmF0aW9uKEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgVGV4dERlY29yYXRpb24sIFRl
eHREZWNvcmF0aW9uU3R5bGUsIGNvbnN0IFNoYWRvd0RhdGEqLCBUZXh0UGFpbnRlciYpOwogICAg
IHZvaWQgcGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRQb2ludCYg
Ym94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmLCBDb2xvciB0ZXh0Q29s
b3IpOwotICAgIHZvaWQgcGFpbnREb2N1bWVudE1hcmtlcihHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIERvY3VtZW50TWFya2VyKiwgY29uc3QgUmVuZGVyU3R5
bGUmLCBjb25zdCBGb250JiwgYm9vbCBncmFtbWFyKTsKLSAgICB2b2lkIHBhaW50VGV4dE1hdGNo
TWFya2VyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgRG9j
dW1lbnRNYXJrZXIqLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmKTsKKyAgICB2b2lk
IHBhaW50RG9jdW1lbnRNYXJrZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRQb2ludCYg
Ym94T3JpZ2luLCBSZW5kZXJlZERvY3VtZW50TWFya2VyKiwgY29uc3QgUmVuZGVyU3R5bGUmLCBj
b25zdCBGb250JiwgYm9vbCBncmFtbWFyKTsKKyAgICB2b2lkIHBhaW50VGV4dE1hdGNoTWFya2Vy
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgUmVuZGVyZWRE
b2N1bWVudE1hcmtlciosIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udCYpOwogCi0gICAg
dm9pZCBjb21wdXRlUmVjdEZvclJlcGxhY2VtZW50TWFya2VyKERvY3VtZW50TWFya2VyKiwgY29u
c3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250Jik7CisgICAgdm9pZCBjb21wdXRlUmVjdEZvclJl
cGxhY2VtZW50TWFya2VyKFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqLCBjb25zdCBSZW5kZXJTdHls
ZSYsIGNvbnN0IEZvbnQmKTsKIAogICAgIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFu
c2lvbkJlaGF2aW9yKCkgY29uc3QKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdJbmxpbmVGbG93Qm94LmNwcAppbmRleCBmMmM5ODg4YTFhM2I0ODA0MDZlYTE3
OGE0Yzk3NzkxZTY4NWUzZjNlLi5hZDM0NWYwYzljZmVjZTRlNGEzNzY3MTk2Zjg1YjhhNDIwMDI2
MzEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZs
b3dCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lRmxv
d0JveC5jcHAKQEAgLTgzLDEyICs4Myw4IEBAIHZvaWQgU1ZHSW5saW5lRmxvd0JveDo6Y29tcHV0
ZVRleHRNYXRjaE1hcmtlclJlY3RGb3JSZW5kZXJlcihSZW5kZXJTVkdJbmxpbmVUZXh0CiAgICAg
UmVuZGVyU3R5bGUmIHN0eWxlID0gdGV4dFJlbmRlcmVyLT5zdHlsZSgpOwogCiAgICAgQWZmaW5l
VHJhbnNmb3JtIGZyYWdtZW50VHJhbnNmb3JtOwotICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+
IG1hcmtlcnMgPSB0ZXh0UmVuZGVyZXItPmRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNGb3Io
JnRleHROb2RlKTsKLQotICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+OjppdGVyYXRvciBtYXJr
ZXJFbmQgPSBtYXJrZXJzLmVuZCgpOwotICAgIGZvciAoVmVjdG9yPERvY3VtZW50TWFya2VyKj46
Oml0ZXJhdG9yIG1hcmtlckl0ID0gbWFya2Vycy5iZWdpbigpOyBtYXJrZXJJdCAhPSBtYXJrZXJF
bmQ7ICsrbWFya2VySXQpIHsKLSAgICAgICAgRG9jdW1lbnRNYXJrZXIqIG1hcmtlciA9ICptYXJr
ZXJJdDsKLQorICAgIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IHRl
eHRSZW5kZXJlci0+ZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0ZvcigmdGV4dE5vZGUpOwor
ICAgIGZvciAoYXV0byogbWFya2VyIDogbWFya2VycykgewogICAgICAgICAvLyBTVkcgaXMgb25s
eSBpbnRlcmVzc3RlZCBpbiB0aGUgVGV4dE1hdGNoIG1hcmtlciwgZm9yIG5vdy4KICAgICAgICAg
aWYgKG1hcmtlci0+dHlwZSgpICE9IERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpCiAgICAgICAg
ICAgICBjb250aW51ZTsKQEAgLTEyOCw3ICsxMjQsNyBAQCB2b2lkIFNWR0lubGluZUZsb3dCb3g6
OmNvbXB1dGVUZXh0TWF0Y2hNYXJrZXJSZWN0Rm9yUmVuZGVyZXIoUmVuZGVyU1ZHSW5saW5lVGV4
dAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgdG9SZW5kZXJlZERvY3VtZW50
TWFya2VyKG1hcmtlciktPnNldFJlbmRlcmVkUmVjdCh0ZXh0UmVuZGVyZXItPmxvY2FsVG9BYnNv
bHV0ZVF1YWQobWFya2VyUmVjdCkuZW5jbG9zaW5nQm91bmRpbmdCb3goKSk7CisgICAgICAgIG1h
cmtlci0+c2V0UmVuZGVyZWRSZWN0KHRleHRSZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZCht
YXJrZXJSZWN0KS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRleCAxNDhkM2MyM2UzMDQ1NDFlNGY4M2JjMjVlZGI5
ZmU1MTY1NWQ3Y2YzLi4zNWU0MmUxZTFlZTZjMmE4NGJkNjMzN2U3YTk4ZGM3ZDFhNzQxODM3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC04NSw2ICs4NSw3IEBACiAjaW5j
bHVkZSAiUmVuZGVyTWVudUxpc3QuaCIKICNpbmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCiAj
aW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIlJlbmRlcmVkRG9jdW1lbnRNYXJrZXIu
aCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NoZW1l
UmVnaXN0cnkuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgpAQCAtNzc5LDM5
ICs3ODAsMzkgQEAgdW5zaWduZWQgSW50ZXJuYWxzOjptYXJrZXJDb3VudEZvck5vZGUoTm9kZSog
bm9kZSwgY29uc3QgU3RyaW5nJiBtYXJrZXJUeXBlLCBFeGMKICAgICByZXR1cm4gbm9kZS0+ZG9j
dW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0Zvcihub2RlLCBtYXJrZXJUeXBlcykuc2l6ZSgpOwog
fQogCi1Eb2N1bWVudE1hcmtlciogSW50ZXJuYWxzOjptYXJrZXJBdChOb2RlKiBub2RlLCBjb25z
dCBTdHJpbmcmIG1hcmtlclR5cGUsIHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykK
K1JlbmRlcmVkRG9jdW1lbnRNYXJrZXIqIEludGVybmFsczo6bWFya2VyQXQoTm9kZSogbm9kZSwg
Y29uc3QgU3RyaW5nJiBtYXJrZXJUeXBlLCB1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgbm9kZS0+ZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5
bGVzaGVldHMoKTsKICAgICBpZiAoIW5vZGUpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VT
U19FUlI7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CiAKICAgICBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZXMgbWFya2VyVHlwZXMgPSAwOwogICAg
IGlmICghbWFya2VyVHlwZXNGcm9tKG1hcmtlclR5cGUsIG1hcmtlclR5cGVzKSkgewogICAgICAg
ICBlYyA9IFNZTlRBWF9FUlI7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CiAKICAgICBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCktPmVkaXRvcigpLnVw
ZGF0ZUVkaXRvclVJTm93SWZTY2hlZHVsZWQoKTsKIAotICAgIFZlY3RvcjxEb2N1bWVudE1hcmtl
cio+IG1hcmtlcnMgPSBub2RlLT5kb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzRm9yKG5vZGUs
IG1hcmtlclR5cGVzKTsKKyAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtl
cnMgPSBub2RlLT5kb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzRm9yKG5vZGUsIG1hcmtlclR5
cGVzKTsKICAgICBpZiAobWFya2Vycy5zaXplKCkgPD0gaW5kZXgpCi0gICAgICAgIHJldHVybiAw
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gbWFya2Vyc1tpbmRleF07CiB9
CiAKIFBhc3NSZWZQdHI8UmFuZ2U+IEludGVybmFsczo6bWFya2VyUmFuZ2VGb3JOb2RlKE5vZGUq
IG5vZGUsIGNvbnN0IFN0cmluZyYgbWFya2VyVHlwZSwgdW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewotICAgIERvY3VtZW50TWFya2VyKiBtYXJrZXIgPSBtYXJrZXJBdChub2Rl
LCBtYXJrZXJUeXBlLCBpbmRleCwgZWMpOworICAgIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqIG1h
cmtlciA9IG1hcmtlckF0KG5vZGUsIG1hcmtlclR5cGUsIGluZGV4LCBlYyk7CiAgICAgaWYgKCFt
YXJrZXIpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBy
ZXR1cm4gUmFuZ2U6OmNyZWF0ZShub2RlLT5kb2N1bWVudCgpLCBub2RlLCBtYXJrZXItPnN0YXJ0
T2Zmc2V0KCksIG5vZGUsIG1hcmtlci0+ZW5kT2Zmc2V0KCkpOwogfQogCiBTdHJpbmcgSW50ZXJu
YWxzOjptYXJrZXJEZXNjcmlwdGlvbkZvck5vZGUoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBt
YXJrZXJUeXBlLCB1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgRG9j
dW1lbnRNYXJrZXIqIG1hcmtlciA9IG1hcmtlckF0KG5vZGUsIG1hcmtlclR5cGUsIGluZGV4LCBl
Yyk7CisgICAgUmVuZGVyZWREb2N1bWVudE1hcmtlciogbWFya2VyID0gbWFya2VyQXQobm9kZSwg
bWFya2VyVHlwZSwgaW5kZXgsIGVjKTsKICAgICBpZiAoIW1hcmtlcikKICAgICAgICAgcmV0dXJu
IFN0cmluZygpOwogICAgIHJldHVybiBtYXJrZXItPmRlc2NyaXB0aW9uKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oIGIvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuaAppbmRleCBkZjAyZTM0YTgxMjhlOGE5ODE1ZmVhZTY2NDU2MDQ4MDlh
ZDk2MzJiLi4wZTM1ZTkyMWJmOWNlMmVlNjQyYzgxYTMzNTMyYzFmOWU4NTc2ZWMyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKQEAgLTQ2LDcgKzQ2LDYgQEAgY2xhc3MgQ2xpZW50UmVj
dExpc3Q7CiBjbGFzcyBET01TdHJpbmdMaXN0OwogY2xhc3MgRE9NV2luZG93OwogY2xhc3MgRG9j
dW1lbnQ7Ci1jbGFzcyBEb2N1bWVudE1hcmtlcjsKIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBGcmFt
ZTsKIGNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbER1bW15OwpAQCAtNTcsNiArNTYsNyBA
QCBjbGFzcyBNZW1vcnlJbmZvOwogY2xhc3MgTm9kZTsKIGNsYXNzIFBhZ2U7CiBjbGFzcyBSYW5n
ZTsKK2NsYXNzIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXI7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25D
b250ZXh0OwogY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlOwogY2xhc3MgU291cmNlQnVmZmVy
OwpAQCAtMzUxLDcgKzM1MSw3IEBAIHByaXZhdGU6CiAgICAgRnJhbWUqIGZyYW1lKCkgY29uc3Q7
CiAgICAgVmVjdG9yPFN0cmluZz4gaWNvblVSTHMoRG9jdW1lbnQqLCBpbnQgaWNvblR5cGVzTWFz
aykgY29uc3Q7CiAKLSAgICBEb2N1bWVudE1hcmtlciogbWFya2VyQXQoTm9kZSosIGNvbnN0IFN0
cmluZyYgbWFya2VyVHlwZSwgdW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBS
ZW5kZXJlZERvY3VtZW50TWFya2VyKiBtYXJrZXJBdChOb2RlKiwgY29uc3QgU3RyaW5nJiBtYXJr
ZXJUeXBlLCB1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwogI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCiAgICAgUmVmUHRyPERPTVdpbmRvdz4gbV9mcm9udGVuZFdpbmRvdzsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8SW5zcGVjdG9yRnJvbnRlbmRDbGllbnREdW1teT4gbV9mcm9udGVuZENsaWVu
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0RXhwb3J0
R2VuZXJhdG9yL1dlYktpdEV4cG9ydHMuZGVmLmluIGIvU291cmNlL1dlYktpdC9XZWJLaXQudmN4
cHJvai9XZWJLaXRFeHBvcnRHZW5lcmF0b3IvV2ViS2l0RXhwb3J0cy5kZWYuaW4KaW5kZXggNzVk
NzM1OGQ3MzhjNTc1ZWY0MjkzNzVjMmRjNTliYTA4ZDJlODMzNS4uNWFhMjY0NmU2NTIzYzRmNzll
OGMxYWM4YWVmMTJlZDM2YTc1NWExMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQu
dmN4cHJvai9XZWJLaXRFeHBvcnRHZW5lcmF0b3IvV2ViS2l0RXhwb3J0cy5kZWYuaW4KKysrIGIv
U291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJLaXRFeHBvcnRHZW5lcmF0b3IvV2ViS2l0
RXhwb3J0cy5kZWYuaW4KQEAgLTQyNyw3ICs0MjcsNyBAQCBFWFBPUlRTCiAgICAgICAgIHN5bWJv
bFdpdGhQb2ludGVyKD9zZXRBdXRvZmlsbGVkQEhUTUxJbnB1dEVsZW1lbnRAV2ViQ29yZUBAUUFF
WF9OQFosID9zZXRBdXRvZmlsbGVkQEhUTUxJbnB1dEVsZW1lbnRAV2ViQ29yZUBAUUVBQVhfTkBa
KQogICAgICAgICBzeW1ib2xXaXRoUG9pbnRlcig/c2V0RG9jdW1lbnRTdGF0ZUBIaXN0b3J5SXRl
bUBXZWJDb3JlQEBRQUVYQUJWPyRWZWN0b3JAVlN0cmluZ0BXVEZAQCQwQUBWQ3Jhc2hPbk92ZXJm
bG93QDJAQFdURkBAQFosID9zZXREb2N1bWVudFN0YXRlQEhpc3RvcnlJdGVtQFdlYkNvcmVAQFFF
QUFYQUVCVj8kVmVjdG9yQFZTdHJpbmdAV1RGQEAkMEFAVkNyYXNoT25PdmVyZmxvd0AyQEBXVEZA
QEBaKQogICAgICAgICBzeW1ib2xXaXRoUG9pbnRlcig/b3ZlcnJpZGVVc2VyUHJlZmVycmVkTGFu
Z3VhZ2VzQFdlYkNvcmVAQFlBWEFCVj8kVmVjdG9yQFZTdHJpbmdAV1RGQEAkMEFAVkNyYXNoT25P
dmVyZmxvd0AyQEBXVEZAQEBaLCA/b3ZlcnJpZGVVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzQFdlYkNv
cmVAQFlBWEFFQlY/JFZlY3RvckBWU3RyaW5nQFdURkBAJDBBQFZDcmFzaE9uT3ZlcmZsb3dAMkBA
V1RGQEBAWikKLSAgICAgICAgc3ltYm9sV2l0aFBvaW50ZXIoP21hcmtlcnNGb3JARG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyQFdlYkNvcmVAQFFBRT9BVj8kVmVjdG9yQFBBVkRvY3VtZW50TWFya2Vy
QFdlYkNvcmVAQCQwQUBWQ3Jhc2hPbk92ZXJmbG93QFdURkBAQFdURkBAUEFWTm9kZUAyQFZNYXJr
ZXJUeXBlc0BEb2N1bWVudE1hcmtlckAyQEBaLCA/bWFya2Vyc0ZvckBEb2N1bWVudE1hcmtlckNv
bnRyb2xsZXJAV2ViQ29yZUBAUUVBQT9BVj8kVmVjdG9yQFBFQVZEb2N1bWVudE1hcmtlckBXZWJD
b3JlQEAkMEFAVkNyYXNoT25PdmVyZmxvd0BXVEZAQEBXVEZAQFBFQVZOb2RlQDJAVk1hcmtlclR5
cGVzQERvY3VtZW50TWFya2VyQDJAQFopCisgICAgICAgIHN5bWJvbFdpdGhQb2ludGVyKD9tYXJr
ZXJzRm9yQERvY3VtZW50TWFya2VyQ29udHJvbGxlckBXZWJDb3JlQEBRQUU/QVY/JFZlY3RvckBQ
QVZSZW5kZXJlZERvY3VtZW50TWFya2VyQFdlYkNvcmVAQCQwQUBWQ3Jhc2hPbk92ZXJmbG93QFdU
RkBAQFdURkBAUEFWTm9kZUAyQFZNYXJrZXJUeXBlc0BEb2N1bWVudE1hcmtlckAyQEBaLCA/bWFy
a2Vyc0ZvckBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXJAV2ViQ29yZUBAUUVBQT9BVj8kVmVjdG9y
QFBFQVZSZW5kZXJlZERvY3VtZW50TWFya2VyQFdlYkNvcmVAQCQwQUBWQ3Jhc2hPbk92ZXJmbG93
QFdURkBAQFdURkBAUEVBVk5vZGVAMkBWTWFya2VyVHlwZXNARG9jdW1lbnRNYXJrZXJAMkBAWikK
ICAgICAgICAgc3ltYm9sV2l0aFBvaW50ZXIoP2dldFJlZmVyZW5jZWRGaWxlUGF0aHNARm9ybUNv
bnRyb2xsZXJAV2ViQ29yZUBAU0E/QVY/JFZlY3RvckBWU3RyaW5nQFdURkBAJDBBQFZDcmFzaE9u
T3ZlcmZsb3dAMkBAV1RGQEBBQlYzNEBAWiwgP2dldFJlZmVyZW5jZWRGaWxlUGF0aHNARm9ybUNv
bnRyb2xsZXJAV2ViQ29yZUBAU0E/QVY/JFZlY3RvckBWU3RyaW5nQFdURkBAJDBBQFZDcmFzaE9u
T3ZlcmZsb3dAMkBAV1RGQEBBRUJWMzRAQFopCiAgICAgICAgIHN5bWJvbFdpdGhQb2ludGVyKD9p
Y29uVVJMc0BEb2N1bWVudEBXZWJDb3JlQEBRQUVBQlY/JFZlY3RvckBVSWNvblVSTEBXZWJDb3Jl
QEAkMEFAVkNyYXNoT25PdmVyZmxvd0BXVEZAQEBXVEZAQEhAWiwgP2ljb25VUkxzQERvY3VtZW50
QFdlYkNvcmVAQFFFQUFBRUJWPyRWZWN0b3JAVUljb25VUkxAV2ViQ29yZUBAJDBBQFZDcmFzaE9u
T3ZlcmZsb3dAV1RGQEBAV1RGQEBIQFopCiAgICAgICAgID91c2VyUHJlZmVycmVkTGFuZ3VhZ2Vz
QFdlYkNvcmVAQFlBP0FWPyRWZWN0b3JAVlN0cmluZ0BXVEZAQCQwQUBWQ3Jhc2hPbk92ZXJmbG93
QDJAQFdURkBAWFoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240096</attachid>
            <date>2014-10-19 20:52:32 -0700</date>
            <delta_ts>2014-10-19 22:17:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137858-20141019205238.patch</filename>
            <type>text/plain</type>
            <size>47115</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0ODY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzc3OTkwNjU5YmY1N2I5
Yzg3MjIxMTY5MTg3NGVmZjJiZWU3Yzc5Zi4uNDQzZTI4ODI0YTYzOTMwMTNjYThmMzYzYTA1MjFm
NGFjZWJmMGMzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDE0LTEwLTE5ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgS2lsbCB0b1JlbmRlcmVkRG9j
dW1lbnRNYXJrZXIoKSBieSB1c2luZyB0aWdodGVyIHR5cGluZworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3ODU4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgS2lsbCB0b1JlbmRlcmVkRG9jdW1lbnRNYXJrZXIo
KSBieSB1c2luZyB0aWdodGVyIHR5cGluZy4gVGhpcyBtZXRob2QKKyAgICAgICAgd2FzIGRvaW5n
IG5vIHR5cGUgdmFsaWRhdGlvbiwganVzdCBhIHN0YXRpY19jYXN0PD4oKS4KKworICAgICAgICBO
byBuZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIGRvbS9Eb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyOjphZGRUZXh0TWF0Y2hNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJzRm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50TWFya2VyQ29udHJvbGxlcjo6bWFya2Vyc0luUmFuZ2UpOgorICAgICAgICAoRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyOjpoYXNNYXJrZXJzKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyLmg6CisgICAgICAgICogZG9tL1JlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaDoK
KyAgICAgICAgKFdlYkNvcmU6OnRvUmVuZGVyZWREb2N1bWVudE1hcmtlcik6IERlbGV0ZWQuCisg
ICAgICAgICogZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Om1hcmtlcnNIYXZlSWRlbnRpY2FsRGVzY3JpcHRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZWNvcmRT
cGVsbGNoZWNrZXJSZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVS
ZXBsYWNlZEJ5UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXI6OmFwcGx5RGljdGF0aW9uQWx0ZXJuYXRpdmUpOgorICAgICAgICAqIGVkaXRpbmcvQ29t
cG9zaXRlRWRpdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29weU1hcmtlcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VUZXh0SW5Ob2Rl
UHJlc2VydmluZ01hcmtlcnMpOgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpvcmln
aW5hbFN0cmluZ0ZvckF1dG9jb3JyZWN0aW9uQXRCZWdpbm5pbmdPZlNlbGVjdGlvbik6CisgICAg
ICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp1cGRh
dGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzTWFya2VyRm9yKToKKyAgICAgICAgKiByZW5kZXJpbmcv
SW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWlu
dERvY3VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50
VGV4dE1hdGNoTWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmNvbXB1
dGVSZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4
dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcnMpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVU
ZXh0Qm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVGbG93Qm94LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZUZsb3dCb3g6OmNvbXB1dGVUZXh0TWF0Y2hNYXJr
ZXJSZWN0Rm9yUmVuZGVyZXIpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6bWFya2VyQXQpOgorICAgICAgICAoV2ViQ29yZTo6
SW50ZXJuYWxzOjptYXJrZXJSYW5nZUZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJu
YWxzOjptYXJrZXJEZXNjcmlwdGlvbkZvck5vZGUpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJu
YWxzLmg6CisKIDIwMTQtMTAtMTkgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFtHVEtdIE1vdmUgR3RrRHJhZ0FuZERyb3BIZWxwZXIgZnJvbSBQ
bGF0Zm9ybSB0byBXZWJLaXQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDc0OGUxM2UxY2FjNDlhNmUzY2M2NTkyZTA2
YTQzNDJmNzc0ODIxYjEuLmQ3ZTg5ODQ2OWU3NmZmMTdlN2E3YTZkZGJkZjE2M2MyZjRkODEwY2Yg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTQtMTAtMTggIENocmlzIER1bWV6ICA8Y2R1
bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBLaWxsIHRvUmVuZGVyZWREb2N1bWVudE1hcmtlcigp
IGJ5IHVzaW5nIHRpZ2h0ZXIgdHlwaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzc4NTgKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxl
ci4KKworICAgICAgICBVcGRhdGUgc3ltYm9sIGV4cG9ydCBmb3IgV2luZG93cyBkdWUgdG8gYXJn
dW1lbnQgdHlwZSBjaGFuZ2UuCisKKyAgICAgICAgKiBXZWJLaXQudmN4cHJvai9XZWJLaXRFeHBv
cnRHZW5lcmF0b3IvV2ViS2l0RXhwb3J0cy5kZWYuaW46CisKIDIwMTQtMTAtMTcgIHBlYXZvQG91
dGxvb2suY29tICA8cGVhdm9Ab3V0bG9vay5jb20+CiAKICAgICAgICAgW1dpbkNhaXJvXSBBY2Nl
bGVyYXRlZCBjb21wb3NpdGluZyBpcyBub3QgaW1wbGVtZW50ZWQuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCmluZGV4IDljYjhhZTY1N2Q2ZWFk
NmZjYWVmM2IxOTFjZjZhZTBhZWFiNzBmZDAuLjQxZjEyNzBkYzVkNGZlZjMwYmRmZjEzYzUyNGYy
M2U0NGMyYzNlNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNv
bnRyb2xsZXIuY3BwCkBAIC0xMDEsOCArMTAxLDggQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXI6OmFkZFRleHRNYXRjaE1hcmtlcihjb25zdCBSYW5nZSogcmFuZ2UsIGJvb2wgYWN0aXYK
ICAgICAgICAgICAgIC8vIHRoZSB3aG9sZSBwdXJwb3NlIG9mIHRpY2ttYXJrcyBvbiB0aGUgc2Ny
b2xsYmFyIGlzIHRvIHNob3cgd2hlcmUKICAgICAgICAgICAgIC8vIG1hdGNoZXMgb2ZmLXNjcmVl
biBhcmUgKHRoYXQgaGF2ZW4ndCBiZWVuIHBhaW50ZWQgeWV0KS4KICAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSB0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVyKCk7Ci0gICAgICAgICAgICBWZWN0b3I8
RG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gbWFya2Vyc0Zvcihub2RlKTsKLSAgICAgICAgICAg
IHN0YXRpY19jYXN0PFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPihtYXJrZXJzW21hcmtlcnMuc2l6
ZSgpIC0gMV0pLT5zZXRSZW5kZXJlZFJlY3QocmFuZ2UtPmJvdW5kaW5nQm94KCkpOworICAgICAg
ICAgICAgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gbWFya2Vyc0Zv
cihub2RlKTsKKyAgICAgICAgICAgIG1hcmtlcnNbbWFya2Vycy5zaXplKCkgLSAxXS0+c2V0UmVu
ZGVyZWRSZWN0KHJhbmdlLT5ib3VuZGluZ0JveCgpKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAg
LTM3Niw5ICszNzYsOSBAQCBEb2N1bWVudE1hcmtlciogRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjptYXJrZXJDb250YWluaW5nUG9pbnQoY29uc3QgTGF5b3V0UG9pbgogICAgIHJldHVybiAwOwog
fQogCi1WZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1h
cmtlcnNGb3IoTm9kZSogbm9kZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGVzIG1hcmtlclR5
cGVzKQorVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXI6Om1hcmtlcnNGb3IoTm9kZSogbm9kZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGVz
IG1hcmtlclR5cGVzKQogewotICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+IHJlc3VsdDsKKyAg
ICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IHJlc3VsdDsKICAgICBNYXJrZXJMaXN0
KiBsaXN0ID0gbV9tYXJrZXJzLmdldChub2RlKTsKICAgICBpZiAoIWxpc3QpCiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CkBAIC0zOTEsMTIgKzM5MSwxMiBAQCBWZWN0b3I8RG9jdW1lbnRNYXJrZXIq
PiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlcnNGb3IoTm9kZSogbm9kZSwgRG9jdW1l
bgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVZlY3RvcjxEb2N1bWVudE1hcmtlcio+IERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlcjo6bWFya2Vyc0luUmFuZ2UoUmFuZ2UqIHJhbmdlLCBEb2N1bWVu
dE1hcmtlcjo6TWFya2VyVHlwZXMgbWFya2VyVHlwZXMpCitWZWN0b3I8UmVuZGVyZWREb2N1bWVu
dE1hcmtlcio+IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFya2Vyc0luUmFuZ2UoUmFuZ2Uq
IHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZXMgbWFya2VyVHlwZXMpCiB7CiAgICAg
aWYgKCFwb3NzaWJseUhhc01hcmtlcnMobWFya2VyVHlwZXMpKQotICAgICAgICByZXR1cm4gVmVj
dG9yPERvY3VtZW50TWFya2VyKj4oKTsKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxSZW5kZXJlZERv
Y3VtZW50TWFya2VyKj4oKTsKIAotICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+IGZvdW5kTWFy
a2VyczsKKyAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IGZvdW5kTWFya2VyczsK
IAogICAgIE5vZGUqIHN0YXJ0Q29udGFpbmVyID0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCk7CiAg
ICAgQVNTRVJUKHN0YXJ0Q29udGFpbmVyKTsKQEAgLTQwNSwxMCArNDA1LDcgQEAgVmVjdG9yPERv
Y3VtZW50TWFya2VyKj4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJzSW5SYW5nZShS
YW5nZSogcmFuZ2UsIEQKIAogICAgIE5vZGUqIHBhc3RMYXN0Tm9kZSA9IHJhbmdlLT5wYXN0TGFz
dE5vZGUoKTsKICAgICBmb3IgKE5vZGUqIG5vZGUgPSByYW5nZS0+Zmlyc3ROb2RlKCk7IG5vZGUg
IT0gcGFzdExhc3ROb2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewotICAg
ICAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gbWFya2Vyc0Zvcihub2RlKTsK
LSAgICAgICAgVmVjdG9yPERvY3VtZW50TWFya2VyKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1h
cmtlcnMuZW5kKCk7Ci0gICAgICAgIGZvciAoVmVjdG9yPERvY3VtZW50TWFya2VyKj46OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbWFya2Vycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgICAgIERvY3VtZW50TWFya2VyKiBtYXJrZXIgPSAqaXQ7CisgICAgICAgIGZvciAoYXV0byog
bWFya2VyIDogbWFya2Vyc0Zvcihub2RlKSkgewogICAgICAgICAgICAgaWYgKCFtYXJrZXJUeXBl
cy5jb250YWlucyhtYXJrZXItPnR5cGUoKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICBpZiAobm9kZSA9PSBzdGFydENvbnRhaW5lciAmJiBtYXJrZXItPmVuZE9mZnNl
dCgpIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyYW5nZS0+c3RhcnRPZmZzZXQoKSkpCkBAIC02
NzksMTAgKzY3Niw3IEBAIGJvb2wgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpoYXNNYXJrZXJz
KFJhbmdlKiByYW5nZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5CiAKICAgICBOb2RlKiBwYXN0
TGFzdE5vZGUgPSByYW5nZS0+cGFzdExhc3ROb2RlKCk7CiAgICAgZm9yIChOb2RlKiBub2RlID0g
cmFuZ2UtPmZpcnN0Tm9kZSgpOyBub2RlICE9IHBhc3RMYXN0Tm9kZTsgbm9kZSA9IE5vZGVUcmF2
ZXJzYWw6Om5leHQobm9kZSkpIHsKLSAgICAgICAgVmVjdG9yPERvY3VtZW50TWFya2VyKj4gbWFy
a2VycyA9IG1hcmtlcnNGb3Iobm9kZSk7Ci0gICAgICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXJrZXJzLmVuZCgpOwotICAgICAgICBmb3IgKFZlY3Rv
cjxEb2N1bWVudE1hcmtlcio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1hcmtlcnMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBEb2N1bWVudE1hcmtlciogbWFya2VyID0g
Kml0OworICAgICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IG1hcmtlcnNGb3Iobm9kZSkpIHsKICAg
ICAgICAgICAgIGlmICghbWFya2VyVHlwZXMuY29udGFpbnMobWFya2VyLT50eXBlKCkpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKG5vZGUgPT0gc3RhcnRDb250
YWluZXIgJiYgbWFya2VyLT5lbmRPZmZzZXQoKSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmFu
Z2UtPnN0YXJ0T2Zmc2V0KCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50TWFya2VyQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2Vy
Q29udHJvbGxlci5oCmluZGV4IGI4NWEzOTM0NDIzZTEzOTY4Y2QxNDVhMTdiZjIxYmQ2ZTRhY2Ji
MmIuLjc2OWRkOTIyN2Y0OWFkZjliYTUxMDRmY2MwOGM2NWI2MDQ1N2Y2M2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgKQEAgLTg0LDggKzg0LDgg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0TWFya2Vyc0FjdGl2ZShOb2RlKiwgdW5zaWduZWQgc3Rh
cnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgYm9vbCk7CiAKICAgICBEb2N1bWVudE1hcmtl
ciogbWFya2VyQ29udGFpbmluZ1BvaW50KGNvbnN0IExheW91dFBvaW50JiwgRG9jdW1lbnRNYXJr
ZXI6Ok1hcmtlclR5cGUpOwotICAgIFdFQkNPUkVfRVhQT1JUIFZlY3RvcjxEb2N1bWVudE1hcmtl
cio+IG1hcmtlcnNGb3IoTm9kZSosIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyA9IERvY3Vt
ZW50TWFya2VyOjpBbGxNYXJrZXJzKCkpOwotICAgIFdFQkNPUkVfRVhQT1JUIFZlY3RvcjxEb2N1
bWVudE1hcmtlcio+IG1hcmtlcnNJblJhbmdlKFJhbmdlKiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtl
clR5cGVzKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtl
cio+IG1hcmtlcnNGb3IoTm9kZSosIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyA9IERvY3Vt
ZW50TWFya2VyOjpBbGxNYXJrZXJzKCkpOworICAgIFdFQkNPUkVfRVhQT1JUIFZlY3RvcjxSZW5k
ZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2Vyc0luUmFuZ2UoUmFuZ2UqLCBEb2N1bWVudE1hcmtl
cjo6TWFya2VyVHlwZXMpOwogICAgIFdFQkNPUkVfRVhQT1JUIFZlY3RvcjxJbnRSZWN0PiByZW5k
ZXJlZFJlY3RzRm9yTWFya2VycyhEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSk7CiAgICAgdm9p
ZCBjbGVhckRlc2NyaXB0aW9uT25NYXJrZXJzSW50ZXJzZWN0aW5nUmFuZ2UoUmFuZ2UqLCBEb2N1
bWVudE1hcmtlcjo6TWFya2VyVHlwZXMpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vUmVuZGVyZWREb2N1bWVudE1hcmtlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1JlbmRlcmVk
RG9jdW1lbnRNYXJrZXIuaAppbmRleCA3ZThmZTJiNTUyZDRhNWYwYjMzZmRhZWU3NjVlODkxYTQ3
OTk4MzQ4Li43ZDQ4MTE1ZDEwMjkyNDE5Zjk3OTJkNzg2OTY0ZGFiNDMzOGFiNDJjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmVuZGVyZWREb2N1bWVudE1hcmtlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9SZW5kZXJlZERvY3VtZW50TWFya2VyLmgKQEAgLTYyLDExICs2Miw2
IEBAIGlubGluZSB2b2lkIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXI6OmludmFsaWRhdGUoY29uc3Qg
TGF5b3V0UmVjdCYgcikKICAgICAgICAgaW52YWxpZGF0ZSgpOwogfQogCi1pbmxpbmUgUmVuZGVy
ZWREb2N1bWVudE1hcmtlciogdG9SZW5kZXJlZERvY3VtZW50TWFya2VyKERvY3VtZW50TWFya2Vy
KiBtYXJrZXIpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlcmVkRG9jdW1lbnRNYXJr
ZXIqPihtYXJrZXIpOwotfQotCiB9IC8vIG5hbWVzcGFjZQogCiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCmluZGV4
IDNjMTRkZmMwNWM1ZjNhNTc0MjY1YTY5ZjNhMzQ1NjgyZTI0NTJmMDguLjFhNmU1NGU2YzRjZDg3
N2NlYmIzOWYxMzAzNzljMmVmMjExMWI2MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcApAQCAtMzcsNiArMzcsNyBAQAog
I2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiUGFn
ZS5oIgorI2luY2x1ZGUgIlJlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaCIKICNpbmNsdWRlICJTcGVs
bGluZ0NvcnJlY3Rpb25Db21tYW5kLmgiCiAjaW5jbHVkZSAiVGV4dENoZWNrZXJDbGllbnQuaCIK
ICNpbmNsdWRlICJUZXh0Q2hlY2tpbmdIZWxwZXIuaCIKQEAgLTExNCw3ICsxMTUsNyBAQCBzdGF0
aWMgY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYgbWFya2VyVHlwZXNG
b3JBcHBsaWVkRGljdGF0aW9uQQogICAgIHJldHVybiBtYXJrZXJUeXBlc0ZvckFwcGxpZWREaWN0
YXRpb25BbHRlcm5hdGl2ZTsKIH0KIAotc3RhdGljIGJvb2wgbWFya2Vyc0hhdmVJZGVudGljYWxE
ZXNjcmlwdGlvbihjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiYgbWFya2VycykKK3N0YXRp
YyBib29sIG1hcmtlcnNIYXZlSWRlbnRpY2FsRGVzY3JpcHRpb24oY29uc3QgVmVjdG9yPFJlbmRl
cmVkRG9jdW1lbnRNYXJrZXIqPiYgbWFya2VycykKIHsKICAgICBpZiAobWFya2Vycy5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNDY5LDEzICs0NzAsOCBAQCB2b2lkIEFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlz
aWJsZVNlbGVjdGlvbgogICAgICAgICByZXR1cm47CiAKICAgICBOb2RlKiBub2RlID0gcG9zaXRp
b24uY29udGFpbmVyTm9kZSgpOwotICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+IG1hcmtlcnMg
PSBub2RlLT5kb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzRm9yKG5vZGUpOwotICAgIHNpemVf
dCBtYXJrZXJDb3VudCA9IG1hcmtlcnMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbWFya2VyQ291bnQ7ICsraSkgewotICAgICAgICBjb25zdCBEb2N1bWVudE1hcmtlciogbWFy
a2VyID0gbWFya2Vyc1tpXTsKLSAgICAgICAgaWYgKCFtYXJrZXIpCi0gICAgICAgICAgICBjb250
aW51ZTsKLQorICAgIGZvciAoYXV0byogbWFya2VyIDogbm9kZS0+ZG9jdW1lbnQoKS5tYXJrZXJz
KCkubWFya2Vyc0Zvcihub2RlKSkgeworICAgICAgICBBU1NFUlQobWFya2VyKTsKICAgICAgICAg
aWYgKHJlc3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKCptYXJrZXIsIHBvc2l0aW9uKSkKICAgICAg
ICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTU1NCw3ICs1NTAsNyBAQCB2b2lkIEFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3Jy
ZWN0aW9uKAogICAgIGlmICghcmFuZ2VPZkNvcnJlY3Rpb24pCiAgICAgICAgIHJldHVybjsKICAg
ICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXImIG1hcmtlcnMgPSByYW5nZU9mQ29ycmVjdGlvbi0+
c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS5tYXJrZXJzKCk7Ci0gICAgVmVjdG9yPERvY3Vt
ZW50TWFya2VyKj4gY29ycmVjdGVkT25jZU1hcmtlcnMgPSBtYXJrZXJzLm1hcmtlcnNJblJhbmdl
KHJhbmdlT2ZDb3JyZWN0aW9uLCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCk7CisgICAg
VmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBjb3JyZWN0ZWRPbmNlTWFya2VycyA9IG1h
cmtlcnMubWFya2Vyc0luUmFuZ2UocmFuZ2VPZkNvcnJlY3Rpb24sIERvY3VtZW50TWFya2VyOjpB
dXRvY29ycmVjdGVkKTsKICAgICBpZiAoY29ycmVjdGVkT25jZU1hcmtlcnMuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47CiAKQEAgLTYxMywxMCArNjA5LDkgQEAgYm9vbCBBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyOjpwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KGNv
bnN0IFQKICAgICBQb3NpdGlvbiBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiA9IGJlZ2lubmlu
Z09mUmFuZ2UucHJldmlvdXMoKTsKICAgICBSZWZQdHI8UmFuZ2U+IHByZWNlZGluZ0NoYXJhY3Rl
clJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBwcmVjZWRpbmdDaGFy
YWN0ZXJQb3NpdGlvbiwgYmVnaW5uaW5nT2ZSYW5nZSk7CiAKLSAgICBWZWN0b3I8RG9jdW1lbnRN
YXJrZXIqPiBtYXJrZXJzID0gbWFya2VyQ29udHJvbGxlci5tYXJrZXJzSW5SYW5nZShwcmVjZWRp
bmdDaGFyYWN0ZXJSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkRlbGV0ZWRBdXRvY29ycmVj
dGlvbik7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcmtlcnMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgaWYgKG1hcmtlcnNbaV0tPmRlc2NyaXB0aW9uKCkgPT0gc3RyaW5nVG9CZVJl
cGxhY2VkKQorICAgIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IG1h
cmtlckNvbnRyb2xsZXIubWFya2Vyc0luUmFuZ2UocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UuZ2V0
KCksIERvY3VtZW50TWFya2VyOjpEZWxldGVkQXV0b2NvcnJlY3Rpb24pOworICAgIGZvciAoY29u
c3QgYXV0byogbWFya2VyIDogbWFya2VycykgeworICAgICAgICBpZiAobWFya2VyLT5kZXNjcmlw
dGlvbigpID09IHN0cmluZ1RvQmVSZXBsYWNlZCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKQEAgLTczNSw5ICs3MzAsOSBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXI6OmFwcGx5RGljdGF0aW9uQWx0ZXJuYXRpdmUoY29uc3QgU3RyaW5nJiBhbHRlcm5hdAogICAg
IGlmICghc2VsZWN0aW9uIHx8ICFlZGl0b3Iuc2hvdWxkSW5zZXJ0VGV4dChhbHRlcm5hdGl2ZVN0
cmluZywgc2VsZWN0aW9uLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25QYXN0ZWQpKQogICAgICAg
ICByZXR1cm47CiAgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyJiBtYXJrZXJzID0gc2VsZWN0
aW9uLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLm1hcmtlcnMoKTsKLSAgICBWZWN0b3I8
RG9jdW1lbnRNYXJrZXIqPiBkaWN0YXRpb25BbHRlcm5hdGl2ZXNNYXJrZXJzID0gbWFya2Vycy5t
YXJrZXJzSW5SYW5nZShzZWxlY3Rpb24uZ2V0KCksIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25B
bHRlcm5hdGl2ZXMpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGljdGF0aW9uQWx0ZXJu
YXRpdmVzTWFya2Vycy5zaXplKCk7ICsraSkKLSAgICAgICAgcmVtb3ZlRGljdGF0aW9uQWx0ZXJu
YXRpdmVzRm9yTWFya2VyKGRpY3RhdGlvbkFsdGVybmF0aXZlc01hcmtlcnNbaV0pOworICAgIFZl
Y3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gZGljdGF0aW9uQWx0ZXJuYXRpdmVzTWFya2Vy
cyA9IG1hcmtlcnMubWFya2Vyc0luUmFuZ2Uoc2VsZWN0aW9uLmdldCgpLCBEb2N1bWVudE1hcmtl
cjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzKTsKKyAgICBmb3IgKGF1dG8qIG1hcmtlciA6IGRpY3Rh
dGlvbkFsdGVybmF0aXZlc01hcmtlcnMpCisgICAgICAgIHJlbW92ZURpY3RhdGlvbkFsdGVybmF0
aXZlc0Zvck1hcmtlcihtYXJrZXIpOwogCiAgICAgYXBwbHlBbHRlcm5hdGl2ZVRleHRUb1Jhbmdl
KHNlbGVjdGlvbi5nZXQoKSwgYWx0ZXJuYXRpdmVTdHJpbmcsIEFsdGVybmF0aXZlVGV4dFR5cGVE
aWN0YXRpb25BbHRlcm5hdGl2ZXMsIG1hcmtlclR5cGVzRm9yQXBwbGllZERpY3RhdGlvbkFsdGVy
bmF0aXZlKCkpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29t
cG9zaXRlRWRpdENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVF
ZGl0Q29tbWFuZC5jcHAKaW5kZXggMDY2NTRlYTJjYTUyMGY2NjJjYTdlOGU5M2UxNTBkODY1NGFh
M2MzYS4uNjVlNGE2MDhmMDRmYmI5OTgxZjM2MzY0N2ZkMDE1NDA0MzYwMGRlZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKQEAgLTU3LDYg
KzU3LDcgQEAKICNpbmNsdWRlICJSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZC5o
IgogI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIK
KyNpbmNsdWRlICJSZW5kZXJlZERvY3VtZW50TWFya2VyLmgiCiAjaW5jbHVkZSAiUmVwbGFjZU5v
ZGVXaXRoU3BhbkNvbW1hbmQuaCIKICNpbmNsdWRlICJSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5o
IgogI2luY2x1ZGUgIlNjb3BlZEV2ZW50UXVldWUuaCIKQEAgLTU3NCw3ICs1NzUsNyBAQCBQb3Np
dGlvbiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVwbGFjZVNlbGVjdGVkVGV4dEluTm9kZShjb25z
dCBTdHJpbmcmIHRleHQpCiAgICAgcmV0dXJuIFBvc2l0aW9uKHRleHROb2RlLnJlbGVhc2UoKSwg
c3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgKyB0ZXh0Lmxlbmd0aCgpKTsKIH0KIAotc3Rh
dGljIHZvaWQgY29weU1hcmtlcnMoY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyKj4mIG1hcmtl
clBvaW50ZXJzLCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+JiBtYXJrZXJzKQorc3RhdGljIHZvaWQg
Y29weU1hcmtlcnMoY29uc3QgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiYgbWFya2Vy
UG9pbnRlcnMsIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyPiYgbWFya2VycykKIHsKICAg
ICBzaXplX3QgYXJyYXlTaXplID0gbWFya2VyUG9pbnRlcnMuc2l6ZSgpOwogICAgIG1hcmtlcnMu
cmVzZXJ2ZUNhcGFjaXR5KGFycmF5U2l6ZSk7CkBAIC01ODYsMTUgKzU4NywxNSBAQCB2b2lkIENv
bXBvc2l0ZUVkaXRDb21tYW5kOjpyZXBsYWNlVGV4dEluTm9kZVByZXNlcnZpbmdNYXJrZXJzKFBh
c3NSZWZQdHI8VGV4dD4gcAogewogICAgIFJlZlB0cjxUZXh0PiBub2RlKHBycE5vZGUpOwogICAg
IERvY3VtZW50TWFya2VyQ29udHJvbGxlciYgbWFya2VyQ29udHJvbGxlciA9IGRvY3VtZW50KCku
bWFya2VycygpOwotICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcj4gbWFya2VyczsKKyAgICBWZWN0
b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcj4gbWFya2VyczsKICAgICBjb3B5TWFya2VycyhtYXJr
ZXJDb250cm9sbGVyLm1hcmtlcnNJblJhbmdlKFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgbm9k
ZSwgb2Zmc2V0LCBub2RlLCBvZmZzZXQgKyBjb3VudCkuZ2V0KCksIERvY3VtZW50TWFya2VyOjpB
bGxNYXJrZXJzKCkpLCBtYXJrZXJzKTsKICAgICByZXBsYWNlVGV4dEluTm9kZShub2RlLCBvZmZz
ZXQsIGNvdW50LCByZXBsYWNlbWVudFRleHQpOwogICAgIFJlZlB0cjxSYW5nZT4gbmV3UmFuZ2Ug
PSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIG5vZGUsIG9mZnNldCwgbm9kZSwgb2Zmc2V0ICsg
cmVwbGFjZW1lbnRUZXh0Lmxlbmd0aCgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1h
cmtlcnMuc2l6ZSgpOyArK2kpCisgICAgZm9yIChjb25zdCBhdXRvJiBtYXJrZXIgOiBtYXJrZXJz
KQogI2lmIFBMQVRGT1JNKElPUykKLSAgICAgICAgbWFya2VyQ29udHJvbGxlci5hZGRNYXJrZXIo
bmV3UmFuZ2UuZ2V0KCksIG1hcmtlcnNbaV0udHlwZSgpLCBtYXJrZXJzW2ldLmRlc2NyaXB0aW9u
KCksIG1hcmtlcnNbaV0uYWx0ZXJuYXRpdmVzKCksIG1hcmtlcnNbaV0ubWV0YWRhdGEoKSk7Cisg
ICAgICAgIG1hcmtlckNvbnRyb2xsZXIuYWRkTWFya2VyKG5ld1JhbmdlLmdldCgpLCBtYXJrZXIu
dHlwZSgpLCBtYXJrZXIuZGVzY3JpcHRpb24oKSwgbWFya2VyLmFsdGVybmF0aXZlcygpLCBtYXJr
ZXIubWV0YWRhdGEoKSk7CiAjZWxzZQotICAgICAgICBtYXJrZXJDb250cm9sbGVyLmFkZE1hcmtl
cihuZXdSYW5nZS5nZXQoKSwgbWFya2Vyc1tpXS50eXBlKCksIG1hcmtlcnNbaV0uZGVzY3JpcHRp
b24oKSk7CisgICAgICAgIG1hcmtlckNvbnRyb2xsZXIuYWRkTWFya2VyKG5ld1JhbmdlLmdldCgp
LCBtYXJrZXIudHlwZSgpLCBtYXJrZXIuZGVzY3JpcHRpb24oKSk7CiAjZW5kaWYgLy8gUExBVEZP
Uk0oSU9TKQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNl
bGVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rp
b25Db21tYW5kLmNwcAppbmRleCBhMTA3ZTY5NmU0MTVhODg4YjA0Njk2Y2FlNWQ1ZDRhOTNlYTIz
MWNjLi45ZGEzY2JjZWY3NjNjYzc0MWFkZjUwN2VkODlhN2IyNjczZGQ1YzJmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTQx
LDYgKzQxLDcgQEAKICNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUmVuZGVy
VGFibGVDZWxsLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgorI2luY2x1ZGUgIlJlbmRlcmVk
RG9jdW1lbnRNYXJrZXIuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiVmlzaWJsZVVu
aXRzLmgiCiAKQEAgLTc2NSw5ICs3NjYsOCBAQCBTdHJpbmcgRGVsZXRlU2VsZWN0aW9uQ29tbWFu
ZDo6b3JpZ2luYWxTdHJpbmdGb3JBdXRvY29ycmVjdGlvbkF0QmVnaW5uaW5nT2ZTZWxlYwogICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlT2ZGaXJzdENo
YXJhY3RlciA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3RhcnRPZlNlbGVjdGlvbi5kZWVw
RXF1aXZhbGVudCgpLCBuZXh0UG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7Ci0gICAgVmVjdG9y
PERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IGRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNJ
blJhbmdlKHJhbmdlT2ZGaXJzdENoYXJhY3Rlci5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkF1dG9j
b3JyZWN0ZWQpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWFya2Vycy5zaXplKCk7ICsr
aSkgewotICAgICAgICBjb25zdCBEb2N1bWVudE1hcmtlciogbWFya2VyID0gbWFya2Vyc1tpXTsK
KyAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBkb2N1bWVudCgp
Lm1hcmtlcnMoKS5tYXJrZXJzSW5SYW5nZShyYW5nZU9mRmlyc3RDaGFyYWN0ZXIuZ2V0KCksIERv
Y3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkKTsKKyAgICBmb3IgKGF1dG8qIG1hcmtlciA6IG1h
cmtlcnMpIHsKICAgICAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gbWFya2VyLT5zdGFydE9mZnNldCgp
OwogICAgICAgICBpZiAoc3RhcnRPZmZzZXQgPT0gc3RhcnRPZlNlbGVjdGlvbi5kZWVwRXF1aXZh
bGVudCgpLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKQogICAgICAgICAgICAgcmV0dXJuIG1hcmtl
ci0+ZGVzY3JpcHRpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCA3NzU5YzZm
YTBjZDQ1ZjJmZjk4NGMyM2JhMWZjNjNmOGM4ZmQyOTZkLi42ZTA4OTUxNTM3ZTIyNjVkY2RhYjdl
ZTE2MjI1ZGQwZDBhMGMyN2MxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBAIC03MSw2
ICs3MSw3IEBACiAjaW5jbHVkZSAiUmVtb3ZlRm9ybWF0Q29tbWFuZC5oIgogI2luY2x1ZGUgIlJl
bmRlckJsb2NrLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2wuaCIKKyNpbmNsdWRlICJS
ZW5kZXJlZERvY3VtZW50TWFya2VyLmgiCiAjaW5jbHVkZSAiUmVuZGVyZWRQb3NpdGlvbi5oIgog
I2luY2x1ZGUgIlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3Mu
aCIKQEAgLTI3NTMsOSArMjc1NCw5IEBAIHZvaWQgRWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9yV29y
ZHNBZmZlY3RlZEJ5RWRpdGluZyhib29sIGRvTm90UmVtb3ZlSWZTZWxlY3Rpb25BCiAgICAgLy8g
b2YgbWFya2VyIHRoYXQgY29udGFpbnMgdGhlIHdvcmQgaW4gcXVlc3Rpb24sIGFuZCByZW1vdmUg
bWFya2VyIG9uIHRoYXQgd2hvbGUgcmFuZ2UuCiAgICAgUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2Ug
PSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIHN0YXJ0T2ZGaXJzdFdvcmQuZGVlcEVxdWl2YWxl
bnQoKSwgZW5kT2ZMYXN0V29yZC5kZWVwRXF1aXZhbGVudCgpKTsKIAotICAgIFZlY3RvcjxEb2N1
bWVudE1hcmtlcio+IG1hcmtlcnMgPSBkb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzSW5SYW5n
ZSh3b3JkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMp
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWFya2Vycy5zaXplKCk7ICsraSkKLSAgICAg
ICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2
ZXNGb3JNYXJrZXIobWFya2Vyc1tpXSk7CisgICAgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJr
ZXIqPiBtYXJrZXJzID0gZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0luUmFuZ2Uod29yZFJh
bmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzKTsKKyAgICBm
b3IgKGF1dG8qIG1hcmtlciA6IG1hcmtlcnMpCisgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlci0+cmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzRm9yTWFya2VyKG1hcmtlcik7CiAK
ICNpZiBQTEFURk9STShJT1MpCiAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vy
cyh3b3JkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyB8IERvY3VtZW50TWFy
a2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yIHwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdF
eGVtcHRpb24gfCBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzIHwgRG9jdW1l
bnRNYXJrZXI6OkRpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXMsIERvY3VtZW50TWFya2Vy
Q29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwpAQCAtMzU0Miw5
ICszNTQzLDggQEAgYm9vbCBFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzTWFya2VyRm9yKERvY3Vt
ZW50TWFya2VyOjpNYXJrZXJUeXBlIG1hcmtlclR5cGUsIGkKIAogICAgIHVuc2lnbmVkIGludCBz
dGFydE9mZnNldCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oZnJvbSk7CiAgICAgdW5zaWdu
ZWQgaW50IGVuZE9mZnNldCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oZnJvbSArIGxlbmd0
aCk7Ci0gICAgVmVjdG9yPERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IGRvY3VtZW50KCkubWFy
a2VycygpLm1hcmtlcnNGb3Iobm9kZSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXJr
ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIERvY3VtZW50TWFya2VyKiBtYXJrZXIgPSBtYXJr
ZXJzW2ldOworICAgIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IGRv
Y3VtZW50KCkubWFya2VycygpLm1hcmtlcnNGb3Iobm9kZSk7CisgICAgZm9yIChhdXRvKiBtYXJr
ZXIgOiBtYXJrZXJzKSB7CiAgICAgICAgIGlmIChtYXJrZXItPnN0YXJ0T2Zmc2V0KCkgPD0gc3Rh
cnRPZmZzZXQgJiYgZW5kT2Zmc2V0IDw9IG1hcmtlci0+ZW5kT2Zmc2V0KCkgJiYgbWFya2VyLT50
eXBlKCkgPT0gbWFya2VyVHlwZSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAppbmRleCAzNTQ3OTBjZjM5
MmExODM3ZWFiNzQ1YjA4NmI4MDIwZmQ3Y2JlZWNkLi4wMTc2MDZiYTBjMjYxNDUyOWRjMTMxOGNk
MDczMmZjNjEzNGNmNTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lVGV4dEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRC
b3guY3BwCkBAIC01MDksNyArNTA5LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LAogICAgICAg
ICB9CiAgICAgfQogCi0gICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gcGFpbnRJbmZvLmNv
bnRleHQ7CisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0ID0gKnBhaW50SW5mby5jb250ZXh0
OwogCiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIGxpbmVTdHlsZSA9IHRoaXMtPmxpbmVTdHlsZSgp
OwogICAgIApAQCAtNTIzLDcgKzUyMyw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwKIAogICAg
IGJvb2wgc2hvdWxkUm90YXRlID0gIWlzSG9yaXpvbnRhbCgpICYmICFjb21iaW5lZFRleHQ7CiAg
ICAgaWYgKHNob3VsZFJvdGF0ZSkKLSAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKHJvdGF0aW9u
KGJveFJlY3QsIENsb2Nrd2lzZSkpOworICAgICAgICBjb250ZXh0LmNvbmNhdENUTShyb3RhdGlv
bihib3hSZWN0LCBDbG9ja3dpc2UpKTsKIAogICAgIC8vIERldGVybWluZSB3aGV0aGVyIG9yIG5v
dCB3ZSBoYXZlIGNvbXBvc2l0aW9uIHVuZGVybGluZXMgdG8gZHJhdy4KICAgICBib29sIGNvbnRh
aW5zQ29tcG9zaXRpb24gPSByZW5kZXJlcigpLnRleHROb2RlKCkgJiYgcmVuZGVyZXIoKS5mcmFt
ZSgpLmVkaXRvcigpLmNvbXBvc2l0aW9uTm9kZSgpID09IHJlbmRlcmVyKCkudGV4dE5vZGUoKTsK
QEAgLTYxNiwxOCArNjE2LDE4IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwKICAgICBlbHNlCiAg
ICAgICAgIHRleHRPcmlnaW4uc2V0WChyb3VuZFRvRGV2aWNlUGl4ZWwoTGF5b3V0VW5pdCh0ZXh0
T3JpZ2luLngoKSksIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKSk7
CiAKLSAgICBUZXh0UGFpbnRlciB0ZXh0UGFpbnRlcigqY29udGV4dCwgcGFpbnRTZWxlY3RlZFRl
eHRPbmx5LCBwYWludFNlbGVjdGVkVGV4dFNlcGFyYXRlbHksIGZvbnQsIHNQb3MsIGVQb3MsIGxl
bmd0aCwgZW1waGFzaXNNYXJrLCBjb21iaW5lZFRleHQsIHRleHRSdW4sIGJveFJlY3QsIHRleHRP
cmlnaW4sIGVtcGhhc2lzTWFya09mZnNldCwgdGV4dFNoYWRvdywgc2VsZWN0aW9uU2hhZG93LCBp
c0hvcml6b250YWwoKSwgdGV4dFBhaW50U3R5bGUsIHNlbGVjdGlvblBhaW50U3R5bGUpOworICAg
IFRleHRQYWludGVyIHRleHRQYWludGVyKGNvbnRleHQsIHBhaW50U2VsZWN0ZWRUZXh0T25seSwg
cGFpbnRTZWxlY3RlZFRleHRTZXBhcmF0ZWx5LCBmb250LCBzUG9zLCBlUG9zLCBsZW5ndGgsIGVt
cGhhc2lzTWFyaywgY29tYmluZWRUZXh0LCB0ZXh0UnVuLCBib3hSZWN0LCB0ZXh0T3JpZ2luLCBl
bXBoYXNpc01hcmtPZmZzZXQsIHRleHRTaGFkb3csIHNlbGVjdGlvblNoYWRvdywgaXNIb3Jpem9u
dGFsKCksIHRleHRQYWludFN0eWxlLCBzZWxlY3Rpb25QYWludFN0eWxlKTsKICAgICB0ZXh0UGFp
bnRlci5wYWludFRleHQoKTsKIAogICAgIC8vIFBhaW50IGRlY29yYXRpb25zCiAgICAgVGV4dERl
Y29yYXRpb24gdGV4dERlY29yYXRpb25zID0gbGluZVN0eWxlLnRleHREZWNvcmF0aW9uc0luRWZm
ZWN0KCk7CiAgICAgaWYgKHRleHREZWNvcmF0aW9ucyAhPSBUZXh0RGVjb3JhdGlvbk5vbmUgJiYg
cGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VTZWxlY3Rpb24pIHsKLSAgICAgICAgdXBkYXRl
R3JhcGhpY3NDb250ZXh0KCpjb250ZXh0LCB0ZXh0UGFpbnRTdHlsZSk7CisgICAgICAgIHVwZGF0
ZUdyYXBoaWNzQ29udGV4dChjb250ZXh0LCB0ZXh0UGFpbnRTdHlsZSk7CiAgICAgICAgIGlmIChj
b21iaW5lZFRleHQpCi0gICAgICAgICAgICBjb250ZXh0LT5jb25jYXRDVE0ocm90YXRpb24oYm94
UmVjdCwgQ2xvY2t3aXNlKSk7Ci0gICAgICAgIHBhaW50RGVjb3JhdGlvbigqY29udGV4dCwgYm94
T3JpZ2luLCB0ZXh0RGVjb3JhdGlvbnMsIGxpbmVTdHlsZS50ZXh0RGVjb3JhdGlvblN0eWxlKCks
IHRleHRTaGFkb3csIHRleHRQYWludGVyKTsKKyAgICAgICAgICAgIGNvbnRleHQuY29uY2F0Q1RN
KHJvdGF0aW9uKGJveFJlY3QsIENsb2Nrd2lzZSkpOworICAgICAgICBwYWludERlY29yYXRpb24o
Y29udGV4dCwgYm94T3JpZ2luLCB0ZXh0RGVjb3JhdGlvbnMsIGxpbmVTdHlsZS50ZXh0RGVjb3Jh
dGlvblN0eWxlKCksIHRleHRTaGFkb3csIHRleHRQYWludGVyKTsKICAgICAgICAgaWYgKGNvbWJp
bmVkVGV4dCkKLSAgICAgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShyb3RhdGlvbihib3hSZWN0
LCBDb3VudGVyY2xvY2t3aXNlKSk7CisgICAgICAgICAgICBjb250ZXh0LmNvbmNhdENUTShyb3Rh
dGlvbihib3hSZWN0LCBDb3VudGVyY2xvY2t3aXNlKSk7CiAgICAgfQogCiAgICAgaWYgKHBhaW50
SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkgewpAQCAtNjYwLDcgKzY2MCw3IEBA
IHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExh
eW91dFBvaW50JiBwYWludE9mZnNldCwKICAgICB9CiAgICAgCiAgICAgaWYgKHNob3VsZFJvdGF0
ZSkKLSAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKHJvdGF0aW9uKGJveFJlY3QsIENvdW50ZXJj
bG9ja3dpc2UpKTsKKyAgICAgICAgY29udGV4dC5jb25jYXRDVE0ocm90YXRpb24oYm94UmVjdCwg
Q291bnRlcmNsb2Nrd2lzZSkpOwogfQogCiB2b2lkIElubGluZVRleHRCb3g6OnNlbGVjdGlvblN0
YXJ0RW5kKGludCYgc1BvcywgaW50JiBlUG9zKQpAQCAtNjgxLDEwICs2ODEsMTAgQEAgdm9pZCBJ
bmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGFydEVuZChpbnQmIHNQb3MsIGludCYgZVBvcykKICAg
ICBlUG9zID0gc3RkOjptaW4oZW5kUG9zIC0gbV9zdGFydCwgKGludCltX2xlbik7CiB9CiAKLXZv
aWQgSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwg
Y29uc3QgRm9udCYgZm9udCwgQ29sb3IgdGV4dENvbG9yKQordm9pZCBJbmxpbmVUZXh0Qm94Ojpw
YWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQm
IGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBD
b2xvciB0ZXh0Q29sb3IpCiB7CiAjaWYgRU5BQkxFKFRFWFRfU0VMRUNUSU9OKQotICAgIGlmIChj
b250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgaWYgKGNvbnRleHQucGFpbnRpbmdEaXNh
YmxlZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBTZWUgaWYgd2UgaGF2ZSBhIHNlbGVj
dGlvbiB0byBwYWludCBhdCBhbGwuCkBAIC03MDIsOCArNzAyLDggQEAgdm9pZCBJbmxpbmVUZXh0
Qm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0
UG9pbnQmIGIKICAgICBpZiAodGV4dENvbG9yID09IGMpCiAgICAgICAgIGMgPSBDb2xvcigweGZm
IC0gYy5yZWQoKSwgMHhmZiAtIGMuZ3JlZW4oKSwgMHhmZiAtIGMuYmx1ZSgpKTsKIAotICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCk7Ci0gICAgdXBkYXRl
R3JhcGhpY3NDb250ZXh0KCpjb250ZXh0LCBUZXh0UGFpbnRTdHlsZShjLCBzdHlsZS5jb2xvclNw
YWNlKCkpKTsgLy8gRG9uJ3QgZHJhdyB0ZXh0IGF0IGFsbCEKKyAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CisgICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0
KGNvbnRleHQsIFRleHRQYWludFN0eWxlKGMsIHN0eWxlLmNvbG9yU3BhY2UoKSkpOyAvLyBEb24n
dCBkcmF3IHRleHQgYXQgYWxsIQogICAgIAogICAgIC8vIElmIHRoZSB0ZXh0IGlzIHRydW5jYXRl
ZCwgbGV0IHRoZSB0aGluZyBiZWluZyBwYWludGVkIGluIHRoZSB0cnVuY2F0aW9uCiAgICAgLy8g
ZHJhdyBpdHMgb3duIGhpZ2hsaWdodC4KQEAgLTczMCw3ICs3MzAsNyBAQCB2b2lkIElubGluZVRl
eHRCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxv
YXRQb2ludCYgYgogCiAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0gTGF5b3V0UmVjdChi
b3hPcmlnaW4ueCgpLCBib3hPcmlnaW4ueSgpIC0gZGVsdGFZLCBtX2xvZ2ljYWxXaWR0aCwgc2Vs
ZWN0aW9uSGVpZ2h0KTsKICAgICBmb250LmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KHRleHRS
dW4sIHNlbGVjdGlvblJlY3QsIHNQb3MsIGVQb3MpOwotICAgIGNvbnRleHQtPmZpbGxSZWN0KHNu
YXBSZWN0VG9EZXZpY2VQaXhlbHNXaXRoV3JpdGluZ0RpcmVjdGlvbihzZWxlY3Rpb25SZWN0LCBy
ZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgdGV4dFJ1bi5sdHIoKSks
IGMsIHN0eWxlLmNvbG9yU3BhY2UoKSk7CisgICAgY29udGV4dC5maWxsUmVjdChzbmFwUmVjdFRv
RGV2aWNlUGl4ZWxzV2l0aFdyaXRpbmdEaXJlY3Rpb24oc2VsZWN0aW9uUmVjdCwgcmVuZGVyZXIo
KS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCksIHRleHRSdW4ubHRyKCkpLCBjLCBzdHls
ZS5jb2xvclNwYWNlKCkpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CiAgICAg
VU5VU0VEX1BBUkFNKGJveE9yaWdpbik7CkBAIC03NDAsNyArNzQwLDcgQEAgdm9pZCBJbmxpbmVU
ZXh0Qm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZs
b2F0UG9pbnQmIGIKICNlbmRpZgogfQogCi12b2lkIElubGluZVRleHRCb3g6OnBhaW50Q29tcG9z
aXRpb25CYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRQb2lu
dCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQs
IGludCBzdGFydFBvcywgaW50IGVuZFBvcykKK3ZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRDb21w
b3NpdGlvbkJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBv
aW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udCYgZm9u
dCwgaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKQogewogICAgIGludCBvZmZzZXQgPSBtX3N0YXJ0
OwogICAgIGludCBzUG9zID0gc3RkOjptYXgoc3RhcnRQb3MgLSBvZmZzZXQsIDApOwpAQCAtNzQ5
LDE1ICs3NDksMTUgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFja2dy
b3VuZChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEYKICAgICBpZiAoc1BvcyA+PSBl
UG9zKQogICAgICAgICByZXR1cm47CiAKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0
YXRlU2F2ZXIoKmNvbnRleHQpOworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVT
YXZlcihjb250ZXh0KTsKICAgICBDb2xvciBjb21wb3NpdGlvbkNvbG9yID0gQ29sb3I6OmNvbXBv
c2l0aW9uRmlsbDsKLSAgICB1cGRhdGVHcmFwaGljc0NvbnRleHQoKmNvbnRleHQsIFRleHRQYWlu
dFN0eWxlKGNvbXBvc2l0aW9uQ29sb3IsIHN0eWxlLmNvbG9yU3BhY2UoKSkpOyAvLyBEb24ndCBk
cmF3IHRleHQgYXQgYWxsIQorICAgIHVwZGF0ZUdyYXBoaWNzQ29udGV4dChjb250ZXh0LCBUZXh0
UGFpbnRTdHlsZShjb21wb3NpdGlvbkNvbG9yLCBzdHlsZS5jb2xvclNwYWNlKCkpKTsgLy8gRG9u
J3QgZHJhdyB0ZXh0IGF0IGFsbCEKIAogICAgIExheW91dFVuaXQgZGVsdGFZID0gcmVuZGVyZXIo
KS5zdHlsZSgpLmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSA/IHNlbGVjdGlvbkJvdHRvbSgp
IC0gbG9naWNhbEJvdHRvbSgpIDogbG9naWNhbFRvcCgpIC0gc2VsZWN0aW9uVG9wKCk7CiAgICAg
TGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0gTGF5b3V0UmVjdChib3hPcmlnaW4ueCgpLCBib3hP
cmlnaW4ueSgpIC0gZGVsdGFZLCAwLCBzZWxlY3Rpb25IZWlnaHQoKSk7CiAgICAgVGV4dFJ1biB0
ZXh0UnVuID0gY29uc3RydWN0VGV4dFJ1bihzdHlsZSwgZm9udCk7CiAgICAgZm9udC5hZGp1c3RT
ZWxlY3Rpb25SZWN0Rm9yVGV4dCh0ZXh0UnVuLCBzZWxlY3Rpb25SZWN0LCBzUG9zLCBlUG9zKTsK
LSAgICBjb250ZXh0LT5maWxsUmVjdChzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzV2l0aFdyaXRpbmdE
aXJlY3Rpb24oc2VsZWN0aW9uUmVjdCwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxl
RmFjdG9yKCksIHRleHRSdW4ubHRyKCkpLCBjb21wb3NpdGlvbkNvbG9yLCBzdHlsZS5jb2xvclNw
YWNlKCkpOworICAgIGNvbnRleHQuZmlsbFJlY3Qoc25hcFJlY3RUb0RldmljZVBpeGVsc1dpdGhX
cml0aW5nRGlyZWN0aW9uKHNlbGVjdGlvblJlY3QsIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZp
Y2VTY2FsZUZhY3RvcigpLCB0ZXh0UnVuLmx0cigpKSwgY29tcG9zaXRpb25Db2xvciwgc3R5bGUu
Y29sb3JTcGFjZSgpKTsKIH0KIAogc3RhdGljIFN0cm9rZVN0eWxlIHRleHREZWNvcmF0aW9uU3R5
bGVUb1N0cm9rZVN0eWxlKFRleHREZWNvcmF0aW9uU3R5bGUgZGVjb3JhdGlvblN0eWxlKQpAQCAt
MTA2MSw3ICsxMDYxLDcgQEAgc3RhdGljIEdyYXBoaWNzQ29udGV4dDo6RG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGUgbGluZVN0eWxlRm9yTWFya2VyVHlwZShEb2N1bWVudE0KICAgICB9CiB9CiAKLXZv
aWQgSW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcihHcmFwaGljc0NvbnRleHQqIHB0
LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIERvY3VtZW50TWFya2VyKiBtYXJrZXIsIGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCwgYm9vbCBncmFtbWFyKQor
dm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50TWFya2VyKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJlZERvY3VtZW50TWFy
a2VyJiBtYXJrZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCwg
Ym9vbCBncmFtbWFyKQogewogICAgIC8vIE5ldmVyIHByaW50IHNwZWxsaW5nL2dyYW1tYXIgbWFy
a2VycyAoNTMyNzg4NykKICAgICBpZiAocmVuZGVyZXIoKS5kb2N1bWVudCgpLnByaW50aW5nKCkp
CkBAIC0xMDc1LDE3ICsxMDc1LDE3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVu
dE1hcmtlcihHcmFwaGljc0NvbnRleHQqIHB0LCBjb25zdCBGbG9hdFBvaW50JiBiCiAKICAgICAv
LyBEZXRlcm1pbmUgd2hldGhlciB3ZSBuZWVkIHRvIG1lYXN1cmUgdGV4dAogICAgIGJvb2wgbWFy
a2VyU3BhbnNXaG9sZUJveCA9IHRydWU7Ci0gICAgaWYgKG1fc3RhcnQgPD0gKGludCltYXJrZXIt
PnN0YXJ0T2Zmc2V0KCkpCisgICAgaWYgKG1fc3RhcnQgPD0gKGludCltYXJrZXIuc3RhcnRPZmZz
ZXQoKSkKICAgICAgICAgbWFya2VyU3BhbnNXaG9sZUJveCA9IGZhbHNlOwotICAgIGlmICgoZW5k
KCkgKyAxKSAhPSBtYXJrZXItPmVuZE9mZnNldCgpKSAvLyBlbmQgcG9pbnRzIGF0IHRoZSBsYXN0
IGNoYXIsIG5vdCBwYXN0IGl0CisgICAgaWYgKChlbmQoKSArIDEpICE9IG1hcmtlci5lbmRPZmZz
ZXQoKSkgLy8gZW5kIHBvaW50cyBhdCB0aGUgbGFzdCBjaGFyLCBub3QgcGFzdCBpdAogICAgICAg
ICBtYXJrZXJTcGFuc1dob2xlQm94ID0gZmFsc2U7CiAgICAgaWYgKG1fdHJ1bmNhdGlvbiAhPSBj
Tm9UcnVuY2F0aW9uKQogICAgICAgICBtYXJrZXJTcGFuc1dob2xlQm94ID0gZmFsc2U7CiAKLSAg
ICBib29sIGlzRGljdGF0aW9uTWFya2VyID0gbWFya2VyLT50eXBlKCkgPT0gRG9jdW1lbnRNYXJr
ZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlczsKKyAgICBib29sIGlzRGljdGF0aW9uTWFya2VyID0g
bWFya2VyLnR5cGUoKSA9PSBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzOwog
ICAgIGlmICghbWFya2VyU3BhbnNXaG9sZUJveCB8fCBncmFtbWFyIHx8IGlzRGljdGF0aW9uTWFy
a2VyKSB7Ci0gICAgICAgIGludCBzdGFydFBvc2l0aW9uID0gc3RkOjptYXg8aW50PihtYXJrZXIt
PnN0YXJ0T2Zmc2V0KCkgLSBtX3N0YXJ0LCAwKTsKLSAgICAgICAgaW50IGVuZFBvc2l0aW9uID0g
c3RkOjptaW48aW50PihtYXJrZXItPmVuZE9mZnNldCgpIC0gbV9zdGFydCwgbV9sZW4pOworICAg
ICAgICBpbnQgc3RhcnRQb3NpdGlvbiA9IHN0ZDo6bWF4PGludD4obWFya2VyLnN0YXJ0T2Zmc2V0
KCkgLSBtX3N0YXJ0LCAwKTsKKyAgICAgICAgaW50IGVuZFBvc2l0aW9uID0gc3RkOjptaW48aW50
PihtYXJrZXIuZW5kT2Zmc2V0KCkgLSBtX3N0YXJ0LCBtX2xlbik7CiAgICAgICAgIAogICAgICAg
ICBpZiAobV90cnVuY2F0aW9uICE9IGNOb1RydW5jYXRpb24pCiAgICAgICAgICAgICBlbmRQb3Np
dGlvbiA9IHN0ZDo6bWluPGludD4oZW5kUG9zaXRpb24sIG1fdHJ1bmNhdGlvbik7CkBAIC0xMTA3
LDcgKzExMDcsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXIoR3Jh
cGhpY3NDb250ZXh0KiBwdCwgY29uc3QgRmxvYXRQb2ludCYgYgogICAgICAgICBpZiAoZ3JhbW1h
ciB8fCBpc0RpY3RhdGlvbk1hcmtlcikgewogICAgICAgICAgICAgbWFya2VyUmVjdC5tb3ZlKC1i
b3hPcmlnaW4ueCgpLCAtYm94T3JpZ2luLnkoKSk7CiAgICAgICAgICAgICBtYXJrZXJSZWN0ID0g
cmVuZGVyZXIoKS5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChtYXJrZXJSZWN0KSkuZW5j
bG9zaW5nQm91bmRpbmdCb3goKTsKLSAgICAgICAgICAgIHRvUmVuZGVyZWREb2N1bWVudE1hcmtl
cihtYXJrZXIpLT5zZXRSZW5kZXJlZFJlY3QobWFya2VyUmVjdCk7CisgICAgICAgICAgICBtYXJr
ZXIuc2V0UmVuZGVyZWRSZWN0KG1hcmtlclJlY3QpOwogICAgICAgICB9CiAgICAgfQogICAgIApA
QCAtMTEyOCwxNSArMTEyOCwxNSBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRN
YXJrZXIoR3JhcGhpY3NDb250ZXh0KiBwdCwgY29uc3QgRmxvYXRQb2ludCYgYgogICAgICAgICAv
LyBJbiBsYXJnZXIgZm9udHMsIHRob3VnaCwgcGxhY2UgdGhlIHVuZGVybGluZSB1cCBuZWFyIHRo
ZSBiYXNlbGluZSB0byBwcmV2ZW50IGEgYmlnIGdhcC4KICAgICAgICAgdW5kZXJsaW5lT2Zmc2V0
ID0gYmFzZWxpbmUgKyAyOwogICAgIH0KLSAgICBwdC0+ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtl
cihGbG9hdFBvaW50KGJveE9yaWdpbi54KCkgKyBzdGFydCwgYm94T3JpZ2luLnkoKSArIHVuZGVy
bGluZU9mZnNldCksIHdpZHRoLCBsaW5lU3R5bGVGb3JNYXJrZXJUeXBlKG1hcmtlci0+dHlwZSgp
KSk7CisgICAgY29udGV4dC5kcmF3TGluZUZvckRvY3VtZW50TWFya2VyKEZsb2F0UG9pbnQoYm94
T3JpZ2luLngoKSArIHN0YXJ0LCBib3hPcmlnaW4ueSgpICsgdW5kZXJsaW5lT2Zmc2V0KSwgd2lk
dGgsIGxpbmVTdHlsZUZvck1hcmtlclR5cGUobWFya2VyLnR5cGUoKSkpOwogfQogCi12b2lkIElu
bGluZVRleHRCb3g6OnBhaW50VGV4dE1hdGNoTWFya2VyKEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBEb2N1bWVudE1hcmtlciogbWFya2VyLCBj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQpCit2b2lkIElubGluZVRl
eHRCb3g6OnBhaW50VGV4dE1hdGNoTWFya2VyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJlZERvY3VtZW50TWFya2VyJiBtYXJrZXIs
IGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCkKIHsKICAgICBMYXlv
dXRVbml0IHNlbGVjdGlvbkhlaWdodCA9IHRoaXMtPnNlbGVjdGlvbkhlaWdodCgpOwogCi0gICAg
aW50IHNQb3MgPSBzdGQ6Om1heChtYXJrZXItPnN0YXJ0T2Zmc2V0KCkgLSBtX3N0YXJ0LCAodW5z
aWduZWQpMCk7Ci0gICAgaW50IGVQb3MgPSBzdGQ6Om1pbihtYXJrZXItPmVuZE9mZnNldCgpIC0g
bV9zdGFydCwgKHVuc2lnbmVkKW1fbGVuKTsKKyAgICBpbnQgc1BvcyA9IHN0ZDo6bWF4KG1hcmtl
ci5zdGFydE9mZnNldCgpIC0gbV9zdGFydCwgKHVuc2lnbmVkKTApOworICAgIGludCBlUG9zID0g
c3RkOjptaW4obWFya2VyLmVuZE9mZnNldCgpIC0gbV9zdGFydCwgKHVuc2lnbmVkKW1fbGVuKTsK
ICAgICBUZXh0UnVuIHJ1biA9IGNvbnN0cnVjdFRleHRSdW4oc3R5bGUsIGZvbnQpOwogCiAgICAg
Ly8gQWx3YXlzIGNvbXB1dGUgYW5kIHN0b3JlIHRoZSByZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlz
IG1hcmtlci4gVGhlIGNvbXB1dGVkIHJlY3QgaXMgaW4gYWJzb2x1dGUgY29vcmRpbmF0ZXMuCkBA
IC0xMTQ1LDMxICsxMTQ1LDMxIEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0TWF0Y2hN
YXJrZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFBvCiAgICAgZm9udC5h
ZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dChydW4sIHJlbmRlcmVkUmVjdCwgc1BvcywgZVBvcyk7
CiAgICAgSW50UmVjdCBtYXJrZXJSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChyZW5kZXJlZFJlY3Qp
OwogICAgIG1hcmtlclJlY3QgPSByZW5kZXJlcigpLmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRR
dWFkKG1hcmtlclJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwotICAgIHRvUmVuZGVyZWRE
b2N1bWVudE1hcmtlcihtYXJrZXIpLT5zZXRSZW5kZXJlZFJlY3QobWFya2VyUmVjdCk7CisgICAg
bWFya2VyLnNldFJlbmRlcmVkUmVjdChtYXJrZXJSZWN0KTsKICAgICAKICAgICAvLyBPcHRpb25h
bGx5IGhpZ2hsaWdodCB0aGUgdGV4dAogICAgIGlmIChyZW5kZXJlcigpLmZyYW1lKCkuZWRpdG9y
KCkubWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZCgpKSB7Ci0gICAgICAgIENvbG9yIGNv
bG9yID0gbWFya2VyLT5hY3RpdmVNYXRjaCgpID8gcmVuZGVyZXIoKS50aGVtZSgpLnBsYXRmb3Jt
QWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgOiByZW5kZXJlcigpLnRoZW1lKCkucGxh
dGZvcm1JbmFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpOwotICAgICAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQpOwotICAgICAgICB1cGRhdGVH
cmFwaGljc0NvbnRleHQoKmNvbnRleHQsIFRleHRQYWludFN0eWxlKGNvbG9yLCBzdHlsZS5jb2xv
clNwYWNlKCkpKTsgLy8gRG9uJ3QgZHJhdyB0ZXh0IGF0IGFsbCEKKyAgICAgICAgQ29sb3IgY29s
b3IgPSBtYXJrZXIuYWN0aXZlTWF0Y2goKSA/IHJlbmRlcmVyKCkudGhlbWUoKS5wbGF0Zm9ybUFj
dGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpIDogcmVuZGVyZXIoKS50aGVtZSgpLnBsYXRm
b3JtSW5hY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoKTsKKyAgICAgICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOworICAgICAgICB1cGRhdGVHcmFw
aGljc0NvbnRleHQoY29udGV4dCwgVGV4dFBhaW50U3R5bGUoY29sb3IsIHN0eWxlLmNvbG9yU3Bh
Y2UoKSkpOyAvLyBEb24ndCBkcmF3IHRleHQgYXQgYWxsIQogCiAgICAgICAgIC8vIFVzZSBzYW1l
IHkgcG9zaXRpb25pbmcgYW5kIGhlaWdodCBhcyBmb3Igc2VsZWN0aW9uLCBzbyB0aGF0IHdoZW4g
dGhlIHNlbGVjdGlvbiBhbmQgdGhpcyBoaWdobGlnaHQgYXJlIG9uCiAgICAgICAgIC8vIHRoZSBz
YW1lIHdvcmQgdGhlcmUgYXJlIG5vIHBpZWNlcyBzdGlja2luZyBvdXQuCiAgICAgICAgIExheW91
dFVuaXQgZGVsdGFZID0gcmVuZGVyZXIoKS5zdHlsZSgpLmlzRmxpcHBlZExpbmVzV3JpdGluZ01v
ZGUoKSA/IHNlbGVjdGlvbkJvdHRvbSgpIC0gbG9naWNhbEJvdHRvbSgpIDogbG9naWNhbFRvcCgp
IC0gc2VsZWN0aW9uVG9wKCk7CiAgICAgICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdCA9IExh
eW91dFJlY3QoYm94T3JpZ2luLngoKSwgYm94T3JpZ2luLnkoKSAtIGRlbHRhWSwgMCwgc2VsZWN0
aW9uSGVpZ2h0KTsKICAgICAgICAgZm9udC5hZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dChydW4s
IHNlbGVjdGlvblJlY3QsIHNQb3MsIGVQb3MpOwotICAgICAgICBjb250ZXh0LT5maWxsUmVjdChz
bmFwUmVjdFRvRGV2aWNlUGl4ZWxzV2l0aFdyaXRpbmdEaXJlY3Rpb24oc2VsZWN0aW9uUmVjdCwg
cmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCksIHJ1bi5sdHIoKSksIGNv
bG9yLCBzdHlsZS5jb2xvclNwYWNlKCkpOworICAgICAgICBjb250ZXh0LmZpbGxSZWN0KHNuYXBS
ZWN0VG9EZXZpY2VQaXhlbHNXaXRoV3JpdGluZ0RpcmVjdGlvbihzZWxlY3Rpb25SZWN0LCByZW5k
ZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgcnVuLmx0cigpKSwgY29sb3Is
IHN0eWxlLmNvbG9yU3BhY2UoKSk7CiAgICAgfQogfQogCi12b2lkIElubGluZVRleHRCb3g6OmNv
bXB1dGVSZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXIoRG9jdW1lbnRNYXJrZXIqIG1hcmtlciwgY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250JiBmb250KQordm9pZCBJbmxpbmVUZXh0
Qm94Ojpjb21wdXRlUmVjdEZvclJlcGxhY2VtZW50TWFya2VyKFJlbmRlcmVkRG9jdW1lbnRNYXJr
ZXImIG1hcmtlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250JiBmb250KQog
ewogICAgIC8vIFJlcGxhY2VtZW50IG1hcmtlcnMgYXJlIG5vdCBhY3R1YWxseSBkcmF3biwgYnV0
IHRoZWlyIHJlY3RzIG5lZWQgdG8gYmUgY29tcHV0ZWQgZm9yIGhpdCB0ZXN0aW5nLgogICAgIExh
eW91dFVuaXQgdG9wID0gc2VsZWN0aW9uVG9wKCk7CiAgICAgTGF5b3V0VW5pdCBoID0gc2VsZWN0
aW9uSGVpZ2h0KCk7CiAgICAgCi0gICAgaW50IHNQb3MgPSBzdGQ6Om1heChtYXJrZXItPnN0YXJ0
T2Zmc2V0KCkgLSBtX3N0YXJ0LCAodW5zaWduZWQpMCk7Ci0gICAgaW50IGVQb3MgPSBzdGQ6Om1p
bihtYXJrZXItPmVuZE9mZnNldCgpIC0gbV9zdGFydCwgKHVuc2lnbmVkKW1fbGVuKTsKKyAgICBp
bnQgc1BvcyA9IHN0ZDo6bWF4KG1hcmtlci5zdGFydE9mZnNldCgpIC0gbV9zdGFydCwgKHVuc2ln
bmVkKTApOworICAgIGludCBlUG9zID0gc3RkOjptaW4obWFya2VyLmVuZE9mZnNldCgpIC0gbV9z
dGFydCwgKHVuc2lnbmVkKW1fbGVuKTsKICAgICBUZXh0UnVuIHJ1biA9IGNvbnN0cnVjdFRleHRS
dW4oc3R5bGUsIGZvbnQpOwogCiAgICAgLy8gQ29tcHV0ZSBhbmQgc3RvcmUgdGhlIHJlY3QgYXNz
b2NpYXRlZCB3aXRoIHRoaXMgbWFya2VyLgpAQCAtMTE3NywyMiArMTE3NywxOSBAQCB2b2lkIElu
bGluZVRleHRCb3g6OmNvbXB1dGVSZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXIoRG9jdW1lbnRNYXJr
ZXIqIG1hcmtlciwgY29ucwogICAgIGZvbnQuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQocnVu
LCBzZWxlY3Rpb25SZWN0LCBzUG9zLCBlUG9zKTsKICAgICBJbnRSZWN0IG1hcmtlclJlY3QgPSBl
bmNsb3NpbmdJbnRSZWN0KHNlbGVjdGlvblJlY3QpOwogICAgIG1hcmtlclJlY3QgPSByZW5kZXJl
cigpLmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KG1hcmtlclJlY3QpKS5lbmNsb3NpbmdC
b3VuZGluZ0JveCgpOwotICAgIHRvUmVuZGVyZWREb2N1bWVudE1hcmtlcihtYXJrZXIpLT5zZXRS
ZW5kZXJlZFJlY3QobWFya2VyUmVjdCk7CisgICAgbWFya2VyLnNldFJlbmRlcmVkUmVjdChtYXJr
ZXJSZWN0KTsKIH0KICAgICAKLXZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtl
cnMoR3JhcGhpY3NDb250ZXh0KiBwdCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQsIGJvb2wgYmFja2dyb3VuZCkK
K3ZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcnMoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCwgYm9vbCBiYWNrZ3JvdW5kKQogewogICAgIGlmICgh
cmVuZGVyZXIoKS50ZXh0Tm9kZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8RG9j
dW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gcmVuZGVyZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5t
YXJrZXJzRm9yKHJlbmRlcmVyKCkudGV4dE5vZGUoKSk7Ci0gICAgVmVjdG9yPERvY3VtZW50TWFy
a2VyKj46OmNvbnN0X2l0ZXJhdG9yIG1hcmtlckl0ID0gbWFya2Vycy5iZWdpbigpOworICAgIFZl
Y3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IHJlbmRlcmVyKCkuZG9jdW1l
bnQoKS5tYXJrZXJzKCkubWFya2Vyc0ZvcihyZW5kZXJlcigpLnRleHROb2RlKCkpOwogCiAgICAg
Ly8gR2l2ZSBhbnkgZG9jdW1lbnQgbWFya2VycyB0aGF0IHRvdWNoIHRoaXMgcnVuIGEgY2hhbmNl
IHRvIGRyYXcgYmVmb3JlIHRoZSB0ZXh0IGhhcyBiZWVuIGRyYXduLgogICAgIC8vIE5vdGUgZW5k
KCkgcG9pbnRzIGF0IHRoZSBsYXN0IGNoYXIsIG5vdCBvbmUgcGFzdCBpdCBsaWtlIGVuZE9mZnNl
dCBhbmQgcmFuZ2VzIGRvLgotICAgIGZvciAoIDsgbWFya2VySXQgIT0gbWFya2Vycy5lbmQoKTsg
KyttYXJrZXJJdCkgewotICAgICAgICBEb2N1bWVudE1hcmtlciogbWFya2VyID0gKm1hcmtlckl0
OwotICAgICAgICAKKyAgICBmb3IgKGF1dG8qIG1hcmtlciA6IG1hcmtlcnMpIHsKICAgICAgICAg
Ly8gUGFpbnQgZWl0aGVyIHRoZSBiYWNrZ3JvdW5kIG1hcmtlcnMgb3IgdGhlIGZvcmVncm91bmQg
bWFya2VycywgYnV0IG5vdCBib3RoCiAgICAgICAgIHN3aXRjaCAobWFya2VyLT50eXBlKCkpIHsK
ICAgICAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXI6CkBAIC0xMjMyLDIyICsx
MjI5LDIyIEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcnMoR3JhcGhp
Y3NDb250ZXh0KiBwdCwgY29uc3QgRmxvYXRQb2ludCYKICAgICAgICAgICAgIGNhc2UgRG9jdW1l
bnRNYXJrZXI6OlNwZWxsaW5nOgogICAgICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6Q29y
cmVjdGlvbkluZGljYXRvcjoKICAgICAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OkRpY3Rh
dGlvbkFsdGVybmF0aXZlczoKLSAgICAgICAgICAgICAgICBwYWludERvY3VtZW50TWFya2VyKHB0
LCBib3hPcmlnaW4sIG1hcmtlciwgc3R5bGUsIGZvbnQsIGZhbHNlKTsKKyAgICAgICAgICAgICAg
ICBwYWludERvY3VtZW50TWFya2VyKGNvbnRleHQsIGJveE9yaWdpbiwgKm1hcmtlciwgc3R5bGUs
IGZvbnQsIGZhbHNlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
RG9jdW1lbnRNYXJrZXI6OkdyYW1tYXI6Ci0gICAgICAgICAgICAgICAgcGFpbnREb2N1bWVudE1h
cmtlcihwdCwgYm94T3JpZ2luLCBtYXJrZXIsIHN0eWxlLCBmb250LCB0cnVlKTsKKyAgICAgICAg
ICAgICAgICBwYWludERvY3VtZW50TWFya2VyKGNvbnRleHQsIGJveE9yaWdpbiwgKm1hcmtlciwg
c3R5bGUsIGZvbnQsIHRydWUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogI2lmIFBMQVRGT1JN
KElPUykKICAgICAgICAgICAgIC8vIEZJWE1FOiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzg5MzMzNTI+
LiBBbHNvLCByZW1vdmUgdGhlIFBMQVRGT1JNKElPUyktZ3VhcmQuCiAgICAgICAgICAgICBjYXNl
IERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzOgotICAgICAg
ICAgICAgICAgIHBhaW50RG9jdW1lbnRNYXJrZXIocHQsIGJveE9yaWdpbiwgbWFya2VyLCBzdHls
ZSwgZm9udCwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgcGFpbnREb2N1bWVudE1hcmtlcihjb250
ZXh0LCBib3hPcmlnaW4sICptYXJrZXIsIHN0eWxlLCBmb250LCB0cnVlKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICNlbmRpZgogICAgICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6VGV4
dE1hdGNoOgotICAgICAgICAgICAgICAgIHBhaW50VGV4dE1hdGNoTWFya2VyKHB0LCBib3hPcmln
aW4sIG1hcmtlciwgc3R5bGUsIGZvbnQpOworICAgICAgICAgICAgICAgIHBhaW50VGV4dE1hdGNo
TWFya2VyKGNvbnRleHQsIGJveE9yaWdpbiwgKm1hcmtlciwgc3R5bGUsIGZvbnQpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6UmVwbGFj
ZW1lbnQ6Ci0gICAgICAgICAgICAgICAgY29tcHV0ZVJlY3RGb3JSZXBsYWNlbWVudE1hcmtlciht
YXJrZXIsIHN0eWxlLCBmb250KTsKKyAgICAgICAgICAgICAgICBjb21wdXRlUmVjdEZvclJlcGxh
Y2VtZW50TWFya2VyKCptYXJrZXIsIHN0eWxlLCBmb250KTsKICAgICAgICAgICAgICAgICBicmVh
azsKICNpZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pCiAgICAgICAgICAgICBj
YXNlIERvY3VtZW50TWFya2VyOjpUZWxlcGhvbmVOdW1iZXI6CkBAIC0xMjYwLDcgKzEyNTcsNyBA
QCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29udGV4
dCogcHQsIGNvbnN0IEZsb2F0UG9pbnQmCiAgICAgfQogfQogCi12b2lkIElubGluZVRleHRCb3g6
OnBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmUoR3JhcGhpY3NDb250ZXh0KiBjdHgsIGNvbnN0IEZs
b2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgQ29tcG9zaXRpb25VbmRlcmxpbmUmIHVuZGVybGlu
ZSkKK3ZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3NpdGlvblVuZGVybGluZShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgQ29t
cG9zaXRpb25VbmRlcmxpbmUmIHVuZGVybGluZSkKIHsKICAgICBpZiAobV90cnVuY2F0aW9uID09
IGNGdWxsVHJ1bmNhdGlvbikKICAgICAgICAgcmV0dXJuOwpAQCAtMTMwMCw5ICsxMjk3LDkgQEAg
dm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lKEdyYXBoaWNzQ29u
dGV4dCogY3R4LCBjb25zdCBGbG9hdFAKICAgICBzdGFydCArPSAxOwogICAgIHdpZHRoIC09IDI7
CiAKLSAgICBjdHgtPnNldFN0cm9rZUNvbG9yKHVuZGVybGluZS5jb2xvciwgcmVuZGVyZXIoKS5z
dHlsZSgpLmNvbG9yU3BhY2UoKSk7Ci0gICAgY3R4LT5zZXRTdHJva2VUaGlja25lc3MobGluZVRo
aWNrbmVzcyk7Ci0gICAgY3R4LT5kcmF3TGluZUZvclRleHQoRmxvYXRQb2ludChib3hPcmlnaW4u
eCgpICsgc3RhcnQsIGJveE9yaWdpbi55KCkgKyBsb2dpY2FsSGVpZ2h0KCkgLSBsaW5lVGhpY2tu
ZXNzKSwgd2lkdGgsIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5wcmludGluZygpKTsKKyAgICBjb250
ZXh0LnNldFN0cm9rZUNvbG9yKHVuZGVybGluZS5jb2xvciwgcmVuZGVyZXIoKS5zdHlsZSgpLmNv
bG9yU3BhY2UoKSk7CisgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MobGluZVRoaWNrbmVz
cyk7CisgICAgY29udGV4dC5kcmF3TGluZUZvclRleHQoRmxvYXRQb2ludChib3hPcmlnaW4ueCgp
ICsgc3RhcnQsIGJveE9yaWdpbi55KCkgKyBsb2dpY2FsSGVpZ2h0KCkgLSBsaW5lVGhpY2tuZXNz
KSwgd2lkdGgsIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5wcmludGluZygpKTsKIH0KIAogaW50IElu
bGluZVRleHRCb3g6OmNhcmV0TWluT2Zmc2V0KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lVGV4dEJveC5oCmluZGV4IDRkYTBiYThmZjllNTAwZGQ3ZDAyNTJhZmViMzMwYzUw
MjZkZjI4N2YuLjhlNjIyMjZlZWM5NDQ5YzkyYzllZDJjZjhkNTdiZTNjYTZkNWVhOGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaApAQCAtMzAsNyArMzAsNyBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdHJ1Y3QgQ29tcG9zaXRpb25VbmRlcmxpbmU7Ci1jbGFz
cyBEb2N1bWVudE1hcmtlcjsKK2NsYXNzIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXI7CiBjbGFzcyBU
ZXh0UGFpbnRlcjsKIAogY29uc3QgdW5zaWduZWQgc2hvcnQgY05vVHJ1bmNhdGlvbiA9IFVTSFJU
X01BWDsKQEAgLTE0OCwxNyArMTQ4LDE3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGZsb2F0IHBv
c2l0aW9uRm9yT2Zmc2V0KGludCBvZmZzZXQpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6Ci0gICAgdm9p
ZCBwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9h
dFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udCYsIGludCBz
dGFydFBvcywgaW50IGVuZFBvcyk7Ci0gICAgdm9pZCBwYWludERvY3VtZW50TWFya2VycyhHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0
eWxlJiwgY29uc3QgRm9udCYsIGJvb2wgYmFja2dyb3VuZCk7Ci0gICAgdm9pZCBwYWludENvbXBv
c2l0aW9uVW5kZXJsaW5lKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9y
aWdpbiwgY29uc3QgQ29tcG9zaXRpb25VbmRlcmxpbmUmKTsKKyAgICB2b2lkIHBhaW50Q29tcG9z
aXRpb25CYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9y
aWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250JiwgaW50IHN0YXJ0UG9zLCBpbnQg
ZW5kUG9zKTsKKyAgICB2b2lkIHBhaW50RG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBG
b250JiwgYm9vbCBiYWNrZ3JvdW5kKTsKKyAgICB2b2lkIHBhaW50Q29tcG9zaXRpb25VbmRlcmxp
bmUoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBD
b21wb3NpdGlvblVuZGVybGluZSYpOwogCiBwcml2YXRlOgogICAgIHZvaWQgcGFpbnREZWNvcmF0
aW9uKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgVGV4dERl
Y29yYXRpb24sIFRleHREZWNvcmF0aW9uU3R5bGUsIGNvbnN0IFNoYWRvd0RhdGEqLCBUZXh0UGFp
bnRlciYpOwotICAgIHZvaWQgcGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
RmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmLCBD
b2xvciB0ZXh0Q29sb3IpOwotICAgIHZvaWQgcGFpbnREb2N1bWVudE1hcmtlcihHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIERvY3VtZW50TWFya2VyKiwgY29u
c3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250JiwgYm9vbCBncmFtbWFyKTsKLSAgICB2b2lkIHBh
aW50VGV4dE1hdGNoTWFya2VyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIGJv
eE9yaWdpbiwgRG9jdW1lbnRNYXJrZXIqLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQm
KTsKKyAgICB2b2lkIHBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0
UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250JiwgQ29sb3Ig
dGV4dENvbG9yKTsKKyAgICB2b2lkIHBhaW50RG9jdW1lbnRNYXJrZXIoR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJlZERvY3VtZW50TWFya2VyJiwg
Y29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250JiwgYm9vbCBncmFtbWFyKTsKKyAgICB2b2lk
IHBhaW50VGV4dE1hdGNoTWFya2VyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQm
IGJveE9yaWdpbiwgUmVuZGVyZWREb2N1bWVudE1hcmtlciYsIGNvbnN0IFJlbmRlclN0eWxlJiwg
Y29uc3QgRm9udCYpOwogCi0gICAgdm9pZCBjb21wdXRlUmVjdEZvclJlcGxhY2VtZW50TWFya2Vy
KERvY3VtZW50TWFya2VyKiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250Jik7CisgICAg
dm9pZCBjb21wdXRlUmVjdEZvclJlcGxhY2VtZW50TWFya2VyKFJlbmRlcmVkRG9jdW1lbnRNYXJr
ZXImLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmKTsKIAogICAgIFRleHRSdW46OkV4
cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yKCkgY29uc3QKICAgICB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3guY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVGbG93Qm94LmNwcAppbmRleCBm
MmM5ODg4YTFhM2I0ODA0MDZlYTE3OGE0Yzk3NzkxZTY4NWUzZjNlLi5hZDM0NWYwYzljZmVjZTRl
NGEzNzY3MTk2Zjg1YjhhNDIwMDI2MzEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHSW5saW5lRmxvd0JveC5jcHAKQEAgLTgzLDEyICs4Myw4IEBAIHZvaWQgU1ZH
SW5saW5lRmxvd0JveDo6Y29tcHV0ZVRleHRNYXRjaE1hcmtlclJlY3RGb3JSZW5kZXJlcihSZW5k
ZXJTVkdJbmxpbmVUZXh0CiAgICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gdGV4dFJlbmRlcmVyLT5z
dHlsZSgpOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIGZyYWdtZW50VHJhbnNmb3JtOwotICAgIFZl
Y3RvcjxEb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSB0ZXh0UmVuZGVyZXItPmRvY3VtZW50KCku
bWFya2VycygpLm1hcmtlcnNGb3IoJnRleHROb2RlKTsKLQotICAgIFZlY3RvcjxEb2N1bWVudE1h
cmtlcio+OjppdGVyYXRvciBtYXJrZXJFbmQgPSBtYXJrZXJzLmVuZCgpOwotICAgIGZvciAoVmVj
dG9yPERvY3VtZW50TWFya2VyKj46Oml0ZXJhdG9yIG1hcmtlckl0ID0gbWFya2Vycy5iZWdpbigp
OyBtYXJrZXJJdCAhPSBtYXJrZXJFbmQ7ICsrbWFya2VySXQpIHsKLSAgICAgICAgRG9jdW1lbnRN
YXJrZXIqIG1hcmtlciA9ICptYXJrZXJJdDsKLQorICAgIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50
TWFya2VyKj4gbWFya2VycyA9IHRleHRSZW5kZXJlci0+ZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFy
a2Vyc0ZvcigmdGV4dE5vZGUpOworICAgIGZvciAoYXV0byogbWFya2VyIDogbWFya2Vycykgewog
ICAgICAgICAvLyBTVkcgaXMgb25seSBpbnRlcmVzc3RlZCBpbiB0aGUgVGV4dE1hdGNoIG1hcmtl
ciwgZm9yIG5vdy4KICAgICAgICAgaWYgKG1hcmtlci0+dHlwZSgpICE9IERvY3VtZW50TWFya2Vy
OjpUZXh0TWF0Y2gpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTEyOCw3ICsxMjQsNyBAQCB2
b2lkIFNWR0lubGluZUZsb3dCb3g6OmNvbXB1dGVUZXh0TWF0Y2hNYXJrZXJSZWN0Rm9yUmVuZGVy
ZXIoUmVuZGVyU1ZHSW5saW5lVGV4dAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAg
ICAgdG9SZW5kZXJlZERvY3VtZW50TWFya2VyKG1hcmtlciktPnNldFJlbmRlcmVkUmVjdCh0ZXh0
UmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQobWFya2VyUmVjdCkuZW5jbG9zaW5nQm91bmRp
bmdCb3goKSk7CisgICAgICAgIG1hcmtlci0+c2V0UmVuZGVyZWRSZWN0KHRleHRSZW5kZXJlci0+
bG9jYWxUb0Fic29sdXRlUXVhZChtYXJrZXJSZWN0KS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpKTsK
ICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRleCAxNDhkM2My
M2UzMDQ1NDFlNGY4M2JjMjVlZGI5ZmU1MTY1NWQ3Y2YzLi4zNWU0MmUxZTFlZTZjMmE4NGJkNjMz
N2U3YTk4ZGM3ZDFhNzQxODM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBA
IC04NSw2ICs4NSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyTWVudUxpc3QuaCIKICNpbmNsdWRlICJS
ZW5kZXJUcmVlQXNUZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIlJl
bmRlcmVkRG9jdW1lbnRNYXJrZXIuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVz
LmgiCiAjaW5jbHVkZSAiU2NoZW1lUmVnaXN0cnkuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdDb29y
ZGluYXRvci5oIgpAQCAtNzc5LDM5ICs3ODAsMzkgQEAgdW5zaWduZWQgSW50ZXJuYWxzOjptYXJr
ZXJDb3VudEZvck5vZGUoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBtYXJrZXJUeXBlLCBFeGMK
ICAgICByZXR1cm4gbm9kZS0+ZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0Zvcihub2RlLCBt
YXJrZXJUeXBlcykuc2l6ZSgpOwogfQogCi1Eb2N1bWVudE1hcmtlciogSW50ZXJuYWxzOjptYXJr
ZXJBdChOb2RlKiBub2RlLCBjb25zdCBTdHJpbmcmIG1hcmtlclR5cGUsIHVuc2lnbmVkIGluZGV4
LCBFeGNlcHRpb25Db2RlJiBlYykKK1JlbmRlcmVkRG9jdW1lbnRNYXJrZXIqIEludGVybmFsczo6
bWFya2VyQXQoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBtYXJrZXJUeXBlLCB1bnNpZ25lZCBp
bmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgbm9kZS0+ZG9jdW1lbnQoKS51cGRhdGVM
YXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICAgICBpZiAoIW5vZGUpIHsKICAgICAg
ICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZXMg
bWFya2VyVHlwZXMgPSAwOwogICAgIGlmICghbWFya2VyVHlwZXNGcm9tKG1hcmtlclR5cGUsIG1h
cmtlclR5cGVzKSkgewogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7Ci0gICAgICAgIHJldHVybiAw
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBub2RlLT5kb2N1bWVudCgp
LmZyYW1lKCktPmVkaXRvcigpLnVwZGF0ZUVkaXRvclVJTm93SWZTY2hlZHVsZWQoKTsKIAotICAg
IFZlY3RvcjxEb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBub2RlLT5kb2N1bWVudCgpLm1hcmtl
cnMoKS5tYXJrZXJzRm9yKG5vZGUsIG1hcmtlclR5cGVzKTsKKyAgICBWZWN0b3I8UmVuZGVyZWRE
b2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBub2RlLT5kb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJr
ZXJzRm9yKG5vZGUsIG1hcmtlclR5cGVzKTsKICAgICBpZiAobWFya2Vycy5zaXplKCkgPD0gaW5k
ZXgpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1
cm4gbWFya2Vyc1tpbmRleF07CiB9CiAKIFBhc3NSZWZQdHI8UmFuZ2U+IEludGVybmFsczo6bWFy
a2VyUmFuZ2VGb3JOb2RlKE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgbWFya2VyVHlwZSwgdW5z
aWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIERvY3VtZW50TWFya2VyKiBt
YXJrZXIgPSBtYXJrZXJBdChub2RlLCBtYXJrZXJUeXBlLCBpbmRleCwgZWMpOworICAgIFJlbmRl
cmVkRG9jdW1lbnRNYXJrZXIqIG1hcmtlciA9IG1hcmtlckF0KG5vZGUsIG1hcmtlclR5cGUsIGlu
ZGV4LCBlYyk7CiAgICAgaWYgKCFtYXJrZXIpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShub2RlLT5kb2N1bWVudCgp
LCBub2RlLCBtYXJrZXItPnN0YXJ0T2Zmc2V0KCksIG5vZGUsIG1hcmtlci0+ZW5kT2Zmc2V0KCkp
OwogfQogCiBTdHJpbmcgSW50ZXJuYWxzOjptYXJrZXJEZXNjcmlwdGlvbkZvck5vZGUoTm9kZSog
bm9kZSwgY29uc3QgU3RyaW5nJiBtYXJrZXJUeXBlLCB1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7Ci0gICAgRG9jdW1lbnRNYXJrZXIqIG1hcmtlciA9IG1hcmtlckF0KG5vZGUs
IG1hcmtlclR5cGUsIGluZGV4LCBlYyk7CisgICAgUmVuZGVyZWREb2N1bWVudE1hcmtlciogbWFy
a2VyID0gbWFya2VyQXQobm9kZSwgbWFya2VyVHlwZSwgaW5kZXgsIGVjKTsKICAgICBpZiAoIW1h
cmtlcikKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIHJldHVybiBtYXJrZXItPmRlc2Ny
aXB0aW9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5o
IGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAppbmRleCBkZjAyZTM0YTgxMjhl
OGE5ODE1ZmVhZTY2NDU2MDQ4MDlhZDk2MzJiLi4wZTM1ZTkyMWJmOWNlMmVlNjQyYzgxYTMzNTMy
YzFmOWU4NTc2ZWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKQEAgLTQ2LDcgKzQ2
LDYgQEAgY2xhc3MgQ2xpZW50UmVjdExpc3Q7CiBjbGFzcyBET01TdHJpbmdMaXN0OwogY2xhc3Mg
RE9NV2luZG93OwogY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBEb2N1bWVudE1hcmtlcjsKIGNsYXNz
IEVsZW1lbnQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbER1
bW15OwpAQCAtNTcsNiArNTYsNyBAQCBjbGFzcyBNZW1vcnlJbmZvOwogY2xhc3MgTm9kZTsKIGNs
YXNzIFBhZ2U7CiBjbGFzcyBSYW5nZTsKK2NsYXNzIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXI7CiBj
bGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVl
OwogY2xhc3MgU291cmNlQnVmZmVyOwpAQCAtMzUxLDcgKzM1MSw3IEBAIHByaXZhdGU6CiAgICAg
RnJhbWUqIGZyYW1lKCkgY29uc3Q7CiAgICAgVmVjdG9yPFN0cmluZz4gaWNvblVSTHMoRG9jdW1l
bnQqLCBpbnQgaWNvblR5cGVzTWFzaykgY29uc3Q7CiAKLSAgICBEb2N1bWVudE1hcmtlciogbWFy
a2VyQXQoTm9kZSosIGNvbnN0IFN0cmluZyYgbWFya2VyVHlwZSwgdW5zaWduZWQgaW5kZXgsIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICBSZW5kZXJlZERvY3VtZW50TWFya2VyKiBtYXJrZXJBdChOb2Rl
KiwgY29uc3QgU3RyaW5nJiBtYXJrZXJUeXBlLCB1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29k
ZSYpOwogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgUmVmUHRyPERPTVdpbmRvdz4gbV9mcm9u
dGVuZFdpbmRvdzsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRE
dW1teT4gbV9mcm9udGVuZENsaWVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0
LnZjeHByb2ovV2ViS2l0RXhwb3J0R2VuZXJhdG9yL1dlYktpdEV4cG9ydHMuZGVmLmluIGIvU291
cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJLaXRFeHBvcnRHZW5lcmF0b3IvV2ViS2l0RXhw
b3J0cy5kZWYuaW4KaW5kZXggNzVkNzM1OGQ3MzhjNTc1ZWY0MjkzNzVjMmRjNTliYTA4ZDJlODMz
NS4uNWFhMjY0NmU2NTIzYzRmNzllOGMxYWM4YWVmMTJlZDM2YTc1NWExMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJLaXRFeHBvcnRHZW5lcmF0b3IvV2ViS2l0
RXhwb3J0cy5kZWYuaW4KKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJLaXRF
eHBvcnRHZW5lcmF0b3IvV2ViS2l0RXhwb3J0cy5kZWYuaW4KQEAgLTQyNyw3ICs0MjcsNyBAQCBF
WFBPUlRTCiAgICAgICAgIHN5bWJvbFdpdGhQb2ludGVyKD9zZXRBdXRvZmlsbGVkQEhUTUxJbnB1
dEVsZW1lbnRAV2ViQ29yZUBAUUFFWF9OQFosID9zZXRBdXRvZmlsbGVkQEhUTUxJbnB1dEVsZW1l
bnRAV2ViQ29yZUBAUUVBQVhfTkBaKQogICAgICAgICBzeW1ib2xXaXRoUG9pbnRlcig/c2V0RG9j
dW1lbnRTdGF0ZUBIaXN0b3J5SXRlbUBXZWJDb3JlQEBRQUVYQUJWPyRWZWN0b3JAVlN0cmluZ0BX
VEZAQCQwQUBWQ3Jhc2hPbk92ZXJmbG93QDJAQFdURkBAQFosID9zZXREb2N1bWVudFN0YXRlQEhp
c3RvcnlJdGVtQFdlYkNvcmVAQFFFQUFYQUVCVj8kVmVjdG9yQFZTdHJpbmdAV1RGQEAkMEFAVkNy
YXNoT25PdmVyZmxvd0AyQEBXVEZAQEBaKQogICAgICAgICBzeW1ib2xXaXRoUG9pbnRlcig/b3Zl
cnJpZGVVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzQFdlYkNvcmVAQFlBWEFCVj8kVmVjdG9yQFZTdHJp
bmdAV1RGQEAkMEFAVkNyYXNoT25PdmVyZmxvd0AyQEBXVEZAQEBaLCA/b3ZlcnJpZGVVc2VyUHJl
ZmVycmVkTGFuZ3VhZ2VzQFdlYkNvcmVAQFlBWEFFQlY/JFZlY3RvckBWU3RyaW5nQFdURkBAJDBB
QFZDcmFzaE9uT3ZlcmZsb3dAMkBAV1RGQEBAWikKLSAgICAgICAgc3ltYm9sV2l0aFBvaW50ZXIo
P21hcmtlcnNGb3JARG9jdW1lbnRNYXJrZXJDb250cm9sbGVyQFdlYkNvcmVAQFFBRT9BVj8kVmVj
dG9yQFBBVkRvY3VtZW50TWFya2VyQFdlYkNvcmVAQCQwQUBWQ3Jhc2hPbk92ZXJmbG93QFdURkBA
QFdURkBAUEFWTm9kZUAyQFZNYXJrZXJUeXBlc0BEb2N1bWVudE1hcmtlckAyQEBaLCA/bWFya2Vy
c0ZvckBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXJAV2ViQ29yZUBAUUVBQT9BVj8kVmVjdG9yQFBF
QVZEb2N1bWVudE1hcmtlckBXZWJDb3JlQEAkMEFAVkNyYXNoT25PdmVyZmxvd0BXVEZAQEBXVEZA
QFBFQVZOb2RlQDJAVk1hcmtlclR5cGVzQERvY3VtZW50TWFya2VyQDJAQFopCisgICAgICAgIHN5
bWJvbFdpdGhQb2ludGVyKD9tYXJrZXJzRm9yQERvY3VtZW50TWFya2VyQ29udHJvbGxlckBXZWJD
b3JlQEBRQUU/QVY/JFZlY3RvckBQQVZSZW5kZXJlZERvY3VtZW50TWFya2VyQFdlYkNvcmVAQCQw
QUBWQ3Jhc2hPbk92ZXJmbG93QFdURkBAQFdURkBAUEFWTm9kZUAyQFZNYXJrZXJUeXBlc0BEb2N1
bWVudE1hcmtlckAyQEBaLCA/bWFya2Vyc0ZvckBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXJAV2Vi
Q29yZUBAUUVBQT9BVj8kVmVjdG9yQFBFQVZSZW5kZXJlZERvY3VtZW50TWFya2VyQFdlYkNvcmVA
QCQwQUBWQ3Jhc2hPbk92ZXJmbG93QFdURkBAQFdURkBAUEVBVk5vZGVAMkBWTWFya2VyVHlwZXNA
RG9jdW1lbnRNYXJrZXJAMkBAWikKICAgICAgICAgc3ltYm9sV2l0aFBvaW50ZXIoP2dldFJlZmVy
ZW5jZWRGaWxlUGF0aHNARm9ybUNvbnRyb2xsZXJAV2ViQ29yZUBAU0E/QVY/JFZlY3RvckBWU3Ry
aW5nQFdURkBAJDBBQFZDcmFzaE9uT3ZlcmZsb3dAMkBAV1RGQEBBQlYzNEBAWiwgP2dldFJlZmVy
ZW5jZWRGaWxlUGF0aHNARm9ybUNvbnRyb2xsZXJAV2ViQ29yZUBAU0E/QVY/JFZlY3RvckBWU3Ry
aW5nQFdURkBAJDBBQFZDcmFzaE9uT3ZlcmZsb3dAMkBAV1RGQEBBRUJWMzRAQFopCiAgICAgICAg
IHN5bWJvbFdpdGhQb2ludGVyKD9pY29uVVJMc0BEb2N1bWVudEBXZWJDb3JlQEBRQUVBQlY/JFZl
Y3RvckBVSWNvblVSTEBXZWJDb3JlQEAkMEFAVkNyYXNoT25PdmVyZmxvd0BXVEZAQEBXVEZAQEhA
WiwgP2ljb25VUkxzQERvY3VtZW50QFdlYkNvcmVAQFFFQUFBRUJWPyRWZWN0b3JAVUljb25VUkxA
V2ViQ29yZUBAJDBBQFZDcmFzaE9uT3ZlcmZsb3dAV1RGQEBAV1RGQEBIQFopCiAgICAgICAgID91
c2VyUHJlZmVycmVkTGFuZ3VhZ2VzQFdlYkNvcmVAQFlBP0FWPyRWZWN0b3JAVlN0cmluZ0BXVEZA
QCQwQUBWQ3Jhc2hPbk92ZXJmbG93QDJAQFdURkBAWFoK
</data>

          </attachment>
      

    </bug>

</bugzilla>