<?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>88888</bug_id>
          
          <creation_ts>2012-06-12 10:39:00 -0700</creation_ts>
          <short_desc>RenderLayer subtrees without any self-painting layer shouldn&apos;t be walked during painting</short_desc>
          <delta_ts>2012-09-18 11:56:14 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>75001</blocked>
    
    <blocked>92258</blocked>
    
    <blocked>89241</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Julien Chaffraix">jchaffraix</reporter>
          <assigned_to name="Julien Chaffraix">jchaffraix</assigned_to>
          <cc>eric</cc>
    
    <cc>jamesr</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>647054</commentid>
    <comment_count>0</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-06-12 10:39:00 -0700</bug_when>
    <thetext>Currently we don&apos;t detect if any of our descendants is a self-painting layer. This means we spend some time walking the tree and doing some operation (like checking some bailout conditions) during painting for subtrees that we could just ignore in the first place.

http://dglazkov.github.com/performance-tests/biggrid.html is a pathological case where this happens. Due to having a lot of non-self-painting layers, we pay a huge cost for just walking up our lists during painting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647110</commentid>
    <comment_count>1</comment_count>
      <attachid>147117</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-06-12 11:25:13 -0700</bug_when>
    <thetext>Created attachment 147117
Proposed change v1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647134</commentid>
    <comment_count>2</comment_count>
      <attachid>147117</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-06-12 11:40:13 -0700</bug_when>
    <thetext>Comment on attachment 147117
Proposed change v1.

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

&gt; Source/WebCore/rendering/RenderLayer.cpp:446
&gt; +void RenderLayer::setHasSelfPaintingLayerDescendant()

This method name is confusing. It should be markAncestorsHaveSelfPaintingDescendant() or something.

&gt; Source/WebCore/rendering/RenderLayer.h:878
&gt; +    // If have no self-painting descendants, we don&apos;t have to walk our children during painting.
&gt; +    // This can lead to significant savings, especially if the tree has lots of non-self-painting layers grouped together
&gt; +    // (e.g. table cells). The current logic is simple and conservative which will lead to over-marking subtrees (FIXME).

It would be nice to toggle this back to false when possible. Isn&apos;t there an existing tree walk you can piggy-back on to update this flag?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647183</commentid>
    <comment_count>3</comment_count>
      <attachid>147117</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-06-12 12:34:49 -0700</bug_when>
    <thetext>Comment on attachment 147117
Proposed change v1.

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

&gt; Source/WebCore/rendering/RenderLayer.cpp:132
&gt; +    , m_hasSelfPaintingLayerDescendant(false)

It would be better to give this a name that makes it clear it’s not a precise flag. Perhaps m_canAssumeNoSelfPaintingLayerDescendants would be a way to make a more precise flag?

I’d only want this to have the simple name if it was kept accurate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647190</commentid>
    <comment_count>4</comment_count>
      <attachid>147117</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-06-12 12:46:01 -0700</bug_when>
    <thetext>Comment on attachment 147117
Proposed change v1.

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

&gt;&gt; Source/WebCore/rendering/RenderLayer.h:878
&gt;&gt; +    // (e.g. table cells). The current logic is simple and conservative which will lead to over-marking subtrees (FIXME).
&gt; 
&gt; It would be nice to toggle this back to false when possible. Isn&apos;t there an existing tree walk you can piggy-back on to update this flag?

We could potentially piggy-back on the visibility dirty &amp; update mechanism. We would need to rename the whole logic to accommodate non-visibility related flags. I had something like that in mind as a follow-up patch due to 2 reasons:
* any flaw in this logic would mean that we don&apos;t paint part of the page.
* this means updateVisibilityStatus could do one more round of walking our children (not sure how hot this function is)

I will just go ahead and do the proper invalidation and recomputing then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647331</commentid>
    <comment_count>5</comment_count>
      <attachid>147162</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-06-12 14:25:20 -0700</bug_when>
    <thetext>Created attachment 147162
Change v2: did markAncestorHasSelfPaintingLayerDescendant rename, added the proper invalidation / recomputation logic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647377</commentid>
    <comment_count>6</comment_count>
      <attachid>147162</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-06-12 14:58:35 -0700</bug_when>
    <thetext>Comment on attachment 147162
Change v2: did markAncestorHasSelfPaintingLayerDescendant rename, added the proper invalidation / recomputation logic.

Attachment 147162 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12946628</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647392</commentid>
    <comment_count>7</comment_count>
      <attachid>147175</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-06-12 15:06:47 -0700</bug_when>
    <thetext>Created attachment 147175
Change v3: Same as previously but should compile on Mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648068</commentid>
    <comment_count>8</comment_count>
      <attachid>147327</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-06-13 08:40:06 -0700</bug_when>
    <thetext>Created attachment 147327
Change v4. Fixed the invalidation logic as it wasn&apos;t dirtying.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649201</commentid>
    <comment_count>9</comment_count>
      <attachid>147327</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-06-14 08:44:00 -0700</bug_when>
    <thetext>Comment on attachment 147327
Change v4. Fixed the invalidation logic as it wasn&apos;t dirtying.

I believe the patch is good enough for a review now. The flaw in the logic made us not dirty anything (thus keeping m_hasSelfPaintingLayerDescendant set) and the test hit an ASSERT that I fixed so we should have some coverage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649434</commentid>
    <comment_count>10</comment_count>
      <attachid>147327</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-06-14 13:33:08 -0700</bug_when>
    <thetext>Comment on attachment 147327
Change v4. Fixed the invalidation logic as it wasn&apos;t dirtying.

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

r+ but if you feel like doing another patch with the suggested improvements, I&apos;d like to see it.

&gt; Source/WebCore/rendering/RenderLayer.cpp:450
&gt; +void RenderLayer::dirtyHasSelfPaintingLayerDescendantStatus()
&gt; +{
&gt; +    for (RenderLayer* layer = this; layer; layer = layer-&gt;parent()) {
&gt; +        layer-&gt;m_hasSelfPaintingLayerDescendantDirty = true;

Would be nice to change dirtyVisibleDescendantStatus() and this to use the same loop style.

Although dirtyVisibleDescendantStatus() doesn&apos;t, it would be nice of this method had &apos;ancestor&apos; in the name.

&gt; Source/WebCore/rendering/RenderLayer.cpp:460
&gt; +void RenderLayer::markAncestorHasSelfPaintingLayerDescendant()

The term &apos;mark&apos; implies (to me) that its&apos; a &quot;mark for layout&quot; type affair, which is setting a dirty flag that gets cleared when something happens. This is instead actually computing the final, known value of the flag, so &apos;set&apos; or &apos;update&apos; might be better terms.

&gt; Source/WebCore/rendering/RenderLayer.cpp:462
&gt; +    for (RenderLayer* layer = this; layer &amp;&amp; (layer-&gt;m_hasSelfPaintingLayerDescendantDirty || !layer-&gt;hasSelfPaintingLayerDescendant()); layer = layer-&gt;parent()) {

I think it would be easier to read if the (layer-&gt;m_hasSelfPaintingLayerDescendantDirty || !layer-&gt;hasSelfPaintingLayerDescendant() tests was done in the loop contents, with a &apos;break&apos;.

&gt; Source/WebCore/rendering/RenderLayer.cpp:682
&gt; +void RenderLayer::updateDescendantOrContentRelatedStatus()

Not a huge fan of this name. Maybe just updateDescendantDependentFlags or something

&gt; Source/WebCore/rendering/RenderLayer.cpp:728
&gt; +        for (RenderLayer* child = firstChild(); child; child = child-&gt;nextSibling()) {
&gt; +            child-&gt;updateDescendantOrContentRelatedStatus();

It&apos;s a shame you add another tree walk here. Could you do one tree walk for both flags, going as far as either flag needs?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649493</commentid>
    <comment_count>11</comment_count>
      <attachid>147327</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-06-14 14:24:11 -0700</bug_when>
    <thetext>Comment on attachment 147327
Change v4. Fixed the invalidation logic as it wasn&apos;t dirtying.

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

&gt; r+ but if you feel like doing another patch with the suggested improvements, I&apos;d like to see it.

Another round of review, it will be.

&gt;&gt; Source/WebCore/rendering/RenderLayer.cpp:450
&gt;&gt; +        layer-&gt;m_hasSelfPaintingLayerDescendantDirty = true;
&gt; 
&gt; Would be nice to change dirtyVisibleDescendantStatus() and this to use the same loop style.
&gt; 
&gt; Although dirtyVisibleDescendantStatus() doesn&apos;t, it would be nice of this method had &apos;ancestor&apos; in the name.

dirtyVisibleDescendantStatus is using recursion which I would rather avoid as it&apos;s a very simple ancestor walking loop here. I would rather push aligning those 2 functions in another bug: the reason being that I would rather remove recursion from dirtyVisibleDescendantStatus() than aligning the other way around. This would also enable some name tweaking (like adding &apos;ancestor&apos; to its name).

&gt;&gt; Source/WebCore/rendering/RenderLayer.cpp:460
&gt;&gt; +void RenderLayer::markAncestorHasSelfPaintingLayerDescendant()
&gt; 
&gt; The term &apos;mark&apos; implies (to me) that its&apos; a &quot;mark for layout&quot; type affair, which is setting a dirty flag that gets cleared when something happens. This is instead actually computing the final, known value of the flag, so &apos;set&apos; or &apos;update&apos; might be better terms.

setAncestorHasSelfPaintingLayerDescendant() is better IMHO as &apos;update&apos; would be the counterpart for &apos;mark&apos; for me.

&gt;&gt; Source/WebCore/rendering/RenderLayer.cpp:462
&gt;&gt; +    for (RenderLayer* layer = this; layer &amp;&amp; (layer-&gt;m_hasSelfPaintingLayerDescendantDirty || !layer-&gt;hasSelfPaintingLayerDescendant()); layer = layer-&gt;parent()) {
&gt; 
&gt; I think it would be easier to read if the (layer-&gt;m_hasSelfPaintingLayerDescendantDirty || !layer-&gt;hasSelfPaintingLayerDescendant() tests was done in the loop contents, with a &apos;break&apos;.

Makes sense.

&gt;&gt; Source/WebCore/rendering/RenderLayer.cpp:682
&gt;&gt; +void RenderLayer::updateDescendantOrContentRelatedStatus()
&gt; 
&gt; Not a huge fan of this name. Maybe just updateDescendantDependentFlags or something

Should work, I wanted to emphasize the fact that some flags are related to the render tree (&quot;content&quot;) and not the layer tree (&quot;descendants&quot;). It&apos;s probably too long and will be shortened.

&gt;&gt; Source/WebCore/rendering/RenderLayer.cpp:728
&gt;&gt; +            child-&gt;updateDescendantOrContentRelatedStatus();
&gt; 
&gt; It&apos;s a shame you add another tree walk here. Could you do one tree walk for both flags, going as far as either flag needs?

Sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649632</commentid>
    <comment_count>12</comment_count>
      <attachid>147679</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-06-14 16:46:24 -0700</bug_when>
    <thetext>Created attachment 147679
Change v5. More bug fixes and reworking per Simon&apos;s review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649634</commentid>
    <comment_count>13</comment_count>
      <attachid>147679</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-06-14 16:50:40 -0700</bug_when>
    <thetext>Comment on attachment 147679
Change v5. More bug fixes and reworking per Simon&apos;s review.

Nice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649830</commentid>
    <comment_count>14</comment_count>
      <attachid>147679</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-14 21:17:58 -0700</bug_when>
    <thetext>Comment on attachment 147679
Change v5. More bug fixes and reworking per Simon&apos;s review.

Clearing flags on attachment: 147679

Committed r120395: &lt;http://trac.webkit.org/changeset/120395&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649831</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-14 21:18:02 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147117</attachid>
            <date>2012-06-12 11:25:13 -0700</date>
            <delta_ts>2012-06-12 14:25:17 -0700</delta_ts>
            <desc>Proposed change v1.</desc>
            <filename>bug-88888-20120612112512.patch</filename>
            <type>text/plain</type>
            <size>7355</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5OTg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMThmMDIxODE3ODdjYWE4
OWMzZTE3NGQ5MjFiOTliMGEwYWZmOWExNC4uMzlkNjFlODEwYjI2MWE1NjY3MGQzNjg1YzQ2Y2Q1
ZDQzNTA1NDU5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDEyLTA2LTEyICBKdWxp
ZW4gQ2hhZmZyYWl4ICA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbmRlckxh
eWVyIHN1YnRyZWVzIHdpdGhvdXQgYW55IHNlbGYtcGFpbnRpbmcgbGF5ZXIgc2hvdWxkbid0IGJl
IHdhbGtlZCBkdXJpbmcgcGFpbnRpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTg4ODg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBjb3ZlcmVkIGJ5IGV4aXN0
aW5nIHRlc3RzLgorCisgICAgICAgIFRoZSBnaXN0IG9mIHRoaXMgY2hhbmdlIGlzIHRvIGFkZCBh
IGhhcy1zZWxmLXBhaW50aW5nLWxheWVyLWRlc2NlbmRhbnQgZmxhZyB0aGF0IGlzCisgICAgICAg
IHVzZWQgdG8gYXZvaWQgd2Fsa2luZyBzdWJ0cmVlcyB3aXRoIGFueSBzZWxmLXBhaW50aW5nIGxh
eWVyLgorCisgICAgICAgIFRoZSBjdXJyZW50IGxvZ2ljIGlzIGZhaXJseSBzaW1wbGUgdG8gYmUg
ZmFzdCBhbmQgd2lsbCBiZSBtaXNzaW5nIGxvdHMgb2Ygc3VidHJlZXMKKyAgICAgICAgKGVzcGVj
aWFsbHkgaWYgc3R5bGUgbXV0YXRpb24gaXMgaW52b2x2ZWQgYXMgd2UgbmV2ZXIgcmVzZXQgdGhl
IGZsYWcpLiBIb3dldmVyIGl0J3MKKyAgICAgICAgYSBnb29kIGZpcnN0IHN0ZXAgYW5kIHRoZSBs
b2dpYyBjb3VsZCBiZSBmaXhlZCBpZiB0aGUgbmVlZCBhcmlzZS4KKworICAgICAgICBPbiBodHRw
Oi8vZGdsYXprb3YuZ2l0aHViLmNvbS9wZXJmb3JtYW5jZS10ZXN0cy9iaWdncmlkLmh0bWwgd2l0
aCBhIDEwMCwwMDAgcm93cworICAgICAgICBieSAxMDAgY29sdW1ucyB0YWJsZSwgaXQgYnJpbmdz
IHRoZSBwYWludCB0aW1lIGR1cmluZyBzY3JvbGxpbmcgZnJvbSB+NDVtcyB0byB+Nm1zCisgICAg
ICAgIG9uIG15IG1hY2hpbmUuIFRoZSB0ZXN0IGNhc2UgaXMgYSBwYXRob2xvZ2ljIGV4YW1wbGUg
aGVyZSBidXQgdGhlIG9wdGltaXphdGlvbiBzaG91bGQKKyAgICAgICAgYXBwbHkgaW4gb3RoZXIg
Y2FzZXMuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjphZGRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c3R5
bGVDaGFuZ2VkKToKKyAgICAgICAgVGhlc2UgZnVuY3Rpb25zIHdlcmUgdXBkYXRlZCB0byB1cGRh
dGUgdGhlIG5ldyBmbGFncy4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldEhh
c1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudCk6CisgICAgICAgIEFkZGVkIHRoaXMgZnVuY3Rp
b24gdG8gcHJvcGFnYXRlIHRoZSBoYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnQKKyAgICAg
ICAgZmxhZyB0byBvdXIgYW5jZXN0b3JzLgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6cGFpbnRMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRMYXll
ckNvbnRlbnRzQW5kUmVmbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
cGFpbnRMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWlu
dExpc3QpOgorICAgICAgICBVcGRhdGVkIHRoZSBwYWludGluZyBsb2dpYyB0byBiYWlsIG91dCBp
ZiB3ZSBzZWUgZW5jb3VudGVyIGEgdHJlZSB0aGF0IGRvZXNuJ3QgaGF2ZQorICAgICAgICBzZWxm
LXBhaW50aW5nIGxheWVycy4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omhhc1NlbGZQYWludGluZ0xheWVyRGVzY2Vu
ZGFudCk6CisgICAgICAgIEFkZGVkIHRoZSBnZXR0ZXIuCisKIDIwMTItMDYtMTEgIERhdmlkIEJh
cnIgIDxkYXZpZGJhcnJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFkZCBjc3MzLWltYWdlcyBp
bWFnZS1yZXNvbHV0aW9uIChkcHB4IG9ubHkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcAppbmRleCAyN2M3ZDVjZjU1ZDllNzBmNWVjNjdiZTcyMjA4ZmE1NWE4NTZmYjdl
Li44ODc4NGViMjA3ZTQ0MWZhYjk3MGUyYTExNWY3MThjODNkYjJiMDhlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTEyOSw2ICsxMjksNyBAQCBSZW5kZXJM
YXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlcmVyKQogICAgIDog
bV9pblJlc2l6ZU1vZGUoZmFsc2UpCiAgICAgLCBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSh0cnVl
KQogICAgICwgbV9ub3JtYWxGbG93TGlzdERpcnR5KHRydWUpCisgICAgLCBtX2hhc1NlbGZQYWlu
dGluZ0xheWVyRGVzY2VuZGFudChmYWxzZSkKICAgICAsIG1faXNSb290TGF5ZXIocmVuZGVyZXIt
PmlzUmVuZGVyVmlldygpKQogICAgICwgbV91c2VkVHJhbnNwYXJlbmN5KGZhbHNlKQogICAgICwg
bV9wYWludGluZ0luc2lkZVJlZmxlY3Rpb24oZmFsc2UpCkBAIC00NDIsNiArNDQzLDEyIEBAIExh
eW91dFJlY3QgUmVuZGVyTGF5ZXI6OnJlcGFpbnRSZWN0SW5jbHVkaW5nTm9uQ29tcG9zaXRpbmdE
ZXNjZW5kYW50cygpIGNvbnN0CiAgICAgcmV0dXJuIHJlcGFpbnRSZWN0OwogfQogCit2b2lkIFJl
bmRlckxheWVyOjpzZXRIYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnQoKQoreworICAgIGZv
ciAoUmVuZGVyTGF5ZXIqIGxheWVyID0gdGhpczsgbGF5ZXIgJiYgIWxheWVyLT5oYXNTZWxmUGFp
bnRpbmdMYXllckRlc2NlbmRhbnQoKTsgbGF5ZXIgPSBsYXllci0+cGFyZW50KCkpCisgICAgICAg
IGxheWVyLT5tX2hhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudCA9IHRydWU7Cit9CisKIHZv
aWQgUmVuZGVyTGF5ZXI6OmNvbXB1dGVSZXBhaW50UmVjdHMoTGF5b3V0UG9pbnQqIG9mZnNldEZy
b21Sb290KQogewogICAgIEFTU0VSVCghbV92aXNpYmxlQ29udGVudFN0YXR1c0RpcnR5KTsKQEAg
LTEyNDUsNyArMTI1MiwxMCBAQCB2b2lkIFJlbmRlckxheWVyOjphZGRDaGlsZChSZW5kZXJMYXll
ciogY2hpbGQsIFJlbmRlckxheWVyKiBiZWZvcmVDaGlsZCkKICAgICBjaGlsZC0+dXBkYXRlVmlz
aWJpbGl0eVN0YXR1cygpOwogICAgIGlmIChjaGlsZC0+bV9oYXNWaXNpYmxlQ29udGVudCB8fCBj
aGlsZC0+bV9oYXNWaXNpYmxlRGVzY2VuZGFudCkKICAgICAgICAgY2hpbGRWaXNpYmlsaXR5Q2hh
bmdlZCh0cnVlKTsKLSAgICAKKworICAgIGlmIChjaGlsZC0+aXNTZWxmUGFpbnRpbmdMYXllcigp
IHx8IGNoaWxkLT5oYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnQoKSkKKyAgICAgICAgc2V0
SGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50KCk7CisKICNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCiAgICAgY29tcG9zaXRvcigpLT5sYXllcldhc0FkZGVkKHRoaXMsIGNoaWxk
KTsKICNlbmRpZgpAQCAtMjg4Miw3ICsyODkyLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRM
YXllcihSZW5kZXJMYXllciogcm9vdExheWVyLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsCiAj
ZW5kaWYKIAogICAgIC8vIE5vbiBzZWxmLXBhaW50aW5nIGxlYWYgbGF5ZXJzIGRvbid0IG5lZWQg
dG8gYmUgcGFpbnRlZCBhcyB0aGVpciByZW5kZXJlcigpIHNob3VsZCBwcm9wZXJseSBwYWludCBp
dHNlbGYuCi0gICAgaWYgKCFpc1NlbGZQYWludGluZ0xheWVyKCkgJiYgIWZpcnN0Q2hpbGQoKSkK
KyAgICBpZiAoIWlzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJiAhaGFzU2VsZlBhaW50aW5nTGF5ZXJE
ZXNjZW5kYW50KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChzaG91bGRTdXBwcmVzc1Bh
aW50aW5nTGF5ZXIodGhpcykpCkBAIC0yOTUyLDYgKzI5NjIsOCBAQCB2b2lkIFJlbmRlckxheWVy
OjpwYWludExheWVyQ29udGVudHNBbmRSZWZsZWN0aW9uKFJlbmRlckxheWVyKiByb290TGF5ZXIs
IEdyYXBoaQogICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jv
b3QsIFJlbmRlclJlZ2lvbiogcmVnaW9uLCBPdmVybGFwVGVzdFJlcXVlc3RNYXAqIG92ZXJsYXBU
ZXN0UmVxdWVzdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICBQYWludExheWVyRmxhZ3MgcGFp
bnRGbGFncykKIHsKKyAgICBBU1NFUlQoaXNTZWxmUGFpbnRpbmdMYXllcigpIHx8IGhhc1NlbGZQ
YWludGluZ0xheWVyRGVzY2VuZGFudCgpKTsKKwogICAgIFBhaW50TGF5ZXJGbGFncyBsb2NhbFBh
aW50RmxhZ3MgPSBwYWludEZsYWdzICYgfihQYWludExheWVyQXBwbGllZFRyYW5zZm9ybSk7CiAK
ICAgICAvLyBQYWludCB0aGUgcmVmbGVjdGlvbiBmaXJzdCBpZiB3ZSBoYXZlIG9uZS4KQEAgLTI5
NzEsNiArMjk4Myw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyhSZW5k
ZXJMYXllciogcm9vdExheWVyLCBHcmFwaGljc0NvbnRleHQqIGNvCiAgICAgICAgICAgICAgICAg
ICAgICAgICBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdCwgUmVuZGVyUmVnaW9uKiByZWdpb24s
IE92ZXJsYXBUZXN0UmVxdWVzdE1hcCogb3ZlcmxhcFRlc3RSZXF1ZXN0cywKICAgICAgICAgICAg
ICAgICAgICAgICAgIFBhaW50TGF5ZXJGbGFncyBwYWludEZsYWdzKQogeworICAgIEFTU0VSVChp
c1NlbGZQYWludGluZ0xheWVyKCkgfHwgaGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50KCkp
OworCiAgICAgUGFpbnRMYXllckZsYWdzIGxvY2FsUGFpbnRGbGFncyA9IHBhaW50RmxhZ3MgJiB+
KFBhaW50TGF5ZXJBcHBsaWVkVHJhbnNmb3JtKTsKICAgICBib29sIGhhdmVUcmFuc3BhcmVuY3kg
PSBsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVySGF2ZVRyYW5zcGFyZW5jeTsKICAgICBib29s
IGlzU2VsZlBhaW50aW5nTGF5ZXIgPSB0aGlzLT5pc1NlbGZQYWludGluZ0xheWVyKCk7CkBAIC0z
MTY1LDYgKzMxNzksOSBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExpc3QoVmVjdG9yPFJlbmRl
ckxheWVyKj4qIGxpc3QsIFJlbmRlckxheWVyKiByb290TGF5ZXIsCiAgICAgaWYgKCFsaXN0KQog
ICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoIWhhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFu
dCgpKQorICAgICAgICByZXR1cm47CisKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgTGF5ZXJM
aXN0TXV0YXRpb25EZXRlY3RvciBtdXRhdGlvbkNoZWNrZXIodGhpcyk7CiAjZW5kaWYKQEAgLTQ3
NDUsNiArNDc2Miw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZl
cmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKICAgICB9CiAKICAgICBtX2lzU2Vs
ZlBhaW50aW5nTGF5ZXIgPSBzaG91bGRCZVNlbGZQYWludGluZ0xheWVyKCk7CisgICAgaWYgKG1f
aXNTZWxmUGFpbnRpbmdMYXllciAmJiBwYXJlbnQoKSkKKyAgICAgICAgcGFyZW50KCktPnNldEhh
c1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudCgpOwogCiAgICAgaWYgKHJlbmRlcmVyKCktPnN0
eWxlKCktPm92ZXJmbG93WCgpID09IE9NQVJRVUVFICYmIHJlbmRlcmVyKCktPnN0eWxlKCktPm1h
cnF1ZWVCZWhhdmlvcigpICE9IE1OT05FICYmIHJlbmRlcmVyKCktPmlzQm94KCkpIHsKICAgICAg
ICAgaWYgKCFtX21hcnF1ZWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCmlu
ZGV4IGJkODFjOTUxMDVlZjVlYTRkOWEzYzlkOTI4MjU5N2VlMmE0NjhkYzAuLmRkNjE5NjIxNDA3
OGU5MjlmNDZjMDZjMjc3MDAxYjg3NzFjM2I0NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5oCkBAIC02NDksNiArNjQ5LDkgQEAgcHJpdmF0ZToKICAgICBib29sIGlzU3Rh
Y2tpbmdDb250ZXh0KGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QgeyByZXR1cm4gIXN0
eWxlLT5oYXNBdXRvWkluZGV4KCkgfHwgaXNSb290TGF5ZXIoKTsgfQogICAgIGJvb2wgaXNEaXJ0
eVN0YWNraW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fek9yZGVyTGlzdHNEaXJ0eSAmJiBp
c1N0YWNraW5nQ29udGV4dCgpOyB9CiAKKyAgICBib29sIGhhc1NlbGZQYWludGluZ0xheWVyRGVz
Y2VuZGFudCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50
OyB9CisgICAgdm9pZCBzZXRIYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnQoKTsKKwogICAg
IHZvaWQgY29tcHV0ZVJlcGFpbnRSZWN0cyhMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QgPSAw
KTsKICAgICB2b2lkIGNsZWFyUmVwYWludFJlY3RzKCk7CiAKQEAgLTg3MCw2ICs4NzMsMTAgQEAg
cHJvdGVjdGVkOgogICAgIGJvb2wgbV9pc05vcm1hbEZsb3dPbmx5IDogMTsKIAogICAgIGJvb2wg
bV9pc1NlbGZQYWludGluZ0xheWVyIDogMTsKKyAgICAvLyBJZiBoYXZlIG5vIHNlbGYtcGFpbnRp
bmcgZGVzY2VuZGFudHMsIHdlIGRvbid0IGhhdmUgdG8gd2FsayBvdXIgY2hpbGRyZW4gZHVyaW5n
IHBhaW50aW5nLgorICAgIC8vIFRoaXMgY2FuIGxlYWQgdG8gc2lnbmlmaWNhbnQgc2F2aW5ncywg
ZXNwZWNpYWxseSBpZiB0aGUgdHJlZSBoYXMgbG90cyBvZiBub24tc2VsZi1wYWludGluZyBsYXll
cnMgZ3JvdXBlZCB0b2dldGhlcgorICAgIC8vIChlLmcuIHRhYmxlIGNlbGxzKS4gVGhlIGN1cnJl
bnQgbG9naWMgaXMgc2ltcGxlIGFuZCBjb25zZXJ2YXRpdmUgd2hpY2ggd2lsbCBsZWFkIHRvIG92
ZXItbWFya2luZyBzdWJ0cmVlcyAoRklYTUUpLgorICAgIGJvb2wgbV9oYXNTZWxmUGFpbnRpbmdM
YXllckRlc2NlbmRhbnQgOiAxOwogCiAgICAgY29uc3QgYm9vbCBtX2lzUm9vdExheWVyIDogMTsK
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147162</attachid>
            <date>2012-06-12 14:25:20 -0700</date>
            <delta_ts>2012-06-12 15:06:44 -0700</delta_ts>
            <desc>Change v2: did markAncestorHasSelfPaintingLayerDescendant rename, added the proper invalidation / recomputation logic.</desc>
            <filename>bug-88888-20120612142519.patch</filename>
            <type>text/plain</type>
            <size>14964</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwMTAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjdjNmYzYmEyM2NjN2Q3
ZTU5M2YwZjZkM2Q2MzExNmJiMzJlYjk1OS4uMWMzN2UyMWI2NzM2MjdhNTViOTQ1NzJmZDIzYzg3
YWIwNDI4MzQ3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEyLTA2LTEyICBKdWxp
ZW4gQ2hhZmZyYWl4ICA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbmRlckxh
eWVyIHN1YnRyZWVzIHdpdGhvdXQgYW55IHNlbGYtcGFpbnRpbmcgbGF5ZXIgc2hvdWxkbid0IGJl
IHdhbGtlZCBkdXJpbmcgcGFpbnRpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTg4ODg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBjb3ZlcmVkIGJ5IGV4aXN0
aW5nIHRlc3RzLgorCisgICAgICAgIFRoZSBnaXN0IG9mIHRoaXMgY2hhbmdlIGlzIHRvIGFkZCBh
IGhhcy1zZWxmLXBhaW50aW5nLWxheWVyLWRlc2NlbmRhbnQgZmxhZyAoaW5jbHVkaW5nIGFuCisg
ICAgICAgIGludmFsaWRhdGlvbiBsb2dpYykgdGhhdCBpcyB1c2VkIHRvIGF2b2lkIHdhbGtpbmcg
c3VidHJlZXMgd2l0aG91dCBhbnkgc2VsZi1wYWludGluZyBsYXllci4KKworICAgICAgICBPbiBo
dHRwOi8vZGdsYXprb3YuZ2l0aHViLmNvbS9wZXJmb3JtYW5jZS10ZXN0cy9iaWdncmlkLmh0bWwg
d2l0aCBhIDEwMCwwMDAgcm93cworICAgICAgICBieSAxMDAgY29sdW1ucyB0YWJsZSwgaXQgYnJp
bmdzIHRoZSBwYWludCB0aW1lIGR1cmluZyBzY3JvbGxpbmcgZnJvbSB+NDVtcyB0byB+Nm1zCisg
ICAgICAgIG9uIG15IG1hY2hpbmUuIFRoZSB0ZXN0IGNhc2UgaXMgYSBwYXRob2xvZ2ljIGV4YW1w
bGUgaGVyZSBidXQgdGhlIG9wdGltaXphdGlvbiBzaG91bGQKKyAgICAgICAgYXBwbHkgaW4gb3Ro
ZXIgY2FzZXMuCisKKyAgICAgICAgVGhlIG5ldyB1cGRhdGUgbG9naWMgcGlnZ3ktYmFja3Mgb24g
dG9wIG9mIHRoZSBleGlzdGluZyB1cGRhdGVWaXNpYmlsaXR5U3RhdHVzKCkgb25lIHRoYXQKKyAg
ICAgICAgZ290IHJlcHVycG9zZWQgYW5kIHJlbmFtZWQgYXMgcGFydCBvZiB0aGlzIGNoYW5nZS4K
KworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpyZW1vdmVDaGls
ZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKToKKyAgICAg
ICAgVGhlc2UgZnVuY3Rpb25zIHdlcmUgdXBkYXRlZCB0byBkaXJ0eSAvIHNldCB0aGUgbmV3IGZs
YWcuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkaXJ0eUhhc1NlbGZQYWludGlu
Z0xheWVyRGVzY2VuZGFudFN0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
bWFya0FuY2VzdG9ySGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50KToKKyAgICAgICAgQWRk
ZWQgdGhvc2UgZnVuY3Rpb25zIHRvIGhhbmRsZSBzZXR0aW5nIC8gaW52YWxpZGF0aW5nIHRoZSBu
ZXcgZmxhZy4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZVNlbGZQYWlu
dGluZ0xheWVyQWZ0ZXJTdHlsZUNoYW5nZSk6CisgICAgICAgIEFkZGVkIHRoaXMgZnVuY3Rpb24g
dG8gaGFuZGxlIHN0eWxlIHVwZGF0ZS4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OnBhaW50TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJD
b250ZW50c0FuZFJlZmxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBh
aW50TGF5ZXJDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRM
aXN0KToKKyAgICAgICAgQ2hhbmdlZCB0aGlzIGxvZ2ljIHRvIGJhaWwgb3V0IGlmIHdlIGhhdmUg
bm8gc2VsZi1wYWludGluZyBkZXNjZW5kYW50cy4gVGhpcyBpcyB3aGF0CisgICAgICAgIGlzIGdp
dmluZyB0aGUgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQuIEFsc28gYWRkZWQgc29tZSBwZXJmb3Jt
YW5jZSBBU1NFUlRzIHRvIGVuc3VyZQorICAgICAgICB0aGUgbWV0aG9kcyBhcmUgbm90IGNhbGxl
ZCB3aGVuIHRoZXkgc2hvdWxkbid0LgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
dXBkYXRlRGVzY2VuZGFudE9yQ29udGVudFJlbGF0ZWRTdGF0dXMpOgorICAgICAgICBSZW5hbWVk
IGZyb20gdXBkYXRlVmlzaWJpbGl0eVN0YXR1cyB0byBhY2NvdW50IGZvciB0aGUgbmV3IHVzYWdl
LgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0
ZXJTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNvbGxlY3RMYXllcnMp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0xheWVyR2VvbWV0cnkp
OgorICAgICAgICBVcGRhdGVkIGFmdGVyIHVwZGF0ZVZpc2liaWxpdHlTdGF0dXMgcmVuYW1lLgor
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6aGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50KToKKyAgICAgICAgQWRk
ZWQgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSBuZXcgZnVuY3Rpb25zIGFzIHdlbGwgYXMgdGhlIG5l
dyBmbGFnIGFuZCBkaXJ0eSBiaXQuCisKIDIwMTItMDYtMTIgIFNhbWkgS3lvc3RpbGEgIDxza3lv
c3RpbEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBEb24ndCBjcmFzaCBpbiBD
Q0xheWVySXRlcmF0b3IgaWYgdGhlIHJvb3QgbGF5ZXIgZG9lc24ndCBoYXZlIGEgcmVuZGVyIHN1
cmZhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IDI3Yzdk
NWNmNTVkOWU3MGY1ZWM2N2JlNzIyMDhmYTU1YTg1NmZiN2UuLjA5ZTBlMmFkNDUxNWQ5MzlhMTkw
ODU1OWY3YmFlYWY5N2E5ZWMxNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcApAQCAtMTI5LDYgKzEyOSw4IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5k
ZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyZXIpCiAgICAgOiBtX2luUmVzaXplTW9kZShmYWxzZSkK
ICAgICAsIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KHRydWUpCiAgICAgLCBtX25vcm1hbEZsb3dM
aXN0RGlydHkodHJ1ZSkKKyAgICAsIG1faGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50KGZh
bHNlKQorICAgICwgbV9oYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnREaXJ0eShmYWxzZSkK
ICAgICAsIG1faXNSb290TGF5ZXIocmVuZGVyZXItPmlzUmVuZGVyVmlldygpKQogICAgICwgbV91
c2VkVHJhbnNwYXJlbmN5KGZhbHNlKQogICAgICwgbV9wYWludGluZ0luc2lkZVJlZmxlY3Rpb24o
ZmFsc2UpCkBAIC0zNjMsNyArMzY1LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQ
b3NpdGlvbnMoTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290LCBVcGRhdGVMYXllclAKICAgICB9
CiAgICAgcG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKHRvU2l6ZShyb3VuZGVkSW50UG9pbnQob2Zm
c2V0KSkpOwogCi0gICAgdXBkYXRlVmlzaWJpbGl0eVN0YXR1cygpOworICAgIHVwZGF0ZURlc2Nl
bmRhbnRPckNvbnRlbnRSZWxhdGVkU3RhdHVzKCk7CiAKICAgICBpZiAoZmxhZ3MgJiBVcGRhdGVQ
YWdpbmF0aW9uKQogICAgICAgICB1cGRhdGVQYWdpbmF0aW9uKCk7CkBAIC00NDIsNiArNDQ0LDIw
IEBAIExheW91dFJlY3QgUmVuZGVyTGF5ZXI6OnJlcGFpbnRSZWN0SW5jbHVkaW5nTm9uQ29tcG9z
aXRpbmdEZXNjZW5kYW50cygpIGNvbnN0CiAgICAgcmV0dXJuIHJlcGFpbnRSZWN0OwogfQogCit2
b2lkIFJlbmRlckxheWVyOjpkaXJ0eUhhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudFN0YXR1
cygpCit7CisgICAgZm9yIChSZW5kZXJMYXllciogbGF5ZXIgPSB0aGlzOyBsYXllciAmJiAobGF5
ZXItPm1faGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50RGlydHkgfHwgIWxheWVyLT5oYXNT
ZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnQoKSk7IGxheWVyID0gbGF5ZXItPnBhcmVudCgpKQor
ICAgICAgICBsYXllci0+bV9oYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnREaXJ0eSA9IHRy
dWU7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6Om1hcmtBbmNlc3Rvckhhc1NlbGZQYWludGluZ0xh
eWVyRGVzY2VuZGFudCgpCit7CisgICAgZm9yIChSZW5kZXJMYXllciogbGF5ZXIgPSB0aGlzOyBs
YXllciAmJiAobGF5ZXItPm1faGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50RGlydHkgfHwg
IWxheWVyLT5oYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnQoKSk7IGxheWVyID0gbGF5ZXIt
PnBhcmVudCgpKSB7CisgICAgICAgIGxheWVyLT5tX2hhc1NlbGZQYWludGluZ0xheWVyRGVzY2Vu
ZGFudERpcnR5ID0gZmFsc2U7CisgICAgICAgIGxheWVyLT5tX2hhc1NlbGZQYWludGluZ0xheWVy
RGVzY2VuZGFudCA9IHRydWU7CisgICAgfQorfQorCiB2b2lkIFJlbmRlckxheWVyOjpjb21wdXRl
UmVwYWludFJlY3RzKExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9vdCkKIHsKICAgICBBU1NFUlQo
IW1fdmlzaWJsZUNvbnRlbnRTdGF0dXNEaXJ0eSk7CkBAIC00NjQsNyArNDgwLDcgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChVcGRhdGVMYXllclBv
c2l0aW9uc0FmdGVyU2Nyb2wKIHsKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGRuJ3QgYmUgbmVl
ZGVkLCBidXQgdGhlcmUgYXJlIHNvbWUgY29ybmVyIGNhc2VzIHdoZXJlCiAgICAgLy8gdGhlc2Ug
ZmxhZ3MgYXJlIHN0aWxsIGRpcnR5LiBVcGRhdGUgc28gdGhhdCB0aGUgY2hlY2sgYmVsb3cgaXMg
dmFsaWQuCi0gICAgdXBkYXRlVmlzaWJpbGl0eVN0YXR1cygpOworICAgIHVwZGF0ZURlc2NlbmRh
bnRPckNvbnRlbnRSZWxhdGVkU3RhdHVzKCk7CiAKICAgICAvLyBJZiB3ZSBoYXZlIG5vIHZpc2li
bGUgY29udGVudCBhbmQgbm8gdmlzaWJsZSBkZXNjZW5kYW50cywgdGhlcmUgaXMgbm8gcG9pbnQg
cmVjb21wdXRpbmcKICAgICAvLyBvdXIgcmVjdGFuZ2xlcyBhcyB0aGV5IHdpbGwgYmUgZW1wdHku
IElmIG91ciB2aXNpYmlsaXR5IGNoYW5nZXMsIHdlIGFyZSBleHBlY3RlZCB0bwpAQCAtNjU2LDEy
ICs2NzIsMTIgQEAgdm9pZCBSZW5kZXJMYXllcjo6ZGlydHlWaXNpYmxlRGVzY2VuZGFudFN0YXR1
cygpCiAgICAgfQogfQogCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVWaXNpYmlsaXR5U3RhdHVz
KCkKK3ZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZURlc2NlbmRhbnRPckNvbnRlbnRSZWxhdGVkU3Rh
dHVzKCkKIHsKICAgICBpZiAobV92aXNpYmxlRGVzY2VuZGFudFN0YXR1c0RpcnR5KSB7CiAgICAg
ICAgIG1faGFzVmlzaWJsZURlc2NlbmRhbnQgPSBmYWxzZTsKICAgICAgICAgZm9yIChSZW5kZXJM
YXllciogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2li
bGluZygpKSB7Ci0gICAgICAgICAgICBjaGlsZC0+dXBkYXRlVmlzaWJpbGl0eVN0YXR1cygpOyAg
ICAgICAgCisgICAgICAgICAgICBjaGlsZC0+dXBkYXRlRGVzY2VuZGFudE9yQ29udGVudFJlbGF0
ZWRTdGF0dXMoKTsKICAgICAgICAgICAgIGlmIChjaGlsZC0+bV9oYXNWaXNpYmxlQ29udGVudCB8
fCBjaGlsZC0+bV9oYXNWaXNpYmxlRGVzY2VuZGFudCkgewogICAgICAgICAgICAgICAgIG1faGFz
VmlzaWJsZURlc2NlbmRhbnQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjk5
LDYgKzcxNSwxNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVWaXNpYmlsaXR5U3RhdHVzKCkK
ICAgICAgICAgfSAgICAKICAgICAgICAgbV92aXNpYmxlQ29udGVudFN0YXR1c0RpcnR5ID0gZmFs
c2U7IAogICAgIH0KKworICAgIGlmIChtX2hhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudERp
cnR5KSB7CisgICAgICAgIGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBj
aGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICAgICAgY2hpbGQt
PnVwZGF0ZURlc2NlbmRhbnRPckNvbnRlbnRSZWxhdGVkU3RhdHVzKCk7CisgICAgICAgICAgICBp
ZiAoY2hpbGQtPmlzU2VsZlBhaW50aW5nTGF5ZXIoKSB8fCBoYXNTZWxmUGFpbnRpbmdMYXllckRl
c2NlbmRhbnQoKSkgeworICAgICAgICAgICAgICAgIG1faGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNj
ZW5kYW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBtX2hhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudERpcnR5ID0g
ZmFsc2U7CisgICAgfQogfQogCiB2b2lkIFJlbmRlckxheWVyOjpkaXJ0eTNEVHJhbnNmb3JtZWRE
ZXNjZW5kYW50U3RhdHVzKCkKQEAgLTEyNDIsMTAgKzEyNjksMTMgQEAgdm9pZCBSZW5kZXJMYXll
cjo6YWRkQ2hpbGQoUmVuZGVyTGF5ZXIqIGNoaWxkLCBSZW5kZXJMYXllciogYmVmb3JlQ2hpbGQp
CiAgICAgICAgIGNoaWxkLT5kaXJ0eVN0YWNraW5nQ29udGV4dFpPcmRlckxpc3RzKCk7CiAgICAg
fQogCi0gICAgY2hpbGQtPnVwZGF0ZVZpc2liaWxpdHlTdGF0dXMoKTsKKyAgICBjaGlsZC0+dXBk
YXRlRGVzY2VuZGFudE9yQ29udGVudFJlbGF0ZWRTdGF0dXMoKTsKICAgICBpZiAoY2hpbGQtPm1f
aGFzVmlzaWJsZUNvbnRlbnQgfHwgY2hpbGQtPm1faGFzVmlzaWJsZURlc2NlbmRhbnQpCiAgICAg
ICAgIGNoaWxkVmlzaWJpbGl0eUNoYW5nZWQodHJ1ZSk7Ci0gICAgCisKKyAgICBpZiAoY2hpbGQt
PmlzU2VsZlBhaW50aW5nTGF5ZXIoKSB8fCBjaGlsZC0+aGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNj
ZW5kYW50KCkpCisgICAgICAgIG1hcmtBbmNlc3Rvckhhc1NlbGZQYWludGluZ0xheWVyRGVzY2Vu
ZGFudCgpOworCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIGNvbXBvc2l0
b3IoKS0+bGF5ZXJXYXNBZGRlZCh0aGlzLCBjaGlsZCk7CiAjZW5kaWYKQEAgLTEyODIsMTAgKzEz
MTIsMTMgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpyZW1vdmVDaGlsZChSZW5kZXJMYXll
ciogb2xkQ2hpbGQpCiAgICAgb2xkQ2hpbGQtPnNldE5leHRTaWJsaW5nKDApOwogICAgIG9sZENo
aWxkLT5zZXRQYXJlbnQoMCk7CiAgICAgCi0gICAgb2xkQ2hpbGQtPnVwZGF0ZVZpc2liaWxpdHlT
dGF0dXMoKTsKKyAgICBvbGRDaGlsZC0+dXBkYXRlRGVzY2VuZGFudE9yQ29udGVudFJlbGF0ZWRT
dGF0dXMoKTsKICAgICBpZiAob2xkQ2hpbGQtPm1faGFzVmlzaWJsZUNvbnRlbnQgfHwgb2xkQ2hp
bGQtPm1faGFzVmlzaWJsZURlc2NlbmRhbnQpCiAgICAgICAgIGNoaWxkVmlzaWJpbGl0eUNoYW5n
ZWQoZmFsc2UpOwotICAgIAorCisgICAgaWYgKG9sZENoaWxkLT5pc1NlbGZQYWludGluZ0xheWVy
KCkgfHwgb2xkQ2hpbGQtPmhhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudCgpKQorICAgICAg
ICBkaXJ0eUhhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudFN0YXR1cygpOworCiAgICAgcmV0
dXJuIG9sZENoaWxkOwogfQogCkBAIC0yODgyLDcgKzI5MTUsNyBAQCB2b2lkIFJlbmRlckxheWVy
OjpwYWludExheWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIsIEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwKICNlbmRpZgogCiAgICAgLy8gTm9uIHNlbGYtcGFpbnRpbmcgbGVhZiBsYXllcnMgZG9u
J3QgbmVlZCB0byBiZSBwYWludGVkIGFzIHRoZWlyIHJlbmRlcmVyKCkgc2hvdWxkIHByb3Blcmx5
IHBhaW50IGl0c2VsZi4KLSAgICBpZiAoIWlzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJiAhZmlyc3RD
aGlsZCgpKQorICAgIGlmICghaXNTZWxmUGFpbnRpbmdMYXllcigpICYmICFoYXNTZWxmUGFpbnRp
bmdMYXllckRlc2NlbmRhbnQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHNob3VsZFN1
cHByZXNzUGFpbnRpbmdMYXllcih0aGlzKSkKQEAgLTI5NTIsNiArMjk4NSw4IEBAIHZvaWQgUmVu
ZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50c0FuZFJlZmxlY3Rpb24oUmVuZGVyTGF5ZXIqIHJv
b3RMYXllciwgR3JhcGhpCiAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIHBh
aW50aW5nUm9vdCwgUmVuZGVyUmVnaW9uKiByZWdpb24sIE92ZXJsYXBUZXN0UmVxdWVzdE1hcCog
b3ZlcmxhcFRlc3RSZXF1ZXN0cywKICAgICAgICAgICAgICAgICAgICAgICAgIFBhaW50TGF5ZXJG
bGFncyBwYWludEZsYWdzKQogeworICAgIEFTU0VSVChpc1NlbGZQYWludGluZ0xheWVyKCkgfHwg
aGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50KCkpOworCiAgICAgUGFpbnRMYXllckZsYWdz
IGxvY2FsUGFpbnRGbGFncyA9IHBhaW50RmxhZ3MgJiB+KFBhaW50TGF5ZXJBcHBsaWVkVHJhbnNm
b3JtKTsKIAogICAgIC8vIFBhaW50IHRoZSByZWZsZWN0aW9uIGZpcnN0IGlmIHdlIGhhdmUgb25l
LgpAQCAtMjk3MSw2ICszMDA2LDggQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRl
bnRzKFJlbmRlckxheWVyKiByb290TGF5ZXIsIEdyYXBoaWNzQ29udGV4dCogY28KICAgICAgICAg
ICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290LCBSZW5kZXJSZWdpb24q
IHJlZ2lvbiwgT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwKiBvdmVybGFwVGVzdFJlcXVlc3RzLAogICAg
ICAgICAgICAgICAgICAgICAgICAgUGFpbnRMYXllckZsYWdzIHBhaW50RmxhZ3MpCiB7CisgICAg
QVNTRVJUKGlzU2VsZlBhaW50aW5nTGF5ZXIoKSB8fCBoYXNTZWxmUGFpbnRpbmdMYXllckRlc2Nl
bmRhbnQoKSk7CisKICAgICBQYWludExheWVyRmxhZ3MgbG9jYWxQYWludEZsYWdzID0gcGFpbnRG
bGFncyAmIH4oUGFpbnRMYXllckFwcGxpZWRUcmFuc2Zvcm0pOwogICAgIGJvb2wgaGF2ZVRyYW5z
cGFyZW5jeSA9IGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJIYXZlVHJhbnNwYXJlbmN5Owog
ICAgIGJvb2wgaXNTZWxmUGFpbnRpbmdMYXllciA9IHRoaXMtPmlzU2VsZlBhaW50aW5nTGF5ZXIo
KTsKQEAgLTMxNjUsNiArMzIwMiw5IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGlzdChWZWN0
b3I8UmVuZGVyTGF5ZXIqPiogbGlzdCwgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwKICAgICBpZiAo
IWxpc3QpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmICghaGFzU2VsZlBhaW50aW5nTGF5ZXJE
ZXNjZW5kYW50KCkpCisgICAgICAgIHJldHVybjsKKwogI2lmICFBU1NFUlRfRElTQUJMRUQKICAg
ICBMYXllckxpc3RNdXRhdGlvbkRldGVjdG9yIG11dGF0aW9uQ2hlY2tlcih0aGlzKTsKICNlbmRp
ZgpAQCAtNDUzOCw3ICs0NTc4LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTm9ybWFsRmxv
d0xpc3QoKQogCiB2b2lkIFJlbmRlckxheWVyOjpjb2xsZWN0TGF5ZXJzKGJvb2wgaW5jbHVkZUhp
ZGRlbkxheWVycywgVmVjdG9yPFJlbmRlckxheWVyKj4qJiBwb3NCdWZmZXIsIFZlY3RvcjxSZW5k
ZXJMYXllcio+KiYgbmVnQnVmZmVyKQogewotICAgIHVwZGF0ZVZpc2liaWxpdHlTdGF0dXMoKTsK
KyAgICB1cGRhdGVEZXNjZW5kYW50T3JDb250ZW50UmVsYXRlZFN0YXR1cygpOwogCiAgICAgLy8g
T3ZlcmZsb3cgbGF5ZXJzIGFyZSBqdXN0IHBhaW50ZWQgYnkgdGhlaXIgZW5jbG9zaW5nIGxheWVy
cywgc28gdGhleSBkb24ndCBnZXQgcHV0IGluIHpvcmRlciBsaXN0cy4KICAgICBib29sIGluY2x1
ZGVIaWRkZW5MYXllciA9IGluY2x1ZGVIaWRkZW5MYXllcnMgfHwgKG1faGFzVmlzaWJsZUNvbnRl
bnQgfHwgKG1faGFzVmlzaWJsZURlc2NlbmRhbnQgJiYgaXNTdGFja2luZ0NvbnRleHQoKSkpOwpA
QCAtNDY3NCw2ICs0NzE0LDIxIEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnNob3VsZEJlU2VsZlBhaW50
aW5nTGF5ZXIoKSBjb25zdAogICAgICAgICB8fCByZW5kZXJlcigpLT5pc1JlbmRlcklGcmFtZSgp
OwogfQogCit2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTZWxmUGFpbnRpbmdMYXllckFmdGVyU3R5
bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQoreworICAgIGJvb2wgaXNTZWxm
UGFpbnRpbmdMYXllciA9IHNob3VsZEJlU2VsZlBhaW50aW5nTGF5ZXIoKTsKKyAgICBpZiAobV9p
c1NlbGZQYWludGluZ0xheWVyID09IGlzU2VsZlBhaW50aW5nTGF5ZXIpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1faXNTZWxmUGFpbnRpbmdMYXllciA9IGlzU2VsZlBhaW50aW5nTGF5ZXI7Cisg
ICAgaWYgKCFwYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChpc1NlbGZQYWludGlu
Z0xheWVyKQorICAgICAgICBwYXJlbnQoKS0+bWFya0FuY2VzdG9ySGFzU2VsZlBhaW50aW5nTGF5
ZXJEZXNjZW5kYW50KCk7CisgICAgZWxzZQorICAgICAgICBwYXJlbnQoKS0+ZGlydHlIYXNTZWxm
UGFpbnRpbmdMYXllckRlc2NlbmRhbnRTdGF0dXMoKTsKK30KKwogdm9pZCBSZW5kZXJMYXllcjo6
dXBkYXRlU3RhY2tpbmdDb250ZXh0c0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUq
IG9sZFN0eWxlKQogewogICAgIGlmICghb2xkU3R5bGUpCkBAIC00NzQ0LDggKzQ3OTksNiBAQCB2
b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5k
ZXJTdHlsZSogb2xkU3R5bGUpCiAgICAgICAgIGRpcnR5U3RhY2tpbmdDb250ZXh0Wk9yZGVyTGlz
dHMoKTsKICAgICB9CiAKLSAgICBtX2lzU2VsZlBhaW50aW5nTGF5ZXIgPSBzaG91bGRCZVNlbGZQ
YWludGluZ0xheWVyKCk7Ci0KICAgICBpZiAocmVuZGVyZXIoKS0+c3R5bGUoKS0+b3ZlcmZsb3dY
KCkgPT0gT01BUlFVRUUgJiYgcmVuZGVyZXIoKS0+c3R5bGUoKS0+bWFycXVlZUJlaGF2aW9yKCkg
IT0gTU5PTkUgJiYgcmVuZGVyZXIoKS0+aXNCb3goKSkgewogICAgICAgICBpZiAoIW1fbWFycXVl
ZSkKICAgICAgICAgICAgIG1fbWFycXVlZSA9IG5ldyBSZW5kZXJNYXJxdWVlKHRoaXMpOwpAQCAt
NDc1Niw2ICs0ODA5LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlm
ZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQogICAgICAgICBtX21hcnF1ZWUg
PSAwOwogICAgIH0KIAorICAgIHVwZGF0ZVNlbGZQYWludGluZ0xheWVyQWZ0ZXJTdHlsZUNoYW5n
ZShvbGRTdHlsZSk7CiAgICAgdXBkYXRlU3RhY2tpbmdDb250ZXh0c0FmdGVyU3R5bGVDaGFuZ2Uo
b2xkU3R5bGUpOwogICAgIHVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKG9sZFN0eWxl
KTsKIApAQCAtNDc4MSw3ICs0ODM1LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2Vk
KFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQogI2VuZGlmCiAK
ICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgdXBkYXRlVmlzaWJpbGl0eVN0
YXR1cygpOworICAgIHVwZGF0ZURlc2NlbmRhbnRPckNvbnRlbnRSZWxhdGVkU3RhdHVzKCk7CiAg
ICAgdXBkYXRlVHJhbnNmb3JtKCk7CiAKICAgICBpZiAoY29tcG9zaXRvcigpLT51cGRhdGVMYXll
ckNvbXBvc2l0aW5nU3RhdGUodGhpcykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5oCmluZGV4IDA4NzkxYjljNDU1YTZkMjdlY2IwMmIwMzlhMWQ0ZWNjNjk5NDllMTYuLmRkZmQ1
MWQyYzI3YmQ2ZDRiMmEwZjVhMzNmMThmMjU1NWM1ZGFiNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5oCkBAIC02NTEsNiArNjUxLDEwIEBAIHByaXZhdGU6CiAgICAgYm9v
bCBpc1N0YWNraW5nQ29udGV4dChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0IHsgcmV0
dXJuICFzdHlsZS0+aGFzQXV0b1pJbmRleCgpIHx8IGlzUm9vdExheWVyKCk7IH0KICAgICBib29s
IGlzRGlydHlTdGFja2luZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3pPcmRlckxpc3RzRGly
dHkgJiYgaXNTdGFja2luZ0NvbnRleHQoKTsgfQogCisgICAgYm9vbCBoYXNTZWxmUGFpbnRpbmdM
YXllckRlc2NlbmRhbnQoKSBjb25zdCB7IEFTU0VSVCghbV9oYXNTZWxmUGFpbnRpbmdMYXllckRl
c2NlbmRhbnREaXJ0eSk7IHJldHVybiBtX2hhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudDsg
fQorICAgIHZvaWQgbWFya0FuY2VzdG9ySGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50KCk7
CisgICAgdm9pZCBkaXJ0eUhhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudFN0YXR1cygpOwor
CiAgICAgdm9pZCBjb21wdXRlUmVwYWludFJlY3RzKExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9v
dCA9IDApOwogICAgIHZvaWQgY2xlYXJSZXBhaW50UmVjdHMoKTsKIApAQCAtNjYwLDYgKzY2NCw3
IEBAIHByaXZhdGU6CiAKICAgICBib29sIHNob3VsZFJlcGFpbnRBZnRlckxheW91dCgpIGNvbnN0
OwogCisgICAgdm9pZCB1cGRhdGVTZWxmUGFpbnRpbmdMYXllckFmdGVyU3R5bGVDaGFuZ2UoY29u
c3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKICAgICB2b2lkIHVwZGF0ZVN0YWNraW5nQ29udGV4
dHNBZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CiAKICAgICB2
b2lkIHVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRlclN0eWxlKiBv
bGRTdHlsZSk7CkBAIC03NzYsNyArNzgxLDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY2hpbGRW
aXNpYmlsaXR5Q2hhbmdlZChib29sIG5ld1Zpc2liaWxpdHkpOwogICAgIHZvaWQgZGlydHlWaXNp
YmxlRGVzY2VuZGFudFN0YXR1cygpOwotICAgIHZvaWQgdXBkYXRlVmlzaWJpbGl0eVN0YXR1cygp
OworCisgICAgdm9pZCB1cGRhdGVEZXNjZW5kYW50T3JDb250ZW50UmVsYXRlZFN0YXR1cygpOwog
CiAgICAgLy8gVGhpcyBmbGFnIGlzIGNvbXB1dGVkIGJ5IFJlbmRlckxheWVyQ29tcG9zaXRvciwg
d2hpY2gga25vd3MgbW9yZSBhYm91dCAzZCBoaWVyYXJjaGllcyB0aGFuIHdlIGRvLgogICAgIHZv
aWQgc2V0SGFzM0RUcmFuc2Zvcm1lZERlc2NlbmRhbnQoYm9vbCBiKSB7IG1faGFzM0RUcmFuc2Zv
cm1lZERlc2NlbmRhbnQgPSBiOyB9CkBAIC04NzIsNiArODc4LDExIEBAIHByb3RlY3RlZDoKIAog
ICAgIGJvb2wgbV9pc1NlbGZQYWludGluZ0xheWVyIDogMTsKIAorICAgIC8vIElmIGhhdmUgbm8g
c2VsZi1wYWludGluZyBkZXNjZW5kYW50cywgd2UgZG9uJ3QgaGF2ZSB0byB3YWxrIG91ciBjaGls
ZHJlbiBkdXJpbmcgcGFpbnRpbmcuIFRoaXMgY2FuIGxlYWQgdG8KKyAgICAvLyBzaWduaWZpY2Fu
dCBzYXZpbmdzLCBlc3BlY2lhbGx5IGlmIHRoZSB0cmVlIGhhcyBsb3RzIG9mIG5vbi1zZWxmLXBh
aW50aW5nIGxheWVycyBncm91cGVkIHRvZ2V0aGVyIChlLmcuIHRhYmxlIGNlbGxzKS4KKyAgICBi
b29sIG1faGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50IDogMTsKKyAgICBib29sIG1faGFz
U2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50RGlydHkgOiAxOworCiAgICAgY29uc3QgYm9vbCBt
X2lzUm9vdExheWVyIDogMTsKIAogICAgIGJvb2wgbV91c2VkVHJhbnNwYXJlbmN5IDogMTsgLy8g
VHJhY2tzIHdoZXRoZXIgd2UgbmVlZCB0byBjbG9zZSBhIHRyYW5zcGFyZW50IGxheWVyLCBpLmUu
LCB3aGV0aGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tp
bmcuY3BwCmluZGV4IGFkY2U0YzdlZWI4ODA5NTQ3NjU0MGIwZDczOGExNzRjZDUzMWFiZGYuLjAx
YTZlODdlOGYwYTVmZGMwZGY3MGM3NTNlOGI4N2U3MzZiNDgyZGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCkBAIC00MjMsNyArNDIzLDcg
QEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJHZW9tZXRyeSgp
CiAgICAgdXBkYXRlTGF5ZXJGaWx0ZXJzKHJlbmRlcmVyKCktPnN0eWxlKCkpOwogI2VuZGlmCiAg
ICAgCi0gICAgbV9vd25pbmdMYXllci0+dXBkYXRlVmlzaWJpbGl0eVN0YXR1cygpOworICAgIG1f
b3duaW5nTGF5ZXItPnVwZGF0ZURlc2NlbmRhbnRPckNvbnRlbnRSZWxhdGVkU3RhdHVzKCk7CiAK
ICAgICAvLyBtX2dyYXBoaWNzTGF5ZXIgaXMgdGhlIGNvcnJlc3BvbmRpbmcgR3JhcGhpY3NMYXll
ciBmb3IgdGhpcyBSZW5kZXJMYXllciBhbmQgaXRzIG5vbi1jb21wb3NpdGluZwogICAgIC8vIGRl
c2NlbmRhbnRzLiBTbywgdGhlIHZpc2liaWxpdHkgZmxhZyBmb3IgbV9ncmFwaGljc0xheWVyIHNo
b3VsZCBiZSB0cnVlIGlmIHRoZXJlIGFyZSBhbnkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147175</attachid>
            <date>2012-06-12 15:06:47 -0700</date>
            <delta_ts>2012-06-13 08:40:03 -0700</delta_ts>
            <desc>Change v3: Same as previously but should compile on Mac.</desc>
            <filename>bug-88888-20120612150647.patch</filename>
            <type>text/plain</type>
            <size>14940</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwMTI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGQ1MzQ3MDU4MGU5ODMw
ZDAzMGNkYjE1OTEzODI0NjFkNDhiYjIzNS4uYTYzOTVkMzBjNjhkYzU2N2IzNWM3ZjM0MTRjMGE1
NDFlNzk0Mjk0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEyLTA2LTEyICBKdWxp
ZW4gQ2hhZmZyYWl4ICA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbmRlckxh
eWVyIHN1YnRyZWVzIHdpdGhvdXQgYW55IHNlbGYtcGFpbnRpbmcgbGF5ZXIgc2hvdWxkbid0IGJl
IHdhbGtlZCBkdXJpbmcgcGFpbnRpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTg4ODg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBjb3ZlcmVkIGJ5IGV4aXN0
aW5nIHRlc3RzLgorCisgICAgICAgIFRoZSBnaXN0IG9mIHRoaXMgY2hhbmdlIGlzIHRvIGFkZCBh
IGhhcy1zZWxmLXBhaW50aW5nLWxheWVyLWRlc2NlbmRhbnQgZmxhZyAoaW5jbHVkaW5nIGFuCisg
ICAgICAgIGludmFsaWRhdGlvbiBsb2dpYykgdGhhdCBpcyB1c2VkIHRvIGF2b2lkIHdhbGtpbmcg
c3VidHJlZXMgd2l0aG91dCBhbnkgc2VsZi1wYWludGluZyBsYXllci4KKworICAgICAgICBPbiBo
dHRwOi8vZGdsYXprb3YuZ2l0aHViLmNvbS9wZXJmb3JtYW5jZS10ZXN0cy9iaWdncmlkLmh0bWwg
d2l0aCBhIDEwMCwwMDAgcm93cworICAgICAgICBieSAxMDAgY29sdW1ucyB0YWJsZSwgaXQgYnJp
bmdzIHRoZSBwYWludCB0aW1lIGR1cmluZyBzY3JvbGxpbmcgZnJvbSB+NDVtcyB0byB+Nm1zCisg
ICAgICAgIG9uIG15IG1hY2hpbmUuIFRoZSB0ZXN0IGNhc2UgaXMgYSBwYXRob2xvZ2ljIGV4YW1w
bGUgaGVyZSBidXQgdGhlIG9wdGltaXphdGlvbiBzaG91bGQKKyAgICAgICAgYXBwbHkgaW4gb3Ro
ZXIgY2FzZXMuCisKKyAgICAgICAgVGhlIG5ldyB1cGRhdGUgbG9naWMgcGlnZ3ktYmFja3Mgb24g
dG9wIG9mIHRoZSBleGlzdGluZyB1cGRhdGVWaXNpYmlsaXR5U3RhdHVzKCkgb25lIHRoYXQKKyAg
ICAgICAgZ290IHJlcHVycG9zZWQgYW5kIHJlbmFtZWQgYXMgcGFydCBvZiB0aGlzIGNoYW5nZS4K
KworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpyZW1vdmVDaGls
ZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKToKKyAgICAg
ICAgVGhlc2UgZnVuY3Rpb25zIHdlcmUgdXBkYXRlZCB0byBkaXJ0eSAvIHNldCB0aGUgbmV3IGZs
YWcuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkaXJ0eUhhc1NlbGZQYWludGlu
Z0xheWVyRGVzY2VuZGFudFN0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
bWFya0FuY2VzdG9ySGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50KToKKyAgICAgICAgQWRk
ZWQgdGhvc2UgZnVuY3Rpb25zIHRvIGhhbmRsZSBzZXR0aW5nIC8gaW52YWxpZGF0aW5nIHRoZSBu
ZXcgZmxhZy4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZVNlbGZQYWlu
dGluZ0xheWVyQWZ0ZXJTdHlsZUNoYW5nZSk6CisgICAgICAgIEFkZGVkIHRoaXMgZnVuY3Rpb24g
dG8gaGFuZGxlIHN0eWxlIHVwZGF0ZS4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OnBhaW50TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJD
b250ZW50c0FuZFJlZmxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBh
aW50TGF5ZXJDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRM
aXN0KToKKyAgICAgICAgQ2hhbmdlZCB0aGlzIGxvZ2ljIHRvIGJhaWwgb3V0IGlmIHdlIGhhdmUg
bm8gc2VsZi1wYWludGluZyBkZXNjZW5kYW50cy4gVGhpcyBpcyB3aGF0CisgICAgICAgIGlzIGdp
dmluZyB0aGUgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQuIEFsc28gYWRkZWQgc29tZSBwZXJmb3Jt
YW5jZSBBU1NFUlRzIHRvIGVuc3VyZQorICAgICAgICB0aGUgbWV0aG9kcyBhcmUgbm90IGNhbGxl
ZCB3aGVuIHRoZXkgc2hvdWxkbid0LgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
dXBkYXRlRGVzY2VuZGFudE9yQ29udGVudFJlbGF0ZWRTdGF0dXMpOgorICAgICAgICBSZW5hbWVk
IGZyb20gdXBkYXRlVmlzaWJpbGl0eVN0YXR1cyB0byBhY2NvdW50IGZvciB0aGUgbmV3IHVzYWdl
LgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0
ZXJTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNvbGxlY3RMYXllcnMp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0xheWVyR2VvbWV0cnkp
OgorICAgICAgICBVcGRhdGVkIGFmdGVyIHVwZGF0ZVZpc2liaWxpdHlTdGF0dXMgcmVuYW1lLgor
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6aGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50KToKKyAgICAgICAgQWRk
ZWQgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSBuZXcgZnVuY3Rpb25zIGFzIHdlbGwgYXMgdGhlIG5l
dyBmbGFnIGFuZCBkaXJ0eSBiaXQuCisKIDIwMTItMDYtMTIgIERhbmEgSmFuc2VucyAgPGRhbmFr
akBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBSZXR1cm4gZW1wdHkgdmlzaWJs
ZUxheWVyUmVjdCBmb3IgbGF5ZXJzIHdpdGggZW1wdHkgY29udGVudCBib3VuZHMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IDI3YzdkNWNmNTVkOWU3MGY1ZWM2
N2JlNzIyMDhmYTU1YTg1NmZiN2UuLjc3NWVjYTYzZGEzNjMyOTRhMWQyMDZmODQzMmMyZTRiM2Yw
MTE2ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMTI5
LDYgKzEyOSw4IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJCb3hNb2RlbE9iamVj
dCogcmVuZGVyZXIpCiAgICAgOiBtX2luUmVzaXplTW9kZShmYWxzZSkKICAgICAsIG1fc2Nyb2xs
RGltZW5zaW9uc0RpcnR5KHRydWUpCiAgICAgLCBtX25vcm1hbEZsb3dMaXN0RGlydHkodHJ1ZSkK
KyAgICAsIG1faGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50KGZhbHNlKQorICAgICwgbV9o
YXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnREaXJ0eShmYWxzZSkKICAgICAsIG1faXNSb290
TGF5ZXIocmVuZGVyZXItPmlzUmVuZGVyVmlldygpKQogICAgICwgbV91c2VkVHJhbnNwYXJlbmN5
KGZhbHNlKQogICAgICwgbV9wYWludGluZ0luc2lkZVJlZmxlY3Rpb24oZmFsc2UpCkBAIC0zNjMs
NyArMzY1LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMoTGF5b3V0
UG9pbnQqIG9mZnNldEZyb21Sb290LCBVcGRhdGVMYXllclAKICAgICB9CiAgICAgcG9zaXRpb25P
dmVyZmxvd0NvbnRyb2xzKHRvU2l6ZShyb3VuZGVkSW50UG9pbnQob2Zmc2V0KSkpOwogCi0gICAg
dXBkYXRlVmlzaWJpbGl0eVN0YXR1cygpOworICAgIHVwZGF0ZURlc2NlbmRhbnRPckNvbnRlbnRS
ZWxhdGVkU3RhdHVzKCk7CiAKICAgICBpZiAoZmxhZ3MgJiBVcGRhdGVQYWdpbmF0aW9uKQogICAg
ICAgICB1cGRhdGVQYWdpbmF0aW9uKCk7CkBAIC00NDIsNiArNDQ0LDIwIEBAIExheW91dFJlY3Qg
UmVuZGVyTGF5ZXI6OnJlcGFpbnRSZWN0SW5jbHVkaW5nTm9uQ29tcG9zaXRpbmdEZXNjZW5kYW50
cygpIGNvbnN0CiAgICAgcmV0dXJuIHJlcGFpbnRSZWN0OwogfQogCit2b2lkIFJlbmRlckxheWVy
OjpkaXJ0eUhhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudFN0YXR1cygpCit7CisgICAgZm9y
IChSZW5kZXJMYXllciogbGF5ZXIgPSB0aGlzOyBsYXllciAmJiAobGF5ZXItPm1faGFzU2VsZlBh
aW50aW5nTGF5ZXJEZXNjZW5kYW50RGlydHkgfHwgIWxheWVyLT5oYXNTZWxmUGFpbnRpbmdMYXll
ckRlc2NlbmRhbnQoKSk7IGxheWVyID0gbGF5ZXItPnBhcmVudCgpKQorICAgICAgICBsYXllci0+
bV9oYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnREaXJ0eSA9IHRydWU7Cit9CisKK3ZvaWQg
UmVuZGVyTGF5ZXI6Om1hcmtBbmNlc3Rvckhhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudCgp
Cit7CisgICAgZm9yIChSZW5kZXJMYXllciogbGF5ZXIgPSB0aGlzOyBsYXllciAmJiAobGF5ZXIt
Pm1faGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50RGlydHkgfHwgIWxheWVyLT5oYXNTZWxm
UGFpbnRpbmdMYXllckRlc2NlbmRhbnQoKSk7IGxheWVyID0gbGF5ZXItPnBhcmVudCgpKSB7Cisg
ICAgICAgIGxheWVyLT5tX2hhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudERpcnR5ID0gZmFs
c2U7CisgICAgICAgIGxheWVyLT5tX2hhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudCA9IHRy
dWU7CisgICAgfQorfQorCiB2b2lkIFJlbmRlckxheWVyOjpjb21wdXRlUmVwYWludFJlY3RzKExh
eW91dFBvaW50KiBvZmZzZXRGcm9tUm9vdCkKIHsKICAgICBBU1NFUlQoIW1fdmlzaWJsZUNvbnRl
bnRTdGF0dXNEaXJ0eSk7CkBAIC00NjQsNyArNDgwLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBk
YXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Ny
b2wKIHsKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGRuJ3QgYmUgbmVlZGVkLCBidXQgdGhlcmUg
YXJlIHNvbWUgY29ybmVyIGNhc2VzIHdoZXJlCiAgICAgLy8gdGhlc2UgZmxhZ3MgYXJlIHN0aWxs
IGRpcnR5LiBVcGRhdGUgc28gdGhhdCB0aGUgY2hlY2sgYmVsb3cgaXMgdmFsaWQuCi0gICAgdXBk
YXRlVmlzaWJpbGl0eVN0YXR1cygpOworICAgIHVwZGF0ZURlc2NlbmRhbnRPckNvbnRlbnRSZWxh
dGVkU3RhdHVzKCk7CiAKICAgICAvLyBJZiB3ZSBoYXZlIG5vIHZpc2libGUgY29udGVudCBhbmQg
bm8gdmlzaWJsZSBkZXNjZW5kYW50cywgdGhlcmUgaXMgbm8gcG9pbnQgcmVjb21wdXRpbmcKICAg
ICAvLyBvdXIgcmVjdGFuZ2xlcyBhcyB0aGV5IHdpbGwgYmUgZW1wdHkuIElmIG91ciB2aXNpYmls
aXR5IGNoYW5nZXMsIHdlIGFyZSBleHBlY3RlZCB0bwpAQCAtNjU2LDEyICs2NzIsMTIgQEAgdm9p
ZCBSZW5kZXJMYXllcjo6ZGlydHlWaXNpYmxlRGVzY2VuZGFudFN0YXR1cygpCiAgICAgfQogfQog
Ci12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVWaXNpYmlsaXR5U3RhdHVzKCkKK3ZvaWQgUmVuZGVy
TGF5ZXI6OnVwZGF0ZURlc2NlbmRhbnRPckNvbnRlbnRSZWxhdGVkU3RhdHVzKCkKIHsKICAgICBp
ZiAobV92aXNpYmxlRGVzY2VuZGFudFN0YXR1c0RpcnR5KSB7CiAgICAgICAgIG1faGFzVmlzaWJs
ZURlc2NlbmRhbnQgPSBmYWxzZTsKICAgICAgICAgZm9yIChSZW5kZXJMYXllciogY2hpbGQgPSBm
aXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7Ci0gICAg
ICAgICAgICBjaGlsZC0+dXBkYXRlVmlzaWJpbGl0eVN0YXR1cygpOyAgICAgICAgCisgICAgICAg
ICAgICBjaGlsZC0+dXBkYXRlRGVzY2VuZGFudE9yQ29udGVudFJlbGF0ZWRTdGF0dXMoKTsKICAg
ICAgICAgICAgIGlmIChjaGlsZC0+bV9oYXNWaXNpYmxlQ29udGVudCB8fCBjaGlsZC0+bV9oYXNW
aXNpYmxlRGVzY2VuZGFudCkgewogICAgICAgICAgICAgICAgIG1faGFzVmlzaWJsZURlc2NlbmRh
bnQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjk5LDYgKzcxNSwxNyBAQCB2
b2lkIFJlbmRlckxheWVyOjp1cGRhdGVWaXNpYmlsaXR5U3RhdHVzKCkKICAgICAgICAgfSAgICAK
ICAgICAgICAgbV92aXNpYmxlQ29udGVudFN0YXR1c0RpcnR5ID0gZmFsc2U7IAogICAgIH0KKwor
ICAgIGlmIChtX2hhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudERpcnR5KSB7CisgICAgICAg
IGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBj
aGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICAgICAgY2hpbGQtPnVwZGF0ZURlc2NlbmRh
bnRPckNvbnRlbnRSZWxhdGVkU3RhdHVzKCk7CisgICAgICAgICAgICBpZiAoY2hpbGQtPmlzU2Vs
ZlBhaW50aW5nTGF5ZXIoKSB8fCBoYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnQoKSkgewor
ICAgICAgICAgICAgICAgIG1faGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50ID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBtX2hhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudERpcnR5ID0gZmFsc2U7CisgICAgfQog
fQogCiB2b2lkIFJlbmRlckxheWVyOjpkaXJ0eTNEVHJhbnNmb3JtZWREZXNjZW5kYW50U3RhdHVz
KCkKQEAgLTEyNDIsMTAgKzEyNjksMTMgQEAgdm9pZCBSZW5kZXJMYXllcjo6YWRkQ2hpbGQoUmVu
ZGVyTGF5ZXIqIGNoaWxkLCBSZW5kZXJMYXllciogYmVmb3JlQ2hpbGQpCiAgICAgICAgIGNoaWxk
LT5kaXJ0eVN0YWNraW5nQ29udGV4dFpPcmRlckxpc3RzKCk7CiAgICAgfQogCi0gICAgY2hpbGQt
PnVwZGF0ZVZpc2liaWxpdHlTdGF0dXMoKTsKKyAgICBjaGlsZC0+dXBkYXRlRGVzY2VuZGFudE9y
Q29udGVudFJlbGF0ZWRTdGF0dXMoKTsKICAgICBpZiAoY2hpbGQtPm1faGFzVmlzaWJsZUNvbnRl
bnQgfHwgY2hpbGQtPm1faGFzVmlzaWJsZURlc2NlbmRhbnQpCiAgICAgICAgIGNoaWxkVmlzaWJp
bGl0eUNoYW5nZWQodHJ1ZSk7Ci0gICAgCisKKyAgICBpZiAoY2hpbGQtPmlzU2VsZlBhaW50aW5n
TGF5ZXIoKSB8fCBjaGlsZC0+aGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50KCkpCisgICAg
ICAgIG1hcmtBbmNlc3Rvckhhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudCgpOworCiAjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIGNvbXBvc2l0b3IoKS0+bGF5ZXJXYXNB
ZGRlZCh0aGlzLCBjaGlsZCk7CiAjZW5kaWYKQEAgLTEyODIsMTAgKzEzMTIsMTMgQEAgUmVuZGVy
TGF5ZXIqIFJlbmRlckxheWVyOjpyZW1vdmVDaGlsZChSZW5kZXJMYXllciogb2xkQ2hpbGQpCiAg
ICAgb2xkQ2hpbGQtPnNldE5leHRTaWJsaW5nKDApOwogICAgIG9sZENoaWxkLT5zZXRQYXJlbnQo
MCk7CiAgICAgCi0gICAgb2xkQ2hpbGQtPnVwZGF0ZVZpc2liaWxpdHlTdGF0dXMoKTsKKyAgICBv
bGRDaGlsZC0+dXBkYXRlRGVzY2VuZGFudE9yQ29udGVudFJlbGF0ZWRTdGF0dXMoKTsKICAgICBp
ZiAob2xkQ2hpbGQtPm1faGFzVmlzaWJsZUNvbnRlbnQgfHwgb2xkQ2hpbGQtPm1faGFzVmlzaWJs
ZURlc2NlbmRhbnQpCiAgICAgICAgIGNoaWxkVmlzaWJpbGl0eUNoYW5nZWQoZmFsc2UpOwotICAg
IAorCisgICAgaWYgKG9sZENoaWxkLT5pc1NlbGZQYWludGluZ0xheWVyKCkgfHwgb2xkQ2hpbGQt
Pmhhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudCgpKQorICAgICAgICBkaXJ0eUhhc1NlbGZQ
YWludGluZ0xheWVyRGVzY2VuZGFudFN0YXR1cygpOworCiAgICAgcmV0dXJuIG9sZENoaWxkOwog
fQogCkBAIC0yODgyLDcgKzI5MTUsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyKFJl
bmRlckxheWVyKiByb290TGF5ZXIsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwKICNlbmRpZgog
CiAgICAgLy8gTm9uIHNlbGYtcGFpbnRpbmcgbGVhZiBsYXllcnMgZG9uJ3QgbmVlZCB0byBiZSBw
YWludGVkIGFzIHRoZWlyIHJlbmRlcmVyKCkgc2hvdWxkIHByb3Blcmx5IHBhaW50IGl0c2VsZi4K
LSAgICBpZiAoIWlzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJiAhZmlyc3RDaGlsZCgpKQorICAgIGlm
ICghaXNTZWxmUGFpbnRpbmdMYXllcigpICYmICFoYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRh
bnQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHNob3VsZFN1cHByZXNzUGFpbnRpbmdM
YXllcih0aGlzKSkKQEAgLTI5NTIsNiArMjk4NSw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50
TGF5ZXJDb250ZW50c0FuZFJlZmxlY3Rpb24oUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgR3JhcGhp
CiAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdCwgUmVu
ZGVyUmVnaW9uKiByZWdpb24sIE92ZXJsYXBUZXN0UmVxdWVzdE1hcCogb3ZlcmxhcFRlc3RSZXF1
ZXN0cywKICAgICAgICAgICAgICAgICAgICAgICAgIFBhaW50TGF5ZXJGbGFncyBwYWludEZsYWdz
KQogeworICAgIEFTU0VSVChpc1NlbGZQYWludGluZ0xheWVyKCkgfHwgaGFzU2VsZlBhaW50aW5n
TGF5ZXJEZXNjZW5kYW50KCkpOworCiAgICAgUGFpbnRMYXllckZsYWdzIGxvY2FsUGFpbnRGbGFn
cyA9IHBhaW50RmxhZ3MgJiB+KFBhaW50TGF5ZXJBcHBsaWVkVHJhbnNmb3JtKTsKIAogICAgIC8v
IFBhaW50IHRoZSByZWZsZWN0aW9uIGZpcnN0IGlmIHdlIGhhdmUgb25lLgpAQCAtMjk3MSw2ICsz
MDA2LDggQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKFJlbmRlckxheWVy
KiByb290TGF5ZXIsIEdyYXBoaWNzQ29udGV4dCogY28KICAgICAgICAgICAgICAgICAgICAgICAg
IFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290LCBSZW5kZXJSZWdpb24qIHJlZ2lvbiwgT3Zlcmxh
cFRlc3RSZXF1ZXN0TWFwKiBvdmVybGFwVGVzdFJlcXVlc3RzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgUGFpbnRMYXllckZsYWdzIHBhaW50RmxhZ3MpCiB7CisgICAgQVNTRVJUKGlzU2VsZlBh
aW50aW5nTGF5ZXIoKSB8fCBoYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnQoKSk7CisKICAg
ICBQYWludExheWVyRmxhZ3MgbG9jYWxQYWludEZsYWdzID0gcGFpbnRGbGFncyAmIH4oUGFpbnRM
YXllckFwcGxpZWRUcmFuc2Zvcm0pOwogICAgIGJvb2wgaGF2ZVRyYW5zcGFyZW5jeSA9IGxvY2Fs
UGFpbnRGbGFncyAmIFBhaW50TGF5ZXJIYXZlVHJhbnNwYXJlbmN5OwogICAgIGJvb2wgaXNTZWxm
UGFpbnRpbmdMYXllciA9IHRoaXMtPmlzU2VsZlBhaW50aW5nTGF5ZXIoKTsKQEAgLTMxNjUsNiAr
MzIwMiw5IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGlzdChWZWN0b3I8UmVuZGVyTGF5ZXIq
PiogbGlzdCwgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwKICAgICBpZiAoIWxpc3QpCiAgICAgICAg
IHJldHVybjsKIAorICAgIGlmICghaGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICBMYXllckxpc3RNdXRh
dGlvbkRldGVjdG9yIG11dGF0aW9uQ2hlY2tlcih0aGlzKTsKICNlbmRpZgpAQCAtNDUzOCw3ICs0
NTc4LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTm9ybWFsRmxvd0xpc3QoKQogCiB2b2lk
IFJlbmRlckxheWVyOjpjb2xsZWN0TGF5ZXJzKGJvb2wgaW5jbHVkZUhpZGRlbkxheWVycywgVmVj
dG9yPFJlbmRlckxheWVyKj4qJiBwb3NCdWZmZXIsIFZlY3RvcjxSZW5kZXJMYXllcio+KiYgbmVn
QnVmZmVyKQogewotICAgIHVwZGF0ZVZpc2liaWxpdHlTdGF0dXMoKTsKKyAgICB1cGRhdGVEZXNj
ZW5kYW50T3JDb250ZW50UmVsYXRlZFN0YXR1cygpOwogCiAgICAgLy8gT3ZlcmZsb3cgbGF5ZXJz
IGFyZSBqdXN0IHBhaW50ZWQgYnkgdGhlaXIgZW5jbG9zaW5nIGxheWVycywgc28gdGhleSBkb24n
dCBnZXQgcHV0IGluIHpvcmRlciBsaXN0cy4KICAgICBib29sIGluY2x1ZGVIaWRkZW5MYXllciA9
IGluY2x1ZGVIaWRkZW5MYXllcnMgfHwgKG1faGFzVmlzaWJsZUNvbnRlbnQgfHwgKG1faGFzVmlz
aWJsZURlc2NlbmRhbnQgJiYgaXNTdGFja2luZ0NvbnRleHQoKSkpOwpAQCAtNDY3NCw2ICs0NzE0
LDIxIEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnNob3VsZEJlU2VsZlBhaW50aW5nTGF5ZXIoKSBjb25z
dAogICAgICAgICB8fCByZW5kZXJlcigpLT5pc1JlbmRlcklGcmFtZSgpOwogfQogCit2b2lkIFJl
bmRlckxheWVyOjp1cGRhdGVTZWxmUGFpbnRpbmdMYXllckFmdGVyU3R5bGVDaGFuZ2UoY29uc3Qg
UmVuZGVyU3R5bGUqKQoreworICAgIGJvb2wgaXNTZWxmUGFpbnRpbmdMYXllciA9IHNob3VsZEJl
U2VsZlBhaW50aW5nTGF5ZXIoKTsKKyAgICBpZiAobV9pc1NlbGZQYWludGluZ0xheWVyID09IGlz
U2VsZlBhaW50aW5nTGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1faXNTZWxmUGFpbnRp
bmdMYXllciA9IGlzU2VsZlBhaW50aW5nTGF5ZXI7CisgICAgaWYgKCFwYXJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGlmIChpc1NlbGZQYWludGluZ0xheWVyKQorICAgICAgICBwYXJlbnQo
KS0+bWFya0FuY2VzdG9ySGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50KCk7CisgICAgZWxz
ZQorICAgICAgICBwYXJlbnQoKS0+ZGlydHlIYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnRT
dGF0dXMoKTsKK30KKwogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU3RhY2tpbmdDb250ZXh0c0Fm
dGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQogewogICAgIGlmICgh
b2xkU3R5bGUpCkBAIC00NzQ0LDggKzQ3OTksNiBAQCB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNo
YW5nZWQoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCiAgICAg
ICAgIGRpcnR5U3RhY2tpbmdDb250ZXh0Wk9yZGVyTGlzdHMoKTsKICAgICB9CiAKLSAgICBtX2lz
U2VsZlBhaW50aW5nTGF5ZXIgPSBzaG91bGRCZVNlbGZQYWludGluZ0xheWVyKCk7Ci0KICAgICBp
ZiAocmVuZGVyZXIoKS0+c3R5bGUoKS0+b3ZlcmZsb3dYKCkgPT0gT01BUlFVRUUgJiYgcmVuZGVy
ZXIoKS0+c3R5bGUoKS0+bWFycXVlZUJlaGF2aW9yKCkgIT0gTU5PTkUgJiYgcmVuZGVyZXIoKS0+
aXNCb3goKSkgewogICAgICAgICBpZiAoIW1fbWFycXVlZSkKICAgICAgICAgICAgIG1fbWFycXVl
ZSA9IG5ldyBSZW5kZXJNYXJxdWVlKHRoaXMpOwpAQCAtNDc1Niw2ICs0ODA5LDcgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5
bGUqIG9sZFN0eWxlKQogICAgICAgICBtX21hcnF1ZWUgPSAwOwogICAgIH0KIAorICAgIHVwZGF0
ZVNlbGZQYWludGluZ0xheWVyQWZ0ZXJTdHlsZUNoYW5nZShvbGRTdHlsZSk7CiAgICAgdXBkYXRl
U3RhY2tpbmdDb250ZXh0c0FmdGVyU3R5bGVDaGFuZ2Uob2xkU3R5bGUpOwogICAgIHVwZGF0ZVNj
cm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKG9sZFN0eWxlKTsKIApAQCAtNDc4MSw3ICs0ODM1LDcg
QEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSwgY29uc3Qg
UmVuZGVyU3R5bGUqIG9sZFN0eWxlKQogI2VuZGlmCiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCi0gICAgdXBkYXRlVmlzaWJpbGl0eVN0YXR1cygpOworICAgIHVwZGF0ZURlc2Nl
bmRhbnRPckNvbnRlbnRSZWxhdGVkU3RhdHVzKCk7CiAgICAgdXBkYXRlVHJhbnNmb3JtKCk7CiAK
ICAgICBpZiAoY29tcG9zaXRvcigpLT51cGRhdGVMYXllckNvbXBvc2l0aW5nU3RhdGUodGhpcykp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCmluZGV4IDA4NzkxYjljNDU1YTZk
MjdlY2IwMmIwMzlhMWQ0ZWNjNjk5NDllMTYuLmRkZmQ1MWQyYzI3YmQ2ZDRiMmEwZjVhMzNmMThm
MjU1NWM1ZGFiNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCkBAIC02
NTEsNiArNjUxLDEwIEBAIHByaXZhdGU6CiAgICAgYm9vbCBpc1N0YWNraW5nQ29udGV4dChjb25z
dCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0IHsgcmV0dXJuICFzdHlsZS0+aGFzQXV0b1pJbmRl
eCgpIHx8IGlzUm9vdExheWVyKCk7IH0KICAgICBib29sIGlzRGlydHlTdGFja2luZ0NvbnRleHQo
KSBjb25zdCB7IHJldHVybiBtX3pPcmRlckxpc3RzRGlydHkgJiYgaXNTdGFja2luZ0NvbnRleHQo
KTsgfQogCisgICAgYm9vbCBoYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnQoKSBjb25zdCB7
IEFTU0VSVCghbV9oYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnREaXJ0eSk7IHJldHVybiBt
X2hhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudDsgfQorICAgIHZvaWQgbWFya0FuY2VzdG9y
SGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50KCk7CisgICAgdm9pZCBkaXJ0eUhhc1NlbGZQ
YWludGluZ0xheWVyRGVzY2VuZGFudFN0YXR1cygpOworCiAgICAgdm9pZCBjb21wdXRlUmVwYWlu
dFJlY3RzKExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9vdCA9IDApOwogICAgIHZvaWQgY2xlYXJS
ZXBhaW50UmVjdHMoKTsKIApAQCAtNjYwLDYgKzY2NCw3IEBAIHByaXZhdGU6CiAKICAgICBib29s
IHNob3VsZFJlcGFpbnRBZnRlckxheW91dCgpIGNvbnN0OwogCisgICAgdm9pZCB1cGRhdGVTZWxm
UGFpbnRpbmdMYXllckFmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxl
KTsKICAgICB2b2lkIHVwZGF0ZVN0YWNraW5nQ29udGV4dHNBZnRlclN0eWxlQ2hhbmdlKGNvbnN0
IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CiAKICAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnNBZnRl
clN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CkBAIC03NzYsNyArNzgx
LDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY2hpbGRWaXNpYmlsaXR5Q2hhbmdlZChib29sIG5l
d1Zpc2liaWxpdHkpOwogICAgIHZvaWQgZGlydHlWaXNpYmxlRGVzY2VuZGFudFN0YXR1cygpOwot
ICAgIHZvaWQgdXBkYXRlVmlzaWJpbGl0eVN0YXR1cygpOworCisgICAgdm9pZCB1cGRhdGVEZXNj
ZW5kYW50T3JDb250ZW50UmVsYXRlZFN0YXR1cygpOwogCiAgICAgLy8gVGhpcyBmbGFnIGlzIGNv
bXB1dGVkIGJ5IFJlbmRlckxheWVyQ29tcG9zaXRvciwgd2hpY2gga25vd3MgbW9yZSBhYm91dCAz
ZCBoaWVyYXJjaGllcyB0aGFuIHdlIGRvLgogICAgIHZvaWQgc2V0SGFzM0RUcmFuc2Zvcm1lZERl
c2NlbmRhbnQoYm9vbCBiKSB7IG1faGFzM0RUcmFuc2Zvcm1lZERlc2NlbmRhbnQgPSBiOyB9CkBA
IC04NzIsNiArODc4LDExIEBAIHByb3RlY3RlZDoKIAogICAgIGJvb2wgbV9pc1NlbGZQYWludGlu
Z0xheWVyIDogMTsKIAorICAgIC8vIElmIGhhdmUgbm8gc2VsZi1wYWludGluZyBkZXNjZW5kYW50
cywgd2UgZG9uJ3QgaGF2ZSB0byB3YWxrIG91ciBjaGlsZHJlbiBkdXJpbmcgcGFpbnRpbmcuIFRo
aXMgY2FuIGxlYWQgdG8KKyAgICAvLyBzaWduaWZpY2FudCBzYXZpbmdzLCBlc3BlY2lhbGx5IGlm
IHRoZSB0cmVlIGhhcyBsb3RzIG9mIG5vbi1zZWxmLXBhaW50aW5nIGxheWVycyBncm91cGVkIHRv
Z2V0aGVyIChlLmcuIHRhYmxlIGNlbGxzKS4KKyAgICBib29sIG1faGFzU2VsZlBhaW50aW5nTGF5
ZXJEZXNjZW5kYW50IDogMTsKKyAgICBib29sIG1faGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5k
YW50RGlydHkgOiAxOworCiAgICAgY29uc3QgYm9vbCBtX2lzUm9vdExheWVyIDogMTsKIAogICAg
IGJvb2wgbV91c2VkVHJhbnNwYXJlbmN5IDogMTsgLy8gVHJhY2tzIHdoZXRoZXIgd2UgbmVlZCB0
byBjbG9zZSBhIHRyYW5zcGFyZW50IGxheWVyLCBpLmUuLCB3aGV0aGVyCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IGFkY2U0YzdlZWI4
ODA5NTQ3NjU0MGIwZDczOGExNzRjZDUzMWFiZGYuLjAxYTZlODdlOGYwYTVmZGMwZGY3MGM3NTNl
OGI4N2U3MzZiNDgyZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckJhY2tpbmcuY3BwCkBAIC00MjMsNyArNDIzLDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tp
bmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJHZW9tZXRyeSgpCiAgICAgdXBkYXRlTGF5ZXJGaWx0ZXJz
KHJlbmRlcmVyKCktPnN0eWxlKCkpOwogI2VuZGlmCiAgICAgCi0gICAgbV9vd25pbmdMYXllci0+
dXBkYXRlVmlzaWJpbGl0eVN0YXR1cygpOworICAgIG1fb3duaW5nTGF5ZXItPnVwZGF0ZURlc2Nl
bmRhbnRPckNvbnRlbnRSZWxhdGVkU3RhdHVzKCk7CiAKICAgICAvLyBtX2dyYXBoaWNzTGF5ZXIg
aXMgdGhlIGNvcnJlc3BvbmRpbmcgR3JhcGhpY3NMYXllciBmb3IgdGhpcyBSZW5kZXJMYXllciBh
bmQgaXRzIG5vbi1jb21wb3NpdGluZwogICAgIC8vIGRlc2NlbmRhbnRzLiBTbywgdGhlIHZpc2li
aWxpdHkgZmxhZyBmb3IgbV9ncmFwaGljc0xheWVyIHNob3VsZCBiZSB0cnVlIGlmIHRoZXJlIGFy
ZSBhbnkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147327</attachid>
            <date>2012-06-13 08:40:06 -0700</date>
            <delta_ts>2012-06-14 16:46:21 -0700</delta_ts>
            <desc>Change v4. Fixed the invalidation logic as it wasn&apos;t dirtying.</desc>
            <filename>bug-88888-20120613084000.patch</filename>
            <type>text/plain</type>
            <size>15237</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwMjAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjM2MWVhMDFjZGVjNGY4
NDQzNDU4MzIyZjE4ZTM0Mzg0N2E3YWIzMi4uOWU4YWFhM2YxNmViMGMwOWViYWI2ZmNiMTk5N2Ex
MTZiODc3YmI0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEyLTA2LTEzICBKdWxp
ZW4gQ2hhZmZyYWl4ICA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbmRlckxh
eWVyIHN1YnRyZWVzIHdpdGhvdXQgYW55IHNlbGYtcGFpbnRpbmcgbGF5ZXIgc2hvdWxkbid0IGJl
IHdhbGtlZCBkdXJpbmcgcGFpbnRpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTg4ODg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBjb3ZlcmVkIGJ5IGV4aXN0
aW5nIHRlc3RzLgorCisgICAgICAgIFRoZSBnaXN0IG9mIHRoaXMgY2hhbmdlIGlzIHRvIGFkZCBh
IGhhcy1zZWxmLXBhaW50aW5nLWxheWVyLWRlc2NlbmRhbnQgZmxhZyAoaW5jbHVkaW5nIGFuCisg
ICAgICAgIGludmFsaWRhdGlvbiBsb2dpYykgdGhhdCBpcyB1c2VkIHRvIGF2b2lkIHdhbGtpbmcg
c3VidHJlZXMgd2l0aG91dCBhbnkgc2VsZi1wYWludGluZyBsYXllci4KKworICAgICAgICBPbiBo
dHRwOi8vZGdsYXprb3YuZ2l0aHViLmNvbS9wZXJmb3JtYW5jZS10ZXN0cy9iaWdncmlkLmh0bWwg
d2l0aCBhIDEwMCwwMDAgcm93cworICAgICAgICBieSAxMDAgY29sdW1ucyB0YWJsZSwgaXQgYnJp
bmdzIHRoZSBwYWludCB0aW1lIGR1cmluZyBzY3JvbGxpbmcgZnJvbSB+NDVtcyB0byB+Nm1zCisg
ICAgICAgIG9uIG15IG1hY2hpbmUuIFRoZSB0ZXN0IGNhc2UgaXMgYSBwYXRob2xvZ2ljIGV4YW1w
bGUgaGVyZSBidXQgdGhlIG9wdGltaXphdGlvbiBzaG91bGQKKyAgICAgICAgYXBwbHkgaW4gb3Ro
ZXIgY2FzZXMuCisKKyAgICAgICAgVGhlIG5ldyB1cGRhdGUgbG9naWMgcGlnZ3ktYmFja3Mgb24g
dG9wIG9mIHRoZSBleGlzdGluZyB1cGRhdGVWaXNpYmlsaXR5U3RhdHVzKCkgb25lIHRoYXQKKyAg
ICAgICAgZ290IHJlcHVycG9zZWQgYW5kIHJlbmFtZWQgYXMgcGFydCBvZiB0aGlzIGNoYW5nZS4K
KworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpyZW1vdmVDaGls
ZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKToKKyAgICAg
ICAgVGhlc2UgZnVuY3Rpb25zIHdlcmUgdXBkYXRlZCB0byBkaXJ0eSAvIHNldCB0aGUgbmV3IGZs
YWcuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkaXJ0eUhhc1NlbGZQYWludGlu
Z0xheWVyRGVzY2VuZGFudFN0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
bWFya0FuY2VzdG9ySGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50KToKKyAgICAgICAgQWRk
ZWQgdGhvc2UgZnVuY3Rpb25zIHRvIGhhbmRsZSBzZXR0aW5nIC8gaW52YWxpZGF0aW5nIHRoZSBu
ZXcgZmxhZy4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZVNlbGZQYWlu
dGluZ0xheWVyQWZ0ZXJTdHlsZUNoYW5nZSk6CisgICAgICAgIEFkZGVkIHRoaXMgZnVuY3Rpb24g
dG8gaGFuZGxlIHN0eWxlIHVwZGF0ZS4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OnBhaW50TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJD
b250ZW50c0FuZFJlZmxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBh
aW50TGF5ZXJDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRM
aXN0KToKKyAgICAgICAgQ2hhbmdlZCB0aGlzIGxvZ2ljIHRvIGJhaWwgb3V0IGlmIHdlIGhhdmUg
bm8gc2VsZi1wYWludGluZyBkZXNjZW5kYW50cy4gVGhpcyBpcyB3aGF0CisgICAgICAgIGlzIGdp
dmluZyB0aGUgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQuIEFsc28gYWRkZWQgc29tZSBwZXJmb3Jt
YW5jZSBBU1NFUlRzIHRvIGVuc3VyZQorICAgICAgICB0aGUgbWV0aG9kcyBhcmUgbm90IGNhbGxl
ZCB3aGVuIHRoZXkgc2hvdWxkbid0LgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
dXBkYXRlRGVzY2VuZGFudE9yQ29udGVudFJlbGF0ZWRTdGF0dXMpOgorICAgICAgICBSZW5hbWVk
IGZyb20gdXBkYXRlVmlzaWJpbGl0eVN0YXR1cyB0byBhY2NvdW50IGZvciB0aGUgbmV3IHVzYWdl
LgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0
ZXJTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNvbGxlY3RMYXllcnMp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0xheWVyR2VvbWV0cnkp
OgorICAgICAgICBVcGRhdGVkIGFmdGVyIHVwZGF0ZVZpc2liaWxpdHlTdGF0dXMgcmVuYW1lLgor
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6aGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50KToKKyAgICAgICAgQWRk
ZWQgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSBuZXcgZnVuY3Rpb25zIGFzIHdlbGwgYXMgdGhlIG5l
dyBmbGFnIGFuZCBkaXJ0eSBiaXQuCisKIDIwMTItMDYtMTMgIFNpbW9uIEhhdXNtYW5uICA8c2lt
b24uaGF1c21hbm5Abm9raWEuY29tPgogCiAgICAgICAgIFtRdF0gUmVtb3ZlIGRlcGVuZGVuY3kg
dG8gUXRTY3JpcHQgZm9yIHRoZSBRdCA1IGJ1aWxkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcAppbmRleCAyN2M3ZDVjZjU1ZDllNzBmNWVjNjdiZTcyMjA4ZmE1NWE4NTZm
YjdlLi43YmM1YzUzNjgwYWE1NzIzZDJkZmVlNmNkY2FmNjBmNWMwYWI5MjFkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTEyOSw2ICsxMjksOCBAQCBSZW5k
ZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlcmVyKQogICAg
IDogbV9pblJlc2l6ZU1vZGUoZmFsc2UpCiAgICAgLCBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSh0
cnVlKQogICAgICwgbV9ub3JtYWxGbG93TGlzdERpcnR5KHRydWUpCisgICAgLCBtX2hhc1NlbGZQ
YWludGluZ0xheWVyRGVzY2VuZGFudChmYWxzZSkKKyAgICAsIG1faGFzU2VsZlBhaW50aW5nTGF5
ZXJEZXNjZW5kYW50RGlydHkoZmFsc2UpCiAgICAgLCBtX2lzUm9vdExheWVyKHJlbmRlcmVyLT5p
c1JlbmRlclZpZXcoKSkKICAgICAsIG1fdXNlZFRyYW5zcGFyZW5jeShmYWxzZSkKICAgICAsIG1f
cGFpbnRpbmdJbnNpZGVSZWZsZWN0aW9uKGZhbHNlKQpAQCAtMzYzLDcgKzM2NSw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKExheW91dFBvaW50KiBvZmZzZXRGcm9t
Um9vdCwgVXBkYXRlTGF5ZXJQCiAgICAgfQogICAgIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyh0
b1NpemUocm91bmRlZEludFBvaW50KG9mZnNldCkpKTsKIAotICAgIHVwZGF0ZVZpc2liaWxpdHlT
dGF0dXMoKTsKKyAgICB1cGRhdGVEZXNjZW5kYW50T3JDb250ZW50UmVsYXRlZFN0YXR1cygpOwog
CiAgICAgaWYgKGZsYWdzICYgVXBkYXRlUGFnaW5hdGlvbikKICAgICAgICAgdXBkYXRlUGFnaW5h
dGlvbigpOwpAQCAtNDQyLDYgKzQ0NCwyNyBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpyZXBh
aW50UmVjdEluY2x1ZGluZ05vbkNvbXBvc2l0aW5nRGVzY2VuZGFudHMoKSBjb25zdAogICAgIHJl
dHVybiByZXBhaW50UmVjdDsKIH0KIAordm9pZCBSZW5kZXJMYXllcjo6ZGlydHlIYXNTZWxmUGFp
bnRpbmdMYXllckRlc2NlbmRhbnRTdGF0dXMoKQoreworICAgIGZvciAoUmVuZGVyTGF5ZXIqIGxh
eWVyID0gdGhpczsgbGF5ZXI7IGxheWVyID0gbGF5ZXItPnBhcmVudCgpKSB7CisgICAgICAgIGxh
eWVyLT5tX2hhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudERpcnR5ID0gdHJ1ZTsKKyAgICAg
ICAgLy8gSWYgd2UgaGF2ZSByZWFjaGVkIGEgc2VsZi1wYWludGluZyBsYXllciwgd2Uga25vdyBv
dXIgcGFyZW50IHNob3VsZCBoYXZlIGEgc2VsZi1wYWludGluZyBkZXNjZW5kYW50CisgICAgICAg
IC8vIGluIHRoaXMgY2FzZSwgdGhlcmUgaXMgbm8gbmVlZCB0byBkaXJ0eSBvdXIgYW5jZXN0b3Jz
IGZ1cnRoZXIuCisgICAgICAgIGlmIChsYXllci0+aXNTZWxmUGFpbnRpbmdMYXllcigpKSB7Cisg
ICAgICAgICAgICBBU1NFUlQoIXBhcmVudCgpIHx8IHBhcmVudCgpLT5tX2hhc1NlbGZQYWludGlu
Z0xheWVyRGVzY2VuZGFudERpcnR5IHx8IHBhcmVudCgpLT5oYXNTZWxmUGFpbnRpbmdMYXllckRl
c2NlbmRhbnQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKwor
dm9pZCBSZW5kZXJMYXllcjo6bWFya0FuY2VzdG9ySGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5k
YW50KCkKK3sKKyAgICBmb3IgKFJlbmRlckxheWVyKiBsYXllciA9IHRoaXM7IGxheWVyICYmIChs
YXllci0+bV9oYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnREaXJ0eSB8fCAhbGF5ZXItPmhh
c1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudCgpKTsgbGF5ZXIgPSBsYXllci0+cGFyZW50KCkp
IHsKKyAgICAgICAgbGF5ZXItPm1faGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50RGlydHkg
PSBmYWxzZTsKKyAgICAgICAgbGF5ZXItPm1faGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50
ID0gdHJ1ZTsKKyAgICB9Cit9CisKIHZvaWQgUmVuZGVyTGF5ZXI6OmNvbXB1dGVSZXBhaW50UmVj
dHMoTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290KQogewogICAgIEFTU0VSVCghbV92aXNpYmxl
Q29udGVudFN0YXR1c0RpcnR5KTsKQEAgLTQ2NCw3ICs0ODcsNyBAQCB2b2lkIFJlbmRlckxheWVy
Ojp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKFVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0
ZXJTY3JvbAogewogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZG4ndCBiZSBuZWVkZWQsIGJ1dCB0
aGVyZSBhcmUgc29tZSBjb3JuZXIgY2FzZXMgd2hlcmUKICAgICAvLyB0aGVzZSBmbGFncyBhcmUg
c3RpbGwgZGlydHkuIFVwZGF0ZSBzbyB0aGF0IHRoZSBjaGVjayBiZWxvdyBpcyB2YWxpZC4KLSAg
ICB1cGRhdGVWaXNpYmlsaXR5U3RhdHVzKCk7CisgICAgdXBkYXRlRGVzY2VuZGFudE9yQ29udGVu
dFJlbGF0ZWRTdGF0dXMoKTsKIAogICAgIC8vIElmIHdlIGhhdmUgbm8gdmlzaWJsZSBjb250ZW50
IGFuZCBubyB2aXNpYmxlIGRlc2NlbmRhbnRzLCB0aGVyZSBpcyBubyBwb2ludCByZWNvbXB1dGlu
ZwogICAgIC8vIG91ciByZWN0YW5nbGVzIGFzIHRoZXkgd2lsbCBiZSBlbXB0eS4gSWYgb3VyIHZp
c2liaWxpdHkgY2hhbmdlcywgd2UgYXJlIGV4cGVjdGVkIHRvCkBAIC02NTYsMTIgKzY3OSwxMiBA
QCB2b2lkIFJlbmRlckxheWVyOjpkaXJ0eVZpc2libGVEZXNjZW5kYW50U3RhdHVzKCkKICAgICB9
CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVZpc2liaWxpdHlTdGF0dXMoKQordm9pZCBS
ZW5kZXJMYXllcjo6dXBkYXRlRGVzY2VuZGFudE9yQ29udGVudFJlbGF0ZWRTdGF0dXMoKQogewog
ICAgIGlmIChtX3Zpc2libGVEZXNjZW5kYW50U3RhdHVzRGlydHkpIHsKICAgICAgICAgbV9oYXNW
aXNpYmxlRGVzY2VuZGFudCA9IGZhbHNlOwogICAgICAgICBmb3IgKFJlbmRlckxheWVyKiBjaGls
ZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsK
LSAgICAgICAgICAgIGNoaWxkLT51cGRhdGVWaXNpYmlsaXR5U3RhdHVzKCk7ICAgICAgICAKKyAg
ICAgICAgICAgIGNoaWxkLT51cGRhdGVEZXNjZW5kYW50T3JDb250ZW50UmVsYXRlZFN0YXR1cygp
OwogICAgICAgICAgICAgaWYgKGNoaWxkLT5tX2hhc1Zpc2libGVDb250ZW50IHx8IGNoaWxkLT5t
X2hhc1Zpc2libGVEZXNjZW5kYW50KSB7CiAgICAgICAgICAgICAgICAgbV9oYXNWaXNpYmxlRGVz
Y2VuZGFudCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC02OTksNiArNzIyLDE3
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVZpc2liaWxpdHlTdGF0dXMoKQogICAgICAgICB9
ICAgIAogICAgICAgICBtX3Zpc2libGVDb250ZW50U3RhdHVzRGlydHkgPSBmYWxzZTsgCiAgICAg
fQorCisgICAgaWYgKG1faGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50RGlydHkpIHsKKyAg
ICAgICAgZm9yIChSZW5kZXJMYXllciogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGls
ZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgICAgICAgICBjaGlsZC0+dXBkYXRlRGVz
Y2VuZGFudE9yQ29udGVudFJlbGF0ZWRTdGF0dXMoKTsKKyAgICAgICAgICAgIGlmIChjaGlsZC0+
aXNTZWxmUGFpbnRpbmdMYXllcigpIHx8IGNoaWxkLT5oYXNTZWxmUGFpbnRpbmdMYXllckRlc2Nl
bmRhbnQoKSkgeworICAgICAgICAgICAgICAgIG1faGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5k
YW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBtX2hhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudERpcnR5ID0gZmFs
c2U7CisgICAgfQogfQogCiB2b2lkIFJlbmRlckxheWVyOjpkaXJ0eTNEVHJhbnNmb3JtZWREZXNj
ZW5kYW50U3RhdHVzKCkKQEAgLTEyNDIsMTAgKzEyNzYsMTMgQEAgdm9pZCBSZW5kZXJMYXllcjo6
YWRkQ2hpbGQoUmVuZGVyTGF5ZXIqIGNoaWxkLCBSZW5kZXJMYXllciogYmVmb3JlQ2hpbGQpCiAg
ICAgICAgIGNoaWxkLT5kaXJ0eVN0YWNraW5nQ29udGV4dFpPcmRlckxpc3RzKCk7CiAgICAgfQog
Ci0gICAgY2hpbGQtPnVwZGF0ZVZpc2liaWxpdHlTdGF0dXMoKTsKKyAgICBjaGlsZC0+dXBkYXRl
RGVzY2VuZGFudE9yQ29udGVudFJlbGF0ZWRTdGF0dXMoKTsKICAgICBpZiAoY2hpbGQtPm1faGFz
VmlzaWJsZUNvbnRlbnQgfHwgY2hpbGQtPm1faGFzVmlzaWJsZURlc2NlbmRhbnQpCiAgICAgICAg
IGNoaWxkVmlzaWJpbGl0eUNoYW5nZWQodHJ1ZSk7Ci0gICAgCisKKyAgICBpZiAoY2hpbGQtPmlz
U2VsZlBhaW50aW5nTGF5ZXIoKSB8fCBjaGlsZC0+aGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5k
YW50KCkpCisgICAgICAgIG1hcmtBbmNlc3Rvckhhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFu
dCgpOworCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIGNvbXBvc2l0b3Io
KS0+bGF5ZXJXYXNBZGRlZCh0aGlzLCBjaGlsZCk7CiAjZW5kaWYKQEAgLTEyODIsMTAgKzEzMTks
MTMgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpyZW1vdmVDaGlsZChSZW5kZXJMYXllciog
b2xkQ2hpbGQpCiAgICAgb2xkQ2hpbGQtPnNldE5leHRTaWJsaW5nKDApOwogICAgIG9sZENoaWxk
LT5zZXRQYXJlbnQoMCk7CiAgICAgCi0gICAgb2xkQ2hpbGQtPnVwZGF0ZVZpc2liaWxpdHlTdGF0
dXMoKTsKKyAgICBvbGRDaGlsZC0+dXBkYXRlRGVzY2VuZGFudE9yQ29udGVudFJlbGF0ZWRTdGF0
dXMoKTsKICAgICBpZiAob2xkQ2hpbGQtPm1faGFzVmlzaWJsZUNvbnRlbnQgfHwgb2xkQ2hpbGQt
Pm1faGFzVmlzaWJsZURlc2NlbmRhbnQpCiAgICAgICAgIGNoaWxkVmlzaWJpbGl0eUNoYW5nZWQo
ZmFsc2UpOwotICAgIAorCisgICAgaWYgKG9sZENoaWxkLT5pc1NlbGZQYWludGluZ0xheWVyKCkg
fHwgb2xkQ2hpbGQtPmhhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudCgpKQorICAgICAgICBk
aXJ0eUhhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudFN0YXR1cygpOworCiAgICAgcmV0dXJu
IG9sZENoaWxkOwogfQogCkBAIC0yODgyLDcgKzI5MjIsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpw
YWludExheWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIsIEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwKICNlbmRpZgogCiAgICAgLy8gTm9uIHNlbGYtcGFpbnRpbmcgbGVhZiBsYXllcnMgZG9uJ3Qg
bmVlZCB0byBiZSBwYWludGVkIGFzIHRoZWlyIHJlbmRlcmVyKCkgc2hvdWxkIHByb3Blcmx5IHBh
aW50IGl0c2VsZi4KLSAgICBpZiAoIWlzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJiAhZmlyc3RDaGls
ZCgpKQorICAgIGlmICghaXNTZWxmUGFpbnRpbmdMYXllcigpICYmICFoYXNTZWxmUGFpbnRpbmdM
YXllckRlc2NlbmRhbnQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHNob3VsZFN1cHBy
ZXNzUGFpbnRpbmdMYXllcih0aGlzKSkKQEAgLTI5NTIsNiArMjk5Miw4IEBAIHZvaWQgUmVuZGVy
TGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50c0FuZFJlZmxlY3Rpb24oUmVuZGVyTGF5ZXIqIHJvb3RM
YXllciwgR3JhcGhpCiAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIHBhaW50
aW5nUm9vdCwgUmVuZGVyUmVnaW9uKiByZWdpb24sIE92ZXJsYXBUZXN0UmVxdWVzdE1hcCogb3Zl
cmxhcFRlc3RSZXF1ZXN0cywKICAgICAgICAgICAgICAgICAgICAgICAgIFBhaW50TGF5ZXJGbGFn
cyBwYWludEZsYWdzKQogeworICAgIEFTU0VSVChpc1NlbGZQYWludGluZ0xheWVyKCkgfHwgaGFz
U2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50KCkpOworCiAgICAgUGFpbnRMYXllckZsYWdzIGxv
Y2FsUGFpbnRGbGFncyA9IHBhaW50RmxhZ3MgJiB+KFBhaW50TGF5ZXJBcHBsaWVkVHJhbnNmb3Jt
KTsKIAogICAgIC8vIFBhaW50IHRoZSByZWZsZWN0aW9uIGZpcnN0IGlmIHdlIGhhdmUgb25lLgpA
QCAtMjk3MSw2ICszMDEzLDggQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRz
KFJlbmRlckxheWVyKiByb290TGF5ZXIsIEdyYXBoaWNzQ29udGV4dCogY28KICAgICAgICAgICAg
ICAgICAgICAgICAgIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290LCBSZW5kZXJSZWdpb24qIHJl
Z2lvbiwgT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwKiBvdmVybGFwVGVzdFJlcXVlc3RzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgUGFpbnRMYXllckZsYWdzIHBhaW50RmxhZ3MpCiB7CisgICAgQVNT
RVJUKGlzU2VsZlBhaW50aW5nTGF5ZXIoKSB8fCBoYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRh
bnQoKSk7CisKICAgICBQYWludExheWVyRmxhZ3MgbG9jYWxQYWludEZsYWdzID0gcGFpbnRGbGFn
cyAmIH4oUGFpbnRMYXllckFwcGxpZWRUcmFuc2Zvcm0pOwogICAgIGJvb2wgaGF2ZVRyYW5zcGFy
ZW5jeSA9IGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJIYXZlVHJhbnNwYXJlbmN5OwogICAg
IGJvb2wgaXNTZWxmUGFpbnRpbmdMYXllciA9IHRoaXMtPmlzU2VsZlBhaW50aW5nTGF5ZXIoKTsK
QEAgLTMxNjUsNiArMzIwOSw5IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGlzdChWZWN0b3I8
UmVuZGVyTGF5ZXIqPiogbGlzdCwgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwKICAgICBpZiAoIWxp
c3QpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmICghaGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNj
ZW5kYW50KCkpCisgICAgICAgIHJldHVybjsKKwogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICBM
YXllckxpc3RNdXRhdGlvbkRldGVjdG9yIG11dGF0aW9uQ2hlY2tlcih0aGlzKTsKICNlbmRpZgpA
QCAtNDUzOCw3ICs0NTg1LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTm9ybWFsRmxvd0xp
c3QoKQogCiB2b2lkIFJlbmRlckxheWVyOjpjb2xsZWN0TGF5ZXJzKGJvb2wgaW5jbHVkZUhpZGRl
bkxheWVycywgVmVjdG9yPFJlbmRlckxheWVyKj4qJiBwb3NCdWZmZXIsIFZlY3RvcjxSZW5kZXJM
YXllcio+KiYgbmVnQnVmZmVyKQogewotICAgIHVwZGF0ZVZpc2liaWxpdHlTdGF0dXMoKTsKKyAg
ICB1cGRhdGVEZXNjZW5kYW50T3JDb250ZW50UmVsYXRlZFN0YXR1cygpOwogCiAgICAgLy8gT3Zl
cmZsb3cgbGF5ZXJzIGFyZSBqdXN0IHBhaW50ZWQgYnkgdGhlaXIgZW5jbG9zaW5nIGxheWVycywg
c28gdGhleSBkb24ndCBnZXQgcHV0IGluIHpvcmRlciBsaXN0cy4KICAgICBib29sIGluY2x1ZGVI
aWRkZW5MYXllciA9IGluY2x1ZGVIaWRkZW5MYXllcnMgfHwgKG1faGFzVmlzaWJsZUNvbnRlbnQg
fHwgKG1faGFzVmlzaWJsZURlc2NlbmRhbnQgJiYgaXNTdGFja2luZ0NvbnRleHQoKSkpOwpAQCAt
NDY3NCw2ICs0NzIxLDIxIEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnNob3VsZEJlU2VsZlBhaW50aW5n
TGF5ZXIoKSBjb25zdAogICAgICAgICB8fCByZW5kZXJlcigpLT5pc1JlbmRlcklGcmFtZSgpOwog
fQogCit2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTZWxmUGFpbnRpbmdMYXllckFmdGVyU3R5bGVD
aGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqKQoreworICAgIGJvb2wgaXNTZWxmUGFpbnRpbmdMYXll
ciA9IHNob3VsZEJlU2VsZlBhaW50aW5nTGF5ZXIoKTsKKyAgICBpZiAobV9pc1NlbGZQYWludGlu
Z0xheWVyID09IGlzU2VsZlBhaW50aW5nTGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
aXNTZWxmUGFpbnRpbmdMYXllciA9IGlzU2VsZlBhaW50aW5nTGF5ZXI7CisgICAgaWYgKCFwYXJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChpc1NlbGZQYWludGluZ0xheWVyKQorICAg
ICAgICBwYXJlbnQoKS0+bWFya0FuY2VzdG9ySGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50
KCk7CisgICAgZWxzZQorICAgICAgICBwYXJlbnQoKS0+ZGlydHlIYXNTZWxmUGFpbnRpbmdMYXll
ckRlc2NlbmRhbnRTdGF0dXMoKTsKK30KKwogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU3RhY2tp
bmdDb250ZXh0c0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQog
ewogICAgIGlmICghb2xkU3R5bGUpCkBAIC00NzQ0LDggKzQ4MDYsNiBAQCB2b2lkIFJlbmRlckxh
eWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xk
U3R5bGUpCiAgICAgICAgIGRpcnR5U3RhY2tpbmdDb250ZXh0Wk9yZGVyTGlzdHMoKTsKICAgICB9
CiAKLSAgICBtX2lzU2VsZlBhaW50aW5nTGF5ZXIgPSBzaG91bGRCZVNlbGZQYWludGluZ0xheWVy
KCk7Ci0KICAgICBpZiAocmVuZGVyZXIoKS0+c3R5bGUoKS0+b3ZlcmZsb3dYKCkgPT0gT01BUlFV
RUUgJiYgcmVuZGVyZXIoKS0+c3R5bGUoKS0+bWFycXVlZUJlaGF2aW9yKCkgIT0gTU5PTkUgJiYg
cmVuZGVyZXIoKS0+aXNCb3goKSkgewogICAgICAgICBpZiAoIW1fbWFycXVlZSkKICAgICAgICAg
ICAgIG1fbWFycXVlZSA9IG5ldyBSZW5kZXJNYXJxdWVlKHRoaXMpOwpAQCAtNDc1Niw2ICs0ODE2
LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSwgY29u
c3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQogICAgICAgICBtX21hcnF1ZWUgPSAwOwogICAgIH0K
IAorICAgIHVwZGF0ZVNlbGZQYWludGluZ0xheWVyQWZ0ZXJTdHlsZUNoYW5nZShvbGRTdHlsZSk7
CiAgICAgdXBkYXRlU3RhY2tpbmdDb250ZXh0c0FmdGVyU3R5bGVDaGFuZ2Uob2xkU3R5bGUpOwog
ICAgIHVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKG9sZFN0eWxlKTsKIApAQCAtNDc4
MSw3ICs0ODQyLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVy
ZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQogI2VuZGlmCiAKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgdXBkYXRlVmlzaWJpbGl0eVN0YXR1cygpOworICAg
IHVwZGF0ZURlc2NlbmRhbnRPckNvbnRlbnRSZWxhdGVkU3RhdHVzKCk7CiAgICAgdXBkYXRlVHJh
bnNmb3JtKCk7CiAKICAgICBpZiAoY29tcG9zaXRvcigpLT51cGRhdGVMYXllckNvbXBvc2l0aW5n
U3RhdGUodGhpcykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCmluZGV4IDA4
NzkxYjljNDU1YTZkMjdlY2IwMmIwMzlhMWQ0ZWNjNjk5NDllMTYuLmRkZmQ1MWQyYzI3YmQ2ZDRi
MmEwZjVhMzNmMThmMjU1NWM1ZGFiNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5oCkBAIC02NTEsNiArNjUxLDEwIEBAIHByaXZhdGU6CiAgICAgYm9vbCBpc1N0YWNraW5n
Q29udGV4dChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0IHsgcmV0dXJuICFzdHlsZS0+
aGFzQXV0b1pJbmRleCgpIHx8IGlzUm9vdExheWVyKCk7IH0KICAgICBib29sIGlzRGlydHlTdGFj
a2luZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3pPcmRlckxpc3RzRGlydHkgJiYgaXNTdGFj
a2luZ0NvbnRleHQoKTsgfQogCisgICAgYm9vbCBoYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRh
bnQoKSBjb25zdCB7IEFTU0VSVCghbV9oYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnREaXJ0
eSk7IHJldHVybiBtX2hhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudDsgfQorICAgIHZvaWQg
bWFya0FuY2VzdG9ySGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50KCk7CisgICAgdm9pZCBk
aXJ0eUhhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudFN0YXR1cygpOworCiAgICAgdm9pZCBj
b21wdXRlUmVwYWludFJlY3RzKExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9vdCA9IDApOwogICAg
IHZvaWQgY2xlYXJSZXBhaW50UmVjdHMoKTsKIApAQCAtNjYwLDYgKzY2NCw3IEBAIHByaXZhdGU6
CiAKICAgICBib29sIHNob3VsZFJlcGFpbnRBZnRlckxheW91dCgpIGNvbnN0OwogCisgICAgdm9p
ZCB1cGRhdGVTZWxmUGFpbnRpbmdMYXllckFmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5
bGUqIG9sZFN0eWxlKTsKICAgICB2b2lkIHVwZGF0ZVN0YWNraW5nQ29udGV4dHNBZnRlclN0eWxl
Q2hhbmdlKGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CiAKICAgICB2b2lkIHVwZGF0ZVNj
cm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CkBA
IC03NzYsNyArNzgxLDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY2hpbGRWaXNpYmlsaXR5Q2hh
bmdlZChib29sIG5ld1Zpc2liaWxpdHkpOwogICAgIHZvaWQgZGlydHlWaXNpYmxlRGVzY2VuZGFu
dFN0YXR1cygpOwotICAgIHZvaWQgdXBkYXRlVmlzaWJpbGl0eVN0YXR1cygpOworCisgICAgdm9p
ZCB1cGRhdGVEZXNjZW5kYW50T3JDb250ZW50UmVsYXRlZFN0YXR1cygpOwogCiAgICAgLy8gVGhp
cyBmbGFnIGlzIGNvbXB1dGVkIGJ5IFJlbmRlckxheWVyQ29tcG9zaXRvciwgd2hpY2gga25vd3Mg
bW9yZSBhYm91dCAzZCBoaWVyYXJjaGllcyB0aGFuIHdlIGRvLgogICAgIHZvaWQgc2V0SGFzM0RU
cmFuc2Zvcm1lZERlc2NlbmRhbnQoYm9vbCBiKSB7IG1faGFzM0RUcmFuc2Zvcm1lZERlc2NlbmRh
bnQgPSBiOyB9CkBAIC04NzIsNiArODc4LDExIEBAIHByb3RlY3RlZDoKIAogICAgIGJvb2wgbV9p
c1NlbGZQYWludGluZ0xheWVyIDogMTsKIAorICAgIC8vIElmIGhhdmUgbm8gc2VsZi1wYWludGlu
ZyBkZXNjZW5kYW50cywgd2UgZG9uJ3QgaGF2ZSB0byB3YWxrIG91ciBjaGlsZHJlbiBkdXJpbmcg
cGFpbnRpbmcuIFRoaXMgY2FuIGxlYWQgdG8KKyAgICAvLyBzaWduaWZpY2FudCBzYXZpbmdzLCBl
c3BlY2lhbGx5IGlmIHRoZSB0cmVlIGhhcyBsb3RzIG9mIG5vbi1zZWxmLXBhaW50aW5nIGxheWVy
cyBncm91cGVkIHRvZ2V0aGVyIChlLmcuIHRhYmxlIGNlbGxzKS4KKyAgICBib29sIG1faGFzU2Vs
ZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50IDogMTsKKyAgICBib29sIG1faGFzU2VsZlBhaW50aW5n
TGF5ZXJEZXNjZW5kYW50RGlydHkgOiAxOworCiAgICAgY29uc3QgYm9vbCBtX2lzUm9vdExheWVy
IDogMTsKIAogICAgIGJvb2wgbV91c2VkVHJhbnNwYXJlbmN5IDogMTsgLy8gVHJhY2tzIHdoZXRo
ZXIgd2UgbmVlZCB0byBjbG9zZSBhIHRyYW5zcGFyZW50IGxheWVyLCBpLmUuLCB3aGV0aGVyCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4
IGFkY2U0YzdlZWI4ODA5NTQ3NjU0MGIwZDczOGExNzRjZDUzMWFiZGYuLjAxYTZlODdlOGYwYTVm
ZGMwZGY3MGM3NTNlOGI4N2U3MzZiNDgyZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCkBAIC00MjMsNyArNDIzLDcgQEAgdm9pZCBSZW5k
ZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJHZW9tZXRyeSgpCiAgICAgdXBkYXRl
TGF5ZXJGaWx0ZXJzKHJlbmRlcmVyKCktPnN0eWxlKCkpOwogI2VuZGlmCiAgICAgCi0gICAgbV9v
d25pbmdMYXllci0+dXBkYXRlVmlzaWJpbGl0eVN0YXR1cygpOworICAgIG1fb3duaW5nTGF5ZXIt
PnVwZGF0ZURlc2NlbmRhbnRPckNvbnRlbnRSZWxhdGVkU3RhdHVzKCk7CiAKICAgICAvLyBtX2dy
YXBoaWNzTGF5ZXIgaXMgdGhlIGNvcnJlc3BvbmRpbmcgR3JhcGhpY3NMYXllciBmb3IgdGhpcyBS
ZW5kZXJMYXllciBhbmQgaXRzIG5vbi1jb21wb3NpdGluZwogICAgIC8vIGRlc2NlbmRhbnRzLiBT
bywgdGhlIHZpc2liaWxpdHkgZmxhZyBmb3IgbV9ncmFwaGljc0xheWVyIHNob3VsZCBiZSB0cnVl
IGlmIHRoZXJlIGFyZSBhbnkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147679</attachid>
            <date>2012-06-14 16:46:24 -0700</date>
            <delta_ts>2012-06-14 21:17:57 -0700</delta_ts>
            <desc>Change v5. More bug fixes and reworking per Simon&apos;s review.</desc>
            <filename>bug-88888-20120614164624.patch</filename>
            <type>text/plain</type>
            <size>15876</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwMzYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2ZjZjgzOGEzMDUzOGUz
OGY4OTc2OTcxNGQwNjU3ZjQ2NzdhMjBmYi4uZGU3MzRhZDRjMWE2ZmEyN2ViOWE4YjhmNjhlYTFl
NDQyZmRkMzBmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEyLTA2LTE0ICBKdWxp
ZW4gQ2hhZmZyYWl4ICA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbmRlckxh
eWVyIHN1YnRyZWVzIHdpdGhvdXQgYW55IHNlbGYtcGFpbnRpbmcgbGF5ZXIgc2hvdWxkbid0IGJl
IHdhbGtlZCBkdXJpbmcgcGFpbnRpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTg4ODg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBjb3ZlcmVkIGJ5IGV4aXN0
aW5nIHRlc3RzLgorCisgICAgICAgIFRoZSBnaXN0IG9mIHRoaXMgY2hhbmdlIGlzIHRvIGFkZCBh
IGhhcy1zZWxmLXBhaW50aW5nLWxheWVyLWRlc2NlbmRhbnQgZmxhZyAoaW5jbHVkaW5nIGFuCisg
ICAgICAgIGludmFsaWRhdGlvbiBsb2dpYykgdGhhdCBpcyB1c2VkIHRvIGF2b2lkIHdhbGtpbmcg
c3VidHJlZXMgd2l0aG91dCBhbnkgc2VsZi1wYWludGluZyBsYXllci4KKworICAgICAgICBPbiBo
dHRwOi8vZGdsYXprb3YuZ2l0aHViLmNvbS9wZXJmb3JtYW5jZS10ZXN0cy9iaWdncmlkLmh0bWwg
d2l0aCBhIDEwMCwwMDAgcm93cworICAgICAgICBieSAxMDAgY29sdW1ucyB0YWJsZSwgaXQgYnJp
bmdzIHRoZSBwYWludCB0aW1lIGR1cmluZyBzY3JvbGxpbmcgZnJvbSB+NDVtcyB0byB+Nm1zCisg
ICAgICAgIG9uIG15IG1hY2hpbmUuIFRoZSB0ZXN0IGNhc2UgaXMgYSBwYXRob2xvZ2ljIGV4YW1w
bGUgaGVyZSBidXQgdGhlIG9wdGltaXphdGlvbiBzaG91bGQKKyAgICAgICAgYXBwbHkgaW4gb3Ro
ZXIgY2FzZXMuCisKKyAgICAgICAgVGhlIG5ldyB1cGRhdGUgbG9naWMgcGlnZ3ktYmFja3Mgb24g
dG9wIG9mIHRoZSBleGlzdGluZyB1cGRhdGVWaXNpYmlsaXR5U3RhdHVzKCkgb25lIHRoYXQKKyAg
ICAgICAgZ290IHJlcHVycG9zZWQgYW5kIHJlbmFtZWQgYXMgcGFydCBvZiB0aGlzIGNoYW5nZS4K
KworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpyZW1vdmVDaGls
ZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKToKKyAgICAg
ICAgVGhlc2UgZnVuY3Rpb25zIHdlcmUgdXBkYXRlZCB0byBkaXJ0eSAvIHNldCB0aGUgbmV3IGZs
YWcuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkaXJ0eUFuY2VzdG9yQ2hhaW5I
YXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnRTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OnNldEFuY2VzdG9yQ2hhaW5IYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRh
bnQpOgorICAgICAgICBBZGRlZCB0aG9zZSBmdW5jdGlvbnMgdG8gaGFuZGxlIHNldHRpbmcgLyBp
bnZhbGlkYXRpbmcgdGhlIG5ldyBmbGFnLgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6dXBkYXRlU2VsZlBhaW50aW5nTGF5ZXJBZnRlclN0eWxlQ2hhbmdlKToKKyAgICAgICAgQWRk
ZWQgdGhpcyBmdW5jdGlvbiB0byBoYW5kbGUgc3R5bGUgdXBkYXRlLgorCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6cGFpbnRMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6cGFpbnRMYXllckNvbnRlbnRzQW5kUmVmbGVjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpwYWludExpc3QpOgorICAgICAgICBDaGFuZ2VkIHRoaXMgbG9naWMgdG8gYmFp
bCBvdXQgaWYgd2UgaGF2ZSBubyBzZWxmLXBhaW50aW5nIGRlc2NlbmRhbnRzLiBUaGlzIGlzIHdo
YXQKKyAgICAgICAgaXMgZ2l2aW5nIHRoZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC4gQWxzbyBh
ZGRlZCBzb21lIHBlcmZvcm1hbmNlIEFTU0VSVHMgdG8gZW5zdXJlCisgICAgICAgIHRoZSBtZXRo
b2RzIGFyZSBub3QgY2FsbGVkIHdoZW4gdGhleSBzaG91bGRuJ3QuCisKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjp1cGRhdGVEZXNjZW5kYW50RGVwZW5kZW50RmxhZ3MpOgorICAgICAg
ICBSZW5hbWVkIGZyb20gdXBkYXRlVmlzaWJpbGl0eVN0YXR1cyB0byBhY2NvdW50IGZvciB0aGUg
bmV3IHVzYWdlLgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQ
b3NpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9z
aXRpb25zQWZ0ZXJTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNvbGxl
Y3RMYXllcnMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0xheWVy
R2VvbWV0cnkpOgorICAgICAgICBVcGRhdGVkIGFmdGVyIHVwZGF0ZVZpc2liaWxpdHlTdGF0dXMg
cmVuYW1lLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmg6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50KToKKyAg
ICAgICAgQWRkZWQgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSBuZXcgZnVuY3Rpb25zIGFzIHdlbGwg
YXMgdGhlIG5ldyBmbGFnIGFuZCBkaXJ0eSBiaXQuCisKIDIwMTItMDYtMTQgIElhbiBWb2xsaWNr
ICA8dm9sbGlja0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBDZXJ0YWluIHNl
dHRpbmdzIGluIENDU2V0dGluZ3MgY291bGQgYmUgZ2xvYmFsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmNwcAppbmRleCAyN2M3ZDVjZjU1ZDllNzBmNWVjNjdiZTcyMjA4ZmE1
NWE4NTZmYjdlLi5lYzM2MzJjYjIzMzYzMTU5MGMwNTlhMjkwOTcxOTRmMzhhMDQ5MWExIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTEyOSw2ICsxMjksOCBA
QCBSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlcmVy
KQogICAgIDogbV9pblJlc2l6ZU1vZGUoZmFsc2UpCiAgICAgLCBtX3Njcm9sbERpbWVuc2lvbnNE
aXJ0eSh0cnVlKQogICAgICwgbV9ub3JtYWxGbG93TGlzdERpcnR5KHRydWUpCisgICAgLCBtX2hh
c1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudChmYWxzZSkKKyAgICAsIG1faGFzU2VsZlBhaW50
aW5nTGF5ZXJEZXNjZW5kYW50RGlydHkoZmFsc2UpCiAgICAgLCBtX2lzUm9vdExheWVyKHJlbmRl
cmVyLT5pc1JlbmRlclZpZXcoKSkKICAgICAsIG1fdXNlZFRyYW5zcGFyZW5jeShmYWxzZSkKICAg
ICAsIG1fcGFpbnRpbmdJbnNpZGVSZWZsZWN0aW9uKGZhbHNlKQpAQCAtMzYzLDcgKzM2NSw3IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKExheW91dFBvaW50KiBvZmZz
ZXRGcm9tUm9vdCwgVXBkYXRlTGF5ZXJQCiAgICAgfQogICAgIHBvc2l0aW9uT3ZlcmZsb3dDb250
cm9scyh0b1NpemUocm91bmRlZEludFBvaW50KG9mZnNldCkpKTsKIAotICAgIHVwZGF0ZVZpc2li
aWxpdHlTdGF0dXMoKTsKKyAgICB1cGRhdGVEZXNjZW5kYW50RGVwZW5kZW50RmxhZ3MoKTsKIAog
ICAgIGlmIChmbGFncyAmIFVwZGF0ZVBhZ2luYXRpb24pCiAgICAgICAgIHVwZGF0ZVBhZ2luYXRp
b24oKTsKQEAgLTQ0Miw2ICs0NDQsMzAgQEAgTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6cmVwYWlu
dFJlY3RJbmNsdWRpbmdOb25Db21wb3NpdGluZ0Rlc2NlbmRhbnRzKCkgY29uc3QKICAgICByZXR1
cm4gcmVwYWludFJlY3Q7CiB9CiAKK3ZvaWQgUmVuZGVyTGF5ZXI6OnNldEFuY2VzdG9yQ2hhaW5I
YXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnQoKQoreworICAgIGZvciAoUmVuZGVyTGF5ZXIq
IGxheWVyID0gdGhpczsgbGF5ZXI7IGxheWVyID0gbGF5ZXItPnBhcmVudCgpKSB7CisgICAgICAg
IGlmICghbGF5ZXItPm1faGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50RGlydHkgJiYgbGF5
ZXItPmhhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudCgpKQorICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgbGF5ZXItPm1faGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50RGlydHkg
PSBmYWxzZTsKKyAgICAgICAgbGF5ZXItPm1faGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50
ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OmRpcnR5QW5jZXN0b3JDaGFp
bkhhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudFN0YXR1cygpCit7CisgICAgZm9yIChSZW5k
ZXJMYXllciogbGF5ZXIgPSB0aGlzOyBsYXllcjsgbGF5ZXIgPSBsYXllci0+cGFyZW50KCkpIHsK
KyAgICAgICAgbGF5ZXItPm1faGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50RGlydHkgPSB0
cnVlOworICAgICAgICAvLyBJZiB3ZSBoYXZlIHJlYWNoZWQgYSBzZWxmLXBhaW50aW5nIGxheWVy
LCB3ZSBrbm93IG91ciBwYXJlbnQgc2hvdWxkIGhhdmUgYSBzZWxmLXBhaW50aW5nIGRlc2NlbmRh
bnQKKyAgICAgICAgLy8gaW4gdGhpcyBjYXNlLCB0aGVyZSBpcyBubyBuZWVkIHRvIGRpcnR5IG91
ciBhbmNlc3RvcnMgZnVydGhlci4KKyAgICAgICAgaWYgKGxheWVyLT5pc1NlbGZQYWludGluZ0xh
eWVyKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghcGFyZW50KCkgfHwgcGFyZW50KCktPm1faGFz
U2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50RGlydHkgfHwgcGFyZW50KCktPmhhc1NlbGZQYWlu
dGluZ0xheWVyRGVzY2VuZGFudCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfQorfQorCiB2b2lkIFJlbmRlckxheWVyOjpjb21wdXRlUmVwYWludFJlY3RzKExheW91dFBv
aW50KiBvZmZzZXRGcm9tUm9vdCkKIHsKICAgICBBU1NFUlQoIW1fdmlzaWJsZUNvbnRlbnRTdGF0
dXNEaXJ0eSk7CkBAIC00NjQsNyArNDkwLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5
ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2wKIHsK
ICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGRuJ3QgYmUgbmVlZGVkLCBidXQgdGhlcmUgYXJlIHNv
bWUgY29ybmVyIGNhc2VzIHdoZXJlCiAgICAgLy8gdGhlc2UgZmxhZ3MgYXJlIHN0aWxsIGRpcnR5
LiBVcGRhdGUgc28gdGhhdCB0aGUgY2hlY2sgYmVsb3cgaXMgdmFsaWQuCi0gICAgdXBkYXRlVmlz
aWJpbGl0eVN0YXR1cygpOworICAgIHVwZGF0ZURlc2NlbmRhbnREZXBlbmRlbnRGbGFncygpOwog
CiAgICAgLy8gSWYgd2UgaGF2ZSBubyB2aXNpYmxlIGNvbnRlbnQgYW5kIG5vIHZpc2libGUgZGVz
Y2VuZGFudHMsIHRoZXJlIGlzIG5vIHBvaW50IHJlY29tcHV0aW5nCiAgICAgLy8gb3VyIHJlY3Rh
bmdsZXMgYXMgdGhleSB3aWxsIGJlIGVtcHR5LiBJZiBvdXIgdmlzaWJpbGl0eSBjaGFuZ2VzLCB3
ZSBhcmUgZXhwZWN0ZWQgdG8KQEAgLTY1NiwxOCArNjgyLDI1IEBAIHZvaWQgUmVuZGVyTGF5ZXI6
OmRpcnR5VmlzaWJsZURlc2NlbmRhbnRTdGF0dXMoKQogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJM
YXllcjo6dXBkYXRlVmlzaWJpbGl0eVN0YXR1cygpCit2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVE
ZXNjZW5kYW50RGVwZW5kZW50RmxhZ3MoKQogewotICAgIGlmIChtX3Zpc2libGVEZXNjZW5kYW50
U3RhdHVzRGlydHkpIHsKKyAgICBpZiAobV92aXNpYmxlRGVzY2VuZGFudFN0YXR1c0RpcnR5IHx8
IG1faGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50RGlydHkpIHsKICAgICAgICAgbV9oYXNW
aXNpYmxlRGVzY2VuZGFudCA9IGZhbHNlOworICAgICAgICBtX2hhc1NlbGZQYWludGluZ0xheWVy
RGVzY2VuZGFudCA9IGZhbHNlOwogICAgICAgICBmb3IgKFJlbmRlckxheWVyKiBjaGlsZCA9IGZp
cnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAg
ICAgICAgIGNoaWxkLT51cGRhdGVWaXNpYmlsaXR5U3RhdHVzKCk7ICAgICAgICAKLSAgICAgICAg
ICAgIGlmIChjaGlsZC0+bV9oYXNWaXNpYmxlQ29udGVudCB8fCBjaGlsZC0+bV9oYXNWaXNpYmxl
RGVzY2VuZGFudCkgewotICAgICAgICAgICAgICAgIG1faGFzVmlzaWJsZURlc2NlbmRhbnQgPSB0
cnVlOworICAgICAgICAgICAgY2hpbGQtPnVwZGF0ZURlc2NlbmRhbnREZXBlbmRlbnRGbGFncygp
OworCisgICAgICAgICAgICBib29sIGhhc1Zpc2libGVEZXNjZW5kYW50ID0gY2hpbGQtPm1faGFz
VmlzaWJsZUNvbnRlbnQgfHwgY2hpbGQtPm1faGFzVmlzaWJsZURlc2NlbmRhbnQ7CisgICAgICAg
ICAgICBib29sIGhhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudCA9IGNoaWxkLT5pc1NlbGZQ
YWludGluZ0xheWVyKCkgfHwgY2hpbGQtPmhhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudCgp
OworCisgICAgICAgICAgICBtX2hhc1Zpc2libGVEZXNjZW5kYW50IHw9IGhhc1Zpc2libGVEZXNj
ZW5kYW50OworICAgICAgICAgICAgbV9oYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnQgfD0g
aGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50OworCisgICAgICAgICAgICBpZiAobV9oYXNW
aXNpYmxlRGVzY2VuZGFudCAmJiBtX2hhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudCkKICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBt
X3Zpc2libGVEZXNjZW5kYW50U3RhdHVzRGlydHkgPSBmYWxzZTsKKyAgICAgICAgbV9oYXNTZWxm
UGFpbnRpbmdMYXllckRlc2NlbmRhbnREaXJ0eSA9IGZhbHNlOwogICAgIH0KIAogICAgIGlmICht
X3Zpc2libGVDb250ZW50U3RhdHVzRGlydHkpIHsKQEAgLTEyNDIsMTAgKzEyNzUsMTMgQEAgdm9p
ZCBSZW5kZXJMYXllcjo6YWRkQ2hpbGQoUmVuZGVyTGF5ZXIqIGNoaWxkLCBSZW5kZXJMYXllciog
YmVmb3JlQ2hpbGQpCiAgICAgICAgIGNoaWxkLT5kaXJ0eVN0YWNraW5nQ29udGV4dFpPcmRlckxp
c3RzKCk7CiAgICAgfQogCi0gICAgY2hpbGQtPnVwZGF0ZVZpc2liaWxpdHlTdGF0dXMoKTsKKyAg
ICBjaGlsZC0+dXBkYXRlRGVzY2VuZGFudERlcGVuZGVudEZsYWdzKCk7CiAgICAgaWYgKGNoaWxk
LT5tX2hhc1Zpc2libGVDb250ZW50IHx8IGNoaWxkLT5tX2hhc1Zpc2libGVEZXNjZW5kYW50KQog
ICAgICAgICBjaGlsZFZpc2liaWxpdHlDaGFuZ2VkKHRydWUpOwotICAgIAorCisgICAgaWYgKGNo
aWxkLT5pc1NlbGZQYWludGluZ0xheWVyKCkgfHwgY2hpbGQtPmhhc1NlbGZQYWludGluZ0xheWVy
RGVzY2VuZGFudCgpKQorICAgICAgICBzZXRBbmNlc3RvckNoYWluSGFzU2VsZlBhaW50aW5nTGF5
ZXJEZXNjZW5kYW50KCk7CisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAg
Y29tcG9zaXRvcigpLT5sYXllcldhc0FkZGVkKHRoaXMsIGNoaWxkKTsKICNlbmRpZgpAQCAtMTI4
MiwxMCArMTMxOCwxMyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OnJlbW92ZUNoaWxkKFJl
bmRlckxheWVyKiBvbGRDaGlsZCkKICAgICBvbGRDaGlsZC0+c2V0TmV4dFNpYmxpbmcoMCk7CiAg
ICAgb2xkQ2hpbGQtPnNldFBhcmVudCgwKTsKICAgICAKLSAgICBvbGRDaGlsZC0+dXBkYXRlVmlz
aWJpbGl0eVN0YXR1cygpOworICAgIG9sZENoaWxkLT51cGRhdGVEZXNjZW5kYW50RGVwZW5kZW50
RmxhZ3MoKTsKICAgICBpZiAob2xkQ2hpbGQtPm1faGFzVmlzaWJsZUNvbnRlbnQgfHwgb2xkQ2hp
bGQtPm1faGFzVmlzaWJsZURlc2NlbmRhbnQpCiAgICAgICAgIGNoaWxkVmlzaWJpbGl0eUNoYW5n
ZWQoZmFsc2UpOwotICAgIAorCisgICAgaWYgKG9sZENoaWxkLT5pc1NlbGZQYWludGluZ0xheWVy
KCkgfHwgb2xkQ2hpbGQtPmhhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudCgpKQorICAgICAg
ICBkaXJ0eUFuY2VzdG9yQ2hhaW5IYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnRTdGF0dXMo
KTsKKwogICAgIHJldHVybiBvbGRDaGlsZDsKIH0KIApAQCAtMjg4Miw3ICsyOTIxLDcgQEAgdm9p
ZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllcihSZW5kZXJMYXllciogcm9vdExheWVyLCBHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsCiAjZW5kaWYKIAogICAgIC8vIE5vbiBzZWxmLXBhaW50aW5nIGxl
YWYgbGF5ZXJzIGRvbid0IG5lZWQgdG8gYmUgcGFpbnRlZCBhcyB0aGVpciByZW5kZXJlcigpIHNo
b3VsZCBwcm9wZXJseSBwYWludCBpdHNlbGYuCi0gICAgaWYgKCFpc1NlbGZQYWludGluZ0xheWVy
KCkgJiYgIWZpcnN0Q2hpbGQoKSkKKyAgICBpZiAoIWlzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJiAh
aGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50KCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGlmIChzaG91bGRTdXBwcmVzc1BhaW50aW5nTGF5ZXIodGhpcykpCkBAIC0yOTUyLDYgKzI5OTEs
OCBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyQ29udGVudHNBbmRSZWZsZWN0aW9uKFJl
bmRlckxheWVyKiByb290TGF5ZXIsIEdyYXBoaQogICAgICAgICAgICAgICAgICAgICAgICAgUmVu
ZGVyT2JqZWN0KiBwYWludGluZ1Jvb3QsIFJlbmRlclJlZ2lvbiogcmVnaW9uLCBPdmVybGFwVGVz
dFJlcXVlc3RNYXAqIG92ZXJsYXBUZXN0UmVxdWVzdHMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBQYWludExheWVyRmxhZ3MgcGFpbnRGbGFncykKIHsKKyAgICBBU1NFUlQoaXNTZWxmUGFpbnRp
bmdMYXllcigpIHx8IGhhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudCgpKTsKKwogICAgIFBh
aW50TGF5ZXJGbGFncyBsb2NhbFBhaW50RmxhZ3MgPSBwYWludEZsYWdzICYgfihQYWludExheWVy
QXBwbGllZFRyYW5zZm9ybSk7CiAKICAgICAvLyBQYWludCB0aGUgcmVmbGVjdGlvbiBmaXJzdCBp
ZiB3ZSBoYXZlIG9uZS4KQEAgLTI5NzEsNiArMzAxMiw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBh
aW50TGF5ZXJDb250ZW50cyhSZW5kZXJMYXllciogcm9vdExheWVyLCBHcmFwaGljc0NvbnRleHQq
IGNvCiAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdCwg
UmVuZGVyUmVnaW9uKiByZWdpb24sIE92ZXJsYXBUZXN0UmVxdWVzdE1hcCogb3ZlcmxhcFRlc3RS
ZXF1ZXN0cywKICAgICAgICAgICAgICAgICAgICAgICAgIFBhaW50TGF5ZXJGbGFncyBwYWludEZs
YWdzKQogeworICAgIEFTU0VSVChpc1NlbGZQYWludGluZ0xheWVyKCkgfHwgaGFzU2VsZlBhaW50
aW5nTGF5ZXJEZXNjZW5kYW50KCkpOworCiAgICAgUGFpbnRMYXllckZsYWdzIGxvY2FsUGFpbnRG
bGFncyA9IHBhaW50RmxhZ3MgJiB+KFBhaW50TGF5ZXJBcHBsaWVkVHJhbnNmb3JtKTsKICAgICBi
b29sIGhhdmVUcmFuc3BhcmVuY3kgPSBsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVySGF2ZVRy
YW5zcGFyZW5jeTsKICAgICBib29sIGlzU2VsZlBhaW50aW5nTGF5ZXIgPSB0aGlzLT5pc1NlbGZQ
YWludGluZ0xheWVyKCk7CkBAIC0zMTY1LDYgKzMyMDgsOSBAQCB2b2lkIFJlbmRlckxheWVyOjpw
YWludExpc3QoVmVjdG9yPFJlbmRlckxheWVyKj4qIGxpc3QsIFJlbmRlckxheWVyKiByb290TGF5
ZXIsCiAgICAgaWYgKCFsaXN0KQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoIWhhc1NlbGZQ
YWludGluZ0xheWVyRGVzY2VuZGFudCgpKQorICAgICAgICByZXR1cm47CisKICNpZiAhQVNTRVJU
X0RJU0FCTEVECiAgICAgTGF5ZXJMaXN0TXV0YXRpb25EZXRlY3RvciBtdXRhdGlvbkNoZWNrZXIo
dGhpcyk7CiAjZW5kaWYKQEAgLTQ1MzgsNyArNDU4NCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVw
ZGF0ZU5vcm1hbEZsb3dMaXN0KCkKIAogdm9pZCBSZW5kZXJMYXllcjo6Y29sbGVjdExheWVycyhi
b29sIGluY2x1ZGVIaWRkZW5MYXllcnMsIFZlY3RvcjxSZW5kZXJMYXllcio+KiYgcG9zQnVmZmVy
LCBWZWN0b3I8UmVuZGVyTGF5ZXIqPiomIG5lZ0J1ZmZlcikKIHsKLSAgICB1cGRhdGVWaXNpYmls
aXR5U3RhdHVzKCk7CisgICAgdXBkYXRlRGVzY2VuZGFudERlcGVuZGVudEZsYWdzKCk7CiAKICAg
ICAvLyBPdmVyZmxvdyBsYXllcnMgYXJlIGp1c3QgcGFpbnRlZCBieSB0aGVpciBlbmNsb3Npbmcg
bGF5ZXJzLCBzbyB0aGV5IGRvbid0IGdldCBwdXQgaW4gem9yZGVyIGxpc3RzLgogICAgIGJvb2wg
aW5jbHVkZUhpZGRlbkxheWVyID0gaW5jbHVkZUhpZGRlbkxheWVycyB8fCAobV9oYXNWaXNpYmxl
Q29udGVudCB8fCAobV9oYXNWaXNpYmxlRGVzY2VuZGFudCAmJiBpc1N0YWNraW5nQ29udGV4dCgp
KSk7CkBAIC00Njc0LDYgKzQ3MjAsMjEgQEAgYm9vbCBSZW5kZXJMYXllcjo6c2hvdWxkQmVTZWxm
UGFpbnRpbmdMYXllcigpIGNvbnN0CiAgICAgICAgIHx8IHJlbmRlcmVyKCktPmlzUmVuZGVySUZy
YW1lKCk7CiB9CiAKK3ZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNlbGZQYWludGluZ0xheWVyQWZ0
ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSopCit7CisgICAgYm9vbCBpc1NlbGZQYWlu
dGluZ0xheWVyID0gc2hvdWxkQmVTZWxmUGFpbnRpbmdMYXllcigpOworICAgIGlmIChtX2lzU2Vs
ZlBhaW50aW5nTGF5ZXIgPT0gaXNTZWxmUGFpbnRpbmdMYXllcikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9pc1NlbGZQYWludGluZ0xheWVyID0gaXNTZWxmUGFpbnRpbmdMYXllcjsKKyAgICBp
ZiAoIXBhcmVudCgpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGlzU2VsZlBhaW50aW5nTGF5
ZXIpCisgICAgICAgIHBhcmVudCgpLT5zZXRBbmNlc3RvckNoYWluSGFzU2VsZlBhaW50aW5nTGF5
ZXJEZXNjZW5kYW50KCk7CisgICAgZWxzZQorICAgICAgICBwYXJlbnQoKS0+ZGlydHlBbmNlc3Rv
ckNoYWluSGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50U3RhdHVzKCk7Cit9CisKIHZvaWQg
UmVuZGVyTGF5ZXI6OnVwZGF0ZVN0YWNraW5nQ29udGV4dHNBZnRlclN0eWxlQ2hhbmdlKGNvbnN0
IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKIHsKICAgICBpZiAoIW9sZFN0eWxlKQpAQCAtNDc0NCw4
ICs0ODA1LDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5j
ZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQogICAgICAgICBkaXJ0eVN0YWNraW5nQ29u
dGV4dFpPcmRlckxpc3RzKCk7CiAgICAgfQogCi0gICAgbV9pc1NlbGZQYWludGluZ0xheWVyID0g
c2hvdWxkQmVTZWxmUGFpbnRpbmdMYXllcigpOwotCiAgICAgaWYgKHJlbmRlcmVyKCktPnN0eWxl
KCktPm92ZXJmbG93WCgpID09IE9NQVJRVUVFICYmIHJlbmRlcmVyKCktPnN0eWxlKCktPm1hcnF1
ZWVCZWhhdmlvcigpICE9IE1OT05FICYmIHJlbmRlcmVyKCktPmlzQm94KCkpIHsKICAgICAgICAg
aWYgKCFtX21hcnF1ZWUpCiAgICAgICAgICAgICBtX21hcnF1ZWUgPSBuZXcgUmVuZGVyTWFycXVl
ZSh0aGlzKTsKQEAgLTQ3NTYsNiArNDgxNSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hh
bmdlZChTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKICAgICAg
ICAgbV9tYXJxdWVlID0gMDsKICAgICB9CiAKKyAgICB1cGRhdGVTZWxmUGFpbnRpbmdMYXllckFm
dGVyU3R5bGVDaGFuZ2Uob2xkU3R5bGUpOwogICAgIHVwZGF0ZVN0YWNraW5nQ29udGV4dHNBZnRl
clN0eWxlQ2hhbmdlKG9sZFN0eWxlKTsKICAgICB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNo
YW5nZShvbGRTdHlsZSk7CiAKQEAgLTQ3ODEsNyArNDg0MSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6
OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHls
ZSkKICNlbmRpZgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIHVwZGF0
ZVZpc2liaWxpdHlTdGF0dXMoKTsKKyAgICB1cGRhdGVEZXNjZW5kYW50RGVwZW5kZW50RmxhZ3Mo
KTsKICAgICB1cGRhdGVUcmFuc2Zvcm0oKTsKIAogICAgIGlmIChjb21wb3NpdG9yKCktPnVwZGF0
ZUxheWVyQ29tcG9zaXRpbmdTdGF0ZSh0aGlzKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmgKaW5kZXggMDg3OTFiOWM0NTVhNmQyN2VjYjAyYjAzOWExZDRlY2M2OTk0OWUxNi4u
NWE1ZTI0NDZkNDUxMjk4OTVkZDA4ZmQzNDAyMTQ0MmQ0OGQzZGZhOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyLmgKQEAgLTQ0NCw2ICs0NDQsMTAgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0SGFzVmlzaWJsZUNvbnRlbnQoYm9vbCk7CiAgICAgdm9pZCBkaXJ0eVZpc2libGVD
b250ZW50U3RhdHVzKCk7CiAKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIEFTU0VSVCghbV9oYXNT
ZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnREaXJ0eSk7IGhlcmUgYnV0IHdlIGhpdCB0aGUgc2Ft
ZSBidWdzIGFzIHZpc2libGUgY29udGVudCBhYm92ZS4KKyAgICAvLyBQYXJ0IG9mIHRoZSBpc3N1
ZSBpcyB3aXRoIHN1YnRyZWUgcmVsYXlvdXQ6IHdlIGRvbid0IGNoZWNrIGlmIG91ciBhbmNlc3Rv
cnMgaGF2ZSBzb21lIGRlc2NlbmRhbnQgZmxhZ3MgZGlydHksIG1pc3Npbmcgc29tZSB1cGRhdGVz
LgorICAgIGJvb2wgaGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50KCkgY29uc3QgeyByZXR1
cm4gbV9oYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnQ7IH0KKwogICAgIC8vIEdldHMgdGhl
IG5lYXJlc3QgZW5jbG9zaW5nIHBvc2l0aW9uZWQgYW5jZXN0b3IgbGF5ZXIgKGFsc28gaW5jbHVk
ZXMKICAgICAvLyB0aGUgPGh0bWw+IGxheWVyIGFuZCB0aGUgcm9vdCBsYXllcikuCiAgICAgUmVu
ZGVyTGF5ZXIqIGVuY2xvc2luZ1Bvc2l0aW9uZWRBbmNlc3RvcigpIGNvbnN0OwpAQCAtNjUxLDYg
KzY1NSw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBpc1N0YWNraW5nQ29udGV4dChjb25zdCBSZW5k
ZXJTdHlsZSogc3R5bGUpIGNvbnN0IHsgcmV0dXJuICFzdHlsZS0+aGFzQXV0b1pJbmRleCgpIHx8
IGlzUm9vdExheWVyKCk7IH0KICAgICBib29sIGlzRGlydHlTdGFja2luZ0NvbnRleHQoKSBjb25z
dCB7IHJldHVybiBtX3pPcmRlckxpc3RzRGlydHkgJiYgaXNTdGFja2luZ0NvbnRleHQoKTsgfQog
CisgICAgdm9pZCBzZXRBbmNlc3RvckNoYWluSGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50
KCk7CisgICAgdm9pZCBkaXJ0eUFuY2VzdG9yQ2hhaW5IYXNTZWxmUGFpbnRpbmdMYXllckRlc2Nl
bmRhbnRTdGF0dXMoKTsKKwogICAgIHZvaWQgY29tcHV0ZVJlcGFpbnRSZWN0cyhMYXlvdXRQb2lu
dCogb2Zmc2V0RnJvbVJvb3QgPSAwKTsKICAgICB2b2lkIGNsZWFyUmVwYWludFJlY3RzKCk7CiAK
QEAgLTY2MCw2ICs2NjcsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBzaG91bGRSZXBhaW50QWZ0
ZXJMYXlvdXQoKSBjb25zdDsKIAorICAgIHZvaWQgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXJBZnRl
clN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CiAgICAgdm9pZCB1cGRh
dGVTdGFja2luZ0NvbnRleHRzQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xk
U3R5bGUpOwogCiAgICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShjb25z
dCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwpAQCAtNzc2LDcgKzc4NCw4IEBAIHByaXZhdGU6CiAK
ICAgICB2b2lkIGNoaWxkVmlzaWJpbGl0eUNoYW5nZWQoYm9vbCBuZXdWaXNpYmlsaXR5KTsKICAg
ICB2b2lkIGRpcnR5VmlzaWJsZURlc2NlbmRhbnRTdGF0dXMoKTsKLSAgICB2b2lkIHVwZGF0ZVZp
c2liaWxpdHlTdGF0dXMoKTsKKworICAgIHZvaWQgdXBkYXRlRGVzY2VuZGFudERlcGVuZGVudEZs
YWdzKCk7CiAKICAgICAvLyBUaGlzIGZsYWcgaXMgY29tcHV0ZWQgYnkgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLCB3aGljaCBrbm93cyBtb3JlIGFib3V0IDNkIGhpZXJhcmNoaWVzIHRoYW4gd2UgZG8u
CiAgICAgdm9pZCBzZXRIYXMzRFRyYW5zZm9ybWVkRGVzY2VuZGFudChib29sIGIpIHsgbV9oYXMz
RFRyYW5zZm9ybWVkRGVzY2VuZGFudCA9IGI7IH0KQEAgLTg3Miw2ICs4ODEsMTEgQEAgcHJvdGVj
dGVkOgogCiAgICAgYm9vbCBtX2lzU2VsZlBhaW50aW5nTGF5ZXIgOiAxOwogCisgICAgLy8gSWYg
aGF2ZSBubyBzZWxmLXBhaW50aW5nIGRlc2NlbmRhbnRzLCB3ZSBkb24ndCBoYXZlIHRvIHdhbGsg
b3VyIGNoaWxkcmVuIGR1cmluZyBwYWludGluZy4gVGhpcyBjYW4gbGVhZCB0bworICAgIC8vIHNp
Z25pZmljYW50IHNhdmluZ3MsIGVzcGVjaWFsbHkgaWYgdGhlIHRyZWUgaGFzIGxvdHMgb2Ygbm9u
LXNlbGYtcGFpbnRpbmcgbGF5ZXJzIGdyb3VwZWQgdG9nZXRoZXIgKGUuZy4gdGFibGUgY2VsbHMp
LgorICAgIGJvb2wgbV9oYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnQgOiAxOworICAgIGJv
b2wgbV9oYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnREaXJ0eSA6IDE7CisKICAgICBjb25z
dCBib29sIG1faXNSb290TGF5ZXIgOiAxOwogCiAgICAgYm9vbCBtX3VzZWRUcmFuc3BhcmVuY3kg
OiAxOyAvLyBUcmFja3Mgd2hldGhlciB3ZSBuZWVkIHRvIGNsb3NlIGEgdHJhbnNwYXJlbnQgbGF5
ZXIsIGkuZS4sIHdoZXRoZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckJhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQmFja2luZy5jcHAKaW5kZXggZDU1YzQzMWU1OTZjYzA5ODI2ODFhNGRhODZhYjQyN2Q4MGFk
ODhiMC4uYzg3YmJjZDI0NGRlMjkxZWQ5ZTllYzIwYTI3OGY0MWU4NzNkZmUzNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAgLTQyNCw3
ICs0MjQsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMYXllckdl
b21ldHJ5KCkKICAgICB1cGRhdGVMYXllckZpbHRlcnMocmVuZGVyZXIoKS0+c3R5bGUoKSk7CiAj
ZW5kaWYKICAgICAKLSAgICBtX293bmluZ0xheWVyLT51cGRhdGVWaXNpYmlsaXR5U3RhdHVzKCk7
CisgICAgbV9vd25pbmdMYXllci0+dXBkYXRlRGVzY2VuZGFudERlcGVuZGVudEZsYWdzKCk7CiAK
ICAgICAvLyBtX2dyYXBoaWNzTGF5ZXIgaXMgdGhlIGNvcnJlc3BvbmRpbmcgR3JhcGhpY3NMYXll
ciBmb3IgdGhpcyBSZW5kZXJMYXllciBhbmQgaXRzIG5vbi1jb21wb3NpdGluZwogICAgIC8vIGRl
c2NlbmRhbnRzLiBTbywgdGhlIHZpc2liaWxpdHkgZmxhZyBmb3IgbV9ncmFwaGljc0xheWVyIHNo
b3VsZCBiZSB0cnVlIGlmIHRoZXJlIGFyZSBhbnkK
</data>

          </attachment>
      

    </bug>

</bugzilla>