<?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>103277</bug_id>
          
          <creation_ts>2012-11-26 11:20:02 -0800</creation_ts>
          <short_desc>[GTK] [WebKit2] Embed the HTTP authentication dialog into the WebView</short_desc>
          <delta_ts>2012-11-29 12:37:46 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly 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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>danw</cc>
    
    <cc>gustavo</cc>
    
    <cc>philn</cc>
    
    <cc>svillar</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>775697</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-11-26 11:20:02 -0800</bug_when>
    <thetext>Instead of popping up a separate dialog, we can embed the dialog directly into the WebView like Chromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777447</commentid>
    <comment_count>1</comment_count>
      <attachid>176382</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-11-27 18:37:50 -0800</bug_when>
    <thetext>Created attachment 176382
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777449</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-27 18:40:49 -0800</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777450</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-27 18:41:09 -0800</bug_when>
    <thetext>Attachment 176382 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKit2GtkAuthenticationDialog.h&quot;
Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp:197:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp:201:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp:202:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp:206:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp:209:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp:210:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 6 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777756</commentid>
    <comment_count>4</comment_count>
      <attachid>176382</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-11-28 04:47:03 -0800</bug_when>
    <thetext>Comment on attachment 176382
Patch

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

This is awesome! the dialog looks great embedded in the web view. But I think the implementation is a bit complex because we are trying to share the dialog code but we don&apos;t want a dialog anymore in webkit2. So, I think we could move the dialog specific code to WebKit1 and create a widget in webcore with the auth logic that can be added to a dialog or any other widget. The API could be very simple:

WebKitAuth* webkitAuthNew(const AuthenticationChallenge&amp; challenge);
void webkitAuthAuthenticate(WebKitAuth*);
void webkitAuthCancel(WebKitAuth*);

The dialog would simply add the widget to its content area, and call authentiate or cancel in the response callback depending on the button clicked. In WebKit2 we create a simple widget with the WebKitAuth and ok/cancel buttons.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKit2GtkAuthenticationDialog.cpp:54
&gt; +    m_dialog = gtk_event_box_new();

Instead of an event box we could use a custom widget an override realize to crerate a GdkWindow.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKit2GtkAuthenticationDialog.cpp:65
&gt; +    gtk_style_context_add_class(m_styleContext.get(), GTK_STYLE_CLASS_BACKGROUND);
&gt; +    GtkWidgetPath* path = gtk_widget_path_new();
&gt; +    gtk_widget_path_append_type(path, GTK_TYPE_WINDOW);
&gt; +    gtk_style_context_set_path(m_styleContext.get(), path);
&gt; +    gtk_widget_path_free(path);

With a custom widget, we add the GtkWindow path in the init method and then we can use our own style context in draw instead of creating a new one.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKit2GtkAuthenticationDialog.cpp:85
&gt; +    webkitWebViewBaseAddAuthenticationDialog(WEBKIT_WEB_VIEW_BASE(m_webView), this);
&gt; +    GtkAuthenticationDialog::show();

It&apos;s a bit strange that the dialog adds itself to the view.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitLoaderClient.cpp:121
&gt; +    (new WebKit2GtkAuthenticationDialog(WEBKIT_WEB_VIEW(clientInfo), toImpl(authenticationChallenge)))-&gt;show();

I think this should be handled by the WebView, here we call something like webkitWebViewAuthenticate (WEBKIT_WEB_VIEW(clientInfo), toImpl(authenticationChallenge));

The view then creates the auth widget and adds it to itself. In load-changed, we can check if there&apos;s an auth widget and destroy it when a new load starts, instead of connecting to load-changed from the auth widget. When we implement the auth api this will only be done if the user doesn&apos;t hander el authenticate signal.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:109
&gt; +    WebKit::WebKit2GtkAuthenticationDialog* authenticationDialog;

I think there&apos;s a using namespace WebKit.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:355
&gt;  void webkitWebViewBaseChildMoveResize(WebKitWebViewBase* webView, GtkWidget* child, const IntRect&amp; childRect)
&gt;  {
&gt; -    const IntRect&amp; geometry = webView-&gt;priv-&gt;children.get(child);
&gt; +    if (webkitWebViewChildIsInternalWidget(webView, child))
&gt; +        return;
&gt;  
&gt; +    const IntRect&amp; geometry = webView-&gt;priv-&gt;children.get(child);

This is only called when a plugin geometry changes, this is already supposed to be called only for non internal children.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777985</commentid>
    <comment_count>5</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-11-28 09:35:57 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 176382 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=176382&amp;action=review
&gt; 
&gt; This is awesome! the dialog looks great embedded in the web view. But I think the implementation is a bit complex because we are trying to share the dialog code but we don&apos;t want a dialog anymore in webkit2. So, I think we could move the dialog specific code to WebKit1 and create a widget in webcore with the auth logic that can be added to a dialog or any other widget. The API could be very simple:
&gt; 
&gt; WebKitAuth* webkitAuthNew(const AuthenticationChallenge&amp; challenge);
&gt; void webkitAuthAuthenticate(WebKitAuth*);
&gt; void webkitAuthCancel(WebKitAuth*);

First, thanks for the suggestions. You have some interesting ideas. I see two main suggestions for redesign in your comments here: the creation of a new widget subclass and the movement of the dialog specific code to WebKit1. I&apos;ll address each of these points separately:

1. Creating a widget subclass

I&apos;m somewhat reluctant to do this for several reasons. The first is that I based this implementation on the Chromium implementation, so I&apos;m more confidant that it can work with GTK+ 2.0. This is important because I&apos;m considering writing another patch to extend the embedded dialog for WebKit1. During the implementation I talked about this approach with Benjamin Otte (indeed he suggested overriding the draw signal, as I&apos;ve done), so I feel fairly confidant that it isn&apos;t a complete hack. Creating a widget subclass would also be many more lines of code than what I use here. The bits responsible for drawing the widget background must surely be less than 10 lines.

2. Moving the dialog specific code to WebKit1

You make a good point about the class knowledge being convoluted. It&apos;s weird that the superclass needs to expose a method to create the dialog guts. I think that I&apos;ll wait to fix this when I create the patch for WebKit1 though. Here is my proposed class hierarchy:

GtkAuthenticationWidget (abstract base class)
   - GtkAuthenticationDialog - GtkDialog implementation for use with webkitsoupauthenticationdialog
   - EmbeddedGtkAuthenticationWidget - Embedded version
   - WebKit2EmbeddedGtkAuthenticationWidget - WebKit2 version of the embedded widget (that uses UIProcess classes for authentication).

In this approach GtkAuthenticationDialog would move to WebKit1, while 
EmbeddableGtkAuthenticationWidget would be in WebCore.
 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKit2GtkAuthenticationDialog.cpp:85
&gt; &gt; +    webkitWebViewBaseAddAuthenticationDialog(WEBKIT_WEB_VIEW_BASE(m_webView), this);
&gt; &gt; +    GtkAuthenticationDialog::show();
&gt; 
&gt; It&apos;s a bit strange that the dialog adds itself to the view.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitLoaderClient.cpp:121
&gt; &gt; +    (new WebKit2GtkAuthenticationDialog(WEBKIT_WEB_VIEW(clientInfo), toImpl(authenticationChallenge)))-&gt;show();
&gt; 
&gt; I think this should be handled by the WebView, here we call something like webkitWebViewAuthenticate (WEBKIT_WEB_VIEW(clientInfo), toImpl(authenticationChallenge));
&gt; 
&gt; The view then creates the auth widget and adds it to itself. In load-changed, we can check if there&apos;s an auth widget and destroy it when a new load starts, instead of connecting to load-changed from the auth widget. When we implement the auth api this will only be done if the user doesn&apos;t hander el authenticate signal.

Believe it or not I started with a design like this one. :) The WebView needs to track the destruction of the dialog to disconnect the signal handler. The issue is that the WebKitWebView does not have any notification when the dialog is destroyed and the use of a weak pointer was causing issues for me. I can try this again though.
 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:109
&gt; &gt; +    WebKit::WebKit2GtkAuthenticationDialog* authenticationDialog;
&gt; 
&gt; I think there&apos;s a using namespace WebKit.

Okay. I&apos;ll fix this.
 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:355
&gt; &gt;  void webkitWebViewBaseChildMoveResize(WebKitWebViewBase* webView, GtkWidget* child, const IntRect&amp; childRect)
&gt; &gt;  {
&gt; &gt; -    const IntRect&amp; geometry = webView-&gt;priv-&gt;children.get(child);
&gt; &gt; +    if (webkitWebViewChildIsInternalWidget(webView, child))
&gt; &gt; +        return;
&gt; &gt;  
&gt; &gt; +    const IntRect&amp; geometry = webView-&gt;priv-&gt;children.get(child);
&gt; 
&gt; This is only called when a plugin geometry changes, this is already supposed to be called only for non internal children.

I&apos;ll try removing it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778768</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-11-29 00:29:54 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; (From update of attachment 176382 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=176382&amp;action=review
&gt; &gt; 
&gt; &gt; This is awesome! the dialog looks great embedded in the web view. But I think the implementation is a bit complex because we are trying to share the dialog code but we don&apos;t want a dialog anymore in webkit2. So, I think we could move the dialog specific code to WebKit1 and create a widget in webcore with the auth logic that can be added to a dialog or any other widget. The API could be very simple:
&gt; &gt; 
&gt; &gt; WebKitAuth* webkitAuthNew(const AuthenticationChallenge&amp; challenge);
&gt; &gt; void webkitAuthAuthenticate(WebKitAuth*);
&gt; &gt; void webkitAuthCancel(WebKitAuth*);
&gt; 
&gt; First, thanks for the suggestions. You have some interesting ideas. I see two main suggestions for redesign in your comments here: the creation of a new widget subclass and the movement of the dialog specific code to WebKit1. I&apos;ll address each of these points separately:
&gt; 
&gt; 1. Creating a widget subclass
&gt; 
&gt; I&apos;m somewhat reluctant to do this for several reasons. The first is that I based this implementation on the Chromium implementation, so I&apos;m more confidant that it can work with GTK+ 2.0. 

Creating a widget subclass won&apos;t prevent it to work with GTK+ 2.

&gt; This is important because I&apos;m considering writing another patch to extend the embedded dialog for WebKit1.

Not sure it&apos;s worth it, considering wk1 is somehow deprecated now.

&gt; During the implementation I talked about this approach with Benjamin Otte (indeed he suggested overriding the draw signal, as I&apos;ve done), so I feel fairly confidant that it isn&apos;t a complete hack.

Using an event box and creating a different style context just to draw its background sounds like a hack to me.

&gt; Creating a widget subclass would also be many more lines of code than what I use here. The bits responsible for drawing the widget background must surely be less than 10 lines.

Yes, it&apos;s a bit more boilerplate for the widget implementation, but the code that uses the widget will be a lot more simple. I can do it in a follow up patch if you don&apos;t want to write GObject boilerplate. 

&gt; 
&gt; 2. Moving the dialog specific code to WebKit1
&gt; 
&gt; You make a good point about the class knowledge being convoluted. It&apos;s weird that the superclass needs to expose a method to create the dialog guts. I think that I&apos;ll wait to fix this when I create the patch for WebKit1 though. Here is my proposed class hierarchy:
&gt; 
&gt; GtkAuthenticationWidget (abstract base class)
&gt;    - GtkAuthenticationDialog - GtkDialog implementation for use with webkitsoupauthenticationdialog
&gt;    - EmbeddedGtkAuthenticationWidget - Embedded version
&gt;    - WebKit2EmbeddedGtkAuthenticationWidget - WebKit2 version of the embedded widget (that uses UIProcess classes for authentication).
&gt; 
&gt; In this approach GtkAuthenticationDialog would move to WebKit1, while 
&gt; EmbeddableGtkAuthenticationWidget would be in WebCore.

Why keeping a base C++ class? what we want is a common widget that can be added to the dialog and the embedded dialog, which makes its use simpler, beause you just need to create the widget and add it to the container. 

&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKit2GtkAuthenticationDialog.cpp:85
&gt; &gt; &gt; +    webkitWebViewBaseAddAuthenticationDialog(WEBKIT_WEB_VIEW_BASE(m_webView), this);
&gt; &gt; &gt; +    GtkAuthenticationDialog::show();
&gt; &gt; 
&gt; &gt; It&apos;s a bit strange that the dialog adds itself to the view.
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitLoaderClient.cpp:121
&gt; &gt; &gt; +    (new WebKit2GtkAuthenticationDialog(WEBKIT_WEB_VIEW(clientInfo), toImpl(authenticationChallenge)))-&gt;show();
&gt; &gt; 
&gt; &gt; I think this should be handled by the WebView, here we call something like webkitWebViewAuthenticate (WEBKIT_WEB_VIEW(clientInfo), toImpl(authenticationChallenge));
&gt; &gt; 
&gt; &gt; The view then creates the auth widget and adds it to itself. In load-changed, we can check if there&apos;s an auth widget and destroy it when a new load starts, instead of connecting to load-changed from the auth widget. When we implement the auth api this will only be done if the user doesn&apos;t hander el authenticate signal.
&gt; 
&gt; Believe it or not I started with a design like this one. :) The WebView needs to track the destruction of the dialog to disconnect the signal handler. The issue is that the WebKitWebView does not have any notification when the dialog is destroyed and the use of a weak pointer was causing issues for me. I can try this again though.

You don&apos;t need to track the destruction, because you don&apos;t need to use a signal. The WebView keeps already a pointer to the dialog, so when a new load starts, you can check if there&apos;s a dialog active and destroy it before emitting the load-started signal. When the widget is destroyed it&apos;s automatically removed from the container, and you are already setting the pointer to NULL in webkitWebViewBaseContainerRemove.

&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:109
&gt; &gt; &gt; +    WebKit::WebKit2GtkAuthenticationDialog* authenticationDialog;
&gt; &gt; 
&gt; &gt; I think there&apos;s a using namespace WebKit.
&gt; 
&gt; Okay. I&apos;ll fix this.
&gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:355
&gt; &gt; &gt;  void webkitWebViewBaseChildMoveResize(WebKitWebViewBase* webView, GtkWidget* child, const IntRect&amp; childRect)
&gt; &gt; &gt;  {
&gt; &gt; &gt; -    const IntRect&amp; geometry = webView-&gt;priv-&gt;children.get(child);
&gt; &gt; &gt; +    if (webkitWebViewChildIsInternalWidget(webView, child))
&gt; &gt; &gt; +        return;
&gt; &gt; &gt;  
&gt; &gt; &gt; +    const IntRect&amp; geometry = webView-&gt;priv-&gt;children.get(child);
&gt; &gt; 
&gt; &gt; This is only called when a plugin geometry changes, this is already supposed to be called only for non internal children.
&gt; 
&gt; I&apos;ll try removing it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779024</commentid>
    <comment_count>7</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-11-29 08:24:56 -0800</bug_when>
    <thetext>(In reply to comment #6)


&gt; &gt; This is important because I&apos;m considering writing another patch to extend the embedded dialog for WebKit1.
&gt; 
&gt; Not sure it&apos;s worth it, considering wk1 is somehow deprecated now.

It isn&apos;t unfortunately and doesn&apos;t look like it will be for some time. We just aren&apos;t working on it very much these days. As much as I&apos;d like to deprecate it and GTK+ 2.0, it looks like we should ship them both for at least one more cycle.

&gt; &gt; During the implementation I talked about this approach with Benjamin Otte (indeed he suggested overriding the draw signal, as I&apos;ve done), so I feel fairly confidant that it isn&apos;t a complete hack.
&gt; 
&gt; Using an event box and creating a different style context just to draw its background sounds like a hack to me.

I guess that&apos;s your opinion? If you consider it for a moment, we have to do the exact same thing for a custom widget (add the  background style class and implement a custom draw signal).  It would make more sense to me if we needed to implement many custom behaviors. I just need an EventBox with a background.

Carlos, I really appreciate your reviews, I truly do. They are some of the best I receive. In this case though, I feel like you are suggesting changes without expressing why they are important for both future readers of the code and for the functionality of the library. Is there a reason to add many more lines of code other than your personal aesthetic preferences?

&gt; &gt; You make a good point about the class knowledge being convoluted. It&apos;s weird that the superclass needs to expose a method to create the dialog guts. I think that I&apos;ll wait to fix this when I create the patch for WebKit1 though. Here is my proposed class hierarchy:
&gt; &gt; 
&gt; &gt; GtkAuthenticationWidget (abstract base class)
&gt; &gt;    - GtkAuthenticationDialog - GtkDialog implementation for use with webkitsoupauthenticationdialog
&gt; &gt;    - EmbeddedGtkAuthenticationWidget - Embedded version
&gt; &gt;    - WebKit2EmbeddedGtkAuthenticationWidget - WebKit2 version of the embedded widget (that uses UIProcess classes for authentication).
&gt; &gt; 
&gt; &gt; In this approach GtkAuthenticationDialog would move to WebKit1, while 
&gt; &gt; EmbeddableGtkAuthenticationWidget would be in WebCore.
&gt; 
&gt; Why keeping a base C++ class? what we want is a common widget that can be added to the dialog and the embedded dialog, which makes its use simpler, beause you just need to create the widget and add it to the container. 

The reason is that with the GtkDialog case it doesn&apos;t need to containing GtkEventBox and GtkFrame that the embedded dialog contains.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779031</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-11-29 08:38:27 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; 
&gt; 
&gt; &gt; &gt; This is important because I&apos;m considering writing another patch to extend the embedded dialog for WebKit1.
&gt; &gt; 
&gt; &gt; Not sure it&apos;s worth it, considering wk1 is somehow deprecated now.
&gt; 
&gt; It isn&apos;t unfortunately and doesn&apos;t look like it will be for some time. We just aren&apos;t working on it very much these days. As much as I&apos;d like to deprecate it and GTK+ 2.0, it looks like we should ship them both for at least one more cycle.

Agree.

&gt; &gt; &gt; During the implementation I talked about this approach with Benjamin Otte (indeed he suggested overriding the draw signal, as I&apos;ve done), so I feel fairly confidant that it isn&apos;t a complete hack.
&gt; &gt; 
&gt; &gt; Using an event box and creating a different style context just to draw its background sounds like a hack to me.
&gt; 
&gt; I guess that&apos;s your opinion?

Of course, I said it looks like a hack to *me*

&gt; If you consider it for a moment, we have to do the exact same thing for a custom widget (add the  background style class and implement a custom draw signal).

Having our own widget we could use the style context of the widget, instead of a different one, I think you would agree with me if the implementation didn&apos;t require writing GObjects, try to think of it as C++ classes, the natural thing would be to inherit and override the methods you want.

&gt;  It would make more sense to me if we needed to implement many custom behaviors. I just need an EventBox with a background.

&gt; Carlos, I really appreciate your reviews, I truly do. They are some of the best I receive. In this case though, I feel like you are suggesting changes without expressing why they are important for both future readers of the code and for the functionality of the library.

Using widget looks very natural to me in this case, and it simplifies the code, even if it requires to write some GObject boilerplate, the code that uses the widgets is simpler and easier to maintain.

&gt; Is there a reason to add many more lines of code other than your personal aesthetic preferences?

No, I&apos;ve commented based on my personal preferences, that&apos;s I haven&apos;t set r-, I never reject good patches that work just because I don&apos;t like them. You are free to simply ignore my suggestions. 

&gt; &gt; &gt; You make a good point about the class knowledge being convoluted. It&apos;s weird that the superclass needs to expose a method to create the dialog guts. I think that I&apos;ll wait to fix this when I create the patch for WebKit1 though. Here is my proposed class hierarchy:
&gt; &gt; &gt; 
&gt; &gt; &gt; GtkAuthenticationWidget (abstract base class)
&gt; &gt; &gt;    - GtkAuthenticationDialog - GtkDialog implementation for use with webkitsoupauthenticationdialog
&gt; &gt; &gt;    - EmbeddedGtkAuthenticationWidget - Embedded version
&gt; &gt; &gt;    - WebKit2EmbeddedGtkAuthenticationWidget - WebKit2 version of the embedded widget (that uses UIProcess classes for authentication).
&gt; &gt; &gt; 
&gt; &gt; &gt; In this approach GtkAuthenticationDialog would move to WebKit1, while 
&gt; &gt; &gt; EmbeddableGtkAuthenticationWidget would be in WebCore.
&gt; &gt; 
&gt; &gt; Why keeping a base C++ class? what we want is a common widget that can be added to the dialog and the embedded dialog, which makes its use simpler, beause you just need to create the widget and add it to the container. 
&gt; 
&gt; The reason is that with the GtkDialog case it doesn&apos;t need to containing GtkEventBox and GtkFrame that the embedded dialog contains.

I&apos;m not sure I understand this sentence.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779038</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-11-29 08:46:35 -0800</bug_when>
    <thetext>I&apos;ve written a patch to split GtkAuthDialog, I&apos;ve just moved the code, so that you can add your improvements on top of it, let me know id that makes sense to you, see:

https://bugs.webkit.org/show_bug.cgi?id=103644</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779061</commentid>
    <comment_count>10</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-11-29 09:02:55 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; I&apos;ve written a patch to split GtkAuthDialog, I&apos;ve just moved the code, so that you can add your improvements on top of it, let me know id that makes sense to you, see:
&gt; 
&gt; https://bugs.webkit.org/show_bug.cgi?id=103644

Maybe you&apos;d be willing to rewrite your patch on top of mine? I&apos;d really like to land this and keep working on the other things I need to finish.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779102</commentid>
    <comment_count>11</comment_count>
      <attachid>176382</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-11-29 09:34:07 -0800</bug_when>
    <thetext>Comment on attachment 176382
Patch

Ok, let&apos;s land this for now, I don&apos;t want to give you more work and this works pretty well, and I&apos;ll try to find time to implement my suggestion afterwards. Please check the build before landing, because the EWS failed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779178</commentid>
    <comment_count>12</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-11-29 10:49:49 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 176382 [details])
&gt; Ok, let&apos;s land this for now, I don&apos;t want to give you more work and this works pretty well, and I&apos;ll try to find time to implement my suggestion afterwards. Please check the build before landing, because the EWS failed.

I appreciate your understanding here. Something that I can do is that if I do this embedding for WebKit1, when I design the class hierarchy, I can make it so that it&apos;s easy to swap out the C++ class for a GtkWidget.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779215</commentid>
    <comment_count>13</comment_count>
      <attachid>176766</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-11-29 11:21:11 -0800</bug_when>
    <thetext>Created attachment 176766
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779218</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-29 11:24:24 -0800</bug_when>
    <thetext>Attachment 176766 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKit2GtkAuthenticationDialog.h&quot;
Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp:197:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp:201:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp:202:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp:206:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp:209:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp:210:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 6 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779335</commentid>
    <comment_count>15</comment_count>
      <attachid>176766</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-29 12:37:41 -0800</bug_when>
    <thetext>Comment on attachment 176766
Patch for landing

Clearing flags on attachment: 176766

Committed r136152: &lt;http://trac.webkit.org/changeset/136152&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779336</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-29 12:37:46 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176382</attachid>
            <date>2012-11-27 18:37:50 -0800</date>
            <delta_ts>2012-11-29 11:21:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103277-20121127183526.patch</filename>
            <type>text/plain</type>
            <size>40939</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1OTY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjgwYTJlMjc1YzJjNmJj
ZGFkOGQ1YTRkNjc5MjIyMmFkYjJlYjZhOC4uNGEwMmQwNWEwNWQ1YjNhNWUxNWE5YWM4MjQzYzk2
YTYyNjhhNjkwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEyLTExLTI2ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBbV2Vi
S2l0Ml0gRW1iZWQgdGhlIEhUVFAgYXV0aGVudGljYXRpb24gZGlhbG9nIGludG8gdGhlIFdlYlZp
ZXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzI3
NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFj
dG9yIHRoZSBXZWJDb3JlIGF1dGhlbnRpY2F0aW9uIGRpYWxvZyBzbyB0aGF0IGl0IGNhbiBiZSBy
ZXVzZWQgZm9yIHRoZSBXZWJLaXQyCisgICAgICAgIGVtYmVkZGVkIGF1dGhlbnRpY2F0aW9uIGRp
YWxvZy4gVGhlIG1haW4gcHVycG9zZSBvZiB0aGlzIHJlZmFjdG9yIGlzIHNvIHRoYXQgdGhlCisg
ICAgICAgIGRpYWxvZyBkb2VzIG5vdCByZWx5IG9uIEd0a0RpYWxvZyB0byBhZGQgdGhlIGFjdGlv
biBidXR0b25zIHRvIHRoZSBkaWFsb2cgaXRzZWxmLgorICAgICAgICBUaGlzIGFsc28gc2ltcGxp
ZmllcyB0aGUgc3RydWN0dXJlIG9mIHRoZSBkaWFsb2csIHVzaW5nIHRoZSBHdGtUYWJsZSBvciBH
dGtHcmlkIHRvCisgICAgICAgIGNvbnRhaW4gbW9yZSBvZiB0aGUgd2lkZ2V0IGVsZW1lbnRzLCBn
cmVhdGx5IHNpbXBsaWZ5aW5nIHRoaXMgY29kZS4gV2UgYWxzbyBleHBvc2UKKyAgICAgICAgYSBu
ZXcgY29uc3RydWN0b3IgdGhhdCBkb2VzIG5vdCBjcmVhdGUgdGhlIHBhcmVudCBHdGtEaWFsb2cg
LS0gc28gdGhhdCBXZWJLaXQyCisgICAgICAgIGNhbiBlbWJlZCB0aGUgZGlhbG9nIGRpcmVjdGx5
IGludG8gdGhlIFdlYlZpZXcuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBUaGlzIHNob3VsZG4n
dCBjaGFuZ2UgYmVoYXZpb3IsIG9ubHkgc2xpZ2h0bHkgdGhlIGxvb2sgb2YgdGhlIGF1dGhlbnRp
Y2F0aW9uCisgICAgICAgIGRpYWxvZy4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9HdGtBdXRo
ZW50aWNhdGlvbkRpYWxvZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHdGtBdXRoZW50aWNhdGlv
bkRpYWxvZzo6R3RrQXV0aGVudGljYXRpb25EaWFsb2cpOiBBZGRlZCB0aGlzIG5ldyBjb25zdHJ1
Y3RvcgorICAgICAgICB3aGljaCBkb2VzIG5vdCBhZGQgdGhlIGRpYWxvZyBjb250ZW50cyB0byBh
IEd0a0RpYWxvZy4KKyAgICAgICAgKFdlYkNvcmU6OnBhY2tUd29Db2x1bW5MYXlvdXRJbkJveCk6
IEFkZGVkIHRoaXMgZ2VuZXJpYyBtZXRob2QgZm9yIGNyZWF0aW5nIGEgdHdvIGNvbHVtbgorICAg
ICAgICBsYXlvdXQgaW4gdGhlIHN0eWxlIHRoZSBkaWFsb2cgYm94IG5lZWRzIChmb3IgYm90aCBH
VEsrIDIueCBhbmQgR1RLKyAzLngpLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRGlhbG9nTGFi
ZWwpOiBBZGRlZCB0aGlzIGhlbHBlci4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURpYWxvZ0Vu
dHJ5KTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6
Y3JlYXRlQ29udGVudHNJbkNvbnRhaW5lcik6IEFkZGVkIHRoaXMgbWV0aG9kIHdoaWNoCisgICAg
ICAgIGNhbiBiZSB1c2VkIGJ5IHN1YmNsYXNzZXMgdG8gYWRkIHRoZSBndXRzIG9mIHRoZSBkaWFs
b2cgdG8gdGhlIHBhcmVudCBjb250YWluZXIuCisgICAgICAgIChXZWJDb3JlOjpHdGtBdXRoZW50
aWNhdGlvbkRpYWxvZzo6c2hvdyk6IEFkZGVkIHNvbWUgZm9jdXMvZGVmYXVsdCBoYW5kbGluZyBj
b2RlIHRoYXQKKyAgICAgICAgR3RrRGlhbG9nIHdhcyBjYWxsaW5nIGJlZm9yZS4KKyAgICAgICAg
KFdlYkNvcmU6Okd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpidXR0b25DbGlja2VkQ2FsbGJhY2sp
OiBBZGRlZCBhIGJ1dHRvbiBjbGlja2VkIGhhbmRsZXIuCisgICAgICAgIEJlZm9yZSBHdGtEaWFs
b2cgaGFuZGxlZCB0aGlzLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlv
bkRpYWxvZy5oOiBVcGRhdGVkIG1ldGhvZHMgdG8gcmVmbGVjdCBuZXcgZnVuY3Rpb25hbGl0eS4K
KyAgICAgICAgKFdlYkNvcmU6Okd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjp+R3RrQXV0aGVudGlj
YXRpb25EaWFsb2cpOiBJbmxpbmUgdGhlIGRlZmF1bHQgY29uc3RydWN0b3IuCisKIDIwMTItMTEt
MjcgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+CiAKICAgICAgICAg
U3VwcG9ydCBwcm9wZXIgPHBlcmNlbnQ+IC8gY2FsYygpIHJlc29sdXRpb24gZm9yIGdyaWQgaXRl
bXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwppbmRleCAxZWMyZGVhYzlkYWNlOWFkODk3YWU2NDNkM2MxN2Y2MGYwMzFjYzU4
Li41OGE2NzZmYjJiNTc1OTIzYTcwMjk1MzZmNzczNTU2Njk1OWIzYjFmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNjMgQEAKKzIwMTItMTEtMjYgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBp
Z2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFtXZWJLaXQyXSBFbWJlZCB0aGUgSFRUUCBhdXRo
ZW50aWNhdGlvbiBkaWFsb2cgaW50byB0aGUgV2ViVmlldworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzMjc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRW1iZWQgdGhlIFdlYktpdDIgSFRUUCBhdXRoZW50
aWNhdGlvbiBkaWFsb2cgaW50byB0aGUgV2ViVmlldy4gQWRkIHRoZSBkaWFsb2cgYXMgYSBjaGls
ZAorICAgICAgICBvZiB0aGUgV2ViS2l0V2ViVmlld0Jhc2UgY29udGFpbmVyIChsaWtlIHRoZSB3
ZWIgaW5zcGVjdG9yKS4KKworICAgICAgICBXZSBkbyBub3QgeWV0IHByb3Blcmx5IGhhbmRsZSBw
YWdlcyB0aGF0IHJlcXVpcmUgYXV0aGVudGljYXRpb24gZm9yIG1vcmUgdGhhbiBvbmUgcmVzb3Vy
Y2UuCisgICAgICAgIEFzIHRoYXQgaXMgYW4gdW5jb21tb24gc2l0dWF0aW9uLCBpdCB3aWxsIGJl
IGhhbmRsZWQgaW4gYW5vdGhlciBwYXRjaC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdDJHdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5jcHA6CisgICAgICAgIChXZWJLaXQ6OmRy
YXdTaWduYWwpOiBXZSBoYXZlIHRvIG92ZXJyaWRlIHRoZSBkcmF3IHNpZ25hbCBvZiB0aGUgZGlh
bG9nIHRvIGRyYXcKKyAgICAgICAgYSBHdGtXaW5kb3cgYmFja2dyb3VuZCBvbiB0aGUgd2lkZ2V0
LiBUaGlzIGlzIHJlcXVpcmVkIGJlY2F1c2UgdGhlIHdpZGdldCBkb2Vzbid0CisgICAgICAgIGhh
dmUgYSByZWFsIEd0a1dpbmRvdyB0byBkcmF3IGl0cyBiYWNrZ3JvdW5kLgorICAgICAgICAoV2Vi
S2l0Ojpsb2FkQ2hhbmdlZFNpZ25hbCk6IFdoZW4gYSBuZXcgbG9hZCBzdGFydHMgaW4gdGhlIFdl
YlZpZXcgZGVzdHJveSB0aGUgZGlhbG9nLiBUaGlzCisgICAgICAgIGlzIHNvIHRoYXQgdGhlIGRp
YWxvZyBkb2Vzbid0IHN0aWNrIGFyb3VuZCB3aGVuIHRoZSB1c2VyIGNob29zZXMgdG8gbmF2aWdh
dGUgYXdheSBmcm9tIHRoZQorICAgICAgICBwYWdlIHJlcXVpcmluZyBhdXRoZW50aWNhdGlvbi4K
KyAgICAgICAgKFdlYktpdDo6V2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpXZWJLaXQy
R3RrQXV0aGVudGljYXRpb25EaWFsb2cpOiBDcmVhdGUgYW4gZXZlbnRib3gKKyAgICAgICAgYW5k
IGZyYW1lIHRvIGhvbGQgdGhlIGRpYWxvZyBjb250ZW50cy4gQWxzbyBhcHBlbmQgdGhlICdiYWNr
Z3JvdW5kJyB3aWRnZXQgY2xhc3MgdG8gdGhlCisgICAgICAgIGV2ZW50IGJveCwgc28gdGhhdCBp
dCBjYW4gZHJhdyBhIEd0a1dpbmRvdyBiYWNrZ3JvdW5kIGluIHRoZSBkcmF3IHNpZ25hbCBoYW5k
bGVyLgorICAgICAgICAoV2ViS2l0OjpXZWJLaXQyR3RrQXV0aGVudGljYXRpb25EaWFsb2c6On5X
ZWJLaXQyR3RrQXV0aGVudGljYXRpb25EaWFsb2cpOiBEaXNjb25uZWN0IHRoZQorICAgICAgICBs
b2FkIHN0YXR1cyBjaGFuZ2VkIHNpZ25hbCBoYW5kbGVyLgorICAgICAgICAoV2ViS2l0OjpXZWJL
aXQyR3RrQXV0aGVudGljYXRpb25EaWFsb2c6OnNob3cpOiBXaGVuIGl0J3MgdGltZSB0byBzaG93
IHRoZSBkaWFsb2csIGFkZCBpdCB0bworICAgICAgICBXZWJLaXRXZWJWaWV3QmFzZS4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXQyR3RrQXV0aGVudGljYXRpb25EaWFsb2cuaDog
QWRkIHNvbWUgbmV3IG1ldGhvZHMgZm9yIGhhbmRsaW5nIHRoZQorICAgICAgICBlbWJlZGRlZCBk
aWFsb2cuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TG9hZGVyQ2xpZW50LmNw
cDoKKyAgICAgICAgKGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUluRnJhbWUpOiBD
b2xsYXBzZSB0aGUgY3JlYXRpb24gb2YgdGhlIGRpYWxvZyBpbnRvIG9uZSBsaW5lLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcDoKKyAgICAgICAgKF9X
ZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUpOiBBZGQgdGhlIGRpYWxvZyBhcyBhIHByb3BlcnR5IG9m
IHRoZSBwcml2YXRlIHN0cnVjdHVyZS4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdDaGlsZElzSW50
ZXJuYWxXaWRnZXQpOiBBZGRlZCB0aGlzIGhlbHBlciB1c2VkIGZvciBkZXRlcm1pbmluZyB3aGVu
IGEgY2hpbGQgd2lkZ2V0CisgICAgICAgIGlzICJpbnRlcm5hbCIgKGllIHRoZSB3ZWIgaW5zcGVj
dG9yIG9yIHRoZSBhdXRoZW50aWNhdGlvbiBkaWFsb2cpLgorICAgICAgICAod2Via2l0V2ViVmll
d0Jhc2VDb250YWluZXJBZGQpOiBPbmx5IGFkZCBub24taW50ZXJuYWwgd2lkZ2V0cyB0byB0aGUg
Y2hpbGRyZW4gbWFwLgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VBZGRBdXRoZW50aWNhdGlv
bkRpYWxvZyk6IEFkZGVkLgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VBZGRXZWJJbnNwZWN0
b3IpOiBBZGRlZCB0aGlzIG1vcmUtZm9vbHByb29mIG1ldGhvZCBvZiBhZGRpbmcgYSB3ZWIgaW5z
cGVjdG9yCisgICAgICAgIHRvIHRoZSBXZWJWaWV3LiBUaGlzIGFsc28gYWxpZ25zIGl0IHdpdGgg
dGhlIHdheSB0aGUgYXV0aGVudGljYXRpb24gZGlhbG9nIGlzIGFkZGVkLgorICAgICAgICAod2Vi
a2l0V2ViVmlld0Jhc2VDb250YWluZXJSZW1vdmUpOiBXaGVuIHJlbW92aW5nIHRoZSBhdXRoZW50
aWNhdGlvbiBkaWFsb2csIHplcm8gb3V0IHRoZQorICAgICAgICBmaWVsZCBpbiB0aGUgcHJpdmF0
ZSBzdHJ1Y3R1cmUuCisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUNvbnRhaW5lckZvcmFsbCk6
IEFkZCBzdXBwb3J0IGZvciB0aGUgYXV0aGVudGljYXRpb24gZGlhbG9nIGhlcmUgdG9vLgorICAg
ICAgICAod2Via2l0V2ViVmlld0Jhc2VDaGlsZE1vdmVSZXNpemUpOiBEb24ndCBwYXNzIG9uIG1v
dmVfcmVzaXplIGV2ZW50cyB0byBpbnRlcm5hbCBjaGlsZHJlbi4KKyAgICAgICAgKHdlYmtpdF93
ZWJfdmlld19iYXNlX2luaXQpOiBaZXJvIG91dCB0aGUgYXV0aGVudGljYXRpb24gZGlhbG9nIG1l
bWJlciBvbiBpbml0LgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VEcmF3KTogSWYgdGhlIGF1
dGhlbnRpY2F0aW9uIGRpYWxvZyBpcyBhY3RpdmUsIGRyYXcgYSBzaGFkb3cgb3ZlciB3ZWIgY29u
dGVudC4KKyAgICAgICAgKHJlc2l6ZVdlYktpdFdlYlZpZXdCYXNlRnJvbUFsbG9jYXRpb24pOiBN
YWtlIHRoZSBhdXRoZW50aWNhdGlvbiBkaWFsb2cgY2VudGVyZWQgaW4gdGhlIHZpZXcuCisgICAg
ICAgICh3ZWJraXRXZWJWaWV3QmFzZUtleVByZXNzRXZlbnQpOiBQYXNzIG9uIGtleSBldmVudHMg
dG8gdGhlIGF1dGhlbnRpY2F0aW9uIGRpYWxvZyBpZiBhY3RpdmUuCisgICAgICAgICh3ZWJraXRX
ZWJWaWV3QmFzZUJ1dHRvblByZXNzRXZlbnQpOiBJZiB0aGUgYXV0aGVudGljYXRpb24gZGlhbG9n
IGlzIGFjdGl2ZSBkb24ndCBwYXNzIGJ1dHRvbiBldmVudHMKKyAgICAgICAgdG8gd2ViIGNvbnRl
bnQuCisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUJ1dHRvblJlbGVhc2VFdmVudCk6ICBEaXR0
by4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlU2Nyb2xsRXZlbnQpOiBEaXR0by4KKyAgICAg
ICAgKHdlYmtpdFdlYlZpZXdCYXNlTW90aW9uTm90aWZ5RXZlbnQpOiBEaXR0by4KKyAgICAgICAg
KHdlYmtpdFdlYlZpZXdCYXNlRm9jdXMpOiBQYXNzIG9uIGZvY3VzIGV2ZW50cyB0byB0aGUgYXV0
aGVudGljYXRpb24gZGlhbG9nIHNvIHRoYXQgdGFiYmluZyBiZXR3ZWVuCisgICAgICAgIGVsZW1l
bnRzIGluIHRoZSBkaWFsb2cgd29ya3MgY29ycmVjdGx5LgorICAgICAgICAod2Via2l0X3dlYl92
aWV3X2Jhc2VfY2xhc3NfaW5pdCk6IEhvb2sgdXAgdGhlIGZvY3VzIGV2ZW50LgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oOiBBZGQgbmV3IG1l
dGhvZHMgZm9yIGFkZGluZyB0aGUgYXV0aGVudGljYXRpb24gZGlhbG9nCisgICAgICAgIGFuZCB0
aGUgd2ViIGluc3BlY3Rvci4KKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclBy
b3h5R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZUlu
c3BlY3RvcldpbmRvdyk6IFVzZSB0aGUgbmV3IG1ldGhvZCBmb3IgYWRkaW5nIHRoZSB3ZWIgaW5z
cGVjdG9yLgorCiAyMDEyLTExLTI3ICBIdWFuZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkx
MDAubmV0PgogCiAgICAgICAgIFJFR1JFU1NJT04ocjEzNTYyMCk6IEFTU0VSVChtX3N0YXRlLmRy
YXdzQ29udGVudCAmJiBtX3N0YXRlLmNvbnRlbnRzVmlzaWJsZSAmJiAhbV9zaXplLmlzRW1wdHko
KSkgaGl0cyBpbiBUZXh0dXJlTWFwcGVyTGF5ZXI6OnBhaW50U2VsZigpLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5jcHAK
aW5kZXggYWYxMjQyZmRhYTkxYWZmYTNmYTJmOGJmZGNhNTllZDk2YmI1ZThlNy4uOTkyYTViYzEz
N2VkOTczNTk4YTVlNWYxYzE3NGNlNGIxMTlhMWE5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuY3BwCkBAIC0yOCwz
NCArMjgsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0jaWZkZWYgR1RLX0FQSV9WRVJT
SU9OXzIKLXN0YXRpYyBHdGtXaWRnZXQqIGFkZEVudHJ5VG9UYWJsZShHdGtUYWJsZSogdGFibGUs
IGludCByb3csIGNvbnN0IGNoYXIqIGxhYmVsVGV4dCkKLSNlbHNlCi1zdGF0aWMgR3RrV2lkZ2V0
KiBhZGRFbnRyeVRvR3JpZChHdGtHcmlkKiBncmlkLCBpbnQgcm93LCBjb25zdCBjaGFyKiBsYWJl
bFRleHQpCi0jZW5kaWYKLXsKLSAgICBHdGtXaWRnZXQqIGxhYmVsID0gZ3RrX2xhYmVsX25ldyhs
YWJlbFRleHQpOwotICAgIGd0a19taXNjX3NldF9hbGlnbm1lbnQoR1RLX01JU0MobGFiZWwpLCAw
LjAsIDAuNSk7Ci0KLSAgICBHdGtXaWRnZXQqIGVudHJ5ID0gZ3RrX2VudHJ5X25ldygpOwotICAg
IGd0a19lbnRyeV9zZXRfYWN0aXZhdGVzX2RlZmF1bHQoR1RLX0VOVFJZKGVudHJ5KSwgVFJVRSk7
Ci0KLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIGd0a190YWJsZV9hdHRhY2godGFibGUs
IGxhYmVsLCAwLCAxLCByb3csIHJvdyArIDEsIEdUS19GSUxMLCBzdGF0aWNfY2FzdDxHdGtBdHRh
Y2hPcHRpb25zPihHVEtfRVhQQU5EIHwgR1RLX0ZJTEwpLCAwLCAwKTsKLSAgICBndGtfdGFibGVf
YXR0YWNoX2RlZmF1bHRzKHRhYmxlLCBlbnRyeSwgMSwgMiwgcm93LCByb3cgKyAxKTsKLSNlbHNl
Ci0gICAgZ3RrX2dyaWRfYXR0YWNoKGdyaWQsIGxhYmVsLCAwLCByb3csIDEsIDEpOwotICAgIGd0
a193aWRnZXRfc2V0X2hleHBhbmQobGFiZWwsIFRSVUUpOwotCi0gICAgZ3RrX2dyaWRfYXR0YWNo
KGdyaWQsIGVudHJ5LCAxLCByb3csIDEsIDEpOwotICAgIGd0a193aWRnZXRfc2V0X2hleHBhbmQo
ZW50cnksIFRSVUUpOwotICAgIGd0a193aWRnZXRfc2V0X3ZleHBhbmQoZW50cnksIFRSVUUpOwot
I2VuZGlmCi0KLSAgICByZXR1cm4gZW50cnk7Ci19CitzdGF0aWMgY29uc3QgaW50IGdMYXlvdXRD
b2x1bW5TcGFjaW5nID0gMTI7CitzdGF0aWMgY29uc3QgaW50IGdMYXlvdXRSb3dTcGFjaW5nID0g
NjsKK3N0YXRpYyBjb25zdCBpbnQgZ0J1dHRvblNwYWNpbmcgPSA1OwogCi1HdGtBdXRoZW50aWNh
dGlvbkRpYWxvZzo6fkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKCkKK0d0a0F1dGhlbnRpY2F0aW9u
RGlhbG9nOjpHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyhjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSYgY2hhbGxlbmdlKQorICAgIDogbV9kaWFsb2coMCkKKyAgICAsIG1fbG9naW5FbnRyeSgw
KQorICAgICwgbV9wYXNzd29yZEVudHJ5KDApCisgICAgLCBtX3JlbWVtYmVyQ2hlY2tCdXR0b24o
MCkKKyAgICAsIG1fY2hhbGxlbmdlKGNoYWxsZW5nZSkKIHsKIH0KIApAQCAtNjYsMTM1ICs0OCwx
ODMgQEAgR3RrQXV0aGVudGljYXRpb25EaWFsb2c6Okd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKEd0
a1dpbmRvdyogcGFyZW50V2luZG93LCBjb25zdAogICAgICwgbV9yZW1lbWJlckNoZWNrQnV0dG9u
KDApCiAgICAgLCBtX2NoYWxsZW5nZShjaGFsbGVuZ2UpCiB7Ci0gICAgR3RrRGlhbG9nKiBkaWFs
b2cgPSBHVEtfRElBTE9HKG1fZGlhbG9nKTsKLSAgICBndGtfZGlhbG9nX2FkZF9idXR0b25zKGRp
YWxvZywgR1RLX1NUT0NLX0NBTkNFTCwgR1RLX1JFU1BPTlNFX0NBTkNFTCwgR1RLX1NUT0NLX09L
LCBHVEtfUkVTUE9OU0VfT0ssIE5VTEwpOwotCi0gICAgLy8gU2V0IHRoZSBkaWFsb2cgdXAgd2l0
aCBISUcgcHJvcGVydGllcy4KLSAgICBndGtfY29udGFpbmVyX3NldF9ib3JkZXJfd2lkdGgoR1RL
X0NPTlRBSU5FUihkaWFsb2cpLCA1KTsKLSAgICBndGtfYm94X3NldF9zcGFjaW5nKEdUS19CT1go
Z3RrX2RpYWxvZ19nZXRfY29udGVudF9hcmVhKGRpYWxvZykpLCAyKTsgLyogMiAqIDUgKyAyID0g
MTIgKi8KLSAgICBndGtfY29udGFpbmVyX3NldF9ib3JkZXJfd2lkdGgoR1RLX0NPTlRBSU5FUihn
dGtfZGlhbG9nX2dldF9hY3Rpb25fYXJlYShkaWFsb2cpKSwgNSk7Ci0gICAgZ3RrX2JveF9zZXRf
c3BhY2luZyhHVEtfQk9YKGd0a19kaWFsb2dfZ2V0X2FjdGlvbl9hcmVhKGRpYWxvZykpLCA2KTsK
KyAgICBHdGtXaWRnZXQqIGNvbnRlbnRBcmVhID0gZ3RrX2RpYWxvZ19nZXRfY29udGVudF9hcmVh
KEdUS19ESUFMT0cobV9kaWFsb2cpKTsKKyAgICBndGtfY29udGFpbmVyX3NldF9ib3JkZXJfd2lk
dGgoR1RLX0NPTlRBSU5FUihHVEtfRElBTE9HKG1fZGlhbG9nKSksIDUpOworICAgIGd0a19ib3hf
c2V0X3NwYWNpbmcoR1RLX0JPWChjb250ZW50QXJlYSksIDIpOyAvKiAyICogNSArIDIgPSAxMiAq
LwogCiAgICAgR3RrV2luZG93KiB3aW5kb3cgPSBHVEtfV0lORE9XKG1fZGlhbG9nKTsKICAgICBn
dGtfd2luZG93X3NldF9yZXNpemFibGUod2luZG93LCBGQUxTRSk7CiAgICAgZ3RrX3dpbmRvd19z
ZXRfdGl0bGUod2luZG93LCAiIik7CiAgICAgZ3RrX3dpbmRvd19zZXRfaWNvbl9uYW1lKHdpbmRv
dywgR1RLX1NUT0NLX0RJQUxPR19BVVRIRU5USUNBVElPTik7CiAKLSAgICBndGtfZGlhbG9nX3Nl
dF9kZWZhdWx0X3Jlc3BvbnNlKGRpYWxvZywgR1RLX1JFU1BPTlNFX09LKTsKLQogICAgIGlmIChw
YXJlbnRXaW5kb3cpCiAgICAgICAgIGd0a193aW5kb3dfc2V0X3RyYW5zaWVudF9mb3Iod2luZG93
LCBwYXJlbnRXaW5kb3cpOwogCi0gICAgLy8gQnVpbGQgY29udGVudHMuCisgICAgY3JlYXRlQ29u
dGVudHNJbkNvbnRhaW5lcihjb250ZW50QXJlYSk7Cit9CisKICNpZmRlZiBHVEtfQVBJX1ZFUlNJ
T05fMgotICAgIEd0a1dpZGdldCogaEJveCA9IGd0a19oYm94X25ldyhGQUxTRSwgMTIpOwotI2Vs
c2UKLSAgICBHdGtXaWRnZXQqIGhCb3ggPSBndGtfYm94X25ldyhHVEtfT1JJRU5UQVRJT05fSE9S
SVpPTlRBTCwgMTIpOwotI2VuZGlmCi0gICAgZ3RrX2NvbnRhaW5lcl9zZXRfYm9yZGVyX3dpZHRo
KEdUS19DT05UQUlORVIoaEJveCksIDUpOwotICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9Y
KGd0a19kaWFsb2dfZ2V0X2NvbnRlbnRfYXJlYShkaWFsb2cpKSwgaEJveCwgVFJVRSwgVFJVRSwg
MCk7CitzdGF0aWMgdm9pZCBwYWNrVHdvQ29sdW1uTGF5b3V0SW5Cb3goR3RrV2lkZ2V0KiBib3gs
IC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3VtZW50TGlzdDsKKyAgICB2YV9zdGFydChhcmd1bWVu
dExpc3QsIGJveCk7CisKKyAgICBHdGtXaWRnZXQqIHRhYmxlID0gZ3RrX3RhYmxlX25ldygxLCAy
LCBGQUxTRSk7CisgICAgZ3RrX3RhYmxlX3NldF9jb2xfc3BhY2luZ3MoR1RLX1RBQkxFKHRhYmxl
KSwgZ0xheW91dENvbHVtblNwYWNpbmcpOworICAgIGd0a190YWJsZV9zZXRfcm93X3NwYWNpbmdz
KEdUS19UQUJMRSh0YWJsZSksIGdMYXlvdXRSb3dTcGFjaW5nKTsKKworICAgIEd0a1dpZGdldCog
Zmlyc3RDb2x1bW5XaWRnZXQgPSB2YV9hcmcoYXJndW1lbnRMaXN0LCBHdGtXaWRnZXQqKTsKKyAg
ICBpbnQgcm93TnVtYmVyID0gMDsKKyAgICB3aGlsZSAoZmlyc3RDb2x1bW5XaWRnZXQpIHsKKyAg
ICAgICAgaWYgKHJvd051bWJlcikKKyAgICAgICAgICAgIGd0a190YWJsZV9yZXNpemUoR1RLX1RB
QkxFKHRhYmxlKSwgcm93TnVtYmVyICsgMSwgMik7CisKKyAgICAgICAgR3RrV2lkZ2V0KiBzZWNv
bmRDb2x1bW5XaWRnZXQgPSB2YV9hcmcoYXJndW1lbnRMaXN0LCBHdGtXaWRnZXQqKTsKKyAgICAg
ICAgR3RrQXR0YWNoT3B0aW9ucyBhdHRhY2hPcHRpb25zID0gc3RhdGljX2Nhc3Q8R3RrQXR0YWNo
T3B0aW9ucz4oR1RLX0VYUEFORCB8IEdUS19GSUxMKTsKKyAgICAgICAgZ3RrX3RhYmxlX2F0dGFj
aChHVEtfVEFCTEUodGFibGUpLCBmaXJzdENvbHVtbldpZGdldCwKKyAgICAgICAgICAgIDAsIHNl
Y29uZENvbHVtbldpZGdldCA/IDEgOiAyLAorICAgICAgICAgICAgcm93TnVtYmVyLCByb3dOdW1i
ZXIgKyAxLAorICAgICAgICAgICAgYXR0YWNoT3B0aW9ucywgYXR0YWNoT3B0aW9ucywKKyAgICAg
ICAgICAgIDAsIDApOworCisgICAgICAgIGlmIChzZWNvbmRDb2x1bW5XaWRnZXQpCisgICAgICAg
ICAgICBndGtfdGFibGVfYXR0YWNoX2RlZmF1bHRzKEdUS19UQUJMRSh0YWJsZSksIHNlY29uZENv
bHVtbldpZGdldCwgMSwgMiwgcm93TnVtYmVyLCByb3dOdW1iZXIgKyAxKTsKKworICAgICAgICBm
aXJzdENvbHVtbldpZGdldCA9IHZhX2FyZyhhcmd1bWVudExpc3QsIEd0a1dpZGdldCopOworICAg
ICAgICByb3dOdW1iZXIrKzsKKyAgICB9CiAKLSAgICBHdGtXaWRnZXQqIGljb24gPSBndGtfaW1h
Z2VfbmV3X2Zyb21fc3RvY2soR1RLX1NUT0NLX0RJQUxPR19BVVRIRU5USUNBVElPTiwgR1RLX0lD
T05fU0laRV9ESUFMT0cpOwotICAgIGd0a19taXNjX3NldF9hbGlnbm1lbnQoR1RLX01JU0MoaWNv
biksIDAuNSwgMC4wKTsKLSAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChoQm94KSwgaWNv
biwgRkFMU0UsIEZBTFNFLCAwKTsKKyAgICB2YV9lbmQoYXJndW1lbnRMaXN0KTsKIAotI2lmZGVm
IEdUS19BUElfVkVSU0lPTl8yCi0gICAgR3RrV2lkZ2V0KiBtYWluVkJveCA9IGd0a192Ym94X25l
dyhGQUxTRSwgMTgpOworICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGJveCksIHRhYmxl
LCBGQUxTRSwgRkFMU0UsIDApOworfQogI2Vsc2UKLSAgICBHdGtXaWRnZXQqIG1haW5WQm94ID0g
Z3RrX2JveF9uZXcoR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMLCAxOCk7Ci0jZW5kaWYKLSAgICBn
dGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChoQm94KSwgbWFpblZCb3gsIFRSVUUsIFRSVUUsIDAp
Oworc3RhdGljIHZvaWQgcGFja1R3b0NvbHVtbkxheW91dEluQm94KEd0a1dpZGdldCogYm94LCAu
Li4pCit7CisgICAgdmFfbGlzdCBhcmd1bWVudExpc3Q7CisgICAgdmFfc3RhcnQoYXJndW1lbnRM
aXN0LCBib3gpOwogCi0gICAgR093blB0cjxjaGFyPiBkZXNjcmlwdGlvbihnX3N0cmR1cF9wcmlu
dGYoXygiQSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgYXJlIGJlaW5nIHJlcXVlc3RlZCBieSB0aGUg
c2l0ZSAlcyIpLAotICAgICAgICBtX2NoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKS5ob3N0KCku
dXRmOCgpLmRhdGEoKSkpOwotICAgIEd0a1dpZGdldCogZGVzY3JpcHRpb25MYWJlbCA9IGd0a19s
YWJlbF9uZXcoZGVzY3JpcHRpb24uZ2V0KCkpOwotICAgIGd0a19taXNjX3NldF9hbGlnbm1lbnQo
R1RLX01JU0MoZGVzY3JpcHRpb25MYWJlbCksIDAuMCwgMC41KTsKLSAgICBndGtfbGFiZWxfc2V0
X2xpbmVfd3JhcChHVEtfTEFCRUwoZGVzY3JpcHRpb25MYWJlbCksIFRSVUUpOwotICAgIGd0a19i
b3hfcGFja19zdGFydChHVEtfQk9YKG1haW5WQm94KSwgR1RLX1dJREdFVChkZXNjcmlwdGlvbkxh
YmVsKSwgRkFMU0UsIEZBTFNFLCAwKTsKKyAgICBHdGtXaWRnZXQqIGdyaWQgPSBndGtfZ3JpZF9u
ZXcoKTsKKyAgICBndGtfZ3JpZF9zZXRfY29sdW1uX3NwYWNpbmcoR1RLX0dSSUQoZ3JpZCksIGdM
YXlvdXRSb3dTcGFjaW5nKTsKKyAgICBndGtfZ3JpZF9zZXRfcm93X3NwYWNpbmcoR1RLX0dSSUQo
Z3JpZCksIGdMYXlvdXRSb3dTcGFjaW5nKTsKKyAgICBndGtfZ3JpZF9zZXRfY29sdW1uX2hvbW9n
ZW5lb3VzKEdUS19HUklEKGdyaWQpLCBUUlVFKTsKKworICAgIEd0a1dpZGdldCogZmlyc3RDb2x1
bW5XaWRnZXQgPSB2YV9hcmcoYXJndW1lbnRMaXN0LCBHdGtXaWRnZXQqKTsKKyAgICBpbnQgcm93
TnVtYmVyID0gMDsKKyAgICB3aGlsZSAoZmlyc3RDb2x1bW5XaWRnZXQpIHsKKyAgICAgICAgR3Rr
V2lkZ2V0KiBzZWNvbmRDb2x1bW5XaWRnZXQgPSB2YV9hcmcoYXJndW1lbnRMaXN0LCBHdGtXaWRn
ZXQqKTsKKyAgICAgICAgaW50IGZpcnN0V2lkZ2V0V2lkdGggPSBzZWNvbmRDb2x1bW5XaWRnZXQg
PyAxIDogMjsKKworICAgICAgICBndGtfZ3JpZF9hdHRhY2goR1RLX0dSSUQoZ3JpZCksIGZpcnN0
Q29sdW1uV2lkZ2V0LCAwLCByb3dOdW1iZXIsIGZpcnN0V2lkZ2V0V2lkdGgsIDEpOworICAgICAg
ICBndGtfd2lkZ2V0X3NldF9oZXhwYW5kKGZpcnN0Q29sdW1uV2lkZ2V0LCBUUlVFKTsKKyAgICAg
ICAgZ3RrX3dpZGdldF9zZXRfdmV4cGFuZChmaXJzdENvbHVtbldpZGdldCwgVFJVRSk7CisKKyAg
ICAgICAgaWYgKHNlY29uZENvbHVtbldpZGdldCkgeworICAgICAgICAgICAgZ3RrX2dyaWRfYXR0
YWNoKEdUS19HUklEKGdyaWQpLCBzZWNvbmRDb2x1bW5XaWRnZXQsIDEsIHJvd051bWJlciwgMSwg
MSk7CisgICAgICAgICAgICBndGtfd2lkZ2V0X3NldF9oZXhwYW5kKHNlY29uZENvbHVtbldpZGdl
dCwgVFJVRSk7CisgICAgICAgICAgICBndGtfd2lkZ2V0X3NldF92ZXhwYW5kKHNlY29uZENvbHVt
bldpZGdldCwgVFJVRSk7CisgICAgICAgIH0KKworICAgICAgICBmaXJzdENvbHVtbldpZGdldCA9
IHZhX2FyZyhhcmd1bWVudExpc3QsIEd0a1dpZGdldCopOworICAgICAgICByb3dOdW1iZXIrKzsK
KyAgICB9CiAKLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIEd0a1dpZGdldCogdkJveCA9
IGd0a192Ym94X25ldyhGQUxTRSwgNik7Ci0jZWxzZQotICAgIEd0a1dpZGdldCogdkJveCA9IGd0
a19ib3hfbmV3KEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCwgNik7CisgICAgdmFfZW5kKGFyZ3Vt
ZW50TGlzdCk7CisKKyAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChib3gpLCBncmlkLCBG
QUxTRSwgRkFMU0UsIDApOworfQogI2VuZGlmCi0gICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19C
T1gobWFpblZCb3gpLCB2Qm94LCBGQUxTRSwgRkFMU0UsIDApOwogCi0gICAgLy8gVGhlIHRhYmxl
IHRoYXQgaG9sZHMgdGhlIGVudHJpZXMuCi0gICAgR3RrV2lkZ2V0KiBlbnRyeUNvbnRhaW5lciA9
IGd0a19hbGlnbm1lbnRfbmV3KDAuMCwgMC4wLCAxLjAsIDEuMCk7Ci0gICAgZ3RrX2FsaWdubWVu
dF9zZXRfcGFkZGluZyhHVEtfQUxJR05NRU5UKGVudHJ5Q29udGFpbmVyKSwgMCwgMCwgMCwgMCk7
Ci0gICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godkJveCksIGVudHJ5Q29udGFpbmVyLCBG
QUxTRSwgRkFMU0UsIDApOworc3RhdGljIEd0a1dpZGdldCogY3JlYXRlRGlhbG9nTGFiZWwoY29u
c3QgY2hhciogbGFiZWxTdHJpbmcsIGludCBob3Jpem9udGFsUGFkZGluZyA9IDApCit7CisgICAg
R3RrV2lkZ2V0KiBsYWJlbCA9IGd0a19sYWJlbF9uZXcobGFiZWxTdHJpbmcpOworICAgIGd0a19t
aXNjX3NldF9hbGlnbm1lbnQoR1RLX01JU0MobGFiZWwpLCAwLCAwLjUpOworICAgIGlmIChob3Jp
em9udGFsUGFkZGluZykKKyAgICAgICAgZ3RrX21pc2Nfc2V0X3BhZGRpbmcoR1RLX01JU0MobGFi
ZWwpLCAwLCBob3Jpem9udGFsUGFkZGluZyk7CisgICAgcmV0dXJuIGxhYmVsOworfQogCi0gICAg
Ly8gQ2hlY2tpbmcgdGhhdCByZWFsbSBpcyBub3QgYW4gZW1wdHkgc3RyaW5nLgotICAgIFN0cmlu
ZyByZWFsbSA9IG1fY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpLnJlYWxtKCk7Ci0gICAgYm9v
bCBoYXNSZWFsbSA9ICFyZWFsbS5pc0VtcHR5KCk7CitzdGF0aWMgR3RrV2lkZ2V0KiBjcmVhdGVE
aWFsb2dFbnRyeShHdGtXaWRnZXQqKiBtZW1iZXIpCit7CisgICAgKm1lbWJlciA9IGd0a19lbnRy
eV9uZXcoKTsKKyAgICBndGtfZW50cnlfc2V0X2FjdGl2YXRlc19kZWZhdWx0KEdUS19FTlRSWSgq
bWVtYmVyKSwgVFJVRSk7CisgICAgcmV0dXJuICptZW1iZXI7Cit9CiAKK3ZvaWQgR3RrQXV0aGVu
dGljYXRpb25EaWFsb2c6OmNyZWF0ZUNvbnRlbnRzSW5Db250YWluZXIoR3RrV2lkZ2V0KiBjb250
YWluZXIpCit7CiAjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICBHdGtXaWRnZXQqIHRhYmxl
ID0gZ3RrX3RhYmxlX25ldyhoYXNSZWFsbSA/IDMgOiAyLCAyLCBGQUxTRSk7Ci0gICAgZ3RrX3Rh
YmxlX3NldF9jb2xfc3BhY2luZ3MoR1RLX1RBQkxFKHRhYmxlKSwgMTIpOwotICAgIGd0a190YWJs
ZV9zZXRfcm93X3NwYWNpbmdzKEdUS19UQUJMRSh0YWJsZSksIDYpOwotICAgIGd0a19jb250YWlu
ZXJfYWRkKEdUS19DT05UQUlORVIoZW50cnlDb250YWluZXIpLCB0YWJsZSk7CisgICAgR3RrV2lk
Z2V0KiBoQm94ID0gZ3RrX2hib3hfbmV3KEZBTFNFLCBnTGF5b3V0Q29sdW1uU3BhY2luZyk7CiAj
ZWxzZQotICAgIEd0a1dpZGdldCogZ3JpZCA9IGd0a19ncmlkX25ldygpOwotICAgIGd0a19ncmlk
X3NldF9jb2x1bW5fc3BhY2luZyhHVEtfR1JJRChncmlkKSwgMTIpOwotICAgIGd0a19ncmlkX3Nl
dF9yb3dfc3BhY2luZyhHVEtfR1JJRChncmlkKSwgNik7Ci0gICAgZ3RrX2NvbnRhaW5lcl9hZGQo
R1RLX0NPTlRBSU5FUihlbnRyeUNvbnRhaW5lciksIGdyaWQpOworICAgIEd0a1dpZGdldCogaEJv
eCA9IGd0a19ib3hfbmV3KEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMLCBnTGF5b3V0Q29sdW1u
U3BhY2luZyk7CiAjZW5kaWYKKyAgICBndGtfY29udGFpbmVyX3NldF9ib3JkZXJfd2lkdGgoR1RL
X0NPTlRBSU5FUihoQm94KSwgZ0J1dHRvblNwYWNpbmcpOworICAgIGd0a19jb250YWluZXJfYWRk
KEdUS19DT05UQUlORVIoY29udGFpbmVyKSwgaEJveCk7CiAKLSAgICBpZiAoaGFzUmVhbG0pIHsK
LSAgICAgICAgR3RrV2lkZ2V0KiBzZXJ2ZXJNZXNzYWdlRGVzY3JpcHRpb25MYWJlbCA9IGd0a19s
YWJlbF9uZXcoXygiU2VydmVyIG1lc3NhZ2U6IikpOwotICAgICAgICBndGtfbWlzY19zZXRfYWxp
Z25tZW50KEdUS19NSVNDKHNlcnZlck1lc3NhZ2VEZXNjcmlwdGlvbkxhYmVsKSwgMC4wLCAwLjUp
OwotICAgICAgICBndGtfbGFiZWxfc2V0X2xpbmVfd3JhcChHVEtfTEFCRUwoc2VydmVyTWVzc2Fn
ZURlc2NyaXB0aW9uTGFiZWwpLCBUUlVFKTsKLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAg
ICAgICBndGtfdGFibGVfYXR0YWNoX2RlZmF1bHRzKEdUS19UQUJMRSh0YWJsZSksIHNlcnZlck1l
c3NhZ2VEZXNjcmlwdGlvbkxhYmVsLCAwLCAxLCAwLCAxKTsKLSNlbHNlCi0gICAgICAgIGd0a19n
cmlkX2F0dGFjaChHVEtfR1JJRChncmlkKSwgc2VydmVyTWVzc2FnZURlc2NyaXB0aW9uTGFiZWws
IDAsIDAsIDEsIDEpOwotICAgICAgICBndGtfd2lkZ2V0X3NldF9oZXhwYW5kKHNlcnZlck1lc3Nh
Z2VEZXNjcmlwdGlvbkxhYmVsLCBUUlVFKTsKLSAgICAgICAgZ3RrX3dpZGdldF9zZXRfdmV4cGFu
ZChzZXJ2ZXJNZXNzYWdlRGVzY3JpcHRpb25MYWJlbCwgVFJVRSk7Ci0jZW5kaWYKLSAgICAgICAg
R3RrV2lkZ2V0KiBzZXJ2ZXJNZXNzYWdlTGFiZWwgPSBndGtfbGFiZWxfbmV3KHJlYWxtLnV0Zjgo
KS5kYXRhKCkpOwotICAgICAgICBndGtfbWlzY19zZXRfYWxpZ25tZW50KEdUS19NSVNDKHNlcnZl
ck1lc3NhZ2VMYWJlbCksIDAuMCwgMC41KTsKLSAgICAgICAgZ3RrX2xhYmVsX3NldF9saW5lX3dy
YXAoR1RLX0xBQkVMKHNlcnZlck1lc3NhZ2VMYWJlbCksIFRSVUUpOwotI2lmZGVmIEdUS19BUElf
VkVSU0lPTl8yCi0gICAgICAgIGd0a190YWJsZV9hdHRhY2hfZGVmYXVsdHMoR1RLX1RBQkxFKHRh
YmxlKSwgc2VydmVyTWVzc2FnZUxhYmVsLCAxLCAyLCAwLCAxKTsKLSNlbHNlCi0gICAgICAgIGd0
a19ncmlkX2F0dGFjaChHVEtfR1JJRChncmlkKSwgc2VydmVyTWVzc2FnZUxhYmVsLCAxLCAwLCAx
LCAxKTsKLSAgICAgICAgZ3RrX3dpZGdldF9zZXRfaGV4cGFuZChzZXJ2ZXJNZXNzYWdlTGFiZWws
IFRSVUUpOwotICAgICAgICBndGtfd2lkZ2V0X3NldF92ZXhwYW5kKHNlcnZlck1lc3NhZ2VMYWJl
bCwgVFJVRSk7Ci0jZW5kaWYKLSAgICB9CisgICAgR3RrV2lkZ2V0KiBpY29uID0gZ3RrX2ltYWdl
X25ld19mcm9tX3N0b2NrKEdUS19TVE9DS19ESUFMT0dfQVVUSEVOVElDQVRJT04sIEdUS19JQ09O
X1NJWkVfRElBTE9HKTsKKyAgICBndGtfbWlzY19zZXRfYWxpZ25tZW50KEdUS19NSVNDKGljb24p
LCAwLjUsIDApOworICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGhCb3gpLCBpY29uLCBG
QUxTRSwgRkFMU0UsIDApOwogCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICBtX2xvZ2lu
RW50cnkgPSBhZGRFbnRyeVRvVGFibGUoR1RLX1RBQkxFKHRhYmxlKSwgaGFzUmVhbG0gPyAxIDog
MCwgXygiVXNlcm5hbWU6IikpOwotICAgIG1fcGFzc3dvcmRFbnRyeSA9IGFkZEVudHJ5VG9UYWJs
ZShHVEtfVEFCTEUodGFibGUpLCBoYXNSZWFsbSA/IDIgOiAxLCBfKCJQYXNzd29yZDoiKSk7Ci0j
ZWxzZQotICAgIG1fbG9naW5FbnRyeSA9IGFkZEVudHJ5VG9HcmlkKEdUS19HUklEKGdyaWQpLCBo
YXNSZWFsbSA/IDEgOiAwLCBfKCJVc2VybmFtZToiKSk7Ci0gICAgbV9wYXNzd29yZEVudHJ5ID0g
YWRkRW50cnlUb0dyaWQoR1RLX0dSSUQoZ3JpZCksIGhhc1JlYWxtID8gMiA6IDEsIF8oIlBhc3N3
b3JkOiIpKTsKLSNlbmRpZgorICAgIEdPd25QdHI8Y2hhcj4gcHJvbXB0KGdfc3RyZHVwX3ByaW50
ZigKKyAgICAgICAgXygiVGhlIHNpdGUgJXM6JWkgcmVxdWVzdHMgYSB1c2VybmFtZSBhbmQgcGFz
c3dvcmQiKSwKKyAgICAgICAgbV9jaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCkuaG9zdCgpLnV0
ZjgoKS5kYXRhKCksCisgICAgICAgIG1fY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpLnBvcnQo
KSkpOworCisgICAgbV9yZW1lbWJlckNoZWNrQnV0dG9uID0gZ3RrX2NoZWNrX2J1dHRvbl9uZXdf
d2l0aF9tbmVtb25pYyhfKCJfUmVtZW1iZXIgcGFzc3dvcmQiKSk7CisgICAgZ3RrX2xhYmVsX3Nl
dF9saW5lX3dyYXAoR1RLX0xBQkVMKGd0a19iaW5fZ2V0X2NoaWxkKEdUS19CSU4obV9yZW1lbWJl
ckNoZWNrQnV0dG9uKSkpLCBUUlVFKTsKIAotICAgIGd0a19lbnRyeV9zZXRfdmlzaWJpbGl0eShH
VEtfRU5UUlkobV9wYXNzd29yZEVudHJ5KSwgRkFMU0UpOwogCisgICAgLy8gV2UgYXJlIGFkZGlu
ZyB0aGUgYnV0dG9uIGJveCBoZXJlIG1hbnVhbGx5IGluc3RlYWQgb2YgdXNpbmcgdGhlIHJlYWR5
LW1hZGUgR3RrRGlhbG9nIGJ1dHRvbnMuCisgICAgLy8gVGhpcyBpcyBzbyB0aGF0IHdlIGNhbiBz
aGFyZSB0aGUgY29kZSB3aXRoIGltcGxlbWVudGF0aW9ucyB0aGF0IGRvIG5vdCB1c2UgR3RrRGlh
bG9nLgogI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgR3RrV2lkZ2V0KiByZW1lbWJlckJv
eCA9IGd0a192Ym94X25ldyhGQUxTRSwgNik7CisgICAgR3RrV2lkZ2V0KiBidXR0b25Cb3ggPSBn
dGtfaGJ1dHRvbl9ib3hfbmV3KCk7CiAjZWxzZQotICAgIEd0a1dpZGdldCogcmVtZW1iZXJCb3gg
PSBndGtfYm94X25ldyhHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwsIDYpOworICAgIEd0a1dpZGdl
dCogYnV0dG9uQm94ID0gZ3RrX2J1dHRvbl9ib3hfbmV3KEdUS19PUklFTlRBVElPTl9IT1JJWk9O
VEFMKTsKICNlbmRpZgotICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZCb3gpLCByZW1l
bWJlckJveCwgRkFMU0UsIEZBTFNFLCAwKTsKKyAgICBndGtfYm94X3NldF9zcGFjaW5nKEdUS19C
T1goYnV0dG9uQm94KSwgZ0J1dHRvblNwYWNpbmcpOworICAgIGd0a19idXR0b25fYm94X3NldF9s
YXlvdXQoR1RLX0JVVFRPTl9CT1goYnV0dG9uQm94KSwgR1RLX0JVVFRPTkJPWF9FTkQpOwogCi0g
ICAgbV9yZW1lbWJlckNoZWNrQnV0dG9uID0gZ3RrX2NoZWNrX2J1dHRvbl9uZXdfd2l0aF9tbmVt
b25pYyhfKCJfUmVtZW1iZXIgcGFzc3dvcmQiKSk7Ci0gICAgZ3RrX2xhYmVsX3NldF9saW5lX3dy
YXAoR1RLX0xBQkVMKGd0a19iaW5fZ2V0X2NoaWxkKEdUS19CSU4obV9yZW1lbWJlckNoZWNrQnV0
dG9uKSkpLCBUUlVFKTsKLSAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChyZW1lbWJlckJv
eCksIG1fcmVtZW1iZXJDaGVja0J1dHRvbiwgRkFMU0UsIEZBTFNFLCAwKTsKLX0KKyAgICBtX29r
YXlCdXR0b24gPSBndGtfYnV0dG9uX25ld19mcm9tX3N0b2NrKEdUS19TVE9DS19PSyk7CisgICAg
bV9jYW5jZWxCdXR0b24gPSBndGtfYnV0dG9uX25ld19mcm9tX3N0b2NrKEdUS19TVE9DS19DQU5D
RUwpOworICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGJ1dHRvbkJveCksIG1fY2FuY2Vs
QnV0dG9uLCBGQUxTRSwgVFJVRSwgMCk7CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1go
YnV0dG9uQm94KSwgbV9va2F5QnV0dG9uLCBGQUxTRSwgVFJVRSwgMCk7CisgICAgZ19zaWduYWxf
Y29ubmVjdChtX29rYXlCdXR0b24sICJjbGlja2VkIiwgR19DQUxMQkFDSyhidXR0b25DbGlja2Vk
Q2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fY2FuY2VsQnV0dG9uLCAi
Y2xpY2tlZCIsIEdfQ0FMTEJBQ0soYnV0dG9uQ2xpY2tlZENhbGxiYWNrKSwgdGhpcyk7CiAKLXZv
aWQgR3RrQXV0aGVudGljYXRpb25EaWFsb2c6OnNob3coKQoteworICAgIFN0cmluZyByZWFsbSA9
IG1fY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpLnJlYWxtKCk7CisgICAgaWYgKCFyZWFsbS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgcGFja1R3b0NvbHVtbkxheW91dEluQm94KGhCb3gsCisgICAg
ICAgICAgICBjcmVhdGVEaWFsb2dMYWJlbChwcm9tcHQuZ2V0KCksIGdMYXlvdXRSb3dTcGFjaW5n
KSwgTlVMTCwKKyAgICAgICAgICAgIGNyZWF0ZURpYWxvZ0xhYmVsKF8oIlNlcnZlciBtZXNzYWdl
OiIpKSwgY3JlYXRlRGlhbG9nTGFiZWwocmVhbG0udXRmOCgpLmRhdGEoKSksCisgICAgICAgICAg
ICBjcmVhdGVEaWFsb2dMYWJlbChfKCJVc2VybmFtZToiKSksIGNyZWF0ZURpYWxvZ0VudHJ5KCZt
X2xvZ2luRW50cnkpLAorICAgICAgICAgICAgY3JlYXRlRGlhbG9nTGFiZWwoXygiUGFzc3dvcmQ6
IikpLCBjcmVhdGVEaWFsb2dFbnRyeSgmbV9wYXNzd29yZEVudHJ5KSwKKyAgICAgICAgICAgIG1f
cmVtZW1iZXJDaGVja0J1dHRvbiwgTlVMTCwKKyAgICAgICAgICAgIGJ1dHRvbkJveCwgTlVMTCwg
TlVMTCk7CisKKyAgICB9IGVsc2UgeworICAgICAgICBwYWNrVHdvQ29sdW1uTGF5b3V0SW5Cb3go
aEJveCwKKyAgICAgICAgICAgIGNyZWF0ZURpYWxvZ0xhYmVsKHByb21wdC5nZXQoKSwgZ0xheW91
dFJvd1NwYWNpbmcpLCBOVUxMLAorICAgICAgICAgICAgY3JlYXRlRGlhbG9nTGFiZWwoXygiVXNl
cm5hbWU6IikpLCBjcmVhdGVEaWFsb2dFbnRyeSgmbV9sb2dpbkVudHJ5KSwKKyAgICAgICAgICAg
IGNyZWF0ZURpYWxvZ0xhYmVsKF8oIlBhc3N3b3JkOiIpKSwgY3JlYXRlRGlhbG9nRW50cnkoJm1f
cGFzc3dvcmRFbnRyeSksCisgICAgICAgICAgICBtX3JlbWVtYmVyQ2hlY2tCdXR0b24sIE5VTEws
IE5VTEwsCisgICAgICAgICAgICBidXR0b25Cb3gsIE5VTEwsIE5VTEwpOworICAgIH0KKworICAg
IGd0a19lbnRyeV9zZXRfdmlzaWJpbGl0eShHVEtfRU5UUlkobV9wYXNzd29yZEVudHJ5KSwgRkFM
U0UpOwogICAgIGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWxGcm9tUGVyc2lzdGVudFN0b3Jh
Z2UgPSBtX2NoYWxsZW5nZS5wcm9wb3NlZENyZWRlbnRpYWwoKTsKICAgICBpZiAoIWNyZWRlbnRp
YWxGcm9tUGVyc2lzdGVudFN0b3JhZ2UuaXNFbXB0eSgpKSB7CiAgICAgICAgIGd0a19lbnRyeV9z
ZXRfdGV4dChHVEtfRU5UUlkobV9sb2dpbkVudHJ5KSwgY3JlZGVudGlhbEZyb21QZXJzaXN0ZW50
U3RvcmFnZS51c2VyKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIGd0a19lbnRyeV9zZXRfdGV4
dChHVEtfRU5UUlkobV9wYXNzd29yZEVudHJ5KSwgY3JlZGVudGlhbEZyb21QZXJzaXN0ZW50U3Rv
cmFnZS5wYXNzd29yZCgpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICBndGtfdG9nZ2xlX2J1dHRv
bl9zZXRfYWN0aXZlKEdUS19UT0dHTEVfQlVUVE9OKG1fcmVtZW1iZXJDaGVja0J1dHRvbiksIFRS
VUUpOwogICAgIH0KK30KKwordm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6c2hvdygpCit7
CisgICAgZ3RrX3dpZGdldF9zZXRfY2FuX2RlZmF1bHQobV9va2F5QnV0dG9uLCBUUlVFKTsKKyAg
ICBndGtfd2lkZ2V0X2dyYWJfZGVmYXVsdChtX29rYXlCdXR0b24pOworICAgIGd0a193aWRnZXRf
Z3JhYl9mb2N1cyhtX2xvZ2luRW50cnkpOwogCi0gICAgZ19zaWduYWxfY29ubmVjdChtX2RpYWxv
ZywgInJlc3BvbnNlIiwgR19DQUxMQkFDSyhhdXRoZW50aWNhdGlvbkRpYWxvZ1Jlc3BvbnNlQ2Fs
bGJhY2spLCB0aGlzKTsKICAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKG1fZGlhbG9nKTsKIH0KIApA
QCAtMjEyLDEwICsyNDIsMTAgQEAgdm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6YXV0aGVu
dGljYXRlKGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCiAgICAgICAgIG1fY2hhbGxlbmdl
LmF1dGhlbnRpY2F0aW9uQ2xpZW50KCktPnJlY2VpdmVkQ3JlZGVudGlhbChtX2NoYWxsZW5nZSwg
Y3JlZGVudGlhbCk7CiB9CiAKLXZvaWQgR3RrQXV0aGVudGljYXRpb25EaWFsb2c6OmF1dGhlbnRp
Y2F0aW9uRGlhbG9nUmVzcG9uc2VDYWxsYmFjayhHdGtXaWRnZXQqLCBnaW50IHJlc3BvbnNlSUQs
IEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKiBkaWFsb2cpCit2b2lkIEd0a0F1dGhlbnRpY2F0aW9u
RGlhbG9nOjpidXR0b25DbGlja2VkQ2FsbGJhY2soR3RrV2lkZ2V0KiBidXR0b24sIEd0a0F1dGhl
bnRpY2F0aW9uRGlhbG9nKiBkaWFsb2cpCiB7CiAgICAgQ3JlZGVudGlhbCBjcmVkZW50aWFsOwot
ICAgIGlmIChyZXNwb25zZUlEID09IEdUS19SRVNQT05TRV9PSykgeworICAgIGlmIChidXR0b24g
PT0gZGlhbG9nLT5tX29rYXlCdXR0b24pIHsKICAgICAgICAgY29uc3QgY2hhciAqdXNlcm5hbWUg
PSBndGtfZW50cnlfZ2V0X3RleHQoR1RLX0VOVFJZKGRpYWxvZy0+bV9sb2dpbkVudHJ5KSk7CiAg
ICAgICAgIGNvbnN0IGNoYXIgKnBhc3N3b3JkID0gZ3RrX2VudHJ5X2dldF90ZXh0KEdUS19FTlRS
WShkaWFsb2ctPm1fcGFzc3dvcmRFbnRyeSkpOwogICAgICAgICBDcmVkZW50aWFsUGVyc2lzdGVu
Y2UgcGVyc2lzdGVuY2UgPSBndGtfdG9nZ2xlX2J1dHRvbl9nZXRfYWN0aXZlKEdUS19UT0dHTEVf
QlVUVE9OKGRpYWxvZy0+bV9yZW1lbWJlckNoZWNrQnV0dG9uKSkgPwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuaAppbmRleCA3
ZTY0NzhmYmY5OTIyMGI4Y2FhNGU4N2ExMWFhNTJhMDAwZGQ0NDVmLi42OGM2N2EwZGNhOGVkYjRi
N2E2ZTcxMDY5ZWFmYzRhYjM5NTcwNmYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuaApAQCAtMzQsMjAgKzM0LDI0IEBA
IGNsYXNzIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKIAogcHVibGljOgorICAgIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKGNvbnN0IEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlJik7CiAgICAgR3RrQXV0aGVudGljYXRpb25EaWFsb2coR3RrV2lu
ZG93KiwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKLSAgICB2aXJ0dWFsIH5HdGtB
dXRoZW50aWNhdGlvbkRpYWxvZygpOwotICAgIHZvaWQgc2hvdygpOworICAgIHZpcnR1YWwgfkd0
a0F1dGhlbnRpY2F0aW9uRGlhbG9nKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHNob3coKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwogCiBwcm90ZWN0ZWQ6CisgICAgdm9pZCBjcmVhdGVD
b250ZW50c0luQ29udGFpbmVyKEd0a1dpZGdldCogY29udGFpbmVyKTsKICAgICB2aXJ0dWFsIHZv
aWQgYXV0aGVudGljYXRlKGNvbnN0IENyZWRlbnRpYWwmKTsKICAgICBHdGtXaWRnZXQqIG1fZGlh
bG9nOwogICAgIEd0a1dpZGdldCogbV9sb2dpbkVudHJ5OwogICAgIEd0a1dpZGdldCogbV9wYXNz
d29yZEVudHJ5OwogICAgIEd0a1dpZGdldCogbV9yZW1lbWJlckNoZWNrQnV0dG9uOworICAgIEd0
a1dpZGdldCogbV9va2F5QnV0dG9uOworICAgIEd0a1dpZGdldCogbV9jYW5jZWxCdXR0b247CiAK
IHByaXZhdGU6Ci0gICAgdm9pZCBkZXN0cm95KCk7Ci0gICAgc3RhdGljIHZvaWQgYXV0aGVudGlj
YXRpb25EaWFsb2dSZXNwb25zZUNhbGxiYWNrKEd0a1dpZGdldCosIGdpbnQgcmVzcG9uc2VJRCwg
R3RrQXV0aGVudGljYXRpb25EaWFsb2cqKTsKKyAgICBzdGF0aWMgdm9pZCBidXR0b25DbGlja2Vk
Q2FsbGJhY2soR3RrV2lkZ2V0KiwgR3RrQXV0aGVudGljYXRpb25EaWFsb2cqKTsKICAgICBBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSBtX2NoYWxsZW5nZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdDJHdGtBdXRoZW50aWNhdGlvbkRpYWxv
Zy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXQyR3RrQXV0aGVu
dGljYXRpb25EaWFsb2cuY3BwCmluZGV4IGVmMmRhMWM5OGIwYmViMWExMmU1ZGIzZGIwYjE3Zjhh
NzAzYzdlYzEuLjIxY2MxZTUwNzIzZDc4M2QxZDQxOTE0YjVmYTk5ZGVkODQyNzcwMzIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdDJHdGtBdXRoZW50
aWNhdGlvbkRpYWxvZy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcApAQCAtMjMsMTUgKzIzLDU0IEBACiAj
aW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5oIgogI2luY2x1ZGUgIkF1dGhl
bnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lci5oIgogI2luY2x1ZGUgIldlYkNyZWRlbnRpYWwuaCIK
KyNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRX
ZWJWaWV3UHJpdmF0ZS5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KIAogbmFtZXNwYWNlIFdlYktp
dCB7CiAKLVdlYktpdDJHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6V2ViS2l0Mkd0a0F1dGhlbnRp
Y2F0aW9uRGlhbG9nKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkqIGF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKQotICAgIDogR3RrQXV0aGVudGljYXRpb25EaWFsb2coMCwgYXV0aGVudGljYXRp
b25DaGFsbGVuZ2UtPmNvcmUoKSkKKy8vIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgR3RrRXZl
bnRCb3ggZG9lcyBub3QgZHJhdyBhIGJhY2tncm91bmQgYnkgZGVmYXVsdCwKKy8vIGJ1dCB3ZSB3
YW50IGl0IHRvIGhhdmUgYSBub3JtYWwgR3RrV2luZG93IGJhY2tncm91bmQuCitzdGF0aWMgZ2Jv
b2xlYW4gZHJhd1NpZ25hbChHdGtXaWRnZXQqIHdpZGdldCwgY2Fpcm9fdCogY3IsIEd0a1N0eWxl
Q29udGV4dCogc3R5bGVDb250ZXh0KQoreworICAgIGd0a19yZW5kZXJfYmFja2dyb3VuZChzdHls
ZUNvbnRleHQsIGNyLCAwLCAwLAorICAgICAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0ZWRfd2lk
dGgod2lkZ2V0KSwgZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGVkX2hlaWdodCh3aWRnZXQpKTsKKyAg
ICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRDaGFuZ2VkU2lnbmFsKFdlYktp
dFdlYlZpZXcqLCBXZWJLaXRMb2FkRXZlbnQgbG9hZEV2ZW50LCBXZWJLaXQyR3RrQXV0aGVudGlj
YXRpb25EaWFsb2cqIGRpYWxvZykKK3sKKyAgICAvLyBXaGVuIHN0YXJ0aW5nIGEgbmV3IG1haW4t
ZnJhbWUgbG9hZCB3ZSBzaG91bGQgY2FuY2VsIHRoZSBkaWFsb2cgY29tcGxldGVseS4KKyAgICBp
ZiAobG9hZEV2ZW50ID09IFdFQktJVF9MT0FEX1NUQVJURUQpCisgICAgICAgIGRpYWxvZy0+ZGVz
dHJveSgpOworfQorCitXZWJLaXQyR3RrQXV0aGVudGljYXRpb25EaWFsb2c6OldlYktpdDJHdGtB
dXRoZW50aWNhdGlvbkRpYWxvZyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZVByb3h5KiBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSkKKyAgICA6IEd0a0F1dGhl
bnRpY2F0aW9uRGlhbG9nKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLT5jb3JlKCkpCisgICAgLCBt
X3dlYlZpZXcod2ViVmlldykKICAgICAsIG1fYXV0aGVudGljYXRpb25DaGFsbGVuZ2UoYXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UpCisgICAgLCBtX3N0eWxlQ29udGV4dChhZG9wdEdSZWYoZ3RrX3N0
eWxlX2NvbnRleHRfbmV3KCkpKQogewotICAgIC8vIFdlIGFyZW4ndCBwYXNzaW5nIGEgdG9wbGV2
ZWwgdG8gdGhlIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nIGNvbnN0cnVjdG9yLAotICAgIC8vIGJl
Y2F1c2UgZXZlbnR1YWxseSB0aGlzIHdpZGdldCB3aWxsIGJlIGVtYmVkZGVkIGludG8gdGhlIFdl
YlZpZXcgaXRzZWxmLgorICAgIG1fZGlhbG9nID0gZ3RrX2V2ZW50X2JveF9uZXcoKTsKKworICAg
IEd0a1dpZGdldCogZnJhbWUgPSBndGtfZnJhbWVfbmV3KDApOworICAgIGd0a19mcmFtZV9zZXRf
c2hhZG93X3R5cGUoR1RLX0ZSQU1FKGZyYW1lKSwgR1RLX1NIQURPV19JTik7CisgICAgZ3RrX2Nv
bnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihtX2RpYWxvZyksIGZyYW1lKTsKKyAgICBjcmVhdGVD
b250ZW50c0luQ29udGFpbmVyKGZyYW1lKTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9j
bGFzcyhtX3N0eWxlQ29udGV4dC5nZXQoKSwgR1RLX1NUWUxFX0NMQVNTX0JBQ0tHUk9VTkQpOwor
ICAgIEd0a1dpZGdldFBhdGgqIHBhdGggPSBndGtfd2lkZ2V0X3BhdGhfbmV3KCk7CisgICAgZ3Rr
X3dpZGdldF9wYXRoX2FwcGVuZF90eXBlKHBhdGgsIEdUS19UWVBFX1dJTkRPVyk7CisgICAgZ3Rr
X3N0eWxlX2NvbnRleHRfc2V0X3BhdGgobV9zdHlsZUNvbnRleHQuZ2V0KCksIHBhdGgpOworICAg
IGd0a193aWRnZXRfcGF0aF9mcmVlKHBhdGgpOworCisgICAgZ19zaWduYWxfY29ubmVjdChtX2Rp
YWxvZywgImRyYXciLCBHX0NBTExCQUNLKGRyYXdTaWduYWwpLCBtX3N0eWxlQ29udGV4dC5nZXQo
KSk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJsb2FkLWNoYW5nZWQiLCBHX0NB
TExCQUNLKGxvYWRDaGFuZ2VkU2lnbmFsKSwgdGhpcyk7Cit9CisKK1dlYktpdDJHdGtBdXRoZW50
aWNhdGlvbkRpYWxvZzo6fldlYktpdDJHdGtBdXRoZW50aWNhdGlvbkRpYWxvZygpCit7CisgICAg
Z19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1fd2ViVmlldywgcmVpbnRlcnBy
ZXRfY2FzdDxncG9pbnRlcj4obG9hZENoYW5nZWRTaWduYWwpLCB0aGlzKTsKIH0KIAogdm9pZCBX
ZWJLaXQyR3RrQXV0aGVudGljYXRpb25EaWFsb2c6OmF1dGhlbnRpY2F0ZShjb25zdCBXZWJDb3Jl
OjpDcmVkZW50aWFsJiBjcmVkZW50aWFsKQpAQCAtNDAsNCArNzksMTAgQEAgdm9pZCBXZWJLaXQy
R3RrQXV0aGVudGljYXRpb25EaWFsb2c6OmF1dGhlbnRpY2F0ZShjb25zdCBXZWJDb3JlOjpDcmVk
ZW50aWFsJiBjcmUKICAgICBtX2F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLT5saXN0ZW5lcigpLT51
c2VDcmVkZW50aWFsKHdlYkNyZWRlbnRpYWwuZ2V0KCkpOwogfQogCit2b2lkIFdlYktpdDJHdGtB
dXRoZW50aWNhdGlvbkRpYWxvZzo6c2hvdygpCit7CisgICAgd2Via2l0V2ViVmlld0Jhc2VBZGRB
dXRoZW50aWNhdGlvbkRpYWxvZyhXRUJLSVRfV0VCX1ZJRVdfQkFTRShtX3dlYlZpZXcpLCB0aGlz
KTsKKyAgICBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6c2hvdygpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdDJHdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmgKaW5kZXggNjBjNWUw
NTg4NGVmM2VmMjM2NTM3MjdkNTBlZmMwMDg3NmNjY2VlZC4uYmRjM2EwMzNiNTBhNjkwY2NlNjQy
MjUwMjJlMWNlNzU3ODgyNjNlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmgKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmgK
QEAgLTE3LDIyICsxNywzNCBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8K
IAorI2lmbmRlZiBXZWJLaXQyR3RrQXV0aGVudGljYXRpb25EaWFsb2dfaAorI2RlZmluZSBXZWJL
aXQyR3RrQXV0aGVudGljYXRpb25EaWFsb2dfaAorCiAjaW5jbHVkZSAiQXV0aGVudGljYXRpb25D
aGFsbGVuZ2VQcm94eS5oIgogI2luY2x1ZGUgIldLUmV0YWluUHRyLmgiCisjaW5jbHVkZSAiV2Vi
S2l0V2ViVmlld0Jhc2UuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NyZWRlbnRpYWwuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmg+CisjaW5jbHVkZSA8d3RmL2dv
YmplY3QvR1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViS2l0Mkd0
a0F1dGhlbnRpY2F0aW9uRGlhbG9nIDogcHVibGljIFdlYkNvcmU6Okd0a0F1dGhlbnRpY2F0aW9u
RGlhbG9nIHsKIHB1YmxpYzoKLSAgICBXZWJLaXQyR3RrQXV0aGVudGljYXRpb25EaWFsb2coQXV0
aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSopOworICAgIFdlYktpdDJHdGtBdXRoZW50aWNhdGlv
bkRpYWxvZyhXZWJLaXRXZWJWaWV3KiwgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSopOwor
ICAgIHZpcnR1YWwgfldlYktpdDJHdGtBdXRoZW50aWNhdGlvbkRpYWxvZygpOworICAgIEd0a1dp
ZGdldCogd2lkZ2V0KCkgeyByZXR1cm4gbV9kaWFsb2c7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2hv
dygpOwogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGF1dGhlbnRpY2F0ZShjb25zdCBX
ZWJDb3JlOjpDcmVkZW50aWFsJik7CiAKIHByaXZhdGU6CisgICAgV2ViS2l0V2ViVmlldyogbV93
ZWJWaWV3OwogICAgIFJlZlB0cjxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5PiBtX2F1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlOworICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBtX3N0eWxl
Q29udGV4dDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViS2l0
Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdExvYWRlckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRMb2FkZXJDbGllbnQuY3BwCmluZGV4IGJlMDZlZGRmNjU4
NDM5NzQ0ZWM2MDRlYzQ0NWNmMjI3OTkzYjJkNDEuLjIyMTE3ODJjN2QzMjE4YzZhNzA4ZGMyYmY2
NDM0YTExNTgwYjIzMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdExvYWRlckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0TG9hZGVyQ2xpZW50LmNwcApAQCAtMTE4LDggKzExOCw3IEBAIHN0YXRp
YyB2b2lkIGRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdChXS1BhZ2VSZWYgcGFnZSwgV0tCYWNrRm9y
d2FyZExpc3RJdGVtUmVmIGFkCiAKIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZUluRnJhbWUoV0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdLQXV0
aGVudGljYXRpb25DaGFsbGVuZ2VSZWYgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIGNvbnN0IHZv
aWQgKmNsaWVudEluZm8pCiB7Ci0gICAgV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKiBk
aWFsb2cgPSBuZXcgV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKHRvSW1wbChhdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSkpOwotICAgIGRpYWxvZy0+c2hvdygpOworICAgIChuZXcgV2ViS2l0
Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKFdFQktJVF9XRUJfVklFVyhjbGllbnRJbmZvKSwgdG9J
bXBsKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSkpLT5zaG93KCk7CiB9CiAKIHZvaWQgYXR0YWNo
TG9hZGVyQ2xpZW50VG9WaWV3KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKaW5k
ZXggZGU3NDFjMmUzMzNmYmM3NmU0NjM0OWFkNWYyMmRjMTQ5OTIyOWMzNS4uM2JmNjc0NDkzMDll
NzVkNjc4MzhmMTA5NDNlYzM0NmRlNWQyMWNiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcApAQCAtMTA2LDYgKzEw
Niw3IEBAIHN0cnVjdCBfV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlIHsKICAgICBJbnRTaXplIHJl
c2l6ZXJTaXplOwogICAgIEdSZWZQdHI8QXRrT2JqZWN0PiBhY2Nlc3NpYmxlOwogICAgIGJvb2wg
bmVlZHNSZXNpemVPbk1hcDsKKyAgICBXZWJLaXQ6OldlYktpdDJHdGtBdXRoZW50aWNhdGlvbkRp
YWxvZyogYXV0aGVudGljYXRpb25EaWFsb2c7CiAgICAgR3RrV2lkZ2V0KiBpbnNwZWN0b3JWaWV3
OwogICAgIHVuc2lnbmVkIGluc3BlY3RvclZpZXdIZWlnaHQ7CiAgICAgR093blB0cjxHZGtFdmVu
dD4gY29udGV4dE1lbnVFdmVudDsKQEAgLTI3MiwxNiArMjczLDIwIEBAIHN0YXRpYyB2b2lkIHdl
YmtpdFdlYlZpZXdCYXNlUmVhbGl6ZShHdGtXaWRnZXQqIHdpZGdldCkKICAgICAgICAgd2Via2l0
V2ViVmlld0Jhc2VTZXRUb3BsZXZlbE9uU2NyZWVuV2luZG93KHdlYlZpZXcsIEdUS19XSU5ET1co
dG9wbGV2ZWwpKTsKIH0KIAorc3RhdGljIGJvb2wgd2Via2l0V2ViVmlld0NoaWxkSXNJbnRlcm5h
bFdpZGdldChXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UsIEd0a1dpZGdldCogd2lkZ2V0
KQoreworICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5w
cml2OworICAgIHJldHVybiB3aWRnZXQgPT0gcHJpdi0+aW5zcGVjdG9yVmlldyB8fCAocHJpdi0+
YXV0aGVudGljYXRpb25EaWFsb2cgJiYgcHJpdi0+YXV0aGVudGljYXRpb25EaWFsb2ctPndpZGdl
dCgpID09IHdpZGdldCk7Cit9CisKIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlQ29udGFp
bmVyQWRkKEd0a0NvbnRhaW5lciogY29udGFpbmVyLCBHdGtXaWRnZXQqIHdpZGdldCkKIHsKICAg
ICBXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFV19CQVNFKGNvbnRh
aW5lcik7CiAgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJp
djsKIAotICAgIGlmIChXRUJLSVRfSVNfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpCi0gICAgICAgICYm
IFdlYkluc3BlY3RvclByb3h5Ojppc0luc3BlY3RvclBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0Uo
d2lkZ2V0KS0+cHJpdi0+cGFnZVByb3h5LmdldCgpKSkgewotICAgICAgICBBU1NFUlQoIXByaXYt
Pmluc3BlY3RvclZpZXcpOwotICAgICAgICBwcml2LT5pbnNwZWN0b3JWaWV3ID0gd2lkZ2V0Owot
ICAgIH0gZWxzZSB7CisgICAgLy8gSW50ZXJuYWwgd2lkZ2V0cyBsaWtlIHRoZSB3ZWIgaW5zcGVj
dG9yIGFuZCBhdXRoZW50aWNhdGlvbiBkaWFsb2cgaGF2ZSBjdXN0b20KKyAgICAvLyBhbGxvY2F0
aW9ucyBzbyB3ZSBkb24ndCBuZWVkIHRvIGFkZCB0aGVtIHRvIG91ciBsaXN0IG9mIGNoaWxkcmVu
LgorICAgIGlmICghd2Via2l0V2ViVmlld0NoaWxkSXNJbnRlcm5hbFdpZGdldCh3ZWJWaWV3LCB3
aWRnZXQpKSB7CiAgICAgICAgIEd0a0FsbG9jYXRpb24gY2hpbGRBbGxvY2F0aW9uOwogICAgICAg
ICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9uKHdpZGdldCwgJmNoaWxkQWxsb2NhdGlvbik7CiAg
ICAgICAgIHByaXYtPmNoaWxkcmVuLnNldCh3aWRnZXQsIGNoaWxkQWxsb2NhdGlvbik7CkBAIC0y
OTAsNiArMjk1LDE5IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlQ29udGFpbmVyQWRk
KEd0a0NvbnRhaW5lciogY29udGFpbmVyLCBHdGtXaWRnZXQqIHdpCiAgICAgZ3RrX3dpZGdldF9z
ZXRfcGFyZW50KHdpZGdldCwgR1RLX1dJREdFVChjb250YWluZXIpKTsKIH0KIAordm9pZCB3ZWJr
aXRXZWJWaWV3QmFzZUFkZEF1dGhlbnRpY2F0aW9uRGlhbG9nKFdlYktpdFdlYlZpZXdCYXNlKiB3
ZWJWaWV3QmFzZSwgV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKiBkaWFsb2cpCit7Cisg
ICAgd2ViVmlld0Jhc2UtPnByaXYtPmF1dGhlbnRpY2F0aW9uRGlhbG9nID0gZGlhbG9nOworICAg
IGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2ViVmlld0Jhc2UpLCBkaWFsb2ctPndp
ZGdldCgpKTsKKyAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXcoR1RLX1dJREdFVCh3ZWJWaWV3QmFz
ZSkpOyAvLyBXZSBuZWVkIHRvIGRyYXcgdGhlIHNoYWRvdyBvdmVyIHRoZSB3aWRnZXQuCit9CisK
K3ZvaWQgd2Via2l0V2ViVmlld0Jhc2VBZGRXZWJJbnNwZWN0b3IoV2ViS2l0V2ViVmlld0Jhc2Uq
IHdlYlZpZXdCYXNlLCBHdGtXaWRnZXQqIGluc3BlY3RvcikKK3sKKyAgICB3ZWJWaWV3QmFzZS0+
cHJpdi0+aW5zcGVjdG9yVmlldyA9IGluc3BlY3RvcjsKKyAgICBndGtfY29udGFpbmVyX2FkZChH
VEtfQ09OVEFJTkVSKHdlYlZpZXdCYXNlKSwgaW5zcGVjdG9yKTsKK30KKwogc3RhdGljIHZvaWQg
d2Via2l0V2ViVmlld0Jhc2VDb250YWluZXJSZW1vdmUoR3RrQ29udGFpbmVyKiBjb250YWluZXIs
IEd0a1dpZGdldCogd2lkZ2V0KQogewogICAgIFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3ID0g
V0VCS0lUX1dFQl9WSUVXX0JBU0UoY29udGFpbmVyKTsKQEAgLTMwMiw2ICszMjAsOCBAQCBzdGF0
aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUNvbnRhaW5lclJlbW92ZShHdGtDb250YWluZXIqIGNv
bnRhaW5lciwgR3RrV2lkZ2V0KgogICAgIGlmIChwcml2LT5pbnNwZWN0b3JWaWV3ID09IHdpZGdl
dCkgewogICAgICAgICBwcml2LT5pbnNwZWN0b3JWaWV3ID0gMDsKICAgICAgICAgcHJpdi0+aW5z
cGVjdG9yVmlld0hlaWdodCA9IDA7CisgICAgfSBlbHNlIGlmIChwcml2LT5hdXRoZW50aWNhdGlv
bkRpYWxvZyAmJiBwcml2LT5hdXRoZW50aWNhdGlvbkRpYWxvZy0+d2lkZ2V0KCkgPT0gd2lkZ2V0
KSB7CisgICAgICAgIHByaXYtPmF1dGhlbnRpY2F0aW9uRGlhbG9nID0gMDsKICAgICB9IGVsc2Ug
ewogICAgICAgICBBU1NFUlQocHJpdi0+Y2hpbGRyZW4uY29udGFpbnMod2lkZ2V0KSk7CiAgICAg
ICAgIHByaXYtPmNoaWxkcmVuLnJlbW92ZSh3aWRnZXQpOwpAQCAtMzIyLDEyICszNDIsMTcgQEAg
c3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VDb250YWluZXJGb3JhbGwoR3RrQ29udGFpbmVy
KiBjb250YWluZXIsIGdib29sZWFuIGkKIAogICAgIGlmIChpbmNsdWRlSW50ZXJuYWxzICYmIHBy
aXYtPmluc3BlY3RvclZpZXcpCiAgICAgICAgICgqY2FsbGJhY2spKHByaXYtPmluc3BlY3RvclZp
ZXcsIGNhbGxiYWNrRGF0YSk7CisKKyAgICBpZiAoaW5jbHVkZUludGVybmFscyAmJiBwcml2LT5h
dXRoZW50aWNhdGlvbkRpYWxvZykKKyAgICAgICAgKCpjYWxsYmFjaykocHJpdi0+YXV0aGVudGlj
YXRpb25EaWFsb2ctPndpZGdldCgpLCBjYWxsYmFja0RhdGEpOwogfQogCiB2b2lkIHdlYmtpdFdl
YlZpZXdCYXNlQ2hpbGRNb3ZlUmVzaXplKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3LCBHdGtX
aWRnZXQqIGNoaWxkLCBjb25zdCBJbnRSZWN0JiBjaGlsZFJlY3QpCiB7Ci0gICAgY29uc3QgSW50
UmVjdCYgZ2VvbWV0cnkgPSB3ZWJWaWV3LT5wcml2LT5jaGlsZHJlbi5nZXQoY2hpbGQpOworICAg
IGlmICh3ZWJraXRXZWJWaWV3Q2hpbGRJc0ludGVybmFsV2lkZ2V0KHdlYlZpZXcsIGNoaWxkKSkK
KyAgICAgICAgcmV0dXJuOwogCisgICAgY29uc3QgSW50UmVjdCYgZ2VvbWV0cnkgPSB3ZWJWaWV3
LT5wcml2LT5jaGlsZHJlbi5nZXQoY2hpbGQpOwogICAgIGlmIChnZW9tZXRyeSA9PSBjaGlsZFJl
Y3QpCiAgICAgICAgIHJldHVybjsKIApAQCAtMzU5LDYgKzM4NCw4IEBAIHN0YXRpYyB2b2lkIHdl
YmtpdFdlYlZpZXdCYXNlQ29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQogICAgIGlmIChwcml2
LT5yZWRpcmVjdGVkV2luZG93KQogICAgICAgICBwcml2LT5yZWRpcmVjdGVkV2luZG93LT5zZXRE
YW1hZ2VOb3RpZnlDYWxsYmFjayhyZWRpcmVjdGVkV2luZG93RGFtYWdlZENhbGxiYWNrLCBvYmpl
Y3QpOwogI2VuZGlmCisKKyAgICBwcml2LT5hdXRoZW50aWNhdGlvbkRpYWxvZyA9IDA7CiB9CiAK
ICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCkBAIC00MDAsNiArNDI3LDEyIEBAIHN0YXRpYyBn
Ym9vbGVhbiB3ZWJraXRXZWJWaWV3QmFzZURyYXcoR3RrV2lkZ2V0KiB3aWRnZXQsIGNhaXJvX3Qq
IGNyKQogICAgIFdlYkNvcmU6OlJlZ2lvbiB1bnBhaW50ZWRSZWdpb247IC8vIFRoaXMgaXMgc2lt
cGx5IHVudXNlZC4KICAgICBkcmF3aW5nQXJlYS0+cGFpbnQoY3IsIGNsaXBSZWN0LCB1bnBhaW50
ZWRSZWdpb24pOwogCisgICAgaWYgKHdlYlZpZXdCYXNlLT5wcml2LT5hdXRoZW50aWNhdGlvbkRp
YWxvZykgeworICAgICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9SX09W
RVIpOworICAgICAgICBjYWlyb19zZXRfc291cmNlX3JnYmEoY3IsIDAsIDAsIDAsIDAuNSk7Cisg
ICAgICAgIGNhaXJvX3BhaW50KGNyKTsKKyAgICB9CisKICAgICByZXR1cm4gRkFMU0U7CiB9CiAK
QEAgLTQzNCw2ICs0NjcsMjIgQEAgc3RhdGljIHZvaWQgcmVzaXplV2ViS2l0V2ViVmlld0Jhc2VG
cm9tQWxsb2NhdGlvbihXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UKICAgICAgICAgdmll
d1JlY3Quc2V0SGVpZ2h0KGFsbG9jYXRpb24tPmhlaWdodCAtIHByaXYtPmluc3BlY3RvclZpZXdI
ZWlnaHQpOwogICAgIH0KIAorICAgIC8vIFRoZSBhdXRoZW50aWNhdGlvbiBkaWFsb2cgaXMgY2Vu
dGVyZWQgaW4gdGhlIHZpZXcgcmVjdCwgd2hpY2ggbWVhbnMgdGhhdCBpdAorICAgIC8vIG5ldmVy
IG92ZXJsYXBzIHRoZSB3ZWIgaW5zcGVjdG9yLiBUaHVzLCB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSB0
aGUgYWxsb2NhdGlvbiBoZXJlCisgICAgLy8gYWZ0ZXIgY2FsY3VsYXRpbmcgdGhlIGluc3BlY3Rv
ciBhbGxvY2F0aW9uLgorICAgIGlmIChwcml2LT5hdXRoZW50aWNhdGlvbkRpYWxvZykgeworICAg
ICAgICBHdGtSZXF1aXNpdGlvbiBuYXR1cmFsU2l6ZTsKKyAgICAgICAgZ3RrX3dpZGdldF9nZXRf
cHJlZmVycmVkX3NpemUocHJpdi0+YXV0aGVudGljYXRpb25EaWFsb2ctPndpZGdldCgpLCAwLCAm
bmF0dXJhbFNpemUpOworCisgICAgICAgIEd0a0FsbG9jYXRpb24gY2hpbGRBbGxvY2F0aW9uID0g
eworICAgICAgICAgICAgKHZpZXdSZWN0LndpZHRoKCkgLSBuYXR1cmFsU2l6ZS53aWR0aCkgLyAy
LAorICAgICAgICAgICAgKHZpZXdSZWN0LmhlaWdodCgpIC0gbmF0dXJhbFNpemUuaGVpZ2h0KSAv
IDIsCisgICAgICAgICAgICBuYXR1cmFsU2l6ZS53aWR0aCwKKyAgICAgICAgICAgIG5hdHVyYWxT
aXplLmhlaWdodAorICAgICAgICB9OworICAgICAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUo
cHJpdi0+YXV0aGVudGljYXRpb25EaWFsb2ctPndpZGdldCgpLCAmY2hpbGRBbGxvY2F0aW9uKTsK
KyAgICB9CisKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCiAgICAgaWYgKHNpemVDaGFuZ2Vk
ICYmIHdlYlZpZXdCYXNlLT5wcml2LT5yZWRpcmVjdGVkV2luZG93KQogICAgICAgICB3ZWJWaWV3
QmFzZS0+cHJpdi0+cmVkaXJlY3RlZFdpbmRvdy0+cmVzaXplKHZpZXdSZWN0LnNpemUoKSk7CkBA
IC01MTUsNiArNTY0LDkgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlS2V5UHJl
c3NFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRLZXkqIGUKICAgICBXZWJLaXRXZWJW
aWV3QmFzZSogd2ViVmlld0Jhc2UgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpOwogICAg
IFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2OwogCisg
ICAgaWYgKHByaXYtPmF1dGhlbnRpY2F0aW9uRGlhbG9nKQorICAgICAgICByZXR1cm4gR1RLX1dJ
REdFVF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9wYXJlbnRfY2xhc3MpLT5rZXlfcHJlc3Nf
ZXZlbnQod2lkZ2V0LCBldmVudCk7CisKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAgICAg
aWYgKHByaXYtPmZ1bGxTY3JlZW5Nb2RlQWN0aXZlKSB7CiAgICAgICAgIHN3aXRjaCAoZXZlbnQt
PmtleXZhbCkgewpAQCAtNTYxLDYgKzYxMywxMCBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2Vi
Vmlld0Jhc2VCdXR0b25QcmVzc0V2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEJ1dAog
ewogICAgIFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSA9IFdFQktJVF9XRUJfVklFV19C
QVNFKHdpZGdldCk7CiAgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmll
d0Jhc2UtPnByaXY7CisKKyAgICBpZiAocHJpdi0+YXV0aGVudGljYXRpb25EaWFsb2cpCisgICAg
ICAgIHJldHVybiBUUlVFOworCiAgICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKHdpZGdldCk7CiAK
ICAgICBpZiAoIXByaXYtPmNsaWNrQ291bnRlci5zaG91bGRQcm9jZXNzQnV0dG9uRXZlbnQoYnV0
dG9uRXZlbnQpKQpAQCAtNTc5LDYgKzYzNSw5IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJW
aWV3QmFzZUJ1dHRvblJlbGVhc2VFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRCCiAg
ICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uo
d2lkZ2V0KTsKICAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJWaWV3QmFz
ZS0+cHJpdjsKIAorICAgIGlmIChwcml2LT5hdXRoZW50aWNhdGlvbkRpYWxvZykKKyAgICAgICAg
cmV0dXJuIFRSVUU7CisKICAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMod2lkZ2V0KTsKICAgICBw
cml2LT5wYWdlUHJveHktPmhhbmRsZU1vdXNlRXZlbnQoTmF0aXZlV2ViTW91c2VFdmVudChyZWlu
dGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpLCAwIC8qIGN1cnJlbnRDbGlja0NvdW50ICov
KSk7CiAKQEAgLTU5MCw2ICs2NDksOSBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jh
c2VTY3JvbGxFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRTY3JvbGwqCiAgICAgV2Vi
S2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0
KTsKICAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJp
djsKIAorICAgIGlmIChwcml2LT5hdXRoZW50aWNhdGlvbkRpYWxvZykKKyAgICAgICAgcmV0dXJu
IFRSVUU7CisKICAgICBwcml2LT5wYWdlUHJveHktPmhhbmRsZVdoZWVsRXZlbnQoTmF0aXZlV2Vi
V2hlZWxFdmVudChyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpKSk7CiAKICAgICBy
ZXR1cm4gVFJVRTsKQEAgLTYwMCw2ICs2NjIsOSBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2Vi
Vmlld0Jhc2VNb3Rpb25Ob3RpZnlFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRNbwog
ICAgIFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSA9IFdFQktJVF9XRUJfVklFV19CQVNF
KHdpZGdldCk7CiAgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlld0Jh
c2UtPnByaXY7CiAKKyAgICBpZiAocHJpdi0+YXV0aGVudGljYXRpb25EaWFsb2cpCisgICAgICAg
IHJldHVybiBUUlVFOworCiAgICAgcHJpdi0+cGFnZVByb3h5LT5oYW5kbGVNb3VzZUV2ZW50KE5h
dGl2ZVdlYk1vdXNlRXZlbnQocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSwgMCAv
KiBjdXJyZW50Q2xpY2tDb3VudCAqLykpOwogCiAgICAgcmV0dXJuIFRSVUU7CkBAIC03MzcsNyAr
ODAyLDIwIEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlUGFyZW50U2V0KEd0a1dpZGdl
dCogd2lkZ2V0LCBHdGtXaWRnZXQqIG9sZFBhcmVudCkKIHsKICAgICBpZiAoIWd0a193aWRnZXRf
Z2V0X3BhcmVudCh3aWRnZXQpKQogICAgICAgICB3ZWJraXRXZWJWaWV3QmFzZVNldFRvcGxldmVs
T25TY3JlZW5XaW5kb3coV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KSwgMCk7Cit9CisKK3N0
YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QmFzZUZvY3VzKEd0a1dpZGdldCogd2lkZ2V0LCBH
dGtEaXJlY3Rpb25UeXBlIGRpcmVjdGlvbikKK3sKKyAgICAvLyBJZiB0aGUgYXV0aGVudGljYXRp
b24gZGlhbG9nIGlzIGFjdGl2ZSwgd2UgbmVlZCB0byBmb3J3YXJkIGZvY3VzIGV2ZW50cyB0aGVy
ZS4gVGhpcworICAgIC8vIGVuc3VyZXMgdGhhdCB5b3UgY2FuIHRhYiBiZXR3ZWVuIGVsZW1lbnRz
IGluIHRoZSBib3guCisgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gV0VCS0lU
X1dFQl9WSUVXX0JBU0Uod2lkZ2V0KS0+cHJpdjsKKyAgICBpZiAocHJpdi0+YXV0aGVudGljYXRp
b25EaWFsb2cpIHsKKyAgICAgICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWU7CisgICAgICAgIGdfc2ln
bmFsX2VtaXRfYnlfbmFtZShwcml2LT5hdXRoZW50aWNhdGlvbkRpYWxvZy0+d2lkZ2V0KCksICJm
b2N1cyIsIGRpcmVjdGlvbiwgJnJldHVyblZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHJldHVyblZh
bHVlOworICAgIH0KIAorICAgIHJldHVybiBHVEtfV0lER0VUX0NMQVNTKHdlYmtpdF93ZWJfdmll
d19iYXNlX3BhcmVudF9jbGFzcyktPmZvY3VzKHdpZGdldCwgZGlyZWN0aW9uKTsKIH0KIAogc3Rh
dGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2Jhc2VfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3QmFz
ZUNsYXNzKiB3ZWJraXRXZWJWaWV3QmFzZUNsYXNzKQpAQCAtNzQ4LDYgKzgyNiw3IEBAIHN0YXRp
YyB2b2lkIHdlYmtpdF93ZWJfdmlld19iYXNlX2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0Jhc2VD
bGFzcyogd2Via2l0V2ViVmllCiAgICAgd2lkZ2V0Q2xhc3MtPnNpemVfYWxsb2NhdGUgPSB3ZWJr
aXRXZWJWaWV3QmFzZVNpemVBbGxvY2F0ZTsKICAgICB3aWRnZXRDbGFzcy0+bWFwID0gd2Via2l0
V2ViVmlld0Jhc2VNYXA7CiAgICAgd2lkZ2V0Q2xhc3MtPnVubWFwID0gd2Via2l0V2ViVmlld0Jh
c2VVbm1hcDsKKyAgICB3aWRnZXRDbGFzcy0+Zm9jdXMgPSB3ZWJraXRXZWJWaWV3QmFzZUZvY3Vz
OwogICAgIHdpZGdldENsYXNzLT5mb2N1c19pbl9ldmVudCA9IHdlYmtpdFdlYlZpZXdCYXNlRm9j
dXNJbkV2ZW50OwogICAgIHdpZGdldENsYXNzLT5mb2N1c19vdXRfZXZlbnQgPSB3ZWJraXRXZWJW
aWV3QmFzZUZvY3VzT3V0RXZlbnQ7CiAgICAgd2lkZ2V0Q2xhc3MtPmtleV9wcmVzc19ldmVudCA9
IHdlYmtpdFdlYlZpZXdCYXNlS2V5UHJlc3NFdmVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgKaW5k
ZXggZWYwNWYyMjg5MGViMzFkMzY1ZjkyOGM0ZjIwMTUzZmIwZTdmMDYyMy4uNmRlZDE0YjY3MGI3
NWU0NGEzMjZlMDFkNzQ3ZDc4MmFiMzY1MzJmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgKQEAg
LTI5LDYgKzI5LDcgQEAKICNkZWZpbmUgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlX2gKIAogI2lu
Y2x1ZGUgIldlYkNvbnRleHRNZW51UHJveHlHdGsuaCIKKyNpbmNsdWRlICJXZWJLaXQyR3RrQXV0
aGVudGljYXRpb25EaWFsb2cuaCIKICNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCiAjaW5jbHVk
ZSAiV2ViS2l0V2ViVmlld0Jhc2UuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKQEAgLTY0
LDQgKzY1LDcgQEAgdHlwZWRlZiB2b2lkICgqV2ViS2l0V2ViVmlld0Jhc2VEb3dubG9hZFJlcXVl
c3RIYW5kbGVyKSAoV2ViS2l0V2ViVmlld0Jhc2UqLCBXZWIKIHZvaWQgd2Via2l0V2ViVmlld0Jh
c2VTZXREb3dubG9hZFJlcXVlc3RIYW5kbGVyKFdlYktpdFdlYlZpZXdCYXNlKiwgV2ViS2l0V2Vi
Vmlld0Jhc2VEb3dubG9hZFJlcXVlc3RIYW5kbGVyKTsKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VI
YW5kbGVEb3dubG9hZFJlcXVlc3QoV2ViS2l0V2ViVmlld0Jhc2UqLCBXZWJLaXQ6OkRvd25sb2Fk
UHJveHkqKTsKIAordm9pZCB3ZWJraXRXZWJWaWV3QmFzZUFkZEF1dGhlbnRpY2F0aW9uRGlhbG9n
KFdlYktpdFdlYlZpZXdCYXNlKiwgV2ViS2l0OjpXZWJLaXQyR3RrQXV0aGVudGljYXRpb25EaWFs
b2cqKTsKK3ZvaWQgd2Via2l0V2ViVmlld0Jhc2VBZGRXZWJJbnNwZWN0b3IoV2ViS2l0V2ViVmll
d0Jhc2UqLCBHdGtXaWRnZXQqIGluc3BlY3Rvcik7CisKICNlbmRpZiAvLyBXZWJLaXRXZWJWaWV3
QmFzZVByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9X
ZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dl
Ykluc3BlY3RvclByb3h5R3RrLmNwcAppbmRleCBkNGU0Y2Q4YmI0YmFhYzE5ZjRjOGIxZmYzZjVh
Y2ZlYzlhYWM5YzkwLi4yYjQxMWZkZTA3YzdjMjMxOTk2ZTU5YjZkYjBjMjdhMjc1NjQ4YjcwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5
R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclBy
b3h5R3RrLmNwcApAQCAtOTMsNyArOTMsNyBAQCB2b2lkIFdlYkluc3BlY3RvclByb3h5OjpjcmVh
dGVJbnNwZWN0b3JXaW5kb3coKQogICAgIGd0a193aW5kb3dfc2V0X3RpdGxlKEdUS19XSU5ET1co
bV9pbnNwZWN0b3JXaW5kb3cpLCBfKCJXZWIgSW5zcGVjdG9yIikpOwogICAgIGd0a193aW5kb3df
c2V0X2RlZmF1bHRfc2l6ZShHVEtfV0lORE9XKG1faW5zcGVjdG9yV2luZG93KSwgaW5pdGlhbFdp
bmRvd1dpZHRoLCBpbml0aWFsV2luZG93SGVpZ2h0KTsKIAotICAgIGd0a19jb250YWluZXJfYWRk
KEdUS19DT05UQUlORVIobV9pbnNwZWN0b3JXaW5kb3cpLCBtX2luc3BlY3RvclZpZXcpOworICAg
IHdlYmtpdFdlYlZpZXdCYXNlQWRkV2ViSW5zcGVjdG9yKFdFQktJVF9XRUJfVklFV19CQVNFKG1f
aW5zcGVjdG9yV2luZG93KSwgbV9pbnNwZWN0b3JWaWV3KTsKICAgICBndGtfd2lkZ2V0X3Nob3co
bV9pbnNwZWN0b3JWaWV3KTsKIAogICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpF
Q1QobV9pbnNwZWN0b3JXaW5kb3cpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1faW5zcGVj
dG9yV2luZG93KSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176766</attachid>
            <date>2012-11-29 11:21:11 -0800</date>
            <delta_ts>2012-11-29 12:37:41 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-103277-20121129111844.patch</filename>
            <type>text/plain</type>
            <size>43600</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1OTY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjgwYTJlMjc1YzJjNmJj
ZGFkOGQ1YTRkNjc5MjIyMmFkYjJlYjZhOC4uODY5NmVhOGNmNmFhNDI4OGI0ODlmNzhlNWNmY2Ni
ZWVhYzY1YjFjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEyLTExLTI2ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBbV2Vi
S2l0Ml0gRW1iZWQgdGhlIEhUVFAgYXV0aGVudGljYXRpb24gZGlhbG9nIGludG8gdGhlIFdlYlZp
ZXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzI3
NworCisgICAgICAgIFJldmlld2VkIGJ5IENhcmxvcyBHYXJjaWEgQ2FtcG9zLgorCisgICAgICAg
IFJlZmFjdG9yIHRoZSBXZWJDb3JlIGF1dGhlbnRpY2F0aW9uIGRpYWxvZyBzbyB0aGF0IGl0IGNh
biBiZSByZXVzZWQgZm9yIHRoZSBXZWJLaXQyCisgICAgICAgIGVtYmVkZGVkIGF1dGhlbnRpY2F0
aW9uIGRpYWxvZy4gVGhlIG1haW4gcHVycG9zZSBvZiB0aGlzIHJlZmFjdG9yIGlzIHNvIHRoYXQg
dGhlCisgICAgICAgIGRpYWxvZyBkb2VzIG5vdCByZWx5IG9uIEd0a0RpYWxvZyB0byBhZGQgdGhl
IGFjdGlvbiBidXR0b25zIHRvIHRoZSBkaWFsb2cgaXRzZWxmLgorICAgICAgICBUaGlzIGFsc28g
c2ltcGxpZmllcyB0aGUgc3RydWN0dXJlIG9mIHRoZSBkaWFsb2csIHVzaW5nIHRoZSBHdGtUYWJs
ZSBvciBHdGtHcmlkIHRvCisgICAgICAgIGNvbnRhaW4gbW9yZSBvZiB0aGUgd2lkZ2V0IGVsZW1l
bnRzLCBncmVhdGx5IHNpbXBsaWZ5aW5nIHRoaXMgY29kZS4gV2UgYWxzbyBleHBvc2UKKyAgICAg
ICAgYSBuZXcgY29uc3RydWN0b3IgdGhhdCBkb2VzIG5vdCBjcmVhdGUgdGhlIHBhcmVudCBHdGtE
aWFsb2cgLS0gc28gdGhhdCBXZWJLaXQyCisgICAgICAgIGNhbiBlbWJlZCB0aGUgZGlhbG9nIGRp
cmVjdGx5IGludG8gdGhlIFdlYlZpZXcuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBUaGlzIHNo
b3VsZG4ndCBjaGFuZ2UgYmVoYXZpb3IsIG9ubHkgc2xpZ2h0bHkgdGhlIGxvb2sgb2YgdGhlIGF1
dGhlbnRpY2F0aW9uCisgICAgICAgIGRpYWxvZy4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9H
dGtBdXRoZW50aWNhdGlvbkRpYWxvZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHdGtBdXRoZW50
aWNhdGlvbkRpYWxvZzo6R3RrQXV0aGVudGljYXRpb25EaWFsb2cpOiBBZGRlZCB0aGlzIG5ldyBj
b25zdHJ1Y3RvcgorICAgICAgICB3aGljaCBkb2VzIG5vdCBhZGQgdGhlIGRpYWxvZyBjb250ZW50
cyB0byBhIEd0a0RpYWxvZy4KKyAgICAgICAgKFdlYkNvcmU6OnBhY2tUd29Db2x1bW5MYXlvdXRJ
bkJveCk6IEFkZGVkIHRoaXMgZ2VuZXJpYyBtZXRob2QgZm9yIGNyZWF0aW5nIGEgdHdvIGNvbHVt
bgorICAgICAgICBsYXlvdXQgaW4gdGhlIHN0eWxlIHRoZSBkaWFsb2cgYm94IG5lZWRzIChmb3Ig
Ym90aCBHVEsrIDIueCBhbmQgR1RLKyAzLngpLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRGlh
bG9nTGFiZWwpOiBBZGRlZCB0aGlzIGhlbHBlci4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURp
YWxvZ0VudHJ5KTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpHdGtBdXRoZW50aWNhdGlvbkRp
YWxvZzo6Y3JlYXRlQ29udGVudHNJbkNvbnRhaW5lcik6IEFkZGVkIHRoaXMgbWV0aG9kIHdoaWNo
CisgICAgICAgIGNhbiBiZSB1c2VkIGJ5IHN1YmNsYXNzZXMgdG8gYWRkIHRoZSBndXRzIG9mIHRo
ZSBkaWFsb2cgdG8gdGhlIHBhcmVudCBjb250YWluZXIuCisgICAgICAgIChXZWJDb3JlOjpHdGtB
dXRoZW50aWNhdGlvbkRpYWxvZzo6c2hvdyk6IEFkZGVkIHNvbWUgZm9jdXMvZGVmYXVsdCBoYW5k
bGluZyBjb2RlIHRoYXQKKyAgICAgICAgR3RrRGlhbG9nIHdhcyBjYWxsaW5nIGJlZm9yZS4KKyAg
ICAgICAgKFdlYkNvcmU6Okd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpidXR0b25DbGlja2VkQ2Fs
bGJhY2spOiBBZGRlZCBhIGJ1dHRvbiBjbGlja2VkIGhhbmRsZXIuCisgICAgICAgIEJlZm9yZSBH
dGtEaWFsb2cgaGFuZGxlZCB0aGlzLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9HdGtBdXRoZW50
aWNhdGlvbkRpYWxvZy5oOiBVcGRhdGVkIG1ldGhvZHMgdG8gcmVmbGVjdCBuZXcgZnVuY3Rpb25h
bGl0eS4KKyAgICAgICAgKFdlYkNvcmU6Okd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjp+R3RrQXV0
aGVudGljYXRpb25EaWFsb2cpOiBJbmxpbmUgdGhlIGRlZmF1bHQgY29uc3RydWN0b3IuCisKIDIw
MTItMTEtMjcgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgU3VwcG9ydCBwcm9wZXIgPHBlcmNlbnQ+IC8gY2FsYygpIHJlc29sdXRpb24gZm9yIGdy
aWQgaXRlbXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwppbmRleCAxZWMyZGVhYzlkYWNlOWFkODk3YWU2NDNkM2MxN2Y2MGYw
MzFjYzU4Li4zYzljOGNiZDQwYTBlZTZmYjdhYTJhYmNiNGU0YWNkMmU0NmVmOWY1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsNjMgQEAKKzIwMTItMTEtMjYgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2Jp
bnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFtXZWJLaXQyXSBFbWJlZCB0aGUgSFRU
UCBhdXRoZW50aWNhdGlvbiBkaWFsb2cgaW50byB0aGUgV2ViVmlldworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzMjc3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgQ2FybG9zIEdhcmNpYSBDYW1wb3MuCisKKyAgICAgICAgRW1iZWQgdGhlIFdlYktpdDIg
SFRUUCBhdXRoZW50aWNhdGlvbiBkaWFsb2cgaW50byB0aGUgV2ViVmlldy4gQWRkIHRoZSBkaWFs
b2cgYXMgYSBjaGlsZAorICAgICAgICBvZiB0aGUgV2ViS2l0V2ViVmlld0Jhc2UgY29udGFpbmVy
IChsaWtlIHRoZSB3ZWIgaW5zcGVjdG9yKS4KKworICAgICAgICBXZSBkbyBub3QgeWV0IHByb3Bl
cmx5IGhhbmRsZSBwYWdlcyB0aGF0IHJlcXVpcmUgYXV0aGVudGljYXRpb24gZm9yIG1vcmUgdGhh
biBvbmUgcmVzb3VyY2UuCisgICAgICAgIEFzIHRoYXQgaXMgYW4gdW5jb21tb24gc2l0dWF0aW9u
LCBpdCB3aWxsIGJlIGhhbmRsZWQgaW4gYW5vdGhlciBwYXRjaC4KKworICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdDJHdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5jcHA6CisgICAgICAg
IChXZWJLaXQ6OmRyYXdTaWduYWwpOiBXZSBoYXZlIHRvIG92ZXJyaWRlIHRoZSBkcmF3IHNpZ25h
bCBvZiB0aGUgZGlhbG9nIHRvIGRyYXcKKyAgICAgICAgYSBHdGtXaW5kb3cgYmFja2dyb3VuZCBv
biB0aGUgd2lkZ2V0LiBUaGlzIGlzIHJlcXVpcmVkIGJlY2F1c2UgdGhlIHdpZGdldCBkb2Vzbid0
CisgICAgICAgIGhhdmUgYSByZWFsIEd0a1dpbmRvdyB0byBkcmF3IGl0cyBiYWNrZ3JvdW5kLgor
ICAgICAgICAoV2ViS2l0Ojpsb2FkQ2hhbmdlZFNpZ25hbCk6IFdoZW4gYSBuZXcgbG9hZCBzdGFy
dHMgaW4gdGhlIFdlYlZpZXcgZGVzdHJveSB0aGUgZGlhbG9nLiBUaGlzCisgICAgICAgIGlzIHNv
IHRoYXQgdGhlIGRpYWxvZyBkb2Vzbid0IHN0aWNrIGFyb3VuZCB3aGVuIHRoZSB1c2VyIGNob29z
ZXMgdG8gbmF2aWdhdGUgYXdheSBmcm9tIHRoZQorICAgICAgICBwYWdlIHJlcXVpcmluZyBhdXRo
ZW50aWNhdGlvbi4KKyAgICAgICAgKFdlYktpdDo6V2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlh
bG9nOjpXZWJLaXQyR3RrQXV0aGVudGljYXRpb25EaWFsb2cpOiBDcmVhdGUgYW4gZXZlbnRib3gK
KyAgICAgICAgYW5kIGZyYW1lIHRvIGhvbGQgdGhlIGRpYWxvZyBjb250ZW50cy4gQWxzbyBhcHBl
bmQgdGhlICdiYWNrZ3JvdW5kJyB3aWRnZXQgY2xhc3MgdG8gdGhlCisgICAgICAgIGV2ZW50IGJv
eCwgc28gdGhhdCBpdCBjYW4gZHJhdyBhIEd0a1dpbmRvdyBiYWNrZ3JvdW5kIGluIHRoZSBkcmF3
IHNpZ25hbCBoYW5kbGVyLgorICAgICAgICAoV2ViS2l0OjpXZWJLaXQyR3RrQXV0aGVudGljYXRp
b25EaWFsb2c6On5XZWJLaXQyR3RrQXV0aGVudGljYXRpb25EaWFsb2cpOiBEaXNjb25uZWN0IHRo
ZQorICAgICAgICBsb2FkIHN0YXR1cyBjaGFuZ2VkIHNpZ25hbCBoYW5kbGVyLgorICAgICAgICAo
V2ViS2l0OjpXZWJLaXQyR3RrQXV0aGVudGljYXRpb25EaWFsb2c6OnNob3cpOiBXaGVuIGl0J3Mg
dGltZSB0byBzaG93IHRoZSBkaWFsb2csIGFkZCBpdCB0bworICAgICAgICBXZWJLaXRXZWJWaWV3
QmFzZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXQyR3RrQXV0aGVudGljYXRp
b25EaWFsb2cuaDogQWRkIHNvbWUgbmV3IG1ldGhvZHMgZm9yIGhhbmRsaW5nIHRoZQorICAgICAg
ICBlbWJlZGRlZCBkaWFsb2cuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TG9h
ZGVyQ2xpZW50LmNwcDoKKyAgICAgICAgKGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZUluRnJhbWUpOiBDb2xsYXBzZSB0aGUgY3JlYXRpb24gb2YgdGhlIGRpYWxvZyBpbnRvIG9uZSBs
aW5lLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcDoK
KyAgICAgICAgKF9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUpOiBBZGQgdGhlIGRpYWxvZyBhcyBh
IHByb3BlcnR5IG9mIHRoZSBwcml2YXRlIHN0cnVjdHVyZS4KKyAgICAgICAgKHdlYmtpdFdlYlZp
ZXdDaGlsZElzSW50ZXJuYWxXaWRnZXQpOiBBZGRlZCB0aGlzIGhlbHBlciB1c2VkIGZvciBkZXRl
cm1pbmluZyB3aGVuIGEgY2hpbGQgd2lkZ2V0CisgICAgICAgIGlzICJpbnRlcm5hbCIgKGllIHRo
ZSB3ZWIgaW5zcGVjdG9yIG9yIHRoZSBhdXRoZW50aWNhdGlvbiBkaWFsb2cpLgorICAgICAgICAo
d2Via2l0V2ViVmlld0Jhc2VDb250YWluZXJBZGQpOiBPbmx5IGFkZCBub24taW50ZXJuYWwgd2lk
Z2V0cyB0byB0aGUgY2hpbGRyZW4gbWFwLgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VBZGRB
dXRoZW50aWNhdGlvbkRpYWxvZyk6IEFkZGVkLgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VB
ZGRXZWJJbnNwZWN0b3IpOiBBZGRlZCB0aGlzIG1vcmUtZm9vbHByb29mIG1ldGhvZCBvZiBhZGRp
bmcgYSB3ZWIgaW5zcGVjdG9yCisgICAgICAgIHRvIHRoZSBXZWJWaWV3LiBUaGlzIGFsc28gYWxp
Z25zIGl0IHdpdGggdGhlIHdheSB0aGUgYXV0aGVudGljYXRpb24gZGlhbG9nIGlzIGFkZGVkLgor
ICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VDb250YWluZXJSZW1vdmUpOiBXaGVuIHJlbW92aW5n
IHRoZSBhdXRoZW50aWNhdGlvbiBkaWFsb2csIHplcm8gb3V0IHRoZQorICAgICAgICBmaWVsZCBp
biB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUuCisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUNvbnRh
aW5lckZvcmFsbCk6IEFkZCBzdXBwb3J0IGZvciB0aGUgYXV0aGVudGljYXRpb24gZGlhbG9nIGhl
cmUgdG9vLgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VDaGlsZE1vdmVSZXNpemUpOiBEb24n
dCBwYXNzIG9uIG1vdmVfcmVzaXplIGV2ZW50cyB0byBpbnRlcm5hbCBjaGlsZHJlbi4KKyAgICAg
ICAgKHdlYmtpdF93ZWJfdmlld19iYXNlX2luaXQpOiBaZXJvIG91dCB0aGUgYXV0aGVudGljYXRp
b24gZGlhbG9nIG1lbWJlciBvbiBpbml0LgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VEcmF3
KTogSWYgdGhlIGF1dGhlbnRpY2F0aW9uIGRpYWxvZyBpcyBhY3RpdmUsIGRyYXcgYSBzaGFkb3cg
b3ZlciB3ZWIgY29udGVudC4KKyAgICAgICAgKHJlc2l6ZVdlYktpdFdlYlZpZXdCYXNlRnJvbUFs
bG9jYXRpb24pOiBNYWtlIHRoZSBhdXRoZW50aWNhdGlvbiBkaWFsb2cgY2VudGVyZWQgaW4gdGhl
IHZpZXcuCisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUtleVByZXNzRXZlbnQpOiBQYXNzIG9u
IGtleSBldmVudHMgdG8gdGhlIGF1dGhlbnRpY2F0aW9uIGRpYWxvZyBpZiBhY3RpdmUuCisgICAg
ICAgICh3ZWJraXRXZWJWaWV3QmFzZUJ1dHRvblByZXNzRXZlbnQpOiBJZiB0aGUgYXV0aGVudGlj
YXRpb24gZGlhbG9nIGlzIGFjdGl2ZSBkb24ndCBwYXNzIGJ1dHRvbiBldmVudHMKKyAgICAgICAg
dG8gd2ViIGNvbnRlbnQuCisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUJ1dHRvblJlbGVhc2VF
dmVudCk6ICBEaXR0by4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlU2Nyb2xsRXZlbnQpOiBE
aXR0by4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlTW90aW9uTm90aWZ5RXZlbnQpOiBEaXR0
by4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlRm9jdXMpOiBQYXNzIG9uIGZvY3VzIGV2ZW50
cyB0byB0aGUgYXV0aGVudGljYXRpb24gZGlhbG9nIHNvIHRoYXQgdGFiYmluZyBiZXR3ZWVuCisg
ICAgICAgIGVsZW1lbnRzIGluIHRoZSBkaWFsb2cgd29ya3MgY29ycmVjdGx5LgorICAgICAgICAo
d2Via2l0X3dlYl92aWV3X2Jhc2VfY2xhc3NfaW5pdCk6IEhvb2sgdXAgdGhlIGZvY3VzIGV2ZW50
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5o
OiBBZGQgbmV3IG1ldGhvZHMgZm9yIGFkZGluZyB0aGUgYXV0aGVudGljYXRpb24gZGlhbG9nCisg
ICAgICAgIGFuZCB0aGUgd2ViIGluc3BlY3Rvci4KKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dl
Ykluc3BlY3RvclByb3h5R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJv
eHk6OmNyZWF0ZUluc3BlY3RvcldpbmRvdyk6IFVzZSB0aGUgbmV3IG1ldGhvZCBmb3IgYWRkaW5n
IHRoZSB3ZWIgaW5zcGVjdG9yLgorCiAyMDEyLTExLTI3ICBIdWFuZyBEb25nc3VuZyAgPGx1eHRl
bGxhQGNvbXBhbnkxMDAubmV0PgogCiAgICAgICAgIFJFR1JFU1NJT04ocjEzNTYyMCk6IEFTU0VS
VChtX3N0YXRlLmRyYXdzQ29udGVudCAmJiBtX3N0YXRlLmNvbnRlbnRzVmlzaWJsZSAmJiAhbV9z
aXplLmlzRW1wdHkoKSkgaGl0cyBpbiBUZXh0dXJlTWFwcGVyTGF5ZXI6OnBhaW50U2VsZigpLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9u
RGlhbG9nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlv
bkRpYWxvZy5jcHAKaW5kZXggYWYxMjQyZmRhYTkxYWZmYTNmYTJmOGJmZGNhNTllZDk2YmI1ZThl
Ny4uOTkyYTViYzEzN2VkOTczNTk4YTVlNWYxYzE3NGNlNGIxMTlhMWE5MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cu
Y3BwCkBAIC0yOCwzNCArMjgsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0jaWZkZWYg
R1RLX0FQSV9WRVJTSU9OXzIKLXN0YXRpYyBHdGtXaWRnZXQqIGFkZEVudHJ5VG9UYWJsZShHdGtU
YWJsZSogdGFibGUsIGludCByb3csIGNvbnN0IGNoYXIqIGxhYmVsVGV4dCkKLSNlbHNlCi1zdGF0
aWMgR3RrV2lkZ2V0KiBhZGRFbnRyeVRvR3JpZChHdGtHcmlkKiBncmlkLCBpbnQgcm93LCBjb25z
dCBjaGFyKiBsYWJlbFRleHQpCi0jZW5kaWYKLXsKLSAgICBHdGtXaWRnZXQqIGxhYmVsID0gZ3Rr
X2xhYmVsX25ldyhsYWJlbFRleHQpOwotICAgIGd0a19taXNjX3NldF9hbGlnbm1lbnQoR1RLX01J
U0MobGFiZWwpLCAwLjAsIDAuNSk7Ci0KLSAgICBHdGtXaWRnZXQqIGVudHJ5ID0gZ3RrX2VudHJ5
X25ldygpOwotICAgIGd0a19lbnRyeV9zZXRfYWN0aXZhdGVzX2RlZmF1bHQoR1RLX0VOVFJZKGVu
dHJ5KSwgVFJVRSk7Ci0KLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIGd0a190YWJsZV9h
dHRhY2godGFibGUsIGxhYmVsLCAwLCAxLCByb3csIHJvdyArIDEsIEdUS19GSUxMLCBzdGF0aWNf
Y2FzdDxHdGtBdHRhY2hPcHRpb25zPihHVEtfRVhQQU5EIHwgR1RLX0ZJTEwpLCAwLCAwKTsKLSAg
ICBndGtfdGFibGVfYXR0YWNoX2RlZmF1bHRzKHRhYmxlLCBlbnRyeSwgMSwgMiwgcm93LCByb3cg
KyAxKTsKLSNlbHNlCi0gICAgZ3RrX2dyaWRfYXR0YWNoKGdyaWQsIGxhYmVsLCAwLCByb3csIDEs
IDEpOwotICAgIGd0a193aWRnZXRfc2V0X2hleHBhbmQobGFiZWwsIFRSVUUpOwotCi0gICAgZ3Rr
X2dyaWRfYXR0YWNoKGdyaWQsIGVudHJ5LCAxLCByb3csIDEsIDEpOwotICAgIGd0a193aWRnZXRf
c2V0X2hleHBhbmQoZW50cnksIFRSVUUpOwotICAgIGd0a193aWRnZXRfc2V0X3ZleHBhbmQoZW50
cnksIFRSVUUpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gZW50cnk7Ci19CitzdGF0aWMgY29uc3Qg
aW50IGdMYXlvdXRDb2x1bW5TcGFjaW5nID0gMTI7CitzdGF0aWMgY29uc3QgaW50IGdMYXlvdXRS
b3dTcGFjaW5nID0gNjsKK3N0YXRpYyBjb25zdCBpbnQgZ0J1dHRvblNwYWNpbmcgPSA1OwogCi1H
dGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6fkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKCkKK0d0a0F1
dGhlbnRpY2F0aW9uRGlhbG9nOjpHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyhjb25zdCBBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlKQorICAgIDogbV9kaWFsb2coMCkKKyAgICAsIG1f
bG9naW5FbnRyeSgwKQorICAgICwgbV9wYXNzd29yZEVudHJ5KDApCisgICAgLCBtX3JlbWVtYmVy
Q2hlY2tCdXR0b24oMCkKKyAgICAsIG1fY2hhbGxlbmdlKGNoYWxsZW5nZSkKIHsKIH0KIApAQCAt
NjYsMTM1ICs0OCwxODMgQEAgR3RrQXV0aGVudGljYXRpb25EaWFsb2c6Okd0a0F1dGhlbnRpY2F0
aW9uRGlhbG9nKEd0a1dpbmRvdyogcGFyZW50V2luZG93LCBjb25zdAogICAgICwgbV9yZW1lbWJl
ckNoZWNrQnV0dG9uKDApCiAgICAgLCBtX2NoYWxsZW5nZShjaGFsbGVuZ2UpCiB7Ci0gICAgR3Rr
RGlhbG9nKiBkaWFsb2cgPSBHVEtfRElBTE9HKG1fZGlhbG9nKTsKLSAgICBndGtfZGlhbG9nX2Fk
ZF9idXR0b25zKGRpYWxvZywgR1RLX1NUT0NLX0NBTkNFTCwgR1RLX1JFU1BPTlNFX0NBTkNFTCwg
R1RLX1NUT0NLX09LLCBHVEtfUkVTUE9OU0VfT0ssIE5VTEwpOwotCi0gICAgLy8gU2V0IHRoZSBk
aWFsb2cgdXAgd2l0aCBISUcgcHJvcGVydGllcy4KLSAgICBndGtfY29udGFpbmVyX3NldF9ib3Jk
ZXJfd2lkdGgoR1RLX0NPTlRBSU5FUihkaWFsb2cpLCA1KTsKLSAgICBndGtfYm94X3NldF9zcGFj
aW5nKEdUS19CT1goZ3RrX2RpYWxvZ19nZXRfY29udGVudF9hcmVhKGRpYWxvZykpLCAyKTsgLyog
MiAqIDUgKyAyID0gMTIgKi8KLSAgICBndGtfY29udGFpbmVyX3NldF9ib3JkZXJfd2lkdGgoR1RL
X0NPTlRBSU5FUihndGtfZGlhbG9nX2dldF9hY3Rpb25fYXJlYShkaWFsb2cpKSwgNSk7Ci0gICAg
Z3RrX2JveF9zZXRfc3BhY2luZyhHVEtfQk9YKGd0a19kaWFsb2dfZ2V0X2FjdGlvbl9hcmVhKGRp
YWxvZykpLCA2KTsKKyAgICBHdGtXaWRnZXQqIGNvbnRlbnRBcmVhID0gZ3RrX2RpYWxvZ19nZXRf
Y29udGVudF9hcmVhKEdUS19ESUFMT0cobV9kaWFsb2cpKTsKKyAgICBndGtfY29udGFpbmVyX3Nl
dF9ib3JkZXJfd2lkdGgoR1RLX0NPTlRBSU5FUihHVEtfRElBTE9HKG1fZGlhbG9nKSksIDUpOwor
ICAgIGd0a19ib3hfc2V0X3NwYWNpbmcoR1RLX0JPWChjb250ZW50QXJlYSksIDIpOyAvKiAyICog
NSArIDIgPSAxMiAqLwogCiAgICAgR3RrV2luZG93KiB3aW5kb3cgPSBHVEtfV0lORE9XKG1fZGlh
bG9nKTsKICAgICBndGtfd2luZG93X3NldF9yZXNpemFibGUod2luZG93LCBGQUxTRSk7CiAgICAg
Z3RrX3dpbmRvd19zZXRfdGl0bGUod2luZG93LCAiIik7CiAgICAgZ3RrX3dpbmRvd19zZXRfaWNv
bl9uYW1lKHdpbmRvdywgR1RLX1NUT0NLX0RJQUxPR19BVVRIRU5USUNBVElPTik7CiAKLSAgICBn
dGtfZGlhbG9nX3NldF9kZWZhdWx0X3Jlc3BvbnNlKGRpYWxvZywgR1RLX1JFU1BPTlNFX09LKTsK
LQogICAgIGlmIChwYXJlbnRXaW5kb3cpCiAgICAgICAgIGd0a193aW5kb3dfc2V0X3RyYW5zaWVu
dF9mb3Iod2luZG93LCBwYXJlbnRXaW5kb3cpOwogCi0gICAgLy8gQnVpbGQgY29udGVudHMuCisg
ICAgY3JlYXRlQ29udGVudHNJbkNvbnRhaW5lcihjb250ZW50QXJlYSk7Cit9CisKICNpZmRlZiBH
VEtfQVBJX1ZFUlNJT05fMgotICAgIEd0a1dpZGdldCogaEJveCA9IGd0a19oYm94X25ldyhGQUxT
RSwgMTIpOwotI2Vsc2UKLSAgICBHdGtXaWRnZXQqIGhCb3ggPSBndGtfYm94X25ldyhHVEtfT1JJ
RU5UQVRJT05fSE9SSVpPTlRBTCwgMTIpOwotI2VuZGlmCi0gICAgZ3RrX2NvbnRhaW5lcl9zZXRf
Ym9yZGVyX3dpZHRoKEdUS19DT05UQUlORVIoaEJveCksIDUpOwotICAgIGd0a19ib3hfcGFja19z
dGFydChHVEtfQk9YKGd0a19kaWFsb2dfZ2V0X2NvbnRlbnRfYXJlYShkaWFsb2cpKSwgaEJveCwg
VFJVRSwgVFJVRSwgMCk7CitzdGF0aWMgdm9pZCBwYWNrVHdvQ29sdW1uTGF5b3V0SW5Cb3goR3Rr
V2lkZ2V0KiBib3gsIC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3VtZW50TGlzdDsKKyAgICB2YV9z
dGFydChhcmd1bWVudExpc3QsIGJveCk7CisKKyAgICBHdGtXaWRnZXQqIHRhYmxlID0gZ3RrX3Rh
YmxlX25ldygxLCAyLCBGQUxTRSk7CisgICAgZ3RrX3RhYmxlX3NldF9jb2xfc3BhY2luZ3MoR1RL
X1RBQkxFKHRhYmxlKSwgZ0xheW91dENvbHVtblNwYWNpbmcpOworICAgIGd0a190YWJsZV9zZXRf
cm93X3NwYWNpbmdzKEdUS19UQUJMRSh0YWJsZSksIGdMYXlvdXRSb3dTcGFjaW5nKTsKKworICAg
IEd0a1dpZGdldCogZmlyc3RDb2x1bW5XaWRnZXQgPSB2YV9hcmcoYXJndW1lbnRMaXN0LCBHdGtX
aWRnZXQqKTsKKyAgICBpbnQgcm93TnVtYmVyID0gMDsKKyAgICB3aGlsZSAoZmlyc3RDb2x1bW5X
aWRnZXQpIHsKKyAgICAgICAgaWYgKHJvd051bWJlcikKKyAgICAgICAgICAgIGd0a190YWJsZV9y
ZXNpemUoR1RLX1RBQkxFKHRhYmxlKSwgcm93TnVtYmVyICsgMSwgMik7CisKKyAgICAgICAgR3Rr
V2lkZ2V0KiBzZWNvbmRDb2x1bW5XaWRnZXQgPSB2YV9hcmcoYXJndW1lbnRMaXN0LCBHdGtXaWRn
ZXQqKTsKKyAgICAgICAgR3RrQXR0YWNoT3B0aW9ucyBhdHRhY2hPcHRpb25zID0gc3RhdGljX2Nh
c3Q8R3RrQXR0YWNoT3B0aW9ucz4oR1RLX0VYUEFORCB8IEdUS19GSUxMKTsKKyAgICAgICAgZ3Rr
X3RhYmxlX2F0dGFjaChHVEtfVEFCTEUodGFibGUpLCBmaXJzdENvbHVtbldpZGdldCwKKyAgICAg
ICAgICAgIDAsIHNlY29uZENvbHVtbldpZGdldCA/IDEgOiAyLAorICAgICAgICAgICAgcm93TnVt
YmVyLCByb3dOdW1iZXIgKyAxLAorICAgICAgICAgICAgYXR0YWNoT3B0aW9ucywgYXR0YWNoT3B0
aW9ucywKKyAgICAgICAgICAgIDAsIDApOworCisgICAgICAgIGlmIChzZWNvbmRDb2x1bW5XaWRn
ZXQpCisgICAgICAgICAgICBndGtfdGFibGVfYXR0YWNoX2RlZmF1bHRzKEdUS19UQUJMRSh0YWJs
ZSksIHNlY29uZENvbHVtbldpZGdldCwgMSwgMiwgcm93TnVtYmVyLCByb3dOdW1iZXIgKyAxKTsK
KworICAgICAgICBmaXJzdENvbHVtbldpZGdldCA9IHZhX2FyZyhhcmd1bWVudExpc3QsIEd0a1dp
ZGdldCopOworICAgICAgICByb3dOdW1iZXIrKzsKKyAgICB9CiAKLSAgICBHdGtXaWRnZXQqIGlj
b24gPSBndGtfaW1hZ2VfbmV3X2Zyb21fc3RvY2soR1RLX1NUT0NLX0RJQUxPR19BVVRIRU5USUNB
VElPTiwgR1RLX0lDT05fU0laRV9ESUFMT0cpOwotICAgIGd0a19taXNjX3NldF9hbGlnbm1lbnQo
R1RLX01JU0MoaWNvbiksIDAuNSwgMC4wKTsKLSAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JP
WChoQm94KSwgaWNvbiwgRkFMU0UsIEZBTFNFLCAwKTsKKyAgICB2YV9lbmQoYXJndW1lbnRMaXN0
KTsKIAotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgR3RrV2lkZ2V0KiBtYWluVkJveCA9
IGd0a192Ym94X25ldyhGQUxTRSwgMTgpOworICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9Y
KGJveCksIHRhYmxlLCBGQUxTRSwgRkFMU0UsIDApOworfQogI2Vsc2UKLSAgICBHdGtXaWRnZXQq
IG1haW5WQm94ID0gZ3RrX2JveF9uZXcoR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMLCAxOCk7Ci0j
ZW5kaWYKLSAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChoQm94KSwgbWFpblZCb3gsIFRS
VUUsIFRSVUUsIDApOworc3RhdGljIHZvaWQgcGFja1R3b0NvbHVtbkxheW91dEluQm94KEd0a1dp
ZGdldCogYm94LCAuLi4pCit7CisgICAgdmFfbGlzdCBhcmd1bWVudExpc3Q7CisgICAgdmFfc3Rh
cnQoYXJndW1lbnRMaXN0LCBib3gpOwogCi0gICAgR093blB0cjxjaGFyPiBkZXNjcmlwdGlvbihn
X3N0cmR1cF9wcmludGYoXygiQSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgYXJlIGJlaW5nIHJlcXVl
c3RlZCBieSB0aGUgc2l0ZSAlcyIpLAotICAgICAgICBtX2NoYWxsZW5nZS5wcm90ZWN0aW9uU3Bh
Y2UoKS5ob3N0KCkudXRmOCgpLmRhdGEoKSkpOwotICAgIEd0a1dpZGdldCogZGVzY3JpcHRpb25M
YWJlbCA9IGd0a19sYWJlbF9uZXcoZGVzY3JpcHRpb24uZ2V0KCkpOwotICAgIGd0a19taXNjX3Nl
dF9hbGlnbm1lbnQoR1RLX01JU0MoZGVzY3JpcHRpb25MYWJlbCksIDAuMCwgMC41KTsKLSAgICBn
dGtfbGFiZWxfc2V0X2xpbmVfd3JhcChHVEtfTEFCRUwoZGVzY3JpcHRpb25MYWJlbCksIFRSVUUp
OwotICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKG1haW5WQm94KSwgR1RLX1dJREdFVChk
ZXNjcmlwdGlvbkxhYmVsKSwgRkFMU0UsIEZBTFNFLCAwKTsKKyAgICBHdGtXaWRnZXQqIGdyaWQg
PSBndGtfZ3JpZF9uZXcoKTsKKyAgICBndGtfZ3JpZF9zZXRfY29sdW1uX3NwYWNpbmcoR1RLX0dS
SUQoZ3JpZCksIGdMYXlvdXRSb3dTcGFjaW5nKTsKKyAgICBndGtfZ3JpZF9zZXRfcm93X3NwYWNp
bmcoR1RLX0dSSUQoZ3JpZCksIGdMYXlvdXRSb3dTcGFjaW5nKTsKKyAgICBndGtfZ3JpZF9zZXRf
Y29sdW1uX2hvbW9nZW5lb3VzKEdUS19HUklEKGdyaWQpLCBUUlVFKTsKKworICAgIEd0a1dpZGdl
dCogZmlyc3RDb2x1bW5XaWRnZXQgPSB2YV9hcmcoYXJndW1lbnRMaXN0LCBHdGtXaWRnZXQqKTsK
KyAgICBpbnQgcm93TnVtYmVyID0gMDsKKyAgICB3aGlsZSAoZmlyc3RDb2x1bW5XaWRnZXQpIHsK
KyAgICAgICAgR3RrV2lkZ2V0KiBzZWNvbmRDb2x1bW5XaWRnZXQgPSB2YV9hcmcoYXJndW1lbnRM
aXN0LCBHdGtXaWRnZXQqKTsKKyAgICAgICAgaW50IGZpcnN0V2lkZ2V0V2lkdGggPSBzZWNvbmRD
b2x1bW5XaWRnZXQgPyAxIDogMjsKKworICAgICAgICBndGtfZ3JpZF9hdHRhY2goR1RLX0dSSUQo
Z3JpZCksIGZpcnN0Q29sdW1uV2lkZ2V0LCAwLCByb3dOdW1iZXIsIGZpcnN0V2lkZ2V0V2lkdGgs
IDEpOworICAgICAgICBndGtfd2lkZ2V0X3NldF9oZXhwYW5kKGZpcnN0Q29sdW1uV2lkZ2V0LCBU
UlVFKTsKKyAgICAgICAgZ3RrX3dpZGdldF9zZXRfdmV4cGFuZChmaXJzdENvbHVtbldpZGdldCwg
VFJVRSk7CisKKyAgICAgICAgaWYgKHNlY29uZENvbHVtbldpZGdldCkgeworICAgICAgICAgICAg
Z3RrX2dyaWRfYXR0YWNoKEdUS19HUklEKGdyaWQpLCBzZWNvbmRDb2x1bW5XaWRnZXQsIDEsIHJv
d051bWJlciwgMSwgMSk7CisgICAgICAgICAgICBndGtfd2lkZ2V0X3NldF9oZXhwYW5kKHNlY29u
ZENvbHVtbldpZGdldCwgVFJVRSk7CisgICAgICAgICAgICBndGtfd2lkZ2V0X3NldF92ZXhwYW5k
KHNlY29uZENvbHVtbldpZGdldCwgVFJVRSk7CisgICAgICAgIH0KKworICAgICAgICBmaXJzdENv
bHVtbldpZGdldCA9IHZhX2FyZyhhcmd1bWVudExpc3QsIEd0a1dpZGdldCopOworICAgICAgICBy
b3dOdW1iZXIrKzsKKyAgICB9CiAKLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIEd0a1dp
ZGdldCogdkJveCA9IGd0a192Ym94X25ldyhGQUxTRSwgNik7Ci0jZWxzZQotICAgIEd0a1dpZGdl
dCogdkJveCA9IGd0a19ib3hfbmV3KEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCwgNik7CisgICAg
dmFfZW5kKGFyZ3VtZW50TGlzdCk7CisKKyAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChi
b3gpLCBncmlkLCBGQUxTRSwgRkFMU0UsIDApOworfQogI2VuZGlmCi0gICAgZ3RrX2JveF9wYWNr
X3N0YXJ0KEdUS19CT1gobWFpblZCb3gpLCB2Qm94LCBGQUxTRSwgRkFMU0UsIDApOwogCi0gICAg
Ly8gVGhlIHRhYmxlIHRoYXQgaG9sZHMgdGhlIGVudHJpZXMuCi0gICAgR3RrV2lkZ2V0KiBlbnRy
eUNvbnRhaW5lciA9IGd0a19hbGlnbm1lbnRfbmV3KDAuMCwgMC4wLCAxLjAsIDEuMCk7Ci0gICAg
Z3RrX2FsaWdubWVudF9zZXRfcGFkZGluZyhHVEtfQUxJR05NRU5UKGVudHJ5Q29udGFpbmVyKSwg
MCwgMCwgMCwgMCk7Ci0gICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godkJveCksIGVudHJ5
Q29udGFpbmVyLCBGQUxTRSwgRkFMU0UsIDApOworc3RhdGljIEd0a1dpZGdldCogY3JlYXRlRGlh
bG9nTGFiZWwoY29uc3QgY2hhciogbGFiZWxTdHJpbmcsIGludCBob3Jpem9udGFsUGFkZGluZyA9
IDApCit7CisgICAgR3RrV2lkZ2V0KiBsYWJlbCA9IGd0a19sYWJlbF9uZXcobGFiZWxTdHJpbmcp
OworICAgIGd0a19taXNjX3NldF9hbGlnbm1lbnQoR1RLX01JU0MobGFiZWwpLCAwLCAwLjUpOwor
ICAgIGlmIChob3Jpem9udGFsUGFkZGluZykKKyAgICAgICAgZ3RrX21pc2Nfc2V0X3BhZGRpbmco
R1RLX01JU0MobGFiZWwpLCAwLCBob3Jpem9udGFsUGFkZGluZyk7CisgICAgcmV0dXJuIGxhYmVs
OworfQogCi0gICAgLy8gQ2hlY2tpbmcgdGhhdCByZWFsbSBpcyBub3QgYW4gZW1wdHkgc3RyaW5n
LgotICAgIFN0cmluZyByZWFsbSA9IG1fY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpLnJlYWxt
KCk7Ci0gICAgYm9vbCBoYXNSZWFsbSA9ICFyZWFsbS5pc0VtcHR5KCk7CitzdGF0aWMgR3RrV2lk
Z2V0KiBjcmVhdGVEaWFsb2dFbnRyeShHdGtXaWRnZXQqKiBtZW1iZXIpCit7CisgICAgKm1lbWJl
ciA9IGd0a19lbnRyeV9uZXcoKTsKKyAgICBndGtfZW50cnlfc2V0X2FjdGl2YXRlc19kZWZhdWx0
KEdUS19FTlRSWSgqbWVtYmVyKSwgVFJVRSk7CisgICAgcmV0dXJuICptZW1iZXI7Cit9CiAKK3Zv
aWQgR3RrQXV0aGVudGljYXRpb25EaWFsb2c6OmNyZWF0ZUNvbnRlbnRzSW5Db250YWluZXIoR3Rr
V2lkZ2V0KiBjb250YWluZXIpCit7CiAjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICBHdGtX
aWRnZXQqIHRhYmxlID0gZ3RrX3RhYmxlX25ldyhoYXNSZWFsbSA/IDMgOiAyLCAyLCBGQUxTRSk7
Ci0gICAgZ3RrX3RhYmxlX3NldF9jb2xfc3BhY2luZ3MoR1RLX1RBQkxFKHRhYmxlKSwgMTIpOwot
ICAgIGd0a190YWJsZV9zZXRfcm93X3NwYWNpbmdzKEdUS19UQUJMRSh0YWJsZSksIDYpOwotICAg
IGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoZW50cnlDb250YWluZXIpLCB0YWJsZSk7
CisgICAgR3RrV2lkZ2V0KiBoQm94ID0gZ3RrX2hib3hfbmV3KEZBTFNFLCBnTGF5b3V0Q29sdW1u
U3BhY2luZyk7CiAjZWxzZQotICAgIEd0a1dpZGdldCogZ3JpZCA9IGd0a19ncmlkX25ldygpOwot
ICAgIGd0a19ncmlkX3NldF9jb2x1bW5fc3BhY2luZyhHVEtfR1JJRChncmlkKSwgMTIpOwotICAg
IGd0a19ncmlkX3NldF9yb3dfc3BhY2luZyhHVEtfR1JJRChncmlkKSwgNik7Ci0gICAgZ3RrX2Nv
bnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihlbnRyeUNvbnRhaW5lciksIGdyaWQpOworICAgIEd0
a1dpZGdldCogaEJveCA9IGd0a19ib3hfbmV3KEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMLCBn
TGF5b3V0Q29sdW1uU3BhY2luZyk7CiAjZW5kaWYKKyAgICBndGtfY29udGFpbmVyX3NldF9ib3Jk
ZXJfd2lkdGgoR1RLX0NPTlRBSU5FUihoQm94KSwgZ0J1dHRvblNwYWNpbmcpOworICAgIGd0a19j
b250YWluZXJfYWRkKEdUS19DT05UQUlORVIoY29udGFpbmVyKSwgaEJveCk7CiAKLSAgICBpZiAo
aGFzUmVhbG0pIHsKLSAgICAgICAgR3RrV2lkZ2V0KiBzZXJ2ZXJNZXNzYWdlRGVzY3JpcHRpb25M
YWJlbCA9IGd0a19sYWJlbF9uZXcoXygiU2VydmVyIG1lc3NhZ2U6IikpOwotICAgICAgICBndGtf
bWlzY19zZXRfYWxpZ25tZW50KEdUS19NSVNDKHNlcnZlck1lc3NhZ2VEZXNjcmlwdGlvbkxhYmVs
KSwgMC4wLCAwLjUpOwotICAgICAgICBndGtfbGFiZWxfc2V0X2xpbmVfd3JhcChHVEtfTEFCRUwo
c2VydmVyTWVzc2FnZURlc2NyaXB0aW9uTGFiZWwpLCBUUlVFKTsKLSNpZmRlZiBHVEtfQVBJX1ZF
UlNJT05fMgotICAgICAgICBndGtfdGFibGVfYXR0YWNoX2RlZmF1bHRzKEdUS19UQUJMRSh0YWJs
ZSksIHNlcnZlck1lc3NhZ2VEZXNjcmlwdGlvbkxhYmVsLCAwLCAxLCAwLCAxKTsKLSNlbHNlCi0g
ICAgICAgIGd0a19ncmlkX2F0dGFjaChHVEtfR1JJRChncmlkKSwgc2VydmVyTWVzc2FnZURlc2Ny
aXB0aW9uTGFiZWwsIDAsIDAsIDEsIDEpOwotICAgICAgICBndGtfd2lkZ2V0X3NldF9oZXhwYW5k
KHNlcnZlck1lc3NhZ2VEZXNjcmlwdGlvbkxhYmVsLCBUUlVFKTsKLSAgICAgICAgZ3RrX3dpZGdl
dF9zZXRfdmV4cGFuZChzZXJ2ZXJNZXNzYWdlRGVzY3JpcHRpb25MYWJlbCwgVFJVRSk7Ci0jZW5k
aWYKLSAgICAgICAgR3RrV2lkZ2V0KiBzZXJ2ZXJNZXNzYWdlTGFiZWwgPSBndGtfbGFiZWxfbmV3
KHJlYWxtLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBndGtfbWlzY19zZXRfYWxpZ25tZW50KEdU
S19NSVNDKHNlcnZlck1lc3NhZ2VMYWJlbCksIDAuMCwgMC41KTsKLSAgICAgICAgZ3RrX2xhYmVs
X3NldF9saW5lX3dyYXAoR1RLX0xBQkVMKHNlcnZlck1lc3NhZ2VMYWJlbCksIFRSVUUpOwotI2lm
ZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgICAgIGd0a190YWJsZV9hdHRhY2hfZGVmYXVsdHMo
R1RLX1RBQkxFKHRhYmxlKSwgc2VydmVyTWVzc2FnZUxhYmVsLCAxLCAyLCAwLCAxKTsKLSNlbHNl
Ci0gICAgICAgIGd0a19ncmlkX2F0dGFjaChHVEtfR1JJRChncmlkKSwgc2VydmVyTWVzc2FnZUxh
YmVsLCAxLCAwLCAxLCAxKTsKLSAgICAgICAgZ3RrX3dpZGdldF9zZXRfaGV4cGFuZChzZXJ2ZXJN
ZXNzYWdlTGFiZWwsIFRSVUUpOwotICAgICAgICBndGtfd2lkZ2V0X3NldF92ZXhwYW5kKHNlcnZl
ck1lc3NhZ2VMYWJlbCwgVFJVRSk7Ci0jZW5kaWYKLSAgICB9CisgICAgR3RrV2lkZ2V0KiBpY29u
ID0gZ3RrX2ltYWdlX25ld19mcm9tX3N0b2NrKEdUS19TVE9DS19ESUFMT0dfQVVUSEVOVElDQVRJ
T04sIEdUS19JQ09OX1NJWkVfRElBTE9HKTsKKyAgICBndGtfbWlzY19zZXRfYWxpZ25tZW50KEdU
S19NSVNDKGljb24pLCAwLjUsIDApOworICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGhC
b3gpLCBpY29uLCBGQUxTRSwgRkFMU0UsIDApOwogCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIK
LSAgICBtX2xvZ2luRW50cnkgPSBhZGRFbnRyeVRvVGFibGUoR1RLX1RBQkxFKHRhYmxlKSwgaGFz
UmVhbG0gPyAxIDogMCwgXygiVXNlcm5hbWU6IikpOwotICAgIG1fcGFzc3dvcmRFbnRyeSA9IGFk
ZEVudHJ5VG9UYWJsZShHVEtfVEFCTEUodGFibGUpLCBoYXNSZWFsbSA/IDIgOiAxLCBfKCJQYXNz
d29yZDoiKSk7Ci0jZWxzZQotICAgIG1fbG9naW5FbnRyeSA9IGFkZEVudHJ5VG9HcmlkKEdUS19H
UklEKGdyaWQpLCBoYXNSZWFsbSA/IDEgOiAwLCBfKCJVc2VybmFtZToiKSk7Ci0gICAgbV9wYXNz
d29yZEVudHJ5ID0gYWRkRW50cnlUb0dyaWQoR1RLX0dSSUQoZ3JpZCksIGhhc1JlYWxtID8gMiA6
IDEsIF8oIlBhc3N3b3JkOiIpKTsKLSNlbmRpZgorICAgIEdPd25QdHI8Y2hhcj4gcHJvbXB0KGdf
c3RyZHVwX3ByaW50ZigKKyAgICAgICAgXygiVGhlIHNpdGUgJXM6JWkgcmVxdWVzdHMgYSB1c2Vy
bmFtZSBhbmQgcGFzc3dvcmQiKSwKKyAgICAgICAgbV9jaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNl
KCkuaG9zdCgpLnV0ZjgoKS5kYXRhKCksCisgICAgICAgIG1fY2hhbGxlbmdlLnByb3RlY3Rpb25T
cGFjZSgpLnBvcnQoKSkpOworCisgICAgbV9yZW1lbWJlckNoZWNrQnV0dG9uID0gZ3RrX2NoZWNr
X2J1dHRvbl9uZXdfd2l0aF9tbmVtb25pYyhfKCJfUmVtZW1iZXIgcGFzc3dvcmQiKSk7CisgICAg
Z3RrX2xhYmVsX3NldF9saW5lX3dyYXAoR1RLX0xBQkVMKGd0a19iaW5fZ2V0X2NoaWxkKEdUS19C
SU4obV9yZW1lbWJlckNoZWNrQnV0dG9uKSkpLCBUUlVFKTsKIAotICAgIGd0a19lbnRyeV9zZXRf
dmlzaWJpbGl0eShHVEtfRU5UUlkobV9wYXNzd29yZEVudHJ5KSwgRkFMU0UpOwogCisgICAgLy8g
V2UgYXJlIGFkZGluZyB0aGUgYnV0dG9uIGJveCBoZXJlIG1hbnVhbGx5IGluc3RlYWQgb2YgdXNp
bmcgdGhlIHJlYWR5LW1hZGUgR3RrRGlhbG9nIGJ1dHRvbnMuCisgICAgLy8gVGhpcyBpcyBzbyB0
aGF0IHdlIGNhbiBzaGFyZSB0aGUgY29kZSB3aXRoIGltcGxlbWVudGF0aW9ucyB0aGF0IGRvIG5v
dCB1c2UgR3RrRGlhbG9nLgogI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgR3RrV2lkZ2V0
KiByZW1lbWJlckJveCA9IGd0a192Ym94X25ldyhGQUxTRSwgNik7CisgICAgR3RrV2lkZ2V0KiBi
dXR0b25Cb3ggPSBndGtfaGJ1dHRvbl9ib3hfbmV3KCk7CiAjZWxzZQotICAgIEd0a1dpZGdldCog
cmVtZW1iZXJCb3ggPSBndGtfYm94X25ldyhHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwsIDYpOwor
ICAgIEd0a1dpZGdldCogYnV0dG9uQm94ID0gZ3RrX2J1dHRvbl9ib3hfbmV3KEdUS19PUklFTlRB
VElPTl9IT1JJWk9OVEFMKTsKICNlbmRpZgotICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9Y
KHZCb3gpLCByZW1lbWJlckJveCwgRkFMU0UsIEZBTFNFLCAwKTsKKyAgICBndGtfYm94X3NldF9z
cGFjaW5nKEdUS19CT1goYnV0dG9uQm94KSwgZ0J1dHRvblNwYWNpbmcpOworICAgIGd0a19idXR0
b25fYm94X3NldF9sYXlvdXQoR1RLX0JVVFRPTl9CT1goYnV0dG9uQm94KSwgR1RLX0JVVFRPTkJP
WF9FTkQpOwogCi0gICAgbV9yZW1lbWJlckNoZWNrQnV0dG9uID0gZ3RrX2NoZWNrX2J1dHRvbl9u
ZXdfd2l0aF9tbmVtb25pYyhfKCJfUmVtZW1iZXIgcGFzc3dvcmQiKSk7Ci0gICAgZ3RrX2xhYmVs
X3NldF9saW5lX3dyYXAoR1RLX0xBQkVMKGd0a19iaW5fZ2V0X2NoaWxkKEdUS19CSU4obV9yZW1l
bWJlckNoZWNrQnV0dG9uKSkpLCBUUlVFKTsKLSAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JP
WChyZW1lbWJlckJveCksIG1fcmVtZW1iZXJDaGVja0J1dHRvbiwgRkFMU0UsIEZBTFNFLCAwKTsK
LX0KKyAgICBtX29rYXlCdXR0b24gPSBndGtfYnV0dG9uX25ld19mcm9tX3N0b2NrKEdUS19TVE9D
S19PSyk7CisgICAgbV9jYW5jZWxCdXR0b24gPSBndGtfYnV0dG9uX25ld19mcm9tX3N0b2NrKEdU
S19TVE9DS19DQU5DRUwpOworICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGJ1dHRvbkJv
eCksIG1fY2FuY2VsQnV0dG9uLCBGQUxTRSwgVFJVRSwgMCk7CisgICAgZ3RrX2JveF9wYWNrX3N0
YXJ0KEdUS19CT1goYnV0dG9uQm94KSwgbV9va2F5QnV0dG9uLCBGQUxTRSwgVFJVRSwgMCk7Cisg
ICAgZ19zaWduYWxfY29ubmVjdChtX29rYXlCdXR0b24sICJjbGlja2VkIiwgR19DQUxMQkFDSyhi
dXR0b25DbGlja2VkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fY2Fu
Y2VsQnV0dG9uLCAiY2xpY2tlZCIsIEdfQ0FMTEJBQ0soYnV0dG9uQ2xpY2tlZENhbGxiYWNrKSwg
dGhpcyk7CiAKLXZvaWQgR3RrQXV0aGVudGljYXRpb25EaWFsb2c6OnNob3coKQoteworICAgIFN0
cmluZyByZWFsbSA9IG1fY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpLnJlYWxtKCk7CisgICAg
aWYgKCFyZWFsbS5pc0VtcHR5KCkpIHsKKyAgICAgICAgcGFja1R3b0NvbHVtbkxheW91dEluQm94
KGhCb3gsCisgICAgICAgICAgICBjcmVhdGVEaWFsb2dMYWJlbChwcm9tcHQuZ2V0KCksIGdMYXlv
dXRSb3dTcGFjaW5nKSwgTlVMTCwKKyAgICAgICAgICAgIGNyZWF0ZURpYWxvZ0xhYmVsKF8oIlNl
cnZlciBtZXNzYWdlOiIpKSwgY3JlYXRlRGlhbG9nTGFiZWwocmVhbG0udXRmOCgpLmRhdGEoKSks
CisgICAgICAgICAgICBjcmVhdGVEaWFsb2dMYWJlbChfKCJVc2VybmFtZToiKSksIGNyZWF0ZURp
YWxvZ0VudHJ5KCZtX2xvZ2luRW50cnkpLAorICAgICAgICAgICAgY3JlYXRlRGlhbG9nTGFiZWwo
XygiUGFzc3dvcmQ6IikpLCBjcmVhdGVEaWFsb2dFbnRyeSgmbV9wYXNzd29yZEVudHJ5KSwKKyAg
ICAgICAgICAgIG1fcmVtZW1iZXJDaGVja0J1dHRvbiwgTlVMTCwKKyAgICAgICAgICAgIGJ1dHRv
bkJveCwgTlVMTCwgTlVMTCk7CisKKyAgICB9IGVsc2UgeworICAgICAgICBwYWNrVHdvQ29sdW1u
TGF5b3V0SW5Cb3goaEJveCwKKyAgICAgICAgICAgIGNyZWF0ZURpYWxvZ0xhYmVsKHByb21wdC5n
ZXQoKSwgZ0xheW91dFJvd1NwYWNpbmcpLCBOVUxMLAorICAgICAgICAgICAgY3JlYXRlRGlhbG9n
TGFiZWwoXygiVXNlcm5hbWU6IikpLCBjcmVhdGVEaWFsb2dFbnRyeSgmbV9sb2dpbkVudHJ5KSwK
KyAgICAgICAgICAgIGNyZWF0ZURpYWxvZ0xhYmVsKF8oIlBhc3N3b3JkOiIpKSwgY3JlYXRlRGlh
bG9nRW50cnkoJm1fcGFzc3dvcmRFbnRyeSksCisgICAgICAgICAgICBtX3JlbWVtYmVyQ2hlY2tC
dXR0b24sIE5VTEwsIE5VTEwsCisgICAgICAgICAgICBidXR0b25Cb3gsIE5VTEwsIE5VTEwpOwor
ICAgIH0KKworICAgIGd0a19lbnRyeV9zZXRfdmlzaWJpbGl0eShHVEtfRU5UUlkobV9wYXNzd29y
ZEVudHJ5KSwgRkFMU0UpOwogICAgIGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWxGcm9tUGVy
c2lzdGVudFN0b3JhZ2UgPSBtX2NoYWxsZW5nZS5wcm9wb3NlZENyZWRlbnRpYWwoKTsKICAgICBp
ZiAoIWNyZWRlbnRpYWxGcm9tUGVyc2lzdGVudFN0b3JhZ2UuaXNFbXB0eSgpKSB7CiAgICAgICAg
IGd0a19lbnRyeV9zZXRfdGV4dChHVEtfRU5UUlkobV9sb2dpbkVudHJ5KSwgY3JlZGVudGlhbEZy
b21QZXJzaXN0ZW50U3RvcmFnZS51c2VyKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIGd0a19l
bnRyeV9zZXRfdGV4dChHVEtfRU5UUlkobV9wYXNzd29yZEVudHJ5KSwgY3JlZGVudGlhbEZyb21Q
ZXJzaXN0ZW50U3RvcmFnZS5wYXNzd29yZCgpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICBndGtf
dG9nZ2xlX2J1dHRvbl9zZXRfYWN0aXZlKEdUS19UT0dHTEVfQlVUVE9OKG1fcmVtZW1iZXJDaGVj
a0J1dHRvbiksIFRSVUUpOwogICAgIH0KK30KKwordm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxv
Zzo6c2hvdygpCit7CisgICAgZ3RrX3dpZGdldF9zZXRfY2FuX2RlZmF1bHQobV9va2F5QnV0dG9u
LCBUUlVFKTsKKyAgICBndGtfd2lkZ2V0X2dyYWJfZGVmYXVsdChtX29rYXlCdXR0b24pOworICAg
IGd0a193aWRnZXRfZ3JhYl9mb2N1cyhtX2xvZ2luRW50cnkpOwogCi0gICAgZ19zaWduYWxfY29u
bmVjdChtX2RpYWxvZywgInJlc3BvbnNlIiwgR19DQUxMQkFDSyhhdXRoZW50aWNhdGlvbkRpYWxv
Z1Jlc3BvbnNlQ2FsbGJhY2spLCB0aGlzKTsKICAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKG1fZGlh
bG9nKTsKIH0KIApAQCAtMjEyLDEwICsyNDIsMTAgQEAgdm9pZCBHdGtBdXRoZW50aWNhdGlvbkRp
YWxvZzo6YXV0aGVudGljYXRlKGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCiAgICAgICAg
IG1fY2hhbGxlbmdlLmF1dGhlbnRpY2F0aW9uQ2xpZW50KCktPnJlY2VpdmVkQ3JlZGVudGlhbCht
X2NoYWxsZW5nZSwgY3JlZGVudGlhbCk7CiB9CiAKLXZvaWQgR3RrQXV0aGVudGljYXRpb25EaWFs
b2c6OmF1dGhlbnRpY2F0aW9uRGlhbG9nUmVzcG9uc2VDYWxsYmFjayhHdGtXaWRnZXQqLCBnaW50
IHJlc3BvbnNlSUQsIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKiBkaWFsb2cpCit2b2lkIEd0a0F1
dGhlbnRpY2F0aW9uRGlhbG9nOjpidXR0b25DbGlja2VkQ2FsbGJhY2soR3RrV2lkZ2V0KiBidXR0
b24sIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKiBkaWFsb2cpCiB7CiAgICAgQ3JlZGVudGlhbCBj
cmVkZW50aWFsOwotICAgIGlmIChyZXNwb25zZUlEID09IEdUS19SRVNQT05TRV9PSykgeworICAg
IGlmIChidXR0b24gPT0gZGlhbG9nLT5tX29rYXlCdXR0b24pIHsKICAgICAgICAgY29uc3QgY2hh
ciAqdXNlcm5hbWUgPSBndGtfZW50cnlfZ2V0X3RleHQoR1RLX0VOVFJZKGRpYWxvZy0+bV9sb2dp
bkVudHJ5KSk7CiAgICAgICAgIGNvbnN0IGNoYXIgKnBhc3N3b3JkID0gZ3RrX2VudHJ5X2dldF90
ZXh0KEdUS19FTlRSWShkaWFsb2ctPm1fcGFzc3dvcmRFbnRyeSkpOwogICAgICAgICBDcmVkZW50
aWFsUGVyc2lzdGVuY2UgcGVyc2lzdGVuY2UgPSBndGtfdG9nZ2xlX2J1dHRvbl9nZXRfYWN0aXZl
KEdUS19UT0dHTEVfQlVUVE9OKGRpYWxvZy0+bV9yZW1lbWJlckNoZWNrQnV0dG9uKSkgPwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlh
bG9nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFs
b2cuaAppbmRleCA3ZTY0NzhmYmY5OTIyMGI4Y2FhNGU4N2ExMWFhNTJhMDAwZGQ0NDVmLi44YThk
NTYzMDMzZmRjYmM2NmM3ZmViZjQxMWFhZjYwY2VjYjcxOWZiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuaApAQCAtMzQs
MjAgKzM0LDI0IEBAIGNsYXNzIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nIHsKICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKIAogcHVibGljOgorICAgIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9n
KGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7CiAgICAgR3RrQXV0aGVudGljYXRpb25E
aWFsb2coR3RrV2luZG93KiwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKLSAgICB2
aXJ0dWFsIH5HdGtBdXRoZW50aWNhdGlvbkRpYWxvZygpOworICAgIHZpcnR1YWwgfkd0a0F1dGhl
bnRpY2F0aW9uRGlhbG9nKCkgeyB9CiAgICAgdm9pZCBzaG93KCk7CisgICAgdm9pZCBkZXN0cm95
KCk7CiAKIHByb3RlY3RlZDoKKyAgICB2b2lkIGNyZWF0ZUNvbnRlbnRzSW5Db250YWluZXIoR3Rr
V2lkZ2V0KiBjb250YWluZXIpOwogICAgIHZpcnR1YWwgdm9pZCBhdXRoZW50aWNhdGUoY29uc3Qg
Q3JlZGVudGlhbCYpOwogICAgIEd0a1dpZGdldCogbV9kaWFsb2c7CiAgICAgR3RrV2lkZ2V0KiBt
X2xvZ2luRW50cnk7CiAgICAgR3RrV2lkZ2V0KiBtX3Bhc3N3b3JkRW50cnk7CiAgICAgR3RrV2lk
Z2V0KiBtX3JlbWVtYmVyQ2hlY2tCdXR0b247CisgICAgR3RrV2lkZ2V0KiBtX29rYXlCdXR0b247
CisgICAgR3RrV2lkZ2V0KiBtX2NhbmNlbEJ1dHRvbjsKIAogcHJpdmF0ZToKLSAgICB2b2lkIGRl
c3Ryb3koKTsKLSAgICBzdGF0aWMgdm9pZCBhdXRoZW50aWNhdGlvbkRpYWxvZ1Jlc3BvbnNlQ2Fs
bGJhY2soR3RrV2lkZ2V0KiwgZ2ludCByZXNwb25zZUlELCBHdGtBdXRoZW50aWNhdGlvbkRpYWxv
ZyopOworICAgIHN0YXRpYyB2b2lkIGJ1dHRvbkNsaWNrZWRDYWxsYmFjayhHdGtXaWRnZXQqLCBH
dGtBdXRoZW50aWNhdGlvbkRpYWxvZyopOwogICAgIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIG1f
Y2hhbGxlbmdlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdDJHdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5jcHAKaW5k
ZXggZWYyZGExYzk4YjBiZWIxYTEyZTVkYjNkYjBiMTdmOGE3MDNjN2VjMS4uMTNlZmU4YzY4OTIy
ZjM3NDMwZjcwMDEyZjY4ZjU4NGZjMmQwMjBkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXQyR3RrQXV0aGVudGljYXRp
b25EaWFsb2cuY3BwCkBAIC0yMywxNSArMjMsNDAgQEAKICNpbmNsdWRlICJBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZVByb3h5LmgiCiAjaW5jbHVkZSAiQXV0aGVudGljYXRpb25EZWNpc2lvbkxpc3Rl
bmVyLmgiCiAjaW5jbHVkZSAiV2ViQ3JlZGVudGlhbC5oIgorI2luY2x1ZGUgIldlYktpdFdlYlZp
ZXdCYXNlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdFdlYlZpZXdQcml2YXRlLmgiCisjaW5j
bHVkZSA8Z3RrL2d0ay5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorLy8gVGhpcyBpcyBuZWNl
c3NhcnkgYmVjYXVzZSBHdGtFdmVudEJveCBkb2VzIG5vdCBkcmF3IGEgYmFja2dyb3VuZCBieSBk
ZWZhdWx0LAorLy8gYnV0IHdlIHdhbnQgaXQgdG8gaGF2ZSBhIG5vcm1hbCBHdGtXaW5kb3cgYmFj
a2dyb3VuZC4KK3N0YXRpYyBnYm9vbGVhbiBkcmF3U2lnbmFsKEd0a1dpZGdldCogd2lkZ2V0LCBj
YWlyb190KiBjciwgR3RrU3R5bGVDb250ZXh0KiBzdHlsZUNvbnRleHQpCit7CisgICAgZ3RrX3Jl
bmRlcl9iYWNrZ3JvdW5kKHN0eWxlQ29udGV4dCwgY3IsIDAsIDAsCisgICAgICAgIGd0a193aWRn
ZXRfZ2V0X2FsbG9jYXRlZF93aWR0aCh3aWRnZXQpLCBndGtfd2lkZ2V0X2dldF9hbGxvY2F0ZWRf
aGVpZ2h0KHdpZGdldCkpOworICAgIHJldHVybiBGQUxTRTsKK30KKwogV2ViS2l0Mkd0a0F1dGhl
bnRpY2F0aW9uRGlhbG9nOjpXZWJLaXQyR3RrQXV0aGVudGljYXRpb25EaWFsb2coQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2VQcm94eSogYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpCi0gICAgOiBHdGtB
dXRoZW50aWNhdGlvbkRpYWxvZygwLCBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZS0+Y29yZSgpKQor
ICAgIDogR3RrQXV0aGVudGljYXRpb25EaWFsb2coYXV0aGVudGljYXRpb25DaGFsbGVuZ2UtPmNv
cmUoKSkKICAgICAsIG1fYXV0aGVudGljYXRpb25DaGFsbGVuZ2UoYXV0aGVudGljYXRpb25DaGFs
bGVuZ2UpCisgICAgLCBtX3N0eWxlQ29udGV4dChhZG9wdEdSZWYoZ3RrX3N0eWxlX2NvbnRleHRf
bmV3KCkpKQogewotICAgIC8vIFdlIGFyZW4ndCBwYXNzaW5nIGEgdG9wbGV2ZWwgdG8gdGhlIEd0
a0F1dGhlbnRpY2F0aW9uRGlhbG9nIGNvbnN0cnVjdG9yLAotICAgIC8vIGJlY2F1c2UgZXZlbnR1
YWxseSB0aGlzIHdpZGdldCB3aWxsIGJlIGVtYmVkZGVkIGludG8gdGhlIFdlYlZpZXcgaXRzZWxm
LgorICAgIG1fZGlhbG9nID0gZ3RrX2V2ZW50X2JveF9uZXcoKTsKKworICAgIEd0a1dpZGdldCog
ZnJhbWUgPSBndGtfZnJhbWVfbmV3KDApOworICAgIGd0a19mcmFtZV9zZXRfc2hhZG93X3R5cGUo
R1RLX0ZSQU1FKGZyYW1lKSwgR1RLX1NIQURPV19JTik7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQo
R1RLX0NPTlRBSU5FUihtX2RpYWxvZyksIGZyYW1lKTsKKyAgICBjcmVhdGVDb250ZW50c0luQ29u
dGFpbmVyKGZyYW1lKTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhtX3N0eWxl
Q29udGV4dC5nZXQoKSwgR1RLX1NUWUxFX0NMQVNTX0JBQ0tHUk9VTkQpOworICAgIEd0a1dpZGdl
dFBhdGgqIHBhdGggPSBndGtfd2lkZ2V0X3BhdGhfbmV3KCk7CisgICAgZ3RrX3dpZGdldF9wYXRo
X2FwcGVuZF90eXBlKHBhdGgsIEdUS19UWVBFX1dJTkRPVyk7CisgICAgZ3RrX3N0eWxlX2NvbnRl
eHRfc2V0X3BhdGgobV9zdHlsZUNvbnRleHQuZ2V0KCksIHBhdGgpOworICAgIGd0a193aWRnZXRf
cGF0aF9mcmVlKHBhdGgpOworCisgICAgZ19zaWduYWxfY29ubmVjdChtX2RpYWxvZywgImRyYXci
LCBHX0NBTExCQUNLKGRyYXdTaWduYWwpLCBtX3N0eWxlQ29udGV4dC5nZXQoKSk7CiB9CiAKIHZv
aWQgV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjphdXRoZW50aWNhdGUoY29uc3QgV2Vi
Q29yZTo6Q3JlZGVudGlhbCYgY3JlZGVudGlhbCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdDJHdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlh
bG9nLmgKaW5kZXggNjBjNWUwNTg4NGVmM2VmMjM2NTM3MjdkNTBlZmMwMDg3NmNjY2VlZC4uNjcw
NjQ2MjJjODRkYjI4MTQxZTA1YjdmNGExMDAwNWU2NmYzMDFlYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9n
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Mkd0a0F1dGhl
bnRpY2F0aW9uRGlhbG9nLmgKQEAgLTE3LDIyICsxNywzMiBAQAogICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCiAgKi8KIAorI2lmbmRlZiBXZWJLaXQyR3RrQXV0aGVudGljYXRpb25EaWFs
b2dfaAorI2RlZmluZSBXZWJLaXQyR3RrQXV0aGVudGljYXRpb25EaWFsb2dfaAorCiAjaW5jbHVk
ZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5oIgogI2luY2x1ZGUgIldLUmV0YWluUHRy
LmgiCisjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2UuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Ny
ZWRlbnRpYWwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmg+
CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAogY2xhc3MgV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nIDogcHVibGljIFdlYkNvcmU6
Okd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nIHsKIHB1YmxpYzoKICAgICBXZWJLaXQyR3RrQXV0aGVu
dGljYXRpb25EaWFsb2coQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSopOworICAgIHZpcnR1
YWwgfldlYktpdDJHdGtBdXRoZW50aWNhdGlvbkRpYWxvZygpIHsgfQorICAgIEd0a1dpZGdldCog
d2lkZ2V0KCkgeyByZXR1cm4gbV9kaWFsb2c7IH0KIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwg
dm9pZCBhdXRoZW50aWNhdGUoY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYpOwogCiBwcml2YXRl
OgogICAgIFJlZlB0cjxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5PiBtX2F1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlOworICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBtX3N0eWxlQ29udGV4
dDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViS2l0Mkd0a0F1
dGhlbnRpY2F0aW9uRGlhbG9nX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdExvYWRlckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRMb2FkZXJDbGllbnQuY3BwCmluZGV4IGJlMDZlZGRmNjU4NDM5NzQ0
ZWM2MDRlYzQ0NWNmMjI3OTkzYjJkNDEuLjFlYWUyNjc1MzliY2IwOGU1NmE5OWNhNmRhM2EwMmY3
N2FhOTBkZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdExvYWRlckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0TG9hZGVyQ2xpZW50LmNwcApAQCAtMTE4LDggKzExOCw3IEBAIHN0YXRpYyB2b2lk
IGRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdChXS1BhZ2VSZWYgcGFnZSwgV0tCYWNrRm9yd2FyZExp
c3RJdGVtUmVmIGFkCiAKIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZUluRnJhbWUoV0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdLQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2VSZWYgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIGNvbnN0IHZvaWQgKmNs
aWVudEluZm8pCiB7Ci0gICAgV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKiBkaWFsb2cg
PSBuZXcgV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKHRvSW1wbChhdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSkpOwotICAgIGRpYWxvZy0+c2hvdygpOworICAgIHdlYmtpdFdlYlZpZXdIYW5k
bGVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXRUJLSVRfV0VCX1ZJRVcoY2xpZW50SW5mbyksIHRv
SW1wbChhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSkpOwogfQogCiB2b2lkIGF0dGFjaExvYWRlckNs
aWVudFRvVmlldyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAppbmRleCA2NTk4YjY2MDJjY2U4
MjA1MmI2ZmYwODU4MDYyZjVmM2Y2OTljY2NhLi5mYjBjNWVkOWFiOWNhM2Y4ZWJmYjkzMThhZDBi
NzNkMjNkNzM2OTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3LmNwcApAQCAtMTI2MSw2ICsxMjYxLDcgQEAgc3RhdGljIHZvaWQgd2Vi
a2l0V2ViVmlld0VtaXRMb2FkQ2hhbmdlZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRM
b2FkRXZlbnQKICAgICBpZiAobG9hZEV2ZW50ID09IFdFQktJVF9MT0FEX1NUQVJURUQpIHsKICAg
ICAgICAgd2Via2l0V2ViVmlld1NldElzTG9hZGluZyh3ZWJWaWV3LCB0cnVlKTsKICAgICAgICAg
d2Via2l0V2ViVmlld1dhdGNoRm9yQ2hhbmdlc0luRmF2aWNvbih3ZWJWaWV3KTsKKyAgICAgICAg
d2Via2l0V2ViVmlld0Jhc2VDYW5jZWxBdXRoZW50aWNhdGlvbkRpYWxvZyhXRUJLSVRfV0VCX1ZJ
RVdfQkFTRSh3ZWJWaWV3KSk7CiAgICAgfSBlbHNlIGlmIChsb2FkRXZlbnQgPT0gV0VCS0lUX0xP
QURfRklOSVNIRUQpIHsKICAgICAgICAgd2Via2l0V2ViVmlld1NldElzTG9hZGluZyh3ZWJWaWV3
LCBmYWxzZSk7CiAgICAgICAgIHdlYlZpZXctPnByaXYtPndhaXRpbmdGb3JNYWluUmVzb3VyY2Ug
PSBmYWxzZTsKQEAgLTE2MDksNiArMTYxMCwxMyBAQCB2b2lkIHdlYmtpdFdlYlZpZXdTdWJtaXRG
b3JtUmVxdWVzdChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRGb3JtU3VibWlzc2lvbgog
ICAgIGdfc2lnbmFsX2VtaXQod2ViVmlldywgc2lnbmFsc1tTVUJNSVRfRk9STV0sIDAsIHJlcXVl
c3QpOwogfQogCit2b2lkIHdlYmtpdFdlYlZpZXdIYW5kbGVBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5KiBh
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSkKK3sKKyAgICBXZWJLaXQyR3RrQXV0aGVudGljYXRpb25E
aWFsb2cqIGRpYWxvZyA9IG5ldyBXZWJLaXQyR3RrQXV0aGVudGljYXRpb25EaWFsb2coYXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UpOworICAgIHdlYmtpdFdlYlZpZXdCYXNlQWRkQXV0aGVudGljYXRp
b25EaWFsb2coV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2ViVmlldyksIGRpYWxvZyk7CisgICAgZGlh
bG9nLT5zaG93KCk7Cit9CisKIC8qKgogICogd2Via2l0X3dlYl92aWV3X25ldzoKICAqCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFz
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFz
ZS5jcHAKaW5kZXggZGU3NDFjMmUzMzNmYmM3NmU0NjM0OWFkNWYyMmRjMTQ5OTIyOWMzNS4uZjlh
ZWU4MzFlZmRmM2E4ZWJhNTg3M2UwMjdkNDNjYjVkMjQ1ZjgzYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcApAQCAt
MTA2LDYgKzEwNiw3IEBAIHN0cnVjdCBfV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlIHsKICAgICBJ
bnRTaXplIHJlc2l6ZXJTaXplOwogICAgIEdSZWZQdHI8QXRrT2JqZWN0PiBhY2Nlc3NpYmxlOwog
ICAgIGJvb2wgbmVlZHNSZXNpemVPbk1hcDsKKyAgICBXZWJLaXQyR3RrQXV0aGVudGljYXRpb25E
aWFsb2cqIGF1dGhlbnRpY2F0aW9uRGlhbG9nOwogICAgIEd0a1dpZGdldCogaW5zcGVjdG9yVmll
dzsKICAgICB1bnNpZ25lZCBpbnNwZWN0b3JWaWV3SGVpZ2h0OwogICAgIEdPd25QdHI8R2RrRXZl
bnQ+IGNvbnRleHRNZW51RXZlbnQ7CkBAIC0yNzIsMTYgKzI3MywyMCBAQCBzdGF0aWMgdm9pZCB3
ZWJraXRXZWJWaWV3QmFzZVJlYWxpemUoR3RrV2lkZ2V0KiB3aWRnZXQpCiAgICAgICAgIHdlYmtp
dFdlYlZpZXdCYXNlU2V0VG9wbGV2ZWxPblNjcmVlbldpbmRvdyh3ZWJWaWV3LCBHVEtfV0lORE9X
KHRvcGxldmVsKSk7CiB9CiAKK3N0YXRpYyBib29sIHdlYmtpdFdlYlZpZXdDaGlsZElzSW50ZXJu
YWxXaWRnZXQoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlLCBHdGtXaWRnZXQqIHdpZGdl
dCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJWaWV3QmFzZS0+
cHJpdjsKKyAgICByZXR1cm4gd2lkZ2V0ID09IHByaXYtPmluc3BlY3RvclZpZXcgfHwgKHByaXYt
PmF1dGhlbnRpY2F0aW9uRGlhbG9nICYmIHByaXYtPmF1dGhlbnRpY2F0aW9uRGlhbG9nLT53aWRn
ZXQoKSA9PSB3aWRnZXQpOworfQorCiBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUNvbnRh
aW5lckFkZChHdGtDb250YWluZXIqIGNvbnRhaW5lciwgR3RrV2lkZ2V0KiB3aWRnZXQpCiB7CiAg
ICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRShjb250
YWluZXIpOwogICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnBy
aXY7CiAKLSAgICBpZiAoV0VCS0lUX0lTX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KQotICAgICAgICAm
JiBXZWJJbnNwZWN0b3JQcm94eTo6aXNJbnNwZWN0b3JQYWdlKFdFQktJVF9XRUJfVklFV19CQVNF
KHdpZGdldCktPnByaXYtPnBhZ2VQcm94eS5nZXQoKSkpIHsKLSAgICAgICAgQVNTRVJUKCFwcml2
LT5pbnNwZWN0b3JWaWV3KTsKLSAgICAgICAgcHJpdi0+aW5zcGVjdG9yVmlldyA9IHdpZGdldDsK
LSAgICB9IGVsc2UgeworICAgIC8vIEludGVybmFsIHdpZGdldHMgbGlrZSB0aGUgd2ViIGluc3Bl
Y3RvciBhbmQgYXV0aGVudGljYXRpb24gZGlhbG9nIGhhdmUgY3VzdG9tCisgICAgLy8gYWxsb2Nh
dGlvbnMgc28gd2UgZG9uJ3QgbmVlZCB0byBhZGQgdGhlbSB0byBvdXIgbGlzdCBvZiBjaGlsZHJl
bi4KKyAgICBpZiAoIXdlYmtpdFdlYlZpZXdDaGlsZElzSW50ZXJuYWxXaWRnZXQod2ViVmlldywg
d2lkZ2V0KSkgewogICAgICAgICBHdGtBbGxvY2F0aW9uIGNoaWxkQWxsb2NhdGlvbjsKICAgICAg
ICAgZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGlvbih3aWRnZXQsICZjaGlsZEFsbG9jYXRpb24pOwog
ICAgICAgICBwcml2LT5jaGlsZHJlbi5zZXQod2lkZ2V0LCBjaGlsZEFsbG9jYXRpb24pOwpAQCAt
MjkwLDYgKzI5NSwyNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUNvbnRhaW5lckFk
ZChHdGtDb250YWluZXIqIGNvbnRhaW5lciwgR3RrV2lkZ2V0KiB3aQogICAgIGd0a193aWRnZXRf
c2V0X3BhcmVudCh3aWRnZXQsIEdUS19XSURHRVQoY29udGFpbmVyKSk7CiB9CiAKK3ZvaWQgd2Vi
a2l0V2ViVmlld0Jhc2VBZGRBdXRoZW50aWNhdGlvbkRpYWxvZyhXZWJLaXRXZWJWaWV3QmFzZSog
d2ViVmlld0Jhc2UsIFdlYktpdDJHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyogZGlhbG9nKQorewor
ICAgIHdlYlZpZXdCYXNlLT5wcml2LT5hdXRoZW50aWNhdGlvbkRpYWxvZyA9IGRpYWxvZzsKKyAg
ICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdlYlZpZXdCYXNlKSwgZGlhbG9nLT53
aWRnZXQoKSk7CisgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3KEdUS19XSURHRVQod2ViVmlld0Jh
c2UpKTsgLy8gV2UgbmVlZCB0byBkcmF3IHRoZSBzaGFkb3cgb3ZlciB0aGUgd2lkZ2V0LgorfQor
Cit2b2lkIHdlYmtpdFdlYlZpZXdCYXNlQ2FuY2VsQXV0aGVudGljYXRpb25EaWFsb2coV2ViS2l0
V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlKQoreworICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0
ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2OworICAgIGlmIChwcml2LT5hdXRoZW50aWNhdGlv
bkRpYWxvZykKKyAgICAgICAgcHJpdi0+YXV0aGVudGljYXRpb25EaWFsb2ctPmRlc3Ryb3koKTsK
K30KKwordm9pZCB3ZWJraXRXZWJWaWV3QmFzZUFkZFdlYkluc3BlY3RvcihXZWJLaXRXZWJWaWV3
QmFzZSogd2ViVmlld0Jhc2UsIEd0a1dpZGdldCogaW5zcGVjdG9yKQoreworICAgIHdlYlZpZXdC
YXNlLT5wcml2LT5pbnNwZWN0b3JWaWV3ID0gaW5zcGVjdG9yOworICAgIGd0a19jb250YWluZXJf
YWRkKEdUS19DT05UQUlORVIod2ViVmlld0Jhc2UpLCBpbnNwZWN0b3IpOworfQorCiBzdGF0aWMg
dm9pZCB3ZWJraXRXZWJWaWV3QmFzZUNvbnRhaW5lclJlbW92ZShHdGtDb250YWluZXIqIGNvbnRh
aW5lciwgR3RrV2lkZ2V0KiB3aWRnZXQpCiB7CiAgICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZp
ZXcgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRShjb250YWluZXIpOwpAQCAtMzAyLDYgKzMyNyw4IEBA
IHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlQ29udGFpbmVyUmVtb3ZlKEd0a0NvbnRhaW5l
ciogY29udGFpbmVyLCBHdGtXaWRnZXQqCiAgICAgaWYgKHByaXYtPmluc3BlY3RvclZpZXcgPT0g
d2lkZ2V0KSB7CiAgICAgICAgIHByaXYtPmluc3BlY3RvclZpZXcgPSAwOwogICAgICAgICBwcml2
LT5pbnNwZWN0b3JWaWV3SGVpZ2h0ID0gMDsKKyAgICB9IGVsc2UgaWYgKHByaXYtPmF1dGhlbnRp
Y2F0aW9uRGlhbG9nICYmIHByaXYtPmF1dGhlbnRpY2F0aW9uRGlhbG9nLT53aWRnZXQoKSA9PSB3
aWRnZXQpIHsKKyAgICAgICAgcHJpdi0+YXV0aGVudGljYXRpb25EaWFsb2cgPSAwOwogICAgIH0g
ZWxzZSB7CiAgICAgICAgIEFTU0VSVChwcml2LT5jaGlsZHJlbi5jb250YWlucyh3aWRnZXQpKTsK
ICAgICAgICAgcHJpdi0+Y2hpbGRyZW4ucmVtb3ZlKHdpZGdldCk7CkBAIC0zMjIsMTIgKzM0OSwx
NCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUNvbnRhaW5lckZvcmFsbChHdGtDb250
YWluZXIqIGNvbnRhaW5lciwgZ2Jvb2xlYW4gaQogCiAgICAgaWYgKGluY2x1ZGVJbnRlcm5hbHMg
JiYgcHJpdi0+aW5zcGVjdG9yVmlldykKICAgICAgICAgKCpjYWxsYmFjaykocHJpdi0+aW5zcGVj
dG9yVmlldywgY2FsbGJhY2tEYXRhKTsKKworICAgIGlmIChpbmNsdWRlSW50ZXJuYWxzICYmIHBy
aXYtPmF1dGhlbnRpY2F0aW9uRGlhbG9nKQorICAgICAgICAoKmNhbGxiYWNrKShwcml2LT5hdXRo
ZW50aWNhdGlvbkRpYWxvZy0+d2lkZ2V0KCksIGNhbGxiYWNrRGF0YSk7CiB9CiAKIHZvaWQgd2Vi
a2l0V2ViVmlld0Jhc2VDaGlsZE1vdmVSZXNpemUoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXcs
IEd0a1dpZGdldCogY2hpbGQsIGNvbnN0IEludFJlY3QmIGNoaWxkUmVjdCkKIHsKICAgICBjb25z
dCBJbnRSZWN0JiBnZW9tZXRyeSA9IHdlYlZpZXctPnByaXYtPmNoaWxkcmVuLmdldChjaGlsZCk7
Ci0KICAgICBpZiAoZ2VvbWV0cnkgPT0gY2hpbGRSZWN0KQogICAgICAgICByZXR1cm47CiAKQEAg
LTM1OSw2ICszODgsOCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUNvbnN0cnVjdGVk
KEdPYmplY3QqIG9iamVjdCkKICAgICBpZiAocHJpdi0+cmVkaXJlY3RlZFdpbmRvdykKICAgICAg
ICAgcHJpdi0+cmVkaXJlY3RlZFdpbmRvdy0+c2V0RGFtYWdlTm90aWZ5Q2FsbGJhY2socmVkaXJl
Y3RlZFdpbmRvd0RhbWFnZWRDYWxsYmFjaywgb2JqZWN0KTsKICNlbmRpZgorCisgICAgcHJpdi0+
YXV0aGVudGljYXRpb25EaWFsb2cgPSAwOwogfQogCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dM
KQpAQCAtNDAwLDYgKzQzMSwxMiBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jhc2VE
cmF3KEd0a1dpZGdldCogd2lkZ2V0LCBjYWlyb190KiBjcikKICAgICBXZWJDb3JlOjpSZWdpb24g
dW5wYWludGVkUmVnaW9uOyAvLyBUaGlzIGlzIHNpbXBseSB1bnVzZWQuCiAgICAgZHJhd2luZ0Fy
ZWEtPnBhaW50KGNyLCBjbGlwUmVjdCwgdW5wYWludGVkUmVnaW9uKTsKIAorICAgIGlmICh3ZWJW
aWV3QmFzZS0+cHJpdi0+YXV0aGVudGljYXRpb25EaWFsb2cpIHsKKyAgICAgICAgY2Fpcm9fc2V0
X29wZXJhdG9yKGNyLCBDQUlST19PUEVSQVRPUl9PVkVSKTsKKyAgICAgICAgY2Fpcm9fc2V0X3Nv
dXJjZV9yZ2JhKGNyLCAwLCAwLCAwLCAwLjUpOworICAgICAgICBjYWlyb19wYWludChjcik7Cisg
ICAgfQorCiAgICAgcmV0dXJuIEZBTFNFOwogfQogCkBAIC00MzQsNiArNDcxLDIyIEBAIHN0YXRp
YyB2b2lkIHJlc2l6ZVdlYktpdFdlYlZpZXdCYXNlRnJvbUFsbG9jYXRpb24oV2ViS2l0V2ViVmll
d0Jhc2UqIHdlYlZpZXdCYXNlCiAgICAgICAgIHZpZXdSZWN0LnNldEhlaWdodChhbGxvY2F0aW9u
LT5oZWlnaHQgLSBwcml2LT5pbnNwZWN0b3JWaWV3SGVpZ2h0KTsKICAgICB9CiAKKyAgICAvLyBU
aGUgYXV0aGVudGljYXRpb24gZGlhbG9nIGlzIGNlbnRlcmVkIGluIHRoZSB2aWV3IHJlY3QsIHdo
aWNoIG1lYW5zIHRoYXQgaXQKKyAgICAvLyBuZXZlciBvdmVybGFwcyB0aGUgd2ViIGluc3BlY3Rv
ci4gVGh1cywgd2UgbmVlZCB0byBjYWxjdWxhdGUgdGhlIGFsbG9jYXRpb24gaGVyZQorICAgIC8v
IGFmdGVyIGNhbGN1bGF0aW5nIHRoZSBpbnNwZWN0b3IgYWxsb2NhdGlvbi4KKyAgICBpZiAocHJp
di0+YXV0aGVudGljYXRpb25EaWFsb2cpIHsKKyAgICAgICAgR3RrUmVxdWlzaXRpb24gbmF0dXJh
bFNpemU7CisgICAgICAgIGd0a193aWRnZXRfZ2V0X3ByZWZlcnJlZF9zaXplKHByaXYtPmF1dGhl
bnRpY2F0aW9uRGlhbG9nLT53aWRnZXQoKSwgMCwgJm5hdHVyYWxTaXplKTsKKworICAgICAgICBH
dGtBbGxvY2F0aW9uIGNoaWxkQWxsb2NhdGlvbiA9IHsKKyAgICAgICAgICAgICh2aWV3UmVjdC53
aWR0aCgpIC0gbmF0dXJhbFNpemUud2lkdGgpIC8gMiwKKyAgICAgICAgICAgICh2aWV3UmVjdC5o
ZWlnaHQoKSAtIG5hdHVyYWxTaXplLmhlaWdodCkgLyAyLAorICAgICAgICAgICAgbmF0dXJhbFNp
emUud2lkdGgsCisgICAgICAgICAgICBuYXR1cmFsU2l6ZS5oZWlnaHQKKyAgICAgICAgfTsKKyAg
ICAgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKHByaXYtPmF1dGhlbnRpY2F0aW9uRGlhbG9n
LT53aWRnZXQoKSwgJmNoaWxkQWxsb2NhdGlvbik7CisgICAgfQorCiAjaWYgVVNFKFRFWFRVUkVf
TUFQUEVSX0dMKQogICAgIGlmIChzaXplQ2hhbmdlZCAmJiB3ZWJWaWV3QmFzZS0+cHJpdi0+cmVk
aXJlY3RlZFdpbmRvdykKICAgICAgICAgd2ViVmlld0Jhc2UtPnByaXYtPnJlZGlyZWN0ZWRXaW5k
b3ctPnJlc2l6ZSh2aWV3UmVjdC5zaXplKCkpOwpAQCAtNTE1LDYgKzU2OCw5IEBAIHN0YXRpYyBn
Ym9vbGVhbiB3ZWJraXRXZWJWaWV3QmFzZUtleVByZXNzRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQs
IEdka0V2ZW50S2V5KiBlCiAgICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlID0gV0VC
S0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KTsKICAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUq
IHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsKIAorICAgIGlmIChwcml2LT5hdXRoZW50aWNhdGlv
bkRpYWxvZykKKyAgICAgICAgcmV0dXJuIEdUS19XSURHRVRfQ0xBU1Mod2Via2l0X3dlYl92aWV3
X2Jhc2VfcGFyZW50X2NsYXNzKS0+a2V5X3ByZXNzX2V2ZW50KHdpZGdldCwgZXZlbnQpOworCiAj
aWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogICAgIGlmIChwcml2LT5mdWxsU2NyZWVuTW9kZUFj
dGl2ZSkgewogICAgICAgICBzd2l0Y2ggKGV2ZW50LT5rZXl2YWwpIHsKQEAgLTU2MSw2ICs2MTcs
MTAgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlQnV0dG9uUHJlc3NFdmVudChH
dGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRCdXQKIHsKICAgICBXZWJLaXRXZWJWaWV3QmFzZSog
d2ViVmlld0Jhc2UgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpOwogICAgIFdlYktpdFdl
YlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2OworCisgICAgaWYgKHBy
aXYtPmF1dGhlbnRpY2F0aW9uRGlhbG9nKQorICAgICAgICByZXR1cm4gVFJVRTsKKwogICAgIGd0
a193aWRnZXRfZ3JhYl9mb2N1cyh3aWRnZXQpOwogCiAgICAgaWYgKCFwcml2LT5jbGlja0NvdW50
ZXIuc2hvdWxkUHJvY2Vzc0J1dHRvbkV2ZW50KGJ1dHRvbkV2ZW50KSkKQEAgLTU3OSw2ICs2Mzks
OSBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jhc2VCdXR0b25SZWxlYXNlRXZlbnQo
R3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50QgogICAgIFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJW
aWV3QmFzZSA9IFdFQktJVF9XRUJfVklFV19CQVNFKHdpZGdldCk7CiAgICAgV2ViS2l0V2ViVmll
d0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7CiAKKyAgICBpZiAocHJpdi0+
YXV0aGVudGljYXRpb25EaWFsb2cpCisgICAgICAgIHJldHVybiBUUlVFOworCiAgICAgZ3RrX3dp
ZGdldF9ncmFiX2ZvY3VzKHdpZGdldCk7CiAgICAgcHJpdi0+cGFnZVByb3h5LT5oYW5kbGVNb3Vz
ZUV2ZW50KE5hdGl2ZVdlYk1vdXNlRXZlbnQocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2
ZW50KSwgMCAvKiBjdXJyZW50Q2xpY2tDb3VudCAqLykpOwogCkBAIC01OTAsNiArNjUzLDkgQEAg
c3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlU2Nyb2xsRXZlbnQoR3RrV2lkZ2V0KiB3
aWRnZXQsIEdka0V2ZW50U2Nyb2xsKgogICAgIFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFz
ZSA9IFdFQktJVF9XRUJfVklFV19CQVNFKHdpZGdldCk7CiAgICAgV2ViS2l0V2ViVmlld0Jhc2VQ
cml2YXRlKiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7CiAKKyAgICBpZiAocHJpdi0+YXV0aGVu
dGljYXRpb25EaWFsb2cpCisgICAgICAgIHJldHVybiBUUlVFOworCiAgICAgcHJpdi0+cGFnZVBy
b3h5LT5oYW5kbGVXaGVlbEV2ZW50KE5hdGl2ZVdlYldoZWVsRXZlbnQocmVpbnRlcnByZXRfY2Fz
dDxHZGtFdmVudCo+KGV2ZW50KSkpOwogCiAgICAgcmV0dXJuIFRSVUU7CkBAIC02MDAsNiArNjY2
LDkgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlTW90aW9uTm90aWZ5RXZlbnQo
R3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50TW8KICAgICBXZWJLaXRXZWJWaWV3QmFzZSogd2Vi
Vmlld0Jhc2UgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpOwogICAgIFdlYktpdFdlYlZp
ZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2OwogCisgICAgaWYgKHByaXYt
PmF1dGhlbnRpY2F0aW9uRGlhbG9nKQorICAgICAgICByZXR1cm4gVFJVRTsKKwogICAgIHByaXYt
PnBhZ2VQcm94eS0+aGFuZGxlTW91c2VFdmVudChOYXRpdmVXZWJNb3VzZUV2ZW50KHJlaW50ZXJw
cmV0X2Nhc3Q8R2RrRXZlbnQqPihldmVudCksIDAgLyogY3VycmVudENsaWNrQ291bnQgKi8pKTsK
IAogICAgIHJldHVybiBUUlVFOwpAQCAtNzM3LDcgKzgwNiwyMCBAQCBzdGF0aWMgdm9pZCB3ZWJr
aXRXZWJWaWV3QmFzZVBhcmVudFNldChHdGtXaWRnZXQqIHdpZGdldCwgR3RrV2lkZ2V0KiBvbGRQ
YXJlbnQpCiB7CiAgICAgaWYgKCFndGtfd2lkZ2V0X2dldF9wYXJlbnQod2lkZ2V0KSkKICAgICAg
ICAgd2Via2l0V2ViVmlld0Jhc2VTZXRUb3BsZXZlbE9uU2NyZWVuV2luZG93KFdFQktJVF9XRUJf
VklFV19CQVNFKHdpZGdldCksIDApOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmll
d0Jhc2VGb2N1cyhHdGtXaWRnZXQqIHdpZGdldCwgR3RrRGlyZWN0aW9uVHlwZSBkaXJlY3Rpb24p
Cit7CisgICAgLy8gSWYgdGhlIGF1dGhlbnRpY2F0aW9uIGRpYWxvZyBpcyBhY3RpdmUsIHdlIG5l
ZWQgdG8gZm9yd2FyZCBmb2N1cyBldmVudHMgdGhlcmUuIFRoaXMKKyAgICAvLyBlbnN1cmVzIHRo
YXQgeW91IGNhbiB0YWIgYmV0d2VlbiBlbGVtZW50cyBpbiB0aGUgYm94LgorICAgIFdlYktpdFdl
YlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9XRUJfVklFV19CQVNFKHdpZGdldCktPnBy
aXY7CisgICAgaWYgKHByaXYtPmF1dGhlbnRpY2F0aW9uRGlhbG9nKSB7CisgICAgICAgIGdib29s
ZWFuIHJldHVyblZhbHVlOworICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUocHJpdi0+YXV0
aGVudGljYXRpb25EaWFsb2ctPndpZGdldCgpLCAiZm9jdXMiLCBkaXJlY3Rpb24sICZyZXR1cm5W
YWx1ZSk7CisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICB9CiAKKyAgICByZXR1cm4g
R1RLX1dJREdFVF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9wYXJlbnRfY2xhc3MpLT5mb2N1
cyh3aWRnZXQsIGRpcmVjdGlvbik7CiB9CiAKIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19i
YXNlX2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0Jhc2VDbGFzcyogd2Via2l0V2ViVmlld0Jhc2VD
bGFzcykKQEAgLTc0OCw2ICs4MzAsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfYmFz
ZV9jbGFzc19pbml0KFdlYktpdFdlYlZpZXdCYXNlQ2xhc3MqIHdlYmtpdFdlYlZpZQogICAgIHdp
ZGdldENsYXNzLT5zaXplX2FsbG9jYXRlID0gd2Via2l0V2ViVmlld0Jhc2VTaXplQWxsb2NhdGU7
CiAgICAgd2lkZ2V0Q2xhc3MtPm1hcCA9IHdlYmtpdFdlYlZpZXdCYXNlTWFwOwogICAgIHdpZGdl
dENsYXNzLT51bm1hcCA9IHdlYmtpdFdlYlZpZXdCYXNlVW5tYXA7CisgICAgd2lkZ2V0Q2xhc3Mt
PmZvY3VzID0gd2Via2l0V2ViVmlld0Jhc2VGb2N1czsKICAgICB3aWRnZXRDbGFzcy0+Zm9jdXNf
aW5fZXZlbnQgPSB3ZWJraXRXZWJWaWV3QmFzZUZvY3VzSW5FdmVudDsKICAgICB3aWRnZXRDbGFz
cy0+Zm9jdXNfb3V0X2V2ZW50ID0gd2Via2l0V2ViVmlld0Jhc2VGb2N1c091dEV2ZW50OwogICAg
IHdpZGdldENsYXNzLT5rZXlfcHJlc3NfZXZlbnQgPSB3ZWJraXRXZWJWaWV3QmFzZUtleVByZXNz
RXZlbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJWaWV3QmFzZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oCmluZGV4IGVmMDVmMjI4OTBlYjMxZDM2NWY5Mjhj
NGYyMDE1M2ZiMGU3ZjA2MjMuLjJiZDBiYzAwMmE3NjI3NjQ1NmI5Y2Q1YzFmZGYzZWQwOTEwZTIz
NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXdCYXNlUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oCkBAIC0yOSw2ICsyOSw3IEBACiAjZGVmaW5lIFdl
YktpdFdlYlZpZXdCYXNlUHJpdmF0ZV9oCiAKICNpbmNsdWRlICJXZWJDb250ZXh0TWVudVByb3h5
R3RrLmgiCisjaW5jbHVkZSAiV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmgiCiAjaW5j
bHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlLmgiCiAj
aW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCkBAIC02NCw0ICs2NSw4IEBAIHR5cGVkZWYgdm9pZCAo
KldlYktpdFdlYlZpZXdCYXNlRG93bmxvYWRSZXF1ZXN0SGFuZGxlcikgKFdlYktpdFdlYlZpZXdC
YXNlKiwgV2ViCiB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlU2V0RG93bmxvYWRSZXF1ZXN0SGFuZGxl
cihXZWJLaXRXZWJWaWV3QmFzZSosIFdlYktpdFdlYlZpZXdCYXNlRG93bmxvYWRSZXF1ZXN0SGFu
ZGxlcik7CiB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlSGFuZGxlRG93bmxvYWRSZXF1ZXN0KFdlYktp
dFdlYlZpZXdCYXNlKiwgV2ViS2l0OjpEb3dubG9hZFByb3h5Kik7CiAKK3ZvaWQgd2Via2l0V2Vi
Vmlld0Jhc2VBZGRBdXRoZW50aWNhdGlvbkRpYWxvZyhXZWJLaXRXZWJWaWV3QmFzZSosIFdlYktp
dDo6V2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKik7Cit2b2lkIHdlYmtpdFdlYlZpZXdC
YXNlQ2FuY2VsQXV0aGVudGljYXRpb25EaWFsb2coV2ViS2l0V2ViVmlld0Jhc2UqKTsKK3ZvaWQg
d2Via2l0V2ViVmlld0Jhc2VBZGRXZWJJbnNwZWN0b3IoV2ViS2l0V2ViVmlld0Jhc2UqLCBHdGtX
aWRnZXQqIGluc3BlY3Rvcik7CisKICNlbmRpZiAvLyBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGVf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Vmlld1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXdQcml2YXRlLmgKaW5kZXggMmUxZmVkMzBlYmZmOWI0ZjQ4OGNhZGNmYzU1ODBmNDIwZGZk
NDk4MC4uNjZkYTU4NDc2YTRmNmRhNDc0ZjE1NTM5NjA3MTE1YzJlYzFjNGZkNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJp
dmF0ZS5oCkBAIC01NSw1ICs1NSw2IEBAIGJvb2wgd2Via2l0V2ViVmlld0VudGVyRnVsbFNjcmVl
bihXZWJLaXRXZWJWaWV3Kik7CiBib29sIHdlYmtpdFdlYlZpZXdMZWF2ZUZ1bGxTY3JlZW4oV2Vi
S2l0V2ViVmlldyopOwogdm9pZCB3ZWJraXRXZWJWaWV3UG9wdWxhdGVDb250ZXh0TWVudShXZWJL
aXRXZWJWaWV3KiwgV2ViS2l0OjpJbW11dGFibGVBcnJheSogcHJvcG9zZWRNZW51LCBXZWJLaXQ6
OldlYkhpdFRlc3RSZXN1bHQqKTsKIHZvaWQgd2Via2l0V2ViVmlld1N1Ym1pdEZvcm1SZXF1ZXN0
KFdlYktpdFdlYlZpZXcqLCBXZWJLaXRGb3JtU3VibWlzc2lvblJlcXVlc3QqKTsKK3ZvaWQgd2Vi
a2l0V2ViVmlld0hhbmRsZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFdlYktpdFdlYlZpZXcqLCBX
ZWJLaXQ6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkqKTsKIAogI2VuZGlmIC8vIFdlYktp
dFdlYlZpZXdQcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9n
dGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0
ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAKaW5kZXggZDRlNGNkOGJiNGJhYWMxOWY0YzhiMWZm
M2Y1YWNmZWM5YWFjOWM5MC4uMmI0MTFmZGUwN2M3YzIzMTk5NmU1OWI2ZGIwYzI3YTI3NTY0OGI3
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQ
cm94eUd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0
b3JQcm94eUd0ay5jcHAKQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
Y3JlYXRlSW5zcGVjdG9yV2luZG93KCkKICAgICBndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lO
RE9XKG1faW5zcGVjdG9yV2luZG93KSwgXygiV2ViIEluc3BlY3RvciIpKTsKICAgICBndGtfd2lu
ZG93X3NldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyhtX2luc3BlY3RvcldpbmRvdyksIGluaXRp
YWxXaW5kb3dXaWR0aCwgaW5pdGlhbFdpbmRvd0hlaWdodCk7CiAKLSAgICBndGtfY29udGFpbmVy
X2FkZChHVEtfQ09OVEFJTkVSKG1faW5zcGVjdG9yV2luZG93KSwgbV9pbnNwZWN0b3JWaWV3KTsK
KyAgICB3ZWJraXRXZWJWaWV3QmFzZUFkZFdlYkluc3BlY3RvcihXRUJLSVRfV0VCX1ZJRVdfQkFT
RShtX2luc3BlY3RvcldpbmRvdyksIG1faW5zcGVjdG9yVmlldyk7CiAgICAgZ3RrX3dpZGdldF9z
aG93KG1faW5zcGVjdG9yVmlldyk7CiAKICAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVyKEdf
T0JKRUNUKG1faW5zcGVjdG9yV2luZG93KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZtX2lu
c3BlY3RvcldpbmRvdykpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hh
bmdlTG9nCmluZGV4IDM4NzZhNjk3NzVmMDYyZWMwZjFiZWNmOWFhN2Y1NDhjYWJjYWE2MTEuLmE0
MjA4YTQ3YmRhNzNiYTU4NTU2M2IwYjBlODgwZTBlNTNhZWE3ZjEgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMi0x
MS0yOSAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAg
W0dUS10gW1dlYktpdDJdIEVtYmVkIHRoZSBIVFRQIGF1dGhlbnRpY2F0aW9uIGRpYWxvZyBpbnRv
IHRoZSBXZWJWaWV3CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMDMyNzcKKworICAgICAgICBSZXZpZXdlZCBieSBDYXJsb3MgR2FyY2lhIENhbXBvcy4K
KworICAgICAgICBTa2lwIHRoZSBuZXcgV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nIGZp
bGVzIHNvIHRoYXQgdGhleSBhcmUgbm90IHByb2Nlc3NlZAorICAgICAgICBkdXJpbmcgZ3RrZG9j
IGdlbmVyYXRpb24uCisKKyAgICAgICAgKiBndGsvZ2VuZXJhdGUtZ3RrZG9jOgorICAgICAgICAo
Z2V0X3dlYmtpdDJfb3B0aW9ucyk6CisKIDIwMTItMTEtMjcgIEFkYW0gQmFydGggIDxhYmFydGhA
d2Via2l0Lm9yZz4KIAogICAgICAgICBydW4tcGVyZi10ZXN0cyBmYWlscyBvbiBBbmRyb2lkIGJl
Y2F1c2Ugb2Ygc3RkZXJyIG91dHB1dApkaWZmIC0tZ2l0IGEvVG9vbHMvZ3RrL2dlbmVyYXRlLWd0
a2RvYyBiL1Rvb2xzL2d0ay9nZW5lcmF0ZS1ndGtkb2MKaW5kZXggZDQwZGFlYmVjMjFmZTdhY2Ex
MTMwNjk2N2NkNGIyYjU3YTdjOWIwNy4uM2VkZDEzZjNlNDY2Yzc1ZmUwZTcxMDViYTA2NTk0NTU5
YWFkOTgxYSAxMDA3NTUKLS0tIGEvVG9vbHMvZ3RrL2dlbmVyYXRlLWd0a2RvYworKysgYi9Ub29s
cy9ndGsvZ2VuZXJhdGUtZ3RrZG9jCkBAIC05OCw2ICs5OCw3IEBAIGRlZiBnZXRfd2Via2l0Ml9v
cHRpb25zKCk6CiAgICAgICAgICdpZ25vcmVkX2ZpbGVzJzogZ2xvYi5nbG9iKHNyY19wYXRoKCcq
UHJpdmF0ZS5oJykpICsgXAogICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2IuZ2xvYihzcmNf
cGF0aCgnKkNsaWVudConKSkgKyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYi5nbG9i
KHNyY19wYXRoKCdXZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUuKicpKSArIFwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBnbG9iLmdsb2Ioc3JjX3BhdGgoJ1dlYktpdDJHdGtBdXRoZW50aWNh
dGlvbkRpYWxvZy4qJykpICsgXAogICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2IuZ2xvYihz
cmNfcGF0aCgnV2ViS2l0R2VvbG9jYXRpb25Qcm92aWRlci4qJykpICsgXAogICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsb2IuZ2xvYihzcmNfcGF0aCgnV2ViS2l0VGV4dENoZWNrZXIuKicpKSAr
IFwKICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iLmdsb2IoZGVyaXZlZF9zb3VyY2VzX3Bh
dGgoJ3dlYmtpdDJndGsnLCAnd2Via2l0MicsICdXZWJLaXRNYXJzaGFsLionKSkgKyBcCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>