<?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>221316</bug_id>
          
          <creation_ts>2021-02-02 21:27:55 -0800</creation_ts>
          <short_desc>Optimize PointerCaptureController::elementWasRemoved()</short_desc>
          <delta_ts>2021-02-03 10:45:18 -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>UI Events</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="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>graouts</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1725009</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-02-02 21:27:55 -0800</bug_when>
    <thetext>Optimize PointerCaptureController::elementWasRemoved()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1725010</commentid>
    <comment_count>1</comment_count>
      <attachid>419102</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-02-02 21:29:17 -0800</bug_when>
    <thetext>Created attachment 419102
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1725021</commentid>
    <comment_count>2</comment_count>
      <attachid>419102</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-02-02 22:02:50 -0800</bug_when>
    <thetext>Comment on attachment 419102
Patch

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

&gt; Source/WebCore/page/PointerCaptureController.cpp:178
&gt; +void PointerCaptureController::updateHaveAnyCapturingElement()

Do we need to eagerly update this or can we compute it lazily?
e.g. use Optional&lt;bool&gt; for m_haveAnyCapturingElement
and then haveAnyCapturingElement() inlined like haveAnyCapturingElement() { return m_haveAnyCapturingElement ? *m_haveAnyCapturingElement : haveAnyCapturingElementSlowCase();  }

&gt; Source/WebCore/page/PointerCaptureController.cpp:180
&gt; +    auto haveAnyCapturingElement = [&amp;] {

Do we really need to use lambda here?
I find that setting m_haveAnyCapturingElement = false and breaking when the condition is hit would be easier to read.
Alternatively, can we just use anyOf in Algorithms.h so that:
m_haveAnyCapturingElement = WTF::anyOf(m_activePointerIdsToCapturingData.values(), [&amp;] { ~ })

&gt; Source/WebCore/page/PointerCaptureController.cpp:183
&gt; +            if (capturingData.pendingTargetOverride || capturingData.targetOverride

Can we add a helper function on CapturingData like CapturingData::hasCapturingElement()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1725196</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-02-03 10:07:48 -0800</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #2)
&gt; Comment on attachment 419102 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=419102&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/PointerCaptureController.cpp:178
&gt; &gt; +void PointerCaptureController::updateHaveAnyCapturingElement()
&gt; 
&gt; Do we need to eagerly update this or can we compute it lazily?
&gt; e.g. use Optional&lt;bool&gt; for m_haveAnyCapturingElement
&gt; and then haveAnyCapturingElement() inlined like haveAnyCapturingElement() {
&gt; return m_haveAnyCapturingElement ? *m_haveAnyCapturingElement :
&gt; haveAnyCapturingElementSlowCase();  }

I think it&apos;s better to do the work eagerly in the functions that start/stop capture, since the no-capture case is massively more common than the capturing case.

&gt; 
&gt; &gt; Source/WebCore/page/PointerCaptureController.cpp:180
&gt; &gt; +    auto haveAnyCapturingElement = [&amp;] {
&gt; 
&gt; Do we really need to use lambda here?
&gt; I find that setting m_haveAnyCapturingElement = false and breaking when the
&gt; condition is hit would be easier to read.
&gt; Alternatively, can we just use anyOf in Algorithms.h so that:
&gt; m_haveAnyCapturingElement =
&gt; WTF::anyOf(m_activePointerIdsToCapturingData.values(), [&amp;] { ~ })

I like the lambda. but I can change it.

&gt; &gt; Source/WebCore/page/PointerCaptureController.cpp:183
&gt; &gt; +            if (capturingData.pendingTargetOverride || capturingData.targetOverride
&gt; 
&gt; Can we add a helper function on CapturingData like
&gt; CapturingData::hasCapturingElement()?

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1725208</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-02-03 10:31:15 -0800</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #3)
&gt; (In reply to Ryosuke Niwa from comment #2)
&gt; &gt; Comment on attachment 419102 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=419102&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/page/PointerCaptureController.cpp:178
&gt; &gt; &gt; +void PointerCaptureController::updateHaveAnyCapturingElement()
&gt; &gt; 
&gt; &gt; Do we need to eagerly update this or can we compute it lazily?
&gt; &gt; e.g. use Optional&lt;bool&gt; for m_haveAnyCapturingElement
&gt; &gt; and then haveAnyCapturingElement() inlined like haveAnyCapturingElement() {
&gt; &gt; return m_haveAnyCapturingElement ? *m_haveAnyCapturingElement :
&gt; &gt; haveAnyCapturingElementSlowCase();  }
&gt; 
&gt; I think it&apos;s better to do the work eagerly in the functions that start/stop
&gt; capture, since the no-capture case is massively more common than the
&gt; capturing case.

Ok.

&gt; &gt; &gt; Source/WebCore/page/PointerCaptureController.cpp:180
&gt; &gt; &gt; +    auto haveAnyCapturingElement = [&amp;] {
&gt; &gt; 
&gt; &gt; Do we really need to use lambda here?
&gt; &gt; I find that setting m_haveAnyCapturingElement = false and breaking when the
&gt; &gt; condition is hit would be easier to read.
&gt; &gt; Alternatively, can we just use anyOf in Algorithms.h so that:
&gt; &gt; m_haveAnyCapturingElement =
&gt; &gt; WTF::anyOf(m_activePointerIdsToCapturingData.values(), [&amp;] { ~ })
&gt; 
&gt; I like the lambda. but I can change it.

Please use anyOf then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1725221</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-02-03 10:44:53 -0800</bug_when>
    <thetext>https://trac.webkit.org/changeset/272331/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1725222</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-02-03 10:45:18 -0800</bug_when>
    <thetext>&lt;rdar://problem/73939380&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>419102</attachid>
            <date>2021-02-02 21:29:17 -0800</date>
            <delta_ts>2021-02-02 23:28:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221316-20210202212916.patch</filename>
            <type>text/plain</type>
            <size>8589</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcyMjE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTRiOWUxYzFjNmEzZmVl
Y2YyNTJlZTJlNWQ5MGJmN2M4MDY0N2U4MC4uNGE4OWU0NGJmYzRiMDUyMWExMDgzNDA4OTMwODI2
MDhjNmJhNDU5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDIxLTAyLTAyICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIE9wdGltaXplIFBv
aW50ZXJDYXB0dXJlQ29udHJvbGxlcjo6ZWxlbWVudFdhc1JlbW92ZWQoKQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxMzE2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BlZWRvbWV0ZXIgcHJvZmlsZXMg
c2hvdyBIYXNoVGFibGUgaXRlcmF0aW9uIGNvZGUgdW5kZXIgUG9pbnRlckNhcHR1cmVDb250cm9s
bGVyOjplbGVtZW50V2FzUmVtb3ZlZCgpCisgICAgICAgIGJlY2F1c2Ugd2UgYWx3YXlzIGFkZCBh
IGhhc2ggZW50cnkgZm9yIHRoZSBtb3VzZSBwb2ludGVyLgorCisgICAgICAgIE9wdGltaXplIGF3
YXkgYnkgc2V0dGluZyBhIGZsYWcgdGhhdCdzIG9ubHkgdHJ1ZSBpZiBhbnkgZWxlbWVudCBpcyBy
ZWZlcmVuY2VkIGJ5IHBvaW50ZXIgY2FwdHVyZS4KKworICAgICAgICAqIHBhZ2UvUG9pbnRlckNh
cHR1cmVDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvaW50ZXJDYXB0dXJlQ29u
dHJvbGxlcjo6cG9pbnRlckNhcHR1cmVFbGVtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlBvaW50ZXJDYXB0dXJlQ29udHJvbGxlcjo6c2V0UG9pbnRlckNhcHR1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6UG9pbnRlckNhcHR1cmVDb250cm9sbGVyOjpyZWxlYXNlUG9pbnRlckNhcHR1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6UG9pbnRlckNhcHR1cmVDb250cm9sbGVyOjpoYXNQb2ludGVy
Q2FwdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpQb2ludGVyQ2FwdHVyZUNvbnRyb2xsZXI6OnBv
aW50ZXJMb2NrV2FzQXBwbGllZCk6CisgICAgICAgIChXZWJDb3JlOjpQb2ludGVyQ2FwdHVyZUNv
bnRyb2xsZXI6OmVsZW1lbnRXYXNSZW1vdmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBvaW50ZXJD
YXB0dXJlQ29udHJvbGxlcjo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UG9pbnRlckNhcHR1
cmVDb250cm9sbGVyOjp1cGRhdGVIYXZlQW55Q2FwdHVyaW5nRWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpQb2ludGVyQ2FwdHVyZUNvbnRyb2xsZXI6OnRvdWNoV2l0aElkZW50aWZpZXJXYXNS
ZW1vdmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBvaW50ZXJDYXB0dXJlQ29udHJvbGxlcjo6aGFz
Q2FuY2VsbGVkUG9pbnRlckV2ZW50Rm9ySWRlbnRpZmllciBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpQb2ludGVyQ2FwdHVyZUNvbnRyb2xsZXI6OnByZXZlbnRzQ29tcGF0aWJpbGl0eU1vdXNl
RXZlbnRzRm9ySWRlbnRpZmllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQb2ludGVyQ2Fw
dHVyZUNvbnRyb2xsZXI6OnBvaW50ZXJDYXB0dXJlRWxlbWVudCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpQb2ludGVyQ2FwdHVyZUNvbnRyb2xsZXI6Omhhc0NhbmNlbGxlZFBvaW50ZXJF
dmVudEZvcklkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UG9pbnRlckNh
cHR1cmVDb250cm9sbGVyOjpwcmV2ZW50c0NvbXBhdGliaWxpdHlNb3VzZUV2ZW50c0ZvcklkZW50
aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBhZ2UvUG9pbnRlckNhcHR1cmVDb250cm9sbGVy
Lmg6CisKIDIwMjEtMDItMDIgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+
CiAKICAgICAgICAgUmVuYW1lIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldE5lZWRzV2lsbFZh
bGlkYXRlQ2hlY2soKSB0byB1cGRhdGVXaWxsVmFsaWRhdGVBbmRWYWxpZGl0eSgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BvaW50ZXJDYXB0dXJlQ29udHJvbGxlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL1BvaW50ZXJDYXB0dXJlQ29udHJvbGxlci5jcHAKaW5kZXggY2Jj
NjdiODVkZTI3ZjY5YjIyY2E4MzViZDNmNjExM2FkYzU4ZDBjYS4uMDI0OGZjYTE1NDkyOWFkOGVj
ZWJmNTYxOWJjM2IxMDc0YWNlNjk3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Q
b2ludGVyQ2FwdHVyZUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUG9p
bnRlckNhcHR1cmVDb250cm9sbGVyLmNwcApAQCAtNDcsNyArNDcsNyBAQCBQb2ludGVyQ2FwdHVy
ZUNvbnRyb2xsZXI6OlBvaW50ZXJDYXB0dXJlQ29udHJvbGxlcihQYWdlJiBwYWdlKQogICAgIHJl
c2V0KCk7CiB9CiAKLUVsZW1lbnQqIFBvaW50ZXJDYXB0dXJlQ29udHJvbGxlcjo6cG9pbnRlckNh
cHR1cmVFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCwgUG9pbnRlcklEIHBvaW50ZXJJZCkKK0Vs
ZW1lbnQqIFBvaW50ZXJDYXB0dXJlQ29udHJvbGxlcjo6cG9pbnRlckNhcHR1cmVFbGVtZW50KERv
Y3VtZW50KiBkb2N1bWVudCwgUG9pbnRlcklEIHBvaW50ZXJJZCkgY29uc3QKIHsKICAgICBhdXRv
IGl0ZXJhdG9yID0gbV9hY3RpdmVQb2ludGVySWRzVG9DYXB0dXJpbmdEYXRhLmZpbmQocG9pbnRl
cklkKTsKICAgICBpZiAoaXRlcmF0b3IgIT0gbV9hY3RpdmVQb2ludGVySWRzVG9DYXB0dXJpbmdE
YXRhLmVuZCgpKSB7CkBAIC04NSw2ICs4NSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFBvaW50ZXJD
YXB0dXJlQ29udHJvbGxlcjo6c2V0UG9pbnRlckNhcHR1cmUoRWxlbWVudCogY2FwdHVyaW5nCiAg
ICAgaWYgKGNhcHR1cmluZ0RhdGEucG9pbnRlcklzUHJlc3NlZCkKICAgICAgICAgY2FwdHVyaW5n
RGF0YS5wZW5kaW5nVGFyZ2V0T3ZlcnJpZGUgPSBjYXB0dXJpbmdUYXJnZXQ7CiAKKyAgICB1cGRh
dGVIYXZlQW55Q2FwdHVyaW5nRWxlbWVudCgpOwogICAgIHJldHVybiB7IH07CiB9CiAKQEAgLTEw
OCw2ICsxMDksNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBQb2ludGVyQ2FwdHVyZUNvbnRyb2xsZXI6
OnJlbGVhc2VQb2ludGVyQ2FwdHVyZShFbGVtZW50KiBjYXB0dQogICAgIC8vIDMuIEZvciB0aGUg
c3BlY2lmaWVkIHBvaW50ZXJJZCwgY2xlYXIgdGhlIHBlbmRpbmcgcG9pbnRlciBjYXB0dXJlIHRh
cmdldCBvdmVycmlkZSwgaWYgc2V0LgogICAgIGl0ZXJhdG9yLT52YWx1ZS5wZW5kaW5nVGFyZ2V0
T3ZlcnJpZGUgPSBudWxscHRyOwogCisgICAgdXBkYXRlSGF2ZUFueUNhcHR1cmluZ0VsZW1lbnQo
KTsKICAgICByZXR1cm4geyB9OwogfQogCkBAIC0xMTksNiArMTIxLDkgQEAgYm9vbCBQb2ludGVy
Q2FwdHVyZUNvbnRyb2xsZXI6Omhhc1BvaW50ZXJDYXB0dXJlKEVsZW1lbnQqIGNhcHR1cmluZ1Rh
cmdldCwgUG9pbnQKICAgICAvLyBJbiBwYXJ0aWN1bGFyLCByZXR1cm5zIHRydWUgaWYgdGhlIHBl
bmRpbmcgcG9pbnRlciBjYXB0dXJlIHRhcmdldCBvdmVycmlkZSBmb3IgcG9pbnRlcklkIGlzIHNl
dCB0byB0aGUgZWxlbWVudCBvbiB3aGljaCB0aGlzIG1ldGhvZCBpcwogICAgIC8vIGludm9rZWQs
IGFuZCBmYWxzZSBvdGhlcndpc2UuCiAKKyAgICBpZiAoIW1faGF2ZUFueUNhcHR1cmluZ0VsZW1l
bnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGF1dG8gaXRlcmF0b3IgPSBtX2FjdGl2
ZVBvaW50ZXJJZHNUb0NhcHR1cmluZ0RhdGEuZmluZChwb2ludGVySWQpOwogICAgIHJldHVybiBp
dGVyYXRvciAhPSBtX2FjdGl2ZVBvaW50ZXJJZHNUb0NhcHR1cmluZ0RhdGEuZW5kKCkgJiYgaXRl
cmF0b3ItPnZhbHVlLnBlbmRpbmdUYXJnZXRPdmVycmlkZSA9PSBjYXB0dXJpbmdUYXJnZXQ7CiB9
CkBAIC0xMzMsMTAgKzEzOCwxNSBAQCB2b2lkIFBvaW50ZXJDYXB0dXJlQ29udHJvbGxlcjo6cG9p
bnRlckxvY2tXYXNBcHBsaWVkKCkKICAgICAgICAgY2FwdHVyaW5nRGF0YS5wZW5kaW5nVGFyZ2V0
T3ZlcnJpZGUgPSBudWxscHRyOwogICAgICAgICBjYXB0dXJpbmdEYXRhLnRhcmdldE92ZXJyaWRl
ID0gbnVsbHB0cjsKICAgICB9CisKKyAgICB1cGRhdGVIYXZlQW55Q2FwdHVyaW5nRWxlbWVudCgp
OwogfQogCiB2b2lkIFBvaW50ZXJDYXB0dXJlQ29udHJvbGxlcjo6ZWxlbWVudFdhc1JlbW92ZWQo
RWxlbWVudCYgZWxlbWVudCkKIHsKKyAgICBpZiAoIW1faGF2ZUFueUNhcHR1cmluZ0VsZW1lbnQp
CisgICAgICAgIHJldHVybjsKKwogICAgIGZvciAoYXV0byYga2V5QW5kVmFsdWUgOiBtX2FjdGl2
ZVBvaW50ZXJJZHNUb0NhcHR1cmluZ0RhdGEpIHsKICAgICAgICAgYXV0byYgY2FwdHVyaW5nRGF0
YSA9IGtleUFuZFZhbHVlLnZhbHVlOwogICAgICAgICBpZiAoY2FwdHVyaW5nRGF0YS5wZW5kaW5n
VGFyZ2V0T3ZlcnJpZGUgPT0gJmVsZW1lbnQgfHwgY2FwdHVyaW5nRGF0YS50YXJnZXRPdmVycmlk
ZSA9PSAmZWxlbWVudCkgewpAQCAtMTU4LDI0ICsxNjgsNDUgQEAgdm9pZCBQb2ludGVyQ2FwdHVy
ZUNvbnRyb2xsZXI6OmVsZW1lbnRXYXNSZW1vdmVkKEVsZW1lbnQmIGVsZW1lbnQpCiB2b2lkIFBv
aW50ZXJDYXB0dXJlQ29udHJvbGxlcjo6cmVzZXQoKQogewogICAgIG1fYWN0aXZlUG9pbnRlcklk
c1RvQ2FwdHVyaW5nRGF0YS5jbGVhcigpOworICAgIG1faGF2ZUFueUNhcHR1cmluZ0VsZW1lbnQg
PSBmYWxzZTsKIAogICAgIENhcHR1cmluZ0RhdGEgY2FwdHVyaW5nRGF0YTsKICAgICBjYXB0dXJp
bmdEYXRhLnBvaW50ZXJUeXBlID0gUG9pbnRlckV2ZW50Ojptb3VzZVBvaW50ZXJUeXBlKCk7CiAg
ICAgbV9hY3RpdmVQb2ludGVySWRzVG9DYXB0dXJpbmdEYXRhLmFkZChtb3VzZVBvaW50ZXJJRCwg
Y2FwdHVyaW5nRGF0YSk7CiB9CiAKK3ZvaWQgUG9pbnRlckNhcHR1cmVDb250cm9sbGVyOjp1cGRh
dGVIYXZlQW55Q2FwdHVyaW5nRWxlbWVudCgpCit7CisgICAgYXV0byBoYXZlQW55Q2FwdHVyaW5n
RWxlbWVudCA9IFsmXSB7CisgICAgICAgIGZvciAoYXV0byYga2V5QW5kVmFsdWUgOiBtX2FjdGl2
ZVBvaW50ZXJJZHNUb0NhcHR1cmluZ0RhdGEpIHsKKyAgICAgICAgICAgIGF1dG8mIGNhcHR1cmlu
Z0RhdGEgPSBrZXlBbmRWYWx1ZS52YWx1ZTsKKyAgICAgICAgICAgIGlmIChjYXB0dXJpbmdEYXRh
LnBlbmRpbmdUYXJnZXRPdmVycmlkZSB8fCBjYXB0dXJpbmdEYXRhLnRhcmdldE92ZXJyaWRlCisj
aWYgRU5BQkxFKFRPVUNIX0VWRU5UUykgJiYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAg
ICAgICAgICB8fCBjYXB0dXJpbmdEYXRhLnByZXZpb3VzVGFyZ2V0CisjZW5kaWYKKyAgICAgICAg
ICAgICkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9OworICAgIAorICAgIG1faGF2ZUFueUNhcHR1cmluZ0VsZW1l
bnQgPSBoYXZlQW55Q2FwdHVyaW5nRWxlbWVudCgpOworfQorCiB2b2lkIFBvaW50ZXJDYXB0dXJl
Q29udHJvbGxlcjo6dG91Y2hXaXRoSWRlbnRpZmllcldhc1JlbW92ZWQoUG9pbnRlcklEIHBvaW50
ZXJJZCkKIHsKICAgICBtX2FjdGl2ZVBvaW50ZXJJZHNUb0NhcHR1cmluZ0RhdGEucmVtb3ZlKHBv
aW50ZXJJZCk7CisgICAgdXBkYXRlSGF2ZUFueUNhcHR1cmluZ0VsZW1lbnQoKTsKIH0KIAotYm9v
bCBQb2ludGVyQ2FwdHVyZUNvbnRyb2xsZXI6Omhhc0NhbmNlbGxlZFBvaW50ZXJFdmVudEZvcklk
ZW50aWZpZXIoUG9pbnRlcklEIHBvaW50ZXJJZCkKK2Jvb2wgUG9pbnRlckNhcHR1cmVDb250cm9s
bGVyOjpoYXNDYW5jZWxsZWRQb2ludGVyRXZlbnRGb3JJZGVudGlmaWVyKFBvaW50ZXJJRCBwb2lu
dGVySWQpIGNvbnN0CiB7CiAgICAgYXV0byBpdGVyYXRvciA9IG1fYWN0aXZlUG9pbnRlcklkc1Rv
Q2FwdHVyaW5nRGF0YS5maW5kKHBvaW50ZXJJZCk7CiAgICAgcmV0dXJuIGl0ZXJhdG9yICE9IG1f
YWN0aXZlUG9pbnRlcklkc1RvQ2FwdHVyaW5nRGF0YS5lbmQoKSAmJiBpdGVyYXRvci0+dmFsdWUu
Y2FuY2VsbGVkOwogfQogCi1ib29sIFBvaW50ZXJDYXB0dXJlQ29udHJvbGxlcjo6cHJldmVudHND
b21wYXRpYmlsaXR5TW91c2VFdmVudHNGb3JJZGVudGlmaWVyKFBvaW50ZXJJRCBwb2ludGVySWQp
Citib29sIFBvaW50ZXJDYXB0dXJlQ29udHJvbGxlcjo6cHJldmVudHNDb21wYXRpYmlsaXR5TW91
c2VFdmVudHNGb3JJZGVudGlmaWVyKFBvaW50ZXJJRCBwb2ludGVySWQpIGNvbnN0CiB7CiAgICAg
YXV0byBpdGVyYXRvciA9IG1fYWN0aXZlUG9pbnRlcklkc1RvQ2FwdHVyaW5nRGF0YS5maW5kKHBv
aW50ZXJJZCk7CiAgICAgcmV0dXJuIGl0ZXJhdG9yICE9IG1fYWN0aXZlUG9pbnRlcklkc1RvQ2Fw
dHVyaW5nRGF0YS5lbmQoKSAmJiBpdGVyYXRvci0+dmFsdWUucHJldmVudHNDb21wYXRpYmlsaXR5
TW91c2VFdmVudHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BvaW50ZXJDYXB0
dXJlQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Qb2ludGVyQ2FwdHVyZUNvbnRy
b2xsZXIuaAppbmRleCAxODYzZmQyM2I2MDVhYTAwNjM1ZGIxODEzOTFkZjg4MDBiODYzYzg2Li5h
Yzg0ZDA5NmYxODMxMmIyNTlkYTI0NTBhMjNjMjhmNzI2M2VlNTQ3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BvaW50ZXJDYXB0dXJlQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUG9pbnRlckNhcHR1cmVDb250cm9sbGVyLmgKQEAgLTQ2LDcgKzQ2LDcgQEAg
Y2xhc3MgUG9pbnRlckNhcHR1cmVDb250cm9sbGVyIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBQ
b2ludGVyQ2FwdHVyZUNvbnRyb2xsZXIoUGFnZSYpOwogCi0gICAgRWxlbWVudCogcG9pbnRlckNh
cHR1cmVFbGVtZW50KERvY3VtZW50KiwgUG9pbnRlcklEKTsKKyAgICBFbGVtZW50KiBwb2ludGVy
Q2FwdHVyZUVsZW1lbnQoRG9jdW1lbnQqLCBQb2ludGVySUQpIGNvbnN0OwogICAgIEV4Y2VwdGlv
bk9yPHZvaWQ+IHNldFBvaW50ZXJDYXB0dXJlKEVsZW1lbnQqLCBQb2ludGVySUQpOwogICAgIEV4
Y2VwdGlvbk9yPHZvaWQ+IHJlbGVhc2VQb2ludGVyQ2FwdHVyZShFbGVtZW50KiwgUG9pbnRlcklE
KTsKICAgICBib29sIGhhc1BvaW50ZXJDYXB0dXJlKEVsZW1lbnQqLCBQb2ludGVySUQpOwpAQCAt
NjIsOCArNjIsOCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
dG91Y2hXaXRoSWRlbnRpZmllcldhc1JlbW92ZWQoUG9pbnRlcklEKTsKLSAgICBib29sIGhhc0Nh
bmNlbGxlZFBvaW50ZXJFdmVudEZvcklkZW50aWZpZXIoUG9pbnRlcklEKTsKLSAgICBib29sIHBy
ZXZlbnRzQ29tcGF0aWJpbGl0eU1vdXNlRXZlbnRzRm9ySWRlbnRpZmllcihQb2ludGVySUQpOwor
ICAgIGJvb2wgaGFzQ2FuY2VsbGVkUG9pbnRlckV2ZW50Rm9ySWRlbnRpZmllcihQb2ludGVySUQp
IGNvbnN0OworICAgIGJvb2wgcHJldmVudHNDb21wYXRpYmlsaXR5TW91c2VFdmVudHNGb3JJZGVu
dGlmaWVyKFBvaW50ZXJJRCkgY29uc3Q7CiAgICAgdm9pZCBkaXNwYXRjaEV2ZW50KFBvaW50ZXJF
dmVudCYsIEV2ZW50VGFyZ2V0Kik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjYW5jZWxQb2lu
dGVyKFBvaW50ZXJJRCwgY29uc3QgSW50UG9pbnQmKTsKICAgICB2b2lkIHByb2Nlc3NQZW5kaW5n
UG9pbnRlckNhcHR1cmUoUG9pbnRlcklEKTsKQEAgLTg2LDYgKzg2LDggQEAgcHJpdmF0ZToKICAg
ICBDYXB0dXJpbmdEYXRhJiBlbnN1cmVDYXB0dXJpbmdEYXRhRm9yUG9pbnRlckV2ZW50KGNvbnN0
IFBvaW50ZXJFdmVudCYpOwogICAgIHZvaWQgcG9pbnRlckV2ZW50V2lsbEJlRGlzcGF0Y2hlZChj
b25zdCBQb2ludGVyRXZlbnQmLCBFdmVudFRhcmdldCopOwogICAgIHZvaWQgcG9pbnRlckV2ZW50
V2FzRGlzcGF0Y2hlZChjb25zdCBQb2ludGVyRXZlbnQmKTsKKyAgICAKKyAgICB2b2lkIHVwZGF0
ZUhhdmVBbnlDYXB0dXJpbmdFbGVtZW50KCk7CiAKICAgICBQYWdlJiBtX3BhZ2U7CiAgICAgLy8g
V2hpbGUgUG9pbnRlcklEIGlzIGRlZmluZWQgYXMgaW50MzJfdCwgd2UgdXNlIGludDY0X3QgaGVy
ZSBzbyB0aGF0IHdlIG1heSB1c2UgYSB2YWx1ZSBvdXRzaWRlIG9mIHRoZSBpbnQzMl90IHJhbmdl
IHRvIGhhdmUgc2FmZQpAQCAtOTMsNiArOTUsNyBAQCBwcml2YXRlOgogICAgIHVzaW5nIFBvaW50
ZXJJZFRvQ2FwdHVyaW5nRGF0YU1hcCA9IEhhc2hNYXA8aW50NjRfdCwgQ2FwdHVyaW5nRGF0YSwg
V1RGOjpJbnRIYXNoPGludDY0X3Q+LCBXVEY6OlNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxp
bnQ2NF90Pj47CiAgICAgUG9pbnRlcklkVG9DYXB0dXJpbmdEYXRhTWFwIG1fYWN0aXZlUG9pbnRl
cklkc1RvQ2FwdHVyaW5nRGF0YTsKICAgICBib29sIG1fcHJvY2Vzc2luZ1BlbmRpbmdQb2ludGVy
Q2FwdHVyZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hhdmVBbnlDYXB0dXJpbmdFbGVtZW50IHsg
ZmFsc2UgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="review"
          id="437257"
          type_id="1"
          status="+"
          setter="rniwa"
    />
    <flag name="commit-queue"
          id="437270"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>