<?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>190073</bug_id>
          
          <creation_ts>2018-09-28 01:16:26 -0700</creation_ts>
          <short_desc>Simplify StyledMarkupAccumulator::traverseNodesForSerialization</short_desc>
          <delta_ts>2018-09-28 13:04:37 -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>HTML Editing</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>157443</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>koivisto</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1464344</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-09-28 01:16:26 -0700</bug_when>
    <thetext>We need to simplify the traverse code in StyledMarkupAccumulator::traverseNodesForSerialization.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464345</commentid>
    <comment_count>1</comment_count>
      <attachid>351064</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-09-28 01:18:33 -0700</bug_when>
    <thetext>Created attachment 351064
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464349</commentid>
    <comment_count>2</comment_count>
      <attachid>351066</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-09-28 01:36:35 -0700</bug_when>
    <thetext>Created attachment 351066
Cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464350</commentid>
    <comment_count>3</comment_count>
      <attachid>351066</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-09-28 01:41:26 -0700</bug_when>
    <thetext>Comment on attachment 351066
Cleanup

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

&gt; Source/WebCore/editing/markup.cpp:557
&gt;      for (Node* n = startNode; n != pastEnd; n = next) {

Note I intentionally kept this single letter variable name so that the patch diff looks sane.
I can rename it in a separate patch if someone feels strongly about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464372</commentid>
    <comment_count>4</comment_count>
      <attachid>351066</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-09-28 07:09:32 -0700</bug_when>
    <thetext>Comment on attachment 351066
Cleanup

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

&gt; Source/WebCore/editing/markup.cpp:525
&gt; +    auto enterNode = [&amp;] (Node&amp; node) {

...

&gt; Source/WebCore/editing/markup.cpp:542
&gt; +    auto exitedNode = [&amp;] (Node&amp; node) {

Names enterNode/exitNode or enteredNode/exitedNode would pair better

&gt; Source/WebCore/editing/markup.cpp:556
&gt; +    Node* next;

It is non-obvious that &apos;next&apos; will always get initialized or is not used. Please null it or refactor code so it is otherwise obvious.

&gt; Source/WebCore/editing/markup.cpp:574
&gt; +        Vector&lt;Node*, 8&gt; exitedAncestors;
&gt; +        next = nullptr;
&gt; +        if (auto* firstChild = n-&gt;firstChild())
&gt; +            next = firstChild;
&gt; +        else if (auto* nextSibling = n-&gt;nextSibling())
&gt; +            next = nextSibling;
&gt; +        else {
&gt; +            for (auto* ancestor = n-&gt;parentNode(); ancestor; ancestor = ancestor-&gt;parentNode()) {
&gt; +                exitedAncestors.append(ancestor);
&gt; +                if (auto* nextSibling = ancestor-&gt;nextSibling()) {
&gt; +                    next = nextSibling;
&gt; +                    break;
&gt; +                }
&gt; +            }
&gt; +        }

Wouldn&apos;t any of the existing code we have for basic tree traversal work (NodeTraversal or iterators)?

&gt; Source/WebCore/editing/markup.cpp:594
&gt; +        for (auto* ancestor : exitedAncestors) {
&gt; +            if (depth || next != pastEnd)
&gt; +                exitedNode(*ancestor);
&gt;          }

You should break out of the loop if the test fails.

&gt; Source/WebCore/editing/markup.cpp:600
&gt; +    if (depth) {
&gt; +        for (auto* ancestor = (pastEnd ? pastEnd : lastNode)-&gt;parentNode(); ancestor &amp;&amp; depth; ancestor = ancestor-&gt;parentNode())
&gt; +            exitedNode(*ancestor);
&gt; +    }

if (depth) could be removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464467</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-09-28 12:52:48 -0700</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #4)
&gt; Comment on attachment 351066 [details]
&gt; Cleanup
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=351066&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/editing/markup.cpp:525
&gt; &gt; +    auto enterNode = [&amp;] (Node&amp; node) {
&gt; 
&gt; ...
&gt; 
&gt; &gt; Source/WebCore/editing/markup.cpp:542
&gt; &gt; +    auto exitedNode = [&amp;] (Node&amp; node) {
&gt; 
&gt; Names enterNode/exitNode or enteredNode/exitedNode would pair better

Will use enterNode/exitNode since it&apos;s a bit odd for a function which determines whether to enter a node or not to be called &quot;enteredNode&quot;.

&gt; &gt; Source/WebCore/editing/markup.cpp:556
&gt; &gt; +    Node* next;
&gt; 
&gt; It is non-obvious that &apos;next&apos; will always get initialized or is not used.
&gt; Please null it or refactor code so it is otherwise obvious.

Sure, will initialize.

&gt; &gt; Source/WebCore/editing/markup.cpp:574
&gt; &gt; +        Vector&lt;Node*, 8&gt; exitedAncestors;
&gt; &gt; +        next = nullptr;
&gt; &gt; +        if (auto* firstChild = n-&gt;firstChild())
&gt; &gt; +            next = firstChild;
&gt; &gt; +        else if (auto* nextSibling = n-&gt;nextSibling())
&gt; &gt; +            next = nextSibling;
&gt; &gt; +        else {
&gt; &gt; +            for (auto* ancestor = n-&gt;parentNode(); ancestor; ancestor = ancestor-&gt;parentNode()) {
&gt; &gt; +                exitedAncestors.append(ancestor);
&gt; &gt; +                if (auto* nextSibling = ancestor-&gt;nextSibling()) {
&gt; &gt; +                    next = nextSibling;
&gt; &gt; +                    break;
&gt; &gt; +                }
&gt; &gt; +            }
&gt; &gt; +        }
&gt; 
&gt; Wouldn&apos;t any of the existing code we have for basic tree traversal work
&gt; (NodeTraversal or iterators)?

I don&apos;t think there is any that collect ancestors.

&gt; &gt; Source/WebCore/editing/markup.cpp:594
&gt; &gt; +        for (auto* ancestor : exitedAncestors) {
&gt; &gt; +            if (depth || next != pastEnd)
&gt; &gt; +                exitedNode(*ancestor);
&gt; &gt;          }
&gt; 
&gt; You should break out of the loop if the test fails.

Will do.

&gt; &gt; Source/WebCore/editing/markup.cpp:600
&gt; &gt; +    if (depth) {
&gt; &gt; +        for (auto* ancestor = (pastEnd ? pastEnd : lastNode)-&gt;parentNode(); ancestor &amp;&amp; depth; ancestor = ancestor-&gt;parentNode())
&gt; &gt; +            exitedNode(*ancestor);
&gt; &gt; +    }
&gt; 
&gt; if (depth) could be removed.

Sure. Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464472</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-09-28 13:03:47 -0700</bug_when>
    <thetext>Committed r236609: &lt;https://trac.webkit.org/changeset/236609&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464473</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-09-28 13:04:37 -0700</bug_when>
    <thetext>&lt;rdar://problem/44872428&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351064</attachid>
            <date>2018-09-28 01:18:33 -0700</date>
            <delta_ts>2018-09-28 01:36:34 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>wip190073.patch</filename>
            <type>text/plain</type>
            <size>6329</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHJldmlzaW9uIDIzNjU4MSkKKysrIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTE1LDg4
ICs1MTUsOTYgQEAKICAgICByZXR1cm4gdHJhdmVyc2VOb2Rlc0ZvclNlcmlhbGl6YXRpb24oc3Rh
cnROb2RlLCBwYXN0RW5kLCBFbWl0U3RyaW5nKTsKIH0KIAorZW51bSBjbGFzcyBJdGVyYXRpb25S
ZXN1bHQgeworICAgIFNraXAsCisgICAgTm9ybWFsLAorfTsKKwogTm9kZSogU3R5bGVkTWFya3Vw
QWNjdW11bGF0b3I6OnRyYXZlcnNlTm9kZXNGb3JTZXJpYWxpemF0aW9uKE5vZGUqIHN0YXJ0Tm9k
ZSwgTm9kZSogcGFzdEVuZCwgTm9kZVRyYXZlcnNhbE1vZGUgdHJhdmVyc2FsTW9kZSkKIHsKICAg
ICBjb25zdCBib29sIHNob3VsZEVtaXQgPSB0cmF2ZXJzYWxNb2RlID09IEVtaXRTdHJpbmc7Ci0g
ICAgVmVjdG9yPE5vZGUqPiBhbmNlc3RvcnNUb0Nsb3NlOworCisgICAgbV9pbk1TT0xpc3QgPSBm
YWxzZTsKKworICAgIHVuc2lnbmVkIGRlcHRoID0gMDsKKyAgICBhdXRvIGVudGVyZWROb2RlID0g
WyZdIChOb2RlJiBub2RlKSB7CisgICAgICAgIGlmICghbm9kZS5yZW5kZXJlcigpICYmICFlbmNs
b3NpbmdFbGVtZW50V2l0aFRhZyhmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoJm5vZGUpLCBz
ZWxlY3RUYWcpKQorICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblJlc3VsdDo6U2tpcDsKKwor
ICAgICAgICBpZiAoVU5MSUtFTFkobV9zaG91bGRQcmVzZXJ2ZU1TT0xpc3QpICYmIHNob3VsZEVt
aXQpIHsKKyAgICAgICAgICAgIGlmIChhcHBlbmROb2RlVG9QcmVzZXJ2ZU1TT0xpc3Qobm9kZSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblJlc3VsdDo6U2tpcDsKKyAgICAgICAg
fQorCisgICAgICAgICsrZGVwdGg7CisgICAgICAgIGlmIChzaG91bGRFbWl0KQorICAgICAgICAg
ICAgYXBwZW5kU3RhcnRUYWcobm9kZSk7CisKKyAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblJlc3Vs
dDo6Tm9ybWFsOworICAgIH07CisKKyAgICBOb2RlKiBsYXN0Q2xvc2VkID0gbnVsbHB0cjsKKyAg
ICBhdXRvIGV4aXRlZE5vZGUgPSBbJl0gKE5vZGUmIG5vZGUpIHsKKyAgICAgICAgYm9vbCBjbG9z
aW5nID0gZGVwdGg7CisgICAgICAgIGlmIChkZXB0aCkKKyAgICAgICAgICAgIC0tZGVwdGg7Cisg
ICAgICAgIGlmIChzaG91bGRFbWl0KSB7CisgICAgICAgICAgICBpZiAoY2xvc2luZykKKyAgICAg
ICAgICAgICAgICBhcHBlbmRFbmRUYWcobm9kZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgd3JhcFdpdGhOb2RlKG5vZGUpOworICAgICAgICB9CisgICAgICAgIGxhc3RDbG9z
ZWQgPSAmbm9kZTsKKyAgICB9OworCisgICAgTm9kZSogbGFzdE5vZGUgPSBudWxscHRyOwogICAg
IE5vZGUqIG5leHQ7Ci0gICAgTm9kZSogbGFzdENsb3NlZCA9IG51bGxwdHI7Ci0gICAgbV9pbk1T
T0xpc3QgPSBmYWxzZTsKICAgICBmb3IgKE5vZGUqIG4gPSBzdGFydE5vZGU7IG4gIT0gcGFzdEVu
ZDsgbiA9IG5leHQpIHsKLSAgICAgICAgLy8gQWNjb3JkaW5nIHRvIDxyZGFyOi8vcHJvYmxlbS81
NzMwNjY4PiwgaXQgaXMgcG9zc2libGUgZm9yIG4gdG8gYmxvdwotICAgICAgICAvLyBwYXN0IHBh
c3RFbmQgYW5kIGJlY29tZSBudWxsIGhlcmUuIFRoaXMgc2hvdWxkbid0IGJlIHBvc3NpYmxlLgot
ICAgICAgICAvLyBUaGlzIG51bGwgY2hlY2sgd2lsbCBwcmV2ZW50IGNyYXNoZXMgKGJ1dCBjcmVh
dGUgdG9vIG11Y2ggbWFya3VwKQotICAgICAgICAvLyBhbmQgdGhlIEFTU0VSVCB3aWxsIGhvcGVm
dWxseSBsZWFkIHVzIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHByb2JsZW0uCi0gICAgICAgIEFTU0VS
VChuKTsKLSAgICAgICAgaWYgKCFuKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAg
ICAgICBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbik7Ci0gICAgICAgIGJvb2wgb3BlbmVk
VGFnID0gZmFsc2U7CisgICAgICAgIGxhc3ROb2RlID0gbjsKIAorICAgICAgICBWZWN0b3I8Tm9k
ZSo+IGV4aXRlZEFuY2VzdG9yczsKKyAgICAgICAgbmV4dCA9IG51bGxwdHI7CisgICAgICAgIGlm
IChhdXRvKiBmaXJzdENoaWxkID0gbi0+Zmlyc3RDaGlsZCgpKQorICAgICAgICAgICAgbmV4dCA9
IGZpcnN0Q2hpbGQ7CisgICAgICAgIGVsc2UgaWYgKGF1dG8qIG5leHRTaWJsaW5nID0gbi0+bmV4
dFNpYmxpbmcoKSkKKyAgICAgICAgICAgIG5leHQgPSBuZXh0U2libGluZzsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBmb3IgKGF1dG8qIGFuY2VzdG9yID0gbi0+cGFyZW50Tm9kZSgpOyBh
bmNlc3RvcjsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAgICAg
ICAgICAgZXhpdGVkQW5jZXN0b3JzLmFwcGVuZChhbmNlc3Rvcik7CisgICAgICAgICAgICAgICAg
aWYgKGF1dG8qIG5leHRTaWJsaW5nID0gYW5jZXN0b3ItPm5leHRTaWJsaW5nKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbmV4dCA9IG5leHRTaWJsaW5nOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAg
ICAgICBpZiAoaXNCbG9jayhuKSAmJiBjYW5IYXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKCpuKSAmJiBu
ZXh0ID09IHBhc3RFbmQpIHsKICAgICAgICAgICAgIC8vIERvbid0IHdyaXRlIG91dCBlbXB0eSBi
bG9jayBjb250YWluZXJzIHRoYXQgYXJlbid0IGZ1bGx5IHNlbGVjdGVkLgogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBib29sIHNob3VsZFNraXBOb2RlID0gIW4t
PnJlbmRlcmVyKCkgJiYgIWVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKGZpcnN0UG9zaXRpb25Jbk9y
QmVmb3JlTm9kZShuKSwgc2VsZWN0VGFnKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKG1fc2hvdWxk
UHJlc2VydmVNU09MaXN0KSAmJiBzaG91bGRFbWl0KQotICAgICAgICAgICAgc2hvdWxkU2tpcE5v
ZGUgPSBhcHBlbmROb2RlVG9QcmVzZXJ2ZU1TT0xpc3QoKm4pIHx8IHNob3VsZFNraXBOb2RlOwot
Ci0gICAgICAgIGlmIChzaG91bGRTa2lwTm9kZSkgeworICAgICAgICBhdXRvIHJlc3VsdCA9IGVu
dGVyZWROb2RlKCpuKTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBJdGVyYXRpb25SZXN1bHQ6OlNr
aXApIHsKICAgICAgICAgICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGls
ZHJlbigqbik7CiAgICAgICAgICAgICAvLyBEb24ndCBza2lwIG92ZXIgcGFzdEVuZC4KICAgICAg
ICAgICAgIGlmIChwYXN0RW5kICYmIHBhc3RFbmQtPmlzRGVzY2VuZGFudE9mKCpuKSkKICAgICAg
ICAgICAgICAgICBuZXh0ID0gcGFzdEVuZDsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IC8vIEFkZCB0aGUgbm9kZSB0byB0aGUgbWFya3VwIGlmIHdlJ3JlIG5vdCBza2lwcGluZyB0aGUg
ZGVzY2VuZGFudHMKLSAgICAgICAgICAgIGlmIChzaG91bGRFbWl0KQotICAgICAgICAgICAgICAg
IGFwcGVuZFN0YXJ0VGFnKCpuKTsKLQotICAgICAgICAgICAgLy8gSWYgbm9kZSBoYXMgbm8gY2hp
bGRyZW4sIGNsb3NlIHRoZSB0YWcgbm93LgotICAgICAgICAgICAgaWYgKCFuLT5oYXNDaGlsZE5v
ZGVzKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoc2hvdWxkRW1pdCkKLSAgICAgICAgICAgICAg
ICAgICAgYXBwZW5kRW5kVGFnKCpuKTsKLSAgICAgICAgICAgICAgICBsYXN0Q2xvc2VkID0gbjsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgb3BlbmVkVGFnID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICBhbmNlc3RvcnNUb0Nsb3NlLmFwcGVuZChuKTsKLSAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmICghbi0+aGFzQ2hpbGROb2RlcygpKQorICAgICAgICAgICAgICAg
IGV4aXRlZE5vZGUoKm4pOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gSWYgd2UgZGlkbid0IGlu
c2VydCBvcGVuIHRhZyBhbmQgdGhlcmUncyBubyBtb3JlIHNpYmxpbmdzIG9yIHdlJ3JlIGF0IHRo
ZSBlbmQgb2YgdGhlIHRyYXZlcnNhbCwgdGFrZSBjYXJlIG9mIGFuY2VzdG9ycy4KLSAgICAgICAg
Ly8gRklYTUU6IFdoYXQgaGFwcGVucyBpZiB3ZSBqdXN0IGluc2VydGVkIG9wZW4gdGFnIGFuZCBy
ZWFjaGVkIHRoZSBlbmQ/Ci0gICAgICAgIGlmICghb3BlbmVkVGFnICYmICghbi0+bmV4dFNpYmxp
bmcoKSB8fCBuZXh0ID09IHBhc3RFbmQpKSB7Ci0gICAgICAgICAgICAvLyBDbG9zZSB1cCB0aGUg
YW5jZXN0b3JzLgotICAgICAgICAgICAgd2hpbGUgKCFhbmNlc3RvcnNUb0Nsb3NlLmlzRW1wdHko
KSkgewotICAgICAgICAgICAgICAgIE5vZGUqIGFuY2VzdG9yID0gYW5jZXN0b3JzVG9DbG9zZS5s
YXN0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKG5leHQgIT0gcGFzdEVuZCAmJiBuZXh0LT5pc0Rl
c2NlbmRhbnRPZihhbmNlc3RvcikpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIC8vIE5vdCBhdCB0aGUgZW5kIG9mIHRoZSByYW5nZSwgY2xvc2UgYW5jZXN0b3Jz
IHVwIHRvIHNpYmxpbmcgb2YgbmV4dCBub2RlLgotICAgICAgICAgICAgICAgIGlmIChzaG91bGRF
bWl0KQotICAgICAgICAgICAgICAgICAgICBhcHBlbmRFbmRUYWcoKmFuY2VzdG9yKTsKLSAgICAg
ICAgICAgICAgICBsYXN0Q2xvc2VkID0gYW5jZXN0b3I7Ci0gICAgICAgICAgICAgICAgYW5jZXN0
b3JzVG9DbG9zZS5yZW1vdmVMYXN0KCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8v
IFN1cnJvdW5kIHRoZSBjdXJyZW50bHkgYWNjdW11bGF0ZWQgbWFya3VwIHdpdGggbWFya3VwIGZv
ciBhbmNlc3RvcnMgd2UgbmV2ZXIgb3BlbmVkIGFzIHdlIGxlYXZlIHRoZSBzdWJ0cmVlKHMpIHJv
b3RlZCBhdCB0aG9zZSBhbmNlc3RvcnMuCi0gICAgICAgICAgICBDb250YWluZXJOb2RlKiBuZXh0
UGFyZW50ID0gbmV4dCA/IG5leHQtPnBhcmVudE5vZGUoKSA6IDA7Ci0gICAgICAgICAgICBpZiAo
bmV4dCAhPSBwYXN0RW5kICYmIG4gIT0gbmV4dFBhcmVudCkgewotICAgICAgICAgICAgICAgIE5v
ZGUqIGxhc3RBbmNlc3RvckNsb3NlZE9yU2VsZiA9IG4tPmlzRGVzY2VuZGFudE9mKGxhc3RDbG9z
ZWQpID8gbGFzdENsb3NlZCA6IG47Ci0gICAgICAgICAgICAgICAgZm9yIChDb250YWluZXJOb2Rl
KiBwYXJlbnQgPSBsYXN0QW5jZXN0b3JDbG9zZWRPclNlbGYtPnBhcmVudE5vZGUoKTsgcGFyZW50
ICYmIHBhcmVudCAhPSBuZXh0UGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE5vZGUoKSkg
ewotICAgICAgICAgICAgICAgICAgICAvLyBBbGwgYW5jZXN0b3JzIHRoYXQgYXJlbid0IGluIHRo
ZSBhbmNlc3RvcnNUb0Nsb3NlIGxpc3Qgc2hvdWxkIGVpdGhlciBiZSBhKSB1bnJlbmRlcmVkOgot
ICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcmVudC0+cmVuZGVyZXIoKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAvLyBvciBiKSBhbmNl
c3RvcnMgdGhhdCB3ZSBuZXZlciBlbmNvdW50ZXJlZCBkdXJpbmcgYSBwcmUtb3JkZXIgdHJhdmVy
c2FsIHN0YXJ0aW5nIGF0IHN0YXJ0Tm9kZToKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN0
YXJ0Tm9kZS0+aXNEZXNjZW5kYW50T2YoKnBhcmVudCkpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoc2hvdWxkRW1pdCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBXaXRoTm9kZSgqcGFy
ZW50KTsKLSAgICAgICAgICAgICAgICAgICAgbGFzdENsb3NlZCA9IHBhcmVudDsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAgICAgIGZvciAoYXV0byogYW5jZXN0b3IgOiBl
eGl0ZWRBbmNlc3RvcnMpIHsKKyAgICAgICAgICAgIGlmIChkZXB0aCB8fCBuZXh0ICE9IHBhc3RF
bmQpCisgICAgICAgICAgICAgICAgZXhpdGVkTm9kZSgqYW5jZXN0b3IpOwogICAgICAgICB9CiAg
ICAgfQogCisgICAgaWYgKGRlcHRoKSB7CisgICAgICAgIGZvciAoYXV0byogYW5jZXN0b3IgPSAo
cGFzdEVuZCA/IHBhc3RFbmQgOiBsYXN0Tm9kZSktPnBhcmVudE5vZGUoKTsgYW5jZXN0b3IgJiYg
ZGVwdGg7IGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudE5vZGUoKSkKKyAgICAgICAgICAgIGV4
aXRlZE5vZGUoKmFuY2VzdG9yKTsKKyAgICB9CisKICAgICByZXR1cm4gbGFzdENsb3NlZDsKIH0K
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351066</attachid>
            <date>2018-09-28 01:36:35 -0700</date>
            <delta_ts>2018-09-28 07:09:32 -0700</delta_ts>
            <desc>Cleanup</desc>
            <filename>bug-190073-20180928013634.patch</filename>
            <type>text/plain</type>
            <size>7624</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzNjU5NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDE4LTA5LTI4ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFNpbXBsaWZ5IFN0eWxlZE1hcmt1
cEFjY3VtdWxhdG9yOjp0cmF2ZXJzZU5vZGVzRm9yU2VyaWFsaXphdGlvbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkwMDczCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2ltcGxpZmllZCB0aGUgcmFuZ2Ug
dHJhdmVyc2FsIGFsZ29yaXRobSBpbiB0cmF2ZXJzZU5vZGVzRm9yU2VyaWFsaXphdGlvbiBhcyBp
dCB3YXMgdG9vIGNvbXBsaWNhdGVkCisgICAgICAgIHRvIHN1cHBvcnQgc2hhZG93IERPTSBmb3Ig
Y29weSBhbmQgcGFzdGUuCisKKyAgICAgICAgSW5zdGVhZCBvZiB1c2luZyBOb2RlVHJhdmVyc2Fs
OjpuZXh0IHRvIHRyYXZlcnNlIHBhc3QgYW5jZXN0b3JzIGFuZCB0aGVuIGZpZ3VyaW5nIG91dCB3
aGljaCBhbmNlc3RvcgorICAgICAgICBtdXN0IGJlIGNsb3NlZCBvciB0byB3cmFwIHRoZSBleGlz
dGluZyBtYXJrdXAgd2l0aCwgbmV3IGNvZGUgY29sbGVjdHMgdGhlIGxpc3Qgb2YgYW5jZXN0b3Jz
IGFzIHdlCisgICAgICAgIHRyYXZlcnNlIG91dCBvZiB0aGVtLgorCisgICAgICAgIEFsc28gZXh0
cmFjdGVkIGxhbWJkYXMgZm9yIGdlbmVyYXRpbmcgbWFya3VwIGFuZCBkZWNpZGluZyB3aGV0aGVy
IHRvIHNraXAgYSBub2RlIGFzIHdlbGwgYXMga2VlcGluZworICAgICAgICB0cmFjayBvZiB0aGUg
ZGVwdGggb2YgdGhlIGN1cnJlbnQgbWFya3VwLiBUaGlzIGZ1cnRoZXIgcmVkdWNlcyB0aGUgY29k
ZSBjb21wbGV4aXR5IG9mIHRoZSBhY3R1YWwKKyAgICAgICAgbm9kZSB0cmF2ZXJzYWwgYWxnb3Jp
dGhtLiBLZWVwaW5nIHRyYWNrIG9mIHRoZSBkZXB0aCBhbGxvd3MgdXMgdG8gbm93IGdlbmVyYXRl
IGFuY2VzdG9yIGVsZW1lbnRzJworICAgICAgICBjbG9zaW5nIHRhZ3Mgd2l0aG91dCBrZWVwaW5n
IGEgc3RhY2sgb2YgYW5jZXN0b3Igbm9kZXMgd2Ugb3BlbmVkIGF0IGFsbCB0aW1lcy4KKworICAg
ICAgICAqIGVkaXRpbmcvbWFya3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZE1hcmt1
cEFjY3VtdWxhdG9yOjp0cmF2ZXJzZU5vZGVzRm9yU2VyaWFsaXphdGlvbik6CisKIDIwMTgtMDkt
MjcgIEJhc3VrZSBTdXp1a2kgIDxCYXN1a2UuU3V6dWtpQHNvbnkuY29tPgogCiAgICAgICAgIFtD
dXJsXSBGaXggcHJpb3JpdHkgaXNzdWUgd2l0aCBtdWx0aXBsZSBjb29raWVzIHdpdGggZGlmZmVy
ZW50IGxldmVsIG9mIHBhdGguCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCShyZXZp
c2lvbiAyMzY1OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUxOCw4NSArNTE4LDg3IEBAIE5vZGUqIFN0eWxlZE1hcmt1cEFjY3VtdWxh
dG9yOjpzZXJpYWxpemUKIE5vZGUqIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp0cmF2ZXJzZU5v
ZGVzRm9yU2VyaWFsaXphdGlvbihOb2RlKiBzdGFydE5vZGUsIE5vZGUqIHBhc3RFbmQsIE5vZGVU
cmF2ZXJzYWxNb2RlIHRyYXZlcnNhbE1vZGUpCiB7CiAgICAgY29uc3QgYm9vbCBzaG91bGRFbWl0
ID0gdHJhdmVyc2FsTW9kZSA9PSBOb2RlVHJhdmVyc2FsTW9kZTo6RW1pdFN0cmluZzsKLSAgICBW
ZWN0b3I8Tm9kZSo+IGFuY2VzdG9yc1RvQ2xvc2U7Ci0gICAgTm9kZSogbmV4dDsKLSAgICBOb2Rl
KiBsYXN0Q2xvc2VkID0gbnVsbHB0cjsKKwogICAgIG1faW5NU09MaXN0ID0gZmFsc2U7CisKKyAg
ICB1bnNpZ25lZCBkZXB0aCA9IDA7CisgICAgYXV0byBlbnRlck5vZGUgPSBbJl0gKE5vZGUmIG5v
ZGUpIHsKKyAgICAgICAgaWYgKCFub2RlLnJlbmRlcmVyKCkgJiYgIWVuY2xvc2luZ0VsZW1lbnRX
aXRoVGFnKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZSgmbm9kZSksIHNlbGVjdFRhZykpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKFVOTElLRUxZKG1fc2hvdWxk
UHJlc2VydmVNU09MaXN0KSAmJiBzaG91bGRFbWl0KSB7CisgICAgICAgICAgICBpZiAoYXBwZW5k
Tm9kZVRvUHJlc2VydmVNU09MaXN0KG5vZGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorCisgICAgICAgICsrZGVwdGg7CisgICAgICAgIGlmIChzaG91bGRFbWl0
KQorICAgICAgICAgICAgYXBwZW5kU3RhcnRUYWcobm9kZSk7CisKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfTsKKworICAgIE5vZGUqIGxhc3RDbG9zZWQgPSBudWxscHRyOworICAgIGF1dG8g
ZXhpdGVkTm9kZSA9IFsmXSAoTm9kZSYgbm9kZSkgeworICAgICAgICBib29sIGNsb3NpbmcgPSBk
ZXB0aDsKKyAgICAgICAgaWYgKGRlcHRoKQorICAgICAgICAgICAgLS1kZXB0aDsKKyAgICAgICAg
aWYgKHNob3VsZEVtaXQpIHsKKyAgICAgICAgICAgIGlmIChjbG9zaW5nKQorICAgICAgICAgICAg
ICAgIGFwcGVuZEVuZFRhZyhub2RlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICB3cmFwV2l0aE5vZGUobm9kZSk7CisgICAgICAgIH0KKyAgICAgICAgbGFzdENsb3NlZCA9ICZu
b2RlOworICAgIH07CisKKyAgICBOb2RlKiBsYXN0Tm9kZSA9IG51bGxwdHI7CisgICAgTm9kZSog
bmV4dDsKICAgICBmb3IgKE5vZGUqIG4gPSBzdGFydE5vZGU7IG4gIT0gcGFzdEVuZDsgbiA9IG5l
eHQpIHsKLSAgICAgICAgLy8gQWNjb3JkaW5nIHRvIDxyZGFyOi8vcHJvYmxlbS81NzMwNjY4Piwg
aXQgaXMgcG9zc2libGUgZm9yIG4gdG8gYmxvdwotICAgICAgICAvLyBwYXN0IHBhc3RFbmQgYW5k
IGJlY29tZSBudWxsIGhlcmUuIFRoaXMgc2hvdWxkbid0IGJlIHBvc3NpYmxlLgotICAgICAgICAv
LyBUaGlzIG51bGwgY2hlY2sgd2lsbCBwcmV2ZW50IGNyYXNoZXMgKGJ1dCBjcmVhdGUgdG9vIG11
Y2ggbWFya3VwKQotICAgICAgICAvLyBhbmQgdGhlIEFTU0VSVCB3aWxsIGhvcGVmdWxseSBsZWFk
IHVzIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHByb2JsZW0uCi0gICAgICAgIEFTU0VSVChuKTsKLSAg
ICAgICAgaWYgKCFuKQotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGxhc3ROb2RlID0gbjsK
IAotICAgICAgICBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbik7Ci0gICAgICAgIGJvb2wg
b3BlbmVkVGFnID0gZmFsc2U7CisgICAgICAgIFZlY3RvcjxOb2RlKiwgOD4gZXhpdGVkQW5jZXN0
b3JzOworICAgICAgICBuZXh0ID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKGF1dG8qIGZpcnN0Q2hp
bGQgPSBuLT5maXJzdENoaWxkKCkpCisgICAgICAgICAgICBuZXh0ID0gZmlyc3RDaGlsZDsKKyAg
ICAgICAgZWxzZSBpZiAoYXV0byogbmV4dFNpYmxpbmcgPSBuLT5uZXh0U2libGluZygpKQorICAg
ICAgICAgICAgbmV4dCA9IG5leHRTaWJsaW5nOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IGZvciAoYXV0byogYW5jZXN0b3IgPSBuLT5wYXJlbnROb2RlKCk7IGFuY2VzdG9yOyBhbmNlc3Rv
ciA9IGFuY2VzdG9yLT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICBleGl0ZWRBbmNl
c3RvcnMuYXBwZW5kKGFuY2VzdG9yKTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogbmV4dFNp
YmxpbmcgPSBhbmNlc3Rvci0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICAgICAgICAgICAgICBu
ZXh0ID0gbmV4dFNpYmxpbmc7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCiAgICAgICAgIGlmIChpc0Jsb2Nr
KG4pICYmIGNhbkhhdmVDaGlsZHJlbkZvckVkaXRpbmcoKm4pICYmIG5leHQgPT0gcGFzdEVuZCkg
ewogICAgICAgICAgICAgLy8gRG9uJ3Qgd3JpdGUgb3V0IGVtcHR5IGJsb2NrIGNvbnRhaW5lcnMg
dGhhdCBhcmVuJ3QgZnVsbHkgc2VsZWN0ZWQuCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgfQogCi0gICAgICAgIGJvb2wgc2hvdWxkU2tpcE5vZGUgPSAhbi0+cmVuZGVyZXIoKSAmJiAh
ZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcoZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG4pLCBz
ZWxlY3RUYWcpOwotICAgICAgICBpZiAoVU5MSUtFTFkobV9zaG91bGRQcmVzZXJ2ZU1TT0xpc3Qp
ICYmIHNob3VsZEVtaXQpCi0gICAgICAgICAgICBzaG91bGRTa2lwTm9kZSA9IGFwcGVuZE5vZGVU
b1ByZXNlcnZlTVNPTGlzdCgqbikgfHwgc2hvdWxkU2tpcE5vZGU7Ci0KLSAgICAgICAgaWYgKHNo
b3VsZFNraXBOb2RlKSB7CisgICAgICAgIGlmICghZW50ZXJOb2RlKCpuKSkgewogICAgICAgICAg
ICAgbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKCpuKTsKICAgICAg
ICAgICAgIC8vIERvbid0IHNraXAgb3ZlciBwYXN0RW5kLgogICAgICAgICAgICAgaWYgKHBhc3RF
bmQgJiYgcGFzdEVuZC0+aXNEZXNjZW5kYW50T2YoKm4pKQogICAgICAgICAgICAgICAgIG5leHQg
PSBwYXN0RW5kOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gQWRkIHRoZSBub2Rl
IHRvIHRoZSBtYXJrdXAgaWYgd2UncmUgbm90IHNraXBwaW5nIHRoZSBkZXNjZW5kYW50cwotICAg
ICAgICAgICAgaWYgKHNob3VsZEVtaXQpCi0gICAgICAgICAgICAgICAgYXBwZW5kU3RhcnRUYWco
Km4pOwotCi0gICAgICAgICAgICAvLyBJZiBub2RlIGhhcyBubyBjaGlsZHJlbiwgY2xvc2UgdGhl
IHRhZyBub3cuCi0gICAgICAgICAgICBpZiAoIW4tPmhhc0NoaWxkTm9kZXMoKSkgewotICAgICAg
ICAgICAgICAgIGlmIChzaG91bGRFbWl0KQotICAgICAgICAgICAgICAgICAgICBhcHBlbmRFbmRU
YWcoKm4pOwotICAgICAgICAgICAgICAgIGxhc3RDbG9zZWQgPSBuOwotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICBvcGVuZWRUYWcgPSB0cnVlOwotICAgICAgICAgICAgICAg
IGFuY2VzdG9yc1RvQ2xvc2UuYXBwZW5kKG4pOwotICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKCFuLT5oYXNDaGlsZE5vZGVzKCkpCisgICAgICAgICAgICAgICAgZXhpdGVkTm9kZSgqbik7
CiAgICAgICAgIH0KIAotICAgICAgICAvLyBJZiB3ZSBkaWRuJ3QgaW5zZXJ0IG9wZW4gdGFnIGFu
ZCB0aGVyZSdzIG5vIG1vcmUgc2libGluZ3Mgb3Igd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgdHJh
dmVyc2FsLCB0YWtlIGNhcmUgb2YgYW5jZXN0b3JzLgotICAgICAgICAvLyBGSVhNRTogV2hhdCBo
YXBwZW5zIGlmIHdlIGp1c3QgaW5zZXJ0ZWQgb3BlbiB0YWcgYW5kIHJlYWNoZWQgdGhlIGVuZD8K
LSAgICAgICAgaWYgKCFvcGVuZWRUYWcgJiYgKCFuLT5uZXh0U2libGluZygpIHx8IG5leHQgPT0g
cGFzdEVuZCkpIHsKLSAgICAgICAgICAgIC8vIENsb3NlIHVwIHRoZSBhbmNlc3RvcnMuCi0gICAg
ICAgICAgICB3aGlsZSAoIWFuY2VzdG9yc1RvQ2xvc2UuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAg
ICAgICAgTm9kZSogYW5jZXN0b3IgPSBhbmNlc3RvcnNUb0Nsb3NlLmxhc3QoKTsKLSAgICAgICAg
ICAgICAgICBpZiAobmV4dCAhPSBwYXN0RW5kICYmIG5leHQtPmlzRGVzY2VuZGFudE9mKGFuY2Vz
dG9yKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgLy8gTm90
IGF0IHRoZSBlbmQgb2YgdGhlIHJhbmdlLCBjbG9zZSBhbmNlc3RvcnMgdXAgdG8gc2libGluZyBv
ZiBuZXh0IG5vZGUuCi0gICAgICAgICAgICAgICAgaWYgKHNob3VsZEVtaXQpCi0gICAgICAgICAg
ICAgICAgICAgIGFwcGVuZEVuZFRhZygqYW5jZXN0b3IpOwotICAgICAgICAgICAgICAgIGxhc3RD
bG9zZWQgPSBhbmNlc3RvcjsKLSAgICAgICAgICAgICAgICBhbmNlc3RvcnNUb0Nsb3NlLnJlbW92
ZUxhc3QoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gU3Vycm91bmQgdGhlIGN1
cnJlbnRseSBhY2N1bXVsYXRlZCBtYXJrdXAgd2l0aCBtYXJrdXAgZm9yIGFuY2VzdG9ycyB3ZSBu
ZXZlciBvcGVuZWQgYXMgd2UgbGVhdmUgdGhlIHN1YnRyZWUocykgcm9vdGVkIGF0IHRob3NlIGFu
Y2VzdG9ycy4KLSAgICAgICAgICAgIENvbnRhaW5lck5vZGUqIG5leHRQYXJlbnQgPSBuZXh0ID8g
bmV4dC0+cGFyZW50Tm9kZSgpIDogMDsKLSAgICAgICAgICAgIGlmIChuZXh0ICE9IHBhc3RFbmQg
JiYgbiAhPSBuZXh0UGFyZW50KSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogbGFzdEFuY2VzdG9y
Q2xvc2VkT3JTZWxmID0gbi0+aXNEZXNjZW5kYW50T2YobGFzdENsb3NlZCkgPyBsYXN0Q2xvc2Vk
IDogbjsKLSAgICAgICAgICAgICAgICBmb3IgKENvbnRhaW5lck5vZGUqIHBhcmVudCA9IGxhc3RB
bmNlc3RvckNsb3NlZE9yU2VsZi0+cGFyZW50Tm9kZSgpOyBwYXJlbnQgJiYgcGFyZW50ICE9IG5l
eHRQYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIEFsbCBhbmNlc3RvcnMgdGhhdCBhcmVuJ3QgaW4gdGhlIGFuY2VzdG9yc1RvQ2xv
c2UgbGlzdCBzaG91bGQgZWl0aGVyIGJlIGEpIHVucmVuZGVyZWQ6Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICghcGFyZW50LT5yZW5kZXJlcigpKQotICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgICAgIC8vIG9yIGIpIGFuY2VzdG9ycyB0aGF0IHdlIG5l
dmVyIGVuY291bnRlcmVkIGR1cmluZyBhIHByZS1vcmRlciB0cmF2ZXJzYWwgc3RhcnRpbmcgYXQg
c3RhcnROb2RlOgotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3RhcnROb2RlLT5pc0Rlc2Nl
bmRhbnRPZigqcGFyZW50KSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRFbWl0KQot
ICAgICAgICAgICAgICAgICAgICAgICAgd3JhcFdpdGhOb2RlKCpwYXJlbnQpOwotICAgICAgICAg
ICAgICAgICAgICBsYXN0Q2xvc2VkID0gcGFyZW50OwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KKyAgICAgICAgZm9yIChhdXRvKiBhbmNlc3RvciA6IGV4aXRlZEFuY2VzdG9ycykg
eworICAgICAgICAgICAgaWYgKGRlcHRoIHx8IG5leHQgIT0gcGFzdEVuZCkKKyAgICAgICAgICAg
ICAgICBleGl0ZWROb2RlKCphbmNlc3Rvcik7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBpZiAo
ZGVwdGgpIHsKKyAgICAgICAgZm9yIChhdXRvKiBhbmNlc3RvciA9IChwYXN0RW5kID8gcGFzdEVu
ZCA6IGxhc3ROb2RlKS0+cGFyZW50Tm9kZSgpOyBhbmNlc3RvciAmJiBkZXB0aDsgYW5jZXN0b3Ig
PSBhbmNlc3Rvci0+cGFyZW50Tm9kZSgpKQorICAgICAgICAgICAgZXhpdGVkTm9kZSgqYW5jZXN0
b3IpOworICAgIH0KKwogICAgIHJldHVybiBsYXN0Q2xvc2VkOwogfQogCg==
</data>
<flag name="review"
          id="368427"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>