<?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>186146</bug_id>
          
          <creation_ts>2018-05-31 05:16:56 -0700</creation_ts>
          <short_desc>[GTK] Switch to use a popup window with a tree view instead of a menu for option menu default implementation</short_desc>
          <delta_ts>2019-05-16 06:56:04 -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>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=186032</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=171803</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=16450</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=165072</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=197947</see_also>
          <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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aperez</cc>
    
    <cc>berto</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>bugzilla</cc>
    
    <cc>cadubentzen</cc>
    
    <cc>calvaris</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gustavo</cc>
    
    <cc>mcatanzaro</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1428818</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-05-31 05:16:56 -0700</bug_when>
    <thetext>We have successfully used it in ephy enough time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1428819</commentid>
    <comment_count>1</comment_count>
      <attachid>341660</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-05-31 05:19:28 -0700</bug_when>
    <thetext>Created attachment 341660
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1428821</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-05-31 05:22:03 -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>1428823</commentid>
    <comment_count>3</comment_count>
      <attachid>341660</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2018-05-31 06:01:18 -0700</bug_when>
    <thetext>Comment on attachment 341660
Patch

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

This looks good to me, and having used these new popups
in Epiphany already for a while I *know* that they do work
much better, particularly in Wayland where the current 
implementation can have occasional popup window sizing
and placement issues.

I am for landing this, but probably it&apos;s good that someone else
who knows GTK+ well (for example, Michael Catanzaro) would take
a look as well.

&gt; Source/WebKit/UIProcess/gtk/WebPopupMenuProxyGtk.cpp:270
&gt; +    // https://gitlab.gnome.org/GNOME/gtk/issues/997

I wonder whether it would be possible avoid this kind of complex code by
(ab)using some GTK+ popup widget that behaves correctly on Wayland regarding
to positioning -- for example using a GtkPopover and then overriding its CSS
styling to make it look like a plain popup. Dunno, at any rate it&apos;s just a
thought, not a request to change anything in this patch.

(BTW, I commented in GTK+ bug #997 that having gdk_window_move_to_rect()
public would be useful for WebKitGTK+ as well, and from touching popup
layout code before I am quite confident we could use it in a few places.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1428824</commentid>
    <comment_count>4</comment_count>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2018-05-31 06:04:29 -0700</bug_when>
    <thetext>I believe that landing this would fix bug #186032 as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1428825</commentid>
    <comment_count>5</comment_count>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2018-05-31 06:09:24 -0700</bug_when>
    <thetext>(In reply to Adrian Perez from comment #4)
&gt; I believe that landing this would fix bug #186032 as well.

It would fix bug #171803, too. Note that we are still missing
a layout test that checks that an &lt;option&gt; inside &lt;optiongroup&gt;
can be chosen using the type-ahead find. We can repurpose use
bug #171803 for adding the test once this lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1428827</commentid>
    <comment_count>6</comment_count>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2018-05-31 06:19:45 -0700</bug_when>
    <thetext>This improves also performance for combo boxes with thousands
of elements, which is an issue with the current implementation
as per bug #16450

I&apos;ve done a quick test with Epiphany and while there is still
a noticeable &lt;500ms delay before the popup appears, landing
this patch is an amazingly huge improvement. I expect that the
popup delay should be even smaller once the code is inside
WebKit -- there will be less objects allocated and passed
back and forth through the public API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1428836</commentid>
    <comment_count>7</comment_count>
      <attachid>341660</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-05-31 07:18:23 -0700</bug_when>
    <thetext>Comment on attachment 341660
Patch

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

&gt; Source/WebKit/UIProcess/gtk/WebPopupMenuProxyGtk.cpp:274
&gt; +    // FIXME: We can&apos;t ensure the menu will be on screen in Wayland.
&gt; +    // https://blog.gtk.org/2016/07/15/future-of-relative-window-positioning/
&gt; +    // https://gitlab.gnome.org/GNOME/gtk/issues/997
&gt; +    if (menuPosition.x() &lt; area.x)
&gt; +        menuPosition.setX(area.x);
&gt; +    else if (menuPosition.x() + menuRequisition.width &gt; area.x + area.width)
&gt; +        menuPosition.setX(area.x + area.width - menuRequisition.width);

You need the important fix from https://gitlab.gnome.org/GNOME/epiphany/commit/37b9c6e69950729981c352e245772f2e51c9d78f for the multimonitor users.

And I guess you&apos;ll remove EphyOptionMenu after the next release.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429165</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-06-01 00:44:44 -0700</bug_when>
    <thetext>Committed r232390: &lt;https://trac.webkit.org/changeset/232390&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>341660</attachid>
            <date>2018-05-31 05:19:28 -0700</date>
            <delta_ts>2018-05-31 07:18:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-option-menu.diff</filename>
            <type>text/plain</type>
            <size>34378</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmZDA1MGZhYmUyOS4uYWE2NTAxMGUzMjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAxOC0wNS0zMSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gU3dpdGNoIHRvIHVzZSBhIHBvcHVwIHdpbmRvdyB3
aXRoIGEgdHJlZSB2aWV3IGluc3RlYWQgb2YgYSBtZW51IGZvciBvcHRpb24gbWVudSBkZWZhdWx0
IGltcGxlbWVudGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xODYxNDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBNYWtlIGl0IHBvc3NpYmxlIHRvIHVzZSBHVW5pcXVlUHRyIHdpdGggR3RrVHJlZVBh
dGguCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvR1VuaXF1ZVB0ckd0ay5oOgorCiAyMDE4LTA1
LTMwICBDYXJsb3MgRWR1YXJkbyBSYW1hbGhvICA8Y2FkdWJlbnR6ZW5AZ21haWwuY29tPgogCiAg
ICAgICAgIFtHVEtdIEhhcmRjb2RlZCB0ZXh0IGNvbG9yIGluIGlucHV0IGZpZWxkcwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dVbmlxdWVQdHJHdGsuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HVW5pcXVlUHRyR3RrLmgKaW5kZXggNjQzMDdkYWU1MjYu
LmMxNjc3YzYwOTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR1Vu
aXF1ZVB0ckd0ay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HVW5pcXVlUHRy
R3RrLmgKQEAgLTI3LDYgKzI3LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAKIFdURl9ERUZJTkVfR1BU
Ul9ERUxFVEVSKEdka0V2ZW50LCBnZGtfZXZlbnRfZnJlZSkKIFdURl9ERUZJTkVfR1BUUl9ERUxF
VEVSKEd0a0ljb25JbmZvLCBndGtfaWNvbl9pbmZvX2ZyZWUpCitXVEZfREVGSU5FX0dQVFJfREVM
RVRFUihHdGtUcmVlUGF0aCwgZ3RrX3RyZWVfcGF0aF9mcmVlKQogCiB9IC8vIG5hbWVzcGFjZSBX
VEYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwppbmRleCAyM2RlNWRkNzA5OS4uNTQ1ZTA4MjdkMmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzQgQEAKKzIwMTgtMDUtMzEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBp
Z2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFN3aXRjaCB0byB1c2UgYSBwb3B1cCB3aW5kb3cg
d2l0aCBhIHRyZWUgdmlldyBpbnN0ZWFkIG9mIGEgbWVudSBmb3Igb3B0aW9uIG1lbnUgZGVmYXVs
dCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTg2MTQ2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgSXQncyBtb3JlIGNvbnZlbmllbnQgdG8gdXNlIHRoYW4gdGhlIG1lbnUuCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb3B1cE1lbnUuY3BwOgorICAgICAgICAo
V2ViS2l0OjptZW51Q2xvc2VDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYktpdFBvcHVw
TWVudTo6YWN0aXZhdGVJdGVtKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQ
b3B1cE1lbnUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYlBvcHVwTWVudVByb3h5R3Rr
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlHdGs6OldlYlBvcHVwTWVu
dVByb3h5R3RrKToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlHdGs6OnNlbGVj
dEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eUd0azo6YWN0aXZhdGVJ
dGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlHdGs6OmFjdGl2YXRlSXRl
bUF0UGF0aCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5R3RrOjp0cmVlVmll
d1Jvd0FjdGl2YXRlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJv
eHlHdGs6OnRyZWVWaWV3QnV0dG9uUmVsZWFzZUV2ZW50Q2FsbGJhY2spOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQb3B1cE1lbnVQcm94eUd0azo6YnV0dG9uUHJlc3NFdmVudENhbGxiYWNrKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlHdGs6OmtleVByZXNzRXZlbnRDYWxsYmFj
ayk6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5R3RrOjpjcmVhdGVQb3B1cE1l
bnUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eUd0azo6c2hvdyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5R3RrOjpzaG93UG9wdXBNZW51KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlHdGs6OmhpZGVQb3B1cE1lbnUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eUd0azo6Y2FuY2VsVHJhY2tpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eUd0azo6dHlwZUFoZWFkRmluZEluZGV4KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlHdGs6OnR5cGVBaGVhZEZpbmQpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViUG9wdXBNZW51UHJveHlHdGsuaDoKKwogMjAxOC0wNS0z
MCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBbSlND
XSBQYXNzIFZNJiBwYXJhbWV0ZXIgYXMgbXVjaCBhcyBwb3NzaWJsZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb3B1cE1lbnUuY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb3B1cE1lbnUuY3BwCmluZGV4IGM0ZDhh
NjdkNmEyLi5hM2IzYzcxNDliZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRQb3B1cE1lbnUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0UG9wdXBNZW51LmNwcApAQCAtMzUsNyArMzUsNyBAQCBXZWJLaXRQb3B1
cE1lbnU6OldlYktpdFBvcHVwTWVudShHdGtXaWRnZXQqIHdlYlZpZXcsIFdlYlBvcHVwTWVudVBy
b3h5OjpDbGllbnQmCiAKIHN0YXRpYyB2b2lkIG1lbnVDbG9zZUNhbGxiYWNrKFdlYktpdFBvcHVw
TWVudSogcG9wdXBNZW51KQogewotICAgIHBvcHVwTWVudS0+YWN0aXZhdGVJdGVtKC0xKTsKKyAg
ICBwb3B1cE1lbnUtPmFjdGl2YXRlSXRlbShzdGQ6Om51bGxvcHQpOwogfQogCiB2b2lkIFdlYktp
dFBvcHVwTWVudTo6c2hvd1BvcHVwTWVudShjb25zdCBJbnRSZWN0JiByZWN0LCBUZXh0RGlyZWN0
aW9uIGRpcmVjdGlvbiwgZG91YmxlIHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgVmVjdG9yPFdlYlBv
cHVwSXRlbT4mIGl0ZW1zLCBjb25zdCBQbGF0Zm9ybVBvcHVwTWVudURhdGEmIHBsYXRmb3JtRGF0
YSwgaW50MzJfdCBzZWxlY3RlZEluZGV4KQpAQCAtNjksMjEgKzY5LDEzIEBAIHZvaWQgV2ViS2l0
UG9wdXBNZW51OjpjYW5jZWxUcmFja2luZygpCiAgICAgbV9tZW51ID0gbnVsbHB0cjsKIH0KIAot
dm9pZCBXZWJLaXRQb3B1cE1lbnU6OnNlbGVjdEl0ZW0odW5zaWduZWQgaXRlbUluZGV4KQordm9p
ZCBXZWJLaXRQb3B1cE1lbnU6OmFjdGl2YXRlSXRlbShzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBp
dGVtSW5kZXgpCiB7Ci0gICAgaWYgKCFtX21lbnUpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2Ns
aWVudC0+c2V0VGV4dEZyb21JdGVtRm9yUG9wdXBNZW51KHRoaXMsIGl0ZW1JbmRleCk7Ci0gICAg
bV9zZWxlY3RlZEl0ZW0gPSBpdGVtSW5kZXg7Ci19Ci0KLXZvaWQgV2ViS2l0UG9wdXBNZW51Ojph
Y3RpdmF0ZUl0ZW0oaW50MzJfdCBpdGVtSW5kZXgpCi17Ci0gICAgaWYgKCFtX21lbnUpCi0gICAg
ICAgIHJldHVybjsKLSAgICBtX2NsaWVudC0+dmFsdWVDaGFuZ2VkRm9yUG9wdXBNZW51KHRoaXMs
IGl0ZW1JbmRleCA9PSAtMSA/IG1fc2VsZWN0ZWRJdGVtLnZhbHVlX29yKC0xKSA6IGl0ZW1JbmRl
eCk7Ci0gICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fbWVudS5nZXQo
KSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgbnVsbHB0ciwgbnVsbHB0ciwgdGhpcyk7Ci0g
ICAgbV9tZW51ID0gbnVsbHB0cjsKKyAgICBXZWJQb3B1cE1lbnVQcm94eUd0azo6YWN0aXZhdGVJ
dGVtKGl0ZW1JbmRleCk7CisgICAgaWYgKG1fbWVudSkgeworICAgICAgICBnX3NpZ25hbF9oYW5k
bGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9tZW51LmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRB
LCAwLCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlzKTsKKyAgICAgICAgbV9tZW51ID0gbnVsbHB0
cjsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb3B1cE1lbnUuaCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UG9wdXBNZW51LmgKaW5kZXggYTQ4YzE3ZWRkYTMu
LjhlOGFlZGJhNjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFBvcHVwTWVudS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0UG9wdXBNZW51LmgKQEAgLTM0LDggKzM0LDcgQEAgcHVibGljOgogICAgIH0KICAgICB+
V2ViS2l0UG9wdXBNZW51KCkgPSBkZWZhdWx0OwogCi0gICAgdm9pZCBzZWxlY3RJdGVtKHVuc2ln
bmVkKTsKLSAgICB2b2lkIGFjdGl2YXRlSXRlbShpbnQzMl90KTsKKyAgICB2b2lkIGFjdGl2YXRl
SXRlbShzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBpdGVtSW5kZXgpIG92ZXJyaWRlOwogCiBwcml2
YXRlOgogICAgIFdlYktpdFBvcHVwTWVudShHdGtXaWRnZXQqLCBXZWJQb3B1cE1lbnVQcm94eTo6
Q2xpZW50Jik7CkBAIC00NSw3ICs0NCw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjYW5jZWxUcmFj
a2luZygpIG92ZXJyaWRlOwogCiAgICAgR1JlZlB0cjxXZWJLaXRPcHRpb25NZW51PiBtX21lbnU7
Ci0gICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gbV9zZWxlY3RlZEl0ZW07CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0
ay9XZWJQb3B1cE1lbnVQcm94eUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsv
V2ViUG9wdXBNZW51UHJveHlHdGsuY3BwCmluZGV4IGNkM2NiYmYzYTJkLi4zY2MxMzcyNGQ0MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dlYlBvcHVwTWVudVByb3h5
R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViUG9wdXBNZW51UHJv
eHlHdGsuY3BwCkBAIC0zNywxMCArMzcsMjAgQEAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiAKK2VudW0gQ29sdW1ucyB7CisgICAgTGFiZWwsCisgICAgVG9v
bHRpcCwKKyAgICBJc0dyb3VwLAorICAgIElzU2VsZWN0ZWQsCisgICAgSXNFbmFibGVkLAorICAg
IEluZGV4LAorCisgICAgQ291bnQKK307CisKIFdlYlBvcHVwTWVudVByb3h5R3RrOjpXZWJQb3B1
cE1lbnVQcm94eUd0ayhHdGtXaWRnZXQqIHdlYlZpZXcsIFdlYlBvcHVwTWVudVByb3h5OjpDbGll
bnQmIGNsaWVudCkKICAgICA6IFdlYlBvcHVwTWVudVByb3h5KGNsaWVudCkKICAgICAsIG1fd2Vi
Vmlldyh3ZWJWaWV3KQotICAgICwgbV9kaXNtaXNzTWVudVRpbWVyKFJ1bkxvb3A6Om1haW4oKSwg
dGhpcywgJldlYlBvcHVwTWVudVByb3h5R3RrOjpkaXNtaXNzTWVudVRpbWVyRmlyZWQpCiB7CiB9
CiAKQEAgLTQ5LDk1ICs1OSwyNjUgQEAgV2ViUG9wdXBNZW51UHJveHlHdGs6On5XZWJQb3B1cE1l
bnVQcm94eUd0aygpCiAgICAgY2FuY2VsVHJhY2tpbmcoKTsKIH0KIAotdm9pZCBXZWJQb3B1cE1l
bnVQcm94eUd0azo6cG9wdWxhdGVQb3B1cE1lbnUoY29uc3QgVmVjdG9yPFdlYlBvcHVwSXRlbT4m
IGl0ZW1zKQordm9pZCBXZWJQb3B1cE1lbnVQcm94eUd0azo6c2VsZWN0SXRlbSh1bnNpZ25lZCBp
dGVtSW5kZXgpCiB7Ci0gICAgaW50IGl0ZW1JbmRleCA9IDA7Ci0gICAgZm9yIChjb25zdCBhdXRv
JiBpdGVtIDogaXRlbXMpIHsKLSAgICAgICAgaWYgKGl0ZW0ubV90eXBlID09IFdlYlBvcHVwSXRl
bTo6U2VwYXJhdG9yKSB7Ci0gICAgICAgICAgICBHdGtXaWRnZXQqIG1lbnVJdGVtID0gZ3RrX3Nl
cGFyYXRvcl9tZW51X2l0ZW1fbmV3KCk7Ci0gICAgICAgICAgICBndGtfbWVudV9zaGVsbF9hcHBl
bmQoR1RLX01FTlVfU0hFTEwobV9wb3B1cCksIG1lbnVJdGVtKTsKLSAgICAgICAgICAgIGd0a193
aWRnZXRfc2hvdyhtZW51SXRlbSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBHdGtX
aWRnZXQqIG1lbnVJdGVtID0gZ3RrX21lbnVfaXRlbV9uZXdfd2l0aF9sYWJlbChpdGVtLm1fdGV4
dC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGd0a193aWRnZXRfc2V0X3Rvb2x0aXBfdGV4
dChtZW51SXRlbSwgaXRlbS5tX3Rvb2xUaXAudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBn
dGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUobWVudUl0ZW0sIGl0ZW0ubV9pc0VuYWJsZWQpOwotICAg
ICAgICAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QobWVudUl0ZW0pLCAicG9wdXAtbWVu
dS1pdGVtLWluZGV4IiwgR0lOVF9UT19QT0lOVEVSKGl0ZW1JbmRleCkpOwotICAgICAgICAgICAg
Z19zaWduYWxfY29ubmVjdChtZW51SXRlbSwgImFjdGl2YXRlIiwgR19DQUxMQkFDSyhtZW51SXRl
bUFjdGl2YXRlZCksIHRoaXMpOwotICAgICAgICAgICAgZ19zaWduYWxfY29ubmVjdChtZW51SXRl
bSwgInNlbGVjdCIsIEdfQ0FMTEJBQ0soc2VsZWN0SXRlbUNhbGxiYWNrKSwgdGhpcyk7Ci0gICAg
ICAgICAgICBndGtfbWVudV9zaGVsbF9hcHBlbmQoR1RLX01FTlVfU0hFTEwobV9wb3B1cCksIG1l
bnVJdGVtKTsKLSAgICAgICAgICAgIGd0a193aWRnZXRfc2hvdyhtZW51SXRlbSk7Ci0gICAgICAg
IH0KLSAgICAgICAgaXRlbUluZGV4Kys7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2Ns
aWVudC0+c2V0VGV4dEZyb21JdGVtRm9yUG9wdXBNZW51KHRoaXMsIGl0ZW1JbmRleCk7CisgICAg
bV9zZWxlY3RlZEl0ZW0gPSBpdGVtSW5kZXg7Cit9CisKK3ZvaWQgV2ViUG9wdXBNZW51UHJveHlH
dGs6OmFjdGl2YXRlSXRlbShzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBpdGVtSW5kZXgpCit7Cisg
ICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+dmFsdWVDaGFuZ2VkRm9yUG9wdXBN
ZW51KHRoaXMsIGl0ZW1JbmRleC52YWx1ZV9vcihtX3NlbGVjdGVkSXRlbS52YWx1ZV9vcigtMSkp
KTsKK30KKworYm9vbCBXZWJQb3B1cE1lbnVQcm94eUd0azo6YWN0aXZhdGVJdGVtQXRQYXRoKEd0
a1RyZWVQYXRoKiBwYXRoKQoreworICAgIGF1dG8qIG1vZGVsID0gZ3RrX3RyZWVfdmlld19nZXRf
bW9kZWwoR1RLX1RSRUVfVklFVyhtX3RyZWVWaWV3KSk7CisgICAgR3RrVHJlZUl0ZXIgaXRlcjsK
KyAgICBndGtfdHJlZV9tb2RlbF9nZXRfaXRlcihtb2RlbCwgJml0ZXIsIHBhdGgpOworICAgIGdi
b29sZWFuIGlzR3JvdXAsIGlzRW5hYmxlZDsKKyAgICBndWludCBpbmRleDsKKyAgICBndGtfdHJl
ZV9tb2RlbF9nZXQobW9kZWwsICZpdGVyLCBDb2x1bW5zOjpJc0dyb3VwLCAmaXNHcm91cCwgQ29s
dW1uczo6SXNFbmFibGVkLCAmaXNFbmFibGVkLCBDb2x1bW5zOjpJbmRleCwgJmluZGV4LCAtMSk7
CisgICAgaWYgKGlzR3JvdXAgfHwgIWlzRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgYWN0aXZhdGVJdGVtKGluZGV4KTsKKyAgICBoaWRlUG9wdXBNZW51KCk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViUG9wdXBNZW51UHJveHlHdGs6OnRyZWVWaWV3Um93QWN0
aXZhdGVkQ2FsbGJhY2soR3RrVHJlZVZpZXcqLCBHdGtUcmVlUGF0aCogcGF0aCwgR3RrVHJlZVZp
ZXdDb2x1bW4qLCBXZWJQb3B1cE1lbnVQcm94eUd0ayogcG9wdXBNZW51KQoreworICAgIHBvcHVw
TWVudS0+YWN0aXZhdGVJdGVtQXRQYXRoKHBhdGgpOworfQorCitnYm9vbGVhbiBXZWJQb3B1cE1l
bnVQcm94eUd0azo6dHJlZVZpZXdCdXR0b25SZWxlYXNlRXZlbnRDYWxsYmFjayhHdGtXaWRnZXQq
IHRyZWVWaWV3LCBHZGtFdmVudEJ1dHRvbiogZXZlbnQsIFdlYlBvcHVwTWVudVByb3h5R3RrKiBw
b3B1cE1lbnUpCit7CisgICAgaWYgKGV2ZW50LT5idXR0b24gIT0gR0RLX0JVVFRPTl9QUklNQVJZ
KQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBHVW5pcXVlT3V0UHRyPEd0a1RyZWVQYXRo
PiBwYXRoOworICAgIGlmICghZ3RrX3RyZWVfdmlld19nZXRfcGF0aF9hdF9wb3MoR1RLX1RSRUVf
VklFVyh0cmVlVmlldyksIGV2ZW50LT54LCBldmVudC0+eSwgJnBhdGgub3V0UHRyKCksIG51bGxw
dHIsIG51bGxwdHIsIG51bGxwdHIpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICByZXR1
cm4gcG9wdXBNZW51LT5hY3RpdmF0ZUl0ZW1BdFBhdGgocGF0aC5nZXQoKSk7Cit9CisKK2dib29s
ZWFuIFdlYlBvcHVwTWVudVByb3h5R3RrOjpidXR0b25QcmVzc0V2ZW50Q2FsbGJhY2soR3RrV2lk
Z2V0KiB3aWRnZXQsIEdka0V2ZW50QnV0dG9uKiBldmVudCwgV2ViUG9wdXBNZW51UHJveHlHdGsq
IHBvcHVwTWVudSkKK3sKKyAgICBpZiAoIXBvcHVwTWVudS0+bV9kZXZpY2UpCisgICAgICAgIHJl
dHVybiBGQUxTRTsKKworICAgIHBvcHVwTWVudS0+aGlkZVBvcHVwTWVudSgpOworICAgIHJldHVy
biBUUlVFOworfQorCitnYm9vbGVhbiBXZWJQb3B1cE1lbnVQcm94eUd0azo6a2V5UHJlc3NFdmVu
dENhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEtleSogZXZlbnQsIFdlYlBvcHVw
TWVudVByb3h5R3RrKiBwb3B1cE1lbnUpCit7CisgICAgaWYgKCFwb3B1cE1lbnUtPm1fZGV2aWNl
KQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBpZiAoZXZlbnQtPmtleXZhbCA9PSBHREtf
S0VZX0VzY2FwZSkgeworICAgICAgICBwb3B1cE1lbnUtPmhpZGVQb3B1cE1lbnUoKTsKKyAgICAg
ICAgcmV0dXJuIFRSVUU7CiAgICAgfQorCisgICAgaWYgKHBvcHVwTWVudS0+dHlwZUFoZWFkRmlu
ZChldmVudCkpCisgICAgICAgIHJldHVybiBUUlVFOworCisgICAgLy8gRm9yd2FyZCB0aGUgZXZl
bnQgdG8gdGhlIHRyZWUgdmlldy4KKyAgICBndGtfd2lkZ2V0X2V2ZW50KHBvcHVwTWVudS0+bV90
cmVlVmlldywgcmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSk7CisgICAgcmV0dXJu
IFRSVUU7CiB9CiAKLXZvaWQgV2ViUG9wdXBNZW51UHJveHlHdGs6OnNob3dQb3B1cE1lbnUoY29u
c3QgSW50UmVjdCYgcmVjdCwgVGV4dERpcmVjdGlvbiwgZG91YmxlIC8qIHBhZ2VTY2FsZUZhY3Rv
ciAqLywgY29uc3QgVmVjdG9yPFdlYlBvcHVwSXRlbT4mIGl0ZW1zLCBjb25zdCBQbGF0Zm9ybVBv
cHVwTWVudURhdGEmLCBpbnQzMl90IHNlbGVjdGVkSW5kZXgpCit2b2lkIFdlYlBvcHVwTWVudVBy
b3h5R3RrOjpjcmVhdGVQb3B1cE1lbnUoY29uc3QgVmVjdG9yPFdlYlBvcHVwSXRlbT4mIGl0ZW1z
LCBpbnQzMl90IHNlbGVjdGVkSW5kZXgpCiB7CiAgICAgQVNTRVJUKCFtX3BvcHVwKTsKLSAgICBt
X3BvcHVwID0gZ3RrX21lbnVfbmV3KCk7CisKKyAgICBHUmVmUHRyPEd0a1RyZWVTdG9yZT4gbW9k
ZWwgPSBhZG9wdEdSZWYoZ3RrX3RyZWVfc3RvcmVfbmV3KENvbHVtbnM6OkNvdW50LCBHX1RZUEVf
U1RSSU5HLCBHX1RZUEVfU1RSSU5HLCBHX1RZUEVfQk9PTEVBTiwgR19UWVBFX0JPT0xFQU4sIEdf
VFlQRV9CT09MRUFOLCBHX1RZUEVfVUlOVCkpOworICAgIEd0a1RyZWVJdGVyIHBhcmVudEl0ZXI7
CisgICAgdW5zaWduZWQgaW5kZXggPSAwOworICAgIG1fcGF0aHMucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShpdGVtcy5zaXplKCkpOworICAgIGZvciAoY29uc3QgYXV0byYgaXRlbSA6IGl0ZW1zKSB7
CisgICAgICAgIGlmIChpdGVtLm1faXNMYWJlbCkgeworICAgICAgICAgICAgZ3RrX3RyZWVfc3Rv
cmVfaW5zZXJ0X3dpdGhfdmFsdWVzKG1vZGVsLmdldCgpLCAmcGFyZW50SXRlciwgbnVsbHB0ciwg
LTEsCisgICAgICAgICAgICAgICAgQ29sdW1uczo6TGFiZWwsIGl0ZW0ubV90ZXh0LnN0cmlwV2hp
dGVTcGFjZSgpLnV0ZjgoKS5kYXRhKCksCisgICAgICAgICAgICAgICAgQ29sdW1uczo6SXNHcm91
cCwgVFJVRSwKKyAgICAgICAgICAgICAgICBDb2x1bW5zOjpJc0VuYWJsZWQsIFRSVUUsCisgICAg
ICAgICAgICAgICAgLTEpOworICAgICAgICAgICAgLy8gV2UgbmV2ZXIgbmVlZCB0aGUgcGF0aCBm
b3IgZ3JvdXAgbGFiZWxzLgorICAgICAgICAgICAgbV9wYXRocy51bmNoZWNrZWRBcHBlbmQobnVs
bHB0cik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBHdGtUcmVlSXRlciBpdGVyOwor
ICAgICAgICAgICAgYm9vbCBpc1NlbGVjdGVkID0gc2VsZWN0ZWRJbmRleCAmJiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oc2VsZWN0ZWRJbmRleCkgPT0gaW5kZXg7CisgICAgICAgICAgICBndGtfdHJl
ZV9zdG9yZV9pbnNlcnRfd2l0aF92YWx1ZXMobW9kZWwuZ2V0KCksICZpdGVyLCBpdGVtLm1fdGV4
dC5zdGFydHNXaXRoKCIgICAgIikgPyAmcGFyZW50SXRlciA6IG51bGxwdHIsIC0xLAorICAgICAg
ICAgICAgICAgIENvbHVtbnM6OkxhYmVsLCBpdGVtLm1fdGV4dC5zdHJpcFdoaXRlU3BhY2UoKS51
dGY4KCkuZGF0YSgpLAorICAgICAgICAgICAgICAgIENvbHVtbnM6OlRvb2x0aXAsIGl0ZW0ubV90
b29sVGlwLmlzRW1wdHkoKSA/IG51bGxwdHIgOiBpdGVtLm1fdG9vbFRpcC51dGY4KCkuZGF0YSgp
LAorICAgICAgICAgICAgICAgIENvbHVtbnM6OklzR3JvdXAsIEZBTFNFLAorICAgICAgICAgICAg
ICAgIENvbHVtbnM6OklzU2VsZWN0ZWQsIGlzU2VsZWN0ZWQsCisgICAgICAgICAgICAgICAgQ29s
dW1uczo6SXNFbmFibGVkLCBpdGVtLm1faXNFbmFibGVkLAorICAgICAgICAgICAgICAgIENvbHVt
bnM6OkluZGV4LCBpbmRleCwKKyAgICAgICAgICAgICAgICAtMSk7CisgICAgICAgICAgICBpZiAo
aXNTZWxlY3RlZCkgeworICAgICAgICAgICAgICAgIEFTU0VSVCghbV9zZWxlY3RlZEl0ZW0pOwor
ICAgICAgICAgICAgICAgIG1fc2VsZWN0ZWRJdGVtID0gaW5kZXg7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBtX3BhdGhzLnVuY2hlY2tlZEFwcGVuZChHVW5pcXVlUHRyPEd0a1RyZWVQYXRo
PihndGtfdHJlZV9tb2RlbF9nZXRfcGF0aChHVEtfVFJFRV9NT0RFTChtb2RlbC5nZXQoKSksICZp
dGVyKSkpOworICAgICAgICB9CisgICAgICAgIGluZGV4Kys7CisgICAgfQorCisgICAgbV90cmVl
VmlldyA9IGd0a190cmVlX3ZpZXdfbmV3X3dpdGhfbW9kZWwoR1RLX1RSRUVfTU9ERUwobW9kZWwu
Z2V0KCkpKTsKKyAgICBhdXRvKiB0cmVlVmlldyA9IEdUS19UUkVFX1ZJRVcobV90cmVlVmlldyk7
CisgICAgZ19zaWduYWxfY29ubmVjdCh0cmVlVmlldywgInJvdy1hY3RpdmF0ZWQiLCBHX0NBTExC
QUNLKHRyZWVWaWV3Um93QWN0aXZhdGVkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9j
b25uZWN0X2FmdGVyKHRyZWVWaWV3LCAiYnV0dG9uLXJlbGVhc2UtZXZlbnQiLCBHX0NBTExCQUNL
KHRyZWVWaWV3QnV0dG9uUmVsZWFzZUV2ZW50Q2FsbGJhY2spLCB0aGlzKTsKKyAgICBndGtfdHJl
ZV92aWV3X3NldF90b29sdGlwX2NvbHVtbih0cmVlVmlldywgQ29sdW1uczo6VG9vbHRpcCk7Cisg
ICAgZ3RrX3RyZWVfdmlld19zZXRfc2hvd19leHBhbmRlcnModHJlZVZpZXcsIEZBTFNFKTsKKyAg
ICBndGtfdHJlZV92aWV3X3NldF9sZXZlbF9pbmRlbnRhdGlvbih0cmVlVmlldywgMTIpOworICAg
IGd0a190cmVlX3ZpZXdfc2V0X2VuYWJsZV9zZWFyY2godHJlZVZpZXcsIEZBTFNFKTsKKyAgICBn
dGtfdHJlZV92aWV3X3NldF9hY3RpdmF0ZV9vbl9zaW5nbGVfY2xpY2sodHJlZVZpZXcsIFRSVUUp
OworICAgIGd0a190cmVlX3ZpZXdfc2V0X2hvdmVyX3NlbGVjdGlvbih0cmVlVmlldywgVFJVRSk7
CisgICAgZ3RrX3RyZWVfdmlld19zZXRfaGVhZGVyc192aXNpYmxlKHRyZWVWaWV3LCBGQUxTRSk7
CisgICAgZ3RrX3RyZWVfdmlld19pbnNlcnRfY29sdW1uX3dpdGhfZGF0YV9mdW5jKHRyZWVWaWV3
LCAwLCBudWxscHRyLCBndGtfY2VsbF9yZW5kZXJlcl90ZXh0X25ldygpLCBbXShHdGtUcmVlVmll
d0NvbHVtbiosIEd0a0NlbGxSZW5kZXJlciogcmVuZGVyZXIsIEd0a1RyZWVNb2RlbCogbW9kZWws
IEd0a1RyZWVJdGVyKiBpdGVyLCBncG9pbnRlcikgeworICAgICAgICBHVW5pcXVlT3V0UHRyPGNo
YXI+IGxhYmVsOworICAgICAgICBnYm9vbGVhbiBpc0dyb3VwLCBpc0VuYWJsZWQ7CisgICAgICAg
IGd0a190cmVlX21vZGVsX2dldChtb2RlbCwgaXRlciwgQ29sdW1uczo6TGFiZWwsICZsYWJlbC5v
dXRQdHIoKSwgQ29sdW1uczo6SXNHcm91cCwgJmlzR3JvdXAsIENvbHVtbnM6OklzRW5hYmxlZCwg
JmlzRW5hYmxlZCwgLTEpOworICAgICAgICBpZiAoaXNHcm91cCkgeworICAgICAgICAgICAgR1Vu
aXF1ZVB0cjxjaGFyPiBtYXJrdXAoZ19zdHJkdXBfcHJpbnRmKCI8Yj4lczwvYj4iLCBsYWJlbC5n
ZXQoKSkpOworICAgICAgICAgICAgZ19vYmplY3Rfc2V0KHJlbmRlcmVyLCAibWFya3VwIiwgbWFy
a3VwLmdldCgpLCBudWxscHRyKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBnX29iamVj
dF9zZXQocmVuZGVyZXIsICJ0ZXh0IiwgbGFiZWwuZ2V0KCksICJzZW5zaXRpdmUiLCBpc0VuYWJs
ZWQsIG51bGxwdHIpOworICAgIH0sIG51bGxwdHIsIG51bGxwdHIpOworICAgIGd0a190cmVlX3Zp
ZXdfZXhwYW5kX2FsbCh0cmVlVmlldyk7CisKKyAgICBhdXRvKiBzZWxlY3Rpb24gPSBndGtfdHJl
ZV92aWV3X2dldF9zZWxlY3Rpb24odHJlZVZpZXcpOworICAgIGd0a190cmVlX3NlbGVjdGlvbl9z
ZXRfbW9kZShzZWxlY3Rpb24sIEdUS19TRUxFQ1RJT05fU0lOR0xFKTsKKyAgICBndGtfdHJlZV9z
ZWxlY3Rpb25fdW5zZWxlY3RfYWxsKHNlbGVjdGlvbik7CisgICAgZ3RrX3RyZWVfc2VsZWN0aW9u
X3NldF9zZWxlY3RfZnVuY3Rpb24oc2VsZWN0aW9uLCBbXShHdGtUcmVlU2VsZWN0aW9uKiwgR3Rr
VHJlZU1vZGVsKiBtb2RlbCwgR3RrVHJlZVBhdGgqIHBhdGgsIGdib29sZWFuIHNlbGVjdGVkLCBn
cG9pbnRlcikgLT4gZ2Jvb2xlYW4geworICAgICAgICBHdGtUcmVlSXRlciBpdGVyOworICAgICAg
ICBndGtfdHJlZV9tb2RlbF9nZXRfaXRlcihtb2RlbCwgJml0ZXIsIHBhdGgpOworICAgICAgICBn
Ym9vbGVhbiBpc0dyb3VwLCBpc0VuYWJsZWQ7CisgICAgICAgIGd0a190cmVlX21vZGVsX2dldCht
b2RlbCwgJml0ZXIsIENvbHVtbnM6OklzR3JvdXAsICZpc0dyb3VwLCBDb2x1bW5zOjpJc0VuYWJs
ZWQsICZpc0VuYWJsZWQsIC0xKTsKKyAgICAgICAgcmV0dXJuICFpc0dyb3VwICYmIGlzRW5hYmxl
ZDsKKyAgICB9LCBudWxscHRyLCBudWxscHRyKTsKKworICAgIGF1dG8qIHN3aW5kb3cgPSBndGtf
c2Nyb2xsZWRfd2luZG93X25ldyhudWxscHRyLCBudWxscHRyKTsKKyAgICBndGtfc2Nyb2xsZWRf
d2luZG93X3NldF9wb2xpY3koR1RLX1NDUk9MTEVEX1dJTkRPVyhzd2luZG93KSwgR1RLX1BPTElD
WV9ORVZFUiwgR1RLX1BPTElDWV9BVVRPTUFUSUMpOworICAgIGd0a19zY3JvbGxlZF93aW5kb3df
c2V0X3NoYWRvd190eXBlKEdUS19TQ1JPTExFRF9XSU5ET1coc3dpbmRvdyksIEdUS19TSEFET1df
RVRDSEVEX0lOKTsKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHN3aW5kb3cp
LCBtX3RyZWVWaWV3KTsKKyAgICBndGtfd2lkZ2V0X3Nob3cobV90cmVlVmlldyk7CisKKyAgICBt
X3BvcHVwID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19QT1BVUCk7CisgICAgZ19zaWduYWxf
Y29ubmVjdChtX3BvcHVwLCAiYnV0dG9uLXByZXNzLWV2ZW50IiwgR19DQUxMQkFDSyhidXR0b25Q
cmVzc0V2ZW50Q2FsbGJhY2spLCB0aGlzKTsKICAgICBnX3NpZ25hbF9jb25uZWN0KG1fcG9wdXAs
ICJrZXktcHJlc3MtZXZlbnQiLCBHX0NBTExCQUNLKGtleVByZXNzRXZlbnRDYWxsYmFjayksIHRo
aXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9wb3B1cCwgInVubWFwIiwgR19DQUxMQkFDSyht
ZW51VW5tYXBwZWRDYWxsYmFjayksIHRoaXMpOworICAgIGd0a193aW5kb3dfc2V0X3R5cGVfaGlu
dChHVEtfV0lORE9XKG1fcG9wdXApLCBHREtfV0lORE9XX1RZUEVfSElOVF9DT01CTyk7CisgICAg
Z3RrX3dpbmRvd19zZXRfcmVzaXphYmxlKEdUS19XSU5ET1cobV9wb3B1cCksIEZBTFNFKTsKKyAg
ICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKG1fcG9wdXApLCBzd2luZG93KTsKKyAg
ICBndGtfd2lkZ2V0X3Nob3coc3dpbmRvdyk7Cit9CiAKLSAgICBwb3B1bGF0ZVBvcHVwTWVudShp
dGVtcyk7Ci0gICAgZ3RrX21lbnVfc2V0X2FjdGl2ZShHVEtfTUVOVShtX3BvcHVwKSwgc2VsZWN0
ZWRJbmRleCk7Cit2b2lkIFdlYlBvcHVwTWVudVByb3h5R3RrOjpzaG93KCkKK3sKKyAgICBpZiAo
bV9zZWxlY3RlZEl0ZW0pIHsKKyAgICAgICAgYXV0byYgc2VsZWN0ZWRQYXRoID0gbV9wYXRoc1tt
X3NlbGVjdGVkSXRlbS52YWx1ZSgpXTsKKyAgICAgICAgQVNTRVJUKHNlbGVjdGVkUGF0aCk7Cisg
ICAgICAgIGd0a190cmVlX3ZpZXdfc2Nyb2xsX3RvX2NlbGwoR1RLX1RSRUVfVklFVyhtX3RyZWVW
aWV3KSwgc2VsZWN0ZWRQYXRoLmdldCgpLCBudWxscHRyLCBUUlVFLCAwLjUsIDApOworICAgICAg
ICBndGtfdHJlZV92aWV3X3NldF9jdXJzb3IoR1RLX1RSRUVfVklFVyhtX3RyZWVWaWV3KSwgc2Vs
ZWN0ZWRQYXRoLmdldCgpLCBudWxscHRyLCBGQUxTRSk7CisgICAgfQorICAgIGd0a193aWRnZXRf
Z3JhYl9mb2N1cyhtX3RyZWVWaWV3KTsKKyAgICBndGtfd2lkZ2V0X3Nob3cobV9wb3B1cCk7Cit9
CiAKLSAgICByZXNldFR5cGVBaGVhZEZpbmRTdGF0ZSgpOwordm9pZCBXZWJQb3B1cE1lbnVQcm94
eUd0azo6c2hvd1BvcHVwTWVudShjb25zdCBJbnRSZWN0JiByZWN0LCBUZXh0RGlyZWN0aW9uLCBk
b3VibGUgLyogcGFnZVNjYWxlRmFjdG9yICovLCBjb25zdCBWZWN0b3I8V2ViUG9wdXBJdGVtPiYg
aXRlbXMsIGNvbnN0IFBsYXRmb3JtUG9wdXBNZW51RGF0YSYsIGludDMyX3Qgc2VsZWN0ZWRJbmRl
eCkKK3sKKyAgICBjcmVhdGVQb3B1cE1lbnUoaXRlbXMsIHNlbGVjdGVkSW5kZXgpOworICAgIEFT
U0VSVChtX3BvcHVwKTsKKworICAgIEd0a1JlcXVpc2l0aW9uIHRyZWVWaWV3UmVxdWlzaXRpb247
CisgICAgZ3RrX3dpZGdldF9nZXRfcHJlZmVycmVkX3NpemUobV90cmVlVmlldywgJnRyZWVWaWV3
UmVxdWlzaXRpb24sIG51bGxwdHIpOworICAgIGF1dG8qIGNvbHVtbiA9IGd0a190cmVlX3ZpZXdf
Z2V0X2NvbHVtbihHVEtfVFJFRV9WSUVXKG1fdHJlZVZpZXcpLCBDb2x1bW5zOjpMYWJlbCk7Cisg
ICAgZ2ludCBpdGVtSGVpZ2h0OworICAgIGd0a190cmVlX3ZpZXdfY29sdW1uX2NlbGxfZ2V0X3Np
emUoY29sdW1uLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCAmaXRlbUhlaWdo
dCk7CisgICAgZ2ludCB2ZXJ0aWNhbFNlcGFyYXRvcjsKKyAgICBndGtfd2lkZ2V0X3N0eWxlX2dl
dChtX3RyZWVWaWV3LCAidmVydGljYWwtc2VwYXJhdG9yIiwgJnZlcnRpY2FsU2VwYXJhdG9yLCBu
dWxscHRyKTsKKyAgICBpdGVtSGVpZ2h0ICs9IHZlcnRpY2FsU2VwYXJhdG9yOworICAgIGlmICgh
aXRlbUhlaWdodCkKKyAgICAgICAgcmV0dXJuOwogCisgICAgYXV0byogZGlzcGxheSA9IGd0a193
aWRnZXRfZ2V0X2Rpc3BsYXkobV93ZWJWaWV3KTsKKyAgICBhdXRvKiBtb25pdG9yID0gZ2RrX2Rp
c3BsYXlfZ2V0X21vbml0b3JfYXRfd2luZG93KGRpc3BsYXksIGd0a193aWRnZXRfZ2V0X3dpbmRv
dyhtX3dlYlZpZXcpKTsKKyAgICBHZGtSZWN0YW5nbGUgYXJlYTsKKyAgICBnZGtfbW9uaXRvcl9n
ZXRfd29ya2FyZWEobW9uaXRvciwgJmFyZWEpOworICAgIGludCB3aWR0aCA9IHN0ZDo6bWluKHJl
Y3Qud2lkdGgoKSwgYXJlYS53aWR0aCk7CisgICAgc2l6ZV90IGl0ZW1Db3VudCA9IHN0ZDo6bWlu
PHNpemVfdD4oaXRlbXMuc2l6ZSgpLCAoYXJlYS5oZWlnaHQgLyAzKSAvIGl0ZW1IZWlnaHQpOwor
CisgICAgYXV0byogc3dpbmRvdyA9IEdUS19TQ1JPTExFRF9XSU5ET1coZ3RrX2Jpbl9nZXRfY2hp
bGQoR1RLX0JJTihtX3BvcHVwKSkpOworICAgIC8vIERpc2FibGUgc2Nyb2xsYmFycyB3aGVuIHRo
ZXJlJ3Mgb25seSBvbmUgaXRlbSB0byBlbnN1cmUgdGhlIHNjcm9sbGVkIHdpbmRvdyBkb2Vzbid0
IHRha2UgdGhlbSBpbnRvIGFjY291bnQgd2hlbiBjYWxjdWxhdGluZyBpdHMgbWluaW11bSBzaXpl
LgorICAgIGd0a19zY3JvbGxlZF93aW5kb3dfc2V0X3BvbGljeShzd2luZG93LCBHVEtfUE9MSUNZ
X05FVkVSLCBpdGVtQ291bnQgPiAxID8gR1RLX1BPTElDWV9BVVRPTUFUSUMgOiBHVEtfUE9MSUNZ
X05FVkVSKTsKKyAgICBndGtfd2lkZ2V0X3JlYWxpemUobV90cmVlVmlldyk7CisgICAgZ3RrX3Ry
ZWVfdmlld19jb2x1bW5zX2F1dG9zaXplKEdUS19UUkVFX1ZJRVcobV90cmVlVmlldykpOworICAg
IGd0a19zY3JvbGxlZF93aW5kb3dfc2V0X21pbl9jb250ZW50X3dpZHRoKHN3aW5kb3csIHdpZHRo
KTsKKyAgICBndGtfd2lkZ2V0X3NldF9zaXplX3JlcXVlc3QobV9wb3B1cCwgd2lkdGgsIC0xKTsK
KyAgICBndGtfc2Nyb2xsZWRfd2luZG93X3NldF9taW5fY29udGVudF9oZWlnaHQoc3dpbmRvdywg
aXRlbUNvdW50ICogaXRlbUhlaWdodCk7CisKKyAgICBHdGtSZXF1aXNpdGlvbiBtZW51UmVxdWlz
aXRpb247CisgICAgZ3RrX3dpZGdldF9nZXRfcHJlZmVycmVkX3NpemUobV9wb3B1cCwgJm1lbnVS
ZXF1aXNpdGlvbiwgbnVsbHB0cik7CiAgICAgSW50UG9pbnQgbWVudVBvc2l0aW9uID0gY29udmVy
dFdpZGdldFBvaW50VG9TY3JlZW5Qb2ludChtX3dlYlZpZXcsIHJlY3QubG9jYXRpb24oKSk7Ci0g
ICAgbWVudVBvc2l0aW9uLm1vdmUoMCwgcmVjdC5oZWlnaHQoKSk7Ci0KLSAgICAvLyBUaGlzIGFw
cHJvYWNoIGZvbGxvd3MgdGhlIG9uZSBpbiBndGtjb21ib2JveC5jLgotICAgIEd0a1JlcXVpc2l0
aW9uIHJlcXVpc2l0aW9uOwotICAgIGd0a193aWRnZXRfc2V0X3NpemVfcmVxdWVzdChtX3BvcHVw
LCAtMSwgLTEpOwotICAgIGd0a193aWRnZXRfZ2V0X3ByZWZlcnJlZF9zaXplKG1fcG9wdXAsICZy
ZXF1aXNpdGlvbiwgbnVsbHB0cik7Ci0gICAgZ3RrX3dpZGdldF9zZXRfc2l6ZV9yZXF1ZXN0KG1f
cG9wdXAsIHN0ZDo6bWF4KHJlY3Qud2lkdGgoKSwgcmVxdWlzaXRpb24ud2lkdGgpLCAtMSk7Ci0K
LSAgICBpZiAoaW50IGl0ZW1Db3VudCA9IGl0ZW1zLnNpemUoKSkgewotICAgICAgICBHVW5pcXVl
UHRyPEdMaXN0PiBjaGlsZHJlbihndGtfY29udGFpbmVyX2dldF9jaGlsZHJlbihHVEtfQ09OVEFJ
TkVSKG1fcG9wdXApKSk7Ci0gICAgICAgIGludCBpOwotICAgICAgICBHTGlzdCogY2hpbGQ7Ci0g
ICAgICAgIGZvciAoaSA9IDAsIGNoaWxkID0gY2hpbGRyZW4uZ2V0KCk7IGkgPCBpdGVtQ291bnQ7
IGkrKywgY2hpbGQgPSBnX2xpc3RfbmV4dChjaGlsZCkpIHsKLSAgICAgICAgICAgIGlmIChpID4g
c2VsZWN0ZWRJbmRleCkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgR3Rr
V2lkZ2V0KiBpdGVtID0gR1RLX1dJREdFVChjaGlsZC0+ZGF0YSk7Ci0gICAgICAgICAgICBHdGtS
ZXF1aXNpdGlvbiBpdGVtUmVxdWlzaXRpb247Ci0gICAgICAgICAgICBndGtfd2lkZ2V0X2dldF9w
cmVmZXJyZWRfc2l6ZShpdGVtLCAmaXRlbVJlcXVpc2l0aW9uLCBudWxscHRyKTsKLSAgICAgICAg
ICAgIG1lbnVQb3NpdGlvbi5zZXRZKG1lbnVQb3NpdGlvbi55KCkgLSBpdGVtUmVxdWlzaXRpb24u
aGVpZ2h0KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIENlbnRlciB2ZXJ0
aWNhbGx5IHRoZSBlbXB0eSBwb3B1cCBpbiB0aGUgY29tYm8gYm94IGFyZWEuCi0gICAgICAgIG1l
bnVQb3NpdGlvbi5zZXRZKG1lbnVQb3NpdGlvbi55KCkgLSByZWN0LmhlaWdodCgpIC8gMik7Cisg
ICAgLy8gRklYTUU6IFdlIGNhbid0IGVuc3VyZSB0aGUgbWVudSB3aWxsIGJlIG9uIHNjcmVlbiBp
biBXYXlsYW5kLgorICAgIC8vIGh0dHBzOi8vYmxvZy5ndGsub3JnLzIwMTYvMDcvMTUvZnV0dXJl
LW9mLXJlbGF0aXZlLXdpbmRvdy1wb3NpdGlvbmluZy8KKyAgICAvLyBodHRwczovL2dpdGxhYi5n
bm9tZS5vcmcvR05PTUUvZ3RrL2lzc3Vlcy85OTcKKyAgICBpZiAobWVudVBvc2l0aW9uLngoKSA8
IGFyZWEueCkKKyAgICAgICAgbWVudVBvc2l0aW9uLnNldFgoYXJlYS54KTsKKyAgICBlbHNlIGlm
IChtZW51UG9zaXRpb24ueCgpICsgbWVudVJlcXVpc2l0aW9uLndpZHRoID4gYXJlYS54ICsgYXJl
YS53aWR0aCkKKyAgICAgICAgbWVudVBvc2l0aW9uLnNldFgoYXJlYS54ICsgYXJlYS53aWR0aCAt
IG1lbnVSZXF1aXNpdGlvbi53aWR0aCk7CisKKyAgICBpZiAobWVudVBvc2l0aW9uLnkoKSArIHJl
Y3QuaGVpZ2h0KCkgKyBtZW51UmVxdWlzaXRpb24uaGVpZ2h0IDw9IGFyZWEueSArIGFyZWEuaGVp
Z2h0CisgICAgICAgIHx8IG1lbnVQb3NpdGlvbi55KCkgLSBhcmVhLnkgPCAoYXJlYS55ICsgYXJl
YS5oZWlnaHQpIC0gKG1lbnVQb3NpdGlvbi55KCkgKyByZWN0LmhlaWdodCgpKSkKKyAgICAgICAg
bWVudVBvc2l0aW9uLm1vdmUoMCwgcmVjdC5oZWlnaHQoKSk7CisgICAgZWxzZQorICAgICAgICBt
ZW51UG9zaXRpb24ubW92ZSgwLCAtbWVudVJlcXVpc2l0aW9uLmhlaWdodCk7CisgICAgZ3RrX3dp
bmRvd19tb3ZlKEdUS19XSU5ET1cobV9wb3B1cCksIG1lbnVQb3NpdGlvbi54KCksIG1lbnVQb3Np
dGlvbi55KCkpOworCisgICAgYXV0byogdG9wbGV2ZWwgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZl
bChtX3dlYlZpZXcpOworICAgIGlmIChHVEtfSVNfV0lORE9XKHRvcGxldmVsKSkgeworICAgICAg
ICBndGtfd2luZG93X3NldF90cmFuc2llbnRfZm9yKEdUS19XSU5ET1cobV9wb3B1cCksIEdUS19X
SU5ET1codG9wbGV2ZWwpKTsKKyAgICAgICAgZ3RrX3dpbmRvd19ncm91cF9hZGRfd2luZG93KGd0
a193aW5kb3dfZ2V0X2dyb3VwKEdUS19XSU5ET1codG9wbGV2ZWwpKSwgR1RLX1dJTkRPVyhtX3Bv
cHVwKSk7CiAgICAgfQotCi0gICAgZ3RrX21lbnVfYXR0YWNoX3RvX3dpZGdldChHVEtfTUVOVSht
X3BvcHVwKSwgR1RLX1dJREdFVChtX3dlYlZpZXcpLCBudWxscHRyKTsKKyAgICBndGtfd2luZG93
X3NldF9hdHRhY2hlZF90byhHVEtfV0lORE9XKG1fcG9wdXApLCBtX3dlYlZpZXcpOworICAgIGd0
a193aW5kb3dfc2V0X3NjcmVlbihHVEtfV0lORE9XKG1fcG9wdXApLCBndGtfd2lkZ2V0X2dldF9z
Y3JlZW4obV93ZWJWaWV3KSk7CiAKICAgICBjb25zdCBHZGtFdmVudCogZXZlbnQgPSBtX2NsaWVu
dC0+Y3VycmVudGx5UHJvY2Vzc2VkTW91c2VEb3duRXZlbnQoKSA/IG1fY2xpZW50LT5jdXJyZW50
bHlQcm9jZXNzZWRNb3VzZURvd25FdmVudCgpLT5uYXRpdmVFdmVudCgpIDogbnVsbHB0cjsKLSAg
ICBndGtfbWVudV9wb3B1cF9mb3JfZGV2aWNlKEdUS19NRU5VKG1fcG9wdXApLCBldmVudCA/IGdk
a19ldmVudF9nZXRfZGV2aWNlKGV2ZW50KSA6IG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsCi0g
ICAgICAgIFtdKEd0a01lbnUqLCBnaW50KiB4LCBnaW50KiB5LCBnYm9vbGVhbiogcHVzaEluLCBn
cG9pbnRlciB1c2VyRGF0YSkgewotICAgICAgICAgICAgLy8gV2UgY2FuIHBhc3MgYSBwb2ludGVy
IHRvIHRoZSBtZW51UG9zaXRpb24gbG9jYWwgdmFyaWFibGUgYmVjYXVzZSB0aGUgbmVzdGVkIG1h
aW4gbG9vcCBlbnN1cmVzIHRoaXMgaXMgY2FsbGVkIGluIHRoZSBmdW5jdGlvbiBjb250ZXh0Lgot
ICAgICAgICAgICAgSW50UG9pbnQqIG1lbnVQb3NpdGlvbiA9IHN0YXRpY19jYXN0PEludFBvaW50
Kj4odXNlckRhdGEpOwotICAgICAgICAgICAgKnggPSBtZW51UG9zaXRpb24tPngoKTsKLSAgICAg
ICAgICAgICp5ID0gbWVudVBvc2l0aW9uLT55KCk7Ci0gICAgICAgICAgICAqcHVzaEluID0gbWVu
dVBvc2l0aW9uLT55KCkgPCAwOwotICAgICAgICB9LCAmbWVudVBvc2l0aW9uLCBudWxscHRyLCBl
dmVudCAmJiBldmVudC0+dHlwZSA9PSBHREtfQlVUVE9OX1BSRVNTID8gZXZlbnQtPmJ1dHRvbi5i
dXR0b24gOiAxLAotICAgICAgICBldmVudCA/IGdka19ldmVudF9nZXRfdGltZShldmVudCkgOiBH
REtfQ1VSUkVOVF9USU1FKTsKLQotICAgIC8vIE5vdyB0aGF0IHRoZSBtZW51IGhhcyBhIHBvc2l0
aW9uLCBzY2hlZHVsZSBhIHJlc2l6ZSB0byBtYWtlIHN1cmUgaXQncyByZXNpemVkIHRvIGZpdCB2
ZXJ0aWNhbGx5IGluIHRoZSB3b3JrIGFyZWEuCi0gICAgZ3RrX3dpZGdldF9xdWV1ZV9yZXNpemUo
bV9wb3B1cCk7CisgICAgbV9kZXZpY2UgPSBldmVudCA/IGdka19ldmVudF9nZXRfZGV2aWNlKGV2
ZW50KSA6IG51bGxwdHI7CisgICAgaWYgKCFtX2RldmljZSkKKyAgICAgICAgbV9kZXZpY2UgPSBn
dGtfZ2V0X2N1cnJlbnRfZXZlbnRfZGV2aWNlKCk7CisgICAgaWYgKG1fZGV2aWNlICYmIGdka19k
ZXZpY2VfZ2V0X2Rpc3BsYXkobV9kZXZpY2UpICE9IGRpc3BsYXkpCisgICAgICAgIG1fZGV2aWNl
ID0gbnVsbHB0cjsKKyAgICBpZiAoIW1fZGV2aWNlKQorICAgICAgICBtX2RldmljZSA9IGdka19z
ZWF0X2dldF9wb2ludGVyKGdka19kaXNwbGF5X2dldF9kZWZhdWx0X3NlYXQoZGlzcGxheSkpOwor
ICAgIEFTU0VSVChtX2RldmljZSk7CisgICAgaWYgKGdka19kZXZpY2VfZ2V0X3NvdXJjZShtX2Rl
dmljZSkgPT0gR0RLX1NPVVJDRV9LRVlCT0FSRCkKKyAgICAgICAgbV9kZXZpY2UgPSBnZGtfZGV2
aWNlX2dldF9hc3NvY2lhdGVkX2RldmljZShtX2RldmljZSk7CisKKyNpZiBHVEtfQ0hFQ0tfVkVS
U0lPTigzLCAyMCwgMCkKKyAgICBndGtfZ3JhYl9hZGQobV9wb3B1cCk7CisgICAgYXV0byBncmFi
UmVzdWx0ID0gZ2RrX3NlYXRfZ3JhYihnZGtfZGV2aWNlX2dldF9zZWF0KG1fZGV2aWNlKSwgZ3Rr
X3dpZGdldF9nZXRfd2luZG93KG1fcG9wdXApLCBHREtfU0VBVF9DQVBBQklMSVRZX0FMTCwgVFJV
RSwgbnVsbHB0ciwgbnVsbHB0ciwgW10oR2RrU2VhdCosIEdka1dpbmRvdyosIGdwb2ludGVyIHVz
ZXJEYXRhKSB7CisgICAgICAgIHN0YXRpY19jYXN0PFdlYlBvcHVwTWVudVByb3h5R3RrKj4odXNl
ckRhdGEpLT5zaG93KCk7CisgICAgfSwgdGhpcyk7CisjZWxzZQorICAgIGd0a19kZXZpY2VfZ3Jh
Yl9hZGQobV9wb3B1cCwgbV9kZXZpY2UsIFRSVUUpOworICAgIGF1dG8gZ3JhYlJlc3VsdCA9IGdk
a19kZXZpY2VfZ3JhYihtX2RldmljZSwgZ3RrX3dpZGdldF9nZXRfd2luZG93KG1fcG9wdXApLCBH
REtfT1dORVJTSElQX1dJTkRPVywgVFJVRSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8R2RrRXZlbnRN
YXNrPihHREtfQlVUVE9OX1BSRVNTX01BU0sgfCBHREtfQlVUVE9OX1JFTEVBU0VfTUFTSyB8IEdE
S19QT0lOVEVSX01PVElPTl9NQVNLKSwgbnVsbHB0ciwgR0RLX0NVUlJFTlRfVElNRSk7CisgICAg
c2hvdygpOworI2VuZGlmCiAKICAgICAvLyBQb3B1cE1lbnUgY2FuIGZhaWwgdG8gb3BlbiB3aGVu
IHRoZXJlIGlzIG5vIG1vdXNlIGdyYWIuCiAgICAgLy8gRW5zdXJlIFdlYkNvcmUgZG9lcyBub3Qg
Z28gaW50byBzb21lIHBlc2t5IHN0YXRlLgotICAgIGlmICghZ3RrX3dpZGdldF9nZXRfdmlzaWJs
ZShtX3BvcHVwKSkgeworICAgIGlmIChncmFiUmVzdWx0ICE9IEdES19HUkFCX1NVQ0NFU1MpIHsK
ICAgICAgICBtX2NsaWVudC0+ZmFpbGVkVG9TaG93UG9wdXBNZW51KCk7CiAgICAgICAgcmV0dXJu
OwogICAgIH0KLQotICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBhY3RpdmUgaXRlbSBnZXRz
IHNlbGVjdGVkIGFmdGVyIHBvcHBpbmcgdXAgdGhlIG1lbnUsIGFuZAotICAgIC8vIGFzIGl0IHNh
eXMgaW4gImd0a2NvbWJvYm94LmMiIChsaW5lIH4xNjA2KTogaXQncyB1Z2x5LCBidXQgZ2V0cyB0
aGUgam9iIGRvbmUuCi0gICAgR3RrV2lkZ2V0KiBhY3RpdmVDaGlsZCA9IGd0a19tZW51X2dldF9h
Y3RpdmUoR1RLX01FTlUobV9wb3B1cCkpOwotICAgIGlmIChhY3RpdmVDaGlsZCAmJiBndGtfd2lk
Z2V0X2dldF92aXNpYmxlKGFjdGl2ZUNoaWxkKSkKLSAgICAgICAgZ3RrX21lbnVfc2hlbGxfc2Vs
ZWN0X2l0ZW0oR1RLX01FTlVfU0hFTEwobV9wb3B1cCksIGFjdGl2ZUNoaWxkKTsKIH0KIAogdm9p
ZCBXZWJQb3B1cE1lbnVQcm94eUd0azo6aGlkZVBvcHVwTWVudSgpCkBAIC0xNDUsOCArMzI1LDI4
IEBAIHZvaWQgV2ViUG9wdXBNZW51UHJveHlHdGs6OmhpZGVQb3B1cE1lbnUoKQogICAgIGlmICgh
bV9wb3B1cCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZ3RrX21lbnVfcG9wZG93bihHVEtfTUVO
VShtX3BvcHVwKSk7Ci0gICAgcmVzZXRUeXBlQWhlYWRGaW5kU3RhdGUoKTsKKyAgICBpZiAobV9k
ZXZpY2UpIHsKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAyMCwgMCkKKyAgICAgICAgZ2RrX3Nl
YXRfdW5ncmFiKGdka19kZXZpY2VfZ2V0X3NlYXQobV9kZXZpY2UpKTsKKyAgICAgICAgZ3RrX2dy
YWJfcmVtb3ZlKG1fcG9wdXApOworI2Vsc2UKKyAgICAgICAgZ2RrX2RldmljZV91bmdyYWIobV9k
ZXZpY2UsIEdES19DVVJSRU5UX1RJTUUpOworICAgICAgICBndGtfZGV2aWNlX2dyYWJfcmVtb3Zl
KG1fcG9wdXAsIG1fZGV2aWNlKTsKKyNlbmRpZgorICAgICAgICBndGtfd2luZG93X3NldF90cmFu
c2llbnRfZm9yKEdUS19XSU5ET1cobV9wb3B1cCksIG51bGxwdHIpOworICAgICAgICBndGtfd2lu
ZG93X3NldF9hdHRhY2hlZF90byhHVEtfV0lORE9XKG1fcG9wdXApLCBudWxscHRyKTsKKyAgICAg
ICAgbV9kZXZpY2UgPSBudWxscHRyOworICAgIH0KKworICAgIGFjdGl2YXRlSXRlbShzdGQ6Om51
bGxvcHQpOworCisgICAgaWYgKG1fY3VycmVudFNlYXJjaFN0cmluZykgeworICAgICAgICBnX3N0
cmluZ19mcmVlKG1fY3VycmVudFNlYXJjaFN0cmluZywgVFJVRSk7CisgICAgICAgIG1fY3VycmVu
dFNlYXJjaFN0cmluZyA9IG51bGxwdHI7CisgICAgfQorCisgICAgZ3RrX3dpZGdldF9kZXN0cm95
KG1fcG9wdXApOworICAgIG1fcG9wdXAgPSBudWxscHRyOwogfQogCiB2b2lkIFdlYlBvcHVwTWVu
dVByb3h5R3RrOjpjYW5jZWxUcmFja2luZygpCkBAIC0xNTQsMTIzICszNTQsOTAgQEAgdm9pZCBX
ZWJQb3B1cE1lbnVQcm94eUd0azo6Y2FuY2VsVHJhY2tpbmcoKQogICAgIGlmICghbV9wb3B1cCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kaXNtaXNzTWVudVRpbWVyLnN0b3AoKTsKICAgICBn
X3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9wb3B1cCwgR19TSUdOQUxfTUFU
Q0hfREFUQSwgMCwgMCwgbnVsbHB0ciwgbnVsbHB0ciwgdGhpcyk7CiAgICAgaGlkZVBvcHVwTWVu
dSgpOwotICAgIGd0a193aWRnZXRfZGVzdHJveShtX3BvcHVwKTsKLSAgICBtX3BvcHVwID0gbnVs
bHB0cjsKIH0KIAotYm9vbCBXZWJQb3B1cE1lbnVQcm94eUd0azo6dHlwZUFoZWFkRmluZChHZGtF
dmVudEtleSogZXZlbnQpCitzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBXZWJQb3B1cE1lbnVQcm94
eUd0azo6dHlwZUFoZWFkRmluZEluZGV4KEdka0V2ZW50S2V5KiBldmVudCkKIHsKLSAgICAvLyBJ
ZiB3ZSB3ZXJlIGdpdmVuIGEgbm9uLXByaW50YWJsZSBjaGFyYWN0ZXIganVzdCBza2lwIGl0Lgot
ICAgIGd1bmljaGFyIHVuaWNvZGVDaGFyYWN0ZXIgPSBnZGtfa2V5dmFsX3RvX3VuaWNvZGUoZXZl
bnQtPmtleXZhbCk7Ci0gICAgaWYgKCFnX3VuaWNoYXJfaXNwcmludCh1bmljb2RlQ2hhcmFjdGVy
KSkgewotICAgICAgICByZXNldFR5cGVBaGVhZEZpbmRTdGF0ZSgpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQorICAgIGd1bmljaGFyIGtleWNoYXIgPSBnZGtfa2V5dmFsX3RvX3VuaWNv
ZGUoZXZlbnQtPmtleXZhbCk7CisgICAgaWYgKCFnX3VuaWNoYXJfaXNwcmludChrZXljaGFyKSkK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIGdsb25nIGNoYXJhY3RlcnNXcml0
dGVuOwotICAgIEdVbmlxdWVQdHI8Z3VuaWNoYXIyPiB1dGYxNlN0cmluZyhnX3VjczRfdG9fdXRm
MTYoJnVuaWNvZGVDaGFyYWN0ZXIsIDEsIG51bGxwdHIsICZjaGFyYWN0ZXJzV3JpdHRlbiwgbnVs
bHB0cikpOwotICAgIGlmICghdXRmMTZTdHJpbmcpIHsKLSAgICAgICAgcmVzZXRUeXBlQWhlYWRG
aW5kU3RhdGUoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIElmIHRo
ZSBjaGFyYWN0ZXIgaXMgdGhlIHNhbWUgYXMgdGhlIGxhc3QgY2hhcmFjdGVyLCB0aGUgdXNlciBp
cyBwcm9iYWJseSB0cnlpbmcgdG8KLSAgICAvLyBjeWNsZSB0aHJvdWdoIHRoZSBtZW51bGlzdCBl
bnRyaWVzLiBUaGlzIG1hdGNoZXMgdGhlIFdlYkNvcmUgYmVoYXZpb3IgZm9yIGNvbGxhcHNlZCBt
ZW51bGlzdHMuCi0gICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHNlYXJjaFRpbWVvdXRNcyA9IDEw
MDA7Ci0gICAgYm9vbCByZXBlYXRpbmdDaGFyYWN0ZXIgPSB1bmljb2RlQ2hhcmFjdGVyICE9IG1f
cHJldmlvdXNLZXlFdmVudENoYXJhY3RlcjsKLSAgICBpZiAoZXZlbnQtPnRpbWUgLSBtX3ByZXZp
b3VzS2V5RXZlbnRUaW1lc3RhbXAgPiBzZWFyY2hUaW1lb3V0TXMpCi0gICAgICAgIG1fY3VycmVu
dFNlYXJjaFN0cmluZyA9IFN0cmluZyhyZWludGVycHJldF9jYXN0PFVDaGFyKj4odXRmMTZTdHJp
bmcuZ2V0KCkpLCBjaGFyYWN0ZXJzV3JpdHRlbik7Ci0gICAgZWxzZSBpZiAocmVwZWF0aW5nQ2hh
cmFjdGVyKQotICAgICAgICBtX2N1cnJlbnRTZWFyY2hTdHJpbmcuYXBwZW5kKFN0cmluZyhyZWlu
dGVycHJldF9jYXN0PFVDaGFyKj4odXRmMTZTdHJpbmcuZ2V0KCkpLCBjaGFyYWN0ZXJzV3JpdHRl
bikpOwotCi0gICAgbV9wcmV2aW91c0tleUV2ZW50VGltZXN0YW1wID0gZXZlbnQtPnRpbWU7Ci0g
ICAgbV9wcmV2aW91c0tleUV2ZW50Q2hhcmFjdGVyID0gdW5pY29kZUNoYXJhY3RlcjsKLQotICAg
IEdVbmlxdWVQdHI8R0xpc3Q+IGNoaWxkcmVuKGd0a19jb250YWluZXJfZ2V0X2NoaWxkcmVuKEdU
S19DT05UQUlORVIobV9wb3B1cCkpKTsKLSAgICBpZiAoIWNoaWxkcmVuKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIC8vIFdlIGNhc2UgZm9sZCBiZWZvcmUgc2VhcmNoaW5nLCBiZWNhdXNl
IHN0cm5jbXAgZG9lcyBub3QgaGFuZGxlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLgotICAgIEdVbmlx
dWVQdHI8Z2NoYXI+IHNlYXJjaFN0cmluZ1dpdGhDYXNlRm9sZGVkKGdfdXRmOF9jYXNlZm9sZCht
X2N1cnJlbnRTZWFyY2hTdHJpbmcudXRmOCgpLmRhdGEoKSwgLTEpKTsKLSAgICBzaXplX3QgcHJl
Zml4TGVuZ3RoID0gc3RybGVuKHNlYXJjaFN0cmluZ1dpdGhDYXNlRm9sZGVkLmdldCgpKTsKLQot
ICAgIC8vIElmIGEgbWVudSBpdGVtIGhhcyBhbHJlYWR5IGJlZW4gc2VsZWN0ZWQsIHN0YXJ0IHNl
YXJjaGluZyBmcm9tIHRoZSBjdXJyZW50Ci0gICAgLy8gaXRlbSBkb3duIHRoZSBsaXN0LiBUaGlz
IHdpbGwgbWFrZSBtdWx0aXBsZSBrZXkgcHJlc3NlcyBvZiB0aGUgc2FtZSBjaGFyYWN0ZXIKLSAg
ICAvLyBhZHZhbmNlIHRoZSBzZWxlY3Rpb24uCi0gICAgR0xpc3QqIGN1cnJlbnRDaGlsZCA9IGNo
aWxkcmVuLmdldCgpOwotICAgIGlmIChtX2N1cnJlbnRseVNlbGVjdGVkTWVudUl0ZW0pIHsKLSAg
ICAgICAgY3VycmVudENoaWxkID0gZ19saXN0X2ZpbmQoY2hpbGRyZW4uZ2V0KCksIG1fY3VycmVu
dGx5U2VsZWN0ZWRNZW51SXRlbSk7Ci0gICAgICAgIGlmICghY3VycmVudENoaWxkKSB7Ci0gICAg
ICAgICAgICBtX2N1cnJlbnRseVNlbGVjdGVkTWVudUl0ZW0gPSBudWxscHRyOwotICAgICAgICAg
ICAgY3VycmVudENoaWxkID0gY2hpbGRyZW4uZ2V0KCk7Ci0gICAgICAgIH0KKyAgICBpZiAoZXZl
bnQtPnRpbWUgPCBtX3ByZXZpb3VzS2V5RXZlbnRUaW1lKQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwogCi0gICAgICAgIC8vIFJlcGVhdGluZyBjaGFyYWN0ZXJzIHNob3VsZCBpdGVyYXRl
LgotICAgICAgICBpZiAocmVwZWF0aW5nQ2hhcmFjdGVyKSB7Ci0gICAgICAgICAgICBpZiAoR0xp
c3QqIG5leHRDaGlsZCA9IGdfbGlzdF9uZXh0KGN1cnJlbnRDaGlsZCkpCi0gICAgICAgICAgICAg
ICAgY3VycmVudENoaWxkID0gbmV4dENoaWxkOwotICAgICAgICB9CisgICAgc3RhdGljIGNvbnN0
IHVpbnQzMl90IHR5cGVhaGVhZFRpbWVvdXRNcyA9IDEwMDA7CisgICAgaWYgKGV2ZW50LT50aW1l
IC0gbV9wcmV2aW91c0tleUV2ZW50VGltZSA+IHR5cGVhaGVhZFRpbWVvdXRNcykgeworICAgICAg
ICBpZiAobV9jdXJyZW50U2VhcmNoU3RyaW5nKQorICAgICAgICAgICAgZ19zdHJpbmdfdHJ1bmNh
dGUobV9jdXJyZW50U2VhcmNoU3RyaW5nLCAwKTsKKyAgICB9CisgICAgbV9wcmV2aW91c0tleUV2
ZW50VGltZSA9IGV2ZW50LT50aW1lOworCisgICAgaWYgKCFtX2N1cnJlbnRTZWFyY2hTdHJpbmcp
CisgICAgICAgIG1fY3VycmVudFNlYXJjaFN0cmluZyA9IGdfc3RyaW5nX25ldyhudWxscHRyKTsK
KyAgICBnX3N0cmluZ19hcHBlbmRfdW5pY2hhcihtX2N1cnJlbnRTZWFyY2hTdHJpbmcsIGtleWNo
YXIpOworCisgICAgaW50IHByZWZpeExlbmd0aCA9IC0xOworICAgIGlmIChrZXljaGFyID09IG1f
cmVwZWF0aW5nQ2hhcmFjdGVyKQorICAgICAgICBwcmVmaXhMZW5ndGggPSAxOworICAgIGVsc2UK
KyAgICAgICAgbV9yZXBlYXRpbmdDaGFyYWN0ZXIgPSBtX2N1cnJlbnRTZWFyY2hTdHJpbmctPmxl
biA9PSAxID8ga2V5Y2hhciA6ICdcMCc7CisKKyAgICBHdGtUcmVlTW9kZWwqIG1vZGVsOworICAg
IEd0a1RyZWVJdGVyIGl0ZXI7CisgICAgZ3VpbnQgc2VsZWN0ZWRJbmRleCA9IDA7CisgICAgaWYg
KGd0a190cmVlX3NlbGVjdGlvbl9nZXRfc2VsZWN0ZWQoZ3RrX3RyZWVfdmlld19nZXRfc2VsZWN0
aW9uKEdUS19UUkVFX1ZJRVcobV90cmVlVmlldykpLCAmbW9kZWwsICZpdGVyKSkKKyAgICAgICAg
Z3RrX3RyZWVfbW9kZWxfZ2V0KG1vZGVsLCAmaXRlciwgQ29sdW1uczo6SW5kZXgsICZzZWxlY3Rl
ZEluZGV4LCAtMSk7CisKKyAgICB1bnNpZ25lZCBpbmRleCA9IHNlbGVjdGVkSW5kZXg7CisgICAg
aWYgKG1fcmVwZWF0aW5nQ2hhcmFjdGVyICE9ICdcMCcpCisgICAgICAgIGluZGV4Kys7CisgICAg
YXV0byBpdGVtQ291bnQgPSBtX3BhdGhzLnNpemUoKTsKKyAgICBpbmRleCAlPSBpdGVtQ291bnQ7
CisKKyAgICBHVW5pcXVlUHRyPGNoYXI+IG5vcm1hbGl6ZWRQcmVmaXgoZ191dGY4X25vcm1hbGl6
ZShtX2N1cnJlbnRTZWFyY2hTdHJpbmctPnN0ciwgcHJlZml4TGVuZ3RoLCBHX05PUk1BTElaRV9B
TEwpKTsKKyAgICBHVW5pcXVlUHRyPGNoYXI+IHByZWZpeChub3JtYWxpemVkUHJlZml4ID8gZ191
dGY4X2Nhc2Vmb2xkKG5vcm1hbGl6ZWRQcmVmaXguZ2V0KCksIC0xKSA6IG51bGxwdHIpOworICAg
IGlmICghcHJlZml4KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgbW9kZWwg
PSBndGtfdHJlZV92aWV3X2dldF9tb2RlbChHVEtfVFJFRV9WSUVXKG1fdHJlZVZpZXcpKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbUNvdW50OyBpKyssIGluZGV4ID0gKGluZGV4
ICsgMSkgJSBpdGVtQ291bnQpIHsKKyAgICAgICAgYXV0byYgcGF0aCA9IG1fcGF0aHNbaW5kZXhd
OworICAgICAgICBpZiAoIXBhdGggfHwgIWd0a190cmVlX21vZGVsX2dldF9pdGVyKG1vZGVsLCAm
aXRlciwgcGF0aC5nZXQoKSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBHVW5p
cXVlT3V0UHRyPGNoYXI+IGxhYmVsOworICAgICAgICBnYm9vbGVhbiBpc0VuYWJsZWQ7CisgICAg
ICAgIGd0a190cmVlX21vZGVsX2dldChtb2RlbCwgJml0ZXIsIENvbHVtbnM6OkxhYmVsLCAmbGFi
ZWwub3V0UHRyKCksIENvbHVtbnM6OklzRW5hYmxlZCwgJmlzRW5hYmxlZCwgLTEpOworICAgICAg
ICBpZiAoIWlzRW5hYmxlZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEdVbmlx
dWVQdHI8Y2hhcj4gbm9ybWFsaXplZFRleHQoZ191dGY4X25vcm1hbGl6ZShsYWJlbC5nZXQoKSwg
LTEsIEdfTk9STUFMSVpFX0FMTCkpOworICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IHRleHQobm9y
bWFsaXplZFRleHQgPyBnX3V0ZjhfY2FzZWZvbGQobm9ybWFsaXplZFRleHQuZ2V0KCksIC0xKSA6
IG51bGxwdHIpOworICAgICAgICBpZiAoIXRleHQpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBpZiAoIXN0cm5jbXAocHJlZml4LmdldCgpLCB0ZXh0LmdldCgpLCBzdHJsZW4ocHJl
Zml4LmdldCgpKSkpCisgICAgICAgICAgICByZXR1cm4gaW5kZXg7CiAgICAgfQogCi0gICAgR0xp
c3QqIGZpcnN0Q2hpbGQgPSBjdXJyZW50Q2hpbGQ7Ci0gICAgZG8gewotICAgICAgICBjdXJyZW50
Q2hpbGQgPSBnX2xpc3RfbmV4dChjdXJyZW50Q2hpbGQpOwotICAgICAgICBpZiAoIWN1cnJlbnRD
aGlsZCkKLSAgICAgICAgICAgIGN1cnJlbnRDaGlsZCA9IGNoaWxkcmVuLmdldCgpOwotCi0gICAg
ICAgIEdVbmlxdWVQdHI8Z2NoYXI+IGl0ZW1UZXh0KGdfdXRmOF9jYXNlZm9sZChndGtfbWVudV9p
dGVtX2dldF9sYWJlbChHVEtfTUVOVV9JVEVNKGN1cnJlbnRDaGlsZC0+ZGF0YSkpLCAtMSkpOwot
ICAgICAgICBpZiAoIXN0cm5jbXAoc2VhcmNoU3RyaW5nV2l0aENhc2VGb2xkZWQuZ2V0KCksIGl0
ZW1UZXh0LmdldCgpLCBwcmVmaXhMZW5ndGgpKSB7Ci0gICAgICAgICAgICBndGtfbWVudV9zaGVs
bF9zZWxlY3RfaXRlbShHVEtfTUVOVV9TSEVMTChtX3BvcHVwKSwgR1RLX1dJREdFVChjdXJyZW50
Q2hpbGQtPmRhdGEpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfSB3aGls
ZSAoY3VycmVudENoaWxkICE9IGZpcnN0Q2hpbGQpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXZvaWQgV2ViUG9wdXBNZW51UHJveHlHdGs6OnJlc2V0VHlwZUFoZWFkRmluZFN0YXRlKCkKLXsK
LSAgICBtX2N1cnJlbnRseVNlbGVjdGVkTWVudUl0ZW0gPSBudWxscHRyOwotICAgIG1fcHJldmlv
dXNLZXlFdmVudENoYXJhY3RlciA9IDA7Ci0gICAgbV9wcmV2aW91c0tleUV2ZW50VGltZXN0YW1w
ID0gMDsKLSAgICBtX2N1cnJlbnRTZWFyY2hTdHJpbmcgPSBlbXB0eVN0cmluZygpOwotfQotCi12
b2lkIFdlYlBvcHVwTWVudVByb3h5R3RrOjptZW51SXRlbUFjdGl2YXRlZChHdGtNZW51SXRlbSog
bWVudUl0ZW0sIFdlYlBvcHVwTWVudVByb3h5R3RrKiBwb3B1cE1lbnUpCi17Ci0gICAgcG9wdXBN
ZW51LT5tX2Rpc21pc3NNZW51VGltZXIuc3RvcCgpOwotICAgIGlmIChwb3B1cE1lbnUtPm1fY2xp
ZW50KQotICAgICAgICBwb3B1cE1lbnUtPm1fY2xpZW50LT52YWx1ZUNoYW5nZWRGb3JQb3B1cE1l
bnUocG9wdXBNZW51LCBHUE9JTlRFUl9UT19JTlQoZ19vYmplY3RfZ2V0X2RhdGEoR19PQkpFQ1Qo
bWVudUl0ZW0pLCAicG9wdXAtbWVudS1pdGVtLWluZGV4IikpKTsKKyAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwogfQogCi12b2lkIFdlYlBvcHVwTWVudVByb3h5R3RrOjpkaXNtaXNzTWVudVRpbWVy
RmlyZWQoKQotewotICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQtPnZhbHVlQ2hh
bmdlZEZvclBvcHVwTWVudSh0aGlzLCAtMSk7Ci19Ci0KLXZvaWQgV2ViUG9wdXBNZW51UHJveHlH
dGs6Om1lbnVVbm1hcHBlZENhbGxiYWNrKEd0a1dpZGdldCosIFdlYlBvcHVwTWVudVByb3h5R3Rr
KiBwb3B1cE1lbnUpCitib29sIFdlYlBvcHVwTWVudVByb3h5R3RrOjp0eXBlQWhlYWRGaW5kKEdk
a0V2ZW50S2V5KiBldmVudCkKIHsKLSAgICBpZiAoIXBvcHVwTWVudS0+bV9jbGllbnQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIFdoZW4gYW4gaXRlbSBpcyBhY3RpdmF0ZWQsIHRoZSBtZW51
IGlzIGZpcnN0IGhpZGRlbiBhbmQgdGhlbiBhY3RpdmF0ZSBzaWduYWwgaXMgZW1pdHRlZCwgc28g
YXQgdGhpcyBwb2ludCB3ZSBkb24ndCBrbm93Ci0gICAgLy8gaWYgdGhlIG1lbnUgaGFzIGJlZW4g
aGlkZGVuIGJlY2F1c2UgYW4gaXRlbSBoYXMgYmVlbiBzZWxlY3RlZCBvciBiZWNhdXNlIHRoZSBt
ZW51IGhhcyBiZWVuIGRpc21pc3NlZC4gV2FpdCB1bnRpbCB0aGUgbmV4dAotICAgIC8vIG1haW4g
bG9vcCBpdGVyYXRpb24gdG8gZGlzbWlzcyB0aGUgbWVudSwgaWYgYW4gaXRlbSBpcyBhY3RpdmF0
ZWQgdGhlIHRpbWVyIHdpbGwgYmUgY2FuY2VsbGVkLgotICAgIHBvcHVwTWVudS0+bV9kaXNtaXNz
TWVudVRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwotfQorICAgIGF1dG8gc2VhcmNoSW5kZXggPSB0
eXBlQWhlYWRGaW5kSW5kZXgoZXZlbnQpOworICAgIGlmICghc2VhcmNoSW5kZXgpCisgICAgICAg
IHJldHVybiBmYWxzZTsKIAotdm9pZCBXZWJQb3B1cE1lbnVQcm94eUd0azo6c2VsZWN0SXRlbUNh
bGxiYWNrKEd0a1dpZGdldCogaXRlbSwgV2ViUG9wdXBNZW51UHJveHlHdGsqIHBvcHVwTWVudSkK
LXsKLSAgICBwb3B1cE1lbnUtPnNldEN1cnJlbnRseVNlbGVjdGVkTWVudUl0ZW0oaXRlbSk7Ci19
CisgICAgYXV0byYgcGF0aCA9IG1fcGF0aHNbc2VhcmNoSW5kZXgudmFsdWUoKV07CisgICAgQVNT
RVJUKHBhdGgpOworICAgIGd0a190cmVlX3ZpZXdfc2Nyb2xsX3RvX2NlbGwoR1RLX1RSRUVfVklF
VyhtX3RyZWVWaWV3KSwgcGF0aC5nZXQoKSwgbnVsbHB0ciwgVFJVRSwgMC41LCAwKTsKKyAgICBn
dGtfdHJlZV92aWV3X3NldF9jdXJzb3IoR1RLX1RSRUVfVklFVyhtX3RyZWVWaWV3KSwgcGF0aC5n
ZXQoKSwgbnVsbHB0ciwgRkFMU0UpOworICAgIHNlbGVjdEl0ZW0oc2VhcmNoSW5kZXgudmFsdWUo
KSk7CiAKLWdib29sZWFuIFdlYlBvcHVwTWVudVByb3h5R3RrOjprZXlQcmVzc0V2ZW50Q2FsbGJh
Y2soR3RrV2lkZ2V0KiwgR2RrRXZlbnRLZXkqIGV2ZW50LCBXZWJQb3B1cE1lbnVQcm94eUd0ayog
cG9wdXBNZW51KQotewotICAgIHJldHVybiBwb3B1cE1lbnUtPnR5cGVBaGVhZEZpbmQoZXZlbnQp
OworICAgIHJldHVybiB0cnVlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJQb3B1cE1lbnVQcm94eUd0ay5oIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dlYlBvcHVwTWVudVByb3h5R3RrLmgKaW5kZXgg
MjUyYzMxODc0NTEuLjE5NjQ1NjA5ZjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9ndGsvV2ViUG9wdXBNZW51UHJveHlHdGsuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9ndGsvV2ViUG9wdXBNZW51UHJveHlHdGsuaApAQCAtMTcsMTYgKzE3LDIxIEBACiAgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFdlYlBvcHVwTWVudVBy
b3h5R3RrX2gKLSNkZWZpbmUgV2ViUG9wdXBNZW51UHJveHlHdGtfaAorI3ByYWdtYSBvbmNlCiAK
ICNpbmNsdWRlICJXZWJQb3B1cE1lbnVQcm94eS5oIgotI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9HVW5pcXVlUHRyR3RrLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgX0dNYWluTG9vcCBHTWFpbkxvb3A7Cit0eXBl
ZGVmIHN0cnVjdCBfR2RrRGV2aWNlIEdka0RldmljZTsKK3R5cGVkZWYgc3RydWN0IF9HZGtFdmVu
dEJ1dHRvbiBHZGtFdmVudEJ1dHRvbjsKIHR5cGVkZWYgc3RydWN0IF9HZGtFdmVudEtleSBHZGtF
dmVudEtleTsKK3R5cGVkZWYgc3RydWN0IF9HdGtUcmVlUGF0aCBHdGtUcmVlUGF0aDsKK3R5cGVk
ZWYgc3RydWN0IF9HdGtUcmVlVmlldyBHdGtUcmVlVmlldzsKK3R5cGVkZWYgc3RydWN0IF9HdGtU
cmVlVmlld0NvbHVtbiBHdGtUcmVlVmlld0NvbHVtbjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Y2xhc3MgSW50UmVjdDsKQEAgLTQ4LDM2ICs1MywzNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBoaWRl
UG9wdXBNZW51KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBjYW5jZWxUcmFja2luZygpIG92ZXJyaWRl
OwogCisgICAgdmlydHVhbCB2b2lkIHNlbGVjdEl0ZW0odW5zaWduZWQgaXRlbUluZGV4KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYWN0aXZhdGVJdGVtKHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGl0ZW1J
bmRleCk7CisKIHByb3RlY3RlZDoKICAgICBXZWJQb3B1cE1lbnVQcm94eUd0ayhHdGtXaWRnZXQq
LCBXZWJQb3B1cE1lbnVQcm94eTo6Q2xpZW50Jik7CiAKICAgICBHdGtXaWRnZXQqIG1fd2ViVmll
dyB7IG51bGxwdHIgfTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIHNldEN1cnJlbnRseVNlbGVjdGVk
TWVudUl0ZW0oR3RrV2lkZ2V0KiBpdGVtKSB7IG1fY3VycmVudGx5U2VsZWN0ZWRNZW51SXRlbSA9
IGl0ZW07IH0KLSAgICB2b2lkIHBvcHVsYXRlUG9wdXBNZW51KGNvbnN0IFZlY3RvcjxXZWJQb3B1
cEl0ZW0+Jik7Ci0gICAgdm9pZCBkaXNtaXNzTWVudVRpbWVyRmlyZWQoKTsKLQorICAgIHZvaWQg
Y3JlYXRlUG9wdXBNZW51KGNvbnN0IFZlY3RvcjxXZWJQb3B1cEl0ZW0+JiwgaW50MzJfdCBzZWxl
Y3RlZEluZGV4KTsKKyAgICB2b2lkIHNob3coKTsKKyAgICBib29sIGFjdGl2YXRlSXRlbUF0UGF0
aChHdGtUcmVlUGF0aCopOworICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHR5cGVBaGVhZEZp
bmRJbmRleChHZGtFdmVudEtleSopOwogICAgIGJvb2wgdHlwZUFoZWFkRmluZChHZGtFdmVudEtl
eSopOwotICAgIHZvaWQgcmVzZXRUeXBlQWhlYWRGaW5kU3RhdGUoKTsKIAotICAgIHN0YXRpYyB2
b2lkIG1lbnVJdGVtQWN0aXZhdGVkKEd0a01lbnVJdGVtKiwgV2ViUG9wdXBNZW51UHJveHlHdGsq
KTsKLSAgICBzdGF0aWMgdm9pZCBzZWxlY3RJdGVtQ2FsbGJhY2soR3RrV2lkZ2V0KiwgV2ViUG9w
dXBNZW51UHJveHlHdGsqKTsKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gYnV0dG9uUHJlc3NFdmVudENh
bGxiYWNrKEd0a1dpZGdldCosIEdka0V2ZW50QnV0dG9uKiwgV2ViUG9wdXBNZW51UHJveHlHdGsq
KTsKICAgICBzdGF0aWMgZ2Jvb2xlYW4ga2V5UHJlc3NFdmVudENhbGxiYWNrKEd0a1dpZGdldCos
IEdka0V2ZW50S2V5KiwgV2ViUG9wdXBNZW51UHJveHlHdGsqKTsKLSAgICBzdGF0aWMgdm9pZCBt
ZW51VW5tYXBwZWRDYWxsYmFjayhHdGtXaWRnZXQqLCBXZWJQb3B1cE1lbnVQcm94eUd0ayopOwor
ICAgIHN0YXRpYyB2b2lkIHRyZWVWaWV3Um93QWN0aXZhdGVkQ2FsbGJhY2soR3RrVHJlZVZpZXcq
LCBHdGtUcmVlUGF0aCosIEd0a1RyZWVWaWV3Q29sdW1uKiwgV2ViUG9wdXBNZW51UHJveHlHdGsq
KTsKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gdHJlZVZpZXdCdXR0b25SZWxlYXNlRXZlbnRDYWxsYmFj
ayhHdGtXaWRnZXQqLCBHZGtFdmVudEJ1dHRvbiosIFdlYlBvcHVwTWVudVByb3h5R3RrKik7CiAK
ICAgICBHdGtXaWRnZXQqIG1fcG9wdXAgeyBudWxscHRyIH07CisgICAgR3RrV2lkZ2V0KiBtX3Ry
ZWVWaWV3IHsgbnVsbHB0ciB9OworICAgIEdka0RldmljZSogbV9kZXZpY2UgeyBudWxscHRyIH07
CiAKLSAgICBSdW5Mb29wOjpUaW1lcjxXZWJQb3B1cE1lbnVQcm94eUd0az4gbV9kaXNtaXNzTWVu
dVRpbWVyOworICAgIFZlY3RvcjxHVW5pcXVlUHRyPEd0a1RyZWVQYXRoPj4gbV9wYXRoczsKKyAg
ICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBtX3NlbGVjdGVkSXRlbTsKIAogICAgIC8vIFR5cGVh
aGVhZCBmaW5kLgotICAgIHVuc2lnbmVkIG1fcHJldmlvdXNLZXlFdmVudENoYXJhY3RlciB7IDAg
fTsKLSAgICB1aW50MzJfdCBtX3ByZXZpb3VzS2V5RXZlbnRUaW1lc3RhbXAgeyAwIH07Ci0gICAg
R3RrV2lkZ2V0KiBtX2N1cnJlbnRseVNlbGVjdGVkTWVudUl0ZW0geyBudWxscHRyIH07Ci0gICAg
U3RyaW5nIG1fY3VycmVudFNlYXJjaFN0cmluZzsKKyAgICBndW5pY2hhciBtX3JlcGVhdGluZ0No
YXJhY3RlciB7ICdcMCcgfTsKKyAgICB1aW50MzJfdCBtX3ByZXZpb3VzS2V5RXZlbnRUaW1lIHsg
MCB9OworICAgIEdTdHJpbmcqIG1fY3VycmVudFNlYXJjaFN0cmluZyB7IG51bGxwdHIgfTsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0KLSNlbmRpZiAvLyBXZWJQb3B1cE1lbnVQcm94
eUd0a19oCg==
</data>
<flag name="review"
          id="359830"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
          </attachment>
      

    </bug>

</bugzilla>