<?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>79283</bug_id>
          
          <creation_ts>2012-02-22 15:18:17 -0800</creation_ts>
          <short_desc>Add roundToInt method for LayoutUnits</short_desc>
          <delta_ts>2012-03-01 11:33:59 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>https://trac.webkit.org/wiki/LayoutUnit</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>60318</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Levi Weintraub">leviw</reporter>
          <assigned_to name="Levi Weintraub">leviw</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>eae</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>pnormand</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>562442</commentid>
    <comment_count>0</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-02-22 15:18:17 -0800</bug_when>
    <thetext>As specified in https://trac.webkit.org/wiki/LayoutUnit, there are cases where we want to round LayoutUnits to integers. Adding an inline stub function for when we transition to sub-pixel positioning.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562484</commentid>
    <comment_count>1</comment_count>
      <attachid>128310</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-02-22 15:54:57 -0800</bug_when>
    <thetext>Created attachment 128310
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562512</commentid>
    <comment_count>2</comment_count>
      <attachid>128310</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-02-22 16:13:54 -0800</bug_when>
    <thetext>Comment on attachment 128310
Patch

Attachment 128310 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11561657</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562513</commentid>
    <comment_count>3</comment_count>
      <attachid>128320</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-02-22 16:16:52 -0800</bug_when>
    <thetext>Created attachment 128320
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563415</commentid>
    <comment_count>4</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-02-23 13:32:15 -0800</bug_when>
    <thetext>Pinging reviewers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563437</commentid>
    <comment_count>5</comment_count>
      <attachid>128320</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-23 13:54:23 -0800</bug_when>
    <thetext>Comment on attachment 128320
Patch

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

&gt; Source/WebCore/dom/MouseRelatedEvent.cpp:217
&gt; +    return roundToInt(m_offsetLocation.x());

I think we want this to be a member function once that&apos;s practical.  x().round() reads better to me than roundToInt(x()).

&gt; Source/WebCore/rendering/RenderBoxModelObject.h:64
&gt; +    int pixelSnappedOffsetLeft() const { return roundToInt(offsetLeft()); }
&gt; +    int pixelSnappedOffsetTop() const { return roundToInt(offsetTop()); }

Are these really pixel snapped? For left/top these seem OK, but writing right/left accessors the same would clearly be wrong, no?  Shouldn&apos;t we always work from a rect when possible isntead of individual accessors?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563468</commentid>
    <comment_count>6</comment_count>
      <attachid>128320</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-02-23 14:14:15 -0800</bug_when>
    <thetext>Comment on attachment 128320
Patch

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

&gt;&gt; Source/WebCore/dom/MouseRelatedEvent.cpp:217
&gt;&gt; +    return roundToInt(m_offsetLocation.x());
&gt; 
&gt; I think we want this to be a member function once that&apos;s practical.  x().round() reads better to me than roundToInt(x()).

I agree, and am happy to volunteer to do that when this conversion is done. I&apos;d be curious to hear Darin&apos;s opinion though, as he&apos;s felt strongly about these sorts of things in the past.

&gt;&gt; Source/WebCore/rendering/RenderBoxModelObject.h:64
&gt;&gt; +    int pixelSnappedOffsetTop() const { return roundToInt(offsetTop()); }
&gt; 
&gt; Are these really pixel snapped? For left/top these seem OK, but writing right/left accessors the same would clearly be wrong, no?  Shouldn&apos;t we always work from a rect when possible isntead of individual accessors?

You&apos;re picking up correctly that this is okay explicitly because it&apos;s top/left. It&apos;s definitely worth spending some time fixing up callers to avoid breaking rects apart.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563474</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-23 14:21:14 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 128320 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=128320&amp;action=review
&gt; &gt;&gt; Source/WebCore/rendering/RenderBoxModelObject.h:64
&gt; &gt;&gt; +    int pixelSnappedOffsetTop() const { return roundToInt(offsetTop()); }
&gt; &gt; 
&gt; &gt; Are these really pixel snapped? For left/top these seem OK, but writing right/left accessors the same would clearly be wrong, no?  Shouldn&apos;t we always work from a rect when possible isntead of individual accessors?
&gt; 
&gt; You&apos;re picking up correctly that this is okay explicitly because it&apos;s top/left. It&apos;s definitely worth spending some time fixing up callers to avoid breaking rects apart.

We have this general problem all over the rendering tree... which is why it was so great that you and eae started by deploying rect/size wider.  Unfortunately that work is still not really &quot;done&quot; and we&apos;ll need to do more of it after we flip over to fixed point.  I suspect we may not even be able to get the snapping perfect until we plumb whole rects more thoroughly through the system?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563475</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-23 14:22:04 -0800</bug_when>
    <thetext>Then again I may just be riding this pet issue too long, and we already have rect/size sufficiently deployed.  You two would know much better than I these days.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565682</commentid>
    <comment_count>9</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-02-27 08:42:23 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Then again I may just be riding this pet issue too long, and we already have rect/size sufficiently deployed.  You two would know much better than I these days.

I agree there&apos;s likely more work to do in preserving rects throughout rendering, but for what it&apos;s worth, offering pixelSnapped versions can potentially lessen misuse. We actually only use these methods in our branch in PrintContext, from outside rendering code. That sort of use is probably okay.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567877</commentid>
    <comment_count>10</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-02-29 13:33:00 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; Then again I may just be riding this pet issue too long, and we already have rect/size sufficiently deployed.  You two would know much better than I these days.
&gt; 
&gt; I agree there&apos;s likely more work to do in preserving rects throughout rendering, but for what it&apos;s worth, offering pixelSnapped versions can potentially lessen misuse. We actually only use these methods in our branch in PrintContext, from outside rendering code. That sort of use is probably okay.

Is this going to prevent a positive review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567882</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-29 13:37:38 -0800</bug_when>
    <thetext>Nope, just one of many patches forgotten in the queue.  I&apos;ll take another look this afternoon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568118</commentid>
    <comment_count>12</comment_count>
      <attachid>128320</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-29 17:06:22 -0800</bug_when>
    <thetext>Comment on attachment 128320
Patch

OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568664</commentid>
    <comment_count>13</comment_count>
      <attachid>128320</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-03-01 08:01:04 -0800</bug_when>
    <thetext>Comment on attachment 128320
Patch

Thanks Eric!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568704</commentid>
    <comment_count>14</comment_count>
      <attachid>128320</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-01 09:17:15 -0800</bug_when>
    <thetext>Comment on attachment 128320
Patch

Rejecting attachment 128320 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 1

ERROR: /mnt/git/webkit-commit-queue/ChangeLog neither lists a valid reviewer nor contains the string &quot;Unreviewed&quot; or &quot;Rubber stamp&quot; (case insensitive).

Full output: http://queues.webkit.org/results/11779522</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568706</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-01 09:17:51 -0800</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 128320:

perf/array-reverse.html bug 78593 (author: ojan@chromium.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568707</commentid>
    <comment_count>16</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-03-01 09:19:15 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 128320 [details])
&gt; Rejecting attachment 128320 [details] from commit-queue.
&gt; 
&gt; Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 1
&gt; 
&gt; ERROR: /mnt/git/webkit-commit-queue/ChangeLog neither lists a valid reviewer nor contains the string &quot;Unreviewed&quot; or &quot;Rubber stamp&quot; (case insensitive).
&gt; 
&gt; Full output: http://queues.webkit.org/results/11779522

Whoa... it has the line to be filled in. Tools failure? I guess I&apos;ll land manually...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568787</commentid>
    <comment_count>17</comment_count>
      <attachid>128320</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-03-01 11:33:51 -0800</bug_when>
    <thetext>Comment on attachment 128320
Patch

Clearing flags on attachment: 128320

Committed r109378: &lt;http://trac.webkit.org/changeset/109378&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568788</commentid>
    <comment_count>18</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-03-01 11:33:59 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128310</attachid>
            <date>2012-02-22 15:54:57 -0800</date>
            <delta_ts>2012-02-22 16:16:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79283-20120222155456.patch</filename>
            <type>text/plain</type>
            <size>16961</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwODU1OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDEyLTAyLTIyICBMZXZpIFdl
aW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgcm91bmRUb0ludCBt
ZXRob2QgZm9yIExheW91dFVuaXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03OTI4MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZGluZyBhIHJvdW5kVG9JbnQgbWV0aG9kIHRoYXQgcm91bmRzIGEgTGF5
b3V0VW5pdCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyLiBUaGlzCisgICAgICAgIG9ubHkgaGFzIGFu
IGVmZmVjdCBvbmNlIHdlIHN3aXRjaCB0byBzdWItcGl4ZWwgcG9zaXRpb25pbmcuIFBvaW50cyBh
bmQgb2Zmc2V0cworICAgICAgICBhcmUgcm91bmRlZCBmb3IgcGFpbnRpbmcgYW5kIGhpdCB0ZXN0
aW5nLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gTm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisg
ICAgICAgICogZG9tL01vdXNlUmVsYXRlZEV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1v
dXNlUmVsYXRlZEV2ZW50OjpvZmZzZXRYKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vdXNlUmVsYXRl
ZEV2ZW50OjpvZmZzZXRZKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVt
ZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWlu
ZXJFbGVtZW50Ojp1cGRhdGVTaXplcyk6CisgICAgICAgICogcmVuZGVyaW5nL0xheW91dFN0YXRl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dFN0YXRlOjpjb21wdXRlTGluZUdyaWRQYWdp
bmF0aW9uT3JpZ2luKToKKyAgICAgICAgKiByZW5kZXJpbmcvTGF5b3V0VHlwZXMuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OnJvdW5kVG9JbnQpOiBTdHViIHVudGlsIHdlIHN3aXRjaCB0byBzdWItcGl4
ZWwgTGF5b3V0VW5pdHMuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhZ2VMb2dp
Y2FsVG9wRm9yT2Zmc2V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwaXhlbFNuYXBwZWRMb2dpY2FsTGVmdE9mZnNl
dEZvckxpbmUpOiBDb3JyZWN0aW5nIHRvIHVzZSB0aGUKKyAgICAgICAgcGl4ZWwgc25hcHBlZCBt
ZXRob2RzIG9uIEZsb2F0aW5nT2JqZWN0cyBhbmQgcmVtb3ZpbmcgdGhlIGZpeG1lLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBpeGVsU25hcHBlZExvZ2ljYWxUb3BGb3JGbG9hdCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBpeGVsU25hcHBlZExvZ2lj
YWxCb3R0b21Gb3JGbG9hdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OnBpeGVsU25hcHBlZExvZ2ljYWxMZWZ0Rm9yRmxvYXQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjpwaXhlbFNuYXBwZWRMb2dpY2FsUmlnaHRGb3JGbG9hdCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBpeGVsU25hcHBlZExvZ2ljYWxXaWR0
aEZvckZsb2F0KTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxh
eW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMaW5lV2lkdGg6OnVwZGF0ZUF2YWlsYWJsZVdp
ZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjb21wdXRlSW5saW5lRGlyZWN0
aW9uUG9zaXRpb25zRm9yTGluZSk6IFVzaW5nCisgICAgICAgIHBpeGVsU25hcHBlZExvZ2ljYWxM
ZWZ0L1JpZ2h0T2Zmc2V0Rm9yTGluZSBjb252ZW5pZW5jZSBtZXRob2RzIGZvciBsaW5lIGxheW91
dC4gV2hlbgorICAgICAgICB3ZSBzd2l0Y2ggdG8gc3ViLXBpeGVsIHBvc2l0aW9uaW5nLCB3ZSBz
dGlsbCBwaXhlbCBzbmFwIGJsb2NrcyBiZWZvcmUgcGFpbnRpbmcgdGhlbSwKKyAgICAgICAgYnV0
IHRleHQgaXMgcmVuZGVyZWQgdXNpbmcgZmxvYXRzLiBXZSBuZWVkIHRvIGVuc3VyZSB0aGUgdGV4
dCBpcyBsYWlkIG91dCB1c2luZyB0aGUKKyAgICAgICAgYWN0dWFsIHBpeGVsIHdpZHRoIG9mIHRo
ZSBjb250YWluaW5nIGJsb2NrIHRvIGF2b2lkIGJsZWVkaW5nIG91dCBvZiB0aGUgYmxvY2suCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0Lmg6IE1vdmluZyB0aGUgZml4
bWUgdG8gcGl4ZWxTbmFwcGVkV2lkdGgvSGVpZ2h0IGFuZAorICAgICAgICBhZGRpbmcgdGhlIG5l
Y2Vzc2FyeSByb3VuZGluZyBmb3IgTGVmdC9Ub3AuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3hNb2RlbE9iamVjdDo6cGl4ZWxTbmFwcGVkT2Zmc2V0TGVmdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGl4ZWxTbmFwcGVkT2Zmc2V0VG9wKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0
Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNjcm9sbEhlaWdodCk6
IFJvdW5kaW5nIHRoZSBoZWlnaHQgZm9yIHNjcm9sbEhlaWdodC4gU2Nyb2xsaW5nCisgICAgICAg
IGFsd2F5cyB1c2VzIHJvdW5kZWQgdmFsdWVzLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUm9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290Ojpsb2NhbFRv
UGFyZW50VHJhbnNmb3JtKTogU2ltaWxhciB0byB0aGUgbGluZSBib3ggdHJlZSwgc2luY2UKKyAg
ICAgICAgU1ZHIHJlbmRlcnMgdXNpbmcgZmxvYXRzLCB3ZSBuZWVkIHRvIHN0YXJ0IHdpdGggcGl4
ZWwgc25hcHBlZCB2YWx1ZXMgZnJvbSB0aGUgcmVuZGVyCisgICAgICAgIHRyZWUgb3Igd2UnbGwg
ZW5kIHVwIHdpdGggdGhlIGNvbnRlbnRzIG5vdCBwcm9wZXJseSBhbGlnbmVkIHRvIHRoZSByZXN0
IG9mIHRoZSBwYWdlLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJTdXBwb3J0OjpwcmVwYXJlVG9SZW5kZXJT
VkdDb250ZW50KToKKwogMjAxMi0wMi0yMiAgTWF4IFZ1am92aWMgIDxtdnVqb3ZpY0BhZG9iZS5j
b20+CiAKICAgICAgICAgUGFkZGluZ3MgYW5kIGJvcmRlcnMgb24gcm9vdCBTVkcgZWxlbWVudCB3
aXRoIHZpZXdib3ggY2F1c2VzIGNoaWxkIFNWRyBlbGVtZW50cyB0byBiZSByZW5kZXJlZCB3aXRo
IHRoZSBpbmNvcnJlY3Qgc2l6ZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL01vdXNlUmVsYXRl
ZEV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTW91c2VSZWxhdGVk
RXZlbnQuY3BwCShyZXZpc2lvbiAxMDg1MzApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTW91c2VS
ZWxhdGVkRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQsMTQgKzIxNCwxNCBAQCBpbnQg
TW91c2VSZWxhdGVkRXZlbnQ6Om9mZnNldFgoKQogewogICAgIGlmICghbV9oYXNDYWNoZWRSZWxh
dGl2ZVBvc2l0aW9uKQogICAgICAgICBjb21wdXRlUmVsYXRpdmVQb3NpdGlvbigpOwotICAgIHJl
dHVybiBtX29mZnNldExvY2F0aW9uLngoKTsKKyAgICByZXR1cm4gcm91bmRUb0ludChtX29mZnNl
dExvY2F0aW9uLngoKSk7CiB9CiAKIGludCBNb3VzZVJlbGF0ZWRFdmVudDo6b2Zmc2V0WSgpCiB7
CiAgICAgaWYgKCFtX2hhc0NhY2hlZFJlbGF0aXZlUG9zaXRpb24pCiAgICAgICAgIGNvbXB1dGVS
ZWxhdGl2ZVBvc2l0aW9uKCk7Ci0gICAgcmV0dXJuIG1fb2Zmc2V0TG9jYXRpb24ueSgpOworICAg
IHJldHVybiByb3VuZFRvSW50KG1fb2Zmc2V0TG9jYXRpb24ueSgpKTsKIH0KIAogaW50IE1vdXNl
UmVsYXRlZEV2ZW50OjpwYWdlWCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCShyZXZpc2lvbiAxMDg1MzAp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyMTEsNyArMTIxMSw3IEBAIHZvaWQgTWVkaWFDb250cm9sVGV4
dFRyYWNrQ29udGFpbmVyRWxlbWUKICAgICBMYXlvdXRVbml0IGJvdHRvbSA9IHN0YXRpY19jYXN0
PExheW91dFVuaXQ+KG1fdmlkZW9EaXNwbGF5U2l6ZS55KCkgKyBtX3ZpZGVvRGlzcGxheVNpemUu
aGVpZ2h0KCkgLSAobV92aWRlb0Rpc3BsYXlTaXplLmhlaWdodCgpICogdHJhY2tCb3R0b21NdWx0
aXBsaWVyKSk7CiAgICAgaWYgKGJvdHRvbSAhPSBtX2JvdHRvbSkgewogICAgICAgICBtX2JvdHRv
bSA9IGJvdHRvbTsKLSAgICAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUJv
dHRvbSwgU3RyaW5nOjpudW1iZXIoYm90dG9tKSArICJweCIpOworICAgICAgICBzZXRJbmxpbmVT
dHlsZVByb3BlcnR5KENTU1Byb3BlcnR5Qm90dG9tLCBTdHJpbmc6Om51bWJlcihyb3VuZFRvSW50
KGJvdHRvbSkpICsgInB4Iik7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvTGF5b3V0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9MYXlvdXRTdGF0ZS5jcHAJKHJldmlzaW9uIDEwODUzMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4MCw3ICsyODAs
NyBAQCB2b2lkIExheW91dFN0YXRlOjpjb21wdXRlTGluZUdyaWRQYWdpbmF0CiAgICAgICAgIGlm
IChwYWdlTG9naWNhbFRvcCA+IGZpcnN0TGluZVRvcFdpdGhMZWFkaW5nKSB7CiAgICAgICAgICAg
ICAvLyBTaGlmdCB0byB0aGUgbmV4dCBoaWdoZXN0IGxpbmUgZ3JpZCBtdWx0aXBsZSBwYXN0IHRo
ZSBwYWdlIGxvZ2ljYWwgdG9wLiBDYWNoZSB0aGUgZGVsdGEKICAgICAgICAgICAgIC8vIGJldHdl
ZW4gdGhpcyBuZXcgdmFsdWUgYW5kIHRoZSBwYWdlIGxvZ2ljYWwgdG9wIGFzIHRoZSBwYWdpbmF0
aW9uIG9yaWdpbi4KLSAgICAgICAgICAgIExheW91dFVuaXQgcmVtYWluZGVyID0gKHBhZ2VMb2dp
Y2FsVG9wIC0gZmlyc3RMaW5lVG9wV2l0aExlYWRpbmcpICUgZ3JpZExpbmVIZWlnaHQ7CisgICAg
ICAgICAgICBMYXlvdXRVbml0IHJlbWFpbmRlciA9IHJvdW5kVG9JbnQocGFnZUxvZ2ljYWxUb3Ag
LSBmaXJzdExpbmVUb3BXaXRoTGVhZGluZykgJSByb3VuZFRvSW50KGdyaWRMaW5lSGVpZ2h0KTsK
ICAgICAgICAgICAgIExheW91dFVuaXQgcGFnaW5hdGlvbkRlbHRhID0gZ3JpZExpbmVIZWlnaHQg
LSByZW1haW5kZXI7CiAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpCiAg
ICAgICAgICAgICAgICAgbV9saW5lR3JpZFBhZ2luYXRpb25PcmlnaW4uc2V0SGVpZ2h0KHBhZ2lu
YXRpb25EZWx0YSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0VHlwZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0VHlwZXMuaAko
cmV2aXNpb24gMTA4NTMwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFR5cGVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDExIEBAIGlubGluZSBMYXlvdXRTaXplIGZs
b29yZWRMYXlvdXRTaXplKGNvbnMKICAgICByZXR1cm4gTGF5b3V0U2l6ZShzdGF0aWNfY2FzdDxp
bnQ+KHAueCgpKSwgc3RhdGljX2Nhc3Q8aW50PihwLnkoKSkpOwogfQogCitpbmxpbmUgaW50IHJv
dW5kVG9JbnQoTGF5b3V0VW5pdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKIGlu
bGluZSBMYXlvdXRVbml0IHJvdW5kZWRMYXlvdXRVbml0KGZsb2F0IHZhbHVlKQogewogICAgIHJl
dHVybiBscm91bmRmKHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmNwcAkocmV2aXNpb24gMTA4NTMwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIyOCw3ICs1MjI4LDcgQEAgc3Rh
dGljIGlubGluZSB2b2lkIHN0cmlwVHJhaWxpbmdTcGFjZShmbAogCiBzdGF0aWMgaW5saW5lIHZv
aWQgdXBkYXRlUHJlZmVycmVkV2lkdGgoTGF5b3V0VW5pdCYgcHJlZmVycmVkV2lkdGgsIGZsb2F0
JiByZXN1bHQpCiB7Ci0gICAgTGF5b3V0VW5pdCBzbmFwcGVkUmVzdWx0ID0gY2VpbGVkTGF5b3V0
VW5pdChyZXN1bHQpOworICAgIExheW91dFVuaXQgc25hcHBlZFJlc3VsdCA9IGNlaWxlZGxheW91
dFVuaXQocmVzdWx0KTsKICAgICBwcmVmZXJyZWRXaWR0aCA9IG1heChzbmFwcGVkUmVzdWx0LCBw
cmVmZXJyZWRXaWR0aCk7CiB9CiAKQEAgLTY1NTAsNyArNjU1MCw3IEBAIExheW91dFVuaXQgUmVu
ZGVyQmxvY2s6OnBhZ2VMb2dpY2FsVG9wRm8KICAgICAgICAgTGF5b3V0VW5pdCBwYWdlTG9naWNh
bEhlaWdodCA9IHJlbmRlclZpZXctPmxheW91dFN0YXRlKCktPnBhZ2VMb2dpY2FsSGVpZ2h0KCk7
CiAgICAgICAgIGlmICghcGFnZUxvZ2ljYWxIZWlnaHQpCiAgICAgICAgICAgICByZXR1cm4gMDsK
LSAgICAgICAgcmV0dXJuIGN1bXVsYXRpdmVPZmZzZXQgLSAoY3VtdWxhdGl2ZU9mZnNldCAtIGZp
cnN0UGFnZUxvZ2ljYWxUb3ApICUgcGFnZUxvZ2ljYWxIZWlnaHQ7CisgICAgICAgIHJldHVybiBj
dW11bGF0aXZlT2Zmc2V0IC0gcm91bmRUb0ludChjdW11bGF0aXZlT2Zmc2V0IC0gZmlyc3RQYWdl
TG9naWNhbFRvcCkgJSByb3VuZFRvSW50KHBhZ2VMb2dpY2FsSGVpZ2h0KTsKICAgICB9CiAgICAg
cmV0dXJuIGVuY2xvc2luZ1JlbmRlckZsb3dUaHJlYWQoKS0+cmVnaW9uTG9naWNhbFRvcEZvckxp
bmUoY3VtdWxhdGl2ZU9mZnNldCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suaAkocmV2aXNpb24gMTA4NTMwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Miw3ICsxODIsNyBAQCBwdWJsaWM6
CiAKICAgICBpbnQgcGl4ZWxTbmFwcGVkTG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKExheW91dFVu
aXQgcG9zaXRpb24sIGJvb2wgZmlyc3RMaW5lKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJu
IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwgbG9naWNhbExlZnRPZmZzZXRGb3JD
b250ZW50KHBvc2l0aW9uKSwgZmlyc3RMaW5lLCAwKTsKKyAgICAgICAgcmV0dXJuIHJvdW5kVG9J
bnQobG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKHBvc2l0aW9uLCBsb2dpY2FsTGVmdE9mZnNldEZv
ckNvbnRlbnQocG9zaXRpb24pLCBmaXJzdExpbmUsIDApKTsKICAgICB9CiAgICAgCiAgICAgTGF5
b3V0VW5pdCBzdGFydEFsaWduZWRPZmZzZXRGb3JMaW5lKFJlbmRlckJveCogY2hpbGQsIExheW91
dFVuaXQgcG9zaXRpb24sIGJvb2wgZmlyc3RMaW5lKTsKQEAgLTYzNCwxMSArNjM0LDExIEBAIHBy
aXZhdGU6CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRGb3JGbG9hdChjb25zdCBGbG9hdGlu
Z09iamVjdCogY2hpbGQpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
PyBjaGlsZC0+bWF4WCgpIDogY2hpbGQtPm1heFkoKTsgfQogICAgIExheW91dFVuaXQgbG9naWNh
bFdpZHRoRm9yRmxvYXQoY29uc3QgRmxvYXRpbmdPYmplY3QqIGNoaWxkKSBjb25zdCB7IHJldHVy
biBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY2hpbGQtPndpZHRoKCkgOiBjaGlsZC0+aGVp
Z2h0KCk7IH0KIAotICAgIC8vIEZJWE1FOiBUaGUgaW1wbGVtZW50YXRpb24gZm9yIHRoZXNlIGZ1
bmN0aW9ucyB3aWxsIGNoYW5nZSBvbmNlIHdlIG1vdmUgdG8gc3VicGl4ZWwgbGF5b3V0LiBTZWUg
YnVnIDYwMzE4LgotICAgIGludCBwaXhlbFNuYXBwZWRMb2dpY2FsVG9wRm9yRmxvYXQoY29uc3Qg
RmxvYXRpbmdPYmplY3QqIGNoaWxkKSBjb25zdCB7IHJldHVybiBsb2dpY2FsVG9wRm9yRmxvYXQo
Y2hpbGQpOyB9Ci0gICAgaW50IHBpeGVsU25hcHBlZExvZ2ljYWxCb3R0b21Gb3JGbG9hdChjb25z
dCBGbG9hdGluZ09iamVjdCogY2hpbGQpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxCb3R0b21Gb3JG
bG9hdChjaGlsZCk7IH0KLSAgICBpbnQgcGl4ZWxTbmFwcGVkTG9naWNhbExlZnRGb3JGbG9hdChj
b25zdCBGbG9hdGluZ09iamVjdCogY2hpbGQpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxMZWZ0Rm9y
RmxvYXQoY2hpbGQpOyB9Ci0gICAgaW50IHBpeGVsU25hcHBlZExvZ2ljYWxSaWdodEZvckZsb2F0
KGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBjaGlsZCkgY29uc3QgeyByZXR1cm4gbG9naWNhbFJpZ2h0
Rm9yRmxvYXQoY2hpbGQpOyB9CisgICAgaW50IHBpeGVsU25hcHBlZExvZ2ljYWxUb3BGb3JGbG9h
dChjb25zdCBGbG9hdGluZ09iamVjdCogY2hpbGQpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkgPyBjaGlsZC0+cGl4ZWxTbmFwcGVkWSgpIDogY2hpbGQtPnBpeGVsU25h
cHBlZFgoKTsgfQorICAgIGludCBwaXhlbFNuYXBwZWRMb2dpY2FsQm90dG9tRm9yRmxvYXQoY29u
c3QgRmxvYXRpbmdPYmplY3QqIGNoaWxkKSBjb25zdCB7IHJldHVybiBpc0hvcml6b250YWxXcml0
aW5nTW9kZSgpID8gY2hpbGQtPnBpeGVsU25hcHBlZE1heFkoKSA6IGNoaWxkLT5waXhlbFNuYXBw
ZWRNYXhYKCk7IH0KKyAgICBpbnQgcGl4ZWxTbmFwcGVkTG9naWNhbExlZnRGb3JGbG9hdChjb25z
dCBGbG9hdGluZ09iamVjdCogY2hpbGQpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkgPyBjaGlsZC0+cGl4ZWxTbmFwcGVkWCgpIDogY2hpbGQtPnBpeGVsU25hcHBlZFko
KTsgfQorICAgIGludCBwaXhlbFNuYXBwZWRMb2dpY2FsUmlnaHRGb3JGbG9hdChjb25zdCBGbG9h
dGluZ09iamVjdCogY2hpbGQpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgPyBjaGlsZC0+cGl4ZWxTbmFwcGVkTWF4WCgpIDogY2hpbGQtPnBpeGVsU25hcHBlZE1heFko
KTsgfQorICAgIGludCBwaXhlbFNuYXBwZWRMb2dpY2FsV2lkdGhGb3JGbG9hdChjb25zdCBGbG9h
dGluZ09iamVjdCogY2hpbGQpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgPyBjaGlsZC0+cGl4ZWxTbmFwcGVkV2lkdGgoKSA6IGNoaWxkLT5waXhlbFNuYXBwZWRIZWln
aHQoKTsgfQogCiAgICAgdm9pZCBzZXRMb2dpY2FsVG9wRm9yRmxvYXQoRmxvYXRpbmdPYmplY3Qq
IGNoaWxkLCBMYXlvdXRVbml0IGxvZ2ljYWxUb3ApCiAgICAgewpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJKHJldmlzaW9u
IDEwODUzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlv
dXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsOSArMTE0LDkgQEAgcHJpdmF0ZToKIAogaW5s
aW5lIHZvaWQgTGluZVdpZHRoOjp1cGRhdGVBdmFpbGFibGVXaWR0aCgpCiB7Ci0gICAgaW50IGhl
aWdodCA9IG1fYmxvY2stPmxvZ2ljYWxIZWlnaHQoKTsKLSAgICBtX2xlZnQgPSBtX2Jsb2NrLT5s
b2dpY2FsTGVmdE9mZnNldEZvckxpbmUoaGVpZ2h0LCBtX2lzRmlyc3RMaW5lKTsKLSAgICBtX3Jp
Z2h0ID0gbV9ibG9jay0+bG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShoZWlnaHQsIG1faXNGaXJz
dExpbmUpOworICAgIExheW91dFVuaXQgaGVpZ2h0ID0gbV9ibG9jay0+bG9naWNhbEhlaWdodCgp
OworICAgIG1fbGVmdCA9IG1fYmxvY2stPnBpeGVsU25hcHBlZExvZ2ljYWxMZWZ0T2Zmc2V0Rm9y
TGluZShoZWlnaHQsIG1faXNGaXJzdExpbmUpOworICAgIG1fcmlnaHQgPSBtX2Jsb2NrLT5waXhl
bFNuYXBwZWRMb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKGhlaWdodCwgbV9pc0ZpcnN0TGluZSk7
CiAKICAgICBjb21wdXRlQXZhaWxhYmxlV2lkdGhGcm9tTGVmdEFuZFJpZ2h0KCk7CiB9CkBAIC03
NTksOCArNzU5LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZUlubGluZURpcmVjdGlvbgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXAmIHRleHRCb3hEYXRhTWFwLCBWZXJ0aWNh
bFBvc2l0aW9uQ2FjaGUmIHZlcnRpY2FsUG9zaXRpb25DYWNoZSkKIHsKICAgICBFVGV4dEFsaWdu
IHRleHRBbGlnbiA9IHRleHRBbGlnbm1lbnRGb3JMaW5lKCFyZWFjaGVkRW5kICYmICFsaW5lQm94
LT5lbmRzV2l0aEJyZWFrKCkpOwotICAgIGZsb2F0IGxvZ2ljYWxMZWZ0ID0gbG9naWNhbExlZnRP
ZmZzZXRGb3JMaW5lKGxvZ2ljYWxIZWlnaHQoKSwgbGluZUluZm8uaXNGaXJzdExpbmUoKSk7Ci0g
ICAgZmxvYXQgYXZhaWxhYmxlTG9naWNhbFdpZHRoID0gbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGlu
ZShsb2dpY2FsSGVpZ2h0KCksIGxpbmVJbmZvLmlzRmlyc3RMaW5lKCkpIC0gbG9naWNhbExlZnQ7
CisgICAgZmxvYXQgbG9naWNhbExlZnQgPSBwaXhlbFNuYXBwZWRMb2dpY2FsTGVmdE9mZnNldEZv
ckxpbmUobG9naWNhbEhlaWdodCgpLCBsaW5lSW5mby5pc0ZpcnN0TGluZSgpKTsKKyAgICBmbG9h
dCBhdmFpbGFibGVMb2dpY2FsV2lkdGggPSBwaXhlbFNuYXBwZWRMb2dpY2FsUmlnaHRPZmZzZXRG
b3JMaW5lKGxvZ2ljYWxIZWlnaHQoKSwgbGluZUluZm8uaXNGaXJzdExpbmUoKSkgLSBsb2dpY2Fs
TGVmdDsKIAogICAgIGJvb2wgbmVlZHNXb3JkU3BhY2luZyA9IGZhbHNlOwogICAgIGZsb2F0IHRv
dGFsTG9naWNhbFdpZHRoID0gbGluZUJveC0+Z2V0Rmxvd1NwYWNpbmdMb2dpY2FsV2lkdGgoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5oCShyZXZpc2lvbiAxMDg1MzApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94TW9kZWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsOSArNjAsOSBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBMYXlvdXRVbml0IG9mZnNldFdpZHRoKCkgY29uc3QgPSAwOwogICAgIHZp
cnR1YWwgTGF5b3V0VW5pdCBvZmZzZXRIZWlnaHQoKSBjb25zdCA9IDA7CiAKKyAgICBpbnQgcGl4
ZWxTbmFwcGVkT2Zmc2V0TGVmdCgpIGNvbnN0IHsgcmV0dXJuIHJvdW5kVG9JbnQob2Zmc2V0TGVm
dCgpKTsgfQorICAgIGludCBwaXhlbFNuYXBwZWRPZmZzZXRUb3AoKSBjb25zdCB7IHJldHVybiBy
b3VuZFRvSW50KG9mZnNldFRvcCgpKTsgfQogICAgIC8vIEZJWE1FOiBUaGUgaW1wbGVtZW50YXRp
b24gZm9yIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGNoYW5nZSBvbmNlIHdlIG1vdmUgdG8gc3VicGl4
ZWwgbGF5b3V0LiBTZWUgYnVnIDYwMzE4LgotICAgIGludCBwaXhlbFNuYXBwZWRPZmZzZXRMZWZ0
KCkgY29uc3QgeyByZXR1cm4gb2Zmc2V0TGVmdCgpOyB9Ci0gICAgaW50IHBpeGVsU25hcHBlZE9m
ZnNldFRvcCgpIGNvbnN0IHsgcmV0dXJuIG9mZnNldFRvcCgpOyB9CiAgICAgaW50IHBpeGVsU25h
cHBlZE9mZnNldFdpZHRoKCkgY29uc3Q7CiAgICAgaW50IHBpeGVsU25hcHBlZE9mZnNldEhlaWdo
dCgpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5j
cHAJKHJldmlzaW9uIDEwODUzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NDYsMTEgKzE1NDYsMTQgQEAgdm9pZCBSZW5k
ZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJsZShjbwogICAgICAgICBMYXlvdXRSZWN0IGV4cG9z
ZVJlY3QgPSBMYXlvdXRSZWN0KHJlY3QueCgpICsgc2Nyb2xsWE9mZnNldCgpLCByZWN0LnkoKSAr
IHNjcm9sbFlPZmZzZXQoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKICAgICAgICAg
TGF5b3V0UmVjdCByID0gZ2V0UmVjdFRvRXhwb3NlKGxheWVyQm91bmRzLCBleHBvc2VSZWN0LCBh
bGlnblgsIGFsaWduWSk7CiAgICAgICAgIAotICAgICAgICBMYXlvdXRVbml0IHhPZmZzZXQgPSBy
LngoKSAtIGFic1Bvcy54KCk7Ci0gICAgICAgIExheW91dFVuaXQgeU9mZnNldCA9IHIueSgpIC0g
YWJzUG9zLnkoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBhZGp1c3RlZFggPSByLngoKSAtIGFic1Bv
cy54KCk7CisgICAgICAgIExheW91dFVuaXQgYWRqdXN0ZWRZID0gci55KCkgLSBhYnNQb3MueSgp
OwogICAgICAgICAvLyBBZGp1c3Qgb2Zmc2V0cyBpZiB0aGV5J3JlIG91dHNpZGUgb2YgdGhlIGFs
bG93YWJsZSByYW5nZS4KLSAgICAgICAgeE9mZnNldCA9IG1heDxMYXlvdXRVbml0PigwLCBtaW4o
c2Nyb2xsV2lkdGgoKSAtIGxheWVyQm91bmRzLndpZHRoKCksIHhPZmZzZXQpKTsKLSAgICAgICAg
eU9mZnNldCA9IG1heDxMYXlvdXRVbml0PigwLCBtaW4oc2Nyb2xsSGVpZ2h0KCkgLSBsYXllckJv
dW5kcy5oZWlnaHQoKSwgeU9mZnNldCkpOworICAgICAgICBhZGp1c3RlZFggPSBtYXg8TGF5b3V0
VW5pdD4oMCwgbWluKHNjcm9sbFdpZHRoKCkgLSBsYXllckJvdW5kcy53aWR0aCgpLCBhZGp1c3Rl
ZFgpKTsKKyAgICAgICAgYWRqdXN0ZWRZID0gbWF4PExheW91dFVuaXQ+KDAsIG1pbihzY3JvbGxI
ZWlnaHQoKSAtIGxheWVyQm91bmRzLmhlaWdodCgpLCBhZGp1c3RlZFkpKTsKKworICAgICAgICBp
bnQgeE9mZnNldCA9IHJvdW5kVG9JbnQoYWRqdXN0ZWRYKTsKKyAgICAgICAgaW50IHlPZmZzZXQg
PSByb3VuZFRvSW50KGFkanVzdGVkWSk7CiAgICAgICAgIAogICAgICAgICBpZiAoeE9mZnNldCAh
PSBzY3JvbGxYT2Zmc2V0KCkgfHwgeU9mZnNldCAhPSBzY3JvbGxZT2Zmc2V0KCkpIHsKICAgICAg
ICAgICAgIExheW91dFVuaXQgZGlmZlggPSBzY3JvbGxYT2Zmc2V0KCk7CkBAIC0xNTc3LDggKzE1
ODAsOCBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvCiAgICAgICAg
ICAgICAgICAgICAgIExheW91dFJlY3Qgdmlld1JlY3QgPSBmcmFtZVZpZXctPnZpc2libGVDb250
ZW50UmVjdCgpOwogICAgICAgICAgICAgICAgICAgICBMYXlvdXRSZWN0IGV4cG9zZVJlY3QgPSBn
ZXRSZWN0VG9FeHBvc2Uodmlld1JlY3QsIHJlY3QsIGFsaWduWCwgYWxpZ25ZKTsKIAotICAgICAg
ICAgICAgICAgICAgICBMYXlvdXRVbml0IHhPZmZzZXQgPSBleHBvc2VSZWN0LngoKTsKLSAgICAg
ICAgICAgICAgICAgICAgTGF5b3V0VW5pdCB5T2Zmc2V0ID0gZXhwb3NlUmVjdC55KCk7CisgICAg
ICAgICAgICAgICAgICAgIGludCB4T2Zmc2V0ID0gcm91bmRUb0ludChleHBvc2VSZWN0LngoKSk7
CisgICAgICAgICAgICAgICAgICAgIGludCB5T2Zmc2V0ID0gcm91bmRUb0ludChleHBvc2VSZWN0
LnkoKSk7CiAgICAgICAgICAgICAgICAgICAgIC8vIEFkanVzdCBvZmZzZXRzIGlmIHRoZXkncmUg
b3V0c2lkZSBvZiB0aGUgYWxsb3dhYmxlIHJhbmdlLgogICAgICAgICAgICAgICAgICAgICB4T2Zm
c2V0ID0gbWF4PExheW91dFVuaXQ+KDAsIG1pbihmcmFtZVZpZXctPmNvbnRlbnRzV2lkdGgoKSwg
eE9mZnNldCkpOwogICAgICAgICAgICAgICAgICAgICB5T2Zmc2V0ID0gbWF4PExheW91dFVuaXQ+
KDAsIG1pbihmcmFtZVZpZXctPmNvbnRlbnRzSGVpZ2h0KCksIHlPZmZzZXQpKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHJldmlzaW9uIDEwODUz
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjUxLDcgKzY1MSw3IEBAIExheW91dFVuaXQgUmVuZGVyTGlzdEJveDo6c2Ny
b2xsV2lkdGgoKSAKIAogaW50IFJlbmRlckxpc3RCb3g6OnNjcm9sbEhlaWdodCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1heChwaXhlbFNuYXBwZWRDbGllbnRIZWlnaHQoKSwgbGlzdEhlaWdodCgp
KTsKKyAgICByZXR1cm4gbWF4KHBpeGVsU25hcHBlZENsaWVudEhlaWdodCgpLCByb3VuZFRvSW50
KGxpc3RIZWlnaHQoKSkpOwogfQogCiBpbnQgUmVuZGVyTGlzdEJveDo6c2Nyb2xsTGVmdCgpIGNv
bnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9v
dC5jcHAJKHJldmlzaW9uIDEwODUzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUm9vdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNyw5ICszMTcsOSBAQCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIFJlbmRlclNWR1Jvb3Q6OmxvCiAgICAgLy8gU2xpZ2h0bHkgb3B0
aW1pemVkIHZlcnNpb24gb2YgbV9sb2NhbFRvUGFyZW50VHJhbnNmb3JtID0gQWZmaW5lVHJhbnNm
b3JtOjp0cmFuc2xhdGlvbih4KCksIHkoKSkgKiBtX2xvY2FsVG9Cb3JkZXJCb3hUcmFuc2Zvcm07
CiAgICAgbV9sb2NhbFRvUGFyZW50VHJhbnNmb3JtID0gbV9sb2NhbFRvQm9yZGVyQm94VHJhbnNm
b3JtOwogICAgIGlmICh4KCkpCi0gICAgICAgIG1fbG9jYWxUb1BhcmVudFRyYW5zZm9ybS5zZXRF
KG1fbG9jYWxUb1BhcmVudFRyYW5zZm9ybS5lKCkgKyB4KCkpOworICAgICAgICBtX2xvY2FsVG9Q
YXJlbnRUcmFuc2Zvcm0uc2V0RShtX2xvY2FsVG9QYXJlbnRUcmFuc2Zvcm0uZSgpICsgcm91bmRU
b0ludCh4KCkpKTsKICAgICBpZiAoeSgpKQotICAgICAgICBtX2xvY2FsVG9QYXJlbnRUcmFuc2Zv
cm0uc2V0RihtX2xvY2FsVG9QYXJlbnRUcmFuc2Zvcm0uZigpICsgeSgpKTsKKyAgICAgICAgbV9s
b2NhbFRvUGFyZW50VHJhbnNmb3JtLnNldEYobV9sb2NhbFRvUGFyZW50VHJhbnNmb3JtLmYoKSAr
IHJvdW5kVG9JbnQoeSgpKSk7CiAgICAgcmV0dXJuIG1fbG9jYWxUb1BhcmVudFRyYW5zZm9ybTsK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRl
clN1cHBvcnQuY3BwCShyZXZpc2lvbiAxMDg1MzApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNyArMTEw
LDcgQEAgYm9vbCBTVkdSZW5kZXJTdXBwb3J0OjpwcmVwYXJlVG9SZW5kZXJTVgogCiAgICAgICAg
IGlmIChzaGFkb3cpIHsKICAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5jbGlwKHJlcGFp
bnRSZWN0KTsKLSAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRTaGFkb3coSW50U2l6
ZShzaGFkb3ctPngoKSwgc2hhZG93LT55KCkpLCBzaGFkb3ctPmJsdXIoKSwgc2hhZG93LT5jb2xv
cigpLCBzdHlsZS0+Y29sb3JTcGFjZSgpKTsKKyAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0
LT5zZXRTaGFkb3coSW50U2l6ZShyb3VuZFRvSW50KHNoYWRvdy0+eCgpKSwgcm91bmRUb0ludChz
aGFkb3ctPnkoKSkpLCBzaGFkb3ctPmJsdXIoKSwgc2hhZG93LT5jb2xvcigpLCBzdHlsZS0+Y29s
b3JTcGFjZSgpKTsKICAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5iZWdpblRyYW5zcGFy
ZW5jeUxheWVyKDEpOwogICAgICAgICB9CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128320</attachid>
            <date>2012-02-22 16:16:52 -0800</date>
            <delta_ts>2012-03-01 11:33:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79283-20120222161651.patch</filename>
            <type>text/plain</type>
            <size>16630</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwODU1OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDEyLTAyLTIyICBMZXZpIFdl
aW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgcm91bmRUb0ludCBt
ZXRob2QgZm9yIExheW91dFVuaXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03OTI4MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZGluZyBhIHJvdW5kVG9JbnQgbWV0aG9kIHRoYXQgcm91bmRzIGEgTGF5
b3V0VW5pdCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyLiBUaGlzCisgICAgICAgIG9ubHkgaGFzIGFu
IGVmZmVjdCBvbmNlIHdlIHN3aXRjaCB0byBzdWItcGl4ZWwgcG9zaXRpb25pbmcuIFBvaW50cyBh
bmQgb2Zmc2V0cworICAgICAgICBhcmUgcm91bmRlZCBmb3IgcGFpbnRpbmcgYW5kIGhpdCB0ZXN0
aW5nLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gTm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisg
ICAgICAgICogZG9tL01vdXNlUmVsYXRlZEV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1v
dXNlUmVsYXRlZEV2ZW50OjpvZmZzZXRYKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vdXNlUmVsYXRl
ZEV2ZW50OjpvZmZzZXRZKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVt
ZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWlu
ZXJFbGVtZW50Ojp1cGRhdGVTaXplcyk6CisgICAgICAgICogcmVuZGVyaW5nL0xheW91dFN0YXRl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dFN0YXRlOjpjb21wdXRlTGluZUdyaWRQYWdp
bmF0aW9uT3JpZ2luKToKKyAgICAgICAgKiByZW5kZXJpbmcvTGF5b3V0VHlwZXMuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OnJvdW5kVG9JbnQpOiBTdHViIHVudGlsIHdlIHN3aXRjaCB0byBzdWItcGl4
ZWwgTGF5b3V0VW5pdHMuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhZ2VMb2dp
Y2FsVG9wRm9yT2Zmc2V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwaXhlbFNuYXBwZWRMb2dpY2FsTGVmdE9mZnNl
dEZvckxpbmUpOiBDb3JyZWN0aW5nIHRvIHVzZSB0aGUKKyAgICAgICAgcGl4ZWwgc25hcHBlZCBt
ZXRob2RzIG9uIEZsb2F0aW5nT2JqZWN0cyBhbmQgcmVtb3ZpbmcgdGhlIGZpeG1lLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBpeGVsU25hcHBlZExvZ2ljYWxUb3BGb3JGbG9hdCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBpeGVsU25hcHBlZExvZ2lj
YWxCb3R0b21Gb3JGbG9hdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OnBpeGVsU25hcHBlZExvZ2ljYWxMZWZ0Rm9yRmxvYXQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjpwaXhlbFNuYXBwZWRMb2dpY2FsUmlnaHRGb3JGbG9hdCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBpeGVsU25hcHBlZExvZ2ljYWxXaWR0
aEZvckZsb2F0KTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxh
eW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMaW5lV2lkdGg6OnVwZGF0ZUF2YWlsYWJsZVdp
ZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjb21wdXRlSW5saW5lRGlyZWN0
aW9uUG9zaXRpb25zRm9yTGluZSk6IFVzaW5nCisgICAgICAgIHBpeGVsU25hcHBlZExvZ2ljYWxM
ZWZ0L1JpZ2h0T2Zmc2V0Rm9yTGluZSBjb252ZW5pZW5jZSBtZXRob2RzIGZvciBsaW5lIGxheW91
dC4gV2hlbgorICAgICAgICB3ZSBzd2l0Y2ggdG8gc3ViLXBpeGVsIHBvc2l0aW9uaW5nLCB3ZSBz
dGlsbCBwaXhlbCBzbmFwIGJsb2NrcyBiZWZvcmUgcGFpbnRpbmcgdGhlbSwKKyAgICAgICAgYnV0
IHRleHQgaXMgcmVuZGVyZWQgdXNpbmcgZmxvYXRzLiBXZSBuZWVkIHRvIGVuc3VyZSB0aGUgdGV4
dCBpcyBsYWlkIG91dCB1c2luZyB0aGUKKyAgICAgICAgYWN0dWFsIHBpeGVsIHdpZHRoIG9mIHRo
ZSBjb250YWluaW5nIGJsb2NrIHRvIGF2b2lkIGJsZWVkaW5nIG91dCBvZiB0aGUgYmxvY2suCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0Lmg6IE1vdmluZyB0aGUgZml4
bWUgdG8gcGl4ZWxTbmFwcGVkV2lkdGgvSGVpZ2h0IGFuZAorICAgICAgICBhZGRpbmcgdGhlIG5l
Y2Vzc2FyeSByb3VuZGluZyBmb3IgTGVmdC9Ub3AuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3hNb2RlbE9iamVjdDo6cGl4ZWxTbmFwcGVkT2Zmc2V0TGVmdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGl4ZWxTbmFwcGVkT2Zmc2V0VG9wKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0
Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNjcm9sbEhlaWdodCk6
IFJvdW5kaW5nIHRoZSBoZWlnaHQgZm9yIHNjcm9sbEhlaWdodC4gU2Nyb2xsaW5nCisgICAgICAg
IGFsd2F5cyB1c2VzIHJvdW5kZWQgdmFsdWVzLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUm9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290Ojpsb2NhbFRv
UGFyZW50VHJhbnNmb3JtKTogU2ltaWxhciB0byB0aGUgbGluZSBib3ggdHJlZSwgc2luY2UKKyAg
ICAgICAgU1ZHIHJlbmRlcnMgdXNpbmcgZmxvYXRzLCB3ZSBuZWVkIHRvIHN0YXJ0IHdpdGggcGl4
ZWwgc25hcHBlZCB2YWx1ZXMgZnJvbSB0aGUgcmVuZGVyCisgICAgICAgIHRyZWUgb3Igd2UnbGwg
ZW5kIHVwIHdpdGggdGhlIGNvbnRlbnRzIG5vdCBwcm9wZXJseSBhbGlnbmVkIHRvIHRoZSByZXN0
IG9mIHRoZSBwYWdlLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJTdXBwb3J0OjpwcmVwYXJlVG9SZW5kZXJT
VkdDb250ZW50KToKKwogMjAxMi0wMi0yMiAgTWF4IFZ1am92aWMgIDxtdnVqb3ZpY0BhZG9iZS5j
b20+CiAKICAgICAgICAgUGFkZGluZ3MgYW5kIGJvcmRlcnMgb24gcm9vdCBTVkcgZWxlbWVudCB3
aXRoIHZpZXdib3ggY2F1c2VzIGNoaWxkIFNWRyBlbGVtZW50cyB0byBiZSByZW5kZXJlZCB3aXRo
IHRoZSBpbmNvcnJlY3Qgc2l6ZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL01vdXNlUmVsYXRl
ZEV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTW91c2VSZWxhdGVk
RXZlbnQuY3BwCShyZXZpc2lvbiAxMDg1MzApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTW91c2VS
ZWxhdGVkRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQsMTQgKzIxNCwxNCBAQCBpbnQg
TW91c2VSZWxhdGVkRXZlbnQ6Om9mZnNldFgoKQogewogICAgIGlmICghbV9oYXNDYWNoZWRSZWxh
dGl2ZVBvc2l0aW9uKQogICAgICAgICBjb21wdXRlUmVsYXRpdmVQb3NpdGlvbigpOwotICAgIHJl
dHVybiBtX29mZnNldExvY2F0aW9uLngoKTsKKyAgICByZXR1cm4gcm91bmRUb0ludChtX29mZnNl
dExvY2F0aW9uLngoKSk7CiB9CiAKIGludCBNb3VzZVJlbGF0ZWRFdmVudDo6b2Zmc2V0WSgpCiB7
CiAgICAgaWYgKCFtX2hhc0NhY2hlZFJlbGF0aXZlUG9zaXRpb24pCiAgICAgICAgIGNvbXB1dGVS
ZWxhdGl2ZVBvc2l0aW9uKCk7Ci0gICAgcmV0dXJuIG1fb2Zmc2V0TG9jYXRpb24ueSgpOworICAg
IHJldHVybiByb3VuZFRvSW50KG1fb2Zmc2V0TG9jYXRpb24ueSgpKTsKIH0KIAogaW50IE1vdXNl
UmVsYXRlZEV2ZW50OjpwYWdlWCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCShyZXZpc2lvbiAxMDg1MzAp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyMTEsNyArMTIxMSw3IEBAIHZvaWQgTWVkaWFDb250cm9sVGV4
dFRyYWNrQ29udGFpbmVyRWxlbWUKICAgICBMYXlvdXRVbml0IGJvdHRvbSA9IHN0YXRpY19jYXN0
PExheW91dFVuaXQ+KG1fdmlkZW9EaXNwbGF5U2l6ZS55KCkgKyBtX3ZpZGVvRGlzcGxheVNpemUu
aGVpZ2h0KCkgLSAobV92aWRlb0Rpc3BsYXlTaXplLmhlaWdodCgpICogdHJhY2tCb3R0b21NdWx0
aXBsaWVyKSk7CiAgICAgaWYgKGJvdHRvbSAhPSBtX2JvdHRvbSkgewogICAgICAgICBtX2JvdHRv
bSA9IGJvdHRvbTsKLSAgICAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUJv
dHRvbSwgU3RyaW5nOjpudW1iZXIoYm90dG9tKSArICJweCIpOworICAgICAgICBzZXRJbmxpbmVT
dHlsZVByb3BlcnR5KENTU1Byb3BlcnR5Qm90dG9tLCBTdHJpbmc6Om51bWJlcihyb3VuZFRvSW50
KGJvdHRvbSkpICsgInB4Iik7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvTGF5b3V0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9MYXlvdXRTdGF0ZS5jcHAJKHJldmlzaW9uIDEwODUzMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4MCw3ICsyODAs
NyBAQCB2b2lkIExheW91dFN0YXRlOjpjb21wdXRlTGluZUdyaWRQYWdpbmF0CiAgICAgICAgIGlm
IChwYWdlTG9naWNhbFRvcCA+IGZpcnN0TGluZVRvcFdpdGhMZWFkaW5nKSB7CiAgICAgICAgICAg
ICAvLyBTaGlmdCB0byB0aGUgbmV4dCBoaWdoZXN0IGxpbmUgZ3JpZCBtdWx0aXBsZSBwYXN0IHRo
ZSBwYWdlIGxvZ2ljYWwgdG9wLiBDYWNoZSB0aGUgZGVsdGEKICAgICAgICAgICAgIC8vIGJldHdl
ZW4gdGhpcyBuZXcgdmFsdWUgYW5kIHRoZSBwYWdlIGxvZ2ljYWwgdG9wIGFzIHRoZSBwYWdpbmF0
aW9uIG9yaWdpbi4KLSAgICAgICAgICAgIExheW91dFVuaXQgcmVtYWluZGVyID0gKHBhZ2VMb2dp
Y2FsVG9wIC0gZmlyc3RMaW5lVG9wV2l0aExlYWRpbmcpICUgZ3JpZExpbmVIZWlnaHQ7CisgICAg
ICAgICAgICBMYXlvdXRVbml0IHJlbWFpbmRlciA9IHJvdW5kVG9JbnQocGFnZUxvZ2ljYWxUb3Ag
LSBmaXJzdExpbmVUb3BXaXRoTGVhZGluZykgJSByb3VuZFRvSW50KGdyaWRMaW5lSGVpZ2h0KTsK
ICAgICAgICAgICAgIExheW91dFVuaXQgcGFnaW5hdGlvbkRlbHRhID0gZ3JpZExpbmVIZWlnaHQg
LSByZW1haW5kZXI7CiAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpCiAg
ICAgICAgICAgICAgICAgbV9saW5lR3JpZFBhZ2luYXRpb25PcmlnaW4uc2V0SGVpZ2h0KHBhZ2lu
YXRpb25EZWx0YSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0VHlwZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0VHlwZXMuaAko
cmV2aXNpb24gMTA4NTMwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFR5cGVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDExIEBAIGlubGluZSBMYXlvdXRTaXplIGZs
b29yZWRMYXlvdXRTaXplKGNvbnMKICAgICByZXR1cm4gTGF5b3V0U2l6ZShzdGF0aWNfY2FzdDxp
bnQ+KHAueCgpKSwgc3RhdGljX2Nhc3Q8aW50PihwLnkoKSkpOwogfQogCitpbmxpbmUgaW50IHJv
dW5kVG9JbnQoTGF5b3V0VW5pdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKIGlu
bGluZSBMYXlvdXRVbml0IHJvdW5kZWRMYXlvdXRVbml0KGZsb2F0IHZhbHVlKQogewogICAgIHJl
dHVybiBscm91bmRmKHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmNwcAkocmV2aXNpb24gMTA4NTMwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjU1MCw3ICs2NTUwLDcgQEAgTGF5
b3V0VW5pdCBSZW5kZXJCbG9jazo6cGFnZUxvZ2ljYWxUb3BGbwogICAgICAgICBMYXlvdXRVbml0
IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gcmVuZGVyVmlldy0+bGF5b3V0U3RhdGUoKS0+cGFnZUxvZ2lj
YWxIZWlnaHQoKTsKICAgICAgICAgaWYgKCFwYWdlTG9naWNhbEhlaWdodCkKICAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICByZXR1cm4gY3VtdWxhdGl2ZU9mZnNldCAtIChjdW11bGF0aXZl
T2Zmc2V0IC0gZmlyc3RQYWdlTG9naWNhbFRvcCkgJSBwYWdlTG9naWNhbEhlaWdodDsKKyAgICAg
ICAgcmV0dXJuIGN1bXVsYXRpdmVPZmZzZXQgLSByb3VuZFRvSW50KGN1bXVsYXRpdmVPZmZzZXQg
LSBmaXJzdFBhZ2VMb2dpY2FsVG9wKSAlIHJvdW5kVG9JbnQocGFnZUxvZ2ljYWxIZWlnaHQpOwog
ICAgIH0KICAgICByZXR1cm4gZW5jbG9zaW5nUmVuZGVyRmxvd1RocmVhZCgpLT5yZWdpb25Mb2dp
Y2FsVG9wRm9yTGluZShjdW11bGF0aXZlT2Zmc2V0KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5oCShyZXZpc2lvbiAxMDg1MzApCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTgyLDcgKzE4Miw3
IEBAIHB1YmxpYzoKIAogICAgIGludCBwaXhlbFNuYXBwZWRMb2dpY2FsTGVmdE9mZnNldEZvckxp
bmUoTGF5b3V0VW5pdCBwb3NpdGlvbiwgYm9vbCBmaXJzdExpbmUpIGNvbnN0CiAgICAgewotICAg
ICAgICByZXR1cm4gbG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKHBvc2l0aW9uLCBsb2dpY2FsTGVm
dE9mZnNldEZvckNvbnRlbnQocG9zaXRpb24pLCBmaXJzdExpbmUsIDApOworICAgICAgICByZXR1
cm4gcm91bmRUb0ludChsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUocG9zaXRpb24sIGxvZ2ljYWxM
ZWZ0T2Zmc2V0Rm9yQ29udGVudChwb3NpdGlvbiksIGZpcnN0TGluZSwgMCkpOwogICAgIH0KICAg
ICAKICAgICBMYXlvdXRVbml0IHN0YXJ0QWxpZ25lZE9mZnNldEZvckxpbmUoUmVuZGVyQm94KiBj
aGlsZCwgTGF5b3V0VW5pdCBwb3NpdGlvbiwgYm9vbCBmaXJzdExpbmUpOwpAQCAtNjM0LDExICs2
MzQsMTEgQEAgcHJpdmF0ZToKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodEZvckZsb2F0KGNv
bnN0IEZsb2F0aW5nT2JqZWN0KiBjaGlsZCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSA/IGNoaWxkLT5tYXhYKCkgOiBjaGlsZC0+bWF4WSgpOyB9CiAgICAgTGF5b3V0
VW5pdCBsb2dpY2FsV2lkdGhGb3JGbG9hdChjb25zdCBGbG9hdGluZ09iamVjdCogY2hpbGQpIGNv
bnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjaGlsZC0+d2lkdGgoKSA6
IGNoaWxkLT5oZWlnaHQoKTsgfQogCi0gICAgLy8gRklYTUU6IFRoZSBpbXBsZW1lbnRhdGlvbiBm
b3IgdGhlc2UgZnVuY3Rpb25zIHdpbGwgY2hhbmdlIG9uY2Ugd2UgbW92ZSB0byBzdWJwaXhlbCBs
YXlvdXQuIFNlZSBidWcgNjAzMTguCi0gICAgaW50IHBpeGVsU25hcHBlZExvZ2ljYWxUb3BGb3JG
bG9hdChjb25zdCBGbG9hdGluZ09iamVjdCogY2hpbGQpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxU
b3BGb3JGbG9hdChjaGlsZCk7IH0KLSAgICBpbnQgcGl4ZWxTbmFwcGVkTG9naWNhbEJvdHRvbUZv
ckZsb2F0KGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBjaGlsZCkgY29uc3QgeyByZXR1cm4gbG9naWNh
bEJvdHRvbUZvckZsb2F0KGNoaWxkKTsgfQotICAgIGludCBwaXhlbFNuYXBwZWRMb2dpY2FsTGVm
dEZvckZsb2F0KGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBjaGlsZCkgY29uc3QgeyByZXR1cm4gbG9n
aWNhbExlZnRGb3JGbG9hdChjaGlsZCk7IH0KLSAgICBpbnQgcGl4ZWxTbmFwcGVkTG9naWNhbFJp
Z2h0Rm9yRmxvYXQoY29uc3QgRmxvYXRpbmdPYmplY3QqIGNoaWxkKSBjb25zdCB7IHJldHVybiBs
b2dpY2FsUmlnaHRGb3JGbG9hdChjaGlsZCk7IH0KKyAgICBpbnQgcGl4ZWxTbmFwcGVkTG9naWNh
bFRvcEZvckZsb2F0KGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBjaGlsZCkgY29uc3QgeyByZXR1cm4g
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGNoaWxkLT5waXhlbFNuYXBwZWRZKCkgOiBjaGls
ZC0+cGl4ZWxTbmFwcGVkWCgpOyB9CisgICAgaW50IHBpeGVsU25hcHBlZExvZ2ljYWxCb3R0b21G
b3JGbG9hdChjb25zdCBGbG9hdGluZ09iamVjdCogY2hpbGQpIGNvbnN0IHsgcmV0dXJuIGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjaGlsZC0+cGl4ZWxTbmFwcGVkTWF4WSgpIDogY2hpbGQt
PnBpeGVsU25hcHBlZE1heFgoKTsgfQorICAgIGludCBwaXhlbFNuYXBwZWRMb2dpY2FsTGVmdEZv
ckZsb2F0KGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBjaGlsZCkgY29uc3QgeyByZXR1cm4gaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSA/IGNoaWxkLT5waXhlbFNuYXBwZWRYKCkgOiBjaGlsZC0+cGl4
ZWxTbmFwcGVkWSgpOyB9CisgICAgaW50IHBpeGVsU25hcHBlZExvZ2ljYWxSaWdodEZvckZsb2F0
KGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBjaGlsZCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSA/IGNoaWxkLT5waXhlbFNuYXBwZWRNYXhYKCkgOiBjaGlsZC0+cGl4ZWxT
bmFwcGVkTWF4WSgpOyB9CisgICAgaW50IHBpeGVsU25hcHBlZExvZ2ljYWxXaWR0aEZvckZsb2F0
KGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBjaGlsZCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSA/IGNoaWxkLT5waXhlbFNuYXBwZWRXaWR0aCgpIDogY2hpbGQtPnBpeGVs
U25hcHBlZEhlaWdodCgpOyB9CiAKICAgICB2b2lkIHNldExvZ2ljYWxUb3BGb3JGbG9hdChGbG9h
dGluZ09iamVjdCogY2hpbGQsIExheW91dFVuaXQgbG9naWNhbFRvcCkKICAgICB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNw
cAkocmV2aXNpb24gMTA4NTMwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrTGluZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw5ICsxMTQsOSBAQCBwcml2
YXRlOgogCiBpbmxpbmUgdm9pZCBMaW5lV2lkdGg6OnVwZGF0ZUF2YWlsYWJsZVdpZHRoKCkKIHsK
LSAgICBpbnQgaGVpZ2h0ID0gbV9ibG9jay0+bG9naWNhbEhlaWdodCgpOwotICAgIG1fbGVmdCA9
IG1fYmxvY2stPmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShoZWlnaHQsIG1faXNGaXJzdExpbmUp
OwotICAgIG1fcmlnaHQgPSBtX2Jsb2NrLT5sb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKGhlaWdo
dCwgbV9pc0ZpcnN0TGluZSk7CisgICAgTGF5b3V0VW5pdCBoZWlnaHQgPSBtX2Jsb2NrLT5sb2dp
Y2FsSGVpZ2h0KCk7CisgICAgbV9sZWZ0ID0gbV9ibG9jay0+cGl4ZWxTbmFwcGVkTG9naWNhbExl
ZnRPZmZzZXRGb3JMaW5lKGhlaWdodCwgbV9pc0ZpcnN0TGluZSk7CisgICAgbV9yaWdodCA9IG1f
YmxvY2stPnBpeGVsU25hcHBlZExvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUoaGVpZ2h0LCBtX2lz
Rmlyc3RMaW5lKTsKIAogICAgIGNvbXB1dGVBdmFpbGFibGVXaWR0aEZyb21MZWZ0QW5kUmlnaHQo
KTsKIH0KQEAgLTc1OSw4ICs3NTksOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlSW5saW5l
RGlyZWN0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcCYgdGV4dEJveERhdGFN
YXAsIFZlcnRpY2FsUG9zaXRpb25DYWNoZSYgdmVydGljYWxQb3NpdGlvbkNhY2hlKQogewogICAg
IEVUZXh0QWxpZ24gdGV4dEFsaWduID0gdGV4dEFsaWdubWVudEZvckxpbmUoIXJlYWNoZWRFbmQg
JiYgIWxpbmVCb3gtPmVuZHNXaXRoQnJlYWsoKSk7Ci0gICAgZmxvYXQgbG9naWNhbExlZnQgPSBs
b2dpY2FsTGVmdE9mZnNldEZvckxpbmUobG9naWNhbEhlaWdodCgpLCBsaW5lSW5mby5pc0ZpcnN0
TGluZSgpKTsKLSAgICBmbG9hdCBhdmFpbGFibGVMb2dpY2FsV2lkdGggPSBsb2dpY2FsUmlnaHRP
ZmZzZXRGb3JMaW5lKGxvZ2ljYWxIZWlnaHQoKSwgbGluZUluZm8uaXNGaXJzdExpbmUoKSkgLSBs
b2dpY2FsTGVmdDsKKyAgICBmbG9hdCBsb2dpY2FsTGVmdCA9IHBpeGVsU25hcHBlZExvZ2ljYWxM
ZWZ0T2Zmc2V0Rm9yTGluZShsb2dpY2FsSGVpZ2h0KCksIGxpbmVJbmZvLmlzRmlyc3RMaW5lKCkp
OworICAgIGZsb2F0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCA9IHBpeGVsU25hcHBlZExvZ2ljYWxS
aWdodE9mZnNldEZvckxpbmUobG9naWNhbEhlaWdodCgpLCBsaW5lSW5mby5pc0ZpcnN0TGluZSgp
KSAtIGxvZ2ljYWxMZWZ0OwogCiAgICAgYm9vbCBuZWVkc1dvcmRTcGFjaW5nID0gZmFsc2U7CiAg
ICAgZmxvYXQgdG90YWxMb2dpY2FsV2lkdGggPSBsaW5lQm94LT5nZXRGbG93U3BhY2luZ0xvZ2lj
YWxXaWR0aCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVs
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eE1vZGVsT2JqZWN0LmgJKHJldmlzaW9uIDEwODUzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw5ICs2MCw5
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIExheW91dFVuaXQgb2Zmc2V0V2lkdGgoKSBjb25zdCA9
IDA7CiAgICAgdmlydHVhbCBMYXlvdXRVbml0IG9mZnNldEhlaWdodCgpIGNvbnN0ID0gMDsKIAor
ICAgIGludCBwaXhlbFNuYXBwZWRPZmZzZXRMZWZ0KCkgY29uc3QgeyByZXR1cm4gcm91bmRUb0lu
dChvZmZzZXRMZWZ0KCkpOyB9CisgICAgaW50IHBpeGVsU25hcHBlZE9mZnNldFRvcCgpIGNvbnN0
IHsgcmV0dXJuIHJvdW5kVG9JbnQob2Zmc2V0VG9wKCkpOyB9CiAgICAgLy8gRklYTUU6IFRoZSBp
bXBsZW1lbnRhdGlvbiBmb3IgdGhlc2UgZnVuY3Rpb25zIHdpbGwgY2hhbmdlIG9uY2Ugd2UgbW92
ZSB0byBzdWJwaXhlbCBsYXlvdXQuIFNlZSBidWcgNjAzMTguCi0gICAgaW50IHBpeGVsU25hcHBl
ZE9mZnNldExlZnQoKSBjb25zdCB7IHJldHVybiBvZmZzZXRMZWZ0KCk7IH0KLSAgICBpbnQgcGl4
ZWxTbmFwcGVkT2Zmc2V0VG9wKCkgY29uc3QgeyByZXR1cm4gb2Zmc2V0VG9wKCk7IH0KICAgICBp
bnQgcGl4ZWxTbmFwcGVkT2Zmc2V0V2lkdGgoKSBjb25zdDsKICAgICBpbnQgcGl4ZWxTbmFwcGVk
T2Zmc2V0SGVpZ2h0KCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcAkocmV2aXNpb24gMTA4NTMwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0NiwxMSArMTU0NiwxNCBA
QCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvCiAgICAgICAgIExheW91
dFJlY3QgZXhwb3NlUmVjdCA9IExheW91dFJlY3QocmVjdC54KCkgKyBzY3JvbGxYT2Zmc2V0KCks
IHJlY3QueSgpICsgc2Nyb2xsWU9mZnNldCgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkp
OwogICAgICAgICBMYXlvdXRSZWN0IHIgPSBnZXRSZWN0VG9FeHBvc2UobGF5ZXJCb3VuZHMsIGV4
cG9zZVJlY3QsIGFsaWduWCwgYWxpZ25ZKTsKICAgICAgICAgCi0gICAgICAgIExheW91dFVuaXQg
eE9mZnNldCA9IHIueCgpIC0gYWJzUG9zLngoKTsKLSAgICAgICAgTGF5b3V0VW5pdCB5T2Zmc2V0
ID0gci55KCkgLSBhYnNQb3MueSgpOworICAgICAgICBMYXlvdXRVbml0IGFkanVzdGVkWCA9IHIu
eCgpIC0gYWJzUG9zLngoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBhZGp1c3RlZFkgPSByLnkoKSAt
IGFic1Bvcy55KCk7CiAgICAgICAgIC8vIEFkanVzdCBvZmZzZXRzIGlmIHRoZXkncmUgb3V0c2lk
ZSBvZiB0aGUgYWxsb3dhYmxlIHJhbmdlLgotICAgICAgICB4T2Zmc2V0ID0gbWF4PExheW91dFVu
aXQ+KDAsIG1pbihzY3JvbGxXaWR0aCgpIC0gbGF5ZXJCb3VuZHMud2lkdGgoKSwgeE9mZnNldCkp
OwotICAgICAgICB5T2Zmc2V0ID0gbWF4PExheW91dFVuaXQ+KDAsIG1pbihzY3JvbGxIZWlnaHQo
KSAtIGxheWVyQm91bmRzLmhlaWdodCgpLCB5T2Zmc2V0KSk7CisgICAgICAgIGFkanVzdGVkWCA9
IG1heDxMYXlvdXRVbml0PigwLCBtaW4oc2Nyb2xsV2lkdGgoKSAtIGxheWVyQm91bmRzLndpZHRo
KCksIGFkanVzdGVkWCkpOworICAgICAgICBhZGp1c3RlZFkgPSBtYXg8TGF5b3V0VW5pdD4oMCwg
bWluKHNjcm9sbEhlaWdodCgpIC0gbGF5ZXJCb3VuZHMuaGVpZ2h0KCksIGFkanVzdGVkWSkpOwor
CisgICAgICAgIGludCB4T2Zmc2V0ID0gcm91bmRUb0ludChhZGp1c3RlZFgpOworICAgICAgICBp
bnQgeU9mZnNldCA9IHJvdW5kVG9JbnQoYWRqdXN0ZWRZKTsKICAgICAgICAgCiAgICAgICAgIGlm
ICh4T2Zmc2V0ICE9IHNjcm9sbFhPZmZzZXQoKSB8fCB5T2Zmc2V0ICE9IHNjcm9sbFlPZmZzZXQo
KSkgewogICAgICAgICAgICAgTGF5b3V0VW5pdCBkaWZmWCA9IHNjcm9sbFhPZmZzZXQoKTsKQEAg
LTE1NzcsOCArMTU4MCw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUo
Y28KICAgICAgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCB2aWV3UmVjdCA9IGZyYW1lVmlldy0+
dmlzaWJsZUNvbnRlbnRSZWN0KCk7CiAgICAgICAgICAgICAgICAgICAgIExheW91dFJlY3QgZXhw
b3NlUmVjdCA9IGdldFJlY3RUb0V4cG9zZSh2aWV3UmVjdCwgcmVjdCwgYWxpZ25YLCBhbGlnblkp
OwogCi0gICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgeE9mZnNldCA9IGV4cG9zZVJlY3Qu
eCgpOwotICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHlPZmZzZXQgPSBleHBvc2VSZWN0
LnkoKTsKKyAgICAgICAgICAgICAgICAgICAgaW50IHhPZmZzZXQgPSByb3VuZFRvSW50KGV4cG9z
ZVJlY3QueCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaW50IHlPZmZzZXQgPSByb3VuZFRvSW50
KGV4cG9zZVJlY3QueSgpKTsKICAgICAgICAgICAgICAgICAgICAgLy8gQWRqdXN0IG9mZnNldHMg
aWYgdGhleSdyZSBvdXRzaWRlIG9mIHRoZSBhbGxvd2FibGUgcmFuZ2UuCiAgICAgICAgICAgICAg
ICAgICAgIHhPZmZzZXQgPSBtYXg8TGF5b3V0VW5pdD4oMCwgbWluKGZyYW1lVmlldy0+Y29udGVu
dHNXaWR0aCgpLCB4T2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgICAgIHlPZmZzZXQgPSBtYXg8
TGF5b3V0VW5pdD4oMCwgbWluKGZyYW1lVmlldy0+Y29udGVudHNIZWlnaHQoKSwgeU9mZnNldCkp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkocmV2
aXNpb24gMTA4NTMwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3gu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NTEsNyArNjUxLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJM
aXN0Qm94OjpzY3JvbGxXaWR0aCgpIAogCiBpbnQgUmVuZGVyTGlzdEJveDo6c2Nyb2xsSGVpZ2h0
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbWF4KHBpeGVsU25hcHBlZENsaWVudEhlaWdodCgpLCBs
aXN0SGVpZ2h0KCkpOworICAgIHJldHVybiBtYXgocGl4ZWxTbmFwcGVkQ2xpZW50SGVpZ2h0KCks
IHJvdW5kVG9JbnQobGlzdEhlaWdodCgpKSk7CiB9CiAKIGludCBSZW5kZXJMaXN0Qm94OjpzY3Jv
bGxMZWZ0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUm9vdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSb290LmNwcAkocmV2aXNpb24gMTA4NTMwKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE3LDkgKzMx
Nyw5IEBAIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgUmVuZGVyU1ZHUm9vdDo6bG8KICAgICAvLyBT
bGlnaHRseSBvcHRpbWl6ZWQgdmVyc2lvbiBvZiBtX2xvY2FsVG9QYXJlbnRUcmFuc2Zvcm0gPSBB
ZmZpbmVUcmFuc2Zvcm06OnRyYW5zbGF0aW9uKHgoKSwgeSgpKSAqIG1fbG9jYWxUb0JvcmRlckJv
eFRyYW5zZm9ybTsKICAgICBtX2xvY2FsVG9QYXJlbnRUcmFuc2Zvcm0gPSBtX2xvY2FsVG9Cb3Jk
ZXJCb3hUcmFuc2Zvcm07CiAgICAgaWYgKHgoKSkKLSAgICAgICAgbV9sb2NhbFRvUGFyZW50VHJh
bnNmb3JtLnNldEUobV9sb2NhbFRvUGFyZW50VHJhbnNmb3JtLmUoKSArIHgoKSk7CisgICAgICAg
IG1fbG9jYWxUb1BhcmVudFRyYW5zZm9ybS5zZXRFKG1fbG9jYWxUb1BhcmVudFRyYW5zZm9ybS5l
KCkgKyByb3VuZFRvSW50KHgoKSkpOwogICAgIGlmICh5KCkpCi0gICAgICAgIG1fbG9jYWxUb1Bh
cmVudFRyYW5zZm9ybS5zZXRGKG1fbG9jYWxUb1BhcmVudFRyYW5zZm9ybS5mKCkgKyB5KCkpOwor
ICAgICAgICBtX2xvY2FsVG9QYXJlbnRUcmFuc2Zvcm0uc2V0RihtX2xvY2FsVG9QYXJlbnRUcmFu
c2Zvcm0uZigpICsgcm91bmRUb0ludCh5KCkpKTsKICAgICByZXR1cm4gbV9sb2NhbFRvUGFyZW50
VHJhbnNmb3JtOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
bmRlclN1cHBvcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAJKHJldmlzaW9uIDEwODUzMCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExMCw3ICsxMTAsNyBAQCBib29sIFNWR1JlbmRlclN1cHBvcnQ6OnByZXBhcmVUb1JlbmRlclNW
CiAKICAgICAgICAgaWYgKHNoYWRvdykgewogICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQt
PmNsaXAocmVwYWludFJlY3QpOwotICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFNo
YWRvdyhJbnRTaXplKHNoYWRvdy0+eCgpLCBzaGFkb3ctPnkoKSksIHNoYWRvdy0+Ymx1cigpLCBz
aGFkb3ctPmNvbG9yKCksIHN0eWxlLT5jb2xvclNwYWNlKCkpOworICAgICAgICAgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPnNldFNoYWRvdyhJbnRTaXplKHJvdW5kVG9JbnQoc2hhZG93LT54KCkpLCBy
b3VuZFRvSW50KHNoYWRvdy0+eSgpKSksIHNoYWRvdy0+Ymx1cigpLCBzaGFkb3ctPmNvbG9yKCks
IHN0eWxlLT5jb2xvclNwYWNlKCkpOwogICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXIoMSk7CiAgICAgICAgIH0KICAgICB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>