<?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>100144</bug_id>
          
          <creation_ts>2012-10-23 10:53:58 -0700</creation_ts>
          <short_desc>In the open-source jpeg decoder, read image orientation from the exif data</short_desc>
          <delta_ts>2012-11-05 05:02:42 -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>New Bugs</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></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>100191</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nico Weber">thakis</reporter>
          <assigned_to name="Nico Weber">thakis</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>noel.gordon</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>748792</commentid>
    <comment_count>0</comment_count>
    <who name="Nico Weber">thakis</who>
    <bug_when>2012-10-23 10:53:58 -0700</bug_when>
    <thetext>In the open-source jpeg decoder, read image orientation from the exif data</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748796</commentid>
    <comment_count>1</comment_count>
      <attachid>170194</attachid>
    <who name="Nico Weber">thakis</who>
    <bug_when>2012-10-23 10:58:06 -0700</bug_when>
    <thetext>Created attachment 170194
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748821</commentid>
    <comment_count>2</comment_count>
      <attachid>170194</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-23 11:27:35 -0700</bug_when>
    <thetext>Comment on attachment 170194
Patch

Attachment 170194 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14529039</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748826</commentid>
    <comment_count>3</comment_count>
      <attachid>170199</attachid>
    <who name="Nico Weber">thakis</who>
    <bug_when>2012-10-23 11:31:06 -0700</bug_when>
    <thetext>Created attachment 170199
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748865</commentid>
    <comment_count>4</comment_count>
      <attachid>170199</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-23 12:47:24 -0700</bug_when>
    <thetext>Comment on attachment 170199
Patch

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

I think the primary concern with patches like this is readability.  I think you&apos;ve done a fine job, but I listed a few notes below which might help make it even easier to understand what&apos;s going on here.  (Which helps us make sure there are no security holes or errors in the future.)

One more round please. :)

&gt; Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:151
&gt; +static bool
&gt; +checkExifHeader(jpeg_saved_marker_ptr marker, bool* isBigEndian, unsigned* idfOffset)

I believe these normally go on the same line in webKit.

If isBigEndian/idfOffset aren&apos;t optional, seems they should be &amp; instead of *.

&gt; Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:156
&gt; +    // &apos;M&apos;, &apos;M&apos; (motorola / big endian byte order), folled by (uint16_t)42,

folled

&gt; Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:166
&gt; +        &amp;&amp; marker-&gt;data[0] == &apos;E&apos;
&gt; +        &amp;&amp; marker-&gt;data[1] == &apos;x&apos;
&gt; +        &amp;&amp; marker-&gt;data[2] == &apos;i&apos;
&gt; +        &amp;&amp; marker-&gt;data[3] == &apos;f&apos;
&gt; +        &amp;&amp; marker-&gt;data[4] == &apos;\0&apos;

We have some (primative) utilities for string-based parsing (as opposed to character-based, as I might describe this approach) in ParserUtilities.h.  But I suspect the type of marker-&gt;data is not UChar*, so even those primitives won&apos;t work here.  The CSSParser is another example of a UChar* parser in WebKit.

&gt; Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:189
&gt; +        idfOffset += 6; // Account for &apos;Exif\0\0&apos; header.

You could also use sizeof(&quot;Exif\0&quot;) if you wanted.  I&apos;m not sure it&apos;s more clear in this instance until you&apos;re using string-based parsing throught the rest of the code.

&gt; Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:190
&gt; +        if (idfOffset &gt;= marker-&gt;data_length - 2)

No risk of underflow of an unsigned, right?

&gt; Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:192
&gt; +        JOCTET* idf = marker-&gt;data + idfOffset;

idf?

&gt; Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:195
&gt; +        idf += 2;

What are we skipping here?

&gt; Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:197
&gt; +        for (unsigned i = 0; i &lt; tagCount &amp;&amp; end - idf &gt;= 12; ++i, idf += 12) {

12 should probably have a name.  Do you want to give a comment description of the layout of what you&apos;re reading here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748908</commentid>
    <comment_count>5</comment_count>
      <attachid>170219</attachid>
    <who name="Nico Weber">thakis</who>
    <bug_when>2012-10-23 13:29:21 -0700</bug_when>
    <thetext>Created attachment 170219
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748909</commentid>
    <comment_count>6</comment_count>
    <who name="Nico Weber">thakis</who>
    <bug_when>2012-10-23 13:29:30 -0700</bug_when>
    <thetext>Thanks for the quick review!

(In reply to comment #4)
&gt; &gt; Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:151
&gt; &gt; +static bool
&gt; &gt; +checkExifHeader(jpeg_saved_marker_ptr marker, bool* isBigEndian, unsigned* idfOffset)
&gt; 
&gt; I believe these normally go on the same line in webKit.

Done.

&gt; If isBigEndian/idfOffset aren&apos;t optional, seems they should be &amp; instead of *.
&gt; 
&gt; &gt; Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:156
&gt; &gt; +    // &apos;M&apos;, &apos;M&apos; (motorola / big endian byte order), folled by (uint16_t)42,
&gt; 
&gt; folled

Done.

&gt; &gt; Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:166
&gt; &gt; +        &amp;&amp; marker-&gt;data[0] == &apos;E&apos;
&gt; &gt; +        &amp;&amp; marker-&gt;data[1] == &apos;x&apos;
&gt; &gt; +        &amp;&amp; marker-&gt;data[2] == &apos;i&apos;
&gt; &gt; +        &amp;&amp; marker-&gt;data[3] == &apos;f&apos;
&gt; &gt; +        &amp;&amp; marker-&gt;data[4] == &apos;\0&apos;
&gt; 
&gt; We have some (primative) utilities for string-based parsing (as opposed to character-based, as I might describe this approach) in ParserUtilities.h.  But I suspect the type of marker-&gt;data is not UChar*, so even those primitives won&apos;t work here.  The CSSParser is another example of a UChar* parser in WebKit.

Right, JOCTET is defined to either `unsigned char` or `char`, depending on a jpeglib configuration option (else I&apos;d just used strncmp()).

&gt; 
&gt; &gt; +        idfOffset += 6; // Account for &apos;Exif\0\0&apos; header.
&gt; 
&gt; You could also use sizeof(&quot;Exif\0&quot;) if you wanted.  I&apos;m not sure it&apos;s more clear in this instance until you&apos;re using string-based parsing throught the rest of the code.

Left as is.

&gt; &gt; Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:190
&gt; &gt; +        if (idfOffset &gt;= marker-&gt;data_length - 2)
&gt; 
&gt; No risk of underflow of an unsigned, right?

I tweaked this to be more like the change in the loop.

&gt; &gt; Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:192
&gt; &gt; +        JOCTET* idf = marker-&gt;data + idfOffset;
&gt; 
&gt; idf?

Err, I meant &quot;ifd&quot;. That&apos;s from the tiff spec and is short for &quot;image file directory&quot;. I can rename it to something else (&quot;directory&quot;) if you like, but without the tiff spec at hand this code probably shouldn&apos;t be changed anyway.

&gt; &gt; Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:195
&gt; &gt; +        idf += 2;
&gt; 
&gt; What are we skipping here?

Added a comment.

&gt; &gt; Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:197
&gt; &gt; +        for (unsigned i = 0; i &lt; tagCount &amp;&amp; end - idf &gt;= 12; ++i, idf += 12) {
&gt; 
&gt; 12 should probably have a name.  Do you want to give a comment description of the layout of what you&apos;re reading here?

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748912</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-23 13:32:31 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Err, I meant &quot;ifd&quot;. That&apos;s from the tiff spec and is short for &quot;image file directory&quot;. I can rename it to something else (&quot;directory&quot;) if you like, but without the tiff spec at hand this code probably shouldn&apos;t be changed anyway.

Seems like we should be sure to note that somewhere.  Ideally with a link to the spec.

(It&apos;s possible you&apos;ve already done that, I haven&apos;t pulled up your patch yet.  I&apos;ll do that in a few.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748916</commentid>
    <comment_count>8</comment_count>
    <who name="Nico Weber">thakis</who>
    <bug_when>2012-10-23 13:34:54 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; Err, I meant &quot;ifd&quot;. That&apos;s from the tiff spec and is short for &quot;image file directory&quot;. I can rename it to something else (&quot;directory&quot;) if you like, but without the tiff spec at hand this code probably shouldn&apos;t be changed anyway.
&gt; 
&gt; Seems like we should be sure to note that somewhere.  Ideally with a link to the spec.
&gt; 
&gt; (It&apos;s possible you&apos;ve already done that, I haven&apos;t pulled up your patch yet.  I&apos;ll do that in a few.)

Yes, I mention this in a comment now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748917</commentid>
    <comment_count>9</comment_count>
      <attachid>170219</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-23 13:35:23 -0700</bug_when>
    <thetext>Comment on attachment 170219
Patch

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

This is definitely more readable to my eyes.  Thank you. Helps that I read it twice, I&apos;m sure. :)

&gt; Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:166
&gt; +        // data[5] is a fill byte

What&apos;s a fill byte?

&gt; Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:188
&gt; +        ifdOffset += 6; // Account for &apos;Exif\0\0&apos; header.

Why Exif\0\0 here and only Exif\0 above?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748918</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-23 13:36:20 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; (In reply to comment #6)
&gt; &gt; &gt; Err, I meant &quot;ifd&quot;. That&apos;s from the tiff spec and is short for &quot;image file directory&quot;. I can rename it to something else (&quot;directory&quot;) if you like, but without the tiff spec at hand this code probably shouldn&apos;t be changed anyway.
&gt; &gt; 
&gt; &gt; Seems like we should be sure to note that somewhere.  Ideally with a link to the spec.
&gt; &gt; 
&gt; &gt; (It&apos;s possible you&apos;ve already done that, I haven&apos;t pulled up your patch yet.  I&apos;ll do that in a few.)
&gt; 
&gt; Yes, I mention this in a comment now.

The part of that statement I was actually interested in was &quot;without the tiff spec at hand this code probably shouldn&apos;t be changed anyway&quot;. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748922</commentid>
    <comment_count>11</comment_count>
      <attachid>170219</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-10-23 13:37:39 -0700</bug_when>
    <thetext>Comment on attachment 170219
Patch

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        setting (see bug 19688). Currently this isn&apos;t hooked up anywhere, so
&gt; +        it has no observable effect for now.

Could you please clarify? Are you saying that the setting can not be enabled in any port that that uses open source decoders?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748923</commentid>
    <comment_count>12</comment_count>
      <attachid>170222</attachid>
    <who name="Nico Weber">thakis</who>
    <bug_when>2012-10-23 13:38:02 -0700</bug_when>
    <thetext>Created attachment 170222
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748924</commentid>
    <comment_count>13</comment_count>
    <who name="Nico Weber">thakis</who>
    <bug_when>2012-10-23 13:38:33 -0700</bug_when>
    <thetext>Thanks!


Added a link to the spec too.

&gt;&gt; Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:166
&gt;&gt; +        // data[5] is a fill byte
&gt; 
&gt; What&apos;s a fill byte?

It&apos;s a byte whose value doesn&apos;t matter. In practice, it seems to be 0 or 0xff, so I suppose encoders can put whatever they want there.

&gt;&gt; Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:188
&gt;&gt; +        ifdOffset += 6; // Account for &apos;Exif\0\0&apos; header.
&gt; 
&gt; Why Exif\0\0 here and only Exif\0 above?

It&apos;s &quot;Exif\0&lt;fill byte&gt;&quot;. Changed the comment to say that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748926</commentid>
    <comment_count>14</comment_count>
      <attachid>170222</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-23 13:40:01 -0700</bug_when>
    <thetext>Comment on attachment 170222
Patch for landing

Rejecting attachment 170222 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/Source/WebCore/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/14526087</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748929</commentid>
    <comment_count>15</comment_count>
      <attachid>170219</attachid>
    <who name="Nico Weber">thakis</who>
    <bug_when>2012-10-23 13:41:58 -0700</bug_when>
    <thetext>Comment on attachment 170219
Patch

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

Added a link to the spec too.

&gt;&gt; Source/WebCore/ChangeLog:10
&gt;&gt; +        it has no observable effect for now.
&gt; 
&gt; Could you please clarify? Are you saying that the setting can not be enabled in any port that that uses open source decoders?

It can be enabled, but it currently has no effect. I&apos;m trying to change that. To change that, I need to

1) Let the jpeg decoder read orientation metadata from the file (done for exif in this patch)
2) Change the image source code to grab orientation data from the decoder and pass it on the BitmapImage (like ImageSourceCG does) (next patch)
3) Update the drawing code for the chromium port to actually honor the orientation on BitmapImage (patch after next patch)
4) Turn on shouldRespectImageOrientation for the chromium port
( 5. Update the clipboard writing code to honor the orientation bit)

&gt;&gt; Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:166
&gt;&gt; +        // data[5] is a fill byte
&gt; 
&gt; What&apos;s a fill byte?

It&apos;s a byte whose value doesn&apos;t matter. In practice, it seems to be 0 or 0xff, so I suppose encoders can put whatever they want there.

&gt;&gt; Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:188
&gt;&gt; +        ifdOffset += 6; // Account for &apos;Exif\0\0&apos; header.
&gt; 
&gt; Why Exif\0\0 here and only Exif\0 above?

It&apos;s &quot;Exif\0&lt;fill byte&gt;&quot;. Changed the comment to say that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748935</commentid>
    <comment_count>16</comment_count>
      <attachid>170225</attachid>
    <who name="Nico Weber">thakis</who>
    <bug_when>2012-10-23 13:43:16 -0700</bug_when>
    <thetext>Created attachment 170225
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748937</commentid>
    <comment_count>17</comment_count>
    <who name="Nico Weber">thakis</who>
    <bug_when>2012-10-23 13:44:42 -0700</bug_when>
    <thetext>ap: Sorry, the in-patch publish button doesn&apos;t work for me for some reason. Instead replying on a comment:

Question: &quot;&quot;&quot;
&gt; Source/WebCore/ChangeLog:10
&gt; +        setting (see bug 19688). Currently this isn&apos;t hooked up anywhere, so
&gt; +        it has no observable effect for now.

Could you please clarify? Are you saying that the setting can not be enabled in any port that that uses open source decoders?
&quot;&quot;&quot;

Answer:
&quot;&quot;&quot;It can be enabled, but it currently has no effect. I&apos;m trying to change that. To change that, I need to

1) Let the jpeg decoder read orientation metadata from the file (done for exif in this patch)
2) Change the image source code to grab orientation data from the decoder and pass it on the BitmapImage (like ImageSourceCG does) (next patch)
3) Update the drawing code for the chromium port to actually honor the orientation on BitmapImage (patch after next patch)
4) Turn on shouldRespectImageOrientation for the chromium port
( 5. Update the clipboard writing code to honor the orientation bit)&quot;&quot;&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748939</commentid>
    <comment_count>18</comment_count>
    <who name="Nico Weber">thakis</who>
    <bug_when>2012-10-23 13:45:07 -0700</bug_when>
    <thetext>Bleh, now it made it through. Sorry for the redundant comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748967</commentid>
    <comment_count>19</comment_count>
      <attachid>170225</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-23 14:05:44 -0700</bug_when>
    <thetext>Comment on attachment 170225
Patch for landing

Clearing flags on attachment: 170225

Committed r132260: &lt;http://trac.webkit.org/changeset/132260&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748968</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-23 14:05:48 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749207</commentid>
    <comment_count>21</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2012-10-23 18:37:44 -0700</bug_when>
    <thetext>Was there such a hurry?  Patch landed before I got a chance to review :/ my TZ is not the same as yours.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749208</commentid>
    <comment_count>22</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-23 18:38:55 -0700</bug_when>
    <thetext>I don&apos;t think there is any hurry.  Feel free to roll-out, or we can discuss now post-landing and land amendments.  I&apos;m sure Nico would have no such objections.  I forgot you were working on EXIF specifically, this was one of many patches I reviewed today. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749223</commentid>
    <comment_count>23</comment_count>
      <attachid>170225</attachid>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2012-10-23 18:57:56 -0700</bug_when>
    <thetext>Comment on attachment 170225
Patch for landing

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

Thanks for working on this.  Some initial comments.


&gt; Source/WebCore/platform/graphics/BitmapImage.h:208
&gt; +    virtual void draw(GraphicsContext*, const FloatRect&amp; dstRect, const FloatRect&amp; srcRect, ColorSpace styleColorSpace, CompositeOperator, RespectImageOrientationEnum) OVERRIDE;

OVERRIDE?  Not following, did you change BitmapImage.cpp somehow in this patch?

&gt; Source/WebCore/platform/image-decoders/ImageDecoder.h:303
&gt; +        ImageOrientation orientation() const { return m_orientation; }

Do GIF or PNG decoders support orientation?  I think not, so why add m_orientation to all decoders?

&gt; Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:101
&gt; +

Just use JPEG_APP0 + 1 at the call site and remove these lines.  There&apos;s even a comment at the call site.  Make that comment exact: &quot;Retain EXIF metadata marker APP1 for orientation detection.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749246</commentid>
    <comment_count>24</comment_count>
    <who name="Nico Weber">thakis</who>
    <bug_when>2012-10-23 19:26:31 -0700</bug_when>
    <thetext>Thanks for taking a look!

(In reply to comment #23)
&gt; (From update of attachment 170225 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=170225&amp;action=review
&gt; &gt; Source/WebCore/platform/graphics/BitmapImage.h:208
&gt; &gt; +    virtual void draw(GraphicsContext*, const FloatRect&amp; dstRect, const FloatRect&amp; srcRect, ColorSpace styleColorSpace, CompositeOperator, RespectImageOrientationEnum) OVERRIDE;
&gt; 
&gt; OVERRIDE?  Not following, did you change BitmapImage.cpp somehow in this patch?

This is mostly unrelated to the rest of the patch, it&apos;s just documentation. I didn&apos;t understand how this worked at first (see https://bugs.webkit.org/show_bug.cgi?id=90755#c6), so I added this as a comment for myself. It has no effect.

&gt; &gt; Source/WebCore/platform/image-decoders/ImageDecoder.h:303
&gt; &gt; +        ImageOrientation orientation() const { return m_orientation; }
&gt; 
&gt; Do GIF or PNG decoders support orientation?  I think not, so why add m_orientation to all decoders?

Technically, gif and png files can contain XMP metadata (http://partners.adobe.com/public/developer/en/xmp/sdk/XMPspecification.pdf), but we probably won&apos;t want to support this.

Alternatively, I could make orientation() virtual and override it in the jpeg decoder. That costs 4 byte for a vtable field too though, so it didn&apos;t seem simpler or more efficient to me. If you strongly prefer a virtual method and having this field just in the jpeg decoder, I can move it around. I don&apos;t care too much either way.

&gt; &gt; Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:101
&gt; &gt; +
&gt; 
&gt; Just use JPEG_APP0 + 1 at the call site and remove these lines.  There&apos;s even a comment at the call site.  Make that comment exact: &quot;Retain EXIF metadata marker APP1 for orientation detection.&quot;

The marker is used in two places, do you want me to put the same expression there?

I did the comment change and uploaded the diff to https://bugs.webkit.org/show_bug.cgi?id=100181 (that&apos;s where I&apos;ll add the other changes I&apos;ll do in response to your comments on this review too).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749667</commentid>
    <comment_count>25</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2012-10-24 07:48:20 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; &gt; OVERRIDE?  Not following, did you change BitmapImage.cpp somehow in this patch?
&gt; 
&gt; This is mostly unrelated to the rest of the patch, it&apos;s just documentation. I didn&apos;t understand how this worked at first (see https://bugs.webkit.org/show_bug.cgi?id=90755#c6), so I added this as a comment for myself. It has no effect.

Right, understood.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749672</commentid>
    <comment_count>26</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2012-10-24 07:53:07 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; &gt; Do GIF or PNG decoders support orientation?  I think not, so why add m_orientation to all decoders?
&gt; 
&gt; Technically, gif and png files can contain XMP metadata (http://partners.adobe.com/public/developer/en/xmp/sdk/XMPspecification.pdf), but we probably won&apos;t want to support this.

I&apos;ve never seen a GIF or PNG with XMP metadata in the field, so let&apos;s not worry about it for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749678</commentid>
    <comment_count>27</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2012-10-24 07:56:35 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; Alternatively, I could make orientation() virtual and override it in the jpeg decoder. That costs 4 byte for a vtable field too though, so it didn&apos;t seem simpler or more efficient to me. If you strongly prefer a virtual method and having this field just in the jpeg decoder, I can move it around. I don&apos;t care too much either way.

The image decoders are virtual and override all over :)  Thinking more about David&apos;s work mentioned in bug 100191, let&apos;s leave it as is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749703</commentid>
    <comment_count>28</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2012-10-24 08:34:56 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; The marker is used in two places, do you want me to put the same expression there?

Yes please.
 
&gt; I did the comment change and uploaded the diff to https://bugs.webkit.org/show_bug.cgi?id=100181 (that&apos;s where I&apos;ll add the other changes I&apos;ll do in response to your comments on this review too).

Thank you.  I need to look closer at the exif reader.  The image decoders have been a source of security flaws in the past so we really need the code to be dumb-simple. 

A general question is what to do when there are any invalid EXIF tags, or two or more valid EXIF orientation tags (as eric and roc@mozilla discussed in bug 19688).  Should we just ignore orientation in these cases?  How does your EXIF reader implementation handle these cases?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750172</commentid>
    <comment_count>29</comment_count>
    <who name="Nico Weber">thakis</who>
    <bug_when>2012-10-24 16:18:13 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; (In reply to comment #24)
&gt; &gt; The marker is used in two places, do you want me to put the same expression there?
&gt; 
&gt; Yes please.

Added to the patch in bug 100181.

&gt; Thank you.  I need to look closer at the exif reader.  The image decoders have been a source of security flaws in the past so we really need the code to be dumb-simple. 

Thanks for taking a second look at this.

&gt; A general question is what to do when there are any invalid EXIF tags, or two or more valid EXIF orientation tags (as eric and roc@mozilla discussed in bug 19688).  Should we just ignore orientation in these cases?  How does your EXIF reader implementation handle these cases?

The code is right here, in this patch :-) It keeps the last orientation tag from the last APP1 section. http://people.mozilla.org/~roc/IMG_20110526_110158.jpg (from the other bug) shows up as upright (roc said that this means we&apos;re using the last tag too). Safari shows that image upright too (however, ignoring the rotation tag for that image would show it upright as well, so I&apos;m not certain if Safari looks at the last tag or ignores the tag when there are multiple)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754368</commentid>
    <comment_count>30</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2012-10-30 07:56:09 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; (In reply to comment #28)
&gt; &gt; (In reply to comment #24)
&gt; &gt; &gt; The marker is used in two places, do you want me to put the same expression there?
&gt; &gt; 
&gt; &gt; Yes please.
&gt; 
&gt; Added to the patch in bug 100181.

OK.

&gt; &gt; Thank you.  I need to look closer at the exif reader.  The image decoders have been a source of security flaws in the past so we really need the code to be dumb-simple. 
&gt; 
&gt; Thanks for taking a second look at this.

Asked chrome-security to look while I was absent, bug 100320.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754378</commentid>
    <comment_count>31</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2012-10-30 08:12:20 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; &gt; A general question is what to do when there are any invalid EXIF tags, or two or more valid EXIF orientation tags (as eric and roc@mozilla discussed in bug 19688).  Should we just ignore orientation in these cases?  How does your EXIF reader implementation handle these cases?
&gt; 
&gt; The code is right here, in this patch :-) 

The code is right there indeed:

   if (tag == orientationTag &amp;&amp; type == shortType &amp;&amp; count == 1)
      return ImageOrientation::fromEXIFValue(readUint16(ifd + 8, isBigEndian));


The &quot;return&quot; suggests the code uses the first orientation tag within an APP1, right?  Doesn&apos;t match the description:

&gt; It keeps the last orientation tag from the last APP1 section.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754425</commentid>
    <comment_count>32</comment_count>
    <who name="Nico Weber">thakis</who>
    <bug_when>2012-10-30 09:21:06 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; (In reply to comment #29)
&gt; &gt; &gt; A general question is what to do when there are any invalid EXIF tags, or two or more valid EXIF orientation tags (as eric and roc@mozilla discussed in bug 19688).  Should we just ignore orientation in these cases?  How does your EXIF reader implementation handle these cases?
&gt; &gt; 
&gt; &gt; The code is right here, in this patch :-) 
&gt; 
&gt; The code is right there indeed:
&gt; 
&gt;    if (tag == orientationTag &amp;&amp; type == shortType &amp;&amp; count == 1)
&gt;       return ImageOrientation::fromEXIFValue(readUint16(ifd + 8, isBigEndian));
&gt; 
&gt; 
&gt; The &quot;return&quot; suggests the code uses the first orientation tag within an APP1, right?  Doesn&apos;t match the description:
&gt; 
&gt; &gt; It keeps the last orientation tag from the last APP1 section.

It keeps the first tag from the first APP1 section then. Since http://people.mozilla.org/~roc/IMG_20110526_110158.jpg shows up fine, I suppose roc&apos;s description of that image was off too. (I tried changing the code to look at the last tag instead -- only one marker makes it through in that case too. Either libjpeg strips duplicate app1 markers -- jdmarker.c looks like it doesn&apos;t -- or the second orientation tag is in a later ifd)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754437</commentid>
    <comment_count>33</comment_count>
    <who name="Nico Weber">thakis</who>
    <bug_when>2012-10-30 09:33:13 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; (In reply to comment #31)
&gt; &gt; (In reply to comment #29)
&gt; &gt; &gt; &gt; A general question is what to do when there are any invalid EXIF tags, or two or more valid EXIF orientation tags (as eric and roc@mozilla discussed in bug 19688).  Should we just ignore orientation in these cases?  How does your EXIF reader implementation handle these cases?
&gt; &gt; &gt; 
&gt; &gt; &gt; The code is right here, in this patch :-) 
&gt; &gt; 
&gt; &gt; The code is right there indeed:
&gt; &gt; 
&gt; &gt;    if (tag == orientationTag &amp;&amp; type == shortType &amp;&amp; count == 1)
&gt; &gt;       return ImageOrientation::fromEXIFValue(readUint16(ifd + 8, isBigEndian));
&gt; &gt; 
&gt; &gt; 
&gt; &gt; The &quot;return&quot; suggests the code uses the first orientation tag within an APP1, right?  Doesn&apos;t match the description:
&gt; &gt; 
&gt; &gt; &gt; It keeps the last orientation tag from the last APP1 section.
&gt; 
&gt; It keeps the first tag from the first APP1 section then. Since http://people.mozilla.org/~roc/IMG_20110526_110158.jpg shows up fine, I suppose roc&apos;s description of that image was off too. (I tried changing the code to look at the last tag instead -- only one marker makes it through in that case too. Either libjpeg strips duplicate app1 markers -- jdmarker.c looks like it doesn&apos;t -- or the second orientation tag is in a later ifd)

I changed the code locally to look at more than the first ifd, and roc&apos;s image does have a 2nd orientation marker in a 2nd ifd. From my reading of the spec, that 2nd ifd describes an optional embedded thumbnail though, and that 2nd ifd does contain &quot;width = 320, height = 240, has embedded jpeg data = 1&quot;. So it looks like roc tried to apply the orientation flag from the embedded thumbnail to the main image.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758434</commentid>
    <comment_count>34</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2012-11-05 05:02:42 -0800</bug_when>
    <thetext>(In reply to comment #33)
&gt; &gt; It keeps the first tag from the first APP1 section then. 

It reads the orientation tag from IFD0.  That looks correct to me.

&gt; &gt; Since http://people.mozilla.org/~roc/IMG_20110526_110158.jpg shows up fine, I suppose roc&apos;s description of that image was off too. (I tried changing the code to look at the last tag instead -- only one marker makes it through in that case too. Either libjpeg strips duplicate app1 markers -- jdmarker.c looks like it doesn&apos;t -- or the second orientation tag is in a later ifd)

The second orientation tag is in IFD1, refer to this picture at

http://www.media.mit.edu/pia/Research/deepview/exif.html#ExifData

&gt; I changed the code locally to look at more than the first ifd, and roc&apos;s image does have a 2nd orientation marker in a 2nd ifd. From my reading of the spec, that 2nd ifd describes an optional embedded thumbnail though, and that 2nd ifd does contain &quot;width = 320, height = 240, has embedded jpeg data = 1&quot;. So it looks like roc tried to apply the orientation flag from the embedded thumbnail to the main image.

and I agree, IFD1 is used to describe the EXIF of the thumbnail image.

With bug 100320 done, the reader seems secure and sensible.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170194</attachid>
            <date>2012-10-23 10:58:06 -0700</date>
            <delta_ts>2012-10-23 11:31:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100144-20121023105644.patch</filename>
            <type>text/plain</type>
            <size>8673</size>
            <attacher name="Nico Weber">thakis</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxOTg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjA2NmQ4ZGQ1ZDFmMDM2
ODc1ZTU4Yzg0NDZhZjNkNWEwZDJmZTM4Ny4uNTlhNzBhYTNiN2QyNjAwZTRmNDg4YzIxNTFkNDZk
MTNkYWY4ODViMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTEwLTIzICBOaWNv
IFdlYmVyICA8dGhha2lzQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbiB0aGUgb3Blbi1zb3Vy
Y2UganBlZyBkZWNvZGVyLCByZWFkIGltYWdlIG9yaWVudGF0aW9uIGZyb20gdGhlIGV4aWYgZGF0
YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwMTQ0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyB3
aWxsIGJlIHVzZWQgdG8gaW1wbGVtZW50IHRoZSBzaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlv
bgorICAgICAgICBzZXR0aW5nIChzZWUgYnVnIDE5Njg4KS4gQ3VycmVudGx5IHRoaXMgaXNuJ3Qg
aG9va2VkIHVwIGFueXdoZXJlLCBzbworICAgICAgICBpdCBoYXMgbm8gb2JzZXJ2YWJsZSBlZmZl
Y3QgZm9yIG5vdy4KKworICAgICAgICBPbmNlIGl0J3MgaG9va2VkIHVwLCBpdCB3aWxsIGJlIHRl
c3RlZCBieQorICAgICAgICBmYXN0L2ltYWdlcy9leGlmLW9yaWVudGF0aW9uLmh0bWwKKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAgICAgICogcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZURlY29kZXI6Om9yaWVudGF0aW9uKToKKyAgICAgICAgKEltYWdlRGVjb2Rlcik6CisgICAgICAg
ICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnJlYWRVaW50MTYpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpyZWFkVWludDMyKToKKyAgICAgICAgKFdlYkNvcmU6OmNoZWNrRXhpZkhlYWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpyZWFkSW1hZ2VPcmllbnRhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpKUEVHSW1hZ2VSZWFkZXI6OkpQRUdJbWFnZVJlYWRlcik6CisgICAgICAgIChXZWJD
b3JlOjpKUEVHSW1hZ2VSZWFkZXI6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpKUEVH
SW1hZ2VEZWNvZGVyOjpzZXRPcmllbnRhdGlvbik6CisKIDIwMTItMTAtMjAgIFlhZWwgQWhhcm9u
ICA8eWFlbC5haGFyb25AaW50ZWwuY29tPgogCiAgICAgICAgIFtFRkxdW0FDXSBCdWlsZCBmaXgg
YWZ0ZXIgcjEzMTkzMwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQml0bWFwSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1h
cEltYWdlLmgKaW5kZXggOGZlZGMzZTUwNzMzZWI5NjU5ZTc4NTViZWJjNzljYjcxZGIwY2E1OS4u
MjBiMzA4MWZiZmI5ZTYzMzUwZmI4MDlkNjI2OTgxZTljYjNhZThmOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCkBAIC0yMDUsNyArMjA1LDcg
QEAgcHJvdGVjdGVkOgogI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CiAjaWYgVVNF
KENHKQotICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0
UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxl
Q29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IsIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uRW51
bSk7CisgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRS
ZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVD
b2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwgUmVzcGVjdEltYWdlT3JpZW50YXRpb25FbnVt
KSBPVkVSUklERTsKICNlbmRpZgogCiAjaWYgKE9TKFdJTkNFKSAmJiAhUExBVEZPUk0oUVQpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VE
ZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURl
Y29kZXIuaAppbmRleCA5ZjY5N2E4NGFiMDlhZmJhYzNiNjJhZTNmY2U1NjZjNGZiNmQ3NDJkLi44
YzBkYjM5MjlmNTQyMDhiNDdmYTM2MzgyNzM2YmZiMzE1NjQ3ZjU3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaApAQCAt
MzAwLDYgKzMwMCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRJZ25v
cmVHYW1tYUFuZENvbG9yUHJvZmlsZShib29sIGZsYWcpIHsgbV9pZ25vcmVHYW1tYUFuZENvbG9y
UHJvZmlsZSA9IGZsYWc7IH0KICAgICAgICAgYm9vbCBpZ25vcmVzR2FtbWFBbmRDb2xvclByb2Zp
bGUoKSBjb25zdCB7IHJldHVybiBtX2lnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlOyB9CiAKKyAg
ICAgICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fb3Jp
ZW50YXRpb247IH0KKwogICAgICAgICBlbnVtIHsgaWNjQ29sb3JQcm9maWxlSGVhZGVyTGVuZ3Ro
ID0gMTI4IH07CiAKICAgICAgICAgc3RhdGljIGJvb2wgcmdiQ29sb3JQcm9maWxlKGNvbnN0IGNo
YXIqIHByb2ZpbGVEYXRhLCB1bnNpZ25lZCBwcm9maWxlTGVuZ3RoKQpAQCAtMzkzLDYgKzM5NSw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgVmVjdG9yPGludD4gbV9zY2FsZWRSb3dz
OwogICAgICAgICBib29sIG1fcHJlbXVsdGlwbHlBbHBoYTsKICAgICAgICAgYm9vbCBtX2lnbm9y
ZUdhbW1hQW5kQ29sb3JQcm9maWxlOworICAgICAgICBJbWFnZU9yaWVudGF0aW9uIG1fb3JpZW50
YXRpb247CiAKICAgICBwcml2YXRlOgogICAgICAgICAvLyBTb21lIGNvZGUgcGF0aHMgY29tcHV0
ZSB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UgYXMgIndpZHRoICogaGVpZ2h0ICogNCIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdl
RGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVn
L0pQRUdJbWFnZURlY29kZXIuY3BwCmluZGV4IDUyNWYzYTZmNzIyZTZlMWVlYzBlODA5MTBhMzEx
YTA5YTA1M2ZkZGMuLmI2OTllNzA1Mjg5ZDc1MzhlYzhjNzZjYWNmNTBjN2UxZjk3Y2ZkZWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBF
R0ltYWdlRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcApAQCAtOTcsNiArOTcsOCBAQCBpbmxpbmUg
Ym9vbCBkb0ZhbmN5VXBzYW1wbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiBpbmxpbmUgYm9vbCBk
b0ZhbmN5VXBzYW1wbGluZygpIHsgcmV0dXJuIHRydWU7IH0KICNlbmRpZgogCitjb25zdCBpbnQg
ZXhpZk1hcmtlciA9IEpQRUdfQVBQMCArIDE7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3Ry
dWN0IGRlY29kZXJfZXJyb3JfbWdyIHsKQEAgLTEzMSw2ICsxMzMsNzkgQEAgc3RydWN0IGRlY29k
ZXJfc291cmNlX21nciB7CiAgICAgSlBFR0ltYWdlUmVhZGVyKiBkZWNvZGVyOwogfTsKIAorc3Rh
dGljIHVuc2lnbmVkIHJlYWRVaW50MTYoSk9DVEVUKiBkYXRhLCBib29sIGlzQmlnRW5kaWFuKQor
eworICAgIGlmIChpc0JpZ0VuZGlhbikKKyAgICAgICAgcmV0dXJuIChHRVRKT0NURVQoZGF0YVsw
XSkgPDwgOCkgfCBHRVRKT0NURVQoZGF0YVsxXSk7CisgICAgcmV0dXJuIChHRVRKT0NURVQoZGF0
YVsxXSkgPDwgOCkgfCBHRVRKT0NURVQoZGF0YVswXSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBy
ZWFkVWludDMyKEpPQ1RFVCogZGF0YSwgYm9vbCBpc0JpZ0VuZGlhbikKK3sKKyAgICBpZiAoaXNC
aWdFbmRpYW4pCisgICAgICAgIHJldHVybiAoR0VUSk9DVEVUKGRhdGFbMF0pIDw8IDI0KSB8IChH
RVRKT0NURVQoZGF0YVsxXSkgPDwgMTYpIHwgKEdFVEpPQ1RFVChkYXRhWzJdKSA8PCA4KSB8IEdF
VEpPQ1RFVChkYXRhWzNdKTsKKyAgICByZXR1cm4gKEdFVEpPQ1RFVChkYXRhWzNdKSA8PCAyNCkg
fCAoR0VUSk9DVEVUKGRhdGFbMl0pIDw8IDE2KSB8IChHRVRKT0NURVQoZGF0YVsxXSkgPDwgOCkg
fCBHRVRKT0NURVQoZGF0YVswXSk7Cit9CisKK3N0YXRpYyBib29sCitjaGVja0V4aWZIZWFkZXIo
anBlZ19zYXZlZF9tYXJrZXJfcHRyIG1hcmtlciwgYm9vbCogaXNCaWdFbmRpYW4sIHVuc2lnbmVk
KiBpZGZPZmZzZXQpCit7CisgICAgLy8gRm9yIGV4aWYgZGF0YSwgdGhlIEFQUDEgYmxvY2sgaXMg
Zm9sbG93ZWQgYnkgJ0UnLCAneCcsICdpJywgJ2YnLCAnXDAnLAorICAgIC8vIHRoZW4gYSBmaWxs
IGJ5dGUsIGFuZCB0aGVuIGEgdGlmZiBmaWxlIHRoYXQgY29udGFpbnMgdGhlIG1ldGFkYXRhLgor
ICAgIC8vIEEgdGlmZiBmaWxlIHN0YXJ0cyB3aXRoICdJJywgJ0knIChpbnRlbCAvIGxpdHRsZSBl
bmRpYW4gYnl0ZSBvcmRlcikgb3IKKyAgICAvLyAnTScsICdNJyAobW90b3JvbGEgLyBiaWcgZW5k
aWFuIGJ5dGUgb3JkZXIpLCBmb2xsZWQgYnkgKHVpbnQxNl90KTQyLAorICAgIC8vIGZvbGxvd2Vk
IGJ5IGFuIHVpbnQzMl90IHdpdGggdGhlIG9mZnNldCB0byB0aGUgdGFnIGJsb2NrLCByZWxhdGl2
ZSB0byB0aGUKKyAgICAvLyB0aWZmIGZpbGUgc3RhcnQuCisgICAgY29uc3QgaW50IGV4aWZIZWFk
ZXJTaXplID0gMTQ7CisgICAgaWYgKCEobWFya2VyLT5tYXJrZXIgPT0gZXhpZk1hcmtlcgorICAg
ICAgICAmJiBtYXJrZXItPmRhdGFfbGVuZ3RoID49IGV4aWZIZWFkZXJTaXplCisgICAgICAgICYm
IG1hcmtlci0+ZGF0YVswXSA9PSAnRScKKyAgICAgICAgJiYgbWFya2VyLT5kYXRhWzFdID09ICd4
JworICAgICAgICAmJiBtYXJrZXItPmRhdGFbMl0gPT0gJ2knCisgICAgICAgICYmIG1hcmtlci0+
ZGF0YVszXSA9PSAnZicKKyAgICAgICAgJiYgbWFya2VyLT5kYXRhWzRdID09ICdcMCcKKyAgICAg
ICAgLy8gZGF0YVs1XSBpcyBhIGZpbGwgYnl0ZQorICAgICAgICAmJiAoKG1hcmtlci0+ZGF0YVs2
XSA9PSAnSScgJiYgbWFya2VyLT5kYXRhWzddID09ICdJJykKKyAgICAgICAgICAgIHx8IChtYXJr
ZXItPmRhdGFbNl0gPT0gJ00nICYmIG1hcmtlci0+ZGF0YVs3XSA9PSAnTScpKSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICppc0JpZ0VuZGlhbiA9IG1hcmtlci0+ZGF0YVs2XSA9PSAn
TSc7CisgICAgaWYgKHJlYWRVaW50MTYobWFya2VyLT5kYXRhICsgOCwgKmlzQmlnRW5kaWFuKSAh
PSA0MikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgKmlkZk9mZnNldCA9IHJlYWRVaW50
MzIobWFya2VyLT5kYXRhICsgMTAsICppc0JpZ0VuZGlhbik7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3N0YXRpYyBJbWFnZU9yaWVudGF0aW9uIHJlYWRJbWFnZU9yaWVudGF0aW9uKGpwZWdfZGVj
b21wcmVzc19zdHJ1Y3QqIGluZm8pCit7CisgICAgY29uc3QgaW50IG9yaWVudGF0aW9uVGFnID0g
MHgxMTI7CisgICAgY29uc3QgaW50IHNob3J0VHlwZSA9IDM7CisgICAgZm9yIChqcGVnX3NhdmVk
X21hcmtlcl9wdHIgbWFya2VyID0gaW5mby0+bWFya2VyX2xpc3Q7IG1hcmtlcjsgbWFya2VyID0g
bWFya2VyLT5uZXh0KSB7CisgICAgICAgIGJvb2wgaXNCaWdFbmRpYW47CisgICAgICAgIHVuc2ln
bmVkIGlkZk9mZnNldDsKKyAgICAgICAgaWYgKCFjaGVja0V4aWZIZWFkZXIobWFya2VyLCAmaXNC
aWdFbmRpYW4sICZpZGZPZmZzZXQpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlk
Zk9mZnNldCArPSA2OyAvLyBBY2NvdW50IGZvciAnRXhpZlwwXDAnIGhlYWRlci4KKyAgICAgICAg
aWYgKGlkZk9mZnNldCA+PSBtYXJrZXItPmRhdGFfbGVuZ3RoIC0gMikKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBKT0NURVQqIGlkZiA9IG1hcmtlci0+ZGF0YSArIGlkZk9mZnNldDsK
KyAgICAgICAgSk9DVEVUKiBlbmQgPSBtYXJrZXItPmRhdGEgKyBtYXJrZXItPmRhdGFfbGVuZ3Ro
OworICAgICAgICB1bnNpZ25lZCB0YWdDb3VudCA9IHJlYWRVaW50MTYoaWRmLCBpc0JpZ0VuZGlh
bik7CisgICAgICAgIGlkZiArPSAyOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCB0YWdDb3VudCAmJiBlbmQgLSBpZGYgPj0gMTI7ICsraSwgaWRmICs9IDEyKSB7CisgICAgICAg
ICAgICB1bnNpZ25lZCB0YWcgPSByZWFkVWludDE2KGlkZiwgaXNCaWdFbmRpYW4pOworICAgICAg
ICAgICAgdW5zaWduZWQgdHlwZSA9IHJlYWRVaW50MTYoaWRmICsgMiwgaXNCaWdFbmRpYW4pOwor
ICAgICAgICAgICAgdW5zaWduZWQgY291bnQgPSByZWFkVWludDMyKGlkZiArIDQsIGlzQmlnRW5k
aWFuKTsKKyAgICAgICAgICAgIGlmICh0YWcgPT0gb3JpZW50YXRpb25UYWcgJiYgdHlwZSA9PSBz
aG9ydFR5cGUgJiYgY291bnQgPT0gMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gSW1hZ2VPcmll
bnRhdGlvbjo6ZnJvbUVYSUZWYWx1ZShyZWFkVWludDE2KGlkZiArIDgsIGlzQmlnRW5kaWFuKSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gSW1hZ2VPcmllbnRhdGlvbigpOworfQor
CiBzdGF0aWMgQ29sb3JQcm9maWxlIHJlYWRDb2xvclByb2ZpbGUoanBlZ19kZWNvbXByZXNzX3N0
cnVjdCogaW5mbykKIHsKICNpZiBVU0UoSUNDSlBFRykKQEAgLTIwNiw2ICsyODEsOSBAQCBwdWJs
aWM6CiAgICAgICAgIC8vIFJldGFpbiBJQ0MgY29sb3IgcHJvZmlsZSBtYXJrZXJzIGZvciBjb2xv
ciBtYW5hZ2VtZW50LgogICAgICAgICBzZXR1cF9yZWFkX2ljY19wcm9maWxlKCZtX2luZm8pOwog
I2VuZGlmCisKKyAgICAgICAgLy8gS2VlcCBBUFAxIGJsb2NrcywgZm9yIG9idGFpbmluZyBleGlm
IGRhdGEuCisgICAgICAgIGpwZWdfc2F2ZV9tYXJrZXJzKCZtX2luZm8sIGV4aWZNYXJrZXIsIDB4
RkZGRik7CiAgICAgfQogCiAgICAgfkpQRUdJbWFnZVJlYWRlcigpCkBAIC0zMDgsNiArMzg2LDgg
QEAgcHVibGljOgogICAgICAgICAgICAgaWYgKCFtX2RlY29kZXItPnNldFNpemUobV9pbmZvLmlt
YWdlX3dpZHRoLCBtX2luZm8uaW1hZ2VfaGVpZ2h0KSkKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKKyAgICAgICAgICAgIG1fZGVjb2Rlci0+c2V0T3JpZW50YXRpb24ocmVhZEltYWdl
T3JpZW50YXRpb24oaW5mbygpKSk7CisKICAgICAgICAgICAgIC8vIEFsbG93IGNvbG9yIG1hbmFn
ZW1lbnQgb2YgdGhlIGRlY29kZWQgUkdCQSBwaXhlbHMgaWYgcG9zc2libGUuCiAgICAgICAgICAg
ICBpZiAoIW1fZGVjb2Rlci0+aWdub3Jlc0dhbW1hQW5kQ29sb3JQcm9maWxlKCkpIHsKICAgICAg
ICAgICAgICAgICBDb2xvclByb2ZpbGUgcmdiSW5wdXREZXZpY2VDb2xvclByb2ZpbGUgPSByZWFk
Q29sb3JQcm9maWxlKGluZm8oKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCmluZGV4IGQw
OTVjYmIxNjllNzA3MGIzYjVlMzNiY2UyMTAzZGUwNTJiZTRiNDMuLjk1ZmU4YTQwYmQ4OGM4M2Yy
YzhlNjlmZDFjYzY1MjQ3M2JjMDdhMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCkBA
IC01NCw2ICs1NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBqcGVnQ29t
cGxldGUoKTsKIAogICAgICAgICB2b2lkIHNldENvbG9yUHJvZmlsZShjb25zdCBDb2xvclByb2Zp
bGUmIGNvbG9yUHJvZmlsZSkgeyBtX2NvbG9yUHJvZmlsZSA9IGNvbG9yUHJvZmlsZTsgfQorICAg
ICAgICB2b2lkIHNldE9yaWVudGF0aW9uKEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24pIHsg
bV9vcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICAv
LyBEZWNvZGVzIHRoZSBpbWFnZS4gIElmIHxvbmx5U2l6ZXwgaXMgdHJ1ZSwgc3RvcHMgZGVjb2Rp
bmcgYWZ0ZXIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170199</attachid>
            <date>2012-10-23 11:31:06 -0700</date>
            <delta_ts>2012-10-23 13:29:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100144-20121023112945.patch</filename>
            <type>text/plain</type>
            <size>8688</size>
            <attacher name="Nico Weber">thakis</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxOTg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjA2NmQ4ZGQ1ZDFmMDM2
ODc1ZTU4Yzg0NDZhZjNkNWEwZDJmZTM4Ny4uNTlhNzBhYTNiN2QyNjAwZTRmNDg4YzIxNTFkNDZk
MTNkYWY4ODViMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTEwLTIzICBOaWNv
IFdlYmVyICA8dGhha2lzQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbiB0aGUgb3Blbi1zb3Vy
Y2UganBlZyBkZWNvZGVyLCByZWFkIGltYWdlIG9yaWVudGF0aW9uIGZyb20gdGhlIGV4aWYgZGF0
YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwMTQ0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyB3
aWxsIGJlIHVzZWQgdG8gaW1wbGVtZW50IHRoZSBzaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlv
bgorICAgICAgICBzZXR0aW5nIChzZWUgYnVnIDE5Njg4KS4gQ3VycmVudGx5IHRoaXMgaXNuJ3Qg
aG9va2VkIHVwIGFueXdoZXJlLCBzbworICAgICAgICBpdCBoYXMgbm8gb2JzZXJ2YWJsZSBlZmZl
Y3QgZm9yIG5vdy4KKworICAgICAgICBPbmNlIGl0J3MgaG9va2VkIHVwLCBpdCB3aWxsIGJlIHRl
c3RlZCBieQorICAgICAgICBmYXN0L2ltYWdlcy9leGlmLW9yaWVudGF0aW9uLmh0bWwKKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAgICAgICogcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZURlY29kZXI6Om9yaWVudGF0aW9uKToKKyAgICAgICAgKEltYWdlRGVjb2Rlcik6CisgICAgICAg
ICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnJlYWRVaW50MTYpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpyZWFkVWludDMyKToKKyAgICAgICAgKFdlYkNvcmU6OmNoZWNrRXhpZkhlYWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpyZWFkSW1hZ2VPcmllbnRhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpKUEVHSW1hZ2VSZWFkZXI6OkpQRUdJbWFnZVJlYWRlcik6CisgICAgICAgIChXZWJD
b3JlOjpKUEVHSW1hZ2VSZWFkZXI6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpKUEVH
SW1hZ2VEZWNvZGVyOjpzZXRPcmllbnRhdGlvbik6CisKIDIwMTItMTAtMjAgIFlhZWwgQWhhcm9u
ICA8eWFlbC5haGFyb25AaW50ZWwuY29tPgogCiAgICAgICAgIFtFRkxdW0FDXSBCdWlsZCBmaXgg
YWZ0ZXIgcjEzMTkzMwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQml0bWFwSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1h
cEltYWdlLmgKaW5kZXggOGZlZGMzZTUwNzMzZWI5NjU5ZTc4NTViZWJjNzljYjcxZGIwY2E1OS4u
MjBiMzA4MWZiZmI5ZTYzMzUwZmI4MDlkNjI2OTgxZTljYjNhZThmOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCkBAIC0yMDUsNyArMjA1LDcg
QEAgcHJvdGVjdGVkOgogI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CiAjaWYgVVNF
KENHKQotICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0
UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxl
Q29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IsIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uRW51
bSk7CisgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRS
ZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVD
b2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwgUmVzcGVjdEltYWdlT3JpZW50YXRpb25FbnVt
KSBPVkVSUklERTsKICNlbmRpZgogCiAjaWYgKE9TKFdJTkNFKSAmJiAhUExBVEZPUk0oUVQpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VE
ZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURl
Y29kZXIuaAppbmRleCA5ZjY5N2E4NGFiMDlhZmJhYzNiNjJhZTNmY2U1NjZjNGZiNmQ3NDJkLi44
YzBkYjM5MjlmNTQyMDhiNDdmYTM2MzgyNzM2YmZiMzE1NjQ3ZjU3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaApAQCAt
MzAwLDYgKzMwMCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRJZ25v
cmVHYW1tYUFuZENvbG9yUHJvZmlsZShib29sIGZsYWcpIHsgbV9pZ25vcmVHYW1tYUFuZENvbG9y
UHJvZmlsZSA9IGZsYWc7IH0KICAgICAgICAgYm9vbCBpZ25vcmVzR2FtbWFBbmRDb2xvclByb2Zp
bGUoKSBjb25zdCB7IHJldHVybiBtX2lnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlOyB9CiAKKyAg
ICAgICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fb3Jp
ZW50YXRpb247IH0KKwogICAgICAgICBlbnVtIHsgaWNjQ29sb3JQcm9maWxlSGVhZGVyTGVuZ3Ro
ID0gMTI4IH07CiAKICAgICAgICAgc3RhdGljIGJvb2wgcmdiQ29sb3JQcm9maWxlKGNvbnN0IGNo
YXIqIHByb2ZpbGVEYXRhLCB1bnNpZ25lZCBwcm9maWxlTGVuZ3RoKQpAQCAtMzkzLDYgKzM5NSw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgVmVjdG9yPGludD4gbV9zY2FsZWRSb3dz
OwogICAgICAgICBib29sIG1fcHJlbXVsdGlwbHlBbHBoYTsKICAgICAgICAgYm9vbCBtX2lnbm9y
ZUdhbW1hQW5kQ29sb3JQcm9maWxlOworICAgICAgICBJbWFnZU9yaWVudGF0aW9uIG1fb3JpZW50
YXRpb247CiAKICAgICBwcml2YXRlOgogICAgICAgICAvLyBTb21lIGNvZGUgcGF0aHMgY29tcHV0
ZSB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UgYXMgIndpZHRoICogaGVpZ2h0ICogNCIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdl
RGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVn
L0pQRUdJbWFnZURlY29kZXIuY3BwCmluZGV4IDUyNWYzYTZmNzIyZTZlMWVlYzBlODA5MTBhMzEx
YTA5YTA1M2ZkZGMuLmQxMDI2NmE3ZTcyODk5ZDcwYTk3NDJjZjVkNTJhOTM0MzdkNjYwNWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBF
R0ltYWdlRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcApAQCAtOTcsNiArOTcsOCBAQCBpbmxpbmUg
Ym9vbCBkb0ZhbmN5VXBzYW1wbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiBpbmxpbmUgYm9vbCBk
b0ZhbmN5VXBzYW1wbGluZygpIHsgcmV0dXJuIHRydWU7IH0KICNlbmRpZgogCitjb25zdCBpbnQg
ZXhpZk1hcmtlciA9IEpQRUdfQVBQMCArIDE7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3Ry
dWN0IGRlY29kZXJfZXJyb3JfbWdyIHsKQEAgLTEzMSw2ICsxMzMsNzkgQEAgc3RydWN0IGRlY29k
ZXJfc291cmNlX21nciB7CiAgICAgSlBFR0ltYWdlUmVhZGVyKiBkZWNvZGVyOwogfTsKIAorc3Rh
dGljIHVuc2lnbmVkIHJlYWRVaW50MTYoSk9DVEVUKiBkYXRhLCBib29sIGlzQmlnRW5kaWFuKQor
eworICAgIGlmIChpc0JpZ0VuZGlhbikKKyAgICAgICAgcmV0dXJuIChHRVRKT0NURVQoZGF0YVsw
XSkgPDwgOCkgfCBHRVRKT0NURVQoZGF0YVsxXSk7CisgICAgcmV0dXJuIChHRVRKT0NURVQoZGF0
YVsxXSkgPDwgOCkgfCBHRVRKT0NURVQoZGF0YVswXSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBy
ZWFkVWludDMyKEpPQ1RFVCogZGF0YSwgYm9vbCBpc0JpZ0VuZGlhbikKK3sKKyAgICBpZiAoaXNC
aWdFbmRpYW4pCisgICAgICAgIHJldHVybiAoR0VUSk9DVEVUKGRhdGFbMF0pIDw8IDI0KSB8IChH
RVRKT0NURVQoZGF0YVsxXSkgPDwgMTYpIHwgKEdFVEpPQ1RFVChkYXRhWzJdKSA8PCA4KSB8IEdF
VEpPQ1RFVChkYXRhWzNdKTsKKyAgICByZXR1cm4gKEdFVEpPQ1RFVChkYXRhWzNdKSA8PCAyNCkg
fCAoR0VUSk9DVEVUKGRhdGFbMl0pIDw8IDE2KSB8IChHRVRKT0NURVQoZGF0YVsxXSkgPDwgOCkg
fCBHRVRKT0NURVQoZGF0YVswXSk7Cit9CisKK3N0YXRpYyBib29sCitjaGVja0V4aWZIZWFkZXIo
anBlZ19zYXZlZF9tYXJrZXJfcHRyIG1hcmtlciwgYm9vbCogaXNCaWdFbmRpYW4sIHVuc2lnbmVk
KiBpZGZPZmZzZXQpCit7CisgICAgLy8gRm9yIGV4aWYgZGF0YSwgdGhlIEFQUDEgYmxvY2sgaXMg
Zm9sbG93ZWQgYnkgJ0UnLCAneCcsICdpJywgJ2YnLCAnXDAnLAorICAgIC8vIHRoZW4gYSBmaWxs
IGJ5dGUsIGFuZCB0aGVuIGEgdGlmZiBmaWxlIHRoYXQgY29udGFpbnMgdGhlIG1ldGFkYXRhLgor
ICAgIC8vIEEgdGlmZiBmaWxlIHN0YXJ0cyB3aXRoICdJJywgJ0knIChpbnRlbCAvIGxpdHRsZSBl
bmRpYW4gYnl0ZSBvcmRlcikgb3IKKyAgICAvLyAnTScsICdNJyAobW90b3JvbGEgLyBiaWcgZW5k
aWFuIGJ5dGUgb3JkZXIpLCBmb2xsZWQgYnkgKHVpbnQxNl90KTQyLAorICAgIC8vIGZvbGxvd2Vk
IGJ5IGFuIHVpbnQzMl90IHdpdGggdGhlIG9mZnNldCB0byB0aGUgdGFnIGJsb2NrLCByZWxhdGl2
ZSB0byB0aGUKKyAgICAvLyB0aWZmIGZpbGUgc3RhcnQuCisgICAgY29uc3QgdW5zaWduZWQgZXhp
ZkhlYWRlclNpemUgPSAxNDsKKyAgICBpZiAoIShtYXJrZXItPm1hcmtlciA9PSBleGlmTWFya2Vy
CisgICAgICAgICYmIG1hcmtlci0+ZGF0YV9sZW5ndGggPj0gZXhpZkhlYWRlclNpemUKKyAgICAg
ICAgJiYgbWFya2VyLT5kYXRhWzBdID09ICdFJworICAgICAgICAmJiBtYXJrZXItPmRhdGFbMV0g
PT0gJ3gnCisgICAgICAgICYmIG1hcmtlci0+ZGF0YVsyXSA9PSAnaScKKyAgICAgICAgJiYgbWFy
a2VyLT5kYXRhWzNdID09ICdmJworICAgICAgICAmJiBtYXJrZXItPmRhdGFbNF0gPT0gJ1wwJwor
ICAgICAgICAvLyBkYXRhWzVdIGlzIGEgZmlsbCBieXRlCisgICAgICAgICYmICgobWFya2VyLT5k
YXRhWzZdID09ICdJJyAmJiBtYXJrZXItPmRhdGFbN10gPT0gJ0knKQorICAgICAgICAgICAgfHwg
KG1hcmtlci0+ZGF0YVs2XSA9PSAnTScgJiYgbWFya2VyLT5kYXRhWzddID09ICdNJykpKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgKmlzQmlnRW5kaWFuID0gbWFya2VyLT5kYXRhWzZd
ID09ICdNJzsKKyAgICBpZiAocmVhZFVpbnQxNihtYXJrZXItPmRhdGEgKyA4LCAqaXNCaWdFbmRp
YW4pICE9IDQyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAqaWRmT2Zmc2V0ID0gcmVh
ZFVpbnQzMihtYXJrZXItPmRhdGEgKyAxMCwgKmlzQmlnRW5kaWFuKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworc3RhdGljIEltYWdlT3JpZW50YXRpb24gcmVhZEltYWdlT3JpZW50YXRpb24oanBl
Z19kZWNvbXByZXNzX3N0cnVjdCogaW5mbykKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBvcmllbnRh
dGlvblRhZyA9IDB4MTEyOworICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0VHlwZSA9IDM7CisgICAg
Zm9yIChqcGVnX3NhdmVkX21hcmtlcl9wdHIgbWFya2VyID0gaW5mby0+bWFya2VyX2xpc3Q7IG1h
cmtlcjsgbWFya2VyID0gbWFya2VyLT5uZXh0KSB7CisgICAgICAgIGJvb2wgaXNCaWdFbmRpYW47
CisgICAgICAgIHVuc2lnbmVkIGlkZk9mZnNldDsKKyAgICAgICAgaWYgKCFjaGVja0V4aWZIZWFk
ZXIobWFya2VyLCAmaXNCaWdFbmRpYW4sICZpZGZPZmZzZXQpKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIGlkZk9mZnNldCArPSA2OyAvLyBBY2NvdW50IGZvciAnRXhpZlwwXDAnIGhl
YWRlci4KKyAgICAgICAgaWYgKGlkZk9mZnNldCA+PSBtYXJrZXItPmRhdGFfbGVuZ3RoIC0gMikK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBKT0NURVQqIGlkZiA9IG1hcmtlci0+ZGF0
YSArIGlkZk9mZnNldDsKKyAgICAgICAgSk9DVEVUKiBlbmQgPSBtYXJrZXItPmRhdGEgKyBtYXJr
ZXItPmRhdGFfbGVuZ3RoOworICAgICAgICB1bnNpZ25lZCB0YWdDb3VudCA9IHJlYWRVaW50MTYo
aWRmLCBpc0JpZ0VuZGlhbik7CisgICAgICAgIGlkZiArPSAyOworCisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB0YWdDb3VudCAmJiBlbmQgLSBpZGYgPj0gMTI7ICsraSwgaWRmICs9
IDEyKSB7CisgICAgICAgICAgICB1bnNpZ25lZCB0YWcgPSByZWFkVWludDE2KGlkZiwgaXNCaWdF
bmRpYW4pOworICAgICAgICAgICAgdW5zaWduZWQgdHlwZSA9IHJlYWRVaW50MTYoaWRmICsgMiwg
aXNCaWdFbmRpYW4pOworICAgICAgICAgICAgdW5zaWduZWQgY291bnQgPSByZWFkVWludDMyKGlk
ZiArIDQsIGlzQmlnRW5kaWFuKTsKKyAgICAgICAgICAgIGlmICh0YWcgPT0gb3JpZW50YXRpb25U
YWcgJiYgdHlwZSA9PSBzaG9ydFR5cGUgJiYgY291bnQgPT0gMSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gSW1hZ2VPcmllbnRhdGlvbjo6ZnJvbUVYSUZWYWx1ZShyZWFkVWludDE2KGlkZiArIDgs
IGlzQmlnRW5kaWFuKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gSW1hZ2VPcmll
bnRhdGlvbigpOworfQorCiBzdGF0aWMgQ29sb3JQcm9maWxlIHJlYWRDb2xvclByb2ZpbGUoanBl
Z19kZWNvbXByZXNzX3N0cnVjdCogaW5mbykKIHsKICNpZiBVU0UoSUNDSlBFRykKQEAgLTIwNiw2
ICsyODEsOSBAQCBwdWJsaWM6CiAgICAgICAgIC8vIFJldGFpbiBJQ0MgY29sb3IgcHJvZmlsZSBt
YXJrZXJzIGZvciBjb2xvciBtYW5hZ2VtZW50LgogICAgICAgICBzZXR1cF9yZWFkX2ljY19wcm9m
aWxlKCZtX2luZm8pOwogI2VuZGlmCisKKyAgICAgICAgLy8gS2VlcCBBUFAxIGJsb2NrcywgZm9y
IG9idGFpbmluZyBleGlmIGRhdGEuCisgICAgICAgIGpwZWdfc2F2ZV9tYXJrZXJzKCZtX2luZm8s
IGV4aWZNYXJrZXIsIDB4RkZGRik7CiAgICAgfQogCiAgICAgfkpQRUdJbWFnZVJlYWRlcigpCkBA
IC0zMDgsNiArMzg2LDggQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKCFtX2RlY29kZXItPnNl
dFNpemUobV9pbmZvLmltYWdlX3dpZHRoLCBtX2luZm8uaW1hZ2VfaGVpZ2h0KSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICAgICAgICAgIG1fZGVjb2Rlci0+c2V0T3JpZW50
YXRpb24ocmVhZEltYWdlT3JpZW50YXRpb24oaW5mbygpKSk7CisKICAgICAgICAgICAgIC8vIEFs
bG93IGNvbG9yIG1hbmFnZW1lbnQgb2YgdGhlIGRlY29kZWQgUkdCQSBwaXhlbHMgaWYgcG9zc2li
bGUuCiAgICAgICAgICAgICBpZiAoIW1fZGVjb2Rlci0+aWdub3Jlc0dhbW1hQW5kQ29sb3JQcm9m
aWxlKCkpIHsKICAgICAgICAgICAgICAgICBDb2xvclByb2ZpbGUgcmdiSW5wdXREZXZpY2VDb2xv
clByb2ZpbGUgPSByZWFkQ29sb3JQcm9maWxlKGluZm8oKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVj
b2Rlci5oCmluZGV4IGQwOTVjYmIxNjllNzA3MGIzYjVlMzNiY2UyMTAzZGUwNTJiZTRiNDMuLjk1
ZmU4YTQwYmQ4OGM4M2YyYzhlNjlmZDFjYzY1MjQ3M2JjMDdhMDkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0lt
YWdlRGVjb2Rlci5oCkBAIC01NCw2ICs1NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdm9pZCBqcGVnQ29tcGxldGUoKTsKIAogICAgICAgICB2b2lkIHNldENvbG9yUHJvZmlsZShj
b25zdCBDb2xvclByb2ZpbGUmIGNvbG9yUHJvZmlsZSkgeyBtX2NvbG9yUHJvZmlsZSA9IGNvbG9y
UHJvZmlsZTsgfQorICAgICAgICB2b2lkIHNldE9yaWVudGF0aW9uKEltYWdlT3JpZW50YXRpb24g
b3JpZW50YXRpb24pIHsgbV9vcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uOyB9CiAKICAgICBwcml2
YXRlOgogICAgICAgICAvLyBEZWNvZGVzIHRoZSBpbWFnZS4gIElmIHxvbmx5U2l6ZXwgaXMgdHJ1
ZSwgc3RvcHMgZGVjb2RpbmcgYWZ0ZXIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170219</attachid>
            <date>2012-10-23 13:29:21 -0700</date>
            <delta_ts>2012-10-23 13:43:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100144-20121023132800.patch</filename>
            <type>text/plain</type>
            <size>9228</size>
            <attacher name="Nico Weber">thakis</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxOTg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjA2NmQ4ZGQ1ZDFmMDM2
ODc1ZTU4Yzg0NDZhZjNkNWEwZDJmZTM4Ny4uNTlhNzBhYTNiN2QyNjAwZTRmNDg4YzIxNTFkNDZk
MTNkYWY4ODViMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTEwLTIzICBOaWNv
IFdlYmVyICA8dGhha2lzQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbiB0aGUgb3Blbi1zb3Vy
Y2UganBlZyBkZWNvZGVyLCByZWFkIGltYWdlIG9yaWVudGF0aW9uIGZyb20gdGhlIGV4aWYgZGF0
YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwMTQ0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyB3
aWxsIGJlIHVzZWQgdG8gaW1wbGVtZW50IHRoZSBzaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlv
bgorICAgICAgICBzZXR0aW5nIChzZWUgYnVnIDE5Njg4KS4gQ3VycmVudGx5IHRoaXMgaXNuJ3Qg
aG9va2VkIHVwIGFueXdoZXJlLCBzbworICAgICAgICBpdCBoYXMgbm8gb2JzZXJ2YWJsZSBlZmZl
Y3QgZm9yIG5vdy4KKworICAgICAgICBPbmNlIGl0J3MgaG9va2VkIHVwLCBpdCB3aWxsIGJlIHRl
c3RlZCBieQorICAgICAgICBmYXN0L2ltYWdlcy9leGlmLW9yaWVudGF0aW9uLmh0bWwKKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAgICAgICogcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZURlY29kZXI6Om9yaWVudGF0aW9uKToKKyAgICAgICAgKEltYWdlRGVjb2Rlcik6CisgICAgICAg
ICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnJlYWRVaW50MTYpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpyZWFkVWludDMyKToKKyAgICAgICAgKFdlYkNvcmU6OmNoZWNrRXhpZkhlYWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpyZWFkSW1hZ2VPcmllbnRhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpKUEVHSW1hZ2VSZWFkZXI6OkpQRUdJbWFnZVJlYWRlcik6CisgICAgICAgIChXZWJD
b3JlOjpKUEVHSW1hZ2VSZWFkZXI6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpKUEVH
SW1hZ2VEZWNvZGVyOjpzZXRPcmllbnRhdGlvbik6CisKIDIwMTItMTAtMjAgIFlhZWwgQWhhcm9u
ICA8eWFlbC5haGFyb25AaW50ZWwuY29tPgogCiAgICAgICAgIFtFRkxdW0FDXSBCdWlsZCBmaXgg
YWZ0ZXIgcjEzMTkzMwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQml0bWFwSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1h
cEltYWdlLmgKaW5kZXggOGZlZGMzZTUwNzMzZWI5NjU5ZTc4NTViZWJjNzljYjcxZGIwY2E1OS4u
MjBiMzA4MWZiZmI5ZTYzMzUwZmI4MDlkNjI2OTgxZTljYjNhZThmOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCkBAIC0yMDUsNyArMjA1LDcg
QEAgcHJvdGVjdGVkOgogI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CiAjaWYgVVNF
KENHKQotICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0
UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxl
Q29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IsIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uRW51
bSk7CisgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRS
ZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVD
b2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwgUmVzcGVjdEltYWdlT3JpZW50YXRpb25FbnVt
KSBPVkVSUklERTsKICNlbmRpZgogCiAjaWYgKE9TKFdJTkNFKSAmJiAhUExBVEZPUk0oUVQpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VE
ZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURl
Y29kZXIuaAppbmRleCA5ZjY5N2E4NGFiMDlhZmJhYzNiNjJhZTNmY2U1NjZjNGZiNmQ3NDJkLi44
YzBkYjM5MjlmNTQyMDhiNDdmYTM2MzgyNzM2YmZiMzE1NjQ3ZjU3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaApAQCAt
MzAwLDYgKzMwMCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRJZ25v
cmVHYW1tYUFuZENvbG9yUHJvZmlsZShib29sIGZsYWcpIHsgbV9pZ25vcmVHYW1tYUFuZENvbG9y
UHJvZmlsZSA9IGZsYWc7IH0KICAgICAgICAgYm9vbCBpZ25vcmVzR2FtbWFBbmRDb2xvclByb2Zp
bGUoKSBjb25zdCB7IHJldHVybiBtX2lnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlOyB9CiAKKyAg
ICAgICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fb3Jp
ZW50YXRpb247IH0KKwogICAgICAgICBlbnVtIHsgaWNjQ29sb3JQcm9maWxlSGVhZGVyTGVuZ3Ro
ID0gMTI4IH07CiAKICAgICAgICAgc3RhdGljIGJvb2wgcmdiQ29sb3JQcm9maWxlKGNvbnN0IGNo
YXIqIHByb2ZpbGVEYXRhLCB1bnNpZ25lZCBwcm9maWxlTGVuZ3RoKQpAQCAtMzkzLDYgKzM5NSw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgVmVjdG9yPGludD4gbV9zY2FsZWRSb3dz
OwogICAgICAgICBib29sIG1fcHJlbXVsdGlwbHlBbHBoYTsKICAgICAgICAgYm9vbCBtX2lnbm9y
ZUdhbW1hQW5kQ29sb3JQcm9maWxlOworICAgICAgICBJbWFnZU9yaWVudGF0aW9uIG1fb3JpZW50
YXRpb247CiAKICAgICBwcml2YXRlOgogICAgICAgICAvLyBTb21lIGNvZGUgcGF0aHMgY29tcHV0
ZSB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UgYXMgIndpZHRoICogaGVpZ2h0ICogNCIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdl
RGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVn
L0pQRUdJbWFnZURlY29kZXIuY3BwCmluZGV4IDUyNWYzYTZmNzIyZTZlMWVlYzBlODA5MTBhMzEx
YTA5YTA1M2ZkZGMuLmQ2ZjQ0YWY2NThiNmIzNmVjMjA0MzI0ZGY2NjQxMDc1NjUzZDAxZWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBF
R0ltYWdlRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcApAQCAtOTcsNiArOTcsOCBAQCBpbmxpbmUg
Ym9vbCBkb0ZhbmN5VXBzYW1wbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiBpbmxpbmUgYm9vbCBk
b0ZhbmN5VXBzYW1wbGluZygpIHsgcmV0dXJuIHRydWU7IH0KICNlbmRpZgogCitjb25zdCBpbnQg
ZXhpZk1hcmtlciA9IEpQRUdfQVBQMCArIDE7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3Ry
dWN0IGRlY29kZXJfZXJyb3JfbWdyIHsKQEAgLTEzMSw2ICsxMzMsODYgQEAgc3RydWN0IGRlY29k
ZXJfc291cmNlX21nciB7CiAgICAgSlBFR0ltYWdlUmVhZGVyKiBkZWNvZGVyOwogfTsKIAorc3Rh
dGljIHVuc2lnbmVkIHJlYWRVaW50MTYoSk9DVEVUKiBkYXRhLCBib29sIGlzQmlnRW5kaWFuKQor
eworICAgIGlmIChpc0JpZ0VuZGlhbikKKyAgICAgICAgcmV0dXJuIChHRVRKT0NURVQoZGF0YVsw
XSkgPDwgOCkgfCBHRVRKT0NURVQoZGF0YVsxXSk7CisgICAgcmV0dXJuIChHRVRKT0NURVQoZGF0
YVsxXSkgPDwgOCkgfCBHRVRKT0NURVQoZGF0YVswXSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBy
ZWFkVWludDMyKEpPQ1RFVCogZGF0YSwgYm9vbCBpc0JpZ0VuZGlhbikKK3sKKyAgICBpZiAoaXNC
aWdFbmRpYW4pCisgICAgICAgIHJldHVybiAoR0VUSk9DVEVUKGRhdGFbMF0pIDw8IDI0KSB8IChH
RVRKT0NURVQoZGF0YVsxXSkgPDwgMTYpIHwgKEdFVEpPQ1RFVChkYXRhWzJdKSA8PCA4KSB8IEdF
VEpPQ1RFVChkYXRhWzNdKTsKKyAgICByZXR1cm4gKEdFVEpPQ1RFVChkYXRhWzNdKSA8PCAyNCkg
fCAoR0VUSk9DVEVUKGRhdGFbMl0pIDw8IDE2KSB8IChHRVRKT0NURVQoZGF0YVsxXSkgPDwgOCkg
fCBHRVRKT0NURVQoZGF0YVswXSk7Cit9CisKK3N0YXRpYyBib29sIGNoZWNrRXhpZkhlYWRlcihq
cGVnX3NhdmVkX21hcmtlcl9wdHIgbWFya2VyLCBib29sJiBpc0JpZ0VuZGlhbiwgdW5zaWduZWQm
IGlmZE9mZnNldCkKK3sKKyAgICAvLyBGb3IgZXhpZiBkYXRhLCB0aGUgQVBQMSBibG9jayBpcyBm
b2xsb3dlZCBieSAnRScsICd4JywgJ2knLCAnZicsICdcMCcsCisgICAgLy8gdGhlbiBhIGZpbGwg
Ynl0ZSwgYW5kIHRoZW4gYSB0aWZmIGZpbGUgdGhhdCBjb250YWlucyB0aGUgbWV0YWRhdGEuCisg
ICAgLy8gQSB0aWZmIGZpbGUgc3RhcnRzIHdpdGggJ0knLCAnSScgKGludGVsIC8gbGl0dGxlIGVu
ZGlhbiBieXRlIG9yZGVyKSBvcgorICAgIC8vICdNJywgJ00nIChtb3Rvcm9sYSAvIGJpZyBlbmRp
YW4gYnl0ZSBvcmRlciksIGZvbGxvd2VkIGJ5ICh1aW50MTZfdCk0MiwKKyAgICAvLyBmb2xsb3dl
ZCBieSBhbiB1aW50MzJfdCB3aXRoIHRoZSBvZmZzZXQgdG8gdGhlIHRhZyBibG9jaywgcmVsYXRp
dmUgdG8gdGhlCisgICAgLy8gdGlmZiBmaWxlIHN0YXJ0LgorICAgIGNvbnN0IHVuc2lnbmVkIGV4
aWZIZWFkZXJTaXplID0gMTQ7CisgICAgaWYgKCEobWFya2VyLT5tYXJrZXIgPT0gZXhpZk1hcmtl
cgorICAgICAgICAmJiBtYXJrZXItPmRhdGFfbGVuZ3RoID49IGV4aWZIZWFkZXJTaXplCisgICAg
ICAgICYmIG1hcmtlci0+ZGF0YVswXSA9PSAnRScKKyAgICAgICAgJiYgbWFya2VyLT5kYXRhWzFd
ID09ICd4JworICAgICAgICAmJiBtYXJrZXItPmRhdGFbMl0gPT0gJ2knCisgICAgICAgICYmIG1h
cmtlci0+ZGF0YVszXSA9PSAnZicKKyAgICAgICAgJiYgbWFya2VyLT5kYXRhWzRdID09ICdcMCcK
KyAgICAgICAgLy8gZGF0YVs1XSBpcyBhIGZpbGwgYnl0ZQorICAgICAgICAmJiAoKG1hcmtlci0+
ZGF0YVs2XSA9PSAnSScgJiYgbWFya2VyLT5kYXRhWzddID09ICdJJykKKyAgICAgICAgICAgIHx8
IChtYXJrZXItPmRhdGFbNl0gPT0gJ00nICYmIG1hcmtlci0+ZGF0YVs3XSA9PSAnTScpKSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlzQmlnRW5kaWFuID0gbWFya2VyLT5kYXRhWzZd
ID09ICdNJzsKKyAgICBpZiAocmVhZFVpbnQxNihtYXJrZXItPmRhdGEgKyA4LCBpc0JpZ0VuZGlh
bikgIT0gNDIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmZE9mZnNldCA9IHJlYWRV
aW50MzIobWFya2VyLT5kYXRhICsgMTAsIGlzQmlnRW5kaWFuKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworc3RhdGljIEltYWdlT3JpZW50YXRpb24gcmVhZEltYWdlT3JpZW50YXRpb24oanBlZ19k
ZWNvbXByZXNzX3N0cnVjdCogaW5mbykKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBvcmllbnRhdGlv
blRhZyA9IDB4MTEyOworICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0VHlwZSA9IDM7CisgICAgZm9y
IChqcGVnX3NhdmVkX21hcmtlcl9wdHIgbWFya2VyID0gaW5mby0+bWFya2VyX2xpc3Q7IG1hcmtl
cjsgbWFya2VyID0gbWFya2VyLT5uZXh0KSB7CisgICAgICAgIGJvb2wgaXNCaWdFbmRpYW47Cisg
ICAgICAgIHVuc2lnbmVkIGlmZE9mZnNldDsKKyAgICAgICAgaWYgKCFjaGVja0V4aWZIZWFkZXIo
bWFya2VyLCBpc0JpZ0VuZGlhbiwgaWZkT2Zmc2V0KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBpZmRPZmZzZXQgKz0gNjsgLy8gQWNjb3VudCBmb3IgJ0V4aWZcMFwwJyBoZWFkZXIu
CisKKyAgICAgICAgLy8gVGhlIGpwZWcgZXhpZiBjb250YWluZXIgZm9ybWF0IGNvbnRhaW5zIGEg
dGlmZiBibG9jayBmb3IgbWV0YWRhdGEuCisgICAgICAgIC8vIEEgdGlmZiBpbWFnZSBmaWxlIGRp
cmVjdG9yeSAoaWZkKSBjb25zaXN0cyBvZiBhIHVpbnQxNl90IGRlc2NyaWJpbmcKKyAgICAgICAg
Ly8gdGhlIG51bWJlciBvZiBpZmQgZW50cmllcywgZm9sbG93ZWQgYnkgdGhhdCBtYW55IGVudHJp
ZXMuCisgICAgICAgIEpPQ1RFVCogaWZkID0gbWFya2VyLT5kYXRhICsgaWZkT2Zmc2V0OworICAg
ICAgICBKT0NURVQqIGVuZCA9IG1hcmtlci0+ZGF0YSArIG1hcmtlci0+ZGF0YV9sZW5ndGg7Cisg
ICAgICAgIGlmIChlbmQgLSBpZmQgPCAyKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IHVuc2lnbmVkIHRhZ0NvdW50ID0gcmVhZFVpbnQxNihpZmQsIGlzQmlnRW5kaWFuKTsKKyAgICAg
ICAgaWZkICs9IDI7IC8vIFNraXAgb3ZlciB0aGUgdWludDE2IHRoYXQgd2FzIGp1c3QgcmVhZC4K
KworICAgICAgICAvLyBFdmVyeSBpZmQgZW50cnkgaXMgMiBieXRlcyBvZiB0YWcsIDIgYnl0ZXMg
b2YgY29udGVudHMgZGF0YXR5cGUsCisgICAgICAgIC8vIDQgYnl0ZXMgb2YgbnVtYmVyLW9mLWVs
ZW1lbnRzLCBhbmQgNCBieXRlcyBvZiBlaXRoZXIgb2Zmc2V0IHRvIHRoZQorICAgICAgICAvLyB0
YWcgZGF0YSwgb3IgaWYgdGhlIGRhdGEgaXMgc21hbGwgZW5vdWdoLCB0aGUgaW5saW5lZCBkYXRh
IGl0c2VsZi4KKyAgICAgICAgY29uc3QgaW50IGlmZEVudHJ5U2l6ZSA9IDEyOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFnQ291bnQgJiYgZW5kIC0gaWZkID49IGlmZEVudHJ5
U2l6ZTsgKytpLCBpZmQgKz0gaWZkRW50cnlTaXplKSB7CisgICAgICAgICAgICB1bnNpZ25lZCB0
YWcgPSByZWFkVWludDE2KGlmZCwgaXNCaWdFbmRpYW4pOworICAgICAgICAgICAgdW5zaWduZWQg
dHlwZSA9IHJlYWRVaW50MTYoaWZkICsgMiwgaXNCaWdFbmRpYW4pOworICAgICAgICAgICAgdW5z
aWduZWQgY291bnQgPSByZWFkVWludDMyKGlmZCArIDQsIGlzQmlnRW5kaWFuKTsKKyAgICAgICAg
ICAgIGlmICh0YWcgPT0gb3JpZW50YXRpb25UYWcgJiYgdHlwZSA9PSBzaG9ydFR5cGUgJiYgY291
bnQgPT0gMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gSW1hZ2VPcmllbnRhdGlvbjo6ZnJvbUVY
SUZWYWx1ZShyZWFkVWludDE2KGlmZCArIDgsIGlzQmlnRW5kaWFuKSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gSW1hZ2VPcmllbnRhdGlvbigpOworfQorCiBzdGF0aWMgQ29sb3JQ
cm9maWxlIHJlYWRDb2xvclByb2ZpbGUoanBlZ19kZWNvbXByZXNzX3N0cnVjdCogaW5mbykKIHsK
ICNpZiBVU0UoSUNDSlBFRykKQEAgLTIwNiw2ICsyODgsOSBAQCBwdWJsaWM6CiAgICAgICAgIC8v
IFJldGFpbiBJQ0MgY29sb3IgcHJvZmlsZSBtYXJrZXJzIGZvciBjb2xvciBtYW5hZ2VtZW50Lgog
ICAgICAgICBzZXR1cF9yZWFkX2ljY19wcm9maWxlKCZtX2luZm8pOwogI2VuZGlmCisKKyAgICAg
ICAgLy8gS2VlcCBBUFAxIGJsb2NrcywgZm9yIG9idGFpbmluZyBleGlmIGRhdGEuCisgICAgICAg
IGpwZWdfc2F2ZV9tYXJrZXJzKCZtX2luZm8sIGV4aWZNYXJrZXIsIDB4RkZGRik7CiAgICAgfQog
CiAgICAgfkpQRUdJbWFnZVJlYWRlcigpCkBAIC0zMDgsNiArMzkzLDggQEAgcHVibGljOgogICAg
ICAgICAgICAgaWYgKCFtX2RlY29kZXItPnNldFNpemUobV9pbmZvLmltYWdlX3dpZHRoLCBtX2lu
Zm8uaW1hZ2VfaGVpZ2h0KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICAg
ICAgICAgIG1fZGVjb2Rlci0+c2V0T3JpZW50YXRpb24ocmVhZEltYWdlT3JpZW50YXRpb24oaW5m
bygpKSk7CisKICAgICAgICAgICAgIC8vIEFsbG93IGNvbG9yIG1hbmFnZW1lbnQgb2YgdGhlIGRl
Y29kZWQgUkdCQSBwaXhlbHMgaWYgcG9zc2libGUuCiAgICAgICAgICAgICBpZiAoIW1fZGVjb2Rl
ci0+aWdub3Jlc0dhbW1hQW5kQ29sb3JQcm9maWxlKCkpIHsKICAgICAgICAgICAgICAgICBDb2xv
clByb2ZpbGUgcmdiSW5wdXREZXZpY2VDb2xvclByb2ZpbGUgPSByZWFkQ29sb3JQcm9maWxlKGlu
Zm8oKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCmluZGV4IGQwOTVjYmIxNjllNzA3MGIz
YjVlMzNiY2UyMTAzZGUwNTJiZTRiNDMuLjk1ZmU4YTQwYmQ4OGM4M2YyYzhlNjlmZDFjYzY1MjQ3
M2JjMDdhMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCkBAIC01NCw2ICs1NCw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBqcGVnQ29tcGxldGUoKTsKIAogICAg
ICAgICB2b2lkIHNldENvbG9yUHJvZmlsZShjb25zdCBDb2xvclByb2ZpbGUmIGNvbG9yUHJvZmls
ZSkgeyBtX2NvbG9yUHJvZmlsZSA9IGNvbG9yUHJvZmlsZTsgfQorICAgICAgICB2b2lkIHNldE9y
aWVudGF0aW9uKEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24pIHsgbV9vcmllbnRhdGlvbiA9
IG9yaWVudGF0aW9uOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICAvLyBEZWNvZGVzIHRoZSBp
bWFnZS4gIElmIHxvbmx5U2l6ZXwgaXMgdHJ1ZSwgc3RvcHMgZGVjb2RpbmcgYWZ0ZXIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170222</attachid>
            <date>2012-10-23 13:38:02 -0700</date>
            <delta_ts>2012-10-23 13:43:13 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-100144-20121023133641.patch</filename>
            <type>text/plain</type>
            <size>9385</size>
            <attacher name="Nico Weber">thakis</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxOTg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjA2NmQ4ZGQ1ZDFmMDM2
ODc1ZTU4Yzg0NDZhZjNkNWEwZDJmZTM4Ny4uNTlhNzBhYTNiN2QyNjAwZTRmNDg4YzIxNTFkNDZk
MTNkYWY4ODViMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTEwLTIzICBOaWNv
IFdlYmVyICA8dGhha2lzQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbiB0aGUgb3Blbi1zb3Vy
Y2UganBlZyBkZWNvZGVyLCByZWFkIGltYWdlIG9yaWVudGF0aW9uIGZyb20gdGhlIGV4aWYgZGF0
YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwMTQ0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyB3
aWxsIGJlIHVzZWQgdG8gaW1wbGVtZW50IHRoZSBzaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlv
bgorICAgICAgICBzZXR0aW5nIChzZWUgYnVnIDE5Njg4KS4gQ3VycmVudGx5IHRoaXMgaXNuJ3Qg
aG9va2VkIHVwIGFueXdoZXJlLCBzbworICAgICAgICBpdCBoYXMgbm8gb2JzZXJ2YWJsZSBlZmZl
Y3QgZm9yIG5vdy4KKworICAgICAgICBPbmNlIGl0J3MgaG9va2VkIHVwLCBpdCB3aWxsIGJlIHRl
c3RlZCBieQorICAgICAgICBmYXN0L2ltYWdlcy9leGlmLW9yaWVudGF0aW9uLmh0bWwKKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAgICAgICogcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZURlY29kZXI6Om9yaWVudGF0aW9uKToKKyAgICAgICAgKEltYWdlRGVjb2Rlcik6CisgICAgICAg
ICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnJlYWRVaW50MTYpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpyZWFkVWludDMyKToKKyAgICAgICAgKFdlYkNvcmU6OmNoZWNrRXhpZkhlYWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpyZWFkSW1hZ2VPcmllbnRhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpKUEVHSW1hZ2VSZWFkZXI6OkpQRUdJbWFnZVJlYWRlcik6CisgICAgICAgIChXZWJD
b3JlOjpKUEVHSW1hZ2VSZWFkZXI6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpKUEVH
SW1hZ2VEZWNvZGVyOjpzZXRPcmllbnRhdGlvbik6CisKIDIwMTItMTAtMjAgIFlhZWwgQWhhcm9u
ICA8eWFlbC5haGFyb25AaW50ZWwuY29tPgogCiAgICAgICAgIFtFRkxdW0FDXSBCdWlsZCBmaXgg
YWZ0ZXIgcjEzMTkzMwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQml0bWFwSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1h
cEltYWdlLmgKaW5kZXggOGZlZGMzZTUwNzMzZWI5NjU5ZTc4NTViZWJjNzljYjcxZGIwY2E1OS4u
MjBiMzA4MWZiZmI5ZTYzMzUwZmI4MDlkNjI2OTgxZTljYjNhZThmOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCkBAIC0yMDUsNyArMjA1LDcg
QEAgcHJvdGVjdGVkOgogI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CiAjaWYgVVNF
KENHKQotICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0
UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxl
Q29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IsIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uRW51
bSk7CisgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRS
ZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVD
b2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwgUmVzcGVjdEltYWdlT3JpZW50YXRpb25FbnVt
KSBPVkVSUklERTsKICNlbmRpZgogCiAjaWYgKE9TKFdJTkNFKSAmJiAhUExBVEZPUk0oUVQpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VE
ZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURl
Y29kZXIuaAppbmRleCA5ZjY5N2E4NGFiMDlhZmJhYzNiNjJhZTNmY2U1NjZjNGZiNmQ3NDJkLi44
YzBkYjM5MjlmNTQyMDhiNDdmYTM2MzgyNzM2YmZiMzE1NjQ3ZjU3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaApAQCAt
MzAwLDYgKzMwMCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRJZ25v
cmVHYW1tYUFuZENvbG9yUHJvZmlsZShib29sIGZsYWcpIHsgbV9pZ25vcmVHYW1tYUFuZENvbG9y
UHJvZmlsZSA9IGZsYWc7IH0KICAgICAgICAgYm9vbCBpZ25vcmVzR2FtbWFBbmRDb2xvclByb2Zp
bGUoKSBjb25zdCB7IHJldHVybiBtX2lnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlOyB9CiAKKyAg
ICAgICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fb3Jp
ZW50YXRpb247IH0KKwogICAgICAgICBlbnVtIHsgaWNjQ29sb3JQcm9maWxlSGVhZGVyTGVuZ3Ro
ID0gMTI4IH07CiAKICAgICAgICAgc3RhdGljIGJvb2wgcmdiQ29sb3JQcm9maWxlKGNvbnN0IGNo
YXIqIHByb2ZpbGVEYXRhLCB1bnNpZ25lZCBwcm9maWxlTGVuZ3RoKQpAQCAtMzkzLDYgKzM5NSw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgVmVjdG9yPGludD4gbV9zY2FsZWRSb3dz
OwogICAgICAgICBib29sIG1fcHJlbXVsdGlwbHlBbHBoYTsKICAgICAgICAgYm9vbCBtX2lnbm9y
ZUdhbW1hQW5kQ29sb3JQcm9maWxlOworICAgICAgICBJbWFnZU9yaWVudGF0aW9uIG1fb3JpZW50
YXRpb247CiAKICAgICBwcml2YXRlOgogICAgICAgICAvLyBTb21lIGNvZGUgcGF0aHMgY29tcHV0
ZSB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UgYXMgIndpZHRoICogaGVpZ2h0ICogNCIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdl
RGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVn
L0pQRUdJbWFnZURlY29kZXIuY3BwCmluZGV4IDUyNWYzYTZmNzIyZTZlMWVlYzBlODA5MTBhMzEx
YTA5YTA1M2ZkZGMuLjE0MTMzN2NmMDE4MDNiNjEyM2Y1OTU3MmY5YWQzNzgwMjQ4NTEyMjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBF
R0ltYWdlRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcApAQCAtOTcsNiArOTcsOCBAQCBpbmxpbmUg
Ym9vbCBkb0ZhbmN5VXBzYW1wbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiBpbmxpbmUgYm9vbCBk
b0ZhbmN5VXBzYW1wbGluZygpIHsgcmV0dXJuIHRydWU7IH0KICNlbmRpZgogCitjb25zdCBpbnQg
ZXhpZk1hcmtlciA9IEpQRUdfQVBQMCArIDE7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3Ry
dWN0IGRlY29kZXJfZXJyb3JfbWdyIHsKQEAgLTEzMSw2ICsxMzMsODggQEAgc3RydWN0IGRlY29k
ZXJfc291cmNlX21nciB7CiAgICAgSlBFR0ltYWdlUmVhZGVyKiBkZWNvZGVyOwogfTsKIAorc3Rh
dGljIHVuc2lnbmVkIHJlYWRVaW50MTYoSk9DVEVUKiBkYXRhLCBib29sIGlzQmlnRW5kaWFuKQor
eworICAgIGlmIChpc0JpZ0VuZGlhbikKKyAgICAgICAgcmV0dXJuIChHRVRKT0NURVQoZGF0YVsw
XSkgPDwgOCkgfCBHRVRKT0NURVQoZGF0YVsxXSk7CisgICAgcmV0dXJuIChHRVRKT0NURVQoZGF0
YVsxXSkgPDwgOCkgfCBHRVRKT0NURVQoZGF0YVswXSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBy
ZWFkVWludDMyKEpPQ1RFVCogZGF0YSwgYm9vbCBpc0JpZ0VuZGlhbikKK3sKKyAgICBpZiAoaXNC
aWdFbmRpYW4pCisgICAgICAgIHJldHVybiAoR0VUSk9DVEVUKGRhdGFbMF0pIDw8IDI0KSB8IChH
RVRKT0NURVQoZGF0YVsxXSkgPDwgMTYpIHwgKEdFVEpPQ1RFVChkYXRhWzJdKSA8PCA4KSB8IEdF
VEpPQ1RFVChkYXRhWzNdKTsKKyAgICByZXR1cm4gKEdFVEpPQ1RFVChkYXRhWzNdKSA8PCAyNCkg
fCAoR0VUSk9DVEVUKGRhdGFbMl0pIDw8IDE2KSB8IChHRVRKT0NURVQoZGF0YVsxXSkgPDwgOCkg
fCBHRVRKT0NURVQoZGF0YVswXSk7Cit9CisKK3N0YXRpYyBib29sIGNoZWNrRXhpZkhlYWRlcihq
cGVnX3NhdmVkX21hcmtlcl9wdHIgbWFya2VyLCBib29sJiBpc0JpZ0VuZGlhbiwgdW5zaWduZWQm
IGlmZE9mZnNldCkKK3sKKyAgICAvLyBGb3IgZXhpZiBkYXRhLCB0aGUgQVBQMSBibG9jayBpcyBm
b2xsb3dlZCBieSAnRScsICd4JywgJ2knLCAnZicsICdcMCcsCisgICAgLy8gdGhlbiBhIGZpbGwg
Ynl0ZSwgYW5kIHRoZW4gYSB0aWZmIGZpbGUgdGhhdCBjb250YWlucyB0aGUgbWV0YWRhdGEuCisg
ICAgLy8gQSB0aWZmIGZpbGUgc3RhcnRzIHdpdGggJ0knLCAnSScgKGludGVsIC8gbGl0dGxlIGVu
ZGlhbiBieXRlIG9yZGVyKSBvcgorICAgIC8vICdNJywgJ00nIChtb3Rvcm9sYSAvIGJpZyBlbmRp
YW4gYnl0ZSBvcmRlciksIGZvbGxvd2VkIGJ5ICh1aW50MTZfdCk0MiwKKyAgICAvLyBmb2xsb3dl
ZCBieSBhbiB1aW50MzJfdCB3aXRoIHRoZSBvZmZzZXQgdG8gdGhlIHRhZyBibG9jaywgcmVsYXRp
dmUgdG8gdGhlCisgICAgLy8gdGlmZiBmaWxlIHN0YXJ0LgorICAgIGNvbnN0IHVuc2lnbmVkIGV4
aWZIZWFkZXJTaXplID0gMTQ7CisgICAgaWYgKCEobWFya2VyLT5tYXJrZXIgPT0gZXhpZk1hcmtl
cgorICAgICAgICAmJiBtYXJrZXItPmRhdGFfbGVuZ3RoID49IGV4aWZIZWFkZXJTaXplCisgICAg
ICAgICYmIG1hcmtlci0+ZGF0YVswXSA9PSAnRScKKyAgICAgICAgJiYgbWFya2VyLT5kYXRhWzFd
ID09ICd4JworICAgICAgICAmJiBtYXJrZXItPmRhdGFbMl0gPT0gJ2knCisgICAgICAgICYmIG1h
cmtlci0+ZGF0YVszXSA9PSAnZicKKyAgICAgICAgJiYgbWFya2VyLT5kYXRhWzRdID09ICdcMCcK
KyAgICAgICAgLy8gZGF0YVs1XSBpcyBhIGZpbGwgYnl0ZQorICAgICAgICAmJiAoKG1hcmtlci0+
ZGF0YVs2XSA9PSAnSScgJiYgbWFya2VyLT5kYXRhWzddID09ICdJJykKKyAgICAgICAgICAgIHx8
IChtYXJrZXItPmRhdGFbNl0gPT0gJ00nICYmIG1hcmtlci0+ZGF0YVs3XSA9PSAnTScpKSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlzQmlnRW5kaWFuID0gbWFya2VyLT5kYXRhWzZd
ID09ICdNJzsKKyAgICBpZiAocmVhZFVpbnQxNihtYXJrZXItPmRhdGEgKyA4LCBpc0JpZ0VuZGlh
bikgIT0gNDIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmZE9mZnNldCA9IHJlYWRV
aW50MzIobWFya2VyLT5kYXRhICsgMTAsIGlzQmlnRW5kaWFuKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworc3RhdGljIEltYWdlT3JpZW50YXRpb24gcmVhZEltYWdlT3JpZW50YXRpb24oanBlZ19k
ZWNvbXByZXNzX3N0cnVjdCogaW5mbykKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBvcmllbnRhdGlv
blRhZyA9IDB4MTEyOworICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0VHlwZSA9IDM7CisgICAgZm9y
IChqcGVnX3NhdmVkX21hcmtlcl9wdHIgbWFya2VyID0gaW5mby0+bWFya2VyX2xpc3Q7IG1hcmtl
cjsgbWFya2VyID0gbWFya2VyLT5uZXh0KSB7CisgICAgICAgIGJvb2wgaXNCaWdFbmRpYW47Cisg
ICAgICAgIHVuc2lnbmVkIGlmZE9mZnNldDsKKyAgICAgICAgaWYgKCFjaGVja0V4aWZIZWFkZXIo
bWFya2VyLCBpc0JpZ0VuZGlhbiwgaWZkT2Zmc2V0KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBpZmRPZmZzZXQgKz0gNjsgLy8gQWNjb3VudCBmb3IgJ0V4aWZcMDxmaWxsIGJ5dGU+
JyBoZWFkZXIuCisKKyAgICAgICAgLy8gVGhlIGpwZWcgZXhpZiBjb250YWluZXIgZm9ybWF0IGNv
bnRhaW5zIGEgdGlmZiBibG9jayBmb3IgbWV0YWRhdGEuCisgICAgICAgIC8vIEEgdGlmZiBpbWFn
ZSBmaWxlIGRpcmVjdG9yeSAoaWZkKSBjb25zaXN0cyBvZiBhIHVpbnQxNl90IGRlc2NyaWJpbmcK
KyAgICAgICAgLy8gdGhlIG51bWJlciBvZiBpZmQgZW50cmllcywgZm9sbG93ZWQgYnkgdGhhdCBt
YW55IGVudHJpZXMuCisgICAgICAgIC8vIFdoZW4gdG91Y2hpbmcgdGhpcyBjb2RlLCBpdCdzIHVz
ZWZ1bCB0byBsb29rIGF0IHRoZSB0aWZmIHNwZWM6CisgICAgICAgIC8vIGh0dHA6Ly9wYXJ0bmVy
cy5hZG9iZS5jb20vcHVibGljL2RldmVsb3Blci9lbi90aWZmL1RJRkY2LnBkZgorICAgICAgICBK
T0NURVQqIGlmZCA9IG1hcmtlci0+ZGF0YSArIGlmZE9mZnNldDsKKyAgICAgICAgSk9DVEVUKiBl
bmQgPSBtYXJrZXItPmRhdGEgKyBtYXJrZXItPmRhdGFfbGVuZ3RoOworICAgICAgICBpZiAoZW5k
IC0gaWZkIDwgMikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB1bnNpZ25lZCB0YWdD
b3VudCA9IHJlYWRVaW50MTYoaWZkLCBpc0JpZ0VuZGlhbik7CisgICAgICAgIGlmZCArPSAyOyAv
LyBTa2lwIG92ZXIgdGhlIHVpbnQxNiB0aGF0IHdhcyBqdXN0IHJlYWQuCisKKyAgICAgICAgLy8g
RXZlcnkgaWZkIGVudHJ5IGlzIDIgYnl0ZXMgb2YgdGFnLCAyIGJ5dGVzIG9mIGNvbnRlbnRzIGRh
dGF0eXBlLAorICAgICAgICAvLyA0IGJ5dGVzIG9mIG51bWJlci1vZi1lbGVtZW50cywgYW5kIDQg
Ynl0ZXMgb2YgZWl0aGVyIG9mZnNldCB0byB0aGUKKyAgICAgICAgLy8gdGFnIGRhdGEsIG9yIGlm
IHRoZSBkYXRhIGlzIHNtYWxsIGVub3VnaCwgdGhlIGlubGluZWQgZGF0YSBpdHNlbGYuCisgICAg
ICAgIGNvbnN0IGludCBpZmRFbnRyeVNpemUgPSAxMjsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHRhZ0NvdW50ICYmIGVuZCAtIGlmZCA+PSBpZmRFbnRyeVNpemU7ICsraSwgaWZk
ICs9IGlmZEVudHJ5U2l6ZSkgeworICAgICAgICAgICAgdW5zaWduZWQgdGFnID0gcmVhZFVpbnQx
NihpZmQsIGlzQmlnRW5kaWFuKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHR5cGUgPSByZWFkVWlu
dDE2KGlmZCArIDIsIGlzQmlnRW5kaWFuKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNvdW50ID0g
cmVhZFVpbnQzMihpZmQgKyA0LCBpc0JpZ0VuZGlhbik7CisgICAgICAgICAgICBpZiAodGFnID09
IG9yaWVudGF0aW9uVGFnICYmIHR5cGUgPT0gc2hvcnRUeXBlICYmIGNvdW50ID09IDEpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIEltYWdlT3JpZW50YXRpb246OmZyb21FWElGVmFsdWUocmVhZFVp
bnQxNihpZmQgKyA4LCBpc0JpZ0VuZGlhbikpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIEltYWdlT3JpZW50YXRpb24oKTsKK30KKwogc3RhdGljIENvbG9yUHJvZmlsZSByZWFkQ29s
b3JQcm9maWxlKGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QqIGluZm8pCiB7CiAjaWYgVVNFKElDQ0pQ
RUcpCkBAIC0yMDYsNiArMjkwLDkgQEAgcHVibGljOgogICAgICAgICAvLyBSZXRhaW4gSUNDIGNv
bG9yIHByb2ZpbGUgbWFya2VycyBmb3IgY29sb3IgbWFuYWdlbWVudC4KICAgICAgICAgc2V0dXBf
cmVhZF9pY2NfcHJvZmlsZSgmbV9pbmZvKTsKICNlbmRpZgorCisgICAgICAgIC8vIEtlZXAgQVBQ
MSBibG9ja3MsIGZvciBvYnRhaW5pbmcgZXhpZiBkYXRhLgorICAgICAgICBqcGVnX3NhdmVfbWFy
a2VycygmbV9pbmZvLCBleGlmTWFya2VyLCAweEZGRkYpOwogICAgIH0KIAogICAgIH5KUEVHSW1h
Z2VSZWFkZXIoKQpAQCAtMzA4LDYgKzM5NSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmICgh
bV9kZWNvZGVyLT5zZXRTaXplKG1faW5mby5pbWFnZV93aWR0aCwgbV9pbmZvLmltYWdlX2hlaWdo
dCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgICAgICAgICBtX2RlY29k
ZXItPnNldE9yaWVudGF0aW9uKHJlYWRJbWFnZU9yaWVudGF0aW9uKGluZm8oKSkpOworCiAgICAg
ICAgICAgICAvLyBBbGxvdyBjb2xvciBtYW5hZ2VtZW50IG9mIHRoZSBkZWNvZGVkIFJHQkEgcGl4
ZWxzIGlmIHBvc3NpYmxlLgogICAgICAgICAgICAgaWYgKCFtX2RlY29kZXItPmlnbm9yZXNHYW1t
YUFuZENvbG9yUHJvZmlsZSgpKSB7CiAgICAgICAgICAgICAgICAgQ29sb3JQcm9maWxlIHJnYklu
cHV0RGV2aWNlQ29sb3JQcm9maWxlID0gcmVhZENvbG9yUHJvZmlsZShpbmZvKCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1h
Z2VEZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVn
L0pQRUdJbWFnZURlY29kZXIuaAppbmRleCBkMDk1Y2JiMTY5ZTcwNzBiM2I1ZTMzYmNlMjEwM2Rl
MDUyYmU0YjQzLi45NWZlOGE0MGJkODhjODNmMmM4ZTY5ZmQxY2M2NTI0NzNiYzA3YTA5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJ
bWFnZURlY29kZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaApAQCAtNTQsNiArNTQsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIHZvaWQganBlZ0NvbXBsZXRlKCk7CiAKICAgICAgICAgdm9pZCBzZXRD
b2xvclByb2ZpbGUoY29uc3QgQ29sb3JQcm9maWxlJiBjb2xvclByb2ZpbGUpIHsgbV9jb2xvclBy
b2ZpbGUgPSBjb2xvclByb2ZpbGU7IH0KKyAgICAgICAgdm9pZCBzZXRPcmllbnRhdGlvbihJbWFn
ZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSB7IG1fb3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjsg
fQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgLy8gRGVjb2RlcyB0aGUgaW1hZ2UuICBJZiB8b25s
eVNpemV8IGlzIHRydWUsIHN0b3BzIGRlY29kaW5nIGFmdGVyCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170225</attachid>
            <date>2012-10-23 13:43:16 -0700</date>
            <delta_ts>2012-10-23 18:57:56 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-100144-20121023134155.patch</filename>
            <type>text/plain</type>
            <size>9382</size>
            <attacher name="Nico Weber">thakis</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxOTg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjA2NmQ4ZGQ1ZDFmMDM2
ODc1ZTU4Yzg0NDZhZjNkNWEwZDJmZTM4Ny4uNDQwNzNlMzVmMDU2MTc1MzIyYjNiNGEyODUwNjQ0
M2ZhOTQ3NzJjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTEwLTIzICBOaWNv
IFdlYmVyICA8dGhha2lzQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbiB0aGUgb3Blbi1zb3Vy
Y2UganBlZyBkZWNvZGVyLCByZWFkIGltYWdlIG9yaWVudGF0aW9uIGZyb20gdGhlIGV4aWYgZGF0
YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwMTQ0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCisKKyAgICAgICAgVGhpcyB3aWxs
IGJlIHVzZWQgdG8gaW1wbGVtZW50IHRoZSBzaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbgor
ICAgICAgICBzZXR0aW5nIChzZWUgYnVnIDE5Njg4KS4gQ3VycmVudGx5IHRoaXMgaXNuJ3QgaG9v
a2VkIHVwIGFueXdoZXJlLCBzbworICAgICAgICBpdCBoYXMgbm8gb2JzZXJ2YWJsZSBlZmZlY3Qg
Zm9yIG5vdy4KKworICAgICAgICBPbmNlIGl0J3MgaG9va2VkIHVwLCBpdCB3aWxsIGJlIHRlc3Rl
ZCBieQorICAgICAgICBmYXN0L2ltYWdlcy9leGlmLW9yaWVudGF0aW9uLmh0bWwKKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAgICAgICogcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURl
Y29kZXI6Om9yaWVudGF0aW9uKToKKyAgICAgICAgKEltYWdlRGVjb2Rlcik6CisgICAgICAgICog
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnJlYWRVaW50MTYpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpyZWFkVWludDMyKToKKyAgICAgICAgKFdlYkNvcmU6OmNoZWNrRXhpZkhlYWRlcik6
CisgICAgICAgIChXZWJDb3JlOjpyZWFkSW1hZ2VPcmllbnRhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpKUEVHSW1hZ2VSZWFkZXI6OkpQRUdJbWFnZVJlYWRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpKUEVHSW1hZ2VSZWFkZXI6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1h
Z2VEZWNvZGVyOjpzZXRPcmllbnRhdGlvbik6CisKIDIwMTItMTAtMjAgIFlhZWwgQWhhcm9uICA8
eWFlbC5haGFyb25AaW50ZWwuY29tPgogCiAgICAgICAgIFtFRkxdW0FDXSBCdWlsZCBmaXggYWZ0
ZXIgcjEzMTkzMwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Qml0bWFwSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcElt
YWdlLmgKaW5kZXggOGZlZGMzZTUwNzMzZWI5NjU5ZTc4NTViZWJjNzljYjcxZGIwY2E1OS4uMjBi
MzA4MWZiZmI5ZTYzMzUwZmI4MDlkNjI2OTgxZTljYjNhZThmOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCkBAIC0yMDUsNyArMjA1LDcgQEAg
cHJvdGVjdGVkOgogI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENv
bG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CiAjaWYgVVNFKENH
KQotICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVj
dCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29s
b3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IsIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uRW51bSk7
CisgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0
JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xv
clNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwgUmVzcGVjdEltYWdlT3JpZW50YXRpb25FbnVtKSBP
VkVSUklERTsKICNlbmRpZgogCiAjaWYgKE9TKFdJTkNFKSAmJiAhUExBVEZPUk0oUVQpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNv
ZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29k
ZXIuaAppbmRleCA5ZjY5N2E4NGFiMDlhZmJhYzNiNjJhZTNmY2U1NjZjNGZiNmQ3NDJkLi44YzBk
YjM5MjlmNTQyMDhiNDdmYTM2MzgyNzM2YmZiMzE1NjQ3ZjU3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaApAQCAtMzAw
LDYgKzMwMCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRJZ25vcmVH
YW1tYUFuZENvbG9yUHJvZmlsZShib29sIGZsYWcpIHsgbV9pZ25vcmVHYW1tYUFuZENvbG9yUHJv
ZmlsZSA9IGZsYWc7IH0KICAgICAgICAgYm9vbCBpZ25vcmVzR2FtbWFBbmRDb2xvclByb2ZpbGUo
KSBjb25zdCB7IHJldHVybiBtX2lnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlOyB9CiAKKyAgICAg
ICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZW50
YXRpb247IH0KKwogICAgICAgICBlbnVtIHsgaWNjQ29sb3JQcm9maWxlSGVhZGVyTGVuZ3RoID0g
MTI4IH07CiAKICAgICAgICAgc3RhdGljIGJvb2wgcmdiQ29sb3JQcm9maWxlKGNvbnN0IGNoYXIq
IHByb2ZpbGVEYXRhLCB1bnNpZ25lZCBwcm9maWxlTGVuZ3RoKQpAQCAtMzkzLDYgKzM5NSw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgVmVjdG9yPGludD4gbV9zY2FsZWRSb3dzOwog
ICAgICAgICBib29sIG1fcHJlbXVsdGlwbHlBbHBoYTsKICAgICAgICAgYm9vbCBtX2lnbm9yZUdh
bW1hQW5kQ29sb3JQcm9maWxlOworICAgICAgICBJbWFnZU9yaWVudGF0aW9uIG1fb3JpZW50YXRp
b247CiAKICAgICBwcml2YXRlOgogICAgICAgICAvLyBTb21lIGNvZGUgcGF0aHMgY29tcHV0ZSB0
aGUgc2l6ZSBvZiB0aGUgaW1hZ2UgYXMgIndpZHRoICogaGVpZ2h0ICogNCIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVj
b2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQ
RUdJbWFnZURlY29kZXIuY3BwCmluZGV4IDUyNWYzYTZmNzIyZTZlMWVlYzBlODA5MTBhMzExYTA5
YTA1M2ZkZGMuLjE0MTMzN2NmMDE4MDNiNjEyM2Y1OTU3MmY5YWQzNzgwMjQ4NTEyMjcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0lt
YWdlRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcApAQCAtOTcsNiArOTcsOCBAQCBpbmxpbmUgYm9v
bCBkb0ZhbmN5VXBzYW1wbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiBpbmxpbmUgYm9vbCBkb0Zh
bmN5VXBzYW1wbGluZygpIHsgcmV0dXJuIHRydWU7IH0KICNlbmRpZgogCitjb25zdCBpbnQgZXhp
Zk1hcmtlciA9IEpQRUdfQVBQMCArIDE7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0
IGRlY29kZXJfZXJyb3JfbWdyIHsKQEAgLTEzMSw2ICsxMzMsODggQEAgc3RydWN0IGRlY29kZXJf
c291cmNlX21nciB7CiAgICAgSlBFR0ltYWdlUmVhZGVyKiBkZWNvZGVyOwogfTsKIAorc3RhdGlj
IHVuc2lnbmVkIHJlYWRVaW50MTYoSk9DVEVUKiBkYXRhLCBib29sIGlzQmlnRW5kaWFuKQorewor
ICAgIGlmIChpc0JpZ0VuZGlhbikKKyAgICAgICAgcmV0dXJuIChHRVRKT0NURVQoZGF0YVswXSkg
PDwgOCkgfCBHRVRKT0NURVQoZGF0YVsxXSk7CisgICAgcmV0dXJuIChHRVRKT0NURVQoZGF0YVsx
XSkgPDwgOCkgfCBHRVRKT0NURVQoZGF0YVswXSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCByZWFk
VWludDMyKEpPQ1RFVCogZGF0YSwgYm9vbCBpc0JpZ0VuZGlhbikKK3sKKyAgICBpZiAoaXNCaWdF
bmRpYW4pCisgICAgICAgIHJldHVybiAoR0VUSk9DVEVUKGRhdGFbMF0pIDw8IDI0KSB8IChHRVRK
T0NURVQoZGF0YVsxXSkgPDwgMTYpIHwgKEdFVEpPQ1RFVChkYXRhWzJdKSA8PCA4KSB8IEdFVEpP
Q1RFVChkYXRhWzNdKTsKKyAgICByZXR1cm4gKEdFVEpPQ1RFVChkYXRhWzNdKSA8PCAyNCkgfCAo
R0VUSk9DVEVUKGRhdGFbMl0pIDw8IDE2KSB8IChHRVRKT0NURVQoZGF0YVsxXSkgPDwgOCkgfCBH
RVRKT0NURVQoZGF0YVswXSk7Cit9CisKK3N0YXRpYyBib29sIGNoZWNrRXhpZkhlYWRlcihqcGVn
X3NhdmVkX21hcmtlcl9wdHIgbWFya2VyLCBib29sJiBpc0JpZ0VuZGlhbiwgdW5zaWduZWQmIGlm
ZE9mZnNldCkKK3sKKyAgICAvLyBGb3IgZXhpZiBkYXRhLCB0aGUgQVBQMSBibG9jayBpcyBmb2xs
b3dlZCBieSAnRScsICd4JywgJ2knLCAnZicsICdcMCcsCisgICAgLy8gdGhlbiBhIGZpbGwgYnl0
ZSwgYW5kIHRoZW4gYSB0aWZmIGZpbGUgdGhhdCBjb250YWlucyB0aGUgbWV0YWRhdGEuCisgICAg
Ly8gQSB0aWZmIGZpbGUgc3RhcnRzIHdpdGggJ0knLCAnSScgKGludGVsIC8gbGl0dGxlIGVuZGlh
biBieXRlIG9yZGVyKSBvcgorICAgIC8vICdNJywgJ00nIChtb3Rvcm9sYSAvIGJpZyBlbmRpYW4g
Ynl0ZSBvcmRlciksIGZvbGxvd2VkIGJ5ICh1aW50MTZfdCk0MiwKKyAgICAvLyBmb2xsb3dlZCBi
eSBhbiB1aW50MzJfdCB3aXRoIHRoZSBvZmZzZXQgdG8gdGhlIHRhZyBibG9jaywgcmVsYXRpdmUg
dG8gdGhlCisgICAgLy8gdGlmZiBmaWxlIHN0YXJ0LgorICAgIGNvbnN0IHVuc2lnbmVkIGV4aWZI
ZWFkZXJTaXplID0gMTQ7CisgICAgaWYgKCEobWFya2VyLT5tYXJrZXIgPT0gZXhpZk1hcmtlcgor
ICAgICAgICAmJiBtYXJrZXItPmRhdGFfbGVuZ3RoID49IGV4aWZIZWFkZXJTaXplCisgICAgICAg
ICYmIG1hcmtlci0+ZGF0YVswXSA9PSAnRScKKyAgICAgICAgJiYgbWFya2VyLT5kYXRhWzFdID09
ICd4JworICAgICAgICAmJiBtYXJrZXItPmRhdGFbMl0gPT0gJ2knCisgICAgICAgICYmIG1hcmtl
ci0+ZGF0YVszXSA9PSAnZicKKyAgICAgICAgJiYgbWFya2VyLT5kYXRhWzRdID09ICdcMCcKKyAg
ICAgICAgLy8gZGF0YVs1XSBpcyBhIGZpbGwgYnl0ZQorICAgICAgICAmJiAoKG1hcmtlci0+ZGF0
YVs2XSA9PSAnSScgJiYgbWFya2VyLT5kYXRhWzddID09ICdJJykKKyAgICAgICAgICAgIHx8ICht
YXJrZXItPmRhdGFbNl0gPT0gJ00nICYmIG1hcmtlci0+ZGF0YVs3XSA9PSAnTScpKSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGlzQmlnRW5kaWFuID0gbWFya2VyLT5kYXRhWzZdID09
ICdNJzsKKyAgICBpZiAocmVhZFVpbnQxNihtYXJrZXItPmRhdGEgKyA4LCBpc0JpZ0VuZGlhbikg
IT0gNDIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmZE9mZnNldCA9IHJlYWRVaW50
MzIobWFya2VyLT5kYXRhICsgMTAsIGlzQmlnRW5kaWFuKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kworc3RhdGljIEltYWdlT3JpZW50YXRpb24gcmVhZEltYWdlT3JpZW50YXRpb24oanBlZ19kZWNv
bXByZXNzX3N0cnVjdCogaW5mbykKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBvcmllbnRhdGlvblRh
ZyA9IDB4MTEyOworICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0VHlwZSA9IDM7CisgICAgZm9yIChq
cGVnX3NhdmVkX21hcmtlcl9wdHIgbWFya2VyID0gaW5mby0+bWFya2VyX2xpc3Q7IG1hcmtlcjsg
bWFya2VyID0gbWFya2VyLT5uZXh0KSB7CisgICAgICAgIGJvb2wgaXNCaWdFbmRpYW47CisgICAg
ICAgIHVuc2lnbmVkIGlmZE9mZnNldDsKKyAgICAgICAgaWYgKCFjaGVja0V4aWZIZWFkZXIobWFy
a2VyLCBpc0JpZ0VuZGlhbiwgaWZkT2Zmc2V0KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBpZmRPZmZzZXQgKz0gNjsgLy8gQWNjb3VudCBmb3IgJ0V4aWZcMDxmaWxsIGJ5dGU+JyBo
ZWFkZXIuCisKKyAgICAgICAgLy8gVGhlIGpwZWcgZXhpZiBjb250YWluZXIgZm9ybWF0IGNvbnRh
aW5zIGEgdGlmZiBibG9jayBmb3IgbWV0YWRhdGEuCisgICAgICAgIC8vIEEgdGlmZiBpbWFnZSBm
aWxlIGRpcmVjdG9yeSAoaWZkKSBjb25zaXN0cyBvZiBhIHVpbnQxNl90IGRlc2NyaWJpbmcKKyAg
ICAgICAgLy8gdGhlIG51bWJlciBvZiBpZmQgZW50cmllcywgZm9sbG93ZWQgYnkgdGhhdCBtYW55
IGVudHJpZXMuCisgICAgICAgIC8vIFdoZW4gdG91Y2hpbmcgdGhpcyBjb2RlLCBpdCdzIHVzZWZ1
bCB0byBsb29rIGF0IHRoZSB0aWZmIHNwZWM6CisgICAgICAgIC8vIGh0dHA6Ly9wYXJ0bmVycy5h
ZG9iZS5jb20vcHVibGljL2RldmVsb3Blci9lbi90aWZmL1RJRkY2LnBkZgorICAgICAgICBKT0NU
RVQqIGlmZCA9IG1hcmtlci0+ZGF0YSArIGlmZE9mZnNldDsKKyAgICAgICAgSk9DVEVUKiBlbmQg
PSBtYXJrZXItPmRhdGEgKyBtYXJrZXItPmRhdGFfbGVuZ3RoOworICAgICAgICBpZiAoZW5kIC0g
aWZkIDwgMikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB1bnNpZ25lZCB0YWdDb3Vu
dCA9IHJlYWRVaW50MTYoaWZkLCBpc0JpZ0VuZGlhbik7CisgICAgICAgIGlmZCArPSAyOyAvLyBT
a2lwIG92ZXIgdGhlIHVpbnQxNiB0aGF0IHdhcyBqdXN0IHJlYWQuCisKKyAgICAgICAgLy8gRXZl
cnkgaWZkIGVudHJ5IGlzIDIgYnl0ZXMgb2YgdGFnLCAyIGJ5dGVzIG9mIGNvbnRlbnRzIGRhdGF0
eXBlLAorICAgICAgICAvLyA0IGJ5dGVzIG9mIG51bWJlci1vZi1lbGVtZW50cywgYW5kIDQgYnl0
ZXMgb2YgZWl0aGVyIG9mZnNldCB0byB0aGUKKyAgICAgICAgLy8gdGFnIGRhdGEsIG9yIGlmIHRo
ZSBkYXRhIGlzIHNtYWxsIGVub3VnaCwgdGhlIGlubGluZWQgZGF0YSBpdHNlbGYuCisgICAgICAg
IGNvbnN0IGludCBpZmRFbnRyeVNpemUgPSAxMjsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHRhZ0NvdW50ICYmIGVuZCAtIGlmZCA+PSBpZmRFbnRyeVNpemU7ICsraSwgaWZkICs9
IGlmZEVudHJ5U2l6ZSkgeworICAgICAgICAgICAgdW5zaWduZWQgdGFnID0gcmVhZFVpbnQxNihp
ZmQsIGlzQmlnRW5kaWFuKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHR5cGUgPSByZWFkVWludDE2
KGlmZCArIDIsIGlzQmlnRW5kaWFuKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNvdW50ID0gcmVh
ZFVpbnQzMihpZmQgKyA0LCBpc0JpZ0VuZGlhbik7CisgICAgICAgICAgICBpZiAodGFnID09IG9y
aWVudGF0aW9uVGFnICYmIHR5cGUgPT0gc2hvcnRUeXBlICYmIGNvdW50ID09IDEpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIEltYWdlT3JpZW50YXRpb246OmZyb21FWElGVmFsdWUocmVhZFVpbnQx
NihpZmQgKyA4LCBpc0JpZ0VuZGlhbikpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IEltYWdlT3JpZW50YXRpb24oKTsKK30KKwogc3RhdGljIENvbG9yUHJvZmlsZSByZWFkQ29sb3JQ
cm9maWxlKGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QqIGluZm8pCiB7CiAjaWYgVVNFKElDQ0pQRUcp
CkBAIC0yMDYsNiArMjkwLDkgQEAgcHVibGljOgogICAgICAgICAvLyBSZXRhaW4gSUNDIGNvbG9y
IHByb2ZpbGUgbWFya2VycyBmb3IgY29sb3IgbWFuYWdlbWVudC4KICAgICAgICAgc2V0dXBfcmVh
ZF9pY2NfcHJvZmlsZSgmbV9pbmZvKTsKICNlbmRpZgorCisgICAgICAgIC8vIEtlZXAgQVBQMSBi
bG9ja3MsIGZvciBvYnRhaW5pbmcgZXhpZiBkYXRhLgorICAgICAgICBqcGVnX3NhdmVfbWFya2Vy
cygmbV9pbmZvLCBleGlmTWFya2VyLCAweEZGRkYpOwogICAgIH0KIAogICAgIH5KUEVHSW1hZ2VS
ZWFkZXIoKQpAQCAtMzA4LDYgKzM5NSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmICghbV9k
ZWNvZGVyLT5zZXRTaXplKG1faW5mby5pbWFnZV93aWR0aCwgbV9pbmZvLmltYWdlX2hlaWdodCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgICAgICAgICBtX2RlY29kZXIt
PnNldE9yaWVudGF0aW9uKHJlYWRJbWFnZU9yaWVudGF0aW9uKGluZm8oKSkpOworCiAgICAgICAg
ICAgICAvLyBBbGxvdyBjb2xvciBtYW5hZ2VtZW50IG9mIHRoZSBkZWNvZGVkIFJHQkEgcGl4ZWxz
IGlmIHBvc3NpYmxlLgogICAgICAgICAgICAgaWYgKCFtX2RlY29kZXItPmlnbm9yZXNHYW1tYUFu
ZENvbG9yUHJvZmlsZSgpKSB7CiAgICAgICAgICAgICAgICAgQ29sb3JQcm9maWxlIHJnYklucHV0
RGV2aWNlQ29sb3JQcm9maWxlID0gcmVhZENvbG9yUHJvZmlsZShpbmZvKCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VE
ZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQ
RUdJbWFnZURlY29kZXIuaAppbmRleCBkMDk1Y2JiMTY5ZTcwNzBiM2I1ZTMzYmNlMjEwM2RlMDUy
YmU0YjQzLi45NWZlOGE0MGJkODhjODNmMmM4ZTY5ZmQxY2M2NTI0NzNiYzA3YTA5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFn
ZURlY29kZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9q
cGVnL0pQRUdJbWFnZURlY29kZXIuaApAQCAtNTQsNiArNTQsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHZvaWQganBlZ0NvbXBsZXRlKCk7CiAKICAgICAgICAgdm9pZCBzZXRDb2xv
clByb2ZpbGUoY29uc3QgQ29sb3JQcm9maWxlJiBjb2xvclByb2ZpbGUpIHsgbV9jb2xvclByb2Zp
bGUgPSBjb2xvclByb2ZpbGU7IH0KKyAgICAgICAgdm9pZCBzZXRPcmllbnRhdGlvbihJbWFnZU9y
aWVudGF0aW9uIG9yaWVudGF0aW9uKSB7IG1fb3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjsgfQog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgLy8gRGVjb2RlcyB0aGUgaW1hZ2UuICBJZiB8b25seVNp
emV8IGlzIHRydWUsIHN0b3BzIGRlY29kaW5nIGFmdGVyCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>