<?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>208286</bug_id>
          
          <creation_ts>2020-02-27 00:01:54 -0800</creation_ts>
          <short_desc>TextManipulationController should not generate a new item for content in manipulated paragraphs</short_desc>
          <delta_ts>2020-02-27 19:37:24 -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>WebKit API</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>llivonbemel</cc>
    
    <cc>mifenton</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1623382</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-02-27 00:01:54 -0800</bug_when>
    <thetext>TextManipulationController should ignore any renderer creation that happens within previously manipulated paragraphs.

&lt;rdar://problem/58105815&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623386</commentid>
    <comment_count>1</comment_count>
      <attachid>391839</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-02-27 00:18:51 -0800</bug_when>
    <thetext>Created attachment 391839
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623467</commentid>
    <comment_count>2</comment_count>
      <attachid>391839</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-02-27 07:40:54 -0800</bug_when>
    <thetext>Comment on attachment 391839
Patch

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        Added an early exist to observeParagraphs when the observed content has an element that has already been manipulated

&quot;early exist” =&gt; &quot;early exit&quot;

&gt; Source/WebCore/ChangeLog:16
&gt; +        forever so that we can track any element that has already been manipulated. Als renamed m_mutatedElements

“Als” =&gt; “Also&quot;

&gt; Source/WebCore/editing/TextManipulationController.cpp:117
&gt; +    if (!m_manipulatedElements.capacity())

Can we just check isEmpty() here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623522</commentid>
    <comment_count>3</comment_count>
      <attachid>391839</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-02-27 09:14:28 -0800</bug_when>
    <thetext>Comment on attachment 391839
Patch

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

&gt;&gt; Source/WebCore/editing/TextManipulationController.cpp:117
&gt;&gt; +    if (!m_manipulatedElements.capacity())
&gt; 
&gt; Can we just check isEmpty() here?

(Sorry, I meant computesEmpty() since it’s a WeakHashSet)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623584</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-02-27 11:27:59 -0800</bug_when>
    <thetext>(In reply to Wenson Hsieh from comment #3)
&gt; Comment on attachment 391839 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=391839&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/editing/TextManipulationController.cpp:117
&gt; &gt;&gt; +    if (!m_manipulatedElements.capacity())
&gt; &gt; 
&gt; &gt; Can we just check isEmpty() here?
&gt; 
&gt; (Sorry, I meant computesEmpty() since it’s a WeakHashSet)

No, we don&apos;t want to do that since computesEmpty() would iterate over all stale WeakPre entries each time it&apos;s called. Since m_manipulatedElements is expected to have a lot of stale elements in it (it basically contains all the elements ever inserted into the document and got a renderer), I don&apos;t think we want to be doing that. This early check exists for the very first observation where we&apos;re going through thousands of paragraphs. We want to skip this check in that particular case. But after that, this hash map will never be empty so we want the check to be fast &amp; fail immediately.

Note that WeakHashMap will eventually clean itself up by removing stale WeakPtr in every rehash, and it won&apos;t retain any elements so it&apos;s not a leak.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623585</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-02-27 11:28:15 -0800</bug_when>
    <thetext>I guess I can add that to the chance log so that people would know what&apos;s up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623588</commentid>
    <comment_count>6</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-02-27 11:44:59 -0800</bug_when>
    <thetext>I see — makes sense!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623855</commentid>
    <comment_count>7</comment_count>
      <attachid>391839</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-02-27 19:23:12 -0800</bug_when>
    <thetext>Comment on attachment 391839
Patch

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

&gt; Source/WebCore/editing/TextManipulationController.cpp:118
&gt; +        return false; // Happens inside startObservingParagraphs.

I&apos;ve rephrased this as &quot;fast path for startObservingParagraphs&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623860</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-02-27 19:37:24 -0800</bug_when>
    <thetext>Committed r257613: &lt;https://trac.webkit.org/changeset/257613&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391839</attachid>
            <date>2020-02-27 00:18:51 -0800</date>
            <delta_ts>2020-02-27 07:40:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-208286-20200227001850.patch</filename>
            <type>text/plain</type>
            <size>10973</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3NTUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWM2ZGFjZjZmZWE3MTU3
YzdhNDkyMGFhMzMxNjMwZDkzNWNiMzYwMS4uYjI4YWFhYzNjOTQ1YmEwMjAwNjg1NzQ5MjcyOWIx
ZDViNTNiNjcyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDIwLTAyLTI3ICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFRleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyIHNob3VsZCBub3QgZ2VuZXJhdGUgYSBuZXcgaXRlbSBmb3IgY29udGVudCBpbiBt
YW5pcHVsYXRlZCBwYXJhZ3JhcGhzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMDgyODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVy
IHRvIGlnbm9yZSBhbnkgY29udGVudCBjaGFuZ2UgaW4gcHJldmlvdXNseSBtYW5pcHVsYXRlZCBw
YXJhZ3JhcGhzLgorCisgICAgICAgIEFkZGVkIGFuIGVhcmx5IGV4aXN0IHRvIG9ic2VydmVQYXJh
Z3JhcGhzIHdoZW4gdGhlIG9ic2VydmVkIGNvbnRlbnQgaGFzIGFuIGVsZW1lbnQgdGhhdCBoYXMg
YWxyZWFkeSBiZWVuIG1hbmlwdWxhdGVkCisgICAgICAgIGFzIGFuIGFuY2VzdG9yLiBOb3RlIHRo
YXQgdGhlIG9ubHkgY2FzZSBpbiB3aGljaCB0aGlzIGxvZ2ljIG1hdHRlcnMgaXMgd2hlbiBpdCdz
IGNhbGxlZCBieSBzY2hlZHVsZU9ic2VydmFydGlvblVwZGF0ZSwKKyAgICAgICAgd2hpY2ggY2Fs
bHMgdGhpcyBmdW5jdGlvbiBvbiBlYWNoIHBhcmFncmFwaCBzZXBhcmF0ZWx5LCB1bmxpa2Ugc3Rh
cnRPYnNlcnZpbmdQYXJhZ3JhcGhzIHdoaWNoIGNhbGxzIGl0IG9uCisgICAgICAgIHRoZSBlbnRp
cmUgZG9jdW1lbnQsIHdlIGNhbiBzaW1wbHkgZXhpdCBlYXJseSBpbnN0ZWFkIG9mIGlnbm9yaW5n
IGp1c3QgdGhlIGN1cnJlbnQgcGFyYWdyYXBoLgorCisgICAgICAgIFJlbmFtZWQgVGV4dE1hbmlw
dWxhdGlvbkNvbnRyb2xsZXIncyBtX3JlY2VudGx5SW5zZXJ0ZWRFbGVtZW50cyB0byBtX21hbmlw
dWxhdGVkRWxlbWVudHMgYW5kIG1hZGUgaXQgcGVyc2lzdAorICAgICAgICBmb3JldmVyIHNvIHRo
YXQgd2UgY2FuIHRyYWNrIGFueSBlbGVtZW50IHRoYXQgaGFzIGFscmVhZHkgYmVlbiBtYW5pcHVs
YXRlZC4gQWxzIHJlbmFtZWQgbV9tdXRhdGVkRWxlbWVudHMKKyAgICAgICAgdG8gbV9lbGVtZW50
c1dpdGhOZXdSZW5kZXJlciBmb3IgY2xhcml0eS4KKworICAgICAgICBUZXN0OiBUZXN0V2ViS2l0
QVBJLlRleHRNYW5pcHVsYXRpb24uSW5zZXJ0aW5nQ29udGVudEludG9BbHJlYWR5TWFuaXB1bGF0
ZWRDb250ZW50RG9lc05vdENyZWF0ZVRleHRNYW5pcHVsYXRpb25JdGVtCisKKyAgICAgICAgKiBl
ZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjppc0luTWFuaXB1bGF0ZWRFbGVtZW50KTogQWRk
ZWQuIEhhcyBhIGZhc3QgcGF0aCBmb3Igd2hlbgorICAgICAgICBtX21hbmlwdWxhdGVkRWxlbWVu
dHMncyBjYXBhY2l0eSBpcyAwLCB3aGljaCBoYXBwZW5zIHdoZW4gb2JzZXJ2ZVBhcmFncmFwaHMg
aXMgY2FsbGVkIGJ5IHN0YXJ0T2JzZXJ2aW5nUGFyYWdyYXBocy4KKyAgICAgICAgKFdlYkNvcmU6
OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpvYnNlcnZlUGFyYWdyYXBocyk6IEFkZGVkIGFu
IGVhcmx5IGV4aXQgd2hlbiB0aGVyZSBpcyBhIGNvbnRlbnQgdGhhdCBoYXMKKyAgICAgICAgYWxy
ZWFkeSBiZWVuIG1hbmlwdWxhdGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXI6OmRpZENyZWF0ZVJlbmRlcmVyRm9yRWxlbWVudCk6IEFkZGVkIHRoZSBzYW1l
IGNoZWNrIHRvIGZhaWwgZWFybHkuCisgICAgICAgIChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9u
Q29udHJvbGxlcjo6c2NoZWR1bGVPYnNlcnZhcnRpb25VcGRhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OnJlcGxhY2UpOiBSZW1vdmVkIHRoZSBjb2Rl
IHRvIGNsZWFyIG1fcmVjZW50bHlJbnNlcnRlZEVsZW1lbnRzLgorICAgICAgICAqIGVkaXRpbmcv
VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaDoKKwogMjAyMC0wMi0yNiAgUnlvc3VrZSBOaXdh
ICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBDcmVhdGUgQXVkaW9EZXN0aW5hdGlvbiBp
biB0aGUgR1BVIHByb2Nlc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAKaW5kZXggMWU3NjBkZTcyMzE2MDlkMDU5Mjk4Mjhm
N2UxM2YzZDIyYmEyNTJmZC4uMWM0MjhmNjI0NTkyYjA3NTE4Zjg1Njc3YmMxOTM4MTBiMjVhMTU4
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9u
Q29udHJvbGxlci5jcHAKQEAgLTExMiw2ICsxMTIsMTcgQEAgVGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXI6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyKERvY3VtZW50JiBkb2N1bWVudCkKIHsK
IH0KIAorYm9vbCBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6aXNJbk1hbmlwdWxhdGVkRWxl
bWVudChFbGVtZW50JiBlbGVtZW50KQoreworICAgIGlmICghbV9tYW5pcHVsYXRlZEVsZW1lbnRz
LmNhcGFjaXR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gSGFwcGVucyBpbnNpZGUgc3Rh
cnRPYnNlcnZpbmdQYXJhZ3JhcGhzLgorICAgIGZvciAoYXV0byYgYW5jZXN0b3JPclNlbGYgOiBs
aW5lYWdlT2ZUeXBlPEVsZW1lbnQ+KGVsZW1lbnQpKSB7CisgICAgICAgIGlmIChtX21hbmlwdWxh
dGVkRWxlbWVudHMuY29udGFpbnMoYW5jZXN0b3JPclNlbGYpKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBUZXh0TWFuaXB1bGF0
aW9uQ29udHJvbGxlcjo6c3RhcnRPYnNlcnZpbmdQYXJhZ3JhcGhzKE1hbmlwdWxhdGlvbkl0ZW1D
YWxsYmFjayYmIGNhbGxiYWNrLCBWZWN0b3I8RXhjbHVzaW9uUnVsZT4mJiBleGNsdXNpb25SdWxl
cykKIHsKICAgICBhdXRvIGRvY3VtZW50ID0gbWFrZVJlZlB0cihtX2RvY3VtZW50LmdldCgpKTsK
QEAgLTE0NCw2ICsxNTUsMTMgQEAgdm9pZCBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6b2Jz
ZXJ2ZVBhcmFncmFwaHMoVmlzaWJsZVBvc2l0aW9uJiBzdGFydCwgVmlzaWIKICAgICAgICAgaWYg
KHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoLmlzTnVsbCgpKQogICAgICAgICAgICAgc3RhcnRPZkN1
cnJlbnRQYXJhZ3JhcGggPSBpdGVyYXRvci5yYW5nZSgpLT5zdGFydFBvc2l0aW9uKCk7CiAKKyAg
ICAgICAgaWYgKGF1dG8qIGN1cnJlbnROb2RlID0gaXRlcmF0b3Iubm9kZSgpKSB7CisgICAgICAg
ICAgICBpZiAoUmVmUHRyPEVsZW1lbnQ+IGN1cnJlbnRFbGVtZW50QW5jZXN0b3IgPSBpczxFbGVt
ZW50PihjdXJyZW50Tm9kZSkgPyBkb3duY2FzdDxFbGVtZW50PihjdXJyZW50Tm9kZSkgOiBjdXJy
ZW50Tm9kZS0+cGFyZW50T3JTaGFkb3dIb3N0RWxlbWVudCgpKSB7CisgICAgICAgICAgICAgICAg
aWYgKGlzSW5NYW5pcHVsYXRlZEVsZW1lbnQoKmN1cnJlbnRFbGVtZW50QW5jZXN0b3IpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm47IC8vIFdlIGNhbiBleGl0IGVhcmx5IGhlcmUgYmVjYXVz
ZSBzY2hlZHVsZU9ic2VydmFydGlvblVwZGF0ZSBjYWxscyB0aGlzIGZ1bmN0aW9uIG9uIGVhY2gg
cGFyYWdyYXBoIHNlcGFyYXRlbHkuCisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAg
ICBzaXplX3QgZW5kT2ZMYXN0TmV3TGluZSA9IDA7CiAgICAgICAgIHNpemVfdCBvZmZzZXRPZk5l
eHROZXdMaW5lID0gMDsKICAgICAgICAgd2hpbGUgKChvZmZzZXRPZk5leHROZXdMaW5lID0gY3Vy
cmVudFRleHQuZmluZCgnXG4nLCBlbmRPZkxhc3ROZXdMaW5lKSkgIT0gbm90Rm91bmQpIHsKQEAg
LTE3OCwxNyArMTk2LDE3IEBAIHZvaWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Om9ic2Vy
dmVQYXJhZ3JhcGhzKFZpc2libGVQb3NpdGlvbiYgc3RhcnQsIFZpc2liCiAKIHZvaWQgVGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXI6OmRpZENyZWF0ZVJlbmRlcmVyRm9yRWxlbWVudChFbGVtZW50
JiBlbGVtZW50KQogewotICAgIGlmIChtX3JlY2VudGx5SW5zZXJ0ZWRFbGVtZW50cy5jb250YWlu
cyhlbGVtZW50KSkKKyAgICBpZiAoaXNJbk1hbmlwdWxhdGVkRWxlbWVudChlbGVtZW50KSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fbXV0YXRlZEVsZW1lbnRzLmNvbXB1dGVzRW1wdHko
KSkKKyAgICBpZiAobV9lbGVtZW50c1dpdGhOZXdSZW5kZXJlci5jb21wdXRlc0VtcHR5KCkpCiAg
ICAgICAgIHNjaGVkdWxlT2JzZXJ2YXJ0aW9uVXBkYXRlKCk7CiAKICAgICBpZiAoaXM8UHNldWRv
RWxlbWVudD4oZWxlbWVudCkpIHsKICAgICAgICAgaWYgKGF1dG8qIGhvc3QgPSBkb3duY2FzdDxQ
c2V1ZG9FbGVtZW50PihlbGVtZW50KS5ob3N0RWxlbWVudCgpKQotICAgICAgICAgICAgbV9tdXRh
dGVkRWxlbWVudHMuYWRkKCpob3N0KTsKKyAgICAgICAgICAgIG1fZWxlbWVudHNXaXRoTmV3UmVu
ZGVyZXIuYWRkKCpob3N0KTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9tdXRhdGVkRWxlbWVudHMu
YWRkKGVsZW1lbnQpOworICAgICAgICBtX2VsZW1lbnRzV2l0aE5ld1JlbmRlcmVyLmFkZChlbGVt
ZW50KTsKIH0KIAogdXNpbmcgUG9zaXRpb25UdXBsZSA9IHN0ZDo6dHVwbGU8UmVmUHRyPE5vZGU+
LCB1bnNpZ25lZCwgdW5zaWduZWQ+OwpAQCAtMjEzLDkgKzIzMSw5IEBAIHZvaWQgVGV4dE1hbmlw
dWxhdGlvbkNvbnRyb2xsZXI6OnNjaGVkdWxlT2JzZXJ2YXJ0aW9uVXBkYXRlKCkKICAgICAgICAg
ICAgIHJldHVybjsKIAogICAgICAgICBIYXNoU2V0PFJlZjxFbGVtZW50Pj4gbXV0YXRlZEVsZW1l
bnRzOwotICAgICAgICBmb3IgKGF1dG8mIHdlYWtFbGVtZW50IDogY29udHJvbGxlci0+bV9tdXRh
dGVkRWxlbWVudHMpCisgICAgICAgIGZvciAoYXV0byYgd2Vha0VsZW1lbnQgOiBjb250cm9sbGVy
LT5tX2VsZW1lbnRzV2l0aE5ld1JlbmRlcmVyKQogICAgICAgICAgICAgbXV0YXRlZEVsZW1lbnRz
LmFkZCh3ZWFrRWxlbWVudCk7Ci0gICAgICAgIGNvbnRyb2xsZXItPm1fbXV0YXRlZEVsZW1lbnRz
LmNsZWFyKCk7CisgICAgICAgIGNvbnRyb2xsZXItPm1fZWxlbWVudHNXaXRoTmV3UmVuZGVyZXIu
Y2xlYXIoKTsKIAogICAgICAgICBIYXNoU2V0PFJlZjxFbGVtZW50Pj4gZmlsdGVyZWRFbGVtZW50
czsKICAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogbXV0YXRlZEVsZW1lbnRzKSB7CkBAIC00
MDIsMTIgKzQyMCw4IEBAIGF1dG8gVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OnJlcGxhY2Uo
Y29uc3QgTWFuaXB1bGF0aW9uSXRlbSYgaXRlbSwgY29uc3QgVmVjCiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIGluc2VydGlvbi5wYXJlbnRJZkRpZmZlcmVudEZyb21Db21tb25BbmNlc3Rvci0+
YXBwZW5kQ2hpbGQoaW5zZXJ0aW9uLmNoaWxkKTsKICAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KGlu
c2VydGlvbi5jaGlsZC5nZXQoKSkpCi0gICAgICAgICAgICBtX3JlY2VudGx5SW5zZXJ0ZWRFbGVt
ZW50cy5hZGQoZG93bmNhc3Q8RWxlbWVudD4oaW5zZXJ0aW9uLmNoaWxkLmdldCgpKSk7CisgICAg
ICAgICAgICBtX21hbmlwdWxhdGVkRWxlbWVudHMuYWRkKGRvd25jYXN0PEVsZW1lbnQ+KGluc2Vy
dGlvbi5jaGlsZC5nZXQoKSkpOwogICAgIH0KLSAgICBtX2RvY3VtZW50LT5ldmVudExvb3AoKS5x
dWV1ZVRhc2soVGFza1NvdXJjZTo6SW50ZXJuYWxBc3luY1Rhc2ssIFt3ZWFrVGhpcyA9IG1ha2VX
ZWFrUHRyKCp0aGlzKV0gewotICAgICAgICBpZiAoYXV0byBzdHJvbmdUaGlzID0gd2Vha1RoaXMu
Z2V0KCkpCi0gICAgICAgICAgICBzdHJvbmdUaGlzLT5tX3JlY2VudGx5SW5zZXJ0ZWRFbGVtZW50
cy5jbGVhcigpOwotICAgIH0pOwogCiAgICAgcmV0dXJuIE1hbmlwdWxhdGlvblJlc3VsdDo6U3Vj
Y2VzczsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxh
dGlvbkNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXIuaAppbmRleCBmZDQ4ZmFmZjBlNTZlODhkMDFiNDU1NDM0MmFhNzBjMTAxZWFh
OGZmLi4zNjRjM2I4ZTZiNjIxYThmODRhYjJmOTczNjFlYzRmYTBhNWRmZTU2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5oCkBA
IC0xMDgsNiArMTA4LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIE1hbmlwdWxhdGlv
blJlc3VsdCBjb21wbGV0ZU1hbmlwdWxhdGlvbihJdGVtSWRlbnRpZmllciwgY29uc3QgVmVjdG9y
PE1hbmlwdWxhdGlvblRva2VuPiYpOwogCiBwcml2YXRlOgorICAgIGJvb2wgaXNJbk1hbmlwdWxh
dGVkRWxlbWVudChFbGVtZW50Jik7CiAgICAgdm9pZCBvYnNlcnZlUGFyYWdyYXBocyhWaXNpYmxl
UG9zaXRpb24mIHN0YXJ0LCBWaXNpYmxlUG9zaXRpb24mIGVuZCk7CiAgICAgdm9pZCBzY2hlZHVs
ZU9ic2VydmFydGlvblVwZGF0ZSgpOwogCkBAIC0xMjEsOCArMTIyLDggQEAgcHJpdmF0ZToKICAg
ICBNYW5pcHVsYXRpb25SZXN1bHQgcmVwbGFjZShjb25zdCBNYW5pcHVsYXRpb25JdGVtJiwgY29u
c3QgVmVjdG9yPE1hbmlwdWxhdGlvblRva2VuPiYpOwogCiAgICAgV2Vha1B0cjxEb2N1bWVudD4g
bV9kb2N1bWVudDsKLSAgICBXZWFrSGFzaFNldDxFbGVtZW50PiBtX211dGF0ZWRFbGVtZW50czsK
LSAgICBXZWFrSGFzaFNldDxFbGVtZW50PiBtX3JlY2VudGx5SW5zZXJ0ZWRFbGVtZW50czsKKyAg
ICBXZWFrSGFzaFNldDxFbGVtZW50PiBtX2VsZW1lbnRzV2l0aE5ld1JlbmRlcmVyOworICAgIFdl
YWtIYXNoU2V0PEVsZW1lbnQ+IG1fbWFuaXB1bGF0ZWRFbGVtZW50czsKICAgICBNYW5pcHVsYXRp
b25JdGVtQ2FsbGJhY2sgbV9jYWxsYmFjazsKICAgICBWZWN0b3I8RXhjbHVzaW9uUnVsZT4gbV9l
eGNsdXNpb25SdWxlczsKICAgICBIYXNoTWFwPEl0ZW1JZGVudGlmaWVyLCBNYW5pcHVsYXRpb25J
dGVtPiBtX2l0ZW1zOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdl
TG9nCmluZGV4IGZmMWU4ODZhNWUyZTZkM2Y0ZTMyNjJkNTQ1NmQ3NTZmODU1NjZjNDAuLjc4YTFi
ZmYwOWQ2MzNkMzQyOTBmYjA3ZWNlM2ZjNjA1NmNmNTkxNzggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0No
YW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAyMC0wMi0y
NyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlciBzaG91bGQgbm90IGdlbmVyYXRlIGEgbmV3IGl0ZW0gZm9yIGNvbnRl
bnQgaW4gbWFuaXB1bGF0ZWQgcGFyYWdyYXBocworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA4Mjg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgYSByZWdyZXNzaW9uIHRlc3QuCisKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVsYXRpb24ubW06Cisg
ICAgICAgIChUZXh0TWFuaXB1bGF0aW9uLkluc2VydGluZ0NvbnRlbnRJbnRvQWxyZWFkeU1hbmlw
dWxhdGVkQ29udGVudERvZXNOb3RDcmVhdGVUZXh0TWFuaXB1bGF0aW9uSXRlbSk6CisKIDIwMjAt
MDItMjYgIFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCwgcm9sbGluZyBvdXQgcjI1NzUyMi4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGV4dE1hbmlwdWxhdGlvbi5tbSBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGV4dE1hbmlwdWxhdGlvbi5tbQppbmRleCBhMWNk
ZmUwZDA0NTkwODUyNWNiMGM0NTM5ZGJkNGJjOTRiYWZiMzFkLi5kZmU0MmQ1NzFiNmI1MzJlNzIw
YWNkMDlkMWE5NmI4MDRlZWRlOTU1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVsYXRpb24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0TWFuaXB1bGF0aW9uLm1tCkBAIC05NDEsNiArOTQx
LDUyIEBAIFRFU1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uRG9l
c05vdENyZWF0ZU1vcmVUZXh0TWFuaXB1bGF0aW9uCiAgICAgRVhQRUNUX1dLX1NUUkVRKCI8cD5i
YXIgPHN0cm9uZz5nYXJwbHk8L3N0cm9uZz4gZm9vPC9wPiIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZh
bHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5LmlubmVySFRNTCJdKTsKIH0KIAorVEVT
VChUZXh0TWFuaXB1bGF0aW9uLCBJbnNlcnRpbmdDb250ZW50SW50b0FscmVhZHlNYW5pcHVsYXRl
ZENvbnRlbnREb2VzTm90Q3JlYXRlVGV4dE1hbmlwdWxhdGlvbkl0ZW0pCit7CisgICAgYXV0byBk
ZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRd
KTsKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDQwMCwgNDAwKV0pOworICAgIFt3ZWJWaWV3IF9z
ZXRUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAgW3dlYlZp
ZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPCFET0NUWVBFIGh0bWw+PGh0bWw+PGJv
ZHk+PHA+PGI+aGV5PC9iPiBkdWRlPC9wPjwvYm9keT48L2h0bWw+Il07CisKKyAgICBhdXRvIGNv
bmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbX1dLVGV4dE1hbmlwdWxhdGlvbkNvbmZpZ3VyYXRpb24g
YWxsb2NdIGluaXRdKTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBfc3RhcnRU
ZXh0TWFuaXB1bGF0aW9uc1dpdGhDb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCkgY29t
cGxldGlvbjpeeworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJmRvbmUpOworCisgICAgYXV0byAqaXRlbXMgPSBbZGVsZWdhdGUgaXRl
bXNdOworICAgIEVYUEVDVF9FUShpdGVtcy5jb3VudCwgMVVMKTsKKworICAgIGF1dG8qIGZpcnN0
SXRlbSA9IGl0ZW1zLmZpcnN0T2JqZWN0OworICAgIEVYUEVDVF9FUShmaXJzdEl0ZW0udG9rZW5z
LmNvdW50LCAyVUwpOworICAgIEVYUEVDVF9TVFJFUSgiaGV5IiwgZmlyc3RJdGVtLnRva2Vuc1sw
XS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9TVFJFUSgiIGR1ZGUiLCBmaXJzdEl0
ZW0udG9rZW5zWzFdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisKKyAgICBfX2Jsb2NrIEJPT0wgZm91
bmROZXdJdGVtQWZ0ZXJDb21wbGV0aW5nVGV4dE1hbmlwdWxhdGlvbiA9IGZhbHNlOworICAgIFtk
ZWxlZ2F0ZSBzZXRJdGVtQ2FsbGJhY2s6XihfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqKSB7Cisg
ICAgICAgIGZvdW5kTmV3SXRlbUFmdGVyQ29tcGxldGluZ1RleHRNYW5pcHVsYXRpb24gPSB0cnVl
OworICAgIH1dOworCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IF9jb21wbGV0ZVRl
eHRNYW5pcHVsYXRpb246KF9XS1RleHRNYW5pcHVsYXRpb25JdGVtICopY3JlYXRlSXRlbShmaXJz
dEl0ZW0uaWRlbnRpZmllciwgeworICAgICAgICB7IGZpcnN0SXRlbS50b2tlbnNbMF0uaWRlbnRp
ZmllciwgQCJoZWxsbywiIH0sCisgICAgICAgIHsgZmlyc3RJdGVtLnRva2Vuc1sxXS5pZGVudGlm
aWVyLCBAIiB3b3JsZCIgfSwKKyAgICB9KS5nZXQoKSBjb21wbGV0aW9uOl4oQk9PTCBzdWNjZXNz
KSB7CisgICAgICAgIEVYUEVDVF9UUlVFKHN1Y2Nlc3MpOworICAgICAgICBkb25lID0gdHJ1ZTsK
KyAgICB9XTsKKworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisgICAgW3dl
YlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInNwYW4gPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdzcGFuJyk7IHNwYW4udGV4dENvbnRlbnQgPSAnIFdlYktpdCEnOyBkb2N1bWVu
dC5xdWVyeVNlbGVjdG9yKCdiJykuYWZ0ZXIoc3Bhbik7Il07CisgICAgW3dlYlZpZXcgd2FpdEZv
ck5leHRQcmVzZW50YXRpb25VcGRhdGVdOworCisgICAgRVhQRUNUX0ZBTFNFKGZvdW5kTmV3SXRl
bUFmdGVyQ29tcGxldGluZ1RleHRNYW5pcHVsYXRpb24pOworICAgIEVYUEVDVF9XS19TVFJFUSgi
PHA+PGI+aGVsbG8sPC9iPjxzcGFuPiBXZWJLaXQhPC9zcGFuPiB3b3JsZDwvcD4iLCBbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5pbm5lckhUTUwi
XSk7Cit9CisKIFRFU1QoVGV4dE1hbmlwdWxhdGlvbiwgVGV4dE1hbmlwdWxhdGlvblRva2VuRGVi
dWdEZXNjcmlwdGlvbikKIHsKICAgICBhdXRvIHRva2VuID0gYWRvcHROUyhbW19XS1RleHRNYW5p
cHVsYXRpb25Ub2tlbiBhbGxvY10gaW5pdF0pOwo=
</data>
<flag name="review"
          id="407359"
          type_id="1"
          status="+"
          setter="wenson_hsieh"
    />
          </attachment>
      

    </bug>

</bugzilla>