<?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>160389</bug_id>
          
          <creation_ts>2016-07-31 02:58:34 -0700</creation_ts>
          <short_desc>[GTK] Move the redirected XComposite window to the web process</short_desc>
          <delta_ts>2016-08-01 23:43:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>160240</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>agomez</cc>
    
    <cc>bugs-noreply</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1215942</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-07-31 02:58:34 -0700</bug_when>
    <thetext>In the current code, the UI process creates the redirected window that the web process uses to render accelerated contents. The redirected window is sent to the web process as native surface handle, and using Xdamage extension the UI process takes a pixmap of the redirected window to render into the widget when there are updates. This requires several points of synchronization between UI and web process. When the web view is resized, the UI process first resizes the redirected window and then sends a new backing store ID to the web process. The time between the redirected window is resized and the web process renders the new contents the UI process keeps rendering the previous contents with the previous size in the new window with the new size. This makes the resize process slow, and it produces rendering artifacts quite often. The redirected window is created when the web view is realized, to be able to inherit the Xvisual from the parent window, and the native window handle is sent to the web process. The time until the window is realized, the web process doesn&apos;t have a context to render into, so the UI process simply render an empty page. When the web view is unrealized, for example if the web view is reparented, the redirected window is destroyed, and a sync message is sent to the web process to destroy the current gl context and stop drawing. This needs to happen synchronously, because the UI process can&apos;t remove the redirected window until the web process has stopped rendering into it. This makes also the reparenting process quite unstable and risky. To all those synchronization points we now have to add the synchronization with the compositing thread when using the threaded compositor. The threaded compositor made resizing, reparenting, etc. even worse. We can&apos;t avoid the synchronization with the threaded compositor, but we can reduce the synchronization points and improve the current ones by moving the redirected window to the web process. In this case is web process who created the redirected window, so we can be sure that it always has a valid native surface handle to render into. This means we no longer need the IPC message to send the native surface handle from the UI process to the web process, nor the sync message to destroy it either. This also means we no longer need to wait until the view is realized to start rendering accelerated contents, and we don&apos;t need to stop when it&apos;s unrealized either. We don&apos;t really need to inherit the XVisual from the parent window if the redirected window always uses always an RGBA visual when available. That way we always render into a transparent window that is composed into the web view widget. And when the web view is resized, we no longer need to destroy the GL context either, because we use the same redirected window as the native handle, but create a new pixmap that is what we send to the UI process as layer tree context ID. The layer tree context ID is already sent to the UI process by the drawing area as part of the backing store update process, so we don&apos;t need any new IPC message for this. When the web view is resized, the UI process sends a backing store state update message to the web process that updates its size, relayouts and then renders the new contents, so that when the update backing store state reply gets to the UI process, we already have a new pixmap with the new contents updated. This makes resizing smooth again, and avoids flickering and rendering artifacts. And finally all this also prevents several race conditions that were causing X errors and web process crashes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215943</commentid>
    <comment_count>1</comment_count>
      <attachid>284964</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-07-31 03:29:41 -0700</bug_when>
    <thetext>Created attachment 284964
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215946</commentid>
    <comment_count>2</comment_count>
      <attachid>284964</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-07-31 08:57:01 -0700</bug_when>
    <thetext>Comment on attachment 284964
Patch

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

So it makes AC mode not suck? :)

This one really should be looked at by a graphics reviewer; if it gets stuck awaiting review, you can ping me after a few days.

&gt; Source/WebCore/platform/graphics/x11/PlatformDisplayX11.cpp:66
&gt; +bool PlatformDisplayX11::supportsXComposite()

Can you make it const, as it should be, if you make m_supportsXComposite mutable? Or does the call to XCompositeQueryExtension prevent that?

&gt; Source/WebCore/platform/graphics/x11/PlatformDisplayX11.cpp:75
&gt; +bool PlatformDisplayX11::supportsXDamage(int&amp; damageEventBase)

Can you make it const, as it should be, if you make m_damageEventBase mutable? Or does the call to XDamageQueryExtension prevent that?

&gt; Source/WebCore/platform/graphics/x11/PlatformDisplayX11.cpp:79
&gt; +        m_supportsXDamage = XDamageQueryExtension(m_display, &amp;eventBase, &amp;errorBase);

EFL build is failing here:

lib/libwebcore_efl.a(lib/../Source/WebCore/CMakeFiles/WebCore.dir/platform/graphics/x11/PlatformDisplayX11.cpp.o):PlatformDisplayX11.cpp:function WebCore::PlatformDisplayX11::supportsXDamage(int&amp;): error: undefined reference to &apos;XDamageQueryExtension&apos;
collect2: error: ld returned 1 exit status

We link with ${X11_Xdamage_LIB} in WebCore/PlatformGtk.cmake, but EFL does not; you&apos;ll need to add it to WebCore_LIBRARIES.

&gt; Source/WebKit2/UIProcess/gtk/XDamageNotifier.cpp:75
&gt; +GdkFilterReturn XDamageNotifier::filterXDamageEvent(GdkXEvent* event, GdkEvent*, XDamageNotifier* notifier)

Since it doesn&apos;t access any member variables, I would move it outside the class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216033</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-07-31 23:38:15 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 284964 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=284964&amp;action=review
&gt; 
&gt; So it makes AC mode not suck? :)

Yes.

&gt; This one really should be looked at by a graphics reviewer; if it gets stuck
&gt; awaiting review, you can ping me after a few days.

Thanks!

&gt; &gt; Source/WebCore/platform/graphics/x11/PlatformDisplayX11.cpp:66
&gt; &gt; +bool PlatformDisplayX11::supportsXComposite()
&gt; 
&gt; Can you make it const, as it should be, if you make m_supportsXComposite
&gt; mutable? Or does the call to XCompositeQueryExtension prevent that?

I&apos;ll try.

&gt; &gt; Source/WebCore/platform/graphics/x11/PlatformDisplayX11.cpp:75
&gt; &gt; +bool PlatformDisplayX11::supportsXDamage(int&amp; damageEventBase)
&gt; 
&gt; Can you make it const, as it should be, if you make m_damageEventBase
&gt; mutable? Or does the call to XDamageQueryExtension prevent that?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/x11/PlatformDisplayX11.cpp:79
&gt; &gt; +        m_supportsXDamage = XDamageQueryExtension(m_display, &amp;eventBase, &amp;errorBase);
&gt; 
&gt; EFL build is failing here:

I&apos;ll fix the build.

&gt; lib/libwebcore_efl.a(lib/../Source/WebCore/CMakeFiles/WebCore.dir/platform/
&gt; graphics/x11/PlatformDisplayX11.cpp.o):PlatformDisplayX11.cpp:function
&gt; WebCore::PlatformDisplayX11::supportsXDamage(int&amp;): error: undefined
&gt; reference to &apos;XDamageQueryExtension&apos;
&gt; collect2: error: ld returned 1 exit status
&gt; 
&gt; We link with ${X11_Xdamage_LIB} in WebCore/PlatformGtk.cmake, but EFL does
&gt; not; you&apos;ll need to add it to WebCore_LIBRARIES.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/gtk/XDamageNotifier.cpp:75
&gt; &gt; +GdkFilterReturn XDamageNotifier::filterXDamageEvent(GdkXEvent* event, GdkEvent*, XDamageNotifier* notifier)
&gt; 
&gt; Since it doesn&apos;t access any member variables, I would move it outside the
&gt; class.

Then I would need to make notify public which is not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216034</commentid>
    <comment_count>4</comment_count>
      <attachid>284987</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-07-31 23:46:43 -0700</bug_when>
    <thetext>Created attachment 284987
Address review comments and try to fix EFL build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216050</commentid>
    <comment_count>5</comment_count>
      <attachid>284987</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2016-08-01 01:03:03 -0700</bug_when>
    <thetext>Comment on attachment 284987
Address review comments and try to fix EFL build

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

Looking great to me. I will let Zan or Martin review it since there is stuff like what happens when there is no redirected window that is not completely clear to me.

&gt; Source/WebCore/platform/graphics/x11/PlatformDisplayX11.cpp:80
&gt; +#if PLATFORM(GTK)

Why this? It&apos;s just handling X stuff

&gt; Source/WebKit2/ChangeLog:40
&gt; +        all this also prevents several race conditions that were causing X errors and web process crashes.

This is an amazing description, but too much for a single paragraph to my taste. It&apos;d be awesome if you could split it a bit.

&gt; Source/WebKit2/Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:57
&gt; +        m_scene-&gt;setActive(!!m_nativeSurfaceHandle);

Do we really need the !! ?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:358
&gt; +        return;

Is this even possible knowing that the whole method is guarded by REDIRECTED_XCOMPOSITE_WINDOW ?

&gt; Source/WebKit2/UIProcess/PageClient.h:-238
&gt; -    virtual void willEnterAcceleratedCompositingMode() = 0;

Were we the unique users of this?

&gt; Source/WebKit2/UIProcess/WebPageProxy.h:-827
&gt; -    void willEnterAcceleratedCompositingMode();

Ditto.

&gt; Source/WebKit2/UIProcess/efl/WebView.h:-224
&gt; -    void willEnterAcceleratedCompositingMode() override { }

Ditto.

&gt; Source/WebKit2/UIProcess/gtk/XDamageNotifier.cpp:40
&gt; +static int s_damageEventBase = -1;

Time to switch to Optional&lt;int&gt; ?

&gt; Source/WebKit2/UIProcess/gtk/XDamageNotifier.cpp:57
&gt; +    if (s_damageEventBase == -1)

...and change this

&gt; Source/WebKit2/UIProcess/gtk/XDamageNotifier.cpp:67
&gt; +    if (s_damageEventBase == -1)

and this

&gt; Source/WebKit2/UIProcess/gtk/XDamageNotifier.cpp:77
&gt; +    ASSERT(s_damageEventBase != -1);

and this

&gt; Source/WebKit2/UIProcess/gtk/XDamageNotifier.cpp:82
&gt; +    XDamageNotifyEvent* damageEvent = reinterpret_cast&lt;XDamageNotifyEvent*&gt;(xEvent);

You can use auto* there

&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.h:114
&gt;      WebCore::IntPoint m_lastScrollPosition;

I&apos;m having a hard time to understand the difference between this two, perhaps we need better naming?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216055</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-08-01 01:25:53 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 284987 [details]
&gt; Address review comments and try to fix EFL build
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=284987&amp;action=review
&gt; 
&gt; Looking great to me. I will let Zan or Martin review it since there is stuff
&gt; like what happens when there is no redirected window that is not completely
&gt; clear to me.

Thanks for looking at it. The situation when the there&apos;s no redirected window is that nothing will be rendered (like with current code). It&apos;s not expected to happen, it would mean that we are running in a very very old version of the xserver. In that case nothing will be rendered, but hopefully it won&apos;t crash either. Ideally we would not allow to build with that unsupported configuration, and we indeed fail if XComposite extension is not available, but the actual version needs to be checked at runtime. So, I wouldn&apos;t worry about such situation.

&gt; &gt; Source/WebCore/platform/graphics/x11/PlatformDisplayX11.cpp:80
&gt; &gt; +#if PLATFORM(GTK)
&gt; 
&gt; Why this? It&apos;s just handling X stuff

Yes, but only the GTK+ port depends on it. That&apos;s what we do in all other places where XDamage is used. I agree we could add a specific build option for that instead, but that would be a separate bug, since we are already using GTK ifdefs form Xdamage everywhere.

&gt; &gt; Source/WebKit2/ChangeLog:40
&gt; &gt; +        all this also prevents several race conditions that were causing X errors and web process crashes.
&gt; 
&gt; This is an amazing description, but too much for a single paragraph to my
&gt; taste. It&apos;d be awesome if you could split it a bit.
&gt; 
&gt; &gt; Source/WebKit2/Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:57
&gt; &gt; +        m_scene-&gt;setActive(!!m_nativeSurfaceHandle);
&gt; 
&gt; Do we really need the !! ?

No, but I think it&apos;s a clearer way to convert to bool.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:358
&gt; &gt; +        return;
&gt; 
&gt; Is this even possible knowing that the whole method is guarded by
&gt; REDIRECTED_XCOMPOSITE_WINDOW ?

Please, add more lines to the context, I only see a return here. Ok, that&apos;s the display check. Yes, it&apos;s needed, because the REDIRECTED_XCOMPOSITE_WINDOW guard is at compile time, but we build wayland and X11 support at the same time, we need to check the actual display at runtime to took one path or the other.

&gt; &gt; Source/WebKit2/UIProcess/PageClient.h:-238
&gt; &gt; -    virtual void willEnterAcceleratedCompositingMode() = 0;
&gt; 
&gt; Were we the unique users of this?

Yes, I added this to fix one of the issues of having the redirected window in the UI process.

&gt; &gt; Source/WebKit2/UIProcess/WebPageProxy.h:-827
&gt; &gt; -    void willEnterAcceleratedCompositingMode();
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/efl/WebView.h:-224
&gt; &gt; -    void willEnterAcceleratedCompositingMode() override { }
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/gtk/XDamageNotifier.cpp:40
&gt; &gt; +static int s_damageEventBase = -1;
&gt; 
&gt; Time to switch to Optional&lt;int&gt; ?

Not sure it&apos;s worth it for a global static variable like this. And I&apos;m not sure I can pass the mem address to the query method to get the value.

&gt; &gt; Source/WebKit2/UIProcess/gtk/XDamageNotifier.cpp:57
&gt; &gt; +    if (s_damageEventBase == -1)
&gt; 
&gt; ...and change this
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/gtk/XDamageNotifier.cpp:67
&gt; &gt; +    if (s_damageEventBase == -1)
&gt; 
&gt; and this
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/gtk/XDamageNotifier.cpp:77
&gt; &gt; +    ASSERT(s_damageEventBase != -1);
&gt; 
&gt; and this
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/gtk/XDamageNotifier.cpp:82
&gt; &gt; +    XDamageNotifyEvent* damageEvent = reinterpret_cast&lt;XDamageNotifyEvent*&gt;(xEvent);
&gt; 
&gt; You can use auto* there

Yes.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.h:114
&gt; &gt;      WebCore::IntPoint m_lastScrollPosition;
&gt; 
&gt; I&apos;m having a hard time to understand the difference between this two,
&gt; perhaps we need better naming?

Again, single line in the context, let check which two you mean. Ah, you mena prev, and last. I have no idea, I only re-ordered to initialize the redirected window first in the constructor, those have nothing to do with this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216056</commentid>
    <comment_count>7</comment_count>
      <attachid>284991</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-08-01 01:44:54 -0700</bug_when>
    <thetext>Created attachment 284991
Address more review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216097</commentid>
    <comment_count>8</comment_count>
    <who name="Andres Gomez Garcia">agomez</who>
    <bug_when>2016-08-01 07:06:23 -0700</bug_when>
    <thetext>I&apos;m using WebKitGtk+ with my own JHBuild setting:
https://github.com/tanty/jhbuild-epiphany/tree/master

Epiphany 3.20.3 and WebKit 2.13.4 with this patch applied.

I&apos;m running Epiphany with the dconf key:

&quot;process-model&quot; = &quot;shared-secondary-process&quot;

The compilation was done with CMake args:

&apos;-DPORT=GTK -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS_RELEASE=&quot;-O0 -g1 -DNDEBUG -DG_DISABLE_CAST_CHECKS&quot; -DCMAKE_CXX_FLAGS_RELEASE=&quot;-O0 -g1 -DNDEBUG -DG_DISABLE_CAST_CHECKS&quot;&apos;


OBSERVATIONS
============

My saved session has several windows with several tabs each.

Upon re-starting the epiphany, the whole desktop freezes after the appearing of the first(s) window(s)

Slowly, it starts go show that it is not completely frozen but gets excruciatingly slow.

The new Epiphany windows keep popping one by one veeeery slowly. The whole process takes minutes.

After, seemingly, all the windows have been created, the desktop doesn&apos;t recover its normal speed, it still moves almost as if it would be frozen.

Finally, I decided to use GDB.

Attaching GDB to Epiphany and the NetworkProcess was OK.

Attaching GDB to the WebProcess froze my whole desktop. There was not recovery after this, only rebooting after waiting for several minutes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216400</commentid>
    <comment_count>9</comment_count>
      <attachid>284991</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2016-08-01 23:22:36 -0700</bug_when>
    <thetext>Comment on attachment 284991
Address more review comments

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

&gt; Source/WebKit2/UIProcess/gtk/XDamageNotifier.h:46
&gt; +    void add(Damage, std::function&lt;void()&gt;&amp;&amp;);

WTF::Function&lt;&gt; is preferable now I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216404</commentid>
    <comment_count>10</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-08-01 23:43:54 -0700</bug_when>
    <thetext>Committed r204013: &lt;http://trac.webkit.org/changeset/204013&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284964</attachid>
            <date>2016-07-31 03:29:41 -0700</date>
            <delta_ts>2016-07-31 23:46:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-redirected-window-web-process.diff</filename>
            <type>text/plain</type>
            <size>92223</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5YTg0ZmE0Li44NDc2YWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcg
QEAKKzIwMTYtMDctMzEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIE1vdmUgdGhlIHJlZGlyZWN0ZWQgWENvbXBvc2l0ZSB3aW5kb3cg
dG8gdGhlIHdlYiBwcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjAzODkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGQgaGVscGVyIG1ldGhvZHMgdG8gUGxhdGZvcm1EaXNwbGF5WDExIHRvIHF1
ZXJ5IFggZXh0ZW5zaW9ucyBzdXBwb3J0ZWQgYnkgdGhlIGRpc3BsYXkuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtRGlzcGxheVgxMTo6c3VwcG9ydHNYQ29tcG9zaXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheVgxMTo6c3VwcG9ydHNYRGFtYWdlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmg6CisKIDIwMTYtMDct
MzAgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCByZWJhc2VsaW5lIGJpbmRpbmdzIHRlc3RzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MveDExL1BsYXRmb3JtRGlzcGxheVgxMS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmNwcAppbmRleCA5
NjZhY2Q2Li4zYzI0NDQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmNwcApAQCAtMjgsNiArMjgsOCBA
QAogCiAjaWYgUExBVEZPUk0oWDExKQogI2luY2x1ZGUgPFgxMS9YbGliLmg+CisjaW5jbHVkZSA8
WDExL2V4dGVuc2lvbnMvWGNvbXBvc2l0ZS5oPgorI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hk
YW1hZ2UuaD4KIAogI2lmIFVTRShFR0wpCiAjaW5jbHVkZSA8RUdML2VnbC5oPgpAQCAtNjEsNiAr
NjMsMjggQEAgdm9pZCBQbGF0Zm9ybURpc3BsYXlYMTE6OmluaXRpYWxpemVFR0xEaXNwbGF5KCkK
IH0KICNlbmRpZgogCitib29sIFBsYXRmb3JtRGlzcGxheVgxMTo6c3VwcG9ydHNYQ29tcG9zaXRl
KCkKK3sKKyAgICBpZiAoIW1fc3VwcG9ydHNYQ29tcG9zaXRlKSB7CisgICAgICAgIGludCBldmVu
dEJhc2UsIGVycm9yQmFzZTsKKyAgICAgICAgbV9zdXBwb3J0c1hDb21wb3NpdGUgPSBYQ29tcG9z
aXRlUXVlcnlFeHRlbnNpb24obV9kaXNwbGF5LCAmZXZlbnRCYXNlLCAmZXJyb3JCYXNlKTsKKyAg
ICB9CisgICAgcmV0dXJuIG1fc3VwcG9ydHNYQ29tcG9zaXRlLnZhbHVlKCk7Cit9CisKK2Jvb2wg
UGxhdGZvcm1EaXNwbGF5WDExOjpzdXBwb3J0c1hEYW1hZ2UoaW50JiBkYW1hZ2VFdmVudEJhc2Up
Cit7CisgICAgaWYgKCFtX3N1cHBvcnRzWERhbWFnZSkgeworICAgICAgICBpbnQgZXZlbnRCYXNl
LCBlcnJvckJhc2U7CisgICAgICAgIG1fc3VwcG9ydHNYRGFtYWdlID0gWERhbWFnZVF1ZXJ5RXh0
ZW5zaW9uKG1fZGlzcGxheSwgJmV2ZW50QmFzZSwgJmVycm9yQmFzZSk7CisgICAgICAgIGlmICht
X3N1cHBvcnRzWERhbWFnZS52YWx1ZSgpKQorICAgICAgICAgICAgbV9kYW1hZ2VFdmVudEJhc2Ug
PSBldmVudEJhc2U7CisgICAgfQorCisgICAgZGFtYWdlRXZlbnRCYXNlID0gbV9kYW1hZ2VFdmVu
dEJhc2U7CisgICAgcmV0dXJuIG1fc3VwcG9ydHNYRGFtYWdlLnZhbHVlKCk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFBMQVRGT1JNKFgxMSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3gxMS9QbGF0Zm9ybURpc3BsYXlYMTEu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3gxMS9QbGF0Zm9ybURpc3BsYXlY
MTEuaAppbmRleCBlZmFlNWFiLi42M2NmNThhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MveDExL1BsYXRmb3JtRGlzcGxheVgxMS5oCkBAIC0yOSw2
ICsyOSw3IEBACiAjaWYgUExBVEZPUk0oWDExKQogCiAjaW5jbHVkZSAiUGxhdGZvcm1EaXNwbGF5
LmgiCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAKIHR5cGVkZWYgc3RydWN0IF9YRGlzcGxh
eSBEaXNwbGF5OwogCkBAIC00MSw2ICs0Miw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5QbGF0
Zm9ybURpc3BsYXlYMTEoKTsKIAogICAgIERpc3BsYXkqIG5hdGl2ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZGlzcGxheTsgfQorICAgIGJvb2wgc3VwcG9ydHNYQ29tcG9zaXRlKCk7CisgICAgYm9vbCBz
dXBwb3J0c1hEYW1hZ2UoaW50JiBkYW1hZ2VFdmVudEJhc2UpOwogCiBwcml2YXRlOgogICAgIFR5
cGUgdHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFBsYXRmb3JtRGlzcGxheTo6VHlwZTo6
WDExOyB9CkBAIC01MSw2ICs1NCw5IEBAIHByaXZhdGU6CiAKICAgICBEaXNwbGF5KiBtX2Rpc3Bs
YXk7CiAgICAgYm9vbCBtX293bmVkRGlzcGxheTsKKyAgICBPcHRpb25hbDxib29sPiBtX3N1cHBv
cnRzWENvbXBvc2l0ZTsKKyAgICBPcHRpb25hbDxib29sPiBtX3N1cHBvcnRzWERhbWFnZTsKKyAg
ICBpbnQgbV9kYW1hZ2VFdmVudEJhc2UgeyAtMSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCmluZGV4IDhhZGNkZDMuLmM4MGIzMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNDAgQEAKKzIwMTYtMDctMzEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2Fs
aWEuY29tPgorCisgICAgICAgIFtHVEtdIE1vdmUgdGhlIHJlZGlyZWN0ZWQgWENvbXBvc2l0ZSB3
aW5kb3cgdG8gdGhlIHdlYiBwcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjAzODkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBJbiB0aGUgY3VycmVudCBjb2RlLCB0aGUgVUkgcHJvY2VzcyBjcmVh
dGVzIHRoZSByZWRpcmVjdGVkIHdpbmRvdyB0aGF0IHRoZSB3ZWIgcHJvY2VzcyB1c2VzIHRvIHJl
bmRlcgorICAgICAgICBhY2NlbGVyYXRlZCBjb250ZW50cy4gVGhlIHJlZGlyZWN0ZWQgd2luZG93
IGlzIHNlbnQgdG8gdGhlIHdlYiBwcm9jZXNzIGFzIG5hdGl2ZSBzdXJmYWNlIGhhbmRsZSwgYW5k
IHVzaW5nCisgICAgICAgIFhEYW1hZ2UgZXh0ZW5zaW9uIHRoZSBVSSBwcm9jZXNzIHRha2VzIGEg
cGl4bWFwIG9mIHRoZSByZWRpcmVjdGVkIHdpbmRvdyB0byByZW5kZXIgaW50byB0aGUgd2lkZ2V0
IHdoZW4gdGhlcmUKKyAgICAgICAgYXJlIHVwZGF0ZXMuIFRoaXMgcmVxdWlyZXMgc2V2ZXJhbCBw
b2ludHMgb2Ygc3luY2hyb25pemF0aW9uIGJldHdlZW4gVUkgYW5kIHdlYiBwcm9jZXNzZXMuIFdo
ZW4gdGhlIHdlYiB2aWV3IGlzCisgICAgICAgIHJlc2l6ZWQsIHRoZSBVSSBwcm9jZXNzIGZpcnN0
IHJlc2l6ZXMgdGhlIHJlZGlyZWN0ZWQgd2luZG93IGFuZCB0aGVuIHNlbmRzIGEgbmV3IGJhY2tp
bmcgc3RvcmUgSUQgdG8gdGhlIHdlYgorICAgICAgICBwcm9jZXNzLiBUaGUgdGltZSBiZXR3ZWVu
IHRoZSByZWRpcmVjdGVkIHdpbmRvdyBpcyByZXNpemVkIGFuZCB0aGUgd2ViIHByb2Nlc3MgcmVu
ZGVycyB0aGUgbmV3IGNvbnRlbnRzIHRoZSBVSQorICAgICAgICBwcm9jZXNzIGtlZXBzIHJlbmRl
cmluZyB0aGUgcHJldmlvdXMgY29udGVudHMgd2l0aCB0aGUgcHJldmlvdXMgc2l6ZSBpbiB0aGUg
bmV3IHdpbmRvdyB3aXRoIHRoZSBuZXcgc2l6ZS4gVGhpcworICAgICAgICBtYWtlcyB0aGUgcmVz
aXplIHByb2Nlc3Mgc2xvdywgYW5kIGl0IHByb2R1Y2VzIHJlbmRlcmluZyBhcnRpZmFjdHMgcXVp
dGUgb2Z0ZW4uIFRoZSByZWRpcmVjdGVkIHdpbmRvdyBpcyBjcmVhdGVkCisgICAgICAgIHdoZW4g
dGhlIHdlYiB2aWV3IGlzIHJlYWxpemVkLCB0byBiZSBhYmxlIHRvIGluaGVyaXQgdGhlIFhWaXN1
YWwgZnJvbSB0aGUgcGFyZW50IHdpbmRvdywgYW5kIHRoZSBuYXRpdmUgd2luZG93CisgICAgICAg
IGhhbmRsZSBpcyBzZW50IHRvIHRoZSB3ZWIgcHJvY2Vzcy4gVGhlIHRpbWUgdW50aWwgdGhlIHdp
bmRvdyBpcyByZWFsaXplZCwgdGhlIHdlYiBwcm9jZXNzIGRvZXNuJ3QgaGF2ZSBhIGNvbnRleHQK
KyAgICAgICAgdG8gcmVuZGVyIGludG8sIHNvIHRoZSBVSSBwcm9jZXNzIHNpbXBseSByZW5kZXJz
IGFuIGVtcHR5IHBhZ2UuIFdoZW4gdGhlIHdlYiB2aWV3IGlzIHVucmVhbGl6ZWQsIGZvciBleGFt
cGxlIGlmCisgICAgICAgIHRoZSB3ZWIgdmlldyBpcyByZXBhcmVudGVkLCB0aGUgcmVkaXJlY3Rl
ZCB3aW5kb3cgaXMgZGVzdHJveWVkLCBhbmQgYSBzeW5jIG1lc3NhZ2UgaXMgc2VudCB0byB0aGUg
d2ViIHByb2Nlc3MgdG8KKyAgICAgICAgZGVzdHJveSB0aGUgY3VycmVudCBnbCBjb250ZXh0IGFu
ZCBzdG9wIGRyYXdpbmcuIFRoaXMgbmVlZHMgdG8gaGFwcGVuIHN5bmNocm9ub3VzbHksIGJlY2F1
c2UgdGhlIFVJIHByb2Nlc3MKKyAgICAgICAgY2FuJ3QgcmVtb3ZlIHRoZSByZWRpcmVjdGVkIHdp
bmRvdyB1bnRpbCB0aGUgd2ViIHByb2Nlc3MgaGFzIHN0b3BwZWQgcmVuZGVyaW5nIGludG8gaXQu
IFRoaXMgbWFrZXMgYWxzbyB0aGUKKyAgICAgICAgcmVwYXJlbnRpbmcgcHJvY2VzcyBxdWl0ZSB1
bnN0YWJsZSBhbmQgcmlza3kuIFRvIGFsbCB0aG9zZSBzeW5jaHJvbml6YXRpb24gcG9pbnRzIHdl
IG5vdyBoYXZlIHRvIGFkZCB0aGUKKyAgICAgICAgc3luY2hyb25pemF0aW9uIHdpdGggdGhlIGNv
bXBvc2l0aW5nIHRocmVhZCB3aGVuIHVzaW5nIHRoZSB0aHJlYWRlZCBjb21wb3NpdG9yLiBUaGUg
dGhyZWFkZWQgY29tcG9zaXRvciBtYWRlCisgICAgICAgIHJlc2l6aW5nLCByZXBhcmVudGluZywg
ZXRjLiBldmVuIHdvcnNlLiBXZSBjYW4ndCBhdm9pZCB0aGUgc3luY2hyb25pemF0aW9uIHdpdGgg
dGhlIHRocmVhZGVkIGNvbXBvc2l0b3IsIGJ1dCB3ZQorICAgICAgICBjYW4gcmVkdWNlIHRoZSBz
eW5jaHJvbml6YXRpb24gcG9pbnRzIGFuZCBpbXByb3ZlIHRoZSBjdXJyZW50IG9uZXMgYnkgbW92
aW5nIHRoZSByZWRpcmVjdGVkIHdpbmRvdyB0byB0aGUgd2ViCisgICAgICAgIHByb2Nlc3MuIElu
IHRoaXMgY2FzZSBpcyB3ZWIgcHJvY2VzcyB3aG8gY3JlYXRlcyB0aGUgcmVkaXJlY3RlZCB3aW5k
b3csIHNvIHdlIGNhbiBiZSBzdXJlIHRoYXQgaXQgYWx3YXlzIGhhcyBhCisgICAgICAgIHZhbGlk
IG5hdGl2ZSBzdXJmYWNlIGhhbmRsZSB0byByZW5kZXIgaW50by4gVGhpcyBtZWFucyB3ZSBubyBs
b25nZXIgbmVlZCB0aGUgSVBDIG1lc3NhZ2UgdG8gc2VuZCB0aGUgbmF0aXZlCisgICAgICAgIHN1
cmZhY2UgaGFuZGxlIGZyb20gdGhlIFVJIHByb2Nlc3MgdG8gdGhlIHdlYiBwcm9jZXNzLCBub3Ig
dGhlIHN5bmMgbWVzc2FnZSB0byBkZXN0cm95IGl0IGVpdGhlci4gVGhpcyBhbHNvCisgICAgICAg
IG1lYW5zIHdlIG5vIGxvbmdlciBuZWVkIHRvIHdhaXQgdW50aWwgdGhlIHZpZXcgaXMgcmVhbGl6
ZWQgdG8gc3RhcnQgcmVuZGVyaW5nIGFjY2VsZXJhdGVkIGNvbnRlbnRzLCBhbmQgd2UgZG9uJ3QK
KyAgICAgICAgbmVlZCB0byBzdG9wIHdoZW4gaXQncyB1bnJlYWxpemVkIGVpdGhlci4gV2UgZG9u
J3QgcmVhbGx5IG5lZWQgdG8gaW5oZXJpdCB0aGUgWFZpc3VhbCBmcm9tIHRoZSBwYXJlbnQgd2lu
ZG93IGlmCisgICAgICAgIHRoZSByZWRpcmVjdGVkIHdpbmRvdyBhbHdheXMgdXNlcyBhbHdheXMg
YSBSR0JBIHZpc3VhbCB3aGVuIGF2YWlsYWJsZS4gVGhhdCB3YXkgd2UgYWx3YXlzIHJlbmRlciBp
bnRvIGEKKyAgICAgICAgdHJhbnNwYXJlbnQgd2luZG93IHRoYXQgaXMgY29tcG9zZWQgaW50byB0
aGUgd2ViIHZpZXcgd2lkZ2V0LiBBbmQgd2hlbiB0aGUgd2ViIHZpZXcgaXMgcmVzaXplZCwgd2Ug
bm8gbG9uZ2VyCisgICAgICAgIG5lZWQgdG8gZGVzdHJveSB0aGUgR0wgY29udGV4dCBlaXRoZXIs
IGJlY2F1c2Ugd2UgdXNlIHRoZSBzYW1lIHJlZGlyZWN0ZWQgd2luZG93IGFzIHRoZSBuYXRpdmUg
aGFuZGxlLCBidXQKKyAgICAgICAgY3JlYXRlIGEgbmV3IHBpeG1hcCB0aGF0IGlzIHdoYXQgd2Ug
c2VuZCB0byB0aGUgVUkgcHJvY2VzcyBhcyBsYXllciB0cmVlIGNvbnRleHQgSUQuIFRoZSBsYXll
ciB0cmVlIGNvbnRleHQgSUQKKyAgICAgICAgaXMgYWxyZWFkeSBzZW50IHRvIHRoZSBVSSBwcm9j
ZXNzIGJ5IHRoZSBkcmF3aW5nIGFyZWEgYXMgcGFydCBvZiB0aGUgYmFja2luZyBzdG9yZSB1cGRh
dGUgcHJvY2Vzcywgc28gd2UgZG9uJ3QKKyAgICAgICAgbmVlZCBhbnkgbmV3IElQQyBtZXNzYWdl
IGZvciB0aGlzLiBXaGVuIHRoZSB3ZWIgdmlldyBpcyByZXNpemVkLCB0aGUgVUkgcHJvY2VzcyBz
ZW5kcyBhIGJhY2tpbmcgc3RvcmUgc3RhdGUKKyAgICAgICAgdXBkYXRlIG1lc3NhZ2UgdG8gdGhl
IHdlYiBwcm9jZXNzIHRoYXQgdXBkYXRlcyBpdHMgc2l6ZSwgcmVsYXlvdXRzIGFuZCB0aGVuIHJl
bmRlcnMgdGhlIG5ldyBjb250ZW50cywgc28gdGhhdAorICAgICAgICB3aGVuIHRoZSB1cGRhdGUg
YmFja2luZyBzdG9yZSBzdGF0ZSByZXBseSBnZXRzIHRvIHRoZSBVSSBwcm9jZXNzLCB3ZSBhbHJl
YWR5IGhhdmUgYSBuZXcgcGl4bWFwIHdpdGggdGhlIG5ldworICAgICAgICBjb250ZW50cyB1cGRh
dGVkLiBUaGlzIG1ha2VzIHJlc2l6aW5nIHNtb290aCBhZ2FpbiwgYW5kIGF2b2lkcyBmbGlja2Vy
aW5nIGFuZCByZW5kZXJpbmcgYXJ0aWZhY3RzLiBBbmQgZmluYWxseQorICAgICAgICBhbGwgdGhp
cyBhbHNvIHByZXZlbnRzIHNldmVyYWwgcmFjZSBjb25kaXRpb25zIHRoYXQgd2VyZSBjYXVzaW5n
IFggZXJyb3JzIGFuZCB3ZWIgcHJvY2VzcyBjcmFzaGVzLgorCisgICAgICAgICogUGxhdGZvcm1H
VEsuY21ha2U6CisgICAgICAgICogU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRj
b21wb3NpdG9yL1RocmVhZGVkQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRocmVh
ZGVkQ29tcG9zaXRvcjo6Y3JlYXRlKTogTWFrZSBpdCBwb3NzaWJsZSB0byBvcHRpb25hbGx5IHBh
c3MgYSBuYXRpdmUgc3VyZmFjZSBoYW5kbGUgZm9yCisgICAgICAgIGNvbXBvc2l0aW5nIHRvIHRo
ZSBUaHJlYWRlZENvbXBvc2l0b3IgY29udHJ1Y3Rvci4KKyAgICAgICAgKFdlYktpdDo6VGhyZWFk
ZWRDb21wb3NpdG9yOjpUaHJlYWRlZENvbXBvc2l0b3IpOiBJbml0aWFsaXplIHRoZSBuYXRpdmUg
c3VyZmFjZSBoYW5kbGUgYW5kIG1ha2UgdGhlIHNjZW5lIGFjdGl2ZQorICAgICAgICBhZnRlciB0
aGUgdGhyZWFkIGluaXRpYWxpemF0aW9uIGlmIHdlIGFscmVhZHkgaGF2ZSBhIHZhbGlkIGhhbmRs
ZS4KKyAgICAgICAgKiBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0
b3IvVGhyZWFkZWRDb21wb3NpdG9yLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvUGFn
ZUNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6ZW50ZXJB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSk6IFBhc3MgdGhlIGxheWVyIHRyZWUgY29udGV4dCBJ
RCB0byB0aGUgd2ViIHZpZXcuCisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjp1cGRh
dGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSk6IE5vdGlmeSB0aGUgd2ViIHZpZXcgYWJvdXQg
dGhlIHVwZGF0ZS4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OndpbGxFbnRlckFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXdCYXNlLmNwcDoKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlU2V0QWNjZWxl
cmF0ZWRDb21wb3NpdGluZ1BpeG1hcCk6IEhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgdGhlIHBp
eG1hcCB1c2VkIHRvIHJlbmRlciB0aGUKKyAgICAgICAgYWNjZWxlcmF0ZWQgY29udGVudHMuCisg
ICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZVJlYWxpemUpOiBSZW1vdmUgdGhlIGNvZGUgdG8gY3Jl
YXRlIHRoZSByZWRpcmVjdGVkIHdpbmRvdy4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlVW5y
ZWFsaXplKTogUmVtb3ZlIHRoZSBjb2RlIHRvIGRlc3Ryb3kgdGhlIHJlZGlyZWN0ZWQgd2luZG93
LgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VEaXNwb3NlKTogUmVzZXQgdGhlIGFjY2VsZXJh
dGVkIGNvbXBvc2l0aW5nIHBpeG1hcC4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdSZW5kZXJBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nUmVzdWx0cyk6IFVzZSB0aGUgYWNjZWxlcmF0ZWQgY29tcG9zaXRp
bmcgcGl4bWFwIHN1cmZhY2UuCisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZVNpemVBbGxvY2F0
ZSk6IFJlbW92ZSB0aGUgY29kZSB0byByZXNpemUgdGhlIHJlZGlyZWN0ZWQgd2luZG93LgorICAg
ICAgICAod2Via2l0V2ViVmlld0Jhc2VFbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKTog
VXBkYXRlIHRoZSBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBwaXhtYXAuCisgICAgICAgICh3ZWJr
aXRXZWJWaWV3QmFzZVVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKTogRGl0dG8uCisg
ICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSk6
IFJlc2V0IHRoZSBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBwaXhtYXAuCisgICAgICAgICh3ZWJr
aXRXZWJWaWV3QmFzZURpZFJlbGF1bmNoV2ViUHJvY2Vzcyk6IFJlbW92ZSB0aGUgY29kZSB0byBz
ZW5kIG5hdGl2ZSBzdXJmYWNlIGhhbmRsZSB0byB0aGUgd2ViIHByb2Nlc3MuCisgICAgICAgICh3
ZWJraXRXZWJWaWV3QmFzZVBhZ2VDbG9zZWQpOiBSZXNldCB0aGUgYWNjZWxlcmF0ZWQgY29tcG9z
aXRpbmcgcGl4bWFwLgorICAgICAgICAoX1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZTo6dXBkYXRl
Vmlld1N0YXRlVGltZXJGaXJlZCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdp
bmdBcmVhUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5tZXNz
YWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5SW1wbDo6ZGlkVXBkYXRlQmFja2luZ1N0
b3JlU3RhdGUpOiBIYW5kbGUgdGhlIGNhc2Ugd2hlbiB0aGUgbGF5ZXIgdHJlZSBjb250ZXh0IElE
CisgICAgICAgIGNoYW5nZXMgd2l0aG91dCBsZWF2aW5nIHRoZSBhY2NlbGVyYXRlZCBjb21wb3Np
dGluZyBtb2RlLCBjYWxsaW5nIHVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkuCisg
ICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlJbXBsOjpleGl0QWNjZWxlcmF0ZWRDb21w
b3NpdGluZ01vZGUpOiBMZXQgdGhlIHdlYiB2aWV3IGtub3cgd2UgYXJlIGxlYXZpbmcgYWNjZWxl
cmF0ZWQKKyAgICAgICAgY29tcG9zaXRpbmcgbW9kZSBldmVuIHdoZW4gaXQncyBmb3JjZWQsIHNp
bmNlIGluIGNhc2Ugb2Ygd2ViIHByb2Nlc3MgY3Jhc2ggd2UgbmVlZCB0byBsZWF2ZSB0aGUgYWNj
ZWxlcmF0ZWQKKyAgICAgICAgY29tcG9zaXRpbmcgbW9kZSBpbiB0aGUgVUkgcHJvY2Vzcy4KKyAg
ICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OndpbGxFbnRlckFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdNb2RlKTogVGhpcyBtZXNzYWdlIHdhcyBhZGRlZCBvbmx5IHRvIHByZXBhcmUg
dGhlCisgICAgICAgIHJlZGlyZWN0ZWQgd2luZG93IHdoZW4gdGhlIHdlYiBwcm9jZXNzIHdhcyBh
Ym91dCB0byBlbnRlciBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBtb2RlLCBzbyBpdCdzIG5vIGxv
bmdlciBuZWVkZWQuCisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlJbXBsOjpzZXRO
YXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcpOiBUaGlzIGlzIG5vdyBvbmx5IHVzZWQg
d2hlbiBidWlsZGluZworICAgICAgICB3aXRob3V0IHJlZGlyZWN0ZWQgWENvbXBvc2l0ZSB3aW5k
b3cgc3VwcG9ydC4KKyAgICAgICAgKiBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvUGFnZUNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OndpbGxFbnRl
ckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9XZWJWaWV3Lmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL2d0ay9YRGFtYWdlTm90aWZpZXIuY3BwOiBIZWxw
ZXIgY2xhc3MgdG8gYmUgbm90aWZpZWQgYWJvdXQgWERhbWFnZSBldmVudHMuCisgICAgICAgIChX
ZWJLaXQ6OlhEYW1hZ2VOb3RpZmllcjo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYktpdDo6WERh
bWFnZU5vdGlmaWVyOjpYRGFtYWdlTm90aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpYRGFtYWdl
Tm90aWZpZXI6OmFkZCk6CisgICAgICAgIChXZWJLaXQ6OlhEYW1hZ2VOb3RpZmllcjo6cmVtb3Zl
KToKKyAgICAgICAgKFdlYktpdDo6WERhbWFnZU5vdGlmaWVyOjpmaWx0ZXJYRGFtYWdlRXZlbnQp
OgorICAgICAgICAoV2ViS2l0OjpYRGFtYWdlTm90aWZpZXI6Om5vdGlmeSk6CisgICAgICAgICog
VUlQcm9jZXNzL2d0ay9YRGFtYWdlTm90aWZpZXIuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9j
ZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvUGFn
ZUNsaWVudEltcGxJT1MubW06CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjp3aWxs
RW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvUGFn
ZUNsaWVudEltcGwubW06CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjp3aWxsRW50
ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuY3BwOgorICAgICAgICAoV2ViS2l0
OjpBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2Rl
KTogUmVtb3ZlIGNvZGUgdG8gc2VuZAorICAgICAgICBXaWxsRW50ZXJBY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kZSBtZXNzYWdlLgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZERyYXdpbmdB
cmVhOjpzZXROYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcpOiBUaGlzIGlzIG5vdyBv
bmx5IHVzZWQgd2hlbiBidWlsZGluZworICAgICAgICB3aXRob3V0IHJlZGlyZWN0ZWQgWENvbXBv
c2l0ZSB3aW5kb3cgc3VwcG9ydC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxl
cmF0ZWREcmF3aW5nQXJlYS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6VGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OlRocmVhZGVkQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0KTogQ3JlYXRlIGEgcmVkaXJlY3RlZCB3aW5kb3cgYW5kCisg
ICAgICAgIHBhc3MgdGhlIHdpbmRvdyBJRCBhcyBuYXRpdmUgc3VyZmFjZSBoYW5kbGUgdG8gdGhl
IHRocmVhZGVkIGNvbXBvc2l0b3IuIFVzZSB0aGUgcmVkaXJlY3RlZCB3aW5kb3cgcGl4bWFwIGFz
CisgICAgICAgIGxheWVyIHRyZWUgY29udGV4dC4KKyAgICAgICAgKFdlYktpdDo6VGhyZWFkZWRD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmludmFsaWRhdGUpOiBEZXN0cm95IHRoZSByZWRpcmVj
dGVkIHdpbmRvdy4KKyAgICAgICAgKFdlYktpdDo6VGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCk6IFJlc2l6ZSB0aGUgcmVkaXJl
Y3RlZCB3aW5kb3cgYW5kCisgICAgICAgIHVwZGF0ZSB0aGUgbGF5ZXIgdHJlZSBjb250ZXh0Lgor
ICAgICAgICAoV2ViS2l0OjpUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2l6ZURp
ZENoYW5nZSk6IERpdHRvLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Lmg6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL0RyYXdpbmdBcmVhLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUhvc3RHdGs6OkxheWVyVHJlZUhvc3RHdGspOiBDcmVhdGUgYSByZWRpcmVjdGVkIHdpbmRvdyBh
bmQgdGV4dHVyZSBtYXBwZXIgdGhhdCB1c2VzIHRoZSB3aW5kb3cKKyAgICAgICAgSUQgYXMgbmF0
aXZlIHN1cmZhY2UgaGFuZGxlLiBVc2UgdGhlIHJlZGlyZWN0ZWQgd2luZG93IHBpeG1hcCBhcyBs
YXllciB0cmVlIGNvbnRleHQuCisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RHdGs6Om1h
a2VDb250ZXh0Q3VycmVudCk6IFVzZSB0aGUgcmVkaXJlY3RlZCB3aW5kb3cgYXMgbmF0aXZlIGhh
bmRsZS4KKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdEd0azo6aW52YWxpZGF0ZSk6IERl
c3Ryb3kgdGhlIHJlZGlyZWN0ZWQgd2luZG93LgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVI
b3N0R3RrOjpzaXplRGlkQ2hhbmdlKTogUmVzaXplIHRoZSByZWRpcmVjdGVkIHdpbmRvdyBhbmQg
dXBkYXRlIHRoZSBsYXllciB0cmVlIGNvbnRleHQuCisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUhvc3RHdGs6OmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCk6IERpdHRvLgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVIb3N0R3RrOjpjcmVhdGVUZXh0dXJlTWFwcGVyKTogSGVscGVy
IGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgdGV4dHVyZSBtYXBwZXIuCisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUhvc3RHdGs6OnNldE5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyk6
IFVzZSBjcmVhdGVUZXh0dXJlTWFwcGVyKCkuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L2d0ay9MYXllclRyZWVIb3N0R3RrLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0
ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
OjpSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6
UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KToK
KyAgICAgICAgKFdlYktpdDo6UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6On5SZWRpcmVjdGVk
WENvbXBvc2l0ZVdpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6OlJlZGlyZWN0ZWRYQ29tcG9zaXRl
V2luZG93OjpyZXNpemUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsvUmVkaXJl
Y3RlZFhDb21wb3NpdGVXaW5kb3cuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaC4KKyAgICAgICAgKFdlYktpdDo6
UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OndpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6OlJl
ZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpwaXhtYXApOgorCiAyMDE2LTA3LTMwICBEYW4gQmVy
bnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgW1hjb2RlXSBXZWJLaXQuZnJhbWV3
b3JrIGlzIHRvdWNoZWQgb24gaW5jcmVtZW50YWwgYnVpbGQgZXZlbiBpZiBub3RoaW5n4oCZcyBj
aGFuZ2VkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZSBiL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDQ0ZjFlZmMuLjM2OWFhMDIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0yOTksOCArMjk5LDggQEAgbGlzdChBUFBFTkQg
V2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5jcHAK
ICAgICBVSVByb2Nlc3MvZ3RrL0lucHV0TWV0aG9kRmlsdGVyLmNwcAogICAgIFVJUHJvY2Vzcy9n
dGsvS2V5QmluZGluZ1RyYW5zbGF0b3IuY3BwCi0gICAgVUlQcm9jZXNzL2d0ay9SZWRpcmVjdGVk
WENvbXBvc2l0ZVdpbmRvdy5jcHAKICAgICBVSVByb2Nlc3MvZ3RrL1RleHRDaGVja2VyR3RrLmNw
cAorICAgIFVJUHJvY2Vzcy9ndGsvWERhbWFnZU5vdGlmaWVyLmNwcAogICAgIFVJUHJvY2Vzcy9n
dGsvV2ViQ29sb3JQaWNrZXJHdGsuY3BwCiAgICAgVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0TWVu
dVByb3h5R3RrLmNwcAogICAgIFVJUHJvY2Vzcy9ndGsvV2ViRnVsbFNjcmVlbkNsaWVudEd0ay5j
cHAKQEAgLTM1MCw2ICszNTAsNyBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBX
ZWJQcm9jZXNzL1dlYlBhZ2UvZ3N0cmVhbWVyL1dlYlBhZ2VHU3RyZWFtZXIuY3BwCiAKICAgICBX
ZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1ByaW50ZXJMaXN0R3RrLmNwcAorICAgIFdlYlByb2Nlc3Mv
V2ViUGFnZS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwCiAgICAgV2ViUHJvY2Vz
cy9XZWJQYWdlL2d0ay9XZWJJbnNwZWN0b3JVSUd0ay5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBh
Z2UvZ3RrL1dlYlBhZ2VHdGsuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQcmlu
dE9wZXJhdGlvbkd0ay5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29y
ZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9UaHJlYWRlZENvbXBvc2l0b3IuY3Bw
IGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21w
b3NpdG9yL1RocmVhZGVkQ29tcG9zaXRvci5jcHAKaW5kZXggOWE0N2U2YS4uMzQ1MjQyOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFk
ZWRjb21wb3NpdG9yL1RocmVhZGVkQ29tcG9zaXRvci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZGVkQ29t
cG9zaXRvci5jcHAKQEAgLTQxLDE4ICs0MSwyMCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVJlZjxUaHJlYWRlZENvbXBvc2l0b3I+IFRocmVhZGVk
Q29tcG9zaXRvcjo6Y3JlYXRlKENsaWVudCogY2xpZW50KQorUmVmPFRocmVhZGVkQ29tcG9zaXRv
cj4gVGhyZWFkZWRDb21wb3NpdG9yOjpjcmVhdGUoQ2xpZW50KiBjbGllbnQsIHVpbnQ2NF90IG5h
dGl2ZVN1cmZhY2VIYW5kbGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVGhyZWFkZWRD
b21wb3NpdG9yKGNsaWVudCkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFRocmVhZGVkQ29t
cG9zaXRvcihjbGllbnQsIG5hdGl2ZVN1cmZhY2VIYW5kbGUpKTsKIH0KIAotVGhyZWFkZWRDb21w
b3NpdG9yOjpUaHJlYWRlZENvbXBvc2l0b3IoQ2xpZW50KiBjbGllbnQpCitUaHJlYWRlZENvbXBv
c2l0b3I6OlRocmVhZGVkQ29tcG9zaXRvcihDbGllbnQqIGNsaWVudCwgdWludDY0X3QgbmF0aXZl
U3VyZmFjZUhhbmRsZSkKICAgICA6IG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fbmF0aXZlU3Vy
ZmFjZUhhbmRsZShuYXRpdmVTdXJmYWNlSGFuZGxlKQogICAgICwgbV9jb21wb3NpdGluZ1J1bkxv
b3Aoc3RkOjptYWtlX3VuaXF1ZTxDb21wb3NpdGluZ1J1bkxvb3A+KFt0aGlzXSB7IHJlbmRlckxh
eWVyVHJlZSgpOyB9KSkKIHsKICAgICBtX2NvbXBvc2l0aW5nUnVuTG9vcC0+cGVyZm9ybVRhc2tT
eW5jKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKICAgICAgICAgbV9z
Y2VuZSA9IGFkb3B0UmVmKG5ldyBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUodGhpcykpOwogICAg
ICAgICBtX3ZpZXdwb3J0Q29udHJvbGxlciA9IHN0ZDo6bWFrZV91bmlxdWU8U2ltcGxlVmlld3Bv
cnRDb250cm9sbGVyPih0aGlzKTsKKyAgICAgICAgbV9zY2VuZS0+c2V0QWN0aXZlKCEhbV9uYXRp
dmVTdXJmYWNlSGFuZGxlKTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZGVk
Q29tcG9zaXRvci5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
dGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZGVkQ29tcG9zaXRvci5oCmluZGV4IDFkM2JhOTcuLjA0
MmM2OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBo
aWNzL3RocmVhZGVkY29tcG9zaXRvci9UaHJlYWRlZENvbXBvc2l0b3IuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhy
ZWFkZWRDb21wb3NpdG9yLmgKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgICAgICB2aXJ0
dWFsIHZvaWQgY29tbWl0U2Nyb2xsT2Zmc2V0KHVpbnQzMl90IGxheWVySUQsIGNvbnN0IFdlYkNv
cmU6OkludFNpemUmIG9mZnNldCkgPSAwOwogICAgIH07CiAKLSAgICBzdGF0aWMgUmVmPFRocmVh
ZGVkQ29tcG9zaXRvcj4gY3JlYXRlKENsaWVudCopOworICAgIHN0YXRpYyBSZWY8VGhyZWFkZWRD
b21wb3NpdG9yPiBjcmVhdGUoQ2xpZW50KiwgdWludDY0X3QgbmF0aXZlU3VyZmFjZUhhbmRsZSA9
IDApOwogICAgIHZpcnR1YWwgflRocmVhZGVkQ29tcG9zaXRvcigpOwogCiAgICAgdm9pZCBzZXRO
YXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcodWludDY0X3QpOwpAQCAtNzcsNyArNzcs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmb3JjZVJlcGFpbnQoKTsKIAogcHJpdmF0ZToKLSAgICBU
aHJlYWRlZENvbXBvc2l0b3IoQ2xpZW50Kik7CisgICAgVGhyZWFkZWRDb21wb3NpdG9yKENsaWVu
dCosIHVpbnQ2NF90IG5hdGl2ZVN1cmZhY2VIYW5kbGUpOwogCiAgICAgLy8gQ29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lQ2xpZW50CiAgICAgdm9pZCByZW5kZXJOZXh0RnJhbWUoKSBvdmVycmlkZTsK
QEAgLTEwMSw3ICsxMDEsNyBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OkludFNpemUgbV92aWV3
cG9ydFNpemU7CiAgICAgZmxvYXQgbV9kZXZpY2VTY2FsZUZhY3RvciB7IDEgfTsKICAgICBib29s
IG1fZHJhd3NCYWNrZ3JvdW5kIHsgdHJ1ZSB9OwotICAgIHVpbnQ2NF90IG1fbmF0aXZlU3VyZmFj
ZUhhbmRsZSB7IDAgfTsKKyAgICB1aW50NjRfdCBtX25hdGl2ZVN1cmZhY2VIYW5kbGU7CiAKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Q29tcG9zaXRpbmdSdW5Mb29wPiBtX2NvbXBvc2l0aW5nUnVuTG9v
cDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdl
Q2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xp
ZW50SW1wbC5jcHAKaW5kZXggY2M3YzQ4OS4uOGQyNThmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcApAQCAtMjE2LDkgKzIx
Niw5IEBAIFJlZlB0cjxXZWJDb2xvclBpY2tlcj4gUGFnZUNsaWVudEltcGw6OmNyZWF0ZUNvbG9y
UGlja2VyKFdlYlBhZ2VQcm94eSogcGFnZSwgY29uCiAgICAgcmV0dXJuIFdlYkNvbG9yUGlja2Vy
R3RrOjpjcmVhdGUoKnBhZ2UsIGNvbG9yLCByZWN0KTsKIH0KIAotdm9pZCBQYWdlQ2xpZW50SW1w
bDo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0
JikKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUo
Y29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgbGF5ZXJUcmVlQ29udGV4dCkKIHsKLSAgICB3ZWJraXRX
ZWJWaWV3QmFzZUVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoV0VCS0lUX1dFQl9WSUVX
X0JBU0UobV92aWV3V2lkZ2V0KSk7CisgICAgd2Via2l0V2ViVmlld0Jhc2VFbnRlckFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdNb2RlKFdFQktJVF9XRUJfVklFV19CQVNFKG1fdmlld1dpZGdldCksIGxh
eWVyVHJlZUNvbnRleHQpOwogfQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpleGl0QWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGUoKQpAQCAtMjI2LDE0ICsyMjYsOSBAQCB2b2lkIFBhZ2VDbGllbnRJ
bXBsOjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKQogICAgIHdlYmtpdFdlYlZpZXdC
YXNlRXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKFdFQktJVF9XRUJfVklFV19CQVNFKG1f
dmlld1dpZGdldCkpOwogfQogCi12b2lkIFBhZ2VDbGllbnRJbXBsOjp3aWxsRW50ZXJBY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZSgpCit2b2lkIFBhZ2VDbGllbnRJbXBsOjp1cGRhdGVBY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0JiBsYXllclRyZWVDb250
ZXh0KQogewotICAgIHdlYmtpdFdlYlZpZXdCYXNlV2lsbEVudGVyQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ01vZGUoV0VCS0lUX1dFQl9WSUVXX0JBU0UobV92aWV3V2lkZ2V0KSk7Ci19Ci0KLXZvaWQg
UGFnZUNsaWVudEltcGw6OnVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExh
eWVyVHJlZUNvbnRleHQmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgd2Via2l0V2Vi
Vmlld0Jhc2VVcGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShXRUJLSVRfV0VCX1ZJRVdf
QkFTRShtX3ZpZXdXaWRnZXQpLCBsYXllclRyZWVDb250ZXh0KTsKIH0KIAogdm9pZCBQYWdlQ2xp
ZW50SW1wbDo6cGFnZUNsb3NlZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvUGFnZUNsaWVudEltcGwuaAppbmRleCBkMDU4Y2U4Li5mZTg0ZmIyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmgKQEAgLTky
LDcgKzkyLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpIG92ZXJyaWRlOwogICAgIHZvaWQgZXhpdEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCB1cGRhdGVBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0Jikgb3ZlcnJpZGU7
Ci0gICAgdm9pZCB3aWxsRW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpIG92ZXJyaWRl
OwogCiAgICAgdm9pZCBoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSopIG92ZXJy
aWRlOwogICAgIHZvaWQgZGlkQ2hhbmdlQ29udGVudFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCmluZGV4IDY2OTRjY2Y4Li5hZDM4MTQwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jh
c2UuY3BwCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSAiTmF0aXZlV2ViTW91c2VFdmVudC5o
IgogI2luY2x1ZGUgIk5hdGl2ZVdlYldoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJQYWdlQ2xpZW50
SW1wbC5oIgotI2luY2x1ZGUgIlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmgiCiAjaW5jbHVk
ZSAiVmlld1N0YXRlLmgiCiAjaW5jbHVkZSAiV2ViRXZlbnRGYWN0b3J5LmgiCiAjaW5jbHVkZSAi
V2ViRnVsbFNjcmVlbkNsaWVudEd0ay5oIgpAQCAtNzMsNiArNzIsMTUgQEAKICNpbmNsdWRlICJX
ZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5LmgiCiAjZW5kaWYKIAorI2lmIFVTRShSRURJUkVDVEVE
X1hDT01QT1NJVEVfV0lORE9XKQorI2luY2x1ZGUgIlhEYW1hZ2VOb3RpZmllci5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvUGxhdGZvcm1EaXNwbGF5WDExLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9YVW5p
cXVlUmVzb3VyY2UuaD4KKyNpbmNsdWRlIDxYMTEvWGxpYi5oPgorI2luY2x1ZGUgPFgxMS9leHRl
bnNpb25zL1hkYW1hZ2UuaD4KKyNpbmNsdWRlIDxjYWlyby14bGliLmg+CisjZW5kaWYKKwogI2lm
IFBMQVRGT1JNKFgxMSkKICNpbmNsdWRlIDxnZGsvZ2RreC5oPgogI2VuZGlmCkBAIC0xNTEsOSAr
MTU5LDYgQEAgdHlwZWRlZiBIYXNoTWFwPHVpbnQzMl90LCBHVW5pcXVlUHRyPEdka0V2ZW50Pj4g
VG91Y2hFdmVudHNNYXA7CiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSB7CiAgICAg
X1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSgpCiAgICAgICAgIDogdXBkYXRlVmlld1N0YXRlVGlt
ZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmX1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZTo6dXBk
YXRlVmlld1N0YXRlVGltZXJGaXJlZCkKLSNpZiBVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJ
TkRPVykKLSAgICAgICAgLCBjbGVhclJlZGlyZWN0ZWRXaW5kb3dTb29uVGltZXIoUnVuTG9vcDo6
bWFpbigpLCB0aGlzLCAmX1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZTo6Y2xlYXJSZWRpcmVjdGVk
V2luZG93U29vblRpbWVyRmlyZWQpCi0jZW5kaWYKICAgICB7CiAgICAgfQogCkBAIC0xNjUsMTQg
KzE3MCw2IEBAIHN0cnVjdCBfV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlIHsKICAgICAgICAgdmll
d1N0YXRlRmxhZ3NUb1VwZGF0ZSA9IFZpZXdTdGF0ZTo6Tm9GbGFnczsKICAgICB9CiAKLSNpZiBV
U0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKLSAgICB2b2lkIGNsZWFyUmVkaXJlY3Rl
ZFdpbmRvd1Nvb25UaW1lckZpcmVkKCkKLSAgICB7Ci0gICAgICAgIGlmIChyZWRpcmVjdGVkV2lu
ZG93KQotICAgICAgICAgICAgcmVkaXJlY3RlZFdpbmRvdy0+cmVzaXplKEludFNpemUoKSk7Ci0g
ICAgfQotI2VuZGlmCi0KICAgICBXZWJLaXRXZWJWaWV3Q2hpbGRyZW5NYXAgY2hpbGRyZW47CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPFBhZ2VDbGllbnRJbXBsPiBwYWdlQ2xpZW50OwogICAgIFJlZlB0
cjxXZWJQYWdlUHJveHk+IHBhZ2VQcm94eTsKQEAgLTIxNSw4ICsyMTIsOCBAQCBzdHJ1Y3QgX1dl
YktpdFdlYlZpZXdCYXNlUHJpdmF0ZSB7CiAjZW5kaWYKIAogI2lmIFVTRShSRURJUkVDVEVEX1hD
T01QT1NJVEVfV0lORE9XKQotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZWRpcmVjdGVkWENvbXBvc2l0
ZVdpbmRvdz4gcmVkaXJlY3RlZFdpbmRvdzsKLSAgICBSdW5Mb29wOjpUaW1lcjxXZWJLaXRXZWJW
aWV3QmFzZVByaXZhdGU+IGNsZWFyUmVkaXJlY3RlZFdpbmRvd1Nvb25UaW1lcjsKKyAgICBSZWZQ
dHI8Y2Fpcm9fc3VyZmFjZV90PiBhY2NlbGVyYXRlZENvbXBvc2l0aW5nU3VyZmFjZTsKKyAgICBY
VW5pcXVlRGFtYWdlIGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdTdXJmYWNlRGFtYWdlOwogI2VuZGlm
CiAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQpAQCAtMzU1LDEzICszNTIsNDYgQEAgc3RhdGlj
IHZvaWQgd2Via2l0V2ViVmlld0Jhc2VTZXRUb3BsZXZlbE9uU2NyZWVuV2luZG93KFdlYktpdFdl
YlZpZXdCYXNlKiB3ZWJWaWUKIH0KIAogI2lmIFVTRShSRURJUkVDVEVEX1hDT01QT1NJVEVfV0lO
RE9XKQotc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VSZXNpemVSZWRpcmVjdGVkV2luZG93
KFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3KQorc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jh
c2VTZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nUGl4bWFwKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJW
aWV3LCBQaXhtYXAgcGl4bWFwKQogeworICAgIGlmIChQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERp
c3BsYXkoKS50eXBlKCkgIT0gUGxhdGZvcm1EaXNwbGF5OjpUeXBlOjpYMTEpCisgICAgICAgIHJl
dHVybjsKKwogICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnBy
aXY7CisgICAgaWYgKHByaXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdTdXJmYWNlCisgICAgICAg
ICYmIGNhaXJvX3hsaWJfc3VyZmFjZV9nZXRfZHJhd2FibGUocHJpdi0+YWNjZWxlcmF0ZWRDb21w
b3NpdGluZ1N1cmZhY2UuZ2V0KCkpID09IHBpeG1hcCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKHByaXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdTdXJmYWNlKSB7CisgICAgICAgIGlmIChw
cml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nU3VyZmFjZURhbWFnZSkgeworICAgICAgICAgICAg
WERhbWFnZU5vdGlmaWVyOjpzaW5nbGV0b24oKS5yZW1vdmUocHJpdi0+YWNjZWxlcmF0ZWRDb21w
b3NpdGluZ1N1cmZhY2VEYW1hZ2UuZ2V0KCkpOworICAgICAgICAgICAgcHJpdi0+YWNjZWxlcmF0
ZWRDb21wb3NpdGluZ1N1cmZhY2VEYW1hZ2UucmVzZXQoKTsKKyAgICAgICAgfQorICAgICAgICBw
cml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nU3VyZmFjZSA9IG51bGxwdHI7CisgICAgfQorCisg
ICAgaWYgKCFwaXhtYXApCisgICAgICAgIHJldHVybjsKKwogICAgIERyYXdpbmdBcmVhUHJveHlJ
bXBsKiBkcmF3aW5nQXJlYSA9IHN0YXRpY19jYXN0PERyYXdpbmdBcmVhUHJveHlJbXBsKj4ocHJp
di0+cGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpKTsKICAgICBpZiAoIWRyYXdpbmdBcmVhKQogICAg
ICAgICByZXR1cm47Ci0gICAgcHJpdi0+cmVkaXJlY3RlZFdpbmRvdy0+cmVzaXplKGRyYXdpbmdB
cmVhLT5zaXplKCkpOworCisgICAgSW50U2l6ZSBzaXplID0gZHJhd2luZ0FyZWEtPnNpemUoKTsK
KyAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IHByaXYtPnBhZ2VQcm94eS0+ZGV2aWNlU2Nh
bGVGYWN0b3IoKTsKKyAgICBzaXplLnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKTsKKworICAgIERp
c3BsYXkqIGRpc3BsYXkgPSBkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KFBsYXRmb3JtRGlz
cGxheTo6c2hhcmVkRGlzcGxheSgpKS5uYXRpdmUoKTsKKyAgICBBU1NFUlQoZG93bmNhc3Q8UGxh
dGZvcm1EaXNwbGF5WDExPihQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXkoKSkubmF0aXZl
KCkgPT0gR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSkpOwor
ICAgIEdka1Zpc3VhbCogdmlzdWFsID0gZ2RrX3NjcmVlbl9nZXRfcmdiYV92aXN1YWwoZ2RrX3Nj
cmVlbl9nZXRfZGVmYXVsdCgpKTsKKyAgICBpZiAoIXZpc3VhbCkKKyAgICAgICAgdmlzdWFsID0g
Z2RrX3NjcmVlbl9nZXRfc3lzdGVtX3Zpc3VhbChnZGtfc2NyZWVuX2dldF9kZWZhdWx0KCkpOwor
ICAgIHByaXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9f
eGxpYl9zdXJmYWNlX2NyZWF0ZShkaXNwbGF5LCBwaXhtYXAsIEdES19WSVNVQUxfWFZJU1VBTCh2
aXN1YWwpLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpKTsKKyAgICBjYWlyb1N1cmZhY2VT
ZXREZXZpY2VTY2FsZShwcml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nU3VyZmFjZS5nZXQoKSwg
ZGV2aWNlU2NhbGVGYWN0b3IsIGRldmljZVNjYWxlRmFjdG9yKTsKKyAgICBwcml2LT5hY2NlbGVy
YXRlZENvbXBvc2l0aW5nU3VyZmFjZURhbWFnZSA9IFhEYW1hZ2VDcmVhdGUoZGlzcGxheSwgcGl4
bWFwLCBYRGFtYWdlUmVwb3J0Tm9uRW1wdHkpOworICAgIFhEYW1hZ2VOb3RpZmllcjo6c2luZ2xl
dG9uKCkuYWRkKHByaXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdTdXJmYWNlRGFtYWdlLmdldCgp
LCBbd2ViVmlld10geworICAgICAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXcoR1RLX1dJREdFVCh3
ZWJWaWV3KSk7CisgICAgfSk7CiB9CiAjZW5kaWYKIApAQCAtMzcwLDI2ICs0MDAsNiBAQCBzdGF0
aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVJlYWxpemUoR3RrV2lkZ2V0KiB3aWRnZXQpCiAgICAg
V2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQp
OwogICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7CiAK
LSNpZiBVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKLSAgICBpZiAoUGxhdGZvcm1E
aXNwbGF5OjpzaGFyZWREaXNwbGF5KCkudHlwZSgpID09IFBsYXRmb3JtRGlzcGxheTo6VHlwZTo6
WDExKSB7Ci0gICAgICAgIEFTU0VSVCghcHJpdi0+cmVkaXJlY3RlZFdpbmRvdyk7Ci0gICAgICAg
IERyYXdpbmdBcmVhUHJveHlJbXBsKiBkcmF3aW5nQXJlYSA9IHN0YXRpY19jYXN0PERyYXdpbmdB
cmVhUHJveHlJbXBsKj4ocHJpdi0+cGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpKTsKLSAgICAgICAg
cHJpdi0+cmVkaXJlY3RlZFdpbmRvdyA9IFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpjcmVh
dGUoCi0gICAgICAgICAgICAqcHJpdi0+cGFnZVByb3h5LAotICAgICAgICAgICAgZHJhd2luZ0Fy
ZWEgJiYgZHJhd2luZ0FyZWEtPmlzSW5BY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpID8gZHJh
d2luZ0FyZWEtPnNpemUoKSA6IEludFNpemUoKSwKLSAgICAgICAgICAgIFt3ZWJWaWV3XSB7Ci0g
ICAgICAgICAgICAgICAgRHJhd2luZ0FyZWFQcm94eUltcGwqIGRyYXdpbmdBcmVhID0gc3RhdGlj
X2Nhc3Q8RHJhd2luZ0FyZWFQcm94eUltcGwqPih3ZWJWaWV3LT5wcml2LT5wYWdlUHJveHktPmRy
YXdpbmdBcmVhKCkpOwotICAgICAgICAgICAgICAgIGlmIChkcmF3aW5nQXJlYSAmJiBkcmF3aW5n
QXJlYS0+aXNJbkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkpCi0gICAgICAgICAgICAgICAg
ICAgIGd0a193aWRnZXRfcXVldWVfZHJhdyhHVEtfV0lER0VUKHdlYlZpZXcpKTsKLSAgICAgICAg
ICAgIH0pOwotICAgICAgICBpZiAocHJpdi0+cmVkaXJlY3RlZFdpbmRvdyAmJiBkcmF3aW5nQXJl
YSkgewotICAgICAgICAgICAgZHJhd2luZ0FyZWEtPnNldE5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JD
b21wb3NpdGluZyhwcml2LT5yZWRpcmVjdGVkV2luZG93LT53aW5kb3dJRCgpKTsKLSAgICAgICAg
ICAgIGlmIChkcmF3aW5nQXJlYS0+aXNJbkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkpCi0g
ICAgICAgICAgICAgICAgd2Via2l0V2ViVmlld0Jhc2VSZXNpemVSZWRpcmVjdGVkV2luZG93KHdl
YlZpZXcpOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0KICAgICBndGtfd2lkZ2V0X3NldF9y
ZWFsaXplZCh3aWRnZXQsIFRSVUUpOwogCiAgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uOwpA
QCAtNDM5LDEzICs0NDksMTAgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VSZWFsaXpl
KEd0a1dpZGdldCogd2lkZ2V0KQogc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VVbnJlYWxp
emUoR3RrV2lkZ2V0KiB3aWRnZXQpCiB7CiAgICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXcg
PSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpOwotI2lmIFVTRShURVhUVVJFX01BUFBFUikg
JiYgUExBVEZPUk0oWDExKQorI2lmIFVTRShURVhUVVJFX01BUFBFUikgJiYgUExBVEZPUk0oWDEx
KSAmJiAhVVNFKFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCiAgICAgaWYgKERyYXdpbmdB
cmVhUHJveHlJbXBsKiBkcmF3aW5nQXJlYSA9IHN0YXRpY19jYXN0PERyYXdpbmdBcmVhUHJveHlJ
bXBsKj4od2ViVmlldy0+cHJpdi0+cGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpKSkKICAgICAgICAg
ZHJhd2luZ0FyZWEtPmRlc3Ryb3lOYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcoKTsK
ICNlbmRpZgotI2lmIFVTRShSRURJUkVDVEVEX1hDT01QT1NJVEVfV0lORE9XKQotICAgIHdlYlZp
ZXctPnByaXYtPnJlZGlyZWN0ZWRXaW5kb3cgPSBudWxscHRyOwotI2VuZGlmCiAgICAgZ3RrX2lt
X2NvbnRleHRfc2V0X2NsaWVudF93aW5kb3cod2ViVmlldy0+cHJpdi0+aW5wdXRNZXRob2RGaWx0
ZXIuY29udGV4dCgpLCBudWxscHRyKTsKIAogICAgIEdUS19XSURHRVRfQ0xBU1Mod2Via2l0X3dl
Yl92aWV3X2Jhc2VfcGFyZW50X2NsYXNzKS0+dW5yZWFsaXplKHdpZGdldCk7CkBAIC01NTcsNiAr
NTY0LDkgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VEaXNwb3NlKEdPYmplY3QqIGdv
YmplY3QpCiAgICAgZ19jYW5jZWxsYWJsZV9jYW5jZWwod2ViVmlldy0+cHJpdi0+c2NyZWVuU2F2
ZXJJbmhpYml0Q2FuY2VsbGFibGUuZ2V0KCkpOwogICAgIHdlYmtpdFdlYlZpZXdCYXNlU2V0VG9w
bGV2ZWxPblNjcmVlbldpbmRvdyh3ZWJWaWV3LCBudWxscHRyKTsKICAgICB3ZWJWaWV3LT5wcml2
LT5wYWdlUHJveHktPmNsb3NlKCk7CisjaWYgVVNFKFJFRElSRUNURURfWENPTVBPU0lURV9XSU5E
T1cpCisgICAgd2Via2l0V2ViVmlld0Jhc2VTZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nUGl4bWFw
KHdlYlZpZXcsIDApOworI2VuZGlmCiAgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X3dlYl92aWV3
X2Jhc2VfcGFyZW50X2NsYXNzKS0+ZGlzcG9zZShnb2JqZWN0KTsKIH0KIApAQCAtNTc3LDM4ICs1
ODcsMzMgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VDb25zdHJ1Y3RlZChHT2JqZWN0
KiBvYmplY3QpCiAKIHN0YXRpYyBib29sIHdlYmtpdFdlYlZpZXdSZW5kZXJBY2NlbGVyYXRlZENv
bXBvc2l0aW5nUmVzdWx0cyhXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UsIERyYXdpbmdB
cmVhUHJveHlJbXBsKiBkcmF3aW5nQXJlYSwgY2Fpcm9fdCogY3IsIEdka1JlY3RhbmdsZSogY2xp
cFJlY3QpCiB7Ci0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSKSAmJiBVU0UoUkVESVJFQ1RFRF9YQ09N
UE9TSVRFX1dJTkRPVykKKyNpZiBVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKICAg
ICBBU1NFUlQoZHJhd2luZ0FyZWEpOwogCiAgICAgaWYgKCFkcmF3aW5nQXJlYS0+aXNJbkFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIC8v
IFRvIGF2b2lkIGZsYXNoZXMgd2hlbiBpbml0aWFsaXppbmcgYWNjZWxlcmF0ZWQgY29tcG9zaXRp
bmcgZm9yIHRoZSBmaXJzdAotICAgIC8vIHRpbWUsIHdlIHdhaXQgdW50aWwgd2Uga25vdyB0aGVy
ZSdzIGEgZnJhbWUgcmVhZHkgYmVmb3JlIHJlbmRlcmluZy4KLSAgICBXZWJLaXRXZWJWaWV3QmFz
ZVByaXZhdGUqIHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsKLSAgICBpZiAoIXByaXYtPnJlZGly
ZWN0ZWRXaW5kb3cpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJLaXRXZWJWaWV3QmFz
ZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3ZWJWaWV3QmFzZSktPnByaXY7
CisgICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gcHJpdi0+YWNjZWxlcmF0ZWRDb21wb3Np
dGluZ1N1cmZhY2UuZ2V0KCk7CisgICAgY2Fpcm9fc2F2ZShjcik7CiAKLSAgICB3ZWJraXRXZWJW
aWV3QmFzZVJlc2l6ZVJlZGlyZWN0ZWRXaW5kb3cod2ViVmlld0Jhc2UpOwotICAgIGlmIChjYWly
b19zdXJmYWNlX3QqIHN1cmZhY2UgPSBwcml2LT5yZWRpcmVjdGVkV2luZG93LT5zdXJmYWNlKCkp
IHsKLSAgICAgICAgY2Fpcm9fc2F2ZShjcik7Ci0KLSAgICAgICAgaWYgKCFwcml2LT5wYWdlUHJv
eHktPmRyYXdzQmFja2dyb3VuZCgpKSB7Ci0gICAgICAgICAgICBjb25zdCBXZWJDb3JlOjpDb2xv
ciYgY29sb3IgPSBwcml2LT5wYWdlUHJveHktPmJhY2tncm91bmRDb2xvcigpOwotICAgICAgICAg
ICAgaWYgKGNvbG9yLmhhc0FscGhhKCkpIHsKLSAgICAgICAgICAgICAgICBjYWlyb19yZWN0YW5n
bGUoY3IsIGNsaXBSZWN0LT54LCBjbGlwUmVjdC0+eSwgY2xpcFJlY3QtPndpZHRoLCBjbGlwUmVj
dC0+aGVpZ2h0KTsKLSAgICAgICAgICAgICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IsIENBSVJP
X09QRVJBVE9SX0NMRUFSKTsKLSAgICAgICAgICAgICAgICBjYWlyb19maWxsKGNyKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGNvbG9yLmFscGhhKCkgPiAwKSB7Ci0gICAgICAg
ICAgICAgICAgc2V0U291cmNlUkdCQUZyb21Db2xvcihjciwgY29sb3IpOwotICAgICAgICAgICAg
ICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKLSAgICAg
ICAgICAgICAgICBjYWlyb19yZWN0YW5nbGUoY3IsIGNsaXBSZWN0LT54LCBjbGlwUmVjdC0+eSwg
Y2xpcFJlY3QtPndpZHRoLCBjbGlwUmVjdC0+aGVpZ2h0KTsKLSAgICAgICAgICAgICAgICBjYWly
b19maWxsKGNyKTsKLSAgICAgICAgICAgIH0KKyAgICBpZiAoIXN1cmZhY2UgfHwgIXByaXYtPnBh
Z2VQcm94eS0+ZHJhd3NCYWNrZ3JvdW5kKCkpIHsKKyAgICAgICAgY29uc3QgV2ViQ29yZTo6Q29s
b3ImIGNvbG9yID0gcHJpdi0+cGFnZVByb3h5LT5iYWNrZ3JvdW5kQ29sb3IoKTsKKyAgICAgICAg
aWYgKGNvbG9yLmhhc0FscGhhKCkpIHsKKyAgICAgICAgICAgIGNhaXJvX3JlY3RhbmdsZShjciwg
Y2xpcFJlY3QtPngsIGNsaXBSZWN0LT55LCBjbGlwUmVjdC0+d2lkdGgsIGNsaXBSZWN0LT5oZWln
aHQpOworICAgICAgICAgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLCBDQUlST19PUEVSQVRPUl9D
TEVBUik7CisgICAgICAgICAgICBjYWlyb19maWxsKGNyKTsKICAgICAgICAgfQogCisgICAgICAg
IGlmIChjb2xvci5hbHBoYSgpID4gMCkgeworICAgICAgICAgICAgc2V0U291cmNlUkdCQUZyb21D
b2xvcihjciwgY29sb3IpOworICAgICAgICAgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLCBDQUlS
T19PUEVSQVRPUl9TT1VSQ0UpOworICAgICAgICAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCBjbGlw
UmVjdC0+eCwgY2xpcFJlY3QtPnksIGNsaXBSZWN0LT53aWR0aCwgY2xpcFJlY3QtPmhlaWdodCk7
CisgICAgICAgICAgICBjYWlyb19maWxsKGNyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
IChzdXJmYWNlKSB7CiAgICAgICAgIC8vIFRoZSBzdXJmYWNlIGNhbiBiZSBtb2RpZmllZCBieSB0
aGUgd2ViIHByb2Nlc3MgYXQgYW55IHRpbWUsIHNvIHdlIG1hcmsgaXQKICAgICAgICAgLy8gYXMg
ZGlydHkgdG8gZW5zdXJlIHdlIGFsd2F5cyByZW5kZXIgdGhlIHVwZGF0ZWQgY29udGVudHMgYXMg
c29vbiBhcyBwb3NzaWJsZS4KICAgICAgICAgY2Fpcm9fc3VyZmFjZV9tYXJrX2RpcnR5KHN1cmZh
Y2UpOwpAQCAtNjE2LDEwICs2MjEsMTAgQEAgc3RhdGljIGJvb2wgd2Via2l0V2ViVmlld1JlbmRl
ckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSZXN1bHRzKFdlYktpdFdlYlZpZXdCYXNlKgogICAgICAg
ICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IsIHN1cmZhY2UsIDAsIDApOwogICAgICAgICBj
YWlyb19zZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9SX09WRVIpOwogICAgICAgICBjYWly
b19maWxsKGNyKTsKLQotICAgICAgICBjYWlyb19yZXN0b3JlKGNyKTsKICAgICB9CiAKKyAgICBj
YWlyb19yZXN0b3JlKGNyKTsKKwogICAgIHJldHVybiB0cnVlOwogI2Vsc2UKICAgICBVTlVTRURf
UEFSQU0od2ViVmlld0Jhc2UpOwpAQCAtNzE3LDIyICs3MjIsOCBAQCBzdGF0aWMgdm9pZCB3ZWJr
aXRXZWJWaWV3QmFzZVNpemVBbGxvY2F0ZShHdGtXaWRnZXQqIHdpZGdldCwgR3RrQWxsb2NhdGlv
biogYWxsbwogICAgICAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUocHJpdi0+YXV0aGVudGlj
YXRpb25EaWFsb2csICZjaGlsZEFsbG9jYXRpb24pOwogICAgIH0KIAotICAgIERyYXdpbmdBcmVh
UHJveHlJbXBsKiBkcmF3aW5nQXJlYSA9IHN0YXRpY19jYXN0PERyYXdpbmdBcmVhUHJveHlJbXBs
Kj4ocHJpdi0+cGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpKTsKLSAgICBpZiAoIWRyYXdpbmdBcmVh
KQotICAgICAgICByZXR1cm47Ci0KLQotI2lmIFVTRShSRURJUkVDVEVEX1hDT01QT1NJVEVfV0lO
RE9XKQotICAgIGlmIChwcml2LT5yZWRpcmVjdGVkV2luZG93ICYmIGRyYXdpbmdBcmVhLT5pc0lu
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSkgewotICAgICAgICAvLyBXZSBkb24ndCB1c2Ug
d2Via2l0V2ViVmlld0Jhc2VSZXNpemVSZWRpcmVjdGVkV2luZG93IGhlcmUsIGJlY2F1c2Ugd2Ug
d2FudCB0byB1cGRhdGUgdGhlCi0gICAgICAgIC8vIHJlZGlyZWN0ZWQgd2luZG93IHNpemUgYmVm
b3JlIHRoZSBkcmF3aW5nIGFyZWEsIGJlY2F1c2Ugb24gcmVzaXplIHRoZSBkcmF3aW5nIGFyZWEg
c2VuZHMKLSAgICAgICAgLy8gdGhlIFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlIG1lc3NhZ2UgdG8g
dGhlIHdlYiBwcm9jZXNzIGFuZCB3YWl0cyBmb3IgaXRzIHJlcGx5LiBXZSB3YW50Ci0gICAgICAg
IC8vIHRoZSB3ZWIgcHJvY2VzcyB0byB1c2UgdGhlIG5ldyB4d2luZG93IHNpemUgd2hlbiBVcGRh
dGVCYWNraW5nU3RvcmVTdGF0ZSBtZXNzYWdlIGFycml2ZXMuCi0gICAgICAgIHByaXYtPnJlZGly
ZWN0ZWRXaW5kb3ctPnJlc2l6ZSh2aWV3UmVjdC5zaXplKCkpOwotICAgIH0KLSNlbmRpZgotCi0g
ICAgZHJhd2luZ0FyZWEtPnNldFNpemUodmlld1JlY3Quc2l6ZSgpLCBJbnRTaXplKCksIEludFNp
emUoKSk7CisgICAgaWYgKERyYXdpbmdBcmVhUHJveHlJbXBsKiBkcmF3aW5nQXJlYSA9IHN0YXRp
Y19jYXN0PERyYXdpbmdBcmVhUHJveHlJbXBsKj4ocHJpdi0+cGFnZVByb3h5LT5kcmF3aW5nQXJl
YSgpKSkKKyAgICAgICAgZHJhd2luZ0FyZWEtPnNldFNpemUodmlld1JlY3Quc2l6ZSgpLCBJbnRT
aXplKCksIEludFNpemUoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlR2V0
UHJlZmVycmVkV2lkdGgoR3RrV2lkZ2V0KiB3aWRnZXQsIGdpbnQqIG1pbmltdW1TaXplLCBnaW50
KiBuYXR1cmFsU2l6ZSkKQEAgLTEyODQsMTAgKzEyNzUsNiBAQCBXZWJQYWdlUHJveHkqIHdlYmtp
dFdlYlZpZXdCYXNlR2V0UGFnZShXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2Up
CiAjaWYgSEFWRShHVEtfU0NBTEVfRkFDVE9SKQogc3RhdGljIHZvaWQgZGV2aWNlU2NhbGVGYWN0
b3JDaGFuZ2VkKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJraXRXZWJWaWV3QmFzZSkKIHsKLSNpZiBV
U0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKLSAgICBpZiAod2Via2l0V2ViVmlld0Jh
c2UtPnByaXYtPnJlZGlyZWN0ZWRXaW5kb3cpCi0gICAgICAgIHdlYmtpdFdlYlZpZXdCYXNlUmVz
aXplUmVkaXJlY3RlZFdpbmRvdyh3ZWJraXRXZWJWaWV3QmFzZSk7Ci0jZW5kaWYKICAgICB3ZWJr
aXRXZWJWaWV3QmFzZS0+cHJpdi0+cGFnZVByb3h5LT5zZXRJbnRyaW5zaWNEZXZpY2VTY2FsZUZh
Y3RvcihndGtfd2lkZ2V0X2dldF9zY2FsZV9mYWN0b3IoR1RLX1dJREdFVCh3ZWJraXRXZWJWaWV3
QmFzZSkpKTsKIH0KICNlbmRpZiAvLyBIQVZFKEdUS19TQ0FMRV9GQUNUT1IpCkBAIC0xNTc3LDM3
ICsxNTY0LDE5IEBAIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VSZXNldENsaWNrQ291bnRlcihXZWJL
aXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2UpCiAgICAgd2Via2l0V2ViVmlld0Jhc2Ut
PnByaXYtPmNsaWNrQ291bnRlci5yZXNldCgpOwogfQogCi0jaWYgVVNFKFJFRElSRUNURURfWENP
TVBPU0lURV9XSU5ET1cpCi1zdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUNsZWFyUmVkaXJl
Y3RlZFdpbmRvd1Nvb24oV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdlYlZpZXdCYXNlKQotewot
ICAgIHN0YXRpYyBjb25zdCBkb3VibGUgY2xlYXJSZWRpcmVjdGVkV2luZG93U29vbkRlbGF5ID0g
MjsKLSAgICB3ZWJraXRXZWJWaWV3QmFzZS0+cHJpdi0+Y2xlYXJSZWRpcmVjdGVkV2luZG93U29v
blRpbWVyLnN0YXJ0T25lU2hvdChjbGVhclJlZGlyZWN0ZWRXaW5kb3dTb29uRGVsYXkpOwotfQot
I2VuZGlmCi0KLXZvaWQgd2Via2l0V2ViVmlld0Jhc2VXaWxsRW50ZXJBY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kZShXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2UpCit2b2lkIHdl
YmtpdFdlYlZpZXdCYXNlRW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShXZWJLaXRXZWJW
aWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2UsIGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVy
VHJlZUNvbnRleHQpCiB7CiAjaWYgVVNFKFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCi0g
ICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2Via2l0V2ViVmlld0Jhc2UtPnBy
aXY7Ci0gICAgaWYgKCFwcml2LT5yZWRpcmVjdGVkV2luZG93KQotICAgICAgICByZXR1cm47Ci0g
ICAgRHJhd2luZ0FyZWFQcm94eUltcGwqIGRyYXdpbmdBcmVhID0gc3RhdGljX2Nhc3Q8RHJhd2lu
Z0FyZWFQcm94eUltcGwqPihwcml2LT5wYWdlUHJveHktPmRyYXdpbmdBcmVhKCkpOwotICAgIGlm
ICghZHJhd2luZ0FyZWEpCi0gICAgICAgIHJldHVybjsKLQotICAgIHdlYmtpdFdlYlZpZXdCYXNl
UmVzaXplUmVkaXJlY3RlZFdpbmRvdyh3ZWJraXRXZWJWaWV3QmFzZSk7Ci0KLSAgICAvLyBDbGVh
ciB0aGUgcmVkaXJlY3RlZCB3aW5kb3cgaWYgd2UgZG9uJ3QgZW50ZXIgQUMgbW9kZSBpbiB0aGUg
ZW5kLgotICAgIHdlYmtpdFdlYlZpZXdCYXNlQ2xlYXJSZWRpcmVjdGVkV2luZG93U29vbih3ZWJr
aXRXZWJWaWV3QmFzZSk7CisgICAgd2Via2l0V2ViVmlld0Jhc2VTZXRBY2NlbGVyYXRlZENvbXBv
c2l0aW5nUGl4bWFwKHdlYmtpdFdlYlZpZXdCYXNlLCBsYXllclRyZWVDb250ZXh0LmNvbnRleHRJ
RCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTSh3ZWJraXRXZWJWaWV3QmFzZSk7CiAjZW5kaWYK
IH0KIAotdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01v
ZGUoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdlYlZpZXdCYXNlKQordm9pZCB3ZWJraXRXZWJW
aWV3QmFzZVVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKFdlYktpdFdlYlZpZXdCYXNl
KiB3ZWJraXRXZWJWaWV3QmFzZSwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgbGF5ZXJUcmVlQ29u
dGV4dCkKIHsKICNpZiBVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKLSAgICB3ZWJr
aXRXZWJWaWV3QmFzZS0+cHJpdi0+Y2xlYXJSZWRpcmVjdGVkV2luZG93U29vblRpbWVyLnN0b3Ao
KTsKKyAgICB3ZWJraXRXZWJWaWV3QmFzZVNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdQaXhtYXAo
d2Via2l0V2ViVmlld0Jhc2UsIGxheWVyVHJlZUNvbnRleHQuY29udGV4dElEKTsKICNlbHNlCiAg
ICAgVU5VU0VEX1BBUkFNKHdlYmtpdFdlYlZpZXdCYXNlKTsKICNlbmRpZgpAQCAtMTYxNiwxMCAr
MTU4NSw3IEBAIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VFbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJraXRXCiB2b2lkIHdlYmtpdFdlYlZpZXdCYXNl
RXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJraXRX
ZWJWaWV3QmFzZSkKIHsKICNpZiBVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKLSAg
ICAvLyBSZXNpemUgdGhlIHdpbmRvdyBsYXRlciB0byBlbnN1cmUgd2UgaGF2ZSBhbHJlYWR5IHJl
bmRlcmVkIHRoZQotICAgIC8vIG5vbiBjb21wb3NpdGVkIGNvbnRlbnRzIGFuZCBhdm9pZCBmbGlj
a2VyaW5nLiBXZSBjYW4gYWxzbyBhdm9pZCB0aGUKLSAgICAvLyB3aW5kb3cgcmVzaXplIGVudGly
ZWx5IGlmIHdlIHN3aXRjaCBiYWNrIHRvIEFDIG1vZGUgcXVpY2tseS4KLSAgICB3ZWJraXRXZWJW
aWV3QmFzZUNsZWFyUmVkaXJlY3RlZFdpbmRvd1Nvb24od2Via2l0V2ViVmlld0Jhc2UpOworICAg
IHdlYmtpdFdlYlZpZXdCYXNlU2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1BpeG1hcCh3ZWJraXRX
ZWJWaWV3QmFzZSwgMCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTSh3ZWJraXRXZWJWaWV3QmFz
ZSk7CiAjZW5kaWYKQEAgLTE2MzAsMjIgKzE1OTYsMTggQEAgdm9pZCB3ZWJraXRXZWJWaWV3QmFz
ZURpZFJlbGF1bmNoV2ViUHJvY2VzcyhXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jh
c2UKICAgICAvLyBRdWV1ZSBhIHJlc2l6ZSB0byBlbnN1cmUgdGhlIG5ldyBEcmF3aW5nQXJlYVBy
b3h5IGlzIHJlc2l6ZWQuCiAgICAgZ3RrX3dpZGdldF9xdWV1ZV9yZXNpemVfbm9fcmVkcmF3KEdU
S19XSURHRVQod2Via2l0V2ViVmlld0Jhc2UpKTsKIAotI2lmIFBMQVRGT1JNKFgxMSkgJiYgVVNF
KFRFWFRVUkVfTUFQUEVSKQorI2lmIFBMQVRGT1JNKFgxMSkgJiYgVVNFKFRFWFRVUkVfTUFQUEVS
KSAmJiAhVVNFKFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCiAgICAgaWYgKFBsYXRmb3Jt
RGlzcGxheTo6c2hhcmVkRGlzcGxheSgpLnR5cGUoKSAhPSBQbGF0Zm9ybURpc3BsYXk6OlR5cGU6
OlgxMSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBw
cml2ID0gd2Via2l0V2ViVmlld0Jhc2UtPnByaXY7CiAgICAgRHJhd2luZ0FyZWFQcm94eUltcGwq
IGRyYXdpbmdBcmVhID0gc3RhdGljX2Nhc3Q8RHJhd2luZ0FyZWFQcm94eUltcGwqPihwcml2LT5w
YWdlUHJveHktPmRyYXdpbmdBcmVhKCkpOwogICAgIEFTU0VSVChkcmF3aW5nQXJlYSk7Ci0jaWYg
VVNFKFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCi0gICAgaWYgKCFwcml2LT5yZWRpcmVj
dGVkV2luZG93KQotICAgICAgICByZXR1cm47Ci0gICAgdWludDY0X3Qgd2luZG93SUQgPSBwcml2
LT5yZWRpcmVjdGVkV2luZG93LT53aW5kb3dJRCgpOwotI2Vsc2UKKwogICAgIGlmICghZ3RrX3dp
ZGdldF9nZXRfcmVhbGl6ZWQoR1RLX1dJREdFVCh3ZWJraXRXZWJWaWV3QmFzZSkpKQogICAgICAg
ICByZXR1cm47CisKICAgICB1aW50NjRfdCB3aW5kb3dJRCA9IEdES19XSU5ET1dfWElEKGd0a193
aWRnZXRfZ2V0X3dpbmRvdyhHVEtfV0lER0VUKHdlYmtpdFdlYlZpZXdCYXNlKSkpOwotI2VuZGlm
CiAgICAgZHJhd2luZ0FyZWEtPnNldE5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyh3
aW5kb3dJRCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTSh3ZWJraXRXZWJWaWV3QmFzZSk7CkBA
IC0xNjU0LDcgKzE2MTYsOSBAQCB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlRGlkUmVsYXVuY2hXZWJQ
cm9jZXNzKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJraXRXZWJWaWV3QmFzZQogCiB2b2lkIHdlYmtp
dFdlYlZpZXdCYXNlUGFnZUNsb3NlZChXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jh
c2UpCiB7Ci0jaWYgUExBVEZPUk0oWDExKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisjaWYgVVNF
KFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCisgICAgd2Via2l0V2ViVmlld0Jhc2VTZXRB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nUGl4bWFwKHdlYmtpdFdlYlZpZXdCYXNlLCAwKTsKKyNlbGlm
IFBMQVRGT1JNKFgxMSkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQogICAgIGlmIChQbGF0Zm9ybURp
c3BsYXk6OnNoYXJlZERpc3BsYXkoKS50eXBlKCkgIT0gUGxhdGZvcm1EaXNwbGF5OjpUeXBlOjpY
MTEpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTY2NSw5ICsxNjI5LDUgQEAgdm9pZCB3ZWJraXRX
ZWJWaWV3QmFzZVBhZ2VDbG9zZWQoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdlYlZpZXdCYXNl
KQogICAgIERyYXdpbmdBcmVhUHJveHlJbXBsKiBkcmF3aW5nQXJlYSA9IHN0YXRpY19jYXN0PERy
YXdpbmdBcmVhUHJveHlJbXBsKj4ocHJpdi0+cGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpKTsKICAg
ICBBU1NFUlQoZHJhd2luZ0FyZWEpOwogICAgIGRyYXdpbmdBcmVhLT5kZXN0cm95TmF0aXZlU3Vy
ZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKCk7Ci0KLSNpZiBVU0UoUkVESVJFQ1RFRF9YQ09NUE9T
SVRFX1dJTkRPVykKLSAgICBwcml2LT5yZWRpcmVjdGVkV2luZG93ID0gbnVsbHB0cjsKICNlbmRp
ZgotI2VuZGlmIC8vIFBMQVRGT1JNKFgxMSkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jh
c2VQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJW
aWV3QmFzZVByaXZhdGUuaAppbmRleCBkOWFjYjk4Li42ZjViYTlkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVBy
aXZhdGUuaApAQCAtNzEsOCArNzEsOCBAQCB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlQWRkQXV0aGVu
dGljYXRpb25EaWFsb2coV2ViS2l0V2ViVmlld0Jhc2UqLCBHdGtXaWRnZXQqIGF1dAogdm9pZCB3
ZWJraXRXZWJWaWV3QmFzZUNhbmNlbEF1dGhlbnRpY2F0aW9uRGlhbG9nKFdlYktpdFdlYlZpZXdC
YXNlKik7CiB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlQWRkV2ViSW5zcGVjdG9yKFdlYktpdFdlYlZp
ZXdCYXNlKiwgR3RrV2lkZ2V0KiBpbnNwZWN0b3IsIFdlYktpdDo6QXR0YWNobWVudFNpZGUpOwog
dm9pZCB3ZWJraXRXZWJWaWV3QmFzZVJlc2V0Q2xpY2tDb3VudGVyKFdlYktpdFdlYlZpZXdCYXNl
Kik7Ci12b2lkIHdlYmtpdFdlYlZpZXdCYXNlV2lsbEVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z01vZGUoV2ViS2l0V2ViVmlld0Jhc2UqKTsKLXZvaWQgd2Via2l0V2ViVmlld0Jhc2VFbnRlckFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKFdlYktpdFdlYlZpZXdCYXNlKik7Cit2b2lkIHdlYmtp
dFdlYlZpZXdCYXNlRW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShXZWJLaXRXZWJWaWV3
QmFzZSosIGNvbnN0IFdlYktpdDo6TGF5ZXJUcmVlQ29udGV4dCYpOwordm9pZCB3ZWJraXRXZWJW
aWV3QmFzZVVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKFdlYktpdFdlYlZpZXdCYXNl
KiwgY29uc3QgV2ViS2l0OjpMYXllclRyZWVDb250ZXh0Jik7CiB2b2lkIHdlYmtpdFdlYlZpZXdC
YXNlRXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKFdlYktpdFdlYlZpZXdCYXNlKik7CiB2
b2lkIHdlYmtpdFdlYlZpZXdCYXNlRGlkUmVsYXVuY2hXZWJQcm9jZXNzKFdlYktpdFdlYlZpZXdC
YXNlKik7CiB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlUGFnZUNsb3NlZChXZWJLaXRXZWJWaWV3QmFz
ZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJv
eHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmgKaW5kZXgg
NDEzZmUzZi4uNjBkNzljNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Ry
YXdpbmdBcmVhUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0Fy
ZWFQcm94eS5oCkBAIC0xMzAsNyArMTMwLDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQg
ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSh1aW50NjRfdCAvKiBiYWNraW5nU3RvcmVT
dGF0ZUlEICovLCBjb25zdCBMYXllclRyZWVDb250ZXh0JikgeyB9CiAgICAgdmlydHVhbCB2b2lk
IGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSh1aW50NjRfdCAvKiBiYWNraW5nU3RvcmVT
dGF0ZUlEICovLCBjb25zdCBVcGRhdGVJbmZvJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKHVpbnQ2NF90IC8qIGJhY2tpbmdTdG9yZVN0YXRl
SUQgKi8sIGNvbnN0IExheWVyVHJlZUNvbnRleHQmKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgd2ls
bEVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUodWludDY0X3QgLyogYmFja2luZ1N0b3Jl
U3RhdGVJRCAqLykgeyB9CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdmlydHVhbCB2b2lkIGRp
ZFVwZGF0ZUdlb21ldHJ5KCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGludHJpbnNpY0NvbnRlbnRT
aXplRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSB7IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5Lm1lc3NhZ2VzLmluIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkubWVzc2FnZXMuaW4KaW5kZXgg
OGQ1MWNkZS4uNDczNjBlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Ry
YXdpbmdBcmVhUHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0RyYXdpbmdBcmVhUHJveHkubWVzc2FnZXMuaW4KQEAgLTI2LDcgKzI2LDYgQEAgbWVzc2FnZXMg
LT4gRHJhd2luZ0FyZWFQcm94eSB7CiAgICAgRW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9k
ZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBXZWJLaXQ6OkxheWVyVHJlZUNvbnRleHQg
Y29udGV4dCkKICAgICBFeGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUodWludDY0X3QgYmFj
a2luZ1N0b3JlU3RhdGVJRCwgV2ViS2l0OjpVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCiAgICAgVXBk
YXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUodWludDY0X3QgYmFja2luZ1N0b3JlU3RhdGVJ
RCwgV2ViS2l0OjpMYXllclRyZWVDb250ZXh0IGNvbnRleHQpCi0gICAgV2lsbEVudGVyQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGUodWludDY0X3QgYmFja2luZ1N0b3JlU3RhdGVJRCkKIAogI2lm
IFBMQVRGT1JNKENPQ09BKQogICAgIC8vIFVzZWQgYnkgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2lu
Z0FyZWFQcm94eS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5n
QXJlYVByb3h5SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQ
cm94eUltcGwuY3BwCmluZGV4IDIwNjkzMjUuLjI0NzYyOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcApAQCAtMTU3LDE1ICsxNTcs
MTYgQEAgdm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6ZGlkVXBkYXRlQmFja2luZ1N0b3JlU3Rh
dGUodWludDY0X3QgYmFja2luZ1N0b3JlU3RhdGUKICAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNz
KCkucmVzcG9uc2l2ZW5lc3NUaW1lcigpLnN0b3AoKTsKIAogICAgIGlmIChsYXllclRyZWVDb250
ZXh0ICE9IG1fbGF5ZXJUcmVlQ29udGV4dCkgewotICAgICAgICBpZiAoIW1fbGF5ZXJUcmVlQ29u
dGV4dC5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKGxheWVyVHJlZUNvbnRleHQuaXNFbXB0eSgp
ICYmICFtX2xheWVyVHJlZUNvbnRleHQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBleGl0QWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKICAgICAgICAgICAgIEFTU0VSVChtX2xheWVyVHJl
ZUNvbnRleHQuaXNFbXB0eSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghbGF5ZXJUcmVl
Q29udGV4dC5pc0VtcHR5KCkpIHsKKyAgICAgICAgfSBlbHNlIGlmICghbGF5ZXJUcmVlQ29udGV4
dC5pc0VtcHR5KCkgJiYgbV9sYXllclRyZWVDb250ZXh0LmlzRW1wdHkoKSkgewogICAgICAgICAg
ICAgZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShsYXllclRyZWVDb250ZXh0KTsKICAg
ICAgICAgICAgIEFTU0VSVChsYXllclRyZWVDb250ZXh0ID09IG1fbGF5ZXJUcmVlQ29udGV4dCk7
Ci0gICAgICAgIH0gICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHVw
ZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGxheWVyVHJlZUNvbnRleHQpOworICAgICAg
ICAgICAgQVNTRVJUKGxheWVyVHJlZUNvbnRleHQgPT0gbV9sYXllclRyZWVDb250ZXh0KTsKKyAg
ICAgICAgfQogICAgIH0KIAogICAgIGlmIChtX25leHRCYWNraW5nU3RvcmVTdGF0ZUlEICE9IG1f
Y3VycmVudEJhY2tpbmdTdG9yZVN0YXRlSUQpCkBAIC0xNzMsNyArMTc0LDcgQEAgdm9pZCBEcmF3
aW5nQXJlYVByb3h5SW1wbDo6ZGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUodWludDY0X3QgYmFj
a2luZ1N0b3JlU3RhdGUKICAgICBlbHNlIHsKICAgICAgICAgbV9oYXNSZWNlaXZlZEZpcnN0VXBk
YXRlID0gdHJ1ZTsKIAotI2lmIFVTRShURVhUVVJFX01BUFBFUikgJiYgUExBVEZPUk0oR1RLKQor
I2lmIFVTRShURVhUVVJFX01BUFBFUikgJiYgUExBVEZPUk0oR1RLKSAmJiAhVVNFKFJFRElSRUNU
RURfWENPTVBPU0lURV9XSU5ET1cpCiAgICAgICAgIGlmIChtX3BlbmRpbmdOYXRpdmVTdXJmYWNl
SGFuZGxlRm9yQ29tcG9zaXRpbmcpIHsKICAgICAgICAgICAgIHNldE5hdGl2ZVN1cmZhY2VIYW5k
bGVGb3JDb21wb3NpdGluZyhtX3BlbmRpbmdOYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRp
bmcpOwogICAgICAgICAgICAgbV9wZW5kaW5nTmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0
aW5nID0gMDsKQEAgLTIyMSwxNSArMjIyLDYgQEAgdm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6
dXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUodWludDY0X3QgYmFja2luZ1N0b3IKICAg
ICB1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShsYXllclRyZWVDb250ZXh0KTsKIH0K
IAotdm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6d2lsbEVudGVyQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ01vZGUodWludDY0X3QgYmFja2luZ1N0b3JlU3RhdGVJRCkKLXsKLSAgICAvLyBXaWxsRW50
ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSBtZXNzYWdlIGlzIHNlbnQgd2hlbiB0aGUgTGF5
ZXJUcmVlSG9zdCBpcyBjcmVhdGVkIGluIHRoZSBXZWIgUHJvY2Vzcy4KLSAgICAvLyBUaGlzIGNh
biBoYXBwZW4gd2hpbGUgdGhlcmUncyBzdGlsbCBhIERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRl
IHBlbmRpbmcsIGluIHdoaWNoIGNhc2Ugd2UgYXJlIHJlY2VpdmluZwotICAgIC8vIGhlcmUgdGhl
IG5ldyBiYWNraW5nU3RvcmVTdGF0ZUlELCBidXQgbV9jdXJyZW50QmFja2luZ1N0b3JlU3RhdGVJ
RCBoYXNuJ3QgYmVlbiB1cGRhdGVkIHlldC4KLSAgICBBU1NFUlRfQVJHKGJhY2tpbmdTdG9yZVN0
YXRlSUQsIGJhY2tpbmdTdG9yZVN0YXRlSUQgPD0gbV9uZXh0QmFja2luZ1N0b3JlU3RhdGVJRCk7
Ci0gICAgbV93ZWJQYWdlUHJveHkud2lsbEVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUo
KTsKLX0KLQogdm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6aW5jb3Jwb3JhdGVVcGRhdGUoY29u
c3QgVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKIHsKICAgICBBU1NFUlQoIWlzSW5BY2NlbGVyYXRl
ZENvbXBvc2l0aW5nTW9kZSgpKTsKQEAgLTMxNSw3ICszMDcsNyBAQCB2b2lkIERyYXdpbmdBcmVh
UHJveHlJbXBsOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJl
ZUNvbnRleAogICAgIG1fd2ViUGFnZVByb3h5LmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01v
ZGUobGF5ZXJUcmVlQ29udGV4dCk7CiB9CiAKLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmIFBM
QVRGT1JNKEdUSykKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmIFBMQVRGT1JNKEdUSykgJiYg
IVVTRShSRURJUkVDVEVEX1hDT01QT1NJVEVfV0lORE9XKQogdm9pZCBEcmF3aW5nQXJlYVByb3h5
SW1wbDo6c2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKHVpbnQ2NF90IGhhbmRs
ZSkKIHsKICAgICBpZiAoIW1faGFzUmVjZWl2ZWRGaXJzdFVwZGF0ZSkgewpAQCAtMzUxLDggKzM0
Myw3IEBAIHZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OmV4aXRBY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZSgpCiAgICAgQVNTRVJUKGlzSW5BY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpKTsK
IAogICAgIG1fbGF5ZXJUcmVlQ29udGV4dCA9IExheWVyVHJlZUNvbnRleHQoKTsKLSAgICBpZiAo
IWFsd2F5c1VzZUNvbXBvc2l0aW5nKCkpCi0gICAgICAgIG1fd2ViUGFnZVByb3h5LmV4aXRBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpOworICAgIG1fd2ViUGFnZVByb3h5LmV4aXRBY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZSgpOwogfQogCiB2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjp1
cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0JiBs
YXllclRyZWVDb250ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Ry
YXdpbmdBcmVhUHJveHlJbXBsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0Fy
ZWFQcm94eUltcGwuaAppbmRleCA4ODE5YTk1Li4xZWQ2ZDAwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuaApAQCAtNDgsNyArNDgsNyBAQCBw
dWJsaWM6CiAKICAgICBib29sIGhhc1JlY2VpdmVkRmlyc3RVcGRhdGUoKSBjb25zdCB7IHJldHVy
biBtX2hhc1JlY2VpdmVkRmlyc3RVcGRhdGU7IH0KIAotI2lmIFVTRShURVhUVVJFX01BUFBFUikg
JiYgUExBVEZPUk0oR1RLKQorI2lmIFVTRShURVhUVVJFX01BUFBFUikgJiYgUExBVEZPUk0oR1RL
KSAmJiAhVVNFKFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCiAgICAgdm9pZCBzZXROYXRp
dmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcodWludDY0X3QpOwogICAgIHZvaWQgZGVzdHJv
eU5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZygpOwogI2VuZGlmCkBAIC02OSw3ICs2
OSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBlbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2Rl
KHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQsIGNvbnN0IExheWVyVHJlZUNvbnRleHQmKSBv
dmVycmlkZTsKICAgICB2b2lkIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSh1aW50NjRf
dCBiYWNraW5nU3RvcmVTdGF0ZUlELCBjb25zdCBVcGRhdGVJbmZvJikgb3ZlcnJpZGU7CiAgICAg
dm9pZCB1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSh1aW50NjRfdCBiYWNraW5nU3Rv
cmVTdGF0ZUlELCBjb25zdCBMYXllclRyZWVDb250ZXh0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3
aWxsRW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSh1aW50NjRfdCBiYWNraW5nU3RvcmVT
dGF0ZUlEKSBvdmVycmlkZTsKIAogICAgIHZvaWQgaW5jb3Jwb3JhdGVVcGRhdGUoY29uc3QgVXBk
YXRlSW5mbyYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNs
aWVudC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAppbmRleCBkMmFj
OTQ0Li4zNTgxYTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNs
aWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKQEAgLTIz
NSw3ICsyMzUsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGVudGVyQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250
ZXh0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB3aWxsRW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZSgpID0gMDsKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICB2aXJ0dWFsIHZvaWQgcGx1
Z2luRm9jdXNPcldpbmRvd0ZvY3VzQ2hhbmdlZCh1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElu
cHV0SWRlbnRpZmllciwgYm9vbCBwbHVnaW5IYXNGb2N1c0FuZFdpbmRvd0hhc0ZvY3VzKSA9IDA7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IDFjOTY3Y2Iu
LjczYjliNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBA
IC01NDY1LDExICs1NDY1LDYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnVwZGF0ZUFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWUKICAgICBtX3BhZ2VD
bGllbnQudXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUobGF5ZXJUcmVlQ29udGV4dCk7
CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojp3aWxsRW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5n
TW9kZSgpCi17Ci0gICAgbV9wYWdlQ2xpZW50LndpbGxFbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlKCk7Ci19Ci0KIHZvaWQgV2ViUGFnZVByb3h5OjpiYWNrRm9yd2FyZENsZWFyKCkKIHsK
ICAgICBtX2JhY2tGb3J3YXJkTGlzdC0+Y2xlYXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuaAppbmRleCA4ZDdkODE1Li45M2M1MWU4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC04MjQsNyArODI0LDYgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBlbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJl
ZUNvbnRleHQmKTsKICAgICB2aXJ0dWFsIHZvaWQgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdN
b2RlKCk7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2Rl
KGNvbnN0IExheWVyVHJlZUNvbnRleHQmKTsKLSAgICB2b2lkIHdpbGxFbnRlckFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdNb2RlKCk7CiAKICAgICBlbnVtIFVuZG9PclJlZG8geyBVbmRvLCBSZWRvIH07
CiAgICAgdm9pZCBhZGRFZGl0Q29tbWFuZChXZWJFZGl0Q29tbWFuZFByb3h5Kik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5oCmluZGV4IDMwNzdiZmQuLjY0MWYwN2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5oCkBAIC0yMjEsNyArMjIxLDYgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5
ZXJUcmVlQ29udGV4dCYpIG92ZXJyaWRlOwogICAgIHZvaWQgZXhpdEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdNb2RlKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCB1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxs
RW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpIG92ZXJyaWRlIHsgfQogCiAjaWYgRU5B
QkxFKEZVTExTQ1JFRU5fQVBJKQogICAgIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlDbGllbnQm
IGZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlDbGllbnQoKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRv
dy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4MjU5YzMuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRv
dy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyOTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiwyMDE0IElnYWxpYSBTLkwuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaCIKLQotI2lmIFVTRShSRURJ
UkVDVEVEX1hDT01QT1NJVEVfV0lORE9XKQotCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0j
aW5jbHVkZSA8V2ViQ29yZS9DYWlyb1V0aWxpdGllcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGxh
dGZvcm1EaXNwbGF5WDExLmg+Ci0jaW5jbHVkZSA8WDExL1hsaWIuaD4KLSNpbmNsdWRlIDxYMTEv
ZXh0ZW5zaW9ucy9YY29tcG9zaXRlLmg+Ci0jaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWGRhbWFn
ZS5oPgotI2luY2x1ZGUgPGNhaXJvLXhsaWIuaD4KLSNpbmNsdWRlIDxnZGsvZ2RreC5oPgotI2lu
Y2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLQotdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBYRGFtYWdlTm90aWZpZXIg
ewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFhEYW1hZ2VOb3RpZmllcik7Ci0gICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGludCBzX2RhbWFnZUV2ZW50
QmFzZTsKLQotICAgIFhEYW1hZ2VOb3RpZmllcigpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQg
YWRkKFdpbmRvdyB3aW5kb3csIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiYmIG5vdGlmeUZ1bmN0aW9u
KQotICAgIHsKLSAgICAgICAgaWYgKG1fbm90aWZ5RnVuY3Rpb25zLmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgIGdka193aW5kb3dfYWRkX2ZpbHRlcihudWxscHRyLCByZWludGVycHJldF9jYXN0PEdk
a0ZpbHRlckZ1bmM+KCZmaWx0ZXJYRGFtYWdlRXZlbnQpLCB0aGlzKTsKLSAgICAgICAgbV9ub3Rp
ZnlGdW5jdGlvbnMuYWRkKHdpbmRvdywgV1RGTW92ZShub3RpZnlGdW5jdGlvbikpOwotICAgIH0K
LQotICAgIHZvaWQgcmVtb3ZlKFdpbmRvdyB3aW5kb3cpCi0gICAgewotICAgICAgICBtX25vdGlm
eUZ1bmN0aW9ucy5yZW1vdmUod2luZG93KTsKLSAgICAgICAgaWYgKG1fbm90aWZ5RnVuY3Rpb25z
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGdka193aW5kb3dfcmVtb3ZlX2ZpbHRlcihudWxscHRy
LCByZWludGVycHJldF9jYXN0PEdka0ZpbHRlckZ1bmM+KCZmaWx0ZXJYRGFtYWdlRXZlbnQpLCB0
aGlzKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIEdka0ZpbHRlclJldHVybiBmaWx0
ZXJYRGFtYWdlRXZlbnQoR2RrWEV2ZW50KiBldmVudCwgR2RrRXZlbnQqLCBYRGFtYWdlTm90aWZp
ZXIqIG5vdGlmaWVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5vdGlmaWVyLT5maWx0ZXJYRXZl
bnQoc3RhdGljX2Nhc3Q8WEV2ZW50Kj4oZXZlbnQpKTsKLSAgICB9Ci0KLSAgICBHZGtGaWx0ZXJS
ZXR1cm4gZmlsdGVyWEV2ZW50KFhFdmVudCogZXZlbnQpIGNvbnN0Ci0gICAgewotICAgICAgICBp
ZiAoZXZlbnQtPnR5cGUgIT0gc19kYW1hZ2VFdmVudEJhc2UgKyBYRGFtYWdlTm90aWZ5KQotICAg
ICAgICAgICAgcmV0dXJuIEdES19GSUxURVJfQ09OVElOVUU7Ci0KLSAgICAgICAgWERhbWFnZU5v
dGlmeUV2ZW50KiBkYW1hZ2VFdmVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8WERhbWFnZU5vdGlmeUV2
ZW50Kj4oZXZlbnQpOwotICAgICAgICBpZiAoY29uc3QgYXV0byYgbm90aWZ5RnVuY3Rpb24gPSBt
X25vdGlmeUZ1bmN0aW9ucy5nZXQoZGFtYWdlRXZlbnQtPmRyYXdhYmxlKSkgewotICAgICAgICAg
ICAgbm90aWZ5RnVuY3Rpb24oKTsKLSAgICAgICAgICAgIFhEYW1hZ2VTdWJ0cmFjdChldmVudC0+
eGFueS5kaXNwbGF5LCBkYW1hZ2VFdmVudC0+ZGFtYWdlLCBOb25lLCBOb25lKTsKLSAgICAgICAg
ICAgIHJldHVybiBHREtfRklMVEVSX1JFTU9WRTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVy
biBHREtfRklMVEVSX0NPTlRJTlVFOwotICAgIH0KLQotICAgIEhhc2hNYXA8V2luZG93LCBzdGQ6
OmZ1bmN0aW9uPHZvaWQoKT4+IG1fbm90aWZ5RnVuY3Rpb25zOwotfTsKLQotaW50IFhEYW1hZ2VO
b3RpZmllcjo6c19kYW1hZ2VFdmVudEJhc2UgPSAwOwotCi1zdGF0aWMgWERhbWFnZU5vdGlmaWVy
JiB4RGFtYWdlTm90aWZpZXIoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxYRGFtYWdl
Tm90aWZpZXI+IG5vdGlmaWVyOwotICAgIHJldHVybiBub3RpZmllcjsKLX0KLQotc3RhdGljIGJv
b2wgc3VwcG9ydHNYRGFtYWdlQW5kWENvbXBvc2l0ZShHZGtXaW5kb3cqIHdpbmRvdykKLXsKLSAg
ICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOwotICAgIHN0YXRpYyBib29sIGhhc0V4
dGVuc2lvbnMgPSBmYWxzZTsKLQotICAgIGlmIChpbml0aWFsaXplZCkKLSAgICAgICAgcmV0dXJu
IGhhc0V4dGVuc2lvbnM7Ci0KLSAgICBpbml0aWFsaXplZCA9IHRydWU7Ci0gICAgRGlzcGxheSog
ZGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQTEFZKGdka193aW5kb3dfZ2V0X2Rpc3BsYXkod2lu
ZG93KSk7Ci0KLSAgICBpbnQgZXJyb3JCYXNlOwotICAgIGlmICghWERhbWFnZVF1ZXJ5RXh0ZW5z
aW9uKGRpc3BsYXksICZYRGFtYWdlTm90aWZpZXI6OnNfZGFtYWdlRXZlbnRCYXNlLCAmZXJyb3JC
YXNlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaW50IGV2ZW50QmFzZTsKLSAgICBp
ZiAoIVhDb21wb3NpdGVRdWVyeUV4dGVuc2lvbihkaXNwbGF5LCAmZXZlbnRCYXNlLCAmZXJyb3JC
YXNlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gV2UgbmVlZCB0byBzdXBwb3J0
IFhDb21wb3NpdGUgdmVyc2lvbiAwLjIuCi0gICAgaW50IG1ham9yLCBtaW5vcjsKLSAgICBYQ29t
cG9zaXRlUXVlcnlWZXJzaW9uKGRpc3BsYXksICZtYWpvciwgJm1pbm9yKTsKLSAgICBpZiAobWFq
b3IgPCAwIHx8ICghbWFqb3IgJiYgbWlub3IgPCAyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgaGFzRXh0ZW5zaW9ucyA9IHRydWU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0ZDo6
dW5pcXVlX3B0cjxSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdz4gUmVkaXJlY3RlZFhDb21wb3Np
dGVXaW5kb3c6OmNyZWF0ZShXZWJQYWdlUHJveHkmIHdlYlBhZ2UsIGNvbnN0IEludFNpemUmIGlu
aXRpYWxTaXplLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4mJiBkYW1hZ2VOb3RpZnkpCi17Ci0gICAg
R2RrV2luZG93KiBwYXJlbnRXaW5kb3cgPSBndGtfd2lkZ2V0X2dldF9wYXJlbnRfd2luZG93KHdl
YlBhZ2Uudmlld1dpZGdldCgpKTsKLSAgICBBU1NFUlQoR0RLX0lTX1dJTkRPVyhwYXJlbnRXaW5k
b3cpKTsKLSAgICBpZiAoIXN1cHBvcnRzWERhbWFnZUFuZFhDb21wb3NpdGUocGFyZW50V2luZG93
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxS
ZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdz4obmV3IFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93
KHdlYlBhZ2UsIGluaXRpYWxTaXplLCBXVEZNb3ZlKGRhbWFnZU5vdGlmeSkpKTsKLX0KLQotUmVk
aXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KFdlYlBh
Z2VQcm94eSYgd2ViUGFnZSwgY29uc3QgSW50U2l6ZSYgaW5pdGlhbFNpemUsIHN0ZDo6ZnVuY3Rp
b248dm9pZCgpPiYmIGRhbWFnZU5vdGlmeSkKLSAgICA6IG1fd2ViUGFnZSh3ZWJQYWdlKQotICAg
ICwgbV9kaXNwbGF5KEdES19ESVNQTEFZX1hESVNQTEFZKGdka193aW5kb3dfZ2V0X2Rpc3BsYXko
Z3RrX3dpZGdldF9nZXRfcGFyZW50X3dpbmRvdyh3ZWJQYWdlLnZpZXdXaWRnZXQoKSkpKSkKLSAg
ICAsIG1fc2l6ZShpbml0aWFsU2l6ZSkKLXsKLSAgICBtX3NpemUuc2NhbGUobV93ZWJQYWdlLmRl
dmljZVNjYWxlRmFjdG9yKCkpOwotCi0gICAgQVNTRVJUKGRvd25jYXN0PFBsYXRmb3JtRGlzcGxh
eVgxMT4oUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5KCkpLm5hdGl2ZSgpID09IG1fZGlz
cGxheSk7Ci0gICAgU2NyZWVuKiBzY3JlZW4gPSBEZWZhdWx0U2NyZWVuT2ZEaXNwbGF5KG1fZGlz
cGxheSk7Ci0KLSAgICBHZGtWaXN1YWwqIHZpc3VhbCA9IGdka193aW5kb3dfZ2V0X3Zpc3VhbChn
dGtfd2lkZ2V0X2dldF9wYXJlbnRfd2luZG93KHdlYlBhZ2Uudmlld1dpZGdldCgpKSk7Ci0gICAg
WFVuaXF1ZUNvbG9ybWFwIGNvbG9ybWFwKFhDcmVhdGVDb2xvcm1hcChtX2Rpc3BsYXksIFJvb3RX
aW5kb3dPZlNjcmVlbihzY3JlZW4pLCBHREtfVklTVUFMX1hWSVNVQUwodmlzdWFsKSwgQWxsb2NO
b25lKSk7Ci0KLSAgICAvLyBUaGlzIGlzIGJhc2VkIG9uIGNvZGUgZnJvbSBDaHJvbWl1bTogc3Jj
L2NvbnRlbnQvY29tbW9uL2dwdS9pbWFnZV90cmFuc3BvcnRfc3VyZmFjZV9saW51eC5jYwotICAg
IFhTZXRXaW5kb3dBdHRyaWJ1dGVzIHdpbmRvd0F0dHJpYnV0ZXM7Ci0gICAgd2luZG93QXR0cmli
dXRlcy5vdmVycmlkZV9yZWRpcmVjdCA9IFRydWU7Ci0gICAgd2luZG93QXR0cmlidXRlcy5jb2xv
cm1hcCA9IGNvbG9ybWFwLmdldCgpOwotCi0gICAgLy8gQ1dCb3JkZXJQaXhlbCBtdXN0IGJlIHBy
ZXNlbnQgd2hlbiB0aGUgZGVwdGggZG9lc24ndCBtYXRjaCB0aGUgcGFyZW50J3Mgb25lLgotICAg
IC8vIFNlZSBodHRwOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcveG9yZy94c2VydmVyL3RyZWUvZGl4
L3dpbmRvdy5jP2lkPXhvcmctc2VydmVyLTEuMTYuMCNuNzAzLgotICAgIHdpbmRvd0F0dHJpYnV0
ZXMuYm9yZGVyX3BpeGVsID0gMDsKLQotICAgIG1fcGFyZW50V2luZG93ID0gWENyZWF0ZVdpbmRv
dyhtX2Rpc3BsYXksCi0gICAgICAgIFJvb3RXaW5kb3dPZlNjcmVlbihzY3JlZW4pLAotICAgICAg
ICBXaWR0aE9mU2NyZWVuKHNjcmVlbikgKyAxLCAwLCAxLCAxLAotICAgICAgICAwLAotICAgICAg
ICBnZGtfdmlzdWFsX2dldF9kZXB0aCh2aXN1YWwpLAotICAgICAgICBJbnB1dE91dHB1dCwKLSAg
ICAgICAgR0RLX1ZJU1VBTF9YVklTVUFMKHZpc3VhbCksCi0gICAgICAgIENXT3ZlcnJpZGVSZWRp
cmVjdCB8IENXQ29sb3JtYXAgfCBDV0JvcmRlclBpeGVsLAotICAgICAgICAmd2luZG93QXR0cmli
dXRlcyk7Ci0gICAgWE1hcFdpbmRvdyhtX2Rpc3BsYXksIG1fcGFyZW50V2luZG93LmdldCgpKTsK
LQotICAgIHdpbmRvd0F0dHJpYnV0ZXMuZXZlbnRfbWFzayA9IFN0cnVjdHVyZU5vdGlmeU1hc2s7
Ci0gICAgd2luZG93QXR0cmlidXRlcy5vdmVycmlkZV9yZWRpcmVjdCA9IEZhbHNlOwotICAgIC8v
IENyZWF0ZSB0aGUgd2luZG93IG9mIGF0IGxhc3QgMXgxIHNpbmNlIFggZG9lc24ndCBhbGxvdyB0
byBjcmVhdGUgZW1wdHkgd2luZG93cy4KLSAgICBtX3dpbmRvdyA9IFhDcmVhdGVXaW5kb3cobV9k
aXNwbGF5LAotICAgICAgICBtX3BhcmVudFdpbmRvdy5nZXQoKSwKLSAgICAgICAgMCwgMCwKLSAg
ICAgICAgc3RkOjptYXgoMSwgbV9zaXplLndpZHRoKCkpLAotICAgICAgICBzdGQ6Om1heCgxLCBt
X3NpemUuaGVpZ2h0KCkpLAotICAgICAgICAwLAotICAgICAgICBDb3B5RnJvbVBhcmVudCwKLSAg
ICAgICAgSW5wdXRPdXRwdXQsCi0gICAgICAgIENvcHlGcm9tUGFyZW50LAotICAgICAgICBDV0V2
ZW50TWFzaywKLSAgICAgICAgJndpbmRvd0F0dHJpYnV0ZXMpOwotICAgIFhNYXBXaW5kb3cobV9k
aXNwbGF5LCBtX3dpbmRvdy5nZXQoKSk7Ci0KLSAgICB4RGFtYWdlTm90aWZpZXIoKS5hZGQobV93
aW5kb3cuZ2V0KCksIFdURk1vdmUoZGFtYWdlTm90aWZ5KSk7Ci0KLSAgICB3aGlsZSAoMSkgewot
ICAgICAgICBYRXZlbnQgZXZlbnQ7Ci0gICAgICAgIFhXaW5kb3dFdmVudChtX2Rpc3BsYXksIG1f
d2luZG93LmdldCgpLCBTdHJ1Y3R1cmVOb3RpZnlNYXNrLCAmZXZlbnQpOwotICAgICAgICBpZiAo
ZXZlbnQudHlwZSA9PSBNYXBOb3RpZnkgJiYgZXZlbnQueG1hcC53aW5kb3cgPT0gbV93aW5kb3cu
Z2V0KCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgWFNlbGVjdElucHV0KG1fZGlz
cGxheSwgbV93aW5kb3cuZ2V0KCksIE5vRXZlbnRNYXNrKTsKLSAgICBYQ29tcG9zaXRlUmVkaXJl
Y3RXaW5kb3cobV9kaXNwbGF5LCBtX3dpbmRvdy5nZXQoKSwgQ29tcG9zaXRlUmVkaXJlY3RNYW51
YWwpOwotICAgIGlmICghbV9zaXplLmlzRW1wdHkoKSkKLSAgICAgICAgY3JlYXRlTmV3UGl4YW1w
QW5kUGl4YW1wU3VyZmFjZSgpOwotICAgIG1fZGFtYWdlID0gWERhbWFnZUNyZWF0ZShtX2Rpc3Bs
YXksIG1fd2luZG93LmdldCgpLCBYRGFtYWdlUmVwb3J0Tm9uRW1wdHkpOwotfQotCi1SZWRpcmVj
dGVkWENvbXBvc2l0ZVdpbmRvdzo6flJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KCkKLXsKLSAg
ICBBU1NFUlQobV9kaXNwbGF5KTsKLSAgICBBU1NFUlQobV9kYW1hZ2UpOwotICAgIEFTU0VSVCht
X3dpbmRvdyk7Ci0gICAgQVNTRVJUKG1fcGFyZW50V2luZG93KTsKLQotICAgIHhEYW1hZ2VOb3Rp
ZmllcigpLnJlbW92ZShtX3dpbmRvdy5nZXQoKSk7Ci0KLSAgICAvLyBFeHBsaWNpdGx5IHJlc2V0
IHRoZXNlIGJlY2F1c2Ugd2UgbmVlZCB0byBlbnN1cmUgaXQgaGFwcGVucyBpbiB0aGlzIG9yZGVy
LgotICAgIG1fZGFtYWdlLnJlc2V0KCk7Ci0gICAgbV93aW5kb3cucmVzZXQoKTsKLSAgICBtX3Bh
cmVudFdpbmRvdy5yZXNldCgpOwotfQotCi12b2lkIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93
OjpyZXNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBJbnRTaXplIHNjYWxlZFNpemUo
c2l6ZSk7Ci0gICAgc2NhbGVkU2l6ZS5zY2FsZShtX3dlYlBhZ2UuZGV2aWNlU2NhbGVGYWN0b3Io
KSk7Ci0gICAgaWYgKHNjYWxlZFNpemUgPT0gbV9zaXplKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBSZXNpemUgdGhlIHdpbmRvdyB0byBhdCBsYXN0IDF4MSBzaW5jZSBYIGRvZXNuJ3QgYWxs
b3cgdG8gY3JlYXRlIGVtcHR5IHdpbmRvd3MuCi0gICAgWFJlc2l6ZVdpbmRvdyhtX2Rpc3BsYXks
IG1fd2luZG93LmdldCgpLCBzdGQ6Om1heCgxLCBzY2FsZWRTaXplLndpZHRoKCkpLCBzdGQ6Om1h
eCgxLCBzY2FsZWRTaXplLmhlaWdodCgpKSk7Ci0gICAgWEZsdXNoKG1fZGlzcGxheSk7Ci0KLSAg
ICBtX3NpemUgPSBzY2FsZWRTaXplOwotICAgIGlmIChtX3NpemUuaXNFbXB0eSgpKQotICAgICAg
ICBjbGVhbnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgpOwotICAgIGVsc2UKLSAgICAgICAgY3Jl
YXRlTmV3UGl4YW1wQW5kUGl4YW1wU3VyZmFjZSgpOwotfQotCi12b2lkIFJlZGlyZWN0ZWRYQ29t
cG9zaXRlV2luZG93OjpjbGVhbnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgpCi17Ci0gICAgaWYg
KCFtX3BpeG1hcCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zdXJmYWNlID0gbnVsbHB0cjsK
LSAgICBtX3BpeG1hcC5yZXNldCgpOwotfQotCi12b2lkIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2lu
ZG93OjpjcmVhdGVOZXdQaXhhbXBBbmRQaXhhbXBTdXJmYWNlKCkKLXsKLSAgICAvLyBUaGlzIHNo
b3VsZCBuZXZlciBiZSBjYWxsZWQgd2l0aCBhbiBlbXB0eSBzaXplIChub3QgaW4gQWNjZWxlcmF0
ZWQgQ29tcG9zaXRpbmcgbW9kZSkuCi0gICAgQVNTRVJUKCFtX3NpemUuaXNFbXB0eSgpKTsKLSAg
ICBYVW5pcXVlUGl4bWFwIG5ld1BpeG1hcChYQ29tcG9zaXRlTmFtZVdpbmRvd1BpeG1hcChtX2Rp
c3BsYXksIG1fd2luZG93LmdldCgpKSk7Ci0gICAgaWYgKCFuZXdQaXhtYXApIHsKLSAgICAgICAg
Y2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2UoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIFhXaW5kb3dBdHRyaWJ1dGVzIHdpbmRvd0F0dHJpYnV0ZXM7Ci0gICAgaWYgKCFYR2V0
V2luZG93QXR0cmlidXRlcyhtX2Rpc3BsYXksIG1fd2luZG93LmdldCgpLCAmd2luZG93QXR0cmli
dXRlcykpIHsKLSAgICAgICAgY2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2UoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG5ld1N1cmZh
Y2UgPSBhZG9wdFJlZihjYWlyb194bGliX3N1cmZhY2VfY3JlYXRlKG1fZGlzcGxheSwgbmV3UGl4
bWFwLmdldCgpLCB3aW5kb3dBdHRyaWJ1dGVzLnZpc3VhbCwgbV9zaXplLndpZHRoKCksIG1fc2l6
ZS5oZWlnaHQoKSkpOwotICAgIGNhaXJvU3VyZmFjZVNldERldmljZVNjYWxlKG5ld1N1cmZhY2Uu
Z2V0KCksIG1fd2ViUGFnZS5kZXZpY2VTY2FsZUZhY3RvcigpLCBtX3dlYlBhZ2UuZGV2aWNlU2Nh
bGVGYWN0b3IoKSk7Ci0KLSAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19j
cmVhdGUobmV3U3VyZmFjZS5nZXQoKSkpOwotICAgIGlmICghbV93ZWJQYWdlLmRyYXdzQmFja2dy
b3VuZCgpKQotICAgICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJPX09QRVJB
VE9SX0NMRUFSKTsKLSAgICBlbHNlCi0gICAgICAgIHNldFNvdXJjZVJHQkFGcm9tQ29sb3IoY3Iu
Z2V0KCksIG1fd2ViUGFnZS5iYWNrZ3JvdW5kQ29sb3IoKSk7Ci0gICAgY2Fpcm9fcGFpbnQoY3Iu
Z2V0KCkpOwotCi0gICAgLy8gTnZpZGlhIGRyaXZlcnMgc2VlbSB0byBwcmVwYXJlIHRoZWlyIHJl
ZGlyZWN0ZWQgd2luZG93IHBpeG1hcCBhc3luY2hyb25vdXNseSwgc28gZm9yIGEgZmV3IGZyYWN0
aW9ucwotICAgIC8vIG9mIGEgc2Vjb25kIGFmdGVyIGVhY2ggcmVzaXplLCB3aGlsZSBkb2luZyBj
b250aW51b3VzIHJlc2l6aW5nICh3aGljaCBjb25zdGFudGx5IGRlc3Ryb3lzIGFuZCBjcmVhdGVz
Ci0gICAgLy8gcGl4bWFwIHdpbmRvdy1iYWNraW5ncyksIHRoZSBwaXhtYXAgbWVtb3J5IGlzIHVu
aW5pdGlhbGl6ZWQuIFRvIHdvcmsgYXJvdW5kIHRoaXMgaXNzdWUsIHBhaW50IHRoZSBvbGQKLSAg
ICAvLyBwaXhtYXAgdG8gdGhlIG5ldyBvbmUgdG8gcHJvcGVybHkgaW5pdGlhbGl6ZSBpdC4KLSAg
ICBpZiAobV9zdXJmYWNlKSB7Ci0gICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihjci5nZXQoKSwg
Q0FJUk9fT1BFUkFUT1JfT1ZFUik7Ci0gICAgICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShj
ci5nZXQoKSwgbV9zdXJmYWNlLmdldCgpLCAwLCAwKTsKLSAgICAgICAgY2Fpcm9fcGFpbnQoY3Iu
Z2V0KCkpOwotICAgIH0KLQotICAgIGNsZWFudXBQaXhtYXBBbmRQaXhtYXBTdXJmYWNlKCk7Ci0g
ICAgbV9waXhtYXAgPSBXVEZNb3ZlKG5ld1BpeG1hcCk7Ci0gICAgbV9zdXJmYWNlID0gV1RGTW92
ZShuZXdTdXJmYWNlKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
VVNFKFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2MmIyZWUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oCisrKyAvZGV2
L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEg
Uy5MLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiAgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3dfaAot
I2RlZmluZSAgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3dfaAotCi0jaWYgVVNFKFJFRElSRUNU
RURfWENPTVBPU0lURV9XSU5ET1cpCi0KLSNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL1JlZlB0ckNhaXJvLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9YVW5pcXVl
UmVzb3VyY2UuaD4KLSNpbmNsdWRlIDxmdW5jdGlvbmFsPgotCi10eXBlZGVmIHN0cnVjdCBfR2Rr
V2luZG93IEdka1dpbmRvdzsKLXR5cGVkZWYgc3RydWN0IF9YRGlzcGxheSBEaXNwbGF5OwotdHlw
ZWRlZiB1bnNpZ25lZCBsb25nIFdpbmRvdzsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNz
IFdlYlBhZ2VQcm94eTsKLQotY2xhc3MgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cgewotICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KTsgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxS
ZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdz4gY3JlYXRlKFdlYlBhZ2VQcm94eSYsIGNvbnN0IFdl
YkNvcmU6OkludFNpemUmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+JiYgZGFtYWdlTm90aWZ5KTsK
LSAgICB+UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coKTsKLQotICAgIFdpbmRvdyB3aW5kb3dJ
RCgpIGNvbnN0IHsgcmV0dXJuIG1fd2luZG93LmdldCgpOyB9Ci0gICAgdm9pZCByZXNpemUoY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYpOwotICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3VyZmFjZS5nZXQoKTsgfTsKLQotcHJpdmF0ZToKLSAgICBSZWRpcmVj
dGVkWENvbXBvc2l0ZVdpbmRvdyhXZWJQYWdlUHJveHkmLCBjb25zdCBXZWJDb3JlOjpJbnRTaXpl
Jiwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiYmIGRhbWFnZU5vdGlmeSk7Ci0gICAgdm9pZCBjcmVh
dGVOZXdQaXhhbXBBbmRQaXhhbXBTdXJmYWNlKCk7Ci0gICAgdm9pZCBjbGVhbnVwUGl4bWFwQW5k
UGl4bWFwU3VyZmFjZSgpOwotCi0gICAgV2ViUGFnZVByb3h5JiBtX3dlYlBhZ2U7Ci0gICAgRGlz
cGxheSogbV9kaXNwbGF5IHsgbnVsbHB0ciB9OwotICAgIFdlYkNvcmU6OkludFNpemUgbV9zaXpl
OwotICAgIFdlYkNvcmU6OlhVbmlxdWVXaW5kb3cgbV93aW5kb3c7Ci0gICAgV2ViQ29yZTo6WFVu
aXF1ZVdpbmRvdyBtX3BhcmVudFdpbmRvdzsKLSAgICBXZWJDb3JlOjpYVW5pcXVlUGl4bWFwIG1f
cGl4bWFwOwotICAgIFdlYkNvcmU6OlhVbmlxdWVEYW1hZ2UgbV9kYW1hZ2U7Ci0gICAgUmVmUHRy
PGNhaXJvX3N1cmZhY2VfdD4gbV9zdXJmYWNlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
Ci0KLSNlbmRpZiAvLyBVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKLQotI2VuZGlm
IC8vIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9ndGsvWERhbWFnZU5vdGlmaWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9ndGsvWERhbWFnZU5vdGlmaWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4yZmU2NzM4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2d0ay9YRGFtYWdlTm90aWZpZXIuY3BwCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJYRGFtYWdl
Tm90aWZpZXIuaCIKKworI2lmIFBMQVRGT1JNKFgxMSkKKworI2luY2x1ZGUgPFdlYkNvcmUvUGxh
dGZvcm1EaXNwbGF5WDExLmg+CisjaW5jbHVkZSA8WDExL1hsaWIuaD4KKyNpbmNsdWRlIDxYMTEv
ZXh0ZW5zaW9ucy9YZGFtYWdlLmg+CisjaW5jbHVkZSA8Z2RrL2dka3guaD4KKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMgaW50IHNfZGFt
YWdlRXZlbnRCYXNlID0gLTE7CisKK1hEYW1hZ2VOb3RpZmllciYgWERhbWFnZU5vdGlmaWVyOjpz
aW5nbGV0b24oKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxYRGFtYWdlTm90aWZpZXI+
IG5vdGlmaWVyOworICAgIHJldHVybiBub3RpZmllcjsKK30KKworWERhbWFnZU5vdGlmaWVyOjpY
RGFtYWdlTm90aWZpZXIoKQoreworICAgIGludCBiYXNlRXZlbnQ7CisgICAgaWYgKGRvd25jYXN0
PFBsYXRmb3JtRGlzcGxheVgxMT4oUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5KCkpLnN1
cHBvcnRzWERhbWFnZShiYXNlRXZlbnQpKQorICAgICAgICBzX2RhbWFnZUV2ZW50QmFzZSA9IGJh
c2VFdmVudDsKK30KKwordm9pZCBYRGFtYWdlTm90aWZpZXI6OmFkZChEYW1hZ2UgZGFtYWdlLCBz
dGQ6OmZ1bmN0aW9uPHZvaWQoKT4mJiBub3RpZnlGdW5jdGlvbikKK3sKKyAgICBpZiAoc19kYW1h
Z2VFdmVudEJhc2UgPT0gLTEpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX25vdGlmeUZ1
bmN0aW9ucy5pc0VtcHR5KCkpCisgICAgICAgIGdka193aW5kb3dfYWRkX2ZpbHRlcihudWxscHRy
LCByZWludGVycHJldF9jYXN0PEdka0ZpbHRlckZ1bmM+KCZmaWx0ZXJYRGFtYWdlRXZlbnQpLCB0
aGlzKTsKKyAgICBtX25vdGlmeUZ1bmN0aW9ucy5hZGQoZGFtYWdlLCBXVEZNb3ZlKG5vdGlmeUZ1
bmN0aW9uKSk7Cit9CisKK3ZvaWQgWERhbWFnZU5vdGlmaWVyOjpyZW1vdmUoRGFtYWdlIGRhbWFn
ZSkKK3sKKyAgICBpZiAoc19kYW1hZ2VFdmVudEJhc2UgPT0gLTEpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fbm90aWZ5RnVuY3Rpb25zLnJlbW92ZShkYW1hZ2UpOworICAgIGlmIChtX25vdGlm
eUZ1bmN0aW9ucy5pc0VtcHR5KCkpCisgICAgICAgIGdka193aW5kb3dfcmVtb3ZlX2ZpbHRlcihu
dWxscHRyLCByZWludGVycHJldF9jYXN0PEdka0ZpbHRlckZ1bmM+KCZmaWx0ZXJYRGFtYWdlRXZl
bnQpLCB0aGlzKTsKK30KKworR2RrRmlsdGVyUmV0dXJuIFhEYW1hZ2VOb3RpZmllcjo6ZmlsdGVy
WERhbWFnZUV2ZW50KEdka1hFdmVudCogZXZlbnQsIEdka0V2ZW50KiwgWERhbWFnZU5vdGlmaWVy
KiBub3RpZmllcikKK3sKKyAgICBBU1NFUlQoc19kYW1hZ2VFdmVudEJhc2UgIT0gLTEpOworICAg
IGF1dG8qIHhFdmVudCA9IHN0YXRpY19jYXN0PFhFdmVudCo+KGV2ZW50KTsKKyAgICBpZiAoeEV2
ZW50LT50eXBlICE9IHNfZGFtYWdlRXZlbnRCYXNlICsgWERhbWFnZU5vdGlmeSkKKyAgICAgICAg
cmV0dXJuIEdES19GSUxURVJfQ09OVElOVUU7CisKKyAgICBYRGFtYWdlTm90aWZ5RXZlbnQqIGRh
bWFnZUV2ZW50ID0gcmVpbnRlcnByZXRfY2FzdDxYRGFtYWdlTm90aWZ5RXZlbnQqPih4RXZlbnQp
OworICAgIGlmIChub3RpZmllci0+bm90aWZ5KGRhbWFnZUV2ZW50LT5kYW1hZ2UpKSB7CisgICAg
ICAgIFhEYW1hZ2VTdWJ0cmFjdCh4RXZlbnQtPnhhbnkuZGlzcGxheSwgZGFtYWdlRXZlbnQtPmRh
bWFnZSwgTm9uZSwgTm9uZSk7CisgICAgICAgIHJldHVybiBHREtfRklMVEVSX1JFTU9WRTsKKyAg
ICB9CisKKyAgICByZXR1cm4gR0RLX0ZJTFRFUl9DT05USU5VRTsKK30KKworYm9vbCBYRGFtYWdl
Tm90aWZpZXI6Om5vdGlmeShEYW1hZ2UgZGFtYWdlKSBjb25zdAoreworICAgIGlmIChjb25zdCBh
dXRvJiBub3RpZnlGdW5jdGlvbiA9IG1fbm90aWZ5RnVuY3Rpb25zLmdldChkYW1hZ2UpKSB7Cisg
ICAgICAgIG5vdGlmeUZ1bmN0aW9uKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IFBMQVRGT1JNKFgxMSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsv
WERhbWFnZU5vdGlmaWVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1hEYW1hZ2VO
b3RpZmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMzRjYzIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1hEYW1hZ2VOb3Rp
Zmllci5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlh
IFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBQTEFURk9STShYMTEpCisKKyNpbmNsdWRlIDxnZGsvZ2RreC5oPgorI2lu
Y2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
KwordHlwZWRlZiB1bnNpZ25lZCBsb25nIERhbWFnZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFhEYW1hZ2VOb3RpZmllciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoWERhbWFn
ZU5vdGlmaWVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgZnJpZW5kIGNsYXNzIE5l
dmVyRGVzdHJveWVkPFhEYW1hZ2VOb3RpZmllcj47CitwdWJsaWM6CisgICAgc3RhdGljIFhEYW1h
Z2VOb3RpZmllciYgc2luZ2xldG9uKCk7CisKKyAgICB2b2lkIGFkZChEYW1hZ2UsIHN0ZDo6ZnVu
Y3Rpb248dm9pZCgpPiYmKTsKKyAgICB2b2lkIHJlbW92ZShEYW1hZ2UpOworCitwcml2YXRlOgor
ICAgIFhEYW1hZ2VOb3RpZmllcigpOworCisgICAgc3RhdGljIEdka0ZpbHRlclJldHVybiBmaWx0
ZXJYRGFtYWdlRXZlbnQoR2RrWEV2ZW50KiwgR2RrRXZlbnQqLCBYRGFtYWdlTm90aWZpZXIqKTsK
KyAgICBib29sIG5vdGlmeShEYW1hZ2UpIGNvbnN0OworCisgICAgSGFzaE1hcDxEYW1hZ2UsIHN0
ZDo6ZnVuY3Rpb248dm9pZCgpPj4gbV9ub3RpZnlGdW5jdGlvbnM7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFBMQVRGT1JNKFgxMSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaAppbmRleCAyMjBkYTBhLi4wMWFi
MTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJ
bXBsSU9TLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1w
bElPUy5oCkBAIC0xMDMsNyArMTAzLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGVudGVyQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpIG92ZXJyaWRlOwog
ICAgIHZvaWQgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkgb3ZlcnJpZGU7CiAgICAg
dm9pZCB1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250
ZXh0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsRW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5n
TW9kZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jvb3RM
YXllcihMYXllck9yVmlldyAqKSBvdmVycmlkZTsKICAgICBMYXllck9yVmlldyAqYWNjZWxlcmF0
ZWRDb21wb3NpdGluZ1Jvb3RMYXllcigpIGNvbnN0IG92ZXJyaWRlOwogICAgIExheWVySG9zdGlu
Z01vZGUgdmlld0xheWVySG9zdGluZ01vZGUoKSBvdmVycmlkZSB7IHJldHVybiBMYXllckhvc3Rp
bmdNb2RlOjpPdXRPZlByb2Nlc3M7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
aW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCmluZGV4IDJlMGY4MGQuLjVmYzIyYWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0KKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQpAQCAt
NDU2LDEwICs0NTYsNiBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjp1cGRhdGVBY2NlbGVyYXRlZENv
bXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0JikKIHsKIH0KIAotdm9pZCBQYWdl
Q2xpZW50SW1wbDo6d2lsbEVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKQotewotfQot
CiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nUm9vdExheWVy
KExheWVyT3JWaWV3ICpyb290TGF5ZXIpCiB7CiAgICAgW21fY29udGVudFZpZXcgX3NldEFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdSb290Vmlldzpyb290TGF5ZXJdOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5oCmluZGV4IDU4MDhlZTMuLmQyMWNhNTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLmgKQEAgLTEz
OCw3ICsxMzgsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBleGl0
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSBvdmVycmlkZTsKICAgICB2b2lkIHVwZGF0ZUFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHdpbGxFbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkgb3ZlcnJp
ZGU7CiAKICAgICBQYXNzUmVmUHRyPFZpZXdTbmFwc2hvdD4gdGFrZVZpZXdTbmFwc2hvdCgpIG92
ZXJyaWRlOwogICAgIHZvaWQgd2hlZWxFdmVudFdhc05vdEhhbmRsZWRCeVdlYkNvcmUoY29uc3Qg
TmF0aXZlV2ViV2hlZWxFdmVudCYpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9tYWMvUGFnZUNsaWVudEltcGwubW0KaW5kZXggZTdmOTBhNS4uNTNiOWJjNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCkBAIC00ODAs
MTAgKzQ4MCw2IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OnVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxhCiAgICAgbV9pbXBsLT5zZXRBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nUm9vdExheWVyKHJlbmRlckxheWVyKTsKIH0KIAotdm9pZCBQYWdl
Q2xpZW50SW1wbDo6d2lsbEVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKQotewotfQot
CiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nUm9vdExheWVy
KENBTGF5ZXIgKnJvb3RMYXllcikKIHsKICAgICBtX2ltcGwtPnNldEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdSb290TGF5ZXIocm9vdExheWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmNwcAppbmRleCA0
YTVhM2E5Li5lYjgwOTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuY3BwCkBAIC0zMTgsMTEgKzMx
OCw5IEBAIHZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6ZW50ZXJBY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kZShHcmFwaGljc0xheWVyKiBncmFwCiAgICAgbV9leGl0Q29tcG9zaXRpbmdUaW1l
ci5zdG9wKCk7CiAgICAgbV93YW50c1RvRXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlID0g
ZmFsc2U7CiAKLSAgICBtX3dlYlBhZ2Uuc2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWFQcm94eTo6
V2lsbEVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUobV9iYWNraW5nU3RvcmVTdGF0ZUlE
KSk7Ci0KICAgICBBU1NFUlQoIW1fbGF5ZXJUcmVlSG9zdCk7CiAgICAgbV9sYXllclRyZWVIb3N0
ID0gTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKG1fd2ViUGFnZSk7Ci0jaWYgUExBVEZPUk0oR1RLKSAm
JiBVU0UoVEVYVFVSRV9NQVBQRVIpCisjaWYgUExBVEZPUk0oR1RLKSAmJiBVU0UoVEVYVFVSRV9N
QVBQRVIpICYmICFVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKICAgICBpZiAobV9u
YXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcpCiAgICAgICAgIG1fbGF5ZXJUcmVlSG9z
dC0+c2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKG1fbmF0aXZlU3VyZmFjZUhh
bmRsZUZvckNvbXBvc2l0aW5nKTsKICNlbmRpZgpAQCAtMzU0LDcgKzM1Miw3IEBAIHZvaWQgQWNj
ZWxlcmF0ZWREcmF3aW5nQXJlYTo6ZGlkUmVjZWl2ZUNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdE1l
c3NhZ2UoSVBDOjpDb25uCiB9CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKEdUSykgJiYgVVNFKFRF
WFRVUkVfTUFQUEVSKQorI2lmIFBMQVRGT1JNKEdUSykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKSAm
JiAhVVNFKFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCiB2b2lkIEFjY2VsZXJhdGVkRHJh
d2luZ0FyZWE6OnNldE5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyh1aW50NjRfdCBo
YW5kbGUpCiB7CiAgICAgbV9uYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcgPSBoYW5k
bGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxl
cmF0ZWREcmF3aW5nQXJlYS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Fj
Y2VsZXJhdGVkRHJhd2luZ0FyZWEuaAppbmRleCBlYTE2N2EzLi4yMWNhNDkzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJl
YS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERy
YXdpbmdBcmVhLmgKQEAgLTYzLDcgKzYzLDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgZGlkUmVj
ZWl2ZUNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBD
OjpNZXNzYWdlRGVjb2RlciYpIG92ZXJyaWRlOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShHVEsp
ICYmIFVTRShURVhUVVJFX01BUFBFUikKKyNpZiBQTEFURk9STShHVEspICYmIFVTRShURVhUVVJF
X01BUFBFUikgJiYgIVVTRShSRURJUkVDVEVEX1hDT01QT1NJVEVfV0lORE9XKQogICAgIHZvaWQg
c2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKHVpbnQ2NF90KSBvdmVycmlkZTsK
ICAgICB2b2lkIGRlc3Ryb3lOYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcoYm9vbCYp
IG92ZXJyaWRlOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggNDFiNDJm
NS4uZGJkMDI4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcApAQCAtMzQsNiArMzQsMTAg
QEAKICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTWFp
bkZyYW1lLmg+CiAKKyNpZiBVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKKyNpbmNs
dWRlICJSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTUwLDE0ICs1NCwyNiBAQCBU
aHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6flRocmVhZGVkQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0KCkKIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpUaHJlYWRlZENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdChXZWJQYWdlJiB3ZWJQYWdlKQogICAgIDogQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0KHdlYlBhZ2UpCiAgICAgLCBtX2NvbXBvc2l0b3JDbGllbnQoKnRoaXMp
CisjaWYgVVNFKFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCisgICAgLCBtX3JlZGlyZWN0
ZWRXaW5kb3coUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmNyZWF0ZSh3ZWJQYWdlKSkKKyAg
ICAsIG1fY29tcG9zaXRvcihUaHJlYWRlZENvbXBvc2l0b3I6OmNyZWF0ZSgmbV9jb21wb3NpdG9y
Q2xpZW50LCBtX3JlZGlyZWN0ZWRXaW5kb3cgPyBtX3JlZGlyZWN0ZWRXaW5kb3ctPndpbmRvdygp
IDogMCkpCisjZWxzZQogICAgICwgbV9jb21wb3NpdG9yKFRocmVhZGVkQ29tcG9zaXRvcjo6Y3Jl
YXRlKCZtX2NvbXBvc2l0b3JDbGllbnQpKQorI2VuZGlmCiB7CisjaWYgVVNFKFJFRElSRUNURURf
WENPTVBPU0lURV9XSU5ET1cpCisgICAgaWYgKG1fcmVkaXJlY3RlZFdpbmRvdykKKyAgICAgICAg
bV9sYXllclRyZWVDb250ZXh0LmNvbnRleHRJRCA9IG1fcmVkaXJlY3RlZFdpbmRvdy0+cGl4bWFw
KCk7CisjZW5kaWYKIH0KIAogdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
aW52YWxpZGF0ZSgpCiB7CiAgICAgbV9jb21wb3NpdG9yLT5pbnZhbGlkYXRlKCk7CiAgICAgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjppbnZhbGlkYXRlKCk7CisjaWYgVVNFKFJFRElSRUNURURf
WENPTVBPU0lURV9XSU5ET1cpCisgICAgbV9yZWRpcmVjdGVkV2luZG93ID0gbnVsbHB0cjsKKyNl
bmRpZgogfQogCiB2b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpmb3JjZVJl
cGFpbnQoKQpAQCAtNzksNiArOTUsMTMgQEAgdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6Y29udGVudHNTaXplQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRTaXoKIAogdm9p
ZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGV2aWNlT3JQYWdlU2NhbGVGYWN0
b3JDaGFuZ2VkKCkKIHsKKyNpZiBVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKKyAg
ICBpZiAobV9yZWRpcmVjdGVkV2luZG93KSB7CisgICAgICAgIG1fcmVkaXJlY3RlZFdpbmRvdy0+
cmVzaXplKG1fd2ViUGFnZS5zaXplKCkpOworICAgICAgICBtX2xheWVyVHJlZUNvbnRleHQuY29u
dGV4dElEID0gbV9yZWRpcmVjdGVkV2luZG93LT5waXhtYXAoKTsKKyAgICB9CisjZW5kaWYKKwog
ICAgIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFu
Z2VkKCk7CiAgICAgbV9jb21wb3NpdG9yLT5zZXREZXZpY2VTY2FsZUZhY3RvcihtX3dlYlBhZ2Uu
ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CiB9CkBAIC05MSw2ICsxMTQsMTIgQEAgdm9pZCBUaHJlYWRl
ZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cGFnZUJhY2tncm91bmRUcmFuc3BhcmVuY3lDaGFu
Z2VkKCkKIAogdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2l6ZURpZENo
YW5nZShjb25zdCBJbnRTaXplJiBzaXplKQogeworI2lmIFVTRShSRURJUkVDVEVEX1hDT01QT1NJ
VEVfV0lORE9XKQorICAgIGlmIChtX3JlZGlyZWN0ZWRXaW5kb3cpIHsKKyAgICAgICAgbV9yZWRp
cmVjdGVkV2luZG93LT5yZXNpemUoc2l6ZSk7CisgICAgICAgIG1fbGF5ZXJUcmVlQ29udGV4dC5j
b250ZXh0SUQgPSBtX3JlZGlyZWN0ZWRXaW5kb3ctPnBpeG1hcCgpOworICAgIH0KKyNlbmRpZgog
ICAgIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2l6ZURpZENoYW5nZShzaXplKTsKICAgICBt
X2NvbXBvc2l0b3ItPmRpZENoYW5nZVZpZXdwb3J0U2l6ZShzaXplKTsKIH0KQEAgLTEwNSw3ICsx
MzQsNyBAQCB2b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkaWRTY2FsZUZh
Y3RvckNoYW5nZWQoZmxvYXQgc2NhbGUsIGNvbnN0CiAgICAgbV93ZWJQYWdlLnNjYWxlUGFnZShz
Y2FsZSwgb3JpZ2luKTsKIH0KIAotI2lmIFBMQVRGT1JNKEdUSykKKyNpZiBQTEFURk9STShHVEsp
ICYmICFVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKIHZvaWQgVGhyZWFkZWRDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldE5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGlu
Zyh1aW50NjRfdCBoYW5kbGUpCiB7CiAgICAgbV9sYXllclRyZWVDb250ZXh0LmNvbnRleHRJRCA9
IGhhbmRsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJl
YWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCmluZGV4IDZhOTkwYzMuLmE0MWExMTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29y
ZGluYXRlZExheWVyVHJlZUhvc3QuaApAQCAtNDEsNiArNDEsNyBAQCBzdHJ1Y3QgQ29vcmRpbmF0
ZWRHcmFwaGljc1N0YXRlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorY2xhc3MgUmVkaXJlY3Rl
ZFhDb21wb3NpdGVXaW5kb3c7CiBjbGFzcyBXZWJQYWdlOwogCiBjbGFzcyBUaHJlYWRlZENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdCBmaW5hbCA6IHB1YmxpYyBDb29yZGluYXRlZExheWVyVHJlZUhv
c3QgewpAQCAtNjQsNyArNjUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZm9yY2VSZXBhaW50KCkg
b3ZlcnJpZGU7CiAgICAgYm9vbCBmb3JjZVJlcGFpbnRBc3luYyh1aW50NjRfdCBjYWxsYmFja0lE
KSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogCi0jaWYgUExBVEZPUk0oR1RLKQorI2lmIFBM
QVRGT1JNKEdUSykgJiYgIVVTRShSRURJUkVDVEVEX1hDT01QT1NJVEVfV0lORE9XKQogICAgIHZv
aWQgc2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKHVpbnQ2NF90KSBvdmVycmlk
ZTsKICNlbmRpZgogCkBAIC0xMDMsMTAgKzEwNCwxMyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlk
Rmx1c2hSb290TGF5ZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGUgeyB9CiAg
ICAgdm9pZCBjb21taXRTY2VuZVN0YXRlKGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NTdGF0ZSYpIG92ZXJyaWRlOwogCi0gICAgV2ViQ29yZTo6SW50UG9pbnQgbV9wcmV2U2Nyb2xs
UG9zaXRpb247CiAgICAgQ29tcG9zaXRvckNsaWVudCBtX2NvbXBvc2l0b3JDbGllbnQ7CisjaWYg
VVNFKFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCisgICAgc3RkOjp1bmlxdWVfcHRyPFJl
ZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93PiBtX3JlZGlyZWN0ZWRXaW5kb3c7CisjZW5kaWYKICAg
ICBSZWZQdHI8VGhyZWFkZWRDb21wb3NpdG9yPiBtX2NvbXBvc2l0b3I7CiAgICAgZmxvYXQgbV9s
YXN0U2NhbGVGYWN0b3IgeyAxIH07CisgICAgV2ViQ29yZTo6SW50UG9pbnQgbV9wcmV2U2Nyb2xs
UG9zaXRpb247CiAgICAgV2ViQ29yZTo6SW50UG9pbnQgbV9sYXN0U2Nyb2xsUG9zaXRpb247CiB9
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2lu
Z0FyZWEuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5o
CmluZGV4IDAyYjQwMzUuLmJkMzNlNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oCkBAIC0xNDYsNyArMTQ2LDcgQEAgcHJvdGVjdGVkOgog
ICAgIERyYXdpbmdBcmVhVHlwZSBtX3R5cGU7CiAgICAgV2ViUGFnZSYgbV93ZWJQYWdlOwogCi0j
aWYgUExBVEZPUk0oR1RLKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisjaWYgUExBVEZPUk0oR1RL
KSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmICFVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJ
TkRPVykKICAgICB1aW50NjRfdCBtX25hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyB7
IDAgfTsKICNlbmRpZgogCkBAIC0xNzIsNyArMTcyLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFs
IHZvaWQgYWRkVHJhbnNhY3Rpb25DYWxsYmFja0lEKHVpbnQ2NF90IGNhbGxiYWNrSUQpIHsgQVNT
RVJUX05PVF9SRUFDSEVEKCk7IH0KICNlbmRpZgogCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSKSAm
JiBQTEFURk9STShHVEspCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKSAmJiBQTEFURk9STShHVEsp
ICYmICFVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKICAgICB2aXJ0dWFsIHZvaWQg
c2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKHVpbnQ2NF90KSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIGRlc3Ryb3lOYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcoYm9v
bCYpID0gMDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0RyYXdpbmdBcmVhLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0RyYXdpbmdBcmVhLm1lc3NhZ2VzLmluCmluZGV4IDcyODliNjMuLjk3ZGY1ODYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJl
YS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJh
d2luZ0FyZWEubWVzc2FnZXMuaW4KQEAgLTQwLDcgKzQwLDcgQEAgbWVzc2FnZXMgLT4gRHJhd2lu
Z0FyZWEgewogICAgIEFkZFRyYW5zYWN0aW9uQ2FsbGJhY2tJRCh1aW50NjRfdCBjYWxsYmFja0lE
KQogI2VuZGlmCiAKLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmIFBMQVRGT1JNKEdUSykKKyNp
ZiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmIFBMQVRGT1JNKEdUSykgJiYgIVVTRShSRURJUkVDVEVE
X1hDT01QT1NJVEVfV0lORE9XKQogICAgIFNldE5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3Np
dGluZyh1aW50NjRfdCBoYW5kbGUpCiAgICAgRGVzdHJveU5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JD
b21wb3NpdGluZygpIC0+IChib29sIGhhbmRsZWQpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0xheWVyVHJlZUhvc3RHdGsuY3Bw
CmluZGV4IDk5MzQzZGIuLjlhMDkyZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmNwcApAQCAtNTcsNiAr
NTcsMTAgQEAKICNpbmNsdWRlIDxnZGsvZ2RreC5oPgogI2VuZGlmCiAKKyNpZiBVU0UoUkVESVJF
Q1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKKyNpbmNsdWRlICJSZWRpcmVjdGVkWENvbXBvc2l0ZVdp
bmRvdy5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKQEAgLTEzMyw2ICsxMzcsOSBAQCBSZWY8TGF5ZXJUcmVlSG9zdEd0az4gTGF5ZXJU
cmVlSG9zdEd0azo6Y3JlYXRlKFdlYlBhZ2UmIHdlYlBhZ2UpCiAKIExheWVyVHJlZUhvc3RHdGs6
OkxheWVyVHJlZUhvc3RHdGsoV2ViUGFnZSYgd2ViUGFnZSkKICAgICA6IExheWVyVHJlZUhvc3Qo
d2ViUGFnZSkKKyNpZiBVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKKyAgICAsIG1f
cmVkaXJlY3RlZFdpbmRvdyhSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6Y3JlYXRlKHdlYlBh
Z2UpKQorI2VuZGlmCiAgICAgLCBtX3JlbmRlckZyYW1lU2NoZWR1bGVyKHN0ZDo6YmluZCgmTGF5
ZXJUcmVlSG9zdEd0azo6cmVuZGVyRnJhbWUsIHRoaXMpKQogewogICAgIG1fcm9vdExheWVyID0g
R3JhcGhpY3NMYXllcjo6Y3JlYXRlKGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCksICp0aGlzKTsKQEAg
LTE1OSwxNyArMTY2LDMwIEBAIExheWVyVHJlZUhvc3RHdGs6OkxheWVyVHJlZUhvc3RHdGsoV2Vi
UGFnZSYgd2ViUGFnZSkKIAogICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChtX25vbkNvbXBvc2l0
ZWRDb250ZW50TGF5ZXIuZ2V0KCkpOwogICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+
c2V0TmVlZHNEaXNwbGF5KCk7CisKKyNpZiBVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRP
VykKKyAgICBpZiAobV9yZWRpcmVjdGVkV2luZG93KSB7CisgICAgICAgIGNyZWF0ZVRleHR1cmVN
YXBwZXIoKTsKKyAgICAgICAgbV9sYXllclRyZWVDb250ZXh0LmNvbnRleHRJRCA9IG1fcmVkaXJl
Y3RlZFdpbmRvdy0+cGl4bWFwKCk7CisgICAgfQorI2VuZGlmCiB9CiAKIGJvb2wgTGF5ZXJUcmVl
SG9zdEd0azo6bWFrZUNvbnRleHRDdXJyZW50KCkKIHsKLSAgICBpZiAoIW1fbGF5ZXJUcmVlQ29u
dGV4dC5jb250ZXh0SUQpIHsKKyNpZiBVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykK
KyAgICB1aW50NjRfdCBuYXRpdmVIYW5kbGUgPSBtX3JlZGlyZWN0ZWRXaW5kb3cgPyBtX3JlZGly
ZWN0ZWRXaW5kb3ctPndpbmRvdygpIDogbV9sYXllclRyZWVDb250ZXh0LmNvbnRleHRJRDsKKyNl
bHNlCisgICAgdWludDY0X3QgbmF0aXZlSGFuZGxlID0gbV9sYXllclRyZWVDb250ZXh0LmNvbnRl
eHRJRDsKKyNlbmRpZgorCisgICAgaWYgKCFuYXRpdmVIYW5kbGUpIHsKICAgICAgICAgbV9jb250
ZXh0ID0gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIGlmICgh
bV9jb250ZXh0KSB7Ci0gICAgICAgIG1fY29udGV4dCA9IEdMQ29udGV4dDo6Y3JlYXRlQ29udGV4
dEZvcldpbmRvdyhyZWludGVycHJldF9jYXN0PEdMTmF0aXZlV2luZG93VHlwZT4obV9sYXllclRy
ZWVDb250ZXh0LmNvbnRleHRJRCksIEdMQ29udGV4dDo6c2hhcmluZ0NvbnRleHQoKSk7CisgICAg
ICAgIG1fY29udGV4dCA9IEdMQ29udGV4dDo6Y3JlYXRlQ29udGV4dEZvcldpbmRvdyhyZWludGVy
cHJldF9jYXN0PEdMTmF0aXZlV2luZG93VHlwZT4obmF0aXZlSGFuZGxlKSwgR0xDb250ZXh0Ojpz
aGFyaW5nQ29udGV4dCgpKTsKICAgICAgICAgaWYgKCFtX2NvbnRleHQpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMjA4LDYgKzIyOCwxMCBAQCB2b2lkIExheWVyVHJlZUhv
c3RHdGs6OmludmFsaWRhdGUoKQogCiAgICAgbV9jb250ZXh0ID0gbnVsbHB0cjsKICAgICBMYXll
clRyZWVIb3N0OjppbnZhbGlkYXRlKCk7CisKKyNpZiBVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRF
X1dJTkRPVykKKyAgICBtX3JlZGlyZWN0ZWRXaW5kb3cgPSBudWxscHRyOworI2VuZGlmCiB9CiAK
IHZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3Bs
YXkoKQpAQCAtMjQ3LDExICsyNzEsMjUgQEAgdm9pZCBMYXllclRyZWVIb3N0R3RrOjpzaXplRGlk
Q2hhbmdlKGNvbnN0IEludFNpemUmIG5ld1NpemUpCiAgICAgICAgIG1fbm9uQ29tcG9zaXRlZENv
bnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEZsb2F0UmVjdCgwLCBvbGRTaXplLmhl
aWdodCgpLCBuZXdTaXplLndpZHRoKCksIG5ld1NpemUuaGVpZ2h0KCkgLSBvbGRTaXplLmhlaWdo
dCgpKSk7CiAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXko
KTsKIAorI2lmIFVTRShSRURJUkVDVEVEX1hDT01QT1NJVEVfV0lORE9XKQorICAgIGlmIChtX3Jl
ZGlyZWN0ZWRXaW5kb3cpIHsKKyAgICAgICAgbV9yZWRpcmVjdGVkV2luZG93LT5yZXNpemUobmV3
U2l6ZSk7CisgICAgICAgIG1fbGF5ZXJUcmVlQ29udGV4dC5jb250ZXh0SUQgPSBtX3JlZGlyZWN0
ZWRXaW5kb3ctPnBpeG1hcCgpOworICAgIH0KKyNlbmRpZgorCiAgICAgY29tcG9zaXRlTGF5ZXJz
VG9Db250ZXh0KEZvclJlc2l6ZSk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6ZGV2aWNl
T3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkKIHsKKyNpZiBVU0UoUkVESVJFQ1RFRF9YQ09NUE9T
SVRFX1dJTkRPVykKKyAgICBpZiAobV9yZWRpcmVjdGVkV2luZG93KSB7CisgICAgICAgIG1fcmVk
aXJlY3RlZFdpbmRvdy0+cmVzaXplKG1fd2ViUGFnZS5zaXplKCkpOworICAgICAgICBtX2xheWVy
VHJlZUNvbnRleHQuY29udGV4dElEID0gbV9yZWRpcmVjdGVkV2luZG93LT5waXhtYXAoKTsKKyAg
ICB9CisjZW5kaWYKKwogICAgIC8vIE90aGVyIGxheWVycyBsZWFybiBvZiB0aGUgc2NhbGUgZmFj
dG9yIGNoYW5nZSB2aWEgV2ViUGFnZTo6c2V0RGV2aWNlU2NhbGVGYWN0b3IuCiAgICAgbV9ub25D
b21wb3NpdGVkQ29udGVudExheWVyLT5kZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsK
IApAQCAtMzc3LDExICs0MTUsOCBAQCB2b2lkIExheWVyVHJlZUhvc3RHdGs6OnNldFZpZXdPdmVy
bGF5Um9vdExheWVyKEdyYXBoaWNzTGF5ZXIqIHZpZXdPdmVybGF5Um9vdExheQogICAgICAgICBt
X3Jvb3RMYXllci0+YWRkQ2hpbGQobV92aWV3T3ZlcmxheVJvb3RMYXllcik7CiB9CiAKLXZvaWQg
TGF5ZXJUcmVlSG9zdEd0azo6c2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKHVp
bnQ2NF90IGhhbmRsZSkKK3ZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6Y3JlYXRlVGV4dHVyZU1hcHBl
cigpCiB7Ci0gICAgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKLSAgICBtX2xheWVyVHJlZUNv
bnRleHQuY29udGV4dElEID0gaGFuZGxlOwotCiAgICAgLy8gVGhlIGNyZWF0aW9uIG9mIHRoZSBU
ZXh0dXJlTWFwcGVyIG5lZWRzIGFuIGFjdGl2ZSBPcGVuR0wgY29udGV4dC4KICAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0zOTEsOSArNDI2LDE4IEBA
IHZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6c2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0
aW5nKHVpbnQ2NF90IGhhbmRsZSkKICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVy
OjpjcmVhdGUoKTsKICAgICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wqPihtX3RleHR1cmVN
YXBwZXIuZ2V0KCkpLT5zZXRFbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNpbmcodHJ1ZSk7CiAg
ICAgZG93bmNhc3Q8R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI+KCptX3Jvb3RMYXllcikubGF5
ZXIoKS5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7Cit9CiAKKyNpZiAh
VVNFKFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCit2b2lkIExheWVyVHJlZUhvc3RHdGs6
OnNldE5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyh1aW50NjRfdCBoYW5kbGUpCit7
CisgICAgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKKyAgICBtX2xheWVyVHJlZUNvbnRleHQu
Y29udGV4dElEID0gaGFuZGxlOworCisgICAgY3JlYXRlVGV4dHVyZU1hcHBlcigpOwogICAgIHNj
aGVkdWxlTGF5ZXJGbHVzaCgpOwogfQorI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0xheWVy
VHJlZUhvc3RHdGsuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvTGF5
ZXJUcmVlSG9zdEd0ay5oCmluZGV4IGMxNWI4NmYuLmQ2OWRlOTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5o
CkBAIC0zOSw2ICszOSw4IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBSZWRpcmVj
dGVkWENvbXBvc2l0ZVdpbmRvdzsKKwogY2xhc3MgTGF5ZXJUcmVlSG9zdEd0ayBmaW5hbCA6IHB1
YmxpYyBMYXllclRyZWVIb3N0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50IHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUmVmPExheWVyVHJlZUhvc3RHdGs+IGNyZWF0ZShXZWJQYWdlJik7CkBA
IC02NSw3ICs2Nyw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzY3JvbGxOb25Db21wb3NpdGVkQ29u
dGVudHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCkgb3ZlcnJpZGU7CiAgICAg
dm9pZCBzZXRWaWV3T3ZlcmxheVJvb3RMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3Zl
cnJpZGU7CiAKKyNpZiAhVVNFKFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCiAgICAgdm9p
ZCBzZXROYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcodWludDY0X3QpIG92ZXJyaWRl
OworI2VuZGlmCiAKICAgICBjbGFzcyBSZW5kZXJGcmFtZVNjaGVkdWxlciB7CiAgICAgcHVibGlj
OgpAQCAtOTgsMTIgKzEwMiwxNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZmx1c2hBbmRSZW5kZXJM
YXllcnMoKTsKICAgICBib29sIHJlbmRlckZyYW1lKCk7CiAgICAgYm9vbCBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICB2b2lkIGNyZWF0ZVRleHR1cmVNYXBwZXIoKTsKIAogICAgIHN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3Jvb3RMYXllcjsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9ub25Db21wb3NpdGVkQ29udGVudExh
eWVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyPiBtX3RleHR1
cmVNYXBwZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkdMQ29udGV4dD4gbV9jb250
ZXh0OwogICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IG1fc2NhbGVNYXRyaXg7Cisj
aWYgVVNFKFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCisgICAgc3RkOjp1bmlxdWVfcHRy
PFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93PiBtX3JlZGlyZWN0ZWRXaW5kb3c7CisjZW5kaWYK
ICAgICBSZW5kZXJGcmFtZVNjaGVkdWxlciBtX3JlbmRlckZyYW1lU2NoZWR1bGVyOwogfTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9SZWRpcmVj
dGVkWENvbXBvc2l0ZVdpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4xY2ZkOGI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5jcHAK
QEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNiBJZ2FsaWEg
Uy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaCIKKwor
I2lmIFVTRShSRURJUkVDVEVEX1hDT01QT1NJVEVfV0lORE9XKQorCisjaW5jbHVkZSAiV2ViUGFn
ZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1EaXNwbGF5WDExLmg+CisjaW5jbHVkZSA8
WDExL1hsaWIuaD4KKyNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9YY29tcG9zaXRlLmg+CisjaW5j
bHVkZSA8Z2RrL2dka3guaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgorCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0ZDo6dW5pcXVlX3B0cjxS
ZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdz4gUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmNy
ZWF0ZShXZWJQYWdlJiB3ZWJQYWdlKQoreworICAgIGlmICghZG93bmNhc3Q8UGxhdGZvcm1EaXNw
bGF5WDExPihQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXkoKSkuc3VwcG9ydHNYQ29tcG9z
aXRlKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9w
dHI8UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c+KG5ldyBSZWRpcmVjdGVkWENvbXBvc2l0ZVdp
bmRvdyh3ZWJQYWdlKSk7Cit9CisKK1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpSZWRpcmVj
dGVkWENvbXBvc2l0ZVdpbmRvdyhXZWJQYWdlJiB3ZWJQYWdlKQorICAgIDogbV93ZWJQYWdlKHdl
YlBhZ2UpCisgICAgLCBtX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5WDExPihQbGF0
Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXkoKSkubmF0aXZlKCkpCisgICAgLCBtX3NpemUod2Vi
UGFnZS5zaXplKCkpCit7CisgICAgbV9zaXplLnNjYWxlKG1fd2ViUGFnZS5kZXZpY2VTY2FsZUZh
Y3RvcigpKTsKKworICAgIFNjcmVlbiogc2NyZWVuID0gRGVmYXVsdFNjcmVlbk9mRGlzcGxheSht
X2Rpc3BsYXkpOworCisgICAgQVNTRVJUKGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheVgxMT4oUGxh
dGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5KCkpLm5hdGl2ZSgpID09IG1fZGlzcGxheSk7Cisg
ICAgR2RrVmlzdWFsKiB2aXN1YWwgPSBnZGtfc2NyZWVuX2dldF9yZ2JhX3Zpc3VhbChnZGtfc2Ny
ZWVuX2dldF9kZWZhdWx0KCkpOworICAgIGlmICghdmlzdWFsKQorICAgICAgICB2aXN1YWwgPSBn
ZGtfc2NyZWVuX2dldF9zeXN0ZW1fdmlzdWFsKGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKSk7CisK
KyAgICBYVW5pcXVlQ29sb3JtYXAgY29sb3JtYXAoWENyZWF0ZUNvbG9ybWFwKG1fZGlzcGxheSwg
Um9vdFdpbmRvd09mU2NyZWVuKHNjcmVlbiksIEdES19WSVNVQUxfWFZJU1VBTCh2aXN1YWwpLCBB
bGxvY05vbmUpKTsKKworICAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVzIHdpbmRvd0F0dHJpYnV0ZXM7
CisgICAgd2luZG93QXR0cmlidXRlcy5vdmVycmlkZV9yZWRpcmVjdCA9IFRydWU7CisgICAgd2lu
ZG93QXR0cmlidXRlcy5jb2xvcm1hcCA9IGNvbG9ybWFwLmdldCgpOworCisgICAgLy8gQ1dCb3Jk
ZXJQaXhlbCBtdXN0IGJlIHByZXNlbnQgd2hlbiB0aGUgZGVwdGggZG9lc24ndCBtYXRjaCB0aGUg
cGFyZW50J3Mgb25lLgorICAgIC8vIFNlZSBodHRwOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcveG9y
Zy94c2VydmVyL3RyZWUvZGl4L3dpbmRvdy5jP2lkPXhvcmctc2VydmVyLTEuMTYuMCNuNzAzLgor
ICAgIHdpbmRvd0F0dHJpYnV0ZXMuYm9yZGVyX3BpeGVsID0gMDsKKworICAgIG1fcGFyZW50V2lu
ZG93ID0gWENyZWF0ZVdpbmRvdyhtX2Rpc3BsYXksCisgICAgICAgIFJvb3RXaW5kb3dPZlNjcmVl
bihzY3JlZW4pLAorICAgICAgICBXaWR0aE9mU2NyZWVuKHNjcmVlbikgKyAxLCAwLCAxLCAxLAor
ICAgICAgICAwLAorICAgICAgICBnZGtfdmlzdWFsX2dldF9kZXB0aCh2aXN1YWwpLAorICAgICAg
ICBJbnB1dE91dHB1dCwKKyAgICAgICAgR0RLX1ZJU1VBTF9YVklTVUFMKHZpc3VhbCksCisgICAg
ICAgIENXT3ZlcnJpZGVSZWRpcmVjdCB8IENXQ29sb3JtYXAgfCBDV0JvcmRlclBpeGVsLAorICAg
ICAgICAmd2luZG93QXR0cmlidXRlcyk7CisgICAgWE1hcFdpbmRvdyhtX2Rpc3BsYXksIG1fcGFy
ZW50V2luZG93LmdldCgpKTsKKworICAgIHdpbmRvd0F0dHJpYnV0ZXMuZXZlbnRfbWFzayA9IFN0
cnVjdHVyZU5vdGlmeU1hc2s7CisgICAgd2luZG93QXR0cmlidXRlcy5vdmVycmlkZV9yZWRpcmVj
dCA9IEZhbHNlOworCisgICAgLy8gQ3JlYXRlIHRoZSB3aW5kb3cgb2YgYXQgbGFzdCAxeDEgc2lu
Y2UgWCBkb2Vzbid0IGFsbG93IHRvIGNyZWF0ZSBlbXB0eSB3aW5kb3dzLgorICAgIG1fd2luZG93
ID0gWENyZWF0ZVdpbmRvdyhtX2Rpc3BsYXksCisgICAgICAgIG1fcGFyZW50V2luZG93LmdldCgp
LAorICAgICAgICAwLCAwLAorICAgICAgICBzdGQ6Om1heCgxLCBtX3NpemUud2lkdGgoKSksCisg
ICAgICAgIHN0ZDo6bWF4KDEsIG1fc2l6ZS5oZWlnaHQoKSksCisgICAgICAgIDAsCisgICAgICAg
IENvcHlGcm9tUGFyZW50LAorICAgICAgICBJbnB1dE91dHB1dCwKKyAgICAgICAgQ29weUZyb21Q
YXJlbnQsCisgICAgICAgIENXRXZlbnRNYXNrLAorICAgICAgICAmd2luZG93QXR0cmlidXRlcyk7
CisgICAgWE1hcFdpbmRvdyhtX2Rpc3BsYXksIG1fd2luZG93LmdldCgpKTsKKworICAgIHdoaWxl
ICgxKSB7CisgICAgICAgIFhFdmVudCBldmVudDsKKyAgICAgICAgWFdpbmRvd0V2ZW50KG1fZGlz
cGxheSwgbV93aW5kb3cuZ2V0KCksIFN0cnVjdHVyZU5vdGlmeU1hc2ssICZldmVudCk7CisgICAg
ICAgIGlmIChldmVudC50eXBlID09IE1hcE5vdGlmeSAmJiBldmVudC54bWFwLndpbmRvdyA9PSBt
X3dpbmRvdy5nZXQoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBYU2VsZWN0SW5w
dXQobV9kaXNwbGF5LCBtX3dpbmRvdy5nZXQoKSwgTm9FdmVudE1hc2spOworICAgIFhDb21wb3Np
dGVSZWRpcmVjdFdpbmRvdyhtX2Rpc3BsYXksIG1fd2luZG93LmdldCgpLCBDb21wb3NpdGVSZWRp
cmVjdE1hbnVhbCk7CisgICAgbV9waXhtYXAgPSBYQ29tcG9zaXRlTmFtZVdpbmRvd1BpeG1hcCht
X2Rpc3BsYXksIG1fd2luZG93LmdldCgpKTsKK30KKworUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5k
b3c6On5SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdygpCit7CisgICAgQVNTRVJUKG1fZGlzcGxh
eSk7CisgICAgQVNTRVJUKG1fd2luZG93KTsKKyAgICBBU1NFUlQobV9wYXJlbnRXaW5kb3cpOwor
CisgICAgLy8gRXhwbGljaXRseSByZXNldCB0aGVzZSBiZWNhdXNlIHdlIG5lZWQgdG8gZW5zdXJl
IGl0IGhhcHBlbnMgaW4gdGhpcyBvcmRlci4KKyAgICBtX3dpbmRvdy5yZXNldCgpOworICAgIG1f
cGFyZW50V2luZG93LnJlc2V0KCk7Cit9CisKK3ZvaWQgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5k
b3c6OnJlc2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIEludFNpemUgc2NhbGVkU2l6
ZShzaXplKTsKKyAgICBzY2FsZWRTaXplLnNjYWxlKG1fd2ViUGFnZS5kZXZpY2VTY2FsZUZhY3Rv
cigpKTsKKyAgICBpZiAoc2NhbGVkU2l6ZSA9PSBtX3NpemUpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fc2l6ZSA9IHNjYWxlZFNpemU7CisKKyAgICAvLyBSZXNpemUgdGhlIHdpbmRvdyB0byBh
dCBsYXN0IDF4MSBzaW5jZSBYIGRvZXNuJ3QgYWxsb3cgdG8gY3JlYXRlIGVtcHR5IHdpbmRvd3Mu
CisgICAgWFJlc2l6ZVdpbmRvdyhtX2Rpc3BsYXksIG1fd2luZG93LmdldCgpLCBzdGQ6Om1heCgx
LCBtX3NpemUud2lkdGgoKSksIHN0ZDo6bWF4KDEsIG1fc2l6ZS5oZWlnaHQoKSkpOworICAgIFhG
bHVzaChtX2Rpc3BsYXkpOworCisgICAgLy8gUmVsZWFzZSB0aGUgcHJldmlvdXMgcGl4bWFwIGxh
dGVyIHRvIGdpdmUgc29tZSB0aW1lIHRvIHRoZSBVSSBwcm9jZXNzIHRvIHVwZGF0ZS4KKyAgICBS
dW5Mb29wOjptYWluKCkuZGlzcGF0Y2hBZnRlcihzdGQ6OmNocm9ubzo6c2Vjb25kcyg1KSwgW3Bp
eG1hcCA9IFdURk1vdmUobV9waXhtYXApXSB7IH0pOworICAgIG1fcGl4bWFwID0gWENvbXBvc2l0
ZU5hbWVXaW5kb3dQaXhtYXAobV9kaXNwbGF5LCBtX3dpbmRvdy5nZXQoKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShSRURJUkVDVEVEX1hDT01QT1NJVEVf
V0lORE9XKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0
ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0YTU0ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93
LmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE2IElnYWxp
YSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgVVNFKFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCisKKyNpbmNs
dWRlIDxXZWJDb3JlL0ludFNpemUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1hVbmlxdWVSZXNvdXJj
ZS5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCit0eXBlZGVmIHN0cnVjdCBfWERp
c3BsYXkgRGlzcGxheTsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBQaXhtYXA7Cit0eXBlZGVmIHVu
c2lnbmVkIGxvbmcgV2luZG93OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFn
ZTsKKworY2xhc3MgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KTsgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZWRpcmVjdGVkWENv
bXBvc2l0ZVdpbmRvdz4gY3JlYXRlKFdlYlBhZ2UmKTsKKyAgICB+UmVkaXJlY3RlZFhDb21wb3Np
dGVXaW5kb3coKTsKKworICAgIFdpbmRvdyB3aW5kb3coKSBjb25zdCB7IHJldHVybiBtX3dpbmRv
dy5nZXQoKTsgfQorICAgIFBpeG1hcCBwaXhtYXAoKSBjb25zdCB7IHJldHVybiBtX3BpeG1hcC5n
ZXQoKTsgfQorICAgIHZvaWQgcmVzaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKKworcHJp
dmF0ZToKKyAgICBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdyhXZWJQYWdlJik7CisKKyAgICBX
ZWJQYWdlJiBtX3dlYlBhZ2U7CisgICAgRGlzcGxheSogbV9kaXNwbGF5IHsgbnVsbHB0ciB9Owor
ICAgIFdlYkNvcmU6OkludFNpemUgbV9zaXplOworICAgIFdlYkNvcmU6OlhVbmlxdWVXaW5kb3cg
bV93aW5kb3c7CisgICAgV2ViQ29yZTo6WFVuaXF1ZVdpbmRvdyBtX3BhcmVudFdpbmRvdzsKKyAg
ICBXZWJDb3JlOjpYVW5pcXVlUGl4bWFwIG1fcGl4bWFwOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284987</attachid>
            <date>2016-07-31 23:46:43 -0700</date>
            <delta_ts>2016-08-01 01:44:54 -0700</delta_ts>
            <desc>Address review comments and try to fix EFL build</desc>
            <filename>wk2-redirected-window-web-process.diff</filename>
            <type>text/plain</type>
            <size>92369</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5YTg0ZmE0Li44NDc2YWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcg
QEAKKzIwMTYtMDctMzEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIE1vdmUgdGhlIHJlZGlyZWN0ZWQgWENvbXBvc2l0ZSB3aW5kb3cg
dG8gdGhlIHdlYiBwcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjAzODkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGQgaGVscGVyIG1ldGhvZHMgdG8gUGxhdGZvcm1EaXNwbGF5WDExIHRvIHF1
ZXJ5IFggZXh0ZW5zaW9ucyBzdXBwb3J0ZWQgYnkgdGhlIGRpc3BsYXkuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtRGlzcGxheVgxMTo6c3VwcG9ydHNYQ29tcG9zaXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheVgxMTo6c3VwcG9ydHNYRGFtYWdlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmg6CisKIDIwMTYtMDct
MzAgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCByZWJhc2VsaW5lIGJpbmRpbmdzIHRlc3RzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MveDExL1BsYXRmb3JtRGlzcGxheVgxMS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmNwcAppbmRleCA5
NjZhY2Q2Li43Y2Q0MTM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmNwcApAQCAtMjgsNiArMjgsMTAg
QEAKIAogI2lmIFBMQVRGT1JNKFgxMSkKICNpbmNsdWRlIDxYMTEvWGxpYi5oPgorI2luY2x1ZGUg
PFgxMS9leHRlbnNpb25zL1hjb21wb3NpdGUuaD4KKyNpZiBQTEFURk9STShHVEspCisjaW5jbHVk
ZSA8WDExL2V4dGVuc2lvbnMvWGRhbWFnZS5oPgorI2VuZGlmCiAKICNpZiBVU0UoRUdMKQogI2lu
Y2x1ZGUgPEVHTC9lZ2wuaD4KQEAgLTYxLDYgKzY1LDMyIEBAIHZvaWQgUGxhdGZvcm1EaXNwbGF5
WDExOjppbml0aWFsaXplRUdMRGlzcGxheSgpCiB9CiAjZW5kaWYKIAorYm9vbCBQbGF0Zm9ybURp
c3BsYXlYMTE6OnN1cHBvcnRzWENvbXBvc2l0ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3N1cHBv
cnRzWENvbXBvc2l0ZSkgeworICAgICAgICBpbnQgZXZlbnRCYXNlLCBlcnJvckJhc2U7CisgICAg
ICAgIG1fc3VwcG9ydHNYQ29tcG9zaXRlID0gWENvbXBvc2l0ZVF1ZXJ5RXh0ZW5zaW9uKG1fZGlz
cGxheSwgJmV2ZW50QmFzZSwgJmVycm9yQmFzZSk7CisgICAgfQorICAgIHJldHVybiBtX3N1cHBv
cnRzWENvbXBvc2l0ZS52YWx1ZSgpOworfQorCitib29sIFBsYXRmb3JtRGlzcGxheVgxMTo6c3Vw
cG9ydHNYRGFtYWdlKGludCYgZGFtYWdlRXZlbnRCYXNlKSBjb25zdAoreworICAgIGlmICghbV9z
dXBwb3J0c1hEYW1hZ2UpIHsKKyNpZiBQTEFURk9STShHVEspCisgICAgICAgIGludCBldmVudEJh
c2UsIGVycm9yQmFzZTsKKyAgICAgICAgbV9zdXBwb3J0c1hEYW1hZ2UgPSBYRGFtYWdlUXVlcnlF
eHRlbnNpb24obV9kaXNwbGF5LCAmZXZlbnRCYXNlLCAmZXJyb3JCYXNlKTsKKyAgICAgICAgaWYg
KG1fc3VwcG9ydHNYRGFtYWdlLnZhbHVlKCkpCisgICAgICAgICAgICBtX2RhbWFnZUV2ZW50QmFz
ZSA9IGV2ZW50QmFzZTsKKyNlbHNlCisgICAgICAgIG1fc3VwcG9ydHNYRGFtYWdlID0gZmFsc2U7
CisjZW5kaWYKKyAgICB9CisKKyAgICBkYW1hZ2VFdmVudEJhc2UgPSBtX2RhbWFnZUV2ZW50QmFz
ZTsKKyAgICByZXR1cm4gbV9zdXBwb3J0c1hEYW1hZ2UudmFsdWUoKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gUExBVEZPUk0oWDExKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MveDExL1BsYXRmb3JtRGlzcGxheVgxMS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MveDExL1BsYXRmb3JtRGlzcGxheVgxMS5o
CmluZGV4IGVmYWU1YWIuLmM3NTVmZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3gxMS9QbGF0Zm9ybURpc3BsYXlYMTEuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmgKQEAgLTI5LDYgKzI5
LDcgQEAKICNpZiBQTEFURk9STShYMTEpCiAKICNpbmNsdWRlICJQbGF0Zm9ybURpc3BsYXkuaCIK
KyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgX1hEaXNwbGF5IERp
c3BsYXk7CiAKQEAgLTQxLDYgKzQyLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgflBsYXRmb3Jt
RGlzcGxheVgxMSgpOwogCiAgICAgRGlzcGxheSogbmF0aXZlKCkgY29uc3QgeyByZXR1cm4gbV9k
aXNwbGF5OyB9CisgICAgYm9vbCBzdXBwb3J0c1hDb21wb3NpdGUoKSBjb25zdDsKKyAgICBib29s
IHN1cHBvcnRzWERhbWFnZShpbnQmIGRhbWFnZUV2ZW50QmFzZSkgY29uc3Q7CiAKIHByaXZhdGU6
CiAgICAgVHlwZSB0eXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gUGxhdGZvcm1EaXNwbGF5
OjpUeXBlOjpYMTE7IH0KQEAgLTUxLDYgKzU0LDkgQEAgcHJpdmF0ZToKIAogICAgIERpc3BsYXkq
IG1fZGlzcGxheTsKICAgICBib29sIG1fb3duZWREaXNwbGF5OworICAgIG11dGFibGUgT3B0aW9u
YWw8Ym9vbD4gbV9zdXBwb3J0c1hDb21wb3NpdGU7CisgICAgbXV0YWJsZSBPcHRpb25hbDxib29s
PiBtX3N1cHBvcnRzWERhbWFnZTsKKyAgICBtdXRhYmxlIGludCBtX2RhbWFnZUV2ZW50QmFzZSB7
IC0xIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOGFkY2Rk
My4uYzgwYjMxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0MCBAQAorMjAxNi0wNy0zMSAgQ2Fy
bG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10g
TW92ZSB0aGUgcmVkaXJlY3RlZCBYQ29tcG9zaXRlIHdpbmRvdyB0byB0aGUgd2ViIHByb2Nlc3MK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDM4OQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIHRoZSBj
dXJyZW50IGNvZGUsIHRoZSBVSSBwcm9jZXNzIGNyZWF0ZXMgdGhlIHJlZGlyZWN0ZWQgd2luZG93
IHRoYXQgdGhlIHdlYiBwcm9jZXNzIHVzZXMgdG8gcmVuZGVyCisgICAgICAgIGFjY2VsZXJhdGVk
IGNvbnRlbnRzLiBUaGUgcmVkaXJlY3RlZCB3aW5kb3cgaXMgc2VudCB0byB0aGUgd2ViIHByb2Nl
c3MgYXMgbmF0aXZlIHN1cmZhY2UgaGFuZGxlLCBhbmQgdXNpbmcKKyAgICAgICAgWERhbWFnZSBl
eHRlbnNpb24gdGhlIFVJIHByb2Nlc3MgdGFrZXMgYSBwaXhtYXAgb2YgdGhlIHJlZGlyZWN0ZWQg
d2luZG93IHRvIHJlbmRlciBpbnRvIHRoZSB3aWRnZXQgd2hlbiB0aGVyZQorICAgICAgICBhcmUg
dXBkYXRlcy4gVGhpcyByZXF1aXJlcyBzZXZlcmFsIHBvaW50cyBvZiBzeW5jaHJvbml6YXRpb24g
YmV0d2VlbiBVSSBhbmQgd2ViIHByb2Nlc3Nlcy4gV2hlbiB0aGUgd2ViIHZpZXcgaXMKKyAgICAg
ICAgcmVzaXplZCwgdGhlIFVJIHByb2Nlc3MgZmlyc3QgcmVzaXplcyB0aGUgcmVkaXJlY3RlZCB3
aW5kb3cgYW5kIHRoZW4gc2VuZHMgYSBuZXcgYmFja2luZyBzdG9yZSBJRCB0byB0aGUgd2ViCisg
ICAgICAgIHByb2Nlc3MuIFRoZSB0aW1lIGJldHdlZW4gdGhlIHJlZGlyZWN0ZWQgd2luZG93IGlz
IHJlc2l6ZWQgYW5kIHRoZSB3ZWIgcHJvY2VzcyByZW5kZXJzIHRoZSBuZXcgY29udGVudHMgdGhl
IFVJCisgICAgICAgIHByb2Nlc3Mga2VlcHMgcmVuZGVyaW5nIHRoZSBwcmV2aW91cyBjb250ZW50
cyB3aXRoIHRoZSBwcmV2aW91cyBzaXplIGluIHRoZSBuZXcgd2luZG93IHdpdGggdGhlIG5ldyBz
aXplLiBUaGlzCisgICAgICAgIG1ha2VzIHRoZSByZXNpemUgcHJvY2VzcyBzbG93LCBhbmQgaXQg
cHJvZHVjZXMgcmVuZGVyaW5nIGFydGlmYWN0cyBxdWl0ZSBvZnRlbi4gVGhlIHJlZGlyZWN0ZWQg
d2luZG93IGlzIGNyZWF0ZWQKKyAgICAgICAgd2hlbiB0aGUgd2ViIHZpZXcgaXMgcmVhbGl6ZWQs
IHRvIGJlIGFibGUgdG8gaW5oZXJpdCB0aGUgWFZpc3VhbCBmcm9tIHRoZSBwYXJlbnQgd2luZG93
LCBhbmQgdGhlIG5hdGl2ZSB3aW5kb3cKKyAgICAgICAgaGFuZGxlIGlzIHNlbnQgdG8gdGhlIHdl
YiBwcm9jZXNzLiBUaGUgdGltZSB1bnRpbCB0aGUgd2luZG93IGlzIHJlYWxpemVkLCB0aGUgd2Vi
IHByb2Nlc3MgZG9lc24ndCBoYXZlIGEgY29udGV4dAorICAgICAgICB0byByZW5kZXIgaW50bywg
c28gdGhlIFVJIHByb2Nlc3Mgc2ltcGx5IHJlbmRlcnMgYW4gZW1wdHkgcGFnZS4gV2hlbiB0aGUg
d2ViIHZpZXcgaXMgdW5yZWFsaXplZCwgZm9yIGV4YW1wbGUgaWYKKyAgICAgICAgdGhlIHdlYiB2
aWV3IGlzIHJlcGFyZW50ZWQsIHRoZSByZWRpcmVjdGVkIHdpbmRvdyBpcyBkZXN0cm95ZWQsIGFu
ZCBhIHN5bmMgbWVzc2FnZSBpcyBzZW50IHRvIHRoZSB3ZWIgcHJvY2VzcyB0bworICAgICAgICBk
ZXN0cm95IHRoZSBjdXJyZW50IGdsIGNvbnRleHQgYW5kIHN0b3AgZHJhd2luZy4gVGhpcyBuZWVk
cyB0byBoYXBwZW4gc3luY2hyb25vdXNseSwgYmVjYXVzZSB0aGUgVUkgcHJvY2VzcworICAgICAg
ICBjYW4ndCByZW1vdmUgdGhlIHJlZGlyZWN0ZWQgd2luZG93IHVudGlsIHRoZSB3ZWIgcHJvY2Vz
cyBoYXMgc3RvcHBlZCByZW5kZXJpbmcgaW50byBpdC4gVGhpcyBtYWtlcyBhbHNvIHRoZQorICAg
ICAgICByZXBhcmVudGluZyBwcm9jZXNzIHF1aXRlIHVuc3RhYmxlIGFuZCByaXNreS4gVG8gYWxs
IHRob3NlIHN5bmNocm9uaXphdGlvbiBwb2ludHMgd2Ugbm93IGhhdmUgdG8gYWRkIHRoZQorICAg
ICAgICBzeW5jaHJvbml6YXRpb24gd2l0aCB0aGUgY29tcG9zaXRpbmcgdGhyZWFkIHdoZW4gdXNp
bmcgdGhlIHRocmVhZGVkIGNvbXBvc2l0b3IuIFRoZSB0aHJlYWRlZCBjb21wb3NpdG9yIG1hZGUK
KyAgICAgICAgcmVzaXppbmcsIHJlcGFyZW50aW5nLCBldGMuIGV2ZW4gd29yc2UuIFdlIGNhbid0
IGF2b2lkIHRoZSBzeW5jaHJvbml6YXRpb24gd2l0aCB0aGUgdGhyZWFkZWQgY29tcG9zaXRvciwg
YnV0IHdlCisgICAgICAgIGNhbiByZWR1Y2UgdGhlIHN5bmNocm9uaXphdGlvbiBwb2ludHMgYW5k
IGltcHJvdmUgdGhlIGN1cnJlbnQgb25lcyBieSBtb3ZpbmcgdGhlIHJlZGlyZWN0ZWQgd2luZG93
IHRvIHRoZSB3ZWIKKyAgICAgICAgcHJvY2Vzcy4gSW4gdGhpcyBjYXNlIGlzIHdlYiBwcm9jZXNz
IHdobyBjcmVhdGVzIHRoZSByZWRpcmVjdGVkIHdpbmRvdywgc28gd2UgY2FuIGJlIHN1cmUgdGhh
dCBpdCBhbHdheXMgaGFzIGEKKyAgICAgICAgdmFsaWQgbmF0aXZlIHN1cmZhY2UgaGFuZGxlIHRv
IHJlbmRlciBpbnRvLiBUaGlzIG1lYW5zIHdlIG5vIGxvbmdlciBuZWVkIHRoZSBJUEMgbWVzc2Fn
ZSB0byBzZW5kIHRoZSBuYXRpdmUKKyAgICAgICAgc3VyZmFjZSBoYW5kbGUgZnJvbSB0aGUgVUkg
cHJvY2VzcyB0byB0aGUgd2ViIHByb2Nlc3MsIG5vciB0aGUgc3luYyBtZXNzYWdlIHRvIGRlc3Ry
b3kgaXQgZWl0aGVyLiBUaGlzIGFsc28KKyAgICAgICAgbWVhbnMgd2Ugbm8gbG9uZ2VyIG5lZWQg
dG8gd2FpdCB1bnRpbCB0aGUgdmlldyBpcyByZWFsaXplZCB0byBzdGFydCByZW5kZXJpbmcgYWNj
ZWxlcmF0ZWQgY29udGVudHMsIGFuZCB3ZSBkb24ndAorICAgICAgICBuZWVkIHRvIHN0b3Agd2hl
biBpdCdzIHVucmVhbGl6ZWQgZWl0aGVyLiBXZSBkb24ndCByZWFsbHkgbmVlZCB0byBpbmhlcml0
IHRoZSBYVmlzdWFsIGZyb20gdGhlIHBhcmVudCB3aW5kb3cgaWYKKyAgICAgICAgdGhlIHJlZGly
ZWN0ZWQgd2luZG93IGFsd2F5cyB1c2VzIGFsd2F5cyBhIFJHQkEgdmlzdWFsIHdoZW4gYXZhaWxh
YmxlLiBUaGF0IHdheSB3ZSBhbHdheXMgcmVuZGVyIGludG8gYQorICAgICAgICB0cmFuc3BhcmVu
dCB3aW5kb3cgdGhhdCBpcyBjb21wb3NlZCBpbnRvIHRoZSB3ZWIgdmlldyB3aWRnZXQuIEFuZCB3
aGVuIHRoZSB3ZWIgdmlldyBpcyByZXNpemVkLCB3ZSBubyBsb25nZXIKKyAgICAgICAgbmVlZCB0
byBkZXN0cm95IHRoZSBHTCBjb250ZXh0IGVpdGhlciwgYmVjYXVzZSB3ZSB1c2UgdGhlIHNhbWUg
cmVkaXJlY3RlZCB3aW5kb3cgYXMgdGhlIG5hdGl2ZSBoYW5kbGUsIGJ1dAorICAgICAgICBjcmVh
dGUgYSBuZXcgcGl4bWFwIHRoYXQgaXMgd2hhdCB3ZSBzZW5kIHRvIHRoZSBVSSBwcm9jZXNzIGFz
IGxheWVyIHRyZWUgY29udGV4dCBJRC4gVGhlIGxheWVyIHRyZWUgY29udGV4dCBJRAorICAgICAg
ICBpcyBhbHJlYWR5IHNlbnQgdG8gdGhlIFVJIHByb2Nlc3MgYnkgdGhlIGRyYXdpbmcgYXJlYSBh
cyBwYXJ0IG9mIHRoZSBiYWNraW5nIHN0b3JlIHVwZGF0ZSBwcm9jZXNzLCBzbyB3ZSBkb24ndAor
ICAgICAgICBuZWVkIGFueSBuZXcgSVBDIG1lc3NhZ2UgZm9yIHRoaXMuIFdoZW4gdGhlIHdlYiB2
aWV3IGlzIHJlc2l6ZWQsIHRoZSBVSSBwcm9jZXNzIHNlbmRzIGEgYmFja2luZyBzdG9yZSBzdGF0
ZQorICAgICAgICB1cGRhdGUgbWVzc2FnZSB0byB0aGUgd2ViIHByb2Nlc3MgdGhhdCB1cGRhdGVz
IGl0cyBzaXplLCByZWxheW91dHMgYW5kIHRoZW4gcmVuZGVycyB0aGUgbmV3IGNvbnRlbnRzLCBz
byB0aGF0CisgICAgICAgIHdoZW4gdGhlIHVwZGF0ZSBiYWNraW5nIHN0b3JlIHN0YXRlIHJlcGx5
IGdldHMgdG8gdGhlIFVJIHByb2Nlc3MsIHdlIGFscmVhZHkgaGF2ZSBhIG5ldyBwaXhtYXAgd2l0
aCB0aGUgbmV3CisgICAgICAgIGNvbnRlbnRzIHVwZGF0ZWQuIFRoaXMgbWFrZXMgcmVzaXppbmcg
c21vb3RoIGFnYWluLCBhbmQgYXZvaWRzIGZsaWNrZXJpbmcgYW5kIHJlbmRlcmluZyBhcnRpZmFj
dHMuIEFuZCBmaW5hbGx5CisgICAgICAgIGFsbCB0aGlzIGFsc28gcHJldmVudHMgc2V2ZXJhbCBy
YWNlIGNvbmRpdGlvbnMgdGhhdCB3ZXJlIGNhdXNpbmcgWCBlcnJvcnMgYW5kIHdlYiBwcm9jZXNz
IGNyYXNoZXMuCisKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBTaGFy
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkZWRDb21wb3Np
dG9yLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGhyZWFkZWRDb21wb3NpdG9yOjpjcmVhdGUpOiBN
YWtlIGl0IHBvc3NpYmxlIHRvIG9wdGlvbmFsbHkgcGFzcyBhIG5hdGl2ZSBzdXJmYWNlIGhhbmRs
ZSBmb3IKKyAgICAgICAgY29tcG9zaXRpbmcgdG8gdGhlIFRocmVhZGVkQ29tcG9zaXRvciBjb250
cnVjdG9yLgorICAgICAgICAoV2ViS2l0OjpUaHJlYWRlZENvbXBvc2l0b3I6OlRocmVhZGVkQ29t
cG9zaXRvcik6IEluaXRpYWxpemUgdGhlIG5hdGl2ZSBzdXJmYWNlIGhhbmRsZSBhbmQgbWFrZSB0
aGUgc2NlbmUgYWN0aXZlCisgICAgICAgIGFmdGVyIHRoZSB0aHJlYWQgaW5pdGlhbGl6YXRpb24g
aWYgd2UgYWxyZWFkeSBoYXZlIGEgdmFsaWQgaGFuZGxlLgorICAgICAgICAqIFNoYXJlZC9Db29y
ZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9UaHJlYWRlZENvbXBvc2l0b3IuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2Rl
KTogUGFzcyB0aGUgbGF5ZXIgdHJlZSBjb250ZXh0IElEIHRvIHRoZSB3ZWIgdmlldy4KKyAgICAg
ICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdN
b2RlKTogTm90aWZ5IHRoZSB3ZWIgdmlldyBhYm91dCB0aGUgdXBkYXRlLgorICAgICAgICAoV2Vi
S2l0OjpQYWdlQ2xpZW50SW1wbDo6d2lsbEVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwOgorICAg
ICAgICAod2Via2l0V2ViVmlld0Jhc2VTZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nUGl4bWFwKTog
SGVscGVyIGZ1bmN0aW9uIHRvIHVwZGF0ZSB0aGUgcGl4bWFwIHVzZWQgdG8gcmVuZGVyIHRoZQor
ICAgICAgICBhY2NlbGVyYXRlZCBjb250ZW50cy4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNl
UmVhbGl6ZSk6IFJlbW92ZSB0aGUgY29kZSB0byBjcmVhdGUgdGhlIHJlZGlyZWN0ZWQgd2luZG93
LgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VVbnJlYWxpemUpOiBSZW1vdmUgdGhlIGNvZGUg
dG8gZGVzdHJveSB0aGUgcmVkaXJlY3RlZCB3aW5kb3cuCisgICAgICAgICh3ZWJraXRXZWJWaWV3
QmFzZURpc3Bvc2UpOiBSZXNldCB0aGUgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgcGl4bWFwLgor
ICAgICAgICAod2Via2l0V2ViVmlld1JlbmRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSZXN1bHRz
KTogVXNlIHRoZSBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBwaXhtYXAgc3VyZmFjZS4KKyAgICAg
ICAgKHdlYmtpdFdlYlZpZXdCYXNlU2l6ZUFsbG9jYXRlKTogUmVtb3ZlIHRoZSBjb2RlIHRvIHJl
c2l6ZSB0aGUgcmVkaXJlY3RlZCB3aW5kb3cuCisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUVu
dGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUpOiBVcGRhdGUgdGhlIGFjY2VsZXJhdGVkIGNv
bXBvc2l0aW5nIHBpeG1hcC4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlVXBkYXRlQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGUpOiBEaXR0by4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNl
RXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKTogUmVzZXQgdGhlIGFjY2VsZXJhdGVkIGNv
bXBvc2l0aW5nIHBpeG1hcC4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlRGlkUmVsYXVuY2hX
ZWJQcm9jZXNzKTogUmVtb3ZlIHRoZSBjb2RlIHRvIHNlbmQgbmF0aXZlIHN1cmZhY2UgaGFuZGxl
IHRvIHRoZSB3ZWIgcHJvY2Vzcy4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlUGFnZUNsb3Nl
ZCk6IFJlc2V0IHRoZSBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBwaXhtYXAuCisgICAgICAgIChf
V2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlOjp1cGRhdGVWaWV3U3RhdGVUaW1lckZpcmVkKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZh
dGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdB
cmVhUHJveHlJbXBsOjpkaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSk6IEhhbmRsZSB0aGUgY2Fz
ZSB3aGVuIHRoZSBsYXllciB0cmVlIGNvbnRleHQgSUQKKyAgICAgICAgY2hhbmdlcyB3aXRob3V0
IGxlYXZpbmcgdGhlIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIG1vZGUsIGNhbGxpbmcgdXBkYXRl
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKS4KKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0Fy
ZWFQcm94eUltcGw6OmV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSk6IExldCB0aGUgd2Vi
IHZpZXcga25vdyB3ZSBhcmUgbGVhdmluZyBhY2NlbGVyYXRlZAorICAgICAgICBjb21wb3NpdGlu
ZyBtb2RlIGV2ZW4gd2hlbiBpdCdzIGZvcmNlZCwgc2luY2UgaW4gY2FzZSBvZiB3ZWIgcHJvY2Vz
cyBjcmFzaCB3ZSBuZWVkIHRvIGxlYXZlIHRoZSBhY2NlbGVyYXRlZAorICAgICAgICBjb21wb3Np
dGluZyBtb2RlIGluIHRoZSBVSSBwcm9jZXNzLgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJl
YVByb3h5SW1wbDo6d2lsbEVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUpOiBUaGlzIG1l
c3NhZ2Ugd2FzIGFkZGVkIG9ubHkgdG8gcHJlcGFyZSB0aGUKKyAgICAgICAgcmVkaXJlY3RlZCB3
aW5kb3cgd2hlbiB0aGUgd2ViIHByb2Nlc3Mgd2FzIGFib3V0IHRvIGVudGVyIGFjY2VsZXJhdGVk
IGNvbXBvc2l0aW5nIG1vZGUsIHNvIGl0J3Mgbm8gbG9uZ2VyIG5lZWRlZC4KKyAgICAgICAgKFdl
YktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OnNldE5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21w
b3NpdGluZyk6IFRoaXMgaXMgbm93IG9ubHkgdXNlZCB3aGVuIGJ1aWxkaW5nCisgICAgICAgIHdp
dGhvdXQgcmVkaXJlY3RlZCBYQ29tcG9zaXRlIHdpbmRvdyBzdXBwb3J0LgorICAgICAgICAqIFVJ
UHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9QYWdl
Q2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6d2lsbEVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01v
ZGUpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvZWZsL1dlYlZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1Jl
ZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvZ3RrL1hEYW1hZ2VOb3RpZmllci5jcHA6IEhlbHBlciBjbGFzcyB0byBiZSBub3RpZmllZCBh
Ym91dCBYRGFtYWdlIGV2ZW50cy4KKyAgICAgICAgKFdlYktpdDo6WERhbWFnZU5vdGlmaWVyOjpz
aW5nbGV0b24pOgorICAgICAgICAoV2ViS2l0OjpYRGFtYWdlTm90aWZpZXI6OlhEYW1hZ2VOb3Rp
Zmllcik6CisgICAgICAgIChXZWJLaXQ6OlhEYW1hZ2VOb3RpZmllcjo6YWRkKToKKyAgICAgICAg
KFdlYktpdDo6WERhbWFnZU5vdGlmaWVyOjpyZW1vdmUpOgorICAgICAgICAoV2ViS2l0OjpYRGFt
YWdlTm90aWZpZXI6OmZpbHRlclhEYW1hZ2VFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OlhEYW1h
Z2VOb3RpZmllcjo6bm90aWZ5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1hEYW1hZ2VOb3Rp
Zmllci5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9T
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbToKKyAgICAg
ICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OndpbGxFbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBs
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5tbToKKyAgICAgICAg
KFdlYktpdDo6UGFnZUNsaWVudEltcGw6OndpbGxFbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdN
b2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWRE
cmF3aW5nQXJlYS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6
OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUpOiBSZW1vdmUgY29kZSB0byBzZW5kCisg
ICAgICAgIFdpbGxFbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlIG1lc3NhZ2UuCisgICAg
ICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OnNldE5hdGl2ZVN1cmZhY2VIYW5k
bGVGb3JDb21wb3NpdGluZyk6IFRoaXMgaXMgbm93IG9ubHkgdXNlZCB3aGVuIGJ1aWxkaW5nCisg
ICAgICAgIHdpdGhvdXQgcmVkaXJlY3RlZCBYQ29tcG9zaXRlIHdpbmRvdyBzdXBwb3J0LgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmg6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29y
ZGluYXRlZExheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpUaHJlYWRlZENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6VGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QpOiBD
cmVhdGUgYSByZWRpcmVjdGVkIHdpbmRvdyBhbmQKKyAgICAgICAgcGFzcyB0aGUgd2luZG93IElE
IGFzIG5hdGl2ZSBzdXJmYWNlIGhhbmRsZSB0byB0aGUgdGhyZWFkZWQgY29tcG9zaXRvci4gVXNl
IHRoZSByZWRpcmVjdGVkIHdpbmRvdyBwaXhtYXAgYXMKKyAgICAgICAgbGF5ZXIgdHJlZSBjb250
ZXh0LgorICAgICAgICAoV2ViS2l0OjpUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
aW52YWxpZGF0ZSk6IERlc3Ryb3kgdGhlIHJlZGlyZWN0ZWQgd2luZG93LgorICAgICAgICAoV2Vi
S2l0OjpUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGV2aWNlT3JQYWdlU2NhbGVG
YWN0b3JDaGFuZ2VkKTogUmVzaXplIHRoZSByZWRpcmVjdGVkIHdpbmRvdyBhbmQKKyAgICAgICAg
dXBkYXRlIHRoZSBsYXllciB0cmVlIGNvbnRleHQuCisgICAgICAgIChXZWJLaXQ6OlRocmVhZGVk
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzaXplRGlkQ2hhbmdlKTogRGl0dG8uCisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGlu
YXRlZExheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2lu
Z0FyZWEuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEubWVzc2Fn
ZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0R3Rr
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdEd0azo6TGF5ZXJUcmVlSG9zdEd0
ayk6IENyZWF0ZSBhIHJlZGlyZWN0ZWQgd2luZG93IGFuZCB0ZXh0dXJlIG1hcHBlciB0aGF0IHVz
ZXMgdGhlIHdpbmRvdworICAgICAgICBJRCBhcyBuYXRpdmUgc3VyZmFjZSBoYW5kbGUuIFVzZSB0
aGUgcmVkaXJlY3RlZCB3aW5kb3cgcGl4bWFwIGFzIGxheWVyIHRyZWUgY29udGV4dC4KKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdEd0azo6bWFrZUNvbnRleHRDdXJyZW50KTogVXNlIHRo
ZSByZWRpcmVjdGVkIHdpbmRvdyBhcyBuYXRpdmUgaGFuZGxlLgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVIb3N0R3RrOjppbnZhbGlkYXRlKTogRGVzdHJveSB0aGUgcmVkaXJlY3RlZCB3aW5k
b3cuCisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RHdGs6OnNpemVEaWRDaGFuZ2UpOiBS
ZXNpemUgdGhlIHJlZGlyZWN0ZWQgd2luZG93IGFuZCB1cGRhdGUgdGhlIGxheWVyIHRyZWUgY29u
dGV4dC4KKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdEd0azo6ZGV2aWNlT3JQYWdlU2Nh
bGVGYWN0b3JDaGFuZ2VkKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RH
dGs6OmNyZWF0ZVRleHR1cmVNYXBwZXIpOiBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSB0
ZXh0dXJlIG1hcHBlci4KKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdEd0azo6c2V0TmF0
aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKTogVXNlIGNyZWF0ZVRleHR1cmVNYXBwZXIo
KS4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0xheWVyVHJlZUhvc3RHdGsuaDoK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2lu
ZG93LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2lu
ZG93OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRv
dzo6UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpSZWRpcmVj
dGVkWENvbXBvc2l0ZVdpbmRvdzo6flJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KToKKyAgICAg
ICAgKFdlYktpdDo6UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OnJlc2l6ZSk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9SZWRpcmVjdGVkWENvbXBv
c2l0ZVdpbmRvdy5oLgorICAgICAgICAoV2ViS2l0OjpSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRv
dzo6d2luZG93KToKKyAgICAgICAgKFdlYktpdDo6UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6
OnBpeG1hcCk6CisKIDIwMTYtMDctMzAgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4K
IAogICAgICAgICBbWGNvZGVdIFdlYktpdC5mcmFtZXdvcmsgaXMgdG91Y2hlZCBvbiBpbmNyZW1l
bnRhbCBidWlsZCBldmVuIGlmIG5vdGhpbmfigJlzIGNoYW5nZWQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsu
Y21ha2UKaW5kZXggNDRmMWVmYy4uMzY5YWEwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
UGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UK
QEAgLTI5OSw4ICsyOTksOCBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVBy
b2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmNwcAogICAgIFVJUHJvY2Vzcy9ndGsvSW5wdXRN
ZXRob2RGaWx0ZXIuY3BwCiAgICAgVUlQcm9jZXNzL2d0ay9LZXlCaW5kaW5nVHJhbnNsYXRvci5j
cHAKLSAgICBVSVByb2Nlc3MvZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmNwcAogICAg
IFVJUHJvY2Vzcy9ndGsvVGV4dENoZWNrZXJHdGsuY3BwCisgICAgVUlQcm9jZXNzL2d0ay9YRGFt
YWdlTm90aWZpZXIuY3BwCiAgICAgVUlQcm9jZXNzL2d0ay9XZWJDb2xvclBpY2tlckd0ay5jcHAK
ICAgICBVSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRNZW51UHJveHlHdGsuY3BwCiAgICAgVUlQcm9j
ZXNzL2d0ay9XZWJGdWxsU2NyZWVuQ2xpZW50R3RrLmNwcApAQCAtMzUwLDYgKzM1MCw3IEBAIGxp
c3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9nc3RyZWFt
ZXIvV2ViUGFnZUdTdHJlYW1lci5jcHAKIAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsvUHJp
bnRlckxpc3RHdGsuY3BwCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9SZWRpcmVjdGVkWENv
bXBvc2l0ZVdpbmRvdy5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYkluc3BlY3Rv
clVJR3RrLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHAKICAg
ICBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRj
b21wb3NpdG9yL1RocmVhZGVkQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Q29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkZWRDb21wb3NpdG9y
LmNwcAppbmRleCA5YTQ3ZTZhLi4zNDUyNDI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkZWRDb21w
b3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
cy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkZWRDb21wb3NpdG9yLmNwcApAQCAtNDEsMTggKzQx
LDIwIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAot
UmVmPFRocmVhZGVkQ29tcG9zaXRvcj4gVGhyZWFkZWRDb21wb3NpdG9yOjpjcmVhdGUoQ2xpZW50
KiBjbGllbnQpCitSZWY8VGhyZWFkZWRDb21wb3NpdG9yPiBUaHJlYWRlZENvbXBvc2l0b3I6OmNy
ZWF0ZShDbGllbnQqIGNsaWVudCwgdWludDY0X3QgbmF0aXZlU3VyZmFjZUhhbmRsZSkKIHsKLSAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUaHJlYWRlZENvbXBvc2l0b3IoY2xpZW50KSk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgVGhyZWFkZWRDb21wb3NpdG9yKGNsaWVudCwgbmF0aXZlU3Vy
ZmFjZUhhbmRsZSkpOwogfQogCi1UaHJlYWRlZENvbXBvc2l0b3I6OlRocmVhZGVkQ29tcG9zaXRv
cihDbGllbnQqIGNsaWVudCkKK1RocmVhZGVkQ29tcG9zaXRvcjo6VGhyZWFkZWRDb21wb3NpdG9y
KENsaWVudCogY2xpZW50LCB1aW50NjRfdCBuYXRpdmVTdXJmYWNlSGFuZGxlKQogICAgIDogbV9j
bGllbnQoY2xpZW50KQorICAgICwgbV9uYXRpdmVTdXJmYWNlSGFuZGxlKG5hdGl2ZVN1cmZhY2VI
YW5kbGUpCiAgICAgLCBtX2NvbXBvc2l0aW5nUnVuTG9vcChzdGQ6Om1ha2VfdW5pcXVlPENvbXBv
c2l0aW5nUnVuTG9vcD4oW3RoaXNdIHsgcmVuZGVyTGF5ZXJUcmVlKCk7IH0pKQogewogICAgIG1f
Y29tcG9zaXRpbmdSdW5Mb29wLT5wZXJmb3JtVGFza1N5bmMoW3RoaXMsIHByb3RlY3RlZFRoaXMg
PSBtYWtlUmVmKCp0aGlzKV0gewogICAgICAgICBtX3NjZW5lID0gYWRvcHRSZWYobmV3IENvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZSh0aGlzKSk7CiAgICAgICAgIG1fdmlld3BvcnRDb250cm9sbGVy
ID0gc3RkOjptYWtlX3VuaXF1ZTxTaW1wbGVWaWV3cG9ydENvbnRyb2xsZXI+KHRoaXMpOworICAg
ICAgICBtX3NjZW5lLT5zZXRBY3RpdmUoISFtX25hdGl2ZVN1cmZhY2VIYW5kbGUpOwogICAgIH0p
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFw
aGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkZWRDb21wb3NpdG9yLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFk
ZWRDb21wb3NpdG9yLmgKaW5kZXggMWQzYmE5Ny4uMDQyYzY5ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1Ro
cmVhZGVkQ29tcG9zaXRvci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRl
ZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9UaHJlYWRlZENvbXBvc2l0b3IuaApAQCAtNTcs
NyArNTcsNyBAQCBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgdm9pZCBjb21taXRTY3JvbGxPZmZz
ZXQodWludDMyX3QgbGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgb2Zmc2V0KSA9IDA7
CiAgICAgfTsKIAotICAgIHN0YXRpYyBSZWY8VGhyZWFkZWRDb21wb3NpdG9yPiBjcmVhdGUoQ2xp
ZW50Kik7CisgICAgc3RhdGljIFJlZjxUaHJlYWRlZENvbXBvc2l0b3I+IGNyZWF0ZShDbGllbnQq
LCB1aW50NjRfdCBuYXRpdmVTdXJmYWNlSGFuZGxlID0gMCk7CiAgICAgdmlydHVhbCB+VGhyZWFk
ZWRDb21wb3NpdG9yKCk7CiAKICAgICB2b2lkIHNldE5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21w
b3NpdGluZyh1aW50NjRfdCk7CkBAIC03Nyw3ICs3Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGZv
cmNlUmVwYWludCgpOwogCiBwcml2YXRlOgotICAgIFRocmVhZGVkQ29tcG9zaXRvcihDbGllbnQq
KTsKKyAgICBUaHJlYWRlZENvbXBvc2l0b3IoQ2xpZW50KiwgdWludDY0X3QgbmF0aXZlU3VyZmFj
ZUhhbmRsZSk7CiAKICAgICAvLyBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmVDbGllbnQKICAgICB2
b2lkIHJlbmRlck5leHRGcmFtZSgpIG92ZXJyaWRlOwpAQCAtMTAxLDcgKzEwMSw3IEBAIHByaXZh
dGU6CiAgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3ZpZXdwb3J0U2l6ZTsKICAgICBmbG9hdCBtX2Rl
dmljZVNjYWxlRmFjdG9yIHsgMSB9OwogICAgIGJvb2wgbV9kcmF3c0JhY2tncm91bmQgeyB0cnVl
IH07Ci0gICAgdWludDY0X3QgbV9uYXRpdmVTdXJmYWNlSGFuZGxlIHsgMCB9OworICAgIHVpbnQ2
NF90IG1fbmF0aXZlU3VyZmFjZUhhbmRsZTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb21wb3Np
dGluZ1J1bkxvb3A+IG1fY29tcG9zaXRpbmdSdW5Mb29wOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcAppbmRleCBjYzdjNDg5
Li44ZDI1OGY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9Q
YWdlQ2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
UGFnZUNsaWVudEltcGwuY3BwCkBAIC0yMTYsOSArMjE2LDkgQEAgUmVmUHRyPFdlYkNvbG9yUGlj
a2VyPiBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlQ29sb3JQaWNrZXIoV2ViUGFnZVByb3h5KiBwYWdl
LCBjb24KICAgICByZXR1cm4gV2ViQ29sb3JQaWNrZXJHdGs6OmNyZWF0ZSgqcGFnZSwgY29sb3Is
IHJlY3QpOwogfQogCi12b2lkIFBhZ2VDbGllbnRJbXBsOjplbnRlckFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKQordm9pZCBQYWdlQ2xpZW50SW1wbDo6
ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0JiBs
YXllclRyZWVDb250ZXh0KQogewotICAgIHdlYmtpdFdlYlZpZXdCYXNlRW50ZXJBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nTW9kZShXRUJLSVRfV0VCX1ZJRVdfQkFTRShtX3ZpZXdXaWRnZXQpKTsKKyAg
ICB3ZWJraXRXZWJWaWV3QmFzZUVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoV0VCS0lU
X1dFQl9WSUVXX0JBU0UobV92aWV3V2lkZ2V0KSwgbGF5ZXJUcmVlQ29udGV4dCk7CiB9CiAKIHZv
aWQgUGFnZUNsaWVudEltcGw6OmV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpCkBAIC0y
MjYsMTQgKzIyNiw5IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OmV4aXRBY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kZSgpCiAgICAgd2Via2l0V2ViVmlld0Jhc2VFeGl0QWNjZWxlcmF0ZWRDb21wb3Np
dGluZ01vZGUoV0VCS0lUX1dFQl9WSUVXX0JBU0UobV92aWV3V2lkZ2V0KSk7CiB9CiAKLXZvaWQg
UGFnZUNsaWVudEltcGw6OndpbGxFbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkKK3Zv
aWQgUGFnZUNsaWVudEltcGw6OnVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0
IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQpCiB7Ci0gICAgd2Via2l0V2ViVmll
d0Jhc2VXaWxsRW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShXRUJLSVRfV0VCX1ZJRVdf
QkFTRShtX3ZpZXdXaWRnZXQpKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6dXBkYXRlQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICB3ZWJraXRXZWJWaWV3QmFzZVVwZGF0ZUFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdNb2RlKFdFQktJVF9XRUJfVklFV19CQVNFKG1fdmlld1dpZGdldCksIGxheWVy
VHJlZUNvbnRleHQpOwogfQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpwYWdlQ2xvc2VkKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBs
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oCmlu
ZGV4IGQwNThjZTguLmZlODRmYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvUGFnZUNsaWVudEltcGwuaApAQCAtOTIsNyArOTIsNiBAQCBwcml2YXRlOgogICAg
IHZvaWQgZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250
ZXh0Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUo
KSBvdmVycmlkZTsKICAgICB2b2lkIHVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNv
bnN0IExheWVyVHJlZUNvbnRleHQmKSBvdmVycmlkZTsKLSAgICB2b2lkIHdpbGxFbnRlckFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGhhbmRsZURvd25s
b2FkUmVxdWVzdChEb3dubG9hZFByb3h5Kikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRDaGFuZ2VD
b250ZW50U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgb3ZlcnJpZGU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAK
aW5kZXggNjY5NGNjZjguLmFkMzgxNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKQEAgLTM3LDcgKzM3LDYgQEAK
ICNpbmNsdWRlICJOYXRpdmVXZWJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTmF0aXZlV2ViV2hl
ZWxFdmVudC5oIgogI2luY2x1ZGUgIlBhZ2VDbGllbnRJbXBsLmgiCi0jaW5jbHVkZSAiUmVkaXJl
Y3RlZFhDb21wb3NpdGVXaW5kb3cuaCIKICNpbmNsdWRlICJWaWV3U3RhdGUuaCIKICNpbmNsdWRl
ICJXZWJFdmVudEZhY3RvcnkuaCIKICNpbmNsdWRlICJXZWJGdWxsU2NyZWVuQ2xpZW50R3RrLmgi
CkBAIC03Myw2ICs3MiwxNSBAQAogI2luY2x1ZGUgIldlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHku
aCIKICNlbmRpZgogCisjaWYgVVNFKFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCisjaW5j
bHVkZSAiWERhbWFnZU5vdGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybURpc3Bs
YXlYMTEuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1hVbmlxdWVSZXNvdXJjZS5oPgorI2luY2x1ZGUg
PFgxMS9YbGliLmg+CisjaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWGRhbWFnZS5oPgorI2luY2x1
ZGUgPGNhaXJvLXhsaWIuaD4KKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oWDExKQogI2luY2x1ZGUg
PGdkay9nZGt4Lmg+CiAjZW5kaWYKQEAgLTE1MSw5ICsxNTksNiBAQCB0eXBlZGVmIEhhc2hNYXA8
dWludDMyX3QsIEdVbmlxdWVQdHI8R2RrRXZlbnQ+PiBUb3VjaEV2ZW50c01hcDsKIHN0cnVjdCBf
V2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlIHsKICAgICBfV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRl
KCkKICAgICAgICAgOiB1cGRhdGVWaWV3U3RhdGVUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMs
ICZfV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlOjp1cGRhdGVWaWV3U3RhdGVUaW1lckZpcmVkKQot
I2lmIFVTRShSRURJUkVDVEVEX1hDT01QT1NJVEVfV0lORE9XKQotICAgICAgICAsIGNsZWFyUmVk
aXJlY3RlZFdpbmRvd1Nvb25UaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZfV2ViS2l0V2Vi
Vmlld0Jhc2VQcml2YXRlOjpjbGVhclJlZGlyZWN0ZWRXaW5kb3dTb29uVGltZXJGaXJlZCkKLSNl
bmRpZgogICAgIHsKICAgICB9CiAKQEAgLTE2NSwxNCArMTcwLDYgQEAgc3RydWN0IF9XZWJLaXRX
ZWJWaWV3QmFzZVByaXZhdGUgewogICAgICAgICB2aWV3U3RhdGVGbGFnc1RvVXBkYXRlID0gVmll
d1N0YXRlOjpOb0ZsYWdzOwogICAgIH0KIAotI2lmIFVTRShSRURJUkVDVEVEX1hDT01QT1NJVEVf
V0lORE9XKQotICAgIHZvaWQgY2xlYXJSZWRpcmVjdGVkV2luZG93U29vblRpbWVyRmlyZWQoKQot
ICAgIHsKLSAgICAgICAgaWYgKHJlZGlyZWN0ZWRXaW5kb3cpCi0gICAgICAgICAgICByZWRpcmVj
dGVkV2luZG93LT5yZXNpemUoSW50U2l6ZSgpKTsKLSAgICB9Ci0jZW5kaWYKLQogICAgIFdlYktp
dFdlYlZpZXdDaGlsZHJlbk1hcCBjaGlsZHJlbjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UGFnZUNs
aWVudEltcGw+IHBhZ2VDbGllbnQ7CiAgICAgUmVmUHRyPFdlYlBhZ2VQcm94eT4gcGFnZVByb3h5
OwpAQCAtMjE1LDggKzIxMiw4IEBAIHN0cnVjdCBfV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlIHsK
ICNlbmRpZgogCiAjaWYgVVNFKFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCi0gICAgc3Rk
Ojp1bmlxdWVfcHRyPFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93PiByZWRpcmVjdGVkV2luZG93
OwotICAgIFJ1bkxvb3A6OlRpbWVyPFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZT4gY2xlYXJSZWRp
cmVjdGVkV2luZG93U29vblRpbWVyOworICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdTdXJmYWNlOworICAgIFhVbmlxdWVEYW1hZ2UgYWNjZWxlcmF0ZWRD
b21wb3NpdGluZ1N1cmZhY2VEYW1hZ2U7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShEUkFHX1NVUFBP
UlQpCkBAIC0zNTUsMTMgKzM1Miw0NiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVNl
dFRvcGxldmVsT25TY3JlZW5XaW5kb3coV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZQogfQogCiAj
aWYgVVNFKFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCi1zdGF0aWMgdm9pZCB3ZWJraXRX
ZWJWaWV3QmFzZVJlc2l6ZVJlZGlyZWN0ZWRXaW5kb3coV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZp
ZXcpCitzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVNldEFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdQaXhtYXAoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXcsIFBpeG1hcCBwaXhtYXApCiB7Cisg
ICAgaWYgKFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheSgpLnR5cGUoKSAhPSBQbGF0Zm9y
bURpc3BsYXk6OlR5cGU6OlgxMSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgV2ViS2l0V2ViVmll
d0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJpdjsKKyAgICBpZiAocHJpdi0+YWNjZWxl
cmF0ZWRDb21wb3NpdGluZ1N1cmZhY2UKKyAgICAgICAgJiYgY2Fpcm9feGxpYl9zdXJmYWNlX2dl
dF9kcmF3YWJsZShwcml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nU3VyZmFjZS5nZXQoKSkgPT0g
cGl4bWFwKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAocHJpdi0+YWNjZWxlcmF0ZWRDb21w
b3NpdGluZ1N1cmZhY2UpIHsKKyAgICAgICAgaWYgKHByaXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdTdXJmYWNlRGFtYWdlKSB7CisgICAgICAgICAgICBYRGFtYWdlTm90aWZpZXI6OnNpbmdsZXRv
bigpLnJlbW92ZShwcml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nU3VyZmFjZURhbWFnZS5nZXQo
KSk7CisgICAgICAgICAgICBwcml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nU3VyZmFjZURhbWFn
ZS5yZXNldCgpOworICAgICAgICB9CisgICAgICAgIHByaXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdTdXJmYWNlID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAoIXBpeG1hcCkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgRHJhd2luZ0FyZWFQcm94eUltcGwqIGRyYXdpbmdBcmVhID0gc3RhdGlj
X2Nhc3Q8RHJhd2luZ0FyZWFQcm94eUltcGwqPihwcml2LT5wYWdlUHJveHktPmRyYXdpbmdBcmVh
KCkpOwogICAgIGlmICghZHJhd2luZ0FyZWEpCiAgICAgICAgIHJldHVybjsKLSAgICBwcml2LT5y
ZWRpcmVjdGVkV2luZG93LT5yZXNpemUoZHJhd2luZ0FyZWEtPnNpemUoKSk7CisKKyAgICBJbnRT
aXplIHNpemUgPSBkcmF3aW5nQXJlYS0+c2l6ZSgpOworICAgIGZsb2F0IGRldmljZVNjYWxlRmFj
dG9yID0gcHJpdi0+cGFnZVByb3h5LT5kZXZpY2VTY2FsZUZhY3RvcigpOworICAgIHNpemUuc2Nh
bGUoZGV2aWNlU2NhbGVGYWN0b3IpOworCisgICAgRGlzcGxheSogZGlzcGxheSA9IGRvd25jYXN0
PFBsYXRmb3JtRGlzcGxheVgxMT4oUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5KCkpLm5h
dGl2ZSgpOworICAgIEFTU0VSVChkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KFBsYXRmb3Jt
RGlzcGxheTo6c2hhcmVkRGlzcGxheSgpKS5uYXRpdmUoKSA9PSBHREtfRElTUExBWV9YRElTUExB
WShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKSk7CisgICAgR2RrVmlzdWFsKiB2aXN1YWwgPSBn
ZGtfc2NyZWVuX2dldF9yZ2JhX3Zpc3VhbChnZGtfc2NyZWVuX2dldF9kZWZhdWx0KCkpOworICAg
IGlmICghdmlzdWFsKQorICAgICAgICB2aXN1YWwgPSBnZGtfc2NyZWVuX2dldF9zeXN0ZW1fdmlz
dWFsKGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKSk7CisgICAgcHJpdi0+YWNjZWxlcmF0ZWRDb21w
b3NpdGluZ1N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb194bGliX3N1cmZhY2VfY3JlYXRlKGRpc3Bs
YXksIHBpeG1hcCwgR0RLX1ZJU1VBTF9YVklTVUFMKHZpc3VhbCksIHNpemUud2lkdGgoKSwgc2l6
ZS5oZWlnaHQoKSkpOworICAgIGNhaXJvU3VyZmFjZVNldERldmljZVNjYWxlKHByaXYtPmFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdTdXJmYWNlLmdldCgpLCBkZXZpY2VTY2FsZUZhY3RvciwgZGV2aWNl
U2NhbGVGYWN0b3IpOworICAgIHByaXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdTdXJmYWNlRGFt
YWdlID0gWERhbWFnZUNyZWF0ZShkaXNwbGF5LCBwaXhtYXAsIFhEYW1hZ2VSZXBvcnROb25FbXB0
eSk7CisgICAgWERhbWFnZU5vdGlmaWVyOjpzaW5nbGV0b24oKS5hZGQocHJpdi0+YWNjZWxlcmF0
ZWRDb21wb3NpdGluZ1N1cmZhY2VEYW1hZ2UuZ2V0KCksIFt3ZWJWaWV3XSB7CisgICAgICAgIGd0
a193aWRnZXRfcXVldWVfZHJhdyhHVEtfV0lER0VUKHdlYlZpZXcpKTsKKyAgICB9KTsKIH0KICNl
bmRpZgogCkBAIC0zNzAsMjYgKzQwMCw2IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNl
UmVhbGl6ZShHdGtXaWRnZXQqIHdpZGdldCkKICAgICBXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmll
dyA9IFdFQktJVF9XRUJfVklFV19CQVNFKHdpZGdldCk7CiAgICAgV2ViS2l0V2ViVmlld0Jhc2VQ
cml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJpdjsKIAotI2lmIFVTRShSRURJUkVDVEVEX1hDT01Q
T1NJVEVfV0lORE9XKQotICAgIGlmIChQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXkoKS50
eXBlKCkgPT0gUGxhdGZvcm1EaXNwbGF5OjpUeXBlOjpYMTEpIHsKLSAgICAgICAgQVNTRVJUKCFw
cml2LT5yZWRpcmVjdGVkV2luZG93KTsKLSAgICAgICAgRHJhd2luZ0FyZWFQcm94eUltcGwqIGRy
YXdpbmdBcmVhID0gc3RhdGljX2Nhc3Q8RHJhd2luZ0FyZWFQcm94eUltcGwqPihwcml2LT5wYWdl
UHJveHktPmRyYXdpbmdBcmVhKCkpOwotICAgICAgICBwcml2LT5yZWRpcmVjdGVkV2luZG93ID0g
UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmNyZWF0ZSgKLSAgICAgICAgICAgICpwcml2LT5w
YWdlUHJveHksCi0gICAgICAgICAgICBkcmF3aW5nQXJlYSAmJiBkcmF3aW5nQXJlYS0+aXNJbkFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkgPyBkcmF3aW5nQXJlYS0+c2l6ZSgpIDogSW50U2l6
ZSgpLAotICAgICAgICAgICAgW3dlYlZpZXddIHsKLSAgICAgICAgICAgICAgICBEcmF3aW5nQXJl
YVByb3h5SW1wbCogZHJhd2luZ0FyZWEgPSBzdGF0aWNfY2FzdDxEcmF3aW5nQXJlYVByb3h5SW1w
bCo+KHdlYlZpZXctPnByaXYtPnBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKGRyYXdpbmdBcmVhICYmIGRyYXdpbmdBcmVhLT5pc0luQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ01vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3
KEdUS19XSURHRVQod2ViVmlldykpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIGlmIChwcml2
LT5yZWRpcmVjdGVkV2luZG93ICYmIGRyYXdpbmdBcmVhKSB7Ci0gICAgICAgICAgICBkcmF3aW5n
QXJlYS0+c2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKHByaXYtPnJlZGlyZWN0
ZWRXaW5kb3ctPndpbmRvd0lEKCkpOwotICAgICAgICAgICAgaWYgKGRyYXdpbmdBcmVhLT5pc0lu
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSkKLSAgICAgICAgICAgICAgICB3ZWJraXRXZWJW
aWV3QmFzZVJlc2l6ZVJlZGlyZWN0ZWRXaW5kb3cod2ViVmlldyk7Ci0gICAgICAgIH0KLSAgICB9
Ci0jZW5kaWYKLQogICAgIGd0a193aWRnZXRfc2V0X3JlYWxpemVkKHdpZGdldCwgVFJVRSk7CiAK
ICAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb247CkBAIC00MzksMTMgKzQ0OSwxMCBAQCBzdGF0
aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVJlYWxpemUoR3RrV2lkZ2V0KiB3aWRnZXQpCiBzdGF0
aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVVucmVhbGl6ZShHdGtXaWRnZXQqIHdpZGdldCkKIHsK
ICAgICBXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFV19CQVNFKHdp
ZGdldCk7Ci0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSKSAmJiBQTEFURk9STShYMTEpCisjaWYgVVNF
KFRFWFRVUkVfTUFQUEVSKSAmJiBQTEFURk9STShYMTEpICYmICFVU0UoUkVESVJFQ1RFRF9YQ09N
UE9TSVRFX1dJTkRPVykKICAgICBpZiAoRHJhd2luZ0FyZWFQcm94eUltcGwqIGRyYXdpbmdBcmVh
ID0gc3RhdGljX2Nhc3Q8RHJhd2luZ0FyZWFQcm94eUltcGwqPih3ZWJWaWV3LT5wcml2LT5wYWdl
UHJveHktPmRyYXdpbmdBcmVhKCkpKQogICAgICAgICBkcmF3aW5nQXJlYS0+ZGVzdHJveU5hdGl2
ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZygpOwogI2VuZGlmCi0jaWYgVVNFKFJFRElSRUNU
RURfWENPTVBPU0lURV9XSU5ET1cpCi0gICAgd2ViVmlldy0+cHJpdi0+cmVkaXJlY3RlZFdpbmRv
dyA9IG51bGxwdHI7Ci0jZW5kaWYKICAgICBndGtfaW1fY29udGV4dF9zZXRfY2xpZW50X3dpbmRv
dyh3ZWJWaWV3LT5wcml2LT5pbnB1dE1ldGhvZEZpbHRlci5jb250ZXh0KCksIG51bGxwdHIpOwog
CiAgICAgR1RLX1dJREdFVF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9wYXJlbnRfY2xhc3Mp
LT51bnJlYWxpemUod2lkZ2V0KTsKQEAgLTU1Nyw2ICs1NjQsOSBAQCBzdGF0aWMgdm9pZCB3ZWJr
aXRXZWJWaWV3QmFzZURpc3Bvc2UoR09iamVjdCogZ29iamVjdCkKICAgICBnX2NhbmNlbGxhYmxl
X2NhbmNlbCh3ZWJWaWV3LT5wcml2LT5zY3JlZW5TYXZlckluaGliaXRDYW5jZWxsYWJsZS5nZXQo
KSk7CiAgICAgd2Via2l0V2ViVmlld0Jhc2VTZXRUb3BsZXZlbE9uU2NyZWVuV2luZG93KHdlYlZp
ZXcsIG51bGxwdHIpOwogICAgIHdlYlZpZXctPnByaXYtPnBhZ2VQcm94eS0+Y2xvc2UoKTsKKyNp
ZiBVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKKyAgICB3ZWJraXRXZWJWaWV3QmFz
ZVNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdQaXhtYXAod2ViVmlldywgMCk7CisjZW5kaWYKICAg
ICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9wYXJlbnRfY2xhc3MpLT5kaXNw
b3NlKGdvYmplY3QpOwogfQogCkBAIC01NzcsMzggKzU4NywzMyBAQCBzdGF0aWMgdm9pZCB3ZWJr
aXRXZWJWaWV3QmFzZUNvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKIAogc3RhdGljIGJvb2wg
d2Via2l0V2ViVmlld1JlbmRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSZXN1bHRzKFdlYktpdFdl
YlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSwgRHJhd2luZ0FyZWFQcm94eUltcGwqIGRyYXdpbmdBcmVh
LCBjYWlyb190KiBjciwgR2RrUmVjdGFuZ2xlKiBjbGlwUmVjdCkKIHsKLSNpZiBVU0UoVEVYVFVS
RV9NQVBQRVIpICYmIFVTRShSRURJUkVDVEVEX1hDT01QT1NJVEVfV0lORE9XKQorI2lmIFVTRShS
RURJUkVDVEVEX1hDT01QT1NJVEVfV0lORE9XKQogICAgIEFTU0VSVChkcmF3aW5nQXJlYSk7CiAK
ICAgICBpZiAoIWRyYXdpbmdBcmVhLT5pc0luQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgLy8gVG8gYXZvaWQgZmxhc2hlcyB3aGVuIGlu
aXRpYWxpemluZyBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBmb3IgdGhlIGZpcnN0Ci0gICAgLy8g
dGltZSwgd2Ugd2FpdCB1bnRpbCB3ZSBrbm93IHRoZXJlJ3MgYSBmcmFtZSByZWFkeSBiZWZvcmUg
cmVuZGVyaW5nLgotICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdC
YXNlLT5wcml2OwotICAgIGlmICghcHJpdi0+cmVkaXJlY3RlZFdpbmRvdykKLSAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9X
RUJfVklFV19CQVNFKHdlYlZpZXdCYXNlKS0+cHJpdjsKKyAgICBjYWlyb19zdXJmYWNlX3QqIHN1
cmZhY2UgPSBwcml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nU3VyZmFjZS5nZXQoKTsKKyAgICBj
YWlyb19zYXZlKGNyKTsKIAotICAgIHdlYmtpdFdlYlZpZXdCYXNlUmVzaXplUmVkaXJlY3RlZFdp
bmRvdyh3ZWJWaWV3QmFzZSk7Ci0gICAgaWYgKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IHBy
aXYtPnJlZGlyZWN0ZWRXaW5kb3ctPnN1cmZhY2UoKSkgewotICAgICAgICBjYWlyb19zYXZlKGNy
KTsKLQotICAgICAgICBpZiAoIXByaXYtPnBhZ2VQcm94eS0+ZHJhd3NCYWNrZ3JvdW5kKCkpIHsK
LSAgICAgICAgICAgIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBjb2xvciA9IHByaXYtPnBhZ2VQcm94
eS0+YmFja2dyb3VuZENvbG9yKCk7Ci0gICAgICAgICAgICBpZiAoY29sb3IuaGFzQWxwaGEoKSkg
ewotICAgICAgICAgICAgICAgIGNhaXJvX3JlY3RhbmdsZShjciwgY2xpcFJlY3QtPngsIGNsaXBS
ZWN0LT55LCBjbGlwUmVjdC0+d2lkdGgsIGNsaXBSZWN0LT5oZWlnaHQpOwotICAgICAgICAgICAg
ICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwgQ0FJUk9fT1BFUkFUT1JfQ0xFQVIpOwotICAgICAg
ICAgICAgICAgIGNhaXJvX2ZpbGwoY3IpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAoY29sb3IuYWxwaGEoKSA+IDApIHsKLSAgICAgICAgICAgICAgICBzZXRTb3VyY2VSR0JBRnJv
bUNvbG9yKGNyLCBjb2xvcik7Ci0gICAgICAgICAgICAgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNy
LCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOwotICAgICAgICAgICAgICAgIGNhaXJvX3JlY3Rhbmds
ZShjciwgY2xpcFJlY3QtPngsIGNsaXBSZWN0LT55LCBjbGlwUmVjdC0+d2lkdGgsIGNsaXBSZWN0
LT5oZWlnaHQpOwotICAgICAgICAgICAgICAgIGNhaXJvX2ZpbGwoY3IpOwotICAgICAgICAgICAg
fQorICAgIGlmICghc3VyZmFjZSB8fCAhcHJpdi0+cGFnZVByb3h5LT5kcmF3c0JhY2tncm91bmQo
KSkgeworICAgICAgICBjb25zdCBXZWJDb3JlOjpDb2xvciYgY29sb3IgPSBwcml2LT5wYWdlUHJv
eHktPmJhY2tncm91bmRDb2xvcigpOworICAgICAgICBpZiAoY29sb3IuaGFzQWxwaGEoKSkgewor
ICAgICAgICAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCBjbGlwUmVjdC0+eCwgY2xpcFJlY3QtPnks
IGNsaXBSZWN0LT53aWR0aCwgY2xpcFJlY3QtPmhlaWdodCk7CisgICAgICAgICAgICBjYWlyb19z
ZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9SX0NMRUFSKTsKKyAgICAgICAgICAgIGNhaXJv
X2ZpbGwoY3IpOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKGNvbG9yLmFscGhhKCkgPiAwKSB7
CisgICAgICAgICAgICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNyLCBjb2xvcik7CisgICAgICAg
ICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7CisgICAg
ICAgICAgICBjYWlyb19yZWN0YW5nbGUoY3IsIGNsaXBSZWN0LT54LCBjbGlwUmVjdC0+eSwgY2xp
cFJlY3QtPndpZHRoLCBjbGlwUmVjdC0+aGVpZ2h0KTsKKyAgICAgICAgICAgIGNhaXJvX2ZpbGwo
Y3IpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHN1cmZhY2UpIHsKICAgICAgICAgLy8g
VGhlIHN1cmZhY2UgY2FuIGJlIG1vZGlmaWVkIGJ5IHRoZSB3ZWIgcHJvY2VzcyBhdCBhbnkgdGlt
ZSwgc28gd2UgbWFyayBpdAogICAgICAgICAvLyBhcyBkaXJ0eSB0byBlbnN1cmUgd2UgYWx3YXlz
IHJlbmRlciB0aGUgdXBkYXRlZCBjb250ZW50cyBhcyBzb29uIGFzIHBvc3NpYmxlLgogICAgICAg
ICBjYWlyb19zdXJmYWNlX21hcmtfZGlydHkoc3VyZmFjZSk7CkBAIC02MTYsMTAgKzYyMSwxMCBA
QCBzdGF0aWMgYm9vbCB3ZWJraXRXZWJWaWV3UmVuZGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jl
c3VsdHMoV2ViS2l0V2ViVmlld0Jhc2UqCiAgICAgICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFj
ZShjciwgc3VyZmFjZSwgMCwgMCk7CiAgICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwgQ0FJ
Uk9fT1BFUkFUT1JfT1ZFUik7CiAgICAgICAgIGNhaXJvX2ZpbGwoY3IpOwotCi0gICAgICAgIGNh
aXJvX3Jlc3RvcmUoY3IpOwogICAgIH0KIAorICAgIGNhaXJvX3Jlc3RvcmUoY3IpOworCiAgICAg
cmV0dXJuIHRydWU7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTSh3ZWJWaWV3QmFzZSk7CkBAIC03
MTcsMjIgKzcyMiw4IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlU2l6ZUFsbG9jYXRl
KEd0a1dpZGdldCogd2lkZ2V0LCBHdGtBbGxvY2F0aW9uKiBhbGxvCiAgICAgICAgIGd0a193aWRn
ZXRfc2l6ZV9hbGxvY2F0ZShwcml2LT5hdXRoZW50aWNhdGlvbkRpYWxvZywgJmNoaWxkQWxsb2Nh
dGlvbik7CiAgICAgfQogCi0gICAgRHJhd2luZ0FyZWFQcm94eUltcGwqIGRyYXdpbmdBcmVhID0g
c3RhdGljX2Nhc3Q8RHJhd2luZ0FyZWFQcm94eUltcGwqPihwcml2LT5wYWdlUHJveHktPmRyYXdp
bmdBcmVhKCkpOwotICAgIGlmICghZHJhd2luZ0FyZWEpCi0gICAgICAgIHJldHVybjsKLQotCi0j
aWYgVVNFKFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCi0gICAgaWYgKHByaXYtPnJlZGly
ZWN0ZWRXaW5kb3cgJiYgZHJhd2luZ0FyZWEtPmlzSW5BY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9k
ZSgpKSB7Ci0gICAgICAgIC8vIFdlIGRvbid0IHVzZSB3ZWJraXRXZWJWaWV3QmFzZVJlc2l6ZVJl
ZGlyZWN0ZWRXaW5kb3cgaGVyZSwgYmVjYXVzZSB3ZSB3YW50IHRvIHVwZGF0ZSB0aGUKLSAgICAg
ICAgLy8gcmVkaXJlY3RlZCB3aW5kb3cgc2l6ZSBiZWZvcmUgdGhlIGRyYXdpbmcgYXJlYSwgYmVj
YXVzZSBvbiByZXNpemUgdGhlIGRyYXdpbmcgYXJlYSBzZW5kcwotICAgICAgICAvLyB0aGUgVXBk
YXRlQmFja2luZ1N0b3JlU3RhdGUgbWVzc2FnZSB0byB0aGUgd2ViIHByb2Nlc3MgYW5kIHdhaXRz
IGZvciBpdHMgcmVwbHkuIFdlIHdhbnQKLSAgICAgICAgLy8gdGhlIHdlYiBwcm9jZXNzIHRvIHVz
ZSB0aGUgbmV3IHh3aW5kb3cgc2l6ZSB3aGVuIFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlIG1lc3Nh
Z2UgYXJyaXZlcy4KLSAgICAgICAgcHJpdi0+cmVkaXJlY3RlZFdpbmRvdy0+cmVzaXplKHZpZXdS
ZWN0LnNpemUoKSk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBkcmF3aW5nQXJlYS0+c2V0U2l6ZSh2
aWV3UmVjdC5zaXplKCksIEludFNpemUoKSwgSW50U2l6ZSgpKTsKKyAgICBpZiAoRHJhd2luZ0Fy
ZWFQcm94eUltcGwqIGRyYXdpbmdBcmVhID0gc3RhdGljX2Nhc3Q8RHJhd2luZ0FyZWFQcm94eUlt
cGwqPihwcml2LT5wYWdlUHJveHktPmRyYXdpbmdBcmVhKCkpKQorICAgICAgICBkcmF3aW5nQXJl
YS0+c2V0U2l6ZSh2aWV3UmVjdC5zaXplKCksIEludFNpemUoKSwgSW50U2l6ZSgpKTsKIH0KIAog
c3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VHZXRQcmVmZXJyZWRXaWR0aChHdGtXaWRnZXQq
IHdpZGdldCwgZ2ludCogbWluaW11bVNpemUsIGdpbnQqIG5hdHVyYWxTaXplKQpAQCAtMTI4NCwx
MCArMTI3NSw2IEBAIFdlYlBhZ2VQcm94eSogd2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKFdlYktp
dFdlYlZpZXdCYXNlKiB3ZWJraXRXZWJWaWV3QmFzZSkKICNpZiBIQVZFKEdUS19TQ0FMRV9GQUNU
T1IpCiBzdGF0aWMgdm9pZCBkZXZpY2VTY2FsZUZhY3RvckNoYW5nZWQoV2ViS2l0V2ViVmlld0Jh
c2UqIHdlYmtpdFdlYlZpZXdCYXNlKQogewotI2lmIFVTRShSRURJUkVDVEVEX1hDT01QT1NJVEVf
V0lORE9XKQotICAgIGlmICh3ZWJraXRXZWJWaWV3QmFzZS0+cHJpdi0+cmVkaXJlY3RlZFdpbmRv
dykKLSAgICAgICAgd2Via2l0V2ViVmlld0Jhc2VSZXNpemVSZWRpcmVjdGVkV2luZG93KHdlYmtp
dFdlYlZpZXdCYXNlKTsKLSNlbmRpZgogICAgIHdlYmtpdFdlYlZpZXdCYXNlLT5wcml2LT5wYWdl
UHJveHktPnNldEludHJpbnNpY0RldmljZVNjYWxlRmFjdG9yKGd0a193aWRnZXRfZ2V0X3NjYWxl
X2ZhY3RvcihHVEtfV0lER0VUKHdlYmtpdFdlYlZpZXdCYXNlKSkpOwogfQogI2VuZGlmIC8vIEhB
VkUoR1RLX1NDQUxFX0ZBQ1RPUikKQEAgLTE1NzcsMzcgKzE1NjQsMTkgQEAgdm9pZCB3ZWJraXRX
ZWJWaWV3QmFzZVJlc2V0Q2xpY2tDb3VudGVyKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJraXRXZWJW
aWV3QmFzZSkKICAgICB3ZWJraXRXZWJWaWV3QmFzZS0+cHJpdi0+Y2xpY2tDb3VudGVyLnJlc2V0
KCk7CiB9CiAKLSNpZiBVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKLXN0YXRpYyB2
b2lkIHdlYmtpdFdlYlZpZXdCYXNlQ2xlYXJSZWRpcmVjdGVkV2luZG93U29vbihXZWJLaXRXZWJW
aWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2UpCi17Ci0gICAgc3RhdGljIGNvbnN0IGRvdWJsZSBj
bGVhclJlZGlyZWN0ZWRXaW5kb3dTb29uRGVsYXkgPSAyOwotICAgIHdlYmtpdFdlYlZpZXdCYXNl
LT5wcml2LT5jbGVhclJlZGlyZWN0ZWRXaW5kb3dTb29uVGltZXIuc3RhcnRPbmVTaG90KGNsZWFy
UmVkaXJlY3RlZFdpbmRvd1Nvb25EZWxheSk7Ci19Ci0jZW5kaWYKLQotdm9pZCB3ZWJraXRXZWJW
aWV3QmFzZVdpbGxFbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKFdlYktpdFdlYlZpZXdC
YXNlKiB3ZWJraXRXZWJWaWV3QmFzZSkKK3ZvaWQgd2Via2l0V2ViVmlld0Jhc2VFbnRlckFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdNb2RlKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJraXRXZWJWaWV3QmFz
ZSwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgbGF5ZXJUcmVlQ29udGV4dCkKIHsKICNpZiBVU0Uo
UkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKLSAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZh
dGUqIHByaXYgPSB3ZWJraXRXZWJWaWV3QmFzZS0+cHJpdjsKLSAgICBpZiAoIXByaXYtPnJlZGly
ZWN0ZWRXaW5kb3cpCi0gICAgICAgIHJldHVybjsKLSAgICBEcmF3aW5nQXJlYVByb3h5SW1wbCog
ZHJhd2luZ0FyZWEgPSBzdGF0aWNfY2FzdDxEcmF3aW5nQXJlYVByb3h5SW1wbCo+KHByaXYtPnBh
Z2VQcm94eS0+ZHJhd2luZ0FyZWEoKSk7Ci0gICAgaWYgKCFkcmF3aW5nQXJlYSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgd2Via2l0V2ViVmlld0Jhc2VSZXNpemVSZWRpcmVjdGVkV2luZG93KHdl
YmtpdFdlYlZpZXdCYXNlKTsKLQotICAgIC8vIENsZWFyIHRoZSByZWRpcmVjdGVkIHdpbmRvdyBp
ZiB3ZSBkb24ndCBlbnRlciBBQyBtb2RlIGluIHRoZSBlbmQuCi0gICAgd2Via2l0V2ViVmlld0Jh
c2VDbGVhclJlZGlyZWN0ZWRXaW5kb3dTb29uKHdlYmtpdFdlYlZpZXdCYXNlKTsKKyAgICB3ZWJr
aXRXZWJWaWV3QmFzZVNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdQaXhtYXAod2Via2l0V2ViVmll
d0Jhc2UsIGxheWVyVHJlZUNvbnRleHQuY29udGV4dElEKTsKICNlbHNlCiAgICAgVU5VU0VEX1BB
UkFNKHdlYmtpdFdlYlZpZXdCYXNlKTsKICNlbmRpZgogfQogCi12b2lkIHdlYmtpdFdlYlZpZXdC
YXNlRW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShXZWJLaXRXZWJWaWV3QmFzZSogd2Vi
a2l0V2ViVmlld0Jhc2UpCit2b2lkIHdlYmtpdFdlYlZpZXdCYXNlVXBkYXRlQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGUoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdlYlZpZXdCYXNlLCBjb25z
dCBMYXllclRyZWVDb250ZXh0JiBsYXllclRyZWVDb250ZXh0KQogewogI2lmIFVTRShSRURJUkVD
VEVEX1hDT01QT1NJVEVfV0lORE9XKQotICAgIHdlYmtpdFdlYlZpZXdCYXNlLT5wcml2LT5jbGVh
clJlZGlyZWN0ZWRXaW5kb3dTb29uVGltZXIuc3RvcCgpOworICAgIHdlYmtpdFdlYlZpZXdCYXNl
U2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1BpeG1hcCh3ZWJraXRXZWJWaWV3QmFzZSwgbGF5ZXJU
cmVlQ29udGV4dC5jb250ZXh0SUQpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0od2Via2l0V2Vi
Vmlld0Jhc2UpOwogI2VuZGlmCkBAIC0xNjE2LDEwICsxNTg1LDcgQEAgdm9pZCB3ZWJraXRXZWJW
aWV3QmFzZUVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoV2ViS2l0V2ViVmlld0Jhc2Uq
IHdlYmtpdFcKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VFeGl0QWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z01vZGUoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdlYlZpZXdCYXNlKQogewogI2lmIFVTRShS
RURJUkVDVEVEX1hDT01QT1NJVEVfV0lORE9XKQotICAgIC8vIFJlc2l6ZSB0aGUgd2luZG93IGxh
dGVyIHRvIGVuc3VyZSB3ZSBoYXZlIGFscmVhZHkgcmVuZGVyZWQgdGhlCi0gICAgLy8gbm9uIGNv
bXBvc2l0ZWQgY29udGVudHMgYW5kIGF2b2lkIGZsaWNrZXJpbmcuIFdlIGNhbiBhbHNvIGF2b2lk
IHRoZQotICAgIC8vIHdpbmRvdyByZXNpemUgZW50aXJlbHkgaWYgd2Ugc3dpdGNoIGJhY2sgdG8g
QUMgbW9kZSBxdWlja2x5LgotICAgIHdlYmtpdFdlYlZpZXdCYXNlQ2xlYXJSZWRpcmVjdGVkV2lu
ZG93U29vbih3ZWJraXRXZWJWaWV3QmFzZSk7CisgICAgd2Via2l0V2ViVmlld0Jhc2VTZXRBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nUGl4bWFwKHdlYmtpdFdlYlZpZXdCYXNlLCAwKTsKICNlbHNlCiAg
ICAgVU5VU0VEX1BBUkFNKHdlYmtpdFdlYlZpZXdCYXNlKTsKICNlbmRpZgpAQCAtMTYzMCwyMiAr
MTU5NiwxOCBAQCB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlRGlkUmVsYXVuY2hXZWJQcm9jZXNzKFdl
YktpdFdlYlZpZXdCYXNlKiB3ZWJraXRXZWJWaWV3QmFzZQogICAgIC8vIFF1ZXVlIGEgcmVzaXpl
IHRvIGVuc3VyZSB0aGUgbmV3IERyYXdpbmdBcmVhUHJveHkgaXMgcmVzaXplZC4KICAgICBndGtf
d2lkZ2V0X3F1ZXVlX3Jlc2l6ZV9ub19yZWRyYXcoR1RLX1dJREdFVCh3ZWJraXRXZWJWaWV3QmFz
ZSkpOwogCi0jaWYgUExBVEZPUk0oWDExKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisjaWYgUExB
VEZPUk0oWDExKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmICFVU0UoUkVESVJFQ1RFRF9YQ09N
UE9TSVRFX1dJTkRPVykKICAgICBpZiAoUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5KCku
dHlwZSgpICE9IFBsYXRmb3JtRGlzcGxheTo6VHlwZTo6WDExKQogICAgICAgICByZXR1cm47CiAK
ICAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJraXRXZWJWaWV3QmFzZS0+
cHJpdjsKICAgICBEcmF3aW5nQXJlYVByb3h5SW1wbCogZHJhd2luZ0FyZWEgPSBzdGF0aWNfY2Fz
dDxEcmF3aW5nQXJlYVByb3h5SW1wbCo+KHByaXYtPnBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKSk7
CiAgICAgQVNTRVJUKGRyYXdpbmdBcmVhKTsKLSNpZiBVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRF
X1dJTkRPVykKLSAgICBpZiAoIXByaXYtPnJlZGlyZWN0ZWRXaW5kb3cpCi0gICAgICAgIHJldHVy
bjsKLSAgICB1aW50NjRfdCB3aW5kb3dJRCA9IHByaXYtPnJlZGlyZWN0ZWRXaW5kb3ctPndpbmRv
d0lEKCk7Ci0jZWxzZQorCiAgICAgaWYgKCFndGtfd2lkZ2V0X2dldF9yZWFsaXplZChHVEtfV0lE
R0VUKHdlYmtpdFdlYlZpZXdCYXNlKSkpCiAgICAgICAgIHJldHVybjsKKwogICAgIHVpbnQ2NF90
IHdpbmRvd0lEID0gR0RLX1dJTkRPV19YSUQoZ3RrX3dpZGdldF9nZXRfd2luZG93KEdUS19XSURH
RVQod2Via2l0V2ViVmlld0Jhc2UpKSk7Ci0jZW5kaWYKICAgICBkcmF3aW5nQXJlYS0+c2V0TmF0
aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKHdpbmRvd0lEKTsKICNlbHNlCiAgICAgVU5V
U0VEX1BBUkFNKHdlYmtpdFdlYlZpZXdCYXNlKTsKQEAgLTE2NTQsNyArMTYxNiw5IEBAIHZvaWQg
d2Via2l0V2ViVmlld0Jhc2VEaWRSZWxhdW5jaFdlYlByb2Nlc3MoV2ViS2l0V2ViVmlld0Jhc2Uq
IHdlYmtpdFdlYlZpZXdCYXNlCiAKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VQYWdlQ2xvc2VkKFdl
YktpdFdlYlZpZXdCYXNlKiB3ZWJraXRXZWJWaWV3QmFzZSkKIHsKLSNpZiBQTEFURk9STShYMTEp
ICYmIFVTRShURVhUVVJFX01BUFBFUikKKyNpZiBVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJ
TkRPVykKKyAgICB3ZWJraXRXZWJWaWV3QmFzZVNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdQaXht
YXAod2Via2l0V2ViVmlld0Jhc2UsIDApOworI2VsaWYgUExBVEZPUk0oWDExKSAmJiBVU0UoVEVY
VFVSRV9NQVBQRVIpCiAgICAgaWYgKFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheSgpLnR5
cGUoKSAhPSBQbGF0Zm9ybURpc3BsYXk6OlR5cGU6OlgxMSkKICAgICAgICAgcmV0dXJuOwogCkBA
IC0xNjY1LDkgKzE2MjksNSBAQCB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlUGFnZUNsb3NlZChXZWJL
aXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2UpCiAgICAgRHJhd2luZ0FyZWFQcm94eUlt
cGwqIGRyYXdpbmdBcmVhID0gc3RhdGljX2Nhc3Q8RHJhd2luZ0FyZWFQcm94eUltcGwqPihwcml2
LT5wYWdlUHJveHktPmRyYXdpbmdBcmVhKCkpOwogICAgIEFTU0VSVChkcmF3aW5nQXJlYSk7CiAg
ICAgZHJhd2luZ0FyZWEtPmRlc3Ryb3lOYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmco
KTsKLQotI2lmIFVTRShSRURJUkVDVEVEX1hDT01QT1NJVEVfV0lORE9XKQotICAgIHByaXYtPnJl
ZGlyZWN0ZWRXaW5kb3cgPSBudWxscHRyOwogI2VuZGlmCi0jZW5kaWYgLy8gUExBVEZPUk0oWDEx
KSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oCmluZGV4IGQ5
YWNiOTguLjZmNWJhOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oCkBAIC03MSw4ICs3MSw4IEBA
IHZvaWQgd2Via2l0V2ViVmlld0Jhc2VBZGRBdXRoZW50aWNhdGlvbkRpYWxvZyhXZWJLaXRXZWJW
aWV3QmFzZSosIEd0a1dpZGdldCogYXV0CiB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlQ2FuY2VsQXV0
aGVudGljYXRpb25EaWFsb2coV2ViS2l0V2ViVmlld0Jhc2UqKTsKIHZvaWQgd2Via2l0V2ViVmll
d0Jhc2VBZGRXZWJJbnNwZWN0b3IoV2ViS2l0V2ViVmlld0Jhc2UqLCBHdGtXaWRnZXQqIGluc3Bl
Y3RvciwgV2ViS2l0OjpBdHRhY2htZW50U2lkZSk7CiB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlUmVz
ZXRDbGlja0NvdW50ZXIoV2ViS2l0V2ViVmlld0Jhc2UqKTsKLXZvaWQgd2Via2l0V2ViVmlld0Jh
c2VXaWxsRW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShXZWJLaXRXZWJWaWV3QmFzZSop
Owotdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUo
V2ViS2l0V2ViVmlld0Jhc2UqKTsKK3ZvaWQgd2Via2l0V2ViVmlld0Jhc2VFbnRlckFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdNb2RlKFdlYktpdFdlYlZpZXdCYXNlKiwgY29uc3QgV2ViS2l0OjpMYXll
clRyZWVDb250ZXh0Jik7Cit2b2lkIHdlYmtpdFdlYlZpZXdCYXNlVXBkYXRlQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGUoV2ViS2l0V2ViVmlld0Jhc2UqLCBjb25zdCBXZWJLaXQ6OkxheWVyVHJl
ZUNvbnRleHQmKTsKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VFeGl0QWNjZWxlcmF0ZWRDb21wb3Np
dGluZ01vZGUoV2ViS2l0V2ViVmlld0Jhc2UqKTsKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VEaWRS
ZWxhdW5jaFdlYlByb2Nlc3MoV2ViS2l0V2ViVmlld0Jhc2UqKTsKIHZvaWQgd2Via2l0V2ViVmll
d0Jhc2VQYWdlQ2xvc2VkKFdlYktpdFdlYlZpZXdCYXNlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaAppbmRleCA0MTNmZTNmLi42MGQ3OWM2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmgKQEAgLTEzMCw3ICsxMzAs
NiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBlbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlKHVpbnQ2NF90IC8qIGJhY2tpbmdTdG9yZVN0YXRlSUQgKi8sIGNvbnN0IExheWVyVHJl
ZUNvbnRleHQmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlKHVpbnQ2NF90IC8qIGJhY2tpbmdTdG9yZVN0YXRlSUQgKi8sIGNvbnN0IFVwZGF0ZUlu
Zm8mKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01v
ZGUodWludDY0X3QgLyogYmFja2luZ1N0b3JlU3RhdGVJRCAqLywgY29uc3QgTGF5ZXJUcmVlQ29u
dGV4dCYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCB3aWxsRW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZSh1aW50NjRfdCAvKiBiYWNraW5nU3RvcmVTdGF0ZUlEICovKSB7IH0KICNpZiBQTEFU
Rk9STShDT0NPQSkKICAgICB2aXJ0dWFsIHZvaWQgZGlkVXBkYXRlR2VvbWV0cnkoKSB7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgaW50cmluc2ljQ29udGVudFNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Ry
YXdpbmdBcmVhUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJh
d2luZ0FyZWFQcm94eS5tZXNzYWdlcy5pbgppbmRleCA4ZDUxY2RlLi40NzM2MGUzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5tZXNzYWdlcy5p
bgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5tZXNzYWdl
cy5pbgpAQCAtMjYsNyArMjYsNiBAQCBtZXNzYWdlcyAtPiBEcmF3aW5nQXJlYVByb3h5IHsKICAg
ICBFbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0
YXRlSUQsIFdlYktpdDo6TGF5ZXJUcmVlQ29udGV4dCBjb250ZXh0KQogICAgIEV4aXRBY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBXZWJLaXQ6
OlVwZGF0ZUluZm8gdXBkYXRlSW5mbykKICAgICBVcGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5n
TW9kZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBXZWJLaXQ6OkxheWVyVHJlZUNvbnRl
eHQgY29udGV4dCkKLSAgICBXaWxsRW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSh1aW50
NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlEKQogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgLy8g
VXNlZCBieSBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYVByb3h5LgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAKaW5kZXggMjA2OTMy
NS4uMjQ3NjI5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdB
cmVhUHJveHlJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0Fy
ZWFQcm94eUltcGwuY3BwCkBAIC0xNTcsMTUgKzE1NywxNiBAQCB2b2lkIERyYXdpbmdBcmVhUHJv
eHlJbXBsOjpkaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSh1aW50NjRfdCBiYWNraW5nU3RvcmVT
dGF0ZQogICAgIG1fd2ViUGFnZVByb3h5LnByb2Nlc3MoKS5yZXNwb25zaXZlbmVzc1RpbWVyKCku
c3RvcCgpOwogCiAgICAgaWYgKGxheWVyVHJlZUNvbnRleHQgIT0gbV9sYXllclRyZWVDb250ZXh0
KSB7Ci0gICAgICAgIGlmICghbV9sYXllclRyZWVDb250ZXh0LmlzRW1wdHkoKSkgeworICAgICAg
ICBpZiAobGF5ZXJUcmVlQ29udGV4dC5pc0VtcHR5KCkgJiYgIW1fbGF5ZXJUcmVlQ29udGV4dC5p
c0VtcHR5KCkpIHsKICAgICAgICAgICAgIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgp
OwogICAgICAgICAgICAgQVNTRVJUKG1fbGF5ZXJUcmVlQ29udGV4dC5pc0VtcHR5KCkpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKCFsYXllclRyZWVDb250ZXh0LmlzRW1wdHkoKSkgeworICAg
ICAgICB9IGVsc2UgaWYgKCFsYXllclRyZWVDb250ZXh0LmlzRW1wdHkoKSAmJiBtX2xheWVyVHJl
ZUNvbnRleHQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBlbnRlckFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdNb2RlKGxheWVyVHJlZUNvbnRleHQpOwogICAgICAgICAgICAgQVNTRVJUKGxheWVyVHJl
ZUNvbnRleHQgPT0gbV9sYXllclRyZWVDb250ZXh0KTsKLSAgICAgICAgfSAgICAgICAgICAgIAor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z01vZGUobGF5ZXJUcmVlQ29udGV4dCk7CisgICAgICAgICAgICBBU1NFUlQobGF5ZXJUcmVlQ29u
dGV4dCA9PSBtX2xheWVyVHJlZUNvbnRleHQpOworICAgICAgICB9CiAgICAgfQogCiAgICAgaWYg
KG1fbmV4dEJhY2tpbmdTdG9yZVN0YXRlSUQgIT0gbV9jdXJyZW50QmFja2luZ1N0b3JlU3RhdGVJ
RCkKQEAgLTE3Myw3ICsxNzQsNyBAQCB2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpkaWRVcGRh
dGVCYWNraW5nU3RvcmVTdGF0ZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZQogICAgIGVsc2Ug
ewogICAgICAgICBtX2hhc1JlY2VpdmVkRmlyc3RVcGRhdGUgPSB0cnVlOwogCi0jaWYgVVNFKFRF
WFRVUkVfTUFQUEVSKSAmJiBQTEFURk9STShHVEspCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKSAm
JiBQTEFURk9STShHVEspICYmICFVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKICAg
ICAgICAgaWYgKG1fcGVuZGluZ05hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZykgewog
ICAgICAgICAgICAgc2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKG1fcGVuZGlu
Z05hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyk7CiAgICAgICAgICAgICBtX3BlbmRp
bmdOYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcgPSAwOwpAQCAtMjIxLDE1ICsyMjIs
NiBAQCB2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjp1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZSh1aW50NjRfdCBiYWNraW5nU3RvcgogICAgIHVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdNb2RlKGxheWVyVHJlZUNvbnRleHQpOwogfQogCi12b2lkIERyYXdpbmdBcmVhUHJveHlJ
bXBsOjp3aWxsRW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSh1aW50NjRfdCBiYWNraW5n
U3RvcmVTdGF0ZUlEKQotewotICAgIC8vIFdpbGxFbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdN
b2RlIG1lc3NhZ2UgaXMgc2VudCB3aGVuIHRoZSBMYXllclRyZWVIb3N0IGlzIGNyZWF0ZWQgaW4g
dGhlIFdlYiBQcm9jZXNzLgotICAgIC8vIFRoaXMgY2FuIGhhcHBlbiB3aGlsZSB0aGVyZSdzIHN0
aWxsIGEgRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUgcGVuZGluZywgaW4gd2hpY2ggY2FzZSB3
ZSBhcmUgcmVjZWl2aW5nCi0gICAgLy8gaGVyZSB0aGUgbmV3IGJhY2tpbmdTdG9yZVN0YXRlSUQs
IGJ1dCBtX2N1cnJlbnRCYWNraW5nU3RvcmVTdGF0ZUlEIGhhc24ndCBiZWVuIHVwZGF0ZWQgeWV0
LgotICAgIEFTU0VSVF9BUkcoYmFja2luZ1N0b3JlU3RhdGVJRCwgYmFja2luZ1N0b3JlU3RhdGVJ
RCA8PSBtX25leHRCYWNraW5nU3RvcmVTdGF0ZUlEKTsKLSAgICBtX3dlYlBhZ2VQcm94eS53aWxs
RW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpOwotfQotCiB2b2lkIERyYXdpbmdBcmVh
UHJveHlJbXBsOjppbmNvcnBvcmF0ZVVwZGF0ZShjb25zdCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZv
KQogewogICAgIEFTU0VSVCghaXNJbkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkpOwpAQCAt
MzE1LDcgKzMwNyw3IEBAIHZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OmVudGVyQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4CiAgICAgbV93ZWJQYWdlUHJv
eHkuZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShsYXllclRyZWVDb250ZXh0KTsKIH0K
IAotI2lmIFVTRShURVhUVVJFX01BUFBFUikgJiYgUExBVEZPUk0oR1RLKQorI2lmIFVTRShURVhU
VVJFX01BUFBFUikgJiYgUExBVEZPUk0oR1RLKSAmJiAhVVNFKFJFRElSRUNURURfWENPTVBPU0lU
RV9XSU5ET1cpCiB2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpzZXROYXRpdmVTdXJmYWNlSGFu
ZGxlRm9yQ29tcG9zaXRpbmcodWludDY0X3QgaGFuZGxlKQogewogICAgIGlmICghbV9oYXNSZWNl
aXZlZEZpcnN0VXBkYXRlKSB7CkBAIC0zNTEsOCArMzQzLDcgQEAgdm9pZCBEcmF3aW5nQXJlYVBy
b3h5SW1wbDo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkKICAgICBBU1NFUlQoaXNJ
bkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkpOwogCiAgICAgbV9sYXllclRyZWVDb250ZXh0
ID0gTGF5ZXJUcmVlQ29udGV4dCgpOwotICAgIGlmICghYWx3YXlzVXNlQ29tcG9zaXRpbmcoKSkK
LSAgICAgICAgbV93ZWJQYWdlUHJveHkuZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCk7
CisgICAgbV93ZWJQYWdlUHJveHkuZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCk7CiB9
CiAKIHZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OnVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oCmluZGV4IDg4MTlh
OTUuLjFlZDZkMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5n
QXJlYVByb3h5SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJl
YVByb3h5SW1wbC5oCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzUmVj
ZWl2ZWRGaXJzdFVwZGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzUmVjZWl2ZWRGaXJzdFVwZGF0
ZTsgfQogCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSKSAmJiBQTEFURk9STShHVEspCisjaWYgVVNF
KFRFWFRVUkVfTUFQUEVSKSAmJiBQTEFURk9STShHVEspICYmICFVU0UoUkVESVJFQ1RFRF9YQ09N
UE9TSVRFX1dJTkRPVykKICAgICB2b2lkIHNldE5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3Np
dGluZyh1aW50NjRfdCk7CiAgICAgdm9pZCBkZXN0cm95TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNv
bXBvc2l0aW5nKCk7CiAjZW5kaWYKQEAgLTY5LDcgKzY5LDYgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUodWludDY0X3QgYmFja2luZ1N0b3JlU3Rh
dGVJRCwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpIG92ZXJyaWRlOwogICAgIHZvaWQgZXhpdEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQsIGNv
bnN0IFVwZGF0ZUluZm8mKSBvdmVycmlkZTsKICAgICB2b2lkIHVwZGF0ZUFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdNb2RlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQsIGNvbnN0IExheWVyVHJl
ZUNvbnRleHQmKSBvdmVycmlkZTsKLSAgICB2b2lkIHdpbGxFbnRlckFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdNb2RlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQpIG92ZXJyaWRlOwogCiAgICAg
dm9pZCBpbmNvcnBvcmF0ZVVwZGF0ZShjb25zdCBVcGRhdGVJbmZvJik7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvUGFnZUNsaWVudC5oCmluZGV4IGQyYWM5NDQuLjM1ODFhMjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaApAQCAtMjM1LDcgKzIzNSw2IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXll
clRyZWVDb250ZXh0JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBleGl0QWNjZWxlcmF0ZWRDb21w
b3NpdGluZ01vZGUoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHdpbGxFbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkgPSAwOwogCiAjaWYgUExB
VEZPUk0oTUFDKQogICAgIHZpcnR1YWwgdm9pZCBwbHVnaW5Gb2N1c09yV2luZG93Rm9jdXNDaGFu
Z2VkKHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyLCBib29sIHBsdWdp
bkhhc0ZvY3VzQW5kV2luZG93SGFzRm9jdXMpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggMWM5NjdjYi4uNzNiOWI2MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTU0NjUsMTEgKzU0NjUsNiBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6dXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5
ZXJUcmVlQ29udGV4dCYgbGF5ZQogICAgIG1fcGFnZUNsaWVudC51cGRhdGVBY2NlbGVyYXRlZENv
bXBvc2l0aW5nTW9kZShsYXllclRyZWVDb250ZXh0KTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6
OndpbGxFbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkKLXsKLSAgICBtX3BhZ2VDbGll
bnQud2lsbEVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKLX0KLQogdm9pZCBXZWJQ
YWdlUHJveHk6OmJhY2tGb3J3YXJkQ2xlYXIoKQogewogICAgIG1fYmFja0ZvcndhcmRMaXN0LT5j
bGVhcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDhkN2Q4
MTUuLjkzYzUxZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAg
LTgyNCw3ICs4MjQsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGVudGVyQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpOwogICAgIHZpcnR1YWwg
dm9pZCBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKICAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYp
OwotICAgIHZvaWQgd2lsbEVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKIAogICAg
IGVudW0gVW5kb09yUmVkbyB7IFVuZG8sIFJlZG8gfTsKICAgICB2b2lkIGFkZEVkaXRDb21tYW5k
KFdlYkVkaXRDb21tYW5kUHJveHkqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9lZmwvV2ViVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3
LmgKaW5kZXggMzA3N2JmZC4uNjQxZjA3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2VmbC9XZWJWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9X
ZWJWaWV3LmgKQEAgLTIyMSw3ICsyMjEsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZW50ZXJBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0Jikgb3ZlcnJpZGU7
CiAgICAgdm9pZCBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSBvdmVycmlkZTsKICAg
ICB2b2lkIHVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNv
bnRleHQmKSBvdmVycmlkZTsKLSAgICB2b2lkIHdpbGxFbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlKCkgb3ZlcnJpZGUgeyB9CiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAgICAg
V2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eUNsaWVudCYgZnVsbFNjcmVlbk1hbmFnZXJQcm94eUNs
aWVudCgpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0
ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMTgyNTljMy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDI5MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLDIwMTQgSWdhbGlhIFMuTC4K
LSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZWRpcmVjdGVkWENv
bXBvc2l0ZVdpbmRvdy5oIgotCi0jaWYgVVNFKFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cp
Ci0KLSNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0NhaXJvVXRp
bGl0aWVzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybURpc3BsYXlYMTEuaD4KLSNpbmNs
dWRlIDxYMTEvWGxpYi5oPgotI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hjb21wb3NpdGUuaD4K
LSNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9YZGFtYWdlLmg+Ci0jaW5jbHVkZSA8Y2Fpcm8teGxp
Yi5oPgotI2luY2x1ZGUgPGdkay9nZGt4Lmg+Ci0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUg
PGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci0KLWNsYXNzIFhEYW1hZ2VOb3RpZmllciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoWERhbWFnZU5vdGlmaWVyKTsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgaW50IHNfZGFtYWdlRXZlbnRCYXNlOwotCi0gICAgWERhbWFnZU5vdGlm
aWVyKCkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBhZGQoV2luZG93IHdpbmRvdywgc3RkOjpm
dW5jdGlvbjx2b2lkKCk+JiYgbm90aWZ5RnVuY3Rpb24pCi0gICAgewotICAgICAgICBpZiAobV9u
b3RpZnlGdW5jdGlvbnMuaXNFbXB0eSgpKQotICAgICAgICAgICAgZ2RrX3dpbmRvd19hZGRfZmls
dGVyKG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRmlsdGVyRnVuYz4oJmZpbHRlclhEYW1h
Z2VFdmVudCksIHRoaXMpOwotICAgICAgICBtX25vdGlmeUZ1bmN0aW9ucy5hZGQod2luZG93LCBX
VEZNb3ZlKG5vdGlmeUZ1bmN0aW9uKSk7Ci0gICAgfQotCi0gICAgdm9pZCByZW1vdmUoV2luZG93
IHdpbmRvdykKLSAgICB7Ci0gICAgICAgIG1fbm90aWZ5RnVuY3Rpb25zLnJlbW92ZSh3aW5kb3cp
OwotICAgICAgICBpZiAobV9ub3RpZnlGdW5jdGlvbnMuaXNFbXB0eSgpKQotICAgICAgICAgICAg
Z2RrX3dpbmRvd19yZW1vdmVfZmlsdGVyKG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRmls
dGVyRnVuYz4oJmZpbHRlclhEYW1hZ2VFdmVudCksIHRoaXMpOwotICAgIH0KLQotcHJpdmF0ZToK
LSAgICBzdGF0aWMgR2RrRmlsdGVyUmV0dXJuIGZpbHRlclhEYW1hZ2VFdmVudChHZGtYRXZlbnQq
IGV2ZW50LCBHZGtFdmVudCosIFhEYW1hZ2VOb3RpZmllciogbm90aWZpZXIpCi0gICAgewotICAg
ICAgICByZXR1cm4gbm90aWZpZXItPmZpbHRlclhFdmVudChzdGF0aWNfY2FzdDxYRXZlbnQqPihl
dmVudCkpOwotICAgIH0KLQotICAgIEdka0ZpbHRlclJldHVybiBmaWx0ZXJYRXZlbnQoWEV2ZW50
KiBldmVudCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChldmVudC0+dHlwZSAhPSBzX2RhbWFn
ZUV2ZW50QmFzZSArIFhEYW1hZ2VOb3RpZnkpCi0gICAgICAgICAgICByZXR1cm4gR0RLX0ZJTFRF
Ul9DT05USU5VRTsKLQotICAgICAgICBYRGFtYWdlTm90aWZ5RXZlbnQqIGRhbWFnZUV2ZW50ID0g
cmVpbnRlcnByZXRfY2FzdDxYRGFtYWdlTm90aWZ5RXZlbnQqPihldmVudCk7Ci0gICAgICAgIGlm
IChjb25zdCBhdXRvJiBub3RpZnlGdW5jdGlvbiA9IG1fbm90aWZ5RnVuY3Rpb25zLmdldChkYW1h
Z2VFdmVudC0+ZHJhd2FibGUpKSB7Ci0gICAgICAgICAgICBub3RpZnlGdW5jdGlvbigpOwotICAg
ICAgICAgICAgWERhbWFnZVN1YnRyYWN0KGV2ZW50LT54YW55LmRpc3BsYXksIGRhbWFnZUV2ZW50
LT5kYW1hZ2UsIE5vbmUsIE5vbmUpOwotICAgICAgICAgICAgcmV0dXJuIEdES19GSUxURVJfUkVN
T1ZFOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIEdES19GSUxURVJfQ09OVElOVUU7Ci0g
ICAgfQotCi0gICAgSGFzaE1hcDxXaW5kb3csIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPj4gbV9ub3Rp
ZnlGdW5jdGlvbnM7Ci19OwotCi1pbnQgWERhbWFnZU5vdGlmaWVyOjpzX2RhbWFnZUV2ZW50QmFz
ZSA9IDA7Ci0KLXN0YXRpYyBYRGFtYWdlTm90aWZpZXImIHhEYW1hZ2VOb3RpZmllcigpCi17Ci0g
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFhEYW1hZ2VOb3RpZmllcj4gbm90aWZpZXI7Ci0gICAg
cmV0dXJuIG5vdGlmaWVyOwotfQotCi1zdGF0aWMgYm9vbCBzdXBwb3J0c1hEYW1hZ2VBbmRYQ29t
cG9zaXRlKEdka1dpbmRvdyogd2luZG93KQotewotICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVk
ID0gZmFsc2U7Ci0gICAgc3RhdGljIGJvb2wgaGFzRXh0ZW5zaW9ucyA9IGZhbHNlOwotCi0gICAg
aWYgKGluaXRpYWxpemVkKQotICAgICAgICByZXR1cm4gaGFzRXh0ZW5zaW9uczsKLQotICAgIGlu
aXRpYWxpemVkID0gdHJ1ZTsKLSAgICBEaXNwbGF5KiBkaXNwbGF5ID0gR0RLX0RJU1BMQVlfWERJ
U1BMQVkoZ2RrX3dpbmRvd19nZXRfZGlzcGxheSh3aW5kb3cpKTsKLQotICAgIGludCBlcnJvckJh
c2U7Ci0gICAgaWYgKCFYRGFtYWdlUXVlcnlFeHRlbnNpb24oZGlzcGxheSwgJlhEYW1hZ2VOb3Rp
Zmllcjo6c19kYW1hZ2VFdmVudEJhc2UsICZlcnJvckJhc2UpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpbnQgZXZlbnRCYXNlOwotICAgIGlmICghWENvbXBvc2l0ZVF1ZXJ5RXh0ZW5z
aW9uKGRpc3BsYXksICZldmVudEJhc2UsICZlcnJvckJhc2UpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAvLyBXZSBuZWVkIHRvIHN1cHBvcnQgWENvbXBvc2l0ZSB2ZXJzaW9uIDAuMi4K
LSAgICBpbnQgbWFqb3IsIG1pbm9yOwotICAgIFhDb21wb3NpdGVRdWVyeVZlcnNpb24oZGlzcGxh
eSwgJm1ham9yLCAmbWlub3IpOwotICAgIGlmIChtYWpvciA8IDAgfHwgKCFtYWpvciAmJiBtaW5v
ciA8IDIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBoYXNFeHRlbnNpb25zID0gdHJ1
ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFJlZGlyZWN0ZWRYQ29t
cG9zaXRlV2luZG93PiBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6Y3JlYXRlKFdlYlBhZ2VQ
cm94eSYgd2ViUGFnZSwgY29uc3QgSW50U2l6ZSYgaW5pdGlhbFNpemUsIHN0ZDo6ZnVuY3Rpb248
dm9pZCgpPiYmIGRhbWFnZU5vdGlmeSkKLXsKLSAgICBHZGtXaW5kb3cqIHBhcmVudFdpbmRvdyA9
IGd0a193aWRnZXRfZ2V0X3BhcmVudF93aW5kb3cod2ViUGFnZS52aWV3V2lkZ2V0KCkpOwotICAg
IEFTU0VSVChHREtfSVNfV0lORE9XKHBhcmVudFdpbmRvdykpOwotICAgIGlmICghc3VwcG9ydHNY
RGFtYWdlQW5kWENvbXBvc2l0ZShwYXJlbnRXaW5kb3cpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93
PihuZXcgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cod2ViUGFnZSwgaW5pdGlhbFNpemUsIFdU
Rk1vdmUoZGFtYWdlTm90aWZ5KSkpOwotfQotCi1SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6
UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coV2ViUGFnZVByb3h5JiB3ZWJQYWdlLCBjb25zdCBJ
bnRTaXplJiBpbml0aWFsU2l6ZSwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+JiYgZGFtYWdlTm90aWZ5
KQotICAgIDogbV93ZWJQYWdlKHdlYlBhZ2UpCi0gICAgLCBtX2Rpc3BsYXkoR0RLX0RJU1BMQVlf
WERJU1BMQVkoZ2RrX3dpbmRvd19nZXRfZGlzcGxheShndGtfd2lkZ2V0X2dldF9wYXJlbnRfd2lu
ZG93KHdlYlBhZ2Uudmlld1dpZGdldCgpKSkpKQotICAgICwgbV9zaXplKGluaXRpYWxTaXplKQot
ewotICAgIG1fc2l6ZS5zY2FsZShtX3dlYlBhZ2UuZGV2aWNlU2NhbGVGYWN0b3IoKSk7Ci0KLSAg
ICBBU1NFUlQoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5WDExPihQbGF0Zm9ybURpc3BsYXk6OnNo
YXJlZERpc3BsYXkoKSkubmF0aXZlKCkgPT0gbV9kaXNwbGF5KTsKLSAgICBTY3JlZW4qIHNjcmVl
biA9IERlZmF1bHRTY3JlZW5PZkRpc3BsYXkobV9kaXNwbGF5KTsKLQotICAgIEdka1Zpc3VhbCog
dmlzdWFsID0gZ2RrX3dpbmRvd19nZXRfdmlzdWFsKGd0a193aWRnZXRfZ2V0X3BhcmVudF93aW5k
b3cod2ViUGFnZS52aWV3V2lkZ2V0KCkpKTsKLSAgICBYVW5pcXVlQ29sb3JtYXAgY29sb3JtYXAo
WENyZWF0ZUNvbG9ybWFwKG1fZGlzcGxheSwgUm9vdFdpbmRvd09mU2NyZWVuKHNjcmVlbiksIEdE
S19WSVNVQUxfWFZJU1VBTCh2aXN1YWwpLCBBbGxvY05vbmUpKTsKLQotICAgIC8vIFRoaXMgaXMg
YmFzZWQgb24gY29kZSBmcm9tIENocm9taXVtOiBzcmMvY29udGVudC9jb21tb24vZ3B1L2ltYWdl
X3RyYW5zcG9ydF9zdXJmYWNlX2xpbnV4LmNjCi0gICAgWFNldFdpbmRvd0F0dHJpYnV0ZXMgd2lu
ZG93QXR0cmlidXRlczsKLSAgICB3aW5kb3dBdHRyaWJ1dGVzLm92ZXJyaWRlX3JlZGlyZWN0ID0g
VHJ1ZTsKLSAgICB3aW5kb3dBdHRyaWJ1dGVzLmNvbG9ybWFwID0gY29sb3JtYXAuZ2V0KCk7Ci0K
LSAgICAvLyBDV0JvcmRlclBpeGVsIG11c3QgYmUgcHJlc2VudCB3aGVuIHRoZSBkZXB0aCBkb2Vz
bid0IG1hdGNoIHRoZSBwYXJlbnQncyBvbmUuCi0gICAgLy8gU2VlIGh0dHA6Ly9jZ2l0LmZyZWVk
ZXNrdG9wLm9yZy94b3JnL3hzZXJ2ZXIvdHJlZS9kaXgvd2luZG93LmM/aWQ9eG9yZy1zZXJ2ZXIt
MS4xNi4wI243MDMuCi0gICAgd2luZG93QXR0cmlidXRlcy5ib3JkZXJfcGl4ZWwgPSAwOwotCi0g
ICAgbV9wYXJlbnRXaW5kb3cgPSBYQ3JlYXRlV2luZG93KG1fZGlzcGxheSwKLSAgICAgICAgUm9v
dFdpbmRvd09mU2NyZWVuKHNjcmVlbiksCi0gICAgICAgIFdpZHRoT2ZTY3JlZW4oc2NyZWVuKSAr
IDEsIDAsIDEsIDEsCi0gICAgICAgIDAsCi0gICAgICAgIGdka192aXN1YWxfZ2V0X2RlcHRoKHZp
c3VhbCksCi0gICAgICAgIElucHV0T3V0cHV0LAotICAgICAgICBHREtfVklTVUFMX1hWSVNVQUwo
dmlzdWFsKSwKLSAgICAgICAgQ1dPdmVycmlkZVJlZGlyZWN0IHwgQ1dDb2xvcm1hcCB8IENXQm9y
ZGVyUGl4ZWwsCi0gICAgICAgICZ3aW5kb3dBdHRyaWJ1dGVzKTsKLSAgICBYTWFwV2luZG93KG1f
ZGlzcGxheSwgbV9wYXJlbnRXaW5kb3cuZ2V0KCkpOwotCi0gICAgd2luZG93QXR0cmlidXRlcy5l
dmVudF9tYXNrID0gU3RydWN0dXJlTm90aWZ5TWFzazsKLSAgICB3aW5kb3dBdHRyaWJ1dGVzLm92
ZXJyaWRlX3JlZGlyZWN0ID0gRmFsc2U7Ci0gICAgLy8gQ3JlYXRlIHRoZSB3aW5kb3cgb2YgYXQg
bGFzdCAxeDEgc2luY2UgWCBkb2Vzbid0IGFsbG93IHRvIGNyZWF0ZSBlbXB0eSB3aW5kb3dzLgot
ICAgIG1fd2luZG93ID0gWENyZWF0ZVdpbmRvdyhtX2Rpc3BsYXksCi0gICAgICAgIG1fcGFyZW50
V2luZG93LmdldCgpLAotICAgICAgICAwLCAwLAotICAgICAgICBzdGQ6Om1heCgxLCBtX3NpemUu
d2lkdGgoKSksCi0gICAgICAgIHN0ZDo6bWF4KDEsIG1fc2l6ZS5oZWlnaHQoKSksCi0gICAgICAg
IDAsCi0gICAgICAgIENvcHlGcm9tUGFyZW50LAotICAgICAgICBJbnB1dE91dHB1dCwKLSAgICAg
ICAgQ29weUZyb21QYXJlbnQsCi0gICAgICAgIENXRXZlbnRNYXNrLAotICAgICAgICAmd2luZG93
QXR0cmlidXRlcyk7Ci0gICAgWE1hcFdpbmRvdyhtX2Rpc3BsYXksIG1fd2luZG93LmdldCgpKTsK
LQotICAgIHhEYW1hZ2VOb3RpZmllcigpLmFkZChtX3dpbmRvdy5nZXQoKSwgV1RGTW92ZShkYW1h
Z2VOb3RpZnkpKTsKLQotICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIFhFdmVudCBldmVudDsKLSAg
ICAgICAgWFdpbmRvd0V2ZW50KG1fZGlzcGxheSwgbV93aW5kb3cuZ2V0KCksIFN0cnVjdHVyZU5v
dGlmeU1hc2ssICZldmVudCk7Ci0gICAgICAgIGlmIChldmVudC50eXBlID09IE1hcE5vdGlmeSAm
JiBldmVudC54bWFwLndpbmRvdyA9PSBtX3dpbmRvdy5nZXQoKSkKLSAgICAgICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICBYU2VsZWN0SW5wdXQobV9kaXNwbGF5LCBtX3dpbmRvdy5nZXQoKSwgTm9F
dmVudE1hc2spOwotICAgIFhDb21wb3NpdGVSZWRpcmVjdFdpbmRvdyhtX2Rpc3BsYXksIG1fd2lu
ZG93LmdldCgpLCBDb21wb3NpdGVSZWRpcmVjdE1hbnVhbCk7Ci0gICAgaWYgKCFtX3NpemUuaXNF
bXB0eSgpKQotICAgICAgICBjcmVhdGVOZXdQaXhhbXBBbmRQaXhhbXBTdXJmYWNlKCk7Ci0gICAg
bV9kYW1hZ2UgPSBYRGFtYWdlQ3JlYXRlKG1fZGlzcGxheSwgbV93aW5kb3cuZ2V0KCksIFhEYW1h
Z2VSZXBvcnROb25FbXB0eSk7Ci19Ci0KLVJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93Ojp+UmVk
aXJlY3RlZFhDb21wb3NpdGVXaW5kb3coKQotewotICAgIEFTU0VSVChtX2Rpc3BsYXkpOwotICAg
IEFTU0VSVChtX2RhbWFnZSk7Ci0gICAgQVNTRVJUKG1fd2luZG93KTsKLSAgICBBU1NFUlQobV9w
YXJlbnRXaW5kb3cpOwotCi0gICAgeERhbWFnZU5vdGlmaWVyKCkucmVtb3ZlKG1fd2luZG93Lmdl
dCgpKTsKLQotICAgIC8vIEV4cGxpY2l0bHkgcmVzZXQgdGhlc2UgYmVjYXVzZSB3ZSBuZWVkIHRv
IGVuc3VyZSBpdCBoYXBwZW5zIGluIHRoaXMgb3JkZXIuCi0gICAgbV9kYW1hZ2UucmVzZXQoKTsK
LSAgICBtX3dpbmRvdy5yZXNldCgpOwotICAgIG1fcGFyZW50V2luZG93LnJlc2V0KCk7Ci19Ci0K
LXZvaWQgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OnJlc2l6ZShjb25zdCBJbnRTaXplJiBz
aXplKQotewotICAgIEludFNpemUgc2NhbGVkU2l6ZShzaXplKTsKLSAgICBzY2FsZWRTaXplLnNj
YWxlKG1fd2ViUGFnZS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKLSAgICBpZiAoc2NhbGVkU2l6ZSA9
PSBtX3NpemUpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFJlc2l6ZSB0aGUgd2luZG93IHRv
IGF0IGxhc3QgMXgxIHNpbmNlIFggZG9lc24ndCBhbGxvdyB0byBjcmVhdGUgZW1wdHkgd2luZG93
cy4KLSAgICBYUmVzaXplV2luZG93KG1fZGlzcGxheSwgbV93aW5kb3cuZ2V0KCksIHN0ZDo6bWF4
KDEsIHNjYWxlZFNpemUud2lkdGgoKSksIHN0ZDo6bWF4KDEsIHNjYWxlZFNpemUuaGVpZ2h0KCkp
KTsKLSAgICBYRmx1c2gobV9kaXNwbGF5KTsKLQotICAgIG1fc2l6ZSA9IHNjYWxlZFNpemU7Ci0g
ICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIGNsZWFudXBQaXhtYXBBbmRQaXhtYXBT
dXJmYWNlKCk7Ci0gICAgZWxzZQotICAgICAgICBjcmVhdGVOZXdQaXhhbXBBbmRQaXhhbXBTdXJm
YWNlKCk7Ci19Ci0KLXZvaWQgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmNsZWFudXBQaXht
YXBBbmRQaXhtYXBTdXJmYWNlKCkKLXsKLSAgICBpZiAoIW1fcGl4bWFwKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX3N1cmZhY2UgPSBudWxscHRyOwotICAgIG1fcGl4bWFwLnJlc2V0KCk7Ci19
Ci0KLXZvaWQgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmNyZWF0ZU5ld1BpeGFtcEFuZFBp
eGFtcFN1cmZhY2UoKQotewotICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB3aXRo
IGFuIGVtcHR5IHNpemUgKG5vdCBpbiBBY2NlbGVyYXRlZCBDb21wb3NpdGluZyBtb2RlKS4KLSAg
ICBBU1NFUlQoIW1fc2l6ZS5pc0VtcHR5KCkpOwotICAgIFhVbmlxdWVQaXhtYXAgbmV3UGl4bWFw
KFhDb21wb3NpdGVOYW1lV2luZG93UGl4bWFwKG1fZGlzcGxheSwgbV93aW5kb3cuZ2V0KCkpKTsK
LSAgICBpZiAoIW5ld1BpeG1hcCkgewotICAgICAgICBjbGVhbnVwUGl4bWFwQW5kUGl4bWFwU3Vy
ZmFjZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgWFdpbmRvd0F0dHJpYnV0ZXMg
d2luZG93QXR0cmlidXRlczsKLSAgICBpZiAoIVhHZXRXaW5kb3dBdHRyaWJ1dGVzKG1fZGlzcGxh
eSwgbV93aW5kb3cuZ2V0KCksICZ3aW5kb3dBdHRyaWJ1dGVzKSkgewotICAgICAgICBjbGVhbnVw
UGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbmV3U3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX3hsaWJf
c3VyZmFjZV9jcmVhdGUobV9kaXNwbGF5LCBuZXdQaXhtYXAuZ2V0KCksIHdpbmRvd0F0dHJpYnV0
ZXMudmlzdWFsLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSk7Ci0gICAgY2Fpcm9T
dXJmYWNlU2V0RGV2aWNlU2NhbGUobmV3U3VyZmFjZS5nZXQoKSwgbV93ZWJQYWdlLmRldmljZVNj
YWxlRmFjdG9yKCksIG1fd2ViUGFnZS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKLQotICAgIFJlZlB0
cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShuZXdTdXJmYWNlLmdldCgpKSk7
Ci0gICAgaWYgKCFtX3dlYlBhZ2UuZHJhd3NCYWNrZ3JvdW5kKCkpCi0gICAgICAgIGNhaXJvX3Nl
dF9vcGVyYXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfQ0xFQVIpOwotICAgIGVsc2UKLSAg
ICAgICAgc2V0U291cmNlUkdCQUZyb21Db2xvcihjci5nZXQoKSwgbV93ZWJQYWdlLmJhY2tncm91
bmRDb2xvcigpKTsKLSAgICBjYWlyb19wYWludChjci5nZXQoKSk7Ci0KLSAgICAvLyBOdmlkaWEg
ZHJpdmVycyBzZWVtIHRvIHByZXBhcmUgdGhlaXIgcmVkaXJlY3RlZCB3aW5kb3cgcGl4bWFwIGFz
eW5jaHJvbm91c2x5LCBzbyBmb3IgYSBmZXcgZnJhY3Rpb25zCi0gICAgLy8gb2YgYSBzZWNvbmQg
YWZ0ZXIgZWFjaCByZXNpemUsIHdoaWxlIGRvaW5nIGNvbnRpbnVvdXMgcmVzaXppbmcgKHdoaWNo
IGNvbnN0YW50bHkgZGVzdHJveXMgYW5kIGNyZWF0ZXMKLSAgICAvLyBwaXhtYXAgd2luZG93LWJh
Y2tpbmdzKSwgdGhlIHBpeG1hcCBtZW1vcnkgaXMgdW5pbml0aWFsaXplZC4gVG8gd29yayBhcm91
bmQgdGhpcyBpc3N1ZSwgcGFpbnQgdGhlIG9sZAotICAgIC8vIHBpeG1hcCB0byB0aGUgbmV3IG9u
ZSB0byBwcm9wZXJseSBpbml0aWFsaXplIGl0LgotICAgIGlmIChtX3N1cmZhY2UpIHsKLSAgICAg
ICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLmdldCgpLCBDQUlST19PUEVSQVRPUl9PVkVSKTsKLSAg
ICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgpLCBtX3N1cmZhY2UuZ2V0KCks
IDAsIDApOwotICAgICAgICBjYWlyb19wYWludChjci5nZXQoKSk7Ci0gICAgfQotCi0gICAgY2xl
YW51cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2UoKTsKLSAgICBtX3BpeG1hcCA9IFdURk1vdmUobmV3
UGl4bWFwKTsKLSAgICBtX3N1cmZhY2UgPSBXVEZNb3ZlKG5ld1N1cmZhY2UpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRF
X1dJTkRPVykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvUmVkaXJl
Y3RlZFhDb21wb3NpdGVXaW5kb3cuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvUmVk
aXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MTYyYjJlZS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1JlZGly
ZWN0ZWRYQ29tcG9zaXRlV2luZG93LmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
ICBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvd19oCi0jZGVmaW5lICBSZWRpcmVjdGVkWENvbXBv
c2l0ZVdpbmRvd19oCi0KLSNpZiBVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKLQot
I2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVmUHRyQ2Fp
cm8uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1hVbmlxdWVSZXNvdXJjZS5oPgotI2luY2x1ZGUgPGZ1
bmN0aW9uYWw+Ci0KLXR5cGVkZWYgc3RydWN0IF9HZGtXaW5kb3cgR2RrV2luZG93OwotdHlwZWRl
ZiBzdHJ1Y3QgX1hEaXNwbGF5IERpc3BsYXk7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgV2luZG93
OwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViUGFnZVByb3h5OwotCi1jbGFzcyBS
ZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdyB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVk
aXJlY3RlZFhDb21wb3NpdGVXaW5kb3cpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93
PiBjcmVhdGUoV2ViUGFnZVByb3h5JiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoKT4mJiBkYW1hZ2VOb3RpZnkpOwotICAgIH5SZWRpcmVjdGVkWENvbXBvc2l0
ZVdpbmRvdygpOwotCi0gICAgV2luZG93IHdpbmRvd0lEKCkgY29uc3QgeyByZXR1cm4gbV93aW5k
b3cuZ2V0KCk7IH0KLSAgICB2b2lkIHJlc2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0g
ICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlLmdl
dCgpOyB9OwotCi1wcml2YXRlOgotICAgIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KFdlYlBh
Z2VQcm94eSYsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+
JiYgZGFtYWdlTm90aWZ5KTsKLSAgICB2b2lkIGNyZWF0ZU5ld1BpeGFtcEFuZFBpeGFtcFN1cmZh
Y2UoKTsKLSAgICB2b2lkIGNsZWFudXBQaXhtYXBBbmRQaXhtYXBTdXJmYWNlKCk7Ci0KLSAgICBX
ZWJQYWdlUHJveHkmIG1fd2ViUGFnZTsKLSAgICBEaXNwbGF5KiBtX2Rpc3BsYXkgeyBudWxscHRy
IH07Ci0gICAgV2ViQ29yZTo6SW50U2l6ZSBtX3NpemU7Ci0gICAgV2ViQ29yZTo6WFVuaXF1ZVdp
bmRvdyBtX3dpbmRvdzsKLSAgICBXZWJDb3JlOjpYVW5pcXVlV2luZG93IG1fcGFyZW50V2luZG93
OwotICAgIFdlYkNvcmU6OlhVbmlxdWVQaXhtYXAgbV9waXhtYXA7Ci0gICAgV2ViQ29yZTo6WFVu
aXF1ZURhbWFnZSBtX2RhbWFnZTsKLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX3N1cmZh
Y2U7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFVTRShSRURJUkVD
VEVEX1hDT01QT1NJVEVfV0lORE9XKQotCi0jZW5kaWYgLy8gUmVkaXJlY3RlZFhDb21wb3NpdGVX
aW5kb3dfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9YRGFtYWdl
Tm90aWZpZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9YRGFtYWdlTm90aWZp
ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZTY3MzgKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1hEYW1hZ2VOb3RpZmll
ci5jcHAKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlh
IFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlhEYW1hZ2VOb3RpZmllci5oIgorCisjaWYgUExBVEZP
Uk0oWDExKQorCisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybURpc3BsYXlYMTEuaD4KKyNpbmNs
dWRlIDxYMTEvWGxpYi5oPgorI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hkYW1hZ2UuaD4KKyNp
bmNsdWRlIDxnZGsvZ2RreC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK3N0YXRpYyBpbnQgc19kYW1hZ2VFdmVudEJhc2UgPSAtMTsKKworWERh
bWFnZU5vdGlmaWVyJiBYRGFtYWdlTm90aWZpZXI6OnNpbmdsZXRvbigpCit7CisgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPFhEYW1hZ2VOb3RpZmllcj4gbm90aWZpZXI7CisgICAgcmV0dXJuIG5v
dGlmaWVyOworfQorCitYRGFtYWdlTm90aWZpZXI6OlhEYW1hZ2VOb3RpZmllcigpCit7CisgICAg
aW50IGJhc2VFdmVudDsKKyAgICBpZiAoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5WDExPihQbGF0
Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXkoKSkuc3VwcG9ydHNYRGFtYWdlKGJhc2VFdmVudCkp
CisgICAgICAgIHNfZGFtYWdlRXZlbnRCYXNlID0gYmFzZUV2ZW50OworfQorCit2b2lkIFhEYW1h
Z2VOb3RpZmllcjo6YWRkKERhbWFnZSBkYW1hZ2UsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiYmIG5v
dGlmeUZ1bmN0aW9uKQoreworICAgIGlmIChzX2RhbWFnZUV2ZW50QmFzZSA9PSAtMSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKG1fbm90aWZ5RnVuY3Rpb25zLmlzRW1wdHkoKSkKKyAgICAg
ICAgZ2RrX3dpbmRvd19hZGRfZmlsdGVyKG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRmls
dGVyRnVuYz4oJmZpbHRlclhEYW1hZ2VFdmVudCksIHRoaXMpOworICAgIG1fbm90aWZ5RnVuY3Rp
b25zLmFkZChkYW1hZ2UsIFdURk1vdmUobm90aWZ5RnVuY3Rpb24pKTsKK30KKwordm9pZCBYRGFt
YWdlTm90aWZpZXI6OnJlbW92ZShEYW1hZ2UgZGFtYWdlKQoreworICAgIGlmIChzX2RhbWFnZUV2
ZW50QmFzZSA9PSAtMSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9ub3RpZnlGdW5jdGlvbnMu
cmVtb3ZlKGRhbWFnZSk7CisgICAgaWYgKG1fbm90aWZ5RnVuY3Rpb25zLmlzRW1wdHkoKSkKKyAg
ICAgICAgZ2RrX3dpbmRvd19yZW1vdmVfZmlsdGVyKG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8
R2RrRmlsdGVyRnVuYz4oJmZpbHRlclhEYW1hZ2VFdmVudCksIHRoaXMpOworfQorCitHZGtGaWx0
ZXJSZXR1cm4gWERhbWFnZU5vdGlmaWVyOjpmaWx0ZXJYRGFtYWdlRXZlbnQoR2RrWEV2ZW50KiBl
dmVudCwgR2RrRXZlbnQqLCBYRGFtYWdlTm90aWZpZXIqIG5vdGlmaWVyKQoreworICAgIEFTU0VS
VChzX2RhbWFnZUV2ZW50QmFzZSAhPSAtMSk7CisgICAgYXV0byogeEV2ZW50ID0gc3RhdGljX2Nh
c3Q8WEV2ZW50Kj4oZXZlbnQpOworICAgIGlmICh4RXZlbnQtPnR5cGUgIT0gc19kYW1hZ2VFdmVu
dEJhc2UgKyBYRGFtYWdlTm90aWZ5KQorICAgICAgICByZXR1cm4gR0RLX0ZJTFRFUl9DT05USU5V
RTsKKworICAgIFhEYW1hZ2VOb3RpZnlFdmVudCogZGFtYWdlRXZlbnQgPSByZWludGVycHJldF9j
YXN0PFhEYW1hZ2VOb3RpZnlFdmVudCo+KHhFdmVudCk7CisgICAgaWYgKG5vdGlmaWVyLT5ub3Rp
ZnkoZGFtYWdlRXZlbnQtPmRhbWFnZSkpIHsKKyAgICAgICAgWERhbWFnZVN1YnRyYWN0KHhFdmVu
dC0+eGFueS5kaXNwbGF5LCBkYW1hZ2VFdmVudC0+ZGFtYWdlLCBOb25lLCBOb25lKTsKKyAgICAg
ICAgcmV0dXJuIEdES19GSUxURVJfUkVNT1ZFOworICAgIH0KKworICAgIHJldHVybiBHREtfRklM
VEVSX0NPTlRJTlVFOworfQorCitib29sIFhEYW1hZ2VOb3RpZmllcjo6bm90aWZ5KERhbWFnZSBk
YW1hZ2UpIGNvbnN0Cit7CisgICAgaWYgKGNvbnN0IGF1dG8mIG5vdGlmeUZ1bmN0aW9uID0gbV9u
b3RpZnlGdW5jdGlvbnMuZ2V0KGRhbWFnZSkpIHsKKyAgICAgICAgbm90aWZ5RnVuY3Rpb24oKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0oWDExKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9YRGFtYWdlTm90aWZpZXIuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvWERhbWFnZU5vdGlmaWVyLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uOTMzNGNjMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9ndGsvWERhbWFnZU5vdGlmaWVyLmgKQEAgLTAsMCArMSw2MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFBMQVRGT1JNKFgx
MSkKKworI2luY2x1ZGUgPGdkay9nZGt4Lmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4K
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcg
RGFtYWdlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgWERhbWFnZU5vdGlmaWVyIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShYRGFtYWdlTm90aWZpZXIpOyBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKKyAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8WERhbWFnZU5vdGlm
aWVyPjsKK3B1YmxpYzoKKyAgICBzdGF0aWMgWERhbWFnZU5vdGlmaWVyJiBzaW5nbGV0b24oKTsK
KworICAgIHZvaWQgYWRkKERhbWFnZSwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+JiYpOworICAgIHZv
aWQgcmVtb3ZlKERhbWFnZSk7CisKK3ByaXZhdGU6CisgICAgWERhbWFnZU5vdGlmaWVyKCk7CisK
KyAgICBzdGF0aWMgR2RrRmlsdGVyUmV0dXJuIGZpbHRlclhEYW1hZ2VFdmVudChHZGtYRXZlbnQq
LCBHZGtFdmVudCosIFhEYW1hZ2VOb3RpZmllciopOworICAgIGJvb2wgbm90aWZ5KERhbWFnZSkg
Y29uc3Q7CisKKyAgICBIYXNoTWFwPERhbWFnZSwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+PiBtX25v
dGlmeUZ1bmN0aW9uczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
UExBVEZPUk0oWDExKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9Q
YWdlQ2xpZW50SW1wbElPUy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9QYWdlQ2xp
ZW50SW1wbElPUy5oCmluZGV4IDIyMGRhMGEuLjAxYWIxMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgKQEAgLTEwMyw3ICsxMDMsNiBA
QCBwcml2YXRlOgogICAgIHZvaWQgZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25z
dCBMYXllclRyZWVDb250ZXh0Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBleGl0QWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGUoKSBvdmVycmlkZTsKICAgICB2b2lkIHVwZGF0ZUFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKSBvdmVycmlkZTsKLSAgICB2b2lk
IHdpbGxFbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nUm9vdExheWVyKExheWVyT3JWaWV3ICopIG92ZXJy
aWRlOwogICAgIExheWVyT3JWaWV3ICphY2NlbGVyYXRlZENvbXBvc2l0aW5nUm9vdExheWVyKCkg
Y29uc3Qgb3ZlcnJpZGU7CiAgICAgTGF5ZXJIb3N0aW5nTW9kZSB2aWV3TGF5ZXJIb3N0aW5nTW9k
ZSgpIG92ZXJyaWRlIHsgcmV0dXJuIExheWVySG9zdGluZ01vZGU6Ok91dE9mUHJvY2VzczsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElP
Uy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0K
aW5kZXggMmUwZjgwZC4uNWZjMjJhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCkBAIC00NTYsMTAgKzQ1Niw2IEBAIHZvaWQgUGFn
ZUNsaWVudEltcGw6OnVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVy
VHJlZUNvbnRleHQmKQogewogfQogCi12b2lkIFBhZ2VDbGllbnRJbXBsOjp3aWxsRW50ZXJBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpCi17Ci19Ci0KIHZvaWQgUGFnZUNsaWVudEltcGw6OnNl
dEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSb290TGF5ZXIoTGF5ZXJPclZpZXcgKnJvb3RMYXllcikK
IHsKICAgICBbbV9jb250ZW50VmlldyBfc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jvb3RWaWV3
OnJvb3RMYXllcl07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1Bh
Z2VDbGllbnRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJ
bXBsLmgKaW5kZXggNTgwOGVlMy4uZDIxY2E1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaApAQCAtMTM4LDcgKzEzOCw2IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBlbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNv
bnRleHQmKSBvdmVycmlkZTsKICAgICB2b2lkIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9k
ZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgdXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUo
Y29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpIG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbEVudGVyQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSBvdmVycmlkZTsKIAogICAgIFBhc3NSZWZQdHI8Vmll
d1NuYXBzaG90PiB0YWtlVmlld1NuYXBzaG90KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCB3aGVlbEV2
ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZShjb25zdCBOYXRpdmVXZWJXaGVlbEV2ZW50Jikgb3Zl
cnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1BhZ2VDbGll
bnRJbXBsLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5t
bQppbmRleCBlN2Y5MGE1Li41M2I5YmM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvUGFnZUNsaWVudEltcGwubW0KQEAgLTQ4MCwxMCArNDgwLDYgQEAgdm9pZCBQYWdlQ2xp
ZW50SW1wbDo6dXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVl
Q29udGV4dCYgbGEKICAgICBtX2ltcGwtPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSb290TGF5
ZXIocmVuZGVyTGF5ZXIpOwogfQogCi12b2lkIFBhZ2VDbGllbnRJbXBsOjp3aWxsRW50ZXJBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpCi17Ci19Ci0KIHZvaWQgUGFnZUNsaWVudEltcGw6OnNl
dEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSb290TGF5ZXIoQ0FMYXllciAqcm9vdExheWVyKQogewog
ICAgIG1faW1wbC0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jvb3RMYXllcihyb290TGF5ZXIp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJh
dGVkRHJhd2luZ0FyZWEuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Fj
Y2VsZXJhdGVkRHJhd2luZ0FyZWEuY3BwCmluZGV4IDRhNWEzYTkuLmViODA5NDMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdB
cmVhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0
ZWREcmF3aW5nQXJlYS5jcHAKQEAgLTMxOCwxMSArMzE4LDkgQEAgdm9pZCBBY2NlbGVyYXRlZERy
YXdpbmdBcmVhOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKEdyYXBoaWNzTGF5ZXIq
IGdyYXAKICAgICBtX2V4aXRDb21wb3NpdGluZ1RpbWVyLnN0b3AoKTsKICAgICBtX3dhbnRzVG9F
eGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUgPSBmYWxzZTsKIAotICAgIG1fd2ViUGFnZS5z
ZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYVByb3h5OjpXaWxsRW50ZXJBY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kZShtX2JhY2tpbmdTdG9yZVN0YXRlSUQpKTsKLQogICAgIEFTU0VSVCghbV9sYXll
clRyZWVIb3N0KTsKICAgICBtX2xheWVyVHJlZUhvc3QgPSBMYXllclRyZWVIb3N0OjpjcmVhdGUo
bV93ZWJQYWdlKTsKLSNpZiBQTEFURk9STShHVEspICYmIFVTRShURVhUVVJFX01BUFBFUikKKyNp
ZiBQTEFURk9STShHVEspICYmIFVTRShURVhUVVJFX01BUFBFUikgJiYgIVVTRShSRURJUkVDVEVE
X1hDT01QT1NJVEVfV0lORE9XKQogICAgIGlmIChtX25hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21w
b3NpdGluZykKICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXROYXRpdmVTdXJmYWNlSGFuZGxl
Rm9yQ29tcG9zaXRpbmcobV9uYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcpOwogI2Vu
ZGlmCkBAIC0zNTQsNyArMzUyLDcgQEAgdm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpkaWRS
ZWNlaXZlQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0TWVzc2FnZShJUEM6OkNvbm4KIH0KICNlbmRp
ZgogCi0jaWYgUExBVEZPUk0oR1RLKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisjaWYgUExBVEZP
Uk0oR1RLKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmICFVU0UoUkVESVJFQ1RFRF9YQ09NUE9T
SVRFX1dJTkRPVykKIHZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6c2V0TmF0aXZlU3VyZmFj
ZUhhbmRsZUZvckNvbXBvc2l0aW5nKHVpbnQ2NF90IGhhbmRsZSkKIHsKICAgICBtX25hdGl2ZVN1
cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyA9IGhhbmRsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5oCmlu
ZGV4IGVhMTY3YTMuLjIxY2E0OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmgKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuaApAQCAtNjMsNyArNjMs
NyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBkaWRSZWNlaXZlQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6Ok1lc3NhZ2VEZWNvZGVyJikgb3ZlcnJp
ZGU7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKEdUSykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQor
I2lmIFBMQVRGT1JNKEdUSykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKSAmJiAhVVNFKFJFRElSRUNU
RURfWENPTVBPU0lURV9XSU5ET1cpCiAgICAgdm9pZCBzZXROYXRpdmVTdXJmYWNlSGFuZGxlRm9y
Q29tcG9zaXRpbmcodWludDY0X3QpIG92ZXJyaWRlOwogICAgIHZvaWQgZGVzdHJveU5hdGl2ZVN1
cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyhib29sJikgb3ZlcnJpZGU7CiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0LmNwcAppbmRleCA0MWI0MmY1Li5kYmQwMjgwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJl
YWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExh
eWVyVHJlZUhvc3QuY3BwCkBAIC0zNCw2ICszNCwxMCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRnJh
bWVWaWV3Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9NYWluRnJhbWUuaD4KIAorI2lmIFVTRShSRURJ
UkVDVEVEX1hDT01QT1NJVEVfV0lORE9XKQorI2luY2x1ZGUgIlJlZGlyZWN0ZWRYQ29tcG9zaXRl
V2luZG93LmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewpAQCAtNTAsMTQgKzU0LDI2IEBAIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0Ojp+VGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QoKQogVGhyZWFkZWRDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OlRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KFdl
YlBhZ2UmIHdlYlBhZ2UpCiAgICAgOiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Qod2ViUGFnZSkK
ICAgICAsIG1fY29tcG9zaXRvckNsaWVudCgqdGhpcykKKyNpZiBVU0UoUkVESVJFQ1RFRF9YQ09N
UE9TSVRFX1dJTkRPVykKKyAgICAsIG1fcmVkaXJlY3RlZFdpbmRvdyhSZWRpcmVjdGVkWENvbXBv
c2l0ZVdpbmRvdzo6Y3JlYXRlKHdlYlBhZ2UpKQorICAgICwgbV9jb21wb3NpdG9yKFRocmVhZGVk
Q29tcG9zaXRvcjo6Y3JlYXRlKCZtX2NvbXBvc2l0b3JDbGllbnQsIG1fcmVkaXJlY3RlZFdpbmRv
dyA/IG1fcmVkaXJlY3RlZFdpbmRvdy0+d2luZG93KCkgOiAwKSkKKyNlbHNlCiAgICAgLCBtX2Nv
bXBvc2l0b3IoVGhyZWFkZWRDb21wb3NpdG9yOjpjcmVhdGUoJm1fY29tcG9zaXRvckNsaWVudCkp
CisjZW5kaWYKIHsKKyNpZiBVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKKyAgICBp
ZiAobV9yZWRpcmVjdGVkV2luZG93KQorICAgICAgICBtX2xheWVyVHJlZUNvbnRleHQuY29udGV4
dElEID0gbV9yZWRpcmVjdGVkV2luZG93LT5waXhtYXAoKTsKKyNlbmRpZgogfQogCiB2b2lkIFRo
cmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjppbnZhbGlkYXRlKCkKIHsKICAgICBtX2Nv
bXBvc2l0b3ItPmludmFsaWRhdGUoKTsKICAgICBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6Omlu
dmFsaWRhdGUoKTsKKyNpZiBVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKKyAgICBt
X3JlZGlyZWN0ZWRXaW5kb3cgPSBudWxscHRyOworI2VuZGlmCiB9CiAKIHZvaWQgVGhyZWFkZWRD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZvcmNlUmVwYWludCgpCkBAIC03OSw2ICs5NSwxMyBA
QCB2b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpjb250ZW50c1NpemVDaGFu
Z2VkKGNvbnN0IFdlYkNvcmU6OkludFNpegogCiB2b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKQogeworI2lmIFVTRShS
RURJUkVDVEVEX1hDT01QT1NJVEVfV0lORE9XKQorICAgIGlmIChtX3JlZGlyZWN0ZWRXaW5kb3cp
IHsKKyAgICAgICAgbV9yZWRpcmVjdGVkV2luZG93LT5yZXNpemUobV93ZWJQYWdlLnNpemUoKSk7
CisgICAgICAgIG1fbGF5ZXJUcmVlQ29udGV4dC5jb250ZXh0SUQgPSBtX3JlZGlyZWN0ZWRXaW5k
b3ctPnBpeG1hcCgpOworICAgIH0KKyNlbmRpZgorCiAgICAgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKICAgICBtX2NvbXBvc2l0b3It
PnNldERldmljZVNjYWxlRmFjdG9yKG1fd2ViUGFnZS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKIH0K
QEAgLTkxLDYgKzExNCwxMiBAQCB2b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjpwYWdlQmFja2dyb3VuZFRyYW5zcGFyZW5jeUNoYW5nZWQoKQogCiB2b2lkIFRocmVhZGVkQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzaXplRGlkQ2hhbmdlKGNvbnN0IEludFNpemUmIHNpemUp
CiB7CisjaWYgVVNFKFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCisgICAgaWYgKG1fcmVk
aXJlY3RlZFdpbmRvdykgeworICAgICAgICBtX3JlZGlyZWN0ZWRXaW5kb3ctPnJlc2l6ZShzaXpl
KTsKKyAgICAgICAgbV9sYXllclRyZWVDb250ZXh0LmNvbnRleHRJRCA9IG1fcmVkaXJlY3RlZFdp
bmRvdy0+cGl4bWFwKCk7CisgICAgfQorI2VuZGlmCiAgICAgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpzaXplRGlkQ2hhbmdlKHNpemUpOwogICAgIG1fY29tcG9zaXRvci0+ZGlkQ2hhbmdlVmll
d3BvcnRTaXplKHNpemUpOwogfQpAQCAtMTA1LDcgKzEzNCw3IEBAIHZvaWQgVGhyZWFkZWRDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OmRpZFNjYWxlRmFjdG9yQ2hhbmdlZChmbG9hdCBzY2FsZSwg
Y29uc3QKICAgICBtX3dlYlBhZ2Uuc2NhbGVQYWdlKHNjYWxlLCBvcmlnaW4pOwogfQogCi0jaWYg
UExBVEZPUk0oR1RLKQorI2lmIFBMQVRGT1JNKEdUSykgJiYgIVVTRShSRURJUkVDVEVEX1hDT01Q
T1NJVEVfV0lORE9XKQogdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0
TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKHVpbnQ2NF90IGhhbmRsZSkKIHsKICAg
ICBtX2xheWVyVHJlZUNvbnRleHQuY29udGV4dElEID0gaGFuZGxlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFk
ZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0LmgKaW5kZXggNmE5OTBjMy4uYTQxYTExNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRl
ZExheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCkBA
IC00MSw2ICs0MSw3IEBAIHN0cnVjdCBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGU7CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewogCitjbGFzcyBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzsKIGNsYXNz
IFdlYlBhZ2U7CiAKIGNsYXNzIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IGZpbmFs
IDogcHVibGljIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCB7CkBAIC02NCw3ICs2NSw3IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBmb3JjZVJlcGFpbnQoKSBvdmVycmlkZTsKICAgICBib29sIGZvcmNl
UmVwYWludEFzeW5jKHVpbnQ2NF90IGNhbGxiYWNrSUQpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNl
OyB9CiAKLSNpZiBQTEFURk9STShHVEspCisjaWYgUExBVEZPUk0oR1RLKSAmJiAhVVNFKFJFRElS
RUNURURfWENPTVBPU0lURV9XSU5ET1cpCiAgICAgdm9pZCBzZXROYXRpdmVTdXJmYWNlSGFuZGxl
Rm9yQ29tcG9zaXRpbmcodWludDY0X3QpIG92ZXJyaWRlOwogI2VuZGlmCiAKQEAgLTEwMywxMCAr
MTA0LDEzIEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRGbHVzaFJvb3RMYXllcihjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZSB7IH0KICAgICB2b2lkIGNvbW1pdFNjZW5lU3RhdGUo
Y29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJikgb3ZlcnJpZGU7CiAKLSAg
ICBXZWJDb3JlOjpJbnRQb2ludCBtX3ByZXZTY3JvbGxQb3NpdGlvbjsKICAgICBDb21wb3NpdG9y
Q2xpZW50IG1fY29tcG9zaXRvckNsaWVudDsKKyNpZiBVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRF
X1dJTkRPVykKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c+
IG1fcmVkaXJlY3RlZFdpbmRvdzsKKyNlbmRpZgogICAgIFJlZlB0cjxUaHJlYWRlZENvbXBvc2l0
b3I+IG1fY29tcG9zaXRvcjsKICAgICBmbG9hdCBtX2xhc3RTY2FsZUZhY3RvciB7IDEgfTsKKyAg
ICBXZWJDb3JlOjpJbnRQb2ludCBtX3ByZXZTY3JvbGxQb3NpdGlvbjsKICAgICBXZWJDb3JlOjpJ
bnRQb2ludCBtX2xhc3RTY3JvbGxQb3NpdGlvbjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKaW5kZXggMDJiNDAzNS4uYmQzM2U0ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVh
LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgK
QEAgLTE0Niw3ICsxNDYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgRHJhd2luZ0FyZWFUeXBlIG1fdHlw
ZTsKICAgICBXZWJQYWdlJiBtX3dlYlBhZ2U7CiAKLSNpZiBQTEFURk9STShHVEspICYmIFVTRShU
RVhUVVJFX01BUFBFUikKKyNpZiBQTEFURk9STShHVEspICYmIFVTRShURVhUVVJFX01BUFBFUikg
JiYgIVVTRShSRURJUkVDVEVEX1hDT01QT1NJVEVfV0lORE9XKQogICAgIHVpbnQ2NF90IG1fbmF0
aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nIHsgMCB9OwogI2VuZGlmCiAKQEAgLTE3Miw3
ICsxNzIsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBhZGRUcmFuc2FjdGlvbkNhbGxi
YWNrSUQodWludDY0X3QgY2FsbGJhY2tJRCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogI2Vu
ZGlmCiAKLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmIFBMQVRGT1JNKEdUSykKKyNpZiBVU0Uo
VEVYVFVSRV9NQVBQRVIpICYmIFBMQVRGT1JNKEdUSykgJiYgIVVTRShSRURJUkVDVEVEX1hDT01Q
T1NJVEVfV0lORE9XKQogICAgIHZpcnR1YWwgdm9pZCBzZXROYXRpdmVTdXJmYWNlSGFuZGxlRm9y
Q29tcG9zaXRpbmcodWludDY0X3QpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveU5hdGl2
ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyhib29sJikgPSAwOwogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEubWVzc2Fn
ZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEubWVz
c2FnZXMuaW4KaW5kZXggNzI4OWI2My4uOTdkZjU4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5tZXNzYWdlcy5pbgpAQCAt
NDAsNyArNDAsNyBAQCBtZXNzYWdlcyAtPiBEcmF3aW5nQXJlYSB7CiAgICAgQWRkVHJhbnNhY3Rp
b25DYWxsYmFja0lEKHVpbnQ2NF90IGNhbGxiYWNrSUQpCiAjZW5kaWYKIAotI2lmIFVTRShURVhU
VVJFX01BUFBFUikgJiYgUExBVEZPUk0oR1RLKQorI2lmIFVTRShURVhUVVJFX01BUFBFUikgJiYg
UExBVEZPUk0oR1RLKSAmJiAhVVNFKFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCiAgICAg
U2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKHVpbnQ2NF90IGhhbmRsZSkKICAg
ICBEZXN0cm95TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKCkgLT4gKGJvb2wgaGFu
ZGxlZCkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5jcHAKaW5kZXggOTkzNDNkYi4uOWEwOTJlZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXllclRy
ZWVIb3N0R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3Rr
L0xheWVyVHJlZUhvc3RHdGsuY3BwCkBAIC01Nyw2ICs1NywxMCBAQAogI2luY2x1ZGUgPGdkay9n
ZGt4Lmg+CiAjZW5kaWYKIAorI2lmIFVTRShSRURJUkVDVEVEX1hDT01QT1NJVEVfV0lORE9XKQor
I2luY2x1ZGUgIlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmgiCisjZW5kaWYKKwogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMTMzLDYgKzEzNyw5
IEBAIFJlZjxMYXllclRyZWVIb3N0R3RrPiBMYXllclRyZWVIb3N0R3RrOjpjcmVhdGUoV2ViUGFn
ZSYgd2ViUGFnZSkKIAogTGF5ZXJUcmVlSG9zdEd0azo6TGF5ZXJUcmVlSG9zdEd0ayhXZWJQYWdl
JiB3ZWJQYWdlKQogICAgIDogTGF5ZXJUcmVlSG9zdCh3ZWJQYWdlKQorI2lmIFVTRShSRURJUkVD
VEVEX1hDT01QT1NJVEVfV0lORE9XKQorICAgICwgbV9yZWRpcmVjdGVkV2luZG93KFJlZGlyZWN0
ZWRYQ29tcG9zaXRlV2luZG93OjpjcmVhdGUod2ViUGFnZSkpCisjZW5kaWYKICAgICAsIG1fcmVu
ZGVyRnJhbWVTY2hlZHVsZXIoc3RkOjpiaW5kKCZMYXllclRyZWVIb3N0R3RrOjpyZW5kZXJGcmFt
ZSwgdGhpcykpCiB7CiAgICAgbV9yb290TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUoZ3Jh
cGhpY3NMYXllckZhY3RvcnkoKSwgKnRoaXMpOwpAQCAtMTU5LDE3ICsxNjYsMzAgQEAgTGF5ZXJU
cmVlSG9zdEd0azo6TGF5ZXJUcmVlSG9zdEd0ayhXZWJQYWdlJiB3ZWJQYWdlKQogCiAgICAgbV9y
b290TGF5ZXItPmFkZENoaWxkKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci5nZXQoKSk7CiAg
ICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKKworI2lm
IFVTRShSRURJUkVDVEVEX1hDT01QT1NJVEVfV0lORE9XKQorICAgIGlmIChtX3JlZGlyZWN0ZWRX
aW5kb3cpIHsKKyAgICAgICAgY3JlYXRlVGV4dHVyZU1hcHBlcigpOworICAgICAgICBtX2xheWVy
VHJlZUNvbnRleHQuY29udGV4dElEID0gbV9yZWRpcmVjdGVkV2luZG93LT5waXhtYXAoKTsKKyAg
ICB9CisjZW5kaWYKIH0KIAogYm9vbCBMYXllclRyZWVIb3N0R3RrOjptYWtlQ29udGV4dEN1cnJl
bnQoKQogewotICAgIGlmICghbV9sYXllclRyZWVDb250ZXh0LmNvbnRleHRJRCkgeworI2lmIFVT
RShSRURJUkVDVEVEX1hDT01QT1NJVEVfV0lORE9XKQorICAgIHVpbnQ2NF90IG5hdGl2ZUhhbmRs
ZSA9IG1fcmVkaXJlY3RlZFdpbmRvdyA/IG1fcmVkaXJlY3RlZFdpbmRvdy0+d2luZG93KCkgOiBt
X2xheWVyVHJlZUNvbnRleHQuY29udGV4dElEOworI2Vsc2UKKyAgICB1aW50NjRfdCBuYXRpdmVI
YW5kbGUgPSBtX2xheWVyVHJlZUNvbnRleHQuY29udGV4dElEOworI2VuZGlmCisKKyAgICBpZiAo
IW5hdGl2ZUhhbmRsZSkgewogICAgICAgICBtX2NvbnRleHQgPSBudWxscHRyOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgaWYgKCFtX2NvbnRleHQpIHsKLSAgICAgICAgbV9j
b250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVDb250ZXh0Rm9yV2luZG93KHJlaW50ZXJwcmV0X2Nh
c3Q8R0xOYXRpdmVXaW5kb3dUeXBlPihtX2xheWVyVHJlZUNvbnRleHQuY29udGV4dElEKSwgR0xD
b250ZXh0OjpzaGFyaW5nQ29udGV4dCgpKTsKKyAgICAgICAgbV9jb250ZXh0ID0gR0xDb250ZXh0
OjpjcmVhdGVDb250ZXh0Rm9yV2luZG93KHJlaW50ZXJwcmV0X2Nhc3Q8R0xOYXRpdmVXaW5kb3dU
eXBlPihuYXRpdmVIYW5kbGUpLCBHTENvbnRleHQ6OnNoYXJpbmdDb250ZXh0KCkpOwogICAgICAg
ICBpZiAoIW1fY29udGV4dCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0y
MDgsNiArMjI4LDEwIEBAIHZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6aW52YWxpZGF0ZSgpCiAKICAg
ICBtX2NvbnRleHQgPSBudWxscHRyOwogICAgIExheWVyVHJlZUhvc3Q6OmludmFsaWRhdGUoKTsK
KworI2lmIFVTRShSRURJUkVDVEVEX1hDT01QT1NJVEVfV0lORE9XKQorICAgIG1fcmVkaXJlY3Rl
ZFdpbmRvdyA9IG51bGxwdHI7CisjZW5kaWYKIH0KIAogdm9pZCBMYXllclRyZWVIb3N0R3RrOjpz
ZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheSgpCkBAIC0yNDcsMTEgKzI3MSwyNSBA
QCB2b2lkIExheWVyVHJlZUhvc3RHdGs6OnNpemVEaWRDaGFuZ2UoY29uc3QgSW50U2l6ZSYgbmV3
U2l6ZSkKICAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3Bs
YXlJblJlY3QoRmxvYXRSZWN0KDAsIG9sZFNpemUuaGVpZ2h0KCksIG5ld1NpemUud2lkdGgoKSwg
bmV3U2l6ZS5oZWlnaHQoKSAtIG9sZFNpemUuaGVpZ2h0KCkpKTsKICAgICBtX25vbkNvbXBvc2l0
ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwogCisjaWYgVVNFKFJFRElSRUNURURf
WENPTVBPU0lURV9XSU5ET1cpCisgICAgaWYgKG1fcmVkaXJlY3RlZFdpbmRvdykgeworICAgICAg
ICBtX3JlZGlyZWN0ZWRXaW5kb3ctPnJlc2l6ZShuZXdTaXplKTsKKyAgICAgICAgbV9sYXllclRy
ZWVDb250ZXh0LmNvbnRleHRJRCA9IG1fcmVkaXJlY3RlZFdpbmRvdy0+cGl4bWFwKCk7CisgICAg
fQorI2VuZGlmCisKICAgICBjb21wb3NpdGVMYXllcnNUb0NvbnRleHQoRm9yUmVzaXplKTsKIH0K
IAogdm9pZCBMYXllclRyZWVIb3N0R3RrOjpkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQo
KQogeworI2lmIFVTRShSRURJUkVDVEVEX1hDT01QT1NJVEVfV0lORE9XKQorICAgIGlmIChtX3Jl
ZGlyZWN0ZWRXaW5kb3cpIHsKKyAgICAgICAgbV9yZWRpcmVjdGVkV2luZG93LT5yZXNpemUobV93
ZWJQYWdlLnNpemUoKSk7CisgICAgICAgIG1fbGF5ZXJUcmVlQ29udGV4dC5jb250ZXh0SUQgPSBt
X3JlZGlyZWN0ZWRXaW5kb3ctPnBpeG1hcCgpOworICAgIH0KKyNlbmRpZgorCiAgICAgLy8gT3Ro
ZXIgbGF5ZXJzIGxlYXJuIG9mIHRoZSBzY2FsZSBmYWN0b3IgY2hhbmdlIHZpYSBXZWJQYWdlOjpz
ZXREZXZpY2VTY2FsZUZhY3Rvci4KICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPmRl
dmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOwogCkBAIC0zNzcsMTEgKzQxNSw4IEBAIHZv
aWQgTGF5ZXJUcmVlSG9zdEd0azo6c2V0Vmlld092ZXJsYXlSb290TGF5ZXIoR3JhcGhpY3NMYXll
ciogdmlld092ZXJsYXlSb290TGF5CiAgICAgICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChtX3Zp
ZXdPdmVybGF5Um9vdExheWVyKTsKIH0KIAotdm9pZCBMYXllclRyZWVIb3N0R3RrOjpzZXROYXRp
dmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcodWludDY0X3QgaGFuZGxlKQordm9pZCBMYXll
clRyZWVIb3N0R3RrOjpjcmVhdGVUZXh0dXJlTWFwcGVyKCkKIHsKLSAgICBjYW5jZWxQZW5kaW5n
TGF5ZXJGbHVzaCgpOwotICAgIG1fbGF5ZXJUcmVlQ29udGV4dC5jb250ZXh0SUQgPSBoYW5kbGU7
Ci0KICAgICAvLyBUaGUgY3JlYXRpb24gb2YgdGhlIFRleHR1cmVNYXBwZXIgbmVlZHMgYW4gYWN0
aXZlIE9wZW5HTCBjb250ZXh0LgogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTM5MSw5ICs0MjYsMTggQEAgdm9pZCBMYXllclRyZWVIb3N0R3RrOjpz
ZXROYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcodWludDY0X3QgaGFuZGxlKQogICAg
IG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXI6OmNyZWF0ZSgpOwogICAgIHN0YXRpY19j
YXN0PFRleHR1cmVNYXBwZXJHTCo+KG1fdGV4dHVyZU1hcHBlci5nZXQoKSktPnNldEVuYWJsZUVk
Z2VEaXN0YW5jZUFudGlhbGlhc2luZyh0cnVlKTsKICAgICBkb3duY2FzdDxHcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlcj4oKm1fcm9vdExheWVyKS5sYXllcigpLnNldFRleHR1cmVNYXBwZXIobV90
ZXh0dXJlTWFwcGVyLmdldCgpKTsKK30KIAorI2lmICFVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRF
X1dJTkRPVykKK3ZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6c2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZv
ckNvbXBvc2l0aW5nKHVpbnQ2NF90IGhhbmRsZSkKK3sKKyAgICBjYW5jZWxQZW5kaW5nTGF5ZXJG
bHVzaCgpOworICAgIG1fbGF5ZXJUcmVlQ29udGV4dC5jb250ZXh0SUQgPSBoYW5kbGU7CisKKyAg
ICBjcmVhdGVUZXh0dXJlTWFwcGVyKCk7CiAgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CiB9Cisj
ZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5oIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmgKaW5kZXggYzE1
Yjg2Zi4uZDY5ZGU5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmgKQEAgLTM5LDYgKzM5LDggQEAKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OworCiBj
bGFzcyBMYXllclRyZWVIb3N0R3RrIGZpbmFsIDogcHVibGljIExheWVyVHJlZUhvc3QsIFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8TGF5ZXJU
cmVlSG9zdEd0az4gY3JlYXRlKFdlYlBhZ2UmKTsKQEAgLTY1LDcgKzY3LDkgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiBzY3JvbGxSZWN0KSBvdmVycmlkZTsKICAgICB2b2lkIHNldFZpZXdPdmVybGF5Um9vdExh
eWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKIAorI2lmICFVU0UoUkVESVJF
Q1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKICAgICB2b2lkIHNldE5hdGl2ZVN1cmZhY2VIYW5kbGVG
b3JDb21wb3NpdGluZyh1aW50NjRfdCkgb3ZlcnJpZGU7CisjZW5kaWYKIAogICAgIGNsYXNzIFJl
bmRlckZyYW1lU2NoZWR1bGVyIHsKICAgICBwdWJsaWM6CkBAIC05OCwxMiArMTAyLDE2IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBmbHVzaEFuZFJlbmRlckxheWVycygpOwogICAgIGJvb2wgcmVuZGVy
RnJhbWUoKTsKICAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHZvaWQgY3JlYXRl
VGV4dHVyZU1hcHBlcigpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXI+IG1fcm9vdExheWVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpHcmFwaGlj
c0xheWVyPiBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6OlRleHR1cmVNYXBwZXI+IG1fdGV4dHVyZU1hcHBlcjsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6R0xDb250ZXh0PiBtX2NvbnRleHQ7CiAgICAgV2ViQ29yZTo6VHJhbnNm
b3JtYXRpb25NYXRyaXggbV9zY2FsZU1hdHJpeDsKKyNpZiBVU0UoUkVESVJFQ1RFRF9YQ09NUE9T
SVRFX1dJTkRPVykKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5k
b3c+IG1fcmVkaXJlY3RlZFdpbmRvdzsKKyNlbmRpZgogICAgIFJlbmRlckZyYW1lU2NoZWR1bGVy
IG1fcmVuZGVyRnJhbWVTY2hlZHVsZXI7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvUmVkaXJlY3RlZFhDb21wb3Np
dGVXaW5kb3cuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjZmQ4YjcK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3Rr
L1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmNwcApAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMi0yMDE2IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJS
ZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oIgorCisjaWYgVVNFKFJFRElSRUNURURfWENPTVBP
U0lURV9XSU5ET1cpCisKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Q
bGF0Zm9ybURpc3BsYXlYMTEuaD4KKyNpbmNsdWRlIDxYMTEvWGxpYi5oPgorI2luY2x1ZGUgPFgx
MS9leHRlbnNpb25zL1hjb21wb3NpdGUuaD4KKyNpbmNsdWRlIDxnZGsvZ2RreC5oPgorI2luY2x1
ZGUgPHd0Zi9SdW5Mb29wLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworc3RkOjp1bmlxdWVfcHRyPFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93
PiBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6Y3JlYXRlKFdlYlBhZ2UmIHdlYlBhZ2UpCit7
CisgICAgaWYgKCFkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KFBsYXRmb3JtRGlzcGxheTo6
c2hhcmVkRGlzcGxheSgpKS5zdXBwb3J0c1hDb21wb3NpdGUoKSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxSZWRpcmVjdGVkWENvbXBvc2l0ZVdp
bmRvdz4obmV3IFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KHdlYlBhZ2UpKTsKK30KKworUmVk
aXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KFdlYlBh
Z2UmIHdlYlBhZ2UpCisgICAgOiBtX3dlYlBhZ2Uod2ViUGFnZSkKKyAgICAsIG1fZGlzcGxheShk
b3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxh
eSgpKS5uYXRpdmUoKSkKKyAgICAsIG1fc2l6ZSh3ZWJQYWdlLnNpemUoKSkKK3sKKyAgICBtX3Np
emUuc2NhbGUobV93ZWJQYWdlLmRldmljZVNjYWxlRmFjdG9yKCkpOworCisgICAgU2NyZWVuKiBz
Y3JlZW4gPSBEZWZhdWx0U2NyZWVuT2ZEaXNwbGF5KG1fZGlzcGxheSk7CisKKyAgICBBU1NFUlQo
ZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5WDExPihQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3Bs
YXkoKSkubmF0aXZlKCkgPT0gbV9kaXNwbGF5KTsKKyAgICBHZGtWaXN1YWwqIHZpc3VhbCA9IGdk
a19zY3JlZW5fZ2V0X3JnYmFfdmlzdWFsKGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKSk7CisgICAg
aWYgKCF2aXN1YWwpCisgICAgICAgIHZpc3VhbCA9IGdka19zY3JlZW5fZ2V0X3N5c3RlbV92aXN1
YWwoZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpKTsKKworICAgIFhVbmlxdWVDb2xvcm1hcCBjb2xv
cm1hcChYQ3JlYXRlQ29sb3JtYXAobV9kaXNwbGF5LCBSb290V2luZG93T2ZTY3JlZW4oc2NyZWVu
KSwgR0RLX1ZJU1VBTF9YVklTVUFMKHZpc3VhbCksIEFsbG9jTm9uZSkpOworCisgICAgWFNldFdp
bmRvd0F0dHJpYnV0ZXMgd2luZG93QXR0cmlidXRlczsKKyAgICB3aW5kb3dBdHRyaWJ1dGVzLm92
ZXJyaWRlX3JlZGlyZWN0ID0gVHJ1ZTsKKyAgICB3aW5kb3dBdHRyaWJ1dGVzLmNvbG9ybWFwID0g
Y29sb3JtYXAuZ2V0KCk7CisKKyAgICAvLyBDV0JvcmRlclBpeGVsIG11c3QgYmUgcHJlc2VudCB3
aGVuIHRoZSBkZXB0aCBkb2Vzbid0IG1hdGNoIHRoZSBwYXJlbnQncyBvbmUuCisgICAgLy8gU2Vl
IGh0dHA6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy94b3JnL3hzZXJ2ZXIvdHJlZS9kaXgvd2luZG93
LmM/aWQ9eG9yZy1zZXJ2ZXItMS4xNi4wI243MDMuCisgICAgd2luZG93QXR0cmlidXRlcy5ib3Jk
ZXJfcGl4ZWwgPSAwOworCisgICAgbV9wYXJlbnRXaW5kb3cgPSBYQ3JlYXRlV2luZG93KG1fZGlz
cGxheSwKKyAgICAgICAgUm9vdFdpbmRvd09mU2NyZWVuKHNjcmVlbiksCisgICAgICAgIFdpZHRo
T2ZTY3JlZW4oc2NyZWVuKSArIDEsIDAsIDEsIDEsCisgICAgICAgIDAsCisgICAgICAgIGdka192
aXN1YWxfZ2V0X2RlcHRoKHZpc3VhbCksCisgICAgICAgIElucHV0T3V0cHV0LAorICAgICAgICBH
REtfVklTVUFMX1hWSVNVQUwodmlzdWFsKSwKKyAgICAgICAgQ1dPdmVycmlkZVJlZGlyZWN0IHwg
Q1dDb2xvcm1hcCB8IENXQm9yZGVyUGl4ZWwsCisgICAgICAgICZ3aW5kb3dBdHRyaWJ1dGVzKTsK
KyAgICBYTWFwV2luZG93KG1fZGlzcGxheSwgbV9wYXJlbnRXaW5kb3cuZ2V0KCkpOworCisgICAg
d2luZG93QXR0cmlidXRlcy5ldmVudF9tYXNrID0gU3RydWN0dXJlTm90aWZ5TWFzazsKKyAgICB3
aW5kb3dBdHRyaWJ1dGVzLm92ZXJyaWRlX3JlZGlyZWN0ID0gRmFsc2U7CisKKyAgICAvLyBDcmVh
dGUgdGhlIHdpbmRvdyBvZiBhdCBsYXN0IDF4MSBzaW5jZSBYIGRvZXNuJ3QgYWxsb3cgdG8gY3Jl
YXRlIGVtcHR5IHdpbmRvd3MuCisgICAgbV93aW5kb3cgPSBYQ3JlYXRlV2luZG93KG1fZGlzcGxh
eSwKKyAgICAgICAgbV9wYXJlbnRXaW5kb3cuZ2V0KCksCisgICAgICAgIDAsIDAsCisgICAgICAg
IHN0ZDo6bWF4KDEsIG1fc2l6ZS53aWR0aCgpKSwKKyAgICAgICAgc3RkOjptYXgoMSwgbV9zaXpl
LmhlaWdodCgpKSwKKyAgICAgICAgMCwKKyAgICAgICAgQ29weUZyb21QYXJlbnQsCisgICAgICAg
IElucHV0T3V0cHV0LAorICAgICAgICBDb3B5RnJvbVBhcmVudCwKKyAgICAgICAgQ1dFdmVudE1h
c2ssCisgICAgICAgICZ3aW5kb3dBdHRyaWJ1dGVzKTsKKyAgICBYTWFwV2luZG93KG1fZGlzcGxh
eSwgbV93aW5kb3cuZ2V0KCkpOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgWEV2ZW50IGV2
ZW50OworICAgICAgICBYV2luZG93RXZlbnQobV9kaXNwbGF5LCBtX3dpbmRvdy5nZXQoKSwgU3Ry
dWN0dXJlTm90aWZ5TWFzaywgJmV2ZW50KTsKKyAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT0gTWFw
Tm90aWZ5ICYmIGV2ZW50LnhtYXAud2luZG93ID09IG1fd2luZG93LmdldCgpKQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIFhTZWxlY3RJbnB1dChtX2Rpc3BsYXksIG1fd2luZG93Lmdl
dCgpLCBOb0V2ZW50TWFzayk7CisgICAgWENvbXBvc2l0ZVJlZGlyZWN0V2luZG93KG1fZGlzcGxh
eSwgbV93aW5kb3cuZ2V0KCksIENvbXBvc2l0ZVJlZGlyZWN0TWFudWFsKTsKKyAgICBtX3BpeG1h
cCA9IFhDb21wb3NpdGVOYW1lV2luZG93UGl4bWFwKG1fZGlzcGxheSwgbV93aW5kb3cuZ2V0KCkp
OworfQorCitSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6flJlZGlyZWN0ZWRYQ29tcG9zaXRl
V2luZG93KCkKK3sKKyAgICBBU1NFUlQobV9kaXNwbGF5KTsKKyAgICBBU1NFUlQobV93aW5kb3cp
OworICAgIEFTU0VSVChtX3BhcmVudFdpbmRvdyk7CisKKyAgICAvLyBFeHBsaWNpdGx5IHJlc2V0
IHRoZXNlIGJlY2F1c2Ugd2UgbmVlZCB0byBlbnN1cmUgaXQgaGFwcGVucyBpbiB0aGlzIG9yZGVy
LgorICAgIG1fd2luZG93LnJlc2V0KCk7CisgICAgbV9wYXJlbnRXaW5kb3cucmVzZXQoKTsKK30K
Kwordm9pZCBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6cmVzaXplKGNvbnN0IEludFNpemUm
IHNpemUpCit7CisgICAgSW50U2l6ZSBzY2FsZWRTaXplKHNpemUpOworICAgIHNjYWxlZFNpemUu
c2NhbGUobV93ZWJQYWdlLmRldmljZVNjYWxlRmFjdG9yKCkpOworICAgIGlmIChzY2FsZWRTaXpl
ID09IG1fc2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zaXplID0gc2NhbGVkU2l6ZTsK
KworICAgIC8vIFJlc2l6ZSB0aGUgd2luZG93IHRvIGF0IGxhc3QgMXgxIHNpbmNlIFggZG9lc24n
dCBhbGxvdyB0byBjcmVhdGUgZW1wdHkgd2luZG93cy4KKyAgICBYUmVzaXplV2luZG93KG1fZGlz
cGxheSwgbV93aW5kb3cuZ2V0KCksIHN0ZDo6bWF4KDEsIG1fc2l6ZS53aWR0aCgpKSwgc3RkOjpt
YXgoMSwgbV9zaXplLmhlaWdodCgpKSk7CisgICAgWEZsdXNoKG1fZGlzcGxheSk7CisKKyAgICAv
LyBSZWxlYXNlIHRoZSBwcmV2aW91cyBwaXhtYXAgbGF0ZXIgdG8gZ2l2ZSBzb21lIHRpbWUgdG8g
dGhlIFVJIHByb2Nlc3MgdG8gdXBkYXRlLgorICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaEFm
dGVyKHN0ZDo6Y2hyb25vOjpzZWNvbmRzKDUpLCBbcGl4bWFwID0gV1RGTW92ZShtX3BpeG1hcCld
IHsgfSk7CisgICAgbV9waXhtYXAgPSBYQ29tcG9zaXRlTmFtZVdpbmRvd1BpeG1hcChtX2Rpc3Bs
YXksIG1fd2luZG93LmdldCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gVVNFKFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2lu
ZG93LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1JlZGlyZWN0ZWRY
Q29tcG9zaXRlV2luZG93LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRh
NTRkOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaApAQCAtMCwwICsxLDY1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTYgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoUkVESVJF
Q1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKKworI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvWFVuaXF1ZVJlc291cmNlLmg+CisjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisKK3R5cGVkZWYgc3RydWN0IF9YRGlzcGxheSBEaXNwbGF5OwordHlwZWRlZiB1
bnNpZ25lZCBsb25nIFBpeG1hcDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBXaW5kb3c7CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdlOworCitjbGFzcyBSZWRpcmVjdGVkWENv
bXBvc2l0ZVdpbmRvdyB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVkaXJlY3RlZFhDb21w
b3NpdGVXaW5kb3cpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93PiBjcmVhdGUoV2Vi
UGFnZSYpOworICAgIH5SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdygpOworCisgICAgV2luZG93
IHdpbmRvdygpIGNvbnN0IHsgcmV0dXJuIG1fd2luZG93LmdldCgpOyB9CisgICAgUGl4bWFwIHBp
eG1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fcGl4bWFwLmdldCgpOyB9CisgICAgdm9pZCByZXNpemUo
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOworCitwcml2YXRlOgorICAgIFJlZGlyZWN0ZWRYQ29t
cG9zaXRlV2luZG93KFdlYlBhZ2UmKTsKKworICAgIFdlYlBhZ2UmIG1fd2ViUGFnZTsKKyAgICBE
aXNwbGF5KiBtX2Rpc3BsYXkgeyBudWxscHRyIH07CisgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3Np
emU7CisgICAgV2ViQ29yZTo6WFVuaXF1ZVdpbmRvdyBtX3dpbmRvdzsKKyAgICBXZWJDb3JlOjpY
VW5pcXVlV2luZG93IG1fcGFyZW50V2luZG93OworICAgIFdlYkNvcmU6OlhVbmlxdWVQaXhtYXAg
bV9waXhtYXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShS
RURJUkVDVEVEX1hDT01QT1NJVEVfV0lORE9XKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284991</attachid>
            <date>2016-08-01 01:44:54 -0700</date>
            <delta_ts>2016-08-01 23:22:36 -0700</delta_ts>
            <desc>Address more review comments</desc>
            <filename>wk2-redirected-window-web-process.diff</filename>
            <type>text/plain</type>
            <size>92328</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5YTg0ZmE0Li44NDc2YWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcg
QEAKKzIwMTYtMDctMzEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIE1vdmUgdGhlIHJlZGlyZWN0ZWQgWENvbXBvc2l0ZSB3aW5kb3cg
dG8gdGhlIHdlYiBwcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjAzODkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGQgaGVscGVyIG1ldGhvZHMgdG8gUGxhdGZvcm1EaXNwbGF5WDExIHRvIHF1
ZXJ5IFggZXh0ZW5zaW9ucyBzdXBwb3J0ZWQgYnkgdGhlIGRpc3BsYXkuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtRGlzcGxheVgxMTo6c3VwcG9ydHNYQ29tcG9zaXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheVgxMTo6c3VwcG9ydHNYRGFtYWdlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmg6CisKIDIwMTYtMDct
MzAgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCByZWJhc2VsaW5lIGJpbmRpbmdzIHRlc3RzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MveDExL1BsYXRmb3JtRGlzcGxheVgxMS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmNwcAppbmRleCA5
NjZhY2Q2Li41MDE4N2ZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmNwcApAQCAtMjgsNiArMjgsMTAg
QEAKIAogI2lmIFBMQVRGT1JNKFgxMSkKICNpbmNsdWRlIDxYMTEvWGxpYi5oPgorI2luY2x1ZGUg
PFgxMS9leHRlbnNpb25zL1hjb21wb3NpdGUuaD4KKyNpZiBQTEFURk9STShHVEspCisjaW5jbHVk
ZSA8WDExL2V4dGVuc2lvbnMvWGRhbWFnZS5oPgorI2VuZGlmCiAKICNpZiBVU0UoRUdMKQogI2lu
Y2x1ZGUgPEVHTC9lZ2wuaD4KQEAgLTYxLDYgKzY1LDMyIEBAIHZvaWQgUGxhdGZvcm1EaXNwbGF5
WDExOjppbml0aWFsaXplRUdMRGlzcGxheSgpCiB9CiAjZW5kaWYKIAorYm9vbCBQbGF0Zm9ybURp
c3BsYXlYMTE6OnN1cHBvcnRzWENvbXBvc2l0ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3N1cHBv
cnRzWENvbXBvc2l0ZSkgeworICAgICAgICBpbnQgZXZlbnRCYXNlLCBlcnJvckJhc2U7CisgICAg
ICAgIG1fc3VwcG9ydHNYQ29tcG9zaXRlID0gWENvbXBvc2l0ZVF1ZXJ5RXh0ZW5zaW9uKG1fZGlz
cGxheSwgJmV2ZW50QmFzZSwgJmVycm9yQmFzZSk7CisgICAgfQorICAgIHJldHVybiBtX3N1cHBv
cnRzWENvbXBvc2l0ZS52YWx1ZSgpOworfQorCitib29sIFBsYXRmb3JtRGlzcGxheVgxMTo6c3Vw
cG9ydHNYRGFtYWdlKE9wdGlvbmFsPGludD4mIGRhbWFnZUV2ZW50QmFzZSkgY29uc3QKK3sKKyAg
ICBpZiAoIW1fc3VwcG9ydHNYRGFtYWdlKSB7CisjaWYgUExBVEZPUk0oR1RLKQorICAgICAgICBp
bnQgZXZlbnRCYXNlLCBlcnJvckJhc2U7CisgICAgICAgIG1fc3VwcG9ydHNYRGFtYWdlID0gWERh
bWFnZVF1ZXJ5RXh0ZW5zaW9uKG1fZGlzcGxheSwgJmV2ZW50QmFzZSwgJmVycm9yQmFzZSk7Cisg
ICAgICAgIGlmIChtX3N1cHBvcnRzWERhbWFnZS52YWx1ZSgpKQorICAgICAgICAgICAgbV9kYW1h
Z2VFdmVudEJhc2UgPSBldmVudEJhc2U7CisjZWxzZQorICAgICAgICBtX3N1cHBvcnRzWERhbWFn
ZSA9IGZhbHNlOworI2VuZGlmCisgICAgfQorCisgICAgZGFtYWdlRXZlbnRCYXNlID0gbV9kYW1h
Z2VFdmVudEJhc2U7CisgICAgcmV0dXJuIG1fc3VwcG9ydHNYRGFtYWdlLnZhbHVlKCk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFBMQVRGT1JNKFgxMSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3gxMS9QbGF0Zm9ybURpc3Bs
YXlYMTEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3gxMS9QbGF0Zm9ybURp
c3BsYXlYMTEuaAppbmRleCBlZmFlNWFiLi4xMGJjMWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MveDExL1BsYXRmb3JtRGlzcGxheVgxMS5oCkBA
IC0yOSw2ICsyOSw3IEBACiAjaWYgUExBVEZPUk0oWDExKQogCiAjaW5jbHVkZSAiUGxhdGZvcm1E
aXNwbGF5LmgiCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAKIHR5cGVkZWYgc3RydWN0IF9Y
RGlzcGxheSBEaXNwbGF5OwogCkBAIC00MSw2ICs0Miw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5QbGF0Zm9ybURpc3BsYXlYMTEoKTsKIAogICAgIERpc3BsYXkqIG5hdGl2ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZGlzcGxheTsgfQorICAgIGJvb2wgc3VwcG9ydHNYQ29tcG9zaXRlKCkgY29uc3Q7
CisgICAgYm9vbCBzdXBwb3J0c1hEYW1hZ2UoT3B0aW9uYWw8aW50PiYgZGFtYWdlRXZlbnRCYXNl
KSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBUeXBlIHR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBQbGF0Zm9ybURpc3BsYXk6OlR5cGU6OlgxMTsgfQpAQCAtNTEsNiArNTQsOSBAQCBwcml2
YXRlOgogCiAgICAgRGlzcGxheSogbV9kaXNwbGF5OwogICAgIGJvb2wgbV9vd25lZERpc3BsYXk7
CisgICAgbXV0YWJsZSBPcHRpb25hbDxib29sPiBtX3N1cHBvcnRzWENvbXBvc2l0ZTsKKyAgICBt
dXRhYmxlIE9wdGlvbmFsPGJvb2w+IG1fc3VwcG9ydHNYRGFtYWdlOworICAgIG11dGFibGUgT3B0
aW9uYWw8aW50PiBtX2RhbWFnZUV2ZW50QmFzZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwppbmRleCA4YWRjZGQzLi5mY2MwMWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTQxIEBACisyMDE2LTA3LTMxICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlh
LmNvbT4KKworICAgICAgICBbR1RLXSBNb3ZlIHRoZSByZWRpcmVjdGVkIFhDb21wb3NpdGUgd2lu
ZG93IHRvIHRoZSB3ZWIgcHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYwMzg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW4gdGhlIGN1cnJlbnQgY29kZSwgdGhlIFVJIHByb2Nlc3MgY3JlYXRl
cyB0aGUgcmVkaXJlY3RlZCB3aW5kb3cgdGhhdCB0aGUgd2ViIHByb2Nlc3MgdXNlcyB0byByZW5k
ZXIKKyAgICAgICAgYWNjZWxlcmF0ZWQgY29udGVudHMuIFRoZSByZWRpcmVjdGVkIHdpbmRvdyBp
cyBzZW50IHRvIHRoZSB3ZWIgcHJvY2VzcyBhcyBuYXRpdmUgc3VyZmFjZSBoYW5kbGUsIGFuZCB1
c2luZworICAgICAgICBYRGFtYWdlIGV4dGVuc2lvbiB0aGUgVUkgcHJvY2VzcyB0YWtlcyBhIHBp
eG1hcCBvZiB0aGUgcmVkaXJlY3RlZCB3aW5kb3cgdG8gcmVuZGVyIGludG8gdGhlIHdpZGdldCB3
aGVuIHRoZXJlCisgICAgICAgIGFyZSB1cGRhdGVzLiBUaGlzIHJlcXVpcmVzIHNldmVyYWwgcG9p
bnRzIG9mIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIFVJIGFuZCB3ZWIgcHJvY2Vzc2VzLiBXaGVu
IHRoZSB3ZWIgdmlldyBpcworICAgICAgICByZXNpemVkLCB0aGUgVUkgcHJvY2VzcyBmaXJzdCBy
ZXNpemVzIHRoZSByZWRpcmVjdGVkIHdpbmRvdyBhbmQgdGhlbiBzZW5kcyBhIG5ldyBiYWNraW5n
IHN0b3JlIElEIHRvIHRoZSB3ZWIKKyAgICAgICAgcHJvY2Vzcy4gVGhlIHRpbWUgYmV0d2VlbiB0
aGUgcmVkaXJlY3RlZCB3aW5kb3cgaXMgcmVzaXplZCBhbmQgdGhlIHdlYiBwcm9jZXNzIHJlbmRl
cnMgdGhlIG5ldyBjb250ZW50cyB0aGUgVUkKKyAgICAgICAgcHJvY2VzcyBrZWVwcyByZW5kZXJp
bmcgdGhlIHByZXZpb3VzIGNvbnRlbnRzIHdpdGggdGhlIHByZXZpb3VzIHNpemUgaW4gdGhlIG5l
dyB3aW5kb3cgd2l0aCB0aGUgbmV3IHNpemUuIFRoaXMKKyAgICAgICAgbWFrZXMgdGhlIHJlc2l6
ZSBwcm9jZXNzIHNsb3csIGFuZCBpdCBwcm9kdWNlcyByZW5kZXJpbmcgYXJ0aWZhY3RzIHF1aXRl
IG9mdGVuLiBUaGUgcmVkaXJlY3RlZCB3aW5kb3cgaXMgY3JlYXRlZAorICAgICAgICB3aGVuIHRo
ZSB3ZWIgdmlldyBpcyByZWFsaXplZCwgdG8gYmUgYWJsZSB0byBpbmhlcml0IHRoZSBYVmlzdWFs
IGZyb20gdGhlIHBhcmVudCB3aW5kb3csIGFuZCB0aGUgbmF0aXZlIHdpbmRvdworICAgICAgICBo
YW5kbGUgaXMgc2VudCB0byB0aGUgd2ViIHByb2Nlc3MuIFRoZSB0aW1lIHVudGlsIHRoZSB3aW5k
b3cgaXMgcmVhbGl6ZWQsIHRoZSB3ZWIgcHJvY2VzcyBkb2Vzbid0IGhhdmUgYSBjb250ZXh0Cisg
ICAgICAgIHRvIHJlbmRlciBpbnRvLCBzbyB0aGUgVUkgcHJvY2VzcyBzaW1wbHkgcmVuZGVycyBh
biBlbXB0eSBwYWdlLiBXaGVuIHRoZSB3ZWIgdmlldyBpcyB1bnJlYWxpemVkLCBmb3IgZXhhbXBs
ZSBpZgorICAgICAgICB0aGUgd2ViIHZpZXcgaXMgcmVwYXJlbnRlZCwgdGhlIHJlZGlyZWN0ZWQg
d2luZG93IGlzIGRlc3Ryb3llZCwgYW5kIGEgc3luYyBtZXNzYWdlIGlzIHNlbnQgdG8gdGhlIHdl
YiBwcm9jZXNzIHRvCisgICAgICAgIGRlc3Ryb3kgdGhlIGN1cnJlbnQgZ2wgY29udGV4dCBhbmQg
c3RvcCBkcmF3aW5nLiBUaGlzIG5lZWRzIHRvIGhhcHBlbiBzeW5jaHJvbm91c2x5LCBiZWNhdXNl
IHRoZSBVSSBwcm9jZXNzCisgICAgICAgIGNhbid0IHJlbW92ZSB0aGUgcmVkaXJlY3RlZCB3aW5k
b3cgdW50aWwgdGhlIHdlYiBwcm9jZXNzIGhhcyBzdG9wcGVkIHJlbmRlcmluZyBpbnRvIGl0LiBU
aGlzIG1ha2VzIGFsc28gdGhlCisgICAgICAgIHJlcGFyZW50aW5nIHByb2Nlc3MgcXVpdGUgdW5z
dGFibGUgYW5kIHJpc2t5LgorICAgICAgICBUbyBhbGwgdGhvc2Ugc3luY2hyb25pemF0aW9uIHBv
aW50cyB3ZSBub3cgaGF2ZSB0byBhZGQgdGhlIHN5bmNocm9uaXphdGlvbiB3aXRoIHRoZSBjb21w
b3NpdGluZyB0aHJlYWQgd2hlbgorICAgICAgICB1c2luZyB0aGUgdGhyZWFkZWQgY29tcG9zaXRv
ci4gVGhlIHRocmVhZGVkIGNvbXBvc2l0b3IgbWFkZSByZXNpemluZywgcmVwYXJlbnRpbmcsIGV0
Yy4gZXZlbiB3b3JzZS4gV2UgY2FuJ3QKKyAgICAgICAgYXZvaWQgdGhlIHN5bmNocm9uaXphdGlv
biB3aXRoIHRoZSB0aHJlYWRlZCBjb21wb3NpdG9yLCBidXQgd2UgY2FuIHJlZHVjZSB0aGUgc3lu
Y2hyb25pemF0aW9uIHBvaW50cyBhbmQgaW1wcm92ZQorICAgICAgICB0aGUgY3VycmVudCBvbmVz
IGJ5IG1vdmluZyB0aGUgcmVkaXJlY3RlZCB3aW5kb3cgdG8gdGhlIHdlYiBwcm9jZXNzLiBJbiB0
aGlzIGNhc2UgaXMgd2ViIHByb2Nlc3Mgd2hvIGNyZWF0ZXMgdGhlCisgICAgICAgIHJlZGlyZWN0
ZWQgd2luZG93LCBzbyB3ZSBjYW4gYmUgc3VyZSB0aGF0IGl0IGFsd2F5cyBoYXMgYSB2YWxpZCBu
YXRpdmUgc3VyZmFjZSBoYW5kbGUgdG8gcmVuZGVyIGludG8uIFRoaXMgbWVhbnMKKyAgICAgICAg
d2Ugbm8gbG9uZ2VyIG5lZWQgdGhlIElQQyBtZXNzYWdlIHRvIHNlbmQgdGhlIG5hdGl2ZSBzdXJm
YWNlIGhhbmRsZSBmcm9tIHRoZSBVSSBwcm9jZXNzIHRvIHRoZSB3ZWIgcHJvY2Vzcywgbm9yCisg
ICAgICAgIHRoZSBzeW5jIG1lc3NhZ2UgdG8gZGVzdHJveSBpdCBlaXRoZXIuIFRoaXMgYWxzbyBt
ZWFucyB3ZSBubyBsb25nZXIgbmVlZCB0byB3YWl0IHVudGlsIHRoZSB2aWV3IGlzIHJlYWxpemVk
IHRvCisgICAgICAgIHN0YXJ0IHJlbmRlcmluZyBhY2NlbGVyYXRlZCBjb250ZW50cywgYW5kIHdl
IGRvbid0IG5lZWQgdG8gc3RvcCB3aGVuIGl0J3MgdW5yZWFsaXplZCBlaXRoZXIuIFdlIGRvbid0
IHJlYWxseQorICAgICAgICBuZWVkIHRvIGluaGVyaXQgdGhlIFhWaXN1YWwgZnJvbSB0aGUgcGFy
ZW50IHdpbmRvdyBpZiB0aGUgcmVkaXJlY3RlZCB3aW5kb3cgYWx3YXlzIHVzZXMgYWx3YXlzIGEg
UkdCQSB2aXN1YWwKKyAgICAgICAgd2hlbiBhdmFpbGFibGUuIFRoYXQgd2F5IHdlIGFsd2F5cyBy
ZW5kZXIgaW50byBhIHRyYW5zcGFyZW50IHdpbmRvdyB0aGF0IGlzIGNvbXBvc2VkIGludG8gdGhl
IHdlYiB2aWV3CisgICAgICAgIHdpZGdldC4gQW5kIHdoZW4gdGhlIHdlYiB2aWV3IGlzIHJlc2l6
ZWQsIHdlIG5vIGxvbmdlciBuZWVkIHRvIGRlc3Ryb3kgdGhlIEdMIGNvbnRleHQgZWl0aGVyLCBi
ZWNhdXNlIHdlIHVzZSB0aGUKKyAgICAgICAgc2FtZSByZWRpcmVjdGVkIHdpbmRvdyBhcyB0aGUg
bmF0aXZlIGhhbmRsZSwgYnV0IGNyZWF0ZSBhIG5ldyBwaXhtYXAgdGhhdCBpcyB3aGF0IHdlIHNl
bmQgdG8gdGhlIFVJIHByb2Nlc3MgYXMKKyAgICAgICAgbGF5ZXIgdHJlZSBjb250ZXh0IElELiBU
aGUgbGF5ZXIgdHJlZSBjb250ZXh0IElEIGlzIGFscmVhZHkgc2VudCB0byB0aGUgVUkgcHJvY2Vz
cyBieSB0aGUgZHJhd2luZyBhcmVhIGFzIHBhcnQKKyAgICAgICAgb2YgdGhlIGJhY2tpbmcgc3Rv
cmUgdXBkYXRlIHByb2Nlc3MsIHNvIHdlIGRvbid0IG5lZWQgYW55IG5ldyBJUEMgbWVzc2FnZSBm
b3IgdGhpcy4gV2hlbiB0aGUgd2ViIHZpZXcgaXMKKyAgICAgICAgcmVzaXplZCwgdGhlIFVJIHBy
b2Nlc3Mgc2VuZHMgYSBiYWNraW5nIHN0b3JlIHN0YXRlIHVwZGF0ZSBtZXNzYWdlIHRvIHRoZSB3
ZWIgcHJvY2VzcyB0aGF0IHVwZGF0ZXMgaXRzIHNpemUsCisgICAgICAgIHJlbGF5b3V0cyBhbmQg
dGhlbiByZW5kZXJzIHRoZSBuZXcgY29udGVudHMsIHNvIHRoYXQgd2hlbiB0aGUgdXBkYXRlIGJh
Y2tpbmcgc3RvcmUgc3RhdGUgcmVwbHkgZ2V0cyB0byB0aGUgVUkKKyAgICAgICAgcHJvY2Vzcywg
d2UgYWxyZWFkeSBoYXZlIGEgbmV3IHBpeG1hcCB3aXRoIHRoZSBuZXcgY29udGVudHMgdXBkYXRl
ZC4gVGhpcyBtYWtlcyByZXNpemluZyBzbW9vdGggYWdhaW4sIGFuZAorICAgICAgICBhdm9pZHMg
ZmxpY2tlcmluZyBhbmQgcmVuZGVyaW5nIGFydGlmYWN0cy4gQW5kIGZpbmFsbHkgYWxsIHRoaXMg
YWxzbyBwcmV2ZW50cyBzZXZlcmFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IHdlcmUKKyAgICAgICAg
Y2F1c2luZyBYIGVycm9ycyBhbmQgd2ViIHByb2Nlc3MgY3Jhc2hlcy4KKworICAgICAgICAqIFBs
YXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3Ro
cmVhZGVkY29tcG9zaXRvci9UaHJlYWRlZENvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViS2l0
OjpUaHJlYWRlZENvbXBvc2l0b3I6OmNyZWF0ZSk6IE1ha2UgaXQgcG9zc2libGUgdG8gb3B0aW9u
YWxseSBwYXNzIGEgbmF0aXZlIHN1cmZhY2UgaGFuZGxlIGZvcgorICAgICAgICBjb21wb3NpdGlu
ZyB0byB0aGUgVGhyZWFkZWRDb21wb3NpdG9yIGNvbnRydWN0b3IuCisgICAgICAgIChXZWJLaXQ6
OlRocmVhZGVkQ29tcG9zaXRvcjo6VGhyZWFkZWRDb21wb3NpdG9yKTogSW5pdGlhbGl6ZSB0aGUg
bmF0aXZlIHN1cmZhY2UgaGFuZGxlIGFuZCBtYWtlIHRoZSBzY2VuZSBhY3RpdmUKKyAgICAgICAg
YWZ0ZXIgdGhlIHRocmVhZCBpbml0aWFsaXphdGlvbiBpZiB3ZSBhbHJlYWR5IGhhdmUgYSB2YWxp
ZCBoYW5kbGUuCisgICAgICAgICogU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRj
b21wb3NpdG9yL1RocmVhZGVkQ29tcG9zaXRvci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL1BhZ2VDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6
OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUpOiBQYXNzIHRoZSBsYXllciB0cmVlIGNv
bnRleHQgSUQgdG8gdGhlIHdlYiB2aWV3LgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1w
bDo6dXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUpOiBOb3RpZnkgdGhlIHdlYiB2aWV3
IGFib3V0IHRoZSB1cGRhdGUuCisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjp3aWxs
RW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHA6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZVNl
dEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdQaXhtYXApOiBIZWxwZXIgZnVuY3Rpb24gdG8gdXBkYXRl
IHRoZSBwaXhtYXAgdXNlZCB0byByZW5kZXIgdGhlCisgICAgICAgIGFjY2VsZXJhdGVkIGNvbnRl
bnRzLgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VSZWFsaXplKTogUmVtb3ZlIHRoZSBjb2Rl
IHRvIGNyZWF0ZSB0aGUgcmVkaXJlY3RlZCB3aW5kb3cuCisgICAgICAgICh3ZWJraXRXZWJWaWV3
QmFzZVVucmVhbGl6ZSk6IFJlbW92ZSB0aGUgY29kZSB0byBkZXN0cm95IHRoZSByZWRpcmVjdGVk
IHdpbmRvdy4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlRGlzcG9zZSk6IFJlc2V0IHRoZSBh
Y2NlbGVyYXRlZCBjb21wb3NpdGluZyBwaXhtYXAuCisgICAgICAgICh3ZWJraXRXZWJWaWV3UmVu
ZGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jlc3VsdHMpOiBVc2UgdGhlIGFjY2VsZXJhdGVkIGNv
bXBvc2l0aW5nIHBpeG1hcCBzdXJmYWNlLgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VTaXpl
QWxsb2NhdGUpOiBSZW1vdmUgdGhlIGNvZGUgdG8gcmVzaXplIHRoZSByZWRpcmVjdGVkIHdpbmRv
dy4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlRW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5n
TW9kZSk6IFVwZGF0ZSB0aGUgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgcGl4bWFwLgorICAgICAg
ICAod2Via2l0V2ViVmlld0Jhc2VVcGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSk6IERp
dHRvLgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VFeGl0QWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z01vZGUpOiBSZXNldCB0aGUgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgcGl4bWFwLgorICAgICAg
ICAod2Via2l0V2ViVmlld0Jhc2VEaWRSZWxhdW5jaFdlYlByb2Nlc3MpOiBSZW1vdmUgdGhlIGNv
ZGUgdG8gc2VuZCBuYXRpdmUgc3VyZmFjZSBoYW5kbGUgdG8gdGhlIHdlYiBwcm9jZXNzLgorICAg
ICAgICAod2Via2l0V2ViVmlld0Jhc2VQYWdlQ2xvc2VkKTogUmVzZXQgdGhlIGFjY2VsZXJhdGVk
IGNvbXBvc2l0aW5nIHBpeG1hcC4KKyAgICAgICAgKF9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGU6
OnVwZGF0ZVZpZXdTdGF0ZVRpbWVyRmlyZWQpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9EcmF3aW5nQXJlYVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJv
eHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBs
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OmRpZFVwZGF0ZUJh
Y2tpbmdTdG9yZVN0YXRlKTogSGFuZGxlIHRoZSBjYXNlIHdoZW4gdGhlIGxheWVyIHRyZWUgY29u
dGV4dCBJRAorICAgICAgICBjaGFuZ2VzIHdpdGhvdXQgbGVhdmluZyB0aGUgYWNjZWxlcmF0ZWQg
Y29tcG9zaXRpbmcgbW9kZSwgY2FsbGluZyB1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9k
ZSgpLgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5SW1wbDo6ZXhpdEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdNb2RlKTogTGV0IHRoZSB3ZWIgdmlldyBrbm93IHdlIGFyZSBsZWF2aW5n
IGFjY2VsZXJhdGVkCisgICAgICAgIGNvbXBvc2l0aW5nIG1vZGUgZXZlbiB3aGVuIGl0J3MgZm9y
Y2VkLCBzaW5jZSBpbiBjYXNlIG9mIHdlYiBwcm9jZXNzIGNyYXNoIHdlIG5lZWQgdG8gbGVhdmUg
dGhlIGFjY2VsZXJhdGVkCisgICAgICAgIGNvbXBvc2l0aW5nIG1vZGUgaW4gdGhlIFVJIHByb2Nl
c3MuCisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlJbXBsOjp3aWxsRW50ZXJBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZSk6IFRoaXMgbWVzc2FnZSB3YXMgYWRkZWQgb25seSB0byBw
cmVwYXJlIHRoZQorICAgICAgICByZWRpcmVjdGVkIHdpbmRvdyB3aGVuIHRoZSB3ZWIgcHJvY2Vz
cyB3YXMgYWJvdXQgdG8gZW50ZXIgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgbW9kZSwgc28gaXQn
cyBubyBsb25nZXIgbmVlZGVkLgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5SW1w
bDo6c2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKTogVGhpcyBpcyBub3cgb25s
eSB1c2VkIHdoZW4gYnVpbGRpbmcKKyAgICAgICAgd2l0aG91dCByZWRpcmVjdGVkIFhDb21wb3Np
dGUgd2luZG93IHN1cHBvcnQuCisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJ
bXBsLmg6CisgICAgICAgICogVUlQcm9jZXNzL1BhZ2VDbGllbnQuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojp3
aWxsRW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSk6IERlbGV0ZWQuCisgICAgICAgICog
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvV2ViVmll
dy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvWERhbWFnZU5vdGlmaWVyLmNw
cDogSGVscGVyIGNsYXNzIHRvIGJlIG5vdGlmaWVkIGFib3V0IFhEYW1hZ2UgZXZlbnRzLgorICAg
ICAgICAoV2ViS2l0OjpYRGFtYWdlTm90aWZpZXI6OnNpbmdsZXRvbik6CisgICAgICAgIChXZWJL
aXQ6OlhEYW1hZ2VOb3RpZmllcjo6WERhbWFnZU5vdGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6
WERhbWFnZU5vdGlmaWVyOjphZGQpOgorICAgICAgICAoV2ViS2l0OjpYRGFtYWdlTm90aWZpZXI6
OnJlbW92ZSk6CisgICAgICAgIChXZWJLaXQ6OlhEYW1hZ2VOb3RpZmllcjo6ZmlsdGVyWERhbWFn
ZUV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6WERhbWFnZU5vdGlmaWVyOjpub3RpZnkpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9ndGsvWERhbWFnZU5vdGlmaWVyLmg6IEFkZGVkLgorICAgICAgICAq
IFVJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
aW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1w
bDo6d2lsbEVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUpOiBEZWxldGVkLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
bWFjL1BhZ2VDbGllbnRJbXBsLm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6
d2lsbEVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUpOiBEZWxldGVkLgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6QWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZSk6IFJlbW92ZSBjb2RlIHRvIHNlbmQKKyAgICAgICAgV2lsbEVudGVyQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGUgbWVzc2FnZS4KKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWRE
cmF3aW5nQXJlYTo6c2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKTogVGhpcyBp
cyBub3cgb25seSB1c2VkIHdoZW4gYnVpbGRpbmcKKyAgICAgICAgd2l0aG91dCByZWRpcmVjdGVk
IFhDb21wb3NpdGUgd2luZG93IHN1cHBvcnQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OlRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpUaHJl
YWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCk6IENyZWF0ZSBhIHJlZGlyZWN0ZWQgd2luZG93
IGFuZAorICAgICAgICBwYXNzIHRoZSB3aW5kb3cgSUQgYXMgbmF0aXZlIHN1cmZhY2UgaGFuZGxl
IHRvIHRoZSB0aHJlYWRlZCBjb21wb3NpdG9yLiBVc2UgdGhlIHJlZGlyZWN0ZWQgd2luZG93IHBp
eG1hcCBhcworICAgICAgICBsYXllciB0cmVlIGNvbnRleHQuCisgICAgICAgIChXZWJLaXQ6OlRo
cmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjppbnZhbGlkYXRlKTogRGVzdHJveSB0aGUg
cmVkaXJlY3RlZCB3aW5kb3cuCisgICAgICAgIChXZWJLaXQ6OlRocmVhZGVkQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQpOiBSZXNpemUgdGhl
IHJlZGlyZWN0ZWQgd2luZG93IGFuZAorICAgICAgICB1cGRhdGUgdGhlIGxheWVyIHRyZWUgY29u
dGV4dC4KKyAgICAgICAgKFdlYktpdDo6VGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OnNpemVEaWRDaGFuZ2UpOiBEaXR0by4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvZ3RrL0xheWVyVHJlZUhvc3RHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVIb3N0R3RrOjpMYXllclRyZWVIb3N0R3RrKTogQ3JlYXRlIGEgcmVkaXJlY3RlZCB3
aW5kb3cgYW5kIHRleHR1cmUgbWFwcGVyIHRoYXQgdXNlcyB0aGUgd2luZG93CisgICAgICAgIElE
IGFzIG5hdGl2ZSBzdXJmYWNlIGhhbmRsZS4gVXNlIHRoZSByZWRpcmVjdGVkIHdpbmRvdyBwaXht
YXAgYXMgbGF5ZXIgdHJlZSBjb250ZXh0LgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
R3RrOjptYWtlQ29udGV4dEN1cnJlbnQpOiBVc2UgdGhlIHJlZGlyZWN0ZWQgd2luZG93IGFzIG5h
dGl2ZSBoYW5kbGUuCisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RHdGs6OmludmFsaWRh
dGUpOiBEZXN0cm95IHRoZSByZWRpcmVjdGVkIHdpbmRvdy4KKyAgICAgICAgKFdlYktpdDo6TGF5
ZXJUcmVlSG9zdEd0azo6c2l6ZURpZENoYW5nZSk6IFJlc2l6ZSB0aGUgcmVkaXJlY3RlZCB3aW5k
b3cgYW5kIHVwZGF0ZSB0aGUgbGF5ZXIgdHJlZSBjb250ZXh0LgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVIb3N0R3RrOjpkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQpOiBEaXR0by4K
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdEd0azo6Y3JlYXRlVGV4dHVyZU1hcHBlcik6
IEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIHRleHR1cmUgbWFwcGVyLgorICAgICAgICAo
V2ViS2l0OjpMYXllclRyZWVIb3N0R3RrOjpzZXROYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9z
aXRpbmcpOiBVc2UgY3JlYXRlVGV4dHVyZU1hcHBlcigpLgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpSZWRpcmVjdGVkWENvbXBvc2l0ZVdp
bmRvdyk6CisgICAgICAgIChXZWJLaXQ6OlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93Ojp+UmVk
aXJlY3RlZFhDb21wb3NpdGVXaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpSZWRpcmVjdGVkWENv
bXBvc2l0ZVdpbmRvdzo6cmVzaXplKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3Rr
L1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmguCisgICAgICAgIChX
ZWJLaXQ6OlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93Ojp3aW5kb3cpOgorICAgICAgICAoV2Vi
S2l0OjpSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6cGl4bWFwKToKKwogMjAxNi0wNy0zMCAg
RGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFtYY29kZV0gV2ViS2l0
LmZyYW1ld29yayBpcyB0b3VjaGVkIG9uIGluY3JlbWVudGFsIGJ1aWxkIGV2ZW4gaWYgbm90aGlu
Z+KAmXMgY2hhbmdlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21h
a2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCA0NGYxZWZjLi4zNjlh
YTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMjk5LDggKzI5OSw4IEBAIGxpc3Qo
QVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xs
ZXIuY3BwCiAgICAgVUlQcm9jZXNzL2d0ay9JbnB1dE1ldGhvZEZpbHRlci5jcHAKICAgICBVSVBy
b2Nlc3MvZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmNwcAotICAgIFVJUHJvY2Vzcy9ndGsvUmVk
aXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwCiAgICAgVUlQcm9jZXNzL2d0ay9UZXh0Q2hlY2tl
ckd0ay5jcHAKKyAgICBVSVByb2Nlc3MvZ3RrL1hEYW1hZ2VOb3RpZmllci5jcHAKICAgICBVSVBy
b2Nlc3MvZ3RrL1dlYkNvbG9yUGlja2VyR3RrLmNwcAogICAgIFVJUHJvY2Vzcy9ndGsvV2ViQ29u
dGV4dE1lbnVQcm94eUd0ay5jcHAKICAgICBVSVByb2Nlc3MvZ3RrL1dlYkZ1bGxTY3JlZW5DbGll
bnRHdGsuY3BwCkBAIC0zNTAsNiArMzUwLDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VT
CiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL2dzdHJlYW1lci9XZWJQYWdlR1N0cmVhbWVyLmNwcAog
CiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9QcmludGVyTGlzdEd0ay5jcHAKKyAgICBXZWJQ
cm9jZXNzL1dlYlBhZ2UvZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmNwcAogICAgIFdl
YlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViSW5zcGVjdG9yVUlHdGsuY3BwCiAgICAgV2ViUHJvY2Vz
cy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsv
V2ViUHJpbnRPcGVyYXRpb25HdGsuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkZWRDb21wb3Np
dG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVh
ZGVkY29tcG9zaXRvci9UaHJlYWRlZENvbXBvc2l0b3IuY3BwCmluZGV4IDlhNDdlNmEuLjM0NTI0
MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNz
L3RocmVhZGVkY29tcG9zaXRvci9UaHJlYWRlZENvbXBvc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9UaHJl
YWRlZENvbXBvc2l0b3IuY3BwCkBAIC00MSwxOCArNDEsMjAgQEAgdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1SZWY8VGhyZWFkZWRDb21wb3NpdG9yPiBU
aHJlYWRlZENvbXBvc2l0b3I6OmNyZWF0ZShDbGllbnQqIGNsaWVudCkKK1JlZjxUaHJlYWRlZENv
bXBvc2l0b3I+IFRocmVhZGVkQ29tcG9zaXRvcjo6Y3JlYXRlKENsaWVudCogY2xpZW50LCB1aW50
NjRfdCBuYXRpdmVTdXJmYWNlSGFuZGxlKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFRo
cmVhZGVkQ29tcG9zaXRvcihjbGllbnQpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUaHJl
YWRlZENvbXBvc2l0b3IoY2xpZW50LCBuYXRpdmVTdXJmYWNlSGFuZGxlKSk7CiB9CiAKLVRocmVh
ZGVkQ29tcG9zaXRvcjo6VGhyZWFkZWRDb21wb3NpdG9yKENsaWVudCogY2xpZW50KQorVGhyZWFk
ZWRDb21wb3NpdG9yOjpUaHJlYWRlZENvbXBvc2l0b3IoQ2xpZW50KiBjbGllbnQsIHVpbnQ2NF90
IG5hdGl2ZVN1cmZhY2VIYW5kbGUpCiAgICAgOiBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX25h
dGl2ZVN1cmZhY2VIYW5kbGUobmF0aXZlU3VyZmFjZUhhbmRsZSkKICAgICAsIG1fY29tcG9zaXRp
bmdSdW5Mb29wKHN0ZDo6bWFrZV91bmlxdWU8Q29tcG9zaXRpbmdSdW5Mb29wPihbdGhpc10geyBy
ZW5kZXJMYXllclRyZWUoKTsgfSkpCiB7CiAgICAgbV9jb21wb3NpdGluZ1J1bkxvb3AtPnBlcmZv
cm1UYXNrU3luYyhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7CiAgICAg
ICAgIG1fc2NlbmUgPSBhZG9wdFJlZihuZXcgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKHRoaXMp
KTsKICAgICAgICAgbV92aWV3cG9ydENvbnRyb2xsZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFNpbXBs
ZVZpZXdwb3J0Q29udHJvbGxlcj4odGhpcyk7CisgICAgICAgIG1fc2NlbmUtPnNldEFjdGl2ZSgh
IW1fbmF0aXZlU3VyZmFjZUhhbmRsZSk7CiAgICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9U
aHJlYWRlZENvbXBvc2l0b3IuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdy
YXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9UaHJlYWRlZENvbXBvc2l0b3IuaAppbmRleCAxZDNi
YTk3Li4wNDJjNjlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0
ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkZWRDb21wb3NpdG9yLmgKKysrIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3Np
dG9yL1RocmVhZGVkQ29tcG9zaXRvci5oCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICAg
ICAgdmlydHVhbCB2b2lkIGNvbW1pdFNjcm9sbE9mZnNldCh1aW50MzJfdCBsYXllcklELCBjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiBvZmZzZXQpID0gMDsKICAgICB9OwogCi0gICAgc3RhdGljIFJl
ZjxUaHJlYWRlZENvbXBvc2l0b3I+IGNyZWF0ZShDbGllbnQqKTsKKyAgICBzdGF0aWMgUmVmPFRo
cmVhZGVkQ29tcG9zaXRvcj4gY3JlYXRlKENsaWVudCosIHVpbnQ2NF90IG5hdGl2ZVN1cmZhY2VI
YW5kbGUgPSAwKTsKICAgICB2aXJ0dWFsIH5UaHJlYWRlZENvbXBvc2l0b3IoKTsKIAogICAgIHZv
aWQgc2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKHVpbnQ2NF90KTsKQEAgLTc3
LDcgKzc3LDcgQEAgcHVibGljOgogICAgIHZvaWQgZm9yY2VSZXBhaW50KCk7CiAKIHByaXZhdGU6
Ci0gICAgVGhyZWFkZWRDb21wb3NpdG9yKENsaWVudCopOworICAgIFRocmVhZGVkQ29tcG9zaXRv
cihDbGllbnQqLCB1aW50NjRfdCBuYXRpdmVTdXJmYWNlSGFuZGxlKTsKIAogICAgIC8vIENvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZUNsaWVudAogICAgIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCkgb3Zl
cnJpZGU7CkBAIC0xMDEsNyArMTAxLDcgQEAgcHJpdmF0ZToKICAgICBXZWJDb3JlOjpJbnRTaXpl
IG1fdmlld3BvcnRTaXplOwogICAgIGZsb2F0IG1fZGV2aWNlU2NhbGVGYWN0b3IgeyAxIH07CiAg
ICAgYm9vbCBtX2RyYXdzQmFja2dyb3VuZCB7IHRydWUgfTsKLSAgICB1aW50NjRfdCBtX25hdGl2
ZVN1cmZhY2VIYW5kbGUgeyAwIH07CisgICAgdWludDY0X3QgbV9uYXRpdmVTdXJmYWNlSGFuZGxl
OwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPENvbXBvc2l0aW5nUnVuTG9vcD4gbV9jb21wb3NpdGlu
Z1J1bkxvb3A7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvUGFnZUNsaWVudEltcGwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
UGFnZUNsaWVudEltcGwuY3BwCmluZGV4IGNjN2M0ODkuLjhkMjU4ZjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAKQEAgLTIx
Niw5ICsyMTYsOSBAQCBSZWZQdHI8V2ViQ29sb3JQaWNrZXI+IFBhZ2VDbGllbnRJbXBsOjpjcmVh
dGVDb2xvclBpY2tlcihXZWJQYWdlUHJveHkqIHBhZ2UsIGNvbgogICAgIHJldHVybiBXZWJDb2xv
clBpY2tlckd0azo6Y3JlYXRlKCpwYWdlLCBjb2xvciwgcmVjdCk7CiB9CiAKLXZvaWQgUGFnZUNs
aWVudEltcGw6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVl
Q29udGV4dCYpCit2b2lkIFBhZ2VDbGllbnRJbXBsOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQpCiB7Ci0gICAg
d2Via2l0V2ViVmlld0Jhc2VFbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKFdFQktJVF9X
RUJfVklFV19CQVNFKG1fdmlld1dpZGdldCkpOworICAgIHdlYmtpdFdlYlZpZXdCYXNlRW50ZXJB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShXRUJLSVRfV0VCX1ZJRVdfQkFTRShtX3ZpZXdXaWRn
ZXQpLCBsYXllclRyZWVDb250ZXh0KTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZXhpdEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkKQEAgLTIyNiwxNCArMjI2LDkgQEAgdm9pZCBQYWdl
Q2xpZW50SW1wbDo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkKICAgICB3ZWJraXRX
ZWJWaWV3QmFzZUV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShXRUJLSVRfV0VCX1ZJRVdf
QkFTRShtX3ZpZXdXaWRnZXQpKTsKIH0KIAotdm9pZCBQYWdlQ2xpZW50SW1wbDo6d2lsbEVudGVy
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKQordm9pZCBQYWdlQ2xpZW50SW1wbDo6dXBkYXRl
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgbGF5ZXJU
cmVlQ29udGV4dCkKIHsKLSAgICB3ZWJraXRXZWJWaWV3QmFzZVdpbGxFbnRlckFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdNb2RlKFdFQktJVF9XRUJfVklFV19CQVNFKG1fdmlld1dpZGdldCkpOwotfQot
Ci12b2lkIFBhZ2VDbGllbnRJbXBsOjp1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShj
b25zdCBMYXllclRyZWVDb250ZXh0JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHdl
YmtpdFdlYlZpZXdCYXNlVXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoV0VCS0lUX1dF
Ql9WSUVXX0JBU0UobV92aWV3V2lkZ2V0KSwgbGF5ZXJUcmVlQ29udGV4dCk7CiB9CiAKIHZvaWQg
UGFnZUNsaWVudEltcGw6OnBhZ2VDbG9zZWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmgKaW5kZXggZDA1OGNlOC4uZmU4NGZiMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5o
CkBAIC05Miw3ICs5Miw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBlbnRlckFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKSBvdmVycmlkZTsKICAgICB2b2lk
IGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgdXBk
YXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpIG92
ZXJyaWRlOwotICAgIHZvaWQgd2lsbEVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSBv
dmVycmlkZTsKIAogICAgIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkq
KSBvdmVycmlkZTsKICAgICB2b2lkIGRpZENoYW5nZUNvbnRlbnRTaXplKGNvbnN0IFdlYkNvcmU6
OkludFNpemUmKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAppbmRleCA2Njk0Y2NmOC4uYWQzODE0MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
d0Jhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXdCYXNlLmNwcApAQCAtMzcsNyArMzcsNiBAQAogI2luY2x1ZGUgIk5hdGl2ZVdlYk1vdXNl
RXZlbnQuaCIKICNpbmNsdWRlICJOYXRpdmVXZWJXaGVlbEV2ZW50LmgiCiAjaW5jbHVkZSAiUGFn
ZUNsaWVudEltcGwuaCIKLSNpbmNsdWRlICJSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oIgog
I2luY2x1ZGUgIlZpZXdTdGF0ZS5oIgogI2luY2x1ZGUgIldlYkV2ZW50RmFjdG9yeS5oIgogI2lu
Y2x1ZGUgIldlYkZ1bGxTY3JlZW5DbGllbnRHdGsuaCIKQEAgLTczLDYgKzcyLDE1IEBACiAjaW5j
bHVkZSAiV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5oIgogI2VuZGlmCiAKKyNpZiBVU0UoUkVE
SVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKKyNpbmNsdWRlICJYRGFtYWdlTm90aWZpZXIuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtRGlzcGxheVgxMS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvWFVuaXF1ZVJlc291cmNlLmg+CisjaW5jbHVkZSA8WDExL1hsaWIuaD4KKyNpbmNsdWRlIDxY
MTEvZXh0ZW5zaW9ucy9YZGFtYWdlLmg+CisjaW5jbHVkZSA8Y2Fpcm8teGxpYi5oPgorI2VuZGlm
CisKICNpZiBQTEFURk9STShYMTEpCiAjaW5jbHVkZSA8Z2RrL2dka3guaD4KICNlbmRpZgpAQCAt
MTUxLDkgKzE1OSw2IEBAIHR5cGVkZWYgSGFzaE1hcDx1aW50MzJfdCwgR1VuaXF1ZVB0cjxHZGtF
dmVudD4+IFRvdWNoRXZlbnRzTWFwOwogc3RydWN0IF9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUg
ewogICAgIF9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUoKQogICAgICAgICA6IHVwZGF0ZVZpZXdT
dGF0ZVRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJl9XZWJLaXRXZWJWaWV3QmFzZVByaXZh
dGU6OnVwZGF0ZVZpZXdTdGF0ZVRpbWVyRmlyZWQpCi0jaWYgVVNFKFJFRElSRUNURURfWENPTVBP
U0lURV9XSU5ET1cpCi0gICAgICAgICwgY2xlYXJSZWRpcmVjdGVkV2luZG93U29vblRpbWVyKFJ1
bkxvb3A6Om1haW4oKSwgdGhpcywgJl9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGU6OmNsZWFyUmVk
aXJlY3RlZFdpbmRvd1Nvb25UaW1lckZpcmVkKQotI2VuZGlmCiAgICAgewogICAgIH0KIApAQCAt
MTY1LDE0ICsxNzAsNiBAQCBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSB7CiAgICAg
ICAgIHZpZXdTdGF0ZUZsYWdzVG9VcGRhdGUgPSBWaWV3U3RhdGU6Ok5vRmxhZ3M7CiAgICAgfQog
Ci0jaWYgVVNFKFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCi0gICAgdm9pZCBjbGVhclJl
ZGlyZWN0ZWRXaW5kb3dTb29uVGltZXJGaXJlZCgpCi0gICAgewotICAgICAgICBpZiAocmVkaXJl
Y3RlZFdpbmRvdykKLSAgICAgICAgICAgIHJlZGlyZWN0ZWRXaW5kb3ctPnJlc2l6ZShJbnRTaXpl
KCkpOwotICAgIH0KLSNlbmRpZgotCiAgICAgV2ViS2l0V2ViVmlld0NoaWxkcmVuTWFwIGNoaWxk
cmVuOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxQYWdlQ2xpZW50SW1wbD4gcGFnZUNsaWVudDsKICAg
ICBSZWZQdHI8V2ViUGFnZVByb3h5PiBwYWdlUHJveHk7CkBAIC0yMTUsOCArMjEyLDggQEAgc3Ry
dWN0IF9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUgewogI2VuZGlmCiAKICNpZiBVU0UoUkVESVJF
Q1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVkaXJlY3RlZFhD
b21wb3NpdGVXaW5kb3c+IHJlZGlyZWN0ZWRXaW5kb3c7Ci0gICAgUnVuTG9vcDo6VGltZXI8V2Vi
S2l0V2ViVmlld0Jhc2VQcml2YXRlPiBjbGVhclJlZGlyZWN0ZWRXaW5kb3dTb29uVGltZXI7Cisg
ICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gYWNjZWxlcmF0ZWRDb21wb3NpdGluZ1N1cmZhY2U7
CisgICAgWFVuaXF1ZURhbWFnZSBhY2NlbGVyYXRlZENvbXBvc2l0aW5nU3VyZmFjZURhbWFnZTsK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKQEAgLTM1NSwxMyArMzUyLDQ2IEBA
IHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlU2V0VG9wbGV2ZWxPblNjcmVlbldpbmRvdyhX
ZWJLaXRXZWJWaWV3QmFzZSogd2ViVmllCiB9CiAKICNpZiBVU0UoUkVESVJFQ1RFRF9YQ09NUE9T
SVRFX1dJTkRPVykKLXN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlUmVzaXplUmVkaXJlY3Rl
ZFdpbmRvdyhXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlldykKK3N0YXRpYyB2b2lkIHdlYmtpdFdl
YlZpZXdCYXNlU2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1BpeG1hcChXZWJLaXRXZWJWaWV3QmFz
ZSogd2ViVmlldywgUGl4bWFwIHBpeG1hcCkKIHsKKyAgICBpZiAoUGxhdGZvcm1EaXNwbGF5Ojpz
aGFyZWREaXNwbGF5KCkudHlwZSgpICE9IFBsYXRmb3JtRGlzcGxheTo6VHlwZTo6WDExKQorICAg
ICAgICByZXR1cm47CisKICAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJW
aWV3LT5wcml2OworICAgIGlmIChwcml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nU3VyZmFjZQor
ICAgICAgICAmJiBjYWlyb194bGliX3N1cmZhY2VfZ2V0X2RyYXdhYmxlKHByaXYtPmFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdTdXJmYWNlLmdldCgpKSA9PSBwaXhtYXApCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChwcml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nU3VyZmFjZSkgeworICAgICAg
ICBpZiAocHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ1N1cmZhY2VEYW1hZ2UpIHsKKyAgICAg
ICAgICAgIFhEYW1hZ2VOb3RpZmllcjo6c2luZ2xldG9uKCkucmVtb3ZlKHByaXYtPmFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdTdXJmYWNlRGFtYWdlLmdldCgpKTsKKyAgICAgICAgICAgIHByaXYtPmFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdTdXJmYWNlRGFtYWdlLnJlc2V0KCk7CisgICAgICAgIH0KKyAg
ICAgICAgcHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ1N1cmZhY2UgPSBudWxscHRyOworICAg
IH0KKworICAgIGlmICghcGl4bWFwKQorICAgICAgICByZXR1cm47CisKICAgICBEcmF3aW5nQXJl
YVByb3h5SW1wbCogZHJhd2luZ0FyZWEgPSBzdGF0aWNfY2FzdDxEcmF3aW5nQXJlYVByb3h5SW1w
bCo+KHByaXYtPnBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKSk7CiAgICAgaWYgKCFkcmF3aW5nQXJl
YSkKICAgICAgICAgcmV0dXJuOwotICAgIHByaXYtPnJlZGlyZWN0ZWRXaW5kb3ctPnJlc2l6ZShk
cmF3aW5nQXJlYS0+c2l6ZSgpKTsKKworICAgIEludFNpemUgc2l6ZSA9IGRyYXdpbmdBcmVhLT5z
aXplKCk7CisgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSBwcml2LT5wYWdlUHJveHktPmRl
dmljZVNjYWxlRmFjdG9yKCk7CisgICAgc2l6ZS5zY2FsZShkZXZpY2VTY2FsZUZhY3Rvcik7CisK
KyAgICBEaXNwbGF5KiBkaXNwbGF5ID0gZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5WDExPihQbGF0
Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXkoKSkubmF0aXZlKCk7CisgICAgQVNTRVJUKGRvd25j
YXN0PFBsYXRmb3JtRGlzcGxheVgxMT4oUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5KCkp
Lm5hdGl2ZSgpID09IEdES19ESVNQTEFZX1hESVNQTEFZKGdka19kaXNwbGF5X2dldF9kZWZhdWx0
KCkpKTsKKyAgICBHZGtWaXN1YWwqIHZpc3VhbCA9IGdka19zY3JlZW5fZ2V0X3JnYmFfdmlzdWFs
KGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKSk7CisgICAgaWYgKCF2aXN1YWwpCisgICAgICAgIHZp
c3VhbCA9IGdka19zY3JlZW5fZ2V0X3N5c3RlbV92aXN1YWwoZ2RrX3NjcmVlbl9nZXRfZGVmYXVs
dCgpKTsKKyAgICBwcml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nU3VyZmFjZSA9IGFkb3B0UmVm
KGNhaXJvX3hsaWJfc3VyZmFjZV9jcmVhdGUoZGlzcGxheSwgcGl4bWFwLCBHREtfVklTVUFMX1hW
SVNVQUwodmlzdWFsKSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7CisgICAgY2Fpcm9T
dXJmYWNlU2V0RGV2aWNlU2NhbGUocHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ1N1cmZhY2Uu
Z2V0KCksIGRldmljZVNjYWxlRmFjdG9yLCBkZXZpY2VTY2FsZUZhY3Rvcik7CisgICAgcHJpdi0+
YWNjZWxlcmF0ZWRDb21wb3NpdGluZ1N1cmZhY2VEYW1hZ2UgPSBYRGFtYWdlQ3JlYXRlKGRpc3Bs
YXksIHBpeG1hcCwgWERhbWFnZVJlcG9ydE5vbkVtcHR5KTsKKyAgICBYRGFtYWdlTm90aWZpZXI6
OnNpbmdsZXRvbigpLmFkZChwcml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nU3VyZmFjZURhbWFn
ZS5nZXQoKSwgW3dlYlZpZXddIHsKKyAgICAgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3KEdUS19X
SURHRVQod2ViVmlldykpOworICAgIH0pOwogfQogI2VuZGlmCiAKQEAgLTM3MCwyNiArNDAwLDYg
QEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VSZWFsaXplKEd0a1dpZGdldCogd2lkZ2V0
KQogICAgIFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uo
d2lkZ2V0KTsKICAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJWaWV3LT5w
cml2OwogCi0jaWYgVVNFKFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCi0gICAgaWYgKFBs
YXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheSgpLnR5cGUoKSA9PSBQbGF0Zm9ybURpc3BsYXk6
OlR5cGU6OlgxMSkgewotICAgICAgICBBU1NFUlQoIXByaXYtPnJlZGlyZWN0ZWRXaW5kb3cpOwot
ICAgICAgICBEcmF3aW5nQXJlYVByb3h5SW1wbCogZHJhd2luZ0FyZWEgPSBzdGF0aWNfY2FzdDxE
cmF3aW5nQXJlYVByb3h5SW1wbCo+KHByaXYtPnBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKSk7Ci0g
ICAgICAgIHByaXYtPnJlZGlyZWN0ZWRXaW5kb3cgPSBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRv
dzo6Y3JlYXRlKAotICAgICAgICAgICAgKnByaXYtPnBhZ2VQcm94eSwKLSAgICAgICAgICAgIGRy
YXdpbmdBcmVhICYmIGRyYXdpbmdBcmVhLT5pc0luQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUo
KSA/IGRyYXdpbmdBcmVhLT5zaXplKCkgOiBJbnRTaXplKCksCi0gICAgICAgICAgICBbd2ViVmll
d10gewotICAgICAgICAgICAgICAgIERyYXdpbmdBcmVhUHJveHlJbXBsKiBkcmF3aW5nQXJlYSA9
IHN0YXRpY19jYXN0PERyYXdpbmdBcmVhUHJveHlJbXBsKj4od2ViVmlldy0+cHJpdi0+cGFnZVBy
b3h5LT5kcmF3aW5nQXJlYSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoZHJhd2luZ0FyZWEgJiYg
ZHJhd2luZ0FyZWEtPmlzSW5BY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpKQotICAgICAgICAg
ICAgICAgICAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXcoR1RLX1dJREdFVCh3ZWJWaWV3KSk7Ci0g
ICAgICAgICAgICB9KTsKLSAgICAgICAgaWYgKHByaXYtPnJlZGlyZWN0ZWRXaW5kb3cgJiYgZHJh
d2luZ0FyZWEpIHsKLSAgICAgICAgICAgIGRyYXdpbmdBcmVhLT5zZXROYXRpdmVTdXJmYWNlSGFu
ZGxlRm9yQ29tcG9zaXRpbmcocHJpdi0+cmVkaXJlY3RlZFdpbmRvdy0+d2luZG93SUQoKSk7Ci0g
ICAgICAgICAgICBpZiAoZHJhd2luZ0FyZWEtPmlzSW5BY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9k
ZSgpKQotICAgICAgICAgICAgICAgIHdlYmtpdFdlYlZpZXdCYXNlUmVzaXplUmVkaXJlY3RlZFdp
bmRvdyh3ZWJWaWV3KTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotCiAgICAgZ3RrX3dpZGdl
dF9zZXRfcmVhbGl6ZWQod2lkZ2V0LCBUUlVFKTsKIAogICAgIEd0a0FsbG9jYXRpb24gYWxsb2Nh
dGlvbjsKQEAgLTQzOSwxMyArNDQ5LDEwIEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNl
UmVhbGl6ZShHdGtXaWRnZXQqIHdpZGdldCkKIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNl
VW5yZWFsaXplKEd0a1dpZGdldCogd2lkZ2V0KQogewogICAgIFdlYktpdFdlYlZpZXdCYXNlKiB3
ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KTsKLSNpZiBVU0UoVEVYVFVSRV9N
QVBQRVIpICYmIFBMQVRGT1JNKFgxMSkKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmIFBMQVRG
T1JNKFgxMSkgJiYgIVVTRShSRURJUkVDVEVEX1hDT01QT1NJVEVfV0lORE9XKQogICAgIGlmIChE
cmF3aW5nQXJlYVByb3h5SW1wbCogZHJhd2luZ0FyZWEgPSBzdGF0aWNfY2FzdDxEcmF3aW5nQXJl
YVByb3h5SW1wbCo+KHdlYlZpZXctPnByaXYtPnBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKSkpCiAg
ICAgICAgIGRyYXdpbmdBcmVhLT5kZXN0cm95TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0
aW5nKCk7CiAjZW5kaWYKLSNpZiBVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKLSAg
ICB3ZWJWaWV3LT5wcml2LT5yZWRpcmVjdGVkV2luZG93ID0gbnVsbHB0cjsKLSNlbmRpZgogICAg
IGd0a19pbV9jb250ZXh0X3NldF9jbGllbnRfd2luZG93KHdlYlZpZXctPnByaXYtPmlucHV0TWV0
aG9kRmlsdGVyLmNvbnRleHQoKSwgbnVsbHB0cik7CiAKICAgICBHVEtfV0lER0VUX0NMQVNTKHdl
YmtpdF93ZWJfdmlld19iYXNlX3BhcmVudF9jbGFzcyktPnVucmVhbGl6ZSh3aWRnZXQpOwpAQCAt
NTU3LDYgKzU2NCw5IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlRGlzcG9zZShHT2Jq
ZWN0KiBnb2JqZWN0KQogICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKHdlYlZpZXctPnByaXYtPnNj
cmVlblNhdmVySW5oaWJpdENhbmNlbGxhYmxlLmdldCgpKTsKICAgICB3ZWJraXRXZWJWaWV3QmFz
ZVNldFRvcGxldmVsT25TY3JlZW5XaW5kb3cod2ViVmlldywgbnVsbHB0cik7CiAgICAgd2ViVmll
dy0+cHJpdi0+cGFnZVByb3h5LT5jbG9zZSgpOworI2lmIFVTRShSRURJUkVDVEVEX1hDT01QT1NJ
VEVfV0lORE9XKQorICAgIHdlYmtpdFdlYlZpZXdCYXNlU2V0QWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z1BpeG1hcCh3ZWJWaWV3LCAwKTsKKyNlbmRpZgogICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF93
ZWJfdmlld19iYXNlX3BhcmVudF9jbGFzcyktPmRpc3Bvc2UoZ29iamVjdCk7CiB9CiAKQEAgLTU3
NywzOCArNTg3LDMzIEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlQ29uc3RydWN0ZWQo
R09iamVjdCogb2JqZWN0KQogCiBzdGF0aWMgYm9vbCB3ZWJraXRXZWJWaWV3UmVuZGVyQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ1Jlc3VsdHMoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlLCBE
cmF3aW5nQXJlYVByb3h5SW1wbCogZHJhd2luZ0FyZWEsIGNhaXJvX3QqIGNyLCBHZGtSZWN0YW5n
bGUqIGNsaXBSZWN0KQogewotI2lmIFVTRShURVhUVVJFX01BUFBFUikgJiYgVVNFKFJFRElSRUNU
RURfWENPTVBPU0lURV9XSU5ET1cpCisjaWYgVVNFKFJFRElSRUNURURfWENPTVBPU0lURV9XSU5E
T1cpCiAgICAgQVNTRVJUKGRyYXdpbmdBcmVhKTsKIAogICAgIGlmICghZHJhd2luZ0FyZWEtPmlz
SW5BY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICAvLyBUbyBhdm9pZCBmbGFzaGVzIHdoZW4gaW5pdGlhbGl6aW5nIGFjY2VsZXJhdGVkIGNv
bXBvc2l0aW5nIGZvciB0aGUgZmlyc3QKLSAgICAvLyB0aW1lLCB3ZSB3YWl0IHVudGlsIHdlIGtu
b3cgdGhlcmUncyBhIGZyYW1lIHJlYWR5IGJlZm9yZSByZW5kZXJpbmcuCi0gICAgV2ViS2l0V2Vi
Vmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7Ci0gICAgaWYgKCFwcml2
LT5yZWRpcmVjdGVkV2luZG93KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViS2l0V2Vi
Vmlld0Jhc2VQcml2YXRlKiBwcml2ID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2ViVmlld0Jhc2Up
LT5wcml2OworICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IHByaXYtPmFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdTdXJmYWNlLmdldCgpOworICAgIGNhaXJvX3NhdmUoY3IpOwogCi0gICAgd2Vi
a2l0V2ViVmlld0Jhc2VSZXNpemVSZWRpcmVjdGVkV2luZG93KHdlYlZpZXdCYXNlKTsKLSAgICBp
ZiAoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gcHJpdi0+cmVkaXJlY3RlZFdpbmRvdy0+c3Vy
ZmFjZSgpKSB7Ci0gICAgICAgIGNhaXJvX3NhdmUoY3IpOwotCi0gICAgICAgIGlmICghcHJpdi0+
cGFnZVByb3h5LT5kcmF3c0JhY2tncm91bmQoKSkgewotICAgICAgICAgICAgY29uc3QgV2ViQ29y
ZTo6Q29sb3ImIGNvbG9yID0gcHJpdi0+cGFnZVByb3h5LT5iYWNrZ3JvdW5kQ29sb3IoKTsKLSAg
ICAgICAgICAgIGlmIChjb2xvci5oYXNBbHBoYSgpKSB7Ci0gICAgICAgICAgICAgICAgY2Fpcm9f
cmVjdGFuZ2xlKGNyLCBjbGlwUmVjdC0+eCwgY2xpcFJlY3QtPnksIGNsaXBSZWN0LT53aWR0aCwg
Y2xpcFJlY3QtPmhlaWdodCk7Ci0gICAgICAgICAgICAgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNy
LCBDQUlST19PUEVSQVRPUl9DTEVBUik7Ci0gICAgICAgICAgICAgICAgY2Fpcm9fZmlsbChjcik7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChjb2xvci5hbHBoYSgpID4gMCkgewot
ICAgICAgICAgICAgICAgIHNldFNvdXJjZVJHQkFGcm9tQ29sb3IoY3IsIGNvbG9yKTsKLSAgICAg
ICAgICAgICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7
Ci0gICAgICAgICAgICAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCBjbGlwUmVjdC0+eCwgY2xpcFJl
Y3QtPnksIGNsaXBSZWN0LT53aWR0aCwgY2xpcFJlY3QtPmhlaWdodCk7Ci0gICAgICAgICAgICAg
ICAgY2Fpcm9fZmlsbChjcik7Ci0gICAgICAgICAgICB9CisgICAgaWYgKCFzdXJmYWNlIHx8ICFw
cml2LT5wYWdlUHJveHktPmRyYXdzQmFja2dyb3VuZCgpKSB7CisgICAgICAgIGNvbnN0IFdlYkNv
cmU6OkNvbG9yJiBjb2xvciA9IHByaXYtPnBhZ2VQcm94eS0+YmFja2dyb3VuZENvbG9yKCk7Cisg
ICAgICAgIGlmIChjb2xvci5oYXNBbHBoYSgpKSB7CisgICAgICAgICAgICBjYWlyb19yZWN0YW5n
bGUoY3IsIGNsaXBSZWN0LT54LCBjbGlwUmVjdC0+eSwgY2xpcFJlY3QtPndpZHRoLCBjbGlwUmVj
dC0+aGVpZ2h0KTsKKyAgICAgICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwgQ0FJUk9fT1BF
UkFUT1JfQ0xFQVIpOworICAgICAgICAgICAgY2Fpcm9fZmlsbChjcik7CiAgICAgICAgIH0KIAor
ICAgICAgICBpZiAoY29sb3IuYWxwaGEoKSA+IDApIHsKKyAgICAgICAgICAgIHNldFNvdXJjZVJH
QkFGcm9tQ29sb3IoY3IsIGNvbG9yKTsKKyAgICAgICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihj
ciwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKKyAgICAgICAgICAgIGNhaXJvX3JlY3RhbmdsZShj
ciwgY2xpcFJlY3QtPngsIGNsaXBSZWN0LT55LCBjbGlwUmVjdC0+d2lkdGgsIGNsaXBSZWN0LT5o
ZWlnaHQpOworICAgICAgICAgICAgY2Fpcm9fZmlsbChjcik7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAoc3VyZmFjZSkgewogICAgICAgICAvLyBUaGUgc3VyZmFjZSBjYW4gYmUgbW9kaWZp
ZWQgYnkgdGhlIHdlYiBwcm9jZXNzIGF0IGFueSB0aW1lLCBzbyB3ZSBtYXJrIGl0CiAgICAgICAg
IC8vIGFzIGRpcnR5IHRvIGVuc3VyZSB3ZSBhbHdheXMgcmVuZGVyIHRoZSB1cGRhdGVkIGNvbnRl
bnRzIGFzIHNvb24gYXMgcG9zc2libGUuCiAgICAgICAgIGNhaXJvX3N1cmZhY2VfbWFya19kaXJ0
eShzdXJmYWNlKTsKQEAgLTYxNiwxMCArNjIxLDEwIEBAIHN0YXRpYyBib29sIHdlYmtpdFdlYlZp
ZXdSZW5kZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nUmVzdWx0cyhXZWJLaXRXZWJWaWV3QmFzZSoK
ICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLCBzdXJmYWNlLCAwLCAwKTsKICAg
ICAgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLCBDQUlST19PUEVSQVRPUl9PVkVSKTsKICAgICAg
ICAgY2Fpcm9fZmlsbChjcik7Ci0KLSAgICAgICAgY2Fpcm9fcmVzdG9yZShjcik7CiAgICAgfQog
CisgICAgY2Fpcm9fcmVzdG9yZShjcik7CisKICAgICByZXR1cm4gdHJ1ZTsKICNlbHNlCiAgICAg
VU5VU0VEX1BBUkFNKHdlYlZpZXdCYXNlKTsKQEAgLTcxNywyMiArNzIyLDggQEAgc3RhdGljIHZv
aWQgd2Via2l0V2ViVmlld0Jhc2VTaXplQWxsb2NhdGUoR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a0Fs
bG9jYXRpb24qIGFsbG8KICAgICAgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKHByaXYtPmF1
dGhlbnRpY2F0aW9uRGlhbG9nLCAmY2hpbGRBbGxvY2F0aW9uKTsKICAgICB9CiAKLSAgICBEcmF3
aW5nQXJlYVByb3h5SW1wbCogZHJhd2luZ0FyZWEgPSBzdGF0aWNfY2FzdDxEcmF3aW5nQXJlYVBy
b3h5SW1wbCo+KHByaXYtPnBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKSk7Ci0gICAgaWYgKCFkcmF3
aW5nQXJlYSkKLSAgICAgICAgcmV0dXJuOwotCi0KLSNpZiBVU0UoUkVESVJFQ1RFRF9YQ09NUE9T
SVRFX1dJTkRPVykKLSAgICBpZiAocHJpdi0+cmVkaXJlY3RlZFdpbmRvdyAmJiBkcmF3aW5nQXJl
YS0+aXNJbkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgLy8gV2UgZG9u
J3QgdXNlIHdlYmtpdFdlYlZpZXdCYXNlUmVzaXplUmVkaXJlY3RlZFdpbmRvdyBoZXJlLCBiZWNh
dXNlIHdlIHdhbnQgdG8gdXBkYXRlIHRoZQotICAgICAgICAvLyByZWRpcmVjdGVkIHdpbmRvdyBz
aXplIGJlZm9yZSB0aGUgZHJhd2luZyBhcmVhLCBiZWNhdXNlIG9uIHJlc2l6ZSB0aGUgZHJhd2lu
ZyBhcmVhIHNlbmRzCi0gICAgICAgIC8vIHRoZSBVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSBtZXNz
YWdlIHRvIHRoZSB3ZWIgcHJvY2VzcyBhbmQgd2FpdHMgZm9yIGl0cyByZXBseS4gV2Ugd2FudAot
ICAgICAgICAvLyB0aGUgd2ViIHByb2Nlc3MgdG8gdXNlIHRoZSBuZXcgeHdpbmRvdyBzaXplIHdo
ZW4gVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUgbWVzc2FnZSBhcnJpdmVzLgotICAgICAgICBwcml2
LT5yZWRpcmVjdGVkV2luZG93LT5yZXNpemUodmlld1JlY3Quc2l6ZSgpKTsKLSAgICB9Ci0jZW5k
aWYKLQotICAgIGRyYXdpbmdBcmVhLT5zZXRTaXplKHZpZXdSZWN0LnNpemUoKSwgSW50U2l6ZSgp
LCBJbnRTaXplKCkpOworICAgIGlmIChEcmF3aW5nQXJlYVByb3h5SW1wbCogZHJhd2luZ0FyZWEg
PSBzdGF0aWNfY2FzdDxEcmF3aW5nQXJlYVByb3h5SW1wbCo+KHByaXYtPnBhZ2VQcm94eS0+ZHJh
d2luZ0FyZWEoKSkpCisgICAgICAgIGRyYXdpbmdBcmVhLT5zZXRTaXplKHZpZXdSZWN0LnNpemUo
KSwgSW50U2l6ZSgpLCBJbnRTaXplKCkpOwogfQogCiBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3
QmFzZUdldFByZWZlcnJlZFdpZHRoKEd0a1dpZGdldCogd2lkZ2V0LCBnaW50KiBtaW5pbXVtU2l6
ZSwgZ2ludCogbmF0dXJhbFNpemUpCkBAIC0xMjg0LDEwICsxMjc1LDYgQEAgV2ViUGFnZVByb3h5
KiB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdlYlZp
ZXdCYXNlKQogI2lmIEhBVkUoR1RLX1NDQUxFX0ZBQ1RPUikKIHN0YXRpYyB2b2lkIGRldmljZVNj
YWxlRmFjdG9yQ2hhbmdlZChXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2UpCiB7
Ci0jaWYgVVNFKFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCi0gICAgaWYgKHdlYmtpdFdl
YlZpZXdCYXNlLT5wcml2LT5yZWRpcmVjdGVkV2luZG93KQotICAgICAgICB3ZWJraXRXZWJWaWV3
QmFzZVJlc2l6ZVJlZGlyZWN0ZWRXaW5kb3cod2Via2l0V2ViVmlld0Jhc2UpOwotI2VuZGlmCiAg
ICAgd2Via2l0V2ViVmlld0Jhc2UtPnByaXYtPnBhZ2VQcm94eS0+c2V0SW50cmluc2ljRGV2aWNl
U2NhbGVGYWN0b3IoZ3RrX3dpZGdldF9nZXRfc2NhbGVfZmFjdG9yKEdUS19XSURHRVQod2Via2l0
V2ViVmlld0Jhc2UpKSk7CiB9CiAjZW5kaWYgLy8gSEFWRShHVEtfU0NBTEVfRkFDVE9SKQpAQCAt
MTU3NywzNyArMTU2NCwxOSBAQCB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlUmVzZXRDbGlja0NvdW50
ZXIoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdlYlZpZXdCYXNlKQogICAgIHdlYmtpdFdlYlZp
ZXdCYXNlLT5wcml2LT5jbGlja0NvdW50ZXIucmVzZXQoKTsKIH0KIAotI2lmIFVTRShSRURJUkVD
VEVEX1hDT01QT1NJVEVfV0lORE9XKQotc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VDbGVh
clJlZGlyZWN0ZWRXaW5kb3dTb29uKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJraXRXZWJWaWV3QmFz
ZSkKLXsKLSAgICBzdGF0aWMgY29uc3QgZG91YmxlIGNsZWFyUmVkaXJlY3RlZFdpbmRvd1Nvb25E
ZWxheSA9IDI7Ci0gICAgd2Via2l0V2ViVmlld0Jhc2UtPnByaXYtPmNsZWFyUmVkaXJlY3RlZFdp
bmRvd1Nvb25UaW1lci5zdGFydE9uZVNob3QoY2xlYXJSZWRpcmVjdGVkV2luZG93U29vbkRlbGF5
KTsKLX0KLSNlbmRpZgotCi12b2lkIHdlYmtpdFdlYlZpZXdCYXNlV2lsbEVudGVyQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGUoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdlYlZpZXdCYXNlKQor
dm9pZCB3ZWJraXRXZWJWaWV3QmFzZUVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoV2Vi
S2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdlYlZpZXdCYXNlLCBjb25zdCBMYXllclRyZWVDb250ZXh0
JiBsYXllclRyZWVDb250ZXh0KQogewogI2lmIFVTRShSRURJUkVDVEVEX1hDT01QT1NJVEVfV0lO
RE9XKQotICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYmtpdFdlYlZpZXdC
YXNlLT5wcml2OwotICAgIGlmICghcHJpdi0+cmVkaXJlY3RlZFdpbmRvdykKLSAgICAgICAgcmV0
dXJuOwotICAgIERyYXdpbmdBcmVhUHJveHlJbXBsKiBkcmF3aW5nQXJlYSA9IHN0YXRpY19jYXN0
PERyYXdpbmdBcmVhUHJveHlJbXBsKj4ocHJpdi0+cGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpKTsK
LSAgICBpZiAoIWRyYXdpbmdBcmVhKQotICAgICAgICByZXR1cm47Ci0KLSAgICB3ZWJraXRXZWJW
aWV3QmFzZVJlc2l6ZVJlZGlyZWN0ZWRXaW5kb3cod2Via2l0V2ViVmlld0Jhc2UpOwotCi0gICAg
Ly8gQ2xlYXIgdGhlIHJlZGlyZWN0ZWQgd2luZG93IGlmIHdlIGRvbid0IGVudGVyIEFDIG1vZGUg
aW4gdGhlIGVuZC4KLSAgICB3ZWJraXRXZWJWaWV3QmFzZUNsZWFyUmVkaXJlY3RlZFdpbmRvd1Nv
b24od2Via2l0V2ViVmlld0Jhc2UpOworICAgIHdlYmtpdFdlYlZpZXdCYXNlU2V0QWNjZWxlcmF0
ZWRDb21wb3NpdGluZ1BpeG1hcCh3ZWJraXRXZWJWaWV3QmFzZSwgbGF5ZXJUcmVlQ29udGV4dC5j
b250ZXh0SUQpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0od2Via2l0V2ViVmlld0Jhc2UpOwog
I2VuZGlmCiB9CiAKLXZvaWQgd2Via2l0V2ViVmlld0Jhc2VFbnRlckFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdNb2RlKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJraXRXZWJWaWV3QmFzZSkKK3ZvaWQgd2Vi
a2l0V2ViVmlld0Jhc2VVcGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShXZWJLaXRXZWJW
aWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2UsIGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVy
VHJlZUNvbnRleHQpCiB7CiAjaWYgVVNFKFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCi0g
ICAgd2Via2l0V2ViVmlld0Jhc2UtPnByaXYtPmNsZWFyUmVkaXJlY3RlZFdpbmRvd1Nvb25UaW1l
ci5zdG9wKCk7CisgICAgd2Via2l0V2ViVmlld0Jhc2VTZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5n
UGl4bWFwKHdlYmtpdFdlYlZpZXdCYXNlLCBsYXllclRyZWVDb250ZXh0LmNvbnRleHRJRCk7CiAj
ZWxzZQogICAgIFVOVVNFRF9QQVJBTSh3ZWJraXRXZWJWaWV3QmFzZSk7CiAjZW5kaWYKQEAgLTE2
MTYsMTAgKzE1ODUsNyBAQCB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlRW50ZXJBY2NlbGVyYXRlZENv
bXBvc2l0aW5nTW9kZShXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0Vwogdm9pZCB3ZWJraXRXZWJW
aWV3QmFzZUV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShXZWJLaXRXZWJWaWV3QmFzZSog
d2Via2l0V2ViVmlld0Jhc2UpCiB7CiAjaWYgVVNFKFJFRElSRUNURURfWENPTVBPU0lURV9XSU5E
T1cpCi0gICAgLy8gUmVzaXplIHRoZSB3aW5kb3cgbGF0ZXIgdG8gZW5zdXJlIHdlIGhhdmUgYWxy
ZWFkeSByZW5kZXJlZCB0aGUKLSAgICAvLyBub24gY29tcG9zaXRlZCBjb250ZW50cyBhbmQgYXZv
aWQgZmxpY2tlcmluZy4gV2UgY2FuIGFsc28gYXZvaWQgdGhlCi0gICAgLy8gd2luZG93IHJlc2l6
ZSBlbnRpcmVseSBpZiB3ZSBzd2l0Y2ggYmFjayB0byBBQyBtb2RlIHF1aWNrbHkuCi0gICAgd2Vi
a2l0V2ViVmlld0Jhc2VDbGVhclJlZGlyZWN0ZWRXaW5kb3dTb29uKHdlYmtpdFdlYlZpZXdCYXNl
KTsKKyAgICB3ZWJraXRXZWJWaWV3QmFzZVNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdQaXhtYXAo
d2Via2l0V2ViVmlld0Jhc2UsIDApOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0od2Via2l0V2Vi
Vmlld0Jhc2UpOwogI2VuZGlmCkBAIC0xNjMwLDIyICsxNTk2LDE4IEBAIHZvaWQgd2Via2l0V2Vi
Vmlld0Jhc2VEaWRSZWxhdW5jaFdlYlByb2Nlc3MoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdl
YlZpZXdCYXNlCiAgICAgLy8gUXVldWUgYSByZXNpemUgdG8gZW5zdXJlIHRoZSBuZXcgRHJhd2lu
Z0FyZWFQcm94eSBpcyByZXNpemVkLgogICAgIGd0a193aWRnZXRfcXVldWVfcmVzaXplX25vX3Jl
ZHJhdyhHVEtfV0lER0VUKHdlYmtpdFdlYlZpZXdCYXNlKSk7CiAKLSNpZiBQTEFURk9STShYMTEp
ICYmIFVTRShURVhUVVJFX01BUFBFUikKKyNpZiBQTEFURk9STShYMTEpICYmIFVTRShURVhUVVJF
X01BUFBFUikgJiYgIVVTRShSRURJUkVDVEVEX1hDT01QT1NJVEVfV0lORE9XKQogICAgIGlmIChQ
bGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXkoKS50eXBlKCkgIT0gUGxhdGZvcm1EaXNwbGF5
OjpUeXBlOjpYMTEpCiAgICAgICAgIHJldHVybjsKIAogICAgIFdlYktpdFdlYlZpZXdCYXNlUHJp
dmF0ZSogcHJpdiA9IHdlYmtpdFdlYlZpZXdCYXNlLT5wcml2OwogICAgIERyYXdpbmdBcmVhUHJv
eHlJbXBsKiBkcmF3aW5nQXJlYSA9IHN0YXRpY19jYXN0PERyYXdpbmdBcmVhUHJveHlJbXBsKj4o
cHJpdi0+cGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpKTsKICAgICBBU1NFUlQoZHJhd2luZ0FyZWEp
OwotI2lmIFVTRShSRURJUkVDVEVEX1hDT01QT1NJVEVfV0lORE9XKQotICAgIGlmICghcHJpdi0+
cmVkaXJlY3RlZFdpbmRvdykKLSAgICAgICAgcmV0dXJuOwotICAgIHVpbnQ2NF90IHdpbmRvd0lE
ID0gcHJpdi0+cmVkaXJlY3RlZFdpbmRvdy0+d2luZG93SUQoKTsKLSNlbHNlCisKICAgICBpZiAo
IWd0a193aWRnZXRfZ2V0X3JlYWxpemVkKEdUS19XSURHRVQod2Via2l0V2ViVmlld0Jhc2UpKSkK
ICAgICAgICAgcmV0dXJuOworCiAgICAgdWludDY0X3Qgd2luZG93SUQgPSBHREtfV0lORE9XX1hJ
RChndGtfd2lkZ2V0X2dldF93aW5kb3coR1RLX1dJREdFVCh3ZWJraXRXZWJWaWV3QmFzZSkpKTsK
LSNlbmRpZgogICAgIGRyYXdpbmdBcmVhLT5zZXROYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9z
aXRpbmcod2luZG93SUQpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0od2Via2l0V2ViVmlld0Jh
c2UpOwpAQCAtMTY1NCw3ICsxNjE2LDkgQEAgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZURpZFJlbGF1
bmNoV2ViUHJvY2VzcyhXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2UKIAogdm9p
ZCB3ZWJraXRXZWJWaWV3QmFzZVBhZ2VDbG9zZWQoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdl
YlZpZXdCYXNlKQogewotI2lmIFBMQVRGT1JNKFgxMSkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQor
I2lmIFVTRShSRURJUkVDVEVEX1hDT01QT1NJVEVfV0lORE9XKQorICAgIHdlYmtpdFdlYlZpZXdC
YXNlU2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1BpeG1hcCh3ZWJraXRXZWJWaWV3QmFzZSwgMCk7
CisjZWxpZiBQTEFURk9STShYMTEpICYmIFVTRShURVhUVVJFX01BUFBFUikKICAgICBpZiAoUGxh
dGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5KCkudHlwZSgpICE9IFBsYXRmb3JtRGlzcGxheTo6
VHlwZTo6WDExKQogICAgICAgICByZXR1cm47CiAKQEAgLTE2NjUsOSArMTYyOSw1IEBAIHZvaWQg
d2Via2l0V2ViVmlld0Jhc2VQYWdlQ2xvc2VkKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJraXRXZWJW
aWV3QmFzZSkKICAgICBEcmF3aW5nQXJlYVByb3h5SW1wbCogZHJhd2luZ0FyZWEgPSBzdGF0aWNf
Y2FzdDxEcmF3aW5nQXJlYVByb3h5SW1wbCo+KHByaXYtPnBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEo
KSk7CiAgICAgQVNTRVJUKGRyYXdpbmdBcmVhKTsKICAgICBkcmF3aW5nQXJlYS0+ZGVzdHJveU5h
dGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZygpOwotCi0jaWYgVVNFKFJFRElSRUNURURf
WENPTVBPU0lURV9XSU5ET1cpCi0gICAgcHJpdi0+cmVkaXJlY3RlZFdpbmRvdyA9IG51bGxwdHI7
CiAjZW5kaWYKLSNlbmRpZiAvLyBQTEFURk9STShYMTEpICYmIFVTRShURVhUVVJFX01BUFBFUikK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXdCYXNlUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2ViVmlld0Jhc2VQcml2YXRlLmgKaW5kZXggZDlhY2I5OC4uNmY1YmE5ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2
YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
d0Jhc2VQcml2YXRlLmgKQEAgLTcxLDggKzcxLDggQEAgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUFk
ZEF1dGhlbnRpY2F0aW9uRGlhbG9nKFdlYktpdFdlYlZpZXdCYXNlKiwgR3RrV2lkZ2V0KiBhdXQK
IHZvaWQgd2Via2l0V2ViVmlld0Jhc2VDYW5jZWxBdXRoZW50aWNhdGlvbkRpYWxvZyhXZWJLaXRX
ZWJWaWV3QmFzZSopOwogdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUFkZFdlYkluc3BlY3RvcihXZWJL
aXRXZWJWaWV3QmFzZSosIEd0a1dpZGdldCogaW5zcGVjdG9yLCBXZWJLaXQ6OkF0dGFjaG1lbnRT
aWRlKTsKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VSZXNldENsaWNrQ291bnRlcihXZWJLaXRXZWJW
aWV3QmFzZSopOwotdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVdpbGxFbnRlckFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdNb2RlKFdlYktpdFdlYlZpZXdCYXNlKik7Ci12b2lkIHdlYmtpdFdlYlZpZXdCYXNl
RW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShXZWJLaXRXZWJWaWV3QmFzZSopOwordm9p
ZCB3ZWJraXRXZWJWaWV3QmFzZUVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoV2ViS2l0
V2ViVmlld0Jhc2UqLCBjb25zdCBXZWJLaXQ6OkxheWVyVHJlZUNvbnRleHQmKTsKK3ZvaWQgd2Vi
a2l0V2ViVmlld0Jhc2VVcGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShXZWJLaXRXZWJW
aWV3QmFzZSosIGNvbnN0IFdlYktpdDo6TGF5ZXJUcmVlQ29udGV4dCYpOwogdm9pZCB3ZWJraXRX
ZWJWaWV3QmFzZUV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShXZWJLaXRXZWJWaWV3QmFz
ZSopOwogdm9pZCB3ZWJraXRXZWJWaWV3QmFzZURpZFJlbGF1bmNoV2ViUHJvY2VzcyhXZWJLaXRX
ZWJWaWV3QmFzZSopOwogdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVBhZ2VDbG9zZWQoV2ViS2l0V2Vi
Vmlld0Jhc2UqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5n
QXJlYVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5o
CmluZGV4IDQxM2ZlM2YuLjYwZDc5YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9EcmF3aW5nQXJlYVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Ry
YXdpbmdBcmVhUHJveHkuaApAQCAtMTMwLDcgKzEzMCw2IEBAIHByaXZhdGU6CiAgICAgdmlydHVh
bCB2b2lkIGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUodWludDY0X3QgLyogYmFja2lu
Z1N0b3JlU3RhdGVJRCAqLywgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpIHsgfQogICAgIHZpcnR1
YWwgdm9pZCBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUodWludDY0X3QgLyogYmFja2lu
Z1N0b3JlU3RhdGVJRCAqLywgY29uc3QgVXBkYXRlSW5mbyYpIHsgfQogICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSh1aW50NjRfdCAvKiBiYWNraW5nU3Rv
cmVTdGF0ZUlEICovLCBjb25zdCBMYXllclRyZWVDb250ZXh0JikgeyB9Ci0gICAgdmlydHVhbCB2
b2lkIHdpbGxFbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKHVpbnQ2NF90IC8qIGJhY2tp
bmdTdG9yZVN0YXRlSUQgKi8pIHsgfQogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZpcnR1YWwg
dm9pZCBkaWRVcGRhdGVHZW9tZXRyeSgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBpbnRyaW5zaWND
b250ZW50U2l6ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgeyB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5tZXNzYWdlcy5p
biBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5Lm1lc3NhZ2VzLmlu
CmluZGV4IDhkNTFjZGUuLjQ3MzYwZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9EcmF3aW5nQXJlYVByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5Lm1lc3NhZ2VzLmluCkBAIC0yNiw3ICsyNiw2IEBAIG1l
c3NhZ2VzIC0+IERyYXdpbmdBcmVhUHJveHkgewogICAgIEVudGVyQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ01vZGUodWludDY0X3QgYmFja2luZ1N0b3JlU3RhdGVJRCwgV2ViS2l0OjpMYXllclRyZWVD
b250ZXh0IGNvbnRleHQpCiAgICAgRXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKHVpbnQ2
NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQsIFdlYktpdDo6VXBkYXRlSW5mbyB1cGRhdGVJbmZvKQog
ICAgIFVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKHVpbnQ2NF90IGJhY2tpbmdTdG9y
ZVN0YXRlSUQsIFdlYktpdDo6TGF5ZXJUcmVlQ29udGV4dCBjb250ZXh0KQotICAgIFdpbGxFbnRl
ckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQp
CiAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAvLyBVc2VkIGJ5IFRpbGVkQ29yZUFuaW1hdGlv
bkRyYXdpbmdBcmVhUHJveHkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
RHJhd2luZ0FyZWFQcm94eUltcGwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdp
bmdBcmVhUHJveHlJbXBsLmNwcAppbmRleCAyMDY5MzI1Li4yNDc2Mjk2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAKQEAgLTE1Nywx
NSArMTU3LDE2IEBAIHZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OmRpZFVwZGF0ZUJhY2tpbmdT
dG9yZVN0YXRlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlCiAgICAgbV93ZWJQYWdlUHJveHku
cHJvY2VzcygpLnJlc3BvbnNpdmVuZXNzVGltZXIoKS5zdG9wKCk7CiAKICAgICBpZiAobGF5ZXJU
cmVlQ29udGV4dCAhPSBtX2xheWVyVHJlZUNvbnRleHQpIHsKLSAgICAgICAgaWYgKCFtX2xheWVy
VHJlZUNvbnRleHQuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChsYXllclRyZWVDb250ZXh0Lmlz
RW1wdHkoKSAmJiAhbV9sYXllclRyZWVDb250ZXh0LmlzRW1wdHkoKSkgewogICAgICAgICAgICAg
ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCk7CiAgICAgICAgICAgICBBU1NFUlQobV9s
YXllclRyZWVDb250ZXh0LmlzRW1wdHkoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWxh
eWVyVHJlZUNvbnRleHQuaXNFbXB0eSgpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoIWxheWVyVHJl
ZUNvbnRleHQuaXNFbXB0eSgpICYmIG1fbGF5ZXJUcmVlQ29udGV4dC5pc0VtcHR5KCkpIHsKICAg
ICAgICAgICAgIGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUobGF5ZXJUcmVlQ29udGV4
dCk7CiAgICAgICAgICAgICBBU1NFUlQobGF5ZXJUcmVlQ29udGV4dCA9PSBtX2xheWVyVHJlZUNv
bnRleHQpOwotICAgICAgICB9ICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICB1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShsYXllclRyZWVDb250ZXh0KTsK
KyAgICAgICAgICAgIEFTU0VSVChsYXllclRyZWVDb250ZXh0ID09IG1fbGF5ZXJUcmVlQ29udGV4
dCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAobV9uZXh0QmFja2luZ1N0b3JlU3RhdGVJ
RCAhPSBtX2N1cnJlbnRCYWNraW5nU3RvcmVTdGF0ZUlEKQpAQCAtMTczLDcgKzE3NCw3IEBAIHZv
aWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OmRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKHVpbnQ2
NF90IGJhY2tpbmdTdG9yZVN0YXRlCiAgICAgZWxzZSB7CiAgICAgICAgIG1faGFzUmVjZWl2ZWRG
aXJzdFVwZGF0ZSA9IHRydWU7CiAKLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmIFBMQVRGT1JN
KEdUSykKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmIFBMQVRGT1JNKEdUSykgJiYgIVVTRShS
RURJUkVDVEVEX1hDT01QT1NJVEVfV0lORE9XKQogICAgICAgICBpZiAobV9wZW5kaW5nTmF0aXZl
U3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKSB7CiAgICAgICAgICAgICBzZXROYXRpdmVTdXJm
YWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcobV9wZW5kaW5nTmF0aXZlU3VyZmFjZUhhbmRsZUZvckNv
bXBvc2l0aW5nKTsKICAgICAgICAgICAgIG1fcGVuZGluZ05hdGl2ZVN1cmZhY2VIYW5kbGVGb3JD
b21wb3NpdGluZyA9IDA7CkBAIC0yMjEsMTUgKzIyMiw2IEBAIHZvaWQgRHJhd2luZ0FyZWFQcm94
eUltcGw6OnVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKHVpbnQ2NF90IGJhY2tpbmdT
dG9yCiAgICAgdXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUobGF5ZXJUcmVlQ29udGV4
dCk7CiB9CiAKLXZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OndpbGxFbnRlckFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdNb2RlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQpCi17Ci0gICAgLy8g
V2lsbEVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUgbWVzc2FnZSBpcyBzZW50IHdoZW4g
dGhlIExheWVyVHJlZUhvc3QgaXMgY3JlYXRlZCBpbiB0aGUgV2ViIFByb2Nlc3MuCi0gICAgLy8g
VGhpcyBjYW4gaGFwcGVuIHdoaWxlIHRoZXJlJ3Mgc3RpbGwgYSBEaWRVcGRhdGVCYWNraW5nU3Rv
cmVTdGF0ZSBwZW5kaW5nLCBpbiB3aGljaCBjYXNlIHdlIGFyZSByZWNlaXZpbmcKLSAgICAvLyBo
ZXJlIHRoZSBuZXcgYmFja2luZ1N0b3JlU3RhdGVJRCwgYnV0IG1fY3VycmVudEJhY2tpbmdTdG9y
ZVN0YXRlSUQgaGFzbid0IGJlZW4gdXBkYXRlZCB5ZXQuCi0gICAgQVNTRVJUX0FSRyhiYWNraW5n
U3RvcmVTdGF0ZUlELCBiYWNraW5nU3RvcmVTdGF0ZUlEIDw9IG1fbmV4dEJhY2tpbmdTdG9yZVN0
YXRlSUQpOwotICAgIG1fd2ViUGFnZVByb3h5LndpbGxFbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlKCk7Ci19Ci0KIHZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OmluY29ycG9yYXRlVXBk
YXRlKGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCiB7CiAgICAgQVNTRVJUKCFpc0luQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSk7CkBAIC0zMTUsNyArMzA3LDcgQEAgdm9pZCBEcmF3
aW5nQXJlYVByb3h5SW1wbDo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBM
YXllclRyZWVDb250ZXgKICAgICBtX3dlYlBhZ2VQcm94eS5lbnRlckFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdNb2RlKGxheWVyVHJlZUNvbnRleHQpOwogfQogCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVS
KSAmJiBQTEFURk9STShHVEspCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKSAmJiBQTEFURk9STShH
VEspICYmICFVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKIHZvaWQgRHJhd2luZ0Fy
ZWFQcm94eUltcGw6OnNldE5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyh1aW50NjRf
dCBoYW5kbGUpCiB7CiAgICAgaWYgKCFtX2hhc1JlY2VpdmVkRmlyc3RVcGRhdGUpIHsKQEAgLTM1
MSw4ICszNDMsNyBAQCB2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpleGl0QWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGUoKQogICAgIEFTU0VSVChpc0luQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01v
ZGUoKSk7CiAKICAgICBtX2xheWVyVHJlZUNvbnRleHQgPSBMYXllclRyZWVDb250ZXh0KCk7Ci0g
ICAgaWYgKCFhbHdheXNVc2VDb21wb3NpdGluZygpKQotICAgICAgICBtX3dlYlBhZ2VQcm94eS5l
eGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKKyAgICBtX3dlYlBhZ2VQcm94eS5leGl0
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKIH0KIAogdm9pZCBEcmF3aW5nQXJlYVByb3h5
SW1wbDo6dXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29u
dGV4dCYgbGF5ZXJUcmVlQ29udGV4dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Ry
YXdpbmdBcmVhUHJveHlJbXBsLmgKaW5kZXggODgxOWE5NS4uMWVkNmQwMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmgKQEAgLTQ4LDcgKzQ4
LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNSZWNlaXZlZEZpcnN0VXBkYXRlKCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNSZWNlaXZlZEZpcnN0VXBkYXRlOyB9CiAKLSNpZiBVU0UoVEVYVFVSRV9N
QVBQRVIpICYmIFBMQVRGT1JNKEdUSykKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmIFBMQVRG
T1JNKEdUSykgJiYgIVVTRShSRURJUkVDVEVEX1hDT01QT1NJVEVfV0lORE9XKQogICAgIHZvaWQg
c2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKHVpbnQ2NF90KTsKICAgICB2b2lk
IGRlc3Ryb3lOYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcoKTsKICNlbmRpZgpAQCAt
NjksNyArNjksNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBjb25zdCBMYXllclRyZWVDb250
ZXh0Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUo
dWludDY0X3QgYmFja2luZ1N0b3JlU3RhdGVJRCwgY29uc3QgVXBkYXRlSW5mbyYpIG92ZXJyaWRl
OwogICAgIHZvaWQgdXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUodWludDY0X3QgYmFj
a2luZ1N0b3JlU3RhdGVJRCwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpIG92ZXJyaWRlOwotICAg
IHZvaWQgd2lsbEVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUodWludDY0X3QgYmFja2lu
Z1N0b3JlU3RhdGVJRCkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGluY29ycG9yYXRlVXBkYXRlKGNv
bnN0IFVwZGF0ZUluZm8mKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1BhZ2VDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKaW5k
ZXggZDJhYzk0NC4uMzU4MWEyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1BhZ2VDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5o
CkBAIC0yMzUsNyArMjM1LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBlbnRlckFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJU
cmVlQ29udGV4dCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbEVudGVyQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGUoKSA9IDA7CiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgdmlydHVhbCB2
b2lkIHBsdWdpbkZvY3VzT3JXaW5kb3dGb2N1c0NoYW5nZWQodWludDY0X3QgcGx1Z2luQ29tcGxl
eFRleHRJbnB1dElkZW50aWZpZXIsIGJvb2wgcGx1Z2luSGFzRm9jdXNBbmRXaW5kb3dIYXNGb2N1
cykgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCAx
Yzk2N2NiLi43M2I5YjYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcApAQCAtNTQ2NSwxMSArNTQ2NSw2IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojp1cGRhdGVBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0JiBsYXllCiAgICAg
bV9wYWdlQ2xpZW50LnVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGxheWVyVHJlZUNv
bnRleHQpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6d2lsbEVudGVyQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ01vZGUoKQotewotICAgIG1fcGFnZUNsaWVudC53aWxsRW50ZXJBY2NlbGVyYXRlZENv
bXBvc2l0aW5nTW9kZSgpOwotfQotCiB2b2lkIFdlYlBhZ2VQcm94eTo6YmFja0ZvcndhcmRDbGVh
cigpCiB7CiAgICAgbV9iYWNrRm9yd2FyZExpc3QtPmNsZWFyKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggOGQ3ZDgxNS4uOTNjNTFlOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtODI0LDcgKzgyNCw2IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBM
YXllclRyZWVDb250ZXh0Jik7CiAgICAgdmlydHVhbCB2b2lkIGV4aXRBY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kZSgpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0Jik7Ci0gICAgdm9pZCB3aWxsRW50ZXJBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpOwogCiAgICAgZW51bSBVbmRvT3JSZWRvIHsgVW5kbywg
UmVkbyB9OwogICAgIHZvaWQgYWRkRWRpdENvbW1hbmQoV2ViRWRpdENvbW1hbmRQcm94eSopOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuaAppbmRleCAzMDc3YmZkLi42NDFmMDdj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuaApAQCAtMjIxLDcgKzIyMSw2
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBlbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNv
bnN0IExheWVyVHJlZUNvbnRleHQmKSBvdmVycmlkZTsKICAgICB2b2lkIGV4aXRBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nTW9kZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgdXBkYXRlQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpIG92ZXJyaWRlOwotICAgIHZv
aWQgd2lsbEVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSBvdmVycmlkZSB7IH0KIAog
I2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAgICBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5
Q2xpZW50JiBmdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50KCkgb3ZlcnJpZGU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2lu
ZG93LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvUmVkaXJlY3RlZFhDb21wb3Np
dGVXaW5kb3cuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODI1OWMzLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvUmVkaXJlY3RlZFhDb21wb3Np
dGVXaW5kb3cuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjkyICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIsMjAxNCBJZ2FsaWEgUy5MLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmgiCi0KLSNpZiBV
U0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKLQotI2luY2x1ZGUgIldlYlBhZ2VQcm94
eS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ2Fpcm9VdGlsaXRpZXMuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL1BsYXRmb3JtRGlzcGxheVgxMS5oPgotI2luY2x1ZGUgPFgxMS9YbGliLmg+Ci0jaW5jbHVk
ZSA8WDExL2V4dGVuc2lvbnMvWGNvbXBvc2l0ZS5oPgotI2luY2x1ZGUgPFgxMS9leHRlbnNpb25z
L1hkYW1hZ2UuaD4KLSNpbmNsdWRlIDxjYWlyby14bGliLmg+Ci0jaW5jbHVkZSA8Z2RrL2dka3gu
aD4KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgWERhbWFnZU5v
dGlmaWVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShYRGFtYWdlTm90aWZpZXIpOwotICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIHN0YXRpYyBpbnQgc19kYW1h
Z2VFdmVudEJhc2U7Ci0KLSAgICBYRGFtYWdlTm90aWZpZXIoKQotICAgIHsKLSAgICB9Ci0KLSAg
ICB2b2lkIGFkZChXaW5kb3cgd2luZG93LCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4mJiBub3RpZnlG
dW5jdGlvbikKLSAgICB7Ci0gICAgICAgIGlmIChtX25vdGlmeUZ1bmN0aW9ucy5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICBnZGtfd2luZG93X2FkZF9maWx0ZXIobnVsbHB0ciwgcmVpbnRlcnByZXRf
Y2FzdDxHZGtGaWx0ZXJGdW5jPigmZmlsdGVyWERhbWFnZUV2ZW50KSwgdGhpcyk7Ci0gICAgICAg
IG1fbm90aWZ5RnVuY3Rpb25zLmFkZCh3aW5kb3csIFdURk1vdmUobm90aWZ5RnVuY3Rpb24pKTsK
LSAgICB9Ci0KLSAgICB2b2lkIHJlbW92ZShXaW5kb3cgd2luZG93KQotICAgIHsKLSAgICAgICAg
bV9ub3RpZnlGdW5jdGlvbnMucmVtb3ZlKHdpbmRvdyk7Ci0gICAgICAgIGlmIChtX25vdGlmeUZ1
bmN0aW9ucy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBnZGtfd2luZG93X3JlbW92ZV9maWx0ZXIo
bnVsbHB0ciwgcmVpbnRlcnByZXRfY2FzdDxHZGtGaWx0ZXJGdW5jPigmZmlsdGVyWERhbWFnZUV2
ZW50KSwgdGhpcyk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0YXRpYyBHZGtGaWx0ZXJSZXR1
cm4gZmlsdGVyWERhbWFnZUV2ZW50KEdka1hFdmVudCogZXZlbnQsIEdka0V2ZW50KiwgWERhbWFn
ZU5vdGlmaWVyKiBub3RpZmllcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBub3RpZmllci0+Zmls
dGVyWEV2ZW50KHN0YXRpY19jYXN0PFhFdmVudCo+KGV2ZW50KSk7Ci0gICAgfQotCi0gICAgR2Rr
RmlsdGVyUmV0dXJuIGZpbHRlclhFdmVudChYRXZlbnQqIGV2ZW50KSBjb25zdAotICAgIHsKLSAg
ICAgICAgaWYgKGV2ZW50LT50eXBlICE9IHNfZGFtYWdlRXZlbnRCYXNlICsgWERhbWFnZU5vdGlm
eSkKLSAgICAgICAgICAgIHJldHVybiBHREtfRklMVEVSX0NPTlRJTlVFOwotCi0gICAgICAgIFhE
YW1hZ2VOb3RpZnlFdmVudCogZGFtYWdlRXZlbnQgPSByZWludGVycHJldF9jYXN0PFhEYW1hZ2VO
b3RpZnlFdmVudCo+KGV2ZW50KTsKLSAgICAgICAgaWYgKGNvbnN0IGF1dG8mIG5vdGlmeUZ1bmN0
aW9uID0gbV9ub3RpZnlGdW5jdGlvbnMuZ2V0KGRhbWFnZUV2ZW50LT5kcmF3YWJsZSkpIHsKLSAg
ICAgICAgICAgIG5vdGlmeUZ1bmN0aW9uKCk7Ci0gICAgICAgICAgICBYRGFtYWdlU3VidHJhY3Qo
ZXZlbnQtPnhhbnkuZGlzcGxheSwgZGFtYWdlRXZlbnQtPmRhbWFnZSwgTm9uZSwgTm9uZSk7Ci0g
ICAgICAgICAgICByZXR1cm4gR0RLX0ZJTFRFUl9SRU1PVkU7Ci0gICAgICAgIH0KLQotICAgICAg
ICByZXR1cm4gR0RLX0ZJTFRFUl9DT05USU5VRTsKLSAgICB9Ci0KLSAgICBIYXNoTWFwPFdpbmRv
dywgc3RkOjpmdW5jdGlvbjx2b2lkKCk+PiBtX25vdGlmeUZ1bmN0aW9uczsKLX07Ci0KLWludCBY
RGFtYWdlTm90aWZpZXI6OnNfZGFtYWdlRXZlbnRCYXNlID0gMDsKLQotc3RhdGljIFhEYW1hZ2VO
b3RpZmllciYgeERhbWFnZU5vdGlmaWVyKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
WERhbWFnZU5vdGlmaWVyPiBub3RpZmllcjsKLSAgICByZXR1cm4gbm90aWZpZXI7Ci19Ci0KLXN0
YXRpYyBib29sIHN1cHBvcnRzWERhbWFnZUFuZFhDb21wb3NpdGUoR2RrV2luZG93KiB3aW5kb3cp
Ci17Ci0gICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgICBzdGF0aWMgYm9v
bCBoYXNFeHRlbnNpb25zID0gZmFsc2U7Ci0KLSAgICBpZiAoaW5pdGlhbGl6ZWQpCi0gICAgICAg
IHJldHVybiBoYXNFeHRlbnNpb25zOwotCi0gICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIERp
c3BsYXkqIGRpc3BsYXkgPSBHREtfRElTUExBWV9YRElTUExBWShnZGtfd2luZG93X2dldF9kaXNw
bGF5KHdpbmRvdykpOwotCi0gICAgaW50IGVycm9yQmFzZTsKLSAgICBpZiAoIVhEYW1hZ2VRdWVy
eUV4dGVuc2lvbihkaXNwbGF5LCAmWERhbWFnZU5vdGlmaWVyOjpzX2RhbWFnZUV2ZW50QmFzZSwg
JmVycm9yQmFzZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGludCBldmVudEJhc2U7
Ci0gICAgaWYgKCFYQ29tcG9zaXRlUXVlcnlFeHRlbnNpb24oZGlzcGxheSwgJmV2ZW50QmFzZSwg
JmVycm9yQmFzZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFdlIG5lZWQgdG8g
c3VwcG9ydCBYQ29tcG9zaXRlIHZlcnNpb24gMC4yLgotICAgIGludCBtYWpvciwgbWlub3I7Ci0g
ICAgWENvbXBvc2l0ZVF1ZXJ5VmVyc2lvbihkaXNwbGF5LCAmbWFqb3IsICZtaW5vcik7Ci0gICAg
aWYgKG1ham9yIDwgMCB8fCAoIW1ham9yICYmIG1pbm9yIDwgMikpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGhhc0V4dGVuc2lvbnMgPSB0cnVlOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci1zdGQ6OnVuaXF1ZV9wdHI8UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c+IFJlZGlyZWN0ZWRY
Q29tcG9zaXRlV2luZG93OjpjcmVhdGUoV2ViUGFnZVByb3h5JiB3ZWJQYWdlLCBjb25zdCBJbnRT
aXplJiBpbml0aWFsU2l6ZSwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+JiYgZGFtYWdlTm90aWZ5KQot
ewotICAgIEdka1dpbmRvdyogcGFyZW50V2luZG93ID0gZ3RrX3dpZGdldF9nZXRfcGFyZW50X3dp
bmRvdyh3ZWJQYWdlLnZpZXdXaWRnZXQoKSk7Ci0gICAgQVNTRVJUKEdES19JU19XSU5ET1cocGFy
ZW50V2luZG93KSk7Ci0gICAgaWYgKCFzdXBwb3J0c1hEYW1hZ2VBbmRYQ29tcG9zaXRlKHBhcmVu
dFdpbmRvdykpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBzdGQ6OnVuaXF1
ZV9wdHI8UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c+KG5ldyBSZWRpcmVjdGVkWENvbXBvc2l0
ZVdpbmRvdyh3ZWJQYWdlLCBpbml0aWFsU2l6ZSwgV1RGTW92ZShkYW1hZ2VOb3RpZnkpKSk7Ci19
Ci0KLVJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRv
dyhXZWJQYWdlUHJveHkmIHdlYlBhZ2UsIGNvbnN0IEludFNpemUmIGluaXRpYWxTaXplLCBzdGQ6
OmZ1bmN0aW9uPHZvaWQoKT4mJiBkYW1hZ2VOb3RpZnkpCi0gICAgOiBtX3dlYlBhZ2Uod2ViUGFn
ZSkKLSAgICAsIG1fZGlzcGxheShHREtfRElTUExBWV9YRElTUExBWShnZGtfd2luZG93X2dldF9k
aXNwbGF5KGd0a193aWRnZXRfZ2V0X3BhcmVudF93aW5kb3cod2ViUGFnZS52aWV3V2lkZ2V0KCkp
KSkpCi0gICAgLCBtX3NpemUoaW5pdGlhbFNpemUpCi17Ci0gICAgbV9zaXplLnNjYWxlKG1fd2Vi
UGFnZS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKLQotICAgIEFTU0VSVChkb3duY2FzdDxQbGF0Zm9y
bURpc3BsYXlYMTE+KFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheSgpKS5uYXRpdmUoKSA9
PSBtX2Rpc3BsYXkpOwotICAgIFNjcmVlbiogc2NyZWVuID0gRGVmYXVsdFNjcmVlbk9mRGlzcGxh
eShtX2Rpc3BsYXkpOwotCi0gICAgR2RrVmlzdWFsKiB2aXN1YWwgPSBnZGtfd2luZG93X2dldF92
aXN1YWwoZ3RrX3dpZGdldF9nZXRfcGFyZW50X3dpbmRvdyh3ZWJQYWdlLnZpZXdXaWRnZXQoKSkp
OwotICAgIFhVbmlxdWVDb2xvcm1hcCBjb2xvcm1hcChYQ3JlYXRlQ29sb3JtYXAobV9kaXNwbGF5
LCBSb290V2luZG93T2ZTY3JlZW4oc2NyZWVuKSwgR0RLX1ZJU1VBTF9YVklTVUFMKHZpc3VhbCks
IEFsbG9jTm9uZSkpOwotCi0gICAgLy8gVGhpcyBpcyBiYXNlZCBvbiBjb2RlIGZyb20gQ2hyb21p
dW06IHNyYy9jb250ZW50L2NvbW1vbi9ncHUvaW1hZ2VfdHJhbnNwb3J0X3N1cmZhY2VfbGludXgu
Y2MKLSAgICBYU2V0V2luZG93QXR0cmlidXRlcyB3aW5kb3dBdHRyaWJ1dGVzOwotICAgIHdpbmRv
d0F0dHJpYnV0ZXMub3ZlcnJpZGVfcmVkaXJlY3QgPSBUcnVlOwotICAgIHdpbmRvd0F0dHJpYnV0
ZXMuY29sb3JtYXAgPSBjb2xvcm1hcC5nZXQoKTsKLQotICAgIC8vIENXQm9yZGVyUGl4ZWwgbXVz
dCBiZSBwcmVzZW50IHdoZW4gdGhlIGRlcHRoIGRvZXNuJ3QgbWF0Y2ggdGhlIHBhcmVudCdzIG9u
ZS4KLSAgICAvLyBTZWUgaHR0cDovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL3hvcmcveHNlcnZlci90
cmVlL2RpeC93aW5kb3cuYz9pZD14b3JnLXNlcnZlci0xLjE2LjAjbjcwMy4KLSAgICB3aW5kb3dB
dHRyaWJ1dGVzLmJvcmRlcl9waXhlbCA9IDA7Ci0KLSAgICBtX3BhcmVudFdpbmRvdyA9IFhDcmVh
dGVXaW5kb3cobV9kaXNwbGF5LAotICAgICAgICBSb290V2luZG93T2ZTY3JlZW4oc2NyZWVuKSwK
LSAgICAgICAgV2lkdGhPZlNjcmVlbihzY3JlZW4pICsgMSwgMCwgMSwgMSwKLSAgICAgICAgMCwK
LSAgICAgICAgZ2RrX3Zpc3VhbF9nZXRfZGVwdGgodmlzdWFsKSwKLSAgICAgICAgSW5wdXRPdXRw
dXQsCi0gICAgICAgIEdES19WSVNVQUxfWFZJU1VBTCh2aXN1YWwpLAotICAgICAgICBDV092ZXJy
aWRlUmVkaXJlY3QgfCBDV0NvbG9ybWFwIHwgQ1dCb3JkZXJQaXhlbCwKLSAgICAgICAgJndpbmRv
d0F0dHJpYnV0ZXMpOwotICAgIFhNYXBXaW5kb3cobV9kaXNwbGF5LCBtX3BhcmVudFdpbmRvdy5n
ZXQoKSk7Ci0KLSAgICB3aW5kb3dBdHRyaWJ1dGVzLmV2ZW50X21hc2sgPSBTdHJ1Y3R1cmVOb3Rp
ZnlNYXNrOwotICAgIHdpbmRvd0F0dHJpYnV0ZXMub3ZlcnJpZGVfcmVkaXJlY3QgPSBGYWxzZTsK
LSAgICAvLyBDcmVhdGUgdGhlIHdpbmRvdyBvZiBhdCBsYXN0IDF4MSBzaW5jZSBYIGRvZXNuJ3Qg
YWxsb3cgdG8gY3JlYXRlIGVtcHR5IHdpbmRvd3MuCi0gICAgbV93aW5kb3cgPSBYQ3JlYXRlV2lu
ZG93KG1fZGlzcGxheSwKLSAgICAgICAgbV9wYXJlbnRXaW5kb3cuZ2V0KCksCi0gICAgICAgIDAs
IDAsCi0gICAgICAgIHN0ZDo6bWF4KDEsIG1fc2l6ZS53aWR0aCgpKSwKLSAgICAgICAgc3RkOjpt
YXgoMSwgbV9zaXplLmhlaWdodCgpKSwKLSAgICAgICAgMCwKLSAgICAgICAgQ29weUZyb21QYXJl
bnQsCi0gICAgICAgIElucHV0T3V0cHV0LAotICAgICAgICBDb3B5RnJvbVBhcmVudCwKLSAgICAg
ICAgQ1dFdmVudE1hc2ssCi0gICAgICAgICZ3aW5kb3dBdHRyaWJ1dGVzKTsKLSAgICBYTWFwV2lu
ZG93KG1fZGlzcGxheSwgbV93aW5kb3cuZ2V0KCkpOwotCi0gICAgeERhbWFnZU5vdGlmaWVyKCku
YWRkKG1fd2luZG93LmdldCgpLCBXVEZNb3ZlKGRhbWFnZU5vdGlmeSkpOwotCi0gICAgd2hpbGUg
KDEpIHsKLSAgICAgICAgWEV2ZW50IGV2ZW50OwotICAgICAgICBYV2luZG93RXZlbnQobV9kaXNw
bGF5LCBtX3dpbmRvdy5nZXQoKSwgU3RydWN0dXJlTm90aWZ5TWFzaywgJmV2ZW50KTsKLSAgICAg
ICAgaWYgKGV2ZW50LnR5cGUgPT0gTWFwTm90aWZ5ICYmIGV2ZW50LnhtYXAud2luZG93ID09IG1f
d2luZG93LmdldCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIFhTZWxlY3RJbnB1
dChtX2Rpc3BsYXksIG1fd2luZG93LmdldCgpLCBOb0V2ZW50TWFzayk7Ci0gICAgWENvbXBvc2l0
ZVJlZGlyZWN0V2luZG93KG1fZGlzcGxheSwgbV93aW5kb3cuZ2V0KCksIENvbXBvc2l0ZVJlZGly
ZWN0TWFudWFsKTsKLSAgICBpZiAoIW1fc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIGNyZWF0ZU5l
d1BpeGFtcEFuZFBpeGFtcFN1cmZhY2UoKTsKLSAgICBtX2RhbWFnZSA9IFhEYW1hZ2VDcmVhdGUo
bV9kaXNwbGF5LCBtX3dpbmRvdy5nZXQoKSwgWERhbWFnZVJlcG9ydE5vbkVtcHR5KTsKLX0KLQot
UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6On5SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdygp
Ci17Ci0gICAgQVNTRVJUKG1fZGlzcGxheSk7Ci0gICAgQVNTRVJUKG1fZGFtYWdlKTsKLSAgICBB
U1NFUlQobV93aW5kb3cpOwotICAgIEFTU0VSVChtX3BhcmVudFdpbmRvdyk7Ci0KLSAgICB4RGFt
YWdlTm90aWZpZXIoKS5yZW1vdmUobV93aW5kb3cuZ2V0KCkpOwotCi0gICAgLy8gRXhwbGljaXRs
eSByZXNldCB0aGVzZSBiZWNhdXNlIHdlIG5lZWQgdG8gZW5zdXJlIGl0IGhhcHBlbnMgaW4gdGhp
cyBvcmRlci4KLSAgICBtX2RhbWFnZS5yZXNldCgpOwotICAgIG1fd2luZG93LnJlc2V0KCk7Ci0g
ICAgbV9wYXJlbnRXaW5kb3cucmVzZXQoKTsKLX0KLQotdm9pZCBSZWRpcmVjdGVkWENvbXBvc2l0
ZVdpbmRvdzo6cmVzaXplKGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgSW50U2l6ZSBzY2Fs
ZWRTaXplKHNpemUpOwotICAgIHNjYWxlZFNpemUuc2NhbGUobV93ZWJQYWdlLmRldmljZVNjYWxl
RmFjdG9yKCkpOwotICAgIGlmIChzY2FsZWRTaXplID09IG1fc2l6ZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gUmVzaXplIHRoZSB3aW5kb3cgdG8gYXQgbGFzdCAxeDEgc2luY2UgWCBkb2Vz
bid0IGFsbG93IHRvIGNyZWF0ZSBlbXB0eSB3aW5kb3dzLgotICAgIFhSZXNpemVXaW5kb3cobV9k
aXNwbGF5LCBtX3dpbmRvdy5nZXQoKSwgc3RkOjptYXgoMSwgc2NhbGVkU2l6ZS53aWR0aCgpKSwg
c3RkOjptYXgoMSwgc2NhbGVkU2l6ZS5oZWlnaHQoKSkpOwotICAgIFhGbHVzaChtX2Rpc3BsYXkp
OwotCi0gICAgbV9zaXplID0gc2NhbGVkU2l6ZTsKLSAgICBpZiAobV9zaXplLmlzRW1wdHkoKSkK
LSAgICAgICAgY2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2UoKTsKLSAgICBlbHNlCi0gICAg
ICAgIGNyZWF0ZU5ld1BpeGFtcEFuZFBpeGFtcFN1cmZhY2UoKTsKLX0KLQotdm9pZCBSZWRpcmVj
dGVkWENvbXBvc2l0ZVdpbmRvdzo6Y2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2UoKQotewot
ICAgIGlmICghbV9waXhtYXApCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3VyZmFjZSA9IG51
bGxwdHI7Ci0gICAgbV9waXhtYXAucmVzZXQoKTsKLX0KLQotdm9pZCBSZWRpcmVjdGVkWENvbXBv
c2l0ZVdpbmRvdzo6Y3JlYXRlTmV3UGl4YW1wQW5kUGl4YW1wU3VyZmFjZSgpCi17Ci0gICAgLy8g
VGhpcyBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdpdGggYW4gZW1wdHkgc2l6ZSAobm90IGluIEFj
Y2VsZXJhdGVkIENvbXBvc2l0aW5nIG1vZGUpLgotICAgIEFTU0VSVCghbV9zaXplLmlzRW1wdHko
KSk7Ci0gICAgWFVuaXF1ZVBpeG1hcCBuZXdQaXhtYXAoWENvbXBvc2l0ZU5hbWVXaW5kb3dQaXht
YXAobV9kaXNwbGF5LCBtX3dpbmRvdy5nZXQoKSkpOwotICAgIGlmICghbmV3UGl4bWFwKSB7Ci0g
ICAgICAgIGNsZWFudXBQaXhtYXBBbmRQaXhtYXBTdXJmYWNlKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBYV2luZG93QXR0cmlidXRlcyB3aW5kb3dBdHRyaWJ1dGVzOwotICAgIGlm
ICghWEdldFdpbmRvd0F0dHJpYnV0ZXMobV9kaXNwbGF5LCBtX3dpbmRvdy5nZXQoKSwgJndpbmRv
d0F0dHJpYnV0ZXMpKSB7Ci0gICAgICAgIGNsZWFudXBQaXhtYXBBbmRQaXhtYXBTdXJmYWNlKCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBu
ZXdTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9feGxpYl9zdXJmYWNlX2NyZWF0ZShtX2Rpc3BsYXks
IG5ld1BpeG1hcC5nZXQoKSwgd2luZG93QXR0cmlidXRlcy52aXN1YWwsIG1fc2l6ZS53aWR0aCgp
LCBtX3NpemUuaGVpZ2h0KCkpKTsKLSAgICBjYWlyb1N1cmZhY2VTZXREZXZpY2VTY2FsZShuZXdT
dXJmYWNlLmdldCgpLCBtX3dlYlBhZ2UuZGV2aWNlU2NhbGVGYWN0b3IoKSwgbV93ZWJQYWdlLmRl
dmljZVNjYWxlRmFjdG9yKCkpOwotCi0gICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYo
Y2Fpcm9fY3JlYXRlKG5ld1N1cmZhY2UuZ2V0KCkpKTsKLSAgICBpZiAoIW1fd2ViUGFnZS5kcmF3
c0JhY2tncm91bmQoKSkKLSAgICAgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLmdldCgpLCBDQUlS
T19PUEVSQVRPUl9DTEVBUik7Ci0gICAgZWxzZQotICAgICAgICBzZXRTb3VyY2VSR0JBRnJvbUNv
bG9yKGNyLmdldCgpLCBtX3dlYlBhZ2UuYmFja2dyb3VuZENvbG9yKCkpOwotICAgIGNhaXJvX3Bh
aW50KGNyLmdldCgpKTsKLQotICAgIC8vIE52aWRpYSBkcml2ZXJzIHNlZW0gdG8gcHJlcGFyZSB0
aGVpciByZWRpcmVjdGVkIHdpbmRvdyBwaXhtYXAgYXN5bmNocm9ub3VzbHksIHNvIGZvciBhIGZl
dyBmcmFjdGlvbnMKLSAgICAvLyBvZiBhIHNlY29uZCBhZnRlciBlYWNoIHJlc2l6ZSwgd2hpbGUg
ZG9pbmcgY29udGludW91cyByZXNpemluZyAod2hpY2ggY29uc3RhbnRseSBkZXN0cm95cyBhbmQg
Y3JlYXRlcwotICAgIC8vIHBpeG1hcCB3aW5kb3ctYmFja2luZ3MpLCB0aGUgcGl4bWFwIG1lbW9y
eSBpcyB1bmluaXRpYWxpemVkLiBUbyB3b3JrIGFyb3VuZCB0aGlzIGlzc3VlLCBwYWludCB0aGUg
b2xkCi0gICAgLy8gcGl4bWFwIHRvIHRoZSBuZXcgb25lIHRvIHByb3Blcmx5IGluaXRpYWxpemUg
aXQuCi0gICAgaWYgKG1fc3VyZmFjZSkgewotICAgICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3Iu
Z2V0KCksIENBSVJPX09QRVJBVE9SX09WRVIpOwotICAgICAgICBjYWlyb19zZXRfc291cmNlX3N1
cmZhY2UoY3IuZ2V0KCksIG1fc3VyZmFjZS5nZXQoKSwgMCwgMCk7Ci0gICAgICAgIGNhaXJvX3Bh
aW50KGNyLmdldCgpKTsKLSAgICB9Ci0KLSAgICBjbGVhbnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFj
ZSgpOwotICAgIG1fcGl4bWFwID0gV1RGTW92ZShuZXdQaXhtYXApOwotICAgIG1fc3VyZmFjZSA9
IFdURk1vdmUobmV3U3VyZmFjZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIFVTRShSRURJUkVDVEVEX1hDT01QT1NJVEVfV0lORE9XKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjJiMmVlLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaAor
KysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
SWdhbGlhIFMuTC4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2lu
ZG93X2gKLSNkZWZpbmUgIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93X2gKLQotI2lmIFVTRShS
RURJUkVDVEVEX1hDT01QT1NJVEVfV0lORE9XKQotCi0jaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXpl
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZWZQdHJDYWlyby5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
WFVuaXF1ZVJlc291cmNlLmg+Ci0jaW5jbHVkZSA8ZnVuY3Rpb25hbD4KLQotdHlwZWRlZiBzdHJ1
Y3QgX0dka1dpbmRvdyBHZGtXaW5kb3c7Ci10eXBlZGVmIHN0cnVjdCBfWERpc3BsYXkgRGlzcGxh
eTsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBXaW5kb3c7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewot
Ci1jbGFzcyBXZWJQYWdlUHJveHk7Ci0KLWNsYXNzIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93
IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdyk7
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c+IGNyZWF0ZShXZWJQYWdlUHJveHkmLCBj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiYmIGRhbWFnZU5v
dGlmeSk7Ci0gICAgflJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KCk7Ci0KLSAgICBXaW5kb3cg
d2luZG93SUQoKSBjb25zdCB7IHJldHVybiBtX3dpbmRvdy5nZXQoKTsgfQotICAgIHZvaWQgcmVz
aXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKLSAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZh
Y2UoKSBjb25zdCB7IHJldHVybiBtX3N1cmZhY2UuZ2V0KCk7IH07Ci0KLXByaXZhdGU6Ci0gICAg
UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coV2ViUGFnZVByb3h5JiwgY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4mJiBkYW1hZ2VOb3RpZnkpOwotICAgIHZv
aWQgY3JlYXRlTmV3UGl4YW1wQW5kUGl4YW1wU3VyZmFjZSgpOwotICAgIHZvaWQgY2xlYW51cFBp
eG1hcEFuZFBpeG1hcFN1cmZhY2UoKTsKLQotICAgIFdlYlBhZ2VQcm94eSYgbV93ZWJQYWdlOwot
ICAgIERpc3BsYXkqIG1fZGlzcGxheSB7IG51bGxwdHIgfTsKLSAgICBXZWJDb3JlOjpJbnRTaXpl
IG1fc2l6ZTsKLSAgICBXZWJDb3JlOjpYVW5pcXVlV2luZG93IG1fd2luZG93OwotICAgIFdlYkNv
cmU6OlhVbmlxdWVXaW5kb3cgbV9wYXJlbnRXaW5kb3c7Ci0gICAgV2ViQ29yZTo6WFVuaXF1ZVBp
eG1hcCBtX3BpeG1hcDsKLSAgICBXZWJDb3JlOjpYVW5pcXVlRGFtYWdlIG1fZGFtYWdlOwotICAg
IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fc3VyZmFjZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCi0K
LSNlbmRpZiAvLyBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvd19oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1hEYW1hZ2VOb3RpZmllci5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZ3RrL1hEYW1hZ2VOb3RpZmllci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uN2EzM2ZjYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9ndGsvWERhbWFnZU5vdGlmaWVyLmNwcApAQCAtMCwwICsxLDEwMCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
WERhbWFnZU5vdGlmaWVyLmgiCisKKyNpZiBQTEFURk9STShYMTEpCisKKyNpbmNsdWRlIDxXZWJD
b3JlL1BsYXRmb3JtRGlzcGxheVgxMS5oPgorI2luY2x1ZGUgPFgxMS9YbGliLmg+CisjaW5jbHVk
ZSA8WDExL2V4dGVuc2lvbnMvWGRhbWFnZS5oPgorI2luY2x1ZGUgPGdkay9nZGt4Lmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIE9w
dGlvbmFsPGludD4gc19kYW1hZ2VFdmVudEJhc2U7CisKK1hEYW1hZ2VOb3RpZmllciYgWERhbWFn
ZU5vdGlmaWVyOjpzaW5nbGV0b24oKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxYRGFt
YWdlTm90aWZpZXI+IG5vdGlmaWVyOworICAgIHJldHVybiBub3RpZmllcjsKK30KKworWERhbWFn
ZU5vdGlmaWVyOjpYRGFtYWdlTm90aWZpZXIoKQoreworICAgIGRvd25jYXN0PFBsYXRmb3JtRGlz
cGxheVgxMT4oUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5KCkpLnN1cHBvcnRzWERhbWFn
ZShzX2RhbWFnZUV2ZW50QmFzZSk7Cit9CisKK3ZvaWQgWERhbWFnZU5vdGlmaWVyOjphZGQoRGFt
YWdlIGRhbWFnZSwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+JiYgbm90aWZ5RnVuY3Rpb24pCit7Cisg
ICAgaWYgKCFzX2RhbWFnZUV2ZW50QmFzZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1f
bm90aWZ5RnVuY3Rpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgZ2RrX3dpbmRvd19hZGRfZmlsdGVy
KG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRmlsdGVyRnVuYz4oJmZpbHRlclhEYW1hZ2VF
dmVudCksIHRoaXMpOworICAgIG1fbm90aWZ5RnVuY3Rpb25zLmFkZChkYW1hZ2UsIFdURk1vdmUo
bm90aWZ5RnVuY3Rpb24pKTsKK30KKwordm9pZCBYRGFtYWdlTm90aWZpZXI6OnJlbW92ZShEYW1h
Z2UgZGFtYWdlKQoreworICAgIGlmICghc19kYW1hZ2VFdmVudEJhc2UpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fbm90aWZ5RnVuY3Rpb25zLnJlbW92ZShkYW1hZ2UpOworICAgIGlmIChtX25v
dGlmeUZ1bmN0aW9ucy5pc0VtcHR5KCkpCisgICAgICAgIGdka193aW5kb3dfcmVtb3ZlX2ZpbHRl
cihudWxscHRyLCByZWludGVycHJldF9jYXN0PEdka0ZpbHRlckZ1bmM+KCZmaWx0ZXJYRGFtYWdl
RXZlbnQpLCB0aGlzKTsKK30KKworR2RrRmlsdGVyUmV0dXJuIFhEYW1hZ2VOb3RpZmllcjo6Zmls
dGVyWERhbWFnZUV2ZW50KEdka1hFdmVudCogZXZlbnQsIEdka0V2ZW50KiwgWERhbWFnZU5vdGlm
aWVyKiBub3RpZmllcikKK3sKKyAgICBBU1NFUlQoc19kYW1hZ2VFdmVudEJhc2UpOworICAgIGF1
dG8qIHhFdmVudCA9IHN0YXRpY19jYXN0PFhFdmVudCo+KGV2ZW50KTsKKyAgICBpZiAoeEV2ZW50
LT50eXBlICE9IHNfZGFtYWdlRXZlbnRCYXNlLnZhbHVlKCkgKyBYRGFtYWdlTm90aWZ5KQorICAg
ICAgICByZXR1cm4gR0RLX0ZJTFRFUl9DT05USU5VRTsKKworICAgIGF1dG8qIGRhbWFnZUV2ZW50
ID0gcmVpbnRlcnByZXRfY2FzdDxYRGFtYWdlTm90aWZ5RXZlbnQqPih4RXZlbnQpOworICAgIGlm
IChub3RpZmllci0+bm90aWZ5KGRhbWFnZUV2ZW50LT5kYW1hZ2UpKSB7CisgICAgICAgIFhEYW1h
Z2VTdWJ0cmFjdCh4RXZlbnQtPnhhbnkuZGlzcGxheSwgZGFtYWdlRXZlbnQtPmRhbWFnZSwgTm9u
ZSwgTm9uZSk7CisgICAgICAgIHJldHVybiBHREtfRklMVEVSX1JFTU9WRTsKKyAgICB9CisKKyAg
ICByZXR1cm4gR0RLX0ZJTFRFUl9DT05USU5VRTsKK30KKworYm9vbCBYRGFtYWdlTm90aWZpZXI6
Om5vdGlmeShEYW1hZ2UgZGFtYWdlKSBjb25zdAoreworICAgIGlmIChjb25zdCBhdXRvJiBub3Rp
ZnlGdW5jdGlvbiA9IG1fbm90aWZ5RnVuY3Rpb25zLmdldChkYW1hZ2UpKSB7CisgICAgICAgIG5v
dGlmeUZ1bmN0aW9uKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBMQVRGT1JN
KFgxMSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvWERhbWFnZU5v
dGlmaWVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1hEYW1hZ2VOb3RpZmllci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMzRjYzIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1hEYW1hZ2VOb3RpZmllci5oCkBA
IC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBQTEFURk9STShYMTEpCisKKyNpbmNsdWRlIDxnZGsvZ2RreC5oPgorI2luY2x1ZGUgPHd0
Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKwordHlwZWRl
ZiB1bnNpZ25lZCBsb25nIERhbWFnZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFhE
YW1hZ2VOb3RpZmllciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoWERhbWFnZU5vdGlmaWVy
KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJv
eWVkPFhEYW1hZ2VOb3RpZmllcj47CitwdWJsaWM6CisgICAgc3RhdGljIFhEYW1hZ2VOb3RpZmll
ciYgc2luZ2xldG9uKCk7CisKKyAgICB2b2lkIGFkZChEYW1hZ2UsIHN0ZDo6ZnVuY3Rpb248dm9p
ZCgpPiYmKTsKKyAgICB2b2lkIHJlbW92ZShEYW1hZ2UpOworCitwcml2YXRlOgorICAgIFhEYW1h
Z2VOb3RpZmllcigpOworCisgICAgc3RhdGljIEdka0ZpbHRlclJldHVybiBmaWx0ZXJYRGFtYWdl
RXZlbnQoR2RrWEV2ZW50KiwgR2RrRXZlbnQqLCBYRGFtYWdlTm90aWZpZXIqKTsKKyAgICBib29s
IG5vdGlmeShEYW1hZ2UpIGNvbnN0OworCisgICAgSGFzaE1hcDxEYW1hZ2UsIHN0ZDo6ZnVuY3Rp
b248dm9pZCgpPj4gbV9ub3RpZnlGdW5jdGlvbnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIFBMQVRGT1JNKFgxMSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaAppbmRleCAyMjBkYTBhLi4wMWFiMTBkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oCkBA
IC0xMDMsNyArMTAzLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGVudGVyQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpIG92ZXJyaWRlOwogICAgIHZvaWQg
ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCB1cGRh
dGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0Jikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCB3aWxsRW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpIG92
ZXJyaWRlOwogICAgIHZvaWQgc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jvb3RMYXllcihMYXll
ck9yVmlldyAqKSBvdmVycmlkZTsKICAgICBMYXllck9yVmlldyAqYWNjZWxlcmF0ZWRDb21wb3Np
dGluZ1Jvb3RMYXllcigpIGNvbnN0IG92ZXJyaWRlOwogICAgIExheWVySG9zdGluZ01vZGUgdmll
d0xheWVySG9zdGluZ01vZGUoKSBvdmVycmlkZSB7IHJldHVybiBMYXllckhvc3RpbmdNb2RlOjpP
dXRPZlByb2Nlc3M7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3Mv
UGFnZUNsaWVudEltcGxJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VD
bGllbnRJbXBsSU9TLm1tCmluZGV4IDJlMGY4MGQuLjVmYzIyYWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0KKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQpAQCAtNDU2LDEwICs0
NTYsNiBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjp1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5n
TW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0JikKIHsKIH0KIAotdm9pZCBQYWdlQ2xpZW50SW1w
bDo6d2lsbEVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKQotewotfQotCiB2b2lkIFBh
Z2VDbGllbnRJbXBsOjpzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nUm9vdExheWVyKExheWVyT3JW
aWV3ICpyb290TGF5ZXIpCiB7CiAgICAgW21fY29udGVudFZpZXcgX3NldEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdSb290Vmlldzpyb290TGF5ZXJdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L21hYy9QYWdlQ2xpZW50SW1wbC5oCmluZGV4IDU4MDhlZTMuLmQyMWNhNTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLmgKQEAgLTEzOCw3ICsxMzgs
NiBAQCBwcml2YXRlOgogICAgIHZvaWQgZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShj
b25zdCBMYXllclRyZWVDb250ZXh0Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBleGl0QWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGUoKSBvdmVycmlkZTsKICAgICB2b2lkIHVwZGF0ZUFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKSBvdmVycmlkZTsKLSAgICB2
b2lkIHdpbGxFbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkgb3ZlcnJpZGU7CiAKICAg
ICBQYXNzUmVmUHRyPFZpZXdTbmFwc2hvdD4gdGFrZVZpZXdTbmFwc2hvdCgpIG92ZXJyaWRlOwog
ICAgIHZvaWQgd2hlZWxFdmVudFdhc05vdEhhbmRsZWRCeVdlYkNvcmUoY29uc3QgTmF0aXZlV2Vi
V2hlZWxFdmVudCYpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMv
UGFnZUNsaWVudEltcGwubW0KaW5kZXggZTdmOTBhNS4uNTNiOWJjNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCkBAIC00ODAsMTAgKzQ4MCw2
IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OnVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2Rl
KGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxhCiAgICAgbV9pbXBsLT5zZXRBY2NlbGVyYXRlZENv
bXBvc2l0aW5nUm9vdExheWVyKHJlbmRlckxheWVyKTsKIH0KIAotdm9pZCBQYWdlQ2xpZW50SW1w
bDo6d2lsbEVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKQotewotfQotCiB2b2lkIFBh
Z2VDbGllbnRJbXBsOjpzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nUm9vdExheWVyKENBTGF5ZXIg
KnJvb3RMYXllcikKIHsKICAgICBtX2ltcGwtPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSb290
TGF5ZXIocm9vdExheWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmNwcAppbmRleCA0YTVhM2E5Li5l
YjgwOTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNj
ZWxlcmF0ZWREcmF3aW5nQXJlYS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuY3BwCkBAIC0zMTgsMTEgKzMxOCw5IEBAIHZv
aWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9k
ZShHcmFwaGljc0xheWVyKiBncmFwCiAgICAgbV9leGl0Q29tcG9zaXRpbmdUaW1lci5zdG9wKCk7
CiAgICAgbV93YW50c1RvRXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlID0gZmFsc2U7CiAK
LSAgICBtX3dlYlBhZ2Uuc2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWFQcm94eTo6V2lsbEVudGVy
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUobV9iYWNraW5nU3RvcmVTdGF0ZUlEKSk7Ci0KICAg
ICBBU1NFUlQoIW1fbGF5ZXJUcmVlSG9zdCk7CiAgICAgbV9sYXllclRyZWVIb3N0ID0gTGF5ZXJU
cmVlSG9zdDo6Y3JlYXRlKG1fd2ViUGFnZSk7Ci0jaWYgUExBVEZPUk0oR1RLKSAmJiBVU0UoVEVY
VFVSRV9NQVBQRVIpCisjaWYgUExBVEZPUk0oR1RLKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpICYm
ICFVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKICAgICBpZiAobV9uYXRpdmVTdXJm
YWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcpCiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0TmF0
aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKG1fbmF0aXZlU3VyZmFjZUhhbmRsZUZvckNv
bXBvc2l0aW5nKTsKICNlbmRpZgpAQCAtMzU0LDcgKzM1Miw3IEBAIHZvaWQgQWNjZWxlcmF0ZWRE
cmF3aW5nQXJlYTo6ZGlkUmVjZWl2ZUNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdE1lc3NhZ2UoSVBD
OjpDb25uCiB9CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKEdUSykgJiYgVVNFKFRFWFRVUkVfTUFQ
UEVSKQorI2lmIFBMQVRGT1JNKEdUSykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKSAmJiAhVVNFKFJF
RElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCiB2b2lkIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6
OnNldE5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyh1aW50NjRfdCBoYW5kbGUpCiB7
CiAgICAgbV9uYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcgPSBoYW5kbGU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3
aW5nQXJlYS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVk
RHJhd2luZ0FyZWEuaAppbmRleCBlYTE2N2EzLi4yMWNhNDkzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVh
LmgKQEAgLTYzLDcgKzYzLDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgZGlkUmVjZWl2ZUNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpNZXNzYWdl
RGVjb2RlciYpIG92ZXJyaWRlOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShHVEspICYmIFVTRShU
RVhUVVJFX01BUFBFUikKKyNpZiBQTEFURk9STShHVEspICYmIFVTRShURVhUVVJFX01BUFBFUikg
JiYgIVVTRShSRURJUkVDVEVEX1hDT01QT1NJVEVfV0lORE9XKQogICAgIHZvaWQgc2V0TmF0aXZl
U3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKHVpbnQ2NF90KSBvdmVycmlkZTsKICAgICB2b2lk
IGRlc3Ryb3lOYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcoYm9vbCYpIG92ZXJyaWRl
OwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9U
aHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggNDFiNDJmNS4uZGJkMDI4
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVh
ZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcApAQCAtMzQsNiArMzQsMTAgQEAKICNpbmNs
dWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTWFpbkZyYW1lLmg+
CiAKKyNpZiBVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKKyNpbmNsdWRlICJSZWRp
cmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTUwLDE0ICs1NCwyNiBAQCBUaHJlYWRlZENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6flRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
KCkKIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpUaHJlYWRlZENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdChXZWJQYWdlJiB3ZWJQYWdlKQogICAgIDogQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0KHdlYlBhZ2UpCiAgICAgLCBtX2NvbXBvc2l0b3JDbGllbnQoKnRoaXMpCisjaWYgVVNF
KFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCisgICAgLCBtX3JlZGlyZWN0ZWRXaW5kb3co
UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmNyZWF0ZSh3ZWJQYWdlKSkKKyAgICAsIG1fY29t
cG9zaXRvcihUaHJlYWRlZENvbXBvc2l0b3I6OmNyZWF0ZSgmbV9jb21wb3NpdG9yQ2xpZW50LCBt
X3JlZGlyZWN0ZWRXaW5kb3cgPyBtX3JlZGlyZWN0ZWRXaW5kb3ctPndpbmRvdygpIDogMCkpCisj
ZWxzZQogICAgICwgbV9jb21wb3NpdG9yKFRocmVhZGVkQ29tcG9zaXRvcjo6Y3JlYXRlKCZtX2Nv
bXBvc2l0b3JDbGllbnQpKQorI2VuZGlmCiB7CisjaWYgVVNFKFJFRElSRUNURURfWENPTVBPU0lU
RV9XSU5ET1cpCisgICAgaWYgKG1fcmVkaXJlY3RlZFdpbmRvdykKKyAgICAgICAgbV9sYXllclRy
ZWVDb250ZXh0LmNvbnRleHRJRCA9IG1fcmVkaXJlY3RlZFdpbmRvdy0+cGl4bWFwKCk7CisjZW5k
aWYKIH0KIAogdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6aW52YWxpZGF0
ZSgpCiB7CiAgICAgbV9jb21wb3NpdG9yLT5pbnZhbGlkYXRlKCk7CiAgICAgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjppbnZhbGlkYXRlKCk7CisjaWYgVVNFKFJFRElSRUNURURfWENPTVBPU0lU
RV9XSU5ET1cpCisgICAgbV9yZWRpcmVjdGVkV2luZG93ID0gbnVsbHB0cjsKKyNlbmRpZgogfQog
CiB2b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpmb3JjZVJlcGFpbnQoKQpA
QCAtNzksNiArOTUsMTMgQEAgdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
Y29udGVudHNTaXplQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRTaXoKIAogdm9pZCBUaHJlYWRl
ZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2Vk
KCkKIHsKKyNpZiBVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKKyAgICBpZiAobV9y
ZWRpcmVjdGVkV2luZG93KSB7CisgICAgICAgIG1fcmVkaXJlY3RlZFdpbmRvdy0+cmVzaXplKG1f
d2ViUGFnZS5zaXplKCkpOworICAgICAgICBtX2xheWVyVHJlZUNvbnRleHQuY29udGV4dElEID0g
bV9yZWRpcmVjdGVkV2luZG93LT5waXhtYXAoKTsKKyAgICB9CisjZW5kaWYKKwogICAgIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7CiAg
ICAgbV9jb21wb3NpdG9yLT5zZXREZXZpY2VTY2FsZUZhY3RvcihtX3dlYlBhZ2UuZGV2aWNlU2Nh
bGVGYWN0b3IoKSk7CiB9CkBAIC05MSw2ICsxMTQsMTIgQEAgdm9pZCBUaHJlYWRlZENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6cGFnZUJhY2tncm91bmRUcmFuc3BhcmVuY3lDaGFuZ2VkKCkKIAog
dm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2l6ZURpZENoYW5nZShjb25z
dCBJbnRTaXplJiBzaXplKQogeworI2lmIFVTRShSRURJUkVDVEVEX1hDT01QT1NJVEVfV0lORE9X
KQorICAgIGlmIChtX3JlZGlyZWN0ZWRXaW5kb3cpIHsKKyAgICAgICAgbV9yZWRpcmVjdGVkV2lu
ZG93LT5yZXNpemUoc2l6ZSk7CisgICAgICAgIG1fbGF5ZXJUcmVlQ29udGV4dC5jb250ZXh0SUQg
PSBtX3JlZGlyZWN0ZWRXaW5kb3ctPnBpeG1hcCgpOworICAgIH0KKyNlbmRpZgogICAgIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2l6ZURpZENoYW5nZShzaXplKTsKICAgICBtX2NvbXBvc2l0
b3ItPmRpZENoYW5nZVZpZXdwb3J0U2l6ZShzaXplKTsKIH0KQEAgLTEwNSw3ICsxMzQsNyBAQCB2
b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkaWRTY2FsZUZhY3RvckNoYW5n
ZWQoZmxvYXQgc2NhbGUsIGNvbnN0CiAgICAgbV93ZWJQYWdlLnNjYWxlUGFnZShzY2FsZSwgb3Jp
Z2luKTsKIH0KIAotI2lmIFBMQVRGT1JNKEdUSykKKyNpZiBQTEFURk9STShHVEspICYmICFVU0Uo
UkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKIHZvaWQgVGhyZWFkZWRDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OnNldE5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyh1aW50NjRf
dCBoYW5kbGUpCiB7CiAgICAgbV9sYXllclRyZWVDb250ZXh0LmNvbnRleHRJRCA9IGhhbmRsZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdC5oCmluZGV4IDZhOTkwYzMuLmE0MWExMTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1Ro
cmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExh
eWVyVHJlZUhvc3QuaApAQCAtNDEsNiArNDEsNyBAQCBzdHJ1Y3QgQ29vcmRpbmF0ZWRHcmFwaGlj
c1N0YXRlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorY2xhc3MgUmVkaXJlY3RlZFhDb21wb3Np
dGVXaW5kb3c7CiBjbGFzcyBXZWJQYWdlOwogCiBjbGFzcyBUaHJlYWRlZENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdCBmaW5hbCA6IHB1YmxpYyBDb29yZGluYXRlZExheWVyVHJlZUhvc3QgewpAQCAt
NjQsNyArNjUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZm9yY2VSZXBhaW50KCkgb3ZlcnJpZGU7
CiAgICAgYm9vbCBmb3JjZVJlcGFpbnRBc3luYyh1aW50NjRfdCBjYWxsYmFja0lEKSBvdmVycmlk
ZSB7IHJldHVybiBmYWxzZTsgfQogCi0jaWYgUExBVEZPUk0oR1RLKQorI2lmIFBMQVRGT1JNKEdU
SykgJiYgIVVTRShSRURJUkVDVEVEX1hDT01QT1NJVEVfV0lORE9XKQogICAgIHZvaWQgc2V0TmF0
aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKHVpbnQ2NF90KSBvdmVycmlkZTsKICNlbmRp
ZgogCkBAIC0xMDMsMTAgKzEwNCwxMyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkRmx1c2hSb290
TGF5ZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGUgeyB9CiAgICAgdm9pZCBj
b21taXRTY2VuZVN0YXRlKGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYp
IG92ZXJyaWRlOwogCi0gICAgV2ViQ29yZTo6SW50UG9pbnQgbV9wcmV2U2Nyb2xsUG9zaXRpb247
CiAgICAgQ29tcG9zaXRvckNsaWVudCBtX2NvbXBvc2l0b3JDbGllbnQ7CisjaWYgVVNFKFJFRElS
RUNURURfWENPTVBPU0lURV9XSU5ET1cpCisgICAgc3RkOjp1bmlxdWVfcHRyPFJlZGlyZWN0ZWRY
Q29tcG9zaXRlV2luZG93PiBtX3JlZGlyZWN0ZWRXaW5kb3c7CisjZW5kaWYKICAgICBSZWZQdHI8
VGhyZWFkZWRDb21wb3NpdG9yPiBtX2NvbXBvc2l0b3I7CiAgICAgZmxvYXQgbV9sYXN0U2NhbGVG
YWN0b3IgeyAxIH07CisgICAgV2ViQ29yZTo6SW50UG9pbnQgbV9wcmV2U2Nyb2xsUG9zaXRpb247
CiAgICAgV2ViQ29yZTo6SW50UG9pbnQgbV9sYXN0U2Nyb2xsUG9zaXRpb247CiB9OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oCmluZGV4IDAy
YjQwMzUuLmJkMzNlNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9EcmF3aW5nQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9EcmF3aW5nQXJlYS5oCkBAIC0xNDYsNyArMTQ2LDcgQEAgcHJvdGVjdGVkOgogICAgIERyYXdp
bmdBcmVhVHlwZSBtX3R5cGU7CiAgICAgV2ViUGFnZSYgbV93ZWJQYWdlOwogCi0jaWYgUExBVEZP
Uk0oR1RLKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisjaWYgUExBVEZPUk0oR1RLKSAmJiBVU0Uo
VEVYVFVSRV9NQVBQRVIpICYmICFVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKICAg
ICB1aW50NjRfdCBtX25hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyB7IDAgfTsKICNl
bmRpZgogCkBAIC0xNzIsNyArMTcyLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgYWRk
VHJhbnNhY3Rpb25DYWxsYmFja0lEKHVpbnQ2NF90IGNhbGxiYWNrSUQpIHsgQVNTRVJUX05PVF9S
RUFDSEVEKCk7IH0KICNlbmRpZgogCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSKSAmJiBQTEFURk9S
TShHVEspCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKSAmJiBQTEFURk9STShHVEspICYmICFVU0Uo
UkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmF0aXZl
U3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKHVpbnQ2NF90KSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIGRlc3Ryb3lOYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcoYm9vbCYpID0gMDsK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Ry
YXdpbmdBcmVhLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0RyYXdpbmdBcmVhLm1lc3NhZ2VzLmluCmluZGV4IDcyODliNjMuLjk3ZGY1ODYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5tZXNzYWdl
cy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEu
bWVzc2FnZXMuaW4KQEAgLTQwLDcgKzQwLDcgQEAgbWVzc2FnZXMgLT4gRHJhd2luZ0FyZWEgewog
ICAgIEFkZFRyYW5zYWN0aW9uQ2FsbGJhY2tJRCh1aW50NjRfdCBjYWxsYmFja0lEKQogI2VuZGlm
CiAKLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmIFBMQVRGT1JNKEdUSykKKyNpZiBVU0UoVEVY
VFVSRV9NQVBQRVIpICYmIFBMQVRGT1JNKEdUSykgJiYgIVVTRShSRURJUkVDVEVEX1hDT01QT1NJ
VEVfV0lORE9XKQogICAgIFNldE5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyh1aW50
NjRfdCBoYW5kbGUpCiAgICAgRGVzdHJveU5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGlu
ZygpIC0+IChib29sIGhhbmRsZWQpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0xheWVyVHJlZUhvc3RHdGsuY3BwCmluZGV4IDk5
MzQzZGIuLjlhMDkyZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmNwcApAQCAtNTcsNiArNTcsMTAgQEAK
ICNpbmNsdWRlIDxnZGsvZ2RreC5oPgogI2VuZGlmCiAKKyNpZiBVU0UoUkVESVJFQ1RFRF9YQ09N
UE9TSVRFX1dJTkRPVykKKyNpbmNsdWRlICJSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oIgor
I2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
QEAgLTEzMyw2ICsxMzcsOSBAQCBSZWY8TGF5ZXJUcmVlSG9zdEd0az4gTGF5ZXJUcmVlSG9zdEd0
azo6Y3JlYXRlKFdlYlBhZ2UmIHdlYlBhZ2UpCiAKIExheWVyVHJlZUhvc3RHdGs6OkxheWVyVHJl
ZUhvc3RHdGsoV2ViUGFnZSYgd2ViUGFnZSkKICAgICA6IExheWVyVHJlZUhvc3Qod2ViUGFnZSkK
KyNpZiBVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKKyAgICAsIG1fcmVkaXJlY3Rl
ZFdpbmRvdyhSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6Y3JlYXRlKHdlYlBhZ2UpKQorI2Vu
ZGlmCiAgICAgLCBtX3JlbmRlckZyYW1lU2NoZWR1bGVyKHN0ZDo6YmluZCgmTGF5ZXJUcmVlSG9z
dEd0azo6cmVuZGVyRnJhbWUsIHRoaXMpKQogewogICAgIG1fcm9vdExheWVyID0gR3JhcGhpY3NM
YXllcjo6Y3JlYXRlKGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCksICp0aGlzKTsKQEAgLTE1OSwxNyAr
MTY2LDMwIEBAIExheWVyVHJlZUhvc3RHdGs6OkxheWVyVHJlZUhvc3RHdGsoV2ViUGFnZSYgd2Vi
UGFnZSkKIAogICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChtX25vbkNvbXBvc2l0ZWRDb250ZW50
TGF5ZXIuZ2V0KCkpOwogICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNE
aXNwbGF5KCk7CisKKyNpZiBVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKKyAgICBp
ZiAobV9yZWRpcmVjdGVkV2luZG93KSB7CisgICAgICAgIGNyZWF0ZVRleHR1cmVNYXBwZXIoKTsK
KyAgICAgICAgbV9sYXllclRyZWVDb250ZXh0LmNvbnRleHRJRCA9IG1fcmVkaXJlY3RlZFdpbmRv
dy0+cGl4bWFwKCk7CisgICAgfQorI2VuZGlmCiB9CiAKIGJvb2wgTGF5ZXJUcmVlSG9zdEd0azo6
bWFrZUNvbnRleHRDdXJyZW50KCkKIHsKLSAgICBpZiAoIW1fbGF5ZXJUcmVlQ29udGV4dC5jb250
ZXh0SUQpIHsKKyNpZiBVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKKyAgICB1aW50
NjRfdCBuYXRpdmVIYW5kbGUgPSBtX3JlZGlyZWN0ZWRXaW5kb3cgPyBtX3JlZGlyZWN0ZWRXaW5k
b3ctPndpbmRvdygpIDogbV9sYXllclRyZWVDb250ZXh0LmNvbnRleHRJRDsKKyNlbHNlCisgICAg
dWludDY0X3QgbmF0aXZlSGFuZGxlID0gbV9sYXllclRyZWVDb250ZXh0LmNvbnRleHRJRDsKKyNl
bmRpZgorCisgICAgaWYgKCFuYXRpdmVIYW5kbGUpIHsKICAgICAgICAgbV9jb250ZXh0ID0gbnVs
bHB0cjsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIGlmICghbV9jb250ZXh0
KSB7Ci0gICAgICAgIG1fY29udGV4dCA9IEdMQ29udGV4dDo6Y3JlYXRlQ29udGV4dEZvcldpbmRv
dyhyZWludGVycHJldF9jYXN0PEdMTmF0aXZlV2luZG93VHlwZT4obV9sYXllclRyZWVDb250ZXh0
LmNvbnRleHRJRCksIEdMQ29udGV4dDo6c2hhcmluZ0NvbnRleHQoKSk7CisgICAgICAgIG1fY29u
dGV4dCA9IEdMQ29udGV4dDo6Y3JlYXRlQ29udGV4dEZvcldpbmRvdyhyZWludGVycHJldF9jYXN0
PEdMTmF0aXZlV2luZG93VHlwZT4obmF0aXZlSGFuZGxlKSwgR0xDb250ZXh0OjpzaGFyaW5nQ29u
dGV4dCgpKTsKICAgICAgICAgaWYgKCFtX2NvbnRleHQpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQpAQCAtMjA4LDYgKzIyOCwxMCBAQCB2b2lkIExheWVyVHJlZUhvc3RHdGs6Omlu
dmFsaWRhdGUoKQogCiAgICAgbV9jb250ZXh0ID0gbnVsbHB0cjsKICAgICBMYXllclRyZWVIb3N0
OjppbnZhbGlkYXRlKCk7CisKKyNpZiBVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykK
KyAgICBtX3JlZGlyZWN0ZWRXaW5kb3cgPSBudWxscHRyOworI2VuZGlmCiB9CiAKIHZvaWQgTGF5
ZXJUcmVlSG9zdEd0azo6c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoKQpAQCAt
MjQ3LDExICsyNzEsMjUgQEAgdm9pZCBMYXllclRyZWVIb3N0R3RrOjpzaXplRGlkQ2hhbmdlKGNv
bnN0IEludFNpemUmIG5ld1NpemUpCiAgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXll
ci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEZsb2F0UmVjdCgwLCBvbGRTaXplLmhlaWdodCgpLCBu
ZXdTaXplLndpZHRoKCksIG5ld1NpemUuaGVpZ2h0KCkgLSBvbGRTaXplLmhlaWdodCgpKSk7CiAg
ICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKIAorI2lm
IFVTRShSRURJUkVDVEVEX1hDT01QT1NJVEVfV0lORE9XKQorICAgIGlmIChtX3JlZGlyZWN0ZWRX
aW5kb3cpIHsKKyAgICAgICAgbV9yZWRpcmVjdGVkV2luZG93LT5yZXNpemUobmV3U2l6ZSk7Cisg
ICAgICAgIG1fbGF5ZXJUcmVlQ29udGV4dC5jb250ZXh0SUQgPSBtX3JlZGlyZWN0ZWRXaW5kb3ct
PnBpeG1hcCgpOworICAgIH0KKyNlbmRpZgorCiAgICAgY29tcG9zaXRlTGF5ZXJzVG9Db250ZXh0
KEZvclJlc2l6ZSk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6ZGV2aWNlT3JQYWdlU2Nh
bGVGYWN0b3JDaGFuZ2VkKCkKIHsKKyNpZiBVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRP
VykKKyAgICBpZiAobV9yZWRpcmVjdGVkV2luZG93KSB7CisgICAgICAgIG1fcmVkaXJlY3RlZFdp
bmRvdy0+cmVzaXplKG1fd2ViUGFnZS5zaXplKCkpOworICAgICAgICBtX2xheWVyVHJlZUNvbnRl
eHQuY29udGV4dElEID0gbV9yZWRpcmVjdGVkV2luZG93LT5waXhtYXAoKTsKKyAgICB9CisjZW5k
aWYKKwogICAgIC8vIE90aGVyIGxheWVycyBsZWFybiBvZiB0aGUgc2NhbGUgZmFjdG9yIGNoYW5n
ZSB2aWEgV2ViUGFnZTo6c2V0RGV2aWNlU2NhbGVGYWN0b3IuCiAgICAgbV9ub25Db21wb3NpdGVk
Q29udGVudExheWVyLT5kZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKIApAQCAtMzc3
LDExICs0MTUsOCBAQCB2b2lkIExheWVyVHJlZUhvc3RHdGs6OnNldFZpZXdPdmVybGF5Um9vdExh
eWVyKEdyYXBoaWNzTGF5ZXIqIHZpZXdPdmVybGF5Um9vdExheQogICAgICAgICBtX3Jvb3RMYXll
ci0+YWRkQ2hpbGQobV92aWV3T3ZlcmxheVJvb3RMYXllcik7CiB9CiAKLXZvaWQgTGF5ZXJUcmVl
SG9zdEd0azo6c2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKHVpbnQ2NF90IGhh
bmRsZSkKK3ZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6Y3JlYXRlVGV4dHVyZU1hcHBlcigpCiB7Ci0g
ICAgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKLSAgICBtX2xheWVyVHJlZUNvbnRleHQuY29u
dGV4dElEID0gaGFuZGxlOwotCiAgICAgLy8gVGhlIGNyZWF0aW9uIG9mIHRoZSBUZXh0dXJlTWFw
cGVyIG5lZWRzIGFuIGFjdGl2ZSBPcGVuR0wgY29udGV4dC4KICAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0zOTEsOSArNDI2LDE4IEBAIHZvaWQgTGF5
ZXJUcmVlSG9zdEd0azo6c2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKHVpbnQ2
NF90IGhhbmRsZSkKICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUo
KTsKICAgICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wqPihtX3RleHR1cmVNYXBwZXIuZ2V0
KCkpLT5zZXRFbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNpbmcodHJ1ZSk7CiAgICAgZG93bmNh
c3Q8R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI+KCptX3Jvb3RMYXllcikubGF5ZXIoKS5zZXRU
ZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7Cit9CiAKKyNpZiAhVVNFKFJFRElS
RUNURURfWENPTVBPU0lURV9XSU5ET1cpCit2b2lkIExheWVyVHJlZUhvc3RHdGs6OnNldE5hdGl2
ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyh1aW50NjRfdCBoYW5kbGUpCit7CisgICAgY2Fu
Y2VsUGVuZGluZ0xheWVyRmx1c2goKTsKKyAgICBtX2xheWVyVHJlZUNvbnRleHQuY29udGV4dElE
ID0gaGFuZGxlOworCisgICAgY3JlYXRlVGV4dHVyZU1hcHBlcigpOwogICAgIHNjaGVkdWxlTGF5
ZXJGbHVzaCgpOwogfQorI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0xheWVyVHJlZUhvc3RH
dGsuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9z
dEd0ay5oCmluZGV4IGMxNWI4NmYuLmQ2OWRlOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5oCkBAIC0zOSw2
ICszOSw4IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBSZWRpcmVjdGVkWENvbXBv
c2l0ZVdpbmRvdzsKKwogY2xhc3MgTGF5ZXJUcmVlSG9zdEd0ayBmaW5hbCA6IHB1YmxpYyBMYXll
clRyZWVIb3N0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50IHsKIHB1YmxpYzoKICAgICBz
dGF0aWMgUmVmPExheWVyVHJlZUhvc3RHdGs+IGNyZWF0ZShXZWJQYWdlJik7CkBAIC02NSw3ICs2
Nyw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRW
aWV3T3ZlcmxheVJvb3RMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CiAK
KyNpZiAhVVNFKFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCiAgICAgdm9pZCBzZXROYXRp
dmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcodWludDY0X3QpIG92ZXJyaWRlOworI2VuZGlm
CiAKICAgICBjbGFzcyBSZW5kZXJGcmFtZVNjaGVkdWxlciB7CiAgICAgcHVibGljOgpAQCAtOTgs
MTIgKzEwMiwxNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZmx1c2hBbmRSZW5kZXJMYXllcnMoKTsK
ICAgICBib29sIHJlbmRlckZyYW1lKCk7CiAgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICB2b2lkIGNyZWF0ZVRleHR1cmVNYXBwZXIoKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxX
ZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3Jvb3RMYXllcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyOwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyPiBtX3RleHR1cmVNYXBwZXI7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkdMQ29udGV4dD4gbV9jb250ZXh0OwogICAg
IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IG1fc2NhbGVNYXRyaXg7CisjaWYgVVNFKFJF
RElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCisgICAgc3RkOjp1bmlxdWVfcHRyPFJlZGlyZWN0
ZWRYQ29tcG9zaXRlV2luZG93PiBtX3JlZGlyZWN0ZWRXaW5kb3c7CisjZW5kaWYKICAgICBSZW5k
ZXJGcmFtZVNjaGVkdWxlciBtX3JlbmRlckZyYW1lU2NoZWR1bGVyOwogfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9SZWRpcmVjdGVkWENvbXBv
c2l0ZVdpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1Jl
ZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4xY2ZkOGI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5jcHAKQEAgLTAsMCAr
MSwxNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNiBJZ2FsaWEgUy5MLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaCIKKworI2lmIFVTRShS
RURJUkVDVEVEX1hDT01QT1NJVEVfV0lORE9XKQorCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1EaXNwbGF5WDExLmg+CisjaW5jbHVkZSA8WDExL1hsaWIu
aD4KKyNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9YY29tcG9zaXRlLmg+CisjaW5jbHVkZSA8Z2Rr
L2dka3guaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0ZDo6dW5pcXVlX3B0cjxSZWRpcmVjdGVk
WENvbXBvc2l0ZVdpbmRvdz4gUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmNyZWF0ZShXZWJQ
YWdlJiB3ZWJQYWdlKQoreworICAgIGlmICghZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5WDExPihQ
bGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXkoKSkuc3VwcG9ydHNYQ29tcG9zaXRlKCkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8UmVkaXJl
Y3RlZFhDb21wb3NpdGVXaW5kb3c+KG5ldyBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdyh3ZWJQ
YWdlKSk7Cit9CisKK1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpSZWRpcmVjdGVkWENvbXBv
c2l0ZVdpbmRvdyhXZWJQYWdlJiB3ZWJQYWdlKQorICAgIDogbV93ZWJQYWdlKHdlYlBhZ2UpCisg
ICAgLCBtX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5WDExPihQbGF0Zm9ybURpc3Bs
YXk6OnNoYXJlZERpc3BsYXkoKSkubmF0aXZlKCkpCisgICAgLCBtX3NpemUod2ViUGFnZS5zaXpl
KCkpCit7CisgICAgbV9zaXplLnNjYWxlKG1fd2ViUGFnZS5kZXZpY2VTY2FsZUZhY3RvcigpKTsK
KworICAgIFNjcmVlbiogc2NyZWVuID0gRGVmYXVsdFNjcmVlbk9mRGlzcGxheShtX2Rpc3BsYXkp
OworCisgICAgQVNTRVJUKGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheVgxMT4oUGxhdGZvcm1EaXNw
bGF5OjpzaGFyZWREaXNwbGF5KCkpLm5hdGl2ZSgpID09IG1fZGlzcGxheSk7CisgICAgR2RrVmlz
dWFsKiB2aXN1YWwgPSBnZGtfc2NyZWVuX2dldF9yZ2JhX3Zpc3VhbChnZGtfc2NyZWVuX2dldF9k
ZWZhdWx0KCkpOworICAgIGlmICghdmlzdWFsKQorICAgICAgICB2aXN1YWwgPSBnZGtfc2NyZWVu
X2dldF9zeXN0ZW1fdmlzdWFsKGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKSk7CisKKyAgICBYVW5p
cXVlQ29sb3JtYXAgY29sb3JtYXAoWENyZWF0ZUNvbG9ybWFwKG1fZGlzcGxheSwgUm9vdFdpbmRv
d09mU2NyZWVuKHNjcmVlbiksIEdES19WSVNVQUxfWFZJU1VBTCh2aXN1YWwpLCBBbGxvY05vbmUp
KTsKKworICAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVzIHdpbmRvd0F0dHJpYnV0ZXM7CisgICAgd2lu
ZG93QXR0cmlidXRlcy5vdmVycmlkZV9yZWRpcmVjdCA9IFRydWU7CisgICAgd2luZG93QXR0cmli
dXRlcy5jb2xvcm1hcCA9IGNvbG9ybWFwLmdldCgpOworCisgICAgLy8gQ1dCb3JkZXJQaXhlbCBt
dXN0IGJlIHByZXNlbnQgd2hlbiB0aGUgZGVwdGggZG9lc24ndCBtYXRjaCB0aGUgcGFyZW50J3Mg
b25lLgorICAgIC8vIFNlZSBodHRwOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcveG9yZy94c2VydmVy
L3RyZWUvZGl4L3dpbmRvdy5jP2lkPXhvcmctc2VydmVyLTEuMTYuMCNuNzAzLgorICAgIHdpbmRv
d0F0dHJpYnV0ZXMuYm9yZGVyX3BpeGVsID0gMDsKKworICAgIG1fcGFyZW50V2luZG93ID0gWENy
ZWF0ZVdpbmRvdyhtX2Rpc3BsYXksCisgICAgICAgIFJvb3RXaW5kb3dPZlNjcmVlbihzY3JlZW4p
LAorICAgICAgICBXaWR0aE9mU2NyZWVuKHNjcmVlbikgKyAxLCAwLCAxLCAxLAorICAgICAgICAw
LAorICAgICAgICBnZGtfdmlzdWFsX2dldF9kZXB0aCh2aXN1YWwpLAorICAgICAgICBJbnB1dE91
dHB1dCwKKyAgICAgICAgR0RLX1ZJU1VBTF9YVklTVUFMKHZpc3VhbCksCisgICAgICAgIENXT3Zl
cnJpZGVSZWRpcmVjdCB8IENXQ29sb3JtYXAgfCBDV0JvcmRlclBpeGVsLAorICAgICAgICAmd2lu
ZG93QXR0cmlidXRlcyk7CisgICAgWE1hcFdpbmRvdyhtX2Rpc3BsYXksIG1fcGFyZW50V2luZG93
LmdldCgpKTsKKworICAgIHdpbmRvd0F0dHJpYnV0ZXMuZXZlbnRfbWFzayA9IFN0cnVjdHVyZU5v
dGlmeU1hc2s7CisgICAgd2luZG93QXR0cmlidXRlcy5vdmVycmlkZV9yZWRpcmVjdCA9IEZhbHNl
OworCisgICAgLy8gQ3JlYXRlIHRoZSB3aW5kb3cgb2YgYXQgbGFzdCAxeDEgc2luY2UgWCBkb2Vz
bid0IGFsbG93IHRvIGNyZWF0ZSBlbXB0eSB3aW5kb3dzLgorICAgIG1fd2luZG93ID0gWENyZWF0
ZVdpbmRvdyhtX2Rpc3BsYXksCisgICAgICAgIG1fcGFyZW50V2luZG93LmdldCgpLAorICAgICAg
ICAwLCAwLAorICAgICAgICBzdGQ6Om1heCgxLCBtX3NpemUud2lkdGgoKSksCisgICAgICAgIHN0
ZDo6bWF4KDEsIG1fc2l6ZS5oZWlnaHQoKSksCisgICAgICAgIDAsCisgICAgICAgIENvcHlGcm9t
UGFyZW50LAorICAgICAgICBJbnB1dE91dHB1dCwKKyAgICAgICAgQ29weUZyb21QYXJlbnQsCisg
ICAgICAgIENXRXZlbnRNYXNrLAorICAgICAgICAmd2luZG93QXR0cmlidXRlcyk7CisgICAgWE1h
cFdpbmRvdyhtX2Rpc3BsYXksIG1fd2luZG93LmdldCgpKTsKKworICAgIHdoaWxlICgxKSB7Cisg
ICAgICAgIFhFdmVudCBldmVudDsKKyAgICAgICAgWFdpbmRvd0V2ZW50KG1fZGlzcGxheSwgbV93
aW5kb3cuZ2V0KCksIFN0cnVjdHVyZU5vdGlmeU1hc2ssICZldmVudCk7CisgICAgICAgIGlmIChl
dmVudC50eXBlID09IE1hcE5vdGlmeSAmJiBldmVudC54bWFwLndpbmRvdyA9PSBtX3dpbmRvdy5n
ZXQoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBYU2VsZWN0SW5wdXQobV9kaXNw
bGF5LCBtX3dpbmRvdy5nZXQoKSwgTm9FdmVudE1hc2spOworICAgIFhDb21wb3NpdGVSZWRpcmVj
dFdpbmRvdyhtX2Rpc3BsYXksIG1fd2luZG93LmdldCgpLCBDb21wb3NpdGVSZWRpcmVjdE1hbnVh
bCk7CisgICAgbV9waXhtYXAgPSBYQ29tcG9zaXRlTmFtZVdpbmRvd1BpeG1hcChtX2Rpc3BsYXks
IG1fd2luZG93LmdldCgpKTsKK30KKworUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6On5SZWRp
cmVjdGVkWENvbXBvc2l0ZVdpbmRvdygpCit7CisgICAgQVNTRVJUKG1fZGlzcGxheSk7CisgICAg
QVNTRVJUKG1fd2luZG93KTsKKyAgICBBU1NFUlQobV9wYXJlbnRXaW5kb3cpOworCisgICAgLy8g
RXhwbGljaXRseSByZXNldCB0aGVzZSBiZWNhdXNlIHdlIG5lZWQgdG8gZW5zdXJlIGl0IGhhcHBl
bnMgaW4gdGhpcyBvcmRlci4KKyAgICBtX3dpbmRvdy5yZXNldCgpOworICAgIG1fcGFyZW50V2lu
ZG93LnJlc2V0KCk7Cit9CisKK3ZvaWQgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OnJlc2l6
ZShjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIEludFNpemUgc2NhbGVkU2l6ZShzaXplKTsK
KyAgICBzY2FsZWRTaXplLnNjYWxlKG1fd2ViUGFnZS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAg
ICBpZiAoc2NhbGVkU2l6ZSA9PSBtX3NpemUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2l6
ZSA9IHNjYWxlZFNpemU7CisKKyAgICAvLyBSZXNpemUgdGhlIHdpbmRvdyB0byBhdCBsYXN0IDF4
MSBzaW5jZSBYIGRvZXNuJ3QgYWxsb3cgdG8gY3JlYXRlIGVtcHR5IHdpbmRvd3MuCisgICAgWFJl
c2l6ZVdpbmRvdyhtX2Rpc3BsYXksIG1fd2luZG93LmdldCgpLCBzdGQ6Om1heCgxLCBtX3NpemUu
d2lkdGgoKSksIHN0ZDo6bWF4KDEsIG1fc2l6ZS5oZWlnaHQoKSkpOworICAgIFhGbHVzaChtX2Rp
c3BsYXkpOworCisgICAgLy8gUmVsZWFzZSB0aGUgcHJldmlvdXMgcGl4bWFwIGxhdGVyIHRvIGdp
dmUgc29tZSB0aW1lIHRvIHRoZSBVSSBwcm9jZXNzIHRvIHVwZGF0ZS4KKyAgICBSdW5Mb29wOjpt
YWluKCkuZGlzcGF0Y2hBZnRlcihzdGQ6OmNocm9ubzo6c2Vjb25kcyg1KSwgW3BpeG1hcCA9IFdU
Rk1vdmUobV9waXhtYXApXSB7IH0pOworICAgIG1fcGl4bWFwID0gWENvbXBvc2l0ZU5hbWVXaW5k
b3dQaXhtYXAobV9kaXNwbGF5LCBtX3dpbmRvdy5nZXQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShSRURJUkVDVEVEX1hDT01QT1NJVEVfV0lORE9XKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9SZWRpcmVj
dGVkWENvbXBvc2l0ZVdpbmRvdy5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjg0YTU0ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmgKQEAgLTAs
MCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE2IElnYWxpYSBTLkwuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgVVNFKFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCisKKyNpbmNsdWRlIDxXZWJD
b3JlL0ludFNpemUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1hVbmlxdWVSZXNvdXJjZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCit0eXBlZGVmIHN0cnVjdCBfWERpc3BsYXkgRGlz
cGxheTsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBQaXhtYXA7Cit0eXBlZGVmIHVuc2lnbmVkIGxv
bmcgV2luZG93OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZTsKKworY2xh
c3MgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZWRpcmVjdGVkWENvbXBvc2l0ZVdp
bmRvdz4gY3JlYXRlKFdlYlBhZ2UmKTsKKyAgICB+UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3co
KTsKKworICAgIFdpbmRvdyB3aW5kb3coKSBjb25zdCB7IHJldHVybiBtX3dpbmRvdy5nZXQoKTsg
fQorICAgIFBpeG1hcCBwaXhtYXAoKSBjb25zdCB7IHJldHVybiBtX3BpeG1hcC5nZXQoKTsgfQor
ICAgIHZvaWQgcmVzaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKKworcHJpdmF0ZToKKyAg
ICBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdyhXZWJQYWdlJik7CisKKyAgICBXZWJQYWdlJiBt
X3dlYlBhZ2U7CisgICAgRGlzcGxheSogbV9kaXNwbGF5IHsgbnVsbHB0ciB9OworICAgIFdlYkNv
cmU6OkludFNpemUgbV9zaXplOworICAgIFdlYkNvcmU6OlhVbmlxdWVXaW5kb3cgbV93aW5kb3c7
CisgICAgV2ViQ29yZTo6WFVuaXF1ZVdpbmRvdyBtX3BhcmVudFdpbmRvdzsKKyAgICBXZWJDb3Jl
OjpYVW5pcXVlUGl4bWFwIG1fcGl4bWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykK
</data>
<flag name="review"
          id="308653"
          type_id="1"
          status="+"
          setter="zan"
    />
          </attachment>
      

    </bug>

</bugzilla>