<?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>157899</bug_id>
          
          <creation_ts>2016-05-19 10:22:06 -0700</creation_ts>
          <short_desc>[GTK] Provide frame-related load signals in WebKitWebView</short_desc>
          <delta_ts>2016-06-03 05:15:57 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Milan Crha">mcrha</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>berto</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gustavo</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>mrobinson</cc>
    
    <cc>tpopela</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1194811</commentid>
    <comment_count>0</comment_count>
    <who name="Milan Crha">mcrha</who>
    <bug_when>2016-05-19 10:22:06 -0700</bug_when>
    <thetext>While working on the Evolution port to the WebKit2, I realized that there is a problem when to attach DOM bindings, especially when the web view contains iframe-s (and these iframe-s can be formatted mail messages, which also contain iframe-s). The only current way of noticing when the loading was finished is to listen to WebKitWebView::load-event and add the bindings when the load_event == WEBKIT_LOAD_FINISHED, but it&apos;s a matter of luck whether the internal iframe-s will be loaded or not at that time.

Due to this, I propose a new signal to be added to the WebKitWebView with a name &quot;frame-loaded&quot;, with a prototype:

    void
    frame_loaded (WebKitWebView *web_view,
                  const gchar *frame_src, /* &apos;src&apos; attribute content of the loaded (i)frame */
                  const gchar *frame_id,  /* &apos;id&apos; attribute content of the loaded (i)frame */
                  gpointer user_data)

which will be called whenever any (i)frame will be in a state equivalent of the load_event == WEBKIT_LOAD_FINISHED of the main WebKitWebView.
That way, the subscriber to this signal will know that everything is ready and the DOM bindings can be safely done on that particular frame.

I was told that you have a similar request from someone else already, but I didn&apos;t find it in the bugzilla (maybe I used wrong search term), thus I filled it myself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1195116</commentid>
    <comment_count>1</comment_count>
      <attachid>279474</attachid>
    <who name="Milan Crha">mcrha</who>
    <bug_when>2016-05-20 02:45:51 -0700</bug_when>
    <thetext>Created attachment 279474
proposed patch

This adds three new signals to the WebkitWebView:
   &quot;frame-load-changed&quot;
   &quot;frame-load-failed&quot;
   &quot;frame-load-failed-with-tls-errors&quot;
similar to its counterparts:
   &quot;load-changed&quot;
   &quot;load-failed&quot;
   &quot;load-failed-with-tls-errors&quot;
except they have added one more argument, frame URI whose load status changed. These are not called for the main frame, only for the subframe-s.

My initial request wanted also the &apos;id&apos; attribute of the iframe, but I realized that this information is not available, thus only the URI is passed to the signals. It&apos;s perfectly fine, the &apos;id&apos; was just about a &quot;nice to have&quot; thing.

As the size of _WebKitWebViewClass structure changed, I did bump the soname version too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1195134</commentid>
    <comment_count>2</comment_count>
      <attachid>279474</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-05-20 07:49:04 -0700</bug_when>
    <thetext>Comment on attachment 279474
proposed patch

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

I like it, thanks for working on this. It needs to be approved by a second GTK+ reviewer and it should be announced on the mailing list first. Could you propose this on the mailing list, please?

Importantly, we need to add API tests in Tools/TestWebKitAPI/Tests/WebKit2Gtk. Probably TestLoaderClient.cpp would be the right place for most of these, plus TestSSL.cpp for the TLS errors signal. r- because of this.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitLoaderClient.cpp:43
&gt; +    static const char* getFrameURL(const WebFrameProxy&amp; frame)

This doesn&apos;t make sense as a public function. I would keep the static keyword but declare it above rather than inside the class; you&apos;ll notice it doesn&apos;t need to be a class member at all. (Alternatively, it could be a private static function.)

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitLoaderClient.cpp:49
&gt;  private:

Leave a blank line above private.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1137
&gt; +     * for any of the frames in the @web_view. See #WebKitWebView::load-changed

except it is invoked for any of the frames in the @web_view except the main frame.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1167
&gt; +     * WebKitWebView::frame-load-changed will always be emitted with

with the

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1221
&gt; +            g_signal_accumulator_true_handled, 0 /* accumulator data */,

No need for this copypasted comment

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1940
&gt; +void webkitWebViewFrameLoadFailed(WebKitWebView* webView, const char* uri, WebKitLoadEvent loadEvent, const char* failingURI, GError *error)

GError* error

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h:268
&gt;      void (*_webkit_reserved1) (void);

We have sufficient padding here, so just remove three of the padding pointers: then we don&apos;t need the soname bump, and you can still have your new API. It&apos;s unfortunate that we&apos;re running low on padding, but it exists to be used after all.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewPrivate.h:41
&gt; +void webkitWebViewFrameLoadFailed(WebKitWebView*, const char* uri, WebKitLoadEvent, const char* failingURI, GError*);

Another option, which wouldn&apos;t require adding three new functions, would be to add the uri parameter to the existing functions up above, rename it to frameURI, and use nullptr to indicate that it corresponds to the main frame.

But thinking about this some more, it&apos;s probably simpler and easier to read the way you have it now.

&gt; Source/cmake/OptionsGTK.cmake:18
&gt; +CALCULATE_LIBRARY_VERSIONS_FROM_LIBTOOL_TRIPLE(WEBKIT2 52 0 14)

Nope, ABI compatibility is an important feature as WebKitGTK+ is used outside of Linux distros.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1195524</commentid>
    <comment_count>3</comment_count>
      <attachid>279568</attachid>
    <who name="Milan Crha">mcrha</who>
    <bug_when>2016-05-23 10:48:02 -0700</bug_when>
    <thetext>Created attachment 279568
proposed patch ][

(In reply to comment #2)
&gt; ...and it should be announced on the mailing list first

What is that mailing list, please? It&apos;s a new thing for me, since the last time I made/proposed any changes into the WebKitGTK+.

I addressed all the points you asked for (unless I missed something). Writing the tests was a good idea, it uncovered few bugs in the previous patch. Due to found behaviour I changed the failed signals signatures too, because they did not have set the frameURI at all, only the failingURI was available. It wasn&apos;t the only bug in the previous patch, tough.

I do not know what you use for the string concatenation, and I didn&apos;t want to allocate the memory in the tests using GLib, thus I chose std::string. If that&apos;s wrong, I can change it.

See my other minor notes below.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitLoaderClient.cpp:43
&gt; &gt; +    static const char* getFrameURL(const WebFrameProxy&amp; frame)
&gt; 
&gt; This doesn&apos;t make sense as a public function. I would keep the static
&gt; keyword but declare it above rather than inside the class; you&apos;ll notice it
&gt; doesn&apos;t need to be a class member at all. (Alternatively, it could be a
&gt; private static function.)

It&apos;s a private class, thus I didn&apos;t care that much about making the function &quot;even more private&quot;. I moved it to the private section, rather than out of the class, because it should be used by that class only.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h:268
&gt; &gt;      void (*_webkit_reserved1) (void);
&gt; 
&gt; We have sufficient padding here, so just remove three of the padding
&gt; pointers: then we don&apos;t need the soname bump, and you can still have your
&gt; new API. It&apos;s unfortunate that we&apos;re running low on padding, but it exists
&gt; to be used after all.

Okay, it&apos;s up to you. I change the soname versions when I make changes which require it (and I do not forget to bump it) during the development phase and keep the padding/reserved members for the stable releases, where the API/ABI freezes are in the effect. You do it differently, then I&apos;ll follow what the WebKit is used to. I changed the _webkit_reserved definition, for a better one, which will generate smaller diff, when changed. The same/similar approach is used both in the libsoup and in the evolution-data-server (and possibly many other projects, these two are those I saw it in recently).

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewPrivate.h:41
&gt; &gt; +void webkitWebViewFrameLoadFailed(WebKitWebView*, const char* uri, WebKitLoadEvent, const char* failingURI, GError*);
&gt; 
&gt; Another option, which wouldn&apos;t require adding three new functions, would be
&gt; to add the uri parameter to the existing functions up above, rename it to
&gt; frameURI, and use nullptr to indicate that it corresponds to the main frame.
&gt; 
&gt; But thinking about this some more, it&apos;s probably simpler and easier to read
&gt; the way you have it now.

Yes, I thought of it too, but then decided to add new signals, because it&apos;s easier to catch on an ABI change and new signals, than hunting for changed signal signatures. Such change would also require the soname version bump and a big release announcement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1195525</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-23 10:50:36 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1195675</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-05-23 18:30:30 -0700</bug_when>
    <thetext>Thanks, looks good.

(In reply to comment #3)
&gt; What is that mailing list, please? It&apos;s a new thing for me, since the last
&gt; time I made/proposed any changes into the WebKitGTK+.

webkit-gtk@lists.webkit.org

It&apos;s just a formality, to give folks a chance to notice and propose changes.
 
&gt; I do not know what you use for the string concatenation, and I didn&apos;t want
&gt; to allocate the memory in the tests using GLib, thus I chose std::string. If
&gt; that&apos;s wrong, I can change it.

That was a good guess, but we actually use WTF::String in Source/WTF/wtf/text/WTFString.h.

See https://trac.webkit.org/wiki/EfficientStrings for string concatenation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1195780</commentid>
    <comment_count>6</comment_count>
      <attachid>279635</attachid>
    <who name="Milan Crha">mcrha</who>
    <bug_when>2016-05-24 01:18:25 -0700</bug_when>
    <thetext>Created attachment 279635
proposed patch ]I[

I replaced std::string usage with WTF::StringBuilder. The code looks less efficient, but it&apos;s in tests only, thus might not matter that much, right? I tried to use WTF::String, but the compilation was failing and I didn&apos;t want to spend whole day on hunting what was wrong (surely something what I did and how I did it).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1195784</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-05-24 01:51:15 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; While working on the Evolution port to the WebKit2, I realized that there is
&gt; a problem when to attach DOM bindings, especially when the web view contains
&gt; iframe-s (and these iframe-s can be formatted mail messages, which also
&gt; contain iframe-s).

What do you mean by attach DOM bindings? DOM bindings live in the web process, so I don&apos;t understand how new API in the UI process can help with that.

&gt; The only current way of noticing when the loading was
&gt; finished is to listen to WebKitWebView::load-event and add the bindings when
&gt; the load_event == WEBKIT_LOAD_FINISHED, but it&apos;s a matter of luck whether
&gt; the internal iframe-s will be loaded or not at that time.
&gt; 
&gt; Due to this, I propose a new signal to be added to the WebKitWebView with a
&gt; name &quot;frame-loaded&quot;, with a prototype:
&gt; 
&gt;     void
&gt;     frame_loaded (WebKitWebView *web_view,
&gt;                   const gchar *frame_src, /* &apos;src&apos; attribute content of the
&gt; loaded (i)frame */
&gt;                   const gchar *frame_id,  /* &apos;id&apos; attribute content of the
&gt; loaded (i)frame */
&gt;                   gpointer user_data)
&gt; 
&gt; which will be called whenever any (i)frame will be in a state equivalent of
&gt; the load_event == WEBKIT_LOAD_FINISHED of the main WebKitWebView.
&gt; That way, the subscriber to this signal will know that everything is ready
&gt; and the DOM bindings can be safely done on that particular frame.

The right place to use DOM bindings is WebKitWebPage::document-loaded in the web extensions API. It&apos;s true that is only available for the main frame, but if we need to grow the API to non main frames it has to be in the web process, probably adding WebKitFrame::document-loaded and webkit_frame_get_dom_document().

&gt; I was told that you have a similar request from someone else already, but I
&gt; didn&apos;t find it in the bugzilla (maybe I used wrong search term), thus I
&gt; filled it myself.

We have tried hard not to expose frames in the UI process API, since it was very confusing in webkit1 and often misused, so we need a use case here to expose it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1195839</commentid>
    <comment_count>8</comment_count>
    <who name="Milan Crha">mcrha</who>
    <bug_when>2016-05-24 07:39:45 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #0)
&gt; &gt; While working on the Evolution port to the WebKit2, I realized that there is
&gt; &gt; a problem when to attach DOM bindings, especially when the web view contains
&gt; &gt; iframe-s (and these iframe-s can be formatted mail messages, which also
&gt; &gt; contain iframe-s).
&gt; 
&gt; What do you mean by attach DOM bindings? DOM bindings live in the web
&gt; process, so I don&apos;t understand how new API in the UI process can help with
&gt; that.

The evolution plays a ping-pong over D-Bus between the UI part (evolution) and the WebProcess part (webkit extension, to which the D-Bus is connected). Currently, in the webkit2 port branch of the evolution, the UI part listens for WebKitWebView::load-changed signal. Once it receives WEBKIT_LOAD_FINISHED event it asks the WebProcess part to attach DOM bindings. This goes through D-Bus and there is no guarantee when exactly it&apos;ll be delivered, thus, when the parts being meant already available in the DOM structure, are sometimes available and sometimes not, depending whether the WebKit had enough time to load also sub-frames of the main frame.

&gt; The right place to use DOM bindings is WebKitWebPage::document-loaded in the
&gt; web extensions API.

I understood it as an equivalent of the WebKitWebView::load-changed signal. The thing is that the DOM bindings are of a nature &quot;button clicked&quot;, which the UI part responds to and does some UI magics for the user, when &quot;the button&quot; is clicked. That means that the UI part generates some HTML, then it asks the web extension to attach &quot;click&quot; event listener on the elements, and when they are clicked the D-Bus signal lets the UI part know. Interprocess communication is sort of nightmare.

&gt; We have tried hard not to expose frames in the UI process API, since it was
&gt; very confusing in webkit1 and often misused, so we need a use case here to
&gt; expose it.

Okay, I would try to provide a test application, but as it involves the WebProcess extension, then it could be pretty complex, thus I hesitate to do it, unless really necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1195843</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-05-24 08:21:39 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; (In reply to comment #0)
&gt; &gt; &gt; While working on the Evolution port to the WebKit2, I realized that there is
&gt; &gt; &gt; a problem when to attach DOM bindings, especially when the web view contains
&gt; &gt; &gt; iframe-s (and these iframe-s can be formatted mail messages, which also
&gt; &gt; &gt; contain iframe-s).
&gt; &gt; 
&gt; &gt; What do you mean by attach DOM bindings? DOM bindings live in the web
&gt; &gt; process, so I don&apos;t understand how new API in the UI process can help with
&gt; &gt; that.
&gt; 
&gt; The evolution plays a ping-pong over D-Bus between the UI part (evolution)
&gt; and the WebProcess part (webkit extension, to which the D-Bus is connected).
&gt; Currently, in the webkit2 port branch of the evolution, the UI part listens
&gt; for WebKitWebView::load-changed signal. Once it receives
&gt; WEBKIT_LOAD_FINISHED event it asks the WebProcess part to attach DOM
&gt; bindings. This goes through D-Bus and there is no guarantee when exactly
&gt; it&apos;ll be delivered, thus, when the parts being meant already available in
&gt; the DOM structure, are sometimes available and sometimes not, depending
&gt; whether the WebKit had enough time to load also sub-frames of the main frame.

That&apos;s indeed not the right way to do it. The web extension should emit a signal when document loaded happens instead of relying on web view load events that have nothing to do with dom bindings.

&gt; &gt; The right place to use DOM bindings is WebKitWebPage::document-loaded in the
&gt; &gt; web extensions API.
&gt; 
&gt; I understood it as an equivalent of the WebKitWebView::load-changed signal.

It&apos;s not.

&gt; The thing is that the DOM bindings are of a nature &quot;button clicked&quot;, which
&gt; the UI part responds to and does some UI magics for the user, when &quot;the
&gt; button&quot; is clicked. That means that the UI part generates some HTML, then it
&gt; asks the web extension to attach &quot;click&quot; event listener on the elements, and
&gt; when they are clicked the D-Bus signal lets the UI part know. Interprocess
&gt; communication is sort of nightmare.

The UI process should wait for the document-loaded signal to allow the user click on that button, or send a message to the extension, and the extension should queue it until document-loaded happens.

&gt; &gt; We have tried hard not to expose frames in the UI process API, since it was
&gt; &gt; very confusing in webkit1 and often misused, so we need a use case here to
&gt; &gt; expose it.
&gt; 
&gt; Okay, I would try to provide a test application, but as it involves the
&gt; WebProcess extension, then it could be pretty complex, thus I hesitate to do
&gt; it, unless really necessary.

This doesn&apos;t look like a valid use case for exposing frames in the UI process to me yet, but maybe I didn&apos;t understand it correctly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1195958</commentid>
    <comment_count>10</comment_count>
    <who name="Milan Crha">mcrha</who>
    <bug_when>2016-05-24 12:21:47 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; That&apos;s indeed not the right way to do it. The web extension should emit a
&gt; signal when document loaded happens instead of relying on web view load
&gt; events that have nothing to do with dom bindings.

I am currently at commit 33e641672d5a84a0 of a webkit git master checkout, the `git log` says: &quot;REGRESSION (r200638): -[DOMHTMLVideoElement play] disappeared from ObjC bindings&quot; and at the end &quot;git-svn-id: http://svn.webkit.org/repository/webkit/trunk@201212 268f45cc-cd09-0410-ab3c-d52691b4dbfc&quot;.

I modified evolution&apos;s code to check these things in a way that there is loaded a page with one iframe, (and the frame is a plain html), thus at the end the structure looks roughly like this:
  &lt;html&gt;
  &lt;body&gt;
     &lt;iframe src=&quot;...&quot;&gt;&lt;/iframe&gt;
  &lt;/body&gt;
  &lt;/html&gt;

and the load of the iframe content is done asynchronously, where I added a 5 seconds delay to make things easier. The result of my debug prints is:

web_view_load_changed_cb: 42305544881 started (pid:19619)
   web_page_document_loaded_cb: 42305558657 (pid:19653)
     &gt; mail_request_process_mail_sync: 42305561698 waiting for 5 seconds (pid:19619)
     &gt; mail_request_process_mail_sync: 42310561790 done wait for 5 seconds (pid:19619)
web_view_load_changed_cb: 42310582854 finished (pid:19619)

where the very long number is a result of g_get_monotonic_time () (in microseconds) and the pid 19653 is my web-extension (WebProcess), while the pid 19619 is the evolution itself (UI process).

It shows that the web page&apos;s document-loaded signal (caught by web_page_document_loaded_cb) doesn&apos;t count with sub-frames and claims the page being loaded as soon as the main frame is populated.

Your proposal to add WebKitFrame::document-loaded signal doesn&apos;t scale, because:
a) I cannot connect to one central place, but should connect to the WebKitFrame instances;
b) How do I know that a frame instance had been created?
c) should I traverse the DOM several times to know whether a new frame had been added or not? That&apos;s quite inefficient and requires a complex code to maintain.

&gt; The UI process should wait for the document-loaded signal to allow the user
&gt; click on that button, or send a message to the extension, and the extension
&gt; should queue it until document-loaded happens.

See the debug prints above, it would still not work, because the WebKitPage::document-loaded signal is called when the inner frame content is not ready yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196225</commentid>
    <comment_count>11</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-05-24 23:59:58 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; That&apos;s indeed not the right way to do it. The web extension should emit a
&gt; &gt; signal when document loaded happens instead of relying on web view load
&gt; &gt; events that have nothing to do with dom bindings.
&gt; 
&gt; I am currently at commit 33e641672d5a84a0 of a webkit git master checkout,
&gt; the `git log` says: &quot;REGRESSION (r200638): -[DOMHTMLVideoElement play]
&gt; disappeared from ObjC bindings&quot; and at the end &quot;git-svn-id:
&gt; http://svn.webkit.org/repository/webkit/trunk@201212
&gt; 268f45cc-cd09-0410-ab3c-d52691b4dbfc&quot;.
&gt; 
&gt; I modified evolution&apos;s code to check these things in a way that there is
&gt; loaded a page with one iframe, (and the frame is a plain html), thus at the
&gt; end the structure looks roughly like this:
&gt;   &lt;html&gt;
&gt;   &lt;body&gt;
&gt;      &lt;iframe src=&quot;...&quot;&gt;&lt;/iframe&gt;
&gt;   &lt;/body&gt;
&gt;   &lt;/html&gt;
&gt; 
&gt; and the load of the iframe content is done asynchronously, where I added a 5
&gt; seconds delay to make things easier. The result of my debug prints is:
&gt; 
&gt; web_view_load_changed_cb: 42305544881 started (pid:19619)
&gt;    web_page_document_loaded_cb: 42305558657 (pid:19653)
&gt;      &gt; mail_request_process_mail_sync: 42305561698 waiting for 5 seconds
&gt; (pid:19619)
&gt;      &gt; mail_request_process_mail_sync: 42310561790 done wait for 5 seconds
&gt; (pid:19619)
&gt; web_view_load_changed_cb: 42310582854 finished (pid:19619)
&gt; 
&gt; where the very long number is a result of g_get_monotonic_time () (in
&gt; microseconds) and the pid 19653 is my web-extension (WebProcess), while the
&gt; pid 19619 is the evolution itself (UI process).
&gt; 
&gt; It shows that the web page&apos;s document-loaded signal (caught by
&gt; web_page_document_loaded_cb) doesn&apos;t count with sub-frames and claims the
&gt; page being loaded as soon as the main frame is populated.

Yes, we know it, as I said before we would need new API to cover other frames.

&gt; Your proposal to add WebKitFrame::document-loaded signal doesn&apos;t scale,
&gt; because:
&gt; a) I cannot connect to one central place, but should connect to the
&gt; WebKitFrame instances;
&gt; b) How do I know that a frame instance had been created?
&gt; c) should I traverse the DOM several times to know whether a new frame had
&gt; been added or not? That&apos;s quite inefficient and requires a complex code to
&gt; maintain.

It was not actually a proposal, just an idea, the details of the new API is what we should discuss here.

&gt; &gt; The UI process should wait for the document-loaded signal to allow the user
&gt; &gt; click on that button, or send a message to the extension, and the extension
&gt; &gt; should queue it until document-loaded happens.
&gt; 
&gt; See the debug prints above, it would still not work, because the
&gt; WebKitPage::document-loaded signal is called when the inner frame content is
&gt; not ready yet.

I haven&apos;t said the current API allows to do what you need, my only point is that if we need to add new API for your use case it has to be added to the web extensions API and not the UI process. What API specifically is something to be defined and your input here would help a lot. The way we usually do this is sending an email to the mailing list explaining the use case in detail, and proposing a possible API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196320</commentid>
    <comment_count>12</comment_count>
      <attachid>279764</attachid>
    <who name="Milan Crha">mcrha</who>
    <bug_when>2016-05-25 06:59:51 -0700</bug_when>
    <thetext>Created attachment 279764
proposed patch IV

Okay, then add it for the WebKitWebPage. I can change the evolution bits to move some parts into the web extension, but not everything. This particular thing about signalling element clicks can be moved with not much harm (the code will be slightly more complicated on the evolution side).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198118</commentid>
    <comment_count>13</comment_count>
      <attachid>279764</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-06-01 03:45:44 -0700</bug_when>
    <thetext>Comment on attachment 279764
proposed patch IV

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

LGTM, Carlos?

&gt; Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp:84
&gt; +    g_assert(frame_uri &amp;&amp; *frame_uri);

I would use a stronger assertion here if possible; it should only be called once, and the URI should end with unknown-file.html, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198120</commentid>
    <comment_count>14</comment_count>
      <attachid>279764</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-06-01 04:19:32 -0700</bug_when>
    <thetext>Comment on attachment 279764
proposed patch IV

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

Sorry, I forgot about this new patch. I don&apos;t think this is what we want though, see my comments below

&gt; Source/WebKit2/WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:60
&gt; +    FRAME_LOADED,

I don&apos;t think this belongs here. This could makes sense in the UI process where we don&apos;t expose frames, but in the web extensions API we have WebKitFrame, so there&apos;s no reason for adding frame related signals to the page object. One of the reasons why we didn&apos;t want to expose frames was because we had a lot of signals duplicated in web view and frame, making it confusing. The web view signals actually meant main frame events, so we had two ways of getting events for the main frame. I agree we would be making the same mistake again here if we add document-loaded signal to WebKitFrame. Fortunately in the web extensions API we only have one signal related to the frame, document-loaded, so maybe we can deprecate it and add a new one that receives the frame. Or deprecated it, and move it to WebKitFrame (I know we only have API to get the main frame yet, but we could add frame-created signal or something like that).

&gt; Source/WebKit2/WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:186
&gt; +        g_signal_emit(WEBKIT_WEB_PAGE(clientInfo), signals[FRAME_LOADED], 0, toImpl(frame)-&gt;coreFrame()-&gt;document()-&gt;url().string().utf8().data());

This is not frame-loaded, this should be frame-document-loaded or document-loaded-in-frame and it should receive a WebKitFrame, not a document URL.

&gt; Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp:81
&gt; +    const char* frame_uri = nullptr;

frame_uri -&gt; frameURI

&gt; Tools/TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp:139
&gt; +static void frameLoadedCallback(WebKitWebPage* webPage, const gchar* frame_uri, WebKitWebExtension* extension)

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198910</commentid>
    <comment_count>15</comment_count>
    <who name="Milan Crha">mcrha</who>
    <bug_when>2016-06-03 05:15:57 -0700</bug_when>
    <thetext>Hrm, this is embarrassing. It seems I made my initial tests incorrectly and the issue is not on the WebKitGTK+ side. I&apos;ve still applied the latest patch in my local checkout of the WebKitGTK+ from git, thus I can connect to both &quot;document-loaded&quot; and &quot;frame-loaded&quot; signals (the later is that added in my patch). I added debug prints into both handlers and into the WebkitWebView&apos;s &quot;load-event&quot; signal, to see when is delivered what. I also artificially slowed down subframe generations, thus there is a time for the system to receive the signals when needed. The result shows this sequence:

   WebView::load-event WEBKIT_LOAD_STARTED
   WebView::load-event WEBKIT_LOAD_COMMITTED
      WebPage::document-loaded
      WebPage::frame-loaded
      WebPage::frame-loaded
      ....
      WebPage::frame-loaded
   WebView::load-event WEBKIT_LOAD_FINISHED

and that&apos;s all.

It shows three things:
1) the WebPage::document-loaded is delivered when the main frame is loaded,
   but without the sub-iframe-s being available
2) the WebPage::frame-loaded is emitted before the UI part knows about
   the load finished
3) the WebView::load-event with WEBKIT_LOAD_FINISHED is received only after
   all the subframes are fully loaded

That means that my statement from comment #0 is false, it&apos;s not a &quot;matter of luck&quot;, it&apos;s more likely that I made something wrong in the Evolution.

Maybe the WebPage::frame-document-loaded could be found useful for someone in the future, but, as you indicated, you are trying not to expose frames in both the UI and the Web processes, then it&apos;s not needed to be added as of now, because the Evolution would not use it anyway (it&apos;ll use the 3) from the above, which it already does, though it can be that it does so in some odd way and it needs fixing on the Evolution side, not on the WebKitGTK+ side).

I&apos;m closing this due to these new findings. I&apos;m sorry for the false noise. I&apos;d not bother you, if I do my testing correctly at the first place. Thank you for your time.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279474</attachid>
            <date>2016-05-20 02:45:51 -0700</date>
            <delta_ts>2016-05-23 10:59:21 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>wk.patch</filename>
            <type>text/plain</type>
            <size>17213</size>
            <attacher name="Milan Crha">mcrha</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA0Zjg5N2U1Li4xYmVmMDk4
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMTYtMDUtMjAgIE1pbGFuIENyaGEgIDxtY3JoYUByZWRoYXQuY29tPgorCisgICAgICAgIFtH
VEtdIFByb3ZpZGUgZnJhbWUtcmVsYXRlZCBsb2FkIHNpZ25hbHMgaW4gV2ViS2l0V2ViVmlldwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3ODk5CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTb3VyY2Uv
Y21ha2UvT3B0aW9uc0dUSy5jbWFrZToKKwogMjAxNi0wNS0xOCAgR3dhbmcgWW9vbiBId2FuZyAg
PHlvb25AaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1N0cmVhbWVyXSBVc2UgRmFrZVNpbmsgdG8g
Z2V0IGEgZGVjb2RlZCB0ZXh0dXJlIGZyb20gYSBwaXBlbGluZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGNjNTlk
YzkuLjc2NzA1YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxNi0wNS0yMCAgTWls
YW4gQ3JoYSAgPG1jcmhhQHJlZGhhdC5jb20+CisKKyAgICAgICAgW0dUS10gUHJvdmlkZSBmcmFt
ZS1yZWxhdGVkIGxvYWQgc2lnbmFscyBpbiBXZWJLaXRXZWJWaWV3CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc4OTkKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dExvYWRlckNsaWVudC5jcHA6CisgICAgICAgIChMb2FkZXJDbGllbnQ6OmdldEZyYW1lVVJMKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcDoKKyAgICAgICAg
KHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdGcmFt
ZUxvYWRDaGFuZ2VkKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdGcmFtZUxvYWRGYWlsZWQpOgor
ICAgICAgICAod2Via2l0V2ViVmlld0ZyYW1lTG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oOgorCiAyMDE2LTA1LTE5ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgSW1wcm92ZSBjb21waWxlLXRp
bWUgYXNzZXJ0aW9ucyBpbiBpczw+KCkgLyBkb3duY2FzdDw+KCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdExvYWRlckNsaWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRMb2FkZXJDbGllbnQuY3BwCmluZGV4
IGY1MmM4YzcuLmM1NTUxMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdExvYWRlckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0TG9hZGVyQ2xpZW50LmNwcApAQCAtNDAsNTUgKzQwLDcxIEBAIHB1
YmxpYzoKICAgICB7CiAgICAgfQogCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGdldEZyYW1lVVJM
KGNvbnN0IFdlYkZyYW1lUHJveHkmIGZyYW1lKQorICAgIHsKKyAgICAgICAgaWYgKGZyYW1lLnVy
bCgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBmcmFtZS5wcm92aXNpb25hbFVSTCgp
LnV0ZjgoKS5kYXRhKCk7CisgICAgICAgIHJldHVybiBmcmFtZS51cmwoKS51dGY4KCkuZGF0YSgp
OworICAgIH0KIHByaXZhdGU6CiAgICAgdm9pZCBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZy
YW1lKFdlYlBhZ2VQcm94eSYsIFdlYkZyYW1lUHJveHkmIGZyYW1lLCBBUEk6Ok5hdmlnYXRpb24q
LCBBUEk6Ok9iamVjdCogLyogdXNlckRhdGEgKi8pIG92ZXJyaWRlCiAgICAgewotICAgICAgICBp
ZiAoIWZyYW1lLmlzTWFpbkZyYW1lKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHdl
YmtpdFdlYlZpZXdMb2FkQ2hhbmdlZChtX3dlYlZpZXcsIFdFQktJVF9MT0FEX1NUQVJURUQpOwor
ICAgICAgICBpZiAoZnJhbWUuaXNNYWluRnJhbWUoKSkKKyAgICAgICAgICAgIHdlYmtpdFdlYlZp
ZXdMb2FkQ2hhbmdlZChtX3dlYlZpZXcsIFdFQktJVF9MT0FEX1NUQVJURUQpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICB3ZWJraXRXZWJWaWV3RnJhbWVMb2FkQ2hhbmdlZChtX3dlYlZpZXcs
IGdldEZyYW1lVVJMKGZyYW1lKSwgV0VCS0lUX0xPQURfU1RBUlRFRCk7CiAgICAgfQogCiAgICAg
dm9pZCBkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZShX
ZWJQYWdlUHJveHkmLCBXZWJGcmFtZVByb3h5JiBmcmFtZSwgQVBJOjpOYXZpZ2F0aW9uKiwgQVBJ
OjpPYmplY3QqIC8qIHVzZXJEYXRhICovKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgaWYgKCFm
cmFtZS5pc01haW5GcmFtZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB3ZWJraXRX
ZWJWaWV3TG9hZENoYW5nZWQobV93ZWJWaWV3LCBXRUJLSVRfTE9BRF9SRURJUkVDVEVEKTsKKyAg
ICAgICAgaWYgKGZyYW1lLmlzTWFpbkZyYW1lKCkpCisgICAgICAgICAgICB3ZWJraXRXZWJWaWV3
TG9hZENoYW5nZWQobV93ZWJWaWV3LCBXRUJLSVRfTE9BRF9SRURJUkVDVEVEKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgd2Via2l0V2ViVmlld0ZyYW1lTG9hZENoYW5nZWQobV93ZWJWaWV3
LCBnZXRGcmFtZVVSTChmcmFtZSksIFdFQktJVF9MT0FEX1NUQVJURUQpOwogICAgIH0KIAogICAg
IHZvaWQgZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvckZvckZyYW1lKFdlYlBhZ2VQcm94
eSYsIFdlYkZyYW1lUHJveHkmIGZyYW1lLCBBUEk6Ok5hdmlnYXRpb24qLCBjb25zdCBSZXNvdXJj
ZUVycm9yJiByZXNvdXJjZUVycm9yLCBBUEk6Ok9iamVjdCogLyogdXNlckRhdGEgKi8pIG92ZXJy
aWRlCiAgICAgewotICAgICAgICBpZiAoIWZyYW1lLmlzTWFpbkZyYW1lKCkpCi0gICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIEdVbmlxdWVQdHI8R0Vycm9yPiBlcnJvcihnX2Vycm9yX25ld19s
aXRlcmFsKGdfcXVhcmtfZnJvbV9zdHJpbmcocmVzb3VyY2VFcnJvci5kb21haW4oKS51dGY4KCku
ZGF0YSgpKSwKICAgICAgICAgICAgIHRvV2ViS2l0RXJyb3IocmVzb3VyY2VFcnJvci5lcnJvckNv
ZGUoKSksIHJlc291cmNlRXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24oKS51dGY4KCkuZGF0YSgp
KSk7CiAgICAgICAgIGlmIChyZXNvdXJjZUVycm9yLnRsc0Vycm9ycygpKSB7Ci0gICAgICAgICAg
ICB3ZWJraXRXZWJWaWV3TG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMobV93ZWJWaWV3LCByZXNvdXJj
ZUVycm9yLmZhaWxpbmdVUkwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBlcnJvci5nZXQoKSwK
LSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxHVGxzQ2VydGlmaWNhdGVGbGFncz4ocmVzb3Vy
Y2VFcnJvci50bHNFcnJvcnMoKSksIHJlc291cmNlRXJyb3IuY2VydGlmaWNhdGUoKSk7Ci0gICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgaWYgKGZyYW1lLmlzTWFpbkZyYW1lKCkpIHsKKyAgICAg
ICAgICAgICAgICB3ZWJraXRXZWJWaWV3TG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMobV93ZWJWaWV3
LCByZXNvdXJjZUVycm9yLmZhaWxpbmdVUkwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBlcnJv
ci5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R1Rsc0NlcnRpZmljYXRl
RmxhZ3M+KHJlc291cmNlRXJyb3IudGxzRXJyb3JzKCkpLCByZXNvdXJjZUVycm9yLmNlcnRpZmlj
YXRlKCkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB3ZWJraXRXZWJW
aWV3RnJhbWVMb2FkRmFpbGVkV2l0aFRMU0Vycm9ycyhtX3dlYlZpZXcsIGdldEZyYW1lVVJMKGZy
YW1lKSwgcmVzb3VyY2VFcnJvci5mYWlsaW5nVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwg
ZXJyb3IuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEdUbHNDZXJ0aWZp
Y2F0ZUZsYWdzPihyZXNvdXJjZUVycm9yLnRsc0Vycm9ycygpKSwgcmVzb3VyY2VFcnJvci5jZXJ0
aWZpY2F0ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChmcmFtZS5pc01h
aW5GcmFtZSgpKQogICAgICAgICAgICAgd2Via2l0V2ViVmlld0xvYWRGYWlsZWQobV93ZWJWaWV3
LCBXRUJLSVRfTE9BRF9TVEFSVEVELCByZXNvdXJjZUVycm9yLmZhaWxpbmdVUkwoKS5zdHJpbmco
KS51dGY4KCkuZGF0YSgpLCBlcnJvci5nZXQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHdlYmtpdFdlYlZpZXdGcmFtZUxvYWRGYWlsZWQobV93ZWJWaWV3LCBnZXRGcmFtZVVSTChmcmFt
ZSksIFdFQktJVF9MT0FEX1NUQVJURUQsIHJlc291cmNlRXJyb3IuZmFpbGluZ1VSTCgpLnN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCksIGVycm9yLmdldCgpKTsKICAgICB9CiAKICAgICB2b2lkIGRpZENv
bW1pdExvYWRGb3JGcmFtZShXZWJQYWdlUHJveHkmLCBXZWJGcmFtZVByb3h5JiBmcmFtZSwgQVBJ
OjpOYXZpZ2F0aW9uKiwgQVBJOjpPYmplY3QqIC8qIHVzZXJEYXRhICovKSBvdmVycmlkZQogICAg
IHsKLSAgICAgICAgaWYgKCFmcmFtZS5pc01haW5GcmFtZSgpKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB3ZWJraXRXZWJWaWV3TG9hZENoYW5nZWQobV93ZWJWaWV3LCBXRUJLSVRfTE9B
RF9DT01NSVRURUQpOworICAgICAgICBpZiAoZnJhbWUuaXNNYWluRnJhbWUoKSkKKyAgICAgICAg
ICAgIHdlYmtpdFdlYlZpZXdMb2FkQ2hhbmdlZChtX3dlYlZpZXcsIFdFQktJVF9MT0FEX0NPTU1J
VFRFRCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHdlYmtpdFdlYlZpZXdGcmFtZUxvYWRD
aGFuZ2VkKG1fd2ViVmlldywgZ2V0RnJhbWVVUkwoZnJhbWUpLCBXRUJLSVRfTE9BRF9DT01NSVRU
RUQpOwogICAgIH0KIAogICAgIHZvaWQgZGlkRmluaXNoTG9hZEZvckZyYW1lKFdlYlBhZ2VQcm94
eSYsIFdlYkZyYW1lUHJveHkmIGZyYW1lLCBBUEk6Ok5hdmlnYXRpb24qLCBBUEk6Ok9iamVjdCog
LyogdXNlckRhdGEgKi8pIG92ZXJyaWRlCiAgICAgewotICAgICAgICBpZiAoIWZyYW1lLmlzTWFp
bkZyYW1lKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHdlYmtpdFdlYlZpZXdMb2Fk
Q2hhbmdlZChtX3dlYlZpZXcsIFdFQktJVF9MT0FEX0ZJTklTSEVEKTsKKyAgICAgICAgaWYgKGZy
YW1lLmlzTWFpbkZyYW1lKCkpCisgICAgICAgICAgICB3ZWJraXRXZWJWaWV3TG9hZENoYW5nZWQo
bV93ZWJWaWV3LCBXRUJLSVRfTE9BRF9GSU5JU0hFRCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHdlYmtpdFdlYlZpZXdGcmFtZUxvYWRDaGFuZ2VkKG1fd2ViVmlldywgZ2V0RnJhbWVVUkwo
ZnJhbWUpLCBXRUJLSVRfTE9BRF9GSU5JU0hFRCk7CiAgICAgfQogCiAgICAgdm9pZCBkaWRGYWls
TG9hZFdpdGhFcnJvckZvckZyYW1lKFdlYlBhZ2VQcm94eSYsIFdlYkZyYW1lUHJveHkmIGZyYW1l
LCBBUEk6Ok5hdmlnYXRpb24qLCBjb25zdCBSZXNvdXJjZUVycm9yJiByZXNvdXJjZUVycm9yLCBB
UEk6Ok9iamVjdCogLyogdXNlckRhdGEgKi8pIG92ZXJyaWRlCiAgICAgewotICAgICAgICBpZiAo
IWZyYW1lLmlzTWFpbkZyYW1lKCkpCi0gICAgICAgICAgICByZXR1cm47CiAgICAgICAgIEdVbmlx
dWVQdHI8R0Vycm9yPiBlcnJvcihnX2Vycm9yX25ld19saXRlcmFsKGdfcXVhcmtfZnJvbV9zdHJp
bmcocmVzb3VyY2VFcnJvci5kb21haW4oKS51dGY4KCkuZGF0YSgpKSwKICAgICAgICAgICAgIHRv
V2ViS2l0RXJyb3IocmVzb3VyY2VFcnJvci5lcnJvckNvZGUoKSksIHJlc291cmNlRXJyb3IubG9j
YWxpemVkRGVzY3JpcHRpb24oKS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgICAgIHdlYmtpdFdlYlZp
ZXdMb2FkRmFpbGVkKG1fd2ViVmlldywgV0VCS0lUX0xPQURfQ09NTUlUVEVELCByZXNvdXJjZUVy
cm9yLmZhaWxpbmdVUkwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBlcnJvci5nZXQoKSk7Cisg
ICAgICAgIGlmIChmcmFtZS5pc01haW5GcmFtZSgpKQorICAgICAgICAgICAgd2Via2l0V2ViVmll
d0xvYWRGYWlsZWQobV93ZWJWaWV3LCBXRUJLSVRfTE9BRF9DT01NSVRURUQsIHJlc291cmNlRXJy
b3IuZmFpbGluZ1VSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGVycm9yLmdldCgpKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgd2Via2l0V2ViVmlld0ZyYW1lTG9hZEZhaWxlZChtX3dl
YlZpZXcsIGdldEZyYW1lVVJMKGZyYW1lKSwgV0VCS0lUX0xPQURfQ09NTUlUVEVELCByZXNvdXJj
ZUVycm9yLmZhaWxpbmdVUkwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBlcnJvci5nZXQoKSk7
CiAgICAgfQogCiAgICAgdm9pZCBkaWREaXNwbGF5SW5zZWN1cmVDb250ZW50Rm9yRnJhbWUoV2Vi
UGFnZVByb3h5JiwgV2ViRnJhbWVQcm94eSYsIEFQSTo6T2JqZWN0KiAvKiB1c2VyRGF0YSAqLykg
b3ZlcnJpZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2ViVmlldy5jcHAKaW5kZXggOTZmZTFmYy4uNTE0ZTViYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKQEAgLTk5LDYgKzk5LDkg
QEAgZW51bSB7CiAgICAgTE9BRF9DSEFOR0VELAogICAgIExPQURfRkFJTEVELAogICAgIExPQURf
RkFJTEVEX1dJVEhfVExTX0VSUk9SUywKKyAgICBGUkFNRV9MT0FEX0NIQU5HRUQsCisgICAgRlJB
TUVfTE9BRF9GQUlMRUQsCisgICAgRlJBTUVfTE9BRF9GQUlMRURfV0lUSF9UTFNfRVJST1JTLAog
CiAgICAgQ1JFQVRFLAogICAgIFJFQURZX1RPX1NIT1csCkBAIC0xMTIyLDYgKzExMjUsMTA4IEBA
IHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFz
cyogd2ViVmlld0NsYXNzKQogICAgICAgICAgICAgR19UWVBFX1RMU19DRVJUSUZJQ0FURV9GTEFH
Uyk7CiAKICAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJWaWV3OjpmcmFtZS1sb2FkLWNoYW5nZWQ6
CisgICAgICogQHdlYl92aWV3OiB0aGUgI1dlYktpdFdlYlZpZXcgb24gd2hpY2ggdGhlIHNpZ25h
bCBpcyBlbWl0dGVkCisgICAgICogQGZyYW1lX3VyaTogVVJJIG9mIHRoZSBmcmFtZSwgd2hvc2Ug
bG9hZCBzdGF0ZSBjaGFuZ2VkCisgICAgICogQGxvYWRfZXZlbnQ6IHRoZSAjV2ViS2l0TG9hZEV2
ZW50CisgICAgICoKKyAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIGEgbG9hZCBvcGVyYXRpb24gb2Yg
b25lIG9mIHRoZSBmcmFtZXMKKyAgICAgKiBpbiBAd2ViX3ZpZXcgY2hhbmdlcy4KKyAgICAgKgor
ICAgICAqIEl0J3MgdGhlIHNhbWUgYXMgI1dlYktpdFdlYlZpZXc6OmxvYWQtY2hhbmdlZCwgZXhj
ZXB0IGl0IGlzIGludm9rZWQKKyAgICAgKiBmb3IgYW55IG9mIHRoZSBmcmFtZXMgaW4gdGhlIEB3
ZWJfdmlldy4gU2VlICNXZWJLaXRXZWJWaWV3Ojpsb2FkLWNoYW5nZWQKKyAgICAgKiBmb3IgbW9y
ZSBkZXRhaWxlZCBkZXNjcmlwdGlvbi4KKyAgICAgKgorICAgICAqIFNpbmNlOiAyLjE0CisgICAg
ICoqLworICAgIHNpZ25hbHNbRlJBTUVfTE9BRF9DSEFOR0VEXSA9CisgICAgICAgIGdfc2lnbmFs
X25ldygKKyAgICAgICAgICAgICJmcmFtZS1sb2FkLWNoYW5nZWQiLAorICAgICAgICAgICAgR19U
WVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAgIEdfU0lHTkFMX1JVTl9M
QVNULAorICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZpZXdDbGFzcywgZnJh
bWVfbG9hZF9jaGFuZ2VkKSwKKyAgICAgICAgICAgIDAsIDAsCisgICAgICAgICAgICBnX2NjbG9z
dXJlX21hcnNoYWxfZ2VuZXJpYywKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAyLAorICAgICAg
ICAgICAgR19UWVBFX1NUUklORywKKyAgICAgICAgICAgIFdFQktJVF9UWVBFX0xPQURfRVZFTlQp
OworCisgICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6ZnJhbWUtbG9hZC1mYWlsZWQ6Cisg
ICAgICogQHdlYl92aWV3OiB0aGUgI1dlYktpdFdlYlZpZXcgb24gd2hpY2ggdGhlIHNpZ25hbCBp
cyBlbWl0dGVkCisgICAgICogQGZyYW1lX3VyaTogVVJJIG9mIHRoZSBmcmFtZSwgd2hpY2ggZmFp
bGVkIHRvIGxvYWQKKyAgICAgKiBAbG9hZF9ldmVudDogdGhlICNXZWJLaXRMb2FkRXZlbnQgb2Yg
dGhlIGxvYWQgb3BlcmF0aW9uCisgICAgICogQGZhaWxpbmdfdXJpOiB0aGUgZnJhbWUgVVJJIHRo
YXQgZmFpbGVkIHRvIGxvYWQKKyAgICAgKiBAZXJyb3I6IHRoZSAjR0Vycm9yIHRoYXQgd2FzIHRy
aWdnZXJlZAorICAgICAqCisgICAgICogRW1pdHRlZCB3aGVuIGFuIGVycm9yIG9jY3VycyBkdXJp
bmcgYSBsb2FkIG9wZXJhdGlvbiBvZiBhbiBpbm5lciBmcmFtZS4KKyAgICAgKiBJZiB0aGUgZXJy
b3IgaGFwcGVuZWQgd2hlbiBzdGFydGluZyB0byBsb2FkIGRhdGEgZm9yIGEgcGFnZQorICAgICAq
IEBsb2FkX2V2ZW50IHdpbGwgYmUgJVdFQktJVF9MT0FEX1NUQVJURUQuIElmIGl0IGhhcHBlbmVk
IHdoaWxlCisgICAgICogbG9hZGluZyBhIGNvbW1pdHRlZCBkYXRhIHNvdXJjZSBAbG9hZF9ldmVu
dCB3aWxsIGJlICVXRUJLSVRfTE9BRF9DT01NSVRURUQuCisgICAgICogU2luY2UgYSBsb2FkIGVy
cm9yIGNhdXNlcyB0aGUgbG9hZCBvcGVyYXRpb24gdG8gZmluaXNoLCB0aGUgc2lnbmFsCisgICAg
ICogV2ViS2l0V2ViVmlldzo6ZnJhbWUtbG9hZC1jaGFuZ2VkIHdpbGwgYWx3YXlzIGJlIGVtaXR0
ZWQgd2l0aAorICAgICAqICVXRUJLSVRfTE9BRF9GSU5JU0hFRCBldmVudCByaWdodCBhZnRlciB0
aGlzIG9uZS4KKyAgICAgKgorICAgICAqIEJ5IGRlZmF1bHQsIGlmIHRoZSBzaWduYWwgaXMgbm90
IGhhbmRsZWQsIGEgc3RvY2sgZXJyb3IgcGFnZSB3aWxsIGJlIGRpc3BsYXllZC4KKyAgICAgKiBZ
b3UgbmVlZCB0byBoYW5kbGUgdGhlIHNpZ25hbCBpZiB5b3Ugd2FudCB0byBwcm92aWRlIHlvdXIg
b3duIGVycm9yIHBhZ2UuCisgICAgICoKKyAgICAgKiBSZXR1cm5zOiAlVFJVRSB0byBzdG9wIG90
aGVyIGhhbmRsZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3IgdGhlIGV2ZW50LgorICAgICAqICAg
ICVGQUxTRSB0byBwcm9wYWdhdGUgdGhlIGV2ZW50IGZ1cnRoZXIuCisgICAgICoKKyAgICAgKiBT
aW5jZTogMi4xNAorICAgICAqLworICAgIHNpZ25hbHNbRlJBTUVfTE9BRF9GQUlMRURdID0KKyAg
ICAgICAgZ19zaWduYWxfbmV3KAorICAgICAgICAgICAgImZyYW1lLWxvYWQtZmFpbGVkIiwKKyAg
ICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICBH
X1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRXZWJW
aWV3Q2xhc3MsIGZyYW1lX2xvYWRfZmFpbGVkKSwKKyAgICAgICAgICAgIGdfc2lnbmFsX2FjY3Vt
dWxhdG9yX3RydWVfaGFuZGxlZCwgMCwKKyAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9n
ZW5lcmljLAorICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDQsCisgICAgICAgICAgICBHX1RZ
UEVfU1RSSU5HLAorICAgICAgICAgICAgV0VCS0lUX1RZUEVfTE9BRF9FVkVOVCwKKyAgICAgICAg
ICAgIEdfVFlQRV9TVFJJTkcsCisgICAgICAgICAgICBHX1RZUEVfRVJST1IgfCBHX1NJR05BTF9U
WVBFX1NUQVRJQ19TQ09QRSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJWaWV3OjpmcmFt
ZS1sb2FkLWZhaWxlZC13aXRoLXRscy1lcnJvcnM6CisgICAgICogQHdlYl92aWV3OiB0aGUgI1dl
YktpdFdlYlZpZXcgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCisgICAgICogQGZyYW1l
X3VyaTogVVJJIG9mIHRoZSBmcmFtZSwgd2hpY2ggZmFpbGVkIHRvIGxvYWQKKyAgICAgKiBAZmFp
bGluZ191cmk6IHRoZSBmcmFtZSBVUkkgdGhhdCBmYWlsZWQgdG8gbG9hZAorICAgICAqIEBjZXJ0
aWZpY2F0ZTogYSAjR1Rsc0NlcnRpZmljYXRlCisgICAgICogQGVycm9yczogYSAjR1Rsc0NlcnRp
ZmljYXRlRmxhZ3Mgd2l0aCB0aGUgdmVyaWZpY2F0aW9uIHN0YXR1cyBvZiBAY2VydGlmaWNhdGUK
KyAgICAgKgorICAgICAqIEVtaXR0ZWQgd2hlbiBhIFRMUyBlcnJvciBvY2N1cnMgZHVyaW5nIGEg
bG9hZCBvcGVyYXRpb24gZm8gYW4gaW5uZXIgZnJhbWUuCisgICAgICogVG8gYWxsb3cgYW4gZXhj
ZXB0aW9uIGZvciB0aGlzIEBjZXJ0aWZpY2F0ZQorICAgICAqIGFuZCB0aGUgaG9zdCBvZiBAZmFp
bGluZ191cmkgdXNlIHdlYmtpdF93ZWJfY29udGV4dF9hbGxvd190bHNfY2VydGlmaWNhdGVfZm9y
X2hvc3QoKS4KKyAgICAgKgorICAgICAqIFRvIGhhbmRsZSB0aGlzIHNpZ25hbCBhc3luY2hyb25v
dXNseSB5b3Ugc2hvdWxkIGNhbGwgZ19vYmplY3RfcmVmKCkgb24gQGNlcnRpZmljYXRlCisgICAg
ICogYW5kIHJldHVybiAlVFJVRS4KKyAgICAgKgorICAgICAqIElmICVGQUxTRSBpcyByZXR1cm5l
ZCwgI1dlYktpdFdlYlZpZXc6OmZyYW1lLWxvYWQtZmFpbGVkIHdpbGwgYmUgZW1pdHRlZC4gVGhl
IGxvYWQKKyAgICAgKiB3aWxsIGZpbmlzaCByZWdhcmRsZXNzIG9mIHRoZSByZXR1cm5lZCB2YWx1
ZS4KKyAgICAgKgorICAgICAqIFJldHVybnM6ICVUUlVFIHRvIHN0b3Agb3RoZXIgaGFuZGxlcnMg
ZnJvbSBiZWluZyBpbnZva2VkIGZvciB0aGUgZXZlbnQuCisgICAgICogICAlRkFMU0UgdG8gcHJv
cGFnYXRlIHRoZSBldmVudCBmdXJ0aGVyLgorICAgICAqCisgICAgICogU2luY2U6IDIuMTQKKyAg
ICAgKi8KKyAgICBzaWduYWxzW0ZSQU1FX0xPQURfRkFJTEVEX1dJVEhfVExTX0VSUk9SU10gPQor
ICAgICAgICBnX3NpZ25hbF9uZXcoCisgICAgICAgICAgICAiZnJhbWUtbG9hZC1mYWlsZWQtd2l0
aC10bHMtZXJyb3JzIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFz
cyksCisgICAgICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgIEdfU1RSVUNU
X09GRlNFVChXZWJLaXRXZWJWaWV3Q2xhc3MsIGZyYW1lX2xvYWRfZmFpbGVkX3dpdGhfdGxzX2Vy
cm9ycyksCisgICAgICAgICAgICBnX3NpZ25hbF9hY2N1bXVsYXRvcl90cnVlX2hhbmRsZWQsIDAg
LyogYWNjdW11bGF0b3IgZGF0YSAqLywKKyAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9n
ZW5lcmljLAorICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDQsCisgICAgICAgICAgICBHX1RZ
UEVfU1RSSU5HLAorICAgICAgICAgICAgR19UWVBFX1NUUklORywKKyAgICAgICAgICAgIEdfVFlQ
RV9UTFNfQ0VSVElGSUNBVEUsCisgICAgICAgICAgICBHX1RZUEVfVExTX0NFUlRJRklDQVRFX0ZM
QUdTKTsKKworICAgIC8qKgogICAgICAqIFdlYktpdFdlYlZpZXc6OmNyZWF0ZToKICAgICAgKiBA
d2ViX3ZpZXc6IHRoZSAjV2ViS2l0V2ViVmlldyBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0
ZWQKICAgICAgKiBAbmF2aWdhdGlvbl9hY3Rpb246IGEgI1dlYktpdE5hdmlnYXRpb25BY3Rpb24K
QEAgLTE4MjcsNiArMTkzMiwzMSBAQCB2b2lkIHdlYmtpdFdlYlZpZXdMb2FkRmFpbGVkV2l0aFRM
U0Vycm9ycyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBjaGFyKiBmYQogICAgIGdfc2ln
bmFsX2VtaXQod2ViVmlldywgc2lnbmFsc1tMT0FEX0NIQU5HRURdLCAwLCBXRUJLSVRfTE9BRF9G
SU5JU0hFRCk7CiB9CiAKK3ZvaWQgd2Via2l0V2ViVmlld0ZyYW1lTG9hZENoYW5nZWQoV2ViS2l0
V2ViVmlldyogd2ViVmlldywgY29uc3QgY2hhciogdXJpLCBXZWJLaXRMb2FkRXZlbnQgbG9hZEV2
ZW50KQoreworICAgIGdfc2lnbmFsX2VtaXQod2ViVmlldywgc2lnbmFsc1tGUkFNRV9MT0FEX0NI
QU5HRURdLCAwLCB1cmksIGxvYWRFdmVudCk7Cit9CisKK3ZvaWQgd2Via2l0V2ViVmlld0ZyYW1l
TG9hZEZhaWxlZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBjaGFyKiB1cmksIFdlYktp
dExvYWRFdmVudCBsb2FkRXZlbnQsIGNvbnN0IGNoYXIqIGZhaWxpbmdVUkksIEdFcnJvciAqZXJy
b3IpCit7CisgICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWU7CisgICAgZ19zaWduYWxfZW1pdCh3ZWJW
aWV3LCBzaWduYWxzW0ZSQU1FX0xPQURfRkFJTEVEXSwgMCwgdXJpLCBsb2FkRXZlbnQsIGZhaWxp
bmdVUkksIGVycm9yLCAmcmV0dXJuVmFsdWUpOworICAgIGdfc2lnbmFsX2VtaXQod2ViVmlldywg
c2lnbmFsc1tGUkFNRV9MT0FEX0NIQU5HRURdLCAwLCB1cmksIFdFQktJVF9MT0FEX0ZJTklTSEVE
KTsKK30KKwordm9pZCB3ZWJraXRXZWJWaWV3RnJhbWVMb2FkRmFpbGVkV2l0aFRMU0Vycm9ycyhX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBjaGFyKiB1cmksIGNvbnN0IGNoYXIqIGZhaWxp
bmdVUkksIEdFcnJvciogZXJyb3IsIEdUbHNDZXJ0aWZpY2F0ZUZsYWdzIHRsc0Vycm9ycywgR1Rs
c0NlcnRpZmljYXRlKiBjZXJ0aWZpY2F0ZSkKK3sKKyAgICBXZWJLaXRUTFNFcnJvcnNQb2xpY3kg
dGxzRXJyb3JzUG9saWN5ID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF90bHNfZXJyb3JzX3BvbGlj
eSh3ZWJWaWV3LT5wcml2LT5jb250ZXh0LmdldCgpKTsKKyAgICBpZiAodGxzRXJyb3JzUG9saWN5
ID09IFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9GQUlMKSB7CisgICAgICAgIGdib29sZWFuIHJl
dHVyblZhbHVlOworICAgICAgICBnX3NpZ25hbF9lbWl0KHdlYlZpZXcsIHNpZ25hbHNbRlJBTUVf
TE9BRF9GQUlMRURfV0lUSF9UTFNfRVJST1JTXSwgMCwgdXJpLCBmYWlsaW5nVVJJLCBjZXJ0aWZp
Y2F0ZSwgdGxzRXJyb3JzLCAmcmV0dXJuVmFsdWUpOworICAgICAgICBpZiAoIXJldHVyblZhbHVl
KQorICAgICAgICAgICAgZ19zaWduYWxfZW1pdCh3ZWJWaWV3LCBzaWduYWxzW0ZSQU1FX0xPQURf
RkFJTEVEXSwgMCwgdXJpLCBXRUJLSVRfTE9BRF9TVEFSVEVELCBmYWlsaW5nVVJJLCBlcnJvciwg
JnJldHVyblZhbHVlKTsKKyAgICB9CisKKyAgICBnX3NpZ25hbF9lbWl0KHdlYlZpZXcsIHNpZ25h
bHNbRlJBTUVfTE9BRF9DSEFOR0VEXSwgMCwgdXJpLCBXRUJLSVRfTE9BRF9GSU5JU0hFRCk7Cit9
CisKIFdlYlBhZ2VQcm94eSogd2Via2l0V2ViVmlld0NyZWF0ZU5ld1BhZ2UoV2ViS2l0V2ViVmll
dyogd2ViVmlldywgY29uc3QgV2luZG93RmVhdHVyZXMmIHdpbmRvd0ZlYXR1cmVzLCBXZWJLaXRO
YXZpZ2F0aW9uQWN0aW9uKiBuYXZpZ2F0aW9uQWN0aW9uKQogewogICAgIFdlYktpdFdlYlZpZXcq
IG5ld1dlYlZpZXc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJWaWV3LmgKaW5kZXggNzAwOTY4Zi4uOWE0ZDAwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaApAQCAtMjQ5LDYgKzI0OSwyMCBA
QCBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdDbGFzcyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXROb3RpZmljYXRpb24gICAgICAgICAgKm5vdGlm
aWNhdGlvbik7CiAgICAgZ2Jvb2xlYW4gICAoKiBydW5fY29sb3JfY2hvb3NlcikgICAgICAgICAg
IChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICAgKndlYl92aWV3LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0Q29sb3JDaG9vc2VyUmVxdWVz
dCAgICpyZXF1ZXN0KTsKKyAgICB2b2lkICAgICAgICgqIGZyYW1lX2xvYWRfY2hhbmdlZCkgICAg
ICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAg
ICAgICAgICAgKmZyYW1lX3VyaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdlYktpdExvYWRFdmVudCAgICAgICAgICAgICAgbG9hZF9ldmVudCk7Cisg
ICAgZ2Jvb2xlYW4gICAoKiBmcmFtZV9sb2FkX2ZhaWxlZCkgICAgICAgICAgIChXZWJLaXRXZWJW
aWV3ICAgICAgICAgICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgICAgICpmcmFtZV91
cmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJL
aXRMb2FkRXZlbnQgICAgICAgICAgICAgIGxvYWRfZXZlbnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICAg
KmZhaWxpbmdfdXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0Vycm9yICAgICAgICAgICAgICAgICAgICAgICplcnJvcik7CisgICAgZ2Jvb2xlYW4g
ICAoKiBmcmFtZV9sb2FkX2ZhaWxlZF93aXRoX3Rsc19lcnJvcnMpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAg
ICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgICAgICpmcmFtZV91cmksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAg
ICAgICAgICAgKmZhaWxpbmdfdXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR1Rsc0NlcnRpZmljYXRlICAgICAgICAgICAgICpjZXJ0aWZpY2F0ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUbHNDZXJ0
aWZpY2F0ZUZsYWdzICAgICAgICAgZXJyb3JzKTsKIAogICAgIHZvaWQgKCpfd2Via2l0X3Jlc2Vy
dmVkMCkgKHZvaWQpOwogICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMSkgKHZvaWQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1By
aXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQ
cml2YXRlLmgKaW5kZXggNjFlMGE1NS4uODc4YmE0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oCkBAIC0zNyw2
ICszNyw5IEBACiB2b2lkIHdlYmtpdFdlYlZpZXdMb2FkQ2hhbmdlZChXZWJLaXRXZWJWaWV3Kiwg
V2ViS2l0TG9hZEV2ZW50KTsKIHZvaWQgd2Via2l0V2ViVmlld0xvYWRGYWlsZWQoV2ViS2l0V2Vi
VmlldyosIFdlYktpdExvYWRFdmVudCwgY29uc3QgY2hhciogZmFpbGluZ1VSSSwgR0Vycm9yKik7
CiB2b2lkIHdlYmtpdFdlYlZpZXdMb2FkRmFpbGVkV2l0aFRMU0Vycm9ycyhXZWJLaXRXZWJWaWV3
KiwgY29uc3QgY2hhciogZmFpbGluZ1VSSSwgR0Vycm9yKiwgR1Rsc0NlcnRpZmljYXRlRmxhZ3Ms
IEdUbHNDZXJ0aWZpY2F0ZSopOwordm9pZCB3ZWJraXRXZWJWaWV3RnJhbWVMb2FkQ2hhbmdlZChX
ZWJLaXRXZWJWaWV3KiwgY29uc3QgY2hhciogdXJpLCBXZWJLaXRMb2FkRXZlbnQpOwordm9pZCB3
ZWJraXRXZWJWaWV3RnJhbWVMb2FkRmFpbGVkKFdlYktpdFdlYlZpZXcqLCBjb25zdCBjaGFyKiB1
cmksIFdlYktpdExvYWRFdmVudCwgY29uc3QgY2hhciogZmFpbGluZ1VSSSwgR0Vycm9yKik7Cit2
b2lkIHdlYmtpdFdlYlZpZXdGcmFtZUxvYWRGYWlsZWRXaXRoVExTRXJyb3JzKFdlYktpdFdlYlZp
ZXcqLCBjb25zdCBjaGFyKiB1cmksIGNvbnN0IGNoYXIqIGZhaWxpbmdVUkksIEdFcnJvciosIEdU
bHNDZXJ0aWZpY2F0ZUZsYWdzLCBHVGxzQ2VydGlmaWNhdGUqKTsKIFdlYktpdDo6V2ViUGFnZVBy
b3h5KiB3ZWJraXRXZWJWaWV3Q3JlYXRlTmV3UGFnZShXZWJLaXRXZWJWaWV3KiwgY29uc3QgV2Vi
Q29yZTo6V2luZG93RmVhdHVyZXMmLCBXZWJLaXROYXZpZ2F0aW9uQWN0aW9uKik7CiB2b2lkIHdl
YmtpdFdlYlZpZXdSZWFkeVRvU2hvd1BhZ2UoV2ViS2l0V2ViVmlldyopOwogdm9pZCB3ZWJraXRX
ZWJWaWV3UnVuQXNNb2RhbChXZWJLaXRXZWJWaWV3Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21h
a2UvT3B0aW9uc0dUSy5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCmluZGV4
IGFhZThmZTguLjQ1ODQzMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNt
YWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCkBAIC0xNSw3ICsxNSw3IEBA
IGVuZGlmICgpCiAKICMgTGlidG9vbCBsaWJyYXJ5IHZlcnNpb24sIG5vdCB0byBiZSBjb25mdXNl
ZCB3aXRoIEFQSSB2ZXJzaW9uLgogIyBTZWUgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xp
YnRvb2wvbWFudWFsL2h0bWxfbm9kZS9MaWJ0b29sLXZlcnNpb25pbmcuaHRtbAotQ0FMQ1VMQVRF
X0xJQlJBUllfVkVSU0lPTlNfRlJPTV9MSUJUT09MX1RSSVBMRShXRUJLSVQyIDUxIDAgMTQpCitD
QUxDVUxBVEVfTElCUkFSWV9WRVJTSU9OU19GUk9NX0xJQlRPT0xfVFJJUExFKFdFQktJVDIgNTIg
MCAxNCkKIENBTENVTEFURV9MSUJSQVJZX1ZFUlNJT05TX0ZST01fTElCVE9PTF9UUklQTEUoSkFW
QVNDUklQVENPUkUgMjIgMCA0KQogCiAjIFRoZXNlIGFyZSBzaGFyZWQgdmFyaWFibGVzLCBidXQg
d2Ugc3BlY2lhbCBjYXNlIHRoZWlyIGRlZmluaXRpb24gc28gdGhhdCB3ZSBjYW4gdXNlIHRoZQo=
</data>
<flag name="review"
          id="303523"
          type_id="1"
          status="-"
          setter="mcatanzaro"
    />
    <flag name="commit-queue"
          id="303524"
          type_id="3"
          status="-"
          setter="mcatanzaro"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279568</attachid>
            <date>2016-05-23 10:48:02 -0700</date>
            <delta_ts>2016-05-24 01:18:25 -0700</delta_ts>
            <desc>proposed patch ][</desc>
            <filename>wk.patch</filename>
            <type>text/plain</type>
            <size>35794</size>
            <attacher name="Milan Crha">mcrha</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBjYzU5ZGM5Li45MTQyY2NjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMTYtMDUtMjMgIE1pbGFuIENyaGEgIDxtY3JoYUByZWRoYXQuY29tPgorCisgICAgICAg
IFtHVEtdIFByb3ZpZGUgZnJhbWUtcmVsYXRlZCBsb2FkIHNpZ25hbHMgaW4gV2ViS2l0V2ViVmll
dworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3ODk5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRMb2FkZXJDbGllbnQuY3BwOgorICAgICAgICAoTG9hZGVyQ2xp
ZW50OjpnZXRGcmFtZVVSTCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Vmlldy5jcHA6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdCk6CisgICAgICAg
ICh3ZWJraXRXZWJWaWV3TG9hZEZhaWxlZCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3RnJhbWVM
b2FkQ2hhbmdlZCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3RnJhbWVMb2FkRmFpbGVkKToKKyAg
ICAgICAgKHdlYmtpdFdlYlZpZXdGcmFtZUxvYWRGYWlsZWRXaXRoVExTRXJyb3JzKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3Lmg6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaDoKKwogMjAxNi0wNS0xOSAgQ2hyaXMg
RHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEltcHJvdmUgY29tcGlsZS10aW1l
IGFzc2VydGlvbnMgaW4gaXM8PigpIC8gZG93bmNhc3Q8PigpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRMb2FkZXJDbGllbnQuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TG9hZGVyQ2xpZW50LmNwcAppbmRleCBm
NTJjOGM3Li5iZTU3ZGMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRMb2FkZXJDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdExvYWRlckNsaWVudC5jcHAKQEAgLTQxLDU0ICs0MSw3MSBAQCBwdWJs
aWM6CiAgICAgfQogCiBwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBnZXRGcmFtZVVS
TChjb25zdCBXZWJGcmFtZVByb3h5JiBmcmFtZSkKKyAgICB7CisgICAgICAgIGlmIChmcmFtZS51
cmwoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gZnJhbWUucHJvdmlzaW9uYWxVUkwo
KS51dGY4KCkuZGF0YSgpOworICAgICAgICByZXR1cm4gZnJhbWUudXJsKCkudXRmOCgpLmRhdGEo
KTsKKyAgICB9CisKICAgICB2b2lkIGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUoV2Vi
UGFnZVByb3h5JiwgV2ViRnJhbWVQcm94eSYgZnJhbWUsIEFQSTo6TmF2aWdhdGlvbiosIEFQSTo6
T2JqZWN0KiAvKiB1c2VyRGF0YSAqLykgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGlmICghZnJh
bWUuaXNNYWluRnJhbWUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgd2Via2l0V2Vi
Vmlld0xvYWRDaGFuZ2VkKG1fd2ViVmlldywgV0VCS0lUX0xPQURfU1RBUlRFRCk7CisgICAgICAg
IGlmIChmcmFtZS5pc01haW5GcmFtZSgpKQorICAgICAgICAgICAgd2Via2l0V2ViVmlld0xvYWRD
aGFuZ2VkKG1fd2ViVmlldywgV0VCS0lUX0xPQURfU1RBUlRFRCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHdlYmtpdFdlYlZpZXdGcmFtZUxvYWRDaGFuZ2VkKG1fd2ViVmlldywgZ2V0RnJh
bWVVUkwoZnJhbWUpLCBXRUJLSVRfTE9BRF9TVEFSVEVEKTsKICAgICB9CiAKICAgICB2b2lkIGRp
ZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKFdlYlBhZ2VQ
cm94eSYsIFdlYkZyYW1lUHJveHkmIGZyYW1lLCBBUEk6Ok5hdmlnYXRpb24qLCBBUEk6Ok9iamVj
dCogLyogdXNlckRhdGEgKi8pIG92ZXJyaWRlCiAgICAgewotICAgICAgICBpZiAoIWZyYW1lLmlz
TWFpbkZyYW1lKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHdlYmtpdFdlYlZpZXdM
b2FkQ2hhbmdlZChtX3dlYlZpZXcsIFdFQktJVF9MT0FEX1JFRElSRUNURUQpOworICAgICAgICBp
ZiAoZnJhbWUuaXNNYWluRnJhbWUoKSkKKyAgICAgICAgICAgIHdlYmtpdFdlYlZpZXdMb2FkQ2hh
bmdlZChtX3dlYlZpZXcsIFdFQktJVF9MT0FEX1JFRElSRUNURUQpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICB3ZWJraXRXZWJWaWV3RnJhbWVMb2FkQ2hhbmdlZChtX3dlYlZpZXcsIGdldEZy
YW1lVVJMKGZyYW1lKSwgV0VCS0lUX0xPQURfUkVESVJFQ1RFRCk7CiAgICAgfQogCiAgICAgdm9p
ZCBkaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yRm9yRnJhbWUoV2ViUGFnZVByb3h5Jiwg
V2ViRnJhbWVQcm94eSYgZnJhbWUsIEFQSTo6TmF2aWdhdGlvbiosIGNvbnN0IFJlc291cmNlRXJy
b3ImIHJlc291cmNlRXJyb3IsIEFQSTo6T2JqZWN0KiAvKiB1c2VyRGF0YSAqLykgb3ZlcnJpZGUK
ICAgICB7Ci0gICAgICAgIGlmICghZnJhbWUuaXNNYWluRnJhbWUoKSkKLSAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgR1VuaXF1ZVB0cjxHRXJyb3I+IGVycm9yKGdfZXJyb3JfbmV3X2xpdGVy
YWwoZ19xdWFya19mcm9tX3N0cmluZyhyZXNvdXJjZUVycm9yLmRvbWFpbigpLnV0ZjgoKS5kYXRh
KCkpLAogICAgICAgICAgICAgdG9XZWJLaXRFcnJvcihyZXNvdXJjZUVycm9yLmVycm9yQ29kZSgp
KSwgcmVzb3VyY2VFcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCkpKTsK
ICAgICAgICAgaWYgKHJlc291cmNlRXJyb3IudGxzRXJyb3JzKCkpIHsKLSAgICAgICAgICAgIHdl
YmtpdFdlYlZpZXdMb2FkRmFpbGVkV2l0aFRMU0Vycm9ycyhtX3dlYlZpZXcsIHJlc291cmNlRXJy
b3IuZmFpbGluZ1VSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGVycm9yLmdldCgpLAotICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PEdUbHNDZXJ0aWZpY2F0ZUZsYWdzPihyZXNvdXJjZUVy
cm9yLnRsc0Vycm9ycygpKSwgcmVzb3VyY2VFcnJvci5jZXJ0aWZpY2F0ZSgpKTsKLSAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBpZiAoZnJhbWUuaXNNYWluRnJhbWUoKSkgeworICAgICAgICAg
ICAgICAgIHdlYmtpdFdlYlZpZXdMb2FkRmFpbGVkV2l0aFRMU0Vycm9ycyhtX3dlYlZpZXcsIHJl
c291cmNlRXJyb3IuZmFpbGluZ1VSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGVycm9yLmdl
dCgpLAorICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxHVGxzQ2VydGlmaWNhdGVGbGFn
cz4ocmVzb3VyY2VFcnJvci50bHNFcnJvcnMoKSksIHJlc291cmNlRXJyb3IuY2VydGlmaWNhdGUo
KSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHdlYmtpdFdlYlZpZXdG
cmFtZUxvYWRGYWlsZWRXaXRoVExTRXJyb3JzKG1fd2ViVmlldywgcmVzb3VyY2VFcnJvci5mYWls
aW5nVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgZXJyb3IuZ2V0KCksCisgICAgICAgICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PEdUbHNDZXJ0aWZpY2F0ZUZsYWdzPihyZXNvdXJjZUVycm9y
LnRsc0Vycm9ycygpKSwgcmVzb3VyY2VFcnJvci5jZXJ0aWZpY2F0ZSgpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlIGlmIChmcmFtZS5pc01haW5GcmFtZSgpKQogICAgICAgICAgICAg
d2Via2l0V2ViVmlld0xvYWRGYWlsZWQobV93ZWJWaWV3LCBXRUJLSVRfTE9BRF9TVEFSVEVELCBy
ZXNvdXJjZUVycm9yLmZhaWxpbmdVUkwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBlcnJvci5n
ZXQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHdlYmtpdFdlYlZpZXdGcmFtZUxvYWRG
YWlsZWQobV93ZWJWaWV3LCBXRUJLSVRfTE9BRF9TVEFSVEVELCByZXNvdXJjZUVycm9yLmZhaWxp
bmdVUkwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBlcnJvci5nZXQoKSk7CiAgICAgfQogCiAg
ICAgdm9pZCBkaWRDb21taXRMb2FkRm9yRnJhbWUoV2ViUGFnZVByb3h5JiwgV2ViRnJhbWVQcm94
eSYgZnJhbWUsIEFQSTo6TmF2aWdhdGlvbiosIEFQSTo6T2JqZWN0KiAvKiB1c2VyRGF0YSAqLykg
b3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGlmICghZnJhbWUuaXNNYWluRnJhbWUoKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgd2Via2l0V2ViVmlld0xvYWRDaGFuZ2VkKG1fd2ViVmll
dywgV0VCS0lUX0xPQURfQ09NTUlUVEVEKTsKKyAgICAgICAgaWYgKGZyYW1lLmlzTWFpbkZyYW1l
KCkpCisgICAgICAgICAgICB3ZWJraXRXZWJWaWV3TG9hZENoYW5nZWQobV93ZWJWaWV3LCBXRUJL
SVRfTE9BRF9DT01NSVRURUQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB3ZWJraXRXZWJW
aWV3RnJhbWVMb2FkQ2hhbmdlZChtX3dlYlZpZXcsIGdldEZyYW1lVVJMKGZyYW1lKSwgV0VCS0lU
X0xPQURfQ09NTUlUVEVEKTsKICAgICB9CiAKICAgICB2b2lkIGRpZEZpbmlzaExvYWRGb3JGcmFt
ZShXZWJQYWdlUHJveHkmLCBXZWJGcmFtZVByb3h5JiBmcmFtZSwgQVBJOjpOYXZpZ2F0aW9uKiwg
QVBJOjpPYmplY3QqIC8qIHVzZXJEYXRhICovKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgaWYg
KCFmcmFtZS5pc01haW5GcmFtZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB3ZWJr
aXRXZWJWaWV3TG9hZENoYW5nZWQobV93ZWJWaWV3LCBXRUJLSVRfTE9BRF9GSU5JU0hFRCk7Cisg
ICAgICAgIGlmIChmcmFtZS5pc01haW5GcmFtZSgpKQorICAgICAgICAgICAgd2Via2l0V2ViVmll
d0xvYWRDaGFuZ2VkKG1fd2ViVmlldywgV0VCS0lUX0xPQURfRklOSVNIRUQpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICB3ZWJraXRXZWJWaWV3RnJhbWVMb2FkQ2hhbmdlZChtX3dlYlZpZXcs
IGdldEZyYW1lVVJMKGZyYW1lKSwgV0VCS0lUX0xPQURfRklOSVNIRUQpOwogICAgIH0KIAogICAg
IHZvaWQgZGlkRmFpbExvYWRXaXRoRXJyb3JGb3JGcmFtZShXZWJQYWdlUHJveHkmLCBXZWJGcmFt
ZVByb3h5JiBmcmFtZSwgQVBJOjpOYXZpZ2F0aW9uKiwgY29uc3QgUmVzb3VyY2VFcnJvciYgcmVz
b3VyY2VFcnJvciwgQVBJOjpPYmplY3QqIC8qIHVzZXJEYXRhICovKSBvdmVycmlkZQogICAgIHsK
LSAgICAgICAgaWYgKCFmcmFtZS5pc01haW5GcmFtZSgpKQotICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICBHVW5pcXVlUHRyPEdFcnJvcj4gZXJyb3IoZ19lcnJvcl9uZXdfbGl0ZXJhbChnX3F1
YXJrX2Zyb21fc3RyaW5nKHJlc291cmNlRXJyb3IuZG9tYWluKCkudXRmOCgpLmRhdGEoKSksCiAg
ICAgICAgICAgICB0b1dlYktpdEVycm9yKHJlc291cmNlRXJyb3IuZXJyb3JDb2RlKCkpLCByZXNv
dXJjZUVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCkudXRmOCgpLmRhdGEoKSkpOwotICAgICAg
ICB3ZWJraXRXZWJWaWV3TG9hZEZhaWxlZChtX3dlYlZpZXcsIFdFQktJVF9MT0FEX0NPTU1JVFRF
RCwgcmVzb3VyY2VFcnJvci5mYWlsaW5nVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgZXJy
b3IuZ2V0KCkpOworICAgICAgICBpZiAoZnJhbWUuaXNNYWluRnJhbWUoKSkKKyAgICAgICAgICAg
IHdlYmtpdFdlYlZpZXdMb2FkRmFpbGVkKG1fd2ViVmlldywgV0VCS0lUX0xPQURfQ09NTUlUVEVE
LCByZXNvdXJjZUVycm9yLmZhaWxpbmdVUkwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBlcnJv
ci5nZXQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHdlYmtpdFdlYlZpZXdGcmFtZUxv
YWRGYWlsZWQobV93ZWJWaWV3LCBXRUJLSVRfTE9BRF9DT01NSVRURUQsIHJlc291cmNlRXJyb3Iu
ZmFpbGluZ1VSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGVycm9yLmdldCgpKTsKICAgICB9
CiAKICAgICB2b2lkIGRpZERpc3BsYXlJbnNlY3VyZUNvbnRlbnRGb3JGcmFtZShXZWJQYWdlUHJv
eHkmLCBXZWJGcmFtZVByb3h5JiwgQVBJOjpPYmplY3QqIC8qIHVzZXJEYXRhICovKSBvdmVycmlk
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Vmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
LmNwcAppbmRleCA5NmZlMWZjLi45N2RlNDA1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKQEAgLTk5LDYgKzk5LDkgQEAgZW51
bSB7CiAgICAgTE9BRF9DSEFOR0VELAogICAgIExPQURfRkFJTEVELAogICAgIExPQURfRkFJTEVE
X1dJVEhfVExTX0VSUk9SUywKKyAgICBGUkFNRV9MT0FEX0NIQU5HRUQsCisgICAgRlJBTUVfTE9B
RF9GQUlMRUQsCisgICAgRlJBTUVfTE9BRF9GQUlMRURfV0lUSF9UTFNfRVJST1JTLAogCiAgICAg
Q1JFQVRFLAogICAgIFJFQURZX1RPX1NIT1csCkBAIC0xMTIyLDYgKzExMjUsMTA0IEBAIHN0YXRp
YyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyogd2Vi
Vmlld0NsYXNzKQogICAgICAgICAgICAgR19UWVBFX1RMU19DRVJUSUZJQ0FURV9GTEFHUyk7CiAK
ICAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJWaWV3OjpmcmFtZS1sb2FkLWNoYW5nZWQ6CisgICAg
ICogQHdlYl92aWV3OiB0aGUgI1dlYktpdFdlYlZpZXcgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBl
bWl0dGVkCisgICAgICogQGZyYW1lX3VyaTogVVJJIG9mIHRoZSBmcmFtZSwgd2hvc2UgbG9hZCBz
dGF0ZSBjaGFuZ2VkCisgICAgICogQGxvYWRfZXZlbnQ6IHRoZSAjV2ViS2l0TG9hZEV2ZW50Cisg
ICAgICoKKyAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIGEgbG9hZCBvcGVyYXRpb24gb2Ygb25lIG9m
IHRoZSBmcmFtZXMKKyAgICAgKiBpbiBAd2ViX3ZpZXcgY2hhbmdlcy4KKyAgICAgKgorICAgICAq
IEl0J3MgdGhlIHNhbWUgYXMgI1dlYktpdFdlYlZpZXc6OmxvYWQtY2hhbmdlZCwgZXhjZXB0IGl0
IGlzIGludm9rZWQKKyAgICAgKiBmb3IgYW55IG9mIHRoZSBmcmFtZXMgaW4gdGhlIEB3ZWJfdmll
dywgYnV0IHRoZSBtYWluIGZyYW1lLgorICAgICAqIFNlZSAjV2ViS2l0V2ViVmlldzo6bG9hZC1j
aGFuZ2VkIGZvciBhIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24uCisgICAgICoKKyAgICAgKiBT
aW5jZTogMi4xNAorICAgICAqKi8KKyAgICBzaWduYWxzW0ZSQU1FX0xPQURfQ0hBTkdFRF0gPQor
ICAgICAgICBnX3NpZ25hbF9uZXcoCisgICAgICAgICAgICAiZnJhbWUtbG9hZC1jaGFuZ2VkIiwK
KyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAg
ICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRX
ZWJWaWV3Q2xhc3MsIGZyYW1lX2xvYWRfY2hhbmdlZCksCisgICAgICAgICAgICAwLCAwLAorICAg
ICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX2dlbmVyaWMsCisgICAgICAgICAgICBHX1RZUEVf
Tk9ORSwgMiwKKyAgICAgICAgICAgIEdfVFlQRV9TVFJJTkcsCisgICAgICAgICAgICBXRUJLSVRf
VFlQRV9MT0FEX0VWRU5UKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFdlYlZpZXc6OmZyYW1l
LWxvYWQtZmFpbGVkOgorICAgICAqIEB3ZWJfdmlldzogdGhlICNXZWJLaXRXZWJWaWV3IG9uIHdo
aWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAorICAgICAqIEBsb2FkX2V2ZW50OiB0aGUgI1dlYktp
dExvYWRFdmVudCBvZiB0aGUgbG9hZCBvcGVyYXRpb24KKyAgICAgKiBAZmFpbGluZ191cmk6IHRo
ZSBmcmFtZSBVUkkgdGhhdCBmYWlsZWQgdG8gbG9hZAorICAgICAqIEBlcnJvcjogdGhlICNHRXJy
b3IgdGhhdCB3YXMgdHJpZ2dlcmVkCisgICAgICoKKyAgICAgKiBFbWl0dGVkIHdoZW4gYW4gZXJy
b3Igb2NjdXJzIGR1cmluZyBhIGxvYWQgb3BlcmF0aW9uIG9mIGFuIGlubmVyIGZyYW1lLgorICAg
ICAqIElmIHRoZSBlcnJvciBoYXBwZW5lZCB3aGVuIHN0YXJ0aW5nIHRvIGxvYWQgZGF0YSBmb3Ig
YSBwYWdlCisgICAgICogQGxvYWRfZXZlbnQgd2lsbCBiZSAlV0VCS0lUX0xPQURfU1RBUlRFRC4g
SWYgaXQgaGFwcGVuZWQgd2hpbGUKKyAgICAgKiBsb2FkaW5nIGEgY29tbWl0dGVkIGRhdGEgc291
cmNlIEBsb2FkX2V2ZW50IHdpbGwgYmUgJVdFQktJVF9MT0FEX0NPTU1JVFRFRC4KKyAgICAgKiBT
aW5jZSBhIGxvYWQgZXJyb3IgY2F1c2VzIHRoZSBsb2FkIG9wZXJhdGlvbiB0byBmaW5pc2gsIHRo
ZSBzaWduYWwKKyAgICAgKiBXZWJLaXRXZWJWaWV3OjpmcmFtZS1sb2FkLWNoYW5nZWQgd2lsbCBh
bHdheXMgYmUgZW1pdHRlZCB3aXRoCisgICAgICogdGhlICVXRUJLSVRfTE9BRF9GSU5JU0hFRCBl
dmVudCByaWdodCBhZnRlciB0aGlzIG9uZS4KKyAgICAgKgorICAgICAqIEJ5IGRlZmF1bHQsIGlm
IHRoZSBzaWduYWwgaXMgbm90IGhhbmRsZWQsIGEgc3RvY2sgZXJyb3IgcGFnZSB3aWxsIGJlIGRp
c3BsYXllZC4KKyAgICAgKiBZb3UgbmVlZCB0byBoYW5kbGUgdGhlIHNpZ25hbCBpZiB5b3Ugd2Fu
dCB0byBwcm92aWRlIHlvdXIgb3duIGVycm9yIHBhZ2UuCisgICAgICoKKyAgICAgKiBSZXR1cm5z
OiAlVFJVRSB0byBzdG9wIG90aGVyIGhhbmRsZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3IgdGhl
IGV2ZW50LgorICAgICAqICAgICVGQUxTRSB0byBwcm9wYWdhdGUgdGhlIGV2ZW50IGZ1cnRoZXIu
CisgICAgICoKKyAgICAgKiBTaW5jZTogMi4xNAorICAgICAqLworICAgIHNpZ25hbHNbRlJBTUVf
TE9BRF9GQUlMRURdID0KKyAgICAgICAgZ19zaWduYWxfbmV3KAorICAgICAgICAgICAgImZyYW1l
LWxvYWQtZmFpbGVkIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFz
cyksCisgICAgICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgIEdfU1RSVUNU
X09GRlNFVChXZWJLaXRXZWJWaWV3Q2xhc3MsIGZyYW1lX2xvYWRfZmFpbGVkKSwKKyAgICAgICAg
ICAgIGdfc2lnbmFsX2FjY3VtdWxhdG9yX3RydWVfaGFuZGxlZCwgMCwKKyAgICAgICAgICAgIGdf
Y2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLAorICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDMs
CisgICAgICAgICAgICBXRUJLSVRfVFlQRV9MT0FEX0VWRU5ULAorICAgICAgICAgICAgR19UWVBF
X1NUUklORywKKyAgICAgICAgICAgIEdfVFlQRV9FUlJPUiB8IEdfU0lHTkFMX1RZUEVfU1RBVElD
X1NDT1BFKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFdlYlZpZXc6OmZyYW1lLWxvYWQtZmFp
bGVkLXdpdGgtdGxzLWVycm9yczoKKyAgICAgKiBAd2ViX3ZpZXc6IHRoZSAjV2ViS2l0V2ViVmll
dyBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKKyAgICAgKiBAZmFpbGluZ191cmk6IHRo
ZSBmcmFtZSBVUkkgdGhhdCBmYWlsZWQgdG8gbG9hZAorICAgICAqIEBjZXJ0aWZpY2F0ZTogYSAj
R1Rsc0NlcnRpZmljYXRlCisgICAgICogQGVycm9yczogYSAjR1Rsc0NlcnRpZmljYXRlRmxhZ3Mg
d2l0aCB0aGUgdmVyaWZpY2F0aW9uIHN0YXR1cyBvZiBAY2VydGlmaWNhdGUKKyAgICAgKgorICAg
ICAqIEVtaXR0ZWQgd2hlbiBhIFRMUyBlcnJvciBvY2N1cnMgZHVyaW5nIGEgbG9hZCBvcGVyYXRp
b24gZm8gYW4gaW5uZXIgZnJhbWUuCisgICAgICogVG8gYWxsb3cgYW4gZXhjZXB0aW9uIGZvciB0
aGlzIEBjZXJ0aWZpY2F0ZQorICAgICAqIGFuZCB0aGUgaG9zdCBvZiBAZmFpbGluZ191cmkgdXNl
IHdlYmtpdF93ZWJfY29udGV4dF9hbGxvd190bHNfY2VydGlmaWNhdGVfZm9yX2hvc3QoKS4KKyAg
ICAgKgorICAgICAqIFRvIGhhbmRsZSB0aGlzIHNpZ25hbCBhc3luY2hyb25vdXNseSB5b3Ugc2hv
dWxkIGNhbGwgZ19vYmplY3RfcmVmKCkgb24gQGNlcnRpZmljYXRlCisgICAgICogYW5kIHJldHVy
biAlVFJVRS4KKyAgICAgKgorICAgICAqIElmICVGQUxTRSBpcyByZXR1cm5lZCwgI1dlYktpdFdl
YlZpZXc6OmZyYW1lLWxvYWQtZmFpbGVkIHdpbGwgYmUgZW1pdHRlZC4gVGhlIGxvYWQKKyAgICAg
KiB3aWxsIGZpbmlzaCByZWdhcmRsZXNzIG9mIHRoZSByZXR1cm5lZCB2YWx1ZS4KKyAgICAgKgor
ICAgICAqIFJldHVybnM6ICVUUlVFIHRvIHN0b3Agb3RoZXIgaGFuZGxlcnMgZnJvbSBiZWluZyBp
bnZva2VkIGZvciB0aGUgZXZlbnQuCisgICAgICogICAlRkFMU0UgdG8gcHJvcGFnYXRlIHRoZSBl
dmVudCBmdXJ0aGVyLgorICAgICAqCisgICAgICogU2luY2U6IDIuMTQKKyAgICAgKi8KKyAgICBz
aWduYWxzW0ZSQU1FX0xPQURfRkFJTEVEX1dJVEhfVExTX0VSUk9SU10gPQorICAgICAgICBnX3Np
Z25hbF9uZXcoCisgICAgICAgICAgICAiZnJhbWUtbG9hZC1mYWlsZWQtd2l0aC10bHMtZXJyb3Jz
IiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAg
ICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJL
aXRXZWJWaWV3Q2xhc3MsIGZyYW1lX2xvYWRfZmFpbGVkX3dpdGhfdGxzX2Vycm9ycyksCisgICAg
ICAgICAgICBnX3NpZ25hbF9hY2N1bXVsYXRvcl90cnVlX2hhbmRsZWQsIDAsCisgICAgICAgICAg
ICBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywKKyAgICAgICAgICAgIEdfVFlQRV9CT09MRUFO
LCAzLAorICAgICAgICAgICAgR19UWVBFX1NUUklORywKKyAgICAgICAgICAgIEdfVFlQRV9UTFNf
Q0VSVElGSUNBVEUsCisgICAgICAgICAgICBHX1RZUEVfVExTX0NFUlRJRklDQVRFX0ZMQUdTKTsK
KworICAgIC8qKgogICAgICAqIFdlYktpdFdlYlZpZXc6OmNyZWF0ZToKICAgICAgKiBAd2ViX3Zp
ZXc6IHRoZSAjV2ViS2l0V2ViVmlldyBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKICAg
ICAgKiBAbmF2aWdhdGlvbl9hY3Rpb246IGEgI1dlYktpdE5hdmlnYXRpb25BY3Rpb24KQEAgLTE4
MDMsNyArMTkwNCw3IEBAIHZvaWQgd2Via2l0V2ViVmlld0xvYWRDaGFuZ2VkKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcsIFdlYktpdExvYWRFdmVudCBsb2FkRXZlbnQpCiAgICAgZ19zaWduYWxfZW1p
dCh3ZWJWaWV3LCBzaWduYWxzW0xPQURfQ0hBTkdFRF0sIDAsIGxvYWRFdmVudCk7CiB9CiAKLXZv
aWQgd2Via2l0V2ViVmlld0xvYWRGYWlsZWQoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0
TG9hZEV2ZW50IGxvYWRFdmVudCwgY29uc3QgY2hhciogZmFpbGluZ1VSSSwgR0Vycm9yICplcnJv
cikKK3ZvaWQgd2Via2l0V2ViVmlld0xvYWRGYWlsZWQoV2ViS2l0V2ViVmlldyogd2ViVmlldywg
V2ViS2l0TG9hZEV2ZW50IGxvYWRFdmVudCwgY29uc3QgY2hhciogZmFpbGluZ1VSSSwgR0Vycm9y
KiBlcnJvcikKIHsKICAgICB3ZWJraXRXZWJWaWV3Q2FuY2VsQXV0aGVudGljYXRpb25SZXF1ZXN0
KHdlYlZpZXcpOwogCkBAIC0xODI3LDYgKzE5MjgsMzEgQEAgdm9pZCB3ZWJraXRXZWJWaWV3TG9h
ZEZhaWxlZFdpdGhUTFNFcnJvcnMoV2ViS2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgY2hhciog
ZmEKICAgICBnX3NpZ25hbF9lbWl0KHdlYlZpZXcsIHNpZ25hbHNbTE9BRF9DSEFOR0VEXSwgMCwg
V0VCS0lUX0xPQURfRklOSVNIRUQpOwogfQogCit2b2lkIHdlYmtpdFdlYlZpZXdGcmFtZUxvYWRD
aGFuZ2VkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IGNoYXIqIHVyaSwgV2ViS2l0TG9h
ZEV2ZW50IGxvYWRFdmVudCkKK3sKKyAgICBnX3NpZ25hbF9lbWl0KHdlYlZpZXcsIHNpZ25hbHNb
RlJBTUVfTE9BRF9DSEFOR0VEXSwgMCwgdXJpLCBsb2FkRXZlbnQpOworfQorCit2b2lkIHdlYmtp
dFdlYlZpZXdGcmFtZUxvYWRGYWlsZWQoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0TG9h
ZEV2ZW50IGxvYWRFdmVudCwgY29uc3QgY2hhciogZmFpbGluZ1VSSSwgR0Vycm9yKiBlcnJvcikK
K3sKKyAgICBnYm9vbGVhbiByZXR1cm5WYWx1ZTsKKyAgICBnX3NpZ25hbF9lbWl0KHdlYlZpZXcs
IHNpZ25hbHNbRlJBTUVfTE9BRF9GQUlMRURdLCAwLCBsb2FkRXZlbnQsIGZhaWxpbmdVUkksIGVy
cm9yLCAmcmV0dXJuVmFsdWUpOworICAgIGdfc2lnbmFsX2VtaXQod2ViVmlldywgc2lnbmFsc1tG
UkFNRV9MT0FEX0NIQU5HRURdLCAwLCBmYWlsaW5nVVJJLCBXRUJLSVRfTE9BRF9GSU5JU0hFRCk7
Cit9CisKK3ZvaWQgd2Via2l0V2ViVmlld0ZyYW1lTG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMoV2Vi
S2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgY2hhciogZmFpbGluZ1VSSSwgR0Vycm9yKiBlcnJv
ciwgR1Rsc0NlcnRpZmljYXRlRmxhZ3MgdGxzRXJyb3JzLCBHVGxzQ2VydGlmaWNhdGUqIGNlcnRp
ZmljYXRlKQoreworICAgIFdlYktpdFRMU0Vycm9yc1BvbGljeSB0bHNFcnJvcnNQb2xpY3kgPSB3
ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3Rsc19lcnJvcnNfcG9saWN5KHdlYlZpZXctPnByaXYtPmNv
bnRleHQuZ2V0KCkpOworICAgIGlmICh0bHNFcnJvcnNQb2xpY3kgPT0gV0VCS0lUX1RMU19FUlJP
UlNfUE9MSUNZX0ZBSUwpIHsKKyAgICAgICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWU7CisgICAgICAg
IGdfc2lnbmFsX2VtaXQod2ViVmlldywgc2lnbmFsc1tGUkFNRV9MT0FEX0ZBSUxFRF9XSVRIX1RM
U19FUlJPUlNdLCAwLCBmYWlsaW5nVVJJLCBjZXJ0aWZpY2F0ZSwgdGxzRXJyb3JzLCAmcmV0dXJu
VmFsdWUpOworICAgICAgICBpZiAoIXJldHVyblZhbHVlKQorICAgICAgICAgICAgZ19zaWduYWxf
ZW1pdCh3ZWJWaWV3LCBzaWduYWxzW0ZSQU1FX0xPQURfRkFJTEVEXSwgMCwgV0VCS0lUX0xPQURf
U1RBUlRFRCwgZmFpbGluZ1VSSSwgZXJyb3IsICZyZXR1cm5WYWx1ZSk7CisgICAgfQorCisgICAg
Z19zaWduYWxfZW1pdCh3ZWJWaWV3LCBzaWduYWxzW0ZSQU1FX0xPQURfQ0hBTkdFRF0sIDAsIGZh
aWxpbmdVUkksIFdFQktJVF9MT0FEX0ZJTklTSEVEKTsKK30KKwogV2ViUGFnZVByb3h5KiB3ZWJr
aXRXZWJWaWV3Q3JlYXRlTmV3UGFnZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBXaW5k
b3dGZWF0dXJlcyYgd2luZG93RmVhdHVyZXMsIFdlYktpdE5hdmlnYXRpb25BY3Rpb24qIG5hdmln
YXRpb25BY3Rpb24pCiB7CiAgICAgV2ViS2l0V2ViVmlldyogbmV3V2ViVmlldzsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaAppbmRleCA3MDA5
NjhmLi41MzQzZWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViVmlldy5oCkBAIC0yNDksMTEgKzI0OSwyMSBAQCBzdHJ1Y3QgX1dlYktpdFdlYlZp
ZXdDbGFzcyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXZWJLaXROb3RpZmljYXRpb24gICAgICAgICAgKm5vdGlmaWNhdGlvbik7CiAgICAgZ2Jvb2xl
YW4gICAoKiBydW5fY29sb3JfY2hvb3NlcikgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAg
ICAgICAgICAgKndlYl92aWV3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV2ViS2l0Q29sb3JDaG9vc2VyUmVxdWVzdCAgICpyZXF1ZXN0KTsKKyAgICB2
b2lkICAgICAgICgqIGZyYW1lX2xvYWRfY2hhbmdlZCkgICAgICAgICAgKFdlYktpdFdlYlZpZXcg
ICAgICAgICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICAgKmZyYW1lX3VyaSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdExv
YWRFdmVudCAgICAgICAgICAgICAgbG9hZF9ldmVudCk7CisgICAgZ2Jvb2xlYW4gICAoKiBmcmFt
ZV9sb2FkX2ZhaWxlZCkgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICAgKndl
Yl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
V2ViS2l0TG9hZEV2ZW50ICAgICAgICAgICAgICBsb2FkX2V2ZW50LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAg
ICAgICpmYWlsaW5nX3VyaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdFcnJvciAgICAgICAgICAgICAgICAgICAgICAqZXJyb3IpOworICAgIGdib29s
ZWFuICAgKCogZnJhbWVfbG9hZF9mYWlsZWRfd2l0aF90bHNfZXJyb3JzKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAg
ICAgICAgICp3ZWJfdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgICAqZmFpbGluZ191cmksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVGxzQ2VydGlmaWNh
dGUgICAgICAgICAgICAgKmNlcnRpZmljYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR1Rsc0NlcnRpZmljYXRlRmxhZ3MgICAgICAgICBlcnJvcnMp
OwogCi0gICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQwKSAodm9pZCk7Ci0gICAgdm9pZCAoKl93
ZWJraXRfcmVzZXJ2ZWQxKSAodm9pZCk7Ci0gICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQyKSAo
dm9pZCk7Ci0gICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQzKSAodm9pZCk7CisgICAgLyogUmVz
ZXJ2ZWQgZm9yIGZ1dHVyZSBleHBhbnNpb24uICovCisgICAgZ3BvaW50ZXIgX3dlYmtpdF9yZXNl
cnZlZFsxXTsKIH07CiAKIFdFQktJVF9BUEkgR1R5cGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oCmluZGV4IDYxZTBh
NTUuLmQ3Mjc2MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXdQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaApAQCAtMzcsNiArMzcsOSBAQAogdm9pZCB3ZWJr
aXRXZWJWaWV3TG9hZENoYW5nZWQoV2ViS2l0V2ViVmlldyosIFdlYktpdExvYWRFdmVudCk7CiB2
b2lkIHdlYmtpdFdlYlZpZXdMb2FkRmFpbGVkKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRMb2FkRXZl
bnQsIGNvbnN0IGNoYXIqIGZhaWxpbmdVUkksIEdFcnJvciopOwogdm9pZCB3ZWJraXRXZWJWaWV3
TG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMoV2ViS2l0V2ViVmlldyosIGNvbnN0IGNoYXIqIGZhaWxp
bmdVUkksIEdFcnJvciosIEdUbHNDZXJ0aWZpY2F0ZUZsYWdzLCBHVGxzQ2VydGlmaWNhdGUqKTsK
K3ZvaWQgd2Via2l0V2ViVmlld0ZyYW1lTG9hZENoYW5nZWQoV2ViS2l0V2ViVmlldyosIGNvbnN0
IGNoYXIqIHVyaSwgV2ViS2l0TG9hZEV2ZW50KTsKK3ZvaWQgd2Via2l0V2ViVmlld0ZyYW1lTG9h
ZEZhaWxlZChXZWJLaXRXZWJWaWV3KiwgV2ViS2l0TG9hZEV2ZW50LCBjb25zdCBjaGFyKiBmYWls
aW5nVVJJLCBHRXJyb3IqKTsKK3ZvaWQgd2Via2l0V2ViVmlld0ZyYW1lTG9hZEZhaWxlZFdpdGhU
TFNFcnJvcnMoV2ViS2l0V2ViVmlldyosIGNvbnN0IGNoYXIqIGZhaWxpbmdVUkksIEdFcnJvcios
IEdUbHNDZXJ0aWZpY2F0ZUZsYWdzLCBHVGxzQ2VydGlmaWNhdGUqKTsKIFdlYktpdDo6V2ViUGFn
ZVByb3h5KiB3ZWJraXRXZWJWaWV3Q3JlYXRlTmV3UGFnZShXZWJLaXRXZWJWaWV3KiwgY29uc3Qg
V2ViQ29yZTo6V2luZG93RmVhdHVyZXMmLCBXZWJLaXROYXZpZ2F0aW9uQWN0aW9uKik7CiB2b2lk
IHdlYmtpdFdlYlZpZXdSZWFkeVRvU2hvd1BhZ2UoV2ViS2l0V2ViVmlldyopOwogdm9pZCB3ZWJr
aXRXZWJWaWV3UnVuQXNNb2RhbChXZWJLaXRXZWJWaWV3Kik7CmRpZmYgLS1naXQgYS9Ub29scy9D
aGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNGEyMDNiZi4uZTljMjhmNSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1
IEBACisyMDE2LTA1LTIzICBNaWxhbiBDcmhhICA8bWNyaGFAcmVkaGF0LmNvbT4KKworICAgICAg
ICBbR1RLXSBQcm92aWRlIGZyYW1lLXJlbGF0ZWQgbG9hZCBzaWduYWxzIGluIFdlYktpdFdlYlZp
ZXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Nzg5
OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RMb2FkZXJDbGllbnQuY3BwOgorICAgICAg
ICAodGVzdEZyYW1lTG9hZGluZ1N0YXR1cyk6CisgICAgICAgICh0ZXN0RnJhbWVMb2FkaW5nRXJy
b3IpOgorICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdDJHdGsvVGVzdFNTTC5jcHA6CisgICAgICAgICh0ZXN0TG9hZEZhaWxlZFdpdGhUTFNF
cnJvcnMpOgorICAgICAgICAodGVzdEZyYW1lTG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMpOgorICAg
ICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3Rr
L0xvYWRUcmFja2luZ1Rlc3QuY3BwOgorICAgICAgICAoZnJhbWVMb2FkQ2hhbmdlZENhbGxiYWNr
KToKKyAgICAgICAgKGZyYW1lTG9hZEZhaWxlZENhbGxiYWNrKToKKyAgICAgICAgKGZyYW1lTG9h
ZEZhaWxlZFdpdGhUTFNFcnJvcnNDYWxsYmFjayk6CisgICAgICAgIChMb2FkVHJhY2tpbmdUZXN0
OjpMb2FkVHJhY2tpbmdUZXN0KToKKyAgICAgICAgKExvYWRUcmFja2luZ1Rlc3Q6OmZyYW1lUHJv
dmlzaW9uYWxMb2FkU3RhcnRlZCk6CisgICAgICAgIChMb2FkVHJhY2tpbmdUZXN0OjpmcmFtZVBy
b3Zpc2lvbmFsTG9hZFJlY2VpdmVkU2VydmVyUmVkaXJlY3QpOgorICAgICAgICAoTG9hZFRyYWNr
aW5nVGVzdDo6ZnJhbWVQcm92aXNpb25hbExvYWRGYWlsZWQpOgorICAgICAgICAoTG9hZFRyYWNr
aW5nVGVzdDo6ZnJhbWVMb2FkQ29tbWl0dGVkKToKKyAgICAgICAgKExvYWRUcmFja2luZ1Rlc3Q6
OmZyYW1lTG9hZEZpbmlzaGVkKToKKyAgICAgICAgKExvYWRUcmFja2luZ1Rlc3Q6OmZyYW1lTG9h
ZEZhaWxlZCk6CisgICAgICAgIChMb2FkVHJhY2tpbmdUZXN0OjpmcmFtZUxvYWRGYWlsZWRXaXRo
VExTRXJyb3JzKToKKyAgICAgICAgKExvYWRUcmFja2luZ1Rlc3Q6OnJlc2V0KToKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL0xvYWRUcmFja2luZ1Rlc3QuaDoKKyAgICAg
ICAgKExvYWRUcmFja2luZ1Rlc3Q6OnNldEZyYW1lUmVkaXJlY3RVUkkpOgorICAgICAgICAoTG9h
ZFRyYWNraW5nVGVzdDo6c2V0RnJhbWVVUkkpOgorCiAyMDE2LTA1LTE5ICBTcmluaXZhc2FuIFZp
amF5YXJhZ2hhdmFuICA8c3ZpamF5YXJhZ2hhdmFuQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQg
SlNPTiByZXN1bHRzIHRvIDMyLWJpdCBhbmQgQ0xvb3AgSlNDIHRlc3RzCmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdExvYWRlckNsaWVudC5jcHAg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdExvYWRlckNsaWVudC5j
cHAKaW5kZXggMjI3YjM4OS4uNzE4ZGYyZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RMb2FkZXJDbGllbnQuY3BwCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0TG9hZGVyQ2xpZW50LmNwcApAQCAtMjcsNiAr
MjcsNyBAQAogI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgog
I2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CiAKIHN0YXRpYyBXZWJLaXRUZXN0QnVzKiBidXM7CkBAIC02OCw2
ICs2OSw0NyBAQCBzdGF0aWMgdm9pZCBhc3NlcnROb3JtYWxMb2FkSGFwcGVuZWQoVmVjdG9yPExv
YWRUcmFja2luZ1Rlc3Q6OkxvYWRFdmVudHM+JiBldmVudAogICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOwogfQogCitzdGF0
aWMgdm9pZCB0ZXN0RnJhbWVMb2FkaW5nU3RhdHVzKExvYWRUcmFja2luZ1Rlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBzdGQ6OnN0cmluZyBmcmFtZVVSSSA9IGtTZXJ2ZXIt
PmdldFVSSUZvclBhdGgoIi9yZWRpcmVjdCIpLmRhdGEoKTsKKyAgICBzdGQ6OnN0cmluZyBmcmFt
ZVJlZGlyZWN0VVJJID0ga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL25vcm1hbCIpLmRhdGEoKTsK
KyAgICBzdGQ6OnN0cmluZyBodG1sID0gIjxodG1sPjxib2R5PldpdGggcmVhY2hhYmxlIGlmcmFt
ZTo8YnI+PGlmcmFtZSBzcmM9XCIiICsgZnJhbWVVUkkgKyAiXCI+PC9pZnJhbWU+PC9ib2R5Pjwv
aHRtbD4iOworCisgICAgdGVzdC0+c2V0RnJhbWVSZWRpcmVjdFVSSShmcmFtZVJlZGlyZWN0VVJJ
LmNfc3RyKCkpOworICAgIHRlc3QtPnNldEZyYW1lVVJJKGZyYW1lVVJJLmNfc3RyKCkpOworICAg
IHRlc3QtPmxvYWRIdG1sKGh0bWwuY19zdHIoKSwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9mcmFtZVVSSS5kYXRh
KCksID09LCBmcmFtZVJlZGlyZWN0VVJJLmNfc3RyKCkpOworCisgICAgYXNzZXJ0Tm9ybWFsTG9h
ZEhhcHBlbmVkKHRlc3QtPm1fbG9hZEV2ZW50cyk7CisKKyAgICBWZWN0b3I8TG9hZFRyYWNraW5n
VGVzdDo6TG9hZEV2ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fZnJhbWVMb2FkRXZlbnRzOworICAg
IGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgNCk7CisgICAgZ19hc3NlcnRfY21w
aW50KGV2ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0
ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0
OjpQcm92aXNpb25hbExvYWRSZWNlaXZlZFNlcnZlclJlZGlyZWN0KTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoZXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1szXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRG
aW5pc2hlZCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RGcmFtZUxvYWRpbmdFcnJvcihMb2FkVHJh
Y2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHN0ZDo6c3RyaW5nIGZyYW1l
VVJJID0ga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2Vycm9yIikuZGF0YSgpOworICAgIHN0ZDo6
c3RyaW5nIGh0bWwgPSAiPGh0bWw+PGJvZHk+V2l0aCB1bnJlYWNoYWJsZSBpZnJhbWU6PGJyPjxp
ZnJhbWUgc3JjPVwiIiArIGZyYW1lVVJJICsgIlwiPjwvaWZyYW1lPjwvYm9keT48L2h0bWw+IjsK
KworICAgIHRlc3QtPnNldEZyYW1lVVJJKGZyYW1lVVJJLmNfc3RyKCkpOworICAgIHRlc3QtPmxv
YWRIdG1sKGh0bWwuY19zdHIoKSwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7CisKKyAgICBhc3NlcnROb3JtYWxMb2FkSGFwcGVuZWQodGVzdC0+bV9sb2FkRXZlbnRzKTsK
KworICAgIFZlY3RvcjxMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRXZlbnRzPiYgZXZlbnRzID0gdGVz
dC0+bV9mcmFtZUxvYWRFdmVudHM7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCks
ID09LCAzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgTG9hZFRyYWNraW5n
VGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50
c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZEZhaWxlZCk7CisgICAg
Z19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5p
c2hlZCk7Cit9CisKIHN0YXRpYyB2b2lkIHRlc3RMb2FkSHRtbChMb2FkVHJhY2tpbmdUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQogewogICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT5I
ZWxsbyBXZWJLaXQtR1RLKzwvYm9keT48L2h0bWw+IiwgMCk7CkBAIC01MTksNiArNTYxLDggQEAg
dm9pZCBiZWZvcmVBbGwoKQogCiAgICAgTG9hZFRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJW
aWV3IiwgImxvYWRpbmctc3RhdHVzIiwgdGVzdExvYWRpbmdTdGF0dXMpOwogICAgIExvYWRUcmFj
a2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJsb2FkaW5nLWVycm9yIiwgdGVzdExvYWRp
bmdFcnJvcik7CisgICAgTG9hZFRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImZy
YW1lLWxvYWRpbmctc3RhdHVzIiwgdGVzdEZyYW1lTG9hZGluZ1N0YXR1cyk7CisgICAgTG9hZFRy
YWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImZyYW1lLWxvYWRpbmctZXJyb3IiLCB0
ZXN0RnJhbWVMb2FkaW5nRXJyb3IpOwogICAgIExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0
V2ViVmlldyIsICJsb2FkLWh0bWwiLCB0ZXN0TG9hZEh0bWwpOwogICAgIExvYWRUcmFja2luZ1Rl
c3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJsb2FkLWFsdGVybmF0ZS1odG1sIiwgdGVzdExvYWRB
bHRlcm5hdGVIVE1MKTsKICAgICBMb2FkVHJhY2tpbmdUZXN0OjphZGQoIldlYktpdFdlYlZpZXci
LCAibG9hZC1hbHRlcm5hdGUtaHRtbC1mb3ItbG9jYWwtcGFnZSIsIHRlc3RMb2FkQWx0ZXJuYXRl
SFRNTEZvckxvY2FsUGFnZSk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdDJHdGsvVGVzdFNTTC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDJHdGsvVGVzdFNTTC5jcHAKaW5kZXggMTBjNWU3My4uYjc1NDhjYyAxMDA2NDQKLS0tIGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RTU0wuY3BwCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0U1NMLmNwcApAQCAtMjIsNiArMjIs
NyBAQAogI2luY2x1ZGUgIkxvYWRUcmFja2luZ1Rlc3QuaCIKICNpbmNsdWRlICJXZWJLaXRUZXN0
U2VydmVyLmgiCiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHN0cmluZz4KIAogc3Rh
dGljIFdlYktpdFRlc3RTZXJ2ZXIqIGtIdHRwc1NlcnZlcjsKIHN0YXRpYyBXZWJLaXRUZXN0U2Vy
dmVyKiBrSHR0cFNlcnZlcjsKQEAgLTM3LDYgKzM4LDcgQEAgcHVibGljOgogCiAgICAgU1NMVGVz
dCgpCiAgICAgICAgIDogbV90bHNFcnJvcnMoc3RhdGljX2Nhc3Q8R1Rsc0NlcnRpZmljYXRlRmxh
Z3M+KDApKQorICAgICAgICAsIG1fZnJhbWVUbHNFcnJvcnMoc3RhdGljX2Nhc3Q8R1Rsc0NlcnRp
ZmljYXRlRmxhZ3M+KDApKQogICAgIHsKICAgICB9CiAKQEAgLTQ2LDYgKzQ4LDEyIEBAIHB1Ymxp
YzoKICAgICAgICAgTG9hZFRyYWNraW5nVGVzdDo6cHJvdmlzaW9uYWxMb2FkRmFpbGVkKGZhaWxp
bmdVUkksIGVycm9yKTsKICAgICB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVQcm92aXNpb25h
bExvYWRGYWlsZWQoY29uc3QgZ2NoYXIqIGZhaWxpbmdVUkksIEdFcnJvciogZXJyb3IpCisgICAg
eworICAgICAgICBnX2Fzc2VydF9lcnJvcihlcnJvciwgU09VUF9IVFRQX0VSUk9SLCBTT1VQX1NU
QVRVU19TU0xfRkFJTEVEKTsKKyAgICAgICAgTG9hZFRyYWNraW5nVGVzdDo6ZnJhbWVQcm92aXNp
b25hbExvYWRGYWlsZWQoZmFpbGluZ1VSSSwgZXJyb3IpOworICAgIH0KKwogICAgIHZpcnR1YWwg
dm9pZCBsb2FkQ29tbWl0dGVkKCkKICAgICB7CiAgICAgICAgIEdUbHNDZXJ0aWZpY2F0ZSogY2Vy
dGlmaWNhdGUgPSAwOwpAQCAtNTgsMTEgKzY2LDE1IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IG1fY2VydGlmaWNhdGUgPSAwOwogICAgICAgICBtX3Rsc0Vycm9ycyA9IHN0YXRpY19jYXN0PEdU
bHNDZXJ0aWZpY2F0ZUZsYWdzPigwKTsKKyAgICAgICAgbV9mcmFtZUNlcnRpZmljYXRlID0gMDsK
KyAgICAgICAgbV9mcmFtZVRsc0Vycm9ycyA9IHN0YXRpY19jYXN0PEdUbHNDZXJ0aWZpY2F0ZUZs
YWdzPigwKTsKICAgICAgICAgTG9hZFRyYWNraW5nVGVzdDo6d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7CiAgICAgfQogCiAgICAgR1JlZlB0cjxHVGxzQ2VydGlmaWNhdGU+IG1fY2VydGlmaWNhdGU7
CiAgICAgR1Rsc0NlcnRpZmljYXRlRmxhZ3MgbV90bHNFcnJvcnM7CisgICAgR1JlZlB0cjxHVGxz
Q2VydGlmaWNhdGU+IG1fZnJhbWVDZXJ0aWZpY2F0ZTsKKyAgICBHVGxzQ2VydGlmaWNhdGVGbGFn
cyBtX2ZyYW1lVGxzRXJyb3JzOwogfTsKIAogc3RhdGljIHZvaWQgdGVzdFNTTChTU0xUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQpAQCAtMjA2LDggKzIxOCw4IEBAIHB1YmxpYzoKICAgICBNQUtF
X0dMSUJfVEVTVF9GSVhUVVJFKFRMU0Vycm9yc1Rlc3QpOwogCiAgICAgVExTRXJyb3JzVGVzdCgp
Ci0gICAgICAgIDogbV90bHNFcnJvcnMoc3RhdGljX2Nhc3Q8R1Rsc0NlcnRpZmljYXRlRmxhZ3M+
KDApKQotICAgICAgICAsIG1fZmFpbGluZ1VSSShudWxscHRyKQorICAgICAgICA6IG1fZmFpbGlu
Z1VSSShudWxscHRyKQorICAgICAgICAsIG1fZnJhbWVGYWlsaW5nVVJJKG51bGxwdHIpCiAgICAg
ewogICAgIH0KIApAQCAtMjE1LDYgKzIyNyw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlm
IChtX2ZhaWxpbmdVUkkpCiAgICAgICAgICAgICBzb3VwX3VyaV9mcmVlKG1fZmFpbGluZ1VSSSk7
CisgICAgICAgIGlmIChtX2ZyYW1lRmFpbGluZ1VSSSkKKyAgICAgICAgICAgIHNvdXBfdXJpX2Zy
ZWUobV9mcmFtZUZhaWxpbmdVUkkpOwogICAgIH0KIAogICAgIGJvb2wgbG9hZEZhaWxlZFdpdGhU
TFNFcnJvcnMoY29uc3QgY2hhciogZmFpbGluZ1VSSSwgR1Rsc0NlcnRpZmljYXRlKiBjZXJ0aWZp
Y2F0ZSwgR1Rsc0NlcnRpZmljYXRlRmxhZ3MgdGxzRXJyb3JzKSBvdmVycmlkZQpAQCAtMjMwLDE0
ICsyNDQsMjkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICBi
b29sIGZyYW1lTG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMoY29uc3QgY2hhciogZmFpbGluZ1VSSSwg
R1Rsc0NlcnRpZmljYXRlKiBjZXJ0aWZpY2F0ZSwgR1Rsc0NlcnRpZmljYXRlRmxhZ3MgdGxzRXJy
b3JzKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgTG9hZFRyYWNraW5nVGVzdDo6ZnJhbWVMb2Fk
RmFpbGVkV2l0aFRMU0Vycm9ycyhmYWlsaW5nVVJJLCBjZXJ0aWZpY2F0ZSwgdGxzRXJyb3JzKTsK
KworICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNU
KGNlcnRpZmljYXRlKSk7CisgICAgICAgIG1fZnJhbWVDZXJ0aWZpY2F0ZSA9IGNlcnRpZmljYXRl
OworICAgICAgICBtX2ZyYW1lVGxzRXJyb3JzID0gdGxzRXJyb3JzOworICAgICAgICBpZiAobV9m
cmFtZUZhaWxpbmdVUkkpCisgICAgICAgICAgICBzb3VwX3VyaV9mcmVlKG1fZnJhbWVGYWlsaW5n
VVJJKTsKKyAgICAgICAgbV9mcmFtZUZhaWxpbmdVUkkgPSBzb3VwX3VyaV9uZXcoZmFpbGluZ1VS
SSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIEdUbHNDZXJ0aWZpY2F0ZSog
Y2VydGlmaWNhdGUoKSBjb25zdCB7IHJldHVybiBtX2NlcnRpZmljYXRlLmdldCgpOyB9CiAgICAg
R1Rsc0NlcnRpZmljYXRlRmxhZ3MgdGxzRXJyb3JzKCkgY29uc3QgeyByZXR1cm4gbV90bHNFcnJv
cnM7IH0KLSAgICBjb25zdCBjaGFyKiBob3N0KCkgY29uc3QgeyByZXR1cm4gbV9mYWlsaW5nVVJJ
LT5ob3N0OyB9CisgICAgY29uc3QgY2hhciogaG9zdCgpIGNvbnN0IHsgcmV0dXJuIG1fZmFpbGlu
Z1VSSSA/IG1fZmFpbGluZ1VSSS0+aG9zdCA6IG51bGxwdHI7IH0KKyAgICBHVGxzQ2VydGlmaWNh
dGUqIGZyYW1lQ2VydGlmaWNhdGUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lQ2VydGlmaWNhdGUu
Z2V0KCk7IH0KKyAgICBHVGxzQ2VydGlmaWNhdGVGbGFncyBmcmFtZVRsc0Vycm9ycygpIGNvbnN0
IHsgcmV0dXJuIG1fZnJhbWVUbHNFcnJvcnM7IH0KKyAgICBjb25zdCBjaGFyKiBmcmFtZUhvc3Qo
KSBjb25zdCB7IHJldHVybiBtX2ZyYW1lRmFpbGluZ1VSSSA/IG1fZnJhbWVGYWlsaW5nVVJJLT5o
b3N0IDogbnVsbHB0cjsgfQogCiBwcml2YXRlOgotICAgIEdSZWZQdHI8R1Rsc0NlcnRpZmljYXRl
PiBtX2NlcnRpZmljYXRlOwotICAgIEdUbHNDZXJ0aWZpY2F0ZUZsYWdzIG1fdGxzRXJyb3JzOwog
ICAgIFNvdXBVUkkqIG1fZmFpbGluZ1VSSTsKKyAgICBTb3VwVVJJKiBtX2ZyYW1lRmFpbGluZ1VS
STsKIH07CiAKIHN0YXRpYyB2b2lkIHRlc3RMb2FkRmFpbGVkV2l0aFRMU0Vycm9ycyhUTFNFcnJv
cnNUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQpAQCAtMjUxLDggKzI4MCwxMiBAQCBzdGF0aWMg
dm9pZCB0ZXN0TG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMoVExTRXJyb3JzVGVzdCogdGVzdCwgZ2Nv
bnN0cG9pbnRlcikKICAgICB0ZXN0LT5sb2FkVVJJKGtIdHRwc1NlcnZlci0+Z2V0VVJJRm9yUGF0
aCgiL3Rlc3QtdGxzLyIpLmRhdGEoKSk7CiAgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7CiAgICAgZ19hc3NlcnQoR19JU19UTFNfQ0VSVElGSUNBVEUodGVzdC0+Y2VydGlmaWNhdGUo
KSkpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5mcmFtZUNlcnRpZmljYXRlKCkpOworICAgIGdfYXNz
ZXJ0KCF0ZXN0LT5mcmFtZVRsc0Vycm9ycygpKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+ZnJhbWVI
b3N0KCkpOwogICAgIGdfYXNzZXJ0X2NtcHVpbnQodGVzdC0+dGxzRXJyb3JzKCksID09LCBHX1RM
U19DRVJUSUZJQ0FURV9VTktOT1dOX0NBKTsKICAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+aG9z
dCgpLCA9PSwgc291cF91cmlfZ2V0X2hvc3Qoa0h0dHBzU2VydmVyLT5iYXNlVVJJKCkpKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOwogICAg
IGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdU
ZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKICAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+
bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZhaWxlZFdpdGhUTFNF
cnJvcnMpOwogICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMl0sID09LCBM
b2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOwpAQCAtMjY0LDYgKzI5Nyw3IEBAIHN0YXRp
YyB2b2lkIHRlc3RMb2FkRmFpbGVkV2l0aFRMU0Vycm9ycyhUTFNFcnJvcnNUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQogICAgIHRlc3QtPmxvYWRVUkkoa0h0dHBzU2VydmVyLT5nZXRVUklGb3JQ
YXRoKCIvdGVzdC10bHMvIikuZGF0YSgpKTsKICAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNo
ZWQoKTsKIAorICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9
PSwgMyk7CiAgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1swXSwgPT0sIExv
YWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOwogICAgIGdfYXNzZXJ0X2Nt
cGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkQ29t
bWl0dGVkKTsKICAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzJdLCA9PSwg
TG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKQEAgLTI3Miw2ICszMDYsNDcgQEAgc3Rh
dGljIHZvaWQgdGVzdExvYWRGYWlsZWRXaXRoVExTRXJyb3JzKFRMU0Vycm9yc1Rlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCiAgICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF90bHNfZXJyb3JzX3Bv
bGljeShjb250ZXh0LCBvcmlnaW5hbFBvbGljeSk7CiB9CiAKK3N0YXRpYyB2b2lkIHRlc3RGcmFt
ZUxvYWRGYWlsZWRXaXRoVExTRXJyb3JzKFRMU0Vycm9yc1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCit7CisgICAgc3RkOjpzdHJpbmcgZnJhbWVVUkkgPSBrSHR0cHNTZXJ2ZXItPmdldFVSSUZv
clBhdGgoIi90ZXN0LXRscy8iKS5kYXRhKCk7CisgICAgc3RkOjpzdHJpbmcgaHRtbCA9ICI8aHRt
bD48Ym9keT5XaXRoIHJlYWNoYWJsZSBpZnJhbWU6PGJyPjxpZnJhbWUgc3JjPVwiIiArIGZyYW1l
VVJJICsgIlwiPjwvaWZyYW1lPjwvYm9keT48L2h0bWw+IjsKKyAgICBXZWJLaXRXZWJDb250ZXh0
KiBjb250ZXh0ID0gd2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KHRlc3QtPm1fd2ViVmlldyk7
CisgICAgV2ViS2l0VExTRXJyb3JzUG9saWN5IG9yaWdpbmFsUG9saWN5ID0gd2Via2l0X3dlYl9j
b250ZXh0X2dldF90bHNfZXJyb3JzX3BvbGljeShjb250ZXh0KTsKKyAgICB3ZWJraXRfd2ViX2Nv
bnRleHRfc2V0X3Rsc19lcnJvcnNfcG9saWN5KGNvbnRleHQsIFdFQktJVF9UTFNfRVJST1JTX1BP
TElDWV9GQUlMKTsKKworICAgIGFzc2VydElmU1NMUmVxdWVzdFByb2Nlc3NlZCA9IHRydWU7CisK
KyAgICB0ZXN0LT5zZXRGcmFtZVVSSShmcmFtZVVSSS5jX3N0cigpKTsKKyAgICAvLyBUaGUgZnJh
bWUtbG9hZC1mYWlsZWQtd2l0aC10bHMtZXJyb3JzIHNpZ25hbCBzaG91bGQgYmUgZW1pdHRlZCB3
aGVuIHRoZXJlIGlzIGEgVExTIGZhaWx1cmUuCisgICAgdGVzdC0+bG9hZEh0bWwoaHRtbC5jX3N0
cigpLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIGdfYXNz
ZXJ0KCF0ZXN0LT5jZXJ0aWZpY2F0ZSgpKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+dGxzRXJyb3Jz
KCkpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5ob3N0KCkpOworICAgIGdfYXNzZXJ0KEdfSVNfVExT
X0NFUlRJRklDQVRFKHRlc3QtPmZyYW1lQ2VydGlmaWNhdGUoKSkpOworICAgIGdfYXNzZXJ0X2Nt
cHVpbnQodGVzdC0+ZnJhbWVUbHNFcnJvcnMoKSwgPT0sIEdfVExTX0NFUlRJRklDQVRFX1VOS05P
V05fQ0EpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5mcmFtZUhvc3QoKSwgPT0sIHNvdXBf
dXJpX2dldF9ob3N0KGtIdHRwc1NlcnZlci0+YmFzZVVSSSgpKSk7CisgICAgZ19hc3NlcnRfY21w
aW50KHRlc3QtPm1fZnJhbWVMb2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0
X2NtcGludCh0ZXN0LT5tX2ZyYW1lTG9hZEV2ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6
OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2Zy
YW1lTG9hZEV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGYWlsZWRXaXRoVExT
RXJyb3JzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9mcmFtZUxvYWRFdmVudHNbMl0s
ID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOworICAgIGFzc2VydElmU1NMUmVx
dWVzdFByb2Nlc3NlZCA9IGZhbHNlOworCisgICAgLy8gVGVzdCBhbGxvd2luZyBhbiBleGNlcHRp
b24gZm9yIHRoaXMgY2VydGlmaWNhdGUgb24gdGhpcyBob3N0LgorICAgIHdlYmtpdF93ZWJfY29u
dGV4dF9hbGxvd190bHNfY2VydGlmaWNhdGVfZm9yX2hvc3QoY29udGV4dCwgdGVzdC0+ZnJhbWVD
ZXJ0aWZpY2F0ZSgpLCB0ZXN0LT5mcmFtZUhvc3QoKSk7CisgICAgLy8gVGhlIHBhZ2Ugc2hvdWxk
IG5vdyBsb2FkIHdpdGhvdXQgZXJyb3JzLgorICAgIHRlc3QtPmxvYWRIdG1sKGh0bWwuY19zdHIo
KSwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQodGVzdC0+bV9mcmFtZUxvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMyk7CisgICAgZ19h
c3NlcnRfY21waW50KHRlc3QtPm1fZnJhbWVMb2FkRXZlbnRzWzBdLCA9PSwgTG9hZFRyYWNraW5n
VGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3Qt
Pm1fZnJhbWVMb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZENvbW1pdHRl
ZCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fZnJhbWVMb2FkRXZlbnRzWzJdLCA9PSwg
TG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKKworICAgIHdlYmtpdF93ZWJfY29udGV4
dF9zZXRfdGxzX2Vycm9yc19wb2xpY3koY29udGV4dCwgb3JpZ2luYWxQb2xpY3kpOworfQorCiBj
bGFzcyBUTFNTdWJyZXNvdXJjZVRlc3QgOiBwdWJsaWMgV2ViVmlld1Rlc3QgewogcHVibGljOgog
ICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoVExTU3VicmVzb3VyY2VUZXN0KTsKQEAgLTQyNSw2
ICs1MDAsNyBAQCB2b2lkIGJlZm9yZUFsbCgpCiAgICAgU1NMVGVzdDo6YWRkKCJXZWJLaXRXZWJW
aWV3IiwgInRscy1odHRwLWF1dGgiLCB0ZXN0VExTRXJyb3JzSFRUUEF1dGgpOwogICAgIFRMU1N1
YnJlc291cmNlVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInRscy1zdWJyZXNvdXJjZSIsIHRl
c3RTdWJyZXNvdXJjZUxvYWRGYWlsZWRXaXRoVExTRXJyb3JzKTsKICAgICBUTFNFcnJvcnNUZXN0
OjphZGQoIldlYktpdFdlYlZpZXciLCAibG9hZC1mYWlsZWQtd2l0aC10bHMtZXJyb3JzIiwgdGVz
dExvYWRGYWlsZWRXaXRoVExTRXJyb3JzKTsKKyAgICBUTFNFcnJvcnNUZXN0OjphZGQoIldlYktp
dFdlYlZpZXciLCAiZnJhbWUtbG9hZC1mYWlsZWQtd2l0aC10bHMtZXJyb3JzIiwgdGVzdEZyYW1l
TG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMpOwogfQogCiB2b2lkIGFmdGVyQWxsKCkKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvTG9hZFRyYWNraW5nVGVzdC5j
cHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL0xvYWRUcmFja2luZ1Rlc3Qu
Y3BwCmluZGV4IGU3OGNlNDUuLjRiYmJjYzYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvZ3RrL1dlYktpdDJHdGsvTG9hZFRyYWNraW5nVGVzdC5jcHAKKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9Mb2FkVHJhY2tpbmdUZXN0LmNwcApAQCAtMTA5LDE0ICsx
MDksNzYgQEAgc3RhdGljIHZvaWQgZXN0aW1hdGVkUHJvZ3Jlc3NDaGFuZ2VkQ2FsbGJhY2soR09i
amVjdCosIEdQYXJhbVNwZWMqLCBMb2FkVHJhY2tpbmcKICAgICB0ZXN0LT5lc3RpbWF0ZWRQcm9n
cmVzc0NoYW5nZWQoKTsKIH0KIAorc3RhdGljIHZvaWQgZnJhbWVMb2FkQ2hhbmdlZENhbGxiYWNr
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IGNoYXIqIGZyYW1lVVJJLCBXZWJLaXRMb2Fk
RXZlbnQgbG9hZEV2ZW50LCBMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0KQoreworICAgIHN3aXRjaCAo
bG9hZEV2ZW50KSB7CisgICAgY2FzZSBXRUJLSVRfTE9BRF9TVEFSVEVEOgorICAgICAgICBnX2Fz
c2VydF9jbXBzdHIodGVzdC0+bV9mcmFtZVVSSS5kYXRhKCksID09LCBmcmFtZVVSSSk7CisgICAg
ICAgIHRlc3QtPmZyYW1lUHJvdmlzaW9uYWxMb2FkU3RhcnRlZChmcmFtZVVSSSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0xPQURfUkVESVJFQ1RFRDoKKyAgICAgICAgdGVzdC0+
bV9mcmFtZVVSSSA9IGZyYW1lVVJJOworICAgICAgICBpZiAoIXRlc3QtPm1fZnJhbWVSZWRpcmVj
dFVSSS5pc051bGwoKSkKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5tX2ZyYW1l
UmVkaXJlY3RVUkkuZGF0YSgpLCA9PSwgdGVzdC0+bV9mcmFtZVVSSS5kYXRhKCkpOworICAgICAg
ICB0ZXN0LT5mcmFtZVByb3Zpc2lvbmFsTG9hZFJlY2VpdmVkU2VydmVyUmVkaXJlY3QoZnJhbWVV
UkkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9MT0FEX0NPTU1JVFRFRDogewor
ICAgICAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9mcmFtZVVSSS5kYXRhKCksID09LCBmcmFt
ZVVSSSk7CisgICAgICAgIHRlc3QtPmZyYW1lTG9hZENvbW1pdHRlZChmcmFtZVVSSSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdFQktJVF9MT0FEX0ZJTklTSEVEOgorICAgICAg
ICBpZiAoIXRlc3QtPm1fZnJhbWVMb2FkRmFpbGVkKQorICAgICAgICAgICAgZ19hc3NlcnRfY21w
c3RyKHRlc3QtPm1fZnJhbWVVUkkuZGF0YSgpLCA9PSwgZnJhbWVVUkkpOworICAgICAgICB0ZXN0
LT5mcmFtZUxvYWRGaW5pc2hlZChmcmFtZVVSSSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgfQorfQorCitzdGF0aWMg
dm9pZCBmcmFtZUxvYWRGYWlsZWRDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJL
aXRMb2FkRXZlbnQgbG9hZEV2ZW50LCBjb25zdCBjaGFyKiBmYWlsaW5nVVJJLCBHRXJyb3IqIGVy
cm9yLCBMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0KQoreworICAgIHRlc3QtPm1fZnJhbWVMb2FkRmFp
bGVkID0gdHJ1ZTsKKworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5tX2ZyYW1lVVJJLmRhdGEo
KSwgPT0sIGZhaWxpbmdVUkkpOworCisgICAgZ19hc3NlcnQoZXJyb3IpOworICAgIHRlc3QtPm1f
ZXJyb3IucmVzZXQoZ19lcnJvcl9jb3B5KGVycm9yKSk7CisKKyAgICBzd2l0Y2ggKGxvYWRFdmVu
dCkgeworICAgIGNhc2UgV0VCS0lUX0xPQURfU1RBUlRFRDoKKyAgICAgICAgdGVzdC0+ZnJhbWVQ
cm92aXNpb25hbExvYWRGYWlsZWQoZmFpbGluZ1VSSSwgZXJyb3IpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFdFQktJVF9MT0FEX0NPTU1JVFRFRDoKKyAgICAgICAgdGVzdC0+ZnJhbWVMb2Fk
RmFpbGVkKGZhaWxpbmdVUkksIGVycm9yKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICB9Cit9CisKK3N0YXRpYyBnYm9v
bGVhbiBmcmFtZUxvYWRGYWlsZWRXaXRoVExTRXJyb3JzQ2FsbGJhY2soV2ViS2l0V2ViVmlldyog
d2ViVmlldywgY29uc3QgY2hhciogZmFpbGluZ1VSSSwgR1Rsc0NlcnRpZmljYXRlKiBjZXJ0aWZp
Y2F0ZSwgR1Rsc0NlcnRpZmljYXRlRmxhZ3MgdGxzRXJyb3JzLCBMb2FkVHJhY2tpbmdUZXN0KiB0
ZXN0KQoreworICAgIHRlc3QtPm1fZnJhbWVMb2FkRmFpbGVkID0gdHJ1ZTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIodGVzdC0+bV9mcmFtZVVSSS5kYXRhKCksID09LCBmYWlsaW5nVVJJKTsKKyAgICBn
X2Fzc2VydChHX0lTX1RMU19DRVJUSUZJQ0FURShjZXJ0aWZpY2F0ZSkpOworICAgIGdfYXNzZXJ0
KHRsc0Vycm9ycyk7CisgICAgcmV0dXJuIHRlc3QtPmZyYW1lTG9hZEZhaWxlZFdpdGhUTFNFcnJv
cnMoZmFpbGluZ1VSSSwgY2VydGlmaWNhdGUsIHRsc0Vycm9ycyk7Cit9CisKIExvYWRUcmFja2lu
Z1Rlc3Q6OkxvYWRUcmFja2luZ1Rlc3QoKQogICAgIDogbV9ydW5Mb2FkVW50aWxDb21wbGV0aW9u
KGZhbHNlKQogICAgICwgbV9sb2FkRmFpbGVkKGZhbHNlKQorICAgICwgbV9mcmFtZUxvYWRGYWls
ZWQoZmFsc2UpCiB7CiAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJsb2FkLWNoYW5n
ZWQiLCBHX0NBTExCQUNLKGxvYWRDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKICAgICBnX3NpZ25h
bF9jb25uZWN0KG1fd2ViVmlldywgImxvYWQtZmFpbGVkIiwgR19DQUxMQkFDSyhsb2FkRmFpbGVk
Q2FsbGJhY2spLCB0aGlzKTsKICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImxvYWQt
ZmFpbGVkLXdpdGgtdGxzLWVycm9ycyIsIEdfQ0FMTEJBQ0sobG9hZEZhaWxlZFdpdGhUTFNFcnJv
cnNDYWxsYmFjayksIHRoaXMpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAibm90
aWZ5Ojplc3RpbWF0ZWQtbG9hZC1wcm9ncmVzcyIsIEdfQ0FMTEJBQ0soZXN0aW1hdGVkUHJvZ3Jl
c3NDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmll
dywgImZyYW1lLWxvYWQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0soZnJhbWVMb2FkQ2hhbmdlZENhbGxi
YWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJmcmFtZS1sb2Fk
LWZhaWxlZCIsIEdfQ0FMTEJBQ0soZnJhbWVMb2FkRmFpbGVkQ2FsbGJhY2spLCB0aGlzKTsKKyAg
ICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImZyYW1lLWxvYWQtZmFpbGVkLXdpdGgtdGxz
LWVycm9ycyIsIEdfQ0FMTEJBQ0soZnJhbWVMb2FkRmFpbGVkV2l0aFRMU0Vycm9yc0NhbGxiYWNr
KSwgdGhpcyk7CiAKICAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2dldF91cmkobV93ZWJW
aWV3KSk7CiB9CkBAIC0xNzgsNiArMjQwLDQyIEBAIHZvaWQgTG9hZFRyYWNraW5nVGVzdDo6ZXN0
aW1hdGVkUHJvZ3Jlc3NDaGFuZ2VkKCkKICAgICBtX2VzdGltYXRlZFByb2dyZXNzID0gcHJvZ3Jl
c3M7CiB9CiAKK3ZvaWQgTG9hZFRyYWNraW5nVGVzdDo6ZnJhbWVQcm92aXNpb25hbExvYWRTdGFy
dGVkKGNvbnN0IGNoYXIqIC8qZnJhbWVVUkkqLykKK3sKKyAgICBtX2ZyYW1lTG9hZEV2ZW50cy5h
cHBlbmQoUHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7Cit9CisKK3ZvaWQgTG9hZFRyYWNraW5nVGVz
dDo6ZnJhbWVQcm92aXNpb25hbExvYWRSZWNlaXZlZFNlcnZlclJlZGlyZWN0KGNvbnN0IGNoYXIq
IC8qZnJhbWVVUkkqLykKK3sKKyAgICBtX2ZyYW1lTG9hZEV2ZW50cy5hcHBlbmQoUHJvdmlzaW9u
YWxMb2FkUmVjZWl2ZWRTZXJ2ZXJSZWRpcmVjdCk7Cit9CisKK3ZvaWQgTG9hZFRyYWNraW5nVGVz
dDo6ZnJhbWVQcm92aXNpb25hbExvYWRGYWlsZWQoY29uc3QgZ2NoYXIqIGZhaWxpbmdVUkksIEdF
cnJvciogZXJyb3IpCit7CisgICAgbV9mcmFtZUxvYWRFdmVudHMuYXBwZW5kKFByb3Zpc2lvbmFs
TG9hZEZhaWxlZCk7Cit9CisKK3ZvaWQgTG9hZFRyYWNraW5nVGVzdDo6ZnJhbWVMb2FkQ29tbWl0
dGVkKGNvbnN0IGNoYXIqIC8qZnJhbWVVUkkqLykKK3sKKyAgICBtX2ZyYW1lTG9hZEV2ZW50cy5h
cHBlbmQoTG9hZENvbW1pdHRlZCk7Cit9CisKK3ZvaWQgTG9hZFRyYWNraW5nVGVzdDo6ZnJhbWVM
b2FkRmluaXNoZWQoY29uc3QgY2hhciogLypmcmFtZVVSSSovKQoreworICAgIG1fZnJhbWVMb2Fk
RXZlbnRzLmFwcGVuZChMb2FkRmluaXNoZWQpOworfQorCit2b2lkIExvYWRUcmFja2luZ1Rlc3Q6
OmZyYW1lTG9hZEZhaWxlZChjb25zdCBnY2hhciogZmFpbGluZ1VSSSwgR0Vycm9yKiBlcnJvcikK
K3sKKyAgICBtX2ZyYW1lTG9hZEV2ZW50cy5hcHBlbmQoTG9hZEZhaWxlZCk7Cit9CisKK2Jvb2wg
TG9hZFRyYWNraW5nVGVzdDo6ZnJhbWVMb2FkRmFpbGVkV2l0aFRMU0Vycm9ycyhjb25zdCBnY2hh
ciogLypmYWlsaW5nVVJJKi8sIEdUbHNDZXJ0aWZpY2F0ZSosIEdUbHNDZXJ0aWZpY2F0ZUZsYWdz
KQoreworICAgIG1fZnJhbWVMb2FkRXZlbnRzLmFwcGVuZChMb2FkRmFpbGVkV2l0aFRMU0Vycm9y
cyk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIExvYWRUcmFja2luZ1Rlc3Q6OmxvYWRV
UkkoY29uc3QgY2hhciogdXJpKQogewogICAgIHJlc2V0KCk7CkBAIC0yMzMsNCArMzMxLDYgQEAg
dm9pZCBMb2FkVHJhY2tpbmdUZXN0OjpyZXNldCgpCiAgICAgbV9sb2FkRXZlbnRzLmNsZWFyKCk7
CiAgICAgbV9lc3RpbWF0ZWRQcm9ncmVzcyA9IDA7CiAgICAgbV9lcnJvci5yZXNldCgpOworICAg
IG1fZnJhbWVMb2FkRmFpbGVkID0gZmFsc2U7CisgICAgbV9mcmFtZUxvYWRFdmVudHMuY2xlYXIo
KTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvTG9h
ZFRyYWNraW5nVGVzdC5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9Mb2Fk
VHJhY2tpbmdUZXN0LmgKaW5kZXggZDZmMzEyOS4uNDMwNzBmMSAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9Mb2FkVHJhY2tpbmdUZXN0LmgKKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9Mb2FkVHJhY2tpbmdUZXN0LmgKQEAgLTQw
LDYgKzQwLDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbG9hZEZhaWxlZChjb25zdCBj
aGFyKiBmYWlsaW5nVVJJLCBHRXJyb3IqKTsKICAgICB2aXJ0dWFsIHZvaWQgZXN0aW1hdGVkUHJv
Z3Jlc3NDaGFuZ2VkKCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVQcm92aXNpb25hbExvYWRT
dGFydGVkKGNvbnN0IGNoYXIqIGZyYW1lVVJJKTsKKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVQcm92
aXNpb25hbExvYWRSZWNlaXZlZFNlcnZlclJlZGlyZWN0KGNvbnN0IGNoYXIqIGZyYW1lVVJJKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVQcm92aXNpb25hbExvYWRGYWlsZWQoY29uc3QgZ2NoYXIq
IGZhaWxpbmdVUkksIEdFcnJvciopOworICAgIHZpcnR1YWwgYm9vbCBmcmFtZUxvYWRGYWlsZWRX
aXRoVExTRXJyb3JzKGNvbnN0IGdjaGFyKiBmYWlsaW5nVVJJLCBHVGxzQ2VydGlmaWNhdGUqLCBH
VGxzQ2VydGlmaWNhdGVGbGFncyk7CisgICAgdmlydHVhbCB2b2lkIGZyYW1lTG9hZENvbW1pdHRl
ZChjb25zdCBjaGFyKiBmcmFtZVVSSSk7CisgICAgdmlydHVhbCB2b2lkIGZyYW1lTG9hZEZpbmlz
aGVkKGNvbnN0IGNoYXIqIGZyYW1lVVJJKTsKKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVMb2FkRmFp
bGVkKGNvbnN0IGNoYXIqIGZhaWxpbmdVUkksIEdFcnJvciopOworCiAgICAgdm9pZCBsb2FkVVJJ
KGNvbnN0IGNoYXIqIHVyaSk7CiAgICAgdm9pZCBsb2FkSHRtbChjb25zdCBjaGFyKiBodG1sLCBj
b25zdCBjaGFyKiBiYXNlVVJJKTsKICAgICB2b2lkIGxvYWRQbGFpblRleHQoY29uc3QgY2hhciog
cGxhaW5UZXh0KTsKQEAgLTUxLDYgKzU5LDggQEAgcHVibGljOgogICAgIHZvaWQgcmVzZXQoKTsK
IAogICAgIHZvaWQgc2V0UmVkaXJlY3RVUkkoY29uc3QgY2hhciogdXJpKSB7IG1fcmVkaXJlY3RV
UkkgPSB1cmk7IH0KKyAgICB2b2lkIHNldEZyYW1lUmVkaXJlY3RVUkkoY29uc3QgY2hhciogdXJp
KSB7IG1fZnJhbWVSZWRpcmVjdFVSSSA9IHVyaTsgfQorICAgIHZvaWQgc2V0RnJhbWVVUkkoY29u
c3QgY2hhciogZnJhbWVVUkkpIHsgbV9mcmFtZVVSSSA9IGZyYW1lVVJJOyB9CiAKICAgICBlbnVt
IExvYWRFdmVudHMgewogICAgICAgICBQcm92aXNpb25hbExvYWRTdGFydGVkLApAQCAtNjcsNiAr
NzcsMTEgQEAgcHVibGljOgogICAgIFZlY3RvcjxMb2FkRXZlbnRzPiBtX2xvYWRFdmVudHM7CiAg
ICAgZmxvYXQgbV9lc3RpbWF0ZWRQcm9ncmVzczsKICAgICBDU3RyaW5nIG1fcmVkaXJlY3RVUkk7
CisKKyAgICBib29sIG1fZnJhbWVMb2FkRmFpbGVkOworICAgIFZlY3RvcjxMb2FkRXZlbnRzPiBt
X2ZyYW1lTG9hZEV2ZW50czsKKyAgICBDU3RyaW5nIG1fZnJhbWVVUkk7CisgICAgQ1N0cmluZyBt
X2ZyYW1lUmVkaXJlY3RVUkk7CiB9OwogCiAjZW5kaWYgLy8gTG9hZFRyYWNraW5nVGVzdF9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279635</attachid>
            <date>2016-05-24 01:18:25 -0700</date>
            <delta_ts>2016-05-25 06:59:51 -0700</delta_ts>
            <desc>proposed patch ]I[</desc>
            <filename>wk.patch</filename>
            <type>text/plain</type>
            <size>36046</size>
            <attacher name="Milan Crha">mcrha</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBjYzU5ZGM5Li45MTQyY2NjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMTYtMDUtMjQgIE1pbGFuIENyaGEgIDxtY3JoYUByZWRoYXQuY29tPgorCisgICAgICAg
IFtHVEtdIFByb3ZpZGUgZnJhbWUtcmVsYXRlZCBsb2FkIHNpZ25hbHMgaW4gV2ViS2l0V2ViVmll
dworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3ODk5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRMb2FkZXJDbGllbnQuY3BwOgorICAgICAgICAoTG9hZGVyQ2xp
ZW50OjpnZXRGcmFtZVVSTCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Vmlldy5jcHA6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdCk6CisgICAgICAg
ICh3ZWJraXRXZWJWaWV3TG9hZEZhaWxlZCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3RnJhbWVM
b2FkQ2hhbmdlZCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3RnJhbWVMb2FkRmFpbGVkKToKKyAg
ICAgICAgKHdlYmtpdFdlYlZpZXdGcmFtZUxvYWRGYWlsZWRXaXRoVExTRXJyb3JzKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3Lmg6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaDoKKwogMjAxNi0wNS0xOSAgQ2hyaXMg
RHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEltcHJvdmUgY29tcGlsZS10aW1l
IGFzc2VydGlvbnMgaW4gaXM8PigpIC8gZG93bmNhc3Q8PigpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRMb2FkZXJDbGllbnQuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TG9hZGVyQ2xpZW50LmNwcAppbmRleCBm
NTJjOGM3Li5iZTU3ZGMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRMb2FkZXJDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdExvYWRlckNsaWVudC5jcHAKQEAgLTQxLDU0ICs0MSw3MSBAQCBwdWJs
aWM6CiAgICAgfQogCiBwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBnZXRGcmFtZVVS
TChjb25zdCBXZWJGcmFtZVByb3h5JiBmcmFtZSkKKyAgICB7CisgICAgICAgIGlmIChmcmFtZS51
cmwoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gZnJhbWUucHJvdmlzaW9uYWxVUkwo
KS51dGY4KCkuZGF0YSgpOworICAgICAgICByZXR1cm4gZnJhbWUudXJsKCkudXRmOCgpLmRhdGEo
KTsKKyAgICB9CisKICAgICB2b2lkIGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUoV2Vi
UGFnZVByb3h5JiwgV2ViRnJhbWVQcm94eSYgZnJhbWUsIEFQSTo6TmF2aWdhdGlvbiosIEFQSTo6
T2JqZWN0KiAvKiB1c2VyRGF0YSAqLykgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGlmICghZnJh
bWUuaXNNYWluRnJhbWUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgd2Via2l0V2Vi
Vmlld0xvYWRDaGFuZ2VkKG1fd2ViVmlldywgV0VCS0lUX0xPQURfU1RBUlRFRCk7CisgICAgICAg
IGlmIChmcmFtZS5pc01haW5GcmFtZSgpKQorICAgICAgICAgICAgd2Via2l0V2ViVmlld0xvYWRD
aGFuZ2VkKG1fd2ViVmlldywgV0VCS0lUX0xPQURfU1RBUlRFRCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHdlYmtpdFdlYlZpZXdGcmFtZUxvYWRDaGFuZ2VkKG1fd2ViVmlldywgZ2V0RnJh
bWVVUkwoZnJhbWUpLCBXRUJLSVRfTE9BRF9TVEFSVEVEKTsKICAgICB9CiAKICAgICB2b2lkIGRp
ZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKFdlYlBhZ2VQ
cm94eSYsIFdlYkZyYW1lUHJveHkmIGZyYW1lLCBBUEk6Ok5hdmlnYXRpb24qLCBBUEk6Ok9iamVj
dCogLyogdXNlckRhdGEgKi8pIG92ZXJyaWRlCiAgICAgewotICAgICAgICBpZiAoIWZyYW1lLmlz
TWFpbkZyYW1lKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHdlYmtpdFdlYlZpZXdM
b2FkQ2hhbmdlZChtX3dlYlZpZXcsIFdFQktJVF9MT0FEX1JFRElSRUNURUQpOworICAgICAgICBp
ZiAoZnJhbWUuaXNNYWluRnJhbWUoKSkKKyAgICAgICAgICAgIHdlYmtpdFdlYlZpZXdMb2FkQ2hh
bmdlZChtX3dlYlZpZXcsIFdFQktJVF9MT0FEX1JFRElSRUNURUQpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICB3ZWJraXRXZWJWaWV3RnJhbWVMb2FkQ2hhbmdlZChtX3dlYlZpZXcsIGdldEZy
YW1lVVJMKGZyYW1lKSwgV0VCS0lUX0xPQURfUkVESVJFQ1RFRCk7CiAgICAgfQogCiAgICAgdm9p
ZCBkaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yRm9yRnJhbWUoV2ViUGFnZVByb3h5Jiwg
V2ViRnJhbWVQcm94eSYgZnJhbWUsIEFQSTo6TmF2aWdhdGlvbiosIGNvbnN0IFJlc291cmNlRXJy
b3ImIHJlc291cmNlRXJyb3IsIEFQSTo6T2JqZWN0KiAvKiB1c2VyRGF0YSAqLykgb3ZlcnJpZGUK
ICAgICB7Ci0gICAgICAgIGlmICghZnJhbWUuaXNNYWluRnJhbWUoKSkKLSAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgR1VuaXF1ZVB0cjxHRXJyb3I+IGVycm9yKGdfZXJyb3JfbmV3X2xpdGVy
YWwoZ19xdWFya19mcm9tX3N0cmluZyhyZXNvdXJjZUVycm9yLmRvbWFpbigpLnV0ZjgoKS5kYXRh
KCkpLAogICAgICAgICAgICAgdG9XZWJLaXRFcnJvcihyZXNvdXJjZUVycm9yLmVycm9yQ29kZSgp
KSwgcmVzb3VyY2VFcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCkpKTsK
ICAgICAgICAgaWYgKHJlc291cmNlRXJyb3IudGxzRXJyb3JzKCkpIHsKLSAgICAgICAgICAgIHdl
YmtpdFdlYlZpZXdMb2FkRmFpbGVkV2l0aFRMU0Vycm9ycyhtX3dlYlZpZXcsIHJlc291cmNlRXJy
b3IuZmFpbGluZ1VSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGVycm9yLmdldCgpLAotICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PEdUbHNDZXJ0aWZpY2F0ZUZsYWdzPihyZXNvdXJjZUVy
cm9yLnRsc0Vycm9ycygpKSwgcmVzb3VyY2VFcnJvci5jZXJ0aWZpY2F0ZSgpKTsKLSAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBpZiAoZnJhbWUuaXNNYWluRnJhbWUoKSkgeworICAgICAgICAg
ICAgICAgIHdlYmtpdFdlYlZpZXdMb2FkRmFpbGVkV2l0aFRMU0Vycm9ycyhtX3dlYlZpZXcsIHJl
c291cmNlRXJyb3IuZmFpbGluZ1VSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGVycm9yLmdl
dCgpLAorICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxHVGxzQ2VydGlmaWNhdGVGbGFn
cz4ocmVzb3VyY2VFcnJvci50bHNFcnJvcnMoKSksIHJlc291cmNlRXJyb3IuY2VydGlmaWNhdGUo
KSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHdlYmtpdFdlYlZpZXdG
cmFtZUxvYWRGYWlsZWRXaXRoVExTRXJyb3JzKG1fd2ViVmlldywgcmVzb3VyY2VFcnJvci5mYWls
aW5nVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgZXJyb3IuZ2V0KCksCisgICAgICAgICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PEdUbHNDZXJ0aWZpY2F0ZUZsYWdzPihyZXNvdXJjZUVycm9y
LnRsc0Vycm9ycygpKSwgcmVzb3VyY2VFcnJvci5jZXJ0aWZpY2F0ZSgpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlIGlmIChmcmFtZS5pc01haW5GcmFtZSgpKQogICAgICAgICAgICAg
d2Via2l0V2ViVmlld0xvYWRGYWlsZWQobV93ZWJWaWV3LCBXRUJLSVRfTE9BRF9TVEFSVEVELCBy
ZXNvdXJjZUVycm9yLmZhaWxpbmdVUkwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBlcnJvci5n
ZXQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHdlYmtpdFdlYlZpZXdGcmFtZUxvYWRG
YWlsZWQobV93ZWJWaWV3LCBXRUJLSVRfTE9BRF9TVEFSVEVELCByZXNvdXJjZUVycm9yLmZhaWxp
bmdVUkwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBlcnJvci5nZXQoKSk7CiAgICAgfQogCiAg
ICAgdm9pZCBkaWRDb21taXRMb2FkRm9yRnJhbWUoV2ViUGFnZVByb3h5JiwgV2ViRnJhbWVQcm94
eSYgZnJhbWUsIEFQSTo6TmF2aWdhdGlvbiosIEFQSTo6T2JqZWN0KiAvKiB1c2VyRGF0YSAqLykg
b3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGlmICghZnJhbWUuaXNNYWluRnJhbWUoKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgd2Via2l0V2ViVmlld0xvYWRDaGFuZ2VkKG1fd2ViVmll
dywgV0VCS0lUX0xPQURfQ09NTUlUVEVEKTsKKyAgICAgICAgaWYgKGZyYW1lLmlzTWFpbkZyYW1l
KCkpCisgICAgICAgICAgICB3ZWJraXRXZWJWaWV3TG9hZENoYW5nZWQobV93ZWJWaWV3LCBXRUJL
SVRfTE9BRF9DT01NSVRURUQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB3ZWJraXRXZWJW
aWV3RnJhbWVMb2FkQ2hhbmdlZChtX3dlYlZpZXcsIGdldEZyYW1lVVJMKGZyYW1lKSwgV0VCS0lU
X0xPQURfQ09NTUlUVEVEKTsKICAgICB9CiAKICAgICB2b2lkIGRpZEZpbmlzaExvYWRGb3JGcmFt
ZShXZWJQYWdlUHJveHkmLCBXZWJGcmFtZVByb3h5JiBmcmFtZSwgQVBJOjpOYXZpZ2F0aW9uKiwg
QVBJOjpPYmplY3QqIC8qIHVzZXJEYXRhICovKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgaWYg
KCFmcmFtZS5pc01haW5GcmFtZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB3ZWJr
aXRXZWJWaWV3TG9hZENoYW5nZWQobV93ZWJWaWV3LCBXRUJLSVRfTE9BRF9GSU5JU0hFRCk7Cisg
ICAgICAgIGlmIChmcmFtZS5pc01haW5GcmFtZSgpKQorICAgICAgICAgICAgd2Via2l0V2ViVmll
d0xvYWRDaGFuZ2VkKG1fd2ViVmlldywgV0VCS0lUX0xPQURfRklOSVNIRUQpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICB3ZWJraXRXZWJWaWV3RnJhbWVMb2FkQ2hhbmdlZChtX3dlYlZpZXcs
IGdldEZyYW1lVVJMKGZyYW1lKSwgV0VCS0lUX0xPQURfRklOSVNIRUQpOwogICAgIH0KIAogICAg
IHZvaWQgZGlkRmFpbExvYWRXaXRoRXJyb3JGb3JGcmFtZShXZWJQYWdlUHJveHkmLCBXZWJGcmFt
ZVByb3h5JiBmcmFtZSwgQVBJOjpOYXZpZ2F0aW9uKiwgY29uc3QgUmVzb3VyY2VFcnJvciYgcmVz
b3VyY2VFcnJvciwgQVBJOjpPYmplY3QqIC8qIHVzZXJEYXRhICovKSBvdmVycmlkZQogICAgIHsK
LSAgICAgICAgaWYgKCFmcmFtZS5pc01haW5GcmFtZSgpKQotICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICBHVW5pcXVlUHRyPEdFcnJvcj4gZXJyb3IoZ19lcnJvcl9uZXdfbGl0ZXJhbChnX3F1
YXJrX2Zyb21fc3RyaW5nKHJlc291cmNlRXJyb3IuZG9tYWluKCkudXRmOCgpLmRhdGEoKSksCiAg
ICAgICAgICAgICB0b1dlYktpdEVycm9yKHJlc291cmNlRXJyb3IuZXJyb3JDb2RlKCkpLCByZXNv
dXJjZUVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCkudXRmOCgpLmRhdGEoKSkpOwotICAgICAg
ICB3ZWJraXRXZWJWaWV3TG9hZEZhaWxlZChtX3dlYlZpZXcsIFdFQktJVF9MT0FEX0NPTU1JVFRF
RCwgcmVzb3VyY2VFcnJvci5mYWlsaW5nVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgZXJy
b3IuZ2V0KCkpOworICAgICAgICBpZiAoZnJhbWUuaXNNYWluRnJhbWUoKSkKKyAgICAgICAgICAg
IHdlYmtpdFdlYlZpZXdMb2FkRmFpbGVkKG1fd2ViVmlldywgV0VCS0lUX0xPQURfQ09NTUlUVEVE
LCByZXNvdXJjZUVycm9yLmZhaWxpbmdVUkwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBlcnJv
ci5nZXQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHdlYmtpdFdlYlZpZXdGcmFtZUxv
YWRGYWlsZWQobV93ZWJWaWV3LCBXRUJLSVRfTE9BRF9DT01NSVRURUQsIHJlc291cmNlRXJyb3Iu
ZmFpbGluZ1VSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGVycm9yLmdldCgpKTsKICAgICB9
CiAKICAgICB2b2lkIGRpZERpc3BsYXlJbnNlY3VyZUNvbnRlbnRGb3JGcmFtZShXZWJQYWdlUHJv
eHkmLCBXZWJGcmFtZVByb3h5JiwgQVBJOjpPYmplY3QqIC8qIHVzZXJEYXRhICovKSBvdmVycmlk
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Vmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
LmNwcAppbmRleCA5NmZlMWZjLi45N2RlNDA1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKQEAgLTk5LDYgKzk5LDkgQEAgZW51
bSB7CiAgICAgTE9BRF9DSEFOR0VELAogICAgIExPQURfRkFJTEVELAogICAgIExPQURfRkFJTEVE
X1dJVEhfVExTX0VSUk9SUywKKyAgICBGUkFNRV9MT0FEX0NIQU5HRUQsCisgICAgRlJBTUVfTE9B
RF9GQUlMRUQsCisgICAgRlJBTUVfTE9BRF9GQUlMRURfV0lUSF9UTFNfRVJST1JTLAogCiAgICAg
Q1JFQVRFLAogICAgIFJFQURZX1RPX1NIT1csCkBAIC0xMTIyLDYgKzExMjUsMTA0IEBAIHN0YXRp
YyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyogd2Vi
Vmlld0NsYXNzKQogICAgICAgICAgICAgR19UWVBFX1RMU19DRVJUSUZJQ0FURV9GTEFHUyk7CiAK
ICAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJWaWV3OjpmcmFtZS1sb2FkLWNoYW5nZWQ6CisgICAg
ICogQHdlYl92aWV3OiB0aGUgI1dlYktpdFdlYlZpZXcgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBl
bWl0dGVkCisgICAgICogQGZyYW1lX3VyaTogVVJJIG9mIHRoZSBmcmFtZSwgd2hvc2UgbG9hZCBz
dGF0ZSBjaGFuZ2VkCisgICAgICogQGxvYWRfZXZlbnQ6IHRoZSAjV2ViS2l0TG9hZEV2ZW50Cisg
ICAgICoKKyAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIGEgbG9hZCBvcGVyYXRpb24gb2Ygb25lIG9m
IHRoZSBmcmFtZXMKKyAgICAgKiBpbiBAd2ViX3ZpZXcgY2hhbmdlcy4KKyAgICAgKgorICAgICAq
IEl0J3MgdGhlIHNhbWUgYXMgI1dlYktpdFdlYlZpZXc6OmxvYWQtY2hhbmdlZCwgZXhjZXB0IGl0
IGlzIGludm9rZWQKKyAgICAgKiBmb3IgYW55IG9mIHRoZSBmcmFtZXMgaW4gdGhlIEB3ZWJfdmll
dywgYnV0IHRoZSBtYWluIGZyYW1lLgorICAgICAqIFNlZSAjV2ViS2l0V2ViVmlldzo6bG9hZC1j
aGFuZ2VkIGZvciBhIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24uCisgICAgICoKKyAgICAgKiBT
aW5jZTogMi4xNAorICAgICAqKi8KKyAgICBzaWduYWxzW0ZSQU1FX0xPQURfQ0hBTkdFRF0gPQor
ICAgICAgICBnX3NpZ25hbF9uZXcoCisgICAgICAgICAgICAiZnJhbWUtbG9hZC1jaGFuZ2VkIiwK
KyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAg
ICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRX
ZWJWaWV3Q2xhc3MsIGZyYW1lX2xvYWRfY2hhbmdlZCksCisgICAgICAgICAgICAwLCAwLAorICAg
ICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX2dlbmVyaWMsCisgICAgICAgICAgICBHX1RZUEVf
Tk9ORSwgMiwKKyAgICAgICAgICAgIEdfVFlQRV9TVFJJTkcsCisgICAgICAgICAgICBXRUJLSVRf
VFlQRV9MT0FEX0VWRU5UKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFdlYlZpZXc6OmZyYW1l
LWxvYWQtZmFpbGVkOgorICAgICAqIEB3ZWJfdmlldzogdGhlICNXZWJLaXRXZWJWaWV3IG9uIHdo
aWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAorICAgICAqIEBsb2FkX2V2ZW50OiB0aGUgI1dlYktp
dExvYWRFdmVudCBvZiB0aGUgbG9hZCBvcGVyYXRpb24KKyAgICAgKiBAZmFpbGluZ191cmk6IHRo
ZSBmcmFtZSBVUkkgdGhhdCBmYWlsZWQgdG8gbG9hZAorICAgICAqIEBlcnJvcjogdGhlICNHRXJy
b3IgdGhhdCB3YXMgdHJpZ2dlcmVkCisgICAgICoKKyAgICAgKiBFbWl0dGVkIHdoZW4gYW4gZXJy
b3Igb2NjdXJzIGR1cmluZyBhIGxvYWQgb3BlcmF0aW9uIG9mIGFuIGlubmVyIGZyYW1lLgorICAg
ICAqIElmIHRoZSBlcnJvciBoYXBwZW5lZCB3aGVuIHN0YXJ0aW5nIHRvIGxvYWQgZGF0YSBmb3Ig
YSBwYWdlCisgICAgICogQGxvYWRfZXZlbnQgd2lsbCBiZSAlV0VCS0lUX0xPQURfU1RBUlRFRC4g
SWYgaXQgaGFwcGVuZWQgd2hpbGUKKyAgICAgKiBsb2FkaW5nIGEgY29tbWl0dGVkIGRhdGEgc291
cmNlIEBsb2FkX2V2ZW50IHdpbGwgYmUgJVdFQktJVF9MT0FEX0NPTU1JVFRFRC4KKyAgICAgKiBT
aW5jZSBhIGxvYWQgZXJyb3IgY2F1c2VzIHRoZSBsb2FkIG9wZXJhdGlvbiB0byBmaW5pc2gsIHRo
ZSBzaWduYWwKKyAgICAgKiBXZWJLaXRXZWJWaWV3OjpmcmFtZS1sb2FkLWNoYW5nZWQgd2lsbCBh
bHdheXMgYmUgZW1pdHRlZCB3aXRoCisgICAgICogdGhlICVXRUJLSVRfTE9BRF9GSU5JU0hFRCBl
dmVudCByaWdodCBhZnRlciB0aGlzIG9uZS4KKyAgICAgKgorICAgICAqIEJ5IGRlZmF1bHQsIGlm
IHRoZSBzaWduYWwgaXMgbm90IGhhbmRsZWQsIGEgc3RvY2sgZXJyb3IgcGFnZSB3aWxsIGJlIGRp
c3BsYXllZC4KKyAgICAgKiBZb3UgbmVlZCB0byBoYW5kbGUgdGhlIHNpZ25hbCBpZiB5b3Ugd2Fu
dCB0byBwcm92aWRlIHlvdXIgb3duIGVycm9yIHBhZ2UuCisgICAgICoKKyAgICAgKiBSZXR1cm5z
OiAlVFJVRSB0byBzdG9wIG90aGVyIGhhbmRsZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3IgdGhl
IGV2ZW50LgorICAgICAqICAgICVGQUxTRSB0byBwcm9wYWdhdGUgdGhlIGV2ZW50IGZ1cnRoZXIu
CisgICAgICoKKyAgICAgKiBTaW5jZTogMi4xNAorICAgICAqLworICAgIHNpZ25hbHNbRlJBTUVf
TE9BRF9GQUlMRURdID0KKyAgICAgICAgZ19zaWduYWxfbmV3KAorICAgICAgICAgICAgImZyYW1l
LWxvYWQtZmFpbGVkIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFz
cyksCisgICAgICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgIEdfU1RSVUNU
X09GRlNFVChXZWJLaXRXZWJWaWV3Q2xhc3MsIGZyYW1lX2xvYWRfZmFpbGVkKSwKKyAgICAgICAg
ICAgIGdfc2lnbmFsX2FjY3VtdWxhdG9yX3RydWVfaGFuZGxlZCwgMCwKKyAgICAgICAgICAgIGdf
Y2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLAorICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDMs
CisgICAgICAgICAgICBXRUJLSVRfVFlQRV9MT0FEX0VWRU5ULAorICAgICAgICAgICAgR19UWVBF
X1NUUklORywKKyAgICAgICAgICAgIEdfVFlQRV9FUlJPUiB8IEdfU0lHTkFMX1RZUEVfU1RBVElD
X1NDT1BFKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFdlYlZpZXc6OmZyYW1lLWxvYWQtZmFp
bGVkLXdpdGgtdGxzLWVycm9yczoKKyAgICAgKiBAd2ViX3ZpZXc6IHRoZSAjV2ViS2l0V2ViVmll
dyBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKKyAgICAgKiBAZmFpbGluZ191cmk6IHRo
ZSBmcmFtZSBVUkkgdGhhdCBmYWlsZWQgdG8gbG9hZAorICAgICAqIEBjZXJ0aWZpY2F0ZTogYSAj
R1Rsc0NlcnRpZmljYXRlCisgICAgICogQGVycm9yczogYSAjR1Rsc0NlcnRpZmljYXRlRmxhZ3Mg
d2l0aCB0aGUgdmVyaWZpY2F0aW9uIHN0YXR1cyBvZiBAY2VydGlmaWNhdGUKKyAgICAgKgorICAg
ICAqIEVtaXR0ZWQgd2hlbiBhIFRMUyBlcnJvciBvY2N1cnMgZHVyaW5nIGEgbG9hZCBvcGVyYXRp
b24gZm8gYW4gaW5uZXIgZnJhbWUuCisgICAgICogVG8gYWxsb3cgYW4gZXhjZXB0aW9uIGZvciB0
aGlzIEBjZXJ0aWZpY2F0ZQorICAgICAqIGFuZCB0aGUgaG9zdCBvZiBAZmFpbGluZ191cmkgdXNl
IHdlYmtpdF93ZWJfY29udGV4dF9hbGxvd190bHNfY2VydGlmaWNhdGVfZm9yX2hvc3QoKS4KKyAg
ICAgKgorICAgICAqIFRvIGhhbmRsZSB0aGlzIHNpZ25hbCBhc3luY2hyb25vdXNseSB5b3Ugc2hv
dWxkIGNhbGwgZ19vYmplY3RfcmVmKCkgb24gQGNlcnRpZmljYXRlCisgICAgICogYW5kIHJldHVy
biAlVFJVRS4KKyAgICAgKgorICAgICAqIElmICVGQUxTRSBpcyByZXR1cm5lZCwgI1dlYktpdFdl
YlZpZXc6OmZyYW1lLWxvYWQtZmFpbGVkIHdpbGwgYmUgZW1pdHRlZC4gVGhlIGxvYWQKKyAgICAg
KiB3aWxsIGZpbmlzaCByZWdhcmRsZXNzIG9mIHRoZSByZXR1cm5lZCB2YWx1ZS4KKyAgICAgKgor
ICAgICAqIFJldHVybnM6ICVUUlVFIHRvIHN0b3Agb3RoZXIgaGFuZGxlcnMgZnJvbSBiZWluZyBp
bnZva2VkIGZvciB0aGUgZXZlbnQuCisgICAgICogICAlRkFMU0UgdG8gcHJvcGFnYXRlIHRoZSBl
dmVudCBmdXJ0aGVyLgorICAgICAqCisgICAgICogU2luY2U6IDIuMTQKKyAgICAgKi8KKyAgICBz
aWduYWxzW0ZSQU1FX0xPQURfRkFJTEVEX1dJVEhfVExTX0VSUk9SU10gPQorICAgICAgICBnX3Np
Z25hbF9uZXcoCisgICAgICAgICAgICAiZnJhbWUtbG9hZC1mYWlsZWQtd2l0aC10bHMtZXJyb3Jz
IiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAg
ICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJL
aXRXZWJWaWV3Q2xhc3MsIGZyYW1lX2xvYWRfZmFpbGVkX3dpdGhfdGxzX2Vycm9ycyksCisgICAg
ICAgICAgICBnX3NpZ25hbF9hY2N1bXVsYXRvcl90cnVlX2hhbmRsZWQsIDAsCisgICAgICAgICAg
ICBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywKKyAgICAgICAgICAgIEdfVFlQRV9CT09MRUFO
LCAzLAorICAgICAgICAgICAgR19UWVBFX1NUUklORywKKyAgICAgICAgICAgIEdfVFlQRV9UTFNf
Q0VSVElGSUNBVEUsCisgICAgICAgICAgICBHX1RZUEVfVExTX0NFUlRJRklDQVRFX0ZMQUdTKTsK
KworICAgIC8qKgogICAgICAqIFdlYktpdFdlYlZpZXc6OmNyZWF0ZToKICAgICAgKiBAd2ViX3Zp
ZXc6IHRoZSAjV2ViS2l0V2ViVmlldyBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKICAg
ICAgKiBAbmF2aWdhdGlvbl9hY3Rpb246IGEgI1dlYktpdE5hdmlnYXRpb25BY3Rpb24KQEAgLTE4
MDMsNyArMTkwNCw3IEBAIHZvaWQgd2Via2l0V2ViVmlld0xvYWRDaGFuZ2VkKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcsIFdlYktpdExvYWRFdmVudCBsb2FkRXZlbnQpCiAgICAgZ19zaWduYWxfZW1p
dCh3ZWJWaWV3LCBzaWduYWxzW0xPQURfQ0hBTkdFRF0sIDAsIGxvYWRFdmVudCk7CiB9CiAKLXZv
aWQgd2Via2l0V2ViVmlld0xvYWRGYWlsZWQoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0
TG9hZEV2ZW50IGxvYWRFdmVudCwgY29uc3QgY2hhciogZmFpbGluZ1VSSSwgR0Vycm9yICplcnJv
cikKK3ZvaWQgd2Via2l0V2ViVmlld0xvYWRGYWlsZWQoV2ViS2l0V2ViVmlldyogd2ViVmlldywg
V2ViS2l0TG9hZEV2ZW50IGxvYWRFdmVudCwgY29uc3QgY2hhciogZmFpbGluZ1VSSSwgR0Vycm9y
KiBlcnJvcikKIHsKICAgICB3ZWJraXRXZWJWaWV3Q2FuY2VsQXV0aGVudGljYXRpb25SZXF1ZXN0
KHdlYlZpZXcpOwogCkBAIC0xODI3LDYgKzE5MjgsMzEgQEAgdm9pZCB3ZWJraXRXZWJWaWV3TG9h
ZEZhaWxlZFdpdGhUTFNFcnJvcnMoV2ViS2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgY2hhciog
ZmEKICAgICBnX3NpZ25hbF9lbWl0KHdlYlZpZXcsIHNpZ25hbHNbTE9BRF9DSEFOR0VEXSwgMCwg
V0VCS0lUX0xPQURfRklOSVNIRUQpOwogfQogCit2b2lkIHdlYmtpdFdlYlZpZXdGcmFtZUxvYWRD
aGFuZ2VkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IGNoYXIqIHVyaSwgV2ViS2l0TG9h
ZEV2ZW50IGxvYWRFdmVudCkKK3sKKyAgICBnX3NpZ25hbF9lbWl0KHdlYlZpZXcsIHNpZ25hbHNb
RlJBTUVfTE9BRF9DSEFOR0VEXSwgMCwgdXJpLCBsb2FkRXZlbnQpOworfQorCit2b2lkIHdlYmtp
dFdlYlZpZXdGcmFtZUxvYWRGYWlsZWQoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0TG9h
ZEV2ZW50IGxvYWRFdmVudCwgY29uc3QgY2hhciogZmFpbGluZ1VSSSwgR0Vycm9yKiBlcnJvcikK
K3sKKyAgICBnYm9vbGVhbiByZXR1cm5WYWx1ZTsKKyAgICBnX3NpZ25hbF9lbWl0KHdlYlZpZXcs
IHNpZ25hbHNbRlJBTUVfTE9BRF9GQUlMRURdLCAwLCBsb2FkRXZlbnQsIGZhaWxpbmdVUkksIGVy
cm9yLCAmcmV0dXJuVmFsdWUpOworICAgIGdfc2lnbmFsX2VtaXQod2ViVmlldywgc2lnbmFsc1tG
UkFNRV9MT0FEX0NIQU5HRURdLCAwLCBmYWlsaW5nVVJJLCBXRUJLSVRfTE9BRF9GSU5JU0hFRCk7
Cit9CisKK3ZvaWQgd2Via2l0V2ViVmlld0ZyYW1lTG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMoV2Vi
S2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgY2hhciogZmFpbGluZ1VSSSwgR0Vycm9yKiBlcnJv
ciwgR1Rsc0NlcnRpZmljYXRlRmxhZ3MgdGxzRXJyb3JzLCBHVGxzQ2VydGlmaWNhdGUqIGNlcnRp
ZmljYXRlKQoreworICAgIFdlYktpdFRMU0Vycm9yc1BvbGljeSB0bHNFcnJvcnNQb2xpY3kgPSB3
ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3Rsc19lcnJvcnNfcG9saWN5KHdlYlZpZXctPnByaXYtPmNv
bnRleHQuZ2V0KCkpOworICAgIGlmICh0bHNFcnJvcnNQb2xpY3kgPT0gV0VCS0lUX1RMU19FUlJP
UlNfUE9MSUNZX0ZBSUwpIHsKKyAgICAgICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWU7CisgICAgICAg
IGdfc2lnbmFsX2VtaXQod2ViVmlldywgc2lnbmFsc1tGUkFNRV9MT0FEX0ZBSUxFRF9XSVRIX1RM
U19FUlJPUlNdLCAwLCBmYWlsaW5nVVJJLCBjZXJ0aWZpY2F0ZSwgdGxzRXJyb3JzLCAmcmV0dXJu
VmFsdWUpOworICAgICAgICBpZiAoIXJldHVyblZhbHVlKQorICAgICAgICAgICAgZ19zaWduYWxf
ZW1pdCh3ZWJWaWV3LCBzaWduYWxzW0ZSQU1FX0xPQURfRkFJTEVEXSwgMCwgV0VCS0lUX0xPQURf
U1RBUlRFRCwgZmFpbGluZ1VSSSwgZXJyb3IsICZyZXR1cm5WYWx1ZSk7CisgICAgfQorCisgICAg
Z19zaWduYWxfZW1pdCh3ZWJWaWV3LCBzaWduYWxzW0ZSQU1FX0xPQURfQ0hBTkdFRF0sIDAsIGZh
aWxpbmdVUkksIFdFQktJVF9MT0FEX0ZJTklTSEVEKTsKK30KKwogV2ViUGFnZVByb3h5KiB3ZWJr
aXRXZWJWaWV3Q3JlYXRlTmV3UGFnZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBXaW5k
b3dGZWF0dXJlcyYgd2luZG93RmVhdHVyZXMsIFdlYktpdE5hdmlnYXRpb25BY3Rpb24qIG5hdmln
YXRpb25BY3Rpb24pCiB7CiAgICAgV2ViS2l0V2ViVmlldyogbmV3V2ViVmlldzsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaAppbmRleCA3MDA5
NjhmLi41MzQzZWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViVmlldy5oCkBAIC0yNDksMTEgKzI0OSwyMSBAQCBzdHJ1Y3QgX1dlYktpdFdlYlZp
ZXdDbGFzcyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXZWJLaXROb3RpZmljYXRpb24gICAgICAgICAgKm5vdGlmaWNhdGlvbik7CiAgICAgZ2Jvb2xl
YW4gICAoKiBydW5fY29sb3JfY2hvb3NlcikgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAg
ICAgICAgICAgKndlYl92aWV3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV2ViS2l0Q29sb3JDaG9vc2VyUmVxdWVzdCAgICpyZXF1ZXN0KTsKKyAgICB2
b2lkICAgICAgICgqIGZyYW1lX2xvYWRfY2hhbmdlZCkgICAgICAgICAgKFdlYktpdFdlYlZpZXcg
ICAgICAgICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICAgKmZyYW1lX3VyaSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdExv
YWRFdmVudCAgICAgICAgICAgICAgbG9hZF9ldmVudCk7CisgICAgZ2Jvb2xlYW4gICAoKiBmcmFt
ZV9sb2FkX2ZhaWxlZCkgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICAgKndl
Yl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
V2ViS2l0TG9hZEV2ZW50ICAgICAgICAgICAgICBsb2FkX2V2ZW50LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAg
ICAgICpmYWlsaW5nX3VyaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdFcnJvciAgICAgICAgICAgICAgICAgICAgICAqZXJyb3IpOworICAgIGdib29s
ZWFuICAgKCogZnJhbWVfbG9hZF9mYWlsZWRfd2l0aF90bHNfZXJyb3JzKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAg
ICAgICAgICp3ZWJfdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgICAqZmFpbGluZ191cmksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVGxzQ2VydGlmaWNh
dGUgICAgICAgICAgICAgKmNlcnRpZmljYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR1Rsc0NlcnRpZmljYXRlRmxhZ3MgICAgICAgICBlcnJvcnMp
OwogCi0gICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQwKSAodm9pZCk7Ci0gICAgdm9pZCAoKl93
ZWJraXRfcmVzZXJ2ZWQxKSAodm9pZCk7Ci0gICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQyKSAo
dm9pZCk7Ci0gICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQzKSAodm9pZCk7CisgICAgLyogUmVz
ZXJ2ZWQgZm9yIGZ1dHVyZSBleHBhbnNpb24uICovCisgICAgZ3BvaW50ZXIgX3dlYmtpdF9yZXNl
cnZlZFsxXTsKIH07CiAKIFdFQktJVF9BUEkgR1R5cGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oCmluZGV4IDYxZTBh
NTUuLmQ3Mjc2MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXdQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaApAQCAtMzcsNiArMzcsOSBAQAogdm9pZCB3ZWJr
aXRXZWJWaWV3TG9hZENoYW5nZWQoV2ViS2l0V2ViVmlldyosIFdlYktpdExvYWRFdmVudCk7CiB2
b2lkIHdlYmtpdFdlYlZpZXdMb2FkRmFpbGVkKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRMb2FkRXZl
bnQsIGNvbnN0IGNoYXIqIGZhaWxpbmdVUkksIEdFcnJvciopOwogdm9pZCB3ZWJraXRXZWJWaWV3
TG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMoV2ViS2l0V2ViVmlldyosIGNvbnN0IGNoYXIqIGZhaWxp
bmdVUkksIEdFcnJvciosIEdUbHNDZXJ0aWZpY2F0ZUZsYWdzLCBHVGxzQ2VydGlmaWNhdGUqKTsK
K3ZvaWQgd2Via2l0V2ViVmlld0ZyYW1lTG9hZENoYW5nZWQoV2ViS2l0V2ViVmlldyosIGNvbnN0
IGNoYXIqIHVyaSwgV2ViS2l0TG9hZEV2ZW50KTsKK3ZvaWQgd2Via2l0V2ViVmlld0ZyYW1lTG9h
ZEZhaWxlZChXZWJLaXRXZWJWaWV3KiwgV2ViS2l0TG9hZEV2ZW50LCBjb25zdCBjaGFyKiBmYWls
aW5nVVJJLCBHRXJyb3IqKTsKK3ZvaWQgd2Via2l0V2ViVmlld0ZyYW1lTG9hZEZhaWxlZFdpdGhU
TFNFcnJvcnMoV2ViS2l0V2ViVmlldyosIGNvbnN0IGNoYXIqIGZhaWxpbmdVUkksIEdFcnJvcios
IEdUbHNDZXJ0aWZpY2F0ZUZsYWdzLCBHVGxzQ2VydGlmaWNhdGUqKTsKIFdlYktpdDo6V2ViUGFn
ZVByb3h5KiB3ZWJraXRXZWJWaWV3Q3JlYXRlTmV3UGFnZShXZWJLaXRXZWJWaWV3KiwgY29uc3Qg
V2ViQ29yZTo6V2luZG93RmVhdHVyZXMmLCBXZWJLaXROYXZpZ2F0aW9uQWN0aW9uKik7CiB2b2lk
IHdlYmtpdFdlYlZpZXdSZWFkeVRvU2hvd1BhZ2UoV2ViS2l0V2ViVmlldyopOwogdm9pZCB3ZWJr
aXRXZWJWaWV3UnVuQXNNb2RhbChXZWJLaXRXZWJWaWV3Kik7CmRpZmYgLS1naXQgYS9Ub29scy9D
aGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNGEyMDNiZi4uZTljMjhmNSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1
IEBACisyMDE2LTA1LTI0ICBNaWxhbiBDcmhhICA8bWNyaGFAcmVkaGF0LmNvbT4KKworICAgICAg
ICBbR1RLXSBQcm92aWRlIGZyYW1lLXJlbGF0ZWQgbG9hZCBzaWduYWxzIGluIFdlYktpdFdlYlZp
ZXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Nzg5
OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RMb2FkZXJDbGllbnQuY3BwOgorICAgICAg
ICAodGVzdEZyYW1lTG9hZGluZ1N0YXR1cyk6CisgICAgICAgICh0ZXN0RnJhbWVMb2FkaW5nRXJy
b3IpOgorICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdDJHdGsvVGVzdFNTTC5jcHA6CisgICAgICAgICh0ZXN0TG9hZEZhaWxlZFdpdGhUTFNF
cnJvcnMpOgorICAgICAgICAodGVzdEZyYW1lTG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMpOgorICAg
ICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3Rr
L0xvYWRUcmFja2luZ1Rlc3QuY3BwOgorICAgICAgICAoZnJhbWVMb2FkQ2hhbmdlZENhbGxiYWNr
KToKKyAgICAgICAgKGZyYW1lTG9hZEZhaWxlZENhbGxiYWNrKToKKyAgICAgICAgKGZyYW1lTG9h
ZEZhaWxlZFdpdGhUTFNFcnJvcnNDYWxsYmFjayk6CisgICAgICAgIChMb2FkVHJhY2tpbmdUZXN0
OjpMb2FkVHJhY2tpbmdUZXN0KToKKyAgICAgICAgKExvYWRUcmFja2luZ1Rlc3Q6OmZyYW1lUHJv
dmlzaW9uYWxMb2FkU3RhcnRlZCk6CisgICAgICAgIChMb2FkVHJhY2tpbmdUZXN0OjpmcmFtZVBy
b3Zpc2lvbmFsTG9hZFJlY2VpdmVkU2VydmVyUmVkaXJlY3QpOgorICAgICAgICAoTG9hZFRyYWNr
aW5nVGVzdDo6ZnJhbWVQcm92aXNpb25hbExvYWRGYWlsZWQpOgorICAgICAgICAoTG9hZFRyYWNr
aW5nVGVzdDo6ZnJhbWVMb2FkQ29tbWl0dGVkKToKKyAgICAgICAgKExvYWRUcmFja2luZ1Rlc3Q6
OmZyYW1lTG9hZEZpbmlzaGVkKToKKyAgICAgICAgKExvYWRUcmFja2luZ1Rlc3Q6OmZyYW1lTG9h
ZEZhaWxlZCk6CisgICAgICAgIChMb2FkVHJhY2tpbmdUZXN0OjpmcmFtZUxvYWRGYWlsZWRXaXRo
VExTRXJyb3JzKToKKyAgICAgICAgKExvYWRUcmFja2luZ1Rlc3Q6OnJlc2V0KToKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL0xvYWRUcmFja2luZ1Rlc3QuaDoKKyAgICAg
ICAgKExvYWRUcmFja2luZ1Rlc3Q6OnNldEZyYW1lUmVkaXJlY3RVUkkpOgorICAgICAgICAoTG9h
ZFRyYWNraW5nVGVzdDo6c2V0RnJhbWVVUkkpOgorCiAyMDE2LTA1LTE5ICBTcmluaXZhc2FuIFZp
amF5YXJhZ2hhdmFuICA8c3ZpamF5YXJhZ2hhdmFuQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQg
SlNPTiByZXN1bHRzIHRvIDMyLWJpdCBhbmQgQ0xvb3AgSlNDIHRlc3RzCmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdExvYWRlckNsaWVudC5jcHAg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdExvYWRlckNsaWVudC5j
cHAKaW5kZXggMjI3YjM4OS4uMzVmZGRmZCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RMb2FkZXJDbGllbnQuY3BwCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0TG9hZGVyQ2xpZW50LmNwcApAQCAtMjgsNiAr
MjgsNyBAQAogI2luY2x1ZGUgPGd0ay9ndGsuaD4KICNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
QnVpbGRlci5oPgogCiBzdGF0aWMgV2ViS2l0VGVzdEJ1cyogYnVzOwogc3RhdGljIFdlYktpdFRl
c3RTZXJ2ZXIqIGtTZXJ2ZXI7CkBAIC02OCw2ICs2OSw1NSBAQCBzdGF0aWMgdm9pZCBhc3NlcnRO
b3JtYWxMb2FkSGFwcGVuZWQoVmVjdG9yPExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRFdmVudHM+JiBl
dmVudAogICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0
OjpMb2FkRmluaXNoZWQpOwogfQogCitzdGF0aWMgdm9pZCB0ZXN0RnJhbWVMb2FkaW5nU3RhdHVz
KExvYWRUcmFja2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBDU3Ry
aW5nIGZyYW1lVVJJID0ga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3JlZGlyZWN0Iik7CisgICAg
Q1N0cmluZyBmcmFtZVJlZGlyZWN0VVJJID0ga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL25vcm1h
bCIpOworICAgIFN0cmluZ0J1aWxkZXIgaHRtbDsKKworICAgIGh0bWwuYXBwZW5kKCI8aHRtbD48
Ym9keT5XaXRoIHJlYWNoYWJsZSBpZnJhbWU6PGJyPjxpZnJhbWUgc3JjPVwiIik7CisgICAgaHRt
bC5hcHBlbmQoZnJhbWVVUkkuZGF0YSgpKTsKKyAgICBodG1sLmFwcGVuZCgiXCI+PC9pZnJhbWU+
PC9ib2R5PjwvaHRtbD4iKTsKKworICAgIHRlc3QtPnNldEZyYW1lUmVkaXJlY3RVUkkoZnJhbWVS
ZWRpcmVjdFVSSS5kYXRhKCkpOworICAgIHRlc3QtPnNldEZyYW1lVVJJKGZyYW1lVVJJLmRhdGEo
KSk7CisgICAgdGVzdC0+bG9hZEh0bWwoaHRtbC50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCksIDAp
OworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnRfY21w
c3RyKHRlc3QtPm1fZnJhbWVVUkkuZGF0YSgpLCA9PSwgZnJhbWVSZWRpcmVjdFVSSS5kYXRhKCkp
OworCisgICAgYXNzZXJ0Tm9ybWFsTG9hZEhhcHBlbmVkKHRlc3QtPm1fbG9hZEV2ZW50cyk7CisK
KyAgICBWZWN0b3I8TG9hZFRyYWNraW5nVGVzdDo6TG9hZEV2ZW50cz4mIGV2ZW50cyA9IHRlc3Qt
Pm1fZnJhbWVMb2FkRXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9
PSwgNCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rl
c3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNb
MV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRSZWNlaXZlZFNlcnZlclJl
ZGlyZWN0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5n
VGVzdDo6TG9hZENvbW1pdHRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1szXSwgPT0s
IExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RG
cmFtZUxvYWRpbmdFcnJvcihMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQor
eworICAgIENTdHJpbmcgZnJhbWVVUkkgPSBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZXJyb3Ii
KTsKKyAgICBTdHJpbmdCdWlsZGVyIGh0bWw7CisKKyAgICBodG1sLmFwcGVuZCgiPGh0bWw+PGJv
ZHk+V2l0aCB1bnJlYWNoYWJsZSBpZnJhbWU6PGJyPjxpZnJhbWUgc3JjPVwiIik7CisgICAgaHRt
bC5hcHBlbmQoZnJhbWVVUkkuZGF0YSgpKTsKKyAgICBodG1sLmFwcGVuZCgiXCI+PC9pZnJhbWU+
PC9ib2R5PjwvaHRtbD4iKTsKKworICAgIHRlc3QtPnNldEZyYW1lVVJJKGZyYW1lVVJJLmRhdGEo
KSk7CisgICAgdGVzdC0+bG9hZEh0bWwoaHRtbC50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCksIDAp
OworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgYXNzZXJ0Tm9ybWFs
TG9hZEhhcHBlbmVkKHRlc3QtPm1fbG9hZEV2ZW50cyk7CisKKyAgICBWZWN0b3I8TG9hZFRyYWNr
aW5nVGVzdDo6TG9hZEV2ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fZnJhbWVMb2FkRXZlbnRzOwor
ICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMyk7CisgICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0
YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdU
ZXN0OjpQcm92aXNpb25hbExvYWRGYWlsZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNb
Ml0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOworfQorCiBzdGF0aWMgdm9p
ZCB0ZXN0TG9hZEh0bWwoTG9hZFRyYWNraW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKIHsK
ICAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+SGVsbG8gV2ViS2l0LUdUSys8L2JvZHk+
PC9odG1sPiIsIDApOwpAQCAtNTE5LDYgKzU2OSw4IEBAIHZvaWQgYmVmb3JlQWxsKCkKIAogICAg
IExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJsb2FkaW5nLXN0YXR1cyIs
IHRlc3RMb2FkaW5nU3RhdHVzKTsKICAgICBMb2FkVHJhY2tpbmdUZXN0OjphZGQoIldlYktpdFdl
YlZpZXciLCAibG9hZGluZy1lcnJvciIsIHRlc3RMb2FkaW5nRXJyb3IpOworICAgIExvYWRUcmFj
a2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJmcmFtZS1sb2FkaW5nLXN0YXR1cyIsIHRl
c3RGcmFtZUxvYWRpbmdTdGF0dXMpOworICAgIExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0
V2ViVmlldyIsICJmcmFtZS1sb2FkaW5nLWVycm9yIiwgdGVzdEZyYW1lTG9hZGluZ0Vycm9yKTsK
ICAgICBMb2FkVHJhY2tpbmdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAibG9hZC1odG1sIiwg
dGVzdExvYWRIdG1sKTsKICAgICBMb2FkVHJhY2tpbmdUZXN0OjphZGQoIldlYktpdFdlYlZpZXci
LCAibG9hZC1hbHRlcm5hdGUtaHRtbCIsIHRlc3RMb2FkQWx0ZXJuYXRlSFRNTCk7CiAgICAgTG9h
ZFRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImxvYWQtYWx0ZXJuYXRlLWh0bWwt
Zm9yLWxvY2FsLXBhZ2UiLCB0ZXN0TG9hZEFsdGVybmF0ZUhUTUxGb3JMb2NhbFBhZ2UpOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RTU0wuY3Bw
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RTU0wuY3BwCmluZGV4
IDEwYzVlNzMuLmM3YjZhYjEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Mkd0ay9UZXN0U1NMLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdDJHdGsvVGVzdFNTTC5jcHAKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJMb2FkVHJh
Y2tpbmdUZXN0LmgiCiAjaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5oIgogI2luY2x1ZGUgPGd0
ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIHN0YXRpYyBX
ZWJLaXRUZXN0U2VydmVyKiBrSHR0cHNTZXJ2ZXI7CiBzdGF0aWMgV2ViS2l0VGVzdFNlcnZlciog
a0h0dHBTZXJ2ZXI7CkBAIC0zNyw2ICszOCw3IEBAIHB1YmxpYzoKIAogICAgIFNTTFRlc3QoKQog
ICAgICAgICA6IG1fdGxzRXJyb3JzKHN0YXRpY19jYXN0PEdUbHNDZXJ0aWZpY2F0ZUZsYWdzPigw
KSkKKyAgICAgICAgLCBtX2ZyYW1lVGxzRXJyb3JzKHN0YXRpY19jYXN0PEdUbHNDZXJ0aWZpY2F0
ZUZsYWdzPigwKSkKICAgICB7CiAgICAgfQogCkBAIC00Niw2ICs0OCwxMiBAQCBwdWJsaWM6CiAg
ICAgICAgIExvYWRUcmFja2luZ1Rlc3Q6OnByb3Zpc2lvbmFsTG9hZEZhaWxlZChmYWlsaW5nVVJJ
LCBlcnJvcik7CiAgICAgfQogCisgICAgdmlydHVhbCB2b2lkIGZyYW1lUHJvdmlzaW9uYWxMb2Fk
RmFpbGVkKGNvbnN0IGdjaGFyKiBmYWlsaW5nVVJJLCBHRXJyb3IqIGVycm9yKQorICAgIHsKKyAg
ICAgICAgZ19hc3NlcnRfZXJyb3IoZXJyb3IsIFNPVVBfSFRUUF9FUlJPUiwgU09VUF9TVEFUVVNf
U1NMX0ZBSUxFRCk7CisgICAgICAgIExvYWRUcmFja2luZ1Rlc3Q6OmZyYW1lUHJvdmlzaW9uYWxM
b2FkRmFpbGVkKGZhaWxpbmdVUkksIGVycm9yKTsKKyAgICB9CisKICAgICB2aXJ0dWFsIHZvaWQg
bG9hZENvbW1pdHRlZCgpCiAgICAgewogICAgICAgICBHVGxzQ2VydGlmaWNhdGUqIGNlcnRpZmlj
YXRlID0gMDsKQEAgLTU4LDExICs2NiwxNSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBtX2Nl
cnRpZmljYXRlID0gMDsKICAgICAgICAgbV90bHNFcnJvcnMgPSBzdGF0aWNfY2FzdDxHVGxzQ2Vy
dGlmaWNhdGVGbGFncz4oMCk7CisgICAgICAgIG1fZnJhbWVDZXJ0aWZpY2F0ZSA9IDA7CisgICAg
ICAgIG1fZnJhbWVUbHNFcnJvcnMgPSBzdGF0aWNfY2FzdDxHVGxzQ2VydGlmaWNhdGVGbGFncz4o
MCk7CiAgICAgICAgIExvYWRUcmFja2luZ1Rlc3Q6OndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwog
ICAgIH0KIAogICAgIEdSZWZQdHI8R1Rsc0NlcnRpZmljYXRlPiBtX2NlcnRpZmljYXRlOwogICAg
IEdUbHNDZXJ0aWZpY2F0ZUZsYWdzIG1fdGxzRXJyb3JzOworICAgIEdSZWZQdHI8R1Rsc0NlcnRp
ZmljYXRlPiBtX2ZyYW1lQ2VydGlmaWNhdGU7CisgICAgR1Rsc0NlcnRpZmljYXRlRmxhZ3MgbV9m
cmFtZVRsc0Vycm9yczsKIH07CiAKIHN0YXRpYyB2b2lkIHRlc3RTU0woU1NMVGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKQEAgLTIwNiw4ICsyMTgsOCBAQCBwdWJsaWM6CiAgICAgTUFLRV9HTElC
X1RFU1RfRklYVFVSRShUTFNFcnJvcnNUZXN0KTsKIAogICAgIFRMU0Vycm9yc1Rlc3QoKQotICAg
ICAgICA6IG1fdGxzRXJyb3JzKHN0YXRpY19jYXN0PEdUbHNDZXJ0aWZpY2F0ZUZsYWdzPigwKSkK
LSAgICAgICAgLCBtX2ZhaWxpbmdVUkkobnVsbHB0cikKKyAgICAgICAgOiBtX2ZhaWxpbmdVUkko
bnVsbHB0cikKKyAgICAgICAgLCBtX2ZyYW1lRmFpbGluZ1VSSShudWxscHRyKQogICAgIHsKICAg
ICB9CiAKQEAgLTIxNSw2ICsyMjcsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAobV9m
YWlsaW5nVVJJKQogICAgICAgICAgICAgc291cF91cmlfZnJlZShtX2ZhaWxpbmdVUkkpOworICAg
ICAgICBpZiAobV9mcmFtZUZhaWxpbmdVUkkpCisgICAgICAgICAgICBzb3VwX3VyaV9mcmVlKG1f
ZnJhbWVGYWlsaW5nVVJJKTsKICAgICB9CiAKICAgICBib29sIGxvYWRGYWlsZWRXaXRoVExTRXJy
b3JzKGNvbnN0IGNoYXIqIGZhaWxpbmdVUkksIEdUbHNDZXJ0aWZpY2F0ZSogY2VydGlmaWNhdGUs
IEdUbHNDZXJ0aWZpY2F0ZUZsYWdzIHRsc0Vycm9ycykgb3ZlcnJpZGUKQEAgLTIzMCwxNCArMjQ0
LDI5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgYm9vbCBm
cmFtZUxvYWRGYWlsZWRXaXRoVExTRXJyb3JzKGNvbnN0IGNoYXIqIGZhaWxpbmdVUkksIEdUbHND
ZXJ0aWZpY2F0ZSogY2VydGlmaWNhdGUsIEdUbHNDZXJ0aWZpY2F0ZUZsYWdzIHRsc0Vycm9ycykg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIExvYWRUcmFja2luZ1Rlc3Q6OmZyYW1lTG9hZEZhaWxl
ZFdpdGhUTFNFcnJvcnMoZmFpbGluZ1VSSSwgY2VydGlmaWNhdGUsIHRsc0Vycm9ycyk7CisKKyAg
ICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChjZXJ0
aWZpY2F0ZSkpOworICAgICAgICBtX2ZyYW1lQ2VydGlmaWNhdGUgPSBjZXJ0aWZpY2F0ZTsKKyAg
ICAgICAgbV9mcmFtZVRsc0Vycm9ycyA9IHRsc0Vycm9yczsKKyAgICAgICAgaWYgKG1fZnJhbWVG
YWlsaW5nVVJJKQorICAgICAgICAgICAgc291cF91cmlfZnJlZShtX2ZyYW1lRmFpbGluZ1VSSSk7
CisgICAgICAgIG1fZnJhbWVGYWlsaW5nVVJJID0gc291cF91cmlfbmV3KGZhaWxpbmdVUkkpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICBHVGxzQ2VydGlmaWNhdGUqIGNlcnRp
ZmljYXRlKCkgY29uc3QgeyByZXR1cm4gbV9jZXJ0aWZpY2F0ZS5nZXQoKTsgfQogICAgIEdUbHND
ZXJ0aWZpY2F0ZUZsYWdzIHRsc0Vycm9ycygpIGNvbnN0IHsgcmV0dXJuIG1fdGxzRXJyb3JzOyB9
Ci0gICAgY29uc3QgY2hhciogaG9zdCgpIGNvbnN0IHsgcmV0dXJuIG1fZmFpbGluZ1VSSS0+aG9z
dDsgfQorICAgIGNvbnN0IGNoYXIqIGhvc3QoKSBjb25zdCB7IHJldHVybiBtX2ZhaWxpbmdVUkkg
PyBtX2ZhaWxpbmdVUkktPmhvc3QgOiBudWxscHRyOyB9CisgICAgR1Rsc0NlcnRpZmljYXRlKiBm
cmFtZUNlcnRpZmljYXRlKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZUNlcnRpZmljYXRlLmdldCgp
OyB9CisgICAgR1Rsc0NlcnRpZmljYXRlRmxhZ3MgZnJhbWVUbHNFcnJvcnMoKSBjb25zdCB7IHJl
dHVybiBtX2ZyYW1lVGxzRXJyb3JzOyB9CisgICAgY29uc3QgY2hhciogZnJhbWVIb3N0KCkgY29u
c3QgeyByZXR1cm4gbV9mcmFtZUZhaWxpbmdVUkkgPyBtX2ZyYW1lRmFpbGluZ1VSSS0+aG9zdCA6
IG51bGxwdHI7IH0KIAogcHJpdmF0ZToKLSAgICBHUmVmUHRyPEdUbHNDZXJ0aWZpY2F0ZT4gbV9j
ZXJ0aWZpY2F0ZTsKLSAgICBHVGxzQ2VydGlmaWNhdGVGbGFncyBtX3Rsc0Vycm9yczsKICAgICBT
b3VwVVJJKiBtX2ZhaWxpbmdVUkk7CisgICAgU291cFVSSSogbV9mcmFtZUZhaWxpbmdVUkk7CiB9
OwogCiBzdGF0aWMgdm9pZCB0ZXN0TG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMoVExTRXJyb3JzVGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKQEAgLTI1MSw4ICsyODAsMTIgQEAgc3RhdGljIHZvaWQg
dGVzdExvYWRGYWlsZWRXaXRoVExTRXJyb3JzKFRMU0Vycm9yc1Rlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCiAgICAgdGVzdC0+bG9hZFVSSShrSHR0cHNTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi90
ZXN0LXRscy8iKS5kYXRhKCkpOwogICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwog
ICAgIGdfYXNzZXJ0KEdfSVNfVExTX0NFUlRJRklDQVRFKHRlc3QtPmNlcnRpZmljYXRlKCkpKTsK
KyAgICBnX2Fzc2VydCghdGVzdC0+ZnJhbWVDZXJ0aWZpY2F0ZSgpKTsKKyAgICBnX2Fzc2VydCgh
dGVzdC0+ZnJhbWVUbHNFcnJvcnMoKSk7CisgICAgZ19hc3NlcnQoIXRlc3QtPmZyYW1lSG9zdCgp
KTsKICAgICBnX2Fzc2VydF9jbXB1aW50KHRlc3QtPnRsc0Vycm9ycygpLCA9PSwgR19UTFNfQ0VS
VElGSUNBVEVfVU5LTk9XTl9DQSk7CiAgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPmhvc3QoKSwg
PT0sIHNvdXBfdXJpX2dldF9ob3N0KGtIdHRwc1NlcnZlci0+YmFzZVVSSSgpKSk7CisgICAgZ19h
c3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50cy5zaXplKCksID09LCAzKTsKICAgICBnX2Fz
c2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6
UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7CiAgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9h
ZEV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGYWlsZWRXaXRoVExTRXJyb3Jz
KTsKICAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzJdLCA9PSwgTG9hZFRy
YWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKQEAgLTI2NCw2ICsyOTcsNyBAQCBzdGF0aWMgdm9p
ZCB0ZXN0TG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMoVExTRXJyb3JzVGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKICAgICB0ZXN0LT5sb2FkVVJJKGtIdHRwc1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgi
L3Rlc3QtdGxzLyIpLmRhdGEoKSk7CiAgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
CiAKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDMp
OwogICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMF0sID09LCBMb2FkVHJh
Y2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKICAgICBnX2Fzc2VydF9jbXBpbnQo
dGVzdC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZENvbW1pdHRl
ZCk7CiAgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1syXSwgPT0sIExvYWRU
cmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7CkBAIC0yNzIsNiArMzA2LDUyIEBAIHN0YXRpYyB2
b2lkIHRlc3RMb2FkRmFpbGVkV2l0aFRMU0Vycm9ycyhUTFNFcnJvcnNUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQogICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfdGxzX2Vycm9yc19wb2xpY3ko
Y29udGV4dCwgb3JpZ2luYWxQb2xpY3kpOwogfQogCitzdGF0aWMgdm9pZCB0ZXN0RnJhbWVMb2Fk
RmFpbGVkV2l0aFRMU0Vycm9ycyhUTFNFcnJvcnNUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQor
eworICAgIENTdHJpbmcgZnJhbWVVUkkgPSBrSHR0cHNTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi90
ZXN0LXRscy8iKTsKKyAgICBTdHJpbmdCdWlsZGVyIGh0bWw7CisKKyAgICBodG1sLmFwcGVuZCgi
PGh0bWw+PGJvZHk+V2l0aCByZWFjaGFibGUgaWZyYW1lOjxicj48aWZyYW1lIHNyYz1cIiIpOwor
ICAgIGh0bWwuYXBwZW5kKGZyYW1lVVJJLmRhdGEoKSk7CisgICAgaHRtbC5hcHBlbmQoIlwiPjwv
aWZyYW1lPjwvYm9keT48L2h0bWw+Iik7CisKKyAgICBXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0
ID0gd2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KHRlc3QtPm1fd2ViVmlldyk7CisgICAgV2Vi
S2l0VExTRXJyb3JzUG9saWN5IG9yaWdpbmFsUG9saWN5ID0gd2Via2l0X3dlYl9jb250ZXh0X2dl
dF90bHNfZXJyb3JzX3BvbGljeShjb250ZXh0KTsKKyAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0
X3Rsc19lcnJvcnNfcG9saWN5KGNvbnRleHQsIFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9GQUlM
KTsKKworICAgIGFzc2VydElmU1NMUmVxdWVzdFByb2Nlc3NlZCA9IHRydWU7CisKKyAgICB0ZXN0
LT5zZXRGcmFtZVVSSShmcmFtZVVSSS5kYXRhKCkpOworICAgIC8vIFRoZSBmcmFtZS1sb2FkLWZh
aWxlZC13aXRoLXRscy1lcnJvcnMgc2lnbmFsIHNob3VsZCBiZSBlbWl0dGVkIHdoZW4gdGhlcmUg
aXMgYSBUTFMgZmFpbHVyZS4KKyAgICB0ZXN0LT5sb2FkSHRtbChodG1sLnRvU3RyaW5nKCkudXRm
OCgpLmRhdGEoKSwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAg
ICBnX2Fzc2VydCghdGVzdC0+Y2VydGlmaWNhdGUoKSk7CisgICAgZ19hc3NlcnQoIXRlc3QtPnRs
c0Vycm9ycygpKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+aG9zdCgpKTsKKyAgICBnX2Fzc2VydChH
X0lTX1RMU19DRVJUSUZJQ0FURSh0ZXN0LT5mcmFtZUNlcnRpZmljYXRlKCkpKTsKKyAgICBnX2Fz
c2VydF9jbXB1aW50KHRlc3QtPmZyYW1lVGxzRXJyb3JzKCksID09LCBHX1RMU19DRVJUSUZJQ0FU
RV9VTktOT1dOX0NBKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+ZnJhbWVIb3N0KCksID09
LCBzb3VwX3VyaV9nZXRfaG9zdChrSHR0cHNTZXJ2ZXItPmJhc2VVUkkoKSkpOworICAgIGdfYXNz
ZXJ0X2NtcGludCh0ZXN0LT5tX2ZyYW1lTG9hZEV2ZW50cy5zaXplKCksID09LCAzKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQodGVzdC0+bV9mcmFtZUxvYWRFdmVudHNbMF0sID09LCBMb2FkVHJhY2tp
bmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVz
dC0+bV9mcmFtZUxvYWRFdmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmFpbGVk
V2l0aFRMU0Vycm9ycyk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fZnJhbWVMb2FkRXZl
bnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKKyAgICBhc3NlcnRJ
ZlNTTFJlcXVlc3RQcm9jZXNzZWQgPSBmYWxzZTsKKworICAgIC8vIFRlc3QgYWxsb3dpbmcgYW4g
ZXhjZXB0aW9uIGZvciB0aGlzIGNlcnRpZmljYXRlIG9uIHRoaXMgaG9zdC4KKyAgICB3ZWJraXRf
d2ViX2NvbnRleHRfYWxsb3dfdGxzX2NlcnRpZmljYXRlX2Zvcl9ob3N0KGNvbnRleHQsIHRlc3Qt
PmZyYW1lQ2VydGlmaWNhdGUoKSwgdGVzdC0+ZnJhbWVIb3N0KCkpOworICAgIC8vIFRoZSBwYWdl
IHNob3VsZCBub3cgbG9hZCB3aXRob3V0IGVycm9ycy4KKyAgICB0ZXN0LT5sb2FkSHRtbChodG1s
LnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZp
bmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9mcmFtZUxvYWRFdmVudHMu
c2l6ZSgpLCA9PSwgMyk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fZnJhbWVMb2FkRXZl
bnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7Cisg
ICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fZnJhbWVMb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRy
YWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1f
ZnJhbWVMb2FkRXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsK
KworICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfdGxzX2Vycm9yc19wb2xpY3koY29udGV4dCwg
b3JpZ2luYWxQb2xpY3kpOworfQorCiBjbGFzcyBUTFNTdWJyZXNvdXJjZVRlc3QgOiBwdWJsaWMg
V2ViVmlld1Rlc3QgewogcHVibGljOgogICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoVExTU3Vi
cmVzb3VyY2VUZXN0KTsKQEAgLTQyNSw2ICs1MDUsNyBAQCB2b2lkIGJlZm9yZUFsbCgpCiAgICAg
U1NMVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInRscy1odHRwLWF1dGgiLCB0ZXN0VExTRXJy
b3JzSFRUUEF1dGgpOwogICAgIFRMU1N1YnJlc291cmNlVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3
IiwgInRscy1zdWJyZXNvdXJjZSIsIHRlc3RTdWJyZXNvdXJjZUxvYWRGYWlsZWRXaXRoVExTRXJy
b3JzKTsKICAgICBUTFNFcnJvcnNUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAibG9hZC1mYWls
ZWQtd2l0aC10bHMtZXJyb3JzIiwgdGVzdExvYWRGYWlsZWRXaXRoVExTRXJyb3JzKTsKKyAgICBU
TFNFcnJvcnNUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiZnJhbWUtbG9hZC1mYWlsZWQtd2l0
aC10bHMtZXJyb3JzIiwgdGVzdEZyYW1lTG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMpOwogfQogCiB2
b2lkIGFmdGVyQWxsKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktp
dDJHdGsvTG9hZFRyYWNraW5nVGVzdC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJL
aXQyR3RrL0xvYWRUcmFja2luZ1Rlc3QuY3BwCmluZGV4IGU3OGNlNDUuLjRiYmJjYzYgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvTG9hZFRyYWNraW5nVGVz
dC5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9Mb2FkVHJhY2tp
bmdUZXN0LmNwcApAQCAtMTA5LDE0ICsxMDksNzYgQEAgc3RhdGljIHZvaWQgZXN0aW1hdGVkUHJv
Z3Jlc3NDaGFuZ2VkQ2FsbGJhY2soR09iamVjdCosIEdQYXJhbVNwZWMqLCBMb2FkVHJhY2tpbmcK
ICAgICB0ZXN0LT5lc3RpbWF0ZWRQcm9ncmVzc0NoYW5nZWQoKTsKIH0KIAorc3RhdGljIHZvaWQg
ZnJhbWVMb2FkQ2hhbmdlZENhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IGNo
YXIqIGZyYW1lVVJJLCBXZWJLaXRMb2FkRXZlbnQgbG9hZEV2ZW50LCBMb2FkVHJhY2tpbmdUZXN0
KiB0ZXN0KQoreworICAgIHN3aXRjaCAobG9hZEV2ZW50KSB7CisgICAgY2FzZSBXRUJLSVRfTE9B
RF9TVEFSVEVEOgorICAgICAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9mcmFtZVVSSS5kYXRh
KCksID09LCBmcmFtZVVSSSk7CisgICAgICAgIHRlc3QtPmZyYW1lUHJvdmlzaW9uYWxMb2FkU3Rh
cnRlZChmcmFtZVVSSSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0xPQURfUkVE
SVJFQ1RFRDoKKyAgICAgICAgdGVzdC0+bV9mcmFtZVVSSSA9IGZyYW1lVVJJOworICAgICAgICBp
ZiAoIXRlc3QtPm1fZnJhbWVSZWRpcmVjdFVSSS5pc051bGwoKSkKKyAgICAgICAgICAgIGdfYXNz
ZXJ0X2NtcHN0cih0ZXN0LT5tX2ZyYW1lUmVkaXJlY3RVUkkuZGF0YSgpLCA9PSwgdGVzdC0+bV9m
cmFtZVVSSS5kYXRhKCkpOworICAgICAgICB0ZXN0LT5mcmFtZVByb3Zpc2lvbmFsTG9hZFJlY2Vp
dmVkU2VydmVyUmVkaXJlY3QoZnJhbWVVUkkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdF
QktJVF9MT0FEX0NPTU1JVFRFRDogeworICAgICAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9m
cmFtZVVSSS5kYXRhKCksID09LCBmcmFtZVVSSSk7CisgICAgICAgIHRlc3QtPmZyYW1lTG9hZENv
bW1pdHRlZChmcmFtZVVSSSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdFQktJ
VF9MT0FEX0ZJTklTSEVEOgorICAgICAgICBpZiAoIXRlc3QtPm1fZnJhbWVMb2FkRmFpbGVkKQor
ICAgICAgICAgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1fZnJhbWVVUkkuZGF0YSgpLCA9PSwg
ZnJhbWVVUkkpOworICAgICAgICB0ZXN0LT5mcmFtZUxvYWRGaW5pc2hlZChmcmFtZVVSSSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVk
KCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBmcmFtZUxvYWRGYWlsZWRDYWxsYmFjayhXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRMb2FkRXZlbnQgbG9hZEV2ZW50LCBjb25zdCBjaGFy
KiBmYWlsaW5nVVJJLCBHRXJyb3IqIGVycm9yLCBMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0KQorewor
ICAgIHRlc3QtPm1fZnJhbWVMb2FkRmFpbGVkID0gdHJ1ZTsKKworICAgIGdfYXNzZXJ0X2NtcHN0
cih0ZXN0LT5tX2ZyYW1lVVJJLmRhdGEoKSwgPT0sIGZhaWxpbmdVUkkpOworCisgICAgZ19hc3Nl
cnQoZXJyb3IpOworICAgIHRlc3QtPm1fZXJyb3IucmVzZXQoZ19lcnJvcl9jb3B5KGVycm9yKSk7
CisKKyAgICBzd2l0Y2ggKGxvYWRFdmVudCkgeworICAgIGNhc2UgV0VCS0lUX0xPQURfU1RBUlRF
RDoKKyAgICAgICAgdGVzdC0+ZnJhbWVQcm92aXNpb25hbExvYWRGYWlsZWQoZmFpbGluZ1VSSSwg
ZXJyb3IpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9MT0FEX0NPTU1JVFRFRDoK
KyAgICAgICAgdGVzdC0+ZnJhbWVMb2FkRmFpbGVkKGZhaWxpbmdVUkksIGVycm9yKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsK
KyAgICB9Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBmcmFtZUxvYWRGYWlsZWRXaXRoVExTRXJyb3Jz
Q2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgY2hhciogZmFpbGluZ1VSSSwg
R1Rsc0NlcnRpZmljYXRlKiBjZXJ0aWZpY2F0ZSwgR1Rsc0NlcnRpZmljYXRlRmxhZ3MgdGxzRXJy
b3JzLCBMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0KQoreworICAgIHRlc3QtPm1fZnJhbWVMb2FkRmFp
bGVkID0gdHJ1ZTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9mcmFtZVVSSS5kYXRhKCks
ID09LCBmYWlsaW5nVVJJKTsKKyAgICBnX2Fzc2VydChHX0lTX1RMU19DRVJUSUZJQ0FURShjZXJ0
aWZpY2F0ZSkpOworICAgIGdfYXNzZXJ0KHRsc0Vycm9ycyk7CisgICAgcmV0dXJuIHRlc3QtPmZy
YW1lTG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMoZmFpbGluZ1VSSSwgY2VydGlmaWNhdGUsIHRsc0Vy
cm9ycyk7Cit9CisKIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRUcmFja2luZ1Rlc3QoKQogICAgIDog
bV9ydW5Mb2FkVW50aWxDb21wbGV0aW9uKGZhbHNlKQogICAgICwgbV9sb2FkRmFpbGVkKGZhbHNl
KQorICAgICwgbV9mcmFtZUxvYWRGYWlsZWQoZmFsc2UpCiB7CiAgICAgZ19zaWduYWxfY29ubmVj
dChtX3dlYlZpZXcsICJsb2FkLWNoYW5nZWQiLCBHX0NBTExCQUNLKGxvYWRDaGFuZ2VkQ2FsbGJh
Y2spLCB0aGlzKTsKICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImxvYWQtZmFpbGVk
IiwgR19DQUxMQkFDSyhsb2FkRmFpbGVkQ2FsbGJhY2spLCB0aGlzKTsKICAgICBnX3NpZ25hbF9j
b25uZWN0KG1fd2ViVmlldywgImxvYWQtZmFpbGVkLXdpdGgtdGxzLWVycm9ycyIsIEdfQ0FMTEJB
Q0sobG9hZEZhaWxlZFdpdGhUTFNFcnJvcnNDYWxsYmFjayksIHRoaXMpOwogICAgIGdfc2lnbmFs
X2Nvbm5lY3QobV93ZWJWaWV3LCAibm90aWZ5Ojplc3RpbWF0ZWQtbG9hZC1wcm9ncmVzcyIsIEdf
Q0FMTEJBQ0soZXN0aW1hdGVkUHJvZ3Jlc3NDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBn
X3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImZyYW1lLWxvYWQtY2hhbmdlZCIsIEdfQ0FMTEJB
Q0soZnJhbWVMb2FkQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVj
dChtX3dlYlZpZXcsICJmcmFtZS1sb2FkLWZhaWxlZCIsIEdfQ0FMTEJBQ0soZnJhbWVMb2FkRmFp
bGVkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImZy
YW1lLWxvYWQtZmFpbGVkLXdpdGgtdGxzLWVycm9ycyIsIEdfQ0FMTEJBQ0soZnJhbWVMb2FkRmFp
bGVkV2l0aFRMU0Vycm9yc0NhbGxiYWNrKSwgdGhpcyk7CiAKICAgICBnX2Fzc2VydCghd2Via2l0
X3dlYl92aWV3X2dldF91cmkobV93ZWJWaWV3KSk7CiB9CkBAIC0xNzgsNiArMjQwLDQyIEBAIHZv
aWQgTG9hZFRyYWNraW5nVGVzdDo6ZXN0aW1hdGVkUHJvZ3Jlc3NDaGFuZ2VkKCkKICAgICBtX2Vz
dGltYXRlZFByb2dyZXNzID0gcHJvZ3Jlc3M7CiB9CiAKK3ZvaWQgTG9hZFRyYWNraW5nVGVzdDo6
ZnJhbWVQcm92aXNpb25hbExvYWRTdGFydGVkKGNvbnN0IGNoYXIqIC8qZnJhbWVVUkkqLykKK3sK
KyAgICBtX2ZyYW1lTG9hZEV2ZW50cy5hcHBlbmQoUHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7Cit9
CisKK3ZvaWQgTG9hZFRyYWNraW5nVGVzdDo6ZnJhbWVQcm92aXNpb25hbExvYWRSZWNlaXZlZFNl
cnZlclJlZGlyZWN0KGNvbnN0IGNoYXIqIC8qZnJhbWVVUkkqLykKK3sKKyAgICBtX2ZyYW1lTG9h
ZEV2ZW50cy5hcHBlbmQoUHJvdmlzaW9uYWxMb2FkUmVjZWl2ZWRTZXJ2ZXJSZWRpcmVjdCk7Cit9
CisKK3ZvaWQgTG9hZFRyYWNraW5nVGVzdDo6ZnJhbWVQcm92aXNpb25hbExvYWRGYWlsZWQoY29u
c3QgZ2NoYXIqIGZhaWxpbmdVUkksIEdFcnJvciogZXJyb3IpCit7CisgICAgbV9mcmFtZUxvYWRF
dmVudHMuYXBwZW5kKFByb3Zpc2lvbmFsTG9hZEZhaWxlZCk7Cit9CisKK3ZvaWQgTG9hZFRyYWNr
aW5nVGVzdDo6ZnJhbWVMb2FkQ29tbWl0dGVkKGNvbnN0IGNoYXIqIC8qZnJhbWVVUkkqLykKK3sK
KyAgICBtX2ZyYW1lTG9hZEV2ZW50cy5hcHBlbmQoTG9hZENvbW1pdHRlZCk7Cit9CisKK3ZvaWQg
TG9hZFRyYWNraW5nVGVzdDo6ZnJhbWVMb2FkRmluaXNoZWQoY29uc3QgY2hhciogLypmcmFtZVVS
SSovKQoreworICAgIG1fZnJhbWVMb2FkRXZlbnRzLmFwcGVuZChMb2FkRmluaXNoZWQpOworfQor
Cit2b2lkIExvYWRUcmFja2luZ1Rlc3Q6OmZyYW1lTG9hZEZhaWxlZChjb25zdCBnY2hhciogZmFp
bGluZ1VSSSwgR0Vycm9yKiBlcnJvcikKK3sKKyAgICBtX2ZyYW1lTG9hZEV2ZW50cy5hcHBlbmQo
TG9hZEZhaWxlZCk7Cit9CisKK2Jvb2wgTG9hZFRyYWNraW5nVGVzdDo6ZnJhbWVMb2FkRmFpbGVk
V2l0aFRMU0Vycm9ycyhjb25zdCBnY2hhciogLypmYWlsaW5nVVJJKi8sIEdUbHNDZXJ0aWZpY2F0
ZSosIEdUbHNDZXJ0aWZpY2F0ZUZsYWdzKQoreworICAgIG1fZnJhbWVMb2FkRXZlbnRzLmFwcGVu
ZChMb2FkRmFpbGVkV2l0aFRMU0Vycm9ycyk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lk
IExvYWRUcmFja2luZ1Rlc3Q6OmxvYWRVUkkoY29uc3QgY2hhciogdXJpKQogewogICAgIHJlc2V0
KCk7CkBAIC0yMzMsNCArMzMxLDYgQEAgdm9pZCBMb2FkVHJhY2tpbmdUZXN0OjpyZXNldCgpCiAg
ICAgbV9sb2FkRXZlbnRzLmNsZWFyKCk7CiAgICAgbV9lc3RpbWF0ZWRQcm9ncmVzcyA9IDA7CiAg
ICAgbV9lcnJvci5yZXNldCgpOworICAgIG1fZnJhbWVMb2FkRmFpbGVkID0gZmFsc2U7CisgICAg
bV9mcmFtZUxvYWRFdmVudHMuY2xlYXIoKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvZ3RrL1dlYktpdDJHdGsvTG9hZFRyYWNraW5nVGVzdC5oIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9ndGsvV2ViS2l0Mkd0ay9Mb2FkVHJhY2tpbmdUZXN0LmgKaW5kZXggZDZmMzEyOS4uNDMw
NzBmMSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9Mb2Fk
VHJhY2tpbmdUZXN0LmgKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9M
b2FkVHJhY2tpbmdUZXN0LmgKQEAgLTQwLDYgKzQwLDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgbG9hZEZhaWxlZChjb25zdCBjaGFyKiBmYWlsaW5nVVJJLCBHRXJyb3IqKTsKICAgICB2
aXJ0dWFsIHZvaWQgZXN0aW1hdGVkUHJvZ3Jlc3NDaGFuZ2VkKCk7CiAKKyAgICB2aXJ0dWFsIHZv
aWQgZnJhbWVQcm92aXNpb25hbExvYWRTdGFydGVkKGNvbnN0IGNoYXIqIGZyYW1lVVJJKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZnJhbWVQcm92aXNpb25hbExvYWRSZWNlaXZlZFNlcnZlclJlZGlyZWN0
KGNvbnN0IGNoYXIqIGZyYW1lVVJJKTsKKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVQcm92aXNpb25h
bExvYWRGYWlsZWQoY29uc3QgZ2NoYXIqIGZhaWxpbmdVUkksIEdFcnJvciopOworICAgIHZpcnR1
YWwgYm9vbCBmcmFtZUxvYWRGYWlsZWRXaXRoVExTRXJyb3JzKGNvbnN0IGdjaGFyKiBmYWlsaW5n
VVJJLCBHVGxzQ2VydGlmaWNhdGUqLCBHVGxzQ2VydGlmaWNhdGVGbGFncyk7CisgICAgdmlydHVh
bCB2b2lkIGZyYW1lTG9hZENvbW1pdHRlZChjb25zdCBjaGFyKiBmcmFtZVVSSSk7CisgICAgdmly
dHVhbCB2b2lkIGZyYW1lTG9hZEZpbmlzaGVkKGNvbnN0IGNoYXIqIGZyYW1lVVJJKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZnJhbWVMb2FkRmFpbGVkKGNvbnN0IGNoYXIqIGZhaWxpbmdVUkksIEdFcnJv
ciopOworCiAgICAgdm9pZCBsb2FkVVJJKGNvbnN0IGNoYXIqIHVyaSk7CiAgICAgdm9pZCBsb2Fk
SHRtbChjb25zdCBjaGFyKiBodG1sLCBjb25zdCBjaGFyKiBiYXNlVVJJKTsKICAgICB2b2lkIGxv
YWRQbGFpblRleHQoY29uc3QgY2hhciogcGxhaW5UZXh0KTsKQEAgLTUxLDYgKzU5LDggQEAgcHVi
bGljOgogICAgIHZvaWQgcmVzZXQoKTsKIAogICAgIHZvaWQgc2V0UmVkaXJlY3RVUkkoY29uc3Qg
Y2hhciogdXJpKSB7IG1fcmVkaXJlY3RVUkkgPSB1cmk7IH0KKyAgICB2b2lkIHNldEZyYW1lUmVk
aXJlY3RVUkkoY29uc3QgY2hhciogdXJpKSB7IG1fZnJhbWVSZWRpcmVjdFVSSSA9IHVyaTsgfQor
ICAgIHZvaWQgc2V0RnJhbWVVUkkoY29uc3QgY2hhciogZnJhbWVVUkkpIHsgbV9mcmFtZVVSSSA9
IGZyYW1lVVJJOyB9CiAKICAgICBlbnVtIExvYWRFdmVudHMgewogICAgICAgICBQcm92aXNpb25h
bExvYWRTdGFydGVkLApAQCAtNjcsNiArNzcsMTEgQEAgcHVibGljOgogICAgIFZlY3RvcjxMb2Fk
RXZlbnRzPiBtX2xvYWRFdmVudHM7CiAgICAgZmxvYXQgbV9lc3RpbWF0ZWRQcm9ncmVzczsKICAg
ICBDU3RyaW5nIG1fcmVkaXJlY3RVUkk7CisKKyAgICBib29sIG1fZnJhbWVMb2FkRmFpbGVkOwor
ICAgIFZlY3RvcjxMb2FkRXZlbnRzPiBtX2ZyYW1lTG9hZEV2ZW50czsKKyAgICBDU3RyaW5nIG1f
ZnJhbWVVUkk7CisgICAgQ1N0cmluZyBtX2ZyYW1lUmVkaXJlY3RVUkk7CiB9OwogCiAjZW5kaWYg
Ly8gTG9hZFRyYWNraW5nVGVzdF9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279764</attachid>
            <date>2016-05-25 06:59:51 -0700</date>
            <delta_ts>2016-06-01 04:19:32 -0700</delta_ts>
            <desc>proposed patch IV</desc>
            <filename>wk.patch</filename>
            <type>text/plain</type>
            <size>9662</size>
            <attacher name="Milan Crha">mcrha</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBjYzU5ZGM5Li5mYjVjMzk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTYtMDUtMjUgIE1pbGFuIENyaGEgIDxtY3JoYUByZWRoYXQuY29tPgorCisgICAgICAg
IFtHVEtdIFByb3ZpZGUgZnJhbWUtcmVsYXRlZCBsb2FkIHNpZ25hbHMgaW4gV2ViS2l0V2ViVmll
dworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3ODk5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvV2ViS2l0V2ViUGFnZS5jcHA6CisgICAgICAg
IChkaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZSk6CisgICAgICAgICh3ZWJraXRfd2ViX3Bh
Z2VfY2xhc3NfaW5pdCk6CisKIDIwMTYtMDUtMTkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxl
LmNvbT4KIAogICAgICAgICBJbXByb3ZlIGNvbXBpbGUtdGltZSBhc3NlcnRpb25zIGluIGlzPD4o
KSAvIGRvd25jYXN0PD4oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL1dlYktpdFdlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL1dlYktpdFdlYlBhZ2UuY3BwCmluZGV4
IGM2YzkyMWEuLjIwOGNlOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9XZWJLaXRXZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvV2ViS2l0V2ViUGFnZS5jcHAK
QEAgLTU3LDYgKzU3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIGVudW0gewogICAg
IERPQ1VNRU5UX0xPQURFRCwKKyAgICBGUkFNRV9MT0FERUQsCiAgICAgU0VORF9SRVFVRVNULAog
ICAgIENPTlRFWFRfTUVOVSwKICAgICBDT05TT0xFX01FU1NBR0VfU0VOVCwKQEAgLTE3OSwxMCAr
MTgwLDEwIEBAIHN0YXRpYyB2b2lkIGRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25Gb3JGcmFtZShX
S0J1bmRsZVBhZ2VSZWYsIFdLQnVuZGxlRnJhbWVSZWYKIAogc3RhdGljIHZvaWQgZGlkRmluaXNo
RG9jdW1lbnRMb2FkRm9yRnJhbWUoV0tCdW5kbGVQYWdlUmVmLCBXS0J1bmRsZUZyYW1lUmVmIGZy
YW1lLCBXS1R5cGVSZWYqLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQogewotICAgIGlmICghV0tC
dW5kbGVGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ19z
aWduYWxfZW1pdChXRUJLSVRfV0VCX1BBR0UoY2xpZW50SW5mbyksIHNpZ25hbHNbRE9DVU1FTlRf
TE9BREVEXSwgMCk7CisgICAgaWYgKFdLQnVuZGxlRnJhbWVJc01haW5GcmFtZShmcmFtZSkpCisg
ICAgICAgIGdfc2lnbmFsX2VtaXQoV0VCS0lUX1dFQl9QQUdFKGNsaWVudEluZm8pLCBzaWduYWxz
W0RPQ1VNRU5UX0xPQURFRF0sIDApOworICAgIGVsc2UKKyAgICAgICAgZ19zaWduYWxfZW1pdChX
RUJLSVRfV0VCX1BBR0UoY2xpZW50SW5mbyksIHNpZ25hbHNbRlJBTUVfTE9BREVEXSwgMCwgdG9J
bXBsKGZyYW1lKS0+Y29yZUZyYW1lKCktPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOwogfQogCiBzdGF0aWMgdm9pZCBkaWRDbGVhcldpbmRvd09iamVjdEZvckZyYW1l
KFdLQnVuZGxlUGFnZVJlZiwgV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgV0tCdW5kbGVTY3JpcHRX
b3JsZFJlZiB3a1dvcmxkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQpAQCAtMzc1LDYgKzM3Niw4
IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfcGFnZV9jbGFzc19pbml0KFdlYktpdFdlYlBhZ2VD
bGFzcyoga2xhc3MpCiAgICAgICoKICAgICAgKiBZb3UgY2FuIHdhaXQgZm9yIHRoaXMgc2lnbmFs
IHRvIGdldCB0aGUgRE9NIGRvY3VtZW50IHdpdGgKICAgICAgKiB3ZWJraXRfd2ViX3BhZ2VfZ2V0
X2RvbV9kb2N1bWVudCgpLgorICAgICAqCisgICAgICogU2VlICNXZWJLaXRXZWJQYWdlOjpmcmFt
ZS1sb2FkZWQuCiAgICAgICovCiAgICAgc2lnbmFsc1tET0NVTUVOVF9MT0FERURdID0gZ19zaWdu
YWxfbmV3KAogICAgICAgICAiZG9jdW1lbnQtbG9hZGVkIiwKQEAgLTM4NSw2ICszODgsMjcgQEAg
c3RhdGljIHZvaWQgd2Via2l0X3dlYl9wYWdlX2NsYXNzX2luaXQoV2ViS2l0V2ViUGFnZUNsYXNz
KiBrbGFzcykKICAgICAgICAgR19UWVBFX05PTkUsIDApOwogCiAgICAgLyoqCisgICAgICogV2Vi
S2l0V2ViUGFnZTo6ZnJhbWUtbG9hZGVkOgorICAgICAqIEB3ZWJfcGFnZTogdGhlICNXZWJLaXRX
ZWJQYWdlIG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAorICAgICAqIEBmcmFtZV91cmk6
IFVSSSBvZiB0aGUgZnJhbWUsIHdoaWNoIGhhZCBiZWVuIGxvYWRlZAorICAgICAqCisgICAgICog
VGhpcyBzaWduYWwgaXMgZW1pdHRlZCB3aGVuIHRoZSBET00gZG9jdW1lbnQgb2YgYSAjV2ViS2l0
V2ViUGFnZSBmcmFtZQorICAgICAqIHdpdGggVVJJIEBmcmFtZV91cmkgaGFzIGJlZW4gbG9hZGVk
LiBUaGlzIHNpZ25hbCBpcyBjYWxsZWQgZm9yIGFueQorICAgICAqIGlubmVyIGZyYW1lcyBvZiB0
aGUgbWFpbiBkb2N1bWVudC4gVGhlIG1haW4gZG9jdW1lbnQgbG9hZCBpcyBzaWduYWxlZAorICAg
ICAqIHdpdGggI1dlYktpdFdlYlBhZ2U6OmRvY3VtZW50LWxvYWRlZCBzaWduYWwuCisgICAgICoK
KyAgICAgKiBTaW5jZTogMi4xNAorICAgICAqLworICAgIHNpZ25hbHNbRlJBTUVfTE9BREVEXSA9
IGdfc2lnbmFsX25ldygKKyAgICAgICAgImZyYW1lLWxvYWRlZCIsCisgICAgICAgIEdfVFlQRV9G
Uk9NX0NMQVNTKGtsYXNzKSwKKyAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgIDAs
IDAsIDAsCisgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19TVFJJTkcsCisgICAgICAg
IEdfVFlQRV9OT05FLCAxLAorICAgICAgICBHX1RZUEVfU1RSSU5HKTsKKworICAgIC8qKgogICAg
ICAqIFdlYktpdFdlYlBhZ2U6OnNlbmQtcmVxdWVzdDoKICAgICAgKiBAd2ViX3BhZ2U6IHRoZSAj
V2ViS2l0V2ViUGFnZSBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKICAgICAgKiBAcmVx
dWVzdDogYSAjV2ViS2l0VVJJUmVxdWVzdApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIv
VG9vbHMvQ2hhbmdlTG9nCmluZGV4IDRhMjAzYmYuLjk3OWMwNDAgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxNi0w
NS0yNSAgTWlsYW4gQ3JoYSAgPG1jcmhhQHJlZGhhdC5jb20+CisKKyAgICAgICAgW0dUS10gUHJv
dmlkZSBmcmFtZS1yZWxhdGVkIGxvYWQgc2lnbmFscyBpbiBXZWJLaXRXZWJWaWV3CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc4OTkKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViRXh0ZW5zaW9ucy5jcHA6CisgICAgICAgIChmcmFtZUxv
YWRlZENhbGxiYWNrKToKKyAgICAgICAgKHRlc3RGcmFtZUxvYWRlZFNpZ25hbCk6CisgICAgICAg
IChiZWZvcmVBbGwpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9X
ZWJFeHRlbnNpb25UZXN0LmNwcDoKKyAgICAgICAgKGVtaXRGcmFtZUxvYWRlZCk6CisgICAgICAg
IChmcmFtZUxvYWRlZENhbGxiYWNrKToKKyAgICAgICAgKHBhZ2VDcmVhdGVkQ2FsbGJhY2spOgor
CiAyMDE2LTA1LTE5ICBTcmluaXZhc2FuIFZpamF5YXJhZ2hhdmFuICA8c3ZpamF5YXJhZ2hhdmFu
QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgSlNPTiByZXN1bHRzIHRvIDMyLWJpdCBhbmQgQ0xv
b3AgSlNDIHRlc3RzCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDJHdGsvVGVzdFdlYkV4dGVuc2lvbnMuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyR3RrL1Rlc3RXZWJFeHRlbnNpb25zLmNwcAppbmRleCBiNDFlNWViLi5iZTZhODc2IDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYkV4
dGVuc2lvbnMuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9U
ZXN0V2ViRXh0ZW5zaW9ucy5jcHAKQEAgLTc2LDYgKzc2LDM5IEBAIHN0YXRpYyB2b2lkIHRlc3RE
b2N1bWVudExvYWRlZFNpZ25hbChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAg
ICBnX2RidXNfY29ubmVjdGlvbl9zaWduYWxfdW5zdWJzY3JpYmUoY29ubmVjdGlvbiwgaWQpOwog
fQogCitzdGF0aWMgdm9pZCBmcmFtZUxvYWRlZENhbGxiYWNrKEdEQnVzQ29ubmVjdGlvbiosIGNv
bnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBHVmFyaWFu
dCogcGFyYW1zLCBXZWJWaWV3VGVzdCogdGVzdCkKK3sKKyAgICBjb25zdCBjaGFyKiBmcmFtZV91
cmkgPSBudWxscHRyOworCisgICAgZ192YXJpYW50X2dldChwYXJhbXMsICIoJnMpIiwgJmZyYW1l
X3VyaSk7CisgICAgZ19hc3NlcnQoZnJhbWVfdXJpICYmICpmcmFtZV91cmkpOworCisgICAgZ19t
YWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEZy
YW1lTG9hZGVkU2lnbmFsKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAg
IEdVbmlxdWVQdHI8Y2hhcj4gZXh0ZW5zaW9uQnVzTmFtZShnX3N0cmR1cF9wcmludGYoIm9yZy53
ZWJraXQuZ3RrLldlYkV4dGVuc2lvblRlc3QldSIsIFRlc3Q6OnNfd2ViRXh0ZW5zaW9uSUQpKTsK
KyAgICBHUmVmUHRyPEdEQnVzUHJveHk+IHByb3h5ID0gYWRvcHRHUmVmKGJ1cy0+Y3JlYXRlUHJv
eHkoZXh0ZW5zaW9uQnVzTmFtZS5nZXQoKSwKKyAgICAgICAgIi9vcmcvd2Via2l0L2d0ay9XZWJF
eHRlbnNpb25UZXN0IiwgIm9yZy53ZWJraXQuZ3RrLldlYkV4dGVuc2lvblRlc3QiLCB0ZXN0LT5t
X21haW5Mb29wKSk7CisgICAgR0RCdXNDb25uZWN0aW9uKiBjb25uZWN0aW9uID0gZ19kYnVzX3By
b3h5X2dldF9jb25uZWN0aW9uKHByb3h5LmdldCgpKTsKKyAgICBndWludCBpZCA9IGdfZGJ1c19j
b25uZWN0aW9uX3NpZ25hbF9zdWJzY3JpYmUoY29ubmVjdGlvbiwKKyAgICAgICAgMCwKKyAgICAg
ICAgIm9yZy53ZWJraXQuZ3RrLldlYkV4dGVuc2lvblRlc3QiLAorICAgICAgICAiRnJhbWVMb2Fk
ZWQiLAorICAgICAgICAiL29yZy93ZWJraXQvZ3RrL1dlYkV4dGVuc2lvblRlc3QiLAorICAgICAg
ICAwLAorICAgICAgICBHX0RCVVNfU0lHTkFMX0ZMQUdTX05PTkUsCisgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8R0RCdXNTaWduYWxDYWxsYmFjaz4oZnJhbWVMb2FkZWRDYWxsYmFjayksCisgICAg
ICAgIHRlc3QsCisgICAgICAgIDApOworICAgIGdfYXNzZXJ0KGlkKTsKKworICAgIHRlc3QtPmxv
YWRIdG1sKCI8aHRtbD48aGVhZD48dGl0bGU+V2ViS2l0R1RLKyBXZWIgRXh0ZW5zaW9ucyBUZXN0
PC90aXRsZT48L2hlYWQ+PGJvZHk+V2l0aCBpZnJhbWU6PGJyPjxpZnJhbWUgc3JjPVwidW5rbm93
bi1maWxlLmh0bWxcIj48L2lmcmFtZT48L2JvZHk+PC9odG1sPiIsIDApOworICAgIGdfbWFpbl9s
b29wX3J1bih0ZXN0LT5tX21haW5Mb29wKTsKKyAgICBnX2RidXNfY29ubmVjdGlvbl9zaWduYWxf
dW5zdWJzY3JpYmUoY29ubmVjdGlvbiwgaWQpOworfQorCiBzdGF0aWMgZ2Jvb2xlYW4gd2ViUHJv
Y2Vzc0NyYXNoZWRDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiwgV2ViVmlld1Rlc3QqIHRlc3QpCiB7
CiAgICAgdGVzdC0+cXVpdE1haW5Mb29wKCk7CkBAIC0yMjAsNiArMjUzLDcgQEAgdm9pZCBiZWZv
cmVBbGwoKQogCiAgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViRXh0ZW5zaW9uIiwgImRv
bS1kb2N1bWVudC10aXRsZSIsIHRlc3RXZWJFeHRlbnNpb25HZXRUaXRsZSk7CiAgICAgV2ViVmll
d1Rlc3Q6OmFkZCgiV2ViS2l0V2ViRXh0ZW5zaW9uIiwgImRvY3VtZW50LWxvYWRlZC1zaWduYWwi
LCB0ZXN0RG9jdW1lbnRMb2FkZWRTaWduYWwpOworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktp
dFdlYkV4dGVuc2lvbiIsICJmcmFtZS1sb2FkZWQtc2lnbmFsIiwgdGVzdEZyYW1lTG9hZGVkU2ln
bmFsKTsKICAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgIndlYi1wcm9jZXNz
LWNyYXNoZWQiLCB0ZXN0V2ViS2l0V2ViVmlld1Byb2Nlc3NDcmFzaGVkKTsKICAgICBXZWJWaWV3
VGVzdDo6YWRkKCJXZWJLaXRXZWJFeHRlbnNpb24iLCAid2luZG93LW9iamVjdC1jbGVhcmVkIiwg
dGVzdFdlYkV4dGVuc2lvbldpbmRvd09iamVjdENsZWFyZWQpOwogICAgIFdlYlZpZXdUZXN0Ojph
ZGQoIldlYktpdFdlYkV4dGVuc2lvbiIsICJpc29sYXRlZC13b3JsZCIsIHRlc3RXZWJFeHRlbnNp
b25Jc29sYXRlZFdvcmxkKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Mkd0ay9XZWJFeHRlbnNpb25UZXN0LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Mkd0ay9XZWJFeHRlbnNpb25UZXN0LmNwcAppbmRleCAzNzJjZmVhLi45ZmU1YWM3
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvV2ViRXh0
ZW5zaW9uVGVzdC5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3Rr
L1dlYkV4dGVuc2lvblRlc3QuY3BwCkBAIC01Niw2ICs1Niw5IEBAIHN0YXRpYyBjb25zdCBjaGFy
IGludHJvc3BlY3Rpb25YTUxbXSA9CiAgICAgIiAgPG1ldGhvZCBuYW1lPSdSZW1vdmVBVlBsdWdp
bnNGcm9tR1NUUmVnaXN0cnknPiIKICAgICAiICA8L21ldGhvZD4iCiAgICAgIiAgPHNpZ25hbCBu
YW1lPSdEb2N1bWVudExvYWRlZCcvPiIKKyAgICAiICA8c2lnbmFsIG5hbWU9J0ZyYW1lTG9hZGVk
Jz4iCisgICAgIiAgIDxhcmcgdHlwZT0ncycgbmFtZT0nZnJhbWUtdXJpJyBkaXJlY3Rpb249J291
dCcvPiIKKyAgICAiICA8L3NpZ25hbD4iCiAgICAgIiAgPHNpZ25hbCBuYW1lPSdVUklDaGFuZ2Vk
Jz4iCiAgICAgIiAgIDxhcmcgdHlwZT0ncycgbmFtZT0ndXJpJyBkaXJlY3Rpb249J291dCcvPiIK
ICAgICAiICA8L3NpZ25hbD4iCkBAIC02NSw2ICs2OCw3IEBAIHN0YXRpYyBjb25zdCBjaGFyIGlu
dHJvc3BlY3Rpb25YTUxbXSA9CiAKIHR5cGVkZWYgZW51bSB7CiAgICAgRG9jdW1lbnRMb2FkZWRT
aWduYWwsCisgICAgRnJhbWVMb2FkZWRTaWduYWwsCiAgICAgVVJJQ2hhbmdlZFNpZ25hbCwKIH0g
RGVsYXllZFNpZ25hbFR5cGU7CiAKQEAgLTExOSw2ICsxMjMsMzAgQEAgc3RhdGljIHZvaWQgZG9j
dW1lbnRMb2FkZWRDYWxsYmFjayhXZWJLaXRXZWJQYWdlKiB3ZWJQYWdlLCBXZWJLaXRXZWJFeHRl
bnNpb24qIGUKICAgICAgICAgZGVsYXllZFNpZ25hbHNRdWV1ZS5hcHBlbmQoRGVsYXllZFNpZ25h
bChEb2N1bWVudExvYWRlZFNpZ25hbCkpOwogfQogCitzdGF0aWMgdm9pZCBlbWl0RnJhbWVMb2Fk
ZWQoR0RCdXNDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBjb25zdCBjaGFyKiBmcmFtZV91cmkpCit7
CisgICAgYm9vbCBvayA9IGdfZGJ1c19jb25uZWN0aW9uX2VtaXRfc2lnbmFsKAorICAgICAgICBj
b25uZWN0aW9uLAorICAgICAgICAwLAorICAgICAgICAiL29yZy93ZWJraXQvZ3RrL1dlYkV4dGVu
c2lvblRlc3QiLAorICAgICAgICAib3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIsCisg
ICAgICAgICJGcmFtZUxvYWRlZCIsCisgICAgICAgIGdfdmFyaWFudF9uZXcoIihzKSIsIGZyYW1l
X3VyaSksCisgICAgICAgIDApOworICAgIGdfYXNzZXJ0KG9rKTsKK30KKworc3RhdGljIHZvaWQg
ZnJhbWVMb2FkZWRDYWxsYmFjayhXZWJLaXRXZWJQYWdlKiB3ZWJQYWdlLCBjb25zdCBnY2hhciog
ZnJhbWVfdXJpLCBXZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbikKK3sKKyAgICBnX2Fzc2Vy
dChmcmFtZV91cmkgJiYgKmZyYW1lX3VyaSk7CisKKyAgICBncG9pbnRlciBkYXRhID0gZ19vYmpl
Y3RfZ2V0X2RhdGEoR19PQkpFQ1QoZXh0ZW5zaW9uKSwgImRidXMtY29ubmVjdGlvbiIpOworICAg
IGlmIChkYXRhKQorICAgICAgICBlbWl0RnJhbWVMb2FkZWQoR19EQlVTX0NPTk5FQ1RJT04oZGF0
YSksIGZyYW1lX3VyaSk7CisgICAgZWxzZQorICAgICAgICBkZWxheWVkU2lnbmFsc1F1ZXVlLmFw
cGVuZChEZWxheWVkU2lnbmFsKEZyYW1lTG9hZGVkU2lnbmFsLCBmcmFtZV91cmkpKTsKK30KKwog
c3RhdGljIHZvaWQgZW1pdFVSSUNoYW5nZWQoR0RCdXNDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBj
b25zdCBjaGFyKiB1cmkpCiB7CiAgICAgYm9vbCBvayA9IGdfZGJ1c19jb25uZWN0aW9uX2VtaXRf
c2lnbmFsKApAQCAtMjQ5LDYgKzI3Nyw3IEBAIHN0YXRpYyB2b2lkIGNvbnNvbGVNZXNzYWdlU2Vu
dENhbGxiYWNrKFdlYktpdFdlYlBhZ2UqIHdlYlBhZ2UsIFdlYktpdENvbnNvbGVNZXNzCiBzdGF0
aWMgdm9pZCBwYWdlQ3JlYXRlZENhbGxiYWNrKFdlYktpdFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9u
LCBXZWJLaXRXZWJQYWdlKiB3ZWJQYWdlLCBncG9pbnRlcikKIHsKICAgICBnX3NpZ25hbF9jb25u
ZWN0KHdlYlBhZ2UsICJkb2N1bWVudC1sb2FkZWQiLCBHX0NBTExCQUNLKGRvY3VtZW50TG9hZGVk
Q2FsbGJhY2spLCBleHRlbnNpb24pOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViUGFnZSwgImZy
YW1lLWxvYWRlZCIsIEdfQ0FMTEJBQ0soZnJhbWVMb2FkZWRDYWxsYmFjayksIGV4dGVuc2lvbik7
CiAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJQYWdlLCAibm90aWZ5Ojp1cmkiLCBHX0NBTExCQUNL
KHVyaUNoYW5nZWRDYWxsYmFjayksIGV4dGVuc2lvbik7CiAgICAgZ19zaWduYWxfY29ubmVjdCh3
ZWJQYWdlLCAic2VuZC1yZXF1ZXN0IiwgR19DQUxMQkFDSyhzZW5kUmVxdWVzdENhbGxiYWNrKSwg
bnVsbHB0cik7CiAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJQYWdlLCAiY29udGV4dC1tZW51Iiwg
R19DQUxMQkFDSyhjb250ZXh0TWVudUNhbGxiYWNrKSwgbnVsbHB0cik7CkBAIC0zNjgsNiArMzk3
LDkgQEAgc3RhdGljIHZvaWQgYnVzQWNxdWlyZWRDYWxsYmFjayhHREJ1c0Nvbm5lY3Rpb24qIGNv
bm5lY3Rpb24sIGNvbnN0IGNoYXIqIG5hbWUsIGcKICAgICAgICAgY2FzZSBEb2N1bWVudExvYWRl
ZFNpZ25hbDoKICAgICAgICAgICAgIGVtaXREb2N1bWVudExvYWRlZChjb25uZWN0aW9uKTsKICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZyYW1lTG9hZGVkU2lnbmFsOgorICAgICAg
ICAgICAgZW1pdEZyYW1lTG9hZGVkKGNvbm5lY3Rpb24sIGRlbGF5ZWRTaWduYWwudXJpLmRhdGEo
KSk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBVUklDaGFuZ2VkU2lnbmFsOgog
ICAgICAgICAgICAgZW1pdFVSSUNoYW5nZWQoY29ubmVjdGlvbiwgZGVsYXllZFNpZ25hbC51cmku
ZGF0YSgpKTsKICAgICAgICAgICAgIGJyZWFrOwo=
</data>
<flag name="review"
          id="303807"
          type_id="1"
          status="-"
          setter="cgarcia"
    />
    <flag name="commit-queue"
          id="303808"
          type_id="3"
          status="-"
          setter="cgarcia"
    />
          </attachment>
      

    </bug>

</bugzilla>