<?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>173251</bug_id>
          
          <creation_ts>2017-06-12 02:50:33 -0700</creation_ts>
          <short_desc>[GTK] getPage() in WebKitWebView should return a reference instead of a pointer</short_desc>
          <delta_ts>2017-06-13 08:39:58 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</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>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>173254</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>berto</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>buildbot</cc>
    
    <cc>gustavo</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1318150</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-06-12 02:50:33 -0700</bug_when>
    <thetext>The WebPageProxy is created on WebKitWebView construction, so getPage() can only return nullptr if it&apos;s called during construction. And that can only happen when construct properties are set. It&apos;s better to check that the view has been constructed only in these particular cases and make getPage() return a reference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1318155</commentid>
    <comment_count>1</comment_count>
      <attachid>312645</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-06-12 02:54:55 -0700</bug_when>
    <thetext>Created attachment 312645
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1318156</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-06-12 02:56:32 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1318194</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-06-12 05:55:05 -0700</bug_when>
    <thetext>Committed r218097: &lt;http://trac.webkit.org/changeset/218097&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1318198</commentid>
    <comment_count>4</comment_count>
      <attachid>312645</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-06-12 05:59:17 -0700</bug_when>
    <thetext>Comment on attachment 312645
Patch

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

Nice!

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:517
&gt;  static void webkitWebViewDisconnectSettingsSignalHandlers(WebKitWebView* webView)
&gt;  {
&gt; +    if (!webkitWebViewIsConstructed(webView))
&gt; +        return;

Can this really ever be legitimately called before the WebKitWebView is constructed? It seems like you should be able to use an ASSERT here instead of an early return.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1318199</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-06-12 06:04:05 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #4)
&gt; Comment on attachment 312645 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=312645&amp;action=review
&gt; 
&gt; Nice!
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:517
&gt; &gt;  static void webkitWebViewDisconnectSettingsSignalHandlers(WebKitWebView* webView)
&gt; &gt;  {
&gt; &gt; +    if (!webkitWebViewIsConstructed(webView))
&gt; &gt; +        return;
&gt; 
&gt; Can this really ever be legitimately called before the WebKitWebView is
&gt; constructed? It seems like you should be able to use an ASSERT here instead
&gt; of an early return.

Yes, read the changelog:

&quot;The WebPageProxy is created on WebKitWebView construction, so getPage() can only return nullptr if it&apos;s called during construction. And that can only happen when construct properties are set.&quot;

construct properties are set on GObjectClass::constructor() that happens before GObjectClass::constructed(). It&apos;s also explained in the code in several comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1318294</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-06-12 11:06:32 -0700</bug_when>
    <thetext>I don&apos;t see an explanation for why signals should be disconnected before the object is constructed. That is unusual.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1318565</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-06-12 22:34:04 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #6)
&gt; I don&apos;t see an explanation for why signals should be disconnected before the
&gt; object is constructed. That is unusual.

Ah! I&apos;m sorry I thought this was the condition for connecting the signals, not to disconnect them. This is indeed a trick. Of course it can&apos;t happen, but webkitWebViewDisconnectSettingsSignalHandlers is called unconditionally in dispose, which can happen multiple times, but in dispose loaderObserer is set to nullptr, making the webkitWebViewIsConstructed false again. So this is basically preventing the signals from being disconnected more than once on destruction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1318651</commentid>
    <comment_count>8</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-06-13 08:39:58 -0700</bug_when>
    <thetext>OK!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>312645</attachid>
            <date>2017-06-12 02:54:55 -0700</date>
            <delta_ts>2017-06-12 04:49:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-webview-get-page.diff</filename>
            <type>text/plain</type>
            <size>28907</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBiNmYzYmU4NmVjMy4uZTE1ZDA5ODg1MjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEs
NSArMSw3MSBAQAogMjAxNy0wNi0xMiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CiAKKyAgICAgICAgW0dUS10gZ2V0UGFnZSgpIGluIFdlYktpdFdlYlZpZXcgc2hv
dWxkIHJldHVybiBhIHJlZmVyZW5jZSBpbnN0ZWFkIG9mIGEgcG9pbnRlcgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTczMjUxCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIFdlYlBhZ2VQcm94eSBpcyBj
cmVhdGVkIG9uIFdlYktpdFdlYlZpZXcgY29uc3RydWN0aW9uLCBzbyBnZXRQYWdlKCkgY2FuIG9u
bHkgcmV0dXJuIG51bGxwdHIgaWYgaXQncyBjYWxsZWQKKyAgICAgICAgZHVyaW5nIGNvbnN0cnVj
dGlvbi4gQW5kIHRoYXQgY2FuIG9ubHkgaGFwcGVuIHdoZW4gY29uc3RydWN0IHByb3BlcnRpZXMg
YXJlIHNldC4gSXQncyBiZXR0ZXIgdG8gY2hlY2sgdGhhdCB0aGUKKyAgICAgICAgdmlldyBoYXMg
YmVlbiBjb25zdHJ1Y3RlZCBvbmx5IGluIHRoZXNlIHBhcnRpY3VsYXIgY2FzZXMgYW5kIG1ha2Ug
Z2V0UGFnZSgpIHJldHVybiBhIHJlZmVyZW5jZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlZpZXcuY3BwOgorICAgICAgICAod2Via2l0V2ViVmlld0NyZWF0ZUphdmFT
Y3JpcHREaWFsb2cpOgorICAgICAgICAoYWxsb3dNb2RhbERpYWxvZ3NDaGFuZ2VkKTogU2V0dGlu
Z3Mgc2lnbmFscyBhcmUgb25seSBjb25uZWN0ZWQgYWZ0ZXIgdGhlIHBhZ2UgaGFzIGJlZW4gY3Jl
YXRlZCwgc28gd2UgZG9uJ3QKKyAgICAgICAgbmVlZCB0byBjaGVjayBwYWdlIGlzIGF2YWlsYWJs
ZSBoZXJlLgorICAgICAgICAoem9vbVRleHRPbmx5Q2hhbmdlZCk6CisgICAgICAgICh1c2VyQWdl
bnRDaGFuZ2VkKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdJc0NvbnN0cnVjdGVkKTogSGVscGVy
IG1ldGhvZCB0byBjaGVjayBpZiB0aGUgdmlldyBoYXMgYmVlbiBjb25zdHJ1Y3RlZC4KKyAgICAg
ICAgKHdlYmtpdFdlYlZpZXdVcGRhdGVTZXR0aW5ncyk6IFJldHVybiBlYXJseSBpZiB2aWV3IGhh
c24ndCBiZWVuIGNvbnN0cnVjdGVkLgorICAgICAgICAod2Via2l0V2ViVmlld0Rpc2Nvbm5lY3RT
ZXR0aW5nc1NpZ25hbEhhbmRsZXJzKTogRGl0dG8uCisgICAgICAgICh3ZWJraXRXZWJWaWV3Q29u
c3RydWN0ZWQpOgorICAgICAgICAod2Via2l0V2ViVmlld0Rpc3Bvc2UpOgorICAgICAgICAod2Vi
a2l0V2ViVmlld0NyZWF0ZU5ld1BhZ2UpOgorICAgICAgICAod2Via2l0V2ViVmlld1NlbGVjdGlv
bkRpZENoYW5nZSk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfdHJ5X2Nsb3NlKToKKyAgICAg
ICAgKHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdf
bG9hZF9odG1sKToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19sb2FkX2FsdGVybmF0ZV9odG1s
KToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19sb2FkX3BsYWluX3RleHQpOgorICAgICAgICAo
d2Via2l0X3dlYl92aWV3X2xvYWRfYnl0ZXMpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2xv
YWRfcmVxdWVzdCk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3BhZ2VfaWQpOgorICAg
ICAgICAod2Via2l0X3dlYl92aWV3X3JlbG9hZCk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdf
cmVsb2FkX2J5cGFzc19jYWNoZSk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfc3RvcF9sb2Fk
aW5nKToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19pc19wbGF5aW5nX2F1ZGlvKToKKyAgICAg
ICAgKHdlYmtpdF93ZWJfdmlld19nb19iYWNrKToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19j
YW5fZ29fYmFjayk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZ29fZm9yd2FyZCk6CisgICAg
ICAgICh3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQpOgorICAgICAgICAod2Via2l0X3dl
Yl92aWV3X2dldF9jdXN0b21fY2hhcnNldCk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfc2V0
X2N1c3RvbV9jaGFyc2V0KToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19nZXRfZXN0aW1hdGVk
X2xvYWRfcHJvZ3Jlc3MpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2dvX3RvX2JhY2tfZm9y
d2FyZF9saXN0X2l0ZW0pOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X3NldF96b29tX2xldmVs
KToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19nZXRfem9vbV9sZXZlbCk6CisgICAgICAgICh3
ZWJraXRfd2ViX3ZpZXdfY2FuX2V4ZWN1dGVfZWRpdGluZ19jb21tYW5kKToKKyAgICAgICAgKHdl
YmtpdF93ZWJfdmlld19leGVjdXRlX2VkaXRpbmdfY29tbWFuZCk6CisgICAgICAgICh3ZWJraXRf
d2ViX3ZpZXdfZXhlY3V0ZV9lZGl0aW5nX2NvbW1hbmRfd2l0aF9hcmd1bWVudCk6CisgICAgICAg
ICh3ZWJraXRfd2ViX3ZpZXdfcnVuX2phdmFzY3JpcHQpOgorICAgICAgICAocmVzb3VyY2VzU3Ry
ZWFtUmVhZENhbGxiYWNrKToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19nZXRfaW5zcGVjdG9y
KToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19taW1lX3R5cGUpOgorICAgICAg
ICAod2Via2l0X3dlYl92aWV3X3NhdmUpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X3NhdmVf
dG9fZmlsZSk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZG93bmxvYWRfdXJpKToKKyAgICAg
ICAgKHdlYmtpdF93ZWJfdmlld19nZXRfdGxzX2luZm8pOgorICAgICAgICAod2Via2l0X3dlYl92
aWV3X2dldF9zbmFwc2hvdCk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfc2V0X2JhY2tncm91
bmRfY29sb3IpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2dldF9iYWNrZ3JvdW5kX2NvbG9y
KToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19pc19lZGl0YWJsZSk6CisgICAgICAgICh3ZWJr
aXRfd2ViX3ZpZXdfc2V0X2VkaXRhYmxlKToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19nZXRf
ZWRpdG9yX3N0YXRlKToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19nZXRfc2Vzc2lvbl9zdGF0
ZSk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfcmVzdG9yZV9zZXNzaW9uX3N0YXRlKToKKwor
MjAxNy0wNi0xMiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisK
ICAgICAgICAgW0dUS10gTW92ZSBXZWJLaXQgR1R5cGUgbWFjcm9zIHRvIFdURgogICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTczMjQ5CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKaW5kZXgg
YjYwYWVlZTkyYmYuLjEyZjU4MTIyMGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcApAQCAtMjIwLDkgKzIyMCwxMSBAQCBzdGF0
aWMgZ3VpbnQgc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAsIH07CiAKIFdFQktJVF9ERUZJTkVf
VFlQRShXZWJLaXRXZWJWaWV3LCB3ZWJraXRfd2ViX3ZpZXcsIFdFQktJVF9UWVBFX1dFQl9WSUVX
X0JBU0UpCiAKLXN0YXRpYyBpbmxpbmUgV2ViUGFnZVByb3h5KiBnZXRQYWdlKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcpCitzdGF0aWMgaW5saW5lIFdlYlBhZ2VQcm94eSYgZ2V0UGFnZShXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3KQogewotICAgIHJldHVybiB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2Uo
cmVpbnRlcnByZXRfY2FzdDxXZWJLaXRXZWJWaWV3QmFzZSo+KHdlYlZpZXcpKTsKKyAgICBhdXRv
KiBwYWdlID0gd2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViS2l0
V2ViVmlld0Jhc2UqPih3ZWJWaWV3KSk7CisgICAgQVNTRVJUKHBhZ2UpOworICAgIHJldHVybiAq
cGFnZTsKIH0KIAogc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld1NldElzTG9hZGluZyhXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3LCBib29sIGlzTG9hZGluZykKQEAgLTI1Myw3ICsyNTUsNyBAQCBwcml2
YXRlOgogICAgIH0KICAgICB2b2lkIGRpZENoYW5nZUlzTG9hZGluZygpIG92ZXJyaWRlCiAgICAg
ewotICAgICAgICB3ZWJraXRXZWJWaWV3U2V0SXNMb2FkaW5nKG1fd2ViVmlldywgZ2V0UGFnZSht
X3dlYlZpZXcpLT5wYWdlTG9hZFN0YXRlKCkuaXNMb2FkaW5nKCkpOworICAgICAgICB3ZWJraXRX
ZWJWaWV3U2V0SXNMb2FkaW5nKG1fd2ViVmlldywgZ2V0UGFnZShtX3dlYlZpZXcpLnBhZ2VMb2Fk
U3RhdGUoKS5pc0xvYWRpbmcoKSk7CiAgICAgICAgIGdfb2JqZWN0X3RoYXdfbm90aWZ5KEdfT0JK
RUNUKG1fd2ViVmlldykpOwogICAgIH0KIApAQCAtMjYzLDcgKzI2NSw3IEBAIHByaXZhdGU6CiAg
ICAgfQogICAgIHZvaWQgZGlkQ2hhbmdlVGl0bGUoKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAg
bV93ZWJWaWV3LT5wcml2LT50aXRsZSA9IGdldFBhZ2UobV93ZWJWaWV3KS0+cGFnZUxvYWRTdGF0
ZSgpLnRpdGxlKCkudXRmOCgpOworICAgICAgICBtX3dlYlZpZXctPnByaXYtPnRpdGxlID0gZ2V0
UGFnZShtX3dlYlZpZXcpLnBhZ2VMb2FkU3RhdGUoKS50aXRsZSgpLnV0ZjgoKTsKICAgICAgICAg
Z19vYmplY3Rfbm90aWZ5KEdfT0JKRUNUKG1fd2ViVmlldyksICJ0aXRsZSIpOwogICAgICAgICBn
X29iamVjdF90aGF3X25vdGlmeShHX09CSkVDVChtX3dlYlZpZXcpKTsKICAgICB9CkBAIC0yNzQs
NyArMjc2LDcgQEAgcHJpdmF0ZToKICAgICB9CiAgICAgdm9pZCBkaWRDaGFuZ2VBY3RpdmVVUkwo
KSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgbV93ZWJWaWV3LT5wcml2LT5hY3RpdmVVUkkgPSBn
ZXRQYWdlKG1fd2ViVmlldyktPnBhZ2VMb2FkU3RhdGUoKS5hY3RpdmVVUkwoKS51dGY4KCk7Cisg
ICAgICAgIG1fd2ViVmlldy0+cHJpdi0+YWN0aXZlVVJJID0gZ2V0UGFnZShtX3dlYlZpZXcpLnBh
Z2VMb2FkU3RhdGUoKS5hY3RpdmVVUkwoKS51dGY4KCk7CiAgICAgICAgIGdfb2JqZWN0X25vdGlm
eShHX09CSkVDVChtX3dlYlZpZXcpLCAidXJpIik7CiAgICAgICAgIGdfb2JqZWN0X3RoYXdfbm90
aWZ5KEdfT0JKRUNUKG1fd2ViVmlldykpOwogICAgIH0KQEAgLTMzMSw3ICszMzMsNyBAQCBzdGF0
aWMgR3RrV2lkZ2V0KiB3ZWJraXRXZWJWaWV3Q3JlYXRlSmF2YVNjcmlwdERpYWxvZyhXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3LCBHdAogICAgICAgICBHVEtfRElBTE9HX0RFU1RST1lfV0lUSF9QQVJF
TlQsIHR5cGUsIGJ1dHRvbnMsICIlcyIsIHByaW1hcnlUZXh0KTsKICAgICBpZiAoc2Vjb25kYXJ5
VGV4dCkKICAgICAgICAgZ3RrX21lc3NhZ2VfZGlhbG9nX2Zvcm1hdF9zZWNvbmRhcnlfdGV4dChH
VEtfTUVTU0FHRV9ESUFMT0coZGlhbG9nKSwgIiVzIiwgc2Vjb25kYXJ5VGV4dCk7Ci0gICAgR1Vu
aXF1ZVB0cjxjaGFyPiB0aXRsZShnX3N0cmR1cF9wcmludGYoIkphdmFTY3JpcHQgLSAlcyIsIGdl
dFBhZ2Uod2ViVmlldyktPnBhZ2VMb2FkU3RhdGUoKS51cmwoKS51dGY4KCkuZGF0YSgpKSk7Cisg
ICAgR1VuaXF1ZVB0cjxjaGFyPiB0aXRsZShnX3N0cmR1cF9wcmludGYoIkphdmFTY3JpcHQgLSAl
cyIsIGdldFBhZ2Uod2ViVmlldykucGFnZUxvYWRTdGF0ZSgpLnVybCgpLnV0ZjgoKS5kYXRhKCkp
KTsKICAgICBndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lORE9XKGRpYWxvZyksIHRpdGxlLmdl
dCgpKTsKICAgICBpZiAoYnV0dG9ucyAhPSBHVEtfQlVUVE9OU19OT05FKQogICAgICAgICBndGtf
ZGlhbG9nX3NldF9kZWZhdWx0X3Jlc3BvbnNlKEdUS19ESUFMT0coZGlhbG9nKSwgZGVmYXVsdFJl
c3BvbnNlKTsKQEAgLTQwNywyNCArNDA5LDIxIEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJW
aWV3UGVybWlzc2lvblJlcXVlc3QoV2ViS2l0V2ViVmlldyosIFdlYktpdFBlcm1pc3Npb25SCiAK
IHN0YXRpYyB2b2lkIGFsbG93TW9kYWxEaWFsb2dzQ2hhbmdlZChXZWJLaXRTZXR0aW5ncyogc2V0
dGluZ3MsIEdQYXJhbVNwZWMqLCBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogewotICAgIFdlYlBh
Z2VQcm94eSogcGFnZSA9IHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFnZShXRUJLSVRfV0VCX1ZJRVdf
QkFTRSh3ZWJWaWV3KSk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgZ2V0
UGFnZSh3ZWJWaWV3KS0+c2V0Q2FuUnVuTW9kYWwod2Via2l0X3NldHRpbmdzX2dldF9hbGxvd19t
b2RhbF9kaWFsb2dzKHNldHRpbmdzKSk7CisgICAgZ2V0UGFnZSh3ZWJWaWV3KS5zZXRDYW5SdW5N
b2RhbCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2FsbG93X21vZGFsX2RpYWxvZ3Moc2V0dGluZ3MpKTsK
IH0KIAogc3RhdGljIHZvaWQgem9vbVRleHRPbmx5Q2hhbmdlZChXZWJLaXRTZXR0aW5ncyogc2V0
dGluZ3MsIEdQYXJhbVNwZWMqLCBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogewotICAgIFdlYlBh
Z2VQcm94eSogcGFnZSA9IGdldFBhZ2Uod2ViVmlldyk7CisgICAgYXV0byYgcGFnZSA9IGdldFBh
Z2Uod2ViVmlldyk7CiAgICAgZ2Jvb2xlYW4gem9vbVRleHRPbmx5ID0gd2Via2l0X3NldHRpbmdz
X2dldF96b29tX3RleHRfb25seShzZXR0aW5ncyk7Ci0gICAgZ2RvdWJsZSBwYWdlWm9vbUxldmVs
ID0gem9vbVRleHRPbmx5ID8gMSA6IHBhZ2UtPnRleHRab29tRmFjdG9yKCk7Ci0gICAgZ2RvdWJs
ZSB0ZXh0Wm9vbUxldmVsID0gem9vbVRleHRPbmx5ID8gcGFnZS0+cGFnZVpvb21GYWN0b3IoKSA6
IDE7Ci0gICAgcGFnZS0+c2V0UGFnZUFuZFRleHRab29tRmFjdG9ycyhwYWdlWm9vbUxldmVsLCB0
ZXh0Wm9vbUxldmVsKTsKKyAgICBnZG91YmxlIHBhZ2Vab29tTGV2ZWwgPSB6b29tVGV4dE9ubHkg
PyAxIDogcGFnZS50ZXh0Wm9vbUZhY3RvcigpOworICAgIGdkb3VibGUgdGV4dFpvb21MZXZlbCA9
IHpvb21UZXh0T25seSA/IHBhZ2UucGFnZVpvb21GYWN0b3IoKSA6IDE7CisgICAgcGFnZS5zZXRQ
YWdlQW5kVGV4dFpvb21GYWN0b3JzKHBhZ2Vab29tTGV2ZWwsIHRleHRab29tTGV2ZWwpOwogfQog
CiBzdGF0aWMgdm9pZCB1c2VyQWdlbnRDaGFuZ2VkKFdlYktpdFNldHRpbmdzKiBzZXR0aW5ncywg
R1BhcmFtU3BlYyosIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiB7Ci0gICAgZ2V0UGFnZSh3ZWJW
aWV3KS0+c2V0Q3VzdG9tVXNlckFnZW50KFN0cmluZzo6ZnJvbVVURjgod2Via2l0X3NldHRpbmdz
X2dldF91c2VyX2FnZW50KHNldHRpbmdzKSkpOworICAgIGdldFBhZ2Uod2ViVmlldykuc2V0Q3Vz
dG9tVXNlckFnZW50KFN0cmluZzo6ZnJvbVVURjgod2Via2l0X3NldHRpbmdzX2dldF91c2VyX2Fn
ZW50KHNldHRpbmdzKSkpOwogfQogCiBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3VXBkYXRlRmF2
aWNvbihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjYWlyb19zdXJmYWNlX3QqIGZhdmljb24pCkBA
IC00ODUsMTkgKzQ4NCwyNyBAQCBzdGF0aWMgdm9pZCBmYXZpY29uQ2hhbmdlZENhbGxiYWNrKFdl
YktpdEZhdmljb25EYXRhYmFzZSosIGNvbnN0IGNoYXIqIHBhZ2VVUkksCiAgICAgd2Via2l0V2Vi
Vmlld1VwZGF0ZUZhdmljb25VUkkod2ViVmlldywgZmF2aWNvblVSSSk7CiB9CiAKK3N0YXRpYyBi
b29sIHdlYmtpdFdlYlZpZXdJc0NvbnN0cnVjdGVkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7
CisgICAgLy8gVGhlIGxvYWRPYnNlcnZlciBpcyBzZXQgaW4gd2Via2l0V2ViVmlld0NvbnN0cnVj
dGVkLCByaWdodCBhZnRlciB0aGUKKyAgICAvLyBXZWJQYWdlUHJveHkgaXMgY3JlYXRlZCwgc28g
d2UgdXNlIGl0IHRvIGNoZWNrIGlmIHRoZSB2aWV3IGhhcyBiZWVuCisgICAgLy8gY29uc3RydWN0
ZWQgaW5zdGVhZCBvZiBhZGRpbmcgYSBib29sZWFuIG1lbWJlciBvbmx5IGZvciB0aGF0LgorICAg
IHJldHVybiAhIXdlYlZpZXctPnByaXYtPmxvYWRPYnNlcnZlcjsKK30KKwogc3RhdGljIHZvaWQg
d2Via2l0V2ViVmlld1VwZGF0ZVNldHRpbmdzKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiB7CiAg
ICAgLy8gVGhlICJzZXR0aW5ncyIgcHJvcGVydHkgaXMgc2V0IG9uIGNvbnN0cnVjdGlvbiwgYW5k
IGluIHRoYXQKICAgICAvLyBjYXNlIHdlYmtpdF93ZWJfdmlld19zZXRfc2V0dGluZ3MoKSB3aWxs
IGJlIGNhbGxlZCAqYmVmb3JlKiB0aGUKICAgICAvLyBXZWJQYWdlUHJveHkgaGFzIGJlZW4gY3Jl
YXRlZCBzbyB3ZSBzaG91bGQgZG8gYW4gZWFybHkgcmV0dXJuLgotICAgIFdlYlBhZ2VQcm94eSog
cGFnZSA9IGdldFBhZ2Uod2ViVmlldyk7Ci0gICAgaWYgKCFwYWdlKQorICAgIGlmICghd2Via2l0
V2ViVmlld0lzQ29uc3RydWN0ZWQod2ViVmlldykpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1
dG8mIHBhZ2UgPSBnZXRQYWdlKHdlYlZpZXcpOwogICAgIFdlYktpdFNldHRpbmdzKiBzZXR0aW5n
cyA9IHdlYlZpZXctPnByaXYtPnNldHRpbmdzLmdldCgpOwotICAgIHBhZ2UtPnNldFByZWZlcmVu
Y2VzKCp3ZWJraXRTZXR0aW5nc0dldFByZWZlcmVuY2VzKHNldHRpbmdzKSk7Ci0gICAgcGFnZS0+
c2V0Q2FuUnVuTW9kYWwod2Via2l0X3NldHRpbmdzX2dldF9hbGxvd19tb2RhbF9kaWFsb2dzKHNl
dHRpbmdzKSk7Ci0gICAgcGFnZS0+c2V0Q3VzdG9tVXNlckFnZW50KFN0cmluZzo6ZnJvbVVURjgo
d2Via2l0X3NldHRpbmdzX2dldF91c2VyX2FnZW50KHNldHRpbmdzKSkpOworICAgIHBhZ2Uuc2V0
UHJlZmVyZW5jZXMoKndlYmtpdFNldHRpbmdzR2V0UHJlZmVyZW5jZXMoc2V0dGluZ3MpKTsKKyAg
ICBwYWdlLnNldENhblJ1bk1vZGFsKHdlYmtpdF9zZXR0aW5nc19nZXRfYWxsb3dfbW9kYWxfZGlh
bG9ncyhzZXR0aW5ncykpOworICAgIHBhZ2Uuc2V0Q3VzdG9tVXNlckFnZW50KFN0cmluZzo6ZnJv
bVVURjgod2Via2l0X3NldHRpbmdzX2dldF91c2VyX2FnZW50KHNldHRpbmdzKSkpOwogCiAgICAg
Z19zaWduYWxfY29ubmVjdChzZXR0aW5ncywgIm5vdGlmeTo6YWxsb3ctbW9kYWwtZGlhbG9ncyIs
IEdfQ0FMTEJBQ0soYWxsb3dNb2RhbERpYWxvZ3NDaGFuZ2VkKSwgd2ViVmlldyk7CiAgICAgZ19z
aWduYWxfY29ubmVjdChzZXR0aW5ncywgIm5vdGlmeTo6em9vbS10ZXh0LW9ubHkiLCBHX0NBTExC
QUNLKHpvb21UZXh0T25seUNoYW5nZWQpLCB3ZWJWaWV3KTsKQEAgLTUwNiw2ICs1MTMsOSBAQCBz
dGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3VXBkYXRlU2V0dGluZ3MoV2ViS2l0V2ViVmlldyogd2Vi
VmlldykKIAogc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Rpc2Nvbm5lY3RTZXR0aW5nc1NpZ25h
bEhhbmRsZXJzKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiB7CisgICAgaWYgKCF3ZWJraXRXZWJW
aWV3SXNDb25zdHJ1Y3RlZCh3ZWJWaWV3KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgV2ViS2l0
U2V0dGluZ3MqIHNldHRpbmdzID0gd2ViVmlldy0+cHJpdi0+c2V0dGluZ3MuZ2V0KCk7CiAgICAg
Z19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKHNldHRpbmdzLCByZWludGVycHJl
dF9jYXN0PGdwb2ludGVyPihhbGxvd01vZGFsRGlhbG9nc0NoYW5nZWQpLCB3ZWJWaWV3KTsKICAg
ICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMoc2V0dGluZ3MsIHJlaW50ZXJw
cmV0X2Nhc3Q8Z3BvaW50ZXI+KHpvb21UZXh0T25seUNoYW5nZWQpLCB3ZWJWaWV3KTsKQEAgLTY4
Myw3ICs2OTMsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3Q29uc3RydWN0ZWQoR09iamVj
dCogb2JqZWN0KQogICAgIHdlYmtpdFdlYkNvbnRleHRDcmVhdGVQYWdlRm9yV2ViVmlldyhwcml2
LT5jb250ZXh0LmdldCgpLCB3ZWJWaWV3LCBwcml2LT51c2VyQ29udGVudE1hbmFnZXIuZ2V0KCks
IHByaXYtPnJlbGF0ZWRWaWV3KTsKIAogICAgIHByaXYtPmxvYWRPYnNlcnZlciA9IHN0ZDo6bWFr
ZV91bmlxdWU8UGFnZUxvYWRTdGF0ZU9ic2VydmVyPih3ZWJWaWV3KTsKLSAgICBnZXRQYWdlKHdl
YlZpZXcpLT5wYWdlTG9hZFN0YXRlKCkuYWRkT2JzZXJ2ZXIoKnByaXYtPmxvYWRPYnNlcnZlcik7
CisgICAgZ2V0UGFnZSh3ZWJWaWV3KS5wYWdlTG9hZFN0YXRlKCkuYWRkT2JzZXJ2ZXIoKnByaXYt
PmxvYWRPYnNlcnZlcik7CiAKICAgICAvLyBUaGUgcmVsYXRlZCB2aWV3IGlzIG9ubHkgdmFsaWQg
ZHVyaW5nIHRoZSBjb25zdHJ1Y3Rpb24uCiAgICAgcHJpdi0+cmVsYXRlZFZpZXcgPSBudWxscHRy
OwpAQCAtNjk4LDcgKzcwOCw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdDb25zdHJ1Y3Rl
ZChHT2JqZWN0KiBvYmplY3QpCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMzU0MTIuCiAgICAgd2Via2l0V2ViVmlld1VwZGF0ZVNldHRpbmdzKHdl
YlZpZXcpOwogCi0gICAgcHJpdi0+YmFja0ZvcndhcmRMaXN0ID0gYWRvcHRHUmVmKHdlYmtpdEJh
Y2tGb3J3YXJkTGlzdENyZWF0ZSgmZ2V0UGFnZSh3ZWJWaWV3KS0+YmFja0ZvcndhcmRMaXN0KCkp
KTsKKyAgICBwcml2LT5iYWNrRm9yd2FyZExpc3QgPSBhZG9wdEdSZWYod2Via2l0QmFja0Zvcndh
cmRMaXN0Q3JlYXRlKCZnZXRQYWdlKHdlYlZpZXcpLmJhY2tGb3J3YXJkTGlzdCgpKSk7CiAgICAg
cHJpdi0+d2luZG93UHJvcGVydGllcyA9IGFkb3B0R1JlZih3ZWJraXRXaW5kb3dQcm9wZXJ0aWVz
Q3JlYXRlKCkpOwogfQogCkBAIC04MDEsNyArODExLDcgQEAgc3RhdGljIHZvaWQgd2Via2l0V2Vi
Vmlld0Rpc3Bvc2UoR09iamVjdCogb2JqZWN0KQogICAgIHdlYmtpdFdlYlZpZXdEaXNjb25uZWN0
RmF2aWNvbkRhdGFiYXNlU2lnbmFsSGFuZGxlcnMod2ViVmlldyk7CiAKICAgICBpZiAod2ViVmll
dy0+cHJpdi0+bG9hZE9ic2VydmVyKSB7Ci0gICAgICAgIGdldFBhZ2Uod2ViVmlldyktPnBhZ2VM
b2FkU3RhdGUoKS5yZW1vdmVPYnNlcnZlcigqd2ViVmlldy0+cHJpdi0+bG9hZE9ic2VydmVyKTsK
KyAgICAgICAgZ2V0UGFnZSh3ZWJWaWV3KS5wYWdlTG9hZFN0YXRlKCkucmVtb3ZlT2JzZXJ2ZXIo
KndlYlZpZXctPnByaXYtPmxvYWRPYnNlcnZlcik7CiAgICAgICAgIHdlYlZpZXctPnByaXYtPmxv
YWRPYnNlcnZlci5yZXNldCgpOwogCiAgICAgICAgIC8vIFdlIG5vdGlmeSB0aGUgY29udGV4dCBo
ZXJlIHRvIGVuc3VyZSBpdCdzIGNhbGxlZCBvbmx5IG9uY2UuIElkZWFsbHkgd2Ugc2hvdWxkCkBA
IC0xOTQ0LDcgKzE5NTQsNyBAQCBXZWJQYWdlUHJveHkqIHdlYmtpdFdlYlZpZXdDcmVhdGVOZXdQ
YWdlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IFdpbmRvd0ZlYQogCiAgICAgd2Via2l0
V2luZG93UHJvcGVydGllc1VwZGF0ZUZyb21XZWJXaW5kb3dGZWF0dXJlcyhuZXdXZWJWaWV3LT5w
cml2LT53aW5kb3dQcm9wZXJ0aWVzLmdldCgpLCB3aW5kb3dGZWF0dXJlcyk7CiAKLSAgICBSZWZQ
dHI8V2ViUGFnZVByb3h5PiBuZXdQYWdlID0gZ2V0UGFnZShuZXdXZWJWaWV3KTsKKyAgICBSZWZQ
dHI8V2ViUGFnZVByb3h5PiBuZXdQYWdlID0gJmdldFBhZ2UobmV3V2ViVmlldyk7CiAgICAgcmV0
dXJuIG5ld1BhZ2UubGVha1JlZigpOwogfQogCkBAIC0yMTc0LDcgKzIxODQsNyBAQCB2b2lkIHdl
YmtpdFdlYlZpZXdTZWxlY3Rpb25EaWRDaGFuZ2UoV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAg
ICBpZiAoIXdlYlZpZXctPnByaXYtPmVkaXRvclN0YXRlKQogICAgICAgICByZXR1cm47CiAKLSAg
ICB3ZWJraXRFZGl0b3JTdGF0ZUNoYW5nZWQod2ViVmlldy0+cHJpdi0+ZWRpdG9yU3RhdGUuZ2V0
KCksIGdldFBhZ2Uod2ViVmlldyktPmVkaXRvclN0YXRlKCkpOworICAgIHdlYmtpdEVkaXRvclN0
YXRlQ2hhbmdlZCh3ZWJWaWV3LT5wcml2LT5lZGl0b3JTdGF0ZS5nZXQoKSwgZ2V0UGFnZSh3ZWJW
aWV3KS5lZGl0b3JTdGF0ZSgpKTsKIH0KIAogdm9pZCB3ZWJraXRXZWJWaWV3UmVxdWVzdEluc3Rh
bGxNaXNzaW5nTWVkaWFQbHVnaW5zKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEluc3RhbGxNaXNz
aW5nTWVkaWFQbHVnaW5zUGVybWlzc2lvblJlcXVlc3QmIHJlcXVlc3QpCkBAIC0yNDA0LDcgKzI0
MTQsNyBAQCBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIHdlYmtpdF93ZWJfdmlld19nZXRfd2Vi
c2l0ZV9kYXRhX21hbmFnZXIoV2ViS2l0V2ViVmlldwogdm9pZCB3ZWJraXRfd2ViX3ZpZXdfdHJ5
X2Nsb3NlKFdlYktpdFdlYlZpZXcgKndlYlZpZXcpCiB7CiAgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldykpOwotICAgIGlmIChnZXRQYWdlKHdlYlZpZXcpLT50
cnlDbG9zZSgpKQorICAgIGlmIChnZXRQYWdlKHdlYlZpZXcpLnRyeUNsb3NlKCkpCiAgICAgICAg
IHdlYmtpdFdlYlZpZXdDbG9zZVBhZ2Uod2ViVmlldyk7CiB9CiAKQEAgLTI0MjMsNyArMjQzMyw3
IEBAIHZvaWQgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcs
IGNvbnN0IGdjaGFyKiB1cmkpCiAgICAgZ19yZXR1cm5faWZfZmFpbCh1cmkpOwogCiAgICAgR1Vu
aXF1ZVB0cjxTb3VwVVJJPiBzb3VwVVJJKHNvdXBfdXJpX25ldyh1cmkpKTsKLSAgICBnZXRQYWdl
KHdlYlZpZXcpLT5sb2FkUmVxdWVzdChVUkwoc291cFVSSS5nZXQoKSkpOworICAgIGdldFBhZ2Uo
d2ViVmlldykubG9hZFJlcXVlc3QoVVJMKHNvdXBVUkkuZ2V0KCkpKTsKIH0KIAogLyoqCkBAIC0y
NDQ3LDcgKzI0NTcsNyBAQCB2b2lkIHdlYmtpdF93ZWJfdmlld19sb2FkX2h0bWwoV2ViS2l0V2Vi
Vmlldyogd2ViVmlldywgY29uc3QgZ2NoYXIqIGNvbnRlbnQsIGNvbgogICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpKTsKICAgICBnX3JldHVybl9pZl9mYWls
KGNvbnRlbnQpOwogCi0gICAgZ2V0UGFnZSh3ZWJWaWV3KS0+bG9hZEhUTUxTdHJpbmcoU3RyaW5n
Ojpmcm9tVVRGOChjb250ZW50KSwgU3RyaW5nOjpmcm9tVVRGOChiYXNlVVJJKSk7CisgICAgZ2V0
UGFnZSh3ZWJWaWV3KS5sb2FkSFRNTFN0cmluZyhTdHJpbmc6OmZyb21VVEY4KGNvbnRlbnQpLCBT
dHJpbmc6OmZyb21VVEY4KGJhc2VVUkkpKTsKIH0KIAogLyoqCkBAIC0yNDY5LDcgKzI0NzksNyBA
QCB2b2lkIHdlYmtpdF93ZWJfdmlld19sb2FkX2FsdGVybmF0ZV9odG1sKFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcsIGNvbnN0IGdjaGFyKiBjbwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udGVudCk7
CiAgICAgZ19yZXR1cm5faWZfZmFpbChjb250ZW50VVJJKTsKIAotICAgIGdldFBhZ2Uod2ViVmll
dyktPmxvYWRBbHRlcm5hdGVIVE1MU3RyaW5nKFN0cmluZzo6ZnJvbVVURjgoY29udGVudCksIFN0
cmluZzo6ZnJvbVVURjgoYmFzZVVSSSksIFN0cmluZzo6ZnJvbVVURjgoY29udGVudFVSSSkpOwor
ICAgIGdldFBhZ2Uod2ViVmlldykubG9hZEFsdGVybmF0ZUhUTUxTdHJpbmcoU3RyaW5nOjpmcm9t
VVRGOChjb250ZW50KSwgU3RyaW5nOjpmcm9tVVRGOChiYXNlVVJJKSwgU3RyaW5nOjpmcm9tVVRG
OChjb250ZW50VVJJKSk7CiB9CiAKIC8qKgpAQCAtMjQ4Niw3ICsyNDk2LDcgQEAgdm9pZCB3ZWJr
aXRfd2ViX3ZpZXdfbG9hZF9wbGFpbl90ZXh0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0
IGdjaGFyKiBwbGFpblQKICAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3
ZWJWaWV3KSk7CiAgICAgZ19yZXR1cm5faWZfZmFpbChwbGFpblRleHQpOwogCi0gICAgZ2V0UGFn
ZSh3ZWJWaWV3KS0+bG9hZFBsYWluVGV4dFN0cmluZyhTdHJpbmc6OmZyb21VVEY4KHBsYWluVGV4
dCkpOworICAgIGdldFBhZ2Uod2ViVmlldykubG9hZFBsYWluVGV4dFN0cmluZyhTdHJpbmc6OmZy
b21VVEY4KHBsYWluVGV4dCkpOwogfQogCiBzdGF0aWMgdm9pZCByZWxlYXNlR0J5dGVzKHVuc2ln
bmVkIGNoYXIqLCBjb25zdCB2b2lkKiBieXRlcykKQEAgLTI1MjQsNyArMjUzNCw3IEBAIHZvaWQg
d2Via2l0X3dlYl92aWV3X2xvYWRfYnl0ZXMoV2ViS2l0V2ViVmlldyogd2ViVmlldywgR0J5dGVz
KiBieXRlcywgY29uc3QgY2hhCiAgICAgZ19ieXRlc19yZWYoYnl0ZXMpOwogCiAgICAgUmVmPEFQ
STo6RGF0YT4gZGF0YSA9IEFQSTo6RGF0YTo6Y3JlYXRlV2l0aG91dENvcHlpbmcoc3RhdGljX2Nh
c3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGJ5dGVzRGF0YSksIGJ5dGVzRGF0YVNpemUsIHJlbGVh
c2VHQnl0ZXMsIGJ5dGVzKTsKLSAgICBnZXRQYWdlKHdlYlZpZXcpLT5sb2FkRGF0YShkYXRhLnB0
cigpLCBtaW1lVHlwZSA/IFN0cmluZzo6ZnJvbVVURjgobWltZVR5cGUpIDogU3RyaW5nOjpmcm9t
VVRGOCgidGV4dC9odG1sIiksCisgICAgZ2V0UGFnZSh3ZWJWaWV3KS5sb2FkRGF0YShkYXRhLnB0
cigpLCBtaW1lVHlwZSA/IFN0cmluZzo6ZnJvbVVURjgobWltZVR5cGUpIDogU3RyaW5nOjpmcm9t
VVRGOCgidGV4dC9odG1sIiksCiAgICAgICAgIGVuY29kaW5nID8gU3RyaW5nOjpmcm9tVVRGOChl
bmNvZGluZykgOiBTdHJpbmc6OmZyb21VVEY4KCJVVEYtOCIpLCBTdHJpbmc6OmZyb21VVEY4KGJh
c2VVUkkpKTsKIH0KIApAQCAtMjU0NCw3ICsyNTU0LDcgQEAgdm9pZCB3ZWJraXRfd2ViX3ZpZXdf
bG9hZF9yZXF1ZXN0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFVSSVJlcXVlc3QqIHJl
cXUKIAogICAgIFJlc291cmNlUmVxdWVzdCByZXNvdXJjZVJlcXVlc3Q7CiAgICAgd2Via2l0VVJJ
UmVxdWVzdEdldFJlc291cmNlUmVxdWVzdChyZXF1ZXN0LCByZXNvdXJjZVJlcXVlc3QpOwotICAg
IGdldFBhZ2Uod2ViVmlldyktPmxvYWRSZXF1ZXN0KHJlc291cmNlUmVxdWVzdCk7CisgICAgZ2V0
UGFnZSh3ZWJWaWV3KS5sb2FkUmVxdWVzdChyZXNvdXJjZVJlcXVlc3QpOwogfQogCiAvKioKQEAg
LTI1NjAsNyArMjU3MCw3IEBAIGd1aW50NjQgd2Via2l0X3dlYl92aWV3X2dldF9wYWdlX2lkKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcpCiB7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0lTX1dFQl9WSUVXKHdlYlZpZXcpLCAwKTsKIAotICAgIHJldHVybiBnZXRQYWdlKHdlYlZpZXcp
LT5wYWdlSUQoKTsKKyAgICByZXR1cm4gZ2V0UGFnZSh3ZWJWaWV3KS5wYWdlSUQoKTsKIH0KIAog
LyoqCkBAIC0yNTkxLDcgKzI2MDEsNyBAQCB2b2lkIHdlYmtpdF93ZWJfdmlld19yZWxvYWQoV2Vi
S2l0V2ViVmlldyogd2ViVmlldykKIHsKICAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19X
RUJfVklFVyh3ZWJWaWV3KSk7CiAKLSAgICBnZXRQYWdlKHdlYlZpZXcpLT5yZWxvYWQoeyB9KTsK
KyAgICBnZXRQYWdlKHdlYlZpZXcpLnJlbG9hZCh7IH0pOwogfQogCiAvKioKQEAgLTI2MDUsNyAr
MjYxNSw3IEBAIHZvaWQgd2Via2l0X3dlYl92aWV3X3JlbG9hZF9ieXBhc3NfY2FjaGUoV2ViS2l0
V2ViVmlldyogd2ViVmlldykKIHsKICAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJf
VklFVyh3ZWJWaWV3KSk7CiAKLSAgICBnZXRQYWdlKHdlYlZpZXcpLT5yZWxvYWQoV2ViQ29yZTo6
UmVsb2FkT3B0aW9uOjpGcm9tT3JpZ2luKTsKKyAgICBnZXRQYWdlKHdlYlZpZXcpLnJlbG9hZChX
ZWJDb3JlOjpSZWxvYWRPcHRpb246OkZyb21PcmlnaW4pOwogfQogCiAvKioKQEAgLTI2MjIsNyAr
MjYzMiw3IEBAIHZvaWQgd2Via2l0X3dlYl92aWV3X3N0b3BfbG9hZGluZyhXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3KQogewogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdl
YlZpZXcpKTsKIAotICAgIGdldFBhZ2Uod2ViVmlldyktPnN0b3BMb2FkaW5nKCk7CisgICAgZ2V0
UGFnZSh3ZWJWaWV3KS5zdG9wTG9hZGluZygpOwogfQogCiAvKioKQEAgLTI2NjMsNyArMjY3Myw3
IEBAIGdib29sZWFuIHdlYmtpdF93ZWJfdmlld19pc19wbGF5aW5nX2F1ZGlvKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcpCiB7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9W
SUVXKHdlYlZpZXcpLCBGQUxTRSk7CiAKLSAgICByZXR1cm4gZ2V0UGFnZSh3ZWJWaWV3KS0+aXNQ
bGF5aW5nQXVkaW8oKTsKKyAgICByZXR1cm4gZ2V0UGFnZSh3ZWJWaWV3KS5pc1BsYXlpbmdBdWRp
bygpOwogfQogCiAvKioKQEAgLTI2NzgsNyArMjY4OCw3IEBAIHZvaWQgd2Via2l0X3dlYl92aWV3
X2dvX2JhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldykKIHsKICAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSk7CiAKLSAgICBnZXRQYWdlKHdlYlZpZXcpLT5n
b0JhY2soKTsKKyAgICBnZXRQYWdlKHdlYlZpZXcpLmdvQmFjaygpOwogfQogCiAvKioKQEAgLTI2
OTMsNyArMjcwMyw3IEBAIGdib29sZWFuIHdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayhXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3KQogewogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9J
U19XRUJfVklFVyh3ZWJWaWV3KSwgRkFMU0UpOwogCi0gICAgcmV0dXJuICEhZ2V0UGFnZSh3ZWJW
aWV3KS0+YmFja0ZvcndhcmRMaXN0KCkuYmFja0l0ZW0oKTsKKyAgICByZXR1cm4gISFnZXRQYWdl
KHdlYlZpZXcpLmJhY2tGb3J3YXJkTGlzdCgpLmJhY2tJdGVtKCk7CiB9CiAKIC8qKgpAQCAtMjcw
OCw3ICsyNzE4LDcgQEAgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZ29fZm9yd2FyZChXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3KQogewogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVX
KHdlYlZpZXcpKTsKIAotICAgIGdldFBhZ2Uod2ViVmlldyktPmdvRm9yd2FyZCgpOworICAgIGdl
dFBhZ2Uod2ViVmlldykuZ29Gb3J3YXJkKCk7CiB9CiAKIC8qKgpAQCAtMjcyMyw3ICsyNzMzLDcg
QEAgZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcpCiB7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVX
KHdlYlZpZXcpLCBGQUxTRSk7CiAKLSAgICByZXR1cm4gISFnZXRQYWdlKHdlYlZpZXcpLT5iYWNr
Rm9yd2FyZExpc3QoKS5mb3J3YXJkSXRlbSgpOworICAgIHJldHVybiAhIWdldFBhZ2Uod2ViVmll
dykuYmFja0ZvcndhcmRMaXN0KCkuZm9yd2FyZEl0ZW0oKTsKIH0KIAogLyoqCkBAIC0yODI0LDcg
KzI4MzQsNyBAQCBjb25zdCBnY2hhciogd2Via2l0X3dlYl92aWV3X2dldF9jdXN0b21fY2hhcnNl
dChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogewogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwgMCk7CiAKLSAgICBTdHJpbmcgY3VzdG9tVGV4dEVu
Y29kaW5nID0gZ2V0UGFnZSh3ZWJWaWV3KS0+Y3VzdG9tVGV4dEVuY29kaW5nTmFtZSgpOworICAg
IFN0cmluZyBjdXN0b21UZXh0RW5jb2RpbmcgPSBnZXRQYWdlKHdlYlZpZXcpLmN1c3RvbVRleHRF
bmNvZGluZ05hbWUoKTsKICAgICBpZiAoY3VzdG9tVGV4dEVuY29kaW5nLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAKQEAgLTI4NDcsNyArMjg1Nyw3IEBAIHZvaWQgd2Via2l0X3dlYl92
aWV3X3NldF9jdXN0b21fY2hhcnNldChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBnY2hh
ciogY2hhCiB7CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmll
dykpOwogCi0gICAgZ2V0UGFnZSh3ZWJWaWV3KS0+c2V0Q3VzdG9tVGV4dEVuY29kaW5nTmFtZShT
dHJpbmc6OmZyb21VVEY4KGNoYXJzZXQpKTsKKyAgICBnZXRQYWdlKHdlYlZpZXcpLnNldEN1c3Rv
bVRleHRFbmNvZGluZ05hbWUoU3RyaW5nOjpmcm9tVVRGOChjaGFyc2V0KSk7CiB9CiAKIC8qKgpA
QCAtMjg2NCw3ICsyODc0LDcgQEAgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfc2V0X2N1c3RvbV9jaGFy
c2V0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IGdjaGFyKiBjaGEKIGdkb3VibGUgd2Vi
a2l0X3dlYl92aWV3X2dldF9lc3RpbWF0ZWRfbG9hZF9wcm9ncmVzcyhXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3KQogewogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3
ZWJWaWV3KSwgMCk7Ci0gICAgcmV0dXJuIGdldFBhZ2Uod2ViVmlldyktPnBhZ2VMb2FkU3RhdGUo
KS5lc3RpbWF0ZWRQcm9ncmVzcygpOworICAgIHJldHVybiBnZXRQYWdlKHdlYlZpZXcpLnBhZ2VM
b2FkU3RhdGUoKS5lc3RpbWF0ZWRQcm9ncmVzcygpOwogfQogCiAvKioKQEAgLTI4OTcsNyArMjkw
Nyw3IEBAIHZvaWQgd2Via2l0X3dlYl92aWV3X2dvX3RvX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW0o
V2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfSVNfV0VCX1ZJRVcod2ViVmlldykpOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lT
X0JBQ0tfRk9SV0FSRF9MSVNUX0lURU0obGlzdEl0ZW0pKTsKIAotICAgIGdldFBhZ2Uod2ViVmll
dyktPmdvVG9CYWNrRm9yd2FyZEl0ZW0od2Via2l0QmFja0ZvcndhcmRMaXN0SXRlbUdldEl0ZW0o
bGlzdEl0ZW0pKTsKKyAgICBnZXRQYWdlKHdlYlZpZXcpLmdvVG9CYWNrRm9yd2FyZEl0ZW0od2Vi
a2l0QmFja0ZvcndhcmRMaXN0SXRlbUdldEl0ZW0obGlzdEl0ZW0pKTsKIH0KIAogLyoqCkBAIC0y
OTg4LDExICsyOTk4LDExIEBAIHZvaWQgd2Via2l0X3dlYl92aWV3X3NldF96b29tX2xldmVsKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcsIGdkb3VibGUgem9vbUxldmVsKQogICAgIGlmICh3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3pvb21fbGV2ZWwod2ViVmlldykgPT0gem9vbUxldmVsKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSBnZXRQYWdlKHdlYlZpZXcpOworICAg
IGF1dG8mIHBhZ2UgPSBnZXRQYWdlKHdlYlZpZXcpOwogICAgIGlmICh3ZWJraXRfc2V0dGluZ3Nf
Z2V0X3pvb21fdGV4dF9vbmx5KHdlYlZpZXctPnByaXYtPnNldHRpbmdzLmdldCgpKSkKLSAgICAg
ICAgcGFnZS0+c2V0VGV4dFpvb21GYWN0b3Ioem9vbUxldmVsKTsKKyAgICAgICAgcGFnZS5zZXRU
ZXh0Wm9vbUZhY3Rvcih6b29tTGV2ZWwpOwogICAgIGVsc2UKLSAgICAgICAgcGFnZS0+c2V0UGFn
ZVpvb21GYWN0b3Ioem9vbUxldmVsKTsKKyAgICAgICAgcGFnZS5zZXRQYWdlWm9vbUZhY3Rvcih6
b29tTGV2ZWwpOwogICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVCh3ZWJWaWV3KSwgInpvb20t
bGV2ZWwiKTsKIH0KIApAQCAtMzAwOSw5ICszMDE5LDkgQEAgZ2RvdWJsZSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X3pvb21fbGV2ZWwoV2ViS2l0V2ViVmlldyogd2ViVmlldykKIHsKICAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldyksIDEpOwogCi0gICAgV2Vi
UGFnZVByb3h5KiBwYWdlID0gZ2V0UGFnZSh3ZWJWaWV3KTsKKyAgICBhdXRvJiBwYWdlID0gZ2V0
UGFnZSh3ZWJWaWV3KTsKICAgICBnYm9vbGVhbiB6b29tVGV4dE9ubHkgPSB3ZWJraXRfc2V0dGlu
Z3NfZ2V0X3pvb21fdGV4dF9vbmx5KHdlYlZpZXctPnByaXYtPnNldHRpbmdzLmdldCgpKTsKLSAg
ICByZXR1cm4gem9vbVRleHRPbmx5ID8gcGFnZS0+dGV4dFpvb21GYWN0b3IoKSA6IHBhZ2UtPnBh
Z2Vab29tRmFjdG9yKCk7CisgICAgcmV0dXJuIHpvb21UZXh0T25seSA/IHBhZ2UudGV4dFpvb21G
YWN0b3IoKSA6IHBhZ2UucGFnZVpvb21GYWN0b3IoKTsKIH0KIAogLyoqCkBAIC0zMDMzLDcgKzMw
NDMsNyBAQCB2b2lkIHdlYmtpdF93ZWJfdmlld19jYW5fZXhlY3V0ZV9lZGl0aW5nX2NvbW1hbmQo
V2ViS2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgYwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29t
bWFuZCk7CiAKICAgICBHVGFzayogdGFzayA9IGdfdGFza19uZXcod2ViVmlldywgY2FuY2VsbGFi
bGUsIGNhbGxiYWNrLCB1c2VyRGF0YSk7Ci0gICAgZ2V0UGFnZSh3ZWJWaWV3KS0+dmFsaWRhdGVD
b21tYW5kKFN0cmluZzo6ZnJvbVVURjgoY29tbWFuZCksIFt0YXNrXShjb25zdCBTdHJpbmcmLCBi
b29sIGlzRW5hYmxlZCwgaW50MzJfdCwgV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yKSB7Cisg
ICAgZ2V0UGFnZSh3ZWJWaWV3KS52YWxpZGF0ZUNvbW1hbmQoU3RyaW5nOjpmcm9tVVRGOChjb21t
YW5kKSwgW3Rhc2tdKGNvbnN0IFN0cmluZyYsIGJvb2wgaXNFbmFibGVkLCBpbnQzMl90LCBXZWJL
aXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9ib29sZWFu
KGFkb3B0R1JlZih0YXNrKS5nZXQoKSwgaXNFbmFibGVkKTsgICAgICAgIAogICAgIH0pOwogfQpA
QCAtMzA3MCw3ICszMDgwLDcgQEAgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZXhlY3V0ZV9lZGl0aW5n
X2NvbW1hbmQoV2ViS2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgY2hhcioKICAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSk7CiAgICAgZ19yZXR1cm5faWZf
ZmFpbChjb21tYW5kKTsKIAotICAgIGdldFBhZ2Uod2ViVmlldyktPmV4ZWN1dGVFZGl0Q29tbWFu
ZChTdHJpbmc6OmZyb21VVEY4KGNvbW1hbmQpKTsKKyAgICBnZXRQYWdlKHdlYlZpZXcpLmV4ZWN1
dGVFZGl0Q29tbWFuZChTdHJpbmc6OmZyb21VVEY4KGNvbW1hbmQpKTsKIH0KIAogLyoqCkBAIC0z
MDkxLDcgKzMxMDEsNyBAQCB2b2lkIHdlYmtpdF93ZWJfdmlld19leGVjdXRlX2VkaXRpbmdfY29t
bWFuZF93aXRoX2FyZ3VtZW50KFdlYktpdFdlYlZpZXcqIHdlYlZpZQogICAgIGdfcmV0dXJuX2lm
X2ZhaWwoY29tbWFuZCk7CiAgICAgZ19yZXR1cm5faWZfZmFpbChhcmd1bWVudCk7CiAKLSAgICBn
ZXRQYWdlKHdlYlZpZXcpLT5leGVjdXRlRWRpdENvbW1hbmQoU3RyaW5nOjpmcm9tVVRGOChjb21t
YW5kKSwgU3RyaW5nOjpmcm9tVVRGOChhcmd1bWVudCkpOworICAgIGdldFBhZ2Uod2ViVmlldyku
ZXhlY3V0ZUVkaXRDb21tYW5kKFN0cmluZzo6ZnJvbVVURjgoY29tbWFuZCksIFN0cmluZzo6ZnJv
bVVURjgoYXJndW1lbnQpKTsKIH0KIAogLyoqCkBAIC0zMTg0LDcgKzMxOTQsNyBAQCB2b2lkIHdl
YmtpdF93ZWJfdmlld19ydW5famF2YXNjcmlwdChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25z
dCBnY2hhciogc2NyaXB0LAogICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2NyaXB0KTsKIAogICAgIEdU
YXNrKiB0YXNrID0gZ190YXNrX25ldyh3ZWJWaWV3LCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVz
ZXJEYXRhKTsKLSAgICBnZXRQYWdlKHdlYlZpZXcpLT5ydW5KYXZhU2NyaXB0SW5NYWluRnJhbWUo
U3RyaW5nOjpmcm9tVVRGOChzY3JpcHQpLCBbdGFza10oQVBJOjpTZXJpYWxpemVkU2NyaXB0VmFs
dWUqIHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSwgYm9vbCwgY29uc3QgV2ViQ29yZTo6RXhjZXB0aW9u
RGV0YWlscyYgZXhjZXB0aW9uRGV0YWlscywgV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yKSB7
CisgICAgZ2V0UGFnZSh3ZWJWaWV3KS5ydW5KYXZhU2NyaXB0SW5NYWluRnJhbWUoU3RyaW5nOjpm
cm9tVVRGOChzY3JpcHQpLCBbdGFza10oQVBJOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUqIHNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZSwgYm9vbCwgY29uc3QgV2ViQ29yZTo6RXhjZXB0aW9uRGV0YWlscyYg
ZXhjZXB0aW9uRGV0YWlscywgV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yKSB7CiAgICAgICAg
IHdlYmtpdFdlYlZpZXdSdW5KYXZhU2NyaXB0Q2FsbGJhY2soc2VyaWFsaXplZFNjcmlwdFZhbHVl
LCBleGNlcHRpb25EZXRhaWxzLCBhZG9wdEdSZWYodGFzaykuZ2V0KCkpOwogICAgIH0pOwogfQpA
QCAtMzI3NCw3ICszMjg0LDcgQEAgc3RhdGljIHZvaWQgcmVzb3VyY2VzU3RyZWFtUmVhZENhbGxi
YWNrKEdPYmplY3QqIG9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIGcKIAogICAgIFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcoZ190YXNrX2dldF9zb3VyY2Vfb2Jq
ZWN0KHRhc2suZ2V0KCkpKTsKICAgICBncG9pbnRlciBvdXRwdXRTdHJlYW1EYXRhID0gZ19tZW1v
cnlfb3V0cHV0X3N0cmVhbV9nZXRfZGF0YShHX01FTU9SWV9PVVRQVVRfU1RSRUFNKG9iamVjdCkp
OwotICAgIGdldFBhZ2Uod2ViVmlldyktPnJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZShTdHJpbmc6
OmZyb21VVEY4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZ2NoYXIqPihvdXRwdXRTdHJlYW1EYXRh
KSksCisgICAgZ2V0UGFnZSh3ZWJWaWV3KS5ydW5KYXZhU2NyaXB0SW5NYWluRnJhbWUoU3RyaW5n
Ojpmcm9tVVRGOChyZWludGVycHJldF9jYXN0PGNvbnN0IGdjaGFyKj4ob3V0cHV0U3RyZWFtRGF0
YSkpLAogICAgICAgICBbdGFza10oQVBJOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUqIHNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZSwgYm9vbCwgY29uc3QgV2ViQ29yZTo6RXhjZXB0aW9uRGV0YWlscyYgZXhj
ZXB0aW9uRGV0YWlscywgV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yKSB7CiAgICAgICAgICAg
ICB3ZWJraXRXZWJWaWV3UnVuSmF2YVNjcmlwdENhbGxiYWNrKHNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSwgZXhjZXB0aW9uRGV0YWlscywgdGFzay5nZXQoKSk7CiAgICAgICAgIH0pOwpAQCAtMzM2NCw3
ICszMzc0LDcgQEAgV2ViS2l0V2ViSW5zcGVjdG9yKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2luc3Bl
Y3RvcihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwgMCk7CiAKICAgICBpZiAoIXdlYlZpZXctPnByaXYt
Pmluc3BlY3RvcikKLSAgICAgICAgd2ViVmlldy0+cHJpdi0+aW5zcGVjdG9yID0gYWRvcHRHUmVm
KHdlYmtpdFdlYkluc3BlY3RvckNyZWF0ZShnZXRQYWdlKHdlYlZpZXcpLT5pbnNwZWN0b3IoKSkp
OworICAgICAgICB3ZWJWaWV3LT5wcml2LT5pbnNwZWN0b3IgPSBhZG9wdEdSZWYod2Via2l0V2Vi
SW5zcGVjdG9yQ3JlYXRlKGdldFBhZ2Uod2ViVmlldykuaW5zcGVjdG9yKCkpKTsKIAogICAgIHJl
dHVybiB3ZWJWaWV3LT5wcml2LT5pbnNwZWN0b3IuZ2V0KCk7CiB9CkBAIC0zMzgzLDcgKzMzOTMs
NyBAQCBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfY2FuX3Nob3dfbWltZV90eXBlKFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcsIGNvbnN0IGNoYXIqCiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCBGQUxTRSk7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwobWltZVR5cGUsIEZBTFNFKTsKIAotICAgIHJldHVybiBnZXRQYWdlKHdlYlZpZXcpLT5jYW5T
aG93TUlNRVR5cGUoU3RyaW5nOjpmcm9tVVRGOChtaW1lVHlwZSkpOworICAgIHJldHVybiBnZXRQ
YWdlKHdlYlZpZXcpLmNhblNob3dNSU1FVHlwZShTdHJpbmc6OmZyb21VVEY4KG1pbWVUeXBlKSk7
CiB9CiAKIHN0cnVjdCBWaWV3U2F2ZUFzeW5jRGF0YSB7CkBAIC0zNDUzLDcgKzM0NjMsNyBAQCB2
b2lkIHdlYmtpdF93ZWJfdmlld19zYXZlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFNh
dmVNb2RlIHNhdmVNb2RlLCBHQ2FuYwogICAgIEdUYXNrKiB0YXNrID0gZ190YXNrX25ldyh3ZWJW
aWV3LCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKTsKICAgICBnX3Rhc2tfc2V0X3Nv
dXJjZV90YWcodGFzaywgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcj4od2Via2l0X3dlYl92aWV3
X3NhdmUpKTsKICAgICBnX3Rhc2tfc2V0X3Rhc2tfZGF0YSh0YXNrLCBjcmVhdGVWaWV3U2F2ZUFz
eW5jRGF0YSgpLCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5PihkZXN0cm95Vmlld1Nh
dmVBc3luY0RhdGEpKTsKLSAgICBnZXRQYWdlKHdlYlZpZXcpLT5nZXRDb250ZW50c0FzTUhUTUxE
YXRhKFt0YXNrXShBUEk6OkRhdGEqIGRhdGEsIFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcikg
eworICAgIGdldFBhZ2Uod2ViVmlldykuZ2V0Q29udGVudHNBc01IVE1MRGF0YShbdGFza10oQVBJ
OjpEYXRhKiBkYXRhLCBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IpIHsKICAgICAgICAgZ2V0
Q29udGVudHNBc01IVE1MRGF0YUNhbGxiYWNrKGRhdGEsIHRhc2spOwogICAgIH0pOwogfQpAQCAt
MzUxOCw3ICszNTI4LDcgQEAgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfc2F2ZV90b19maWxlKFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcsIEdGaWxlKiBmaWxlLCBXZWJLaXRTYXYKICAgICBkYXRhLT5maWxl
ID0gZmlsZTsKICAgICBnX3Rhc2tfc2V0X3Rhc2tfZGF0YSh0YXNrLCBkYXRhLCByZWludGVycHJl
dF9jYXN0PEdEZXN0cm95Tm90aWZ5PihkZXN0cm95Vmlld1NhdmVBc3luY0RhdGEpKTsKIAotICAg
IGdldFBhZ2Uod2ViVmlldyktPmdldENvbnRlbnRzQXNNSFRNTERhdGEoW3Rhc2tdKEFQSTo6RGF0
YSogZGF0YSwgV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yKSB7CisgICAgZ2V0UGFnZSh3ZWJW
aWV3KS5nZXRDb250ZW50c0FzTUhUTUxEYXRhKFt0YXNrXShBUEk6OkRhdGEqIGRhdGEsIFdlYktp
dDo6Q2FsbGJhY2tCYXNlOjpFcnJvcikgewogICAgICAgICBnZXRDb250ZW50c0FzTUhUTUxEYXRh
Q2FsbGJhY2soZGF0YSwgdGFzayk7CiAgICAgfSk7CiB9CkBAIC0zNTU2LDcgKzM1NjYsNyBAQCBX
ZWJLaXREb3dubG9hZCogd2Via2l0X3dlYl92aWV3X2Rvd25sb2FkX3VyaShXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3LCBjb25zdCBjaGFyKgogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9J
U19XRUJfVklFVyh3ZWJWaWV3KSwgbnVsbHB0cik7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
dXJpLCBudWxscHRyKTsKIAotICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0g
d2Via2l0V2ViQ29udGV4dFN0YXJ0RG93bmxvYWQod2ViVmlldy0+cHJpdi0+Y29udGV4dC5nZXQo
KSwgdXJpLCBnZXRQYWdlKHdlYlZpZXcpKTsKKyAgICBHUmVmUHRyPFdlYktpdERvd25sb2FkPiBk
b3dubG9hZCA9IHdlYmtpdFdlYkNvbnRleHRTdGFydERvd25sb2FkKHdlYlZpZXctPnByaXYtPmNv
bnRleHQuZ2V0KCksIHVyaSwgJmdldFBhZ2Uod2ViVmlldykpOwogICAgIHJldHVybiBkb3dubG9h
ZC5sZWFrUmVmKCk7CiB9CiAKQEAgLTM1ODgsNyArMzU5OCw3IEBAIGdib29sZWFuIHdlYmtpdF93
ZWJfdmlld19nZXRfdGxzX2luZm8oV2ViS2l0V2ViVmlldyogd2ViVmlldywgR1Rsc0NlcnRpZmlj
YXRlKioKIHsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2Vi
VmlldyksIEZBTFNFKTsKIAotICAgIFdlYkZyYW1lUHJveHkqIG1haW5GcmFtZSA9IGdldFBhZ2Uo
d2ViVmlldyktPm1haW5GcmFtZSgpOworICAgIFdlYkZyYW1lUHJveHkqIG1haW5GcmFtZSA9IGdl
dFBhZ2Uod2ViVmlldykubWFpbkZyYW1lKCk7CiAgICAgaWYgKCFtYWluRnJhbWUpCiAgICAgICAg
IHJldHVybiBGQUxTRTsKIApAQCAtMzY3Niw3ICszNjg2LDcgQEAgdm9pZCB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X3NuYXBzaG90KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFNuYXBzaG90UmVn
aW9uIHIKICAgICBtZXNzYWdlLnNldChTdHJpbmc6OmZyb21VVEY4KCJUcmFuc3BhcmVudEJhY2tn
cm91bmQiKSwgQVBJOjpCb29sZWFuOjpjcmVhdGUob3B0aW9ucyAmIFdFQktJVF9TTkFQU0hPVF9P
UFRJT05TX1RSQU5TUEFSRU5UX0JBQ0tHUk9VTkQpKTsKIAogICAgIHdlYlZpZXctPnByaXYtPnNu
YXBzaG90UmVzdWx0c01hcC5zZXQoY2FsbGJhY2tJRCwgYWRvcHRHUmVmKGdfdGFza19uZXcod2Vi
VmlldywgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpKTsKLSAgICBnZXRQYWdlKHdl
YlZpZXcpLT5wb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoU3RyaW5nOjpmcm9tVVRGOCgiR2V0
U25hcHNob3QiKSwgQVBJOjpEaWN0aW9uYXJ5OjpjcmVhdGUoV1RGTW92ZShtZXNzYWdlKSkucHRy
KCkpOworICAgIGdldFBhZ2Uod2ViVmlldykucG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFN0
cmluZzo6ZnJvbVVURjgoIkdldFNuYXBzaG90IiksIEFQSTo6RGljdGlvbmFyeTo6Y3JlYXRlKFdU
Rk1vdmUobWVzc2FnZSkpLnB0cigpKTsKIH0KIAogLyoqCkBAIC0zNzQyLDEyICszNzUyLDEyIEBA
IHZvaWQgd2Via2l0X3dlYl92aWV3X3NldF9iYWNrZ3JvdW5kX2NvbG9yKFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcsIGNvbnN0IEdka1JHQkEqCiAgICAgZ19yZXR1cm5faWZfZmFpbChyZ2JhKTsKIAog
ICAgIENvbG9yIGNvbG9yKCpyZ2JhKTsKLSAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSBnZXRQYWdl
KHdlYlZpZXcpOwotICAgIGlmIChwYWdlLT5iYWNrZ3JvdW5kQ29sb3IoKSA9PSBjb2xvcikKKyAg
ICBhdXRvJiBwYWdlID0gZ2V0UGFnZSh3ZWJWaWV3KTsKKyAgICBpZiAocGFnZS5iYWNrZ3JvdW5k
Q29sb3IoKSA9PSBjb2xvcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGFnZS0+c2V0QmFja2dy
b3VuZENvbG9yKGNvbG9yKTsKLSAgICBwYWdlLT5zZXREcmF3c0JhY2tncm91bmQoY29sb3IgPT0g
Q29sb3I6OndoaXRlKTsKKyAgICBwYWdlLnNldEJhY2tncm91bmRDb2xvcihjb2xvcik7CisgICAg
cGFnZS5zZXREcmF3c0JhY2tncm91bmQoY29sb3IgPT0gQ29sb3I6OndoaXRlKTsKIH0KIAogLyoq
CkBAIC0zNzY2LDcgKzM3NzYsNyBAQCB2b2lkIHdlYmtpdF93ZWJfdmlld19nZXRfYmFja2dyb3Vu
ZF9jb2xvcihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHZGtSR0JBKiByZ2JhKQogICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpKTsKICAgICBnX3JldHVybl9p
Zl9mYWlsKHJnYmEpOwogCi0gICAgKnJnYmEgPSBnZXRQYWdlKHdlYlZpZXcpLT5iYWNrZ3JvdW5k
Q29sb3IoKTsKKyAgICAqcmdiYSA9IGdldFBhZ2Uod2ViVmlldykuYmFja2dyb3VuZENvbG9yKCk7
CiB9CiAKIC8qCkBAIC0zNzg2LDcgKzM3OTYsNyBAQCBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdf
aXNfZWRpdGFibGUoV2ViS2l0V2ViVmlldyogd2ViVmlldykKIHsKICAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldyksIEZBTFNFKTsKIAotICAgIHJldHVy
biBnZXRQYWdlKHdlYlZpZXcpLT5pc0VkaXRhYmxlKCk7CisgICAgcmV0dXJuIGdldFBhZ2Uod2Vi
VmlldykuaXNFZGl0YWJsZSgpOwogfQogCiAvKioKQEAgLTM4MTEsMTAgKzM4MjEsMTAgQEAgdm9p
ZCB3ZWJraXRfd2ViX3ZpZXdfc2V0X2VkaXRhYmxlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGdi
b29sZWFuIGVkaXRhYmxlKQogewogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9W
SUVXKHdlYlZpZXcpKTsKIAotICAgIGlmIChlZGl0YWJsZSA9PSBnZXRQYWdlKHdlYlZpZXcpLT5p
c0VkaXRhYmxlKCkpCisgICAgaWYgKGVkaXRhYmxlID09IGdldFBhZ2Uod2ViVmlldykuaXNFZGl0
YWJsZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBnZXRQYWdlKHdlYlZpZXcpLT5zZXRFZGl0
YWJsZShlZGl0YWJsZSk7CisgICAgZ2V0UGFnZSh3ZWJWaWV3KS5zZXRFZGl0YWJsZShlZGl0YWJs
ZSk7CiAKICAgICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1Qod2ViVmlldyksICJlZGl0YWJsZSIp
OwogfQpAQCAtMzgzNCw3ICszODQ0LDcgQEAgV2ViS2l0RWRpdG9yU3RhdGUqIHdlYmtpdF93ZWJf
dmlld19nZXRfZWRpdG9yX3N0YXRlKFdlYktpdFdlYlZpZXcgKndlYlZpZXcpCiAgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCBudWxscHRyKTsKIAog
ICAgIGlmICghd2ViVmlldy0+cHJpdi0+ZWRpdG9yU3RhdGUpCi0gICAgICAgIHdlYlZpZXctPnBy
aXYtPmVkaXRvclN0YXRlID0gYWRvcHRHUmVmKHdlYmtpdEVkaXRvclN0YXRlQ3JlYXRlKGdldFBh
Z2Uod2ViVmlldyktPmVkaXRvclN0YXRlKCkpKTsKKyAgICAgICAgd2ViVmlldy0+cHJpdi0+ZWRp
dG9yU3RhdGUgPSBhZG9wdEdSZWYod2Via2l0RWRpdG9yU3RhdGVDcmVhdGUoZ2V0UGFnZSh3ZWJW
aWV3KS5lZGl0b3JTdGF0ZSgpKSk7CiAKICAgICByZXR1cm4gd2ViVmlldy0+cHJpdi0+ZWRpdG9y
U3RhdGUuZ2V0KCk7CiB9CkBAIC0zODUzLDcgKzM4NjMsNyBAQCBXZWJLaXRXZWJWaWV3U2Vzc2lv
blN0YXRlKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3Nlc3Npb25fc3RhdGUoV2ViS2l0V2ViVmlldyog
d2ViVgogewogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJW
aWV3KSwgbnVsbHB0cik7CiAKLSAgICBTZXNzaW9uU3RhdGUgc2Vzc2lvblN0YXRlID0gZ2V0UGFn
ZSh3ZWJWaWV3KS0+c2Vzc2lvblN0YXRlKG51bGxwdHIpOworICAgIFNlc3Npb25TdGF0ZSBzZXNz
aW9uU3RhdGUgPSBnZXRQYWdlKHdlYlZpZXcpLnNlc3Npb25TdGF0ZShudWxscHRyKTsKICAgICBy
ZXR1cm4gd2Via2l0V2ViVmlld1Nlc3Npb25TdGF0ZUNyZWF0ZShXVEZNb3ZlKHNlc3Npb25TdGF0
ZSkpOwogfQogCkBAIC0zODcxLDUgKzM4ODEsNSBAQCB2b2lkIHdlYmtpdF93ZWJfdmlld19yZXN0
b3JlX3Nlc3Npb25fc3RhdGUoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0V2ViVmlldwog
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpKTsKICAgICBn
X3JldHVybl9pZl9mYWlsKHN0YXRlKTsKIAotICAgIGdldFBhZ2Uod2ViVmlldyktPnJlc3RvcmVG
cm9tU2Vzc2lvblN0YXRlKHdlYmtpdFdlYlZpZXdTZXNzaW9uU3RhdGVHZXRTZXNzaW9uU3RhdGUo
c3RhdGUpLCBmYWxzZSk7CisgICAgZ2V0UGFnZSh3ZWJWaWV3KS5yZXN0b3JlRnJvbVNlc3Npb25T
dGF0ZSh3ZWJraXRXZWJWaWV3U2Vzc2lvblN0YXRlR2V0U2Vzc2lvblN0YXRlKHN0YXRlKSwgZmFs
c2UpOwogfQo=
</data>
<flag name="review"
          id="333558"
          type_id="1"
          status="+"
          setter="zan"
    />
          </attachment>
      

    </bug>

</bugzilla>