<?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>206287</bug_id>
          
          <creation_ts>2020-01-15 06:38:04 -0800</creation_ts>
          <short_desc>[WPE] Expose the WebKitOptionMenu APIs</short_desc>
          <delta_ts>2020-02-13 03:16:40 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=206794</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Zan Dobersek">zan</reporter>
          <assigned_to name="Zan Dobersek">zan</assigned_to>
          <cc>annulen</cc>
    
    <cc>berto</cc>
    
    <cc>cgarcia</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>pnormand</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1606903</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2020-01-15 06:38:04 -0800</bug_when>
    <thetext>[WPE] Expose the WebKitOptionMenu APIs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1606904</commentid>
    <comment_count>1</comment_count>
      <attachid>387787</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2020-01-15 06:39:16 -0800</bug_when>
    <thetext>Created attachment 387787
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607417</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2020-01-16 04:42:09 -0800</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607438</commentid>
    <comment_count>3</comment_count>
      <attachid>387787</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-01-16 06:21:23 -0800</bug_when>
    <thetext>Comment on attachment 387787
Patch

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

I think this will be easier to review if we first move the common code to glib. You can do it unreviewed, since there aren&apos;t code changes right?

&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:2162
&gt; +        G_TYPE_BOOLEAN, 1,
&gt; +        WEBKIT_TYPE_OPTION_MENU);

Would it be possible to include the event for WPE too? The element area is quite important too, so that the user can properly position the menu.

&gt; Tools/TestWebKitAPI/Tests/WebKitGLib/TestOptionMenu.cpp:62
&gt; +#endif
&gt; +
&gt; +#if PLATFORM(WPE)

elif since they are mutually exclusive and it&apos;s the impl of the same thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607440</commentid>
    <comment_count>4</comment_count>
      <attachid>387915</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2020-01-16 06:27:18 -0800</bug_when>
    <thetext>Created attachment 387915
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607884</commentid>
    <comment_count>5</comment_count>
      <attachid>387787</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2020-01-16 23:26:16 -0800</bug_when>
    <thetext>Comment on attachment 387787
Patch

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

&gt;&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:2162
&gt;&gt; +        WEBKIT_TYPE_OPTION_MENU);
&gt; 
&gt; Would it be possible to include the event for WPE too? The element area is quite important too, so that the user can properly position the menu.

The event probably isn&apos;t possible cause WPE doesn&apos;t have ATM a single event structure.

I&apos;d want to add the area support later, once a new API type is available for it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607896</commentid>
    <comment_count>6</comment_count>
      <attachid>388015</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2020-01-17 00:03:27 -0800</bug_when>
    <thetext>Created attachment 388015
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607906</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-01-17 00:18:18 -0800</bug_when>
    <thetext>(In reply to Zan Dobersek from comment #5)
&gt; Comment on attachment 387787 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=387787&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:2162
&gt; &gt;&gt; +        WEBKIT_TYPE_OPTION_MENU);
&gt; &gt; 
&gt; &gt; Would it be possible to include the event for WPE too? The element area is quite important too, so that the user can properly position the menu.
&gt; 
&gt; The event probably isn&apos;t possible cause WPE doesn&apos;t have ATM a single event
&gt; structure.
&gt; 
&gt; I&apos;d want to add the area support later, once a new API type is available for
&gt; it.

When is later? Because adding a new parameter to a signal would be an api break.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607937</commentid>
    <comment_count>8</comment_count>
      <attachid>387787</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2020-01-17 02:59:05 -0800</bug_when>
    <thetext>Comment on attachment 387787
Patch

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

&gt;&gt;&gt;&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:2162
&gt;&gt;&gt;&gt; +        WEBKIT_TYPE_OPTION_MENU);
&gt;&gt;&gt; 
&gt;&gt;&gt; Would it be possible to include the event for WPE too? The element area is quite important too, so that the user can properly position the menu.
&gt;&gt; 
&gt;&gt; The event probably isn&apos;t possible cause WPE doesn&apos;t have ATM a single event structure.
&gt;&gt; 
&gt;&gt; I&apos;d want to add the area support later, once a new API type is available for it.
&gt; 
&gt; When is later? Because adding a new parameter to a signal would be an api break.

Before the branching in two weeks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607951</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-01-17 04:35:23 -0800</bug_when>
    <thetext>(In reply to Zan Dobersek from comment #8)
&gt; Comment on attachment 387787 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=387787&amp;action=review
&gt; 
&gt; &gt;&gt;&gt;&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:2162
&gt; &gt;&gt;&gt;&gt; +        WEBKIT_TYPE_OPTION_MENU);
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; Would it be possible to include the event for WPE too? The element area is quite important too, so that the user can properly position the menu.
&gt; &gt;&gt; 
&gt; &gt;&gt; The event probably isn&apos;t possible cause WPE doesn&apos;t have ATM a single event structure.
&gt; &gt;&gt; 
&gt; &gt;&gt; I&apos;d want to add the area support later, once a new API type is available for it.
&gt; &gt; 
&gt; &gt; When is later? Because adding a new parameter to a signal would be an api break.
&gt; 
&gt; Before the branching in two weeks.

Ok, I guess we can add a boxed type WebKitRectangle only for WPE, like we did for  colors with WebKitColor</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607957</commentid>
    <comment_count>10</comment_count>
      <attachid>388015</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-01-17 05:48:24 -0800</bug_when>
    <thetext>Comment on attachment 388015
Patch

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

&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:2145
&gt; +     * the details of all items that should be displayed. The area of the element in the
&gt; +     * #WebKitWebView is given as @rectangle parameter, it can be used to position the
&gt; +     * menu.

There&apos;s no @rectangle yet, but I guess it&apos;s ok to leave it since we are going to add it soon.

&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:2148
&gt; +     * The default signal handler will pop up a #GtkMenu.

Remove this.

&gt; Source/WebKit/UIProcess/API/wpe/PageClientImpl.cpp:259
&gt; -    return nullptr;
&gt; +    return WebKitPopupMenu::create(m_view.webView(), page);

We should return nullptr if m_view.webView() is nullptr, because WebKitPopup assumes the view is never null. I think we should pass m_view here though, instead of the view.

&gt; Source/WebKit/UIProcess/API/wpe/WPEView.cpp:47
&gt; -View::View(struct wpe_view_backend* backend, const API::PageConfiguration&amp; baseConfiguration)
&gt; +View::View(WebKitWebView* webView, struct wpe_view_backend* backend, const API::PageConfiguration&amp; baseConfiguration)

We normally use ViewClient to avoid this. So, we add showPopupMenu() to View and ViewClient and the view one sjust forwards the request to the client.

&gt; Source/WebKit/UIProcess/API/wpe/WebKitPopupMenu.cpp:29
&gt; +WebKitPopupMenu::WebKitPopupMenu(WebKitWebView* webView, WebPopupMenuProxy::Client&amp; client)

So, this would receive a WKWPE::View instead of the web view.

&gt; Source/WebKit/UIProcess/API/wpe/WebKitPopupMenu.cpp:42
&gt; +void WebKitPopupMenu::showPopupMenu(const IntRect&amp; rect, TextDirection direction, double pageScaleFactor, const Vector&lt;WebPopupItem&gt;&amp; items, const PlatformPopupMenuData&amp; platformData, int32_t selectedIndex)
&gt; +{
&gt; +    GRefPtr&lt;WebKitOptionMenu&gt; menu = adoptGRef(webkitOptionMenuCreate(*this, items, selectedIndex));

Here we would call m_view-&gt;showPopupMenu(rect, items, selectedIndex); and the WebKitWebView will build the WebKitOptionMenu and emit the signal. Since we need to keep the WebKitOptionMenu here we can make showPopupMenu() return the built menu or nullptr, using void* in the interface to avoid using glib api types in view client.

&gt; Source/WebKit/UIProcess/API/wpe/WebKitWebView.h:252
&gt;      void (*_webkit_reserved0) (void);

You have to remove one of the reserved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608636</commentid>
    <comment_count>11</comment_count>
      <attachid>388015</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2020-01-19 23:45:36 -0800</bug_when>
    <thetext>Comment on attachment 388015
Patch

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

&gt;&gt; Source/WebKit/UIProcess/API/wpe/WebKitPopupMenu.cpp:42
&gt;&gt; +    GRefPtr&lt;WebKitOptionMenu&gt; menu = adoptGRef(webkitOptionMenuCreate(*this, items, selectedIndex));
&gt; 
&gt; Here we would call m_view-&gt;showPopupMenu(rect, items, selectedIndex); and the WebKitWebView will build the WebKitOptionMenu and emit the signal. Since we need to keep the WebKitOptionMenu here we can make showPopupMenu() return the built menu or nullptr, using void* in the interface to avoid using glib api types in view client.

Would it make sense to pull the GLib-API-oriented WebViewClient implementation into a standalone header and implementation file, add necessary virtual methods to check for the type of the client at runtime, and then implement the popup menu functionality only for WebViewClient that has a usable WebKitWebView? This would also allow WebKitPopupMenu::create() to return null immediately if the WKView&apos;s client is not supported (i.e. not the WebViewClient implementation).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608662</commentid>
    <comment_count>12</comment_count>
      <attachid>388218</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2020-01-20 01:32:22 -0800</bug_when>
    <thetext>Created attachment 388218
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608689</commentid>
    <comment_count>13</comment_count>
      <attachid>388218</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-01-20 02:41:27 -0800</bug_when>
    <thetext>Comment on attachment 388218
Patch

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

&gt; Source/WebKit/ChangeLog:61
&gt; +2020-01-19  Zan Dobersek  &lt;zdobersek@igalia.com&gt;

double changelog

&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:2163
&gt; +        G_TYPE_BOOLEAN, 1,
&gt; +        WEBKIT_TYPE_OPTION_MENU);

Since we plan to add the rectangle later I would add the parameter here as a G_TYPE_POINTER. Then when adding the rectangle we just need to change the type.

&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:2758
&gt; +    g_signal_emit(webView, signals[SHOW_OPTION_MENU], 0, menu, &amp;handled);

Here we would pass nullptr as the rectangle, and I would add a fixme comment too.

&gt; Source/WebKit/UIProcess/API/wpe/WPEView.h:44
&gt; +typedef struct _WebKitWebView WebKitWebView;

Do we need this here?

&gt; Source/WebKit/UIProcess/API/wpe/WebKitOptionMenu.h:2
&gt; + * Copyright (C) 2017 Igalia S.L.

2020

&gt; Source/WebKit/UIProcess/API/wpe/WebKitOptionMenuItem.h:2
&gt; + * Copyright (C) 2017 Igalia S.L.

2020

&gt; Source/WebKit/UIProcess/API/wpe/WebKitPopupMenu.cpp:27
&gt; +#include &quot;WebKitWebViewPrivate.h&quot;

Do we need this header here?

&gt; Source/WebKit/UIProcess/API/wpe/WebKitPopupMenu.h:26
&gt; +typedef struct _WebKitWebView WebKitWebView;

We don&apos;t need this.

&gt; Source/WebKit/UIProcess/API/wpe/WebKitPopupMenu.h:50
&gt; +    WebKitWebView* m_webView;

And this is now unused.

&gt; Source/WebKit/UIProcess/API/wpe/WebKitWebView.h:250
&gt; +    gboolean       (* show_option_menu)            (WebKitWebView               *web_view,
&gt; +                                                    WebKitOptionMenu            *menu);

We would need to add a gpointer rectangle parameter here too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608697</commentid>
    <comment_count>14</comment_count>
      <attachid>388224</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2020-01-20 03:23:50 -0800</bug_when>
    <thetext>Created attachment 388224
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608698</commentid>
    <comment_count>15</comment_count>
      <attachid>388224</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2020-01-20 03:24:48 -0800</bug_when>
    <thetext>Comment on attachment 388224
Patch for landing

Clearing flags on attachment: 388224

Committed r254819: &lt;https://trac.webkit.org/changeset/254819&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608699</commentid>
    <comment_count>16</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2020-01-20 03:24:53 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608700</commentid>
    <comment_count>17</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-01-20 03:25:17 -0800</bug_when>
    <thetext>&lt;rdar://problem/58735364&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1618430</commentid>
    <comment_count>18</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2020-02-13 02:25:19 -0800</bug_when>
    <thetext>Since this landed I see this in my GTK build:

[66/89] Generating ../../WebKit2-4.0.gir
../../../../Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:2137: Warning: WebKit2: multiple comment blocks documenting &apos;WebKitWebView::show-option-menu:&apos; identifier (already seen at WebKitWebView.cpp:2101).
../../../../Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:2137: Warning: WebKit2: incorrect number of parameters in comment block, parameter annotations will be ignored.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1618439</commentid>
    <comment_count>19</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-02-13 03:16:40 -0800</bug_when>
    <thetext>(In reply to Philippe Normand from comment #18)
&gt; Since this landed I see this in my GTK build:
&gt; 
&gt; [66/89] Generating ../../WebKit2-4.0.gir
&gt; ../../../../Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:2137:
&gt; Warning: WebKit2: multiple comment blocks documenting
&gt; &apos;WebKitWebView::show-option-menu:&apos; identifier (already seen at
&gt; WebKitWebView.cpp:2101).
&gt; ../../../../Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:2137:
&gt; Warning: WebKit2: incorrect number of parameters in comment block, parameter
&gt; annotations will be ignored.

See bug #206794</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387787</attachid>
            <date>2020-01-15 06:39:16 -0800</date>
            <delta_ts>2020-01-16 06:27:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206287-20200115153913.patch</filename>
            <type>text/plain</type>
            <size>89783</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0NTU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDRkMzY2ZTk5ZTA3YWM1MTBh
ODFiNDc2MGNjYWVkMTUwMjBmNDQ4YTAuLjdlMTRjODljZWE2ZjdkNjQ4NjhmNGZmMjBhYmM2MzI4
M2NhNzM3ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDggQEAKKzIwMjAtMDEtMTUgIFphbiBEb2Jl
cnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtXUEVdIEV4cG9zZSB0aGUg
V2ViS2l0T3B0aW9uTWVudSBBUElzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMDYyODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3Jt
V1BFLmNtYWtlOgorICAgICAgICAqIFNvdXJjZXNHVEsudHh0OgorICAgICAgICAqIFNvdXJjZXNX
UEUudHh0OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy93cGUvV0tWaWV3LmNwcDoKKyAgICAg
ICAgKFdLVmlld0NyZWF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdE9w
dGlvbk1lbnUuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRPcHRpb25NZW51LmNwcC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2dsaWIvV2Vi
S2l0T3B0aW9uTWVudUl0ZW0uY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRPcHRpb25NZW51SXRlbS5jcHAuCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdE9wdGlvbk1lbnVJdGVtUHJpdmF0ZS5oOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRPcHRpb25NZW51SXRlbVByaXZhdGUu
aC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0T3B0aW9uTWVudVByaXZhdGUu
aDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0T3B0
aW9uTWVudVByaXZhdGUuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vi
Vmlldy5jcHA6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdCk6CisgICAgICAg
ICh3ZWJraXRXZWJWaWV3Q3JlYXRlUGFnZSk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3U2hvd09w
dGlvbk1lbnUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3UHJp
dmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL1BhZ2VDbGllbnRJbXBsLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmNyZWF0ZVBvcHVwTWVudVByb3h5KToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9XUEVWaWV3LmNwcDoKKyAgICAgICAgKFdLV1BF
OjpWaWV3OjpWaWV3KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9XUEVWaWV3Lmg6Cisg
ICAgICAgIChXS1dQRTo6Vmlldzo6Y3JlYXRlKToKKyAgICAgICAgKFdLV1BFOjpWaWV3Ojp3ZWJW
aWV3KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRPcHRpb25NZW51Lmg6IEFk
ZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdE9wdGlvbk1lbnVJdGVtLmg6
IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFBvcHVwTWVudS5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJLaXRQb3B1cE1lbnU6OldlYktpdFBvcHVwTWVu
dSk6CisgICAgICAgIChXZWJLaXQ6Om1lbnVDbG9zZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYktp
dDo6V2ViS2l0UG9wdXBNZW51OjpzaG93UG9wdXBNZW51KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
S2l0UG9wdXBNZW51OjpoaWRlUG9wdXBNZW51KToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0UG9w
dXBNZW51OjpjYW5jZWxUcmFja2luZyk6CisgICAgICAgIChXZWJLaXQ6OldlYktpdFBvcHVwTWVu
dTo6c2VsZWN0SXRlbSk6CisgICAgICAgIChXZWJLaXQ6OldlYktpdFBvcHVwTWVudTo6YWN0aXZh
dGVJdGVtKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRQb3B1cE1lbnUuaDog
QWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0V2ViVmlldy5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL2RvY3Mvd3BlLTEuMC1zZWN0aW9ucy50eHQ6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS93cGUvd2Via2l0Lmg6CisKIDIwMjAtMDEtMTQgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRW5hYmxlIHRoZSBvZmZzZXQgYXNz
ZXJ0aW9uIGluIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjppbmRleEZvclBvc2l0aW9uCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV1BFLmNtYWtlIGIvU291cmNlL1dlYktp
dC9QbGF0Zm9ybVdQRS5jbWFrZQppbmRleCBhOGE5NWY0YjBkYjRhNTBhOGVmNWI3MjAzOWM1MWNj
NTgxOGVkMzA0Li5kMTRiODYyNjA4ODlmMGQwYjc3MjBiYmQzYjEzZWNlMWJjOTc2ODdlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV1BFLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm1XUEUuY21ha2UKQEAgLTExOSw2ICsxMTksOCBAQCBzZXQoV1BFX0FQSV9JTlNU
QUxMRURfSEVBREVSUwogICAgICR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0
TmV0d29ya1Byb3h5U2V0dGluZ3MuaAogICAgICR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0FQSS93
cGUvV2ViS2l0Tm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3QuaAogICAgICR7V0VCS0lUX0RJ
Un0vVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Tm90aWZpY2F0aW9uLmgKKyAgICAke1dFQktJVF9E
SVJ9L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdE9wdGlvbk1lbnUuaAorICAgICR7V0VCS0lUX0RJ
Un0vVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0T3B0aW9uTWVudUl0ZW0uaAogICAgICR7V0VCS0lU
X0RJUn0vVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0UGVybWlzc2lvblJlcXVlc3QuaAogICAgICR7
V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0UGx1Z2luLmgKICAgICAke1dFQktJ
VF9ESVJ9L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFBvbGljeURlY2lzaW9uLmgKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNH
VEsudHh0CmluZGV4IDk3Y2NhMzQ2MDNlMGQ5NjliYmI5YmUxNzI1ZWI5NzI3N2ZhNWY1ZDguLjgy
MWY3OWIxNmM3OGQ0ZDNjMzAwMTQyNTE2Y2Y3MmUyNDlmNTg1YmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvU291cmNlc0dUSy50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4
dApAQCAtMTU4LDYgKzE1OCw4IEBAIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXROZXR3b3JrUHJv
eHlTZXR0aW5ncy5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Tm90aWZp
Y2F0aW9uLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXROb3RpZmljYXRp
b25QZXJtaXNzaW9uUmVxdWVzdC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2Vi
S2l0Tm90aWZpY2F0aW9uUHJvdmlkZXIuY3BwIEBuby11bmlmeQorVUlQcm9jZXNzL0FQSS9nbGli
L1dlYktpdE9wdGlvbk1lbnUuY3BwIEBuby11bmlmeQorVUlQcm9jZXNzL0FQSS9nbGliL1dlYktp
dE9wdGlvbk1lbnVJdGVtLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRQ
ZXJtaXNzaW9uUmVxdWVzdC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0
UGx1Z2luLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRQb2ludGVyTG9j
a1Blcm1pc3Npb25SZXF1ZXN0LmNwcCBAbm8tdW5pZnkKQEAgLTE5NCw4ICsxOTYsNiBAQCBVSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRDb2xvckNob29zZXJSZXF1ZXN0LmNwcCBAbm8tdW5pZnkKIFVJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVtb2ppQ2hvb3Nlci5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRJbnB1dE1ldGhvZENvbnRleHRHdGsuY3BwIEBuby11bmlmeQogVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0SW1wbEd0ay5jcHAgQG5vLXVu
aWZ5Ci1VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRPcHRpb25NZW51LmNwcCBAbm8tdW5pZnkKLVVJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE9wdGlvbk1lbnVJdGVtLmNwcCBAbm8tdW5pZnkKIFVJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFBvcHVwTWVudS5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRQcmludEN1c3RvbVdpZGdldC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRQcmludE9wZXJhdGlvbi5jcHAgQG5vLXVuaWZ5CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1NvdXJjZXNXUEUudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzV1BFLnR4dApp
bmRleCA4MTA2NTgxZDdlZmJkZDM2ODU3MGViZGY0MGJkYzY2ZTRhNzUyZDY1Li5hMjJmNzAzNGFi
Y2U0NmQwMTc5N2ZhZTQzMWNhZjMzYmU1NmVkZDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1NvdXJjZXNXUEUudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc1dQRS50eHQKQEAgLTE0
NSw2ICsxNDUsOCBAQCBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0TmV0d29ya1Byb3h5U2V0dGlu
Z3MuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdE5vdGlmaWNhdGlvbi5j
cHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Tm90aWZpY2F0aW9uUGVybWlz
c2lvblJlcXVlc3QuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdE5vdGlm
aWNhdGlvblByb3ZpZGVyLmNwcCBAbm8tdW5pZnkKK1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRP
cHRpb25NZW51LmNwcCBAbm8tdW5pZnkKK1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRPcHRpb25N
ZW51SXRlbS5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0UGVybWlzc2lv
blJlcXVlc3QuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFBsdWdpbi5j
cHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0UG9saWN5RGVjaXNpb24uY3Bw
IEBuby11bmlmeQpAQCAtMTc3LDYgKzE3OSw3IEBAIFVJUHJvY2Vzcy9BUEkvd3BlL1BhZ2VDbGll
bnRJbXBsLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvd3BlL1Njcm9sbEdlc3R1cmVDb250
cm9sbGVyLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcCBA
bm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdElucHV0TWV0aG9kQ29udGV4dFdQRS5j
cHAgQG5vLXVuaWZ5CitVSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRQb3B1cE1lbnUuY3BwIEBuby11
bmlmeQogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0U2NyaXB0RGlhbG9nV1BFLmNwcCBAbm8tdW5p
ZnkKIFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYlZpZXdCYWNrZW5kLmNwcCBAbm8tdW5pZnkK
IFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYlZpZXdXUEUuY3BwIEBuby11bmlmeQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Mvd3BlL1dLVmlldy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy93cGUvV0tWaWV3LmNwcAppbmRleCA5NjQwNmQwYWFm
YmMzNTU1NjBiNWQzMTk3YTAwYzI1ZjU3NTlhM2ZkLi40NWU2MGFhNDFhZThjZGE5ZWQ2ZWIyMDFj
YjhkZDRmYzMyM2ZkNmI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Qy93cGUvV0tWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy93cGUv
V0tWaWV3LmNwcApAQCAtNDIsNyArNDIsNyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBDbGllbnRUcmFp
dHM8V0tWaWV3Q2xpZW50QmFzZT4gewogCiBXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlKHN0cnVjdCB3
cGVfdmlld19iYWNrZW5kKiBiYWNrZW5kLCBXS1BhZ2VDb25maWd1cmF0aW9uUmVmIGNvbmZpZ3Vy
YXRpb24pCiB7Ci0gICAgcmV0dXJuIHRvQVBJKFdLV1BFOjpWaWV3OjpjcmVhdGUoYmFja2VuZCwg
KnRvSW1wbChjb25maWd1cmF0aW9uKSkpOworICAgIHJldHVybiB0b0FQSShXS1dQRTo6Vmlldzo6
Y3JlYXRlKG51bGxwdHIsIGJhY2tlbmQsICp0b0ltcGwoY29uZmlndXJhdGlvbikpKTsKIH0KIAog
V0tQYWdlUmVmIFdLVmlld0dldFBhZ2UoV0tWaWV3UmVmIHZpZXcpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRPcHRpb25NZW51LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdE9wdGlvbk1lbnUuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjVmMWVlZGJhNjcxODkxZDJkNGNiMDk5NTg1NGE4NTk1ODk0YTEyMjkKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRPcHRpb25NZW51
LmNwcApAQCAtMCwwICsxLDE4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEg
Uy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0T3B0aW9uTWVudS5oIgor
CisjaW5jbHVkZSAiV2ViS2l0T3B0aW9uTWVudUl0ZW1Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2Vi
S2l0T3B0aW9uTWVudVByaXZhdGUuaCIKKyNpbmNsdWRlIDx3dGYvZ2xpYi9XVEZHVHlwZS5oPgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCisvKioKKyAqIFNFQ1RJT046IFdlYktpdE9wdGlv
bk1lbnUKKyAqIEBTaG9ydF9kZXNjcmlwdGlvbjoKKyAqIEBUaXRsZTogV2ViS2l0T3B0aW9uTWVu
dQorICoKKyAqIFdlYktpdE9wdGlvbk1lbnUgcmVwcmVzZW50cyB0aGUgZHJvcGRvd24gbWVudSBv
ZiBhIHNlbGVjdCBlbGVtZW50IGluIGEgI1dlYktpdFdlYlZpZXcuCisgKgorICogV2hlbiBhIHNl
bGVjdCBlbGVtZW50IGluIGEgI1dlYktpdFdlYlZpZXcgbmVlZHMgdG8gZGlzcGxheSBhIGRyb3Bk
b3duIG1lbnUsIHRoZSBzaWduYWwKKyAqICNXZWJLaXRXZWJWaWV3OjpzaG93LW9wdGlvbi1tZW51
IGlzIGVtaXR0ZWQsIHByb3ZpZGluZyBhIFdlYktpdE9wdGlvbk1lbnUgd2l0aCB0aGUKKyAqICNX
ZWJLaXRPcHRpb25NZW51SXRlbTwhLS0gLS0+cyB0aGF0IHNob3VsZCBiZSBkaXNwbGF5ZWQuCisg
KgorICogU2luY2U6IDIuMTgKKyAqLworCitzdHJ1Y3QgX1dlYktpdE9wdGlvbk1lbnVQcml2YXRl
IHsKKyAgICBWZWN0b3I8V2ViS2l0T3B0aW9uTWVudUl0ZW0+IGl0ZW1zOworICAgIFJlZlB0cjxX
ZWJLaXRQb3B1cE1lbnU+IHBvcHVwTWVudTsKK307CisKK2VudW0geworICAgIENMT1NFLAorCisg
ICAgTEFTVF9TSUdOQUwKK307CisKK3N0YXRpYyBndWludCBzaWduYWxzW0xBU1RfU0lHTkFMXSA9
IHsgMCwgfTsKKworV0VCS0lUX0RFRklORV9UWVBFKFdlYktpdE9wdGlvbk1lbnUsIHdlYmtpdF9v
cHRpb25fbWVudSwgR19UWVBFX09CSkVDVCkKKworc3RhdGljIHZvaWQgd2Via2l0X29wdGlvbl9t
ZW51X2NsYXNzX2luaXQoV2ViS2l0T3B0aW9uTWVudUNsYXNzKiBvcHRpb25NZW51Q2xhc3MpCit7
CisgICAgLyoqCisgICAgICogV2ViS2l0T3B0aW9uTWVudTo6Y2xvc2U6CisgICAgICogQG1lbnU6
IHRoZSAjV2ViS2l0T3B0aW9uTWVudSBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKKyAg
ICAgKgorICAgICAqIEVtaXR0ZWQgd2hlbiBjbG9zaW5nIGEgI1dlYktpdE9wdGlvbk1lbnUgaXMg
cmVxdWVzdGVkLiBUaGlzIGNhbiBoYXBwZW4KKyAgICAgKiB3aGVuIHRoZSB1c2VyIGV4cGxpY2l0
bHkgY2FsbHMgd2Via2l0X29wdGlvbl9tZW51X2Nsb3NlKCkgb3Igd2hlbiB0aGUKKyAgICAgKiBl
bGVtZW50IGlzIGRldGFjaGVkIGZyb20gdGhlIGN1cnJlbnQgcGFnZS4KKyAgICAgKgorICAgICAq
IFNpbmNlOiAyLjE4CisgICAgICovCisgICAgc2lnbmFsc1tDTE9TRV0gPQorICAgICAgICBnX3Np
Z25hbF9uZXcoImNsb3NlIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKG9wdGlvbk1l
bnVDbGFzcyksCisgICAgICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgIDAs
IG51bGxwdHIsIG51bGxwdHIsCisgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9f
Vk9JRCwKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAwKTsKK30KKworV2ViS2l0T3B0aW9uTWVu
dSogd2Via2l0T3B0aW9uTWVudUNyZWF0ZShXZWJLaXRQb3B1cE1lbnUmIHBvcHVwTWVudSwgY29u
c3QgVmVjdG9yPFdlYlBvcHVwSXRlbT4mIGl0ZW1zLCBpbnQzMl90IHNlbGVjdGVkSW5kZXgpCit7
CisgICAgYXV0byogbWVudSA9IFdFQktJVF9PUFRJT05fTUVOVShnX29iamVjdF9uZXcoV0VCS0lU
X1RZUEVfT1BUSU9OX01FTlUsIG51bGxwdHIpKTsKKyAgICBtZW51LT5wcml2LT5wb3B1cE1lbnUg
PSAmcG9wdXBNZW51OworICAgIG1lbnUtPnByaXYtPml0ZW1zLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoaXRlbXMuc2l6ZSgpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGl0ZW0gOiBpdGVtcykKKyAg
ICAgICAgbWVudS0+cHJpdi0+aXRlbXMudW5jaGVja2VkQXBwZW5kKFdlYktpdE9wdGlvbk1lbnVJ
dGVtKGl0ZW0pKTsKKyAgICBpZiAoc2VsZWN0ZWRJbmRleCA+PSAwKSB7CisgICAgICAgIEFTU0VS
VChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2VsZWN0ZWRJbmRleCkgPCBtZW51LT5wcml2LT5pdGVt
cy5zaXplKCkpOworICAgICAgICBtZW51LT5wcml2LT5pdGVtc1tzZWxlY3RlZEluZGV4XS5pc1Nl
bGVjdGVkID0gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIG1lbnU7Cit9CisKKy8qKgorICogd2Vi
a2l0X29wdGlvbl9tZW51X2dldF9uX2l0ZW1zOgorICogQG1lbnU6IGEgI1dlYktpdE9wdGlvbk1l
bnUKKyAqCisgKiBHZXRzIHRoZSBsZW5ndGggb2YgdGhlIEBtZW51LgorICoKKyAqIFJldHVybnM6
IHRoZSBudW1iZXIgb2YgI1dlYktpdE9wdGlvbk1lbnVJdGVtPCEtLSAtLT5zIGluIEBtZW51Cisg
KgorICogU2luY2U6IDIuMTgKKyAqLworZ3VpbnQgd2Via2l0X29wdGlvbl9tZW51X2dldF9uX2l0
ZW1zKFdlYktpdE9wdGlvbk1lbnUqIG1lbnUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0lTX09QVElPTl9NRU5VKG1lbnUpLCAwKTsKKworICAgIHJldHVybiBtZW51LT5wcml2
LT5pdGVtcy5zaXplKCk7Cit9CisKKy8qKgorICogd2Via2l0X29wdGlvbl9tZW51X2dldF9pdGVt
OgorICogQG1lbnU6IGEgI1dlYktpdE9wdGlvbk1lbnUKKyAqIEBpbmRleDogdGhlIGluZGV4IG9m
IHRoZSBpdGVtCisgKgorICogUmV0dXJucyB0aGUgI1dlYktpdE9wdGlvbk1lbnVJdGVtIGF0IEBp
bmRleCBpbiBAbWVudS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IGEgI1dlYktp
dE9wdGlvbk1lbnVJdGVtIG9mIEBtZW51LgorICoKKyAqIFNpbmNlOiAyLjE4CisgKi8KK1dlYktp
dE9wdGlvbk1lbnVJdGVtKiB3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X2l0ZW0oV2ViS2l0T3B0aW9u
TWVudSogbWVudSwgZ3VpbnQgaW5kZXgpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0lTX09QVElPTl9NRU5VKG1lbnUpLCBudWxscHRyKTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChpbmRleCA8IG1lbnUtPnByaXYtPml0ZW1zLnNpemUoKSwgbnVsbHB0cik7CisKKyAgICBy
ZXR1cm4gJm1lbnUtPnByaXYtPml0ZW1zW2luZGV4XTsKK30KKworLyoqCisgKiB3ZWJraXRfb3B0
aW9uX21lbnVfc2VsZWN0X2l0ZW06CisgKiBAbWVudTogYSAjV2ViS2l0T3B0aW9uTWVudQorICog
QGluZGV4OiB0aGUgaW5kZXggb2YgdGhlIGl0ZW0KKyAqCisgKiBTZWxlY3RzIHRoZSAjV2ViS2l0
T3B0aW9uTWVudUl0ZW0gYXQgQGluZGV4IGluIEBtZW51LiBTZWxlY3RpbmcgYW4gaXRlbSBjaGFu
Z2VzIHRoZQorICogdGV4dCBzaG93biBieSB0aGUgY29tYm8gYnV0dG9uLCBidXQgaXQgZG9lc24n
dCBjaGFuZ2UgdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50LiBZb3UgbmVlZCB0bworICogZXhwbGlj
aXRseSBhY3RpdmF0ZSB0aGUgaXRlbSB3aXRoIHdlYmtpdF9vcHRpb25fbWVudV9zZWxlY3RfaXRl
bSgpIG9yIGNsb3NlIHRoZSBtZW51IHdpdGgKKyAqIHdlYmtpdF9vcHRpb25fbWVudV9jbG9zZSgp
IGluIHdoaWNoIGNhc2UgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtIHdpbGwgYmUgYWN0aXZh
dGVkLgorICoKKyAqIFNpbmNlOiAyLjE4CisgKi8KK3ZvaWQgd2Via2l0X29wdGlvbl9tZW51X3Nl
bGVjdF9pdGVtKFdlYktpdE9wdGlvbk1lbnUqIG1lbnUsIGd1aW50IGluZGV4KQoreworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX09QVElPTl9NRU5VKG1lbnUpKTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKGluZGV4IDwgbWVudS0+cHJpdi0+aXRlbXMuc2l6ZSgpKTsKKworICAgIG1lbnUt
PnByaXYtPnBvcHVwTWVudS0+c2VsZWN0SXRlbShpbmRleCk7Cit9CisKKy8qKgorICogd2Via2l0
X29wdGlvbl9tZW51X2FjdGl2YXRlX2l0ZW06CisgKiBAbWVudTogYSAjV2ViS2l0T3B0aW9uTWVu
dQorICogQGluZGV4OiB0aGUgaW5kZXggb2YgdGhlIGl0ZW0KKyAqCisgKiBBY3RpdmF0ZXMgdGhl
ICNXZWJLaXRPcHRpb25NZW51SXRlbSBhdCBAaW5kZXggaW4gQG1lbnUuIEFjdGl2YXRpbmcgYW4g
aXRlbSBjaGFuZ2VzIHRoZSB2YWx1ZQorICogb2YgdGhlIGVsZW1lbnQgbWFraW5nIHRoZSBpdGVt
IHRoZSBhY3RpdmUgb25lLiBZb3UgYXJlIGV4cGVjdGVkIHRvIGNsb3NlIHRoZSBtZW51IHdpdGgK
KyAqIHdlYmtpdF9vcHRpb25fbWVudV9jbG9zZSgpIGFmdGVyIGFjdGl2YXRpbmcgYW4gaXRlbSwg
Y2FsbGluZyB0aGlzIGZ1bmN0aW9uIGFnYWluIHdpbGwgaGF2ZSBubworICogZWZmZWN0LgorICoK
KyAqIFNpbmNlOiAyLjE4CisgKi8KK3ZvaWQgd2Via2l0X29wdGlvbl9tZW51X2FjdGl2YXRlX2l0
ZW0oV2ViS2l0T3B0aW9uTWVudSogbWVudSwgZ3VpbnQgaW5kZXgpCit7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfSVNfT1BUSU9OX01FTlUobWVudSkpOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoaW5kZXggPCBtZW51LT5wcml2LT5pdGVtcy5zaXplKCkpOworCisgICAgbWVudS0+cHJpdi0+
cG9wdXBNZW51LT5hY3RpdmF0ZUl0ZW0oaW5kZXgpOworfQorCisvKioKKyAqIHdlYmtpdF9vcHRp
b25fbWVudV9jbG9zZToKKyAqIEBtZW51OiBhICNXZWJLaXRPcHRpb25NZW51CisgKgorICogUmVx
dWVzdCB0byBjbG9zZSBhICNXZWJLaXRPcHRpb25NZW51LiBUaGlzIGVtaXRzIFdlYktpdE9wdGlv
bk1lbnU6OmNsb3NlIHNpZ25hbC4KKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGFsd2F5cyBiZSBj
YWxsZWQgdG8gbm90aWZ5IFdlYktpdCB0aGF0IHRoZSBhc3NvY2lhdGVkCisgKiBtZW51IGhhcyBi
ZWVuIGNsb3NlZC4gSWYgdGhlIG1lbnUgaXMgY2xvc2VkIGFuZCBuZWl0aGVyIHdlYmtpdF9vcHRp
b25fbWVudV9zZWxlY3RfaXRlbSgpCisgKiBub3Igd2Via2l0X29wdGlvbl9tZW51X2FjdGl2YXRl
X2l0ZW0oKSBoYXZlIGJlZW4gY2FsbGVkLCB0aGUgZWxlbWVudCB2YWx1ZSByZW1haW5zCisgKiB1
bmNoYW5nZWQuCisgKgorICogU2luY2U6IDIuMTgKKyAqLwordm9pZCB3ZWJraXRfb3B0aW9uX21l
bnVfY2xvc2UoV2ViS2l0T3B0aW9uTWVudSogbWVudSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9JU19PUFRJT05fTUVOVShtZW51KSk7CisKKyAgICBnX3NpZ25hbF9lbWl0KG1lbnUs
IHNpZ25hbHNbQ0xPU0VdLCAwLCBudWxscHRyKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdE9wdGlvbk1lbnVJdGVtLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdE9wdGlvbk1lbnVJdGVtLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi42ODg4MDg4NTM2ZDIxNTQ3NDQwZWE1ZWMyNzg3ZmVkOGU3NjViMjVlCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0T3B0aW9uTWVu
dUl0ZW0uY3BwCkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEln
YWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRPcHRpb25NZW51
SXRlbS5oIgorCisjaW5jbHVkZSAiV2ViS2l0T3B0aW9uTWVudUl0ZW1Qcml2YXRlLmgiCisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKKy8qKgorICogU0VDVElPTjogV2ViS2l0T3B0aW9uTWVu
dUl0ZW0KKyAqIEBTaG9ydF9kZXNjcmlwdGlvbjogT25lIGl0ZW0gb2YgdGhlICNXZWJLaXRPcHRp
b25NZW51CisgKiBAVGl0bGU6IFdlYktpdE9wdGlvbk1lbnVJdGVtCisgKgorICogVGhlICNXZWJL
aXRPcHRpb25NZW51IGlzIGNvbXBvc2VkIG9mIFdlYktpdE9wdGlvbk1lbnVJdGVtPCEtLSAtLT5z
LgorICogQSBXZWJLaXRPcHRpb25NZW51SXRlbSBhbHdheXMgaGFzIGEgbGFiZWwgYW5kIGNhbiBj
b250YWluIGEgdG9vbHRpcCB0ZXh0LgorICogWW91IGNhbiB1c2UgdGhlIFdlYktpdE9wdGlvbk1l
bnVJdGVtIG9mIGEgI1dlYktpdE9wdGlvbk1lbnUgdG8gYnVpbGQgeW91cgorICogb3duIG1lbnVz
LgorICoKKyAqIFNpbmNlOiAyLjE4CisgKi8KKworR19ERUZJTkVfQk9YRURfVFlQRShXZWJLaXRP
cHRpb25NZW51SXRlbSwgd2Via2l0X29wdGlvbl9tZW51X2l0ZW0sIHdlYmtpdF9vcHRpb25fbWVu
dV9pdGVtX2NvcHksIHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2ZyZWUpCisKKy8qKgorICogd2Vi
a2l0X29wdGlvbl9tZW51X2l0ZW1fY29weToKKyAqIEBpdGVtOiBhICNXZWJLaXRPcHRpb25NZW51
SXRlbQorICoKKyAqIE1ha2UgYSBjb3B5IG9mIHRoZSAjV2ViS2l0T3B0aW9uTWVudUl0ZW0uCisg
KgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBIGNvcHkgb2YgcGFzc2VkIGluICNXZWJL
aXRPcHRpb25NZW51SXRlbQorICoKKyAqIFNpbmNlOiAyLjE4CisgKi8KK1dlYktpdE9wdGlvbk1l
bnVJdGVtKiB3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9jb3B5KFdlYktpdE9wdGlvbk1lbnVJdGVt
KiBpdGVtKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGl0ZW0sIG51bGxwdHIpOworCisg
ICAgYXV0byogY29weUl0ZW0gPSBzdGF0aWNfY2FzdDxXZWJLaXRPcHRpb25NZW51SXRlbSo+KGZh
c3RNYWxsb2Moc2l6ZW9mKFdlYktpdE9wdGlvbk1lbnVJdGVtKSkpOworICAgIG5ldyAoY29weUl0
ZW0pIFdlYktpdE9wdGlvbk1lbnVJdGVtKGl0ZW0pOworICAgIHJldHVybiBjb3B5SXRlbTsKK30K
KworLyoqCisgKiB3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9mcmVlOgorICogQGl0ZW06IEEgI1dl
YktpdE9wdGlvbk1lbnVJdGVtCisgKgorICogRnJlZSB0aGUgI1dlYktpdE9wdGlvbk1lbnVJdGVt
LgorICoKKyAqIFNpbmNlOiAyLjE4CisgKi8KK3ZvaWQgd2Via2l0X29wdGlvbl9tZW51X2l0ZW1f
ZnJlZShXZWJLaXRPcHRpb25NZW51SXRlbSogaXRlbSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWls
KGl0ZW0pOworCisgICAgaXRlbS0+fldlYktpdE9wdGlvbk1lbnVJdGVtKCk7CisgICAgZmFzdEZy
ZWUoaXRlbSk7Cit9CisKKy8qKgorICogd2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X2xhYmVs
OgorICogQGl0ZW06IGEgI1dlYktpdE9wdGlvbk1lbnVJdGVtCisgKgorICogR2V0IHRoZSBsYWJl
bCBvZiBhICNXZWJLaXRPcHRpb25NZW51SXRlbS4KKyAqCisgKiBSZXR1cm5zOiBUaGUgbGFiZWwg
b2YgQGl0ZW0uCisgKgorICogU2luY2U6IDIuMTgKKyAqLworY29uc3QgZ2NoYXIqIHdlYmtpdF9v
cHRpb25fbWVudV9pdGVtX2dldF9sYWJlbChXZWJLaXRPcHRpb25NZW51SXRlbSogaXRlbSkKK3sK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChpdGVtLCBudWxscHRyKTsKKworICAgIHJldHVybiBp
dGVtLT5sYWJlbC5kYXRhKCk7Cit9CisKKy8qKgorICogd2Via2l0X29wdGlvbl9tZW51X2l0ZW1f
Z2V0X3Rvb2x0aXA6CisgKiBAaXRlbTogYSAjV2ViS2l0T3B0aW9uTWVudUl0ZW0KKyAqCisgKiBH
ZXQgdGhlIHRvb2x0aXAgb2YgYSAjV2ViS2l0T3B0aW9uTWVudUl0ZW0uCisgKgorICogUmV0dXJu
czogVGhlIHRvb2x0aXAgb2YgQGl0ZW0sIG9yICVOVUxMLgorICoKKyAqIFNpbmNlOiAyLjE4Cisg
Ki8KK2NvbnN0IGdjaGFyKiB3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfdG9vbHRpcChXZWJL
aXRPcHRpb25NZW51SXRlbSogaXRlbSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChpdGVt
LCBudWxscHRyKTsKKworICAgIHJldHVybiBpdGVtLT50b29sdGlwLmlzTnVsbCgpID8gbnVsbHB0
ciA6IGl0ZW0tPnRvb2x0aXAuZGF0YSgpOworfQorCisvKioKKyAqIHdlYmtpdF9vcHRpb25fbWVu
dV9pdGVtX2lzX2dyb3VwX2xhYmVsOgorICogQGl0ZW06IGEgI1dlYktpdE9wdGlvbk1lbnVJdGVt
CisgKgorICogV2hldGhlciBhICNXZWJLaXRPcHRpb25NZW51SXRlbSBpcyBhIGdyb3VwIGxhYmVs
LgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBAaXRlbSBpcyBhIGdyb3VwIGxhYmVsIG9y
ICVGQUxTRSBvdGhlcndpc2UuCisgKgorICogU2luY2U6IDIuMTgKKyAqLworZ2Jvb2xlYW4gd2Vi
a2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfbGFiZWwoV2ViS2l0T3B0aW9uTWVudUl0ZW0q
IGl0ZW0pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoaXRlbSwgRkFMU0UpOworCisgICAg
cmV0dXJuIGl0ZW0tPmlzR3JvdXBMYWJlbDsKK30KKworLyoqCisgKiB3ZWJraXRfb3B0aW9uX21l
bnVfaXRlbV9pc19ncm91cF9jaGlsZDoKKyAqIEBpdGVtOiBhICNXZWJLaXRPcHRpb25NZW51SXRl
bQorICoKKyAqIFdoZXRoZXIgYSAjV2ViS2l0T3B0aW9uTWVudUl0ZW0gaXMgYSBncm91cCBjaGls
ZC4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgQGl0ZW0gaXMgYSBncm91cCBjaGlsZCBv
ciAlRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAqIFNpbmNlOiAyLjE4CisgKi8KK2dib29sZWFuIHdl
YmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2NoaWxkKFdlYktpdE9wdGlvbk1lbnVJdGVt
KiBpdGVtKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGl0ZW0sIEZBTFNFKTsKKworICAg
IHJldHVybiBpdGVtLT5pc0dyb3VwQ2hpbGQ7Cit9CisKKy8qKgorICogd2Via2l0X29wdGlvbl9t
ZW51X2l0ZW1faXNfZW5hYmxlZDoKKyAqIEBpdGVtOiBhICNXZWJLaXRPcHRpb25NZW51SXRlbQor
ICoKKyAqIFdoZXRoZXIgYSAjV2ViS2l0T3B0aW9uTWVudUl0ZW0gaXMgZW5hYmxlZC4KKyAqCisg
KiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgQGl0ZW0gaXMgZW5hYmxlZCBvciAlRkFMU0Ugb3RoZXJ3
aXNlLgorICoKKyAqIFNpbmNlOiAyLjE4CisgKi8KK2dib29sZWFuIHdlYmtpdF9vcHRpb25fbWVu
dV9pdGVtX2lzX2VuYWJsZWQoV2ViS2l0T3B0aW9uTWVudUl0ZW0qIGl0ZW0pCit7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoaXRlbSwgRkFMU0UpOworCisgICAgcmV0dXJuIGl0ZW0tPmlzRW5h
YmxlZDsKK30KKworLyoqCisgKiB3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19zZWxlY3RlZDoK
KyAqIEBpdGVtOiBhICNXZWJLaXRPcHRpb25NZW51SXRlbQorICoKKyAqIFdoZXRoZXIgYSAjV2Vi
S2l0T3B0aW9uTWVudUl0ZW0gaXMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBvbmUuCisgKgorICog
UmV0dXJuczogJVRSVUUgaWYgdGhlIEBpdGVtIGlzIHNlbGVjdGVkIG9yICVGQUxTRSBvdGhlcndp
c2UuCisgKgorICogU2luY2U6IDIuMTgKKyAqLworZ2Jvb2xlYW4gd2Via2l0X29wdGlvbl9tZW51
X2l0ZW1faXNfc2VsZWN0ZWQoV2ViS2l0T3B0aW9uTWVudUl0ZW0qIGl0ZW0pCit7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoaXRlbSwgRkFMU0UpOworCisgICAgcmV0dXJuIGl0ZW0tPmlzU2Vs
ZWN0ZWQ7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9X
ZWJLaXRPcHRpb25NZW51SXRlbVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9nbGliL1dlYktpdE9wdGlvbk1lbnVJdGVtUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI1ODVlN2I2
MmJhYjU2YmFlMzg4MWJiM2ZjYjdjY2I1N2YzYzkxZjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRPcHRpb25NZW51SXRlbVByaXZhdGUu
aApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViS2l0T3B0aW9uTWVudUl0ZW0uaCIKKyNpbmNs
dWRlICJXZWJQb3B1cEl0ZW0uaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3N0
cnVjdCBfV2ViS2l0T3B0aW9uTWVudUl0ZW0geworICAgIF9XZWJLaXRPcHRpb25NZW51SXRlbSgp
ID0gZGVmYXVsdDsKKworICAgIF9XZWJLaXRPcHRpb25NZW51SXRlbShjb25zdCBXZWJLaXQ6Oldl
YlBvcHVwSXRlbSYgaXRlbSkKKyAgICAgICAgOiBsYWJlbChpdGVtLm1fdGV4dC5zdHJpcFdoaXRl
U3BhY2UoKS51dGY4KCkpCisgICAgICAgICwgaXNHcm91cExhYmVsKGl0ZW0ubV9pc0xhYmVsKQor
ICAgICAgICAsIGlzR3JvdXBDaGlsZChpdGVtLm1fdGV4dC5zdGFydHNXaXRoKCIgICAgIikpCisg
ICAgICAgICwgaXNFbmFibGVkKGl0ZW0ubV9pc0VuYWJsZWQpCisgICAgeworICAgICAgICBpZiAo
IWl0ZW0ubV90b29sVGlwLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHRvb2x0aXAgPSBpdGVtLm1f
dG9vbFRpcC51dGY4KCk7CisgICAgfQorCisgICAgZXhwbGljaXQgX1dlYktpdE9wdGlvbk1lbnVJ
dGVtKF9XZWJLaXRPcHRpb25NZW51SXRlbSogb3RoZXIpCisgICAgICAgIDogbGFiZWwob3RoZXIt
PmxhYmVsKQorICAgICAgICAsIHRvb2x0aXAob3RoZXItPnRvb2x0aXApCisgICAgICAgICwgaXNH
cm91cExhYmVsKG90aGVyLT5pc0dyb3VwTGFiZWwpCisgICAgICAgICwgaXNHcm91cENoaWxkKG90
aGVyLT5pc0dyb3VwQ2hpbGQpCisgICAgICAgICwgaXNFbmFibGVkKG90aGVyLT5pc0VuYWJsZWQp
CisgICAgICAgICwgaXNTZWxlY3RlZChvdGhlci0+aXNTZWxlY3RlZCkKKyAgICB7CisgICAgfQor
CisgICAgQ1N0cmluZyBsYWJlbDsKKyAgICBDU3RyaW5nIHRvb2x0aXA7CisgICAgYm9vbCBpc0dy
b3VwTGFiZWwgeyBmYWxzZSB9OworICAgIGJvb2wgaXNHcm91cENoaWxkIHsgZmFsc2UgfTsKKyAg
ICBib29sIGlzRW5hYmxlZCB7IHRydWUgfTsKKyAgICBib29sIGlzU2VsZWN0ZWQgeyBmYWxzZSB9
OworfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktp
dE9wdGlvbk1lbnVQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9X
ZWJLaXRPcHRpb25NZW51UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJkNGI4YzZhNDVjOWZmNDZhNTIx
MzUwMmU4YTA1M2U0MTExMThmOWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRPcHRpb25NZW51UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMjUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJXZWJLaXRPcHRpb25NZW51LmgiCisjaW5jbHVkZSAiV2ViS2l0UG9wdXBNZW51
LmgiCisKK1dlYktpdE9wdGlvbk1lbnUqIHdlYmtpdE9wdGlvbk1lbnVDcmVhdGUoV2ViS2l0OjpX
ZWJLaXRQb3B1cE1lbnUmLCBjb25zdCBWZWN0b3I8V2ViS2l0OjpXZWJQb3B1cEl0ZW0+JiwgaW50
MzJfdCBzZWxlY3RlZEluZGV4KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdFdlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L2dsaWIvV2ViS2l0V2ViVmlldy5jcHAKaW5kZXggZjlkYTFiYjU5NDVkZDBhYjhkY2RlMWZlZTYw
YzE4MDFhNDI0NTUzZC4uODgyMjFkMWZjMThjZDYwZmYzY2MyZjk5YjQxNzQ4NDc4MGFjN2QyNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmll
dy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmll
dy5jcHAKQEAgLTE2NCw5ICsxNjQsOCBAQCBlbnVtIHsKIAogI2lmIFBMQVRGT1JNKEdUSykKICAg
ICBSVU5fQ09MT1JfQ0hPT1NFUiwKLQotICAgIFNIT1dfT1BUSU9OX01FTlUsCiAjZW5kaWYKKyAg
ICBTSE9XX09QVElPTl9NRU5VLAogCiAgICAgVVNFUl9NRVNTQUdFX1JFQ0VJVkVELAogCkBAIC0y
MTMyLDYgKzIxMzEsMzcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQo
V2ViS2l0V2ViVmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiAgICAgICAgIEdES19UWVBFX1JFQ1RB
TkdMRSB8IEdfU0lHTkFMX1RZUEVfU1RBVElDX1NDT1BFKTsKICNlbmRpZiAvLyBQTEFURk9STShH
VEspCiAKKyNpZiBQTEFURk9STShXUEUpCisgICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6
c2hvdy1vcHRpb24tbWVudToKKyAgICAgKiBAd2ViX3ZpZXc6IHRoZSAjV2ViS2l0V2ViVmlldyBv
biB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKKyAgICAgKiBAbWVudTogdGhlICNXZWJLaXRP
cHRpb25NZW51CisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gYSBz
ZWxlY3QgZWxlbWVudCBpbiBAd2ViX3ZpZXcgbmVlZHMgdG8gZGlzcGxheSBhCisgICAgICogZHJv
cGRvd24gbWVudS4gVGhpcyBzaWduYWwgY2FuIGJlIHVzZWQgdG8gc2hvdyBhIGN1c3RvbSBtZW51
LCB1c2luZyBAbWVudSB0byBnZXQKKyAgICAgKiB0aGUgZGV0YWlscyBvZiBhbGwgaXRlbXMgdGhh
dCBzaG91bGQgYmUgZGlzcGxheWVkLiBUaGUgYXJlYSBvZiB0aGUgZWxlbWVudCBpbiB0aGUKKyAg
ICAgKiAjV2ViS2l0V2ViVmlldyBpcyBnaXZlbiBhcyBAcmVjdGFuZ2xlIHBhcmFtZXRlciwgaXQg
Y2FuIGJlIHVzZWQgdG8gcG9zaXRpb24gdGhlCisgICAgICogbWVudS4KKyAgICAgKiBUbyBoYW5k
bGUgdGhpcyBzaWduYWwgYXN5bmNocm9ub3VzbHkgeW91IHNob3VsZCBrZWVwIGEgcmVmIG9mIHRo
ZSBAbWVudS4KKyAgICAgKgorICAgICAqIFRoZSBkZWZhdWx0IHNpZ25hbCBoYW5kbGVyIHdpbGwg
cG9wIHVwIGEgI0d0a01lbnUuCisgICAgICoKKyAgICAgKiBSZXR1cm5zOiAlVFJVRSB0byBzdG9w
IG90aGVyIGhhbmRsZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3IgdGhlIGV2ZW50LgorICAgICAq
ICAgJUZBTFNFIHRvIHByb3BhZ2F0ZSB0aGUgZXZlbnQgZnVydGhlci4KKyAgICAgKgorICAgICAq
IFNpbmNlOiAyLjI4CisgICAgICovCisgICAgc2lnbmFsc1tTSE9XX09QVElPTl9NRU5VXSA9IGdf
c2lnbmFsX25ldygKKyAgICAgICAgInNob3ctb3B0aW9uLW1lbnUiLAorICAgICAgICBHX1RZUEVf
RlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAg
ICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZpZXdDbGFzcywgc2hvd19vcHRpb25fbWVu
dSksCisgICAgICAgIGdfc2lnbmFsX2FjY3VtdWxhdG9yX3RydWVfaGFuZGxlZCwgbnVsbHB0ciwK
KyAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX2dlbmVyaWMsCisgICAgICAgIEdfVFlQRV9CT09M
RUFOLCAxLAorICAgICAgICBXRUJLSVRfVFlQRV9PUFRJT05fTUVOVSk7CisjZW5kaWYKKwogICAg
IC8qKgogICAgICAqIFdlYktpdFdlYlZpZXc6OnVzZXItbWVzc2FnZS1yZWNlaXZlZDoKICAgICAg
KiBAd2ViX3ZpZXc6IHRoZSAjV2ViS2l0V2ViVmlldyBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVt
aXR0ZWQKQEAgLTIxNzUsNyArMjIwNSw3IEBAIHZvaWQgd2Via2l0V2ViVmlld0NyZWF0ZVBhZ2Uo
V2ViS2l0V2ViVmlldyogd2ViVmlldywgUmVmPEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24+CiAjaWYg
UExBVEZPUk0oR1RLKQogICAgIHdlYmtpdFdlYlZpZXdCYXNlQ3JlYXRlV2ViUGFnZShXRUJLSVRf
V0VCX1ZJRVdfQkFTRSh3ZWJWaWV3KSwgV1RGTW92ZShjb25maWd1cmF0aW9uKSk7CiAjZWxpZiBQ
TEFURk9STShXUEUpCi0gICAgd2ViVmlldy0+cHJpdi0+dmlldy5yZXNldChXS1dQRTo6Vmlldzo6
Y3JlYXRlKHdlYmtpdF93ZWJfdmlld19iYWNrZW5kX2dldF93cGVfYmFja2VuZCh3ZWJWaWV3LT5w
cml2LT5iYWNrZW5kLmdldCgpKSwgY29uZmlndXJhdGlvbi5nZXQoKSkpOworICAgIHdlYlZpZXct
PnByaXYtPnZpZXcucmVzZXQoV0tXUEU6OlZpZXc6OmNyZWF0ZSh3ZWJWaWV3LCB3ZWJraXRfd2Vi
X3ZpZXdfYmFja2VuZF9nZXRfd3BlX2JhY2tlbmQod2ViVmlldy0+cHJpdi0+YmFja2VuZC5nZXQo
KSksIGNvbmZpZ3VyYXRpb24uZ2V0KCkpKTsKICNlbmRpZgogfQogCkBAIC0yNzIwLDYgKzI3NTAs
MTUgQEAgdm9pZCB3ZWJraXRXZWJWaWV3RGVsZXRlU3Vycm91bmRpbmcoV2ViS2l0V2ViVmlldyog
d2ViVmlldywgaW50IG9mZnNldCwgdW5zaWduZWQKICAgICBnZXRQYWdlKHdlYlZpZXcpLmRlbGV0
ZVN1cnJvdW5kaW5nKG9mZnNldCwgY2hhcmFjdGVyQ291bnQpOwogfQogCisjaWYgUExBVEZPUk0o
V1BFKQorYm9vbCB3ZWJraXRXZWJWaWV3U2hvd09wdGlvbk1lbnUoV2ViS2l0V2ViVmlldyogd2Vi
VmlldywgV2ViS2l0T3B0aW9uTWVudSogbWVudSkKK3sKKyAgICBnYm9vbGVhbiBoYW5kbGVkOwor
ICAgIGdfc2lnbmFsX2VtaXQod2ViVmlldywgc2lnbmFsc1tTSE9XX09QVElPTl9NRU5VXSwgMCwg
bWVudSwgJmhhbmRsZWQpOworICAgIHJldHVybiBoYW5kbGVkOworfQorI2VuZGlmCisKICNpZiBQ
TEFURk9STShXUEUpCiAvKioKICAqIHdlYmtpdF93ZWJfdmlld19nZXRfYmFja2VuZDoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXdQcml2
YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3UHJp
dmF0ZS5oCmluZGV4IDY3ZjY5ODIxZWE3ZjYyYzdiMDNmNTEzZTM4NzM0ZWNkYjljN2I1MzkuLjlh
ODY0Mzk2MzExNTU3MGYzMmQ2YTBmNWQ2NTMxYWY4N2M1MGZmMjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXdQcml2YXRlLmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlld1ByaXZhdGUuaApA
QCAtMTAwLDYgKzEwMCwxMCBAQCBib29sIHdlYmtpdFdlYlZpZXdFbWl0UnVuQ29sb3JDaG9vc2Vy
KFdlYktpdFdlYlZpZXcqLCBXZWJLaXRDb2xvckNob29zZXJSZXF1ZXN0KgogYm9vbCB3ZWJraXRX
ZWJWaWV3U2hvd09wdGlvbk1lbnUoV2ViS2l0V2ViVmlldyosIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmLCBXZWJLaXRPcHRpb25NZW51KiwgY29uc3QgR2RrRXZlbnQqKTsKICNlbmRpZgogCisjaWYg
UExBVEZPUk0oV1BFKQorYm9vbCB3ZWJraXRXZWJWaWV3U2hvd09wdGlvbk1lbnUoV2ViS2l0V2Vi
VmlldyosIFdlYktpdE9wdGlvbk1lbnUqKTsKKyNlbmRpZgorCiBnYm9vbGVhbiB3ZWJraXRXZWJW
aWV3QXV0aGVudGljYXRlKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVl
c3QqKTsKIGdib29sZWFuIHdlYmtpdFdlYlZpZXdTY3JpcHREaWFsb2coV2ViS2l0V2ViVmlldyos
IFdlYktpdFNjcmlwdERpYWxvZyopOwogZ2Jvb2xlYW4gd2Via2l0V2ViVmlld1J1bkZpbGVDaG9v
c2VyKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0T3B0aW9uTWVudS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE9wdGlvbk1lbnUuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjFlZWRiYTY3MTg5MWQyZDRjYjA5OTU4NTRh
ODU5NTg5NGExMjI5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0T3B0aW9uTWVudS5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwxODYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NyBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViS2l0T3B0aW9u
TWVudS5oIgotCi0jaW5jbHVkZSAiV2ViS2l0T3B0aW9uTWVudUl0ZW1Qcml2YXRlLmgiCi0jaW5j
bHVkZSAiV2ViS2l0T3B0aW9uTWVudVByaXZhdGUuaCIKLSNpbmNsdWRlIDx3dGYvZ2xpYi9XVEZH
VHlwZS5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotCi0vKioKLSAqIFNFQ1RJT046IFdl
YktpdE9wdGlvbk1lbnUKLSAqIEBTaG9ydF9kZXNjcmlwdGlvbjoKLSAqIEBUaXRsZTogV2ViS2l0
T3B0aW9uTWVudQotICoKLSAqIFdlYktpdE9wdGlvbk1lbnUgcmVwcmVzZW50cyB0aGUgZHJvcGRv
d24gbWVudSBvZiBhIHNlbGVjdCBlbGVtZW50IGluIGEgI1dlYktpdFdlYlZpZXcuCi0gKgotICog
V2hlbiBhIHNlbGVjdCBlbGVtZW50IGluIGEgI1dlYktpdFdlYlZpZXcgbmVlZHMgdG8gZGlzcGxh
eSBhIGRyb3Bkb3duIG1lbnUsIHRoZSBzaWduYWwKLSAqICNXZWJLaXRXZWJWaWV3OjpzaG93LW9w
dGlvbi1tZW51IGlzIGVtaXR0ZWQsIHByb3ZpZGluZyBhIFdlYktpdE9wdGlvbk1lbnUgd2l0aCB0
aGUKLSAqICNXZWJLaXRPcHRpb25NZW51SXRlbTwhLS0gLS0+cyB0aGF0IHNob3VsZCBiZSBkaXNw
bGF5ZWQuCi0gKgotICogU2luY2U6IDIuMTgKLSAqLwotCi1zdHJ1Y3QgX1dlYktpdE9wdGlvbk1l
bnVQcml2YXRlIHsKLSAgICBWZWN0b3I8V2ViS2l0T3B0aW9uTWVudUl0ZW0+IGl0ZW1zOwotICAg
IFJlZlB0cjxXZWJLaXRQb3B1cE1lbnU+IHBvcHVwTWVudTsKLX07Ci0KLWVudW0gewotICAgIENM
T1NFLAotCi0gICAgTEFTVF9TSUdOQUwKLX07Ci0KLXN0YXRpYyBndWludCBzaWduYWxzW0xBU1Rf
U0lHTkFMXSA9IHsgMCwgfTsKLQotV0VCS0lUX0RFRklORV9UWVBFKFdlYktpdE9wdGlvbk1lbnUs
IHdlYmtpdF9vcHRpb25fbWVudSwgR19UWVBFX09CSkVDVCkKLQotc3RhdGljIHZvaWQgd2Via2l0
X29wdGlvbl9tZW51X2NsYXNzX2luaXQoV2ViS2l0T3B0aW9uTWVudUNsYXNzKiBvcHRpb25NZW51
Q2xhc3MpCi17Ci0gICAgLyoqCi0gICAgICogV2ViS2l0T3B0aW9uTWVudTo6Y2xvc2U6Ci0gICAg
ICogQG1lbnU6IHRoZSAjV2ViS2l0T3B0aW9uTWVudSBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVt
aXR0ZWQKLSAgICAgKgotICAgICAqIEVtaXR0ZWQgd2hlbiBjbG9zaW5nIGEgI1dlYktpdE9wdGlv
bk1lbnUgaXMgcmVxdWVzdGVkLiBUaGlzIGNhbiBoYXBwZW4KLSAgICAgKiB3aGVuIHRoZSB1c2Vy
IGV4cGxpY2l0bHkgY2FsbHMgd2Via2l0X29wdGlvbl9tZW51X2Nsb3NlKCkgb3Igd2hlbiB0aGUK
LSAgICAgKiBlbGVtZW50IGlzIGRldGFjaGVkIGZyb20gdGhlIGN1cnJlbnQgcGFnZS4KLSAgICAg
KgotICAgICAqIFNpbmNlOiAyLjE4Ci0gICAgICovCi0gICAgc2lnbmFsc1tDTE9TRV0gPQotICAg
ICAgICBnX3NpZ25hbF9uZXcoImNsb3NlIiwKLSAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNT
KG9wdGlvbk1lbnVDbGFzcyksCi0gICAgICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKLSAgICAg
ICAgICAgIDAsIG51bGxwdHIsIG51bGxwdHIsCi0gICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNo
YWxfVk9JRF9fVk9JRCwKLSAgICAgICAgICAgIEdfVFlQRV9OT05FLCAwKTsKLX0KLQotV2ViS2l0
T3B0aW9uTWVudSogd2Via2l0T3B0aW9uTWVudUNyZWF0ZShXZWJLaXRQb3B1cE1lbnUmIHBvcHVw
TWVudSwgY29uc3QgVmVjdG9yPFdlYlBvcHVwSXRlbT4mIGl0ZW1zLCBpbnQzMl90IHNlbGVjdGVk
SW5kZXgpCi17Ci0gICAgYXV0byogbWVudSA9IFdFQktJVF9PUFRJT05fTUVOVShnX29iamVjdF9u
ZXcoV0VCS0lUX1RZUEVfT1BUSU9OX01FTlUsIG51bGxwdHIpKTsKLSAgICBtZW51LT5wcml2LT5w
b3B1cE1lbnUgPSAmcG9wdXBNZW51OwotICAgIG1lbnUtPnByaXYtPml0ZW1zLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoaXRlbXMuc2l6ZSgpKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGl0ZW0gOiBp
dGVtcykKLSAgICAgICAgbWVudS0+cHJpdi0+aXRlbXMudW5jaGVja2VkQXBwZW5kKFdlYktpdE9w
dGlvbk1lbnVJdGVtKGl0ZW0pKTsKLSAgICBpZiAoc2VsZWN0ZWRJbmRleCA+PSAwKSB7Ci0gICAg
ICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2VsZWN0ZWRJbmRleCkgPCBtZW51LT5w
cml2LT5pdGVtcy5zaXplKCkpOwotICAgICAgICBtZW51LT5wcml2LT5pdGVtc1tzZWxlY3RlZElu
ZGV4XS5pc1NlbGVjdGVkID0gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIG1lbnU7Ci19Ci0KLS8q
KgotICogd2Via2l0X29wdGlvbl9tZW51X2dldF9uX2l0ZW1zOgotICogQG1lbnU6IGEgI1dlYktp
dE9wdGlvbk1lbnUKLSAqCi0gKiBHZXRzIHRoZSBsZW5ndGggb2YgdGhlIEBtZW51LgotICoKLSAq
IFJldHVybnM6IHRoZSBudW1iZXIgb2YgI1dlYktpdE9wdGlvbk1lbnVJdGVtPCEtLSAtLT5zIGlu
IEBtZW51Ci0gKgotICogU2luY2U6IDIuMTgKLSAqLwotZ3VpbnQgd2Via2l0X29wdGlvbl9tZW51
X2dldF9uX2l0ZW1zKFdlYktpdE9wdGlvbk1lbnUqIG1lbnUpCi17Ci0gICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0lTX09QVElPTl9NRU5VKG1lbnUpLCAwKTsKLQotICAgIHJldHVybiBt
ZW51LT5wcml2LT5pdGVtcy5zaXplKCk7Ci19Ci0KLS8qKgotICogd2Via2l0X29wdGlvbl9tZW51
X2dldF9pdGVtOgotICogQG1lbnU6IGEgI1dlYktpdE9wdGlvbk1lbnUKLSAqIEBpbmRleDogdGhl
IGluZGV4IG9mIHRoZSBpdGVtCi0gKgotICogUmV0dXJucyB0aGUgI1dlYktpdE9wdGlvbk1lbnVJ
dGVtIGF0IEBpbmRleCBpbiBAbWVudS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6
IGEgI1dlYktpdE9wdGlvbk1lbnVJdGVtIG9mIEBtZW51LgotICoKLSAqIFNpbmNlOiAyLjE4Ci0g
Ki8KLVdlYktpdE9wdGlvbk1lbnVJdGVtKiB3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X2l0ZW0oV2Vi
S2l0T3B0aW9uTWVudSogbWVudSwgZ3VpbnQgaW5kZXgpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0lTX09QVElPTl9NRU5VKG1lbnUpLCBudWxscHRyKTsKLSAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChpbmRleCA8IG1lbnUtPnByaXYtPml0ZW1zLnNpemUoKSwgbnVsbHB0cik7
Ci0KLSAgICByZXR1cm4gJm1lbnUtPnByaXYtPml0ZW1zW2luZGV4XTsKLX0KLQotLyoqCi0gKiB3
ZWJraXRfb3B0aW9uX21lbnVfc2VsZWN0X2l0ZW06Ci0gKiBAbWVudTogYSAjV2ViS2l0T3B0aW9u
TWVudQotICogQGluZGV4OiB0aGUgaW5kZXggb2YgdGhlIGl0ZW0KLSAqCi0gKiBTZWxlY3RzIHRo
ZSAjV2ViS2l0T3B0aW9uTWVudUl0ZW0gYXQgQGluZGV4IGluIEBtZW51LiBTZWxlY3RpbmcgYW4g
aXRlbSBjaGFuZ2VzIHRoZQotICogdGV4dCBzaG93biBieSB0aGUgY29tYm8gYnV0dG9uLCBidXQg
aXQgZG9lc24ndCBjaGFuZ2UgdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50LiBZb3UgbmVlZCB0bwot
ICogZXhwbGljaXRseSBhY3RpdmF0ZSB0aGUgaXRlbSB3aXRoIHdlYmtpdF9vcHRpb25fbWVudV9z
ZWxlY3RfaXRlbSgpIG9yIGNsb3NlIHRoZSBtZW51IHdpdGgKLSAqIHdlYmtpdF9vcHRpb25fbWVu
dV9jbG9zZSgpIGluIHdoaWNoIGNhc2UgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtIHdpbGwg
YmUgYWN0aXZhdGVkLgotICoKLSAqIFNpbmNlOiAyLjE4Ci0gKi8KLXZvaWQgd2Via2l0X29wdGlv
bl9tZW51X3NlbGVjdF9pdGVtKFdlYktpdE9wdGlvbk1lbnUqIG1lbnUsIGd1aW50IGluZGV4KQot
ewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX09QVElPTl9NRU5VKG1lbnUpKTsKLSAg
ICBnX3JldHVybl9pZl9mYWlsKGluZGV4IDwgbWVudS0+cHJpdi0+aXRlbXMuc2l6ZSgpKTsKLQot
ICAgIG1lbnUtPnByaXYtPnBvcHVwTWVudS0+c2VsZWN0SXRlbShpbmRleCk7Ci19Ci0KLS8qKgot
ICogd2Via2l0X29wdGlvbl9tZW51X2FjdGl2YXRlX2l0ZW06Ci0gKiBAbWVudTogYSAjV2ViS2l0
T3B0aW9uTWVudQotICogQGluZGV4OiB0aGUgaW5kZXggb2YgdGhlIGl0ZW0KLSAqCi0gKiBBY3Rp
dmF0ZXMgdGhlICNXZWJLaXRPcHRpb25NZW51SXRlbSBhdCBAaW5kZXggaW4gQG1lbnUuIEFjdGl2
YXRpbmcgYW4gaXRlbSBjaGFuZ2VzIHRoZSB2YWx1ZQotICogb2YgdGhlIGVsZW1lbnQgbWFraW5n
IHRoZSBpdGVtIHRoZSBhY3RpdmUgb25lLiBZb3UgYXJlIGV4cGVjdGVkIHRvIGNsb3NlIHRoZSBt
ZW51IHdpdGgKLSAqIHdlYmtpdF9vcHRpb25fbWVudV9jbG9zZSgpIGFmdGVyIGFjdGl2YXRpbmcg
YW4gaXRlbSwgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGFnYWluIHdpbGwgaGF2ZSBubwotICogZWZm
ZWN0LgotICoKLSAqIFNpbmNlOiAyLjE4Ci0gKi8KLXZvaWQgd2Via2l0X29wdGlvbl9tZW51X2Fj
dGl2YXRlX2l0ZW0oV2ViS2l0T3B0aW9uTWVudSogbWVudSwgZ3VpbnQgaW5kZXgpCi17Ci0gICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfT1BUSU9OX01FTlUobWVudSkpOwotICAgIGdfcmV0
dXJuX2lmX2ZhaWwoaW5kZXggPCBtZW51LT5wcml2LT5pdGVtcy5zaXplKCkpOwotCi0gICAgbWVu
dS0+cHJpdi0+cG9wdXBNZW51LT5hY3RpdmF0ZUl0ZW0oaW5kZXgpOwotfQotCi0vKioKLSAqIHdl
YmtpdF9vcHRpb25fbWVudV9jbG9zZToKLSAqIEBtZW51OiBhICNXZWJLaXRPcHRpb25NZW51Ci0g
KgotICogUmVxdWVzdCB0byBjbG9zZSBhICNXZWJLaXRPcHRpb25NZW51LiBUaGlzIGVtaXRzIFdl
YktpdE9wdGlvbk1lbnU6OmNsb3NlIHNpZ25hbC4KLSAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGFs
d2F5cyBiZSBjYWxsZWQgdG8gbm90aWZ5IFdlYktpdCB0aGF0IHRoZSBhc3NvY2lhdGVkCi0gKiBt
ZW51IGhhcyBiZWVuIGNsb3NlZC4gSWYgdGhlIG1lbnUgaXMgY2xvc2VkIGFuZCBuZWl0aGVyIHdl
YmtpdF9vcHRpb25fbWVudV9zZWxlY3RfaXRlbSgpCi0gKiBub3Igd2Via2l0X29wdGlvbl9tZW51
X2FjdGl2YXRlX2l0ZW0oKSBoYXZlIGJlZW4gY2FsbGVkLCB0aGUgZWxlbWVudCB2YWx1ZSByZW1h
aW5zCi0gKiB1bmNoYW5nZWQuCi0gKgotICogU2luY2U6IDIuMTgKLSAqLwotdm9pZCB3ZWJraXRf
b3B0aW9uX21lbnVfY2xvc2UoV2ViS2l0T3B0aW9uTWVudSogbWVudSkKLXsKLSAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9JU19PUFRJT05fTUVOVShtZW51KSk7Ci0KLSAgICBnX3NpZ25hbF9l
bWl0KG1lbnUsIHNpZ25hbHNbQ0xPU0VdLCAwLCBudWxscHRyKTsKLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0T3B0aW9uTWVudUl0ZW0uY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRPcHRpb25NZW51SXRlbS5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4ODgwODg1MzZkMjE1NDc0NDBlYTVlYzI3
ODdmZWQ4ZTc2NWIyNWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRPcHRpb25NZW51SXRl
bS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNyBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViS2l0
T3B0aW9uTWVudUl0ZW0uaCIKLQotI2luY2x1ZGUgIldlYktpdE9wdGlvbk1lbnVJdGVtUHJpdmF0
ZS5oIgotCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotCi0vKioKLSAqIFNFQ1RJT046IFdlYktp
dE9wdGlvbk1lbnVJdGVtCi0gKiBAU2hvcnRfZGVzY3JpcHRpb246IE9uZSBpdGVtIG9mIHRoZSAj
V2ViS2l0T3B0aW9uTWVudQotICogQFRpdGxlOiBXZWJLaXRPcHRpb25NZW51SXRlbQotICoKLSAq
IFRoZSAjV2ViS2l0T3B0aW9uTWVudSBpcyBjb21wb3NlZCBvZiBXZWJLaXRPcHRpb25NZW51SXRl
bTwhLS0gLS0+cy4KLSAqIEEgV2ViS2l0T3B0aW9uTWVudUl0ZW0gYWx3YXlzIGhhcyBhIGxhYmVs
IGFuZCBjYW4gY29udGFpbiBhIHRvb2x0aXAgdGV4dC4KLSAqIFlvdSBjYW4gdXNlIHRoZSBXZWJL
aXRPcHRpb25NZW51SXRlbSBvZiBhICNXZWJLaXRPcHRpb25NZW51IHRvIGJ1aWxkIHlvdXIKLSAq
IG93biBtZW51cy4KLSAqCi0gKiBTaW5jZTogMi4xOAotICovCi0KLUdfREVGSU5FX0JPWEVEX1RZ
UEUoV2ViS2l0T3B0aW9uTWVudUl0ZW0sIHdlYmtpdF9vcHRpb25fbWVudV9pdGVtLCB3ZWJraXRf
b3B0aW9uX21lbnVfaXRlbV9jb3B5LCB3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9mcmVlKQotCi0v
KioKLSAqIHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2NvcHk6Ci0gKiBAaXRlbTogYSAjV2ViS2l0
T3B0aW9uTWVudUl0ZW0KLSAqCi0gKiBNYWtlIGEgY29weSBvZiB0aGUgI1dlYktpdE9wdGlvbk1l
bnVJdGVtLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSBjb3B5IG9mIHBhc3Nl
ZCBpbiAjV2ViS2l0T3B0aW9uTWVudUl0ZW0KLSAqCi0gKiBTaW5jZTogMi4xOAotICovCi1XZWJL
aXRPcHRpb25NZW51SXRlbSogd2Via2l0X29wdGlvbl9tZW51X2l0ZW1fY29weShXZWJLaXRPcHRp
b25NZW51SXRlbSogaXRlbSkKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChpdGVtLCBudWxs
cHRyKTsKLQotICAgIGF1dG8qIGNvcHlJdGVtID0gc3RhdGljX2Nhc3Q8V2ViS2l0T3B0aW9uTWVu
dUl0ZW0qPihmYXN0TWFsbG9jKHNpemVvZihXZWJLaXRPcHRpb25NZW51SXRlbSkpKTsKLSAgICBu
ZXcgKGNvcHlJdGVtKSBXZWJLaXRPcHRpb25NZW51SXRlbShpdGVtKTsKLSAgICByZXR1cm4gY29w
eUl0ZW07Ci19Ci0KLS8qKgotICogd2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZnJlZToKLSAqIEBp
dGVtOiBBICNXZWJLaXRPcHRpb25NZW51SXRlbQotICoKLSAqIEZyZWUgdGhlICNXZWJLaXRPcHRp
b25NZW51SXRlbS4KLSAqCi0gKiBTaW5jZTogMi4xOAotICovCi12b2lkIHdlYmtpdF9vcHRpb25f
bWVudV9pdGVtX2ZyZWUoV2ViS2l0T3B0aW9uTWVudUl0ZW0qIGl0ZW0pCi17Ci0gICAgZ19yZXR1
cm5faWZfZmFpbChpdGVtKTsKLQotICAgIGl0ZW0tPn5XZWJLaXRPcHRpb25NZW51SXRlbSgpOwot
ICAgIGZhc3RGcmVlKGl0ZW0pOwotfQotCi0vKioKLSAqIHdlYmtpdF9vcHRpb25fbWVudV9pdGVt
X2dldF9sYWJlbDoKLSAqIEBpdGVtOiBhICNXZWJLaXRPcHRpb25NZW51SXRlbQotICoKLSAqIEdl
dCB0aGUgbGFiZWwgb2YgYSAjV2ViS2l0T3B0aW9uTWVudUl0ZW0uCi0gKgotICogUmV0dXJuczog
VGhlIGxhYmVsIG9mIEBpdGVtLgotICoKLSAqIFNpbmNlOiAyLjE4Ci0gKi8KLWNvbnN0IGdjaGFy
KiB3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfbGFiZWwoV2ViS2l0T3B0aW9uTWVudUl0ZW0q
IGl0ZW0pCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoaXRlbSwgbnVsbHB0cik7Ci0KLSAg
ICByZXR1cm4gaXRlbS0+bGFiZWwuZGF0YSgpOwotfQotCi0vKioKLSAqIHdlYmtpdF9vcHRpb25f
bWVudV9pdGVtX2dldF90b29sdGlwOgotICogQGl0ZW06IGEgI1dlYktpdE9wdGlvbk1lbnVJdGVt
Ci0gKgotICogR2V0IHRoZSB0b29sdGlwIG9mIGEgI1dlYktpdE9wdGlvbk1lbnVJdGVtLgotICoK
LSAqIFJldHVybnM6IFRoZSB0b29sdGlwIG9mIEBpdGVtLCBvciAlTlVMTC4KLSAqCi0gKiBTaW5j
ZTogMi4xOAotICovCi1jb25zdCBnY2hhciogd2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X3Rv
b2x0aXAoV2ViS2l0T3B0aW9uTWVudUl0ZW0qIGl0ZW0pCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoaXRlbSwgbnVsbHB0cik7Ci0KLSAgICByZXR1cm4gaXRlbS0+dG9vbHRpcC5pc051bGwo
KSA/IG51bGxwdHIgOiBpdGVtLT50b29sdGlwLmRhdGEoKTsKLX0KLQotLyoqCi0gKiB3ZWJraXRf
b3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9sYWJlbDoKLSAqIEBpdGVtOiBhICNXZWJLaXRPcHRp
b25NZW51SXRlbQotICoKLSAqIFdoZXRoZXIgYSAjV2ViS2l0T3B0aW9uTWVudUl0ZW0gaXMgYSBn
cm91cCBsYWJlbC4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgQGl0ZW0gaXMgYSBncm91
cCBsYWJlbCBvciAlRkFMU0Ugb3RoZXJ3aXNlLgotICoKLSAqIFNpbmNlOiAyLjE4Ci0gKi8KLWdi
b29sZWFuIHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2xhYmVsKFdlYktpdE9wdGlv
bk1lbnVJdGVtKiBpdGVtKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGl0ZW0sIEZBTFNF
KTsKLQotICAgIHJldHVybiBpdGVtLT5pc0dyb3VwTGFiZWw7Ci19Ci0KLS8qKgotICogd2Via2l0
X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfY2hpbGQ6Ci0gKiBAaXRlbTogYSAjV2ViS2l0T3B0
aW9uTWVudUl0ZW0KLSAqCi0gKiBXaGV0aGVyIGEgI1dlYktpdE9wdGlvbk1lbnVJdGVtIGlzIGEg
Z3JvdXAgY2hpbGQuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIEBpdGVtIGlzIGEgZ3Jv
dXAgY2hpbGQgb3IgJUZBTFNFIG90aGVyd2lzZS4KLSAqCi0gKiBTaW5jZTogMi4xOAotICovCi1n
Ym9vbGVhbiB3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9jaGlsZChXZWJLaXRPcHRp
b25NZW51SXRlbSogaXRlbSkKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChpdGVtLCBGQUxT
RSk7Ci0KLSAgICByZXR1cm4gaXRlbS0+aXNHcm91cENoaWxkOwotfQotCi0vKioKLSAqIHdlYmtp
dF9vcHRpb25fbWVudV9pdGVtX2lzX2VuYWJsZWQ6Ci0gKiBAaXRlbTogYSAjV2ViS2l0T3B0aW9u
TWVudUl0ZW0KLSAqCi0gKiBXaGV0aGVyIGEgI1dlYktpdE9wdGlvbk1lbnVJdGVtIGlzIGVuYWJs
ZWQuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIEBpdGVtIGlzIGVuYWJsZWQgb3IgJUZB
TFNFIG90aGVyd2lzZS4KLSAqCi0gKiBTaW5jZTogMi4xOAotICovCi1nYm9vbGVhbiB3ZWJraXRf
b3B0aW9uX21lbnVfaXRlbV9pc19lbmFibGVkKFdlYktpdE9wdGlvbk1lbnVJdGVtKiBpdGVtKQot
ewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGl0ZW0sIEZBTFNFKTsKLQotICAgIHJldHVybiBp
dGVtLT5pc0VuYWJsZWQ7Ci19Ci0KLS8qKgotICogd2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNf
c2VsZWN0ZWQ6Ci0gKiBAaXRlbTogYSAjV2ViS2l0T3B0aW9uTWVudUl0ZW0KLSAqCi0gKiBXaGV0
aGVyIGEgI1dlYktpdE9wdGlvbk1lbnVJdGVtIGlzIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgb25l
LgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBAaXRlbSBpcyBzZWxlY3RlZCBvciAlRkFM
U0Ugb3RoZXJ3aXNlLgotICoKLSAqIFNpbmNlOiAyLjE4Ci0gKi8KLWdib29sZWFuIHdlYmtpdF9v
cHRpb25fbWVudV9pdGVtX2lzX3NlbGVjdGVkKFdlYktpdE9wdGlvbk1lbnVJdGVtKiBpdGVtKQot
ewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGl0ZW0sIEZBTFNFKTsKLQotICAgIHJldHVybiBp
dGVtLT5pc1NlbGVjdGVkOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRPcHRpb25NZW51SXRlbVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0T3B0aW9uTWVudUl0ZW1Qcml2YXRlLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGI1ODVlN2I2MmJhYjU2YmFlMzg4MWJiM2ZjYjdjY2I1N2YzYzkx
ZjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRPcHRpb25NZW51SXRlbVByaXZhdGUuaAor
KysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcg
SWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJXZWJLaXRPcHRpb25NZW51SXRl
bS5oIgotI2luY2x1ZGUgIldlYlBvcHVwSXRlbS5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KLQotc3RydWN0IF9XZWJLaXRPcHRpb25NZW51SXRlbSB7Ci0gICAgX1dlYktpdE9wdGlv
bk1lbnVJdGVtKCkgPSBkZWZhdWx0OwotCi0gICAgX1dlYktpdE9wdGlvbk1lbnVJdGVtKGNvbnN0
IFdlYktpdDo6V2ViUG9wdXBJdGVtJiBpdGVtKQotICAgICAgICA6IGxhYmVsKGl0ZW0ubV90ZXh0
LnN0cmlwV2hpdGVTcGFjZSgpLnV0ZjgoKSkKLSAgICAgICAgLCBpc0dyb3VwTGFiZWwoaXRlbS5t
X2lzTGFiZWwpCi0gICAgICAgICwgaXNHcm91cENoaWxkKGl0ZW0ubV90ZXh0LnN0YXJ0c1dpdGgo
IiAgICAiKSkKLSAgICAgICAgLCBpc0VuYWJsZWQoaXRlbS5tX2lzRW5hYmxlZCkKLSAgICB7Ci0g
ICAgICAgIGlmICghaXRlbS5tX3Rvb2xUaXAuaXNFbXB0eSgpKQotICAgICAgICAgICAgdG9vbHRp
cCA9IGl0ZW0ubV90b29sVGlwLnV0ZjgoKTsKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBfV2ViS2l0
T3B0aW9uTWVudUl0ZW0oX1dlYktpdE9wdGlvbk1lbnVJdGVtKiBvdGhlcikKLSAgICAgICAgOiBs
YWJlbChvdGhlci0+bGFiZWwpCi0gICAgICAgICwgdG9vbHRpcChvdGhlci0+dG9vbHRpcCkKLSAg
ICAgICAgLCBpc0dyb3VwTGFiZWwob3RoZXItPmlzR3JvdXBMYWJlbCkKLSAgICAgICAgLCBpc0dy
b3VwQ2hpbGQob3RoZXItPmlzR3JvdXBDaGlsZCkKLSAgICAgICAgLCBpc0VuYWJsZWQob3RoZXIt
PmlzRW5hYmxlZCkKLSAgICAgICAgLCBpc1NlbGVjdGVkKG90aGVyLT5pc1NlbGVjdGVkKQotICAg
IHsKLSAgICB9Ci0KLSAgICBDU3RyaW5nIGxhYmVsOwotICAgIENTdHJpbmcgdG9vbHRpcDsKLSAg
ICBib29sIGlzR3JvdXBMYWJlbCB7IGZhbHNlIH07Ci0gICAgYm9vbCBpc0dyb3VwQ2hpbGQgeyBm
YWxzZSB9OwotICAgIGJvb2wgaXNFbmFibGVkIHsgdHJ1ZSB9OwotICAgIGJvb2wgaXNTZWxlY3Rl
ZCB7IGZhbHNlIH07Ci19OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRPcHRpb25NZW51UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRPcHRpb25NZW51UHJpdmF0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAyZDRiOGM2YTQ1YzlmZjQ2YTUyMTM1MDJlOGEwNTNlNDExMTE4ZjliLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0T3B0aW9uTWVudVByaXZhdGUuaAorKysgL2Rldi9udWxsCkBA
IC0xLDI1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlICJXZWJLaXRPcHRpb25NZW51LmgiCi0jaW5jbHVkZSAiV2Vi
S2l0UG9wdXBNZW51LmgiCi0KLVdlYktpdE9wdGlvbk1lbnUqIHdlYmtpdE9wdGlvbk1lbnVDcmVh
dGUoV2ViS2l0OjpXZWJLaXRQb3B1cE1lbnUmLCBjb25zdCBWZWN0b3I8V2ViS2l0OjpXZWJQb3B1
cEl0ZW0+JiwgaW50MzJfdCBzZWxlY3RlZEluZGV4KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS93cGUvUGFnZUNsaWVudEltcGwuY3BwIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL3dwZS9QYWdlQ2xpZW50SW1wbC5jcHAKaW5kZXggNTkyZDczMzQ5OTk4NzEx
ZjE3YzE4MWMyZjBjZGVhNmI0YzRmMDY4My4uZDBkNmQwOGU4ZmE1ZDczYmNmMGYzMDE5ODM0OWE5
NDYwMmVlZjdjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9Q
YWdlQ2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9Q
YWdlQ2xpZW50SW1wbC5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJXUEVWaWV3Lmgi
CiAjaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVQcm94eS5oIgogI2luY2x1ZGUgIldlYkNvbnRleHRN
ZW51UHJveHlXUEUuaCIKKyNpbmNsdWRlICJXZWJLaXRQb3B1cE1lbnUuaCIKICNpbmNsdWRlIDxX
ZWJDb3JlL0FjdGl2aXR5U3RhdGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RPTVBhc3RlQWNjZXNz
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgpAQCAtMjUzLDkgKzI1NCw5
IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OndoZWVsRXZlbnRXYXNOb3RIYW5kbGVkQnlXZWJDb3Jl
KGNvbnN0IE5hdGl2ZVdlYldoZWVsRXZlbnQmCiB7CiB9CiAKLVJlZlB0cjxXZWJQb3B1cE1lbnVQ
cm94eT4gUGFnZUNsaWVudEltcGw6OmNyZWF0ZVBvcHVwTWVudVByb3h5KFdlYlBhZ2VQcm94eSYp
CitSZWZQdHI8V2ViUG9wdXBNZW51UHJveHk+IFBhZ2VDbGllbnRJbXBsOjpjcmVhdGVQb3B1cE1l
bnVQcm94eShXZWJQYWdlUHJveHkmIHBhZ2UpCiB7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAg
cmV0dXJuIFdlYktpdFBvcHVwTWVudTo6Y3JlYXRlKG1fdmlldy53ZWJWaWV3KCksIHBhZ2UpOwog
fQogCiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvd3BlL1dQRVZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL3dwZS9XUEVWaWV3LmNwcAppbmRleCBiYjhlMzYxODAxMjExMDg4ZWMxYjUyYTY4MzU5NTE2
Mjc5YzU0NTYzLi5iOGMxZjg4MDBmOTg5ZWYwYjY2YjE2NDEzNGQ1NDVlNjVhNDJlN2YyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dQRVZpZXcuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV1BFVmlldy5jcHAKQEAgLTQ0LDExICs0
NCwxMiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCiBuYW1lc3BhY2UgV0tXUEUgewogCi1W
aWV3OjpWaWV3KHN0cnVjdCB3cGVfdmlld19iYWNrZW5kKiBiYWNrZW5kLCBjb25zdCBBUEk6OlBh
Z2VDb25maWd1cmF0aW9uJiBiYXNlQ29uZmlndXJhdGlvbikKK1ZpZXc6OlZpZXcoV2ViS2l0V2Vi
Vmlldyogd2ViVmlldywgc3RydWN0IHdwZV92aWV3X2JhY2tlbmQqIGJhY2tlbmQsIGNvbnN0IEFQ
STo6UGFnZUNvbmZpZ3VyYXRpb24mIGJhc2VDb25maWd1cmF0aW9uKQogICAgIDogbV9jbGllbnQo
bWFrZVVuaXF1ZTxBUEk6OlZpZXdDbGllbnQ+KCkpCiAgICAgLCBtX3BhZ2VDbGllbnQobWFrZVVu
aXF1ZTxQYWdlQ2xpZW50SW1wbD4oKnRoaXMpKQogICAgICwgbV9zaXplIHsgODAwLCA2MDAgfQog
ICAgICwgbV92aWV3U3RhdGVGbGFncyB7IFdlYkNvcmU6OkFjdGl2aXR5U3RhdGU6OldpbmRvd0lz
QWN0aXZlLCBXZWJDb3JlOjpBY3Rpdml0eVN0YXRlOjpJc0ZvY3VzZWQsIFdlYkNvcmU6OkFjdGl2
aXR5U3RhdGU6OklzVmlzaWJsZSwgV2ViQ29yZTo6QWN0aXZpdHlTdGF0ZTo6SXNJbldpbmRvdyB9
CisgICAgLCBtX3dlYlZpZXcod2ViVmlldykKICAgICAsIG1fYmFja2VuZChiYWNrZW5kKQogewog
ICAgIEFTU0VSVChtX2JhY2tlbmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL3dwZS9XUEVWaWV3LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dQ
RVZpZXcuaAppbmRleCBmMjNkZmMyN2E3YzRiM2UwZmUxMzEzNzgwZjVkYjI4Njc3N2Q2NmE0Li45
ODE3ZmZkZmNiMjkxYWFjYTE1NjY2YWZlYzUwMmRhMTU3MTgyZWU4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dQRVZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvd3BlL1dQRVZpZXcuaApAQCAtNDEsNiArNDEsNyBAQAogCiB0eXBlZGVm
IHN0cnVjdCBPcGFxdWVKU0NvbnRleHQqIEpTR2xvYmFsQ29udGV4dFJlZjsKIHR5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRJbnB1dE1ldGhvZENvbnRleHQgV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0Owor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXcgV2ViS2l0V2ViVmlldzsKIHN0cnVjdCB3cGVf
aW5wdXRfa2V5Ym9hcmRfZXZlbnQ7CiBzdHJ1Y3Qgd3BlX3ZpZXdfYmFja2VuZDsKIApAQCAtNjQs
OSArNjUsOSBAQCBuYW1lc3BhY2UgV0tXUEUgewogCiBjbGFzcyBWaWV3IDogcHVibGljIEFQSTo6
T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Vmlldz4gewogcHVibGljOgotICAgIHN0YXRp
YyBWaWV3KiBjcmVhdGUoc3RydWN0IHdwZV92aWV3X2JhY2tlbmQqIGJhY2tlbmQsIGNvbnN0IEFQ
STo6UGFnZUNvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCisgICAgc3RhdGljIFZpZXcqIGNy
ZWF0ZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBzdHJ1Y3Qgd3BlX3ZpZXdfYmFja2VuZCogYmFj
a2VuZCwgY29uc3QgQVBJOjpQYWdlQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKICAgICB7
Ci0gICAgICAgIHJldHVybiBuZXcgVmlldyhiYWNrZW5kLCBjb25maWd1cmF0aW9uKTsKKyAgICAg
ICAgcmV0dXJuIG5ldyBWaWV3KHdlYlZpZXcsIGJhY2tlbmQsIGNvbmZpZ3VyYXRpb24pOwogICAg
IH0KIAogICAgIH5WaWV3KCk7CkBAIC04OCw2ICs4OSw3IEBAIHB1YmxpYzoKIAogICAgIFdlYktp
dDo6V2ViUGFnZVByb3h5JiBwYWdlKCkgeyByZXR1cm4gKm1fcGFnZVByb3h5OyB9CiAKKyAgICBX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KCkgeyByZXR1cm4gbV93ZWJWaWV3OyB9CiAgICAgc3RydWN0
IHdwZV92aWV3X2JhY2tlbmQqIGJhY2tlbmQoKSB7IHJldHVybiBtX2JhY2tlbmQ7IH0KIAogICAg
IGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0K
QEAgLTEwNiw3ICsxMDgsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBWaWV3
KHN0cnVjdCB3cGVfdmlld19iYWNrZW5kKiwgY29uc3QgQVBJOjpQYWdlQ29uZmlndXJhdGlvbiYp
OworICAgIFZpZXcoV2ViS2l0V2ViVmlldyosIHN0cnVjdCB3cGVfdmlld19iYWNrZW5kKiwgY29u
c3QgQVBJOjpQYWdlQ29uZmlndXJhdGlvbiYpOwogCiAgICAgdm9pZCBzZXRTaXplKGNvbnN0IFdl
YkNvcmU6OkludFNpemUmKTsKICAgICB2b2lkIHNldFZpZXdTdGF0ZShPcHRpb25TZXQ8V2ViQ29y
ZTo6QWN0aXZpdHlTdGF0ZTo6RmxhZz4pOwpAQCAtMTE5LDYgKzEyMSw3IEBAIHByaXZhdGU6CiAg
ICAgV2ViQ29yZTo6SW50U2l6ZSBtX3NpemU7CiAgICAgT3B0aW9uU2V0PFdlYkNvcmU6OkFjdGl2
aXR5U3RhdGU6OkZsYWc+IG1fdmlld1N0YXRlRmxhZ3M7CiAKKyAgICBXZWJLaXRXZWJWaWV3KiBt
X3dlYlZpZXc7CiAgICAgc3RydWN0IHdwZV92aWV3X2JhY2tlbmQqIG1fYmFja2VuZDsKIAogI2lm
IEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS93cGUvV2ViS2l0T3B0aW9uTWVudS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL3dwZS9XZWJLaXRPcHRpb25NZW51LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGZlMmVmZjA5NDEwMGMxZGM3
ZDhmMThiYzMzNjExNzUxMmY3ODU1OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0T3B0aW9uTWVudS5oCkBAIC0wLDAgKzEsODIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lU
X0hfSU5TSURFX18pICYmICFkZWZpbmVkKFdFQktJVDJfQ09NUElMQVRJT04pCisjZXJyb3IgIk9u
bHkgPHdwZS93ZWJraXQuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisj
aWZuZGVmIFdlYktpdE9wdGlvbk1lbnVfaAorI2RlZmluZSBXZWJLaXRPcHRpb25NZW51X2gKKwor
I2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d3BlL1dlYktpdERlZmluZXMuaD4K
KyNpbmNsdWRlIDx3cGUvV2ViS2l0T3B0aW9uTWVudUl0ZW0uaD4KKworR19CRUdJTl9ERUNMUwor
CisjZGVmaW5lIFdFQktJVF9UWVBFX09QVElPTl9NRU5VICAgICAgICAgICAgKHdlYmtpdF9vcHRp
b25fbWVudV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfT1BUSU9OX01FTlUob2JqKSAgICAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfT1BU
SU9OX01FTlUsIFdlYktpdE9wdGlvbk1lbnUpKQorI2RlZmluZSBXRUJLSVRfSVNfT1BUSU9OX01F
TlUob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lU
X1RZUEVfT1BUSU9OX01FTlUpKQorI2RlZmluZSBXRUJLSVRfT1BUSU9OX01FTlVfQ0xBU1Moa2xh
c3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfT1BU
SU9OX01FTlUsIFdlYktpdE9wdGlvbk1lbnVDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19PUFRJ
T05fTUVOVV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBX
RUJLSVRfVFlQRV9PUFRJT05fTUVOVSkpCisjZGVmaW5lIFdFQktJVF9PUFRJT05fTUVOVV9HRVRf
Q0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQ
RV9PUFRJT05fTUVOVSwgV2ViS2l0T3B0aW9uTWVudUNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdE9wdGlvbk1lbnUgICAgICAgIFdlYktpdE9wdGlvbk1lbnU7Cit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0T3B0aW9uTWVudUNsYXNzICAgV2ViS2l0T3B0aW9uTWVudUNsYXNzOwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdE9wdGlvbk1lbnVQcml2YXRlIFdlYktpdE9wdGlvbk1lbnVQcml2YXRl
OworCitzdHJ1Y3QgX1dlYktpdE9wdGlvbk1lbnUgeworICAgIEdPYmplY3QgcGFyZW50OworCisg
ICAgV2ViS2l0T3B0aW9uTWVudVByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdE9w
dGlvbk1lbnVDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKKworICAgIHZv
aWQgKCpfd2Via2l0X3Jlc2VydmVkMCkgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2Vy
dmVkMSkgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMikgKHZvaWQpOworICAg
IHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMykgKHZvaWQpOworfTsKKworV0VCS0lUX0FQSSBHVHlw
ZQord2Via2l0X29wdGlvbl9tZW51X2dldF90eXBlICAgICAgICh2b2lkKTsKKworV0VCS0lUX0FQ
SSBndWludAord2Via2l0X29wdGlvbl9tZW51X2dldF9uX2l0ZW1zICAgIChXZWJLaXRPcHRpb25N
ZW51ICptZW51KTsKKworV0VCS0lUX0FQSSBXZWJLaXRPcHRpb25NZW51SXRlbSAqCit3ZWJraXRf
b3B0aW9uX21lbnVfZ2V0X2l0ZW0gICAgICAgKFdlYktpdE9wdGlvbk1lbnUgKm1lbnUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgIGluZGV4KTsK
KworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfb3B0aW9uX21lbnVfc2VsZWN0X2l0ZW0gICAgKFdl
YktpdE9wdGlvbk1lbnUgKm1lbnUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGd1aW50ICAgICAgICAgICAgIGluZGV4KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfb3B0
aW9uX21lbnVfYWN0aXZhdGVfaXRlbSAgKFdlYktpdE9wdGlvbk1lbnUgKm1lbnUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgIGluZGV4KTsKKwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfb3B0aW9uX21lbnVfY2xvc2UgICAgICAgICAgKFdlYktp
dE9wdGlvbk1lbnUgKm1lbnUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0T3B0aW9uTWVudUl0ZW0uaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0T3B0aW9uTWVudUl0ZW0uaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi43OGZmMjdkNmVkMmEwNzg1ZmM4MTdhZjc1YWEzOWU3Mzk4YWRhNzIwCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRPcHRp
b25NZW51SXRlbS5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
SWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lUX0hfSU5TSURFX18pICYmICFkZWZpbmVk
KFdFQktJVDJfQ09NUElMQVRJT04pCisjZXJyb3IgIk9ubHkgPHdwZS93ZWJraXQuaD4gY2FuIGJl
IGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdE9wdGlvbk1lbnVJ
dGVtX2gKKyNkZWZpbmUgV2ViS2l0T3B0aW9uTWVudUl0ZW1faAorCisjaW5jbHVkZSA8Z2xpYi1v
YmplY3QuaD4KKyNpbmNsdWRlIDx3cGUvV2ViS2l0RGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xT
CisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfT1BUSU9OX01FTlVfSVRFTSAod2Via2l0X29wdGlvbl9t
ZW51X2l0ZW1fZ2V0X3R5cGUoKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdE9wdGlvbk1lbnVJ
dGVtIFdlYktpdE9wdGlvbk1lbnVJdGVtOworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfb3B0
aW9uX21lbnVfaXRlbV9nZXRfdHlwZSAgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgV2ViS2l0
T3B0aW9uTWVudUl0ZW0gKgord2Via2l0X29wdGlvbl9tZW51X2l0ZW1fY29weSAgICAgICAgICAg
KFdlYktpdE9wdGlvbk1lbnVJdGVtICppdGVtKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRf
b3B0aW9uX21lbnVfaXRlbV9mcmVlICAgICAgICAgICAoV2ViS2l0T3B0aW9uTWVudUl0ZW0gKml0
ZW0pOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICoKK3dlYmtpdF9vcHRpb25fbWVudV9pdGVt
X2dldF9sYWJlbCAgICAgIChXZWJLaXRPcHRpb25NZW51SXRlbSAqaXRlbSk7CisKK1dFQktJVF9B
UEkgY29uc3QgZ2NoYXIgKgord2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X3Rvb2x0aXAgICAg
KFdlYktpdE9wdGlvbk1lbnVJdGVtICppdGVtKTsKKworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Vi
a2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfbGFiZWwgKFdlYktpdE9wdGlvbk1lbnVJdGVt
ICppdGVtKTsKKworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X29wdGlvbl9tZW51X2l0ZW1f
aXNfZ3JvdXBfY2hpbGQgKFdlYktpdE9wdGlvbk1lbnVJdGVtICppdGVtKTsKKworV0VCS0lUX0FQ
SSBnYm9vbGVhbgord2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZW5hYmxlZCAgICAgKFdlYktp
dE9wdGlvbk1lbnVJdGVtICppdGVtKTsKKworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X29w
dGlvbl9tZW51X2l0ZW1faXNfc2VsZWN0ZWQgICAgKFdlYktpdE9wdGlvbk1lbnVJdGVtICppdGVt
KTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvd3BlL1dlYktpdFBvcHVwTWVudS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvd3BlL1dlYktpdFBvcHVwTWVudS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWFiZGQwYjI5NWQ1
OGQ0YTQyZDM1MjE4ZTNmOGRjZWZjNzhhYzhmMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0UG9wdXBNZW51LmNwcApAQCAtMCwwICsxLDgw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJLaXRQb3B1cE1lbnUuaCIKKworI2luY2x1ZGUgIldlYktpdE9w
dGlvbk1lbnVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0V2ViVmlld1ByaXZhdGUuaCIKKwor
bmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworV2ViS2l0UG9w
dXBNZW51OjpXZWJLaXRQb3B1cE1lbnUoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViUG9wdXBN
ZW51UHJveHk6OkNsaWVudCYgY2xpZW50KQorICAgIDogV2ViUG9wdXBNZW51UHJveHkoY2xpZW50
KQorICAgICwgbV93ZWJWaWV3KHdlYlZpZXcpCit7Cit9CisKK3N0YXRpYyB2b2lkIG1lbnVDbG9z
ZUNhbGxiYWNrKFdlYktpdFBvcHVwTWVudSogcG9wdXBNZW51KQoreworICAgIHBvcHVwTWVudS0+
YWN0aXZhdGVJdGVtKFdURjo6bnVsbG9wdCk7Cit9CisKK3ZvaWQgV2ViS2l0UG9wdXBNZW51Ojpz
aG93UG9wdXBNZW51KGNvbnN0IEludFJlY3QmIHJlY3QsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9u
LCBkb3VibGUgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBWZWN0b3I8V2ViUG9wdXBJdGVtPiYgaXRl
bXMsIGNvbnN0IFBsYXRmb3JtUG9wdXBNZW51RGF0YSYgcGxhdGZvcm1EYXRhLCBpbnQzMl90IHNl
bGVjdGVkSW5kZXgpCit7CisgICAgR1JlZlB0cjxXZWJLaXRPcHRpb25NZW51PiBtZW51ID0gYWRv
cHRHUmVmKHdlYmtpdE9wdGlvbk1lbnVDcmVhdGUoKnRoaXMsIGl0ZW1zLCBzZWxlY3RlZEluZGV4
KSk7CisgICAgaWYgKHdlYmtpdFdlYlZpZXdTaG93T3B0aW9uTWVudShXRUJLSVRfV0VCX1ZJRVco
bV93ZWJWaWV3KSwgbWVudS5nZXQoKSkpIHsKKyAgICAgICAgbV9tZW51ID0gV1RGTW92ZShtZW51
KTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fbWVudS5nZXQoKSwgImNsb3Nl
IiwgR19DQUxMQkFDSyhtZW51Q2xvc2VDYWxsYmFjayksIHRoaXMpOworICAgIH0KK30KKwordm9p
ZCBXZWJLaXRQb3B1cE1lbnU6OmhpZGVQb3B1cE1lbnUoKQoreworICAgIGlmIChtX21lbnUpIHsK
KyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fbWVudS5nZXQo
KSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgbnVsbHB0ciwgbnVsbHB0ciwgdGhpcyk7Cisg
ICAgICAgIHdlYmtpdF9vcHRpb25fbWVudV9jbG9zZShtX21lbnUuZ2V0KCkpOworICAgIH0KK30K
Kwordm9pZCBXZWJLaXRQb3B1cE1lbnU6OmNhbmNlbFRyYWNraW5nKCkKK3sKKyAgICBoaWRlUG9w
dXBNZW51KCk7CisgICAgbV9tZW51ID0gbnVsbHB0cjsKK30KKwordm9pZCBXZWJLaXRQb3B1cE1l
bnU6OnNlbGVjdEl0ZW0odW5zaWduZWQgaXRlbUluZGV4KQoreworICAgIGlmIChtX2NsaWVudCkK
KyAgICAgICAgbV9jbGllbnQtPnNldFRleHRGcm9tSXRlbUZvclBvcHVwTWVudSh0aGlzLCBpdGVt
SW5kZXgpOworICAgIG1fc2VsZWN0ZWRJdGVtID0gaXRlbUluZGV4OworfQorCit2b2lkIFdlYktp
dFBvcHVwTWVudTo6YWN0aXZhdGVJdGVtKE9wdGlvbmFsPHVuc2lnbmVkPiBpdGVtSW5kZXgpCit7
CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+dmFsdWVDaGFuZ2VkRm9yUG9w
dXBNZW51KHRoaXMsIGl0ZW1JbmRleC52YWx1ZU9yKG1fc2VsZWN0ZWRJdGVtLnZhbHVlT3IoLTEp
KSk7CisgICAgaWYgKG1fbWVudSkgeworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25u
ZWN0X21hdGNoZWQobV9tZW51LmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCBudWxs
cHRyLCBudWxscHRyLCB0aGlzKTsKKyAgICAgICAgbV9tZW51ID0gbnVsbHB0cjsKKyAgICB9Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL3dwZS9XZWJLaXRQb3B1cE1lbnUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS93cGUvV2ViS2l0UG9wdXBNZW51LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2MxNjBmNjIxM2Y3ODg4ZTg3
NDQ3ODRkYTMzOTlmMjEyODRlNWMyNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0UG9wdXBNZW51LmgKQEAgLTAsMCArMSw1MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIldlYlBvcHVwTWVudVByb3h5LmgiCisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgor
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0T3B0aW9uTWVudSBXZWJLaXRPcHRpb25NZW51OwordHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXcgV2ViS2l0V2ViVmlldzsKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK2NsYXNzIFdlYktpdFBvcHVwTWVudSBmaW5hbCA6IHB1YmxpYyBXZWJQb3B1cE1l
bnVQcm94eSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxXZWJLaXRQb3B1cE1lbnU+IGNyZWF0
ZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJQb3B1cE1lbnVQcm94eTo6Q2xpZW50JiBjbGll
bnQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJLaXRQb3B1cE1lbnUo
d2ViVmlldywgY2xpZW50KSk7CisgICAgfQorICAgIH5XZWJLaXRQb3B1cE1lbnUoKSA9IGRlZmF1
bHQ7CisKKyAgICB2b2lkIHNlbGVjdEl0ZW0odW5zaWduZWQgaXRlbUluZGV4KTsKKyAgICB2b2lk
IGFjdGl2YXRlSXRlbShPcHRpb25hbDx1bnNpZ25lZD4gaXRlbUluZGV4KTsKKworcHJpdmF0ZToK
KyAgICBXZWJLaXRQb3B1cE1lbnUoV2ViS2l0V2ViVmlldyosIFdlYlBvcHVwTWVudVByb3h5OjpD
bGllbnQmKTsKKworICAgIHZvaWQgc2hvd1BvcHVwTWVudShjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiwgV2ViQ29yZTo6VGV4dERpcmVjdGlvbiwgZG91YmxlIHBhZ2VTY2FsZUZhY3RvciwgY29uc3Qg
VmVjdG9yPFdlYlBvcHVwSXRlbT4mLCBjb25zdCBQbGF0Zm9ybVBvcHVwTWVudURhdGEmLCBpbnQz
Ml90IHNlbGVjdGVkSW5kZXgpIG92ZXJyaWRlOworICAgIHZvaWQgaGlkZVBvcHVwTWVudSgpIG92
ZXJyaWRlOworICAgIHZvaWQgY2FuY2VsVHJhY2tpbmcoKSBvdmVycmlkZTsKKworICAgIFdlYktp
dFdlYlZpZXcqIG1fd2ViVmlldzsKKyAgICBHUmVmUHRyPFdlYktpdE9wdGlvbk1lbnU+IG1fbWVu
dTsKKyAgICBPcHRpb25hbDx1bnNpZ25lZD4gbV9zZWxlY3RlZEl0ZW07Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93
cGUvV2ViS2l0V2ViVmlldy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJL
aXRXZWJWaWV3LmgKaW5kZXggMDE3NDM0ZGViZGY3MTYyMjNmN2Q2ZDAxZDZkNzk5Mzc0OWNiOGQ0
OC4uZDZlOGMxYzBlNjkzYzU2YWE1MDkyYWM3NmRmMmNjYWMxZjMxMzUwMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRXZWJWaWV3LmgKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRXZWJWaWV3LmgKQEAgLTQxLDYgKzQx
LDcgQEAKICNpbmNsdWRlIDx3cGUvV2ViS2l0SmF2YXNjcmlwdFJlc3VsdC5oPgogI2luY2x1ZGUg
PHdwZS9XZWJLaXROYXZpZ2F0aW9uQWN0aW9uLmg+CiAjaW5jbHVkZSA8d3BlL1dlYktpdE5vdGlm
aWNhdGlvbi5oPgorI2luY2x1ZGUgPHdwZS9XZWJLaXRPcHRpb25NZW51Lmg+CiAjaW5jbHVkZSA8
d3BlL1dlYktpdFBlcm1pc3Npb25SZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8d3BlL1dlYktpdFBvbGlj
eURlY2lzaW9uLmg+CiAjaW5jbHVkZSA8d3BlL1dlYktpdFNjcmlwdERpYWxvZy5oPgpAQCAtMjQ1
LDcgKzI0Niw4IEBAIHN0cnVjdCBfV2ViS2l0V2ViVmlld0NsYXNzIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRXZWJQcm9jZXNzVGVy
bWluYXRpb25SZWFzb24gcmVhc29uKTsKICAgICBnYm9vbGVhbiAgICAgICAoKiB1c2VyX21lc3Nh
Z2VfcmVjZWl2ZWQpICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICAgKndlYl92aWV3
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdl
YktpdFVzZXJNZXNzYWdlICAgICAgICAgICAqbWVzc2FnZSk7Ci0KKyAgICBnYm9vbGVhbiAgICAg
ICAoKiBzaG93X29wdGlvbl9tZW51KSAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAg
ICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdlYktpdE9wdGlvbk1lbnUgICAgICAgICAgICAqbWVudSk7CiAKICAgICB2
b2lkICgqX3dlYmtpdF9yZXNlcnZlZDApICh2b2lkKTsKICAgICB2b2lkICgqX3dlYmtpdF9yZXNl
cnZlZDEpICh2b2lkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93
cGUvZG9jcy93cGUtMS4wLXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS93cGUvZG9jcy93cGUtMS4wLXNlY3Rpb25zLnR4dAppbmRleCAxZDFkNTdiMTcxODU3ZWQ4MTEy
NTMwZTI3NmIxZWViYTJhYmVmMzkzLi44M2RlZjI1YTU1MDdhNzEzNmFlNjRmZTY5ZjQxMmY5YjUx
NDQzNzI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL2RvY3Mv
d3BlLTEuMC1zZWN0aW9ucy50eHQKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dw
ZS9kb2NzL3dwZS0xLjAtc2VjdGlvbnMudHh0CkBAIC0xMjMwLDYgKzEyMzAsNDggQEAgV2ViS2l0
Q29udGV4dE1lbnVJdGVtUHJpdmF0ZQogd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF90eXBl
CiA8L1NFQ1RJT04+CiAKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0T3B0aW9uTWVudTwvRklMRT4K
K1dlYktpdE9wdGlvbk1lbnUKK3dlYmtpdF9vcHRpb25fbWVudV9nZXRfbl9pdGVtcword2Via2l0
X29wdGlvbl9tZW51X2dldF9pdGVtCit3ZWJraXRfb3B0aW9uX21lbnVfc2VsZWN0X2l0ZW0KK3dl
YmtpdF9vcHRpb25fbWVudV9hY3RpdmF0ZV9pdGVtCit3ZWJraXRfb3B0aW9uX21lbnVfY2xvc2UK
KworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRPcHRpb25NZW51Q2xhc3MKK1dFQktJVF9U
WVBFX09QVElPTl9NRU5VCitXRUJLSVRfT1BUSU9OX01FTlUKK1dFQktJVF9JU19PUFRJT05fTUVO
VQorV0VCS0lUX09QVElPTl9NRU5VX0NMQVNTCitXRUJLSVRfSVNfT1BUSU9OX01FTlVfQ0xBU1MK
K1dFQktJVF9PUFRJT05fTUVOVV9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK1dl
YktpdE9wdGlvbk1lbnVQcml2YXRlCit3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X3R5cGUKKzwvU0VD
VElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRPcHRpb25NZW51SXRlbTwvRklMRT4KK1dl
YktpdE9wdGlvbk1lbnVJdGVtCit3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9jb3B5Cit3ZWJraXRf
b3B0aW9uX21lbnVfaXRlbV9mcmVlCit3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfbGFiZWwK
K3dlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF90b29sdGlwCit3ZWJraXRfb3B0aW9uX21lbnVf
aXRlbV9pc19ncm91cF9sYWJlbAord2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfY2hp
bGQKK3dlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2VuYWJsZWQKK3dlYmtpdF9vcHRpb25fbWVu
dV9pdGVtX2lzX3NlbGVjdGVkCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV0VCS0lUX1RZUEVf
T1BUSU9OX01FTlVfSVRFTQorCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X29wdGlvbl9t
ZW51X2l0ZW1fZ2V0X3R5cGUKKzwvU0VDVElPTj4KKwogPFNFQ1RJT04+CiA8RklMRT5XZWJLaXRG
b3JtU3VibWlzc2lvblJlcXVlc3Q8L0ZJTEU+CiBXZWJLaXRGb3JtU3VibWlzc2lvblJlcXVlc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvd2Via2l0LmggYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL3dlYmtpdC5oCmluZGV4IDE1YTRjMWZmMWM0
YWVlZTdkODA3ODU2ZGIwYjNhNzQwMDJlNDIxZGQuLjAyZTI1ODI1M2U0N2ZiZjY1OTRjMjBmNzQz
ZDBmYWVhYzhhNGVlZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93
cGUvd2Via2l0LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS93ZWJraXQu
aApAQCAtNTksNiArNTksOCBAQAogI2luY2x1ZGUgPHdwZS9XZWJLaXROZXR3b3JrUHJveHlTZXR0
aW5ncy5oPgogI2luY2x1ZGUgPHdwZS9XZWJLaXROb3RpZmljYXRpb24uaD4KICNpbmNsdWRlIDx3
cGUvV2ViS2l0Tm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3QuaD4KKyNpbmNsdWRlIDx3cGUv
V2ViS2l0T3B0aW9uTWVudS5oPgorI2luY2x1ZGUgPHdwZS9XZWJLaXRPcHRpb25NZW51SXRlbS5o
PgogI2luY2x1ZGUgPHdwZS9XZWJLaXRQZXJtaXNzaW9uUmVxdWVzdC5oPgogI2luY2x1ZGUgPHdw
ZS9XZWJLaXRQbHVnaW4uaD4KICNpbmNsdWRlIDx3cGUvV2ViS2l0UmVzcG9uc2VQb2xpY3lEZWNp
c2lvbi5oPgpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmlu
ZGV4IDczYWY4NWMzM2U1ZTVjYWE3ZmVmMzQxMjRkYzZhOWFkMTk2ZmZmOWUuLjU3YzAyYmNjNGYw
NjEyZWU1ODUxODg4MzkwMjY3ZDhkZDNlMzE1ZDkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxv
ZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAyMC0wMS0xNSAgWmFu
IERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CisKKyAgICAgICAgW1dQRV0gRXhwb3Nl
IHRoZSBXZWJLaXRPcHRpb25NZW51IEFQSXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwNjI4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RP
cHRpb25NZW51LmNwcDogUmVuYW1lZCBmcm9tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0R3RrL1Rlc3RPcHRpb25NZW51LmNwcC4KKyAgICAgICAgKE9wdGlvbk1lbnVUZXN0OjpzaG93
T3B0aW9uTWVudUNhbGxiYWNrKToKKyAgICAgICAgKE9wdGlvbk1lbnVUZXN0OjpzaG93T3B0aW9u
TWVudSk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9nbGliL0NNYWtlTGlzdHMudHh0OgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvZ2xpYi9QbGF0Zm9ybUdUSy5jbWFrZToKKwogMjAyMC0wMS0x
NCAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCwgcm9sbGluZyBvdXQgcjI1NDQ4MCwgcjI1NDQ5NiwgYW5kIHIyNTQ1MTcuCmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdE9wdGlvbk1l
bnUuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RPcHRpb25N
ZW51LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40YWE5ZTQ0Y2RlZThiYzE3YTY5ZDdjYjk1NmM4YmIyM2ZkZDAz
YWFkCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRH
TGliL1Rlc3RPcHRpb25NZW51LmNwcApAQCAtMCwwICsxLDMzMSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldl
YlZpZXdUZXN0LmgiCisKKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgorCitjbGFzcyBPcHRpb25N
ZW51VGVzdCA6IHB1YmxpYyBXZWJWaWV3VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RF
U1RfRklYVFVSRShPcHRpb25NZW51VGVzdCk7CisKKyAgICBPcHRpb25NZW51VGVzdCgpCisgICAg
eworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgInNob3ctb3B0aW9uLW1lbnUi
LCBHX0NBTExCQUNLKHNob3dPcHRpb25NZW51Q2FsbGJhY2spLCB0aGlzKTsKKyAgICB9CisKKyAg
ICB+T3B0aW9uTWVudVRlc3QoKQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlz
Y29ubmVjdF9tYXRjaGVkKG1fd2ViVmlldywgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwg
MCwgdGhpcyk7CisgICAgICAgIGlmIChtX21lbnUpCisgICAgICAgICAgICBjbG9zZSgpOworICAg
IH0KKworICAgIHZvaWQgZGVzdHJveU1lbnUoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX21lbnUp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29u
bmVjdF9tYXRjaGVkKG1fbWVudS5nZXQoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwg
MCwgdGhpcyk7CisgICAgICAgIG1fbWVudSA9IG51bGxwdHI7CisgICAgfQorCisjaWYgUExBVEZP
Uk0oR1RLKQorICAgIHN0YXRpYyBnYm9vbGVhbiBzaG93T3B0aW9uTWVudUNhbGxiYWNrKFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdE9wdGlvbk1lbnUqIG1lbnUsIEdka0V2ZW50KiBldmVu
dCwgR2RrUmVjdGFuZ2xlKiByZWN0LCBPcHRpb25NZW51VGVzdCogdGVzdCkKKyAgICB7CisgICAg
ICAgIGdfYXNzZXJ0X3RydWUodGVzdC0+bV93ZWJWaWV3ID09IHdlYlZpZXcpOworICAgICAgICBn
X2Fzc2VydF9ub25udWxsKHJlY3QpOworICAgICAgICBnX2Fzc2VydF90cnVlKFdFQktJVF9JU19P
UFRJT05fTUVOVShtZW51KSk7CisgICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdo
ZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QobWVudSkpOworICAgICAgICB0ZXN0LT5zaG93T3B0aW9u
TWVudShtZW51LCByZWN0KTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorI2VuZGlmCisK
KyNpZiBQTEFURk9STShXUEUpCisgICAgc3RhdGljIGdib29sZWFuIHNob3dPcHRpb25NZW51Q2Fs
bGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0T3B0aW9uTWVudSogbWVudSwgT3B0
aW9uTWVudVRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBnX2Fzc2VydF90cnVlKHRlc3QtPm1f
d2ViVmlldyA9PSB3ZWJWaWV3KTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShXRUJLSVRfSVNfT1BU
SU9OX01FTlUobWVudSkpOworICAgICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVu
VGVzdEZpbmlzaGVzKEdfT0JKRUNUKG1lbnUpKTsKKyAgICAgICAgdGVzdC0+c2hvd09wdGlvbk1l
bnUobWVudSk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyNlbmRpZgorCisgICAgc3Rh
dGljIHZvaWQgbWVudUNsb3NlQ2FsbGJhY2soV2ViS2l0T3B0aW9uTWVudSogbWVudSwgT3B0aW9u
TWVudVRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBnX2Fzc2VydF90cnVlKHRlc3QtPm1fbWVu
dS5nZXQoKSA9PSBtZW51KTsKKyAgICAgICAgdGVzdC0+ZGVzdHJveU1lbnUoKTsKKyAgICB9CisK
KyNpZiBQTEFURk9STShHVEspCisgICAgdm9pZCBzaG93T3B0aW9uTWVudShXZWJLaXRPcHRpb25N
ZW51KiBtZW51LCBHZGtSZWN0YW5nbGUqIHJlY3QpCisgICAgeworICAgICAgICBtX3JlY3Rhbmds
ZSA9ICpyZWN0OworICAgICAgICBtX21lbnUgPSBtZW51OworICAgICAgICBnX3NpZ25hbF9jb25u
ZWN0KG1fbWVudS5nZXQoKSwgImNsb3NlIiwgR19DQUxMQkFDSyhtZW51Q2xvc2VDYWxsYmFjayks
IHRoaXMpOworICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOworICAgIH0KKyNl
bmRpZgorCisjaWYgUExBVEZPUk0oV1BFKQorICAgIHZvaWQgc2hvd09wdGlvbk1lbnUoV2ViS2l0
T3B0aW9uTWVudSogbWVudSkKKyAgICB7CisgICAgICAgIG1fbWVudSA9IG1lbnU7CisgICAgICAg
IGdfc2lnbmFsX2Nvbm5lY3QobV9tZW51LmdldCgpLCAiY2xvc2UiLCBHX0NBTExCQUNLKG1lbnVD
bG9zZUNhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9v
cCk7CisgICAgfQorI2VuZGlmCisKKyAgICB2b2lkIGNsaWNrQXRQb3NpdGlvbkFuZFdhaXRVbnRp
bE9wdGlvbk1lbnVTaG93bihpbnQgeCwgaW50IHkpCisgICAgeworICAgICAgICBtX21lbnUgPSBu
dWxscHRyOworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3RoaXMsIHgsIHldIHsg
Y2xpY2tNb3VzZUJ1dHRvbih4LCB5KTsgfSk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21h
aW5Mb29wKTsKKyAgICB9CisKKyAgICB2b2lkIGNsb3NlKCkKKyAgICB7CisgICAgICAgIGdfYXNz
ZXJ0X25vbm51bGwobV9tZW51LmdldCgpKTsKKyAgICAgICAgd2Via2l0X29wdGlvbl9tZW51X2Ns
b3NlKG1fbWVudS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X251bGwobV9tZW51LmdldCgpKTsK
KyAgICB9CisKKyAgICB2b2lkIGFjdGl2YXRlSXRlbSh1bnNpZ25lZCBpdGVtKQorICAgIHsKKyAg
ICAgICAgZ19hc3NlcnRfbm9ubnVsbChtX21lbnUuZ2V0KCkpOworICAgICAgICB3ZWJraXRfb3B0
aW9uX21lbnVfYWN0aXZhdGVfaXRlbShtX21lbnUuZ2V0KCksIGl0ZW0pOworICAgICAgICBnX2Fz
c2VydF9ub25udWxsKG1fbWVudS5nZXQoKSk7CisgICAgfQorCisgICAgdm9pZCBzZWxlY3RJdGVt
KHVuc2lnbmVkIGl0ZW0pCisgICAgeworICAgICAgICBnX2Fzc2VydF9ub25udWxsKG1fbWVudS5n
ZXQoKSk7CisgICAgICAgIHdlYmtpdF9vcHRpb25fbWVudV9zZWxlY3RfaXRlbShtX21lbnUuZ2V0
KCksIGl0ZW0pOworICAgICAgICBnX2Fzc2VydF9ub25udWxsKG1fbWVudS5nZXQoKSk7CisgICAg
fQorCisgICAgR1JlZlB0cjxXZWJLaXRPcHRpb25NZW51PiBtX21lbnU7CisjaWYgUExBVEZPUk0o
R1RLKQorICAgIEdka1JlY3RhbmdsZSBtX3JlY3RhbmdsZTsKKyNlbmRpZgorfTsKKworc3RhdGlj
IHZvaWQgdGVzdE9wdGlvbk1lbnVTaW1wbGUoT3B0aW9uTWVudVRlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgaHRtbFtdID0KKyAgICAgICAgIjxodG1s
Pjxib2R5PiIKKyAgICAgICAgIiAgPHNlbGVjdCBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxl
ZnQ6MTsgdG9wOjEwJz4iCisgICAgICAgICIgICAgPG9wdGlvbiB0aXRsZT0nVGhlIEZvbyBPcHRp
b24nPkZvbzwvb3B0aW9uPiIKKyAgICAgICAgIiAgICA8b3B0aW9uIHNlbGVjdGVkPkJhcjwvb3B0
aW9uPiIKKyAgICAgICAgIiAgICA8b3B0aW9uIGRpc2FibGVkPkJhejwvb3B0aW9uPiIKKyAgICAg
ICAgIiAgPC9zZWxlY3Q+PC9ib2R5PjwvaHRtbD4iOworICAgIHRlc3QtPnNob3dJbldpbmRvd0Fu
ZFdhaXRVbnRpbE1hcHBlZCgpOworICAgIHRlc3QtPmxvYWRIdG1sKGh0bWwsIG51bGxwdHIpOwor
ICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+Y2xpY2tBdFBv
c2l0aW9uQW5kV2FpdFVudGlsT3B0aW9uTWVudVNob3duKDUsIDE1KTsKKyAgICBnX2Fzc2VydF90
cnVlKFdFQktJVF9JU19PUFRJT05fTUVOVSh0ZXN0LT5tX21lbnUuZ2V0KCkpKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQod2Via2l0X29wdGlvbl9tZW51X2dldF9uX2l0ZW1zKHRlc3QtPm1fbWVudS5n
ZXQoKSksID09LCAzKTsKKyAgICBhdXRvKiBpdGVtID0gd2Via2l0X29wdGlvbl9tZW51X2dldF9p
dGVtKHRlc3QtPm1fbWVudS5nZXQoKSwgMCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9v
cHRpb25fbWVudV9pdGVtX2dldF9sYWJlbChpdGVtKSwgPT0sICJGb28iKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X3Rvb2x0aXAoaXRlbSksID09LCAi
VGhlIEZvbyBPcHRpb24iKTsKKyAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVf
aXRlbV9pc19ncm91cF9sYWJlbChpdGVtKSk7CisgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29w
dGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfY2hpbGQoaXRlbSkpOworICAgIGdfYXNzZXJ0X3RydWUo
d2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZW5hYmxlZChpdGVtKSk7CisgICAgZ19hc3NlcnRf
ZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfc2VsZWN0ZWQoaXRlbSkpOworICAgIGl0
ZW0gPSB3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X2l0ZW0odGVzdC0+bV9tZW51LmdldCgpLCAxKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X2xhYmVsKGl0
ZW0pLCA9PSwgIkJhciIpOworICAgIGdfYXNzZXJ0X251bGwod2Via2l0X29wdGlvbl9tZW51X2l0
ZW1fZ2V0X3Rvb2x0aXAoaXRlbSkpOworICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25f
bWVudV9pdGVtX2lzX2dyb3VwX2xhYmVsKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF9mYWxzZSh3ZWJr
aXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9jaGlsZChpdGVtKSk7CisgICAgZ19hc3NlcnRf
dHJ1ZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19lbmFibGVkKGl0ZW0pKTsKKyAgICBnX2Fz
c2VydF90cnVlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX3NlbGVjdGVkKGl0ZW0pKTsKKyAg
ICBpdGVtID0gd2Via2l0X29wdGlvbl9tZW51X2dldF9pdGVtKHRlc3QtPm1fbWVudS5nZXQoKSwg
Mik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF9sYWJl
bChpdGVtKSwgPT0sICJCYXoiKTsKKyAgICBnX2Fzc2VydF9udWxsKHdlYmtpdF9vcHRpb25fbWVu
dV9pdGVtX2dldF90b29sdGlwKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0
aW9uX21lbnVfaXRlbV9pc19ncm91cF9sYWJlbChpdGVtKSk7CisgICAgZ19hc3NlcnRfZmFsc2Uo
d2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfY2hpbGQoaXRlbSkpOworICAgIGdfYXNz
ZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2VuYWJsZWQoaXRlbSkpOworICAg
IGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX3NlbGVjdGVkKGl0ZW0p
KTsKKworICAgIHRlc3QtPmNsb3NlKCk7CisgICAgZ19hc3NlcnRfbnVsbCh0ZXN0LT5tX21lbnUu
Z2V0KCkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0T3B0aW9uTWVudUdyb3VwcyhPcHRpb25NZW51
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciBodG1s
W10gPQorICAgICAgICAiPGh0bWw+PGJvZHk+IgorICAgICAgICAiICA8c2VsZWN0IHN0eWxlPSdw
b3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MTAnPiIKKyAgICAgICAgIiAgICA8b3B0aW9u
PlJvb3Q8L29wdGlvbj4iCisgICAgICAgICIgICAgPG9wdGdyb3VwIGxhYmVsPSdHcm91cCAxJz4i
CisgICAgICAgICIgICAgICA8b3B0aW9uPkNoaWxkIDEtMTwvb3B0aW9uPiIKKyAgICAgICAgIiAg
ICAgIDxvcHRpb24gZGlzYWJsZWQ+Q2hpbGQgMS0yPC9vcHRpb24+IgorICAgICAgICAiICAgIDwv
b3B0Z3JvdXA+IgorICAgICAgICAiICAgIDxvcHRncm91cCBsYWJlbD0nR3JvdXAgMic+IgorICAg
ICAgICAiICAgICAgPG9wdGlvbiBzZWxlY3RlZD5DaGlsZCAyLTE8L29wdGlvbj4iCisgICAgICAg
ICIgICAgICA8b3B0aW9uPkNoaWxkIDItMjwvb3B0aW9uPiIKKyAgICAgICAgIiAgICA8L29wdGdy
b3VwPiIKKyAgICAgICAgIiAgICA8b3B0aW9uPlRhaWw8L29wdGlvbj4iCisgICAgICAgICIgIDwv
c2VsZWN0PjwvYm9keT48L2h0bWw+IjsKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50
aWxNYXBwZWQoKTsKKyAgICB0ZXN0LT5sb2FkSHRtbChodG1sLCBudWxscHRyKTsKKyAgICB0ZXN0
LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPmNsaWNrQXRQb3NpdGlvbkFu
ZFdhaXRVbnRpbE9wdGlvbk1lbnVTaG93big1LCAxNSk7CisgICAgZ19hc3NlcnRfdHJ1ZShXRUJL
SVRfSVNfT1BUSU9OX01FTlUodGVzdC0+bV9tZW51LmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21w
aW50KHdlYmtpdF9vcHRpb25fbWVudV9nZXRfbl9pdGVtcyh0ZXN0LT5tX21lbnUuZ2V0KCkpLCA9
PSwgOCk7CisgICAgYXV0byogaXRlbSA9IHdlYmtpdF9vcHRpb25fbWVudV9nZXRfaXRlbSh0ZXN0
LT5tX21lbnUuZ2V0KCksIDApOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfb3B0aW9uX21l
bnVfaXRlbV9nZXRfbGFiZWwoaXRlbSksID09LCAiUm9vdCIpOworICAgIGdfYXNzZXJ0X251bGwo
d2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X3Rvb2x0aXAoaXRlbSkpOworICAgIGdfYXNzZXJ0
X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2xhYmVsKGl0ZW0pKTsKKyAg
ICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9jaGlsZChp
dGVtKSk7CisgICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19lbmFi
bGVkKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9p
c19zZWxlY3RlZChpdGVtKSk7CisgICAgaXRlbSA9IHdlYmtpdF9vcHRpb25fbWVudV9nZXRfaXRl
bSh0ZXN0LT5tX21lbnUuZ2V0KCksIDEpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfb3B0
aW9uX21lbnVfaXRlbV9nZXRfbGFiZWwoaXRlbSksID09LCAiR3JvdXAgMSIpOworICAgIGdfYXNz
ZXJ0X251bGwod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X3Rvb2x0aXAoaXRlbSkpOworICAg
IGdfYXNzZXJ0X3RydWUod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfbGFiZWwoaXRl
bSkpOworICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3Vw
X2NoaWxkKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRl
bV9pc19lbmFibGVkKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21l
bnVfaXRlbV9pc19zZWxlY3RlZChpdGVtKSk7CisgICAgaXRlbSA9IHdlYmtpdF9vcHRpb25fbWVu
dV9nZXRfaXRlbSh0ZXN0LT5tX21lbnUuZ2V0KCksIDIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3
ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfbGFiZWwoaXRlbSksID09LCAiQ2hpbGQgMS0xIik7
CisgICAgZ19hc3NlcnRfbnVsbCh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfdG9vbHRpcChp
dGVtKSk7CisgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3Jv
dXBfbGFiZWwoaXRlbSkpOworICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X29wdGlvbl9tZW51X2l0
ZW1faXNfZ3JvdXBfY2hpbGQoaXRlbSkpOworICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X29wdGlv
bl9tZW51X2l0ZW1faXNfZW5hYmxlZChpdGVtKSk7CisgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0
X29wdGlvbl9tZW51X2l0ZW1faXNfc2VsZWN0ZWQoaXRlbSkpOworICAgIGl0ZW0gPSB3ZWJraXRf
b3B0aW9uX21lbnVfZ2V0X2l0ZW0odGVzdC0+bV9tZW51LmdldCgpLCAzKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X2xhYmVsKGl0ZW0pLCA9PSwgIkNo
aWxkIDEtMiIpOworICAgIGdfYXNzZXJ0X251bGwod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0
X3Rvb2x0aXAoaXRlbSkpOworICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9p
dGVtX2lzX2dyb3VwX2xhYmVsKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF9vcHRp
b25fbWVudV9pdGVtX2lzX2dyb3VwX2NoaWxkKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF9mYWxzZSh3
ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19lbmFibGVkKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF9m
YWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19zZWxlY3RlZChpdGVtKSk7CisgICAgaXRl
bSA9IHdlYmtpdF9vcHRpb25fbWVudV9nZXRfaXRlbSh0ZXN0LT5tX21lbnUuZ2V0KCksIDQpOwor
ICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfbGFiZWwoaXRl
bSksID09LCAiR3JvdXAgMiIpOworICAgIGdfYXNzZXJ0X251bGwod2Via2l0X29wdGlvbl9tZW51
X2l0ZW1fZ2V0X3Rvb2x0aXAoaXRlbSkpOworICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X29wdGlv
bl9tZW51X2l0ZW1faXNfZ3JvdXBfbGFiZWwoaXRlbSkpOworICAgIGdfYXNzZXJ0X2ZhbHNlKHdl
YmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2NoaWxkKGl0ZW0pKTsKKyAgICBnX2Fzc2Vy
dF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19lbmFibGVkKGl0ZW0pKTsKKyAgICBn
X2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19zZWxlY3RlZChpdGVtKSk7
CisgICAgaXRlbSA9IHdlYmtpdF9vcHRpb25fbWVudV9nZXRfaXRlbSh0ZXN0LT5tX21lbnUuZ2V0
KCksIDUpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRf
bGFiZWwoaXRlbSksID09LCAiQ2hpbGQgMi0xIik7CisgICAgZ19hc3NlcnRfbnVsbCh3ZWJraXRf
b3B0aW9uX21lbnVfaXRlbV9nZXRfdG9vbHRpcChpdGVtKSk7CisgICAgZ19hc3NlcnRfZmFsc2Uo
d2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfbGFiZWwoaXRlbSkpOworICAgIGdfYXNz
ZXJ0X3RydWUod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfY2hpbGQoaXRlbSkpOwor
ICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZW5hYmxlZChpdGVt
KSk7CisgICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19zZWxlY3Rl
ZChpdGVtKSk7CisgICAgaXRlbSA9IHdlYmtpdF9vcHRpb25fbWVudV9nZXRfaXRlbSh0ZXN0LT5t
X21lbnUuZ2V0KCksIDYpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfb3B0aW9uX21lbnVf
aXRlbV9nZXRfbGFiZWwoaXRlbSksID09LCAiQ2hpbGQgMi0yIik7CisgICAgZ19hc3NlcnRfbnVs
bCh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfdG9vbHRpcChpdGVtKSk7CisgICAgZ19hc3Nl
cnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfbGFiZWwoaXRlbSkpOwor
ICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfY2hpbGQo
aXRlbSkpOworICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZW5h
YmxlZChpdGVtKSk7CisgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1f
aXNfc2VsZWN0ZWQoaXRlbSkpOworICAgIGl0ZW0gPSB3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X2l0
ZW0odGVzdC0+bV9tZW51LmdldCgpLCA3KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X29w
dGlvbl9tZW51X2l0ZW1fZ2V0X2xhYmVsKGl0ZW0pLCA9PSwgIlRhaWwiKTsKKyAgICBnX2Fzc2Vy
dF9udWxsKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF90b29sdGlwKGl0ZW0pKTsKKyAgICBn
X2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9sYWJlbChpdGVt
KSk7CisgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBf
Y2hpbGQoaXRlbSkpOworICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X29wdGlvbl9tZW51X2l0ZW1f
aXNfZW5hYmxlZChpdGVtKSk7CisgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51
X2l0ZW1faXNfc2VsZWN0ZWQoaXRlbSkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0T3B0aW9uTWVu
dUFjdGl2YXRlKE9wdGlvbk1lbnVUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHN0
YXRpYyBjb25zdCBjaGFyIGh0bWxbXSA9CisgICAgICAgICI8aHRtbD48Ym9keT4iCisgICAgICAg
ICIgIDxzZWxlY3QgaWQ9J2NvbWJvJyBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsg
dG9wOjEwJz4iCisgICAgICAgICIgICAgPG9wdGlvbj5Gb288L29wdGlvbj4iCisgICAgICAgICIg
ICAgPG9wdGlvbj5CYXI8L29wdGlvbj4iCisgICAgICAgICIgICAgPG9wdGlvbj5CYXo8L29wdGlv
bj4iCisgICAgICAgICIgIDwvc2VsZWN0PjwvYm9keT48L2h0bWw+IjsKKyAgICB0ZXN0LT5zaG93
SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKKyAgICB0ZXN0LT5sb2FkSHRtbChodG1sLCBu
dWxscHRyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3Qt
PmNsaWNrQXRQb3NpdGlvbkFuZFdhaXRVbnRpbE9wdGlvbk1lbnVTaG93big1LCAxNSk7CisgICAg
Z19hc3NlcnRfdHJ1ZShXRUJLSVRfSVNfT1BUSU9OX01FTlUodGVzdC0+bV9tZW51LmdldCgpKSk7
CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9vcHRpb25fbWVudV9nZXRfbl9pdGVtcyh0ZXN0
LT5tX21lbnUuZ2V0KCkpLCA9PSwgMyk7CisgICAgdGVzdC0+YWN0aXZhdGVJdGVtKDEpOworICAg
IGF1dG8qIHJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgi
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbWJvJykuc2VsZWN0ZWRJbmRleCIsIG51bGxwdHIp
OworICAgIGdfYXNzZXJ0X25vbm51bGwocmVzdWx0KTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdChX
ZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvTnVtYmVyKHJlc3VsdCksID09LCAxKTsKKwor
ICAgIC8vIFdlIHNob3VsZCBjbG9zZSB0aGUgbWVudSBhZnRlciBhY3RpdmF0ZSwgZnVydGhlciBh
Y3RpdmF0ZXMgd2lsbCBiZSBpZ25vcmVkLgorICAgIHRlc3QtPmFjdGl2YXRlSXRlbSgyKTsKKyAg
ICByZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdjb21ibycpLnNlbGVjdGVkSW5kZXgiLCBudWxscHRyKTsKKyAg
ICBnX2Fzc2VydF9ub25udWxsKHJlc3VsdCk7CisgICAgZ19hc3NlcnRfY21wZmxvYXQoV2ViVmll
d1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb051bWJlcihyZXN1bHQpLCA9PSwgMSk7CisKKyAgICB0
ZXN0LT5jbG9zZSgpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0T3B0aW9uTWVudVNlbGVjdChPcHRp
b25NZW51VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hh
ciBodG1sW10gPQorICAgICAgICAiPGh0bWw+PGJvZHk+IgorICAgICAgICAiICA8c2VsZWN0IGlk
PSdjb21ibycgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDoxMCc+IgorICAg
ICAgICAiICAgIDxvcHRpb24+Rm9vPC9vcHRpb24+IgorICAgICAgICAiICAgIDxvcHRpb24+QmFy
PC9vcHRpb24+IgorICAgICAgICAiICAgIDxvcHRpb24+QmF6PC9vcHRpb24+IgorICAgICAgICAi
ICA8L3NlbGVjdD48L2JvZHk+PC9odG1sPiI7CisgICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2Fp
dFVudGlsTWFwcGVkKCk7CisgICAgdGVzdC0+bG9hZEh0bWwoaHRtbCwgbnVsbHB0cik7CisgICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5jbGlja0F0UG9zaXRp
b25BbmRXYWl0VW50aWxPcHRpb25NZW51U2hvd24oNSwgMTUpOworICAgIGdfYXNzZXJ0X3RydWUo
V0VCS0lUX0lTX09QVElPTl9NRU5VKHRlc3QtPm1fbWVudS5nZXQoKSkpOworICAgIGdfYXNzZXJ0
X2NtcGludCh3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X25faXRlbXModGVzdC0+bV9tZW51LmdldCgp
KSwgPT0sIDMpOworCisgICAgLy8gU2VsZWN0IGl0ZW0gY2hhbmdlcyB0aGUgY29tYm8gdGV4dCwg
YnV0IG5vdCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW0uCisgICAgdGVzdC0+c2VsZWN0SXRl
bSgyKTsKKyAgICBhdXRvKiByZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGls
RmluaXNoZWQoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb21ibycpLnNlbGVjdGVkSW5kZXgi
LCBudWxscHRyKTsKKyAgICBnX2Fzc2VydF9ub25udWxsKHJlc3VsdCk7CisgICAgZ19hc3NlcnRf
Y21wZmxvYXQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb051bWJlcihyZXN1bHQpLCA9
PSwgMCk7CisKKyAgICAvLyBJdCBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzLgorICAgIHRl
c3QtPnNlbGVjdEl0ZW0oMSk7CisgICAgcmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdh
aXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29tYm8nKS5zZWxlY3Rl
ZEluZGV4IiwgbnVsbHB0cik7CisgICAgZ19hc3NlcnRfbm9ubnVsbChyZXN1bHQpOworICAgIGdf
YXNzZXJ0X2NtcGZsb2F0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9OdW1iZXIocmVz
dWx0KSwgPT0sIDApOworCisgICAgLy8gQW5kIGNsb3NpbmcgdGhlIG1lbnUgYWN0aXZhdGVzIHRo
ZSBjdXJyZW50bHkgc2VsZWN0ZWQgaXRlbS4KKyAgICB0ZXN0LT5jbG9zZSgpOworICAgIHJlc3Vs
dCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2NvbWJvJykuc2VsZWN0ZWRJbmRleCIsIG51bGxwdHIpOworICAgIGdfYXNz
ZXJ0X25vbm51bGwocmVzdWx0KTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdChXZWJWaWV3VGVzdDo6
amF2YXNjcmlwdFJlc3VsdFRvTnVtYmVyKHJlc3VsdCksID09LCAxKTsKK30KKwordm9pZCBiZWZv
cmVBbGwoKQoreworICAgIE9wdGlvbk1lbnVUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAib3B0
aW9uLW1lbnUtc2ltcGxlIiwgdGVzdE9wdGlvbk1lbnVTaW1wbGUpOworICAgIE9wdGlvbk1lbnVU
ZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAib3B0aW9uLW1lbnUtZ3JvdXBzIiwgdGVzdE9wdGlv
bk1lbnVHcm91cHMpOworICAgIE9wdGlvbk1lbnVUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAi
b3B0aW9uLW1lbnUtYWN0aXZhdGUiLCB0ZXN0T3B0aW9uTWVudUFjdGl2YXRlKTsKKyAgICBPcHRp
b25NZW51VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgIm9wdGlvbi1tZW51LXNlbGVjdCIsIHRl
c3RPcHRpb25NZW51U2VsZWN0KTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7Cit9CmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0T3B0aW9uTWVudS5j
cHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0T3B0aW9uTWVudS5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3YzFjOWQzMjc5MzgxN2ViMzQ2NGVh
YjI5N2MyZTQ1ODkzYzhlZjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvVGVzdE9wdGlvbk1l
bnUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzA1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTcgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJW
aWV3VGVzdC5oIgotCi0jaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KLQotY2xhc3MgT3B0aW9uTWVu
dVRlc3QgOiBwdWJsaWMgV2ViVmlld1Rlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNU
X0ZJWFRVUkUoT3B0aW9uTWVudVRlc3QpOwotCi0gICAgT3B0aW9uTWVudVRlc3QoKQotICAgIHsK
LSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJzaG93LW9wdGlvbi1tZW51Iiwg
R19DQUxMQkFDSyhzaG93T3B0aW9uTWVudUNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgfQotCi0gICAg
fk9wdGlvbk1lbnVUZXN0KCkKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nv
bm5lY3RfbWF0Y2hlZChtX3dlYlZpZXcsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAs
IHRoaXMpOwotICAgICAgICBpZiAobV9tZW51KQotICAgICAgICAgICAgY2xvc2UoKTsKLSAgICB9
Ci0KLSAgICB2b2lkIGRlc3Ryb3lNZW51KCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9tZW51KQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5l
Y3RfbWF0Y2hlZChtX21lbnUuZ2V0KCksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAs
IHRoaXMpOwotICAgICAgICBtX21lbnUgPSBudWxscHRyOwotICAgIH0KLQotICAgIHN0YXRpYyBn
Ym9vbGVhbiBzaG93T3B0aW9uTWVudUNhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdl
YktpdE9wdGlvbk1lbnUqIG1lbnUsIEdka0V2ZW50KiBldmVudCwgR2RrUmVjdGFuZ2xlKiByZWN0
LCBPcHRpb25NZW51VGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0X3RydWUodGVz
dC0+bV93ZWJWaWV3ID09IHdlYlZpZXcpOwotICAgICAgICBnX2Fzc2VydF9ub25udWxsKHJlY3Qp
OwotICAgICAgICBnX2Fzc2VydF90cnVlKFdFQktJVF9JU19PUFRJT05fTUVOVShtZW51KSk7Ci0g
ICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpF
Q1QobWVudSkpOwotICAgICAgICB0ZXN0LT5zaG93T3B0aW9uTWVudShtZW51LCByZWN0KTsKLSAg
ICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgbWVudUNsb3NlQ2Fs
bGJhY2soV2ViS2l0T3B0aW9uTWVudSogbWVudSwgT3B0aW9uTWVudVRlc3QqIHRlc3QpCi0gICAg
ewotICAgICAgICBnX2Fzc2VydF90cnVlKHRlc3QtPm1fbWVudS5nZXQoKSA9PSBtZW51KTsKLSAg
ICAgICAgdGVzdC0+ZGVzdHJveU1lbnUoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNob3dPcHRpb25N
ZW51KFdlYktpdE9wdGlvbk1lbnUqIG1lbnUsIEdka1JlY3RhbmdsZSogcmVjdCkKLSAgICB7Ci0g
ICAgICAgIG1fcmVjdGFuZ2xlID0gKnJlY3Q7Ci0gICAgICAgIG1fbWVudSA9IG1lbnU7Ci0gICAg
ICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9tZW51LmdldCgpLCAiY2xvc2UiLCBHX0NBTExCQUNLKG1l
bnVDbG9zZUNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWlu
TG9vcCk7Ci0gICAgfQotCi0gICAgdm9pZCBjbGlja0F0UG9zaXRpb25BbmRXYWl0VW50aWxPcHRp
b25NZW51U2hvd24oaW50IHgsIGludCB5KQotICAgIHsKLSAgICAgICAgbV9tZW51ID0gbnVsbHB0
cjsKLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCB4LCB5XSB7IGNsaWNr
TW91c2VCdXR0b24oeCwgeSk7IH0pOwotICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9v
cCk7Ci0gICAgfQotCi0gICAgdm9pZCBjbG9zZSgpCi0gICAgewotICAgICAgICBnX2Fzc2VydF9u
b25udWxsKG1fbWVudS5nZXQoKSk7Ci0gICAgICAgIHdlYmtpdF9vcHRpb25fbWVudV9jbG9zZSht
X21lbnUuZ2V0KCkpOwotICAgICAgICBnX2Fzc2VydF9udWxsKG1fbWVudS5nZXQoKSk7Ci0gICAg
fQotCi0gICAgdm9pZCBhY3RpdmF0ZUl0ZW0odW5zaWduZWQgaXRlbSkKLSAgICB7Ci0gICAgICAg
IGdfYXNzZXJ0X25vbm51bGwobV9tZW51LmdldCgpKTsKLSAgICAgICAgd2Via2l0X29wdGlvbl9t
ZW51X2FjdGl2YXRlX2l0ZW0obV9tZW51LmdldCgpLCBpdGVtKTsKLSAgICAgICAgZ19hc3NlcnRf
bm9ubnVsbChtX21lbnUuZ2V0KCkpOwotICAgIH0KLQotICAgIHZvaWQgc2VsZWN0SXRlbSh1bnNp
Z25lZCBpdGVtKQotICAgIHsKLSAgICAgICAgZ19hc3NlcnRfbm9ubnVsbChtX21lbnUuZ2V0KCkp
OwotICAgICAgICB3ZWJraXRfb3B0aW9uX21lbnVfc2VsZWN0X2l0ZW0obV9tZW51LmdldCgpLCBp
dGVtKTsKLSAgICAgICAgZ19hc3NlcnRfbm9ubnVsbChtX21lbnUuZ2V0KCkpOwotICAgIH0KLQot
ICAgIEdSZWZQdHI8V2ViS2l0T3B0aW9uTWVudT4gbV9tZW51OwotICAgIEdka1JlY3RhbmdsZSBt
X3JlY3RhbmdsZTsKLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RPcHRpb25NZW51U2ltcGxlKE9wdGlv
bk1lbnVUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHN0YXRpYyBjb25zdCBjaGFy
IGh0bWxbXSA9Ci0gICAgICAgICI8aHRtbD48Ym9keT4iCi0gICAgICAgICIgIDxzZWxlY3Qgc3R5
bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDoxMCc+IgotICAgICAgICAiICAgIDxv
cHRpb24gdGl0bGU9J1RoZSBGb28gT3B0aW9uJz5Gb288L29wdGlvbj4iCi0gICAgICAgICIgICAg
PG9wdGlvbiBzZWxlY3RlZD5CYXI8L29wdGlvbj4iCi0gICAgICAgICIgICAgPG9wdGlvbiBkaXNh
YmxlZD5CYXo8L29wdGlvbj4iCi0gICAgICAgICIgIDwvc2VsZWN0PjwvYm9keT48L2h0bWw+IjsK
LSAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKLSAgICB0ZXN0LT5s
b2FkSHRtbChodG1sLCBudWxscHRyKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQo
KTsKLQotICAgIHRlc3QtPmNsaWNrQXRQb3NpdGlvbkFuZFdhaXRVbnRpbE9wdGlvbk1lbnVTaG93
big1LCAxNSk7Ci0gICAgZ19hc3NlcnRfdHJ1ZShXRUJLSVRfSVNfT1BUSU9OX01FTlUodGVzdC0+
bV9tZW51LmdldCgpKSk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9vcHRpb25fbWVudV9n
ZXRfbl9pdGVtcyh0ZXN0LT5tX21lbnUuZ2V0KCkpLCA9PSwgMyk7Ci0gICAgYXV0byogaXRlbSA9
IHdlYmtpdF9vcHRpb25fbWVudV9nZXRfaXRlbSh0ZXN0LT5tX21lbnUuZ2V0KCksIDApOwotICAg
IGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfbGFiZWwoaXRlbSks
ID09LCAiRm9vIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9vcHRpb25fbWVudV9pdGVt
X2dldF90b29sdGlwKGl0ZW0pLCA9PSwgIlRoZSBGb28gT3B0aW9uIik7Ci0gICAgZ19hc3NlcnRf
ZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfbGFiZWwoaXRlbSkpOwotICAg
IGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2NoaWxkKGl0
ZW0pKTsKLSAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2VuYWJs
ZWQoaXRlbSkpOwotICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lz
X3NlbGVjdGVkKGl0ZW0pKTsKLSAgICBpdGVtID0gd2Via2l0X29wdGlvbl9tZW51X2dldF9pdGVt
KHRlc3QtPm1fbWVudS5nZXQoKSwgMSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9vcHRp
b25fbWVudV9pdGVtX2dldF9sYWJlbChpdGVtKSwgPT0sICJCYXIiKTsKLSAgICBnX2Fzc2VydF9u
dWxsKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF90b29sdGlwKGl0ZW0pKTsKLSAgICBnX2Fz
c2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9sYWJlbChpdGVtKSk7
Ci0gICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfY2hp
bGQoaXRlbSkpOwotICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNf
ZW5hYmxlZChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRl
bV9pc19zZWxlY3RlZChpdGVtKSk7Ci0gICAgaXRlbSA9IHdlYmtpdF9vcHRpb25fbWVudV9nZXRf
aXRlbSh0ZXN0LT5tX21lbnUuZ2V0KCksIDIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRf
b3B0aW9uX21lbnVfaXRlbV9nZXRfbGFiZWwoaXRlbSksID09LCAiQmF6Iik7Ci0gICAgZ19hc3Nl
cnRfbnVsbCh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfdG9vbHRpcChpdGVtKSk7Ci0gICAg
Z19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfbGFiZWwoaXRl
bSkpOwotICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3Vw
X2NoaWxkKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRl
bV9pc19lbmFibGVkKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21l
bnVfaXRlbV9pc19zZWxlY3RlZChpdGVtKSk7Ci0KLSAgICB0ZXN0LT5jbG9zZSgpOwotICAgIGdf
YXNzZXJ0X251bGwodGVzdC0+bV9tZW51LmdldCgpKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdE9w
dGlvbk1lbnVHcm91cHMoT3B0aW9uTWVudVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0g
ICAgc3RhdGljIGNvbnN0IGNoYXIgaHRtbFtdID0KLSAgICAgICAgIjxodG1sPjxib2R5PiIKLSAg
ICAgICAgIiAgPHNlbGVjdCBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjEw
Jz4iCi0gICAgICAgICIgICAgPG9wdGlvbj5Sb290PC9vcHRpb24+IgotICAgICAgICAiICAgIDxv
cHRncm91cCBsYWJlbD0nR3JvdXAgMSc+IgotICAgICAgICAiICAgICAgPG9wdGlvbj5DaGlsZCAx
LTE8L29wdGlvbj4iCi0gICAgICAgICIgICAgICA8b3B0aW9uIGRpc2FibGVkPkNoaWxkIDEtMjwv
b3B0aW9uPiIKLSAgICAgICAgIiAgICA8L29wdGdyb3VwPiIKLSAgICAgICAgIiAgICA8b3B0Z3Jv
dXAgbGFiZWw9J0dyb3VwIDInPiIKLSAgICAgICAgIiAgICAgIDxvcHRpb24gc2VsZWN0ZWQ+Q2hp
bGQgMi0xPC9vcHRpb24+IgotICAgICAgICAiICAgICAgPG9wdGlvbj5DaGlsZCAyLTI8L29wdGlv
bj4iCi0gICAgICAgICIgICAgPC9vcHRncm91cD4iCi0gICAgICAgICIgICAgPG9wdGlvbj5UYWls
PC9vcHRpb24+IgotICAgICAgICAiICA8L3NlbGVjdD48L2JvZHk+PC9odG1sPiI7Ci0gICAgdGVz
dC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7Ci0gICAgdGVzdC0+bG9hZEh0bWwo
aHRtbCwgbnVsbHB0cik7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAg
ICB0ZXN0LT5jbGlja0F0UG9zaXRpb25BbmRXYWl0VW50aWxPcHRpb25NZW51U2hvd24oNSwgMTUp
OwotICAgIGdfYXNzZXJ0X3RydWUoV0VCS0lUX0lTX09QVElPTl9NRU5VKHRlc3QtPm1fbWVudS5n
ZXQoKSkpOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X25faXRl
bXModGVzdC0+bV9tZW51LmdldCgpKSwgPT0sIDgpOwotICAgIGF1dG8qIGl0ZW0gPSB3ZWJraXRf
b3B0aW9uX21lbnVfZ2V0X2l0ZW0odGVzdC0+bV9tZW51LmdldCgpLCAwKTsKLSAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X2xhYmVsKGl0ZW0pLCA9PSwgIlJv
b3QiKTsKLSAgICBnX2Fzc2VydF9udWxsKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF90b29s
dGlwKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9p
c19ncm91cF9sYWJlbChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9t
ZW51X2l0ZW1faXNfZ3JvdXBfY2hpbGQoaXRlbSkpOwotICAgIGdfYXNzZXJ0X3RydWUod2Via2l0
X29wdGlvbl9tZW51X2l0ZW1faXNfZW5hYmxlZChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfZmFsc2Uo
d2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfc2VsZWN0ZWQoaXRlbSkpOwotICAgIGl0ZW0gPSB3
ZWJraXRfb3B0aW9uX21lbnVfZ2V0X2l0ZW0odGVzdC0+bV9tZW51LmdldCgpLCAxKTsKLSAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X2xhYmVsKGl0ZW0pLCA9
PSwgIkdyb3VwIDEiKTsKLSAgICBnX2Fzc2VydF9udWxsKHdlYmtpdF9vcHRpb25fbWVudV9pdGVt
X2dldF90b29sdGlwKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF9vcHRpb25fbWVu
dV9pdGVtX2lzX2dyb3VwX2xhYmVsKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRf
b3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9jaGlsZChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfZmFs
c2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZW5hYmxlZChpdGVtKSk7Ci0gICAgZ19hc3Nl
cnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfc2VsZWN0ZWQoaXRlbSkpOwotICAg
IGl0ZW0gPSB3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X2l0ZW0odGVzdC0+bV9tZW51LmdldCgpLCAy
KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X2xhYmVs
KGl0ZW0pLCA9PSwgIkNoaWxkIDEtMSIpOwotICAgIGdfYXNzZXJ0X251bGwod2Via2l0X29wdGlv
bl9tZW51X2l0ZW1fZ2V0X3Rvb2x0aXAoaXRlbSkpOwotICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtp
dF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2xhYmVsKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF90
cnVlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2NoaWxkKGl0ZW0pKTsKLSAgICBn
X2Fzc2VydF90cnVlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2VuYWJsZWQoaXRlbSkpOwot
ICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX3NlbGVjdGVkKGl0
ZW0pKTsKLSAgICBpdGVtID0gd2Via2l0X29wdGlvbl9tZW51X2dldF9pdGVtKHRlc3QtPm1fbWVu
dS5nZXQoKSwgMyk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9vcHRpb25fbWVudV9pdGVt
X2dldF9sYWJlbChpdGVtKSwgPT0sICJDaGlsZCAxLTIiKTsKLSAgICBnX2Fzc2VydF9udWxsKHdl
YmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF90b29sdGlwKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF9m
YWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9sYWJlbChpdGVtKSk7Ci0gICAg
Z19hc3NlcnRfdHJ1ZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9jaGlsZChpdGVt
KSk7Ci0gICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZW5hYmxl
ZChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNf
c2VsZWN0ZWQoaXRlbSkpOwotICAgIGl0ZW0gPSB3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X2l0ZW0o
dGVzdC0+bV9tZW51LmdldCgpLCA0KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X29wdGlv
bl9tZW51X2l0ZW1fZ2V0X2xhYmVsKGl0ZW0pLCA9PSwgIkdyb3VwIDIiKTsKLSAgICBnX2Fzc2Vy
dF9udWxsKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF90b29sdGlwKGl0ZW0pKTsKLSAgICBn
X2Fzc2VydF90cnVlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2xhYmVsKGl0ZW0p
KTsKLSAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9j
aGlsZChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1f
aXNfZW5hYmxlZChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51
X2l0ZW1faXNfc2VsZWN0ZWQoaXRlbSkpOwotICAgIGl0ZW0gPSB3ZWJraXRfb3B0aW9uX21lbnVf
Z2V0X2l0ZW0odGVzdC0+bV9tZW51LmdldCgpLCA1KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X2xhYmVsKGl0ZW0pLCA9PSwgIkNoaWxkIDItMSIpOwot
ICAgIGdfYXNzZXJ0X251bGwod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X3Rvb2x0aXAoaXRl
bSkpOwotICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3Vw
X2xhYmVsKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVt
X2lzX2dyb3VwX2NoaWxkKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF9vcHRpb25f
bWVudV9pdGVtX2lzX2VuYWJsZWQoaXRlbSkpOwotICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X29w
dGlvbl9tZW51X2l0ZW1faXNfc2VsZWN0ZWQoaXRlbSkpOwotICAgIGl0ZW0gPSB3ZWJraXRfb3B0
aW9uX21lbnVfZ2V0X2l0ZW0odGVzdC0+bV9tZW51LmdldCgpLCA2KTsKLSAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X2xhYmVsKGl0ZW0pLCA9PSwgIkNoaWxk
IDItMiIpOwotICAgIGdfYXNzZXJ0X251bGwod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X3Rv
b2x0aXAoaXRlbSkpOwotICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVt
X2lzX2dyb3VwX2xhYmVsKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF9vcHRpb25f
bWVudV9pdGVtX2lzX2dyb3VwX2NoaWxkKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF90cnVlKHdlYmtp
dF9vcHRpb25fbWVudV9pdGVtX2lzX2VuYWJsZWQoaXRlbSkpOwotICAgIGdfYXNzZXJ0X2ZhbHNl
KHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX3NlbGVjdGVkKGl0ZW0pKTsKLSAgICBpdGVtID0g
d2Via2l0X29wdGlvbl9tZW51X2dldF9pdGVtKHRlc3QtPm1fbWVudS5nZXQoKSwgNyk7Ci0gICAg
Z19hc3NlcnRfY21wc3RyKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF9sYWJlbChpdGVtKSwg
PT0sICJUYWlsIik7Ci0gICAgZ19hc3NlcnRfbnVsbCh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9n
ZXRfdG9vbHRpcChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51
X2l0ZW1faXNfZ3JvdXBfbGFiZWwoaXRlbSkpOwotICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9v
cHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2NoaWxkKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF90cnVl
KHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2VuYWJsZWQoaXRlbSkpOwotICAgIGdfYXNzZXJ0
X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX3NlbGVjdGVkKGl0ZW0pKTsKLX0KLQot
c3RhdGljIHZvaWQgdGVzdE9wdGlvbk1lbnVBY3RpdmF0ZShPcHRpb25NZW51VGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hhciBodG1sW10gPQotICAgICAg
ICAiPGh0bWw+PGJvZHk+IgotICAgICAgICAiICA8c2VsZWN0IGlkPSdjb21ibycgc3R5bGU9J3Bv
c2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDoxMCc+IgotICAgICAgICAiICAgIDxvcHRpb24+
Rm9vPC9vcHRpb24+IgotICAgICAgICAiICAgIDxvcHRpb24+QmFyPC9vcHRpb24+IgotICAgICAg
ICAiICAgIDxvcHRpb24+QmF6PC9vcHRpb24+IgotICAgICAgICAiICA8L3NlbGVjdD48L2JvZHk+
PC9odG1sPiI7Ci0gICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7Ci0g
ICAgdGVzdC0+bG9hZEh0bWwoaHRtbCwgbnVsbHB0cik7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7Ci0KLSAgICB0ZXN0LT5jbGlja0F0UG9zaXRpb25BbmRXYWl0VW50aWxPcHRp
b25NZW51U2hvd24oNSwgMTUpOwotICAgIGdfYXNzZXJ0X3RydWUoV0VCS0lUX0lTX09QVElPTl9N
RU5VKHRlc3QtPm1fbWVudS5nZXQoKSkpOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfb3B0
aW9uX21lbnVfZ2V0X25faXRlbXModGVzdC0+bV9tZW51LmdldCgpKSwgPT0sIDMpOwotICAgIHRl
c3QtPmFjdGl2YXRlSXRlbSgxKTsKLSAgICBhdXRvKiByZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2Ny
aXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb21ibycp
LnNlbGVjdGVkSW5kZXgiLCBudWxscHRyKTsKLSAgICBnX2Fzc2VydF9ub25udWxsKHJlc3VsdCk7
Ci0gICAgZ19hc3NlcnRfY21wZmxvYXQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb051
bWJlcihyZXN1bHQpLCA9PSwgMSk7Ci0KLSAgICAvLyBXZSBzaG91bGQgY2xvc2UgdGhlIG1lbnUg
YWZ0ZXIgYWN0aXZhdGUsIGZ1cnRoZXIgYWN0aXZhdGVzIHdpbGwgYmUgaWdub3JlZC4KLSAgICB0
ZXN0LT5hY3RpdmF0ZUl0ZW0oMik7Ci0gICAgcmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFu
ZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29tYm8nKS5zZWxl
Y3RlZEluZGV4IiwgbnVsbHB0cik7Ci0gICAgZ19hc3NlcnRfbm9ubnVsbChyZXN1bHQpOwotICAg
IGdfYXNzZXJ0X2NtcGZsb2F0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9OdW1iZXIo
cmVzdWx0KSwgPT0sIDEpOwotCi0gICAgdGVzdC0+Y2xvc2UoKTsKLX0KLQotc3RhdGljIHZvaWQg
dGVzdE9wdGlvbk1lbnVTZWxlY3QoT3B0aW9uTWVudVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
Ci17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIgaHRtbFtdID0KLSAgICAgICAgIjxodG1sPjxib2R5
PiIKLSAgICAgICAgIiAgPHNlbGVjdCBpZD0nY29tYm8nIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0
ZTsgbGVmdDoxOyB0b3A6MTAnPiIKLSAgICAgICAgIiAgICA8b3B0aW9uPkZvbzwvb3B0aW9uPiIK
LSAgICAgICAgIiAgICA8b3B0aW9uPkJhcjwvb3B0aW9uPiIKLSAgICAgICAgIiAgICA8b3B0aW9u
PkJhejwvb3B0aW9uPiIKLSAgICAgICAgIiAgPC9zZWxlY3Q+PC9ib2R5PjwvaHRtbD4iOwotICAg
IHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOwotICAgIHRlc3QtPmxvYWRI
dG1sKGh0bWwsIG51bGxwdHIpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwot
Ci0gICAgdGVzdC0+Y2xpY2tBdFBvc2l0aW9uQW5kV2FpdFVudGlsT3B0aW9uTWVudVNob3duKDUs
IDE1KTsKLSAgICBnX2Fzc2VydF90cnVlKFdFQktJVF9JU19PUFRJT05fTUVOVSh0ZXN0LT5tX21l
bnUuZ2V0KCkpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X29wdGlvbl9tZW51X2dldF9u
X2l0ZW1zKHRlc3QtPm1fbWVudS5nZXQoKSksID09LCAzKTsKLQotICAgIC8vIFNlbGVjdCBpdGVt
IGNoYW5nZXMgdGhlIGNvbWJvIHRleHQsIGJ1dCBub3QgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBp
dGVtLgotICAgIHRlc3QtPnNlbGVjdEl0ZW0oMik7Ci0gICAgYXV0byogcmVzdWx0ID0gdGVzdC0+
cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnY29tYm8nKS5zZWxlY3RlZEluZGV4IiwgbnVsbHB0cik7Ci0gICAgZ19hc3NlcnRfbm9ubnVs
bChyZXN1bHQpOwotICAgIGdfYXNzZXJ0X2NtcGZsb2F0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0
UmVzdWx0VG9OdW1iZXIocmVzdWx0KSwgPT0sIDApOwotCi0gICAgLy8gSXQgY2FuIGJlIGNhbGxl
ZCBtdWx0aXBsZSB0aW1lcy4KLSAgICB0ZXN0LT5zZWxlY3RJdGVtKDEpOwotICAgIHJlc3VsdCA9
IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ2NvbWJvJykuc2VsZWN0ZWRJbmRleCIsIG51bGxwdHIpOwotICAgIGdfYXNzZXJ0
X25vbm51bGwocmVzdWx0KTsKLSAgICBnX2Fzc2VydF9jbXBmbG9hdChXZWJWaWV3VGVzdDo6amF2
YXNjcmlwdFJlc3VsdFRvTnVtYmVyKHJlc3VsdCksID09LCAwKTsKLQotICAgIC8vIEFuZCBjbG9z
aW5nIHRoZSBtZW51IGFjdGl2YXRlcyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW0uCi0gICAg
dGVzdC0+Y2xvc2UoKTsKLSAgICByZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVu
dGlsRmluaXNoZWQoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb21ibycpLnNlbGVjdGVkSW5k
ZXgiLCBudWxscHRyKTsKLSAgICBnX2Fzc2VydF9ub25udWxsKHJlc3VsdCk7Ci0gICAgZ19hc3Nl
cnRfY21wZmxvYXQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb051bWJlcihyZXN1bHQp
LCA9PSwgMSk7Ci19Ci0KLXZvaWQgYmVmb3JlQWxsKCkKLXsKLSAgICBPcHRpb25NZW51VGVzdDo6
YWRkKCJXZWJLaXRXZWJWaWV3IiwgIm9wdGlvbi1tZW51LXNpbXBsZSIsIHRlc3RPcHRpb25NZW51
U2ltcGxlKTsKLSAgICBPcHRpb25NZW51VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgIm9wdGlv
bi1tZW51LWdyb3VwcyIsIHRlc3RPcHRpb25NZW51R3JvdXBzKTsKLSAgICBPcHRpb25NZW51VGVz
dDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgIm9wdGlvbi1tZW51LWFjdGl2YXRlIiwgdGVzdE9wdGlv
bk1lbnVBY3RpdmF0ZSk7Ci0gICAgT3B0aW9uTWVudVRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIs
ICJvcHRpb24tbWVudS1zZWxlY3QiLCB0ZXN0T3B0aW9uTWVudVNlbGVjdCk7Ci19Ci0KLXZvaWQg
YWZ0ZXJBbGwoKQotewotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9nbGliL0NN
YWtlTGlzdHMudHh0IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9nbGliL0NNYWtlTGlzdHMudHh0Cmlu
ZGV4IDEyYWFmNWYxMzJjNWY3MTg1YTY0Yzg1MTU5ZTZmZDNiMzI2OGEyN2YuLjM1YmViZWU2Mzk3
ZmE0YTQwZDIwMWIzMGM5NDBiZGU3ZTE5ZGQ0M2QgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvZ2xpYi9DTWFrZUxpc3RzLnR4dAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2dsaWIv
Q01ha2VMaXN0cy50eHQKQEAgLTEyNyw2ICsxMjcsNyBAQCBBRERfV0syX1RFU1QoVGVzdEVkaXRv
ciAke1RPT0xTX0RJUn0vVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RFZGl0b3Iu
YwogQUREX1dLMl9URVNUKFRlc3RGcmFtZSAke1RPT0xTX0RJUn0vVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRHTGliL1Rlc3RGcmFtZS5jcHApCiBBRERfV0syX1RFU1QoVGVzdExvYWRlckNsaWVu
dCAke1RPT0xTX0RJUn0vVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RMb2FkZXJD
bGllbnQuY3BwKQogQUREX1dLMl9URVNUKFRlc3RNdWx0aXByb2Nlc3MgJHtUT09MU19ESVJ9L1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0TXVsdGlwcm9jZXNzLmNwcCkKK0FERF9X
SzJfVEVTVChUZXN0T3B0aW9uTWVudSAke1RPT0xTX0RJUn0vVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRHTGliL1Rlc3RPcHRpb25NZW51LmNwcCkKIEFERF9XSzJfVEVTVChUZXN0UmVzb3VyY2Vz
ICR7VE9PTFNfRElSfS9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFJlc291cmNl
cy5jcHApCiBBRERfV0syX1RFU1QoVGVzdFNTTCAke1RPT0xTX0RJUn0vVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRHTGliL1Rlc3RTU0wuY3BwKQogQUREX1dLMl9URVNUKFRlc3RVSUNsaWVudCAk
e1RPT0xTX0RJUn0vVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RVSUNsaWVudC5j
cHApCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2dsaWIvUGxhdGZvcm1HVEsuY21h
a2UgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2dsaWIvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggOWIy
M2U3NGFiZGUwYzFiMWI0ZWU0NzllMTIwOTczN2JhZmEyZjI2Ny4uYTU4NmE2YTY4YTM1NTdhZjg1
NjNkNzM5MzZhZmEzZjRjYjdjYzg5OSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9n
bGliL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ2xpYi9QbGF0
Zm9ybUdUSy5jbWFrZQpAQCAtNDEsNyArNDEsNiBAQCBBRERfV0syX1RFU1QoVGVzdERPTU5vZGVG
aWx0ZXIgJHtUT09MU19ESVJ9L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL1Rlc3RETwog
QUREX1dLMl9URVNUKFRlc3RET01YUGF0aE5TUmVzb2x2ZXIgJHtUT09MU19ESVJ9L1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0R3RrL1Rlc3RET01YUGF0aE5TUmVzb2x2ZXIuY3BwKQogQUREX1dL
Ml9URVNUKFRlc3RJbnNwZWN0b3IgJHtUT09MU19ESVJ9L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0R3RrL1Rlc3RJbnNwZWN0b3IuY3BwKQogQUREX1dLMl9URVNUKFRlc3RJbnNwZWN0b3JTZXJ2
ZXIgJHtUT09MU19ESVJ9L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL1Rlc3RJbnNwZWN0
b3JTZXJ2ZXIuY3BwKQotQUREX1dLMl9URVNUKFRlc3RPcHRpb25NZW51ICR7VE9PTFNfRElSfS9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0T3B0aW9uTWVudS5jcHApCiBBRERfV0sy
X1RFU1QoVGVzdFByaW50aW5nICR7VE9PTFNfRElSfS9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dEd0ay9UZXN0UHJpbnRpbmcuY3BwKQogQUREX1dLMl9URVNUKFRlc3RXZWJLaXRGYXZpY29uRGF0
YWJhc2UgJHtUT09MU19ESVJ9L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0V2Vi
S2l0RmF2aWNvbkRhdGFiYXNlLmNwcCkKIEFERF9XSzJfVEVTVChUZXN0V2ViS2l0VmVyc2lvbiAk
e1RPT0xTX0RJUn0vVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvVGVzdFdlYktpdFZlcnNp
b24uY3BwKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387915</attachid>
            <date>2020-01-16 06:27:18 -0800</date>
            <delta_ts>2020-01-17 00:03:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206287-20200116152716.patch</filename>
            <type>text/plain</type>
            <size>93754</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0NjcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDQ5NGMxMTQ0ZmIwOWUyZTMz
NDM2NWUxNzNhOTZhYmFmMjc5NjJkYWEuLmM1NjI0ZTY1YjNiMTZhNjIyYjliNmU0ODBkMGY0YmFi
MjI4M2FmZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTE2IEBACisyMDIwLTAxLTE2ICBaYW4gRG9i
ZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbV1BFXSBFeHBvc2UgdGhl
IFdlYktpdE9wdGlvbk1lbnUgQVBJcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjA2Mjg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgRW5hYmxlIHRoZSBHTGliLWJhc2VkIEFQSSBjb3ZlcmluZyBvcHRpb24g
bWVudSBmdW5jdGlvbmFsaXR5IGZvciBXUEUuCisKKyAgICAgICAgTW9zdCBvZiB0aGlzIGNhbiBi
ZSBzaGFyZWQgd2l0aCB0aGUgR1RLIHBvcnQuIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgaW4KKyAg
ICAgICAgdGhlIHR3byBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZW1pdHRlZCBvbiB0aGUgV2ViS2l0
V2ViVmlldydzICJzaG93LW1lbnUiCisgICAgICAgIHNpZ25hbCAoR2RrRXZlbnQgYW5kIEdka1Jl
Y3RhbmdsZSkgdGhhdCBXUEUgZG9lc24ndCBzdXBwb3J0IGF0IHRoZQorICAgICAgICBtb21lbnQu
IFRoZSByZWN0YW5nbGUgaW5mb3JtYXRpb24gd2lsbCBiZSBwb3NzaWJsZSB0byBlbWl0IGluIHRo
ZSBuZWFyCisgICAgICAgIGZ1dHVyZSBvbmNlIGEgdXNhYmxlIEFQSSB0eXBlIGlzIGF2YWlsYWJs
ZSBmb3IgdGhpcyBpbmZvcm1hdGlvbi4KKworICAgICAgICBUaGUgcmVsZXZhbnQgQVBJIHRlc3Qg
aXMgZW5hYmxlZCBmb3IgV1BFLgorCisgICAgICAgICogUGxhdGZvcm1XUEUuY21ha2U6CisgICAg
ICAgICogU291cmNlc0dUSy50eHQ6CisgICAgICAgICogU291cmNlc1dQRS50eHQ6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9DL3dwZS9XS1ZpZXcuY3BwOgorICAgICAgICAoV0tWaWV3Q3JlYXRl
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0T3B0aW9uTWVudS5jcHA6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE9wdGlvbk1l
bnUuY3BwLgorICAgICAgICAod2Via2l0T3B0aW9uTWVudUNyZWF0ZSk6CisgICAgICAgICh3ZWJr
aXRfb3B0aW9uX21lbnVfZ2V0X25faXRlbXMpOgorICAgICAgICAod2Via2l0X29wdGlvbl9tZW51
X2dldF9pdGVtKToKKyAgICAgICAgKHdlYmtpdF9vcHRpb25fbWVudV9zZWxlY3RfaXRlbSk6Cisg
ICAgICAgICh3ZWJraXRfb3B0aW9uX21lbnVfYWN0aXZhdGVfaXRlbSk6CisgICAgICAgICh3ZWJr
aXRfb3B0aW9uX21lbnVfY2xvc2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJL
aXRPcHRpb25NZW51SXRlbS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdE9wdGlvbk1lbnVJdGVtLmNwcC4KKyAgICAgICAgKHdlYmtpdF9vcHRp
b25fbWVudV9pdGVtX2NvcHkpOgorICAgICAgICAod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZnJl
ZSk6CisgICAgICAgICh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfbGFiZWwpOgorICAgICAg
ICAod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X3Rvb2x0aXApOgorICAgICAgICAod2Via2l0
X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfbGFiZWwpOgorICAgICAgICAod2Via2l0X29wdGlv
bl9tZW51X2l0ZW1faXNfZ3JvdXBfY2hpbGQpOgorICAgICAgICAod2Via2l0X29wdGlvbl9tZW51
X2l0ZW1faXNfZW5hYmxlZCk6CisgICAgICAgICh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19z
ZWxlY3RlZCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdE9wdGlvbk1lbnVJ
dGVtUHJpdmF0ZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRPcHRpb25NZW51SXRlbVByaXZhdGUuaC4KKyAgICAgICAgKF9XZWJLaXRPcHRpb25N
ZW51SXRlbTo6X1dlYktpdE9wdGlvbk1lbnVJdGVtKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2dsaWIvV2ViS2l0T3B0aW9uTWVudVByaXZhdGUuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0T3B0aW9uTWVudVByaXZhdGUuaC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5jcHA6CisgICAgICAgICh3ZWJraXRf
d2ViX3ZpZXdfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3Q3JlYXRlUGFnZSk6
CisgICAgICAgICh3ZWJraXRXZWJWaWV3U2hvd09wdGlvbk1lbnUpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvd3BlL1BhZ2VDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVu
dEltcGw6OmNyZWF0ZVBvcHVwTWVudVByb3h5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dw
ZS9XUEVWaWV3LmNwcDoKKyAgICAgICAgKFdLV1BFOjpWaWV3OjpWaWV3KToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL3dwZS9XUEVWaWV3Lmg6CisgICAgICAgIChXS1dQRTo6Vmlldzo6Y3JlYXRl
KToKKyAgICAgICAgKFdLV1BFOjpWaWV3Ojp3ZWJWaWV3KToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL3dwZS9XZWJLaXRPcHRpb25NZW51Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvd3BlL1dlYktpdE9wdGlvbk1lbnVJdGVtLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvd3BlL1dlYktpdFBvcHVwTWVudS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpX
ZWJLaXRQb3B1cE1lbnU6OldlYktpdFBvcHVwTWVudSk6CisgICAgICAgIChXZWJLaXQ6Om1lbnVD
bG9zZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0UG9wdXBNZW51OjpzaG93UG9w
dXBNZW51KToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0UG9wdXBNZW51OjpoaWRlUG9wdXBNZW51
KToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0UG9wdXBNZW51OjpjYW5jZWxUcmFja2luZyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYktpdFBvcHVwTWVudTo6c2VsZWN0SXRlbSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYktpdFBvcHVwTWVudTo6YWN0aXZhdGVJdGVtKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL3dwZS9XZWJLaXRQb3B1cE1lbnUuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS93cGUvV2ViS2l0V2ViVmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL2Rv
Y3Mvd3BlLTEuMC1zZWN0aW9ucy50eHQ6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvd2Vi
a2l0Lmg6CisKKzIwMjAtMDEtMTYgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29t
PgorCisgICAgICAgIFtXUEVdIEV4cG9zZSB0aGUgV2ViS2l0T3B0aW9uTWVudSBBUElzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDYyODcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMg
KE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtV1BFLmNtYWtlOgorICAgICAgICAqIFNvdXJj
ZXNHVEsudHh0OgorICAgICAgICAqIFNvdXJjZXNXUEUudHh0OgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQy93cGUvV0tWaWV3LmNwcDoKKyAgICAgICAgKFdLVmlld0NyZWF0ZSk6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdE9wdGlvbk1lbnUuY3BwOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRPcHRpb25NZW51LmNwcC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0T3B0aW9uTWVudUl0ZW0uY3BwOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRPcHRpb25NZW51
SXRlbS5jcHAuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdE9wdGlvbk1lbnVJ
dGVtUHJpdmF0ZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRPcHRpb25NZW51SXRlbVByaXZhdGUuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2dsaWIvV2ViS2l0T3B0aW9uTWVudVByaXZhdGUuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0T3B0aW9uTWVudVByaXZhdGUuaC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5jcHA6CisgICAgICAgICh3ZWJraXRf
d2ViX3ZpZXdfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3Q3JlYXRlUGFnZSk6
CisgICAgICAgICh3ZWJraXRXZWJWaWV3U2hvd09wdGlvbk1lbnUpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvd3BlL1BhZ2VDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVu
dEltcGw6OmNyZWF0ZVBvcHVwTWVudVByb3h5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dw
ZS9XUEVWaWV3LmNwcDoKKyAgICAgICAgKFdLV1BFOjpWaWV3OjpWaWV3KToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL3dwZS9XUEVWaWV3Lmg6CisgICAgICAgIChXS1dQRTo6Vmlldzo6Y3JlYXRl
KToKKyAgICAgICAgKFdLV1BFOjpWaWV3Ojp3ZWJWaWV3KToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL3dwZS9XZWJLaXRPcHRpb25NZW51Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvd3BlL1dlYktpdE9wdGlvbk1lbnVJdGVtLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvd3BlL1dlYktpdFBvcHVwTWVudS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpX
ZWJLaXRQb3B1cE1lbnU6OldlYktpdFBvcHVwTWVudSk6CisgICAgICAgIChXZWJLaXQ6Om1lbnVD
bG9zZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0UG9wdXBNZW51OjpzaG93UG9w
dXBNZW51KToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0UG9wdXBNZW51OjpoaWRlUG9wdXBNZW51
KToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0UG9wdXBNZW51OjpjYW5jZWxUcmFja2luZyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYktpdFBvcHVwTWVudTo6c2VsZWN0SXRlbSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYktpdFBvcHVwTWVudTo6YWN0aXZhdGVJdGVtKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL3dwZS9XZWJLaXRQb3B1cE1lbnUuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS93cGUvV2ViS2l0V2ViVmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL2Rv
Y3Mvd3BlLTEuMC1zZWN0aW9ucy50eHQ6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvd2Vi
a2l0Lmg6CisKIDIwMjAtMDEtMTYgIENhdGhpZSBDaGVuICA8Y2F0aGllY2hlbkBpZ2FsaWEuY29t
PgogCiAgICAgICAgIE1hcHBpbmcgSFRNTCBhdHRyaWJ1dGVzIHdpZHRoL2hlaWdodCB0byB0aGUg
ZGVmYXVsdCBhc3BlY3QgcmF0aW8gb2YgPGltZz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
UGxhdGZvcm1XUEUuY21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV1BFLmNtYWtlCmluZGV4
IGE4YTk1ZjRiMGRiNGE1MGE4ZWY1YjcyMDM5YzUxY2M1ODE4ZWQzMDQuLmQxNGI4NjI2MDg4OWYw
ZDBiNzcyMGJiZDNiMTNlY2UxYmM5NzY4N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm1XUEUuY21ha2UKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdQRS5jbWFrZQpAQCAt
MTE5LDYgKzExOSw4IEBAIHNldChXUEVfQVBJX0lOU1RBTExFRF9IRUFERVJTCiAgICAgJHtXRUJL
SVRfRElSfS9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXROZXR3b3JrUHJveHlTZXR0aW5ncy5oCiAg
ICAgJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXROb3RpZmljYXRpb25QZXJt
aXNzaW9uUmVxdWVzdC5oCiAgICAgJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJL3dwZS9XZWJL
aXROb3RpZmljYXRpb24uaAorICAgICR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0FQSS93cGUvV2Vi
S2l0T3B0aW9uTWVudS5oCisgICAgJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJL3dwZS9XZWJL
aXRPcHRpb25NZW51SXRlbS5oCiAgICAgJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJL3dwZS9X
ZWJLaXRQZXJtaXNzaW9uUmVxdWVzdC5oCiAgICAgJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJ
L3dwZS9XZWJLaXRQbHVnaW4uaAogICAgICR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0FQSS93cGUv
V2ViS2l0UG9saWN5RGVjaXNpb24uaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2Vz
R1RLLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQKaW5kZXggNmNhMWE3Mjk2MTcw
ZjUzYjMyYjQwNWZiMDk2YjE3MDc3NzFmZmNiZC4uMWVmNzNiYzIxNGM2ZTA5NWZlODM2ZjAxOGZh
ODFiNjNlNTZjZmRiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dAor
KysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0CkBAIC0xNTgsNiArMTU4LDggQEAgVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdE5ldHdvcmtQcm94eVNldHRpbmdzLmNwcCBAbm8tdW5pZnkK
IFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXROb3RpZmljYXRpb24uY3BwIEBuby11bmlmeQogVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0LmNwcCBA
bm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXROb3RpZmljYXRpb25Qcm92aWRlci5j
cHAgQG5vLXVuaWZ5CitVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0T3B0aW9uTWVudS5jcHAgQG5v
LXVuaWZ5CitVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0T3B0aW9uTWVudUl0ZW0uY3BwIEBuby11
bmlmeQogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFBlcm1pc3Npb25SZXF1ZXN0LmNwcCBAbm8t
dW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRQbHVnaW4uY3BwIEBuby11bmlmeQogVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdFBvaW50ZXJMb2NrUGVybWlzc2lvblJlcXVlc3QuY3BwIEBu
by11bmlmeQpAQCAtMTk0LDggKzE5Niw2IEBAIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbG9y
Q2hvb3NlclJlcXVlc3QuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RW1v
amlDaG9vc2VyLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdElucHV0TWV0
aG9kQ29udGV4dEd0ay5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRJbnB1
dE1ldGhvZENvbnRleHRJbXBsR3RrLmNwcCBAbm8tdW5pZnkKLVVJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdE9wdGlvbk1lbnUuY3BwIEBuby11bmlmeQotVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0T3B0
aW9uTWVudUl0ZW0uY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UG9wdXBN
ZW51LmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaW50Q3VzdG9tV2lk
Z2V0LmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaW50T3BlcmF0aW9u
LmNwcCBAbm8tdW5pZnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc1dQRS50eHQg
Yi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNXUEUudHh0CmluZGV4IGVhN2ZmOGQ3M2ZkZjEzM2Q3YzU2
MGM5ZmJjZjAxNWE2MjQ3YWQ4MzkuLmY0ZmJjMmY3YjYwYTMwZDYwZDA3ZGNkOTM2MDViMmI2OGJi
NzJhYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc1dQRS50eHQKKysrIGIvU291
cmNlL1dlYktpdC9Tb3VyY2VzV1BFLnR4dApAQCAtMTQ1LDYgKzE0NSw4IEBAIFVJUHJvY2Vzcy9B
UEkvZ2xpYi9XZWJLaXROZXR3b3JrUHJveHlTZXR0aW5ncy5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nl
c3MvQVBJL2dsaWIvV2ViS2l0Tm90aWZpY2F0aW9uLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9B
UEkvZ2xpYi9XZWJLaXROb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdC5jcHAgQG5vLXVuaWZ5
CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Tm90aWZpY2F0aW9uUHJvdmlkZXIuY3BwIEBuby11
bmlmeQorVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdE9wdGlvbk1lbnUuY3BwIEBuby11bmlmeQor
VUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdE9wdGlvbk1lbnVJdGVtLmNwcCBAbm8tdW5pZnkKIFVJ
UHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRQZXJtaXNzaW9uUmVxdWVzdC5jcHAgQG5vLXVuaWZ5CiBV
SVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0UGx1Z2luLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9B
UEkvZ2xpYi9XZWJLaXRQb2xpY3lEZWNpc2lvbi5jcHAgQG5vLXVuaWZ5CkBAIC0xNzcsNiArMTc5
LDcgQEAgVUlQcm9jZXNzL0FQSS93cGUvUGFnZUNsaWVudEltcGwuY3BwIEBuby11bmlmeQogVUlQ
cm9jZXNzL0FQSS93cGUvU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIuY3BwIEBuby11bmlmeQogVUlQ
cm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS93
cGUvV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0V1BFLmNwcCBAbm8tdW5pZnkKK1VJUHJvY2Vzcy9B
UEkvd3BlL1dlYktpdFBvcHVwTWVudS5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL3dwZS9X
ZWJLaXRTY3JpcHREaWFsb2dXUEUuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS93cGUvV2Vi
S2l0V2ViVmlld0JhY2tlbmQuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0
V2ViVmlld1dQRS5jcHAgQG5vLXVuaWZ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQy93cGUvV0tWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L3dwZS9XS1ZpZXcuY3BwCmluZGV4IDk2NDA2ZDBhYWZiYzM1NTU2MGI1ZDMxOTdhMDBjMjVmNTc1
OWEzZmQuLjQ1ZTYwYWE0MWFlOGNkYTllZDZlYjIwMWNiOGRkNGZjMzIzZmQ2YjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL3dwZS9XS1ZpZXcuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL3dwZS9XS1ZpZXcuY3BwCkBAIC00Miw3ICs0Miw3
IEBAIHRlbXBsYXRlPD4gc3RydWN0IENsaWVudFRyYWl0czxXS1ZpZXdDbGllbnRCYXNlPiB7CiAK
IFdLVmlld1JlZiBXS1ZpZXdDcmVhdGUoc3RydWN0IHdwZV92aWV3X2JhY2tlbmQqIGJhY2tlbmQs
IFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYgY29uZmlndXJhdGlvbikKIHsKLSAgICByZXR1cm4gdG9B
UEkoV0tXUEU6OlZpZXc6OmNyZWF0ZShiYWNrZW5kLCAqdG9JbXBsKGNvbmZpZ3VyYXRpb24pKSk7
CisgICAgcmV0dXJuIHRvQVBJKFdLV1BFOjpWaWV3OjpjcmVhdGUobnVsbHB0ciwgYmFja2VuZCwg
KnRvSW1wbChjb25maWd1cmF0aW9uKSkpOwogfQogCiBXS1BhZ2VSZWYgV0tWaWV3R2V0UGFnZShX
S1ZpZXdSZWYgdmlldykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdE9wdGlvbk1lbnUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2ds
aWIvV2ViS2l0T3B0aW9uTWVudS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWYxZWVkYmE2NzE4OTFkMmQ0Y2Iw
OTk1ODU0YTg1OTU4OTRhMTIyOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdE9wdGlvbk1lbnUuY3BwCkBAIC0wLDAgKzEsMTg2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXZWJLaXRPcHRpb25NZW51LmgiCisKKyNpbmNsdWRlICJXZWJLaXRPcHRpb25N
ZW51SXRlbVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRPcHRpb25NZW51UHJpdmF0ZS5oIgor
I2luY2x1ZGUgPHd0Zi9nbGliL1dURkdUeXBlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7
CisKKy8qKgorICogU0VDVElPTjogV2ViS2l0T3B0aW9uTWVudQorICogQFNob3J0X2Rlc2NyaXB0
aW9uOgorICogQFRpdGxlOiBXZWJLaXRPcHRpb25NZW51CisgKgorICogV2ViS2l0T3B0aW9uTWVu
dSByZXByZXNlbnRzIHRoZSBkcm9wZG93biBtZW51IG9mIGEgc2VsZWN0IGVsZW1lbnQgaW4gYSAj
V2ViS2l0V2ViVmlldy4KKyAqCisgKiBXaGVuIGEgc2VsZWN0IGVsZW1lbnQgaW4gYSAjV2ViS2l0
V2ViVmlldyBuZWVkcyB0byBkaXNwbGF5IGEgZHJvcGRvd24gbWVudSwgdGhlIHNpZ25hbAorICog
I1dlYktpdFdlYlZpZXc6OnNob3ctb3B0aW9uLW1lbnUgaXMgZW1pdHRlZCwgcHJvdmlkaW5nIGEg
V2ViS2l0T3B0aW9uTWVudSB3aXRoIHRoZQorICogI1dlYktpdE9wdGlvbk1lbnVJdGVtPCEtLSAt
LT5zIHRoYXQgc2hvdWxkIGJlIGRpc3BsYXllZC4KKyAqCisgKiBTaW5jZTogMi4xOAorICovCisK
K3N0cnVjdCBfV2ViS2l0T3B0aW9uTWVudVByaXZhdGUgeworICAgIFZlY3RvcjxXZWJLaXRPcHRp
b25NZW51SXRlbT4gaXRlbXM7CisgICAgUmVmUHRyPFdlYktpdFBvcHVwTWVudT4gcG9wdXBNZW51
OworfTsKKworZW51bSB7CisgICAgQ0xPU0UsCisKKyAgICBMQVNUX1NJR05BTAorfTsKKworc3Rh
dGljIGd1aW50IHNpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OworCitXRUJLSVRfREVGSU5F
X1RZUEUoV2ViS2l0T3B0aW9uTWVudSwgd2Via2l0X29wdGlvbl9tZW51LCBHX1RZUEVfT0JKRUNU
KQorCitzdGF0aWMgdm9pZCB3ZWJraXRfb3B0aW9uX21lbnVfY2xhc3NfaW5pdChXZWJLaXRPcHRp
b25NZW51Q2xhc3MqIG9wdGlvbk1lbnVDbGFzcykKK3sKKyAgICAvKioKKyAgICAgKiBXZWJLaXRP
cHRpb25NZW51OjpjbG9zZToKKyAgICAgKiBAbWVudTogdGhlICNXZWJLaXRPcHRpb25NZW51IG9u
IHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAorICAgICAqCisgICAgICogRW1pdHRlZCB3aGVu
IGNsb3NpbmcgYSAjV2ViS2l0T3B0aW9uTWVudSBpcyByZXF1ZXN0ZWQuIFRoaXMgY2FuIGhhcHBl
bgorICAgICAqIHdoZW4gdGhlIHVzZXIgZXhwbGljaXRseSBjYWxscyB3ZWJraXRfb3B0aW9uX21l
bnVfY2xvc2UoKSBvciB3aGVuIHRoZQorICAgICAqIGVsZW1lbnQgaXMgZGV0YWNoZWQgZnJvbSB0
aGUgY3VycmVudCBwYWdlLgorICAgICAqCisgICAgICogU2luY2U6IDIuMTgKKyAgICAgKi8KKyAg
ICBzaWduYWxzW0NMT1NFXSA9CisgICAgICAgIGdfc2lnbmFsX25ldygiY2xvc2UiLAorICAgICAg
ICAgICAgR19UWVBFX0ZST01fQ0xBU1Mob3B0aW9uTWVudUNsYXNzKSwKKyAgICAgICAgICAgIEdf
U0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgMCwgbnVsbHB0ciwgbnVsbHB0ciwKKyAgICAg
ICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19WT0lELAorICAgICAgICAgICAgR19UWVBF
X05PTkUsIDApOworfQorCitXZWJLaXRPcHRpb25NZW51KiB3ZWJraXRPcHRpb25NZW51Q3JlYXRl
KFdlYktpdFBvcHVwTWVudSYgcG9wdXBNZW51LCBjb25zdCBWZWN0b3I8V2ViUG9wdXBJdGVtPiYg
aXRlbXMsIGludDMyX3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBhdXRvKiBtZW51ID0gV0VCS0lU
X09QVElPTl9NRU5VKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9PUFRJT05fTUVOVSwgbnVsbHB0
cikpOworICAgIG1lbnUtPnByaXYtPnBvcHVwTWVudSA9ICZwb3B1cE1lbnU7CisgICAgbWVudS0+
cHJpdi0+aXRlbXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShpdGVtcy5zaXplKCkpOworICAgIGZv
ciAoY29uc3QgYXV0byYgaXRlbSA6IGl0ZW1zKQorICAgICAgICBtZW51LT5wcml2LT5pdGVtcy51
bmNoZWNrZWRBcHBlbmQoV2ViS2l0T3B0aW9uTWVudUl0ZW0oaXRlbSkpOworICAgIGlmIChzZWxl
Y3RlZEluZGV4ID49IDApIHsKKyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihz
ZWxlY3RlZEluZGV4KSA8IG1lbnUtPnByaXYtPml0ZW1zLnNpemUoKSk7CisgICAgICAgIG1lbnUt
PnByaXYtPml0ZW1zW3NlbGVjdGVkSW5kZXhdLmlzU2VsZWN0ZWQgPSB0cnVlOworICAgIH0KKyAg
ICByZXR1cm4gbWVudTsKK30KKworLyoqCisgKiB3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X25faXRl
bXM6CisgKiBAbWVudTogYSAjV2ViS2l0T3B0aW9uTWVudQorICoKKyAqIEdldHMgdGhlIGxlbmd0
aCBvZiB0aGUgQG1lbnUuCisgKgorICogUmV0dXJuczogdGhlIG51bWJlciBvZiAjV2ViS2l0T3B0
aW9uTWVudUl0ZW08IS0tIC0tPnMgaW4gQG1lbnUKKyAqCisgKiBTaW5jZTogMi4xOAorICovCitn
dWludCB3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X25faXRlbXMoV2ViS2l0T3B0aW9uTWVudSogbWVu
dSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfT1BUSU9OX01FTlUobWVu
dSksIDApOworCisgICAgcmV0dXJuIG1lbnUtPnByaXYtPml0ZW1zLnNpemUoKTsKK30KKworLyoq
CisgKiB3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X2l0ZW06CisgKiBAbWVudTogYSAjV2ViS2l0T3B0
aW9uTWVudQorICogQGluZGV4OiB0aGUgaW5kZXggb2YgdGhlIGl0ZW0KKyAqCisgKiBSZXR1cm5z
IHRoZSAjV2ViS2l0T3B0aW9uTWVudUl0ZW0gYXQgQGluZGV4IGluIEBtZW51LgorICoKKyAqIFJl
dHVybnM6ICh0cmFuc2ZlciBub25lKTogYSAjV2ViS2l0T3B0aW9uTWVudUl0ZW0gb2YgQG1lbnUu
CisgKgorICogU2luY2U6IDIuMTgKKyAqLworV2ViS2l0T3B0aW9uTWVudUl0ZW0qIHdlYmtpdF9v
cHRpb25fbWVudV9nZXRfaXRlbShXZWJLaXRPcHRpb25NZW51KiBtZW51LCBndWludCBpbmRleCkK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfT1BUSU9OX01FTlUobWVudSks
IG51bGxwdHIpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGluZGV4IDwgbWVudS0+cHJpdi0+
aXRlbXMuc2l6ZSgpLCBudWxscHRyKTsKKworICAgIHJldHVybiAmbWVudS0+cHJpdi0+aXRlbXNb
aW5kZXhdOworfQorCisvKioKKyAqIHdlYmtpdF9vcHRpb25fbWVudV9zZWxlY3RfaXRlbToKKyAq
IEBtZW51OiBhICNXZWJLaXRPcHRpb25NZW51CisgKiBAaW5kZXg6IHRoZSBpbmRleCBvZiB0aGUg
aXRlbQorICoKKyAqIFNlbGVjdHMgdGhlICNXZWJLaXRPcHRpb25NZW51SXRlbSBhdCBAaW5kZXgg
aW4gQG1lbnUuIFNlbGVjdGluZyBhbiBpdGVtIGNoYW5nZXMgdGhlCisgKiB0ZXh0IHNob3duIGJ5
IHRoZSBjb21ibyBidXR0b24sIGJ1dCBpdCBkb2Vzbid0IGNoYW5nZSB0aGUgdmFsdWUgb2YgdGhl
IGVsZW1lbnQuIFlvdSBuZWVkIHRvCisgKiBleHBsaWNpdGx5IGFjdGl2YXRlIHRoZSBpdGVtIHdp
dGggd2Via2l0X29wdGlvbl9tZW51X3NlbGVjdF9pdGVtKCkgb3IgY2xvc2UgdGhlIG1lbnUgd2l0
aAorICogd2Via2l0X29wdGlvbl9tZW51X2Nsb3NlKCkgaW4gd2hpY2ggY2FzZSB0aGUgY3VycmVu
dGx5IHNlbGVjdGVkIGl0ZW0gd2lsbCBiZSBhY3RpdmF0ZWQuCisgKgorICogU2luY2U6IDIuMTgK
KyAqLwordm9pZCB3ZWJraXRfb3B0aW9uX21lbnVfc2VsZWN0X2l0ZW0oV2ViS2l0T3B0aW9uTWVu
dSogbWVudSwgZ3VpbnQgaW5kZXgpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNf
T1BUSU9OX01FTlUobWVudSkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoaW5kZXggPCBtZW51LT5w
cml2LT5pdGVtcy5zaXplKCkpOworCisgICAgbWVudS0+cHJpdi0+cG9wdXBNZW51LT5zZWxlY3RJ
dGVtKGluZGV4KTsKK30KKworLyoqCisgKiB3ZWJraXRfb3B0aW9uX21lbnVfYWN0aXZhdGVfaXRl
bToKKyAqIEBtZW51OiBhICNXZWJLaXRPcHRpb25NZW51CisgKiBAaW5kZXg6IHRoZSBpbmRleCBv
ZiB0aGUgaXRlbQorICoKKyAqIEFjdGl2YXRlcyB0aGUgI1dlYktpdE9wdGlvbk1lbnVJdGVtIGF0
IEBpbmRleCBpbiBAbWVudS4gQWN0aXZhdGluZyBhbiBpdGVtIGNoYW5nZXMgdGhlIHZhbHVlCisg
KiBvZiB0aGUgZWxlbWVudCBtYWtpbmcgdGhlIGl0ZW0gdGhlIGFjdGl2ZSBvbmUuIFlvdSBhcmUg
ZXhwZWN0ZWQgdG8gY2xvc2UgdGhlIG1lbnUgd2l0aAorICogd2Via2l0X29wdGlvbl9tZW51X2Ns
b3NlKCkgYWZ0ZXIgYWN0aXZhdGluZyBhbiBpdGVtLCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gYWdh
aW4gd2lsbCBoYXZlIG5vCisgKiBlZmZlY3QuCisgKgorICogU2luY2U6IDIuMTgKKyAqLwordm9p
ZCB3ZWJraXRfb3B0aW9uX21lbnVfYWN0aXZhdGVfaXRlbShXZWJLaXRPcHRpb25NZW51KiBtZW51
LCBndWludCBpbmRleCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19PUFRJT05f
TUVOVShtZW51KSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChpbmRleCA8IG1lbnUtPnByaXYtPml0
ZW1zLnNpemUoKSk7CisKKyAgICBtZW51LT5wcml2LT5wb3B1cE1lbnUtPmFjdGl2YXRlSXRlbShp
bmRleCk7Cit9CisKKy8qKgorICogd2Via2l0X29wdGlvbl9tZW51X2Nsb3NlOgorICogQG1lbnU6
IGEgI1dlYktpdE9wdGlvbk1lbnUKKyAqCisgKiBSZXF1ZXN0IHRvIGNsb3NlIGEgI1dlYktpdE9w
dGlvbk1lbnUuIFRoaXMgZW1pdHMgV2ViS2l0T3B0aW9uTWVudTo6Y2xvc2Ugc2lnbmFsLgorICog
VGhpcyBmdW5jdGlvbiBzaG91bGQgYWx3YXlzIGJlIGNhbGxlZCB0byBub3RpZnkgV2ViS2l0IHRo
YXQgdGhlIGFzc29jaWF0ZWQKKyAqIG1lbnUgaGFzIGJlZW4gY2xvc2VkLiBJZiB0aGUgbWVudSBp
cyBjbG9zZWQgYW5kIG5laXRoZXIgd2Via2l0X29wdGlvbl9tZW51X3NlbGVjdF9pdGVtKCkKKyAq
IG5vciB3ZWJraXRfb3B0aW9uX21lbnVfYWN0aXZhdGVfaXRlbSgpIGhhdmUgYmVlbiBjYWxsZWQs
IHRoZSBlbGVtZW50IHZhbHVlIHJlbWFpbnMKKyAqIHVuY2hhbmdlZC4KKyAqCisgKiBTaW5jZTog
Mi4xOAorICovCit2b2lkIHdlYmtpdF9vcHRpb25fbWVudV9jbG9zZShXZWJLaXRPcHRpb25NZW51
KiBtZW51KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX09QVElPTl9NRU5VKG1l
bnUpKTsKKworICAgIGdfc2lnbmFsX2VtaXQobWVudSwgc2lnbmFsc1tDTE9TRV0sIDAsIG51bGxw
dHIpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2Vi
S2l0T3B0aW9uTWVudUl0ZW0uY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIv
V2ViS2l0T3B0aW9uTWVudUl0ZW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4ODgwODg1MzZkMjE1NDc0NDBl
YTVlYzI3ODdmZWQ4ZTc2NWIyNWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRPcHRpb25NZW51SXRlbS5jcHAKQEAgLTAsMCArMSwxNzcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYktpdE9wdGlvbk1lbnVJdGVtLmgiCisKKyNpbmNsdWRlICJXZWJL
aXRPcHRpb25NZW51SXRlbVByaXZhdGUuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKwor
LyoqCisgKiBTRUNUSU9OOiBXZWJLaXRPcHRpb25NZW51SXRlbQorICogQFNob3J0X2Rlc2NyaXB0
aW9uOiBPbmUgaXRlbSBvZiB0aGUgI1dlYktpdE9wdGlvbk1lbnUKKyAqIEBUaXRsZTogV2ViS2l0
T3B0aW9uTWVudUl0ZW0KKyAqCisgKiBUaGUgI1dlYktpdE9wdGlvbk1lbnUgaXMgY29tcG9zZWQg
b2YgV2ViS2l0T3B0aW9uTWVudUl0ZW08IS0tIC0tPnMuCisgKiBBIFdlYktpdE9wdGlvbk1lbnVJ
dGVtIGFsd2F5cyBoYXMgYSBsYWJlbCBhbmQgY2FuIGNvbnRhaW4gYSB0b29sdGlwIHRleHQuCisg
KiBZb3UgY2FuIHVzZSB0aGUgV2ViS2l0T3B0aW9uTWVudUl0ZW0gb2YgYSAjV2ViS2l0T3B0aW9u
TWVudSB0byBidWlsZCB5b3VyCisgKiBvd24gbWVudXMuCisgKgorICogU2luY2U6IDIuMTgKKyAq
LworCitHX0RFRklORV9CT1hFRF9UWVBFKFdlYktpdE9wdGlvbk1lbnVJdGVtLCB3ZWJraXRfb3B0
aW9uX21lbnVfaXRlbSwgd2Via2l0X29wdGlvbl9tZW51X2l0ZW1fY29weSwgd2Via2l0X29wdGlv
bl9tZW51X2l0ZW1fZnJlZSkKKworLyoqCisgKiB3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9jb3B5
OgorICogQGl0ZW06IGEgI1dlYktpdE9wdGlvbk1lbnVJdGVtCisgKgorICogTWFrZSBhIGNvcHkg
b2YgdGhlICNXZWJLaXRPcHRpb25NZW51SXRlbS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIg
ZnVsbCk6IEEgY29weSBvZiBwYXNzZWQgaW4gI1dlYktpdE9wdGlvbk1lbnVJdGVtCisgKgorICog
U2luY2U6IDIuMTgKKyAqLworV2ViS2l0T3B0aW9uTWVudUl0ZW0qIHdlYmtpdF9vcHRpb25fbWVu
dV9pdGVtX2NvcHkoV2ViS2l0T3B0aW9uTWVudUl0ZW0qIGl0ZW0pCit7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoaXRlbSwgbnVsbHB0cik7CisKKyAgICBhdXRvKiBjb3B5SXRlbSA9IHN0YXRp
Y19jYXN0PFdlYktpdE9wdGlvbk1lbnVJdGVtKj4oZmFzdE1hbGxvYyhzaXplb2YoV2ViS2l0T3B0
aW9uTWVudUl0ZW0pKSk7CisgICAgbmV3IChjb3B5SXRlbSkgV2ViS2l0T3B0aW9uTWVudUl0ZW0o
aXRlbSk7CisgICAgcmV0dXJuIGNvcHlJdGVtOworfQorCisvKioKKyAqIHdlYmtpdF9vcHRpb25f
bWVudV9pdGVtX2ZyZWU6CisgKiBAaXRlbTogQSAjV2ViS2l0T3B0aW9uTWVudUl0ZW0KKyAqCisg
KiBGcmVlIHRoZSAjV2ViS2l0T3B0aW9uTWVudUl0ZW0uCisgKgorICogU2luY2U6IDIuMTgKKyAq
Lwordm9pZCB3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9mcmVlKFdlYktpdE9wdGlvbk1lbnVJdGVt
KiBpdGVtKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoaXRlbSk7CisKKyAgICBpdGVtLT5+V2Vi
S2l0T3B0aW9uTWVudUl0ZW0oKTsKKyAgICBmYXN0RnJlZShpdGVtKTsKK30KKworLyoqCisgKiB3
ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfbGFiZWw6CisgKiBAaXRlbTogYSAjV2ViS2l0T3B0
aW9uTWVudUl0ZW0KKyAqCisgKiBHZXQgdGhlIGxhYmVsIG9mIGEgI1dlYktpdE9wdGlvbk1lbnVJ
dGVtLgorICoKKyAqIFJldHVybnM6IFRoZSBsYWJlbCBvZiBAaXRlbS4KKyAqCisgKiBTaW5jZTog
Mi4xOAorICovCitjb25zdCBnY2hhciogd2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X2xhYmVs
KFdlYktpdE9wdGlvbk1lbnVJdGVtKiBpdGVtKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KGl0ZW0sIG51bGxwdHIpOworCisgICAgcmV0dXJuIGl0ZW0tPmxhYmVsLmRhdGEoKTsKK30KKwor
LyoqCisgKiB3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfdG9vbHRpcDoKKyAqIEBpdGVtOiBh
ICNXZWJLaXRPcHRpb25NZW51SXRlbQorICoKKyAqIEdldCB0aGUgdG9vbHRpcCBvZiBhICNXZWJL
aXRPcHRpb25NZW51SXRlbS4KKyAqCisgKiBSZXR1cm5zOiBUaGUgdG9vbHRpcCBvZiBAaXRlbSwg
b3IgJU5VTEwuCisgKgorICogU2luY2U6IDIuMTgKKyAqLworY29uc3QgZ2NoYXIqIHdlYmtpdF9v
cHRpb25fbWVudV9pdGVtX2dldF90b29sdGlwKFdlYktpdE9wdGlvbk1lbnVJdGVtKiBpdGVtKQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGl0ZW0sIG51bGxwdHIpOworCisgICAgcmV0dXJu
IGl0ZW0tPnRvb2x0aXAuaXNOdWxsKCkgPyBudWxscHRyIDogaXRlbS0+dG9vbHRpcC5kYXRhKCk7
Cit9CisKKy8qKgorICogd2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfbGFiZWw6Cisg
KiBAaXRlbTogYSAjV2ViS2l0T3B0aW9uTWVudUl0ZW0KKyAqCisgKiBXaGV0aGVyIGEgI1dlYktp
dE9wdGlvbk1lbnVJdGVtIGlzIGEgZ3JvdXAgbGFiZWwuCisgKgorICogUmV0dXJuczogJVRSVUUg
aWYgdGhlIEBpdGVtIGlzIGEgZ3JvdXAgbGFiZWwgb3IgJUZBTFNFIG90aGVyd2lzZS4KKyAqCisg
KiBTaW5jZTogMi4xOAorICovCitnYm9vbGVhbiB3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19n
cm91cF9sYWJlbChXZWJLaXRPcHRpb25NZW51SXRlbSogaXRlbSkKK3sKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChpdGVtLCBGQUxTRSk7CisKKyAgICByZXR1cm4gaXRlbS0+aXNHcm91cExhYmVs
OworfQorCisvKioKKyAqIHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2NoaWxkOgor
ICogQGl0ZW06IGEgI1dlYktpdE9wdGlvbk1lbnVJdGVtCisgKgorICogV2hldGhlciBhICNXZWJL
aXRPcHRpb25NZW51SXRlbSBpcyBhIGdyb3VwIGNoaWxkLgorICoKKyAqIFJldHVybnM6ICVUUlVF
IGlmIHRoZSBAaXRlbSBpcyBhIGdyb3VwIGNoaWxkIG9yICVGQUxTRSBvdGhlcndpc2UuCisgKgor
ICogU2luY2U6IDIuMTgKKyAqLworZ2Jvb2xlYW4gd2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNf
Z3JvdXBfY2hpbGQoV2ViS2l0T3B0aW9uTWVudUl0ZW0qIGl0ZW0pCit7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoaXRlbSwgRkFMU0UpOworCisgICAgcmV0dXJuIGl0ZW0tPmlzR3JvdXBDaGls
ZDsKK30KKworLyoqCisgKiB3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19lbmFibGVkOgorICog
QGl0ZW06IGEgI1dlYktpdE9wdGlvbk1lbnVJdGVtCisgKgorICogV2hldGhlciBhICNXZWJLaXRP
cHRpb25NZW51SXRlbSBpcyBlbmFibGVkLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBA
aXRlbSBpcyBlbmFibGVkIG9yICVGQUxTRSBvdGhlcndpc2UuCisgKgorICogU2luY2U6IDIuMTgK
KyAqLworZ2Jvb2xlYW4gd2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZW5hYmxlZChXZWJLaXRP
cHRpb25NZW51SXRlbSogaXRlbSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChpdGVtLCBG
QUxTRSk7CisKKyAgICByZXR1cm4gaXRlbS0+aXNFbmFibGVkOworfQorCisvKioKKyAqIHdlYmtp
dF9vcHRpb25fbWVudV9pdGVtX2lzX3NlbGVjdGVkOgorICogQGl0ZW06IGEgI1dlYktpdE9wdGlv
bk1lbnVJdGVtCisgKgorICogV2hldGhlciBhICNXZWJLaXRPcHRpb25NZW51SXRlbSBpcyB0aGUg
Y3VycmVudGx5IHNlbGVjdGVkIG9uZS4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgQGl0
ZW0gaXMgc2VsZWN0ZWQgb3IgJUZBTFNFIG90aGVyd2lzZS4KKyAqCisgKiBTaW5jZTogMi4xOAor
ICovCitnYm9vbGVhbiB3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19zZWxlY3RlZChXZWJLaXRP
cHRpb25NZW51SXRlbSogaXRlbSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChpdGVtLCBG
QUxTRSk7CisKKyAgICByZXR1cm4gaXRlbS0+aXNTZWxlY3RlZDsKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdE9wdGlvbk1lbnVJdGVtUHJpdmF0
ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0T3B0aW9uTWVudUl0
ZW1Qcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjU4NWU3YjYyYmFiNTZiYWUzODgxYmIzZmNiN2NjYjU3
ZjNjOTFmOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdE9wdGlvbk1lbnVJdGVtUHJpdmF0ZS5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJXZWJLaXRPcHRpb25NZW51SXRlbS5oIgorI2luY2x1ZGUgIldlYlBvcHVwSXRlbS5oIgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworc3RydWN0IF9XZWJLaXRPcHRpb25NZW51SXRl
bSB7CisgICAgX1dlYktpdE9wdGlvbk1lbnVJdGVtKCkgPSBkZWZhdWx0OworCisgICAgX1dlYktp
dE9wdGlvbk1lbnVJdGVtKGNvbnN0IFdlYktpdDo6V2ViUG9wdXBJdGVtJiBpdGVtKQorICAgICAg
ICA6IGxhYmVsKGl0ZW0ubV90ZXh0LnN0cmlwV2hpdGVTcGFjZSgpLnV0ZjgoKSkKKyAgICAgICAg
LCBpc0dyb3VwTGFiZWwoaXRlbS5tX2lzTGFiZWwpCisgICAgICAgICwgaXNHcm91cENoaWxkKGl0
ZW0ubV90ZXh0LnN0YXJ0c1dpdGgoIiAgICAiKSkKKyAgICAgICAgLCBpc0VuYWJsZWQoaXRlbS5t
X2lzRW5hYmxlZCkKKyAgICB7CisgICAgICAgIGlmICghaXRlbS5tX3Rvb2xUaXAuaXNFbXB0eSgp
KQorICAgICAgICAgICAgdG9vbHRpcCA9IGl0ZW0ubV90b29sVGlwLnV0ZjgoKTsKKyAgICB9CisK
KyAgICBleHBsaWNpdCBfV2ViS2l0T3B0aW9uTWVudUl0ZW0oX1dlYktpdE9wdGlvbk1lbnVJdGVt
KiBvdGhlcikKKyAgICAgICAgOiBsYWJlbChvdGhlci0+bGFiZWwpCisgICAgICAgICwgdG9vbHRp
cChvdGhlci0+dG9vbHRpcCkKKyAgICAgICAgLCBpc0dyb3VwTGFiZWwob3RoZXItPmlzR3JvdXBM
YWJlbCkKKyAgICAgICAgLCBpc0dyb3VwQ2hpbGQob3RoZXItPmlzR3JvdXBDaGlsZCkKKyAgICAg
ICAgLCBpc0VuYWJsZWQob3RoZXItPmlzRW5hYmxlZCkKKyAgICAgICAgLCBpc1NlbGVjdGVkKG90
aGVyLT5pc1NlbGVjdGVkKQorICAgIHsKKyAgICB9CisKKyAgICBDU3RyaW5nIGxhYmVsOworICAg
IENTdHJpbmcgdG9vbHRpcDsKKyAgICBib29sIGlzR3JvdXBMYWJlbCB7IGZhbHNlIH07CisgICAg
Ym9vbCBpc0dyb3VwQ2hpbGQgeyBmYWxzZSB9OworICAgIGJvb2wgaXNFbmFibGVkIHsgdHJ1ZSB9
OworICAgIGJvb2wgaXNTZWxlY3RlZCB7IGZhbHNlIH07Cit9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0T3B0aW9uTWVudVByaXZhdGUuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdE9wdGlvbk1lbnVQcml2YXRlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMmQ0YjhjNmE0NWM5ZmY0NmE1MjEzNTAyZThhMDUzZTQxMTExOGY5YgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdE9w
dGlvbk1lbnVQcml2YXRlLmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldlYktpdE9wdGlvbk1l
bnUuaCIKKyNpbmNsdWRlICJXZWJLaXRQb3B1cE1lbnUuaCIKKworV2ViS2l0T3B0aW9uTWVudSog
d2Via2l0T3B0aW9uTWVudUNyZWF0ZShXZWJLaXQ6OldlYktpdFBvcHVwTWVudSYsIGNvbnN0IFZl
Y3RvcjxXZWJLaXQ6OldlYlBvcHVwSXRlbT4mLCBpbnQzMl90IHNlbGVjdGVkSW5kZXgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmNwcApp
bmRleCBmZjg2ZWNmMGY5NjZjNGY5NzQxYTJhMzZhMjhjM2RmYTE0MDJmNDUzLi5lNmFiMTZlYjY4
MmY2OWI3ZWQ0MjA1ZjAyNjhmNmM0YjE4NzhkYjg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmNwcApAQCAtMTY1LDkgKzE2NSw4IEBA
IGVudW0gewogCiAjaWYgUExBVEZPUk0oR1RLKQogICAgIFJVTl9DT0xPUl9DSE9PU0VSLAotCi0g
ICAgU0hPV19PUFRJT05fTUVOVSwKICNlbmRpZgorICAgIFNIT1dfT1BUSU9OX01FTlUsCiAKICAg
ICBVU0VSX01FU1NBR0VfUkVDRUlWRUQsCiAKQEAgLTIxMzMsNiArMjEzMiwzNyBAQCBzdGF0aWMg
dm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZp
ZXdDbGFzcykKICAgICAgICAgR0RLX1RZUEVfUkVDVEFOR0xFIHwgR19TSUdOQUxfVFlQRV9TVEFU
SUNfU0NPUEUpOwogI2VuZGlmIC8vIFBMQVRGT1JNKEdUSykKIAorI2lmIFBMQVRGT1JNKFdQRSkK
KyAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJWaWV3OjpzaG93LW9wdGlvbi1tZW51OgorICAgICAq
IEB3ZWJfdmlldzogdGhlICNXZWJLaXRXZWJWaWV3IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1p
dHRlZAorICAgICAqIEBtZW51OiB0aGUgI1dlYktpdE9wdGlvbk1lbnUKKyAgICAgKgorICAgICAq
IFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgd2hlbiBhIHNlbGVjdCBlbGVtZW50IGluIEB3ZWJfdmll
dyBuZWVkcyB0byBkaXNwbGF5IGEKKyAgICAgKiBkcm9wZG93biBtZW51LiBUaGlzIHNpZ25hbCBj
YW4gYmUgdXNlZCB0byBzaG93IGEgY3VzdG9tIG1lbnUsIHVzaW5nIEBtZW51IHRvIGdldAorICAg
ICAqIHRoZSBkZXRhaWxzIG9mIGFsbCBpdGVtcyB0aGF0IHNob3VsZCBiZSBkaXNwbGF5ZWQuIFRo
ZSBhcmVhIG9mIHRoZSBlbGVtZW50IGluIHRoZQorICAgICAqICNXZWJLaXRXZWJWaWV3IGlzIGdp
dmVuIGFzIEByZWN0YW5nbGUgcGFyYW1ldGVyLCBpdCBjYW4gYmUgdXNlZCB0byBwb3NpdGlvbiB0
aGUKKyAgICAgKiBtZW51LgorICAgICAqIFRvIGhhbmRsZSB0aGlzIHNpZ25hbCBhc3luY2hyb25v
dXNseSB5b3Ugc2hvdWxkIGtlZXAgYSByZWYgb2YgdGhlIEBtZW51LgorICAgICAqCisgICAgICog
VGhlIGRlZmF1bHQgc2lnbmFsIGhhbmRsZXIgd2lsbCBwb3AgdXAgYSAjR3RrTWVudS4KKyAgICAg
KgorICAgICAqIFJldHVybnM6ICVUUlVFIHRvIHN0b3Agb3RoZXIgaGFuZGxlcnMgZnJvbSBiZWlu
ZyBpbnZva2VkIGZvciB0aGUgZXZlbnQuCisgICAgICogICAlRkFMU0UgdG8gcHJvcGFnYXRlIHRo
ZSBldmVudCBmdXJ0aGVyLgorICAgICAqCisgICAgICogU2luY2U6IDIuMjgKKyAgICAgKi8KKyAg
ICBzaWduYWxzW1NIT1dfT1BUSU9OX01FTlVdID0gZ19zaWduYWxfbmV3KAorICAgICAgICAic2hv
dy1vcHRpb24tbWVudSIsCisgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyks
CisgICAgICAgIEdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2Vi
S2l0V2ViVmlld0NsYXNzLCBzaG93X29wdGlvbl9tZW51KSwKKyAgICAgICAgZ19zaWduYWxfYWNj
dW11bGF0b3JfdHJ1ZV9oYW5kbGVkLCBudWxscHRyLAorICAgICAgICBnX2NjbG9zdXJlX21hcnNo
YWxfZ2VuZXJpYywKKyAgICAgICAgR19UWVBFX0JPT0xFQU4sIDEsCisgICAgICAgIFdFQktJVF9U
WVBFX09QVElPTl9NRU5VKTsKKyNlbmRpZgorCiAgICAgLyoqCiAgICAgICogV2ViS2l0V2ViVmll
dzo6dXNlci1tZXNzYWdlLXJlY2VpdmVkOgogICAgICAqIEB3ZWJfdmlldzogdGhlICNXZWJLaXRX
ZWJWaWV3IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZApAQCAtMjE3Niw3ICsyMjA2LDcg
QEAgdm9pZCB3ZWJraXRXZWJWaWV3Q3JlYXRlUGFnZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBS
ZWY8QVBJOjpQYWdlQ29uZmlndXJhdGlvbj4KICNpZiBQTEFURk9STShHVEspCiAgICAgd2Via2l0
V2ViVmlld0Jhc2VDcmVhdGVXZWJQYWdlKFdFQktJVF9XRUJfVklFV19CQVNFKHdlYlZpZXcpLCBX
VEZNb3ZlKGNvbmZpZ3VyYXRpb24pKTsKICNlbGlmIFBMQVRGT1JNKFdQRSkKLSAgICB3ZWJWaWV3
LT5wcml2LT52aWV3LnJlc2V0KFdLV1BFOjpWaWV3OjpjcmVhdGUod2Via2l0X3dlYl92aWV3X2Jh
Y2tlbmRfZ2V0X3dwZV9iYWNrZW5kKHdlYlZpZXctPnByaXYtPmJhY2tlbmQuZ2V0KCkpLCBjb25m
aWd1cmF0aW9uLmdldCgpKSk7CisgICAgd2ViVmlldy0+cHJpdi0+dmlldy5yZXNldChXS1dQRTo6
Vmlldzo6Y3JlYXRlKHdlYlZpZXcsIHdlYmtpdF93ZWJfdmlld19iYWNrZW5kX2dldF93cGVfYmFj
a2VuZCh3ZWJWaWV3LT5wcml2LT5iYWNrZW5kLmdldCgpKSwgY29uZmlndXJhdGlvbi5nZXQoKSkp
OwogI2VuZGlmCiB9CiAKQEAgLTI3MjEsNiArMjc1MSwxNSBAQCB2b2lkIHdlYmtpdFdlYlZpZXdE
ZWxldGVTdXJyb3VuZGluZyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBpbnQgb2Zmc2V0LCB1bnNp
Z25lZAogICAgIGdldFBhZ2Uod2ViVmlldykuZGVsZXRlU3Vycm91bmRpbmcob2Zmc2V0LCBjaGFy
YWN0ZXJDb3VudCk7CiB9CiAKKyNpZiBQTEFURk9STShXUEUpCitib29sIHdlYmtpdFdlYlZpZXdT
aG93T3B0aW9uTWVudShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRPcHRpb25NZW51KiBt
ZW51KQoreworICAgIGdib29sZWFuIGhhbmRsZWQ7CisgICAgZ19zaWduYWxfZW1pdCh3ZWJWaWV3
LCBzaWduYWxzW1NIT1dfT1BUSU9OX01FTlVdLCAwLCBtZW51LCAmaGFuZGxlZCk7CisgICAgcmV0
dXJuIGhhbmRsZWQ7Cit9CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKFdQRSkKIC8qKgogICogd2Vi
a2l0X3dlYl92aWV3X2dldF9iYWNrZW5kOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlld1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXdQcml2YXRlLmgKaW5kZXggNjdmNjk4MjFlYTdm
NjJjN2IwM2Y1MTNlMzg3MzRlY2RiOWM3YjUzOS4uOWE4NjQzOTYzMTE1NTcwZjMyZDZhMGY1ZDY1
MzFhZjg3YzUwZmYyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2ds
aWIvV2ViS2l0V2ViVmlld1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvZ2xpYi9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oCkBAIC0xMDAsNiArMTAwLDEwIEBAIGJvb2wg
d2Via2l0V2ViVmlld0VtaXRSdW5Db2xvckNob29zZXIoV2ViS2l0V2ViVmlldyosIFdlYktpdENv
bG9yQ2hvb3NlclJlcXVlc3QqCiBib29sIHdlYmtpdFdlYlZpZXdTaG93T3B0aW9uTWVudShXZWJL
aXRXZWJWaWV3KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIFdlYktpdE9wdGlvbk1lbnUqLCBj
b25zdCBHZGtFdmVudCopOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShXUEUpCitib29sIHdlYmtp
dFdlYlZpZXdTaG93T3B0aW9uTWVudShXZWJLaXRXZWJWaWV3KiwgV2ViS2l0T3B0aW9uTWVudSop
OworI2VuZGlmCisKIGdib29sZWFuIHdlYmtpdFdlYlZpZXdBdXRoZW50aWNhdGUoV2ViS2l0V2Vi
VmlldyosIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCopOwogZ2Jvb2xlYW4gd2Via2l0V2Vi
Vmlld1NjcmlwdERpYWxvZyhXZWJLaXRXZWJWaWV3KiwgV2ViS2l0U2NyaXB0RGlhbG9nKik7CiBn
Ym9vbGVhbiB3ZWJraXRXZWJWaWV3UnVuRmlsZUNob29zZXIoV2ViS2l0V2ViVmlldyosIFdlYktp
dEZpbGVDaG9vc2VyUmVxdWVzdCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRPcHRpb25NZW51LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0T3B0aW9uTWVudS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDVmMWVlZGJhNjcxODkxZDJkNGNiMDk5NTg1NGE4NTk1ODk0YTEyMjkuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRPcHRpb25NZW51LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE4NiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJXZWJLaXRPcHRpb25NZW51LmgiCi0KLSNpbmNsdWRlICJXZWJL
aXRPcHRpb25NZW51SXRlbVByaXZhdGUuaCIKLSNpbmNsdWRlICJXZWJLaXRPcHRpb25NZW51UHJp
dmF0ZS5oIgotI2luY2x1ZGUgPHd0Zi9nbGliL1dURkdUeXBlLmg+Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBXZWJLaXQ7Ci0KLS8qKgotICogU0VDVElPTjogV2ViS2l0T3B0aW9uTWVudQotICogQFNob3J0
X2Rlc2NyaXB0aW9uOgotICogQFRpdGxlOiBXZWJLaXRPcHRpb25NZW51Ci0gKgotICogV2ViS2l0
T3B0aW9uTWVudSByZXByZXNlbnRzIHRoZSBkcm9wZG93biBtZW51IG9mIGEgc2VsZWN0IGVsZW1l
bnQgaW4gYSAjV2ViS2l0V2ViVmlldy4KLSAqCi0gKiBXaGVuIGEgc2VsZWN0IGVsZW1lbnQgaW4g
YSAjV2ViS2l0V2ViVmlldyBuZWVkcyB0byBkaXNwbGF5IGEgZHJvcGRvd24gbWVudSwgdGhlIHNp
Z25hbAotICogI1dlYktpdFdlYlZpZXc6OnNob3ctb3B0aW9uLW1lbnUgaXMgZW1pdHRlZCwgcHJv
dmlkaW5nIGEgV2ViS2l0T3B0aW9uTWVudSB3aXRoIHRoZQotICogI1dlYktpdE9wdGlvbk1lbnVJ
dGVtPCEtLSAtLT5zIHRoYXQgc2hvdWxkIGJlIGRpc3BsYXllZC4KLSAqCi0gKiBTaW5jZTogMi4x
OAotICovCi0KLXN0cnVjdCBfV2ViS2l0T3B0aW9uTWVudVByaXZhdGUgewotICAgIFZlY3RvcjxX
ZWJLaXRPcHRpb25NZW51SXRlbT4gaXRlbXM7Ci0gICAgUmVmUHRyPFdlYktpdFBvcHVwTWVudT4g
cG9wdXBNZW51OwotfTsKLQotZW51bSB7Ci0gICAgQ0xPU0UsCi0KLSAgICBMQVNUX1NJR05BTAot
fTsKLQotc3RhdGljIGd1aW50IHNpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OwotCi1XRUJL
SVRfREVGSU5FX1RZUEUoV2ViS2l0T3B0aW9uTWVudSwgd2Via2l0X29wdGlvbl9tZW51LCBHX1RZ
UEVfT0JKRUNUKQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfb3B0aW9uX21lbnVfY2xhc3NfaW5pdChX
ZWJLaXRPcHRpb25NZW51Q2xhc3MqIG9wdGlvbk1lbnVDbGFzcykKLXsKLSAgICAvKioKLSAgICAg
KiBXZWJLaXRPcHRpb25NZW51OjpjbG9zZToKLSAgICAgKiBAbWVudTogdGhlICNXZWJLaXRPcHRp
b25NZW51IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAotICAgICAqCi0gICAgICogRW1p
dHRlZCB3aGVuIGNsb3NpbmcgYSAjV2ViS2l0T3B0aW9uTWVudSBpcyByZXF1ZXN0ZWQuIFRoaXMg
Y2FuIGhhcHBlbgotICAgICAqIHdoZW4gdGhlIHVzZXIgZXhwbGljaXRseSBjYWxscyB3ZWJraXRf
b3B0aW9uX21lbnVfY2xvc2UoKSBvciB3aGVuIHRoZQotICAgICAqIGVsZW1lbnQgaXMgZGV0YWNo
ZWQgZnJvbSB0aGUgY3VycmVudCBwYWdlLgotICAgICAqCi0gICAgICogU2luY2U6IDIuMTgKLSAg
ICAgKi8KLSAgICBzaWduYWxzW0NMT1NFXSA9Ci0gICAgICAgIGdfc2lnbmFsX25ldygiY2xvc2Ui
LAotICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mob3B0aW9uTWVudUNsYXNzKSwKLSAgICAg
ICAgICAgIEdfU0lHTkFMX1JVTl9MQVNULAotICAgICAgICAgICAgMCwgbnVsbHB0ciwgbnVsbHB0
ciwKLSAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19WT0lELAotICAgICAgICAg
ICAgR19UWVBFX05PTkUsIDApOwotfQotCi1XZWJLaXRPcHRpb25NZW51KiB3ZWJraXRPcHRpb25N
ZW51Q3JlYXRlKFdlYktpdFBvcHVwTWVudSYgcG9wdXBNZW51LCBjb25zdCBWZWN0b3I8V2ViUG9w
dXBJdGVtPiYgaXRlbXMsIGludDMyX3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSAgICBhdXRvKiBtZW51
ID0gV0VCS0lUX09QVElPTl9NRU5VKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9PUFRJT05fTUVO
VSwgbnVsbHB0cikpOwotICAgIG1lbnUtPnByaXYtPnBvcHVwTWVudSA9ICZwb3B1cE1lbnU7Ci0g
ICAgbWVudS0+cHJpdi0+aXRlbXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShpdGVtcy5zaXplKCkp
OwotICAgIGZvciAoY29uc3QgYXV0byYgaXRlbSA6IGl0ZW1zKQotICAgICAgICBtZW51LT5wcml2
LT5pdGVtcy51bmNoZWNrZWRBcHBlbmQoV2ViS2l0T3B0aW9uTWVudUl0ZW0oaXRlbSkpOwotICAg
IGlmIChzZWxlY3RlZEluZGV4ID49IDApIHsKLSAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVu
c2lnbmVkPihzZWxlY3RlZEluZGV4KSA8IG1lbnUtPnByaXYtPml0ZW1zLnNpemUoKSk7Ci0gICAg
ICAgIG1lbnUtPnByaXYtPml0ZW1zW3NlbGVjdGVkSW5kZXhdLmlzU2VsZWN0ZWQgPSB0cnVlOwot
ICAgIH0KLSAgICByZXR1cm4gbWVudTsKLX0KLQotLyoqCi0gKiB3ZWJraXRfb3B0aW9uX21lbnVf
Z2V0X25faXRlbXM6Ci0gKiBAbWVudTogYSAjV2ViS2l0T3B0aW9uTWVudQotICoKLSAqIEdldHMg
dGhlIGxlbmd0aCBvZiB0aGUgQG1lbnUuCi0gKgotICogUmV0dXJuczogdGhlIG51bWJlciBvZiAj
V2ViS2l0T3B0aW9uTWVudUl0ZW08IS0tIC0tPnMgaW4gQG1lbnUKLSAqCi0gKiBTaW5jZTogMi4x
OAotICovCi1ndWludCB3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X25faXRlbXMoV2ViS2l0T3B0aW9u
TWVudSogbWVudSkKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfT1BUSU9O
X01FTlUobWVudSksIDApOwotCi0gICAgcmV0dXJuIG1lbnUtPnByaXYtPml0ZW1zLnNpemUoKTsK
LX0KLQotLyoqCi0gKiB3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X2l0ZW06Ci0gKiBAbWVudTogYSAj
V2ViS2l0T3B0aW9uTWVudQotICogQGluZGV4OiB0aGUgaW5kZXggb2YgdGhlIGl0ZW0KLSAqCi0g
KiBSZXR1cm5zIHRoZSAjV2ViS2l0T3B0aW9uTWVudUl0ZW0gYXQgQGluZGV4IGluIEBtZW51Lgot
ICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogYSAjV2ViS2l0T3B0aW9uTWVudUl0ZW0g
b2YgQG1lbnUuCi0gKgotICogU2luY2U6IDIuMTgKLSAqLwotV2ViS2l0T3B0aW9uTWVudUl0ZW0q
IHdlYmtpdF9vcHRpb25fbWVudV9nZXRfaXRlbShXZWJLaXRPcHRpb25NZW51KiBtZW51LCBndWlu
dCBpbmRleCkKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfT1BUSU9OX01F
TlUobWVudSksIG51bGxwdHIpOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGluZGV4IDwgbWVu
dS0+cHJpdi0+aXRlbXMuc2l6ZSgpLCBudWxscHRyKTsKLQotICAgIHJldHVybiAmbWVudS0+cHJp
di0+aXRlbXNbaW5kZXhdOwotfQotCi0vKioKLSAqIHdlYmtpdF9vcHRpb25fbWVudV9zZWxlY3Rf
aXRlbToKLSAqIEBtZW51OiBhICNXZWJLaXRPcHRpb25NZW51Ci0gKiBAaW5kZXg6IHRoZSBpbmRl
eCBvZiB0aGUgaXRlbQotICoKLSAqIFNlbGVjdHMgdGhlICNXZWJLaXRPcHRpb25NZW51SXRlbSBh
dCBAaW5kZXggaW4gQG1lbnUuIFNlbGVjdGluZyBhbiBpdGVtIGNoYW5nZXMgdGhlCi0gKiB0ZXh0
IHNob3duIGJ5IHRoZSBjb21ibyBidXR0b24sIGJ1dCBpdCBkb2Vzbid0IGNoYW5nZSB0aGUgdmFs
dWUgb2YgdGhlIGVsZW1lbnQuIFlvdSBuZWVkIHRvCi0gKiBleHBsaWNpdGx5IGFjdGl2YXRlIHRo
ZSBpdGVtIHdpdGggd2Via2l0X29wdGlvbl9tZW51X3NlbGVjdF9pdGVtKCkgb3IgY2xvc2UgdGhl
IG1lbnUgd2l0aAotICogd2Via2l0X29wdGlvbl9tZW51X2Nsb3NlKCkgaW4gd2hpY2ggY2FzZSB0
aGUgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW0gd2lsbCBiZSBhY3RpdmF0ZWQuCi0gKgotICogU2lu
Y2U6IDIuMTgKLSAqLwotdm9pZCB3ZWJraXRfb3B0aW9uX21lbnVfc2VsZWN0X2l0ZW0oV2ViS2l0
T3B0aW9uTWVudSogbWVudSwgZ3VpbnQgaW5kZXgpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfSVNfT1BUSU9OX01FTlUobWVudSkpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoaW5kZXgg
PCBtZW51LT5wcml2LT5pdGVtcy5zaXplKCkpOwotCi0gICAgbWVudS0+cHJpdi0+cG9wdXBNZW51
LT5zZWxlY3RJdGVtKGluZGV4KTsKLX0KLQotLyoqCi0gKiB3ZWJraXRfb3B0aW9uX21lbnVfYWN0
aXZhdGVfaXRlbToKLSAqIEBtZW51OiBhICNXZWJLaXRPcHRpb25NZW51Ci0gKiBAaW5kZXg6IHRo
ZSBpbmRleCBvZiB0aGUgaXRlbQotICoKLSAqIEFjdGl2YXRlcyB0aGUgI1dlYktpdE9wdGlvbk1l
bnVJdGVtIGF0IEBpbmRleCBpbiBAbWVudS4gQWN0aXZhdGluZyBhbiBpdGVtIGNoYW5nZXMgdGhl
IHZhbHVlCi0gKiBvZiB0aGUgZWxlbWVudCBtYWtpbmcgdGhlIGl0ZW0gdGhlIGFjdGl2ZSBvbmUu
IFlvdSBhcmUgZXhwZWN0ZWQgdG8gY2xvc2UgdGhlIG1lbnUgd2l0aAotICogd2Via2l0X29wdGlv
bl9tZW51X2Nsb3NlKCkgYWZ0ZXIgYWN0aXZhdGluZyBhbiBpdGVtLCBjYWxsaW5nIHRoaXMgZnVu
Y3Rpb24gYWdhaW4gd2lsbCBoYXZlIG5vCi0gKiBlZmZlY3QuCi0gKgotICogU2luY2U6IDIuMTgK
LSAqLwotdm9pZCB3ZWJraXRfb3B0aW9uX21lbnVfYWN0aXZhdGVfaXRlbShXZWJLaXRPcHRpb25N
ZW51KiBtZW51LCBndWludCBpbmRleCkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9J
U19PUFRJT05fTUVOVShtZW51KSk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChpbmRleCA8IG1lbnUt
PnByaXYtPml0ZW1zLnNpemUoKSk7Ci0KLSAgICBtZW51LT5wcml2LT5wb3B1cE1lbnUtPmFjdGl2
YXRlSXRlbShpbmRleCk7Ci19Ci0KLS8qKgotICogd2Via2l0X29wdGlvbl9tZW51X2Nsb3NlOgot
ICogQG1lbnU6IGEgI1dlYktpdE9wdGlvbk1lbnUKLSAqCi0gKiBSZXF1ZXN0IHRvIGNsb3NlIGEg
I1dlYktpdE9wdGlvbk1lbnUuIFRoaXMgZW1pdHMgV2ViS2l0T3B0aW9uTWVudTo6Y2xvc2Ugc2ln
bmFsLgotICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYWx3YXlzIGJlIGNhbGxlZCB0byBub3RpZnkg
V2ViS2l0IHRoYXQgdGhlIGFzc29jaWF0ZWQKLSAqIG1lbnUgaGFzIGJlZW4gY2xvc2VkLiBJZiB0
aGUgbWVudSBpcyBjbG9zZWQgYW5kIG5laXRoZXIgd2Via2l0X29wdGlvbl9tZW51X3NlbGVjdF9p
dGVtKCkKLSAqIG5vciB3ZWJraXRfb3B0aW9uX21lbnVfYWN0aXZhdGVfaXRlbSgpIGhhdmUgYmVl
biBjYWxsZWQsIHRoZSBlbGVtZW50IHZhbHVlIHJlbWFpbnMKLSAqIHVuY2hhbmdlZC4KLSAqCi0g
KiBTaW5jZTogMi4xOAotICovCi12b2lkIHdlYmtpdF9vcHRpb25fbWVudV9jbG9zZShXZWJLaXRP
cHRpb25NZW51KiBtZW51KQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX09QVElP
Tl9NRU5VKG1lbnUpKTsKLQotICAgIGdfc2lnbmFsX2VtaXQobWVudSwgc2lnbmFsc1tDTE9TRV0s
IDAsIG51bGxwdHIpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRPcHRpb25NZW51SXRlbS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdE9wdGlvbk1lbnVJdGVtLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNjg4ODA4ODUzNmQyMTU0NzQ0MGVhNWVjMjc4N2ZlZDhlNzY1YjI1ZS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdE9wdGlvbk1lbnVJdGVtLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDE3NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJLaXRPcHRpb25NZW51SXRlbS5oIgotCi0jaW5j
bHVkZSAiV2ViS2l0T3B0aW9uTWVudUl0ZW1Qcml2YXRlLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBX
ZWJLaXQ7Ci0KLS8qKgotICogU0VDVElPTjogV2ViS2l0T3B0aW9uTWVudUl0ZW0KLSAqIEBTaG9y
dF9kZXNjcmlwdGlvbjogT25lIGl0ZW0gb2YgdGhlICNXZWJLaXRPcHRpb25NZW51Ci0gKiBAVGl0
bGU6IFdlYktpdE9wdGlvbk1lbnVJdGVtCi0gKgotICogVGhlICNXZWJLaXRPcHRpb25NZW51IGlz
IGNvbXBvc2VkIG9mIFdlYktpdE9wdGlvbk1lbnVJdGVtPCEtLSAtLT5zLgotICogQSBXZWJLaXRP
cHRpb25NZW51SXRlbSBhbHdheXMgaGFzIGEgbGFiZWwgYW5kIGNhbiBjb250YWluIGEgdG9vbHRp
cCB0ZXh0LgotICogWW91IGNhbiB1c2UgdGhlIFdlYktpdE9wdGlvbk1lbnVJdGVtIG9mIGEgI1dl
YktpdE9wdGlvbk1lbnUgdG8gYnVpbGQgeW91cgotICogb3duIG1lbnVzLgotICoKLSAqIFNpbmNl
OiAyLjE4Ci0gKi8KLQotR19ERUZJTkVfQk9YRURfVFlQRShXZWJLaXRPcHRpb25NZW51SXRlbSwg
d2Via2l0X29wdGlvbl9tZW51X2l0ZW0sIHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2NvcHksIHdl
YmtpdF9vcHRpb25fbWVudV9pdGVtX2ZyZWUpCi0KLS8qKgotICogd2Via2l0X29wdGlvbl9tZW51
X2l0ZW1fY29weToKLSAqIEBpdGVtOiBhICNXZWJLaXRPcHRpb25NZW51SXRlbQotICoKLSAqIE1h
a2UgYSBjb3B5IG9mIHRoZSAjV2ViS2l0T3B0aW9uTWVudUl0ZW0uCi0gKgotICogUmV0dXJuczog
KHRyYW5zZmVyIGZ1bGwpOiBBIGNvcHkgb2YgcGFzc2VkIGluICNXZWJLaXRPcHRpb25NZW51SXRl
bQotICoKLSAqIFNpbmNlOiAyLjE4Ci0gKi8KLVdlYktpdE9wdGlvbk1lbnVJdGVtKiB3ZWJraXRf
b3B0aW9uX21lbnVfaXRlbV9jb3B5KFdlYktpdE9wdGlvbk1lbnVJdGVtKiBpdGVtKQotewotICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGl0ZW0sIG51bGxwdHIpOwotCi0gICAgYXV0byogY29weUl0
ZW0gPSBzdGF0aWNfY2FzdDxXZWJLaXRPcHRpb25NZW51SXRlbSo+KGZhc3RNYWxsb2Moc2l6ZW9m
KFdlYktpdE9wdGlvbk1lbnVJdGVtKSkpOwotICAgIG5ldyAoY29weUl0ZW0pIFdlYktpdE9wdGlv
bk1lbnVJdGVtKGl0ZW0pOwotICAgIHJldHVybiBjb3B5SXRlbTsKLX0KLQotLyoqCi0gKiB3ZWJr
aXRfb3B0aW9uX21lbnVfaXRlbV9mcmVlOgotICogQGl0ZW06IEEgI1dlYktpdE9wdGlvbk1lbnVJ
dGVtCi0gKgotICogRnJlZSB0aGUgI1dlYktpdE9wdGlvbk1lbnVJdGVtLgotICoKLSAqIFNpbmNl
OiAyLjE4Ci0gKi8KLXZvaWQgd2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZnJlZShXZWJLaXRPcHRp
b25NZW51SXRlbSogaXRlbSkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKGl0ZW0pOwotCi0gICAg
aXRlbS0+fldlYktpdE9wdGlvbk1lbnVJdGVtKCk7Ci0gICAgZmFzdEZyZWUoaXRlbSk7Ci19Ci0K
LS8qKgotICogd2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X2xhYmVsOgotICogQGl0ZW06IGEg
I1dlYktpdE9wdGlvbk1lbnVJdGVtCi0gKgotICogR2V0IHRoZSBsYWJlbCBvZiBhICNXZWJLaXRP
cHRpb25NZW51SXRlbS4KLSAqCi0gKiBSZXR1cm5zOiBUaGUgbGFiZWwgb2YgQGl0ZW0uCi0gKgot
ICogU2luY2U6IDIuMTgKLSAqLwotY29uc3QgZ2NoYXIqIHdlYmtpdF9vcHRpb25fbWVudV9pdGVt
X2dldF9sYWJlbChXZWJLaXRPcHRpb25NZW51SXRlbSogaXRlbSkKLXsKLSAgICBnX3JldHVybl92
YWxfaWZfZmFpbChpdGVtLCBudWxscHRyKTsKLQotICAgIHJldHVybiBpdGVtLT5sYWJlbC5kYXRh
KCk7Ci19Ci0KLS8qKgotICogd2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X3Rvb2x0aXA6Ci0g
KiBAaXRlbTogYSAjV2ViS2l0T3B0aW9uTWVudUl0ZW0KLSAqCi0gKiBHZXQgdGhlIHRvb2x0aXAg
b2YgYSAjV2ViS2l0T3B0aW9uTWVudUl0ZW0uCi0gKgotICogUmV0dXJuczogVGhlIHRvb2x0aXAg
b2YgQGl0ZW0sIG9yICVOVUxMLgotICoKLSAqIFNpbmNlOiAyLjE4Ci0gKi8KLWNvbnN0IGdjaGFy
KiB3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfdG9vbHRpcChXZWJLaXRPcHRpb25NZW51SXRl
bSogaXRlbSkKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChpdGVtLCBudWxscHRyKTsKLQot
ICAgIHJldHVybiBpdGVtLT50b29sdGlwLmlzTnVsbCgpID8gbnVsbHB0ciA6IGl0ZW0tPnRvb2x0
aXAuZGF0YSgpOwotfQotCi0vKioKLSAqIHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3Vw
X2xhYmVsOgotICogQGl0ZW06IGEgI1dlYktpdE9wdGlvbk1lbnVJdGVtCi0gKgotICogV2hldGhl
ciBhICNXZWJLaXRPcHRpb25NZW51SXRlbSBpcyBhIGdyb3VwIGxhYmVsLgotICoKLSAqIFJldHVy
bnM6ICVUUlVFIGlmIHRoZSBAaXRlbSBpcyBhIGdyb3VwIGxhYmVsIG9yICVGQUxTRSBvdGhlcndp
c2UuCi0gKgotICogU2luY2U6IDIuMTgKLSAqLwotZ2Jvb2xlYW4gd2Via2l0X29wdGlvbl9tZW51
X2l0ZW1faXNfZ3JvdXBfbGFiZWwoV2ViS2l0T3B0aW9uTWVudUl0ZW0qIGl0ZW0pCi17Ci0gICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoaXRlbSwgRkFMU0UpOwotCi0gICAgcmV0dXJuIGl0ZW0tPmlz
R3JvdXBMYWJlbDsKLX0KLQotLyoqCi0gKiB3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91
cF9jaGlsZDoKLSAqIEBpdGVtOiBhICNXZWJLaXRPcHRpb25NZW51SXRlbQotICoKLSAqIFdoZXRo
ZXIgYSAjV2ViS2l0T3B0aW9uTWVudUl0ZW0gaXMgYSBncm91cCBjaGlsZC4KLSAqCi0gKiBSZXR1
cm5zOiAlVFJVRSBpZiB0aGUgQGl0ZW0gaXMgYSBncm91cCBjaGlsZCBvciAlRkFMU0Ugb3RoZXJ3
aXNlLgotICoKLSAqIFNpbmNlOiAyLjE4Ci0gKi8KLWdib29sZWFuIHdlYmtpdF9vcHRpb25fbWVu
dV9pdGVtX2lzX2dyb3VwX2NoaWxkKFdlYktpdE9wdGlvbk1lbnVJdGVtKiBpdGVtKQotewotICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGl0ZW0sIEZBTFNFKTsKLQotICAgIHJldHVybiBpdGVtLT5p
c0dyb3VwQ2hpbGQ7Ci19Ci0KLS8qKgotICogd2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZW5h
YmxlZDoKLSAqIEBpdGVtOiBhICNXZWJLaXRPcHRpb25NZW51SXRlbQotICoKLSAqIFdoZXRoZXIg
YSAjV2ViS2l0T3B0aW9uTWVudUl0ZW0gaXMgZW5hYmxlZC4KLSAqCi0gKiBSZXR1cm5zOiAlVFJV
RSBpZiB0aGUgQGl0ZW0gaXMgZW5hYmxlZCBvciAlRkFMU0Ugb3RoZXJ3aXNlLgotICoKLSAqIFNp
bmNlOiAyLjE4Ci0gKi8KLWdib29sZWFuIHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2VuYWJs
ZWQoV2ViS2l0T3B0aW9uTWVudUl0ZW0qIGl0ZW0pCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoaXRlbSwgRkFMU0UpOwotCi0gICAgcmV0dXJuIGl0ZW0tPmlzRW5hYmxlZDsKLX0KLQotLyoq
Ci0gKiB3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19zZWxlY3RlZDoKLSAqIEBpdGVtOiBhICNX
ZWJLaXRPcHRpb25NZW51SXRlbQotICoKLSAqIFdoZXRoZXIgYSAjV2ViS2l0T3B0aW9uTWVudUl0
ZW0gaXMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBvbmUuCi0gKgotICogUmV0dXJuczogJVRSVUUg
aWYgdGhlIEBpdGVtIGlzIHNlbGVjdGVkIG9yICVGQUxTRSBvdGhlcndpc2UuCi0gKgotICogU2lu
Y2U6IDIuMTgKLSAqLwotZ2Jvb2xlYW4gd2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfc2VsZWN0
ZWQoV2ViS2l0T3B0aW9uTWVudUl0ZW0qIGl0ZW0pCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoaXRlbSwgRkFMU0UpOwotCi0gICAgcmV0dXJuIGl0ZW0tPmlzU2VsZWN0ZWQ7Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE9wdGlvbk1lbnVJ
dGVtUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRPcHRp
b25NZW51SXRlbVByaXZhdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjU4NWU3
YjYyYmFiNTZiYWUzODgxYmIzZmNiN2NjYjU3ZjNjOTFmOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdE9wdGlvbk1lbnVJdGVtUHJpdmF0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgIldlYktpdE9wdGlvbk1lbnVJdGVtLmgiCi0jaW5jbHVkZSAiV2ViUG9wdXBJ
dGVtLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1zdHJ1Y3QgX1dlYktpdE9w
dGlvbk1lbnVJdGVtIHsKLSAgICBfV2ViS2l0T3B0aW9uTWVudUl0ZW0oKSA9IGRlZmF1bHQ7Ci0K
LSAgICBfV2ViS2l0T3B0aW9uTWVudUl0ZW0oY29uc3QgV2ViS2l0OjpXZWJQb3B1cEl0ZW0mIGl0
ZW0pCi0gICAgICAgIDogbGFiZWwoaXRlbS5tX3RleHQuc3RyaXBXaGl0ZVNwYWNlKCkudXRmOCgp
KQotICAgICAgICAsIGlzR3JvdXBMYWJlbChpdGVtLm1faXNMYWJlbCkKLSAgICAgICAgLCBpc0dy
b3VwQ2hpbGQoaXRlbS5tX3RleHQuc3RhcnRzV2l0aCgiICAgICIpKQotICAgICAgICAsIGlzRW5h
YmxlZChpdGVtLm1faXNFbmFibGVkKQotICAgIHsKLSAgICAgICAgaWYgKCFpdGVtLm1fdG9vbFRp
cC5pc0VtcHR5KCkpCi0gICAgICAgICAgICB0b29sdGlwID0gaXRlbS5tX3Rvb2xUaXAudXRmOCgp
OwotICAgIH0KLQotICAgIGV4cGxpY2l0IF9XZWJLaXRPcHRpb25NZW51SXRlbShfV2ViS2l0T3B0
aW9uTWVudUl0ZW0qIG90aGVyKQotICAgICAgICA6IGxhYmVsKG90aGVyLT5sYWJlbCkKLSAgICAg
ICAgLCB0b29sdGlwKG90aGVyLT50b29sdGlwKQotICAgICAgICAsIGlzR3JvdXBMYWJlbChvdGhl
ci0+aXNHcm91cExhYmVsKQotICAgICAgICAsIGlzR3JvdXBDaGlsZChvdGhlci0+aXNHcm91cENo
aWxkKQotICAgICAgICAsIGlzRW5hYmxlZChvdGhlci0+aXNFbmFibGVkKQotICAgICAgICAsIGlz
U2VsZWN0ZWQob3RoZXItPmlzU2VsZWN0ZWQpCi0gICAgewotICAgIH0KLQotICAgIENTdHJpbmcg
bGFiZWw7Ci0gICAgQ1N0cmluZyB0b29sdGlwOwotICAgIGJvb2wgaXNHcm91cExhYmVsIHsgZmFs
c2UgfTsKLSAgICBib29sIGlzR3JvdXBDaGlsZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBpc0VuYWJs
ZWQgeyB0cnVlIH07Ci0gICAgYm9vbCBpc1NlbGVjdGVkIHsgZmFsc2UgfTsKLX07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE9wdGlvbk1lbnVQcml2
YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE9wdGlvbk1lbnVQ
cml2YXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkNGI4YzZhNDVjOWZmNDZh
NTIxMzUwMmU4YTA1M2U0MTExMThmOWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRPcHRp
b25NZW51UHJpdmF0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIldl
YktpdE9wdGlvbk1lbnUuaCIKLSNpbmNsdWRlICJXZWJLaXRQb3B1cE1lbnUuaCIKLQotV2ViS2l0
T3B0aW9uTWVudSogd2Via2l0T3B0aW9uTWVudUNyZWF0ZShXZWJLaXQ6OldlYktpdFBvcHVwTWVu
dSYsIGNvbnN0IFZlY3RvcjxXZWJLaXQ6OldlYlBvcHVwSXRlbT4mLCBpbnQzMl90IHNlbGVjdGVk
SW5kZXgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9QYWdl
Q2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1BhZ2VDbGll
bnRJbXBsLmNwcAppbmRleCA1OTJkNzMzNDk5OTg3MTFmMTdjMTgxYzJmMGNkZWE2YjRjNGYwNjgz
Li5kMGQ2ZDA4ZThmYTVkNzNiY2YwZjMwMTk4MzQ5YTk0NjAyZWVmN2MyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1BhZ2VDbGllbnRJbXBsLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1BhZ2VDbGllbnRJbXBsLmNwcApAQCAtMzMs
NiArMzMsNyBAQAogI2luY2x1ZGUgIldQRVZpZXcuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0TWVu
dVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVQcm94eVdQRS5oIgorI2luY2x1ZGUg
IldlYktpdFBvcHVwTWVudS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQWN0aXZpdHlTdGF0ZS5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvRE9NUGFzdGVBY2Nlc3MuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05v
dEltcGxlbWVudGVkLmg+CkBAIC0yNTMsOSArMjU0LDkgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6
d2hlZWxFdmVudFdhc05vdEhhbmRsZWRCeVdlYkNvcmUoY29uc3QgTmF0aXZlV2ViV2hlZWxFdmVu
dCYKIHsKIH0KIAotUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5PiBQYWdlQ2xpZW50SW1wbDo6Y3Jl
YXRlUG9wdXBNZW51UHJveHkoV2ViUGFnZVByb3h5JikKK1JlZlB0cjxXZWJQb3B1cE1lbnVQcm94
eT4gUGFnZUNsaWVudEltcGw6OmNyZWF0ZVBvcHVwTWVudVByb3h5KFdlYlBhZ2VQcm94eSYgcGFn
ZSkKIHsKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gV2ViS2l0UG9wdXBNZW51Ojpj
cmVhdGUobV92aWV3LndlYlZpZXcoKSwgcGFnZSk7CiB9CiAKICNpZiBFTkFCTEUoQ09OVEVYVF9N
RU5VUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV1BFVmll
dy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dQRVZpZXcuY3BwCmluZGV4
IGJiOGUzNjE4MDEyMTEwODhlYzFiNTJhNjgzNTk1MTYyNzljNTQ1NjMuLmI4YzFmODgwMGY5ODll
ZjBiNjZiMTY0MTM0ZDU0NWU2NWE0MmU3ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS93cGUvV1BFVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL3dwZS9XUEVWaWV3LmNwcApAQCAtNDQsMTEgKzQ0LDEyIEBAIHVzaW5nIG5hbWVzcGFjZSBX
ZWJLaXQ7CiAKIG5hbWVzcGFjZSBXS1dQRSB7CiAKLVZpZXc6OlZpZXcoc3RydWN0IHdwZV92aWV3
X2JhY2tlbmQqIGJhY2tlbmQsIGNvbnN0IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24mIGJhc2VDb25m
aWd1cmF0aW9uKQorVmlldzo6VmlldyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBzdHJ1Y3Qgd3Bl
X3ZpZXdfYmFja2VuZCogYmFja2VuZCwgY29uc3QgQVBJOjpQYWdlQ29uZmlndXJhdGlvbiYgYmFz
ZUNvbmZpZ3VyYXRpb24pCiAgICAgOiBtX2NsaWVudChtYWtlVW5pcXVlPEFQSTo6Vmlld0NsaWVu
dD4oKSkKICAgICAsIG1fcGFnZUNsaWVudChtYWtlVW5pcXVlPFBhZ2VDbGllbnRJbXBsPigqdGhp
cykpCiAgICAgLCBtX3NpemUgeyA4MDAsIDYwMCB9CiAgICAgLCBtX3ZpZXdTdGF0ZUZsYWdzIHsg
V2ViQ29yZTo6QWN0aXZpdHlTdGF0ZTo6V2luZG93SXNBY3RpdmUsIFdlYkNvcmU6OkFjdGl2aXR5
U3RhdGU6OklzRm9jdXNlZCwgV2ViQ29yZTo6QWN0aXZpdHlTdGF0ZTo6SXNWaXNpYmxlLCBXZWJD
b3JlOjpBY3Rpdml0eVN0YXRlOjpJc0luV2luZG93IH0KKyAgICAsIG1fd2ViVmlldyh3ZWJWaWV3
KQogICAgICwgbV9iYWNrZW5kKGJhY2tlbmQpCiB7CiAgICAgQVNTRVJUKG1fYmFja2VuZCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dQRVZpZXcuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV1BFVmlldy5oCmluZGV4IGYyM2RmYzI3YTdj
NGIzZTBmZTEzMTM3ODBmNWRiMjg2Nzc3ZDY2YTQuLjk4MTdmZmRmY2IyOTFhYWNhMTU2NjZhZmVj
NTAyZGExNTcxODJlZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93
cGUvV1BFVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV1BFVmll
dy5oCkBAIC00MSw2ICs0MSw3IEBACiAKIHR5cGVkZWYgc3RydWN0IE9wYXF1ZUpTQ29udGV4dCog
SlNHbG9iYWxDb250ZXh0UmVmOwogdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdElucHV0TWV0aG9kQ29u
dGV4dCBXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2Vi
VmlldyBXZWJLaXRXZWJWaWV3Owogc3RydWN0IHdwZV9pbnB1dF9rZXlib2FyZF9ldmVudDsKIHN0
cnVjdCB3cGVfdmlld19iYWNrZW5kOwogCkBAIC02NCw5ICs2NSw5IEBAIG5hbWVzcGFjZSBXS1dQ
RSB7CiAKIGNsYXNzIFZpZXcgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpU
eXBlOjpWaWV3PiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFZpZXcqIGNyZWF0ZShzdHJ1Y3Qgd3Bl
X3ZpZXdfYmFja2VuZCogYmFja2VuZCwgY29uc3QgQVBJOjpQYWdlQ29uZmlndXJhdGlvbiYgY29u
ZmlndXJhdGlvbikKKyAgICBzdGF0aWMgVmlldyogY3JlYXRlKFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcsIHN0cnVjdCB3cGVfdmlld19iYWNrZW5kKiBiYWNrZW5kLCBjb25zdCBBUEk6OlBhZ2VDb25m
aWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBWaWV3
KGJhY2tlbmQsIGNvbmZpZ3VyYXRpb24pOworICAgICAgICByZXR1cm4gbmV3IFZpZXcod2ViVmll
dywgYmFja2VuZCwgY29uZmlndXJhdGlvbik7CiAgICAgfQogCiAgICAgflZpZXcoKTsKQEAgLTg4
LDYgKzg5LDcgQEAgcHVibGljOgogCiAgICAgV2ViS2l0OjpXZWJQYWdlUHJveHkmIHBhZ2UoKSB7
IHJldHVybiAqbV9wYWdlUHJveHk7IH0KIAorICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcoKSB7
IHJldHVybiBtX3dlYlZpZXc7IH0KICAgICBzdHJ1Y3Qgd3BlX3ZpZXdfYmFja2VuZCogYmFja2Vu
ZCgpIHsgcmV0dXJuIG1fYmFja2VuZDsgfQogCiAgICAgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQpAQCAtMTA2LDcgKzEwOCw3IEBAIHB1Ymxp
YzoKICNlbmRpZgogCiBwcml2YXRlOgotICAgIFZpZXcoc3RydWN0IHdwZV92aWV3X2JhY2tlbmQq
LCBjb25zdCBBUEk6OlBhZ2VDb25maWd1cmF0aW9uJik7CisgICAgVmlldyhXZWJLaXRXZWJWaWV3
Kiwgc3RydWN0IHdwZV92aWV3X2JhY2tlbmQqLCBjb25zdCBBUEk6OlBhZ2VDb25maWd1cmF0aW9u
Jik7CiAKICAgICB2b2lkIHNldFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwogICAgIHZv
aWQgc2V0Vmlld1N0YXRlKE9wdGlvblNldDxXZWJDb3JlOjpBY3Rpdml0eVN0YXRlOjpGbGFnPik7
CkBAIC0xMTksNiArMTIxLDcgQEAgcHJpdmF0ZToKICAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2l6
ZTsKICAgICBPcHRpb25TZXQ8V2ViQ29yZTo6QWN0aXZpdHlTdGF0ZTo6RmxhZz4gbV92aWV3U3Rh
dGVGbGFnczsKIAorICAgIFdlYktpdFdlYlZpZXcqIG1fd2ViVmlldzsKICAgICBzdHJ1Y3Qgd3Bl
X3ZpZXdfYmFja2VuZCogbV9iYWNrZW5kOwogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRPcHRpb25N
ZW51LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdE9wdGlvbk1lbnUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4wZmUyZWZmMDk0MTAwYzFkYzdkOGYxOGJjMzM2MTE3NTEyZjc4NTU5Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRP
cHRpb25NZW51LmgKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBJ
Z2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRfSF9JTlNJREVfXykgJiYgIWRlZmluZWQo
V0VCS0lUMl9DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8d3BlL3dlYmtpdC5oPiBjYW4gYmUg
aW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0T3B0aW9uTWVudV9o
CisjZGVmaW5lIFdlYktpdE9wdGlvbk1lbnVfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4K
KyNpbmNsdWRlIDx3cGUvV2ViS2l0RGVmaW5lcy5oPgorI2luY2x1ZGUgPHdwZS9XZWJLaXRPcHRp
b25NZW51SXRlbS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfT1BU
SU9OX01FTlUgICAgICAgICAgICAod2Via2l0X29wdGlvbl9tZW51X2dldF90eXBlKCkpCisjZGVm
aW5lIFdFQktJVF9PUFRJT05fTUVOVShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9PUFRJT05fTUVOVSwgV2ViS2l0T3B0aW9uTWVu
dSkpCisjZGVmaW5lIFdFQktJVF9JU19PUFRJT05fTUVOVShvYmopICAgICAgICAgKEdfVFlQRV9D
SEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9PUFRJT05fTUVOVSkpCisjZGVm
aW5lIFdFQktJVF9PUFRJT05fTUVOVV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFT
U19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9PUFRJT05fTUVOVSwgV2ViS2l0T3B0aW9uTWVu
dUNsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX09QVElPTl9NRU5VX0NMQVNTKGtsYXNzKSAoR19U
WVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX09QVElPTl9NRU5VKSkK
KyNkZWZpbmUgV0VCS0lUX09QVElPTl9NRU5VX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RB
TkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX09QVElPTl9NRU5VLCBXZWJLaXRPcHRp
b25NZW51Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0T3B0aW9uTWVudSAgICAgICAg
V2ViS2l0T3B0aW9uTWVudTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRPcHRpb25NZW51Q2xhc3Mg
ICBXZWJLaXRPcHRpb25NZW51Q2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0T3B0aW9uTWVu
dVByaXZhdGUgV2ViS2l0T3B0aW9uTWVudVByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0T3B0aW9u
TWVudSB7CisgICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICBXZWJLaXRPcHRpb25NZW51UHJpdmF0
ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0T3B0aW9uTWVudUNsYXNzIHsKKyAgICBHT2Jq
ZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworCisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQwKSAo
dm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQxKSAodm9pZCk7CisgICAgdm9pZCAo
Kl93ZWJraXRfcmVzZXJ2ZWQyKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQz
KSAodm9pZCk7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfb3B0aW9uX21lbnVfZ2V0
X3R5cGUgICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJIGd1aW50Cit3ZWJraXRfb3B0aW9uX21l
bnVfZ2V0X25faXRlbXMgICAgKFdlYktpdE9wdGlvbk1lbnUgKm1lbnUpOworCitXRUJLSVRfQVBJ
IFdlYktpdE9wdGlvbk1lbnVJdGVtICoKK3dlYmtpdF9vcHRpb25fbWVudV9nZXRfaXRlbSAgICAg
ICAoV2ViS2l0T3B0aW9uTWVudSAqbWVudSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ3VpbnQgICAgICAgICAgICAgaW5kZXgpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtp
dF9vcHRpb25fbWVudV9zZWxlY3RfaXRlbSAgICAoV2ViS2l0T3B0aW9uTWVudSAqbWVudSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgaW5kZXgp
OworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9vcHRpb25fbWVudV9hY3RpdmF0ZV9pdGVtICAo
V2ViS2l0T3B0aW9uTWVudSAqbWVudSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ3VpbnQgICAgICAgICAgICAgaW5kZXgpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9v
cHRpb25fbWVudV9jbG9zZSAgICAgICAgICAoV2ViS2l0T3B0aW9uTWVudSAqbWVudSk7CisKK0df
RU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL3dwZS9XZWJLaXRPcHRpb25NZW51SXRlbS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL3dwZS9XZWJLaXRPcHRpb25NZW51SXRlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc4ZmYyN2Q2ZWQyYTA3
ODVmYzgxN2FmNzVhYTM5ZTczOThhZGE3MjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdE9wdGlvbk1lbnVJdGVtLmgKQEAgLTAsMCArMSw2
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQo
X19XRUJLSVRfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoV0VCS0lUMl9DT01QSUxBVElPTikKKyNl
cnJvciAiT25seSA8d3BlL3dlYmtpdC5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2Vu
ZGlmCisKKyNpZm5kZWYgV2ViS2l0T3B0aW9uTWVudUl0ZW1faAorI2RlZmluZSBXZWJLaXRPcHRp
b25NZW51SXRlbV9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdwZS9X
ZWJLaXREZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9P
UFRJT05fTUVOVV9JVEVNICh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfdHlwZSgpKQorCit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0T3B0aW9uTWVudUl0ZW0gV2ViS2l0T3B0aW9uTWVudUl0ZW07
CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF90eXBlICAg
ICAgICh2b2lkKTsKKworV0VCS0lUX0FQSSBXZWJLaXRPcHRpb25NZW51SXRlbSAqCit3ZWJraXRf
b3B0aW9uX21lbnVfaXRlbV9jb3B5ICAgICAgICAgICAoV2ViS2l0T3B0aW9uTWVudUl0ZW0gKml0
ZW0pOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9vcHRpb25fbWVudV9pdGVtX2ZyZWUgICAg
ICAgICAgIChXZWJLaXRPcHRpb25NZW51SXRlbSAqaXRlbSk7CisKK1dFQktJVF9BUEkgY29uc3Qg
Z2NoYXIgKgord2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X2xhYmVsICAgICAgKFdlYktpdE9w
dGlvbk1lbnVJdGVtICppdGVtKTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCit3ZWJraXRf
b3B0aW9uX21lbnVfaXRlbV9nZXRfdG9vbHRpcCAgICAoV2ViS2l0T3B0aW9uTWVudUl0ZW0gKml0
ZW0pOworCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19n
cm91cF9sYWJlbCAoV2ViS2l0T3B0aW9uTWVudUl0ZW0gKml0ZW0pOworCitXRUJLSVRfQVBJIGdi
b29sZWFuCit3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9jaGlsZCAoV2ViS2l0T3B0
aW9uTWVudUl0ZW0gKml0ZW0pOworCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfb3B0aW9u
X21lbnVfaXRlbV9pc19lbmFibGVkICAgICAoV2ViS2l0T3B0aW9uTWVudUl0ZW0gKml0ZW0pOwor
CitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19zZWxlY3Rl
ZCAgICAoV2ViS2l0T3B0aW9uTWVudUl0ZW0gKml0ZW0pOworCitHX0VORF9ERUNMUworCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0UG9w
dXBNZW51LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0UG9wdXBN
ZW51LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xYWJkZDBiMjk1ZDU4ZDRhNDJkMzUyMThlM2Y4ZGNlZmM3OGFj
OGYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9X
ZWJLaXRQb3B1cE1lbnUuY3BwCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdFBv
cHVwTWVudS5oIgorCisjaW5jbHVkZSAiV2ViS2l0T3B0aW9uTWVudVByaXZhdGUuaCIKKyNpbmNs
dWRlICJXZWJLaXRXZWJWaWV3UHJpdmF0ZS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCitXZWJLaXRQb3B1cE1lbnU6OldlYktpdFBvcHVwTWVudShX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJQb3B1cE1lbnVQcm94eTo6Q2xpZW50JiBjbGllbnQp
CisgICAgOiBXZWJQb3B1cE1lbnVQcm94eShjbGllbnQpCisgICAgLCBtX3dlYlZpZXcod2ViVmll
dykKK3sKK30KKworc3RhdGljIHZvaWQgbWVudUNsb3NlQ2FsbGJhY2soV2ViS2l0UG9wdXBNZW51
KiBwb3B1cE1lbnUpCit7CisgICAgcG9wdXBNZW51LT5hY3RpdmF0ZUl0ZW0oV1RGOjpudWxsb3B0
KTsKK30KKwordm9pZCBXZWJLaXRQb3B1cE1lbnU6OnNob3dQb3B1cE1lbnUoY29uc3QgSW50UmVj
dCYgcmVjdCwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIGRvdWJsZSBwYWdlU2NhbGVGYWN0b3Is
IGNvbnN0IFZlY3RvcjxXZWJQb3B1cEl0ZW0+JiBpdGVtcywgY29uc3QgUGxhdGZvcm1Qb3B1cE1l
bnVEYXRhJiBwbGF0Zm9ybURhdGEsIGludDMyX3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBHUmVm
UHRyPFdlYktpdE9wdGlvbk1lbnU+IG1lbnUgPSBhZG9wdEdSZWYod2Via2l0T3B0aW9uTWVudUNy
ZWF0ZSgqdGhpcywgaXRlbXMsIHNlbGVjdGVkSW5kZXgpKTsKKyAgICBpZiAod2Via2l0V2ViVmll
d1Nob3dPcHRpb25NZW51KFdFQktJVF9XRUJfVklFVyhtX3dlYlZpZXcpLCBtZW51LmdldCgpKSkg
eworICAgICAgICBtX21lbnUgPSBXVEZNb3ZlKG1lbnUpOworICAgICAgICBnX3NpZ25hbF9jb25u
ZWN0X3N3YXBwZWQobV9tZW51LmdldCgpLCAiY2xvc2UiLCBHX0NBTExCQUNLKG1lbnVDbG9zZUNh
bGxiYWNrKSwgdGhpcyk7CisgICAgfQorfQorCit2b2lkIFdlYktpdFBvcHVwTWVudTo6aGlkZVBv
cHVwTWVudSgpCit7CisgICAgaWYgKG1fbWVudSkgeworICAgICAgICBnX3NpZ25hbF9oYW5kbGVy
c19kaXNjb25uZWN0X21hdGNoZWQobV9tZW51LmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAw
LCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlzKTsKKyAgICAgICAgd2Via2l0X29wdGlvbl9tZW51
X2Nsb3NlKG1fbWVudS5nZXQoKSk7CisgICAgfQorfQorCit2b2lkIFdlYktpdFBvcHVwTWVudTo6
Y2FuY2VsVHJhY2tpbmcoKQoreworICAgIGhpZGVQb3B1cE1lbnUoKTsKKyAgICBtX21lbnUgPSBu
dWxscHRyOworfQorCit2b2lkIFdlYktpdFBvcHVwTWVudTo6c2VsZWN0SXRlbSh1bnNpZ25lZCBp
dGVtSW5kZXgpCit7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+c2V0VGV4
dEZyb21JdGVtRm9yUG9wdXBNZW51KHRoaXMsIGl0ZW1JbmRleCk7CisgICAgbV9zZWxlY3RlZEl0
ZW0gPSBpdGVtSW5kZXg7Cit9CisKK3ZvaWQgV2ViS2l0UG9wdXBNZW51OjphY3RpdmF0ZUl0ZW0o
T3B0aW9uYWw8dW5zaWduZWQ+IGl0ZW1JbmRleCkKK3sKKyAgICBpZiAobV9jbGllbnQpCisgICAg
ICAgIG1fY2xpZW50LT52YWx1ZUNoYW5nZWRGb3JQb3B1cE1lbnUodGhpcywgaXRlbUluZGV4LnZh
bHVlT3IobV9zZWxlY3RlZEl0ZW0udmFsdWVPcigtMSkpKTsKKyAgICBpZiAobV9tZW51KSB7Cisg
ICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX21lbnUuZ2V0KCks
IEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIG51bGxwdHIsIG51bGxwdHIsIHRoaXMpOworICAg
ICAgICBtX21lbnUgPSBudWxscHRyOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFBvcHVw
TWVudS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRQb3B1cE1lbnUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi43YzE2MGY2MjEzZjc4ODhlODc0NDc4NGRhMzM5OWYyMTI4NGU1YzI3Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRQ
b3B1cE1lbnUuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEln
YWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViUG9wdXBNZW51UHJveHkuaCIK
KyNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRP
cHRpb25NZW51IFdlYktpdE9wdGlvbk1lbnU7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmll
dyBXZWJLaXRXZWJWaWV3OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViS2l0UG9w
dXBNZW51IGZpbmFsIDogcHVibGljIFdlYlBvcHVwTWVudVByb3h5IHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUmVmPFdlYktpdFBvcHVwTWVudT4gY3JlYXRlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcs
IFdlYlBvcHVwTWVudVByb3h5OjpDbGllbnQmIGNsaWVudCkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFdlYktpdFBvcHVwTWVudSh3ZWJWaWV3LCBjbGllbnQpKTsKKyAgICB9
CisgICAgfldlYktpdFBvcHVwTWVudSgpID0gZGVmYXVsdDsKKworICAgIHZvaWQgc2VsZWN0SXRl
bSh1bnNpZ25lZCBpdGVtSW5kZXgpOworICAgIHZvaWQgYWN0aXZhdGVJdGVtKE9wdGlvbmFsPHVu
c2lnbmVkPiBpdGVtSW5kZXgpOworCitwcml2YXRlOgorICAgIFdlYktpdFBvcHVwTWVudShXZWJL
aXRXZWJWaWV3KiwgV2ViUG9wdXBNZW51UHJveHk6OkNsaWVudCYpOworCisgICAgdm9pZCBzaG93
UG9wdXBNZW51KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBXZWJDb3JlOjpUZXh0RGlyZWN0aW9u
LCBkb3VibGUgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBWZWN0b3I8V2ViUG9wdXBJdGVtPiYsIGNv
bnN0IFBsYXRmb3JtUG9wdXBNZW51RGF0YSYsIGludDMyX3Qgc2VsZWN0ZWRJbmRleCkgb3ZlcnJp
ZGU7CisgICAgdm9pZCBoaWRlUG9wdXBNZW51KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBjYW5jZWxU
cmFja2luZygpIG92ZXJyaWRlOworCisgICAgV2ViS2l0V2ViVmlldyogbV93ZWJWaWV3OworICAg
IEdSZWZQdHI8V2ViS2l0T3B0aW9uTWVudT4gbV9tZW51OworICAgIE9wdGlvbmFsPHVuc2lnbmVk
PiBtX3NlbGVjdGVkSXRlbTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRXZWJWaWV3LmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYlZpZXcuaAppbmRleCAwMTc0MzRk
ZWJkZjcxNjIyM2Y3ZDZkMDFkNmQ3OTkzNzQ5Y2I4ZDQ4Li5kNmU4YzFjMGU2OTNjNTZhYTUwOTJh
Yzc2ZGYyY2NhYzFmMzEzNTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvd3BlL1dlYktpdFdlYlZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
d3BlL1dlYktpdFdlYlZpZXcuaApAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgPHdwZS9XZWJL
aXRKYXZhc2NyaXB0UmVzdWx0Lmg+CiAjaW5jbHVkZSA8d3BlL1dlYktpdE5hdmlnYXRpb25BY3Rp
b24uaD4KICNpbmNsdWRlIDx3cGUvV2ViS2l0Tm90aWZpY2F0aW9uLmg+CisjaW5jbHVkZSA8d3Bl
L1dlYktpdE9wdGlvbk1lbnUuaD4KICNpbmNsdWRlIDx3cGUvV2ViS2l0UGVybWlzc2lvblJlcXVl
c3QuaD4KICNpbmNsdWRlIDx3cGUvV2ViS2l0UG9saWN5RGVjaXNpb24uaD4KICNpbmNsdWRlIDx3
cGUvV2ViS2l0U2NyaXB0RGlhbG9nLmg+CkBAIC0yNDUsNyArMjQ2LDggQEAgc3RydWN0IF9XZWJL
aXRXZWJWaWV3Q2xhc3MgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdlYktpdFdlYlByb2Nlc3NUZXJtaW5hdGlvblJlYXNvbiByZWFzb24pOwog
ICAgIGdib29sZWFuICAgICAgICgqIHVzZXJfbWVzc2FnZV9yZWNlaXZlZCkgICAgICAgKFdlYktp
dFdlYlZpZXcgICAgICAgICAgICAgICAqd2ViX3ZpZXcsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0VXNlck1lc3NhZ2UgICAgICAgICAg
ICptZXNzYWdlKTsKLQorICAgIGdib29sZWFuICAgICAgICgqIHNob3dfb3B0aW9uX21lbnUpICAg
ICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0T3B0aW9u
TWVudSAgICAgICAgICAgICptZW51KTsKIAogICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMCkg
KHZvaWQpOwogICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMSkgKHZvaWQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9kb2NzL3dwZS0xLjAtc2VjdGlvbnMu
dHh0IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9kb2NzL3dwZS0xLjAtc2VjdGlv
bnMudHh0CmluZGV4IDFkMWQ1N2IxNzE4NTdlZDgxMTI1MzBlMjc2YjFlZWJhMmFiZWYzOTMuLjgz
ZGVmMjVhNTUwN2E3MTM2YWU2NGZlNjlmNDEyZjliNTE0NDM3MjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvZG9jcy93cGUtMS4wLXNlY3Rpb25zLnR4dAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL2RvY3Mvd3BlLTEuMC1zZWN0aW9ucy50
eHQKQEAgLTEyMzAsNiArMTIzMCw0OCBAQCBXZWJLaXRDb250ZXh0TWVudUl0ZW1Qcml2YXRlCiB3
ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X3R5cGUKIDwvU0VDVElPTj4KIAorPFNFQ1RJT04+
Cis8RklMRT5XZWJLaXRPcHRpb25NZW51PC9GSUxFPgorV2ViS2l0T3B0aW9uTWVudQord2Via2l0
X29wdGlvbl9tZW51X2dldF9uX2l0ZW1zCit3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X2l0ZW0KK3dl
YmtpdF9vcHRpb25fbWVudV9zZWxlY3RfaXRlbQord2Via2l0X29wdGlvbl9tZW51X2FjdGl2YXRl
X2l0ZW0KK3dlYmtpdF9vcHRpb25fbWVudV9jbG9zZQorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4K
K1dlYktpdE9wdGlvbk1lbnVDbGFzcworV0VCS0lUX1RZUEVfT1BUSU9OX01FTlUKK1dFQktJVF9P
UFRJT05fTUVOVQorV0VCS0lUX0lTX09QVElPTl9NRU5VCitXRUJLSVRfT1BUSU9OX01FTlVfQ0xB
U1MKK1dFQktJVF9JU19PUFRJT05fTUVOVV9DTEFTUworV0VCS0lUX09QVElPTl9NRU5VX0dFVF9D
TEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgorV2ViS2l0T3B0aW9uTWVudVByaXZhdGUKK3dl
YmtpdF9vcHRpb25fbWVudV9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxF
PldlYktpdE9wdGlvbk1lbnVJdGVtPC9GSUxFPgorV2ViS2l0T3B0aW9uTWVudUl0ZW0KK3dlYmtp
dF9vcHRpb25fbWVudV9pdGVtX2NvcHkKK3dlYmtpdF9vcHRpb25fbWVudV9pdGVtX2ZyZWUKK3dl
YmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF9sYWJlbAord2Via2l0X29wdGlvbl9tZW51X2l0ZW1f
Z2V0X3Rvb2x0aXAKK3dlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2xhYmVsCit3ZWJr
aXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9jaGlsZAord2Via2l0X29wdGlvbl9tZW51X2l0
ZW1faXNfZW5hYmxlZAord2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfc2VsZWN0ZWQKKworPFNV
QlNFQ1RJT04gU3RhbmRhcmQ+CitXRUJLSVRfVFlQRV9PUFRJT05fTUVOVV9JVEVNCisKKzxTVUJT
RUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfdHlwZQorPC9TRUNU
SU9OPgorCiA8U0VDVElPTj4KIDxGSUxFPldlYktpdEZvcm1TdWJtaXNzaW9uUmVxdWVzdDwvRklM
RT4KIFdlYktpdEZvcm1TdWJtaXNzaW9uUmVxdWVzdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL3dwZS93ZWJraXQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS93cGUvd2Via2l0LmgKaW5kZXggMTVhNGMxZmYxYzRhZWVlN2Q4MDc4NTZkYjBiM2E3NDAwMmU0
MjFkZC4uMDJlMjU4MjUzZTQ3ZmJmNjU5NGMyMGY3NDNkMGZhZWFjOGE0ZWVmZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS93ZWJraXQuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL3dlYmtpdC5oCkBAIC01OSw2ICs1OSw4IEBACiAjaW5j
bHVkZSA8d3BlL1dlYktpdE5ldHdvcmtQcm94eVNldHRpbmdzLmg+CiAjaW5jbHVkZSA8d3BlL1dl
YktpdE5vdGlmaWNhdGlvbi5oPgogI2luY2x1ZGUgPHdwZS9XZWJLaXROb3RpZmljYXRpb25QZXJt
aXNzaW9uUmVxdWVzdC5oPgorI2luY2x1ZGUgPHdwZS9XZWJLaXRPcHRpb25NZW51Lmg+CisjaW5j
bHVkZSA8d3BlL1dlYktpdE9wdGlvbk1lbnVJdGVtLmg+CiAjaW5jbHVkZSA8d3BlL1dlYktpdFBl
cm1pc3Npb25SZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8d3BlL1dlYktpdFBsdWdpbi5oPgogI2luY2x1
ZGUgPHdwZS9XZWJLaXRSZXNwb25zZVBvbGljeURlY2lzaW9uLmg+CmRpZmYgLS1naXQgYS9Ub29s
cy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZGEwY2JmNjBiZmJlNmI1NjliOGYw
Y2NlZjZiMDc4OTk0YWY1MjVmYS4uMWQ5MmJjYmFlMzQ3YjljMWUzMWM2NzUyZGNjYmEwZTAzZTUw
MDFkMiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDMzIEBACisyMDIwLTAxLTE2ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdh
bGlhLmNvbT4KKworICAgICAgICBbV1BFXSBFeHBvc2UgdGhlIFdlYktpdE9wdGlvbk1lbnUgQVBJ
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2Mjg3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBU
ZXN0T3B0aW9uTWVudSB1bmRlciB0aGUgV2ViS2l0R0xpYiBkaXJlY3RvcnksIGFkZGluZyB0aGUK
KyAgICAgICAgYXBwcm9wcmlhdGUgYWRqdXN0bWVudHMgZm9yIHRoZSBXUEUgdmFyaWFudCBvZiB0
aGUgQVBJLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RP
cHRpb25NZW51LmNwcDogUmVuYW1lZCBmcm9tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0R3RrL1Rlc3RPcHRpb25NZW51LmNwcC4KKyAgICAgICAgKE9wdGlvbk1lbnVUZXN0OjpPcHRp
b25NZW51VGVzdCk6CisgICAgICAgIChPcHRpb25NZW51VGVzdDo6fk9wdGlvbk1lbnVUZXN0KToK
KyAgICAgICAgKE9wdGlvbk1lbnVUZXN0OjpkZXN0cm95TWVudSk6CisgICAgICAgIChPcHRpb25N
ZW51VGVzdDo6c2hvd09wdGlvbk1lbnVDYWxsYmFjayk6CisgICAgICAgIChPcHRpb25NZW51VGVz
dDo6bWVudUNsb3NlQ2FsbGJhY2spOgorICAgICAgICAoT3B0aW9uTWVudVRlc3Q6OnNob3dPcHRp
b25NZW51KToKKyAgICAgICAgKE9wdGlvbk1lbnVUZXN0OjpjbGlja0F0UG9zaXRpb25BbmRXYWl0
VW50aWxPcHRpb25NZW51U2hvd24pOgorICAgICAgICAoT3B0aW9uTWVudVRlc3Q6OmNsb3NlKToK
KyAgICAgICAgKE9wdGlvbk1lbnVUZXN0OjphY3RpdmF0ZUl0ZW0pOgorICAgICAgICAoT3B0aW9u
TWVudVRlc3Q6OnNlbGVjdEl0ZW0pOgorICAgICAgICAodGVzdE9wdGlvbk1lbnVTaW1wbGUpOgor
ICAgICAgICAodGVzdE9wdGlvbk1lbnVHcm91cHMpOgorICAgICAgICAodGVzdE9wdGlvbk1lbnVB
Y3RpdmF0ZSk6CisgICAgICAgICh0ZXN0T3B0aW9uTWVudVNlbGVjdCk6CisgICAgICAgIChiZWZv
cmVBbGwpOgorICAgICAgICAoYWZ0ZXJBbGwpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvZ2xp
Yi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2dsaWIvUGxhdGZvcm1H
VEsuY21ha2U6CisKIDIwMjAtMDEtMTYgIENhdGhpZSBDaGVuICA8Y2F0aGllY2hlbkBpZ2FsaWEu
Y29tPgogCiAgICAgICAgIE1hcHBpbmcgSFRNTCBhdHRyaWJ1dGVzIHdpZHRoL2hlaWdodCB0byB0
aGUgZGVmYXVsdCBhc3BlY3QgcmF0aW8gb2YgPGltZz4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0T3B0aW9uTWVudS5jcHAgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdE9wdGlvbk1lbnUuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjRhYTllNDRjZGVlOGJjMTdhNjlkN2NiOTU2YzhiYjIzZmRkMDNhYWQKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdE9wdGlvbk1lbnUu
Y3BwCkBAIC0wLDAgKzEsMzMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBT
LkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKKworI2lu
Y2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisKK2NsYXNzIE9wdGlvbk1lbnVUZXN0IDogcHVibGljIFdl
YlZpZXdUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKE9wdGlvbk1l
bnVUZXN0KTsKKworICAgIE9wdGlvbk1lbnVUZXN0KCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFs
X2Nvbm5lY3QobV93ZWJWaWV3LCAic2hvdy1vcHRpb24tbWVudSIsIEdfQ0FMTEJBQ0soc2hvd09w
dGlvbk1lbnVDYWxsYmFjayksIHRoaXMpOworICAgIH0KKworICAgIH5PcHRpb25NZW51VGVzdCgp
CisgICAgeworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV93
ZWJWaWV3LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKKyAgICAgICAg
aWYgKG1fbWVudSkKKyAgICAgICAgICAgIGNsb3NlKCk7CisgICAgfQorCisgICAgdm9pZCBkZXN0
cm95TWVudSgpCisgICAgeworICAgICAgICBpZiAoIW1fbWVudSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9tZW51
LmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKKyAgICAgICAg
bV9tZW51ID0gbnVsbHB0cjsKKyAgICB9CisKKyNpZiBQTEFURk9STShHVEspCisgICAgc3RhdGlj
IGdib29sZWFuIHNob3dPcHRpb25NZW51Q2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywg
V2ViS2l0T3B0aW9uTWVudSogbWVudSwgR2RrRXZlbnQqIGV2ZW50LCBHZGtSZWN0YW5nbGUqIHJl
Y3QsIE9wdGlvbk1lbnVUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZSh0
ZXN0LT5tX3dlYlZpZXcgPT0gd2ViVmlldyk7CisgICAgICAgIGdfYXNzZXJ0X25vbm51bGwocmVj
dCk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoV0VCS0lUX0lTX09QVElPTl9NRU5VKG1lbnUpKTsK
KyAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09C
SkVDVChtZW51KSk7CisgICAgICAgIHRlc3QtPnNob3dPcHRpb25NZW51KG1lbnUsIHJlY3QpOwor
ICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdQRSkK
KyAgICBzdGF0aWMgZ2Jvb2xlYW4gc2hvd09wdGlvbk1lbnVDYWxsYmFjayhXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3LCBXZWJLaXRPcHRpb25NZW51KiBtZW51LCBPcHRpb25NZW51VGVzdCogdGVzdCkK
KyAgICB7CisgICAgICAgIGdfYXNzZXJ0X3RydWUodGVzdC0+bV93ZWJWaWV3ID09IHdlYlZpZXcp
OworICAgICAgICBnX2Fzc2VydF90cnVlKFdFQktJVF9JU19PUFRJT05fTUVOVShtZW51KSk7Cisg
ICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpF
Q1QobWVudSkpOworICAgICAgICB0ZXN0LT5zaG93T3B0aW9uTWVudShtZW51KTsKKyAgICAgICAg
cmV0dXJuIFRSVUU7CisgICAgfQorI2VuZGlmCisKKyAgICBzdGF0aWMgdm9pZCBtZW51Q2xvc2VD
YWxsYmFjayhXZWJLaXRPcHRpb25NZW51KiBtZW51LCBPcHRpb25NZW51VGVzdCogdGVzdCkKKyAg
ICB7CisgICAgICAgIGdfYXNzZXJ0X3RydWUodGVzdC0+bV9tZW51LmdldCgpID09IG1lbnUpOwor
ICAgICAgICB0ZXN0LT5kZXN0cm95TWVudSgpOworICAgIH0KKworI2lmIFBMQVRGT1JNKEdUSykK
KyAgICB2b2lkIHNob3dPcHRpb25NZW51KFdlYktpdE9wdGlvbk1lbnUqIG1lbnUsIEdka1JlY3Rh
bmdsZSogcmVjdCkKKyAgICB7CisgICAgICAgIG1fcmVjdGFuZ2xlID0gKnJlY3Q7CisgICAgICAg
IG1fbWVudSA9IG1lbnU7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9tZW51LmdldCgpLCAi
Y2xvc2UiLCBHX0NBTExCQUNLKG1lbnVDbG9zZUNhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdf
bWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7CisgICAgfQorI2VuZGlmCisKKyNpZiBQTEFURk9S
TShXUEUpCisgICAgdm9pZCBzaG93T3B0aW9uTWVudShXZWJLaXRPcHRpb25NZW51KiBtZW51KQor
ICAgIHsKKyAgICAgICAgbV9tZW51ID0gbWVudTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdCht
X21lbnUuZ2V0KCksICJjbG9zZSIsIEdfQ0FMTEJBQ0sobWVudUNsb3NlQ2FsbGJhY2spLCB0aGlz
KTsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsKKyAgICB9CisjZW5kaWYK
KworICAgIHZvaWQgY2xpY2tBdFBvc2l0aW9uQW5kV2FpdFVudGlsT3B0aW9uTWVudVNob3duKGlu
dCB4LCBpbnQgeSkKKyAgICB7CisgICAgICAgIG1fbWVudSA9IG51bGxwdHI7CisgICAgICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgeCwgeV0geyBjbGlja01vdXNlQnV0dG9uKHgs
IHkpOyB9KTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKwor
ICAgIHZvaWQgY2xvc2UoKQorICAgIHsKKyAgICAgICAgZ19hc3NlcnRfbm9ubnVsbChtX21lbnUu
Z2V0KCkpOworICAgICAgICB3ZWJraXRfb3B0aW9uX21lbnVfY2xvc2UobV9tZW51LmdldCgpKTsK
KyAgICAgICAgZ19hc3NlcnRfbnVsbChtX21lbnUuZ2V0KCkpOworICAgIH0KKworICAgIHZvaWQg
YWN0aXZhdGVJdGVtKHVuc2lnbmVkIGl0ZW0pCisgICAgeworICAgICAgICBnX2Fzc2VydF9ub25u
dWxsKG1fbWVudS5nZXQoKSk7CisgICAgICAgIHdlYmtpdF9vcHRpb25fbWVudV9hY3RpdmF0ZV9p
dGVtKG1fbWVudS5nZXQoKSwgaXRlbSk7CisgICAgICAgIGdfYXNzZXJ0X25vbm51bGwobV9tZW51
LmdldCgpKTsKKyAgICB9CisKKyAgICB2b2lkIHNlbGVjdEl0ZW0odW5zaWduZWQgaXRlbSkKKyAg
ICB7CisgICAgICAgIGdfYXNzZXJ0X25vbm51bGwobV9tZW51LmdldCgpKTsKKyAgICAgICAgd2Vi
a2l0X29wdGlvbl9tZW51X3NlbGVjdF9pdGVtKG1fbWVudS5nZXQoKSwgaXRlbSk7CisgICAgICAg
IGdfYXNzZXJ0X25vbm51bGwobV9tZW51LmdldCgpKTsKKyAgICB9CisKKyAgICBHUmVmUHRyPFdl
YktpdE9wdGlvbk1lbnU+IG1fbWVudTsKKyNpZiBQTEFURk9STShHVEspCisgICAgR2RrUmVjdGFu
Z2xlIG1fcmVjdGFuZ2xlOworI2VuZGlmCit9OworCitzdGF0aWMgdm9pZCB0ZXN0T3B0aW9uTWVu
dVNpbXBsZShPcHRpb25NZW51VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBzdGF0
aWMgY29uc3QgY2hhciBodG1sW10gPQorICAgICAgICAiPGh0bWw+PGJvZHk+IgorICAgICAgICAi
ICA8c2VsZWN0IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MTAnPiIKKyAg
ICAgICAgIiAgICA8b3B0aW9uIHRpdGxlPSdUaGUgRm9vIE9wdGlvbic+Rm9vPC9vcHRpb24+Igor
ICAgICAgICAiICAgIDxvcHRpb24gc2VsZWN0ZWQ+QmFyPC9vcHRpb24+IgorICAgICAgICAiICAg
IDxvcHRpb24gZGlzYWJsZWQ+QmF6PC9vcHRpb24+IgorICAgICAgICAiICA8L3NlbGVjdD48L2Jv
ZHk+PC9odG1sPiI7CisgICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7
CisgICAgdGVzdC0+bG9hZEh0bWwoaHRtbCwgbnVsbHB0cik7CisgICAgdGVzdC0+d2FpdFVudGls
TG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5jbGlja0F0UG9zaXRpb25BbmRXYWl0VW50aWxP
cHRpb25NZW51U2hvd24oNSwgMTUpOworICAgIGdfYXNzZXJ0X3RydWUoV0VCS0lUX0lTX09QVElP
Tl9NRU5VKHRlc3QtPm1fbWVudS5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRf
b3B0aW9uX21lbnVfZ2V0X25faXRlbXModGVzdC0+bV9tZW51LmdldCgpKSwgPT0sIDMpOworICAg
IGF1dG8qIGl0ZW0gPSB3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X2l0ZW0odGVzdC0+bV9tZW51Lmdl
dCgpLCAwKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0
X2xhYmVsKGl0ZW0pLCA9PSwgIkZvbyIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfb3B0
aW9uX21lbnVfaXRlbV9nZXRfdG9vbHRpcChpdGVtKSwgPT0sICJUaGUgRm9vIE9wdGlvbiIpOwor
ICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2xhYmVs
KGl0ZW0pKTsKKyAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19n
cm91cF9jaGlsZChpdGVtKSk7CisgICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfb3B0aW9uX21lbnVf
aXRlbV9pc19lbmFibGVkKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9u
X21lbnVfaXRlbV9pc19zZWxlY3RlZChpdGVtKSk7CisgICAgaXRlbSA9IHdlYmtpdF9vcHRpb25f
bWVudV9nZXRfaXRlbSh0ZXN0LT5tX21lbnUuZ2V0KCksIDEpOworICAgIGdfYXNzZXJ0X2NtcHN0
cih3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfbGFiZWwoaXRlbSksID09LCAiQmFyIik7Cisg
ICAgZ19hc3NlcnRfbnVsbCh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfdG9vbHRpcChpdGVt
KSk7CisgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBf
bGFiZWwoaXRlbSkpOworICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVt
X2lzX2dyb3VwX2NoaWxkKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF9vcHRpb25f
bWVudV9pdGVtX2lzX2VuYWJsZWQoaXRlbSkpOworICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X29w
dGlvbl9tZW51X2l0ZW1faXNfc2VsZWN0ZWQoaXRlbSkpOworICAgIGl0ZW0gPSB3ZWJraXRfb3B0
aW9uX21lbnVfZ2V0X2l0ZW0odGVzdC0+bV9tZW51LmdldCgpLCAyKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X2xhYmVsKGl0ZW0pLCA9PSwgIkJheiIp
OworICAgIGdfYXNzZXJ0X251bGwod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X3Rvb2x0aXAo
aXRlbSkpOworICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dy
b3VwX2xhYmVsKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVf
aXRlbV9pc19ncm91cF9jaGlsZChpdGVtKSk7CisgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29w
dGlvbl9tZW51X2l0ZW1faXNfZW5hYmxlZChpdGVtKSk7CisgICAgZ19hc3NlcnRfZmFsc2Uod2Vi
a2l0X29wdGlvbl9tZW51X2l0ZW1faXNfc2VsZWN0ZWQoaXRlbSkpOworCisgICAgdGVzdC0+Y2xv
c2UoKTsKKyAgICBnX2Fzc2VydF9udWxsKHRlc3QtPm1fbWVudS5nZXQoKSk7Cit9CisKK3N0YXRp
YyB2b2lkIHRlc3RPcHRpb25NZW51R3JvdXBzKE9wdGlvbk1lbnVUZXN0KiB0ZXN0LCBnY29uc3Rw
b2ludGVyKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyIGh0bWxbXSA9CisgICAgICAgICI8aHRt
bD48Ym9keT4iCisgICAgICAgICIgIDxzZWxlY3Qgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBs
ZWZ0OjE7IHRvcDoxMCc+IgorICAgICAgICAiICAgIDxvcHRpb24+Um9vdDwvb3B0aW9uPiIKKyAg
ICAgICAgIiAgICA8b3B0Z3JvdXAgbGFiZWw9J0dyb3VwIDEnPiIKKyAgICAgICAgIiAgICAgIDxv
cHRpb24+Q2hpbGQgMS0xPC9vcHRpb24+IgorICAgICAgICAiICAgICAgPG9wdGlvbiBkaXNhYmxl
ZD5DaGlsZCAxLTI8L29wdGlvbj4iCisgICAgICAgICIgICAgPC9vcHRncm91cD4iCisgICAgICAg
ICIgICAgPG9wdGdyb3VwIGxhYmVsPSdHcm91cCAyJz4iCisgICAgICAgICIgICAgICA8b3B0aW9u
IHNlbGVjdGVkPkNoaWxkIDItMTwvb3B0aW9uPiIKKyAgICAgICAgIiAgICAgIDxvcHRpb24+Q2hp
bGQgMi0yPC9vcHRpb24+IgorICAgICAgICAiICAgIDwvb3B0Z3JvdXA+IgorICAgICAgICAiICAg
IDxvcHRpb24+VGFpbDwvb3B0aW9uPiIKKyAgICAgICAgIiAgPC9zZWxlY3Q+PC9ib2R5PjwvaHRt
bD4iOworICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOworICAgIHRl
c3QtPmxvYWRIdG1sKGh0bWwsIG51bGxwdHIpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5p
c2hlZCgpOworCisgICAgdGVzdC0+Y2xpY2tBdFBvc2l0aW9uQW5kV2FpdFVudGlsT3B0aW9uTWVu
dVNob3duKDUsIDE1KTsKKyAgICBnX2Fzc2VydF90cnVlKFdFQktJVF9JU19PUFRJT05fTUVOVSh0
ZXN0LT5tX21lbnUuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X29wdGlvbl9t
ZW51X2dldF9uX2l0ZW1zKHRlc3QtPm1fbWVudS5nZXQoKSksID09LCA4KTsKKyAgICBhdXRvKiBp
dGVtID0gd2Via2l0X29wdGlvbl9tZW51X2dldF9pdGVtKHRlc3QtPm1fbWVudS5nZXQoKSwgMCk7
CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF9sYWJlbChp
dGVtKSwgPT0sICJSb290Iik7CisgICAgZ19hc3NlcnRfbnVsbCh3ZWJraXRfb3B0aW9uX21lbnVf
aXRlbV9nZXRfdG9vbHRpcChpdGVtKSk7CisgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlv
bl9tZW51X2l0ZW1faXNfZ3JvdXBfbGFiZWwoaXRlbSkpOworICAgIGdfYXNzZXJ0X2ZhbHNlKHdl
YmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2NoaWxkKGl0ZW0pKTsKKyAgICBnX2Fzc2Vy
dF90cnVlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2VuYWJsZWQoaXRlbSkpOworICAgIGdf
YXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX3NlbGVjdGVkKGl0ZW0pKTsK
KyAgICBpdGVtID0gd2Via2l0X29wdGlvbl9tZW51X2dldF9pdGVtKHRlc3QtPm1fbWVudS5nZXQo
KSwgMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF9s
YWJlbChpdGVtKSwgPT0sICJHcm91cCAxIik7CisgICAgZ19hc3NlcnRfbnVsbCh3ZWJraXRfb3B0
aW9uX21lbnVfaXRlbV9nZXRfdG9vbHRpcChpdGVtKSk7CisgICAgZ19hc3NlcnRfdHJ1ZSh3ZWJr
aXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9sYWJlbChpdGVtKSk7CisgICAgZ19hc3NlcnRf
ZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfY2hpbGQoaXRlbSkpOworICAg
IGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2VuYWJsZWQoaXRlbSkp
OworICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX3NlbGVjdGVk
KGl0ZW0pKTsKKyAgICBpdGVtID0gd2Via2l0X29wdGlvbl9tZW51X2dldF9pdGVtKHRlc3QtPm1f
bWVudS5nZXQoKSwgMik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9vcHRpb25fbWVudV9p
dGVtX2dldF9sYWJlbChpdGVtKSwgPT0sICJDaGlsZCAxLTEiKTsKKyAgICBnX2Fzc2VydF9udWxs
KHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF90b29sdGlwKGl0ZW0pKTsKKyAgICBnX2Fzc2Vy
dF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9sYWJlbChpdGVtKSk7Cisg
ICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9jaGlsZChp
dGVtKSk7CisgICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19lbmFi
bGVkKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9p
c19zZWxlY3RlZChpdGVtKSk7CisgICAgaXRlbSA9IHdlYmtpdF9vcHRpb25fbWVudV9nZXRfaXRl
bSh0ZXN0LT5tX21lbnUuZ2V0KCksIDMpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfb3B0
aW9uX21lbnVfaXRlbV9nZXRfbGFiZWwoaXRlbSksID09LCAiQ2hpbGQgMS0yIik7CisgICAgZ19h
c3NlcnRfbnVsbCh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfdG9vbHRpcChpdGVtKSk7Cisg
ICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfbGFiZWwo
aXRlbSkpOworICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3Jv
dXBfY2hpbGQoaXRlbSkpOworICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9p
dGVtX2lzX2VuYWJsZWQoaXRlbSkpOworICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25f
bWVudV9pdGVtX2lzX3NlbGVjdGVkKGl0ZW0pKTsKKyAgICBpdGVtID0gd2Via2l0X29wdGlvbl9t
ZW51X2dldF9pdGVtKHRlc3QtPm1fbWVudS5nZXQoKSwgNCk7CisgICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF9sYWJlbChpdGVtKSwgPT0sICJHcm91cCAyIik7
CisgICAgZ19hc3NlcnRfbnVsbCh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfdG9vbHRpcChp
dGVtKSk7CisgICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91
cF9sYWJlbChpdGVtKSk7CisgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0
ZW1faXNfZ3JvdXBfY2hpbGQoaXRlbSkpOworICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRp
b25fbWVudV9pdGVtX2lzX2VuYWJsZWQoaXRlbSkpOworICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtp
dF9vcHRpb25fbWVudV9pdGVtX2lzX3NlbGVjdGVkKGl0ZW0pKTsKKyAgICBpdGVtID0gd2Via2l0
X29wdGlvbl9tZW51X2dldF9pdGVtKHRlc3QtPm1fbWVudS5nZXQoKSwgNSk7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF9sYWJlbChpdGVtKSwgPT0sICJD
aGlsZCAyLTEiKTsKKyAgICBnX2Fzc2VydF9udWxsKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dl
dF90b29sdGlwKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVf
aXRlbV9pc19ncm91cF9sYWJlbChpdGVtKSk7CisgICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfb3B0
aW9uX21lbnVfaXRlbV9pc19ncm91cF9jaGlsZChpdGVtKSk7CisgICAgZ19hc3NlcnRfdHJ1ZSh3
ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19lbmFibGVkKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF90
cnVlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX3NlbGVjdGVkKGl0ZW0pKTsKKyAgICBpdGVt
ID0gd2Via2l0X29wdGlvbl9tZW51X2dldF9pdGVtKHRlc3QtPm1fbWVudS5nZXQoKSwgNik7Cisg
ICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF9sYWJlbChpdGVt
KSwgPT0sICJDaGlsZCAyLTIiKTsKKyAgICBnX2Fzc2VydF9udWxsKHdlYmtpdF9vcHRpb25fbWVu
dV9pdGVtX2dldF90b29sdGlwKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0
aW9uX21lbnVfaXRlbV9pc19ncm91cF9sYWJlbChpdGVtKSk7CisgICAgZ19hc3NlcnRfdHJ1ZSh3
ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9jaGlsZChpdGVtKSk7CisgICAgZ19hc3Nl
cnRfdHJ1ZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19lbmFibGVkKGl0ZW0pKTsKKyAgICBn
X2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19zZWxlY3RlZChpdGVtKSk7
CisgICAgaXRlbSA9IHdlYmtpdF9vcHRpb25fbWVudV9nZXRfaXRlbSh0ZXN0LT5tX21lbnUuZ2V0
KCksIDcpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRf
bGFiZWwoaXRlbSksID09LCAiVGFpbCIpOworICAgIGdfYXNzZXJ0X251bGwod2Via2l0X29wdGlv
bl9tZW51X2l0ZW1fZ2V0X3Rvb2x0aXAoaXRlbSkpOworICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtp
dF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2xhYmVsKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF9m
YWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9jaGlsZChpdGVtKSk7CisgICAg
Z19hc3NlcnRfdHJ1ZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19lbmFibGVkKGl0ZW0pKTsK
KyAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19zZWxlY3RlZChp
dGVtKSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RPcHRpb25NZW51QWN0aXZhdGUoT3B0aW9uTWVu
dVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgaHRt
bFtdID0KKyAgICAgICAgIjxodG1sPjxib2R5PiIKKyAgICAgICAgIiAgPHNlbGVjdCBpZD0nY29t
Ym8nIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MTAnPiIKKyAgICAgICAg
IiAgICA8b3B0aW9uPkZvbzwvb3B0aW9uPiIKKyAgICAgICAgIiAgICA8b3B0aW9uPkJhcjwvb3B0
aW9uPiIKKyAgICAgICAgIiAgICA8b3B0aW9uPkJhejwvb3B0aW9uPiIKKyAgICAgICAgIiAgPC9z
ZWxlY3Q+PC9ib2R5PjwvaHRtbD4iOworICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRp
bE1hcHBlZCgpOworICAgIHRlc3QtPmxvYWRIdG1sKGh0bWwsIG51bGxwdHIpOworICAgIHRlc3Qt
PndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+Y2xpY2tBdFBvc2l0aW9uQW5k
V2FpdFVudGlsT3B0aW9uTWVudVNob3duKDUsIDE1KTsKKyAgICBnX2Fzc2VydF90cnVlKFdFQktJ
VF9JU19PUFRJT05fTUVOVSh0ZXN0LT5tX21lbnUuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQod2Via2l0X29wdGlvbl9tZW51X2dldF9uX2l0ZW1zKHRlc3QtPm1fbWVudS5nZXQoKSksID09
LCAzKTsKKyAgICB0ZXN0LT5hY3RpdmF0ZUl0ZW0oMSk7CisgICAgYXV0byogcmVzdWx0ID0gdGVz
dC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnY29tYm8nKS5zZWxlY3RlZEluZGV4IiwgbnVsbHB0cik7CisgICAgZ19hc3NlcnRfbm9u
bnVsbChyZXN1bHQpOworICAgIGdfYXNzZXJ0X2NtcGZsb2F0KFdlYlZpZXdUZXN0OjpqYXZhc2Ny
aXB0UmVzdWx0VG9OdW1iZXIocmVzdWx0KSwgPT0sIDEpOworCisgICAgLy8gV2Ugc2hvdWxkIGNs
b3NlIHRoZSBtZW51IGFmdGVyIGFjdGl2YXRlLCBmdXJ0aGVyIGFjdGl2YXRlcyB3aWxsIGJlIGln
bm9yZWQuCisgICAgdGVzdC0+YWN0aXZhdGVJdGVtKDIpOworICAgIHJlc3VsdCA9IHRlc3QtPnJ1
bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J2NvbWJvJykuc2VsZWN0ZWRJbmRleCIsIG51bGxwdHIpOworICAgIGdfYXNzZXJ0X25vbm51bGwo
cmVzdWx0KTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJl
c3VsdFRvTnVtYmVyKHJlc3VsdCksID09LCAxKTsKKworICAgIHRlc3QtPmNsb3NlKCk7Cit9CisK
K3N0YXRpYyB2b2lkIHRlc3RPcHRpb25NZW51U2VsZWN0KE9wdGlvbk1lbnVUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyIGh0bWxbXSA9CisgICAgICAg
ICI8aHRtbD48Ym9keT4iCisgICAgICAgICIgIDxzZWxlY3QgaWQ9J2NvbWJvJyBzdHlsZT0ncG9z
aXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjEwJz4iCisgICAgICAgICIgICAgPG9wdGlvbj5G
b288L29wdGlvbj4iCisgICAgICAgICIgICAgPG9wdGlvbj5CYXI8L29wdGlvbj4iCisgICAgICAg
ICIgICAgPG9wdGlvbj5CYXo8L29wdGlvbj4iCisgICAgICAgICIgIDwvc2VsZWN0PjwvYm9keT48
L2h0bWw+IjsKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKKyAg
ICB0ZXN0LT5sb2FkSHRtbChodG1sLCBudWxscHRyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2Fk
RmluaXNoZWQoKTsKKworICAgIHRlc3QtPmNsaWNrQXRQb3NpdGlvbkFuZFdhaXRVbnRpbE9wdGlv
bk1lbnVTaG93big1LCAxNSk7CisgICAgZ19hc3NlcnRfdHJ1ZShXRUJLSVRfSVNfT1BUSU9OX01F
TlUodGVzdC0+bV9tZW51LmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9vcHRp
b25fbWVudV9nZXRfbl9pdGVtcyh0ZXN0LT5tX21lbnUuZ2V0KCkpLCA9PSwgMyk7CisKKyAgICAv
LyBTZWxlY3QgaXRlbSBjaGFuZ2VzIHRoZSBjb21ibyB0ZXh0LCBidXQgbm90IHRoZSBjdXJyZW50
bHkgc2VsZWN0ZWQgaXRlbS4KKyAgICB0ZXN0LT5zZWxlY3RJdGVtKDIpOworICAgIGF1dG8qIHJl
c3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2NvbWJvJykuc2VsZWN0ZWRJbmRleCIsIG51bGxwdHIpOworICAgIGdf
YXNzZXJ0X25vbm51bGwocmVzdWx0KTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdChXZWJWaWV3VGVz
dDo6amF2YXNjcmlwdFJlc3VsdFRvTnVtYmVyKHJlc3VsdCksID09LCAwKTsKKworICAgIC8vIEl0
IGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuCisgICAgdGVzdC0+c2VsZWN0SXRlbSgxKTsK
KyAgICByZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb21ibycpLnNlbGVjdGVkSW5kZXgiLCBudWxscHRyKTsK
KyAgICBnX2Fzc2VydF9ub25udWxsKHJlc3VsdCk7CisgICAgZ19hc3NlcnRfY21wZmxvYXQoV2Vi
Vmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb051bWJlcihyZXN1bHQpLCA9PSwgMCk7CisKKyAg
ICAvLyBBbmQgY2xvc2luZyB0aGUgbWVudSBhY3RpdmF0ZXMgdGhlIGN1cnJlbnRseSBzZWxlY3Rl
ZCBpdGVtLgorICAgIHRlc3QtPmNsb3NlKCk7CisgICAgcmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNj
cmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29tYm8n
KS5zZWxlY3RlZEluZGV4IiwgbnVsbHB0cik7CisgICAgZ19hc3NlcnRfbm9ubnVsbChyZXN1bHQp
OworICAgIGdfYXNzZXJ0X2NtcGZsb2F0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9O
dW1iZXIocmVzdWx0KSwgPT0sIDEpOworfQorCit2b2lkIGJlZm9yZUFsbCgpCit7CisgICAgT3B0
aW9uTWVudVRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJvcHRpb24tbWVudS1zaW1wbGUiLCB0
ZXN0T3B0aW9uTWVudVNpbXBsZSk7CisgICAgT3B0aW9uTWVudVRlc3Q6OmFkZCgiV2ViS2l0V2Vi
VmlldyIsICJvcHRpb24tbWVudS1ncm91cHMiLCB0ZXN0T3B0aW9uTWVudUdyb3Vwcyk7CisgICAg
T3B0aW9uTWVudVRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJvcHRpb24tbWVudS1hY3RpdmF0
ZSIsIHRlc3RPcHRpb25NZW51QWN0aXZhdGUpOworICAgIE9wdGlvbk1lbnVUZXN0OjphZGQoIldl
YktpdFdlYlZpZXciLCAib3B0aW9uLW1lbnUtc2VsZWN0IiwgdGVzdE9wdGlvbk1lbnVTZWxlY3Qp
OworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0R3RrL1Rlc3RPcHRpb25NZW51LmNwcCBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0R3RrL1Rlc3RPcHRpb25NZW51LmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNTdjMWM5ZDMyNzkzODE3ZWIzNDY0ZWFiMjk3YzJlNDU4OTNjOGVmMS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0T3B0aW9uTWVudS5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwzMDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5M
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCi0KLSNpbmNs
dWRlIDx3dGYvUnVuTG9vcC5oPgotCi1jbGFzcyBPcHRpb25NZW51VGVzdCA6IHB1YmxpYyBXZWJW
aWV3VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShPcHRpb25NZW51
VGVzdCk7Ci0KLSAgICBPcHRpb25NZW51VGVzdCgpCi0gICAgewotICAgICAgICBnX3NpZ25hbF9j
b25uZWN0KG1fd2ViVmlldywgInNob3ctb3B0aW9uLW1lbnUiLCBHX0NBTExCQUNLKHNob3dPcHRp
b25NZW51Q2FsbGJhY2spLCB0aGlzKTsKLSAgICB9Ci0KLSAgICB+T3B0aW9uTWVudVRlc3QoKQot
ICAgIHsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fd2Vi
VmlldywgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7Ci0gICAgICAgIGlm
IChtX21lbnUpCi0gICAgICAgICAgICBjbG9zZSgpOwotICAgIH0KLQotICAgIHZvaWQgZGVzdHJv
eU1lbnUoKQotICAgIHsKLSAgICAgICAgaWYgKCFtX21lbnUpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fbWVudS5n
ZXQoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7Ci0gICAgICAgIG1f
bWVudSA9IG51bGxwdHI7Ci0gICAgfQotCi0gICAgc3RhdGljIGdib29sZWFuIHNob3dPcHRpb25N
ZW51Q2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0T3B0aW9uTWVudSogbWVu
dSwgR2RrRXZlbnQqIGV2ZW50LCBHZGtSZWN0YW5nbGUqIHJlY3QsIE9wdGlvbk1lbnVUZXN0KiB0
ZXN0KQotICAgIHsKLSAgICAgICAgZ19hc3NlcnRfdHJ1ZSh0ZXN0LT5tX3dlYlZpZXcgPT0gd2Vi
Vmlldyk7Ci0gICAgICAgIGdfYXNzZXJ0X25vbm51bGwocmVjdCk7Ci0gICAgICAgIGdfYXNzZXJ0
X3RydWUoV0VCS0lUX0lTX09QVElPTl9NRU5VKG1lbnUpKTsKLSAgICAgICAgdGVzdC0+YXNzZXJ0
T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChtZW51KSk7Ci0gICAgICAg
IHRlc3QtPnNob3dPcHRpb25NZW51KG1lbnUsIHJlY3QpOwotICAgICAgICByZXR1cm4gVFJVRTsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBtZW51Q2xvc2VDYWxsYmFjayhXZWJLaXRPcHRpb25N
ZW51KiBtZW51LCBPcHRpb25NZW51VGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0
X3RydWUodGVzdC0+bV9tZW51LmdldCgpID09IG1lbnUpOwotICAgICAgICB0ZXN0LT5kZXN0cm95
TWVudSgpOwotICAgIH0KLQotICAgIHZvaWQgc2hvd09wdGlvbk1lbnUoV2ViS2l0T3B0aW9uTWVu
dSogbWVudSwgR2RrUmVjdGFuZ2xlKiByZWN0KQotICAgIHsKLSAgICAgICAgbV9yZWN0YW5nbGUg
PSAqcmVjdDsKLSAgICAgICAgbV9tZW51ID0gbWVudTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVj
dChtX21lbnUuZ2V0KCksICJjbG9zZSIsIEdfQ0FMTEJBQ0sobWVudUNsb3NlQ2FsbGJhY2spLCB0
aGlzKTsKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsKLSAgICB9Ci0KLSAg
ICB2b2lkIGNsaWNrQXRQb3NpdGlvbkFuZFdhaXRVbnRpbE9wdGlvbk1lbnVTaG93bihpbnQgeCwg
aW50IHkpCi0gICAgewotICAgICAgICBtX21lbnUgPSBudWxscHRyOwotICAgICAgICBSdW5Mb29w
OjptYWluKCkuZGlzcGF0Y2goW3RoaXMsIHgsIHldIHsgY2xpY2tNb3VzZUJ1dHRvbih4LCB5KTsg
fSk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICB2
b2lkIGNsb3NlKCkKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0X25vbm51bGwobV9tZW51LmdldCgp
KTsKLSAgICAgICAgd2Via2l0X29wdGlvbl9tZW51X2Nsb3NlKG1fbWVudS5nZXQoKSk7Ci0gICAg
ICAgIGdfYXNzZXJ0X251bGwobV9tZW51LmdldCgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGFjdGl2
YXRlSXRlbSh1bnNpZ25lZCBpdGVtKQotICAgIHsKLSAgICAgICAgZ19hc3NlcnRfbm9ubnVsbCht
X21lbnUuZ2V0KCkpOwotICAgICAgICB3ZWJraXRfb3B0aW9uX21lbnVfYWN0aXZhdGVfaXRlbSht
X21lbnUuZ2V0KCksIGl0ZW0pOwotICAgICAgICBnX2Fzc2VydF9ub25udWxsKG1fbWVudS5nZXQo
KSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZWxlY3RJdGVtKHVuc2lnbmVkIGl0ZW0pCi0gICAgewot
ICAgICAgICBnX2Fzc2VydF9ub25udWxsKG1fbWVudS5nZXQoKSk7Ci0gICAgICAgIHdlYmtpdF9v
cHRpb25fbWVudV9zZWxlY3RfaXRlbShtX21lbnUuZ2V0KCksIGl0ZW0pOwotICAgICAgICBnX2Fz
c2VydF9ub25udWxsKG1fbWVudS5nZXQoKSk7Ci0gICAgfQotCi0gICAgR1JlZlB0cjxXZWJLaXRP
cHRpb25NZW51PiBtX21lbnU7Ci0gICAgR2RrUmVjdGFuZ2xlIG1fcmVjdGFuZ2xlOwotfTsKLQot
c3RhdGljIHZvaWQgdGVzdE9wdGlvbk1lbnVTaW1wbGUoT3B0aW9uTWVudVRlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCi17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIgaHRtbFtdID0KLSAgICAgICAg
IjxodG1sPjxib2R5PiIKLSAgICAgICAgIiAgPHNlbGVjdCBzdHlsZT0ncG9zaXRpb246YWJzb2x1
dGU7IGxlZnQ6MTsgdG9wOjEwJz4iCi0gICAgICAgICIgICAgPG9wdGlvbiB0aXRsZT0nVGhlIEZv
byBPcHRpb24nPkZvbzwvb3B0aW9uPiIKLSAgICAgICAgIiAgICA8b3B0aW9uIHNlbGVjdGVkPkJh
cjwvb3B0aW9uPiIKLSAgICAgICAgIiAgICA8b3B0aW9uIGRpc2FibGVkPkJhejwvb3B0aW9uPiIK
LSAgICAgICAgIiAgPC9zZWxlY3Q+PC9ib2R5PjwvaHRtbD4iOwotICAgIHRlc3QtPnNob3dJbldp
bmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOwotICAgIHRlc3QtPmxvYWRIdG1sKGh0bWwsIG51bGxw
dHIpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgdGVzdC0+Y2xp
Y2tBdFBvc2l0aW9uQW5kV2FpdFVudGlsT3B0aW9uTWVudVNob3duKDUsIDE1KTsKLSAgICBnX2Fz
c2VydF90cnVlKFdFQktJVF9JU19PUFRJT05fTUVOVSh0ZXN0LT5tX21lbnUuZ2V0KCkpKTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X29wdGlvbl9tZW51X2dldF9uX2l0ZW1zKHRlc3QtPm1f
bWVudS5nZXQoKSksID09LCAzKTsKLSAgICBhdXRvKiBpdGVtID0gd2Via2l0X29wdGlvbl9tZW51
X2dldF9pdGVtKHRlc3QtPm1fbWVudS5nZXQoKSwgMCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdl
YmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF9sYWJlbChpdGVtKSwgPT0sICJGb28iKTsKLSAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X3Rvb2x0aXAoaXRlbSks
ID09LCAiVGhlIEZvbyBPcHRpb24iKTsKLSAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9u
X21lbnVfaXRlbV9pc19ncm91cF9sYWJlbChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfZmFsc2Uod2Vi
a2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfY2hpbGQoaXRlbSkpOwotICAgIGdfYXNzZXJ0
X3RydWUod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZW5hYmxlZChpdGVtKSk7Ci0gICAgZ19h
c3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfc2VsZWN0ZWQoaXRlbSkpOwot
ICAgIGl0ZW0gPSB3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X2l0ZW0odGVzdC0+bV9tZW51LmdldCgp
LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X2xh
YmVsKGl0ZW0pLCA9PSwgIkJhciIpOwotICAgIGdfYXNzZXJ0X251bGwod2Via2l0X29wdGlvbl9t
ZW51X2l0ZW1fZ2V0X3Rvb2x0aXAoaXRlbSkpOwotICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9v
cHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2xhYmVsKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF9mYWxz
ZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9jaGlsZChpdGVtKSk7Ci0gICAgZ19h
c3NlcnRfdHJ1ZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19lbmFibGVkKGl0ZW0pKTsKLSAg
ICBnX2Fzc2VydF90cnVlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX3NlbGVjdGVkKGl0ZW0p
KTsKLSAgICBpdGVtID0gd2Via2l0X29wdGlvbl9tZW51X2dldF9pdGVtKHRlc3QtPm1fbWVudS5n
ZXQoKSwgMik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dl
dF9sYWJlbChpdGVtKSwgPT0sICJCYXoiKTsKLSAgICBnX2Fzc2VydF9udWxsKHdlYmtpdF9vcHRp
b25fbWVudV9pdGVtX2dldF90b29sdGlwKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF9mYWxzZSh3ZWJr
aXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9sYWJlbChpdGVtKSk7Ci0gICAgZ19hc3NlcnRf
ZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfY2hpbGQoaXRlbSkpOwotICAg
IGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2VuYWJsZWQoaXRlbSkp
OwotICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX3NlbGVjdGVk
KGl0ZW0pKTsKLQotICAgIHRlc3QtPmNsb3NlKCk7Ci0gICAgZ19hc3NlcnRfbnVsbCh0ZXN0LT5t
X21lbnUuZ2V0KCkpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0T3B0aW9uTWVudUdyb3VwcyhPcHRp
b25NZW51VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hh
ciBodG1sW10gPQotICAgICAgICAiPGh0bWw+PGJvZHk+IgotICAgICAgICAiICA8c2VsZWN0IHN0
eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MTAnPiIKLSAgICAgICAgIiAgICA8
b3B0aW9uPlJvb3Q8L29wdGlvbj4iCi0gICAgICAgICIgICAgPG9wdGdyb3VwIGxhYmVsPSdHcm91
cCAxJz4iCi0gICAgICAgICIgICAgICA8b3B0aW9uPkNoaWxkIDEtMTwvb3B0aW9uPiIKLSAgICAg
ICAgIiAgICAgIDxvcHRpb24gZGlzYWJsZWQ+Q2hpbGQgMS0yPC9vcHRpb24+IgotICAgICAgICAi
ICAgIDwvb3B0Z3JvdXA+IgotICAgICAgICAiICAgIDxvcHRncm91cCBsYWJlbD0nR3JvdXAgMic+
IgotICAgICAgICAiICAgICAgPG9wdGlvbiBzZWxlY3RlZD5DaGlsZCAyLTE8L29wdGlvbj4iCi0g
ICAgICAgICIgICAgICA8b3B0aW9uPkNoaWxkIDItMjwvb3B0aW9uPiIKLSAgICAgICAgIiAgICA8
L29wdGdyb3VwPiIKLSAgICAgICAgIiAgICA8b3B0aW9uPlRhaWw8L29wdGlvbj4iCi0gICAgICAg
ICIgIDwvc2VsZWN0PjwvYm9keT48L2h0bWw+IjsKLSAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRX
YWl0VW50aWxNYXBwZWQoKTsKLSAgICB0ZXN0LT5sb2FkSHRtbChodG1sLCBudWxscHRyKTsKLSAg
ICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIHRlc3QtPmNsaWNrQXRQb3Np
dGlvbkFuZFdhaXRVbnRpbE9wdGlvbk1lbnVTaG93big1LCAxNSk7Ci0gICAgZ19hc3NlcnRfdHJ1
ZShXRUJLSVRfSVNfT1BUSU9OX01FTlUodGVzdC0+bV9tZW51LmdldCgpKSk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KHdlYmtpdF9vcHRpb25fbWVudV9nZXRfbl9pdGVtcyh0ZXN0LT5tX21lbnUuZ2V0
KCkpLCA9PSwgOCk7Ci0gICAgYXV0byogaXRlbSA9IHdlYmtpdF9vcHRpb25fbWVudV9nZXRfaXRl
bSh0ZXN0LT5tX21lbnUuZ2V0KCksIDApOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfb3B0
aW9uX21lbnVfaXRlbV9nZXRfbGFiZWwoaXRlbSksID09LCAiUm9vdCIpOwotICAgIGdfYXNzZXJ0
X251bGwod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X3Rvb2x0aXAoaXRlbSkpOwotICAgIGdf
YXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2xhYmVsKGl0ZW0p
KTsKLSAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9j
aGlsZChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9p
c19lbmFibGVkKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVf
aXRlbV9pc19zZWxlY3RlZChpdGVtKSk7Ci0gICAgaXRlbSA9IHdlYmtpdF9vcHRpb25fbWVudV9n
ZXRfaXRlbSh0ZXN0LT5tX21lbnUuZ2V0KCksIDEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJr
aXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfbGFiZWwoaXRlbSksID09LCAiR3JvdXAgMSIpOwotICAg
IGdfYXNzZXJ0X251bGwod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X3Rvb2x0aXAoaXRlbSkp
OwotICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfbGFi
ZWwoaXRlbSkpOwotICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lz
X2dyb3VwX2NoaWxkKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21l
bnVfaXRlbV9pc19lbmFibGVkKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0
aW9uX21lbnVfaXRlbV9pc19zZWxlY3RlZChpdGVtKSk7Ci0gICAgaXRlbSA9IHdlYmtpdF9vcHRp
b25fbWVudV9nZXRfaXRlbSh0ZXN0LT5tX21lbnUuZ2V0KCksIDIpOwotICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfbGFiZWwoaXRlbSksID09LCAiQ2hpbGQg
MS0xIik7Ci0gICAgZ19hc3NlcnRfbnVsbCh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfdG9v
bHRpcChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1f
aXNfZ3JvdXBfbGFiZWwoaXRlbSkpOwotICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X29wdGlvbl9t
ZW51X2l0ZW1faXNfZ3JvdXBfY2hpbGQoaXRlbSkpOwotICAgIGdfYXNzZXJ0X3RydWUod2Via2l0
X29wdGlvbl9tZW51X2l0ZW1faXNfZW5hYmxlZChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfZmFsc2Uo
d2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfc2VsZWN0ZWQoaXRlbSkpOwotICAgIGl0ZW0gPSB3
ZWJraXRfb3B0aW9uX21lbnVfZ2V0X2l0ZW0odGVzdC0+bV9tZW51LmdldCgpLCAzKTsKLSAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X2xhYmVsKGl0ZW0pLCA9
PSwgIkNoaWxkIDEtMiIpOwotICAgIGdfYXNzZXJ0X251bGwod2Via2l0X29wdGlvbl9tZW51X2l0
ZW1fZ2V0X3Rvb2x0aXAoaXRlbSkpOwotICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25f
bWVudV9pdGVtX2lzX2dyb3VwX2xhYmVsKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF90cnVlKHdlYmtp
dF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2NoaWxkKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF9m
YWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19lbmFibGVkKGl0ZW0pKTsKLSAgICBnX2Fz
c2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19zZWxlY3RlZChpdGVtKSk7Ci0g
ICAgaXRlbSA9IHdlYmtpdF9vcHRpb25fbWVudV9nZXRfaXRlbSh0ZXN0LT5tX21lbnUuZ2V0KCks
IDQpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfbGFi
ZWwoaXRlbSksID09LCAiR3JvdXAgMiIpOwotICAgIGdfYXNzZXJ0X251bGwod2Via2l0X29wdGlv
bl9tZW51X2l0ZW1fZ2V0X3Rvb2x0aXAoaXRlbSkpOwotICAgIGdfYXNzZXJ0X3RydWUod2Via2l0
X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfbGFiZWwoaXRlbSkpOwotICAgIGdfYXNzZXJ0X2Zh
bHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2NoaWxkKGl0ZW0pKTsKLSAgICBn
X2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19lbmFibGVkKGl0ZW0pKTsK
LSAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19zZWxlY3RlZChp
dGVtKSk7Ci0gICAgaXRlbSA9IHdlYmtpdF9vcHRpb25fbWVudV9nZXRfaXRlbSh0ZXN0LT5tX21l
bnUuZ2V0KCksIDUpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfb3B0aW9uX21lbnVfaXRl
bV9nZXRfbGFiZWwoaXRlbSksID09LCAiQ2hpbGQgMi0xIik7Ci0gICAgZ19hc3NlcnRfbnVsbCh3
ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfdG9vbHRpcChpdGVtKSk7Ci0gICAgZ19hc3NlcnRf
ZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfbGFiZWwoaXRlbSkpOwotICAg
IGdfYXNzZXJ0X3RydWUod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfY2hpbGQoaXRl
bSkpOwotICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZW5hYmxl
ZChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19z
ZWxlY3RlZChpdGVtKSk7Ci0gICAgaXRlbSA9IHdlYmtpdF9vcHRpb25fbWVudV9nZXRfaXRlbSh0
ZXN0LT5tX21lbnUuZ2V0KCksIDYpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfb3B0aW9u
X21lbnVfaXRlbV9nZXRfbGFiZWwoaXRlbSksID09LCAiQ2hpbGQgMi0yIik7Ci0gICAgZ19hc3Nl
cnRfbnVsbCh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfdG9vbHRpcChpdGVtKSk7Ci0gICAg
Z19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfbGFiZWwoaXRl
bSkpOwotICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBf
Y2hpbGQoaXRlbSkpOwotICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X29wdGlvbl9tZW51X2l0ZW1f
aXNfZW5hYmxlZChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51
X2l0ZW1faXNfc2VsZWN0ZWQoaXRlbSkpOwotICAgIGl0ZW0gPSB3ZWJraXRfb3B0aW9uX21lbnVf
Z2V0X2l0ZW0odGVzdC0+bV9tZW51LmdldCgpLCA3KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X2xhYmVsKGl0ZW0pLCA9PSwgIlRhaWwiKTsKLSAgICBn
X2Fzc2VydF9udWxsKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF90b29sdGlwKGl0ZW0pKTsK
LSAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9sYWJl
bChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNf
Z3JvdXBfY2hpbGQoaXRlbSkpOwotICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X29wdGlvbl9tZW51
X2l0ZW1faXNfZW5hYmxlZChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlv
bl9tZW51X2l0ZW1faXNfc2VsZWN0ZWQoaXRlbSkpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0T3B0
aW9uTWVudUFjdGl2YXRlKE9wdGlvbk1lbnVUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewot
ICAgIHN0YXRpYyBjb25zdCBjaGFyIGh0bWxbXSA9Ci0gICAgICAgICI8aHRtbD48Ym9keT4iCi0g
ICAgICAgICIgIDxzZWxlY3QgaWQ9J2NvbWJvJyBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxl
ZnQ6MTsgdG9wOjEwJz4iCi0gICAgICAgICIgICAgPG9wdGlvbj5Gb288L29wdGlvbj4iCi0gICAg
ICAgICIgICAgPG9wdGlvbj5CYXI8L29wdGlvbj4iCi0gICAgICAgICIgICAgPG9wdGlvbj5CYXo8
L29wdGlvbj4iCi0gICAgICAgICIgIDwvc2VsZWN0PjwvYm9keT48L2h0bWw+IjsKLSAgICB0ZXN0
LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKLSAgICB0ZXN0LT5sb2FkSHRtbCho
dG1sLCBudWxscHRyKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAg
IHRlc3QtPmNsaWNrQXRQb3NpdGlvbkFuZFdhaXRVbnRpbE9wdGlvbk1lbnVTaG93big1LCAxNSk7
Ci0gICAgZ19hc3NlcnRfdHJ1ZShXRUJLSVRfSVNfT1BUSU9OX01FTlUodGVzdC0+bV9tZW51Lmdl
dCgpKSk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9vcHRpb25fbWVudV9nZXRfbl9pdGVt
cyh0ZXN0LT5tX21lbnUuZ2V0KCkpLCA9PSwgMyk7Ci0gICAgdGVzdC0+YWN0aXZhdGVJdGVtKDEp
OwotICAgIGF1dG8qIHJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5p
c2hlZCgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbWJvJykuc2VsZWN0ZWRJbmRleCIsIG51
bGxwdHIpOwotICAgIGdfYXNzZXJ0X25vbm51bGwocmVzdWx0KTsKLSAgICBnX2Fzc2VydF9jbXBm
bG9hdChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvTnVtYmVyKHJlc3VsdCksID09LCAx
KTsKLQotICAgIC8vIFdlIHNob3VsZCBjbG9zZSB0aGUgbWVudSBhZnRlciBhY3RpdmF0ZSwgZnVy
dGhlciBhY3RpdmF0ZXMgd2lsbCBiZSBpZ25vcmVkLgotICAgIHRlc3QtPmFjdGl2YXRlSXRlbSgy
KTsKLSAgICByZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQo
ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb21ibycpLnNlbGVjdGVkSW5kZXgiLCBudWxscHRy
KTsKLSAgICBnX2Fzc2VydF9ub25udWxsKHJlc3VsdCk7Ci0gICAgZ19hc3NlcnRfY21wZmxvYXQo
V2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb051bWJlcihyZXN1bHQpLCA9PSwgMSk7Ci0K
LSAgICB0ZXN0LT5jbG9zZSgpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0T3B0aW9uTWVudVNlbGVj
dChPcHRpb25NZW51VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBzdGF0aWMgY29u
c3QgY2hhciBodG1sW10gPQotICAgICAgICAiPGh0bWw+PGJvZHk+IgotICAgICAgICAiICA8c2Vs
ZWN0IGlkPSdjb21ibycgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDoxMCc+
IgotICAgICAgICAiICAgIDxvcHRpb24+Rm9vPC9vcHRpb24+IgotICAgICAgICAiICAgIDxvcHRp
b24+QmFyPC9vcHRpb24+IgotICAgICAgICAiICAgIDxvcHRpb24+QmF6PC9vcHRpb24+IgotICAg
ICAgICAiICA8L3NlbGVjdD48L2JvZHk+PC9odG1sPiI7Ci0gICAgdGVzdC0+c2hvd0luV2luZG93
QW5kV2FpdFVudGlsTWFwcGVkKCk7Ci0gICAgdGVzdC0+bG9hZEh0bWwoaHRtbCwgbnVsbHB0cik7
Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICB0ZXN0LT5jbGlja0F0
UG9zaXRpb25BbmRXYWl0VW50aWxPcHRpb25NZW51U2hvd24oNSwgMTUpOwotICAgIGdfYXNzZXJ0
X3RydWUoV0VCS0lUX0lTX09QVElPTl9NRU5VKHRlc3QtPm1fbWVudS5nZXQoKSkpOwotICAgIGdf
YXNzZXJ0X2NtcGludCh3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X25faXRlbXModGVzdC0+bV9tZW51
LmdldCgpKSwgPT0sIDMpOwotCi0gICAgLy8gU2VsZWN0IGl0ZW0gY2hhbmdlcyB0aGUgY29tYm8g
dGV4dCwgYnV0IG5vdCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW0uCi0gICAgdGVzdC0+c2Vs
ZWN0SXRlbSgyKTsKLSAgICBhdXRvKiByZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2Fp
dFVudGlsRmluaXNoZWQoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb21ibycpLnNlbGVjdGVk
SW5kZXgiLCBudWxscHRyKTsKLSAgICBnX2Fzc2VydF9ub25udWxsKHJlc3VsdCk7Ci0gICAgZ19h
c3NlcnRfY21wZmxvYXQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb051bWJlcihyZXN1
bHQpLCA9PSwgMCk7Ci0KLSAgICAvLyBJdCBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzLgot
ICAgIHRlc3QtPnNlbGVjdEl0ZW0oMSk7Ci0gICAgcmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlw
dEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29tYm8nKS5z
ZWxlY3RlZEluZGV4IiwgbnVsbHB0cik7Ci0gICAgZ19hc3NlcnRfbm9ubnVsbChyZXN1bHQpOwot
ICAgIGdfYXNzZXJ0X2NtcGZsb2F0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9OdW1i
ZXIocmVzdWx0KSwgPT0sIDApOwotCi0gICAgLy8gQW5kIGNsb3NpbmcgdGhlIG1lbnUgYWN0aXZh
dGVzIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgaXRlbS4KLSAgICB0ZXN0LT5jbG9zZSgpOwotICAg
IHJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbWJvJykuc2VsZWN0ZWRJbmRleCIsIG51bGxwdHIpOwotICAg
IGdfYXNzZXJ0X25vbm51bGwocmVzdWx0KTsKLSAgICBnX2Fzc2VydF9jbXBmbG9hdChXZWJWaWV3
VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvTnVtYmVyKHJlc3VsdCksID09LCAxKTsKLX0KLQotdm9p
ZCBiZWZvcmVBbGwoKQotewotICAgIE9wdGlvbk1lbnVUZXN0OjphZGQoIldlYktpdFdlYlZpZXci
LCAib3B0aW9uLW1lbnUtc2ltcGxlIiwgdGVzdE9wdGlvbk1lbnVTaW1wbGUpOwotICAgIE9wdGlv
bk1lbnVUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAib3B0aW9uLW1lbnUtZ3JvdXBzIiwgdGVz
dE9wdGlvbk1lbnVHcm91cHMpOwotICAgIE9wdGlvbk1lbnVUZXN0OjphZGQoIldlYktpdFdlYlZp
ZXciLCAib3B0aW9uLW1lbnUtYWN0aXZhdGUiLCB0ZXN0T3B0aW9uTWVudUFjdGl2YXRlKTsKLSAg
ICBPcHRpb25NZW51VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgIm9wdGlvbi1tZW51LXNlbGVj
dCIsIHRlc3RPcHRpb25NZW51U2VsZWN0KTsKLX0KLQotdm9pZCBhZnRlckFsbCgpCi17Ci19CmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2dsaWIvQ01ha2VMaXN0cy50eHQgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL2dsaWIvQ01ha2VMaXN0cy50eHQKaW5kZXggMTJhYWY1ZjEzMmM1Zjcx
ODVhNjRjODUxNTllNmZkM2IzMjY4YTI3Zi4uMzViZWJlZTYzOTdmYTRhNDBkMjAxYjMwYzk0MGJk
ZTdlMTlkZDQzZCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9nbGliL0NNYWtlTGlz
dHMudHh0CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ2xpYi9DTWFrZUxpc3RzLnR4dApAQCAt
MTI3LDYgKzEyNyw3IEBAIEFERF9XSzJfVEVTVChUZXN0RWRpdG9yICR7VE9PTFNfRElSfS9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdEVkaXRvci5jCiBBRERfV0syX1RFU1QoVGVz
dEZyYW1lICR7VE9PTFNfRElSfS9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdEZy
YW1lLmNwcCkKIEFERF9XSzJfVEVTVChUZXN0TG9hZGVyQ2xpZW50ICR7VE9PTFNfRElSfS9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdExvYWRlckNsaWVudC5jcHApCiBBRERfV0sy
X1RFU1QoVGVzdE11bHRpcHJvY2VzcyAke1RPT0xTX0RJUn0vVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRHTGliL1Rlc3RNdWx0aXByb2Nlc3MuY3BwKQorQUREX1dLMl9URVNUKFRlc3RPcHRpb25N
ZW51ICR7VE9PTFNfRElSfS9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdE9wdGlv
bk1lbnUuY3BwKQogQUREX1dLMl9URVNUKFRlc3RSZXNvdXJjZXMgJHtUT09MU19ESVJ9L1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0UmVzb3VyY2VzLmNwcCkKIEFERF9XSzJfVEVT
VChUZXN0U1NMICR7VE9PTFNfRElSfS9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVz
dFNTTC5jcHApCiBBRERfV0syX1RFU1QoVGVzdFVJQ2xpZW50ICR7VE9PTFNfRElSfS9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFVJQ2xpZW50LmNwcCkKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvZ2xpYi9QbGF0Zm9ybUdUSy5jbWFrZSBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvZ2xpYi9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCA5YjIzZTc0YWJkZTBjMWIxYjRlZTQ3
OWUxMjA5NzM3YmFmYTJmMjY3Li5hNTg2YTZhNjhhMzU1N2FmODU2M2Q3MzkzNmFmYTNmNGNiN2Nj
ODk5IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2dsaWIvUGxhdGZvcm1HVEsuY21h
a2UKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9nbGliL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC00
MSw3ICs0MSw2IEBAIEFERF9XSzJfVEVTVChUZXN0RE9NTm9kZUZpbHRlciAke1RPT0xTX0RJUn0v
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvVGVzdERPCiBBRERfV0syX1RFU1QoVGVzdERP
TVhQYXRoTlNSZXNvbHZlciAke1RPT0xTX0RJUn0vVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRH
dGsvVGVzdERPTVhQYXRoTlNSZXNvbHZlci5jcHApCiBBRERfV0syX1RFU1QoVGVzdEluc3BlY3Rv
ciAke1RPT0xTX0RJUn0vVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvVGVzdEluc3BlY3Rv
ci5jcHApCiBBRERfV0syX1RFU1QoVGVzdEluc3BlY3RvclNlcnZlciAke1RPT0xTX0RJUn0vVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvVGVzdEluc3BlY3RvclNlcnZlci5jcHApCi1BRERf
V0syX1RFU1QoVGVzdE9wdGlvbk1lbnUgJHtUT09MU19ESVJ9L1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0R3RrL1Rlc3RPcHRpb25NZW51LmNwcCkKIEFERF9XSzJfVEVTVChUZXN0UHJpbnRpbmcg
JHtUT09MU19ESVJ9L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL1Rlc3RQcmludGluZy5j
cHApCiBBRERfV0syX1RFU1QoVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZSAke1RPT0xTX0RJUn0v
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2Uu
Y3BwKQogQUREX1dLMl9URVNUKFRlc3RXZWJLaXRWZXJzaW9uICR7VE9PTFNfRElSfS9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0V2ViS2l0VmVyc2lvbi5jcHApCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388015</attachid>
            <date>2020-01-17 00:03:27 -0800</date>
            <delta_ts>2020-01-20 01:32:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206287-20200117090326.patch</filename>
            <type>text/plain</type>
            <size>59142</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0NzM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDYyYWU5ZGRkNjA1OTYwNjE5
OWRjMzQ0YTViOTJlYzQxZDljNjEzNGMuLjE0ZWEwNzA4YmNiMzBiNTVhNmJlNmYyZjA2YTgwMDUy
YjgzYzc3MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTEgQEAKKzIwMjAtMDEtMTYgIFphbiBEb2Jl
cnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtXUEVdIEV4cG9zZSB0aGUg
V2ViS2l0T3B0aW9uTWVudSBBUElzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMDYyODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBFbmFibGUgdGhlIEdMaWItYmFzZWQgQVBJIGNvdmVyaW5nIG9wdGlvbiBt
ZW51IGZ1bmN0aW9uYWxpdHkgZm9yIFdQRS4KKworICAgICAgICBNb3N0IG9mIHRoaXMgY2FuIGJl
IHNoYXJlZCB3aXRoIHRoZSBHVEsgcG9ydC4gVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyBpbgorICAg
ICAgICB0aGUgdHdvIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBlbWl0dGVkIG9uIHRoZSBXZWJLaXRX
ZWJWaWV3J3MgInNob3ctbWVudSIKKyAgICAgICAgc2lnbmFsIChHZGtFdmVudCBhbmQgR2RrUmVj
dGFuZ2xlKSB0aGF0IFdQRSBkb2Vzbid0IHN1cHBvcnQgYXQgdGhlCisgICAgICAgIG1vbWVudC4g
VGhlIHJlY3RhbmdsZSBpbmZvcm1hdGlvbiB3aWxsIGJlIHBvc3NpYmxlIHRvIGVtaXQgaW4gdGhl
IG5lYXIKKyAgICAgICAgZnV0dXJlIG9uY2UgYSB1c2FibGUgQVBJIHR5cGUgaXMgYXZhaWxhYmxl
IGZvciB0aGlzIGluZm9ybWF0aW9uLgorCisgICAgICAgIFRoZSByZWxldmFudCBBUEkgdGVzdCBp
cyBlbmFibGVkIGZvciBXUEUuCisKKyAgICAgICAgKiBQbGF0Zm9ybVdQRS5jbWFrZToKKyAgICAg
ICAgKiBTb3VyY2VzV1BFLnR4dDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Mvd3BlL1dLVmll
dy5jcHA6CisgICAgICAgIChXS1ZpZXdDcmVhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z2xpYi9XZWJLaXRXZWJWaWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19jbGFzc19p
bml0KToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdDcmVhdGVQYWdlKToKKyAgICAgICAgKHdlYmtp
dFdlYlZpZXdTaG93T3B0aW9uTWVudSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dl
YktpdFdlYlZpZXdQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvUGFnZUNs
aWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlUG9w
dXBNZW51UHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL1dQRVZpZXcuY3BwOgor
ICAgICAgICAoV0tXUEU6OlZpZXc6OlZpZXcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3Bl
L1dQRVZpZXcuaDoKKyAgICAgICAgKFdLV1BFOjpWaWV3OjpjcmVhdGUpOgorICAgICAgICAoV0tX
UEU6OlZpZXc6OndlYlZpZXcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdE9w
dGlvbk1lbnUuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0T3B0
aW9uTWVudUl0ZW0uaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0
UG9wdXBNZW51LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYktpdFBvcHVwTWVudTo6
V2ViS2l0UG9wdXBNZW51KToKKyAgICAgICAgKFdlYktpdDo6bWVudUNsb3NlQ2FsbGJhY2spOgor
ICAgICAgICAoV2ViS2l0OjpXZWJLaXRQb3B1cE1lbnU6OnNob3dQb3B1cE1lbnUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJLaXRQb3B1cE1lbnU6OmhpZGVQb3B1cE1lbnUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJLaXRQb3B1cE1lbnU6OmNhbmNlbFRyYWNraW5nKToKKyAgICAgICAgKFdlYktpdDo6
V2ViS2l0UG9wdXBNZW51OjpzZWxlY3RJdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0UG9w
dXBNZW51OjphY3RpdmF0ZUl0ZW0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktp
dFBvcHVwTWVudS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRX
ZWJWaWV3Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvZG9jcy93cGUtMS4wLXNlY3Rp
b25zLnR4dDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dwZS93ZWJraXQuaDoKKwogMjAyMC0w
MS0xNiAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdlZC4gTW92ZSB0aGUgY29tbW9uIFdlYktpdE9wdGlvbk1lbnUgR0xpYiBBUEkgaW1wbGVt
ZW50YXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XUEUuY21ha2UgYi9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtV1BFLmNtYWtlCmluZGV4IGE4YTk1ZjRiMGRiNGE1MGE4ZWY1
YjcyMDM5YzUxY2M1ODE4ZWQzMDQuLmQxNGI4NjI2MDg4OWYwZDBiNzcyMGJiZDNiMTNlY2UxYmM5
NzY4N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XUEUuY21ha2UKKysrIGIv
U291cmNlL1dlYktpdC9QbGF0Zm9ybVdQRS5jbWFrZQpAQCAtMTE5LDYgKzExOSw4IEBAIHNldChX
UEVfQVBJX0lOU1RBTExFRF9IRUFERVJTCiAgICAgJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJ
L3dwZS9XZWJLaXROZXR3b3JrUHJveHlTZXR0aW5ncy5oCiAgICAgJHtXRUJLSVRfRElSfS9VSVBy
b2Nlc3MvQVBJL3dwZS9XZWJLaXROb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdC5oCiAgICAg
JHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXROb3RpZmljYXRpb24uaAorICAg
ICR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0T3B0aW9uTWVudS5oCisgICAg
JHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRPcHRpb25NZW51SXRlbS5oCiAg
ICAgJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRQZXJtaXNzaW9uUmVxdWVz
dC5oCiAgICAgJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRQbHVnaW4uaAog
ICAgICR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0UG9saWN5RGVjaXNpb24u
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzV1BFLnR4dCBiL1NvdXJjZS9XZWJL
aXQvU291cmNlc1dQRS50eHQKaW5kZXggZWE3ZmY4ZDczZmRmMTMzZDdjNTYwYzlmYmNmMDE1YTYy
NDdhZDgzOS4uZjRmYmMyZjdiNjBhMzBkNjBkMDdkY2Q5MzYwNWIyYjY4YmI3MmFiMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzV1BFLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1Nv
dXJjZXNXUEUudHh0CkBAIC0xNDUsNiArMTQ1LDggQEAgVUlQcm9jZXNzL0FQSS9nbGliL1dlYktp
dE5ldHdvcmtQcm94eVNldHRpbmdzLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ2xpYi9X
ZWJLaXROb3RpZmljYXRpb24uY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktp
dE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0LmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9B
UEkvZ2xpYi9XZWJLaXROb3RpZmljYXRpb25Qcm92aWRlci5jcHAgQG5vLXVuaWZ5CitVSVByb2Nl
c3MvQVBJL2dsaWIvV2ViS2l0T3B0aW9uTWVudS5jcHAgQG5vLXVuaWZ5CitVSVByb2Nlc3MvQVBJ
L2dsaWIvV2ViS2l0T3B0aW9uTWVudUl0ZW0uY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdFBlcm1pc3Npb25SZXF1ZXN0LmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkv
Z2xpYi9XZWJLaXRQbHVnaW4uY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktp
dFBvbGljeURlY2lzaW9uLmNwcCBAbm8tdW5pZnkKQEAgLTE3Nyw2ICsxNzksNyBAQCBVSVByb2Nl
c3MvQVBJL3dwZS9QYWdlQ2xpZW50SW1wbC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL3dw
ZS9TY3JvbGxHZXN0dXJlQ29udHJvbGxlci5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL3dw
ZS9XZWJLaXRDb2xvci5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRJbnB1
dE1ldGhvZENvbnRleHRXUEUuY3BwIEBuby11bmlmeQorVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0
UG9wdXBNZW51LmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFNjcmlwdERp
YWxvZ1dQRS5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRXZWJWaWV3QmFj
a2VuZC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRXZWJWaWV3V1BFLmNw
cCBAbm8tdW5pZnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL3dw
ZS9XS1ZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Mvd3BlL1dLVmlldy5j
cHAKaW5kZXggOTY0MDZkMGFhZmJjMzU1NTYwYjVkMzE5N2EwMGMyNWY1NzU5YTNmZC4uNDVlNjBh
YTQxYWU4Y2RhOWVkNmViMjAxY2I4ZGQ0ZmMzMjNmZDZiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0Mvd3BlL1dLVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0Mvd3BlL1dLVmlldy5jcHAKQEAgLTQyLDcgKzQyLDcgQEAgdGVtcGxhdGU8
PiBzdHJ1Y3QgQ2xpZW50VHJhaXRzPFdLVmlld0NsaWVudEJhc2U+IHsKIAogV0tWaWV3UmVmIFdL
Vmlld0NyZWF0ZShzdHJ1Y3Qgd3BlX3ZpZXdfYmFja2VuZCogYmFja2VuZCwgV0tQYWdlQ29uZmln
dXJhdGlvblJlZiBjb25maWd1cmF0aW9uKQogewotICAgIHJldHVybiB0b0FQSShXS1dQRTo6Vmll
dzo6Y3JlYXRlKGJhY2tlbmQsICp0b0ltcGwoY29uZmlndXJhdGlvbikpKTsKKyAgICByZXR1cm4g
dG9BUEkoV0tXUEU6OlZpZXc6OmNyZWF0ZShudWxscHRyLCBiYWNrZW5kLCAqdG9JbXBsKGNvbmZp
Z3VyYXRpb24pKSk7CiB9CiAKIFdLUGFnZVJlZiBXS1ZpZXdHZXRQYWdlKFdLVmlld1JlZiB2aWV3
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vi
Vmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3
LmNwcAppbmRleCBmZjg2ZWNmMGY5NjZjNGY5NzQxYTJhMzZhMjhjM2RmYTE0MDJmNDUzLi5lNmFi
MTZlYjY4MmY2OWI3ZWQ0MjA1ZjAyNjhmNmM0YjE4NzhkYjg4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmNwcApAQCAtMTY1LDkgKzE2
NSw4IEBAIGVudW0gewogCiAjaWYgUExBVEZPUk0oR1RLKQogICAgIFJVTl9DT0xPUl9DSE9PU0VS
LAotCi0gICAgU0hPV19PUFRJT05fTUVOVSwKICNlbmRpZgorICAgIFNIT1dfT1BUSU9OX01FTlUs
CiAKICAgICBVU0VSX01FU1NBR0VfUkVDRUlWRUQsCiAKQEAgLTIxMzMsNiArMjEzMiwzNyBAQCBz
dGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3Mq
IHdlYlZpZXdDbGFzcykKICAgICAgICAgR0RLX1RZUEVfUkVDVEFOR0xFIHwgR19TSUdOQUxfVFlQ
RV9TVEFUSUNfU0NPUEUpOwogI2VuZGlmIC8vIFBMQVRGT1JNKEdUSykKIAorI2lmIFBMQVRGT1JN
KFdQRSkKKyAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJWaWV3OjpzaG93LW9wdGlvbi1tZW51Ogor
ICAgICAqIEB3ZWJfdmlldzogdGhlICNXZWJLaXRXZWJWaWV3IG9uIHdoaWNoIHRoZSBzaWduYWwg
aXMgZW1pdHRlZAorICAgICAqIEBtZW51OiB0aGUgI1dlYktpdE9wdGlvbk1lbnUKKyAgICAgKgor
ICAgICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgd2hlbiBhIHNlbGVjdCBlbGVtZW50IGluIEB3
ZWJfdmlldyBuZWVkcyB0byBkaXNwbGF5IGEKKyAgICAgKiBkcm9wZG93biBtZW51LiBUaGlzIHNp
Z25hbCBjYW4gYmUgdXNlZCB0byBzaG93IGEgY3VzdG9tIG1lbnUsIHVzaW5nIEBtZW51IHRvIGdl
dAorICAgICAqIHRoZSBkZXRhaWxzIG9mIGFsbCBpdGVtcyB0aGF0IHNob3VsZCBiZSBkaXNwbGF5
ZWQuIFRoZSBhcmVhIG9mIHRoZSBlbGVtZW50IGluIHRoZQorICAgICAqICNXZWJLaXRXZWJWaWV3
IGlzIGdpdmVuIGFzIEByZWN0YW5nbGUgcGFyYW1ldGVyLCBpdCBjYW4gYmUgdXNlZCB0byBwb3Np
dGlvbiB0aGUKKyAgICAgKiBtZW51LgorICAgICAqIFRvIGhhbmRsZSB0aGlzIHNpZ25hbCBhc3lu
Y2hyb25vdXNseSB5b3Ugc2hvdWxkIGtlZXAgYSByZWYgb2YgdGhlIEBtZW51LgorICAgICAqCisg
ICAgICogVGhlIGRlZmF1bHQgc2lnbmFsIGhhbmRsZXIgd2lsbCBwb3AgdXAgYSAjR3RrTWVudS4K
KyAgICAgKgorICAgICAqIFJldHVybnM6ICVUUlVFIHRvIHN0b3Agb3RoZXIgaGFuZGxlcnMgZnJv
bSBiZWluZyBpbnZva2VkIGZvciB0aGUgZXZlbnQuCisgICAgICogICAlRkFMU0UgdG8gcHJvcGFn
YXRlIHRoZSBldmVudCBmdXJ0aGVyLgorICAgICAqCisgICAgICogU2luY2U6IDIuMjgKKyAgICAg
Ki8KKyAgICBzaWduYWxzW1NIT1dfT1BUSU9OX01FTlVdID0gZ19zaWduYWxfbmV3KAorICAgICAg
ICAic2hvdy1vcHRpb24tbWVudSIsCisgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdD
bGFzcyksCisgICAgICAgIEdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgICBHX1NUUlVDVF9PRkZT
RVQoV2ViS2l0V2ViVmlld0NsYXNzLCBzaG93X29wdGlvbl9tZW51KSwKKyAgICAgICAgZ19zaWdu
YWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLCBudWxscHRyLAorICAgICAgICBnX2NjbG9zdXJl
X21hcnNoYWxfZ2VuZXJpYywKKyAgICAgICAgR19UWVBFX0JPT0xFQU4sIDEsCisgICAgICAgIFdF
QktJVF9UWVBFX09QVElPTl9NRU5VKTsKKyNlbmRpZgorCiAgICAgLyoqCiAgICAgICogV2ViS2l0
V2ViVmlldzo6dXNlci1tZXNzYWdlLXJlY2VpdmVkOgogICAgICAqIEB3ZWJfdmlldzogdGhlICNX
ZWJLaXRXZWJWaWV3IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZApAQCAtMjE3Niw3ICsy
MjA2LDcgQEAgdm9pZCB3ZWJraXRXZWJWaWV3Q3JlYXRlUGFnZShXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3LCBSZWY8QVBJOjpQYWdlQ29uZmlndXJhdGlvbj4KICNpZiBQTEFURk9STShHVEspCiAgICAg
d2Via2l0V2ViVmlld0Jhc2VDcmVhdGVXZWJQYWdlKFdFQktJVF9XRUJfVklFV19CQVNFKHdlYlZp
ZXcpLCBXVEZNb3ZlKGNvbmZpZ3VyYXRpb24pKTsKICNlbGlmIFBMQVRGT1JNKFdQRSkKLSAgICB3
ZWJWaWV3LT5wcml2LT52aWV3LnJlc2V0KFdLV1BFOjpWaWV3OjpjcmVhdGUod2Via2l0X3dlYl92
aWV3X2JhY2tlbmRfZ2V0X3dwZV9iYWNrZW5kKHdlYlZpZXctPnByaXYtPmJhY2tlbmQuZ2V0KCkp
LCBjb25maWd1cmF0aW9uLmdldCgpKSk7CisgICAgd2ViVmlldy0+cHJpdi0+dmlldy5yZXNldChX
S1dQRTo6Vmlldzo6Y3JlYXRlKHdlYlZpZXcsIHdlYmtpdF93ZWJfdmlld19iYWNrZW5kX2dldF93
cGVfYmFja2VuZCh3ZWJWaWV3LT5wcml2LT5iYWNrZW5kLmdldCgpKSwgY29uZmlndXJhdGlvbi5n
ZXQoKSkpOwogI2VuZGlmCiB9CiAKQEAgLTI3MjEsNiArMjc1MSwxNSBAQCB2b2lkIHdlYmtpdFdl
YlZpZXdEZWxldGVTdXJyb3VuZGluZyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBpbnQgb2Zmc2V0
LCB1bnNpZ25lZAogICAgIGdldFBhZ2Uod2ViVmlldykuZGVsZXRlU3Vycm91bmRpbmcob2Zmc2V0
LCBjaGFyYWN0ZXJDb3VudCk7CiB9CiAKKyNpZiBQTEFURk9STShXUEUpCitib29sIHdlYmtpdFdl
YlZpZXdTaG93T3B0aW9uTWVudShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRPcHRpb25N
ZW51KiBtZW51KQoreworICAgIGdib29sZWFuIGhhbmRsZWQ7CisgICAgZ19zaWduYWxfZW1pdCh3
ZWJWaWV3LCBzaWduYWxzW1NIT1dfT1BUSU9OX01FTlVdLCAwLCBtZW51LCAmaGFuZGxlZCk7Cisg
ICAgcmV0dXJuIGhhbmRsZWQ7Cit9CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKFdQRSkKIC8qKgog
ICogd2Via2l0X3dlYl92aWV3X2dldF9iYWNrZW5kOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlld1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXdQcml2YXRlLmgKaW5kZXggNjdmNjk4
MjFlYTdmNjJjN2IwM2Y1MTNlMzg3MzRlY2RiOWM3YjUzOS4uOWE4NjQzOTYzMTE1NTcwZjMyZDZh
MGY1ZDY1MzFhZjg3YzUwZmYyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2dsaWIvV2ViS2l0V2ViVmlld1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oCkBAIC0xMDAsNiArMTAwLDEwIEBA
IGJvb2wgd2Via2l0V2ViVmlld0VtaXRSdW5Db2xvckNob29zZXIoV2ViS2l0V2ViVmlldyosIFdl
YktpdENvbG9yQ2hvb3NlclJlcXVlc3QqCiBib29sIHdlYmtpdFdlYlZpZXdTaG93T3B0aW9uTWVu
dShXZWJLaXRXZWJWaWV3KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIFdlYktpdE9wdGlvbk1l
bnUqLCBjb25zdCBHZGtFdmVudCopOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShXUEUpCitib29s
IHdlYmtpdFdlYlZpZXdTaG93T3B0aW9uTWVudShXZWJLaXRXZWJWaWV3KiwgV2ViS2l0T3B0aW9u
TWVudSopOworI2VuZGlmCisKIGdib29sZWFuIHdlYmtpdFdlYlZpZXdBdXRoZW50aWNhdGUoV2Vi
S2l0V2ViVmlldyosIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCopOwogZ2Jvb2xlYW4gd2Vi
a2l0V2ViVmlld1NjcmlwdERpYWxvZyhXZWJLaXRXZWJWaWV3KiwgV2ViS2l0U2NyaXB0RGlhbG9n
Kik7CiBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3UnVuRmlsZUNob29zZXIoV2ViS2l0V2ViVmlldyos
IFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL3dwZS9QYWdlQ2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvd3BlL1BhZ2VDbGllbnRJbXBsLmNwcAppbmRleCA1OTJkNzMzNDk5OTg3MTFmMTdj
MTgxYzJmMGNkZWE2YjRjNGYwNjgzLi5kMGQ2ZDA4ZThmYTVkNzNiY2YwZjMwMTk4MzQ5YTk0NjAy
ZWVmN2MyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1BhZ2VD
bGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1BhZ2VD
bGllbnRJbXBsLmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIldQRVZpZXcuaCIKICNp
bmNsdWRlICJXZWJDb250ZXh0TWVudVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVQ
cm94eVdQRS5oIgorI2luY2x1ZGUgIldlYktpdFBvcHVwTWVudS5oIgogI2luY2x1ZGUgPFdlYkNv
cmUvQWN0aXZpdHlTdGF0ZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRE9NUGFzdGVBY2Nlc3MuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CkBAIC0yNTMsOSArMjU0LDkgQEAg
dm9pZCBQYWdlQ2xpZW50SW1wbDo6d2hlZWxFdmVudFdhc05vdEhhbmRsZWRCeVdlYkNvcmUoY29u
c3QgTmF0aXZlV2ViV2hlZWxFdmVudCYKIHsKIH0KIAotUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5
PiBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlUG9wdXBNZW51UHJveHkoV2ViUGFnZVByb3h5JikKK1Jl
ZlB0cjxXZWJQb3B1cE1lbnVQcm94eT4gUGFnZUNsaWVudEltcGw6OmNyZWF0ZVBvcHVwTWVudVBy
b3h5KFdlYlBhZ2VQcm94eSYgcGFnZSkKIHsKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1
cm4gV2ViS2l0UG9wdXBNZW51OjpjcmVhdGUobV92aWV3LndlYlZpZXcoKSwgcGFnZSk7CiB9CiAK
ICNpZiBFTkFCTEUoQ09OVEVYVF9NRU5VUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS93cGUvV1BFVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
d3BlL1dQRVZpZXcuY3BwCmluZGV4IGJiOGUzNjE4MDEyMTEwODhlYzFiNTJhNjgzNTk1MTYyNzlj
NTQ1NjMuLmI4YzFmODgwMGY5ODllZjBiNjZiMTY0MTM0ZDU0NWU2NWE0MmU3ZjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV1BFVmlldy5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XUEVWaWV3LmNwcApAQCAtNDQsMTEgKzQ0LDEy
IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIG5hbWVzcGFjZSBXS1dQRSB7CiAKLVZpZXc6
OlZpZXcoc3RydWN0IHdwZV92aWV3X2JhY2tlbmQqIGJhY2tlbmQsIGNvbnN0IEFQSTo6UGFnZUNv
bmZpZ3VyYXRpb24mIGJhc2VDb25maWd1cmF0aW9uKQorVmlldzo6VmlldyhXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3LCBzdHJ1Y3Qgd3BlX3ZpZXdfYmFja2VuZCogYmFja2VuZCwgY29uc3QgQVBJOjpQ
YWdlQ29uZmlndXJhdGlvbiYgYmFzZUNvbmZpZ3VyYXRpb24pCiAgICAgOiBtX2NsaWVudChtYWtl
VW5pcXVlPEFQSTo6Vmlld0NsaWVudD4oKSkKICAgICAsIG1fcGFnZUNsaWVudChtYWtlVW5pcXVl
PFBhZ2VDbGllbnRJbXBsPigqdGhpcykpCiAgICAgLCBtX3NpemUgeyA4MDAsIDYwMCB9CiAgICAg
LCBtX3ZpZXdTdGF0ZUZsYWdzIHsgV2ViQ29yZTo6QWN0aXZpdHlTdGF0ZTo6V2luZG93SXNBY3Rp
dmUsIFdlYkNvcmU6OkFjdGl2aXR5U3RhdGU6OklzRm9jdXNlZCwgV2ViQ29yZTo6QWN0aXZpdHlT
dGF0ZTo6SXNWaXNpYmxlLCBXZWJDb3JlOjpBY3Rpdml0eVN0YXRlOjpJc0luV2luZG93IH0KKyAg
ICAsIG1fd2ViVmlldyh3ZWJWaWV3KQogICAgICwgbV9iYWNrZW5kKGJhY2tlbmQpCiB7CiAgICAg
QVNTRVJUKG1fYmFja2VuZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvd3BlL1dQRVZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV1BFVmll
dy5oCmluZGV4IGYyM2RmYzI3YTdjNGIzZTBmZTEzMTM3ODBmNWRiMjg2Nzc3ZDY2YTQuLjk4MTdm
ZmRmY2IyOTFhYWNhMTU2NjZhZmVjNTAyZGExNTcxODJlZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV1BFVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS93cGUvV1BFVmlldy5oCkBAIC00MSw2ICs0MSw3IEBACiAKIHR5cGVkZWYgc3Ry
dWN0IE9wYXF1ZUpTQ29udGV4dCogSlNHbG9iYWxDb250ZXh0UmVmOwogdHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdElucHV0TWV0aG9kQ29udGV4dCBXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQ7Cit0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmlldyBXZWJLaXRXZWJWaWV3Owogc3RydWN0IHdwZV9pbnB1
dF9rZXlib2FyZF9ldmVudDsKIHN0cnVjdCB3cGVfdmlld19iYWNrZW5kOwogCkBAIC02NCw5ICs2
NSw5IEBAIG5hbWVzcGFjZSBXS1dQRSB7CiAKIGNsYXNzIFZpZXcgOiBwdWJsaWMgQVBJOjpPYmpl
Y3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpWaWV3PiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFZp
ZXcqIGNyZWF0ZShzdHJ1Y3Qgd3BlX3ZpZXdfYmFja2VuZCogYmFja2VuZCwgY29uc3QgQVBJOjpQ
YWdlQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKKyAgICBzdGF0aWMgVmlldyogY3JlYXRl
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIHN0cnVjdCB3cGVfdmlld19iYWNrZW5kKiBiYWNrZW5k
LCBjb25zdCBBUEk6OlBhZ2VDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIG5ldyBWaWV3KGJhY2tlbmQsIGNvbmZpZ3VyYXRpb24pOworICAgICAgICBy
ZXR1cm4gbmV3IFZpZXcod2ViVmlldywgYmFja2VuZCwgY29uZmlndXJhdGlvbik7CiAgICAgfQog
CiAgICAgflZpZXcoKTsKQEAgLTg4LDYgKzg5LDcgQEAgcHVibGljOgogCiAgICAgV2ViS2l0OjpX
ZWJQYWdlUHJveHkmIHBhZ2UoKSB7IHJldHVybiAqbV9wYWdlUHJveHk7IH0KIAorICAgIFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcoKSB7IHJldHVybiBtX3dlYlZpZXc7IH0KICAgICBzdHJ1Y3Qgd3Bl
X3ZpZXdfYmFja2VuZCogYmFja2VuZCgpIHsgcmV0dXJuIG1fYmFja2VuZDsgfQogCiAgICAgY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQpAQCAt
MTA2LDcgKzEwOCw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2YXRlOgotICAgIFZpZXcoc3Ry
dWN0IHdwZV92aWV3X2JhY2tlbmQqLCBjb25zdCBBUEk6OlBhZ2VDb25maWd1cmF0aW9uJik7Cisg
ICAgVmlldyhXZWJLaXRXZWJWaWV3Kiwgc3RydWN0IHdwZV92aWV3X2JhY2tlbmQqLCBjb25zdCBB
UEk6OlBhZ2VDb25maWd1cmF0aW9uJik7CiAKICAgICB2b2lkIHNldFNpemUoY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYpOwogICAgIHZvaWQgc2V0Vmlld1N0YXRlKE9wdGlvblNldDxXZWJDb3JlOjpB
Y3Rpdml0eVN0YXRlOjpGbGFnPik7CkBAIC0xMTksNiArMTIxLDcgQEAgcHJpdmF0ZToKICAgICBX
ZWJDb3JlOjpJbnRTaXplIG1fc2l6ZTsKICAgICBPcHRpb25TZXQ8V2ViQ29yZTo6QWN0aXZpdHlT
dGF0ZTo6RmxhZz4gbV92aWV3U3RhdGVGbGFnczsKIAorICAgIFdlYktpdFdlYlZpZXcqIG1fd2Vi
VmlldzsKICAgICBzdHJ1Y3Qgd3BlX3ZpZXdfYmFja2VuZCogbV9iYWNrZW5kOwogCiAjaWYgRU5B
QkxFKEZVTExTQ1JFRU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL3dwZS9XZWJLaXRPcHRpb25NZW51LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
d3BlL1dlYktpdE9wdGlvbk1lbnUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZmUyZWZmMDk0MTAwYzFkYzdkOGYx
OGJjMzM2MTE3NTEyZjc4NTU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL3dwZS9XZWJLaXRPcHRpb25NZW51LmgKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRfSF9J
TlNJREVfXykgJiYgIWRlZmluZWQoV0VCS0lUMl9DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8
d3BlL3dlYmtpdC5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5k
ZWYgV2ViS2l0T3B0aW9uTWVudV9oCisjZGVmaW5lIFdlYktpdE9wdGlvbk1lbnVfaAorCisjaW5j
bHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3cGUvV2ViS2l0RGVmaW5lcy5oPgorI2lu
Y2x1ZGUgPHdwZS9XZWJLaXRPcHRpb25NZW51SXRlbS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNk
ZWZpbmUgV0VCS0lUX1RZUEVfT1BUSU9OX01FTlUgICAgICAgICAgICAod2Via2l0X29wdGlvbl9t
ZW51X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9PUFRJT05fTUVOVShvYmopICAgICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9PUFRJT05f
TUVOVSwgV2ViS2l0T3B0aW9uTWVudSkpCisjZGVmaW5lIFdFQktJVF9JU19PUFRJT05fTUVOVShv
YmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQ
RV9PUFRJT05fTUVOVSkpCisjZGVmaW5lIFdFQktJVF9PUFRJT05fTUVOVV9DTEFTUyhrbGFzcykg
ICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9PUFRJT05f
TUVOVSwgV2ViS2l0T3B0aW9uTWVudUNsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX09QVElPTl9N
RU5VX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJ
VF9UWVBFX09QVElPTl9NRU5VKSkKKyNkZWZpbmUgV0VCS0lUX09QVElPTl9NRU5VX0dFVF9DTEFT
UyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX09Q
VElPTl9NRU5VLCBXZWJLaXRPcHRpb25NZW51Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0T3B0aW9uTWVudSAgICAgICAgV2ViS2l0T3B0aW9uTWVudTsKK3R5cGVkZWYgc3RydWN0IF9X
ZWJLaXRPcHRpb25NZW51Q2xhc3MgICBXZWJLaXRPcHRpb25NZW51Q2xhc3M7Cit0eXBlZGVmIHN0
cnVjdCBfV2ViS2l0T3B0aW9uTWVudVByaXZhdGUgV2ViS2l0T3B0aW9uTWVudVByaXZhdGU7CisK
K3N0cnVjdCBfV2ViS2l0T3B0aW9uTWVudSB7CisgICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICBX
ZWJLaXRPcHRpb25NZW51UHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0T3B0aW9u
TWVudUNsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworCisgICAgdm9pZCAo
Kl93ZWJraXRfcmVzZXJ2ZWQwKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQx
KSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQyKSAodm9pZCk7CisgICAgdm9p
ZCAoKl93ZWJraXRfcmVzZXJ2ZWQzKSAodm9pZCk7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3
ZWJraXRfb3B0aW9uX21lbnVfZ2V0X3R5cGUgICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJIGd1
aW50Cit3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X25faXRlbXMgICAgKFdlYktpdE9wdGlvbk1lbnUg
Km1lbnUpOworCitXRUJLSVRfQVBJIFdlYktpdE9wdGlvbk1lbnVJdGVtICoKK3dlYmtpdF9vcHRp
b25fbWVudV9nZXRfaXRlbSAgICAgICAoV2ViS2l0T3B0aW9uTWVudSAqbWVudSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgaW5kZXgpOworCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9vcHRpb25fbWVudV9zZWxlY3RfaXRlbSAgICAoV2ViS2l0
T3B0aW9uTWVudSAqbWVudSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Vp
bnQgICAgICAgICAgICAgaW5kZXgpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9vcHRpb25f
bWVudV9hY3RpdmF0ZV9pdGVtICAoV2ViS2l0T3B0aW9uTWVudSAqbWVudSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgaW5kZXgpOworCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF9vcHRpb25fbWVudV9jbG9zZSAgICAgICAgICAoV2ViS2l0T3B0
aW9uTWVudSAqbWVudSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRPcHRpb25NZW51SXRlbS5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRPcHRpb25NZW51SXRlbS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjc4ZmYyN2Q2ZWQyYTA3ODVmYzgxN2FmNzVhYTM5ZTczOThhZGE3MjAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdE9wdGlvbk1l
bnVJdGVtLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2Fs
aWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoV0VC
S0lUMl9DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8d3BlL3dlYmtpdC5oPiBjYW4gYmUgaW5j
bHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0T3B0aW9uTWVudUl0ZW1f
aAorI2RlZmluZSBXZWJLaXRPcHRpb25NZW51SXRlbV9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVj
dC5oPgorI2luY2x1ZGUgPHdwZS9XZWJLaXREZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKwor
I2RlZmluZSBXRUJLSVRfVFlQRV9PUFRJT05fTUVOVV9JVEVNICh3ZWJraXRfb3B0aW9uX21lbnVf
aXRlbV9nZXRfdHlwZSgpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0T3B0aW9uTWVudUl0ZW0g
V2ViS2l0T3B0aW9uTWVudUl0ZW07CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9vcHRpb25f
bWVudV9pdGVtX2dldF90eXBlICAgICAgICh2b2lkKTsKKworV0VCS0lUX0FQSSBXZWJLaXRPcHRp
b25NZW51SXRlbSAqCit3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9jb3B5ICAgICAgICAgICAoV2Vi
S2l0T3B0aW9uTWVudUl0ZW0gKml0ZW0pOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9vcHRp
b25fbWVudV9pdGVtX2ZyZWUgICAgICAgICAgIChXZWJLaXRPcHRpb25NZW51SXRlbSAqaXRlbSk7
CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0
X2xhYmVsICAgICAgKFdlYktpdE9wdGlvbk1lbnVJdGVtICppdGVtKTsKKworV0VCS0lUX0FQSSBj
b25zdCBnY2hhciAqCit3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfdG9vbHRpcCAgICAoV2Vi
S2l0T3B0aW9uTWVudUl0ZW0gKml0ZW0pOworCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRf
b3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9sYWJlbCAoV2ViS2l0T3B0aW9uTWVudUl0ZW0gKml0
ZW0pOworCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19n
cm91cF9jaGlsZCAoV2ViS2l0T3B0aW9uTWVudUl0ZW0gKml0ZW0pOworCitXRUJLSVRfQVBJIGdi
b29sZWFuCit3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19lbmFibGVkICAgICAoV2ViS2l0T3B0
aW9uTWVudUl0ZW0gKml0ZW0pOworCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfb3B0aW9u
X21lbnVfaXRlbV9pc19zZWxlY3RlZCAgICAoV2ViS2l0T3B0aW9uTWVudUl0ZW0gKml0ZW0pOwor
CitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS93cGUvV2ViS2l0UG9wdXBNZW51LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS93cGUvV2ViS2l0UG9wdXBNZW51LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYWJkZDBiMjk1ZDU4ZDRh
NDJkMzUyMThlM2Y4ZGNlZmM3OGFjOGYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRQb3B1cE1lbnUuY3BwCkBAIC0wLDAgKzEsODAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldlYktpdFBvcHVwTWVudS5oIgorCisjaW5jbHVkZSAiV2ViS2l0T3B0aW9u
TWVudVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJWaWV3UHJpdmF0ZS5oIgorCituYW1l
c3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitXZWJLaXRQb3B1cE1l
bnU6OldlYktpdFBvcHVwTWVudShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJQb3B1cE1lbnVQ
cm94eTo6Q2xpZW50JiBjbGllbnQpCisgICAgOiBXZWJQb3B1cE1lbnVQcm94eShjbGllbnQpCisg
ICAgLCBtX3dlYlZpZXcod2ViVmlldykKK3sKK30KKworc3RhdGljIHZvaWQgbWVudUNsb3NlQ2Fs
bGJhY2soV2ViS2l0UG9wdXBNZW51KiBwb3B1cE1lbnUpCit7CisgICAgcG9wdXBNZW51LT5hY3Rp
dmF0ZUl0ZW0oV1RGOjpudWxsb3B0KTsKK30KKwordm9pZCBXZWJLaXRQb3B1cE1lbnU6OnNob3dQ
b3B1cE1lbnUoY29uc3QgSW50UmVjdCYgcmVjdCwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIGRv
dWJsZSBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0IFZlY3RvcjxXZWJQb3B1cEl0ZW0+JiBpdGVtcywg
Y29uc3QgUGxhdGZvcm1Qb3B1cE1lbnVEYXRhJiBwbGF0Zm9ybURhdGEsIGludDMyX3Qgc2VsZWN0
ZWRJbmRleCkKK3sKKyAgICBHUmVmUHRyPFdlYktpdE9wdGlvbk1lbnU+IG1lbnUgPSBhZG9wdEdS
ZWYod2Via2l0T3B0aW9uTWVudUNyZWF0ZSgqdGhpcywgaXRlbXMsIHNlbGVjdGVkSW5kZXgpKTsK
KyAgICBpZiAod2Via2l0V2ViVmlld1Nob3dPcHRpb25NZW51KFdFQktJVF9XRUJfVklFVyhtX3dl
YlZpZXcpLCBtZW51LmdldCgpKSkgeworICAgICAgICBtX21lbnUgPSBXVEZNb3ZlKG1lbnUpOwor
ICAgICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9tZW51LmdldCgpLCAiY2xvc2UiLCBH
X0NBTExCQUNLKG1lbnVDbG9zZUNhbGxiYWNrKSwgdGhpcyk7CisgICAgfQorfQorCit2b2lkIFdl
YktpdFBvcHVwTWVudTo6aGlkZVBvcHVwTWVudSgpCit7CisgICAgaWYgKG1fbWVudSkgeworICAg
ICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9tZW51LmdldCgpLCBH
X1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlzKTsKKyAgICAg
ICAgd2Via2l0X29wdGlvbl9tZW51X2Nsb3NlKG1fbWVudS5nZXQoKSk7CisgICAgfQorfQorCit2
b2lkIFdlYktpdFBvcHVwTWVudTo6Y2FuY2VsVHJhY2tpbmcoKQoreworICAgIGhpZGVQb3B1cE1l
bnUoKTsKKyAgICBtX21lbnUgPSBudWxscHRyOworfQorCit2b2lkIFdlYktpdFBvcHVwTWVudTo6
c2VsZWN0SXRlbSh1bnNpZ25lZCBpdGVtSW5kZXgpCit7CisgICAgaWYgKG1fY2xpZW50KQorICAg
ICAgICBtX2NsaWVudC0+c2V0VGV4dEZyb21JdGVtRm9yUG9wdXBNZW51KHRoaXMsIGl0ZW1JbmRl
eCk7CisgICAgbV9zZWxlY3RlZEl0ZW0gPSBpdGVtSW5kZXg7Cit9CisKK3ZvaWQgV2ViS2l0UG9w
dXBNZW51OjphY3RpdmF0ZUl0ZW0oT3B0aW9uYWw8dW5zaWduZWQ+IGl0ZW1JbmRleCkKK3sKKyAg
ICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT52YWx1ZUNoYW5nZWRGb3JQb3B1cE1l
bnUodGhpcywgaXRlbUluZGV4LnZhbHVlT3IobV9zZWxlY3RlZEl0ZW0udmFsdWVPcigtMSkpKTsK
KyAgICBpZiAobV9tZW51KSB7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3Rf
bWF0Y2hlZChtX21lbnUuZ2V0KCksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIG51bGxwdHIs
IG51bGxwdHIsIHRoaXMpOworICAgICAgICBtX21lbnUgPSBudWxscHRyOworICAgIH0KK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvd3BlL1dlYktpdFBvcHVwTWVudS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L3dwZS9XZWJLaXRQb3B1cE1lbnUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YzE2MGY2MjEzZjc4ODhlODc0NDc4
NGRhMzM5OWYyMTI4NGU1YzI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL3dwZS9XZWJLaXRQb3B1cE1lbnUuaApAQCAtMCwwICsxLDUzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
V2ViUG9wdXBNZW51UHJveHkuaCIKKyNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CisKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRPcHRpb25NZW51IFdlYktpdE9wdGlvbk1lbnU7Cit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0V2ViVmlldyBXZWJLaXRXZWJWaWV3OworCituYW1lc3BhY2UgV2ViS2l0
IHsKKworY2xhc3MgV2ViS2l0UG9wdXBNZW51IGZpbmFsIDogcHVibGljIFdlYlBvcHVwTWVudVBy
b3h5IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFdlYktpdFBvcHVwTWVudT4gY3JlYXRlKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYlBvcHVwTWVudVByb3h5OjpDbGllbnQmIGNsaWVudCkK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYktpdFBvcHVwTWVudSh3ZWJW
aWV3LCBjbGllbnQpKTsKKyAgICB9CisgICAgfldlYktpdFBvcHVwTWVudSgpID0gZGVmYXVsdDsK
KworICAgIHZvaWQgc2VsZWN0SXRlbSh1bnNpZ25lZCBpdGVtSW5kZXgpOworICAgIHZvaWQgYWN0
aXZhdGVJdGVtKE9wdGlvbmFsPHVuc2lnbmVkPiBpdGVtSW5kZXgpOworCitwcml2YXRlOgorICAg
IFdlYktpdFBvcHVwTWVudShXZWJLaXRXZWJWaWV3KiwgV2ViUG9wdXBNZW51UHJveHk6OkNsaWVu
dCYpOworCisgICAgdm9pZCBzaG93UG9wdXBNZW51KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBX
ZWJDb3JlOjpUZXh0RGlyZWN0aW9uLCBkb3VibGUgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBWZWN0
b3I8V2ViUG9wdXBJdGVtPiYsIGNvbnN0IFBsYXRmb3JtUG9wdXBNZW51RGF0YSYsIGludDMyX3Qg
c2VsZWN0ZWRJbmRleCkgb3ZlcnJpZGU7CisgICAgdm9pZCBoaWRlUG9wdXBNZW51KCkgb3ZlcnJp
ZGU7CisgICAgdm9pZCBjYW5jZWxUcmFja2luZygpIG92ZXJyaWRlOworCisgICAgV2ViS2l0V2Vi
VmlldyogbV93ZWJWaWV3OworICAgIEdSZWZQdHI8V2ViS2l0T3B0aW9uTWVudT4gbV9tZW51Owor
ICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBtX3NlbGVjdGVkSXRlbTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9X
ZWJLaXRXZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdl
YlZpZXcuaAppbmRleCAwMTc0MzRkZWJkZjcxNjIyM2Y3ZDZkMDFkNmQ3OTkzNzQ5Y2I4ZDQ4Li5k
NmU4YzFjMGU2OTNjNTZhYTUwOTJhYzc2ZGYyY2NhYzFmMzEzNTAxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYlZpZXcuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYlZpZXcuaApAQCAtNDEsNiArNDEsNyBA
QAogI2luY2x1ZGUgPHdwZS9XZWJLaXRKYXZhc2NyaXB0UmVzdWx0Lmg+CiAjaW5jbHVkZSA8d3Bl
L1dlYktpdE5hdmlnYXRpb25BY3Rpb24uaD4KICNpbmNsdWRlIDx3cGUvV2ViS2l0Tm90aWZpY2F0
aW9uLmg+CisjaW5jbHVkZSA8d3BlL1dlYktpdE9wdGlvbk1lbnUuaD4KICNpbmNsdWRlIDx3cGUv
V2ViS2l0UGVybWlzc2lvblJlcXVlc3QuaD4KICNpbmNsdWRlIDx3cGUvV2ViS2l0UG9saWN5RGVj
aXNpb24uaD4KICNpbmNsdWRlIDx3cGUvV2ViS2l0U2NyaXB0RGlhbG9nLmg+CkBAIC0yNDUsNyAr
MjQ2LDggQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3MgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFdlYlByb2Nlc3NUZXJtaW5h
dGlvblJlYXNvbiByZWFzb24pOwogICAgIGdib29sZWFuICAgICAgICgqIHVzZXJfbWVzc2FnZV9y
ZWNlaXZlZCkgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgICAqd2ViX3ZpZXcsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0
VXNlck1lc3NhZ2UgICAgICAgICAgICptZXNzYWdlKTsKLQorICAgIGdib29sZWFuICAgICAgICgq
IHNob3dfb3B0aW9uX21lbnUpICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAg
ICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgV2ViS2l0T3B0aW9uTWVudSAgICAgICAgICAgICptZW51KTsKIAogICAgIHZvaWQg
KCpfd2Via2l0X3Jlc2VydmVkMCkgKHZvaWQpOwogICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVk
MSkgKHZvaWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9k
b2NzL3dwZS0xLjAtc2VjdGlvbnMudHh0IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dw
ZS9kb2NzL3dwZS0xLjAtc2VjdGlvbnMudHh0CmluZGV4IDFkMWQ1N2IxNzE4NTdlZDgxMTI1MzBl
Mjc2YjFlZWJhMmFiZWYzOTMuLjgzZGVmMjVhNTUwN2E3MTM2YWU2NGZlNjlmNDEyZjliNTE0NDM3
MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvZG9jcy93cGUt
MS4wLXNlY3Rpb25zLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL2Rv
Y3Mvd3BlLTEuMC1zZWN0aW9ucy50eHQKQEAgLTEyMzAsNiArMTIzMCw0OCBAQCBXZWJLaXRDb250
ZXh0TWVudUl0ZW1Qcml2YXRlCiB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X3R5cGUKIDwv
U0VDVElPTj4KIAorPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRPcHRpb25NZW51PC9GSUxFPgorV2Vi
S2l0T3B0aW9uTWVudQord2Via2l0X29wdGlvbl9tZW51X2dldF9uX2l0ZW1zCit3ZWJraXRfb3B0
aW9uX21lbnVfZ2V0X2l0ZW0KK3dlYmtpdF9vcHRpb25fbWVudV9zZWxlY3RfaXRlbQord2Via2l0
X29wdGlvbl9tZW51X2FjdGl2YXRlX2l0ZW0KK3dlYmtpdF9vcHRpb25fbWVudV9jbG9zZQorCis8
U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdE9wdGlvbk1lbnVDbGFzcworV0VCS0lUX1RZUEVf
T1BUSU9OX01FTlUKK1dFQktJVF9PUFRJT05fTUVOVQorV0VCS0lUX0lTX09QVElPTl9NRU5VCitX
RUJLSVRfT1BUSU9OX01FTlVfQ0xBU1MKK1dFQktJVF9JU19PUFRJT05fTUVOVV9DTEFTUworV0VC
S0lUX09QVElPTl9NRU5VX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgorV2ViS2l0
T3B0aW9uTWVudVByaXZhdGUKK3dlYmtpdF9vcHRpb25fbWVudV9nZXRfdHlwZQorPC9TRUNUSU9O
PgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdE9wdGlvbk1lbnVJdGVtPC9GSUxFPgorV2ViS2l0
T3B0aW9uTWVudUl0ZW0KK3dlYmtpdF9vcHRpb25fbWVudV9pdGVtX2NvcHkKK3dlYmtpdF9vcHRp
b25fbWVudV9pdGVtX2ZyZWUKK3dlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF9sYWJlbAord2Vi
a2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X3Rvb2x0aXAKK3dlYmtpdF9vcHRpb25fbWVudV9pdGVt
X2lzX2dyb3VwX2xhYmVsCit3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9jaGlsZAor
d2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZW5hYmxlZAord2Via2l0X29wdGlvbl9tZW51X2l0
ZW1faXNfc2VsZWN0ZWQKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXRUJLSVRfVFlQRV9PUFRJ
T05fTUVOVV9JVEVNCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfb3B0aW9uX21lbnVf
aXRlbV9nZXRfdHlwZQorPC9TRUNUSU9OPgorCiA8U0VDVElPTj4KIDxGSUxFPldlYktpdEZvcm1T
dWJtaXNzaW9uUmVxdWVzdDwvRklMRT4KIFdlYktpdEZvcm1TdWJtaXNzaW9uUmVxdWVzdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS93ZWJraXQuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvd2Via2l0LmgKaW5kZXggMTVhNGMxZmYxYzRhZWVl
N2Q4MDc4NTZkYjBiM2E3NDAwMmU0MjFkZC4uMDJlMjU4MjUzZTQ3ZmJmNjU5NGMyMGY3NDNkMGZh
ZWFjOGE0ZWVmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS93
ZWJraXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL3dlYmtpdC5oCkBA
IC01OSw2ICs1OSw4IEBACiAjaW5jbHVkZSA8d3BlL1dlYktpdE5ldHdvcmtQcm94eVNldHRpbmdz
Lmg+CiAjaW5jbHVkZSA8d3BlL1dlYktpdE5vdGlmaWNhdGlvbi5oPgogI2luY2x1ZGUgPHdwZS9X
ZWJLaXROb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdC5oPgorI2luY2x1ZGUgPHdwZS9XZWJL
aXRPcHRpb25NZW51Lmg+CisjaW5jbHVkZSA8d3BlL1dlYktpdE9wdGlvbk1lbnVJdGVtLmg+CiAj
aW5jbHVkZSA8d3BlL1dlYktpdFBlcm1pc3Npb25SZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8d3BlL1dl
YktpdFBsdWdpbi5oPgogI2luY2x1ZGUgPHdwZS9XZWJLaXRSZXNwb25zZVBvbGljeURlY2lzaW9u
Lmg+CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXgg
NzAzM2ZhNGRlN2ZlMTFiMjI2YzVlZGM0NmQ5NmNmODhiMGE5ZDUyZi4uNTU3NTczOTEzYjE3NWU3
OTJiNmRiZTY0NjcyMmE0ZGExOTZiN2JhNSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisr
KyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDIwLTAxLTE2ICBaYW4gRG9i
ZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbV1BFXSBFeHBvc2UgdGhl
IFdlYktpdE9wdGlvbk1lbnUgQVBJcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjA2Mjg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTW92ZSBUZXN0T3B0aW9uTWVudSB1bmRlciB0aGUgV2ViS2l0R0xpYiBk
aXJlY3RvcnksIGFkZGluZyB0aGUKKyAgICAgICAgYXBwcm9wcmlhdGUgYWRqdXN0bWVudHMgZm9y
IHRoZSBXUEUgdmFyaWFudCBvZiB0aGUgQVBJCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdEdMaWIvVGVzdE9wdGlvbk1lbnUuY3BwOiBSZW5hbWVkIGZyb20gVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvVGVzdE9wdGlvbk1lbnUuY3BwLgorICAgICAgICAo
T3B0aW9uTWVudVRlc3Q6Ok9wdGlvbk1lbnVUZXN0KToKKyAgICAgICAgKE9wdGlvbk1lbnVUZXN0
Ojp+T3B0aW9uTWVudVRlc3QpOgorICAgICAgICAoT3B0aW9uTWVudVRlc3Q6OmRlc3Ryb3lNZW51
KToKKyAgICAgICAgKE9wdGlvbk1lbnVUZXN0OjpzaG93T3B0aW9uTWVudUNhbGxiYWNrKToKKyAg
ICAgICAgKE9wdGlvbk1lbnVUZXN0OjptZW51Q2xvc2VDYWxsYmFjayk6CisgICAgICAgIChPcHRp
b25NZW51VGVzdDo6c2hvd09wdGlvbk1lbnUpOgorICAgICAgICAoT3B0aW9uTWVudVRlc3Q6OmNs
aWNrQXRQb3NpdGlvbkFuZFdhaXRVbnRpbE9wdGlvbk1lbnVTaG93bik6CisgICAgICAgIChPcHRp
b25NZW51VGVzdDo6Y2xvc2UpOgorICAgICAgICAoT3B0aW9uTWVudVRlc3Q6OmFjdGl2YXRlSXRl
bSk6CisgICAgICAgIChPcHRpb25NZW51VGVzdDo6c2VsZWN0SXRlbSk6CisgICAgICAgICh0ZXN0
T3B0aW9uTWVudVNpbXBsZSk6CisgICAgICAgICh0ZXN0T3B0aW9uTWVudUdyb3Vwcyk6CisgICAg
ICAgICh0ZXN0T3B0aW9uTWVudUFjdGl2YXRlKToKKyAgICAgICAgKHRlc3RPcHRpb25NZW51U2Vs
ZWN0KToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRlckFsbCk6CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9nbGliL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvZ2xpYi9QbGF0Zm9ybUdUSy5jbWFrZToKKwogMjAyMC0wMS0xNiAgS2VpdGggTWlsbGVy
ICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZWxhbmQgYnl0ZWNvZGUgY2hl
Y2twb2ludHMgc2luY2UgYnVncyBoYXZlIGJlZW4gZml4ZWQKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0T3B0aW9uTWVudS5jcHAgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdE9wdGlvbk1lbnUuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjg1ZmU1ZWNiMjU5NGIwNGVlOTk0MTQzOTMwZTQ5YjhkYTViMzM0MmYKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdE9wdGlvbk1l
bnUuY3BwCkBAIC0wLDAgKzEsMzI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxp
YSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKKwor
I2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisKK2NsYXNzIE9wdGlvbk1lbnVUZXN0IDogcHVibGlj
IFdlYlZpZXdUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKE9wdGlv
bk1lbnVUZXN0KTsKKworICAgIE9wdGlvbk1lbnVUZXN0KCkKKyAgICB7CisgICAgICAgIGdfc2ln
bmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAic2hvdy1vcHRpb24tbWVudSIsIEdfQ0FMTEJBQ0soc2hv
d09wdGlvbk1lbnVDYWxsYmFjayksIHRoaXMpOworICAgIH0KKworICAgIH5PcHRpb25NZW51VGVz
dCgpCisgICAgeworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQo
bV93ZWJWaWV3LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKKyAgICAg
ICAgaWYgKG1fbWVudSkKKyAgICAgICAgICAgIGNsb3NlKCk7CisgICAgfQorCisgICAgdm9pZCBk
ZXN0cm95TWVudSgpCisgICAgeworICAgICAgICBpZiAoIW1fbWVudSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9t
ZW51LmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKKyAgICAg
ICAgbV9tZW51ID0gbnVsbHB0cjsKKyAgICB9CisKKyNpZiBQTEFURk9STShHVEspCisgICAgc3Rh
dGljIGdib29sZWFuIHNob3dPcHRpb25NZW51Q2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmll
dywgV2ViS2l0T3B0aW9uTWVudSogbWVudSwgR2RrRXZlbnQqIGV2ZW50LCBHZGtSZWN0YW5nbGUq
IHJlY3QsIE9wdGlvbk1lbnVUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnRfdHJ1
ZSh0ZXN0LT5tX3dlYlZpZXcgPT0gd2ViVmlldyk7CisgICAgICAgIGdfYXNzZXJ0X25vbm51bGwo
cmVjdCk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoV0VCS0lUX0lTX09QVElPTl9NRU5VKG1lbnUp
KTsKKyAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhH
X09CSkVDVChtZW51KSk7CisgICAgICAgIHRlc3QtPnNob3dPcHRpb25NZW51KG1lbnUsIHJlY3Qp
OworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisjZWxpZiBQTEFURk9STShXUEUpCisgICAg
c3RhdGljIGdib29sZWFuIHNob3dPcHRpb25NZW51Q2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2Vi
VmlldywgV2ViS2l0T3B0aW9uTWVudSogbWVudSwgT3B0aW9uTWVudVRlc3QqIHRlc3QpCisgICAg
eworICAgICAgICBnX2Fzc2VydF90cnVlKHRlc3QtPm1fd2ViVmlldyA9PSB3ZWJWaWV3KTsKKyAg
ICAgICAgZ19hc3NlcnRfdHJ1ZShXRUJLSVRfSVNfT1BUSU9OX01FTlUobWVudSkpOworICAgICAg
ICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKG1l
bnUpKTsKKyAgICAgICAgdGVzdC0+c2hvd09wdGlvbk1lbnUobWVudSk7CisgICAgICAgIHJldHVy
biBUUlVFOworICAgIH0KKyNlbmRpZgorCisgICAgc3RhdGljIHZvaWQgbWVudUNsb3NlQ2FsbGJh
Y2soV2ViS2l0T3B0aW9uTWVudSogbWVudSwgT3B0aW9uTWVudVRlc3QqIHRlc3QpCisgICAgewor
ICAgICAgICBnX2Fzc2VydF90cnVlKHRlc3QtPm1fbWVudS5nZXQoKSA9PSBtZW51KTsKKyAgICAg
ICAgdGVzdC0+ZGVzdHJveU1lbnUoKTsKKyAgICB9CisKKyNpZiBQTEFURk9STShHVEspCisgICAg
dm9pZCBzaG93T3B0aW9uTWVudShXZWJLaXRPcHRpb25NZW51KiBtZW51LCBHZGtSZWN0YW5nbGUq
IHJlY3QpCisgICAgeworICAgICAgICBtX3JlY3RhbmdsZSA9ICpyZWN0OworICAgICAgICBtX21l
bnUgPSBtZW51OworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fbWVudS5nZXQoKSwgImNsb3Nl
IiwgR19DQUxMQkFDSyhtZW51Q2xvc2VDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX21haW5f
bG9vcF9xdWl0KG1fbWFpbkxvb3ApOworICAgIH0KKyNlbGlmIFBMQVRGT1JNKFdQRSkKKyAgICB2
b2lkIHNob3dPcHRpb25NZW51KFdlYktpdE9wdGlvbk1lbnUqIG1lbnUpCisgICAgeworICAgICAg
ICBtX21lbnUgPSBtZW51OworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fbWVudS5nZXQoKSwg
ImNsb3NlIiwgR19DQUxMQkFDSyhtZW51Q2xvc2VDYWxsYmFjayksIHRoaXMpOworICAgICAgICBn
X21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOworICAgIH0KKyNlbmRpZgorCisgICAgdm9pZCBj
bGlja0F0UG9zaXRpb25BbmRXYWl0VW50aWxPcHRpb25NZW51U2hvd24oaW50IHgsIGludCB5KQor
ICAgIHsKKyAgICAgICAgbV9tZW51ID0gbnVsbHB0cjsKKyAgICAgICAgUnVuTG9vcDo6bWFpbigp
LmRpc3BhdGNoKFt0aGlzLCB4LCB5XSB7IGNsaWNrTW91c2VCdXR0b24oeCwgeSk7IH0pOworICAg
ICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgfQorCisgICAgdm9pZCBjbG9z
ZSgpCisgICAgeworICAgICAgICBnX2Fzc2VydF9ub25udWxsKG1fbWVudS5nZXQoKSk7CisgICAg
ICAgIHdlYmtpdF9vcHRpb25fbWVudV9jbG9zZShtX21lbnUuZ2V0KCkpOworICAgICAgICBnX2Fz
c2VydF9udWxsKG1fbWVudS5nZXQoKSk7CisgICAgfQorCisgICAgdm9pZCBhY3RpdmF0ZUl0ZW0o
dW5zaWduZWQgaXRlbSkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0X25vbm51bGwobV9tZW51Lmdl
dCgpKTsKKyAgICAgICAgd2Via2l0X29wdGlvbl9tZW51X2FjdGl2YXRlX2l0ZW0obV9tZW51Lmdl
dCgpLCBpdGVtKTsKKyAgICAgICAgZ19hc3NlcnRfbm9ubnVsbChtX21lbnUuZ2V0KCkpOworICAg
IH0KKworICAgIHZvaWQgc2VsZWN0SXRlbSh1bnNpZ25lZCBpdGVtKQorICAgIHsKKyAgICAgICAg
Z19hc3NlcnRfbm9ubnVsbChtX21lbnUuZ2V0KCkpOworICAgICAgICB3ZWJraXRfb3B0aW9uX21l
bnVfc2VsZWN0X2l0ZW0obV9tZW51LmdldCgpLCBpdGVtKTsKKyAgICAgICAgZ19hc3NlcnRfbm9u
bnVsbChtX21lbnUuZ2V0KCkpOworICAgIH0KKworICAgIEdSZWZQdHI8V2ViS2l0T3B0aW9uTWVu
dT4gbV9tZW51OworI2lmIFBMQVRGT1JNKEdUSykKKyAgICBHZGtSZWN0YW5nbGUgbV9yZWN0YW5n
bGU7CisjZW5kaWYKK307CisKK3N0YXRpYyB2b2lkIHRlc3RPcHRpb25NZW51U2ltcGxlKE9wdGlv
bk1lbnVUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFy
IGh0bWxbXSA9CisgICAgICAgICI8aHRtbD48Ym9keT4iCisgICAgICAgICIgIDxzZWxlY3Qgc3R5
bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDoxMCc+IgorICAgICAgICAiICAgIDxv
cHRpb24gdGl0bGU9J1RoZSBGb28gT3B0aW9uJz5Gb288L29wdGlvbj4iCisgICAgICAgICIgICAg
PG9wdGlvbiBzZWxlY3RlZD5CYXI8L29wdGlvbj4iCisgICAgICAgICIgICAgPG9wdGlvbiBkaXNh
YmxlZD5CYXo8L29wdGlvbj4iCisgICAgICAgICIgIDwvc2VsZWN0PjwvYm9keT48L2h0bWw+IjsK
KyAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKKyAgICB0ZXN0LT5s
b2FkSHRtbChodG1sLCBudWxscHRyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQo
KTsKKworICAgIHRlc3QtPmNsaWNrQXRQb3NpdGlvbkFuZFdhaXRVbnRpbE9wdGlvbk1lbnVTaG93
big1LCAxNSk7CisgICAgZ19hc3NlcnRfdHJ1ZShXRUJLSVRfSVNfT1BUSU9OX01FTlUodGVzdC0+
bV9tZW51LmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9vcHRpb25fbWVudV9n
ZXRfbl9pdGVtcyh0ZXN0LT5tX21lbnUuZ2V0KCkpLCA9PSwgMyk7CisgICAgYXV0byogaXRlbSA9
IHdlYmtpdF9vcHRpb25fbWVudV9nZXRfaXRlbSh0ZXN0LT5tX21lbnUuZ2V0KCksIDApOworICAg
IGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfbGFiZWwoaXRlbSks
ID09LCAiRm9vIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9vcHRpb25fbWVudV9pdGVt
X2dldF90b29sdGlwKGl0ZW0pLCA9PSwgIlRoZSBGb28gT3B0aW9uIik7CisgICAgZ19hc3NlcnRf
ZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfbGFiZWwoaXRlbSkpOworICAg
IGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2NoaWxkKGl0
ZW0pKTsKKyAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2VuYWJs
ZWQoaXRlbSkpOworICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lz
X3NlbGVjdGVkKGl0ZW0pKTsKKyAgICBpdGVtID0gd2Via2l0X29wdGlvbl9tZW51X2dldF9pdGVt
KHRlc3QtPm1fbWVudS5nZXQoKSwgMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9vcHRp
b25fbWVudV9pdGVtX2dldF9sYWJlbChpdGVtKSwgPT0sICJCYXIiKTsKKyAgICBnX2Fzc2VydF9u
dWxsKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF90b29sdGlwKGl0ZW0pKTsKKyAgICBnX2Fz
c2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9sYWJlbChpdGVtKSk7
CisgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfY2hp
bGQoaXRlbSkpOworICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNf
ZW5hYmxlZChpdGVtKSk7CisgICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRl
bV9pc19zZWxlY3RlZChpdGVtKSk7CisgICAgaXRlbSA9IHdlYmtpdF9vcHRpb25fbWVudV9nZXRf
aXRlbSh0ZXN0LT5tX21lbnUuZ2V0KCksIDIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRf
b3B0aW9uX21lbnVfaXRlbV9nZXRfbGFiZWwoaXRlbSksID09LCAiQmF6Iik7CisgICAgZ19hc3Nl
cnRfbnVsbCh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfdG9vbHRpcChpdGVtKSk7CisgICAg
Z19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfbGFiZWwoaXRl
bSkpOworICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3Vw
X2NoaWxkKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRl
bV9pc19lbmFibGVkKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21l
bnVfaXRlbV9pc19zZWxlY3RlZChpdGVtKSk7CisKKyAgICB0ZXN0LT5jbG9zZSgpOworICAgIGdf
YXNzZXJ0X251bGwodGVzdC0+bV9tZW51LmdldCgpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdE9w
dGlvbk1lbnVHcm91cHMoT3B0aW9uTWVudVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7Cisg
ICAgc3RhdGljIGNvbnN0IGNoYXIgaHRtbFtdID0KKyAgICAgICAgIjxodG1sPjxib2R5PiIKKyAg
ICAgICAgIiAgPHNlbGVjdCBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjEw
Jz4iCisgICAgICAgICIgICAgPG9wdGlvbj5Sb290PC9vcHRpb24+IgorICAgICAgICAiICAgIDxv
cHRncm91cCBsYWJlbD0nR3JvdXAgMSc+IgorICAgICAgICAiICAgICAgPG9wdGlvbj5DaGlsZCAx
LTE8L29wdGlvbj4iCisgICAgICAgICIgICAgICA8b3B0aW9uIGRpc2FibGVkPkNoaWxkIDEtMjwv
b3B0aW9uPiIKKyAgICAgICAgIiAgICA8L29wdGdyb3VwPiIKKyAgICAgICAgIiAgICA8b3B0Z3Jv
dXAgbGFiZWw9J0dyb3VwIDInPiIKKyAgICAgICAgIiAgICAgIDxvcHRpb24gc2VsZWN0ZWQ+Q2hp
bGQgMi0xPC9vcHRpb24+IgorICAgICAgICAiICAgICAgPG9wdGlvbj5DaGlsZCAyLTI8L29wdGlv
bj4iCisgICAgICAgICIgICAgPC9vcHRncm91cD4iCisgICAgICAgICIgICAgPG9wdGlvbj5UYWls
PC9vcHRpb24+IgorICAgICAgICAiICA8L3NlbGVjdD48L2JvZHk+PC9odG1sPiI7CisgICAgdGVz
dC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7CisgICAgdGVzdC0+bG9hZEh0bWwo
aHRtbCwgbnVsbHB0cik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAg
ICB0ZXN0LT5jbGlja0F0UG9zaXRpb25BbmRXYWl0VW50aWxPcHRpb25NZW51U2hvd24oNSwgMTUp
OworICAgIGdfYXNzZXJ0X3RydWUoV0VCS0lUX0lTX09QVElPTl9NRU5VKHRlc3QtPm1fbWVudS5n
ZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X25faXRl
bXModGVzdC0+bV9tZW51LmdldCgpKSwgPT0sIDgpOworICAgIGF1dG8qIGl0ZW0gPSB3ZWJraXRf
b3B0aW9uX21lbnVfZ2V0X2l0ZW0odGVzdC0+bV9tZW51LmdldCgpLCAwKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X2xhYmVsKGl0ZW0pLCA9PSwgIlJv
b3QiKTsKKyAgICBnX2Fzc2VydF9udWxsKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF90b29s
dGlwKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9p
c19ncm91cF9sYWJlbChpdGVtKSk7CisgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9t
ZW51X2l0ZW1faXNfZ3JvdXBfY2hpbGQoaXRlbSkpOworICAgIGdfYXNzZXJ0X3RydWUod2Via2l0
X29wdGlvbl9tZW51X2l0ZW1faXNfZW5hYmxlZChpdGVtKSk7CisgICAgZ19hc3NlcnRfZmFsc2Uo
d2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfc2VsZWN0ZWQoaXRlbSkpOworICAgIGl0ZW0gPSB3
ZWJraXRfb3B0aW9uX21lbnVfZ2V0X2l0ZW0odGVzdC0+bV9tZW51LmdldCgpLCAxKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X2xhYmVsKGl0ZW0pLCA9
PSwgIkdyb3VwIDEiKTsKKyAgICBnX2Fzc2VydF9udWxsKHdlYmtpdF9vcHRpb25fbWVudV9pdGVt
X2dldF90b29sdGlwKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF9vcHRpb25fbWVu
dV9pdGVtX2lzX2dyb3VwX2xhYmVsKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRf
b3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9jaGlsZChpdGVtKSk7CisgICAgZ19hc3NlcnRfZmFs
c2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZW5hYmxlZChpdGVtKSk7CisgICAgZ19hc3Nl
cnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfc2VsZWN0ZWQoaXRlbSkpOworICAg
IGl0ZW0gPSB3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X2l0ZW0odGVzdC0+bV9tZW51LmdldCgpLCAy
KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X2xhYmVs
KGl0ZW0pLCA9PSwgIkNoaWxkIDEtMSIpOworICAgIGdfYXNzZXJ0X251bGwod2Via2l0X29wdGlv
bl9tZW51X2l0ZW1fZ2V0X3Rvb2x0aXAoaXRlbSkpOworICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtp
dF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2xhYmVsKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF90
cnVlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2NoaWxkKGl0ZW0pKTsKKyAgICBn
X2Fzc2VydF90cnVlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2VuYWJsZWQoaXRlbSkpOwor
ICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX3NlbGVjdGVkKGl0
ZW0pKTsKKyAgICBpdGVtID0gd2Via2l0X29wdGlvbl9tZW51X2dldF9pdGVtKHRlc3QtPm1fbWVu
dS5nZXQoKSwgMyk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9vcHRpb25fbWVudV9pdGVt
X2dldF9sYWJlbChpdGVtKSwgPT0sICJDaGlsZCAxLTIiKTsKKyAgICBnX2Fzc2VydF9udWxsKHdl
YmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF90b29sdGlwKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF9m
YWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9sYWJlbChpdGVtKSk7CisgICAg
Z19hc3NlcnRfdHJ1ZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9jaGlsZChpdGVt
KSk7CisgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZW5hYmxl
ZChpdGVtKSk7CisgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNf
c2VsZWN0ZWQoaXRlbSkpOworICAgIGl0ZW0gPSB3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X2l0ZW0o
dGVzdC0+bV9tZW51LmdldCgpLCA0KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X29wdGlv
bl9tZW51X2l0ZW1fZ2V0X2xhYmVsKGl0ZW0pLCA9PSwgIkdyb3VwIDIiKTsKKyAgICBnX2Fzc2Vy
dF9udWxsKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF90b29sdGlwKGl0ZW0pKTsKKyAgICBn
X2Fzc2VydF90cnVlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2xhYmVsKGl0ZW0p
KTsKKyAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9j
aGlsZChpdGVtKSk7CisgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1f
aXNfZW5hYmxlZChpdGVtKSk7CisgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51
X2l0ZW1faXNfc2VsZWN0ZWQoaXRlbSkpOworICAgIGl0ZW0gPSB3ZWJraXRfb3B0aW9uX21lbnVf
Z2V0X2l0ZW0odGVzdC0+bV9tZW51LmdldCgpLCA1KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X2xhYmVsKGl0ZW0pLCA9PSwgIkNoaWxkIDItMSIpOwor
ICAgIGdfYXNzZXJ0X251bGwod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X3Rvb2x0aXAoaXRl
bSkpOworICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3Vw
X2xhYmVsKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVt
X2lzX2dyb3VwX2NoaWxkKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF9vcHRpb25f
bWVudV9pdGVtX2lzX2VuYWJsZWQoaXRlbSkpOworICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X29w
dGlvbl9tZW51X2l0ZW1faXNfc2VsZWN0ZWQoaXRlbSkpOworICAgIGl0ZW0gPSB3ZWJraXRfb3B0
aW9uX21lbnVfZ2V0X2l0ZW0odGVzdC0+bV9tZW51LmdldCgpLCA2KTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X2xhYmVsKGl0ZW0pLCA9PSwgIkNoaWxk
IDItMiIpOworICAgIGdfYXNzZXJ0X251bGwod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X3Rv
b2x0aXAoaXRlbSkpOworICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVt
X2lzX2dyb3VwX2xhYmVsKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF9vcHRpb25f
bWVudV9pdGVtX2lzX2dyb3VwX2NoaWxkKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF90cnVlKHdlYmtp
dF9vcHRpb25fbWVudV9pdGVtX2lzX2VuYWJsZWQoaXRlbSkpOworICAgIGdfYXNzZXJ0X2ZhbHNl
KHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX3NlbGVjdGVkKGl0ZW0pKTsKKyAgICBpdGVtID0g
d2Via2l0X29wdGlvbl9tZW51X2dldF9pdGVtKHRlc3QtPm1fbWVudS5nZXQoKSwgNyk7CisgICAg
Z19hc3NlcnRfY21wc3RyKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF9sYWJlbChpdGVtKSwg
PT0sICJUYWlsIik7CisgICAgZ19hc3NlcnRfbnVsbCh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9n
ZXRfdG9vbHRpcChpdGVtKSk7CisgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51
X2l0ZW1faXNfZ3JvdXBfbGFiZWwoaXRlbSkpOworICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9v
cHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2NoaWxkKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF90cnVl
KHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2VuYWJsZWQoaXRlbSkpOworICAgIGdfYXNzZXJ0
X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX3NlbGVjdGVkKGl0ZW0pKTsKK30KKwor
c3RhdGljIHZvaWQgdGVzdE9wdGlvbk1lbnVBY3RpdmF0ZShPcHRpb25NZW51VGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciBodG1sW10gPQorICAgICAg
ICAiPGh0bWw+PGJvZHk+IgorICAgICAgICAiICA8c2VsZWN0IGlkPSdjb21ibycgc3R5bGU9J3Bv
c2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDoxMCc+IgorICAgICAgICAiICAgIDxvcHRpb24+
Rm9vPC9vcHRpb24+IgorICAgICAgICAiICAgIDxvcHRpb24+QmFyPC9vcHRpb24+IgorICAgICAg
ICAiICAgIDxvcHRpb24+QmF6PC9vcHRpb24+IgorICAgICAgICAiICA8L3NlbGVjdD48L2JvZHk+
PC9odG1sPiI7CisgICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7Cisg
ICAgdGVzdC0+bG9hZEh0bWwoaHRtbCwgbnVsbHB0cik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5jbGlja0F0UG9zaXRpb25BbmRXYWl0VW50aWxPcHRp
b25NZW51U2hvd24oNSwgMTUpOworICAgIGdfYXNzZXJ0X3RydWUoV0VCS0lUX0lTX09QVElPTl9N
RU5VKHRlc3QtPm1fbWVudS5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfb3B0
aW9uX21lbnVfZ2V0X25faXRlbXModGVzdC0+bV9tZW51LmdldCgpKSwgPT0sIDMpOworICAgIHRl
c3QtPmFjdGl2YXRlSXRlbSgxKTsKKyAgICBhdXRvKiByZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2Ny
aXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb21ibycp
LnNlbGVjdGVkSW5kZXgiLCBudWxscHRyKTsKKyAgICBnX2Fzc2VydF9ub25udWxsKHJlc3VsdCk7
CisgICAgZ19hc3NlcnRfY21wZmxvYXQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb051
bWJlcihyZXN1bHQpLCA9PSwgMSk7CisKKyAgICAvLyBXZSBzaG91bGQgY2xvc2UgdGhlIG1lbnUg
YWZ0ZXIgYWN0aXZhdGUsIGZ1cnRoZXIgYWN0aXZhdGVzIHdpbGwgYmUgaWdub3JlZC4KKyAgICB0
ZXN0LT5hY3RpdmF0ZUl0ZW0oMik7CisgICAgcmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFu
ZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29tYm8nKS5zZWxl
Y3RlZEluZGV4IiwgbnVsbHB0cik7CisgICAgZ19hc3NlcnRfbm9ubnVsbChyZXN1bHQpOworICAg
IGdfYXNzZXJ0X2NtcGZsb2F0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9OdW1iZXIo
cmVzdWx0KSwgPT0sIDEpOworCisgICAgdGVzdC0+Y2xvc2UoKTsKK30KKworc3RhdGljIHZvaWQg
dGVzdE9wdGlvbk1lbnVTZWxlY3QoT3B0aW9uTWVudVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
Cit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgaHRtbFtdID0KKyAgICAgICAgIjxodG1sPjxib2R5
PiIKKyAgICAgICAgIiAgPHNlbGVjdCBpZD0nY29tYm8nIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0
ZTsgbGVmdDoxOyB0b3A6MTAnPiIKKyAgICAgICAgIiAgICA8b3B0aW9uPkZvbzwvb3B0aW9uPiIK
KyAgICAgICAgIiAgICA8b3B0aW9uPkJhcjwvb3B0aW9uPiIKKyAgICAgICAgIiAgICA8b3B0aW9u
PkJhejwvb3B0aW9uPiIKKyAgICAgICAgIiAgPC9zZWxlY3Q+PC9ib2R5PjwvaHRtbD4iOworICAg
IHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOworICAgIHRlc3QtPmxvYWRI
dG1sKGh0bWwsIG51bGxwdHIpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwor
CisgICAgdGVzdC0+Y2xpY2tBdFBvc2l0aW9uQW5kV2FpdFVudGlsT3B0aW9uTWVudVNob3duKDUs
IDE1KTsKKyAgICBnX2Fzc2VydF90cnVlKFdFQktJVF9JU19PUFRJT05fTUVOVSh0ZXN0LT5tX21l
bnUuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X29wdGlvbl9tZW51X2dldF9u
X2l0ZW1zKHRlc3QtPm1fbWVudS5nZXQoKSksID09LCAzKTsKKworICAgIC8vIFNlbGVjdCBpdGVt
IGNoYW5nZXMgdGhlIGNvbWJvIHRleHQsIGJ1dCBub3QgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBp
dGVtLgorICAgIHRlc3QtPnNlbGVjdEl0ZW0oMik7CisgICAgYXV0byogcmVzdWx0ID0gdGVzdC0+
cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnY29tYm8nKS5zZWxlY3RlZEluZGV4IiwgbnVsbHB0cik7CisgICAgZ19hc3NlcnRfbm9ubnVs
bChyZXN1bHQpOworICAgIGdfYXNzZXJ0X2NtcGZsb2F0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0
UmVzdWx0VG9OdW1iZXIocmVzdWx0KSwgPT0sIDApOworCisgICAgLy8gSXQgY2FuIGJlIGNhbGxl
ZCBtdWx0aXBsZSB0aW1lcy4KKyAgICB0ZXN0LT5zZWxlY3RJdGVtKDEpOworICAgIHJlc3VsdCA9
IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ2NvbWJvJykuc2VsZWN0ZWRJbmRleCIsIG51bGxwdHIpOworICAgIGdfYXNzZXJ0
X25vbm51bGwocmVzdWx0KTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdChXZWJWaWV3VGVzdDo6amF2
YXNjcmlwdFJlc3VsdFRvTnVtYmVyKHJlc3VsdCksID09LCAwKTsKKworICAgIC8vIEFuZCBjbG9z
aW5nIHRoZSBtZW51IGFjdGl2YXRlcyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW0uCisgICAg
dGVzdC0+Y2xvc2UoKTsKKyAgICByZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVu
dGlsRmluaXNoZWQoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb21ibycpLnNlbGVjdGVkSW5k
ZXgiLCBudWxscHRyKTsKKyAgICBnX2Fzc2VydF9ub25udWxsKHJlc3VsdCk7CisgICAgZ19hc3Nl
cnRfY21wZmxvYXQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb051bWJlcihyZXN1bHQp
LCA9PSwgMSk7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICBPcHRpb25NZW51VGVzdDo6
YWRkKCJXZWJLaXRXZWJWaWV3IiwgIm9wdGlvbi1tZW51LXNpbXBsZSIsIHRlc3RPcHRpb25NZW51
U2ltcGxlKTsKKyAgICBPcHRpb25NZW51VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgIm9wdGlv
bi1tZW51LWdyb3VwcyIsIHRlc3RPcHRpb25NZW51R3JvdXBzKTsKKyAgICBPcHRpb25NZW51VGVz
dDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgIm9wdGlvbi1tZW51LWFjdGl2YXRlIiwgdGVzdE9wdGlv
bk1lbnVBY3RpdmF0ZSk7CisgICAgT3B0aW9uTWVudVRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIs
ICJvcHRpb24tbWVudS1zZWxlY3QiLCB0ZXN0T3B0aW9uTWVudVNlbGVjdCk7Cit9CisKK3ZvaWQg
YWZ0ZXJBbGwoKQoreworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRHdGsvVGVzdE9wdGlvbk1lbnUuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRHdGsvVGVzdE9wdGlvbk1lbnUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA1N2MxYzlkMzI3OTM4MTdlYjM0NjRlYWIyOTdjMmU0NTg5M2M4ZWYxLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0R3RrL1Rlc3RPcHRpb25NZW51LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMwNSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKLQotI2luY2x1ZGUgPHd0Zi9SdW5M
b29wLmg+Ci0KLWNsYXNzIE9wdGlvbk1lbnVUZXN0IDogcHVibGljIFdlYlZpZXdUZXN0IHsKLXB1
YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKE9wdGlvbk1lbnVUZXN0KTsKLQotICAg
IE9wdGlvbk1lbnVUZXN0KCkKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJW
aWV3LCAic2hvdy1vcHRpb24tbWVudSIsIEdfQ0FMTEJBQ0soc2hvd09wdGlvbk1lbnVDYWxsYmFj
ayksIHRoaXMpOwotICAgIH0KLQotICAgIH5PcHRpb25NZW51VGVzdCgpCi0gICAgewotICAgICAg
ICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV93ZWJWaWV3LCBHX1NJR05B
TF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKLSAgICAgICAgaWYgKG1fbWVudSkKLSAg
ICAgICAgICAgIGNsb3NlKCk7Ci0gICAgfQotCi0gICAgdm9pZCBkZXN0cm95TWVudSgpCi0gICAg
ewotICAgICAgICBpZiAoIW1fbWVudSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBn
X3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9tZW51LmdldCgpLCBHX1NJR05B
TF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKLSAgICAgICAgbV9tZW51ID0gbnVsbHB0
cjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gc2hvd09wdGlvbk1lbnVDYWxsYmFjayhX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRPcHRpb25NZW51KiBtZW51LCBHZGtFdmVudCog
ZXZlbnQsIEdka1JlY3RhbmdsZSogcmVjdCwgT3B0aW9uTWVudVRlc3QqIHRlc3QpCi0gICAgewot
ICAgICAgICBnX2Fzc2VydF90cnVlKHRlc3QtPm1fd2ViVmlldyA9PSB3ZWJWaWV3KTsKLSAgICAg
ICAgZ19hc3NlcnRfbm9ubnVsbChyZWN0KTsKLSAgICAgICAgZ19hc3NlcnRfdHJ1ZShXRUJLSVRf
SVNfT1BUSU9OX01FTlUobWVudSkpOwotICAgICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0
ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKG1lbnUpKTsKLSAgICAgICAgdGVzdC0+c2hvd09w
dGlvbk1lbnUobWVudSwgcmVjdCk7Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotICAg
IHN0YXRpYyB2b2lkIG1lbnVDbG9zZUNhbGxiYWNrKFdlYktpdE9wdGlvbk1lbnUqIG1lbnUsIE9w
dGlvbk1lbnVUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgZ19hc3NlcnRfdHJ1ZSh0ZXN0LT5t
X21lbnUuZ2V0KCkgPT0gbWVudSk7Ci0gICAgICAgIHRlc3QtPmRlc3Ryb3lNZW51KCk7Ci0gICAg
fQotCi0gICAgdm9pZCBzaG93T3B0aW9uTWVudShXZWJLaXRPcHRpb25NZW51KiBtZW51LCBHZGtS
ZWN0YW5nbGUqIHJlY3QpCi0gICAgewotICAgICAgICBtX3JlY3RhbmdsZSA9ICpyZWN0OwotICAg
ICAgICBtX21lbnUgPSBtZW51OwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fbWVudS5nZXQo
KSwgImNsb3NlIiwgR19DQUxMQkFDSyhtZW51Q2xvc2VDYWxsYmFjayksIHRoaXMpOwotICAgICAg
ICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIHZvaWQgY2xpY2tB
dFBvc2l0aW9uQW5kV2FpdFVudGlsT3B0aW9uTWVudVNob3duKGludCB4LCBpbnQgeSkKLSAgICB7
Ci0gICAgICAgIG1fbWVudSA9IG51bGxwdHI7Ci0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNw
YXRjaChbdGhpcywgeCwgeV0geyBjbGlja01vdXNlQnV0dG9uKHgsIHkpOyB9KTsKLSAgICAgICAg
Z19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIHZvaWQgY2xvc2UoKQot
ICAgIHsKLSAgICAgICAgZ19hc3NlcnRfbm9ubnVsbChtX21lbnUuZ2V0KCkpOwotICAgICAgICB3
ZWJraXRfb3B0aW9uX21lbnVfY2xvc2UobV9tZW51LmdldCgpKTsKLSAgICAgICAgZ19hc3NlcnRf
bnVsbChtX21lbnUuZ2V0KCkpOwotICAgIH0KLQotICAgIHZvaWQgYWN0aXZhdGVJdGVtKHVuc2ln
bmVkIGl0ZW0pCi0gICAgewotICAgICAgICBnX2Fzc2VydF9ub25udWxsKG1fbWVudS5nZXQoKSk7
Ci0gICAgICAgIHdlYmtpdF9vcHRpb25fbWVudV9hY3RpdmF0ZV9pdGVtKG1fbWVudS5nZXQoKSwg
aXRlbSk7Ci0gICAgICAgIGdfYXNzZXJ0X25vbm51bGwobV9tZW51LmdldCgpKTsKLSAgICB9Ci0K
LSAgICB2b2lkIHNlbGVjdEl0ZW0odW5zaWduZWQgaXRlbSkKLSAgICB7Ci0gICAgICAgIGdfYXNz
ZXJ0X25vbm51bGwobV9tZW51LmdldCgpKTsKLSAgICAgICAgd2Via2l0X29wdGlvbl9tZW51X3Nl
bGVjdF9pdGVtKG1fbWVudS5nZXQoKSwgaXRlbSk7Ci0gICAgICAgIGdfYXNzZXJ0X25vbm51bGwo
bV9tZW51LmdldCgpKTsKLSAgICB9Ci0KLSAgICBHUmVmUHRyPFdlYktpdE9wdGlvbk1lbnU+IG1f
bWVudTsKLSAgICBHZGtSZWN0YW5nbGUgbV9yZWN0YW5nbGU7Ci19OwotCi1zdGF0aWMgdm9pZCB0
ZXN0T3B0aW9uTWVudVNpbXBsZShPcHRpb25NZW51VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikK
LXsKLSAgICBzdGF0aWMgY29uc3QgY2hhciBodG1sW10gPQotICAgICAgICAiPGh0bWw+PGJvZHk+
IgotICAgICAgICAiICA8c2VsZWN0IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0
b3A6MTAnPiIKLSAgICAgICAgIiAgICA8b3B0aW9uIHRpdGxlPSdUaGUgRm9vIE9wdGlvbic+Rm9v
PC9vcHRpb24+IgotICAgICAgICAiICAgIDxvcHRpb24gc2VsZWN0ZWQ+QmFyPC9vcHRpb24+Igot
ICAgICAgICAiICAgIDxvcHRpb24gZGlzYWJsZWQ+QmF6PC9vcHRpb24+IgotICAgICAgICAiICA8
L3NlbGVjdD48L2JvZHk+PC9odG1sPiI7Ci0gICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVu
dGlsTWFwcGVkKCk7Ci0gICAgdGVzdC0+bG9hZEh0bWwoaHRtbCwgbnVsbHB0cik7Ci0gICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICB0ZXN0LT5jbGlja0F0UG9zaXRpb25B
bmRXYWl0VW50aWxPcHRpb25NZW51U2hvd24oNSwgMTUpOwotICAgIGdfYXNzZXJ0X3RydWUoV0VC
S0lUX0lTX09QVElPTl9NRU5VKHRlc3QtPm1fbWVudS5nZXQoKSkpOwotICAgIGdfYXNzZXJ0X2Nt
cGludCh3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X25faXRlbXModGVzdC0+bV9tZW51LmdldCgpKSwg
PT0sIDMpOwotICAgIGF1dG8qIGl0ZW0gPSB3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X2l0ZW0odGVz
dC0+bV9tZW51LmdldCgpLCAwKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X29wdGlvbl9t
ZW51X2l0ZW1fZ2V0X2xhYmVsKGl0ZW0pLCA9PSwgIkZvbyIpOwotICAgIGdfYXNzZXJ0X2NtcHN0
cih3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfdG9vbHRpcChpdGVtKSwgPT0sICJUaGUgRm9v
IE9wdGlvbiIpOwotICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lz
X2dyb3VwX2xhYmVsKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21l
bnVfaXRlbV9pc19ncm91cF9jaGlsZChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRf
b3B0aW9uX21lbnVfaXRlbV9pc19lbmFibGVkKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF9mYWxzZSh3
ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19zZWxlY3RlZChpdGVtKSk7Ci0gICAgaXRlbSA9IHdl
YmtpdF9vcHRpb25fbWVudV9nZXRfaXRlbSh0ZXN0LT5tX21lbnUuZ2V0KCksIDEpOwotICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfbGFiZWwoaXRlbSksID09
LCAiQmFyIik7Ci0gICAgZ19hc3NlcnRfbnVsbCh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRf
dG9vbHRpcChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0
ZW1faXNfZ3JvdXBfbGFiZWwoaXRlbSkpOwotICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRp
b25fbWVudV9pdGVtX2lzX2dyb3VwX2NoaWxkKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF90cnVlKHdl
YmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2VuYWJsZWQoaXRlbSkpOwotICAgIGdfYXNzZXJ0X3Ry
dWUod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfc2VsZWN0ZWQoaXRlbSkpOwotICAgIGl0ZW0g
PSB3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X2l0ZW0odGVzdC0+bV9tZW51LmdldCgpLCAyKTsKLSAg
ICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X2xhYmVsKGl0ZW0p
LCA9PSwgIkJheiIpOwotICAgIGdfYXNzZXJ0X251bGwod2Via2l0X29wdGlvbl9tZW51X2l0ZW1f
Z2V0X3Rvb2x0aXAoaXRlbSkpOwotICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVu
dV9pdGVtX2lzX2dyb3VwX2xhYmVsKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRf
b3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9jaGlsZChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfZmFs
c2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZW5hYmxlZChpdGVtKSk7Ci0gICAgZ19hc3Nl
cnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfc2VsZWN0ZWQoaXRlbSkpOwotCi0g
ICAgdGVzdC0+Y2xvc2UoKTsKLSAgICBnX2Fzc2VydF9udWxsKHRlc3QtPm1fbWVudS5nZXQoKSk7
Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RPcHRpb25NZW51R3JvdXBzKE9wdGlvbk1lbnVUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHN0YXRpYyBjb25zdCBjaGFyIGh0bWxbXSA9Ci0g
ICAgICAgICI8aHRtbD48Ym9keT4iCi0gICAgICAgICIgIDxzZWxlY3Qgc3R5bGU9J3Bvc2l0aW9u
OmFic29sdXRlOyBsZWZ0OjE7IHRvcDoxMCc+IgotICAgICAgICAiICAgIDxvcHRpb24+Um9vdDwv
b3B0aW9uPiIKLSAgICAgICAgIiAgICA8b3B0Z3JvdXAgbGFiZWw9J0dyb3VwIDEnPiIKLSAgICAg
ICAgIiAgICAgIDxvcHRpb24+Q2hpbGQgMS0xPC9vcHRpb24+IgotICAgICAgICAiICAgICAgPG9w
dGlvbiBkaXNhYmxlZD5DaGlsZCAxLTI8L29wdGlvbj4iCi0gICAgICAgICIgICAgPC9vcHRncm91
cD4iCi0gICAgICAgICIgICAgPG9wdGdyb3VwIGxhYmVsPSdHcm91cCAyJz4iCi0gICAgICAgICIg
ICAgICA8b3B0aW9uIHNlbGVjdGVkPkNoaWxkIDItMTwvb3B0aW9uPiIKLSAgICAgICAgIiAgICAg
IDxvcHRpb24+Q2hpbGQgMi0yPC9vcHRpb24+IgotICAgICAgICAiICAgIDwvb3B0Z3JvdXA+Igot
ICAgICAgICAiICAgIDxvcHRpb24+VGFpbDwvb3B0aW9uPiIKLSAgICAgICAgIiAgPC9zZWxlY3Q+
PC9ib2R5PjwvaHRtbD4iOwotICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBl
ZCgpOwotICAgIHRlc3QtPmxvYWRIdG1sKGh0bWwsIG51bGxwdHIpOwotICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgdGVzdC0+Y2xpY2tBdFBvc2l0aW9uQW5kV2FpdFVu
dGlsT3B0aW9uTWVudVNob3duKDUsIDE1KTsKLSAgICBnX2Fzc2VydF90cnVlKFdFQktJVF9JU19P
UFRJT05fTUVOVSh0ZXN0LT5tX21lbnUuZ2V0KCkpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Vi
a2l0X29wdGlvbl9tZW51X2dldF9uX2l0ZW1zKHRlc3QtPm1fbWVudS5nZXQoKSksID09LCA4KTsK
LSAgICBhdXRvKiBpdGVtID0gd2Via2l0X29wdGlvbl9tZW51X2dldF9pdGVtKHRlc3QtPm1fbWVu
dS5nZXQoKSwgMCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9vcHRpb25fbWVudV9pdGVt
X2dldF9sYWJlbChpdGVtKSwgPT0sICJSb290Iik7Ci0gICAgZ19hc3NlcnRfbnVsbCh3ZWJraXRf
b3B0aW9uX21lbnVfaXRlbV9nZXRfdG9vbHRpcChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfZmFsc2Uo
d2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfbGFiZWwoaXRlbSkpOwotICAgIGdfYXNz
ZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2NoaWxkKGl0ZW0pKTsK
LSAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2VuYWJsZWQoaXRl
bSkpOwotICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX3NlbGVj
dGVkKGl0ZW0pKTsKLSAgICBpdGVtID0gd2Via2l0X29wdGlvbl9tZW51X2dldF9pdGVtKHRlc3Qt
Pm1fbWVudS5nZXQoKSwgMSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9vcHRpb25fbWVu
dV9pdGVtX2dldF9sYWJlbChpdGVtKSwgPT0sICJHcm91cCAxIik7Ci0gICAgZ19hc3NlcnRfbnVs
bCh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfdG9vbHRpcChpdGVtKSk7Ci0gICAgZ19hc3Nl
cnRfdHJ1ZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9sYWJlbChpdGVtKSk7Ci0g
ICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfY2hpbGQo
aXRlbSkpOwotICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2Vu
YWJsZWQoaXRlbSkpOwotICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVt
X2lzX3NlbGVjdGVkKGl0ZW0pKTsKLSAgICBpdGVtID0gd2Via2l0X29wdGlvbl9tZW51X2dldF9p
dGVtKHRlc3QtPm1fbWVudS5nZXQoKSwgMik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9v
cHRpb25fbWVudV9pdGVtX2dldF9sYWJlbChpdGVtKSwgPT0sICJDaGlsZCAxLTEiKTsKLSAgICBn
X2Fzc2VydF9udWxsKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF90b29sdGlwKGl0ZW0pKTsK
LSAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9sYWJl
bChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19n
cm91cF9jaGlsZChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfb3B0aW9uX21lbnVf
aXRlbV9pc19lbmFibGVkKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9u
X21lbnVfaXRlbV9pc19zZWxlY3RlZChpdGVtKSk7Ci0gICAgaXRlbSA9IHdlYmtpdF9vcHRpb25f
bWVudV9nZXRfaXRlbSh0ZXN0LT5tX21lbnUuZ2V0KCksIDMpOwotICAgIGdfYXNzZXJ0X2NtcHN0
cih3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfbGFiZWwoaXRlbSksID09LCAiQ2hpbGQgMS0y
Iik7Ci0gICAgZ19hc3NlcnRfbnVsbCh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfdG9vbHRp
cChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNf
Z3JvdXBfbGFiZWwoaXRlbSkpOwotICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X29wdGlvbl9tZW51
X2l0ZW1faXNfZ3JvdXBfY2hpbGQoaXRlbSkpOwotICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9v
cHRpb25fbWVudV9pdGVtX2lzX2VuYWJsZWQoaXRlbSkpOwotICAgIGdfYXNzZXJ0X2ZhbHNlKHdl
YmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX3NlbGVjdGVkKGl0ZW0pKTsKLSAgICBpdGVtID0gd2Vi
a2l0X29wdGlvbl9tZW51X2dldF9pdGVtKHRlc3QtPm1fbWVudS5nZXQoKSwgNCk7Ci0gICAgZ19h
c3NlcnRfY21wc3RyKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF9sYWJlbChpdGVtKSwgPT0s
ICJHcm91cCAyIik7Ci0gICAgZ19hc3NlcnRfbnVsbCh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9n
ZXRfdG9vbHRpcChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfb3B0aW9uX21lbnVf
aXRlbV9pc19ncm91cF9sYWJlbChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29w
dGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfY2hpbGQoaXRlbSkpOwotICAgIGdfYXNzZXJ0X2ZhbHNl
KHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2VuYWJsZWQoaXRlbSkpOwotICAgIGdfYXNzZXJ0
X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX3NlbGVjdGVkKGl0ZW0pKTsKLSAgICBp
dGVtID0gd2Via2l0X29wdGlvbl9tZW51X2dldF9pdGVtKHRlc3QtPm1fbWVudS5nZXQoKSwgNSk7
Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF9sYWJlbChp
dGVtKSwgPT0sICJDaGlsZCAyLTEiKTsKLSAgICBnX2Fzc2VydF9udWxsKHdlYmtpdF9vcHRpb25f
bWVudV9pdGVtX2dldF90b29sdGlwKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRf
b3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9sYWJlbChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfdHJ1
ZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9jaGlsZChpdGVtKSk7Ci0gICAgZ19h
c3NlcnRfdHJ1ZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19lbmFibGVkKGl0ZW0pKTsKLSAg
ICBnX2Fzc2VydF90cnVlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX3NlbGVjdGVkKGl0ZW0p
KTsKLSAgICBpdGVtID0gd2Via2l0X29wdGlvbl9tZW51X2dldF9pdGVtKHRlc3QtPm1fbWVudS5n
ZXQoKSwgNik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dl
dF9sYWJlbChpdGVtKSwgPT0sICJDaGlsZCAyLTIiKTsKLSAgICBnX2Fzc2VydF9udWxsKHdlYmtp
dF9vcHRpb25fbWVudV9pdGVtX2dldF90b29sdGlwKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF9mYWxz
ZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9sYWJlbChpdGVtKSk7Ci0gICAgZ19h
c3NlcnRfdHJ1ZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9jaGlsZChpdGVtKSk7
Ci0gICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19lbmFibGVkKGl0
ZW0pKTsKLSAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19zZWxl
Y3RlZChpdGVtKSk7Ci0gICAgaXRlbSA9IHdlYmtpdF9vcHRpb25fbWVudV9nZXRfaXRlbSh0ZXN0
LT5tX21lbnUuZ2V0KCksIDcpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfb3B0aW9uX21l
bnVfaXRlbV9nZXRfbGFiZWwoaXRlbSksID09LCAiVGFpbCIpOwotICAgIGdfYXNzZXJ0X251bGwo
d2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X3Rvb2x0aXAoaXRlbSkpOwotICAgIGdfYXNzZXJ0
X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2xhYmVsKGl0ZW0pKTsKLSAg
ICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9jaGlsZChp
dGVtKSk7Ci0gICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19lbmFi
bGVkKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9p
c19zZWxlY3RlZChpdGVtKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RPcHRpb25NZW51QWN0aXZh
dGUoT3B0aW9uTWVudVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgc3RhdGljIGNv
bnN0IGNoYXIgaHRtbFtdID0KLSAgICAgICAgIjxodG1sPjxib2R5PiIKLSAgICAgICAgIiAgPHNl
bGVjdCBpZD0nY29tYm8nIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MTAn
PiIKLSAgICAgICAgIiAgICA8b3B0aW9uPkZvbzwvb3B0aW9uPiIKLSAgICAgICAgIiAgICA8b3B0
aW9uPkJhcjwvb3B0aW9uPiIKLSAgICAgICAgIiAgICA8b3B0aW9uPkJhejwvb3B0aW9uPiIKLSAg
ICAgICAgIiAgPC9zZWxlY3Q+PC9ib2R5PjwvaHRtbD4iOwotICAgIHRlc3QtPnNob3dJbldpbmRv
d0FuZFdhaXRVbnRpbE1hcHBlZCgpOwotICAgIHRlc3QtPmxvYWRIdG1sKGh0bWwsIG51bGxwdHIp
OwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgdGVzdC0+Y2xpY2tB
dFBvc2l0aW9uQW5kV2FpdFVudGlsT3B0aW9uTWVudVNob3duKDUsIDE1KTsKLSAgICBnX2Fzc2Vy
dF90cnVlKFdFQktJVF9JU19PUFRJT05fTUVOVSh0ZXN0LT5tX21lbnUuZ2V0KCkpKTsKLSAgICBn
X2Fzc2VydF9jbXBpbnQod2Via2l0X29wdGlvbl9tZW51X2dldF9uX2l0ZW1zKHRlc3QtPm1fbWVu
dS5nZXQoKSksID09LCAzKTsKLSAgICB0ZXN0LT5hY3RpdmF0ZUl0ZW0oMSk7Ci0gICAgYXV0byog
cmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnY29tYm8nKS5zZWxlY3RlZEluZGV4IiwgbnVsbHB0cik7Ci0gICAg
Z19hc3NlcnRfbm9ubnVsbChyZXN1bHQpOwotICAgIGdfYXNzZXJ0X2NtcGZsb2F0KFdlYlZpZXdU
ZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9OdW1iZXIocmVzdWx0KSwgPT0sIDEpOwotCi0gICAgLy8g
V2Ugc2hvdWxkIGNsb3NlIHRoZSBtZW51IGFmdGVyIGFjdGl2YXRlLCBmdXJ0aGVyIGFjdGl2YXRl
cyB3aWxsIGJlIGlnbm9yZWQuCi0gICAgdGVzdC0+YWN0aXZhdGVJdGVtKDIpOwotICAgIHJlc3Vs
dCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2NvbWJvJykuc2VsZWN0ZWRJbmRleCIsIG51bGxwdHIpOwotICAgIGdfYXNz
ZXJ0X25vbm51bGwocmVzdWx0KTsKLSAgICBnX2Fzc2VydF9jbXBmbG9hdChXZWJWaWV3VGVzdDo6
amF2YXNjcmlwdFJlc3VsdFRvTnVtYmVyKHJlc3VsdCksID09LCAxKTsKLQotICAgIHRlc3QtPmNs
b3NlKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RPcHRpb25NZW51U2VsZWN0KE9wdGlvbk1lbnVU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHN0YXRpYyBjb25zdCBjaGFyIGh0bWxb
XSA9Ci0gICAgICAgICI8aHRtbD48Ym9keT4iCi0gICAgICAgICIgIDxzZWxlY3QgaWQ9J2NvbWJv
JyBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjEwJz4iCi0gICAgICAgICIg
ICAgPG9wdGlvbj5Gb288L29wdGlvbj4iCi0gICAgICAgICIgICAgPG9wdGlvbj5CYXI8L29wdGlv
bj4iCi0gICAgICAgICIgICAgPG9wdGlvbj5CYXo8L29wdGlvbj4iCi0gICAgICAgICIgIDwvc2Vs
ZWN0PjwvYm9keT48L2h0bWw+IjsKLSAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxN
YXBwZWQoKTsKLSAgICB0ZXN0LT5sb2FkSHRtbChodG1sLCBudWxscHRyKTsKLSAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIHRlc3QtPmNsaWNrQXRQb3NpdGlvbkFuZFdh
aXRVbnRpbE9wdGlvbk1lbnVTaG93big1LCAxNSk7Ci0gICAgZ19hc3NlcnRfdHJ1ZShXRUJLSVRf
SVNfT1BUSU9OX01FTlUodGVzdC0+bV9tZW51LmdldCgpKSk7Ci0gICAgZ19hc3NlcnRfY21waW50
KHdlYmtpdF9vcHRpb25fbWVudV9nZXRfbl9pdGVtcyh0ZXN0LT5tX21lbnUuZ2V0KCkpLCA9PSwg
Myk7Ci0KLSAgICAvLyBTZWxlY3QgaXRlbSBjaGFuZ2VzIHRoZSBjb21ibyB0ZXh0LCBidXQgbm90
IHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgaXRlbS4KLSAgICB0ZXN0LT5zZWxlY3RJdGVtKDIpOwot
ICAgIGF1dG8qIHJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hl
ZCgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbWJvJykuc2VsZWN0ZWRJbmRleCIsIG51bGxw
dHIpOwotICAgIGdfYXNzZXJ0X25vbm51bGwocmVzdWx0KTsKLSAgICBnX2Fzc2VydF9jbXBmbG9h
dChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvTnVtYmVyKHJlc3VsdCksID09LCAwKTsK
LQotICAgIC8vIEl0IGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuCi0gICAgdGVzdC0+c2Vs
ZWN0SXRlbSgxKTsKLSAgICByZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGls
RmluaXNoZWQoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb21ibycpLnNlbGVjdGVkSW5kZXgi
LCBudWxscHRyKTsKLSAgICBnX2Fzc2VydF9ub25udWxsKHJlc3VsdCk7Ci0gICAgZ19hc3NlcnRf
Y21wZmxvYXQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb051bWJlcihyZXN1bHQpLCA9
PSwgMCk7Ci0KLSAgICAvLyBBbmQgY2xvc2luZyB0aGUgbWVudSBhY3RpdmF0ZXMgdGhlIGN1cnJl
bnRseSBzZWxlY3RlZCBpdGVtLgotICAgIHRlc3QtPmNsb3NlKCk7Ci0gICAgcmVzdWx0ID0gdGVz
dC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnY29tYm8nKS5zZWxlY3RlZEluZGV4IiwgbnVsbHB0cik7Ci0gICAgZ19hc3NlcnRfbm9u
bnVsbChyZXN1bHQpOwotICAgIGdfYXNzZXJ0X2NtcGZsb2F0KFdlYlZpZXdUZXN0OjpqYXZhc2Ny
aXB0UmVzdWx0VG9OdW1iZXIocmVzdWx0KSwgPT0sIDEpOwotfQotCi12b2lkIGJlZm9yZUFsbCgp
Ci17Ci0gICAgT3B0aW9uTWVudVRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJvcHRpb24tbWVu
dS1zaW1wbGUiLCB0ZXN0T3B0aW9uTWVudVNpbXBsZSk7Ci0gICAgT3B0aW9uTWVudVRlc3Q6OmFk
ZCgiV2ViS2l0V2ViVmlldyIsICJvcHRpb24tbWVudS1ncm91cHMiLCB0ZXN0T3B0aW9uTWVudUdy
b3Vwcyk7Ci0gICAgT3B0aW9uTWVudVRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJvcHRpb24t
bWVudS1hY3RpdmF0ZSIsIHRlc3RPcHRpb25NZW51QWN0aXZhdGUpOwotICAgIE9wdGlvbk1lbnVU
ZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAib3B0aW9uLW1lbnUtc2VsZWN0IiwgdGVzdE9wdGlv
bk1lbnVTZWxlY3QpOwotfQotCi12b2lkIGFmdGVyQWxsKCkKLXsKLX0KZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvZ2xpYi9DTWFrZUxpc3RzLnR4dCBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvZ2xpYi9DTWFrZUxpc3RzLnR4dAppbmRleCAxMmFhZjVmMTMyYzVmNzE4NWE2NGM4NTE1OWU2
ZmQzYjMyNjhhMjdmLi4zNWJlYmVlNjM5N2ZhNGE0MGQyMDFiMzBjOTQwYmRlN2UxOWRkNDNkIDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2dsaWIvQ01ha2VMaXN0cy50eHQKKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9nbGliL0NNYWtlTGlzdHMudHh0CkBAIC0xMjcsNiArMTI3LDcg
QEAgQUREX1dLMl9URVNUKFRlc3RFZGl0b3IgJHtUT09MU19ESVJ9L1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0R0xpYi9UZXN0RWRpdG9yLmMKIEFERF9XSzJfVEVTVChUZXN0RnJhbWUgJHtUT09M
U19ESVJ9L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0RnJhbWUuY3BwKQogQURE
X1dLMl9URVNUKFRlc3RMb2FkZXJDbGllbnQgJHtUT09MU19ESVJ9L1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0R0xpYi9UZXN0TG9hZGVyQ2xpZW50LmNwcCkKIEFERF9XSzJfVEVTVChUZXN0TXVs
dGlwcm9jZXNzICR7VE9PTFNfRElSfS9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVz
dE11bHRpcHJvY2Vzcy5jcHApCitBRERfV0syX1RFU1QoVGVzdE9wdGlvbk1lbnUgJHtUT09MU19E
SVJ9L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0T3B0aW9uTWVudS5jcHApCiBB
RERfV0syX1RFU1QoVGVzdFJlc291cmNlcyAke1RPT0xTX0RJUn0vVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRHTGliL1Rlc3RSZXNvdXJjZXMuY3BwKQogQUREX1dLMl9URVNUKFRlc3RTU0wgJHtU
T09MU19ESVJ9L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0U1NMLmNwcCkKIEFE
RF9XSzJfVEVTVChUZXN0VUlDbGllbnQgJHtUT09MU19ESVJ9L1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0R0xpYi9UZXN0VUlDbGllbnQuY3BwKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9nbGliL1BsYXRmb3JtR1RLLmNtYWtlIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9nbGliL1Bs
YXRmb3JtR1RLLmNtYWtlCmluZGV4IDliMjNlNzRhYmRlMGMxYjFiNGVlNDc5ZTEyMDk3MzdiYWZh
MmYyNjcuLmE1ODZhNmE2OGEzNTU3YWY4NTYzZDczOTM2YWZhM2Y0Y2I3Y2M4OTkgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ2xpYi9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL2dsaWIvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTQxLDcgKzQxLDYgQEAg
QUREX1dLMl9URVNUKFRlc3RET01Ob2RlRmlsdGVyICR7VE9PTFNfRElSfS9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdEd0ay9UZXN0RE8KIEFERF9XSzJfVEVTVChUZXN0RE9NWFBhdGhOU1Jlc29s
dmVyICR7VE9PTFNfRElSfS9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0RE9NWFBh
dGhOU1Jlc29sdmVyLmNwcCkKIEFERF9XSzJfVEVTVChUZXN0SW5zcGVjdG9yICR7VE9PTFNfRElS
fS9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0SW5zcGVjdG9yLmNwcCkKIEFERF9X
SzJfVEVTVChUZXN0SW5zcGVjdG9yU2VydmVyICR7VE9PTFNfRElSfS9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdEd0ay9UZXN0SW5zcGVjdG9yU2VydmVyLmNwcCkKLUFERF9XSzJfVEVTVChUZXN0
T3B0aW9uTWVudSAke1RPT0xTX0RJUn0vVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvVGVz
dE9wdGlvbk1lbnUuY3BwKQogQUREX1dLMl9URVNUKFRlc3RQcmludGluZyAke1RPT0xTX0RJUn0v
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvVGVzdFByaW50aW5nLmNwcCkKIEFERF9XSzJf
VEVTVChUZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlICR7VE9PTFNfRElSfS9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdEdMaWIvVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZS5jcHApCiBBRERfV0sy
X1RFU1QoVGVzdFdlYktpdFZlcnNpb24gJHtUT09MU19ESVJ9L1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0R3RrL1Rlc3RXZWJLaXRWZXJzaW9uLmNwcCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388218</attachid>
            <date>2020-01-20 01:32:22 -0800</date>
            <delta_ts>2020-01-20 03:23:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206287-20200120103220.patch</filename>
            <type>text/plain</type>
            <size>66021</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0ODA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGQ1YzMxOTkxNzM4ZDc1OWE5
NTAxYWRlMTU1OTVjMDJmMjJmYjdiZTcuLjIwMWIxMDM5NDliYTU2NDc5NjUwMWY5NjgzMzQ4MTVm
ZTczOTE2ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTA2IEBACisyMDIwLTAxLTIwICBaYW4gRG9i
ZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbV1BFXSBFeHBvc2UgdGhl
IFdlYktpdE9wdGlvbk1lbnUgQVBJcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjA2Mjg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgRW5hYmxlIHRoZSBHTGliLWJhc2VkIEFQSSBjb3ZlcmluZyBvcHRpb24g
bWVudSBmdW5jdGlvbmFsaXR5IGZvciBXUEUuCisKKyAgICAgICAgTW9zdCBvZiB0aGlzIGNhbiBi
ZSBzaGFyZWQgd2l0aCB0aGUgR1RLIHBvcnQuIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgaW4KKyAg
ICAgICAgdGhlIHR3byBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZW1pdHRlZCBvbiB0aGUgV2ViS2l0
V2ViVmlldydzICJzaG93LW1lbnUiCisgICAgICAgIHNpZ25hbCAoR2RrRXZlbnQgYW5kIEdka1Jl
Y3RhbmdsZSkgdGhhdCBXUEUgZG9lc24ndCBzdXBwb3J0IGF0IHRoZQorICAgICAgICBtb21lbnQu
IFRoZSByZWN0YW5nbGUgaW5mb3JtYXRpb24gd2lsbCBiZSBwb3NzaWJsZSB0byBlbWl0IGluIHRo
ZSBuZWFyCisgICAgICAgIGZ1dHVyZSBvbmNlIGEgdXNhYmxlIEFQSSB0eXBlIGlzIGF2YWlsYWJs
ZSBmb3IgdGhpcyBpbmZvcm1hdGlvbi4KKworICAgICAgICBUaGUgV2ViS2l0UG9wdXBNZW51IGlt
cGxlbWVudGF0aW9uIGZvciBXUEUgd291bGQgb25seSB3b3JrIHdpdGggdGhlCisgICAgICAgIEdM
aWItYmFzZWQgQVBJLiBUbyBhdm9pZCB1c2luZyBpdCB3aXRoIG90aGVyIEFQSXMsIHRoaXMgaXMg
aW1wbGVtZW50ZWQKKyAgICAgICAgb25seSBvbiB0aGUgV2ViS2l0V2ViVmlld0NsaWVudCBpbnRl
cmZhY2UgKHJlbmFtZWQgZnJvbSAnV2ViVmlld0NsaWVudCcKKyAgICAgICAgYW5kIGl0cyBkZWNs
YXJhdGlvbiBtb3ZlZCBpbnRvIGEgc2VwYXJhdGUgaGVhZGVyIGZpbGUpIGluaGVyaXRpbmcgZnJv
bQorICAgICAgICBBUEk6OlZpZXdDbGllbnQuCisKKyAgICAgICAgVGhlIHJlbGV2YW50IEFQSSB0
ZXN0IGlzIGVuYWJsZWQgZm9yIFdQRS4KKworICAgICAgICAqIFBsYXRmb3JtV1BFLmNtYWtlOgor
ICAgICAgICAqIFNvdXJjZXNXUEUudHh0OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9X
ZWJLaXRXZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdFdlYlZpZXdDbGllbnQ6OldlYktpdFdl
YlZpZXdDbGllbnQpOgorICAgICAgICAoV2ViS2l0V2ViVmlld0NsaWVudDo6c2hvd09wdGlvbk1l
bnUpOgorICAgICAgICAoV2ViS2l0V2ViVmlld0NsaWVudDo6aGFuZGxlRG93bmxvYWRSZXF1ZXN0
KToKKyAgICAgICAgKFdlYktpdFdlYlZpZXdDbGllbnQ6OmZyYW1lRGlzcGxheWVkKToKKyAgICAg
ICAgKFdlYktpdFdlYlZpZXdDbGllbnQ6OndpbGxTdGFydExvYWQpOgorICAgICAgICAoV2ViS2l0
V2ViVmlld0NsaWVudDo6ZGlkQ2hhbmdlUGFnZUlEKToKKyAgICAgICAgKFdlYktpdFdlYlZpZXdD
bGllbnQ6OmRpZFJlY2VpdmVVc2VyTWVzc2FnZSk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3Q29u
c3RydWN0ZWQpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQpOgorICAgICAg
ICAod2Via2l0V2ViVmlld1Nob3dPcHRpb25NZW51KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2dsaWIvV2ViS2l0V2ViVmlld1ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dw
ZS9BUElWaWV3Q2xpZW50Lmg6CisgICAgICAgIChBUEk6OlZpZXdDbGllbnQ6OmlzR0xpYkJhc2Vk
QVBJKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9QYWdlQ2xpZW50SW1wbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpjcmVhdGVQb3B1cE1lbnVQcm94eSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvV1BFVmlldy5oOgorICAgICAgICAoV0tXUEU6OlZp
ZXc6OmNsaWVudCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0T3B0
aW9uTWVudS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRPcHRp
b25NZW51SXRlbS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRQ
b3B1cE1lbnUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViS2l0UG9wdXBNZW51Ojpj
cmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJLaXRQb3B1cE1lbnU6OldlYktpdFBvcHVwTWVu
dSk6CisgICAgICAgIChXZWJLaXQ6Om1lbnVDbG9zZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYktp
dDo6V2ViS2l0UG9wdXBNZW51OjpzaG93UG9wdXBNZW51KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
S2l0UG9wdXBNZW51OjpoaWRlUG9wdXBNZW51KToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0UG9w
dXBNZW51OjpjYW5jZWxUcmFja2luZyk6CisgICAgICAgIChXZWJLaXQ6OldlYktpdFBvcHVwTWVu
dTo6c2VsZWN0SXRlbSk6CisgICAgICAgIChXZWJLaXQ6OldlYktpdFBvcHVwTWVudTo6YWN0aXZh
dGVJdGVtKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRQb3B1cE1lbnUuaDog
QWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0V2ViVmlldy5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYlZpZXdDbGllbnQuaDogQWRkZWQuCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvZG9jcy93cGUtMS4wLXNlY3Rpb25zLnR4dDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL3dwZS93ZWJraXQuaDoKKworMjAyMC0wMS0xOSAgWmFuIERv
YmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CisKKyAgICAgICAgW1dQRV0gRXhwb3NlIHRo
ZSBXZWJLaXRPcHRpb25NZW51IEFQSXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwNjI4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEVuYWJsZSB0aGUgR0xpYi1iYXNlZCBBUEkgY292ZXJpbmcgb3B0aW9u
IG1lbnUgZnVuY3Rpb25hbGl0eSBmb3IgV1BFLgorCisKKyAgICAgICAgVGhlIHJlbGV2YW50IEFQ
SSB0ZXN0IGlzIGVuYWJsZWQgZm9yIFdQRS4KKworICAgICAgICAqIFBsYXRmb3JtV1BFLmNtYWtl
OgorICAgICAgICAqIFNvdXJjZXNXUEUudHh0OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy93
cGUvV0tWaWV3LmNwcDoKKyAgICAgICAgKFdLVmlld0NyZWF0ZSk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXcuY3BwOgorICAgICAgICAod2Via2l0X3dlYl92aWV3
X2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0V2ViVmlld0NyZWF0ZVBhZ2UpOgorICAgICAg
ICAod2Via2l0V2ViVmlld1Nob3dPcHRpb25NZW51KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2dsaWIvV2ViS2l0V2ViVmlld1ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dw
ZS9QYWdlQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpj
cmVhdGVQb3B1cE1lbnVQcm94eSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvV1BFVmll
dy5jcHA6CisgICAgICAgIChXS1dQRTo6Vmlldzo6Vmlldyk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS93cGUvV1BFVmlldy5oOgorICAgICAgICAoV0tXUEU6OlZpZXc6OmNyZWF0ZSk6CisgICAg
ICAgIChXS1dQRTo6Vmlldzo6d2ViVmlldyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUv
V2ViS2l0T3B0aW9uTWVudS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9X
ZWJLaXRPcHRpb25NZW51SXRlbS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dw
ZS9XZWJLaXRQb3B1cE1lbnUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViS2l0UG9w
dXBNZW51OjpXZWJLaXRQb3B1cE1lbnUpOgorICAgICAgICAoV2ViS2l0OjptZW51Q2xvc2VDYWxs
YmFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYktpdFBvcHVwTWVudTo6c2hvd1BvcHVwTWVudSk6
CisgICAgICAgIChXZWJLaXQ6OldlYktpdFBvcHVwTWVudTo6aGlkZVBvcHVwTWVudSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYktpdFBvcHVwTWVudTo6Y2FuY2VsVHJhY2tpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJLaXRQb3B1cE1lbnU6OnNlbGVjdEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJLaXRQb3B1cE1lbnU6OmFjdGl2YXRlSXRlbSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS93
cGUvV2ViS2l0UG9wdXBNZW51Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3Bl
L1dlYktpdFdlYlZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9kb2NzL3dwZS0x
LjAtc2VjdGlvbnMudHh0OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL3dlYmtpdC5oOgor
CiAyMDIwLTAxLTE5ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAg
ICAgICAgIE1ha2UgTWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlIGEgbWVzc2FnZSByZWNlaXZlcgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdQRS5jbWFrZSBiL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm1XUEUuY21ha2UKaW5kZXggYThhOTVmNGIwZGI0YTUwYThlZjViNzIwMzljNTFj
YzU4MThlZDMwNC4uZDE0Yjg2MjYwODg5ZjBkMGI3NzIwYmJkM2IxM2VjZTFiYzk3Njg3ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdQRS5jbWFrZQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtV1BFLmNtYWtlCkBAIC0xMTksNiArMTE5LDggQEAgc2V0KFdQRV9BUElfSU5T
VEFMTEVEX0hFQURFUlMKICAgICAke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktp
dE5ldHdvcmtQcm94eVNldHRpbmdzLmgKICAgICAke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9BUEkv
d3BlL1dlYktpdE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0LmgKICAgICAke1dFQktJVF9E
SVJ9L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdE5vdGlmaWNhdGlvbi5oCisgICAgJHtXRUJLSVRf
RElSfS9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRPcHRpb25NZW51LmgKKyAgICAke1dFQktJVF9E
SVJ9L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdE9wdGlvbk1lbnVJdGVtLmgKICAgICAke1dFQktJ
VF9ESVJ9L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFBlcm1pc3Npb25SZXF1ZXN0LmgKICAgICAk
e1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFBsdWdpbi5oCiAgICAgJHtXRUJL
SVRfRElSfS9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRQb2xpY3lEZWNpc2lvbi5oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNXUEUudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2Vz
V1BFLnR4dAppbmRleCBlYTdmZjhkNzNmZGYxMzNkN2M1NjBjOWZiY2YwMTVhNjI0N2FkODM5Li5m
NGZiYzJmN2I2MGEzMGQ2MGQwN2RjZDkzNjA1YjJiNjhiYjcyYWIzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1NvdXJjZXNXUEUudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc1dQRS50
eHQKQEAgLTE0NSw2ICsxNDUsOCBAQCBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0TmV0d29ya1By
b3h5U2V0dGluZ3MuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdE5vdGlm
aWNhdGlvbi5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Tm90aWZpY2F0
aW9uUGVybWlzc2lvblJlcXVlc3QuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS9nbGliL1dl
YktpdE5vdGlmaWNhdGlvblByb3ZpZGVyLmNwcCBAbm8tdW5pZnkKK1VJUHJvY2Vzcy9BUEkvZ2xp
Yi9XZWJLaXRPcHRpb25NZW51LmNwcCBAbm8tdW5pZnkKK1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJL
aXRPcHRpb25NZW51SXRlbS5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0
UGVybWlzc2lvblJlcXVlc3QuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktp
dFBsdWdpbi5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0UG9saWN5RGVj
aXNpb24uY3BwIEBuby11bmlmeQpAQCAtMTc3LDYgKzE3OSw3IEBAIFVJUHJvY2Vzcy9BUEkvd3Bl
L1BhZ2VDbGllbnRJbXBsLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvd3BlL1Njcm9sbEdl
c3R1cmVDb250cm9sbGVyLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENv
bG9yLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdElucHV0TWV0aG9kQ29u
dGV4dFdQRS5jcHAgQG5vLXVuaWZ5CitVSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRQb3B1cE1lbnUu
Y3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0U2NyaXB0RGlhbG9nV1BFLmNw
cCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYlZpZXdCYWNrZW5kLmNwcCBA
bm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYlZpZXdXUEUuY3BwIEBuby11bmlm
eQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vi
Vmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3
LmNwcAppbmRleCBmZjg2ZWNmMGY5NjZjNGY5NzQxYTJhMzZhMjhjM2RmYTE0MDJmNDUzLi5lOWU1
OWEyMWVjNjA5NzM0MWMwODAzYjc5MjQyYTQ5MzVjMGFiYzQxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmNwcApAQCAtOTIsOSArOTIs
MTAgQEAKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV1BFKQotI2luY2x1ZGUgIkFQSVZpZXdDbGll
bnQuaCIKICNpbmNsdWRlICJXUEVWaWV3LmgiCisjaW5jbHVkZSAiV2ViS2l0T3B0aW9uTWVudVBy
aXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFja2VuZFByaXZhdGUuaCIKKyNpbmNs
dWRlICJXZWJLaXRXZWJWaWV3Q2xpZW50LmgiCiAjZW5kaWYKIAogI2lmIFVTRShMSUJOT1RJRlkp
CkBAIC0xNjUsOSArMTY2LDggQEAgZW51bSB7CiAKICNpZiBQTEFURk9STShHVEspCiAgICAgUlVO
X0NPTE9SX0NIT09TRVIsCi0KLSAgICBTSE9XX09QVElPTl9NRU5VLAogI2VuZGlmCisgICAgU0hP
V19PUFRJT05fTUVOVSwKIAogICAgIFVTRVJfTUVTU0FHRV9SRUNFSVZFRCwKIApAQCAtNDEyLDU1
ICs0MTIsNTUgQEAgcHJpdmF0ZToKIH07CiAKICNpZiBQTEFURk9STShXUEUpCi1jbGFzcyBXZWJW
aWV3Q2xpZW50IGZpbmFsIDogcHVibGljIEFQSTo6Vmlld0NsaWVudCB7Ci0gICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgV2ViVmlld0NsaWVudChXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3KQotICAgICAgICA6IG1fd2ViVmlldyh3ZWJWaWV3KQotICAgIHsK
LSAgICB9CitXZWJLaXRXZWJWaWV3Q2xpZW50OjpXZWJLaXRXZWJWaWV3Q2xpZW50KFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcpCisgICAgOiBtX3dlYlZpZXcod2ViVmlldykKK3sgfQogCi1wcml2YXRl
OgotICAgIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KFdLV1BFOjpWaWV3JiwgRG93bmxvYWRQ
cm94eSYgZG93bmxvYWRQcm94eSkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIHdlYmtpdFdlYlZp
ZXdIYW5kbGVEb3dubG9hZFJlcXVlc3QobV93ZWJWaWV3LCAmZG93bmxvYWRQcm94eSk7Ci0gICAg
fQorR1JlZlB0cjxXZWJLaXRPcHRpb25NZW51PiBXZWJLaXRXZWJWaWV3Q2xpZW50OjpzaG93T3B0
aW9uTWVudShXZWJLaXRQb3B1cE1lbnUmIHBvcHVwTWVudSwgY29uc3QgVmVjdG9yPFdlYlBvcHVw
SXRlbT4mIGl0ZW1zLCBpbnQzMl90IHNlbGVjdGVkSW5kZXgpCit7CisgICAgR1JlZlB0cjxXZWJL
aXRPcHRpb25NZW51PiBtZW51ID0gYWRvcHRHUmVmKHdlYmtpdE9wdGlvbk1lbnVDcmVhdGUocG9w
dXBNZW51LCBpdGVtcywgc2VsZWN0ZWRJbmRleCkpOworICAgIGlmICh3ZWJraXRXZWJWaWV3U2hv
d09wdGlvbk1lbnUoV0VCS0lUX1dFQl9WSUVXKG1fd2ViVmlldyksIG1lbnUuZ2V0KCkpKQorICAg
ICAgICByZXR1cm4gbWVudTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KIAotICAgIHZvaWQgZnJh
bWVEaXNwbGF5ZWQoV0tXUEU6OlZpZXcmKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgewotICAg
ICAgICAgICAgU2V0Rm9yU2NvcGU8Ym9vbD4gaW5GcmFtZURpc3BsYXllZEd1YXJkKG1fd2ViVmll
dy0+cHJpdi0+aW5GcmFtZURpc3BsYXllZCwgdHJ1ZSk7Ci0gICAgICAgICAgICBmb3IgKGNvbnN0
IGF1dG8mIGNhbGxiYWNrIDogbV93ZWJWaWV3LT5wcml2LT5mcmFtZURpc3BsYXllZENhbGxiYWNr
cykgewotICAgICAgICAgICAgICAgIGlmICghbV93ZWJWaWV3LT5wcml2LT5mcmFtZURpc3BsYXll
ZENhbGxiYWNrc1RvUmVtb3ZlLmNvbnRhaW5zKGNhbGxiYWNrLmlkKSkKLSAgICAgICAgICAgICAg
ICAgICAgY2FsbGJhY2suY2FsbGJhY2sobV93ZWJWaWV3LCBjYWxsYmFjay51c2VyRGF0YSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KK3ZvaWQgV2ViS2l0V2ViVmlld0NsaWVudDo6aGFuZGxl
RG93bmxvYWRSZXF1ZXN0KFdLV1BFOjpWaWV3JiwgRG93bmxvYWRQcm94eSYgZG93bmxvYWRQcm94
eSkKK3sKKyAgICB3ZWJraXRXZWJWaWV3SGFuZGxlRG93bmxvYWRSZXF1ZXN0KG1fd2ViVmlldywg
JmRvd25sb2FkUHJveHkpOworfQogCi0gICAgICAgIHdoaWxlICghbV93ZWJWaWV3LT5wcml2LT5m
cmFtZURpc3BsYXllZENhbGxiYWNrc1RvUmVtb3ZlLmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
YXV0byBpZCA9IG1fd2ViVmlldy0+cHJpdi0+ZnJhbWVEaXNwbGF5ZWRDYWxsYmFja3NUb1JlbW92
ZS50YWtlQW55KCk7Ci0gICAgICAgICAgICBtX3dlYlZpZXctPnByaXYtPmZyYW1lRGlzcGxheWVk
Q2FsbGJhY2tzLnJlbW92ZUZpcnN0TWF0Y2hpbmcoW2lkXShjb25zdCBhdXRvJiBpdGVtKSB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uaWQgPT0gaWQ7Ci0gICAgICAgICAgICB9KTsKK3Zv
aWQgV2ViS2l0V2ViVmlld0NsaWVudDo6ZnJhbWVEaXNwbGF5ZWQoV0tXUEU6OlZpZXcmKQorewor
ICAgIHsKKyAgICAgICAgU2V0Rm9yU2NvcGU8Ym9vbD4gaW5GcmFtZURpc3BsYXllZEd1YXJkKG1f
d2ViVmlldy0+cHJpdi0+aW5GcmFtZURpc3BsYXllZCwgdHJ1ZSk7CisgICAgICAgIGZvciAoY29u
c3QgYXV0byYgY2FsbGJhY2sgOiBtX3dlYlZpZXctPnByaXYtPmZyYW1lRGlzcGxheWVkQ2FsbGJh
Y2tzKSB7CisgICAgICAgICAgICBpZiAoIW1fd2ViVmlldy0+cHJpdi0+ZnJhbWVEaXNwbGF5ZWRD
YWxsYmFja3NUb1JlbW92ZS5jb250YWlucyhjYWxsYmFjay5pZCkpCisgICAgICAgICAgICAgICAg
Y2FsbGJhY2suY2FsbGJhY2sobV93ZWJWaWV3LCBjYWxsYmFjay51c2VyRGF0YSk7CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICB2b2lkIHdpbGxTdGFydExvYWQoV0tXUEU6OlZpZXcmKSBvdmVycmlk
ZQotICAgIHsKLSAgICAgICAgd2Via2l0V2ViVmlld1dpbGxTdGFydExvYWQobV93ZWJWaWV3KTsK
KyAgICB3aGlsZSAoIW1fd2ViVmlldy0+cHJpdi0+ZnJhbWVEaXNwbGF5ZWRDYWxsYmFja3NUb1Jl
bW92ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgYXV0byBpZCA9IG1fd2ViVmlldy0+cHJpdi0+ZnJh
bWVEaXNwbGF5ZWRDYWxsYmFja3NUb1JlbW92ZS50YWtlQW55KCk7CisgICAgICAgIG1fd2ViVmll
dy0+cHJpdi0+ZnJhbWVEaXNwbGF5ZWRDYWxsYmFja3MucmVtb3ZlRmlyc3RNYXRjaGluZyhbaWRd
KGNvbnN0IGF1dG8mIGl0ZW0pIHsKKyAgICAgICAgICAgIHJldHVybiBpdGVtLmlkID09IGlkOwor
ICAgICAgICB9KTsKICAgICB9Cit9CiAKLSAgICB2b2lkIGRpZENoYW5nZVBhZ2VJRChXS1dQRTo6
VmlldyYpIG92ZXJyaWRlCi0gICAgewotICAgICAgICB3ZWJraXRXZWJWaWV3RGlkQ2hhbmdlUGFn
ZUlEKG1fd2ViVmlldyk7Ci0gICAgfQordm9pZCBXZWJLaXRXZWJWaWV3Q2xpZW50Ojp3aWxsU3Rh
cnRMb2FkKFdLV1BFOjpWaWV3JikKK3sKKyAgICB3ZWJraXRXZWJWaWV3V2lsbFN0YXJ0TG9hZCht
X3dlYlZpZXcpOworfQogCi0gICAgdm9pZCBkaWRSZWNlaXZlVXNlck1lc3NhZ2UoV0tXUEU6OlZp
ZXcmLCBVc2VyTWVzc2FnZSYmIG1lc3NhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVXNlck1l
c3NhZ2UmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpIG92ZXJyaWRlCi0gICAgewotICAgICAgICB3
ZWJraXRXZWJWaWV3RGlkUmVjZWl2ZVVzZXJNZXNzYWdlKG1fd2ViVmlldywgV1RGTW92ZShtZXNz
YWdlKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KK3ZvaWQgV2ViS2l0V2Vi
Vmlld0NsaWVudDo6ZGlkQ2hhbmdlUGFnZUlEKFdLV1BFOjpWaWV3JikKK3sKKyAgICB3ZWJraXRX
ZWJWaWV3RGlkQ2hhbmdlUGFnZUlEKG1fd2ViVmlldyk7Cit9CiAKLSAgICBXZWJLaXRXZWJWaWV3
KiBtX3dlYlZpZXc7Ci19Owordm9pZCBXZWJLaXRXZWJWaWV3Q2xpZW50OjpkaWRSZWNlaXZlVXNl
ck1lc3NhZ2UoV0tXUEU6OlZpZXcmLCBVc2VyTWVzc2FnZSYmIG1lc3NhZ2UsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoVXNlck1lc3NhZ2UmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAg
d2Via2l0V2ViVmlld0RpZFJlY2VpdmVVc2VyTWVzc2FnZShtX3dlYlZpZXcsIFdURk1vdmUobWVz
c2FnZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KICNlbmRpZgogCiBzdGF0aWMg
Z2Jvb2xlYW4gd2Via2l0V2ViVmlld0xvYWRGYWlsKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdl
YktpdExvYWRFdmVudCwgY29uc3QgY2hhciogZmFpbGluZ1VSSSwgR0Vycm9yKiBlcnJvcikKQEAg
LTc3Nyw3ICs3NzcsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3Q29uc3RydWN0ZWQoR09i
amVjdCogb2JqZWN0KQogI2VuZGlmCiAKICNpZiBQTEFURk9STShXUEUpCi0gICAgcHJpdi0+dmll
dy0+c2V0Q2xpZW50KG1ha2VVbmlxdWU8V2ViVmlld0NsaWVudD4od2ViVmlldykpOworICAgIHBy
aXYtPnZpZXctPnNldENsaWVudChtYWtlVW5pcXVlPFdlYktpdFdlYlZpZXdDbGllbnQ+KHdlYlZp
ZXcpKTsKICNlbmRpZgogCiAgICAgLy8gVGhpcyBuZWVkcyB0byBiZSBhZnRlciBhdHRhY2hVSUNs
aWVudFRvVmlldygpIGJlY2F1c2UgV2ViUGFnZVByb3h5OjpzZXRVSUNsaWVudCgpIGNhbGxzIHNl
dENhblJ1bk1vZGFsKCkgd2l0aCB0cnVlLgpAQCAtMjEzMyw2ICsyMTMzLDM2IEBAIHN0YXRpYyB2
b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmll
d0NsYXNzKQogICAgICAgICBHREtfVFlQRV9SRUNUQU5HTEUgfCBHX1NJR05BTF9UWVBFX1NUQVRJ
Q19TQ09QRSk7CiAjZW5kaWYgLy8gUExBVEZPUk0oR1RLKQogCisjaWYgUExBVEZPUk0oV1BFKQor
ICAgIC8qKgorICAgICAqIFdlYktpdFdlYlZpZXc6OnNob3ctb3B0aW9uLW1lbnU6CisgICAgICog
QHdlYl92aWV3OiB0aGUgI1dlYktpdFdlYlZpZXcgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0
dGVkCisgICAgICogQG1lbnU6IHRoZSAjV2ViS2l0T3B0aW9uTWVudQorICAgICAqIEByZWN0YW5n
bGU6IHRoZSBvcHRpb24gZWxlbWVudCBhcmVhCisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBp
cyBlbWl0dGVkIHdoZW4gYSBzZWxlY3QgZWxlbWVudCBpbiBAd2ViX3ZpZXcgbmVlZHMgdG8gZGlz
cGxheSBhCisgICAgICogZHJvcGRvd24gbWVudS4gVGhpcyBzaWduYWwgY2FuIGJlIHVzZWQgdG8g
c2hvdyBhIGN1c3RvbSBtZW51LCB1c2luZyBAbWVudSB0byBnZXQKKyAgICAgKiB0aGUgZGV0YWls
cyBvZiBhbGwgaXRlbXMgdGhhdCBzaG91bGQgYmUgZGlzcGxheWVkLiBUaGUgYXJlYSBvZiB0aGUg
ZWxlbWVudCBpbiB0aGUKKyAgICAgKiAjV2ViS2l0V2ViVmlldyBpcyBnaXZlbiBhcyBAcmVjdGFu
Z2xlIHBhcmFtZXRlciwgaXQgY2FuIGJlIHVzZWQgdG8gcG9zaXRpb24gdGhlCisgICAgICogbWVu
dS4KKyAgICAgKiBUbyBoYW5kbGUgdGhpcyBzaWduYWwgYXN5bmNocm9ub3VzbHkgeW91IHNob3Vs
ZCBrZWVwIGEgcmVmIG9mIHRoZSBAbWVudS4KKyAgICAgKgorICAgICAqIFJldHVybnM6ICVUUlVF
IHRvIHN0b3Agb3RoZXIgaGFuZGxlcnMgZnJvbSBiZWluZyBpbnZva2VkIGZvciB0aGUgZXZlbnQu
CisgICAgICogICAlRkFMU0UgdG8gcHJvcGFnYXRlIHRoZSBldmVudCBmdXJ0aGVyLgorICAgICAq
CisgICAgICogU2luY2U6IDIuMjgKKyAgICAgKi8KKyAgICBzaWduYWxzW1NIT1dfT1BUSU9OX01F
TlVdID0gZ19zaWduYWxfbmV3KAorICAgICAgICAic2hvdy1vcHRpb24tbWVudSIsCisgICAgICAg
IEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgIEdfU0lHTkFMX1JVTl9M
QVNULAorICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0V2ViVmlld0NsYXNzLCBzaG93X29w
dGlvbl9tZW51KSwKKyAgICAgICAgZ19zaWduYWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLCBu
dWxscHRyLAorICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywKKyAgICAgICAgR19U
WVBFX0JPT0xFQU4sIDEsCisgICAgICAgIFdFQktJVF9UWVBFX09QVElPTl9NRU5VKTsKKyNlbmRp
ZgorCiAgICAgLyoqCiAgICAgICogV2ViS2l0V2ViVmlldzo6dXNlci1tZXNzYWdlLXJlY2VpdmVk
OgogICAgICAqIEB3ZWJfdmlldzogdGhlICNXZWJLaXRXZWJWaWV3IG9uIHdoaWNoIHRoZSBzaWdu
YWwgaXMgZW1pdHRlZApAQCAtMjcyMSw2ICsyNzUxLDE1IEBAIHZvaWQgd2Via2l0V2ViVmlld0Rl
bGV0ZVN1cnJvdW5kaW5nKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGludCBvZmZzZXQsIHVuc2ln
bmVkCiAgICAgZ2V0UGFnZSh3ZWJWaWV3KS5kZWxldGVTdXJyb3VuZGluZyhvZmZzZXQsIGNoYXJh
Y3RlckNvdW50KTsKIH0KIAorI2lmIFBMQVRGT1JNKFdQRSkKK2Jvb2wgd2Via2l0V2ViVmlld1No
b3dPcHRpb25NZW51KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdE9wdGlvbk1lbnUqIG1l
bnUpCit7CisgICAgZ2Jvb2xlYW4gaGFuZGxlZDsKKyAgICBnX3NpZ25hbF9lbWl0KHdlYlZpZXcs
IHNpZ25hbHNbU0hPV19PUFRJT05fTUVOVV0sIDAsIG1lbnUsICZoYW5kbGVkKTsKKyAgICByZXR1
cm4gaGFuZGxlZDsKK30KKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oV1BFKQogLyoqCiAgKiB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2JhY2tlbmQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlld1ByaXZhdGUuaAppbmRleCA2N2Y2OTgyMWVhN2Y2
MmM3YjAzZjUxM2UzODczNGVjZGI5YzdiNTM5Li45YTg2NDM5NjMxMTU1NzBmMzJkNmEwZjVkNjUz
MWFmODdjNTBmZjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xp
Yi9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9nbGliL1dlYktpdFdlYlZpZXdQcml2YXRlLmgKQEAgLTEwMCw2ICsxMDAsMTAgQEAgYm9vbCB3
ZWJraXRXZWJWaWV3RW1pdFJ1bkNvbG9yQ2hvb3NlcihXZWJLaXRXZWJWaWV3KiwgV2ViS2l0Q29s
b3JDaG9vc2VyUmVxdWVzdCoKIGJvb2wgd2Via2l0V2ViVmlld1Nob3dPcHRpb25NZW51KFdlYktp
dFdlYlZpZXcqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgV2ViS2l0T3B0aW9uTWVudSosIGNv
bnN0IEdka0V2ZW50Kik7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKFdQRSkKK2Jvb2wgd2Via2l0
V2ViVmlld1Nob3dPcHRpb25NZW51KFdlYktpdFdlYlZpZXcqLCBXZWJLaXRPcHRpb25NZW51Kik7
CisjZW5kaWYKKwogZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0F1dGhlbnRpY2F0ZShXZWJLaXRXZWJW
aWV3KiwgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Kik7CiBnYm9vbGVhbiB3ZWJraXRXZWJW
aWV3U2NyaXB0RGlhbG9nKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRTY3JpcHREaWFsb2cqKTsKIGdi
b29sZWFuIHdlYmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3NlcihXZWJLaXRXZWJWaWV3KiwgV2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvd3BlL0FQSVZpZXdDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93
cGUvQVBJVmlld0NsaWVudC5oCmluZGV4IGIxM2RhNmQwZjVjZGY4NzljM2Q0ODZiMmY2YWE0ZjY1
MWEwYTFiYTcuLjUwOWY4NDlhMTJmODYyOTk0ODZiMWQxYTUyZGI1NjUwMWE2MWViNDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvQVBJVmlld0NsaWVudC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvQVBJVmlld0NsaWVudC5oCkBAIC00
NSw2ICs0NSw4IEBAIGNsYXNzIFZpZXdDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgflZp
ZXdDbGllbnQoKSA9IGRlZmF1bHQ7CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNHTGliQmFzZWRBUEko
KSB7IHJldHVybiBmYWxzZTsgfQorCiAgICAgdmlydHVhbCB2b2lkIGZyYW1lRGlzcGxheWVkKFdL
V1BFOjpWaWV3JikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZURvd25sb2FkUmVxdWVzdChX
S1dQRTo6VmlldyYsIFdlYktpdDo6RG93bmxvYWRQcm94eSYpIHsgfQogICAgIHZpcnR1YWwgdm9p
ZCB3aWxsU3RhcnRMb2FkKFdLV1BFOjpWaWV3JikgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1BhZ2VDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS93cGUvUGFnZUNsaWVudEltcGwuY3BwCmluZGV4IDU5MmQ3MzM0OTk5ODcx
MWYxN2MxODFjMmYwY2RlYTZiNGM0ZjA2ODMuLjMxY2FmMzQzYTIwNmJmZWFjZjViZGFkOTJiYTdh
MWJlMmVhYmI3OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUv
UGFnZUNsaWVudEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUv
UGFnZUNsaWVudEltcGwuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiUGFnZUNsaWVudEltcGwuaCIKIAorI2luY2x1ZGUgIkFQSVZpZXdDbGllbnQu
aCIKICNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5Q29vcmRpbmF0ZWRHcmFwaGljcy5oIgogI2lu
Y2x1ZGUgIk5hdGl2ZVdlYk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJOYXRpdmVXZWJXaGVlbEV2
ZW50LmgiCkBAIC0zMyw2ICszNCw3IEBACiAjaW5jbHVkZSAiV1BFVmlldy5oIgogI2luY2x1ZGUg
IldlYkNvbnRleHRNZW51UHJveHkuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0TWVudVByb3h5V1BF
LmgiCisjaW5jbHVkZSAiV2ViS2l0UG9wdXBNZW51LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9BY3Rp
dml0eVN0YXRlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9ET01QYXN0ZUFjY2Vzcy5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KQEAgLTI1Myw5ICsyNTUsMTEgQEAgdm9pZCBQ
YWdlQ2xpZW50SW1wbDo6d2hlZWxFdmVudFdhc05vdEhhbmRsZWRCeVdlYkNvcmUoY29uc3QgTmF0
aXZlV2ViV2hlZWxFdmVudCYKIHsKIH0KIAotUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5PiBQYWdl
Q2xpZW50SW1wbDo6Y3JlYXRlUG9wdXBNZW51UHJveHkoV2ViUGFnZVByb3h5JikKK1JlZlB0cjxX
ZWJQb3B1cE1lbnVQcm94eT4gUGFnZUNsaWVudEltcGw6OmNyZWF0ZVBvcHVwTWVudVByb3h5KFdl
YlBhZ2VQcm94eSYgcGFnZSkKIHsKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIW1fdmll
dy5jbGllbnQoKS5pc0dMaWJCYXNlZEFQSSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICByZXR1cm4gV2ViS2l0UG9wdXBNZW51OjpjcmVhdGUobV92aWV3LCBwYWdlKTsKIH0KIAogI2lm
IEVOQUJMRShDT05URVhUX01FTlVTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL3dwZS9XUEVWaWV3LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dQ
RVZpZXcuaAppbmRleCBmMjNkZmMyN2E3YzRiM2UwZmUxMzEzNzgwZjVkYjI4Njc3N2Q2NmE0Li45
Zjg2ZWJjOTNmNzY0ODFlZmY0ODJlODIzMzVkNmI5ZGRkNzUyZTk5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dQRVZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvd3BlL1dQRVZpZXcuaApAQCAtNDEsNiArNDEsNyBAQAogCiB0eXBlZGVm
IHN0cnVjdCBPcGFxdWVKU0NvbnRleHQqIEpTR2xvYmFsQ29udGV4dFJlZjsKIHR5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRJbnB1dE1ldGhvZENvbnRleHQgV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0Owor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXcgV2ViS2l0V2ViVmlldzsKIHN0cnVjdCB3cGVf
aW5wdXRfa2V5Ym9hcmRfZXZlbnQ7CiBzdHJ1Y3Qgd3BlX3ZpZXdfYmFja2VuZDsKIApAQCAtODgs
NiArODksNyBAQCBwdWJsaWM6CiAKICAgICBXZWJLaXQ6OldlYlBhZ2VQcm94eSYgcGFnZSgpIHsg
cmV0dXJuICptX3BhZ2VQcm94eTsgfQogCisgICAgQVBJOjpWaWV3Q2xpZW50JiBjbGllbnQoKSBj
b25zdCB7IHJldHVybiAqbV9jbGllbnQ7IH0KICAgICBzdHJ1Y3Qgd3BlX3ZpZXdfYmFja2VuZCog
YmFja2VuZCgpIHsgcmV0dXJuIG1fYmFja2VuZDsgfQogCiAgICAgY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRPcHRpb25NZW51LmggYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdE9wdGlvbk1lbnUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZmUy
ZWZmMDk0MTAwYzFkYzdkOGYxOGJjMzM2MTE3NTEyZjc4NTU5Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRPcHRpb25NZW51LmgKQEAgLTAs
MCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRl
ZmluZWQoX19XRUJLSVRfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoV0VCS0lUMl9DT01QSUxBVElP
TikKKyNlcnJvciAiT25seSA8d3BlL3dlYmtpdC5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHku
IgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0T3B0aW9uTWVudV9oCisjZGVmaW5lIFdlYktpdE9w
dGlvbk1lbnVfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3cGUvV2Vi
S2l0RGVmaW5lcy5oPgorI2luY2x1ZGUgPHdwZS9XZWJLaXRPcHRpb25NZW51SXRlbS5oPgorCitH
X0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfT1BUSU9OX01FTlUgICAgICAgICAg
ICAod2Via2l0X29wdGlvbl9tZW51X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9PUFRJT05f
TUVOVShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBX
RUJLSVRfVFlQRV9PUFRJT05fTUVOVSwgV2ViS2l0T3B0aW9uTWVudSkpCisjZGVmaW5lIFdFQktJ
VF9JU19PUFRJT05fTUVOVShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBF
KChvYmopLCBXRUJLSVRfVFlQRV9PUFRJT05fTUVOVSkpCisjZGVmaW5lIFdFQktJVF9PUFRJT05f
TUVOVV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBX
RUJLSVRfVFlQRV9PUFRJT05fTUVOVSwgV2ViS2l0T3B0aW9uTWVudUNsYXNzKSkKKyNkZWZpbmUg
V0VCS0lUX0lTX09QVElPTl9NRU5VX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZ
UEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX09QVElPTl9NRU5VKSkKKyNkZWZpbmUgV0VCS0lUX09Q
VElPTl9NRU5VX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2Jq
KSwgIFdFQktJVF9UWVBFX09QVElPTl9NRU5VLCBXZWJLaXRPcHRpb25NZW51Q2xhc3MpKQorCit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0T3B0aW9uTWVudSAgICAgICAgV2ViS2l0T3B0aW9uTWVudTsK
K3R5cGVkZWYgc3RydWN0IF9XZWJLaXRPcHRpb25NZW51Q2xhc3MgICBXZWJLaXRPcHRpb25NZW51
Q2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0T3B0aW9uTWVudVByaXZhdGUgV2ViS2l0T3B0
aW9uTWVudVByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0T3B0aW9uTWVudSB7CisgICAgR09iamVj
dCBwYXJlbnQ7CisKKyAgICBXZWJLaXRPcHRpb25NZW51UHJpdmF0ZSAqcHJpdjsKK307CisKK3N0
cnVjdCBfV2ViS2l0T3B0aW9uTWVudUNsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2Ns
YXNzOworCisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQwKSAodm9pZCk7CisgICAgdm9pZCAo
Kl93ZWJraXRfcmVzZXJ2ZWQxKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQy
KSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQzKSAodm9pZCk7Cit9OworCitX
RUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X3R5cGUgICAgICAgKHZvaWQp
OworCitXRUJLSVRfQVBJIGd1aW50Cit3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X25faXRlbXMgICAg
KFdlYktpdE9wdGlvbk1lbnUgKm1lbnUpOworCitXRUJLSVRfQVBJIFdlYktpdE9wdGlvbk1lbnVJ
dGVtICoKK3dlYmtpdF9vcHRpb25fbWVudV9nZXRfaXRlbSAgICAgICAoV2ViS2l0T3B0aW9uTWVu
dSAqbWVudSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAg
ICAgICAgaW5kZXgpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9vcHRpb25fbWVudV9zZWxl
Y3RfaXRlbSAgICAoV2ViS2l0T3B0aW9uTWVudSAqbWVudSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgaW5kZXgpOworCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9vcHRpb25fbWVudV9hY3RpdmF0ZV9pdGVtICAoV2ViS2l0T3B0aW9uTWVudSAq
bWVudSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAg
ICAgaW5kZXgpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9vcHRpb25fbWVudV9jbG9zZSAg
ICAgICAgICAoV2ViS2l0T3B0aW9uTWVudSAqbWVudSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRPcHRp
b25NZW51SXRlbS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRPcHRp
b25NZW51SXRlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc4ZmYyN2Q2ZWQyYTA3ODVmYzgxN2FmNzVhYTM5ZTcz
OThhZGE3MjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
d3BlL1dlYktpdE9wdGlvbk1lbnVJdGVtLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRfSF9JTlNJREVf
XykgJiYgIWRlZmluZWQoV0VCS0lUMl9DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8d3BlL3dl
YmtpdC5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2Vi
S2l0T3B0aW9uTWVudUl0ZW1faAorI2RlZmluZSBXZWJLaXRPcHRpb25NZW51SXRlbV9oCisKKyNp
bmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdwZS9XZWJLaXREZWZpbmVzLmg+CisK
K0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9PUFRJT05fTUVOVV9JVEVNICh3
ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfdHlwZSgpKQorCit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0T3B0aW9uTWVudUl0ZW0gV2ViS2l0T3B0aW9uTWVudUl0ZW07CisKK1dFQktJVF9BUEkgR1R5
cGUKK3dlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF90eXBlICAgICAgICh2b2lkKTsKKworV0VC
S0lUX0FQSSBXZWJLaXRPcHRpb25NZW51SXRlbSAqCit3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9j
b3B5ICAgICAgICAgICAoV2ViS2l0T3B0aW9uTWVudUl0ZW0gKml0ZW0pOworCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9vcHRpb25fbWVudV9pdGVtX2ZyZWUgICAgICAgICAgIChXZWJLaXRPcHRp
b25NZW51SXRlbSAqaXRlbSk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0X29w
dGlvbl9tZW51X2l0ZW1fZ2V0X2xhYmVsICAgICAgKFdlYktpdE9wdGlvbk1lbnVJdGVtICppdGVt
KTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCit3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9n
ZXRfdG9vbHRpcCAgICAoV2ViS2l0T3B0aW9uTWVudUl0ZW0gKml0ZW0pOworCitXRUJLSVRfQVBJ
IGdib29sZWFuCit3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9sYWJlbCAoV2ViS2l0
T3B0aW9uTWVudUl0ZW0gKml0ZW0pOworCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfb3B0
aW9uX21lbnVfaXRlbV9pc19ncm91cF9jaGlsZCAoV2ViS2l0T3B0aW9uTWVudUl0ZW0gKml0ZW0p
OworCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19lbmFi
bGVkICAgICAoV2ViS2l0T3B0aW9uTWVudUl0ZW0gKml0ZW0pOworCitXRUJLSVRfQVBJIGdib29s
ZWFuCit3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19zZWxlY3RlZCAgICAoV2ViS2l0T3B0aW9u
TWVudUl0ZW0gKml0ZW0pOworCitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0UG9wdXBNZW51LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0UG9wdXBNZW51LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4yYWNmOWE2YTFkY2MyYzk4N2Y3YzJhZGM0NTMyNjBkNTJlZDQ0ZWUxCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRQb3B1cE1lbnUuY3Bw
CkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdFBvcHVwTWVudS5oIgorCisjaW5j
bHVkZSAiQVBJVmlld0NsaWVudC5oIgorI2luY2x1ZGUgIldQRVZpZXcuaCIKKyNpbmNsdWRlICJX
ZWJLaXRPcHRpb25NZW51UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdFdlYlZpZXdDbGllbnQu
aCIKKyNpbmNsdWRlICJXZWJLaXRXZWJWaWV3UHJpdmF0ZS5oIgorCituYW1lc3BhY2UgV2ViS2l0
IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitSZWY8V2ViS2l0UG9wdXBNZW51PiBXZWJL
aXRQb3B1cE1lbnU6OmNyZWF0ZShXS1dQRTo6VmlldyYgdmlldywgV2ViUG9wdXBNZW51UHJveHk6
OkNsaWVudCYgY2xpZW50KQoreworICAgIEFTU0VSVCh2aWV3LmNsaWVudCgpLmlzR0xpYkJhc2Vk
QVBJKCkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYktpdFBvcHVwTWVudSh2aWV3LCBj
bGllbnQpKTsKK30KKworV2ViS2l0UG9wdXBNZW51OjpXZWJLaXRQb3B1cE1lbnUoV0tXUEU6OlZp
ZXcmIHZpZXcsIFdlYlBvcHVwTWVudVByb3h5OjpDbGllbnQmIGNsaWVudCkKKyAgICA6IFdlYlBv
cHVwTWVudVByb3h5KGNsaWVudCkKKyAgICAsIG1fdmlldyh2aWV3KQoreworfQorCitzdGF0aWMg
dm9pZCBtZW51Q2xvc2VDYWxsYmFjayhXZWJLaXRQb3B1cE1lbnUqIHBvcHVwTWVudSkKK3sKKyAg
ICBwb3B1cE1lbnUtPmFjdGl2YXRlSXRlbShXVEY6Om51bGxvcHQpOworfQorCit2b2lkIFdlYktp
dFBvcHVwTWVudTo6c2hvd1BvcHVwTWVudShjb25zdCBJbnRSZWN0JiByZWN0LCBUZXh0RGlyZWN0
aW9uIGRpcmVjdGlvbiwgZG91YmxlIHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgVmVjdG9yPFdlYlBv
cHVwSXRlbT4mIGl0ZW1zLCBjb25zdCBQbGF0Zm9ybVBvcHVwTWVudURhdGEmIHBsYXRmb3JtRGF0
YSwgaW50MzJfdCBzZWxlY3RlZEluZGV4KQoreworICAgIEdSZWZQdHI8V2ViS2l0T3B0aW9uTWVu
dT4gbWVudSA9IHN0YXRpY19jYXN0PFdlYktpdFdlYlZpZXdDbGllbnQmPihtX3ZpZXcuY2xpZW50
KCkpLnNob3dPcHRpb25NZW51KCp0aGlzLCBpdGVtcywgc2VsZWN0ZWRJbmRleCk7CisgICAgaWYg
KG1lbnUpIHsKKyAgICAgICAgbV9tZW51ID0gV1RGTW92ZShtZW51KTsKKyAgICAgICAgZ19zaWdu
YWxfY29ubmVjdF9zd2FwcGVkKG1fbWVudS5nZXQoKSwgImNsb3NlIiwgR19DQUxMQkFDSyhtZW51
Q2xvc2VDYWxsYmFjayksIHRoaXMpOworICAgIH0KK30KKwordm9pZCBXZWJLaXRQb3B1cE1lbnU6
OmhpZGVQb3B1cE1lbnUoKQoreworICAgIGlmIChtX21lbnUpIHsKKyAgICAgICAgZ19zaWduYWxf
aGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fbWVudS5nZXQoKSwgR19TSUdOQUxfTUFUQ0hf
REFUQSwgMCwgMCwgbnVsbHB0ciwgbnVsbHB0ciwgdGhpcyk7CisgICAgICAgIHdlYmtpdF9vcHRp
b25fbWVudV9jbG9zZShtX21lbnUuZ2V0KCkpOworICAgIH0KK30KKwordm9pZCBXZWJLaXRQb3B1
cE1lbnU6OmNhbmNlbFRyYWNraW5nKCkKK3sKKyAgICBoaWRlUG9wdXBNZW51KCk7CisgICAgbV9t
ZW51ID0gbnVsbHB0cjsKK30KKwordm9pZCBXZWJLaXRQb3B1cE1lbnU6OnNlbGVjdEl0ZW0odW5z
aWduZWQgaXRlbUluZGV4KQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQt
PnNldFRleHRGcm9tSXRlbUZvclBvcHVwTWVudSh0aGlzLCBpdGVtSW5kZXgpOworICAgIG1fc2Vs
ZWN0ZWRJdGVtID0gaXRlbUluZGV4OworfQorCit2b2lkIFdlYktpdFBvcHVwTWVudTo6YWN0aXZh
dGVJdGVtKE9wdGlvbmFsPHVuc2lnbmVkPiBpdGVtSW5kZXgpCit7CisgICAgaWYgKG1fY2xpZW50
KQorICAgICAgICBtX2NsaWVudC0+dmFsdWVDaGFuZ2VkRm9yUG9wdXBNZW51KHRoaXMsIGl0ZW1J
bmRleC52YWx1ZU9yKG1fc2VsZWN0ZWRJdGVtLnZhbHVlT3IoLTEpKSk7CisgICAgaWYgKG1fbWVu
dSkgeworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9tZW51
LmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlz
KTsKKyAgICAgICAgbV9tZW51ID0gbnVsbHB0cjsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJL
aXRQb3B1cE1lbnUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0UG9w
dXBNZW51LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOThkZTc2ZDQ3ODEwNDYwMWNhZWYwMGM1MWZkNjBiMjhkNzE0
ODAwYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUv
V2ViS2l0UG9wdXBNZW51LmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldlYlBvcHVwTWVudVBy
b3h5LmgiCisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorCit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0T3B0aW9uTWVudSBXZWJLaXRPcHRpb25NZW51OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dFdlYlZpZXcgV2ViS2l0V2ViVmlldzsKKworbmFtZXNwYWNlIFdLV1BFIHsKK2NsYXNzIFZpZXc7
Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJLaXRQb3B1cE1lbnUgZmluYWwg
OiBwdWJsaWMgV2ViUG9wdXBNZW51UHJveHkgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8V2Vi
S2l0UG9wdXBNZW51PiBjcmVhdGUoV0tXUEU6OlZpZXcmLCBXZWJQb3B1cE1lbnVQcm94eTo6Q2xp
ZW50Jik7CisgICAgfldlYktpdFBvcHVwTWVudSgpID0gZGVmYXVsdDsKKworICAgIHZvaWQgc2Vs
ZWN0SXRlbSh1bnNpZ25lZCBpdGVtSW5kZXgpOworICAgIHZvaWQgYWN0aXZhdGVJdGVtKE9wdGlv
bmFsPHVuc2lnbmVkPiBpdGVtSW5kZXgpOworCitwcml2YXRlOgorICAgIFdlYktpdFBvcHVwTWVu
dShXS1dQRTo6VmlldyYsIFdlYlBvcHVwTWVudVByb3h5OjpDbGllbnQmKTsKKworICAgIHZvaWQg
c2hvd1BvcHVwTWVudShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgV2ViQ29yZTo6VGV4dERpcmVj
dGlvbiwgZG91YmxlIHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgVmVjdG9yPFdlYlBvcHVwSXRlbT4m
LCBjb25zdCBQbGF0Zm9ybVBvcHVwTWVudURhdGEmLCBpbnQzMl90IHNlbGVjdGVkSW5kZXgpIG92
ZXJyaWRlOworICAgIHZvaWQgaGlkZVBvcHVwTWVudSgpIG92ZXJyaWRlOworICAgIHZvaWQgY2Fu
Y2VsVHJhY2tpbmcoKSBvdmVycmlkZTsKKworICAgIFdLV1BFOjpWaWV3JiBtX3ZpZXc7CisgICAg
V2ViS2l0V2ViVmlldyogbV93ZWJWaWV3OworICAgIEdSZWZQdHI8V2ViS2l0T3B0aW9uTWVudT4g
bV9tZW51OworICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBtX3NlbGVjdGVkSXRlbTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL3dwZS9XZWJLaXRXZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3Bl
L1dlYktpdFdlYlZpZXcuaAppbmRleCAwMTc0MzRkZWJkZjcxNjIyM2Y3ZDZkMDFkNmQ3OTkzNzQ5
Y2I4ZDQ4Li5lM2Q5NzA5NGIxM2M4YzEwN2RjNTVmZWUxNzU1MzhkMTA0OTRlZmNjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYlZpZXcuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYlZpZXcuaApAQCAtNDEs
NiArNDEsNyBAQAogI2luY2x1ZGUgPHdwZS9XZWJLaXRKYXZhc2NyaXB0UmVzdWx0Lmg+CiAjaW5j
bHVkZSA8d3BlL1dlYktpdE5hdmlnYXRpb25BY3Rpb24uaD4KICNpbmNsdWRlIDx3cGUvV2ViS2l0
Tm90aWZpY2F0aW9uLmg+CisjaW5jbHVkZSA8d3BlL1dlYktpdE9wdGlvbk1lbnUuaD4KICNpbmNs
dWRlIDx3cGUvV2ViS2l0UGVybWlzc2lvblJlcXVlc3QuaD4KICNpbmNsdWRlIDx3cGUvV2ViS2l0
UG9saWN5RGVjaXNpb24uaD4KICNpbmNsdWRlIDx3cGUvV2ViS2l0U2NyaXB0RGlhbG9nLmg+CkBA
IC0yNDUsNyArMjQ2LDggQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3MgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFdlYlByb2Nl
c3NUZXJtaW5hdGlvblJlYXNvbiByZWFzb24pOwogICAgIGdib29sZWFuICAgICAgICgqIHVzZXJf
bWVzc2FnZV9yZWNlaXZlZCkgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgICAqd2Vi
X3ZpZXcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV2ViS2l0VXNlck1lc3NhZ2UgICAgICAgICAgICptZXNzYWdlKTsKLQorICAgIGdib29sZWFu
ICAgICAgICgqIHNob3dfb3B0aW9uX21lbnUpICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAg
ICAgICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViS2l0T3B0aW9uTWVudSAgICAgICAgICAgICptZW51KTsKIAog
ICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMCkgKHZvaWQpOwogICAgIHZvaWQgKCpfd2Via2l0
X3Jlc2VydmVkMSkgKHZvaWQpOwpAQCAtMjUzLDcgKzI1NSw2IEBAIHN0cnVjdCBfV2ViS2l0V2Vi
Vmlld0NsYXNzIHsKICAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDMpICh2b2lkKTsKICAgICB2
b2lkICgqX3dlYmtpdF9yZXNlcnZlZDQpICh2b2lkKTsKICAgICB2b2lkICgqX3dlYmtpdF9yZXNl
cnZlZDUpICh2b2lkKTsKLSAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDYpICh2b2lkKTsKIH07
CiAKIFdFQktJVF9BUEkgR1R5cGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS93cGUvV2ViS2l0V2ViVmlld0NsaWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL3dwZS9XZWJLaXRXZWJWaWV3Q2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGQzYWQ2Y2NiMDliM2Zm
MmM4ODRkYzdjNTkzNjg3MWU2ZjIxOGFjNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0V2ViVmlld0NsaWVudC5oCkBAIC0wLDAgKzEsNTMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJBUElWaWV3Q2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5k
bGVyLmg+CisKK25hbWVzcGFjZSBXS1dQRSB7CitjbGFzcyBWaWV3OworfQorCituYW1lc3BhY2Ug
V2ViS2l0IHsKK2NsYXNzIERvd25sb2FkUHJveHk7CitjbGFzcyBXZWJLaXRQb3B1cE1lbnU7Citj
bGFzcyBXZWJQb3B1cEl0ZW07CitzdHJ1Y3QgVXNlck1lc3NhZ2U7Cit9CisKK2NsYXNzIFdlYktp
dFdlYlZpZXdDbGllbnQgZmluYWwgOiBwdWJsaWMgQVBJOjpWaWV3Q2xpZW50IHsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBXZWJLaXRXZWJWaWV3
Q2xpZW50KFdlYktpdFdlYlZpZXcqKTsKKworICAgIEdSZWZQdHI8V2ViS2l0T3B0aW9uTWVudT4g
c2hvd09wdGlvbk1lbnUoV2ViS2l0OjpXZWJLaXRQb3B1cE1lbnUmLCBjb25zdCBWZWN0b3I8V2Vi
S2l0OjpXZWJQb3B1cEl0ZW0+JiwgaW50MzJfdCBzZWxlY3RlZEluZGV4KTsKKworcHJpdmF0ZToK
KyAgICBib29sIGlzR0xpYkJhc2VkQVBJKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisg
ICAgdm9pZCBmcmFtZURpc3BsYXllZChXS1dQRTo6VmlldyYpIG92ZXJyaWRlOworICAgIHZvaWQg
aGFuZGxlRG93bmxvYWRSZXF1ZXN0KFdLV1BFOjpWaWV3JiwgV2ViS2l0OjpEb3dubG9hZFByb3h5
Jikgb3ZlcnJpZGU7CisgICAgdm9pZCB3aWxsU3RhcnRMb2FkKFdLV1BFOjpWaWV3Jikgb3ZlcnJp
ZGU7CisgICAgdm9pZCBkaWRDaGFuZ2VQYWdlSUQoV0tXUEU6OlZpZXcmKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGRpZFJlY2VpdmVVc2VyTWVzc2FnZShXS1dQRTo6VmlldyYsIFdlYktpdDo6VXNlck1l
c3NhZ2UmJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJLaXQ6OlVzZXJNZXNzYWdlJiYpPiYm
KSBvdmVycmlkZTsKKworICAgIFdlYktpdFdlYlZpZXcqIG1fd2ViVmlldzsKK307CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL2RvY3Mvd3BlLTEuMC1zZWN0aW9u
cy50eHQgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL2RvY3Mvd3BlLTEuMC1zZWN0
aW9ucy50eHQKaW5kZXggMWQxZDU3YjE3MTg1N2VkODExMjUzMGUyNzZiMWVlYmEyYWJlZjM5My4u
ODNkZWYyNWE1NTA3YTcxMzZhZTY0ZmU2OWY0MTJmOWI1MTQ0MzcyNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9kb2NzL3dwZS0xLjAtc2VjdGlvbnMudHh0Cisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvZG9jcy93cGUtMS4wLXNlY3Rpb25z
LnR4dApAQCAtMTIzMCw2ICsxMjMwLDQ4IEBAIFdlYktpdENvbnRleHRNZW51SXRlbVByaXZhdGUK
IHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfdHlwZQogPC9TRUNUSU9OPgogCis8U0VDVElP
Tj4KKzxGSUxFPldlYktpdE9wdGlvbk1lbnU8L0ZJTEU+CitXZWJLaXRPcHRpb25NZW51Cit3ZWJr
aXRfb3B0aW9uX21lbnVfZ2V0X25faXRlbXMKK3dlYmtpdF9vcHRpb25fbWVudV9nZXRfaXRlbQor
d2Via2l0X29wdGlvbl9tZW51X3NlbGVjdF9pdGVtCit3ZWJraXRfb3B0aW9uX21lbnVfYWN0aXZh
dGVfaXRlbQord2Via2l0X29wdGlvbl9tZW51X2Nsb3NlCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJk
PgorV2ViS2l0T3B0aW9uTWVudUNsYXNzCitXRUJLSVRfVFlQRV9PUFRJT05fTUVOVQorV0VCS0lU
X09QVElPTl9NRU5VCitXRUJLSVRfSVNfT1BUSU9OX01FTlUKK1dFQktJVF9PUFRJT05fTUVOVV9D
TEFTUworV0VCS0lUX0lTX09QVElPTl9NRU5VX0NMQVNTCitXRUJLSVRfT1BUSU9OX01FTlVfR0VU
X0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+CitXZWJLaXRPcHRpb25NZW51UHJpdmF0ZQor
d2Via2l0X29wdGlvbl9tZW51X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJ
TEU+V2ViS2l0T3B0aW9uTWVudUl0ZW08L0ZJTEU+CitXZWJLaXRPcHRpb25NZW51SXRlbQord2Vi
a2l0X29wdGlvbl9tZW51X2l0ZW1fY29weQord2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZnJlZQor
d2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X2xhYmVsCit3ZWJraXRfb3B0aW9uX21lbnVfaXRl
bV9nZXRfdG9vbHRpcAord2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfbGFiZWwKK3dl
YmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2NoaWxkCit3ZWJraXRfb3B0aW9uX21lbnVf
aXRlbV9pc19lbmFibGVkCit3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19zZWxlY3RlZAorCis8
U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dFQktJVF9UWVBFX09QVElPTl9NRU5VX0lURU0KKworPFNV
QlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF90eXBlCis8L1NF
Q1RJT04+CisKIDxTRUNUSU9OPgogPEZJTEU+V2ViS2l0Rm9ybVN1Ym1pc3Npb25SZXF1ZXN0PC9G
SUxFPgogV2ViS2l0Rm9ybVN1Ym1pc3Npb25SZXF1ZXN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvd3BlL3dlYmtpdC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL3dwZS93ZWJraXQuaAppbmRleCAxNWE0YzFmZjFjNGFlZWU3ZDgwNzg1NmRiMGIzYTc0MDAy
ZTQyMWRkLi4wMmUyNTgyNTNlNDdmYmY2NTk0YzIwZjc0M2QwZmFlYWM4YTRlZWZlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL3dlYmtpdC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvd2Via2l0LmgKQEAgLTU5LDYgKzU5LDggQEAKICNp
bmNsdWRlIDx3cGUvV2ViS2l0TmV0d29ya1Byb3h5U2V0dGluZ3MuaD4KICNpbmNsdWRlIDx3cGUv
V2ViS2l0Tm90aWZpY2F0aW9uLmg+CiAjaW5jbHVkZSA8d3BlL1dlYktpdE5vdGlmaWNhdGlvblBl
cm1pc3Npb25SZXF1ZXN0Lmg+CisjaW5jbHVkZSA8d3BlL1dlYktpdE9wdGlvbk1lbnUuaD4KKyNp
bmNsdWRlIDx3cGUvV2ViS2l0T3B0aW9uTWVudUl0ZW0uaD4KICNpbmNsdWRlIDx3cGUvV2ViS2l0
UGVybWlzc2lvblJlcXVlc3QuaD4KICNpbmNsdWRlIDx3cGUvV2ViS2l0UGx1Z2luLmg+CiAjaW5j
bHVkZSA8d3BlL1dlYktpdFJlc3BvbnNlUG9saWN5RGVjaXNpb24uaD4KZGlmZiAtLWdpdCBhL1Rv
b2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA3YzFjN2Y2OTA3ZTJmODNhMTY5
MzdkN2JmZDhhMDFhOGVmNDI3ZWMzLi41YTU5YmM1MWU0NDY0M2FlNGJhYjdjMDk0MGIzMDAzNDMz
MzdmNTU4IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMzEgQEAKKzIwMjAtMDEtMjAgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0Bp
Z2FsaWEuY29tPgorCisgICAgICAgIFtXUEVdIEV4cG9zZSB0aGUgV2ViS2l0T3B0aW9uTWVudSBB
UElzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDYy
ODcKKworICAgICAgICBNb3ZlIFRlc3RPcHRpb25NZW51IHVuZGVyIHRoZSBXZWJLaXRHTGliIGRp
cmVjdG9yeSwgYWRkaW5nIHRoZQorICAgICAgICBhcHByb3ByaWF0ZSBhZGp1c3RtZW50cyBmb3Ig
dGhlIFdQRSB2YXJpYW50IG9mIHRoZSBBUEkKKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0R0xpYi9UZXN0T3B0aW9uTWVudS5jcHA6IFJlbmFtZWQgZnJvbSBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0T3B0aW9uTWVudS5jcHAuCisgICAgICAgIChP
cHRpb25NZW51VGVzdDo6T3B0aW9uTWVudVRlc3QpOgorICAgICAgICAoT3B0aW9uTWVudVRlc3Q6
On5PcHRpb25NZW51VGVzdCk6CisgICAgICAgIChPcHRpb25NZW51VGVzdDo6ZGVzdHJveU1lbnUp
OgorICAgICAgICAoT3B0aW9uTWVudVRlc3Q6OnNob3dPcHRpb25NZW51Q2FsbGJhY2spOgorICAg
ICAgICAoT3B0aW9uTWVudVRlc3Q6Om1lbnVDbG9zZUNhbGxiYWNrKToKKyAgICAgICAgKE9wdGlv
bk1lbnVUZXN0OjpzaG93T3B0aW9uTWVudSk6CisgICAgICAgIChPcHRpb25NZW51VGVzdDo6Y2xp
Y2tBdFBvc2l0aW9uQW5kV2FpdFVudGlsT3B0aW9uTWVudVNob3duKToKKyAgICAgICAgKE9wdGlv
bk1lbnVUZXN0OjpjbG9zZSk6CisgICAgICAgIChPcHRpb25NZW51VGVzdDo6YWN0aXZhdGVJdGVt
KToKKyAgICAgICAgKE9wdGlvbk1lbnVUZXN0OjpzZWxlY3RJdGVtKToKKyAgICAgICAgKHRlc3RP
cHRpb25NZW51U2ltcGxlKToKKyAgICAgICAgKHRlc3RPcHRpb25NZW51R3JvdXBzKToKKyAgICAg
ICAgKHRlc3RPcHRpb25NZW51QWN0aXZhdGUpOgorICAgICAgICAodGVzdE9wdGlvbk1lbnVTZWxl
Y3QpOgorICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKGFmdGVyQWxsKToKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL2dsaWIvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogVGVzdFdlYktp
dEFQSS9nbGliL1BsYXRmb3JtR1RLLmNtYWtlOgorCiAyMDIwLTAxLTE3ICBDYXRoaWUgQ2hlbiAg
PGNhdGhpZWNoZW5AaWdhbGlhLmNvbT4KIAogICAgICAgICBBZGQgc3VwcG9ydCBmb3Igc2Nyb2xs
IGJlaGF2aW9yIHBhcnNpbmcKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0R0xpYi9UZXN0T3B0aW9uTWVudS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdEdMaWIvVGVzdE9wdGlvbk1lbnUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg1ZmU1ZWNiMjU5NGIw
NGVlOTk0MTQzOTMwZTQ5YjhkYTViMzM0MmYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdE9wdGlvbk1lbnUuY3BwCkBAIC0wLDAgKzEs
MzI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKKworI2luY2x1ZGUgPHd0Zi9SdW5M
b29wLmg+CisKK2NsYXNzIE9wdGlvbk1lbnVUZXN0IDogcHVibGljIFdlYlZpZXdUZXN0IHsKK3B1
YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKE9wdGlvbk1lbnVUZXN0KTsKKworICAg
IE9wdGlvbk1lbnVUZXN0KCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJW
aWV3LCAic2hvdy1vcHRpb24tbWVudSIsIEdfQ0FMTEJBQ0soc2hvd09wdGlvbk1lbnVDYWxsYmFj
ayksIHRoaXMpOworICAgIH0KKworICAgIH5PcHRpb25NZW51VGVzdCgpCisgICAgeworICAgICAg
ICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV93ZWJWaWV3LCBHX1NJR05B
TF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKKyAgICAgICAgaWYgKG1fbWVudSkKKyAg
ICAgICAgICAgIGNsb3NlKCk7CisgICAgfQorCisgICAgdm9pZCBkZXN0cm95TWVudSgpCisgICAg
eworICAgICAgICBpZiAoIW1fbWVudSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBn
X3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9tZW51LmdldCgpLCBHX1NJR05B
TF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKKyAgICAgICAgbV9tZW51ID0gbnVsbHB0
cjsKKyAgICB9CisKKyNpZiBQTEFURk9STShHVEspCisgICAgc3RhdGljIGdib29sZWFuIHNob3dP
cHRpb25NZW51Q2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0T3B0aW9uTWVu
dSogbWVudSwgR2RrRXZlbnQqIGV2ZW50LCBHZGtSZWN0YW5nbGUqIHJlY3QsIE9wdGlvbk1lbnVU
ZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZSh0ZXN0LT5tX3dlYlZpZXcg
PT0gd2ViVmlldyk7CisgICAgICAgIGdfYXNzZXJ0X25vbm51bGwocmVjdCk7CisgICAgICAgIGdf
YXNzZXJ0X3RydWUoV0VCS0lUX0lTX09QVElPTl9NRU5VKG1lbnUpKTsKKyAgICAgICAgdGVzdC0+
YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChtZW51KSk7Cisg
ICAgICAgIHRlc3QtPnNob3dPcHRpb25NZW51KG1lbnUsIHJlY3QpOworICAgICAgICByZXR1cm4g
VFJVRTsKKyAgICB9CisjZWxpZiBQTEFURk9STShXUEUpCisgICAgc3RhdGljIGdib29sZWFuIHNo
b3dPcHRpb25NZW51Q2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0T3B0aW9u
TWVudSogbWVudSwgT3B0aW9uTWVudVRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBnX2Fzc2Vy
dF90cnVlKHRlc3QtPm1fd2ViVmlldyA9PSB3ZWJWaWV3KTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1
ZShXRUJLSVRfSVNfT1BUSU9OX01FTlUobWVudSkpOworICAgICAgICB0ZXN0LT5hc3NlcnRPYmpl
Y3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKG1lbnUpKTsKKyAgICAgICAgdGVz
dC0+c2hvd09wdGlvbk1lbnUobWVudSk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyNl
bmRpZgorCisgICAgc3RhdGljIHZvaWQgbWVudUNsb3NlQ2FsbGJhY2soV2ViS2l0T3B0aW9uTWVu
dSogbWVudSwgT3B0aW9uTWVudVRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBnX2Fzc2VydF90
cnVlKHRlc3QtPm1fbWVudS5nZXQoKSA9PSBtZW51KTsKKyAgICAgICAgdGVzdC0+ZGVzdHJveU1l
bnUoKTsKKyAgICB9CisKKyNpZiBQTEFURk9STShHVEspCisgICAgdm9pZCBzaG93T3B0aW9uTWVu
dShXZWJLaXRPcHRpb25NZW51KiBtZW51LCBHZGtSZWN0YW5nbGUqIHJlY3QpCisgICAgeworICAg
ICAgICBtX3JlY3RhbmdsZSA9ICpyZWN0OworICAgICAgICBtX21lbnUgPSBtZW51OworICAgICAg
ICBnX3NpZ25hbF9jb25uZWN0KG1fbWVudS5nZXQoKSwgImNsb3NlIiwgR19DQUxMQkFDSyhtZW51
Q2xvc2VDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxv
b3ApOworICAgIH0KKyNlbGlmIFBMQVRGT1JNKFdQRSkKKyAgICB2b2lkIHNob3dPcHRpb25NZW51
KFdlYktpdE9wdGlvbk1lbnUqIG1lbnUpCisgICAgeworICAgICAgICBtX21lbnUgPSBtZW51Owor
ICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fbWVudS5nZXQoKSwgImNsb3NlIiwgR19DQUxMQkFD
SyhtZW51Q2xvc2VDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1f
bWFpbkxvb3ApOworICAgIH0KKyNlbmRpZgorCisgICAgdm9pZCBjbGlja0F0UG9zaXRpb25BbmRX
YWl0VW50aWxPcHRpb25NZW51U2hvd24oaW50IHgsIGludCB5KQorICAgIHsKKyAgICAgICAgbV9t
ZW51ID0gbnVsbHB0cjsKKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCB4
LCB5XSB7IGNsaWNrTW91c2VCdXR0b24oeCwgeSk7IH0pOworICAgICAgICBnX21haW5fbG9vcF9y
dW4obV9tYWluTG9vcCk7CisgICAgfQorCisgICAgdm9pZCBjbG9zZSgpCisgICAgeworICAgICAg
ICBnX2Fzc2VydF9ub25udWxsKG1fbWVudS5nZXQoKSk7CisgICAgICAgIHdlYmtpdF9vcHRpb25f
bWVudV9jbG9zZShtX21lbnUuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF9udWxsKG1fbWVudS5n
ZXQoKSk7CisgICAgfQorCisgICAgdm9pZCBhY3RpdmF0ZUl0ZW0odW5zaWduZWQgaXRlbSkKKyAg
ICB7CisgICAgICAgIGdfYXNzZXJ0X25vbm51bGwobV9tZW51LmdldCgpKTsKKyAgICAgICAgd2Vi
a2l0X29wdGlvbl9tZW51X2FjdGl2YXRlX2l0ZW0obV9tZW51LmdldCgpLCBpdGVtKTsKKyAgICAg
ICAgZ19hc3NlcnRfbm9ubnVsbChtX21lbnUuZ2V0KCkpOworICAgIH0KKworICAgIHZvaWQgc2Vs
ZWN0SXRlbSh1bnNpZ25lZCBpdGVtKQorICAgIHsKKyAgICAgICAgZ19hc3NlcnRfbm9ubnVsbCht
X21lbnUuZ2V0KCkpOworICAgICAgICB3ZWJraXRfb3B0aW9uX21lbnVfc2VsZWN0X2l0ZW0obV9t
ZW51LmdldCgpLCBpdGVtKTsKKyAgICAgICAgZ19hc3NlcnRfbm9ubnVsbChtX21lbnUuZ2V0KCkp
OworICAgIH0KKworICAgIEdSZWZQdHI8V2ViS2l0T3B0aW9uTWVudT4gbV9tZW51OworI2lmIFBM
QVRGT1JNKEdUSykKKyAgICBHZGtSZWN0YW5nbGUgbV9yZWN0YW5nbGU7CisjZW5kaWYKK307CisK
K3N0YXRpYyB2b2lkIHRlc3RPcHRpb25NZW51U2ltcGxlKE9wdGlvbk1lbnVUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyIGh0bWxbXSA9CisgICAgICAg
ICI8aHRtbD48Ym9keT4iCisgICAgICAgICIgIDxzZWxlY3Qgc3R5bGU9J3Bvc2l0aW9uOmFic29s
dXRlOyBsZWZ0OjE7IHRvcDoxMCc+IgorICAgICAgICAiICAgIDxvcHRpb24gdGl0bGU9J1RoZSBG
b28gT3B0aW9uJz5Gb288L29wdGlvbj4iCisgICAgICAgICIgICAgPG9wdGlvbiBzZWxlY3RlZD5C
YXI8L29wdGlvbj4iCisgICAgICAgICIgICAgPG9wdGlvbiBkaXNhYmxlZD5CYXo8L29wdGlvbj4i
CisgICAgICAgICIgIDwvc2VsZWN0PjwvYm9keT48L2h0bWw+IjsKKyAgICB0ZXN0LT5zaG93SW5X
aW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKKyAgICB0ZXN0LT5sb2FkSHRtbChodG1sLCBudWxs
cHRyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPmNs
aWNrQXRQb3NpdGlvbkFuZFdhaXRVbnRpbE9wdGlvbk1lbnVTaG93big1LCAxNSk7CisgICAgZ19h
c3NlcnRfdHJ1ZShXRUJLSVRfSVNfT1BUSU9OX01FTlUodGVzdC0+bV9tZW51LmdldCgpKSk7Cisg
ICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9vcHRpb25fbWVudV9nZXRfbl9pdGVtcyh0ZXN0LT5t
X21lbnUuZ2V0KCkpLCA9PSwgMyk7CisgICAgYXV0byogaXRlbSA9IHdlYmtpdF9vcHRpb25fbWVu
dV9nZXRfaXRlbSh0ZXN0LT5tX21lbnUuZ2V0KCksIDApOworICAgIGdfYXNzZXJ0X2NtcHN0cih3
ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfbGFiZWwoaXRlbSksID09LCAiRm9vIik7CisgICAg
Z19hc3NlcnRfY21wc3RyKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF90b29sdGlwKGl0ZW0p
LCA9PSwgIlRoZSBGb28gT3B0aW9uIik7CisgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlv
bl9tZW51X2l0ZW1faXNfZ3JvdXBfbGFiZWwoaXRlbSkpOworICAgIGdfYXNzZXJ0X2ZhbHNlKHdl
YmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2NoaWxkKGl0ZW0pKTsKKyAgICBnX2Fzc2Vy
dF90cnVlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2VuYWJsZWQoaXRlbSkpOworICAgIGdf
YXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX3NlbGVjdGVkKGl0ZW0pKTsK
KyAgICBpdGVtID0gd2Via2l0X29wdGlvbl9tZW51X2dldF9pdGVtKHRlc3QtPm1fbWVudS5nZXQo
KSwgMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF9s
YWJlbChpdGVtKSwgPT0sICJCYXIiKTsKKyAgICBnX2Fzc2VydF9udWxsKHdlYmtpdF9vcHRpb25f
bWVudV9pdGVtX2dldF90b29sdGlwKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRf
b3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9sYWJlbChpdGVtKSk7CisgICAgZ19hc3NlcnRfZmFs
c2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfY2hpbGQoaXRlbSkpOworICAgIGdf
YXNzZXJ0X3RydWUod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZW5hYmxlZChpdGVtKSk7Cisg
ICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19zZWxlY3RlZChpdGVt
KSk7CisgICAgaXRlbSA9IHdlYmtpdF9vcHRpb25fbWVudV9nZXRfaXRlbSh0ZXN0LT5tX21lbnUu
Z2V0KCksIDIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9n
ZXRfbGFiZWwoaXRlbSksID09LCAiQmF6Iik7CisgICAgZ19hc3NlcnRfbnVsbCh3ZWJraXRfb3B0
aW9uX21lbnVfaXRlbV9nZXRfdG9vbHRpcChpdGVtKSk7CisgICAgZ19hc3NlcnRfZmFsc2Uod2Vi
a2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfbGFiZWwoaXRlbSkpOworICAgIGdfYXNzZXJ0
X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2NoaWxkKGl0ZW0pKTsKKyAg
ICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19lbmFibGVkKGl0ZW0p
KTsKKyAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19zZWxlY3Rl
ZChpdGVtKSk7CisKKyAgICB0ZXN0LT5jbG9zZSgpOworICAgIGdfYXNzZXJ0X251bGwodGVzdC0+
bV9tZW51LmdldCgpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdE9wdGlvbk1lbnVHcm91cHMoT3B0
aW9uTWVudVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGNo
YXIgaHRtbFtdID0KKyAgICAgICAgIjxodG1sPjxib2R5PiIKKyAgICAgICAgIiAgPHNlbGVjdCBz
dHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjEwJz4iCisgICAgICAgICIgICAg
PG9wdGlvbj5Sb290PC9vcHRpb24+IgorICAgICAgICAiICAgIDxvcHRncm91cCBsYWJlbD0nR3Jv
dXAgMSc+IgorICAgICAgICAiICAgICAgPG9wdGlvbj5DaGlsZCAxLTE8L29wdGlvbj4iCisgICAg
ICAgICIgICAgICA8b3B0aW9uIGRpc2FibGVkPkNoaWxkIDEtMjwvb3B0aW9uPiIKKyAgICAgICAg
IiAgICA8L29wdGdyb3VwPiIKKyAgICAgICAgIiAgICA8b3B0Z3JvdXAgbGFiZWw9J0dyb3VwIDIn
PiIKKyAgICAgICAgIiAgICAgIDxvcHRpb24gc2VsZWN0ZWQ+Q2hpbGQgMi0xPC9vcHRpb24+Igor
ICAgICAgICAiICAgICAgPG9wdGlvbj5DaGlsZCAyLTI8L29wdGlvbj4iCisgICAgICAgICIgICAg
PC9vcHRncm91cD4iCisgICAgICAgICIgICAgPG9wdGlvbj5UYWlsPC9vcHRpb24+IgorICAgICAg
ICAiICA8L3NlbGVjdD48L2JvZHk+PC9odG1sPiI7CisgICAgdGVzdC0+c2hvd0luV2luZG93QW5k
V2FpdFVudGlsTWFwcGVkKCk7CisgICAgdGVzdC0+bG9hZEh0bWwoaHRtbCwgbnVsbHB0cik7Cisg
ICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5jbGlja0F0UG9z
aXRpb25BbmRXYWl0VW50aWxPcHRpb25NZW51U2hvd24oNSwgMTUpOworICAgIGdfYXNzZXJ0X3Ry
dWUoV0VCS0lUX0lTX09QVElPTl9NRU5VKHRlc3QtPm1fbWVudS5nZXQoKSkpOworICAgIGdfYXNz
ZXJ0X2NtcGludCh3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X25faXRlbXModGVzdC0+bV9tZW51Lmdl
dCgpKSwgPT0sIDgpOworICAgIGF1dG8qIGl0ZW0gPSB3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X2l0
ZW0odGVzdC0+bV9tZW51LmdldCgpLCAwKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X29w
dGlvbl9tZW51X2l0ZW1fZ2V0X2xhYmVsKGl0ZW0pLCA9PSwgIlJvb3QiKTsKKyAgICBnX2Fzc2Vy
dF9udWxsKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF90b29sdGlwKGl0ZW0pKTsKKyAgICBn
X2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9sYWJlbChpdGVt
KSk7CisgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBf
Y2hpbGQoaXRlbSkpOworICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X29wdGlvbl9tZW51X2l0ZW1f
aXNfZW5hYmxlZChpdGVtKSk7CisgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51
X2l0ZW1faXNfc2VsZWN0ZWQoaXRlbSkpOworICAgIGl0ZW0gPSB3ZWJraXRfb3B0aW9uX21lbnVf
Z2V0X2l0ZW0odGVzdC0+bV9tZW51LmdldCgpLCAxKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X2xhYmVsKGl0ZW0pLCA9PSwgIkdyb3VwIDEiKTsKKyAg
ICBnX2Fzc2VydF9udWxsKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF90b29sdGlwKGl0ZW0p
KTsKKyAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2xh
YmVsKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9p
c19ncm91cF9jaGlsZChpdGVtKSk7CisgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9t
ZW51X2l0ZW1faXNfZW5hYmxlZChpdGVtKSk7CisgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29w
dGlvbl9tZW51X2l0ZW1faXNfc2VsZWN0ZWQoaXRlbSkpOworICAgIGl0ZW0gPSB3ZWJraXRfb3B0
aW9uX21lbnVfZ2V0X2l0ZW0odGVzdC0+bV9tZW51LmdldCgpLCAyKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X2xhYmVsKGl0ZW0pLCA9PSwgIkNoaWxk
IDEtMSIpOworICAgIGdfYXNzZXJ0X251bGwod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X3Rv
b2x0aXAoaXRlbSkpOworICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVt
X2lzX2dyb3VwX2xhYmVsKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF9vcHRpb25f
bWVudV9pdGVtX2lzX2dyb3VwX2NoaWxkKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF90cnVlKHdlYmtp
dF9vcHRpb25fbWVudV9pdGVtX2lzX2VuYWJsZWQoaXRlbSkpOworICAgIGdfYXNzZXJ0X2ZhbHNl
KHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX3NlbGVjdGVkKGl0ZW0pKTsKKyAgICBpdGVtID0g
d2Via2l0X29wdGlvbl9tZW51X2dldF9pdGVtKHRlc3QtPm1fbWVudS5nZXQoKSwgMyk7CisgICAg
Z19hc3NlcnRfY21wc3RyKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF9sYWJlbChpdGVtKSwg
PT0sICJDaGlsZCAxLTIiKTsKKyAgICBnX2Fzc2VydF9udWxsKHdlYmtpdF9vcHRpb25fbWVudV9p
dGVtX2dldF90b29sdGlwKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9u
X21lbnVfaXRlbV9pc19ncm91cF9sYWJlbChpdGVtKSk7CisgICAgZ19hc3NlcnRfdHJ1ZSh3ZWJr
aXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9jaGlsZChpdGVtKSk7CisgICAgZ19hc3NlcnRf
ZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZW5hYmxlZChpdGVtKSk7CisgICAgZ19h
c3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfc2VsZWN0ZWQoaXRlbSkpOwor
ICAgIGl0ZW0gPSB3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X2l0ZW0odGVzdC0+bV9tZW51LmdldCgp
LCA0KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X2xh
YmVsKGl0ZW0pLCA9PSwgIkdyb3VwIDIiKTsKKyAgICBnX2Fzc2VydF9udWxsKHdlYmtpdF9vcHRp
b25fbWVudV9pdGVtX2dldF90b29sdGlwKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF90cnVlKHdlYmtp
dF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2xhYmVsKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF9m
YWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9jaGlsZChpdGVtKSk7CisgICAg
Z19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZW5hYmxlZChpdGVtKSk7
CisgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfc2VsZWN0ZWQo
aXRlbSkpOworICAgIGl0ZW0gPSB3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X2l0ZW0odGVzdC0+bV9t
ZW51LmdldCgpLCA1KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X29wdGlvbl9tZW51X2l0
ZW1fZ2V0X2xhYmVsKGl0ZW0pLCA9PSwgIkNoaWxkIDItMSIpOworICAgIGdfYXNzZXJ0X251bGwo
d2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X3Rvb2x0aXAoaXRlbSkpOworICAgIGdfYXNzZXJ0
X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2xhYmVsKGl0ZW0pKTsKKyAg
ICBnX2Fzc2VydF90cnVlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2NoaWxkKGl0
ZW0pKTsKKyAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2VuYWJs
ZWQoaXRlbSkpOworICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNf
c2VsZWN0ZWQoaXRlbSkpOworICAgIGl0ZW0gPSB3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X2l0ZW0o
dGVzdC0+bV9tZW51LmdldCgpLCA2KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X29wdGlv
bl9tZW51X2l0ZW1fZ2V0X2xhYmVsKGl0ZW0pLCA9PSwgIkNoaWxkIDItMiIpOworICAgIGdfYXNz
ZXJ0X251bGwod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X3Rvb2x0aXAoaXRlbSkpOworICAg
IGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2xhYmVsKGl0
ZW0pKTsKKyAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3Vw
X2NoaWxkKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVt
X2lzX2VuYWJsZWQoaXRlbSkpOworICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVu
dV9pdGVtX2lzX3NlbGVjdGVkKGl0ZW0pKTsKKyAgICBpdGVtID0gd2Via2l0X29wdGlvbl9tZW51
X2dldF9pdGVtKHRlc3QtPm1fbWVudS5nZXQoKSwgNyk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdl
YmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF9sYWJlbChpdGVtKSwgPT0sICJUYWlsIik7CisgICAg
Z19hc3NlcnRfbnVsbCh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfdG9vbHRpcChpdGVtKSk7
CisgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfbGFi
ZWwoaXRlbSkpOworICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lz
X2dyb3VwX2NoaWxkKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF9vcHRpb25fbWVu
dV9pdGVtX2lzX2VuYWJsZWQoaXRlbSkpOworICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRp
b25fbWVudV9pdGVtX2lzX3NlbGVjdGVkKGl0ZW0pKTsKK30KKworc3RhdGljIHZvaWQgdGVzdE9w
dGlvbk1lbnVBY3RpdmF0ZShPcHRpb25NZW51VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sK
KyAgICBzdGF0aWMgY29uc3QgY2hhciBodG1sW10gPQorICAgICAgICAiPGh0bWw+PGJvZHk+Igor
ICAgICAgICAiICA8c2VsZWN0IGlkPSdjb21ibycgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBs
ZWZ0OjE7IHRvcDoxMCc+IgorICAgICAgICAiICAgIDxvcHRpb24+Rm9vPC9vcHRpb24+IgorICAg
ICAgICAiICAgIDxvcHRpb24+QmFyPC9vcHRpb24+IgorICAgICAgICAiICAgIDxvcHRpb24+QmF6
PC9vcHRpb24+IgorICAgICAgICAiICA8L3NlbGVjdD48L2JvZHk+PC9odG1sPiI7CisgICAgdGVz
dC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7CisgICAgdGVzdC0+bG9hZEh0bWwo
aHRtbCwgbnVsbHB0cik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAg
ICB0ZXN0LT5jbGlja0F0UG9zaXRpb25BbmRXYWl0VW50aWxPcHRpb25NZW51U2hvd24oNSwgMTUp
OworICAgIGdfYXNzZXJ0X3RydWUoV0VCS0lUX0lTX09QVElPTl9NRU5VKHRlc3QtPm1fbWVudS5n
ZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X25faXRl
bXModGVzdC0+bV9tZW51LmdldCgpKSwgPT0sIDMpOworICAgIHRlc3QtPmFjdGl2YXRlSXRlbSgx
KTsKKyAgICBhdXRvKiByZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmlu
aXNoZWQoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb21ibycpLnNlbGVjdGVkSW5kZXgiLCBu
dWxscHRyKTsKKyAgICBnX2Fzc2VydF9ub25udWxsKHJlc3VsdCk7CisgICAgZ19hc3NlcnRfY21w
ZmxvYXQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb051bWJlcihyZXN1bHQpLCA9PSwg
MSk7CisKKyAgICAvLyBXZSBzaG91bGQgY2xvc2UgdGhlIG1lbnUgYWZ0ZXIgYWN0aXZhdGUsIGZ1
cnRoZXIgYWN0aXZhdGVzIHdpbGwgYmUgaWdub3JlZC4KKyAgICB0ZXN0LT5hY3RpdmF0ZUl0ZW0o
Mik7CisgICAgcmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVk
KCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29tYm8nKS5zZWxlY3RlZEluZGV4IiwgbnVsbHB0
cik7CisgICAgZ19hc3NlcnRfbm9ubnVsbChyZXN1bHQpOworICAgIGdfYXNzZXJ0X2NtcGZsb2F0
KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9OdW1iZXIocmVzdWx0KSwgPT0sIDEpOwor
CisgICAgdGVzdC0+Y2xvc2UoKTsKK30KKworc3RhdGljIHZvaWQgdGVzdE9wdGlvbk1lbnVTZWxl
Y3QoT3B0aW9uTWVudVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RhdGljIGNv
bnN0IGNoYXIgaHRtbFtdID0KKyAgICAgICAgIjxodG1sPjxib2R5PiIKKyAgICAgICAgIiAgPHNl
bGVjdCBpZD0nY29tYm8nIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MTAn
PiIKKyAgICAgICAgIiAgICA8b3B0aW9uPkZvbzwvb3B0aW9uPiIKKyAgICAgICAgIiAgICA8b3B0
aW9uPkJhcjwvb3B0aW9uPiIKKyAgICAgICAgIiAgICA8b3B0aW9uPkJhejwvb3B0aW9uPiIKKyAg
ICAgICAgIiAgPC9zZWxlY3Q+PC9ib2R5PjwvaHRtbD4iOworICAgIHRlc3QtPnNob3dJbldpbmRv
d0FuZFdhaXRVbnRpbE1hcHBlZCgpOworICAgIHRlc3QtPmxvYWRIdG1sKGh0bWwsIG51bGxwdHIp
OworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+Y2xpY2tB
dFBvc2l0aW9uQW5kV2FpdFVudGlsT3B0aW9uTWVudVNob3duKDUsIDE1KTsKKyAgICBnX2Fzc2Vy
dF90cnVlKFdFQktJVF9JU19PUFRJT05fTUVOVSh0ZXN0LT5tX21lbnUuZ2V0KCkpKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQod2Via2l0X29wdGlvbl9tZW51X2dldF9uX2l0ZW1zKHRlc3QtPm1fbWVu
dS5nZXQoKSksID09LCAzKTsKKworICAgIC8vIFNlbGVjdCBpdGVtIGNoYW5nZXMgdGhlIGNvbWJv
IHRleHQsIGJ1dCBub3QgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtLgorICAgIHRlc3QtPnNl
bGVjdEl0ZW0oMik7CisgICAgYXV0byogcmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdh
aXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29tYm8nKS5zZWxlY3Rl
ZEluZGV4IiwgbnVsbHB0cik7CisgICAgZ19hc3NlcnRfbm9ubnVsbChyZXN1bHQpOworICAgIGdf
YXNzZXJ0X2NtcGZsb2F0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9OdW1iZXIocmVz
dWx0KSwgPT0sIDApOworCisgICAgLy8gSXQgY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4K
KyAgICB0ZXN0LT5zZWxlY3RJdGVtKDEpOworICAgIHJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3Jp
cHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbWJvJyku
c2VsZWN0ZWRJbmRleCIsIG51bGxwdHIpOworICAgIGdfYXNzZXJ0X25vbm51bGwocmVzdWx0KTsK
KyAgICBnX2Fzc2VydF9jbXBmbG9hdChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvTnVt
YmVyKHJlc3VsdCksID09LCAwKTsKKworICAgIC8vIEFuZCBjbG9zaW5nIHRoZSBtZW51IGFjdGl2
YXRlcyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW0uCisgICAgdGVzdC0+Y2xvc2UoKTsKKyAg
ICByZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdjb21ibycpLnNlbGVjdGVkSW5kZXgiLCBudWxscHRyKTsKKyAg
ICBnX2Fzc2VydF9ub25udWxsKHJlc3VsdCk7CisgICAgZ19hc3NlcnRfY21wZmxvYXQoV2ViVmll
d1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb051bWJlcihyZXN1bHQpLCA9PSwgMSk7Cit9CisKK3Zv
aWQgYmVmb3JlQWxsKCkKK3sKKyAgICBPcHRpb25NZW51VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3
IiwgIm9wdGlvbi1tZW51LXNpbXBsZSIsIHRlc3RPcHRpb25NZW51U2ltcGxlKTsKKyAgICBPcHRp
b25NZW51VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgIm9wdGlvbi1tZW51LWdyb3VwcyIsIHRl
c3RPcHRpb25NZW51R3JvdXBzKTsKKyAgICBPcHRpb25NZW51VGVzdDo6YWRkKCJXZWJLaXRXZWJW
aWV3IiwgIm9wdGlvbi1tZW51LWFjdGl2YXRlIiwgdGVzdE9wdGlvbk1lbnVBY3RpdmF0ZSk7Cisg
ICAgT3B0aW9uTWVudVRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJvcHRpb24tbWVudS1zZWxl
Y3QiLCB0ZXN0T3B0aW9uTWVudVNlbGVjdCk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworfQpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvVGVzdE9wdGlv
bk1lbnUuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvVGVzdE9wdGlv
bk1lbnUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1N2MxYzlkMzI3OTM4MTdl
YjM0NjRlYWIyOTdjMmU0NTg5M2M4ZWYxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL1Rlc3RP
cHRpb25NZW51LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMwNSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiV2ViVmlld1Rlc3QuaCIKLQotI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+Ci0KLWNsYXNzIE9w
dGlvbk1lbnVUZXN0IDogcHVibGljIFdlYlZpZXdUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dM
SUJfVEVTVF9GSVhUVVJFKE9wdGlvbk1lbnVUZXN0KTsKLQotICAgIE9wdGlvbk1lbnVUZXN0KCkK
LSAgICB7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAic2hvdy1vcHRpb24t
bWVudSIsIEdfQ0FMTEJBQ0soc2hvd09wdGlvbk1lbnVDYWxsYmFjayksIHRoaXMpOwotICAgIH0K
LQotICAgIH5PcHRpb25NZW51VGVzdCgpCi0gICAgewotICAgICAgICBnX3NpZ25hbF9oYW5kbGVy
c19kaXNjb25uZWN0X21hdGNoZWQobV93ZWJWaWV3LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAw
LCAwLCAwLCB0aGlzKTsKLSAgICAgICAgaWYgKG1fbWVudSkKLSAgICAgICAgICAgIGNsb3NlKCk7
Ci0gICAgfQotCi0gICAgdm9pZCBkZXN0cm95TWVudSgpCi0gICAgewotICAgICAgICBpZiAoIW1f
bWVudSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19k
aXNjb25uZWN0X21hdGNoZWQobV9tZW51LmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAw
LCAwLCAwLCB0aGlzKTsKLSAgICAgICAgbV9tZW51ID0gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBz
dGF0aWMgZ2Jvb2xlYW4gc2hvd09wdGlvbk1lbnVDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3LCBXZWJLaXRPcHRpb25NZW51KiBtZW51LCBHZGtFdmVudCogZXZlbnQsIEdka1JlY3Rhbmds
ZSogcmVjdCwgT3B0aW9uTWVudVRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICBnX2Fzc2VydF90
cnVlKHRlc3QtPm1fd2ViVmlldyA9PSB3ZWJWaWV3KTsKLSAgICAgICAgZ19hc3NlcnRfbm9ubnVs
bChyZWN0KTsKLSAgICAgICAgZ19hc3NlcnRfdHJ1ZShXRUJLSVRfSVNfT1BUSU9OX01FTlUobWVu
dSkpOwotICAgICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVz
KEdfT0JKRUNUKG1lbnUpKTsKLSAgICAgICAgdGVzdC0+c2hvd09wdGlvbk1lbnUobWVudSwgcmVj
dCk7Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIG1lbnVD
bG9zZUNhbGxiYWNrKFdlYktpdE9wdGlvbk1lbnUqIG1lbnUsIE9wdGlvbk1lbnVUZXN0KiB0ZXN0
KQotICAgIHsKLSAgICAgICAgZ19hc3NlcnRfdHJ1ZSh0ZXN0LT5tX21lbnUuZ2V0KCkgPT0gbWVu
dSk7Ci0gICAgICAgIHRlc3QtPmRlc3Ryb3lNZW51KCk7Ci0gICAgfQotCi0gICAgdm9pZCBzaG93
T3B0aW9uTWVudShXZWJLaXRPcHRpb25NZW51KiBtZW51LCBHZGtSZWN0YW5nbGUqIHJlY3QpCi0g
ICAgewotICAgICAgICBtX3JlY3RhbmdsZSA9ICpyZWN0OwotICAgICAgICBtX21lbnUgPSBtZW51
OwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fbWVudS5nZXQoKSwgImNsb3NlIiwgR19DQUxM
QkFDSyhtZW51Q2xvc2VDYWxsYmFjayksIHRoaXMpOwotICAgICAgICBnX21haW5fbG9vcF9xdWl0
KG1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIHZvaWQgY2xpY2tBdFBvc2l0aW9uQW5kV2FpdFVu
dGlsT3B0aW9uTWVudVNob3duKGludCB4LCBpbnQgeSkKLSAgICB7Ci0gICAgICAgIG1fbWVudSA9
IG51bGxwdHI7Ci0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgeCwgeV0g
eyBjbGlja01vdXNlQnV0dG9uKHgsIHkpOyB9KTsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1f
bWFpbkxvb3ApOwotICAgIH0KLQotICAgIHZvaWQgY2xvc2UoKQotICAgIHsKLSAgICAgICAgZ19h
c3NlcnRfbm9ubnVsbChtX21lbnUuZ2V0KCkpOwotICAgICAgICB3ZWJraXRfb3B0aW9uX21lbnVf
Y2xvc2UobV9tZW51LmdldCgpKTsKLSAgICAgICAgZ19hc3NlcnRfbnVsbChtX21lbnUuZ2V0KCkp
OwotICAgIH0KLQotICAgIHZvaWQgYWN0aXZhdGVJdGVtKHVuc2lnbmVkIGl0ZW0pCi0gICAgewot
ICAgICAgICBnX2Fzc2VydF9ub25udWxsKG1fbWVudS5nZXQoKSk7Ci0gICAgICAgIHdlYmtpdF9v
cHRpb25fbWVudV9hY3RpdmF0ZV9pdGVtKG1fbWVudS5nZXQoKSwgaXRlbSk7Ci0gICAgICAgIGdf
YXNzZXJ0X25vbm51bGwobV9tZW51LmdldCgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNlbGVjdEl0
ZW0odW5zaWduZWQgaXRlbSkKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0X25vbm51bGwobV9tZW51
LmdldCgpKTsKLSAgICAgICAgd2Via2l0X29wdGlvbl9tZW51X3NlbGVjdF9pdGVtKG1fbWVudS5n
ZXQoKSwgaXRlbSk7Ci0gICAgICAgIGdfYXNzZXJ0X25vbm51bGwobV9tZW51LmdldCgpKTsKLSAg
ICB9Ci0KLSAgICBHUmVmUHRyPFdlYktpdE9wdGlvbk1lbnU+IG1fbWVudTsKLSAgICBHZGtSZWN0
YW5nbGUgbV9yZWN0YW5nbGU7Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0T3B0aW9uTWVudVNpbXBs
ZShPcHRpb25NZW51VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBzdGF0aWMgY29u
c3QgY2hhciBodG1sW10gPQotICAgICAgICAiPGh0bWw+PGJvZHk+IgotICAgICAgICAiICA8c2Vs
ZWN0IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MTAnPiIKLSAgICAgICAg
IiAgICA8b3B0aW9uIHRpdGxlPSdUaGUgRm9vIE9wdGlvbic+Rm9vPC9vcHRpb24+IgotICAgICAg
ICAiICAgIDxvcHRpb24gc2VsZWN0ZWQ+QmFyPC9vcHRpb24+IgotICAgICAgICAiICAgIDxvcHRp
b24gZGlzYWJsZWQ+QmF6PC9vcHRpb24+IgotICAgICAgICAiICA8L3NlbGVjdD48L2JvZHk+PC9o
dG1sPiI7Ci0gICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7Ci0gICAg
dGVzdC0+bG9hZEh0bWwoaHRtbCwgbnVsbHB0cik7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZp
bmlzaGVkKCk7Ci0KLSAgICB0ZXN0LT5jbGlja0F0UG9zaXRpb25BbmRXYWl0VW50aWxPcHRpb25N
ZW51U2hvd24oNSwgMTUpOwotICAgIGdfYXNzZXJ0X3RydWUoV0VCS0lUX0lTX09QVElPTl9NRU5V
KHRlc3QtPm1fbWVudS5nZXQoKSkpOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfb3B0aW9u
X21lbnVfZ2V0X25faXRlbXModGVzdC0+bV9tZW51LmdldCgpKSwgPT0sIDMpOwotICAgIGF1dG8q
IGl0ZW0gPSB3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X2l0ZW0odGVzdC0+bV9tZW51LmdldCgpLCAw
KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X2xhYmVs
KGl0ZW0pLCA9PSwgIkZvbyIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfb3B0aW9uX21l
bnVfaXRlbV9nZXRfdG9vbHRpcChpdGVtKSwgPT0sICJUaGUgRm9vIE9wdGlvbiIpOwotICAgIGdf
YXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2xhYmVsKGl0ZW0p
KTsKLSAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9j
aGlsZChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9p
c19lbmFibGVkKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVf
aXRlbV9pc19zZWxlY3RlZChpdGVtKSk7Ci0gICAgaXRlbSA9IHdlYmtpdF9vcHRpb25fbWVudV9n
ZXRfaXRlbSh0ZXN0LT5tX21lbnUuZ2V0KCksIDEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJr
aXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfbGFiZWwoaXRlbSksID09LCAiQmFyIik7Ci0gICAgZ19h
c3NlcnRfbnVsbCh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfdG9vbHRpcChpdGVtKSk7Ci0g
ICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfbGFiZWwo
aXRlbSkpOwotICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dy
b3VwX2NoaWxkKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF9vcHRpb25fbWVudV9p
dGVtX2lzX2VuYWJsZWQoaXRlbSkpOwotICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X29wdGlvbl9t
ZW51X2l0ZW1faXNfc2VsZWN0ZWQoaXRlbSkpOwotICAgIGl0ZW0gPSB3ZWJraXRfb3B0aW9uX21l
bnVfZ2V0X2l0ZW0odGVzdC0+bV9tZW51LmdldCgpLCAyKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIo
d2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X2xhYmVsKGl0ZW0pLCA9PSwgIkJheiIpOwotICAg
IGdfYXNzZXJ0X251bGwod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X3Rvb2x0aXAoaXRlbSkp
OwotICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2xh
YmVsKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9p
c19ncm91cF9jaGlsZChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9t
ZW51X2l0ZW1faXNfZW5hYmxlZChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29w
dGlvbl9tZW51X2l0ZW1faXNfc2VsZWN0ZWQoaXRlbSkpOwotCi0gICAgdGVzdC0+Y2xvc2UoKTsK
LSAgICBnX2Fzc2VydF9udWxsKHRlc3QtPm1fbWVudS5nZXQoKSk7Ci19Ci0KLXN0YXRpYyB2b2lk
IHRlc3RPcHRpb25NZW51R3JvdXBzKE9wdGlvbk1lbnVUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQotewotICAgIHN0YXRpYyBjb25zdCBjaGFyIGh0bWxbXSA9Ci0gICAgICAgICI8aHRtbD48Ym9k
eT4iCi0gICAgICAgICIgIDxzZWxlY3Qgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7
IHRvcDoxMCc+IgotICAgICAgICAiICAgIDxvcHRpb24+Um9vdDwvb3B0aW9uPiIKLSAgICAgICAg
IiAgICA8b3B0Z3JvdXAgbGFiZWw9J0dyb3VwIDEnPiIKLSAgICAgICAgIiAgICAgIDxvcHRpb24+
Q2hpbGQgMS0xPC9vcHRpb24+IgotICAgICAgICAiICAgICAgPG9wdGlvbiBkaXNhYmxlZD5DaGls
ZCAxLTI8L29wdGlvbj4iCi0gICAgICAgICIgICAgPC9vcHRncm91cD4iCi0gICAgICAgICIgICAg
PG9wdGdyb3VwIGxhYmVsPSdHcm91cCAyJz4iCi0gICAgICAgICIgICAgICA8b3B0aW9uIHNlbGVj
dGVkPkNoaWxkIDItMTwvb3B0aW9uPiIKLSAgICAgICAgIiAgICAgIDxvcHRpb24+Q2hpbGQgMi0y
PC9vcHRpb24+IgotICAgICAgICAiICAgIDwvb3B0Z3JvdXA+IgotICAgICAgICAiICAgIDxvcHRp
b24+VGFpbDwvb3B0aW9uPiIKLSAgICAgICAgIiAgPC9zZWxlY3Q+PC9ib2R5PjwvaHRtbD4iOwot
ICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOwotICAgIHRlc3QtPmxv
YWRIdG1sKGh0bWwsIG51bGxwdHIpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgp
OwotCi0gICAgdGVzdC0+Y2xpY2tBdFBvc2l0aW9uQW5kV2FpdFVudGlsT3B0aW9uTWVudVNob3du
KDUsIDE1KTsKLSAgICBnX2Fzc2VydF90cnVlKFdFQktJVF9JU19PUFRJT05fTUVOVSh0ZXN0LT5t
X21lbnUuZ2V0KCkpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X29wdGlvbl9tZW51X2dl
dF9uX2l0ZW1zKHRlc3QtPm1fbWVudS5nZXQoKSksID09LCA4KTsKLSAgICBhdXRvKiBpdGVtID0g
d2Via2l0X29wdGlvbl9tZW51X2dldF9pdGVtKHRlc3QtPm1fbWVudS5nZXQoKSwgMCk7Ci0gICAg
Z19hc3NlcnRfY21wc3RyKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF9sYWJlbChpdGVtKSwg
PT0sICJSb290Iik7Ci0gICAgZ19hc3NlcnRfbnVsbCh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9n
ZXRfdG9vbHRpcChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51
X2l0ZW1faXNfZ3JvdXBfbGFiZWwoaXRlbSkpOwotICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9v
cHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2NoaWxkKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF90cnVl
KHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2VuYWJsZWQoaXRlbSkpOwotICAgIGdfYXNzZXJ0
X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX3NlbGVjdGVkKGl0ZW0pKTsKLSAgICBp
dGVtID0gd2Via2l0X29wdGlvbl9tZW51X2dldF9pdGVtKHRlc3QtPm1fbWVudS5nZXQoKSwgMSk7
Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF9sYWJlbChp
dGVtKSwgPT0sICJHcm91cCAxIik7Ci0gICAgZ19hc3NlcnRfbnVsbCh3ZWJraXRfb3B0aW9uX21l
bnVfaXRlbV9nZXRfdG9vbHRpcChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfb3B0
aW9uX21lbnVfaXRlbV9pc19ncm91cF9sYWJlbChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfZmFsc2Uo
d2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfY2hpbGQoaXRlbSkpOwotICAgIGdfYXNz
ZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2VuYWJsZWQoaXRlbSkpOwotICAg
IGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX3NlbGVjdGVkKGl0ZW0p
KTsKLSAgICBpdGVtID0gd2Via2l0X29wdGlvbl9tZW51X2dldF9pdGVtKHRlc3QtPm1fbWVudS5n
ZXQoKSwgMik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dl
dF9sYWJlbChpdGVtKSwgPT0sICJDaGlsZCAxLTEiKTsKLSAgICBnX2Fzc2VydF9udWxsKHdlYmtp
dF9vcHRpb25fbWVudV9pdGVtX2dldF90b29sdGlwKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF9mYWxz
ZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9sYWJlbChpdGVtKSk7Ci0gICAgZ19h
c3NlcnRfdHJ1ZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9jaGlsZChpdGVtKSk7
Ci0gICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19lbmFibGVkKGl0
ZW0pKTsKLSAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19zZWxl
Y3RlZChpdGVtKSk7Ci0gICAgaXRlbSA9IHdlYmtpdF9vcHRpb25fbWVudV9nZXRfaXRlbSh0ZXN0
LT5tX21lbnUuZ2V0KCksIDMpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfb3B0aW9uX21l
bnVfaXRlbV9nZXRfbGFiZWwoaXRlbSksID09LCAiQ2hpbGQgMS0yIik7Ci0gICAgZ19hc3NlcnRf
bnVsbCh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfdG9vbHRpcChpdGVtKSk7Ci0gICAgZ19h
c3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfbGFiZWwoaXRlbSkp
OwotICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfY2hp
bGQoaXRlbSkpOwotICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lz
X2VuYWJsZWQoaXRlbSkpOwotICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9p
dGVtX2lzX3NlbGVjdGVkKGl0ZW0pKTsKLSAgICBpdGVtID0gd2Via2l0X29wdGlvbl9tZW51X2dl
dF9pdGVtKHRlc3QtPm1fbWVudS5nZXQoKSwgNCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtp
dF9vcHRpb25fbWVudV9pdGVtX2dldF9sYWJlbChpdGVtKSwgPT0sICJHcm91cCAyIik7Ci0gICAg
Z19hc3NlcnRfbnVsbCh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfdG9vbHRpcChpdGVtKSk7
Ci0gICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9sYWJl
bChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNf
Z3JvdXBfY2hpbGQoaXRlbSkpOwotICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVu
dV9pdGVtX2lzX2VuYWJsZWQoaXRlbSkpOwotICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRp
b25fbWVudV9pdGVtX2lzX3NlbGVjdGVkKGl0ZW0pKTsKLSAgICBpdGVtID0gd2Via2l0X29wdGlv
bl9tZW51X2dldF9pdGVtKHRlc3QtPm1fbWVudS5nZXQoKSwgNSk7Ci0gICAgZ19hc3NlcnRfY21w
c3RyKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF9sYWJlbChpdGVtKSwgPT0sICJDaGlsZCAy
LTEiKTsKLSAgICBnX2Fzc2VydF9udWxsKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF90b29s
dGlwKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9p
c19ncm91cF9sYWJlbChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfb3B0aW9uX21l
bnVfaXRlbV9pc19ncm91cF9jaGlsZChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRf
b3B0aW9uX21lbnVfaXRlbV9pc19lbmFibGVkKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF90cnVlKHdl
YmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX3NlbGVjdGVkKGl0ZW0pKTsKLSAgICBpdGVtID0gd2Vi
a2l0X29wdGlvbl9tZW51X2dldF9pdGVtKHRlc3QtPm1fbWVudS5nZXQoKSwgNik7Ci0gICAgZ19h
c3NlcnRfY21wc3RyKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF9sYWJlbChpdGVtKSwgPT0s
ICJDaGlsZCAyLTIiKTsKLSAgICBnX2Fzc2VydF9udWxsKHdlYmtpdF9vcHRpb25fbWVudV9pdGVt
X2dldF90b29sdGlwKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21l
bnVfaXRlbV9pc19ncm91cF9sYWJlbChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRf
b3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9jaGlsZChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfdHJ1
ZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19lbmFibGVkKGl0ZW0pKTsKLSAgICBnX2Fzc2Vy
dF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19zZWxlY3RlZChpdGVtKSk7Ci0gICAg
aXRlbSA9IHdlYmtpdF9vcHRpb25fbWVudV9nZXRfaXRlbSh0ZXN0LT5tX21lbnUuZ2V0KCksIDcp
OwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfbGFiZWwo
aXRlbSksID09LCAiVGFpbCIpOwotICAgIGdfYXNzZXJ0X251bGwod2Via2l0X29wdGlvbl9tZW51
X2l0ZW1fZ2V0X3Rvb2x0aXAoaXRlbSkpOwotICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRp
b25fbWVudV9pdGVtX2lzX2dyb3VwX2xhYmVsKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF9mYWxzZSh3
ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9jaGlsZChpdGVtKSk7Ci0gICAgZ19hc3Nl
cnRfdHJ1ZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19lbmFibGVkKGl0ZW0pKTsKLSAgICBn
X2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19zZWxlY3RlZChpdGVtKSk7
Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RPcHRpb25NZW51QWN0aXZhdGUoT3B0aW9uTWVudVRlc3Qq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIgaHRtbFtdID0K
LSAgICAgICAgIjxodG1sPjxib2R5PiIKLSAgICAgICAgIiAgPHNlbGVjdCBpZD0nY29tYm8nIHN0
eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MTAnPiIKLSAgICAgICAgIiAgICA8
b3B0aW9uPkZvbzwvb3B0aW9uPiIKLSAgICAgICAgIiAgICA8b3B0aW9uPkJhcjwvb3B0aW9uPiIK
LSAgICAgICAgIiAgICA8b3B0aW9uPkJhejwvb3B0aW9uPiIKLSAgICAgICAgIiAgPC9zZWxlY3Q+
PC9ib2R5PjwvaHRtbD4iOwotICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBl
ZCgpOwotICAgIHRlc3QtPmxvYWRIdG1sKGh0bWwsIG51bGxwdHIpOwotICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgdGVzdC0+Y2xpY2tBdFBvc2l0aW9uQW5kV2FpdFVu
dGlsT3B0aW9uTWVudVNob3duKDUsIDE1KTsKLSAgICBnX2Fzc2VydF90cnVlKFdFQktJVF9JU19P
UFRJT05fTUVOVSh0ZXN0LT5tX21lbnUuZ2V0KCkpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Vi
a2l0X29wdGlvbl9tZW51X2dldF9uX2l0ZW1zKHRlc3QtPm1fbWVudS5nZXQoKSksID09LCAzKTsK
LSAgICB0ZXN0LT5hY3RpdmF0ZUl0ZW0oMSk7Ci0gICAgYXV0byogcmVzdWx0ID0gdGVzdC0+cnVu
SmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
Y29tYm8nKS5zZWxlY3RlZEluZGV4IiwgbnVsbHB0cik7Ci0gICAgZ19hc3NlcnRfbm9ubnVsbChy
ZXN1bHQpOwotICAgIGdfYXNzZXJ0X2NtcGZsb2F0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVz
dWx0VG9OdW1iZXIocmVzdWx0KSwgPT0sIDEpOwotCi0gICAgLy8gV2Ugc2hvdWxkIGNsb3NlIHRo
ZSBtZW51IGFmdGVyIGFjdGl2YXRlLCBmdXJ0aGVyIGFjdGl2YXRlcyB3aWxsIGJlIGlnbm9yZWQu
Ci0gICAgdGVzdC0+YWN0aXZhdGVJdGVtKDIpOwotICAgIHJlc3VsdCA9IHRlc3QtPnJ1bkphdmFT
Y3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbWJv
Jykuc2VsZWN0ZWRJbmRleCIsIG51bGxwdHIpOwotICAgIGdfYXNzZXJ0X25vbm51bGwocmVzdWx0
KTsKLSAgICBnX2Fzc2VydF9jbXBmbG9hdChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRv
TnVtYmVyKHJlc3VsdCksID09LCAxKTsKLQotICAgIHRlc3QtPmNsb3NlKCk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHRlc3RPcHRpb25NZW51U2VsZWN0KE9wdGlvbk1lbnVUZXN0KiB0ZXN0LCBnY29uc3Rw
b2ludGVyKQotewotICAgIHN0YXRpYyBjb25zdCBjaGFyIGh0bWxbXSA9Ci0gICAgICAgICI8aHRt
bD48Ym9keT4iCi0gICAgICAgICIgIDxzZWxlY3QgaWQ9J2NvbWJvJyBzdHlsZT0ncG9zaXRpb246
YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjEwJz4iCi0gICAgICAgICIgICAgPG9wdGlvbj5Gb288L29w
dGlvbj4iCi0gICAgICAgICIgICAgPG9wdGlvbj5CYXI8L29wdGlvbj4iCi0gICAgICAgICIgICAg
PG9wdGlvbj5CYXo8L29wdGlvbj4iCi0gICAgICAgICIgIDwvc2VsZWN0PjwvYm9keT48L2h0bWw+
IjsKLSAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKLSAgICB0ZXN0
LT5sb2FkSHRtbChodG1sLCBudWxscHRyKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNo
ZWQoKTsKLQotICAgIHRlc3QtPmNsaWNrQXRQb3NpdGlvbkFuZFdhaXRVbnRpbE9wdGlvbk1lbnVT
aG93big1LCAxNSk7Ci0gICAgZ19hc3NlcnRfdHJ1ZShXRUJLSVRfSVNfT1BUSU9OX01FTlUodGVz
dC0+bV9tZW51LmdldCgpKSk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9vcHRpb25fbWVu
dV9nZXRfbl9pdGVtcyh0ZXN0LT5tX21lbnUuZ2V0KCkpLCA9PSwgMyk7Ci0KLSAgICAvLyBTZWxl
Y3QgaXRlbSBjaGFuZ2VzIHRoZSBjb21ibyB0ZXh0LCBidXQgbm90IHRoZSBjdXJyZW50bHkgc2Vs
ZWN0ZWQgaXRlbS4KLSAgICB0ZXN0LT5zZWxlY3RJdGVtKDIpOwotICAgIGF1dG8qIHJlc3VsdCA9
IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ2NvbWJvJykuc2VsZWN0ZWRJbmRleCIsIG51bGxwdHIpOwotICAgIGdfYXNzZXJ0
X25vbm51bGwocmVzdWx0KTsKLSAgICBnX2Fzc2VydF9jbXBmbG9hdChXZWJWaWV3VGVzdDo6amF2
YXNjcmlwdFJlc3VsdFRvTnVtYmVyKHJlc3VsdCksID09LCAwKTsKLQotICAgIC8vIEl0IGNhbiBi
ZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuCi0gICAgdGVzdC0+c2VsZWN0SXRlbSgxKTsKLSAgICBy
ZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdjb21ibycpLnNlbGVjdGVkSW5kZXgiLCBudWxscHRyKTsKLSAgICBn
X2Fzc2VydF9ub25udWxsKHJlc3VsdCk7Ci0gICAgZ19hc3NlcnRfY21wZmxvYXQoV2ViVmlld1Rl
c3Q6OmphdmFzY3JpcHRSZXN1bHRUb051bWJlcihyZXN1bHQpLCA9PSwgMCk7Ci0KLSAgICAvLyBB
bmQgY2xvc2luZyB0aGUgbWVudSBhY3RpdmF0ZXMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVt
LgotICAgIHRlc3QtPmNsb3NlKCk7Ci0gICAgcmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFu
ZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29tYm8nKS5zZWxl
Y3RlZEluZGV4IiwgbnVsbHB0cik7Ci0gICAgZ19hc3NlcnRfbm9ubnVsbChyZXN1bHQpOwotICAg
IGdfYXNzZXJ0X2NtcGZsb2F0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9OdW1iZXIo
cmVzdWx0KSwgPT0sIDEpOwotfQotCi12b2lkIGJlZm9yZUFsbCgpCi17Ci0gICAgT3B0aW9uTWVu
dVRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJvcHRpb24tbWVudS1zaW1wbGUiLCB0ZXN0T3B0
aW9uTWVudVNpbXBsZSk7Ci0gICAgT3B0aW9uTWVudVRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIs
ICJvcHRpb24tbWVudS1ncm91cHMiLCB0ZXN0T3B0aW9uTWVudUdyb3Vwcyk7Ci0gICAgT3B0aW9u
TWVudVRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJvcHRpb24tbWVudS1hY3RpdmF0ZSIsIHRl
c3RPcHRpb25NZW51QWN0aXZhdGUpOwotICAgIE9wdGlvbk1lbnVUZXN0OjphZGQoIldlYktpdFdl
YlZpZXciLCAib3B0aW9uLW1lbnUtc2VsZWN0IiwgdGVzdE9wdGlvbk1lbnVTZWxlY3QpOwotfQot
Ci12b2lkIGFmdGVyQWxsKCkKLXsKLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
Z2xpYi9DTWFrZUxpc3RzLnR4dCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ2xpYi9DTWFrZUxpc3Rz
LnR4dAppbmRleCAxMmFhZjVmMTMyYzVmNzE4NWE2NGM4NTE1OWU2ZmQzYjMyNjhhMjdmLi4zNWJl
YmVlNjM5N2ZhNGE0MGQyMDFiMzBjOTQwYmRlN2UxOWRkNDNkIDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL2dsaWIvQ01ha2VMaXN0cy50eHQKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9nbGliL0NNYWtlTGlzdHMudHh0CkBAIC0xMjcsNiArMTI3LDcgQEAgQUREX1dLMl9URVNUKFRl
c3RFZGl0b3IgJHtUT09MU19ESVJ9L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0
RWRpdG9yLmMKIEFERF9XSzJfVEVTVChUZXN0RnJhbWUgJHtUT09MU19ESVJ9L1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0RnJhbWUuY3BwKQogQUREX1dLMl9URVNUKFRlc3RMb2Fk
ZXJDbGllbnQgJHtUT09MU19ESVJ9L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0
TG9hZGVyQ2xpZW50LmNwcCkKIEFERF9XSzJfVEVTVChUZXN0TXVsdGlwcm9jZXNzICR7VE9PTFNf
RElSfS9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdE11bHRpcHJvY2Vzcy5jcHAp
CitBRERfV0syX1RFU1QoVGVzdE9wdGlvbk1lbnUgJHtUT09MU19ESVJ9L1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0R0xpYi9UZXN0T3B0aW9uTWVudS5jcHApCiBBRERfV0syX1RFU1QoVGVzdFJl
c291cmNlcyAke1RPT0xTX0RJUn0vVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RS
ZXNvdXJjZXMuY3BwKQogQUREX1dLMl9URVNUKFRlc3RTU0wgJHtUT09MU19ESVJ9L1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0U1NMLmNwcCkKIEFERF9XSzJfVEVTVChUZXN0VUlD
bGllbnQgJHtUT09MU19ESVJ9L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0VUlD
bGllbnQuY3BwKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9nbGliL1BsYXRmb3Jt
R1RLLmNtYWtlIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9nbGliL1BsYXRmb3JtR1RLLmNtYWtlCmlu
ZGV4IDliMjNlNzRhYmRlMGMxYjFiNGVlNDc5ZTEyMDk3MzdiYWZhMmYyNjcuLmE1ODZhNmE2OGEz
NTU3YWY4NTYzZDczOTM2YWZhM2Y0Y2I3Y2M4OTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvZ2xpYi9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2ds
aWIvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTQxLDcgKzQxLDYgQEAgQUREX1dLMl9URVNUKFRlc3RE
T01Ob2RlRmlsdGVyICR7VE9PTFNfRElSfS9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9U
ZXN0RE8KIEFERF9XSzJfVEVTVChUZXN0RE9NWFBhdGhOU1Jlc29sdmVyICR7VE9PTFNfRElSfS9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0RE9NWFBhdGhOU1Jlc29sdmVyLmNwcCkK
IEFERF9XSzJfVEVTVChUZXN0SW5zcGVjdG9yICR7VE9PTFNfRElSfS9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdEd0ay9UZXN0SW5zcGVjdG9yLmNwcCkKIEFERF9XSzJfVEVTVChUZXN0SW5zcGVj
dG9yU2VydmVyICR7VE9PTFNfRElSfS9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0
SW5zcGVjdG9yU2VydmVyLmNwcCkKLUFERF9XSzJfVEVTVChUZXN0T3B0aW9uTWVudSAke1RPT0xT
X0RJUn0vVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvVGVzdE9wdGlvbk1lbnUuY3BwKQog
QUREX1dLMl9URVNUKFRlc3RQcmludGluZyAke1RPT0xTX0RJUn0vVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRHdGsvVGVzdFByaW50aW5nLmNwcCkKIEFERF9XSzJfVEVTVChUZXN0V2ViS2l0RmF2
aWNvbkRhdGFiYXNlICR7VE9PTFNfRElSfS9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIv
VGVzdFdlYktpdEZhdmljb25EYXRhYmFzZS5jcHApCiBBRERfV0syX1RFU1QoVGVzdFdlYktpdFZl
cnNpb24gJHtUT09MU19ESVJ9L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL1Rlc3RXZWJL
aXRWZXJzaW9uLmNwcCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388224</attachid>
            <date>2020-01-20 03:23:50 -0800</date>
            <delta_ts>2020-01-20 03:23:50 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-206287-20200120122349.patch</filename>
            <type>text/plain</type>
            <size>64178</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0ODA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGQ1YzMxOTkxNzM4ZDc1OWE5
NTAxYWRlMTU1OTVjMDJmMjJmYjdiZTcuLmY2MmVhYjk2M2U0ZDM2N2QzNWUyNjFlZTRmZWIwNTJk
OGU1NTU0MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjMgQEAKKzIwMjAtMDEtMjAgIFphbiBEb2Jl
cnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtXUEVdIEV4cG9zZSB0aGUg
V2ViS2l0T3B0aW9uTWVudSBBUElzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMDYyODcKKworICAgICAgICBSZXZpZXdlZCBieSBDYXJsb3MgR2FyY2lh
IENhbXBvcy4KKworICAgICAgICBFbmFibGUgdGhlIEdMaWItYmFzZWQgQVBJIGNvdmVyaW5nIG9w
dGlvbiBtZW51IGZ1bmN0aW9uYWxpdHkgZm9yIFdQRS4KKworICAgICAgICBNb3N0IG9mIHRoaXMg
Y2FuIGJlIHNoYXJlZCB3aXRoIHRoZSBHVEsgcG9ydC4gVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyBp
bgorICAgICAgICB0aGUgdHdvIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBlbWl0dGVkIG9uIHRoZSBX
ZWJLaXRXZWJWaWV3J3MgInNob3ctbWVudSIKKyAgICAgICAgc2lnbmFsIChHZGtFdmVudCBhbmQg
R2RrUmVjdGFuZ2xlKSB0aGF0IFdQRSBkb2Vzbid0IHN1cHBvcnQgYXQgdGhlCisgICAgICAgIG1v
bWVudC4gVGhlIHJlY3RhbmdsZSBpbmZvcm1hdGlvbiB3aWxsIGJlIHBvc3NpYmxlIHRvIGVtaXQg
aW4gdGhlIG5lYXIKKyAgICAgICAgZnV0dXJlIG9uY2UgYSB1c2FibGUgQVBJIHR5cGUgaXMgYXZh
aWxhYmxlIGZvciB0aGlzIGluZm9ybWF0aW9uLgorCisgICAgICAgIFRoZSBXZWJLaXRQb3B1cE1l
bnUgaW1wbGVtZW50YXRpb24gZm9yIFdQRSB3b3VsZCBvbmx5IHdvcmsgd2l0aCB0aGUKKyAgICAg
ICAgR0xpYi1iYXNlZCBBUEkuIFRvIGF2b2lkIHVzaW5nIGl0IHdpdGggb3RoZXIgQVBJcywgdGhp
cyBpcyBpbXBsZW1lbnRlZAorICAgICAgICBvbmx5IG9uIHRoZSBXZWJLaXRXZWJWaWV3Q2xpZW50
IGludGVyZmFjZSAocmVuYW1lZCBmcm9tICdXZWJWaWV3Q2xpZW50JworICAgICAgICBhbmQgaXRz
IGRlY2xhcmF0aW9uIG1vdmVkIGludG8gYSBzZXBhcmF0ZSBoZWFkZXIgZmlsZSkgaW5oZXJpdGlu
ZyBmcm9tCisgICAgICAgIEFQSTo6Vmlld0NsaWVudC4KKworICAgICAgICBUaGUgcmVsZXZhbnQg
QVBJIHRlc3QgaXMgZW5hYmxlZCBmb3IgV1BFLgorCisgICAgICAgICogUGxhdGZvcm1XUEUuY21h
a2U6CisgICAgICAgICogU291cmNlc1dQRS50eHQ6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdFdlYlZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0V2ViVmlld0NsaWVudDo6V2Vi
S2l0V2ViVmlld0NsaWVudCk6CisgICAgICAgIChXZWJLaXRXZWJWaWV3Q2xpZW50OjpzaG93T3B0
aW9uTWVudSk6CisgICAgICAgIChXZWJLaXRXZWJWaWV3Q2xpZW50OjpoYW5kbGVEb3dubG9hZFJl
cXVlc3QpOgorICAgICAgICAoV2ViS2l0V2ViVmlld0NsaWVudDo6ZnJhbWVEaXNwbGF5ZWQpOgor
ICAgICAgICAoV2ViS2l0V2ViVmlld0NsaWVudDo6d2lsbFN0YXJ0TG9hZCk6CisgICAgICAgIChX
ZWJLaXRXZWJWaWV3Q2xpZW50OjpkaWRDaGFuZ2VQYWdlSUQpOgorICAgICAgICAoV2ViS2l0V2Vi
Vmlld0NsaWVudDo6ZGlkUmVjZWl2ZVVzZXJNZXNzYWdlKToKKyAgICAgICAgKHdlYmtpdFdlYlZp
ZXdDb25zdHJ1Y3RlZCk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdCk6Cisg
ICAgICAgICh3ZWJraXRXZWJWaWV3U2hvd09wdGlvbk1lbnUpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvd3BlL0FQSVZpZXdDbGllbnQuaDoKKyAgICAgICAgKEFQSTo6Vmlld0NsaWVudDo6aXNHTGli
QmFzZWRBUEkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL1BhZ2VDbGllbnRJbXBsLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmNyZWF0ZVBvcHVwTWVudVByb3h5
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9XUEVWaWV3Lmg6CisgICAgICAgIChXS1dQ
RTo6Vmlldzo6Y2xpZW50IGNvbnN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9XZWJL
aXRPcHRpb25NZW51Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktp
dE9wdGlvbk1lbnVJdGVtLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL1dl
YktpdFBvcHVwTWVudS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJLaXRQb3B1cE1l
bnU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYktpdFBvcHVwTWVudTo6V2ViS2l0UG9w
dXBNZW51KToKKyAgICAgICAgKFdlYktpdDo6bWVudUNsb3NlQ2FsbGJhY2spOgorICAgICAgICAo
V2ViS2l0OjpXZWJLaXRQb3B1cE1lbnU6OnNob3dQb3B1cE1lbnUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJLaXRQb3B1cE1lbnU6OmhpZGVQb3B1cE1lbnUpOgorICAgICAgICAoV2ViS2l0OjpXZWJL
aXRQb3B1cE1lbnU6OmNhbmNlbFRyYWNraW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0UG9w
dXBNZW51OjpzZWxlY3RJdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0UG9wdXBNZW51Ojph
Y3RpdmF0ZUl0ZW0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFBvcHVwTWVu
dS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRXZWJWaWV3Lmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0V2ViVmlld0NsaWVudC5oOiBBZGRl
ZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9kb2NzL3dwZS0xLjAtc2VjdGlvbnMudHh0
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL3dlYmtpdC5oOgorCiAyMDIwLTAxLTE5ICBF
cmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgTWVk
aWFQbGF5ZXJQcml2YXRlUmVtb3RlIGEgbWVzc2FnZSByZWNlaXZlcgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9QbGF0Zm9ybVdQRS5jbWFrZSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XUEUu
Y21ha2UKaW5kZXggYThhOTVmNGIwZGI0YTUwYThlZjViNzIwMzljNTFjYzU4MThlZDMwNC4uZDE0
Yjg2MjYwODg5ZjBkMGI3NzIwYmJkM2IxM2VjZTFiYzk3Njg3ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9QbGF0Zm9ybVdQRS5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV1BF
LmNtYWtlCkBAIC0xMTksNiArMTE5LDggQEAgc2V0KFdQRV9BUElfSU5TVEFMTEVEX0hFQURFUlMK
ICAgICAke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdE5ldHdvcmtQcm94eVNl
dHRpbmdzLmgKICAgICAke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdE5vdGlm
aWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0LmgKICAgICAke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9B
UEkvd3BlL1dlYktpdE5vdGlmaWNhdGlvbi5oCisgICAgJHtXRUJLSVRfRElSfS9VSVByb2Nlc3Mv
QVBJL3dwZS9XZWJLaXRPcHRpb25NZW51LmgKKyAgICAke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9B
UEkvd3BlL1dlYktpdE9wdGlvbk1lbnVJdGVtLmgKICAgICAke1dFQktJVF9ESVJ9L1VJUHJvY2Vz
cy9BUEkvd3BlL1dlYktpdFBlcm1pc3Npb25SZXF1ZXN0LmgKICAgICAke1dFQktJVF9ESVJ9L1VJ
UHJvY2Vzcy9BUEkvd3BlL1dlYktpdFBsdWdpbi5oCiAgICAgJHtXRUJLSVRfRElSfS9VSVByb2Nl
c3MvQVBJL3dwZS9XZWJLaXRQb2xpY3lEZWNpc2lvbi5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NvdXJjZXNXUEUudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzV1BFLnR4dAppbmRleCBl
YTdmZjhkNzNmZGYxMzNkN2M1NjBjOWZiY2YwMTVhNjI0N2FkODM5Li5mNGZiYzJmN2I2MGEzMGQ2
MGQwN2RjZDkzNjA1YjJiNjhiYjcyYWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJj
ZXNXUEUudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc1dQRS50eHQKQEAgLTE0NSw2ICsx
NDUsOCBAQCBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0TmV0d29ya1Byb3h5U2V0dGluZ3MuY3Bw
IEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdE5vdGlmaWNhdGlvbi5jcHAgQG5v
LXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Tm90aWZpY2F0aW9uUGVybWlzc2lvblJl
cXVlc3QuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdE5vdGlmaWNhdGlv
blByb3ZpZGVyLmNwcCBAbm8tdW5pZnkKK1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRPcHRpb25N
ZW51LmNwcCBAbm8tdW5pZnkKK1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRPcHRpb25NZW51SXRl
bS5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0UGVybWlzc2lvblJlcXVl
c3QuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFBsdWdpbi5jcHAgQG5v
LXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0UG9saWN5RGVjaXNpb24uY3BwIEBuby11
bmlmeQpAQCAtMTc3LDYgKzE3OSw3IEBAIFVJUHJvY2Vzcy9BUEkvd3BlL1BhZ2VDbGllbnRJbXBs
LmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvd3BlL1Njcm9sbEdlc3R1cmVDb250cm9sbGVy
LmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcCBAbm8tdW5p
ZnkKIFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdElucHV0TWV0aG9kQ29udGV4dFdQRS5jcHAgQG5v
LXVuaWZ5CitVSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRQb3B1cE1lbnUuY3BwIEBuby11bmlmeQog
VUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0U2NyaXB0RGlhbG9nV1BFLmNwcCBAbm8tdW5pZnkKIFVJ
UHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYlZpZXdCYWNrZW5kLmNwcCBAbm8tdW5pZnkKIFVJUHJv
Y2Vzcy9BUEkvd3BlL1dlYktpdFdlYlZpZXdXUEUuY3BwIEBuby11bmlmeQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmNwcAppbmRleCBmZjg2
ZWNmMGY5NjZjNGY5NzQxYTJhMzZhMjhjM2RmYTE0MDJmNDUzLi45OTNiMmJlMGFmYzI4ZDc2YmY5
N2JjYWRiMmFiYmNmN2M0OGRmNDFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmNwcApAQCAtOTIsOSArOTIsMTAgQEAKICNlbmRpZgog
CiAjaWYgUExBVEZPUk0oV1BFKQotI2luY2x1ZGUgIkFQSVZpZXdDbGllbnQuaCIKICNpbmNsdWRl
ICJXUEVWaWV3LmgiCisjaW5jbHVkZSAiV2ViS2l0T3B0aW9uTWVudVByaXZhdGUuaCIKICNpbmNs
dWRlICJXZWJLaXRXZWJWaWV3QmFja2VuZFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJW
aWV3Q2xpZW50LmgiCiAjZW5kaWYKIAogI2lmIFVTRShMSUJOT1RJRlkpCkBAIC0xNjUsOSArMTY2
LDggQEAgZW51bSB7CiAKICNpZiBQTEFURk9STShHVEspCiAgICAgUlVOX0NPTE9SX0NIT09TRVIs
Ci0KLSAgICBTSE9XX09QVElPTl9NRU5VLAogI2VuZGlmCisgICAgU0hPV19PUFRJT05fTUVOVSwK
IAogICAgIFVTRVJfTUVTU0FHRV9SRUNFSVZFRCwKIApAQCAtNDEyLDU1ICs0MTIsNTUgQEAgcHJp
dmF0ZToKIH07CiAKICNpZiBQTEFURk9STShXUEUpCi1jbGFzcyBXZWJWaWV3Q2xpZW50IGZpbmFs
IDogcHVibGljIEFQSTo6Vmlld0NsaWVudCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgV2ViVmlld0NsaWVudChXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3KQotICAgICAgICA6IG1fd2ViVmlldyh3ZWJWaWV3KQotICAgIHsKLSAgICB9CitXZWJLaXRX
ZWJWaWV3Q2xpZW50OjpXZWJLaXRXZWJWaWV3Q2xpZW50KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcp
CisgICAgOiBtX3dlYlZpZXcod2ViVmlldykKK3sgfQogCi1wcml2YXRlOgotICAgIHZvaWQgaGFu
ZGxlRG93bmxvYWRSZXF1ZXN0KFdLV1BFOjpWaWV3JiwgRG93bmxvYWRQcm94eSYgZG93bmxvYWRQ
cm94eSkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIHdlYmtpdFdlYlZpZXdIYW5kbGVEb3dubG9h
ZFJlcXVlc3QobV93ZWJWaWV3LCAmZG93bmxvYWRQcm94eSk7Ci0gICAgfQorR1JlZlB0cjxXZWJL
aXRPcHRpb25NZW51PiBXZWJLaXRXZWJWaWV3Q2xpZW50OjpzaG93T3B0aW9uTWVudShXZWJLaXRQ
b3B1cE1lbnUmIHBvcHVwTWVudSwgY29uc3QgVmVjdG9yPFdlYlBvcHVwSXRlbT4mIGl0ZW1zLCBp
bnQzMl90IHNlbGVjdGVkSW5kZXgpCit7CisgICAgR1JlZlB0cjxXZWJLaXRPcHRpb25NZW51PiBt
ZW51ID0gYWRvcHRHUmVmKHdlYmtpdE9wdGlvbk1lbnVDcmVhdGUocG9wdXBNZW51LCBpdGVtcywg
c2VsZWN0ZWRJbmRleCkpOworICAgIGlmICh3ZWJraXRXZWJWaWV3U2hvd09wdGlvbk1lbnUoV0VC
S0lUX1dFQl9WSUVXKG1fd2ViVmlldyksIG1lbnUuZ2V0KCkpKQorICAgICAgICByZXR1cm4gbWVu
dTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KIAotICAgIHZvaWQgZnJhbWVEaXNwbGF5ZWQoV0tX
UEU6OlZpZXcmKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgewotICAgICAgICAgICAgU2V0Rm9y
U2NvcGU8Ym9vbD4gaW5GcmFtZURpc3BsYXllZEd1YXJkKG1fd2ViVmlldy0+cHJpdi0+aW5GcmFt
ZURpc3BsYXllZCwgdHJ1ZSk7Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGNhbGxiYWNr
IDogbV93ZWJWaWV3LT5wcml2LT5mcmFtZURpc3BsYXllZENhbGxiYWNrcykgewotICAgICAgICAg
ICAgICAgIGlmICghbV93ZWJWaWV3LT5wcml2LT5mcmFtZURpc3BsYXllZENhbGxiYWNrc1RvUmVt
b3ZlLmNvbnRhaW5zKGNhbGxiYWNrLmlkKSkKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2su
Y2FsbGJhY2sobV93ZWJWaWV3LCBjYWxsYmFjay51c2VyRGF0YSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KK3ZvaWQgV2ViS2l0V2ViVmlld0NsaWVudDo6aGFuZGxlRG93bmxvYWRSZXF1ZXN0
KFdLV1BFOjpWaWV3JiwgRG93bmxvYWRQcm94eSYgZG93bmxvYWRQcm94eSkKK3sKKyAgICB3ZWJr
aXRXZWJWaWV3SGFuZGxlRG93bmxvYWRSZXF1ZXN0KG1fd2ViVmlldywgJmRvd25sb2FkUHJveHkp
OworfQogCi0gICAgICAgIHdoaWxlICghbV93ZWJWaWV3LT5wcml2LT5mcmFtZURpc3BsYXllZENh
bGxiYWNrc1RvUmVtb3ZlLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgYXV0byBpZCA9IG1fd2Vi
Vmlldy0+cHJpdi0+ZnJhbWVEaXNwbGF5ZWRDYWxsYmFja3NUb1JlbW92ZS50YWtlQW55KCk7Ci0g
ICAgICAgICAgICBtX3dlYlZpZXctPnByaXYtPmZyYW1lRGlzcGxheWVkQ2FsbGJhY2tzLnJlbW92
ZUZpcnN0TWF0Y2hpbmcoW2lkXShjb25zdCBhdXRvJiBpdGVtKSB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGl0ZW0uaWQgPT0gaWQ7Ci0gICAgICAgICAgICB9KTsKK3ZvaWQgV2ViS2l0V2ViVmll
d0NsaWVudDo6ZnJhbWVEaXNwbGF5ZWQoV0tXUEU6OlZpZXcmKQoreworICAgIHsKKyAgICAgICAg
U2V0Rm9yU2NvcGU8Ym9vbD4gaW5GcmFtZURpc3BsYXllZEd1YXJkKG1fd2ViVmlldy0+cHJpdi0+
aW5GcmFtZURpc3BsYXllZCwgdHJ1ZSk7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgY2FsbGJh
Y2sgOiBtX3dlYlZpZXctPnByaXYtPmZyYW1lRGlzcGxheWVkQ2FsbGJhY2tzKSB7CisgICAgICAg
ICAgICBpZiAoIW1fd2ViVmlldy0+cHJpdi0+ZnJhbWVEaXNwbGF5ZWRDYWxsYmFja3NUb1JlbW92
ZS5jb250YWlucyhjYWxsYmFjay5pZCkpCisgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbGJh
Y2sobV93ZWJWaWV3LCBjYWxsYmFjay51c2VyRGF0YSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICB2b2lkIHdpbGxTdGFydExvYWQoV0tXUEU6OlZpZXcmKSBvdmVycmlkZQotICAgIHsKLSAgICAg
ICAgd2Via2l0V2ViVmlld1dpbGxTdGFydExvYWQobV93ZWJWaWV3KTsKKyAgICB3aGlsZSAoIW1f
d2ViVmlldy0+cHJpdi0+ZnJhbWVEaXNwbGF5ZWRDYWxsYmFja3NUb1JlbW92ZS5pc0VtcHR5KCkp
IHsKKyAgICAgICAgYXV0byBpZCA9IG1fd2ViVmlldy0+cHJpdi0+ZnJhbWVEaXNwbGF5ZWRDYWxs
YmFja3NUb1JlbW92ZS50YWtlQW55KCk7CisgICAgICAgIG1fd2ViVmlldy0+cHJpdi0+ZnJhbWVE
aXNwbGF5ZWRDYWxsYmFja3MucmVtb3ZlRmlyc3RNYXRjaGluZyhbaWRdKGNvbnN0IGF1dG8mIGl0
ZW0pIHsKKyAgICAgICAgICAgIHJldHVybiBpdGVtLmlkID09IGlkOworICAgICAgICB9KTsKICAg
ICB9Cit9CiAKLSAgICB2b2lkIGRpZENoYW5nZVBhZ2VJRChXS1dQRTo6VmlldyYpIG92ZXJyaWRl
Ci0gICAgewotICAgICAgICB3ZWJraXRXZWJWaWV3RGlkQ2hhbmdlUGFnZUlEKG1fd2ViVmlldyk7
Ci0gICAgfQordm9pZCBXZWJLaXRXZWJWaWV3Q2xpZW50Ojp3aWxsU3RhcnRMb2FkKFdLV1BFOjpW
aWV3JikKK3sKKyAgICB3ZWJraXRXZWJWaWV3V2lsbFN0YXJ0TG9hZChtX3dlYlZpZXcpOworfQog
Ci0gICAgdm9pZCBkaWRSZWNlaXZlVXNlck1lc3NhZ2UoV0tXUEU6OlZpZXcmLCBVc2VyTWVzc2Fn
ZSYmIG1lc3NhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVXNlck1lc3NhZ2UmJik+JiYgY29t
cGxldGlvbkhhbmRsZXIpIG92ZXJyaWRlCi0gICAgewotICAgICAgICB3ZWJraXRXZWJWaWV3RGlk
UmVjZWl2ZVVzZXJNZXNzYWdlKG1fd2ViVmlldywgV1RGTW92ZShtZXNzYWdlKSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KK3ZvaWQgV2ViS2l0V2ViVmlld0NsaWVudDo6ZGlk
Q2hhbmdlUGFnZUlEKFdLV1BFOjpWaWV3JikKK3sKKyAgICB3ZWJraXRXZWJWaWV3RGlkQ2hhbmdl
UGFnZUlEKG1fd2ViVmlldyk7Cit9CiAKLSAgICBXZWJLaXRXZWJWaWV3KiBtX3dlYlZpZXc7Ci19
Owordm9pZCBXZWJLaXRXZWJWaWV3Q2xpZW50OjpkaWRSZWNlaXZlVXNlck1lc3NhZ2UoV0tXUEU6
OlZpZXcmLCBVc2VyTWVzc2FnZSYmIG1lc3NhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVXNl
ck1lc3NhZ2UmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgd2Via2l0V2ViVmlld0Rp
ZFJlY2VpdmVVc2VyTWVzc2FnZShtX3dlYlZpZXcsIFdURk1vdmUobWVzc2FnZSksIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKK30KICNlbmRpZgogCiBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0
V2ViVmlld0xvYWRGYWlsKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdExvYWRFdmVudCwg
Y29uc3QgY2hhciogZmFpbGluZ1VSSSwgR0Vycm9yKiBlcnJvcikKQEAgLTc3Nyw3ICs3NzcsNyBA
QCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3Q29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQog
I2VuZGlmCiAKICNpZiBQTEFURk9STShXUEUpCi0gICAgcHJpdi0+dmlldy0+c2V0Q2xpZW50KG1h
a2VVbmlxdWU8V2ViVmlld0NsaWVudD4od2ViVmlldykpOworICAgIHByaXYtPnZpZXctPnNldENs
aWVudChtYWtlVW5pcXVlPFdlYktpdFdlYlZpZXdDbGllbnQ+KHdlYlZpZXcpKTsKICNlbmRpZgog
CiAgICAgLy8gVGhpcyBuZWVkcyB0byBiZSBhZnRlciBhdHRhY2hVSUNsaWVudFRvVmlldygpIGJl
Y2F1c2UgV2ViUGFnZVByb3h5OjpzZXRVSUNsaWVudCgpIGNhbGxzIHNldENhblJ1bk1vZGFsKCkg
d2l0aCB0cnVlLgpAQCAtMjEzMyw2ICsyMTMzLDM3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJf
dmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQogICAgICAg
ICBHREtfVFlQRV9SRUNUQU5HTEUgfCBHX1NJR05BTF9UWVBFX1NUQVRJQ19TQ09QRSk7CiAjZW5k
aWYgLy8gUExBVEZPUk0oR1RLKQogCisjaWYgUExBVEZPUk0oV1BFKQorICAgIC8qKgorICAgICAq
IFdlYktpdFdlYlZpZXc6OnNob3ctb3B0aW9uLW1lbnU6CisgICAgICogQHdlYl92aWV3OiB0aGUg
I1dlYktpdFdlYlZpZXcgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCisgICAgICogQG1l
bnU6IHRoZSAjV2ViS2l0T3B0aW9uTWVudQorICAgICAqIEByZWN0YW5nbGU6IHRoZSBvcHRpb24g
ZWxlbWVudCBhcmVhCisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4g
YSBzZWxlY3QgZWxlbWVudCBpbiBAd2ViX3ZpZXcgbmVlZHMgdG8gZGlzcGxheSBhCisgICAgICog
ZHJvcGRvd24gbWVudS4gVGhpcyBzaWduYWwgY2FuIGJlIHVzZWQgdG8gc2hvdyBhIGN1c3RvbSBt
ZW51LCB1c2luZyBAbWVudSB0byBnZXQKKyAgICAgKiB0aGUgZGV0YWlscyBvZiBhbGwgaXRlbXMg
dGhhdCBzaG91bGQgYmUgZGlzcGxheWVkLiBUaGUgYXJlYSBvZiB0aGUgZWxlbWVudCBpbiB0aGUK
KyAgICAgKiAjV2ViS2l0V2ViVmlldyBpcyBnaXZlbiBhcyBAcmVjdGFuZ2xlIHBhcmFtZXRlciwg
aXQgY2FuIGJlIHVzZWQgdG8gcG9zaXRpb24gdGhlCisgICAgICogbWVudS4KKyAgICAgKiBUbyBo
YW5kbGUgdGhpcyBzaWduYWwgYXN5bmNocm9ub3VzbHkgeW91IHNob3VsZCBrZWVwIGEgcmVmIG9m
IHRoZSBAbWVudS4KKyAgICAgKgorICAgICAqIFJldHVybnM6ICVUUlVFIHRvIHN0b3Agb3RoZXIg
aGFuZGxlcnMgZnJvbSBiZWluZyBpbnZva2VkIGZvciB0aGUgZXZlbnQuCisgICAgICogICAlRkFM
U0UgdG8gcHJvcGFnYXRlIHRoZSBldmVudCBmdXJ0aGVyLgorICAgICAqCisgICAgICogU2luY2U6
IDIuMjgKKyAgICAgKi8KKyAgICBzaWduYWxzW1NIT1dfT1BUSU9OX01FTlVdID0gZ19zaWduYWxf
bmV3KAorICAgICAgICAic2hvdy1vcHRpb24tbWVudSIsCisgICAgICAgIEdfVFlQRV9GUk9NX0NM
QVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgIEdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgICBH
X1NUUlVDVF9PRkZTRVQoV2ViS2l0V2ViVmlld0NsYXNzLCBzaG93X29wdGlvbl9tZW51KSwKKyAg
ICAgICAgZ19zaWduYWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLCBudWxscHRyLAorICAgICAg
ICBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywKKyAgICAgICAgR19UWVBFX0JPT0xFQU4sIDIs
CisgICAgICAgIFdFQktJVF9UWVBFX09QVElPTl9NRU5VLAorICAgICAgICBHX1RZUEVfUE9JTlRF
Uik7CisjZW5kaWYKKwogICAgIC8qKgogICAgICAqIFdlYktpdFdlYlZpZXc6OnVzZXItbWVzc2Fn
ZS1yZWNlaXZlZDoKICAgICAgKiBAd2ViX3ZpZXc6IHRoZSAjV2ViS2l0V2ViVmlldyBvbiB3aGlj
aCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKQEAgLTI3MjEsNiArMjc1MiwxNSBAQCB2b2lkIHdlYmtp
dFdlYlZpZXdEZWxldGVTdXJyb3VuZGluZyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBpbnQgb2Zm
c2V0LCB1bnNpZ25lZAogICAgIGdldFBhZ2Uod2ViVmlldykuZGVsZXRlU3Vycm91bmRpbmcob2Zm
c2V0LCBjaGFyYWN0ZXJDb3VudCk7CiB9CiAKKyNpZiBQTEFURk9STShXUEUpCitib29sIHdlYmtp
dFdlYlZpZXdTaG93T3B0aW9uTWVudShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRPcHRp
b25NZW51KiBtZW51KQoreworICAgIGdib29sZWFuIGhhbmRsZWQ7CisgICAgZ19zaWduYWxfZW1p
dCh3ZWJWaWV3LCBzaWduYWxzW1NIT1dfT1BUSU9OX01FTlVdLCAwLCBtZW51LCBudWxscHRyLCAm
aGFuZGxlZCk7CisgICAgcmV0dXJuIGhhbmRsZWQ7Cit9CisjZW5kaWYKKwogI2lmIFBMQVRGT1JN
KFdQRSkKIC8qKgogICogd2Via2l0X3dlYl92aWV3X2dldF9iYWNrZW5kOgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlld1ByaXZhdGUuaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXdQcml2YXRlLmgK
aW5kZXggNjdmNjk4MjFlYTdmNjJjN2IwM2Y1MTNlMzg3MzRlY2RiOWM3YjUzOS4uOWE4NjQzOTYz
MTE1NTcwZjMyZDZhMGY1ZDY1MzFhZjg3YzUwZmYyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlld1ByaXZhdGUuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oCkBAIC0xMDAs
NiArMTAwLDEwIEBAIGJvb2wgd2Via2l0V2ViVmlld0VtaXRSdW5Db2xvckNob29zZXIoV2ViS2l0
V2ViVmlldyosIFdlYktpdENvbG9yQ2hvb3NlclJlcXVlc3QqCiBib29sIHdlYmtpdFdlYlZpZXdT
aG93T3B0aW9uTWVudShXZWJLaXRXZWJWaWV3KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIFdl
YktpdE9wdGlvbk1lbnUqLCBjb25zdCBHZGtFdmVudCopOwogI2VuZGlmCiAKKyNpZiBQTEFURk9S
TShXUEUpCitib29sIHdlYmtpdFdlYlZpZXdTaG93T3B0aW9uTWVudShXZWJLaXRXZWJWaWV3Kiwg
V2ViS2l0T3B0aW9uTWVudSopOworI2VuZGlmCisKIGdib29sZWFuIHdlYmtpdFdlYlZpZXdBdXRo
ZW50aWNhdGUoV2ViS2l0V2ViVmlldyosIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCopOwog
Z2Jvb2xlYW4gd2Via2l0V2ViVmlld1NjcmlwdERpYWxvZyhXZWJLaXRXZWJWaWV3KiwgV2ViS2l0
U2NyaXB0RGlhbG9nKik7CiBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3UnVuRmlsZUNob29zZXIoV2Vi
S2l0V2ViVmlldyosIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCopOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9BUElWaWV3Q2xpZW50LmggYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvd3BlL0FQSVZpZXdDbGllbnQuaAppbmRleCBiMTNkYTZkMGY1Y2Rm
ODc5YzNkNDg2YjJmNmFhNGY2NTFhMGExYmE3Li41MDlmODQ5YTEyZjg2Mjk5NDg2YjFkMWE1MmRi
NTY1MDFhNjFlYjQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3Bl
L0FQSVZpZXdDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL0FQ
SVZpZXdDbGllbnQuaApAQCAtNDUsNiArNDUsOCBAQCBjbGFzcyBWaWV3Q2xpZW50IHsKIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIH5WaWV3Q2xpZW50KCkgPSBkZWZhdWx0OwogCisgICAgdmlydHVhbCBi
b29sIGlzR0xpYkJhc2VkQVBJKCkgeyByZXR1cm4gZmFsc2U7IH0KKwogICAgIHZpcnR1YWwgdm9p
ZCBmcmFtZURpc3BsYXllZChXS1dQRTo6VmlldyYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBoYW5k
bGVEb3dubG9hZFJlcXVlc3QoV0tXUEU6OlZpZXcmLCBXZWJLaXQ6OkRvd25sb2FkUHJveHkmKSB7
IH0KICAgICB2aXJ0dWFsIHZvaWQgd2lsbFN0YXJ0TG9hZChXS1dQRTo6VmlldyYpIHsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9QYWdlQ2xpZW50SW1wbC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1BhZ2VDbGllbnRJbXBsLmNwcApp
bmRleCA1OTJkNzMzNDk5OTg3MTFmMTdjMTgxYzJmMGNkZWE2YjRjNGYwNjgzLi4zMWNhZjM0M2Ey
MDZiZmVhY2Y1YmRhZDkyYmE3YTFiZTJlYWJiNzhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvd3BlL1BhZ2VDbGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvd3BlL1BhZ2VDbGllbnRJbXBsLmNwcApAQCAtMjYsNiArMjYsNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBhZ2VDbGllbnRJbXBsLmgiCiAKKyNpbmNs
dWRlICJBUElWaWV3Q2xpZW50LmgiCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eUNvb3JkaW5h
dGVkR3JhcGhpY3MuaCIKICNpbmNsdWRlICJOYXRpdmVXZWJNb3VzZUV2ZW50LmgiCiAjaW5jbHVk
ZSAiTmF0aXZlV2ViV2hlZWxFdmVudC5oIgpAQCAtMzMsNiArMzQsNyBAQAogI2luY2x1ZGUgIldQ
RVZpZXcuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0TWVudVByb3h5LmgiCiAjaW5jbHVkZSAiV2Vi
Q29udGV4dE1lbnVQcm94eVdQRS5oIgorI2luY2x1ZGUgIldlYktpdFBvcHVwTWVudS5oIgogI2lu
Y2x1ZGUgPFdlYkNvcmUvQWN0aXZpdHlTdGF0ZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRE9NUGFz
dGVBY2Nlc3MuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CkBAIC0yNTMs
OSArMjU1LDExIEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OndoZWVsRXZlbnRXYXNOb3RIYW5kbGVk
QnlXZWJDb3JlKGNvbnN0IE5hdGl2ZVdlYldoZWVsRXZlbnQmCiB7CiB9CiAKLVJlZlB0cjxXZWJQ
b3B1cE1lbnVQcm94eT4gUGFnZUNsaWVudEltcGw6OmNyZWF0ZVBvcHVwTWVudVByb3h5KFdlYlBh
Z2VQcm94eSYpCitSZWZQdHI8V2ViUG9wdXBNZW51UHJveHk+IFBhZ2VDbGllbnRJbXBsOjpjcmVh
dGVQb3B1cE1lbnVQcm94eShXZWJQYWdlUHJveHkmIHBhZ2UpCiB7Ci0gICAgcmV0dXJuIG51bGxw
dHI7CisgICAgaWYgKCFtX3ZpZXcuY2xpZW50KCkuaXNHTGliQmFzZWRBUEkoKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIFdlYktpdFBvcHVwTWVudTo6Y3JlYXRlKG1fdmll
dywgcGFnZSk7CiB9CiAKICNpZiBFTkFCTEUoQ09OVEVYVF9NRU5VUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV1BFVmlldy5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL3dwZS9XUEVWaWV3LmgKaW5kZXggZjIzZGZjMjdhN2M0YjNlMGZlMTMxMzc4
MGY1ZGIyODY3NzdkNjZhNC4uYTgyZjkwMjgyZGE0ZjE0NTBmZWRkMTVkZjc4NzRiZjIxZjFmYWEz
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XUEVWaWV3LmgK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XUEVWaWV3LmgKQEAgLTg4LDYg
Kzg4LDcgQEAgcHVibGljOgogCiAgICAgV2ViS2l0OjpXZWJQYWdlUHJveHkmIHBhZ2UoKSB7IHJl
dHVybiAqbV9wYWdlUHJveHk7IH0KIAorICAgIEFQSTo6Vmlld0NsaWVudCYgY2xpZW50KCkgY29u
c3QgeyByZXR1cm4gKm1fY2xpZW50OyB9CiAgICAgc3RydWN0IHdwZV92aWV3X2JhY2tlbmQqIGJh
Y2tlbmQoKSB7IHJldHVybiBtX2JhY2tlbmQ7IH0KIAogICAgIGNvbnN0IFdlYkNvcmU6OkludFNp
emUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0T3B0aW9uTWVudS5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRPcHRpb25NZW51LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjIzMzli
YTBmMDg5ZmRmYzg1OTRhZjk4YWE1Y2JmNDI3OTI2NzhiYgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0T3B0aW9uTWVudS5oCkBAIC0wLDAg
KzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZp
bmVkKF9fV0VCS0lUX0hfSU5TSURFX18pICYmICFkZWZpbmVkKFdFQktJVDJfQ09NUElMQVRJT04p
CisjZXJyb3IgIk9ubHkgPHdwZS93ZWJraXQuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIK
KyNlbmRpZgorCisjaWZuZGVmIFdlYktpdE9wdGlvbk1lbnVfaAorI2RlZmluZSBXZWJLaXRPcHRp
b25NZW51X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d3BlL1dlYktp
dERlZmluZXMuaD4KKyNpbmNsdWRlIDx3cGUvV2ViS2l0T3B0aW9uTWVudUl0ZW0uaD4KKworR19C
RUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX09QVElPTl9NRU5VICAgICAgICAgICAg
KHdlYmtpdF9vcHRpb25fbWVudV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfT1BUSU9OX01F
TlUob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VC
S0lUX1RZUEVfT1BUSU9OX01FTlUsIFdlYktpdE9wdGlvbk1lbnUpKQorI2RlZmluZSBXRUJLSVRf
SVNfT1BUSU9OX01FTlUob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgo
b2JqKSwgV0VCS0lUX1RZUEVfT1BUSU9OX01FTlUpKQorI2RlZmluZSBXRUJLSVRfT1BUSU9OX01F
TlVfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VC
S0lUX1RZUEVfT1BUSU9OX01FTlUsIFdlYktpdE9wdGlvbk1lbnVDbGFzcykpCisjZGVmaW5lIFdF
QktJVF9JU19PUFRJT05fTUVOVV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBF
KChrbGFzcyksICBXRUJLSVRfVFlQRV9PUFRJT05fTUVOVSkpCisjZGVmaW5lIFdFQktJVF9PUFRJ
T05fTUVOVV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiks
ICBXRUJLSVRfVFlQRV9PUFRJT05fTUVOVSwgV2ViS2l0T3B0aW9uTWVudUNsYXNzKSkKKwordHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdE9wdGlvbk1lbnUgICAgICAgIFdlYktpdE9wdGlvbk1lbnU7Cit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0T3B0aW9uTWVudUNsYXNzICAgV2ViS2l0T3B0aW9uTWVudUNs
YXNzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdE9wdGlvbk1lbnVQcml2YXRlIFdlYktpdE9wdGlv
bk1lbnVQcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdE9wdGlvbk1lbnUgeworICAgIEdPYmplY3Qg
cGFyZW50OworCisgICAgV2ViS2l0T3B0aW9uTWVudVByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1
Y3QgX1dlYktpdE9wdGlvbk1lbnVDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFz
czsKKworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMCkgKHZvaWQpOworICAgIHZvaWQgKCpf
d2Via2l0X3Jlc2VydmVkMSkgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMikg
KHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMykgKHZvaWQpOworfTsKKworV0VC
S0lUX0FQSSBHVHlwZQord2Via2l0X29wdGlvbl9tZW51X2dldF90eXBlICAgICAgICh2b2lkKTsK
KworV0VCS0lUX0FQSSBndWludAord2Via2l0X29wdGlvbl9tZW51X2dldF9uX2l0ZW1zICAgIChX
ZWJLaXRPcHRpb25NZW51ICptZW51KTsKKworV0VCS0lUX0FQSSBXZWJLaXRPcHRpb25NZW51SXRl
bSAqCit3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X2l0ZW0gICAgICAgKFdlYktpdE9wdGlvbk1lbnUg
Km1lbnUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAg
ICAgIGluZGV4KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfb3B0aW9uX21lbnVfc2VsZWN0
X2l0ZW0gICAgKFdlYktpdE9wdGlvbk1lbnUgKm1lbnUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgIGluZGV4KTsKKworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfb3B0aW9uX21lbnVfYWN0aXZhdGVfaXRlbSAgKFdlYktpdE9wdGlvbk1lbnUgKm1l
bnUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAg
IGluZGV4KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfb3B0aW9uX21lbnVfY2xvc2UgICAg
ICAgICAgKFdlYktpdE9wdGlvbk1lbnUgKm1lbnUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0T3B0aW9u
TWVudUl0ZW0uaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0T3B0aW9u
TWVudUl0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNGE1N2Q0MzFhODBmZTY2OTBmYTMyYjM5NTc3YTk5N2Rj
ZjgxMTcwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dw
ZS9XZWJLaXRPcHRpb25NZW51SXRlbS5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lUX0hfSU5TSURFX18p
ICYmICFkZWZpbmVkKFdFQktJVDJfQ09NUElMQVRJT04pCisjZXJyb3IgIk9ubHkgPHdwZS93ZWJr
aXQuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktp
dE9wdGlvbk1lbnVJdGVtX2gKKyNkZWZpbmUgV2ViS2l0T3B0aW9uTWVudUl0ZW1faAorCisjaW5j
bHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3cGUvV2ViS2l0RGVmaW5lcy5oPgorCitH
X0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfT1BUSU9OX01FTlVfSVRFTSAod2Vi
a2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X3R5cGUoKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dE9wdGlvbk1lbnVJdGVtIFdlYktpdE9wdGlvbk1lbnVJdGVtOworCitXRUJLSVRfQVBJIEdUeXBl
Cit3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfdHlwZSAgICAgICAodm9pZCk7CisKK1dFQktJ
VF9BUEkgV2ViS2l0T3B0aW9uTWVudUl0ZW0gKgord2Via2l0X29wdGlvbl9tZW51X2l0ZW1fY29w
eSAgICAgICAgICAgKFdlYktpdE9wdGlvbk1lbnVJdGVtICppdGVtKTsKKworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9mcmVlICAgICAgICAgICAoV2ViS2l0T3B0aW9u
TWVudUl0ZW0gKml0ZW0pOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICoKK3dlYmtpdF9vcHRp
b25fbWVudV9pdGVtX2dldF9sYWJlbCAgICAgIChXZWJLaXRPcHRpb25NZW51SXRlbSAqaXRlbSk7
CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0
X3Rvb2x0aXAgICAgKFdlYktpdE9wdGlvbk1lbnVJdGVtICppdGVtKTsKKworV0VCS0lUX0FQSSBn
Ym9vbGVhbgord2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfbGFiZWwgKFdlYktpdE9w
dGlvbk1lbnVJdGVtICppdGVtKTsKKworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X29wdGlv
bl9tZW51X2l0ZW1faXNfZ3JvdXBfY2hpbGQgKFdlYktpdE9wdGlvbk1lbnVJdGVtICppdGVtKTsK
KworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZW5hYmxl
ZCAgICAgKFdlYktpdE9wdGlvbk1lbnVJdGVtICppdGVtKTsKKworV0VCS0lUX0FQSSBnYm9vbGVh
bgord2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfc2VsZWN0ZWQgICAgKFdlYktpdE9wdGlvbk1l
bnVJdGVtICppdGVtKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFBvcHVwTWVudS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFBvcHVwTWVudS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NzEzODYyODZiZGE1ZDRjODE3NTBlMWIzYzA3ODY5MDNhMmI4Mzc3ZgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0UG9wdXBNZW51LmNwcApA
QCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRQb3B1cE1lbnUuaCIKKworI2luY2x1
ZGUgIkFQSVZpZXdDbGllbnQuaCIKKyNpbmNsdWRlICJXUEVWaWV3LmgiCisjaW5jbHVkZSAiV2Vi
S2l0T3B0aW9uTWVudVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJWaWV3Q2xpZW50Lmgi
CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1JlZjxX
ZWJLaXRQb3B1cE1lbnU+IFdlYktpdFBvcHVwTWVudTo6Y3JlYXRlKFdLV1BFOjpWaWV3JiB2aWV3
LCBXZWJQb3B1cE1lbnVQcm94eTo6Q2xpZW50JiBjbGllbnQpCit7CisgICAgQVNTRVJUKHZpZXcu
Y2xpZW50KCkuaXNHTGliQmFzZWRBUEkoKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2Vi
S2l0UG9wdXBNZW51KHZpZXcsIGNsaWVudCkpOworfQorCitXZWJLaXRQb3B1cE1lbnU6OldlYktp
dFBvcHVwTWVudShXS1dQRTo6VmlldyYgdmlldywgV2ViUG9wdXBNZW51UHJveHk6OkNsaWVudCYg
Y2xpZW50KQorICAgIDogV2ViUG9wdXBNZW51UHJveHkoY2xpZW50KQorICAgICwgbV92aWV3KHZp
ZXcpCit7Cit9CisKK3N0YXRpYyB2b2lkIG1lbnVDbG9zZUNhbGxiYWNrKFdlYktpdFBvcHVwTWVu
dSogcG9wdXBNZW51KQoreworICAgIHBvcHVwTWVudS0+YWN0aXZhdGVJdGVtKFdURjo6bnVsbG9w
dCk7Cit9CisKK3ZvaWQgV2ViS2l0UG9wdXBNZW51OjpzaG93UG9wdXBNZW51KGNvbnN0IEludFJl
Y3QmIHJlY3QsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBkb3VibGUgcGFnZVNjYWxlRmFjdG9y
LCBjb25zdCBWZWN0b3I8V2ViUG9wdXBJdGVtPiYgaXRlbXMsIGNvbnN0IFBsYXRmb3JtUG9wdXBN
ZW51RGF0YSYgcGxhdGZvcm1EYXRhLCBpbnQzMl90IHNlbGVjdGVkSW5kZXgpCit7CisgICAgR1Jl
ZlB0cjxXZWJLaXRPcHRpb25NZW51PiBtZW51ID0gc3RhdGljX2Nhc3Q8V2ViS2l0V2ViVmlld0Ns
aWVudCY+KG1fdmlldy5jbGllbnQoKSkuc2hvd09wdGlvbk1lbnUoKnRoaXMsIGl0ZW1zLCBzZWxl
Y3RlZEluZGV4KTsKKyAgICBpZiAobWVudSkgeworICAgICAgICBtX21lbnUgPSBXVEZNb3ZlKG1l
bnUpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9tZW51LmdldCgpLCAiY2xv
c2UiLCBHX0NBTExCQUNLKG1lbnVDbG9zZUNhbGxiYWNrKSwgdGhpcyk7CisgICAgfQorfQorCit2
b2lkIFdlYktpdFBvcHVwTWVudTo6aGlkZVBvcHVwTWVudSgpCit7CisgICAgaWYgKG1fbWVudSkg
eworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9tZW51Lmdl
dCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlzKTsK
KyAgICAgICAgd2Via2l0X29wdGlvbl9tZW51X2Nsb3NlKG1fbWVudS5nZXQoKSk7CisgICAgfQor
fQorCit2b2lkIFdlYktpdFBvcHVwTWVudTo6Y2FuY2VsVHJhY2tpbmcoKQoreworICAgIGhpZGVQ
b3B1cE1lbnUoKTsKKyAgICBtX21lbnUgPSBudWxscHRyOworfQorCit2b2lkIFdlYktpdFBvcHVw
TWVudTo6c2VsZWN0SXRlbSh1bnNpZ25lZCBpdGVtSW5kZXgpCit7CisgICAgaWYgKG1fY2xpZW50
KQorICAgICAgICBtX2NsaWVudC0+c2V0VGV4dEZyb21JdGVtRm9yUG9wdXBNZW51KHRoaXMsIGl0
ZW1JbmRleCk7CisgICAgbV9zZWxlY3RlZEl0ZW0gPSBpdGVtSW5kZXg7Cit9CisKK3ZvaWQgV2Vi
S2l0UG9wdXBNZW51OjphY3RpdmF0ZUl0ZW0oT3B0aW9uYWw8dW5zaWduZWQ+IGl0ZW1JbmRleCkK
K3sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT52YWx1ZUNoYW5nZWRGb3JQ
b3B1cE1lbnUodGhpcywgaXRlbUluZGV4LnZhbHVlT3IobV9zZWxlY3RlZEl0ZW0udmFsdWVPcigt
MSkpKTsKKyAgICBpZiAobV9tZW51KSB7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nv
bm5lY3RfbWF0Y2hlZChtX21lbnUuZ2V0KCksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIG51
bGxwdHIsIG51bGxwdHIsIHRoaXMpOworICAgICAgICBtX21lbnUgPSBudWxscHRyOworICAgIH0K
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvd3BlL1dlYktpdFBvcHVwTWVudS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL3dwZS9XZWJLaXRQb3B1cE1lbnUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZmI5YmNiOGFjZTNjZTdi
OTYzMGViYWVhY2RiM2NlOWEyMTIwZGJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRQb3B1cE1lbnUuaApAQCAtMCwwICsxLDUzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiV2ViUG9wdXBNZW51UHJveHkuaCIKKyNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+
CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRPcHRpb25NZW51IFdlYktpdE9wdGlvbk1lbnU7CisK
K25hbWVzcGFjZSBXS1dQRSB7CitjbGFzcyBWaWV3OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgV2ViS2l0UG9wdXBNZW51IGZpbmFsIDogcHVibGljIFdlYlBvcHVwTWVudVByb3h5
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFdlYktpdFBvcHVwTWVudT4gY3JlYXRlKFdLV1BF
OjpWaWV3JiwgV2ViUG9wdXBNZW51UHJveHk6OkNsaWVudCYpOworICAgIH5XZWJLaXRQb3B1cE1l
bnUoKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIHNlbGVjdEl0ZW0odW5zaWduZWQgaXRlbUluZGV4
KTsKKyAgICB2b2lkIGFjdGl2YXRlSXRlbShPcHRpb25hbDx1bnNpZ25lZD4gaXRlbUluZGV4KTsK
KworcHJpdmF0ZToKKyAgICBXZWJLaXRQb3B1cE1lbnUoV0tXUEU6OlZpZXcmLCBXZWJQb3B1cE1l
bnVQcm94eTo6Q2xpZW50Jik7CisKKyAgICB2b2lkIHNob3dQb3B1cE1lbnUoY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYsIFdlYkNvcmU6OlRleHREaXJlY3Rpb24sIGRvdWJsZSBwYWdlU2NhbGVGYWN0
b3IsIGNvbnN0IFZlY3RvcjxXZWJQb3B1cEl0ZW0+JiwgY29uc3QgUGxhdGZvcm1Qb3B1cE1lbnVE
YXRhJiwgaW50MzJfdCBzZWxlY3RlZEluZGV4KSBvdmVycmlkZTsKKyAgICB2b2lkIGhpZGVQb3B1
cE1lbnUoKSBvdmVycmlkZTsKKyAgICB2b2lkIGNhbmNlbFRyYWNraW5nKCkgb3ZlcnJpZGU7CisK
KyAgICBXS1dQRTo6VmlldyYgbV92aWV3OworICAgIEdSZWZQdHI8V2ViS2l0T3B0aW9uTWVudT4g
bV9tZW51OworICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBtX3NlbGVjdGVkSXRlbTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL3dwZS9XZWJLaXRXZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3Bl
L1dlYktpdFdlYlZpZXcuaAppbmRleCAwMTc0MzRkZWJkZjcxNjIyM2Y3ZDZkMDFkNmQ3OTkzNzQ5
Y2I4ZDQ4Li4xODY0N2RmMzYxY2ZlNTE1NDAxOWI5MGIyNzUzMzg0NzYyMzQ2MDY3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYlZpZXcuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYlZpZXcuaApAQCAtNDEs
NiArNDEsNyBAQAogI2luY2x1ZGUgPHdwZS9XZWJLaXRKYXZhc2NyaXB0UmVzdWx0Lmg+CiAjaW5j
bHVkZSA8d3BlL1dlYktpdE5hdmlnYXRpb25BY3Rpb24uaD4KICNpbmNsdWRlIDx3cGUvV2ViS2l0
Tm90aWZpY2F0aW9uLmg+CisjaW5jbHVkZSA8d3BlL1dlYktpdE9wdGlvbk1lbnUuaD4KICNpbmNs
dWRlIDx3cGUvV2ViS2l0UGVybWlzc2lvblJlcXVlc3QuaD4KICNpbmNsdWRlIDx3cGUvV2ViS2l0
UG9saWN5RGVjaXNpb24uaD4KICNpbmNsdWRlIDx3cGUvV2ViS2l0U2NyaXB0RGlhbG9nLmg+CkBA
IC0yNDUsNyArMjQ2LDkgQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3MgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFdlYlByb2Nl
c3NUZXJtaW5hdGlvblJlYXNvbiByZWFzb24pOwogICAgIGdib29sZWFuICAgICAgICgqIHVzZXJf
bWVzc2FnZV9yZWNlaXZlZCkgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgICAqd2Vi
X3ZpZXcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV2ViS2l0VXNlck1lc3NhZ2UgICAgICAgICAgICptZXNzYWdlKTsKLQorICAgIGdib29sZWFu
ICAgICAgICgqIHNob3dfb3B0aW9uX21lbnUpICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAg
ICAgICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViS2l0T3B0aW9uTWVudSAgICAgICAgICAgICptZW51LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVy
ICAgICAgICAgICAgICAgICAgICAqcmVjdGFuZ2xlKTsKIAogICAgIHZvaWQgKCpfd2Via2l0X3Jl
c2VydmVkMCkgKHZvaWQpOwogICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMSkgKHZvaWQpOwpA
QCAtMjUzLDcgKzI1Niw2IEBAIHN0cnVjdCBfV2ViS2l0V2ViVmlld0NsYXNzIHsKICAgICB2b2lk
ICgqX3dlYmtpdF9yZXNlcnZlZDMpICh2b2lkKTsKICAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZl
ZDQpICh2b2lkKTsKICAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDUpICh2b2lkKTsKLSAgICB2
b2lkICgqX3dlYmtpdF9yZXNlcnZlZDYpICh2b2lkKTsKIH07CiAKIFdFQktJVF9BUEkgR1R5cGUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0V2ViVmll
d0NsaWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRXZWJWaWV3
Q2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOGNmMGRhZDAwNGMxOGYwMGVhYjEwY2JiM2Q3ZjQ2NzhjNjY5
ZThjZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUv
V2ViS2l0V2ViVmlld0NsaWVudC5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBUElWaWV3Q2xp
ZW50LmgiCisjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CisKK3R5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRXZWJWaWV3IFdlYktpdFdlYlZpZXc7CisKK25hbWVzcGFjZSBXS1dQRSB7Citj
bGFzcyBWaWV3OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIERvd25sb2FkUHJveHk7
CitjbGFzcyBXZWJLaXRQb3B1cE1lbnU7CitjbGFzcyBXZWJQb3B1cEl0ZW07CitzdHJ1Y3QgVXNl
ck1lc3NhZ2U7Cit9CisKK2NsYXNzIFdlYktpdFdlYlZpZXdDbGllbnQgZmluYWwgOiBwdWJsaWMg
QVBJOjpWaWV3Q2xpZW50IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBleHBsaWNpdCBXZWJLaXRXZWJWaWV3Q2xpZW50KFdlYktpdFdlYlZpZXcqKTsKKworICAg
IEdSZWZQdHI8V2ViS2l0T3B0aW9uTWVudT4gc2hvd09wdGlvbk1lbnUoV2ViS2l0OjpXZWJLaXRQ
b3B1cE1lbnUmLCBjb25zdCBWZWN0b3I8V2ViS2l0OjpXZWJQb3B1cEl0ZW0+JiwgaW50MzJfdCBz
ZWxlY3RlZEluZGV4KTsKKworcHJpdmF0ZToKKyAgICBib29sIGlzR0xpYkJhc2VkQVBJKCkgb3Zl
cnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdm9pZCBmcmFtZURpc3BsYXllZChXS1dQRTo6
VmlldyYpIG92ZXJyaWRlOworICAgIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KFdLV1BFOjpW
aWV3JiwgV2ViS2l0OjpEb3dubG9hZFByb3h5Jikgb3ZlcnJpZGU7CisgICAgdm9pZCB3aWxsU3Rh
cnRMb2FkKFdLV1BFOjpWaWV3Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDaGFuZ2VQYWdlSUQo
V0tXUEU6OlZpZXcmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZFJlY2VpdmVVc2VyTWVzc2FnZShX
S1dQRTo6VmlldyYsIFdlYktpdDo6VXNlck1lc3NhZ2UmJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChXZWJLaXQ6OlVzZXJNZXNzYWdlJiYpPiYmKSBvdmVycmlkZTsKKworICAgIFdlYktpdFdlYlZp
ZXcqIG1fd2ViVmlldzsKK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvd3BlL2RvY3Mvd3BlLTEuMC1zZWN0aW9ucy50eHQgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvd3BlL2RvY3Mvd3BlLTEuMC1zZWN0aW9ucy50eHQKaW5kZXggMWQxZDU3YjE3MTg1N2Vk
ODExMjUzMGUyNzZiMWVlYmEyYWJlZjM5My4uODNkZWYyNWE1NTA3YTcxMzZhZTY0ZmU2OWY0MTJm
OWI1MTQ0MzcyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9k
b2NzL3dwZS0xLjAtc2VjdGlvbnMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS93cGUvZG9jcy93cGUtMS4wLXNlY3Rpb25zLnR4dApAQCAtMTIzMCw2ICsxMjMwLDQ4IEBAIFdl
YktpdENvbnRleHRNZW51SXRlbVByaXZhdGUKIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRf
dHlwZQogPC9TRUNUSU9OPgogCis8U0VDVElPTj4KKzxGSUxFPldlYktpdE9wdGlvbk1lbnU8L0ZJ
TEU+CitXZWJLaXRPcHRpb25NZW51Cit3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X25faXRlbXMKK3dl
YmtpdF9vcHRpb25fbWVudV9nZXRfaXRlbQord2Via2l0X29wdGlvbl9tZW51X3NlbGVjdF9pdGVt
Cit3ZWJraXRfb3B0aW9uX21lbnVfYWN0aXZhdGVfaXRlbQord2Via2l0X29wdGlvbl9tZW51X2Ns
b3NlCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0T3B0aW9uTWVudUNsYXNzCitXRUJL
SVRfVFlQRV9PUFRJT05fTUVOVQorV0VCS0lUX09QVElPTl9NRU5VCitXRUJLSVRfSVNfT1BUSU9O
X01FTlUKK1dFQktJVF9PUFRJT05fTUVOVV9DTEFTUworV0VCS0lUX0lTX09QVElPTl9NRU5VX0NM
QVNTCitXRUJLSVRfT1BUSU9OX01FTlVfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+
CitXZWJLaXRPcHRpb25NZW51UHJpdmF0ZQord2Via2l0X29wdGlvbl9tZW51X2dldF90eXBlCis8
L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0T3B0aW9uTWVudUl0ZW08L0ZJTEU+
CitXZWJLaXRPcHRpb25NZW51SXRlbQord2Via2l0X29wdGlvbl9tZW51X2l0ZW1fY29weQord2Vi
a2l0X29wdGlvbl9tZW51X2l0ZW1fZnJlZQord2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X2xh
YmVsCit3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfdG9vbHRpcAord2Via2l0X29wdGlvbl9t
ZW51X2l0ZW1faXNfZ3JvdXBfbGFiZWwKK3dlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3Vw
X2NoaWxkCit3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19lbmFibGVkCit3ZWJraXRfb3B0aW9u
X21lbnVfaXRlbV9pc19zZWxlY3RlZAorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dFQktJVF9U
WVBFX09QVElPTl9NRU5VX0lURU0KKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9vcHRp
b25fbWVudV9pdGVtX2dldF90eXBlCis8L1NFQ1RJT04+CisKIDxTRUNUSU9OPgogPEZJTEU+V2Vi
S2l0Rm9ybVN1Ym1pc3Npb25SZXF1ZXN0PC9GSUxFPgogV2ViS2l0Rm9ybVN1Ym1pc3Npb25SZXF1
ZXN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL3dlYmtpdC5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS93ZWJraXQuaAppbmRleCAxNWE0YzFm
ZjFjNGFlZWU3ZDgwNzg1NmRiMGIzYTc0MDAyZTQyMWRkLi4wMmUyNTgyNTNlNDdmYmY2NTk0YzIw
Zjc0M2QwZmFlYWM4YTRlZWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvd3BlL3dlYmtpdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvd2Vi
a2l0LmgKQEAgLTU5LDYgKzU5LDggQEAKICNpbmNsdWRlIDx3cGUvV2ViS2l0TmV0d29ya1Byb3h5
U2V0dGluZ3MuaD4KICNpbmNsdWRlIDx3cGUvV2ViS2l0Tm90aWZpY2F0aW9uLmg+CiAjaW5jbHVk
ZSA8d3BlL1dlYktpdE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0Lmg+CisjaW5jbHVkZSA8
d3BlL1dlYktpdE9wdGlvbk1lbnUuaD4KKyNpbmNsdWRlIDx3cGUvV2ViS2l0T3B0aW9uTWVudUl0
ZW0uaD4KICNpbmNsdWRlIDx3cGUvV2ViS2l0UGVybWlzc2lvblJlcXVlc3QuaD4KICNpbmNsdWRl
IDx3cGUvV2ViS2l0UGx1Z2luLmg+CiAjaW5jbHVkZSA8d3BlL1dlYktpdFJlc3BvbnNlUG9saWN5
RGVjaXNpb24uaD4KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxv
ZwppbmRleCA3YzFjN2Y2OTA3ZTJmODNhMTY5MzdkN2JmZDhhMDFhOGVmNDI3ZWMzLi41YTU5YmM1
MWU0NDY0M2FlNGJhYjdjMDk0MGIzMDAzNDMzMzdmNTU4IDEwMDY0NAotLS0gYS9Ub29scy9DaGFu
Z2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAKKzIwMjAtMDEtMjAg
IFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtXUEVdIEV4
cG9zZSB0aGUgV2ViS2l0T3B0aW9uTWVudSBBUElzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDYyODcKKworICAgICAgICBNb3ZlIFRlc3RPcHRpb25N
ZW51IHVuZGVyIHRoZSBXZWJLaXRHTGliIGRpcmVjdG9yeSwgYWRkaW5nIHRoZQorICAgICAgICBh
cHByb3ByaWF0ZSBhZGp1c3RtZW50cyBmb3IgdGhlIFdQRSB2YXJpYW50IG9mIHRoZSBBUEkKKwor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0T3B0aW9uTWVudS5j
cHA6IFJlbmFtZWQgZnJvbSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0
T3B0aW9uTWVudS5jcHAuCisgICAgICAgIChPcHRpb25NZW51VGVzdDo6T3B0aW9uTWVudVRlc3Qp
OgorICAgICAgICAoT3B0aW9uTWVudVRlc3Q6On5PcHRpb25NZW51VGVzdCk6CisgICAgICAgIChP
cHRpb25NZW51VGVzdDo6ZGVzdHJveU1lbnUpOgorICAgICAgICAoT3B0aW9uTWVudVRlc3Q6OnNo
b3dPcHRpb25NZW51Q2FsbGJhY2spOgorICAgICAgICAoT3B0aW9uTWVudVRlc3Q6Om1lbnVDbG9z
ZUNhbGxiYWNrKToKKyAgICAgICAgKE9wdGlvbk1lbnVUZXN0OjpzaG93T3B0aW9uTWVudSk6Cisg
ICAgICAgIChPcHRpb25NZW51VGVzdDo6Y2xpY2tBdFBvc2l0aW9uQW5kV2FpdFVudGlsT3B0aW9u
TWVudVNob3duKToKKyAgICAgICAgKE9wdGlvbk1lbnVUZXN0OjpjbG9zZSk6CisgICAgICAgIChP
cHRpb25NZW51VGVzdDo6YWN0aXZhdGVJdGVtKToKKyAgICAgICAgKE9wdGlvbk1lbnVUZXN0Ojpz
ZWxlY3RJdGVtKToKKyAgICAgICAgKHRlc3RPcHRpb25NZW51U2ltcGxlKToKKyAgICAgICAgKHRl
c3RPcHRpb25NZW51R3JvdXBzKToKKyAgICAgICAgKHRlc3RPcHRpb25NZW51QWN0aXZhdGUpOgor
ICAgICAgICAodGVzdE9wdGlvbk1lbnVTZWxlY3QpOgorICAgICAgICAoYmVmb3JlQWxsKToKKyAg
ICAgICAgKGFmdGVyQWxsKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2dsaWIvQ01ha2VMaXN0
cy50eHQ6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9nbGliL1BsYXRmb3JtR1RLLmNtYWtlOgor
CiAyMDIwLTAxLTE3ICBDYXRoaWUgQ2hlbiAgPGNhdGhpZWNoZW5AaWdhbGlhLmNvbT4KIAogICAg
ICAgICBBZGQgc3VwcG9ydCBmb3Igc2Nyb2xsIGJlaGF2aW9yIHBhcnNpbmcKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0T3B0aW9uTWVudS5jcHAg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdE9wdGlvbk1lbnUuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmIyYTY5MTY5MDdmNDVhMmQwM2NjOThkNDM0MmEzODFkZmEwNjE3MjgKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVz
dE9wdGlvbk1lbnUuY3BwCkBAIC0wLDAgKzEsMzI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIs
MSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViVmlld1Rl
c3QuaCIKKworI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisKK2NsYXNzIE9wdGlvbk1lbnVUZXN0
IDogcHVibGljIFdlYlZpZXdUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhU
VVJFKE9wdGlvbk1lbnVUZXN0KTsKKworICAgIE9wdGlvbk1lbnVUZXN0KCkKKyAgICB7CisgICAg
ICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAic2hvdy1vcHRpb24tbWVudSIsIEdfQ0FM
TEJBQ0soc2hvd09wdGlvbk1lbnVDYWxsYmFjayksIHRoaXMpOworICAgIH0KKworICAgIH5PcHRp
b25NZW51VGVzdCgpCisgICAgeworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0
X21hdGNoZWQobV93ZWJWaWV3LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlz
KTsKKyAgICAgICAgaWYgKG1fbWVudSkKKyAgICAgICAgICAgIGNsb3NlKCk7CisgICAgfQorCisg
ICAgdm9pZCBkZXN0cm95TWVudSgpCisgICAgeworICAgICAgICBpZiAoIW1fbWVudSkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21h
dGNoZWQobV9tZW51LmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlz
KTsKKyAgICAgICAgbV9tZW51ID0gbnVsbHB0cjsKKyAgICB9CisKKyNpZiBQTEFURk9STShHVEsp
CisgICAgc3RhdGljIGdib29sZWFuIHNob3dPcHRpb25NZW51Q2FsbGJhY2soV2ViS2l0V2ViVmll
dyogd2ViVmlldywgV2ViS2l0T3B0aW9uTWVudSogbWVudSwgR2RrRXZlbnQqIGV2ZW50LCBHZGtS
ZWN0YW5nbGUqIHJlY3QsIE9wdGlvbk1lbnVUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgZ19h
c3NlcnRfdHJ1ZSh0ZXN0LT5tX3dlYlZpZXcgPT0gd2ViVmlldyk7CisgICAgICAgIGdfYXNzZXJ0
X25vbm51bGwocmVjdCk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoV0VCS0lUX0lTX09QVElPTl9N
RU5VKG1lbnUpKTsKKyAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RG
aW5pc2hlcyhHX09CSkVDVChtZW51KSk7CisgICAgICAgIHRlc3QtPnNob3dPcHRpb25NZW51KG1l
bnUsIHJlY3QpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisjZWxpZiBQTEFURk9STShX
UEUpCisgICAgc3RhdGljIGdib29sZWFuIHNob3dPcHRpb25NZW51Q2FsbGJhY2soV2ViS2l0V2Vi
Vmlldyogd2ViVmlldywgV2ViS2l0T3B0aW9uTWVudSogbWVudSwgZ3BvaW50ZXIqLCBPcHRpb25N
ZW51VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0X3RydWUodGVzdC0+bV93ZWJW
aWV3ID09IHdlYlZpZXcpOworICAgICAgICBnX2Fzc2VydF90cnVlKFdFQktJVF9JU19PUFRJT05f
TUVOVShtZW51KSk7CisgICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0
RmluaXNoZXMoR19PQkpFQ1QobWVudSkpOworICAgICAgICB0ZXN0LT5zaG93T3B0aW9uTWVudSht
ZW51KTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorI2VuZGlmCisKKyAgICBzdGF0aWMg
dm9pZCBtZW51Q2xvc2VDYWxsYmFjayhXZWJLaXRPcHRpb25NZW51KiBtZW51LCBPcHRpb25NZW51
VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0X3RydWUodGVzdC0+bV9tZW51Lmdl
dCgpID09IG1lbnUpOworICAgICAgICB0ZXN0LT5kZXN0cm95TWVudSgpOworICAgIH0KKworI2lm
IFBMQVRGT1JNKEdUSykKKyAgICB2b2lkIHNob3dPcHRpb25NZW51KFdlYktpdE9wdGlvbk1lbnUq
IG1lbnUsIEdka1JlY3RhbmdsZSogcmVjdCkKKyAgICB7CisgICAgICAgIG1fcmVjdGFuZ2xlID0g
KnJlY3Q7CisgICAgICAgIG1fbWVudSA9IG1lbnU7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
bV9tZW51LmdldCgpLCAiY2xvc2UiLCBHX0NBTExCQUNLKG1lbnVDbG9zZUNhbGxiYWNrKSwgdGhp
cyk7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7CisgICAgfQorI2VsaWYg
UExBVEZPUk0oV1BFKQorICAgIHZvaWQgc2hvd09wdGlvbk1lbnUoV2ViS2l0T3B0aW9uTWVudSog
bWVudSkKKyAgICB7CisgICAgICAgIG1fbWVudSA9IG1lbnU7CisgICAgICAgIGdfc2lnbmFsX2Nv
bm5lY3QobV9tZW51LmdldCgpLCAiY2xvc2UiLCBHX0NBTExCQUNLKG1lbnVDbG9zZUNhbGxiYWNr
KSwgdGhpcyk7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7CisgICAgfQor
I2VuZGlmCisKKyAgICB2b2lkIGNsaWNrQXRQb3NpdGlvbkFuZFdhaXRVbnRpbE9wdGlvbk1lbnVT
aG93bihpbnQgeCwgaW50IHkpCisgICAgeworICAgICAgICBtX21lbnUgPSBudWxscHRyOworICAg
ICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3RoaXMsIHgsIHldIHsgY2xpY2tNb3VzZUJ1
dHRvbih4LCB5KTsgfSk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAg
ICB9CisKKyAgICB2b2lkIGNsb3NlKCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0X25vbm51bGwo
bV9tZW51LmdldCgpKTsKKyAgICAgICAgd2Via2l0X29wdGlvbl9tZW51X2Nsb3NlKG1fbWVudS5n
ZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X251bGwobV9tZW51LmdldCgpKTsKKyAgICB9CisKKyAg
ICB2b2lkIGFjdGl2YXRlSXRlbSh1bnNpZ25lZCBpdGVtKQorICAgIHsKKyAgICAgICAgZ19hc3Nl
cnRfbm9ubnVsbChtX21lbnUuZ2V0KCkpOworICAgICAgICB3ZWJraXRfb3B0aW9uX21lbnVfYWN0
aXZhdGVfaXRlbShtX21lbnUuZ2V0KCksIGl0ZW0pOworICAgICAgICBnX2Fzc2VydF9ub25udWxs
KG1fbWVudS5nZXQoKSk7CisgICAgfQorCisgICAgdm9pZCBzZWxlY3RJdGVtKHVuc2lnbmVkIGl0
ZW0pCisgICAgeworICAgICAgICBnX2Fzc2VydF9ub25udWxsKG1fbWVudS5nZXQoKSk7CisgICAg
ICAgIHdlYmtpdF9vcHRpb25fbWVudV9zZWxlY3RfaXRlbShtX21lbnUuZ2V0KCksIGl0ZW0pOwor
ICAgICAgICBnX2Fzc2VydF9ub25udWxsKG1fbWVudS5nZXQoKSk7CisgICAgfQorCisgICAgR1Jl
ZlB0cjxXZWJLaXRPcHRpb25NZW51PiBtX21lbnU7CisjaWYgUExBVEZPUk0oR1RLKQorICAgIEdk
a1JlY3RhbmdsZSBtX3JlY3RhbmdsZTsKKyNlbmRpZgorfTsKKworc3RhdGljIHZvaWQgdGVzdE9w
dGlvbk1lbnVTaW1wbGUoT3B0aW9uTWVudVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7Cisg
ICAgc3RhdGljIGNvbnN0IGNoYXIgaHRtbFtdID0KKyAgICAgICAgIjxodG1sPjxib2R5PiIKKyAg
ICAgICAgIiAgPHNlbGVjdCBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjEw
Jz4iCisgICAgICAgICIgICAgPG9wdGlvbiB0aXRsZT0nVGhlIEZvbyBPcHRpb24nPkZvbzwvb3B0
aW9uPiIKKyAgICAgICAgIiAgICA8b3B0aW9uIHNlbGVjdGVkPkJhcjwvb3B0aW9uPiIKKyAgICAg
ICAgIiAgICA8b3B0aW9uIGRpc2FibGVkPkJhejwvb3B0aW9uPiIKKyAgICAgICAgIiAgPC9zZWxl
Y3Q+PC9ib2R5PjwvaHRtbD4iOworICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1h
cHBlZCgpOworICAgIHRlc3QtPmxvYWRIdG1sKGh0bWwsIG51bGxwdHIpOworICAgIHRlc3QtPndh
aXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+Y2xpY2tBdFBvc2l0aW9uQW5kV2Fp
dFVudGlsT3B0aW9uTWVudVNob3duKDUsIDE1KTsKKyAgICBnX2Fzc2VydF90cnVlKFdFQktJVF9J
U19PUFRJT05fTUVOVSh0ZXN0LT5tX21lbnUuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
d2Via2l0X29wdGlvbl9tZW51X2dldF9uX2l0ZW1zKHRlc3QtPm1fbWVudS5nZXQoKSksID09LCAz
KTsKKyAgICBhdXRvKiBpdGVtID0gd2Via2l0X29wdGlvbl9tZW51X2dldF9pdGVtKHRlc3QtPm1f
bWVudS5nZXQoKSwgMCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9vcHRpb25fbWVudV9p
dGVtX2dldF9sYWJlbChpdGVtKSwgPT0sICJGb28iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X3Rvb2x0aXAoaXRlbSksID09LCAiVGhlIEZvbyBPcHRp
b24iKTsKKyAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91
cF9sYWJlbChpdGVtKSk7CisgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0
ZW1faXNfZ3JvdXBfY2hpbGQoaXRlbSkpOworICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X29wdGlv
bl9tZW51X2l0ZW1faXNfZW5hYmxlZChpdGVtKSk7CisgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0
X29wdGlvbl9tZW51X2l0ZW1faXNfc2VsZWN0ZWQoaXRlbSkpOworICAgIGl0ZW0gPSB3ZWJraXRf
b3B0aW9uX21lbnVfZ2V0X2l0ZW0odGVzdC0+bV9tZW51LmdldCgpLCAxKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X2xhYmVsKGl0ZW0pLCA9PSwgIkJh
ciIpOworICAgIGdfYXNzZXJ0X251bGwod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X3Rvb2x0
aXAoaXRlbSkpOworICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lz
X2dyb3VwX2xhYmVsKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21l
bnVfaXRlbV9pc19ncm91cF9jaGlsZChpdGVtKSk7CisgICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRf
b3B0aW9uX21lbnVfaXRlbV9pc19lbmFibGVkKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF90cnVlKHdl
YmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX3NlbGVjdGVkKGl0ZW0pKTsKKyAgICBpdGVtID0gd2Vi
a2l0X29wdGlvbl9tZW51X2dldF9pdGVtKHRlc3QtPm1fbWVudS5nZXQoKSwgMik7CisgICAgZ19h
c3NlcnRfY21wc3RyKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF9sYWJlbChpdGVtKSwgPT0s
ICJCYXoiKTsKKyAgICBnX2Fzc2VydF9udWxsKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF90
b29sdGlwKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRl
bV9pc19ncm91cF9sYWJlbChpdGVtKSk7CisgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlv
bl9tZW51X2l0ZW1faXNfZ3JvdXBfY2hpbGQoaXRlbSkpOworICAgIGdfYXNzZXJ0X2ZhbHNlKHdl
YmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2VuYWJsZWQoaXRlbSkpOworICAgIGdfYXNzZXJ0X2Zh
bHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX3NlbGVjdGVkKGl0ZW0pKTsKKworICAgIHRl
c3QtPmNsb3NlKCk7CisgICAgZ19hc3NlcnRfbnVsbCh0ZXN0LT5tX21lbnUuZ2V0KCkpOworfQor
CitzdGF0aWMgdm9pZCB0ZXN0T3B0aW9uTWVudUdyb3VwcyhPcHRpb25NZW51VGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciBodG1sW10gPQorICAgICAg
ICAiPGh0bWw+PGJvZHk+IgorICAgICAgICAiICA8c2VsZWN0IHN0eWxlPSdwb3NpdGlvbjphYnNv
bHV0ZTsgbGVmdDoxOyB0b3A6MTAnPiIKKyAgICAgICAgIiAgICA8b3B0aW9uPlJvb3Q8L29wdGlv
bj4iCisgICAgICAgICIgICAgPG9wdGdyb3VwIGxhYmVsPSdHcm91cCAxJz4iCisgICAgICAgICIg
ICAgICA8b3B0aW9uPkNoaWxkIDEtMTwvb3B0aW9uPiIKKyAgICAgICAgIiAgICAgIDxvcHRpb24g
ZGlzYWJsZWQ+Q2hpbGQgMS0yPC9vcHRpb24+IgorICAgICAgICAiICAgIDwvb3B0Z3JvdXA+Igor
ICAgICAgICAiICAgIDxvcHRncm91cCBsYWJlbD0nR3JvdXAgMic+IgorICAgICAgICAiICAgICAg
PG9wdGlvbiBzZWxlY3RlZD5DaGlsZCAyLTE8L29wdGlvbj4iCisgICAgICAgICIgICAgICA8b3B0
aW9uPkNoaWxkIDItMjwvb3B0aW9uPiIKKyAgICAgICAgIiAgICA8L29wdGdyb3VwPiIKKyAgICAg
ICAgIiAgICA8b3B0aW9uPlRhaWw8L29wdGlvbj4iCisgICAgICAgICIgIDwvc2VsZWN0PjwvYm9k
eT48L2h0bWw+IjsKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsK
KyAgICB0ZXN0LT5sb2FkSHRtbChodG1sLCBudWxscHRyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxM
b2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPmNsaWNrQXRQb3NpdGlvbkFuZFdhaXRVbnRpbE9w
dGlvbk1lbnVTaG93big1LCAxNSk7CisgICAgZ19hc3NlcnRfdHJ1ZShXRUJLSVRfSVNfT1BUSU9O
X01FTlUodGVzdC0+bV9tZW51LmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9v
cHRpb25fbWVudV9nZXRfbl9pdGVtcyh0ZXN0LT5tX21lbnUuZ2V0KCkpLCA9PSwgOCk7CisgICAg
YXV0byogaXRlbSA9IHdlYmtpdF9vcHRpb25fbWVudV9nZXRfaXRlbSh0ZXN0LT5tX21lbnUuZ2V0
KCksIDApOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRf
bGFiZWwoaXRlbSksID09LCAiUm9vdCIpOworICAgIGdfYXNzZXJ0X251bGwod2Via2l0X29wdGlv
bl9tZW51X2l0ZW1fZ2V0X3Rvb2x0aXAoaXRlbSkpOworICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtp
dF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2xhYmVsKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF9m
YWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9jaGlsZChpdGVtKSk7CisgICAg
Z19hc3NlcnRfdHJ1ZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19lbmFibGVkKGl0ZW0pKTsK
KyAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19zZWxlY3RlZChp
dGVtKSk7CisgICAgaXRlbSA9IHdlYmtpdF9vcHRpb25fbWVudV9nZXRfaXRlbSh0ZXN0LT5tX21l
bnUuZ2V0KCksIDEpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfb3B0aW9uX21lbnVfaXRl
bV9nZXRfbGFiZWwoaXRlbSksID09LCAiR3JvdXAgMSIpOworICAgIGdfYXNzZXJ0X251bGwod2Vi
a2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X3Rvb2x0aXAoaXRlbSkpOworICAgIGdfYXNzZXJ0X3Ry
dWUod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfbGFiZWwoaXRlbSkpOworICAgIGdf
YXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2NoaWxkKGl0ZW0p
KTsKKyAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19lbmFibGVk
KGl0ZW0pKTsKKyAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19z
ZWxlY3RlZChpdGVtKSk7CisgICAgaXRlbSA9IHdlYmtpdF9vcHRpb25fbWVudV9nZXRfaXRlbSh0
ZXN0LT5tX21lbnUuZ2V0KCksIDIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfb3B0aW9u
X21lbnVfaXRlbV9nZXRfbGFiZWwoaXRlbSksID09LCAiQ2hpbGQgMS0xIik7CisgICAgZ19hc3Nl
cnRfbnVsbCh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfdG9vbHRpcChpdGVtKSk7CisgICAg
Z19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfbGFiZWwoaXRl
bSkpOworICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBf
Y2hpbGQoaXRlbSkpOworICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X29wdGlvbl9tZW51X2l0ZW1f
aXNfZW5hYmxlZChpdGVtKSk7CisgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51
X2l0ZW1faXNfc2VsZWN0ZWQoaXRlbSkpOworICAgIGl0ZW0gPSB3ZWJraXRfb3B0aW9uX21lbnVf
Z2V0X2l0ZW0odGVzdC0+bV9tZW51LmdldCgpLCAzKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X2xhYmVsKGl0ZW0pLCA9PSwgIkNoaWxkIDEtMiIpOwor
ICAgIGdfYXNzZXJ0X251bGwod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X3Rvb2x0aXAoaXRl
bSkpOworICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3Vw
X2xhYmVsKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVt
X2lzX2dyb3VwX2NoaWxkKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9u
X21lbnVfaXRlbV9pc19lbmFibGVkKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRf
b3B0aW9uX21lbnVfaXRlbV9pc19zZWxlY3RlZChpdGVtKSk7CisgICAgaXRlbSA9IHdlYmtpdF9v
cHRpb25fbWVudV9nZXRfaXRlbSh0ZXN0LT5tX21lbnUuZ2V0KCksIDQpOworICAgIGdfYXNzZXJ0
X2NtcHN0cih3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfbGFiZWwoaXRlbSksID09LCAiR3Jv
dXAgMiIpOworICAgIGdfYXNzZXJ0X251bGwod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X3Rv
b2x0aXAoaXRlbSkpOworICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X29wdGlvbl9tZW51X2l0ZW1f
aXNfZ3JvdXBfbGFiZWwoaXRlbSkpOworICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25f
bWVudV9pdGVtX2lzX2dyb3VwX2NoaWxkKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF9mYWxzZSh3ZWJr
aXRfb3B0aW9uX21lbnVfaXRlbV9pc19lbmFibGVkKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF9mYWxz
ZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19zZWxlY3RlZChpdGVtKSk7CisgICAgaXRlbSA9
IHdlYmtpdF9vcHRpb25fbWVudV9nZXRfaXRlbSh0ZXN0LT5tX21lbnUuZ2V0KCksIDUpOworICAg
IGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfbGFiZWwoaXRlbSks
ID09LCAiQ2hpbGQgMi0xIik7CisgICAgZ19hc3NlcnRfbnVsbCh3ZWJraXRfb3B0aW9uX21lbnVf
aXRlbV9nZXRfdG9vbHRpcChpdGVtKSk7CisgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlv
bl9tZW51X2l0ZW1faXNfZ3JvdXBfbGFiZWwoaXRlbSkpOworICAgIGdfYXNzZXJ0X3RydWUod2Vi
a2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfY2hpbGQoaXRlbSkpOworICAgIGdfYXNzZXJ0
X3RydWUod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZW5hYmxlZChpdGVtKSk7CisgICAgZ19h
c3NlcnRfdHJ1ZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19zZWxlY3RlZChpdGVtKSk7Cisg
ICAgaXRlbSA9IHdlYmtpdF9vcHRpb25fbWVudV9nZXRfaXRlbSh0ZXN0LT5tX21lbnUuZ2V0KCks
IDYpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfbGFi
ZWwoaXRlbSksID09LCAiQ2hpbGQgMi0yIik7CisgICAgZ19hc3NlcnRfbnVsbCh3ZWJraXRfb3B0
aW9uX21lbnVfaXRlbV9nZXRfdG9vbHRpcChpdGVtKSk7CisgICAgZ19hc3NlcnRfZmFsc2Uod2Vi
a2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfbGFiZWwoaXRlbSkpOworICAgIGdfYXNzZXJ0
X3RydWUod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfY2hpbGQoaXRlbSkpOworICAg
IGdfYXNzZXJ0X3RydWUod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZW5hYmxlZChpdGVtKSk7
CisgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfc2VsZWN0ZWQo
aXRlbSkpOworICAgIGl0ZW0gPSB3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X2l0ZW0odGVzdC0+bV9t
ZW51LmdldCgpLCA3KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X29wdGlvbl9tZW51X2l0
ZW1fZ2V0X2xhYmVsKGl0ZW0pLCA9PSwgIlRhaWwiKTsKKyAgICBnX2Fzc2VydF9udWxsKHdlYmtp
dF9vcHRpb25fbWVudV9pdGVtX2dldF90b29sdGlwKGl0ZW0pKTsKKyAgICBnX2Fzc2VydF9mYWxz
ZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9sYWJlbChpdGVtKSk7CisgICAgZ19h
c3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfY2hpbGQoaXRlbSkp
OworICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZW5hYmxlZChp
dGVtKSk7CisgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfc2Vs
ZWN0ZWQoaXRlbSkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0T3B0aW9uTWVudUFjdGl2YXRlKE9w
dGlvbk1lbnVUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHN0YXRpYyBjb25zdCBj
aGFyIGh0bWxbXSA9CisgICAgICAgICI8aHRtbD48Ym9keT4iCisgICAgICAgICIgIDxzZWxlY3Qg
aWQ9J2NvbWJvJyBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjEwJz4iCisg
ICAgICAgICIgICAgPG9wdGlvbj5Gb288L29wdGlvbj4iCisgICAgICAgICIgICAgPG9wdGlvbj5C
YXI8L29wdGlvbj4iCisgICAgICAgICIgICAgPG9wdGlvbj5CYXo8L29wdGlvbj4iCisgICAgICAg
ICIgIDwvc2VsZWN0PjwvYm9keT48L2h0bWw+IjsKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRX
YWl0VW50aWxNYXBwZWQoKTsKKyAgICB0ZXN0LT5sb2FkSHRtbChodG1sLCBudWxscHRyKTsKKyAg
ICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPmNsaWNrQXRQb3Np
dGlvbkFuZFdhaXRVbnRpbE9wdGlvbk1lbnVTaG93big1LCAxNSk7CisgICAgZ19hc3NlcnRfdHJ1
ZShXRUJLSVRfSVNfT1BUSU9OX01FTlUodGVzdC0+bV9tZW51LmdldCgpKSk7CisgICAgZ19hc3Nl
cnRfY21waW50KHdlYmtpdF9vcHRpb25fbWVudV9nZXRfbl9pdGVtcyh0ZXN0LT5tX21lbnUuZ2V0
KCkpLCA9PSwgMyk7CisgICAgdGVzdC0+YWN0aXZhdGVJdGVtKDEpOworICAgIGF1dG8qIHJlc3Vs
dCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2NvbWJvJykuc2VsZWN0ZWRJbmRleCIsIG51bGxwdHIpOworICAgIGdfYXNz
ZXJ0X25vbm51bGwocmVzdWx0KTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdChXZWJWaWV3VGVzdDo6
amF2YXNjcmlwdFJlc3VsdFRvTnVtYmVyKHJlc3VsdCksID09LCAxKTsKKworICAgIC8vIFdlIHNo
b3VsZCBjbG9zZSB0aGUgbWVudSBhZnRlciBhY3RpdmF0ZSwgZnVydGhlciBhY3RpdmF0ZXMgd2ls
bCBiZSBpZ25vcmVkLgorICAgIHRlc3QtPmFjdGl2YXRlSXRlbSgyKTsKKyAgICByZXN1bHQgPSB0
ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdjb21ibycpLnNlbGVjdGVkSW5kZXgiLCBudWxscHRyKTsKKyAgICBnX2Fzc2VydF9u
b25udWxsKHJlc3VsdCk7CisgICAgZ19hc3NlcnRfY21wZmxvYXQoV2ViVmlld1Rlc3Q6OmphdmFz
Y3JpcHRSZXN1bHRUb051bWJlcihyZXN1bHQpLCA9PSwgMSk7CisKKyAgICB0ZXN0LT5jbG9zZSgp
OworfQorCitzdGF0aWMgdm9pZCB0ZXN0T3B0aW9uTWVudVNlbGVjdChPcHRpb25NZW51VGVzdCog
dGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciBodG1sW10gPQor
ICAgICAgICAiPGh0bWw+PGJvZHk+IgorICAgICAgICAiICA8c2VsZWN0IGlkPSdjb21ibycgc3R5
bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDoxMCc+IgorICAgICAgICAiICAgIDxv
cHRpb24+Rm9vPC9vcHRpb24+IgorICAgICAgICAiICAgIDxvcHRpb24+QmFyPC9vcHRpb24+Igor
ICAgICAgICAiICAgIDxvcHRpb24+QmF6PC9vcHRpb24+IgorICAgICAgICAiICA8L3NlbGVjdD48
L2JvZHk+PC9odG1sPiI7CisgICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVk
KCk7CisgICAgdGVzdC0+bG9hZEh0bWwoaHRtbCwgbnVsbHB0cik7CisgICAgdGVzdC0+d2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5jbGlja0F0UG9zaXRpb25BbmRXYWl0VW50
aWxPcHRpb25NZW51U2hvd24oNSwgMTUpOworICAgIGdfYXNzZXJ0X3RydWUoV0VCS0lUX0lTX09Q
VElPTl9NRU5VKHRlc3QtPm1fbWVudS5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJr
aXRfb3B0aW9uX21lbnVfZ2V0X25faXRlbXModGVzdC0+bV9tZW51LmdldCgpKSwgPT0sIDMpOwor
CisgICAgLy8gU2VsZWN0IGl0ZW0gY2hhbmdlcyB0aGUgY29tYm8gdGV4dCwgYnV0IG5vdCB0aGUg
Y3VycmVudGx5IHNlbGVjdGVkIGl0ZW0uCisgICAgdGVzdC0+c2VsZWN0SXRlbSgyKTsKKyAgICBh
dXRvKiByZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb21ibycpLnNlbGVjdGVkSW5kZXgiLCBudWxscHRyKTsK
KyAgICBnX2Fzc2VydF9ub25udWxsKHJlc3VsdCk7CisgICAgZ19hc3NlcnRfY21wZmxvYXQoV2Vi
Vmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb051bWJlcihyZXN1bHQpLCA9PSwgMCk7CisKKyAg
ICAvLyBJdCBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzLgorICAgIHRlc3QtPnNlbGVjdEl0
ZW0oMSk7CisgICAgcmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlz
aGVkKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29tYm8nKS5zZWxlY3RlZEluZGV4IiwgbnVs
bHB0cik7CisgICAgZ19hc3NlcnRfbm9ubnVsbChyZXN1bHQpOworICAgIGdfYXNzZXJ0X2NtcGZs
b2F0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9OdW1iZXIocmVzdWx0KSwgPT0sIDAp
OworCisgICAgLy8gQW5kIGNsb3NpbmcgdGhlIG1lbnUgYWN0aXZhdGVzIHRoZSBjdXJyZW50bHkg
c2VsZWN0ZWQgaXRlbS4KKyAgICB0ZXN0LT5jbG9zZSgpOworICAgIHJlc3VsdCA9IHRlc3QtPnJ1
bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J2NvbWJvJykuc2VsZWN0ZWRJbmRleCIsIG51bGxwdHIpOworICAgIGdfYXNzZXJ0X25vbm51bGwo
cmVzdWx0KTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJl
c3VsdFRvTnVtYmVyKHJlc3VsdCksID09LCAxKTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQorewor
ICAgIE9wdGlvbk1lbnVUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAib3B0aW9uLW1lbnUtc2lt
cGxlIiwgdGVzdE9wdGlvbk1lbnVTaW1wbGUpOworICAgIE9wdGlvbk1lbnVUZXN0OjphZGQoIldl
YktpdFdlYlZpZXciLCAib3B0aW9uLW1lbnUtZ3JvdXBzIiwgdGVzdE9wdGlvbk1lbnVHcm91cHMp
OworICAgIE9wdGlvbk1lbnVUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAib3B0aW9uLW1lbnUt
YWN0aXZhdGUiLCB0ZXN0T3B0aW9uTWVudUFjdGl2YXRlKTsKKyAgICBPcHRpb25NZW51VGVzdDo6
YWRkKCJXZWJLaXRXZWJWaWV3IiwgIm9wdGlvbi1tZW51LXNlbGVjdCIsIHRlc3RPcHRpb25NZW51
U2VsZWN0KTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0T3B0aW9uTWVudS5jcHAgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0T3B0aW9uTWVudS5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3YzFjOWQzMjc5MzgxN2ViMzQ2NGVhYjI5N2MyZTQ1ODkz
YzhlZjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvVGVzdE9wdGlvbk1lbnUuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMzA1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdh
bGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgot
Ci0jaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KLQotY2xhc3MgT3B0aW9uTWVudVRlc3QgOiBwdWJs
aWMgV2ViVmlld1Rlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoT3B0
aW9uTWVudVRlc3QpOwotCi0gICAgT3B0aW9uTWVudVRlc3QoKQotICAgIHsKLSAgICAgICAgZ19z
aWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJzaG93LW9wdGlvbi1tZW51IiwgR19DQUxMQkFDSyhz
aG93T3B0aW9uTWVudUNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgfQotCi0gICAgfk9wdGlvbk1lbnVU
ZXN0KCkKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hl
ZChtX3dlYlZpZXcsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOwotICAg
ICAgICBpZiAobV9tZW51KQotICAgICAgICAgICAgY2xvc2UoKTsKLSAgICB9Ci0KLSAgICB2b2lk
IGRlc3Ryb3lNZW51KCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9tZW51KQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZCht
X21lbnUuZ2V0KCksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOwotICAg
ICAgICBtX21lbnUgPSBudWxscHRyOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiBzaG93
T3B0aW9uTWVudUNhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdE9wdGlvbk1l
bnUqIG1lbnUsIEdka0V2ZW50KiBldmVudCwgR2RrUmVjdGFuZ2xlKiByZWN0LCBPcHRpb25NZW51
VGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0X3RydWUodGVzdC0+bV93ZWJWaWV3
ID09IHdlYlZpZXcpOwotICAgICAgICBnX2Fzc2VydF9ub25udWxsKHJlY3QpOwotICAgICAgICBn
X2Fzc2VydF90cnVlKFdFQktJVF9JU19PUFRJT05fTUVOVShtZW51KSk7Ci0gICAgICAgIHRlc3Qt
PmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QobWVudSkpOwot
ICAgICAgICB0ZXN0LT5zaG93T3B0aW9uTWVudShtZW51LCByZWN0KTsKLSAgICAgICAgcmV0dXJu
IFRSVUU7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgbWVudUNsb3NlQ2FsbGJhY2soV2ViS2l0
T3B0aW9uTWVudSogbWVudSwgT3B0aW9uTWVudVRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICBn
X2Fzc2VydF90cnVlKHRlc3QtPm1fbWVudS5nZXQoKSA9PSBtZW51KTsKLSAgICAgICAgdGVzdC0+
ZGVzdHJveU1lbnUoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNob3dPcHRpb25NZW51KFdlYktpdE9w
dGlvbk1lbnUqIG1lbnUsIEdka1JlY3RhbmdsZSogcmVjdCkKLSAgICB7Ci0gICAgICAgIG1fcmVj
dGFuZ2xlID0gKnJlY3Q7Ci0gICAgICAgIG1fbWVudSA9IG1lbnU7Ci0gICAgICAgIGdfc2lnbmFs
X2Nvbm5lY3QobV9tZW51LmdldCgpLCAiY2xvc2UiLCBHX0NBTExCQUNLKG1lbnVDbG9zZUNhbGxi
YWNrKSwgdGhpcyk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7Ci0gICAg
fQotCi0gICAgdm9pZCBjbGlja0F0UG9zaXRpb25BbmRXYWl0VW50aWxPcHRpb25NZW51U2hvd24o
aW50IHgsIGludCB5KQotICAgIHsKLSAgICAgICAgbV9tZW51ID0gbnVsbHB0cjsKLSAgICAgICAg
UnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCB4LCB5XSB7IGNsaWNrTW91c2VCdXR0b24o
eCwgeSk7IH0pOwotICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci0gICAgfQot
Ci0gICAgdm9pZCBjbG9zZSgpCi0gICAgewotICAgICAgICBnX2Fzc2VydF9ub25udWxsKG1fbWVu
dS5nZXQoKSk7Ci0gICAgICAgIHdlYmtpdF9vcHRpb25fbWVudV9jbG9zZShtX21lbnUuZ2V0KCkp
OwotICAgICAgICBnX2Fzc2VydF9udWxsKG1fbWVudS5nZXQoKSk7Ci0gICAgfQotCi0gICAgdm9p
ZCBhY3RpdmF0ZUl0ZW0odW5zaWduZWQgaXRlbSkKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0X25v
bm51bGwobV9tZW51LmdldCgpKTsKLSAgICAgICAgd2Via2l0X29wdGlvbl9tZW51X2FjdGl2YXRl
X2l0ZW0obV9tZW51LmdldCgpLCBpdGVtKTsKLSAgICAgICAgZ19hc3NlcnRfbm9ubnVsbChtX21l
bnUuZ2V0KCkpOwotICAgIH0KLQotICAgIHZvaWQgc2VsZWN0SXRlbSh1bnNpZ25lZCBpdGVtKQot
ICAgIHsKLSAgICAgICAgZ19hc3NlcnRfbm9ubnVsbChtX21lbnUuZ2V0KCkpOwotICAgICAgICB3
ZWJraXRfb3B0aW9uX21lbnVfc2VsZWN0X2l0ZW0obV9tZW51LmdldCgpLCBpdGVtKTsKLSAgICAg
ICAgZ19hc3NlcnRfbm9ubnVsbChtX21lbnUuZ2V0KCkpOwotICAgIH0KLQotICAgIEdSZWZQdHI8
V2ViS2l0T3B0aW9uTWVudT4gbV9tZW51OwotICAgIEdka1JlY3RhbmdsZSBtX3JlY3RhbmdsZTsK
LX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RPcHRpb25NZW51U2ltcGxlKE9wdGlvbk1lbnVUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHN0YXRpYyBjb25zdCBjaGFyIGh0bWxbXSA9Ci0g
ICAgICAgICI8aHRtbD48Ym9keT4iCi0gICAgICAgICIgIDxzZWxlY3Qgc3R5bGU9J3Bvc2l0aW9u
OmFic29sdXRlOyBsZWZ0OjE7IHRvcDoxMCc+IgotICAgICAgICAiICAgIDxvcHRpb24gdGl0bGU9
J1RoZSBGb28gT3B0aW9uJz5Gb288L29wdGlvbj4iCi0gICAgICAgICIgICAgPG9wdGlvbiBzZWxl
Y3RlZD5CYXI8L29wdGlvbj4iCi0gICAgICAgICIgICAgPG9wdGlvbiBkaXNhYmxlZD5CYXo8L29w
dGlvbj4iCi0gICAgICAgICIgIDwvc2VsZWN0PjwvYm9keT48L2h0bWw+IjsKLSAgICB0ZXN0LT5z
aG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKLSAgICB0ZXN0LT5sb2FkSHRtbChodG1s
LCBudWxscHRyKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIHRl
c3QtPmNsaWNrQXRQb3NpdGlvbkFuZFdhaXRVbnRpbE9wdGlvbk1lbnVTaG93big1LCAxNSk7Ci0g
ICAgZ19hc3NlcnRfdHJ1ZShXRUJLSVRfSVNfT1BUSU9OX01FTlUodGVzdC0+bV9tZW51LmdldCgp
KSk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9vcHRpb25fbWVudV9nZXRfbl9pdGVtcyh0
ZXN0LT5tX21lbnUuZ2V0KCkpLCA9PSwgMyk7Ci0gICAgYXV0byogaXRlbSA9IHdlYmtpdF9vcHRp
b25fbWVudV9nZXRfaXRlbSh0ZXN0LT5tX21lbnUuZ2V0KCksIDApOwotICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfbGFiZWwoaXRlbSksID09LCAiRm9vIik7
Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF90b29sdGlw
KGl0ZW0pLCA9PSwgIlRoZSBGb28gT3B0aW9uIik7Ci0gICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0
X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfbGFiZWwoaXRlbSkpOwotICAgIGdfYXNzZXJ0X2Zh
bHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2NoaWxkKGl0ZW0pKTsKLSAgICBn
X2Fzc2VydF90cnVlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2VuYWJsZWQoaXRlbSkpOwot
ICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX3NlbGVjdGVkKGl0
ZW0pKTsKLSAgICBpdGVtID0gd2Via2l0X29wdGlvbl9tZW51X2dldF9pdGVtKHRlc3QtPm1fbWVu
dS5nZXQoKSwgMSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9vcHRpb25fbWVudV9pdGVt
X2dldF9sYWJlbChpdGVtKSwgPT0sICJCYXIiKTsKLSAgICBnX2Fzc2VydF9udWxsKHdlYmtpdF9v
cHRpb25fbWVudV9pdGVtX2dldF90b29sdGlwKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF9mYWxzZSh3
ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9sYWJlbChpdGVtKSk7Ci0gICAgZ19hc3Nl
cnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfY2hpbGQoaXRlbSkpOwot
ICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZW5hYmxlZChpdGVt
KSk7Ci0gICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19zZWxlY3Rl
ZChpdGVtKSk7Ci0gICAgaXRlbSA9IHdlYmtpdF9vcHRpb25fbWVudV9nZXRfaXRlbSh0ZXN0LT5t
X21lbnUuZ2V0KCksIDIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfb3B0aW9uX21lbnVf
aXRlbV9nZXRfbGFiZWwoaXRlbSksID09LCAiQmF6Iik7Ci0gICAgZ19hc3NlcnRfbnVsbCh3ZWJr
aXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfdG9vbHRpcChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfZmFs
c2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfbGFiZWwoaXRlbSkpOwotICAgIGdf
YXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2NoaWxkKGl0ZW0p
KTsKLSAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19lbmFibGVk
KGl0ZW0pKTsKLSAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19z
ZWxlY3RlZChpdGVtKSk7Ci0KLSAgICB0ZXN0LT5jbG9zZSgpOwotICAgIGdfYXNzZXJ0X251bGwo
dGVzdC0+bV9tZW51LmdldCgpKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdE9wdGlvbk1lbnVHcm91
cHMoT3B0aW9uTWVudVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgc3RhdGljIGNv
bnN0IGNoYXIgaHRtbFtdID0KLSAgICAgICAgIjxodG1sPjxib2R5PiIKLSAgICAgICAgIiAgPHNl
bGVjdCBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjEwJz4iCi0gICAgICAg
ICIgICAgPG9wdGlvbj5Sb290PC9vcHRpb24+IgotICAgICAgICAiICAgIDxvcHRncm91cCBsYWJl
bD0nR3JvdXAgMSc+IgotICAgICAgICAiICAgICAgPG9wdGlvbj5DaGlsZCAxLTE8L29wdGlvbj4i
Ci0gICAgICAgICIgICAgICA8b3B0aW9uIGRpc2FibGVkPkNoaWxkIDEtMjwvb3B0aW9uPiIKLSAg
ICAgICAgIiAgICA8L29wdGdyb3VwPiIKLSAgICAgICAgIiAgICA8b3B0Z3JvdXAgbGFiZWw9J0dy
b3VwIDInPiIKLSAgICAgICAgIiAgICAgIDxvcHRpb24gc2VsZWN0ZWQ+Q2hpbGQgMi0xPC9vcHRp
b24+IgotICAgICAgICAiICAgICAgPG9wdGlvbj5DaGlsZCAyLTI8L29wdGlvbj4iCi0gICAgICAg
ICIgICAgPC9vcHRncm91cD4iCi0gICAgICAgICIgICAgPG9wdGlvbj5UYWlsPC9vcHRpb24+Igot
ICAgICAgICAiICA8L3NlbGVjdD48L2JvZHk+PC9odG1sPiI7Ci0gICAgdGVzdC0+c2hvd0luV2lu
ZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7Ci0gICAgdGVzdC0+bG9hZEh0bWwoaHRtbCwgbnVsbHB0
cik7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICB0ZXN0LT5jbGlj
a0F0UG9zaXRpb25BbmRXYWl0VW50aWxPcHRpb25NZW51U2hvd24oNSwgMTUpOwotICAgIGdfYXNz
ZXJ0X3RydWUoV0VCS0lUX0lTX09QVElPTl9NRU5VKHRlc3QtPm1fbWVudS5nZXQoKSkpOwotICAg
IGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X25faXRlbXModGVzdC0+bV9t
ZW51LmdldCgpKSwgPT0sIDgpOwotICAgIGF1dG8qIGl0ZW0gPSB3ZWJraXRfb3B0aW9uX21lbnVf
Z2V0X2l0ZW0odGVzdC0+bV9tZW51LmdldCgpLCAwKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X2xhYmVsKGl0ZW0pLCA9PSwgIlJvb3QiKTsKLSAgICBn
X2Fzc2VydF9udWxsKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF90b29sdGlwKGl0ZW0pKTsK
LSAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9sYWJl
bChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNf
Z3JvdXBfY2hpbGQoaXRlbSkpOwotICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X29wdGlvbl9tZW51
X2l0ZW1faXNfZW5hYmxlZChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlv
bl9tZW51X2l0ZW1faXNfc2VsZWN0ZWQoaXRlbSkpOwotICAgIGl0ZW0gPSB3ZWJraXRfb3B0aW9u
X21lbnVfZ2V0X2l0ZW0odGVzdC0+bV9tZW51LmdldCgpLCAxKTsKLSAgICBnX2Fzc2VydF9jbXBz
dHIod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X2xhYmVsKGl0ZW0pLCA9PSwgIkdyb3VwIDEi
KTsKLSAgICBnX2Fzc2VydF9udWxsKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF90b29sdGlw
KGl0ZW0pKTsKLSAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dy
b3VwX2xhYmVsKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVf
aXRlbV9pc19ncm91cF9jaGlsZChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29w
dGlvbl9tZW51X2l0ZW1faXNfZW5hYmxlZChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfZmFsc2Uod2Vi
a2l0X29wdGlvbl9tZW51X2l0ZW1faXNfc2VsZWN0ZWQoaXRlbSkpOwotICAgIGl0ZW0gPSB3ZWJr
aXRfb3B0aW9uX21lbnVfZ2V0X2l0ZW0odGVzdC0+bV9tZW51LmdldCgpLCAyKTsKLSAgICBnX2Fz
c2VydF9jbXBzdHIod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X2xhYmVsKGl0ZW0pLCA9PSwg
IkNoaWxkIDEtMSIpOwotICAgIGdfYXNzZXJ0X251bGwod2Via2l0X29wdGlvbl9tZW51X2l0ZW1f
Z2V0X3Rvb2x0aXAoaXRlbSkpOwotICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVu
dV9pdGVtX2lzX2dyb3VwX2xhYmVsKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF9v
cHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2NoaWxkKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF90cnVl
KHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2VuYWJsZWQoaXRlbSkpOwotICAgIGdfYXNzZXJ0
X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX3NlbGVjdGVkKGl0ZW0pKTsKLSAgICBp
dGVtID0gd2Via2l0X29wdGlvbl9tZW51X2dldF9pdGVtKHRlc3QtPm1fbWVudS5nZXQoKSwgMyk7
Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF9sYWJlbChp
dGVtKSwgPT0sICJDaGlsZCAxLTIiKTsKLSAgICBnX2Fzc2VydF9udWxsKHdlYmtpdF9vcHRpb25f
bWVudV9pdGVtX2dldF90b29sdGlwKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRf
b3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9sYWJlbChpdGVtKSk7Ci0gICAgZ19hc3NlcnRfdHJ1
ZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9jaGlsZChpdGVtKSk7Ci0gICAgZ19h
c3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZW5hYmxlZChpdGVtKSk7Ci0g
ICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfc2VsZWN0ZWQoaXRl
bSkpOwotICAgIGl0ZW0gPSB3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X2l0ZW0odGVzdC0+bV9tZW51
LmdldCgpLCA0KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X29wdGlvbl9tZW51X2l0ZW1f
Z2V0X2xhYmVsKGl0ZW0pLCA9PSwgIkdyb3VwIDIiKTsKLSAgICBnX2Fzc2VydF9udWxsKHdlYmtp
dF9vcHRpb25fbWVudV9pdGVtX2dldF90b29sdGlwKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF90cnVl
KHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2xhYmVsKGl0ZW0pKTsKLSAgICBnX2Fz
c2VydF9mYWxzZSh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9jaGlsZChpdGVtKSk7
Ci0gICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZW5hYmxlZChp
dGVtKSk7Ci0gICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfc2Vs
ZWN0ZWQoaXRlbSkpOwotICAgIGl0ZW0gPSB3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X2l0ZW0odGVz
dC0+bV9tZW51LmdldCgpLCA1KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X29wdGlvbl9t
ZW51X2l0ZW1fZ2V0X2xhYmVsKGl0ZW0pLCA9PSwgIkNoaWxkIDItMSIpOwotICAgIGdfYXNzZXJ0
X251bGwod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X3Rvb2x0aXAoaXRlbSkpOwotICAgIGdf
YXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2xhYmVsKGl0ZW0p
KTsKLSAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2No
aWxkKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lz
X2VuYWJsZWQoaXRlbSkpOwotICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X29wdGlvbl9tZW51X2l0
ZW1faXNfc2VsZWN0ZWQoaXRlbSkpOwotICAgIGl0ZW0gPSB3ZWJraXRfb3B0aW9uX21lbnVfZ2V0
X2l0ZW0odGVzdC0+bV9tZW51LmdldCgpLCA2KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X29wdGlvbl9tZW51X2l0ZW1fZ2V0X2xhYmVsKGl0ZW0pLCA9PSwgIkNoaWxkIDItMiIpOwotICAg
IGdfYXNzZXJ0X251bGwod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X3Rvb2x0aXAoaXRlbSkp
OwotICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2xh
YmVsKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lz
X2dyb3VwX2NoaWxkKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF9vcHRpb25fbWVu
dV9pdGVtX2lzX2VuYWJsZWQoaXRlbSkpOwotICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRp
b25fbWVudV9pdGVtX2lzX3NlbGVjdGVkKGl0ZW0pKTsKLSAgICBpdGVtID0gd2Via2l0X29wdGlv
bl9tZW51X2dldF9pdGVtKHRlc3QtPm1fbWVudS5nZXQoKSwgNyk7Ci0gICAgZ19hc3NlcnRfY21w
c3RyKHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF9sYWJlbChpdGVtKSwgPT0sICJUYWlsIik7
Ci0gICAgZ19hc3NlcnRfbnVsbCh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfdG9vbHRpcChp
dGVtKSk7Ci0gICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3Jv
dXBfbGFiZWwoaXRlbSkpOwotICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9vcHRpb25fbWVudV9p
dGVtX2lzX2dyb3VwX2NoaWxkKGl0ZW0pKTsKLSAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF9vcHRp
b25fbWVudV9pdGVtX2lzX2VuYWJsZWQoaXRlbSkpOwotICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtp
dF9vcHRpb25fbWVudV9pdGVtX2lzX3NlbGVjdGVkKGl0ZW0pKTsKLX0KLQotc3RhdGljIHZvaWQg
dGVzdE9wdGlvbk1lbnVBY3RpdmF0ZShPcHRpb25NZW51VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hhciBodG1sW10gPQotICAgICAgICAiPGh0bWw+PGJv
ZHk+IgotICAgICAgICAiICA8c2VsZWN0IGlkPSdjb21ibycgc3R5bGU9J3Bvc2l0aW9uOmFic29s
dXRlOyBsZWZ0OjE7IHRvcDoxMCc+IgotICAgICAgICAiICAgIDxvcHRpb24+Rm9vPC9vcHRpb24+
IgotICAgICAgICAiICAgIDxvcHRpb24+QmFyPC9vcHRpb24+IgotICAgICAgICAiICAgIDxvcHRp
b24+QmF6PC9vcHRpb24+IgotICAgICAgICAiICA8L3NlbGVjdD48L2JvZHk+PC9odG1sPiI7Ci0g
ICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7Ci0gICAgdGVzdC0+bG9h
ZEh0bWwoaHRtbCwgbnVsbHB0cik7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
Ci0KLSAgICB0ZXN0LT5jbGlja0F0UG9zaXRpb25BbmRXYWl0VW50aWxPcHRpb25NZW51U2hvd24o
NSwgMTUpOwotICAgIGdfYXNzZXJ0X3RydWUoV0VCS0lUX0lTX09QVElPTl9NRU5VKHRlc3QtPm1f
bWVudS5nZXQoKSkpOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfb3B0aW9uX21lbnVfZ2V0
X25faXRlbXModGVzdC0+bV9tZW51LmdldCgpKSwgPT0sIDMpOwotICAgIHRlc3QtPmFjdGl2YXRl
SXRlbSgxKTsKLSAgICBhdXRvKiByZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVu
dGlsRmluaXNoZWQoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb21ibycpLnNlbGVjdGVkSW5k
ZXgiLCBudWxscHRyKTsKLSAgICBnX2Fzc2VydF9ub25udWxsKHJlc3VsdCk7Ci0gICAgZ19hc3Nl
cnRfY21wZmxvYXQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb051bWJlcihyZXN1bHQp
LCA9PSwgMSk7Ci0KLSAgICAvLyBXZSBzaG91bGQgY2xvc2UgdGhlIG1lbnUgYWZ0ZXIgYWN0aXZh
dGUsIGZ1cnRoZXIgYWN0aXZhdGVzIHdpbGwgYmUgaWdub3JlZC4KLSAgICB0ZXN0LT5hY3RpdmF0
ZUl0ZW0oMik7Ci0gICAgcmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZp
bmlzaGVkKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29tYm8nKS5zZWxlY3RlZEluZGV4Iiwg
bnVsbHB0cik7Ci0gICAgZ19hc3NlcnRfbm9ubnVsbChyZXN1bHQpOwotICAgIGdfYXNzZXJ0X2Nt
cGZsb2F0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9OdW1iZXIocmVzdWx0KSwgPT0s
IDEpOwotCi0gICAgdGVzdC0+Y2xvc2UoKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdE9wdGlvbk1l
bnVTZWxlY3QoT3B0aW9uTWVudVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgc3Rh
dGljIGNvbnN0IGNoYXIgaHRtbFtdID0KLSAgICAgICAgIjxodG1sPjxib2R5PiIKLSAgICAgICAg
IiAgPHNlbGVjdCBpZD0nY29tYm8nIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0
b3A6MTAnPiIKLSAgICAgICAgIiAgICA8b3B0aW9uPkZvbzwvb3B0aW9uPiIKLSAgICAgICAgIiAg
ICA8b3B0aW9uPkJhcjwvb3B0aW9uPiIKLSAgICAgICAgIiAgICA8b3B0aW9uPkJhejwvb3B0aW9u
PiIKLSAgICAgICAgIiAgPC9zZWxlY3Q+PC9ib2R5PjwvaHRtbD4iOwotICAgIHRlc3QtPnNob3dJ
bldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOwotICAgIHRlc3QtPmxvYWRIdG1sKGh0bWwsIG51
bGxwdHIpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgdGVzdC0+
Y2xpY2tBdFBvc2l0aW9uQW5kV2FpdFVudGlsT3B0aW9uTWVudVNob3duKDUsIDE1KTsKLSAgICBn
X2Fzc2VydF90cnVlKFdFQktJVF9JU19PUFRJT05fTUVOVSh0ZXN0LT5tX21lbnUuZ2V0KCkpKTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X29wdGlvbl9tZW51X2dldF9uX2l0ZW1zKHRlc3Qt
Pm1fbWVudS5nZXQoKSksID09LCAzKTsKLQotICAgIC8vIFNlbGVjdCBpdGVtIGNoYW5nZXMgdGhl
IGNvbWJvIHRleHQsIGJ1dCBub3QgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtLgotICAgIHRl
c3QtPnNlbGVjdEl0ZW0oMik7Ci0gICAgYXV0byogcmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlw
dEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29tYm8nKS5z
ZWxlY3RlZEluZGV4IiwgbnVsbHB0cik7Ci0gICAgZ19hc3NlcnRfbm9ubnVsbChyZXN1bHQpOwot
ICAgIGdfYXNzZXJ0X2NtcGZsb2F0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9OdW1i
ZXIocmVzdWx0KSwgPT0sIDApOwotCi0gICAgLy8gSXQgY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0
aW1lcy4KLSAgICB0ZXN0LT5zZWxlY3RJdGVtKDEpOwotICAgIHJlc3VsdCA9IHRlc3QtPnJ1bkph
dmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Nv
bWJvJykuc2VsZWN0ZWRJbmRleCIsIG51bGxwdHIpOwotICAgIGdfYXNzZXJ0X25vbm51bGwocmVz
dWx0KTsKLSAgICBnX2Fzc2VydF9jbXBmbG9hdChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3Vs
dFRvTnVtYmVyKHJlc3VsdCksID09LCAwKTsKLQotICAgIC8vIEFuZCBjbG9zaW5nIHRoZSBtZW51
IGFjdGl2YXRlcyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW0uCi0gICAgdGVzdC0+Y2xvc2Uo
KTsKLSAgICByZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQo
ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb21ibycpLnNlbGVjdGVkSW5kZXgiLCBudWxscHRy
KTsKLSAgICBnX2Fzc2VydF9ub25udWxsKHJlc3VsdCk7Ci0gICAgZ19hc3NlcnRfY21wZmxvYXQo
V2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb051bWJlcihyZXN1bHQpLCA9PSwgMSk7Ci19
Ci0KLXZvaWQgYmVmb3JlQWxsKCkKLXsKLSAgICBPcHRpb25NZW51VGVzdDo6YWRkKCJXZWJLaXRX
ZWJWaWV3IiwgIm9wdGlvbi1tZW51LXNpbXBsZSIsIHRlc3RPcHRpb25NZW51U2ltcGxlKTsKLSAg
ICBPcHRpb25NZW51VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgIm9wdGlvbi1tZW51LWdyb3Vw
cyIsIHRlc3RPcHRpb25NZW51R3JvdXBzKTsKLSAgICBPcHRpb25NZW51VGVzdDo6YWRkKCJXZWJL
aXRXZWJWaWV3IiwgIm9wdGlvbi1tZW51LWFjdGl2YXRlIiwgdGVzdE9wdGlvbk1lbnVBY3RpdmF0
ZSk7Ci0gICAgT3B0aW9uTWVudVRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJvcHRpb24tbWVu
dS1zZWxlY3QiLCB0ZXN0T3B0aW9uTWVudVNlbGVjdCk7Ci19Ci0KLXZvaWQgYWZ0ZXJBbGwoKQot
ewotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9nbGliL0NNYWtlTGlzdHMudHh0
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9nbGliL0NNYWtlTGlzdHMudHh0CmluZGV4IDEyYWFmNWYx
MzJjNWY3MTg1YTY0Yzg1MTU5ZTZmZDNiMzI2OGEyN2YuLjM1YmViZWU2Mzk3ZmE0YTQwZDIwMWIz
MGM5NDBiZGU3ZTE5ZGQ0M2QgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ2xpYi9D
TWFrZUxpc3RzLnR4dAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2dsaWIvQ01ha2VMaXN0cy50
eHQKQEAgLTEyNyw2ICsxMjcsNyBAQCBBRERfV0syX1RFU1QoVGVzdEVkaXRvciAke1RPT0xTX0RJ
Un0vVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RFZGl0b3IuYwogQUREX1dLMl9U
RVNUKFRlc3RGcmFtZSAke1RPT0xTX0RJUn0vVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGli
L1Rlc3RGcmFtZS5jcHApCiBBRERfV0syX1RFU1QoVGVzdExvYWRlckNsaWVudCAke1RPT0xTX0RJ
Un0vVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RMb2FkZXJDbGllbnQuY3BwKQog
QUREX1dLMl9URVNUKFRlc3RNdWx0aXByb2Nlc3MgJHtUT09MU19ESVJ9L1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0R0xpYi9UZXN0TXVsdGlwcm9jZXNzLmNwcCkKK0FERF9XSzJfVEVTVChUZXN0
T3B0aW9uTWVudSAke1RPT0xTX0RJUn0vVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rl
c3RPcHRpb25NZW51LmNwcCkKIEFERF9XSzJfVEVTVChUZXN0UmVzb3VyY2VzICR7VE9PTFNfRElS
fS9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFJlc291cmNlcy5jcHApCiBBRERf
V0syX1RFU1QoVGVzdFNTTCAke1RPT0xTX0RJUn0vVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRH
TGliL1Rlc3RTU0wuY3BwKQogQUREX1dLMl9URVNUKFRlc3RVSUNsaWVudCAke1RPT0xTX0RJUn0v
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RVSUNsaWVudC5jcHApCmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2dsaWIvUGxhdGZvcm1HVEsuY21ha2UgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL2dsaWIvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggOWIyM2U3NGFiZGUwYzFi
MWI0ZWU0NzllMTIwOTczN2JhZmEyZjI2Ny4uYTU4NmE2YTY4YTM1NTdhZjg1NjNkNzM5MzZhZmEz
ZjRjYjdjYzg5OSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9nbGliL1BsYXRmb3Jt
R1RLLmNtYWtlCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ2xpYi9QbGF0Zm9ybUdUSy5jbWFr
ZQpAQCAtNDEsNyArNDEsNiBAQCBBRERfV0syX1RFU1QoVGVzdERPTU5vZGVGaWx0ZXIgJHtUT09M
U19ESVJ9L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL1Rlc3RETwogQUREX1dLMl9URVNU
KFRlc3RET01YUGF0aE5TUmVzb2x2ZXIgJHtUT09MU19ESVJ9L1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0R3RrL1Rlc3RET01YUGF0aE5TUmVzb2x2ZXIuY3BwKQogQUREX1dLMl9URVNUKFRlc3RJ
bnNwZWN0b3IgJHtUT09MU19ESVJ9L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL1Rlc3RJ
bnNwZWN0b3IuY3BwKQogQUREX1dLMl9URVNUKFRlc3RJbnNwZWN0b3JTZXJ2ZXIgJHtUT09MU19E
SVJ9L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL1Rlc3RJbnNwZWN0b3JTZXJ2ZXIuY3Bw
KQotQUREX1dLMl9URVNUKFRlc3RPcHRpb25NZW51ICR7VE9PTFNfRElSfS9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdEd0ay9UZXN0T3B0aW9uTWVudS5jcHApCiBBRERfV0syX1RFU1QoVGVzdFBy
aW50aW5nICR7VE9PTFNfRElSfS9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0UHJp
bnRpbmcuY3BwKQogQUREX1dLMl9URVNUKFRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2UgJHtUT09M
U19ESVJ9L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0V2ViS2l0RmF2aWNvbkRh
dGFiYXNlLmNwcCkKIEFERF9XSzJfVEVTVChUZXN0V2ViS2l0VmVyc2lvbiAke1RPT0xTX0RJUn0v
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvVGVzdFdlYktpdFZlcnNpb24uY3BwKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>