<?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>121899</bug_id>
          
          <creation_ts>2013-09-25 04:11:56 -0700</creation_ts>
          <short_desc>Optimize strings copies in srcset parser</short_desc>
          <delta_ts>2013-10-04 11:39:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Images</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Romain Perier">romain.perier</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gyuyoung.kim</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>932924</commentid>
    <comment_count>0</comment_count>
    <who name="Romain Perier">romain.perier</who>
    <bug_when>2013-09-25 04:11:56 -0700</bug_when>
    <thetext>Images URLs are copied for each loop iteration during the parsing algorithm. This is important to avoid sharing the same buffer with &quot;srcsetattribute&quot; which might be removed after the attribute has been processed (outside of &quot;bestFitSourceForImageAttributes&quot;)
A good optimization would be to use shadow copies during parsing and deep copies when the selection algorithm returns the good candidate (as &quot;srcsetAttribute&quot; is not out of scope, this string is valid as long as the function &quot;bestFitSourceForImageAttributes&quot; runs)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932925</commentid>
    <comment_count>1</comment_count>
      <attachid>212551</attachid>
    <who name="Romain Perier">romain.perier</who>
    <bug_when>2013-09-25 04:14:13 -0700</bug_when>
    <thetext>Created attachment 212551
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933062</commentid>
    <comment_count>2</comment_count>
      <attachid>212551</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-09-25 10:12:14 -0700</bug_when>
    <thetext>Comment on attachment 212551
Patch

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

I think that this is a useful thing to look into. r- for regressing src preformance though.

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:393
&gt; +        image.imageURL = StringImpl::createWithoutCopying(srcsetAttribute.characters() + imageURLStart, imageURLEnd - imageURLStart);

I&apos;m not really a fan of passing unsafe string across functions. Can we just record the start and length of the URL as indexes, and only create a string when needed?

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:425
&gt; +    return String(imageCandidates.last().imageURL.characters(), imageCandidates.last().imageURL.length());

This adds an extra copy in the common case where we have an src and no srcset.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933625</commentid>
    <comment_count>3</comment_count>
      <attachid>212732</attachid>
    <who name="Romain Perier">romain.perier</who>
    <bug_when>2013-09-26 12:01:23 -0700</bug_when>
    <thetext>Created attachment 212732
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933627</commentid>
    <comment_count>4</comment_count>
    <who name="Romain Perier">romain.perier</who>
    <bug_when>2013-09-26 12:04:15 -0700</bug_when>
    <thetext>Something like the latest patch ? This is even better, it greatly improves performances</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933640</commentid>
    <comment_count>5</comment_count>
      <attachid>212732</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-09-26 12:33:13 -0700</bug_when>
    <thetext>Comment on attachment 212732
Patch

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

Yes, this looks much better to me. A few questions/comment below:

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:311
&gt;      bool operator==(const ImageWithScale&amp; image) const

Is the operator== actually needed? I don&apos;t immediately see where it&apos;s used, although I could have easily overlooked that.

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:418
&gt; +        image.imageURLStart = 0;
&gt; +        image.imageURLLength = 0;

Can we add a constructor to ImageWithScale instead?

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:433
&gt; +    return imageCandidates.last().hasNoImage() ? srcAttribute : String(srcsetAttribute.characters() + imageCandidates.last().imageURLStart, imageCandidates.last().imageURLLength);

Please use srcsetAttribute.substring() instead. That&apos;s more readable, and could help future optimizations.

Also, I&apos;d use a local variable for imageCandidates.last().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933770</commentid>
    <comment_count>6</comment_count>
      <attachid>212732</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-09-26 16:08:31 -0700</bug_when>
    <thetext>Comment on attachment 212732
Patch

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

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:303
&gt; +    size_t imageURLStart;

String length are unsigned. You should have imageURLStart unsigned .

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:309
&gt; +        return !imageURLStart &amp;&amp; !imageURLLength;

Isn&apos;t !imageURLLength enough?

The method should probably be hasImageURL() and the caller use &quot;!hasImage()&quot;.

&gt;&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:433
&gt;&gt; -            return String(imageCandidates[i].imageURL);
&gt;&gt; +            return imageCandidates[i].hasNoImage() ? srcAttribute : String(srcsetAttribute.characters() + imageCandidates[i].imageURLStart, imageCandidates[i].imageURLLength);
&gt;&gt;      }
&gt;&gt; -    return String(imageCandidates.last().imageURL);
&gt;&gt; +    return imageCandidates.last().hasNoImage() ? srcAttribute : String(srcsetAttribute.characters() + imageCandidates.last().imageURLStart, imageCandidates.last().imageURLLength);
&gt; 
&gt; Please use srcsetAttribute.substring() instead. That&apos;s more readable, and could help future optimizations.
&gt; 
&gt; Also, I&apos;d use a local variable for imageCandidates.last().

substring() would be better indeed. StringImpl::substring takes into account the 8/16 bits strings.
You could even use String::substringSharingImpl() here since srcsetAttribute will stay alive anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933784</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-09-26 17:01:47 -0700</bug_when>
    <thetext>&gt; srcsetAttribute will stay alive anyway

What guaranteed this? E.g., can we have a dangling pointer for a while between changing the attribute via DOM and a style recalc?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933854</commentid>
    <comment_count>8</comment_count>
    <who name="Romain Perier">romain.perier</who>
    <bug_when>2013-09-27 00:08:36 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 212732 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=212732&amp;action=review
&gt; 
&gt; Yes, this looks much better to me. A few questions/comment below:
&gt; 
&gt; &gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:311
&gt; &gt;      bool operator==(const ImageWithScale&amp; image) const
&gt; 
&gt; Is the operator== actually needed? I don&apos;t immediately see where it&apos;s used, although I could have easily overlooked that.

Not sure, it was probably used for sorting ... but we use a &quot;comp&quot; function for this... not really clear. Removing it does not introduce regressions.
Good catch.

&gt; 
&gt; &gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:418
&gt; &gt; +        image.imageURLStart = 0;
&gt; &gt; +        image.imageURLLength = 0;
&gt; 
&gt; Can we add a constructor to ImageWithScale instead?

sure, it&apos;s more readable and probably faster

&gt; 
&gt; &gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:433
&gt; &gt; +    return imageCandidates.last().hasNoImage() ? srcAttribute : String(srcsetAttribute.characters() + imageCandidates.last().imageURLStart, imageCandidates.last().imageURLLength);
&gt; 
&gt; Please use srcsetAttribute.substring() instead. That&apos;s more readable, and could help future optimizations.

OK, makes sense
&gt; 
&gt; Also, I&apos;d use a local variable for imageCandidates.last().

OK</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>934092</commentid>
    <comment_count>9</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-09-27 14:35:31 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; srcsetAttribute will stay alive anyway
&gt; 
&gt; What guaranteed this? E.g., can we have a dangling pointer for a while between changing the attribute via DOM and a style recalc?

Even if you were to unref srcsetAttribute, substringSharingImpl ref() the original string, you will not get a dangling pointer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936185</commentid>
    <comment_count>10</comment_count>
      <attachid>213362</attachid>
    <who name="Romain Perier">romain.perier</who>
    <bug_when>2013-10-04 07:08:31 -0700</bug_when>
    <thetext>Created attachment 213362
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936220</commentid>
    <comment_count>11</comment_count>
      <attachid>213362</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-10-04 09:51:36 -0700</bug_when>
    <thetext>Comment on attachment 213362
Patch

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

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:306
&gt; +    ImageWithScale() : imageURLStart(0), imageURLLength(0), scaleFactor(1.0) { }

I think that the preferred style would be the same as in non-inline case, with each initializer and each brace on its own line.

And we don&apos;t add .0 to literal values. Especially in this case, because 1.0 is a double, but scaleFactor is a float.

    ImageWithScale()
        : imageURLStart(0)
        , imageURLLength(0)
        , scaleFactor(1)
     {
     }

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:414
&gt;          ImageWithScale image;
&gt; -        image.imageURL = srcAttribute;
&gt; -        image.scaleFactor = 1.0;
&gt; -
&gt;          imageCandidates.append(image);

This is getting somewhat convoluted. Please rename &quot;image&quot; to &quot;srcPlaceholderImage&quot; for a little more clarity.

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:426
&gt; +    const ImageWithScale &amp;lastCandidate = imageCandidates.last();

The &quot;&amp;&quot; should be attached to type name, 

const ImageWithScale&amp; lastCandidate = imageCandidates.last();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936266</commentid>
    <comment_count>12</comment_count>
      <attachid>213380</attachid>
    <who name="Romain Perier">romain.perier</who>
    <bug_when>2013-10-04 11:25:13 -0700</bug_when>
    <thetext>Created attachment 213380
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936268</commentid>
    <comment_count>13</comment_count>
    <who name="Romain Perier">romain.perier</who>
    <bug_when>2013-10-04 11:26:12 -0700</bug_when>
    <thetext>Everything has been fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936273</commentid>
    <comment_count>14</comment_count>
      <attachid>213380</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-10-04 11:31:21 -0700</bug_when>
    <thetext>Comment on attachment 213380
Patch

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

I&apos;ll just land with a style fix manually, the iterations for minor style fixes are getting annoying.

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:312
&gt; +        { 
&gt; +        }

These should not be indented (were not in the snippet I posted).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936285</commentid>
    <comment_count>15</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-10-04 11:39:54 -0700</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/r156902&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212551</attachid>
            <date>2013-09-25 04:14:13 -0700</date>
            <delta_ts>2013-09-26 12:01:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-121899-20130925131412.patch</filename>
            <type>text/plain</type>
            <size>2480</size>
            <attacher name="Romain Perier">romain.perier</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU2MzE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODE3NDQwYjg2YjY1Yjdk
NDdhYTc1YjcyMGZhNWFkZTllYTEwZjk5OS4uYTZlYTU1ZjMxYWE3ZjJjYmU3MjVhMzgyZDFlMGIx
MTYwYmU0Nzg2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEzLTA5LTI1ICBSb21h
aW4gUGVyaWVyICA8cm9tYWluLnBlcmllckBnbWFpbC5jb20+CisKKyAgICAgICAgT3B0aW1pemUg
c3RyaW5ncyBjb3BpZXMgaW4gc3Jjc2V0IHBhcnNlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxODk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBjb3ZlcmVkIGJ5IGV4aXN0aW5n
IG9uZXMuCisKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnBhcnNlSW1hZ2VzV2l0aFNjYWxlRnJvbVNyY3NldEF0dHJpYnV0ZSk6
IERvbid0IGNvcHkKKyAgICAgICAgaW1hZ2UuaW1hZ2VVUkwgYXQgZWFjaCBsb29wIGl0ZXJhdGlv
biwgdXNlIHNoYWRvdyBjb3BpZXMgaW5zdGVhZC4KKyAgICAgICAgKFdlYkNvcmU6OmJlc3RGaXRT
b3VyY2VGb3JJbWFnZUF0dHJpYnV0ZXMpOiBNYWtlIGEgZGVlcCBjb3B5CisgICAgICAgIG9mIHRo
ZSBVUkxzIG9ubHkgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBjYW5kaWRhdGUgaXMgY2hvb3Nlbgor
ICAgICAgICBieSB0aGUgc2VsZWN0aW9uIGFsZ29yaXRobS4gSXQgcmVkdWNlcyB0aGUgbnVtYmVy
IG9mIGNvcGllcworICAgICAgICBzaWduaWZpY2FudGx5IGFuZCBpbXByb3ZlcyBwZXJmb3JtYW5j
ZXMgKH40JSkuCisKIDIwMTMtMDktMjMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFVzZSB1bmlxdWVfcHRyIGluc3RlYWQgb2YgZGVsZXRlQWxsVmFsdWVzIGluIEZs
b2F0aW5nT2JqZWN0IGNvZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxQYXJzZXJJZGlvbXMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBh
cnNlcklkaW9tcy5jcHAKaW5kZXggYTdjYjcyZTJmYjk3ZDZiNTYyMTYwYjQxYzFkZDJlODk4NDc2
ZGQ1ZC4uYmM2ODU0Mzc0NDk5MjAyZWU0N2IyZDY1OTdhYzkxMzM4Zjk5MmEwMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5jcHAKQEAgLTM5MCw3
ICszOTAsNyBAQCBzdGF0aWMgdm9pZCBwYXJzZUltYWdlc1dpdGhTY2FsZUZyb21TcmNzZXRBdHRy
aWJ1dGUoY29uc3QgU3RyaW5nJiBzcmNzZXRBdHRyaWJ1dAogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgICAgIEltYWdlV2l0aFNjYWxlIGltYWdlOwotICAgICAgICBpbWFnZS5pbWFnZVVS
TCA9IFN0cmluZyhzcmNzZXRBdHRyaWJ1dGUuY2hhcmFjdGVycygpICsgaW1hZ2VVUkxTdGFydCwg
aW1hZ2VVUkxFbmQgLSBpbWFnZVVSTFN0YXJ0KTsKKyAgICAgICAgaW1hZ2UuaW1hZ2VVUkwgPSBT
dHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWluZyhzcmNzZXRBdHRyaWJ1dGUuY2hhcmFjdGVy
cygpICsgaW1hZ2VVUkxTdGFydCwgaW1hZ2VVUkxFbmQgLSBpbWFnZVVSTFN0YXJ0KTsKICAgICAg
ICAgaW1hZ2Uuc2NhbGVGYWN0b3IgPSBpbWFnZVNjYWxlRmFjdG9yOwogCiAgICAgICAgIGltYWdl
Q2FuZGlkYXRlcy5hcHBlbmQoaW1hZ2UpOwpAQCAtNDIwLDkgKzQyMCw5IEBAIFN0cmluZyBiZXN0
Rml0U291cmNlRm9ySW1hZ2VBdHRyaWJ1dGVzKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBjb25z
dCBTdHJpbmcmIHNyCiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGltYWdlQ2FuZGlkYXRl
cy5zaXplKCkgLSAxOyArK2kpIHsKICAgICAgICAgaWYgKGltYWdlQ2FuZGlkYXRlc1tpXS5zY2Fs
ZUZhY3RvciA+PSBkZXZpY2VTY2FsZUZhY3RvcikKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmco
aW1hZ2VDYW5kaWRhdGVzW2ldLmltYWdlVVJMKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmco
aW1hZ2VDYW5kaWRhdGVzW2ldLmltYWdlVVJMLmNoYXJhY3RlcnMoKSwgaW1hZ2VDYW5kaWRhdGVz
W2ldLmltYWdlVVJMLmxlbmd0aCgpKTsKICAgICB9Ci0gICAgcmV0dXJuIFN0cmluZyhpbWFnZUNh
bmRpZGF0ZXMubGFzdCgpLmltYWdlVVJMKTsKKyAgICByZXR1cm4gU3RyaW5nKGltYWdlQ2FuZGlk
YXRlcy5sYXN0KCkuaW1hZ2VVUkwuY2hhcmFjdGVycygpLCBpbWFnZUNhbmRpZGF0ZXMubGFzdCgp
LmltYWdlVVJMLmxlbmd0aCgpKTsKIH0KIAogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212732</attachid>
            <date>2013-09-26 12:01:23 -0700</date>
            <delta_ts>2013-10-04 07:08:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-121899-20130926210121.patch</filename>
            <type>text/plain</type>
            <size>3648</size>
            <attacher name="Romain Perier">romain.perier</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU2MzE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODE3NDQwYjg2YjY1Yjdk
NDdhYTc1YjcyMGZhNWFkZTllYTEwZjk5OS4uZmNmNjdkM2JlYTBhMDUzOTY5MGRlOGU1N2JiZmU2
ODM0NzU3ZmVjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEzLTA5LTI1ICBSb21h
aW4gUGVyaWVyICA8cm9tYWluLnBlcmllckBnbWFpbC5jb20+CisKKyAgICAgICAgT3B0aW1pemUg
c3RyaW5ncyBjb3BpZXMgaW4gc3Jjc2V0IHBhcnNlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxODk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBjb3ZlcmVkIGJ5IGV4aXN0aW5n
IG9uZXMuCisKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnBhcnNlSW1hZ2VzV2l0aFNjYWxlRnJvbVNyY3NldEF0dHJpYnV0ZSk6
IERvbid0IGNvcHkKKyAgICAgICAgaW1hZ2UuaW1hZ2VVUkwgYXQgZWFjaCBsb29wIGl0ZXJhdGlv
biwgcmVjb3JkIGluZGV4ZXMgInN0YXJ0IiBhbmQgImxlbmd0aCIgaW5zdGVhZC4KKyAgICAgICAg
KFdlYkNvcmU6OmJlc3RGaXRTb3VyY2VGb3JJbWFnZUF0dHJpYnV0ZXMpOiBNYWtlIGEgZGVlcCBj
b3B5CisgICAgICAgIG9mIHRoZSBVUkxzIG9ubHkgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBjYW5k
aWRhdGUgaXMgY2hvb3NlbgorICAgICAgICBieSB0aGUgc2VsZWN0aW9uIGFsZ29yaXRobS4gSXQg
cmVkdWNlcyB0aGUgbnVtYmVyIG9mIGNvcGllcworICAgICAgICBzaWduaWZpY2FudGx5IGFuZCBn
cmVhdGx5IGltcHJvdmVzIHBlcmZvcm1hbmNlcyAofjY5JSkuCisKIDIwMTMtMDktMjMgIERhcmlu
IEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSB1bmlxdWVfcHRyIGluc3Rl
YWQgb2YgZGVsZXRlQWxsVmFsdWVzIGluIEZsb2F0aW5nT2JqZWN0IGNvZGUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5jcHAKaW5kZXggYTdjYjcyZTJm
Yjk3ZDZiNTYyMTYwYjQxYzFkZDJlODk4NDc2ZGQ1ZC4uYmVlZTI4NTU4NzA1YjA0YjM0N2MwNjM0
ZmRiNGRlZmMwNTgwNGMzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTFBhcnNlcklkaW9tcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TFBhcnNlcklkaW9tcy5jcHAKQEAgLTMwMCwxMSArMzAwLDE3IEBAIGJvb2wgdGhyZWFkU2FmZU1h
dGNoKGNvbnN0IEhUTUxJZGVudGlmaWVyJiBsb2NhbE5hbWUsIGNvbnN0IFF1YWxpZmllZE5hbWUm
IHFOYW1lCiAjZW5kaWYKIAogc3RydWN0IEltYWdlV2l0aFNjYWxlIHsKLSAgICBTdHJpbmcgaW1h
Z2VVUkw7CisgICAgc2l6ZV90IGltYWdlVVJMU3RhcnQ7CisgICAgdW5zaWduZWQgaW1hZ2VVUkxM
ZW5ndGg7CiAgICAgZmxvYXQgc2NhbGVGYWN0b3I7CisKKyAgICBib29sIGhhc05vSW1hZ2UoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFpbWFnZVVSTFN0YXJ0ICYmICFpbWFnZVVSTExl
bmd0aDsKKyAgICB9CiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEltYWdlV2l0aFNjYWxlJiBp
bWFnZSkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBzY2FsZUZhY3RvciA9PSBpbWFnZS5z
Y2FsZUZhY3RvciAmJiBpbWFnZVVSTCA9PSBpbWFnZS5pbWFnZVVSTDsKKyAgICAgICAgcmV0dXJu
IHNjYWxlRmFjdG9yID09IGltYWdlLnNjYWxlRmFjdG9yICYmIGltYWdlVVJMU3RhcnQgPT0gaW1h
Z2UuaW1hZ2VVUkxTdGFydCAmJiBpbWFnZVVSTExlbmd0aCA9PSBpbWFnZS5pbWFnZVVSTExlbmd0
aDsKICAgICB9CiB9OwogdHlwZWRlZiBWZWN0b3I8SW1hZ2VXaXRoU2NhbGU+IEltYWdlQ2FuZGlk
YXRlczsKQEAgLTM5MCw3ICszOTYsOCBAQCBzdGF0aWMgdm9pZCBwYXJzZUltYWdlc1dpdGhTY2Fs
ZUZyb21TcmNzZXRBdHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBzcmNzZXRBdHRyaWJ1dAogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgICAgIEltYWdlV2l0aFNjYWxlIGltYWdlOwotICAgICAg
ICBpbWFnZS5pbWFnZVVSTCA9IFN0cmluZyhzcmNzZXRBdHRyaWJ1dGUuY2hhcmFjdGVycygpICsg
aW1hZ2VVUkxTdGFydCwgaW1hZ2VVUkxFbmQgLSBpbWFnZVVSTFN0YXJ0KTsKKyAgICAgICAgaW1h
Z2UuaW1hZ2VVUkxTdGFydCA9IGltYWdlVVJMU3RhcnQ7CisgICAgICAgIGltYWdlLmltYWdlVVJM
TGVuZ3RoID0gaW1hZ2VVUkxFbmQgLSBpbWFnZVVSTFN0YXJ0OwogICAgICAgICBpbWFnZS5zY2Fs
ZUZhY3RvciA9IGltYWdlU2NhbGVGYWN0b3I7CiAKICAgICAgICAgaW1hZ2VDYW5kaWRhdGVzLmFw
cGVuZChpbWFnZSk7CkBAIC00MDcsNyArNDE0LDggQEAgU3RyaW5nIGJlc3RGaXRTb3VyY2VGb3JJ
bWFnZUF0dHJpYnV0ZXMoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIGNvbnN0IFN0cmluZyYgc3IK
IAogICAgIGlmICghc3JjQXR0cmlidXRlLmlzRW1wdHkoKSkgewogICAgICAgICBJbWFnZVdpdGhT
Y2FsZSBpbWFnZTsKLSAgICAgICAgaW1hZ2UuaW1hZ2VVUkwgPSBzcmNBdHRyaWJ1dGU7CisgICAg
ICAgIGltYWdlLmltYWdlVVJMU3RhcnQgPSAwOworICAgICAgICBpbWFnZS5pbWFnZVVSTExlbmd0
aCA9IDA7CiAgICAgICAgIGltYWdlLnNjYWxlRmFjdG9yID0gMS4wOwogCiAgICAgICAgIGltYWdl
Q2FuZGlkYXRlcy5hcHBlbmQoaW1hZ2UpOwpAQCAtNDIwLDkgKzQyOCw5IEBAIFN0cmluZyBiZXN0
Rml0U291cmNlRm9ySW1hZ2VBdHRyaWJ1dGVzKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBjb25z
dCBTdHJpbmcmIHNyCiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGltYWdlQ2FuZGlkYXRl
cy5zaXplKCkgLSAxOyArK2kpIHsKICAgICAgICAgaWYgKGltYWdlQ2FuZGlkYXRlc1tpXS5zY2Fs
ZUZhY3RvciA+PSBkZXZpY2VTY2FsZUZhY3RvcikKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmco
aW1hZ2VDYW5kaWRhdGVzW2ldLmltYWdlVVJMKTsKKyAgICAgICAgICAgIHJldHVybiBpbWFnZUNh
bmRpZGF0ZXNbaV0uaGFzTm9JbWFnZSgpID8gc3JjQXR0cmlidXRlIDogU3RyaW5nKHNyY3NldEF0
dHJpYnV0ZS5jaGFyYWN0ZXJzKCkgKyBpbWFnZUNhbmRpZGF0ZXNbaV0uaW1hZ2VVUkxTdGFydCwg
aW1hZ2VDYW5kaWRhdGVzW2ldLmltYWdlVVJMTGVuZ3RoKTsKICAgICB9Ci0gICAgcmV0dXJuIFN0
cmluZyhpbWFnZUNhbmRpZGF0ZXMubGFzdCgpLmltYWdlVVJMKTsKKyAgICByZXR1cm4gaW1hZ2VD
YW5kaWRhdGVzLmxhc3QoKS5oYXNOb0ltYWdlKCkgPyBzcmNBdHRyaWJ1dGUgOiBTdHJpbmcoc3Jj
c2V0QXR0cmlidXRlLmNoYXJhY3RlcnMoKSArIGltYWdlQ2FuZGlkYXRlcy5sYXN0KCkuaW1hZ2VV
UkxTdGFydCwgaW1hZ2VDYW5kaWRhdGVzLmxhc3QoKS5pbWFnZVVSTExlbmd0aCk7CiB9CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213362</attachid>
            <date>2013-10-04 07:08:31 -0700</date>
            <delta_ts>2013-10-04 11:25:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-121899-20131004160829.patch</filename>
            <type>text/plain</type>
            <size>3589</size>
            <attacher name="Romain Perier">romain.perier</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU2MzE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODE3NDQwYjg2YjY1Yjdk
NDdhYTc1YjcyMGZhNWFkZTllYTEwZjk5OS4uYjg0MTE4Mjc4MzA5MTRkMmU2YmE2MmUwOWJlNmFm
ZTY0NTdlNDQxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEzLTA5LTI1ICBSb21h
aW4gUGVyaWVyICA8cm9tYWluLnBlcmllckBnbWFpbC5jb20+CisKKyAgICAgICAgT3B0aW1pemUg
c3RyaW5ncyBjb3BpZXMgaW4gc3Jjc2V0IHBhcnNlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxODk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBjb3ZlcmVkIGJ5IGV4aXN0aW5n
IG9uZXMuCisKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnBhcnNlSW1hZ2VzV2l0aFNjYWxlRnJvbVNyY3NldEF0dHJpYnV0ZSk6
IERvbid0IGNvcHkKKyAgICAgICAgaW1hZ2UuaW1hZ2VVUkwgYXQgZWFjaCBsb29wIGl0ZXJhdGlv
biwgc2F2ZSBpbmRleGVzIGluc3RlYWQuCisgICAgICAgIChXZWJDb3JlOjpiZXN0Rml0U291cmNl
Rm9ySW1hZ2VBdHRyaWJ1dGVzKTogTWFrZSBhIGRlZXAgY29weQorICAgICAgICBvZiB0aGUgVVJM
cyBvbmx5IHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgY2FuZGlkYXRlIGlzIGNob29zZW4KKyAgICAg
ICAgYnkgdGhlIHNlbGVjdGlvbiBhbGdvcml0aG0uIEl0IHJlZHVjZXMgdGhlIG51bWJlciBvZiBj
b3BpZXMKKyAgICAgICAgc2lnbmlmaWNhbnRseSBhbmQgaW1wcm92ZXMgcGVyZm9ybWFuY2VzCisg
ICAgICAgIChhcm91bmQgMzAlIHdpdGggdGhlICJSZWxlYXNlIiBwcm9maWxlIGFuZCA2MCUgd2l0
aCB0aGUgIkRlYnVnIiBvbmUpLgorCiAyMDEzLTA5LTIzICBEYXJpbiBBZGxlciAgPGRhcmluQGFw
cGxlLmNvbT4KIAogICAgICAgICBVc2UgdW5pcXVlX3B0ciBpbnN0ZWFkIG9mIGRlbGV0ZUFsbFZh
bHVlcyBpbiBGbG9hdGluZ09iamVjdCBjb2RlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxQYXJzZXJJZGlvbXMuY3BwCmluZGV4IGE3Y2I3MmUyZmI5N2Q2YjU2MjE2MGI0MWMx
ZGQyZTg5ODQ3NmRkNWQuLjQyMzg0MWUzODE0YTkwYjZkMWQxZjZkNGFkZjQ2MjFmNTFmNTcwMjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuY3Bw
CkBAIC0zMDAsMTEgKzMwMCwxNCBAQCBib29sIHRocmVhZFNhZmVNYXRjaChjb25zdCBIVE1MSWRl
bnRpZmllciYgbG9jYWxOYW1lLCBjb25zdCBRdWFsaWZpZWROYW1lJiBxTmFtZQogI2VuZGlmCiAK
IHN0cnVjdCBJbWFnZVdpdGhTY2FsZSB7Ci0gICAgU3RyaW5nIGltYWdlVVJMOworICAgIHVuc2ln
bmVkIGltYWdlVVJMU3RhcnQ7CisgICAgdW5zaWduZWQgaW1hZ2VVUkxMZW5ndGg7CiAgICAgZmxv
YXQgc2NhbGVGYWN0b3I7Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEltYWdlV2l0aFNjYWxl
JiBpbWFnZSkgY29uc3QKKyAgICBJbWFnZVdpdGhTY2FsZSgpIDogaW1hZ2VVUkxTdGFydCgwKSwg
aW1hZ2VVUkxMZW5ndGgoMCksIHNjYWxlRmFjdG9yKDEuMCkgeyB9CisKKyAgICBib29sIGhhc0lt
YWdlVVJMKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBzY2FsZUZhY3RvciA9PSBpbWFn
ZS5zY2FsZUZhY3RvciAmJiBpbWFnZVVSTCA9PSBpbWFnZS5pbWFnZVVSTDsKKyAgICAgICAgcmV0
dXJuIGltYWdlVVJMTGVuZ3RoOwogICAgIH0KIH07CiB0eXBlZGVmIFZlY3RvcjxJbWFnZVdpdGhT
Y2FsZT4gSW1hZ2VDYW5kaWRhdGVzOwpAQCAtMzkwLDcgKzM5Myw4IEBAIHN0YXRpYyB2b2lkIHBh
cnNlSW1hZ2VzV2l0aFNjYWxlRnJvbVNyY3NldEF0dHJpYnV0ZShjb25zdCBTdHJpbmcmIHNyY3Nl
dEF0dHJpYnV0CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgSW1hZ2VXaXRoU2Nh
bGUgaW1hZ2U7Ci0gICAgICAgIGltYWdlLmltYWdlVVJMID0gU3RyaW5nKHNyY3NldEF0dHJpYnV0
ZS5jaGFyYWN0ZXJzKCkgKyBpbWFnZVVSTFN0YXJ0LCBpbWFnZVVSTEVuZCAtIGltYWdlVVJMU3Rh
cnQpOworICAgICAgICBpbWFnZS5pbWFnZVVSTFN0YXJ0ID0gaW1hZ2VVUkxTdGFydDsKKyAgICAg
ICAgaW1hZ2UuaW1hZ2VVUkxMZW5ndGggPSBpbWFnZVVSTEVuZCAtIGltYWdlVVJMU3RhcnQ7CiAg
ICAgICAgIGltYWdlLnNjYWxlRmFjdG9yID0gaW1hZ2VTY2FsZUZhY3RvcjsKIAogICAgICAgICBp
bWFnZUNhbmRpZGF0ZXMuYXBwZW5kKGltYWdlKTsKQEAgLTQwNyw5ICs0MTEsNiBAQCBTdHJpbmcg
YmVzdEZpdFNvdXJjZUZvckltYWdlQXR0cmlidXRlcyhmbG9hdCBkZXZpY2VTY2FsZUZhY3Rvciwg
Y29uc3QgU3RyaW5nJiBzcgogCiAgICAgaWYgKCFzcmNBdHRyaWJ1dGUuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIEltYWdlV2l0aFNjYWxlIGltYWdlOwotICAgICAgICBpbWFnZS5pbWFnZVVSTCA9IHNy
Y0F0dHJpYnV0ZTsKLSAgICAgICAgaW1hZ2Uuc2NhbGVGYWN0b3IgPSAxLjA7Ci0KICAgICAgICAg
aW1hZ2VDYW5kaWRhdGVzLmFwcGVuZChpbWFnZSk7CiAgICAgfQogCkBAIC00MjAsOSArNDIxLDEw
IEBAIFN0cmluZyBiZXN0Rml0U291cmNlRm9ySW1hZ2VBdHRyaWJ1dGVzKGZsb2F0IGRldmljZVNj
YWxlRmFjdG9yLCBjb25zdCBTdHJpbmcmIHNyCiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGltYWdlQ2FuZGlkYXRlcy5zaXplKCkgLSAxOyArK2kpIHsKICAgICAgICAgaWYgKGltYWdlQ2Fu
ZGlkYXRlc1tpXS5zY2FsZUZhY3RvciA+PSBkZXZpY2VTY2FsZUZhY3RvcikKLSAgICAgICAgICAg
IHJldHVybiBTdHJpbmcoaW1hZ2VDYW5kaWRhdGVzW2ldLmltYWdlVVJMKTsKKyAgICAgICAgICAg
IHJldHVybiBpbWFnZUNhbmRpZGF0ZXNbaV0uaGFzSW1hZ2VVUkwoKSA/IHNyY3NldEF0dHJpYnV0
ZS5zdWJzdHJpbmdTaGFyaW5nSW1wbChpbWFnZUNhbmRpZGF0ZXNbaV0uaW1hZ2VVUkxTdGFydCwg
aW1hZ2VDYW5kaWRhdGVzW2ldLmltYWdlVVJMTGVuZ3RoKSA6IHNyY0F0dHJpYnV0ZTsKICAgICB9
Ci0gICAgcmV0dXJuIFN0cmluZyhpbWFnZUNhbmRpZGF0ZXMubGFzdCgpLmltYWdlVVJMKTsKKyAg
ICBjb25zdCBJbWFnZVdpdGhTY2FsZSAmbGFzdENhbmRpZGF0ZSA9IGltYWdlQ2FuZGlkYXRlcy5s
YXN0KCk7CisgICAgcmV0dXJuIGxhc3RDYW5kaWRhdGUuaGFzSW1hZ2VVUkwoKSA/IHNyY3NldEF0
dHJpYnV0ZS5zdWJzdHJpbmdTaGFyaW5nSW1wbChsYXN0Q2FuZGlkYXRlLmltYWdlVVJMU3RhcnQs
IGxhc3RDYW5kaWRhdGUuaW1hZ2VVUkxMZW5ndGgpIDogc3JjQXR0cmlidXRlOwogfQogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213380</attachid>
            <date>2013-10-04 11:25:13 -0700</date>
            <delta_ts>2013-10-04 11:31:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-121899-20131004202511.patch</filename>
            <type>text/plain</type>
            <size>3853</size>
            <attacher name="Romain Perier">romain.perier</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU2MzE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODE3NDQwYjg2YjY1Yjdk
NDdhYTc1YjcyMGZhNWFkZTllYTEwZjk5OS4uYjg0MTE4Mjc4MzA5MTRkMmU2YmE2MmUwOWJlNmFm
ZTY0NTdlNDQxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEzLTA5LTI1ICBSb21h
aW4gUGVyaWVyICA8cm9tYWluLnBlcmllckBnbWFpbC5jb20+CisKKyAgICAgICAgT3B0aW1pemUg
c3RyaW5ncyBjb3BpZXMgaW4gc3Jjc2V0IHBhcnNlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxODk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBjb3ZlcmVkIGJ5IGV4aXN0aW5n
IG9uZXMuCisKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnBhcnNlSW1hZ2VzV2l0aFNjYWxlRnJvbVNyY3NldEF0dHJpYnV0ZSk6
IERvbid0IGNvcHkKKyAgICAgICAgaW1hZ2UuaW1hZ2VVUkwgYXQgZWFjaCBsb29wIGl0ZXJhdGlv
biwgc2F2ZSBpbmRleGVzIGluc3RlYWQuCisgICAgICAgIChXZWJDb3JlOjpiZXN0Rml0U291cmNl
Rm9ySW1hZ2VBdHRyaWJ1dGVzKTogTWFrZSBhIGRlZXAgY29weQorICAgICAgICBvZiB0aGUgVVJM
cyBvbmx5IHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgY2FuZGlkYXRlIGlzIGNob29zZW4KKyAgICAg
ICAgYnkgdGhlIHNlbGVjdGlvbiBhbGdvcml0aG0uIEl0IHJlZHVjZXMgdGhlIG51bWJlciBvZiBj
b3BpZXMKKyAgICAgICAgc2lnbmlmaWNhbnRseSBhbmQgaW1wcm92ZXMgcGVyZm9ybWFuY2VzCisg
ICAgICAgIChhcm91bmQgMzAlIHdpdGggdGhlICJSZWxlYXNlIiBwcm9maWxlIGFuZCA2MCUgd2l0
aCB0aGUgIkRlYnVnIiBvbmUpLgorCiAyMDEzLTA5LTIzICBEYXJpbiBBZGxlciAgPGRhcmluQGFw
cGxlLmNvbT4KIAogICAgICAgICBVc2UgdW5pcXVlX3B0ciBpbnN0ZWFkIG9mIGRlbGV0ZUFsbFZh
bHVlcyBpbiBGbG9hdGluZ09iamVjdCBjb2RlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxQYXJzZXJJZGlvbXMuY3BwCmluZGV4IGE3Y2I3MmUyZmI5N2Q2YjU2MjE2MGI0MWMx
ZGQyZTg5ODQ3NmRkNWQuLjFjM2FjZGQxMjUyZDY5MTY3ZThlMzJlZmUzNzc1OTIxYmQ3MmQ5OTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuY3Bw
CkBAIC0zMDAsMTEgKzMwMCwyMCBAQCBib29sIHRocmVhZFNhZmVNYXRjaChjb25zdCBIVE1MSWRl
bnRpZmllciYgbG9jYWxOYW1lLCBjb25zdCBRdWFsaWZpZWROYW1lJiBxTmFtZQogI2VuZGlmCiAK
IHN0cnVjdCBJbWFnZVdpdGhTY2FsZSB7Ci0gICAgU3RyaW5nIGltYWdlVVJMOworICAgIHVuc2ln
bmVkIGltYWdlVVJMU3RhcnQ7CisgICAgdW5zaWduZWQgaW1hZ2VVUkxMZW5ndGg7CiAgICAgZmxv
YXQgc2NhbGVGYWN0b3I7Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEltYWdlV2l0aFNjYWxl
JiBpbWFnZSkgY29uc3QKKworICAgIEltYWdlV2l0aFNjYWxlKCkKKyAgICAgICAgOiBpbWFnZVVS
TFN0YXJ0KDApCisgICAgICAgICwgaW1hZ2VVUkxMZW5ndGgoMCkKKyAgICAgICAgLCBzY2FsZUZh
Y3RvcigxKQorICAgICAgICB7IAorICAgICAgICB9CisKKyAgICBib29sIGhhc0ltYWdlVVJMKCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBzY2FsZUZhY3RvciA9PSBpbWFnZS5zY2FsZUZh
Y3RvciAmJiBpbWFnZVVSTCA9PSBpbWFnZS5pbWFnZVVSTDsKKyAgICAgICAgcmV0dXJuIGltYWdl
VVJMTGVuZ3RoOwogICAgIH0KIH07CiB0eXBlZGVmIFZlY3RvcjxJbWFnZVdpdGhTY2FsZT4gSW1h
Z2VDYW5kaWRhdGVzOwpAQCAtMzkwLDcgKzM5OSw4IEBAIHN0YXRpYyB2b2lkIHBhcnNlSW1hZ2Vz
V2l0aFNjYWxlRnJvbVNyY3NldEF0dHJpYnV0ZShjb25zdCBTdHJpbmcmIHNyY3NldEF0dHJpYnV0
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgSW1hZ2VXaXRoU2NhbGUgaW1hZ2U7
Ci0gICAgICAgIGltYWdlLmltYWdlVVJMID0gU3RyaW5nKHNyY3NldEF0dHJpYnV0ZS5jaGFyYWN0
ZXJzKCkgKyBpbWFnZVVSTFN0YXJ0LCBpbWFnZVVSTEVuZCAtIGltYWdlVVJMU3RhcnQpOworICAg
ICAgICBpbWFnZS5pbWFnZVVSTFN0YXJ0ID0gaW1hZ2VVUkxTdGFydDsKKyAgICAgICAgaW1hZ2Uu
aW1hZ2VVUkxMZW5ndGggPSBpbWFnZVVSTEVuZCAtIGltYWdlVVJMU3RhcnQ7CiAgICAgICAgIGlt
YWdlLnNjYWxlRmFjdG9yID0gaW1hZ2VTY2FsZUZhY3RvcjsKIAogICAgICAgICBpbWFnZUNhbmRp
ZGF0ZXMuYXBwZW5kKGltYWdlKTsKQEAgLTQwNiwxMSArNDE2LDggQEAgU3RyaW5nIGJlc3RGaXRT
b3VyY2VGb3JJbWFnZUF0dHJpYnV0ZXMoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIGNvbnN0IFN0
cmluZyYgc3IKICAgICBwYXJzZUltYWdlc1dpdGhTY2FsZUZyb21TcmNzZXRBdHRyaWJ1dGUoc3Jj
c2V0QXR0cmlidXRlLCBpbWFnZUNhbmRpZGF0ZXMpOwogCiAgICAgaWYgKCFzcmNBdHRyaWJ1dGUu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIEltYWdlV2l0aFNjYWxlIGltYWdlOwotICAgICAgICBpbWFn
ZS5pbWFnZVVSTCA9IHNyY0F0dHJpYnV0ZTsKLSAgICAgICAgaW1hZ2Uuc2NhbGVGYWN0b3IgPSAx
LjA7Ci0KLSAgICAgICAgaW1hZ2VDYW5kaWRhdGVzLmFwcGVuZChpbWFnZSk7CisgICAgICAgIElt
YWdlV2l0aFNjYWxlIHNyY1BsYWNlaG9sZGVySW1hZ2U7CisgICAgICAgIGltYWdlQ2FuZGlkYXRl
cy5hcHBlbmQoc3JjUGxhY2Vob2xkZXJJbWFnZSk7CiAgICAgfQogCiAgICAgaWYgKGltYWdlQ2Fu
ZGlkYXRlcy5pc0VtcHR5KCkpCkBAIC00MjAsOSArNDI3LDEwIEBAIFN0cmluZyBiZXN0Rml0U291
cmNlRm9ySW1hZ2VBdHRyaWJ1dGVzKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBjb25zdCBTdHJp
bmcmIHNyCiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGltYWdlQ2FuZGlkYXRlcy5zaXpl
KCkgLSAxOyArK2kpIHsKICAgICAgICAgaWYgKGltYWdlQ2FuZGlkYXRlc1tpXS5zY2FsZUZhY3Rv
ciA+PSBkZXZpY2VTY2FsZUZhY3RvcikKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaW1hZ2VD
YW5kaWRhdGVzW2ldLmltYWdlVVJMKTsKKyAgICAgICAgICAgIHJldHVybiBpbWFnZUNhbmRpZGF0
ZXNbaV0uaGFzSW1hZ2VVUkwoKSA/IHNyY3NldEF0dHJpYnV0ZS5zdWJzdHJpbmdTaGFyaW5nSW1w
bChpbWFnZUNhbmRpZGF0ZXNbaV0uaW1hZ2VVUkxTdGFydCwgaW1hZ2VDYW5kaWRhdGVzW2ldLmlt
YWdlVVJMTGVuZ3RoKSA6IHNyY0F0dHJpYnV0ZTsKICAgICB9Ci0gICAgcmV0dXJuIFN0cmluZyhp
bWFnZUNhbmRpZGF0ZXMubGFzdCgpLmltYWdlVVJMKTsKKyAgICBjb25zdCBJbWFnZVdpdGhTY2Fs
ZSYgbGFzdENhbmRpZGF0ZSA9IGltYWdlQ2FuZGlkYXRlcy5sYXN0KCk7CisgICAgcmV0dXJuIGxh
c3RDYW5kaWRhdGUuaGFzSW1hZ2VVUkwoKSA/IHNyY3NldEF0dHJpYnV0ZS5zdWJzdHJpbmdTaGFy
aW5nSW1wbChsYXN0Q2FuZGlkYXRlLmltYWdlVVJMU3RhcnQsIGxhc3RDYW5kaWRhdGUuaW1hZ2VV
UkxMZW5ndGgpIDogc3JjQXR0cmlidXRlOwogfQogCiB9Cg==
</data>
<flag name="review"
          id="235730"
          type_id="1"
          status="+"
          setter="ap"
    />
    <flag name="commit-queue"
          id="235731"
          type_id="3"
          status="-"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>