<?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>99914</bug_id>
          
          <creation_ts>2012-10-20 11:12:22 -0700</creation_ts>
          <short_desc>[GTK] Move soup authentication from GtkAuthenticationDialog to WebCore</short_desc>
          <delta_ts>2012-11-02 21:38:55 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>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>
          <dependson>99351</dependson>
    
    <dependson>100775</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>danw</cc>
    
    <cc>d-r</cc>
    
    <cc>gustavo</cc>
    
    <cc>rakuco</cc>
    
    <cc>svillar</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>746981</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-10-20 11:12:22 -0700</bug_when>
    <thetext>We should move the actual soup authentication from GtkAuthenticationDialog to WebCore, so that it&apos;s compatible with non-GtkAuthenticationDialog uses. Part of this work is also removing interaction with SoupPasswordManager (which will be gone from Gnome 3.8).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752792</commentid>
    <comment_count>1</comment_count>
      <attachid>171097</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-10-27 10:42:07 -0700</bug_when>
    <thetext>Created attachment 171097
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752795</commentid>
    <comment_count>2</comment_count>
      <attachid>171097</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-10-27 11:02:10 -0700</bug_when>
    <thetext>Comment on attachment 171097
Patch

Attachment 171097 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14557043</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752797</commentid>
    <comment_count>3</comment_count>
      <attachid>171098</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-10-27 11:17:02 -0700</bug_when>
    <thetext>Created attachment 171098
Fix the EFL build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752926</commentid>
    <comment_count>4</comment_count>
      <attachid>171098</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-10-28 02:26:49 -0700</bug_when>
    <thetext>Comment on attachment 171098
Fix the EFL build

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

This looks great in general, it would be great if Dan or Sergio could take a look at it too. I&apos;m fine with splitting the patch and adding the password storing support in a follow up patch, but I would wait until the other patch is ready to land both patches together. This way there&apos;s only one revision with the regression and we can make sure we won&apos;t make a release with regressions.

&gt; Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp:109
&gt; -    GOwnPtr&lt;char&gt;description(g_strdup_printf(_(&quot;A username and password are being requested by the site %s&quot;), uri-&gt;host));
&gt; -    GtkWidget* descriptionLabel = gtk_label_new(description.get());
&gt; +    String description = String::format(_(&quot;A username and password are being requested by the site %s&quot;),
&gt; +        m_challenge.protectionSpace().host().utf8().data());

I guess String::format can receive a String, so we don&apos;t need to convert it to utf8, since the whole string is going to be converted again to utf8 below in gtk_label_new. I think it would be better to use GOwnPtr&lt;char&gt; as we had and avoid charset conversions, we would only need to convert the host.

&gt; Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp:207
&gt; +    bool rememberCredentials = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(m_rememberCheckButton));
&gt; +    m_challenge.authenticationClient()-&gt;receivedCredential(m_challenge,
&gt; +        Credential(String::fromUTF8(username), String::fromUTF8(password),
&gt; +            rememberCredentials ? CredentialPersistencePermanent : CredentialPersistenceForSession));

Maybe we could split this to make it readable?

Credential credential = Credential(String::fromUTF8(username), String::fromUTF8(password), rememberCredentials ? CredentialPersistencePermanent : CredentialPersistenceForSession);
m_challenge.authenticationClient()-&gt;receivedCredential(m_challenge, credential);

&gt; Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp:210
&gt;  void GtkAuthenticationDialog::authenticationDialogResponseCallback(GtkWidget*, gint responseID, GtkAuthenticationDialog* dialog)

Shouldn&apos;t we handle here also the case when the dialog is cancelled and call authenticationClient()-&gt;receivedCancellation() so that the message is unpaused? or where is it handled?

&gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:868
&gt; +    if (client()) {
&gt; +        soup_session_pause_message(challenge.soupSession(), challenge.soupMessage());
&gt;          client()-&gt;didReceiveAuthenticationChallenge(this, challenge);
&gt; +    }

I&apos;m not sure if it can happen, but the message is only paused when there&apos;s a client, but unpaused in the methods below without checking the client. So, I think we should either check for the client below in the other methods, or rather pause always the message here.

&gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:878
&gt; +    soup_session_unpause_message(challenge.soupSession(), challenge.soupMessage());
&gt; +
&gt; +    clearAuthentication();

This is repeated in the two methods below, maybe we can add a simple helper finishAuthentication() that unpuases the message and clears the authentication.

&gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:1069
&gt;      // We don&apos;t need to pass a client here, because GTK+ does not yet use the AuthenticationClient to
&gt;      // respond to the AuthenticationChallenge -- instead dealing with the Soup objects directly.

Should we remove this comment now that we are passing the client?

&gt; Source/WebKit/gtk/webkit/webkitsoupauthdialog.cpp:78
&gt; +    GRefPtr&lt;SoupSession&gt; m_session;

This is unused, no?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752943</commentid>
    <comment_count>5</comment_count>
      <attachid>171098</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-10-28 08:52:13 -0700</bug_when>
    <thetext>Comment on attachment 171098
Fix the EFL build

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

&gt;&gt; Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp:109
&gt;&gt; +        m_challenge.protectionSpace().host().utf8().data());
&gt; 
&gt; I guess String::format can receive a String, so we don&apos;t need to convert it to utf8, since the whole string is going to be converted again to utf8 below in gtk_label_new. I think it would be better to use GOwnPtr&lt;char&gt; as we had and avoid charset conversions, we would only need to convert the host.

C++ objects cannot be passed through varargs, so String::format cannot take a string. I think performance isn&apos;t such a huge issue here. Also consider that we&apos;d be doing charset conversion anyway to convert m_challenge.protectionSpace().host() to UTF-8, so the performance difference is linear.

&gt;&gt; Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp:207
&gt;&gt; +            rememberCredentials ? CredentialPersistencePermanent : CredentialPersistenceForSession));
&gt; 
&gt; Maybe we could split this to make it readable?
&gt; 
&gt; Credential credential = Credential(String::fromUTF8(username), String::fromUTF8(password), rememberCredentials ? CredentialPersistencePermanent : CredentialPersistenceForSession);
&gt; m_challenge.authenticationClient()-&gt;receivedCredential(m_challenge, credential);

I split this into two lines.

&gt;&gt; Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp:210
&gt;&gt;  void GtkAuthenticationDialog::authenticationDialogResponseCallback(GtkWidget*, gint responseID, GtkAuthenticationDialog* dialog)
&gt; 
&gt; Shouldn&apos;t we handle here also the case when the dialog is cancelled and call authenticationClient()-&gt;receivedCancellation() so that the message is unpaused? or where is it handled?

Yes, good catch.

&gt;&gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:868
&gt;&gt; +    }
&gt; 
&gt; I&apos;m not sure if it can happen, but the message is only paused when there&apos;s a client, but unpaused in the methods below without checking the client. So, I think we should either check for the client below in the other methods, or rather pause always the message here.

The methods below are only called from the client, so it&apos;s correct here to only pause the message if there&apos;s a client. If we pause the message with no client, it will never be unpaused. The tricky bit is ensuring that the client always responds to the authentication client interface implementation. I&apos;m thinking about ways to make that a little less error prone.

&gt;&gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:878
&gt;&gt; +    clearAuthentication();
&gt; 
&gt; This is repeated in the two methods below, maybe we can add a simple helper finishAuthentication() that unpuases the message and clears the authentication.

I actually tried this, but it ended up adding more code than removing.

&gt;&gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:1069
&gt;&gt;      // respond to the AuthenticationChallenge -- instead dealing with the Soup objects directly.
&gt; 
&gt; Should we remove this comment now that we are passing the client?

Yes. Thought I did. :)

&gt;&gt; Source/WebKit/gtk/webkit/webkitsoupauthdialog.cpp:78
&gt;&gt; +    GRefPtr&lt;SoupSession&gt; m_session;
&gt; 
&gt; This is unused, no?

Yes. Left over from before the challenge carried a SoupSession.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752944</commentid>
    <comment_count>6</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-10-28 08:54:43 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 171098 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=171098&amp;action=review
&gt; 
&gt; This looks great in general, it would be great if Dan or Sergio could take a look at it too. I&apos;m fine with splitting the patch and adding the password storing support in a follow up patch, but I would wait until the other patch is ready to land both patches together. This way there&apos;s only one revision with the regression and we can make sure we won&apos;t make a release with regressions.
 
I&apos;d prefer to do it in a way that the patches don&apos;t bitrot and sit on the bugs for a long time. I&apos;ll coordinate with you about the release and ensure that cross-session storage is in place for release-time. That&apos;s better for me than just letting the patches sit here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752963</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-10-28 10:31:58 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 171098 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=171098&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp:109
&gt; &gt;&gt; +        m_challenge.protectionSpace().host().utf8().data());
&gt; &gt; 
&gt; &gt; I guess String::format can receive a String, so we don&apos;t need to convert it to utf8, since the whole string is going to be converted again to utf8 below in gtk_label_new. I think it would be better to use GOwnPtr&lt;char&gt; as we had and avoid charset conversions, we would only need to convert the host.
&gt; 
&gt; C++ objects cannot be passed through varargs, so String::format cannot take a string. I think performance isn&apos;t such a huge issue here. Also consider that we&apos;d be doing charset conversion anyway to convert m_challenge.protectionSpace().host() to UTF-8, so the performance difference is linear.

Yes, but as I said we would only need to convert the host. It&apos;s not a huge performance penalty, of course, but why using String when what we need is a utf8 char* to pass it to soup?

&gt; &gt;&gt; Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp:207
&gt; &gt;&gt; +            rememberCredentials ? CredentialPersistencePermanent : CredentialPersistenceForSession));
&gt; &gt; 
&gt; &gt; Maybe we could split this to make it readable?
&gt; &gt; 
&gt; &gt; Credential credential = Credential(String::fromUTF8(username), String::fromUTF8(password), rememberCredentials ? CredentialPersistencePermanent : CredentialPersistenceForSession);
&gt; &gt; m_challenge.authenticationClient()-&gt;receivedCredential(m_challenge, credential);
&gt; 
&gt; I split this into two lines.

Thanks :-)

&gt; &gt;&gt; Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp:210
&gt; &gt;&gt;  void GtkAuthenticationDialog::authenticationDialogResponseCallback(GtkWidget*, gint responseID, GtkAuthenticationDialog* dialog)
&gt; &gt; 
&gt; &gt; Shouldn&apos;t we handle here also the case when the dialog is cancelled and call authenticationClient()-&gt;receivedCancellation() so that the message is unpaused? or where is it handled?
&gt; 
&gt; Yes, good catch.
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:868
&gt; &gt;&gt; +    }
&gt; &gt; 
&gt; &gt; I&apos;m not sure if it can happen, but the message is only paused when there&apos;s a client, but unpaused in the methods below without checking the client. So, I think we should either check for the client below in the other methods, or rather pause always the message here.
&gt; 
&gt; The methods below are only called from the client, so it&apos;s correct here to only pause the message if there&apos;s a client. If we pause the message with no client, it will never be unpaused. The tricky bit is ensuring that the client always responds to the authentication client interface implementation. I&apos;m thinking about ways to make that a little less error prone.

Ah, I see, what confused me was that the other functions also check if client() is NULL.

&gt; &gt;&gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:878
&gt; &gt;&gt; +    clearAuthentication();
&gt; &gt; 
&gt; &gt; This is repeated in the two methods below, maybe we can add a simple helper finishAuthentication() that unpuases the message and clears the authentication.
&gt; 
&gt; I actually tried this, but it ended up adding more code than removing.

Yes, indeed :-)

&gt; &gt;&gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:1069
&gt; &gt;&gt;      // respond to the AuthenticationChallenge -- instead dealing with the Soup objects directly.
&gt; &gt; 
&gt; &gt; Should we remove this comment now that we are passing the client?
&gt; 
&gt; Yes. Thought I did. :)
&gt; 
&gt; &gt;&gt; Source/WebKit/gtk/webkit/webkitsoupauthdialog.cpp:78
&gt; &gt;&gt; +    GRefPtr&lt;SoupSession&gt; m_session;
&gt; &gt; 
&gt; &gt; This is unused, no?
&gt; 
&gt; Yes. Left over from before the challenge carried a SoupSession.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752964</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-10-28 10:34:55 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #4)
&gt; &gt; (From update of attachment 171098 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=171098&amp;action=review
&gt; &gt; 
&gt; &gt; This looks great in general, it would be great if Dan or Sergio could take a look at it too. I&apos;m fine with splitting the patch and adding the password storing support in a follow up patch, but I would wait until the other patch is ready to land both patches together. This way there&apos;s only one revision with the regression and we can make sure we won&apos;t make a release with regressions.
&gt; 
&gt; I&apos;d prefer to do it in a way that the patches don&apos;t bitrot and sit on the bugs for a long time. I&apos;ll coordinate with you about the release and ensure that cross-session storage is in place for release-time. That&apos;s better for me than just letting the patches sit here.

Don&apos;t you think you will have a patch for that soon? I don&apos;t like landing patches introducing regressions if there isn&apos;t a good reason. I know having patches pending in bugzilla is a pain, though, but I&apos;m not sure it&apos;s enough reason to introduce regressions, tbh.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752967</commentid>
    <comment_count>9</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-10-28 10:54:24 -0700</bug_when>
    <thetext>(In reply to comment #8)

&gt; Don&apos;t you think you will have a patch for that soon? I don&apos;t like landing patches introducing regressions if there isn&apos;t a good reason. I know having patches pending in bugzilla is a pain, though, but I&apos;m not sure it&apos;s enough reason to introduce regressions, tbh.

One thing that I can do is to hide this new work behind a flag. That way we can land the patches and then just flip the flag and remove the old code when it&apos;s complete.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754708</commentid>
    <comment_count>10</comment_count>
      <attachid>171528</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-10-30 15:19:35 -0700</bug_when>
    <thetext>Created attachment 171528
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754752</commentid>
    <comment_count>11</comment_count>
      <attachid>171541</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-10-30 15:59:52 -0700</bug_when>
    <thetext>Created attachment 171541
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754753</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-30 16:02:17 -0700</bug_when>
    <thetext>Attachment 171541 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u...&quot; exit_code: 1
Source/WebCore/platform/network/gtk/CredentialBackingStore.cpp:64:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 1 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>754757</commentid>
    <comment_count>13</comment_count>
      <attachid>171528</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-10-30 16:10:08 -0700</bug_when>
    <thetext>Comment on attachment 171528
Patch

Whoops. Wrong patch for this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756095</commentid>
    <comment_count>14</comment_count>
      <attachid>171528</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-11-01 04:41:33 -0700</bug_when>
    <thetext>Comment on attachment 171528
Patch

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

&gt; Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp:112
&gt; -    SoupURI* uri = soup_message_get_uri(m_message.get());
&gt; -    GOwnPtr&lt;char&gt;description(g_strdup_printf(_(&quot;A username and password are being requested by the site %s&quot;), uri-&gt;host));
&gt; -    GtkWidget* descriptionLabel = gtk_label_new(description.get());
&gt; +    String description = String::format(_(&quot;A username and password are being requested by the site %s&quot;),
&gt; +        m_challenge.protectionSpace().host().utf8().data());
&gt; +    GtkWidget* descriptionLabel = gtk_label_new(description.utf8().data());

This is causing encoding issues in the dialog label, I guess it&apos;s because String::format expects char* but not necessarily a utf8 encoded char*. I still think previous code was simpler and more efficient.

&gt; Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp:266
&gt;      dialog-&gt;destroy();
&gt; +    dialog-&gt;m_challenge.authenticationClient()-&gt;receivedCancellation(dialog-&gt;m_challenge);

When the dialog is cancelled, ::destroy() deletes the object immediately, so you shouldn&apos;t use the object after calling destroy.

&gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:875
&gt; +    if (challenge != d-&gt;m_currentWebChallenge)
&gt; +        return;

I think we should implement AuthenticationChallenge::platformCompare() to make sure we don&apos;t unpause a different soup message.

&gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:903
&gt; +    if (client())
&gt; +        client()-&gt;receivedCancellation(this, challenge);
&gt; +    soup_session_unpause_message(challenge.soupSession(), challenge.soupMessage());

This doesn&apos;t work, ResourceLoader::receivedCancellation() cancels the load operation, so when soup_session_unpause_message() is called the message is not in the queue anymore. I think we should not notify the client, and just unpause the message to continue with the load instead of cancelling it as we have always done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756136</commentid>
    <comment_count>15</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-11-01 05:54:52 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 171528 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=171528&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp:112
&gt; &gt; -    SoupURI* uri = soup_message_get_uri(m_message.get());
&gt; &gt; -    GOwnPtr&lt;char&gt;description(g_strdup_printf(_(&quot;A username and password are being requested by the site %s&quot;), uri-&gt;host));
&gt; &gt; -    GtkWidget* descriptionLabel = gtk_label_new(description.get());
&gt; &gt; +    String description = String::format(_(&quot;A username and password are being requested by the site %s&quot;),
&gt; &gt; +        m_challenge.protectionSpace().host().utf8().data());
&gt; &gt; +    GtkWidget* descriptionLabel = gtk_label_new(description.utf8().data());
&gt; 
&gt; This is causing encoding issues in the dialog label, I guess it&apos;s because String::format expects char* but not necessarily a utf8 encoded char*. I still think previous code was simpler and more efficient.

Do you mind elaborating about what encoding issues this is causing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756213</commentid>
    <comment_count>16</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-11-01 07:18:46 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; (From update of attachment 171528 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=171528&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp:112
&gt; &gt; &gt; -    SoupURI* uri = soup_message_get_uri(m_message.get());
&gt; &gt; &gt; -    GOwnPtr&lt;char&gt;description(g_strdup_printf(_(&quot;A username and password are being requested by the site %s&quot;), uri-&gt;host));
&gt; &gt; &gt; -    GtkWidget* descriptionLabel = gtk_label_new(description.get());
&gt; &gt; &gt; +    String description = String::format(_(&quot;A username and password are being requested by the site %s&quot;),
&gt; &gt; &gt; +        m_challenge.protectionSpace().host().utf8().data());
&gt; &gt; &gt; +    GtkWidget* descriptionLabel = gtk_label_new(description.utf8().data());
&gt; &gt; 
&gt; &gt; This is causing encoding issues in the dialog label, I guess it&apos;s because String::format expects char* but not necessarily a utf8 encoded char*. I still think previous code was simpler and more efficient.
&gt; 
&gt; Do you mind elaborating about what encoding issues this is causing?

With your patch:

El sitio foobar.com estÃ¡ solicitando un nombre de usuario y una contraseÃ±a

With the current code:

El sitio foobar.com está solicitando un nombre de usuario y una contraseña</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756317</commentid>
    <comment_count>17</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-11-01 09:03:49 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 171528 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=171528&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp:112
&gt; &gt; -    SoupURI* uri = soup_message_get_uri(m_message.get());
&gt; &gt; -    GOwnPtr&lt;char&gt;description(g_strdup_printf(_(&quot;A username and password are being requested by the site %s&quot;), uri-&gt;host));
&gt; &gt; -    GtkWidget* descriptionLabel = gtk_label_new(description.get());
&gt; &gt; +    String description = String::format(_(&quot;A username and password are being requested by the site %s&quot;),
&gt; &gt; +        m_challenge.protectionSpace().host().utf8().data());
&gt; &gt; +    GtkWidget* descriptionLabel = gtk_label_new(description.utf8().data());
&gt; 
&gt; This is causing encoding issues in the dialog label, I guess it&apos;s because String::format expects char* but not necessarily a utf8 encoded char*. I still think previous code was simpler and more efficient.

Okay. I&apos;ll use GOwnPtr&lt;char*&gt; again.

&gt; 
&gt; &gt; Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp:266
&gt; &gt;      dialog-&gt;destroy();
&gt; &gt; +    dialog-&gt;m_challenge.authenticationClient()-&gt;receivedCancellation(dialog-&gt;m_challenge);
&gt; 
&gt; When the dialog is cancelled, ::destroy() deletes the object immediately, so you shouldn&apos;t use the object after calling destroy.

Nice catch! Yeah, that&apos;s some particularly stupid code that I wrote there.

&gt; 
&gt; &gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:875
&gt; &gt; +    if (challenge != d-&gt;m_currentWebChallenge)
&gt; &gt; +        return;
&gt; 
&gt; I think we should implement AuthenticationChallenge::platformCompare() to make sure we don&apos;t unpause a different soup message.

Okay.

&gt; &gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:903
&gt; &gt; +    if (client())
&gt; &gt; +        client()-&gt;receivedCancellation(this, challenge);
&gt; &gt; +    soup_session_unpause_message(challenge.soupSession(), challenge.soupMessage());
&gt; 
&gt; This doesn&apos;t work, ResourceLoader::receivedCancellation() cancels the load operation, so when soup_session_unpause_message() is called the message is not in the queue anymore. I think we should not notify the client, and just unpause the message to continue with the load instead of cancelling it as we have always done.

Your suggestion would make receivedCancellation equivalent to receivedRequestToContinueWithoutCredential, I think. Instead I&apos;ll reorder these statements to avoid the assertion failure and call receivedRequestToContinueWithoutCredential from GtkAuthenticationDialog to preserve the current behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756318</commentid>
    <comment_count>18</comment_count>
      <attachid>171866</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-11-01 09:07:41 -0700</bug_when>
    <thetext>Created attachment 171866
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756347</commentid>
    <comment_count>19</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-11-01 09:37:55 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #14)
&gt; &gt; (From update of attachment 171528 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=171528&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp:112
&gt; &gt; &gt; -    SoupURI* uri = soup_message_get_uri(m_message.get());
&gt; &gt; &gt; -    GOwnPtr&lt;char&gt;description(g_strdup_printf(_(&quot;A username and password are being requested by the site %s&quot;), uri-&gt;host));
&gt; &gt; &gt; -    GtkWidget* descriptionLabel = gtk_label_new(description.get());
&gt; &gt; &gt; +    String description = String::format(_(&quot;A username and password are being requested by the site %s&quot;),
&gt; &gt; &gt; +        m_challenge.protectionSpace().host().utf8().data());
&gt; &gt; &gt; +    GtkWidget* descriptionLabel = gtk_label_new(description.utf8().data());
&gt; &gt; 
&gt; &gt; This is causing encoding issues in the dialog label, I guess it&apos;s because String::format expects char* but not necessarily a utf8 encoded char*. I still think previous code was simpler and more efficient.
&gt; 
&gt; Okay. I&apos;ll use GOwnPtr&lt;char*&gt; again.

Thanks.

&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp:266
&gt; &gt; &gt;      dialog-&gt;destroy();
&gt; &gt; &gt; +    dialog-&gt;m_challenge.authenticationClient()-&gt;receivedCancellation(dialog-&gt;m_challenge);
&gt; &gt; 
&gt; &gt; When the dialog is cancelled, ::destroy() deletes the object immediately, so you shouldn&apos;t use the object after calling destroy.
&gt; 
&gt; Nice catch! Yeah, that&apos;s some particularly stupid code that I wrote there.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:875
&gt; &gt; &gt; +    if (challenge != d-&gt;m_currentWebChallenge)
&gt; &gt; &gt; +        return;
&gt; &gt; 
&gt; &gt; I think we should implement AuthenticationChallenge::platformCompare() to make sure we don&apos;t unpause a different soup message.
&gt; 
&gt; Okay.
&gt; 
&gt; &gt; &gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:903
&gt; &gt; &gt; +    if (client())
&gt; &gt; &gt; +        client()-&gt;receivedCancellation(this, challenge);
&gt; &gt; &gt; +    soup_session_unpause_message(challenge.soupSession(), challenge.soupMessage());
&gt; &gt; 
&gt; &gt; This doesn&apos;t work, ResourceLoader::receivedCancellation() cancels the load operation, so when soup_session_unpause_message() is called the message is not in the queue anymore. I think we should not notify the client, and just unpause the message to continue with the load instead of cancelling it as we have always done.
&gt; 
&gt; Your suggestion would make receivedCancellation equivalent to receivedRequestToContinueWithoutCredential, I think. Instead I&apos;ll reorder these statements to avoid the assertion failure and call receivedRequestToContinueWithoutCredential from GtkAuthenticationDialog to preserve the current behavior.

Indeed, it makes a lot of sense because we want to continue in the end. I wonder when receivedCancellation is supposed to be called, though. Note that CF backend doesn&apos;t call clearAuthentication(); in receivedCancellation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756398</commentid>
    <comment_count>20</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-11-01 10:12:51 -0700</bug_when>
    <thetext>
&gt; Indeed, it makes a lot of sense because we want to continue in the end. I wonder when receivedCancellation is supposed to be called, though. Note that CF backend doesn&apos;t call clearAuthentication(); in receivedCancellation.

Yeah, I noticed that as well. When I was implementing, I wanted to be a bit more cautious and consistent.  It&apos;s probably doesn&apos;t matter a great deal either way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756982</commentid>
    <comment_count>21</comment_count>
      <attachid>171866</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-11-02 01:57:36 -0700</bug_when>
    <thetext>Comment on attachment 171866
Patch

Perfect! Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>757547</commentid>
    <comment_count>22</comment_count>
      <attachid>171866</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-02 13:53:53 -0700</bug_when>
    <thetext>Comment on attachment 171866
Patch

Rejecting attachment 171866 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
unk #2 succeeded at 869 with fuzz 2 (offset 10 lines).
Hunk #3 succeeded at 1121 with fuzz 2 (offset 56 lines).
patching file Source/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp
patching file Source/WebKit/gtk/webkit/webkitsoupauthdialog.cpp
patching file Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebFrameLoaderClientGtk.cpp

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--force&apos;, u&apos;--reviewer&apos;, u&apos;Carlos Gar...&quot; exit_code: 1 cwd: /mnt/git/webkit-commit-queue

Full output: http://queues.webkit.org/results/14692941</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>757888</commentid>
    <comment_count>23</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-11-02 21:38:55 -0700</bug_when>
    <thetext>Committed r133389: &lt;http://trac.webkit.org/changeset/133389&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171097</attachid>
            <date>2012-10-27 10:42:07 -0700</date>
            <delta_ts>2012-10-27 11:16:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99914-20121027104037.patch</filename>
            <type>text/plain</type>
            <size>27786</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyMjg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjk3ZDczNThlMjllYTM4
YTdlYWI3ODRiNWRjOWYxYWVjMDFhMWFkOC4uNzk1YWNiNDE2M2UyN2NhNzg2YmZhYTUzYzIwZTM3
NDAzYTAyYTExZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTEwLTI1ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBNb3Zl
IHNvdXAgYXV0aGVudGljYXRpb24gZnJvbSBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyB0byBXZWJD
b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTkx
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUg
dGhlIGFjdHVhbCBzb3VwIGF1dGhlbnRpY2F0aW9uIGNvZGUgZnJvbSB0aGUgR3RrQXV0aGVudGlj
YXRpb25EaWFsb2cgdG8gUmVzb3VyY2VIYW5kbGVTb3VwLgorICAgICAgICBUaGlzIGFsbG93cyBh
IG1vcmUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBvZiBhdXRoZW50aWNhdGlvbiwgZm9yIGV4YW1w
bGUsIG9uZSB3aGVyZSBhIFdlYktpdDIKKyAgICAgICAgY2xpZW50IGNhbiBjb21wbGV0ZWx5IGhh
bmRsZSBhdXRoZW50aWNhdGlvbi4KKworICAgICAgICBUaGlzIGNoYW5nZSBlZmZlY3RpdmVseSBy
ZW1vdmVzIHN1cHBvcnQgZm9yIGNyb3NzLXNlc3Npb24gY3JlZGVudGlhbCBzdG9yYWdlLCBidXQg
aXQgd2lsbCBiZQorICAgICAgICByZS1hZGRlZCBpbiBmb2xsb3d1cCBjaGFuZ2VzIHRoYXQgYWRk
IENyZWRlbnRpYWxTdG9yZSBpbnRlcmFjdGlvbiBmb3IgV2ViS2l0R1RLKyAobGlrZWx5IHZpYQor
ICAgICAgICBsaWJzZWNyZXQpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBzaG91bGQg
bm90IGNoYW5nZSB0ZXN0YWJsZSBiZWhhdmlvciAoY3Jvc3Mtc2Vzc2lvbiBjcmVkZW50aWFsIHN0
b3JhZ2UgaXNuJ3QgdGVzdGVkKS4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9HdGtBdXRoZW50
aWNhdGlvbkRpYWxvZy5jcHA6IFJlbW92ZSByZWZlcmVuY2VzIHRvIHRoZSBTb3VwUGFzc3dvcmRN
YW5hZ2VyLCB3aGljaAorICAgICAgICBpcyBnb2luZyBhd2F5IGluIHRoZSBuZXh0IHJlbGVhc2Ug
b2YgR25vbWUuIEluc3RlYWQgd2UgYWx3YXlzIGFzc3VtZSB0aGF0IHRoZSBhdXRoZW50aWNhdGlv
biBiYWNrZW5kIGhhcworICAgICAgICBzdXBwb3J0IGZvciByZW1lbWJlcmluZyBwYXNzd29yZHMg
YW5kIHBhc3MgdGhhdCBpbmZvcm1hdGlvbiBhbG9uZyB3aXRoIHRoZSBhbnN3ZXIgdG8gdGhlIGF1
dGhlbnRpY2F0aW9uCisgICAgICAgIHJlcXVlc3QuCisKKyAgICAgICAgVGhlIHJlc3Qgb2YgdGhl
IGNoYW5nZXMgdG8gdGhpcyBjbGFzcyBjYW4gYmUgc3VtbWFyaXplZCBhczoKKyAgICAgICAgMS4g
R2V0dGluZyB0aGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgQXV0aGVudGljYXRpb25DaGFsbGVuZ2Ug
aW5zdGVhZCBvZiBkaXJlY3RseSBmcm9tIHRoZSBsaWJzb3VwCisgICAgICAgICAgIG9iamVjdHMu
CisgICAgICAgIDIuIFVzaW5nIHRoZSBBdXRoZW50aWNhdGlvbkNsaWVudCB0byBhY2NvbXBsaXNo
IHRoZSBhdXRoZW50aWNhdGlvbiBpbnN0ZWFkIG9mIHRhbGtpbmcgdG8gbGlic291cAorICAgICAg
ICAgICBkaXJlY3RseS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25E
aWFsb2cuaDoKKyAgICAgICAgKEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKTogUmVtb3ZlIG1lbWJl
cnMgd2hpY2ggYXJlIG5vIGxvbmdlciB1c2VkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VIYW5kbGUuaDoKKyAgICAgICAgKFJlc291cmNlSGFuZGxlKTogUmVzb3VyY2VIYW5k
bGVTb3VwIG5vdyBpbXBsZW1lbnRzIHRoZSBlbnRpcmUgQXV0aGVudGljYXRpb25DbGllbnQgaW50
ZXJmYWNlLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNv
dXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyOjpkaWRS
ZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOiBEb24ndCBoYW5kbGUgYXV0aGVudGljYXRp
b24KKyAgICAgICAgZm9yIHN5bmNocm9ub3VzIGhhbmRsZXMuCisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUhhbmRsZTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKTogTm93IHNl
dCB0aGUgY3VycmVudCBjaGFsbGVuZ2Ugb24KKyAgICAgICAgdGhlIGludGVybmFsIGRhdGEgc3Ry
dWN0dXJlLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnJlY2VpdmVkUmVxdWVz
dFRvQ29udGludWVXaXRob3V0Q3JlZGVudGlhbCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VIYW5kbGU6OnJlY2VpdmVkQ3JlZGVudGlhbCk6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VIYW5kbGU6OnJlY2VpdmVkQ2FuY2VsbGF0aW9uKTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjphdXRoZW5pY2F0ZUNhbGxiYWNrKTogUGFzcyB0aGUgaGFuZGxlIGFzIHRo
ZSBhdXRoZW50aWNhdGlvbiBjbGllbnQuCisKIDIwMTItMTAtMjMgIE1hcnRpbiBSb2JpbnNvbiAg
PG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdW1NvdXBdIEltcGxlbWVudCB0
aGUgZGVmYXVsdCBhdXRoZW50aWNhdGlvbiBkaWFsb2cgdmlhIFdlYkNvcmVTdXBwb3J0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9D
aGFuZ2VMb2cKaW5kZXggMTUwMWJlN2Y1NjZmZjEyNzFiOThmNzkzZGViNzVhYTAxYWIyNjhhNS4u
MTgzNGY0MDE0MTUxZTVlOWFlM2QxMWQyM2Y4ODMyMzY5NzM0YTUyYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDIyIEBACisyMDEyLTEwLTI1ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5z
b25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBNb3ZlIHNvdXAgYXV0aGVudGljYXRpb24g
ZnJvbSBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyB0byBXZWJDb3JlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTkxNAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBjYWxscyB3aGljaCBhY3R1YWxseSBh
dXRoZW50aWNhdGUgYSBzb3VwIG1lc3NhZ2UgYXJlIGdvbmUgZnJvbSB0aGUgR3RrQXV0aGVudGlj
YXRpb25EaWFsb2cuIFNpbmNlIHRoZQorICAgICAgICBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyBl
eHBvc2VkIGJ5IHRoZSBXZWJLaXRTb3VwQXV0aGVudGljYXRpb24gY2xhc3MgaW4gdGhlIEdUSysg
QVBJIHdvcmsgd2l0aG91dCBhCisgICAgICAgIFJlc291cmNlSGFuZGxlICh0aGV5IGFyZSBtb3Jl
IGdlbmVyYWwpLCB3ZSBhZGQgYSBXZWJLaXRTb3VwQXV0aERpYWxvZ0F1dGhlbnRpY2F0aW9uQ2xp
ZW50IGFkZGVkIHRvIGF2b2lkCisgICAgICAgIGJyZWFraW5nIEFQSS4gVGhpcyBpcyB1bnVzZWQg
YnkgZWl0aGVyIEVwaXBoYW55IG9yIGludGVybmFsbHkgaW4gV2ViS2l0R1RLKy4KKworICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKTogVGhlIGF1dGhlbnRpY2F0aW9uIGRpYWxvZworICAgICAgICBub3cganVzdCB0
YWtlcyB0aGUgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgaW5zdGVhZCBvZiB0aGUgbGlic291cCBv
YmplY3RzLgorICAgICAgICAqIHdlYmtpdC93ZWJraXRzb3VwYXV0aGRpYWxvZy5jcHA6CisgICAg
ICAgIChXZWJLaXRTb3VwQXV0aERpYWxvZ0F1dGhlbnRpY2F0aW9uQ2xpZW50KTogQWRkZWQgdGhp
cyBoZWxwZXIuCisgICAgICAgIChzZXNzaW9uQXV0aGVudGljYXRlKTogVXNlIHRoZSBuZXcgV2Vi
S2l0U291cEF1dGhEaWFsb2dBdXRoZW50aWNhdGlvbkNsaWVudC4KKwogMjAxMi0xMC0yMyAgTWFy
dGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS11bU291
cF0gSW1wbGVtZW50IHRoZSBkZWZhdWx0IGF1dGhlbnRpY2F0aW9uIGRpYWxvZyB2aWEgV2ViQ29y
ZVN1cHBvcnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwppbmRleCBjMzNiNzE4NGIwNDUyMDFiMGYyOGJiZjNjOWJiMTQ4MmYw
ZWQ2MTE2Li42MmE3ODVmYzFhYmM4YzJkMTNiNjMwNDU3YTZlZjg4ZDllODRkZmQ3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMTAtMjUgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2Jp
bnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIE1vdmUgc291cCBhdXRoZW50aWNhdGlv
biBmcm9tIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nIHRvIFdlYkNvcmUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5OTE0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5zdGVhZCBvZiBwYXNzaW5nIHRoZSBs
aWJzb3VwIG9iamVjdHMgdG8gdGhlIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLCBwYXNzIHRoZQor
ICAgICAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSBpdHNlbGYuCisKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJGcmFtZUxvYWRlckNsaWVudEd0ay5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2VpdmVB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisKIDIwMTItMTAtMjMgIE1hcnRpbiBSb2JpbnNvbiAg
PG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdW1NvdXBdIEltcGxlbWVudCB0
aGUgZGVmYXVsdCBhdXRoZW50aWNhdGlvbiBkaWFsb2cgdmlhIFdlYkNvcmVTdXBwb3J0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFs
b2cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlh
bG9nLmNwcAppbmRleCAzNmJkMzFiMWVhNTEzZjUyNTYyOWQ4ZDkwMmJjZGMwZTU5YWZhODVmLi5k
NTg4NjY2Y2EyOWU2YzgzYjJhYmFhYmEzMGQ0YWRjMGRkOWVmYzZkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5jcHAK
QEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJHdGtBdXRo
ZW50aWNhdGlvbkRpYWxvZy5oIgogCisjaW5jbHVkZSAiQ3JlZGVudGlhbC5oIgogI2luY2x1ZGUg
Ikd0a1ZlcnNpb25pbmcuaCIKICNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgogI2luY2x1ZGUg
PGd0ay9ndGsuaD4KQEAgLTU0LDMxICs1NSwxNiBAQCBzdGF0aWMgR3RrV2lkZ2V0KiBhZGRFbnRy
eVRvR3JpZChHdGtHcmlkKiBncmlkLCBpbnQgcm93LCBjb25zdCBjaGFyKiBsYWJlbFRleHQpCiAg
ICAgcmV0dXJuIGVudHJ5OwogfQogCi1zdGF0aWMgYm9vbCBzZXNzaW9uQ2FuU2F2ZVBhc3N3b3Jk
cyhTb3VwU2Vzc2lvbiogc2Vzc2lvbikKLXsKLSNpZmRlZiBTT1VQX1RZUEVfUEFTU1dPUkRfTUFO
QUdFUgotICAgIHJldHVybiBzb3VwX3Nlc3Npb25fZ2V0X2ZlYXR1cmUoc2Vzc2lvbiwgU09VUF9U
WVBFX1BBU1NXT1JEX01BTkFHRVIpOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYK
LX0KLQogR3RrQXV0aGVudGljYXRpb25EaWFsb2c6On5HdGtBdXRoZW50aWNhdGlvbkRpYWxvZygp
CiB7CiB9CiAKLUd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpHdGtBdXRoZW50aWNhdGlvbkRpYWxv
ZyhHdGtXaW5kb3cqIHBhcmVudFdpbmRvdywgU291cFNlc3Npb24qIHNlc3Npb24sIFNvdXBNZXNz
YWdlKiBtZXNzYWdlLCBTb3VwQXV0aCogYXV0aCkKLSAgICA6IG1fZGlhbG9nKGd0a19kaWFsb2df
bmV3KCkpCi0gICAgLCBtX3Nlc3Npb24oc2Vzc2lvbikKLSAgICAsIG1fbWVzc2FnZShtZXNzYWdl
KQotICAgICwgbV9hdXRoKGF1dGgpCitHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6R3RrQXV0aGVu
dGljYXRpb25EaWFsb2coR3RrV2luZG93KiBwYXJlbnRXaW5kb3csIGNvbnN0IEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UpCisgICAgOiBtX2NoYWxsZW5nZShjaGFsbGVuZ2UpCisg
ICAgLCBtX2RpYWxvZyhndGtfZGlhbG9nX25ldygpKQogICAgICwgbV9sb2dpbkVudHJ5KDApCiAg
ICAgLCBtX3Bhc3N3b3JkRW50cnkoMCkKICAgICAsIG1fcmVtZW1iZXJDaGVja0J1dHRvbigwKQot
I2lmZGVmIFNPVVBfVFlQRV9QQVNTV09SRF9NQU5BR0VSCi0gICAgLCBtX2lzU2F2aW5nUGFzc3dv
cmQoZmFsc2UpCi0gICAgLCBtX3NhdmVQYXNzd29yZEhhbmRsZXIoMCkKLSNlbmRpZgogewogICAg
IEd0a0RpYWxvZyogZGlhbG9nID0gR1RLX0RJQUxPRyhtX2RpYWxvZyk7CiAgICAgZ3RrX2RpYWxv
Z19hZGRfYnV0dG9ucyhkaWFsb2csIEdUS19TVE9DS19DQU5DRUwsIEdUS19SRVNQT05TRV9DQU5D
RUwsIEdUS19TVE9DS19PSywgR1RLX1JFU1BPTlNFX09LLCBOVUxMKTsKQEAgLTExOSw5ICsxMDUs
OSBAQCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6R3RrQXV0aGVudGljYXRpb25EaWFsb2coR3Rr
V2luZG93KiBwYXJlbnRXaW5kb3csIFNvdXBTZQogI2VuZGlmCiAgICAgZ3RrX2JveF9wYWNrX3N0
YXJ0KEdUS19CT1goaEJveCksIG1haW5WQm94LCBUUlVFLCBUUlVFLCAwKTsKIAotICAgIFNvdXBV
UkkqIHVyaSA9IHNvdXBfbWVzc2FnZV9nZXRfdXJpKG1fbWVzc2FnZS5nZXQoKSk7Ci0gICAgR093
blB0cjxjaGFyPmRlc2NyaXB0aW9uKGdfc3RyZHVwX3ByaW50ZihfKCJBIHVzZXJuYW1lIGFuZCBw
YXNzd29yZCBhcmUgYmVpbmcgcmVxdWVzdGVkIGJ5IHRoZSBzaXRlICVzIiksIHVyaS0+aG9zdCkp
OwotICAgIEd0a1dpZGdldCogZGVzY3JpcHRpb25MYWJlbCA9IGd0a19sYWJlbF9uZXcoZGVzY3Jp
cHRpb24uZ2V0KCkpOworICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IFN0cmluZzo6Zm9ybWF0KF8o
IkEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGFyZSBiZWluZyByZXF1ZXN0ZWQgYnkgdGhlIHNpdGUg
JXMiKSwKKyAgICAgICAgbV9jaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCkuaG9zdCgpLnV0Zjgo
KS5kYXRhKCkpOworICAgIEd0a1dpZGdldCogZGVzY3JpcHRpb25MYWJlbCA9IGd0a19sYWJlbF9u
ZXcoZGVzY3JpcHRpb24udXRmOCgpLmRhdGEoKSk7CiAgICAgZ3RrX21pc2Nfc2V0X2FsaWdubWVu
dChHVEtfTUlTQyhkZXNjcmlwdGlvbkxhYmVsKSwgMC4wLCAwLjUpOwogICAgIGd0a19sYWJlbF9z
ZXRfbGluZV93cmFwKEdUS19MQUJFTChkZXNjcmlwdGlvbkxhYmVsKSwgVFJVRSk7CiAgICAgZ3Rr
X2JveF9wYWNrX3N0YXJ0KEdUS19CT1gobWFpblZCb3gpLCBHVEtfV0lER0VUKGRlc2NyaXB0aW9u
TGFiZWwpLCBGQUxTRSwgRkFMU0UsIDApOwpAQCAtMTM4LDkgKzEyNCw5IEBAIEd0a0F1dGhlbnRp
Y2F0aW9uRGlhbG9nOjpHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyhHdGtXaW5kb3cqIHBhcmVudFdp
bmRvdywgU291cFNlCiAgICAgZ3RrX2FsaWdubWVudF9zZXRfcGFkZGluZyhHVEtfQUxJR05NRU5U
KGVudHJ5Q29udGFpbmVyKSwgMCwgMCwgMCwgMCk7CiAgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdU
S19CT1godkJveCksIGVudHJ5Q29udGFpbmVyLCBGQUxTRSwgRkFMU0UsIDApOwogCi0gICAgY29u
c3QgY2hhciogcmVhbG0gPSBzb3VwX2F1dGhfZ2V0X3JlYWxtKG1fYXV0aC5nZXQoKSk7CiAgICAg
Ly8gQ2hlY2tpbmcgdGhhdCByZWFsbSBpcyBub3QgYW4gZW1wdHkgc3RyaW5nLgotICAgIGJvb2wg
aGFzUmVhbG0gPSAocmVhbG0gJiYgcmVhbG1bMF0gIT0gJ1wwJyk7CisgICAgU3RyaW5nIHJlYWxt
ID0gbV9jaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCkucmVhbG0oKTsKKyAgICBib29sIGhhc1Jl
YWxtID0gIXJlYWxtLmlzRW1wdHkoKTsKIAogI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCiAgICAg
R3RrV2lkZ2V0KiB0YWJsZSA9IGd0a190YWJsZV9uZXcoaGFzUmVhbG0gPyAzIDogMiwgMiwgRkFM
U0UpOwpAQCAtMTY1LDcgKzE1MSw3IEBAIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpHdGtBdXRo
ZW50aWNhdGlvbkRpYWxvZyhHdGtXaW5kb3cqIHBhcmVudFdpbmRvdywgU291cFNlCiAgICAgICAg
IGd0a193aWRnZXRfc2V0X2hleHBhbmQoc2VydmVyTWVzc2FnZURlc2NyaXB0aW9uTGFiZWwsIFRS
VUUpOwogICAgICAgICBndGtfd2lkZ2V0X3NldF92ZXhwYW5kKHNlcnZlck1lc3NhZ2VEZXNjcmlw
dGlvbkxhYmVsLCBUUlVFKTsKICNlbmRpZgotICAgICAgICBHdGtXaWRnZXQqIHNlcnZlck1lc3Nh
Z2VMYWJlbCA9IGd0a19sYWJlbF9uZXcocmVhbG0pOworICAgICAgICBHdGtXaWRnZXQqIHNlcnZl
ck1lc3NhZ2VMYWJlbCA9IGd0a19sYWJlbF9uZXcocmVhbG0udXRmOCgpLmRhdGEoKSk7CiAgICAg
ICAgIGd0a19taXNjX3NldF9hbGlnbm1lbnQoR1RLX01JU0Moc2VydmVyTWVzc2FnZUxhYmVsKSwg
MC4wLCAwLjUpOwogICAgICAgICBndGtfbGFiZWxfc2V0X2xpbmVfd3JhcChHVEtfTEFCRUwoc2Vy
dmVyTWVzc2FnZUxhYmVsKSwgVFJVRSk7CiAjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKQEAgLTE4
NywxMDcgKzE3MywzOCBAQCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6R3RrQXV0aGVudGljYXRp
b25EaWFsb2coR3RrV2luZG93KiBwYXJlbnRXaW5kb3csIFNvdXBTZQogCiAgICAgZ3RrX2VudHJ5
X3NldF92aXNpYmlsaXR5KEdUS19FTlRSWShtX3Bhc3N3b3JkRW50cnkpLCBGQUxTRSk7CiAKLSAg
ICBpZiAoc2Vzc2lvbkNhblNhdmVQYXNzd29yZHMobV9zZXNzaW9uKSkgewogI2lmZGVmIEdUS19B
UElfVkVSU0lPTl8yCi0gICAgICAgIEd0a1dpZGdldCogcmVtZW1iZXJCb3ggPSBndGtfdmJveF9u
ZXcoRkFMU0UsIDYpOworICAgIEd0a1dpZGdldCogcmVtZW1iZXJCb3ggPSBndGtfdmJveF9uZXco
RkFMU0UsIDYpOwogI2Vsc2UKLSAgICAgICAgR3RrV2lkZ2V0KiByZW1lbWJlckJveCA9IGd0a19i
b3hfbmV3KEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCwgNik7CisgICAgR3RrV2lkZ2V0KiByZW1l
bWJlckJveCA9IGd0a19ib3hfbmV3KEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCwgNik7CiAjZW5k
aWYKLSAgICAgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godkJveCksIHJlbWVtYmVyQm94
LCBGQUxTRSwgRkFMU0UsIDApOworICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZCb3gp
LCByZW1lbWJlckJveCwgRkFMU0UsIEZBTFNFLCAwKTsKIAotICAgICAgICBtX3JlbWVtYmVyQ2hl
Y2tCdXR0b24gPSBndGtfY2hlY2tfYnV0dG9uX25ld193aXRoX21uZW1vbmljKF8oIl9SZW1lbWJl
ciBwYXNzd29yZCIpKTsKLSAgICAgICAgZ3RrX2xhYmVsX3NldF9saW5lX3dyYXAoR1RLX0xBQkVM
KGd0a19iaW5fZ2V0X2NoaWxkKEdUS19CSU4obV9yZW1lbWJlckNoZWNrQnV0dG9uKSkpLCBUUlVF
KTsKLSAgICAgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1gocmVtZW1iZXJCb3gpLCBtX3Jl
bWVtYmVyQ2hlY2tCdXR0b24sIEZBTFNFLCBGQUxTRSwgMCk7Ci0gICAgfQotfQotCi1zdGF0aWMg
Ym9vbCBnZXRTYXZlZExvZ2luKFNvdXBBdXRoKiBhdXRoLCBjb25zdCBjaGFyKiogdXNlcm5hbWUs
IGNvbnN0IGNoYXIqKiBwYXNzd29yZCkKLXsKLSNpZmRlZiBTT1VQX1RZUEVfUEFTU1dPUkRfTUFO
QUdFUgotICAgIEdTTGlzdCogdXNlcnMgPSBzb3VwX2F1dGhfZ2V0X3NhdmVkX3VzZXJzKGF1dGgp
OwotICAgIGlmICghdXNlcnMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICp1c2VybmFt
ZSA9IHN0YXRpY19jYXN0PGNoYXIqPih1c2Vycy0+ZGF0YSk7Ci0gICAgKnBhc3N3b3JkID0gc291
cF9hdXRoX2dldF9zYXZlZF9wYXNzd29yZChhdXRoLCAqdXNlcm5hbWUpOwotICAgIGdfc2xpc3Rf
ZnJlZSh1c2Vycyk7Ci0KLSAgICByZXR1cm4gKnVzZXJuYW1lICYmICpwYXNzd29yZDsKLSNlbHNl
Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCisgICAgbV9yZW1lbWJlckNoZWNrQnV0dG9uID0g
Z3RrX2NoZWNrX2J1dHRvbl9uZXdfd2l0aF9tbmVtb25pYyhfKCJfUmVtZW1iZXIgcGFzc3dvcmQi
KSk7CisgICAgZ3RrX2xhYmVsX3NldF9saW5lX3dyYXAoR1RLX0xBQkVMKGd0a19iaW5fZ2V0X2No
aWxkKEdUS19CSU4obV9yZW1lbWJlckNoZWNrQnV0dG9uKSkpLCBUUlVFKTsKKyAgICBndGtfYm94
X3BhY2tfc3RhcnQoR1RLX0JPWChyZW1lbWJlckJveCksIG1fcmVtZW1iZXJDaGVja0J1dHRvbiwg
RkFMU0UsIEZBTFNFLCAwKTsKIH0KIAogdm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6c2hv
dygpCiB7Ci0gICAgY29uc3QgY2hhciogdXNlcm5hbWUgPSAwOwotICAgIGNvbnN0IGNoYXIqIHBh
c3N3b3JkID0gMDsKLSAgICBib29sIGhhdmVTYXZlZExvZ2luID0gZ2V0U2F2ZWRMb2dpbihtX2F1
dGguZ2V0KCksICZ1c2VybmFtZSwgJnBhc3N3b3JkKTsKLSAgICBzb3VwX3Nlc3Npb25fcGF1c2Vf
bWVzc2FnZShtX3Nlc3Npb24sIG1fbWVzc2FnZS5nZXQoKSk7Ci0gICAgZ3RrX2VudHJ5X3NldF90
ZXh0KEdUS19FTlRSWShtX2xvZ2luRW50cnkpLCB1c2VybmFtZSA/IHVzZXJuYW1lIDogIiIpOwot
ICAgIGd0a19lbnRyeV9zZXRfdGV4dChHVEtfRU5UUlkobV9wYXNzd29yZEVudHJ5KSwgcGFzc3dv
cmQgPyBwYXNzd29yZCA6ICIiKTsKLSAgICBpZiAobV9yZW1lbWJlckNoZWNrQnV0dG9uICYmIGhh
dmVTYXZlZExvZ2luKQotICAgICAgICBndGtfdG9nZ2xlX2J1dHRvbl9zZXRfYWN0aXZlKEdUS19U
T0dHTEVfQlVUVE9OKG1fcmVtZW1iZXJDaGVja0J1dHRvbiksIFRSVUUpOwogICAgIGdfc2lnbmFs
X2Nvbm5lY3QobV9kaWFsb2csICJyZXNwb25zZSIsIEdfQ0FMTEJBQ0soYXV0aGVudGljYXRpb25E
aWFsb2dSZXNwb25zZUNhbGxiYWNrKSwgdGhpcyk7CiAgICAgZ3RrX3dpZGdldF9zaG93X2FsbCht
X2RpYWxvZyk7CiB9CiAKIHZvaWQgR3RrQXV0aGVudGljYXRpb25EaWFsb2c6OmRlc3Ryb3koKQog
ewotICAgIGJvb2wgc2hvdWxkRGVsZXRlID0gdHJ1ZTsKLQotICAgIHNvdXBfc2Vzc2lvbl91bnBh
dXNlX21lc3NhZ2UobV9zZXNzaW9uLCBtX21lc3NhZ2UuZ2V0KCkpOwogICAgIGd0a193aWRnZXRf
ZGVzdHJveShtX2RpYWxvZyk7Ci0KLSNpZmRlZiBTT1VQX1RZUEVfUEFTU1dPUkRfTUFOQUdFUgot
ICAgIHNob3VsZERlbGV0ZSA9ICFtX2lzU2F2aW5nUGFzc3dvcmQ7Ci0jZW5kaWYKLQotICAgIC8v
IERvIG5vdCBkZWxldGUgdGhlIG9iamVjdCBpZiBpdCdzIHN0aWxsIHNhdmluZyB0aGUgcGFzc3dv
cmQsCi0gICAgLy8gdGhlIHNhdmUgcGFzc3dvcmQgY2FsbGJhY2sgd2lsbCBkZWxldGUgaXQuCi0g
ICAgaWYgKHNob3VsZERlbGV0ZSkKLSAgICAgICAgZGVsZXRlIHRoaXM7Ci19Ci0KLSNpZmRlZiBT
T1VQX1RZUEVfUEFTU1dPUkRfTUFOQUdFUgotdm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6
c2F2ZVBhc3N3b3JkQ2FsbGJhY2soU291cE1lc3NhZ2UqIG1lc3NhZ2UsIEd0a0F1dGhlbnRpY2F0
aW9uRGlhbG9nKiBkaWFsb2cpCi17Ci0gICAgZGlhbG9nLT5zYXZlUGFzc3dvcmQoKTsKLX0KLQot
dm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6c2F2ZVBhc3N3b3JkKCkKLXsKLSAgICBBU1NF
UlQoIW1fdXNlcm5hbWUuaXNOdWxsKCkpOwotICAgIEFTU0VSVCghbV9wYXNzd29yZC5pc051bGwo
KSk7Ci0KLSAgICAvLyBBbnl0aGluZyBidXQgNDAxIGFuZCA1eHggbWVhbnMgdGhlIHBhc3N3b3Jk
IHdhcyBhY2NlcHRlZC4KLSAgICBpZiAobV9tZXNzYWdlLmdldCgpLT5zdGF0dXNfY29kZSAhPSA0
MDEgJiYgbV9tZXNzYWdlLmdldCgpLT5zdGF0dXNfY29kZSA8IDUwMCkKLSAgICAgICAgc291cF9h
dXRoX3NhdmVfcGFzc3dvcmQobV9hdXRoLmdldCgpLCBtX3VzZXJuYW1lLmRhdGEoKSwgbV9wYXNz
d29yZC5kYXRhKCkpOwotCi0gICAgLy8gRGlzY29ubmVjdCB0aGUgY2FsbGJhY2suIElmIHRoZSBh
dXRoZW50aWNhdGlvbiBzdWNjZWVkZWQgd2UgYXJlIGRvbmUsCi0gICAgLy8gYW5kIGlmIGl0IGZh
aWxlZCB3ZSdsbCBjcmVhdGUgYSBuZXcgR3RrQXV0aGVudGljYXRpb25EaWFsb2cgYW5kIHdlJ2xs
Ci0gICAgLy8gY29ubmVjdCB0byAnZ290LWhlYWRlcnMnIGFnYWluIGluIEd0a0F1dGhlbnRpY2F0
aW9uRGlhbG9nOjphdXRoZW50aWNhdGUoKQotICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVj
dChtX21lc3NhZ2UuZ2V0KCksIG1fc2F2ZVBhc3N3b3JkSGFuZGxlcik7Ci0KLSAgICAvLyBEaWFs
b2cgaGFzIGJlZW4gYWxyZWFkeSBkZXN0cm95ZWQsIGFmdGVyIHNhdmluZyB0aGUgcGFzc3dvcmQg
aXQgc2hvdWxkIGJlIGRlbGV0ZWQuCiAgICAgZGVsZXRlIHRoaXM7CiB9Ci0jZW5kaWYKIAogdm9p
ZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6YXV0aGVudGljYXRlKCkKIHsKICAgICBjb25zdCBj
aGFyICp1c2VybmFtZSA9IGd0a19lbnRyeV9nZXRfdGV4dChHVEtfRU5UUlkobV9sb2dpbkVudHJ5
KSk7CiAgICAgY29uc3QgY2hhciAqcGFzc3dvcmQgPSBndGtfZW50cnlfZ2V0X3RleHQoR1RLX0VO
VFJZKG1fcGFzc3dvcmRFbnRyeSkpOwotICAgIHNvdXBfYXV0aF9hdXRoZW50aWNhdGUobV9hdXRo
LmdldCgpLCB1c2VybmFtZSwgcGFzc3dvcmQpOwotCi0jaWZkZWYgU09VUF9UWVBFX1BBU1NXT1JE
X01BTkFHRVIKLSAgICBpZiAobV9yZW1lbWJlckNoZWNrQnV0dG9uICYmIGd0a190b2dnbGVfYnV0
dG9uX2dldF9hY3RpdmUoR1RLX1RPR0dMRV9CVVRUT04obV9yZW1lbWJlckNoZWNrQnV0dG9uKSkp
IHsKLSAgICAgICAgbV91c2VybmFtZSA9IHVzZXJuYW1lOwotICAgICAgICBtX3Bhc3N3b3JkID0g
cGFzc3dvcmQ7Ci0gICAgICAgIG1faXNTYXZpbmdQYXNzd29yZCA9IHRydWU7Ci0gICAgICAgIG1f
c2F2ZVBhc3N3b3JkSGFuZGxlciA9IGdfc2lnbmFsX2Nvbm5lY3QobV9tZXNzYWdlLmdldCgpLCAi
Z290LWhlYWRlcnMiLCBHX0NBTExCQUNLKHNhdmVQYXNzd29yZENhbGxiYWNrKSwgdGhpcyk7Ci0g
ICAgfQotI2VuZGlmCisgICAgYm9vbCByZW1lbWJlckNyZWRlbnRpYWxzID0gZ3RrX3RvZ2dsZV9i
dXR0b25fZ2V0X2FjdGl2ZShHVEtfVE9HR0xFX0JVVFRPTihtX3JlbWVtYmVyQ2hlY2tCdXR0b24p
KTsKKyAgICBtX2NoYWxsZW5nZS5hdXRoZW50aWNhdGlvbkNsaWVudCgpLT5yZWNlaXZlZENyZWRl
bnRpYWwobV9jaGFsbGVuZ2UsCisgICAgICAgIENyZWRlbnRpYWwoU3RyaW5nOjpmcm9tVVRGOCh1
c2VybmFtZSksIFN0cmluZzo6ZnJvbVVURjgocGFzc3dvcmQpLAorICAgICAgICAgICAgcmVtZW1i
ZXJDcmVkZW50aWFscyA/IENyZWRlbnRpYWxQZXJzaXN0ZW5jZVBlcm1hbmVudCA6IENyZWRlbnRp
YWxQZXJzaXN0ZW5jZUZvclNlc3Npb24pKTsKIH0KIAogdm9pZCBHdGtBdXRoZW50aWNhdGlvbkRp
YWxvZzo6YXV0aGVudGljYXRpb25EaWFsb2dSZXNwb25zZUNhbGxiYWNrKEd0a1dpZGdldCosIGdp
bnQgcmVzcG9uc2VJRCwgR3RrQXV0aGVudGljYXRpb25EaWFsb2cqIGRpYWxvZykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmgK
aW5kZXggNzU4MjQxY2QzMzZkODMzNjU0NTk1NTBhMzhmMGUxNmQ0OTY4YjQyNS4uNjNmYWM2OTk3
Njg3NjhhMGEyMDU1ODM5MjZkMzRmMGJjNGQxYTdlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmgKQEAgLTIwLDEzICsy
MCwxMiBAQAogI2lmbmRlZiBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZ19oCiAjZGVmaW5lIEd0a0F1
dGhlbnRpY2F0aW9uRGlhbG9nX2gKIAotI2RlZmluZSBMSUJTT1VQX0lfSEFWRV9SRUFEX0JVR181
OTQzNzdfQU5EX0tOT1dfU09VUF9QQVNTV09SRF9NQU5BR0VSX01JR0hUX0dPX0FXQVkKLQotI2lu
Y2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZS5oIgogI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKICNpbmNsdWRlIDxsaWJzb3VwL3Nv
dXAuaD4KICNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgogI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM2LDM3ICszNSwy
MCBAQCBjbGFzcyBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiAKIHB1YmxpYzoKLSAgICBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyhHdGtXaW5k
b3cqLCBTb3VwU2Vzc2lvbiosIFNvdXBNZXNzYWdlKiwgU291cEF1dGgqKTsKKyAgICBHdGtBdXRo
ZW50aWNhdGlvbkRpYWxvZyhHdGtXaW5kb3cqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSYpOwogICAgIH5HdGtBdXRoZW50aWNhdGlvbkRpYWxvZygpOwotCiAgICAgdm9pZCBzaG93KCk7
CiAKIHByaXZhdGU6CiAgICAgdm9pZCBkZXN0cm95KCk7CiAgICAgdm9pZCBhdXRoZW50aWNhdGUo
KTsKLQotI2lmZGVmIFNPVVBfVFlQRV9QQVNTV09SRF9NQU5BR0VSCi0gICAgdm9pZCBzYXZlUGFz
c3dvcmQoKTsKLSAgICBzdGF0aWMgdm9pZCBzYXZlUGFzc3dvcmRDYWxsYmFjayhTb3VwTWVzc2Fn
ZSosIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKik7Ci0jZW5kaWYKLQogICAgIHN0YXRpYyB2b2lk
IGF1dGhlbnRpY2F0aW9uRGlhbG9nUmVzcG9uc2VDYWxsYmFjayhHdGtXaWRnZXQqLCBnaW50IHJl
c3BvbnNlSUQsIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKik7CiAKKyAgICBBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSBtX2NoYWxsZW5nZTsKICAgICBHdGtXaWRnZXQqIG1fZGlhbG9nOwotICAgIFNv
dXBTZXNzaW9uKiBtX3Nlc3Npb247Ci0gICAgR1JlZlB0cjxTb3VwTWVzc2FnZT4gbV9tZXNzYWdl
OwotICAgIEdSZWZQdHI8U291cEF1dGg+IG1fYXV0aDsKLQogICAgIEd0a1dpZGdldCogbV9sb2dp
bkVudHJ5OwogICAgIEd0a1dpZGdldCogbV9wYXNzd29yZEVudHJ5OwogICAgIEd0a1dpZGdldCog
bV9yZW1lbWJlckNoZWNrQnV0dG9uOwotCi0jaWZkZWYgU09VUF9UWVBFX1BBU1NXT1JEX01BTkFH
RVIKLSAgICBib29sIG1faXNTYXZpbmdQYXNzd29yZDsKLSAgICB1bnNpZ25lZCBsb25nIG1fc2F2
ZVBhc3N3b3JkSGFuZGxlcjsKLSAgICBDU3RyaW5nIG1fdXNlcm5hbWU7Ci0gICAgQ1N0cmluZyBt
X3Bhc3N3b3JkOwotI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgKaW5kZXggYzgx
NzAwNGJkZWEzMDFiYTBmMmQyZjEyYjMxMWU2Yjc5NWRlY2RkMi4uNmRkZjI0ODE3ZGY4NzMxNGM5
MjcyMDFkMTQzZTUxMWE0ZmE3YmVlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaApAQCAtOTcsNyArOTcsNyBAQCBlbnVtIFN0b3JlZENy
ZWRlbnRpYWxzIHsKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBUaW1lcjsKIAogY2xhc3Mg
UmVzb3VyY2VIYW5kbGUgOiBwdWJsaWMgUmVmQ291bnRlZDxSZXNvdXJjZUhhbmRsZT4KLSNpZiBQ
TEFURk9STShNQUMpIHx8IFVTRShDRk5FVFdPUkspIHx8IFVTRShDVVJMKQorI2lmIFBMQVRGT1JN
KE1BQykgfHwgVVNFKENGTkVUV09SSykgfHwgVVNFKENVUkwpIHx8IFVTRShTT1VQKQogICAgICwg
cHVibGljIEF1dGhlbnRpY2F0aW9uQ2xpZW50CiAjZW5kaWYKICAgICB7CkBAIC0xMTQsNyArMTE0
LDcgQEAgcHVibGljOgogICAgIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYs
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpOwogICAgIGJvb2wgc2hv
dWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKTsKICNlbmRpZgotI2lmIFBMQVRGT1JNKE1BQykgfHwg
VVNFKENGTkVUV09SSykgfHwgVVNFKENVUkwpCisjaWYgUExBVEZPUk0oTUFDKSB8fCBVU0UoQ0ZO
RVRXT1JLKSB8fCBVU0UoQ1VSTCkgfHwgUExBVEZPUk0oR1RLKQogICAgIHZvaWQgZGlkUmVjZWl2
ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7
CiAgICAgdmlydHVhbCB2b2lkIHJlY2VpdmVkQ3JlZGVudGlhbChjb25zdCBBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSYsIGNvbnN0IENyZWRlbnRpYWwmKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2
ZWRSZXF1ZXN0VG9Db250aW51ZVdpdGhvdXRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlJik7CkBAIC0xNzQsMTEgKzE3NCw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9p
ZCBzZXRIb3N0QWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcmKTsKICAgICBz
dGF0aWMgdm9pZCBzZXRDbGllbnRDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcmIGhvc3QsIEdUbHND
ZXJ0aWZpY2F0ZSopOwogICAgIHN0YXRpYyB2b2lkIHNldElnbm9yZVNTTEVycm9ycyhib29sKTsK
LQotI2lmIFBMQVRGT1JNKEdUSykKLSAgICB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwotICAgIHZpcnR1YWwgdm9p
ZCByZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwoY29uc3QgQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UmKTsKLSNlbmRpZgogI2VuZGlmCiAKICAgICAvLyBVc2VkIHRvIHdv
cmsgYXJvdW5kIHRoZSBmYWN0IHRoYXQgeW91IGRvbid0IGdldCBhbnkgbW9yZSBOU1VSTENvbm5l
Y3Rpb24gY2FsbGJhY2tzIHVudGlsIHlvdSByZXR1cm4gZnJvbSB0aGUgb25lIHlvdSdyZSBpbi4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9BdXRoZW50
aWNhdGlvbkNoYWxsZW5nZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3Vw
L0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgKaW5kZXggODQ3MTNjOGQ5MzMzNWRlOTIwMTYwMzQx
MGY5NDg1NzMyMWVmYjZmMi4uMTRlZTZmNDBiMzUzNWIwYmU2ZGNkMzUzYmU1YjQxNTVmNDBjZTJk
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0F1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgKQEAgLTQ1LDcgKzQ1LDYgQEAgcHVibGlj
OgogICAgIH0KIAogICAgIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFNvdXBTZXNzaW9uKiwgU291
cE1lc3NhZ2UqLCBTb3VwQXV0aCosIGJvb2wgcmV0cnlpbmcsIEF1dGhlbnRpY2F0aW9uQ2xpZW50
Kik7Ci0KICAgICBBdXRoZW50aWNhdGlvbkNsaWVudCogYXV0aGVudGljYXRpb25DbGllbnQoKSBj
b25zdCB7IHJldHVybiBtX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldCgpOyB9CiAgICAgU291cFNl
c3Npb24qIHNvdXBTZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9zb3VwU2Vzc2lvbi5nZXQoKTsg
fQogICAgIFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cE1l
c3NhZ2UuZ2V0KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKaW5kZXggYzU4MmYwMGI5NDk3MjZm
MjgyM2U1MGNiZmMwNWVmNjc3YzA5MGM4NS4uYTgyOGExMTE5OTRjNjY5NTFhM2QwMmNjOWY5NWUx
OWRkNTdmMTEzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKQEAgLTE0Nyw2ICsxNDcsMTIgQEAg
cHVibGljOgogICAgICAgICBkaWRGaW5pc2hMb2FkaW5nKGhhbmRsZSwgMCk7CiAgICAgfQogCisg
ICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShSZXNvdXJj
ZUhhbmRsZSosIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UpCisgICAg
eworICAgICAgICAvLyBXZSBkbyBub3QgaGFuZGxlIGF1dGhlbnRpY2F0aW9uIGZvciBzeW5jaHJv
bm91cyBYTUxIdHRwUmVxdWVzdHMuCisgICAgICAgIGNoYWxsZW5nZS5hdXRoZW50aWNhdGlvbkNs
aWVudCgpLT5yZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwoY2hhbGxl
bmdlKTsKKyAgICB9CisKICAgICB2b2lkIHJ1bigpCiAgICAgewogICAgICAgICBpZiAoIW1fZmlu
aXNoZWQpCkBAIC04NTMsMTIgKzg1OSw1MCBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpzZXRJZ25v
cmVTU0xFcnJvcnMoYm9vbCBpZ25vcmVTU0xFcnJvcnMpCiAjaWYgUExBVEZPUk0oR1RLKQogdm9p
ZCBSZXNvdXJjZUhhbmRsZTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNvbnN0
IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UpCiB7Ci0gICAgaWYgKGNsaWVudCgp
KQorICAgIEFTU0VSVChkLT5tX2N1cnJlbnRXZWJDaGFsbGVuZ2UuaXNOdWxsKCkpOworICAgIGQt
Pm1fY3VycmVudFdlYkNoYWxsZW5nZSA9IGNoYWxsZW5nZTsKKworICAgIGlmIChjbGllbnQoKSkg
eworICAgICAgICBzb3VwX3Nlc3Npb25fcGF1c2VfbWVzc2FnZShjaGFsbGVuZ2Uuc291cFNlc3Np
b24oKSwgY2hhbGxlbmdlLnNvdXBNZXNzYWdlKCkpOwogICAgICAgICBjbGllbnQoKS0+ZGlkUmVj
ZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKHRoaXMsIGNoYWxsZW5nZSk7CisgICAgfQorfQor
Cit2b2lkIFJlc291cmNlSGFuZGxlOjpyZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENy
ZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkKK3sKKyAg
ICBBU1NFUlQoIWNoYWxsZW5nZS5pc051bGwoKSk7CisgICAgaWYgKGNoYWxsZW5nZSAhPSBkLT5t
X2N1cnJlbnRXZWJDaGFsbGVuZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBzb3VwX3Nlc3Npb25f
dW5wYXVzZV9tZXNzYWdlKGNoYWxsZW5nZS5zb3VwU2Vzc2lvbigpLCBjaGFsbGVuZ2Uuc291cE1l
c3NhZ2UoKSk7CisKKyAgICBjbGVhckF1dGhlbnRpY2F0aW9uKCk7CiB9CiAKLXZvaWQgUmVzb3Vy
Y2VIYW5kbGU6OnJlY2VpdmVkUmVxdWVzdFRvQ29udGludWVXaXRob3V0Q3JlZGVudGlhbChjb25z
dCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpCit2b2lkIFJlc291cmNlSGFuZGxlOjpyZWNlaXZl
ZENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSwgY29u
c3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbCkKIHsKKyAgICBBU1NFUlQoIWNoYWxsZW5nZS5pc051
bGwoKSk7CisgICAgaWYgKGNoYWxsZW5nZSAhPSBkLT5tX2N1cnJlbnRXZWJDaGFsbGVuZ2UpCisg
ICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChjaGFsbGVuZ2Uuc291cFNlc3Npb24oKSk7Cisg
ICAgQVNTRVJUKGNoYWxsZW5nZS5zb3VwTWVzc2FnZSgpKTsKKyAgICBzb3VwX2F1dGhfYXV0aGVu
dGljYXRlKGNoYWxsZW5nZS5zb3VwQXV0aCgpLCBjcmVkZW50aWFsLnVzZXIoKS51dGY4KCkuZGF0
YSgpLCBjcmVkZW50aWFsLnBhc3N3b3JkKCkudXRmOCgpLmRhdGEoKSk7CisgICAgc291cF9zZXNz
aW9uX3VucGF1c2VfbWVzc2FnZShjaGFsbGVuZ2Uuc291cFNlc3Npb24oKSwgY2hhbGxlbmdlLnNv
dXBNZXNzYWdlKCkpOworCisgICAgY2xlYXJBdXRoZW50aWNhdGlvbigpOworfQorCit2b2lkIFJl
c291cmNlSGFuZGxlOjpyZWNlaXZlZENhbmNlbGxhdGlvbihjb25zdCBBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSYgY2hhbGxlbmdlKQoreworICAgIEFTU0VSVCghY2hhbGxlbmdlLmlzTnVsbCgpKTsK
KyAgICBpZiAoY2hhbGxlbmdlICE9IGQtPm1fY3VycmVudFdlYkNoYWxsZW5nZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+cmVjZWl2ZWRD
YW5jZWxsYXRpb24odGhpcywgY2hhbGxlbmdlKTsKKyAgICBzb3VwX3Nlc3Npb25fdW5wYXVzZV9t
ZXNzYWdlKGNoYWxsZW5nZS5zb3VwU2Vzc2lvbigpLCBjaGFsbGVuZ2Uuc291cE1lc3NhZ2UoKSk7
CisKKyAgICBjbGVhckF1dGhlbnRpY2F0aW9uKCk7CiB9CiAjZW5kaWYKIApAQCAtMTAyMyw3ICsx
MDY3LDcgQEAgc3RhdGljIHZvaWQgYXV0aGVuaWNhdGVDYWxsYmFjayhTb3VwU2Vzc2lvbiogc2Vz
c2lvbiwgU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlLAogCiAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0
byBwYXNzIGEgY2xpZW50IGhlcmUsIGJlY2F1c2UgR1RLKyBkb2VzIG5vdCB5ZXQgdXNlIHRoZSBB
dXRoZW50aWNhdGlvbkNsaWVudCB0bwogICAgIC8vIHJlc3BvbmQgdG8gdGhlIEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlIC0tIGluc3RlYWQgZGVhbGluZyB3aXRoIHRoZSBTb3VwIG9iamVjdHMgZGly
ZWN0bHkuCi0gICAgaGFuZGxlLT5kaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoQXV0
aGVudGljYXRpb25DaGFsbGVuZ2Uoc2Vzc2lvbiwgc291cE1lc3NhZ2UsIHNvdXBBdXRoLCByZXRy
eWluZywgMCkpOworICAgIGhhbmRsZS0+ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKHNlc3Npb24sIHNvdXBNZXNzYWdlLCBzb3VwQXV0aCwg
cmV0cnlpbmcsIGhhbmRsZS5nZXQoKSkpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcApp
bmRleCBmNzkyOTkxMTljYzYzYjVkYTEyZTI2ZTcxZTM2MDI1NmJjODFlZjgzLi5mM2NjZmMxN2Zh
YTRhMTYzZTRmOWZmZWNjMTc0NTdmMWQ0OTQxNWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCkBAIC0y
MDEsMTIgKzIwMSwxNCBAQCBGcmFtZUxvYWRlckNsaWVudDo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0
b3JhZ2UoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZAogCiB2b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXZWJD
b3JlOjpEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgIGlkZW50aWZpZXIsIGNvbnN0IEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UpCiB7Ci0gICAgaWYgKER1bXBSZW5kZXJU
cmVlU3VwcG9ydEd0azo6ZHVtcFJlbmRlclRyZWVNb2RlRW5hYmxlZCgpKQorICAgIGlmIChEdW1w
UmVuZGVyVHJlZVN1cHBvcnRHdGs6OmR1bXBSZW5kZXJUcmVlTW9kZUVuYWJsZWQoKSkgeworICAg
ICAgICBjaGFsbGVuZ2UuYXV0aGVudGljYXRpb25DbGllbnQoKS0+cmVjZWl2ZWRSZXF1ZXN0VG9D
b250aW51ZVdpdGhvdXRDcmVkZW50aWFsKGNoYWxsZW5nZSk7CiAgICAgICAgIHJldHVybjsKKyAg
ICB9CiAKICAgICBHdGtXaWRnZXQqIHRvcGxldmVsID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwo
R1RLX1dJREdFVCh3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtX2ZyYW1lKSkpOwogICAg
IEd0a1dpbmRvdyogdG9wbGV2ZWxXaW5kb3cgPSB3aWRnZXRJc09uc2NyZWVuVG9wbGV2ZWxXaW5k
b3codG9wbGV2ZWwpID8gR1RLX1dJTkRPVyh0b3BsZXZlbCkgOiAwOwotICAgIEd0a0F1dGhlbnRp
Y2F0aW9uRGlhbG9nKiBkaWFsb2cgPSBuZXcgR3RrQXV0aGVudGljYXRpb25EaWFsb2codG9wbGV2
ZWxXaW5kb3csIGNoYWxsZW5nZS5zb3VwU2Vzc2lvbigpLCBjaGFsbGVuZ2Uuc291cE1lc3NhZ2Uo
KSwgY2hhbGxlbmdlLnNvdXBBdXRoKCkpOworICAgIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKiBk
aWFsb2cgPSBuZXcgR3RrQXV0aGVudGljYXRpb25EaWFsb2codG9wbGV2ZWxXaW5kb3csIGNoYWxs
ZW5nZSk7CiAgICAgZGlhbG9nLT5zaG93KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXRzb3VwYXV0aGRpYWxvZy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0c291cGF1dGhkaWFsb2cuY3BwCmluZGV4IDJiNGI3NzcyZTNkYjNjZTdh
NWE0YTk3OGUwZDAxNzc1ZmQyNWVhNjAuLjZlYjY3NjUyZmM5ZTBkN2RmYWE1MTJhNGQwMWQyZjI4
NmI3NjEzODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzb3Vw
YXV0aGRpYWxvZy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNvdXBh
dXRoZGlhbG9nLmNwcApAQCAtMjAsNyArMjAsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIndlYmtpdHNvdXBhdXRoZGlhbG9nLmgiCiAKKyNpbmNsdWRlICJBdXRoZW50aWNhdGlv
bkNsaWVudC5oIgogI2luY2x1ZGUgIkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmgiCisjaW5jbHVk
ZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJ3ZWJraXRtYXJzaGFsLmgiCiAKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtMzUsNiArMzcsNDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAgKiBoYW5kbGluZyBIVFRQIGJhc2ljIGF1dGguCiAgKi8KIAorCisvLyBUaGlzIGNs
YXNzIGV4aXN0cyBvbmx5IGZvciBBUEkgY29tcGF0aWJpbGl0eSByZWFzb25zLiBXZWJLaXRTb3Vw
QXV0aERpYWxvZyB3YXMgZXhwb3NlZAorLy8gaW4gdGhlIHB1YmxpYyBBUEksIHNvIHdlIG11c3Qg
cHJvdmlkZSB0aGlzICJmYWtlIiBBdXRoZW50aWNhdGlvbkNsaWVudCBpbiBvcmRlciB0bworLy8g
Y29udGludWUgdXNpbmcgR3RrQXV0aGVudGljYXRpb25EaWFsb2cgd2l0aCB0aGUgbmV3IGF1dGhl
bnRpY2F0aW9uIGFyY2hpdGVjdHVyZS4KK2NsYXNzIFdlYktpdFNvdXBBdXRoRGlhbG9nQXV0aGVu
dGljYXRpb25DbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DbGllbnQsIHB1
YmxpYyBSZWZDb3VudGVkPFdlYktpdFNvdXBBdXRoRGlhbG9nQXV0aGVudGljYXRpb25DbGllbnQ+
IHsKK3VzaW5nIFJlZkNvdW50ZWQ8V2ViS2l0U291cEF1dGhEaWFsb2dBdXRoZW50aWNhdGlvbkNs
aWVudD46OnJlZjsKK3VzaW5nIFJlZkNvdW50ZWQ8V2ViS2l0U291cEF1dGhEaWFsb2dBdXRoZW50
aWNhdGlvbkNsaWVudD46OmRlcmVmOworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2Um
IGNoYWxsZW5nZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHJlY2VpdmVkUmVx
dWVzdFRvQ29udGludWVXaXRob3V0Q3JlZGVudGlhbChjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSYgY2hhbGxlbmdlKQorICAgIHsKKyAgICAgICAgc291cF9zZXNzaW9uX3VucGF1c2VfbWVz
c2FnZShjaGFsbGVuZ2Uuc291cFNlc3Npb24oKSwgY2hhbGxlbmdlLnNvdXBNZXNzYWdlKCkpOwor
ICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZENyZWRlbnRpYWwoY29uc3QgQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSwgY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlh
bCkKKyAgICB7CisgICAgICAgIHNvdXBfYXV0aF9hdXRoZW50aWNhdGUoY2hhbGxlbmdlLnNvdXBB
dXRoKCksIGNyZWRlbnRpYWwudXNlcigpLnV0ZjgoKS5kYXRhKCksIGNyZWRlbnRpYWwucGFzc3dv
cmQoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgc291cF9zZXNzaW9uX3VucGF1c2VfbWVzc2Fn
ZShjaGFsbGVuZ2Uuc291cFNlc3Npb24oKSwgY2hhbGxlbmdlLnNvdXBNZXNzYWdlKCkpOworICAg
IH0KKworICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZENhbmNlbGxhdGlvbihjb25zdCBBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlKQorICAgIHsKKyAgICAgICAgc291cF9zZXNzaW9u
X3VucGF1c2VfbWVzc2FnZShjaGFsbGVuZ2Uuc291cFNlc3Npb24oKSwgY2hhbGxlbmdlLnNvdXBN
ZXNzYWdlKCkpOworICAgIH0KKworICAgIC8vIFRoaXMgc2VlbXMgbmVjZXNzYXJ5IHRvIG1ha2Ug
dGhlIGNvbXBpbGVyIGhhcHB5LiBCb3RoIEF1dGhlbnRpY2F0aW9uQ2xpZW50IGFuZAorICAgIC8v
IFJlZkNvdW50ZWQ8VD4gZXhwb3NlIGEgcmVmL2RlcmVmIG1ldGhvZCwgd2hpY2ggaW50ZXJmZXJl
cyB3aXRoIHRoZSB1c2Ugb2YgYSBSZWZQdHIuCisgICAgdm9pZCBkZXJlZldlYktpdFNvdXBBdXRo
RGlhbG9nQXV0aGVudGljYXRpb25DbGllbnQoKQorICAgIHsKKyAgICAgICAgZGVyZWYoKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIHJlZkF1dGhlbnRpY2F0aW9uQ2xpZW50
KCkgeyByZWYoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXJlZkF1dGhlbnRpY2F0aW9uQ2xpZW50
KCkgeyBkZXJlZigpOyB9CisgICAgR1JlZlB0cjxTb3VwU2Vzc2lvbj4gbV9zZXNzaW9uOworfTsK
Kwogc3RhdGljIHZvaWQgd2Via2l0X3NvdXBfYXV0aF9kaWFsb2dfc2Vzc2lvbl9mZWF0dXJlX2lu
aXQoU291cFNlc3Npb25GZWF0dXJlSW50ZXJmYWNlKiwgZ3BvaW50ZXIpOwogc3RhdGljIHZvaWQg
YXR0YWNoKFNvdXBTZXNzaW9uRmVhdHVyZSosIFNvdXBTZXNzaW9uKik7CiBzdGF0aWMgdm9pZCBk
ZXRhY2goU291cFNlc3Npb25GZWF0dXJlKiwgU291cFNlc3Npb24qKTsKQEAgLTg4LDE1ICsxMzEs
MjAgQEAgc3RhdGljIHZvaWQgd2Via2l0X3NvdXBfYXV0aF9kaWFsb2dfc2Vzc2lvbl9mZWF0dXJl
X2luaXQoU291cFNlc3Npb25GZWF0dXJlSW50ZXIKICAgICBmZWF0dXJlSW50ZXJmYWNlLT5kZXRh
Y2ggPSBkZXRhY2g7CiB9CiAKLXN0YXRpYyB2b2lkIHNlc3Npb25BdXRoZW50aWNhdGUoU291cFNl
c3Npb24qIHNlc3Npb24sIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBTb3VwQXV0aCogYXV0aCwgZ2Jv
b2xlYW4sIFNvdXBTZXNzaW9uRmVhdHVyZSogbWFuYWdlcikKK3N0YXRpYyB2b2lkIHNlc3Npb25B
dXRoZW50aWNhdGUoU291cFNlc3Npb24qIHNlc3Npb24sIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBT
b3VwQXV0aCogYXV0aCwgZ2Jvb2xlYW4gcmV0cnlpbmcsIFNvdXBTZXNzaW9uRmVhdHVyZSogbWFu
YWdlcikKIHsKLSAgICBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyogYXV0aERpYWxvZzsKLSAgICBH
dGtXaWRnZXQqIHRvcGxldmVsID0gMDsKLQotICAgIC8qIEdldCB0aGUgY3VycmVudCB0b3BsZXZl
bCAqLworICAgIEd0a1dpbmRvdyogdG9wbGV2ZWwgPSAwOwogICAgIGdfc2lnbmFsX2VtaXQobWFu
YWdlciwgc2lnbmFsc1tDVVJSRU5UX1RPUExFVkVMXSwgMCwgbWVzc2FnZSwgJnRvcGxldmVsKTsK
IAotICAgIGF1dGhEaWFsb2cgPSBuZXcgR3RrQXV0aGVudGljYXRpb25EaWFsb2codG9wbGV2ZWwg
PyBHVEtfV0lORE9XKHRvcGxldmVsKSA6IDAsIHNlc3Npb24sIG1lc3NhZ2UsIGF1dGgpOworICAg
IFdlYktpdFNvdXBBdXRoRGlhbG9nQXV0aGVudGljYXRpb25DbGllbnQqIGNsaWVudCA9IG5ldyBX
ZWJLaXRTb3VwQXV0aERpYWxvZ0F1dGhlbnRpY2F0aW9uQ2xpZW50KCk7CisgICAgQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UgY2hhbGxlbmdlKHNlc3Npb24sIG1lc3NhZ2UsIGF1dGgsIHJldHJ5aW5n
LCBjbGllbnQpOworICAgIHNvdXBfc2Vzc2lvbl91bnBhdXNlX21lc3NhZ2Uoc2Vzc2lvbiwgbWVz
c2FnZSk7CisKKyAgICAvLyBBIFJlZlB0ciB3b3VsZCBiZSBiZXR0ZXIgaGVyZSwgYnV0IGl0IHNl
ZW1zIHRoYXQgYWNjZXNzaW5nIFJlZkNvdW50ZWQ6OmRlcmVmIGZyb20gdGhpcyBjb250ZXh0IGlz
CisgICAgLy8gaW1wb3NzaWJsZSB3aXRoIGdjYywgZHVlIHRvIFdlYktpdFNvdXBBdXRoRGlhbG9n
QXV0aGVudGljYXRpb25DbGllbnQncyB0d28gc3VwZXJjbGFzc2VzLgorICAgIGNsaWVudC0+ZGVy
ZWZXZWJLaXRTb3VwQXV0aERpYWxvZ0F1dGhlbnRpY2F0aW9uQ2xpZW50KCk7CisKKyAgICBHdGtB
dXRoZW50aWNhdGlvbkRpYWxvZyogYXV0aERpYWxvZyA9IG5ldyBHdGtBdXRoZW50aWNhdGlvbkRp
YWxvZyh0b3BsZXZlbCwgY2hhbGxlbmdlKTsKICAgICBhdXRoRGlhbG9nLT5zaG93KCk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3Rr
L1dlYkZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAppbmRleCBjZTE0
NzM2NWU0Y2VmZDlkNmRiMThmMDUxMmIwNmYxM2MwODJhMGU4Li5hNmZmMzZlNWY1Zjg5MmE4YzI1
ZmUxMzg2YzE1NzllYWIwYmY3MmRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJGcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRnJhbWVMb2Fk
ZXJDbGllbnRHdGsuY3BwCkBAIC0zNiw3ICszNiw3IEBAIHVzaW5nIFdlYkNvcmU6OkF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlOwogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERp
ZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXZWJDb3JlOjpEb2N1bWVudExvYWRlcios
IHVuc2lnbmVkIGxvbmcsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2Up
CiB7Ci0gICAgR3RrQXV0aGVudGljYXRpb25EaWFsb2cqIGRpYWxvZyA9IG5ldyBHdGtBdXRoZW50
aWNhdGlvbkRpYWxvZygwLCBjaGFsbGVuZ2Uuc291cFNlc3Npb24oKSwgY2hhbGxlbmdlLnNvdXBN
ZXNzYWdlKCksIGNoYWxsZW5nZS5zb3VwQXV0aCgpKTsKKyAgICBHdGtBdXRoZW50aWNhdGlvbkRp
YWxvZyogZGlhbG9nID0gbmV3IEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKDAsIGNoYWxsZW5nZSk7
CiAgICAgZGlhbG9nLT5zaG93KCk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171098</attachid>
            <date>2012-10-27 11:17:02 -0700</date>
            <delta_ts>2012-10-30 15:19:31 -0700</delta_ts>
            <desc>Fix the EFL build</desc>
            <filename>bug-99914-20121027111531.patch</filename>
            <type>text/plain</type>
            <size>27790</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyMjg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjk3ZDczNThlMjllYTM4
YTdlYWI3ODRiNWRjOWYxYWVjMDFhMWFkOC4uNzk1YWNiNDE2M2UyN2NhNzg2YmZhYTUzYzIwZTM3
NDAzYTAyYTExZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTEwLTI1ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBNb3Zl
IHNvdXAgYXV0aGVudGljYXRpb24gZnJvbSBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyB0byBXZWJD
b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTkx
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUg
dGhlIGFjdHVhbCBzb3VwIGF1dGhlbnRpY2F0aW9uIGNvZGUgZnJvbSB0aGUgR3RrQXV0aGVudGlj
YXRpb25EaWFsb2cgdG8gUmVzb3VyY2VIYW5kbGVTb3VwLgorICAgICAgICBUaGlzIGFsbG93cyBh
IG1vcmUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBvZiBhdXRoZW50aWNhdGlvbiwgZm9yIGV4YW1w
bGUsIG9uZSB3aGVyZSBhIFdlYktpdDIKKyAgICAgICAgY2xpZW50IGNhbiBjb21wbGV0ZWx5IGhh
bmRsZSBhdXRoZW50aWNhdGlvbi4KKworICAgICAgICBUaGlzIGNoYW5nZSBlZmZlY3RpdmVseSBy
ZW1vdmVzIHN1cHBvcnQgZm9yIGNyb3NzLXNlc3Npb24gY3JlZGVudGlhbCBzdG9yYWdlLCBidXQg
aXQgd2lsbCBiZQorICAgICAgICByZS1hZGRlZCBpbiBmb2xsb3d1cCBjaGFuZ2VzIHRoYXQgYWRk
IENyZWRlbnRpYWxTdG9yZSBpbnRlcmFjdGlvbiBmb3IgV2ViS2l0R1RLKyAobGlrZWx5IHZpYQor
ICAgICAgICBsaWJzZWNyZXQpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBzaG91bGQg
bm90IGNoYW5nZSB0ZXN0YWJsZSBiZWhhdmlvciAoY3Jvc3Mtc2Vzc2lvbiBjcmVkZW50aWFsIHN0
b3JhZ2UgaXNuJ3QgdGVzdGVkKS4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9HdGtBdXRoZW50
aWNhdGlvbkRpYWxvZy5jcHA6IFJlbW92ZSByZWZlcmVuY2VzIHRvIHRoZSBTb3VwUGFzc3dvcmRN
YW5hZ2VyLCB3aGljaAorICAgICAgICBpcyBnb2luZyBhd2F5IGluIHRoZSBuZXh0IHJlbGVhc2Ug
b2YgR25vbWUuIEluc3RlYWQgd2UgYWx3YXlzIGFzc3VtZSB0aGF0IHRoZSBhdXRoZW50aWNhdGlv
biBiYWNrZW5kIGhhcworICAgICAgICBzdXBwb3J0IGZvciByZW1lbWJlcmluZyBwYXNzd29yZHMg
YW5kIHBhc3MgdGhhdCBpbmZvcm1hdGlvbiBhbG9uZyB3aXRoIHRoZSBhbnN3ZXIgdG8gdGhlIGF1
dGhlbnRpY2F0aW9uCisgICAgICAgIHJlcXVlc3QuCisKKyAgICAgICAgVGhlIHJlc3Qgb2YgdGhl
IGNoYW5nZXMgdG8gdGhpcyBjbGFzcyBjYW4gYmUgc3VtbWFyaXplZCBhczoKKyAgICAgICAgMS4g
R2V0dGluZyB0aGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgQXV0aGVudGljYXRpb25DaGFsbGVuZ2Ug
aW5zdGVhZCBvZiBkaXJlY3RseSBmcm9tIHRoZSBsaWJzb3VwCisgICAgICAgICAgIG9iamVjdHMu
CisgICAgICAgIDIuIFVzaW5nIHRoZSBBdXRoZW50aWNhdGlvbkNsaWVudCB0byBhY2NvbXBsaXNo
IHRoZSBhdXRoZW50aWNhdGlvbiBpbnN0ZWFkIG9mIHRhbGtpbmcgdG8gbGlic291cAorICAgICAg
ICAgICBkaXJlY3RseS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25E
aWFsb2cuaDoKKyAgICAgICAgKEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKTogUmVtb3ZlIG1lbWJl
cnMgd2hpY2ggYXJlIG5vIGxvbmdlciB1c2VkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VIYW5kbGUuaDoKKyAgICAgICAgKFJlc291cmNlSGFuZGxlKTogUmVzb3VyY2VIYW5k
bGVTb3VwIG5vdyBpbXBsZW1lbnRzIHRoZSBlbnRpcmUgQXV0aGVudGljYXRpb25DbGllbnQgaW50
ZXJmYWNlLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNv
dXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyOjpkaWRS
ZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOiBEb24ndCBoYW5kbGUgYXV0aGVudGljYXRp
b24KKyAgICAgICAgZm9yIHN5bmNocm9ub3VzIGhhbmRsZXMuCisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUhhbmRsZTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKTogTm93IHNl
dCB0aGUgY3VycmVudCBjaGFsbGVuZ2Ugb24KKyAgICAgICAgdGhlIGludGVybmFsIGRhdGEgc3Ry
dWN0dXJlLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnJlY2VpdmVkUmVxdWVz
dFRvQ29udGludWVXaXRob3V0Q3JlZGVudGlhbCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VIYW5kbGU6OnJlY2VpdmVkQ3JlZGVudGlhbCk6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VIYW5kbGU6OnJlY2VpdmVkQ2FuY2VsbGF0aW9uKTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjphdXRoZW5pY2F0ZUNhbGxiYWNrKTogUGFzcyB0aGUgaGFuZGxlIGFzIHRo
ZSBhdXRoZW50aWNhdGlvbiBjbGllbnQuCisKIDIwMTItMTAtMjMgIE1hcnRpbiBSb2JpbnNvbiAg
PG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdW1NvdXBdIEltcGxlbWVudCB0
aGUgZGVmYXVsdCBhdXRoZW50aWNhdGlvbiBkaWFsb2cgdmlhIFdlYkNvcmVTdXBwb3J0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9D
aGFuZ2VMb2cKaW5kZXggMTUwMWJlN2Y1NjZmZjEyNzFiOThmNzkzZGViNzVhYTAxYWIyNjhhNS4u
MTgzNGY0MDE0MTUxZTVlOWFlM2QxMWQyM2Y4ODMyMzY5NzM0YTUyYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDIyIEBACisyMDEyLTEwLTI1ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5z
b25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBNb3ZlIHNvdXAgYXV0aGVudGljYXRpb24g
ZnJvbSBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyB0byBXZWJDb3JlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTkxNAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBjYWxscyB3aGljaCBhY3R1YWxseSBh
dXRoZW50aWNhdGUgYSBzb3VwIG1lc3NhZ2UgYXJlIGdvbmUgZnJvbSB0aGUgR3RrQXV0aGVudGlj
YXRpb25EaWFsb2cuIFNpbmNlIHRoZQorICAgICAgICBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyBl
eHBvc2VkIGJ5IHRoZSBXZWJLaXRTb3VwQXV0aGVudGljYXRpb24gY2xhc3MgaW4gdGhlIEdUSysg
QVBJIHdvcmsgd2l0aG91dCBhCisgICAgICAgIFJlc291cmNlSGFuZGxlICh0aGV5IGFyZSBtb3Jl
IGdlbmVyYWwpLCB3ZSBhZGQgYSBXZWJLaXRTb3VwQXV0aERpYWxvZ0F1dGhlbnRpY2F0aW9uQ2xp
ZW50IGFkZGVkIHRvIGF2b2lkCisgICAgICAgIGJyZWFraW5nIEFQSS4gVGhpcyBpcyB1bnVzZWQg
YnkgZWl0aGVyIEVwaXBoYW55IG9yIGludGVybmFsbHkgaW4gV2ViS2l0R1RLKy4KKworICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKTogVGhlIGF1dGhlbnRpY2F0aW9uIGRpYWxvZworICAgICAgICBub3cganVzdCB0
YWtlcyB0aGUgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgaW5zdGVhZCBvZiB0aGUgbGlic291cCBv
YmplY3RzLgorICAgICAgICAqIHdlYmtpdC93ZWJraXRzb3VwYXV0aGRpYWxvZy5jcHA6CisgICAg
ICAgIChXZWJLaXRTb3VwQXV0aERpYWxvZ0F1dGhlbnRpY2F0aW9uQ2xpZW50KTogQWRkZWQgdGhp
cyBoZWxwZXIuCisgICAgICAgIChzZXNzaW9uQXV0aGVudGljYXRlKTogVXNlIHRoZSBuZXcgV2Vi
S2l0U291cEF1dGhEaWFsb2dBdXRoZW50aWNhdGlvbkNsaWVudC4KKwogMjAxMi0xMC0yMyAgTWFy
dGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS11bU291
cF0gSW1wbGVtZW50IHRoZSBkZWZhdWx0IGF1dGhlbnRpY2F0aW9uIGRpYWxvZyB2aWEgV2ViQ29y
ZVN1cHBvcnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwppbmRleCBjMzNiNzE4NGIwNDUyMDFiMGYyOGJiZjNjOWJiMTQ4MmYw
ZWQ2MTE2Li42MmE3ODVmYzFhYmM4YzJkMTNiNjMwNDU3YTZlZjg4ZDllODRkZmQ3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMTAtMjUgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2Jp
bnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIE1vdmUgc291cCBhdXRoZW50aWNhdGlv
biBmcm9tIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nIHRvIFdlYkNvcmUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5OTE0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5zdGVhZCBvZiBwYXNzaW5nIHRoZSBs
aWJzb3VwIG9iamVjdHMgdG8gdGhlIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLCBwYXNzIHRoZQor
ICAgICAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSBpdHNlbGYuCisKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJGcmFtZUxvYWRlckNsaWVudEd0ay5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2VpdmVB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisKIDIwMTItMTAtMjMgIE1hcnRpbiBSb2JpbnNvbiAg
PG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdW1NvdXBdIEltcGxlbWVudCB0
aGUgZGVmYXVsdCBhdXRoZW50aWNhdGlvbiBkaWFsb2cgdmlhIFdlYkNvcmVTdXBwb3J0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFs
b2cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlh
bG9nLmNwcAppbmRleCAzNmJkMzFiMWVhNTEzZjUyNTYyOWQ4ZDkwMmJjZGMwZTU5YWZhODVmLi5k
NTg4NjY2Y2EyOWU2YzgzYjJhYmFhYmEzMGQ0YWRjMGRkOWVmYzZkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5jcHAK
QEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJHdGtBdXRo
ZW50aWNhdGlvbkRpYWxvZy5oIgogCisjaW5jbHVkZSAiQ3JlZGVudGlhbC5oIgogI2luY2x1ZGUg
Ikd0a1ZlcnNpb25pbmcuaCIKICNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgogI2luY2x1ZGUg
PGd0ay9ndGsuaD4KQEAgLTU0LDMxICs1NSwxNiBAQCBzdGF0aWMgR3RrV2lkZ2V0KiBhZGRFbnRy
eVRvR3JpZChHdGtHcmlkKiBncmlkLCBpbnQgcm93LCBjb25zdCBjaGFyKiBsYWJlbFRleHQpCiAg
ICAgcmV0dXJuIGVudHJ5OwogfQogCi1zdGF0aWMgYm9vbCBzZXNzaW9uQ2FuU2F2ZVBhc3N3b3Jk
cyhTb3VwU2Vzc2lvbiogc2Vzc2lvbikKLXsKLSNpZmRlZiBTT1VQX1RZUEVfUEFTU1dPUkRfTUFO
QUdFUgotICAgIHJldHVybiBzb3VwX3Nlc3Npb25fZ2V0X2ZlYXR1cmUoc2Vzc2lvbiwgU09VUF9U
WVBFX1BBU1NXT1JEX01BTkFHRVIpOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYK
LX0KLQogR3RrQXV0aGVudGljYXRpb25EaWFsb2c6On5HdGtBdXRoZW50aWNhdGlvbkRpYWxvZygp
CiB7CiB9CiAKLUd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpHdGtBdXRoZW50aWNhdGlvbkRpYWxv
ZyhHdGtXaW5kb3cqIHBhcmVudFdpbmRvdywgU291cFNlc3Npb24qIHNlc3Npb24sIFNvdXBNZXNz
YWdlKiBtZXNzYWdlLCBTb3VwQXV0aCogYXV0aCkKLSAgICA6IG1fZGlhbG9nKGd0a19kaWFsb2df
bmV3KCkpCi0gICAgLCBtX3Nlc3Npb24oc2Vzc2lvbikKLSAgICAsIG1fbWVzc2FnZShtZXNzYWdl
KQotICAgICwgbV9hdXRoKGF1dGgpCitHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6R3RrQXV0aGVu
dGljYXRpb25EaWFsb2coR3RrV2luZG93KiBwYXJlbnRXaW5kb3csIGNvbnN0IEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UpCisgICAgOiBtX2NoYWxsZW5nZShjaGFsbGVuZ2UpCisg
ICAgLCBtX2RpYWxvZyhndGtfZGlhbG9nX25ldygpKQogICAgICwgbV9sb2dpbkVudHJ5KDApCiAg
ICAgLCBtX3Bhc3N3b3JkRW50cnkoMCkKICAgICAsIG1fcmVtZW1iZXJDaGVja0J1dHRvbigwKQot
I2lmZGVmIFNPVVBfVFlQRV9QQVNTV09SRF9NQU5BR0VSCi0gICAgLCBtX2lzU2F2aW5nUGFzc3dv
cmQoZmFsc2UpCi0gICAgLCBtX3NhdmVQYXNzd29yZEhhbmRsZXIoMCkKLSNlbmRpZgogewogICAg
IEd0a0RpYWxvZyogZGlhbG9nID0gR1RLX0RJQUxPRyhtX2RpYWxvZyk7CiAgICAgZ3RrX2RpYWxv
Z19hZGRfYnV0dG9ucyhkaWFsb2csIEdUS19TVE9DS19DQU5DRUwsIEdUS19SRVNQT05TRV9DQU5D
RUwsIEdUS19TVE9DS19PSywgR1RLX1JFU1BPTlNFX09LLCBOVUxMKTsKQEAgLTExOSw5ICsxMDUs
OSBAQCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6R3RrQXV0aGVudGljYXRpb25EaWFsb2coR3Rr
V2luZG93KiBwYXJlbnRXaW5kb3csIFNvdXBTZQogI2VuZGlmCiAgICAgZ3RrX2JveF9wYWNrX3N0
YXJ0KEdUS19CT1goaEJveCksIG1haW5WQm94LCBUUlVFLCBUUlVFLCAwKTsKIAotICAgIFNvdXBV
UkkqIHVyaSA9IHNvdXBfbWVzc2FnZV9nZXRfdXJpKG1fbWVzc2FnZS5nZXQoKSk7Ci0gICAgR093
blB0cjxjaGFyPmRlc2NyaXB0aW9uKGdfc3RyZHVwX3ByaW50ZihfKCJBIHVzZXJuYW1lIGFuZCBw
YXNzd29yZCBhcmUgYmVpbmcgcmVxdWVzdGVkIGJ5IHRoZSBzaXRlICVzIiksIHVyaS0+aG9zdCkp
OwotICAgIEd0a1dpZGdldCogZGVzY3JpcHRpb25MYWJlbCA9IGd0a19sYWJlbF9uZXcoZGVzY3Jp
cHRpb24uZ2V0KCkpOworICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IFN0cmluZzo6Zm9ybWF0KF8o
IkEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGFyZSBiZWluZyByZXF1ZXN0ZWQgYnkgdGhlIHNpdGUg
JXMiKSwKKyAgICAgICAgbV9jaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCkuaG9zdCgpLnV0Zjgo
KS5kYXRhKCkpOworICAgIEd0a1dpZGdldCogZGVzY3JpcHRpb25MYWJlbCA9IGd0a19sYWJlbF9u
ZXcoZGVzY3JpcHRpb24udXRmOCgpLmRhdGEoKSk7CiAgICAgZ3RrX21pc2Nfc2V0X2FsaWdubWVu
dChHVEtfTUlTQyhkZXNjcmlwdGlvbkxhYmVsKSwgMC4wLCAwLjUpOwogICAgIGd0a19sYWJlbF9z
ZXRfbGluZV93cmFwKEdUS19MQUJFTChkZXNjcmlwdGlvbkxhYmVsKSwgVFJVRSk7CiAgICAgZ3Rr
X2JveF9wYWNrX3N0YXJ0KEdUS19CT1gobWFpblZCb3gpLCBHVEtfV0lER0VUKGRlc2NyaXB0aW9u
TGFiZWwpLCBGQUxTRSwgRkFMU0UsIDApOwpAQCAtMTM4LDkgKzEyNCw5IEBAIEd0a0F1dGhlbnRp
Y2F0aW9uRGlhbG9nOjpHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyhHdGtXaW5kb3cqIHBhcmVudFdp
bmRvdywgU291cFNlCiAgICAgZ3RrX2FsaWdubWVudF9zZXRfcGFkZGluZyhHVEtfQUxJR05NRU5U
KGVudHJ5Q29udGFpbmVyKSwgMCwgMCwgMCwgMCk7CiAgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdU
S19CT1godkJveCksIGVudHJ5Q29udGFpbmVyLCBGQUxTRSwgRkFMU0UsIDApOwogCi0gICAgY29u
c3QgY2hhciogcmVhbG0gPSBzb3VwX2F1dGhfZ2V0X3JlYWxtKG1fYXV0aC5nZXQoKSk7CiAgICAg
Ly8gQ2hlY2tpbmcgdGhhdCByZWFsbSBpcyBub3QgYW4gZW1wdHkgc3RyaW5nLgotICAgIGJvb2wg
aGFzUmVhbG0gPSAocmVhbG0gJiYgcmVhbG1bMF0gIT0gJ1wwJyk7CisgICAgU3RyaW5nIHJlYWxt
ID0gbV9jaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCkucmVhbG0oKTsKKyAgICBib29sIGhhc1Jl
YWxtID0gIXJlYWxtLmlzRW1wdHkoKTsKIAogI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCiAgICAg
R3RrV2lkZ2V0KiB0YWJsZSA9IGd0a190YWJsZV9uZXcoaGFzUmVhbG0gPyAzIDogMiwgMiwgRkFM
U0UpOwpAQCAtMTY1LDcgKzE1MSw3IEBAIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpHdGtBdXRo
ZW50aWNhdGlvbkRpYWxvZyhHdGtXaW5kb3cqIHBhcmVudFdpbmRvdywgU291cFNlCiAgICAgICAg
IGd0a193aWRnZXRfc2V0X2hleHBhbmQoc2VydmVyTWVzc2FnZURlc2NyaXB0aW9uTGFiZWwsIFRS
VUUpOwogICAgICAgICBndGtfd2lkZ2V0X3NldF92ZXhwYW5kKHNlcnZlck1lc3NhZ2VEZXNjcmlw
dGlvbkxhYmVsLCBUUlVFKTsKICNlbmRpZgotICAgICAgICBHdGtXaWRnZXQqIHNlcnZlck1lc3Nh
Z2VMYWJlbCA9IGd0a19sYWJlbF9uZXcocmVhbG0pOworICAgICAgICBHdGtXaWRnZXQqIHNlcnZl
ck1lc3NhZ2VMYWJlbCA9IGd0a19sYWJlbF9uZXcocmVhbG0udXRmOCgpLmRhdGEoKSk7CiAgICAg
ICAgIGd0a19taXNjX3NldF9hbGlnbm1lbnQoR1RLX01JU0Moc2VydmVyTWVzc2FnZUxhYmVsKSwg
MC4wLCAwLjUpOwogICAgICAgICBndGtfbGFiZWxfc2V0X2xpbmVfd3JhcChHVEtfTEFCRUwoc2Vy
dmVyTWVzc2FnZUxhYmVsKSwgVFJVRSk7CiAjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKQEAgLTE4
NywxMDcgKzE3MywzOCBAQCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6R3RrQXV0aGVudGljYXRp
b25EaWFsb2coR3RrV2luZG93KiBwYXJlbnRXaW5kb3csIFNvdXBTZQogCiAgICAgZ3RrX2VudHJ5
X3NldF92aXNpYmlsaXR5KEdUS19FTlRSWShtX3Bhc3N3b3JkRW50cnkpLCBGQUxTRSk7CiAKLSAg
ICBpZiAoc2Vzc2lvbkNhblNhdmVQYXNzd29yZHMobV9zZXNzaW9uKSkgewogI2lmZGVmIEdUS19B
UElfVkVSU0lPTl8yCi0gICAgICAgIEd0a1dpZGdldCogcmVtZW1iZXJCb3ggPSBndGtfdmJveF9u
ZXcoRkFMU0UsIDYpOworICAgIEd0a1dpZGdldCogcmVtZW1iZXJCb3ggPSBndGtfdmJveF9uZXco
RkFMU0UsIDYpOwogI2Vsc2UKLSAgICAgICAgR3RrV2lkZ2V0KiByZW1lbWJlckJveCA9IGd0a19i
b3hfbmV3KEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCwgNik7CisgICAgR3RrV2lkZ2V0KiByZW1l
bWJlckJveCA9IGd0a19ib3hfbmV3KEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCwgNik7CiAjZW5k
aWYKLSAgICAgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godkJveCksIHJlbWVtYmVyQm94
LCBGQUxTRSwgRkFMU0UsIDApOworICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZCb3gp
LCByZW1lbWJlckJveCwgRkFMU0UsIEZBTFNFLCAwKTsKIAotICAgICAgICBtX3JlbWVtYmVyQ2hl
Y2tCdXR0b24gPSBndGtfY2hlY2tfYnV0dG9uX25ld193aXRoX21uZW1vbmljKF8oIl9SZW1lbWJl
ciBwYXNzd29yZCIpKTsKLSAgICAgICAgZ3RrX2xhYmVsX3NldF9saW5lX3dyYXAoR1RLX0xBQkVM
KGd0a19iaW5fZ2V0X2NoaWxkKEdUS19CSU4obV9yZW1lbWJlckNoZWNrQnV0dG9uKSkpLCBUUlVF
KTsKLSAgICAgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1gocmVtZW1iZXJCb3gpLCBtX3Jl
bWVtYmVyQ2hlY2tCdXR0b24sIEZBTFNFLCBGQUxTRSwgMCk7Ci0gICAgfQotfQotCi1zdGF0aWMg
Ym9vbCBnZXRTYXZlZExvZ2luKFNvdXBBdXRoKiBhdXRoLCBjb25zdCBjaGFyKiogdXNlcm5hbWUs
IGNvbnN0IGNoYXIqKiBwYXNzd29yZCkKLXsKLSNpZmRlZiBTT1VQX1RZUEVfUEFTU1dPUkRfTUFO
QUdFUgotICAgIEdTTGlzdCogdXNlcnMgPSBzb3VwX2F1dGhfZ2V0X3NhdmVkX3VzZXJzKGF1dGgp
OwotICAgIGlmICghdXNlcnMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICp1c2VybmFt
ZSA9IHN0YXRpY19jYXN0PGNoYXIqPih1c2Vycy0+ZGF0YSk7Ci0gICAgKnBhc3N3b3JkID0gc291
cF9hdXRoX2dldF9zYXZlZF9wYXNzd29yZChhdXRoLCAqdXNlcm5hbWUpOwotICAgIGdfc2xpc3Rf
ZnJlZSh1c2Vycyk7Ci0KLSAgICByZXR1cm4gKnVzZXJuYW1lICYmICpwYXNzd29yZDsKLSNlbHNl
Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCisgICAgbV9yZW1lbWJlckNoZWNrQnV0dG9uID0g
Z3RrX2NoZWNrX2J1dHRvbl9uZXdfd2l0aF9tbmVtb25pYyhfKCJfUmVtZW1iZXIgcGFzc3dvcmQi
KSk7CisgICAgZ3RrX2xhYmVsX3NldF9saW5lX3dyYXAoR1RLX0xBQkVMKGd0a19iaW5fZ2V0X2No
aWxkKEdUS19CSU4obV9yZW1lbWJlckNoZWNrQnV0dG9uKSkpLCBUUlVFKTsKKyAgICBndGtfYm94
X3BhY2tfc3RhcnQoR1RLX0JPWChyZW1lbWJlckJveCksIG1fcmVtZW1iZXJDaGVja0J1dHRvbiwg
RkFMU0UsIEZBTFNFLCAwKTsKIH0KIAogdm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6c2hv
dygpCiB7Ci0gICAgY29uc3QgY2hhciogdXNlcm5hbWUgPSAwOwotICAgIGNvbnN0IGNoYXIqIHBh
c3N3b3JkID0gMDsKLSAgICBib29sIGhhdmVTYXZlZExvZ2luID0gZ2V0U2F2ZWRMb2dpbihtX2F1
dGguZ2V0KCksICZ1c2VybmFtZSwgJnBhc3N3b3JkKTsKLSAgICBzb3VwX3Nlc3Npb25fcGF1c2Vf
bWVzc2FnZShtX3Nlc3Npb24sIG1fbWVzc2FnZS5nZXQoKSk7Ci0gICAgZ3RrX2VudHJ5X3NldF90
ZXh0KEdUS19FTlRSWShtX2xvZ2luRW50cnkpLCB1c2VybmFtZSA/IHVzZXJuYW1lIDogIiIpOwot
ICAgIGd0a19lbnRyeV9zZXRfdGV4dChHVEtfRU5UUlkobV9wYXNzd29yZEVudHJ5KSwgcGFzc3dv
cmQgPyBwYXNzd29yZCA6ICIiKTsKLSAgICBpZiAobV9yZW1lbWJlckNoZWNrQnV0dG9uICYmIGhh
dmVTYXZlZExvZ2luKQotICAgICAgICBndGtfdG9nZ2xlX2J1dHRvbl9zZXRfYWN0aXZlKEdUS19U
T0dHTEVfQlVUVE9OKG1fcmVtZW1iZXJDaGVja0J1dHRvbiksIFRSVUUpOwogICAgIGdfc2lnbmFs
X2Nvbm5lY3QobV9kaWFsb2csICJyZXNwb25zZSIsIEdfQ0FMTEJBQ0soYXV0aGVudGljYXRpb25E
aWFsb2dSZXNwb25zZUNhbGxiYWNrKSwgdGhpcyk7CiAgICAgZ3RrX3dpZGdldF9zaG93X2FsbCht
X2RpYWxvZyk7CiB9CiAKIHZvaWQgR3RrQXV0aGVudGljYXRpb25EaWFsb2c6OmRlc3Ryb3koKQog
ewotICAgIGJvb2wgc2hvdWxkRGVsZXRlID0gdHJ1ZTsKLQotICAgIHNvdXBfc2Vzc2lvbl91bnBh
dXNlX21lc3NhZ2UobV9zZXNzaW9uLCBtX21lc3NhZ2UuZ2V0KCkpOwogICAgIGd0a193aWRnZXRf
ZGVzdHJveShtX2RpYWxvZyk7Ci0KLSNpZmRlZiBTT1VQX1RZUEVfUEFTU1dPUkRfTUFOQUdFUgot
ICAgIHNob3VsZERlbGV0ZSA9ICFtX2lzU2F2aW5nUGFzc3dvcmQ7Ci0jZW5kaWYKLQotICAgIC8v
IERvIG5vdCBkZWxldGUgdGhlIG9iamVjdCBpZiBpdCdzIHN0aWxsIHNhdmluZyB0aGUgcGFzc3dv
cmQsCi0gICAgLy8gdGhlIHNhdmUgcGFzc3dvcmQgY2FsbGJhY2sgd2lsbCBkZWxldGUgaXQuCi0g
ICAgaWYgKHNob3VsZERlbGV0ZSkKLSAgICAgICAgZGVsZXRlIHRoaXM7Ci19Ci0KLSNpZmRlZiBT
T1VQX1RZUEVfUEFTU1dPUkRfTUFOQUdFUgotdm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6
c2F2ZVBhc3N3b3JkQ2FsbGJhY2soU291cE1lc3NhZ2UqIG1lc3NhZ2UsIEd0a0F1dGhlbnRpY2F0
aW9uRGlhbG9nKiBkaWFsb2cpCi17Ci0gICAgZGlhbG9nLT5zYXZlUGFzc3dvcmQoKTsKLX0KLQot
dm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6c2F2ZVBhc3N3b3JkKCkKLXsKLSAgICBBU1NF
UlQoIW1fdXNlcm5hbWUuaXNOdWxsKCkpOwotICAgIEFTU0VSVCghbV9wYXNzd29yZC5pc051bGwo
KSk7Ci0KLSAgICAvLyBBbnl0aGluZyBidXQgNDAxIGFuZCA1eHggbWVhbnMgdGhlIHBhc3N3b3Jk
IHdhcyBhY2NlcHRlZC4KLSAgICBpZiAobV9tZXNzYWdlLmdldCgpLT5zdGF0dXNfY29kZSAhPSA0
MDEgJiYgbV9tZXNzYWdlLmdldCgpLT5zdGF0dXNfY29kZSA8IDUwMCkKLSAgICAgICAgc291cF9h
dXRoX3NhdmVfcGFzc3dvcmQobV9hdXRoLmdldCgpLCBtX3VzZXJuYW1lLmRhdGEoKSwgbV9wYXNz
d29yZC5kYXRhKCkpOwotCi0gICAgLy8gRGlzY29ubmVjdCB0aGUgY2FsbGJhY2suIElmIHRoZSBh
dXRoZW50aWNhdGlvbiBzdWNjZWVkZWQgd2UgYXJlIGRvbmUsCi0gICAgLy8gYW5kIGlmIGl0IGZh
aWxlZCB3ZSdsbCBjcmVhdGUgYSBuZXcgR3RrQXV0aGVudGljYXRpb25EaWFsb2cgYW5kIHdlJ2xs
Ci0gICAgLy8gY29ubmVjdCB0byAnZ290LWhlYWRlcnMnIGFnYWluIGluIEd0a0F1dGhlbnRpY2F0
aW9uRGlhbG9nOjphdXRoZW50aWNhdGUoKQotICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVj
dChtX21lc3NhZ2UuZ2V0KCksIG1fc2F2ZVBhc3N3b3JkSGFuZGxlcik7Ci0KLSAgICAvLyBEaWFs
b2cgaGFzIGJlZW4gYWxyZWFkeSBkZXN0cm95ZWQsIGFmdGVyIHNhdmluZyB0aGUgcGFzc3dvcmQg
aXQgc2hvdWxkIGJlIGRlbGV0ZWQuCiAgICAgZGVsZXRlIHRoaXM7CiB9Ci0jZW5kaWYKIAogdm9p
ZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6YXV0aGVudGljYXRlKCkKIHsKICAgICBjb25zdCBj
aGFyICp1c2VybmFtZSA9IGd0a19lbnRyeV9nZXRfdGV4dChHVEtfRU5UUlkobV9sb2dpbkVudHJ5
KSk7CiAgICAgY29uc3QgY2hhciAqcGFzc3dvcmQgPSBndGtfZW50cnlfZ2V0X3RleHQoR1RLX0VO
VFJZKG1fcGFzc3dvcmRFbnRyeSkpOwotICAgIHNvdXBfYXV0aF9hdXRoZW50aWNhdGUobV9hdXRo
LmdldCgpLCB1c2VybmFtZSwgcGFzc3dvcmQpOwotCi0jaWZkZWYgU09VUF9UWVBFX1BBU1NXT1JE
X01BTkFHRVIKLSAgICBpZiAobV9yZW1lbWJlckNoZWNrQnV0dG9uICYmIGd0a190b2dnbGVfYnV0
dG9uX2dldF9hY3RpdmUoR1RLX1RPR0dMRV9CVVRUT04obV9yZW1lbWJlckNoZWNrQnV0dG9uKSkp
IHsKLSAgICAgICAgbV91c2VybmFtZSA9IHVzZXJuYW1lOwotICAgICAgICBtX3Bhc3N3b3JkID0g
cGFzc3dvcmQ7Ci0gICAgICAgIG1faXNTYXZpbmdQYXNzd29yZCA9IHRydWU7Ci0gICAgICAgIG1f
c2F2ZVBhc3N3b3JkSGFuZGxlciA9IGdfc2lnbmFsX2Nvbm5lY3QobV9tZXNzYWdlLmdldCgpLCAi
Z290LWhlYWRlcnMiLCBHX0NBTExCQUNLKHNhdmVQYXNzd29yZENhbGxiYWNrKSwgdGhpcyk7Ci0g
ICAgfQotI2VuZGlmCisgICAgYm9vbCByZW1lbWJlckNyZWRlbnRpYWxzID0gZ3RrX3RvZ2dsZV9i
dXR0b25fZ2V0X2FjdGl2ZShHVEtfVE9HR0xFX0JVVFRPTihtX3JlbWVtYmVyQ2hlY2tCdXR0b24p
KTsKKyAgICBtX2NoYWxsZW5nZS5hdXRoZW50aWNhdGlvbkNsaWVudCgpLT5yZWNlaXZlZENyZWRl
bnRpYWwobV9jaGFsbGVuZ2UsCisgICAgICAgIENyZWRlbnRpYWwoU3RyaW5nOjpmcm9tVVRGOCh1
c2VybmFtZSksIFN0cmluZzo6ZnJvbVVURjgocGFzc3dvcmQpLAorICAgICAgICAgICAgcmVtZW1i
ZXJDcmVkZW50aWFscyA/IENyZWRlbnRpYWxQZXJzaXN0ZW5jZVBlcm1hbmVudCA6IENyZWRlbnRp
YWxQZXJzaXN0ZW5jZUZvclNlc3Npb24pKTsKIH0KIAogdm9pZCBHdGtBdXRoZW50aWNhdGlvbkRp
YWxvZzo6YXV0aGVudGljYXRpb25EaWFsb2dSZXNwb25zZUNhbGxiYWNrKEd0a1dpZGdldCosIGdp
bnQgcmVzcG9uc2VJRCwgR3RrQXV0aGVudGljYXRpb25EaWFsb2cqIGRpYWxvZykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmgK
aW5kZXggNzU4MjQxY2QzMzZkODMzNjU0NTk1NTBhMzhmMGUxNmQ0OTY4YjQyNS4uNjNmYWM2OTk3
Njg3NjhhMGEyMDU1ODM5MjZkMzRmMGJjNGQxYTdlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmgKQEAgLTIwLDEzICsy
MCwxMiBAQAogI2lmbmRlZiBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZ19oCiAjZGVmaW5lIEd0a0F1
dGhlbnRpY2F0aW9uRGlhbG9nX2gKIAotI2RlZmluZSBMSUJTT1VQX0lfSEFWRV9SRUFEX0JVR181
OTQzNzdfQU5EX0tOT1dfU09VUF9QQVNTV09SRF9NQU5BR0VSX01JR0hUX0dPX0FXQVkKLQotI2lu
Y2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZS5oIgogI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKICNpbmNsdWRlIDxsaWJzb3VwL3Nv
dXAuaD4KICNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgogI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM2LDM3ICszNSwy
MCBAQCBjbGFzcyBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiAKIHB1YmxpYzoKLSAgICBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyhHdGtXaW5k
b3cqLCBTb3VwU2Vzc2lvbiosIFNvdXBNZXNzYWdlKiwgU291cEF1dGgqKTsKKyAgICBHdGtBdXRo
ZW50aWNhdGlvbkRpYWxvZyhHdGtXaW5kb3cqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSYpOwogICAgIH5HdGtBdXRoZW50aWNhdGlvbkRpYWxvZygpOwotCiAgICAgdm9pZCBzaG93KCk7
CiAKIHByaXZhdGU6CiAgICAgdm9pZCBkZXN0cm95KCk7CiAgICAgdm9pZCBhdXRoZW50aWNhdGUo
KTsKLQotI2lmZGVmIFNPVVBfVFlQRV9QQVNTV09SRF9NQU5BR0VSCi0gICAgdm9pZCBzYXZlUGFz
c3dvcmQoKTsKLSAgICBzdGF0aWMgdm9pZCBzYXZlUGFzc3dvcmRDYWxsYmFjayhTb3VwTWVzc2Fn
ZSosIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKik7Ci0jZW5kaWYKLQogICAgIHN0YXRpYyB2b2lk
IGF1dGhlbnRpY2F0aW9uRGlhbG9nUmVzcG9uc2VDYWxsYmFjayhHdGtXaWRnZXQqLCBnaW50IHJl
c3BvbnNlSUQsIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKik7CiAKKyAgICBBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSBtX2NoYWxsZW5nZTsKICAgICBHdGtXaWRnZXQqIG1fZGlhbG9nOwotICAgIFNv
dXBTZXNzaW9uKiBtX3Nlc3Npb247Ci0gICAgR1JlZlB0cjxTb3VwTWVzc2FnZT4gbV9tZXNzYWdl
OwotICAgIEdSZWZQdHI8U291cEF1dGg+IG1fYXV0aDsKLQogICAgIEd0a1dpZGdldCogbV9sb2dp
bkVudHJ5OwogICAgIEd0a1dpZGdldCogbV9wYXNzd29yZEVudHJ5OwogICAgIEd0a1dpZGdldCog
bV9yZW1lbWJlckNoZWNrQnV0dG9uOwotCi0jaWZkZWYgU09VUF9UWVBFX1BBU1NXT1JEX01BTkFH
RVIKLSAgICBib29sIG1faXNTYXZpbmdQYXNzd29yZDsKLSAgICB1bnNpZ25lZCBsb25nIG1fc2F2
ZVBhc3N3b3JkSGFuZGxlcjsKLSAgICBDU3RyaW5nIG1fdXNlcm5hbWU7Ci0gICAgQ1N0cmluZyBt
X3Bhc3N3b3JkOwotI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgKaW5kZXggYzgx
NzAwNGJkZWEzMDFiYTBmMmQyZjEyYjMxMWU2Yjc5NWRlY2RkMi4uY2FhNjZiY2U4YjAwNTA3NTE4
YmM5NDdhZGVhODcyNTI4N2M3NzI3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaApAQCAtOTcsNyArOTcsNyBAQCBlbnVtIFN0b3JlZENy
ZWRlbnRpYWxzIHsKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBUaW1lcjsKIAogY2xhc3Mg
UmVzb3VyY2VIYW5kbGUgOiBwdWJsaWMgUmVmQ291bnRlZDxSZXNvdXJjZUhhbmRsZT4KLSNpZiBQ
TEFURk9STShNQUMpIHx8IFVTRShDRk5FVFdPUkspIHx8IFVTRShDVVJMKQorI2lmIFBMQVRGT1JN
KE1BQykgfHwgVVNFKENGTkVUV09SSykgfHwgVVNFKENVUkwpIHx8IFBMQVRGT1JNKEdUSykKICAg
ICAsIHB1YmxpYyBBdXRoZW50aWNhdGlvbkNsaWVudAogI2VuZGlmCiAgICAgewpAQCAtMTE0LDcg
KzExNCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHdpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVl
c3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKTsKICAgICBib29s
IHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKCk7CiAjZW5kaWYKLSNpZiBQTEFURk9STShNQUMp
IHx8IFVTRShDRk5FVFdPUkspIHx8IFVTRShDVVJMKQorI2lmIFBMQVRGT1JNKE1BQykgfHwgVVNF
KENGTkVUV09SSykgfHwgVVNFKENVUkwpIHx8IFBMQVRGT1JNKEdUSykKICAgICB2b2lkIGRpZFJl
Y2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSYpOwogICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UmLCBjb25zdCBDcmVkZW50aWFsJik7CiAgICAgdmlydHVhbCB2b2lkIHJl
Y2VpdmVkUmVxdWVzdFRvQ29udGludWVXaXRob3V0Q3JlZGVudGlhbChjb25zdCBBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSYpOwpAQCAtMTc0LDExICsxNzQsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IHZvaWQgc2V0SG9zdEFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJik7CiAg
ICAgc3RhdGljIHZvaWQgc2V0Q2xpZW50Q2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJiBob3N0LCBH
VGxzQ2VydGlmaWNhdGUqKTsKICAgICBzdGF0aWMgdm9pZCBzZXRJZ25vcmVTU0xFcnJvcnMoYm9v
bCk7Ci0KLSNpZiBQTEFURk9STShHVEspCi0gICAgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKLSAgICB2aXJ0dWFs
IHZvaWQgcmVjZWl2ZWRSZXF1ZXN0VG9Db250aW51ZVdpdGhvdXRDcmVkZW50aWFsKGNvbnN0IEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7Ci0jZW5kaWYKICNlbmRpZgogCiAgICAgLy8gVXNlZCB0
byB3b3JrIGFyb3VuZCB0aGUgZmFjdCB0aGF0IHlvdSBkb24ndCBnZXQgYW55IG1vcmUgTlNVUkxD
b25uZWN0aW9uIGNhbGxiYWNrcyB1bnRpbCB5b3UgcmV0dXJuIGZyb20gdGhlIG9uZSB5b3UncmUg
aW4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oCmluZGV4IDg0NzEzYzhkOTMzMzVkZTkyMDE2
MDM0MTBmOTQ4NTczMjFlZmI2ZjIuLjE0ZWU2ZjQwYjM1MzViMGJlNmRjZDM1M2JlNWI0MTU1ZjQw
Y2UyZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9B
dXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oCkBAIC00NSw3ICs0NSw2IEBAIHB1
YmxpYzoKICAgICB9CiAKICAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShTb3VwU2Vzc2lvbios
IFNvdXBNZXNzYWdlKiwgU291cEF1dGgqLCBib29sIHJldHJ5aW5nLCBBdXRoZW50aWNhdGlvbkNs
aWVudCopOwotCiAgICAgQXV0aGVudGljYXRpb25DbGllbnQqIGF1dGhlbnRpY2F0aW9uQ2xpZW50
KCkgY29uc3QgeyByZXR1cm4gbV9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXQoKTsgfQogICAgIFNv
dXBTZXNzaW9uKiBzb3VwU2Vzc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fc291cFNlc3Npb24uZ2V0
KCk7IH0KICAgICBTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX3Nv
dXBNZXNzYWdlLmdldCgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCmluZGV4IGM1ODJmMDBiOTQ5
NzI2ZjI4MjNlNTBjYmZjMDVlZjY3N2MwOTBjODUuLmE4MjhhMTExOTk0YzY2OTUxYTNkMDJjYzlm
OTVlMTlkZDU3ZjExMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCkBAIC0xNDcsNiArMTQ3LDEy
IEBAIHB1YmxpYzoKICAgICAgICAgZGlkRmluaXNoTG9hZGluZyhoYW5kbGUsIDApOwogICAgIH0K
IAorICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoUmVz
b3VyY2VIYW5kbGUqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlKQor
ICAgIHsKKyAgICAgICAgLy8gV2UgZG8gbm90IGhhbmRsZSBhdXRoZW50aWNhdGlvbiBmb3Igc3lu
Y2hyb25vdXMgWE1MSHR0cFJlcXVlc3RzLgorICAgICAgICBjaGFsbGVuZ2UuYXV0aGVudGljYXRp
b25DbGllbnQoKS0+cmVjZWl2ZWRSZXF1ZXN0VG9Db250aW51ZVdpdGhvdXRDcmVkZW50aWFsKGNo
YWxsZW5nZSk7CisgICAgfQorCiAgICAgdm9pZCBydW4oKQogICAgIHsKICAgICAgICAgaWYgKCFt
X2ZpbmlzaGVkKQpAQCAtODUzLDEyICs4NTksNTAgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0
SWdub3JlU1NMRXJyb3JzKGJvb2wgaWdub3JlU1NMRXJyb3JzKQogI2lmIFBMQVRGT1JNKEdUSykK
IHZvaWQgUmVzb3VyY2VIYW5kbGU6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShj
b25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlKQogewotICAgIGlmIChjbGll
bnQoKSkKKyAgICBBU1NFUlQoZC0+bV9jdXJyZW50V2ViQ2hhbGxlbmdlLmlzTnVsbCgpKTsKKyAg
ICBkLT5tX2N1cnJlbnRXZWJDaGFsbGVuZ2UgPSBjaGFsbGVuZ2U7CisKKyAgICBpZiAoY2xpZW50
KCkpIHsKKyAgICAgICAgc291cF9zZXNzaW9uX3BhdXNlX21lc3NhZ2UoY2hhbGxlbmdlLnNvdXBT
ZXNzaW9uKCksIGNoYWxsZW5nZS5zb3VwTWVzc2FnZSgpKTsKICAgICAgICAgY2xpZW50KCktPmRp
ZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSh0aGlzLCBjaGFsbGVuZ2UpOworICAgIH0K
K30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRSZXF1ZXN0VG9Db250aW51ZVdpdGhv
dXRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UpCit7
CisgICAgQVNTRVJUKCFjaGFsbGVuZ2UuaXNOdWxsKCkpOworICAgIGlmIChjaGFsbGVuZ2UgIT0g
ZC0+bV9jdXJyZW50V2ViQ2hhbGxlbmdlKQorICAgICAgICByZXR1cm47CisgICAgc291cF9zZXNz
aW9uX3VucGF1c2VfbWVzc2FnZShjaGFsbGVuZ2Uuc291cFNlc3Npb24oKSwgY2hhbGxlbmdlLnNv
dXBNZXNzYWdlKCkpOworCisgICAgY2xlYXJBdXRoZW50aWNhdGlvbigpOwogfQogCi12b2lkIFJl
c291cmNlSGFuZGxlOjpyZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwo
Y29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKQordm9pZCBSZXNvdXJjZUhhbmRsZTo6cmVj
ZWl2ZWRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2Us
IGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCiB7CisgICAgQVNTRVJUKCFjaGFsbGVuZ2Uu
aXNOdWxsKCkpOworICAgIGlmIChjaGFsbGVuZ2UgIT0gZC0+bV9jdXJyZW50V2ViQ2hhbGxlbmdl
KQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoY2hhbGxlbmdlLnNvdXBTZXNzaW9uKCkp
OworICAgIEFTU0VSVChjaGFsbGVuZ2Uuc291cE1lc3NhZ2UoKSk7CisgICAgc291cF9hdXRoX2F1
dGhlbnRpY2F0ZShjaGFsbGVuZ2Uuc291cEF1dGgoKSwgY3JlZGVudGlhbC51c2VyKCkudXRmOCgp
LmRhdGEoKSwgY3JlZGVudGlhbC5wYXNzd29yZCgpLnV0ZjgoKS5kYXRhKCkpOworICAgIHNvdXBf
c2Vzc2lvbl91bnBhdXNlX21lc3NhZ2UoY2hhbGxlbmdlLnNvdXBTZXNzaW9uKCksIGNoYWxsZW5n
ZS5zb3VwTWVzc2FnZSgpKTsKKworICAgIGNsZWFyQXV0aGVudGljYXRpb24oKTsKK30KKwordm9p
ZCBSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRDYW5jZWxsYXRpb24oY29uc3QgQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkKK3sKKyAgICBBU1NFUlQoIWNoYWxsZW5nZS5pc051bGwo
KSk7CisgICAgaWYgKGNoYWxsZW5nZSAhPSBkLT5tX2N1cnJlbnRXZWJDaGFsbGVuZ2UpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPnJlY2Vp
dmVkQ2FuY2VsbGF0aW9uKHRoaXMsIGNoYWxsZW5nZSk7CisgICAgc291cF9zZXNzaW9uX3VucGF1
c2VfbWVzc2FnZShjaGFsbGVuZ2Uuc291cFNlc3Npb24oKSwgY2hhbGxlbmdlLnNvdXBNZXNzYWdl
KCkpOworCisgICAgY2xlYXJBdXRoZW50aWNhdGlvbigpOwogfQogI2VuZGlmCiAKQEAgLTEwMjMs
NyArMTA2Nyw3IEBAIHN0YXRpYyB2b2lkIGF1dGhlbmljYXRlQ2FsbGJhY2soU291cFNlc3Npb24q
IHNlc3Npb24sIFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwKIAogICAgIC8vIFdlIGRvbid0IG5l
ZWQgdG8gcGFzcyBhIGNsaWVudCBoZXJlLCBiZWNhdXNlIEdUSysgZG9lcyBub3QgeWV0IHVzZSB0
aGUgQXV0aGVudGljYXRpb25DbGllbnQgdG8KICAgICAvLyByZXNwb25kIHRvIHRoZSBBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSAtLSBpbnN0ZWFkIGRlYWxpbmcgd2l0aCB0aGUgU291cCBvYmplY3Rz
IGRpcmVjdGx5LgotICAgIGhhbmRsZS0+ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKHNlc3Npb24sIHNvdXBNZXNzYWdlLCBzb3VwQXV0aCwg
cmV0cnlpbmcsIDApKTsKKyAgICBoYW5kbGUtPmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZShBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShzZXNzaW9uLCBzb3VwTWVzc2FnZSwgc291cEF1
dGgsIHJldHJ5aW5nLCBoYW5kbGUuZ2V0KCkpKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5j
cHAKaW5kZXggZjc5Mjk5MTE5Y2M2M2I1ZGExMmUyNmU3MWUzNjAyNTZiYzgxZWY4My4uZjNjY2Zj
MTdmYWE0YTE2M2U0ZjlmZmVjYzE3NDU3ZjFkNDk0MTVkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcApA
QCAtMjAxLDEyICsyMDEsMTQgQEAgRnJhbWVMb2FkZXJDbGllbnQ6OnNob3VsZFVzZUNyZWRlbnRp
YWxTdG9yYWdlKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQKIAogdm9pZCBGcmFt
ZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uo
V2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nICBpZGVudGlmaWVyLCBjb25z
dCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlKQogewotICAgIGlmIChEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRHdGs6OmR1bXBSZW5kZXJUcmVlTW9kZUVuYWJsZWQoKSkKKyAgICBpZiAo
RHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpkdW1wUmVuZGVyVHJlZU1vZGVFbmFibGVkKCkpIHsK
KyAgICAgICAgY2hhbGxlbmdlLmF1dGhlbnRpY2F0aW9uQ2xpZW50KCktPnJlY2VpdmVkUmVxdWVz
dFRvQ29udGludWVXaXRob3V0Q3JlZGVudGlhbChjaGFsbGVuZ2UpOwogICAgICAgICByZXR1cm47
CisgICAgfQogCiAgICAgR3RrV2lkZ2V0KiB0b3BsZXZlbCA9IGd0a193aWRnZXRfZ2V0X3RvcGxl
dmVsKEdUS19XSURHRVQod2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobV9mcmFtZSkpKTsK
ICAgICBHdGtXaW5kb3cqIHRvcGxldmVsV2luZG93ID0gd2lkZ2V0SXNPbnNjcmVlblRvcGxldmVs
V2luZG93KHRvcGxldmVsKSA/IEdUS19XSU5ET1codG9wbGV2ZWwpIDogMDsKLSAgICBHdGtBdXRo
ZW50aWNhdGlvbkRpYWxvZyogZGlhbG9nID0gbmV3IEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKHRv
cGxldmVsV2luZG93LCBjaGFsbGVuZ2Uuc291cFNlc3Npb24oKSwgY2hhbGxlbmdlLnNvdXBNZXNz
YWdlKCksIGNoYWxsZW5nZS5zb3VwQXV0aCgpKTsKKyAgICBHdGtBdXRoZW50aWNhdGlvbkRpYWxv
ZyogZGlhbG9nID0gbmV3IEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKHRvcGxldmVsV2luZG93LCBj
aGFsbGVuZ2UpOwogICAgIGRpYWxvZy0+c2hvdygpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c291cGF1dGhkaWFsb2cuY3BwIGIvU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHNvdXBhdXRoZGlhbG9nLmNwcAppbmRleCAyYjRiNzc3MmUzZGIz
Y2U3YTVhNGE5NzhlMGQwMTc3NWZkMjVlYTYwLi42ZWI2NzY1MmZjOWUwZDdkZmFhNTEyYTRkMDFk
MmYyODZiNzYxMzg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
c291cGF1dGhkaWFsb2cuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRz
b3VwYXV0aGRpYWxvZy5jcHAKQEAgLTIwLDcgKzIwLDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJ3ZWJraXRzb3VwYXV0aGRpYWxvZy5oIgogCisjaW5jbHVkZSAiQXV0aGVudGlj
YXRpb25DbGllbnQuaCIKICNpbmNsdWRlICJHdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5oIgorI2lu
Y2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAid2Via2l0bWFyc2hhbC5oIgogCiB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTM1LDYgKzM3LDQ3IEBAIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogICogaGFuZGxpbmcgSFRUUCBiYXNpYyBhdXRoLgogICovCiAKKworLy8gVGhp
cyBjbGFzcyBleGlzdHMgb25seSBmb3IgQVBJIGNvbXBhdGliaWxpdHkgcmVhc29ucy4gV2ViS2l0
U291cEF1dGhEaWFsb2cgd2FzIGV4cG9zZWQKKy8vIGluIHRoZSBwdWJsaWMgQVBJLCBzbyB3ZSBt
dXN0IHByb3ZpZGUgdGhpcyAiZmFrZSIgQXV0aGVudGljYXRpb25DbGllbnQgaW4gb3JkZXIgdG8K
Ky8vIGNvbnRpbnVlIHVzaW5nIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nIHdpdGggdGhlIG5ldyBh
dXRoZW50aWNhdGlvbiBhcmNoaXRlY3R1cmUuCitjbGFzcyBXZWJLaXRTb3VwQXV0aERpYWxvZ0F1
dGhlbnRpY2F0aW9uQ2xpZW50IDogcHVibGljIFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2xpZW50
LCBwdWJsaWMgUmVmQ291bnRlZDxXZWJLaXRTb3VwQXV0aERpYWxvZ0F1dGhlbnRpY2F0aW9uQ2xp
ZW50PiB7Cit1c2luZyBSZWZDb3VudGVkPFdlYktpdFNvdXBBdXRoRGlhbG9nQXV0aGVudGljYXRp
b25DbGllbnQ+OjpyZWY7Cit1c2luZyBSZWZDb3VudGVkPFdlYktpdFNvdXBBdXRoRGlhbG9nQXV0
aGVudGljYXRpb25DbGllbnQ+OjpkZXJlZjsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlJiBjaGFsbGVuZ2UpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCByZWNlaXZl
ZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UmIGNoYWxsZW5nZSkKKyAgICB7CisgICAgICAgIHNvdXBfc2Vzc2lvbl91bnBhdXNl
X21lc3NhZ2UoY2hhbGxlbmdlLnNvdXBTZXNzaW9uKCksIGNoYWxsZW5nZS5zb3VwTWVzc2FnZSgp
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRDcmVkZW50aWFsKGNvbnN0IEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UsIGNvbnN0IENyZWRlbnRpYWwmIGNyZWRl
bnRpYWwpCisgICAgeworICAgICAgICBzb3VwX2F1dGhfYXV0aGVudGljYXRlKGNoYWxsZW5nZS5z
b3VwQXV0aCgpLCBjcmVkZW50aWFsLnVzZXIoKS51dGY4KCkuZGF0YSgpLCBjcmVkZW50aWFsLnBh
c3N3b3JkKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHNvdXBfc2Vzc2lvbl91bnBhdXNlX21l
c3NhZ2UoY2hhbGxlbmdlLnNvdXBTZXNzaW9uKCksIGNoYWxsZW5nZS5zb3VwTWVzc2FnZSgpKTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRDYW5jZWxsYXRpb24oY29uc3QgQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkKKyAgICB7CisgICAgICAgIHNvdXBfc2Vz
c2lvbl91bnBhdXNlX21lc3NhZ2UoY2hhbGxlbmdlLnNvdXBTZXNzaW9uKCksIGNoYWxsZW5nZS5z
b3VwTWVzc2FnZSgpKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIHNlZW1zIG5lY2Vzc2FyeSB0byBt
YWtlIHRoZSBjb21waWxlciBoYXBweS4gQm90aCBBdXRoZW50aWNhdGlvbkNsaWVudCBhbmQKKyAg
ICAvLyBSZWZDb3VudGVkPFQ+IGV4cG9zZSBhIHJlZi9kZXJlZiBtZXRob2QsIHdoaWNoIGludGVy
ZmVyZXMgd2l0aCB0aGUgdXNlIG9mIGEgUmVmUHRyLgorICAgIHZvaWQgZGVyZWZXZWJLaXRTb3Vw
QXV0aERpYWxvZ0F1dGhlbnRpY2F0aW9uQ2xpZW50KCkKKyAgICB7CisgICAgICAgIGRlcmVmKCk7
CisgICAgfQorCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCByZWZBdXRoZW50aWNhdGlvbkNs
aWVudCgpIHsgcmVmKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVyZWZBdXRoZW50aWNhdGlvbkNs
aWVudCgpIHsgZGVyZWYoKTsgfQorICAgIEdSZWZQdHI8U291cFNlc3Npb24+IG1fc2Vzc2lvbjsK
K307CisKIHN0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX2F1dGhfZGlhbG9nX3Nlc3Npb25fZmVhdHVy
ZV9pbml0KFNvdXBTZXNzaW9uRmVhdHVyZUludGVyZmFjZSosIGdwb2ludGVyKTsKIHN0YXRpYyB2
b2lkIGF0dGFjaChTb3VwU2Vzc2lvbkZlYXR1cmUqLCBTb3VwU2Vzc2lvbiopOwogc3RhdGljIHZv
aWQgZGV0YWNoKFNvdXBTZXNzaW9uRmVhdHVyZSosIFNvdXBTZXNzaW9uKik7CkBAIC04OCwxNSAr
MTMxLDIwIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX2F1dGhfZGlhbG9nX3Nlc3Npb25fZmVh
dHVyZV9pbml0KFNvdXBTZXNzaW9uRmVhdHVyZUludGVyCiAgICAgZmVhdHVyZUludGVyZmFjZS0+
ZGV0YWNoID0gZGV0YWNoOwogfQogCi1zdGF0aWMgdm9pZCBzZXNzaW9uQXV0aGVudGljYXRlKFNv
dXBTZXNzaW9uKiBzZXNzaW9uLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgU291cEF1dGgqIGF1dGgs
IGdib29sZWFuLCBTb3VwU2Vzc2lvbkZlYXR1cmUqIG1hbmFnZXIpCitzdGF0aWMgdm9pZCBzZXNz
aW9uQXV0aGVudGljYXRlKFNvdXBTZXNzaW9uKiBzZXNzaW9uLCBTb3VwTWVzc2FnZSogbWVzc2Fn
ZSwgU291cEF1dGgqIGF1dGgsIGdib29sZWFuIHJldHJ5aW5nLCBTb3VwU2Vzc2lvbkZlYXR1cmUq
IG1hbmFnZXIpCiB7Ci0gICAgR3RrQXV0aGVudGljYXRpb25EaWFsb2cqIGF1dGhEaWFsb2c7Ci0g
ICAgR3RrV2lkZ2V0KiB0b3BsZXZlbCA9IDA7Ci0KLSAgICAvKiBHZXQgdGhlIGN1cnJlbnQgdG9w
bGV2ZWwgKi8KKyAgICBHdGtXaW5kb3cqIHRvcGxldmVsID0gMDsKICAgICBnX3NpZ25hbF9lbWl0
KG1hbmFnZXIsIHNpZ25hbHNbQ1VSUkVOVF9UT1BMRVZFTF0sIDAsIG1lc3NhZ2UsICZ0b3BsZXZl
bCk7CiAKLSAgICBhdXRoRGlhbG9nID0gbmV3IEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKHRvcGxl
dmVsID8gR1RLX1dJTkRPVyh0b3BsZXZlbCkgOiAwLCBzZXNzaW9uLCBtZXNzYWdlLCBhdXRoKTsK
KyAgICBXZWJLaXRTb3VwQXV0aERpYWxvZ0F1dGhlbnRpY2F0aW9uQ2xpZW50KiBjbGllbnQgPSBu
ZXcgV2ViS2l0U291cEF1dGhEaWFsb2dBdXRoZW50aWNhdGlvbkNsaWVudCgpOworICAgIEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlIGNoYWxsZW5nZShzZXNzaW9uLCBtZXNzYWdlLCBhdXRoLCByZXRy
eWluZywgY2xpZW50KTsKKyAgICBzb3VwX3Nlc3Npb25fdW5wYXVzZV9tZXNzYWdlKHNlc3Npb24s
IG1lc3NhZ2UpOworCisgICAgLy8gQSBSZWZQdHIgd291bGQgYmUgYmV0dGVyIGhlcmUsIGJ1dCBp
dCBzZWVtcyB0aGF0IGFjY2Vzc2luZyBSZWZDb3VudGVkOjpkZXJlZiBmcm9tIHRoaXMgY29udGV4
dCBpcworICAgIC8vIGltcG9zc2libGUgd2l0aCBnY2MsIGR1ZSB0byBXZWJLaXRTb3VwQXV0aERp
YWxvZ0F1dGhlbnRpY2F0aW9uQ2xpZW50J3MgdHdvIHN1cGVyY2xhc3Nlcy4KKyAgICBjbGllbnQt
PmRlcmVmV2ViS2l0U291cEF1dGhEaWFsb2dBdXRoZW50aWNhdGlvbkNsaWVudCgpOworCisgICAg
R3RrQXV0aGVudGljYXRpb25EaWFsb2cqIGF1dGhEaWFsb2cgPSBuZXcgR3RrQXV0aGVudGljYXRp
b25EaWFsb2codG9wbGV2ZWwsIGNoYWxsZW5nZSk7CiAgICAgYXV0aERpYWxvZy0+c2hvdygpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L2d0ay9XZWJGcmFtZUxvYWRlckNsaWVudEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJGcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKaW5kZXgg
Y2UxNDczNjVlNGNlZmQ5ZDZkYjE4ZjA1MTJiMDZmMTNjMDgyYTBlOC4uYTZmZjM2ZTVmNWY4OTJh
OGMyNWZlMTM4NmMxNTc5ZWFiMGJmNzJkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkZyYW1l
TG9hZGVyQ2xpZW50R3RrLmNwcApAQCAtMzYsNyArMzYsNyBAQCB1c2luZyBXZWJDb3JlOjpBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZTsKIAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0
Y2hEaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoV2ViQ29yZTo6RG9jdW1lbnRMb2Fk
ZXIqLCB1bnNpZ25lZCBsb25nLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxl
bmdlKQogewotICAgIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKiBkaWFsb2cgPSBuZXcgR3RrQXV0
aGVudGljYXRpb25EaWFsb2coMCwgY2hhbGxlbmdlLnNvdXBTZXNzaW9uKCksIGNoYWxsZW5nZS5z
b3VwTWVzc2FnZSgpLCBjaGFsbGVuZ2Uuc291cEF1dGgoKSk7CisgICAgR3RrQXV0aGVudGljYXRp
b25EaWFsb2cqIGRpYWxvZyA9IG5ldyBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZygwLCBjaGFsbGVu
Z2UpOwogICAgIGRpYWxvZy0+c2hvdygpOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171528</attachid>
            <date>2012-10-30 15:19:35 -0700</date>
            <delta_ts>2012-11-01 09:07:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99914-20121030151759.patch</filename>
            <type>text/plain</type>
            <size>26368</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyODQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTI1NjM5OGIwYmQyN2Jk
MDJkYWY1MmUyZGNlNmU1ZWVkNDQ2ZTcxMi4uM2IxMDFjNzFkMThiZmU2YjIwYTUzMWU0ODUzNjA3
NTM1NmY3YjI4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEyLTEwLTI1ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBNb3Zl
IHNvdXAgYXV0aGVudGljYXRpb24gZnJvbSBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyB0byBXZWJD
b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTkx
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUg
dGhlIGFjdHVhbCBzb3VwIGF1dGhlbnRpY2F0aW9uIGNvZGUgZnJvbSB0aGUgR3RrQXV0aGVudGlj
YXRpb25EaWFsb2cgdG8gUmVzb3VyY2VIYW5kbGVTb3VwLgorICAgICAgICBUaGlzIGFsbG93cyBh
IG1vcmUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBvZiBhdXRoZW50aWNhdGlvbiwgZm9yIGV4YW1w
bGUsIG9uZSB3aGVyZSBhIFdlYktpdDIKKyAgICAgICAgY2xpZW50IGNhbiBjb21wbGV0ZWx5IGhh
bmRsZSBhdXRoZW50aWNhdGlvbi4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgc2hvdWxk
IG5vdCBjaGFuZ2UgYmVoYXZpb3IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvR3RrQXV0aGVu
dGljYXRpb25EaWFsb2cuY3BwOiBSZW1vdmUgcmVmZXJlbmNlcyB0byB0aGUgU291cFBhc3N3b3Jk
TWFuYWdlciwgd2hpY2gKKyAgICAgICAgaXMgZ29pbmcgYXdheSBpbiB0aGUgbmV4dCByZWxlYXNl
IG9mIEdub21lLiBJbnN0ZWFkIHdlIGFsd2F5cyBhc3N1bWUgdGhhdCB0aGUgYXV0aGVudGljYXRp
b24gYmFja2VuZCBoYXMKKyAgICAgICAgc3VwcG9ydCBmb3IgcmVtZW1iZXJpbmcgcGFzc3dvcmRz
IGFuZCBwYXNzIHRoYXQgaW5mb3JtYXRpb24gYWxvbmcgd2l0aCB0aGUgYW5zd2VyIHRvIHRoZSBh
dXRoZW50aWNhdGlvbgorICAgICAgICByZXF1ZXN0LgorCisgICAgICAgIFRoZSByZXN0IG9mIHRo
ZSBjaGFuZ2VzIHRvIHRoaXMgY2xhc3MgY2FuIGJlIHN1bW1hcml6ZWQgYXM6CisgICAgICAgIDEu
IEdldHRpbmcgdGhlIGluZm9ybWF0aW9uIGZyb20gdGhlIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
IGluc3RlYWQgb2YgZGlyZWN0bHkgZnJvbSB0aGUgbGlic291cAorICAgICAgICAgICBvYmplY3Rz
LgorICAgICAgICAyLiBVc2luZyB0aGUgQXV0aGVudGljYXRpb25DbGllbnQgdG8gYWNjb21wbGlz
aCB0aGUgYXV0aGVudGljYXRpb24gaW5zdGVhZCBvZiB0YWxraW5nIHRvIGxpYnNvdXAKKyAgICAg
ICAgICAgZGlyZWN0bHkuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9u
RGlhbG9nLmg6CisgICAgICAgIChHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyk6IFJlbW92ZSBtZW1i
ZXJzIHdoaWNoIGFyZSBubyBsb25nZXIgdXNlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlSGFuZGxlLmg6CisgICAgICAgIChSZXNvdXJjZUhhbmRsZSk6IFJlc291cmNlSGFu
ZGxlU291cCBub3cgaW1wbGVtZW50cyB0aGUgZW50aXJlIEF1dGhlbnRpY2F0aW9uQ2xpZW50IGlu
dGVyZmFjZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVT
b3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVTeW5jaHJvbm91c0xvYWRlcjo6ZGlk
UmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKTogRG9uJ3QgaGFuZGxlIGF1dGhlbnRpY2F0
aW9uCisgICAgICAgIGZvciBzeW5jaHJvbm91cyBoYW5kbGVzLgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VIYW5kbGU6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6IE5vdyBz
ZXQgdGhlIGN1cnJlbnQgY2hhbGxlbmdlIG9uCisgICAgICAgIHRoZSBpbnRlcm5hbCBkYXRhIHN0
cnVjdHVyZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpyZWNlaXZlZFJlcXVl
c3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlSGFuZGxlOjpyZWNlaXZlZENyZWRlbnRpYWwpOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlSGFuZGxlOjpyZWNlaXZlZENhbmNlbGxhdGlvbik6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6YXV0aGVuaWNhdGVDYWxsYmFjayk6IFBhc3MgdGhlIGhhbmRsZSBhcyB0
aGUgYXV0aGVudGljYXRpb24gY2xpZW50LgorCiAyMDEyLTEwLTMwICBNYXJ0aW4gUm9iaW5zb24g
IDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBNb3ZlIHNvdXAgYXV0aGVu
dGljYXRpb24gZnJvbSBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyB0byBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFu
Z2VMb2cKaW5kZXggZDZiMGQ0YTNkMDNlZDI4ZTk4ZjM0ZGRlYmQ5NDE5MzNkMDg5OWZjYy4uYmNl
YThkMDNlY2QyMzNjODNmM2VhMjFhMTAxZGM1Y2E1NDRkZDYxYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDIyIEBACisyMDEyLTEwLTI1ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25A
aWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBNb3ZlIHNvdXAgYXV0aGVudGljYXRpb24gZnJv
bSBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyB0byBXZWJDb3JlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTkxNAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBjYWxscyB3aGljaCBhY3R1YWxseSBhdXRo
ZW50aWNhdGUgYSBzb3VwIG1lc3NhZ2UgYXJlIGdvbmUgZnJvbSB0aGUgR3RrQXV0aGVudGljYXRp
b25EaWFsb2cuIFNpbmNlIHRoZQorICAgICAgICBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyBleHBv
c2VkIGJ5IHRoZSBXZWJLaXRTb3VwQXV0aGVudGljYXRpb24gY2xhc3MgaW4gdGhlIEdUSysgQVBJ
IHdvcmsgd2l0aG91dCBhCisgICAgICAgIFJlc291cmNlSGFuZGxlICh0aGV5IGFyZSBtb3JlIGdl
bmVyYWwpLCB3ZSBhZGQgYSBXZWJLaXRTb3VwQXV0aERpYWxvZ0F1dGhlbnRpY2F0aW9uQ2xpZW50
IGFkZGVkIHRvIGF2b2lkCisgICAgICAgIGJyZWFraW5nIEFQSS4gVGhpcyBpcyB1bnVzZWQgYnkg
ZWl0aGVyIEVwaXBoYW55IG9yIGludGVybmFsbHkgaW4gV2ViS2l0R1RLKy4KKworICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKTogVGhlIGF1dGhlbnRpY2F0aW9uIGRpYWxvZworICAgICAgICBub3cganVzdCB0YWtl
cyB0aGUgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgaW5zdGVhZCBvZiB0aGUgbGlic291cCBvYmpl
Y3RzLgorICAgICAgICAqIHdlYmtpdC93ZWJraXRzb3VwYXV0aGRpYWxvZy5jcHA6CisgICAgICAg
IChXZWJLaXRTb3VwQXV0aERpYWxvZ0F1dGhlbnRpY2F0aW9uQ2xpZW50KTogQWRkZWQgdGhpcyBo
ZWxwZXIuCisgICAgICAgIChzZXNzaW9uQXV0aGVudGljYXRlKTogVXNlIHRoZSBuZXcgV2ViS2l0
U291cEF1dGhEaWFsb2dBdXRoZW50aWNhdGlvbkNsaWVudC4KKwogMjAxMi0xMC0zMCAgTWFydGlu
IFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gTW92ZSBz
b3VwIGF1dGhlbnRpY2F0aW9uIGZyb20gR3RrQXV0aGVudGljYXRpb25EaWFsb2cgdG8gV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCmluZGV4IDc3OThjYjdjZTYzNmUyOWJiZWIzODE5ZjE4MDE2NzkzYWQyMmQ4NGYu
LmIwNWMzYTk1Y2FjYmEzZDc1YWExYWM3MTYzOTY0ODA1OGJhOTlkMzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNiBAQAorMjAxMi0xMC0yNSAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGln
YWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gTW92ZSBzb3VwIGF1dGhlbnRpY2F0aW9uIGZyb20g
R3RrQXV0aGVudGljYXRpb25EaWFsb2cgdG8gV2ViQ29yZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTk5MTQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnN0ZWFkIG9mIHBhc3NpbmcgdGhlIGxpYnNvdXAg
b2JqZWN0cyB0byB0aGUgR3RrQXV0aGVudGljYXRpb25EaWFsb2csIHBhc3MgdGhlCisgICAgICAg
IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIGl0c2VsZi4KKworICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZUF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKToKKwogMjAxMi0xMC0zMCAgTWFydGluIFJvYmluc29uICA8bXJvYmlu
c29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gTW92ZSBzb3VwIGF1dGhlbnRpY2F0aW9u
IGZyb20gR3RrQXV0aGVudGljYXRpb25EaWFsb2cgdG8gV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5jcHAKaW5k
ZXggY2M1NjExMzJkZDI3M2YzY2VkYjUxNGM1Y2UwYWVlYjMxMmQxODExOS4uNTQ3YTJmNjBlNjU5
OTJhODc4ZGZiZWE0MjU0ZjRlZmVhODIxYWJjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuY3BwCkBAIC0yMCw3ICsy
MCw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR3RrQXV0aGVudGljYXRpb25E
aWFsb2cuaCIKIAotI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgiCiAjaW5jbHVk
ZSAiQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIK
ICNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgpAQCAtNjAsMTEgKzU5LDkgQEAgR3RrQXV0aGVu
dGljYXRpb25EaWFsb2c6On5HdGtBdXRoZW50aWNhdGlvbkRpYWxvZygpCiB7CiB9CiAKLUd0a0F1
dGhlbnRpY2F0aW9uRGlhbG9nOjpHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyhHdGtXaW5kb3cqIHBh
cmVudFdpbmRvdywgU291cFNlc3Npb24qIHNlc3Npb24sIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBT
b3VwQXV0aCogYXV0aCkKLSAgICA6IG1fZGlhbG9nKGd0a19kaWFsb2dfbmV3KCkpCi0gICAgLCBt
X3Nlc3Npb24oc2Vzc2lvbikKLSAgICAsIG1fbWVzc2FnZShtZXNzYWdlKQotICAgICwgbV9hdXRo
KGF1dGgpCitHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6R3RrQXV0aGVudGljYXRpb25EaWFsb2co
R3RrV2luZG93KiBwYXJlbnRXaW5kb3csIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBj
aGFsbGVuZ2UpCisgICAgOiBtX2NoYWxsZW5nZShjaGFsbGVuZ2UpCisgICAgLCBtX2RpYWxvZyhn
dGtfZGlhbG9nX25ldygpKQogICAgICwgbV9sb2dpbkVudHJ5KDApCiAgICAgLCBtX3Bhc3N3b3Jk
RW50cnkoMCkKICAgICAsIG1fcmVtZW1iZXJDaGVja0J1dHRvbigwKQpAQCAtMTEwLDkgKzEwNyw5
IEBAIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyhHdGtX
aW5kb3cqIHBhcmVudFdpbmRvdywgU291cFNlCiAjZW5kaWYKICAgICBndGtfYm94X3BhY2tfc3Rh
cnQoR1RLX0JPWChoQm94KSwgbWFpblZCb3gsIFRSVUUsIFRSVUUsIDApOwogCi0gICAgU291cFVS
SSogdXJpID0gc291cF9tZXNzYWdlX2dldF91cmkobV9tZXNzYWdlLmdldCgpKTsKLSAgICBHT3du
UHRyPGNoYXI+ZGVzY3JpcHRpb24oZ19zdHJkdXBfcHJpbnRmKF8oIkEgdXNlcm5hbWUgYW5kIHBh
c3N3b3JkIGFyZSBiZWluZyByZXF1ZXN0ZWQgYnkgdGhlIHNpdGUgJXMiKSwgdXJpLT5ob3N0KSk7
Ci0gICAgR3RrV2lkZ2V0KiBkZXNjcmlwdGlvbkxhYmVsID0gZ3RrX2xhYmVsX25ldyhkZXNjcmlw
dGlvbi5nZXQoKSk7CisgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gU3RyaW5nOjpmb3JtYXQoXygi
QSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgYXJlIGJlaW5nIHJlcXVlc3RlZCBieSB0aGUgc2l0ZSAl
cyIpLAorICAgICAgICBtX2NoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKS5ob3N0KCkudXRmOCgp
LmRhdGEoKSk7CisgICAgR3RrV2lkZ2V0KiBkZXNjcmlwdGlvbkxhYmVsID0gZ3RrX2xhYmVsX25l
dyhkZXNjcmlwdGlvbi51dGY4KCkuZGF0YSgpKTsKICAgICBndGtfbWlzY19zZXRfYWxpZ25tZW50
KEdUS19NSVNDKGRlc2NyaXB0aW9uTGFiZWwpLCAwLjAsIDAuNSk7CiAgICAgZ3RrX2xhYmVsX3Nl
dF9saW5lX3dyYXAoR1RLX0xBQkVMKGRlc2NyaXB0aW9uTGFiZWwpLCBUUlVFKTsKICAgICBndGtf
Ym94X3BhY2tfc3RhcnQoR1RLX0JPWChtYWluVkJveCksIEdUS19XSURHRVQoZGVzY3JpcHRpb25M
YWJlbCksIEZBTFNFLCBGQUxTRSwgMCk7CkBAIC0xMjksOSArMTI2LDkgQEAgR3RrQXV0aGVudGlj
YXRpb25EaWFsb2c6Okd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKEd0a1dpbmRvdyogcGFyZW50V2lu
ZG93LCBTb3VwU2UKICAgICBndGtfYWxpZ25tZW50X3NldF9wYWRkaW5nKEdUS19BTElHTk1FTlQo
ZW50cnlDb250YWluZXIpLCAwLCAwLCAwLCAwKTsKICAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RL
X0JPWCh2Qm94KSwgZW50cnlDb250YWluZXIsIEZBTFNFLCBGQUxTRSwgMCk7CiAKLSAgICBjb25z
dCBjaGFyKiByZWFsbSA9IHNvdXBfYXV0aF9nZXRfcmVhbG0obV9hdXRoLmdldCgpKTsKICAgICAv
LyBDaGVja2luZyB0aGF0IHJlYWxtIGlzIG5vdCBhbiBlbXB0eSBzdHJpbmcuCi0gICAgYm9vbCBo
YXNSZWFsbSA9IChyZWFsbSAmJiByZWFsbVswXSAhPSAnXDAnKTsKKyAgICBTdHJpbmcgcmVhbG0g
PSBtX2NoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKS5yZWFsbSgpOworICAgIGJvb2wgaGFzUmVh
bG0gPSAhcmVhbG0uaXNFbXB0eSgpOwogCiAjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKICAgICBH
dGtXaWRnZXQqIHRhYmxlID0gZ3RrX3RhYmxlX25ldyhoYXNSZWFsbSA/IDMgOiAyLCAyLCBGQUxT
RSk7CkBAIC0xNTYsNyArMTUzLDcgQEAgR3RrQXV0aGVudGljYXRpb25EaWFsb2c6Okd0a0F1dGhl
bnRpY2F0aW9uRGlhbG9nKEd0a1dpbmRvdyogcGFyZW50V2luZG93LCBTb3VwU2UKICAgICAgICAg
Z3RrX3dpZGdldF9zZXRfaGV4cGFuZChzZXJ2ZXJNZXNzYWdlRGVzY3JpcHRpb25MYWJlbCwgVFJV
RSk7CiAgICAgICAgIGd0a193aWRnZXRfc2V0X3ZleHBhbmQoc2VydmVyTWVzc2FnZURlc2NyaXB0
aW9uTGFiZWwsIFRSVUUpOwogI2VuZGlmCi0gICAgICAgIEd0a1dpZGdldCogc2VydmVyTWVzc2Fn
ZUxhYmVsID0gZ3RrX2xhYmVsX25ldyhyZWFsbSk7CisgICAgICAgIEd0a1dpZGdldCogc2VydmVy
TWVzc2FnZUxhYmVsID0gZ3RrX2xhYmVsX25ldyhyZWFsbS51dGY4KCkuZGF0YSgpKTsKICAgICAg
ICAgZ3RrX21pc2Nfc2V0X2FsaWdubWVudChHVEtfTUlTQyhzZXJ2ZXJNZXNzYWdlTGFiZWwpLCAw
LjAsIDAuNSk7CiAgICAgICAgIGd0a19sYWJlbF9zZXRfbGluZV93cmFwKEdUS19MQUJFTChzZXJ2
ZXJNZXNzYWdlTGFiZWwpLCBUUlVFKTsKICNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgpAQCAtMTky
LDExICsxODksNyBAQCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6R3RrQXV0aGVudGljYXRpb25E
aWFsb2coR3RrV2luZG93KiBwYXJlbnRXaW5kb3csIFNvdXBTZQogCiB2b2lkIEd0a0F1dGhlbnRp
Y2F0aW9uRGlhbG9nOjpzaG93KCkKIHsKLSAgICBzb3VwX3Nlc3Npb25fcGF1c2VfbWVzc2FnZSht
X3Nlc3Npb24sIG1fbWVzc2FnZS5nZXQoKSk7Ci0KLSAgICAvLyBUaGlzIGlzIGp1c3QgYSB0ZW1w
b3Jhcnkga2x1ZGdlIHVudGlsIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nIHdvcmtzIGRpcmVjdGx5
IHdpdGggQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzLgotICAgIEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlIGNoYWxsZW5nZSgwIC8qIHNlc3Npb24gKi8sIG1fbWVzc2FnZS5nZXQoKSwgbV9hdXRoLmdl
dCgpLCBmYWxzZSwgMCk7Ci0gICAgQ3JlZGVudGlhbCBzYXZlZENyZWRlbnRpYWwgPSBjcmVkZW50
aWFsQmFja2luZ1N0b3JlKCkuZ2V0Q3JlZGVudGlhbEZvckNoYWxsZW5nZShjaGFsbGVuZ2UpOwor
ICAgIENyZWRlbnRpYWwgc2F2ZWRDcmVkZW50aWFsID0gY3JlZGVudGlhbEJhY2tpbmdTdG9yZSgp
LmdldENyZWRlbnRpYWxGb3JDaGFsbGVuZ2UobV9jaGFsbGVuZ2UpOwogICAgIGlmICghc2F2ZWRD
cmVkZW50aWFsLmlzRW1wdHkoKSkgewogICAgICAgICBndGtfZW50cnlfc2V0X3RleHQoR1RLX0VO
VFJZKG1fbG9naW5FbnRyeSksIHNhdmVkQ3JlZGVudGlhbC51c2VyKCkudXRmOCgpLmRhdGEoKSk7
CiAgICAgICAgIGd0a19lbnRyeV9zZXRfdGV4dChHVEtfRU5UUlkobV9wYXNzd29yZEVudHJ5KSwg
c2F2ZWRDcmVkZW50aWFsLnBhc3N3b3JkKCkudXRmOCgpLmRhdGEoKSk7CkBAIC0yMDksMjAgKzIw
MiwxNSBAQCB2b2lkIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpzaG93KCkKIAogdm9pZCBHdGtB
dXRoZW50aWNhdGlvbkRpYWxvZzo6ZGVzdHJveSgpCiB7Ci0gICAgYm9vbCBzaG91bGREZWxldGUg
PSB0cnVlOwotCi0gICAgc291cF9zZXNzaW9uX3VucGF1c2VfbWVzc2FnZShtX3Nlc3Npb24sIG1f
bWVzc2FnZS5nZXQoKSk7CiAgICAgZ3RrX3dpZGdldF9kZXN0cm95KG1fZGlhbG9nKTsKIAotICAg
IHNob3VsZERlbGV0ZSA9ICFtX2lzU2F2aW5nUGFzc3dvcmQ7Ci0KICAgICAvLyBEbyBub3QgZGVs
ZXRlIHRoZSBvYmplY3QgaWYgaXQncyBzdGlsbCBzYXZpbmcgdGhlIHBhc3N3b3JkLAogICAgIC8v
IHRoZSBzYXZlIHBhc3N3b3JkIGNhbGxiYWNrIHdpbGwgZGVsZXRlIGl0LgotICAgIGlmIChzaG91
bGREZWxldGUpCisgICAgaWYgKCFtX2lzU2F2aW5nUGFzc3dvcmQpCiAgICAgICAgIGRlbGV0ZSB0
aGlzOwogfQogCi12b2lkIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpzYXZlUGFzc3dvcmRDYWxs
YmFjayhTb3VwTWVzc2FnZSogbWVzc2FnZSwgR3RrQXV0aGVudGljYXRpb25EaWFsb2cqIGRpYWxv
ZykKK3ZvaWQgR3RrQXV0aGVudGljYXRpb25EaWFsb2c6OnNhdmVQYXNzd29yZENhbGxiYWNrKFNv
dXBNZXNzYWdlKiwgR3RrQXV0aGVudGljYXRpb25EaWFsb2cqIGRpYWxvZykKIHsKICAgICBkaWFs
b2ctPnNhdmVQYXNzd29yZCgpOwogfQpAQCAtMjMzLDIwICsyMjEsMTkgQEAgdm9pZCBHdGtBdXRo
ZW50aWNhdGlvbkRpYWxvZzo6c2F2ZVBhc3N3b3JkKCkKICAgICBBU1NFUlQoIW1fcGFzc3dvcmQu
aXNOdWxsKCkpOwogCiAgICAgLy8gQW55dGhpbmcgYnV0IDQwMSBhbmQgNXh4IG1lYW5zIHRoZSBw
YXNzd29yZCB3YXMgYWNjZXB0ZWQuCi0gICAgaWYgKG1fbWVzc2FnZS5nZXQoKS0+c3RhdHVzX2Nv
ZGUgIT0gNDAxICYmIG1fbWVzc2FnZS5nZXQoKS0+c3RhdHVzX2NvZGUgPCA1MDApIHsKLSAgICAg
ICAgLy8gVGhpcyBpcyBqdXN0IGEgdGVtcG9yYXJ5IGtsdWRnZSB1bnRpbCBHdGtBdXRoZW50aWNh
dGlvbkRpYWxvZyB3b3JrcyBkaXJlY3RseSB3aXRoIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcy4K
LSAgICAgICAgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgY2hhbGxlbmdlKDAgLyogc2Vzc2lvbiAq
LywgbV9tZXNzYWdlLmdldCgpLCBtX2F1dGguZ2V0KCksIGZhbHNlLCAwKTsKKyAgICBTb3VwTWVz
c2FnZSogbWVzc2FnZSA9IG1fY2hhbGxlbmdlLnNvdXBNZXNzYWdlKCk7CisgICAgaWYgKG1lc3Nh
Z2UtPnN0YXR1c19jb2RlICE9IDQwMSAmJiBtZXNzYWdlLT5zdGF0dXNfY29kZSA8IDUwMCkgewog
ICAgICAgICBDcmVkZW50aWFsIGNyZWRlbnRpYWxUb1NhdmUgPSBDcmVkZW50aWFsKAogICAgICAg
ICAgICAgU3RyaW5nOjpmcm9tVVRGOChtX3VzZXJuYW1lLmRhdGEoKSksCiAgICAgICAgICAgICBT
dHJpbmc6OmZyb21VVEY4KG1fcGFzc3dvcmQuZGF0YSgpKSwKICAgICAgICAgICAgIENyZWRlbnRp
YWxQZXJzaXN0ZW5jZVBlcm1hbmVudCk7Ci0gICAgICAgIGNyZWRlbnRpYWxCYWNraW5nU3RvcmUo
KS5zdG9yZUNyZWRlbnRpYWxzRm9yQ2hhbGxlbmdlKGNoYWxsZW5nZSwgY3JlZGVudGlhbFRvU2F2
ZSk7CisgICAgICAgIGNyZWRlbnRpYWxCYWNraW5nU3RvcmUoKS5zdG9yZUNyZWRlbnRpYWxzRm9y
Q2hhbGxlbmdlKG1fY2hhbGxlbmdlLCBjcmVkZW50aWFsVG9TYXZlKTsKICAgICB9CiAKICAgICAv
LyBEaXNjb25uZWN0IHRoZSBjYWxsYmFjay4gSWYgdGhlIGF1dGhlbnRpY2F0aW9uIHN1Y2NlZWRl
ZCB3ZSBhcmUgZG9uZSwKICAgICAvLyBhbmQgaWYgaXQgZmFpbGVkIHdlJ2xsIGNyZWF0ZSBhIG5l
dyBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyBhbmQgd2UnbGwKICAgICAvLyBjb25uZWN0IHRvICdn
b3QtaGVhZGVycycgYWdhaW4gaW4gR3RrQXV0aGVudGljYXRpb25EaWFsb2c6OmF1dGhlbnRpY2F0
ZSgpCi0gICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KG1fbWVzc2FnZS5nZXQoKSwgbV9z
YXZlUGFzc3dvcmRIYW5kbGVyKTsKKyAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QobWVz
c2FnZSwgbV9zYXZlUGFzc3dvcmRIYW5kbGVyKTsKIAogICAgIC8vIERpYWxvZyBoYXMgYmVlbiBh
bHJlYWR5IGRlc3Ryb3llZCwgYWZ0ZXIgc2F2aW5nIHRoZSBwYXNzd29yZCBpdCBzaG91bGQgYmUg
ZGVsZXRlZC4KICAgICBkZWxldGUgdGhpczsKQEAgLTI1NiwxNCArMjQzLDE4IEBAIHZvaWQgR3Rr
QXV0aGVudGljYXRpb25EaWFsb2c6OmF1dGhlbnRpY2F0ZSgpCiB7CiAgICAgY29uc3QgY2hhciAq
dXNlcm5hbWUgPSBndGtfZW50cnlfZ2V0X3RleHQoR1RLX0VOVFJZKG1fbG9naW5FbnRyeSkpOwog
ICAgIGNvbnN0IGNoYXIgKnBhc3N3b3JkID0gZ3RrX2VudHJ5X2dldF90ZXh0KEdUS19FTlRSWSht
X3Bhc3N3b3JkRW50cnkpKTsKLSAgICBzb3VwX2F1dGhfYXV0aGVudGljYXRlKG1fYXV0aC5nZXQo
KSwgdXNlcm5hbWUsIHBhc3N3b3JkKTsKIAorICAgIGJvb2wgcmVtZW1iZXJDcmVkZW50aWFscyA9
IGd0a190b2dnbGVfYnV0dG9uX2dldF9hY3RpdmUoR1RLX1RPR0dMRV9CVVRUT04obV9yZW1lbWJl
ckNoZWNrQnV0dG9uKSk7CiAgICAgaWYgKG1fcmVtZW1iZXJDaGVja0J1dHRvbiAmJiBndGtfdG9n
Z2xlX2J1dHRvbl9nZXRfYWN0aXZlKEdUS19UT0dHTEVfQlVUVE9OKG1fcmVtZW1iZXJDaGVja0J1
dHRvbikpKSB7CiAgICAgICAgIG1fdXNlcm5hbWUgPSB1c2VybmFtZTsKICAgICAgICAgbV9wYXNz
d29yZCA9IHBhc3N3b3JkOwogICAgICAgICBtX2lzU2F2aW5nUGFzc3dvcmQgPSB0cnVlOwotICAg
ICAgICBtX3NhdmVQYXNzd29yZEhhbmRsZXIgPSBnX3NpZ25hbF9jb25uZWN0KG1fbWVzc2FnZS5n
ZXQoKSwgImdvdC1oZWFkZXJzIiwgR19DQUxMQkFDSyhzYXZlUGFzc3dvcmRDYWxsYmFjayksIHRo
aXMpOworICAgICAgICBtX3NhdmVQYXNzd29yZEhhbmRsZXIgPSBnX3NpZ25hbF9jb25uZWN0KG1f
Y2hhbGxlbmdlLnNvdXBNZXNzYWdlKCksICJnb3QtaGVhZGVycyIsIEdfQ0FMTEJBQ0soc2F2ZVBh
c3N3b3JkQ2FsbGJhY2spLCB0aGlzKTsKICAgICB9CisKKyAgICBDcmVkZW50aWFsUGVyc2lzdGVu
Y2UgcGVyc2lzdGVuY2UgPSByZW1lbWJlckNyZWRlbnRpYWxzID8gQ3JlZGVudGlhbFBlcnNpc3Rl
bmNlUGVybWFuZW50IDogQ3JlZGVudGlhbFBlcnNpc3RlbmNlRm9yU2Vzc2lvbjsKKyAgICBtX2No
YWxsZW5nZS5hdXRoZW50aWNhdGlvbkNsaWVudCgpLT5yZWNlaXZlZENyZWRlbnRpYWwobV9jaGFs
bGVuZ2UsCisgICAgICAgIENyZWRlbnRpYWwoU3RyaW5nOjpmcm9tVVRGOCh1c2VybmFtZSksIFN0
cmluZzo6ZnJvbVVURjgocGFzc3dvcmQpLCBwZXJzaXN0ZW5jZSkpOwogfQogCiB2b2lkIEd0a0F1
dGhlbnRpY2F0aW9uRGlhbG9nOjphdXRoZW50aWNhdGlvbkRpYWxvZ1Jlc3BvbnNlQ2FsbGJhY2so
R3RrV2lkZ2V0KiwgZ2ludCByZXNwb25zZUlELCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyogZGlh
bG9nKQpAQCAtMjcyLDYgKzI2Myw3IEBAIHZvaWQgR3RrQXV0aGVudGljYXRpb25EaWFsb2c6OmF1
dGhlbnRpY2F0aW9uRGlhbG9nUmVzcG9uc2VDYWxsYmFjayhHdGtXaWRnZXQqLCBnCiAgICAgICAg
IGRpYWxvZy0+YXV0aGVudGljYXRlKCk7CiAKICAgICBkaWFsb2ctPmRlc3Ryb3koKTsKKyAgICBk
aWFsb2ctPm1fY2hhbGxlbmdlLmF1dGhlbnRpY2F0aW9uQ2xpZW50KCktPnJlY2VpdmVkQ2FuY2Vs
bGF0aW9uKGRpYWxvZy0+bV9jaGFsbGVuZ2UpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRp
b25EaWFsb2cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlv
bkRpYWxvZy5oCmluZGV4IDkxMmY3NWQ3NjkxNjg3NWViZWU1OTQ5YzdkMThlZGM4ZDBlOTdkNTku
LjAyMWUwZTJjMTYxM2QxY2EyYTllOGM4ZDc0NDRiM2RiMDhiZDUwYzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5oCkBA
IC0yMCw3ICsyMCw3IEBACiAjaWZuZGVmIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nX2gKICNkZWZp
bmUgR3RrQXV0aGVudGljYXRpb25EaWFsb2dfaAogCi0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR093
blB0ci5oPgorI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgiCiAjaW5jbHVkZSAi
R1JlZlB0ckd0ay5oIgogI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgogI2luY2x1ZGUgPHd0Zi9G
YXN0QWxsb2NCYXNlLmg+CkBAIC0zNCw3ICszNCw3IEBAIGNsYXNzIEd0a0F1dGhlbnRpY2F0aW9u
RGlhbG9nIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIAogcHVibGljOgotICAgIEd0
a0F1dGhlbnRpY2F0aW9uRGlhbG9nKEd0a1dpbmRvdyosIFNvdXBTZXNzaW9uKiwgU291cE1lc3Nh
Z2UqLCBTb3VwQXV0aCopOworICAgIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKEd0a1dpbmRvdyos
IGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7CiAgICAgfkd0a0F1dGhlbnRpY2F0aW9u
RGlhbG9nKCk7CiAKICAgICB2b2lkIHNob3coKTsKQEAgLTQ2LDE1ICs0NiwxMSBAQCBwcml2YXRl
OgogICAgIHN0YXRpYyB2b2lkIHNhdmVQYXNzd29yZENhbGxiYWNrKFNvdXBNZXNzYWdlKiwgR3Rr
QXV0aGVudGljYXRpb25EaWFsb2cqKTsKICAgICBzdGF0aWMgdm9pZCBhdXRoZW50aWNhdGlvbkRp
YWxvZ1Jlc3BvbnNlQ2FsbGJhY2soR3RrV2lkZ2V0KiwgZ2ludCByZXNwb25zZUlELCBHdGtBdXRo
ZW50aWNhdGlvbkRpYWxvZyopOwogCisgICAgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgbV9jaGFs
bGVuZ2U7CiAgICAgR3RrV2lkZ2V0KiBtX2RpYWxvZzsKLSAgICBTb3VwU2Vzc2lvbiogbV9zZXNz
aW9uOwotICAgIEdSZWZQdHI8U291cE1lc3NhZ2U+IG1fbWVzc2FnZTsKLSAgICBHUmVmUHRyPFNv
dXBBdXRoPiBtX2F1dGg7Ci0KICAgICBHdGtXaWRnZXQqIG1fbG9naW5FbnRyeTsKICAgICBHdGtX
aWRnZXQqIG1fcGFzc3dvcmRFbnRyeTsKICAgICBHdGtXaWRnZXQqIG1fcmVtZW1iZXJDaGVja0J1
dHRvbjsKLQogICAgIGJvb2wgbV9pc1NhdmluZ1Bhc3N3b3JkOwogICAgIHVuc2lnbmVkIGxvbmcg
bV9zYXZlUGFzc3dvcmRIYW5kbGVyOwogICAgIENTdHJpbmcgbV91c2VybmFtZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAppbmRleCBjODE3
MDA0YmRlYTMwMWJhMGYyZDJmMTJiMzExZTZiNzk1ZGVjZGQyLi5jYWE2NmJjZThiMDA1MDc1MThi
Yzk0N2FkZWE4NzI1Mjg3Yzc3MjcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCkBAIC05Nyw3ICs5Nyw3IEBAIGVudW0gU3RvcmVkQ3Jl
ZGVudGlhbHMgewogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFRpbWVyOwogCiBjbGFzcyBS
ZXNvdXJjZUhhbmRsZSA6IHB1YmxpYyBSZWZDb3VudGVkPFJlc291cmNlSGFuZGxlPgotI2lmIFBM
QVRGT1JNKE1BQykgfHwgVVNFKENGTkVUV09SSykgfHwgVVNFKENVUkwpCisjaWYgUExBVEZPUk0o
TUFDKSB8fCBVU0UoQ0ZORVRXT1JLKSB8fCBVU0UoQ1VSTCkgfHwgUExBVEZPUk0oR1RLKQogICAg
ICwgcHVibGljIEF1dGhlbnRpY2F0aW9uQ2xpZW50CiAjZW5kaWYKICAgICB7CkBAIC0xMTQsNyAr
MTE0LDcgQEAgcHVibGljOgogICAgIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVz
dCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpOwogICAgIGJvb2wg
c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKTsKICNlbmRpZgotI2lmIFBMQVRGT1JNKE1BQykg
fHwgVVNFKENGTkVUV09SSykgfHwgVVNFKENVUkwpCisjaWYgUExBVEZPUk0oTUFDKSB8fCBVU0Uo
Q0ZORVRXT1JLKSB8fCBVU0UoQ1VSTCkgfHwgUExBVEZPUk0oR1RLKQogICAgIHZvaWQgZGlkUmVj
ZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
Jik7CiAgICAgdmlydHVhbCB2b2lkIHJlY2VpdmVkQ3JlZGVudGlhbChjb25zdCBBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSYsIGNvbnN0IENyZWRlbnRpYWwmKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVj
ZWl2ZWRSZXF1ZXN0VG9Db250aW51ZVdpdGhvdXRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlJik7CkBAIC0xNzQsMTEgKzE3NCw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
dm9pZCBzZXRIb3N0QWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcmKTsKICAg
ICBzdGF0aWMgdm9pZCBzZXRDbGllbnRDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcmIGhvc3QsIEdU
bHNDZXJ0aWZpY2F0ZSopOwogICAgIHN0YXRpYyB2b2lkIHNldElnbm9yZVNTTEVycm9ycyhib29s
KTsKLQotI2lmIFBMQVRGT1JNKEdUSykKLSAgICB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwotICAgIHZpcnR1YWwg
dm9pZCByZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwoY29uc3QgQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKLSNlbmRpZgogI2VuZGlmCiAKICAgICAvLyBVc2VkIHRv
IHdvcmsgYXJvdW5kIHRoZSBmYWN0IHRoYXQgeW91IGRvbid0IGdldCBhbnkgbW9yZSBOU1VSTENv
bm5lY3Rpb24gY2FsbGJhY2tzIHVudGlsIHlvdSByZXR1cm4gZnJvbSB0aGUgb25lIHlvdSdyZSBp
bi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9BdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgKaW5kZXggODQ3MTNjOGQ5MzMzNWRlOTIwMTYw
MzQxMGY5NDg1NzMyMWVmYjZmMi4uMTRlZTZmNDBiMzUzNWIwYmU2ZGNkMzUzYmU1YjQxNTVmNDBj
ZTJkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0F1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgKQEAgLTQ1LDcgKzQ1LDYgQEAgcHVi
bGljOgogICAgIH0KIAogICAgIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFNvdXBTZXNzaW9uKiwg
U291cE1lc3NhZ2UqLCBTb3VwQXV0aCosIGJvb2wgcmV0cnlpbmcsIEF1dGhlbnRpY2F0aW9uQ2xp
ZW50Kik7Ci0KICAgICBBdXRoZW50aWNhdGlvbkNsaWVudCogYXV0aGVudGljYXRpb25DbGllbnQo
KSBjb25zdCB7IHJldHVybiBtX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldCgpOyB9CiAgICAgU291
cFNlc3Npb24qIHNvdXBTZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9zb3VwU2Vzc2lvbi5nZXQo
KTsgfQogICAgIFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291
cE1lc3NhZ2UuZ2V0KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKaW5kZXggYzU4MmYwMGI5NDk3
MjZmMjgyM2U1MGNiZmMwNWVmNjc3YzA5MGM4NS4uNWJmODBiMjM5MGU0MGJjNmY1ODg4MTQxZDkx
Y2M2MzQ4YzI5OTY2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKQEAgLTE0Nyw2ICsxNDcsMTIg
QEAgcHVibGljOgogICAgICAgICBkaWRGaW5pc2hMb2FkaW5nKGhhbmRsZSwgMCk7CiAgICAgfQog
CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShSZXNv
dXJjZUhhbmRsZSosIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UpCisg
ICAgeworICAgICAgICAvLyBXZSBkbyBub3QgaGFuZGxlIGF1dGhlbnRpY2F0aW9uIGZvciBzeW5j
aHJvbm91cyBYTUxIdHRwUmVxdWVzdHMuCisgICAgICAgIGNoYWxsZW5nZS5hdXRoZW50aWNhdGlv
bkNsaWVudCgpLT5yZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwoY2hh
bGxlbmdlKTsKKyAgICB9CisKICAgICB2b2lkIHJ1bigpCiAgICAgewogICAgICAgICBpZiAoIW1f
ZmluaXNoZWQpCkBAIC04NTMsMTIgKzg1OSw1MCBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpzZXRJ
Z25vcmVTU0xFcnJvcnMoYm9vbCBpZ25vcmVTU0xFcnJvcnMpCiAjaWYgUExBVEZPUk0oR1RLKQog
dm9pZCBSZXNvdXJjZUhhbmRsZTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNv
bnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UpCiB7Ci0gICAgaWYgKGNsaWVu
dCgpKQorICAgIEFTU0VSVChkLT5tX2N1cnJlbnRXZWJDaGFsbGVuZ2UuaXNOdWxsKCkpOworICAg
IGQtPm1fY3VycmVudFdlYkNoYWxsZW5nZSA9IGNoYWxsZW5nZTsKKworICAgIGlmIChjbGllbnQo
KSkgeworICAgICAgICBzb3VwX3Nlc3Npb25fcGF1c2VfbWVzc2FnZShjaGFsbGVuZ2Uuc291cFNl
c3Npb24oKSwgY2hhbGxlbmdlLnNvdXBNZXNzYWdlKCkpOwogICAgICAgICBjbGllbnQoKS0+ZGlk
UmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKHRoaXMsIGNoYWxsZW5nZSk7CisgICAgfQor
fQorCit2b2lkIFJlc291cmNlSGFuZGxlOjpyZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91
dENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkKK3sK
KyAgICBBU1NFUlQoIWNoYWxsZW5nZS5pc051bGwoKSk7CisgICAgaWYgKGNoYWxsZW5nZSAhPSBk
LT5tX2N1cnJlbnRXZWJDaGFsbGVuZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBzb3VwX3Nlc3Np
b25fdW5wYXVzZV9tZXNzYWdlKGNoYWxsZW5nZS5zb3VwU2Vzc2lvbigpLCBjaGFsbGVuZ2Uuc291
cE1lc3NhZ2UoKSk7CisKKyAgICBjbGVhckF1dGhlbnRpY2F0aW9uKCk7CiB9CiAKLXZvaWQgUmVz
b3VyY2VIYW5kbGU6OnJlY2VpdmVkUmVxdWVzdFRvQ29udGludWVXaXRob3V0Q3JlZGVudGlhbChj
b25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpCit2b2lkIFJlc291cmNlSGFuZGxlOjpyZWNl
aXZlZENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSwg
Y29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbCkKIHsKKyAgICBBU1NFUlQoIWNoYWxsZW5nZS5p
c051bGwoKSk7CisgICAgaWYgKGNoYWxsZW5nZSAhPSBkLT5tX2N1cnJlbnRXZWJDaGFsbGVuZ2Up
CisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChjaGFsbGVuZ2Uuc291cFNlc3Npb24oKSk7
CisgICAgQVNTRVJUKGNoYWxsZW5nZS5zb3VwTWVzc2FnZSgpKTsKKyAgICBzb3VwX2F1dGhfYXV0
aGVudGljYXRlKGNoYWxsZW5nZS5zb3VwQXV0aCgpLCBjcmVkZW50aWFsLnVzZXIoKS51dGY4KCku
ZGF0YSgpLCBjcmVkZW50aWFsLnBhc3N3b3JkKCkudXRmOCgpLmRhdGEoKSk7CisgICAgc291cF9z
ZXNzaW9uX3VucGF1c2VfbWVzc2FnZShjaGFsbGVuZ2Uuc291cFNlc3Npb24oKSwgY2hhbGxlbmdl
LnNvdXBNZXNzYWdlKCkpOworCisgICAgY2xlYXJBdXRoZW50aWNhdGlvbigpOworfQorCit2b2lk
IFJlc291cmNlSGFuZGxlOjpyZWNlaXZlZENhbmNlbGxhdGlvbihjb25zdCBBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSYgY2hhbGxlbmdlKQoreworICAgIEFTU0VSVCghY2hhbGxlbmdlLmlzTnVsbCgp
KTsKKyAgICBpZiAoY2hhbGxlbmdlICE9IGQtPm1fY3VycmVudFdlYkNoYWxsZW5nZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+cmVjZWl2
ZWRDYW5jZWxsYXRpb24odGhpcywgY2hhbGxlbmdlKTsKKyAgICBzb3VwX3Nlc3Npb25fdW5wYXVz
ZV9tZXNzYWdlKGNoYWxsZW5nZS5zb3VwU2Vzc2lvbigpLCBjaGFsbGVuZ2Uuc291cE1lc3NhZ2Uo
KSk7CisKKyAgICBjbGVhckF1dGhlbnRpY2F0aW9uKCk7CiB9CiAjZW5kaWYKIApAQCAtMTAyMCwx
MCArMTA2NCw3IEBAIHN0YXRpYyB2b2lkIGF1dGhlbmljYXRlQ2FsbGJhY2soU291cFNlc3Npb24q
IHNlc3Npb24sIFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwKICAgICBSZWZQdHI8UmVzb3VyY2VI
YW5kbGU+IGhhbmRsZSA9IHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxlKj4oZ19vYmplY3RfZ2V0
X2RhdGEoR19PQkpFQ1Qoc291cE1lc3NhZ2UpLCAiaGFuZGxlIikpOwogICAgIGlmICghaGFuZGxl
KQogICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHBhc3MgYSBjbGll
bnQgaGVyZSwgYmVjYXVzZSBHVEsrIGRvZXMgbm90IHlldCB1c2UgdGhlIEF1dGhlbnRpY2F0aW9u
Q2xpZW50IHRvCi0gICAgLy8gcmVzcG9uZCB0byB0aGUgQXV0aGVudGljYXRpb25DaGFsbGVuZ2Ug
LS0gaW5zdGVhZCBkZWFsaW5nIHdpdGggdGhlIFNvdXAgb2JqZWN0cyBkaXJlY3RseS4KLSAgICBo
YW5kbGUtPmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZShzZXNzaW9uLCBzb3VwTWVzc2FnZSwgc291cEF1dGgsIHJldHJ5aW5nLCAwKSk7Cisg
ICAgaGFuZGxlLT5kaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoQXV0aGVudGljYXRp
b25DaGFsbGVuZ2Uoc2Vzc2lvbiwgc291cE1lc3NhZ2UsIHNvdXBBdXRoLCByZXRyeWluZywgaGFu
ZGxlLmdldCgpKSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsv
V2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwIGIvU291cmNlL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCmluZGV4IGY3OTI5OTEx
OWNjNjNiNWRhMTJlMjZlNzFlMzYwMjU2YmM4MWVmODMuLmYzY2NmYzE3ZmFhNGExNjNlNGY5ZmZl
Y2MxNzQ1N2YxZDQ5NDE1ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKQEAgLTIwMSwxMiArMjAxLDE0
IEBAIEZyYW1lTG9hZGVyQ2xpZW50OjpzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShXZWJDb3Jl
OjpEb2N1bWVudExvYWRlciosIHVuc2lnbmVkCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRp
c3BhdGNoRGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFdlYkNvcmU6OkRvY3VtZW50
TG9hZGVyKiwgdW5zaWduZWQgbG9uZyAgaWRlbnRpZmllciwgY29uc3QgQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UmIGNoYWxsZW5nZSkKIHsKLSAgICBpZiAoRHVtcFJlbmRlclRyZWVTdXBwb3J0R3Rr
OjpkdW1wUmVuZGVyVHJlZU1vZGVFbmFibGVkKCkpCisgICAgaWYgKER1bXBSZW5kZXJUcmVlU3Vw
cG9ydEd0azo6ZHVtcFJlbmRlclRyZWVNb2RlRW5hYmxlZCgpKSB7CisgICAgICAgIGNoYWxsZW5n
ZS5hdXRoZW50aWNhdGlvbkNsaWVudCgpLT5yZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91
dENyZWRlbnRpYWwoY2hhbGxlbmdlKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIEd0
a1dpZGdldCogdG9wbGV2ZWwgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbChHVEtfV0lER0VUKHdl
YmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1fZnJhbWUpKSk7CiAgICAgR3RrV2luZG93KiB0
b3BsZXZlbFdpbmRvdyA9IHdpZGdldElzT25zY3JlZW5Ub3BsZXZlbFdpbmRvdyh0b3BsZXZlbCkg
PyBHVEtfV0lORE9XKHRvcGxldmVsKSA6IDA7Ci0gICAgR3RrQXV0aGVudGljYXRpb25EaWFsb2cq
IGRpYWxvZyA9IG5ldyBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyh0b3BsZXZlbFdpbmRvdywgY2hh
bGxlbmdlLnNvdXBTZXNzaW9uKCksIGNoYWxsZW5nZS5zb3VwTWVzc2FnZSgpLCBjaGFsbGVuZ2Uu
c291cEF1dGgoKSk7CisgICAgR3RrQXV0aGVudGljYXRpb25EaWFsb2cqIGRpYWxvZyA9IG5ldyBH
dGtBdXRoZW50aWNhdGlvbkRpYWxvZyh0b3BsZXZlbFdpbmRvdywgY2hhbGxlbmdlKTsKICAgICBk
aWFsb2ctPnNob3coKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHNvdXBhdXRoZGlhbG9nLmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXRzb3VwYXV0aGRpYWxvZy5jcHAKaW5kZXggMmI0Yjc3NzJlM2RiM2NlN2E1YTRhOTc4ZTBkMDE3
NzVmZDI1ZWE2MC4uZGExNjExNDdlOGY2ZjdhNWY1ZGU4ZjZiYjkyYzA1YzMzYTFlNDJmZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNvdXBhdXRoZGlhbG9nLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c291cGF1dGhkaWFsb2cuY3Bw
CkBAIC0yMCw3ICsyMCw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAid2Via2l0
c291cGF1dGhkaWFsb2cuaCIKIAorI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2xpZW50LmgiCiAj
aW5jbHVkZSAiR3RrQXV0aGVudGljYXRpb25EaWFsb2cuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhh
bmRsZS5oIgogI2luY2x1ZGUgIndlYmtpdG1hcnNoYWwuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CkBAIC0zNSw2ICszNyw0NiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKICAqIGhh
bmRsaW5nIEhUVFAgYmFzaWMgYXV0aC4KICAqLwogCisKKy8vIFRoaXMgY2xhc3MgZXhpc3RzIG9u
bHkgZm9yIEFQSSBjb21wYXRpYmlsaXR5IHJlYXNvbnMuIFdlYktpdFNvdXBBdXRoRGlhbG9nIHdh
cyBleHBvc2VkCisvLyBpbiB0aGUgcHVibGljIEFQSSwgc28gd2UgbXVzdCBwcm92aWRlIHRoaXMg
ImZha2UiIEF1dGhlbnRpY2F0aW9uQ2xpZW50IGluIG9yZGVyIHRvCisvLyBjb250aW51ZSB1c2lu
ZyBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyB3aXRoIHRoZSBuZXcgYXV0aGVudGljYXRpb24gYXJj
aGl0ZWN0dXJlLgorY2xhc3MgV2ViS2l0U291cEF1dGhEaWFsb2dBdXRoZW50aWNhdGlvbkNsaWVu
dCA6IHB1YmxpYyBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNsaWVudCwgcHVibGljIFJlZkNvdW50
ZWQ8V2ViS2l0U291cEF1dGhEaWFsb2dBdXRoZW50aWNhdGlvbkNsaWVudD4gewordXNpbmcgUmVm
Q291bnRlZDxXZWJLaXRTb3VwQXV0aERpYWxvZ0F1dGhlbnRpY2F0aW9uQ2xpZW50Pjo6cmVmOwor
dXNpbmcgUmVmQ291bnRlZDxXZWJLaXRTb3VwQXV0aERpYWxvZ0F1dGhlbnRpY2F0aW9uQ2xpZW50
Pjo6ZGVyZWY7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlKQor
ICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRSZXF1ZXN0VG9Db250aW51
ZVdpdGhvdXRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVu
Z2UpCisgICAgeworICAgICAgICBzb3VwX3Nlc3Npb25fdW5wYXVzZV9tZXNzYWdlKGNoYWxsZW5n
ZS5zb3VwU2Vzc2lvbigpLCBjaGFsbGVuZ2Uuc291cE1lc3NhZ2UoKSk7CisgICAgfQorCisgICAg
dmlydHVhbCB2b2lkIHJlY2VpdmVkQ3JlZGVudGlhbChjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSYgY2hhbGxlbmdlLCBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsKQorICAgIHsKKyAg
ICAgICAgc291cF9hdXRoX2F1dGhlbnRpY2F0ZShjaGFsbGVuZ2Uuc291cEF1dGgoKSwgY3JlZGVu
dGlhbC51c2VyKCkudXRmOCgpLmRhdGEoKSwgY3JlZGVudGlhbC5wYXNzd29yZCgpLnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICBzb3VwX3Nlc3Npb25fdW5wYXVzZV9tZXNzYWdlKGNoYWxsZW5nZS5z
b3VwU2Vzc2lvbigpLCBjaGFsbGVuZ2Uuc291cE1lc3NhZ2UoKSk7CisgICAgfQorCisgICAgdmly
dHVhbCB2b2lkIHJlY2VpdmVkQ2FuY2VsbGF0aW9uKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlJiBjaGFsbGVuZ2UpCisgICAgeworICAgICAgICBzb3VwX3Nlc3Npb25fdW5wYXVzZV9tZXNz
YWdlKGNoYWxsZW5nZS5zb3VwU2Vzc2lvbigpLCBjaGFsbGVuZ2Uuc291cE1lc3NhZ2UoKSk7Cisg
ICAgfQorCisgICAgLy8gVGhpcyBzZWVtcyBuZWNlc3NhcnkgdG8gbWFrZSB0aGUgY29tcGlsZXIg
aGFwcHkuIEJvdGggQXV0aGVudGljYXRpb25DbGllbnQgYW5kCisgICAgLy8gUmVmQ291bnRlZDxU
PiBleHBvc2UgYSByZWYvZGVyZWYgbWV0aG9kLCB3aGljaCBpbnRlcmZlcmVzIHdpdGggdGhlIHVz
ZSBvZiBhIFJlZlB0ci4KKyAgICB2b2lkIGRlcmVmV2ViS2l0U291cEF1dGhEaWFsb2dBdXRoZW50
aWNhdGlvbkNsaWVudCgpCisgICAgeworICAgICAgICBkZXJlZigpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICB2aXJ0dWFsIHZvaWQgcmVmQXV0aGVudGljYXRpb25DbGllbnQoKSB7IHJlZigpOyB9
CisgICAgdmlydHVhbCB2b2lkIGRlcmVmQXV0aGVudGljYXRpb25DbGllbnQoKSB7IGRlcmVmKCk7
IH0KK307CisKIHN0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX2F1dGhfZGlhbG9nX3Nlc3Npb25fZmVh
dHVyZV9pbml0KFNvdXBTZXNzaW9uRmVhdHVyZUludGVyZmFjZSosIGdwb2ludGVyKTsKIHN0YXRp
YyB2b2lkIGF0dGFjaChTb3VwU2Vzc2lvbkZlYXR1cmUqLCBTb3VwU2Vzc2lvbiopOwogc3RhdGlj
IHZvaWQgZGV0YWNoKFNvdXBTZXNzaW9uRmVhdHVyZSosIFNvdXBTZXNzaW9uKik7CkBAIC04OCwx
NSArMTMwLDIwIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX2F1dGhfZGlhbG9nX3Nlc3Npb25f
ZmVhdHVyZV9pbml0KFNvdXBTZXNzaW9uRmVhdHVyZUludGVyCiAgICAgZmVhdHVyZUludGVyZmFj
ZS0+ZGV0YWNoID0gZGV0YWNoOwogfQogCi1zdGF0aWMgdm9pZCBzZXNzaW9uQXV0aGVudGljYXRl
KFNvdXBTZXNzaW9uKiBzZXNzaW9uLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgU291cEF1dGgqIGF1
dGgsIGdib29sZWFuLCBTb3VwU2Vzc2lvbkZlYXR1cmUqIG1hbmFnZXIpCitzdGF0aWMgdm9pZCBz
ZXNzaW9uQXV0aGVudGljYXRlKFNvdXBTZXNzaW9uKiBzZXNzaW9uLCBTb3VwTWVzc2FnZSogbWVz
c2FnZSwgU291cEF1dGgqIGF1dGgsIGdib29sZWFuIHJldHJ5aW5nLCBTb3VwU2Vzc2lvbkZlYXR1
cmUqIG1hbmFnZXIpCiB7Ci0gICAgR3RrQXV0aGVudGljYXRpb25EaWFsb2cqIGF1dGhEaWFsb2c7
Ci0gICAgR3RrV2lkZ2V0KiB0b3BsZXZlbCA9IDA7Ci0KLSAgICAvKiBHZXQgdGhlIGN1cnJlbnQg
dG9wbGV2ZWwgKi8KKyAgICBHdGtXaW5kb3cqIHRvcGxldmVsID0gMDsKICAgICBnX3NpZ25hbF9l
bWl0KG1hbmFnZXIsIHNpZ25hbHNbQ1VSUkVOVF9UT1BMRVZFTF0sIDAsIG1lc3NhZ2UsICZ0b3Bs
ZXZlbCk7CiAKLSAgICBhdXRoRGlhbG9nID0gbmV3IEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKHRv
cGxldmVsID8gR1RLX1dJTkRPVyh0b3BsZXZlbCkgOiAwLCBzZXNzaW9uLCBtZXNzYWdlLCBhdXRo
KTsKKyAgICBXZWJLaXRTb3VwQXV0aERpYWxvZ0F1dGhlbnRpY2F0aW9uQ2xpZW50KiBjbGllbnQg
PSBuZXcgV2ViS2l0U291cEF1dGhEaWFsb2dBdXRoZW50aWNhdGlvbkNsaWVudCgpOworICAgIEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIGNoYWxsZW5nZShzZXNzaW9uLCBtZXNzYWdlLCBhdXRoLCBy
ZXRyeWluZywgY2xpZW50KTsKKyAgICBzb3VwX3Nlc3Npb25fdW5wYXVzZV9tZXNzYWdlKHNlc3Np
b24sIG1lc3NhZ2UpOworCisgICAgLy8gQSBSZWZQdHIgd291bGQgYmUgYmV0dGVyIGhlcmUsIGJ1
dCBpdCBzZWVtcyB0aGF0IGFjY2Vzc2luZyBSZWZDb3VudGVkOjpkZXJlZiBmcm9tIHRoaXMgY29u
dGV4dCBpcworICAgIC8vIGltcG9zc2libGUgd2l0aCBnY2MsIGR1ZSB0byBXZWJLaXRTb3VwQXV0
aERpYWxvZ0F1dGhlbnRpY2F0aW9uQ2xpZW50J3MgdHdvIHN1cGVyY2xhc3Nlcy4KKyAgICBjbGll
bnQtPmRlcmVmV2ViS2l0U291cEF1dGhEaWFsb2dBdXRoZW50aWNhdGlvbkNsaWVudCgpOworCisg
ICAgR3RrQXV0aGVudGljYXRpb25EaWFsb2cqIGF1dGhEaWFsb2cgPSBuZXcgR3RrQXV0aGVudGlj
YXRpb25EaWFsb2codG9wbGV2ZWwsIGNoYWxsZW5nZSk7CiAgICAgYXV0aERpYWxvZy0+c2hvdygp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L2d0ay9XZWJGcmFtZUxvYWRlckNsaWVudEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJGcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKaW5k
ZXggY2UxNDczNjVlNGNlZmQ5ZDZkYjE4ZjA1MTJiMDZmMTNjMDgyYTBlOC4uYTZmZjM2ZTVmNWY4
OTJhOGMyNWZlMTM4NmMxNTc5ZWFiMGJmNzJkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRnJhbWVMb2FkZXJDbGllbnRHdGsuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkZy
YW1lTG9hZGVyQ2xpZW50R3RrLmNwcApAQCAtMzYsNyArMzYsNyBAQCB1c2luZyBXZWJDb3JlOjpB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKIAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlz
cGF0Y2hEaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoV2ViQ29yZTo6RG9jdW1lbnRM
b2FkZXIqLCB1bnNpZ25lZCBsb25nLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hh
bGxlbmdlKQogewotICAgIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKiBkaWFsb2cgPSBuZXcgR3Rr
QXV0aGVudGljYXRpb25EaWFsb2coMCwgY2hhbGxlbmdlLnNvdXBTZXNzaW9uKCksIGNoYWxsZW5n
ZS5zb3VwTWVzc2FnZSgpLCBjaGFsbGVuZ2Uuc291cEF1dGgoKSk7CisgICAgR3RrQXV0aGVudGlj
YXRpb25EaWFsb2cqIGRpYWxvZyA9IG5ldyBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZygwLCBjaGFs
bGVuZ2UpOwogICAgIGRpYWxvZy0+c2hvdygpOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171541</attachid>
            <date>2012-10-30 15:59:52 -0700</date>
            <delta_ts>2012-10-30 16:10:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99914-20121030155816.patch</filename>
            <type>text/plain</type>
            <size>25051</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyODQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTBmY2JhMTdhMjA3NDY1
N2VhMjg1Y2MxY2E3ZmNjYTU5N2E2YTI5Yi4uZTI1NjM5OGIwYmQyN2JkMDJkYWY1MmUyZGNlNmU1
ZWVkNDQ2ZTcxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDEyLTEwLTMwICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBNb3Zl
IHNvdXAgYXV0aGVudGljYXRpb24gZnJvbSBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyB0byBXZWJD
b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTkx
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbWVt
YmVyIHBhc3N3b3JkcyB1c2luZyBsaWJzZWNyZXQgaW5zdGVhZCBvZiBTb3VwUGFzc3dvcmRNYW5h
Z2VyLiBXZSBhY2NvbXBsaXNoIHRoaXMgdXNpbmcKKyAgICAgICAgYSBuZXcgY2xhc3MsIENyZWRl
bnRpYWxCYWNraW5nU3RvcmUuIENyZWRlbnRpYWxCYWNraW5nU3RvcmUgd2lsbCBzb29uIGJlIHRo
ZSB0aGluZyB0aGF0IGJhY2tzCisgICAgICAgIENyZWRlbnRpYWxTdG9yZUd0ay4gVGhlIG5hbWUg
aXMgYmFzZWQgb24gdGhlIG5hbWUgb2YgYSBzaW1pbGFyIGNsYXNzIGZyb20gdGhlIEJsYWNrYmVy
cnkgcG9ydC4KKyAgICAgICAgYSBkZXBlbmRlbmN5IG9uIFNvdXBQYXNzd29yZE1hbmFnZXIuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzLiBUaGlzIHNob3VsZCBub3QgY2hhbmdlIGJlaGF2aW9yLgor
CisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZCBsaWJzZWNyZXQgZmxhZ3MgdG8gdGhlIGJ1
aWxkIGFuZCB0aGUgbmV3IGRpcmVjdG9yeSB0byB0aGUgaW5jbHVkZSBsaXN0LgorICAgICAgICAq
IEdOVW1ha2VmaWxlLmxpc3QuYW06IEFkZCBuZXcgZmlsZXMgdG8gdGhlIHNvdXJjZSBsaXN0Lgor
ICAgICAgICAqIHBsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmNwcDogQWRkIHN1cHBvcnQgZm9yIFNl
Y3JldFZhbHVlIHRvIEdSZWZQdHJHdGsuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL0d0a0F1dGhl
bnRpY2F0aW9uRGlhbG9nLmNwcDogUmVwbGFjZSBpbnRlcmFjdGlvbiB3aXRoIFNvdXBQYXNzd29y
ZE1hbmdlciB3aXRoCisgICAgICAgIGludGVyYWN0aW9uIHdpdGggdGhlIENyZWRlbnRpYWxCYWNr
aW5nU3RvcmUuIFJlbW92ZSBhbGwgY29uZGl0aW9uYWwgU291cFBhc3N3b3JkTWFuYWdlciBndWFy
ZHMuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmg6IERp
dHRvLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvZ3RrL0NyZWRlbnRpYWxCYWNraW5nU3Rv
cmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2d0ay9DcmVkZW50aWFs
QmFja2luZ1N0b3JlLmg6IEFkZGVkLgorCiAyMDEyLTEwLTI5ICBQaGlsaXAgUm9nZXJzICA8cGRy
QGdvb2dsZS5jb20+CiAKICAgICAgICAgTGV0IFNWR0VsZW1lbnRzIGhhdmUgcGVuZGluZyByZXNv
dXJjZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggOTBhZWI0ZjMzZGRjNzU0YmY1ZjM2ZmMyOTUxMjlm
NDk2YmEzNDkzYS4uZDZiMGQ0YTNkMDNlZDI4ZTk4ZjM0ZGRlYmQ5NDE5MzNkMDg5OWZjYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
Z3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTEwLTMwICBNYXJ0aW4gUm9iaW5z
b24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBNb3ZlIHNvdXAgYXV0
aGVudGljYXRpb24gZnJvbSBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyB0byBXZWJDb3JlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTkxNAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIGxpYnNlY3Jl
dCBkZXBlbmRlbmN5IHRvIHRoZSBidWlsZC4gVGhpcyBpcyBuZWNlc3Nhcnkgc28gdGhhdCB3ZSBj
YW4gcmVtb3ZlCisgICAgICAgIGEgZGVwZW5kZW5jeSBvbiBTb3VwUGFzc3dvcmRNYW5hZ2VyLgor
CisgICAgICAgICogR05VbWFrZWZpbGUuYW06IFVzZSBsaWJzZWNyZXQgbGlicyBkdXJpbmcgV2Vi
S2l0MSBsaWJyYXJ5IGNvbXBpbGF0aW9uLgorCiAyMDEyLTEwLTI0ICBCcmFkeSBFaWRzb24gIDxi
ZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYSBzdHJhdGVneSBmb3IgbG9hZGVyIGN1
c3RvbWl6YXRpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNTIwYTBlMjczMzQ2YWM3YTJmYjI2NjBhZWJmYzkx
MWE4ZTIyNmNiNC4uNzc5OGNiN2NlNjM2ZTI5YmJlYjM4MTlmMTgwMTY3OTNhZDIyZDg0ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTEwLTMwICBNYXJ0aW4gUm9iaW5zb24gIDxt
cm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBNb3ZlIHNvdXAgYXV0aGVudGlj
YXRpb24gZnJvbSBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyB0byBXZWJDb3JlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTkxNAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIGxpYnNlY3JldCBkZXBl
bmRlbmN5IHRvIHRoZSBidWlsZC4gVGhpcyBpcyBuZWNlc3Nhcnkgc28gdGhhdCB3ZSBjYW4gcmVt
b3ZlCisgICAgICAgIGEgZGVwZW5kZW5jeSBvbiBTb3VwUGFzc3dvcmRNYW5hZ2VyLgorCisgICAg
ICAgICogR05VbWFrZWZpbGUuYW06IEFkZCBsaWJzZWNyZXQgQ0ZMQUdTIHRvIHRoZSBXZWJLaXQy
IGJ1aWxkLgorCiAyMDEyLTEwLTI5ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29t
PgogCiAgICAgICAgIGJ1aWxkSFRUUEhlYWRlcnMoKSBzaG91bGQgdXNlIGEgU3RyaW5nQnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCkgZm9yIHNlcGFyYXRvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCAz
NjE2YTM4MGE2Y2JkMjk4ODQzMjI2MzAyOTNmMTJmZWU3Y2YwZTE4Li5lNjZiZjA1NDdjYjgwODg1
ZWI3NDYyMDFiMGNlZDlmYjQ3MzdhZTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtNzMsNiAr
NzMsNyBAQCB3ZWJjb3JlX2NwcGZsYWdzICs9IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21vY2sgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsgXAorCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvZ3RrIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwgXAogCS1J
JChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQgXAogCS1JJChzcmNkaXIpL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvdHJhbnNjb2RlciBcCkBAIC02NDEsNiArNjQyLDcg
QEAgbGliV2ViQ29yZV9sYV9DUFBGTEFHUyA9IFwKIAkkKEdFT0NMVUVfQ0ZMQUdTKSBcCiAJJChH
TElCX0NGTEFHUykgXAogCSQoR1NUUkVBTUVSX0NGTEFHUykgXAorCSQoTElCU0VDUkVUX0NGTEFH
UykgXAogCSQoTElCU09VUF9DRkxBR1MpIFwKIAkkKExJQlhNTF9DRkxBR1MpIFwKIAkkKExJQlhT
TFRfQ0ZMQUdTKSBcCkBAIC03MDQsNiArNzA2LDcgQEAgbGliV2ViQ29yZUd0a19sYV9DUFBGTEFH
UyA9IFwKIAkkKEdTVFJFQU1FUl9DRkxBR1MpIFwKIAkkKEdUS19DRkxBR1MpIFwKIAkkKEhJTERP
Tl9DRkxBR1MpIFwKKwkkKExJQlNFQ1JFVF9DRkxBR1MpIFwKIAkkKExJQlNPVVBfQ0ZMQUdTKSBc
CiAJJChMSUJYTUxfQ0ZMQUdTKSBcCiAJJChMSUJYU0xUX0NGTEFHUykgXApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0KaW5kZXggYjBiZGQyZWJhYjczYmE5ZmIyNjEyOTM1MTkyY2IzZjU0OTIz
NzAzYi4uNDAzYzczNGE4ZWQxYWFlNmNjMDY1Y2QxNTQ2NTY1Y2E1ZDM1MGYxOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC00NzM2LDYgKzQ3MzYsOCBAQCB3ZWJjb3JlX3NvdXJj
ZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFu
ZGxlQmFzZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU29ja2V0U3Ry
ZWFtSGFuZGxlQmFzZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tl
dFN0cmVhbUhhbmRsZUNsaWVudC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2d0ay9DcmVkZW50aWFsQmFja2luZ1N0b3JlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9ndGsvQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCBcCiAJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
U291cC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVK
YXJTb3VwLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR1Jl
ZlB0ckd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5jcHAK
aW5kZXggOWE5ZDY3OTVmODNhYWE1OWZmNTJjOTVmNDg5YmRkMmY1MmNlYzJhNC4uZmE1MDZkZjkw
MDdkMjRjYzA3Njc3NjhkZWZkMTA1NjYyZmMzOWIzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9HUmVmUHRyR3RrLmNwcApAQCAtMjAsOCArMjAsMTIgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCiAKKyNkZWZpbmUgU0VDUkVUX1dJVEhfVU5T
VEFCTEUgMQorI2RlZmluZSBTRUNSRVRfQVBJX1NVQkpFQ1RfVE9fQ0hBTkdFIDEKKwogI2luY2x1
ZGUgPGdsaWIuaD4KICNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8bGlic2VjcmV0L3Nl
Y3JldC5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtMzgsNiArNDIsMTkgQEAgdGVtcGxhdGUg
PD4gdm9pZCBkZXJlZkdQdHIoR3RrVGFyZ2V0TGlzdCogcHRyKQogICAgICAgICBndGtfdGFyZ2V0
X2xpc3RfdW5yZWYocHRyKTsKIH0KIAordGVtcGxhdGUgPD4gU2VjcmV0VmFsdWUqIHJlZkdQdHIo
U2VjcmV0VmFsdWUqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBzZWNyZXRfdmFsdWVf
cmVmKHB0cik7CisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQ
dHIoU2VjcmV0VmFsdWUqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBzZWNyZXRfdmFs
dWVfdW5yZWYocHRyKTsKK30KKwogI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCiB0ZW1wbGF0ZSA8
PiBHZGtDdXJzb3IqIHJlZkdQdHIoR2RrQ3Vyc29yKiBwdHIpCiB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0dSZWZQdHJHdGsuaAppbmRleCBhOWY0OTFmMTQ3MGU0MjE4OTEyN2ZmNGY4NjVh
MzMxNjRhMTdhN2Y2Li45MTkyODY0YTkyMjlkYWI4ODNiZWZhNTYyYjIzNWFkOGFjMzk2ZGM5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmgKQEAgLTIzLDExICsyMywx
NiBAQAogCiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgogCit0eXBlZGVmIHN0cnVj
dCBfU2VjcmV0VmFsdWUgU2VjcmV0VmFsdWU7CisKIG5hbWVzcGFjZSBXVEYgewogCiB0ZW1wbGF0
ZSA8PiBHdGtUYXJnZXRMaXN0KiByZWZHUHRyKEd0a1RhcmdldExpc3QqIHB0cik7CiB0ZW1wbGF0
ZSA8PiB2b2lkIGRlcmVmR1B0cihHdGtUYXJnZXRMaXN0KiBwdHIpOwogCit0ZW1wbGF0ZSA8PiBT
ZWNyZXRWYWx1ZSogcmVmR1B0cihTZWNyZXRWYWx1ZSogcHRyKTsKK3RlbXBsYXRlIDw+IHZvaWQg
ZGVyZWZHUHRyKFNlY3JldFZhbHVlKiBwdHIpOworCiAjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIK
IHRlbXBsYXRlIDw+IEdka0N1cnNvciogcmVmR1B0cihHZGtDdXJzb3IqIHB0cik7CiB0ZW1wbGF0
ZSA8PiB2b2lkIGRlcmVmR1B0cihHZGtDdXJzb3IqIHB0cik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcAppbmRleCAz
NmJkMzFiMWVhNTEzZjUyNTYyOWQ4ZDkwMmJjZGMwZTU5YWZhODVmLi5jYzU2MTEzMmRkMjczZjNj
ZWRiNTE0YzVjZTBhZWViMzEyZDE4MTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5jcHAKQEAgLTIwLDYgKzIwLDgg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJHdGtBdXRoZW50aWNhdGlvbkRpYWxv
Zy5oIgogCisjaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCIKKyNpbmNsdWRlICJD
cmVkZW50aWFsQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgogI2lu
Y2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgpAQCAtNTQsMTUg
KzU2LDYgQEAgc3RhdGljIEd0a1dpZGdldCogYWRkRW50cnlUb0dyaWQoR3RrR3JpZCogZ3JpZCwg
aW50IHJvdywgY29uc3QgY2hhciogbGFiZWxUZXh0KQogICAgIHJldHVybiBlbnRyeTsKIH0KIAot
c3RhdGljIGJvb2wgc2Vzc2lvbkNhblNhdmVQYXNzd29yZHMoU291cFNlc3Npb24qIHNlc3Npb24p
Ci17Ci0jaWZkZWYgU09VUF9UWVBFX1BBU1NXT1JEX01BTkFHRVIKLSAgICByZXR1cm4gc291cF9z
ZXNzaW9uX2dldF9mZWF0dXJlKHNlc3Npb24sIFNPVVBfVFlQRV9QQVNTV09SRF9NQU5BR0VSKTsK
LSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KIEd0a0F1dGhlbnRpY2F0aW9u
RGlhbG9nOjp+R3RrQXV0aGVudGljYXRpb25EaWFsb2coKQogewogfQpAQCAtNzUsMTAgKzY4LDgg
QEAgR3RrQXV0aGVudGljYXRpb25EaWFsb2c6Okd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKEd0a1dp
bmRvdyogcGFyZW50V2luZG93LCBTb3VwU2UKICAgICAsIG1fbG9naW5FbnRyeSgwKQogICAgICwg
bV9wYXNzd29yZEVudHJ5KDApCiAgICAgLCBtX3JlbWVtYmVyQ2hlY2tCdXR0b24oMCkKLSNpZmRl
ZiBTT1VQX1RZUEVfUEFTU1dPUkRfTUFOQUdFUgogICAgICwgbV9pc1NhdmluZ1Bhc3N3b3JkKGZh
bHNlKQogICAgICwgbV9zYXZlUGFzc3dvcmRIYW5kbGVyKDApCi0jZW5kaWYKIHsKICAgICBHdGtE
aWFsb2cqIGRpYWxvZyA9IEdUS19ESUFMT0cobV9kaWFsb2cpOwogICAgIGd0a19kaWFsb2dfYWRk
X2J1dHRvbnMoZGlhbG9nLCBHVEtfU1RPQ0tfQ0FOQ0VMLCBHVEtfUkVTUE9OU0VfQ0FOQ0VMLCBH
VEtfU1RPQ0tfT0ssIEdUS19SRVNQT05TRV9PSywgTlVMTCk7CkBAIC0xODcsNDcgKzE3OCwzMSBA
QCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6R3RrQXV0aGVudGljYXRpb25EaWFsb2coR3RrV2lu
ZG93KiBwYXJlbnRXaW5kb3csIFNvdXBTZQogCiAgICAgZ3RrX2VudHJ5X3NldF92aXNpYmlsaXR5
KEdUS19FTlRSWShtX3Bhc3N3b3JkRW50cnkpLCBGQUxTRSk7CiAKLSAgICBpZiAoc2Vzc2lvbkNh
blNhdmVQYXNzd29yZHMobV9zZXNzaW9uKSkgewogI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0g
ICAgICAgIEd0a1dpZGdldCogcmVtZW1iZXJCb3ggPSBndGtfdmJveF9uZXcoRkFMU0UsIDYpOwor
ICAgIEd0a1dpZGdldCogcmVtZW1iZXJCb3ggPSBndGtfdmJveF9uZXcoRkFMU0UsIDYpOwogI2Vs
c2UKLSAgICAgICAgR3RrV2lkZ2V0KiByZW1lbWJlckJveCA9IGd0a19ib3hfbmV3KEdUS19PUklF
TlRBVElPTl9WRVJUSUNBTCwgNik7CisgICAgR3RrV2lkZ2V0KiByZW1lbWJlckJveCA9IGd0a19i
b3hfbmV3KEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCwgNik7CiAjZW5kaWYKLSAgICAgICAgZ3Rr
X2JveF9wYWNrX3N0YXJ0KEdUS19CT1godkJveCksIHJlbWVtYmVyQm94LCBGQUxTRSwgRkFMU0Us
IDApOworICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZCb3gpLCByZW1lbWJlckJveCwg
RkFMU0UsIEZBTFNFLCAwKTsKIAotICAgICAgICBtX3JlbWVtYmVyQ2hlY2tCdXR0b24gPSBndGtf
Y2hlY2tfYnV0dG9uX25ld193aXRoX21uZW1vbmljKF8oIl9SZW1lbWJlciBwYXNzd29yZCIpKTsK
LSAgICAgICAgZ3RrX2xhYmVsX3NldF9saW5lX3dyYXAoR1RLX0xBQkVMKGd0a19iaW5fZ2V0X2No
aWxkKEdUS19CSU4obV9yZW1lbWJlckNoZWNrQnV0dG9uKSkpLCBUUlVFKTsKLSAgICAgICAgZ3Rr
X2JveF9wYWNrX3N0YXJ0KEdUS19CT1gocmVtZW1iZXJCb3gpLCBtX3JlbWVtYmVyQ2hlY2tCdXR0
b24sIEZBTFNFLCBGQUxTRSwgMCk7Ci0gICAgfQotfQotCi1zdGF0aWMgYm9vbCBnZXRTYXZlZExv
Z2luKFNvdXBBdXRoKiBhdXRoLCBjb25zdCBjaGFyKiogdXNlcm5hbWUsIGNvbnN0IGNoYXIqKiBw
YXNzd29yZCkKLXsKLSNpZmRlZiBTT1VQX1RZUEVfUEFTU1dPUkRfTUFOQUdFUgotICAgIEdTTGlz
dCogdXNlcnMgPSBzb3VwX2F1dGhfZ2V0X3NhdmVkX3VzZXJzKGF1dGgpOwotICAgIGlmICghdXNl
cnMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICp1c2VybmFtZSA9IHN0YXRpY19jYXN0
PGNoYXIqPih1c2Vycy0+ZGF0YSk7Ci0gICAgKnBhc3N3b3JkID0gc291cF9hdXRoX2dldF9zYXZl
ZF9wYXNzd29yZChhdXRoLCAqdXNlcm5hbWUpOwotICAgIGdfc2xpc3RfZnJlZSh1c2Vycyk7Ci0K
LSAgICByZXR1cm4gKnVzZXJuYW1lICYmICpwYXNzd29yZDsKLSNlbHNlCi0gICAgcmV0dXJuIGZh
bHNlOwotI2VuZGlmCisgICAgbV9yZW1lbWJlckNoZWNrQnV0dG9uID0gZ3RrX2NoZWNrX2J1dHRv
bl9uZXdfd2l0aF9tbmVtb25pYyhfKCJfUmVtZW1iZXIgcGFzc3dvcmQiKSk7CisgICAgZ3RrX2xh
YmVsX3NldF9saW5lX3dyYXAoR1RLX0xBQkVMKGd0a19iaW5fZ2V0X2NoaWxkKEdUS19CSU4obV9y
ZW1lbWJlckNoZWNrQnV0dG9uKSkpLCBUUlVFKTsKKyAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RL
X0JPWChyZW1lbWJlckJveCksIG1fcmVtZW1iZXJDaGVja0J1dHRvbiwgRkFMU0UsIEZBTFNFLCAw
KTsKIH0KIAogdm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6c2hvdygpCiB7Ci0gICAgY29u
c3QgY2hhciogdXNlcm5hbWUgPSAwOwotICAgIGNvbnN0IGNoYXIqIHBhc3N3b3JkID0gMDsKLSAg
ICBib29sIGhhdmVTYXZlZExvZ2luID0gZ2V0U2F2ZWRMb2dpbihtX2F1dGguZ2V0KCksICZ1c2Vy
bmFtZSwgJnBhc3N3b3JkKTsKICAgICBzb3VwX3Nlc3Npb25fcGF1c2VfbWVzc2FnZShtX3Nlc3Np
b24sIG1fbWVzc2FnZS5nZXQoKSk7Ci0gICAgZ3RrX2VudHJ5X3NldF90ZXh0KEdUS19FTlRSWSht
X2xvZ2luRW50cnkpLCB1c2VybmFtZSA/IHVzZXJuYW1lIDogIiIpOwotICAgIGd0a19lbnRyeV9z
ZXRfdGV4dChHVEtfRU5UUlkobV9wYXNzd29yZEVudHJ5KSwgcGFzc3dvcmQgPyBwYXNzd29yZCA6
ICIiKTsKLSAgICBpZiAobV9yZW1lbWJlckNoZWNrQnV0dG9uICYmIGhhdmVTYXZlZExvZ2luKQor
CisgICAgLy8gVGhpcyBpcyBqdXN0IGEgdGVtcG9yYXJ5IGtsdWRnZSB1bnRpbCBHdGtBdXRoZW50
aWNhdGlvbkRpYWxvZyB3b3JrcyBkaXJlY3RseSB3aXRoIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
cy4KKyAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSBjaGFsbGVuZ2UoMCAvKiBzZXNzaW9uICov
LCBtX21lc3NhZ2UuZ2V0KCksIG1fYXV0aC5nZXQoKSwgZmFsc2UsIDApOworICAgIENyZWRlbnRp
YWwgc2F2ZWRDcmVkZW50aWFsID0gY3JlZGVudGlhbEJhY2tpbmdTdG9yZSgpLmdldENyZWRlbnRp
YWxGb3JDaGFsbGVuZ2UoY2hhbGxlbmdlKTsKKyAgICBpZiAoIXNhdmVkQ3JlZGVudGlhbC5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgZ3RrX2VudHJ5X3NldF90ZXh0KEdUS19FTlRSWShtX2xvZ2luRW50
cnkpLCBzYXZlZENyZWRlbnRpYWwudXNlcigpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBndGtf
ZW50cnlfc2V0X3RleHQoR1RLX0VOVFJZKG1fcGFzc3dvcmRFbnRyeSksIHNhdmVkQ3JlZGVudGlh
bC5wYXNzd29yZCgpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICBndGtfdG9nZ2xlX2J1dHRvbl9z
ZXRfYWN0aXZlKEdUS19UT0dHTEVfQlVUVE9OKG1fcmVtZW1iZXJDaGVja0J1dHRvbiksIFRSVUUp
OworICAgIH0KKwogICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9kaWFsb2csICJyZXNwb25zZSIsIEdf
Q0FMTEJBQ0soYXV0aGVudGljYXRpb25EaWFsb2dSZXNwb25zZUNhbGxiYWNrKSwgdGhpcyk7CiAg
ICAgZ3RrX3dpZGdldF9zaG93X2FsbChtX2RpYWxvZyk7CiB9CkBAIC0yMzksOSArMjE0LDcgQEAg
dm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6ZGVzdHJveSgpCiAgICAgc291cF9zZXNzaW9u
X3VucGF1c2VfbWVzc2FnZShtX3Nlc3Npb24sIG1fbWVzc2FnZS5nZXQoKSk7CiAgICAgZ3RrX3dp
ZGdldF9kZXN0cm95KG1fZGlhbG9nKTsKIAotI2lmZGVmIFNPVVBfVFlQRV9QQVNTV09SRF9NQU5B
R0VSCiAgICAgc2hvdWxkRGVsZXRlID0gIW1faXNTYXZpbmdQYXNzd29yZDsKLSNlbmRpZgogCiAg
ICAgLy8gRG8gbm90IGRlbGV0ZSB0aGUgb2JqZWN0IGlmIGl0J3Mgc3RpbGwgc2F2aW5nIHRoZSBw
YXNzd29yZCwKICAgICAvLyB0aGUgc2F2ZSBwYXNzd29yZCBjYWxsYmFjayB3aWxsIGRlbGV0ZSBp
dC4KQEAgLTI0OSw3ICsyMjIsNiBAQCB2b2lkIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpkZXN0
cm95KCkKICAgICAgICAgZGVsZXRlIHRoaXM7CiB9CiAKLSNpZmRlZiBTT1VQX1RZUEVfUEFTU1dP
UkRfTUFOQUdFUgogdm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6c2F2ZVBhc3N3b3JkQ2Fs
bGJhY2soU291cE1lc3NhZ2UqIG1lc3NhZ2UsIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKiBkaWFs
b2cpCiB7CiAgICAgZGlhbG9nLT5zYXZlUGFzc3dvcmQoKTsKQEAgLTI2MSw4ICsyMzMsMTUgQEAg
dm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6c2F2ZVBhc3N3b3JkKCkKICAgICBBU1NFUlQo
IW1fcGFzc3dvcmQuaXNOdWxsKCkpOwogCiAgICAgLy8gQW55dGhpbmcgYnV0IDQwMSBhbmQgNXh4
IG1lYW5zIHRoZSBwYXNzd29yZCB3YXMgYWNjZXB0ZWQuCi0gICAgaWYgKG1fbWVzc2FnZS5nZXQo
KS0+c3RhdHVzX2NvZGUgIT0gNDAxICYmIG1fbWVzc2FnZS5nZXQoKS0+c3RhdHVzX2NvZGUgPCA1
MDApCi0gICAgICAgIHNvdXBfYXV0aF9zYXZlX3Bhc3N3b3JkKG1fYXV0aC5nZXQoKSwgbV91c2Vy
bmFtZS5kYXRhKCksIG1fcGFzc3dvcmQuZGF0YSgpKTsKKyAgICBpZiAobV9tZXNzYWdlLmdldCgp
LT5zdGF0dXNfY29kZSAhPSA0MDEgJiYgbV9tZXNzYWdlLmdldCgpLT5zdGF0dXNfY29kZSA8IDUw
MCkgeworICAgICAgICAvLyBUaGlzIGlzIGp1c3QgYSB0ZW1wb3Jhcnkga2x1ZGdlIHVudGlsIEd0
a0F1dGhlbnRpY2F0aW9uRGlhbG9nIHdvcmtzIGRpcmVjdGx5IHdpdGggQXV0aGVudGljYXRpb25D
aGFsbGVuZ2VzLgorICAgICAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSBjaGFsbGVuZ2UoMCAv
KiBzZXNzaW9uICovLCBtX21lc3NhZ2UuZ2V0KCksIG1fYXV0aC5nZXQoKSwgZmFsc2UsIDApOwor
ICAgICAgICBDcmVkZW50aWFsIGNyZWRlbnRpYWxUb1NhdmUgPSBDcmVkZW50aWFsKAorICAgICAg
ICAgICAgU3RyaW5nOjpmcm9tVVRGOChtX3VzZXJuYW1lLmRhdGEoKSksCisgICAgICAgICAgICBT
dHJpbmc6OmZyb21VVEY4KG1fcGFzc3dvcmQuZGF0YSgpKSwKKyAgICAgICAgICAgIENyZWRlbnRp
YWxQZXJzaXN0ZW5jZVBlcm1hbmVudCk7CisgICAgICAgIGNyZWRlbnRpYWxCYWNraW5nU3RvcmUo
KS5zdG9yZUNyZWRlbnRpYWxzRm9yQ2hhbGxlbmdlKGNoYWxsZW5nZSwgY3JlZGVudGlhbFRvU2F2
ZSk7CisgICAgfQogCiAgICAgLy8gRGlzY29ubmVjdCB0aGUgY2FsbGJhY2suIElmIHRoZSBhdXRo
ZW50aWNhdGlvbiBzdWNjZWVkZWQgd2UgYXJlIGRvbmUsCiAgICAgLy8gYW5kIGlmIGl0IGZhaWxl
ZCB3ZSdsbCBjcmVhdGUgYSBuZXcgR3RrQXV0aGVudGljYXRpb25EaWFsb2cgYW5kIHdlJ2xsCkBA
IC0yNzIsNyArMjUxLDYgQEAgdm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6c2F2ZVBhc3N3
b3JkKCkKICAgICAvLyBEaWFsb2cgaGFzIGJlZW4gYWxyZWFkeSBkZXN0cm95ZWQsIGFmdGVyIHNh
dmluZyB0aGUgcGFzc3dvcmQgaXQgc2hvdWxkIGJlIGRlbGV0ZWQuCiAgICAgZGVsZXRlIHRoaXM7
CiB9Ci0jZW5kaWYKIAogdm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6YXV0aGVudGljYXRl
KCkKIHsKQEAgLTI4MCwxNCArMjU4LDEyIEBAIHZvaWQgR3RrQXV0aGVudGljYXRpb25EaWFsb2c6
OmF1dGhlbnRpY2F0ZSgpCiAgICAgY29uc3QgY2hhciAqcGFzc3dvcmQgPSBndGtfZW50cnlfZ2V0
X3RleHQoR1RLX0VOVFJZKG1fcGFzc3dvcmRFbnRyeSkpOwogICAgIHNvdXBfYXV0aF9hdXRoZW50
aWNhdGUobV9hdXRoLmdldCgpLCB1c2VybmFtZSwgcGFzc3dvcmQpOwogCi0jaWZkZWYgU09VUF9U
WVBFX1BBU1NXT1JEX01BTkFHRVIKICAgICBpZiAobV9yZW1lbWJlckNoZWNrQnV0dG9uICYmIGd0
a190b2dnbGVfYnV0dG9uX2dldF9hY3RpdmUoR1RLX1RPR0dMRV9CVVRUT04obV9yZW1lbWJlckNo
ZWNrQnV0dG9uKSkpIHsKICAgICAgICAgbV91c2VybmFtZSA9IHVzZXJuYW1lOwogICAgICAgICBt
X3Bhc3N3b3JkID0gcGFzc3dvcmQ7CiAgICAgICAgIG1faXNTYXZpbmdQYXNzd29yZCA9IHRydWU7
CiAgICAgICAgIG1fc2F2ZVBhc3N3b3JkSGFuZGxlciA9IGdfc2lnbmFsX2Nvbm5lY3QobV9tZXNz
YWdlLmdldCgpLCAiZ290LWhlYWRlcnMiLCBHX0NBTExCQUNLKHNhdmVQYXNzd29yZENhbGxiYWNr
KSwgdGhpcyk7CiAgICAgfQotI2VuZGlmCiB9CiAKIHZvaWQgR3RrQXV0aGVudGljYXRpb25EaWFs
b2c6OmF1dGhlbnRpY2F0aW9uRGlhbG9nUmVzcG9uc2VDYWxsYmFjayhHdGtXaWRnZXQqLCBnaW50
IHJlc3BvbnNlSUQsIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKiBkaWFsb2cpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5oCmlu
ZGV4IDc1ODI0MWNkMzM2ZDgzMzY1NDU5NTUwYTM4ZjBlMTZkNDk2OGI0MjUuLjkxMmY3NWQ3Njkx
Njg3NWViZWU1OTQ5YzdkMThlZGM4ZDBlOTdkNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5oCkBAIC0yMCw4ICsyMCw2
IEBACiAjaWZuZGVmIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nX2gKICNkZWZpbmUgR3RrQXV0aGVu
dGljYXRpb25EaWFsb2dfaAogCi0jZGVmaW5lIExJQlNPVVBfSV9IQVZFX1JFQURfQlVHXzU5NDM3
N19BTkRfS05PV19TT1VQX1BBU1NXT1JEX01BTkFHRVJfTUlHSFRfR09fQVdBWQotCiAjaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgogI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKICNpbmNs
dWRlIDxsaWJzb3VwL3NvdXAuaD4KQEAgLTQ0LDEyICs0Miw4IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgdm9pZCBkZXN0cm95KCk7CiAgICAgdm9pZCBhdXRoZW50aWNhdGUoKTsKLQotI2lmZGVm
IFNPVVBfVFlQRV9QQVNTV09SRF9NQU5BR0VSCiAgICAgdm9pZCBzYXZlUGFzc3dvcmQoKTsKICAg
ICBzdGF0aWMgdm9pZCBzYXZlUGFzc3dvcmRDYWxsYmFjayhTb3VwTWVzc2FnZSosIEd0a0F1dGhl
bnRpY2F0aW9uRGlhbG9nKik7Ci0jZW5kaWYKLQogICAgIHN0YXRpYyB2b2lkIGF1dGhlbnRpY2F0
aW9uRGlhbG9nUmVzcG9uc2VDYWxsYmFjayhHdGtXaWRnZXQqLCBnaW50IHJlc3BvbnNlSUQsIEd0
a0F1dGhlbnRpY2F0aW9uRGlhbG9nKik7CiAKICAgICBHdGtXaWRnZXQqIG1fZGlhbG9nOwpAQCAt
NjEsMTIgKzU1LDEwIEBAIHByaXZhdGU6CiAgICAgR3RrV2lkZ2V0KiBtX3Bhc3N3b3JkRW50cnk7
CiAgICAgR3RrV2lkZ2V0KiBtX3JlbWVtYmVyQ2hlY2tCdXR0b247CiAKLSNpZmRlZiBTT1VQX1RZ
UEVfUEFTU1dPUkRfTUFOQUdFUgogICAgIGJvb2wgbV9pc1NhdmluZ1Bhc3N3b3JkOwogICAgIHVu
c2lnbmVkIGxvbmcgbV9zYXZlUGFzc3dvcmRIYW5kbGVyOwogICAgIENTdHJpbmcgbV91c2VybmFt
ZTsKICAgICBDU3RyaW5nIG1fcGFzc3dvcmQ7Ci0jZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvZ3Rr
L0NyZWRlbnRpYWxCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9ndGsvQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2NmZTJiMWI3
NjdlY2NhODJmYWMzNDZiODYzMDI4ODU1MTNkNTAyNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvZ3RrL0NyZWRlbnRpYWxCYWNraW5nU3RvcmUuY3Bw
CkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBJR0FMSUEgUy5M
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNyZWRlbnRpYWxCYWNraW5nU3RvcmUuaCIK
KworI2RlZmluZSBTRUNSRVRfV0lUSF9VTlNUQUJMRSAxCisjZGVmaW5lIFNFQ1JFVF9BUElfU1VC
SkVDVF9UT19DSEFOR0UgMQorI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKKyNpbmNsdWRlIDxnbGli
L2dpMThuLWxpYi5oPgorI2luY2x1ZGUgPGxpYnNlY3JldC9zZWNyZXQuaD4KKyNpbmNsdWRlIDxs
aWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NyZWRlbnRp
YWxCYWNraW5nU3RvcmUmIGNyZWRlbnRpYWxCYWNraW5nU3RvcmUoKQoreworICAgIERFRklORV9T
VEFUSUNfTE9DQUwoQ3JlZGVudGlhbEJhY2tpbmdTdG9yZSwgYmFja2luZ1N0b3JlLCAoKSk7Cisg
ICAgcmV0dXJuIGJhY2tpbmdTdG9yZTsKK30KKworQ3JlZGVudGlhbEJhY2tpbmdTdG9yZTo6Q3Jl
ZGVudGlhbEJhY2tpbmdTdG9yZSgpCit7Cit9CisKK0NyZWRlbnRpYWxCYWNraW5nU3RvcmU6On5D
cmVkZW50aWFsQmFja2luZ1N0b3JlKCkKK3sKK30KKworc3RhdGljIEdSZWZQdHI8R0hhc2hUYWJs
ZT4gY3JlYXRlQXR0cmlidXRlSGFzaFRhYmxlRnJvbUNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsID0g
Q3JlZGVudGlhbCgpKQoreworICAgIFNvdXBVUkkqIHVyaSA9IHNvdXBfbWVzc2FnZV9nZXRfdXJp
KGNoYWxsZW5nZS5zb3VwTWVzc2FnZSgpKTsKKyAgICBHUmVmUHRyPEdIYXNoVGFibGU+IGF0dHJp
YnV0ZXMgPSBhZG9wdEdSZWYoc2VjcmV0X2F0dHJpYnV0ZXNfYnVpbGQoCisgICAgICAgIFNFQ1JF
VF9TQ0hFTUFfQ09NUEFUX05FVFdPUkssCisgICAgICAgICJkb21haW4iLCBzb3VwX2F1dGhfZ2V0
X3JlYWxtKGNoYWxsZW5nZS5zb3VwQXV0aCgpKSwKKyAgICAgICAgInNlcnZlciIsIHVyaS0+aG9z
dCwKKyAgICAgICAgInByb3RvY29sIiwgdXJpLT5zY2hlbWUsCisgICAgICAgICJhdXRodHlwZSIs
IHNvdXBfYXV0aF9nZXRfc2NoZW1lX25hbWUoY2hhbGxlbmdlLnNvdXBBdXRoKCkpLAorICAgICAg
ICAicG9ydCIsIHVyaS0+cG9ydCwKKyAgICAgICAgTlVMTCkpOworICAgIGlmIChjcmVkZW50aWFs
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7CisKKyAgICBnX2hhc2hfdGFi
bGVfaW5zZXJ0KGF0dHJpYnV0ZXMuZ2V0KCksIGdfc3RyZHVwKCJ1c2VyIiksIGdfc3RyZHVwKGNy
ZWRlbnRpYWwudXNlcigpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICByZXR1cm4gYXR0cmlidXRlczsK
K30KKworQ3JlZGVudGlhbCBDcmVkZW50aWFsQmFja2luZ1N0b3JlOjpnZXRDcmVkZW50aWFsRm9y
Q2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UpCit7Cisg
ICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgIEdPd25QdHI8R0xpc3Q+IGVsZW1lbnRzKHNl
Y3JldF9zZXJ2aWNlX3NlYXJjaF9zeW5jKAorICAgICAgICAwLCAvLyBUaGUgZGVmYXVsdCBTZWNy
ZXRTZXJ2aWNlLgorICAgICAgICBTRUNSRVRfU0NIRU1BX0NPTVBBVF9ORVRXT1JLLAorICAgICAg
ICBjcmVhdGVBdHRyaWJ1dGVIYXNoVGFibGVGcm9tQ2hhbGxlbmdlKGNoYWxsZW5nZSkuZ2V0KCks
CisgICAgICAgIHN0YXRpY19jYXN0PFNlY3JldFNlYXJjaEZsYWdzPihTRUNSRVRfU0VBUkNIX1VO
TE9DSyB8IFNFQ1JFVF9TRUFSQ0hfTE9BRF9TRUNSRVRTKSwgLy8gVGhlIGRlZmF1bHQgYmVoYXZp
b3IgaXMgdG8gb25seSByZXR1cm4gdGhlIG1vc3QgcmVjZW50IGl0ZW0uCisgICAgICAgIDAsIC8v
IGNhbmNlbGxhYmxlCisgICAgICAgICZlcnJvci5vdXRQdHIoKSkpOworICAgIGlmIChlcnJvciB8
fCAhZWxlbWVudHMgfHwgIWVsZW1lbnRzLT5kYXRhKQorICAgICAgICByZXR1cm4gQ3JlZGVudGlh
bCgpOworCisgICAgR1JlZlB0cjxTZWNyZXRJdGVtPiBzZWNyZXRJdGVtID0gYWRvcHRHUmVmKHN0
YXRpY19jYXN0PFNlY3JldEl0ZW0qPihlbGVtZW50cy0+ZGF0YSkpOworICAgIEdSZWZQdHI8R0hh
c2hUYWJsZT4gYXR0cmlidXRlcyA9IGFkb3B0R1JlZihzZWNyZXRfaXRlbV9nZXRfYXR0cmlidXRl
cyhzZWNyZXRJdGVtLmdldCgpKSk7CisgICAgU3RyaW5nIHVzZXIgPSBTdHJpbmc6OmZyb21VVEY4
KHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihnX2hhc2hfdGFibGVfbG9va3VwKGF0dHJpYnV0ZXMu
Z2V0KCksICJ1c2VyIikpKTsKKyAgICBpZiAodXNlci5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBDcmVkZW50aWFsKCk7CisKKyAgICBzaXplX3QgbGVuZ3RoOworICAgIEdSZWZQdHI8U2VjcmV0
VmFsdWU+IHNlY3JldFZhbHVlID0gYWRvcHRHUmVmKHNlY3JldF9pdGVtX2dldF9zZWNyZXQoc2Vj
cmV0SXRlbS5nZXQoKSkpOworICAgIGNvbnN0IGNoYXIqIHBhc3N3b3JkRGF0YSA9IHNlY3JldF92
YWx1ZV9nZXQoc2VjcmV0VmFsdWUuZ2V0KCksICZsZW5ndGgpOworICAgIFN0cmluZyBwYXNzd29y
ZCA9IFN0cmluZzo6ZnJvbVVURjgocGFzc3dvcmREYXRhLCBsZW5ndGgpOworCisgICAgcmV0dXJu
IENyZWRlbnRpYWwodXNlciwgcGFzc3dvcmQsIENyZWRlbnRpYWxQZXJzaXN0ZW5jZVBlcm1hbmVu
dCk7Cit9CisKK3ZvaWQgQ3JlZGVudGlhbEJhY2tpbmdTdG9yZTo6c3RvcmVDcmVkZW50aWFsc0Zv
ckNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBjb25z
dCBDcmVkZW50aWFsJiBjcmVkZW50aWFsKQoreworICAgIENTdHJpbmcgdXRmOFBhc3N3b3JkID0g
Y3JlZGVudGlhbC5wYXNzd29yZCgpLnV0ZjgoKTsKKyAgICBHUmVmUHRyPFNlY3JldFZhbHVlPiBu
ZXdTZWNyZXRWYWx1ZSA9IGFkb3B0R1JlZihzZWNyZXRfdmFsdWVfbmV3KHV0ZjhQYXNzd29yZC5k
YXRhKCksIHV0ZjhQYXNzd29yZC5sZW5ndGgoKSwgInRleHQvcGxhaW4iKSk7CisKKyAgICBHT3du
UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgc2VjcmV0X3NlcnZpY2Vfc3RvcmVfc3luYygKKyAgICAg
ICAgMCwgLy8gVGhlIGRlZmF1bHQgU2VjcmV0U2VydmljZS4KKyAgICAgICAgU0VDUkVUX1NDSEVN
QV9DT01QQVRfTkVUV09SSywKKyAgICAgICAgY3JlYXRlQXR0cmlidXRlSGFzaFRhYmxlRnJvbUNo
YWxsZW5nZShjaGFsbGVuZ2UsIGNyZWRlbnRpYWwpLmdldCgpLAorICAgICAgICBTRUNSRVRfQ09M
TEVDVElPTl9ERUZBVUxULAorICAgICAgICBfKCJXZWJLaXRHVEsrIHBhc3N3b3JkIiksCisgICAg
ICAgIG5ld1NlY3JldFZhbHVlLmdldCgpLAorICAgICAgICAwLCAvLyBjYW5jZWxsYWJsZQorICAg
ICAgICAmZXJyb3Iub3V0UHRyKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2d0ay9DcmVkZW50aWFsQmFj
a2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2d0ay9DcmVkZW50
aWFsQmFja2luZ1N0b3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2EyMDRhODA1MWUyZjZhMDA4MjgxNWUwMTBl
YzQzN2JmNTI0MDI2OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvZ3RrL0NyZWRlbnRpYWxCYWNraW5nU3RvcmUuaApAQCAtMCwwICsxLDUzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBJR0FMSUEgUy5MLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDcmVkZW50aWFsQmFj
a2luZ1N0b3JlX2gKKyNkZWZpbmUgQ3JlZGVudGlhbEJhY2tpbmdTdG9yZV9oCisKKyNpbmNsdWRl
ICJBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oIgorI2luY2x1ZGUgIkNyZWRlbnRpYWwuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBLVVJMOworY2xhc3MgUHJvdGVjdGlvblNwYWNl
OworCitjbGFzcyBDcmVkZW50aWFsQmFja2luZ1N0b3JlIHsKK3B1YmxpYzoKKyAgICBmcmllbmQg
Q3JlZGVudGlhbEJhY2tpbmdTdG9yZSYgY3JlZGVudGlhbEJhY2tpbmdTdG9yZSgpOworICAgIH5D
cmVkZW50aWFsQmFja2luZ1N0b3JlKCk7CisKKyAgICBDcmVkZW50aWFsIGdldENyZWRlbnRpYWxG
b3JDaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKKyAgICB2b2lkIHN0
b3JlQ3JlZGVudGlhbHNGb3JDaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2Um
LCBjb25zdCBDcmVkZW50aWFsJik7CisKK3ByaXZhdGU6CisgICAgQ3JlZGVudGlhbEJhY2tpbmdT
dG9yZSgpOworfTsKKworQ3JlZGVudGlhbEJhY2tpbmdTdG9yZSYgY3JlZGVudGlhbEJhY2tpbmdT
dG9yZSgpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDcmVkZW50aWFs
QmFja2luZ1N0b3JlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxl
LmFtIGIvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KaW5kZXggNWJlOWViNTQ4ZWUw
MjNkMTQwYTM1ZDE2NjI0MzNkNTgxYmI3MWI4My4uYzEzNmNiYzlkZmFjODk2YmIzZGNhYWY4NWJh
ZjFhMWY1Y2U3MzU4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUu
YW0KKysrIGIvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KQEAgLTk1LDYgKzk1LDcg
QEAgbGlid2Via2l0Z3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtf
QVBJX01JTk9SX1ZFUlNJT05AX2xhX0xJQkEKIAkkKEdTVFJFQU1FUl9MSUJTKSBcCiAJJChHVEtf
TElCUykgXAogCSQoSlBFR19MSUJTKSBcCisJJChMSUJTRUNSRVRfTElCUykgXAogCSQoTElCU09V
UF9MSUJTKSBcCiAJJChMSUJYTUxfTElCUykgXAogCSQoTElCWFNMVF9MSUJTKSBcCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1h
a2VmaWxlLmFtCmluZGV4IGY5NTZkMGVkZGZjMDkzOTc5YzViYzAyNjAzY2U1MTRjMjU3ODE4NmIu
LmEyNTJjZDFkODRmMzA4YjUwOTQ3MjY5MWRjMDljYTk3YmQ5ZTlmMTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2Vm
aWxlLmFtCkBAIC0xNzUsNiArMTc1LDcgQEAgbGlid2Via2l0Mmd0a19AV0VCS0lUR1RLX0FQSV9N
QUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9MSUIKIAkkKEdU
S19MSUJTKSBcCiAJJChHVEtfVU5JWF9QUklOVElOR19MSUJTKSBcCiAJJChKUEVHX0xJQlMpIFwK
KwkkKExJQlNFQ1JFVF9MSUJTKSBcCiAJJChMSUJTT1VQX0xJQlMpIFwKIAkkKExJQlhNTF9MSUJT
KSBcCiAJJChMSUJYU0xUX0xJQlMpIFwKQEAgLTQwOSw2ICs0MTAsNyBAQCBsaWJXZWJDb3JlR3Rr
Ml9sYV9DUFBGTEFHUyA9IFwKIAkkKEdMSUJfQ0ZMQUdTKSBcCiAJJChHU1RSRUFNRVJfQ0ZMQUdT
KSBcCiAJJChHVEsyX0NGTEFHUykgXAorCSQoTElCU0VDUkVUX0NGTEFHUykgXAogCSQoTElCU09V
UF9DRkxBR1MpIFwKIAkkKExJQlhNTF9DRkxBR1MpIFwKIAkkKExJQlhTTFRfQ0ZMQUdTKSBcCmRp
ZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggN2U0NDA0MjVkYThiMGFmMWZi
NzZlMWM3NDU0NTc1Mjg3MmJiNmM3MC4uZjQ1MzQxYTg5MWU3MDNkNWFkNjkzYzUzZDQ3YmIyYjli
ZTU5ZjY3NSAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE1IEBACisyMDEyLTEwLTMwICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNv
bT4KKworICAgICAgICBbR1RLXSBNb3ZlIHNvdXAgYXV0aGVudGljYXRpb24gZnJvbSBHdGtBdXRo
ZW50aWNhdGlvbkRpYWxvZyB0byBXZWJDb3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05OTkxNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZCBhIGxpYnNlY3JldCBkZXBlbmRlbmN5IHRvIHRoZSBidWls
ZC4gVGhpcyBpcyBuZWNlc3Nhcnkgc28gdGhhdCB3ZSBjYW4gcmVtb3ZlCisgICAgICAgIGEgZGVw
ZW5kZW5jeSBvbiBTb3VwUGFzc3dvcmRNYW5hZ2VyLgorCisgICAgICAgICogY29uZmlndXJlLmFj
OiBMb29rIGZvciBsaWJzZWNyZXQgdXNpbmcgdGhlIHBrZy1jb25maWcgY29uZmlndXJhdGlvbiBt
YWNyby4KKwogMjAxMi0xMC0yNiAgUm9iIEJ1aXMgIDxyYnVpc0ByaW0uY29tPgogCiAgICAgICAg
IFtCbGFja0JlcnJ5XSBQbGF0Zm9ybSBBYnN0cmFjdGlvbiBmb3IgV2ViS2l0IFJlc291cmNlL0lt
YWdlIExvYWRpbmcKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRl
eCA4YjljZWEwMzE5YTNkNzk2Yzc2YzU2NDE2ZmY1NDY1NWY2NjgxZDM4Li4yZGFhNmRiY2UzYWM5
ZTBmZjhkYWMyNzE5MjYzNGNhYWZiMTlhMjMwIDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysr
IGIvY29uZmlndXJlLmFjCkBAIC05NTMsNiArOTUzLDEwIEBAIFBLR19DSEVDS19NT0RVTEVTKFtM
SUJTT1VQXSwKIEFDX1NVQlNUKFtMSUJTT1VQX0NGTEFHU10pCiBBQ19TVUJTVChbTElCU09VUF9M
SUJTXSkKIAorUEtHX0NIRUNLX01PRFVMRVMoW0xJQlNFQ1JFVF0sIFtsaWJzZWNyZXQtMV0pCitB
Q19TVUJTVChbTElCU0VDUkVUX0NGTEFHU10pCitBQ19TVUJTVChbTElCU0VDUkVUX0xJQlNdKQor
CiAjIGNoZWNrIGlmIEZyZWVUeXBlL0ZvbnRDb25maWcgYXJlIGF2YWlsYWJsZQogaWYgdGVzdCAi
JHdpdGhfZm9udF9iYWNrZW5kIiA9ICJmcmVldHlwZSI7IHRoZW4KICAgIGlmIHRlc3QgIiR3aXRo
X3RhcmdldCIgPSAiZGlyZWN0ZmIiOyB0aGVuCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171866</attachid>
            <date>2012-11-01 09:07:41 -0700</date>
            <delta_ts>2012-11-02 13:53:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99914-20121101090603.patch</filename>
            <type>text/plain</type>
            <size>27480</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyODQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDM4OTEyOTgxNzdmZmM3
Y2VjNWQ3NDBiYWE5ZTkyMTFhNDczOWMzNC4uYzMzZDM1NmFiZDQyNDNjNTk1ZTQ2MmM4MDI5MDc4
MDdlYWM4YmRiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEyLTEwLTI1ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBNb3Zl
IHNvdXAgYXV0aGVudGljYXRpb24gZnJvbSBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyB0byBXZWJD
b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTkx
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUg
dGhlIGFjdHVhbCBzb3VwIGF1dGhlbnRpY2F0aW9uIGNvZGUgZnJvbSB0aGUgR3RrQXV0aGVudGlj
YXRpb25EaWFsb2cgdG8gUmVzb3VyY2VIYW5kbGVTb3VwLgorICAgICAgICBUaGlzIGFsbG93cyBh
IG1vcmUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBvZiBhdXRoZW50aWNhdGlvbiwgZm9yIGV4YW1w
bGUsIG9uZSB3aGVyZSBhIFdlYktpdDIKKyAgICAgICAgY2xpZW50IGNhbiBjb21wbGV0ZWx5IGhh
bmRsZSBhdXRoZW50aWNhdGlvbi4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgZG9lcyBu
b3QgY2hhbmdlIGJlaGF2aW9yLgorCisgICAgICAgICogcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRp
Y2F0aW9uRGlhbG9nLmNwcDogUmVtb3ZlIHJlZmVyZW5jZXMgdG8gdGhlIFNvdXBQYXNzd29yZE1h
bmFnZXIsIHdoaWNoCisgICAgICAgIGlzIGdvaW5nIGF3YXkgaW4gdGhlIG5leHQgcmVsZWFzZSBv
ZiBHbm9tZS4gSW5zdGVhZCB3ZSBhbHdheXMgYXNzdW1lIHRoYXQgdGhlIGF1dGhlbnRpY2F0aW9u
IGJhY2tlbmQgaGFzCisgICAgICAgIHN1cHBvcnQgZm9yIHJlbWVtYmVyaW5nIHBhc3N3b3JkcyBh
bmQgcGFzcyB0aGF0IGluZm9ybWF0aW9uIGFsb25nIHdpdGggdGhlIGFuc3dlciB0byB0aGUgYXV0
aGVudGljYXRpb24KKyAgICAgICAgcmVxdWVzdC4KKworICAgICAgICBUaGUgcmVzdCBvZiB0aGUg
Y2hhbmdlcyB0byB0aGlzIGNsYXNzIGNhbiBiZSBzdW1tYXJpemVkIGFzOgorICAgICAgICAxLiBH
ZXR0aW5nIHRoZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSBp
bnN0ZWFkIG9mIGRpcmVjdGx5IGZyb20gdGhlIGxpYnNvdXAKKyAgICAgICAgICAgb2JqZWN0cy4K
KyAgICAgICAgMi4gVXNpbmcgdGhlIEF1dGhlbnRpY2F0aW9uQ2xpZW50IHRvIGFjY29tcGxpc2gg
dGhlIGF1dGhlbnRpY2F0aW9uIGluc3RlYWQgb2YgdGFsa2luZyB0byBsaWJzb3VwCisgICAgICAg
ICAgIGRpcmVjdGx5LgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRp
YWxvZy5oOgorICAgICAgICAoR3RrQXV0aGVudGljYXRpb25EaWFsb2cpOiBSZW1vdmUgbWVtYmVy
cyB3aGljaCBhcmUgbm8gbG9uZ2VyIHVzZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZS5oOgorICAgICAgICAoUmVzb3VyY2VIYW5kbGUpOiBSZXNvdXJjZUhhbmRs
ZVNvdXAgbm93IGltcGxlbWVudHMgdGhlIGVudGlyZSBBdXRoZW50aWNhdGlvbkNsaWVudCBpbnRl
cmZhY2UuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291
cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJDb3JlU3luY2hyb25vdXNMb2FkZXI6OmRpZFJl
Y2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6IERvbid0IGhhbmRsZSBhdXRoZW50aWNhdGlv
bgorICAgICAgICBmb3Igc3luY2hyb25vdXMgaGFuZGxlcy4KKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlSGFuZGxlOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOiBOb3cgc2V0
IHRoZSBjdXJyZW50IGNoYWxsZW5nZSBvbgorICAgICAgICB0aGUgaW50ZXJuYWwgZGF0YSBzdHJ1
Y3R1cmUuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRSZXF1ZXN0
VG9Db250aW51ZVdpdGhvdXRDcmVkZW50aWFsKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRDcmVkZW50aWFsKTogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRDYW5jZWxsYXRpb24pOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OmF1dGhlbmljYXRlQ2FsbGJhY2spOiBQYXNzIHRoZSBoYW5kbGUgYXMgdGhl
IGF1dGhlbnRpY2F0aW9uIGNsaWVudC4KKwogMjAxMi0xMC0zMCAgTWFydGluIFJvYmluc29uICA8
bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gUmVtb3ZlIGRlcGVuZGVuY3kg
b24gU291cFBhc3N3b3JkTWFuYWdlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IDdiZDhlZTY5OTgxYjAz
N2U5OTA1ZDM3YzZiOTU2YTc1NWFiNDlkNjEuLjllOWVkYzBhYzMzMGQ0ZTk2MGFjZDljY2I5Y2Ex
N2ViZTFmZmQ2ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxMi0xMC0y
NSAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dU
S10gTW92ZSBzb3VwIGF1dGhlbnRpY2F0aW9uIGZyb20gR3RrQXV0aGVudGljYXRpb25EaWFsb2cg
dG8gV2ViQ29yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTk5MTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGUgY2FsbHMgd2hpY2ggYWN0dWFsbHkgYXV0aGVudGljYXRlIGEgc291cCBtZXNzYWdlIGFy
ZSBnb25lIGZyb20gdGhlIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLiBTaW5jZSB0aGUKKyAgICAg
ICAgR3RrQXV0aGVudGljYXRpb25EaWFsb2cgZXhwb3NlZCBieSB0aGUgV2ViS2l0U291cEF1dGhl
bnRpY2F0aW9uIGNsYXNzIGluIHRoZSBHVEsrIEFQSSB3b3JrIHdpdGhvdXQgYQorICAgICAgICBS
ZXNvdXJjZUhhbmRsZSAodGhleSBhcmUgbW9yZSBnZW5lcmFsKSwgd2UgYWRkIGEgV2ViS2l0U291
cEF1dGhEaWFsb2dBdXRoZW50aWNhdGlvbkNsaWVudCBhZGRlZCB0byBhdm9pZAorICAgICAgICBi
cmVha2luZyBBUEkuIFRoaXMgaXMgdW51c2VkIGJ5IGVpdGhlciBFcGlwaGFueSBvciBpbnRlcm5h
bGx5IGluIFdlYktpdEdUSysuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRl
ckNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNw
YXRjaERpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6IFRoZSBhdXRoZW50aWNhdGlv
biBkaWFsb2cKKyAgICAgICAgbm93IGp1c3QgdGFrZXMgdGhlIEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlIGluc3RlYWQgb2YgdGhlIGxpYnNvdXAgb2JqZWN0cy4KKyAgICAgICAgKiB3ZWJraXQvd2Vi
a2l0c291cGF1dGhkaWFsb2cuY3BwOgorICAgICAgICAoV2ViS2l0U291cEF1dGhEaWFsb2dBdXRo
ZW50aWNhdGlvbkNsaWVudCk6IEFkZGVkIHRoaXMgaGVscGVyLgorICAgICAgICAoc2Vzc2lvbkF1
dGhlbnRpY2F0ZSk6IFVzZSB0aGUgbmV3IFdlYktpdFNvdXBBdXRoRGlhbG9nQXV0aGVudGljYXRp
b25DbGllbnQuCisKIDIwMTItMTAtMzAgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFtHVEtdIFJlbW92ZSBkZXBlbmRlbmN5IG9uIFNvdXBQYXNzd29y
ZE1hbmFnZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwppbmRleCA5OGJiMDZkZjA0NmViODg4OTg0OGJmMWRjN2EwZjNkNjc3
OWU5NWEzLi44YzBiOTU0YzIyOGFiMzI3NDA4ODg3NzQyNmY2Yzc5MTMxZmU5MjZhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMTAtMjUgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2Jp
bnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIE1vdmUgc291cCBhdXRoZW50aWNhdGlv
biBmcm9tIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nIHRvIFdlYkNvcmUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5OTE0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5zdGVhZCBvZiBwYXNzaW5nIHRoZSBs
aWJzb3VwIG9iamVjdHMgdG8gdGhlIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLCBwYXNzIHRoZQor
ICAgICAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSBpdHNlbGYuCisKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJGcmFtZUxvYWRlckNsaWVudEd0ay5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2VpdmVB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisKIDIwMTItMTAtMzAgIE1hcnRpbiBSb2JpbnNvbiAg
PG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIFJlbW92ZSBkZXBlbmRlbmN5
IG9uIFNvdXBQYXNzd29yZE1hbmFnZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuY3BwCmluZGV4IDhmZGIwY2Y3MjdlYTFh
NjBmZmRmN2FmYTk2OTdhZTMzMzI0MWMzODAuLjY1MzVkODQ5ODBiNWY1NzVhNGYwMDg3ZDMwNDkw
OWVhMTQ4N2Y4NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtB
dXRoZW50aWNhdGlvbkRpYWxvZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcApAQCAtMjAsMTIgKzIwLDEyIEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR3RrQXV0aGVudGljYXRpb25EaWFsb2cuaCIKIAotI2lu
Y2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgiCiAjaW5jbHVkZSAiQ3JlZGVudGlhbEJh
Y2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKICNpbmNsdWRlIDxnbGli
L2dpMThuLWxpYi5oPgogI2luY2x1ZGUgPGd0ay9ndGsuaD4KICNpbmNsdWRlIDxsaWJzb3VwL3Nv
dXAuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtNjAsMTEgKzYwLDkgQEAgR3RrQXV0aGVudGljYXRpb25EaWFsb2c6On5HdGtB
dXRoZW50aWNhdGlvbkRpYWxvZygpCiB7CiB9CiAKLUd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpH
dGtBdXRoZW50aWNhdGlvbkRpYWxvZyhHdGtXaW5kb3cqIHBhcmVudFdpbmRvdywgU291cFNlc3Np
b24qIHNlc3Npb24sIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBTb3VwQXV0aCogYXV0aCkKLSAgICA6
IG1fZGlhbG9nKGd0a19kaWFsb2dfbmV3KCkpCi0gICAgLCBtX3Nlc3Npb24oc2Vzc2lvbikKLSAg
ICAsIG1fbWVzc2FnZShtZXNzYWdlKQotICAgICwgbV9hdXRoKGF1dGgpCitHdGtBdXRoZW50aWNh
dGlvbkRpYWxvZzo6R3RrQXV0aGVudGljYXRpb25EaWFsb2coR3RrV2luZG93KiBwYXJlbnRXaW5k
b3csIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UpCisgICAgOiBtX2No
YWxsZW5nZShjaGFsbGVuZ2UpCisgICAgLCBtX2RpYWxvZyhndGtfZGlhbG9nX25ldygpKQogICAg
ICwgbV9sb2dpbkVudHJ5KDApCiAgICAgLCBtX3Bhc3N3b3JkRW50cnkoMCkKICAgICAsIG1fcmVt
ZW1iZXJDaGVja0J1dHRvbigwKQpAQCAtMTEwLDggKzEwOCw4IEBAIEd0a0F1dGhlbnRpY2F0aW9u
RGlhbG9nOjpHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyhHdGtXaW5kb3cqIHBhcmVudFdpbmRvdywg
U291cFNlCiAjZW5kaWYKICAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChoQm94KSwgbWFp
blZCb3gsIFRSVUUsIFRSVUUsIDApOwogCi0gICAgU291cFVSSSogdXJpID0gc291cF9tZXNzYWdl
X2dldF91cmkobV9tZXNzYWdlLmdldCgpKTsKLSAgICBHT3duUHRyPGNoYXI+ZGVzY3JpcHRpb24o
Z19zdHJkdXBfcHJpbnRmKF8oIkEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGFyZSBiZWluZyByZXF1
ZXN0ZWQgYnkgdGhlIHNpdGUgJXMiKSwgdXJpLT5ob3N0KSk7CisgICAgR093blB0cjxjaGFyPiBk
ZXNjcmlwdGlvbihnX3N0cmR1cF9wcmludGYoXygiQSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgYXJl
IGJlaW5nIHJlcXVlc3RlZCBieSB0aGUgc2l0ZSAlcyIpLAorICAgICAgICBtX2NoYWxsZW5nZS5w
cm90ZWN0aW9uU3BhY2UoKS5ob3N0KCkudXRmOCgpLmRhdGEoKSkpOwogICAgIEd0a1dpZGdldCog
ZGVzY3JpcHRpb25MYWJlbCA9IGd0a19sYWJlbF9uZXcoZGVzY3JpcHRpb24uZ2V0KCkpOwogICAg
IGd0a19taXNjX3NldF9hbGlnbm1lbnQoR1RLX01JU0MoZGVzY3JpcHRpb25MYWJlbCksIDAuMCwg
MC41KTsKICAgICBndGtfbGFiZWxfc2V0X2xpbmVfd3JhcChHVEtfTEFCRUwoZGVzY3JpcHRpb25M
YWJlbCksIFRSVUUpOwpAQCAtMTI5LDkgKzEyNyw5IEBAIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9n
OjpHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyhHdGtXaW5kb3cqIHBhcmVudFdpbmRvdywgU291cFNl
CiAgICAgZ3RrX2FsaWdubWVudF9zZXRfcGFkZGluZyhHVEtfQUxJR05NRU5UKGVudHJ5Q29udGFp
bmVyKSwgMCwgMCwgMCwgMCk7CiAgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godkJveCks
IGVudHJ5Q29udGFpbmVyLCBGQUxTRSwgRkFMU0UsIDApOwogCi0gICAgY29uc3QgY2hhciogcmVh
bG0gPSBzb3VwX2F1dGhfZ2V0X3JlYWxtKG1fYXV0aC5nZXQoKSk7CiAgICAgLy8gQ2hlY2tpbmcg
dGhhdCByZWFsbSBpcyBub3QgYW4gZW1wdHkgc3RyaW5nLgotICAgIGJvb2wgaGFzUmVhbG0gPSAo
cmVhbG0gJiYgcmVhbG1bMF0gIT0gJ1wwJyk7CisgICAgU3RyaW5nIHJlYWxtID0gbV9jaGFsbGVu
Z2UucHJvdGVjdGlvblNwYWNlKCkucmVhbG0oKTsKKyAgICBib29sIGhhc1JlYWxtID0gIXJlYWxt
LmlzRW1wdHkoKTsKIAogI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCiAgICAgR3RrV2lkZ2V0KiB0
YWJsZSA9IGd0a190YWJsZV9uZXcoaGFzUmVhbG0gPyAzIDogMiwgMiwgRkFMU0UpOwpAQCAtMTU2
LDcgKzE1NCw3IEBAIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpHdGtBdXRoZW50aWNhdGlvbkRp
YWxvZyhHdGtXaW5kb3cqIHBhcmVudFdpbmRvdywgU291cFNlCiAgICAgICAgIGd0a193aWRnZXRf
c2V0X2hleHBhbmQoc2VydmVyTWVzc2FnZURlc2NyaXB0aW9uTGFiZWwsIFRSVUUpOwogICAgICAg
ICBndGtfd2lkZ2V0X3NldF92ZXhwYW5kKHNlcnZlck1lc3NhZ2VEZXNjcmlwdGlvbkxhYmVsLCBU
UlVFKTsKICNlbmRpZgotICAgICAgICBHdGtXaWRnZXQqIHNlcnZlck1lc3NhZ2VMYWJlbCA9IGd0
a19sYWJlbF9uZXcocmVhbG0pOworICAgICAgICBHdGtXaWRnZXQqIHNlcnZlck1lc3NhZ2VMYWJl
bCA9IGd0a19sYWJlbF9uZXcocmVhbG0udXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIGd0a19taXNj
X3NldF9hbGlnbm1lbnQoR1RLX01JU0Moc2VydmVyTWVzc2FnZUxhYmVsKSwgMC4wLCAwLjUpOwog
ICAgICAgICBndGtfbGFiZWxfc2V0X2xpbmVfd3JhcChHVEtfTEFCRUwoc2VydmVyTWVzc2FnZUxh
YmVsKSwgVFJVRSk7CiAjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKQEAgLTE5MiwxMiArMTkwLDcg
QEAgR3RrQXV0aGVudGljYXRpb25EaWFsb2c6Okd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKEd0a1dp
bmRvdyogcGFyZW50V2luZG93LCBTb3VwU2UKIAogdm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxv
Zzo6c2hvdygpCiB7Ci0gICAgc291cF9zZXNzaW9uX3BhdXNlX21lc3NhZ2UobV9zZXNzaW9uLCBt
X21lc3NhZ2UuZ2V0KCkpOwotCi0gICAgLy8gVGhpcyBpcyBqdXN0IGEgdGVtcG9yYXJ5IGtsdWRn
ZSB1bnRpbCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyB3b3JrcyBkaXJlY3RseSB3aXRoIEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlcy4KLSAgICAvLyBTZWUgaHR0cDovL3drYnVnLmNvbS85OTkxNAot
ICAgIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIGNoYWxsZW5nZSgwIC8qIHNlc3Npb24gKi8sIG1f
bWVzc2FnZS5nZXQoKSwgbV9hdXRoLmdldCgpLCBmYWxzZSwgMCk7Ci0gICAgQ3JlZGVudGlhbCBz
YXZlZENyZWRlbnRpYWwgPSBjcmVkZW50aWFsQmFja2luZ1N0b3JlKCkuY3JlZGVudGlhbEZvckNo
YWxsZW5nZShjaGFsbGVuZ2UpOworICAgIENyZWRlbnRpYWwgc2F2ZWRDcmVkZW50aWFsID0gY3Jl
ZGVudGlhbEJhY2tpbmdTdG9yZSgpLmNyZWRlbnRpYWxGb3JDaGFsbGVuZ2UobV9jaGFsbGVuZ2Up
OwogICAgIGlmICghc2F2ZWRDcmVkZW50aWFsLmlzRW1wdHkoKSkgewogICAgICAgICBndGtfZW50
cnlfc2V0X3RleHQoR1RLX0VOVFJZKG1fbG9naW5FbnRyeSksIHNhdmVkQ3JlZGVudGlhbC51c2Vy
KCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIGd0a19lbnRyeV9zZXRfdGV4dChHVEtfRU5UUlko
bV9wYXNzd29yZEVudHJ5KSwgc2F2ZWRDcmVkZW50aWFsLnBhc3N3b3JkKCkudXRmOCgpLmRhdGEo
KSk7CkBAIC0yMTAsMjAgKzIwMywxNSBAQCB2b2lkIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpz
aG93KCkKIAogdm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6ZGVzdHJveSgpCiB7Ci0gICAg
Ym9vbCBzaG91bGREZWxldGUgPSB0cnVlOwotCi0gICAgc291cF9zZXNzaW9uX3VucGF1c2VfbWVz
c2FnZShtX3Nlc3Npb24sIG1fbWVzc2FnZS5nZXQoKSk7CiAgICAgZ3RrX3dpZGdldF9kZXN0cm95
KG1fZGlhbG9nKTsKIAotICAgIHNob3VsZERlbGV0ZSA9ICFtX2lzU2F2aW5nUGFzc3dvcmQ7Ci0K
ICAgICAvLyBEbyBub3QgZGVsZXRlIHRoZSBvYmplY3QgaWYgaXQncyBzdGlsbCBzYXZpbmcgdGhl
IHBhc3N3b3JkLAogICAgIC8vIHRoZSBzYXZlIHBhc3N3b3JkIGNhbGxiYWNrIHdpbGwgZGVsZXRl
IGl0LgotICAgIGlmIChzaG91bGREZWxldGUpCisgICAgaWYgKCFtX2lzU2F2aW5nUGFzc3dvcmQp
CiAgICAgICAgIGRlbGV0ZSB0aGlzOwogfQogCi12b2lkIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9n
OjpzYXZlUGFzc3dvcmRDYWxsYmFjayhTb3VwTWVzc2FnZSogbWVzc2FnZSwgR3RrQXV0aGVudGlj
YXRpb25EaWFsb2cqIGRpYWxvZykKK3ZvaWQgR3RrQXV0aGVudGljYXRpb25EaWFsb2c6OnNhdmVQ
YXNzd29yZENhbGxiYWNrKFNvdXBNZXNzYWdlKiwgR3RrQXV0aGVudGljYXRpb25EaWFsb2cqIGRp
YWxvZykKIHsKICAgICBkaWFsb2ctPnNhdmVQYXNzd29yZCgpOwogfQpAQCAtMjM0LDIxICsyMjIs
MTkgQEAgdm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6c2F2ZVBhc3N3b3JkKCkKICAgICBB
U1NFUlQoIW1fcGFzc3dvcmQuaXNOdWxsKCkpOwogCiAgICAgLy8gQW55dGhpbmcgYnV0IDQwMSBh
bmQgNXh4IG1lYW5zIHRoZSBwYXNzd29yZCB3YXMgYWNjZXB0ZWQuCi0gICAgaWYgKG1fbWVzc2Fn
ZS5nZXQoKS0+c3RhdHVzX2NvZGUgIT0gNDAxICYmIG1fbWVzc2FnZS5nZXQoKS0+c3RhdHVzX2Nv
ZGUgPCA1MDApIHsKLSAgICAgICAgLy8gVGhpcyBpcyBqdXN0IGEgdGVtcG9yYXJ5IGtsdWRnZSB1
bnRpbCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyB3b3JrcyBkaXJlY3RseSB3aXRoIEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlcy4KLSAgICAgICAgLy8gU2VlIGh0dHA6Ly93a2J1Zy5jb20vOTk5MTQK
LSAgICAgICAgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgY2hhbGxlbmdlKDAgLyogc2Vzc2lvbiAq
LywgbV9tZXNzYWdlLmdldCgpLCBtX2F1dGguZ2V0KCksIGZhbHNlLCAwKTsKKyAgICBTb3VwTWVz
c2FnZSogbWVzc2FnZSA9IG1fY2hhbGxlbmdlLnNvdXBNZXNzYWdlKCk7CisgICAgaWYgKG1lc3Nh
Z2UtPnN0YXR1c19jb2RlICE9IDQwMSAmJiBtZXNzYWdlLT5zdGF0dXNfY29kZSA8IDUwMCkgewog
ICAgICAgICBDcmVkZW50aWFsIGNyZWRlbnRpYWxUb1NhdmUgPSBDcmVkZW50aWFsKAogICAgICAg
ICAgICAgU3RyaW5nOjpmcm9tVVRGOChtX3VzZXJuYW1lLmRhdGEoKSksCiAgICAgICAgICAgICBT
dHJpbmc6OmZyb21VVEY4KG1fcGFzc3dvcmQuZGF0YSgpKSwKICAgICAgICAgICAgIENyZWRlbnRp
YWxQZXJzaXN0ZW5jZVBlcm1hbmVudCk7Ci0gICAgICAgIGNyZWRlbnRpYWxCYWNraW5nU3RvcmUo
KS5zdG9yZUNyZWRlbnRpYWxzRm9yQ2hhbGxlbmdlKGNoYWxsZW5nZSwgY3JlZGVudGlhbFRvU2F2
ZSk7CisgICAgICAgIGNyZWRlbnRpYWxCYWNraW5nU3RvcmUoKS5zdG9yZUNyZWRlbnRpYWxzRm9y
Q2hhbGxlbmdlKG1fY2hhbGxlbmdlLCBjcmVkZW50aWFsVG9TYXZlKTsKICAgICB9CiAKICAgICAv
LyBEaXNjb25uZWN0IHRoZSBjYWxsYmFjay4gSWYgdGhlIGF1dGhlbnRpY2F0aW9uIHN1Y2NlZWRl
ZCB3ZSBhcmUgZG9uZSwKICAgICAvLyBhbmQgaWYgaXQgZmFpbGVkIHdlJ2xsIGNyZWF0ZSBhIG5l
dyBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyBhbmQgd2UnbGwKICAgICAvLyBjb25uZWN0IHRvICdn
b3QtaGVhZGVycycgYWdhaW4gaW4gR3RrQXV0aGVudGljYXRpb25EaWFsb2c6OmF1dGhlbnRpY2F0
ZSgpCi0gICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KG1fbWVzc2FnZS5nZXQoKSwgbV9z
YXZlUGFzc3dvcmRIYW5kbGVyKTsKKyAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QobWVz
c2FnZSwgbV9zYXZlUGFzc3dvcmRIYW5kbGVyKTsKIAogICAgIC8vIERpYWxvZyBoYXMgYmVlbiBh
bHJlYWR5IGRlc3Ryb3llZCwgYWZ0ZXIgc2F2aW5nIHRoZSBwYXNzd29yZCBpdCBzaG91bGQgYmUg
ZGVsZXRlZC4KICAgICBkZWxldGUgdGhpczsKQEAgLTI1OCwxNCArMjQ0LDE4IEBAIHZvaWQgR3Rr
QXV0aGVudGljYXRpb25EaWFsb2c6OmF1dGhlbnRpY2F0ZSgpCiB7CiAgICAgY29uc3QgY2hhciAq
dXNlcm5hbWUgPSBndGtfZW50cnlfZ2V0X3RleHQoR1RLX0VOVFJZKG1fbG9naW5FbnRyeSkpOwog
ICAgIGNvbnN0IGNoYXIgKnBhc3N3b3JkID0gZ3RrX2VudHJ5X2dldF90ZXh0KEdUS19FTlRSWSht
X3Bhc3N3b3JkRW50cnkpKTsKLSAgICBzb3VwX2F1dGhfYXV0aGVudGljYXRlKG1fYXV0aC5nZXQo
KSwgdXNlcm5hbWUsIHBhc3N3b3JkKTsKIAorICAgIGJvb2wgcmVtZW1iZXJDcmVkZW50aWFscyA9
IGd0a190b2dnbGVfYnV0dG9uX2dldF9hY3RpdmUoR1RLX1RPR0dMRV9CVVRUT04obV9yZW1lbWJl
ckNoZWNrQnV0dG9uKSk7CiAgICAgaWYgKG1fcmVtZW1iZXJDaGVja0J1dHRvbiAmJiBndGtfdG9n
Z2xlX2J1dHRvbl9nZXRfYWN0aXZlKEdUS19UT0dHTEVfQlVUVE9OKG1fcmVtZW1iZXJDaGVja0J1
dHRvbikpKSB7CiAgICAgICAgIG1fdXNlcm5hbWUgPSB1c2VybmFtZTsKICAgICAgICAgbV9wYXNz
d29yZCA9IHBhc3N3b3JkOwogICAgICAgICBtX2lzU2F2aW5nUGFzc3dvcmQgPSB0cnVlOwotICAg
ICAgICBtX3NhdmVQYXNzd29yZEhhbmRsZXIgPSBnX3NpZ25hbF9jb25uZWN0KG1fbWVzc2FnZS5n
ZXQoKSwgImdvdC1oZWFkZXJzIiwgR19DQUxMQkFDSyhzYXZlUGFzc3dvcmRDYWxsYmFjayksIHRo
aXMpOworICAgICAgICBtX3NhdmVQYXNzd29yZEhhbmRsZXIgPSBnX3NpZ25hbF9jb25uZWN0KG1f
Y2hhbGxlbmdlLnNvdXBNZXNzYWdlKCksICJnb3QtaGVhZGVycyIsIEdfQ0FMTEJBQ0soc2F2ZVBh
c3N3b3JkQ2FsbGJhY2spLCB0aGlzKTsKICAgICB9CisKKyAgICBDcmVkZW50aWFsUGVyc2lzdGVu
Y2UgcGVyc2lzdGVuY2UgPSByZW1lbWJlckNyZWRlbnRpYWxzID8gQ3JlZGVudGlhbFBlcnNpc3Rl
bmNlUGVybWFuZW50IDogQ3JlZGVudGlhbFBlcnNpc3RlbmNlRm9yU2Vzc2lvbjsKKyAgICBtX2No
YWxsZW5nZS5hdXRoZW50aWNhdGlvbkNsaWVudCgpLT5yZWNlaXZlZENyZWRlbnRpYWwobV9jaGFs
bGVuZ2UsCisgICAgICAgIENyZWRlbnRpYWwoU3RyaW5nOjpmcm9tVVRGOCh1c2VybmFtZSksIFN0
cmluZzo6ZnJvbVVURjgocGFzc3dvcmQpLCBwZXJzaXN0ZW5jZSkpOwogfQogCiB2b2lkIEd0a0F1
dGhlbnRpY2F0aW9uRGlhbG9nOjphdXRoZW50aWNhdGlvbkRpYWxvZ1Jlc3BvbnNlQ2FsbGJhY2so
R3RrV2lkZ2V0KiwgZ2ludCByZXNwb25zZUlELCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyogZGlh
bG9nKQpAQCAtMjczLDYgKzI2Myw3IEBAIHZvaWQgR3RrQXV0aGVudGljYXRpb25EaWFsb2c6OmF1
dGhlbnRpY2F0aW9uRGlhbG9nUmVzcG9uc2VDYWxsYmFjayhHdGtXaWRnZXQqLCBnCiAgICAgaWYg
KHJlc3BvbnNlSUQgPT0gR1RLX1JFU1BPTlNFX09LKQogICAgICAgICBkaWFsb2ctPmF1dGhlbnRp
Y2F0ZSgpOwogCisgICAgZGlhbG9nLT5tX2NoYWxsZW5nZS5hdXRoZW50aWNhdGlvbkNsaWVudCgp
LT5yZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwoZGlhbG9nLT5tX2No
YWxsZW5nZSk7CiAgICAgZGlhbG9nLT5kZXN0cm95KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmgKaW5kZXggOTEy
Zjc1ZDc2OTE2ODc1ZWJlZTU5NDljN2QxOGVkYzhkMGU5N2Q1OS4uMDIxZTBlMmMxNjEzZDFjYTJh
OWU4YzhkNzQ0NGIzZGIwOGJkNTBjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmgKQEAgLTIwLDcgKzIwLDcgQEAKICNp
Zm5kZWYgR3RrQXV0aGVudGljYXRpb25EaWFsb2dfaAogI2RlZmluZSBHdGtBdXRoZW50aWNhdGlv
bkRpYWxvZ19oCiAKLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSAi
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCIKICNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCiAjaW5j
bHVkZSA8bGlic291cC9zb3VwLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KQEAg
LTM0LDcgKzM0LDcgQEAgY2xhc3MgR3RrQXV0aGVudGljYXRpb25EaWFsb2cgewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogCiBwdWJsaWM6Ci0gICAgR3RrQXV0aGVudGljYXRpb25EaWFs
b2coR3RrV2luZG93KiwgU291cFNlc3Npb24qLCBTb3VwTWVzc2FnZSosIFNvdXBBdXRoKik7Cisg
ICAgR3RrQXV0aGVudGljYXRpb25EaWFsb2coR3RrV2luZG93KiwgY29uc3QgQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UmKTsKICAgICB+R3RrQXV0aGVudGljYXRpb25EaWFsb2coKTsKIAogICAgIHZv
aWQgc2hvdygpOwpAQCAtNDYsMTUgKzQ2LDExIEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQg
c2F2ZVBhc3N3b3JkQ2FsbGJhY2soU291cE1lc3NhZ2UqLCBHdGtBdXRoZW50aWNhdGlvbkRpYWxv
ZyopOwogICAgIHN0YXRpYyB2b2lkIGF1dGhlbnRpY2F0aW9uRGlhbG9nUmVzcG9uc2VDYWxsYmFj
ayhHdGtXaWRnZXQqLCBnaW50IHJlc3BvbnNlSUQsIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKik7
CiAKKyAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSBtX2NoYWxsZW5nZTsKICAgICBHdGtXaWRn
ZXQqIG1fZGlhbG9nOwotICAgIFNvdXBTZXNzaW9uKiBtX3Nlc3Npb247Ci0gICAgR1JlZlB0cjxT
b3VwTWVzc2FnZT4gbV9tZXNzYWdlOwotICAgIEdSZWZQdHI8U291cEF1dGg+IG1fYXV0aDsKLQog
ICAgIEd0a1dpZGdldCogbV9sb2dpbkVudHJ5OwogICAgIEd0a1dpZGdldCogbV9wYXNzd29yZEVu
dHJ5OwogICAgIEd0a1dpZGdldCogbV9yZW1lbWJlckNoZWNrQnV0dG9uOwotCiAgICAgYm9vbCBt
X2lzU2F2aW5nUGFzc3dvcmQ7CiAgICAgdW5zaWduZWQgbG9uZyBtX3NhdmVQYXNzd29yZEhhbmRs
ZXI7CiAgICAgQ1N0cmluZyBtX3VzZXJuYW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCmluZGV4IGM4MTcwMDRiZGVhMzAxYmEwZjJkMmYx
MmIzMTFlNmI3OTVkZWNkZDIuLmNhYTY2YmNlOGIwMDUwNzUxOGJjOTQ3YWRlYTg3MjUyODdjNzcy
NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VI
YW5kbGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFu
ZGxlLmgKQEAgLTk3LDcgKzk3LDcgQEAgZW51bSBTdG9yZWRDcmVkZW50aWFscyB7CiB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4gY2xhc3MgVGltZXI7CiAKIGNsYXNzIFJlc291cmNlSGFuZGxlIDogcHVi
bGljIFJlZkNvdW50ZWQ8UmVzb3VyY2VIYW5kbGU+Ci0jaWYgUExBVEZPUk0oTUFDKSB8fCBVU0Uo
Q0ZORVRXT1JLKSB8fCBVU0UoQ1VSTCkKKyNpZiBQTEFURk9STShNQUMpIHx8IFVTRShDRk5FVFdP
UkspIHx8IFVTRShDVVJMKSB8fCBQTEFURk9STShHVEspCiAgICAgLCBwdWJsaWMgQXV0aGVudGlj
YXRpb25DbGllbnQKICNlbmRpZgogICAgIHsKQEAgLTExNCw3ICsxMTQsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCB3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSk7CiAgICAgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFs
U3RvcmFnZSgpOwogI2VuZGlmCi0jaWYgUExBVEZPUk0oTUFDKSB8fCBVU0UoQ0ZORVRXT1JLKSB8
fCBVU0UoQ1VSTCkKKyNpZiBQTEFURk9STShNQUMpIHx8IFVTRShDRk5FVFdPUkspIHx8IFVTRShD
VVJMKSB8fCBQTEFURk9STShHVEspCiAgICAgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKICAgICB2aXJ0dWFsIHZv
aWQgcmVjZWl2ZWRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwgY29u
c3QgQ3JlZGVudGlhbCYpOwogICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZFJlcXVlc3RUb0NvbnRp
bnVlV2l0aG91dENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKQEAg
LTE3NCwxMSArMTc0LDYgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldEhvc3RBbGxvd3NB
bnlIVFRQU0NlcnRpZmljYXRlKGNvbnN0IFN0cmluZyYpOwogICAgIHN0YXRpYyB2b2lkIHNldENs
aWVudENlcnRpZmljYXRlKGNvbnN0IFN0cmluZyYgaG9zdCwgR1Rsc0NlcnRpZmljYXRlKik7CiAg
ICAgc3RhdGljIHZvaWQgc2V0SWdub3JlU1NMRXJyb3JzKGJvb2wpOwotCi0jaWYgUExBVEZPUk0o
R1RLKQotICAgIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNvbnN0IEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7Ci0gICAgdmlydHVhbCB2b2lkIHJlY2VpdmVkUmVxdWVz
dFRvQ29udGludWVXaXRob3V0Q3JlZGVudGlhbChjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSYpOwotI2VuZGlmCiAjZW5kaWYKIAogICAgIC8vIFVzZWQgdG8gd29yayBhcm91bmQgdGhlIGZh
Y3QgdGhhdCB5b3UgZG9uJ3QgZ2V0IGFueSBtb3JlIE5TVVJMQ29ubmVjdGlvbiBjYWxsYmFja3Mg
dW50aWwgeW91IHJldHVybiBmcm9tIHRoZSBvbmUgeW91J3JlIGluLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UuaAppbmRleCA4NDcxM2M4ZDkzMzM1ZGU5MjAxNjAzNDEwZjk0ODU3MzIxZWZiNmYy
Li4xNjc1Yjk2MjEyZTM3ODAzMzY1NjUyNmE2MThlN2E0OWU2MzFjZTlkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UuaApAQCAtNDUsMTMgKzQ1LDE1IEBAIHB1YmxpYzoKICAgICB9CiAKICAg
ICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShTb3VwU2Vzc2lvbiosIFNvdXBNZXNzYWdlKiwgU291
cEF1dGgqLCBib29sIHJldHJ5aW5nLCBBdXRoZW50aWNhdGlvbkNsaWVudCopOwotCiAgICAgQXV0
aGVudGljYXRpb25DbGllbnQqIGF1dGhlbnRpY2F0aW9uQ2xpZW50KCkgY29uc3QgeyByZXR1cm4g
bV9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXQoKTsgfQogICAgIFNvdXBTZXNzaW9uKiBzb3VwU2Vz
c2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fc291cFNlc3Npb24uZ2V0KCk7IH0KICAgICBTb3VwTWVz
c2FnZSogc291cE1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXBNZXNzYWdlLmdldCgpOyB9
CiAgICAgU291cEF1dGgqIHNvdXBBdXRoKCkgY29uc3QgeyByZXR1cm4gbV9zb3VwQXV0aC5nZXQo
KTsgfQogCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZUJhc2U7CisgICAgc3RhdGljIGJvb2wgcGxhdGZvcm1Db21wYXJlKGNvbnN0IEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlJiwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKKwogICAgIEdS
ZWZQdHI8U291cFNlc3Npb24+IG1fc291cFNlc3Npb247CiAgICAgR1JlZlB0cjxTb3VwTWVzc2Fn
ZT4gbV9zb3VwTWVzc2FnZTsKICAgICBHUmVmUHRyPFNvdXBBdXRoPiBtX3NvdXBBdXRoOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0F1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlU291cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VTb3VwLmNwcAppbmRleCBjMmVlNzFlYjZlODBjZDdh
YTM3ZmJiN2RhZmU0ODk3ZDQ1MjBhYThiLi43YjQ1YjE3OWMyNTI3MWZhMmQzOWU2MjBkYzAzNWRm
ZDQ4MDU4MzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VTb3VwLmNwcApAQCAt
NzYsNCArNzYsMTEgQEAgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6OkF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKFNvdXBTZXNzaW9uKiBzb3VwU2Vzc2lvbiwgU291cE0KIHsKIH0KIAorYm9vbCBBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZTo6cGxhdGZvcm1Db21wYXJlKGNvbnN0IEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlJiBhLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgYikKK3sKKyAgICBy
ZXR1cm4gYS5zb3VwU2Vzc2lvbigpID09IGIuc291cFNlc3Npb24oKQorICAgICAgICAmJiBhLnNv
dXBNZXNzYWdlKCkgPT0gYi5zb3VwTWVzc2FnZSgpCisgICAgICAgICYmIGEuc291cEF1dGgoKSA9
PSBiLnNvdXBBdXRoKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxl
U291cC5jcHAKaW5kZXggYzU4MmYwMGI5NDk3MjZmMjgyM2U1MGNiZmMwNWVmNjc3YzA5MGM4NS4u
MjgzMDUwODBjNGZmOGQwZWI1NDRlMmE3MzczNjliM2Q2OTc2MWNkNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxl
U291cC5jcHAKQEAgLTE0Nyw2ICsxNDcsMTIgQEAgcHVibGljOgogICAgICAgICBkaWRGaW5pc2hM
b2FkaW5nKGhhbmRsZSwgMCk7CiAgICAgfQogCisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UpCisgICAgeworICAgICAgICAvLyBXZSBkbyBub3QgaGFu
ZGxlIGF1dGhlbnRpY2F0aW9uIGZvciBzeW5jaHJvbm91cyBYTUxIdHRwUmVxdWVzdHMuCisgICAg
ICAgIGNoYWxsZW5nZS5hdXRoZW50aWNhdGlvbkNsaWVudCgpLT5yZWNlaXZlZFJlcXVlc3RUb0Nv
bnRpbnVlV2l0aG91dENyZWRlbnRpYWwoY2hhbGxlbmdlKTsKKyAgICB9CisKICAgICB2b2lkIHJ1
bigpCiAgICAgewogICAgICAgICBpZiAoIW1fZmluaXNoZWQpCkBAIC04NTMsMTIgKzg1OSw1MSBA
QCB2b2lkIFJlc291cmNlSGFuZGxlOjpzZXRJZ25vcmVTU0xFcnJvcnMoYm9vbCBpZ25vcmVTU0xF
cnJvcnMpCiAjaWYgUExBVEZPUk0oR1RLKQogdm9pZCBSZXNvdXJjZUhhbmRsZTo6ZGlkUmVjZWl2
ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBj
aGFsbGVuZ2UpCiB7Ci0gICAgaWYgKGNsaWVudCgpKQorICAgIEFTU0VSVChkLT5tX2N1cnJlbnRX
ZWJDaGFsbGVuZ2UuaXNOdWxsKCkpOworICAgIGQtPm1fY3VycmVudFdlYkNoYWxsZW5nZSA9IGNo
YWxsZW5nZTsKKworICAgIGlmIChjbGllbnQoKSkgeworICAgICAgICBzb3VwX3Nlc3Npb25fcGF1
c2VfbWVzc2FnZShjaGFsbGVuZ2Uuc291cFNlc3Npb24oKSwgY2hhbGxlbmdlLnNvdXBNZXNzYWdl
KCkpOwogICAgICAgICBjbGllbnQoKS0+ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KHRoaXMsIGNoYWxsZW5nZSk7CisgICAgfQogfQogCi12b2lkIFJlc291cmNlSGFuZGxlOjpyZWNl
aXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UmKQordm9pZCBSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRSZXF1ZXN0VG9Db250
aW51ZVdpdGhvdXRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFs
bGVuZ2UpCiB7CisgICAgQVNTRVJUKCFjaGFsbGVuZ2UuaXNOdWxsKCkpOworICAgIGlmIChjaGFs
bGVuZ2UgIT0gZC0+bV9jdXJyZW50V2ViQ2hhbGxlbmdlKQorICAgICAgICByZXR1cm47CisgICAg
c291cF9zZXNzaW9uX3VucGF1c2VfbWVzc2FnZShjaGFsbGVuZ2Uuc291cFNlc3Npb24oKSwgY2hh
bGxlbmdlLnNvdXBNZXNzYWdlKCkpOworCisgICAgY2xlYXJBdXRoZW50aWNhdGlvbigpOworfQor
Cit2b2lkIFJlc291cmNlSGFuZGxlOjpyZWNlaXZlZENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSwgY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbCkK
K3sKKyAgICBBU1NFUlQoIWNoYWxsZW5nZS5pc051bGwoKSk7CisgICAgaWYgKGNoYWxsZW5nZSAh
PSBkLT5tX2N1cnJlbnRXZWJDaGFsbGVuZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VS
VChjaGFsbGVuZ2Uuc291cFNlc3Npb24oKSk7CisgICAgQVNTRVJUKGNoYWxsZW5nZS5zb3VwTWVz
c2FnZSgpKTsKKyAgICBzb3VwX2F1dGhfYXV0aGVudGljYXRlKGNoYWxsZW5nZS5zb3VwQXV0aCgp
LCBjcmVkZW50aWFsLnVzZXIoKS51dGY4KCkuZGF0YSgpLCBjcmVkZW50aWFsLnBhc3N3b3JkKCku
dXRmOCgpLmRhdGEoKSk7CisgICAgc291cF9zZXNzaW9uX3VucGF1c2VfbWVzc2FnZShjaGFsbGVu
Z2Uuc291cFNlc3Npb24oKSwgY2hhbGxlbmdlLnNvdXBNZXNzYWdlKCkpOworCisgICAgY2xlYXJB
dXRoZW50aWNhdGlvbigpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlOjpyZWNlaXZlZENhbmNl
bGxhdGlvbihjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlKQoreworICAg
IEFTU0VSVCghY2hhbGxlbmdlLmlzTnVsbCgpKTsKKyAgICBpZiAoY2hhbGxlbmdlICE9IGQtPm1f
Y3VycmVudFdlYkNoYWxsZW5nZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc291cF9zZXNzaW9u
X3VucGF1c2VfbWVzc2FnZShjaGFsbGVuZ2Uuc291cFNlc3Npb24oKSwgY2hhbGxlbmdlLnNvdXBN
ZXNzYWdlKCkpOworCisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+cmVjZWl2
ZWRDYW5jZWxsYXRpb24odGhpcywgY2hhbGxlbmdlKTsKKworICAgIGNsZWFyQXV0aGVudGljYXRp
b24oKTsKIH0KICNlbmRpZgogCkBAIC0xMDIwLDEwICsxMDY1LDcgQEAgc3RhdGljIHZvaWQgYXV0
aGVuaWNhdGVDYWxsYmFjayhTb3VwU2Vzc2lvbiogc2Vzc2lvbiwgU291cE1lc3NhZ2UqIHNvdXBN
ZXNzYWdlLAogICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gc3RhdGljX2Nhc3Q8
UmVzb3VyY2VIYW5kbGUqPihnX29iamVjdF9nZXRfZGF0YShHX09CSkVDVChzb3VwTWVzc2FnZSks
ICJoYW5kbGUiKSk7CiAgICAgaWYgKCFoYW5kbGUpCiAgICAgICAgIHJldHVybjsKLQotICAgIC8v
IFdlIGRvbid0IG5lZWQgdG8gcGFzcyBhIGNsaWVudCBoZXJlLCBiZWNhdXNlIEdUSysgZG9lcyBu
b3QgeWV0IHVzZSB0aGUgQXV0aGVudGljYXRpb25DbGllbnQgdG8KLSAgICAvLyByZXNwb25kIHRv
IHRoZSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAtLSBpbnN0ZWFkIGRlYWxpbmcgd2l0aCB0aGUg
U291cCBvYmplY3RzIGRpcmVjdGx5LgotICAgIGhhbmRsZS0+ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKHNlc3Npb24sIHNvdXBNZXNzYWdl
LCBzb3VwQXV0aCwgcmV0cnlpbmcsIDApKTsKKyAgICBoYW5kbGUtPmRpZFJlY2VpdmVBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZShBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShzZXNzaW9uLCBzb3VwTWVz
c2FnZSwgc291cEF1dGgsIHJldHJ5aW5nLCBoYW5kbGUuZ2V0KCkpKTsKIH0KICNlbmRpZgogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNs
aWVudEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRl
ckNsaWVudEd0ay5jcHAKaW5kZXggZjc5Mjk5MTE5Y2M2M2I1ZGExMmUyNmU3MWUzNjAyNTZiYzgx
ZWY4My4uZjNjY2ZjMTdmYWE0YTE2M2U0ZjlmZmVjYzE3NDU3ZjFkNDk0MTVkOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xp
ZW50R3RrLmNwcApAQCAtMjAxLDEyICsyMDEsMTQgQEAgRnJhbWVMb2FkZXJDbGllbnQ6OnNob3Vs
ZFVzZUNyZWRlbnRpYWxTdG9yYWdlKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQK
IAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZWNlaXZlQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nICBpZGVu
dGlmaWVyLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlKQogewotICAg
IGlmIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmR1bXBSZW5kZXJUcmVlTW9kZUVuYWJsZWQo
KSkKKyAgICBpZiAoRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpkdW1wUmVuZGVyVHJlZU1vZGVF
bmFibGVkKCkpIHsKKyAgICAgICAgY2hhbGxlbmdlLmF1dGhlbnRpY2F0aW9uQ2xpZW50KCktPnJl
Y2VpdmVkUmVxdWVzdFRvQ29udGludWVXaXRob3V0Q3JlZGVudGlhbChjaGFsbGVuZ2UpOwogICAg
ICAgICByZXR1cm47CisgICAgfQogCiAgICAgR3RrV2lkZ2V0KiB0b3BsZXZlbCA9IGd0a193aWRn
ZXRfZ2V0X3RvcGxldmVsKEdUS19XSURHRVQod2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXco
bV9mcmFtZSkpKTsKICAgICBHdGtXaW5kb3cqIHRvcGxldmVsV2luZG93ID0gd2lkZ2V0SXNPbnNj
cmVlblRvcGxldmVsV2luZG93KHRvcGxldmVsKSA/IEdUS19XSU5ET1codG9wbGV2ZWwpIDogMDsK
LSAgICBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyogZGlhbG9nID0gbmV3IEd0a0F1dGhlbnRpY2F0
aW9uRGlhbG9nKHRvcGxldmVsV2luZG93LCBjaGFsbGVuZ2Uuc291cFNlc3Npb24oKSwgY2hhbGxl
bmdlLnNvdXBNZXNzYWdlKCksIGNoYWxsZW5nZS5zb3VwQXV0aCgpKTsKKyAgICBHdGtBdXRoZW50
aWNhdGlvbkRpYWxvZyogZGlhbG9nID0gbmV3IEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKHRvcGxl
dmVsV2luZG93LCBjaGFsbGVuZ2UpOwogICAgIGRpYWxvZy0+c2hvdygpOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c291cGF1dGhkaWFsb2cuY3BwIGIv
U291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNvdXBhdXRoZGlhbG9nLmNwcAppbmRleCAy
YjRiNzc3MmUzZGIzY2U3YTVhNGE5NzhlMGQwMTc3NWZkMjVlYTYwLi5kYTE2MTE0N2U4ZjZmN2E1
ZjVkZThmNmJiOTJjMDVjMzNhMWU0MmZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0c291cGF1dGhkaWFsb2cuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXRzb3VwYXV0aGRpYWxvZy5jcHAKQEAgLTIwLDcgKzIwLDkgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJ3ZWJraXRzb3VwYXV0aGRpYWxvZy5oIgogCisjaW5jbHVk
ZSAiQXV0aGVudGljYXRpb25DbGllbnQuaCIKICNpbmNsdWRlICJHdGtBdXRoZW50aWNhdGlvbkRp
YWxvZy5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAid2Via2l0bWFy
c2hhbC5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTM1LDYgKzM3LDQ2IEBAIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogICogaGFuZGxpbmcgSFRUUCBiYXNpYyBhdXRoLgogICov
CiAKKworLy8gVGhpcyBjbGFzcyBleGlzdHMgb25seSBmb3IgQVBJIGNvbXBhdGliaWxpdHkgcmVh
c29ucy4gV2ViS2l0U291cEF1dGhEaWFsb2cgd2FzIGV4cG9zZWQKKy8vIGluIHRoZSBwdWJsaWMg
QVBJLCBzbyB3ZSBtdXN0IHByb3ZpZGUgdGhpcyAiZmFrZSIgQXV0aGVudGljYXRpb25DbGllbnQg
aW4gb3JkZXIgdG8KKy8vIGNvbnRpbnVlIHVzaW5nIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nIHdp
dGggdGhlIG5ldyBhdXRoZW50aWNhdGlvbiBhcmNoaXRlY3R1cmUuCitjbGFzcyBXZWJLaXRTb3Vw
QXV0aERpYWxvZ0F1dGhlbnRpY2F0aW9uQ2xpZW50IDogcHVibGljIFdlYkNvcmU6OkF1dGhlbnRp
Y2F0aW9uQ2xpZW50LCBwdWJsaWMgUmVmQ291bnRlZDxXZWJLaXRTb3VwQXV0aERpYWxvZ0F1dGhl
bnRpY2F0aW9uQ2xpZW50PiB7Cit1c2luZyBSZWZDb3VudGVkPFdlYktpdFNvdXBBdXRoRGlhbG9n
QXV0aGVudGljYXRpb25DbGllbnQ+OjpyZWY7Cit1c2luZyBSZWZDb3VudGVkPFdlYktpdFNvdXBB
dXRoRGlhbG9nQXV0aGVudGljYXRpb25DbGllbnQ+OjpkZXJlZjsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCByZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwoY29uc3QgQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkKKyAgICB7CisgICAgICAgIHNvdXBfc2Vz
c2lvbl91bnBhdXNlX21lc3NhZ2UoY2hhbGxlbmdlLnNvdXBTZXNzaW9uKCksIGNoYWxsZW5nZS5z
b3VwTWVzc2FnZSgpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRDcmVkZW50
aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UsIGNvbnN0IENyZWRl
bnRpYWwmIGNyZWRlbnRpYWwpCisgICAgeworICAgICAgICBzb3VwX2F1dGhfYXV0aGVudGljYXRl
KGNoYWxsZW5nZS5zb3VwQXV0aCgpLCBjcmVkZW50aWFsLnVzZXIoKS51dGY4KCkuZGF0YSgpLCBj
cmVkZW50aWFsLnBhc3N3b3JkKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHNvdXBfc2Vzc2lv
bl91bnBhdXNlX21lc3NhZ2UoY2hhbGxlbmdlLnNvdXBTZXNzaW9uKCksIGNoYWxsZW5nZS5zb3Vw
TWVzc2FnZSgpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRDYW5jZWxsYXRp
b24oY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkKKyAgICB7CisgICAg
ICAgIHNvdXBfc2Vzc2lvbl91bnBhdXNlX21lc3NhZ2UoY2hhbGxlbmdlLnNvdXBTZXNzaW9uKCks
IGNoYWxsZW5nZS5zb3VwTWVzc2FnZSgpKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIHNlZW1zIG5l
Y2Vzc2FyeSB0byBtYWtlIHRoZSBjb21waWxlciBoYXBweS4gQm90aCBBdXRoZW50aWNhdGlvbkNs
aWVudCBhbmQKKyAgICAvLyBSZWZDb3VudGVkPFQ+IGV4cG9zZSBhIHJlZi9kZXJlZiBtZXRob2Qs
IHdoaWNoIGludGVyZmVyZXMgd2l0aCB0aGUgdXNlIG9mIGEgUmVmUHRyLgorICAgIHZvaWQgZGVy
ZWZXZWJLaXRTb3VwQXV0aERpYWxvZ0F1dGhlbnRpY2F0aW9uQ2xpZW50KCkKKyAgICB7CisgICAg
ICAgIGRlcmVmKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCByZWZBdXRo
ZW50aWNhdGlvbkNsaWVudCgpIHsgcmVmKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVyZWZBdXRo
ZW50aWNhdGlvbkNsaWVudCgpIHsgZGVyZWYoKTsgfQorfTsKKwogc3RhdGljIHZvaWQgd2Via2l0
X3NvdXBfYXV0aF9kaWFsb2dfc2Vzc2lvbl9mZWF0dXJlX2luaXQoU291cFNlc3Npb25GZWF0dXJl
SW50ZXJmYWNlKiwgZ3BvaW50ZXIpOwogc3RhdGljIHZvaWQgYXR0YWNoKFNvdXBTZXNzaW9uRmVh
dHVyZSosIFNvdXBTZXNzaW9uKik7CiBzdGF0aWMgdm9pZCBkZXRhY2goU291cFNlc3Npb25GZWF0
dXJlKiwgU291cFNlc3Npb24qKTsKQEAgLTg4LDE1ICsxMzAsMjAgQEAgc3RhdGljIHZvaWQgd2Vi
a2l0X3NvdXBfYXV0aF9kaWFsb2dfc2Vzc2lvbl9mZWF0dXJlX2luaXQoU291cFNlc3Npb25GZWF0
dXJlSW50ZXIKICAgICBmZWF0dXJlSW50ZXJmYWNlLT5kZXRhY2ggPSBkZXRhY2g7CiB9CiAKLXN0
YXRpYyB2b2lkIHNlc3Npb25BdXRoZW50aWNhdGUoU291cFNlc3Npb24qIHNlc3Npb24sIFNvdXBN
ZXNzYWdlKiBtZXNzYWdlLCBTb3VwQXV0aCogYXV0aCwgZ2Jvb2xlYW4sIFNvdXBTZXNzaW9uRmVh
dHVyZSogbWFuYWdlcikKK3N0YXRpYyB2b2lkIHNlc3Npb25BdXRoZW50aWNhdGUoU291cFNlc3Np
b24qIHNlc3Npb24sIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBTb3VwQXV0aCogYXV0aCwgZ2Jvb2xl
YW4gcmV0cnlpbmcsIFNvdXBTZXNzaW9uRmVhdHVyZSogbWFuYWdlcikKIHsKLSAgICBHdGtBdXRo
ZW50aWNhdGlvbkRpYWxvZyogYXV0aERpYWxvZzsKLSAgICBHdGtXaWRnZXQqIHRvcGxldmVsID0g
MDsKLQotICAgIC8qIEdldCB0aGUgY3VycmVudCB0b3BsZXZlbCAqLworICAgIEd0a1dpbmRvdyog
dG9wbGV2ZWwgPSAwOwogICAgIGdfc2lnbmFsX2VtaXQobWFuYWdlciwgc2lnbmFsc1tDVVJSRU5U
X1RPUExFVkVMXSwgMCwgbWVzc2FnZSwgJnRvcGxldmVsKTsKIAotICAgIGF1dGhEaWFsb2cgPSBu
ZXcgR3RrQXV0aGVudGljYXRpb25EaWFsb2codG9wbGV2ZWwgPyBHVEtfV0lORE9XKHRvcGxldmVs
KSA6IDAsIHNlc3Npb24sIG1lc3NhZ2UsIGF1dGgpOworICAgIFdlYktpdFNvdXBBdXRoRGlhbG9n
QXV0aGVudGljYXRpb25DbGllbnQqIGNsaWVudCA9IG5ldyBXZWJLaXRTb3VwQXV0aERpYWxvZ0F1
dGhlbnRpY2F0aW9uQ2xpZW50KCk7CisgICAgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgY2hhbGxl
bmdlKHNlc3Npb24sIG1lc3NhZ2UsIGF1dGgsIHJldHJ5aW5nLCBjbGllbnQpOworICAgIHNvdXBf
c2Vzc2lvbl91bnBhdXNlX21lc3NhZ2Uoc2Vzc2lvbiwgbWVzc2FnZSk7CisKKyAgICAvLyBBIFJl
ZlB0ciB3b3VsZCBiZSBiZXR0ZXIgaGVyZSwgYnV0IGl0IHNlZW1zIHRoYXQgYWNjZXNzaW5nIFJl
ZkNvdW50ZWQ6OmRlcmVmIGZyb20gdGhpcyBjb250ZXh0IGlzCisgICAgLy8gaW1wb3NzaWJsZSB3
aXRoIGdjYywgZHVlIHRvIFdlYktpdFNvdXBBdXRoRGlhbG9nQXV0aGVudGljYXRpb25DbGllbnQn
cyB0d28gc3VwZXJjbGFzc2VzLgorICAgIGNsaWVudC0+ZGVyZWZXZWJLaXRTb3VwQXV0aERpYWxv
Z0F1dGhlbnRpY2F0aW9uQ2xpZW50KCk7CisKKyAgICBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyog
YXV0aERpYWxvZyA9IG5ldyBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyh0b3BsZXZlbCwgY2hhbGxl
bmdlKTsKICAgICBhdXRoRGlhbG9nLT5zaG93KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkZyYW1lTG9hZGVyQ2xpZW50
R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dl
YkZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAppbmRleCBjZTE0NzM2NWU0Y2VmZDlkNmRiMThmMDUx
MmIwNmYxM2MwODJhMGU4Li5hNmZmMzZlNWY1Zjg5MmE4YzI1ZmUxMzg2YzE1NzllYWIwYmY3MmRm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0
ay9XZWJGcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCkBAIC0z
Niw3ICszNiw3IEBAIHVzaW5nIFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOwogCiB2
b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2VpdmVBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZShXZWJDb3JlOjpEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcsIGNvbnN0
IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UpCiB7Ci0gICAgR3RrQXV0aGVudGlj
YXRpb25EaWFsb2cqIGRpYWxvZyA9IG5ldyBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZygwLCBjaGFs
bGVuZ2Uuc291cFNlc3Npb24oKSwgY2hhbGxlbmdlLnNvdXBNZXNzYWdlKCksIGNoYWxsZW5nZS5z
b3VwQXV0aCgpKTsKKyAgICBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyogZGlhbG9nID0gbmV3IEd0
a0F1dGhlbnRpY2F0aW9uRGlhbG9nKDAsIGNoYWxsZW5nZSk7CiAgICAgZGlhbG9nLT5zaG93KCk7
CiB9CiAK
</data>
<flag name="review"
          id="185953"
          type_id="1"
          status="+"
          setter="cgarcia"
    />
    <flag name="commit-queue"
          id="186322"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>