<?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>76998</bug_id>
          
          <creation_ts>2012-01-25 02:54:15 -0800</creation_ts>
          <short_desc>[GTK] Add cut, copy and paste methods to WebKit2 GTK+ API</short_desc>
          <delta_ts>2012-02-07 10:57:29 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>gustavo</cc>
    
    <cc>mrobinson</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>542124</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-25 02:54:15 -0800</bug_when>
    <thetext>And API required to query whether it&apos;s possible to cut, copy and paste, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542129</commentid>
    <comment_count>1</comment_count>
      <attachid>123908</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-25 02:59:57 -0800</bug_when>
    <thetext>Created attachment 123908
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542131</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-25 03:03:28 -0800</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>542283</commentid>
    <comment_count>3</comment_count>
      <attachid>123908</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-25 08:10:07 -0800</bug_when>
    <thetext>Comment on attachment 123908
Patch

Perhaps it&apos;s better to add the more generic command API. This is necessary to use WebKit in things like email clients. I&apos;m imagining an API like:

webkit_web_view_validate_editing_command
webkit_web_view_execute_editing_command</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542291</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-25 08:19:51 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 123908 [details])
&gt; Perhaps it&apos;s better to add the more generic command API. This is necessary to use WebKit in things like email clients. I&apos;m imagining an API like:
&gt; 
&gt; webkit_web_view_validate_editing_command
&gt; webkit_web_view_execute_editing_command

And defines for command names WEBKIT_COMMAND_CUT, WEBKIT_COMMAND_COPY, etc. 
I like the idea! :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542296</commentid>
    <comment_count>5</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-25 08:28:54 -0800</bug_when>
    <thetext>(In reply to comment #4)
 
&gt; And defines for command names WEBKIT_COMMAND_CUT, WEBKIT_COMMAND_COPY, etc. 
&gt; I like the idea! :-)

That&apos;s nice too. Here&apos;s the DOM API this calls: http://www.quirksmode.org/dom/execCommand.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547771</commentid>
    <comment_count>6</comment_count>
      <attachid>125107</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-02 04:13:55 -0800</bug_when>
    <thetext>Created attachment 125107
New patch

New patch adding a generic API for execute and validate editing commands as suggested by Martin. This adds support for any editing command, but for now it only includes predefined names for Cut, Copy and Paste commands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547908</commentid>
    <comment_count>7</comment_count>
      <attachid>125107</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-02-02 09:08:03 -0800</bug_when>
    <thetext>Comment on attachment 125107
New patch

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

Looks great. I have just a few minor nits.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1296
&gt; +                                                           reinterpret_cast&lt;gpointer&gt;(webkit_web_view_can_execute_editing_command));

I&apos;m surprised that a function pointer needs to be cast to a gpointer. What sort of error do you get here when you omit this cast?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h:52
&gt; +#define WEBKIT_TYPE_WEB_VIEW            (webkit_web_view_get_type())
&gt; +#define WEBKIT_WEB_VIEW(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj), WEBKIT_TYPE_WEB_VIEW, WebKitWebView))
&gt; +#define WEBKIT_WEB_VIEW_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass),  WEBKIT_TYPE_WEB_VIEW, WebKitWebViewClass))
&gt; +#define WEBKIT_IS_WEB_VIEW(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), WEBKIT_TYPE_WEB_VIEW))
&gt; +#define WEBKIT_IS_WEB_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),  WEBKIT_TYPE_WEB_VIEW))
&gt; +#define WEBKIT_WEB_VIEW_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj),  WEBKIT_TYPE_WEB_VIEW, WebKitWebViewClass))
&gt; +
&gt; +typedef struct _WebKitWebView WebKitWebView;
&gt; +typedef struct _WebKitWebViewClass WebKitWebViewClass;
&gt; +typedef struct _WebKitWebViewPrivate WebKitWebViewPrivate;
&gt; +

This change seems unrelated?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h:119
&gt; +#define WEBKIT_EDITING_COMMAND_CUT   &quot;Cut&quot;

We may end up adding a lot of commands here in the future, because WebCore supports a lot of them.  Having these values aligned is going to be incredibly tedious to maintain. This is because there is documentation between them, so you cannot use your editor&apos;s block select to update them all. Do you mind just using one space here to avoid this situation? I think it will really decrease the time spend adjusting spacing in this file.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebViewEditor.cpp:69
&gt; +        g_timeout_add_seconds(1, reinterpret_cast&lt;GSourceFunc&gt;(waitForClipboardText), this);

One second is quite a long long time. Why not query every 50 milliseconds? It might be good to make the time between waiting and the amount of time to wait before timing out constants in the class or the file.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebViewEditor.cpp:100
&gt; +    g_signal_connect(test-&gt;m_webView, &quot;load-changed&quot;, G_CALLBACK(webViewLoadChanged), test);
&gt; +    test-&gt;loadHtml(selectedSpanHTML, 0);
&gt; +    g_main_loop_run(test-&gt;m_mainLoop);

I think I&apos;d rather see you have the fixture extend loading the fixture or suck the logic for waiting until the load is done into the WebViewTest. This is a fairly common operation in tests and we shouldn&apos;t need to write it over and over again.

I think this is not necessarily the correct time though. In WebKit1 we would wait until window-object-cleared, because that means the DOM is ready. Is there a similar moment in WebKit2?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547928</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-02 09:30:40 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 125107 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=125107&amp;action=review
&gt; 
&gt; Looks great. I have just a few minor nits.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1296
&gt; &gt; +                                                           reinterpret_cast&lt;gpointer&gt;(webkit_web_view_can_execute_editing_command));
&gt; 
&gt; I&apos;m surprised that a function pointer needs to be cast to a gpointer. What sort of error do you get here when you omit this cast?

I don&apos;t remember, I&apos;ll check it again, but I don&apos;t usually use a C++ cast if it&apos;s not needed :-P

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h:52
&gt; &gt; +#define WEBKIT_TYPE_WEB_VIEW            (webkit_web_view_get_type())
&gt; &gt; +#define WEBKIT_WEB_VIEW(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj), WEBKIT_TYPE_WEB_VIEW, WebKitWebView))
&gt; &gt; +#define WEBKIT_WEB_VIEW_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass),  WEBKIT_TYPE_WEB_VIEW, WebKitWebViewClass))
&gt; &gt; +#define WEBKIT_IS_WEB_VIEW(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), WEBKIT_TYPE_WEB_VIEW))
&gt; &gt; +#define WEBKIT_IS_WEB_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),  WEBKIT_TYPE_WEB_VIEW))
&gt; &gt; +#define WEBKIT_WEB_VIEW_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj),  WEBKIT_TYPE_WEB_VIEW, WebKitWebViewClass))
&gt; &gt; +
&gt; &gt; +typedef struct _WebKitWebView WebKitWebView;
&gt; &gt; +typedef struct _WebKitWebViewClass WebKitWebViewClass;
&gt; &gt; +typedef struct _WebKitWebViewPrivate WebKitWebViewPrivate;
&gt; &gt; +
&gt; 
&gt; This change seems unrelated?

Yes, I was going to add editing command and I realized the standard macros block was between two enum declarations. This block is usually the first thing you expect in a GObject header, I can do it in a different commit if you want.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h:119
&gt; &gt; +#define WEBKIT_EDITING_COMMAND_CUT   &quot;Cut&quot;
&gt; 
&gt; We may end up adding a lot of commands here in the future, because WebCore supports a lot of them.  Having these values aligned is going to be incredibly tedious to maintain. This is because there is documentation between them, so you cannot use your editor&apos;s block select to update them all. Do you mind just using one space here to avoid this situation? I think it will really decrease the time spend adjusting spacing in this file.

Sure, no problem.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebViewEditor.cpp:69
&gt; &gt; +        g_timeout_add_seconds(1, reinterpret_cast&lt;GSourceFunc&gt;(waitForClipboardText), this);
&gt; 
&gt; One second is quite a long long time. Why not query every 50 milliseconds?

Yes, I can try.

&gt; It might be good to make the time between waiting and the amount of time to wait before timing out constants in the class or the file.

Ok.
 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebViewEditor.cpp:100
&gt; &gt; +    g_signal_connect(test-&gt;m_webView, &quot;load-changed&quot;, G_CALLBACK(webViewLoadChanged), test);
&gt; &gt; +    test-&gt;loadHtml(selectedSpanHTML, 0);
&gt; &gt; +    g_main_loop_run(test-&gt;m_mainLoop);
&gt; 
&gt; I think I&apos;d rather see you have the fixture extend loading the fixture or suck the logic for waiting until the load is done into the WebViewTest. This is a fairly common operation in tests and we shouldn&apos;t need to write it over and over again.

Agree.

&gt; I think this is not necessarily the correct time though. In WebKit1 we would wait until window-object-cleared, because that means the DOM is ready. Is there a similar moment in WebKit2?

I have no idea :-P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550698</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-07 01:05:41 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 125107 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=125107&amp;action=review
&gt; 
&gt; Looks great. I have just a few minor nits.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1296
&gt; &gt; +                                                           reinterpret_cast&lt;gpointer&gt;(webkit_web_view_can_execute_editing_command));
&gt; 
&gt; I&apos;m surprised that a function pointer needs to be cast to a gpointer. What sort of error do you get here when you omit this cast?

  CXX    Source/WebKit2/UIProcess/API/gtk/libwebkit2gtk_3_0_la-WebKitWebView.lo
../Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp: In function &apos;void webkit_web_view_can_execute_editing_command(WebKitWebView*, const char*, GAsyncReadyCallback, gpointer)&apos;:
../Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1296:142: error: invalid conversion from &apos;void (*)(WebKitWebView*, const char*, GAsyncReadyCallback, gpointer) {aka void (*)(_WebKitWebView*, const char*, void (*)(_GObject*, _GAsyncResult*, void*), void*)}&apos; to &apos;gpointer {aka void*}&apos; [-fpermissive]
/home/cgarcia/gnome/include/glib-2.0/gio/gsimpleasyncresult.h:51:21: error:   initializing argument 4 of &apos;GSimpleAsyncResult* g_simple_async_result_new(GObject*, GAsyncReadyCallback, gpointer, gpointer)&apos; [-fpermissive]
make[1]: *** [Source/WebKit2/UIProcess/API/gtk/libwebkit2gtk_3_0_la-WebKitWebView.lo] Error 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550733</commentid>
    <comment_count>10</comment_count>
      <attachid>125789</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-07 02:03:38 -0800</bug_when>
    <thetext>Created attachment 125789
Updated patch according to review comments

Fixed all review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551134</commentid>
    <comment_count>11</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-07 10:57:29 -0800</bug_when>
    <thetext>Committed r106961: &lt;http://trac.webkit.org/changeset/106961&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123908</attachid>
            <date>2012-01-25 02:59:57 -0800</date>
            <delta_ts>2012-02-02 04:13:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-cut-copy-paste.diff</filename>
            <type>text/plain</type>
            <size>22598</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA3YTUzMGI5Li42ZWRlOWNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNDQg
QEAKIDIwMTItMDEtMjUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCisgICAgICAgIFtHVEtdIEFkZCBjdXQsIGNvcHkgYW5kIHBhc3RlIG1ldGhvZHMgdG8gV2Vi
S2l0MiBHVEsrIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzY5OTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwOgorICAgICAgICAod2Vi
a2l0V2ViVmlld0V4ZWN1dGVDb21tYW5kKTogSGVscGVyIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWRp
dG9yCisgICAgICAgIGNvbW1hbmRzIHVzaW5nIHRoZSBDIEFQSS4KKyAgICAgICAgKGRpZFZhbGlk
YXRlQ29tbWFuZCk6IENhbGxiYWNrIGNhbGxlZCBieSB0aGUgQyBBUEkgd2hlbiBhbiBlZGl0b3IK
KyAgICAgICAgY29tbWFuZCBoYXMgYmVlbiB2YWxpZGF0ZWQuCisgICAgICAgICh3ZWJraXRXZWJW
aWV3VmFsaWRhdGVDb21tYW5kKTogSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGVkaXRvcgor
ICAgICAgICBjb21tYW5kcyB1c2luZyB0aGUgQyBBUEkuCisgICAgICAgICh3ZWJraXRfd2ViX3Zp
ZXdfY2FuX2N1dF9jbGlwYm9hcmQpOiBBc3luY2hyb25vdXNseSB2YWxpZGF0ZSAiQ3V0IgorICAg
ICAgICBjb21tYW5kLgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2Nhbl9jdXRfY2xpcGJvYXJk
X2ZpbmlzaCk6IEZpbmlzaCBhc3luYyBvcGVyYXRpb24KKyAgICAgICAgc3RhcnRlZCBieSB3ZWJr
aXRfd2ViX3ZpZXdfY2FuX2N1dF9jbGlwYm9hcmQuCisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdf
Y3V0X2NsaXBib2FyZCk6IEV4ZWN1dGUgIkN1dCIgY29tbWFuZC4KKyAgICAgICAgKHdlYmtpdF93
ZWJfdmlld19jYW5fY29weV9jbGlwYm9hcmQpOiBBc3luY2hyb25vdXNseSB2YWxpZGF0ZQorICAg
ICAgICAiQ29weSIgY29tbWFuZC4KKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19jYW5fY29weV9j
bGlwYm9hcmRfZmluaXNoKTogRmluaXNoIGFzeW5jCisgICAgICAgIG9wZXJhdGlvbiBzdGFydGVk
IGJ5IHdlYmtpdF93ZWJfdmlld19jYW5fY29weV9jbGlwYm9hcmQuCisgICAgICAgICh3ZWJraXRf
d2ViX3ZpZXdfY29weV9jbGlwYm9hcmQpOiBFeGVjdXRlICJDb3B5IiBjb21tYW5kLgorICAgICAg
ICAod2Via2l0X3dlYl92aWV3X2Nhbl9wYXN0ZV9jbGlwYm9hcmQpOiBBc3luY2hyb25vdXNseSB2
YWxpZGF0ZQorICAgICAgICAiUGFzdGUiIGNvbW1hbmQuCisgICAgICAgICh3ZWJraXRfd2ViX3Zp
ZXdfY2FuX3Bhc3RlX2NsaXBib2FyZF9maW5pc2gpOiBGaW5pc2ggYXN5bmMKKyAgICAgICAgb3Bl
cmF0aW9uIHN0YXJ0ZWQgYnkgd2Via2l0X3dlYl92aWV3X2Nhbl9wYXN0ZV9jbGlwYm9hcmQuCisg
ICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfcGFzdGVfY2xpcGJvYXJkKTogRXhlY3V0ZSAiUGFzdGUi
IGNvbW1hbmQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQ6
IEFkZCBuZXcgc3ltYm9scy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVt
YWtlZmlsZS5hbTogQWRkIHdlYiB2aWV3IGVkaXRvciB0ZXN0LgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJWaWV3RWRpdG9yLmNwcDogQWRkZWQuCisgICAgICAgICh3
ZWJWaWV3TG9hZENoYW5nZWQpOgorICAgICAgICAodGVzdFdlYlZpZXdFZGl0b3JDdXRDb3B5UGFz
dGVOb25FZGl0YWJsZSk6CisgICAgICAgICh0ZXN0V2ViVmlld0VkaXRvckN1dENvcHlQYXN0ZUVk
aXRhYmxlKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRlckFsbCk6CisKKzIw
MTItMDEtMjUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCiAg
ICAgICAgIFtHVEtdIFBhZ2UgY2xpZW50cyBkb24ndCBuZWVkIHRvIGJlIEdPYmplY3RzIGFueW1v
cmUgaW4gV2ViS2l0MiBHVEsrIEFQSQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzY4OTkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAppbmRleCA5ZGM0NzJhLi5lY2M5ZjMxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcApA
QCAtMTE4OSwzICsxMTg5LDIwMCBAQCBnZG91YmxlIHdlYmtpdF93ZWJfdmlld19nZXRfem9vbV9s
ZXZlbChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgIFdLUGFnZVJlZiB3a1BhZ2UgPSB0b0FQ
SSh3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2ViVmlldykp
KTsKICAgICByZXR1cm4gV0tQYWdlR2V0UGFnZVpvb21GYWN0b3Iod2tQYWdlKTsKIH0KKworc3Rh
dGljIHZvaWQgd2Via2l0V2ViVmlld0V4ZWN1dGVDb21tYW5kKFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcsIGNvbnN0IGNoYXIqIGNvbW1hbmQpCit7CisgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2Vi
a2l0V2ViVmlld0Jhc2VHZXRQYWdlKFdFQktJVF9XRUJfVklFV19CQVNFKHdlYlZpZXcpKTsKKyAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tDb21tYW5kKEFkb3B0V0ssIFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKGNvbW1hbmQpKTsKKyAgICBXS1BhZ2VFeGVjdXRlQ29tbWFuZCh0
b0FQSShwYWdlKSwgd2tDb21tYW5kLmdldCgpKTsKK30KKworc3RhdGljIHZvaWQgZGlkVmFsaWRh
dGVDb21tYW5kKFdLU3RyaW5nUmVmIGNvbW1hbmQsIGJvb2wgaXNFbmFibGVkLCBpbnQzMl90IHN0
YXRlLCBXS0Vycm9yUmVmLCB2b2lkKiBjb250ZXh0KQoreworICAgIEdSZWZQdHI8R1NpbXBsZUFz
eW5jUmVzdWx0PiByZXN1bHQgPSBhZG9wdEdSZWYoR19TSU1QTEVfQVNZTkNfUkVTVUxUKGNvbnRl
eHQpKTsKKyAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19nYm9vbGVhbihyZXN1
bHQuZ2V0KCksIGlzRW5hYmxlZCk7CisgICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRl
KHJlc3VsdC5nZXQoKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdWYWxpZGF0ZUNv
bW1hbmQoV2ViS2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgY2hhciogY29tbWFuZCwgR0FzeW5j
UmVhZHlDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlckRhdGEsIGdwb2ludGVyIHNvdXJj
ZVRhZykKK3sKKyAgICBHU2ltcGxlQXN5bmNSZXN1bHQqIHJlc3VsdCA9IGdfc2ltcGxlX2FzeW5j
X3Jlc3VsdF9uZXcoR19PQkpFQ1Qod2ViVmlldyksIGNhbGxiYWNrLCB1c2VyRGF0YSwgc291cmNl
VGFnKTsKKyAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2Uo
V0VCS0lUX1dFQl9WSUVXX0JBU0Uod2ViVmlldykpOworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiB3a0NvbW1hbmQoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoY29t
bWFuZCkpOworICAgIFdLUGFnZVZhbGlkYXRlQ29tbWFuZCh0b0FQSShwYWdlKSwgd2tDb21tYW5k
LmdldCgpLCByZXN1bHQsIGRpZFZhbGlkYXRlQ29tbWFuZCk7Cit9CisKKy8qKgorICogd2Via2l0
X3dlYl92aWV3X2Nhbl9jdXRfY2xpcGJvYXJkOgorICogQHdlYl92aWV3OiBhICNXZWJLaXRXZWJW
aWV3CisgKiBAY2FsbGJhY2s6IChzY29wZSBhc3luYyk6IGEgI0dBc3luY1JlYWR5Q2FsbGJhY2sg
dG8gY2FsbCB3aGVuIHRoZSByZXF1ZXN0IGlzIHNhdGlzZmllZAorICogQHVzZXJfZGF0YTogKGNs
b3N1cmUpOiB0aGUgZGF0YSB0byBwYXNzIHRvIGNhbGxiYWNrIGZ1bmN0aW9uCisgKgorICogQXN5
bmNocm9ub3VzbHkgZ2V0IHdoZXRoZXIgaXQgaXMgY3VycmVudGx5IHBvc3NpYmxlIHRvIGN1dCB0
byB0aGUgY2xpcGJvYXJkLgorICogSW4gZ2VuZXJhbCBpdCdzIHBvc3NpYmxlIHRvIGN1dCB0byB0
aGUgY2xpcGJvYXJkIHdoZW4gQHdlYl92aWV3IGNvbnRlbnQgaXMgZWRpdGFibGUKKyAqIGFuZCB0
aGVyZSBpcyBhbiBhY3RpdmUgc2VsZWN0aW9uLiBTZWUgYWxzbyB3ZWJraXRfd2ViX3ZpZXdfY3V0
X2NsaXBib2FyZCgpLgorICoKKyAqIFdoZW4gdGhlIG9wZXJhdGlvbiBpcyBmaW5pc2hlZCwgQGNh
bGxiYWNrIHdpbGwgYmUgY2FsbGVkLiBZb3UgY2FuIHRoZW4gY2FsbAorICogd2Via2l0X3dlYl92
aWV3X2Nhbl9jdXRfY2xpcGJvYXJkX2ZpbmlzaCgpIHRvIGdldCB0aGUgcmVzdWx0IG9mIHRoZSBv
cGVyYXRpb24uCisgKi8KK3ZvaWQgd2Via2l0X3dlYl92aWV3X2Nhbl9jdXRfY2xpcGJvYXJkKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcsIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssIGdwb2lu
dGVyIHVzZXJEYXRhKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVX
KHdlYlZpZXcpKTsKKworICAgIHdlYmtpdFdlYlZpZXdWYWxpZGF0ZUNvbW1hbmQod2ViVmlldywg
IkN1dCIsIGNhbGxiYWNrLCB1c2VyRGF0YSwgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcj4od2Vi
a2l0X3dlYl92aWV3X2Nhbl9jdXRfY2xpcGJvYXJkKSk7Cit9CisKKy8qKgorICogd2Via2l0X3dl
Yl92aWV3X2Nhbl9jdXRfY2xpcGJvYXJkX2ZpbmlzaDoKKyAqIEB3ZWJfdmlldzogYSAjV2ViS2l0
V2ViVmlldworICogQHJlc3VsdDogYSAjR0FzeW5jUmVzdWx0CisgKiBAZXJyb3I6IHJldHVybiBs
b2NhdGlvbiBmb3IgZXJyb3Igb3IgJU5VTEwgdG8gaWdub3JlCisgKgorICogRmluaXNoIGFuIGFz
eW5jaHJvbm91cyBvcGVyYXRpb24gc3RhcnRlZCB3aXRoIHdlYmtpdF93ZWJfdmlld19jYW5fY3V0
X2NsaXBib2FyZCgpLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIGEgc2VsZWN0aW9uIGNhbiBi
ZSBjdXQgb3IgJUZBTFNFIG90aGVyd2lzZQorICovCitnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdf
Y2FuX2N1dF9jbGlwYm9hcmRfZmluaXNoKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEdBc3luY1Jl
c3VsdCogcmVzdWx0LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldyksIEZBTFNFKTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChHX0lTX0FTWU5DX1JFU1VMVChyZXN1bHQpLCBGQUxTRSk7CisKKyAgICBHU2ltcGxl
QXN5bmNSZXN1bHQqIHNpbXBsZSA9IEdfU0lNUExFX0FTWU5DX1JFU1VMVChyZXN1bHQpOworICAg
IGdfd2Fybl9pZl9mYWlsKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfc291cmNlX3RhZyhzaW1w
bGUpID09IHdlYmtpdF93ZWJfdmlld19jYW5fY3V0X2NsaXBib2FyZCk7CisKKyAgICBpZiAoZ19z
aW1wbGVfYXN5bmNfcmVzdWx0X3Byb3BhZ2F0ZV9lcnJvcihzaW1wbGUsIGVycm9yKSkKKyAgICAg
ICAgcmV0dXJuIEZBTFNFOworICAgIHJldHVybiBnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X29w
X3Jlc19nYm9vbGVhbihzaW1wbGUpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfdmlld19jdXRf
Y2xpcGJvYXJkOgorICogQHdlYl92aWV3OiBhICNXZWJLaXRXZWJWaWV3CisgKgorICogQ29weSB0
aGUgY3VycmVudCBzZWxlY3Rpb24gaW5zaWRlIEB3ZWJfdmlldyB0byB0aGUgY2xpcGJvYXJkCisg
KiBhbmQgZGVsZXRlIHRoZSBzZWxlY3RlZCBjb250ZW50LiBZb3UgY2FuIHVzZSB3ZWJraXRfd2Vi
X3ZpZXdfY2FuX2N1dF9jbGlwYm9hcmQoKQorICogdG8gY2hlY2sgd2hldGhlciBpdCdzIHBvc3Np
YmxlIGN1dCB0byBjbGlwYm9hcmQuCisgKi8KK3ZvaWQgd2Via2l0X3dlYl92aWV3X2N1dF9jbGlw
Ym9hcmQoV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSk7CisKKyAgICB3ZWJraXRXZWJWaWV3RXhlY3V0ZUNv
bW1hbmQod2ViVmlldywgIkN1dCIpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfdmlld19jYW5f
Y29weV9jbGlwYm9hcmQ6CisgKiBAd2ViX3ZpZXc6IGEgI1dlYktpdFdlYlZpZXcKKyAqIEBjYWxs
YmFjazogKHNjb3BlIGFzeW5jKTogYSAjR0FzeW5jUmVhZHlDYWxsYmFjayB0byBjYWxsIHdoZW4g
dGhlIHJlcXVlc3QgaXMgc2F0aXNmaWVkCisgKiBAdXNlcl9kYXRhOiAoY2xvc3VyZSk6IHRoZSBk
YXRhIHRvIHBhc3MgdG8gY2FsbGJhY2sgZnVuY3Rpb24KKyAqCisgKiBBc3luY2hyb25vdXNseSBn
ZXQgd2hldGhlciBpdCBpcyBjdXJyZW50bHkgcG9zc2libGUgdG8gY29weSB0byB0aGUgY2xpcGJv
YXJkLgorICogSW4gZ2VuZXJhbCBpdCdzIHBvc3NpYmxlIHRvIGNvcHkgdG8gdGhlIGNsaXBib2Fy
ZCB3aGVuIHRoZXJlIGlzIGFuIGFjdGl2ZSBzZWxlY3Rpb24uCisgKiBTZWUgYWxzbyB3ZWJraXRf
d2ViX3ZpZXdfY29weV9jbGlwYm9hcmQoKS4KKyAqCisgKiBXaGVuIHRoZSBvcGVyYXRpb24gaXMg
ZmluaXNoZWQsIEBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZC4gWW91IGNhbiB0aGVuIGNhbGwKKyAq
IHdlYmtpdF93ZWJfdmlld19jYW5fY29weV9jbGlwYm9hcmRfZmluaXNoKCkgdG8gZ2V0IHRoZSBy
ZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KKyAqLwordm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2FuX2Nv
cHlfY2xpcGJvYXJkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEdBc3luY1JlYWR5Q2FsbGJhY2sg
Y2FsbGJhY2ssIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpKTsKKworICAgIHdlYmtpdFdlYlZpZXdWYWxpZGF0ZUNv
bW1hbmQod2ViVmlldywgIkNvcHkiLCBjYWxsYmFjaywgdXNlckRhdGEsIHJlaW50ZXJwcmV0X2Nh
c3Q8Z3BvaW50ZXI+KHdlYmtpdF93ZWJfdmlld19jYW5fY29weV9jbGlwYm9hcmQpKTsKK30KKwor
LyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfY2FuX2NvcHlfY2xpcGJvYXJkX2ZpbmlzaDoKKyAqIEB3
ZWJfdmlldzogYSAjV2ViS2l0V2ViVmlldworICogQHJlc3VsdDogYSAjR0FzeW5jUmVzdWx0Cisg
KiBAZXJyb3I6IHJldHVybiBsb2NhdGlvbiBmb3IgZXJyb3Igb3IgJU5VTEwgdG8gaWdub3JlCisg
KgorICogRmluaXNoIGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24gc3RhcnRlZCB3aXRoIHdlYmtp
dF93ZWJfdmlld19jYW5fY29weV9jbGlwYm9hcmQoKS4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBp
ZiBhIHNlbGVjdGlvbiBjYW4gYmUgY29waWVkIG9yICVGQUxTRSBvdGhlcndpc2UKKyAqLworZ2Jv
b2xlYW4gd2Via2l0X3dlYl92aWV3X2Nhbl9jb3B5X2NsaXBib2FyZF9maW5pc2goV2ViS2l0V2Vi
Vmlldyogd2ViVmlldywgR0FzeW5jUmVzdWx0KiByZXN1bHQsIEdFcnJvcioqIGVycm9yKQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwgRkFM
U0UpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEdfSVNfQVNZTkNfUkVTVUxUKHJlc3VsdCks
IEZBTFNFKTsKKworICAgIEdTaW1wbGVBc3luY1Jlc3VsdCogc2ltcGxlID0gR19TSU1QTEVfQVNZ
TkNfUkVTVUxUKHJlc3VsdCk7CisgICAgZ193YXJuX2lmX2ZhaWwoZ19zaW1wbGVfYXN5bmNfcmVz
dWx0X2dldF9zb3VyY2VfdGFnKHNpbXBsZSkgPT0gd2Via2l0X3dlYl92aWV3X2Nhbl9jb3B5X2Ns
aXBib2FyZCk7CisKKyAgICBpZiAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3Byb3BhZ2F0ZV9lcnJv
cihzaW1wbGUsIGVycm9yKSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIHJldHVybiBnX3Np
bXBsZV9hc3luY19yZXN1bHRfZ2V0X29wX3Jlc19nYm9vbGVhbihzaW1wbGUpOworfQorCisvKioK
KyAqIHdlYmtpdF93ZWJfdmlld19jb3B5X2NsaXBib2FyZDoKKyAqIEB3ZWJfdmlldzogYSAjV2Vi
S2l0V2ViVmlldworICoKKyAqIENvcHkgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGluc2lkZSBAd2Vi
X3ZpZXcgdG8gdGhlIGNsaXBib2FyZC4KKyAqIFlvdSBjYW4gdXNlIHdlYmtpdF93ZWJfdmlld19j
YW5fY29weV9jbGlwYm9hcmQoKQorICogdG8gY2hlY2sgd2hldGhlciBpdCdzIHBvc3NpYmxlIGN1
dCB0byBjbGlwYm9hcmQuCisgKi8KK3ZvaWQgd2Via2l0X3dlYl92aWV3X2NvcHlfY2xpcGJvYXJk
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
SVNfV0VCX1ZJRVcod2ViVmlldykpOworCisgICAgd2Via2l0V2ViVmlld0V4ZWN1dGVDb21tYW5k
KHdlYlZpZXcsICJDb3B5Iik7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl92aWV3X2Nhbl9wYXN0
ZV9jbGlwYm9hcmQ6CisgKiBAd2ViX3ZpZXc6IGEgI1dlYktpdFdlYlZpZXcKKyAqIEBjYWxsYmFj
azogKHNjb3BlIGFzeW5jKTogYSAjR0FzeW5jUmVhZHlDYWxsYmFjayB0byBjYWxsIHdoZW4gdGhl
IHJlcXVlc3QgaXMgc2F0aXNmaWVkCisgKiBAdXNlcl9kYXRhOiAoY2xvc3VyZSk6IHRoZSBkYXRh
IHRvIHBhc3MgdG8gY2FsbGJhY2sgZnVuY3Rpb24KKyAqCisgKiBBc3luY2hyb25vdXNseSBnZXQg
d2hldGhlciBpdCBpcyBjdXJyZW50bHkgcG9zc2libGUgdG8gcGFzdGUgdGhlIGNvbnRlbnRzIG9m
IHRoZSBjbGlwYm9hcmQKKyAqIGluc2lkZSBAd2ViX3ZpZXcuIEluIGdlbmVyYWwgaXQncyBwb3Nz
aWJsZSB0byBwYXN0ZSBmcm9tIHRoZSBjbGlwYm9hcmQgd2hlbiBAd2ViX3ZpZXcKKyAqIGNvbnRl
bnQgaXMgZWRpdGFibGUgYW5kIGNsaXBib2FyZCBpcyBub3QgZW1wdHkuIFNlZSBhbHNvIHdlYmtp
dF93ZWJfdmlld19wYXN0ZV9jbGlwYm9hcmQoKS4KKyAqCisgKiBXaGVuIHRoZSBvcGVyYXRpb24g
aXMgZmluaXNoZWQsIEBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZC4gWW91IGNhbiB0aGVuIGNhbGwK
KyAqIHdlYmtpdF93ZWJfdmlld19jYW5fcGFzdGVfY2xpcGJvYXJkX2ZpbmlzaCgpIHRvIGdldCB0
aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCisgKi8KK3ZvaWQgd2Via2l0X3dlYl92aWV3X2Nh
bl9wYXN0ZV9jbGlwYm9hcmQoV2ViS2l0V2ViVmlldyogd2ViVmlldywgR0FzeW5jUmVhZHlDYWxs
YmFjayBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldykpOworCisgICAgd2Via2l0V2ViVmlld1ZhbGlk
YXRlQ29tbWFuZCh3ZWJWaWV3LCAiUGFzdGUiLCBjYWxsYmFjaywgdXNlckRhdGEsIHJlaW50ZXJw
cmV0X2Nhc3Q8Z3BvaW50ZXI+KHdlYmtpdF93ZWJfdmlld19jYW5fcGFzdGVfY2xpcGJvYXJkKSk7
Cit9CisKKy8qKgorICogd2Via2l0X3dlYl92aWV3X2Nhbl9wYXN0ZV9jbGlwYm9hcmRfZmluaXNo
OgorICogQHdlYl92aWV3OiBhICNXZWJLaXRXZWJWaWV3CisgKiBAcmVzdWx0OiBhICNHQXN5bmNS
ZXN1bHQKKyAqIEBlcnJvcjogcmV0dXJuIGxvY2F0aW9uIGZvciBlcnJvciBvciAlTlVMTCB0byBp
Z25vcmUKKyAqCisgKiBGaW5pc2ggYW4gYXN5bmNocm9ub3VzIG9wZXJhdGlvbiBzdGFydGVkIHdp
dGggd2Via2l0X3dlYl92aWV3X2Nhbl9wYXN0ZV9jbGlwYm9hcmQoKS4KKyAqCisgKiBSZXR1cm5z
OiAlVFJVRSBpZiBjbGlwYm9hcmQgY29udGVudHMgY2FuIGJlIHBhc3RlZCBvciAlRkFMU0Ugb3Ro
ZXJ3aXNlCisgKi8KK2dib29sZWFuIHdlYmtpdF93ZWJfdmlld19jYW5fcGFzdGVfY2xpcGJvYXJk
X2ZpbmlzaChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgR0Vy
cm9yKiogZXJyb3IpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9W
SUVXKHdlYlZpZXcpLCBGQUxTRSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoR19JU19BU1lO
Q19SRVNVTFQocmVzdWx0KSwgRkFMU0UpOworCisgICAgR1NpbXBsZUFzeW5jUmVzdWx0KiBzaW1w
bGUgPSBHX1NJTVBMRV9BU1lOQ19SRVNVTFQocmVzdWx0KTsKKyAgICBnX3dhcm5faWZfZmFpbChn
X3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X3NvdXJjZV90YWcoc2ltcGxlKSA9PSB3ZWJraXRfd2Vi
X3ZpZXdfY2FuX3Bhc3RlX2NsaXBib2FyZCk7CisKKyAgICBpZiAoZ19zaW1wbGVfYXN5bmNfcmVz
dWx0X3Byb3BhZ2F0ZV9lcnJvcihzaW1wbGUsIGVycm9yKSkKKyAgICAgICAgcmV0dXJuIEZBTFNF
OworICAgIHJldHVybiBnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X29wX3Jlc19nYm9vbGVhbihz
aW1wbGUpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfdmlld19wYXN0ZV9jbGlwYm9hcmQ6Cisg
KiBAd2ViX3ZpZXc6IGEgI1dlYktpdFdlYlZpZXcKKyAqCisgKiBQYXN0ZSB0aGUgY29udGVudHMg
b2YgdGhlIGNsaXBib2FyZCB0byBAd2ViX3ZpZXcuCisgKiBZb3UgY2FuIHVzZSB3ZWJraXRfd2Vi
X3ZpZXdfY2FuX3Bhc3RlX2NsaXBib2FyZCgpCisgKiB0byBjaGVjayB3aGV0aGVyIGl0J3MgcG9z
c2libGUgcGFzdGUgdGhlIGNsaXBib2FyZCBjb250ZW50cy4KKyAqLwordm9pZCB3ZWJraXRfd2Vi
X3ZpZXdfcGFzdGVfY2xpcGJvYXJkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldykpOworCisgICAgd2Via2l0
V2ViVmlld0V4ZWN1dGVDb21tYW5kKHdlYlZpZXcsICJQYXN0ZSIpOworfQorCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKaW5kZXggYTI1YzQz
OC4uNzJmYjQxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXcuaApAQCAtMjA3LDYgKzIwNyw0MSBAQCB3ZWJraXRfd2ViX3ZpZXdfc2V0X3pv
b21fbGV2ZWwgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3Zp
ZQogV0VCS0lUX0FQSSBnZG91YmxlCiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3pvb21fbGV2ZWwgICAg
ICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcpOwogCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJfdmlld19jYW5fY3V0X2NsaXBib2FyZCAgICAgICAgICAg
IChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZWFkeUNhbGxiYWNrICAgICAgICBj
YWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
cG9pbnRlciAgICAgICAgICAgICAgICAgICB1c2VyX2RhdGEpOworV0VCS0lUX0FQSSBnYm9vbGVh
bgord2Via2l0X3dlYl92aWV3X2Nhbl9jdXRfY2xpcGJvYXJkX2ZpbmlzaCAgICAgKFdlYktpdFdl
YlZpZXcgICAgICAgICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdBc3luY1Jlc3VsdCAgICAgICAgICAgICAgKnJlc3VsdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAg
ICAgICAgICAgICAgKiplcnJvcik7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYl92aWV3
X2N1dF9jbGlwYm9hcmQgICAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAg
KndlYl92aWV3KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2ViX3ZpZXdfY2FuX2NvcHlf
Y2xpcGJvYXJkICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVh
ZHlDYWxsYmFjayAgICAgICAgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgICAgICAgdXNlcl9kYXRhKTsK
K1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF93ZWJfdmlld19jYW5fY29weV9jbGlwYm9hcmRf
ZmluaXNoICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZXN1bHQgICAgICAg
ICAgICAgICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0Vycm9yICAgICAgICAgICAgICAgICAgICoqZXJyb3IpOworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfd2ViX3ZpZXdfY29weV9jbGlwYm9hcmQgICAgICAgICAgICAgICAoV2ViS2l0V2Vi
VmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93
ZWJfdmlld19jYW5fcGFzdGVfY2xpcGJvYXJkICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAg
ICAgICAgICp3ZWJfdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQXN5bmNSZWFkeUNhbGxiYWNrICAgICAgICBjYWxsYmFjaywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgICAg
ICAgICB1c2VyX2RhdGEpOworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X3dlYl92aWV3X2Nh
bl9wYXN0ZV9jbGlwYm9hcmRfZmluaXNoICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndl
Yl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdB
c3luY1Jlc3VsdCAgICAgICAgICAgICAgKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgICAgICAgICAgKiplcnJvcik7
CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYl92aWV3X3Bhc3RlX2NsaXBib2FyZCAgICAg
ICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3KTsKKwogR19FTkRf
REVDTFMKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0IGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAppbmRleCA0Nzg5NzliLi5l
MjY5ZjRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2Nz
L3dlYmtpdDJndGstc2VjdGlvbnMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKQEAgLTc1LDYgKzc1LDE1IEBAIHdl
YmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3MKIHdlYmtpdF93ZWJfdmlld19nZXRfd2luZG93X3By
b3BlcnRpZXMKIHdlYmtpdF93ZWJfdmlld19zZXRfem9vbV9sZXZlbAogd2Via2l0X3dlYl92aWV3
X2dldF96b29tX2xldmVsCit3ZWJraXRfd2ViX3ZpZXdfY2FuX2N1dF9jbGlwYm9hcmQKK3dlYmtp
dF93ZWJfdmlld19jYW5fY3V0X2NsaXBib2FyZF9maW5pc2gKK3dlYmtpdF93ZWJfdmlld19jdXRf
Y2xpcGJvYXJkCit3ZWJraXRfd2ViX3ZpZXdfY2FuX2NvcHlfY2xpcGJvYXJkCit3ZWJraXRfd2Vi
X3ZpZXdfY2FuX2NvcHlfY2xpcGJvYXJkX2ZpbmlzaAord2Via2l0X3dlYl92aWV3X2NvcHlfY2xp
cGJvYXJkCit3ZWJraXRfd2ViX3ZpZXdfY2FuX3Bhc3RlX2NsaXBib2FyZAord2Via2l0X3dlYl92
aWV3X2Nhbl9wYXN0ZV9jbGlwYm9hcmRfZmluaXNoCit3ZWJraXRfd2ViX3ZpZXdfcGFzdGVfY2xp
cGJvYXJkCiAKIDxTVUJTRUNUSU9OIFN0YW5kYXJkPgogV2ViS2l0V2ViVmlld0NsYXNzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmls
ZS5hbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxl
LmFtCmluZGV4IGRmNTM3Y2EuLjI5ZmI3NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCkBAIC00LDcgKzQsOCBAQCBU
RVNUX1BST0dTICs9IFwKIAlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdExvYWRlckNsaWVu
dCBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRTZXR0aW5ncyBcCiAJUHJv
Z3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RCYWNrRm9yd2FyZExpc3QgXAotCVByb2dyYW1zL1dl
YktpdDJBUElUZXN0cy9UZXN0RG93bmxvYWRzCisJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rl
c3REb3dubG9hZHMgXAorCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0V2ViVmlld0VkaXRv
cgogCiBub2luc3RfUFJPR1JBTVMgKz0gJChURVNUX1BST0dTKQogCkBAIC0xMDUsMyArMTA2LDEw
IEBAIFByb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0RG93bmxvYWRzX0NQUEZMQUdTID0gJCh3
ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQogUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3REb3du
bG9hZHNfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCiBQcm9ncmFtc19XZWJLaXQyQVBJ
VGVzdHNfVGVzdERvd25sb2Fkc19MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCiAK
K1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViVmlld0VkaXRvcl9TT1VSQ0VTID0gXAor
ICAgICAgICBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViVmll
d0VkaXRvci5jcHAKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViVmlld0VkaXRvcl9D
UFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKK1Byb2dyYW1zX1dlYktpdDJBUElU
ZXN0c19UZXN0V2ViVmlld0VkaXRvcl9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKK1By
b2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViVmlld0VkaXRvcl9MREZMQUdTID0gJCh3ZWJr
aXQyX3Rlc3RzX2xkZmxhZ3MpCisKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYlZpZXdFZGl0b3IuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYlZpZXdFZGl0b3IuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWFlODIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViVmlld0VkaXRvci5jcHAK
QEAgLTAsMCArMSwxODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgorI2luY2x1ZGUg
PHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKworY2xhc3MgRWRpdG9yVGVzdDogcHVibGljIFdlYlZp
ZXdUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKEVkaXRvclRlc3Qp
OworCisgICAgRWRpdG9yVGVzdCgpCisgICAgICAgIDogbV9jbGlwYm9hcmQoZ3RrX2NsaXBib2Fy
ZF9nZXQoR0RLX1NFTEVDVElPTl9DTElQQk9BUkQpKQorICAgICAgICAsIG1fY2FuQ3V0Q2xpcGJv
YXJkKGZhbHNlKQorICAgICAgICAsIG1fY2FuQ29weUNsaXBib2FyZChmYWxzZSkKKyAgICAgICAg
LCBtX2NhblBhc3RlQ2xpcGJvYXJkKGZhbHNlKQorICAgICAgICAsIG1fdHJpZXNDb3VudCgwKQor
ICAgIHsKKyAgICAgICAgZ3RrX2NsaXBib2FyZF9jbGVhcihtX2NsaXBib2FyZCk7CisgICAgfQor
CisgICAgc3RhdGljIHZvaWQgY2FuQ3V0Q2xpcGJvYXJkUmVhZHlDYWxsYmFjayhHT2JqZWN0Kiwg
R0FzeW5jUmVzdWx0KiByZXN1bHQsIEVkaXRvclRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBH
T3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgIHRlc3QtPm1fY2FuQ3V0Q2xpcGJvYXJkID0g
d2Via2l0X3dlYl92aWV3X2Nhbl9jdXRfY2xpcGJvYXJkX2ZpbmlzaCh0ZXN0LT5tX3dlYlZpZXcs
IHJlc3VsdCwgJmVycm9yLm91dFB0cigpKTsKKyAgICAgICAgZ19hc3NlcnQoIWVycm9yLmdldCgp
KTsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgdm9pZCBjYW5Db3B5Q2xpcGJvYXJkUmVhZHlDYWxsYmFjayhHT2JqZWN0Kiwg
R0FzeW5jUmVzdWx0KiByZXN1bHQsIEVkaXRvclRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBH
T3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgIHRlc3QtPm1fY2FuQ29weUNsaXBib2FyZCA9
IHdlYmtpdF93ZWJfdmlld19jYW5fY29weV9jbGlwYm9hcmRfZmluaXNoKHRlc3QtPm1fd2ViVmll
dywgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpOworICAgICAgICBnX2Fzc2VydCghZXJyb3IuZ2V0
KCkpOworICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAgIH0K
KworICAgIHN0YXRpYyB2b2lkIGNhblBhc3RlQ2xpcGJvYXJkUmVhZHlDYWxsYmFjayhHT2JqZWN0
KiwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIEVkaXRvclRlc3QqIHRlc3QpCisgICAgeworICAgICAg
ICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgIHRlc3QtPm1fY2FuUGFzdGVDbGlwYm9h
cmQgPSB3ZWJraXRfd2ViX3ZpZXdfY2FuX3Bhc3RlX2NsaXBib2FyZF9maW5pc2godGVzdC0+bV93
ZWJWaWV3LCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSk7CisgICAgICAgIGdfYXNzZXJ0KCFlcnJv
ci5nZXQoKSk7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Cisg
ICAgfQorCisgICAgYm9vbCBjYW5DdXRDbGlwYm9hcmQoKQorICAgIHsKKyAgICAgICAgbV9jYW5D
dXRDbGlwYm9hcmQgPSBmYWxzZTsKKyAgICAgICAgd2Via2l0X3dlYl92aWV3X2Nhbl9jdXRfY2xp
cGJvYXJkKG1fd2ViVmlldywgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihj
YW5DdXRDbGlwYm9hcmRSZWFkeUNhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdfbWFpbl9sb29w
X3J1bihtX21haW5Mb29wKTsKKyAgICAgICAgcmV0dXJuIG1fY2FuQ3V0Q2xpcGJvYXJkOworICAg
IH0KKworICAgIGJvb2wgY2FuQ29weUNsaXBib2FyZCgpCisgICAgeworICAgICAgICBtX2NhbkNv
cHlDbGlwYm9hcmQgPSBmYWxzZTsKKyAgICAgICAgd2Via2l0X3dlYl92aWV3X2Nhbl9jb3B5X2Ns
aXBib2FyZChtX3dlYlZpZXcsIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4o
Y2FuQ29weUNsaXBib2FyZFJlYWR5Q2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZ19tYWluX2xv
b3BfcnVuKG1fbWFpbkxvb3ApOworICAgICAgICByZXR1cm4gbV9jYW5Db3B5Q2xpcGJvYXJkOwor
ICAgIH0KKworICAgIGJvb2wgY2FuUGFzdGVDbGlwYm9hcmQoKQorICAgIHsKKyAgICAgICAgbV9j
YW5QYXN0ZUNsaXBib2FyZCA9IGZhbHNlOworICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfY2FuX3Bh
c3RlX2NsaXBib2FyZChtX3dlYlZpZXcsIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxs
YmFjaz4oY2FuUGFzdGVDbGlwYm9hcmRSZWFkeUNhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdf
bWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICAgICAgcmV0dXJuIG1fY2FuUGFzdGVDbGlw
Ym9hcmQ7CisgICAgfQorCisgICAgc3RhdGljIGdib29sZWFuIHdhaXRGb3JDbGlwYm9hcmRUZXh0
KEVkaXRvclRlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5tX3RyaWVzQ291bnQrKzsK
KyAgICAgICAgaWYgKGd0a19jbGlwYm9hcmRfd2FpdF9pc190ZXh0X2F2YWlsYWJsZSh0ZXN0LT5t
X2NsaXBib2FyZCkgfHwgdGVzdC0+bV90cmllc0NvdW50ID4gMikgeworICAgICAgICAgICAgZ19t
YWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICAgICAgICAgIHJldHVybiBGQUxT
RTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAgIHZvaWQg
Y29weUNsaXBib2FyZCgpCisgICAgeworICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfY29weV9jbGlw
Ym9hcmQobV93ZWJWaWV3KTsKKyAgICAgICAgLy8gVGhlcmUncyBubyB3YXkgdG8ga25vdyB3aGVu
IHRoZSBzZWxlY3Rpb24gaGFzIGJlZW4gY29waWVkIHRvCisgICAgICAgIC8vIHRoZSBjbGlwYm9h
cmQsIHNvIHVzZSBhIHRpbWVvdXQgc291cmNlIHRvIHF1ZXJ5IHRoZSBjbGlwYm9hcmQuCisgICAg
ICAgIG1fdHJpZXNDb3VudCA9IDA7CisgICAgICAgIGdfdGltZW91dF9hZGRfc2Vjb25kcygxLCBy
ZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPih3YWl0Rm9yQ2xpcGJvYXJkVGV4dCksIHRoaXMp
OworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgfQorCisgICAgR3Rr
Q2xpcGJvYXJkKiBtX2NsaXBib2FyZDsKKyAgICBib29sIG1fY2FuQ3V0Q2xpcGJvYXJkOworICAg
IGJvb2wgbV9jYW5Db3B5Q2xpcGJvYXJkOworICAgIGJvb2wgbV9jYW5QYXN0ZUNsaXBib2FyZDsK
KyAgICBzaXplX3QgbV90cmllc0NvdW50OworfTsKKworc3RhdGljIHZvaWQgd2ViVmlld0xvYWRD
aGFuZ2VkKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRMb2FkRXZlbnQgbG9hZEV2ZW50LCBXZWJWaWV3
VGVzdCogdGVzdCkKK3sKKyAgICBpZiAobG9hZEV2ZW50ICE9IFdFQktJVF9MT0FEX0ZJTklTSEVE
KQorICAgICAgICByZXR1cm47CisgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29w
KTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdFZGl0b3JDdXRDb3B5UGFzdGVOb25FZGl0
YWJsZShFZGl0b3JUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHN0YXRpYyBjb25z
dCBjaGFyKiBzZWxlY3RlZFNwYW5IVE1MID0gIjxodG1sPjxib2R5IGNvbnRlbnRFZGl0YWJsZT1c
ImZhbHNlXCI+IgorICAgICAgICAiPHNwYW4gaWQ9XCJtYWluc3BhblwiPkFsbCB3b3JrIGFuZCBu
byBwbGF5IDxzcGFuIGlkPVwic3Vic3BhblwiPm1ha2UgSmFjayBhIGR1bGw8L3NwYW4+IGJveS48
L3NwYW4+IgorICAgICAgICAiPHNjcmlwdD5kb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5jb2xsYXBz
ZSgpO1xuIgorICAgICAgICAiZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRy
ZW4oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1YnNwYW4nKSk7XG4iCisgICAgICAgICI8L3Nj
cmlwdD48L2JvZHk+PC9odG1sPiI7CisKKyAgICAvLyBOb3RoaW5nIGxvYWRlZCB5ZXQuCisgICAg
Z19hc3NlcnQoIXRlc3QtPmNhbkN1dENsaXBib2FyZCgpKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+
Y2FuQ29weUNsaXBib2FyZCgpKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+Y2FuUGFzdGVDbGlwYm9h
cmQoKSk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHRlc3QtPm1fd2ViVmlldywgImxvYWQtY2hh
bmdlZCIsIEdfQ0FMTEJBQ0sod2ViVmlld0xvYWRDaGFuZ2VkKSwgdGVzdCk7CisgICAgdGVzdC0+
bG9hZEh0bWwoc2VsZWN0ZWRTcGFuSFRNTCwgMCk7CisgICAgZ19tYWluX2xvb3BfcnVuKHRlc3Qt
Pm1fbWFpbkxvb3ApOworCisgICAgZ19hc3NlcnQodGVzdC0+Y2FuQ29weUNsaXBib2FyZCgpKTsK
KyAgICAvLyBJdCdzIG5vdCBwb3NzaWJsZSB0byBjdXQgYW5kIHBhc3RlIHdoZW4gY29udGVudCBp
cyBub3QgZWRpdGFibGUKKyAgICAvLyBldmVuIGlmIHRoZXJlJ3MgYSBzZWxlY3Rpb24uCisgICAg
Z19hc3NlcnQoIXRlc3QtPmNhbkN1dENsaXBib2FyZCgpKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+
Y2FuUGFzdGVDbGlwYm9hcmQoKSk7CisKKyAgICB0ZXN0LT5jb3B5Q2xpcGJvYXJkKCk7CisgICAg
R093blB0cjxjaGFyPiBjbGlwYm9hcmRUZXh0KGd0a19jbGlwYm9hcmRfd2FpdF9mb3JfdGV4dCh0
ZXN0LT5tX2NsaXBib2FyZCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cihjbGlwYm9hcmRUZXh0Lmdl
dCgpLCA9PSwgIm1ha2UgSmFjayBhIGR1bGwiKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZp
ZXdFZGl0b3JDdXRDb3B5UGFzdGVFZGl0YWJsZShFZGl0b3JUZXN0KiB0ZXN0LCBnY29uc3Rwb2lu
dGVyKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzZWxlY3RlZFNwYW5IVE1MID0gIjxodG1s
Pjxib2R5IGNvbnRlbnRFZGl0YWJsZT1cInRydWVcIj4iCisgICAgICAgICI8c3BhbiBpZD1cIm1h
aW5zcGFuXCI+QWxsIHdvcmsgYW5kIG5vIHBsYXkgPHNwYW4+bWFrZSBKYWNrIGEgZHVsbDwvc3Bh
bj4gYm95Ljwvc3Bhbj4iCisgICAgICAgICI8c2NyaXB0PmRvY3VtZW50LmdldFNlbGVjdGlvbigp
LmNvbGxhcHNlKCk7XG4iCisgICAgICAgICJkb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5zZWxlY3RB
bGxDaGlsZHJlbihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbnNwYW4nKSk7XG4iCisgICAg
ICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7CisKKyAgICAvLyBOb3RoaW5nIGxvYWRlZCB5
ZXQuCisgICAgZ19hc3NlcnQoIXRlc3QtPmNhbkN1dENsaXBib2FyZCgpKTsKKyAgICBnX2Fzc2Vy
dCghdGVzdC0+Y2FuQ29weUNsaXBib2FyZCgpKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+Y2FuUGFz
dGVDbGlwYm9hcmQoKSk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHRlc3QtPm1fd2ViVmlldywg
ImxvYWQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sod2ViVmlld0xvYWRDaGFuZ2VkKSwgdGVzdCk7Cisg
ICAgdGVzdC0+bG9hZEh0bWwoc2VsZWN0ZWRTcGFuSFRNTCwgMCk7CisgICAgZ19tYWluX2xvb3Bf
cnVuKHRlc3QtPm1fbWFpbkxvb3ApOworCisgICAgLy8gVGhlcmUncyBhIHNlbGVjdGlvbi4KKyAg
ICBnX2Fzc2VydCh0ZXN0LT5jYW5Db3B5Q2xpcGJvYXJkKCkpOworICAgIGdfYXNzZXJ0KHRlc3Qt
PmNhbkN1dENsaXBib2FyZCgpKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5jYW5QYXN0ZUNsaXBib2Fy
ZCgpKTsKKworICAgIHRlc3QtPmNvcHlDbGlwYm9hcmQoKTsKKyAgICBHT3duUHRyPGNoYXI+IGNs
aXBib2FyZFRleHQoZ3RrX2NsaXBib2FyZF93YWl0X2Zvcl90ZXh0KHRlc3QtPm1fY2xpcGJvYXJk
KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGNsaXBib2FyZFRleHQuZ2V0KCksID09LCAiQWxsIHdv
cmsgYW5kIG5vIHBsYXkgbWFrZSBKYWNrIGEgZHVsbCBib3kuIik7Cit9CisKK3ZvaWQgYmVmb3Jl
QWxsKCkKK3sKKyAgICBFZGl0b3JUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiY3V0LWNvcHkt
cGFzdGUvbm9uLWVkaXRhYmxlIiwgdGVzdFdlYlZpZXdFZGl0b3JDdXRDb3B5UGFzdGVOb25FZGl0
YWJsZSk7CisgICAgRWRpdG9yVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImN1dC1jb3B5LXBh
c3RlL2VkaXRhYmxlIiwgdGVzdFdlYlZpZXdFZGl0b3JDdXRDb3B5UGFzdGVFZGl0YWJsZSk7Cit9
CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125107</attachid>
            <date>2012-02-02 04:13:55 -0800</date>
            <delta_ts>2012-02-07 02:03:38 -0800</delta_ts>
            <desc>New patch</desc>
            <filename>wk2-editor-api2.diff</filename>
            <type>text/plain</type>
            <size>25949</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAxNzM4MGMzLi5kM2U3N2ZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkg
QEAKKzIwMTItMDItMDIgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIEFkZCBjdXQsIGNvcHkgYW5kIHBhc3RlIG1ldGhvZHMgdG8gV2Vi
S2l0MiBHVEsrIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzY5OTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwOgorICAgICAgICAoZGlk
VmFsaWRhdGVDb21tYW5kKTogQ2FsbGJhY2sgY2FsbGVkIGJ5IHRoZSBDIEFQSSB3aGVuIGFuIGVk
aXRvcgorICAgICAgICBjb21tYW5kIGhhcyBiZWVuIHZhbGlkYXRlZC4KKyAgICAgICAgKHdlYmtp
dF93ZWJfdmlld19jYW5fZXhlY3V0ZV9lZGl0aW5nX2NvbW1hbmQpOiBBc3luY2hyb25vdXNseQor
ICAgICAgICB2YWxpZGF0ZSB0aGUgZ2l2ZW4gZWRpdGluZyBjb21tYW5kLgorICAgICAgICAod2Vi
a2l0X3dlYl92aWV3X2Nhbl9leGVjdXRlX2VkaXRpbmdfY29tbWFuZF9maW5pc2gpOiBGaW5pc2gg
YXN5bmMKKyAgICAgICAgb3BlcmF0aW9uIHN0YXJ0ZWQgYnkgd2Via2l0X3dlYl92aWV3X2Nhbl9l
eGVjdXRlX2VkaXRpbmdfY29tbWFuZCgpLgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2V4ZWN1
dGVfZWRpdGluZ19jb21tYW5kKTogRXhlY3V0ZSB0aGUgZ2l2ZW4KKyAgICAgICAgY29tbWFuZC4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3Lmg6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dDogQWRkIG5ldyBz
eW1ib2xzLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFt
OiBBZGQgd2ViIHZpZXcgZWRpdG9yIHRlc3QuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvVGVzdFdlYlZpZXdFZGl0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKHdlYlZpZXdMb2Fk
Q2hhbmdlZCk6CisgICAgICAgICh0ZXN0V2ViVmlld0VkaXRvckN1dENvcHlQYXN0ZU5vbkVkaXRh
YmxlKToKKyAgICAgICAgKHRlc3RXZWJWaWV3RWRpdG9yQ3V0Q29weVBhc3RlRWRpdGFibGUpOgor
ICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKGFmdGVyQWxsKToKKwogMjAxMi0wMi0wMSAg
UGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dTdHJl
YW1lcl0gRkZURnJhbWUgaW1wbGVtZW50YXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKaW5kZXggZThiY2FlZS4uMTdkMDUxOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
dy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
dy5jcHAKQEAgLTEyNjYsMyArMTI2Niw3NyBAQCBnZG91YmxlIHdlYmtpdF93ZWJfdmlld19nZXRf
em9vbV9sZXZlbChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgIFdLUGFnZVJlZiB3a1BhZ2Ug
PSB0b0FQSSh3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2Vi
VmlldykpKTsKICAgICByZXR1cm4gV0tQYWdlR2V0UGFnZVpvb21GYWN0b3Iod2tQYWdlKTsKIH0K
KworCitzdGF0aWMgdm9pZCBkaWRWYWxpZGF0ZUNvbW1hbmQoV0tTdHJpbmdSZWYgY29tbWFuZCwg
Ym9vbCBpc0VuYWJsZWQsIGludDMyX3Qgc3RhdGUsIFdLRXJyb3JSZWYsIHZvaWQqIGNvbnRleHQp
Cit7CisgICAgR1JlZlB0cjxHU2ltcGxlQXN5bmNSZXN1bHQ+IHJlc3VsdCA9IGFkb3B0R1JlZihH
X1NJTVBMRV9BU1lOQ19SRVNVTFQoY29udGV4dCkpOworICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3Vs
dF9zZXRfb3BfcmVzX2dib29sZWFuKHJlc3VsdC5nZXQoKSwgaXNFbmFibGVkKTsKKyAgICBnX3Np
bXBsZV9hc3luY19yZXN1bHRfY29tcGxldGUocmVzdWx0LmdldCgpKTsKK30KKworLyoqCisgKiB3
ZWJraXRfd2ViX3ZpZXdfY2FuX2V4ZWN1dGVfZWRpdGluZ19jb21tYW5kOgorICogQHdlYl92aWV3
OiBhICNXZWJLaXRXZWJWaWV3CisgKiBAY29tbWFuZDogdGhlIGNvbW1hbmQgdG8gY2hlY2sKKyAq
IEBjYWxsYmFjazogKHNjb3BlIGFzeW5jKTogYSAjR0FzeW5jUmVhZHlDYWxsYmFjayB0byBjYWxs
IHdoZW4gdGhlIHJlcXVlc3QgaXMgc2F0aXNmaWVkCisgKiBAdXNlcl9kYXRhOiAoY2xvc3VyZSk6
IHRoZSBkYXRhIHRvIHBhc3MgdG8gY2FsbGJhY2sgZnVuY3Rpb24KKyAqCisgKiBBc3luY2hyb25v
dXNseSBleGVjdXRlIHRoZSBnaXZlbiBlZGl0aW5nIGNvbW1hbmQuCisgKgorICogV2hlbiB0aGUg
b3BlcmF0aW9uIGlzIGZpbmlzaGVkLCBAY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQuIFlvdSBjYW4g
dGhlbiBjYWxsCisgKiB3ZWJraXRfd2ViX3ZpZXdfY2FuX2V4ZWN1dGVfZWRpdGluZ19jb21tYW5k
X2ZpbmlzaCgpIHRvIGdldCB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCisgKi8KK3ZvaWQg
d2Via2l0X3dlYl92aWV3X2Nhbl9leGVjdXRlX2VkaXRpbmdfY29tbWFuZChXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3LCBjb25zdCBjaGFyKiBjb21tYW5kLCBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxi
YWNrLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9J
U19XRUJfVklFVyh3ZWJWaWV3KSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChjb21tYW5kKTsKKwor
ICAgIEdTaW1wbGVBc3luY1Jlc3VsdCogcmVzdWx0ID0gZ19zaW1wbGVfYXN5bmNfcmVzdWx0X25l
dyhHX09CSkVDVCh3ZWJWaWV3KSwgY2FsbGJhY2ssIHVzZXJEYXRhLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9j
YXN0PGdwb2ludGVyPih3ZWJraXRfd2ViX3ZpZXdfY2FuX2V4ZWN1dGVfZWRpdGluZ19jb21tYW5k
KSk7CisgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKFdF
QktJVF9XRUJfVklFV19CQVNFKHdlYlZpZXcpKTsKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gd2tDb21tYW5kKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGNvbW1h
bmQpKTsKKyAgICBXS1BhZ2VWYWxpZGF0ZUNvbW1hbmQodG9BUEkocGFnZSksIHdrQ29tbWFuZC5n
ZXQoKSwgcmVzdWx0LCBkaWRWYWxpZGF0ZUNvbW1hbmQpOworfQorCisvKioKKyAqIHdlYmtpdF93
ZWJfdmlld19jYW5fZXhlY3V0ZV9lZGl0aW5nX2NvbW1hbmRfZmluaXNoOgorICogQHdlYl92aWV3
OiBhICNXZWJLaXRXZWJWaWV3CisgKiBAcmVzdWx0OiBhICNHQXN5bmNSZXN1bHQKKyAqIEBlcnJv
cjogcmV0dXJuIGxvY2F0aW9uIGZvciBlcnJvciBvciAlTlVMTCB0byBpZ25vcmUKKyAqCisgKiBG
aW5pc2ggYW4gYXN5bmNocm9ub3VzIG9wZXJhdGlvbiBzdGFydGVkIHdpdGggd2Via2l0X3dlYl92
aWV3X2Nhbl9leGVjdXRlX2VkaXRpbmdfY29tbWFuZCgpLgorICoKKyAqIFJldHVybnM6ICVUUlVF
IGlmIGEgc2VsZWN0aW9uIGNhbiBiZSBjdXQgb3IgJUZBTFNFIG90aGVyd2lzZQorICovCitnYm9v
bGVhbiB3ZWJraXRfd2ViX3ZpZXdfY2FuX2V4ZWN1dGVfZWRpdGluZ19jb21tYW5kX2ZpbmlzaChX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgR0Vycm9yKiogZXJy
b3IpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZp
ZXcpLCBGQUxTRSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoR19JU19BU1lOQ19SRVNVTFQo
cmVzdWx0KSwgRkFMU0UpOworCisgICAgR1NpbXBsZUFzeW5jUmVzdWx0KiBzaW1wbGUgPSBHX1NJ
TVBMRV9BU1lOQ19SRVNVTFQocmVzdWx0KTsKKyAgICBnX3dhcm5faWZfZmFpbChnX3NpbXBsZV9h
c3luY19yZXN1bHRfZ2V0X3NvdXJjZV90YWcoc2ltcGxlKSA9PSB3ZWJraXRfd2ViX3ZpZXdfY2Fu
X2V4ZWN1dGVfZWRpdGluZ19jb21tYW5kKTsKKworICAgIGlmIChnX3NpbXBsZV9hc3luY19yZXN1
bHRfcHJvcGFnYXRlX2Vycm9yKHNpbXBsZSwgZXJyb3IpKQorICAgICAgICByZXR1cm4gRkFMU0U7
CisgICAgcmV0dXJuIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfb3BfcmVzX2dib29sZWFuKHNp
bXBsZSk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl92aWV3X2V4ZWN1dGVfZWRpdGluZ19jb21t
YW5kOgorICogQHdlYl92aWV3OiBhICNXZWJLaXRXZWJWaWV3CisgKiBAY29tbWFuZDogdGhlIGNv
bW1hbmQgdG8gZXhlY3V0ZQorICoKKyAqIFJlcXVlc3QgdG8gZXhlY3V0ZSB0aGUgZ2l2ZW4gQGNv
bW1hbmQgZm9yIEB3ZWJfdmlldy4gWW91IGNhbiB1c2UKKyAqIHdlYmtpdF93ZWJfdmlld19jYW5f
ZXhlY3V0ZV9lZGl0aW5nX2NvbW1hbmQoKSB0byBjaGVjayB3aGV0aGVyCisgKiBpdCdzIHBvc3Np
YmxlIHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmQuCisgKi8KK3ZvaWQgd2Via2l0X3dlYl92aWV3X2V4
ZWN1dGVfZWRpdGluZ19jb21tYW5kKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IGNoYXIq
IGNvbW1hbmQpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2Vi
VmlldykpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29tbWFuZCk7CisKKyAgICBXZWJQYWdlUHJv
eHkqIHBhZ2UgPSB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0Uo
d2ViVmlldykpOworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a0NvbW1hbmQoQWRvcHRX
SywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoY29tbWFuZCkpOworICAgIFdLUGFnZUV4
ZWN1dGVDb21tYW5kKHRvQVBJKHBhZ2UpLCB3a0NvbW1hbmQuZ2V0KCkpOworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCmluZGV4IDY5N2Zj
ZGMuLmJiMDI1MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3LmgKQEAgLTM5LDYgKzM5LDE3IEBACiAKIEdfQkVHSU5fREVDTFMKIAorI2Rl
ZmluZSBXRUJLSVRfVFlQRV9XRUJfVklFVyAgICAgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZ2V0
X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9WSUVXKG9iaikgICAgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9WSUVXLCBXZWJLaXRX
ZWJWaWV3KSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9WSUVXX0NMQVNTKGtsYXNzKSAgICAoR19UWVBF
X0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX1dFQl9WSUVXLCBXZWJLaXRX
ZWJWaWV3Q2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfV0VCX1ZJRVcob2JqKSAgICAgICAgIChH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfV0VCX1ZJRVcpKQor
I2RlZmluZSBXRUJLSVRfSVNfV0VCX1ZJRVdfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfV0VCX1ZJRVcpKQorI2RlZmluZSBXRUJLSVRf
V0VCX1ZJRVdfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmop
LCAgV0VCS0lUX1RZUEVfV0VCX1ZJRVcsIFdlYktpdFdlYlZpZXdDbGFzcykpCisKK3R5cGVkZWYg
c3RydWN0IF9XZWJLaXRXZWJWaWV3IFdlYktpdFdlYlZpZXc7Cit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0V2ViVmlld0NsYXNzIFdlYktpdFdlYlZpZXdDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRXZWJWaWV3UHJpdmF0ZSBXZWJLaXRXZWJWaWV3UHJpdmF0ZTsKKwogLyoqCiAgKiBXZWJLaXRQ
b2xpY3lEZWNpc2lvblR5cGU6CiAgKiBAV0VCS0lUX1BPTElDWV9ERUNJU0lPTl9UWVBFX05BVklH
QVRJT05fQUNUSU9OOiBUaGlzIHR5cGUgb2YgcG9saWN5IGRlY2lzaW9uCkBAIC03MywxNyArODQs
NiBAQCB0eXBlZGVmIGVudW0gewogICAgIFdFQktJVF9QT0xJQ1lfREVDSVNJT05fVFlQRV9SRVNQ
T05TRSwKIH0gV2ViS2l0UG9saWN5RGVjaXNpb25UeXBlOwogCi0jZGVmaW5lIFdFQktJVF9UWVBF
X1dFQl9WSUVXICAgICAgICAgICAgKHdlYmtpdF93ZWJfdmlld19nZXRfdHlwZSgpKQotI2RlZmlu
ZSBXRUJLSVRfV0VCX1ZJRVcob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
Q0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfV0VCX1ZJRVcsIFdlYktpdFdlYlZpZXcpKQotI2RlZmlu
ZSBXRUJLSVRfV0VCX1ZJRVdfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FT
VCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfV0VCX1ZJRVcsIFdlYktpdFdlYlZpZXdDbGFzcykpCi0j
ZGVmaW5lIFdFQktJVF9JU19XRUJfVklFVyhvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9XRUJfVklFVykpCi0jZGVmaW5lIFdFQktJVF9J
U19XRUJfVklFV19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyks
ICBXRUJLSVRfVFlQRV9XRUJfVklFVykpCi0jZGVmaW5lIFdFQktJVF9XRUJfVklFV19HRVRfQ0xB
U1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9X
RUJfVklFVywgV2ViS2l0V2ViVmlld0NsYXNzKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdl
YlZpZXcgV2ViS2l0V2ViVmlldzsKLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3Mg
V2ViS2l0V2ViVmlld0NsYXNzOwotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdQcml2YXRl
IFdlYktpdFdlYlZpZXdQcml2YXRlOwotCiAvKioKICAqIFdlYktpdExvYWRFdmVudAogICogQFdF
QktJVF9MT0FEX1NUQVJURUQ6IEEgbmV3IGxvYWQgcmVxdWVzdCBoYXMgYmVlbiBtYWRlLgpAQCAt
MTA2LDYgKzEwNiw0MyBAQCB0eXBlZGVmIGVudW0gewogICAgIFdFQktJVF9MT0FEX0ZJTklTSEVE
CiB9IFdlYktpdExvYWRFdmVudDsKIAorLyoqCisgKiBXRUJLSVRfRURJVElOR19DT01NQU5EX0NV
VDoKKyAqCisgKiBUaGUgY3V0IGNsaXBib2FyZCBjb21tYW5kLiBDb3BpZXMgdGhlIGN1cnJlbnQg
c2VsZWN0aW9uIGluc2lkZQorICogYSAjV2ViS2l0V2ViVmlldyB0byB0aGUgY2xpcGJvYXJkIGFu
ZCBkZWxldGVzIHRoZSBzZWxlY3RlZCBjb250ZW50LgorICogWW91IGNhbiBjaGVjayB3aGV0aGVy
IGl0J3MgcG9zc2libGUgdG8gZXhlY3V0ZSB0aGUgY29tbWFuZCB3aXRoCisgKiB3ZWJraXRfd2Vi
X3ZpZXdfY2FuX2V4ZWN1dGVfZWRpdGluZ19jb21tYW5kKCkuIEluIGdlbmVyYWwgaXQncworICog
cG9zc2libGUgdG8gY3V0IHRvIHRoZSBjbGlwYm9hcmQgd2hlbiB0aGUgI1dlYktpdFdlYlZpZXcg
Y29udGVudCBpcworICogZWRpdGFibGUgYW5kIHRoZXJlIGlzIGFuIGFjdGl2ZSBzZWxlY3Rpb24u
CisgKi8KKyNkZWZpbmUgV0VCS0lUX0VESVRJTkdfQ09NTUFORF9DVVQgICAiQ3V0IgorCisvKioK
KyAqIFdFQktJVF9FRElUSU5HX0NPTU1BTkRfQ09QWToKKyAqCisgKiBUaGUgY29weSBjbGlwYm9h
cmQgY29tbWFuZC4gQ29waWVzIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBpbnNpZGUKKyAqIGEgI1dl
YktpdFdlYlZpZXcgdG8gdGhlIGNsaXBib2FyZC4KKyAqIFlvdSBjYW4gY2hlY2sgd2hldGhlciBp
dCdzIHBvc3NpYmxlIHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmQgd2l0aAorICogd2Via2l0X3dlYl92
aWV3X2Nhbl9leGVjdXRlX2VkaXRpbmdfY29tbWFuZCgpLiBJbiBnZW5lcmFsIGl0J3MKKyAqIHBv
c3NpYmxlIHRvIGNvcHkgdG8gdGhlIGNsaXBib2FyZCB3aGVuIHRoZXJlIGlzIGFuIGFjdGl2ZSBz
ZWxlY3Rpb24KKyAqIGluc2lkZSB0aGUgI1dlYktpdFdlYlZpZXcuCisgKi8KKyNkZWZpbmUgV0VC
S0lUX0VESVRJTkdfQ09NTUFORF9DT1BZICAiQ29weSIKKworLyoqCisgKiBXRUJLSVRfRURJVElO
R19DT01NQU5EX1BBU1RFOgorICoKKyAqIFRoZSBwYXN0ZSBjbGlwYm9hcmQgY29tbWFuZC4gUGFz
dGVzIHRoZSBjb250ZW50cyBvZiB0aGUgY2xpcGJvYXJkIHRvCisgKiBhICNXZWJLaXRXZWJWaWV3
LgorICogWW91IGNhbiBjaGVjayB3aGV0aGVyIGl0J3MgcG9zc2libGUgdG8gZXhlY3V0ZSB0aGUg
Y29tbWFuZCB3aXRoCisgKiB3ZWJraXRfd2ViX3ZpZXdfY2FuX2V4ZWN1dGVfZWRpdGluZ19jb21t
YW5kKCkuIEluIGdlbmVyYWwgaXQncyBwb3NzaWJsZQorICogdG8gcGFzdGUgZnJvbSB0aGUgY2xp
cGJvYXJkIHdoZW4gdGhlICNXZWJLaXRXZWJWaWV3IGNvbnRlbnQgaXMgZWRpdGFibGUKKyAqIGFu
ZCBjbGlwYm9hcmQgaXMgbm90IGVtcHR5LgorICovCisjZGVmaW5lIFdFQktJVF9FRElUSU5HX0NP
TU1BTkRfUEFTVEUgIlBhc3RlIgorCisKIHN0cnVjdCBfV2ViS2l0V2ViVmlldyB7CiAgICAgV2Vi
S2l0V2ViVmlld0Jhc2UgcGFyZW50OwogCkBAIC0xNTIsOTkgKzE4OSwxMTMgQEAgc3RydWN0IF9X
ZWJLaXRXZWJWaWV3Q2xhc3MgewogfTsKIAogV0VCS0lUX0FQSSBHVHlwZQotd2Via2l0X3dlYl92
aWV3X2dldF90eXBlICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOword2Via2l0X3dlYl92aWV3
X2dldF90eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOwogCiBXRUJLSVRfQVBJ
IEd0a1dpZGdldCAqCi13ZWJraXRfd2ViX3ZpZXdfbmV3ICAgICAgICAgICAgICAgICAgICAgICAg
ICAodm9pZCk7Cit3ZWJraXRfd2ViX3ZpZXdfbmV3ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAodm9pZCk7CiAKIFdFQktJVF9BUEkgR3RrV2lkZ2V0ICoKLXdlYmtpdF93ZWJfdmlld19u
ZXdfd2l0aF9jb250ZXh0ICAgICAgICAgICAgIChXZWJLaXRXZWJDb250ZXh0ICAgICAgICAgICpj
b250ZXh0KTsKK3dlYmtpdF93ZWJfdmlld19uZXdfd2l0aF9jb250ZXh0ICAgICAgICAgICAgICAg
ICAgIChXZWJLaXRXZWJDb250ZXh0ICAgICAgICAgICpjb250ZXh0KTsKIAogV0VCS0lUX0FQSSBX
ZWJLaXRXZWJDb250ZXh0ICoKLXdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dCAgICAgICAgICAg
ICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7Cit3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2NvbnRleHQgICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAg
ICAgICAgICAgICAqd2ViX3ZpZXcpOwogCiBXRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF93ZWJfdmll
d19sb2FkX3VyaSAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAg
ICp3ZWJfdmlldywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICp1cmkpOword2Via2l0X3dlYl92aWV3X2xvYWRf
dXJpICAgICAgICAgICAgICAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAg
KndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgKnVyaSk7CiAKIFdFQktJVF9BUEkgdm9p
ZAotd2Via2l0X3dlYl92aWV3X2xvYWRfaHRtbCAgICAgICAgICAgICAgICAgICAgKFdlYktpdFdl
YlZpZXcgICAgICAgICAgICAgKndlYl92aWV3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgKmNvbnRlbnQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIg
ICAgICAgICAgICAgICAqYmFzZV91cmkpOword2Via2l0X3dlYl92aWV3X2xvYWRfaHRtbCAgICAg
ICAgICAgICAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGdjaGFyICAgICAgICAgICAgICAgKmNvbnRlbnQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgICAq
YmFzZV91cmkpOwogCiBXRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF93ZWJfdmlld19sb2FkX3BsYWlu
X3RleHQgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hh
ciAgICAgICAgICAgICAgICpwbGFpbl90ZXh0KTsKK3dlYmtpdF93ZWJfdmlld19sb2FkX3BsYWlu
X3RleHQgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJf
dmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICpwbGFpbl90ZXh0KTsKIAogV0VCS0lUX0FQSSB2
b2lkCi13ZWJraXRfd2ViX3ZpZXdfbG9hZF9yZXF1ZXN0ICAgICAgICAgICAgICAgICAoV2ViS2l0
V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV2ViS2l0VVJJUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCk7
Cit3ZWJraXRfd2ViX3ZpZXdfbG9hZF9yZXF1ZXN0ICAgICAgICAgICAgICAgICAgICAgICAoV2Vi
S2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0VVJJUmVxdWVzdCAgICAgICAgICAq
cmVxdWVzdCk7CiAKIFdFQktJVF9BUEkgdm9pZAotd2Via2l0X3dlYl92aWV3X3N0b3BfbG9hZGlu
ZyAgICAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3KTsK
K3dlYmtpdF93ZWJfdmlld19zdG9wX2xvYWRpbmcgICAgICAgICAgICAgICAgICAgICAgIChXZWJL
aXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7CiAKIFdFQktJVF9BUEkgdm9pZAotd2Vi
a2l0X3dlYl92aWV3X3JlcGxhY2VfY29udGVudCAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcg
ICAgICAgICAgICAgKndlYl92aWV3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgKmNvbnRlbnQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAg
ICAgICAgICAqY29udGVudF91cmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgICAqYmFzZV91cmkpOword2Via2l0
X3dlYl92aWV3X3JlcGxhY2VfY29udGVudCAgICAgICAgICAgICAgICAgICAgKFdlYktpdFdlYlZp
ZXcgICAgICAgICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgKmNvbnRlbnQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZ2NoYXIgICAgICAgICAgICAgICAqY29udGVudF91cmksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAg
ICAqYmFzZV91cmkpOwogCiBXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICoKLXdlYmtpdF93ZWJfdmll
d19nZXRfdGl0bGUgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAg
ICp3ZWJfdmlldyk7Cit3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlICAgICAgICAgICAgICAgICAg
ICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcpOwogCiBXRUJLSVRf
QVBJIHZvaWQKLXdlYmtpdF93ZWJfdmlld19yZWxvYWQgICAgICAgICAgICAgICAgICAgICAgIChX
ZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7Cit3ZWJraXRfd2ViX3ZpZXdfcmVs
b2FkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAg
ICAqd2ViX3ZpZXcpOwogCiBXRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF93ZWJfdmlld19yZWxvYWRf
YnlwYXNzX2NhY2hlICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmll
dyk7Cit3ZWJraXRfd2ViX3ZpZXdfcmVsb2FkX2J5cGFzc19jYWNoZSAgICAgICAgICAgICAgICAo
V2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcpOwogCiBXRUJLSVRfQVBJIGdkb3Vi
bGUKLXdlYmtpdF93ZWJfdmlld19nZXRfZXN0aW1hdGVkX2xvYWRfcHJvZ3Jlc3MgIChXZWJLaXRX
ZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7Cit3ZWJraXRfd2ViX3ZpZXdfZ2V0X2VzdGlt
YXRlZF9sb2FkX3Byb2dyZXNzICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2Vi
X3ZpZXcpOwogCiBXRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF93ZWJfdmlld19nb19iYWNrICAgICAg
ICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7Cit3
ZWJraXRfd2ViX3ZpZXdfZ29fYmFjayAgICAgICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0
V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcpOwogCiBXRUJLSVRfQVBJIGdib29sZWFuCi13
ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sgICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmll
dyAgICAgICAgICAgICAqd2ViX3ZpZXcpOword2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrICAg
ICAgICAgICAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3
KTsKIAogV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfd2ViX3ZpZXdfZ29fZm9yd2FyZCAgICAgICAg
ICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcpOword2Via2l0
X3dlYl92aWV3X2dvX2ZvcndhcmQgICAgICAgICAgICAgICAgICAgICAgICAgKFdlYktpdFdlYlZp
ZXcgICAgICAgICAgICAgKndlYl92aWV3KTsKIAogV0VCS0lUX0FQSSBnYm9vbGVhbgotd2Via2l0
X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkICAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAg
ICAgICAgICAgKndlYl92aWV3KTsKK3dlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCAgICAg
ICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7CiAK
IFdFQktJVF9BUEkgV2ViS2l0QmFja0ZvcndhcmRMaXN0ICoKLXdlYmtpdF93ZWJfdmlld19nZXRf
YmFja19mb3J3YXJkX2xpc3QgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJf
dmlldyk7Cit3ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0ICAgICAgICAgICAg
ICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcpOwogCiBXRUJLSVRfQVBJIHZv
aWQKLXdlYmtpdF93ZWJfdmlld19nb190b19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtIChXZWJLaXRX
ZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtICpsaXN0X2l0ZW0p
Oword2Via2l0X3dlYl92aWV3X2dvX3RvX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW0gICAgICAgKFdl
YktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0g
Kmxpc3RfaXRlbSk7CiBXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICoKLXdlYmtpdF93ZWJfdmlld19n
ZXRfdXJpICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3
ZWJfdmlldyk7Cit3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcpOwogCiBXRUJLSVRfQVBJ
IGNvbnN0IGdjaGFyICoKLXdlYmtpdF93ZWJfdmlld19nZXRfY3VzdG9tX2NoYXJzZXQgICAgICAg
ICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7Cit3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2N1c3RvbV9jaGFyc2V0ICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAg
ICAgICAgICAqd2ViX3ZpZXcpOwogCiBXRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF93ZWJfdmlld19z
ZXRfY3VzdG9tX2NoYXJzZXQgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3
ZWJfdmlldywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBnY2hhciAgICAgICAgICAgICAgICpjaGFyc2V0KTsKK3dlYmtpdF93ZWJfdmlld19zZXRf
Y3VzdG9tX2NoYXJzZXQgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAg
ICp3ZWJfdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICpjaGFyc2V0KTsKIAogV0VCS0lUX0FQ
SSB2b2lkCi13ZWJraXRfd2ViX3ZpZXdfc2V0X3NldHRpbmdzICAgICAgICAgICAgICAgICAoV2Vi
S2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0U2V0dGluZ3MgICAgICAgICAgICAqc2V0dGlu
Z3MpOword2Via2l0X3dlYl92aWV3X3NldF9zZXR0aW5ncyAgICAgICAgICAgICAgICAgICAgICAg
KFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFNldHRpbmdzICAgICAgICAg
ICAgKnNldHRpbmdzKTsKIAogV0VCS0lUX0FQSSBXZWJLaXRTZXR0aW5ncyAqCi13ZWJraXRfd2Vi
X3ZpZXdfZ2V0X3NldHRpbmdzICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAg
ICAgICAqd2ViX3ZpZXcpOword2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyAgICAgICAgICAg
ICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3KTsKIAogV0VC
S0lUX0FQSSBXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzICoKLXdlYmtpdF93ZWJfdmlld19nZXRfd2lu
ZG93X3Byb3BlcnRpZXMgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmll
dyk7Cit3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVzICAgICAgICAgICAgICAo
V2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcpOwogCiBXRUJLSVRfQVBJIHZvaWQK
LXdlYmtpdF93ZWJfdmlld19zZXRfem9vbV9sZXZlbCAgICAgICAgICAgICAgIChXZWJLaXRXZWJW
aWV3ICAgICAgICAgICAgICp3ZWJfdmlldywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnZG91YmxlICAgICAgICAgICAgICAgICAgICB6b29tX2xldmVsKTsK
K3dlYmtpdF93ZWJfdmlld19zZXRfem9vbV9sZXZlbCAgICAgICAgICAgICAgICAgICAgIChXZWJL
aXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZG91YmxlICAgICAgICAgICAgICAgICAgICB6
b29tX2xldmVsKTsKIFdFQktJVF9BUEkgZ2RvdWJsZQotd2Via2l0X3dlYl92aWV3X2dldF96b29t
X2xldmVsICAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3
KTsKK3dlYmtpdF93ZWJfdmlld19nZXRfem9vbV9sZXZlbCAgICAgICAgICAgICAgICAgICAgIChX
ZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7CiAKK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X3dlYl92aWV3X2Nhbl9leGVjdXRlX2VkaXRpbmdfY29tbWFuZCAgICAgICAgKFdlYktp
dFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgKmNv
bW1hbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0FzeW5jUmVhZHlDYWxsYmFjayAgICAgICAgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAg
ICAgICAgdXNlcl9kYXRhKTsKKworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X3dlYl92aWV3
X2Nhbl9leGVjdXRlX2VkaXRpbmdfY29tbWFuZF9maW5pc2ggKFdlYktpdFdlYlZpZXcgICAgICAg
ICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdBc3luY1Jlc3VsdCAgICAgICAgICAgICAgKnJlc3VsdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAg
ICAgICAgICAgICAgKiplcnJvcik7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYl92aWV3
X2V4ZWN1dGVfZWRpdGluZ19jb21tYW5kICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAg
ICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgKmNvbW1hbmQpOwogR19FTkRf
REVDTFMKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0IGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAppbmRleCBlZjQ0YjJiLi4x
YzAyMDQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2Nz
L3dlYmtpdDJndGstc2VjdGlvbnMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKQEAgLTQ5LDYgKzQ5LDEzIEBAIHdl
YmtpdF93ZWJfY29udGV4dF9nZXRfdHlwZQogV2ViS2l0V2ViVmlldwogV2ViS2l0TG9hZEV2ZW50
CiBXZWJLaXRQb2xpY3lEZWNpc2lvblR5cGUKKworPFNVQlNFQ1RJT04gRWRpdGluZyBDb21tYW5k
cz4KK1dFQktJVF9FRElUSU5HX0NPTU1BTkRfQ1VUCitXRUJLSVRfRURJVElOR19DT01NQU5EX0NP
UFkKK1dFQktJVF9FRElUSU5HX0NPTU1BTkRfUEFTVEUKKworPFNVQlNFQ1RJT04+CiB3ZWJraXRf
d2ViX3ZpZXdfbmV3CiB3ZWJraXRfd2ViX3ZpZXdfbmV3X3dpdGhfY29udGV4dAogd2Via2l0X3dl
Yl92aWV3X2dldF9jb250ZXh0CkBAIC03Niw2ICs4Myw5IEBAIHdlYmtpdF93ZWJfdmlld19nZXRf
c2V0dGluZ3MKIHdlYmtpdF93ZWJfdmlld19nZXRfd2luZG93X3Byb3BlcnRpZXMKIHdlYmtpdF93
ZWJfdmlld19zZXRfem9vbV9sZXZlbAogd2Via2l0X3dlYl92aWV3X2dldF96b29tX2xldmVsCit3
ZWJraXRfd2ViX3ZpZXdfY2FuX2V4ZWN1dGVfZWRpdGluZ19jb21tYW5kCit3ZWJraXRfd2ViX3Zp
ZXdfY2FuX2V4ZWN1dGVfZWRpdGluZ19jb21tYW5kX2ZpbmlzaAord2Via2l0X3dlYl92aWV3X2V4
ZWN1dGVfZWRpdGluZ19jb21tYW5kCiAKIDxTVUJTRUNUSU9OIFN0YW5kYXJkPgogV2ViS2l0V2Vi
Vmlld0NsYXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL0dOVW1ha2VmaWxlLmFtCmluZGV4IDE3NWExNDkuLjcyNDFiOTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCkBA
IC01LDcgKzUsOCBAQCBURVNUX1BST0dTICs9IFwKIAlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMv
VGVzdFdlYktpdFNldHRpbmdzIFwKIAlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdEJhY2tG
b3J3YXJkTGlzdCBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3REb3dubG9hZHMgXAot
CVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0V2ViS2l0UG9saWN5Q2xpZW50CisJUHJvZ3Jh
bXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQgXAorCVByb2dyYW1zL1dl
YktpdDJBUElUZXN0cy9UZXN0V2ViVmlld0VkaXRvcgogCiBub2luc3RfUFJPR1JBTVMgKz0gJChU
RVNUX1BST0dTKQogCkBAIC0xMTEsMyArMTEyLDkgQEAgUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3Rz
X1Rlc3REb3dubG9hZHNfU09VUkNFUyA9IFwKIFByb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0
RG93bmxvYWRzX0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQogUHJvZ3JhbXNf
V2ViS2l0MkFQSVRlc3RzX1Rlc3REb3dubG9hZHNfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRh
ZGQpCiBQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdERvd25sb2Fkc19MREZMQUdTID0gJCh3
ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2Vi
Vmlld0VkaXRvcl9TT1VSQ0VTID0gXAorICAgICAgICBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9UZXN0V2ViVmlld0VkaXRvci5jcHAKK1Byb2dyYW1zX1dlYktpdDJBUElU
ZXN0c19UZXN0V2ViVmlld0VkaXRvcl9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFn
cykKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViVmlld0VkaXRvcl9MREFERCA9ICQo
d2Via2l0Ml90ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViVmll
d0VkaXRvcl9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViVmlld0VkaXRvci5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViVmlld0Vk
aXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM0MTUzOAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rl
c3RXZWJWaWV3RWRpdG9yLmNwcApAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlZp
ZXdUZXN0LmgiCisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCitjbGFzcyBFZGl0
b3JUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNU
X0ZJWFRVUkUoRWRpdG9yVGVzdCk7CisKKyAgICBFZGl0b3JUZXN0KCkKKyAgICAgICAgOiBtX2Ns
aXBib2FyZChndGtfY2xpcGJvYXJkX2dldChHREtfU0VMRUNUSU9OX0NMSVBCT0FSRCkpCisgICAg
ICAgICwgbV9jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoZmFsc2UpCisgICAgICAgICwgbV90cmll
c0NvdW50KDApCisgICAgeworICAgICAgICBndGtfY2xpcGJvYXJkX2NsZWFyKG1fY2xpcGJvYXJk
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBjYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmRSZWFk
eUNhbGxiYWNrKEdPYmplY3QqLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgRWRpdG9yVGVzdCogdGVz
dCkKKyAgICB7CisgICAgICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgdGVzdC0+
bV9jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQgPSB3ZWJraXRfd2ViX3ZpZXdfY2FuX2V4ZWN1dGVf
ZWRpdGluZ19jb21tYW5kX2ZpbmlzaCh0ZXN0LT5tX3dlYlZpZXcsIHJlc3VsdCwgJmVycm9yLm91
dFB0cigpKTsKKyAgICAgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICAgICAgZ19tYWlu
X2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBib29sIGNhbkV4ZWN1
dGVFZGl0aW5nQ29tbWFuZChjb25zdCBjaGFyKiBjb21tYW5kKQorICAgIHsKKyAgICAgICAgbV9j
YW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQgPSBmYWxzZTsKKyAgICAgICAgd2Via2l0X3dlYl92aWV3
X2Nhbl9leGVjdXRlX2VkaXRpbmdfY29tbWFuZChtX3dlYlZpZXcsIGNvbW1hbmQsIHJlaW50ZXJw
cmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4oY2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kUmVh
ZHlDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7
CisgICAgICAgIHJldHVybiBtX2NhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZDsKKyAgICB9CisKKyAg
ICBzdGF0aWMgZ2Jvb2xlYW4gd2FpdEZvckNsaXBib2FyZFRleHQoRWRpdG9yVGVzdCogdGVzdCkK
KyAgICB7CisgICAgICAgIHRlc3QtPm1fdHJpZXNDb3VudCsrOworICAgICAgICBpZiAoZ3RrX2Ns
aXBib2FyZF93YWl0X2lzX3RleHRfYXZhaWxhYmxlKHRlc3QtPm1fY2xpcGJvYXJkKSB8fCB0ZXN0
LT5tX3RyaWVzQ291bnQgPiAyKSB7CisgICAgICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3Qt
Pm1fbWFpbkxvb3ApOworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgdm9pZCBjb3B5Q2xpcGJvYXJkKCkKKyAg
ICB7CisgICAgICAgIHdlYmtpdF93ZWJfdmlld19leGVjdXRlX2VkaXRpbmdfY29tbWFuZChtX3dl
YlZpZXcsIFdFQktJVF9FRElUSU5HX0NPTU1BTkRfQ09QWSk7CisgICAgICAgIC8vIFRoZXJlJ3Mg
bm8gd2F5IHRvIGtub3cgd2hlbiB0aGUgc2VsZWN0aW9uIGhhcyBiZWVuIGNvcGllZCB0bworICAg
ICAgICAvLyB0aGUgY2xpcGJvYXJkLCBzbyB1c2UgYSB0aW1lb3V0IHNvdXJjZSB0byBxdWVyeSB0
aGUgY2xpcGJvYXJkLgorICAgICAgICBtX3RyaWVzQ291bnQgPSAwOworICAgICAgICBnX3RpbWVv
dXRfYWRkX3NlY29uZHMoMSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4od2FpdEZvckNs
aXBib2FyZFRleHQpLCB0aGlzKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3Ap
OworICAgIH0KKworICAgIEd0a0NsaXBib2FyZCogbV9jbGlwYm9hcmQ7CisgICAgYm9vbCBtX2Nh
bkV4ZWN1dGVFZGl0aW5nQ29tbWFuZDsKKyAgICBzaXplX3QgbV90cmllc0NvdW50OworfTsKKwor
c3RhdGljIHZvaWQgd2ViVmlld0xvYWRDaGFuZ2VkKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRMb2Fk
RXZlbnQgbG9hZEV2ZW50LCBXZWJWaWV3VGVzdCogdGVzdCkKK3sKKyAgICBpZiAobG9hZEV2ZW50
ICE9IFdFQktJVF9MT0FEX0ZJTklTSEVEKQorICAgICAgICByZXR1cm47CisgICAgZ19tYWluX2xv
b3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdF
ZGl0b3JDdXRDb3B5UGFzdGVOb25FZGl0YWJsZShFZGl0b3JUZXN0KiB0ZXN0LCBnY29uc3Rwb2lu
dGVyKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzZWxlY3RlZFNwYW5IVE1MID0gIjxodG1s
Pjxib2R5IGNvbnRlbnRFZGl0YWJsZT1cImZhbHNlXCI+IgorICAgICAgICAiPHNwYW4gaWQ9XCJt
YWluc3BhblwiPkFsbCB3b3JrIGFuZCBubyBwbGF5IDxzcGFuIGlkPVwic3Vic3BhblwiPm1ha2Ug
SmFjayBhIGR1bGw8L3NwYW4+IGJveS48L3NwYW4+IgorICAgICAgICAiPHNjcmlwdD5kb2N1bWVu
dC5nZXRTZWxlY3Rpb24oKS5jb2xsYXBzZSgpO1xuIgorICAgICAgICAiZG9jdW1lbnQuZ2V0U2Vs
ZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1YnNw
YW4nKSk7XG4iCisgICAgICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7CisKKyAgICAvLyBO
b3RoaW5nIGxvYWRlZCB5ZXQuCisgICAgZ19hc3NlcnQoIXRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5n
Q29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX0NVVCkpOworICAgIGdfYXNzZXJ0KCF0ZXN0
LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9DT1BZKSk7
CisgICAgZ19hc3NlcnQoIXRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJ
VElOR19DT01NQU5EX1BBU1RFKSk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHRlc3QtPm1fd2Vi
VmlldywgImxvYWQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sod2ViVmlld0xvYWRDaGFuZ2VkKSwgdGVz
dCk7CisgICAgdGVzdC0+bG9hZEh0bWwoc2VsZWN0ZWRTcGFuSFRNTCwgMCk7CisgICAgZ19tYWlu
X2xvb3BfcnVuKHRlc3QtPm1fbWFpbkxvb3ApOworCisgICAgZ19hc3NlcnQodGVzdC0+Y2FuRXhl
Y3V0ZUVkaXRpbmdDb21tYW5kKFdFQktJVF9FRElUSU5HX0NPTU1BTkRfQ09QWSkpOworICAgIC8v
IEl0J3Mgbm90IHBvc3NpYmxlIHRvIGN1dCBhbmQgcGFzdGUgd2hlbiBjb250ZW50IGlzIG5vdCBl
ZGl0YWJsZQorICAgIC8vIGV2ZW4gaWYgdGhlcmUncyBhIHNlbGVjdGlvbi4KKyAgICBnX2Fzc2Vy
dCghdGVzdC0+Y2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kKFdFQktJVF9FRElUSU5HX0NPTU1BTkRf
Q1VUKSk7CisgICAgZ19hc3NlcnQoIXRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJL
SVRfRURJVElOR19DT01NQU5EX1BBU1RFKSk7CisKKyAgICB0ZXN0LT5jb3B5Q2xpcGJvYXJkKCk7
CisgICAgR093blB0cjxjaGFyPiBjbGlwYm9hcmRUZXh0KGd0a19jbGlwYm9hcmRfd2FpdF9mb3Jf
dGV4dCh0ZXN0LT5tX2NsaXBib2FyZCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cihjbGlwYm9hcmRU
ZXh0LmdldCgpLCA9PSwgIm1ha2UgSmFjayBhIGR1bGwiKTsKK30KKworc3RhdGljIHZvaWQgdGVz
dFdlYlZpZXdFZGl0b3JDdXRDb3B5UGFzdGVFZGl0YWJsZShFZGl0b3JUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzZWxlY3RlZFNwYW5IVE1MID0g
IjxodG1sPjxib2R5IGNvbnRlbnRFZGl0YWJsZT1cInRydWVcIj4iCisgICAgICAgICI8c3BhbiBp
ZD1cIm1haW5zcGFuXCI+QWxsIHdvcmsgYW5kIG5vIHBsYXkgPHNwYW4+bWFrZSBKYWNrIGEgZHVs
bDwvc3Bhbj4gYm95Ljwvc3Bhbj4iCisgICAgICAgICI8c2NyaXB0PmRvY3VtZW50LmdldFNlbGVj
dGlvbigpLmNvbGxhcHNlKCk7XG4iCisgICAgICAgICJkb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5z
ZWxlY3RBbGxDaGlsZHJlbihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbnNwYW4nKSk7XG4i
CisgICAgICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7CisKKyAgICAvLyBOb3RoaW5nIGxv
YWRlZCB5ZXQuCisgICAgZ19hc3NlcnQoIXRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChX
RUJLSVRfRURJVElOR19DT01NQU5EX0NVVCkpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5jYW5FeGVj
dXRlRWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9DT1BZKSk7CisgICAgZ19h
c3NlcnQoIXRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19DT01N
QU5EX1BBU1RFKSk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHRlc3QtPm1fd2ViVmlldywgImxv
YWQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sod2ViVmlld0xvYWRDaGFuZ2VkKSwgdGVzdCk7CisgICAg
dGVzdC0+bG9hZEh0bWwoc2VsZWN0ZWRTcGFuSFRNTCwgMCk7CisgICAgZ19tYWluX2xvb3BfcnVu
KHRlc3QtPm1fbWFpbkxvb3ApOworCisgICAgLy8gVGhlcmUncyBhIHNlbGVjdGlvbi4KKyAgICBn
X2Fzc2VydCh0ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09N
TUFORF9DVVQpKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQo
V0VCS0lUX0VESVRJTkdfQ09NTUFORF9DT1BZKSk7CisgICAgZ19hc3NlcnQodGVzdC0+Y2FuRXhl
Y3V0ZUVkaXRpbmdDb21tYW5kKFdFQktJVF9FRElUSU5HX0NPTU1BTkRfUEFTVEUpKTsKKworICAg
IHRlc3QtPmNvcHlDbGlwYm9hcmQoKTsKKyAgICBHT3duUHRyPGNoYXI+IGNsaXBib2FyZFRleHQo
Z3RrX2NsaXBib2FyZF93YWl0X2Zvcl90ZXh0KHRlc3QtPm1fY2xpcGJvYXJkKSk7CisgICAgZ19h
c3NlcnRfY21wc3RyKGNsaXBib2FyZFRleHQuZ2V0KCksID09LCAiQWxsIHdvcmsgYW5kIG5vIHBs
YXkgbWFrZSBKYWNrIGEgZHVsbCBib3kuIik7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAg
ICBFZGl0b3JUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiY3V0LWNvcHktcGFzdGUvbm9uLWVk
aXRhYmxlIiwgdGVzdFdlYlZpZXdFZGl0b3JDdXRDb3B5UGFzdGVOb25FZGl0YWJsZSk7CisgICAg
RWRpdG9yVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImN1dC1jb3B5LXBhc3RlL2VkaXRhYmxl
IiwgdGVzdFdlYlZpZXdFZGl0b3JDdXRDb3B5UGFzdGVFZGl0YWJsZSk7Cit9CisKK3ZvaWQgYWZ0
ZXJBbGwoKQoreworfQo=
</data>
<flag name="review"
          id="126533"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125789</attachid>
            <date>2012-02-07 02:03:38 -0800</date>
            <delta_ts>2012-02-07 06:44:32 -0800</delta_ts>
            <desc>Updated patch according to review comments</desc>
            <filename>wk2-editing-commands3.diff</filename>
            <type>text/plain</type>
            <size>32387</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA0MTBkMGE2Li4zMTZjMmQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEg
QEAKKzIwMTItMDItMDcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIEFkZCBjdXQsIGNvcHkgYW5kIHBhc3RlIG1ldGhvZHMgdG8gV2Vi
S2l0MiBHVEsrIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzY5OTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgV2ViS2l0RWRpdGluZ0NvbW1hbmRzLmguCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RWRpdGluZ0NvbW1hbmRzLmg6IEFkZGVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwOgorICAgICAgICAo
ZGlkVmFsaWRhdGVDb21tYW5kKTogQ2FsbGJhY2sgY2FsbGVkIGJ5IHRoZSBDIEFQSSB3aGVuIGFu
IGVkaXRvcgorICAgICAgICBjb21tYW5kIGhhcyBiZWVuIHZhbGlkYXRlZC4KKyAgICAgICAgKHdl
YmtpdF93ZWJfdmlld19jYW5fZXhlY3V0ZV9lZGl0aW5nX2NvbW1hbmQpOiBBc3luY2hyb25vdXNs
eQorICAgICAgICB2YWxpZGF0ZSB0aGUgZ2l2ZW4gZWRpdGluZyBjb21tYW5kLgorICAgICAgICAo
d2Via2l0X3dlYl92aWV3X2Nhbl9leGVjdXRlX2VkaXRpbmdfY29tbWFuZF9maW5pc2gpOiBGaW5p
c2ggYXN5bmMKKyAgICAgICAgb3BlcmF0aW9uIHN0YXJ0ZWQgYnkgd2Via2l0X3dlYl92aWV3X2Nh
bl9leGVjdXRlX2VkaXRpbmdfY29tbWFuZCgpLgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2V4
ZWN1dGVfZWRpdGluZ19jb21tYW5kKTogRXhlY3V0ZSB0aGUgZ2l2ZW4KKyAgICAgICAgY29tbWFu
ZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3Lmg6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dDogQWRkIG5l
dyBzeW1ib2xzLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxl
LmFtOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0xvYWRUcmFja2luZ1Rlc3Qu
Y3BwOgorICAgICAgICAoTG9hZFRyYWNraW5nVGVzdDo6cHJvdmlzaW9uYWxMb2FkRmFpbGVkKTog
RG8gbm90IGZpbmlzaCB0aGUgbWFpbgorICAgICAgICBsb29wIG9uIGxvYWQgZmFpbHVyZSwgbm93
IGZpbmlzaGVkIGlzIGFsd2F5cyBjYWxsZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvVGVzdEJhY2tGb3J3YXJkTGlzdC5jcHA6IFVzZSBXZWJWaWV3VGVzdAorICAgICAgICBp
bnN0ZWFkIG9mIExvYWRUcmFja2luZ1Rlc3QuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvVGVzdFdlYlZpZXdFZGl0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKHRlc3RXZWJWaWV3
RWRpdG9yQ3V0Q29weVBhc3RlTm9uRWRpdGFibGUpOgorICAgICAgICAodGVzdFdlYlZpZXdFZGl0
b3JDdXRDb3B5UGFzdGVFZGl0YWJsZSk6CisgICAgICAgIChiZWZvcmVBbGwpOgorICAgICAgICAo
YWZ0ZXJBbGwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0
LmNwcDoKKyAgICAgICAgKGxvYWRDaGFuZ2VkKToKKyAgICAgICAgKFdlYlZpZXdUZXN0Ojp3YWl0
VW50aWxMb2FkRmluaXNoZWQpOiBSdW4gYSBtYWluIGxvb3AgdW50aWwgbG9hZAorICAgICAgICBm
aW5pc2hlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5o
OiBBZGQgd2FpdFVudGlsTG9hZEZpbmlzaGVkKCkuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvd2Via2l0Mi5oOiBJbmNsdWRlIFdlYktpdEVkaXRpbmdDb21tYW5kcy5oLgorCiAyMDEyLTAy
LTA2ICBTaGlueWEgS2F3YW5ha2EgIDxzaGlueWFrQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmVt
b3ZlIEVsZW1lbnQ6OmVuc3VyZVNoYWRvd1Jvb3QgZXhwb3J0LgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQpp
bmRleCBmOGVmMjczLi5lOWRiNmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtl
ZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQpAQCAtODYsNiArODYs
NyBAQCBsaWJ3ZWJraXQyZ3RraW5jbHVkZV9IRUFERVJTID0gXAogCSQoV2ViS2l0MikvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbS5oIFwKIAkkKFdlYktpdDIpL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERlZmluZXMuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXREb3dubG9hZC5oIFwKKwkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEVkaXRpbmdDb21tYW5kcy5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEVycm9yLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2
aWdhdGlvblBvbGljeURlY2lzaW9uLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0UG9saWN5RGVjaXNpb24uaCBcCkBAIC01MzQsNiArNTM1LDcgQEAgbGlid2Via2l0Mmd0
a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJT
SU9OQF9sYV9TT1UKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3du
bG9hZFByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
RG93bmxvYWRDbGllbnQuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXREb3dubG9hZENsaWVudC5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRFZGl0aW5nQ29tbWFuZHMuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0RXJyb3IuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0RXJyb3IuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRMb2FkZXJDbGllbnQuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRFZGl0aW5nQ29tbWFuZHMuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdEVkaXRpbmdDb21tYW5kcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmY4NWJmMzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFZGl0aW5nQ29tbWFuZHMuaApAQCAtMCwwICsxLDY4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dF
QktJVDJfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoV0VCS0lUMl9DT01QSUxBVElPTikKKyNlcnJv
ciAiT25seSA8d2Via2l0Mi93ZWJraXQyLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisj
ZW5kaWYKKworI2lmbmRlZiBXZWJLaXRFZGl0aW5nQ29tbWFuZHNfaAorI2RlZmluZSBXZWJLaXRF
ZGl0aW5nQ29tbWFuZHNfaAorCitHX0JFR0lOX0RFQ0xTCisKKy8qKgorICogV0VCS0lUX0VESVRJ
TkdfQ09NTUFORF9DVVQ6CisgKgorICogVGhlIGN1dCBjbGlwYm9hcmQgY29tbWFuZC4gQ29waWVz
IHRoZSBjdXJyZW50IHNlbGVjdGlvbiBpbnNpZGUKKyAqIGEgI1dlYktpdFdlYlZpZXcgdG8gdGhl
IGNsaXBib2FyZCBhbmQgZGVsZXRlcyB0aGUgc2VsZWN0ZWQgY29udGVudC4KKyAqIFlvdSBjYW4g
Y2hlY2sgd2hldGhlciBpdCdzIHBvc3NpYmxlIHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmQgd2l0aAor
ICogd2Via2l0X3dlYl92aWV3X2Nhbl9leGVjdXRlX2VkaXRpbmdfY29tbWFuZCgpLiBJbiBnZW5l
cmFsIGl0J3MKKyAqIHBvc3NpYmxlIHRvIGN1dCB0byB0aGUgY2xpcGJvYXJkIHdoZW4gdGhlICNX
ZWJLaXRXZWJWaWV3IGNvbnRlbnQgaXMKKyAqIGVkaXRhYmxlIGFuZCB0aGVyZSBpcyBhbiBhY3Rp
dmUgc2VsZWN0aW9uLgorICovCisjZGVmaW5lIFdFQktJVF9FRElUSU5HX0NPTU1BTkRfQ1VUICJD
dXQiCisKKy8qKgorICogV0VCS0lUX0VESVRJTkdfQ09NTUFORF9DT1BZOgorICoKKyAqIFRoZSBj
b3B5IGNsaXBib2FyZCBjb21tYW5kLiBDb3BpZXMgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGluc2lk
ZQorICogYSAjV2ViS2l0V2ViVmlldyB0byB0aGUgY2xpcGJvYXJkLgorICogWW91IGNhbiBjaGVj
ayB3aGV0aGVyIGl0J3MgcG9zc2libGUgdG8gZXhlY3V0ZSB0aGUgY29tbWFuZCB3aXRoCisgKiB3
ZWJraXRfd2ViX3ZpZXdfY2FuX2V4ZWN1dGVfZWRpdGluZ19jb21tYW5kKCkuIEluIGdlbmVyYWwg
aXQncworICogcG9zc2libGUgdG8gY29weSB0byB0aGUgY2xpcGJvYXJkIHdoZW4gdGhlcmUgaXMg
YW4gYWN0aXZlIHNlbGVjdGlvbgorICogaW5zaWRlIHRoZSAjV2ViS2l0V2ViVmlldy4KKyAqLwor
I2RlZmluZSBXRUJLSVRfRURJVElOR19DT01NQU5EX0NPUFkgIkNvcHkiCisKKy8qKgorICogV0VC
S0lUX0VESVRJTkdfQ09NTUFORF9QQVNURToKKyAqCisgKiBUaGUgcGFzdGUgY2xpcGJvYXJkIGNv
bW1hbmQuIFBhc3RlcyB0aGUgY29udGVudHMgb2YgdGhlIGNsaXBib2FyZCB0bworICogYSAjV2Vi
S2l0V2ViVmlldy4KKyAqIFlvdSBjYW4gY2hlY2sgd2hldGhlciBpdCdzIHBvc3NpYmxlIHRvIGV4
ZWN1dGUgdGhlIGNvbW1hbmQgd2l0aAorICogd2Via2l0X3dlYl92aWV3X2Nhbl9leGVjdXRlX2Vk
aXRpbmdfY29tbWFuZCgpLiBJbiBnZW5lcmFsIGl0J3MgcG9zc2libGUKKyAqIHRvIHBhc3RlIGZy
b20gdGhlIGNsaXBib2FyZCB3aGVuIHRoZSAjV2ViS2l0V2ViVmlldyBjb250ZW50IGlzIGVkaXRh
YmxlCisgKiBhbmQgY2xpcGJvYXJkIGlzIG5vdCBlbXB0eS4KKyAqLworI2RlZmluZSBXRUJLSVRf
RURJVElOR19DT01NQU5EX1BBU1RFICJQYXN0ZSIKKworCitHX0VORF9ERUNMUworCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZp
ZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5j
cHAKaW5kZXggMDA0MTIyNy4uNmE4Yjk2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKQEAgLTEyNjcsMyArMTI2Nyw3NyBAQCBn
ZG91YmxlIHdlYmtpdF93ZWJfdmlld19nZXRfem9vbV9sZXZlbChXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3KQogICAgIFdLUGFnZVJlZiB3a1BhZ2UgPSB0b0FQSSh3ZWJraXRXZWJWaWV3QmFzZUdldFBh
Z2UoV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2ViVmlldykpKTsKICAgICByZXR1cm4gV0tQYWdlR2V0
UGFnZVpvb21GYWN0b3Iod2tQYWdlKTsKIH0KKworCitzdGF0aWMgdm9pZCBkaWRWYWxpZGF0ZUNv
bW1hbmQoV0tTdHJpbmdSZWYgY29tbWFuZCwgYm9vbCBpc0VuYWJsZWQsIGludDMyX3Qgc3RhdGUs
IFdLRXJyb3JSZWYsIHZvaWQqIGNvbnRleHQpCit7CisgICAgR1JlZlB0cjxHU2ltcGxlQXN5bmNS
ZXN1bHQ+IHJlc3VsdCA9IGFkb3B0R1JlZihHX1NJTVBMRV9BU1lOQ19SRVNVTFQoY29udGV4dCkp
OworICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dib29sZWFuKHJlc3VsdC5n
ZXQoKSwgaXNFbmFibGVkKTsKKyAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGUocmVz
dWx0LmdldCgpKTsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfY2FuX2V4ZWN1dGVfZWRp
dGluZ19jb21tYW5kOgorICogQHdlYl92aWV3OiBhICNXZWJLaXRXZWJWaWV3CisgKiBAY29tbWFu
ZDogdGhlIGNvbW1hbmQgdG8gY2hlY2sKKyAqIEBjYWxsYmFjazogKHNjb3BlIGFzeW5jKTogYSAj
R0FzeW5jUmVhZHlDYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIHJlcXVlc3QgaXMgc2F0aXNmaWVk
CisgKiBAdXNlcl9kYXRhOiAoY2xvc3VyZSk6IHRoZSBkYXRhIHRvIHBhc3MgdG8gY2FsbGJhY2sg
ZnVuY3Rpb24KKyAqCisgKiBBc3luY2hyb25vdXNseSBleGVjdXRlIHRoZSBnaXZlbiBlZGl0aW5n
IGNvbW1hbmQuCisgKgorICogV2hlbiB0aGUgb3BlcmF0aW9uIGlzIGZpbmlzaGVkLCBAY2FsbGJh
Y2sgd2lsbCBiZSBjYWxsZWQuIFlvdSBjYW4gdGhlbiBjYWxsCisgKiB3ZWJraXRfd2ViX3ZpZXdf
Y2FuX2V4ZWN1dGVfZWRpdGluZ19jb21tYW5kX2ZpbmlzaCgpIHRvIGdldCB0aGUgcmVzdWx0IG9m
IHRoZSBvcGVyYXRpb24uCisgKi8KK3ZvaWQgd2Via2l0X3dlYl92aWV3X2Nhbl9leGVjdXRlX2Vk
aXRpbmdfY29tbWFuZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBjaGFyKiBjb21tYW5k
LCBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSk7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChjb21tYW5kKTsKKworICAgIEdTaW1wbGVBc3luY1Jlc3VsdCogcmVzdWx0
ID0gZ19zaW1wbGVfYXN5bmNfcmVzdWx0X25ldyhHX09CSkVDVCh3ZWJWaWV3KSwgY2FsbGJhY2ss
IHVzZXJEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGdwb2ludGVyPih3ZWJraXRfd2ViX3ZpZXdf
Y2FuX2V4ZWN1dGVfZWRpdGluZ19jb21tYW5kKSk7CisgICAgV2ViUGFnZVByb3h5KiBwYWdlID0g
d2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKFdFQktJVF9XRUJfVklFV19CQVNFKHdlYlZpZXcpKTsK
KyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tDb21tYW5kKEFkb3B0V0ssIFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKGNvbW1hbmQpKTsKKyAgICBXS1BhZ2VWYWxpZGF0ZUNvbW1h
bmQodG9BUEkocGFnZSksIHdrQ29tbWFuZC5nZXQoKSwgcmVzdWx0LCBkaWRWYWxpZGF0ZUNvbW1h
bmQpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfdmlld19jYW5fZXhlY3V0ZV9lZGl0aW5nX2Nv
bW1hbmRfZmluaXNoOgorICogQHdlYl92aWV3OiBhICNXZWJLaXRXZWJWaWV3CisgKiBAcmVzdWx0
OiBhICNHQXN5bmNSZXN1bHQKKyAqIEBlcnJvcjogcmV0dXJuIGxvY2F0aW9uIGZvciBlcnJvciBv
ciAlTlVMTCB0byBpZ25vcmUKKyAqCisgKiBGaW5pc2ggYW4gYXN5bmNocm9ub3VzIG9wZXJhdGlv
biBzdGFydGVkIHdpdGggd2Via2l0X3dlYl92aWV3X2Nhbl9leGVjdXRlX2VkaXRpbmdfY29tbWFu
ZCgpLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIGEgc2VsZWN0aW9uIGNhbiBiZSBjdXQgb3Ig
JUZBTFNFIG90aGVyd2lzZQorICovCitnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfY2FuX2V4ZWN1
dGVfZWRpdGluZ19jb21tYW5kX2ZpbmlzaChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHQXN5bmNS
ZXN1bHQqIHJlc3VsdCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCBGQUxTRSk7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoR19JU19BU1lOQ19SRVNVTFQocmVzdWx0KSwgRkFMU0UpOworCisgICAgR1NpbXBs
ZUFzeW5jUmVzdWx0KiBzaW1wbGUgPSBHX1NJTVBMRV9BU1lOQ19SRVNVTFQocmVzdWx0KTsKKyAg
ICBnX3dhcm5faWZfZmFpbChnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X3NvdXJjZV90YWcoc2lt
cGxlKSA9PSB3ZWJraXRfd2ViX3ZpZXdfY2FuX2V4ZWN1dGVfZWRpdGluZ19jb21tYW5kKTsKKwor
ICAgIGlmIChnX3NpbXBsZV9hc3luY19yZXN1bHRfcHJvcGFnYXRlX2Vycm9yKHNpbXBsZSwgZXJy
b3IpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgcmV0dXJuIGdfc2ltcGxlX2FzeW5jX3Jl
c3VsdF9nZXRfb3BfcmVzX2dib29sZWFuKHNpbXBsZSk7Cit9CisKKy8qKgorICogd2Via2l0X3dl
Yl92aWV3X2V4ZWN1dGVfZWRpdGluZ19jb21tYW5kOgorICogQHdlYl92aWV3OiBhICNXZWJLaXRX
ZWJWaWV3CisgKiBAY29tbWFuZDogdGhlIGNvbW1hbmQgdG8gZXhlY3V0ZQorICoKKyAqIFJlcXVl
c3QgdG8gZXhlY3V0ZSB0aGUgZ2l2ZW4gQGNvbW1hbmQgZm9yIEB3ZWJfdmlldy4gWW91IGNhbiB1
c2UKKyAqIHdlYmtpdF93ZWJfdmlld19jYW5fZXhlY3V0ZV9lZGl0aW5nX2NvbW1hbmQoKSB0byBj
aGVjayB3aGV0aGVyCisgKiBpdCdzIHBvc3NpYmxlIHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmQuCisg
Ki8KK3ZvaWQgd2Via2l0X3dlYl92aWV3X2V4ZWN1dGVfZWRpdGluZ19jb21tYW5kKFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcsIGNvbnN0IGNoYXIqIGNvbW1hbmQpCit7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldykpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
Y29tbWFuZCk7CisKKyAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJraXRXZWJWaWV3QmFzZUdl
dFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2ViVmlldykpOworICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiB3a0NvbW1hbmQoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoY29tbWFuZCkpOworICAgIFdLUGFnZUV4ZWN1dGVDb21tYW5kKHRvQVBJKHBhZ2UpLCB3a0Nv
bW1hbmQuZ2V0KCkpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViVmlldy5oCmluZGV4IDY5N2ZjZGMuLmQ0NzY4ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKQEAgLTM5LDYgKzM5LDE3
IEBACiAKIEdfQkVHSU5fREVDTFMKIAorI2RlZmluZSBXRUJLSVRfVFlQRV9XRUJfVklFVyAgICAg
ICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9W
SUVXKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdF
QktJVF9UWVBFX1dFQl9WSUVXLCBXZWJLaXRXZWJWaWV3KSkKKyNkZWZpbmUgV0VCS0lUX0lTX1dF
Ql9WSUVXKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdF
QktJVF9UWVBFX1dFQl9WSUVXKSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9WSUVXX0NMQVNTKGtsYXNz
KSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX1dFQl9W
SUVXLCBXZWJLaXRXZWJWaWV3Q2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfV0VCX1ZJRVdfQ0xB
U1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVf
V0VCX1ZJRVcpKQorI2RlZmluZSBXRUJLSVRfV0VCX1ZJRVdfR0VUX0NMQVNTKG9iaikgIChHX1RZ
UEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfV0VCX1ZJRVcsIFdlYktp
dFdlYlZpZXdDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3IFdlYktpdFdl
YlZpZXc7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmlld0NsYXNzIFdlYktpdFdlYlZpZXdD
bGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3UHJpdmF0ZSBXZWJLaXRXZWJWaWV3
UHJpdmF0ZTsKKwogLyoqCiAgKiBXZWJLaXRQb2xpY3lEZWNpc2lvblR5cGU6CiAgKiBAV0VCS0lU
X1BPTElDWV9ERUNJU0lPTl9UWVBFX05BVklHQVRJT05fQUNUSU9OOiBUaGlzIHR5cGUgb2YgcG9s
aWN5IGRlY2lzaW9uCkBAIC03MywxNyArODQsNiBAQCB0eXBlZGVmIGVudW0gewogICAgIFdFQktJ
VF9QT0xJQ1lfREVDSVNJT05fVFlQRV9SRVNQT05TRSwKIH0gV2ViS2l0UG9saWN5RGVjaXNpb25U
eXBlOwogCi0jZGVmaW5lIFdFQktJVF9UWVBFX1dFQl9WSUVXICAgICAgICAgICAgKHdlYmtpdF93
ZWJfdmlld19nZXRfdHlwZSgpKQotI2RlZmluZSBXRUJLSVRfV0VCX1ZJRVcob2JqKSAgICAgICAg
ICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfV0VCX1ZJ
RVcsIFdlYktpdFdlYlZpZXcpKQotI2RlZmluZSBXRUJLSVRfV0VCX1ZJRVdfQ0xBU1Moa2xhc3Mp
ICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfV0VCX1ZJ
RVcsIFdlYktpdFdlYlZpZXdDbGFzcykpCi0jZGVmaW5lIFdFQktJVF9JU19XRUJfVklFVyhvYmop
ICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9X
RUJfVklFVykpCi0jZGVmaW5lIFdFQktJVF9JU19XRUJfVklFV19DTEFTUyhrbGFzcykgKEdfVFlQ
RV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9XRUJfVklFVykpCi0jZGVm
aW5lIFdFQktJVF9XRUJfVklFV19HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRf
Q0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9XRUJfVklFVywgV2ViS2l0V2ViVmlld0NsYXNzKSkK
LQotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXcgV2ViS2l0V2ViVmlldzsKLXR5cGVkZWYg
c3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3MgV2ViS2l0V2ViVmlld0NsYXNzOwotdHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdFdlYlZpZXdQcml2YXRlIFdlYktpdFdlYlZpZXdQcml2YXRlOwotCiAvKioK
ICAqIFdlYktpdExvYWRFdmVudAogICogQFdFQktJVF9MT0FEX1NUQVJURUQ6IEEgbmV3IGxvYWQg
cmVxdWVzdCBoYXMgYmVlbiBtYWRlLgpAQCAtMTUyLDk5ICsxNTIsMTEzIEBAIHN0cnVjdCBfV2Vi
S2l0V2ViVmlld0NsYXNzIHsKIH07CiAKIFdFQktJVF9BUEkgR1R5cGUKLXdlYmtpdF93ZWJfdmll
d19nZXRfdHlwZSAgICAgICAgICAgICAgICAgICAgICh2b2lkKTsKK3dlYmtpdF93ZWJfdmlld19n
ZXRfdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKTsKIAogV0VCS0lUX0FQSSBH
dGtXaWRnZXQgKgotd2Via2l0X3dlYl92aWV3X25ldyAgICAgICAgICAgICAgICAgICAgICAgICAg
KHZvaWQpOword2Via2l0X3dlYl92aWV3X25ldyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKHZvaWQpOwogCiBXRUJLSVRfQVBJIEd0a1dpZGdldCAqCi13ZWJraXRfd2ViX3ZpZXdfbmV3
X3dpdGhfY29udGV4dCAgICAgICAgICAgICAoV2ViS2l0V2ViQ29udGV4dCAgICAgICAgICAqY29u
dGV4dCk7Cit3ZWJraXRfd2ViX3ZpZXdfbmV3X3dpdGhfY29udGV4dCAgICAgICAgICAgICAgICAg
ICAoV2ViS2l0V2ViQ29udGV4dCAgICAgICAgICAqY29udGV4dCk7CiAKIFdFQktJVF9BUEkgV2Vi
S2l0V2ViQ29udGV4dCAqCi13ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQgICAgICAgICAgICAg
ICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcpOword2Via2l0X3dlYl92
aWV3X2dldF9jb250ZXh0ICAgICAgICAgICAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAg
ICAgICAgICAgKndlYl92aWV3KTsKIAogV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfd2ViX3ZpZXdf
bG9hZF91cmkgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAq
d2ViX3ZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgZ2NoYXIgICAgICAgICAgICAgICAqdXJpKTsKK3dlYmtpdF93ZWJfdmlld19sb2FkX3Vy
aSAgICAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3
ZWJfdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICp1cmkpOwogCiBXRUJLSVRfQVBJIHZvaWQK
LXdlYmtpdF93ZWJfdmlld19sb2FkX2h0bWwgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJW
aWV3ICAgICAgICAgICAgICp3ZWJfdmlldywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICpjb250ZW50LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAg
ICAgICAgICAgICAgKmJhc2VfdXJpKTsKK3dlYmtpdF93ZWJfdmlld19sb2FkX2h0bWwgICAgICAg
ICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBnY2hhciAgICAgICAgICAgICAgICpjb250ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgKmJh
c2VfdXJpKTsKIAogV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfd2ViX3ZpZXdfbG9hZF9wbGFpbl90
ZXh0ICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIg
ICAgICAgICAgICAgICAqcGxhaW5fdGV4dCk7Cit3ZWJraXRfd2ViX3ZpZXdfbG9hZF9wbGFpbl90
ZXh0ICAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3Zp
ZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgZ2NoYXIgICAgICAgICAgICAgICAqcGxhaW5fdGV4dCk7CiAKIFdFQktJVF9BUEkgdm9p
ZAotd2Via2l0X3dlYl92aWV3X2xvYWRfcmVxdWVzdCAgICAgICAgICAgICAgICAgKFdlYktpdFdl
YlZpZXcgICAgICAgICAgICAgKndlYl92aWV3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdlYktpdFVSSVJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QpOwor
d2Via2l0X3dlYl92aWV3X2xvYWRfcmVxdWVzdCAgICAgICAgICAgICAgICAgICAgICAgKFdlYktp
dFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFVSSVJlcXVlc3QgICAgICAgICAgKnJl
cXVlc3QpOwogCiBXRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF93ZWJfdmlld19zdG9wX2xvYWRpbmcg
ICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7Cit3
ZWJraXRfd2ViX3ZpZXdfc3RvcF9sb2FkaW5nICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0
V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcpOwogCiBXRUJLSVRfQVBJIHZvaWQKLXdlYmtp
dF93ZWJfdmlld19yZXBsYWNlX2NvbnRlbnQgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAg
ICAgICAgICAgICp3ZWJfdmlldywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICpjb250ZW50LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAg
ICAgICAgKmNvbnRlbnRfdXJpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgKmJhc2VfdXJpKTsKK3dlYmtpdF93
ZWJfdmlld19yZXBsYWNlX2NvbnRlbnQgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3
ICAgICAgICAgICAgICp3ZWJfdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICpjb250ZW50LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGdjaGFyICAgICAgICAgICAgICAgKmNvbnRlbnRfdXJpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAg
KmJhc2VfdXJpKTsKIAogV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCi13ZWJraXRfd2ViX3ZpZXdf
Z2V0X3RpdGxlICAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAq
d2ViX3ZpZXcpOword2Via2l0X3dlYl92aWV3X2dldF90aXRsZSAgICAgICAgICAgICAgICAgICAg
ICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3KTsKIAogV0VCS0lUX0FQ
SSB2b2lkCi13ZWJraXRfd2ViX3ZpZXdfcmVsb2FkICAgICAgICAgICAgICAgICAgICAgICAoV2Vi
S2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcpOword2Via2l0X3dlYl92aWV3X3JlbG9h
ZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAg
KndlYl92aWV3KTsKIAogV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfd2ViX3ZpZXdfcmVsb2FkX2J5
cGFzc19jYWNoZSAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcp
Oword2Via2l0X3dlYl92aWV3X3JlbG9hZF9ieXBhc3NfY2FjaGUgICAgICAgICAgICAgICAgKFdl
YktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3KTsKIAogV0VCS0lUX0FQSSBnZG91Ymxl
Ci13ZWJraXRfd2ViX3ZpZXdfZ2V0X2VzdGltYXRlZF9sb2FkX3Byb2dyZXNzICAoV2ViS2l0V2Vi
VmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcpOword2Via2l0X3dlYl92aWV3X2dldF9lc3RpbWF0
ZWRfbG9hZF9wcm9ncmVzcyAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92
aWV3KTsKIAogV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfd2ViX3ZpZXdfZ29fYmFjayAgICAgICAg
ICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcpOword2Vi
a2l0X3dlYl92aWV3X2dvX2JhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFdlYktpdFdl
YlZpZXcgICAgICAgICAgICAgKndlYl92aWV3KTsKIAogV0VCS0lUX0FQSSBnYm9vbGVhbgotd2Vi
a2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrICAgICAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcg
ICAgICAgICAgICAgKndlYl92aWV3KTsKK3dlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayAgICAg
ICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7
CiAKIFdFQktJVF9BUEkgdm9pZAotd2Via2l0X3dlYl92aWV3X2dvX2ZvcndhcmQgICAgICAgICAg
ICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3KTsKK3dlYmtpdF93
ZWJfdmlld19nb19mb3J3YXJkICAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3
ICAgICAgICAgICAgICp3ZWJfdmlldyk7CiAKIFdFQktJVF9BUEkgZ2Jvb2xlYW4KLXdlYmtpdF93
ZWJfdmlld19jYW5fZ29fZm9yd2FyZCAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAg
ICAgICAgICp3ZWJfdmlldyk7Cit3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQgICAgICAg
ICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcpOwogCiBX
RUJLSVRfQVBJIFdlYktpdEJhY2tGb3J3YXJkTGlzdCAqCi13ZWJraXRfd2ViX3ZpZXdfZ2V0X2Jh
Y2tfZm9yd2FyZF9saXN0ICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3Zp
ZXcpOword2Via2l0X3dlYl92aWV3X2dldF9iYWNrX2ZvcndhcmRfbGlzdCAgICAgICAgICAgICAg
KFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3KTsKIAogV0VCS0lUX0FQSSB2b2lk
Ci13ZWJraXRfd2ViX3ZpZXdfZ29fdG9fYmFja19mb3J3YXJkX2xpc3RfaXRlbSAoV2ViS2l0V2Vi
VmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSAqbGlzdF9pdGVtKTsK
K3dlYmtpdF93ZWJfdmlld19nb190b19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtICAgICAgIChXZWJL
aXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtICps
aXN0X2l0ZW0pOwogV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCi13ZWJraXRfd2ViX3ZpZXdfZ2V0
X3VyaSAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2Vi
X3ZpZXcpOword2Via2l0X3dlYl92aWV3X2dldF91cmkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3KTsKIAogV0VCS0lUX0FQSSBj
b25zdCBnY2hhciAqCi13ZWJraXRfd2ViX3ZpZXdfZ2V0X2N1c3RvbV9jaGFyc2V0ICAgICAgICAg
ICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcpOword2Via2l0X3dlYl92aWV3
X2dldF9jdXN0b21fY2hhcnNldCAgICAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAg
ICAgICAgKndlYl92aWV3KTsKIAogV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfd2ViX3ZpZXdfc2V0
X2N1c3RvbV9jaGFyc2V0ICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2Vi
X3ZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZ2NoYXIgICAgICAgICAgICAgICAqY2hhcnNldCk7Cit3ZWJraXRfd2ViX3ZpZXdfc2V0X2N1
c3RvbV9jaGFyc2V0ICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAq
d2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgICAqY2hhcnNldCk7CiAKIFdFQktJVF9BUEkg
dm9pZAotd2Via2l0X3dlYl92aWV3X3NldF9zZXR0aW5ncyAgICAgICAgICAgICAgICAgKFdlYktp
dFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFNldHRpbmdzICAgICAgICAgICAgKnNldHRpbmdz
KTsKK3dlYmtpdF93ZWJfdmlld19zZXRfc2V0dGluZ3MgICAgICAgICAgICAgICAgICAgICAgIChX
ZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRTZXR0aW5ncyAgICAgICAgICAg
ICpzZXR0aW5ncyk7CiAKIFdFQktJVF9BUEkgV2ViS2l0U2V0dGluZ3MgKgotd2Via2l0X3dlYl92
aWV3X2dldF9zZXR0aW5ncyAgICAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAg
ICAgKndlYl92aWV3KTsKK3dlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3MgICAgICAgICAgICAg
ICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7CiAKIFdFQktJ
VF9BUEkgV2ViS2l0V2luZG93UHJvcGVydGllcyAqCi13ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRv
d19wcm9wZXJ0aWVzICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcp
Oword2Via2l0X3dlYl92aWV3X2dldF93aW5kb3dfcHJvcGVydGllcyAgICAgICAgICAgICAgKFdl
YktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3KTsKIAogV0VCS0lUX0FQSSB2b2lkCi13
ZWJraXRfd2ViX3ZpZXdfc2V0X3pvb21fbGV2ZWwgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmll
dyAgICAgICAgICAgICAqd2ViX3ZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2RvdWJsZSAgICAgICAgICAgICAgICAgICAgem9vbV9sZXZlbCk7Cit3
ZWJraXRfd2ViX3ZpZXdfc2V0X3pvb21fbGV2ZWwgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0
V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RvdWJsZSAgICAgICAgICAgICAgICAgICAgem9v
bV9sZXZlbCk7CiBXRUJLSVRfQVBJIGdkb3VibGUKLXdlYmtpdF93ZWJfdmlld19nZXRfem9vbV9s
ZXZlbCAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7
Cit3ZWJraXRfd2ViX3ZpZXdfZ2V0X3pvb21fbGV2ZWwgICAgICAgICAgICAgICAgICAgICAoV2Vi
S2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcpOworCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF93ZWJfdmlld19jYW5fZXhlY3V0ZV9lZGl0aW5nX2NvbW1hbmQgICAgICAgIChXZWJLaXRX
ZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICpjb21t
YW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdBc3luY1JlYWR5Q2FsbGJhY2sgICAgICAgIGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgICAg
ICAgIHVzZXJfZGF0YSk7CiAKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF93ZWJfdmlld19j
YW5fZXhlY3V0ZV9lZGl0aW5nX2NvbW1hbmRfZmluaXNoIChXZWJLaXRXZWJWaWV3ICAgICAgICAg
ICAgICp3ZWJfdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHQXN5bmNSZXN1bHQgICAgICAgICAgICAgICpyZXN1bHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAg
ICAgICAgICAgICoqZXJyb3IpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJfdmlld19l
eGVjdXRlX2VkaXRpbmdfY29tbWFuZCAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAg
ICAgICp3ZWJfdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICpjb21tYW5kKTsKIEdfRU5EX0RF
Q0xTCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKaW5kZXggZWY0NGIyYi4uMWMw
MjA0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93
ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CkBAIC00OSw2ICs0OSwxMyBAQCB3ZWJr
aXRfd2ViX2NvbnRleHRfZ2V0X3R5cGUKIFdlYktpdFdlYlZpZXcKIFdlYktpdExvYWRFdmVudAog
V2ViS2l0UG9saWN5RGVjaXNpb25UeXBlCisKKzxTVUJTRUNUSU9OIEVkaXRpbmcgQ29tbWFuZHM+
CitXRUJLSVRfRURJVElOR19DT01NQU5EX0NVVAorV0VCS0lUX0VESVRJTkdfQ09NTUFORF9DT1BZ
CitXRUJLSVRfRURJVElOR19DT01NQU5EX1BBU1RFCisKKzxTVUJTRUNUSU9OPgogd2Via2l0X3dl
Yl92aWV3X25ldwogd2Via2l0X3dlYl92aWV3X25ld193aXRoX2NvbnRleHQKIHdlYmtpdF93ZWJf
dmlld19nZXRfY29udGV4dApAQCAtNzYsNiArODMsOSBAQCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3Nl
dHRpbmdzCiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVzCiB3ZWJraXRfd2Vi
X3ZpZXdfc2V0X3pvb21fbGV2ZWwKIHdlYmtpdF93ZWJfdmlld19nZXRfem9vbV9sZXZlbAord2Vi
a2l0X3dlYl92aWV3X2Nhbl9leGVjdXRlX2VkaXRpbmdfY29tbWFuZAord2Via2l0X3dlYl92aWV3
X2Nhbl9leGVjdXRlX2VkaXRpbmdfY29tbWFuZF9maW5pc2gKK3dlYmtpdF93ZWJfdmlld19leGVj
dXRlX2VkaXRpbmdfY29tbWFuZAogCiA8U1VCU0VDVElPTiBTdGFuZGFyZD4KIFdlYktpdFdlYlZp
ZXdDbGFzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9HTlVtYWtlZmlsZS5hbQppbmRleCAxNzVhMTQ5Li43MjQxYjk5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbQpAQCAt
NSw3ICs1LDggQEAgVEVTVF9QUk9HUyArPSBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rl
c3RXZWJLaXRTZXR0aW5ncyBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RCYWNrRm9y
d2FyZExpc3QgXAogCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0RG93bmxvYWRzIFwKLQlQ
cm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFBvbGljeUNsaWVudAorCVByb2dyYW1z
L1dlYktpdDJBUElUZXN0cy9UZXN0V2ViS2l0UG9saWN5Q2xpZW50IFwKKwlQcm9ncmFtcy9XZWJL
aXQyQVBJVGVzdHMvVGVzdFdlYlZpZXdFZGl0b3IKIAogbm9pbnN0X1BST0dSQU1TICs9ICQoVEVT
VF9QUk9HUykKIApAQCAtMTExLDMgKzExMiw5IEBAIFByb2dyYW1zX1dlYktpdDJBUElUZXN0c19U
ZXN0RG93bmxvYWRzX1NPVVJDRVMgPSBcCiBQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdERv
d25sb2Fkc19DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKIFByb2dyYW1zX1dl
YktpdDJBUElUZXN0c19UZXN0RG93bmxvYWRzX0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRk
KQogUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3REb3dubG9hZHNfTERGTEFHUyA9ICQod2Vi
a2l0Ml90ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYlZp
ZXdFZGl0b3JfU09VUkNFUyA9IFwKKyAgICAgICAgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvVGVzdFdlYlZpZXdFZGl0b3IuY3BwCitQcm9ncmFtc19XZWJLaXQyQVBJVGVz
dHNfVGVzdFdlYlZpZXdFZGl0b3JfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3Mp
CitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYlZpZXdFZGl0b3JfTERBREQgPSAkKHdl
YmtpdDJfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYlZpZXdF
ZGl0b3JfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvTG9hZFRyYWNraW5nVGVzdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9Mb2FkVHJhY2tpbmdUZXN0
LmNwcAppbmRleCA5ZWIwODU3Li5hMzVjODc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9Mb2FkVHJhY2tpbmdUZXN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9Mb2FkVHJhY2tpbmdUZXN0LmNwcApAQCAt
MTEwLDggKzExMCw2IEBAIHZvaWQgTG9hZFRyYWNraW5nVGVzdDo6cHJvdmlzaW9uYWxMb2FkUmVj
ZWl2ZWRTZXJ2ZXJSZWRpcmVjdCgpCiB2b2lkIExvYWRUcmFja2luZ1Rlc3Q6OnByb3Zpc2lvbmFs
TG9hZEZhaWxlZChjb25zdCBnY2hhciogZmFpbGluZ1VSSSwgR0Vycm9yKiBlcnJvcikKIHsKICAg
ICBtX2xvYWRFdmVudHMuYXBwZW5kKFByb3Zpc2lvbmFsTG9hZEZhaWxlZCk7Ci0gICAgaWYgKG1f
cnVuTG9hZFVudGlsQ29tcGxldGlvbikKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5M
b29wKTsKIH0KIAogdm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkQ29tbWl0dGVkKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RCYWNrRm9y
d2FyZExpc3QuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVz
dEJhY2tGb3J3YXJkTGlzdC5jcHAKaW5kZXggY2M2NTdjYy4uZTcwZTM5MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdEJhY2tGb3J3YXJkTGlz
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdEJh
Y2tGb3J3YXJkTGlzdC5jcHAKQEAgLTE5LDggKzE5LDggQEAKIAogI2luY2x1ZGUgImNvbmZpZy5o
IgogCi0jaW5jbHVkZSAiTG9hZFRyYWNraW5nVGVzdC5oIgogI2luY2x1ZGUgIldlYktpdFRlc3RT
ZXJ2ZXIuaCIKKyNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgogI2luY2x1ZGUgPGd0ay9ndGsuaD4K
ICNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KQEAgLTQ2LDcg
KzQ2LDcgQEAgc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBT
b3VwTWVzc2FnZSogbXNnLCBjb25zdCBjaGFyKiBwYXQKICAgICBzb3VwX21lc3NhZ2VfYm9keV9j
b21wbGV0ZShtc2ctPnJlc3BvbnNlX2JvZHkpOwogfQogCi1jbGFzcyBCYWNrRm9yd2FyZExpc3RU
ZXN0OiBwdWJsaWMgTG9hZFRyYWNraW5nVGVzdCB7CitjbGFzcyBCYWNrRm9yd2FyZExpc3RUZXN0
OiBwdWJsaWMgV2ViVmlld1Rlc3QgewogcHVibGljOgogICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRV
UkUoQmFja0ZvcndhcmRMaXN0VGVzdCk7CiAKQEAgLTEzMCw3ICsxMzAsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCB3YWl0VW50aWxMb2FkRmluaXNoZWQoKQogICAgIHsKICAgICAgICAgbV9oYXNDaGFu
Z2VkID0gZmFsc2U7Ci0gICAgICAgIExvYWRUcmFja2luZ1Rlc3Q6OndhaXRVbnRpbExvYWRGaW5p
c2hlZCgpOworICAgICAgICBXZWJWaWV3VGVzdDo6d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CiAg
ICAgICAgIGdfYXNzZXJ0KG1faGFzQ2hhbmdlZCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViVmlld0VkaXRvci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViVmlld0VkaXRv
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ0NTg0YQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RX
ZWJWaWV3RWRpdG9yLmNwcApAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
LDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlZpZXdU
ZXN0LmgiCisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCitjbGFzcyBFZGl0b3JU
ZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJ
WFRVUkUoRWRpdG9yVGVzdCk7CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGtDbGlw
Ym9hcmRXYWl0VGltZW91dCA9IDUwOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQga0Ns
aXBib2FyZFdhaXRNYXhUcmllcyA9IDI7CisKKyAgICBFZGl0b3JUZXN0KCkKKyAgICAgICAgOiBt
X2NsaXBib2FyZChndGtfY2xpcGJvYXJkX2dldChHREtfU0VMRUNUSU9OX0NMSVBCT0FSRCkpCisg
ICAgICAgICwgbV9jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoZmFsc2UpCisgICAgICAgICwgbV90
cmllc0NvdW50KDApCisgICAgeworICAgICAgICBndGtfY2xpcGJvYXJkX2NsZWFyKG1fY2xpcGJv
YXJkKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBjYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmRS
ZWFkeUNhbGxiYWNrKEdPYmplY3QqLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgRWRpdG9yVGVzdCog
dGVzdCkKKyAgICB7CisgICAgICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgdGVz
dC0+bV9jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQgPSB3ZWJraXRfd2ViX3ZpZXdfY2FuX2V4ZWN1
dGVfZWRpdGluZ19jb21tYW5kX2ZpbmlzaCh0ZXN0LT5tX3dlYlZpZXcsIHJlc3VsdCwgJmVycm9y
Lm91dFB0cigpKTsKKyAgICAgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICAgICAgZ19t
YWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBib29sIGNhbkV4
ZWN1dGVFZGl0aW5nQ29tbWFuZChjb25zdCBjaGFyKiBjb21tYW5kKQorICAgIHsKKyAgICAgICAg
bV9jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQgPSBmYWxzZTsKKyAgICAgICAgd2Via2l0X3dlYl92
aWV3X2Nhbl9leGVjdXRlX2VkaXRpbmdfY29tbWFuZChtX3dlYlZpZXcsIGNvbW1hbmQsIHJlaW50
ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4oY2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5k
UmVhZHlDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9v
cCk7CisgICAgICAgIHJldHVybiBtX2NhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZDsKKyAgICB9CisK
KyAgICBzdGF0aWMgZ2Jvb2xlYW4gd2FpdEZvckNsaXBib2FyZFRleHQoRWRpdG9yVGVzdCogdGVz
dCkKKyAgICB7CisgICAgICAgIHRlc3QtPm1fdHJpZXNDb3VudCsrOworICAgICAgICBpZiAoZ3Rr
X2NsaXBib2FyZF93YWl0X2lzX3RleHRfYXZhaWxhYmxlKHRlc3QtPm1fY2xpcGJvYXJkKSB8fCB0
ZXN0LT5tX3RyaWVzQ291bnQgPiBrQ2xpcGJvYXJkV2FpdE1heFRyaWVzKSB7CisgICAgICAgICAg
ICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAgICAgICAgICAgcmV0dXJu
IEZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAg
dm9pZCBjb3B5Q2xpcGJvYXJkKCkKKyAgICB7CisgICAgICAgIHdlYmtpdF93ZWJfdmlld19leGVj
dXRlX2VkaXRpbmdfY29tbWFuZChtX3dlYlZpZXcsIFdFQktJVF9FRElUSU5HX0NPTU1BTkRfQ09Q
WSk7CisgICAgICAgIC8vIFRoZXJlJ3Mgbm8gd2F5IHRvIGtub3cgd2hlbiB0aGUgc2VsZWN0aW9u
IGhhcyBiZWVuIGNvcGllZCB0bworICAgICAgICAvLyB0aGUgY2xpcGJvYXJkLCBzbyB1c2UgYSB0
aW1lb3V0IHNvdXJjZSB0byBxdWVyeSB0aGUgY2xpcGJvYXJkLgorICAgICAgICBtX3RyaWVzQ291
bnQgPSAwOworICAgICAgICBnX3RpbWVvdXRfYWRkKGtDbGlwYm9hcmRXYWl0VGltZW91dCwgcmVp
bnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4od2FpdEZvckNsaXBib2FyZFRleHQpLCB0aGlzKTsK
KyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIEd0a0Ns
aXBib2FyZCogbV9jbGlwYm9hcmQ7CisgICAgYm9vbCBtX2NhbkV4ZWN1dGVFZGl0aW5nQ29tbWFu
ZDsKKyAgICBzaXplX3QgbV90cmllc0NvdW50OworfTsKKworc3RhdGljIHZvaWQgdGVzdFdlYlZp
ZXdFZGl0b3JDdXRDb3B5UGFzdGVOb25FZGl0YWJsZShFZGl0b3JUZXN0KiB0ZXN0LCBnY29uc3Rw
b2ludGVyKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzZWxlY3RlZFNwYW5IVE1MID0gIjxo
dG1sPjxib2R5IGNvbnRlbnRFZGl0YWJsZT1cImZhbHNlXCI+IgorICAgICAgICAiPHNwYW4gaWQ9
XCJtYWluc3BhblwiPkFsbCB3b3JrIGFuZCBubyBwbGF5IDxzcGFuIGlkPVwic3Vic3BhblwiPm1h
a2UgSmFjayBhIGR1bGw8L3NwYW4+IGJveS48L3NwYW4+IgorICAgICAgICAiPHNjcmlwdD5kb2N1
bWVudC5nZXRTZWxlY3Rpb24oKS5jb2xsYXBzZSgpO1xuIgorICAgICAgICAiZG9jdW1lbnQuZ2V0
U2VsZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1
YnNwYW4nKSk7XG4iCisgICAgICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7CisKKyAgICAv
LyBOb3RoaW5nIGxvYWRlZCB5ZXQuCisgICAgZ19hc3NlcnQoIXRlc3QtPmNhbkV4ZWN1dGVFZGl0
aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX0NVVCkpOworICAgIGdfYXNzZXJ0KCF0
ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9DT1BZ
KSk7CisgICAgZ19hc3NlcnQoIXRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRf
RURJVElOR19DT01NQU5EX1BBU1RFKSk7CisKKyAgICB0ZXN0LT5sb2FkSHRtbChzZWxlY3RlZFNw
YW5IVE1MLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIGdf
YXNzZXJ0KHRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19DT01N
QU5EX0NPUFkpKTsKKyAgICAvLyBJdCdzIG5vdCBwb3NzaWJsZSB0byBjdXQgYW5kIHBhc3RlIHdo
ZW4gY29udGVudCBpcyBub3QgZWRpdGFibGUKKyAgICAvLyBldmVuIGlmIHRoZXJlJ3MgYSBzZWxl
Y3Rpb24uCisgICAgZ19hc3NlcnQoIXRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJL
SVRfRURJVElOR19DT01NQU5EX0NVVCkpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5jYW5FeGVjdXRl
RWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9QQVNURSkpOworCisgICAgdGVz
dC0+Y29weUNsaXBib2FyZCgpOworICAgIEdPd25QdHI8Y2hhcj4gY2xpcGJvYXJkVGV4dChndGtf
Y2xpcGJvYXJkX3dhaXRfZm9yX3RleHQodGVzdC0+bV9jbGlwYm9hcmQpKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIoY2xpcGJvYXJkVGV4dC5nZXQoKSwgPT0sICJtYWtlIEphY2sgYSBkdWxsIik7Cit9
CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RWRpdG9yQ3V0Q29weVBhc3RlRWRpdGFibGUoRWRp
dG9yVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciog
c2VsZWN0ZWRTcGFuSFRNTCA9ICI8aHRtbD48Ym9keSBjb250ZW50RWRpdGFibGU9XCJ0cnVlXCI+
IgorICAgICAgICAiPHNwYW4gaWQ9XCJtYWluc3BhblwiPkFsbCB3b3JrIGFuZCBubyBwbGF5IDxz
cGFuPm1ha2UgSmFjayBhIGR1bGw8L3NwYW4+IGJveS48L3NwYW4+IgorICAgICAgICAiPHNjcmlw
dD5kb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5jb2xsYXBzZSgpO1xuIgorICAgICAgICAiZG9jdW1l
bnQuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ21haW5zcGFuJykpO1xuIgorICAgICAgICAiPC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4iOwor
CisgICAgLy8gTm90aGluZyBsb2FkZWQgeWV0LgorICAgIGdfYXNzZXJ0KCF0ZXN0LT5jYW5FeGVj
dXRlRWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9DVVQpKTsKKyAgICBnX2Fz
c2VydCghdGVzdC0+Y2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kKFdFQktJVF9FRElUSU5HX0NPTU1B
TkRfQ09QWSkpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQo
V0VCS0lUX0VESVRJTkdfQ09NTUFORF9QQVNURSkpOworCisgICAgdGVzdC0+bG9hZEh0bWwoc2Vs
ZWN0ZWRTcGFuSFRNTCwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisK
KyAgICAvLyBUaGVyZSdzIGEgc2VsZWN0aW9uLgorICAgIGdfYXNzZXJ0KHRlc3QtPmNhbkV4ZWN1
dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX0NVVCkpOworICAgIGdfYXNz
ZXJ0KHRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5E
X0NPUFkpKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoV0VC
S0lUX0VESVRJTkdfQ09NTUFORF9QQVNURSkpOworCisgICAgdGVzdC0+Y29weUNsaXBib2FyZCgp
OworICAgIEdPd25QdHI8Y2hhcj4gY2xpcGJvYXJkVGV4dChndGtfY2xpcGJvYXJkX3dhaXRfZm9y
X3RleHQodGVzdC0+bV9jbGlwYm9hcmQpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoY2xpcGJvYXJk
VGV4dC5nZXQoKSwgPT0sICJBbGwgd29yayBhbmQgbm8gcGxheSBtYWtlIEphY2sgYSBkdWxsIGJv
eS4iKTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIEVkaXRvclRlc3Q6OmFkZCgiV2Vi
S2l0V2ViVmlldyIsICJjdXQtY29weS1wYXN0ZS9ub24tZWRpdGFibGUiLCB0ZXN0V2ViVmlld0Vk
aXRvckN1dENvcHlQYXN0ZU5vbkVkaXRhYmxlKTsKKyAgICBFZGl0b3JUZXN0OjphZGQoIldlYktp
dFdlYlZpZXciLCAiY3V0LWNvcHktcGFzdGUvZWRpdGFibGUiLCB0ZXN0V2ViVmlld0VkaXRvckN1
dENvcHlQYXN0ZUVkaXRhYmxlKTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7Cit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5j
cHAKaW5kZXggMDk5ZWFiZC4uMjA4OTVlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcApAQCAtMTE2LDMgKzExNiwx
NyBAQCB2b2lkIFdlYlZpZXdUZXN0Ojp3YWl0KGRvdWJsZSBzZWNvbmRzKQogICAgIGdfdGltZW91
dF9hZGRfc2Vjb25kcyhzZWNvbmRzLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPih0ZXN0
TG9hZFRpbWVvdXRGaW5pc2hMb29wKSwgbV9tYWluTG9vcCk7CiAgICAgZ19tYWluX2xvb3BfcnVu
KG1fbWFpbkxvb3ApOwogfQorCitzdGF0aWMgdm9pZCBsb2FkQ2hhbmdlZChXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3LCBXZWJLaXRMb2FkRXZlbnQgbG9hZEV2ZW50LCBXZWJWaWV3VGVzdCogdGVzdCkK
K3sKKyAgICBpZiAobG9hZEV2ZW50ICE9IFdFQktJVF9MT0FEX0ZJTklTSEVEKQorICAgICAgICBy
ZXR1cm47CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKHdlYlZpZXcs
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGxvYWRDaGFuZ2VkKSwgdGVzdCk7CisgICAgZ19tYWlu
X2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKK30KKwordm9pZCBXZWJWaWV3VGVzdDo6d2Fp
dFVudGlsTG9hZEZpbmlzaGVkKCkKK3sKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywg
ImxvYWQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sobG9hZENoYW5nZWQpLCB0aGlzKTsKKyAgICBnX21h
aW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuaAppbmRleCA4ODJlOGIyLi40YWQ2ZmE2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJW
aWV3VGVzdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dl
YlZpZXdUZXN0LmgKQEAgLTQxLDYgKzQxLDcgQEAgcHVibGljOgogICAgIHZvaWQgZ29Ub0JhY2tG
b3J3YXJkTGlzdEl0ZW0oV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSopOwogCiAgICAgdm9pZCB3
YWl0KGRvdWJsZSBzZWNvbmRzKTsKKyAgICB2b2lkIHdhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwog
CiAgICAgV2ViS2l0V2ViVmlldyogbV93ZWJWaWV3OwogICAgIEdNYWluTG9vcCogbV9tYWluTG9v
cDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaAppbmRleCBlOWQ4
OTJiLi43OGU1M2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay93ZWJraXQyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0
Mi5oCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRCYWNrRm9yd2Fy
ZExpc3RJdGVtLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CiAjaW5jbHVk
ZSA8d2Via2l0Mi9XZWJLaXREb3dubG9hZC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RWRp
dGluZ0NvbW1hbmRzLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRFbnVtVHlwZXMuaD4KICNp
bmNsdWRlIDx3ZWJraXQyL1dlYktpdEVycm9yLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRT
ZXR0aW5ncy5oPgo=
</data>
<flag name="review"
          id="127387"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>