<?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>176725</bug_id>
          
          <creation_ts>2017-09-11 13:07:22 -0700</creation_ts>
          <short_desc>[WPE][GTK] Deprecate and replace webkit_form_submission_request_get_text_fields</short_desc>
          <delta_ts>2017-12-22 08:11:21 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>Other</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=173915</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Catanzaro">mcatanzaro</reporter>
          <assigned_to name="Michael Catanzaro">mcatanzaro</assigned_to>
          <cc>berto</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>buildbot</cc>
    
    <cc>cgarcia</cc>
    
    <cc>gustavo</cc>
    
    <cc>mcatanzaro</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1347563</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-09-11 13:07:22 -0700</bug_when>
    <thetext>We should deprecate and replace webkit_form_submission_request_get_text_fields(). It&apos;s broken because it returns a GHashTable*, but the underlying C++ type is Vector&lt;std::pair&lt;String, String&gt;&gt;. The same &quot;key&quot; can appear multiple times in the form. This may not be very useful, but it is legal. Let&apos;s replace it with two different functions that each return an array of strings, webkit_form_submission_request_get_input_names() and webkit_form_submission_request_get_input_values().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347961</commentid>
    <comment_count>1</comment_count>
      <attachid>320555</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-09-12 10:56:01 -0700</bug_when>
    <thetext>Created attachment 320555
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347962</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-12 10:56:50 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351679</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-09-22 09:31:32 -0700</bug_when>
    <thetext>I&apos;m not really sure we should be doing this. There is a flip side to this. The hash table API is probably just a better choice overall. It&apos;s not as if a form that has multiple elements with the same name is going to be able to do anything useful, so ensuring that we get every possible element for such forms is probably not very important.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1364787</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-10-26 05:09:54 -0700</bug_when>
    <thetext>I wound up deciding it&apos;s best to go ahead and expose the correct data types and deprecate the old version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1367849</commentid>
    <comment_count>5</comment_count>
      <attachid>320555</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-11-03 01:13:12 -0700</bug_when>
    <thetext>Comment on attachment 320555
Patch

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

&gt; Source/WebKit/UIProcess/API/glib/WebKitFormSubmissionRequest.cpp:82
&gt;          request-&gt;priv-&gt;values = adoptGRef(g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free));

Maybe we could create the hash table on demand only when the deprecated method is called.

&gt; Source/WebKit/UIProcess/API/glib/WebKitFormSubmissionRequest.cpp:101
&gt; + * function does not reliably return all text fields.

Use webkit_form_submission_request_get_text_field_names() and webkit_form_submission_request_get_text_field_values() instead.

&gt; Source/WebKit/UIProcess/API/glib/WebKitFormSubmissionRequest.cpp:122
&gt; + * non-%NULL empty strings. This function is probably only useful if used

probably?

&gt; Source/WebKit/UIProcess/API/glib/WebKitFormSubmissionRequest.cpp:127
&gt; + * Returns: (allow-none) (array zero-terminated=1) (element-type utf8) (transfer none):
&gt; + *    A null-terminated list of text field names, or %NULL if the form
&gt; + *    doesn&apos;t contain any text fields.

Why not returning GPtrArray for consistency with the web extensions API? That way we could include NULL values instead of allocating empty strings.

&gt; Source/WebKit/UIProcess/API/glib/WebKitFormSubmissionRequest.cpp:145
&gt; + * Get a list with the values of the text fields contained in the form
&gt; + * associated to @request. Text fields without values will be returned
&gt; + * as non-%NULL empty strings. This function is probably only useful if
&gt; + * used in combination with webkit_form_submission_request_get_text_field_names().

Maybe we can add a single function, returning a gboolean that indicates if the forms contains text fields or not, and two optional GPtrArray out parameters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1368411</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-11-04 17:06:04 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #5)
&gt; Maybe we could create the hash table on demand only when the deprecated
&gt; method is called.

OK.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitFormSubmissionRequest.cpp:101
&gt; &gt; + * function does not reliably return all text fields.
&gt; 
&gt; Use webkit_form_submission_request_get_text_field_names() and
&gt; webkit_form_submission_request_get_text_field_values() instead.

That&apos;s already in the Deprecated section... you want me to write it twice?

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitFormSubmissionRequest.cpp:122
&gt; &gt; + * non-%NULL empty strings. This function is probably only useful if used
&gt; 
&gt; probably?

I&apos;ll reword it.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitFormSubmissionRequest.cpp:127
&gt; &gt; + * Returns: (allow-none) (array zero-terminated=1) (element-type utf8) (transfer none):
&gt; &gt; + *    A null-terminated list of text field names, or %NULL if the form
&gt; &gt; + *    doesn&apos;t contain any text fields.
&gt; 
&gt; Why not returning GPtrArray for consistency with the web extensions API?
&gt; That way we could include NULL values instead of allocating empty strings.

Good idea. I was trying to avoid GPtrArray just because I don&apos;t like it very much, but it&apos;s the right type to use here and using empty strings is awkward.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitFormSubmissionRequest.cpp:145
&gt; &gt; + * Get a list with the values of the text fields contained in the form
&gt; &gt; + * associated to @request. Text fields without values will be returned
&gt; &gt; + * as non-%NULL empty strings. This function is probably only useful if
&gt; &gt; + * used in combination with webkit_form_submission_request_get_text_field_names().
&gt; 
&gt; Maybe we can add a single function, returning a gboolean that indicates if
&gt; the forms contains text fields or not, and two optional GPtrArray out
&gt; parameters.

OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380448</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-12-11 16:06:33 -0800</bug_when>
    <thetext>Sorry for the delay on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380449</commentid>
    <comment_count>8</comment_count>
      <attachid>329052</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-12-11 16:12:04 -0800</bug_when>
    <thetext>Created attachment 329052
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380451</commentid>
    <comment_count>9</comment_count>
      <attachid>329052</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-12-11 16:14:09 -0800</bug_when>
    <thetext>Comment on attachment 329052
Patch

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

&gt; Source/WebKit/UIProcess/API/gtk/WebKitFormSubmissionRequest.h:66
&gt; +webkit_form_submission_request_list_text_fields (WebKitFormSubmissionRequest  *request,

Note: &quot;list&quot; here is used as a verb. Naming the function was difficult, since the perfect name, webkit_form_submission_request_get_text_fields(), was already taken. I also considered webkit_form_submission_request_get_text_field_lists(), which seemed awkward. My runner-up name is webkit_form_submission_request_get_text_fields_as_lists(), which is long.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382673</commentid>
    <comment_count>10</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-12-17 15:58:30 -0800</bug_when>
    <thetext>Carlos, ping.

I&apos;ll update bug #173915 next.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382727</commentid>
    <comment_count>11</comment_count>
      <attachid>329052</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-12-18 00:52:58 -0800</bug_when>
    <thetext>Comment on attachment 329052
Patch

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

&gt; Source/WebKit/UIProcess/API/glib/WebKitFormSubmissionRequest.cpp:82
&gt; +            g_ptr_array_add(request-&gt;priv-&gt;textFieldNames.get(), static_cast&lt;gpointer&gt;(g_strdup(values[i].first.utf8().data())));
&gt; +            g_ptr_array_add(request-&gt;priv-&gt;textFieldValues.get(), static_cast&lt;gpointer&gt;(g_strdup(values[i].second.utf8().data())));

I don&apos;t think we need to cast here

&gt; Source/WebKit/UIProcess/API/glib/WebKitFormSubmissionRequest.cpp:98
&gt; + * Returns: (allow-none) (transfer none): a #GHashTable with the form

Why did you add allow-none? We are always returning a valid GHashTable, no?

&gt; Source/WebKit/UIProcess/API/glib/WebKitFormSubmissionRequest.cpp:99
&gt; + *    text fields, or %NULL if the form doesn&apos;t contain text fields.

We don&apos;t return NULL anymore, this could be considered an API change. Don&apos;t we have a unit tests for this particular case?

&gt; Source/WebKit/UIProcess/API/glib/WebKitFormSubmissionRequest.cpp:107
&gt; +    if (!request-&gt;priv-&gt;values) {

To keep compatibility you should check here  &amp;&amp; request-&gt;priv-&gt;textFieldNames-&gt;len

&gt; Source/WebKit/UIProcess/API/glib/WebKitFormSubmissionRequest.cpp:109
&gt; +        ASSERT(request-&gt;priv-&gt;textFieldNames-&gt;len == request-&gt;priv-&gt;textFieldValues-&gt;len);

I don&apos;t think this is needed, the arrays are created internally with the same len value.

&gt; Source/WebKit/UIProcess/API/glib/WebKitFormSubmissionRequest.cpp:135
&gt; + * Returns: %TRUE if the form contains text fields

, or %FALSE otherwise

&gt; Source/WebKit/UIProcess/API/glib/WebKitFormSubmissionRequest.cpp:148
&gt; +    ASSERT(request-&gt;priv-&gt;textFieldNames-&gt;len == request-&gt;priv-&gt;textFieldValues-&gt;len);

I don&apos;t think this is needed, the arrays are created internally with the same len value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1384357</commentid>
    <comment_count>12</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-12-21 19:02:29 -0800</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #11)
&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitFormSubmissionRequest.cpp:82
&gt; &gt; +            g_ptr_array_add(request-&gt;priv-&gt;textFieldNames.get(), static_cast&lt;gpointer&gt;(g_strdup(values[i].first.utf8().data())));
&gt; &gt; +            g_ptr_array_add(request-&gt;priv-&gt;textFieldValues.get(), static_cast&lt;gpointer&gt;(g_strdup(values[i].second.utf8().data())));
&gt; 
&gt; I don&apos;t think we need to cast here

You&apos;re right... I did not know this!

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitFormSubmissionRequest.cpp:98
&gt; &gt; + * Returns: (allow-none) (transfer none): a #GHashTable with the form
&gt; 
&gt; Why did you add allow-none? We are always returning a valid GHashTable, no?

It was missing before. This is an API break, unfortunately, but the original annotation was plainly incorrect.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitFormSubmissionRequest.cpp:99
&gt; &gt; + *    text fields, or %NULL if the form doesn&apos;t contain text fields.
&gt; 
&gt; We don&apos;t return NULL anymore, this could be considered an API change. Don&apos;t
&gt; we have a unit tests for this particular case?

You&apos;re right, my code is broken. We must be missing a test for this, indeed.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitFormSubmissionRequest.cpp:107
&gt; &gt; +    if (!request-&gt;priv-&gt;values) {
&gt; 
&gt; To keep compatibility you should check here  &amp;&amp;
&gt; request-&gt;priv-&gt;textFieldNames-&gt;len

Yes.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitFormSubmissionRequest.cpp:109
&gt; &gt; +        ASSERT(request-&gt;priv-&gt;textFieldNames-&gt;len == request-&gt;priv-&gt;textFieldValues-&gt;len);
&gt; 
&gt; I don&apos;t think this is needed, the arrays are created internally with the
&gt; same len value.

As you prefer.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitFormSubmissionRequest.cpp:135
&gt; &gt; + * Returns: %TRUE if the form contains text fields
&gt; 
&gt; , or %FALSE otherwise

Meh, OK... I don&apos;t personally like this style, because it&apos;s obvious that the function returns FALSE when it does not return TRUE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1384469</commentid>
    <comment_count>13</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-12-22 08:11:21 -0800</bug_when>
    <thetext>Committed r226264: &lt;https://trac.webkit.org/changeset/226264&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320555</attachid>
            <date>2017-09-12 10:56:01 -0700</date>
            <delta_ts>2017-12-11 16:12:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176725-20170912125600.patch</filename>
            <type>text/plain</type>
            <size>15131</size>
            <attacher name="Michael Catanzaro">mcatanzaro</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxOTEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDc2MTA1ODAxODI3ZDZhYWY2
ZDA5MGJlNDU2NmExMGRiYmE0ODBiNzQuLmJkYjBkNDU5ZmJmZTA0NjRjNWNiNDEzZmNhYjEzZjli
YzFiMTU0Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTctMDktMTIgIE1pY2hhZWwg
Q2F0YW56YXJvICA8bWNhdGFuemFyb0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtXUEVdW0dUS10g
RGVwcmVjYXRlIGFuZCByZXBsYWNlIHdlYmtpdF9mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdF9nZXRf
dGV4dF9maWVsZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3NjcyNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoZSBwcm9ibGVtIGlzIHRoaXMgZnVuY3Rpb24gcmV0dXJucyByZXN1bHRzIGluIGEgR0hh
c2hUYWJsZSwgYnV0IG1hbnkgZmllbGRzIGNhbiBoYXZlIHRoZQorICAgICAgICBzYW1lIG5hbWUs
IG9yIG5vIG5hbWUgYXQgYWxsLCBhbmQgdGhvc2UgZmllbGRzIGFyZSBjdXJyZW50bHkganVzdCBk
cm9wcGVkLiBJdCdzIGltcG9zc2libGUKKyAgICAgICAgdG8gZml4LCBzaW5jZSB0aGUgR0hhc2hU
YWJsZSBpcyBwYXJ0IG9mIHRoZSBBUEksIHNvIGRlcHJlY2F0ZSBpdCBhbmQgYWRkIG5ldyBmdW5j
dGlvbnMKKyAgICAgICAgcmV0dXJuaW5nIHN0cmluZyBhcnJheXMgaW5zdGVhZC4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRGb3JtU3VibWlzc2lvblJlcXVlc3QuY3BwOgor
ICAgICAgICAod2Via2l0Rm9ybVN1Ym1pc3Npb25SZXF1ZXN0Q3JlYXRlKToKKyAgICAgICAgKHdl
YmtpdF9mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdF9nZXRfdGV4dF9maWVsZF9uYW1lcyk6CisgICAg
ICAgICh3ZWJraXRfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3RfZ2V0X3RleHRfZmllbGRfdmFsdWVz
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGb3JtU3VibWlzc2lvblJlcXVl
c3QuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4wLXNl
Y3Rpb25zLnR4dDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRGb3JtU3VibWlz
c2lvblJlcXVlc3QuaDoKKwogMjAxNy0wOS0xMSAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVo
QGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TIERuRF0gU3VwcG9ydCBEYXRhVHJhbnNmZXIuc2V0
RHJhZ0ltYWdlIHdoZW4gc3RhcnRpbmcgYSBkcmFnIG9uIGlPUwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Rm9ybVN1Ym1pc3Npb25SZXF1ZXN0LmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdEZvcm1TdWJtaXNzaW9u
UmVxdWVzdC5jcHAKaW5kZXggY2MyNzU0ZjY1YjU4NWZjOGQxMmM5Yzg3Mzc2MzRkZWI2N2ZlMDRk
NS4uNWE1ZWNjMTkyNWEwNDY4YjgxYzBlNjI5MDlkNmIyYzEzMmFjNzNkYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Rm9ybVN1Ym1pc3Npb25SZXF1
ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRGb3Jt
U3VibWlzc2lvblJlcXVlc3QuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiV2ViRm9y
bVN1Ym1pc3Npb25MaXN0ZW5lclByb3h5LmgiCiAjaW5jbHVkZSAiV2ViS2l0Rm9ybVN1Ym1pc3Np
b25SZXF1ZXN0UHJpdmF0ZS5oIgogI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CiAjaW5jbHVkZSA8d3RmL2dsaWIvV1RGR1R5cGUu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKQEAgLTM4LDE1ICszOSwxNyBAQCB1
c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogICogV2hlbiBhIGZvcm0gaXMgYWJvdXQgdG8gYmUgc3Vi
bWl0dGVkIGluIGEgI1dlYktpdFdlYlZpZXcsIHRoZQogICogI1dlYktpdFdlYlZpZXc6OnN1Ym1p
dC1mb3JtIHNpZ25hbCBpcyBlbWl0dGVkLiBJdHMgcmVxdWVzdCBhcmd1bWVudAogICogY29udGFp
bnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRleHQgZmllbGRzIG9mIHRoZSBmb3JtLCB0aGF0IGFy
ZQotICogdHlwaWNhbGx5IHVzZWQgdG8gc3RvcmUgbG9naW4gaW5mb3JtYXRpb24sIHJldHVybmVk
IGluIGEKLSAqICNHSGFzaFRhYmxlIGJ5IHRoZSB3ZWJraXRfZm9ybV9zdWJtaXNzaW9uX3JlcXVl
c3RfZ2V0X3RleHRfZmllbGRzKCkKLSAqIG1ldGhvZCwgYW5kIHlvdSBjYW4gZmluYWxseSBzdWJt
aXQgdGhlIGZvcm0gd2l0aAotICogd2Via2l0X2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X3N1Ym1p
dCgpLgorICogdHlwaWNhbGx5IHVzZWQgdG8gc3RvcmUgbG9naW4gaW5mb3JtYXRpb24sIHJldHVy
bmVkIGFzIGxpc3RzIGJ5CisgKiB3ZWJraXRfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3RfZ2V0X3Rl
eHRfZmllbGRfbmFtZXMoKSBhbmQKKyAqIHdlYmtpdF9mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdF9n
ZXRfdGV4dF9maWVsZF92YWx1ZXMoKS4gWW91IGNhbgorICogc3VibWl0IHRoZSBmb3JtIHdpdGgg
d2Via2l0X2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X3N1Ym1pdCgpLgogICoKICAqLwogCiBzdHJ1
Y3QgX1dlYktpdEZvcm1TdWJtaXNzaW9uUmVxdWVzdFByaXZhdGUgewogICAgIFJlZlB0cjxXZWJG
b3JtU3VibWlzc2lvbkxpc3RlbmVyUHJveHk+IGxpc3RlbmVyOworICAgIEdVbmlxdWVQdHI8Y2hh
cio+IHRleHRGaWVsZE5hbWVzOworICAgIEdVbmlxdWVQdHI8Y2hhcio+IHRleHRGaWVsZFZhbHVl
czsKICAgICBHUmVmUHRyPEdIYXNoVGFibGU+IHZhbHVlczsKICAgICBib29sIGhhbmRsZWRSZXF1
ZXN0OwogfTsKQEAgLTc0LDkgKzc3LDE1IEBAIFdlYktpdEZvcm1TdWJtaXNzaW9uUmVxdWVzdCog
d2Via2l0Rm9ybVN1Ym1pc3Npb25SZXF1ZXN0Q3JlYXRlKGNvbnN0IFZlY3RvcjxzdGQ6CiB7CiAg
ICAgV2ViS2l0Rm9ybVN1Ym1pc3Npb25SZXF1ZXN0KiByZXF1ZXN0ID0gV0VCS0lUX0ZPUk1fU1VC
TUlTU0lPTl9SRVFVRVNUKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9GT1JNX1NVQk1JU1NJT05f
UkVRVUVTVCwgbnVsbHB0cikpOwogICAgIGlmICh2YWx1ZXMuc2l6ZSgpKSB7CisgICAgICAgIHJl
cXVlc3QtPnByaXYtPnRleHRGaWVsZE5hbWVzLnJlc2V0KHN0YXRpY19jYXN0PGdjaGFyKio+KGdf
bmV3MChnY2hhciosIHZhbHVlcy5zaXplKCkgKyAxKSkpOworICAgICAgICByZXF1ZXN0LT5wcml2
LT50ZXh0RmllbGRWYWx1ZXMucmVzZXQoc3RhdGljX2Nhc3Q8Z2NoYXIqKj4oZ19uZXcwKGdjaGFy
KiwgdmFsdWVzLnNpemUoKSArIDEpKSk7CiAgICAgICAgIHJlcXVlc3QtPnByaXYtPnZhbHVlcyA9
IGFkb3B0R1JlZihnX2hhc2hfdGFibGVfbmV3X2Z1bGwoZ19zdHJfaGFzaCwgZ19zdHJfZXF1YWws
IGdfZnJlZSwgZ19mcmVlKSk7Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYgcGFpciA6IHZhbHVl
cykKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyBpKyspIHsK
KyAgICAgICAgICAgIGF1dG8mIHBhaXIgPSB2YWx1ZXNbaV07CisgICAgICAgICAgICByZXF1ZXN0
LT5wcml2LT50ZXh0RmllbGROYW1lcy5nZXQoKVtpXSA9IGdfc3RyZHVwKHBhaXIuZmlyc3QudXRm
OCgpLmRhdGEoKSk7CisgICAgICAgICAgICByZXF1ZXN0LT5wcml2LT50ZXh0RmllbGRWYWx1ZXMu
Z2V0KClbaV0gPSBnX3N0cmR1cChwYWlyLnNlY29uZC51dGY4KCkuZGF0YSgpKTsKICAgICAgICAg
ICAgIGdfaGFzaF90YWJsZV9pbnNlcnQocmVxdWVzdC0+cHJpdi0+dmFsdWVzLmdldCgpLCBnX3N0
cmR1cChwYWlyLmZpcnN0LnV0ZjgoKS5kYXRhKCkpLCBnX3N0cmR1cChwYWlyLnNlY29uZC51dGY4
KCkuZGF0YSgpKSk7CisgICAgICAgIH0KICAgICB9CiAgICAgcmVxdWVzdC0+cHJpdi0+bGlzdGVu
ZXIgPSBXVEZNb3ZlKGxpc3RlbmVyKTsKICAgICByZXR1cm4gcmVxdWVzdDsKQEAgLTg3LDEwICs5
NiwxNSBAQCBXZWJLaXRGb3JtU3VibWlzc2lvblJlcXVlc3QqIHdlYmtpdEZvcm1TdWJtaXNzaW9u
UmVxdWVzdENyZWF0ZShjb25zdCBWZWN0b3I8c3RkOgogICogQHJlcXVlc3Q6IGEgI1dlYktpdEZv
cm1TdWJtaXNzaW9uUmVxdWVzdAogICoKICAqIEdldCBhICNHSGFzaFRhYmxlIHdpdGggdGhlIHZh
bHVlcyBvZiB0aGUgdGV4dCBmaWVsZHMgY29udGFpbmVkIGluIHRoZSBmb3JtCi0gKiBhc3NvY2lh
dGVkIHRvIEByZXF1ZXN0LgorICogYXNzb2NpYXRlZCB0byBAcmVxdWVzdC4gTm90ZSB0aGF0IGZp
ZWxkcyB3aWxsIGJlIG1pc3NpbmcgaWYgdGhlIGZvcm0KKyAqIGNvbnRhaW5zIG11bHRpcGxlIHRl
eHQgaW5wdXQgZWxlbWVudHMgd2l0aCB0aGUgc2FtZSBuYW1lLCBzbyB0aGlzCisgKiBmdW5jdGlv
biBkb2VzIG5vdCByZWxpYWJseSByZXR1cm4gYWxsIHRleHQgZmllbGRzLgogICoKLSAqIFJldHVy
bnM6ICh0cmFuc2ZlciBub25lKTogYSAjR0hhc2hUYWJsZSB3aXRoIHRoZSBmb3JtIHRleHQgZmll
bGRzLCBvciAlTlVMTCBpZiB0aGUKLSAqICAgIGZvcm0gZG9lc24ndCBjb250YWluIHRleHQgZmll
bGRzLgorICogUmV0dXJuczogKGFsbG93LW5vbmUpICh0cmFuc2ZlciBub25lKTogYSAjR0hhc2hU
YWJsZSB3aXRoIHRoZSBmb3JtCisgKiAgICB0ZXh0IGZpZWxkcywgb3IgJU5VTEwgaWYgdGhlIGZv
cm0gZG9lc24ndCBjb250YWluIHRleHQgZmllbGRzLgorICoKKyAqIERlcHJlY2F0ZWQ6IDIuMjAu
IFVzZSB3ZWJraXRfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3RfZ2V0X3RleHRfZmllbGRfbmFtZXMo
KQorICogICAgYW5kIHdlYmtpdF9mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdF9nZXRfdGV4dF9maWVs
ZF92YWx1ZXMoKSBpbnN0ZWFkLgogICovCiBHSGFzaFRhYmxlKiB3ZWJraXRfZm9ybV9zdWJtaXNz
aW9uX3JlcXVlc3RfZ2V0X3RleHRfZmllbGRzKFdlYktpdEZvcm1TdWJtaXNzaW9uUmVxdWVzdCog
cmVxdWVzdCkKIHsKQEAgLTEwMCw2ICsxMTQsNTAgQEAgR0hhc2hUYWJsZSogd2Via2l0X2Zvcm1f
c3VibWlzc2lvbl9yZXF1ZXN0X2dldF90ZXh0X2ZpZWxkcyhXZWJLaXRGb3JtU3VibWlzc2lvblIK
IH0KIAogLyoqCisgKiB3ZWJraXRfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3RfZ2V0X3RleHRfZmll
bGRfbmFtZXM6CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0Rm9ybVN1Ym1pc3Npb25SZXF1ZXN0Cisg
KgorICogR2V0IGEgbGlzdCB3aXRoIHRoZSBuYW1lcyBvZiB0aGUgdGV4dCBmaWVsZHMgY29udGFp
bmVkIGluIHRoZSBmb3JtCisgKiBhc3NvY2lhdGVkIHRvIEByZXF1ZXN0LiBUZXh0IGZpZWxkcyB3
aXRob3V0IG5hbWVzIHdpbGwgYmUgcmV0dXJuZWQgYXMKKyAqIG5vbi0lTlVMTCBlbXB0eSBzdHJp
bmdzLiBUaGlzIGZ1bmN0aW9uIGlzIHByb2JhYmx5IG9ubHkgdXNlZnVsIGlmIHVzZWQKKyAqIGlu
IGNvbWJpbmF0aW9uIHdpdGggd2Via2l0X2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X2dldF90ZXh0
X2ZpZWxkX3ZhbHVlcygpLgorICoKKyAqIFJldHVybnM6IChhbGxvdy1ub25lKSAoYXJyYXkgemVy
by10ZXJtaW5hdGVkPTEpIChlbGVtZW50LXR5cGUgdXRmOCkgKHRyYW5zZmVyIG5vbmUpOgorICog
ICAgQSBudWxsLXRlcm1pbmF0ZWQgbGlzdCBvZiB0ZXh0IGZpZWxkIG5hbWVzLCBvciAlTlVMTCBp
ZiB0aGUgZm9ybQorICogICAgZG9lc24ndCBjb250YWluIGFueSB0ZXh0IGZpZWxkcy4KKyAqCisg
KiBTaW5jZTogMi4yMAorICovCitjb25zdCBnY2hhciogY29uc3QqIHdlYmtpdF9mb3JtX3N1Ym1p
c3Npb25fcmVxdWVzdF9nZXRfdGV4dF9maWVsZF9uYW1lcyhXZWJLaXRGb3JtU3VibWlzc2lvblJl
cXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0ZP
Uk1fU1VCTUlTU0lPTl9SRVFVRVNUKHJlcXVlc3QpLCBudWxscHRyKTsKKworICAgIHJldHVybiBy
ZXF1ZXN0LT5wcml2LT50ZXh0RmllbGROYW1lcy5nZXQoKTsKK30KKworLyoqCisgKiB3ZWJraXRf
Zm9ybV9zdWJtaXNzaW9uX3JlcXVlc3RfZ2V0X3RleHRfZmllbGRfdmFsdWVzOgorICogQHJlcXVl
c3Q6IGEgI1dlYktpdEZvcm1TdWJtaXNzaW9uUmVxdWVzdAorICoKKyAqIEdldCBhIGxpc3Qgd2l0
aCB0aGUgdmFsdWVzIG9mIHRoZSB0ZXh0IGZpZWxkcyBjb250YWluZWQgaW4gdGhlIGZvcm0KKyAq
IGFzc29jaWF0ZWQgdG8gQHJlcXVlc3QuIFRleHQgZmllbGRzIHdpdGhvdXQgdmFsdWVzIHdpbGwg
YmUgcmV0dXJuZWQKKyAqIGFzIG5vbi0lTlVMTCBlbXB0eSBzdHJpbmdzLiBUaGlzIGZ1bmN0aW9u
IGlzIHByb2JhYmx5IG9ubHkgdXNlZnVsIGlmCisgKiB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGgg
d2Via2l0X2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X2dldF90ZXh0X2ZpZWxkX25hbWVzKCkuCisg
KgorICogUmV0dXJuczogKGFsbG93LW5vbmUpIChhcnJheSB6ZXJvLXRlcm1pbmF0ZWQ9MSkgKGVs
ZW1lbnQtdHlwZSB1dGY4KSAodHJhbnNmZXIgbm9uZSk6CisgKiAgICBBIG51bGwtdGVybWluYXRl
ZCBsaXN0IG9mIHRleHQgZmllbGQgdmFsdWVzLCBvciAlTlVMTCBpZiB0aGUgZm9ybQorICogICAg
ZG9lc24ndCBjb250YWluIGFueSB0ZXh0IGZpZWxkcy4KKyAqCisgKiBTaW5jZTogMi4yMAorICov
Citjb25zdCBnY2hhciogY29uc3QqIHdlYmtpdF9mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdF9nZXRf
dGV4dF9maWVsZF92YWx1ZXMoV2ViS2l0Rm9ybVN1Ym1pc3Npb25SZXF1ZXN0KiByZXF1ZXN0KQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19GT1JNX1NVQk1JU1NJT05fUkVR
VUVTVChyZXF1ZXN0KSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4gcmVxdWVzdC0+cHJpdi0+dGV4
dEZpZWxkVmFsdWVzLmdldCgpOworfQorCisvKioKICAqIHdlYmtpdF9mb3JtX3N1Ym1pc3Npb25f
cmVxdWVzdF9zdWJtaXQ6CiAgKiBAcmVxdWVzdDogYSAjV2ViS2l0Rm9ybVN1Ym1pc3Npb25SZXF1
ZXN0CiAgKgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRGb3JtU3VibWlzc2lvblJlcXVlc3QuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0Rm9ybVN1Ym1pc3Npb25SZXF1ZXN0LmgKaW5kZXggZTI3Nzc5YjM0MjYxYmJmMzk1
OGRjM2MwZjYwMGVlODhiM2ZjMWRlNi4uMTk0MTJiOTYyYWNmNmRjNGRiNjE2NWYxMWVjMzliMjY4
NWY5N2Q3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRGb3JtU3VibWlzc2lvblJlcXVlc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdEZvcm1TdWJtaXNzaW9uUmVxdWVzdC5oCkBAIC01NywxMyArNTcsMTkgQEAg
c3RydWN0IF9XZWJLaXRGb3JtU3VibWlzc2lvblJlcXVlc3RDbGFzcyB7CiB9OwogCiBXRUJLSVRf
QVBJIEdUeXBlCi13ZWJraXRfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3RfZ2V0X3R5cGUgICAgICAg
ICh2b2lkKTsKK3dlYmtpdF9mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdF9nZXRfdHlwZSAgICAgICAg
ICAgICAgKHZvaWQpOwogCi1XRUJLSVRfQVBJIEdIYXNoVGFibGUgKgotd2Via2l0X2Zvcm1fc3Vi
bWlzc2lvbl9yZXF1ZXN0X2dldF90ZXh0X2ZpZWxkcyAoV2ViS2l0Rm9ybVN1Ym1pc3Npb25SZXF1
ZXN0ICpyZXF1ZXN0KTsKK1dFQktJVF9ERVBSRUNBVEVEX0ZPUih3ZWJraXRfZm9ybV9zdWJtaXNz
aW9uX3JlcXVlc3RfZ2V0X3RleHRfZmllbGRfbmFtZXMpIEdIYXNoVGFibGUgKgord2Via2l0X2Zv
cm1fc3VibWlzc2lvbl9yZXF1ZXN0X2dldF90ZXh0X2ZpZWxkcyAgICAgICAoV2ViS2l0Rm9ybVN1
Ym1pc3Npb25SZXF1ZXN0ICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqIGNv
bnN0ICoKK3dlYmtpdF9mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdF9nZXRfdGV4dF9maWVsZF9uYW1l
cyAgKFdlYktpdEZvcm1TdWJtaXNzaW9uUmVxdWVzdCAqcmVxdWVzdCk7CisKK1dFQktJVF9BUEkg
Y29uc3QgZ2NoYXIgKiBjb25zdCAqCit3ZWJraXRfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3RfZ2V0
X3RleHRfZmllbGRfdmFsdWVzIChXZWJLaXRGb3JtU3VibWlzc2lvblJlcXVlc3QgKnJlcXVlc3Qp
OwogCiBXRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdF9zdWJt
aXQgICAgICAgICAgKFdlYktpdEZvcm1TdWJtaXNzaW9uUmVxdWVzdCAqcmVxdWVzdCk7Cit3ZWJr
aXRfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3Rfc3VibWl0ICAgICAgICAgICAgICAgIChXZWJLaXRG
b3JtU3VibWlzc2lvblJlcXVlc3QgKnJlcXVlc3QpOwogCiBHX0VORF9ERUNMUwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay00LjAt
c2VjdGlvbnMudHh0IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtp
dDJndGstNC4wLXNlY3Rpb25zLnR4dAppbmRleCBhMTNjMzJkMmI4ZWI0ZDdhZGM3MDI3ZDIwNjE2
YWZlNDY2YTU0MTdiLi4yMjdkMmZlMWM5YTAzMjFmNjA1YjhlZGM2YTUyNTkyNzczNWNhYTViIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0
ay00LjAtc2VjdGlvbnMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsv
ZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQKQEAgLTEyMjEsNiArMTIyMSw4IEBAIHdl
YmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF90eXBlCiA8RklMRT5XZWJLaXRGb3JtU3VibWlzc2lv
blJlcXVlc3Q8L0ZJTEU+CiBXZWJLaXRGb3JtU3VibWlzc2lvblJlcXVlc3QKIHdlYmtpdF9mb3Jt
X3N1Ym1pc3Npb25fcmVxdWVzdF9nZXRfdGV4dF9maWVsZHMKK3dlYmtpdF9mb3JtX3N1Ym1pc3Np
b25fcmVxdWVzdF9nZXRfdGV4dF9maWVsZF9uYW1lcword2Via2l0X2Zvcm1fc3VibWlzc2lvbl9y
ZXF1ZXN0X2dldF90ZXh0X2ZpZWxkX3ZhbHVlcwogd2Via2l0X2Zvcm1fc3VibWlzc2lvbl9yZXF1
ZXN0X3N1Ym1pdAogCiA8U1VCU0VDVElPTiBTdGFuZGFyZD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Rm9ybVN1Ym1pc3Npb25SZXF1ZXN0LmggYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdEZvcm1TdWJtaXNzaW9uUmVxdWVz
dC5oCmluZGV4IDY4OGMyOGM4YmQwMTY4YTk2OGEwYTExMTQxZjA4OTg3MTQzY2Y1MDIuLjM1MTEy
MDhmZTIwNjcyZmNhMjJjN2I0ZjAzZTg4ZjRkYjhiYzk5ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Rm9ybVN1Ym1pc3Npb25SZXF1ZXN0LmgKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRGb3JtU3VibWlzc2lvblJl
cXVlc3QuaApAQCAtNTcsMTMgKzU3LDE5IEBAIHN0cnVjdCBfV2ViS2l0Rm9ybVN1Ym1pc3Npb25S
ZXF1ZXN0Q2xhc3MgewogfTsKIAogV0VCS0lUX0FQSSBHVHlwZQotd2Via2l0X2Zvcm1fc3VibWlz
c2lvbl9yZXF1ZXN0X2dldF90eXBlICAgICAgICAodm9pZCk7Cit3ZWJraXRfZm9ybV9zdWJtaXNz
aW9uX3JlcXVlc3RfZ2V0X3R5cGUgICAgICAgICAgICAgICh2b2lkKTsKIAotV0VCS0lUX0FQSSBH
SGFzaFRhYmxlICoKLXdlYmtpdF9mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdF9nZXRfdGV4dF9maWVs
ZHMgKFdlYktpdEZvcm1TdWJtaXNzaW9uUmVxdWVzdCAqcmVxdWVzdCk7CitXRUJLSVRfREVQUkVD
QVRFRF9GT1Iod2Via2l0X2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X2dldF90ZXh0X2ZpZWxkX25h
bWVzKSBHSGFzaFRhYmxlICoKK3dlYmtpdF9mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdF9nZXRfdGV4
dF9maWVsZHMgICAgICAgKFdlYktpdEZvcm1TdWJtaXNzaW9uUmVxdWVzdCAqcmVxdWVzdCk7CisK
K1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKiBjb25zdCAqCit3ZWJraXRfZm9ybV9zdWJtaXNzaW9u
X3JlcXVlc3RfZ2V0X3RleHRfZmllbGRfbmFtZXMgIChXZWJLaXRGb3JtU3VibWlzc2lvblJlcXVl
c3QgKnJlcXVlc3QpOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICogY29uc3QgKgord2Via2l0
X2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X2dldF90ZXh0X2ZpZWxkX3ZhbHVlcyAoV2ViS2l0Rm9y
bVN1Ym1pc3Npb25SZXF1ZXN0ICpyZXF1ZXN0KTsKIAogV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRf
Zm9ybV9zdWJtaXNzaW9uX3JlcXVlc3Rfc3VibWl0ICAgICAgICAgIChXZWJLaXRGb3JtU3VibWlz
c2lvblJlcXVlc3QgKnJlcXVlc3QpOword2Via2l0X2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X3N1
Ym1pdCAgICAgICAgICAgICAgICAoV2ViS2l0Rm9ybVN1Ym1pc3Npb25SZXF1ZXN0ICpyZXF1ZXN0
KTsKIAogR19FTkRfREVDTFMKIApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMv
Q2hhbmdlTG9nCmluZGV4IGE2MTY2ZGVkNWM3NWM3NjRiMTRjMzFlZTg3YjI0YWM0OTI5NjQxNGUu
LmVlMjliYzY0Y2RlMjUxOTEzOTE5M2RiYzljNzY4NTlmOWIwY2RmOTMgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAx
Ny0wOS0xMiAgTWljaGFlbCBDYXRhbnphcm8gIDxtY2F0YW56YXJvQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgW1dQRV1bR1RLXSBEZXByZWNhdGUgYW5kIHJlcGxhY2Ugd2Via2l0X2Zvcm1fc3VibWlz
c2lvbl9yZXF1ZXN0X2dldF90ZXh0X2ZpZWxkcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2NzI1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVz
dFdlYktpdFdlYlZpZXcuY3BwOgorICAgICAgICAodGVzdFdlYlZpZXdTdWJtaXRGb3JtKToKKwog
MjAxNy0wOS0xMiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgW0ZyZWV0eXBlXSBEb2Vzbid0IHN1cHBvcnQgY29sb3VyZWQgZm9udHMKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0V2ViS2l0V2Vi
Vmlldy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFdlYktp
dFdlYlZpZXcuY3BwCmluZGV4IDI4YTZiNmE4ZDRlZGE2YTNjOWRiMDYyMDM0YjdmYmQyZGEyMjc5
MDYuLmFiN2IyNWI0NjNmYzE0YzJmZDVjM2VhNzk0NGUzYjQwYWIwNzM4NTMgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0V2ViS2l0V2ViVmlldy5j
cHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RXZWJLaXRX
ZWJWaWV3LmNwcApAQCAtNDAyLDEwICs0MDIsMjIgQEAgcHVibGljOgogICAgICAgICBxdWl0TWFp
bkxvb3AoKTsKICAgICB9CiAKLSAgICBHSGFzaFRhYmxlKiB3YWl0VW50aWxGb3JtU3VibWl0dGVk
QW5kR2V0VGV4dEZpZWxkcygpCisgICAgR0hhc2hUYWJsZSogZ2V0VGV4dEZpZWxkc0FzSGFzaFRh
YmxlKCkKICAgICB7Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyNwcmFn
bWEgR0NDIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICIt
V2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgogICAgICAgICByZXR1cm4gd2Via2l0X2Zvcm1fc3Vi
bWlzc2lvbl9yZXF1ZXN0X2dldF90ZXh0X2ZpZWxkcyhtX3JlcXVlc3QuZ2V0KCkpOworI3ByYWdt
YSBHQ0MgZGlhZ25vc3RpYyBwb3AKKyAgICB9CisKKyAgICBjb25zdCBnY2hhciogY29uc3QqIGdl
dFRleHRGaWVsZE5hbWVzKCkKKyAgICB7CisgICAgICAgIHJldHVybiB3ZWJraXRfZm9ybV9zdWJt
aXNzaW9uX3JlcXVlc3RfZ2V0X3RleHRfZmllbGRfbmFtZXMobV9yZXF1ZXN0LmdldCgpKTsKKyAg
ICB9CisKKyAgICBjb25zdCBnY2hhciogY29uc3QqIGdldFRleHRGaWVsZFZhbHVlcygpCisgICAg
eworICAgICAgICByZXR1cm4gd2Via2l0X2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X2dldF90ZXh0
X2ZpZWxkX3ZhbHVlcyhtX3JlcXVlc3QuZ2V0KCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBnYm9v
bGVhbiBkb0NsaWNrSWRsZUNhbGxiYWNrKEZvcm1DbGllbnRUZXN0KiB0ZXN0KQpAQCAtNDE5LDYg
KzQzMSw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9zdWJtaXRQb3NpdGlvblggPSB4OwogICAgICAg
ICBtX3N1Ym1pdFBvc2l0aW9uWSA9IHk7CiAgICAgICAgIGdfaWRsZV9hZGQocmVpbnRlcnByZXRf
Y2FzdDxHU291cmNlRnVuYz4oZG9DbGlja0lkbGVDYWxsYmFjayksIHRoaXMpOworICAgICAgICBn
X21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CiAgICAgfQogCiAgICAgaW50IG1fc3VibWl0UG9z
aXRpb25YOwpAQCAtNDM1LDYgKzQ0OCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3U3VibWl0
Rm9ybShGb3JtQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICAgICAgIiA8Zm9y
bSBhY3Rpb249JyMnPiIKICAgICAgICAgIiAgPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3RleHQx
JyB2YWx1ZT0ndmFsdWUxJz4iCiAgICAgICAgICIgIDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSd0
ZXh0MicgdmFsdWU9J3ZhbHVlMic+IgorICAgICAgICAiICA8aW5wdXQgdHlwZT0ndGV4dCcgdmFs
dWU9J3ZhbHVlMyc+IgorICAgICAgICAiICA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ndGV4dDIn
PiIKICAgICAgICAgIiAgPGlucHV0IHR5cGU9J3Bhc3N3b3JkJyBuYW1lPSdwYXNzd29yZCcgdmFs
dWU9J3NlY3JldCc+IgogICAgICAgICAiICA8dGV4dGFyZWEgY29scz0nNScgcm93cz0nNScgbmFt
ZT0ndGV4dGFyZWEnPlRleHQ8L3RleHRhcmVhPiIKICAgICAgICAgIiAgPGlucHV0IHR5cGU9J2hp
ZGRlbicgbmFtZT0naGlkZGVuMScgdmFsdWU9J2hpZGRlbjEnPiIKQEAgLTQ0NiwxMiArNDYxLDMz
IEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3U3VibWl0Rm9ybShGb3JtQ2xpZW50VGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKICAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKIAog
ICAgIHRlc3QtPnN1Ym1pdEZvcm1BdFBvc2l0aW9uKDUsIDUpOwotICAgIEdIYXNoVGFibGUqIHZh
bHVlcyA9IHRlc3QtPndhaXRVbnRpbEZvcm1TdWJtaXR0ZWRBbmRHZXRUZXh0RmllbGRzKCk7Cisg
ICAgR0hhc2hUYWJsZSogdGFibGVWYWx1ZXMgPSB0ZXN0LT5nZXRUZXh0RmllbGRzQXNIYXNoVGFi
bGUoKTsKKyAgICBnX2Fzc2VydCh0YWJsZVZhbHVlcyk7CisgICAgZ19hc3NlcnRfY21wdWludChn
X2hhc2hfdGFibGVfc2l6ZSh0YWJsZVZhbHVlcyksID09LCA0KTsKKyAgICBnX2Fzc2VydF9jbXBz
dHIoc3RhdGljX2Nhc3Q8Y2hhcio+KGdfaGFzaF90YWJsZV9sb29rdXAodGFibGVWYWx1ZXMsICJ0
ZXh0MSIpKSwgPT0sICJ2YWx1ZTEiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc3RhdGljX2Nhc3Q8
Y2hhcio+KGdfaGFzaF90YWJsZV9sb29rdXAodGFibGVWYWx1ZXMsICIiKSksID09LCAidmFsdWUz
Iik7CisgICAgZ19hc3NlcnRfY21wc3RyKHN0YXRpY19jYXN0PGNoYXIqPihnX2hhc2hfdGFibGVf
bG9va3VwKHRhYmxlVmFsdWVzLCAidGV4dDIiKSksID09LCAiIik7CisgICAgZ19hc3NlcnRfY21w
c3RyKHN0YXRpY19jYXN0PGNoYXIqPihnX2hhc2hfdGFibGVfbG9va3VwKHRhYmxlVmFsdWVzLCAi
cGFzc3dvcmQiKSksID09LCAic2VjcmV0Iik7CisKKyAgICBjb25zdCBnY2hhciogY29uc3QqIG5h
bWVzID0gdGVzdC0+Z2V0VGV4dEZpZWxkTmFtZXMoKTsKKyAgICBnX2Fzc2VydChuYW1lcyk7Cisg
ICAgZ19hc3NlcnRfY21wdWludChnX3N0cnZfbGVuZ3RoKGNvbnN0X2Nhc3Q8Z2NoYXIqKj4obmFt
ZXMpKSwgPT0sIDUpOworICAgIGdfYXNzZXJ0X2NtcHN0cihuYW1lc1swXSwgPT0sICJ0ZXh0MSIp
OworICAgIGdfYXNzZXJ0X2NtcHN0cihuYW1lc1sxXSwgPT0sICJ0ZXh0MiIpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cihuYW1lc1syXSwgPT0sICIiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIobmFtZXNb
M10sID09LCAidGV4dDIiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIobmFtZXNbNF0sID09LCAicGFz
c3dvcmQiKTsKKyAgICBnX2Fzc2VydCghbmFtZXNbNV0pOworCisgICAgY29uc3QgZ2NoYXIqIGNv
bnN0KiB2YWx1ZXMgPSB0ZXN0LT5nZXRUZXh0RmllbGRWYWx1ZXMoKTsKICAgICBnX2Fzc2VydCh2
YWx1ZXMpOwotICAgIGdfYXNzZXJ0X2NtcHVpbnQoZ19oYXNoX3RhYmxlX3NpemUodmFsdWVzKSwg
PT0sIDMpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihzdGF0aWNfY2FzdDxjaGFyKj4oZ19oYXNoX3Rh
YmxlX2xvb2t1cCh2YWx1ZXMsICJ0ZXh0MSIpKSwgPT0sICJ2YWx1ZTEiKTsKLSAgICBnX2Fzc2Vy
dF9jbXBzdHIoc3RhdGljX2Nhc3Q8Y2hhcio+KGdfaGFzaF90YWJsZV9sb29rdXAodmFsdWVzLCAi
dGV4dDIiKSksID09LCAidmFsdWUyIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHN0YXRpY19jYXN0
PGNoYXIqPihnX2hhc2hfdGFibGVfbG9va3VwKHZhbHVlcywgInBhc3N3b3JkIikpLCA9PSwgInNl
Y3JldCIpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQoZ19zdHJ2X2xlbmd0aChjb25zdF9jYXN0PGdj
aGFyKio+KHZhbHVlcykpLCA9PSwgNSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlc1swXSwg
PT0sICJ2YWx1ZTEiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVzWzFdLCA9PSwgInZhbHVl
MiIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZXNbMl0sID09LCAidmFsdWUzIik7CisgICAg
Z19hc3NlcnRfY21wc3RyKHZhbHVlc1szXSwgPT0sICIiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIo
dmFsdWVzWzRdLCA9PSwgInNlY3JldCIpOworICAgIGdfYXNzZXJ0KCF2YWx1ZXNbNV0pOwogfQog
I2VuZGlmIC8vIFBMQVRGT1JNKEdUSykKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329052</attachid>
            <date>2017-12-11 16:12:04 -0800</date>
            <delta_ts>2017-12-18 00:52:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176725-20171211181203.patch</filename>
            <type>text/plain</type>
            <size>15397</size>
            <attacher name="Michael Catanzaro">mcatanzaro</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI1NzQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDBkOWQ5YjFjOTFmNDgwNzE2
NjU2MDYzOWFlYTdjNzI4MzAwNTE1NzUuLmRjZWU2MWJkMmRlNDk4YWM3NGI1MDFjOTAxM2NiMzQx
N2ZhNmE3ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTctMTItMTEgIE1pY2hhZWwg
Q2F0YW56YXJvICA8bWNhdGFuemFyb0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtXUEVdW0dUS10g
RGVwcmVjYXRlIGFuZCByZXBsYWNlIHdlYmtpdF9mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdF9nZXRf
dGV4dF9maWVsZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3NjcyNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoZSBwcm9ibGVtIGlzIHRoaXMgZnVuY3Rpb24gcmV0dXJucyByZXN1bHRzIGluIGEgR0hh
c2hUYWJsZSwgYnV0IG1hbnkgZmllbGRzIGNhbiBoYXZlIHRoZQorICAgICAgICBzYW1lIG5hbWUs
IG9yIG5vIG5hbWUgYXQgYWxsLCBhbmQgdGhvc2UgZmllbGRzIGFyZSBjdXJyZW50bHkganVzdCBk
cm9wcGVkLiBJdCdzIGltcG9zc2libGUKKyAgICAgICAgdG8gZml4LCBzaW5jZSB0aGUgR0hhc2hU
YWJsZSBpcyBwYXJ0IG9mIHRoZSBBUEksIHNvIGRlcHJlY2F0ZSBpdCBhbmQgYWRkIGEgbmV3IGZ1
bmN0aW9uIHRoYXQKKyAgICAgICAgcmV0dXJucyB0d28gR1B0ckFycmF5cyBpbnN0ZWFkLgorCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdEZvcm1TdWJtaXNzaW9uUmVxdWVzdC5j
cHA6CisgICAgICAgICh3ZWJraXRGb3JtU3VibWlzc2lvblJlcXVlc3RDcmVhdGUpOgorICAgICAg
ICAod2Via2l0X2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X2dldF90ZXh0X2ZpZWxkcyk6CisgICAg
ICAgICh3ZWJraXRfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3RfbGlzdF90ZXh0X2ZpZWxkcyk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Rm9ybVN1Ym1pc3Npb25SZXF1ZXN0Lmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9u
cy50eHQ6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Rm9ybVN1Ym1pc3Npb25S
ZXF1ZXN0Lmg6CisKIDIwMTctMTItMTAgIFN0ZXBoYW4gU3phYm8gIDxzdGVwaGFuLnN6YWJvQHNv
bnkuY29tPgogCiAgICAgICAgIEFQSUNsaWVudC5oIHVzZXMgdGhpbmdzIGZyb20gPHR1cGxlPiB3
aXRob3V0IGluY2x1ZGluZyBpdCBleHBsaWNpdGx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRGb3JtU3VibWlzc2lvblJlcXVlc3QuY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Rm9ybVN1Ym1pc3Npb25SZXF1ZXN0
LmNwcAppbmRleCBjYzI3NTRmNjViNTg1ZmM4ZDEyYzljODczNzYzNGRlYjY3ZmUwNGQ1Li43Y2Vm
ZTFmNDUyYjIwNDVhMjEzNWVhMjk2MTZlMDM0YzJlMTI3NThjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRGb3JtU3VibWlzc2lvblJlcXVlc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdEZvcm1TdWJtaXNz
aW9uUmVxdWVzdC5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJXZWJGb3JtU3VibWlz
c2lvbkxpc3RlbmVyUHJveHkuaCIKICNpbmNsdWRlICJXZWJLaXRGb3JtU3VibWlzc2lvblJlcXVl
c3RQcml2YXRlLmgiCiAjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9nbGliL0dVbmlxdWVQdHIuaD4KICNpbmNsdWRlIDx3dGYvZ2xpYi9XVEZHVHlwZS5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAtMzgsMTUgKzM5LDE1IEBAIHVzaW5nIG5h
bWVzcGFjZSBXZWJLaXQ7CiAgKiBXaGVuIGEgZm9ybSBpcyBhYm91dCB0byBiZSBzdWJtaXR0ZWQg
aW4gYSAjV2ViS2l0V2ViVmlldywgdGhlCiAgKiAjV2ViS2l0V2ViVmlldzo6c3VibWl0LWZvcm0g
c2lnbmFsIGlzIGVtaXR0ZWQuIEl0cyByZXF1ZXN0IGFyZ3VtZW50CiAgKiBjb250YWlucyBpbmZv
cm1hdGlvbiBhYm91dCB0aGUgdGV4dCBmaWVsZHMgb2YgdGhlIGZvcm0sIHRoYXQgYXJlCi0gKiB0
eXBpY2FsbHkgdXNlZCB0byBzdG9yZSBsb2dpbiBpbmZvcm1hdGlvbiwgcmV0dXJuZWQgaW4gYQot
ICogI0dIYXNoVGFibGUgYnkgdGhlIHdlYmtpdF9mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdF9nZXRf
dGV4dF9maWVsZHMoKQotICogbWV0aG9kLCBhbmQgeW91IGNhbiBmaW5hbGx5IHN1Ym1pdCB0aGUg
Zm9ybSB3aXRoCi0gKiB3ZWJraXRfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3Rfc3VibWl0KCkuCi0g
KgorICogdHlwaWNhbGx5IHVzZWQgdG8gc3RvcmUgbG9naW4gaW5mb3JtYXRpb24sIHJldHVybmVk
IGFzIGxpc3RzIGJ5CisgKiB3ZWJraXRfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3RfbGlzdF90ZXh0
X2ZpZWxkcygpLiBZb3UgY2FuIHN1Ym1pdCB0aGUKKyAqIGZvcm0gd2l0aCB3ZWJraXRfZm9ybV9z
dWJtaXNzaW9uX3JlcXVlc3Rfc3VibWl0KCkuCiAgKi8KIAogc3RydWN0IF9XZWJLaXRGb3JtU3Vi
bWlzc2lvblJlcXVlc3RQcml2YXRlIHsKICAgICBSZWZQdHI8V2ViRm9ybVN1Ym1pc3Npb25MaXN0
ZW5lclByb3h5PiBsaXN0ZW5lcjsKKyAgICBHUmVmUHRyPEdQdHJBcnJheT4gdGV4dEZpZWxkTmFt
ZXM7CisgICAgR1JlZlB0cjxHUHRyQXJyYXk+IHRleHRGaWVsZFZhbHVlczsKICAgICBHUmVmUHRy
PEdIYXNoVGFibGU+IHZhbHVlczsKICAgICBib29sIGhhbmRsZWRSZXF1ZXN0OwogfTsKQEAgLTc0
LDkgKzc1LDEyIEBAIFdlYktpdEZvcm1TdWJtaXNzaW9uUmVxdWVzdCogd2Via2l0Rm9ybVN1Ym1p
c3Npb25SZXF1ZXN0Q3JlYXRlKGNvbnN0IFZlY3RvcjxzdGQ6CiB7CiAgICAgV2ViS2l0Rm9ybVN1
Ym1pc3Npb25SZXF1ZXN0KiByZXF1ZXN0ID0gV0VCS0lUX0ZPUk1fU1VCTUlTU0lPTl9SRVFVRVNU
KGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9GT1JNX1NVQk1JU1NJT05fUkVRVUVTVCwgbnVsbHB0
cikpOwogICAgIGlmICh2YWx1ZXMuc2l6ZSgpKSB7Ci0gICAgICAgIHJlcXVlc3QtPnByaXYtPnZh
bHVlcyA9IGFkb3B0R1JlZihnX2hhc2hfdGFibGVfbmV3X2Z1bGwoZ19zdHJfaGFzaCwgZ19zdHJf
ZXF1YWwsIGdfZnJlZSwgZ19mcmVlKSk7Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYgcGFpciA6
IHZhbHVlcykKLSAgICAgICAgICAgIGdfaGFzaF90YWJsZV9pbnNlcnQocmVxdWVzdC0+cHJpdi0+
dmFsdWVzLmdldCgpLCBnX3N0cmR1cChwYWlyLmZpcnN0LnV0ZjgoKS5kYXRhKCkpLCBnX3N0cmR1
cChwYWlyLnNlY29uZC51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIHJlcXVlc3QtPnByaXYtPnRl
eHRGaWVsZE5hbWVzID0gYWRvcHRHUmVmKGdfcHRyX2FycmF5X25ld19mdWxsKHZhbHVlcy5zaXpl
KCksIGdfZnJlZSkpOworICAgICAgICByZXF1ZXN0LT5wcml2LT50ZXh0RmllbGRWYWx1ZXMgPSBh
ZG9wdEdSZWYoZ19wdHJfYXJyYXlfbmV3X2Z1bGwodmFsdWVzLnNpemUoKSwgZ19mcmVlKSk7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgaSsrKSB7CisgICAg
ICAgICAgICBnX3B0cl9hcnJheV9hZGQocmVxdWVzdC0+cHJpdi0+dGV4dEZpZWxkTmFtZXMuZ2V0
KCksIHN0YXRpY19jYXN0PGdwb2ludGVyPihnX3N0cmR1cCh2YWx1ZXNbaV0uZmlyc3QudXRmOCgp
LmRhdGEoKSkpKTsKKyAgICAgICAgICAgIGdfcHRyX2FycmF5X2FkZChyZXF1ZXN0LT5wcml2LT50
ZXh0RmllbGRWYWx1ZXMuZ2V0KCksIHN0YXRpY19jYXN0PGdwb2ludGVyPihnX3N0cmR1cCh2YWx1
ZXNbaV0uc2Vjb25kLnV0ZjgoKS5kYXRhKCkpKSk7CisgICAgICAgIH0KICAgICB9CiAgICAgcmVx
dWVzdC0+cHJpdi0+bGlzdGVuZXIgPSBXVEZNb3ZlKGxpc3RlbmVyKTsKICAgICByZXR1cm4gcmVx
dWVzdDsKQEAgLTg3LDE4ICs5MSw2NCBAQCBXZWJLaXRGb3JtU3VibWlzc2lvblJlcXVlc3QqIHdl
YmtpdEZvcm1TdWJtaXNzaW9uUmVxdWVzdENyZWF0ZShjb25zdCBWZWN0b3I8c3RkOgogICogQHJl
cXVlc3Q6IGEgI1dlYktpdEZvcm1TdWJtaXNzaW9uUmVxdWVzdAogICoKICAqIEdldCBhICNHSGFz
aFRhYmxlIHdpdGggdGhlIHZhbHVlcyBvZiB0aGUgdGV4dCBmaWVsZHMgY29udGFpbmVkIGluIHRo
ZSBmb3JtCi0gKiBhc3NvY2lhdGVkIHRvIEByZXF1ZXN0LgorICogYXNzb2NpYXRlZCB0byBAcmVx
dWVzdC4gTm90ZSB0aGF0IGZpZWxkcyB3aWxsIGJlIG1pc3NpbmcgaWYgdGhlIGZvcm0KKyAqIGNv
bnRhaW5zIG11bHRpcGxlIHRleHQgaW5wdXQgZWxlbWVudHMgd2l0aCB0aGUgc2FtZSBuYW1lLCBz
byB0aGlzCisgKiBmdW5jdGlvbiBkb2VzIG5vdCByZWxpYWJseSByZXR1cm4gYWxsIHRleHQgZmll
bGRzLgorICoKKyAqIFJldHVybnM6IChhbGxvdy1ub25lKSAodHJhbnNmZXIgbm9uZSk6IGEgI0dI
YXNoVGFibGUgd2l0aCB0aGUgZm9ybQorICogICAgdGV4dCBmaWVsZHMsIG9yICVOVUxMIGlmIHRo
ZSBmb3JtIGRvZXNuJ3QgY29udGFpbiB0ZXh0IGZpZWxkcy4KICAqCi0gKiBSZXR1cm5zOiAodHJh
bnNmZXIgbm9uZSk6IGEgI0dIYXNoVGFibGUgd2l0aCB0aGUgZm9ybSB0ZXh0IGZpZWxkcywgb3Ig
JU5VTEwgaWYgdGhlCi0gKiAgICBmb3JtIGRvZXNuJ3QgY29udGFpbiB0ZXh0IGZpZWxkcy4KKyAq
IERlcHJlY2F0ZWQ6IDIuMjAuIFVzZSB3ZWJraXRfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3RfbGlz
dF90ZXh0X2ZpZWxkcygpIGluc3RlYWQuCiAgKi8KIEdIYXNoVGFibGUqIHdlYmtpdF9mb3JtX3N1
Ym1pc3Npb25fcmVxdWVzdF9nZXRfdGV4dF9maWVsZHMoV2ViS2l0Rm9ybVN1Ym1pc3Npb25SZXF1
ZXN0KiByZXF1ZXN0KQogewogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19GT1JN
X1NVQk1JU1NJT05fUkVRVUVTVChyZXF1ZXN0KSwgbnVsbHB0cik7CiAKKyAgICBpZiAoIXJlcXVl
c3QtPnByaXYtPnZhbHVlcykgeworICAgICAgICByZXF1ZXN0LT5wcml2LT52YWx1ZXMgPSBhZG9w
dEdSZWYoZ19oYXNoX3RhYmxlX25ld19mdWxsKGdfc3RyX2hhc2gsIGdfc3RyX2VxdWFsLCBnX2Zy
ZWUsIGdfZnJlZSkpOworICAgICAgICBBU1NFUlQocmVxdWVzdC0+cHJpdi0+dGV4dEZpZWxkTmFt
ZXMtPmxlbiA9PSByZXF1ZXN0LT5wcml2LT50ZXh0RmllbGRWYWx1ZXMtPmxlbik7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXF1ZXN0LT5wcml2LT50ZXh0RmllbGROYW1lcy0+
bGVuOyBpKyspIHsKKyAgICAgICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gbmFtZShnX3N0cmR1cChz
dGF0aWNfY2FzdDxjaGFyKj4ocmVxdWVzdC0+cHJpdi0+dGV4dEZpZWxkTmFtZXMtPnBkYXRhW2ld
KSkpOworICAgICAgICAgICAgR1VuaXF1ZVB0cjxjaGFyPiB2YWx1ZShnX3N0cmR1cChzdGF0aWNf
Y2FzdDxjaGFyKj4ocmVxdWVzdC0+cHJpdi0+dGV4dEZpZWxkVmFsdWVzLT5wZGF0YVtpXSkpKTsK
KyAgICAgICAgICAgIGdfaGFzaF90YWJsZV9pbnNlcnQocmVxdWVzdC0+cHJpdi0+dmFsdWVzLmdl
dCgpLCBzdGF0aWNfY2FzdDxncG9pbnRlcj4obmFtZS5yZWxlYXNlKCkpLCBzdGF0aWNfY2FzdDxn
cG9pbnRlcj4odmFsdWUucmVsZWFzZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKICAgICByZXR1
cm4gcmVxdWVzdC0+cHJpdi0+dmFsdWVzLmdldCgpOwogfQogCisvKioKKyAqIHdlYmtpdF9mb3Jt
X3N1Ym1pc3Npb25fcmVxdWVzdF9saXN0X3RleHRfZmllbGRzOgorICogQHJlcXVlc3Q6IGEgI1dl
YktpdEZvcm1TdWJtaXNzaW9uUmVxdWVzdAorICogQGZpZWxkX25hbWVzOiAob3V0KSAob3B0aW9u
YWwpIChlbGVtZW50LXR5cGUgdXRmOCkgKHRyYW5zZmVyIG5vbmUpOgorICogICAgbmFtZXMgb2Yg
dGhlIHRleHQgZmllbGRzIGluIHRoZSBmb3JtCisgKiBAZmllbGRfdmFsdWVzOiAob3V0KSAob3B0
aW9uYWwpIChlbGVtZW50LXR5cGUgdXRmOCkgKHRyYW5zZmVyIG5vbmUpOgorICogICAgdmFsdWVz
IG9mIHRoZSB0ZXh0IGZpZWxkcyBpbiB0aGUgZm9ybQorICoKKyAqIEdldCBsaXN0cyB3aXRoIHRo
ZSBuYW1lcyBhbmQgdmFsdWVzIG9mIHRoZSB0ZXh0IGZpZWxkcyBjb250YWluZWQgaW4KKyAqIHRo
ZSBmb3JtIGFzc29jaWF0ZWQgdG8gQHJlcXVlc3QuIE5vdGUgdGhhdCBuYW1lcyBhbmQgdmFsdWVz
IG1heSBiZQorICogJU5VTEwuCisgKgorICogSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zICVGQUxT
RSwgdGhlbiBib3RoIEBmaWVsZF9uYW1lcyBhbmQKKyAqIEBmaWVsZF92YWx1ZXMgd2lsbCBiZSBl
bXB0eS4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgZm9ybSBjb250YWlucyB0ZXh0IGZp
ZWxkcworICoKKyAqIFNpbmNlOiAyLjIwCisgKi8KK2dib29sZWFuIHdlYmtpdF9mb3JtX3N1Ym1p
c3Npb25fcmVxdWVzdF9saXN0X3RleHRfZmllbGRzKFdlYktpdEZvcm1TdWJtaXNzaW9uUmVxdWVz
dCogcmVxdWVzdCwgR1B0ckFycmF5KiogZmllbGROYW1lcywgR1B0ckFycmF5KiogZmllbGRWYWx1
ZXMpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0ZPUk1fU1VCTUlTU0lP
Tl9SRVFVRVNUKHJlcXVlc3QpLCBGQUxTRSk7CisKKyAgICBpZiAoZmllbGROYW1lcykKKyAgICAg
ICAgKmZpZWxkTmFtZXMgPSByZXF1ZXN0LT5wcml2LT50ZXh0RmllbGROYW1lcy5nZXQoKTsKKyAg
ICBpZiAoZmllbGRWYWx1ZXMpCisgICAgICAgICpmaWVsZFZhbHVlcyA9IHJlcXVlc3QtPnByaXYt
PnRleHRGaWVsZFZhbHVlcy5nZXQoKTsKKworICAgIEFTU0VSVChyZXF1ZXN0LT5wcml2LT50ZXh0
RmllbGROYW1lcy0+bGVuID09IHJlcXVlc3QtPnByaXYtPnRleHRGaWVsZFZhbHVlcy0+bGVuKTsK
KyAgICByZXR1cm4gISFyZXF1ZXN0LT5wcml2LT50ZXh0RmllbGROYW1lcy0+bGVuOworfQorCiAv
KioKICAqIHdlYmtpdF9mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdF9zdWJtaXQ6CiAgKiBAcmVxdWVz
dDogYSAjV2ViS2l0Rm9ybVN1Ym1pc3Npb25SZXF1ZXN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZvcm1TdWJtaXNzaW9uUmVxdWVzdC5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGb3JtU3VibWlzc2lvblJlcXVlc3Qu
aAppbmRleCBlMjc3NzliMzQyNjFiYmYzOTU4ZGMzYzBmNjAwZWU4OGIzZmMxZGU2Li5lNTU1ZWYx
ZTk0NDljY2YzMmM1ZTI4YTg3MzkzNTE0M2U5NTNjMWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZvcm1TdWJtaXNzaW9uUmVxdWVzdC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Rm9ybVN1Ym1pc3Npb25SZXF1
ZXN0LmgKQEAgLTU3LDEzICs1NywxOCBAQCBzdHJ1Y3QgX1dlYktpdEZvcm1TdWJtaXNzaW9uUmVx
dWVzdENsYXNzIHsKIH07CiAKIFdFQktJVF9BUEkgR1R5cGUKLXdlYmtpdF9mb3JtX3N1Ym1pc3Np
b25fcmVxdWVzdF9nZXRfdHlwZSAgICAgICAgKHZvaWQpOword2Via2l0X2Zvcm1fc3VibWlzc2lv
bl9yZXF1ZXN0X2dldF90eXBlICAgICAgICAgKHZvaWQpOwogCi1XRUJLSVRfQVBJIEdIYXNoVGFi
bGUgKgotd2Via2l0X2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X2dldF90ZXh0X2ZpZWxkcyAoV2Vi
S2l0Rm9ybVN1Ym1pc3Npb25SZXF1ZXN0ICpyZXF1ZXN0KTsKK1dFQktJVF9ERVBSRUNBVEVEX0ZP
Uih3ZWJraXRfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3RfbGlzdF90ZXh0X2ZpZWxkcykgR0hhc2hU
YWJsZSAqCit3ZWJraXRfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3RfZ2V0X3RleHRfZmllbGRzICAo
V2ViS2l0Rm9ybVN1Ym1pc3Npb25SZXF1ZXN0ICAqcmVxdWVzdCk7CisKK1dFQktJVF9BUEkgZ2Jv
b2xlYW4KK3dlYmtpdF9mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdF9saXN0X3RleHRfZmllbGRzIChX
ZWJLaXRGb3JtU3VibWlzc2lvblJlcXVlc3QgICpyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQdHJBcnJheSAgICAgICAgICAgICAgICAg
ICAqKmZpZWxkX25hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdQdHJBcnJheSAgICAgICAgICAgICAgICAgICAqKmZpZWxkX3ZhbHVlcyk7CiAK
IFdFQktJVF9BUEkgdm9pZAotd2Via2l0X2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X3N1Ym1pdCAg
ICAgICAgICAoV2ViS2l0Rm9ybVN1Ym1pc3Npb25SZXF1ZXN0ICpyZXF1ZXN0KTsKK3dlYmtpdF9m
b3JtX3N1Ym1pc3Npb25fcmVxdWVzdF9zdWJtaXQgICAgICAgICAgIChXZWJLaXRGb3JtU3VibWlz
c2lvblJlcXVlc3QgICpyZXF1ZXN0KTsKIAogR19FTkRfREVDTFMKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4wLXNlY3Rpb25z
LnR4dCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQu
MC1zZWN0aW9ucy50eHQKaW5kZXggY2Q5NGQxMzM3YjEyZjMzMjZmNDY2ZDI3NWVlZmQ3MDIwMWZm
ZmEzOC4uZmQwMjNkNWIyZTQ0Mjk4YTdmMjhlMGVmZGJiNWNlNmM4YjU1NDM3ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4wLXNl
Y3Rpb25zLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Vi
a2l0Mmd0ay00LjAtc2VjdGlvbnMudHh0CkBAIC0xMjM3LDYgKzEyMzcsNyBAQCB3ZWJraXRfb3B0
aW9uX21lbnVfaXRlbV9nZXRfdHlwZQogPEZJTEU+V2ViS2l0Rm9ybVN1Ym1pc3Npb25SZXF1ZXN0
PC9GSUxFPgogV2ViS2l0Rm9ybVN1Ym1pc3Npb25SZXF1ZXN0CiB3ZWJraXRfZm9ybV9zdWJtaXNz
aW9uX3JlcXVlc3RfZ2V0X3RleHRfZmllbGRzCit3ZWJraXRfZm9ybV9zdWJtaXNzaW9uX3JlcXVl
c3RfbGlzdF90ZXh0X2ZpZWxkcwogd2Via2l0X2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X3N1Ym1p
dAogCiA8U1VCU0VDVElPTiBTdGFuZGFyZD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS93cGUvV2ViS2l0Rm9ybVN1Ym1pc3Npb25SZXF1ZXN0LmggYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdEZvcm1TdWJtaXNzaW9uUmVxdWVzdC5oCmluZGV4
IDY4OGMyOGM4YmQwMTY4YTk2OGEwYTExMTQxZjA4OTg3MTQzY2Y1MDIuLjI2YmMwNDYwNzY3ZDY1
ZmQ0MjFiYzI4ZjM4YWUxMDk2OWUyOTc5OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS93cGUvV2ViS2l0Rm9ybVN1Ym1pc3Npb25SZXF1ZXN0LmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRGb3JtU3VibWlzc2lvblJlcXVlc3QuaApA
QCAtNTcsMTMgKzU3LDE4IEBAIHN0cnVjdCBfV2ViS2l0Rm9ybVN1Ym1pc3Npb25SZXF1ZXN0Q2xh
c3MgewogfTsKIAogV0VCS0lUX0FQSSBHVHlwZQotd2Via2l0X2Zvcm1fc3VibWlzc2lvbl9yZXF1
ZXN0X2dldF90eXBlICAgICAgICAodm9pZCk7Cit3ZWJraXRfZm9ybV9zdWJtaXNzaW9uX3JlcXVl
c3RfZ2V0X3R5cGUgICAgICAgICAodm9pZCk7CiAKLVdFQktJVF9BUEkgR0hhc2hUYWJsZSAqCi13
ZWJraXRfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3RfZ2V0X3RleHRfZmllbGRzIChXZWJLaXRGb3Jt
U3VibWlzc2lvblJlcXVlc3QgKnJlcXVlc3QpOworV0VCS0lUX0RFUFJFQ0FURURfRk9SKHdlYmtp
dF9mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdF9saXN0X3RleHRfZmllbGRzKSBHSGFzaFRhYmxlICoK
K3dlYmtpdF9mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdF9nZXRfdGV4dF9maWVsZHMgIChXZWJLaXRG
b3JtU3VibWlzc2lvblJlcXVlc3QgICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQSSBnYm9vbGVhbgor
d2Via2l0X2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X2xpc3RfdGV4dF9maWVsZHMgKFdlYktpdEZv
cm1TdWJtaXNzaW9uUmVxdWVzdCAgKnJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR1B0ckFycmF5ICAgICAgICAgICAgICAgICAgICoqZmll
bGRfbmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR1B0ckFycmF5ICAgICAgICAgICAgICAgICAgICoqZmllbGRfdmFsdWVzKTsKIAogV0VCS0lU
X0FQSSB2b2lkCi13ZWJraXRfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3Rfc3VibWl0ICAgICAgICAg
IChXZWJLaXRGb3JtU3VibWlzc2lvblJlcXVlc3QgKnJlcXVlc3QpOword2Via2l0X2Zvcm1fc3Vi
bWlzc2lvbl9yZXF1ZXN0X3N1Ym1pdCAgICAgICAgICAgKFdlYktpdEZvcm1TdWJtaXNzaW9uUmVx
dWVzdCAgKnJlcXVlc3QpOwogCiBHX0VORF9ERUNMUwogCmRpZmYgLS1naXQgYS9Ub29scy9DaGFu
Z2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZTJiZjhmZWYzM2VjY2M0MzFmMTM0NjI1NmJj
YjJkNjdjMjliMWM5Yy4uZmJlOGRjMjI5MDgzNTFhN2IyZTZlYjdlNzhkMzY3ZTY3YWE4MjgwZCAx
MDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE1IEBACisyMDE3LTEyLTExICBNaWNoYWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdh
bGlhLmNvbT4KKworICAgICAgICBbV1BFXVtHVEtdIERlcHJlY2F0ZSBhbmQgcmVwbGFjZSB3ZWJr
aXRfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3RfZ2V0X3RleHRfZmllbGRzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY3MjUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0IHRoZSBuZXcgZnVuY3Rpb24u
CisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFdlYktpdFdl
YlZpZXcuY3BwOgorICAgICAgICAodGVzdFdlYlZpZXdTdWJtaXRGb3JtKToKKwogMjAxNy0xMi0x
MSAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCwgcm9sbGluZyBvdXQgcjIyNTczNy4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0V2ViS2l0V2ViVmlldy5jcHAgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFdlYktpdFdlYlZpZXcuY3BwCmluZGV4IGY1ZWZk
NzQ4ZjI4M2IyODk1MTFmNWE5NzQ3M2U0NWYwZmIzMTYyNTUuLmZlMGMyY2M0M2Y0N2JhOGUxNzJl
ZjZkNDY1MmM2Nzc2NGI3MjIyYjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0R0xpYi9UZXN0V2ViS2l0V2ViVmlldy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcApAQCAtNDc1LDEwICs0
NzUsMjYgQEAgcHVibGljOgogICAgICAgICBxdWl0TWFpbkxvb3AoKTsKICAgICB9CiAKLSAgICBH
SGFzaFRhYmxlKiB3YWl0VW50aWxGb3JtU3VibWl0dGVkQW5kR2V0VGV4dEZpZWxkcygpCisgICAg
R0hhc2hUYWJsZSogZ2V0VGV4dEZpZWxkc0FzSGFzaFRhYmxlKCkKICAgICB7Ci0gICAgICAgIGdf
bWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAor
I3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25z
IgogICAgICAgICByZXR1cm4gd2Via2l0X2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X2dldF90ZXh0
X2ZpZWxkcyhtX3JlcXVlc3QuZ2V0KCkpOworI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKyAg
ICB9CisKKyAgICBHUHRyQXJyYXkqIGdldFRleHRGaWVsZE5hbWVzKCkKKyAgICB7CisgICAgICAg
IEdQdHJBcnJheSogbmFtZXM7CisgICAgICAgIHdlYmtpdF9mb3JtX3N1Ym1pc3Npb25fcmVxdWVz
dF9saXN0X3RleHRfZmllbGRzKG1fcmVxdWVzdC5nZXQoKSwgJm5hbWVzLCBudWxscHRyKTsKKyAg
ICAgICAgcmV0dXJuIG5hbWVzOworICAgIH0KKworICAgIEdQdHJBcnJheSogZ2V0VGV4dEZpZWxk
VmFsdWVzKCkKKyAgICB7CisgICAgICAgIEdQdHJBcnJheSogdmFsdWVzOworICAgICAgICB3ZWJr
aXRfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3RfbGlzdF90ZXh0X2ZpZWxkcyhtX3JlcXVlc3QuZ2V0
KCksIG51bGxwdHIsICZ2YWx1ZXMpOworICAgICAgICByZXR1cm4gdmFsdWVzOwogICAgIH0KIAog
ICAgIHN0YXRpYyBnYm9vbGVhbiBkb0NsaWNrSWRsZUNhbGxiYWNrKEZvcm1DbGllbnRUZXN0KiB0
ZXN0KQpAQCAtNDkyLDYgKzUwOCw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9zdWJtaXRQb3NpdGlv
blggPSB4OwogICAgICAgICBtX3N1Ym1pdFBvc2l0aW9uWSA9IHk7CiAgICAgICAgIGdfaWRsZV9h
ZGQocmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oZG9DbGlja0lkbGVDYWxsYmFjayksIHRo
aXMpOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CiAgICAgfQogCiAgICAg
aW50IG1fc3VibWl0UG9zaXRpb25YOwpAQCAtNTA4LDYgKzUyNSw4IEBAIHN0YXRpYyB2b2lkIHRl
c3RXZWJWaWV3U3VibWl0Rm9ybShGb3JtQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikK
ICAgICAgICAgIiA8Zm9ybSBhY3Rpb249JyMnPiIKICAgICAgICAgIiAgPGlucHV0IHR5cGU9J3Rl
eHQnIG5hbWU9J3RleHQxJyB2YWx1ZT0ndmFsdWUxJz4iCiAgICAgICAgICIgIDxpbnB1dCB0eXBl
PSd0ZXh0JyBuYW1lPSd0ZXh0MicgdmFsdWU9J3ZhbHVlMic+IgorICAgICAgICAiICA8aW5wdXQg
dHlwZT0ndGV4dCcgdmFsdWU9J3ZhbHVlMyc+IgorICAgICAgICAiICA8aW5wdXQgdHlwZT0ndGV4
dCcgbmFtZT0ndGV4dDInPiIKICAgICAgICAgIiAgPGlucHV0IHR5cGU9J3Bhc3N3b3JkJyBuYW1l
PSdwYXNzd29yZCcgdmFsdWU9J3NlY3JldCc+IgogICAgICAgICAiICA8dGV4dGFyZWEgY29scz0n
NScgcm93cz0nNScgbmFtZT0ndGV4dGFyZWEnPlRleHQ8L3RleHRhcmVhPiIKICAgICAgICAgIiAg
PGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0naGlkZGVuMScgdmFsdWU9J2hpZGRlbjEnPiIKQEAg
LTUxOSwxMiArNTM4LDMxIEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3U3VibWl0Rm9ybShGb3Jt
Q2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICB0ZXN0LT53YWl0VW50aWxMb2Fk
RmluaXNoZWQoKTsKIAogICAgIHRlc3QtPnN1Ym1pdEZvcm1BdFBvc2l0aW9uKDUsIDUpOwotICAg
IEdIYXNoVGFibGUqIHZhbHVlcyA9IHRlc3QtPndhaXRVbnRpbEZvcm1TdWJtaXR0ZWRBbmRHZXRU
ZXh0RmllbGRzKCk7CisgICAgR0hhc2hUYWJsZSogdGFibGVWYWx1ZXMgPSB0ZXN0LT5nZXRUZXh0
RmllbGRzQXNIYXNoVGFibGUoKTsKKyAgICBnX2Fzc2VydCh0YWJsZVZhbHVlcyk7CisgICAgZ19h
c3NlcnRfY21wdWludChnX2hhc2hfdGFibGVfc2l6ZSh0YWJsZVZhbHVlcyksID09LCA0KTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIoc3RhdGljX2Nhc3Q8Y2hhcio+KGdfaGFzaF90YWJsZV9sb29rdXAo
dGFibGVWYWx1ZXMsICJ0ZXh0MSIpKSwgPT0sICJ2YWx1ZTEiKTsKKyAgICBnX2Fzc2VydF9jbXBz
dHIoc3RhdGljX2Nhc3Q8Y2hhcio+KGdfaGFzaF90YWJsZV9sb29rdXAodGFibGVWYWx1ZXMsICIi
KSksID09LCAidmFsdWUzIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHN0YXRpY19jYXN0PGNoYXIq
PihnX2hhc2hfdGFibGVfbG9va3VwKHRhYmxlVmFsdWVzLCAidGV4dDIiKSksID09LCAiIik7Cisg
ICAgZ19hc3NlcnRfY21wc3RyKHN0YXRpY19jYXN0PGNoYXIqPihnX2hhc2hfdGFibGVfbG9va3Vw
KHRhYmxlVmFsdWVzLCAicGFzc3dvcmQiKSksID09LCAic2VjcmV0Iik7CisKKyAgICBHUHRyQXJy
YXkqIG5hbWVzID0gdGVzdC0+Z2V0VGV4dEZpZWxkTmFtZXMoKTsKKyAgICBnX2Fzc2VydChuYW1l
cyk7CisgICAgZ19hc3NlcnRfY21wdWludChuYW1lcy0+bGVuLCA9PSwgNSk7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHN0YXRpY19jYXN0PGNoYXIqPihuYW1lcy0+cGRhdGFbMF0pLCA9PSwgInRleHQx
Iik7CisgICAgZ19hc3NlcnRfY21wc3RyKHN0YXRpY19jYXN0PGNoYXIqPihuYW1lcy0+cGRhdGFb
MV0pLCA9PSwgInRleHQyIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHN0YXRpY19jYXN0PGNoYXIq
PihuYW1lcy0+cGRhdGFbMl0pLCA9PSwgIiIpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzdGF0aWNf
Y2FzdDxjaGFyKj4obmFtZXMtPnBkYXRhWzNdKSwgPT0sICJ0ZXh0MiIpOworICAgIGdfYXNzZXJ0
X2NtcHN0cihzdGF0aWNfY2FzdDxjaGFyKj4obmFtZXMtPnBkYXRhWzRdKSwgPT0sICJwYXNzd29y
ZCIpOworCisgICAgR1B0ckFycmF5KiB2YWx1ZXMgPSB0ZXN0LT5nZXRUZXh0RmllbGRWYWx1ZXMo
KTsKICAgICBnX2Fzc2VydCh2YWx1ZXMpOwotICAgIGdfYXNzZXJ0X2NtcHVpbnQoZ19oYXNoX3Rh
YmxlX3NpemUodmFsdWVzKSwgPT0sIDMpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihzdGF0aWNfY2Fz
dDxjaGFyKj4oZ19oYXNoX3RhYmxlX2xvb2t1cCh2YWx1ZXMsICJ0ZXh0MSIpKSwgPT0sICJ2YWx1
ZTEiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc3RhdGljX2Nhc3Q8Y2hhcio+KGdfaGFzaF90YWJs
ZV9sb29rdXAodmFsdWVzLCAidGV4dDIiKSksID09LCAidmFsdWUyIik7Ci0gICAgZ19hc3NlcnRf
Y21wc3RyKHN0YXRpY19jYXN0PGNoYXIqPihnX2hhc2hfdGFibGVfbG9va3VwKHZhbHVlcywgInBh
c3N3b3JkIikpLCA9PSwgInNlY3JldCIpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQodmFsdWVzLT5s
ZW4sID09LCA1KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc3RhdGljX2Nhc3Q8Y2hhcio+KHZhbHVl
cy0+cGRhdGFbMF0pLCA9PSwgInZhbHVlMSIpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzdGF0aWNf
Y2FzdDxjaGFyKj4odmFsdWVzLT5wZGF0YVsxXSksID09LCAidmFsdWUyIik7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHN0YXRpY19jYXN0PGNoYXIqPih2YWx1ZXMtPnBkYXRhWzJdKSwgPT0sICJ2YWx1
ZTMiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc3RhdGljX2Nhc3Q8Y2hhcio+KHZhbHVlcy0+cGRh
dGFbM10pLCA9PSwgIiIpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzdGF0aWNfY2FzdDxjaGFyKj4o
dmFsdWVzLT5wZGF0YVs0XSksID09LCAic2VjcmV0Iik7CiB9CiAjZW5kaWYgLy8gUExBVEZPUk0o
R1RLKQogCg==
</data>
<flag name="review"
          id="348160"
          type_id="1"
          status="+"
          setter="cgarcia"
    />
    <flag name="commit-queue"
          id="348697"
          type_id="3"
          status="-"
          setter="cgarcia"
    />
          </attachment>
      

    </bug>

</bugzilla>