<?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>175757</bug_id>
          
          <creation_ts>2017-08-20 16:43:15 -0700</creation_ts>
          <short_desc>StringView could use a function to strip leading/trailing characters without allocation</short_desc>
          <delta_ts>2017-08-24 16:37:26 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=171731</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1340496</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-08-20 16:43:15 -0700</bug_when>
    <thetext>StringView could use a function to strip leading/trailing characters without allocation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340497</commentid>
    <comment_count>1</comment_count>
      <attachid>318607</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-08-20 17:02:09 -0700</bug_when>
    <thetext>Created attachment 318607
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340501</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-08-20 17:30:04 -0700</bug_when>
    <thetext>I think Daniel already has an open bug about this and I vaguely remember Darin not liking the idea. CCing then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340502</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-08-20 17:32:17 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #2)
&gt; I think Daniel already has an open bug about this and I vaguely remember
&gt; Darin not liking the idea. CCing then.

Maybe https://bugs.webkit.org/show_bug.cgi?id=171731</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340503</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-08-20 17:57:36 -0700</bug_when>
    <thetext>I intentionally did not make this a stripWhiteSpace() function as the semantics of that are usually suspect. Rather, this is intended as a building block for the HTML parser idioms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340504</commentid>
    <comment_count>5</comment_count>
      <attachid>318607</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-08-20 18:31:35 -0700</bug_when>
    <thetext>Comment on attachment 318607
Patch

I like this.

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

&gt; Source/WTF/wtf/text/StringView.h:123
&gt; +    StringView stripLeadingAndTrailingMatchedCharacters(MachedCharacterPredicate&amp;&amp;);

s/Mached/Matched/

&gt; Source/WTF/wtf/text/StringView.h:163
&gt; +    template&lt;typename CharacterType, class MachedCharacterPredicate&gt;

Why using both typename and class?

&gt; Tools/TestWebKitAPI/Tests/WTF/StringView.cpp:938
&gt; +    EXPECT_TRUE(stringViewFromLiteral(&quot;AAAAAAAAA&quot;).stripLeadingAndTrailingMatchedCharacters(isA) == StringView::empty());

For completeness, you could add AAAAAAAAB, BAAAAAAAA and maybe AAABABAAA.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340507</commentid>
    <comment_count>6</comment_count>
      <attachid>318609</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-08-20 19:07:11 -0700</bug_when>
    <thetext>Created attachment 318609
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340511</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-08-20 20:16:09 -0700</bug_when>
    <thetext>Thanks for the review! Since Darin had concerns about a related change, I&apos;ll wait for him to chime in before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340601</commentid>
    <comment_count>8</comment_count>
      <attachid>318609</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-08-21 08:49:14 -0700</bug_when>
    <thetext>Comment on attachment 318609
Patch

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

I have no objection to adding this.

My concern is about stripping one WTF::String and storing the result in another WTF::String or WTF::AtomicString. When there is nothing to strip, it’s important that we not convert to a StringView and then call toString since it will always copy the string, or call toAtomicString which will have to look up the table in the atomic string table even though it hasn’t been changed.

When stripping a WTF::String or WTF::StringView and then processing the result, it’s great to have a function like this one!

&gt; Source/WTF/ChangeLog:21
&gt; +        For instance, the check (from ScriptElement.cpp:287):
&gt; +
&gt; +        if (!stripLeadingAndTrailingHTMLSpaces(sourceURL).isEmpty()) {
&gt; +            ...
&gt; +        }
&gt; +
&gt; +        currently allocates a string just to make this check. With a new 
&gt; +        stripLeadingAndTrailingHTMLSpaces such as:

I think it would be nice to have the above call site use a “contains” function rather than a “strip” function. I don’t find “strip.isEmpty” to be a clear idiom.

&gt; Source/WTF/wtf/text/StringView.h:123
&gt; +    template&lt;typename MatchedCharacterPredicate&gt;
&gt; +    StringView stripLeadingAndTrailingMatchedCharacters(MatchedCharacterPredicate&amp;&amp;);

I don’t understand why this takes an rvalue reference to the predicate. It seems the function will call the predicate multiple times. That seems like &quot;const&amp;&quot;, not &quot;&amp;&amp;&quot;, which we normally would use when a function will take ownership of an object or might take ownership of an object.

&gt; Source/WTF/wtf/text/StringView.h:967
&gt; +    if (!start &amp;&amp; end == m_length - 1)
&gt; +        return *this;
&gt; +
&gt; +    StringView result(characters + start, end + 1 - start);
&gt; +    result.setUnderlyingString(*this);
&gt; +    return result;

Why not call StringView::substring and keep this function simpler and shorter?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340603</commentid>
    <comment_count>9</comment_count>
      <attachid>318609</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-08-21 08:57:49 -0700</bug_when>
    <thetext>Comment on attachment 318609
Patch

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

&gt;&gt; Source/WTF/ChangeLog:21
&gt;&gt; +        stripLeadingAndTrailingHTMLSpaces such as:
&gt; 
&gt; I think it would be nice to have the above call site use a “contains” function rather than a “strip” function. I don’t find “strip.isEmpty” to be a clear idiom.

I take that back. On reflection, strip.isEmpty is what the call site actually means!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340674</commentid>
    <comment_count>10</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-08-21 11:49:36 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #8)
&gt; Comment on attachment 318609 [details]
&gt; Patch
&gt; 
&gt; &gt; Source/WTF/wtf/text/StringView.h:123
&gt; &gt; +    template&lt;typename MatchedCharacterPredicate&gt;
&gt; &gt; +    StringView stripLeadingAndTrailingMatchedCharacters(MatchedCharacterPredicate&amp;&amp;);
&gt; 
&gt; I don’t understand why this takes an rvalue reference to the predicate. It
&gt; seems the function will call the predicate multiple times. That seems like
&gt; &quot;const&amp;&quot;, not &quot;&amp;&amp;&quot;, which we normally would use when a function will take
&gt; ownership of an object or might take ownership of an object.

In this case, it&apos;s actually not an r-value reference, but rather a universal reference. But, that said, since I never want to take ownership, that is overkill, will switch to const&amp;.

&gt; 
&gt; &gt; Source/WTF/wtf/text/StringView.h:967
&gt; &gt; +    if (!start &amp;&amp; end == m_length - 1)
&gt; &gt; +        return *this;
&gt; &gt; +
&gt; &gt; +    StringView result(characters + start, end + 1 - start);
&gt; &gt; +    result.setUnderlyingString(*this);
&gt; &gt; +    return result;
&gt; 
&gt; Why not call StringView::substring and keep this function simpler and
&gt; shorter?

It ends up doing a few unnecessary checks. I have a small refactor in mind to avoid those and simplify some other things.

Thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340745</commentid>
    <comment_count>11</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-08-21 14:10:26 -0700</bug_when>
    <thetext>Committed r220982: &lt;http://trac.webkit.org/changeset/220982&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340746</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-08-21 14:11:27 -0700</bug_when>
    <thetext>&lt;rdar://problem/33998992&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342243</commentid>
    <comment_count>13</comment_count>
      <attachid>318609</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-08-24 16:37:26 -0700</bug_when>
    <thetext>Comment on attachment 318609
Patch

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

&gt; Source/WTF/wtf/text/StringView.h:975
&gt; +    if (is8Bit())
&gt; +        return stripLeadingAndTrailingMatchedCharacters&lt;LChar&gt;(characters8(), WTFMove(predicate));
&gt; +    return stripLeadingAndTrailingMatchedCharacters&lt;UChar&gt;(characters16(), WTFMove(predicate));

Just occurred to me: Surprised that the &lt;LChar&gt; and &lt;UChar&gt; are needed. I think they are not.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318607</attachid>
            <date>2017-08-20 17:02:09 -0700</date>
            <delta_ts>2017-08-20 19:07:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175757-20170820170208.patch</filename>
            <type>text/plain</type>
            <size>6369</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBACisyMDE3LTA4LTIwICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgU3RyaW5nVmlldyBjb3VsZCB1c2UgYSBmdW5jdGlvbiB0byBz
dHJpcCBsZWFkaW5nL3RyYWlsaW5nIGNoYXJhY3RlcnMgd2l0aG91dCBhbGxvY2F0aW9uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU3NTcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGVyZSBhcmUgbWFu
eSBwbGFjZXMgaW4gV2ViQ29yZS9XZWJLaXQgdGhhdCB3ZSBjYWxsIGZ1bmN0aW9ucyBsaWtlLCAK
KyAgICAgICAgV2ViQ29yZTo6c3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzLCAgb3Ig
U3RyaW5nOjpzdHJpcFdoaXRlU3BhY2UoKSBvbmx5IHRvIHVzZSAKKyAgICAgICAgdGhlIGFsbG9j
YXRlZCBTdHJpbmcgYXMgYSB0ZW1wb3JhcnkgZm9yIGVpdGhlciBhbm90aGVyIHRyYW5zZm9ybWF0
aW9uIG9yIGEgY29tcGFyaXNvbi4KKyAgICAgICAgTm93IHRoYXQgd2UgaGF2ZSBTdHJpbmdWaWV3
LCB3ZSBjYW4gYXZvaWQgdGhhdCBleHRyYSBhbGxvY2F0aW9uLCBieSBoYXZpbmcgcmV0dXJuaW5n
IGEKKyAgICAgICAgU3RyaW5nVmlldyAgc3Vic3RyaW5nIGluIHRoZXNlIHNjZW5hcmlvcy4KKwor
ICAgICAgICBGb3IgaW5zdGFuY2UsIHRoZSBjaGVjayAoZnJvbSBTY3JpcHRFbGVtZW50LmNwcDoy
ODcpOgorCisgICAgICAgIGlmICghc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKHNv
dXJjZVVSTCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAuLi4KKyAgICAgICAgfQorCisgICAg
ICAgIGN1cnJlbnRseSBhbGxvY2F0ZXMgYSBzdHJpbmcganVzdCB0byBtYWtlIHRoaXMgY2hlY2su
IFdpdGggYSBuZXcgCisgICAgICAgIHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyBz
dWNoIGFzOgorCisgICAgICAgIFN0cmluZ1ZpZXcgc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1M
U3BhY2VzKFN0cmluZ1ZpZXcgc3RyaW5nVmlldykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIHN0cmluZ1ZpZXcuc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdNYXRjaGVkQ2hhcmFjdGVycyhb
XSAoYXV0byBjKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGlzSFRNTFNwYWNlKGMpOworICAg
ICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICBXZSBjb3VsZCBpbnN0ZWFkIGhhdmUg
ZXhhY3Qgc2FtZSBjb2RlIGZyb20gU2NyaXB0RWxlbWVudC5jcHAgbm93IGF2b2lkIGFuIGFsbG9j
YXRpb24uCisKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdWaWV3Lmg6CisgICAgICAgIChXVEY6
OlN0cmluZ1ZpZXc6OnN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nTWF0Y2hlZENoYXJhY3RlcnMpOgor
CiAyMDE3LTA4LTE4ICBSeWFuIEhhZGRhZCAgPHJ5YW5oYWRkYWRAYXBwbGUuY29tPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMjA5MzguCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi90ZXh0L1N0cmluZ1ZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0
cmluZ1ZpZXcuaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dURi93dGYvdGV4dC9TdHJp
bmdWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTExOSw2ICsxMTksOSBAQCBwdWJsaWM6CiAgICAg
U3RyaW5nVmlldyBsZWZ0KHVuc2lnbmVkIGxlbikgY29uc3QgeyByZXR1cm4gc3Vic3RyaW5nKDAs
IGxlbik7IH0KICAgICBTdHJpbmdWaWV3IHJpZ2h0KHVuc2lnbmVkIGxlbikgY29uc3QgeyByZXR1
cm4gc3Vic3RyaW5nKGxlbmd0aCgpIC0gbGVuLCBsZW4pOyB9CiAKKyAgICB0ZW1wbGF0ZTxjbGFz
cyBNYWNoZWRDaGFyYWN0ZXJQcmVkaWNhdGU+CisgICAgU3RyaW5nVmlldyBzdHJpcExlYWRpbmdB
bmRUcmFpbGluZ01hdGNoZWRDaGFyYWN0ZXJzKE1hY2hlZENoYXJhY3RlclByZWRpY2F0ZSYmKTsK
KwogICAgIGNsYXNzIFNwbGl0UmVzdWx0OwogICAgIFNwbGl0UmVzdWx0IHNwbGl0KFVDaGFyKSBj
b25zdDsKIApAQCAtMTU3LDYgKzE2MCw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBpbml0aWFsaXpl
KGNvbnN0IExDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKICAgICB2b2lkIGluaXRpYWxpemUoY29u
c3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZSwgY2xhc3MgTWFjaGVkQ2hhcmFjdGVyUHJlZGljYXRlPgorICAgIFN0cmluZ1Zp
ZXcgc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdNYXRjaGVkQ2hhcmFjdGVycyhjb25zdCBDaGFyYWN0
ZXJUeXBlKiwgTWFjaGVkQ2hhcmFjdGVyUHJlZGljYXRlJiYpOworCiAjaWYgQ0hFQ0tfU1RSSU5H
VklFV19MSUZFVElNRQogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBib29sIHVuZGVybHlpbmdT
dHJpbmdJc1ZhbGlkKCkgY29uc3Q7CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHZvaWQgc2V0
VW5kZXJseWluZ1N0cmluZyhjb25zdCBTdHJpbmdJbXBsKik7CkBAIC05MzUsNiArOTQxLDQwIEBA
IGlubGluZSBib29sIFN0cmluZ1ZpZXc6OlNwbGl0UmVzdWx0OjpJdGUKICAgICByZXR1cm4gISgq
dGhpcyA9PSBvdGhlcik7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIGNs
YXNzIE1hY2hlZENoYXJhY3RlclByZWRpY2F0ZT4KK2lubGluZSBTdHJpbmdWaWV3IFN0cmluZ1Zp
ZXc6OnN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nTWF0Y2hlZENoYXJhY3RlcnMoY29uc3QgQ2hhcmFj
dGVyVHlwZSogY2hhcmFjdGVycywgTWFjaGVkQ2hhcmFjdGVyUHJlZGljYXRlJiYgcHJlZGljYXRl
KQoreworICAgIGlmICghbV9sZW5ndGgpCisgICAgICAgIHJldHVybiAqdGhpczsKKworICAgIHVu
c2lnbmVkIHN0YXJ0ID0gMDsKKyAgICB1bnNpZ25lZCBlbmQgPSBtX2xlbmd0aCAtIDE7CisgICAg
CisgICAgd2hpbGUgKHN0YXJ0IDw9IGVuZCAmJiBwcmVkaWNhdGUoY2hhcmFjdGVyc1tzdGFydF0p
KQorICAgICAgICArK3N0YXJ0OworICAgIAorICAgIGlmIChzdGFydCA+IGVuZCkKKyAgICAgICAg
cmV0dXJuIFN0cmluZ1ZpZXc6OmVtcHR5KCk7CisKKyAgICB3aGlsZSAoZW5kICYmIHByZWRpY2F0
ZShjaGFyYWN0ZXJzW2VuZF0pKQorICAgICAgICAtLWVuZDsKKworICAgIGlmICghc3RhcnQgJiYg
ZW5kID09IG1fbGVuZ3RoIC0gMSkKKyAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgU3RyaW5n
VmlldyByZXN1bHQoY2hhcmFjdGVycyArIHN0YXJ0LCBlbmQgKyAxIC0gc3RhcnQpOworICAgIHJl
c3VsdC5zZXRVbmRlcmx5aW5nU3RyaW5nKCp0aGlzKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit0ZW1wbGF0ZTxjbGFzcyBNYWNoZWRDaGFyYWN0ZXJQcmVkaWNhdGU+CitTdHJpbmdWaWV3IFN0
cmluZ1ZpZXc6OnN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nTWF0Y2hlZENoYXJhY3RlcnMoTWFjaGVk
Q2hhcmFjdGVyUHJlZGljYXRlJiYgcHJlZGljYXRlKQoreworICAgIGlmIChpczhCaXQoKSkKKyAg
ICAgICAgcmV0dXJuIHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nTWF0Y2hlZENoYXJhY3RlcnM8TENo
YXI+KGNoYXJhY3RlcnM4KCksIFdURk1vdmUocHJlZGljYXRlKSk7CisgICAgcmV0dXJuIHN0cmlw
TGVhZGluZ0FuZFRyYWlsaW5nTWF0Y2hlZENoYXJhY3RlcnM8VUNoYXI+KGNoYXJhY3RlcnMxNigp
LCBXVEZNb3ZlKHByZWRpY2F0ZSkpOworfQorCiB0ZW1wbGF0ZTx1bnNpZ25lZCBsZW5ndGg+IGlu
bGluZSBib29sIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKFN0cmluZ1ZpZXcgc3RyaW5n
LCBjb25zdCBjaGFyICgmbG93ZXJjYXNlTGV0dGVycylbbGVuZ3RoXSkKIHsKICAgICByZXR1cm4g
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2VDb21tb24oc3RyaW5nLCBsb3dlcmNhc2VMZXR0
ZXJzKTsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDIyMDk1NykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDE3LTA4LTIwICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgU3RyaW5nVmlldyBjb3VsZCB1c2UgYSBmdW5jdGlvbiB0byBzdHJpcCBsZWFk
aW5nL3RyYWlsaW5nIGNoYXJhY3RlcnMgd2l0aG91dCBhbGxvY2F0aW9uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU3NTcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL1N0cmluZ1ZpZXcuY3BwOgorICAgICAgICBBZGQgdGVzdHMgZm9yIFN0cmluZ1ZpZXc6OnN0
cmlwTGVhZGluZ0FuZFRyYWlsaW5nTWF0Y2hlZENoYXJhY3RlcnMoKS4KKwogMjAxNy0wOC0xOSAg
V2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TIFdL
Ml0gQWRkIGEgdmVyc2lvbiBvZiBEYXRhSW50ZXJhY3Rpb25UZXN0cy5FeHRlcm5hbFNvdXJjZUF0
dHJpYnV0ZWRTdHJpbmdUb0NvbnRlbnRFZGl0YWJsZSB0aGF0IGRvZXNuJ3QgaGl0IGEgZGVidWcg
YXNzZXJ0aW9uCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdWaWV3
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdW
aWV3LmNwcAkocmV2aXNpb24gMjIwOTU0KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvU3RyaW5nVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyNSw0ICs5MjUsMjMgQEAgVEVT
VChXVEYsIFN0cmluZ1ZpZXdSZXZlcnNlRmluZEJhc2ljKQogICAgIEVYUEVDVF9FUShyZWZlcmVu
Y2UucmV2ZXJzZUZpbmQoJ2MnLCA0KSwgbm90Rm91bmQpOwogfQogCitURVNUKFdURiwgU3RyaW5n
Vmlld1N0cmlwTGVhZGluZ0FuZFRyYWlsaW5nTWF0Y2hlZENoYXJhY3RlcnMpCit7CisgICAgYXV0
byBpc0EgPSBbXSAoVUNoYXIgYykgeyAKKyAgICAgICAgcmV0dXJuIGMgPT0gJ0EnOworICAgIH07
CisKKyAgICBFWFBFQ1RfVFJVRShzdHJpbmdWaWV3RnJvbUxpdGVyYWwoIkFBQUJCQkFBQSIpLnN0
cmlwTGVhZGluZ0FuZFRyYWlsaW5nTWF0Y2hlZENoYXJhY3RlcnMoaXNBKSA9PSBzdHJpbmdWaWV3
RnJvbUxpdGVyYWwoIkJCQiIpKTsKKyAgICBFWFBFQ1RfVFJVRShzdHJpbmdWaWV3RnJvbUxpdGVy
YWwoIkFBQUJCQkNDQyIpLnN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nTWF0Y2hlZENoYXJhY3RlcnMo
aXNBKSA9PSBzdHJpbmdWaWV3RnJvbUxpdGVyYWwoIkJCQkNDQyIpKTsKKyAgICBFWFBFQ1RfVFJV
RShzdHJpbmdWaWV3RnJvbUxpdGVyYWwoIkNDQ0JCQkFBQSIpLnN0cmlwTGVhZGluZ0FuZFRyYWls
aW5nTWF0Y2hlZENoYXJhY3RlcnMoaXNBKSA9PSBzdHJpbmdWaWV3RnJvbUxpdGVyYWwoIkNDQ0JC
QiIpKTsKKyAgICBFWFBFQ1RfVFJVRShzdHJpbmdWaWV3RnJvbUxpdGVyYWwoIkNDQ0JCQkNDQyIp
LnN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nTWF0Y2hlZENoYXJhY3RlcnMoaXNBKSA9PSBzdHJpbmdW
aWV3RnJvbUxpdGVyYWwoIkNDQ0JCQkNDQyIpKTsKKyAgICBFWFBFQ1RfVFJVRShzdHJpbmdWaWV3
RnJvbUxpdGVyYWwoIkFBQUFBQUFBQSIpLnN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nTWF0Y2hlZENo
YXJhY3RlcnMoaXNBKSA9PSBTdHJpbmdWaWV3OjplbXB0eSgpKTsKKworICAgIFN0cmluZ1ZpZXcg
ZW1wdHlWaWV3ID0gU3RyaW5nVmlldzo6ZW1wdHkoKTsKKyAgICBFWFBFQ1RfVFJVRShlbXB0eVZp
ZXcuc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdNYXRjaGVkQ2hhcmFjdGVycyhpc0EpID09IGVtcHR5
Vmlldyk7CisKKyAgICBTdHJpbmdWaWV3IG51bGxWaWV3OworICAgIEVYUEVDVF9UUlVFKG51bGxW
aWV3LnN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nTWF0Y2hlZENoYXJhY3RlcnMoaXNBKSA9PSBudWxs
Vmlldyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318609</attachid>
            <date>2017-08-20 19:07:11 -0700</date>
            <delta_ts>2017-08-21 08:49:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175757-20170820190710.patch</filename>
            <type>text/plain</type>
            <size>6791</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMjA5NTcpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBACisyMDE3LTA4LTIwICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgU3RyaW5nVmlldyBjb3VsZCB1c2UgYSBmdW5jdGlvbiB0byBz
dHJpcCBsZWFkaW5nL3RyYWlsaW5nIGNoYXJhY3RlcnMgd2l0aG91dCBhbGxvY2F0aW9uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU3NTcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGVyZSBhcmUgbWFu
eSBwbGFjZXMgaW4gV2ViQ29yZS9XZWJLaXQgdGhhdCB3ZSBjYWxsIGZ1bmN0aW9ucyBsaWtlLCAK
KyAgICAgICAgV2ViQ29yZTo6c3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzLCAgb3Ig
U3RyaW5nOjpzdHJpcFdoaXRlU3BhY2UoKSBvbmx5IHRvIHVzZSAKKyAgICAgICAgdGhlIGFsbG9j
YXRlZCBTdHJpbmcgYXMgYSB0ZW1wb3JhcnkgZm9yIGVpdGhlciBhbm90aGVyIHRyYW5zZm9ybWF0
aW9uIG9yIGEgY29tcGFyaXNvbi4KKyAgICAgICAgTm93IHRoYXQgd2UgaGF2ZSBTdHJpbmdWaWV3
LCB3ZSBjYW4gYXZvaWQgdGhhdCBleHRyYSBhbGxvY2F0aW9uLCBieSBoYXZpbmcgcmV0dXJuaW5n
IGEKKyAgICAgICAgU3RyaW5nVmlldyAgc3Vic3RyaW5nIGluIHRoZXNlIHNjZW5hcmlvcy4KKwor
ICAgICAgICBGb3IgaW5zdGFuY2UsIHRoZSBjaGVjayAoZnJvbSBTY3JpcHRFbGVtZW50LmNwcDoy
ODcpOgorCisgICAgICAgIGlmICghc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKHNv
dXJjZVVSTCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAuLi4KKyAgICAgICAgfQorCisgICAg
ICAgIGN1cnJlbnRseSBhbGxvY2F0ZXMgYSBzdHJpbmcganVzdCB0byBtYWtlIHRoaXMgY2hlY2su
IFdpdGggYSBuZXcgCisgICAgICAgIHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyBz
dWNoIGFzOgorCisgICAgICAgIFN0cmluZ1ZpZXcgc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1M
U3BhY2VzKFN0cmluZ1ZpZXcgc3RyaW5nVmlldykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIHN0cmluZ1ZpZXcuc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdNYXRjaGVkQ2hhcmFjdGVycyhb
XSAoYXV0byBjKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGlzSFRNTFNwYWNlKGMpOworICAg
ICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICBXZSBjb3VsZCBpbnN0ZWFkIGhhdmUg
ZXhhY3Qgc2FtZSBjb2RlIGZyb20gU2NyaXB0RWxlbWVudC5jcHAgbm93IGF2b2lkIGFuIGFsbG9j
YXRpb24uCisKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdWaWV3Lmg6CisgICAgICAgIChXVEY6
OlN0cmluZ1ZpZXc6OnN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nTWF0Y2hlZENoYXJhY3RlcnMpOgor
CiAyMDE3LTA4LTE4ICBSeWFuIEhhZGRhZCAgPHJ5YW5oYWRkYWRAYXBwbGUuY29tPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMjA5MzguCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi90ZXh0L1N0cmluZ1ZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0
cmluZ1ZpZXcuaAkocmV2aXNpb24gMjIwOTU3KQorKysgU291cmNlL1dURi93dGYvdGV4dC9TdHJp
bmdWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTExOSw2ICsxMTksOSBAQCBwdWJsaWM6CiAgICAg
U3RyaW5nVmlldyBsZWZ0KHVuc2lnbmVkIGxlbikgY29uc3QgeyByZXR1cm4gc3Vic3RyaW5nKDAs
IGxlbik7IH0KICAgICBTdHJpbmdWaWV3IHJpZ2h0KHVuc2lnbmVkIGxlbikgY29uc3QgeyByZXR1
cm4gc3Vic3RyaW5nKGxlbmd0aCgpIC0gbGVuLCBsZW4pOyB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBNYXRjaGVkQ2hhcmFjdGVyUHJlZGljYXRlPgorICAgIFN0cmluZ1ZpZXcgc3RyaXBMZWFk
aW5nQW5kVHJhaWxpbmdNYXRjaGVkQ2hhcmFjdGVycyhNYXRjaGVkQ2hhcmFjdGVyUHJlZGljYXRl
JiYpOworCiAgICAgY2xhc3MgU3BsaXRSZXN1bHQ7CiAgICAgU3BsaXRSZXN1bHQgc3BsaXQoVUNo
YXIpIGNvbnN0OwogCkBAIC0xNTcsNiArMTYwLDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGluaXRp
YWxpemUoY29uc3QgTENoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOwogICAgIHZvaWQgaW5pdGlhbGl6
ZShjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBNYXRjaGVkQ2hhcmFjdGVyUHJlZGljYXRlPgorICAg
IFN0cmluZ1ZpZXcgc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdNYXRjaGVkQ2hhcmFjdGVycyhjb25z
dCBDaGFyYWN0ZXJUeXBlKiwgTWF0Y2hlZENoYXJhY3RlclByZWRpY2F0ZSYmKTsKKwogI2lmIENI
RUNLX1NUUklOR1ZJRVdfTElGRVRJTUUKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgYm9vbCB1
bmRlcmx5aW5nU3RyaW5nSXNWYWxpZCgpIGNvbnN0OwogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQ
SSB2b2lkIHNldFVuZGVybHlpbmdTdHJpbmcoY29uc3QgU3RyaW5nSW1wbCopOwpAQCAtOTM1LDYg
Kzk0MSw0MCBAQCBpbmxpbmUgYm9vbCBTdHJpbmdWaWV3OjpTcGxpdFJlc3VsdDo6SXRlCiAgICAg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlLCB0eXBlbmFtZSBNYXRjaGVkQ2hhcmFjdGVyUHJlZGljYXRlPgoraW5saW5lIFN0cmlu
Z1ZpZXcgU3RyaW5nVmlldzo6c3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdNYXRjaGVkQ2hhcmFjdGVy
cyhjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCBNYXRjaGVkQ2hhcmFjdGVyUHJlZGlj
YXRlJiYgcHJlZGljYXRlKQoreworICAgIGlmICghbV9sZW5ndGgpCisgICAgICAgIHJldHVybiAq
dGhpczsKKworICAgIHVuc2lnbmVkIHN0YXJ0ID0gMDsKKyAgICB1bnNpZ25lZCBlbmQgPSBtX2xl
bmd0aCAtIDE7CisgICAgCisgICAgd2hpbGUgKHN0YXJ0IDw9IGVuZCAmJiBwcmVkaWNhdGUoY2hh
cmFjdGVyc1tzdGFydF0pKQorICAgICAgICArK3N0YXJ0OworICAgIAorICAgIGlmIChzdGFydCA+
IGVuZCkKKyAgICAgICAgcmV0dXJuIFN0cmluZ1ZpZXc6OmVtcHR5KCk7CisKKyAgICB3aGlsZSAo
ZW5kICYmIHByZWRpY2F0ZShjaGFyYWN0ZXJzW2VuZF0pKQorICAgICAgICAtLWVuZDsKKworICAg
IGlmICghc3RhcnQgJiYgZW5kID09IG1fbGVuZ3RoIC0gMSkKKyAgICAgICAgcmV0dXJuICp0aGlz
OworCisgICAgU3RyaW5nVmlldyByZXN1bHQoY2hhcmFjdGVycyArIHN0YXJ0LCBlbmQgKyAxIC0g
c3RhcnQpOworICAgIHJlc3VsdC5zZXRVbmRlcmx5aW5nU3RyaW5nKCp0aGlzKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBNYXRjaGVkQ2hhcmFjdGVyUHJlZGlj
YXRlPgorU3RyaW5nVmlldyBTdHJpbmdWaWV3OjpzdHJpcExlYWRpbmdBbmRUcmFpbGluZ01hdGNo
ZWRDaGFyYWN0ZXJzKE1hdGNoZWRDaGFyYWN0ZXJQcmVkaWNhdGUmJiBwcmVkaWNhdGUpCit7Cisg
ICAgaWYgKGlzOEJpdCgpKQorICAgICAgICByZXR1cm4gc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdN
YXRjaGVkQ2hhcmFjdGVyczxMQ2hhcj4oY2hhcmFjdGVyczgoKSwgV1RGTW92ZShwcmVkaWNhdGUp
KTsKKyAgICByZXR1cm4gc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdNYXRjaGVkQ2hhcmFjdGVyczxV
Q2hhcj4oY2hhcmFjdGVyczE2KCksIFdURk1vdmUocHJlZGljYXRlKSk7Cit9CisKIHRlbXBsYXRl
PHVuc2lnbmVkIGxlbmd0aD4gaW5saW5lIGJvb2wgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2UoU3RyaW5nVmlldyBzdHJpbmcsIGNvbnN0IGNoYXIgKCZsb3dlcmNhc2VMZXR0ZXJzKVtsZW5n
dGhdKQogewogICAgIHJldHVybiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZUNvbW1vbihz
dHJpbmcsIGxvd2VyY2FzZUxldHRlcnMpOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjIwOTU3KQorKysgVG9vbHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTctMDgtMjAgIFNhbSBXZWlu
aWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBTdHJpbmdWaWV3IGNvdWxkIHVzZSBhIGZ1
bmN0aW9uIHRvIHN0cmlwIGxlYWRpbmcvdHJhaWxpbmcgY2hhcmFjdGVycyB3aXRob3V0IGFsbG9j
YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
NTc1NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nVmlldy5jcHA6CisgICAgICAgIEFkZCB0ZXN0
cyBmb3IgU3RyaW5nVmlldzo6c3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdNYXRjaGVkQ2hhcmFjdGVy
cygpLgorCiAyMDE3LTA4LTE5ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29t
PgogCiAgICAgICAgIFtpT1MgV0syXSBBZGQgYSB2ZXJzaW9uIG9mIERhdGFJbnRlcmFjdGlvblRl
c3RzLkV4dGVybmFsU291cmNlQXR0cmlidXRlZFN0cmluZ1RvQ29udGVudEVkaXRhYmxlIHRoYXQg
ZG9lc24ndCBoaXQgYSBkZWJ1ZyBhc3NlcnRpb24KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL1N0cmluZ1ZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL1N0cmluZ1ZpZXcuY3BwCShyZXZpc2lvbiAyMjA5NTcpCisrKyBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTI1LDQgKzkyNSwyNiBAQCBURVNUKFdURiwgU3RyaW5nVmlld1JldmVyc2VGaW5kQmFzaWMpCiAg
ICAgRVhQRUNUX0VRKHJlZmVyZW5jZS5yZXZlcnNlRmluZCgnYycsIDQpLCBub3RGb3VuZCk7CiB9
CiAKK1RFU1QoV1RGLCBTdHJpbmdWaWV3U3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdNYXRjaGVkQ2hh
cmFjdGVycykKK3sKKyAgICBhdXRvIGlzQSA9IFtdIChVQ2hhciBjKSB7IAorICAgICAgICByZXR1
cm4gYyA9PSAnQSc7CisgICAgfTsKKworICAgIEVYUEVDVF9UUlVFKHN0cmluZ1ZpZXdGcm9tTGl0
ZXJhbCgiQUFBQkJCQUFBIikuc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdNYXRjaGVkQ2hhcmFjdGVy
cyhpc0EpID09IHN0cmluZ1ZpZXdGcm9tTGl0ZXJhbCgiQkJCIikpOworICAgIEVYUEVDVF9UUlVF
KHN0cmluZ1ZpZXdGcm9tTGl0ZXJhbCgiQUFBQkJCQ0NDIikuc3RyaXBMZWFkaW5nQW5kVHJhaWxp
bmdNYXRjaGVkQ2hhcmFjdGVycyhpc0EpID09IHN0cmluZ1ZpZXdGcm9tTGl0ZXJhbCgiQkJCQ0ND
IikpOworICAgIEVYUEVDVF9UUlVFKHN0cmluZ1ZpZXdGcm9tTGl0ZXJhbCgiQ0NDQkJCQUFBIiku
c3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdNYXRjaGVkQ2hhcmFjdGVycyhpc0EpID09IHN0cmluZ1Zp
ZXdGcm9tTGl0ZXJhbCgiQ0NDQkJCIikpOworICAgIEVYUEVDVF9UUlVFKHN0cmluZ1ZpZXdGcm9t
TGl0ZXJhbCgiQ0NDQkJCQ0NDIikuc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdNYXRjaGVkQ2hhcmFj
dGVycyhpc0EpID09IHN0cmluZ1ZpZXdGcm9tTGl0ZXJhbCgiQ0NDQkJCQ0NDIikpOworICAgIEVY
UEVDVF9UUlVFKHN0cmluZ1ZpZXdGcm9tTGl0ZXJhbCgiQUFBQUFBQ0NDIikuc3RyaXBMZWFkaW5n
QW5kVHJhaWxpbmdNYXRjaGVkQ2hhcmFjdGVycyhpc0EpID09IHN0cmluZ1ZpZXdGcm9tTGl0ZXJh
bCgiQ0NDIikpOworICAgIEVYUEVDVF9UUlVFKHN0cmluZ1ZpZXdGcm9tTGl0ZXJhbCgiQkJCQUFB
QUFBIikuc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdNYXRjaGVkQ2hhcmFjdGVycyhpc0EpID09IHN0
cmluZ1ZpZXdGcm9tTGl0ZXJhbCgiQkJCIikpOworICAgIEVYUEVDVF9UUlVFKHN0cmluZ1ZpZXdG
cm9tTGl0ZXJhbCgiQ0NDQUFBQkJCIikuc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdNYXRjaGVkQ2hh
cmFjdGVycyhpc0EpID09IHN0cmluZ1ZpZXdGcm9tTGl0ZXJhbCgiQ0NDQUFBQkJCIikpOworICAg
IEVYUEVDVF9UUlVFKHN0cmluZ1ZpZXdGcm9tTGl0ZXJhbCgiQUFBQUFBQUFBIikuc3RyaXBMZWFk
aW5nQW5kVHJhaWxpbmdNYXRjaGVkQ2hhcmFjdGVycyhpc0EpID09IFN0cmluZ1ZpZXc6OmVtcHR5
KCkpOworCisgICAgU3RyaW5nVmlldyBlbXB0eVZpZXcgPSBTdHJpbmdWaWV3OjplbXB0eSgpOwor
ICAgIEVYUEVDVF9UUlVFKGVtcHR5Vmlldy5zdHJpcExlYWRpbmdBbmRUcmFpbGluZ01hdGNoZWRD
aGFyYWN0ZXJzKGlzQSkgPT0gZW1wdHlWaWV3KTsKKworICAgIFN0cmluZ1ZpZXcgbnVsbFZpZXc7
CisgICAgRVhQRUNUX1RSVUUobnVsbFZpZXcuc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdNYXRjaGVk
Q2hhcmFjdGVycyhpc0EpID09IG51bGxWaWV3KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgVGVzdFdl
YktpdEFQSQo=
</data>
<flag name="review"
          id="338975"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>