<?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>74028</bug_id>
          
          <creation_ts>2011-12-07 15:06:10 -0800</creation_ts>
          <short_desc>It&apos;s semantically incorrect to call notifyNodeListsAttributeChanged in dispatchSubtreeModifiedEvent</short_desc>
          <delta_ts>2011-12-08 21:27:02 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>70810</blocked>
    
    <blocked>73969</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>ap</cc>
    
    <cc>arko</cc>
    
    <cc>arv</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>ojan</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>516942</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-07 15:06:10 -0800</bug_when>
    <thetext>Right now we call dispatchSubtreeModifiedEvent in order to invalidate name node list. But this is semantically incorrect. We shouldn&apos;t invalidating this cache as a side effect of dispatching DOMSubtreeModified event.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516969</commentid>
    <comment_count>1</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-07 16:12:15 -0800</bug_when>
    <thetext>I&apos;m hitting some obscure JS assertion failure/crash in this refactoring when I run DRT on LayoutTests/fast/dom/Attr/child-nodes-cache.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516971</commentid>
    <comment_count>2</comment_count>
      <attachid>118287</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-07 16:13:01 -0800</bug_when>
    <thetext>Created attachment 118287
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516996</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-07 16:48:37 -0800</bug_when>
    <thetext>    class DynamicNodeList : public NodeList {
    public:
        struct Caches : RefCounted&lt;Caches&gt; {
            static PassRefPtr&lt;Caches&gt; create();
            void reset();

            unsigned cachedLength;
            Node* lastItem; // of course, it&apos;s always a raw pointer that troubles us.
            unsigned lastItemOffset;
            bool isLengthCacheValid : 1;
            bool isItemCacheValid : 1;
        protected:
            Caches();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517006</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-07 17:13:29 -0800</bug_when>
    <thetext>It turns out that I can&apos;t even make them RefPtr due to the way node&apos;s life-cycle is managed :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517058</commentid>
    <comment_count>5</comment_count>
      <attachid>118299</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-07 18:06:49 -0800</bug_when>
    <thetext>Created attachment 118299
cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517081</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-07 18:27:53 -0800</bug_when>
    <thetext>An obvious follow up patch would be make invalidateNodeListsCacheAfterAttributeChanges take bit flags or a qualified name so that we only invalidate node lists that are affected. e.g. when adding/removing class names, we don&apos;t have to invalidate label node list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517461</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-08 09:10:38 -0800</bug_when>
    <thetext>Ping reviewers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517868</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-08 15:59:35 -0800</bug_when>
    <thetext>Could someone review this patch? My other work to improve the performance, etc... is blocked on this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517991</commentid>
    <comment_count>9</comment_count>
      <attachid>118299</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-08 17:53:13 -0800</bug_when>
    <thetext>Comment on attachment 118299
cleanup

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

What’s the story on test coverage?

&gt; Source/WebCore/dom/ContainerNode.cpp:846
&gt; -        document()-&gt;nodeChildrenChanged(this);
&gt; +        document()-&gt;updateRangesAfterNodeChanges(this);

It seems awkward to call changes to the children of a node “node changes”. The terminology here is getting less precise in a way that I think makes things more confusing.

&gt; Source/WebCore/dom/ContainerNode.cpp:848
&gt;      if (treeScope()-&gt;hasNodeListCaches())
&gt; -        notifyNodeListsChildrenChanged();
&gt; +        invalidateNodeListsCacheAfterNodeChanges();

Why does this need to be called in some cases where updateRangesAfterNodeChanges is not called?

&gt; Source/WebCore/dom/Node.cpp:1041
&gt; +        if (node-&gt;isAttributeNode())
&gt; +            data-&gt;nodeLists()-&gt;invalidateCaches();
&gt; +        else
&gt; +            data-&gt;nodeLists()-&gt;invalidateCachesThatDependOnAttributes();

I think this needs a why comment. It’s quite confusing even if it’s backwards.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517997</commentid>
    <comment_count>10</comment_count>
      <attachid>118299</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-08 18:02:00 -0800</bug_when>
    <thetext>Comment on attachment 118299
cleanup

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

&gt;&gt; Source/WebCore/dom/ContainerNode.cpp:846
&gt;&gt; +        document()-&gt;updateRangesAfterNodeChanges(this);
&gt; 
&gt; It seems awkward to call changes to the children of a node “node changes”. The terminology here is getting less precise in a way that I think makes things more confusing.

Will change to updateRangesAfterChildrenChanged then.

&gt;&gt; Source/WebCore/dom/ContainerNode.cpp:848
&gt;&gt; +        invalidateNodeListsCacheAfterNodeChanges();
&gt; 
&gt; Why does this need to be called in some cases where updateRangesAfterNodeChanges is not called?

That&apos;s actually a good point. Will test &amp; make a change if appropriate.

&gt;&gt; Source/WebCore/dom/Node.cpp:1041
&gt;&gt; +            data-&gt;nodeLists()-&gt;invalidateCachesThatDependOnAttributes();
&gt; 
&gt; I think this needs a why comment. It’s quite confusing even if it’s backwards.

Okay will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517998</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-08 18:03:55 -0800</bug_when>
    <thetext>Thanks for the review!

(In reply to comment #9)
&gt; (From update of attachment 118299 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=118299&amp;action=review
&gt; 
&gt; What’s the story on test coverage?

There are quite few tests in LayoutTests/fast/dom. e.g. LayoutTests/fast/dom/Attr/child-nodes-cache.html Also, a lot of tests use childNodes, getElementById, etc... so this code is probably sufficiently exercised.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518027</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-08 18:52:42 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 118299 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=118299&amp;action=review
&gt;
&gt; &gt;&gt; Source/WebCore/dom/ContainerNode.cpp:848
&gt; &gt;&gt; +        invalidateNodeListsCacheAfterNodeChanges();
&gt; &gt; 
&gt; &gt; Why does this need to be called in some cases where updateRangesAfterNodeChanges is not called?
&gt; 
&gt; That&apos;s actually a good point. Will test &amp; make a change if appropriate.

Turns out this is tested by fast/dom/NodeList/invalidate-node-lists-when-parsing.html

Now I wonder what makes Range special so that we don&apos;t have to update upon changes made by the parser...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518100</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-08 21:27:02 -0800</bug_when>
    <thetext>Committed r102431: &lt;http://trac.webkit.org/changeset/102431&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118287</attachid>
            <date>2011-12-07 16:13:01 -0800</date>
            <delta_ts>2011-12-07 18:06:42 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>wip74028</filename>
            <type>text/plain</type>
            <size>8534</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAxMDIyMTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzM3LDcgKzczNyw3IEBACiAg
ICAgdm9pZCBhdHRhY2hSYW5nZShSYW5nZSopOwogICAgIHZvaWQgZGV0YWNoUmFuZ2UoUmFuZ2Uq
KTsKIAotICAgIHZvaWQgbm9kZUNoaWxkcmVuQ2hhbmdlZChDb250YWluZXJOb2RlKik7CisgICAg
dm9pZCB1cGRhdGVSYW5nZXNBZnRlck5vZGVDaGFuZ2VzKENvbnRhaW5lck5vZGUqKTsKICAgICAv
LyBub2RlQ2hpbGRyZW5XaWxsQmVSZW1vdmVkIGlzIHVzZWQgd2hlbiByZW1vdmluZyBhbGwgbm9k
ZSBjaGlsZHJlbiBhdCBvbmNlLgogICAgIHZvaWQgbm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZChD
b250YWluZXJOb2RlKik7CiAgICAgLy8gbm9kZVdpbGxCZVJlbW92ZWQgaXMgb25seSBzYWZlIHdo
ZW4gcmVtb3Zpbmcgb25lIG5vZGUgYXQgYSB0aW1lLgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCShyZXZpc2lv
biAxMDIyMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MTcsMTMgKzUxNywxMCBAQAogICAgIHZvaWQgc2hvd1RyZWVGb3JUaGlzQWNyb3NzRnJhbWUo
KSBjb25zdDsKICNlbmRpZgogCi0gICAgdm9pZCByZW1vdmVOb2RlTGlzdENhY2hlSWZQb3NzaWJs
ZSgpOwogICAgIHZvaWQgcmVnaXN0ZXJEeW5hbWljTm9kZUxpc3QoRHluYW1pY05vZGVMaXN0Kik7
CiAgICAgdm9pZCB1bnJlZ2lzdGVyRHluYW1pY05vZGVMaXN0KER5bmFtaWNOb2RlTGlzdCopOwot
ICAgIHZvaWQgbm90aWZ5Tm9kZUxpc3RzQ2hpbGRyZW5DaGFuZ2VkKCk7Ci0gICAgdm9pZCBub3Rp
ZnlMb2NhbE5vZGVMaXN0c0NoaWxkcmVuQ2hhbmdlZCgpOwotICAgIHZvaWQgbm90aWZ5Tm9kZUxp
c3RzQXR0cmlidXRlQ2hhbmdlZCgpOwotICAgIHZvaWQgbm90aWZ5TG9jYWxOb2RlTGlzdHNBdHRy
aWJ1dGVDaGFuZ2VkKCk7CisgICAgdm9pZCBpbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRlckF0
dHJpYnV0ZUNoYW5nZXMoKTsKKyAgICB2b2lkIGludmFsaWRhdGVOb2RlTGlzdHNDYWNoZUFmdGVy
Tm9kZUNoYW5nZXMoKTsKICAgICB2b2lkIG5vdGlmeUxvY2FsTm9kZUxpc3RzTGFiZWxDaGFuZ2Vk
KCk7CiAgICAgdm9pZCByZW1vdmVDYWNoZWRDbGFzc05vZGVMaXN0KENsYXNzTm9kZUxpc3QqLCBj
b25zdCBTdHJpbmcmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAko
cmV2aXNpb24gMTAyMjE5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjgsNiArMjI4LDcgQEAKICAgICB9IGVsc2UgaWYgKGF0dHJp
YnV0ZU1hcCgpKQogICAgICAgICBhdHRyaWJ1dGVNYXAoKS0+Y2xlYXJDbGFzcygpOwogICAgIHNl
dE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICBpbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRlckF0
dHJpYnV0ZUNoYW5nZXMoKTsKICAgICBkaXNwYXRjaFN1YnRyZWVNb2RpZmllZEV2ZW50KCk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMTAyMjE5KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM5Myw3ICsz
MzkzLDcgQEAKICAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnQ6Om5vZGVDaGlsZHJlbkNoYW5nZWQo
Q29udGFpbmVyTm9kZSogY29udGFpbmVyKQordm9pZCBEb2N1bWVudDo6dXBkYXRlUmFuZ2VzQWZ0
ZXJOb2RlQ2hhbmdlcyhDb250YWluZXJOb2RlKiBjb250YWluZXIpCiB7CiAgICAgaWYgKCFkaXNh
YmxlUmFuZ2VNdXRhdGlvbihwYWdlKCkpICYmICFtX3Jhbmdlcy5pc0VtcHR5KCkpIHsKICAgICAg
ICAgSGFzaFNldDxSYW5nZSo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jhbmdlcy5lbmQoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuY3BwCShyZXZpc2lvbiAxMDIyMTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjU1LDYgKzI1NSw3IEBACiAgICAgICAgIG1fZWxlbWVudC0+YXR0cmlidXRlQ2hhbmdlZChhdHRy
aWJ1dGUuZ2V0KCkpOwogICAgICAgICAvLyBCZWNhdXNlIG9mIG91ciB1cGRhdGVTdHlsZUF0dHJp
YnV0ZSgpIHN0eWxlIG1vZGlmaWNhdGlvbiBldmVudHMgYXJlIG5ldmVyIHNlbnQgYXQgdGhlIHJp
Z2h0IHRpbWUsIHNvIGRvbid0IGJvdGhlciBzZW5kaW5nIHRoZW0uCiAgICAgICAgIGlmIChhdHRy
aWJ1dGUtPm5hbWUoKSAhPSBzdHlsZUF0dHIpIHsKKyAgICAgICAgICAgIG1fZWxlbWVudC0+aW52
YWxpZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0ZXJBdHRyaWJ1dGVDaGFuZ2VzKCk7CiAgICAgICAgICAg
ICBtX2VsZW1lbnQtPmRpc3BhdGNoQXR0ckFkZGl0aW9uRXZlbnQoYXR0cmlidXRlLmdldCgpKTsK
ICAgICAgICAgICAgIG1fZWxlbWVudC0+ZGlzcGF0Y2hTdWJ0cmVlTW9kaWZpZWRFdmVudCgpOwog
ICAgICAgICB9CkBAIC0yOTEsNiArMjkyLDcgQEAKICAgICAgICAgYXR0ci0+bV92YWx1ZSA9IHZh
bHVlOwogICAgIH0KICAgICBpZiAobV9lbGVtZW50KSB7CisgICAgICAgIG1fZWxlbWVudC0+aW52
YWxpZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0ZXJBdHRyaWJ1dGVDaGFuZ2VzKCk7CiAgICAgICAgIG1f
ZWxlbWVudC0+ZGlzcGF0Y2hBdHRyUmVtb3ZhbEV2ZW50KGF0dHIuZ2V0KCkpOwogICAgICAgICBt
X2VsZW1lbnQtPmRpc3BhdGNoU3VidHJlZU1vZGlmaWVkRXZlbnQoKTsKICAgICB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCShyZXZpc2lvbiAxMDIyMTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0Myw5
ICs4NDMsMTEgQEAKIHsKICAgICBOb2RlOjpjaGlsZHJlbkNoYW5nZWQoY2hhbmdlZEJ5UGFyc2Vy
LCBiZWZvcmVDaGFuZ2UsIGFmdGVyQ2hhbmdlLCBjaGlsZENvdW50RGVsdGEpOwogICAgIGlmICgh
Y2hhbmdlZEJ5UGFyc2VyICYmIGNoaWxkQ291bnREZWx0YSkKLSAgICAgICAgZG9jdW1lbnQoKS0+
bm9kZUNoaWxkcmVuQ2hhbmdlZCh0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS0+dXBkYXRlUmFu
Z2VzQWZ0ZXJOb2RlQ2hhbmdlcyh0aGlzKTsKICAgICBpZiAodHJlZVNjb3BlKCktPmhhc05vZGVM
aXN0Q2FjaGVzKCkpCi0gICAgICAgIG5vdGlmeU5vZGVMaXN0c0NoaWxkcmVuQ2hhbmdlZCgpOwor
ICAgICAgICBpbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRlck5vZGVDaGFuZ2VzKCk7CisgICAg
aWYgKGlzQXR0cmlidXRlTm9kZSgpKQorICAgICAgICBpbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVB
ZnRlckF0dHJpYnV0ZUNoYW5nZXMoKTsKIH0KIAogdm9pZCBDb250YWluZXJOb2RlOjpjbG9uZUNo
aWxkTm9kZXMoQ29udGFpbmVyTm9kZSAqY2xvbmUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZVJhcmVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJl
RGF0YS5oCShyZXZpc2lvbiAxMDIyMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVE
YXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw2ICsxMjYsNyBAQAogICAgIHZvaWQgY2xlYXJO
b2RlTGlzdHMoKSB7IG1fbm9kZUxpc3RzLmNsZWFyKCk7IH0KICAgICB2b2lkIHNldE5vZGVMaXN0
cyhQYXNzT3duUHRyPE5vZGVMaXN0c05vZGVEYXRhPiBsaXN0cykgeyBtX25vZGVMaXN0cyA9IGxp
c3RzOyB9CiAgICAgTm9kZUxpc3RzTm9kZURhdGEqIG5vZGVMaXN0cygpIGNvbnN0IHsgcmV0dXJu
IG1fbm9kZUxpc3RzLmdldCgpOyB9CisKICAgICBOb2RlTGlzdHNOb2RlRGF0YSogZW5zdXJlTm9k
ZUxpc3RzKE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBpZiAoIW1fbm9kZUxpc3RzKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMTAyMjE5KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OTYsNiArOTk2LDE0IEBACiAgICAgcmV0dXJu
IGNvdW50OwogfQogCitzdGF0aWMgdm9pZCByZW1vdmVOb2RlTGlzdENhY2hlSWZQb3NzaWJsZShO
b2RlKiBub2RlLCBOb2RlUmFyZURhdGEqIGRhdGEpCit7CisgICAgaWYgKCFkYXRhLT5ub2RlTGlz
dHMoKS0+aXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgZGF0YS0+Y2xlYXJOb2RlTGlz
dHMoKTsKKyAgICBub2RlLT50cmVlU2NvcGUoKS0+cmVtb3ZlTm9kZUxpc3RDYWNoZSgpOworfQor
CiB2b2lkIE5vZGU6OnJlZ2lzdGVyRHluYW1pY05vZGVMaXN0KER5bmFtaWNOb2RlTGlzdCogbGlz
dCkKIHsKICAgICBOb2RlUmFyZURhdGEqIGRhdGEgPSBlbnN1cmVSYXJlRGF0YSgpOwpAQCAtMTAx
NCw2NiArMTAyMiw0NyBAQAogICAgIGlmIChsaXN0LT5oYXNPd25DYWNoZXMoKSkgewogICAgICAg
ICBOb2RlUmFyZURhdGEqIGRhdGEgPSByYXJlRGF0YSgpOwogICAgICAgICBkYXRhLT5ub2RlTGlz
dHMoKS0+bV9saXN0c1dpdGhDYWNoZXMucmVtb3ZlKGxpc3QpOwotICAgICAgICByZW1vdmVOb2Rl
TGlzdENhY2hlSWZQb3NzaWJsZSgpOworICAgICAgICByZW1vdmVOb2RlTGlzdENhY2hlSWZQb3Nz
aWJsZSh0aGlzLCBkYXRhKTsKICAgICB9CiB9CiAKLWlubGluZSB2b2lkIE5vZGU6Om5vdGlmeUxv
Y2FsTm9kZUxpc3RzQXR0cmlidXRlQ2hhbmdlZCgpCit2b2lkIE5vZGU6OmludmFsaWRhdGVOb2Rl
TGlzdHNDYWNoZUFmdGVyQXR0cmlidXRlQ2hhbmdlcygpCiB7Ci0gICAgaWYgKCFoYXNSYXJlRGF0
YSgpKQotICAgICAgICByZXR1cm47Ci0gICAgTm9kZVJhcmVEYXRhKiBkYXRhID0gcmFyZURhdGEo
KTsKLSAgICBpZiAoIWRhdGEtPm5vZGVMaXN0cygpKQotICAgICAgICByZXR1cm47CisgICAgZm9y
IChOb2RlKiBub2RlID0gdGhpczsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewor
ICAgICAgICBpZiAoIW5vZGUtPmhhc1JhcmVEYXRhKCkpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgTm9kZVJhcmVEYXRhKiBkYXRhID0gbm9kZS0+cmFyZURhdGEoKTsKKyAgICAgICAg
aWYgKCFkYXRhLT5ub2RlTGlzdHMoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgaWYg
KCFpc0F0dHJpYnV0ZU5vZGUoKSkKLSAgICAgICAgZGF0YS0+bm9kZUxpc3RzKCktPmludmFsaWRh
dGVDYWNoZXNUaGF0RGVwZW5kT25BdHRyaWJ1dGVzKCk7Ci0gICAgZWxzZQotICAgICAgICBkYXRh
LT5ub2RlTGlzdHMoKS0+aW52YWxpZGF0ZUNhY2hlcygpOworICAgICAgICBpZiAobm9kZS0+aXNB
dHRyaWJ1dGVOb2RlKCkpCisgICAgICAgICAgICBkYXRhLT5ub2RlTGlzdHMoKS0+aW52YWxpZGF0
ZUNhY2hlcygpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkYXRhLT5ub2RlTGlzdHMoKS0+
aW52YWxpZGF0ZUNhY2hlc1RoYXREZXBlbmRPbkF0dHJpYnV0ZXMoKTsKIAotICAgIHJlbW92ZU5v
ZGVMaXN0Q2FjaGVJZlBvc3NpYmxlKCk7CisgICAgICAgIHJlbW92ZU5vZGVMaXN0Q2FjaGVJZlBv
c3NpYmxlKG5vZGUsIGRhdGEpOworICAgIH0KIH0KIAotdm9pZCBOb2RlOjpub3RpZnlOb2RlTGlz
dHNBdHRyaWJ1dGVDaGFuZ2VkKCkKK3ZvaWQgTm9kZTo6aW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hl
QWZ0ZXJOb2RlQ2hhbmdlcygpCiB7Ci0gICAgZm9yIChOb2RlICpuID0gdGhpczsgbjsgbiA9IG4t
PnBhcmVudE5vZGUoKSkKLSAgICAgICAgbi0+bm90aWZ5TG9jYWxOb2RlTGlzdHNBdHRyaWJ1dGVD
aGFuZ2VkKCk7Ci19CisgICAgZm9yIChOb2RlKiBub2RlID0gdGhpczsgbm9kZTsgbm9kZSA9IG5v
ZGUtPnBhcmVudE5vZGUoKSkgeworICAgICAgICBpZiAoIW5vZGUtPmhhc1JhcmVEYXRhKCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgTm9kZVJhcmVEYXRhKiBkYXRhID0gbm9kZS0+
cmFyZURhdGEoKTsKKyAgICAgICAgaWYgKCFkYXRhLT5ub2RlTGlzdHMoKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOwogCi1pbmxpbmUgdm9pZCBOb2RlOjpub3RpZnlMb2NhbE5vZGVMaXN0c0NoaWxk
cmVuQ2hhbmdlZCgpCi17Ci0gICAgaWYgKCFoYXNSYXJlRGF0YSgpKQotICAgICAgICByZXR1cm47
Ci0gICAgTm9kZVJhcmVEYXRhKiBkYXRhID0gcmFyZURhdGEoKTsKLSAgICBpZiAoIWRhdGEtPm5v
ZGVMaXN0cygpKQotICAgICAgICByZXR1cm47CisgICAgICAgIGRhdGEtPm5vZGVMaXN0cygpLT5p
bnZhbGlkYXRlQ2FjaGVzKCk7CiAKLSAgICBkYXRhLT5ub2RlTGlzdHMoKS0+aW52YWxpZGF0ZUNh
Y2hlcygpOworICAgICAgICBOb2RlTGlzdHNOb2RlRGF0YTo6Tm9kZUxpc3RTZXQ6Oml0ZXJhdG9y
IGVuZCA9IGRhdGEtPm5vZGVMaXN0cygpLT5tX2xpc3RzV2l0aENhY2hlcy5lbmQoKTsKKyAgICAg
ICAgZm9yIChOb2RlTGlzdHNOb2RlRGF0YTo6Tm9kZUxpc3RTZXQ6Oml0ZXJhdG9yIGl0ID0gZGF0
YS0+bm9kZUxpc3RzKCktPm1fbGlzdHNXaXRoQ2FjaGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKKyAgICAgICAgICAgICgqaXQpLT5pbnZhbGlkYXRlQ2FjaGUoKTsKIAotICAgIE5vZGVMaXN0
c05vZGVEYXRhOjpOb2RlTGlzdFNldDo6aXRlcmF0b3IgZW5kID0gZGF0YS0+bm9kZUxpc3RzKCkt
Pm1fbGlzdHNXaXRoQ2FjaGVzLmVuZCgpOwotICAgIGZvciAoTm9kZUxpc3RzTm9kZURhdGE6Ok5v
ZGVMaXN0U2V0OjppdGVyYXRvciBpID0gZGF0YS0+bm9kZUxpc3RzKCktPm1fbGlzdHNXaXRoQ2Fj
aGVzLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpCi0gICAgICAgICgqaSktPmludmFsaWRhdGVDYWNo
ZSgpOwotCi0gICAgcmVtb3ZlTm9kZUxpc3RDYWNoZUlmUG9zc2libGUoKTsKKyAgICAgICAgcmVt
b3ZlTm9kZUxpc3RDYWNoZUlmUG9zc2libGUobm9kZSwgZGF0YSk7CisgICAgfQogfQotICAgIAot
dm9pZCBOb2RlOjpyZW1vdmVOb2RlTGlzdENhY2hlSWZQb3NzaWJsZSgpCi17Ci0gICAgQVNTRVJU
KHJhcmVEYXRhKCktPm5vZGVMaXN0cygpKTsKIAotICAgIE5vZGVSYXJlRGF0YSogZGF0YSA9IHJh
cmVEYXRhKCk7Ci0gICAgaWYgKCFkYXRhLT5ub2RlTGlzdHMoKS0+aXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm47Ci0gICAgZGF0YS0+Y2xlYXJOb2RlTGlzdHMoKTsKLSAgICB0cmVlU2NvcGUoKS0+
cmVtb3ZlTm9kZUxpc3RDYWNoZSgpOwotfQotCi12b2lkIE5vZGU6Om5vdGlmeU5vZGVMaXN0c0No
aWxkcmVuQ2hhbmdlZCgpCi17Ci0gICAgZm9yIChOb2RlKiBuID0gdGhpczsgbjsgbiA9IG4tPnBh
cmVudE5vZGUoKSkKLSAgICAgICAgbi0+bm90aWZ5TG9jYWxOb2RlTGlzdHNDaGlsZHJlbkNoYW5n
ZWQoKTsKLX0KLQogdm9pZCBOb2RlOjpub3RpZnlMb2NhbE5vZGVMaXN0c0xhYmVsQ2hhbmdlZCgp
CiB7CiAgICAgaWYgKCFoYXNSYXJlRGF0YSgpKQpAQCAtMjgzMyw4ICsyODIyLDYgQEAKICAgICAK
ICAgICBkb2N1bWVudCgpLT5pbmNET01UcmVlVmVyc2lvbigpOwogCi0gICAgbm90aWZ5Tm9kZUxp
c3RzQXR0cmlidXRlQ2hhbmdlZCgpOyAvLyBGSVhNRTogQ2FuIGRvIGJldHRlciBzb21lIGRheS4g
UmVhbGx5IG9ubHkgY2FyZSBhYm91dCB0aGUgbmFtZSBhdHRyaWJ1dGUgY2hhbmdpbmcuCi0gICAg
CiAgICAgaWYgKCFkb2N1bWVudCgpLT5oYXNMaXN0ZW5lclR5cGUoRG9jdW1lbnQ6OkRPTVNVQlRS
RUVNT0RJRklFRF9MSVNURU5FUikpCiAgICAgICAgIHJldHVybjsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118299</attachid>
            <date>2011-12-07 18:06:49 -0800</date>
            <delta_ts>2011-12-08 18:02:00 -0800</delta_ts>
            <desc>cleanup</desc>
            <filename>bug-74028-20111207180648.patch</filename>
            <type>text/plain</type>
            <size>11225</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjI5MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDExLTEyLTA3ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEl0J3Mgc2VtYW50aWNhbGx5IGlu
Y29ycmVjdCB0byBjYWxsIG5vdGlmeU5vZGVMaXN0c0F0dHJpYnV0ZUNoYW5nZWQgaW4gZGlzcGF0
Y2hTdWJ0cmVlTW9kaWZpZWRFdmVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzQwMjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBSZW1vdmUgYSBjYWxsIHRvIG5vdGlmeU5vZGVMaXN0c0F0dHJpYnV0ZUNo
YW5nZWQgaW4gZGlzcGF0Y2hTdWJ0cmVlTW9kaWZpZWQgYW5kIGFkZCBleHBsaWNpdCBjYWxscwor
ICAgICAgICB0byBub3RpZnlOb2RlTGlzdHNBdHRyaWJ1dGVDaGFuZ2VkIGF0IGFwcHJvcHJpYXRl
IHBsYWNlcy4KKworICAgICAgICBBbHNvIG1lcmdlIG5vdGlmeU5vZGVMaXN0c0NoaWxkcmVuQ2hh
bmdlZCB3aXRoIG5vdGlmeUxvY2FsTm9kZUxpc3RzQ2hpbGRyZW5DaGFuZ2VkLCBhbmQKKyAgICAg
ICAgbm90aWZ5Tm9kZUxpc3RzQXR0cmlidXRlQ2hhbmdlZCB3aXRoIG5vdGlmeUxvY2FsTm9kZUxp
c3RzQXR0cmlidXRlQ2hhbmdlZCwgYW5kIHJlbmFtZSB0aGVtIHRvCisgICAgICAgIGludmFsaWRh
dGVOb2RlTGlzdHNDYWNoZUFmdGVyQXR0cmlidXRlQ2hhbmdlcyBhbmQgaW52YWxpZGF0ZU5vZGVM
aXN0c0NhY2hlQWZ0ZXJOb2RlQ2hhbmdlcyByZXNwZWN0aXZlbHkuCisKKyAgICAgICAgKiBkb20v
QXR0ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdHRyOjpjaGlsZHJlbkNoYW5nZWQpOgorICAg
ICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5l
ck5vZGU6OmNoaWxkcmVuQ2hhbmdlZCk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp1cGRhdGVSYW5nZXNBZnRlck5vZGVDaGFuZ2VzKToK
KyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKiBkb20vTmFtZWROb2RlTWFwLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6YWRkQXR0cmlidXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6cmVtb3ZlQXR0cmlidXRlKToKKyAgICAgICAgKiBk
b20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVOb2RlTGlzdENhY2hlSWZQb3Nz
aWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjp1bnJlZ2lzdGVyRHluYW1pY05vZGVMaXN0
KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmludmFsaWRhdGVOb2RlTGlzdHNDYWNoZUFmdGVy
QXR0cmlidXRlQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppbnZhbGlkYXRlTm9k
ZUxpc3RzQ2FjaGVBZnRlck5vZGVDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmRp
c3BhdGNoU3VidHJlZU1vZGlmaWVkRXZlbnQpOgorICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAg
ICAgICogZG9tL05vZGVSYXJlRGF0YS5oOgorICAgICAgICAqIGRvbS9TdHlsZWRFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZEVsZW1lbnQ6OmNsYXNzQXR0cmlidXRlQ2hhbmdl
ZCk6CisKIDIwMTEtMTItMDcgIEZsb3JpbiBNYWxpdGEgIDxmbWFsaXRhQGdvb2dsZS5jb20+CiAK
ICAgICAgICAgPGxpIHZhbHVlPSIwIj4gYmVoYXZlcyBsaWtlIDxsaT4gKHRoZSBzYW1lIGZvciBu
ZWdhdGl2ZSBudW1iZXJzKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0F0dHIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9BdHRyLmNwcAkocmV2aXNpb24gMTAyMjE5KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL0F0dHIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsNiAr
MTcwLDggQEAgdm9pZCBBdHRyOjpjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQgogIAogICAg
IE5vZGU6OmNoaWxkcmVuQ2hhbmdlZChjaGFuZ2VkQnlQYXJzZXIsIGJlZm9yZUNoYW5nZSwgYWZ0
ZXJDaGFuZ2UsIGNoaWxkQ291bnREZWx0YSk7CiAKKyAgICBpbnZhbGlkYXRlTm9kZUxpc3RzQ2Fj
aGVBZnRlckF0dHJpYnV0ZUNoYW5nZXMoKTsKKwogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaW5j
bHVkZSBlbnRpdHkgcmVmZXJlbmNlcyBpbiB0aGUgdmFsdWUKICAgICAKICAgICBTdHJpbmcgdmFs
ID0gIiI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCShyZXZpc2lvbiAx
MDIyMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg0Myw5ICs4NDMsOSBAQCB2b2lkIENvbnRhaW5lck5vZGU6OmNoaWxkcmVuQ2hh
bmdlZChib29sCiB7CiAgICAgTm9kZTo6Y2hpbGRyZW5DaGFuZ2VkKGNoYW5nZWRCeVBhcnNlciwg
YmVmb3JlQ2hhbmdlLCBhZnRlckNoYW5nZSwgY2hpbGRDb3VudERlbHRhKTsKICAgICBpZiAoIWNo
YW5nZWRCeVBhcnNlciAmJiBjaGlsZENvdW50RGVsdGEpCi0gICAgICAgIGRvY3VtZW50KCktPm5v
ZGVDaGlsZHJlbkNoYW5nZWQodGhpcyk7CisgICAgICAgIGRvY3VtZW50KCktPnVwZGF0ZVJhbmdl
c0FmdGVyTm9kZUNoYW5nZXModGhpcyk7CiAgICAgaWYgKHRyZWVTY29wZSgpLT5oYXNOb2RlTGlz
dENhY2hlcygpKQotICAgICAgICBub3RpZnlOb2RlTGlzdHNDaGlsZHJlbkNoYW5nZWQoKTsKKyAg
ICAgICAgaW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0ZXJOb2RlQ2hhbmdlcygpOwogfQogCiB2
b2lkIENvbnRhaW5lck5vZGU6OmNsb25lQ2hpbGROb2RlcyhDb250YWluZXJOb2RlICpjbG9uZSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMTAyMjE5KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM5Myw3ICszMzkz
LDcgQEAgdm9pZCBEb2N1bWVudDo6bW92ZU5vZGVJdGVyYXRvcnNUb05ld0RvYwogICAgIH0KIH0K
IAotdm9pZCBEb2N1bWVudDo6bm9kZUNoaWxkcmVuQ2hhbmdlZChDb250YWluZXJOb2RlKiBjb250
YWluZXIpCit2b2lkIERvY3VtZW50Ojp1cGRhdGVSYW5nZXNBZnRlck5vZGVDaGFuZ2VzKENvbnRh
aW5lck5vZGUqIGNvbnRhaW5lcikKIHsKICAgICBpZiAoIWRpc2FibGVSYW5nZU11dGF0aW9uKHBh
Z2UoKSkgJiYgIW1fcmFuZ2VzLmlzRW1wdHkoKSkgewogICAgICAgICBIYXNoU2V0PFJhbmdlKj46
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmFuZ2VzLmVuZCgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmgJKHJldmlzaW9uIDEwMjIxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC03MzcsNyArNzM3LDcgQEAgcHVibGljOgogICAgIHZvaWQgYXR0
YWNoUmFuZ2UoUmFuZ2UqKTsKICAgICB2b2lkIGRldGFjaFJhbmdlKFJhbmdlKik7CiAKLSAgICB2
b2lkIG5vZGVDaGlsZHJlbkNoYW5nZWQoQ29udGFpbmVyTm9kZSopOworICAgIHZvaWQgdXBkYXRl
UmFuZ2VzQWZ0ZXJOb2RlQ2hhbmdlcyhDb250YWluZXJOb2RlKik7CiAgICAgLy8gbm9kZUNoaWxk
cmVuV2lsbEJlUmVtb3ZlZCBpcyB1c2VkIHdoZW4gcmVtb3ZpbmcgYWxsIG5vZGUgY2hpbGRyZW4g
YXQgb25jZS4KICAgICB2b2lkIG5vZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQoQ29udGFpbmVyTm9k
ZSopOwogICAgIC8vIG5vZGVXaWxsQmVSZW1vdmVkIGlzIG9ubHkgc2FmZSB3aGVuIHJlbW92aW5n
IG9uZSBub2RlIGF0IGEgdGltZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVN
YXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuY3Bw
CShyZXZpc2lvbiAxMDIyMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjU1LDYgKzI1NSw3IEBAIHZvaWQgTmFtZWROb2RlTWFwOjph
ZGRBdHRyaWJ1dGUoUGFzc1JlZlAKICAgICAgICAgbV9lbGVtZW50LT5hdHRyaWJ1dGVDaGFuZ2Vk
KGF0dHJpYnV0ZS5nZXQoKSk7CiAgICAgICAgIC8vIEJlY2F1c2Ugb2Ygb3VyIHVwZGF0ZVN0eWxl
QXR0cmlidXRlKCkgc3R5bGUgbW9kaWZpY2F0aW9uIGV2ZW50cyBhcmUgbmV2ZXIgc2VudCBhdCB0
aGUgcmlnaHQgdGltZSwgc28gZG9uJ3QgYm90aGVyIHNlbmRpbmcgdGhlbS4KICAgICAgICAgaWYg
KGF0dHJpYnV0ZS0+bmFtZSgpICE9IHN0eWxlQXR0cikgeworICAgICAgICAgICAgbV9lbGVtZW50
LT5pbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRlckF0dHJpYnV0ZUNoYW5nZXMoKTsKICAgICAg
ICAgICAgIG1fZWxlbWVudC0+ZGlzcGF0Y2hBdHRyQWRkaXRpb25FdmVudChhdHRyaWJ1dGUuZ2V0
KCkpOwogICAgICAgICAgICAgbV9lbGVtZW50LT5kaXNwYXRjaFN1YnRyZWVNb2RpZmllZEV2ZW50
KCk7CiAgICAgICAgIH0KQEAgLTI5MSw2ICsyOTIsNyBAQCB2b2lkIE5hbWVkTm9kZU1hcDo6cmVt
b3ZlQXR0cmlidXRlKGNvbnN0CiAgICAgICAgIGF0dHItPm1fdmFsdWUgPSB2YWx1ZTsKICAgICB9
CiAgICAgaWYgKG1fZWxlbWVudCkgeworICAgICAgICBtX2VsZW1lbnQtPmludmFsaWRhdGVOb2Rl
TGlzdHNDYWNoZUFmdGVyQXR0cmlidXRlQ2hhbmdlcygpOwogICAgICAgICBtX2VsZW1lbnQtPmRp
c3BhdGNoQXR0clJlbW92YWxFdmVudChhdHRyLmdldCgpKTsKICAgICAgICAgbV9lbGVtZW50LT5k
aXNwYXRjaFN1YnRyZWVNb2RpZmllZEV2ZW50KCk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNw
cAkocmV2aXNpb24gMTAyMjE5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05OTYsNiArOTk2LDE0IEBAIHVuc2lnbmVkIE5vZGU6Om5vZGVJbmRleCgp
IGNvbnN0CiAgICAgcmV0dXJuIGNvdW50OwogfQogCitzdGF0aWMgdm9pZCByZW1vdmVOb2RlTGlz
dENhY2hlSWZQb3NzaWJsZShOb2RlKiBub2RlLCBOb2RlUmFyZURhdGEqIGRhdGEpCit7CisgICAg
aWYgKCFkYXRhLT5ub2RlTGlzdHMoKS0+aXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAg
ZGF0YS0+Y2xlYXJOb2RlTGlzdHMoKTsKKyAgICBub2RlLT50cmVlU2NvcGUoKS0+cmVtb3ZlTm9k
ZUxpc3RDYWNoZSgpOworfQorCiB2b2lkIE5vZGU6OnJlZ2lzdGVyRHluYW1pY05vZGVMaXN0KER5
bmFtaWNOb2RlTGlzdCogbGlzdCkKIHsKICAgICBOb2RlUmFyZURhdGEqIGRhdGEgPSBlbnN1cmVS
YXJlRGF0YSgpOwpAQCAtMTAxNCw2NCArMTAyMiw0NSBAQCB2b2lkIE5vZGU6OnVucmVnaXN0ZXJE
eW5hbWljTm9kZUxpc3QoRHluCiAgICAgaWYgKGxpc3QtPmhhc093bkNhY2hlcygpKSB7CiAgICAg
ICAgIE5vZGVSYXJlRGF0YSogZGF0YSA9IHJhcmVEYXRhKCk7CiAgICAgICAgIGRhdGEtPm5vZGVM
aXN0cygpLT5tX2xpc3RzV2l0aENhY2hlcy5yZW1vdmUobGlzdCk7Ci0gICAgICAgIHJlbW92ZU5v
ZGVMaXN0Q2FjaGVJZlBvc3NpYmxlKCk7CisgICAgICAgIHJlbW92ZU5vZGVMaXN0Q2FjaGVJZlBv
c3NpYmxlKHRoaXMsIGRhdGEpOwogICAgIH0KIH0KIAotaW5saW5lIHZvaWQgTm9kZTo6bm90aWZ5
TG9jYWxOb2RlTGlzdHNBdHRyaWJ1dGVDaGFuZ2VkKCkKK3ZvaWQgTm9kZTo6aW52YWxpZGF0ZU5v
ZGVMaXN0c0NhY2hlQWZ0ZXJBdHRyaWJ1dGVDaGFuZ2VzKCkKIHsKLSAgICBpZiAoIWhhc1JhcmVE
YXRhKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBOb2RlUmFyZURhdGEqIGRhdGEgPSByYXJlRGF0
YSgpOwotICAgIGlmICghZGF0YS0+bm9kZUxpc3RzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmICghaXNBdHRyaWJ1dGVOb2RlKCkpCi0gICAgICAgIGRhdGEtPm5vZGVMaXN0cygpLT5pbnZh
bGlkYXRlQ2FjaGVzVGhhdERlcGVuZE9uQXR0cmlidXRlcygpOwotICAgIGVsc2UKLSAgICAgICAg
ZGF0YS0+bm9kZUxpc3RzKCktPmludmFsaWRhdGVDYWNoZXMoKTsKKyAgICBmb3IgKE5vZGUqIG5v
ZGUgPSB0aGlzOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAgIGlm
ICghbm9kZS0+aGFzUmFyZURhdGEoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBO
b2RlUmFyZURhdGEqIGRhdGEgPSBub2RlLT5yYXJlRGF0YSgpOworICAgICAgICBpZiAoIWRhdGEt
Pm5vZGVMaXN0cygpKQorICAgICAgICAgICAgY29udGludWU7CiAKLSAgICByZW1vdmVOb2RlTGlz
dENhY2hlSWZQb3NzaWJsZSgpOwotfQorICAgICAgICBpZiAobm9kZS0+aXNBdHRyaWJ1dGVOb2Rl
KCkpCisgICAgICAgICAgICBkYXRhLT5ub2RlTGlzdHMoKS0+aW52YWxpZGF0ZUNhY2hlcygpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBkYXRhLT5ub2RlTGlzdHMoKS0+aW52YWxpZGF0ZUNh
Y2hlc1RoYXREZXBlbmRPbkF0dHJpYnV0ZXMoKTsKIAotdm9pZCBOb2RlOjpub3RpZnlOb2RlTGlz
dHNBdHRyaWJ1dGVDaGFuZ2VkKCkKLXsKLSAgICBmb3IgKE5vZGUgKm4gPSB0aGlzOyBuOyBuID0g
bi0+cGFyZW50Tm9kZSgpKQotICAgICAgICBuLT5ub3RpZnlMb2NhbE5vZGVMaXN0c0F0dHJpYnV0
ZUNoYW5nZWQoKTsKKyAgICAgICAgcmVtb3ZlTm9kZUxpc3RDYWNoZUlmUG9zc2libGUobm9kZSwg
ZGF0YSk7CisgICAgfQogfQogCi1pbmxpbmUgdm9pZCBOb2RlOjpub3RpZnlMb2NhbE5vZGVMaXN0
c0NoaWxkcmVuQ2hhbmdlZCgpCit2b2lkIE5vZGU6OmludmFsaWRhdGVOb2RlTGlzdHNDYWNoZUFm
dGVyTm9kZUNoYW5nZXMoKQogewotICAgIGlmICghaGFzUmFyZURhdGEoKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIE5vZGVSYXJlRGF0YSogZGF0YSA9IHJhcmVEYXRhKCk7Ci0gICAgaWYgKCFkYXRh
LT5ub2RlTGlzdHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZGF0YS0+bm9kZUxpc3RzKCkt
PmludmFsaWRhdGVDYWNoZXMoKTsKLQotICAgIE5vZGVMaXN0c05vZGVEYXRhOjpOb2RlTGlzdFNl
dDo6aXRlcmF0b3IgZW5kID0gZGF0YS0+bm9kZUxpc3RzKCktPm1fbGlzdHNXaXRoQ2FjaGVzLmVu
ZCgpOwotICAgIGZvciAoTm9kZUxpc3RzTm9kZURhdGE6Ok5vZGVMaXN0U2V0OjppdGVyYXRvciBp
ID0gZGF0YS0+bm9kZUxpc3RzKCktPm1fbGlzdHNXaXRoQ2FjaGVzLmJlZ2luKCk7IGkgIT0gZW5k
OyArK2kpCi0gICAgICAgICgqaSktPmludmFsaWRhdGVDYWNoZSgpOworICAgIGZvciAoTm9kZSog
bm9kZSA9IHRoaXM7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAg
aWYgKCFub2RlLT5oYXNSYXJlRGF0YSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IE5vZGVSYXJlRGF0YSogZGF0YSA9IG5vZGUtPnJhcmVEYXRhKCk7CisgICAgICAgIGlmICghZGF0
YS0+bm9kZUxpc3RzKCkpCisgICAgICAgICAgICBjb250aW51ZTsKIAotICAgIHJlbW92ZU5vZGVM
aXN0Q2FjaGVJZlBvc3NpYmxlKCk7Ci19Ci0gICAgCi12b2lkIE5vZGU6OnJlbW92ZU5vZGVMaXN0
Q2FjaGVJZlBvc3NpYmxlKCkKLXsKLSAgICBBU1NFUlQocmFyZURhdGEoKS0+bm9kZUxpc3RzKCkp
OworICAgICAgICBkYXRhLT5ub2RlTGlzdHMoKS0+aW52YWxpZGF0ZUNhY2hlcygpOwogCi0gICAg
Tm9kZVJhcmVEYXRhKiBkYXRhID0gcmFyZURhdGEoKTsKLSAgICBpZiAoIWRhdGEtPm5vZGVMaXN0
cygpLT5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBkYXRhLT5jbGVhck5vZGVMaXN0
cygpOwotICAgIHRyZWVTY29wZSgpLT5yZW1vdmVOb2RlTGlzdENhY2hlKCk7Ci19CisgICAgICAg
IE5vZGVMaXN0c05vZGVEYXRhOjpOb2RlTGlzdFNldDo6aXRlcmF0b3IgZW5kID0gZGF0YS0+bm9k
ZUxpc3RzKCktPm1fbGlzdHNXaXRoQ2FjaGVzLmVuZCgpOworICAgICAgICBmb3IgKE5vZGVMaXN0
c05vZGVEYXRhOjpOb2RlTGlzdFNldDo6aXRlcmF0b3IgaXQgPSBkYXRhLT5ub2RlTGlzdHMoKS0+
bV9saXN0c1dpdGhDYWNoZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAg
KCppdCktPmludmFsaWRhdGVDYWNoZSgpOwogCi12b2lkIE5vZGU6Om5vdGlmeU5vZGVMaXN0c0No
aWxkcmVuQ2hhbmdlZCgpCi17Ci0gICAgZm9yIChOb2RlKiBuID0gdGhpczsgbjsgbiA9IG4tPnBh
cmVudE5vZGUoKSkKLSAgICAgICAgbi0+bm90aWZ5TG9jYWxOb2RlTGlzdHNDaGlsZHJlbkNoYW5n
ZWQoKTsKKyAgICAgICAgcmVtb3ZlTm9kZUxpc3RDYWNoZUlmUG9zc2libGUobm9kZSwgZGF0YSk7
CisgICAgfQogfQogCiB2b2lkIE5vZGU6Om5vdGlmeUxvY2FsTm9kZUxpc3RzTGFiZWxDaGFuZ2Vk
KCkKQEAgLTI4MzMsOCArMjgyMiw2IEBAIHZvaWQgTm9kZTo6ZGlzcGF0Y2hTdWJ0cmVlTW9kaWZp
ZWRFdmVudCgKICAgICAKICAgICBkb2N1bWVudCgpLT5pbmNET01UcmVlVmVyc2lvbigpOwogCi0g
ICAgbm90aWZ5Tm9kZUxpc3RzQXR0cmlidXRlQ2hhbmdlZCgpOyAvLyBGSVhNRTogQ2FuIGRvIGJl
dHRlciBzb21lIGRheS4gUmVhbGx5IG9ubHkgY2FyZSBhYm91dCB0aGUgbmFtZSBhdHRyaWJ1dGUg
Y2hhbmdpbmcuCi0gICAgCiAgICAgaWYgKCFkb2N1bWVudCgpLT5oYXNMaXN0ZW5lclR5cGUoRG9j
dW1lbnQ6OkRPTVNVQlRSRUVNT0RJRklFRF9MSVNURU5FUikpCiAgICAgICAgIHJldHVybjsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5oCShyZXZpc2lvbiAxMDIyMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MTcsMTMgKzUxNywxMCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzaG93VHJlZUZvclRoaXNBY3Jvc3NGcmFtZSgpIGNvbnN0OwogI2VuZGlmCiAKLSAgICB2
b2lkIHJlbW92ZU5vZGVMaXN0Q2FjaGVJZlBvc3NpYmxlKCk7CiAgICAgdm9pZCByZWdpc3RlckR5
bmFtaWNOb2RlTGlzdChEeW5hbWljTm9kZUxpc3QqKTsKICAgICB2b2lkIHVucmVnaXN0ZXJEeW5h
bWljTm9kZUxpc3QoRHluYW1pY05vZGVMaXN0Kik7Ci0gICAgdm9pZCBub3RpZnlOb2RlTGlzdHND
aGlsZHJlbkNoYW5nZWQoKTsKLSAgICB2b2lkIG5vdGlmeUxvY2FsTm9kZUxpc3RzQ2hpbGRyZW5D
aGFuZ2VkKCk7Ci0gICAgdm9pZCBub3RpZnlOb2RlTGlzdHNBdHRyaWJ1dGVDaGFuZ2VkKCk7Ci0g
ICAgdm9pZCBub3RpZnlMb2NhbE5vZGVMaXN0c0F0dHJpYnV0ZUNoYW5nZWQoKTsKKyAgICB2b2lk
IGludmFsaWRhdGVOb2RlTGlzdHNDYWNoZUFmdGVyQXR0cmlidXRlQ2hhbmdlcygpOworICAgIHZv
aWQgaW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0ZXJOb2RlQ2hhbmdlcygpOwogICAgIHZvaWQg
bm90aWZ5TG9jYWxOb2RlTGlzdHNMYWJlbENoYW5nZWQoKTsKICAgICB2b2lkIHJlbW92ZUNhY2hl
ZENsYXNzTm9kZUxpc3QoQ2xhc3NOb2RlTGlzdCosIGNvbnN0IFN0cmluZyYpOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCShyZXZpc2lvbiAxMDIyMTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZVJhcmVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw2ICsxMjYsNyBA
QCBwdWJsaWM6ICAgIAogICAgIHZvaWQgY2xlYXJOb2RlTGlzdHMoKSB7IG1fbm9kZUxpc3RzLmNs
ZWFyKCk7IH0KICAgICB2b2lkIHNldE5vZGVMaXN0cyhQYXNzT3duUHRyPE5vZGVMaXN0c05vZGVE
YXRhPiBsaXN0cykgeyBtX25vZGVMaXN0cyA9IGxpc3RzOyB9CiAgICAgTm9kZUxpc3RzTm9kZURh
dGEqIG5vZGVMaXN0cygpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZUxpc3RzLmdldCgpOyB9CisKICAg
ICBOb2RlTGlzdHNOb2RlRGF0YSogZW5zdXJlTm9kZUxpc3RzKE5vZGUqIG5vZGUpCiAgICAgewog
ICAgICAgICBpZiAoIW1fbm9kZUxpc3RzKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1N0eWxl
ZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVt
ZW50LmNwcAkocmV2aXNpb24gMTAyMjE5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjgsNiArMjI4LDcgQEAgdm9pZCBTdHlsZWRF
bGVtZW50OjpjbGFzc0F0dHJpYnV0ZUNoYW5nZQogICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlTWFw
KCkpCiAgICAgICAgIGF0dHJpYnV0ZU1hcCgpLT5jbGVhckNsYXNzKCk7CiAgICAgc2V0TmVlZHNT
dHlsZVJlY2FsYygpOworICAgIGludmFsaWRhdGVOb2RlTGlzdHNDYWNoZUFmdGVyQXR0cmlidXRl
Q2hhbmdlcygpOwogICAgIGRpc3BhdGNoU3VidHJlZU1vZGlmaWVkRXZlbnQoKTsKIH0KIAo=
</data>
<flag name="review"
          id="117994"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>