<?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>111405</bug_id>
          
          <creation_ts>2013-03-04 21:31:21 -0800</creation_ts>
          <short_desc>[EFL][Qt][WK2] Make PageViewportController more readable.</short_desc>
          <delta_ts>2017-03-11 10:33:08 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</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>
          <dependson>111401</dependson>
          <blocked>110066</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dongseong Hwang">dongseong.hwang</reporter>
          <assigned_to name="Dongseong Hwang">dongseong.hwang</assigned_to>
          <cc>abecsi</cc>
    
    <cc>allan.jensen</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jturcotte</cc>
    
    <cc>kenneth</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>menard</cc>
    
    <cc>mikhail.pozdnyakov</cc>
    
    <cc>noam</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>847251</commentid>
    <comment_count>0</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-03-04 21:31:21 -0800</bug_when>
    <thetext>Refactor PageViewportController to reveal subtle intention handling scaling and
scrolling more explicitly.

Note we only use pending mechanism when PageViewportController is the source of
scaling or scrolling, and didRenderFrame() plays a role to notify time to flush
pending variables to the client.

1. Scaling
There are two kind sources of scaling events: PageViewportController itself and
the client (a.k.a the viewport).

If the client is the source, we must change the scale of PageViewportController
and WebCore immediately.

If PageViewportController is the source, we pend to sychronize the scale with
the client until receiving didRenderFrame() call, while we notify WebCore
immediately. It is because it is a special case in which we concern about
performance: setPageScaleFactorWithPendingChange() and
updateMinimumScaleToFit().

One big change is that didRenderFrame() does not call WebPageProxy::scalePage()
because didRenderFrame() is time to sychronize the scale of
PageViewportController with the client. If we call WebPageProxy::scalePage() in
didRenderFrame(), we will receive redundant didRenderFrame() call one more time.

2. Scrolling
There are three kind sources of scrolling events: PageViewportController itself,
the client and WebCore.

If the client is the source, we must change the scroll position of
PageViewportController and WebCore immediately.

If PageViewportController is the source, we pend to sychronize the scroll
position with the client until receiving didRenderFrame() call, while we notify
WebCore immediately. It is because it is a special case in which we concern
about performance: didCommitLoad() and the special case of pageDidRequestScroll().

If WebCore is the source, PageViewportController::pageDidRequestScroll() is
called. We must change the scroll position of PageViewportController and the
client  immediately.

There is one big changes: PageViewportControllerClient::setViewportPosition()
does not call PageViewportController::didChangeContentsVisibility().
didChangeContentsVisibility() is called when the client is the source of scaling
or scrolling events and setViewportPosition() is called when
PageViewportController want to syncronize the scroll position with the client,
so setViewportPosition() must not call didChangeContentsVisibility().
I introduced PageViewportControllerClientQt::m_isViewportPositionSychronizingWithPageViewportController
to achieve above requirement.

In addition, I introduced m_changingViewportAttributes to not change the scale
and scroll position during changingViewportAttributes. Currently,
PageViewportController::didChangeViewportAttributes() overuses
m_pendingPositionChange and m_pendingScaleChange for the purpose of
m_changingViewportAttributes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847253</commentid>
    <comment_count>1</comment_count>
      <attachid>191398</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-03-04 21:38:44 -0800</bug_when>
    <thetext>Created attachment 191398
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847524</commentid>
    <comment_count>2</comment_count>
      <attachid>191398</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2013-03-05 03:34:30 -0800</bug_when>
    <thetext>Comment on attachment 191398
Patch

Is there any bug caused by the current code?
If so, please have separate bugs for each of them and only fix those.

The code is fine, it doesn&apos;t need refactoring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847548</commentid>
    <comment_count>3</comment_count>
      <attachid>191398</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2013-03-05 04:18:47 -0800</bug_when>
    <thetext>Comment on attachment 191398
Patch

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

Let me address my concerns individually as well, I&apos;m not being fair.

&gt; Source/WebKit2/UIProcess/PageViewportController.cpp:361
&gt; +bool PageViewportController::setContentsPosition(const WebCore::FloatPoint&amp; pos)

The introduction of this method makes the code harder to read.
- From their use points, it is unclear if it has any effect on the client or the web process
- Given the above ambiguity, the use of a bool feels like &quot;it failed to be applied&quot;, which isn&apos;t the case, it means the value is already there.

&gt; Source/WebKit2/UIProcess/PageViewportController.h:94
&gt; +    void setPageScaleFactorWithPendingChange(float);
&gt; +    void setContentsPositionWithPendingChange(const WebCore::FloatPoint&amp;);

I don&apos;t see why you need to rename those methods. The &quot;WithPendingChange&quot; and the end especially, &quot;AfterRenderingContents&quot; feeled clearer to me.

&gt; Source/WebKit2/UIProcess/PageViewportController.h:120
&gt; +    bool m_changingViewportAttributes;

This flag should be named according to its effect rather than the reason it happened to avoid it being abused, like you said.

&gt; Source/WebKit2/UIProcess/qt/PageViewportControllerClientQt.cpp:329
&gt; +    // See the comment in setViewportPosition().

This comment costs more than it gives, please remove it. Anybody&apos;s reflex should be to search for references of the variable anyway.

&gt; Source/WebKit2/UIProcess/qt/PageViewportControllerClientQt.cpp:511
&gt; +    // See the comment in setViewportPosition().

ditto

&gt; Source/WebKit2/UIProcess/qt/PageViewportControllerClientQt.h:142
&gt; +    bool m_isViewportPositionSychronizingWithPageViewportController;

This should also name the effects rather than the source of the event.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847549</commentid>
    <comment_count>4</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2013-03-05 04:20:22 -0800</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=191398&amp;action=review

I&apos;m not convinced either that this would be an improvement.
If you try to fix bugs, please fix them one-by-one.

&gt; Source/WebKit2/UIProcess/PageViewportController.h:98
&gt; -    void applyScaleAfterRenderingContents(float scale);
&gt; -    void applyPositionAfterRenderingContents(const WebCore::FloatPoint&amp; pos);
&gt; +
&gt; +    // Following two method must be called when PageViewportController is the source of scaling or scrolling event.
&gt; +    // We pend to synchronize scale and scroll values with clients because it takes time until WebCore receives the event and responses didRenderFrame().
&gt; +    void setPageScaleFactorWithPendingChange(float);
&gt; +    void setContentsPositionWithPendingChange(const WebCore::FloatPoint&amp;);
&gt; +
&gt;      bool updateMinimumScaleToFit(bool userInitiatedUpdate);
&gt; +    bool setPageScaleFactor(float);
&gt; +    bool setContentsPosition(const WebCore::FloatPoint&amp;);

I&apos;m not sure, that this would make it more readable.
My feeling is that it becomes more complex than before and I have concerns that the subtle behavioral changes might reintroduce issues that have already been fixed.

&gt; Source/WebKit2/UIProcess/qt/PageViewportControllerClientQt.cpp:323
&gt;  void PageViewportControllerClientQt::setViewportPosition(const FloatPoint&amp; contentsPoint)
&gt;  {
&gt;      QPointF newPosition((m_pageItem-&gt;position() + QPointF(contentsPoint)) * m_pageItem-&gt;contentsScale());
&gt; -    // The contentX and contentY property changes trigger a visible rect update.
&gt; +    // Prevent a visible rect update due to the contentX and contentY property changes, because this method is called when PageViewportController synchronizes the viewport position to client.
&gt; +    TemporaryChange&lt;bool&gt; protector(m_isViewportPositionSychronizingWithPageViewportController, true);

I suspect that this would reintroduce https://bugs.webkit.org/show_bug.cgi?id=108337.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1286207</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-03-11 10:33:08 -0800</bug_when>
    <thetext>Closing this bug because the EFL port has been removed from trunk.

If you feel this bug applies to a different upstream WebKit port and was closed in error, please either update the title and reopen the bug, or leave a comment to request this.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191398</attachid>
            <date>2013-03-04 21:38:44 -0800</date>
            <delta_ts>2013-03-05 04:18:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111405-20130305143418.patch</filename>
            <type>text/plain</type>
            <size>19133</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0NzEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMWE2ZmNkNGFmN2Y1Mjkz
M2Y3NjE3OTM3ZDZlOTY2MWQ2MGI0MGQ4Ni4uMDdmNWE0NzU0YzM1YWNmZDVhZmE0MzAwMzMxNzQ3
ZDM0NzQ5ZDhmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDk5IEBACiAyMDEzLTAzLTA0ICBIdWFu
ZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0PgogCisgICAgICAgIFtFRkxdW1F0
XVtXSzJdIE1ha2UgUGFnZVZpZXdwb3J0Q29udHJvbGxlciBtb3JlIHJlYWRhYmxlLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTExNDA1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3IgUGFnZVZp
ZXdwb3J0Q29udHJvbGxlciB0byByZXZlYWwgc3VidGxlIGludGVudGlvbiBoYW5kbGluZyBzY2Fs
aW5nIGFuZAorICAgICAgICBzY3JvbGxpbmcgbW9yZSBleHBsaWNpdGx5LgorCisgICAgICAgIE5v
dGUgd2Ugb25seSB1c2UgcGVuZGluZyBtZWNoYW5pc20gd2hlbiBQYWdlVmlld3BvcnRDb250cm9s
bGVyIGlzIHRoZSBzb3VyY2Ugb2YKKyAgICAgICAgc2NhbGluZyBvciBzY3JvbGxpbmcsIGFuZCBk
aWRSZW5kZXJGcmFtZSgpIHBsYXlzIGEgcm9sZSB0byBub3RpZnkgdGltZSB0byBmbHVzaAorICAg
ICAgICBwZW5kaW5nIHZhcmlhYmxlcyB0byB0aGUgY2xpZW50LgorCisgICAgICAgIDEuIFNjYWxp
bmcKKyAgICAgICAgVGhlcmUgYXJlIHR3byBraW5kIHNvdXJjZXMgb2Ygc2NhbGluZyBldmVudHM6
IFBhZ2VWaWV3cG9ydENvbnRyb2xsZXIgaXRzZWxmIGFuZAorICAgICAgICB0aGUgY2xpZW50IChh
LmsuYSB0aGUgdmlld3BvcnQpLgorCisgICAgICAgIElmIHRoZSBjbGllbnQgaXMgdGhlIHNvdXJj
ZSwgd2UgbXVzdCBjaGFuZ2UgdGhlIHNjYWxlIG9mIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXIKKyAg
ICAgICAgYW5kIFdlYkNvcmUgaW1tZWRpYXRlbHkuCisKKyAgICAgICAgSWYgUGFnZVZpZXdwb3J0
Q29udHJvbGxlciBpcyB0aGUgc291cmNlLCB3ZSBwZW5kIHRvIHN5Y2hyb25pemUgdGhlIHNjYWxl
IHdpdGgKKyAgICAgICAgdGhlIGNsaWVudCB1bnRpbCByZWNlaXZpbmcgZGlkUmVuZGVyRnJhbWUo
KSBjYWxsLCB3aGlsZSB3ZSBub3RpZnkgV2ViQ29yZQorICAgICAgICBpbW1lZGlhdGVseS4gSXQg
aXMgYmVjYXVzZSBpdCBpcyBhIHNwZWNpYWwgY2FzZSBpbiB3aGljaCB3ZSBjb25jZXJuIGFib3V0
CisgICAgICAgIHBlcmZvcm1hbmNlOiBzZXRQYWdlU2NhbGVGYWN0b3JXaXRoUGVuZGluZ0NoYW5n
ZSgpIGFuZAorICAgICAgICB1cGRhdGVNaW5pbXVtU2NhbGVUb0ZpdCgpLgorCisgICAgICAgIE9u
ZSBiaWcgY2hhbmdlIGlzIHRoYXQgZGlkUmVuZGVyRnJhbWUoKSBkb2VzIG5vdCBjYWxsIFdlYlBh
Z2VQcm94eTo6c2NhbGVQYWdlKCkKKyAgICAgICAgYmVjYXVzZSBkaWRSZW5kZXJGcmFtZSgpIGlz
IHRpbWUgdG8gc3ljaHJvbml6ZSB0aGUgc2NhbGUgb2YKKyAgICAgICAgUGFnZVZpZXdwb3J0Q29u
dHJvbGxlciB3aXRoIHRoZSBjbGllbnQuIElmIHdlIGNhbGwgV2ViUGFnZVByb3h5OjpzY2FsZVBh
Z2UoKSBpbgorICAgICAgICBkaWRSZW5kZXJGcmFtZSgpLCB3ZSB3aWxsIHJlY2VpdmUgcmVkdW5k
YW50IGRpZFJlbmRlckZyYW1lKCkgY2FsbCBvbmUgbW9yZSB0aW1lLgorCisgICAgICAgIDIuIFNj
cm9sbGluZworICAgICAgICBUaGVyZSBhcmUgdGhyZWUga2luZCBzb3VyY2VzIG9mIHNjcm9sbGlu
ZyBldmVudHM6IFBhZ2VWaWV3cG9ydENvbnRyb2xsZXIgaXRzZWxmLAorICAgICAgICB0aGUgY2xp
ZW50IGFuZCBXZWJDb3JlLgorCisgICAgICAgIElmIHRoZSBjbGllbnQgaXMgdGhlIHNvdXJjZSwg
d2UgbXVzdCBjaGFuZ2UgdGhlIHNjcm9sbCBwb3NpdGlvbiBvZgorICAgICAgICBQYWdlVmlld3Bv
cnRDb250cm9sbGVyIGFuZCBXZWJDb3JlIGltbWVkaWF0ZWx5LgorCisgICAgICAgIElmIFBhZ2VW
aWV3cG9ydENvbnRyb2xsZXIgaXMgdGhlIHNvdXJjZSwgd2UgcGVuZCB0byBzeWNocm9uaXplIHRo
ZSBzY3JvbGwKKyAgICAgICAgcG9zaXRpb24gd2l0aCB0aGUgY2xpZW50IHVudGlsIHJlY2Vpdmlu
ZyBkaWRSZW5kZXJGcmFtZSgpIGNhbGwsIHdoaWxlIHdlIG5vdGlmeQorICAgICAgICBXZWJDb3Jl
IGltbWVkaWF0ZWx5LiBJdCBpcyBiZWNhdXNlIGl0IGlzIGEgc3BlY2lhbCBjYXNlIGluIHdoaWNo
IHdlIGNvbmNlcm4KKyAgICAgICAgYWJvdXQgcGVyZm9ybWFuY2U6IGRpZENvbW1pdExvYWQoKSBh
bmQgdGhlIHNwZWNpYWwgY2FzZSBvZiBwYWdlRGlkUmVxdWVzdFNjcm9sbCgpLgorCisgICAgICAg
IElmIFdlYkNvcmUgaXMgdGhlIHNvdXJjZSwgUGFnZVZpZXdwb3J0Q29udHJvbGxlcjo6cGFnZURp
ZFJlcXVlc3RTY3JvbGwoKSBpcworICAgICAgICBjYWxsZWQuIFdlIG11c3QgY2hhbmdlIHRoZSBz
Y3JvbGwgcG9zaXRpb24gb2YgUGFnZVZpZXdwb3J0Q29udHJvbGxlciBhbmQgdGhlCisgICAgICAg
IGNsaWVudCBpbW1lZGlhdGVseS4KKworICAgICAgICBUaGVyZSBpcyBvbmUgYmlnIGNoYW5nZXM6
IFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnQ6OnNldFZpZXdwb3J0UG9zaXRpb24oKQorICAg
ICAgICBkb2VzIG5vdCBjYWxsIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXI6OmRpZENoYW5nZUNvbnRl
bnRzVmlzaWJpbGl0eSgpLgorICAgICAgICBkaWRDaGFuZ2VDb250ZW50c1Zpc2liaWxpdHkoKSBp
cyBjYWxsZWQgd2hlbiB0aGUgY2xpZW50IGlzIHRoZSBzb3VyY2Ugb2Ygc2NhbGluZworICAgICAg
ICBvciBzY3JvbGxpbmcgZXZlbnRzIGFuZCBzZXRWaWV3cG9ydFBvc2l0aW9uKCkgaXMgY2FsbGVk
IHdoZW4KKyAgICAgICAgUGFnZVZpZXdwb3J0Q29udHJvbGxlciB3YW50IHRvIHN5bmNyb25pemUg
dGhlIHNjcm9sbCBwb3NpdGlvbiB3aXRoIHRoZSBjbGllbnQsCisgICAgICAgIHNvIHNldFZpZXdw
b3J0UG9zaXRpb24oKSBtdXN0IG5vdCBjYWxsIGRpZENoYW5nZUNvbnRlbnRzVmlzaWJpbGl0eSgp
LgorICAgICAgICBJIGludHJvZHVjZWQgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0Ojpt
X2lzVmlld3BvcnRQb3NpdGlvblN5Y2hyb25pemluZ1dpdGhQYWdlVmlld3BvcnRDb250cm9sbGVy
CisgICAgICAgIHRvIGFjaGlldmUgYWJvdmUgcmVxdWlyZW1lbnQuCisKKyAgICAgICAgSW4gYWRk
aXRpb24sIEkgaW50cm9kdWNlZCBtX2NoYW5naW5nVmlld3BvcnRBdHRyaWJ1dGVzIHRvIG5vdCBj
aGFuZ2UgdGhlIHNjYWxlCisgICAgICAgIGFuZCBzY3JvbGwgcG9zaXRpb24gZHVyaW5nIGNoYW5n
aW5nVmlld3BvcnRBdHRyaWJ1dGVzLiBDdXJyZW50bHksCisgICAgICAgIFBhZ2VWaWV3cG9ydENv
bnRyb2xsZXI6OmRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcygpIG92ZXJ1c2VzCisgICAgICAg
IG1fcGVuZGluZ1Bvc2l0aW9uQ2hhbmdlIGFuZCBtX3BlbmRpbmdTY2FsZUNoYW5nZSBmb3IgdGhl
IHB1cnBvc2Ugb2YKKyAgICAgICAgbV9jaGFuZ2luZ1ZpZXdwb3J0QXR0cmlidXRlcy4KKworICAg
ICAgICAqIFVJUHJvY2Vzcy9QYWdlVmlld3BvcnRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6ZnV6enlDb21wYXJlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6
OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXI6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXIpOgorICAgICAg
ICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyOjpkaWRDb21taXRMb2FkKToKKyAgICAg
ICAgKFdlYktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlcjo6ZGlkUmVuZGVyRnJhbWUpOgorICAg
ICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyOjpwYWdlVHJhbnNpdGlvblZpZXdw
b3J0UmVhZHkpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyOjpwYWdl
RGlkUmVxdWVzdFNjcm9sbCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xs
ZXI6OmRpZENoYW5nZUNvbnRlbnRzVmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VW
aWV3cG9ydENvbnRyb2xsZXI6OmRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcyk6CisgICAgICAg
IChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXI6OnNldFBhZ2VTY2FsZUZhY3RvcldpdGhQ
ZW5kaW5nQ2hhbmdlKToKKyAgICAgICAgICAgIFJlbmFtZWQgZnJvbSBhcHBseVNjYWxlQWZ0ZXJS
ZW5kZXJpbmdDb250ZW50cywgYW5kIGl0IGlzIGNhbGxlZCBvbmx5CisgICAgICAgICAgICB3aGVu
IFBhZ2VWaWV3cG9ydENvbnRyb2xsZXIgaXMgdGhlIHNvdXJjZSBvZiBzY2FsaW5nLgorICAgICAg
ICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyOjpzZXRQYWdlU2NhbGVGYWN0b3IpOgor
ICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyOjpzZXRDb250ZW50c1Bvc2l0
aW9uV2l0aFBlbmRpbmdDaGFuZ2UpOgorICAgICAgICAgICAgUmVuYW1lZCBmcm9tIGFwcGx5UG9z
aXRpb25BZnRlclJlbmRlcmluZ0NvbnRlbnRzLCBhbmQgaXQgaXMgY2FsbGVkIG9ubHkKKyAgICAg
ICAgICAgIHdoZW4gUGFnZVZpZXdwb3J0Q29udHJvbGxlciBpcyB0aGUgc291cmNlIG9mIHNjcm9s
bGluZy4KKyAgICAgICAgKFdlYktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlcjo6c2V0Q29udGVu
dHNQb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXI6OnVw
ZGF0ZU1pbmltdW1TY2FsZVRvRml0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvUGFnZVZpZXdwb3J0
Q29udHJvbGxlci5oOgorICAgICAgICAoUGFnZVZpZXdwb3J0Q29udHJvbGxlcik6CisgICAgICAg
ICogVUlQcm9jZXNzL2VmbC9QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbDo6c2V0Vmlld3Bv
cnRQb3NpdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1BhZ2VWaWV3cG9ydENvbnRyb2xs
ZXJDbGllbnRRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJD
bGllbnRRdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0KToKKyAgICAgICAgKFdlYktp
dDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0OjpzZXRWaWV3cG9ydFBvc2l0aW9uKToK
KyAgICAgICAgKFdlYktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0OjpzZXRQYWdl
U2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xp
ZW50UXQ6OnVwZGF0ZVZpZXdwb3J0Q29udHJvbGxlcik6CisgICAgICAgICogVUlQcm9jZXNzL3F0
L1BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdC5oOgorICAgICAgICAoUGFnZVZpZXdwb3J0
Q29udHJvbGxlckNsaWVudFF0KToKKworMjAxMy0wMy0wNCAgSHVhbmcgRG9uZ3N1bmcgIDxsdXh0
ZWxsYUBjb21wYW55MTAwLm5ldD4KKwogICAgICAgICBbRUZMXVtXSzJdIFdlYlZpZXc6OmRpZFJl
bmRlckZyYW1lKCkgZG9lcyBub3QgbmVlZCB0byBzY2hlZHVsZSB1cGRhdGUgZGlzcGxheS4KICAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMTQwMQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZVZpZXdwb3J0Q29udHJvbGxl
ci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZVZpZXdwb3J0Q29udHJvbGxlci5j
cHAKaW5kZXggMzFkMGM3YzFmMDM3ZjY4ZTM2ODgxZTczYmQ4N2RhMzc2OGY2OGQzYi4uZTIwMGYw
ZWNhNzNlY2IwMGExZmQ3OTlmZWQyZmQwZjEyZWU3Njg4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1BhZ2VWaWV3cG9ydENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9QYWdlVmlld3BvcnRDb250cm9sbGVyLmNwcApAQCAtMzksNiArMzks
MTEgQEAgYm9vbCBmdXp6eUNvbXBhcmUoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgZXBzaWxvbikK
ICAgICByZXR1cm4gc3RkOjphYnMoYSAtIGIpIDwgZXBzaWxvbjsKIH0KIAorYm9vbCBmdXp6eUNv
bXBhcmUoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgYSwgY29uc3QgV2ViQ29yZTo6RmxvYXRQ
b2ludCYgYiwgZmxvYXQgZXBzaWxvbikKK3sKKyAgICByZXR1cm4gZnV6enlDb21wYXJlKGEueCgp
LCBiLngoKSwgZXBzaWxvbikgJiYgZnV6enlDb21wYXJlKGEueSgpLCBiLnkoKSwgZXBzaWxvbik7
Cit9CisKIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXI6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXIoV2Vi
S2l0OjpXZWJQYWdlUHJveHkqIHByb3h5LCBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50KiBj
bGllbnQpCiAgICAgOiBtX3dlYlBhZ2VQcm94eShwcm94eSkKICAgICAsIG1fY2xpZW50KGNsaWVu
dCkKQEAgLTUwLDYgKzU1LDcgQEAgUGFnZVZpZXdwb3J0Q29udHJvbGxlcjo6UGFnZVZpZXdwb3J0
Q29udHJvbGxlcihXZWJLaXQ6OldlYlBhZ2VQcm94eSogcHJveHksIFBhZ2UKICAgICAsIG1fcGFn
ZVNjYWxlRmFjdG9yKDEpCiAgICAgLCBtX3BlbmRpbmdQb3NpdGlvbkNoYW5nZShmYWxzZSkKICAg
ICAsIG1fcGVuZGluZ1NjYWxlQ2hhbmdlKGZhbHNlKQorICAgICwgbV9jaGFuZ2luZ1ZpZXdwb3J0
QXR0cmlidXRlcyhmYWxzZSkKIHsKICAgICAvLyBJbml0aWFsaXppbmcgVmlld3BvcnQgUmF3IEF0
dHJpYnV0ZXMgdG8gYXZvaWQgcmFuZG9tIG5lZ2F0aXZlIG9yIGluZmluaXR5IHNjYWxlIGZhY3Rv
cnMKICAgICAvLyBpZiB0aGVyZSBpcyBhIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gdGhlIGZpcnN0
IGxheW91dCBhbmQgc2V0dGluZyB0aGUgdmlld3BvcnQgYXR0cmlidXRlcyBmb3IgdGhlIGZpcnN0
IHRpbWUuCkBAIC0xNDUsNyArMTUxLDcgQEAgdm9pZCBQYWdlVmlld3BvcnRDb250cm9sbGVyOjpk
aWRDb21taXRMb2FkKCkKICAgICBtX2NvbnRlbnRzU2l6ZSA9IEludFNpemUoKTsKIAogICAgIC8v
IFJlc2V0IHRoZSBwb3NpdGlvbiB0byB0aGUgdG9wLCBwYWdlL2hpc3Rvcnkgc2Nyb2xsIHJlcXVl
c3RzIG1heSBvdmVycmlkZSB0aGlzIGJlZm9yZSB3ZSByZS1lbmFibGUgcmVuZGVyaW5nLgotICAg
IGFwcGx5UG9zaXRpb25BZnRlclJlbmRlcmluZ0NvbnRlbnRzKEZsb2F0UG9pbnQoKSk7CisgICAg
c2V0Q29udGVudHNQb3NpdGlvbldpdGhQZW5kaW5nQ2hhbmdlKEZsb2F0UG9pbnQoKSk7CiB9CiAK
IHZvaWQgUGFnZVZpZXdwb3J0Q29udHJvbGxlcjo6ZGlkQ2hhbmdlQ29udGVudHNTaXplKGNvbnN0
IEludFNpemUmIG5ld1NpemUpCkBAIC0xOTIsMTIgKzE5OCwxMCBAQCB2b2lkIFBhZ2VWaWV3cG9y
dENvbnRyb2xsZXI6OmRpZFJlbmRlckZyYW1lKGNvbnN0IEludFNpemUmIGNvbnRlbnRzU2l6ZSwg
Y29uc3QgSQogICAgICAgICBtX2NsaWVudC0+c2V0UGFnZVNjYWxlRmFjdG9yKG1fcGFnZVNjYWxl
RmFjdG9yKTsKIAogICAgICAgICAvLyBUaGUgc2NhbGUgY2hhbmdlZCwgd2UgaGF2ZSB0byByZS1w
aXhlbCBhbGlnbi4KLSAgICAgICAgbV9wZW5kaW5nUG9zaXRpb25DaGFuZ2UgPSB0cnVlOwogICAg
ICAgICBGbG9hdFBvaW50IGN1cnJlbnREaXNjcmV0ZVBvcyA9IHJvdW5kZWRJbnRQb2ludChtX2Nv
bnRlbnRzUG9zaXRpb24pOwogICAgICAgICBGbG9hdFBvaW50IHBpeGVsQWxpZ25lZFBvcyA9IHBp
eGVsQWxpZ25lZEZsb2F0UG9pbnQoY3VycmVudERpc2NyZXRlUG9zKTsKLSAgICAgICAgbV9jb250
ZW50c1Bvc2l0aW9uID0gYm91bmRDb250ZW50c1Bvc2l0aW9uKHBpeGVsQWxpZ25lZFBvcyk7Ci0K
LSAgICAgICAgbV93ZWJQYWdlUHJveHktPnNjYWxlUGFnZShtX3BhZ2VTY2FsZUZhY3Rvciwgcm91
bmRlZEludFBvaW50KG1fY29udGVudHNQb3NpdGlvbikpOworICAgICAgICBpZiAoc2V0Q29udGVu
dHNQb3NpdGlvbihib3VuZENvbnRlbnRzUG9zaXRpb24ocGl4ZWxBbGlnbmVkUG9zKSkpCisgICAg
ICAgICAgICBtX3BlbmRpbmdQb3NpdGlvbkNoYW5nZSA9IHRydWU7CiAgICAgfQogCiAgICAgLy8g
VGhlcmUgbWlnaHQgYmUgcmVuZGVyZWQgZnJhbWVzIG5vdCBjb3ZlcmluZyBvdXIgcmVxdWVzdGVk
IHBvc2l0aW9uIHlldCwgd2FpdCBmb3IgaXQuCkBAIC0yMDYsNiArMjEwLDggQEAgdm9pZCBQYWdl
Vmlld3BvcnRDb250cm9sbGVyOjpkaWRSZW5kZXJGcmFtZShjb25zdCBJbnRTaXplJiBjb250ZW50
c1NpemUsIGNvbnN0IEkKICAgICAgICAgbV9jbGllbnQtPnNldFZpZXdwb3J0UG9zaXRpb24obV9j
b250ZW50c1Bvc2l0aW9uKTsKICAgICAgICAgbV9wZW5kaW5nUG9zaXRpb25DaGFuZ2UgPSBmYWxz
ZTsKICAgICB9CisKKyAgICBtX2NoYW5naW5nVmlld3BvcnRBdHRyaWJ1dGVzID0gZmFsc2U7CiB9
CiAKIHZvaWQgUGFnZVZpZXdwb3J0Q29udHJvbGxlcjo6cGFnZVRyYW5zaXRpb25WaWV3cG9ydFJl
YWR5KCkKQEAgLTIxMyw3ICsyMTksNyBAQCB2b2lkIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXI6OnBh
Z2VUcmFuc2l0aW9uVmlld3BvcnRSZWFkeSgpCiAgICAgaWYgKCFtX3Jhd0F0dHJpYnV0ZXMubGF5
b3V0U2l6ZS5pc0VtcHR5KCkpIHsKICAgICAgICAgbV9oYWRVc2VySW50ZXJhY3Rpb24gPSBmYWxz
ZTsKICAgICAgICAgZmxvYXQgaW5pdGlhbFNjYWxlID0gbV9pbml0aWFsbHlGaXRUb1ZpZXdwb3J0
ID8gbV9taW5pbXVtU2NhbGVUb0ZpdCA6IG1fcmF3QXR0cmlidXRlcy5pbml0aWFsU2NhbGU7Ci0g
ICAgICAgIGFwcGx5U2NhbGVBZnRlclJlbmRlcmluZ0NvbnRlbnRzKGlubmVyQm91bmRlZFZpZXdw
b3J0U2NhbGUoaW5pdGlhbFNjYWxlKSk7CisgICAgICAgIHNldFBhZ2VTY2FsZUZhY3RvcldpdGhQ
ZW5kaW5nQ2hhbmdlKGlubmVyQm91bmRlZFZpZXdwb3J0U2NhbGUoaW5pdGlhbFNjYWxlKSk7CiAg
ICAgfQogCiAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBzaG91bGQgYWxyZWFkeSBoYXZlIHJlY2Vp
dmVkIHRoZSBmaXJzdCB2aWV3cG9ydCBhcmd1bWVudHMgYW5kIHRoZSByZXF1ZXN0ZWQgc2Nyb2xs
CkBAIC0yMzMsMTIgKzIzOSwxNCBAQCB2b2lkIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXI6OnBhZ2VE
aWRSZXF1ZXN0U2Nyb2xsKGNvbnN0IEludFBvaW50JiBjc3NQb3NpdGlvbikKICAgICBGbG9hdFBv
aW50IGFsaWduZWRQb3NpdGlvbiA9IHBpeGVsQWxpZ25lZEZsb2F0UG9pbnQoYm91bmRQb3NpdGlv
bik7CiAgICAgRmxvYXRSZWN0IGVuZFZpc2libGVDb250ZW50UmVjdChhbGlnbmVkUG9zaXRpb24s
IHZpc2libGVDb250ZW50c1NpemUoKSk7CiAKLSAgICBpZiAobV9sYXN0RnJhbWVDb3ZlcmVkUmVj
dC5pbnRlcnNlY3RzKGVuZFZpc2libGVDb250ZW50UmVjdCkpCisgICAgaWYgKG1fbGFzdEZyYW1l
Q292ZXJlZFJlY3QuaW50ZXJzZWN0cyhlbmRWaXNpYmxlQ29udGVudFJlY3QpKSB7CisgICAgICAg
IHNldENvbnRlbnRzUG9zaXRpb24oYWxpZ25lZFBvc2l0aW9uKTsKICAgICAgICAgbV9jbGllbnQt
PnNldFZpZXdwb3J0UG9zaXRpb24oYWxpZ25lZFBvc2l0aW9uKTsKLSAgICBlbHNlIHsKKyAgICAg
ICAgc3luY1Zpc2libGVDb250ZW50cygpOworICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEtlZXAg
dGhlIHVuYm91bmQgcG9zaXRpb24gaW4gY2FzZSB0aGUgY29udGVudHMgc2l6ZSBpcyBjaGFuZ2Vk
IGxhdGVyIG9uLgogICAgICAgICBGbG9hdFBvaW50IHBvc2l0aW9uID0gcGl4ZWxBbGlnbmVkRmxv
YXRQb2ludChGbG9hdFBvaW50KGNzc1Bvc2l0aW9uKSk7Ci0gICAgICAgIGFwcGx5UG9zaXRpb25B
ZnRlclJlbmRlcmluZ0NvbnRlbnRzKHBvc2l0aW9uKTsKKyAgICAgICAgc2V0Q29udGVudHNQb3Np
dGlvbldpdGhQZW5kaW5nQ2hhbmdlKHBvc2l0aW9uKTsKICAgICB9CiB9CiAKQEAgLTI1NiwxMCAr
MjY0LDEwIEBAIHZvaWQgUGFnZVZpZXdwb3J0Q29udHJvbGxlcjo6ZGlkQ2hhbmdlVmlld3BvcnRT
aXplKGNvbnN0IEZsb2F0U2l6ZSYgbmV3U2l6ZSkKIAogdm9pZCBQYWdlVmlld3BvcnRDb250cm9s
bGVyOjpkaWRDaGFuZ2VDb250ZW50c1Zpc2liaWxpdHkoY29uc3QgRmxvYXRQb2ludCYgcG9zaXRp
b24sIGZsb2F0IHNjYWxlLCBjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKQogewot
ICAgIGlmICghbV9wZW5kaW5nUG9zaXRpb25DaGFuZ2UpCi0gICAgICAgIG1fY29udGVudHNQb3Np
dGlvbiA9IHBvc2l0aW9uOwotICAgIGlmICghbV9wZW5kaW5nU2NhbGVDaGFuZ2UpCi0gICAgICAg
IGFwcGx5U2NhbGVBZnRlclJlbmRlcmluZ0NvbnRlbnRzKHNjYWxlKTsKKyAgICBpZiAoIW1fY2hh
bmdpbmdWaWV3cG9ydEF0dHJpYnV0ZXMpIHsKKyAgICAgICAgc2V0Q29udGVudHNQb3NpdGlvbihw
b3NpdGlvbik7CisgICAgICAgIHNldFBhZ2VTY2FsZUZhY3RvcihzY2FsZSk7CisgICAgfQogCiAg
ICAgc3luY1Zpc2libGVDb250ZW50cyh0cmFqZWN0b3J5VmVjdG9yKTsKIH0KQEAgLTI5NCw4ICsz
MDIsNyBAQCB2b2lkIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXI6OmRpZENoYW5nZVZpZXdwb3J0QXR0
cmlidXRlcyhjb25zdCBXZWJDb3JlOjpWaWV3cG9ydAogICAgIC8vIEFzIHRoZSB2aWV3cG9ydCBh
dHRyaWJ1dGVzIGFyZSBjYWxjdWxhdGVkIHdoZW4gbG9hZGluZyBwYWdlcywgYWZ0ZXIgbG9hZCwg
b3IgYWZ0ZXIKICAgICAvLyB2aWV3cG9ydCByZXNpemUsIGl0IGlzIGltcG9ydGFudCB0aGF0IHdl
IGluZm9ybSB0aGUgY2xpZW50IG9mIHRoZSBuZXcgc2NhbGUgYW5kCiAgICAgLy8gcG9zaXRpb24s
IHNvIHRoYXQgdGhlIGNvbnRlbnQgY2FuIGJlIHBvc2l0aW9uZWQgY29ycmVjdGx5IGFuZCBwaXhl
bCBhbGlnbmVkLgotICAgIG1fcGVuZGluZ1Bvc2l0aW9uQ2hhbmdlID0gdHJ1ZTsKLSAgICBtX3Bl
bmRpbmdTY2FsZUNoYW5nZSA9IHRydWU7CisgICAgbV9jaGFuZ2luZ1ZpZXdwb3J0QXR0cmlidXRl
cyA9IHRydWU7CiAKICAgICBtX2NsaWVudC0+ZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKCk7
CiB9CkBAIC0zMjMsMjYgKzMzMCw0MyBAQCB2b2lkIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXI6OnJl
c3VtZUNvbnRlbnQoKQogICAgIG1fd2ViUGFnZVByb3h5LT5yZXN1bWVBY3RpdmVET01PYmplY3Rz
QW5kQW5pbWF0aW9ucygpOwogfQogCi12b2lkIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXI6OmFwcGx5
U2NhbGVBZnRlclJlbmRlcmluZ0NvbnRlbnRzKGZsb2F0IHNjYWxlKQordm9pZCBQYWdlVmlld3Bv
cnRDb250cm9sbGVyOjpzZXRQYWdlU2NhbGVGYWN0b3JXaXRoUGVuZGluZ0NoYW5nZShmbG9hdCBz
Y2FsZSkKIHsKLSAgICBpZiAobV9wYWdlU2NhbGVGYWN0b3IgPT0gc2NhbGUpCisgICAgaWYgKCFz
ZXRQYWdlU2NhbGVGYWN0b3Ioc2NhbGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3BhZ2VT
Y2FsZUZhY3RvciA9IHNjYWxlOwogICAgIG1fcGVuZGluZ1NjYWxlQ2hhbmdlID0gdHJ1ZTsKICAg
ICBzeW5jVmlzaWJsZUNvbnRlbnRzKCk7CiB9CiAKLXZvaWQgUGFnZVZpZXdwb3J0Q29udHJvbGxl
cjo6YXBwbHlQb3NpdGlvbkFmdGVyUmVuZGVyaW5nQ29udGVudHMoY29uc3QgRmxvYXRQb2ludCYg
cG9zKQorYm9vbCBQYWdlVmlld3BvcnRDb250cm9sbGVyOjpzZXRQYWdlU2NhbGVGYWN0b3IoZmxv
YXQgc2NhbGUpCit7CisgICAgaWYgKGZ1enp5Q29tcGFyZShzY2FsZSwgbV9wYWdlU2NhbGVGYWN0
b3IsIDAuMDAwMSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fcGFnZVNjYWxlRmFj
dG9yID0gc2NhbGU7CisgICAgbV93ZWJQYWdlUHJveHktPnNjYWxlUGFnZShtX3BhZ2VTY2FsZUZh
Y3Rvciwgcm91bmRlZEludFBvaW50KG1fY29udGVudHNQb3NpdGlvbikpOworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXI6OnNldENvbnRlbnRzUG9zaXRp
b25XaXRoUGVuZGluZ0NoYW5nZShjb25zdCBGbG9hdFBvaW50JiBwb3MpCiB7Ci0gICAgaWYgKG1f
Y29udGVudHNQb3NpdGlvbiA9PSBwb3MpCisgICAgaWYgKCFzZXRDb250ZW50c1Bvc2l0aW9uKHBv
cykpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fY29udGVudHNQb3NpdGlvbiA9IHBvczsKICAg
ICBtX3BlbmRpbmdQb3NpdGlvbkNoYW5nZSA9IHRydWU7CiAgICAgc3luY1Zpc2libGVDb250ZW50
cygpOwogfQogCitib29sIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXI6OnNldENvbnRlbnRzUG9zaXRp
b24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9zKQoreworICAgIGlmIChmdXp6eUNvbXBh
cmUocG9zLCBtX2NvbnRlbnRzUG9zaXRpb24sIDAuMDAwMSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIG1fY29udGVudHNQb3NpdGlvbiA9IHBvczsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KwogYm9vbCBQYWdlVmlld3BvcnRDb250cm9sbGVyOjp1cGRhdGVNaW5pbXVtU2NhbGVUb0ZpdChi
b29sIHVzZXJJbml0aWF0ZWRVcGRhdGUpCiB7CiAgICAgaWYgKG1fdmlld3BvcnRTaXplLmlzRW1w
dHkoKSB8fCBtX2NvbnRlbnRzU2l6ZS5pc0VtcHR5KCkpCkBAIC0zNjAsMTIgKzM4NCwxMiBAQCBi
b29sIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXI6OnVwZGF0ZU1pbmltdW1TY2FsZVRvRml0KGJvb2wg
dXNlckluaXRpYXRlZFVwZGF0ZSkKIAogICAgICAgICBpZiAoIWhhc1N1c3BlbmRlZENvbnRlbnQo
KSkgewogICAgICAgICAgICAgaWYgKCFtX2hhZFVzZXJJbnRlcmFjdGlvbiB8fCAodXNlckluaXRp
YXRlZFVwZGF0ZSAmJiBjdXJyZW50bHlTY2FsZWRUb0ZpdCkpCi0gICAgICAgICAgICAgICAgYXBw
bHlTY2FsZUFmdGVyUmVuZGVyaW5nQ29udGVudHMobV9taW5pbXVtU2NhbGVUb0ZpdCk7CisgICAg
ICAgICAgICAgICAgc2V0UGFnZVNjYWxlRmFjdG9yV2l0aFBlbmRpbmdDaGFuZ2UobV9taW5pbXVt
U2NhbGVUb0ZpdCk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBFbnN1
cmUgdGhlIGVmZmVjdGl2ZSBzY2FsZSBzdGF5cyB3aXRoaW4gYm91bmRzLgogICAgICAgICAgICAg
ICAgIGZsb2F0IGJvdW5kZWRTY2FsZSA9IGlubmVyQm91bmRlZFZpZXdwb3J0U2NhbGUobV9wYWdl
U2NhbGVGYWN0b3IpOwogICAgICAgICAgICAgICAgIGlmICghZnV6enlDb21wYXJlKGJvdW5kZWRT
Y2FsZSwgbV9wYWdlU2NhbGVGYWN0b3IsIDAuMDAwMSkpCi0gICAgICAgICAgICAgICAgICAgIGFw
cGx5U2NhbGVBZnRlclJlbmRlcmluZ0NvbnRlbnRzKGJvdW5kZWRTY2FsZSk7CisgICAgICAgICAg
ICAgICAgICAgIHNldFBhZ2VTY2FsZUZhY3RvcldpdGhQZW5kaW5nQ2hhbmdlKGJvdW5kZWRTY2Fs
ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1BhZ2VWaWV3cG9ydENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9QYWdlVmlld3BvcnRDb250cm9sbGVyLmgKaW5kZXggMzVkNGI1MzNkMjA3MDJlYjI5
YTJjMjJkNzM0MjkwYmQyNGJiZDYwMy4uNDc3NTAyMDI4NGMxNDRiZDhjMjgyNjgyNjlkM2IyZjA5
YjQ4ODFjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VWaWV3cG9y
dENvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZVZpZXdwb3J0
Q29udHJvbGxlci5oCkBAIC03NCw2ICs3NCw3IEBAIHB1YmxpYzoKIAogICAgIC8vIE5vdGlmaWNh
dGlvbnMgZnJvbSB0aGUgdmlld3BvcnQuCiAgICAgdm9pZCBkaWRDaGFuZ2VWaWV3cG9ydFNpemUo
Y29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBuZXdTaXplKTsKKyAgICAvLyBUaGUgdmlld3BvcnQg
Y2FsbHMgaXQgd2hlbiBzY3JvbGwgcG9zaXRpb24gb3Igc2NhbGUgb2YgdGhlIHZpZXdwb3J0IGlz
IGNoYW5nZWQgYnkgaXRzZWxmIChlLmcuIHBhbm5pbmcgYW5pbWF0aW9uKS4KICAgICB2b2lkIGRp
ZENoYW5nZUNvbnRlbnRzVmlzaWJpbGl0eShjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgZmxv
YXQgc2NhbGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IgPSBX
ZWJDb3JlOjpGbG9hdFBvaW50Ojp6ZXJvKCkpOwogCiAgICAgLy8gTm90aWZpY2F0aW9ucyBmcm9t
IHRoZSBXZWJQcm9jZXNzLgpAQCAtODYsOSArODcsMTUgQEAgcHVibGljOgogCiBwcml2YXRlOgog
ICAgIHZvaWQgc3luY1Zpc2libGVDb250ZW50cyhjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50ICZ0
cmFqZWN0b3J5VmVjdG9yID0gV2ViQ29yZTo6RmxvYXRQb2ludDo6emVybygpKTsKLSAgICB2b2lk
IGFwcGx5U2NhbGVBZnRlclJlbmRlcmluZ0NvbnRlbnRzKGZsb2F0IHNjYWxlKTsKLSAgICB2b2lk
IGFwcGx5UG9zaXRpb25BZnRlclJlbmRlcmluZ0NvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkZsb2F0
UG9pbnQmIHBvcyk7CisKKyAgICAvLyBGb2xsb3dpbmcgdHdvIG1ldGhvZCBtdXN0IGJlIGNhbGxl
ZCB3aGVuIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXIgaXMgdGhlIHNvdXJjZSBvZiBzY2FsaW5nIG9y
IHNjcm9sbGluZyBldmVudC4KKyAgICAvLyBXZSBwZW5kIHRvIHN5bmNocm9uaXplIHNjYWxlIGFu
ZCBzY3JvbGwgdmFsdWVzIHdpdGggY2xpZW50cyBiZWNhdXNlIGl0IHRha2VzIHRpbWUgdW50aWwg
V2ViQ29yZSByZWNlaXZlcyB0aGUgZXZlbnQgYW5kIHJlc3BvbnNlcyBkaWRSZW5kZXJGcmFtZSgp
LgorICAgIHZvaWQgc2V0UGFnZVNjYWxlRmFjdG9yV2l0aFBlbmRpbmdDaGFuZ2UoZmxvYXQpOwor
ICAgIHZvaWQgc2V0Q29udGVudHNQb3NpdGlvbldpdGhQZW5kaW5nQ2hhbmdlKGNvbnN0IFdlYkNv
cmU6OkZsb2F0UG9pbnQmKTsKKwogICAgIGJvb2wgdXBkYXRlTWluaW11bVNjYWxlVG9GaXQoYm9v
bCB1c2VySW5pdGlhdGVkVXBkYXRlKTsKKyAgICBib29sIHNldFBhZ2VTY2FsZUZhY3RvcihmbG9h
dCk7CisgICAgYm9vbCBzZXRDb250ZW50c1Bvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9p
bnQmKTsKIAogICAgIFdlYlBhZ2VQcm94eSogY29uc3QgbV93ZWJQYWdlUHJveHk7CiAgICAgUGFn
ZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudCogbV9jbGllbnQ7CkBAIC0xMTAsNiArMTE3LDcgQEAg
cHJpdmF0ZToKIAogICAgIGJvb2wgbV9wZW5kaW5nUG9zaXRpb25DaGFuZ2U7CiAgICAgYm9vbCBt
X3BlbmRpbmdTY2FsZUNoYW5nZTsKKyAgICBib29sIG1fY2hhbmdpbmdWaWV3cG9ydEF0dHJpYnV0
ZXM7CiAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IG1fbGFzdEZyYW1lQ292ZXJlZFJlY3Q7CiB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VWaWV3cG9ydENv
bnRyb2xsZXJDbGllbnRFZmwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdl
Vmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmNwcAppbmRleCA4MWUwYTE5NTNhYTAzNWJiOWM2
MjdlNWEwNmVhNjIxOWJhMGYzZWU5Li41ZDlhNTc4NWFlMjZmYjM4YTMxODM2YTBhYmY0M2MzNGZi
Njg1NTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VWaWV3
cG9ydENvbnRyb2xsZXJDbGllbnRFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9lZmwvUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbC5jcHAKQEAgLTUzLDggKzUzLDYg
QEAgdm9pZCBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjpzZXRWaWV3cG9ydFBvc2l0
aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG8KICAgICBGbG9hdFBvaW50IHBvcyhjb250ZW50c1Bv
aW50KTsKICAgICBwb3Muc2NhbGUobV92aWV3LT5wYWdlU2NhbGVGYWN0b3IoKSwgbV92aWV3LT5w
YWdlU2NhbGVGYWN0b3IoKSk7CiAgICAgbV92aWV3LT5zZXRQYWdlUG9zaXRpb24ocG9zKTsKLQot
ICAgIG1fY29udHJvbGxlci0+ZGlkQ2hhbmdlQ29udGVudHNWaXNpYmlsaXR5KG1fY29udGVudFBv
c2l0aW9uLCBtX3ZpZXctPnBhZ2VTY2FsZUZhY3RvcigpKTsKIH0KIAogdm9pZCBQYWdlVmlld3Bv
cnRDb250cm9sbGVyQ2xpZW50RWZsOjpzZXRQYWdlU2NhbGVGYWN0b3IoZmxvYXQgbmV3U2NhbGUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUGFnZVZpZXdwb3J0Q29u
dHJvbGxlckNsaWVudFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9QYWdlVmll
d3BvcnRDb250cm9sbGVyQ2xpZW50UXQuY3BwCmluZGV4IGQ3ZTFjZDExYTZiMjIzNTdkOTE5MDM4
OWVjYjM1NDIxMzZlNGFjNTIuLjVmYjNkYjgwMzcwMjBjN2ZkMTAxMmRhYmQyNDRmYmU4NDJkNzMy
MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9QYWdlVmlld3BvcnRD
b250cm9sbGVyQ2xpZW50UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9Q
YWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5j
bHVkZSA8UXRRdWljay9xcXVpY2tpdGVtLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJlY3Qu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0U2l6ZS5oPgorI2luY2x1ZGUgPHd0Zi9UZW1wb3Jh
cnlDaGFuZ2UuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTQ3LDYgKzQ4LDcg
QEAgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0OjpQYWdlVmlld3BvcnRDb250cm9sbGVy
Q2xpZW50UXQoUVF1aWNrV2ViVmlldyogdmkKICAgICAsIG1fem9vbU91dFNjYWxlKDApCiAgICAg
LCBtX2lzVXNlckludGVyYWN0aW5nKGZhbHNlKQogICAgICwgbV9pZ25vcmVWaWV3cG9ydENoYW5n
ZXMoZmFsc2UpCisgICAgLCBtX2lzVmlld3BvcnRQb3NpdGlvblN5Y2hyb25pemluZ1dpdGhQYWdl
Vmlld3BvcnRDb250cm9sbGVyKGZhbHNlKQogewogICAgIG1fc2NhbGVBbmltYXRpb24tPnNldER1
cmF0aW9uKGtTY2FsZUFuaW1hdGlvbkR1cmF0aW9uTWlsbGlzKTsKICAgICBtX3NjYWxlQW5pbWF0
aW9uLT5zZXRFYXNpbmdDdXJ2ZShRRWFzaW5nQ3VydmU6Ok91dEN1YmljKTsKQEAgLTMxNywxMiAr
MzE5LDE1IEBAIFFSZWN0RiBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6Om5lYXJlc3RW
YWxpZFZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdAogdm9pZCBQYWdlVmlld3BvcnRDb250cm9s
bGVyQ2xpZW50UXQ6OnNldFZpZXdwb3J0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgY29udGVu
dHNQb2ludCkKIHsKICAgICBRUG9pbnRGIG5ld1Bvc2l0aW9uKChtX3BhZ2VJdGVtLT5wb3NpdGlv
bigpICsgUVBvaW50Rihjb250ZW50c1BvaW50KSkgKiBtX3BhZ2VJdGVtLT5jb250ZW50c1NjYWxl
KCkpOwotICAgIC8vIFRoZSBjb250ZW50WCBhbmQgY29udGVudFkgcHJvcGVydHkgY2hhbmdlcyB0
cmlnZ2VyIGEgdmlzaWJsZSByZWN0IHVwZGF0ZS4KKyAgICAvLyBQcmV2ZW50IGEgdmlzaWJsZSBy
ZWN0IHVwZGF0ZSBkdWUgdG8gdGhlIGNvbnRlbnRYIGFuZCBjb250ZW50WSBwcm9wZXJ0eSBjaGFu
Z2VzLCBiZWNhdXNlIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIFBhZ2VWaWV3cG9ydENvbnRy
b2xsZXIgc3luY2hyb25pemVzIHRoZSB2aWV3cG9ydCBwb3NpdGlvbiB0byBjbGllbnQuCisgICAg
VGVtcG9yYXJ5Q2hhbmdlPGJvb2w+IHByb3RlY3RvcihtX2lzVmlld3BvcnRQb3NpdGlvblN5Y2hy
b25pemluZ1dpdGhQYWdlVmlld3BvcnRDb250cm9sbGVyLCB0cnVlKTsKICAgICBtX3ZpZXdwb3J0
SXRlbS0+c2V0Q29udGVudFBvcyhuZXdQb3NpdGlvbik7CiB9CiAKIHZvaWQgUGFnZVZpZXdwb3J0
Q29udHJvbGxlckNsaWVudFF0OjpzZXRQYWdlU2NhbGVGYWN0b3IoZmxvYXQgbG9jYWxTY2FsZSkK
IHsKKyAgICAvLyBTZWUgdGhlIGNvbW1lbnQgaW4gc2V0Vmlld3BvcnRQb3NpdGlvbigpLgorICAg
IFRlbXBvcmFyeUNoYW5nZTxib29sPiBwcm90ZWN0b3IobV9pc1ZpZXdwb3J0UG9zaXRpb25TeWNo
cm9uaXppbmdXaXRoUGFnZVZpZXdwb3J0Q29udHJvbGxlciwgdHJ1ZSk7CiAgICAgc2NhbGVDb250
ZW50KGxvY2FsU2NhbGUpOwogfQogCkBAIC01MDMsNiArNTA4LDkgQEAgdm9pZCBQYWdlVmlld3Bv
cnRDb250cm9sbGVyQ2xpZW50UXQ6OmRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcygpCiAKIHZv
aWQgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0Ojp1cGRhdGVWaWV3cG9ydENvbnRyb2xs
ZXIoY29uc3QgUVBvaW50RiYgdHJhamVjdG9yeSkKIHsKKyAgICAvLyBTZWUgdGhlIGNvbW1lbnQg
aW4gc2V0Vmlld3BvcnRQb3NpdGlvbigpLgorICAgIGlmIChtX2lzVmlld3BvcnRQb3NpdGlvblN5
Y2hyb25pemluZ1dpdGhQYWdlVmlld3BvcnRDb250cm9sbGVyKQorICAgICAgICByZXR1cm47CiAg
ICAgRmxvYXRQb2ludCB2aWV3cG9ydFBvcyA9IG1fdmlld3BvcnRJdGVtLT5tYXBUb1dlYkNvbnRl
bnQoUVBvaW50RigpKTsKICAgICBtX2NvbnRyb2xsZXItPmRpZENoYW5nZUNvbnRlbnRzVmlzaWJp
bGl0eSh2aWV3cG9ydFBvcywgbV9wYWdlSXRlbS0+Y29udGVudHNTY2FsZSgpLCB0cmFqZWN0b3J5
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9QYWdlVmlld3Bv
cnRDb250cm9sbGVyQ2xpZW50UXQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9QYWdl
Vmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQuaAppbmRleCBmODVlOWJkMDAzMGJlMzkwOTY0YzAx
MTk5YWIzMjYzMjgzYzk1NzU2Li40OWM2NWJhYmRiMDkyYzcyZDhiMTNkNzI5NmZlMzZiMTIwNDIx
MTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUGFnZVZpZXdwb3J0
Q29udHJvbGxlckNsaWVudFF0LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1Bh
Z2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdC5oCkBAIC0xMzksNiArMTM5LDcgQEAgcHJpdmF0
ZToKICAgICBRTGlzdDxTY2FsZVN0YWNrSXRlbT4gbV9zY2FsZVN0YWNrOwogICAgIGJvb2wgbV9p
c1VzZXJJbnRlcmFjdGluZzsKICAgICBib29sIG1faWdub3JlVmlld3BvcnRDaGFuZ2VzOworICAg
IGJvb2wgbV9pc1ZpZXdwb3J0UG9zaXRpb25TeWNocm9uaXppbmdXaXRoUGFnZVZpZXdwb3J0Q29u
dHJvbGxlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>
<flag name="review"
          id="212345"
          type_id="1"
          status="-"
          setter="jturcotte"
    />
    <flag name="commit-queue"
          id="212346"
          type_id="3"
          status="-"
          setter="jturcotte"
    />
          </attachment>
      

    </bug>

</bugzilla>