<?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>154235</bug_id>
          
          <creation_ts>2016-02-15 01:14:22 -0800</creation_ts>
          <short_desc>[GTK][GStreamer] ClearKey EME v1 decryption support</short_desc>
          <delta_ts>2017-02-13 09:35:37 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          <see_also>https://bugzilla.gnome.org/show_bug.cgi?id=761700</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="Philippe Normand">pnormand</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>calvaris</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>j.isorce</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>pnormand</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1164691</commentid>
    <comment_count>0</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2016-02-15 01:14:22 -0800</bug_when>
    <thetext>I&apos;d like to have some optional (disabled by default) EME support in WebKitGTK as a proof of concept.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164696</commentid>
    <comment_count>1</comment_count>
      <attachid>271330</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2016-02-15 01:50:00 -0800</bug_when>
    <thetext>Created attachment 271330
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164697</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-15 01:51:05 -0800</bug_when>
    <thetext>Attachment 271330 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.h:41:  webkit_media_clear_key_decrypt_get_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:28:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:45:  webkit_media_common_encryption_decrypt_get_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:57:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:58:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:59:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:60:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:61:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:66:  webkit_media_clear_key_decrypt_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:96:  webkit_media_clear_key_decrypt_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:56:  webkit_media_common_encryption_decrypt_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:80:  webkit_media_common_encryption_decrypt_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/PlatformGTK.cmake:835:  Alphabetical sorting problem. &quot;platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp&quot; should be before &quot;platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp&quot;.  [list/order] [5]
ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:132:  The parameter name &quot;parameters&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 14 in 11 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>1164700</commentid>
    <comment_count>3</comment_count>
      <attachid>271331</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2016-02-15 02:06:00 -0800</bug_when>
    <thetext>Created attachment 271331
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164702</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-15 02:07:38 -0800</bug_when>
    <thetext>Attachment 271331 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.h:41:  webkit_media_clear_key_decrypt_get_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:28:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:45:  webkit_media_common_encryption_decrypt_get_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:57:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:58:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:59:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:60:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:61:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:66:  webkit_media_clear_key_decrypt_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:96:  webkit_media_clear_key_decrypt_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:56:  webkit_media_common_encryption_decrypt_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:80:  webkit_media_common_encryption_decrypt_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 12 in 11 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>1164706</commentid>
    <comment_count>5</comment_count>
      <attachid>271332</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2016-02-15 02:57:36 -0800</bug_when>
    <thetext>Created attachment 271332
patch

Fixes a GstByteReader leak.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164707</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-15 02:59:06 -0800</bug_when>
    <thetext>Attachment 271332 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.h:41:  webkit_media_clear_key_decrypt_get_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:28:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:45:  webkit_media_common_encryption_decrypt_get_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:57:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:58:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:59:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:60:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:61:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:66:  webkit_media_clear_key_decrypt_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:96:  webkit_media_clear_key_decrypt_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:56:  webkit_media_common_encryption_decrypt_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:80:  webkit_media_common_encryption_decrypt_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 12 in 11 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>1164727</commentid>
    <comment_count>7</comment_count>
      <attachid>271332</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-02-15 04:44:26 -0800</bug_when>
    <thetext>Comment on attachment 271332
patch

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

We should add exceptions to the style checker for the GObject implementations. I&apos;ve only reviewed general issues, I can&apos;t review the media keys implementation itself.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:108
&gt; +    GRefPtr&lt;GstElementFactory&gt; clearKeyDecryptorFactory = gst_element_factory_find(&quot;webkitclearkey&quot;);

adoptGRef

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:110
&gt; +        gst_element_register(0, &quot;webkitclearkey&quot;, GST_RANK_PRIMARY + 100, WEBKIT_TYPE_MEDIA_CK_DECRYPT);

0 -&gt; nullptr

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:261
&gt; +        GstBuffer* data;
&gt; +        const char* keySystemId;
&gt; +        gboolean valid = gst_structure_get(structure, &quot;data&quot;, GST_TYPE_BUFFER, &amp;data, &quot;key-system-id&quot;, G_TYPE_STRING, &amp;keySystemId, nullptr);

According to the API docs, gst_structure_get returns a new allocated string for strings, and I guess we are also getting a new ref for the GstBuffer. So, this is probably leaking both

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:267
&gt; +        needKey(keySystemId, createCanonicalUUIDString(), reinterpret_cast&lt;const unsigned char *&gt;(mapInfo.data), mapInfo.size);

const unsigned char * -&gt; const unsigned char*

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:896
&gt; +    if (!equalIgnoringASCIICase(keySystem, &quot;org.w3.clearkey&quot;))
&gt; +        return MediaPlayer::KeySystemNotSupported;

Instead of duplication this check here, we could call supportsKeySystem instead, or move this check to a helper function and use it from both places.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:908
&gt; +    if (!equalIgnoringASCIICase(keySystem, &quot;org.w3.clearkey&quot;))
&gt; +        return MediaPlayer::KeySystemNotSupported;

Same check again

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:931
&gt; +    if (parameters.keySystem.isNull() || parameters.keySystem.isEmpty())

parameters.keySystem.isEmpty() returns true if it&apos;s null

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:57
&gt; +void registerWebKitGStreamerElements();
&gt; +

Why does this need to be here? Can&apos;t this be a static function?

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:126
&gt; +    MediaPlayer::MediaKeyException addKey(const String&amp;, const unsigned char*, unsigned, const unsigned char*, unsigned, const String&amp;);
&gt; +    MediaPlayer::MediaKeyException generateKeyRequest(const String&amp;, const unsigned char*, unsigned);
&gt; +    MediaPlayer::MediaKeyException cancelKeyRequest(const String&amp;, const String&amp;);

This should be marked override, and I don&apos;t think they need to be public.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:127
&gt; +    void needKey(const String&amp;, const String&amp;, const unsigned char*, unsigned);

This could be private too, no?

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:128
&gt; +    virtual void dispatchDecryptionKey(GstBuffer*);

Why is this virtual and public?

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:25
&gt; +#if ENABLE(ENCRYPTED_MEDIA) &amp;&amp; USE(GSTREAMER)
&gt; +#include &quot;WebKitClearKeyDecryptorGStreamer.h&quot;

The header already has guards, so move it right after the config.h to follow the coding style.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:32
&gt; +#define CLEARKEY_SIZE 16

Can this be a static const unsigned?

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:34
&gt; +#define WEBKIT_MEDIA_CK_DECRYPT_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), WEBKIT_TYPE_MEDIA_CK_DECRYPT, WebKitMediaClearKeyDecryptPrivate))

Don&apos;t do this, use G_TYPE_INSTANCE_GET_PRIVATE directly in the init method.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:45
&gt; +static void webKitMediaClearKeyDecryptorFinalize(GObject*);
&gt; +static void webKitMediaClearKeyDecryptorRequestDecryptionKey(WebKitMediaCommonEncryptionDecrypt* self, GstBuffer*);
&gt; +static gboolean webKitMediaClearKeyDecryptorHandleKeyResponse(WebKitMediaCommonEncryptionDecrypt* self, GstEvent*);
&gt; +static gboolean webKitMediaClearKeyDecryptorSetupCipher(WebKitMediaCommonEncryptionDecrypt*);
&gt; +static gboolean webKitMediaClearKeyDecryptorDecrypt(WebKitMediaCommonEncryptionDecrypt*, GstBuffer* iv, GstBuffer* sample, unsigned subSamplesCount, GstBuffer* subSamples);
&gt; +static void webKitMediaClearKeyDecryptorReleaseCipher(WebKitMediaCommonEncryptionDecrypt*);

Do we really need all this prototypes, or can we reorder the functions to avoid them?

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:50
&gt; +#define CLEAR_KEY_PROTECTION_SYSTEM_ID &quot;58147ec8-0423-4659-92e6-f52c5ce8c3cc&quot;

Can this be static const char*?

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:64
&gt; +G_DEFINE_TYPE(WebKitMediaClearKeyDecrypt, webkit_media_clear_key_decrypt, WEBKIT_TYPE_MEDIA_CENC_DECRYPT);

Trailing ; is not needed.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:70
&gt; +    WebKitMediaCommonEncryptionDecryptClass* cencClass = WEBKIT_MEDIA_CENC_DECRYPT_CLASS(klass);
&gt; +    GstElementClass* elementClass = GST_ELEMENT_CLASS(klass);
&gt; +    GObjectClass* gobjectClass = G_OBJECT_CLASS(klass);

Move the declarations to where they are fist used.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:133
&gt; +    WebKitMediaClearKeyDecryptPrivate* priv = WEBKIT_MEDIA_CK_DECRYPT_GET_PRIVATE(WEBKIT_MEDIA_CK_DECRYPT(self));

WebKitMediaClearKeyDecryptPrivate* priv = self-&gt;priv;

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:141
&gt; +    priv-&gt;key.clear();
&gt; +    priv-&gt;key = adoptGRef(gst_buffer_copy(gst_value_get_buffer(value)));

We don&apos;t need to clear the GRefPtr right before assigning a new value.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:147
&gt; +    WebKitMediaClearKeyDecryptPrivate* priv = WEBKIT_MEDIA_CK_DECRYPT_GET_PRIVATE(WEBKIT_MEDIA_CK_DECRYPT(self));

WebKitMediaClearKeyDecryptPrivate* priv = self-&gt;priv;

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:153
&gt; +        return false;

FALSE

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:156
&gt; +    error = gcry_cipher_open(&amp;(priv-&gt;handle), GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_CTR, GCRY_CIPHER_SECURE);

gcry_error_t error = gcry_cipher_open(&amp;(priv-&gt;handle), GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_CTR, GCRY_CIPHER_SECURE);

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:159
&gt; +        return false;

FALSE

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:165
&gt; +        return false;

FALSE

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:173
&gt; +        return false;

FALSE

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:176
&gt; +    return true;

TRUE

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:181
&gt; +    WebKitMediaClearKeyDecryptPrivate* priv = WEBKIT_MEDIA_CK_DECRYPT_GET_PRIVATE(WEBKIT_MEDIA_CK_DECRYPT(self));

WebKitMediaClearKeyDecryptPrivate* priv = self-&gt;priv;

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:188
&gt; +    GstMapInfo map, ivMap, subSamplesMap;
&gt; +    unsigned position = 0;
&gt; +    unsigned sampleIndex = 0;
&gt; +    uint8_t ctr[CLEARKEY_SIZE];
&gt; +    GstByteReader* reader = nullptr;
&gt; +    gboolean bufferMapped, subsamplesBufferMapped;
&gt; +    gcry_error_t error;

Move all these to where they are first used.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:192
&gt; +        return false;

FALSE

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:206
&gt; +        return false;

FALSE

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:212
&gt; +        return false;

FALSE

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:219
&gt; +        return false;

FALSE

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:227
&gt; +        guint16 nBytesClear = 0;
&gt; +        guint32 nBytesEncrypted = 0;

Nit: We normally use fooCount instead of nFoo

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:231
&gt; +            if (!gst_byte_reader_get_uint16_be(reader, &amp;nBytesClear)
&gt; +                || !gst_byte_reader_get_uint32_be(reader, &amp;nBytesEncrypted)) {

This could be a single line

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:233
&gt; +                gst_byte_reader_free(reader);

We could add a GUniquePtr for this.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:236
&gt; +                return false;

FALSE

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:255
&gt; +                return false;

FALSE

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:264
&gt; +    return true;

TRUE

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:270
&gt; +    WebKitMediaClearKeyDecryptPrivate* priv = WEBKIT_MEDIA_CK_DECRYPT_GET_PRIVATE(WEBKIT_MEDIA_CK_DECRYPT(self));
&gt; +    gcry_cipher_close(priv-&gt;handle);

gcry_cipher_close(self-&gt;priv-&gt;handle);

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:26
&gt; +#if ENABLE(ENCRYPTED_MEDIA) &amp;&amp; USE(GSTREAMER)
&gt; +#include &quot;WebKitCommonEncryptionDecryptorGStreamer.h&quot;

The header already has guards, so move it right after the config.h to follow the coding style.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:32
&gt; +#define WEBKIT_MEDIA_CENC_DECRYPT_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), WEBKIT_TYPE_MEDIA_CENC_DECRYPT, WebKitMediaCommonEncryptionDecryptPrivate))

Don&apos;t do this, use G_TYPE_INSTANCE_GET_PRIVATE directly in the init method.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:48
&gt; +static GstStateChangeReturn webKitMediaCommonEncryptionDecryptorChangeState(GstElement*, GstStateChange transition);
&gt; +static void webKitMediaCommonEncryptionDecryptorFinalize(GObject*);
&gt; +static GstCaps* webkitMediaCommonEncryptionDecryptTransformCaps(GstBaseTransform*, GstPadDirection, GstCaps*, GstCaps*);
&gt; +static GstFlowReturn webkitMediaCommonEncryptionDecryptTransformInPlace(GstBaseTransform*, GstBuffer*);
&gt; +static gboolean webkitMediaCommonEncryptionDecryptSinkEventHandler(GstBaseTransform*, GstEvent*);
&gt; +
&gt; +static gboolean webKitMediaCommonEncryptionDecryptDefaultSetupCipher(WebKitMediaCommonEncryptionDecrypt*);
&gt; +static void webKitMediaCommonEncryptionDecryptDefaultReleaseCipher(WebKitMediaCommonEncryptionDecrypt*);

Do we really need all this prototypes, or can we reorder the functions to avoid them?

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:54
&gt; +G_DEFINE_TYPE(WebKitMediaCommonEncryptionDecrypt, webkit_media_common_encryption_decrypt, GST_TYPE_BASE_TRANSFORM);

Trailing ; is not needed.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:60
&gt; +    GstBaseTransformClass* baseTransformClass = GST_BASE_TRANSFORM_CLASS(klass);
&gt; +    GstElementClass* elementClass = GST_ELEMENT_CLASS(klass);
&gt; +    GObjectClass* gobjectClass = G_OBJECT_CLASS(klass);

Move the declarations to where they are fist used.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:134
&gt; +            GstStructure* tmp = gst_structure_copy(in);

GUniquePtr

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:164
&gt; +        bool duplicate = false;

I guess this means whether it&apos;s duplicated, not whether to duplicate it or not, no? I would use duplicated or isDuplicated in that case.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:168
&gt; +            GstStructure* s = gst_caps_get_structure(transformedCaps, index);

Don&apos;t use &quot;s&quot;, use a full world instead.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:170
&gt; +                duplicate = true;

I guess we can break the loop here

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:176
&gt; +        if (!duplicate)
&gt; +            gst_caps_append_structure(transformedCaps, out);
&gt; +        else
&gt; +            gst_structure_free(out);

We could uise GUniquePtr for out, and leak the value in the !duplicate case to transfer the ownership.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:183
&gt; +        intersection = gst_caps_intersect_full(transformedCaps, filter, GST_CAPS_INTERSECT_FIRST);

GstCaps* intersection = gst_caps_intersect_full(transformedCaps, filter, GST_CAPS_INTERSECT_FIRST);

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:202
&gt; +    WebKitMediaCommonEncryptionDecrypt* self = WEBKIT_MEDIA_CENC_DECRYPT(base);
&gt; +    WebKitMediaCommonEncryptionDecryptClass* klass = WEBKIT_MEDIA_CENC_DECRYPT_GET_CLASS(self);
&gt; +    WebKitMediaCommonEncryptionDecryptPrivate* priv = WEBKIT_MEDIA_CENC_DECRYPT_GET_PRIVATE(self);
&gt; +    guint subSampleCount, ivSize;
&gt; +    gboolean encrypted;
&gt; +    const GValue* value;
&gt; +    GstBuffer* ivBuffer = nullptr;
&gt; +    GstBuffer* subSamplesBuffer = nullptr;
&gt; +    GstProtectionMeta* protectionMeta;

Move the declarations to where they are fist used.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:208
&gt; +    if (!priv-&gt;keyReceived)
&gt; +        priv-&gt;condition.wait(priv-&gt;mutex);

I guess this can&apos;t happen in the main thread? Add ASSERT(!isMainThread()) in that case to be sure.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:210
&gt; +    protectionMeta = reinterpret_cast&lt;GstProtectionMeta*&gt;(gst_buffer_get_protection_meta(buffer));

Why reinterpret cast? What does gst_buffer_get_protection_meta returns? a GstMeta*? I would make protectionMeta a GstMeta* instead and we don&apos;t need all the casts

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:250
&gt; +    if (!klass-&gt;setupCipher(self)) {

Use mediaEncClass or any other name that makes it clear what this class is

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:298
&gt; +            result = TRUE;
&gt; +            break;

return TRUE

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:305
&gt; +            if (self) {

This is not correct way to check if self is still alive. You should either use a weak ref/ptr, or protect the object with GRefPtr, and capture that.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:307
&gt; +                WebKitMediaCommonEncryptionDecryptClass* klass = WEBKIT_MEDIA_CENC_DECRYPT_GET_CLASS(self);
&gt; +                klass-&gt;requestDecryptionKey(self, initDataBuffer);

I would add a generic interface for all these cases, instead of doing GET_CLASS + klass-&gt;foo() add methods that receive a WebKitMediaCommonEncryptionDecrypt and do the get_class + klass-&gt;foo

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:310
&gt; +                if (self-&gt;priv-&gt;protectionEvent) {
&gt; +                    gst_event_unref(self-&gt;priv-&gt;protectionEvent);
&gt; +                    self-&gt;priv-&gt;protectionEvent = nullptr;

Use GRefPtr for this. I don&apos;t understand why we need to keep the protectionEvent as a member of WebKitMediaCommonEncryptionDecrypt, we could use GrefPtr and capture it in the lambda.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:315
&gt; +        result = TRUE;
&gt; +        break;

return TRUE

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:323
&gt; +        gst_event_unref(event);

I think we could adopt the ref with GRefPtr at the beginning of the function, and it will be freed automatically in all cases.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:329
&gt; +        result = GST_BASE_TRANSFORM_CLASS(parent_class)-&gt;sink_event(trans, event);
&gt; +        break;

return GST_BASE_TRANSFORM_CLASS(parent_class)-&gt;sink_event(trans, event);

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:332
&gt; +    return result;

return FALSE

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:339
&gt; +    GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;

The init value is never used, I don&apos;t think we need this variable at all.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:344
&gt; +        priv-&gt;condition.notifyOne();

This could just be self-&gt;priv-&gt;condition.notifyOne(); since priv is only used one, we can avoid the local variable.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:350
&gt; +    ret = GST_ELEMENT_CLASS(parent_class)-&gt;change_state(element, transition);

return GST_ELEMENT_CLASS(parent_class)-&gt;change_state(element, transition);

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:352
&gt; +    // Add post-transition code here.

If this is a fixme, add FIXME: otherwise remove the comment

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:360
&gt; +    return true;

TRUE

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:366
&gt; +static void webKitMediaCommonEncryptionDecryptDefaultReleaseCipher(WebKitMediaCommonEncryptionDecrypt*)
&gt; +{
&gt; +}

Can we just avoid the vfunc initalization, or does the caller expects this to be always non null?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164742</commentid>
    <comment_count>8</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2016-02-15 07:41:13 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:896
&gt; &gt; +    if (!equalIgnoringASCIICase(keySystem, &quot;org.w3.clearkey&quot;))
&gt; &gt; +        return MediaPlayer::KeySystemNotSupported;
&gt; 
&gt; Instead of duplication this check here, we could call supportsKeySystem
&gt; instead, or move this check to a helper function and use it from both places.
&gt; 

I&apos;m not sure it&apos;s worth.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:931
&gt; &gt; +    if (parameters.keySystem.isNull() || parameters.keySystem.isEmpty())
&gt; 
&gt; parameters.keySystem.isEmpty() returns true if it&apos;s null
&gt; 

So you mean testing only isNull() is enough?

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:57
&gt; &gt; +void registerWebKitGStreamerElements();
&gt; &gt; +
&gt; 
&gt; Why does this need to be here? Can&apos;t this be a static function?
&gt; 

It will need to be called from the future MediaPlayerPrivateGStreamerMSE.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:128
&gt; &gt; +    virtual void dispatchDecryptionKey(GstBuffer*);
&gt; 
&gt; Why is this virtual and public?
&gt; 

The MediaPlayerPrivateGStreamerMSE player will need to override it. But maybe it can be private though, I&apos;ll check.

I&apos;ll process the remain comments later on :) Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164745</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-02-15 08:18:36 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:896
&gt; &gt; &gt; +    if (!equalIgnoringASCIICase(keySystem, &quot;org.w3.clearkey&quot;))
&gt; &gt; &gt; +        return MediaPlayer::KeySystemNotSupported;
&gt; &gt; 
&gt; &gt; Instead of duplication this check here, we could call supportsKeySystem
&gt; &gt; instead, or move this check to a helper function and use it from both places.
&gt; &gt; 
&gt; 
&gt; I&apos;m not sure it&apos;s worth.

If the condition changes for whatever reason you will have to change it everywhere.

&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:931
&gt; &gt; &gt; +    if (parameters.keySystem.isNull() || parameters.keySystem.isEmpty())
&gt; &gt; 
&gt; &gt; parameters.keySystem.isEmpty() returns true if it&apos;s null
&gt; &gt; 
&gt; 
&gt; So you mean testing only isNull() is enough?

No, isEmpty is enough.

&gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:57
&gt; &gt; &gt; +void registerWebKitGStreamerElements();
&gt; &gt; &gt; +
&gt; &gt; 
&gt; &gt; Why does this need to be here? Can&apos;t this be a static function?
&gt; &gt; 
&gt; 
&gt; It will need to be called from the future MediaPlayerPrivateGStreamerMSE.

Ah, ok, I think changing that in the future patch makes this easiert o understand.

&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:128
&gt; &gt; &gt; +    virtual void dispatchDecryptionKey(GstBuffer*);
&gt; &gt; 
&gt; &gt; Why is this virtual and public?
&gt; &gt; 
&gt; 
&gt; The MediaPlayerPrivateGStreamerMSE player will need to override it. But
&gt; maybe it can be private though, I&apos;ll check.

Same here, I guess it could be protected.

&gt; I&apos;ll process the remain comments later on :) Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164875</commentid>
    <comment_count>10</comment_count>
      <attachid>271332</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-02-15 13:41:41 -0800</bug_when>
    <thetext>Comment on attachment 271332
patch

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

&gt; Source/WebCore/ChangeLog:24
&gt; +        disabled by default.

I see the technical advantage to us in upstreaming this code, even if it will never be used by any distros and always disabled by default in OptionsGTK.cmake. But I kinda think it should be enabled by default in FeatureList.pm, for developers, even if it&apos;s not going to be used by any distros. Otherwise the build will be broken all the time, and we won&apos;t be able to run layout tests on the bot, and without running layout tests we won&apos;t notice when the functionality breaks. I understand we&apos;ll only be able to test ClearKey, but that seems fine to me, and much better than adding this with no tests.

So, I am going to r- this, hoping not to set back your work, just until we&apos;re ready to enable it for development builds and can either add or unskip at least a couple of tests, and pending our transition to GStreamer 1.6 on the bots. (I would love to see that sooner rather than later, because our users have had GStreamer 1.6 for a long time now.)

&gt; Source/WebCore/PlatformGTK.cmake:830
&gt; +        ${LIBGCRYPT_LIBRARIES} -lgpg-error

What is -lgpg-error? If it&apos;s not specified in a pkg-config module and is part of libgcrypt, it should probably be added to LIBGCRYPT_LIBRARIES by FindLibGcrypt.cmake.

&gt; Source/WebCore/PlatformGTK.cmake:837
&gt; +

Nit: no blank line here, please.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:8
&gt; + * modify it under the terms of the GNU Library General Public

Nit: grab a newer license header from some other file, should say &quot;Lesser General Public License&quot;

&gt; Source/cmake/OptionsGTK.cmake:380
&gt; +

Nit: No blank line here, please.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165069</commentid>
    <comment_count>11</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2016-02-15 23:40:35 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:896
&gt; &gt; &gt; &gt; +    if (!equalIgnoringASCIICase(keySystem, &quot;org.w3.clearkey&quot;))
&gt; &gt; &gt; &gt; +        return MediaPlayer::KeySystemNotSupported;
&gt; &gt; &gt; 
&gt; &gt; &gt; Instead of duplication this check here, we could call supportsKeySystem
&gt; &gt; &gt; instead, or move this check to a helper function and use it from both places.
&gt; &gt; &gt; 
&gt; &gt; 
&gt; &gt; I&apos;m not sure it&apos;s worth.
&gt; 
&gt; If the condition changes for whatever reason you will have to change it
&gt; everywhere.
&gt; 

In two places. I know we are lazy developers, but this is not worth the refactoring effort at this point, imho :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165070</commentid>
    <comment_count>12</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2016-02-15 23:43:38 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Comment on attachment 271332 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=271332&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:24
&gt; &gt; +        disabled by default.
&gt; 
&gt; I see the technical advantage to us in upstreaming this code, even if it
&gt; will never be used by any distros and always disabled by default in
&gt; OptionsGTK.cmake. But I kinda think it should be enabled by default in
&gt; FeatureList.pm, for developers, even if it&apos;s not going to be used by any
&gt; distros. Otherwise the build will be broken all the time, and we won&apos;t be
&gt; able to run layout tests on the bot, and without running layout tests we
&gt; won&apos;t notice when the functionality breaks. I understand we&apos;ll only be able
&gt; to test ClearKey, but that seems fine to me, and much better than adding
&gt; this with no tests.
&gt; 
&gt; So, I am going to r- this, hoping not to set back your work, just until
&gt; we&apos;re ready to enable it for development builds and can either add or unskip
&gt; at least a couple of tests, and pending our transition to GStreamer 1.6 on
&gt; the bots. (I would love to see that sooner rather than later, because our
&gt; users have had GStreamer 1.6 for a long time now.)
&gt; 

Ok so this is the exact same situation as in WebRTC support. We disabled it temporarily in the bots and provided a custom JHBuild moduleset. Would that be OK with you?

About the concern of this not being enabled and bitrotting, I think it&apos;s not a valid concern because this code is actively used in a downstream fork. So every build break that will happen will be noticed downstream and I&apos;ll be happy to fix in ToT whenever needed :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165071</commentid>
    <comment_count>13</comment_count>
      <attachid>271332</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2016-02-16 00:08:18 -0800</bug_when>
    <thetext>Comment on attachment 271332
patch

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

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:210
&gt;&gt; +    protectionMeta = reinterpret_cast&lt;GstProtectionMeta*&gt;(gst_buffer_get_protection_meta(buffer));
&gt; 
&gt; Why reinterpret cast? What does gst_buffer_get_protection_meta returns? a GstMeta*? I would make protectionMeta a GstMeta* instead and we don&apos;t need all the casts

We need a GstProtectionMeta because we use its info GstStructure below, which the base GstMeta struct doesn&apos;t have.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165076</commentid>
    <comment_count>14</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-02-16 00:20:44 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #9)
&gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:896
&gt; &gt; &gt; &gt; &gt; +    if (!equalIgnoringASCIICase(keySystem, &quot;org.w3.clearkey&quot;))
&gt; &gt; &gt; &gt; &gt; +        return MediaPlayer::KeySystemNotSupported;
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Instead of duplication this check here, we could call supportsKeySystem
&gt; &gt; &gt; &gt; instead, or move this check to a helper function and use it from both places.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; I&apos;m not sure it&apos;s worth.
&gt; &gt; 
&gt; &gt; If the condition changes for whatever reason you will have to change it
&gt; &gt; everywhere.
&gt; &gt; 
&gt; 
&gt; In two places. I know we are lazy developers, but this is not worth the
&gt; refactoring effort at this point, imho :)

You don&apos;t need any refactoring, just call the existing function that already checks this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165078</commentid>
    <comment_count>15</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-02-16 00:21:49 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Comment on attachment 271332 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=271332&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:210
&gt; &gt;&gt; +    protectionMeta = reinterpret_cast&lt;GstProtectionMeta*&gt;(gst_buffer_get_protection_meta(buffer));
&gt; &gt; 
&gt; &gt; Why reinterpret cast? What does gst_buffer_get_protection_meta returns? a GstMeta*? I would make protectionMeta a GstMeta* instead and we don&apos;t need all the casts
&gt; 
&gt; We need a GstProtectionMeta because we use its info GstStructure below,
&gt; which the base GstMeta struct doesn&apos;t have.

I know, my point is that you can get the GstMeta and cast to GstProtectionMeta only once, instead of casting the result to GstProtectionMeta and then casting again to GstMeta everywhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165087</commentid>
    <comment_count>16</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2016-02-16 01:53:24 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #11)
&gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:896
&gt; &gt; &gt; &gt; &gt; &gt; +    if (!equalIgnoringASCIICase(keySystem, &quot;org.w3.clearkey&quot;))
&gt; &gt; &gt; &gt; &gt; &gt; +        return MediaPlayer::KeySystemNotSupported;
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Instead of duplication this check here, we could call supportsKeySystem
&gt; &gt; &gt; &gt; &gt; instead, or move this check to a helper function and use it from both places.
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; I&apos;m not sure it&apos;s worth.
&gt; &gt; &gt; 
&gt; &gt; &gt; If the condition changes for whatever reason you will have to change it
&gt; &gt; &gt; everywhere.
&gt; &gt; &gt; 
&gt; &gt; 
&gt; &gt; In two places. I know we are lazy developers, but this is not worth the
&gt; &gt; refactoring effort at this point, imho :)
&gt; 
&gt; You don&apos;t need any refactoring, just call the existing function that already
&gt; checks this.

So you suggest to call supportsKeySystem() right? but addKey() and generateKeyRequest() have no mimeType param</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165092</commentid>
    <comment_count>17</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-02-16 02:20:17 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #14)
&gt; &gt; (In reply to comment #11)
&gt; &gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; &gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:896
&gt; &gt; &gt; &gt; &gt; &gt; &gt; +    if (!equalIgnoringASCIICase(keySystem, &quot;org.w3.clearkey&quot;))
&gt; &gt; &gt; &gt; &gt; &gt; &gt; +        return MediaPlayer::KeySystemNotSupported;
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; Instead of duplication this check here, we could call supportsKeySystem
&gt; &gt; &gt; &gt; &gt; &gt; instead, or move this check to a helper function and use it from both places.
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; I&apos;m not sure it&apos;s worth.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; If the condition changes for whatever reason you will have to change it
&gt; &gt; &gt; &gt; everywhere.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; In two places. I know we are lazy developers, but this is not worth the
&gt; &gt; &gt; refactoring effort at this point, imho :)
&gt; &gt; 
&gt; &gt; You don&apos;t need any refactoring, just call the existing function that already
&gt; &gt; checks this.
&gt; 
&gt; So you suggest to call supportsKeySystem() right? but addKey() and
&gt; generateKeyRequest() have no mimeType param

Which is unused, and IIRC you are already passing emptyString() in another caller.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165096</commentid>
    <comment_count>18</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2016-02-16 02:53:03 -0800</bug_when>
    <thetext>OK then!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165098</commentid>
    <comment_count>19</comment_count>
      <attachid>271332</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2016-02-16 03:17:46 -0800</bug_when>
    <thetext>Comment on attachment 271332
patch

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

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:108
&gt;&gt; +    GRefPtr&lt;GstElementFactory&gt; clearKeyDecryptorFactory = gst_element_factory_find(&quot;webkitclearkey&quot;);
&gt; 
&gt; adoptGRef

#0  0x00007fb7b781d253 in _g_log_abort (breakpoint=1) at /home/phil/WebKit/WebKitBuild/DependenciesGTK/Source/glib-2.46.0/glib/gmessages.c:324
#1  g_logv (log_domain=0x7fb7b7b41170 &quot;GLib-GObject&quot;, log_level=G_LOG_LEVEL_CRITICAL, format=&lt;optimized out&gt;, args=args@entry=0x7fff59e44618)
    at /home/phil/WebKit/WebKitBuild/DependenciesGTK/Source/glib-2.46.0/glib/gmessages.c:1081
#2  0x00007fb7b781d3b2 in g_log (log_domain=log_domain@entry=0x7fb7b7b41170 &quot;GLib-GObject&quot;, log_level=log_level@entry=G_LOG_LEVEL_CRITICAL, format=format@entry=0x7fb7b788b786 &quot;%s: assertion &apos;%s&apos; failed&quot;)
    at /home/phil/WebKit/WebKitBuild/DependenciesGTK/Source/glib-2.46.0/glib/gmessages.c:1119
#3  0x00007fb7b781d3d9 in g_return_if_fail_warning (log_domain=log_domain@entry=0x7fb7b7b41170 &quot;GLib-GObject&quot;, pretty_function=pretty_function@entry=0x7fb7b7b44af0 &lt;__func__.13475&gt; &quot;g_object_is_floating&quot;, 
    expression=expression@entry=0x7fb7b7b4375a &quot;G_IS_OBJECT (object)&quot;) at /home/phil/WebKit/WebKitBuild/DependenciesGTK/Source/glib-2.46.0/glib/gmessages.c:1128
#4  0x00007fb7b7b1ed6c in g_object_is_floating (_object=0x0) at /home/phil/WebKit/WebKitBuild/DependenciesGTK/Source/glib-2.46.0/gobject/gobject.c:2815
#5  0x00007fb7c48d6739 in WTF::adoptGRef&lt;_GstElementFactory&gt; (ptr=0x0) at ../../Source/WebCore/platform/graphics/gstreamer/GRefPtrGStreamer.cpp:167
#6  0x00007fb7c48ecf74 in WebCore::registerWebKitGStreamerElements () at ../../Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:108</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165100</commentid>
    <comment_count>20</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-02-16 03:28:07 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; Comment on attachment 271332 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=271332&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:108
&gt; &gt;&gt; +    GRefPtr&lt;GstElementFactory&gt; clearKeyDecryptorFactory = gst_element_factory_find(&quot;webkitclearkey&quot;);
&gt; &gt; 
&gt; &gt; adoptGRef
&gt; 
&gt; #0  0x00007fb7b781d253 in _g_log_abort (breakpoint=1) at
&gt; /home/phil/WebKit/WebKitBuild/DependenciesGTK/Source/glib-2.46.0/glib/
&gt; gmessages.c:324
&gt; #1  g_logv (log_domain=0x7fb7b7b41170 &quot;GLib-GObject&quot;,
&gt; log_level=G_LOG_LEVEL_CRITICAL, format=&lt;optimized out&gt;,
&gt; args=args@entry=0x7fff59e44618)
&gt;     at
&gt; /home/phil/WebKit/WebKitBuild/DependenciesGTK/Source/glib-2.46.0/glib/
&gt; gmessages.c:1081
&gt; #2  0x00007fb7b781d3b2 in g_log (log_domain=log_domain@entry=0x7fb7b7b41170
&gt; &quot;GLib-GObject&quot;, log_level=log_level@entry=G_LOG_LEVEL_CRITICAL,
&gt; format=format@entry=0x7fb7b788b786 &quot;%s: assertion &apos;%s&apos; failed&quot;)
&gt;     at
&gt; /home/phil/WebKit/WebKitBuild/DependenciesGTK/Source/glib-2.46.0/glib/
&gt; gmessages.c:1119
&gt; #3  0x00007fb7b781d3d9 in g_return_if_fail_warning
&gt; (log_domain=log_domain@entry=0x7fb7b7b41170 &quot;GLib-GObject&quot;,
&gt; pretty_function=pretty_function@entry=0x7fb7b7b44af0 &lt;__func__.13475&gt;
&gt; &quot;g_object_is_floating&quot;, 
&gt;     expression=expression@entry=0x7fb7b7b4375a &quot;G_IS_OBJECT (object)&quot;) at
&gt; /home/phil/WebKit/WebKitBuild/DependenciesGTK/Source/glib-2.46.0/glib/
&gt; gmessages.c:1128
&gt; #4  0x00007fb7b7b1ed6c in g_object_is_floating (_object=0x0) at
&gt; /home/phil/WebKit/WebKitBuild/DependenciesGTK/Source/glib-2.46.0/gobject/
&gt; gobject.c:2815
&gt; #5  0x00007fb7c48d6739 in WTF::adoptGRef&lt;_GstElementFactory&gt; (ptr=0x0) at
&gt; ../../Source/WebCore/platform/graphics/gstreamer/GRefPtrGStreamer.cpp:167
&gt; #6  0x00007fb7c48ecf74 in WebCore::registerWebKitGStreamerElements () at
&gt; ../../Source/WebCore/platform/graphics/gstreamer/
&gt; MediaPlayerPrivateGStreamerBase.cpp:108

This is a bug of GRefPtr&lt;GstElementFactory&gt; adoptGRef(GstElementFactory* ptr), the assert there is wrong, it should be:

ASSERT(!ptr || !g_object_is_floating(G_OBJECT(ptr)));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165101</commentid>
    <comment_count>21</comment_count>
      <attachid>271332</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2016-02-16 03:29:14 -0800</bug_when>
    <thetext>Comment on attachment 271332
patch

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

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:176
&gt;&gt; +            gst_structure_free(out);
&gt; 
&gt; We could uise GUniquePtr for out, and leak the value in the !duplicate case to transfer the ownership.

I&apos;ve been trying that but without much success. Just to be clear, by leaking the value out mean using GUniquePtr&apos;s reset()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165109</commentid>
    <comment_count>22</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-02-16 04:01:27 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; Comment on attachment 271332 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=271332&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:176
&gt; &gt;&gt; +            gst_structure_free(out);
&gt; &gt; 
&gt; &gt; We could uise GUniquePtr for out, and leak the value in the !duplicate case to transfer the ownership.
&gt; 
&gt; I&apos;ve been trying that but without much success. Just to be clear, by leaking
&gt; the value out mean using GUniquePtr&apos;s reset()?

No, I mean using release()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165127</commentid>
    <comment_count>23</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-02-16 06:53:14 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Ok so this is the exact same situation as in WebRTC support. We disabled it
&gt; temporarily in the bots and provided a custom JHBuild moduleset. Would that
&gt; be OK with you?

I&apos;m not sure I understand the decision behind WebRTC either, what was the point in disabling it, just to avoid the upgrade to GStreamer 1.6? I would prefer to get rid of the extra jhbuild moduleset and re-enable WebRTC for developers again. Can&apos;t we do that for EME as well?

I think the primary difference there is that you guys have concrete plans to reenable WebRTC within a relatively short timespan. Also, WebRTC is a very important feature for the WebKit project, whereas EME is only useful to ease maintenance of downstream forks. And WebRTC support has existed upstream for a long time already. We should apply strict scrutiny when adding new features that would not be enabled by default; in this case, I think it makes strategic sense to have this, but I don&apos;t think it makes sense for the bots to not build or test it. (That&apos;s reasonable, no? :)

&gt; About the concern of this not being enabled and bitrotting, I think it&apos;s not
&gt; a valid concern because this code is actively used in a downstream fork. So
&gt; every build break that will happen will be noticed downstream and I&apos;ll be
&gt; happy to fix in ToT whenever needed :)

I think if you have it enabled by default (for developers) downstream, you can do it upstream too, right?

(In reply to comment #21) 
&gt; I&apos;ve been trying that but without much success. Just to be clear, by leaking
&gt; the value out mean using GUniquePtr&apos;s reset()?

Reset does an unref. It&apos;s basically the same as g_set_object (ref new value, set pointer to new value, unref old value). With no arguments, that&apos;s the same as g_clear_object (set pointer to null, unref old value).

It&apos;s identical to std::unique_ptr, actually; GUniquePtr is just a std::unique_ptr that frees with g_free instead of delete.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165542</commentid>
    <comment_count>24</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2016-02-17 00:38:16 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; (In reply to comment #12)
&gt; &gt; Ok so this is the exact same situation as in WebRTC support. We disabled it
&gt; &gt; temporarily in the bots and provided a custom JHBuild moduleset. Would that
&gt; &gt; be OK with you?
&gt; 
&gt; I&apos;m not sure I understand the decision behind WebRTC either, what was the
&gt; point in disabling it, just to avoid the upgrade to GStreamer 1.6? I would
&gt; prefer to get rid of the extra jhbuild moduleset and re-enable WebRTC for
&gt; developers again. 

This isn&apos;t possible yet because OpenWebRTC depends on GStreamer 1.6 at least. And we can&apos;t bump the gst version in JHBuild yet either. Hence the decision to disable WebRTC in builds *for* *now* :)

&gt; Can&apos;t we do that for EME as well?

Nope.

&gt; 
&gt; I think the primary difference there is that you guys have concrete plans to
&gt; reenable WebRTC within a relatively short timespan. Also, WebRTC is a very
&gt; important feature for the WebKit project, whereas EME is only useful to ease
&gt; maintenance of downstream forks.

Not only that. It&apos;s also  needed to show that WebKitGTK itself can support EME.

&gt; And WebRTC support has existed upstream for
&gt; a long time already. 

Both WebRTC and EME specs have roughly emerged around 2012, IIRC.

&gt; We should apply strict scrutiny when adding new
&gt; features that would not be enabled by default; in this case, I think it
&gt; makes strategic sense to have this, but I don&apos;t think it makes sense for the
&gt; bots to not build or test it. (That&apos;s reasonable, no? :)
&gt; 

Ok, I also would like to have this tested on the bots at some point but as mentioned already, it&apos;s not possible yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165583</commentid>
    <comment_count>25</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-02-17 08:20:55 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; This isn&apos;t possible yet because OpenWebRTC depends on GStreamer 1.6 at
&gt; least. And we can&apos;t bump the gst version in JHBuild yet either. Hence the
&gt; decision to disable WebRTC in builds *for* *now* :)

I really don&apos;t understand, why is it not possible to bump the GStreamer version in JHBuild? Most of our users have GStreamer 1.6, if it causes bugs then we should push forward and update test expectations accordingly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166404</commentid>
    <comment_count>26</comment_count>
    <who name="Julien Isorce">j.isorce</who>
    <bug_when>2016-02-19 06:06:33 -0800</bug_when>
    <thetext>Just for the record, I cross reference this bug with https://bugzilla.gnome.org/show_bug.cgi?id=761700#c5.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166409</commentid>
    <comment_count>27</comment_count>
      <attachid>271332</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2016-02-19 07:01:46 -0800</bug_when>
    <thetext>Comment on attachment 271332
patch

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

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:305
&gt;&gt; +            if (self) {
&gt; 
&gt; This is not correct way to check if self is still alive. You should either use a weak ref/ptr, or protect the object with GRefPtr, and capture that.

I tried to use WeakPtr but the captured value stores nothing in the lambda.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:310
&gt;&gt; +                    self-&gt;priv-&gt;protectionEvent = nullptr;
&gt; 
&gt; Use GRefPtr for this. I don&apos;t understand why we need to keep the protectionEvent as a member of WebKitMediaCommonEncryptionDecrypt, we could use GrefPtr and capture it in the lambda.

We only need to keep it referenced until the initData is no longer needed. If a GRefPtr captured in the lambda can do that, then yeah, let&apos;s use the fancy stuff :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166708</commentid>
    <comment_count>28</comment_count>
      <attachid>271332</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-02-20 01:02:34 -0800</bug_when>
    <thetext>Comment on attachment 271332
patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:305
&gt;&gt;&gt; +            if (self) {
&gt;&gt; 
&gt;&gt; This is not correct way to check if self is still alive. You should either use a weak ref/ptr, or protect the object with GRefPtr, and capture that.
&gt; 
&gt; I tried to use WeakPtr but the captured value stores nothing in the lambda.

The thing is that self is not going to be nullptr here if the object is destroyed before the lambda is called, so the check is wrong. You could use weak pointer or GRefPtr depending on what you want. If you want to ensure the object is nos destroyed until the lambda is called, then use GRefPtr, but if you want to ignore the lambda if the object is destroyed, you need a weakptr and check its value in the lambda to return early. Since this is a GObject maybe it&apos;s easier to use GObject weak references instead of WeakPtr

&gt;&gt;&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:310
&gt;&gt;&gt; +                    self-&gt;priv-&gt;protectionEvent = nullptr;
&gt;&gt; 
&gt;&gt; Use GRefPtr for this. I don&apos;t understand why we need to keep the protectionEvent as a member of WebKitMediaCommonEncryptionDecrypt, we could use GrefPtr and capture it in the lambda.
&gt; 
&gt; We only need to keep it referenced until the initData is no longer needed. If a GRefPtr captured in the lambda can do that, then yeah, let&apos;s use the fancy stuff :)

You are indeed releasing the protection event inside the lambda.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168449</commentid>
    <comment_count>29</comment_count>
      <attachid>272313</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2016-02-26 00:36:17 -0800</bug_when>
    <thetext>Created attachment 272313
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168451</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-26 00:38:02 -0800</bug_when>
    <thetext>Attachment 272313 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.h:40:  webkit_media_clear_key_decrypt_get_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:27:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:44:  webkit_media_common_encryption_decrypt_get_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:56:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:57:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:58:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:59:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:60:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:23:  You should not add a blank line before implementation file&apos;s own header.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:211:  webkit_media_clear_key_decrypt_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:240:  webkit_media_clear_key_decrypt_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:24:  You should not add a blank line before implementation file&apos;s own header.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:336:  webkit_media_common_encryption_decrypt_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:359:  webkit_media_common_encryption_decrypt_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 14 in 11 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>1168457</commentid>
    <comment_count>31</comment_count>
      <attachid>272316</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2016-02-26 00:58:57 -0800</bug_when>
    <thetext>Created attachment 272316
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168458</commentid>
    <comment_count>32</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-26 01:01:29 -0800</bug_when>
    <thetext>Attachment 272316 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.h:40:  webkit_media_clear_key_decrypt_get_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:27:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:44:  webkit_media_common_encryption_decrypt_get_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:56:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:57:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:58:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:59:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:60:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/cmake/FindLibGcrypt.cmake:44:  One space between command &quot;if&quot; and its parentheses, should be &quot;if (&quot;  [whitespace/parentheses] [5]
ERROR: Source/cmake/FindLibGcrypt.cmake:54:  One space between command &quot;endif&quot; and its parentheses, should be &quot;endif (&quot;  [whitespace/parentheses] [5]
ERROR: Source/cmake/FindLibGcrypt.cmake:55:  One space between command &quot;endif&quot; and its parentheses, should be &quot;endif (&quot;  [whitespace/parentheses] [5]
ERROR: Source/cmake/FindLibGcrypt.cmake:66:  One space between command &quot;if&quot; and its parentheses, should be &quot;if (&quot;  [whitespace/parentheses] [5]
ERROR: Source/cmake/FindLibGcrypt.cmake:69:  One space between command &quot;endif&quot; and its parentheses, should be &quot;endif (&quot;  [whitespace/parentheses] [5]
ERROR: Source/cmake/FindLibGcrypt.cmake:78:  One space between command &quot;if&quot; and its parentheses, should be &quot;if (&quot;  [whitespace/parentheses] [5]
ERROR: Source/cmake/FindLibGcrypt.cmake:81:  One space between command &quot;endif&quot; and its parentheses, should be &quot;endif (&quot;  [whitespace/parentheses] [5]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:210:  webkit_media_clear_key_decrypt_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:239:  webkit_media_clear_key_decrypt_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:335:  webkit_media_common_encryption_decrypt_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:358:  webkit_media_common_encryption_decrypt_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 19 in 13 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>1168466</commentid>
    <comment_count>33</comment_count>
      <attachid>272316</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-02-26 02:25:20 -0800</bug_when>
    <thetext>Comment on attachment 272316
patch

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

Some more general comments, mostly very minor nits

&gt; Source/WebCore/PlatformGTK.cmake:834
&gt; +        ${LIBGCRYPT_LIBRARIES} -lgpg-error

See Michael question about this.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:75
&gt; +#if ENABLE(ENCRYPTED_MEDIA)
&gt; +#include &quot;WebKitClearKeyDecryptorGStreamer.h&quot;
&gt; +#endif

The headers ia already guarded, no need for more ifdefs here.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:246
&gt; +        GstBuffer* data;

GRefPtr

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:911
&gt; +void MediaPlayerPrivateGStreamerBase::needKey(const String&amp; keySystem, const String&amp; sessionId, const unsigned char* initData, unsigned initDataLength)

previously you were using sessionID, so use that here as well for consistency

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:134
&gt; +    void needKey(const String&amp;, const String&amp;, const unsigned char*, unsigned);
&gt; +    void dispatchDecryptionKey(GstBuffer*);

Do these need to be public? they are only used by MediaPlayerPrivateGStreamerBase

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:61
&gt; +    WebKitMediaClearKeyDecrypt* self = WEBKIT_MEDIA_CK_DECRYPT(object);
&gt; +    WebKitMediaClearKeyDecryptPrivate* priv = self-&gt;priv;

We are using self just to get the priv, this could be just:

WebKitMediaClearKeyDecryptPrivate* priv = WEBKIT_MEDIA_CK_DECRYPT(object)-&gt;priv;

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:63
&gt; +    priv-&gt;~WebKitMediaClearKeyDecryptPrivate();

Or even use WEBKIT_MEDIA_CK_DECRYPT(object)-&gt;priv directly here

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:84
&gt; +    WEBKIT_MEDIA_CK_DECRYPT(self)-&gt;priv-&gt;key = adoptGRef(gst_buffer_copy(gst_value_get_buffer(value)));

However I think this is easier to read by using a local variable to cast WEBKIT_MEDIA_CK_DECRYPT().

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.h:38
&gt; +#include &quot;WebKitCommonEncryptionDecryptorGStreamer.h&quot;
&gt; +
&gt; +G_BEGIN_DECLS
&gt; +
&gt; +#define WEBKIT_TYPE_MEDIA_CK_DECRYPT          (webkit_media_clear_key_decrypt_get_type())
&gt; +#define WEBKIT_MEDIA_CK_DECRYPT(obj)          (G_TYPE_CHECK_INSTANCE_CAST((obj), WEBKIT_TYPE_MEDIA_CK_DECRYPT, WebKitMediaClearKeyDecrypt))
&gt; +#define WEBKIT_MEDIA_CK_DECRYPT_CLASS(klass)  (G_TYPE_CHECK_CLASS_CAST((klass), WEBKIT_TYPE_MEDIA_CK_DECRYPT, WebKitMediaClearKeyDecryptClass))
&gt; +#define WEBKIT_IS_MEDIA_CK_DECRYPT(obj)       (G_TYPE_CHECK_INSTANCE_TYPE((obj), WEBKIT_TYPE_MEDIA_CK_DECRYPT))
&gt; +#define WEBKIT_IS_MEDIA_CK_DECRYPT_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE((klass), WEBKIT_TYPE_MEDIA_CK_DECRYPT))
&gt; +
&gt; +typedef struct _WebKitMediaClearKeyDecrypt        WebKitMediaClearKeyDecrypt;
&gt; +typedef struct _WebKitMediaClearKeyDecryptClass   WebKitMediaClearKeyDecryptClass;
&gt; +typedef struct _WebKitMediaClearKeyDecryptPrivate WebKitMediaClearKeyDecryptPrivate;

I&apos;m very confused with the names here, I think it&apos;s important to follow the conventions to make this easier to follow. Here we have a file called WebKitClearKeyDecryptorGStreamer.h that implements the GObject  WebKitMediaClearKeyDecrypt, with GObject macros prefixed with WEBKIT_MEDIA_CK_DECRYPT, and the internal methods prefixed with webKitMediaClearKeyDecryptor. We need to make all this consistent, if this is a Decryptor, we should have a file called WebKitMediaClearKeyDecryptor.cpp thata implements WebKitMediaClearKeyDecryptor using macros prefixed with WEBKIT_MEDIA_CLEAR_KEY_DECRYPTOR and internal methods with webKitMediaClearKeyDecryptor. Or any other name, because I have no idea what this is for, but consistent.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.h:43
&gt; +    WebKitMediaCommonEncryptionDecrypt parent;

So the base parent class is for encryption and decryption? Do I understand correctly that this is the ClearKey implementation for the base class for decryption?

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:42
&gt; +G_DEFINE_TYPE(WebKitMediaCommonEncryptionDecrypt, webkit_media_common_encryption_decrypt, GST_TYPE_BASE_TRANSFORM)

Should this be an abstract class?

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:49
&gt; +    WebKitMediaCommonEncryptionDecrypt* self = WEBKIT_MEDIA_CENC_DECRYPT(object);
&gt; +    WebKitMediaCommonEncryptionDecryptPrivate* priv = self-&gt;priv;
&gt; +
&gt; +    priv-&gt;~WebKitMediaCommonEncryptionDecryptPrivate();

Same comments here.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:56
&gt; +    WebKitMediaCommonEncryptionDecryptClass* cencClass = WEBKIT_MEDIA_CENC_DECRYPT_GET_CLASS(self);
&gt; +    return cencClass-&gt;setupCipher(self);

Is it expected that derived classes implement this method? Then add an assert to ensure cencClass is mot null, otherwise add a null check.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:77
&gt; +static const char* webkitMediaCommonEncryptionDecryptProtectionSystemID(WebKitMediaCommonEncryptionDecrypt* self)

I think we should be consistent everywhere with Id and ID.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:122
&gt; +            GUniquePtr&lt;GstStructure&gt; tmp;
&gt; +            tmp.reset(gst_structure_copy(in));

GUniquePtr&lt;GstStructure&gt; tmp(gst_structure_copy(in));

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:145
&gt; +            gst_structure_set(out.get(), &quot;protection-system&quot;, G_TYPE_STRING, klass-&gt;protectionSystemId,

Use webkitMediaCommonEncryptionDecryptProtectionSystemID()

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:153
&gt; +        for (unsigned index = 0; !isDuplicated &amp;&amp; index &lt; size; ++index) {

You don&apos;t need to check !isDuplicated here since you are breaking the loop already when setting it to true.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:163
&gt; +            gst_caps_append_structure(transformedCaps, out.get());
&gt; +            out.release();

gst_caps_append_structure(transformedCaps, out.release());

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:285
&gt; +        GRefPtr&lt;GstEvent&gt; protectedEvent(event);

I think we are leaking the event this way. We are supposed to unref the event, but we are taking yet another ref, so when the lambda is destroyed there will still be one ref left. I think it&apos;s safer to adopt the ref at the beginning of the function, capture the GrefPtr in the lambda, and remove all explicit unrefs

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:288
&gt; +            if (protectedThis)

This will never be null, this is not a weak pointer. If what you want is to not do the request if the object is destroyed before the task is dispatched, you need to use weak pointers, otherwise, since you are taking a reference of the object to protected it, here you will always have a valid pointer and a valid object, so the request will always happen.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:290
&gt; +                webkitMediaCommonEncryptionDecryptRequestDecryptionKey(WEBKIT_MEDIA_CENC_DECRYPT(protectedThis.get()), initDataBuffer);
&gt; +        });

So we capture the protected event because the event is the owner of the initDataBuffer, right? Would it be possible to take a reference of the buffer instead? or do we really need to keep the event alive until the request is done?

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:297
&gt; +            priv-&gt;condition.notifyOne();

Don&apos;t you need to lock the mutex before calling notifyOne?

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:307
&gt; +    return FALSE;

If we are not supposed to unref the event here we can leak the adopted ref, or do the adopt in every switch case instead

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:317
&gt; +        self-&gt;priv-&gt;condition.notifyOne();

Don&apos;t you need to lock the mutex before calling notifyOne?

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:328
&gt; +    return true;

TRUE

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:44
&gt; +#define WEBKIT_TYPE_MEDIA_CENC_DECRYPT          (webkit_media_common_encryption_decrypt_get_type())
&gt; +#define WEBKIT_MEDIA_CENC_DECRYPT(obj)          (G_TYPE_CHECK_INSTANCE_CAST((obj), WEBKIT_TYPE_MEDIA_CENC_DECRYPT, WebKitMediaCommonEncryptionDecrypt))
&gt; +#define WEBKIT_MEDIA_CENC_DECRYPT_CLASS(klass)  (G_TYPE_CHECK_CLASS_CAST((klass), WEBKIT_TYPE_MEDIA_CENC_DECRYPT, WebKitMediaCommonEncryptionDecryptClass))
&gt; +#define WEBKIT_MEDIA_CENC_DECRYPT_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj), WEBKIT_TYPE_MEDIA_CENC_DECRYPT, WebKitMediaCommonEncryptionDecryptClass))
&gt; +
&gt; +#define WEBKIT_IS_MEDIA_CENC_DECRYPT(obj)       (G_TYPE_CHECK_INSTANCE_TYPE((obj), WEBKIT_TYPE_MEDIA_CENC_DECRYPT))
&gt; +#define WEBKIT_IS_MEDIA_CENC_DECRYPT_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE((klass), WEBKIT_TYPE_MEDIA_CENC_DECRYPT))
&gt; +
&gt; +typedef struct _WebKitMediaCommonEncryptionDecrypt        WebKitMediaCommonEncryptionDecrypt;
&gt; +typedef struct _WebKitMediaCommonEncryptionDecryptClass   WebKitMediaCommonEncryptionDecryptClass;
&gt; +typedef struct _WebKitMediaCommonEncryptionDecryptPrivate WebKitMediaCommonEncryptionDecryptPrivate;
&gt; +
&gt; +GType webkit_media_common_encryption_decrypt_get_type(void);

I&apos;m confused with the names here again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168476</commentid>
    <comment_count>34</comment_count>
      <attachid>272316</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2016-02-26 04:21:32 -0800</bug_when>
    <thetext>Comment on attachment 272316
patch

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

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:134
&gt;&gt; +    void dispatchDecryptionKey(GstBuffer*);
&gt; 
&gt; Do these need to be public? they are only used by MediaPlayerPrivateGStreamerBase

They are private.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:84
&gt;&gt; +    WEBKIT_MEDIA_CK_DECRYPT(self)-&gt;priv-&gt;key = adoptGRef(gst_buffer_copy(gst_value_get_buffer(value)));
&gt; 
&gt; However I think this is easier to read by using a local variable to cast WEBKIT_MEDIA_CK_DECRYPT().

Let&apos;s try to be consistent then. In the Finalize review you suggest to not use a local variable. So?

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.h:43
&gt;&gt; +    WebKitMediaCommonEncryptionDecrypt parent;
&gt; 
&gt; So the base parent class is for encryption and decryption? Do I understand correctly that this is the ClearKey implementation for the base class for decryption?

CommonEncryption (cenc) is what is specified in MPEG ISO BMF. CommonEncryptionDecrypt is the base class for decryption.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:56
&gt;&gt; +    return cencClass-&gt;setupCipher(self);
&gt; 
&gt; Is it expected that derived classes implement this method? Then add an assert to ensure cencClass is mot null, otherwise add a null check.

We provide a default implementation for this vfunc, so I don&apos;t think this code needs to be changed.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:290
&gt;&gt; +        });
&gt; 
&gt; So we capture the protected event because the event is the owner of the initDataBuffer, right? Would it be possible to take a reference of the buffer instead? or do we really need to keep the event alive until the request is done?

Both could work I suppose.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:307
&gt;&gt; +    return FALSE;
&gt; 
&gt; If we are not supposed to unref the event here we can leak the adopted ref, or do the adopt in every switch case instead

Well, this return can&apos;t possibly hit because the default branch of the switch already does a return. So maybe I can add an ASSERT_NOT_REACHED() here instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168478</commentid>
    <comment_count>35</comment_count>
      <attachid>272316</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-02-26 04:40:30 -0800</bug_when>
    <thetext>Comment on attachment 272316
patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:134
&gt;&gt;&gt; +    void dispatchDecryptionKey(GstBuffer*);
&gt;&gt; 
&gt;&gt; Do these need to be public? they are only used by MediaPlayerPrivateGStreamerBase
&gt; 
&gt; They are private.

Indeed, I saw the public at the first line and not the private here, I&apos;m sorry.

&gt;&gt;&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:84
&gt;&gt;&gt; +    WEBKIT_MEDIA_CK_DECRYPT(self)-&gt;priv-&gt;key = adoptGRef(gst_buffer_copy(gst_value_get_buffer(value)));
&gt;&gt; 
&gt;&gt; However I think this is easier to read by using a local variable to cast WEBKIT_MEDIA_CK_DECRYPT().
&gt; 
&gt; Let&apos;s try to be consistent then. In the Finalize review you suggest to not use a local variable. So?

Yes, because here there&apos;s two -&gt; making it more difficult to read, but I&apos;m fine either way.

&gt;&gt;&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.h:43
&gt;&gt;&gt; +    WebKitMediaCommonEncryptionDecrypt parent;
&gt;&gt; 
&gt;&gt; So the base parent class is for encryption and decryption? Do I understand correctly that this is the ClearKey implementation for the base class for decryption?
&gt; 
&gt; CommonEncryption (cenc) is what is specified in MPEG ISO BMF. CommonEncryptionDecrypt is the base class for decryption.

What&apos;s ClearKey then?

&gt;&gt;&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:56
&gt;&gt;&gt; +    return cencClass-&gt;setupCipher(self);
&gt;&gt; 
&gt;&gt; Is it expected that derived classes implement this method? Then add an assert to ensure cencClass is mot null, otherwise add a null check.
&gt; 
&gt; We provide a default implementation for this vfunc, so I don&apos;t think this code needs to be changed.

Can&apos;t there be more implementations? Why are we using two classes then? This is not about what the known implementation does, but what the base class wants to enforce. Think of it as whether this is a pure virtual method or not.

&gt;&gt;&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:307
&gt;&gt;&gt; +    return FALSE;
&gt;&gt; 
&gt;&gt; If we are not supposed to unref the event here we can leak the adopted ref, or do the adopt in every switch case instead
&gt; 
&gt; Well, this return can&apos;t possibly hit because the default branch of the switch already does a return. So maybe I can add an ASSERT_NOT_REACHED() here instead?

Right, I didn&apos;t notice that, then yes, ASSERT_NOT_REACHED()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168483</commentid>
    <comment_count>36</comment_count>
      <attachid>272321</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2016-02-26 06:09:47 -0800</bug_when>
    <thetext>Created attachment 272321
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168486</commentid>
    <comment_count>37</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-26 06:12:27 -0800</bug_when>
    <thetext>Attachment 272321 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.h:40:  webkit_clear_key_decryptor_get_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:27:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:44:  webkit_common_encryption_decryptor_get_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:56:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:57:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:58:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:59:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:60:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/cmake/FindLibGcrypt.cmake:44:  One space between command &quot;if&quot; and its parentheses, should be &quot;if (&quot;  [whitespace/parentheses] [5]
ERROR: Source/cmake/FindLibGcrypt.cmake:54:  One space between command &quot;endif&quot; and its parentheses, should be &quot;endif (&quot;  [whitespace/parentheses] [5]
ERROR: Source/cmake/FindLibGcrypt.cmake:55:  One space between command &quot;endif&quot; and its parentheses, should be &quot;endif (&quot;  [whitespace/parentheses] [5]
ERROR: Source/cmake/FindLibGcrypt.cmake:66:  One space between command &quot;if&quot; and its parentheses, should be &quot;if (&quot;  [whitespace/parentheses] [5]
ERROR: Source/cmake/FindLibGcrypt.cmake:69:  One space between command &quot;endif&quot; and its parentheses, should be &quot;endif (&quot;  [whitespace/parentheses] [5]
ERROR: Source/cmake/FindLibGcrypt.cmake:78:  One space between command &quot;if&quot; and its parentheses, should be &quot;if (&quot;  [whitespace/parentheses] [5]
ERROR: Source/cmake/FindLibGcrypt.cmake:81:  One space between command &quot;endif&quot; and its parentheses, should be &quot;endif (&quot;  [whitespace/parentheses] [5]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:207:  webkit_clear_key_decryptor_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:236:  webkit_clear_key_decryptor_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/cmake/FindLibGpgError.cmake:46:  One space between command &quot;if&quot; and its parentheses, should be &quot;if (&quot;  [whitespace/parentheses] [5]
ERROR: Source/cmake/FindLibGpgError.cmake:56:  One space between command &quot;endif&quot; and its parentheses, should be &quot;endif (&quot;  [whitespace/parentheses] [5]
ERROR: Source/cmake/FindLibGpgError.cmake:57:  One space between command &quot;endif&quot; and its parentheses, should be &quot;endif (&quot;  [whitespace/parentheses] [5]
ERROR: Source/cmake/FindLibGpgError.cmake:68:  One space between command &quot;if&quot; and its parentheses, should be &quot;if (&quot;  [whitespace/parentheses] [5]
ERROR: Source/cmake/FindLibGpgError.cmake:71:  One space between command &quot;endif&quot; and its parentheses, should be &quot;endif (&quot;  [whitespace/parentheses] [5]
ERROR: Source/cmake/FindLibGpgError.cmake:80:  One space between command &quot;if&quot; and its parentheses, should be &quot;if (&quot;  [whitespace/parentheses] [5]
ERROR: Source/cmake/FindLibGpgError.cmake:83:  One space between command &quot;endif&quot; and its parentheses, should be &quot;endif (&quot;  [whitespace/parentheses] [5]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:327:  webkit_common_encryption_decryptor_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:350:  webkit_common_encryption_decryptor_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 26 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>1168487</commentid>
    <comment_count>38</comment_count>
      <attachid>272316</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2016-02-26 06:13:18 -0800</bug_when>
    <thetext>Comment on attachment 272316
patch

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

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.h:43
&gt;&gt;&gt;&gt; +    WebKitMediaCommonEncryptionDecrypt parent;
&gt;&gt;&gt; 
&gt;&gt;&gt; So the base parent class is for encryption and decryption? Do I understand correctly that this is the ClearKey implementation for the base class for decryption?
&gt;&gt; 
&gt;&gt; CommonEncryption (cenc) is what is specified in MPEG ISO BMF. CommonEncryptionDecrypt is the base class for decryption.
&gt; 
&gt; What&apos;s ClearKey then?

It&apos;s described in the spec :) https://www.w3.org/TR/encrypted-media/ section 9.1

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:56
&gt;&gt;&gt;&gt; +    return cencClass-&gt;setupCipher(self);
&gt;&gt;&gt; 
&gt;&gt;&gt; Is it expected that derived classes implement this method? Then add an assert to ensure cencClass is mot null, otherwise add a null check.
&gt;&gt; 
&gt;&gt; We provide a default implementation for this vfunc, so I don&apos;t think this code needs to be changed.
&gt; 
&gt; Can&apos;t there be more implementations? Why are we using two classes then? This is not about what the known implementation does, but what the base class wants to enforce. Think of it as whether this is a pure virtual method or not.

Yes there can be multiple implementations. At least the PlayReady key system can also rely on common-encryption.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168489</commentid>
    <comment_count>39</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2016-02-26 06:27:16 -0800</bug_when>
    <thetext>For sure some of the media/encrypted-media tests should be unskipped along with this patch. I&apos;ll have a look :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168491</commentid>
    <comment_count>40</comment_count>
      <attachid>272321</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-02-26 06:34:16 -0800</bug_when>
    <thetext>Comment on attachment 272321
patch

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

&gt; Source/cmake/OptionsGTK.cmake:136
&gt; +WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ENCRYPTED_MEDIA PUBLIC ON)

Please default it to OFF here since it&apos;s useless out-of-the-box. But add it to Tools/Scripts/webkitperl/FeatureList.pm and enable it there, that way it will be enabled on the bots and for developers using build-webkit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169109</commentid>
    <comment_count>41</comment_count>
      <attachid>272321</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-02-29 04:02:28 -0800</bug_when>
    <thetext>Comment on attachment 272321
patch

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

This looks good to me in general, I&apos;m r+&apos;ing it, but I have a few more comments, and I would like that someone more familiar with EME would take a look at it too. Please add these files as exceptions to the style checker as we do with other gobject implementation files.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:53
&gt; +    WebKitCommonEncryptionDecryptorClass* commonEncryptionDecryptorClass = WEBKIT_COMMON_ENCRYPTION_DECRYPTOR_GET_CLASS(self);
&gt; +    return commonEncryptionDecryptorClass-&gt;setupCipher(self);

I still think we should either ASEERT, if this considered a pure virtual method, or null check otherwise. And the same for the rest for the vmethods.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:266
&gt; +        GRefPtr&lt;GstEvent&gt; protectedEvent = adoptGRef(event);

protected is no longer a good name for this now that we are adopting the ref.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:276
&gt; +        RunLoop::main().dispatch([protectedThis, protectedEvent, initDataBuffer] {

I would add a comment here, explaining that we capture the event because it&apos;s the owner of the buffer, otherwise it looks weird to capture something that is not used in the lambda.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:283
&gt; +        GRefPtr&lt;GstEvent&gt; protectedEvent = adoptGRef(event);

Ditto.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:325
&gt; +static gboolean webKitCommonEncryptionDecryptorDefaultSetupCipher(WebKitCommonEncryptionDecryptor*)
&gt; +{
&gt; +    return TRUE;
&gt; +}
&gt; +
&gt; +static void webKitCommonEncryptionDecryptorDefaultReleaseCipher(WebKitCommonEncryptionDecryptor*)
&gt; +{
&gt; +}

If these don&apos;t do anything useful, keep the vmethods as null and add null checks in the wrappers.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:345
&gt; +    klass-&gt;setupCipher = GST_DEBUG_FUNCPTR(webKitCommonEncryptionDecryptorDefaultSetupCipher);
&gt; +    klass-&gt;releaseCipher = GST_DEBUG_FUNCPTR(webKitCommonEncryptionDecryptorDefaultReleaseCipher);

What about the other vmethods?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169111</commentid>
    <comment_count>42</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-02-29 04:04:07 -0800</bug_when>
    <thetext>Also update the TestExpectations file for the tests passing now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169157</commentid>
    <comment_count>43</comment_count>
      <attachid>272321</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2016-02-29 09:25:31 -0800</bug_when>
    <thetext>Comment on attachment 272321
patch

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

To complement a bit more what Carlos said, some more comments. Most of them are nits. The important thing here is the test. I do think it is needed.

&gt; Source/WebCore/ChangeLog:24
&gt; +        There are no layout tests unskipped because this feature is
&gt; +        disabled by default.

If there is none, I think we should add some test to ensure at least the basic functionality is not broken, even when this is not active by default. This would be important specially if you honor Michael&apos;s comment later.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:878
&gt; +MediaPlayer::MediaKeyException MediaPlayerPrivateGStreamerBase::addKey(const String&amp; keySystem, const unsigned char* keyData, unsigned keyLength, const unsigned char* /* initData */, unsigned /* initDataLength */ , const String&amp; sessionId)

Remove the comment marks, leave the parameters. They are meaningful though unused.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:901
&gt; +MediaPlayer::MediaKeyException MediaPlayerPrivateGStreamerBase::cancelKeyRequest(const String&amp; /* keySystem */ , const String&amp; /* sessionId */)

Ditto.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:133
&gt; +    MediaPlayer::MediaKeyException addKey(const String&amp;, const unsigned char*, unsigned, const unsigned char*, unsigned, const String&amp;) override;
&gt; +    MediaPlayer::MediaKeyException generateKeyRequest(const String&amp;, const unsigned char*, unsigned) override;
&gt; +    MediaPlayer::MediaKeyException cancelKeyRequest(const String&amp;, const String&amp;) override;
&gt; +    void needKey(const String&amp;, const String&amp;, const unsigned char*, unsigned);

Parameters seem meaningful here. I wouldn&apos;t omit them.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:41
&gt; +#define CLEAR_KEY_PROTECTION_SYSTEM_ID &quot;58147ec8-0423-4659-92e6-f52c5ce8c3cc&quot;

Where does this come from? Maybe a comment?

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:70
&gt; +                &quot;key-system-id&quot;, G_TYPE_STRING, &quot;org.w3.clearkey&quot;, nullptr)));

nullptr -&gt; NULL

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:155
&gt; +        gst_buffer_unmap(buffer, &amp;map);
&gt; +        return FALSE;

We could do this GStreamer style, with a goto.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:170
&gt; +                gst_byte_reader_free(reader);
&gt; +                gst_buffer_unmap(buffer, &amp;map);
&gt; +                gst_buffer_unmap(subSamplesBuffer, &amp;subSamplesMap);

Ditto.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitClearKeyDecryptorGStreamer.cpp:189
&gt; +                gst_byte_reader_free(reader);
&gt; +                gst_buffer_unmap(buffer, &amp;map);
&gt; +                gst_buffer_unmap(subSamplesBuffer, &amp;subSamplesMap);

Ditto.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:96
&gt; +    unsigned size = gst_caps_get_size(caps);

guint?

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:99
&gt; +        GstStructure* in = gst_caps_get_structure(caps, i);
&gt; +        GUniquePtr&lt;GstStructure&gt; out;

I prefer more meaningful names, inputStructure/outputStructure

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:121
&gt; +            for (int index = gst_structure_n_fields(tmp.get()) - 1; index &gt;= 0; --index) {

gint?

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:147
&gt; +        unsigned size = gst_caps_get_size(transformedCaps);

guint?

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:154
&gt; +        for (unsigned index = 0; index &lt; size; ++index) {
&gt; +            GstStructure* item = gst_caps_get_structure(transformedCaps, index);
&gt; +            if (gst_structure_is_equal(item, out.get())) {
&gt; +                isDuplicated = true;
&gt; +                break;
&gt; +            }
&gt; +        }

Not strong preference, but:

for (unsigned index = 0; index &lt; size &amp;&amp; !isDuplicated; ++index) {
    GstStructure* item = gst_caps_get_structure(transformedCaps, index);
    isDuplicated = gst_structure_is_equal(item, out.get());
}

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:194
&gt; +        gst_buffer_remove_meta(buffer, meta);
&gt; +        return GST_FLOW_NOT_SUPPORTED;

We can go GStreamer style with gotos.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:201
&gt; +        gst_buffer_remove_meta(buffer, meta);
&gt; +        return GST_FLOW_NOT_SUPPORTED;

Ditto.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:206
&gt; +        gst_buffer_remove_meta(buffer, meta);
&gt; +        return GST_FLOW_OK;

Ditto.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:214
&gt; +        GST_ERROR_OBJECT(self, &quot;Failed to get subsample_count&quot;);
&gt; +        gst_buffer_remove_meta(buffer, meta);
&gt; +        return GST_FLOW_NOT_SUPPORTED;

Ditto.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:224
&gt; +            GST_ERROR_OBJECT(self, &quot;Failed to get subsamples&quot;);
&gt; +            gst_buffer_remove_meta(buffer, meta);
&gt; +            return GST_FLOW_NOT_SUPPORTED;

Ditto.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:232
&gt; +        GST_ERROR_OBJECT(self, &quot;Failed to configure cipher&quot;);
&gt; +        gst_buffer_remove_meta(buffer, meta);
&gt; +        return GST_FLOW_NOT_SUPPORTED;

Ditto.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:240
&gt; +        webkitCommonEncryptionDecryptorReleaseCipher(self);
&gt; +        gst_buffer_remove_meta(buffer, meta);
&gt; +        return GST_FLOW_NOT_SUPPORTED;

Ditto.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:248
&gt; +        webkitCommonEncryptionDecryptorReleaseCipher(self);
&gt; +        gst_buffer_remove_meta(buffer, meta);
&gt; +        return GST_FLOW_NOT_SUPPORTED;

Ditto.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.cpp:276
&gt;&gt; +        RunLoop::main().dispatch([protectedThis, protectedEvent, initDataBuffer] {
&gt; 
&gt; I would add a comment here, explaining that we capture the event because it&apos;s the owner of the buffer, otherwise it looks weird to capture something that is not used in the lambda.

I don&apos;t know what the spec says about this, but I even wonder if this could even get compiled out at some degree of automatic compiler optimization.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitCommonEncryptionDecryptorGStreamer.h:57
&gt; +    gboolean (*handleKeyResponse) (WebKitCommonEncryptionDecryptor*, GstEvent* event);

Remove the event parameter name here. Not meaningful

&gt; Source/cmake/FindLibGcrypt.cmake:18
&gt; +# Copyright 2014 NicolÃ¡s Alvarez &lt;nicolas.alvarez@gmail.com&gt;

Fix enconding

&gt; Source/cmake/FindLibGpgError.cmake:19
&gt; +# Copyright 2014 NicolÃ¡s Alvarez &lt;nicolas.alvarez@gmail.com&gt;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169160</commentid>
    <comment_count>44</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2016-02-29 09:27:51 -0800</bug_when>
    <thetext>Might we make the style bot happy too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169165</commentid>
    <comment_count>45</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2016-02-29 09:29:36 -0800</bug_when>
    <thetext>Btw, this patch is pretty big. Slicing it would be better, IMHO</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169229</commentid>
    <comment_count>46</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-02-29 12:07:04 -0800</bug_when>
    <thetext>Phil did agree to add layout tests, that&apos;s why he did the GStreamer 1.6 upgrade on the bots. ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1276214</commentid>
    <comment_count>47</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2017-02-13 09:35:37 -0800</bug_when>
    <thetext>V1 is dead.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271330</attachid>
            <date>2016-02-15 01:50:00 -0800</date>
            <delta_ts>2016-02-15 02:06:00 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>52289</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSAwMGEwOTdkZGQ5M2VkMTMwNTdiMGU5ZWJjMzEwYjIzYTBlMzgzYWJiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBNb24sIDE1IEZlYiAyMDE2IDEwOjQ3OjUwICswMTAwClN1YmplY3Q6IFtQQVRDSF0g
cGF0Y2gKCi0tLQogQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgMTIgKwogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgODAgKysrKysKIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlICAg
ICAgICAgICAgICAgICAgIHwgIDE1ICsKIC4uLi9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyLmNwcCAgICAgIHwgICA1ICstCiAuLi4vZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2UuY3BwICB8IDEyMCArKysrKystCiAuLi4vZ3N0cmVhbWVyL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuaCAgICB8ICAxMyArCiAuLi4vZ3N0cmVhbWVyL1dl
YktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcCB8IDI3MCArKysrKysrKysrKysrKysK
IC4uLi9nc3RyZWFtZXIvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuaCAgIHwgIDU2
ICsrKysKIC4uLi9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcCAg
IHwgMzY5ICsrKysrKysrKysrKysrKysrKysrKwogLi4uL1dlYktpdENvbW1vbkVuY3J5cHRpb25E
ZWNyeXB0b3JHU3RyZWFtZXIuaCAgICAgfCAgNjcgKysrKwogLi4uL1dlYktpdDIvV2ViUHJvY2Vz
cy9ndGsvV2ViUHJvY2Vzc01haW5HdGsuY3BwICAgfCAgIDIgLQogU291cmNlL2NtYWtlL09wdGlv
bnNHVEsuY21ha2UgICAgICAgICAgICAgICAgICAgICAgfCAgIDkgKwogMTIgZmlsZXMgY2hhbmdl
ZCwgMTAxMyBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRDbGVhcktl
eURlY3J5cHRvckdTdHJlYW1lci5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3Ry
ZWFtZXIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNw
cAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmgKCmRpZmYg
LS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggMzAyNjliOC4uZjhhOTNiMiAxMDA2
NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE2
LTAyLTE1ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAg
ICBbR1RLXVtHU3RyZWFtZXJdIENsZWFyS2V5IEVNRSB2MSBkZWNyeXB0aW9uIHN1cHBvcnQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDIzNQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU291cmNlL2Nt
YWtlL0ZpbmRMaWJHY3J5cHQuY21ha2U6IEFkZGVkLgorICAgICAgICAqIFNvdXJjZS9jbWFrZS9P
cHRpb25zR1RLLmNtYWtlOiBOZXcgcHVibGljIG9wdGlvbiBmb3IKKyAgICAgICAgRU5DUllQVEVE
X01FRElBLCBvZmYgYnkgZGVmYXVsdC4gVGhpcyByZXF1aXJlcyBHU3RyZWFtZXIgMS42Lnggb3IK
KyAgICAgICAgYWJvdmUgYW5kIGxpYmdjcnlwdC4KKwogMjAxNi0wMi0xMiAgQ3NhYmEgT3N6dHJv
Z29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtFRkxdW0dUS10gRml4IEVOQUJM
RShTVkdfT1RGX0NPTlZFUlRFUikgYnVpbGQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjNjNhOTUwLi5jNGI4ZDlk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODMgQEAKKzIwMTYtMDItMTUgIFBoaWxpcHBlIE5vcm1h
bmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdW0dTdHJlYW1lcl0gQ2xl
YXJLZXkgRU1FIHYxIGRlY3J5cHRpb24gc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0MjM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEdTdHJl
YW1lciBiYXNlIGNsYXNzIChpdHNlbGYKKyAgICAgICAgaW5oZXJpdGluZyBmcm9tIGJhc2V0cmFu
c2Zvcm0pIHRoYXQgcHJvdmlkZXMgQ29tbW9uIEVuY3J5cHRpb24KKyAgICAgICAgZGVjcnlwdGlv
biBzdXBwb3J0IGZvciBJU08gYmFzZSBtZWRpYSBmaWxlIGZvcm1hdC4gQSBDbGVhcktleQorICAg
ICAgICBkZWNyeXB0b3IgdXNpbmcgdGhpcyBiYXNlIGNsYXNzIGlzIGFsc28gcHJvdmlkZWQgYXMg
YSBwcm9vZiBvZgorICAgICAgICBjb25jZXB0LgorCisgICAgICAgIFdoZW4gdGhlIEdTdHJlYW1l
ciBkZW11eGVyIGRldGVjdHMgdGhlIHByZXNlbmNlIG9mIHByb3RlY3RlZAorICAgICAgICBjb250
ZW50LCB0aGlzIGluZm9ybWF0aW9uIGlzIGJyb2FkY2FzdGVkIHRvIHRoZSByZXN0IG9mIHRoZQor
ICAgICAgICBwaXBlbGluZSBhbmQgdGhlIGRlY29kZXIgYXR0ZW1wdHMgdG8gY3JlYXRlIGEgZGVj
cnlwdG9yIGVsZW1lbnQKKyAgICAgICAgYWJsZSB0byBoYW5kbGUgdGhpcyBwcm90ZWN0ZWQgY29u
dGVudC4gSW4gdGhpcyBzY2VuYXJpbyB0aGUgbWVkaWEKKyAgICAgICAgcGxheWVyIHJlY2VpdmVz
IGEgbWVzc2FnZSBmcm9tIHRoZSBkZWNyeXB0b3IgYW5kIHRyaWdnZXJzIGtleQorICAgICAgICBu
ZWdvdGlhdGlvbi4gQWZ0ZXIgdGhlIGRlY3J5cHRpb24ga2V5IHdhcyBhY3F1aXJlZCBpdCBpcyBw
YXNzZWQKKyAgICAgICAgYmFjayBvbiB0byB0aGUgZGVjcnlwdG9yIHVzaW5nIGFuIE9PQiBkb3du
c3RyZWFtIEdTdHJlYW1lciBldmVudAorICAgICAgICBhbmQgdGhlIGRlY3J5cHRvciBjYW4gb3Bl
cmF0ZSBmcm9tIHRoYXQgcG9pbnQuCisKKyAgICAgICAgVGhlcmUgYXJlIG5vIGxheW91dCB0ZXN0
cyB1bnNraXBwZWQgYmVjYXVzZSB0aGlzIGZlYXR1cmUgaXMKKyAgICAgICAgZGlzYWJsZWQgYnkg
ZGVmYXVsdC4KKworICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOiBBZGQgbmV3IGZpbGVzIHRv
IHRoZSBidWlsZCBpZiBFTkNSWVBURURfTUVESUEgaXMgZW5hYmxlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmluaXRpYWxpemVHU3RyZWFtZXJBbmRSZWdpc3RlcldlYktpdEVs
ZW1lbnRzKTogUmVnaXN0ZXIgZGVjcnlwdG9yKHMpIGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnN1cHBvcnRzVHlwZSk6IEhvb2sgb24gdG8gZXh0
ZW5kZWRTdXBwb3J0c1R5cGUgKHNlZSBiZWxvdyksCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6cmVnaXN0ZXJXZWJLaXRHU3RyZWFtZXJFbGVtZW50cyk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpoYW5kbGVTeW5jTWVzc2Fn
ZSk6CisgICAgICAgIEhhbmRsZSBkcm0ta2V5LW5lZWRlZCBtZXNzYWdlcyBjb21pbmcgZnJvbSBk
ZWNyeXB0b3JzLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
QmFzZTo6c3VwcG9ydHNLZXlTeXN0ZW0pOiBXZSBjYW4gbm93IGhhbmRsZSBDbGVhcktleS4KKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmRpc3BhdGNo
RGVjcnlwdGlvbktleSk6CisgICAgICAgIFRoaXMgaXMgY2FsbGVkIGFmdGVyIHRoZSBkZWNyeXB0
aW9uIGtleSB3YXMgYWNxdWlyZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJCYXNlOjphZGRLZXkpOiBCYXNpYyBpbXBsZW1lbnRhdGlvbiBvZiBFTUUgdjEK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmdlbmVy
YXRlS2V5UmVxdWVzdCk6IERpdHRvCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJCYXNlOjpjYW5jZWxLZXlSZXF1ZXN0KTogRGl0dG8KKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Om5lZWRLZXkpOiBEaXR0bworICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6ZXh0ZW5kZWRT
dXBwb3J0c1R5cGUpOiBIb29rIG9uIHRvIHN1cHBvcnRzS2V5U3lzdGVtLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNl
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdENsZWFyS2V5
RGVjcnlwdG9yR1N0cmVhbWVyLmNwcDogQWRkZWQuCisgICAgICAgICh3ZWJraXRfbWVkaWFfY2xl
YXJfa2V5X2RlY3J5cHRfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfbWVkaWFfY2xlYXJf
a2V5X2RlY3J5cHRfaW5pdCk6CisgICAgICAgICh3ZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdG9y
RmluYWxpemUpOgorICAgICAgICAod2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRvclJlcXVlc3RE
ZWNyeXB0aW9uS2V5KTogTWV0aG9kIHVzZWQgdG8KKyAgICAgICAgdHJpZ2dlciBrZXkgbmVnb3Rp
YXRpb24sIHVzdWFsbHkgdGhpcyB3b3VsZCBzZW5kIGEgZHJtLWtleS1uZWVkZWQKKyAgICAgICAg
bWVzc2FnZSBvbiB0aGUgYnVzLgorICAgICAgICAod2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRv
ckhhbmRsZUtleVJlc3BvbnNlKTogTWV0aG9kIHVzZWQgdG8KKyAgICAgICAgc2F2ZSB0aGUgZGVj
cnlwdGlvbiBrZXkgb3Igc2Vzc2lvbiBkYXRhIHJlcXVpcmVkIHRvIHBlcmZvcm0KKyAgICAgICAg
Y29udGVudCBkZWNyeXB0aW9uLgorICAgICAgICAod2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRv
clNldHVwQ2lwaGVyKTogTWV0aG9kIGNhbGxlZCBldmVyeQorICAgICAgICB0aW1lIGEgYnVmZmVy
IG5lZWRzIHRvIGJlIGRlY3J5cHRlZC4KKyAgICAgICAgKHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNy
eXB0b3JEZWNyeXB0KTogQWN0dWFsIGNvbnRlbnQgZGVjcnlwdGlvbgorICAgICAgICB3aXRoIG9w
dGlvbmFsIHN1Yi1zYW1wbGVzIGRhdGEgYW5kIGluaXRpYWxpemF0aW9uIHZlY3Rvci4KKyAgICAg
ICAgKHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JSZWxlYXNlQ2lwaGVyKTogVGhpcyBpcyBj
YWxsZWQgYWZ0ZXIKKyAgICAgICAgY29udGVudCBkZWNyeXB0aW9uIHdhcyBwZXJmb3JtZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdENsZWFyS2V5RGVjcnlw
dG9yR1N0cmVhbWVyLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcDogQWRkZWQu
CisgICAgICAgICh3ZWJraXRfbWVkaWFfY29tbW9uX2VuY3J5cHRpb25fZGVjcnlwdF9jbGFzc19p
bml0KToKKyAgICAgICAgKHdlYmtpdF9tZWRpYV9jb21tb25fZW5jcnlwdGlvbl9kZWNyeXB0X2lu
aXQpOgorICAgICAgICAod2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yRmluYWxp
emUpOgorICAgICAgICAod2Via2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFRyYW5zZm9y
bUNhcHMpOiBGaWx0ZXIgb3V0CisgICAgICAgIGNvbnRlbnQgcHJvdGVjdGlvbiBpbmZvcm1hdGlv
bnMgZnJvbSB0aGUgaW5jb21pbmcgY2Fwcy4KKyAgICAgICAgKHdlYmtpdE1lZGlhQ29tbW9uRW5j
cnlwdGlvbkRlY3J5cHRUcmFuc2Zvcm1JblBsYWNlKTogUHJvY2VzcyBhbgorICAgICAgICBpbmNv
bWluZyBidWZmZXIsIGNoZWNrIGl0IGhhcyBhIHByb3RlY3Rpb24gbWV0YWRhdGEgc3RydWN0dXJl
IGFuZAorICAgICAgICBwZXJmb3JtIGluLXBsYWNlIGNvbnRlbnQgZGVjcnlwdGlvbiBhY2NvcmRp
bmcgdG8gdGhlCisgICAgICAgIGluaXRpYWxpemF0aW9uIHZlY3RvciBhbmQgc3ViLXNhbXBsZXMg
ZGF0YS4KKyAgICAgICAgKHdlYmtpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRTaW5rRXZl
bnRIYW5kbGVyKTogSG9vayBvbiB0bworICAgICAgICBwcm90ZWN0aW9uIGV2ZW50cyB0byB0cmln
Z2VyIGtleSBuZWdvdGlhdGlvbiBpbiB0aGUgbWVkaWEgcGxheWVyCisgICAgICAgIGFuZCBoYW5k
bGUgT09CIGV2ZW50cyBjb21pbmcgZnJvbSB0aGUgbWVkaWEgcGxheWVyIHRvIHVuYmxvY2sKKyAg
ICAgICAgY29udGVudCBkZWNyeXB0aW9uIHRhc2tzLgorICAgICAgICAod2ViS2l0TWVkaWFDb21t
b25FbmNyeXB0aW9uRGVjcnlwdG9yQ2hhbmdlU3RhdGUpOiBNYWtlIHN1cmUgdG8KKyAgICAgICAg
YXZvaWQgZGVhZGxvY2tzIGluIGNhc2VzIHdoZXJlIHRoZSBkZWNyeXB0b3IgaXMgZGlzcG9zZWQg
YmVmb3JlCisgICAgICAgIHRoZSBkZWNyeXB0aW9uIGtleSB3YXMgcmVjZWl2ZWQuCisgICAgICAg
ICh3ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0RGVmYXVsdFNldHVwQ2lwaGVyKTog
RGVmYXVsdCBkdW1teSBtZXRob2QgaW1wbGVtZW50YXRpb24uCisgICAgICAgICh3ZWJLaXRNZWRp
YUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0RGVmYXVsdFJlbGVhc2VDaXBoZXIpOiBEaXR0by4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0Q29tbW9uRW5jcnlwdGlv
bkRlY3J5cHRvckdTdHJlYW1lci5oOiBBZGRlZC4KKwogMjAxNi0wMi0xNCAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ1NTIEZpbHRlcnNdIFdoZW4g
YXBwbHlpbmcgYW4gU1ZHIGZpbHRlciBvbiBhIGNvbXBvc2l0ZWQgaW1hZ2UgdXNpbmcgQ1NTIHRo
ZSBpbWFnZSBpcyByZW5kZXJlZCB3aXRob3V0IHRoZSBmaWx0ZXIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsu
Y21ha2UKaW5kZXggZjg1ODJhYS4uOTI0NTBhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UK
QEAgLTgyMSwzICs4MjEsMTggQEAgaWYgKEVOQUJMRV9TVUJUTEVfQ1JZUFRPKQogICAgICAgICAk
e0dOVVRMU19MSUJSQVJJRVN9CiAgICAgKQogZW5kaWYgKCkKKworaWYgKEVOQUJMRV9FTkNSWVBU
RURfTUVESUEpCisgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCisg
ICAgICAgICR7TElCR0NSWVBUX0lOQ0xVREVfRElSU30KKyAgICApCisgICAgbGlzdChBUFBFTkQg
V2ViQ29yZV9MSUJSQVJJRVMKKyAgICAgICAgJHtMSUJHQ1JZUFRfTElCUkFSSUVTfSAtbGdwZy1l
cnJvcgorICAgICkKKworICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRv
ckdTdHJlYW1lci5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktp
dENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcAorICAgICkKKworZW5kaWYgKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKaW5kZXggOGEzM2E2
Yy4uNTQ3YWI5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lci5jcHAKQEAgLTEwNyw2ICsxMDcsOCBAQCBib29sIGluaXRpYWxpemVHU3RyZWFtZXJBbmRS
ZWdpc3RlcldlYktpdEVsZW1lbnRzKCkKICAgICBpZiAoIWluaXRpYWxpemVHU3RyZWFtZXIoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgcmVnaXN0ZXJXZWJLaXRHU3RyZWFtZXJFbGVt
ZW50cygpOworCiAgICAgR1JlZlB0cjxHc3RFbGVtZW50RmFjdG9yeT4gc3JjRmFjdG9yeSA9IGdz
dF9lbGVtZW50X2ZhY3RvcnlfZmluZCgid2Via2l0d2Vic3JjIik7CiAgICAgaWYgKCFzcmNGYWN0
b3J5KSB7CiAgICAgICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF9tZWRpYV9wbGF5
ZXJfZGVidWcsICJ3ZWJraXRtZWRpYXBsYXllciIsIDAsICJXZWJLaXQgbWVkaWEgcGxheWVyIik7
CkBAIC0xNzc3LDcgKzE3NzksOCBAQCBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRQogICAgIC8vIHNw
ZWMgc2F5cyB3ZSBzaG91bGQgbm90IHJldHVybiAicHJvYmFibHkiIGlmIHRoZSBjb2RlY3Mgc3Ry
aW5nIGlzIGVtcHR5CiAgICAgaWYgKG1pbWVUeXBlQ2FjaGUoKS5jb250YWlucyhwYXJhbWV0ZXJz
LnR5cGUpKQogICAgICAgICByZXR1cm4gcGFyYW1ldGVycy5jb2RlY3MuaXNFbXB0eSgpID8gTWVk
aWFQbGF5ZXI6Ok1heUJlU3VwcG9ydGVkIDogTWVkaWFQbGF5ZXI6OklzU3VwcG9ydGVkOwotICAg
IHJldHVybiBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICByZXR1cm4gZXh0ZW5k
ZWRTdXBwb3J0c1R5cGUocGFyYW1ldGVycywgTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkKTsK
IH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldERvd25sb2FkQnVmZmVy
aW5nKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJC
YXNlLmNwcAppbmRleCA0MjgwMzhjLi5jMzI3ZGYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwCkBAIC04MCw2ICs4MCwxNCBAQAog
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyLmgiCiAjZW5kaWYKIAor
I2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCisjaW5jbHVkZSAiVVVJRC5oIgorI2luY2x1ZGUg
IldlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmgiCisjaW5jbHVkZSA8cnVudGltZS9K
U0NJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgorI2lu
Y2x1ZGUgPHJ1bnRpbWUvVWludDhBcnJheS5oPgorI2VuZGlmCisKICNpZiBVU0UoQ0FJUk8pICYm
IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAjaW5jbHVkZSA8Y2Fpcm8tZ2wuaD4KICNl
bmRpZgpAQCAtOTEsNiArOTksMTggQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCit2b2lkIHJlZ2lzdGVyV2ViS2l0R1N0cmVhbWVyRWxlbWVudHMoKQorewor
I2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCisgICAgaWYgKCF3ZWJraXRHc3RDaGVja1ZlcnNp
b24oMSwgNiwgMSkpCisgICAgICAgIHJldHVybjsKKworICAgIEdSZWZQdHI8R3N0RWxlbWVudEZh
Y3Rvcnk+IGNsZWFyS2V5RGVjcnlwdG9yRmFjdG9yeSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfZmlu
ZCgid2Via2l0Y2xlYXJrZXkiKTsKKyAgICBpZiAoIWNsZWFyS2V5RGVjcnlwdG9yRmFjdG9yeSkK
KyAgICAgICAgZ3N0X2VsZW1lbnRfcmVnaXN0ZXIoMCwgIndlYmtpdGNsZWFya2V5IiwgR1NUX1JB
TktfUFJJTUFSWSArIDEwMCwgV0VCS0lUX1RZUEVfTUVESUFfQ0tfREVDUllQVCk7CisjZW5kaWYK
K30KKwogc3RhdGljIGludCBncmVhdGVzdENvbW1vbkRpdmlzb3IoaW50IGEsIGludCBiKQogewog
ICAgIHdoaWxlIChiKSB7CkBAIC0yMjYsMTAgKzI0NiwzMSBAQCBib29sIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2U6OmhhbmRsZVN5bmNNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2Up
CiAgICAgICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0KEdTVF9FTEVNRU5UKG1lc3NhZ2UtPnNy
YyksIGFwcENvbnRleHQuZ2V0KCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0jZWxz
ZQotICAgIFVOVVNFRF9QQVJBTShtZXNzYWdlKTsKICNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX0dM
KQogCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKyAgICBpZiAoR1NUX01FU1NBR0VfVFlQ
RShtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9FTEVNRU5UKSB7CisgICAgICAgIGNvbnN0IEdzdFN0
cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZShtZXNzYWdlKTsK
KyAgICAgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImRybS1rZXkt
bmVlZGVkIikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgTE9HX01FRElB
X01FU1NBR0UoImhhbmRsaW5nIGRybS1rZXktbmVlZGVkIG1lc3NhZ2UiKTsKKworICAgICAgICBH
c3RCdWZmZXIqIGRhdGE7CisgICAgICAgIGNvbnN0IGNoYXIqIGtleVN5c3RlbUlkOworICAgICAg
ICBnYm9vbGVhbiB2YWxpZCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0KHN0cnVjdHVyZSwgImRhdGEiLCBH
U1RfVFlQRV9CVUZGRVIsICZkYXRhLCAia2V5LXN5c3RlbS1pZCIsIEdfVFlQRV9TVFJJTkcsICZr
ZXlTeXN0ZW1JZCwgbnVsbHB0cik7CisgICAgICAgIEdzdE1hcEluZm8gbWFwSW5mbzsKKyAgICAg
ICAgaWYgKCF2YWxpZCB8fCAhZ3N0X2J1ZmZlcl9tYXAoZGF0YSwgJm1hcEluZm8sIEdTVF9NQVBf
UkVBRCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgR1NUX0RFQlVHKCJz
Y2hlZHVsaW5nIGtleU5lZWRlZCBldmVudCIpOworICAgICAgICBuZWVkS2V5KGtleVN5c3RlbUlk
LCBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5z
aWduZWQgY2hhciAqPihtYXBJbmZvLmRhdGEpLCBtYXBJbmZvLnNpemUpOworICAgICAgICBnc3Rf
YnVmZmVyX3VubWFwKGRhdGEsICZtYXBJbmZvKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpCisKKyAgICBVTlVTRURfUEFSQU0o
bWVzc2FnZSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC04MjMsNiArODY0LDgxIEBAIHVu
c2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnZpZGVvRGVjb2RlZEJ5dGVD
b3VudCgpIGNvbnN0CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihwb3NpdGlvbik7
CiB9CiAKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6c3VwcG9ydHNLZXlT
eXN0ZW0oY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0sIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7
CisgICAgTE9HX01FRElBX01FU1NBR0UoIkNoZWNraW5nIGZvciBLZXlTeXN0ZW0gc3VwcG9ydCB3
aXRoICVzIGFuZCB0eXBlICVzIiwga2V5U3lzdGVtLnV0ZjgoKS5kYXRhKCksIG1pbWVUeXBlLnV0
ZjgoKS5kYXRhKCkpOworCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKyAgICBpZiAoIXdl
YmtpdEdzdENoZWNrVmVyc2lvbigxLCA2LCAxKSkgeworICAgICAgICBXQVJOX01FRElBX01FU1NB
R0UoIkVuY3J5cHRlZCBNZWRpYSBFeHRlbnNpb25zIHJlcXVpcmUgR1N0cmVhbWVyIDEuNiIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJ
SUNhc2Uoa2V5U3lzdGVtLCAib3JnLnczLmNsZWFya2V5IikpCisgICAgICAgIHJldHVybiB0cnVl
OworI2VuZGlmCisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKyNpZiBFTkFCTEUoRU5DUllQVEVE
X01FRElBKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpkaXNwYXRjaERl
Y3J5cHRpb25LZXkoR3N0QnVmZmVyKiBidWZmZXIpCit7CisgICAgZ3N0X2VsZW1lbnRfc2VuZF9l
dmVudChtX3BpcGVsaW5lLmdldCgpLCBnc3RfZXZlbnRfbmV3X2N1c3RvbShHU1RfRVZFTlRfQ1VT
VE9NX0RPV05TVFJFQU1fT09CLAorICAgICAgICBnc3Rfc3RydWN0dXJlX25ldygiZHJtLWNpcGhl
ciIsICJrZXkiLCBHU1RfVFlQRV9CVUZGRVIsIGJ1ZmZlciwgbnVsbHB0cikpKTsKK30KKworTWVk
aWFQbGF5ZXI6Ok1lZGlhS2V5RXhjZXB0aW9uIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJh
c2U6OmFkZEtleShjb25zdCBTdHJpbmcmIGtleVN5c3RlbSwgY29uc3QgdW5zaWduZWQgY2hhciog
a2V5RGF0YSwgdW5zaWduZWQga2V5TGVuZ3RoLCBjb25zdCB1bnNpZ25lZCBjaGFyKiAvKiBpbml0
RGF0YSAqLywgdW5zaWduZWQgLyogaW5pdERhdGFMZW5ndGggKi8gLCBjb25zdCBTdHJpbmcmIHNl
c3Npb25JRCkKK3sKKyAgICBMT0dfTUVESUFfTUVTU0FHRSgiYWRkS2V5IHN5c3RlbTogJXMsIGxl
bmd0aDogJXUsIHNlc3Npb246ICVzIiwga2V5U3lzdGVtLnV0ZjgoKS5kYXRhKCksIGtleUxlbmd0
aCwgc2Vzc2lvbklELnV0ZjgoKS5kYXRhKCkpOworCisgICAgaWYgKCFlcXVhbElnbm9yaW5nQVND
SUlDYXNlKGtleVN5c3RlbSwgIm9yZy53My5jbGVhcmtleSIpKQorICAgICAgICByZXR1cm4gTWVk
aWFQbGF5ZXI6OktleVN5c3RlbU5vdFN1cHBvcnRlZDsKKworICAgIEdSZWZQdHI8R3N0QnVmZmVy
PiBidWZmZXIgPSBhZG9wdEdSZWYoZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZChnX21lbWR1cChrZXlE
YXRhLCBrZXlMZW5ndGgpLCBrZXlMZW5ndGgpKTsKKyAgICBkaXNwYXRjaERlY3J5cHRpb25LZXko
YnVmZmVyLmdldCgpKTsKKyAgICByZXR1cm4gTWVkaWFQbGF5ZXI6Ok5vRXJyb3I7Cit9CisKK01l
ZGlhUGxheWVyOjpNZWRpYUtleUV4Y2VwdGlvbiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJC
YXNlOjpnZW5lcmF0ZUtleVJlcXVlc3QoY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0sIGNvbnN0IHVu
c2lnbmVkIGNoYXIqIGluaXREYXRhUHRyLCB1bnNpZ25lZCBpbml0RGF0YUxlbmd0aCkKK3sKKyAg
ICBMT0dfTUVESUFfTUVTU0FHRSgiZ2VuZXJhdGluZyBrZXkgcmVxdWVzdCBmb3Igc3lzdGVtOiAl
cyIsIGtleVN5c3RlbS51dGY4KCkuZGF0YSgpKTsKKworICAgIGlmICghZXF1YWxJZ25vcmluZ0FT
Q0lJQ2FzZShrZXlTeXN0ZW0sICJvcmcudzMuY2xlYXJrZXkiKSkKKyAgICAgICAgcmV0dXJuIE1l
ZGlhUGxheWVyOjpLZXlTeXN0ZW1Ob3RTdXBwb3J0ZWQ7CisKKyAgICBtX3BsYXllci0+a2V5TWVz
c2FnZShrZXlTeXN0ZW0sIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSwgaW5pdERhdGFQdHIs
IGluaXREYXRhTGVuZ3RoLCBVUkwoKSk7CisgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpOb0Vycm9y
OworfQorCitNZWRpYVBsYXllcjo6TWVkaWFLZXlFeGNlcHRpb24gTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyQmFzZTo6Y2FuY2VsS2V5UmVxdWVzdChjb25zdCBTdHJpbmcmIC8qIGtleVN5c3Rl
bSAqLyAsIGNvbnN0IFN0cmluZyYgLyogc2Vzc2lvbklEICovKQoreworICAgIExPR19NRURJQV9N
RVNTQUdFKCJjYW5jZWxLZXlSZXF1ZXN0Iik7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gTWVkaWFQbGF5ZXI6OktleVN5c3RlbU5vdFN1cHBvcnRlZDsKK30KKwordm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpuZWVkS2V5KGNvbnN0IFN0cmluZyYga2V5U3lz
dGVtLCBjb25zdCBTdHJpbmcmIHNlc3Npb25JZCwgY29uc3QgdW5zaWduZWQgY2hhciogaW5pdERh
dGEsIHVuc2lnbmVkIGluaXREYXRhTGVuZ3RoKQoreworICAgIGlmICghbV9wbGF5ZXItPmtleU5l
ZWRlZChrZXlTeXN0ZW0sIHNlc3Npb25JZCwgaW5pdERhdGEsIGluaXREYXRhTGVuZ3RoKSkKKyAg
ICAgICAgR1NUX0RFQlVHKCJubyBldmVudCBoYW5kbGVyIGZvciBrZXkgbmVlZGVkIik7Cit9Cisj
ZW5kaWYKKworTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlOjpleHRlbmRlZFN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQ
YXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIHJlc3VsdCkK
K3sKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQorICAgIGlmIChwYXJhbWV0ZXJzLmtleVN5
c3RlbS5pc051bGwoKSB8fCBwYXJhbWV0ZXJzLmtleVN5c3RlbS5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiByZXN1bHQ7CisKKyAgICBpZiAoc3VwcG9ydHNLZXlTeXN0ZW0ocGFyYW1ldGVycy5r
ZXlTeXN0ZW0sIGVtcHR5U3RyaW5nKCkpKQorICAgICAgICByZXN1bHQgPSBNZWRpYVBsYXllcjo6
SXNTdXBwb3J0ZWQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwYXJhbWV0ZXJzKTsKKyNlbmRp
ZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0KIAogI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuaApp
bmRleCBmNWVhMjFkLi43ZDMzY2Q3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJCYXNlLmgKQEAgLTUzLDYgKzUzLDggQEAgY2xhc3MgR3JhcGhpY3ND
b250ZXh0M0Q7CiBjbGFzcyBJbnRTaXplOwogY2xhc3MgSW50UmVjdDsKIAordm9pZCByZWdpc3Rl
cldlYktpdEdTdHJlYW1lckVsZW1lbnRzKCk7CisKIGNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lckJhc2UgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlCiAjaWYgVVNF
KFRFWFRVUkVfTUFQUEVSX0dMKSAmJiAhVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogICAgICwg
cHVibGljIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyCkBAIC0xMTgsNiArMTIwLDE3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KICNlbmRpZgogCisjaWYgRU5BQkxFKEVOQ1JZ
UFRFRF9NRURJQSkKKyAgICBNZWRpYVBsYXllcjo6TWVkaWFLZXlFeGNlcHRpb24gYWRkS2V5KGNv
bnN0IFN0cmluZyYsIGNvbnN0IHVuc2lnbmVkIGNoYXIqLCB1bnNpZ25lZCwgY29uc3QgdW5zaWdu
ZWQgY2hhciosIHVuc2lnbmVkLCBjb25zdCBTdHJpbmcmKTsKKyAgICBNZWRpYVBsYXllcjo6TWVk
aWFLZXlFeGNlcHRpb24gZ2VuZXJhdGVLZXlSZXF1ZXN0KGNvbnN0IFN0cmluZyYsIGNvbnN0IHVu
c2lnbmVkIGNoYXIqLCB1bnNpZ25lZCk7CisgICAgTWVkaWFQbGF5ZXI6Ok1lZGlhS2V5RXhjZXB0
aW9uIGNhbmNlbEtleVJlcXVlc3QoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CisgICAg
dm9pZCBuZWVkS2V5KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IHVuc2lnbmVk
IGNoYXIqLCB1bnNpZ25lZCk7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGVjcnlwdGlvbktl
eShHc3RCdWZmZXIqKTsKKyNlbmRpZgorCisgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNLZXlTeXN0
ZW0oY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0sIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworICAg
IHN0YXRpYyBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIGV4dGVuZGVkU3VwcG9ydHNUeXBlKGNv
bnN0IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIE1lZGlhUGxheWVy
OjpTdXBwb3J0c1R5cGUpOworCiAjaWYgVVNFKEdTVFJFQU1FUl9HTCkKICAgICB2aXJ0dWFsIFBh
c3NOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRUaW1lKCkgb3ZlcnJpZGU7CiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9XZWJLaXRDbGVhcktleURlY3J5cHRvckdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3Ry
ZWFtZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMTQzYmIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwCkBAIC0wLDAgKzEsMjcwIEBA
CisvKiBHU3RyZWFtZXIgQ2xlYXJLZXkgY29tbW9uIGVuY3J5cHRpb24gZGVjcnlwdG9yCisgKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwKKyAqIENvcHlyaWdodCAoQykgMjAxNiBN
ZXRyb2xvZ2ljYWwKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIFN1aXRlIDUwMCwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIFVTRShHU1RSRUFNRVIpCisjaW5j
bHVkZSAiV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuaCIKKworI2luY2x1ZGUgIkdS
ZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlIDxnY3J5cHQuaD4KKyNpbmNsdWRlIDxnc3QvYmFz
ZS9nc3RieXRlcmVhZGVyLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKworI2RlZmluZSBD
TEVBUktFWV9TSVpFIDE2CisKKyNkZWZpbmUgV0VCS0lUX01FRElBX0NLX0RFQ1JZUFRfR0VUX1BS
SVZBVEUob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBXRUJLSVRfVFlQ
RV9NRURJQV9DS19ERUNSWVBULCBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUpKQor
c3RydWN0IF9XZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUgeworICAgIEdSZWZQdHI8
R3N0QnVmZmVyPiBrZXk7CisgICAgZ2NyeV9jaXBoZXJfaGRfdCBoYW5kbGU7Cit9OworCitzdGF0
aWMgdm9pZCB3ZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdG9yRmluYWxpemUoR09iamVjdCopOwor
c3RhdGljIHZvaWQgd2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRvclJlcXVlc3REZWNyeXB0aW9u
S2V5KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYsIEdzdEJ1ZmZlciop
Oworc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JIYW5kbGVLZXlS
ZXNwb25zZShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmLCBHc3RFdmVu
dCopOworc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JTZXR1cENp
cGhlcihXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Kik7CitzdGF0aWMgZ2Jvb2xl
YW4gd2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRvckRlY3J5cHQoV2ViS2l0TWVkaWFDb21tb25F
bmNyeXB0aW9uRGVjcnlwdCosIEdzdEJ1ZmZlciogaXYsIEdzdEJ1ZmZlciogc2FtcGxlLCB1bnNp
Z25lZCBzdWJTYW1wbGVzQ291bnQsIEdzdEJ1ZmZlciogc3ViU2FtcGxlcyk7CitzdGF0aWMgdm9p
ZCB3ZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdG9yUmVsZWFzZUNpcGhlcihXZWJLaXRNZWRpYUNv
bW1vbkVuY3J5cHRpb25EZWNyeXB0Kik7CisKK0dTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMod2Vi
a2l0X21lZGlhX2NsZWFyX2tleV9kZWNyeXB0X2RlYnVnX2NhdGVnb3J5KTsKKyNkZWZpbmUgR1NU
X0NBVF9ERUZBVUxUIHdlYmtpdF9tZWRpYV9jbGVhcl9rZXlfZGVjcnlwdF9kZWJ1Z19jYXRlZ29y
eQorCisjZGVmaW5lIENMRUFSX0tFWV9QUk9URUNUSU9OX1NZU1RFTV9JRCAiNTgxNDdlYzgtMDQy
My00NjU5LTkyZTYtZjUyYzVjZThjM2NjIgorCitzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUg
c2lua1RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUoInNpbmsiLAorICAgIEdTVF9Q
QURfU0lOSywKKyAgICBHU1RfUEFEX0FMV0FZUywKKyAgICBHU1RfU1RBVElDX0NBUFMoImFwcGxp
Y2F0aW9uL3gtY2VuYywgb3JpZ2luYWwtbWVkaWEtdHlwZT0oc3RyaW5nKXZpZGVvL3gtaDI2NCwg
cHJvdGVjdGlvbi1zeXN0ZW09KHN0cmluZykiIENMRUFSX0tFWV9QUk9URUNUSU9OX1NZU1RFTV9J
RCAiOyAiCisgICAgImFwcGxpY2F0aW9uL3gtY2VuYywgb3JpZ2luYWwtbWVkaWEtdHlwZT0oc3Ry
aW5nKWF1ZGlvL21wZWcsIHByb3RlY3Rpb24tc3lzdGVtPShzdHJpbmcpIiBDTEVBUl9LRVlfUFJP
VEVDVElPTl9TWVNURU1fSUQpKTsKKworc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY1Rl
bXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUoInNyYyIsCisgICAgR1NUX1BBRF9TUkMs
CisgICAgR1NUX1BBRF9BTFdBWVMsCisgICAgR1NUX1NUQVRJQ19DQVBTKCJ2aWRlby94LWgyNjQ7
IGF1ZGlvL21wZWciKSk7CisKKyNkZWZpbmUgd2Via2l0X21lZGlhX2NsZWFyX2tleV9kZWNyeXB0
X3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKK0dfREVGSU5FX1RZUEUoV2ViS2l0TWVkaWFDbGVh
cktleURlY3J5cHQsIHdlYmtpdF9tZWRpYV9jbGVhcl9rZXlfZGVjcnlwdCwgV0VCS0lUX1RZUEVf
TUVESUFfQ0VOQ19ERUNSWVBUKTsKKworc3RhdGljIHZvaWQgd2Via2l0X21lZGlhX2NsZWFyX2tl
eV9kZWNyeXB0X2NsYXNzX2luaXQoV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRDbGFzcyoga2xh
c3MpCit7CisgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdENsYXNzKiBjZW5j
Q2xhc3MgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0NMQVNTKGtsYXNzKTsKKyAgICBHc3RF
bGVtZW50Q2xhc3MqIGVsZW1lbnRDbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTKGtsYXNzKTsKKyAg
ICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKwor
ICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdG9y
RmluYWxpemU7CisKKyAgICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlKGVsZW1l
bnRDbGFzcywgZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0KCZzaW5rVGVtcGxhdGUpKTsKKyAg
ICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlKGVsZW1lbnRDbGFzcywgZ3N0X3N0
YXRpY19wYWRfdGVtcGxhdGVfZ2V0KCZzcmNUZW1wbGF0ZSkpOworCisgICAgZ3N0X2VsZW1lbnRf
Y2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YShlbGVtZW50Q2xhc3MsCisgICAgICAgICJEZWNyeXB0
IGNvbnRlbnQgZW5jcnlwdGVkIHVzaW5nIElTT0JNRkYgQ2xlYXJLZXkgQ29tbW9uIEVuY3J5cHRp
b24iLAorICAgICAgICBHU1RfRUxFTUVOVF9GQUNUT1JZX0tMQVNTX0RFQ1JZUFRPUiwKKyAgICAg
ICAgIkRlY3J5cHRzIG1lZGlhIHRoYXQgaGFzIGJlZW4gZW5jcnlwdGVkIHVzaW5nIElTT0JNRkYg
Q2xlYXJLZXkgQ29tbW9uIEVuY3J5cHRpb24uIiwKKyAgICAgICAgIlBoaWxpcHBlIE5vcm1hbmQg
PHBoaWxuQGlnYWxpYS5jb20+Iik7CisKKyAgICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCh3ZWJr
aXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRfZGVidWdfY2F0ZWdvcnksCisgICAgICAgICJ3ZWJr
aXRjbGVhcmtleSIsIDAsICJDbGVhcktleSBkZWNyeXB0b3IiKTsKKworICAgIGNlbmNDbGFzcy0+
cHJvdGVjdGlvblN5c3RlbUlkID0gQ0xFQVJfS0VZX1BST1RFQ1RJT05fU1lTVEVNX0lEOworICAg
IGNlbmNDbGFzcy0+cmVxdWVzdERlY3J5cHRpb25LZXkgPSBHU1RfREVCVUdfRlVOQ1BUUih3ZWJL
aXRNZWRpYUNsZWFyS2V5RGVjcnlwdG9yUmVxdWVzdERlY3J5cHRpb25LZXkpOworICAgIGNlbmND
bGFzcy0+aGFuZGxlS2V5UmVzcG9uc2UgPSBHU1RfREVCVUdfRlVOQ1BUUih3ZWJLaXRNZWRpYUNs
ZWFyS2V5RGVjcnlwdG9ySGFuZGxlS2V5UmVzcG9uc2UpOworICAgIGNlbmNDbGFzcy0+c2V0dXBD
aXBoZXIgPSBHU1RfREVCVUdfRlVOQ1BUUih3ZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdG9yU2V0
dXBDaXBoZXIpOworICAgIGNlbmNDbGFzcy0+ZGVjcnlwdCA9IEdTVF9ERUJVR19GVU5DUFRSKHdl
YktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JEZWNyeXB0KTsKKyAgICBjZW5jQ2xhc3MtPnJlbGVh
c2VDaXBoZXIgPSBHU1RfREVCVUdfRlVOQ1BUUih3ZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdG9y
UmVsZWFzZUNpcGhlcik7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoa2xhc3MsIHNp
emVvZihXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUpKTsKK30KKworc3RhdGljIHZv
aWQgd2Via2l0X21lZGlhX2NsZWFyX2tleV9kZWNyeXB0X2luaXQoV2ViS2l0TWVkaWFDbGVhcktl
eURlY3J5cHQqIHNlbGYpCit7CisgICAgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRl
KiBwcml2ID0gV0VCS0lUX01FRElBX0NLX0RFQ1JZUFRfR0VUX1BSSVZBVEUoc2VsZik7CisKKyAg
ICBpZiAoIWdjcnlfY2hlY2tfdmVyc2lvbihHQ1JZUFRfVkVSU0lPTikpCisgICAgICAgIEdTVF9F
UlJPUl9PQkpFQ1Qoc2VsZiwgIkxpYmdjcnlwdCBmYWlsZWQgdG8gaW5pdGlhbGl6ZSIpOworCisg
ICAgLy8gQWxsb2NhdGUgYSBwb29sIG9mIDE2ayBzZWN1cmUgbWVtb3J5LiBUaGlzIG1ha2UgdGhl
IHNlY3VyZSBtZW1vcnkKKyAgICAvLyBhdmFpbGFibGUgYW5kIGFsc28gZHJvcHMgcHJpdmlsZWdl
cyB3aGVyZSBuZWVkZWQuCisgICAgZ2NyeV9jb250cm9sKEdDUllDVExfSU5JVF9TRUNNRU0sIDE2
Mzg0LCAwKTsKKworICAgIGdjcnlfY29udHJvbChHQ1JZQ1RMX0lOSVRJQUxJWkFUSU9OX0ZJTklT
SEVELCAwKTsKKworICAgIHNlbGYtPnByaXYgPSBwcml2OworICAgIG5ldyAocHJpdikgV2ViS2l0
TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYktpdE1l
ZGlhQ2xlYXJLZXlEZWNyeXB0b3JGaW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2Vi
S2l0TWVkaWFDbGVhcktleURlY3J5cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFfQ0tfREVDUllQVChv
YmplY3QpOworICAgIFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSogcHJpdiA9IHNl
bGYtPnByaXY7CisKKyAgICBwcml2LT5+V2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRl
KCk7CisKKyAgICBHU1RfQ0FMTF9QQVJFTlQoR19PQkpFQ1RfQ0xBU1MsIGZpbmFsaXplLCAob2Jq
ZWN0KSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JSZXF1
ZXN0RGVjcnlwdGlvbktleShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxm
LCBHc3RCdWZmZXIqIGluaXREYXRhQnVmZmVyKQoreworICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVz
c2FnZShHU1RfRUxFTUVOVChzZWxmKSwKKyAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X2VsZW1lbnQo
R1NUX09CSkVDVChzZWxmKSwKKyAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfbmV3KCJkcm0ta2V5
LW5lZWRlZCIsICJkYXRhIiwgR1NUX1RZUEVfQlVGRkVSLCBpbml0RGF0YUJ1ZmZlciwKKyAgICAg
ICAgICAgICAgICAia2V5LXN5c3RlbS1pZCIsIEdfVFlQRV9TVFJJTkcsICJvcmcudzMuY2xlYXJr
ZXkiLCBudWxscHRyKSkpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0TWVkaWFDbGVhcktl
eURlY3J5cHRvckhhbmRsZUtleVJlc3BvbnNlKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHQqIHNlbGYsIEdzdEV2ZW50KiBldmVudCkKK3sKKyAgICBXZWJLaXRNZWRpYUNsZWFyS2V5
RGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0tfREVDUllQVF9HRVRfUFJJVkFU
RShXRUJLSVRfTUVESUFfQ0tfREVDUllQVChzZWxmKSk7CisgICAgY29uc3QgR3N0U3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBnc3RfZXZlbnRfZ2V0X3N0cnVjdHVyZShldmVudCk7CisKKyAgICBpZiAo
IWdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUoc3RydWN0dXJlLCAiZHJtLWNpcGhlciIpKQorICAgICAg
ICByZXR1cm4gRkFMU0U7CisKKyAgICBjb25zdCBHVmFsdWUqIHZhbHVlID0gZ3N0X3N0cnVjdHVy
ZV9nZXRfdmFsdWUoc3RydWN0dXJlLCAia2V5Iik7CisgICAgcHJpdi0+a2V5LmNsZWFyKCk7Cisg
ICAgcHJpdi0+a2V5ID0gYWRvcHRHUmVmKGdzdF9idWZmZXJfY29weShnc3RfdmFsdWVfZ2V0X2J1
ZmZlcih2YWx1ZSkpKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuIHdl
YktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JTZXR1cENpcGhlcihXZWJLaXRNZWRpYUNvbW1vbkVu
Y3J5cHRpb25EZWNyeXB0KiBzZWxmKQoreworICAgIFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0
UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DS19ERUNSWVBUX0dFVF9QUklWQVRFKFdFQktJ
VF9NRURJQV9DS19ERUNSWVBUKHNlbGYpKTsKKyAgICBnY3J5X2Vycm9yX3QgZXJyb3I7CisKKyAg
ICBBU1NFUlQocHJpdi0+a2V5KTsKKyAgICBpZiAoIXByaXYtPmtleSkgeworICAgICAgICBHU1Rf
RVJST1JfT0JKRUNUKHNlbGYsICJEZWNyeXB0aW9uIGtleSBub3QgcHJvdmlkZWQiKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGVycm9yID0gZ2NyeV9jaXBoZXJfb3Blbigm
KHByaXYtPmhhbmRsZSksIEdDUllfQ0lQSEVSX0FFUzEyOCwgR0NSWV9DSVBIRVJfTU9ERV9DVFIs
IEdDUllfQ0lQSEVSX1NFQ1VSRSk7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIEdTVF9FUlJP
Ul9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBjcmVhdGUgQUVTIDEyOCBDVFIgY2lwaGVyIGhhbmRs
ZTogJXMiLCBncGdfc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIEdzdE1hcEluZm8ga2V5TWFwOworICAgIGlmICghZ3N0X2J1ZmZlcl9tYXAocHJp
di0+a2V5LmdldCgpLCAma2V5TWFwLCBHU1RfTUFQX1JFQUQpKSB7CisgICAgICAgIEdTVF9FUlJP
Ul9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBtYXAgZGVjcnlwdGlvbiBrZXkiKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEFTU0VSVChrZXlNYXAuc2l6ZSA9PSBDTEVBUktF
WV9TSVpFKTsKKyAgICBlcnJvciA9IGdjcnlfY2lwaGVyX3NldGtleShwcml2LT5oYW5kbGUsIGtl
eU1hcC5kYXRhLCBrZXlNYXAuc2l6ZSk7CisgICAgZ3N0X2J1ZmZlcl91bm1hcChwcml2LT5rZXku
Z2V0KCksICZrZXlNYXApOworICAgIGlmIChlcnJvcikgeworICAgICAgICBHU1RfRVJST1JfT0JK
RUNUKHNlbGYsICJnY3J5X2NpcGhlcl9zZXRrZXkgZmFpbGVkOiAlcyIsIGdwZ19zdHJlcnJvcihl
cnJvcikpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdG9yRGVjcnlw
dChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmLCBHc3RCdWZmZXIqIGl2
QnVmZmVyLCBHc3RCdWZmZXIqIGJ1ZmZlciwgdW5zaWduZWQgc3ViU2FtcGxlQ291bnQsIEdzdEJ1
ZmZlciogc3ViU2FtcGxlc0J1ZmZlcikKK3sKKyAgICBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlw
dFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0tfREVDUllQVF9HRVRfUFJJVkFURShXRUJL
SVRfTUVESUFfQ0tfREVDUllQVChzZWxmKSk7CisgICAgR3N0TWFwSW5mbyBtYXAsIGl2TWFwLCBz
dWJTYW1wbGVzTWFwOworICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gMDsKKyAgICB1bnNpZ25lZCBz
YW1wbGVJbmRleCA9IDA7CisgICAgdWludDhfdCBjdHJbQ0xFQVJLRVlfU0laRV07CisgICAgR3N0
Qnl0ZVJlYWRlciogcmVhZGVyID0gbnVsbHB0cjsKKyAgICBnYm9vbGVhbiBidWZmZXJNYXBwZWQs
IHN1YnNhbXBsZXNCdWZmZXJNYXBwZWQ7CisgICAgZ2NyeV9lcnJvcl90IGVycm9yOworCisgICAg
aWYgKCFnc3RfYnVmZmVyX21hcChpdkJ1ZmZlciwgJml2TWFwLCBHU1RfTUFQX1JFQUQpKSB7Cisg
ICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBtYXAgSVYiKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChpdk1hcC5zaXplID09IDgpIHsKKyAg
ICAgICAgbWVtc2V0KGN0ciArIDgsIDAsIDgpOworICAgICAgICBtZW1jcHkoY3RyLCBpdk1hcC5k
YXRhLCA4KTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoaXZNYXAuc2l6ZSA9PSBDTEVB
UktFWV9TSVpFKTsKKyAgICAgICAgbWVtY3B5KGN0ciwgaXZNYXAuZGF0YSwgQ0xFQVJLRVlfU0la
RSk7CisgICAgfQorICAgIGdzdF9idWZmZXJfdW5tYXAoaXZCdWZmZXIsICZpdk1hcCk7CisgICAg
ZXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRjdHIocHJpdi0+aGFuZGxlLCBjdHIsIENMRUFSS0VZX1NJ
WkUpOworICAgIGlmIChlcnJvcikgeworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJn
Y3J5X2NpcGhlcl9zZXRjdHIgZmFpbGVkOiAlcyIsIGdwZ19zdHJlcnJvcihlcnJvcikpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYnVmZmVyTWFwcGVkID0gZ3N0X2J1ZmZl
cl9tYXAoYnVmZmVyLCAmbWFwLCBzdGF0aWNfY2FzdDxHc3RNYXBGbGFncz4oR1NUX01BUF9SRUFE
V1JJVEUpKTsKKyAgICBpZiAoIWJ1ZmZlck1hcHBlZCkgeworICAgICAgICBHU1RfRVJST1JfT0JK
RUNUKHNlbGYsICJGYWlsZWQgdG8gbWFwIGJ1ZmZlciIpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgc3Vic2FtcGxlc0J1ZmZlck1hcHBlZCA9IGdzdF9idWZmZXJfbWFwKHN1
YlNhbXBsZXNCdWZmZXIsICZzdWJTYW1wbGVzTWFwLCBHU1RfTUFQX1JFQUQpOworICAgIGlmICgh
c3Vic2FtcGxlc0J1ZmZlck1hcHBlZCkgeworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYs
ICJGYWlsZWQgdG8gbWFwIHN1YnNhbXBsZSBidWZmZXIiKTsKKyAgICAgICAgZ3N0X2J1ZmZlcl91
bm1hcChidWZmZXIsICZtYXApOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
cmVhZGVyID0gZ3N0X2J5dGVfcmVhZGVyX25ldyhzdWJTYW1wbGVzTWFwLmRhdGEsIHN1YlNhbXBs
ZXNNYXAuc2l6ZSk7CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJwb3NpdGlvbjogJWQs
IHNpemU6ICVkIiwgcG9zaXRpb24sIG1hcC5zaXplKTsKKyAgICB3aGlsZSAocG9zaXRpb24gPCBt
YXAuc2l6ZSkgeworICAgICAgICBndWludDE2IG5CeXRlc0NsZWFyID0gMDsKKyAgICAgICAgZ3Vp
bnQzMiBuQnl0ZXNFbmNyeXB0ZWQgPSAwOworCisgICAgICAgIGlmIChzYW1wbGVJbmRleCA8IHN1
YlNhbXBsZUNvdW50KSB7CisgICAgICAgICAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWlu
dDE2X2JlKHJlYWRlciwgJm5CeXRlc0NsZWFyKQorICAgICAgICAgICAgICAgIHx8ICFnc3RfYnl0
ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZShyZWFkZXIsICZuQnl0ZXNFbmNyeXB0ZWQpKSB7CisgICAg
ICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAidW5zdXBwb3J0ZWQiKTsKKyAgICAg
ICAgICAgICAgICBnc3RfYnVmZmVyX3VubWFwKGJ1ZmZlciwgJm1hcCk7CisgICAgICAgICAgICAg
ICAgZ3N0X2J1ZmZlcl91bm1hcChzdWJTYW1wbGVzQnVmZmVyLCAmc3ViU2FtcGxlc01hcCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBzYW1wbGVJbmRleCsrOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbkJ5dGVzQ2xl
YXIgPSAwOworICAgICAgICAgICAgbkJ5dGVzRW5jcnlwdGVkID0gbWFwLnNpemUgLSBwb3NpdGlv
bjsKKyAgICAgICAgfQorCisgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc2VsZiwgIiVkIGJ5dGVz
IGNsZWFyICh0b2RvPSVkKSIsIG5CeXRlc0NsZWFyLCBtYXAuc2l6ZSAtIHBvc2l0aW9uKTsKKyAg
ICAgICAgcG9zaXRpb24gKz0gbkJ5dGVzQ2xlYXI7CisgICAgICAgIGlmIChuQnl0ZXNFbmNyeXB0
ZWQpIHsKKyAgICAgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc2VsZiwgIiVkIGJ5dGVzIGVuY3J5
cHRlZCAodG9kbz0lZCkiLCBuQnl0ZXNFbmNyeXB0ZWQsIG1hcC5zaXplIC0gcG9zaXRpb24pOwor
ICAgICAgICAgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9kZWNyeXB0KHByaXYtPmhhbmRsZSwgbWFw
LmRhdGEgKyBwb3NpdGlvbiwgbkJ5dGVzRW5jcnlwdGVkLCAwLCAwKTsKKyAgICAgICAgICAgIGlm
IChlcnJvcikgeworICAgICAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgImRlY3J5
cHRpb24gZmFpbGVkOiAlcyIsIGdwZ19zdHJlcnJvcihlcnJvcikpOworICAgICAgICAgICAgICAg
IGdzdF9idWZmZXJfdW5tYXAoYnVmZmVyLCAmbWFwKTsKKyAgICAgICAgICAgICAgICBnc3RfYnVm
ZmVyX3VubWFwKHN1YlNhbXBsZXNCdWZmZXIsICZzdWJTYW1wbGVzTWFwKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwb3NpdGlvbiAr
PSBuQnl0ZXNFbmNyeXB0ZWQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBnc3RfYnVmZmVyX3Vu
bWFwKGJ1ZmZlciwgJm1hcCk7CisgICAgZ3N0X2J1ZmZlcl91bm1hcChzdWJTYW1wbGVzQnVmZmVy
LCAmc3ViU2FtcGxlc01hcCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIHdl
YktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JSZWxlYXNlQ2lwaGVyKFdlYktpdE1lZGlhQ29tbW9u
RW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYpCit7CisgICAgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5
cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NLX0RFQ1JZUFRfR0VUX1BSSVZBVEUoV0VC
S0lUX01FRElBX0NLX0RFQ1JZUFQoc2VsZikpOworICAgIGdjcnlfY2lwaGVyX2Nsb3NlKHByaXYt
PmhhbmRsZSk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0Q2xlYXJL
ZXlEZWNyeXB0b3JHU3RyZWFtZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5iNGM3ZjczCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmgKQEAgLTAs
MCArMSw1NiBAQAorLyogR1N0cmVhbWVyIENsZWFyS2V5IGNvbW1vbiBlbmNyeXB0aW9uIGRlY3J5
cHRvcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBJZ2FsaWEgUy5MCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgTWV0cm9sb2dpY2FsCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUK
KyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBX
ZWJLaXRDbGVhcktleURlY3J5cHRvckdTdHJlYW1lcl9oCisjZGVmaW5lIFdlYktpdENsZWFyS2V5
RGVjcnlwdG9yR1N0cmVhbWVyX2gKKworI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIFVT
RShHU1RSRUFNRVIpCisKKyNpbmNsdWRlICJXZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9y
R1N0cmVhbWVyLmgiCisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9NRURJ
QV9DS19ERUNSWVBUICAgICAgICAgICh3ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRfZ2V0
X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX01FRElBX0NLX0RFQ1JZUFQob2JqKSAgICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX01FRElBX0NLX0RF
Q1JZUFQsIFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0KSkKKyNkZWZpbmUgV0VCS0lUX01FRElB
X0NLX0RFQ1JZUFRfQ0xBU1Moa2xhc3MpICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNz
KSwgV0VCS0lUX1RZUEVfTUVESUFfQ0tfREVDUllQVCwgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5
cHRDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19NRURJQV9DS19ERUNSWVBUKG9iaikgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9NRURJQV9DS19E
RUNSWVBUKSkKKyNkZWZpbmUgV0VCS0lUX0lTX01FRElBX0NLX0RFQ1JZUFRfQ0xBU1Mob2JqKSAo
R19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgV0VCS0lUX1RZUEVfTUVESUFfQ0tfREVD
UllQVCkpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdCAgICAg
ICAgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0TWVk
aWFDbGVhcktleURlY3J5cHRDbGFzcyAgIFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0Q2xhc3M7
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlIFdlYktp
dE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZTsKKworR1R5cGUgd2Via2l0X21lZGlhX2NsZWFy
X2tleV9kZWNyeXB0X2dldF90eXBlKHZvaWQpOworCitzdHJ1Y3QgX1dlYktpdE1lZGlhQ2xlYXJL
ZXlEZWNyeXB0IHsKKyAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0IHBhcmVu
dDsKKworICAgIFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSogcHJpdjsKK307CisK
K3N0cnVjdCBfV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRDbGFzcyB7CisgICAgV2ViS2l0TWVk
aWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdENsYXNzIHBhcmVudENsYXNzOworfTsKKworR19FTkRf
REVDTFMKKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0
cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9X
ZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTIyMTM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdENvbW1vbkVuY3J5cHRp
b25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwCkBAIC0wLDAgKzEsMzY5IEBACisvKiBHU3RyZWFtZXIg
Q2xlYXJLZXkgY29tbW9uIGVuY3J5cHRpb24gZGVjcnlwdG9yCisgKgorICogQ29weXJpZ2h0IChD
KSAyMDE2IElnYWxpYSBTLkwKKyAqIENvcHlyaWdodCAoQykgMjAxNiBNZXRyb2xvZ2ljYWwKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBZb3VWaWV3IFRWIEx0ZC4gPGFsZXguYXNobGV5QHlvdXZpZXcu
Y29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgU3VpdGUgNTAwLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzM1LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgVVNFKEdTVFJFQU1FUikKKyNpbmNsdWRlICJX
ZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmgiCisKKyNpbmNsdWRlICJH
UmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorI2luY2x1ZGUg
PHd0Zi9SdW5Mb29wLmg+CisKKyNkZWZpbmUgV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRf
UFJJVkFURShvYmopIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIFdFQktJVF9U
WVBFX01FRElBX0NFTkNfREVDUllQVCwgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlw
dFByaXZhdGUpKQorc3RydWN0IF9XZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJp
dmF0ZSB7CisgICAgR3N0RXZlbnQqIHByb3RlY3Rpb25FdmVudDsKKworICAgIGJvb2wga2V5UmVj
ZWl2ZWQ7CisgICAgTG9jayBtdXRleDsKKyAgICBDb25kaXRpb24gY29uZGl0aW9uOworfTsKKwor
c3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHRvckNoYW5nZVN0YXRlKEdzdEVsZW1lbnQqLCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9u
KTsKK3N0YXRpYyB2b2lkIHdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckZpbmFs
aXplKEdPYmplY3QqKTsKK3N0YXRpYyBHc3RDYXBzKiB3ZWJraXRNZWRpYUNvbW1vbkVuY3J5cHRp
b25EZWNyeXB0VHJhbnNmb3JtQ2FwcyhHc3RCYXNlVHJhbnNmb3JtKiwgR3N0UGFkRGlyZWN0aW9u
LCBHc3RDYXBzKiwgR3N0Q2FwcyopOworc3RhdGljIEdzdEZsb3dSZXR1cm4gd2Via2l0TWVkaWFD
b21tb25FbmNyeXB0aW9uRGVjcnlwdFRyYW5zZm9ybUluUGxhY2UoR3N0QmFzZVRyYW5zZm9ybSos
IEdzdEJ1ZmZlciopOworc3RhdGljIGdib29sZWFuIHdlYmtpdE1lZGlhQ29tbW9uRW5jcnlwdGlv
bkRlY3J5cHRTaW5rRXZlbnRIYW5kbGVyKEdzdEJhc2VUcmFuc2Zvcm0qLCBHc3RFdmVudCopOwor
CitzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdERlZmF1
bHRTZXR1cENpcGhlcihXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Kik7CitzdGF0
aWMgdm9pZCB3ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0RGVmYXVsdFJlbGVhc2VD
aXBoZXIoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCopOworCitHU1RfREVCVUdf
Q0FURUdPUllfU1RBVElDKHdlYmtpdF9tZWRpYV9jb21tb25fZW5jcnlwdGlvbl9kZWNyeXB0X2Rl
YnVnX2NhdGVnb3J5KTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF9tZWRpYV9jb21t
b25fZW5jcnlwdGlvbl9kZWNyeXB0X2RlYnVnX2NhdGVnb3J5CisKKyNkZWZpbmUgd2Via2l0X21l
ZGlhX2NvbW1vbl9lbmNyeXB0aW9uX2RlY3J5cHRfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwor
R19ERUZJTkVfVFlQRShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0LCB3ZWJraXRf
bWVkaWFfY29tbW9uX2VuY3J5cHRpb25fZGVjcnlwdCwgR1NUX1RZUEVfQkFTRV9UUkFOU0ZPUk0p
OworCitzdGF0aWMgdm9pZCB3ZWJraXRfbWVkaWFfY29tbW9uX2VuY3J5cHRpb25fZGVjcnlwdF9j
bGFzc19pbml0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzcyoga2xhc3Mp
Cit7CisgICAgR3N0QmFzZVRyYW5zZm9ybUNsYXNzKiBiYXNlVHJhbnNmb3JtQ2xhc3MgPSBHU1Rf
QkFTRV9UUkFOU0ZPUk1fQ0xBU1Moa2xhc3MpOworICAgIEdzdEVsZW1lbnRDbGFzcyogZWxlbWVu
dENsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1Moa2xhc3MpOworICAgIEdPYmplY3RDbGFzcyogZ29i
amVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3MpOworCisgICAgZ29iamVjdENsYXNzLT5m
aW5hbGl6ZSA9IHdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckZpbmFsaXplOwor
CisgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X21lZGlhX2NvbW1vbl9lbmNyeXB0
aW9uX2RlY3J5cHRfZGVidWdfY2F0ZWdvcnksCisgICAgICAgICJ3ZWJraXRjZW5jIiwgMCwgIkNv
bW1vbiBFbmNyeXB0aW9uIGJhc2UgY2xhc3MiKTsKKworICAgIGVsZW1lbnRDbGFzcy0+Y2hhbmdl
X3N0YXRlID0gR1NUX0RFQlVHX0ZVTkNQVFIod2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVj
cnlwdG9yQ2hhbmdlU3RhdGUpOworCisgICAgYmFzZVRyYW5zZm9ybUNsYXNzLT50cmFuc2Zvcm1f
aXAgPSBHU1RfREVCVUdfRlVOQ1BUUih3ZWJraXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0
VHJhbnNmb3JtSW5QbGFjZSk7CisgICAgYmFzZVRyYW5zZm9ybUNsYXNzLT50cmFuc2Zvcm1fY2Fw
cyA9IEdTVF9ERUJVR19GVU5DUFRSKHdlYmtpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRU
cmFuc2Zvcm1DYXBzKTsKKyAgICBiYXNlVHJhbnNmb3JtQ2xhc3MtPnRyYW5zZm9ybV9pcF9vbl9w
YXNzdGhyb3VnaCA9IEZBTFNFOworICAgIGJhc2VUcmFuc2Zvcm1DbGFzcy0+c2lua19ldmVudCA9
IEdTVF9ERUJVR19GVU5DUFRSKHdlYmtpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRTaW5r
RXZlbnRIYW5kbGVyKTsKKworICAgIGtsYXNzLT5zZXR1cENpcGhlciA9IEdTVF9ERUJVR19GVU5D
UFRSKHdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHREZWZhdWx0U2V0dXBDaXBoZXIp
OworICAgIGtsYXNzLT5yZWxlYXNlQ2lwaGVyID0gR1NUX0RFQlVHX0ZVTkNQVFIod2ViS2l0TWVk
aWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdERlZmF1bHRSZWxlYXNlQ2lwaGVyKTsKKworICAgIGdf
dHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9mKFdlYktpdE1lZGlhQ29tbW9uRW5j
cnlwdGlvbkRlY3J5cHRQcml2YXRlKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9tZWRpYV9j
b21tb25fZW5jcnlwdGlvbl9kZWNyeXB0X2luaXQoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9u
RGVjcnlwdCogc2VsZikKK3sKKyAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0
UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX1BSSVZBVEUoc2Vs
Zik7CisKKyAgICBzZWxmLT5wcml2ID0gcHJpdjsKKyAgICBuZXcgKHByaXYpIFdlYktpdE1lZGlh
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlKCk7CisKKyAgICBHc3RCYXNlVHJhbnNmb3Jt
KiBiYXNlID0gR1NUX0JBU0VfVFJBTlNGT1JNKHNlbGYpOworICAgIGdzdF9iYXNlX3RyYW5zZm9y
bV9zZXRfaW5fcGxhY2UoYmFzZSwgVFJVRSk7CisgICAgZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9w
YXNzdGhyb3VnaChiYXNlLCBGQUxTRSk7CisgICAgZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9nYXBf
YXdhcmUoYmFzZSwgRkFMU0UpOworfQorCitzdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYUNvbW1vbkVu
Y3J5cHRpb25EZWNyeXB0b3JGaW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0
TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiA9IFdFQktJVF9NRURJQV9DRU5DX0RF
Q1JZUFQob2JqZWN0KTsKKyAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJp
dmF0ZSogcHJpdiA9IHNlbGYtPnByaXY7CisKKyAgICBwcml2LT5+V2ViS2l0TWVkaWFDb21tb25F
bmNyeXB0aW9uRGVjcnlwdFByaXZhdGUoKTsKKyAgICBHU1RfQ0FMTF9QQVJFTlQoR19PQkpFQ1Rf
Q0xBU1MsIGZpbmFsaXplLCAob2JqZWN0KSk7Cit9CisKK3N0YXRpYyBHc3RDYXBzKiB3ZWJraXRN
ZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0VHJhbnNmb3JtQ2FwcyhHc3RCYXNlVHJhbnNmb3Jt
KiBiYXNlLCBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLCBHc3RDYXBzKiBjYXBzLCBHc3RDYXBz
KiBmaWx0ZXIpCit7CisgICAgaWYgKGRpcmVjdGlvbiA9PSBHU1RfUEFEX1VOS05PV04pCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgR3N0Q2FwcyogdHJhbnNmb3JtZWRDYXBzID0gZ3N0
X2NhcHNfbmV3X2VtcHR5KCk7CisgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlw
dCogc2VsZiA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFQoYmFzZSk7CisgICAgV2ViS2l0TWVk
aWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdENsYXNzKiBrbGFzcyA9IFdFQktJVF9NRURJQV9DRU5D
X0RFQ1JZUFRfR0VUX0NMQVNTKHNlbGYpOworCisgICAgR1NUX0RFQlVHX09CSkVDVChiYXNlLCAi
ZGlyZWN0aW9uOiAlcywgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQgIiBmaWx0ZXI6ICUiIEdTVF9Q
VFJfRk9STUFULCAoZGlyZWN0aW9uID09IEdTVF9QQURfU1JDKSA/ICJzcmMiIDogInNpbmsiLCBj
YXBzLCBmaWx0ZXIpOworCisgICAgdW5zaWduZWQgc2l6ZSA9IGdzdF9jYXBzX2dldF9zaXplKGNh
cHMpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAg
R3N0U3RydWN0dXJlKiBpbiA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUoY2FwcywgaSk7CisgICAg
ICAgIEdzdFN0cnVjdHVyZSogb3V0ID0gbnVsbHB0cjsKKworICAgICAgICBpZiAoZGlyZWN0aW9u
ID09IEdTVF9QQURfU0lOSykgeworICAgICAgICAgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2hhc19m
aWVsZChpbiwgIm9yaWdpbmFsLW1lZGlhLXR5cGUiKSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICAgICAgb3V0ID0gZ3N0X3N0cnVjdHVyZV9jb3B5KGluKTsKKyAgICAgICAg
ICAgIGdzdF9zdHJ1Y3R1cmVfc2V0X25hbWUob3V0LCBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmco
b3V0LCAib3JpZ2luYWwtbWVkaWEtdHlwZSIpKTsKKworICAgICAgICAgICAgLy8gRmlsdGVyIG91
dCB0aGUgRFJNIHJlbGF0ZWQgZmllbGRzIGZyb20gdGhlIGRvd24tc3RyZWFtIGNhcHMuCisgICAg
ICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGdzdF9zdHJ1Y3R1cmVfbl9maWVsZHMoaW4pOyAr
K2opIHsKKyAgICAgICAgICAgICAgICBjb25zdCBnY2hhciogZmllbGROYW1lID0gZ3N0X3N0cnVj
dHVyZV9udGhfZmllbGRfbmFtZShpbiwgaik7CisKKyAgICAgICAgICAgICAgICBpZiAoZ19zdHJf
aGFzX3ByZWZpeChmaWVsZE5hbWUsICJwcm90ZWN0aW9uLXN5c3RlbSIpCisgICAgICAgICAgICAg
ICAgICAgIHx8IGdfc3RyX2hhc19wcmVmaXgoZmllbGROYW1lLCAib3JpZ2luYWwtbWVkaWEtdHlw
ZSIpKQorICAgICAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZChvdXQs
IGZpZWxkTmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBHc3RTdHJ1Y3R1cmUqIHRtcCA9IGdzdF9zdHJ1Y3R1cmVfY29weShpbik7CisgICAgICAgICAg
ICAvLyBGaWx0ZXIgb3V0IHRoZSB2aWRlbyByZWxhdGVkIGZpZWxkcyBmcm9tIHRoZSB1cC1zdHJl
YW0gY2FwcywKKyAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhleSBhcmUgbm90IHJlbGV2YW50IHRv
IHRoZSBpbnB1dCBjYXBzIG9mIHRoaXMgZWxlbWVudCBhbmQKKyAgICAgICAgICAgIC8vIGNhbiBj
YXVzZSBjYXBzIG5lZ290aWF0aW9uIGZhaWx1cmVzIHdpdGggYWRhcHRpdmUgYml0cmF0ZSBzdHJl
YW1zLgorICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSBnc3Rfc3RydWN0dXJlX25fZmllbGRz
KHRtcCkgLSAxOyBpbmRleCA+PSAwOyAtLWluZGV4KSB7CisgICAgICAgICAgICAgICAgY29uc3Qg
Z2NoYXIqIGZpZWxkTmFtZSA9IGdzdF9zdHJ1Y3R1cmVfbnRoX2ZpZWxkX25hbWUodG1wLCBpbmRl
eCk7CisgICAgICAgICAgICAgICAgR1NUX1RSQUNFKCJDaGVjayBmaWVsZCBcIiVzXCIgZm9yIHJl
bW92YWwiLCBmaWVsZE5hbWUpOworCisgICAgICAgICAgICAgICAgaWYgKCFnX3N0cmNtcDAoZmll
bGROYW1lLCAiYmFzZS1wcm9maWxlIikKKyAgICAgICAgICAgICAgICAgICAgfHwgIWdfc3RyY21w
MChmaWVsZE5hbWUsICJjb2RlY19kYXRhIikKKyAgICAgICAgICAgICAgICAgICAgfHwgIWdfc3Ry
Y21wMChmaWVsZE5hbWUsICJoZWlnaHQiKQorICAgICAgICAgICAgICAgICAgICB8fCAhZ19zdHJj
bXAwKGZpZWxkTmFtZSwgImZyYW1lcmF0ZSIpCisgICAgICAgICAgICAgICAgICAgIHx8ICFnX3N0
cmNtcDAoZmllbGROYW1lLCAibGV2ZWwiKQorICAgICAgICAgICAgICAgICAgICB8fCAhZ19zdHJj
bXAwKGZpZWxkTmFtZSwgInBpeGVsLWFzcGVjdC1yYXRpbyIpCisgICAgICAgICAgICAgICAgICAg
IHx8ICFnX3N0cmNtcDAoZmllbGROYW1lLCAicHJvZmlsZSIpCisgICAgICAgICAgICAgICAgICAg
IHx8ICFnX3N0cmNtcDAoZmllbGROYW1lLCAicmF0ZSIpCisgICAgICAgICAgICAgICAgICAgIHx8
ICFnX3N0cmNtcDAoZmllbGROYW1lLCAid2lkdGgiKSkgeworICAgICAgICAgICAgICAgICAgICBn
c3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZCh0bXAsIGZpZWxkTmFtZSk7CisgICAgICAgICAgICAg
ICAgICAgIEdTVF9UUkFDRSgiUmVtb3ZpbmcgZmllbGQgJXMiLCBmaWVsZE5hbWUpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgb3V0ID0gZ3N0X3N0cnVj
dHVyZV9jb3B5KHRtcCk7CisgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChvdXQsICJwcm90
ZWN0aW9uLXN5c3RlbSIsIEdfVFlQRV9TVFJJTkcsIGtsYXNzLT5wcm90ZWN0aW9uU3lzdGVtSWQs
CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsLW1lZGlhLXR5cGUiLCBHX1RZUEVfU1RSSU5HLCBn
c3Rfc3RydWN0dXJlX2dldF9uYW1lKGluKSwgbnVsbHB0cik7CisKKyAgICAgICAgICAgIGdzdF9z
dHJ1Y3R1cmVfc2V0X25hbWUob3V0LCAiYXBwbGljYXRpb24veC1jZW5jIik7CisgICAgICAgICAg
ICBnc3Rfc3RydWN0dXJlX2ZyZWUodG1wKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgZHVw
bGljYXRlID0gZmFsc2U7CisgICAgICAgIHVuc2lnbmVkIHNpemUgPSBnc3RfY2Fwc19nZXRfc2l6
ZSh0cmFuc2Zvcm1lZENhcHMpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyAh
ZHVwbGljYXRlICYmIGluZGV4IDwgc2l6ZTsgKytpbmRleCkgeworICAgICAgICAgICAgR3N0U3Ry
dWN0dXJlKiBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSh0cmFuc2Zvcm1lZENhcHMsIGluZGV4
KTsKKyAgICAgICAgICAgIGlmIChnc3Rfc3RydWN0dXJlX2lzX2VxdWFsKHMsIG91dCkpCisgICAg
ICAgICAgICAgICAgZHVwbGljYXRlID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgh
ZHVwbGljYXRlKQorICAgICAgICAgICAgZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZSh0cmFuc2Zv
cm1lZENhcHMsIG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVf
ZnJlZShvdXQpOworICAgIH0KKworICAgIGlmIChmaWx0ZXIpIHsKKyAgICAgICAgR3N0Q2Fwcyog
aW50ZXJzZWN0aW9uOworCisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QoYmFzZSwgIlVzaW5nIGZp
bHRlciBjYXBzICUiIEdTVF9QVFJfRk9STUFULCBmaWx0ZXIpOworICAgICAgICBpbnRlcnNlY3Rp
b24gPSBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCh0cmFuc2Zvcm1lZENhcHMsIGZpbHRlciwgR1NU
X0NBUFNfSU5URVJTRUNUX0ZJUlNUKTsKKyAgICAgICAgZ3N0X2NhcHNfdW5yZWYodHJhbnNmb3Jt
ZWRDYXBzKTsKKyAgICAgICAgdHJhbnNmb3JtZWRDYXBzID0gaW50ZXJzZWN0aW9uOworICAgIH0K
KworICAgIEdTVF9ERUJVR19PQkpFQ1QoYmFzZSwgInJldHVybmluZyAlIiBHU1RfUFRSX0ZPUk1B
VCwgdHJhbnNmb3JtZWRDYXBzKTsKKyAgICByZXR1cm4gdHJhbnNmb3JtZWRDYXBzOworfQorCitz
dGF0aWMgR3N0Rmxvd1JldHVybiB3ZWJraXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0VHJh
bnNmb3JtSW5QbGFjZShHc3RCYXNlVHJhbnNmb3JtKiBiYXNlLCBHc3RCdWZmZXIqIGJ1ZmZlcikK
K3sKKyAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmID0gV0VCS0lU
X01FRElBX0NFTkNfREVDUllQVChiYXNlKTsKKyAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRp
b25EZWNyeXB0Q2xhc3MqIGtsYXNzID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfQ0xB
U1Moc2VsZik7CisgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGUq
IHByaXYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9QUklWQVRFKHNlbGYpOworICAg
IGd1aW50IHN1YlNhbXBsZUNvdW50LCBpdlNpemU7CisgICAgZ2Jvb2xlYW4gZW5jcnlwdGVkOwor
ICAgIGNvbnN0IEdWYWx1ZSogdmFsdWU7CisgICAgR3N0QnVmZmVyKiBpdkJ1ZmZlciA9IG51bGxw
dHI7CisgICAgR3N0QnVmZmVyKiBzdWJTYW1wbGVzQnVmZmVyID0gbnVsbHB0cjsKKyAgICBHc3RQ
cm90ZWN0aW9uTWV0YSogcHJvdGVjdGlvbk1ldGE7CisKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihw
cml2LT5tdXRleCk7CisKKyAgICAvLyBUaGUga2V5IG1pZ2h0IG5vdCBoYXZlIGJlZW4gcmVjZWl2
ZWQgeWV0LiBXYWl0IGZvciBpdC4KKyAgICBpZiAoIXByaXYtPmtleVJlY2VpdmVkKQorICAgICAg
ICBwcml2LT5jb25kaXRpb24ud2FpdChwcml2LT5tdXRleCk7CisKKyAgICBwcm90ZWN0aW9uTWV0
YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8R3N0UHJvdGVjdGlvbk1ldGEqPihnc3RfYnVmZmVyX2dldF9w
cm90ZWN0aW9uX21ldGEoYnVmZmVyKSk7CisgICAgaWYgKCFwcm90ZWN0aW9uTWV0YSkgeworICAg
ICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gZ2V0IEdzdFByb3RlY3Rpb24g
bWV0YWRhdGEgZnJvbSBidWZmZXIgJXAiLCBidWZmZXIpOworICAgICAgICByZXR1cm4gR1NUX0ZM
T1dfTk9UX1NVUFBPUlRFRDsKKyAgICB9CisKKyAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X3Vp
bnQocHJvdGVjdGlvbk1ldGEtPmluZm8sICJpdl9zaXplIiwgJml2U2l6ZSkpIHsKKyAgICAgICAg
R1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBpdl9zaXplIik7CisgICAgICAg
IGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEq
Pihwcm90ZWN0aW9uTWV0YSkpOworICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRF
RDsKKyAgICB9CisKKyAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2Jvb2xlYW4ocHJvdGVjdGlv
bk1ldGEtPmluZm8sICJlbmNyeXB0ZWQiLCAmZW5jcnlwdGVkKSkgeworICAgICAgICBHU1RfRVJS
T1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gZ2V0IGVuY3J5cHRlZCBmbGFnIik7CisgICAgICAg
IGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEq
Pihwcm90ZWN0aW9uTWV0YSkpOworICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRF
RDsKKyAgICB9CisKKyAgICBpZiAoIWl2U2l6ZSB8fCAhZW5jcnlwdGVkKSB7CisgICAgICAgIGdz
dF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihw
cm90ZWN0aW9uTWV0YSkpOworICAgICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7CisgICAgfQorCisg
ICAgR1NUX0RFQlVHX09CSkVDVChiYXNlLCAicHJvdGVjdGlvbiBtZXRhOiAlIiBHU1RfUFRSX0ZP
Uk1BVCwgcHJvdGVjdGlvbk1ldGEtPmluZm8pOworICAgIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRf
dWludChwcm90ZWN0aW9uTWV0YS0+aW5mbywgInN1YnNhbXBsZV9jb3VudCIsICZzdWJTYW1wbGVD
b3VudCkpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBz
dWJzYW1wbGVfY291bnQiKTsKKyAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIs
IHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CisgICAgICAgIHJl
dHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOworICAgIH0KKworICAgIGlmIChzdWJTYW1wbGVD
b3VudCkgeworICAgICAgICB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlKHByb3RlY3Rp
b25NZXRhLT5pbmZvLCAic3Vic2FtcGxlcyIpOworICAgICAgICBpZiAoIXZhbHVlKSB7CisgICAg
ICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gZ2V0IHN1YnNhbXBsZXMi
KTsKKyAgICAgICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJl
dF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOworICAgICAgICAgICAgcmV0dXJuIEdT
VF9GTE9XX05PVF9TVVBQT1JURUQ7CisgICAgICAgIH0KKyAgICAgICAgc3ViU2FtcGxlc0J1ZmZl
ciA9IGdzdF92YWx1ZV9nZXRfYnVmZmVyKHZhbHVlKTsKKyAgICB9CisKKyAgICBpZiAoIWtsYXNz
LT5zZXR1cENpcGhlcihzZWxmKSkgeworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJG
YWlsZWQgdG8gY29uZmlndXJlIGNpcGhlciIpOworICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9t
ZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsK
KyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CisgICAgfQorCisgICAgdmFs
dWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShwcm90ZWN0aW9uTWV0YS0+aW5mbywgIml2Iik7
CisgICAgaWYgKCF2YWx1ZSkgeworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWls
ZWQgdG8gZ2V0IElWIGZvciBzYW1wbGUiKTsKKyAgICAgICAga2xhc3MtPnJlbGVhc2VDaXBoZXIo
c2VsZik7CisgICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJl
dF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOworICAgICAgICByZXR1cm4gR1NUX0ZM
T1dfTk9UX1NVUFBPUlRFRDsKKyAgICB9CisKKyAgICBpdkJ1ZmZlciA9IGdzdF92YWx1ZV9nZXRf
YnVmZmVyKHZhbHVlKTsKKyAgICBpZiAoIWtsYXNzLT5kZWNyeXB0KHNlbGYsIGl2QnVmZmVyLCBi
dWZmZXIsIHN1YlNhbXBsZUNvdW50LCBzdWJTYW1wbGVzQnVmZmVyKSkgeworICAgICAgICBHU1Rf
RVJST1JfT0JKRUNUKHNlbGYsICJEZWNyeXB0aW9uIGZhaWxlZCIpOworICAgICAgICBrbGFzcy0+
cmVsZWFzZUNpcGhlcihzZWxmKTsKKyAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZm
ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CisgICAgICAg
IHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOworICAgIH0KKworICAgIGtsYXNzLT5yZWxl
YXNlQ2lwaGVyKHNlbGYpOworICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWlu
dGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOworICAgIHJldHVybiBHU1Rf
RkxPV19PSzsKK30KKworCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0TWVkaWFDb21tb25FbmNyeXB0
aW9uRGVjcnlwdFNpbmtFdmVudEhhbmRsZXIoR3N0QmFzZVRyYW5zZm9ybSogdHJhbnMsIEdzdEV2
ZW50KiBldmVudCkKK3sKKyAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBz
ZWxmID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVCh0cmFucyk7CisgICAgV2ViS2l0TWVkaWFD
b21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0VOQ19E
RUNSWVBUX0dFVF9QUklWQVRFKHNlbGYpOworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlv
bkRlY3J5cHRDbGFzcyoga2xhc3MgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9DTEFT
UyhzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKKworICAgIHN3aXRjaCAoR1NU
X0VWRU5UX1RZUEUoZXZlbnQpKSB7CisgICAgY2FzZSBHU1RfRVZFTlRfUFJPVEVDVElPTjogewor
ICAgICAgICBjb25zdCBjaGFyKiBzeXN0ZW1JZDsKKyAgICAgICAgY29uc3QgY2hhciogb3JpZ2lu
OworICAgICAgICBHc3RCdWZmZXIqIGluaXREYXRhQnVmZmVyOworCisgICAgICAgIEdTVF9ERUJV
R19PQkpFQ1Qoc2VsZiwgInJlY2VpdmVkIHByb3RlY3Rpb24gZXZlbnQiKTsKKyAgICAgICAgZ3N0
X2V2ZW50X3BhcnNlX3Byb3RlY3Rpb24oZXZlbnQsICZzeXN0ZW1JZCwgJmluaXREYXRhQnVmZmVy
LCAmb3JpZ2luKTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAic3lzdGVtSWQ6ICVz
Iiwgc3lzdGVtSWQpOworCisgICAgICAgIGlmICghZ19zdHJfZXF1YWwoc3lzdGVtSWQsIGtsYXNz
LT5wcm90ZWN0aW9uU3lzdGVtSWQpKSB7CisgICAgICAgICAgICBnc3RfZXZlbnRfdW5yZWYoZXZl
bnQpOworICAgICAgICAgICAgcmVzdWx0ID0gVFJVRTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gS2VlcCB0aGUgZXZlbnQgcmVmIGFyb3VuZCBzbyB0aGF0IHRo
ZSBwYXJzZWQgZXZlbnQgZGF0YQorICAgICAgICAvLyByZW1haW5zIHZhbGlkIHVudGlsIHRoZSBk
cm0ta2V5LW5lZWQgbWVzc2FnZSBoYXMgYmVlbiBzZW50LgorICAgICAgICBwcml2LT5wcm90ZWN0
aW9uRXZlbnQgPSBldmVudDsKKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzZWxm
LCBpbml0RGF0YUJ1ZmZlcl0geworICAgICAgICAgICAgaWYgKHNlbGYpIHsKKyAgICAgICAgICAg
ICAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MqIGtsYXNzID0gV0VC
S0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfQ0xBU1Moc2VsZik7CisgICAgICAgICAgICAgICAg
a2xhc3MtPnJlcXVlc3REZWNyeXB0aW9uS2V5KHNlbGYsIGluaXREYXRhQnVmZmVyKTsKKyAgICAg
ICAgICAgICAgICBpZiAoc2VsZi0+cHJpdi0+cHJvdGVjdGlvbkV2ZW50KSB7CisgICAgICAgICAg
ICAgICAgICAgIGdzdF9ldmVudF91bnJlZihzZWxmLT5wcml2LT5wcm90ZWN0aW9uRXZlbnQpOwor
ICAgICAgICAgICAgICAgICAgICBzZWxmLT5wcml2LT5wcm90ZWN0aW9uRXZlbnQgPSBudWxscHRy
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH19KTsKKworICAgICAgICByZXN1bHQg
PSBUUlVFOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfRVZFTlRfQ1VTVE9N
X0RPV05TVFJFQU1fT09COiB7CisgICAgICAgIGlmIChrbGFzcy0+aGFuZGxlS2V5UmVzcG9uc2Uo
c2VsZiwgZXZlbnQpKSB7CisgICAgICAgICAgICBwcml2LT5rZXlSZWNlaXZlZCA9IHRydWU7Cisg
ICAgICAgICAgICBwcml2LT5jb25kaXRpb24ubm90aWZ5T25lKCk7CisgICAgICAgIH0KKworICAg
ICAgICBnc3RfZXZlbnRfdW5yZWYoZXZlbnQpOworICAgICAgICByZXN1bHQgPSBUUlVFOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmVzdWx0ID0gR1NUX0JB
U0VfVFJBTlNGT1JNX0NMQVNTKHBhcmVudF9jbGFzcyktPnNpbmtfZXZlbnQodHJhbnMsIGV2ZW50
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3Rh
dGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5
cHRvckNoYW5nZVN0YXRlKEdzdEVsZW1lbnQqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5z
aXRpb24pCit7CisgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiA9
IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFQoZWxlbWVudCk7CisgICAgV2ViS2l0TWVkaWFDb21t
b25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNS
WVBUX0dFVF9QUklWQVRFKHNlbGYpOworICAgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldCA9IEdT
VF9TVEFURV9DSEFOR0VfU1VDQ0VTUzsKKworICAgIHN3aXRjaCAodHJhbnNpdGlvbikgeworICAg
IGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6CisgICAgICAgIEdTVF9ERUJV
R19PQkpFQ1Qoc2VsZiwgIlBBVVNFRC0+UkVBRFkiKTsKKyAgICAgICAgcHJpdi0+Y29uZGl0aW9u
Lm5vdGlmeU9uZSgpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyhwYXJlbnRfY2xhc3MpLT5j
aGFuZ2Vfc3RhdGUoZWxlbWVudCwgdHJhbnNpdGlvbik7CisKKyAgICAvLyBBZGQgcG9zdC10cmFu
c2l0aW9uIGNvZGUgaGVyZS4KKworICAgIHJldHVybiByZXQ7Cit9CisKKworc3RhdGljIGdib29s
ZWFuIHdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHREZWZhdWx0U2V0dXBDaXBoZXIo
V2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCopCit7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKKworc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdERl
ZmF1bHRSZWxlYXNlQ2lwaGVyKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqKQor
eworfQorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRDb21t
b25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMjQwYmE0YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9y
R1N0cmVhbWVyLmgKQEAgLTAsMCArMSw2NyBAQAorLyogR1N0cmVhbWVyIENsZWFyS2V5IGNvbW1v
biBlbmNyeXB0aW9uIGRlY3J5cHRvcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBJZ2FsaWEg
Uy5MCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgTWV0cm9sb2dpY2FsCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgWW91VmlldyBUViBMdGQuIDxhbGV4LmFzaGxleUB5b3V2aWV3LmNvbT4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JH
U3RyZWFtZXJfaAorI2RlZmluZSBXZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVh
bWVyX2gKKworI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIFVTRShHU1RSRUFNRVIpCisK
KyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9y
bS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfTUVESUFfQ0VOQ19E
RUNSWVBUICAgICAgICAgICh3ZWJraXRfbWVkaWFfY29tbW9uX2VuY3J5cHRpb25fZGVjcnlwdF9n
ZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUKG9iaikgICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9NRURJQV9D
RU5DX0RFQ1JZUFQsIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQpKQorI2RlZmlu
ZSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0NMQVNTKGtsYXNzKSAgKEdfVFlQRV9DSEVDS19D
TEFTU19DQVNUKChrbGFzcyksIFdFQktJVF9UWVBFX01FRElBX0NFTkNfREVDUllQVCwgV2ViS2l0
TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdENsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX01FRElB
X0NFTkNfREVDUllQVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1Mo
KG9iaiksIFdFQktJVF9UWVBFX01FRElBX0NFTkNfREVDUllQVCwgV2ViS2l0TWVkaWFDb21tb25F
bmNyeXB0aW9uRGVjcnlwdENsYXNzKSkKKworI2RlZmluZSBXRUJLSVRfSVNfTUVESUFfQ0VOQ19E
RUNSWVBUKG9iaikgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJL
SVRfVFlQRV9NRURJQV9DRU5DX0RFQ1JZUFQpKQorI2RlZmluZSBXRUJLSVRfSVNfTUVESUFfQ0VO
Q19ERUNSWVBUX0NMQVNTKG9iaikgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksIFdF
QktJVF9UWVBFX01FRElBX0NFTkNfREVDUllQVCkpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRN
ZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0ICAgICAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5
cHRpb25EZWNyeXB0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlv
bkRlY3J5cHRDbGFzcyAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzczsK
K3R5cGVkZWYgc3RydWN0IF9XZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJpdmF0
ZSBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJpdmF0ZTsKKworR1R5cGUgd2Vi
a2l0X21lZGlhX2NvbW1vbl9lbmNyeXB0aW9uX2RlY3J5cHRfZ2V0X3R5cGUodm9pZCk7CisKK3N0
cnVjdCBfV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCB7CisgICAgR3N0QmFzZVRy
YW5zZm9ybSBwYXJlbnQ7CisKKyAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0
UHJpdmF0ZSogcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9u
RGVjcnlwdENsYXNzIHsKKyAgICBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgcGFyZW50Q2xhc3M7CisK
KyAgICBjb25zdCBjaGFyKiBwcm90ZWN0aW9uU3lzdGVtSWQ7CisgICAgdm9pZCAoKnJlcXVlc3RE
ZWNyeXB0aW9uS2V5KSAoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCosIEdzdEJ1
ZmZlciogaW5pdERhdGEpOworICAgIGdib29sZWFuICgqaGFuZGxlS2V5UmVzcG9uc2UpIChXZWJL
aXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgR3N0RXZlbnQqIGV2ZW50KTsKKyAgICBn
Ym9vbGVhbiAoKnNldHVwQ2lwaGVyKSAoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlw
dCopOworICAgIGdib29sZWFuICgqZGVjcnlwdCkgKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlv
bkRlY3J5cHQqLCBHc3RCdWZmZXIqIGl2QnVmZmVyLCBHc3RCdWZmZXIqIGJ1ZmZlciwgdW5zaWdu
ZWQgc3ViU2FtcGxlc0NvdW50LCBHc3RCdWZmZXIqIHN1YlNhbXBsZXNCdWZmZXIpOworICAgIHZv
aWQgKCpyZWxlYXNlQ2lwaGVyKSAoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCop
OworfTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NNYWluR3RrLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NNYWluR3RrLmNwcAppbmRleCBkNWVlYWUx
Li4yOGJkMmI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2d0ay9XZWJQ
cm9jZXNzTWFpbkd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9ndGsvV2Vi
UHJvY2Vzc01haW5HdGsuY3BwCkBAIC00NiwxMCArNDYsOCBAQCBjbGFzcyBXZWJQcm9jZXNzTWFp
biBmaW5hbDogcHVibGljIENoaWxkUHJvY2Vzc01haW5CYXNlIHsKIHB1YmxpYzoKICAgICBib29s
IHBsYXRmb3JtSW5pdGlhbGl6ZSgpIG92ZXJyaWRlCiAgICAgewotI2lmbmRlZiBOREVCVUcKICAg
ICAgICAgaWYgKGdfZ2V0ZW52KCJXRUJLSVQyX1BBVVNFX1dFQl9QUk9DRVNTX09OX0xBVU5DSCIp
KQogICAgICAgICAgICAgc2xlZXAoMzApOwotI2VuZGlmCiAKICNpZiAoVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTX1RIUkVBREVEKSB8fCBVU0UoR1NUUkVBTUVSX0dMKSkgJiYgUExBVEZPUk0oWDEx
KQogICAgICAgICBYSW5pdFRocmVhZHMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRp
b25zR1RLLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKaW5kZXggYzM1YjFl
MS4uZmRhZmVjYSAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKKysr
IGIvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKQEAgLTEzMyw2ICsxMzMsNyBAQCBlbmRp
ZiAoKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0FDQ0VMRVJBVEVE
XzJEX0NBTlZBUyBQVUJMSUMgT0ZGKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUo
RU5BQkxFX0NSRURFTlRJQUxfU1RPUkFHRSBQVUJMSUMgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFV
TFRfUE9SVF9WQUxVRShFTkFCTEVfRFJBR19TVVBQT1JUIFBVQkxJQyBPTikKK1dFQktJVF9PUFRJ
T05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9FTkNSWVBURURfTUVESUEgUFVCTElDIE9GRikK
IFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9HRU9MT0NBVElPTiBQVUJM
SUMgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfSUNPTkRBVEFC
QVNFIFBVQkxJQyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9K
SVQgUFVCTElDIE9OKQpAQCAtMzc1LDYgKzM3NiwxNCBAQCBpZiAoRU5BQkxFX1ZJREVPIE9SIEVO
QUJMRV9XRUJfQVVESU8pCiAgICAgU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0dTVFJFQU1F
UiBUUlVFKQogZW5kaWYgKCkKIAoraWYgKEVOQUJMRV9FTkNSWVBURURfTUVESUEpCisKKyAgICBp
ZiAoUENfR1NUUkVBTUVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDEuNi4xKQorICAgICAgICBtZXNz
YWdlKEZBVEFMX0VSUk9SICJHU3RyZWFtZXIgMS42IGlzIHJlcXVpcmVkIHRvIHVzZSBFTkFCTEVf
RU5DUllQVEVEX01FRElBIikKKyAgICBlbmRpZiAoKQorICAgIGZpbmRfcGFja2FnZShMaWJHY3J5
cHQgUkVRVUlSRUQpCitlbmRpZiAoKQorCiBpZiAoRU5BQkxFX1FVQVJUWl9UQVJHRVQpCiAgICAg
aWYgKE5PVCBHVEszX1NVUFBPUlRTX1FVQVJUWikKICAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJP
UiAiUmVjb21waWxlIEdUSysgd2l0aCBRdWFydHogYmFja2VuZCB0byB1c2UgRU5BQkxFX1FVQVJU
Wl9UQVJHRVQiKQotLSAKMi43LjA=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271331</attachid>
            <date>2016-02-15 02:06:00 -0800</date>
            <delta_ts>2016-02-15 02:57:36 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>51603</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSAxNjM3MzBiNjlhYTQzODA1ZDM4NTc2ODAyNDE4NTdiYmY5ZjkzZWQ4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBNb24sIDE1IEZlYiAyMDE2IDEwOjQ3OjUwICswMTAwClN1YmplY3Q6IFtQQVRDSF0g
cGF0Y2gKCi0tLQogQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgMTIgKwogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgODAgKysrKysKIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlICAg
ICAgICAgICAgICAgICAgIHwgIDE1ICsKIC4uLi9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyLmNwcCAgICAgIHwgICA1ICstCiAuLi4vZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2UuY3BwICB8IDEyMCArKysrKystCiAuLi4vZ3N0cmVhbWVyL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuaCAgICB8ICAxMyArCiAuLi4vZ3N0cmVhbWVyL1dl
YktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcCB8IDI3MCArKysrKysrKysrKysrKysK
IC4uLi9nc3RyZWFtZXIvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuaCAgIHwgIDU2
ICsrKysKIC4uLi9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcCAg
IHwgMzY5ICsrKysrKysrKysrKysrKysrKysrKwogLi4uL1dlYktpdENvbW1vbkVuY3J5cHRpb25E
ZWNyeXB0b3JHU3RyZWFtZXIuaCAgICAgfCAgNjcgKysrKwogU291cmNlL2NtYWtlL09wdGlvbnNH
VEsuY21ha2UgICAgICAgICAgICAgICAgICAgICAgfCAgIDkgKwogMTEgZmlsZXMgY2hhbmdlZCwg
MTAxMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRDbGVhcktleURl
Y3J5cHRvckdTdHJlYW1lci5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFt
ZXIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcAog
Y3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmgKCmRpZmYgLS1n
aXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggMzAyNjliOC4uZjhhOTNiMiAxMDA2NDQK
LS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE2LTAy
LTE1ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBb
R1RLXVtHU3RyZWFtZXJdIENsZWFyS2V5IEVNRSB2MSBkZWNyeXB0aW9uIHN1cHBvcnQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDIzNQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU291cmNlL2NtYWtl
L0ZpbmRMaWJHY3J5cHQuY21ha2U6IEFkZGVkLgorICAgICAgICAqIFNvdXJjZS9jbWFrZS9PcHRp
b25zR1RLLmNtYWtlOiBOZXcgcHVibGljIG9wdGlvbiBmb3IKKyAgICAgICAgRU5DUllQVEVEX01F
RElBLCBvZmYgYnkgZGVmYXVsdC4gVGhpcyByZXF1aXJlcyBHU3RyZWFtZXIgMS42Lnggb3IKKyAg
ICAgICAgYWJvdmUgYW5kIGxpYmdjcnlwdC4KKwogMjAxNi0wMi0xMiAgQ3NhYmEgT3N6dHJvZ29u
w6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtFRkxdW0dUS10gRml4IEVOQUJMRShT
VkdfT1RGX0NPTlZFUlRFUikgYnVpbGQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjNjNhOTUwLi5jNGI4ZDlkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsODMgQEAKKzIwMTYtMDItMTUgIFBoaWxpcHBlIE5vcm1hbmQg
IDxwbm9ybWFuZEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdW0dTdHJlYW1lcl0gQ2xlYXJL
ZXkgRU1FIHYxIGRlY3J5cHRpb24gc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0MjM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEdTdHJlYW1l
ciBiYXNlIGNsYXNzIChpdHNlbGYKKyAgICAgICAgaW5oZXJpdGluZyBmcm9tIGJhc2V0cmFuc2Zv
cm0pIHRoYXQgcHJvdmlkZXMgQ29tbW9uIEVuY3J5cHRpb24KKyAgICAgICAgZGVjcnlwdGlvbiBz
dXBwb3J0IGZvciBJU08gYmFzZSBtZWRpYSBmaWxlIGZvcm1hdC4gQSBDbGVhcktleQorICAgICAg
ICBkZWNyeXB0b3IgdXNpbmcgdGhpcyBiYXNlIGNsYXNzIGlzIGFsc28gcHJvdmlkZWQgYXMgYSBw
cm9vZiBvZgorICAgICAgICBjb25jZXB0LgorCisgICAgICAgIFdoZW4gdGhlIEdTdHJlYW1lciBk
ZW11eGVyIGRldGVjdHMgdGhlIHByZXNlbmNlIG9mIHByb3RlY3RlZAorICAgICAgICBjb250ZW50
LCB0aGlzIGluZm9ybWF0aW9uIGlzIGJyb2FkY2FzdGVkIHRvIHRoZSByZXN0IG9mIHRoZQorICAg
ICAgICBwaXBlbGluZSBhbmQgdGhlIGRlY29kZXIgYXR0ZW1wdHMgdG8gY3JlYXRlIGEgZGVjcnlw
dG9yIGVsZW1lbnQKKyAgICAgICAgYWJsZSB0byBoYW5kbGUgdGhpcyBwcm90ZWN0ZWQgY29udGVu
dC4gSW4gdGhpcyBzY2VuYXJpbyB0aGUgbWVkaWEKKyAgICAgICAgcGxheWVyIHJlY2VpdmVzIGEg
bWVzc2FnZSBmcm9tIHRoZSBkZWNyeXB0b3IgYW5kIHRyaWdnZXJzIGtleQorICAgICAgICBuZWdv
dGlhdGlvbi4gQWZ0ZXIgdGhlIGRlY3J5cHRpb24ga2V5IHdhcyBhY3F1aXJlZCBpdCBpcyBwYXNz
ZWQKKyAgICAgICAgYmFjayBvbiB0byB0aGUgZGVjcnlwdG9yIHVzaW5nIGFuIE9PQiBkb3duc3Ry
ZWFtIEdTdHJlYW1lciBldmVudAorICAgICAgICBhbmQgdGhlIGRlY3J5cHRvciBjYW4gb3BlcmF0
ZSBmcm9tIHRoYXQgcG9pbnQuCisKKyAgICAgICAgVGhlcmUgYXJlIG5vIGxheW91dCB0ZXN0cyB1
bnNraXBwZWQgYmVjYXVzZSB0aGlzIGZlYXR1cmUgaXMKKyAgICAgICAgZGlzYWJsZWQgYnkgZGVm
YXVsdC4KKworICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOiBBZGQgbmV3IGZpbGVzIHRvIHRo
ZSBidWlsZCBpZiBFTkNSWVBURURfTUVESUEgaXMgZW5hYmxlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmluaXRpYWxpemVHU3RyZWFtZXJBbmRSZWdpc3RlcldlYktpdEVsZW1l
bnRzKTogUmVnaXN0ZXIgZGVjcnlwdG9yKHMpIGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnN1cHBvcnRzVHlwZSk6IEhvb2sgb24gdG8gZXh0ZW5k
ZWRTdXBwb3J0c1R5cGUgKHNlZSBiZWxvdyksCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6cmVnaXN0ZXJXZWJLaXRHU3RyZWFtZXJFbGVtZW50cyk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpoYW5kbGVTeW5jTWVzc2FnZSk6
CisgICAgICAgIEhhbmRsZSBkcm0ta2V5LW5lZWRlZCBtZXNzYWdlcyBjb21pbmcgZnJvbSBkZWNy
eXB0b3JzLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFz
ZTo6c3VwcG9ydHNLZXlTeXN0ZW0pOiBXZSBjYW4gbm93IGhhbmRsZSBDbGVhcktleS4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmRpc3BhdGNoRGVj
cnlwdGlvbktleSk6CisgICAgICAgIFRoaXMgaXMgY2FsbGVkIGFmdGVyIHRoZSBkZWNyeXB0aW9u
IGtleSB3YXMgYWNxdWlyZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJCYXNlOjphZGRLZXkpOiBCYXNpYyBpbXBsZW1lbnRhdGlvbiBvZiBFTUUgdjEKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmdlbmVyYXRl
S2V5UmVxdWVzdCk6IERpdHRvCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJCYXNlOjpjYW5jZWxLZXlSZXF1ZXN0KTogRGl0dG8KKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Om5lZWRLZXkpOiBEaXR0bworICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6ZXh0ZW5kZWRTdXBw
b3J0c1R5cGUpOiBIb29rIG9uIHRvIHN1cHBvcnRzS2V5U3lzdGVtLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdENsZWFyS2V5RGVj
cnlwdG9yR1N0cmVhbWVyLmNwcDogQWRkZWQuCisgICAgICAgICh3ZWJraXRfbWVkaWFfY2xlYXJf
a2V5X2RlY3J5cHRfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfbWVkaWFfY2xlYXJfa2V5
X2RlY3J5cHRfaW5pdCk6CisgICAgICAgICh3ZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdG9yRmlu
YWxpemUpOgorICAgICAgICAod2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRvclJlcXVlc3REZWNy
eXB0aW9uS2V5KTogTWV0aG9kIHVzZWQgdG8KKyAgICAgICAgdHJpZ2dlciBrZXkgbmVnb3RpYXRp
b24sIHVzdWFsbHkgdGhpcyB3b3VsZCBzZW5kIGEgZHJtLWtleS1uZWVkZWQKKyAgICAgICAgbWVz
c2FnZSBvbiB0aGUgYnVzLgorICAgICAgICAod2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRvckhh
bmRsZUtleVJlc3BvbnNlKTogTWV0aG9kIHVzZWQgdG8KKyAgICAgICAgc2F2ZSB0aGUgZGVjcnlw
dGlvbiBrZXkgb3Igc2Vzc2lvbiBkYXRhIHJlcXVpcmVkIHRvIHBlcmZvcm0KKyAgICAgICAgY29u
dGVudCBkZWNyeXB0aW9uLgorICAgICAgICAod2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRvclNl
dHVwQ2lwaGVyKTogTWV0aG9kIGNhbGxlZCBldmVyeQorICAgICAgICB0aW1lIGEgYnVmZmVyIG5l
ZWRzIHRvIGJlIGRlY3J5cHRlZC4KKyAgICAgICAgKHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0
b3JEZWNyeXB0KTogQWN0dWFsIGNvbnRlbnQgZGVjcnlwdGlvbgorICAgICAgICB3aXRoIG9wdGlv
bmFsIHN1Yi1zYW1wbGVzIGRhdGEgYW5kIGluaXRpYWxpemF0aW9uIHZlY3Rvci4KKyAgICAgICAg
KHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JSZWxlYXNlQ2lwaGVyKTogVGhpcyBpcyBjYWxs
ZWQgYWZ0ZXIKKyAgICAgICAgY29udGVudCBkZWNyeXB0aW9uIHdhcyBwZXJmb3JtZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdENsZWFyS2V5RGVjcnlwdG9y
R1N0cmVhbWVyLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcDogQWRkZWQuCisg
ICAgICAgICh3ZWJraXRfbWVkaWFfY29tbW9uX2VuY3J5cHRpb25fZGVjcnlwdF9jbGFzc19pbml0
KToKKyAgICAgICAgKHdlYmtpdF9tZWRpYV9jb21tb25fZW5jcnlwdGlvbl9kZWNyeXB0X2luaXQp
OgorICAgICAgICAod2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yRmluYWxpemUp
OgorICAgICAgICAod2Via2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFRyYW5zZm9ybUNh
cHMpOiBGaWx0ZXIgb3V0CisgICAgICAgIGNvbnRlbnQgcHJvdGVjdGlvbiBpbmZvcm1hdGlvbnMg
ZnJvbSB0aGUgaW5jb21pbmcgY2Fwcy4KKyAgICAgICAgKHdlYmtpdE1lZGlhQ29tbW9uRW5jcnlw
dGlvbkRlY3J5cHRUcmFuc2Zvcm1JblBsYWNlKTogUHJvY2VzcyBhbgorICAgICAgICBpbmNvbWlu
ZyBidWZmZXIsIGNoZWNrIGl0IGhhcyBhIHByb3RlY3Rpb24gbWV0YWRhdGEgc3RydWN0dXJlIGFu
ZAorICAgICAgICBwZXJmb3JtIGluLXBsYWNlIGNvbnRlbnQgZGVjcnlwdGlvbiBhY2NvcmRpbmcg
dG8gdGhlCisgICAgICAgIGluaXRpYWxpemF0aW9uIHZlY3RvciBhbmQgc3ViLXNhbXBsZXMgZGF0
YS4KKyAgICAgICAgKHdlYmtpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRTaW5rRXZlbnRI
YW5kbGVyKTogSG9vayBvbiB0bworICAgICAgICBwcm90ZWN0aW9uIGV2ZW50cyB0byB0cmlnZ2Vy
IGtleSBuZWdvdGlhdGlvbiBpbiB0aGUgbWVkaWEgcGxheWVyCisgICAgICAgIGFuZCBoYW5kbGUg
T09CIGV2ZW50cyBjb21pbmcgZnJvbSB0aGUgbWVkaWEgcGxheWVyIHRvIHVuYmxvY2sKKyAgICAg
ICAgY29udGVudCBkZWNyeXB0aW9uIHRhc2tzLgorICAgICAgICAod2ViS2l0TWVkaWFDb21tb25F
bmNyeXB0aW9uRGVjcnlwdG9yQ2hhbmdlU3RhdGUpOiBNYWtlIHN1cmUgdG8KKyAgICAgICAgYXZv
aWQgZGVhZGxvY2tzIGluIGNhc2VzIHdoZXJlIHRoZSBkZWNyeXB0b3IgaXMgZGlzcG9zZWQgYmVm
b3JlCisgICAgICAgIHRoZSBkZWNyeXB0aW9uIGtleSB3YXMgcmVjZWl2ZWQuCisgICAgICAgICh3
ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0RGVmYXVsdFNldHVwQ2lwaGVyKTogRGVm
YXVsdCBkdW1teSBtZXRob2QgaW1wbGVtZW50YXRpb24uCisgICAgICAgICh3ZWJLaXRNZWRpYUNv
bW1vbkVuY3J5cHRpb25EZWNyeXB0RGVmYXVsdFJlbGVhc2VDaXBoZXIpOiBEaXR0by4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHRvckdTdHJlYW1lci5oOiBBZGRlZC4KKwogMjAxNi0wMi0xNCAgU2ltb24gRnJhc2VyICA8
c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ1NTIEZpbHRlcnNdIFdoZW4gYXBw
bHlpbmcgYW4gU1ZHIGZpbHRlciBvbiBhIGNvbXBvc2l0ZWQgaW1hZ2UgdXNpbmcgQ1NTIHRoZSBp
bWFnZSBpcyByZW5kZXJlZCB3aXRob3V0IHRoZSBmaWx0ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21h
a2UKaW5kZXggZjg1ODJhYS4uOWEyZmI2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKQEAg
LTgyMSwzICs4MjEsMTggQEAgaWYgKEVOQUJMRV9TVUJUTEVfQ1JZUFRPKQogICAgICAgICAke0dO
VVRMU19MSUJSQVJJRVN9CiAgICAgKQogZW5kaWYgKCkKKworaWYgKEVOQUJMRV9FTkNSWVBURURf
TUVESUEpCisgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAg
ICAgICR7TElCR0NSWVBUX0lOQ0xVREVfRElSU30KKyAgICApCisgICAgbGlzdChBUFBFTkQgV2Vi
Q29yZV9MSUJSQVJJRVMKKyAgICAgICAgJHtMSUJHQ1JZUFRfTElCUkFSSUVTfSAtbGdwZy1lcnJv
cgorICAgICkKKworICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIu
Y3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRDb21tb25FbmNy
eXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcAorICAgICkKKworZW5kaWYgKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKaW5kZXggOGEzM2E2Yy4u
NTQ3YWI5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ci5jcHAKQEAgLTEwNyw2ICsxMDcsOCBAQCBib29sIGluaXRpYWxpemVHU3RyZWFtZXJBbmRSZWdp
c3RlcldlYktpdEVsZW1lbnRzKCkKICAgICBpZiAoIWluaXRpYWxpemVHU3RyZWFtZXIoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgcmVnaXN0ZXJXZWJLaXRHU3RyZWFtZXJFbGVtZW50
cygpOworCiAgICAgR1JlZlB0cjxHc3RFbGVtZW50RmFjdG9yeT4gc3JjRmFjdG9yeSA9IGdzdF9l
bGVtZW50X2ZhY3RvcnlfZmluZCgid2Via2l0d2Vic3JjIik7CiAgICAgaWYgKCFzcmNGYWN0b3J5
KSB7CiAgICAgICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF9tZWRpYV9wbGF5ZXJf
ZGVidWcsICJ3ZWJraXRtZWRpYXBsYXllciIsIDAsICJXZWJLaXQgbWVkaWEgcGxheWVyIik7CkBA
IC0xNzc3LDcgKzE3NzksOCBAQCBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRQogICAgIC8vIHNwZWMg
c2F5cyB3ZSBzaG91bGQgbm90IHJldHVybiAicHJvYmFibHkiIGlmIHRoZSBjb2RlY3Mgc3RyaW5n
IGlzIGVtcHR5CiAgICAgaWYgKG1pbWVUeXBlQ2FjaGUoKS5jb250YWlucyhwYXJhbWV0ZXJzLnR5
cGUpKQogICAgICAgICByZXR1cm4gcGFyYW1ldGVycy5jb2RlY3MuaXNFbXB0eSgpID8gTWVkaWFQ
bGF5ZXI6Ok1heUJlU3VwcG9ydGVkIDogTWVkaWFQbGF5ZXI6OklzU3VwcG9ydGVkOwotICAgIHJl
dHVybiBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICByZXR1cm4gZXh0ZW5kZWRT
dXBwb3J0c1R5cGUocGFyYW1ldGVycywgTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkKTsKIH0K
IAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldERvd25sb2FkQnVmZmVyaW5n
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNl
LmNwcAppbmRleCA0MjgwMzhjLi5jMzI3ZGYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFz
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwCkBAIC04MCw2ICs4MCwxNCBAQAogI2lu
Y2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyLmgiCiAjZW5kaWYKIAorI2lm
IEVOQUJMRShFTkNSWVBURURfTUVESUEpCisjaW5jbHVkZSAiVVVJRC5oIgorI2luY2x1ZGUgIldl
YktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmgiCisjaW5jbHVkZSA8cnVudGltZS9KU0NJ
bmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1
ZGUgPHJ1bnRpbWUvVWludDhBcnJheS5oPgorI2VuZGlmCisKICNpZiBVU0UoQ0FJUk8pICYmIEVO
QUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAjaW5jbHVkZSA8Y2Fpcm8tZ2wuaD4KICNlbmRp
ZgpAQCAtOTEsNiArOTksMTggQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCit2b2lkIHJlZ2lzdGVyV2ViS2l0R1N0cmVhbWVyRWxlbWVudHMoKQoreworI2lm
IEVOQUJMRShFTkNSWVBURURfTUVESUEpCisgICAgaWYgKCF3ZWJraXRHc3RDaGVja1ZlcnNpb24o
MSwgNiwgMSkpCisgICAgICAgIHJldHVybjsKKworICAgIEdSZWZQdHI8R3N0RWxlbWVudEZhY3Rv
cnk+IGNsZWFyS2V5RGVjcnlwdG9yRmFjdG9yeSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfZmluZCgi
d2Via2l0Y2xlYXJrZXkiKTsKKyAgICBpZiAoIWNsZWFyS2V5RGVjcnlwdG9yRmFjdG9yeSkKKyAg
ICAgICAgZ3N0X2VsZW1lbnRfcmVnaXN0ZXIoMCwgIndlYmtpdGNsZWFya2V5IiwgR1NUX1JBTktf
UFJJTUFSWSArIDEwMCwgV0VCS0lUX1RZUEVfTUVESUFfQ0tfREVDUllQVCk7CisjZW5kaWYKK30K
Kwogc3RhdGljIGludCBncmVhdGVzdENvbW1vbkRpdmlzb3IoaW50IGEsIGludCBiKQogewogICAg
IHdoaWxlIChiKSB7CkBAIC0yMjYsMTAgKzI0NiwzMSBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lckJhc2U6OmhhbmRsZVN5bmNNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiAg
ICAgICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0KEdTVF9FTEVNRU5UKG1lc3NhZ2UtPnNyYyks
IGFwcENvbnRleHQuZ2V0KCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0jZWxzZQot
ICAgIFVOVVNFRF9QQVJBTShtZXNzYWdlKTsKICNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX0dMKQog
CisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKyAgICBpZiAoR1NUX01FU1NBR0VfVFlQRSht
ZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9FTEVNRU5UKSB7CisgICAgICAgIGNvbnN0IEdzdFN0cnVj
dHVyZSogc3RydWN0dXJlID0gZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZShtZXNzYWdlKTsKKyAg
ICAgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImRybS1rZXktbmVl
ZGVkIikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgTE9HX01FRElBX01F
U1NBR0UoImhhbmRsaW5nIGRybS1rZXktbmVlZGVkIG1lc3NhZ2UiKTsKKworICAgICAgICBHc3RC
dWZmZXIqIGRhdGE7CisgICAgICAgIGNvbnN0IGNoYXIqIGtleVN5c3RlbUlkOworICAgICAgICBn
Ym9vbGVhbiB2YWxpZCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0KHN0cnVjdHVyZSwgImRhdGEiLCBHU1Rf
VFlQRV9CVUZGRVIsICZkYXRhLCAia2V5LXN5c3RlbS1pZCIsIEdfVFlQRV9TVFJJTkcsICZrZXlT
eXN0ZW1JZCwgbnVsbHB0cik7CisgICAgICAgIEdzdE1hcEluZm8gbWFwSW5mbzsKKyAgICAgICAg
aWYgKCF2YWxpZCB8fCAhZ3N0X2J1ZmZlcl9tYXAoZGF0YSwgJm1hcEluZm8sIEdTVF9NQVBfUkVB
RCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgR1NUX0RFQlVHKCJzY2hl
ZHVsaW5nIGtleU5lZWRlZCBldmVudCIpOworICAgICAgICBuZWVkS2V5KGtleVN5c3RlbUlkLCBj
cmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgY2hhciAqPihtYXBJbmZvLmRhdGEpLCBtYXBJbmZvLnNpemUpOworICAgICAgICBnc3RfYnVm
ZmVyX3VubWFwKGRhdGEsICZtYXBJbmZvKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
I2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpCisKKyAgICBVTlVTRURfUEFSQU0obWVz
c2FnZSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC04MjMsNiArODY0LDgxIEBAIHVuc2ln
bmVkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnZpZGVvRGVjb2RlZEJ5dGVDb3Vu
dCgpIGNvbnN0CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihwb3NpdGlvbik7CiB9
CiAKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6c3VwcG9ydHNLZXlTeXN0
ZW0oY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0sIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7Cisg
ICAgTE9HX01FRElBX01FU1NBR0UoIkNoZWNraW5nIGZvciBLZXlTeXN0ZW0gc3VwcG9ydCB3aXRo
ICVzIGFuZCB0eXBlICVzIiwga2V5U3lzdGVtLnV0ZjgoKS5kYXRhKCksIG1pbWVUeXBlLnV0Zjgo
KS5kYXRhKCkpOworCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKyAgICBpZiAoIXdlYmtp
dEdzdENoZWNrVmVyc2lvbigxLCA2LCAxKSkgeworICAgICAgICBXQVJOX01FRElBX01FU1NBR0Uo
IkVuY3J5cHRlZCBNZWRpYSBFeHRlbnNpb25zIHJlcXVpcmUgR1N0cmVhbWVyIDEuNiIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNh
c2Uoa2V5U3lzdGVtLCAib3JnLnczLmNsZWFya2V5IikpCisgICAgICAgIHJldHVybiB0cnVlOwor
I2VuZGlmCisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01F
RElBKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpkaXNwYXRjaERlY3J5
cHRpb25LZXkoR3N0QnVmZmVyKiBidWZmZXIpCit7CisgICAgZ3N0X2VsZW1lbnRfc2VuZF9ldmVu
dChtX3BpcGVsaW5lLmdldCgpLCBnc3RfZXZlbnRfbmV3X2N1c3RvbShHU1RfRVZFTlRfQ1VTVE9N
X0RPV05TVFJFQU1fT09CLAorICAgICAgICBnc3Rfc3RydWN0dXJlX25ldygiZHJtLWNpcGhlciIs
ICJrZXkiLCBHU1RfVFlQRV9CVUZGRVIsIGJ1ZmZlciwgbnVsbHB0cikpKTsKK30KKworTWVkaWFQ
bGF5ZXI6Ok1lZGlhS2V5RXhjZXB0aW9uIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6
OmFkZEtleShjb25zdCBTdHJpbmcmIGtleVN5c3RlbSwgY29uc3QgdW5zaWduZWQgY2hhcioga2V5
RGF0YSwgdW5zaWduZWQga2V5TGVuZ3RoLCBjb25zdCB1bnNpZ25lZCBjaGFyKiAvKiBpbml0RGF0
YSAqLywgdW5zaWduZWQgLyogaW5pdERhdGFMZW5ndGggKi8gLCBjb25zdCBTdHJpbmcmIHNlc3Np
b25JRCkKK3sKKyAgICBMT0dfTUVESUFfTUVTU0FHRSgiYWRkS2V5IHN5c3RlbTogJXMsIGxlbmd0
aDogJXUsIHNlc3Npb246ICVzIiwga2V5U3lzdGVtLnV0ZjgoKS5kYXRhKCksIGtleUxlbmd0aCwg
c2Vzc2lvbklELnV0ZjgoKS5kYXRhKCkpOworCisgICAgaWYgKCFlcXVhbElnbm9yaW5nQVNDSUlD
YXNlKGtleVN5c3RlbSwgIm9yZy53My5jbGVhcmtleSIpKQorICAgICAgICByZXR1cm4gTWVkaWFQ
bGF5ZXI6OktleVN5c3RlbU5vdFN1cHBvcnRlZDsKKworICAgIEdSZWZQdHI8R3N0QnVmZmVyPiBi
dWZmZXIgPSBhZG9wdEdSZWYoZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZChnX21lbWR1cChrZXlEYXRh
LCBrZXlMZW5ndGgpLCBrZXlMZW5ndGgpKTsKKyAgICBkaXNwYXRjaERlY3J5cHRpb25LZXkoYnVm
ZmVyLmdldCgpKTsKKyAgICByZXR1cm4gTWVkaWFQbGF5ZXI6Ok5vRXJyb3I7Cit9CisKK01lZGlh
UGxheWVyOjpNZWRpYUtleUV4Y2VwdGlvbiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNl
OjpnZW5lcmF0ZUtleVJlcXVlc3QoY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0sIGNvbnN0IHVuc2ln
bmVkIGNoYXIqIGluaXREYXRhUHRyLCB1bnNpZ25lZCBpbml0RGF0YUxlbmd0aCkKK3sKKyAgICBM
T0dfTUVESUFfTUVTU0FHRSgiZ2VuZXJhdGluZyBrZXkgcmVxdWVzdCBmb3Igc3lzdGVtOiAlcyIs
IGtleVN5c3RlbS51dGY4KCkuZGF0YSgpKTsKKworICAgIGlmICghZXF1YWxJZ25vcmluZ0FTQ0lJ
Q2FzZShrZXlTeXN0ZW0sICJvcmcudzMuY2xlYXJrZXkiKSkKKyAgICAgICAgcmV0dXJuIE1lZGlh
UGxheWVyOjpLZXlTeXN0ZW1Ob3RTdXBwb3J0ZWQ7CisKKyAgICBtX3BsYXllci0+a2V5TWVzc2Fn
ZShrZXlTeXN0ZW0sIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSwgaW5pdERhdGFQdHIsIGlu
aXREYXRhTGVuZ3RoLCBVUkwoKSk7CisgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpOb0Vycm9yOwor
fQorCitNZWRpYVBsYXllcjo6TWVkaWFLZXlFeGNlcHRpb24gTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyQmFzZTo6Y2FuY2VsS2V5UmVxdWVzdChjb25zdCBTdHJpbmcmIC8qIGtleVN5c3RlbSAq
LyAsIGNvbnN0IFN0cmluZyYgLyogc2Vzc2lvbklEICovKQoreworICAgIExPR19NRURJQV9NRVNT
QUdFKCJjYW5jZWxLZXlSZXF1ZXN0Iik7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gTWVkaWFQbGF5ZXI6OktleVN5c3RlbU5vdFN1cHBvcnRlZDsKK30KKwordm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpuZWVkS2V5KGNvbnN0IFN0cmluZyYga2V5U3lzdGVt
LCBjb25zdCBTdHJpbmcmIHNlc3Npb25JZCwgY29uc3QgdW5zaWduZWQgY2hhciogaW5pdERhdGEs
IHVuc2lnbmVkIGluaXREYXRhTGVuZ3RoKQoreworICAgIGlmICghbV9wbGF5ZXItPmtleU5lZWRl
ZChrZXlTeXN0ZW0sIHNlc3Npb25JZCwgaW5pdERhdGEsIGluaXREYXRhTGVuZ3RoKSkKKyAgICAg
ICAgR1NUX0RFQlVHKCJubyBldmVudCBoYW5kbGVyIGZvciBrZXkgbmVlZGVkIik7Cit9CisjZW5k
aWYKKworTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJCYXNlOjpleHRlbmRlZFN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJh
bWV0ZXJzJiBwYXJhbWV0ZXJzLCBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIHJlc3VsdCkKK3sK
KyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQorICAgIGlmIChwYXJhbWV0ZXJzLmtleVN5c3Rl
bS5pc051bGwoKSB8fCBwYXJhbWV0ZXJzLmtleVN5c3RlbS5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisKKyAgICBpZiAoc3VwcG9ydHNLZXlTeXN0ZW0ocGFyYW1ldGVycy5rZXlT
eXN0ZW0sIGVtcHR5U3RyaW5nKCkpKQorICAgICAgICByZXN1bHQgPSBNZWRpYVBsYXllcjo6SXNT
dXBwb3J0ZWQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwYXJhbWV0ZXJzKTsKKyNlbmRpZgor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0KIAogI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuaAppbmRl
eCBmNWVhMjFkLi5hMjRhZTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJCYXNlLmgKQEAgLTUzLDYgKzUzLDggQEAgY2xhc3MgR3JhcGhpY3NDb250
ZXh0M0Q7CiBjbGFzcyBJbnRTaXplOwogY2xhc3MgSW50UmVjdDsKIAordm9pZCByZWdpc3Rlcldl
YktpdEdTdHJlYW1lckVsZW1lbnRzKCk7CisKIGNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lckJhc2UgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlCiAjaWYgVVNFKFRF
WFRVUkVfTUFQUEVSX0dMKSAmJiAhVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogICAgICwgcHVi
bGljIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyCkBAIC0xMTgsNiArMTIwLDE3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KICNlbmRpZgogCisjaWYgRU5BQkxFKEVOQ1JZUFRF
RF9NRURJQSkKKyAgICBNZWRpYVBsYXllcjo6TWVkaWFLZXlFeGNlcHRpb24gYWRkS2V5KGNvbnN0
IFN0cmluZyYsIGNvbnN0IHVuc2lnbmVkIGNoYXIqLCB1bnNpZ25lZCwgY29uc3QgdW5zaWduZWQg
Y2hhciosIHVuc2lnbmVkLCBjb25zdCBTdHJpbmcmKTsKKyAgICBNZWRpYVBsYXllcjo6TWVkaWFL
ZXlFeGNlcHRpb24gZ2VuZXJhdGVLZXlSZXF1ZXN0KGNvbnN0IFN0cmluZyYsIGNvbnN0IHVuc2ln
bmVkIGNoYXIqLCB1bnNpZ25lZCk7CisgICAgTWVkaWFQbGF5ZXI6Ok1lZGlhS2V5RXhjZXB0aW9u
IGNhbmNlbEtleVJlcXVlc3QoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CisgICAgdm9p
ZCBuZWVkS2V5KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IHVuc2lnbmVkIGNo
YXIqLCB1bnNpZ25lZCk7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGVjcnlwdGlvbktleShH
c3RCdWZmZXIqKTsKKyNlbmRpZgorCisgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNLZXlTeXN0ZW0o
Y29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0sIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworICAgIHN0
YXRpYyBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIGV4dGVuZGVkU3VwcG9ydHNUeXBlKGNvbnN0
IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRlcnMmLCBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBl
KTsKKwogI2lmIFVTRShHU1RSRUFNRVJfR0wpCiAgICAgdmlydHVhbCBQYXNzTmF0aXZlSW1hZ2VQ
dHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50VGltZSgpIG92ZXJyaWRlOwogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0Q2xl
YXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjE0M2JiCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdENsZWFy
S2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcApAQCAtMCwwICsxLDI3MCBAQAorLyogR1N0cmVhbWVy
IENsZWFyS2V5IGNvbW1vbiBlbmNyeXB0aW9uIGRlY3J5cHRvcgorICoKKyAqIENvcHlyaWdodCAo
QykgMjAxNiBJZ2FsaWEgUy5MCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgTWV0cm9sb2dpY2FsCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBTdWl0ZSA1MDAsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMzUsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFC
TEUoRU5DUllQVEVEX01FRElBKSAmJiBVU0UoR1NUUkVBTUVSKQorI2luY2x1ZGUgIldlYktpdENs
ZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmgiCisKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVy
LmgiCisjaW5jbHVkZSA8Z2NyeXB0Lmg+CisjaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRl
ci5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisKKyNkZWZpbmUgQ0xFQVJLRVlfU0laRSAx
NgorCisjZGVmaW5lIFdFQktJVF9NRURJQV9DS19ERUNSWVBUX0dFVF9QUklWQVRFKG9iaikgKEdf
VFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX1RZUEVfTUVESUFfQ0tfREVD
UllQVCwgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKSkKK3N0cnVjdCBfV2ViS2l0
TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlIHsKKyAgICBHUmVmUHRyPEdzdEJ1ZmZlcj4ga2V5
OworICAgIGdjcnlfY2lwaGVyX2hkX3QgaGFuZGxlOworfTsKKworc3RhdGljIHZvaWQgd2ViS2l0
TWVkaWFDbGVhcktleURlY3J5cHRvckZpbmFsaXplKEdPYmplY3QqKTsKK3N0YXRpYyB2b2lkIHdl
YktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JSZXF1ZXN0RGVjcnlwdGlvbktleShXZWJLaXRNZWRp
YUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmLCBHc3RCdWZmZXIqKTsKK3N0YXRpYyBnYm9v
bGVhbiB3ZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdG9ySGFuZGxlS2V5UmVzcG9uc2UoV2ViS2l0
TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgR3N0RXZlbnQqKTsKK3N0YXRpYyBn
Ym9vbGVhbiB3ZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdG9yU2V0dXBDaXBoZXIoV2ViS2l0TWVk
aWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCopOworc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlh
Q2xlYXJLZXlEZWNyeXB0b3JEZWNyeXB0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5
cHQqLCBHc3RCdWZmZXIqIGl2LCBHc3RCdWZmZXIqIHNhbXBsZSwgdW5zaWduZWQgc3ViU2FtcGxl
c0NvdW50LCBHc3RCdWZmZXIqIHN1YlNhbXBsZXMpOworc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFD
bGVhcktleURlY3J5cHRvclJlbGVhc2VDaXBoZXIoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9u
RGVjcnlwdCopOworCitHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDKHdlYmtpdF9tZWRpYV9jbGVh
cl9rZXlfZGVjcnlwdF9kZWJ1Z19jYXRlZ29yeSk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3
ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRfZGVidWdfY2F0ZWdvcnkKKworI2RlZmluZSBD
TEVBUl9LRVlfUFJPVEVDVElPTl9TWVNURU1fSUQgIjU4MTQ3ZWM4LTA0MjMtNDY1OS05MmU2LWY1
MmM1Y2U4YzNjYyIKKworc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtUZW1wbGF0ZSA9
IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFKCJzaW5rIiwKKyAgICBHU1RfUEFEX1NJTkssCisgICAg
R1NUX1BBRF9BTFdBWVMsCisgICAgR1NUX1NUQVRJQ19DQVBTKCJhcHBsaWNhdGlvbi94LWNlbmMs
IG9yaWdpbmFsLW1lZGlhLXR5cGU9KHN0cmluZyl2aWRlby94LWgyNjQsIHByb3RlY3Rpb24tc3lz
dGVtPShzdHJpbmcpIiBDTEVBUl9LRVlfUFJPVEVDVElPTl9TWVNURU1fSUQgIjsgIgorICAgICJh
cHBsaWNhdGlvbi94LWNlbmMsIG9yaWdpbmFsLW1lZGlhLXR5cGU9KHN0cmluZylhdWRpby9tcGVn
LCBwcm90ZWN0aW9uLXN5c3RlbT0oc3RyaW5nKSIgQ0xFQVJfS0VZX1BST1RFQ1RJT05fU1lTVEVN
X0lEKSk7CisKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNUZW1wbGF0ZSA9IEdTVF9T
VEFUSUNfUEFEX1RFTVBMQVRFKCJzcmMiLAorICAgIEdTVF9QQURfU1JDLAorICAgIEdTVF9QQURf
QUxXQVlTLAorICAgIEdTVF9TVEFUSUNfQ0FQUygidmlkZW8veC1oMjY0OyBhdWRpby9tcGVnIikp
OworCisjZGVmaW5lIHdlYmtpdF9tZWRpYV9jbGVhcl9rZXlfZGVjcnlwdF9wYXJlbnRfY2xhc3Mg
cGFyZW50X2NsYXNzCitHX0RFRklORV9UWVBFKFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0LCB3
ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHQsIFdFQktJVF9UWVBFX01FRElBX0NFTkNfREVD
UllQVCk7CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9tZWRpYV9jbGVhcl9rZXlfZGVjcnlwdF9jbGFz
c19pbml0KFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0Q2xhc3MqIGtsYXNzKQoreworICAgIFdl
YktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzcyogY2VuY0NsYXNzID0gV0VCS0lU
X01FRElBX0NFTkNfREVDUllQVF9DTEFTUyhrbGFzcyk7CisgICAgR3N0RWxlbWVudENsYXNzKiBl
bGVtZW50Q2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyhrbGFzcyk7CisgICAgR09iamVjdENsYXNz
KiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7CisKKyAgICBnb2JqZWN0Q2xh
c3MtPmZpbmFsaXplID0gd2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRvckZpbmFsaXplOworCisg
ICAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZShlbGVtZW50Q2xhc3MsIGdzdF9z
dGF0aWNfcGFkX3RlbXBsYXRlX2dldCgmc2lua1RlbXBsYXRlKSk7CisgICAgZ3N0X2VsZW1lbnRf
Y2xhc3NfYWRkX3BhZF90ZW1wbGF0ZShlbGVtZW50Q2xhc3MsIGdzdF9zdGF0aWNfcGFkX3RlbXBs
YXRlX2dldCgmc3JjVGVtcGxhdGUpKTsKKworICAgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0
aWNfbWV0YWRhdGEoZWxlbWVudENsYXNzLAorICAgICAgICAiRGVjcnlwdCBjb250ZW50IGVuY3J5
cHRlZCB1c2luZyBJU09CTUZGIENsZWFyS2V5IENvbW1vbiBFbmNyeXB0aW9uIiwKKyAgICAgICAg
R1NUX0VMRU1FTlRfRkFDVE9SWV9LTEFTU19ERUNSWVBUT1IsCisgICAgICAgICJEZWNyeXB0cyBt
ZWRpYSB0aGF0IGhhcyBiZWVuIGVuY3J5cHRlZCB1c2luZyBJU09CTUZGIENsZWFyS2V5IENvbW1v
biBFbmNyeXB0aW9uLiIsCisgICAgICAgICJQaGlsaXBwZSBOb3JtYW5kIDxwaGlsbkBpZ2FsaWEu
Y29tPiIpOworCisgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X21lZGlhX2NsZWFy
X2tleV9kZWNyeXB0X2RlYnVnX2NhdGVnb3J5LAorICAgICAgICAid2Via2l0Y2xlYXJrZXkiLCAw
LCAiQ2xlYXJLZXkgZGVjcnlwdG9yIik7CisKKyAgICBjZW5jQ2xhc3MtPnByb3RlY3Rpb25TeXN0
ZW1JZCA9IENMRUFSX0tFWV9QUk9URUNUSU9OX1NZU1RFTV9JRDsKKyAgICBjZW5jQ2xhc3MtPnJl
cXVlc3REZWNyeXB0aW9uS2V5ID0gR1NUX0RFQlVHX0ZVTkNQVFIod2ViS2l0TWVkaWFDbGVhcktl
eURlY3J5cHRvclJlcXVlc3REZWNyeXB0aW9uS2V5KTsKKyAgICBjZW5jQ2xhc3MtPmhhbmRsZUtl
eVJlc3BvbnNlID0gR1NUX0RFQlVHX0ZVTkNQVFIod2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRv
ckhhbmRsZUtleVJlc3BvbnNlKTsKKyAgICBjZW5jQ2xhc3MtPnNldHVwQ2lwaGVyID0gR1NUX0RF
QlVHX0ZVTkNQVFIod2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRvclNldHVwQ2lwaGVyKTsKKyAg
ICBjZW5jQ2xhc3MtPmRlY3J5cHQgPSBHU1RfREVCVUdfRlVOQ1BUUih3ZWJLaXRNZWRpYUNsZWFy
S2V5RGVjcnlwdG9yRGVjcnlwdCk7CisgICAgY2VuY0NsYXNzLT5yZWxlYXNlQ2lwaGVyID0gR1NU
X0RFQlVHX0ZVTkNQVFIod2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRvclJlbGVhc2VDaXBoZXIp
OworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGtsYXNzLCBzaXplb2YoV2ViS2l0TWVk
aWFDbGVhcktleURlY3J5cHRQcml2YXRlKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9tZWRp
YV9jbGVhcl9rZXlfZGVjcnlwdF9pbml0KFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0KiBzZWxm
KQoreworICAgIFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJ
VF9NRURJQV9DS19ERUNSWVBUX0dFVF9QUklWQVRFKHNlbGYpOworCisgICAgaWYgKCFnY3J5X2No
ZWNrX3ZlcnNpb24oR0NSWVBUX1ZFUlNJT04pKQorICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNl
bGYsICJMaWJnY3J5cHQgZmFpbGVkIHRvIGluaXRpYWxpemUiKTsKKworICAgIC8vIEFsbG9jYXRl
IGEgcG9vbCBvZiAxNmsgc2VjdXJlIG1lbW9yeS4gVGhpcyBtYWtlIHRoZSBzZWN1cmUgbWVtb3J5
CisgICAgLy8gYXZhaWxhYmxlIGFuZCBhbHNvIGRyb3BzIHByaXZpbGVnZXMgd2hlcmUgbmVlZGVk
LgorICAgIGdjcnlfY29udHJvbChHQ1JZQ1RMX0lOSVRfU0VDTUVNLCAxNjM4NCwgMCk7CisKKyAg
ICBnY3J5X2NvbnRyb2woR0NSWUNUTF9JTklUSUFMSVpBVElPTl9GSU5JU0hFRCwgMCk7CisKKyAg
ICBzZWxmLT5wcml2ID0gcHJpdjsKKyAgICBuZXcgKHByaXYpIFdlYktpdE1lZGlhQ2xlYXJLZXlE
ZWNyeXB0UHJpdmF0ZSgpOworfQorCitzdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYUNsZWFyS2V5RGVj
cnlwdG9yRmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdE1lZGlhQ2xlYXJL
ZXlEZWNyeXB0KiBzZWxmID0gV0VCS0lUX01FRElBX0NLX0RFQ1JZUFQob2JqZWN0KTsKKyAgICBX
ZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUqIHByaXYgPSBzZWxmLT5wcml2OworCisg
ICAgcHJpdi0+fldlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSgpOworCisgICAgR1NU
X0NBTExfUEFSRU5UKEdfT0JKRUNUX0NMQVNTLCBmaW5hbGl6ZSwgKG9iamVjdCkpOworfQorCitz
dGF0aWMgdm9pZCB3ZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdG9yUmVxdWVzdERlY3J5cHRpb25L
ZXkoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgR3N0QnVmZmVyKiBp
bml0RGF0YUJ1ZmZlcikKK3sKKyAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UoR1NUX0VMRU1F
TlQoc2VsZiksCisgICAgICAgIGdzdF9tZXNzYWdlX25ld19lbGVtZW50KEdTVF9PQkpFQ1Qoc2Vs
ZiksCisgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX25ldygiZHJtLWtleS1uZWVkZWQiLCAiZGF0
YSIsIEdTVF9UWVBFX0JVRkZFUiwgaW5pdERhdGFCdWZmZXIsCisgICAgICAgICAgICAgICAgImtl
eS1zeXN0ZW0taWQiLCBHX1RZUEVfU1RSSU5HLCAib3JnLnczLmNsZWFya2V5IiwgbnVsbHB0cikp
KTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JIYW5k
bGVLZXlSZXNwb25zZShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmLCBH
c3RFdmVudCogZXZlbnQpCit7CisgICAgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRl
KiBwcml2ID0gV0VCS0lUX01FRElBX0NLX0RFQ1JZUFRfR0VUX1BSSVZBVEUoV0VCS0lUX01FRElB
X0NLX0RFQ1JZUFQoc2VsZikpOworICAgIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0g
Z3N0X2V2ZW50X2dldF9zdHJ1Y3R1cmUoZXZlbnQpOworCisgICAgaWYgKCFnc3Rfc3RydWN0dXJl
X2hhc19uYW1lKHN0cnVjdHVyZSwgImRybS1jaXBoZXIiKSkKKyAgICAgICAgcmV0dXJuIEZBTFNF
OworCisgICAgY29uc3QgR1ZhbHVlKiB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlKHN0
cnVjdHVyZSwgImtleSIpOworICAgIHByaXYtPmtleS5jbGVhcigpOworICAgIHByaXYtPmtleSA9
IGFkb3B0R1JlZihnc3RfYnVmZmVyX2NvcHkoZ3N0X3ZhbHVlX2dldF9idWZmZXIodmFsdWUpKSk7
CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJLaXRNZWRpYUNsZWFy
S2V5RGVjcnlwdG9yU2V0dXBDaXBoZXIoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlw
dCogc2VsZikKK3sKKyAgICBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUqIHByaXYg
PSBXRUJLSVRfTUVESUFfQ0tfREVDUllQVF9HRVRfUFJJVkFURShXRUJLSVRfTUVESUFfQ0tfREVD
UllQVChzZWxmKSk7CisgICAgZ2NyeV9lcnJvcl90IGVycm9yOworCisgICAgQVNTRVJUKHByaXYt
PmtleSk7CisgICAgaWYgKCFwcml2LT5rZXkpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChz
ZWxmLCAiRGVjcnlwdGlvbiBrZXkgbm90IHByb3ZpZGVkIik7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBlcnJvciA9IGdjcnlfY2lwaGVyX29wZW4oJihwcml2LT5oYW5kbGUp
LCBHQ1JZX0NJUEhFUl9BRVMxMjgsIEdDUllfQ0lQSEVSX01PREVfQ1RSLCBHQ1JZX0NJUEhFUl9T
RUNVUkUpOworICAgIGlmIChlcnJvcikgeworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYs
ICJGYWlsZWQgdG8gY3JlYXRlIEFFUyAxMjggQ1RSIGNpcGhlciBoYW5kbGU6ICVzIiwgZ3BnX3N0
cmVycm9yKGVycm9yKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBHc3RN
YXBJbmZvIGtleU1hcDsKKyAgICBpZiAoIWdzdF9idWZmZXJfbWFwKHByaXYtPmtleS5nZXQoKSwg
JmtleU1hcCwgR1NUX01BUF9SRUFEKSkgeworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYs
ICJGYWlsZWQgdG8gbWFwIGRlY3J5cHRpb24ga2V5Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBBU1NFUlQoa2V5TWFwLnNpemUgPT0gQ0xFQVJLRVlfU0laRSk7CisgICAg
ZXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRrZXkocHJpdi0+aGFuZGxlLCBrZXlNYXAuZGF0YSwga2V5
TWFwLnNpemUpOworICAgIGdzdF9idWZmZXJfdW5tYXAocHJpdi0+a2V5LmdldCgpLCAma2V5TWFw
KTsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiZ2Ny
eV9jaXBoZXJfc2V0a2V5IGZhaWxlZDogJXMiLCBncGdfc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMg
Z2Jvb2xlYW4gd2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRvckRlY3J5cHQoV2ViS2l0TWVkaWFD
b21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgR3N0QnVmZmVyKiBpdkJ1ZmZlciwgR3N0QnVm
ZmVyKiBidWZmZXIsIHVuc2lnbmVkIHN1YlNhbXBsZUNvdW50LCBHc3RCdWZmZXIqIHN1YlNhbXBs
ZXNCdWZmZXIpCit7CisgICAgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKiBwcml2
ID0gV0VCS0lUX01FRElBX0NLX0RFQ1JZUFRfR0VUX1BSSVZBVEUoV0VCS0lUX01FRElBX0NLX0RF
Q1JZUFQoc2VsZikpOworICAgIEdzdE1hcEluZm8gbWFwLCBpdk1hcCwgc3ViU2FtcGxlc01hcDsK
KyAgICB1bnNpZ25lZCBwb3NpdGlvbiA9IDA7CisgICAgdW5zaWduZWQgc2FtcGxlSW5kZXggPSAw
OworICAgIHVpbnQ4X3QgY3RyW0NMRUFSS0VZX1NJWkVdOworICAgIEdzdEJ5dGVSZWFkZXIqIHJl
YWRlciA9IG51bGxwdHI7CisgICAgZ2Jvb2xlYW4gYnVmZmVyTWFwcGVkLCBzdWJzYW1wbGVzQnVm
ZmVyTWFwcGVkOworICAgIGdjcnlfZXJyb3JfdCBlcnJvcjsKKworICAgIGlmICghZ3N0X2J1ZmZl
cl9tYXAoaXZCdWZmZXIsICZpdk1hcCwgR1NUX01BUF9SRUFEKSkgeworICAgICAgICBHU1RfRVJS
T1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gbWFwIElWIik7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBpZiAoaXZNYXAuc2l6ZSA9PSA4KSB7CisgICAgICAgIG1lbXNldChj
dHIgKyA4LCAwLCA4KTsKKyAgICAgICAgbWVtY3B5KGN0ciwgaXZNYXAuZGF0YSwgOCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGl2TWFwLnNpemUgPT0gQ0xFQVJLRVlfU0laRSk7Cisg
ICAgICAgIG1lbWNweShjdHIsIGl2TWFwLmRhdGEsIENMRUFSS0VZX1NJWkUpOworICAgIH0KKyAg
ICBnc3RfYnVmZmVyX3VubWFwKGl2QnVmZmVyLCAmaXZNYXApOworICAgIGVycm9yID0gZ2NyeV9j
aXBoZXJfc2V0Y3RyKHByaXYtPmhhbmRsZSwgY3RyLCBDTEVBUktFWV9TSVpFKTsKKyAgICBpZiAo
ZXJyb3IpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiZ2NyeV9jaXBoZXJfc2V0
Y3RyIGZhaWxlZDogJXMiLCBncGdfc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGJ1ZmZlck1hcHBlZCA9IGdzdF9idWZmZXJfbWFwKGJ1ZmZlciwg
Jm1hcCwgc3RhdGljX2Nhc3Q8R3N0TWFwRmxhZ3M+KEdTVF9NQVBfUkVBRFdSSVRFKSk7CisgICAg
aWYgKCFidWZmZXJNYXBwZWQpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFp
bGVkIHRvIG1hcCBidWZmZXIiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IHN1YnNhbXBsZXNCdWZmZXJNYXBwZWQgPSBnc3RfYnVmZmVyX21hcChzdWJTYW1wbGVzQnVmZmVy
LCAmc3ViU2FtcGxlc01hcCwgR1NUX01BUF9SRUFEKTsKKyAgICBpZiAoIXN1YnNhbXBsZXNCdWZm
ZXJNYXBwZWQpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIG1h
cCBzdWJzYW1wbGUgYnVmZmVyIik7CisgICAgICAgIGdzdF9idWZmZXJfdW5tYXAoYnVmZmVyLCAm
bWFwKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJlYWRlciA9IGdzdF9i
eXRlX3JlYWRlcl9uZXcoc3ViU2FtcGxlc01hcC5kYXRhLCBzdWJTYW1wbGVzTWFwLnNpemUpOwor
CisgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAicG9zaXRpb246ICVkLCBzaXplOiAlZCIsIHBv
c2l0aW9uLCBtYXAuc2l6ZSk7CisgICAgd2hpbGUgKHBvc2l0aW9uIDwgbWFwLnNpemUpIHsKKyAg
ICAgICAgZ3VpbnQxNiBuQnl0ZXNDbGVhciA9IDA7CisgICAgICAgIGd1aW50MzIgbkJ5dGVzRW5j
cnlwdGVkID0gMDsKKworICAgICAgICBpZiAoc2FtcGxlSW5kZXggPCBzdWJTYW1wbGVDb3VudCkg
eworICAgICAgICAgICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9iZShyZWFkZXIs
ICZuQnl0ZXNDbGVhcikKKyAgICAgICAgICAgICAgICB8fCAhZ3N0X2J5dGVfcmVhZGVyX2dldF91
aW50MzJfYmUocmVhZGVyLCAmbkJ5dGVzRW5jcnlwdGVkKSkgeworICAgICAgICAgICAgICAgIEdT
VF9ERUJVR19PQkpFQ1Qoc2VsZiwgInVuc3VwcG9ydGVkIik7CisgICAgICAgICAgICAgICAgZ3N0
X2J1ZmZlcl91bm1hcChidWZmZXIsICZtYXApOworICAgICAgICAgICAgICAgIGdzdF9idWZmZXJf
dW5tYXAoc3ViU2FtcGxlc0J1ZmZlciwgJnN1YlNhbXBsZXNNYXApOworICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2FtcGxlSW5kZXgr
KzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG5CeXRlc0NsZWFyID0gMDsKKyAgICAg
ICAgICAgIG5CeXRlc0VuY3J5cHRlZCA9IG1hcC5zaXplIC0gcG9zaXRpb247CisgICAgICAgIH0K
KworICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNlbGYsICIlZCBieXRlcyBjbGVhciAodG9kbz0l
ZCkiLCBuQnl0ZXNDbGVhciwgbWFwLnNpemUgLSBwb3NpdGlvbik7CisgICAgICAgIHBvc2l0aW9u
ICs9IG5CeXRlc0NsZWFyOworICAgICAgICBpZiAobkJ5dGVzRW5jcnlwdGVkKSB7CisgICAgICAg
ICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNlbGYsICIlZCBieXRlcyBlbmNyeXB0ZWQgKHRvZG89JWQp
IiwgbkJ5dGVzRW5jcnlwdGVkLCBtYXAuc2l6ZSAtIHBvc2l0aW9uKTsKKyAgICAgICAgICAgIGVy
cm9yID0gZ2NyeV9jaXBoZXJfZGVjcnlwdChwcml2LT5oYW5kbGUsIG1hcC5kYXRhICsgcG9zaXRp
b24sIG5CeXRlc0VuY3J5cHRlZCwgMCwgMCk7CisgICAgICAgICAgICBpZiAoZXJyb3IpIHsKKyAg
ICAgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJkZWNyeXB0aW9uIGZhaWxlZDog
JXMiLCBncGdfc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgICAgICAgICBnc3RfYnVmZmVyX3Vu
bWFwKGJ1ZmZlciwgJm1hcCk7CisgICAgICAgICAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcChzdWJT
YW1wbGVzQnVmZmVyLCAmc3ViU2FtcGxlc01hcCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcG9zaXRpb24gKz0gbkJ5dGVzRW5jcnlw
dGVkOworICAgICAgICB9CisgICAgfQorCisgICAgZ3N0X2J1ZmZlcl91bm1hcChidWZmZXIsICZt
YXApOworICAgIGdzdF9idWZmZXJfdW5tYXAoc3ViU2FtcGxlc0J1ZmZlciwgJnN1YlNhbXBsZXNN
YXApOworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYUNsZWFy
S2V5RGVjcnlwdG9yUmVsZWFzZUNpcGhlcihXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNy
eXB0KiBzZWxmKQoreworICAgIFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSogcHJp
diA9IFdFQktJVF9NRURJQV9DS19ERUNSWVBUX0dFVF9QUklWQVRFKFdFQktJVF9NRURJQV9DS19E
RUNSWVBUKHNlbGYpKTsKKyAgICBnY3J5X2NpcGhlcl9jbG9zZShwcml2LT5oYW5kbGUpOworfQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9XZWJLaXRDbGVhcktleURlY3J5cHRvckdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0
cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRjN2Y3MwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9XZWJLaXRDbGVhcktleURlY3J5cHRvckdTdHJlYW1lci5oCkBAIC0wLDAgKzEsNTYgQEAKKy8q
IEdTdHJlYW1lciBDbGVhcktleSBjb21tb24gZW5jcnlwdGlvbiBkZWNyeXB0b3IKKyAqCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTAorICogQ29weXJpZ2h0IChDKSAyMDE2IE1ldHJv
bG9naWNhbAorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0Q2xlYXJLZXlE
ZWNyeXB0b3JHU3RyZWFtZXJfaAorI2RlZmluZSBXZWJLaXRDbGVhcktleURlY3J5cHRvckdTdHJl
YW1lcl9oCisKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBVU0UoR1NUUkVBTUVSKQor
CisjaW5jbHVkZSAiV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oIgor
CitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfTUVESUFfQ0tfREVDUllQVCAg
ICAgICAgICAod2Via2l0X21lZGlhX2NsZWFyX2tleV9kZWNyeXB0X2dldF90eXBlKCkpCisjZGVm
aW5lIFdFQktJVF9NRURJQV9DS19ERUNSWVBUKG9iaikgICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9NRURJQV9DS19ERUNSWVBULCBXZWJLaXRN
ZWRpYUNsZWFyS2V5RGVjcnlwdCkpCisjZGVmaW5lIFdFQktJVF9NRURJQV9DS19ERUNSWVBUX0NM
QVNTKGtsYXNzKSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksIFdFQktJVF9UWVBF
X01FRElBX0NLX0RFQ1JZUFQsIFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0Q2xhc3MpKQorI2Rl
ZmluZSBXRUJLSVRfSVNfTUVESUFfQ0tfREVDUllQVChvYmopICAgICAgIChHX1RZUEVfQ0hFQ0tf
SU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfTUVESUFfQ0tfREVDUllQVCkpCisjZGVm
aW5lIFdFQktJVF9JU19NRURJQV9DS19ERUNSWVBUX0NMQVNTKG9iaikgKEdfVFlQRV9DSEVDS19D
TEFTU19UWVBFKChrbGFzcyksIFdFQktJVF9UWVBFX01FRElBX0NLX0RFQ1JZUFQpKQorCit0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHQgICAgICAgIFdlYktpdE1lZGlh
Q2xlYXJLZXlEZWNyeXB0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdE1lZGlhQ2xlYXJLZXlEZWNy
eXB0Q2xhc3MgICBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdENsYXNzOwordHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSBXZWJLaXRNZWRpYUNsZWFyS2V5
RGVjcnlwdFByaXZhdGU7CisKK0dUeXBlIHdlYmtpdF9tZWRpYV9jbGVhcl9rZXlfZGVjcnlwdF9n
ZXRfdHlwZSh2b2lkKTsKKworc3RydWN0IF9XZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdCB7Cisg
ICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCBwYXJlbnQ7CisKKyAgICBXZWJL
aXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUqIHByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktp
dE1lZGlhQ2xlYXJLZXlEZWNyeXB0Q2xhc3MgeworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlw
dGlvbkRlY3J5cHRDbGFzcyBwYXJlbnRDbGFzczsKK307CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRp
ZgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0Q29tbW9uRW5j
cnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZGUyMjEzNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0
cmVhbWVyLmNwcApAQCAtMCwwICsxLDM2OSBAQAorLyogR1N0cmVhbWVyIENsZWFyS2V5IGNvbW1v
biBlbmNyeXB0aW9uIGRlY3J5cHRvcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBJZ2FsaWEg
Uy5MCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgTWV0cm9sb2dpY2FsCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgWW91VmlldyBUViBMdGQuIDxhbGV4LmFzaGxleUB5b3V2aWV3LmNvbT4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIFN1aXRlIDUwMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMzNSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShFTkNS
WVBURURfTUVESUEpICYmIFVTRShHU1RSRUFNRVIpCisjaW5jbHVkZSAiV2ViS2l0Q29tbW9uRW5j
cnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oIgorCisjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1l
ci5oIgorI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5o
PgorCisjZGVmaW5lIFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX1BSSVZBVEUob2JqKSAo
R19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBXRUJLSVRfVFlQRV9NRURJQV9DRU5D
X0RFQ1JZUFQsIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlKSkKK3N0
cnVjdCBfV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGUgeworICAgIEdz
dEV2ZW50KiBwcm90ZWN0aW9uRXZlbnQ7CisKKyAgICBib29sIGtleVJlY2VpdmVkOworICAgIExv
Y2sgbXV0ZXg7CisgICAgQ29uZGl0aW9uIGNvbmRpdGlvbjsKK307CisKK3N0YXRpYyBHc3RTdGF0
ZUNoYW5nZVJldHVybiB3ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JDaGFuZ2VT
dGF0ZShHc3RFbGVtZW50KiwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7CitzdGF0aWMgdm9p
ZCB3ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JGaW5hbGl6ZShHT2JqZWN0Kik7
CitzdGF0aWMgR3N0Q2Fwcyogd2Via2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFRyYW5z
Zm9ybUNhcHMoR3N0QmFzZVRyYW5zZm9ybSosIEdzdFBhZERpcmVjdGlvbiwgR3N0Q2FwcyosIEdz
dENhcHMqKTsKK3N0YXRpYyBHc3RGbG93UmV0dXJuIHdlYmtpdE1lZGlhQ29tbW9uRW5jcnlwdGlv
bkRlY3J5cHRUcmFuc2Zvcm1JblBsYWNlKEdzdEJhc2VUcmFuc2Zvcm0qLCBHc3RCdWZmZXIqKTsK
K3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0U2lua0V2
ZW50SGFuZGxlcihHc3RCYXNlVHJhbnNmb3JtKiwgR3N0RXZlbnQqKTsKKworc3RhdGljIGdib29s
ZWFuIHdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHREZWZhdWx0U2V0dXBDaXBoZXIo
V2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCopOworc3RhdGljIHZvaWQgd2ViS2l0
TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdERlZmF1bHRSZWxlYXNlQ2lwaGVyKFdlYktpdE1l
ZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqKTsKKworR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJ
Qyh3ZWJraXRfbWVkaWFfY29tbW9uX2VuY3J5cHRpb25fZGVjcnlwdF9kZWJ1Z19jYXRlZ29yeSk7
CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfbWVkaWFfY29tbW9uX2VuY3J5cHRpb25f
ZGVjcnlwdF9kZWJ1Z19jYXRlZ29yeQorCisjZGVmaW5lIHdlYmtpdF9tZWRpYV9jb21tb25fZW5j
cnlwdGlvbl9kZWNyeXB0X3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKK0dfREVGSU5FX1RZUEUo
V2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCwgd2Via2l0X21lZGlhX2NvbW1vbl9l
bmNyeXB0aW9uX2RlY3J5cHQsIEdTVF9UWVBFX0JBU0VfVFJBTlNGT1JNKTsKKworc3RhdGljIHZv
aWQgd2Via2l0X21lZGlhX2NvbW1vbl9lbmNyeXB0aW9uX2RlY3J5cHRfY2xhc3NfaW5pdChXZWJL
aXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MqIGtsYXNzKQoreworICAgIEdzdEJh
c2VUcmFuc2Zvcm1DbGFzcyogYmFzZVRyYW5zZm9ybUNsYXNzID0gR1NUX0JBU0VfVFJBTlNGT1JN
X0NMQVNTKGtsYXNzKTsKKyAgICBHc3RFbGVtZW50Q2xhc3MqIGVsZW1lbnRDbGFzcyA9IEdTVF9F
TEVNRU5UX0NMQVNTKGtsYXNzKTsKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdf
T0JKRUNUX0NMQVNTKGtsYXNzKTsKKworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJL
aXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JGaW5hbGl6ZTsKKworICAgIEdTVF9ERUJV
R19DQVRFR09SWV9JTklUKHdlYmtpdF9tZWRpYV9jb21tb25fZW5jcnlwdGlvbl9kZWNyeXB0X2Rl
YnVnX2NhdGVnb3J5LAorICAgICAgICAid2Via2l0Y2VuYyIsIDAsICJDb21tb24gRW5jcnlwdGlv
biBiYXNlIGNsYXNzIik7CisKKyAgICBlbGVtZW50Q2xhc3MtPmNoYW5nZV9zdGF0ZSA9IEdTVF9E
RUJVR19GVU5DUFRSKHdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckNoYW5nZVN0
YXRlKTsKKworICAgIGJhc2VUcmFuc2Zvcm1DbGFzcy0+dHJhbnNmb3JtX2lwID0gR1NUX0RFQlVH
X0ZVTkNQVFIod2Via2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFRyYW5zZm9ybUluUGxh
Y2UpOworICAgIGJhc2VUcmFuc2Zvcm1DbGFzcy0+dHJhbnNmb3JtX2NhcHMgPSBHU1RfREVCVUdf
RlVOQ1BUUih3ZWJraXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0VHJhbnNmb3JtQ2Fwcyk7
CisgICAgYmFzZVRyYW5zZm9ybUNsYXNzLT50cmFuc2Zvcm1faXBfb25fcGFzc3Rocm91Z2ggPSBG
QUxTRTsKKyAgICBiYXNlVHJhbnNmb3JtQ2xhc3MtPnNpbmtfZXZlbnQgPSBHU1RfREVCVUdfRlVO
Q1BUUih3ZWJraXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0U2lua0V2ZW50SGFuZGxlcik7
CisKKyAgICBrbGFzcy0+c2V0dXBDaXBoZXIgPSBHU1RfREVCVUdfRlVOQ1BUUih3ZWJLaXRNZWRp
YUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0RGVmYXVsdFNldHVwQ2lwaGVyKTsKKyAgICBrbGFzcy0+
cmVsZWFzZUNpcGhlciA9IEdTVF9ERUJVR19GVU5DUFRSKHdlYktpdE1lZGlhQ29tbW9uRW5jcnlw
dGlvbkRlY3J5cHREZWZhdWx0UmVsZWFzZUNpcGhlcik7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRk
X3ByaXZhdGUoa2xhc3MsIHNpemVvZihXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0
UHJpdmF0ZSkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfbWVkaWFfY29tbW9uX2VuY3J5cHRp
b25fZGVjcnlwdF9pbml0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYp
Cit7CisgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGUqIHByaXYg
PSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9QUklWQVRFKHNlbGYpOworCisgICAgc2Vs
Zi0+cHJpdiA9IHByaXY7CisgICAgbmV3IChwcml2KSBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRp
b25EZWNyeXB0UHJpdmF0ZSgpOworCisgICAgR3N0QmFzZVRyYW5zZm9ybSogYmFzZSA9IEdTVF9C
QVNFX1RSQU5TRk9STShzZWxmKTsKKyAgICBnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X2luX3BsYWNl
KGJhc2UsIFRSVUUpOworICAgIGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcGFzc3Rocm91Z2goYmFz
ZSwgRkFMU0UpOworICAgIGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfZ2FwX2F3YXJlKGJhc2UsIEZB
TFNFKTsKK30KKworc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlw
dG9yRmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5j
cnlwdGlvbkRlY3J5cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUKG9iamVjdCk7
CisgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGUqIHByaXYgPSBz
ZWxmLT5wcml2OworCisgICAgcHJpdi0+fldlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5
cHRQcml2YXRlKCk7CisgICAgR1NUX0NBTExfUEFSRU5UKEdfT0JKRUNUX0NMQVNTLCBmaW5hbGl6
ZSwgKG9iamVjdCkpOworfQorCitzdGF0aWMgR3N0Q2Fwcyogd2Via2l0TWVkaWFDb21tb25FbmNy
eXB0aW9uRGVjcnlwdFRyYW5zZm9ybUNhcHMoR3N0QmFzZVRyYW5zZm9ybSogYmFzZSwgR3N0UGFk
RGlyZWN0aW9uIGRpcmVjdGlvbiwgR3N0Q2FwcyogY2FwcywgR3N0Q2FwcyogZmlsdGVyKQorewor
ICAgIGlmIChkaXJlY3Rpb24gPT0gR1NUX1BBRF9VTktOT1dOKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIEdzdENhcHMqIHRyYW5zZm9ybWVkQ2FwcyA9IGdzdF9jYXBzX25ld19lbXB0
eSgpOworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYgPSBXRUJL
SVRfTUVESUFfQ0VOQ19ERUNSWVBUKGJhc2UpOworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlw
dGlvbkRlY3J5cHRDbGFzcyoga2xhc3MgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9D
TEFTUyhzZWxmKTsKKworICAgIEdTVF9ERUJVR19PQkpFQ1QoYmFzZSwgImRpcmVjdGlvbjogJXMs
IGNhcHM6ICUiIEdTVF9QVFJfRk9STUFUICIgZmlsdGVyOiAlIiBHU1RfUFRSX0ZPUk1BVCwgKGRp
cmVjdGlvbiA9PSBHU1RfUEFEX1NSQykgPyAic3JjIiA6ICJzaW5rIiwgY2FwcywgZmlsdGVyKTsK
KworICAgIHVuc2lnbmVkIHNpemUgPSBnc3RfY2Fwc19nZXRfc2l6ZShjYXBzKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIEdzdFN0cnVjdHVyZSog
aW4gPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlKGNhcHMsIGkpOworICAgICAgICBHc3RTdHJ1Y3R1
cmUqIG91dCA9IG51bGxwdHI7CisKKyAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBHU1RfUEFEX1NJ
TkspIHsKKyAgICAgICAgICAgIGlmICghZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGQoaW4sICJvcmln
aW5hbC1tZWRpYS10eXBlIikpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
ICAgIG91dCA9IGdzdF9zdHJ1Y3R1cmVfY29weShpbik7CisgICAgICAgICAgICBnc3Rfc3RydWN0
dXJlX3NldF9uYW1lKG91dCwgZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKG91dCwgIm9yaWdpbmFs
LW1lZGlhLXR5cGUiKSk7CisKKyAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgdGhlIERSTSByZWxh
dGVkIGZpZWxkcyBmcm9tIHRoZSBkb3duLXN0cmVhbSBjYXBzLgorICAgICAgICAgICAgZm9yIChp
bnQgaiA9IDA7IGogPCBnc3Rfc3RydWN0dXJlX25fZmllbGRzKGluKTsgKytqKSB7CisgICAgICAg
ICAgICAgICAgY29uc3QgZ2NoYXIqIGZpZWxkTmFtZSA9IGdzdF9zdHJ1Y3R1cmVfbnRoX2ZpZWxk
X25hbWUoaW4sIGopOworCisgICAgICAgICAgICAgICAgaWYgKGdfc3RyX2hhc19wcmVmaXgoZmll
bGROYW1lLCAicHJvdGVjdGlvbi1zeXN0ZW0iKQorICAgICAgICAgICAgICAgICAgICB8fCBnX3N0
cl9oYXNfcHJlZml4KGZpZWxkTmFtZSwgIm9yaWdpbmFsLW1lZGlhLXR5cGUiKSkKKyAgICAgICAg
ICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQob3V0LCBmaWVsZE5hbWUpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgR3N0U3RydWN0dXJl
KiB0bXAgPSBnc3Rfc3RydWN0dXJlX2NvcHkoaW4pOworICAgICAgICAgICAgLy8gRmlsdGVyIG91
dCB0aGUgdmlkZW8gcmVsYXRlZCBmaWVsZHMgZnJvbSB0aGUgdXAtc3RyZWFtIGNhcHMsCisgICAg
ICAgICAgICAvLyBiZWNhdXNlIHRoZXkgYXJlIG5vdCByZWxldmFudCB0byB0aGUgaW5wdXQgY2Fw
cyBvZiB0aGlzIGVsZW1lbnQgYW5kCisgICAgICAgICAgICAvLyBjYW4gY2F1c2UgY2FwcyBuZWdv
dGlhdGlvbiBmYWlsdXJlcyB3aXRoIGFkYXB0aXZlIGJpdHJhdGUgc3RyZWFtcy4KKyAgICAgICAg
ICAgIGZvciAoaW50IGluZGV4ID0gZ3N0X3N0cnVjdHVyZV9uX2ZpZWxkcyh0bXApIC0gMTsgaW5k
ZXggPj0gMDsgLS1pbmRleCkgeworICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyKiBmaWVsZE5h
bWUgPSBnc3Rfc3RydWN0dXJlX250aF9maWVsZF9uYW1lKHRtcCwgaW5kZXgpOworICAgICAgICAg
ICAgICAgIEdTVF9UUkFDRSgiQ2hlY2sgZmllbGQgXCIlc1wiIGZvciByZW1vdmFsIiwgZmllbGRO
YW1lKTsKKworICAgICAgICAgICAgICAgIGlmICghZ19zdHJjbXAwKGZpZWxkTmFtZSwgImJhc2Ut
cHJvZmlsZSIpCisgICAgICAgICAgICAgICAgICAgIHx8ICFnX3N0cmNtcDAoZmllbGROYW1lLCAi
Y29kZWNfZGF0YSIpCisgICAgICAgICAgICAgICAgICAgIHx8ICFnX3N0cmNtcDAoZmllbGROYW1l
LCAiaGVpZ2h0IikKKyAgICAgICAgICAgICAgICAgICAgfHwgIWdfc3RyY21wMChmaWVsZE5hbWUs
ICJmcmFtZXJhdGUiKQorICAgICAgICAgICAgICAgICAgICB8fCAhZ19zdHJjbXAwKGZpZWxkTmFt
ZSwgImxldmVsIikKKyAgICAgICAgICAgICAgICAgICAgfHwgIWdfc3RyY21wMChmaWVsZE5hbWUs
ICJwaXhlbC1hc3BlY3QtcmF0aW8iKQorICAgICAgICAgICAgICAgICAgICB8fCAhZ19zdHJjbXAw
KGZpZWxkTmFtZSwgInByb2ZpbGUiKQorICAgICAgICAgICAgICAgICAgICB8fCAhZ19zdHJjbXAw
KGZpZWxkTmFtZSwgInJhdGUiKQorICAgICAgICAgICAgICAgICAgICB8fCAhZ19zdHJjbXAwKGZp
ZWxkTmFtZSwgIndpZHRoIikpIHsKKyAgICAgICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9y
ZW1vdmVfZmllbGQodG1wLCBmaWVsZE5hbWUpOworICAgICAgICAgICAgICAgICAgICBHU1RfVFJB
Q0UoIlJlbW92aW5nIGZpZWxkICVzIiwgZmllbGROYW1lKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG91dCA9IGdzdF9zdHJ1Y3R1cmVfY29weSh0bXAp
OworICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQob3V0LCAicHJvdGVjdGlvbi1zeXN0ZW0i
LCBHX1RZUEVfU1RSSU5HLCBrbGFzcy0+cHJvdGVjdGlvblN5c3RlbUlkLAorICAgICAgICAgICAg
ICAgICJvcmlnaW5hbC1tZWRpYS10eXBlIiwgR19UWVBFX1NUUklORywgZ3N0X3N0cnVjdHVyZV9n
ZXRfbmFtZShpbiksIG51bGxwdHIpOworCisgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldF9u
YW1lKG91dCwgImFwcGxpY2F0aW9uL3gtY2VuYyIpOworICAgICAgICAgICAgZ3N0X3N0cnVjdHVy
ZV9mcmVlKHRtcCk7CisgICAgICAgIH0KKworICAgICAgICBib29sIGR1cGxpY2F0ZSA9IGZhbHNl
OworICAgICAgICB1bnNpZ25lZCBzaXplID0gZ3N0X2NhcHNfZ2V0X3NpemUodHJhbnNmb3JtZWRD
YXBzKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgIWR1cGxpY2F0ZSAmJiBp
bmRleCA8IHNpemU7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIEdzdFN0cnVjdHVyZSogcyA9IGdz
dF9jYXBzX2dldF9zdHJ1Y3R1cmUodHJhbnNmb3JtZWRDYXBzLCBpbmRleCk7CisgICAgICAgICAg
ICBpZiAoZ3N0X3N0cnVjdHVyZV9pc19lcXVhbChzLCBvdXQpKQorICAgICAgICAgICAgICAgIGR1
cGxpY2F0ZSA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWR1cGxpY2F0ZSkKKyAg
ICAgICAgICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmUodHJhbnNmb3JtZWRDYXBzLCBvdXQp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2ZyZWUob3V0KTsKKyAg
ICB9CisKKyAgICBpZiAoZmlsdGVyKSB7CisgICAgICAgIEdzdENhcHMqIGludGVyc2VjdGlvbjsK
KworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKGJhc2UsICJVc2luZyBmaWx0ZXIgY2FwcyAlIiBH
U1RfUFRSX0ZPUk1BVCwgZmlsdGVyKTsKKyAgICAgICAgaW50ZXJzZWN0aW9uID0gZ3N0X2NhcHNf
aW50ZXJzZWN0X2Z1bGwodHJhbnNmb3JtZWRDYXBzLCBmaWx0ZXIsIEdTVF9DQVBTX0lOVEVSU0VD
VF9GSVJTVCk7CisgICAgICAgIGdzdF9jYXBzX3VucmVmKHRyYW5zZm9ybWVkQ2Fwcyk7CisgICAg
ICAgIHRyYW5zZm9ybWVkQ2FwcyA9IGludGVyc2VjdGlvbjsKKyAgICB9CisKKyAgICBHU1RfREVC
VUdfT0JKRUNUKGJhc2UsICJyZXR1cm5pbmcgJSIgR1NUX1BUUl9GT1JNQVQsIHRyYW5zZm9ybWVk
Q2Fwcyk7CisgICAgcmV0dXJuIHRyYW5zZm9ybWVkQ2FwczsKK30KKworc3RhdGljIEdzdEZsb3dS
ZXR1cm4gd2Via2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFRyYW5zZm9ybUluUGxhY2Uo
R3N0QmFzZVRyYW5zZm9ybSogYmFzZSwgR3N0QnVmZmVyKiBidWZmZXIpCit7CisgICAgV2ViS2l0
TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiA9IFdFQktJVF9NRURJQV9DRU5DX0RF
Q1JZUFQoYmFzZSk7CisgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdENsYXNz
KiBrbGFzcyA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX0NMQVNTKHNlbGYpOworICAg
IFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lU
X01FRElBX0NFTkNfREVDUllQVF9HRVRfUFJJVkFURShzZWxmKTsKKyAgICBndWludCBzdWJTYW1w
bGVDb3VudCwgaXZTaXplOworICAgIGdib29sZWFuIGVuY3J5cHRlZDsKKyAgICBjb25zdCBHVmFs
dWUqIHZhbHVlOworICAgIEdzdEJ1ZmZlciogaXZCdWZmZXIgPSBudWxscHRyOworICAgIEdzdEJ1
ZmZlciogc3ViU2FtcGxlc0J1ZmZlciA9IG51bGxwdHI7CisgICAgR3N0UHJvdGVjdGlvbk1ldGEq
IHByb3RlY3Rpb25NZXRhOworCisgICAgTG9ja0hvbGRlciBsb2NrZXIocHJpdi0+bXV0ZXgpOwor
CisgICAgLy8gVGhlIGtleSBtaWdodCBub3QgaGF2ZSBiZWVuIHJlY2VpdmVkIHlldC4gV2FpdCBm
b3IgaXQuCisgICAgaWYgKCFwcml2LT5rZXlSZWNlaXZlZCkKKyAgICAgICAgcHJpdi0+Y29uZGl0
aW9uLndhaXQocHJpdi0+bXV0ZXgpOworCisgICAgcHJvdGVjdGlvbk1ldGEgPSByZWludGVycHJl
dF9jYXN0PEdzdFByb3RlY3Rpb25NZXRhKj4oZ3N0X2J1ZmZlcl9nZXRfcHJvdGVjdGlvbl9tZXRh
KGJ1ZmZlcikpOworICAgIGlmICghcHJvdGVjdGlvbk1ldGEpIHsKKyAgICAgICAgR1NUX0VSUk9S
X09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBHc3RQcm90ZWN0aW9uIG1ldGFkYXRhIGZyb20g
YnVmZmVyICVwIiwgYnVmZmVyKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JU
RUQ7CisgICAgfQorCisgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF91aW50KHByb3RlY3Rpb25N
ZXRhLT5pbmZvLCAiaXZfc2l6ZSIsICZpdlNpemUpKSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpF
Q1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQgaXZfc2l6ZSIpOworICAgICAgICBnc3RfYnVmZmVyX3Jl
bW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1l
dGEpKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CisgICAgfQorCisg
ICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9ib29sZWFuKHByb3RlY3Rpb25NZXRhLT5pbmZvLCAi
ZW5jcnlwdGVkIiwgJmVuY3J5cHRlZCkpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxm
LCAiRmFpbGVkIHRvIGdldCBlbmNyeXB0ZWQgZmxhZyIpOworICAgICAgICBnc3RfYnVmZmVyX3Jl
bW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1l
dGEpKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CisgICAgfQorCisg
ICAgaWYgKCFpdlNpemUgfHwgIWVuY3J5cHRlZCkgeworICAgICAgICBnc3RfYnVmZmVyX3JlbW92
ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEp
KTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOworICAgIH0KKworICAgIEdTVF9ERUJVR19P
QkpFQ1QoYmFzZSwgInByb3RlY3Rpb24gbWV0YTogJSIgR1NUX1BUUl9GT1JNQVQsIHByb3RlY3Rp
b25NZXRhLT5pbmZvKTsKKyAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQocHJvdGVjdGlv
bk1ldGEtPmluZm8sICJzdWJzYW1wbGVfY291bnQiLCAmc3ViU2FtcGxlQ291bnQpKSB7CisgICAg
ICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQgc3Vic2FtcGxlX2NvdW50
Iik7CisgICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9j
YXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOworICAgICAgICByZXR1cm4gR1NUX0ZMT1df
Tk9UX1NVUFBPUlRFRDsKKyAgICB9CisKKyAgICBpZiAoc3ViU2FtcGxlQ291bnQpIHsKKyAgICAg
ICAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShwcm90ZWN0aW9uTWV0YS0+aW5mbywg
InN1YnNhbXBsZXMiKTsKKyAgICAgICAgaWYgKCF2YWx1ZSkgeworICAgICAgICAgICAgR1NUX0VS
Uk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBzdWJzYW1wbGVzIik7CisgICAgICAgICAg
ICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRh
Kj4ocHJvdGVjdGlvbk1ldGEpKTsKKyAgICAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQ
UE9SVEVEOworICAgICAgICB9CisgICAgICAgIHN1YlNhbXBsZXNCdWZmZXIgPSBnc3RfdmFsdWVf
Z2V0X2J1ZmZlcih2YWx1ZSk7CisgICAgfQorCisgICAgaWYgKCFrbGFzcy0+c2V0dXBDaXBoZXIo
c2VsZikpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGNvbmZp
Z3VyZSBjaXBoZXIiKTsKKyAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJl
aW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CisgICAgICAgIHJldHVy
biBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOworICAgIH0KKworICAgIHZhbHVlID0gZ3N0X3N0cnVj
dHVyZV9nZXRfdmFsdWUocHJvdGVjdGlvbk1ldGEtPmluZm8sICJpdiIpOworICAgIGlmICghdmFs
dWUpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBJViBm
b3Igc2FtcGxlIik7CisgICAgICAgIGtsYXNzLT5yZWxlYXNlQ2lwaGVyKHNlbGYpOworICAgICAg
ICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRh
Kj4ocHJvdGVjdGlvbk1ldGEpKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JU
RUQ7CisgICAgfQorCisgICAgaXZCdWZmZXIgPSBnc3RfdmFsdWVfZ2V0X2J1ZmZlcih2YWx1ZSk7
CisgICAgaWYgKCFrbGFzcy0+ZGVjcnlwdChzZWxmLCBpdkJ1ZmZlciwgYnVmZmVyLCBzdWJTYW1w
bGVDb3VudCwgc3ViU2FtcGxlc0J1ZmZlcikpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChz
ZWxmLCAiRGVjcnlwdGlvbiBmYWlsZWQiKTsKKyAgICAgICAga2xhc3MtPnJlbGVhc2VDaXBoZXIo
c2VsZik7CisgICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJl
dF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOworICAgICAgICByZXR1cm4gR1NUX0ZM
T1dfTk9UX1NVUFBPUlRFRDsKKyAgICB9CisKKyAgICBrbGFzcy0+cmVsZWFzZUNpcGhlcihzZWxm
KTsKKyAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxH
c3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKKyAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Cit9CisK
Kworc3RhdGljIGdib29sZWFuIHdlYmtpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRTaW5r
RXZlbnRIYW5kbGVyKEdzdEJhc2VUcmFuc2Zvcm0qIHRyYW5zLCBHc3RFdmVudCogZXZlbnQpCit7
CisgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiA9IFdFQktJVF9N
RURJQV9DRU5DX0RFQ1JZUFQodHJhbnMpOworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlv
bkRlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfUFJJ
VkFURShzZWxmKTsKKyAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3Mq
IGtsYXNzID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfQ0xBU1Moc2VsZik7CisgICAg
Z2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7CisKKyAgICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFKGV2
ZW50KSkgeworICAgIGNhc2UgR1NUX0VWRU5UX1BST1RFQ1RJT046IHsKKyAgICAgICAgY29uc3Qg
Y2hhciogc3lzdGVtSWQ7CisgICAgICAgIGNvbnN0IGNoYXIqIG9yaWdpbjsKKyAgICAgICAgR3N0
QnVmZmVyKiBpbml0RGF0YUJ1ZmZlcjsKKworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYs
ICJyZWNlaXZlZCBwcm90ZWN0aW9uIGV2ZW50Iik7CisgICAgICAgIGdzdF9ldmVudF9wYXJzZV9w
cm90ZWN0aW9uKGV2ZW50LCAmc3lzdGVtSWQsICZpbml0RGF0YUJ1ZmZlciwgJm9yaWdpbik7Cisg
ICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgInN5c3RlbUlkOiAlcyIsIHN5c3RlbUlkKTsK
KworICAgICAgICBpZiAoIWdfc3RyX2VxdWFsKHN5c3RlbUlkLCBrbGFzcy0+cHJvdGVjdGlvblN5
c3RlbUlkKSkgeworICAgICAgICAgICAgZ3N0X2V2ZW50X3VucmVmKGV2ZW50KTsKKyAgICAgICAg
ICAgIHJlc3VsdCA9IFRSVUU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIEtlZXAgdGhlIGV2ZW50IHJlZiBhcm91bmQgc28gdGhhdCB0aGUgcGFyc2VkIGV2ZW50
IGRhdGEKKyAgICAgICAgLy8gcmVtYWlucyB2YWxpZCB1bnRpbCB0aGUgZHJtLWtleS1uZWVkIG1l
c3NhZ2UgaGFzIGJlZW4gc2VudC4KKyAgICAgICAgcHJpdi0+cHJvdGVjdGlvbkV2ZW50ID0gZXZl
bnQ7CisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc2VsZiwgaW5pdERhdGFCdWZm
ZXJdIHsKKyAgICAgICAgICAgIGlmIChzZWxmKSB7CisgICAgICAgICAgICAgICAgV2ViS2l0TWVk
aWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdENsYXNzKiBrbGFzcyA9IFdFQktJVF9NRURJQV9DRU5D
X0RFQ1JZUFRfR0VUX0NMQVNTKHNlbGYpOworICAgICAgICAgICAgICAgIGtsYXNzLT5yZXF1ZXN0
RGVjcnlwdGlvbktleShzZWxmLCBpbml0RGF0YUJ1ZmZlcik7CisgICAgICAgICAgICAgICAgaWYg
KHNlbGYtPnByaXYtPnByb3RlY3Rpb25FdmVudCkgeworICAgICAgICAgICAgICAgICAgICBnc3Rf
ZXZlbnRfdW5yZWYoc2VsZi0+cHJpdi0+cHJvdGVjdGlvbkV2ZW50KTsKKyAgICAgICAgICAgICAg
ICAgICAgc2VsZi0+cHJpdi0+cHJvdGVjdGlvbkV2ZW50ID0gbnVsbHB0cjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9fSk7CisKKyAgICAgICAgcmVzdWx0ID0gVFJVRTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNX09P
QjogeworICAgICAgICBpZiAoa2xhc3MtPmhhbmRsZUtleVJlc3BvbnNlKHNlbGYsIGV2ZW50KSkg
eworICAgICAgICAgICAgcHJpdi0+a2V5UmVjZWl2ZWQgPSB0cnVlOworICAgICAgICAgICAgcHJp
di0+Y29uZGl0aW9uLm5vdGlmeU9uZSgpOworICAgICAgICB9CisKKyAgICAgICAgZ3N0X2V2ZW50
X3VucmVmKGV2ZW50KTsKKyAgICAgICAgcmVzdWx0ID0gVFJVRTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIHJlc3VsdCA9IEdTVF9CQVNFX1RSQU5TRk9STV9D
TEFTUyhwYXJlbnRfY2xhc3MpLT5zaW5rX2V2ZW50KHRyYW5zLCBldmVudCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBHc3RTdGF0ZUNo
YW5nZVJldHVybiB3ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JDaGFuZ2VTdGF0
ZShHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQoreworICAg
IFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFf
Q0VOQ19ERUNSWVBUKGVsZW1lbnQpOworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfUFJJVkFU
RShzZWxmKTsKKyAgICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQgPSBHU1RfU1RBVEVfQ0hBTkdF
X1NVQ0NFU1M7CisKKyAgICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKKyAgICBjYXNlIEdTVF9TVEFU
RV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgorICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYs
ICJQQVVTRUQtPlJFQURZIik7CisgICAgICAgIHByaXYtPmNvbmRpdGlvbi5ub3RpZnlPbmUoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgcmV0ID0gR1NUX0VMRU1FTlRfQ0xBU1MocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlKGVs
ZW1lbnQsIHRyYW5zaXRpb24pOworCisgICAgLy8gQWRkIHBvc3QtdHJhbnNpdGlvbiBjb2RlIGhl
cmUuCisKKyAgICByZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJLaXRNZWRp
YUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0RGVmYXVsdFNldHVwQ2lwaGVyKFdlYktpdE1lZGlhQ29t
bW9uRW5jcnlwdGlvbkRlY3J5cHQqKQoreworICAgIHJldHVybiB0cnVlOworfQorCisKK3N0YXRp
YyB2b2lkIHdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHREZWZhdWx0UmVsZWFzZUNp
cGhlcihXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KikKK3sKK30KKworCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHRvckdTdHJlYW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0
MGJhNGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oCkBA
IC0wLDAgKzEsNjcgQEAKKy8qIEdTdHJlYW1lciBDbGVhcktleSBjb21tb24gZW5jcnlwdGlvbiBk
ZWNyeXB0b3IKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTAorICogQ29weXJp
Z2h0IChDKSAyMDE2IE1ldHJvbG9naWNhbAorICogQ29weXJpZ2h0IChDKSAyMDEzIFlvdVZpZXcg
VFYgTHRkLiA8YWxleC5hc2hsZXlAeW91dmlldy5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3QsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmbmRlZiBXZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyX2gKKyNk
ZWZpbmUgV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lcl9oCisKKyNpZiBF
TkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBVU0UoR1NUUkVBTUVSKQorCisjaW5jbHVkZSA8Z3N0
L2dzdC5oPgorI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaD4KKworR19CRUdJ
Tl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX01FRElBX0NFTkNfREVDUllQVCAgICAgICAg
ICAod2Via2l0X21lZGlhX2NvbW1vbl9lbmNyeXB0aW9uX2RlY3J5cHRfZ2V0X3R5cGUoKSkKKyNk
ZWZpbmUgV0VCS0lUX01FRElBX0NFTkNfREVDUllQVChvYmopICAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfTUVESUFfQ0VOQ19ERUNSWVBULCBX
ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KSkKKyNkZWZpbmUgV0VCS0lUX01FRElB
X0NFTkNfREVDUllQVF9DTEFTUyhrbGFzcykgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xh
c3MpLCBXRUJLSVRfVFlQRV9NRURJQV9DRU5DX0RFQ1JZUFQsIFdlYktpdE1lZGlhQ29tbW9uRW5j
cnlwdGlvbkRlY3J5cHRDbGFzcykpCisjZGVmaW5lIFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRf
R0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCBXRUJLSVRf
VFlQRV9NRURJQV9DRU5DX0RFQ1JZUFQsIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5
cHRDbGFzcykpCisKKyNkZWZpbmUgV0VCS0lUX0lTX01FRElBX0NFTkNfREVDUllQVChvYmopICAg
ICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfTUVESUFf
Q0VOQ19ERUNSWVBUKSkKKyNkZWZpbmUgV0VCS0lUX0lTX01FRElBX0NFTkNfREVDUllQVF9DTEFT
UyhvYmopIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCBXRUJLSVRfVFlQRV9NRURJ
QV9DRU5DX0RFQ1JZUFQpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0TWVkaWFDb21tb25FbmNy
eXB0aW9uRGVjcnlwdCAgICAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdDsK
K3R5cGVkZWYgc3RydWN0IF9XZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3Mg
ICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3M7Cit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGUgV2ViS2l0TWVkaWFD
b21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGU7CisKK0dUeXBlIHdlYmtpdF9tZWRpYV9jb21t
b25fZW5jcnlwdGlvbl9kZWNyeXB0X2dldF90eXBlKHZvaWQpOworCitzdHJ1Y3QgX1dlYktpdE1l
ZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQgeworICAgIEdzdEJhc2VUcmFuc2Zvcm0gcGFyZW50
OworCisgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGUqIHByaXY7
Cit9OworCitzdHJ1Y3QgX1dlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzcyB7
CisgICAgR3N0QmFzZVRyYW5zZm9ybUNsYXNzIHBhcmVudENsYXNzOworCisgICAgY29uc3QgY2hh
ciogcHJvdGVjdGlvblN5c3RlbUlkOworICAgIHZvaWQgKCpyZXF1ZXN0RGVjcnlwdGlvbktleSkg
KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqLCBHc3RCdWZmZXIqIGluaXREYXRh
KTsKKyAgICBnYm9vbGVhbiAoKmhhbmRsZUtleVJlc3BvbnNlKSAoV2ViS2l0TWVkaWFDb21tb25F
bmNyeXB0aW9uRGVjcnlwdCosIEdzdEV2ZW50KiBldmVudCk7CisgICAgZ2Jvb2xlYW4gKCpzZXR1
cENpcGhlcikgKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqKTsKKyAgICBnYm9v
bGVhbiAoKmRlY3J5cHQpIChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgR3N0
QnVmZmVyKiBpdkJ1ZmZlciwgR3N0QnVmZmVyKiBidWZmZXIsIHVuc2lnbmVkIHN1YlNhbXBsZXND
b3VudCwgR3N0QnVmZmVyKiBzdWJTYW1wbGVzQnVmZmVyKTsKKyAgICB2b2lkICgqcmVsZWFzZUNp
cGhlcikgKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqKTsKK307CisKK0dfRU5E
X0RFQ0xTCisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9u
c0dUSy5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCmluZGV4IGMzNWIxZTEu
LmZkYWZlY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCisrKyBi
L1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCkBAIC0xMzMsNiArMTMzLDcgQEAgZW5kaWYg
KCkKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9BQ0NFTEVSQVRFRF8y
RF9DQU5WQVMgUFVCTElDIE9GRikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVO
QUJMRV9DUkVERU5USUFMX1NUT1JBR0UgUFVCTElDIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxU
X1BPUlRfVkFMVUUoRU5BQkxFX0RSQUdfU1VQUE9SVCBQVUJMSUMgT04pCitXRUJLSVRfT1BUSU9O
X0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfRU5DUllQVEVEX01FRElBIFBVQkxJQyBPRkYpCiBX
RUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfR0VPTE9DQVRJT04gUFVCTElD
IE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0lDT05EQVRBQkFT
RSBQVUJMSUMgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfSklU
IFBVQkxJQyBPTikKQEAgLTM3NSw2ICszNzYsMTQgQEAgaWYgKEVOQUJMRV9WSURFTyBPUiBFTkFC
TEVfV0VCX0FVRElPKQogICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9HU1RSRUFNRVIg
VFJVRSkKIGVuZGlmICgpCiAKK2lmIChFTkFCTEVfRU5DUllQVEVEX01FRElBKQorCisgICAgaWYg
KFBDX0dTVFJFQU1FUl9WRVJTSU9OIFZFUlNJT05fTEVTUyAxLjYuMSkKKyAgICAgICAgbWVzc2Fn
ZShGQVRBTF9FUlJPUiAiR1N0cmVhbWVyIDEuNiBpcyByZXF1aXJlZCB0byB1c2UgRU5BQkxFX0VO
Q1JZUFRFRF9NRURJQSIpCisgICAgZW5kaWYgKCkKKyAgICBmaW5kX3BhY2thZ2UoTGliR2NyeXB0
IFJFUVVJUkVEKQorZW5kaWYgKCkKKwogaWYgKEVOQUJMRV9RVUFSVFpfVEFSR0VUKQogICAgIGlm
IChOT1QgR1RLM19TVVBQT1JUU19RVUFSVFopCiAgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1Ig
IlJlY29tcGlsZSBHVEsrIHdpdGggUXVhcnR6IGJhY2tlbmQgdG8gdXNlIEVOQUJMRV9RVUFSVFpf
VEFSR0VUIikKLS0gCjIuNy4w
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271332</attachid>
            <date>2016-02-15 02:57:36 -0800</date>
            <delta_ts>2016-02-26 00:36:17 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>51732</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSA0YmU4OTA4N2RlZjNmYzBiYTY4NzZmMzI5OTIzOWYyZjlkNzYwNzAwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBNb24sIDE1IEZlYiAyMDE2IDEwOjQ3OjUwICswMTAwClN1YmplY3Q6IFtQQVRDSF0g
cGF0Y2gKCi0tLQogQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgMTIgKwogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgODAgKysrKysKIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlICAg
ICAgICAgICAgICAgICAgIHwgIDE1ICsKIC4uLi9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyLmNwcCAgICAgIHwgICA1ICstCiAuLi4vZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2UuY3BwICB8IDEyMCArKysrKystCiAuLi4vZ3N0cmVhbWVyL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuaCAgICB8ICAxMyArCiAuLi4vZ3N0cmVhbWVyL1dl
YktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcCB8IDI3MyArKysrKysrKysrKysrKysK
IC4uLi9nc3RyZWFtZXIvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuaCAgIHwgIDU2
ICsrKysKIC4uLi9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcCAg
IHwgMzY5ICsrKysrKysrKysrKysrKysrKysrKwogLi4uL1dlYktpdENvbW1vbkVuY3J5cHRpb25E
ZWNyeXB0b3JHU3RyZWFtZXIuaCAgICAgfCAgNjcgKysrKwogU291cmNlL2NtYWtlL09wdGlvbnNH
VEsuY21ha2UgICAgICAgICAgICAgICAgICAgICAgfCAgIDkgKwogMTEgZmlsZXMgY2hhbmdlZCwg
MTAxNiBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRDbGVhcktleURl
Y3J5cHRvckdTdHJlYW1lci5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFt
ZXIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcAog
Y3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmgKCmRpZmYgLS1n
aXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggMzAyNjliOC4uZjhhOTNiMiAxMDA2NDQK
LS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE2LTAy
LTE1ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBb
R1RLXVtHU3RyZWFtZXJdIENsZWFyS2V5IEVNRSB2MSBkZWNyeXB0aW9uIHN1cHBvcnQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDIzNQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU291cmNlL2NtYWtl
L0ZpbmRMaWJHY3J5cHQuY21ha2U6IEFkZGVkLgorICAgICAgICAqIFNvdXJjZS9jbWFrZS9PcHRp
b25zR1RLLmNtYWtlOiBOZXcgcHVibGljIG9wdGlvbiBmb3IKKyAgICAgICAgRU5DUllQVEVEX01F
RElBLCBvZmYgYnkgZGVmYXVsdC4gVGhpcyByZXF1aXJlcyBHU3RyZWFtZXIgMS42Lnggb3IKKyAg
ICAgICAgYWJvdmUgYW5kIGxpYmdjcnlwdC4KKwogMjAxNi0wMi0xMiAgQ3NhYmEgT3N6dHJvZ29u
w6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtFRkxdW0dUS10gRml4IEVOQUJMRShT
VkdfT1RGX0NPTlZFUlRFUikgYnVpbGQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjNjNhOTUwLi5jNGI4ZDlkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsODMgQEAKKzIwMTYtMDItMTUgIFBoaWxpcHBlIE5vcm1hbmQg
IDxwbm9ybWFuZEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdW0dTdHJlYW1lcl0gQ2xlYXJL
ZXkgRU1FIHYxIGRlY3J5cHRpb24gc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0MjM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEdTdHJlYW1l
ciBiYXNlIGNsYXNzIChpdHNlbGYKKyAgICAgICAgaW5oZXJpdGluZyBmcm9tIGJhc2V0cmFuc2Zv
cm0pIHRoYXQgcHJvdmlkZXMgQ29tbW9uIEVuY3J5cHRpb24KKyAgICAgICAgZGVjcnlwdGlvbiBz
dXBwb3J0IGZvciBJU08gYmFzZSBtZWRpYSBmaWxlIGZvcm1hdC4gQSBDbGVhcktleQorICAgICAg
ICBkZWNyeXB0b3IgdXNpbmcgdGhpcyBiYXNlIGNsYXNzIGlzIGFsc28gcHJvdmlkZWQgYXMgYSBw
cm9vZiBvZgorICAgICAgICBjb25jZXB0LgorCisgICAgICAgIFdoZW4gdGhlIEdTdHJlYW1lciBk
ZW11eGVyIGRldGVjdHMgdGhlIHByZXNlbmNlIG9mIHByb3RlY3RlZAorICAgICAgICBjb250ZW50
LCB0aGlzIGluZm9ybWF0aW9uIGlzIGJyb2FkY2FzdGVkIHRvIHRoZSByZXN0IG9mIHRoZQorICAg
ICAgICBwaXBlbGluZSBhbmQgdGhlIGRlY29kZXIgYXR0ZW1wdHMgdG8gY3JlYXRlIGEgZGVjcnlw
dG9yIGVsZW1lbnQKKyAgICAgICAgYWJsZSB0byBoYW5kbGUgdGhpcyBwcm90ZWN0ZWQgY29udGVu
dC4gSW4gdGhpcyBzY2VuYXJpbyB0aGUgbWVkaWEKKyAgICAgICAgcGxheWVyIHJlY2VpdmVzIGEg
bWVzc2FnZSBmcm9tIHRoZSBkZWNyeXB0b3IgYW5kIHRyaWdnZXJzIGtleQorICAgICAgICBuZWdv
dGlhdGlvbi4gQWZ0ZXIgdGhlIGRlY3J5cHRpb24ga2V5IHdhcyBhY3F1aXJlZCBpdCBpcyBwYXNz
ZWQKKyAgICAgICAgYmFjayBvbiB0byB0aGUgZGVjcnlwdG9yIHVzaW5nIGFuIE9PQiBkb3duc3Ry
ZWFtIEdTdHJlYW1lciBldmVudAorICAgICAgICBhbmQgdGhlIGRlY3J5cHRvciBjYW4gb3BlcmF0
ZSBmcm9tIHRoYXQgcG9pbnQuCisKKyAgICAgICAgVGhlcmUgYXJlIG5vIGxheW91dCB0ZXN0cyB1
bnNraXBwZWQgYmVjYXVzZSB0aGlzIGZlYXR1cmUgaXMKKyAgICAgICAgZGlzYWJsZWQgYnkgZGVm
YXVsdC4KKworICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOiBBZGQgbmV3IGZpbGVzIHRvIHRo
ZSBidWlsZCBpZiBFTkNSWVBURURfTUVESUEgaXMgZW5hYmxlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmluaXRpYWxpemVHU3RyZWFtZXJBbmRSZWdpc3RlcldlYktpdEVsZW1l
bnRzKTogUmVnaXN0ZXIgZGVjcnlwdG9yKHMpIGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnN1cHBvcnRzVHlwZSk6IEhvb2sgb24gdG8gZXh0ZW5k
ZWRTdXBwb3J0c1R5cGUgKHNlZSBiZWxvdyksCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6cmVnaXN0ZXJXZWJLaXRHU3RyZWFtZXJFbGVtZW50cyk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpoYW5kbGVTeW5jTWVzc2FnZSk6
CisgICAgICAgIEhhbmRsZSBkcm0ta2V5LW5lZWRlZCBtZXNzYWdlcyBjb21pbmcgZnJvbSBkZWNy
eXB0b3JzLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFz
ZTo6c3VwcG9ydHNLZXlTeXN0ZW0pOiBXZSBjYW4gbm93IGhhbmRsZSBDbGVhcktleS4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmRpc3BhdGNoRGVj
cnlwdGlvbktleSk6CisgICAgICAgIFRoaXMgaXMgY2FsbGVkIGFmdGVyIHRoZSBkZWNyeXB0aW9u
IGtleSB3YXMgYWNxdWlyZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJCYXNlOjphZGRLZXkpOiBCYXNpYyBpbXBsZW1lbnRhdGlvbiBvZiBFTUUgdjEKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmdlbmVyYXRl
S2V5UmVxdWVzdCk6IERpdHRvCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJCYXNlOjpjYW5jZWxLZXlSZXF1ZXN0KTogRGl0dG8KKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Om5lZWRLZXkpOiBEaXR0bworICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6ZXh0ZW5kZWRTdXBw
b3J0c1R5cGUpOiBIb29rIG9uIHRvIHN1cHBvcnRzS2V5U3lzdGVtLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdENsZWFyS2V5RGVj
cnlwdG9yR1N0cmVhbWVyLmNwcDogQWRkZWQuCisgICAgICAgICh3ZWJraXRfbWVkaWFfY2xlYXJf
a2V5X2RlY3J5cHRfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfbWVkaWFfY2xlYXJfa2V5
X2RlY3J5cHRfaW5pdCk6CisgICAgICAgICh3ZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdG9yRmlu
YWxpemUpOgorICAgICAgICAod2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRvclJlcXVlc3REZWNy
eXB0aW9uS2V5KTogTWV0aG9kIHVzZWQgdG8KKyAgICAgICAgdHJpZ2dlciBrZXkgbmVnb3RpYXRp
b24sIHVzdWFsbHkgdGhpcyB3b3VsZCBzZW5kIGEgZHJtLWtleS1uZWVkZWQKKyAgICAgICAgbWVz
c2FnZSBvbiB0aGUgYnVzLgorICAgICAgICAod2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRvckhh
bmRsZUtleVJlc3BvbnNlKTogTWV0aG9kIHVzZWQgdG8KKyAgICAgICAgc2F2ZSB0aGUgZGVjcnlw
dGlvbiBrZXkgb3Igc2Vzc2lvbiBkYXRhIHJlcXVpcmVkIHRvIHBlcmZvcm0KKyAgICAgICAgY29u
dGVudCBkZWNyeXB0aW9uLgorICAgICAgICAod2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRvclNl
dHVwQ2lwaGVyKTogTWV0aG9kIGNhbGxlZCBldmVyeQorICAgICAgICB0aW1lIGEgYnVmZmVyIG5l
ZWRzIHRvIGJlIGRlY3J5cHRlZC4KKyAgICAgICAgKHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0
b3JEZWNyeXB0KTogQWN0dWFsIGNvbnRlbnQgZGVjcnlwdGlvbgorICAgICAgICB3aXRoIG9wdGlv
bmFsIHN1Yi1zYW1wbGVzIGRhdGEgYW5kIGluaXRpYWxpemF0aW9uIHZlY3Rvci4KKyAgICAgICAg
KHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JSZWxlYXNlQ2lwaGVyKTogVGhpcyBpcyBjYWxs
ZWQgYWZ0ZXIKKyAgICAgICAgY29udGVudCBkZWNyeXB0aW9uIHdhcyBwZXJmb3JtZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdENsZWFyS2V5RGVjcnlwdG9y
R1N0cmVhbWVyLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcDogQWRkZWQuCisg
ICAgICAgICh3ZWJraXRfbWVkaWFfY29tbW9uX2VuY3J5cHRpb25fZGVjcnlwdF9jbGFzc19pbml0
KToKKyAgICAgICAgKHdlYmtpdF9tZWRpYV9jb21tb25fZW5jcnlwdGlvbl9kZWNyeXB0X2luaXQp
OgorICAgICAgICAod2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yRmluYWxpemUp
OgorICAgICAgICAod2Via2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFRyYW5zZm9ybUNh
cHMpOiBGaWx0ZXIgb3V0CisgICAgICAgIGNvbnRlbnQgcHJvdGVjdGlvbiBpbmZvcm1hdGlvbnMg
ZnJvbSB0aGUgaW5jb21pbmcgY2Fwcy4KKyAgICAgICAgKHdlYmtpdE1lZGlhQ29tbW9uRW5jcnlw
dGlvbkRlY3J5cHRUcmFuc2Zvcm1JblBsYWNlKTogUHJvY2VzcyBhbgorICAgICAgICBpbmNvbWlu
ZyBidWZmZXIsIGNoZWNrIGl0IGhhcyBhIHByb3RlY3Rpb24gbWV0YWRhdGEgc3RydWN0dXJlIGFu
ZAorICAgICAgICBwZXJmb3JtIGluLXBsYWNlIGNvbnRlbnQgZGVjcnlwdGlvbiBhY2NvcmRpbmcg
dG8gdGhlCisgICAgICAgIGluaXRpYWxpemF0aW9uIHZlY3RvciBhbmQgc3ViLXNhbXBsZXMgZGF0
YS4KKyAgICAgICAgKHdlYmtpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRTaW5rRXZlbnRI
YW5kbGVyKTogSG9vayBvbiB0bworICAgICAgICBwcm90ZWN0aW9uIGV2ZW50cyB0byB0cmlnZ2Vy
IGtleSBuZWdvdGlhdGlvbiBpbiB0aGUgbWVkaWEgcGxheWVyCisgICAgICAgIGFuZCBoYW5kbGUg
T09CIGV2ZW50cyBjb21pbmcgZnJvbSB0aGUgbWVkaWEgcGxheWVyIHRvIHVuYmxvY2sKKyAgICAg
ICAgY29udGVudCBkZWNyeXB0aW9uIHRhc2tzLgorICAgICAgICAod2ViS2l0TWVkaWFDb21tb25F
bmNyeXB0aW9uRGVjcnlwdG9yQ2hhbmdlU3RhdGUpOiBNYWtlIHN1cmUgdG8KKyAgICAgICAgYXZv
aWQgZGVhZGxvY2tzIGluIGNhc2VzIHdoZXJlIHRoZSBkZWNyeXB0b3IgaXMgZGlzcG9zZWQgYmVm
b3JlCisgICAgICAgIHRoZSBkZWNyeXB0aW9uIGtleSB3YXMgcmVjZWl2ZWQuCisgICAgICAgICh3
ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0RGVmYXVsdFNldHVwQ2lwaGVyKTogRGVm
YXVsdCBkdW1teSBtZXRob2QgaW1wbGVtZW50YXRpb24uCisgICAgICAgICh3ZWJLaXRNZWRpYUNv
bW1vbkVuY3J5cHRpb25EZWNyeXB0RGVmYXVsdFJlbGVhc2VDaXBoZXIpOiBEaXR0by4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHRvckdTdHJlYW1lci5oOiBBZGRlZC4KKwogMjAxNi0wMi0xNCAgU2ltb24gRnJhc2VyICA8
c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ1NTIEZpbHRlcnNdIFdoZW4gYXBw
bHlpbmcgYW4gU1ZHIGZpbHRlciBvbiBhIGNvbXBvc2l0ZWQgaW1hZ2UgdXNpbmcgQ1NTIHRoZSBp
bWFnZSBpcyByZW5kZXJlZCB3aXRob3V0IHRoZSBmaWx0ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21h
a2UKaW5kZXggZjg1ODJhYS4uOWEyZmI2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKQEAg
LTgyMSwzICs4MjEsMTggQEAgaWYgKEVOQUJMRV9TVUJUTEVfQ1JZUFRPKQogICAgICAgICAke0dO
VVRMU19MSUJSQVJJRVN9CiAgICAgKQogZW5kaWYgKCkKKworaWYgKEVOQUJMRV9FTkNSWVBURURf
TUVESUEpCisgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAg
ICAgICR7TElCR0NSWVBUX0lOQ0xVREVfRElSU30KKyAgICApCisgICAgbGlzdChBUFBFTkQgV2Vi
Q29yZV9MSUJSQVJJRVMKKyAgICAgICAgJHtMSUJHQ1JZUFRfTElCUkFSSUVTfSAtbGdwZy1lcnJv
cgorICAgICkKKworICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIu
Y3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRDb21tb25FbmNy
eXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcAorICAgICkKKworZW5kaWYgKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKaW5kZXggOGEzM2E2Yy4u
NTQ3YWI5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ci5jcHAKQEAgLTEwNyw2ICsxMDcsOCBAQCBib29sIGluaXRpYWxpemVHU3RyZWFtZXJBbmRSZWdp
c3RlcldlYktpdEVsZW1lbnRzKCkKICAgICBpZiAoIWluaXRpYWxpemVHU3RyZWFtZXIoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgcmVnaXN0ZXJXZWJLaXRHU3RyZWFtZXJFbGVtZW50
cygpOworCiAgICAgR1JlZlB0cjxHc3RFbGVtZW50RmFjdG9yeT4gc3JjRmFjdG9yeSA9IGdzdF9l
bGVtZW50X2ZhY3RvcnlfZmluZCgid2Via2l0d2Vic3JjIik7CiAgICAgaWYgKCFzcmNGYWN0b3J5
KSB7CiAgICAgICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF9tZWRpYV9wbGF5ZXJf
ZGVidWcsICJ3ZWJraXRtZWRpYXBsYXllciIsIDAsICJXZWJLaXQgbWVkaWEgcGxheWVyIik7CkBA
IC0xNzc3LDcgKzE3NzksOCBAQCBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRQogICAgIC8vIHNwZWMg
c2F5cyB3ZSBzaG91bGQgbm90IHJldHVybiAicHJvYmFibHkiIGlmIHRoZSBjb2RlY3Mgc3RyaW5n
IGlzIGVtcHR5CiAgICAgaWYgKG1pbWVUeXBlQ2FjaGUoKS5jb250YWlucyhwYXJhbWV0ZXJzLnR5
cGUpKQogICAgICAgICByZXR1cm4gcGFyYW1ldGVycy5jb2RlY3MuaXNFbXB0eSgpID8gTWVkaWFQ
bGF5ZXI6Ok1heUJlU3VwcG9ydGVkIDogTWVkaWFQbGF5ZXI6OklzU3VwcG9ydGVkOwotICAgIHJl
dHVybiBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICByZXR1cm4gZXh0ZW5kZWRT
dXBwb3J0c1R5cGUocGFyYW1ldGVycywgTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkKTsKIH0K
IAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldERvd25sb2FkQnVmZmVyaW5n
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNl
LmNwcAppbmRleCA0MjgwMzhjLi5jMzI3ZGYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFz
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwCkBAIC04MCw2ICs4MCwxNCBAQAogI2lu
Y2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyLmgiCiAjZW5kaWYKIAorI2lm
IEVOQUJMRShFTkNSWVBURURfTUVESUEpCisjaW5jbHVkZSAiVVVJRC5oIgorI2luY2x1ZGUgIldl
YktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmgiCisjaW5jbHVkZSA8cnVudGltZS9KU0NJ
bmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1
ZGUgPHJ1bnRpbWUvVWludDhBcnJheS5oPgorI2VuZGlmCisKICNpZiBVU0UoQ0FJUk8pICYmIEVO
QUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAjaW5jbHVkZSA8Y2Fpcm8tZ2wuaD4KICNlbmRp
ZgpAQCAtOTEsNiArOTksMTggQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCit2b2lkIHJlZ2lzdGVyV2ViS2l0R1N0cmVhbWVyRWxlbWVudHMoKQoreworI2lm
IEVOQUJMRShFTkNSWVBURURfTUVESUEpCisgICAgaWYgKCF3ZWJraXRHc3RDaGVja1ZlcnNpb24o
MSwgNiwgMSkpCisgICAgICAgIHJldHVybjsKKworICAgIEdSZWZQdHI8R3N0RWxlbWVudEZhY3Rv
cnk+IGNsZWFyS2V5RGVjcnlwdG9yRmFjdG9yeSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfZmluZCgi
d2Via2l0Y2xlYXJrZXkiKTsKKyAgICBpZiAoIWNsZWFyS2V5RGVjcnlwdG9yRmFjdG9yeSkKKyAg
ICAgICAgZ3N0X2VsZW1lbnRfcmVnaXN0ZXIoMCwgIndlYmtpdGNsZWFya2V5IiwgR1NUX1JBTktf
UFJJTUFSWSArIDEwMCwgV0VCS0lUX1RZUEVfTUVESUFfQ0tfREVDUllQVCk7CisjZW5kaWYKK30K
Kwogc3RhdGljIGludCBncmVhdGVzdENvbW1vbkRpdmlzb3IoaW50IGEsIGludCBiKQogewogICAg
IHdoaWxlIChiKSB7CkBAIC0yMjYsMTAgKzI0NiwzMSBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lckJhc2U6OmhhbmRsZVN5bmNNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiAg
ICAgICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0KEdTVF9FTEVNRU5UKG1lc3NhZ2UtPnNyYyks
IGFwcENvbnRleHQuZ2V0KCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0jZWxzZQot
ICAgIFVOVVNFRF9QQVJBTShtZXNzYWdlKTsKICNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX0dMKQog
CisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKyAgICBpZiAoR1NUX01FU1NBR0VfVFlQRSht
ZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9FTEVNRU5UKSB7CisgICAgICAgIGNvbnN0IEdzdFN0cnVj
dHVyZSogc3RydWN0dXJlID0gZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZShtZXNzYWdlKTsKKyAg
ICAgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImRybS1rZXktbmVl
ZGVkIikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgTE9HX01FRElBX01F
U1NBR0UoImhhbmRsaW5nIGRybS1rZXktbmVlZGVkIG1lc3NhZ2UiKTsKKworICAgICAgICBHc3RC
dWZmZXIqIGRhdGE7CisgICAgICAgIGNvbnN0IGNoYXIqIGtleVN5c3RlbUlkOworICAgICAgICBn
Ym9vbGVhbiB2YWxpZCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0KHN0cnVjdHVyZSwgImRhdGEiLCBHU1Rf
VFlQRV9CVUZGRVIsICZkYXRhLCAia2V5LXN5c3RlbS1pZCIsIEdfVFlQRV9TVFJJTkcsICZrZXlT
eXN0ZW1JZCwgbnVsbHB0cik7CisgICAgICAgIEdzdE1hcEluZm8gbWFwSW5mbzsKKyAgICAgICAg
aWYgKCF2YWxpZCB8fCAhZ3N0X2J1ZmZlcl9tYXAoZGF0YSwgJm1hcEluZm8sIEdTVF9NQVBfUkVB
RCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgR1NUX0RFQlVHKCJzY2hl
ZHVsaW5nIGtleU5lZWRlZCBldmVudCIpOworICAgICAgICBuZWVkS2V5KGtleVN5c3RlbUlkLCBj
cmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgY2hhciAqPihtYXBJbmZvLmRhdGEpLCBtYXBJbmZvLnNpemUpOworICAgICAgICBnc3RfYnVm
ZmVyX3VubWFwKGRhdGEsICZtYXBJbmZvKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
I2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpCisKKyAgICBVTlVTRURfUEFSQU0obWVz
c2FnZSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC04MjMsNiArODY0LDgxIEBAIHVuc2ln
bmVkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnZpZGVvRGVjb2RlZEJ5dGVDb3Vu
dCgpIGNvbnN0CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihwb3NpdGlvbik7CiB9
CiAKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6c3VwcG9ydHNLZXlTeXN0
ZW0oY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0sIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7Cisg
ICAgTE9HX01FRElBX01FU1NBR0UoIkNoZWNraW5nIGZvciBLZXlTeXN0ZW0gc3VwcG9ydCB3aXRo
ICVzIGFuZCB0eXBlICVzIiwga2V5U3lzdGVtLnV0ZjgoKS5kYXRhKCksIG1pbWVUeXBlLnV0Zjgo
KS5kYXRhKCkpOworCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKyAgICBpZiAoIXdlYmtp
dEdzdENoZWNrVmVyc2lvbigxLCA2LCAxKSkgeworICAgICAgICBXQVJOX01FRElBX01FU1NBR0Uo
IkVuY3J5cHRlZCBNZWRpYSBFeHRlbnNpb25zIHJlcXVpcmUgR1N0cmVhbWVyIDEuNiIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNh
c2Uoa2V5U3lzdGVtLCAib3JnLnczLmNsZWFya2V5IikpCisgICAgICAgIHJldHVybiB0cnVlOwor
I2VuZGlmCisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01F
RElBKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpkaXNwYXRjaERlY3J5
cHRpb25LZXkoR3N0QnVmZmVyKiBidWZmZXIpCit7CisgICAgZ3N0X2VsZW1lbnRfc2VuZF9ldmVu
dChtX3BpcGVsaW5lLmdldCgpLCBnc3RfZXZlbnRfbmV3X2N1c3RvbShHU1RfRVZFTlRfQ1VTVE9N
X0RPV05TVFJFQU1fT09CLAorICAgICAgICBnc3Rfc3RydWN0dXJlX25ldygiZHJtLWNpcGhlciIs
ICJrZXkiLCBHU1RfVFlQRV9CVUZGRVIsIGJ1ZmZlciwgbnVsbHB0cikpKTsKK30KKworTWVkaWFQ
bGF5ZXI6Ok1lZGlhS2V5RXhjZXB0aW9uIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6
OmFkZEtleShjb25zdCBTdHJpbmcmIGtleVN5c3RlbSwgY29uc3QgdW5zaWduZWQgY2hhcioga2V5
RGF0YSwgdW5zaWduZWQga2V5TGVuZ3RoLCBjb25zdCB1bnNpZ25lZCBjaGFyKiAvKiBpbml0RGF0
YSAqLywgdW5zaWduZWQgLyogaW5pdERhdGFMZW5ndGggKi8gLCBjb25zdCBTdHJpbmcmIHNlc3Np
b25JRCkKK3sKKyAgICBMT0dfTUVESUFfTUVTU0FHRSgiYWRkS2V5IHN5c3RlbTogJXMsIGxlbmd0
aDogJXUsIHNlc3Npb246ICVzIiwga2V5U3lzdGVtLnV0ZjgoKS5kYXRhKCksIGtleUxlbmd0aCwg
c2Vzc2lvbklELnV0ZjgoKS5kYXRhKCkpOworCisgICAgaWYgKCFlcXVhbElnbm9yaW5nQVNDSUlD
YXNlKGtleVN5c3RlbSwgIm9yZy53My5jbGVhcmtleSIpKQorICAgICAgICByZXR1cm4gTWVkaWFQ
bGF5ZXI6OktleVN5c3RlbU5vdFN1cHBvcnRlZDsKKworICAgIEdSZWZQdHI8R3N0QnVmZmVyPiBi
dWZmZXIgPSBhZG9wdEdSZWYoZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZChnX21lbWR1cChrZXlEYXRh
LCBrZXlMZW5ndGgpLCBrZXlMZW5ndGgpKTsKKyAgICBkaXNwYXRjaERlY3J5cHRpb25LZXkoYnVm
ZmVyLmdldCgpKTsKKyAgICByZXR1cm4gTWVkaWFQbGF5ZXI6Ok5vRXJyb3I7Cit9CisKK01lZGlh
UGxheWVyOjpNZWRpYUtleUV4Y2VwdGlvbiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNl
OjpnZW5lcmF0ZUtleVJlcXVlc3QoY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0sIGNvbnN0IHVuc2ln
bmVkIGNoYXIqIGluaXREYXRhUHRyLCB1bnNpZ25lZCBpbml0RGF0YUxlbmd0aCkKK3sKKyAgICBM
T0dfTUVESUFfTUVTU0FHRSgiZ2VuZXJhdGluZyBrZXkgcmVxdWVzdCBmb3Igc3lzdGVtOiAlcyIs
IGtleVN5c3RlbS51dGY4KCkuZGF0YSgpKTsKKworICAgIGlmICghZXF1YWxJZ25vcmluZ0FTQ0lJ
Q2FzZShrZXlTeXN0ZW0sICJvcmcudzMuY2xlYXJrZXkiKSkKKyAgICAgICAgcmV0dXJuIE1lZGlh
UGxheWVyOjpLZXlTeXN0ZW1Ob3RTdXBwb3J0ZWQ7CisKKyAgICBtX3BsYXllci0+a2V5TWVzc2Fn
ZShrZXlTeXN0ZW0sIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSwgaW5pdERhdGFQdHIsIGlu
aXREYXRhTGVuZ3RoLCBVUkwoKSk7CisgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpOb0Vycm9yOwor
fQorCitNZWRpYVBsYXllcjo6TWVkaWFLZXlFeGNlcHRpb24gTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyQmFzZTo6Y2FuY2VsS2V5UmVxdWVzdChjb25zdCBTdHJpbmcmIC8qIGtleVN5c3RlbSAq
LyAsIGNvbnN0IFN0cmluZyYgLyogc2Vzc2lvbklEICovKQoreworICAgIExPR19NRURJQV9NRVNT
QUdFKCJjYW5jZWxLZXlSZXF1ZXN0Iik7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gTWVkaWFQbGF5ZXI6OktleVN5c3RlbU5vdFN1cHBvcnRlZDsKK30KKwordm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpuZWVkS2V5KGNvbnN0IFN0cmluZyYga2V5U3lzdGVt
LCBjb25zdCBTdHJpbmcmIHNlc3Npb25JZCwgY29uc3QgdW5zaWduZWQgY2hhciogaW5pdERhdGEs
IHVuc2lnbmVkIGluaXREYXRhTGVuZ3RoKQoreworICAgIGlmICghbV9wbGF5ZXItPmtleU5lZWRl
ZChrZXlTeXN0ZW0sIHNlc3Npb25JZCwgaW5pdERhdGEsIGluaXREYXRhTGVuZ3RoKSkKKyAgICAg
ICAgR1NUX0RFQlVHKCJubyBldmVudCBoYW5kbGVyIGZvciBrZXkgbmVlZGVkIik7Cit9CisjZW5k
aWYKKworTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJCYXNlOjpleHRlbmRlZFN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJh
bWV0ZXJzJiBwYXJhbWV0ZXJzLCBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIHJlc3VsdCkKK3sK
KyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQorICAgIGlmIChwYXJhbWV0ZXJzLmtleVN5c3Rl
bS5pc051bGwoKSB8fCBwYXJhbWV0ZXJzLmtleVN5c3RlbS5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisKKyAgICBpZiAoc3VwcG9ydHNLZXlTeXN0ZW0ocGFyYW1ldGVycy5rZXlT
eXN0ZW0sIGVtcHR5U3RyaW5nKCkpKQorICAgICAgICByZXN1bHQgPSBNZWRpYVBsYXllcjo6SXNT
dXBwb3J0ZWQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwYXJhbWV0ZXJzKTsKKyNlbmRpZgor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0KIAogI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuaAppbmRl
eCBmNWVhMjFkLi5hMjRhZTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJCYXNlLmgKQEAgLTUzLDYgKzUzLDggQEAgY2xhc3MgR3JhcGhpY3NDb250
ZXh0M0Q7CiBjbGFzcyBJbnRTaXplOwogY2xhc3MgSW50UmVjdDsKIAordm9pZCByZWdpc3Rlcldl
YktpdEdTdHJlYW1lckVsZW1lbnRzKCk7CisKIGNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lckJhc2UgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlCiAjaWYgVVNFKFRF
WFRVUkVfTUFQUEVSX0dMKSAmJiAhVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogICAgICwgcHVi
bGljIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyCkBAIC0xMTgsNiArMTIwLDE3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KICNlbmRpZgogCisjaWYgRU5BQkxFKEVOQ1JZUFRF
RF9NRURJQSkKKyAgICBNZWRpYVBsYXllcjo6TWVkaWFLZXlFeGNlcHRpb24gYWRkS2V5KGNvbnN0
IFN0cmluZyYsIGNvbnN0IHVuc2lnbmVkIGNoYXIqLCB1bnNpZ25lZCwgY29uc3QgdW5zaWduZWQg
Y2hhciosIHVuc2lnbmVkLCBjb25zdCBTdHJpbmcmKTsKKyAgICBNZWRpYVBsYXllcjo6TWVkaWFL
ZXlFeGNlcHRpb24gZ2VuZXJhdGVLZXlSZXF1ZXN0KGNvbnN0IFN0cmluZyYsIGNvbnN0IHVuc2ln
bmVkIGNoYXIqLCB1bnNpZ25lZCk7CisgICAgTWVkaWFQbGF5ZXI6Ok1lZGlhS2V5RXhjZXB0aW9u
IGNhbmNlbEtleVJlcXVlc3QoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CisgICAgdm9p
ZCBuZWVkS2V5KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IHVuc2lnbmVkIGNo
YXIqLCB1bnNpZ25lZCk7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGVjcnlwdGlvbktleShH
c3RCdWZmZXIqKTsKKyNlbmRpZgorCisgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNLZXlTeXN0ZW0o
Y29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0sIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworICAgIHN0
YXRpYyBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIGV4dGVuZGVkU3VwcG9ydHNUeXBlKGNvbnN0
IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRlcnMmLCBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBl
KTsKKwogI2lmIFVTRShHU1RSRUFNRVJfR0wpCiAgICAgdmlydHVhbCBQYXNzTmF0aXZlSW1hZ2VQ
dHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50VGltZSgpIG92ZXJyaWRlOwogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0Q2xl
YXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGUyOGIzCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdENsZWFy
S2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcApAQCAtMCwwICsxLDI3MyBAQAorLyogR1N0cmVhbWVy
IENsZWFyS2V5IGNvbW1vbiBlbmNyeXB0aW9uIGRlY3J5cHRvcgorICoKKyAqIENvcHlyaWdodCAo
QykgMjAxNiBJZ2FsaWEgUy5MCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgTWV0cm9sb2dpY2FsCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBTdWl0ZSA1MDAsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMzUsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFC
TEUoRU5DUllQVEVEX01FRElBKSAmJiBVU0UoR1NUUkVBTUVSKQorI2luY2x1ZGUgIldlYktpdENs
ZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmgiCisKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVy
LmgiCisjaW5jbHVkZSA8Z2NyeXB0Lmg+CisjaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRl
ci5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisKKyNkZWZpbmUgQ0xFQVJLRVlfU0laRSAx
NgorCisjZGVmaW5lIFdFQktJVF9NRURJQV9DS19ERUNSWVBUX0dFVF9QUklWQVRFKG9iaikgKEdf
VFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX1RZUEVfTUVESUFfQ0tfREVD
UllQVCwgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKSkKK3N0cnVjdCBfV2ViS2l0
TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlIHsKKyAgICBHUmVmUHRyPEdzdEJ1ZmZlcj4ga2V5
OworICAgIGdjcnlfY2lwaGVyX2hkX3QgaGFuZGxlOworfTsKKworc3RhdGljIHZvaWQgd2ViS2l0
TWVkaWFDbGVhcktleURlY3J5cHRvckZpbmFsaXplKEdPYmplY3QqKTsKK3N0YXRpYyB2b2lkIHdl
YktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JSZXF1ZXN0RGVjcnlwdGlvbktleShXZWJLaXRNZWRp
YUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmLCBHc3RCdWZmZXIqKTsKK3N0YXRpYyBnYm9v
bGVhbiB3ZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdG9ySGFuZGxlS2V5UmVzcG9uc2UoV2ViS2l0
TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgR3N0RXZlbnQqKTsKK3N0YXRpYyBn
Ym9vbGVhbiB3ZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdG9yU2V0dXBDaXBoZXIoV2ViS2l0TWVk
aWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCopOworc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlh
Q2xlYXJLZXlEZWNyeXB0b3JEZWNyeXB0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5
cHQqLCBHc3RCdWZmZXIqIGl2LCBHc3RCdWZmZXIqIHNhbXBsZSwgdW5zaWduZWQgc3ViU2FtcGxl
c0NvdW50LCBHc3RCdWZmZXIqIHN1YlNhbXBsZXMpOworc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFD
bGVhcktleURlY3J5cHRvclJlbGVhc2VDaXBoZXIoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9u
RGVjcnlwdCopOworCitHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDKHdlYmtpdF9tZWRpYV9jbGVh
cl9rZXlfZGVjcnlwdF9kZWJ1Z19jYXRlZ29yeSk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3
ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRfZGVidWdfY2F0ZWdvcnkKKworI2RlZmluZSBD
TEVBUl9LRVlfUFJPVEVDVElPTl9TWVNURU1fSUQgIjU4MTQ3ZWM4LTA0MjMtNDY1OS05MmU2LWY1
MmM1Y2U4YzNjYyIKKworc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtUZW1wbGF0ZSA9
IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFKCJzaW5rIiwKKyAgICBHU1RfUEFEX1NJTkssCisgICAg
R1NUX1BBRF9BTFdBWVMsCisgICAgR1NUX1NUQVRJQ19DQVBTKCJhcHBsaWNhdGlvbi94LWNlbmMs
IG9yaWdpbmFsLW1lZGlhLXR5cGU9KHN0cmluZyl2aWRlby94LWgyNjQsIHByb3RlY3Rpb24tc3lz
dGVtPShzdHJpbmcpIiBDTEVBUl9LRVlfUFJPVEVDVElPTl9TWVNURU1fSUQgIjsgIgorICAgICJh
cHBsaWNhdGlvbi94LWNlbmMsIG9yaWdpbmFsLW1lZGlhLXR5cGU9KHN0cmluZylhdWRpby9tcGVn
LCBwcm90ZWN0aW9uLXN5c3RlbT0oc3RyaW5nKSIgQ0xFQVJfS0VZX1BST1RFQ1RJT05fU1lTVEVN
X0lEKSk7CisKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNUZW1wbGF0ZSA9IEdTVF9T
VEFUSUNfUEFEX1RFTVBMQVRFKCJzcmMiLAorICAgIEdTVF9QQURfU1JDLAorICAgIEdTVF9QQURf
QUxXQVlTLAorICAgIEdTVF9TVEFUSUNfQ0FQUygidmlkZW8veC1oMjY0OyBhdWRpby9tcGVnIikp
OworCisjZGVmaW5lIHdlYmtpdF9tZWRpYV9jbGVhcl9rZXlfZGVjcnlwdF9wYXJlbnRfY2xhc3Mg
cGFyZW50X2NsYXNzCitHX0RFRklORV9UWVBFKFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0LCB3
ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHQsIFdFQktJVF9UWVBFX01FRElBX0NFTkNfREVD
UllQVCk7CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9tZWRpYV9jbGVhcl9rZXlfZGVjcnlwdF9jbGFz
c19pbml0KFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0Q2xhc3MqIGtsYXNzKQoreworICAgIFdl
YktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzcyogY2VuY0NsYXNzID0gV0VCS0lU
X01FRElBX0NFTkNfREVDUllQVF9DTEFTUyhrbGFzcyk7CisgICAgR3N0RWxlbWVudENsYXNzKiBl
bGVtZW50Q2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyhrbGFzcyk7CisgICAgR09iamVjdENsYXNz
KiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7CisKKyAgICBnb2JqZWN0Q2xh
c3MtPmZpbmFsaXplID0gd2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRvckZpbmFsaXplOworCisg
ICAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZShlbGVtZW50Q2xhc3MsIGdzdF9z
dGF0aWNfcGFkX3RlbXBsYXRlX2dldCgmc2lua1RlbXBsYXRlKSk7CisgICAgZ3N0X2VsZW1lbnRf
Y2xhc3NfYWRkX3BhZF90ZW1wbGF0ZShlbGVtZW50Q2xhc3MsIGdzdF9zdGF0aWNfcGFkX3RlbXBs
YXRlX2dldCgmc3JjVGVtcGxhdGUpKTsKKworICAgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0
aWNfbWV0YWRhdGEoZWxlbWVudENsYXNzLAorICAgICAgICAiRGVjcnlwdCBjb250ZW50IGVuY3J5
cHRlZCB1c2luZyBJU09CTUZGIENsZWFyS2V5IENvbW1vbiBFbmNyeXB0aW9uIiwKKyAgICAgICAg
R1NUX0VMRU1FTlRfRkFDVE9SWV9LTEFTU19ERUNSWVBUT1IsCisgICAgICAgICJEZWNyeXB0cyBt
ZWRpYSB0aGF0IGhhcyBiZWVuIGVuY3J5cHRlZCB1c2luZyBJU09CTUZGIENsZWFyS2V5IENvbW1v
biBFbmNyeXB0aW9uLiIsCisgICAgICAgICJQaGlsaXBwZSBOb3JtYW5kIDxwaGlsbkBpZ2FsaWEu
Y29tPiIpOworCisgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X21lZGlhX2NsZWFy
X2tleV9kZWNyeXB0X2RlYnVnX2NhdGVnb3J5LAorICAgICAgICAid2Via2l0Y2xlYXJrZXkiLCAw
LCAiQ2xlYXJLZXkgZGVjcnlwdG9yIik7CisKKyAgICBjZW5jQ2xhc3MtPnByb3RlY3Rpb25TeXN0
ZW1JZCA9IENMRUFSX0tFWV9QUk9URUNUSU9OX1NZU1RFTV9JRDsKKyAgICBjZW5jQ2xhc3MtPnJl
cXVlc3REZWNyeXB0aW9uS2V5ID0gR1NUX0RFQlVHX0ZVTkNQVFIod2ViS2l0TWVkaWFDbGVhcktl
eURlY3J5cHRvclJlcXVlc3REZWNyeXB0aW9uS2V5KTsKKyAgICBjZW5jQ2xhc3MtPmhhbmRsZUtl
eVJlc3BvbnNlID0gR1NUX0RFQlVHX0ZVTkNQVFIod2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRv
ckhhbmRsZUtleVJlc3BvbnNlKTsKKyAgICBjZW5jQ2xhc3MtPnNldHVwQ2lwaGVyID0gR1NUX0RF
QlVHX0ZVTkNQVFIod2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRvclNldHVwQ2lwaGVyKTsKKyAg
ICBjZW5jQ2xhc3MtPmRlY3J5cHQgPSBHU1RfREVCVUdfRlVOQ1BUUih3ZWJLaXRNZWRpYUNsZWFy
S2V5RGVjcnlwdG9yRGVjcnlwdCk7CisgICAgY2VuY0NsYXNzLT5yZWxlYXNlQ2lwaGVyID0gR1NU
X0RFQlVHX0ZVTkNQVFIod2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRvclJlbGVhc2VDaXBoZXIp
OworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGtsYXNzLCBzaXplb2YoV2ViS2l0TWVk
aWFDbGVhcktleURlY3J5cHRQcml2YXRlKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9tZWRp
YV9jbGVhcl9rZXlfZGVjcnlwdF9pbml0KFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0KiBzZWxm
KQoreworICAgIFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJ
VF9NRURJQV9DS19ERUNSWVBUX0dFVF9QUklWQVRFKHNlbGYpOworCisgICAgaWYgKCFnY3J5X2No
ZWNrX3ZlcnNpb24oR0NSWVBUX1ZFUlNJT04pKQorICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNl
bGYsICJMaWJnY3J5cHQgZmFpbGVkIHRvIGluaXRpYWxpemUiKTsKKworICAgIC8vIEFsbG9jYXRl
IGEgcG9vbCBvZiAxNmsgc2VjdXJlIG1lbW9yeS4gVGhpcyBtYWtlIHRoZSBzZWN1cmUgbWVtb3J5
CisgICAgLy8gYXZhaWxhYmxlIGFuZCBhbHNvIGRyb3BzIHByaXZpbGVnZXMgd2hlcmUgbmVlZGVk
LgorICAgIGdjcnlfY29udHJvbChHQ1JZQ1RMX0lOSVRfU0VDTUVNLCAxNjM4NCwgMCk7CisKKyAg
ICBnY3J5X2NvbnRyb2woR0NSWUNUTF9JTklUSUFMSVpBVElPTl9GSU5JU0hFRCwgMCk7CisKKyAg
ICBzZWxmLT5wcml2ID0gcHJpdjsKKyAgICBuZXcgKHByaXYpIFdlYktpdE1lZGlhQ2xlYXJLZXlE
ZWNyeXB0UHJpdmF0ZSgpOworfQorCitzdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYUNsZWFyS2V5RGVj
cnlwdG9yRmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdE1lZGlhQ2xlYXJL
ZXlEZWNyeXB0KiBzZWxmID0gV0VCS0lUX01FRElBX0NLX0RFQ1JZUFQob2JqZWN0KTsKKyAgICBX
ZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUqIHByaXYgPSBzZWxmLT5wcml2OworCisg
ICAgcHJpdi0+fldlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSgpOworCisgICAgR1NU
X0NBTExfUEFSRU5UKEdfT0JKRUNUX0NMQVNTLCBmaW5hbGl6ZSwgKG9iamVjdCkpOworfQorCitz
dGF0aWMgdm9pZCB3ZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdG9yUmVxdWVzdERlY3J5cHRpb25L
ZXkoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgR3N0QnVmZmVyKiBp
bml0RGF0YUJ1ZmZlcikKK3sKKyAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UoR1NUX0VMRU1F
TlQoc2VsZiksCisgICAgICAgIGdzdF9tZXNzYWdlX25ld19lbGVtZW50KEdTVF9PQkpFQ1Qoc2Vs
ZiksCisgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX25ldygiZHJtLWtleS1uZWVkZWQiLCAiZGF0
YSIsIEdTVF9UWVBFX0JVRkZFUiwgaW5pdERhdGFCdWZmZXIsCisgICAgICAgICAgICAgICAgImtl
eS1zeXN0ZW0taWQiLCBHX1RZUEVfU1RSSU5HLCAib3JnLnczLmNsZWFya2V5IiwgbnVsbHB0cikp
KTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JIYW5k
bGVLZXlSZXNwb25zZShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmLCBH
c3RFdmVudCogZXZlbnQpCit7CisgICAgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRl
KiBwcml2ID0gV0VCS0lUX01FRElBX0NLX0RFQ1JZUFRfR0VUX1BSSVZBVEUoV0VCS0lUX01FRElB
X0NLX0RFQ1JZUFQoc2VsZikpOworICAgIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0g
Z3N0X2V2ZW50X2dldF9zdHJ1Y3R1cmUoZXZlbnQpOworCisgICAgaWYgKCFnc3Rfc3RydWN0dXJl
X2hhc19uYW1lKHN0cnVjdHVyZSwgImRybS1jaXBoZXIiKSkKKyAgICAgICAgcmV0dXJuIEZBTFNF
OworCisgICAgY29uc3QgR1ZhbHVlKiB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlKHN0
cnVjdHVyZSwgImtleSIpOworICAgIHByaXYtPmtleS5jbGVhcigpOworICAgIHByaXYtPmtleSA9
IGFkb3B0R1JlZihnc3RfYnVmZmVyX2NvcHkoZ3N0X3ZhbHVlX2dldF9idWZmZXIodmFsdWUpKSk7
CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJLaXRNZWRpYUNsZWFy
S2V5RGVjcnlwdG9yU2V0dXBDaXBoZXIoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlw
dCogc2VsZikKK3sKKyAgICBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUqIHByaXYg
PSBXRUJLSVRfTUVESUFfQ0tfREVDUllQVF9HRVRfUFJJVkFURShXRUJLSVRfTUVESUFfQ0tfREVD
UllQVChzZWxmKSk7CisgICAgZ2NyeV9lcnJvcl90IGVycm9yOworCisgICAgQVNTRVJUKHByaXYt
PmtleSk7CisgICAgaWYgKCFwcml2LT5rZXkpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChz
ZWxmLCAiRGVjcnlwdGlvbiBrZXkgbm90IHByb3ZpZGVkIik7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBlcnJvciA9IGdjcnlfY2lwaGVyX29wZW4oJihwcml2LT5oYW5kbGUp
LCBHQ1JZX0NJUEhFUl9BRVMxMjgsIEdDUllfQ0lQSEVSX01PREVfQ1RSLCBHQ1JZX0NJUEhFUl9T
RUNVUkUpOworICAgIGlmIChlcnJvcikgeworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYs
ICJGYWlsZWQgdG8gY3JlYXRlIEFFUyAxMjggQ1RSIGNpcGhlciBoYW5kbGU6ICVzIiwgZ3BnX3N0
cmVycm9yKGVycm9yKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBHc3RN
YXBJbmZvIGtleU1hcDsKKyAgICBpZiAoIWdzdF9idWZmZXJfbWFwKHByaXYtPmtleS5nZXQoKSwg
JmtleU1hcCwgR1NUX01BUF9SRUFEKSkgeworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYs
ICJGYWlsZWQgdG8gbWFwIGRlY3J5cHRpb24ga2V5Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBBU1NFUlQoa2V5TWFwLnNpemUgPT0gQ0xFQVJLRVlfU0laRSk7CisgICAg
ZXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRrZXkocHJpdi0+aGFuZGxlLCBrZXlNYXAuZGF0YSwga2V5
TWFwLnNpemUpOworICAgIGdzdF9idWZmZXJfdW5tYXAocHJpdi0+a2V5LmdldCgpLCAma2V5TWFw
KTsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiZ2Ny
eV9jaXBoZXJfc2V0a2V5IGZhaWxlZDogJXMiLCBncGdfc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMg
Z2Jvb2xlYW4gd2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRvckRlY3J5cHQoV2ViS2l0TWVkaWFD
b21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgR3N0QnVmZmVyKiBpdkJ1ZmZlciwgR3N0QnVm
ZmVyKiBidWZmZXIsIHVuc2lnbmVkIHN1YlNhbXBsZUNvdW50LCBHc3RCdWZmZXIqIHN1YlNhbXBs
ZXNCdWZmZXIpCit7CisgICAgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKiBwcml2
ID0gV0VCS0lUX01FRElBX0NLX0RFQ1JZUFRfR0VUX1BSSVZBVEUoV0VCS0lUX01FRElBX0NLX0RF
Q1JZUFQoc2VsZikpOworICAgIEdzdE1hcEluZm8gbWFwLCBpdk1hcCwgc3ViU2FtcGxlc01hcDsK
KyAgICB1bnNpZ25lZCBwb3NpdGlvbiA9IDA7CisgICAgdW5zaWduZWQgc2FtcGxlSW5kZXggPSAw
OworICAgIHVpbnQ4X3QgY3RyW0NMRUFSS0VZX1NJWkVdOworICAgIEdzdEJ5dGVSZWFkZXIqIHJl
YWRlciA9IG51bGxwdHI7CisgICAgZ2Jvb2xlYW4gYnVmZmVyTWFwcGVkLCBzdWJzYW1wbGVzQnVm
ZmVyTWFwcGVkOworICAgIGdjcnlfZXJyb3JfdCBlcnJvcjsKKworICAgIGlmICghZ3N0X2J1ZmZl
cl9tYXAoaXZCdWZmZXIsICZpdk1hcCwgR1NUX01BUF9SRUFEKSkgeworICAgICAgICBHU1RfRVJS
T1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gbWFwIElWIik7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBpZiAoaXZNYXAuc2l6ZSA9PSA4KSB7CisgICAgICAgIG1lbXNldChj
dHIgKyA4LCAwLCA4KTsKKyAgICAgICAgbWVtY3B5KGN0ciwgaXZNYXAuZGF0YSwgOCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGl2TWFwLnNpemUgPT0gQ0xFQVJLRVlfU0laRSk7Cisg
ICAgICAgIG1lbWNweShjdHIsIGl2TWFwLmRhdGEsIENMRUFSS0VZX1NJWkUpOworICAgIH0KKyAg
ICBnc3RfYnVmZmVyX3VubWFwKGl2QnVmZmVyLCAmaXZNYXApOworICAgIGVycm9yID0gZ2NyeV9j
aXBoZXJfc2V0Y3RyKHByaXYtPmhhbmRsZSwgY3RyLCBDTEVBUktFWV9TSVpFKTsKKyAgICBpZiAo
ZXJyb3IpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiZ2NyeV9jaXBoZXJfc2V0
Y3RyIGZhaWxlZDogJXMiLCBncGdfc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGJ1ZmZlck1hcHBlZCA9IGdzdF9idWZmZXJfbWFwKGJ1ZmZlciwg
Jm1hcCwgc3RhdGljX2Nhc3Q8R3N0TWFwRmxhZ3M+KEdTVF9NQVBfUkVBRFdSSVRFKSk7CisgICAg
aWYgKCFidWZmZXJNYXBwZWQpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFp
bGVkIHRvIG1hcCBidWZmZXIiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IHN1YnNhbXBsZXNCdWZmZXJNYXBwZWQgPSBnc3RfYnVmZmVyX21hcChzdWJTYW1wbGVzQnVmZmVy
LCAmc3ViU2FtcGxlc01hcCwgR1NUX01BUF9SRUFEKTsKKyAgICBpZiAoIXN1YnNhbXBsZXNCdWZm
ZXJNYXBwZWQpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIG1h
cCBzdWJzYW1wbGUgYnVmZmVyIik7CisgICAgICAgIGdzdF9idWZmZXJfdW5tYXAoYnVmZmVyLCAm
bWFwKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJlYWRlciA9IGdzdF9i
eXRlX3JlYWRlcl9uZXcoc3ViU2FtcGxlc01hcC5kYXRhLCBzdWJTYW1wbGVzTWFwLnNpemUpOwor
CisgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAicG9zaXRpb246ICVkLCBzaXplOiAlZCIsIHBv
c2l0aW9uLCBtYXAuc2l6ZSk7CisgICAgd2hpbGUgKHBvc2l0aW9uIDwgbWFwLnNpemUpIHsKKyAg
ICAgICAgZ3VpbnQxNiBuQnl0ZXNDbGVhciA9IDA7CisgICAgICAgIGd1aW50MzIgbkJ5dGVzRW5j
cnlwdGVkID0gMDsKKworICAgICAgICBpZiAoc2FtcGxlSW5kZXggPCBzdWJTYW1wbGVDb3VudCkg
eworICAgICAgICAgICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9iZShyZWFkZXIs
ICZuQnl0ZXNDbGVhcikKKyAgICAgICAgICAgICAgICB8fCAhZ3N0X2J5dGVfcmVhZGVyX2dldF91
aW50MzJfYmUocmVhZGVyLCAmbkJ5dGVzRW5jcnlwdGVkKSkgeworICAgICAgICAgICAgICAgIEdT
VF9ERUJVR19PQkpFQ1Qoc2VsZiwgInVuc3VwcG9ydGVkIik7CisgICAgICAgICAgICAgICAgZ3N0
X2J5dGVfcmVhZGVyX2ZyZWUocmVhZGVyKTsKKyAgICAgICAgICAgICAgICBnc3RfYnVmZmVyX3Vu
bWFwKGJ1ZmZlciwgJm1hcCk7CisgICAgICAgICAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcChzdWJT
YW1wbGVzQnVmZmVyLCAmc3ViU2FtcGxlc01hcCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzYW1wbGVJbmRleCsrOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgbkJ5dGVzQ2xlYXIgPSAwOworICAgICAgICAgICAgbkJ5
dGVzRW5jcnlwdGVkID0gbWFwLnNpemUgLSBwb3NpdGlvbjsKKyAgICAgICAgfQorCisgICAgICAg
IEdTVF9UUkFDRV9PQkpFQ1Qoc2VsZiwgIiVkIGJ5dGVzIGNsZWFyICh0b2RvPSVkKSIsIG5CeXRl
c0NsZWFyLCBtYXAuc2l6ZSAtIHBvc2l0aW9uKTsKKyAgICAgICAgcG9zaXRpb24gKz0gbkJ5dGVz
Q2xlYXI7CisgICAgICAgIGlmIChuQnl0ZXNFbmNyeXB0ZWQpIHsKKyAgICAgICAgICAgIEdTVF9U
UkFDRV9PQkpFQ1Qoc2VsZiwgIiVkIGJ5dGVzIGVuY3J5cHRlZCAodG9kbz0lZCkiLCBuQnl0ZXNF
bmNyeXB0ZWQsIG1hcC5zaXplIC0gcG9zaXRpb24pOworICAgICAgICAgICAgZXJyb3IgPSBnY3J5
X2NpcGhlcl9kZWNyeXB0KHByaXYtPmhhbmRsZSwgbWFwLmRhdGEgKyBwb3NpdGlvbiwgbkJ5dGVz
RW5jcnlwdGVkLCAwLCAwKTsKKyAgICAgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAg
ICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgImRlY3J5cHRpb24gZmFpbGVkOiAlcyIsIGdwZ19z
dHJlcnJvcihlcnJvcikpOworICAgICAgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9mcmVlKHJl
YWRlcik7CisgICAgICAgICAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcChidWZmZXIsICZtYXApOwor
ICAgICAgICAgICAgICAgIGdzdF9idWZmZXJfdW5tYXAoc3ViU2FtcGxlc0J1ZmZlciwgJnN1YlNh
bXBsZXNNYXApOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHBvc2l0aW9uICs9IG5CeXRlc0VuY3J5cHRlZDsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGdzdF9ieXRlX3JlYWRlcl9mcmVlKHJlYWRlcik7CisgICAgZ3N0X2J1ZmZlcl91
bm1hcChidWZmZXIsICZtYXApOworICAgIGdzdF9idWZmZXJfdW5tYXAoc3ViU2FtcGxlc0J1ZmZl
ciwgJnN1YlNhbXBsZXNNYXApOworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCB3
ZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdG9yUmVsZWFzZUNpcGhlcihXZWJLaXRNZWRpYUNvbW1v
bkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmKQoreworICAgIFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNy
eXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DS19ERUNSWVBUX0dFVF9QUklWQVRFKFdF
QktJVF9NRURJQV9DS19ERUNSWVBUKHNlbGYpKTsKKyAgICBnY3J5X2NpcGhlcl9jbG9zZShwcml2
LT5oYW5kbGUpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRDbGVhcktleURlY3J5cHRvckdTdHJlYW1lci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdENsZWFy
S2V5RGVjcnlwdG9yR1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYjRjN2Y3MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9XZWJLaXRDbGVhcktleURlY3J5cHRvckdTdHJlYW1lci5oCkBAIC0w
LDAgKzEsNTYgQEAKKy8qIEdTdHJlYW1lciBDbGVhcktleSBjb21tb24gZW5jcnlwdGlvbiBkZWNy
eXB0b3IKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTAorICogQ29weXJpZ2h0
IChDKSAyMDE2IE1ldHJvbG9naWNhbAorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
CisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYg
V2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXJfaAorI2RlZmluZSBXZWJLaXRDbGVhcktl
eURlY3J5cHRvckdTdHJlYW1lcl9oCisKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBV
U0UoR1NUUkVBTUVSKQorCisjaW5jbHVkZSAiV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRv
ckdTdHJlYW1lci5oIgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfTUVE
SUFfQ0tfREVDUllQVCAgICAgICAgICAod2Via2l0X21lZGlhX2NsZWFyX2tleV9kZWNyeXB0X2dl
dF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9NRURJQV9DS19ERUNSWVBUKG9iaikgICAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9NRURJQV9DS19E
RUNSWVBULCBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdCkpCisjZGVmaW5lIFdFQktJVF9NRURJ
QV9DS19ERUNSWVBUX0NMQVNTKGtsYXNzKSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFz
cyksIFdFQktJVF9UWVBFX01FRElBX0NLX0RFQ1JZUFQsIFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNy
eXB0Q2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfTUVESUFfQ0tfREVDUllQVChvYmopICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfTUVESUFfQ0tf
REVDUllQVCkpCisjZGVmaW5lIFdFQktJVF9JU19NRURJQV9DS19ERUNSWVBUX0NMQVNTKG9iaikg
KEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksIFdFQktJVF9UWVBFX01FRElBX0NLX0RF
Q1JZUFQpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHQgICAg
ICAgIFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdE1l
ZGlhQ2xlYXJLZXlEZWNyeXB0Q2xhc3MgICBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdENsYXNz
OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSBXZWJL
aXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGU7CisKK0dUeXBlIHdlYmtpdF9tZWRpYV9jbGVh
cl9rZXlfZGVjcnlwdF9nZXRfdHlwZSh2b2lkKTsKKworc3RydWN0IF9XZWJLaXRNZWRpYUNsZWFy
S2V5RGVjcnlwdCB7CisgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCBwYXJl
bnQ7CisKKyAgICBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUqIHByaXY7Cit9Owor
CitzdHJ1Y3QgX1dlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0Q2xhc3MgeworICAgIFdlYktpdE1l
ZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzcyBwYXJlbnRDbGFzczsKK307CisKK0dfRU5E
X0RFQ0xTCisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdT
dHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
V2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUyMjEzNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRDb21tb25FbmNyeXB0
aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcApAQCAtMCwwICsxLDM2OSBAQAorLyogR1N0cmVhbWVy
IENsZWFyS2V5IGNvbW1vbiBlbmNyeXB0aW9uIGRlY3J5cHRvcgorICoKKyAqIENvcHlyaWdodCAo
QykgMjAxNiBJZ2FsaWEgUy5MCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgTWV0cm9sb2dpY2FsCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgWW91VmlldyBUViBMdGQuIDxhbGV4LmFzaGxleUB5b3V2aWV3
LmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIFN1aXRlIDUwMCwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIFVTRShHU1RSRUFNRVIpCisjaW5jbHVkZSAi
V2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oIgorCisjaW5jbHVkZSAi
R1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKyNpbmNsdWRl
IDx3dGYvUnVuTG9vcC5oPgorCisjZGVmaW5lIFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VU
X1BSSVZBVEUob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBXRUJLSVRf
VFlQRV9NRURJQV9DRU5DX0RFQ1JZUFQsIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5
cHRQcml2YXRlKSkKK3N0cnVjdCBfV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFBy
aXZhdGUgeworICAgIEdzdEV2ZW50KiBwcm90ZWN0aW9uRXZlbnQ7CisKKyAgICBib29sIGtleVJl
Y2VpdmVkOworICAgIExvY2sgbXV0ZXg7CisgICAgQ29uZGl0aW9uIGNvbmRpdGlvbjsKK307CisK
K3N0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiB3ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25E
ZWNyeXB0b3JDaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlv
bik7CitzdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JGaW5h
bGl6ZShHT2JqZWN0Kik7CitzdGF0aWMgR3N0Q2Fwcyogd2Via2l0TWVkaWFDb21tb25FbmNyeXB0
aW9uRGVjcnlwdFRyYW5zZm9ybUNhcHMoR3N0QmFzZVRyYW5zZm9ybSosIEdzdFBhZERpcmVjdGlv
biwgR3N0Q2FwcyosIEdzdENhcHMqKTsKK3N0YXRpYyBHc3RGbG93UmV0dXJuIHdlYmtpdE1lZGlh
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRUcmFuc2Zvcm1JblBsYWNlKEdzdEJhc2VUcmFuc2Zvcm0q
LCBHc3RCdWZmZXIqKTsKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRNZWRpYUNvbW1vbkVuY3J5cHRp
b25EZWNyeXB0U2lua0V2ZW50SGFuZGxlcihHc3RCYXNlVHJhbnNmb3JtKiwgR3N0RXZlbnQqKTsK
Kworc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHREZWZh
dWx0U2V0dXBDaXBoZXIoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCopOworc3Rh
dGljIHZvaWQgd2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdERlZmF1bHRSZWxlYXNl
Q2lwaGVyKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqKTsKKworR1NUX0RFQlVH
X0NBVEVHT1JZX1NUQVRJQyh3ZWJraXRfbWVkaWFfY29tbW9uX2VuY3J5cHRpb25fZGVjcnlwdF9k
ZWJ1Z19jYXRlZ29yeSk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfbWVkaWFfY29t
bW9uX2VuY3J5cHRpb25fZGVjcnlwdF9kZWJ1Z19jYXRlZ29yeQorCisjZGVmaW5lIHdlYmtpdF9t
ZWRpYV9jb21tb25fZW5jcnlwdGlvbl9kZWNyeXB0X3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MK
K0dfREVGSU5FX1RZUEUoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCwgd2Via2l0
X21lZGlhX2NvbW1vbl9lbmNyeXB0aW9uX2RlY3J5cHQsIEdTVF9UWVBFX0JBU0VfVFJBTlNGT1JN
KTsKKworc3RhdGljIHZvaWQgd2Via2l0X21lZGlhX2NvbW1vbl9lbmNyeXB0aW9uX2RlY3J5cHRf
Y2xhc3NfaW5pdChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MqIGtsYXNz
KQoreworICAgIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyogYmFzZVRyYW5zZm9ybUNsYXNzID0gR1NU
X0JBU0VfVFJBTlNGT1JNX0NMQVNTKGtsYXNzKTsKKyAgICBHc3RFbGVtZW50Q2xhc3MqIGVsZW1l
bnRDbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTKGtsYXNzKTsKKyAgICBHT2JqZWN0Q2xhc3MqIGdv
YmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKworICAgIGdvYmplY3RDbGFzcy0+
ZmluYWxpemUgPSB3ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JGaW5hbGl6ZTsK
KworICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF9tZWRpYV9jb21tb25fZW5jcnlw
dGlvbl9kZWNyeXB0X2RlYnVnX2NhdGVnb3J5LAorICAgICAgICAid2Via2l0Y2VuYyIsIDAsICJD
b21tb24gRW5jcnlwdGlvbiBiYXNlIGNsYXNzIik7CisKKyAgICBlbGVtZW50Q2xhc3MtPmNoYW5n
ZV9zdGF0ZSA9IEdTVF9ERUJVR19GVU5DUFRSKHdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHRvckNoYW5nZVN0YXRlKTsKKworICAgIGJhc2VUcmFuc2Zvcm1DbGFzcy0+dHJhbnNmb3Jt
X2lwID0gR1NUX0RFQlVHX0ZVTkNQVFIod2Via2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlw
dFRyYW5zZm9ybUluUGxhY2UpOworICAgIGJhc2VUcmFuc2Zvcm1DbGFzcy0+dHJhbnNmb3JtX2Nh
cHMgPSBHU1RfREVCVUdfRlVOQ1BUUih3ZWJraXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0
VHJhbnNmb3JtQ2Fwcyk7CisgICAgYmFzZVRyYW5zZm9ybUNsYXNzLT50cmFuc2Zvcm1faXBfb25f
cGFzc3Rocm91Z2ggPSBGQUxTRTsKKyAgICBiYXNlVHJhbnNmb3JtQ2xhc3MtPnNpbmtfZXZlbnQg
PSBHU1RfREVCVUdfRlVOQ1BUUih3ZWJraXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0U2lu
a0V2ZW50SGFuZGxlcik7CisKKyAgICBrbGFzcy0+c2V0dXBDaXBoZXIgPSBHU1RfREVCVUdfRlVO
Q1BUUih3ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0RGVmYXVsdFNldHVwQ2lwaGVy
KTsKKyAgICBrbGFzcy0+cmVsZWFzZUNpcGhlciA9IEdTVF9ERUJVR19GVU5DUFRSKHdlYktpdE1l
ZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHREZWZhdWx0UmVsZWFzZUNpcGhlcik7CisKKyAgICBn
X3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoa2xhc3MsIHNpemVvZihXZWJLaXRNZWRpYUNvbW1vbkVu
Y3J5cHRpb25EZWNyeXB0UHJpdmF0ZSkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfbWVkaWFf
Y29tbW9uX2VuY3J5cHRpb25fZGVjcnlwdF9pbml0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlv
bkRlY3J5cHQqIHNlbGYpCit7CisgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlw
dFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9QUklWQVRFKHNl
bGYpOworCisgICAgc2VsZi0+cHJpdiA9IHByaXY7CisgICAgbmV3IChwcml2KSBXZWJLaXRNZWRp
YUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJpdmF0ZSgpOworCisgICAgR3N0QmFzZVRyYW5zZm9y
bSogYmFzZSA9IEdTVF9CQVNFX1RSQU5TRk9STShzZWxmKTsKKyAgICBnc3RfYmFzZV90cmFuc2Zv
cm1fc2V0X2luX3BsYWNlKGJhc2UsIFRSVUUpOworICAgIGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRf
cGFzc3Rocm91Z2goYmFzZSwgRkFMU0UpOworICAgIGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfZ2Fw
X2F3YXJlKGJhc2UsIEZBTFNFKTsKK30KKworc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFDb21tb25F
bmNyeXB0aW9uRGVjcnlwdG9yRmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktp
dE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFfQ0VOQ19E
RUNSWVBUKG9iamVjdCk7CisgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFBy
aXZhdGUqIHByaXYgPSBzZWxmLT5wcml2OworCisgICAgcHJpdi0+fldlYktpdE1lZGlhQ29tbW9u
RW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlKCk7CisgICAgR1NUX0NBTExfUEFSRU5UKEdfT0JKRUNU
X0NMQVNTLCBmaW5hbGl6ZSwgKG9iamVjdCkpOworfQorCitzdGF0aWMgR3N0Q2Fwcyogd2Via2l0
TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFRyYW5zZm9ybUNhcHMoR3N0QmFzZVRyYW5zZm9y
bSogYmFzZSwgR3N0UGFkRGlyZWN0aW9uIGRpcmVjdGlvbiwgR3N0Q2FwcyogY2FwcywgR3N0Q2Fw
cyogZmlsdGVyKQoreworICAgIGlmIChkaXJlY3Rpb24gPT0gR1NUX1BBRF9VTktOT1dOKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEdzdENhcHMqIHRyYW5zZm9ybWVkQ2FwcyA9IGdz
dF9jYXBzX25ld19lbXB0eSgpOworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5
cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUKGJhc2UpOworICAgIFdlYktpdE1l
ZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzcyoga2xhc3MgPSBXRUJLSVRfTUVESUFfQ0VO
Q19ERUNSWVBUX0dFVF9DTEFTUyhzZWxmKTsKKworICAgIEdTVF9ERUJVR19PQkpFQ1QoYmFzZSwg
ImRpcmVjdGlvbjogJXMsIGNhcHM6ICUiIEdTVF9QVFJfRk9STUFUICIgZmlsdGVyOiAlIiBHU1Rf
UFRSX0ZPUk1BVCwgKGRpcmVjdGlvbiA9PSBHU1RfUEFEX1NSQykgPyAic3JjIiA6ICJzaW5rIiwg
Y2FwcywgZmlsdGVyKTsKKworICAgIHVuc2lnbmVkIHNpemUgPSBnc3RfY2Fwc19nZXRfc2l6ZShj
YXBzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAg
IEdzdFN0cnVjdHVyZSogaW4gPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlKGNhcHMsIGkpOworICAg
ICAgICBHc3RTdHJ1Y3R1cmUqIG91dCA9IG51bGxwdHI7CisKKyAgICAgICAgaWYgKGRpcmVjdGlv
biA9PSBHU1RfUEFEX1NJTkspIHsKKyAgICAgICAgICAgIGlmICghZ3N0X3N0cnVjdHVyZV9oYXNf
ZmllbGQoaW4sICJvcmlnaW5hbC1tZWRpYS10eXBlIikpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgICAgIG91dCA9IGdzdF9zdHJ1Y3R1cmVfY29weShpbik7CisgICAgICAg
ICAgICBnc3Rfc3RydWN0dXJlX3NldF9uYW1lKG91dCwgZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5n
KG91dCwgIm9yaWdpbmFsLW1lZGlhLXR5cGUiKSk7CisKKyAgICAgICAgICAgIC8vIEZpbHRlciBv
dXQgdGhlIERSTSByZWxhdGVkIGZpZWxkcyBmcm9tIHRoZSBkb3duLXN0cmVhbSBjYXBzLgorICAg
ICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBnc3Rfc3RydWN0dXJlX25fZmllbGRzKGluKTsg
KytqKSB7CisgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIqIGZpZWxkTmFtZSA9IGdzdF9zdHJ1
Y3R1cmVfbnRoX2ZpZWxkX25hbWUoaW4sIGopOworCisgICAgICAgICAgICAgICAgaWYgKGdfc3Ry
X2hhc19wcmVmaXgoZmllbGROYW1lLCAicHJvdGVjdGlvbi1zeXN0ZW0iKQorICAgICAgICAgICAg
ICAgICAgICB8fCBnX3N0cl9oYXNfcHJlZml4KGZpZWxkTmFtZSwgIm9yaWdpbmFsLW1lZGlhLXR5
cGUiKSkKKyAgICAgICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQob3V0
LCBmaWVsZE5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgR3N0U3RydWN0dXJlKiB0bXAgPSBnc3Rfc3RydWN0dXJlX2NvcHkoaW4pOworICAgICAgICAg
ICAgLy8gRmlsdGVyIG91dCB0aGUgdmlkZW8gcmVsYXRlZCBmaWVsZHMgZnJvbSB0aGUgdXAtc3Ry
ZWFtIGNhcHMsCisgICAgICAgICAgICAvLyBiZWNhdXNlIHRoZXkgYXJlIG5vdCByZWxldmFudCB0
byB0aGUgaW5wdXQgY2FwcyBvZiB0aGlzIGVsZW1lbnQgYW5kCisgICAgICAgICAgICAvLyBjYW4g
Y2F1c2UgY2FwcyBuZWdvdGlhdGlvbiBmYWlsdXJlcyB3aXRoIGFkYXB0aXZlIGJpdHJhdGUgc3Ry
ZWFtcy4KKyAgICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gZ3N0X3N0cnVjdHVyZV9uX2ZpZWxk
cyh0bXApIC0gMTsgaW5kZXggPj0gMDsgLS1pbmRleCkgeworICAgICAgICAgICAgICAgIGNvbnN0
IGdjaGFyKiBmaWVsZE5hbWUgPSBnc3Rfc3RydWN0dXJlX250aF9maWVsZF9uYW1lKHRtcCwgaW5k
ZXgpOworICAgICAgICAgICAgICAgIEdTVF9UUkFDRSgiQ2hlY2sgZmllbGQgXCIlc1wiIGZvciBy
ZW1vdmFsIiwgZmllbGROYW1lKTsKKworICAgICAgICAgICAgICAgIGlmICghZ19zdHJjbXAwKGZp
ZWxkTmFtZSwgImJhc2UtcHJvZmlsZSIpCisgICAgICAgICAgICAgICAgICAgIHx8ICFnX3N0cmNt
cDAoZmllbGROYW1lLCAiY29kZWNfZGF0YSIpCisgICAgICAgICAgICAgICAgICAgIHx8ICFnX3N0
cmNtcDAoZmllbGROYW1lLCAiaGVpZ2h0IikKKyAgICAgICAgICAgICAgICAgICAgfHwgIWdfc3Ry
Y21wMChmaWVsZE5hbWUsICJmcmFtZXJhdGUiKQorICAgICAgICAgICAgICAgICAgICB8fCAhZ19z
dHJjbXAwKGZpZWxkTmFtZSwgImxldmVsIikKKyAgICAgICAgICAgICAgICAgICAgfHwgIWdfc3Ry
Y21wMChmaWVsZE5hbWUsICJwaXhlbC1hc3BlY3QtcmF0aW8iKQorICAgICAgICAgICAgICAgICAg
ICB8fCAhZ19zdHJjbXAwKGZpZWxkTmFtZSwgInByb2ZpbGUiKQorICAgICAgICAgICAgICAgICAg
ICB8fCAhZ19zdHJjbXAwKGZpZWxkTmFtZSwgInJhdGUiKQorICAgICAgICAgICAgICAgICAgICB8
fCAhZ19zdHJjbXAwKGZpZWxkTmFtZSwgIndpZHRoIikpIHsKKyAgICAgICAgICAgICAgICAgICAg
Z3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQodG1wLCBmaWVsZE5hbWUpOworICAgICAgICAgICAg
ICAgICAgICBHU1RfVFJBQ0UoIlJlbW92aW5nIGZpZWxkICVzIiwgZmllbGROYW1lKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG91dCA9IGdzdF9zdHJ1
Y3R1cmVfY29weSh0bXApOworICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQob3V0LCAicHJv
dGVjdGlvbi1zeXN0ZW0iLCBHX1RZUEVfU1RSSU5HLCBrbGFzcy0+cHJvdGVjdGlvblN5c3RlbUlk
LAorICAgICAgICAgICAgICAgICJvcmlnaW5hbC1tZWRpYS10eXBlIiwgR19UWVBFX1NUUklORywg
Z3N0X3N0cnVjdHVyZV9nZXRfbmFtZShpbiksIG51bGxwdHIpOworCisgICAgICAgICAgICBnc3Rf
c3RydWN0dXJlX3NldF9uYW1lKG91dCwgImFwcGxpY2F0aW9uL3gtY2VuYyIpOworICAgICAgICAg
ICAgZ3N0X3N0cnVjdHVyZV9mcmVlKHRtcCk7CisgICAgICAgIH0KKworICAgICAgICBib29sIGR1
cGxpY2F0ZSA9IGZhbHNlOworICAgICAgICB1bnNpZ25lZCBzaXplID0gZ3N0X2NhcHNfZ2V0X3Np
emUodHJhbnNmb3JtZWRDYXBzKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsg
IWR1cGxpY2F0ZSAmJiBpbmRleCA8IHNpemU7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIEdzdFN0
cnVjdHVyZSogcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUodHJhbnNmb3JtZWRDYXBzLCBpbmRl
eCk7CisgICAgICAgICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9pc19lcXVhbChzLCBvdXQpKQorICAg
ICAgICAgICAgICAgIGR1cGxpY2F0ZSA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
IWR1cGxpY2F0ZSkKKyAgICAgICAgICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmUodHJhbnNm
b3JtZWRDYXBzLCBvdXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBnc3Rfc3RydWN0dXJl
X2ZyZWUob3V0KTsKKyAgICB9CisKKyAgICBpZiAoZmlsdGVyKSB7CisgICAgICAgIEdzdENhcHMq
IGludGVyc2VjdGlvbjsKKworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKGJhc2UsICJVc2luZyBm
aWx0ZXIgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwgZmlsdGVyKTsKKyAgICAgICAgaW50ZXJzZWN0
aW9uID0gZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwodHJhbnNmb3JtZWRDYXBzLCBmaWx0ZXIsIEdT
VF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7CisgICAgICAgIGdzdF9jYXBzX3VucmVmKHRyYW5zZm9y
bWVkQ2Fwcyk7CisgICAgICAgIHRyYW5zZm9ybWVkQ2FwcyA9IGludGVyc2VjdGlvbjsKKyAgICB9
CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKGJhc2UsICJyZXR1cm5pbmcgJSIgR1NUX1BUUl9GT1JN
QVQsIHRyYW5zZm9ybWVkQ2Fwcyk7CisgICAgcmV0dXJuIHRyYW5zZm9ybWVkQ2FwczsKK30KKwor
c3RhdGljIEdzdEZsb3dSZXR1cm4gd2Via2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFRy
YW5zZm9ybUluUGxhY2UoR3N0QmFzZVRyYW5zZm9ybSogYmFzZSwgR3N0QnVmZmVyKiBidWZmZXIp
Cit7CisgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiA9IFdFQktJ
VF9NRURJQV9DRU5DX0RFQ1JZUFQoYmFzZSk7CisgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0
aW9uRGVjcnlwdENsYXNzKiBrbGFzcyA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX0NM
QVNTKHNlbGYpOworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRl
KiBwcml2ID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfUFJJVkFURShzZWxmKTsKKyAg
ICBndWludCBzdWJTYW1wbGVDb3VudCwgaXZTaXplOworICAgIGdib29sZWFuIGVuY3J5cHRlZDsK
KyAgICBjb25zdCBHVmFsdWUqIHZhbHVlOworICAgIEdzdEJ1ZmZlciogaXZCdWZmZXIgPSBudWxs
cHRyOworICAgIEdzdEJ1ZmZlciogc3ViU2FtcGxlc0J1ZmZlciA9IG51bGxwdHI7CisgICAgR3N0
UHJvdGVjdGlvbk1ldGEqIHByb3RlY3Rpb25NZXRhOworCisgICAgTG9ja0hvbGRlciBsb2NrZXIo
cHJpdi0+bXV0ZXgpOworCisgICAgLy8gVGhlIGtleSBtaWdodCBub3QgaGF2ZSBiZWVuIHJlY2Vp
dmVkIHlldC4gV2FpdCBmb3IgaXQuCisgICAgaWYgKCFwcml2LT5rZXlSZWNlaXZlZCkKKyAgICAg
ICAgcHJpdi0+Y29uZGl0aW9uLndhaXQocHJpdi0+bXV0ZXgpOworCisgICAgcHJvdGVjdGlvbk1l
dGEgPSByZWludGVycHJldF9jYXN0PEdzdFByb3RlY3Rpb25NZXRhKj4oZ3N0X2J1ZmZlcl9nZXRf
cHJvdGVjdGlvbl9tZXRhKGJ1ZmZlcikpOworICAgIGlmICghcHJvdGVjdGlvbk1ldGEpIHsKKyAg
ICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBHc3RQcm90ZWN0aW9u
IG1ldGFkYXRhIGZyb20gYnVmZmVyICVwIiwgYnVmZmVyKTsKKyAgICAgICAgcmV0dXJuIEdTVF9G
TE9XX05PVF9TVVBQT1JURUQ7CisgICAgfQorCisgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF91
aW50KHByb3RlY3Rpb25NZXRhLT5pbmZvLCAiaXZfc2l6ZSIsICZpdlNpemUpKSB7CisgICAgICAg
IEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQgaXZfc2l6ZSIpOworICAgICAg
ICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRh
Kj4ocHJvdGVjdGlvbk1ldGEpKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JU
RUQ7CisgICAgfQorCisgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9ib29sZWFuKHByb3RlY3Rp
b25NZXRhLT5pbmZvLCAiZW5jcnlwdGVkIiwgJmVuY3J5cHRlZCkpIHsKKyAgICAgICAgR1NUX0VS
Uk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBlbmNyeXB0ZWQgZmxhZyIpOworICAgICAg
ICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRh
Kj4ocHJvdGVjdGlvbk1ldGEpKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JU
RUQ7CisgICAgfQorCisgICAgaWYgKCFpdlNpemUgfHwgIWVuY3J5cHRlZCkgeworICAgICAgICBn
c3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4o
cHJvdGVjdGlvbk1ldGEpKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOworICAgIH0KKwor
ICAgIEdTVF9ERUJVR19PQkpFQ1QoYmFzZSwgInByb3RlY3Rpb24gbWV0YTogJSIgR1NUX1BUUl9G
T1JNQVQsIHByb3RlY3Rpb25NZXRhLT5pbmZvKTsKKyAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0
X3VpbnQocHJvdGVjdGlvbk1ldGEtPmluZm8sICJzdWJzYW1wbGVfY291bnQiLCAmc3ViU2FtcGxl
Q291bnQpKSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQg
c3Vic2FtcGxlX2NvdW50Iik7CisgICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVy
LCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOworICAgICAgICBy
ZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKKyAgICB9CisKKyAgICBpZiAoc3ViU2FtcGxl
Q291bnQpIHsKKyAgICAgICAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShwcm90ZWN0
aW9uTWV0YS0+aW5mbywgInN1YnNhbXBsZXMiKTsKKyAgICAgICAgaWYgKCF2YWx1ZSkgeworICAg
ICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBzdWJzYW1wbGVz
Iik7CisgICAgICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnBy
ZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKKyAgICAgICAgICAgIHJldHVybiBH
U1RfRkxPV19OT1RfU1VQUE9SVEVEOworICAgICAgICB9CisgICAgICAgIHN1YlNhbXBsZXNCdWZm
ZXIgPSBnc3RfdmFsdWVfZ2V0X2J1ZmZlcih2YWx1ZSk7CisgICAgfQorCisgICAgaWYgKCFrbGFz
cy0+c2V0dXBDaXBoZXIoc2VsZikpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAi
RmFpbGVkIHRvIGNvbmZpZ3VyZSBjaXBoZXIiKTsKKyAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVf
bWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7
CisgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOworICAgIH0KKworICAgIHZh
bHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUocHJvdGVjdGlvbk1ldGEtPmluZm8sICJpdiIp
OworICAgIGlmICghdmFsdWUpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFp
bGVkIHRvIGdldCBJViBmb3Igc2FtcGxlIik7CisgICAgICAgIGtsYXNzLT5yZWxlYXNlQ2lwaGVy
KHNlbGYpOworICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnBy
ZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKKyAgICAgICAgcmV0dXJuIEdTVF9G
TE9XX05PVF9TVVBQT1JURUQ7CisgICAgfQorCisgICAgaXZCdWZmZXIgPSBnc3RfdmFsdWVfZ2V0
X2J1ZmZlcih2YWx1ZSk7CisgICAgaWYgKCFrbGFzcy0+ZGVjcnlwdChzZWxmLCBpdkJ1ZmZlciwg
YnVmZmVyLCBzdWJTYW1wbGVDb3VudCwgc3ViU2FtcGxlc0J1ZmZlcikpIHsKKyAgICAgICAgR1NU
X0VSUk9SX09CSkVDVChzZWxmLCAiRGVjcnlwdGlvbiBmYWlsZWQiKTsKKyAgICAgICAga2xhc3Mt
PnJlbGVhc2VDaXBoZXIoc2VsZik7CisgICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVm
ZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOworICAgICAg
ICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKKyAgICB9CisKKyAgICBrbGFzcy0+cmVs
ZWFzZUNpcGhlcihzZWxmKTsKKyAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVp
bnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKKyAgICByZXR1cm4gR1NU
X0ZMT1dfT0s7Cit9CisKKworc3RhdGljIGdib29sZWFuIHdlYmtpdE1lZGlhQ29tbW9uRW5jcnlw
dGlvbkRlY3J5cHRTaW5rRXZlbnRIYW5kbGVyKEdzdEJhc2VUcmFuc2Zvcm0qIHRyYW5zLCBHc3RF
dmVudCogZXZlbnQpCit7CisgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCog
c2VsZiA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFQodHJhbnMpOworICAgIFdlYktpdE1lZGlh
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NFTkNf
REVDUllQVF9HRVRfUFJJVkFURShzZWxmKTsKKyAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRp
b25EZWNyeXB0Q2xhc3MqIGtsYXNzID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfQ0xB
U1Moc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7CisKKyAgICBzd2l0Y2ggKEdT
VF9FVkVOVF9UWVBFKGV2ZW50KSkgeworICAgIGNhc2UgR1NUX0VWRU5UX1BST1RFQ1RJT046IHsK
KyAgICAgICAgY29uc3QgY2hhciogc3lzdGVtSWQ7CisgICAgICAgIGNvbnN0IGNoYXIqIG9yaWdp
bjsKKyAgICAgICAgR3N0QnVmZmVyKiBpbml0RGF0YUJ1ZmZlcjsKKworICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKHNlbGYsICJyZWNlaXZlZCBwcm90ZWN0aW9uIGV2ZW50Iik7CisgICAgICAgIGdz
dF9ldmVudF9wYXJzZV9wcm90ZWN0aW9uKGV2ZW50LCAmc3lzdGVtSWQsICZpbml0RGF0YUJ1ZmZl
ciwgJm9yaWdpbik7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgInN5c3RlbUlkOiAl
cyIsIHN5c3RlbUlkKTsKKworICAgICAgICBpZiAoIWdfc3RyX2VxdWFsKHN5c3RlbUlkLCBrbGFz
cy0+cHJvdGVjdGlvblN5c3RlbUlkKSkgeworICAgICAgICAgICAgZ3N0X2V2ZW50X3VucmVmKGV2
ZW50KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IFRSVUU7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIEtlZXAgdGhlIGV2ZW50IHJlZiBhcm91bmQgc28gdGhhdCB0
aGUgcGFyc2VkIGV2ZW50IGRhdGEKKyAgICAgICAgLy8gcmVtYWlucyB2YWxpZCB1bnRpbCB0aGUg
ZHJtLWtleS1uZWVkIG1lc3NhZ2UgaGFzIGJlZW4gc2VudC4KKyAgICAgICAgcHJpdi0+cHJvdGVj
dGlvbkV2ZW50ID0gZXZlbnQ7CisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc2Vs
ZiwgaW5pdERhdGFCdWZmZXJdIHsKKyAgICAgICAgICAgIGlmIChzZWxmKSB7CisgICAgICAgICAg
ICAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdENsYXNzKiBrbGFzcyA9IFdF
QktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX0NMQVNTKHNlbGYpOworICAgICAgICAgICAgICAg
IGtsYXNzLT5yZXF1ZXN0RGVjcnlwdGlvbktleShzZWxmLCBpbml0RGF0YUJ1ZmZlcik7CisgICAg
ICAgICAgICAgICAgaWYgKHNlbGYtPnByaXYtPnByb3RlY3Rpb25FdmVudCkgeworICAgICAgICAg
ICAgICAgICAgICBnc3RfZXZlbnRfdW5yZWYoc2VsZi0+cHJpdi0+cHJvdGVjdGlvbkV2ZW50KTsK
KyAgICAgICAgICAgICAgICAgICAgc2VsZi0+cHJpdi0+cHJvdGVjdGlvbkV2ZW50ID0gbnVsbHB0
cjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9fSk7CisKKyAgICAgICAgcmVzdWx0
ID0gVFJVRTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR1NUX0VWRU5UX0NVU1RP
TV9ET1dOU1RSRUFNX09PQjogeworICAgICAgICBpZiAoa2xhc3MtPmhhbmRsZUtleVJlc3BvbnNl
KHNlbGYsIGV2ZW50KSkgeworICAgICAgICAgICAgcHJpdi0+a2V5UmVjZWl2ZWQgPSB0cnVlOwor
ICAgICAgICAgICAgcHJpdi0+Y29uZGl0aW9uLm5vdGlmeU9uZSgpOworICAgICAgICB9CisKKyAg
ICAgICAgZ3N0X2V2ZW50X3VucmVmKGV2ZW50KTsKKyAgICAgICAgcmVzdWx0ID0gVFJVRTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIHJlc3VsdCA9IEdTVF9C
QVNFX1RSQU5TRk9STV9DTEFTUyhwYXJlbnRfY2xhc3MpLT5zaW5rX2V2ZW50KHRyYW5zLCBldmVu
dCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0
YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiB3ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNy
eXB0b3JDaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFu
c2l0aW9uKQoreworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYg
PSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUKGVsZW1lbnQpOworICAgIFdlYktpdE1lZGlhQ29t
bW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NFTkNfREVD
UllQVF9HRVRfUFJJVkFURShzZWxmKTsKKyAgICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQgPSBH
U1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M7CisKKyAgICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKKyAg
ICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgorICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKHNlbGYsICJQQVVTRUQtPlJFQURZIik7CisgICAgICAgIHByaXYtPmNvbmRpdGlv
bi5ub3RpZnlPbmUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgcmV0ID0gR1NUX0VMRU1FTlRfQ0xBU1MocGFyZW50X2NsYXNzKS0+
Y2hhbmdlX3N0YXRlKGVsZW1lbnQsIHRyYW5zaXRpb24pOworCisgICAgLy8gQWRkIHBvc3QtdHJh
bnNpdGlvbiBjb2RlIGhlcmUuCisKKyAgICByZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyBnYm9v
bGVhbiB3ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0RGVmYXVsdFNldHVwQ2lwaGVy
KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqKQoreworICAgIHJldHVybiB0cnVl
OworfQorCisKK3N0YXRpYyB2b2lkIHdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRE
ZWZhdWx0UmVsZWFzZUNpcGhlcihXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KikK
K3sKK30KKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0Q29t
bW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjI0MGJhNGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRv
ckdTdHJlYW1lci5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qIEdTdHJlYW1lciBDbGVhcktleSBjb21t
b24gZW5jcnlwdGlvbiBkZWNyeXB0b3IKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlh
IFMuTAorICogQ29weXJpZ2h0IChDKSAyMDE2IE1ldHJvbG9naWNhbAorICogQ29weXJpZ2h0IChD
KSAyMDEzIFlvdVZpZXcgVFYgTHRkLiA8YWxleC5hc2hsZXlAeW91dmlldy5jb20+CisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9y
R1N0cmVhbWVyX2gKKyNkZWZpbmUgV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJl
YW1lcl9oCisKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBVU0UoR1NUUkVBTUVSKQor
CisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zv
cm0uaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX01FRElBX0NFTkNf
REVDUllQVCAgICAgICAgICAod2Via2l0X21lZGlhX2NvbW1vbl9lbmNyeXB0aW9uX2RlY3J5cHRf
Z2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX01FRElBX0NFTkNfREVDUllQVChvYmopICAgICAg
ICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfTUVESUFf
Q0VOQ19ERUNSWVBULCBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KSkKKyNkZWZp
bmUgV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9DTEFTUyhrbGFzcykgIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfQ0FTVCgoa2xhc3MpLCBXRUJLSVRfVFlQRV9NRURJQV9DRU5DX0RFQ1JZUFQsIFdlYktp
dE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzcykpCisjZGVmaW5lIFdFQktJVF9NRURJ
QV9DRU5DX0RFQ1JZUFRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNT
KChvYmopLCBXRUJLSVRfVFlQRV9NRURJQV9DRU5DX0RFQ1JZUFQsIFdlYktpdE1lZGlhQ29tbW9u
RW5jcnlwdGlvbkRlY3J5cHRDbGFzcykpCisKKyNkZWZpbmUgV0VCS0lUX0lTX01FRElBX0NFTkNf
REVDUllQVChvYmopICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VC
S0lUX1RZUEVfTUVESUFfQ0VOQ19ERUNSWVBUKSkKKyNkZWZpbmUgV0VCS0lUX0lTX01FRElBX0NF
TkNfREVDUllQVF9DTEFTUyhvYmopIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCBX
RUJLSVRfVFlQRV9NRURJQV9DRU5DX0RFQ1JZUFQpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCAgICAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNy
eXB0aW9uRGVjcnlwdDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRp
b25EZWNyeXB0Q2xhc3MgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3M7
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZh
dGUgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGU7CisKK0dUeXBlIHdl
YmtpdF9tZWRpYV9jb21tb25fZW5jcnlwdGlvbl9kZWNyeXB0X2dldF90eXBlKHZvaWQpOworCitz
dHJ1Y3QgX1dlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQgeworICAgIEdzdEJhc2VU
cmFuc2Zvcm0gcGFyZW50OworCisgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlw
dFByaXZhdGUqIHByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlv
bkRlY3J5cHRDbGFzcyB7CisgICAgR3N0QmFzZVRyYW5zZm9ybUNsYXNzIHBhcmVudENsYXNzOwor
CisgICAgY29uc3QgY2hhciogcHJvdGVjdGlvblN5c3RlbUlkOworICAgIHZvaWQgKCpyZXF1ZXN0
RGVjcnlwdGlvbktleSkgKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqLCBHc3RC
dWZmZXIqIGluaXREYXRhKTsKKyAgICBnYm9vbGVhbiAoKmhhbmRsZUtleVJlc3BvbnNlKSAoV2Vi
S2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCosIEdzdEV2ZW50KiBldmVudCk7CisgICAg
Z2Jvb2xlYW4gKCpzZXR1cENpcGhlcikgKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5
cHQqKTsKKyAgICBnYm9vbGVhbiAoKmRlY3J5cHQpIChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRp
b25EZWNyeXB0KiwgR3N0QnVmZmVyKiBpdkJ1ZmZlciwgR3N0QnVmZmVyKiBidWZmZXIsIHVuc2ln
bmVkIHN1YlNhbXBsZXNDb3VudCwgR3N0QnVmZmVyKiBzdWJTYW1wbGVzQnVmZmVyKTsKKyAgICB2
b2lkICgqcmVsZWFzZUNpcGhlcikgKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQq
KTsKK307CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtl
CmluZGV4IGMzNWIxZTEuLmZkYWZlY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25z
R1RLLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCkBAIC0xMzMsNiAr
MTMzLDcgQEAgZW5kaWYgKCkKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJM
RV9BQ0NFTEVSQVRFRF8yRF9DQU5WQVMgUFVCTElDIE9GRikKIFdFQktJVF9PUFRJT05fREVGQVVM
VF9QT1JUX1ZBTFVFKEVOQUJMRV9DUkVERU5USUFMX1NUT1JBR0UgUFVCTElDIE9OKQogV0VCS0lU
X09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0RSQUdfU1VQUE9SVCBQVUJMSUMgT04p
CitXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfRU5DUllQVEVEX01FRElB
IFBVQkxJQyBPRkYpCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfR0VP
TE9DQVRJT04gUFVCTElDIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5B
QkxFX0lDT05EQVRBQkFTRSBQVUJMSUMgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9W
QUxVRShFTkFCTEVfSklUIFBVQkxJQyBPTikKQEAgLTM3NSw2ICszNzYsMTQgQEAgaWYgKEVOQUJM
RV9WSURFTyBPUiBFTkFCTEVfV0VCX0FVRElPKQogICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxE
KFVTRV9HU1RSRUFNRVIgVFJVRSkKIGVuZGlmICgpCiAKK2lmIChFTkFCTEVfRU5DUllQVEVEX01F
RElBKQorCisgICAgaWYgKFBDX0dTVFJFQU1FUl9WRVJTSU9OIFZFUlNJT05fTEVTUyAxLjYuMSkK
KyAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiR1N0cmVhbWVyIDEuNiBpcyByZXF1aXJlZCB0
byB1c2UgRU5BQkxFX0VOQ1JZUFRFRF9NRURJQSIpCisgICAgZW5kaWYgKCkKKyAgICBmaW5kX3Bh
Y2thZ2UoTGliR2NyeXB0IFJFUVVJUkVEKQorZW5kaWYgKCkKKwogaWYgKEVOQUJMRV9RVUFSVFpf
VEFSR0VUKQogICAgIGlmIChOT1QgR1RLM19TVVBQT1JUU19RVUFSVFopCiAgICAgICAgIG1lc3Nh
Z2UoRkFUQUxfRVJST1IgIlJlY29tcGlsZSBHVEsrIHdpdGggUXVhcnR6IGJhY2tlbmQgdG8gdXNl
IEVOQUJMRV9RVUFSVFpfVEFSR0VUIikKLS0gCjIuNy4w
</data>
<flag name="review"
          id="296156"
          type_id="1"
          status="-"
          setter="mcatanzaro"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272313</attachid>
            <date>2016-02-26 00:36:17 -0800</date>
            <delta_ts>2016-02-26 00:58:57 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>51078</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSA0ZGYwM2M4ZTA4OTVhYWJmZWNiM2QyM2JjNjEyMjc5YWYyNGY5OGIwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBNb24sIDE1IEZlYiAyMDE2IDEwOjQ3OjUwICswMTAwClN1YmplY3Q6IFtQQVRDSF0g
cGF0Y2gKCi0tLQogQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgMTIgKwogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgODAgKysrKysKIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlICAg
ICAgICAgICAgICAgICAgIHwgIDE0ICsKIC4uLi9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyLmNwcCAgICAgIHwgIDIxICstCiAuLi4vZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2UuY3BwICB8IDExMCArKysrKy0KIC4uLi9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oICAgIHwgIDEyICsKIC4uLi9nc3RyZWFtZXIvV2Vi
S2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwIHwgMjU3ICsrKysrKysrKysrKysrCiAu
Li4vZ3N0cmVhbWVyL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmggICB8ICA1NSAr
KysKIC4uLi9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcCAgIHwg
MzcyICsrKysrKysrKysrKysrKysrKysrKwogLi4uL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNy
eXB0b3JHU3RyZWFtZXIuaCAgICAgfCAgNjYgKysrKwogU291cmNlL2NtYWtlL09wdGlvbnNHVEsu
Y21ha2UgICAgICAgICAgICAgICAgICAgICAgfCAgIDggKwogMTEgZmlsZXMgY2hhbmdlZCwgMTAw
NCBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRDbGVhcktleURlY3J5
cHRvckdTdHJlYW1lci5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIu
aAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmgKCmRpZmYgLS1naXQg
YS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggYTVhZWE2MC4uODg5ZGUzNiAxMDA2NDQKLS0t
IGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE2LTAyLTE1
ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RL
XVtHU3RyZWFtZXJdIENsZWFyS2V5IEVNRSB2MSBkZWNyeXB0aW9uIHN1cHBvcnQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDIzNQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU291cmNlL2NtYWtlL0Zp
bmRMaWJHY3J5cHQuY21ha2U6IEFkZGVkLgorICAgICAgICAqIFNvdXJjZS9jbWFrZS9PcHRpb25z
R1RLLmNtYWtlOiBOZXcgcHVibGljIG9wdGlvbiBmb3IKKyAgICAgICAgRU5DUllQVEVEX01FRElB
LCBvZmYgYnkgZGVmYXVsdC4gVGhpcyByZXF1aXJlcyBHU3RyZWFtZXIgMS42Lnggb3IKKyAgICAg
ICAgYWJvdmUgYW5kIGxpYmdjcnlwdC4KKwogMjAxNi0wMi0yNSAgTXlsZXMgQy4gTWF4ZmllbGQg
IDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIFtXaW5dIFtTVkcgLT4gT1RGIENvbnZl
cnRlcl0gU3VwcG9ydCB0aGUgU1ZHIC0+IE9URiBGb250IENvbnZlcnRlcgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IGRkNDYyYTguLjQ5ZWQzNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4MyBAQAorMjAxNi0wMi0x
NSAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dU
S11bR1N0cmVhbWVyXSBDbGVhcktleSBFTUUgdjEgZGVjcnlwdGlvbiBzdXBwb3J0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQyMzUKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGludHJv
ZHVjZXMgYSBuZXcgR1N0cmVhbWVyIGJhc2UgY2xhc3MgKGl0c2VsZgorICAgICAgICBpbmhlcml0
aW5nIGZyb20gYmFzZXRyYW5zZm9ybSkgdGhhdCBwcm92aWRlcyBDb21tb24gRW5jcnlwdGlvbgor
ICAgICAgICBkZWNyeXB0aW9uIHN1cHBvcnQgZm9yIElTTyBiYXNlIG1lZGlhIGZpbGUgZm9ybWF0
LiBBIENsZWFyS2V5CisgICAgICAgIGRlY3J5cHRvciB1c2luZyB0aGlzIGJhc2UgY2xhc3MgaXMg
YWxzbyBwcm92aWRlZCBhcyBhIHByb29mIG9mCisgICAgICAgIGNvbmNlcHQuCisKKyAgICAgICAg
V2hlbiB0aGUgR1N0cmVhbWVyIGRlbXV4ZXIgZGV0ZWN0cyB0aGUgcHJlc2VuY2Ugb2YgcHJvdGVj
dGVkCisgICAgICAgIGNvbnRlbnQsIHRoaXMgaW5mb3JtYXRpb24gaXMgYnJvYWRjYXN0ZWQgdG8g
dGhlIHJlc3Qgb2YgdGhlCisgICAgICAgIHBpcGVsaW5lIGFuZCB0aGUgZGVjb2RlciBhdHRlbXB0
cyB0byBjcmVhdGUgYSBkZWNyeXB0b3IgZWxlbWVudAorICAgICAgICBhYmxlIHRvIGhhbmRsZSB0
aGlzIHByb3RlY3RlZCBjb250ZW50LiBJbiB0aGlzIHNjZW5hcmlvIHRoZSBtZWRpYQorICAgICAg
ICBwbGF5ZXIgcmVjZWl2ZXMgYSBtZXNzYWdlIGZyb20gdGhlIGRlY3J5cHRvciBhbmQgdHJpZ2dl
cnMga2V5CisgICAgICAgIG5lZ290aWF0aW9uLiBBZnRlciB0aGUgZGVjcnlwdGlvbiBrZXkgd2Fz
IGFjcXVpcmVkIGl0IGlzIHBhc3NlZAorICAgICAgICBiYWNrIG9uIHRvIHRoZSBkZWNyeXB0b3Ig
dXNpbmcgYW4gT09CIGRvd25zdHJlYW0gR1N0cmVhbWVyIGV2ZW50CisgICAgICAgIGFuZCB0aGUg
ZGVjcnlwdG9yIGNhbiBvcGVyYXRlIGZyb20gdGhhdCBwb2ludC4KKworICAgICAgICBUaGVyZSBh
cmUgbm8gbGF5b3V0IHRlc3RzIHVuc2tpcHBlZCBiZWNhdXNlIHRoaXMgZmVhdHVyZSBpcworICAg
ICAgICBkaXNhYmxlZCBieSBkZWZhdWx0LgorCisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6
IEFkZCBuZXcgZmlsZXMgdG8gdGhlIGJ1aWxkIGlmIEVOQ1JZUFRFRF9NRURJQSBpcyBlbmFibGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5pdGlhbGl6ZUdTdHJlYW1lckFu
ZFJlZ2lzdGVyV2ViS2l0RWxlbWVudHMpOiBSZWdpc3RlciBkZWNyeXB0b3IocykgaGVyZS4KKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9ydHNUeXBl
KTogSG9vayBvbiB0byBleHRlbmRlZFN1cHBvcnRzVHlwZSAoc2VlIGJlbG93KSwKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZWdpc3RlcldlYktpdEdTdHJlYW1lckVsZW1l
bnRzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6
OmhhbmRsZVN5bmNNZXNzYWdlKToKKyAgICAgICAgSGFuZGxlIGRybS1rZXktbmVlZGVkIG1lc3Nh
Z2VzIGNvbWluZyBmcm9tIGRlY3J5cHRvcnMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJCYXNlOjpzdXBwb3J0c0tleVN5c3RlbSk6IFdlIGNhbiBub3cgaGFu
ZGxlIENsZWFyS2V5LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyQmFzZTo6ZGlzcGF0Y2hEZWNyeXB0aW9uS2V5KToKKyAgICAgICAgVGhpcyBpcyBjYWxsZWQg
YWZ0ZXIgdGhlIGRlY3J5cHRpb24ga2V5IHdhcyBhY3F1aXJlZC4KKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmFkZEtleSk6IEJhc2ljIGltcGxlbWVu
dGF0aW9uIG9mIEVNRSB2MQorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyQmFzZTo6Z2VuZXJhdGVLZXlSZXF1ZXN0KTogRGl0dG8KKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmNhbmNlbEtleVJlcXVlc3QpOiBEaXR0
bworICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6bmVl
ZEtleSk6IERpdHRvCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJCYXNlOjpleHRlbmRlZFN1cHBvcnRzVHlwZSk6IEhvb2sgb24gdG8gc3VwcG9ydHNLZXlTeXN0
ZW0uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwOiBBZGRlZC4KKyAgICAgICAg
KHdlYmtpdF9tZWRpYV9jbGVhcl9rZXlfZGVjcnlwdF9jbGFzc19pbml0KToKKyAgICAgICAgKHdl
YmtpdF9tZWRpYV9jbGVhcl9rZXlfZGVjcnlwdF9pbml0KToKKyAgICAgICAgKHdlYktpdE1lZGlh
Q2xlYXJLZXlEZWNyeXB0b3JGaW5hbGl6ZSk6CisgICAgICAgICh3ZWJLaXRNZWRpYUNsZWFyS2V5
RGVjcnlwdG9yUmVxdWVzdERlY3J5cHRpb25LZXkpOiBNZXRob2QgdXNlZCB0bworICAgICAgICB0
cmlnZ2VyIGtleSBuZWdvdGlhdGlvbiwgdXN1YWxseSB0aGlzIHdvdWxkIHNlbmQgYSBkcm0ta2V5
LW5lZWRlZAorICAgICAgICBtZXNzYWdlIG9uIHRoZSBidXMuCisgICAgICAgICh3ZWJLaXRNZWRp
YUNsZWFyS2V5RGVjcnlwdG9ySGFuZGxlS2V5UmVzcG9uc2UpOiBNZXRob2QgdXNlZCB0bworICAg
ICAgICBzYXZlIHRoZSBkZWNyeXB0aW9uIGtleSBvciBzZXNzaW9uIGRhdGEgcmVxdWlyZWQgdG8g
cGVyZm9ybQorICAgICAgICBjb250ZW50IGRlY3J5cHRpb24uCisgICAgICAgICh3ZWJLaXRNZWRp
YUNsZWFyS2V5RGVjcnlwdG9yU2V0dXBDaXBoZXIpOiBNZXRob2QgY2FsbGVkIGV2ZXJ5CisgICAg
ICAgIHRpbWUgYSBidWZmZXIgbmVlZHMgdG8gYmUgZGVjcnlwdGVkLgorICAgICAgICAod2ViS2l0
TWVkaWFDbGVhcktleURlY3J5cHRvckRlY3J5cHQpOiBBY3R1YWwgY29udGVudCBkZWNyeXB0aW9u
CisgICAgICAgIHdpdGggb3B0aW9uYWwgc3ViLXNhbXBsZXMgZGF0YSBhbmQgaW5pdGlhbGl6YXRp
b24gdmVjdG9yLgorICAgICAgICAod2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRvclJlbGVhc2VD
aXBoZXIpOiBUaGlzIGlzIGNhbGxlZCBhZnRlcgorICAgICAgICBjb250ZW50IGRlY3J5cHRpb24g
d2FzIHBlcmZvcm1lZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2Vi
S2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3Ry
ZWFtZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKHdlYmtpdF9tZWRpYV9jb21tb25fZW5jcnlwdGlv
bl9kZWNyeXB0X2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0X21lZGlhX2NvbW1vbl9lbmNy
eXB0aW9uX2RlY3J5cHRfaW5pdCk6CisgICAgICAgICh3ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRp
b25EZWNyeXB0b3JGaW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRNZWRpYUNvbW1vbkVuY3J5cHRp
b25EZWNyeXB0VHJhbnNmb3JtQ2Fwcyk6IEZpbHRlciBvdXQKKyAgICAgICAgY29udGVudCBwcm90
ZWN0aW9uIGluZm9ybWF0aW9ucyBmcm9tIHRoZSBpbmNvbWluZyBjYXBzLgorICAgICAgICAod2Vi
a2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFRyYW5zZm9ybUluUGxhY2UpOiBQcm9jZXNz
IGFuCisgICAgICAgIGluY29taW5nIGJ1ZmZlciwgY2hlY2sgaXQgaGFzIGEgcHJvdGVjdGlvbiBt
ZXRhZGF0YSBzdHJ1Y3R1cmUgYW5kCisgICAgICAgIHBlcmZvcm0gaW4tcGxhY2UgY29udGVudCBk
ZWNyeXB0aW9uIGFjY29yZGluZyB0byB0aGUKKyAgICAgICAgaW5pdGlhbGl6YXRpb24gdmVjdG9y
IGFuZCBzdWItc2FtcGxlcyBkYXRhLgorICAgICAgICAod2Via2l0TWVkaWFDb21tb25FbmNyeXB0
aW9uRGVjcnlwdFNpbmtFdmVudEhhbmRsZXIpOiBIb29rIG9uIHRvCisgICAgICAgIHByb3RlY3Rp
b24gZXZlbnRzIHRvIHRyaWdnZXIga2V5IG5lZ290aWF0aW9uIGluIHRoZSBtZWRpYSBwbGF5ZXIK
KyAgICAgICAgYW5kIGhhbmRsZSBPT0IgZXZlbnRzIGNvbWluZyBmcm9tIHRoZSBtZWRpYSBwbGF5
ZXIgdG8gdW5ibG9jaworICAgICAgICBjb250ZW50IGRlY3J5cHRpb24gdGFza3MuCisgICAgICAg
ICh3ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JDaGFuZ2VTdGF0ZSk6IE1ha2Ug
c3VyZSB0bworICAgICAgICBhdm9pZCBkZWFkbG9ja3MgaW4gY2FzZXMgd2hlcmUgdGhlIGRlY3J5
cHRvciBpcyBkaXNwb3NlZCBiZWZvcmUKKyAgICAgICAgdGhlIGRlY3J5cHRpb24ga2V5IHdhcyBy
ZWNlaXZlZC4KKyAgICAgICAgKHdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHREZWZh
dWx0U2V0dXBDaXBoZXIpOiBEZWZhdWx0IGR1bW15IG1ldGhvZCBpbXBsZW1lbnRhdGlvbi4KKyAg
ICAgICAgKHdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHREZWZhdWx0UmVsZWFzZUNp
cGhlcik6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJL
aXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmg6IEFkZGVkLgorCiAyMDE2LTAy
LTI1ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAg
Rm9udCBzaXplIGNvbXB1dGVkIHN0eWxlIGlzIGlubmFjY3VyYXRlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RL
LmNtYWtlCmluZGV4IDAzYWRkYzYuLjM3ZDhiZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtl
CkBAIC04MjUsMyArODI1LDE3IEBAIGlmIChFTkFCTEVfU1VCVExFX0NSWVBUTykKICAgICAgICAg
JHtHTlVUTFNfTElCUkFSSUVTfQogICAgICkKIGVuZGlmICgpCisKK2lmIChFTkFCTEVfRU5DUllQ
VEVEX01FRElBKQorICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwor
ICAgICAgICAke0xJQkdDUllQVF9JTkNMVURFX0RJUlN9CisgICAgKQorICAgIGxpc3QoQVBQRU5E
IFdlYkNvcmVfTElCUkFSSUVTCisgICAgICAgICR7TElCR0NSWVBUX0xJQlJBUklFU30gLWxncGct
ZXJyb3IKKyAgICApCisgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRDbGVhcktleURlY3J5cHRvckdTdHJlYW1l
ci5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdENvbW1vbkVu
Y3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwCisgICAgKQorCitlbmRpZiAoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCA3NWJiNTMz
Li5jODc5YzQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyLmNwcApAQCAtNzAsNiArNzAsMTAgQEAKICNpbmNsdWRlICJBdWRpb1NvdXJjZVByb3ZpZGVy
R1N0cmVhbWVyLmgiCiAjZW5kaWYKIAorI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCisjaW5j
bHVkZSAiV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuaCIKKyNlbmRpZgorCiBHU1Rf
REVCVUdfQ0FURUdPUllfRVhURVJOKHdlYmtpdF9tZWRpYV9wbGF5ZXJfZGVidWcpOwogI2RlZmlu
ZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X21lZGlhX3BsYXllcl9kZWJ1ZwogCkBAIC03Nyw2ICs4
MSwxOCBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0
YXRpYyB2b2lkIHJlZ2lzdGVyV2ViS2l0R1N0cmVhbWVyRWxlbWVudHMoKQoreworI2lmIEVOQUJM
RShFTkNSWVBURURfTUVESUEpCisgICAgaWYgKCF3ZWJraXRHc3RDaGVja1ZlcnNpb24oMSwgNiwg
MSkpCisgICAgICAgIHJldHVybjsKKworICAgIEdSZWZQdHI8R3N0RWxlbWVudEZhY3Rvcnk+IGNs
ZWFyS2V5RGVjcnlwdG9yRmFjdG9yeSA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9mYWN0b3J5X2Zp
bmQoIndlYmtpdGNsZWFya2V5IikpOworICAgIGlmICghY2xlYXJLZXlEZWNyeXB0b3JGYWN0b3J5
KQorICAgICAgICBnc3RfZWxlbWVudF9yZWdpc3RlcihudWxscHRyLCAid2Via2l0Y2xlYXJrZXki
LCBHU1RfUkFOS19QUklNQVJZICsgMTAwLCBXRUJLSVRfVFlQRV9NRURJQV9DS19ERUNSWVBUKTsK
KyNlbmRpZgorfQorCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0QXVkaW9T
dHJlYW1Qcm9wZXJ0aWVzQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5
ZXIsIEdPYmplY3QqIG9iamVjdCkKIHsKICAgICBwbGF5ZXItPnNldEF1ZGlvU3RyZWFtUHJvcGVy
dGllcyhvYmplY3QpOwpAQCAtMTA3LDYgKzEyMyw4IEBAIGJvb2wgaW5pdGlhbGl6ZUdTdHJlYW1l
ckFuZFJlZ2lzdGVyV2ViS2l0RWxlbWVudHMoKQogICAgIGlmICghaW5pdGlhbGl6ZUdTdHJlYW1l
cigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICByZWdpc3RlcldlYktpdEdTdHJlYW1l
ckVsZW1lbnRzKCk7CisKICAgICBHUmVmUHRyPEdzdEVsZW1lbnRGYWN0b3J5PiBzcmNGYWN0b3J5
ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2ZhY3RvcnlfZmluZCgid2Via2l0d2Vic3JjIikpOwog
ICAgIGlmICghc3JjRmFjdG9yeSkgewogICAgICAgICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCh3
ZWJraXRfbWVkaWFfcGxheWVyX2RlYnVnLCAid2Via2l0bWVkaWFwbGF5ZXIiLCAwLCAiV2ViS2l0
IG1lZGlhIHBsYXllciIpOwpAQCAtMTc3Nyw3ICsxNzk1LDggQEAgTWVkaWFQbGF5ZXI6OlN1cHBv
cnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnN1cHBvcnRzVHlwZShjb25zdCBN
ZWRpYUUKICAgICAvLyBzcGVjIHNheXMgd2Ugc2hvdWxkIG5vdCByZXR1cm4gInByb2JhYmx5IiBp
ZiB0aGUgY29kZWNzIHN0cmluZyBpcyBlbXB0eQogICAgIGlmIChtaW1lVHlwZUNhY2hlKCkuY29u
dGFpbnMocGFyYW1ldGVycy50eXBlKSkKICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcnMuY29kZWNz
LmlzRW1wdHkoKSA/IE1lZGlhUGxheWVyOjpNYXlCZVN1cHBvcnRlZCA6IE1lZGlhUGxheWVyOjpJ
c1N1cHBvcnRlZDsKLSAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOworCisg
ICAgcmV0dXJuIGV4dGVuZGVkU3VwcG9ydHNUeXBlKHBhcmFtZXRlcnMsIE1lZGlhUGxheWVyOjpJ
c05vdFN1cHBvcnRlZCk7CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpz
ZXREb3dubG9hZEJ1ZmZlcmluZygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyQmFzZS5jcHAKaW5kZXggNDI4MDM4Yy4uZjEzOTg3YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmNwcApAQCAt
ODAsNiArODAsMTMgQEAKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZl
ci5oIgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQorI2luY2x1ZGUgIlVV
SUQuaCIKKyNpbmNsdWRlIDxydW50aW1lL0pTQ0lubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1l
L1R5cGVkQXJyYXlJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9VaW50OEFycmF5Lmg+Cisj
ZW5kaWYKKwogI2lmIFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykK
ICNpbmNsdWRlIDxjYWlyby1nbC5oPgogI2VuZGlmCkBAIC0yMjYsMTAgKzIzMywzNCBAQCBib29s
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmhhbmRsZVN5bmNNZXNzYWdlKEdzdE1l
c3NhZ2UqIG1lc3NhZ2UpCiAgICAgICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0KEdTVF9FTEVN
RU5UKG1lc3NhZ2UtPnNyYyksIGFwcENvbnRleHQuZ2V0KCkpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShtZXNzYWdlKTsKICNlbmRpZiAvLyBV
U0UoR1NUUkVBTUVSX0dMKQogCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKyAgICBpZiAo
R1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9FTEVNRU5UKSB7CisgICAg
ICAgIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X21lc3NhZ2VfZ2V0X3N0cnVj
dHVyZShtZXNzYWdlKTsKKyAgICAgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVj
dHVyZSwgImRybS1rZXktbmVlZGVkIikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgTE9HX01FRElBX01FU1NBR0UoImhhbmRsaW5nIGRybS1rZXktbmVlZGVkIG1lc3NhZ2Ui
KTsKKworICAgICAgICBHc3RCdWZmZXIqIGRhdGE7CisgICAgICAgIEdVbmlxdWVPdXRQdHI8Y2hh
cj4ga2V5U3lzdGVtSWQ7CisgICAgICAgIGdib29sZWFuIHZhbGlkID0gZ3N0X3N0cnVjdHVyZV9n
ZXQoc3RydWN0dXJlLCAiZGF0YSIsIEdTVF9UWVBFX0JVRkZFUiwgJmRhdGEsICJrZXktc3lzdGVt
LWlkIiwgR19UWVBFX1NUUklORywgJmtleVN5c3RlbUlkLm91dFB0cigpLCBudWxscHRyKTsKKyAg
ICAgICAgR3N0TWFwSW5mbyBtYXBJbmZvOworICAgICAgICBpZiAoIXZhbGlkIHx8ICFnc3RfYnVm
ZmVyX21hcChkYXRhLCAmbWFwSW5mbywgR1NUX01BUF9SRUFEKSkgeworICAgICAgICAgICAgZ3N0
X2J1ZmZlcl91bnJlZihkYXRhKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorCisgICAgICAgIEdTVF9ERUJVRygic2NoZWR1bGluZyBrZXlOZWVkZWQgZXZlbnQiKTsKKyAg
ICAgICAgbmVlZEtleShrZXlTeXN0ZW1JZC5nZXQoKSwgY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmlu
ZygpLCByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihtYXBJbmZvLmRhdGEp
LCBtYXBJbmZvLnNpemUpOworICAgICAgICBnc3RfYnVmZmVyX3VubWFwKGRhdGEsICZtYXBJbmZv
KTsKKyAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZihkYXRhKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpCisKKyAgICBVTlVTRURf
UEFSQU0obWVzc2FnZSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC04MjMsNiArODU0LDgx
IEBAIHVuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnZpZGVvRGVjb2Rl
ZEJ5dGVDb3VudCgpIGNvbnN0CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihwb3Np
dGlvbik7CiB9CiAKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6c3VwcG9y
dHNLZXlTeXN0ZW0oY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0sIGNvbnN0IFN0cmluZyYgbWltZVR5
cGUpCit7CisgICAgTE9HX01FRElBX01FU1NBR0UoIkNoZWNraW5nIGZvciBLZXlTeXN0ZW0gc3Vw
cG9ydCB3aXRoICVzIGFuZCB0eXBlICVzIiwga2V5U3lzdGVtLnV0ZjgoKS5kYXRhKCksIG1pbWVU
eXBlLnV0ZjgoKS5kYXRhKCkpOworCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKyAgICBp
ZiAoIXdlYmtpdEdzdENoZWNrVmVyc2lvbigxLCA2LCAxKSkgeworICAgICAgICBXQVJOX01FRElB
X01FU1NBR0UoIkVuY3J5cHRlZCBNZWRpYSBFeHRlbnNpb25zIHJlcXVpcmUgR1N0cmVhbWVyIDEu
NiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGVxdWFsSWdub3Jp
bmdBU0NJSUNhc2Uoa2V5U3lzdGVtLCAib3JnLnczLmNsZWFya2V5IikpCisgICAgICAgIHJldHVy
biB0cnVlOworI2VuZGlmCisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKyNpZiBFTkFCTEUoRU5D
UllQVEVEX01FRElBKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpkaXNw
YXRjaERlY3J5cHRpb25LZXkoR3N0QnVmZmVyKiBidWZmZXIpCit7CisgICAgZ3N0X2VsZW1lbnRf
c2VuZF9ldmVudChtX3BpcGVsaW5lLmdldCgpLCBnc3RfZXZlbnRfbmV3X2N1c3RvbShHU1RfRVZF
TlRfQ1VTVE9NX0RPV05TVFJFQU1fT09CLAorICAgICAgICBnc3Rfc3RydWN0dXJlX25ldygiZHJt
LWNpcGhlciIsICJrZXkiLCBHU1RfVFlQRV9CVUZGRVIsIGJ1ZmZlciwgbnVsbHB0cikpKTsKK30K
KworTWVkaWFQbGF5ZXI6Ok1lZGlhS2V5RXhjZXB0aW9uIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lckJhc2U6OmFkZEtleShjb25zdCBTdHJpbmcmIGtleVN5c3RlbSwgY29uc3QgdW5zaWduZWQg
Y2hhcioga2V5RGF0YSwgdW5zaWduZWQga2V5TGVuZ3RoLCBjb25zdCB1bnNpZ25lZCBjaGFyKiAv
KiBpbml0RGF0YSAqLywgdW5zaWduZWQgLyogaW5pdERhdGFMZW5ndGggKi8gLCBjb25zdCBTdHJp
bmcmIHNlc3Npb25JRCkKK3sKKyAgICBMT0dfTUVESUFfTUVTU0FHRSgiYWRkS2V5IHN5c3RlbTog
JXMsIGxlbmd0aDogJXUsIHNlc3Npb246ICVzIiwga2V5U3lzdGVtLnV0ZjgoKS5kYXRhKCksIGtl
eUxlbmd0aCwgc2Vzc2lvbklELnV0ZjgoKS5kYXRhKCkpOworCisgICAgaWYgKCFzdXBwb3J0c0tl
eVN5c3RlbShrZXlTeXN0ZW0sIGVtcHR5U3RyaW5nKCkpKQorICAgICAgICByZXR1cm4gTWVkaWFQ
bGF5ZXI6OktleVN5c3RlbU5vdFN1cHBvcnRlZDsKKworICAgIEdSZWZQdHI8R3N0QnVmZmVyPiBi
dWZmZXIgPSBhZG9wdEdSZWYoZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZChnX21lbWR1cChrZXlEYXRh
LCBrZXlMZW5ndGgpLCBrZXlMZW5ndGgpKTsKKyAgICBkaXNwYXRjaERlY3J5cHRpb25LZXkoYnVm
ZmVyLmdldCgpKTsKKyAgICByZXR1cm4gTWVkaWFQbGF5ZXI6Ok5vRXJyb3I7Cit9CisKK01lZGlh
UGxheWVyOjpNZWRpYUtleUV4Y2VwdGlvbiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNl
OjpnZW5lcmF0ZUtleVJlcXVlc3QoY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0sIGNvbnN0IHVuc2ln
bmVkIGNoYXIqIGluaXREYXRhUHRyLCB1bnNpZ25lZCBpbml0RGF0YUxlbmd0aCkKK3sKKyAgICBM
T0dfTUVESUFfTUVTU0FHRSgiZ2VuZXJhdGluZyBrZXkgcmVxdWVzdCBmb3Igc3lzdGVtOiAlcyIs
IGtleVN5c3RlbS51dGY4KCkuZGF0YSgpKTsKKworICAgIGlmICghc3VwcG9ydHNLZXlTeXN0ZW0o
a2V5U3lzdGVtLCBlbXB0eVN0cmluZygpKSkKKyAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpL
ZXlTeXN0ZW1Ob3RTdXBwb3J0ZWQ7CisKKyAgICBtX3BsYXllci0+a2V5TWVzc2FnZShrZXlTeXN0
ZW0sIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSwgaW5pdERhdGFQdHIsIGluaXREYXRhTGVu
Z3RoLCBVUkwoKSk7CisgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpOb0Vycm9yOworfQorCitNZWRp
YVBsYXllcjo6TWVkaWFLZXlFeGNlcHRpb24gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFz
ZTo6Y2FuY2VsS2V5UmVxdWVzdChjb25zdCBTdHJpbmcmIC8qIGtleVN5c3RlbSAqLyAsIGNvbnN0
IFN0cmluZyYgLyogc2Vzc2lvbklEICovKQoreworICAgIExPR19NRURJQV9NRVNTQUdFKCJjYW5j
ZWxLZXlSZXF1ZXN0Iik7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gTWVkaWFQ
bGF5ZXI6OktleVN5c3RlbU5vdFN1cHBvcnRlZDsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJCYXNlOjpuZWVkS2V5KGNvbnN0IFN0cmluZyYga2V5U3lzdGVtLCBjb25zdCBT
dHJpbmcmIHNlc3Npb25JZCwgY29uc3QgdW5zaWduZWQgY2hhciogaW5pdERhdGEsIHVuc2lnbmVk
IGluaXREYXRhTGVuZ3RoKQoreworICAgIGlmICghbV9wbGF5ZXItPmtleU5lZWRlZChrZXlTeXN0
ZW0sIHNlc3Npb25JZCwgaW5pdERhdGEsIGluaXREYXRhTGVuZ3RoKSkKKyAgICAgICAgR1NUX0RF
QlVHKCJubyBldmVudCBoYW5kbGVyIGZvciBrZXkgbmVlZGVkIik7Cit9CisjZW5kaWYKKworTWVk
aWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpl
eHRlbmRlZFN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzJiBw
YXJhbWV0ZXJzLCBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIHJlc3VsdCkKK3sKKyNpZiBFTkFC
TEUoRU5DUllQVEVEX01FRElBKQorICAgIGlmIChwYXJhbWV0ZXJzLmtleVN5c3RlbS5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBpZiAoc3VwcG9ydHNLZXlTeXN0ZW0o
cGFyYW1ldGVycy5rZXlTeXN0ZW0sIGVtcHR5U3RyaW5nKCkpKQorICAgICAgICByZXN1bHQgPSBN
ZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwYXJhbWV0
ZXJzKTsKKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0KIAogI2VuZGlmIC8vIFVT
RShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lckJhc2UuaAppbmRleCBmNWVhMjFkLi5jMTZiZjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmgKQEAgLTExOCwxMCArMTE4LDIyIEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KICNlbmRpZgogCisgICAgc3RhdGljIGJv
b2wgc3VwcG9ydHNLZXlTeXN0ZW0oY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0sIGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUpOworICAgIHN0YXRpYyBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIGV4dGVu
ZGVkU3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRlcnMmLCBNZWRp
YVBsYXllcjo6U3VwcG9ydHNUeXBlKTsKKwogI2lmIFVTRShHU1RSRUFNRVJfR0wpCiAgICAgdmly
dHVhbCBQYXNzTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50VGltZSgpIG92ZXJy
aWRlOwogI2VuZGlmCiAKK3ByaXZhdGU6CisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKyAg
ICBNZWRpYVBsYXllcjo6TWVkaWFLZXlFeGNlcHRpb24gYWRkS2V5KGNvbnN0IFN0cmluZyYsIGNv
bnN0IHVuc2lnbmVkIGNoYXIqLCB1bnNpZ25lZCwgY29uc3QgdW5zaWduZWQgY2hhciosIHVuc2ln
bmVkLCBjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyAgICBNZWRpYVBsYXllcjo6TWVkaWFLZXlF
eGNlcHRpb24gZ2VuZXJhdGVLZXlSZXF1ZXN0KGNvbnN0IFN0cmluZyYsIGNvbnN0IHVuc2lnbmVk
IGNoYXIqLCB1bnNpZ25lZCkgb3ZlcnJpZGU7CisgICAgTWVkaWFQbGF5ZXI6Ok1lZGlhS2V5RXhj
ZXB0aW9uIGNhbmNlbEtleVJlcXVlc3QoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgb3Zl
cnJpZGU7CisgICAgdm9pZCBuZWVkS2V5KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNv
bnN0IHVuc2lnbmVkIGNoYXIqLCB1bnNpZ25lZCk7CisgICAgdm9pZCBkaXNwYXRjaERlY3J5cHRp
b25LZXkoR3N0QnVmZmVyKik7CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lckJhc2UoTWVkaWFQbGF5ZXIqKTsKICAgICB2aXJ0dWFsIEdzdEVsZW1l
bnQqIGNyZWF0ZVZpZGVvU2luaygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRDbGVh
cktleURlY3J5cHRvckdTdHJlYW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uY2VhYzhmOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRDbGVhcktleURlY3J5cHRvckdTdHJlYW1lci5jcHAK
QEAgLTAsMCArMSwyNTcgQEAKKy8qIEdTdHJlYW1lciBDbGVhcktleSBjb21tb24gZW5jcnlwdGlv
biBkZWNyeXB0b3IKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTAorICogQ29w
eXJpZ2h0IChDKSAyMDE2IE1ldHJvbG9naWNhbAorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiV2ViS2l0Q2xlYXJLZXlEZWNy
eXB0b3JHU3RyZWFtZXIuaCIKKworI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIFVTRShH
U1RSRUFNRVIpCisKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSA8Z2Ny
eXB0Lmg+CisjaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci5oPgorI2luY2x1ZGUgPHd0
Zi9SdW5Mb29wLmg+CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjbGVhcktleVNpemUgPSAxNjsK
Kworc3RydWN0IF9XZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUgeworICAgIEdSZWZQ
dHI8R3N0QnVmZmVyPiBrZXk7CisgICAgZ2NyeV9jaXBoZXJfaGRfdCBoYW5kbGU7Cit9OworCitH
U1RfREVCVUdfQ0FURUdPUllfU1RBVElDKHdlYmtpdF9tZWRpYV9jbGVhcl9rZXlfZGVjcnlwdF9k
ZWJ1Z19jYXRlZ29yeSk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfbWVkaWFfY2xl
YXJfa2V5X2RlY3J5cHRfZGVidWdfY2F0ZWdvcnkKKworI2RlZmluZSBDTEVBUl9LRVlfUFJPVEVD
VElPTl9TWVNURU1fSUQgIjU4MTQ3ZWM4LTA0MjMtNDY1OS05MmU2LWY1MmM1Y2U4YzNjYyIKKwor
I2RlZmluZSB3ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRfcGFyZW50X2NsYXNzIHBhcmVu
dF9jbGFzcworR19ERUZJTkVfVFlQRShXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdCwgd2Via2l0
X21lZGlhX2NsZWFyX2tleV9kZWNyeXB0LCBXRUJLSVRfVFlQRV9NRURJQV9DRU5DX0RFQ1JZUFQp
CisKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rVGVtcGxhdGUgPSBHU1RfU1RBVElD
X1BBRF9URU1QTEFURSgic2luayIsCisgICAgR1NUX1BBRF9TSU5LLAorICAgIEdTVF9QQURfQUxX
QVlTLAorICAgIEdTVF9TVEFUSUNfQ0FQUygiYXBwbGljYXRpb24veC1jZW5jLCBvcmlnaW5hbC1t
ZWRpYS10eXBlPShzdHJpbmcpdmlkZW8veC1oMjY0LCBwcm90ZWN0aW9uLXN5c3RlbT0oc3RyaW5n
KSIgQ0xFQVJfS0VZX1BST1RFQ1RJT05fU1lTVEVNX0lEICI7ICIKKyAgICAiYXBwbGljYXRpb24v
eC1jZW5jLCBvcmlnaW5hbC1tZWRpYS10eXBlPShzdHJpbmcpYXVkaW8vbXBlZywgcHJvdGVjdGlv
bi1zeXN0ZW09KHN0cmluZykiIENMRUFSX0tFWV9QUk9URUNUSU9OX1NZU1RFTV9JRCkpOworCitz
dGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjVGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9U
RU1QTEFURSgic3JjIiwKKyAgICBHU1RfUEFEX1NSQywKKyAgICBHU1RfUEFEX0FMV0FZUywKKyAg
ICBHU1RfU1RBVElDX0NBUFMoInZpZGVvL3gtaDI2NDsgYXVkaW8vbXBlZyIpKTsKKworCitzdGF0
aWMgdm9pZCB3ZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdG9yRmluYWxpemUoR09iamVjdCogb2Jq
ZWN0KQoreworICAgIFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0KiBzZWxmID0gV0VCS0lUX01F
RElBX0NLX0RFQ1JZUFQob2JqZWN0KTsKKyAgICBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFBy
aXZhdGUqIHByaXYgPSBzZWxmLT5wcml2OworCisgICAgcHJpdi0+fldlYktpdE1lZGlhQ2xlYXJL
ZXlEZWNyeXB0UHJpdmF0ZSgpOworCisgICAgR1NUX0NBTExfUEFSRU5UKEdfT0JKRUNUX0NMQVNT
LCBmaW5hbGl6ZSwgKG9iamVjdCkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYUNsZWFy
S2V5RGVjcnlwdG9yUmVxdWVzdERlY3J5cHRpb25LZXkoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0
aW9uRGVjcnlwdCogc2VsZiwgR3N0QnVmZmVyKiBpbml0RGF0YUJ1ZmZlcikKK3sKKyAgICBnc3Rf
ZWxlbWVudF9wb3N0X21lc3NhZ2UoR1NUX0VMRU1FTlQoc2VsZiksCisgICAgICAgIGdzdF9tZXNz
YWdlX25ld19lbGVtZW50KEdTVF9PQkpFQ1Qoc2VsZiksCisgICAgICAgICAgICBnc3Rfc3RydWN0
dXJlX25ldygiZHJtLWtleS1uZWVkZWQiLCAiZGF0YSIsIEdTVF9UWVBFX0JVRkZFUiwgaW5pdERh
dGFCdWZmZXIsCisgICAgICAgICAgICAgICAgImtleS1zeXN0ZW0taWQiLCBHX1RZUEVfU1RSSU5H
LCAib3JnLnczLmNsZWFya2V5IiwgbnVsbHB0cikpKTsKK30KKworc3RhdGljIGdib29sZWFuIHdl
YktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JIYW5kbGVLZXlSZXNwb25zZShXZWJLaXRNZWRpYUNv
bW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmLCBHc3RFdmVudCogZXZlbnQpCit7CisgICAgY29u
c3QgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnc3RfZXZlbnRfZ2V0X3N0cnVjdHVyZShldmVu
dCk7CisKKyAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUoc3RydWN0dXJlLCAiZHJtLWNp
cGhlciIpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBjb25zdCBHVmFsdWUqIHZhbHVl
ID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUoc3RydWN0dXJlLCAia2V5Iik7CisgICAgV0VCS0lU
X01FRElBX0NLX0RFQ1JZUFQoc2VsZiktPnByaXYtPmtleSA9IGFkb3B0R1JlZihnc3RfYnVmZmVy
X2NvcHkoZ3N0X3ZhbHVlX2dldF9idWZmZXIodmFsdWUpKSk7CisgICAgcmV0dXJuIFRSVUU7Cit9
CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdG9yU2V0dXBDaXBo
ZXIoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZikKK3sKKyAgICBXZWJL
aXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0tfREVD
UllQVChzZWxmKS0+cHJpdjsKKworICAgIEFTU0VSVChwcml2LT5rZXkpOworICAgIGlmICghcHJp
di0+a2V5KSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkRlY3J5cHRpb24ga2V5
IG5vdCBwcm92aWRlZCIpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgZ2Ny
eV9lcnJvcl90IGVycm9yID0gZ2NyeV9jaXBoZXJfb3BlbigmKHByaXYtPmhhbmRsZSksIEdDUllf
Q0lQSEVSX0FFUzEyOCwgR0NSWV9DSVBIRVJfTU9ERV9DVFIsIEdDUllfQ0lQSEVSX1NFQ1VSRSk7
CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxl
ZCB0byBjcmVhdGUgQUVTIDEyOCBDVFIgY2lwaGVyIGhhbmRsZTogJXMiLCBncGdfc3RyZXJyb3Io
ZXJyb3IpKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIEdzdE1hcEluZm8g
a2V5TWFwOworICAgIGlmICghZ3N0X2J1ZmZlcl9tYXAocHJpdi0+a2V5LmdldCgpLCAma2V5TWFw
LCBHU1RfTUFQX1JFQUQpKSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxl
ZCB0byBtYXAgZGVjcnlwdGlvbiBrZXkiKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0K
KworICAgIEFTU0VSVChrZXlNYXAuc2l6ZSA9PSBjbGVhcktleVNpemUpOworICAgIGVycm9yID0g
Z2NyeV9jaXBoZXJfc2V0a2V5KHByaXYtPmhhbmRsZSwga2V5TWFwLmRhdGEsIGtleU1hcC5zaXpl
KTsKKyAgICBnc3RfYnVmZmVyX3VubWFwKHByaXYtPmtleS5nZXQoKSwgJmtleU1hcCk7CisgICAg
aWYgKGVycm9yKSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgImdjcnlfY2lwaGVy
X3NldGtleSBmYWlsZWQ6ICVzIiwgZ3BnX3N0cmVycm9yKGVycm9yKSk7CisgICAgICAgIHJldHVy
biBGQUxTRTsKKyAgICB9CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFu
IHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JEZWNyeXB0KFdlYktpdE1lZGlhQ29tbW9uRW5j
cnlwdGlvbkRlY3J5cHQqIHNlbGYsIEdzdEJ1ZmZlciogaXZCdWZmZXIsIEdzdEJ1ZmZlciogYnVm
ZmVyLCB1bnNpZ25lZCBzdWJTYW1wbGVDb3VudCwgR3N0QnVmZmVyKiBzdWJTYW1wbGVzQnVmZmVy
KQoreworICAgIEdzdE1hcEluZm8gaXZNYXA7CisgICAgaWYgKCFnc3RfYnVmZmVyX21hcChpdkJ1
ZmZlciwgJml2TWFwLCBHU1RfTUFQX1JFQUQpKSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qo
c2VsZiwgIkZhaWxlZCB0byBtYXAgSVYiKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0K
KworICAgIHVpbnQ4X3QgY3RyW2NsZWFyS2V5U2l6ZV07CisgICAgaWYgKGl2TWFwLnNpemUgPT0g
OCkgeworICAgICAgICBtZW1zZXQoY3RyICsgOCwgMCwgOCk7CisgICAgICAgIG1lbWNweShjdHIs
IGl2TWFwLmRhdGEsIDgpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChpdk1hcC5zaXpl
ID09IGNsZWFyS2V5U2l6ZSk7CisgICAgICAgIG1lbWNweShjdHIsIGl2TWFwLmRhdGEsIGNsZWFy
S2V5U2l6ZSk7CisgICAgfQorICAgIGdzdF9idWZmZXJfdW5tYXAoaXZCdWZmZXIsICZpdk1hcCk7
CisKKyAgICBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRf
TUVESUFfQ0tfREVDUllQVChzZWxmKS0+cHJpdjsKKyAgICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBn
Y3J5X2NpcGhlcl9zZXRjdHIocHJpdi0+aGFuZGxlLCBjdHIsIGNsZWFyS2V5U2l6ZSk7CisgICAg
aWYgKGVycm9yKSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgImdjcnlfY2lwaGVy
X3NldGN0ciBmYWlsZWQ6ICVzIiwgZ3BnX3N0cmVycm9yKGVycm9yKSk7CisgICAgICAgIHJldHVy
biBGQUxTRTsKKyAgICB9CisKKyAgICBHc3RNYXBJbmZvIG1hcDsKKyAgICBnYm9vbGVhbiBidWZm
ZXJNYXBwZWQgPSBnc3RfYnVmZmVyX21hcChidWZmZXIsICZtYXAsIHN0YXRpY19jYXN0PEdzdE1h
cEZsYWdzPihHU1RfTUFQX1JFQURXUklURSkpOworICAgIGlmICghYnVmZmVyTWFwcGVkKSB7Cisg
ICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBtYXAgYnVmZmVyIik7Cisg
ICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBHc3RNYXBJbmZvIHN1YlNhbXBsZXNN
YXA7CisgICAgZ2Jvb2xlYW4gc3Vic2FtcGxlc0J1ZmZlck1hcHBlZCA9IGdzdF9idWZmZXJfbWFw
KHN1YlNhbXBsZXNCdWZmZXIsICZzdWJTYW1wbGVzTWFwLCBHU1RfTUFQX1JFQUQpOworICAgIGlm
ICghc3Vic2FtcGxlc0J1ZmZlck1hcHBlZCkgeworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNl
bGYsICJGYWlsZWQgdG8gbWFwIHN1YnNhbXBsZSBidWZmZXIiKTsKKyAgICAgICAgZ3N0X2J1ZmZl
cl91bm1hcChidWZmZXIsICZtYXApOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisg
ICAgR3N0Qnl0ZVJlYWRlciogcmVhZGVyID0gZ3N0X2J5dGVfcmVhZGVyX25ldyhzdWJTYW1wbGVz
TWFwLmRhdGEsIHN1YlNhbXBsZXNNYXAuc2l6ZSk7CisgICAgdW5zaWduZWQgcG9zaXRpb24gPSAw
OworICAgIHVuc2lnbmVkIHNhbXBsZUluZGV4ID0gMDsKKyAgICB3aGlsZSAocG9zaXRpb24gPCBt
YXAuc2l6ZSkgeworICAgICAgICBndWludDE2IGNsZWFyQnl0ZXNDb3VudCA9IDA7CisgICAgICAg
IGd1aW50MzIgZW5jcnlwdGVkQnl0ZXNDb3VudCA9IDA7CisKKyAgICAgICAgaWYgKHNhbXBsZUlu
ZGV4IDwgc3ViU2FtcGxlQ291bnQpIHsKKyAgICAgICAgICAgIGlmICghZ3N0X2J5dGVfcmVhZGVy
X2dldF91aW50MTZfYmUocmVhZGVyLCAmY2xlYXJCeXRlc0NvdW50KSB8fCAhZ3N0X2J5dGVfcmVh
ZGVyX2dldF91aW50MzJfYmUocmVhZGVyLCAmZW5jcnlwdGVkQnl0ZXNDb3VudCkpIHsKKyAgICAg
ICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJ1bnN1cHBvcnRlZCIpOworICAgICAg
ICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9mcmVlKHJlYWRlcik7CisgICAgICAgICAgICAgICAg
Z3N0X2J1ZmZlcl91bm1hcChidWZmZXIsICZtYXApOworICAgICAgICAgICAgICAgIGdzdF9idWZm
ZXJfdW5tYXAoc3ViU2FtcGxlc0J1ZmZlciwgJnN1YlNhbXBsZXNNYXApOworICAgICAgICAgICAg
ICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2FtcGxlSW5k
ZXgrKzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNsZWFyQnl0ZXNDb3VudCA9IDA7
CisgICAgICAgICAgICBlbmNyeXB0ZWRCeXRlc0NvdW50ID0gbWFwLnNpemUgLSBwb3NpdGlvbjsK
KyAgICAgICAgfQorCisgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc2VsZiwgIiVkIGJ5dGVzIGNs
ZWFyICh0b2RvPSVkKSIsIGNsZWFyQnl0ZXNDb3VudCwgbWFwLnNpemUgLSBwb3NpdGlvbik7Cisg
ICAgICAgIHBvc2l0aW9uICs9IGNsZWFyQnl0ZXNDb3VudDsKKyAgICAgICAgaWYgKGVuY3J5cHRl
ZEJ5dGVzQ291bnQpIHsKKyAgICAgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc2VsZiwgIiVkIGJ5
dGVzIGVuY3J5cHRlZCAodG9kbz0lZCkiLCBlbmNyeXB0ZWRCeXRlc0NvdW50LCBtYXAuc2l6ZSAt
IHBvc2l0aW9uKTsKKyAgICAgICAgICAgIGVycm9yID0gZ2NyeV9jaXBoZXJfZGVjcnlwdChwcml2
LT5oYW5kbGUsIG1hcC5kYXRhICsgcG9zaXRpb24sIGVuY3J5cHRlZEJ5dGVzQ291bnQsIDAsIDAp
OworICAgICAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICAgICAgR1NUX0VSUk9SX09C
SkVDVChzZWxmLCAiZGVjcnlwdGlvbiBmYWlsZWQ6ICVzIiwgZ3BnX3N0cmVycm9yKGVycm9yKSk7
CisgICAgICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2ZyZWUocmVhZGVyKTsKKyAgICAgICAg
ICAgICAgICBnc3RfYnVmZmVyX3VubWFwKGJ1ZmZlciwgJm1hcCk7CisgICAgICAgICAgICAgICAg
Z3N0X2J1ZmZlcl91bm1hcChzdWJTYW1wbGVzQnVmZmVyLCAmc3ViU2FtcGxlc01hcCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcG9z
aXRpb24gKz0gZW5jcnlwdGVkQnl0ZXNDb3VudDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGdz
dF9ieXRlX3JlYWRlcl9mcmVlKHJlYWRlcik7CisgICAgZ3N0X2J1ZmZlcl91bm1hcChidWZmZXIs
ICZtYXApOworICAgIGdzdF9idWZmZXJfdW5tYXAoc3ViU2FtcGxlc0J1ZmZlciwgJnN1YlNhbXBs
ZXNNYXApOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYUNs
ZWFyS2V5RGVjcnlwdG9yUmVsZWFzZUNpcGhlcihXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25E
ZWNyeXB0KiBzZWxmKQoreworICAgIGdjcnlfY2lwaGVyX2Nsb3NlKFdFQktJVF9NRURJQV9DS19E
RUNSWVBUKHNlbGYpLT5wcml2LT5oYW5kbGUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfbWVk
aWFfY2xlYXJfa2V5X2RlY3J5cHRfY2xhc3NfaW5pdChXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlw
dENsYXNzKiBrbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JK
RUNUX0NMQVNTKGtsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2ViS2l0TWVk
aWFDbGVhcktleURlY3J5cHRvckZpbmFsaXplOworCisgICAgR3N0RWxlbWVudENsYXNzKiBlbGVt
ZW50Q2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyhrbGFzcyk7CisgICAgZ3N0X2VsZW1lbnRfY2xh
c3NfYWRkX3BhZF90ZW1wbGF0ZShlbGVtZW50Q2xhc3MsIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRl
X2dldCgmc2lua1RlbXBsYXRlKSk7CisgICAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1w
bGF0ZShlbGVtZW50Q2xhc3MsIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCgmc3JjVGVtcGxh
dGUpKTsKKworICAgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEoZWxlbWVu
dENsYXNzLAorICAgICAgICAiRGVjcnlwdCBjb250ZW50IGVuY3J5cHRlZCB1c2luZyBJU09CTUZG
IENsZWFyS2V5IENvbW1vbiBFbmNyeXB0aW9uIiwKKyAgICAgICAgR1NUX0VMRU1FTlRfRkFDVE9S
WV9LTEFTU19ERUNSWVBUT1IsCisgICAgICAgICJEZWNyeXB0cyBtZWRpYSB0aGF0IGhhcyBiZWVu
IGVuY3J5cHRlZCB1c2luZyBJU09CTUZGIENsZWFyS2V5IENvbW1vbiBFbmNyeXB0aW9uLiIsCisg
ICAgICAgICJQaGlsaXBwZSBOb3JtYW5kIDxwaGlsbkBpZ2FsaWEuY29tPiIpOworCisgICAgR1NU
X0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X21lZGlhX2NsZWFyX2tleV9kZWNyeXB0X2RlYnVn
X2NhdGVnb3J5LAorICAgICAgICAid2Via2l0Y2xlYXJrZXkiLCAwLCAiQ2xlYXJLZXkgZGVjcnlw
dG9yIik7CisKKyAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MqIGNl
bmNDbGFzcyA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfQ0xBU1Moa2xhc3MpOworICAgIGNl
bmNDbGFzcy0+cHJvdGVjdGlvblN5c3RlbUlkID0gQ0xFQVJfS0VZX1BST1RFQ1RJT05fU1lTVEVN
X0lEOworICAgIGNlbmNDbGFzcy0+cmVxdWVzdERlY3J5cHRpb25LZXkgPSBHU1RfREVCVUdfRlVO
Q1BUUih3ZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdG9yUmVxdWVzdERlY3J5cHRpb25LZXkpOwor
ICAgIGNlbmNDbGFzcy0+aGFuZGxlS2V5UmVzcG9uc2UgPSBHU1RfREVCVUdfRlVOQ1BUUih3ZWJL
aXRNZWRpYUNsZWFyS2V5RGVjcnlwdG9ySGFuZGxlS2V5UmVzcG9uc2UpOworICAgIGNlbmNDbGFz
cy0+c2V0dXBDaXBoZXIgPSBHU1RfREVCVUdfRlVOQ1BUUih3ZWJLaXRNZWRpYUNsZWFyS2V5RGVj
cnlwdG9yU2V0dXBDaXBoZXIpOworICAgIGNlbmNDbGFzcy0+ZGVjcnlwdCA9IEdTVF9ERUJVR19G
VU5DUFRSKHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JEZWNyeXB0KTsKKyAgICBjZW5jQ2xh
c3MtPnJlbGVhc2VDaXBoZXIgPSBHU1RfREVCVUdfRlVOQ1BUUih3ZWJLaXRNZWRpYUNsZWFyS2V5
RGVjcnlwdG9yUmVsZWFzZUNpcGhlcik7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUo
a2xhc3MsIHNpemVvZihXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUpKTsKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X21lZGlhX2NsZWFyX2tleV9kZWNyeXB0X2luaXQoV2ViS2l0TWVk
aWFDbGVhcktleURlY3J5cHQqIHNlbGYpCit7CisgICAgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5
cHRQcml2YXRlKiBwcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKHNlbGYsIFdFQktJ
VF9UWVBFX01FRElBX0NLX0RFQ1JZUFQsIFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0
ZSk7CisKKyAgICBpZiAoIWdjcnlfY2hlY2tfdmVyc2lvbihHQ1JZUFRfVkVSU0lPTikpCisgICAg
ICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkxpYmdjcnlwdCBmYWlsZWQgdG8gaW5pdGlhbGl6
ZSIpOworCisgICAgLy8gQWxsb2NhdGUgYSBwb29sIG9mIDE2ayBzZWN1cmUgbWVtb3J5LiBUaGlz
IG1ha2UgdGhlIHNlY3VyZSBtZW1vcnkKKyAgICAvLyBhdmFpbGFibGUgYW5kIGFsc28gZHJvcHMg
cHJpdmlsZWdlcyB3aGVyZSBuZWVkZWQuCisgICAgZ2NyeV9jb250cm9sKEdDUllDVExfSU5JVF9T
RUNNRU0sIDE2Mzg0LCAwKTsKKworICAgIGdjcnlfY29udHJvbChHQ1JZQ1RMX0lOSVRJQUxJWkFU
SU9OX0ZJTklTSEVELCAwKTsKKworICAgIHNlbGYtPnByaXYgPSBwcml2OworICAgIG5ldyAocHJp
dikgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKCk7Cit9CisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktp
dENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjIxMmM1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdENsZWFy
S2V5RGVjcnlwdG9yR1N0cmVhbWVyLmgKQEAgLTAsMCArMSw1NSBAQAorLyogR1N0cmVhbWVyIENs
ZWFyS2V5IGNvbW1vbiBlbmNyeXB0aW9uIGRlY3J5cHRvcgorICoKKyAqIENvcHlyaWdodCAoQykg
MjAxNiBJZ2FsaWEgUy5MCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgTWV0cm9sb2dpY2FsCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIFdlYktpdENsZWFyS2V5RGVjcnlw
dG9yR1N0cmVhbWVyX2gKKyNkZWZpbmUgV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXJf
aAorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgVVNFKEdTVFJFQU1FUikKKworI2lu
Y2x1ZGUgIldlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuaCIKKworR19C
RUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX01FRElBX0NLX0RFQ1JZUFQgICAgICAg
ICAgKHdlYmtpdF9tZWRpYV9jbGVhcl9rZXlfZGVjcnlwdF9nZXRfdHlwZSgpKQorI2RlZmluZSBX
RUJLSVRfTUVESUFfQ0tfREVDUllQVChvYmopICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfTUVESUFfQ0tfREVDUllQVCwgV2ViS2l0TWVkaWFD
bGVhcktleURlY3J5cHQpKQorI2RlZmluZSBXRUJLSVRfTUVESUFfQ0tfREVDUllQVF9DTEFTUyhr
bGFzcykgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCBXRUJLSVRfVFlQRV9NRURJ
QV9DS19ERUNSWVBULCBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdENsYXNzKSkKKyNkZWZpbmUg
V0VCS0lUX0lTX01FRElBX0NLX0RFQ1JZUFQob2JqKSAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX01FRElBX0NLX0RFQ1JZUFQpKQorI2RlZmluZSBX
RUJLSVRfSVNfTUVESUFfQ0tfREVDUllQVF9DTEFTUyhvYmopIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
VFlQRSgoa2xhc3MpLCBXRUJLSVRfVFlQRV9NRURJQV9DS19ERUNSWVBUKSkKKwordHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0ICAgICAgICBXZWJLaXRNZWRpYUNsZWFy
S2V5RGVjcnlwdDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdENs
YXNzICAgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9X
ZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5
cHRQcml2YXRlOworCitHVHlwZSB3ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRfZ2V0X3R5
cGUodm9pZCk7CisKK3N0cnVjdCBfV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHQgeworICAgIFdl
YktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQgcGFyZW50OworCisgICAgV2ViS2l0TWVk
aWFDbGVhcktleURlY3J5cHRQcml2YXRlKiBwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRNZWRp
YUNsZWFyS2V5RGVjcnlwdENsYXNzIHsKKyAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25E
ZWNyeXB0Q2xhc3MgcGFyZW50Q2xhc3M7Cit9OworCitHX0VORF9ERUNMUworCisjZW5kaWYKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdENvbW1vbkVuY3J5cHRp
b25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjc1Y2Y1YWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1l
ci5jcHAKQEAgLTAsMCArMSwzNzIgQEAKKy8qIEdTdHJlYW1lciBDbGVhcktleSBjb21tb24gZW5j
cnlwdGlvbiBkZWNyeXB0b3IKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTAor
ICogQ29weXJpZ2h0IChDKSAyMDE2IE1ldHJvbG9naWNhbAorICogQ29weXJpZ2h0IChDKSAyMDEz
IFlvdVZpZXcgVFYgTHRkLiA8YWxleC5hc2hsZXlAeW91dmlldy5jb20+CisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJXZWJL
aXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmgiCisKKyNpZiBFTkFCTEUoRU5D
UllQVEVEX01FRElBKSAmJiBVU0UoR1NUUkVBTUVSKQorI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFt
ZXIuaCIKKyNpbmNsdWRlICJHVW5pcXVlUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSA8d3RmL0Nv
bmRpdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1J1
bkxvb3AuaD4KKworc3RydWN0IF9XZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJp
dmF0ZSB7CisgICAgYm9vbCBrZXlSZWNlaXZlZDsKKyAgICBMb2NrIG11dGV4OworICAgIENvbmRp
dGlvbiBjb25kaXRpb247Cit9OworCitHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDKHdlYmtpdF9t
ZWRpYV9jb21tb25fZW5jcnlwdGlvbl9kZWNyeXB0X2RlYnVnX2NhdGVnb3J5KTsKKyNkZWZpbmUg
R1NUX0NBVF9ERUZBVUxUIHdlYmtpdF9tZWRpYV9jb21tb25fZW5jcnlwdGlvbl9kZWNyeXB0X2Rl
YnVnX2NhdGVnb3J5CisKKyNkZWZpbmUgd2Via2l0X21lZGlhX2NvbW1vbl9lbmNyeXB0aW9uX2Rl
Y3J5cHRfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcworR19ERUZJTkVfVFlQRShXZWJLaXRNZWRp
YUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0LCB3ZWJraXRfbWVkaWFfY29tbW9uX2VuY3J5cHRpb25f
ZGVjcnlwdCwgR1NUX1RZUEVfQkFTRV9UUkFOU0ZPUk0pCisKK3N0YXRpYyB2b2lkIHdlYktpdE1l
ZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sK
KyAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmID0gV0VCS0lUX01F
RElBX0NFTkNfREVDUllQVChvYmplY3QpOworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlv
bkRlY3J5cHRQcml2YXRlKiBwcml2ID0gc2VsZi0+cHJpdjsKKworICAgIHByaXYtPn5XZWJLaXRN
ZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJpdmF0ZSgpOworICAgIEdTVF9DQUxMX1BBUkVO
VChHX09CSkVDVF9DTEFTUywgZmluYWxpemUsIChvYmplY3QpKTsKK30KKworc3RhdGljIGdib29s
ZWFuIHdlYmtpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRTZXR1cENpcGhlcihXZWJLaXRN
ZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmKQoreworICAgIFdlYktpdE1lZGlhQ29t
bW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzcyogY2VuY0NsYXNzID0gV0VCS0lUX01FRElBX0NFTkNf
REVDUllQVF9HRVRfQ0xBU1Moc2VsZik7CisgICAgcmV0dXJuIGNlbmNDbGFzcy0+c2V0dXBDaXBo
ZXIoc2VsZik7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHRSZWxlYXNlQ2lwaGVyKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNl
bGYpCit7CisgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdENsYXNzKiBjZW5j
Q2xhc3MgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9DTEFTUyhzZWxmKTsKKyAgICBj
ZW5jQ2xhc3MtPnJlbGVhc2VDaXBoZXIoc2VsZik7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdE1l
ZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRSZXF1ZXN0RGVjcnlwdGlvbktleShXZWJLaXRNZWRp
YUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmLCBHc3RCdWZmZXIqIGluaXREYXRhQnVmZmVy
KQoreworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzcyogY2VuY0Ns
YXNzID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfQ0xBU1Moc2VsZik7CisgICAgY2Vu
Y0NsYXNzLT5yZXF1ZXN0RGVjcnlwdGlvbktleShzZWxmLCBpbml0RGF0YUJ1ZmZlcik7Cit9CisK
K3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0SGFuZGxl
S2V5UmVzcG9uc2UoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgR3N0
RXZlbnQqIGV2ZW50KQoreworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRD
bGFzcyogY2VuY0NsYXNzID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfQ0xBU1Moc2Vs
Zik7CisgICAgcmV0dXJuIGNlbmNDbGFzcy0+aGFuZGxlS2V5UmVzcG9uc2Uoc2VsZiwgZXZlbnQp
OworfQorCitzdGF0aWMgY29uc3QgY2hhciogd2Via2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVj
cnlwdFByb3RlY3Rpb25TeXN0ZW1JRChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0
KiBzZWxmKQoreworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzcyog
Y2VuY0NsYXNzID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfQ0xBU1Moc2VsZik7Cisg
ICAgcmV0dXJuIGNlbmNDbGFzcy0+cHJvdGVjdGlvblN5c3RlbUlkOworfQorCitzdGF0aWMgZ2Jv
b2xlYW4gd2Via2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdERlY3J5cHQoV2ViS2l0TWVk
aWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgR3N0QnVmZmVyKiBpdkJ1ZmZlciwgR3N0
QnVmZmVyKiBidWZmZXIsIHVuc2lnbmVkIHN1YlNhbXBsZUNvdW50LCBHc3RCdWZmZXIqIHN1YlNh
bXBsZXNCdWZmZXIpCit7CisgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdENs
YXNzKiBjZW5jQ2xhc3MgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9DTEFTUyhzZWxm
KTsKKyAgICByZXR1cm4gY2VuY0NsYXNzLT5kZWNyeXB0KHNlbGYsIGl2QnVmZmVyLCBidWZmZXIs
IHN1YlNhbXBsZUNvdW50LCBzdWJTYW1wbGVzQnVmZmVyKTsKK30KKworc3RhdGljIEdzdENhcHMq
IHdlYmtpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRUcmFuc2Zvcm1DYXBzKEdzdEJhc2VU
cmFuc2Zvcm0qIGJhc2UsIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sIEdzdENhcHMqIGNhcHMs
IEdzdENhcHMqIGZpbHRlcikKK3sKKyAgICBpZiAoZGlyZWN0aW9uID09IEdTVF9QQURfVU5LTk9X
TikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBHc3RDYXBzKiB0cmFuc2Zvcm1lZENh
cHMgPSBnc3RfY2Fwc19uZXdfZW1wdHkoKTsKKyAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRp
b25EZWNyeXB0KiBzZWxmID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVChiYXNlKTsKKyAgICBX
ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MqIGtsYXNzID0gV0VCS0lUX01F
RElBX0NFTkNfREVDUllQVF9HRVRfQ0xBU1Moc2VsZik7CisKKyAgICBHU1RfREVCVUdfT0JKRUNU
KGJhc2UsICJkaXJlY3Rpb246ICVzLCBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCAiIGZpbHRlcjog
JSIgR1NUX1BUUl9GT1JNQVQsIChkaXJlY3Rpb24gPT0gR1NUX1BBRF9TUkMpID8gInNyYyIgOiAi
c2luayIsIGNhcHMsIGZpbHRlcik7CisKKyAgICB1bnNpZ25lZCBzaXplID0gZ3N0X2NhcHNfZ2V0
X3NpemUoY2Fwcyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewor
ICAgICAgICBHc3RTdHJ1Y3R1cmUqIGluID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZShjYXBzLCBp
KTsKKyAgICAgICAgR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+IG91dDsKKworICAgICAgICBpZiAo
ZGlyZWN0aW9uID09IEdTVF9QQURfU0lOSykgeworICAgICAgICAgICAgaWYgKCFnc3Rfc3RydWN0
dXJlX2hhc19maWVsZChpbiwgIm9yaWdpbmFsLW1lZGlhLXR5cGUiKSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICAgICAgb3V0LnJlc2V0KGdzdF9zdHJ1Y3R1cmVfY29weShp
bikpOworICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXRfbmFtZShvdXQuZ2V0KCksIGdzdF9z
dHJ1Y3R1cmVfZ2V0X3N0cmluZyhvdXQuZ2V0KCksICJvcmlnaW5hbC1tZWRpYS10eXBlIikpOwor
CisgICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHRoZSBEUk0gcmVsYXRlZCBmaWVsZHMgZnJvbSB0
aGUgZG93bi1zdHJlYW0gY2Fwcy4KKyAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZ3N0
X3N0cnVjdHVyZV9uX2ZpZWxkcyhpbik7ICsraikgeworICAgICAgICAgICAgICAgIGNvbnN0IGdj
aGFyKiBmaWVsZE5hbWUgPSBnc3Rfc3RydWN0dXJlX250aF9maWVsZF9uYW1lKGluLCBqKTsKKwor
ICAgICAgICAgICAgICAgIGlmIChnX3N0cl9oYXNfcHJlZml4KGZpZWxkTmFtZSwgInByb3RlY3Rp
b24tc3lzdGVtIikKKyAgICAgICAgICAgICAgICAgICAgfHwgZ19zdHJfaGFzX3ByZWZpeChmaWVs
ZE5hbWUsICJvcmlnaW5hbC1tZWRpYS10eXBlIikpCisgICAgICAgICAgICAgICAgICAgIGdzdF9z
dHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkKG91dC5nZXQoKSwgZmllbGROYW1lKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJl
PiB0bXA7CisgICAgICAgICAgICB0bXAucmVzZXQoZ3N0X3N0cnVjdHVyZV9jb3B5KGluKSk7Cisg
ICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHRoZSB2aWRlbyByZWxhdGVkIGZpZWxkcyBmcm9tIHRo
ZSB1cC1zdHJlYW0gY2FwcywKKyAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhleSBhcmUgbm90IHJl
bGV2YW50IHRvIHRoZSBpbnB1dCBjYXBzIG9mIHRoaXMgZWxlbWVudCBhbmQKKyAgICAgICAgICAg
IC8vIGNhbiBjYXVzZSBjYXBzIG5lZ290aWF0aW9uIGZhaWx1cmVzIHdpdGggYWRhcHRpdmUgYml0
cmF0ZSBzdHJlYW1zLgorICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSBnc3Rfc3RydWN0dXJl
X25fZmllbGRzKHRtcC5nZXQoKSkgLSAxOyBpbmRleCA+PSAwOyAtLWluZGV4KSB7CisgICAgICAg
ICAgICAgICAgY29uc3QgZ2NoYXIqIGZpZWxkTmFtZSA9IGdzdF9zdHJ1Y3R1cmVfbnRoX2ZpZWxk
X25hbWUodG1wLmdldCgpLCBpbmRleCk7CisgICAgICAgICAgICAgICAgR1NUX1RSQUNFKCJDaGVj
ayBmaWVsZCBcIiVzXCIgZm9yIHJlbW92YWwiLCBmaWVsZE5hbWUpOworCisgICAgICAgICAgICAg
ICAgaWYgKCFnX3N0cmNtcDAoZmllbGROYW1lLCAiYmFzZS1wcm9maWxlIikKKyAgICAgICAgICAg
ICAgICAgICAgfHwgIWdfc3RyY21wMChmaWVsZE5hbWUsICJjb2RlY19kYXRhIikKKyAgICAgICAg
ICAgICAgICAgICAgfHwgIWdfc3RyY21wMChmaWVsZE5hbWUsICJoZWlnaHQiKQorICAgICAgICAg
ICAgICAgICAgICB8fCAhZ19zdHJjbXAwKGZpZWxkTmFtZSwgImZyYW1lcmF0ZSIpCisgICAgICAg
ICAgICAgICAgICAgIHx8ICFnX3N0cmNtcDAoZmllbGROYW1lLCAibGV2ZWwiKQorICAgICAgICAg
ICAgICAgICAgICB8fCAhZ19zdHJjbXAwKGZpZWxkTmFtZSwgInBpeGVsLWFzcGVjdC1yYXRpbyIp
CisgICAgICAgICAgICAgICAgICAgIHx8ICFnX3N0cmNtcDAoZmllbGROYW1lLCAicHJvZmlsZSIp
CisgICAgICAgICAgICAgICAgICAgIHx8ICFnX3N0cmNtcDAoZmllbGROYW1lLCAicmF0ZSIpCisg
ICAgICAgICAgICAgICAgICAgIHx8ICFnX3N0cmNtcDAoZmllbGROYW1lLCAid2lkdGgiKSkgewor
ICAgICAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZCh0bXAuZ2V0KCks
IGZpZWxkTmFtZSk7CisgICAgICAgICAgICAgICAgICAgIEdTVF9UUkFDRSgiUmVtb3ZpbmcgZmll
bGQgJXMiLCBmaWVsZE5hbWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgb3V0LnJlc2V0KGdzdF9zdHJ1Y3R1cmVfY29weSh0bXAuZ2V0KCkpKTsKKyAg
ICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KG91dC5nZXQoKSwgInByb3RlY3Rpb24tc3lzdGVt
IiwgR19UWVBFX1NUUklORywga2xhc3MtPnByb3RlY3Rpb25TeXN0ZW1JZCwKKyAgICAgICAgICAg
ICAgICAib3JpZ2luYWwtbWVkaWEtdHlwZSIsIEdfVFlQRV9TVFJJTkcsIGdzdF9zdHJ1Y3R1cmVf
Z2V0X25hbWUoaW4pLCBudWxscHRyKTsKKworICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXRf
bmFtZShvdXQuZ2V0KCksICJhcHBsaWNhdGlvbi94LWNlbmMiKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgaXNEdXBsaWNhdGVkID0gZmFsc2U7CisgICAgICAgIHVuc2lnbmVkIHNpemUgPSBn
c3RfY2Fwc19nZXRfc2l6ZSh0cmFuc2Zvcm1lZENhcHMpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGluZGV4ID0gMDsgIWlzRHVwbGljYXRlZCAmJiBpbmRleCA8IHNpemU7ICsraW5kZXgpIHsKKyAg
ICAgICAgICAgIEdzdFN0cnVjdHVyZSogaXRlbSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUodHJh
bnNmb3JtZWRDYXBzLCBpbmRleCk7CisgICAgICAgICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9pc19l
cXVhbChpdGVtLCBvdXQuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgaXNEdXBsaWNhdGVkID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGlmICghaXNEdXBsaWNhdGVkKSB7CisgICAgICAgICAgICBnc3RfY2Fwc19hcHBl
bmRfc3RydWN0dXJlKHRyYW5zZm9ybWVkQ2Fwcywgb3V0LmdldCgpKTsKKyAgICAgICAgICAgIG91
dC5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZmlsdGVyKSB7CisgICAg
ICAgIEdTVF9ERUJVR19PQkpFQ1QoYmFzZSwgIlVzaW5nIGZpbHRlciBjYXBzICUiIEdTVF9QVFJf
Rk9STUFULCBmaWx0ZXIpOworICAgICAgICBHc3RDYXBzKiBpbnRlcnNlY3Rpb24gPSBnc3RfY2Fw
c19pbnRlcnNlY3RfZnVsbCh0cmFuc2Zvcm1lZENhcHMsIGZpbHRlciwgR1NUX0NBUFNfSU5URVJT
RUNUX0ZJUlNUKTsKKyAgICAgICAgZ3N0X2NhcHNfdW5yZWYodHJhbnNmb3JtZWRDYXBzKTsKKyAg
ICAgICAgdHJhbnNmb3JtZWRDYXBzID0gaW50ZXJzZWN0aW9uOworICAgIH0KKworICAgIEdTVF9E
RUJVR19PQkpFQ1QoYmFzZSwgInJldHVybmluZyAlIiBHU1RfUFRSX0ZPUk1BVCwgdHJhbnNmb3Jt
ZWRDYXBzKTsKKyAgICByZXR1cm4gdHJhbnNmb3JtZWRDYXBzOworfQorCitzdGF0aWMgR3N0Rmxv
d1JldHVybiB3ZWJraXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0VHJhbnNmb3JtSW5QbGFj
ZShHc3RCYXNlVHJhbnNmb3JtKiBiYXNlLCBHc3RCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBXZWJL
aXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmID0gV0VCS0lUX01FRElBX0NFTkNf
REVDUllQVChiYXNlKTsKKyAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJp
dmF0ZSogcHJpdiA9IHNlbGYtPnByaXY7CisgICAgTG9ja0hvbGRlciBsb2NrZXIocHJpdi0+bXV0
ZXgpOworCisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisKKyAgICAvLyBUaGUga2V5IG1p
Z2h0IG5vdCBoYXZlIGJlZW4gcmVjZWl2ZWQgeWV0LiBXYWl0IGZvciBpdC4KKyAgICBpZiAoIXBy
aXYtPmtleVJlY2VpdmVkKQorICAgICAgICBwcml2LT5jb25kaXRpb24ud2FpdChwcml2LT5tdXRl
eCk7CisKKyAgICBHc3RQcm90ZWN0aW9uTWV0YSogcHJvdGVjdGlvbk1ldGEgPSBnc3RfYnVmZmVy
X2dldF9wcm90ZWN0aW9uX21ldGEoYnVmZmVyKTsKKyAgICBpZiAoIXByb3RlY3Rpb25NZXRhKSB7
CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQgR3N0UHJvdGVj
dGlvbiBtZXRhZGF0YSBmcm9tIGJ1ZmZlciAlcCIsIGJ1ZmZlcik7CisgICAgICAgIHJldHVybiBH
U1RfRkxPV19OT1RfU1VQUE9SVEVEOworICAgIH0KKworICAgIEdzdE1ldGEqIG1ldGEgPSByZWlu
dGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSk7CisgICAgZ3VpbnQgaXZTaXpl
OworICAgIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfdWludChwcm90ZWN0aW9uTWV0YS0+aW5mbywg
Iml2X3NpemUiLCAmaXZTaXplKSkgeworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJG
YWlsZWQgdG8gZ2V0IGl2X3NpemUiKTsKKyAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShi
dWZmZXIsIG1ldGEpOworICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKKyAg
ICB9CisKKyAgICBnYm9vbGVhbiBlbmNyeXB0ZWQ7CisgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dl
dF9ib29sZWFuKHByb3RlY3Rpb25NZXRhLT5pbmZvLCAiZW5jcnlwdGVkIiwgJmVuY3J5cHRlZCkp
IHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBlbmNyeXB0
ZWQgZmxhZyIpOworICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgbWV0YSk7
CisgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOworICAgIH0KKworICAgIGlm
ICghaXZTaXplIHx8ICFlbmNyeXB0ZWQpIHsKKyAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0
YShidWZmZXIsIG1ldGEpOworICAgICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7CisgICAgfQorCisg
ICAgR1NUX0RFQlVHX09CSkVDVChiYXNlLCAicHJvdGVjdGlvbiBtZXRhOiAlIiBHU1RfUFRSX0ZP
Uk1BVCwgcHJvdGVjdGlvbk1ldGEtPmluZm8pOworICAgIGd1aW50IHN1YlNhbXBsZUNvdW50Owor
ICAgIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfdWludChwcm90ZWN0aW9uTWV0YS0+aW5mbywgInN1
YnNhbXBsZV9jb3VudCIsICZzdWJTYW1wbGVDb3VudCkpIHsKKyAgICAgICAgR1NUX0VSUk9SX09C
SkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBzdWJzYW1wbGVfY291bnQiKTsKKyAgICAgICAgZ3N0
X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIG1ldGEpOworICAgICAgICByZXR1cm4gR1NUX0ZM
T1dfTk9UX1NVUFBPUlRFRDsKKyAgICB9CisKKyAgICBjb25zdCBHVmFsdWUqIHZhbHVlOworICAg
IEdzdEJ1ZmZlciogc3ViU2FtcGxlc0J1ZmZlciA9IG51bGxwdHI7CisgICAgaWYgKHN1YlNhbXBs
ZUNvdW50KSB7CisgICAgICAgIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUocHJvdGVj
dGlvbk1ldGEtPmluZm8sICJzdWJzYW1wbGVzIik7CisgICAgICAgIGlmICghdmFsdWUpIHsKKyAg
ICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQgc3Vic2FtcGxl
cyIpOworICAgICAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIG1ldGEpOwor
ICAgICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CisgICAgICAgIH0KKyAg
ICAgICAgc3ViU2FtcGxlc0J1ZmZlciA9IGdzdF92YWx1ZV9nZXRfYnVmZmVyKHZhbHVlKTsKKyAg
ICB9CisKKyAgICBpZiAoIXdlYmtpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRTZXR1cENp
cGhlcihzZWxmKSkgeworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8g
Y29uZmlndXJlIGNpcGhlciIpOworICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZl
ciwgbWV0YSk7CisgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOworICAgIH0K
KworICAgIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUocHJvdGVjdGlvbk1ldGEtPmlu
Zm8sICJpdiIpOworICAgIGlmICghdmFsdWUpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChz
ZWxmLCAiRmFpbGVkIHRvIGdldCBJViBmb3Igc2FtcGxlIik7CisgICAgICAgIHdlYmtpdE1lZGlh
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRSZWxlYXNlQ2lwaGVyKHNlbGYpOworICAgICAgICBnc3Rf
YnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgbWV0YSk7CisgICAgICAgIHJldHVybiBHU1RfRkxP
V19OT1RfU1VQUE9SVEVEOworICAgIH0KKworICAgIEdzdEJ1ZmZlciogaXZCdWZmZXIgPSBnc3Rf
dmFsdWVfZ2V0X2J1ZmZlcih2YWx1ZSk7CisgICAgaWYgKCF3ZWJraXRNZWRpYUNvbW1vbkVuY3J5
cHRpb25EZWNyeXB0RGVjcnlwdChzZWxmLCBpdkJ1ZmZlciwgYnVmZmVyLCBzdWJTYW1wbGVDb3Vu
dCwgc3ViU2FtcGxlc0J1ZmZlcikpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAi
RGVjcnlwdGlvbiBmYWlsZWQiKTsKKyAgICAgICAgd2Via2l0TWVkaWFDb21tb25FbmNyeXB0aW9u
RGVjcnlwdFJlbGVhc2VDaXBoZXIoc2VsZik7CisgICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21l
dGEoYnVmZmVyLCBtZXRhKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7
CisgICAgfQorCisgICAgd2Via2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFJlbGVhc2VD
aXBoZXIoc2VsZik7CisgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIG1ldGEpOwor
ICAgIHJldHVybiBHU1RfRkxPV19PSzsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdE1lZGlh
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRTaW5rRXZlbnRIYW5kbGVyKEdzdEJhc2VUcmFuc2Zvcm0q
IHRyYW5zLCBHc3RFdmVudCogZXZlbnQpCit7CisgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0
aW9uRGVjcnlwdCogc2VsZiA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFQodHJhbnMpOworICAg
IFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlKiBwcml2ID0gc2VsZi0+
cHJpdjsKKworICAgIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUoZXZlbnQpKSB7CisgICAgY2FzZSBH
U1RfRVZFTlRfUFJPVEVDVElPTjogeworICAgICAgICBjb25zdCBjaGFyKiBzeXN0ZW1JZDsKKyAg
ICAgICAgY29uc3QgY2hhciogb3JpZ2luOworICAgICAgICBHc3RCdWZmZXIqIGluaXREYXRhQnVm
ZmVyOworCisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgInJlY2VpdmVkIHByb3RlY3Rp
b24gZXZlbnQiKTsKKyAgICAgICAgZ3N0X2V2ZW50X3BhcnNlX3Byb3RlY3Rpb24oZXZlbnQsICZz
eXN0ZW1JZCwgJmluaXREYXRhQnVmZmVyLCAmb3JpZ2luKTsKKyAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChzZWxmLCAic3lzdGVtSWQ6ICVzIiwgc3lzdGVtSWQpOworCisgICAgICAgIGlmICghZ19z
dHJfZXF1YWwoc3lzdGVtSWQsIHdlYmtpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcm90
ZWN0aW9uU3lzdGVtSUQoc2VsZikpKSB7CisgICAgICAgICAgICBnc3RfZXZlbnRfdW5yZWYoZXZl
bnQpOworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKworICAgICAgICAvLyBL
ZWVwIHRoZSBldmVudCByZWYgYXJvdW5kIHNvIHRoYXQgdGhlIHBhcnNlZCBldmVudCBkYXRhCisg
ICAgICAgIC8vIHJlbWFpbnMgdmFsaWQgdW50aWwgdGhlIGRybS1rZXktbmVlZCBtZXNzYWdlIGhh
cyBiZWVuIHNlbnQuCisgICAgICAgIEdSZWZQdHI8R3N0RXZlbnQ+IHByb3RlY3RlZEV2ZW50KGV2
ZW50KTsKKyAgICAgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBwcm90ZWN0ZWRUaGlzKEdTVF9FTEVN
RU5UX0NBU1Qoc2VsZikpOworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3Rl
Y3RlZFRoaXMsIHByb3RlY3RlZEV2ZW50LCBpbml0RGF0YUJ1ZmZlcl0geworICAgICAgICAgICAg
aWYgKHByb3RlY3RlZFRoaXMpCisgICAgICAgICAgICAgICAgd2Via2l0TWVkaWFDb21tb25FbmNy
eXB0aW9uRGVjcnlwdFJlcXVlc3REZWNyeXB0aW9uS2V5KFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZ
UFQocHJvdGVjdGVkVGhpcy5nZXQoKSksIGluaXREYXRhQnVmZmVyKTsKKyAgICAgICAgfSk7CisK
KyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIGNhc2UgR1NUX0VWRU5UX0NVU1RPTV9E
T1dOU1RSRUFNX09PQjogeworICAgICAgICBpZiAod2Via2l0TWVkaWFDb21tb25FbmNyeXB0aW9u
RGVjcnlwdEhhbmRsZUtleVJlc3BvbnNlKHNlbGYsIGV2ZW50KSkgeworICAgICAgICAgICAgcHJp
di0+a2V5UmVjZWl2ZWQgPSB0cnVlOworICAgICAgICAgICAgcHJpdi0+Y29uZGl0aW9uLm5vdGlm
eU9uZSgpOworICAgICAgICB9CisKKyAgICAgICAgZ3N0X2V2ZW50X3VucmVmKGV2ZW50KTsKKyAg
ICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBH
U1RfQkFTRV9UUkFOU0ZPUk1fQ0xBU1MocGFyZW50X2NsYXNzKS0+c2lua19ldmVudCh0cmFucywg
ZXZlbnQpOworICAgIH0KKworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIEdzdFN0YXRl
Q2hhbmdlUmV0dXJuIHdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckNoYW5nZVN0
YXRlKEdzdEVsZW1lbnQqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCit7Cisg
ICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiA9IFdFQktJVF9NRURJ
QV9DRU5DX0RFQ1JZUFQoZWxlbWVudCk7CisKKyAgICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKKyAg
ICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgorICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKHNlbGYsICJQQVVTRUQtPlJFQURZIik7CisgICAgICAgIHNlbGYtPnByaXYtPmNv
bmRpdGlvbi5ub3RpZnlPbmUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIEdTVF9FTEVNRU5UX0NMQVNTKHBhcmVudF9j
bGFzcyktPmNoYW5nZV9zdGF0ZShlbGVtZW50LCB0cmFuc2l0aW9uKTsKK30KKworc3RhdGljIGdi
b29sZWFuIHdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHREZWZhdWx0U2V0dXBDaXBo
ZXIoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCopCit7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3N0YXRpYyB2b2lkIHdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRE
ZWZhdWx0UmVsZWFzZUNpcGhlcihXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KikK
K3sKK30KKworc3RhdGljIHZvaWQgd2Via2l0X21lZGlhX2NvbW1vbl9lbmNyeXB0aW9uX2RlY3J5
cHRfY2xhc3NfaW5pdChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MqIGts
YXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Mo
a2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJLaXRNZWRpYUNvbW1vbkVu
Y3J5cHRpb25EZWNyeXB0b3JGaW5hbGl6ZTsKKworICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklU
KHdlYmtpdF9tZWRpYV9jb21tb25fZW5jcnlwdGlvbl9kZWNyeXB0X2RlYnVnX2NhdGVnb3J5LAor
ICAgICAgICAid2Via2l0Y2VuYyIsIDAsICJDb21tb24gRW5jcnlwdGlvbiBiYXNlIGNsYXNzIik7
CisKKyAgICBHc3RFbGVtZW50Q2xhc3MqIGVsZW1lbnRDbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNT
KGtsYXNzKTsKKyAgICBlbGVtZW50Q2xhc3MtPmNoYW5nZV9zdGF0ZSA9IEdTVF9ERUJVR19GVU5D
UFRSKHdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckNoYW5nZVN0YXRlKTsKKwor
ICAgIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyogYmFzZVRyYW5zZm9ybUNsYXNzID0gR1NUX0JBU0Vf
VFJBTlNGT1JNX0NMQVNTKGtsYXNzKTsKKyAgICBiYXNlVHJhbnNmb3JtQ2xhc3MtPnRyYW5zZm9y
bV9pcCA9IEdTVF9ERUJVR19GVU5DUFRSKHdlYmtpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5
cHRUcmFuc2Zvcm1JblBsYWNlKTsKKyAgICBiYXNlVHJhbnNmb3JtQ2xhc3MtPnRyYW5zZm9ybV9j
YXBzID0gR1NUX0RFQlVHX0ZVTkNQVFIod2Via2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlw
dFRyYW5zZm9ybUNhcHMpOworICAgIGJhc2VUcmFuc2Zvcm1DbGFzcy0+dHJhbnNmb3JtX2lwX29u
X3Bhc3N0aHJvdWdoID0gRkFMU0U7CisgICAgYmFzZVRyYW5zZm9ybUNsYXNzLT5zaW5rX2V2ZW50
ID0gR1NUX0RFQlVHX0ZVTkNQVFIod2Via2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFNp
bmtFdmVudEhhbmRsZXIpOworCisgICAga2xhc3MtPnNldHVwQ2lwaGVyID0gR1NUX0RFQlVHX0ZV
TkNQVFIod2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdERlZmF1bHRTZXR1cENpcGhl
cik7CisgICAga2xhc3MtPnJlbGVhc2VDaXBoZXIgPSBHU1RfREVCVUdfRlVOQ1BUUih3ZWJLaXRN
ZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0RGVmYXVsdFJlbGVhc2VDaXBoZXIpOworCisgICAg
Z190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGtsYXNzLCBzaXplb2YoV2ViS2l0TWVkaWFDb21tb25F
bmNyeXB0aW9uRGVjcnlwdFByaXZhdGUpKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X21lZGlh
X2NvbW1vbl9lbmNyeXB0aW9uX2RlY3J5cHRfaW5pdChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRp
b25EZWNyeXB0KiBzZWxmKQoreworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5
cHRQcml2YXRlKiBwcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKHNlbGYsIFdFQktJ
VF9UWVBFX01FRElBX0NFTkNfREVDUllQVCwgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVj
cnlwdFByaXZhdGUpOworCisgICAgc2VsZi0+cHJpdiA9IHByaXY7CisgICAgbmV3IChwcml2KSBX
ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJpdmF0ZSgpOworCisgICAgR3N0QmFz
ZVRyYW5zZm9ybSogYmFzZSA9IEdTVF9CQVNFX1RSQU5TRk9STShzZWxmKTsKKyAgICBnc3RfYmFz
ZV90cmFuc2Zvcm1fc2V0X2luX3BsYWNlKGJhc2UsIFRSVUUpOworICAgIGdzdF9iYXNlX3RyYW5z
Zm9ybV9zZXRfcGFzc3Rocm91Z2goYmFzZSwgRkFMU0UpOworICAgIGdzdF9iYXNlX3RyYW5zZm9y
bV9zZXRfZ2FwX2F3YXJlKGJhc2UsIEZBTFNFKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0Q29tbW9uRW5j
cnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjU1MjE2Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktp
dENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuaApAQCAtMCwwICsxLDY2IEBACisv
KiBHU3RyZWFtZXIgQ2xlYXJLZXkgY29tbW9uIGVuY3J5cHRpb24gZGVjcnlwdG9yCisgKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwKKyAqIENvcHlyaWdodCAoQykgMjAxNiBNZXRy
b2xvZ2ljYWwKKyAqIENvcHlyaWdodCAoQykgMjAxMyBZb3VWaWV3IFRWIEx0ZC4gPGFsZXguYXNo
bGV5QHlvdXZpZXcuY29tPgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRl
ZiBXZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyX2gKKyNkZWZpbmUgV2Vi
S2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lcl9oCisKKyNpZiBFTkFCTEUoRU5D
UllQVEVEX01FRElBKSAmJiBVU0UoR1NUUkVBTUVSKQorCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgor
I2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaD4KKworR19CRUdJTl9ERUNMUwor
CisjZGVmaW5lIFdFQktJVF9UWVBFX01FRElBX0NFTkNfREVDUllQVCAgICAgICAgICAod2Via2l0
X21lZGlhX2NvbW1vbl9lbmNyeXB0aW9uX2RlY3J5cHRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VC
S0lUX01FRElBX0NFTkNfREVDUllQVChvYmopICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfTUVESUFfQ0VOQ19ERUNSWVBULCBXZWJLaXRNZWRp
YUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KSkKKyNkZWZpbmUgV0VCS0lUX01FRElBX0NFTkNfREVD
UllQVF9DTEFTUyhrbGFzcykgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCBXRUJL
SVRfVFlQRV9NRURJQV9DRU5DX0RFQ1JZUFQsIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHRDbGFzcykpCisjZGVmaW5lIFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX0NMQVNT
KG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCBXRUJLSVRfVFlQRV9NRURJ
QV9DRU5DX0RFQ1JZUFQsIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzcykp
CisKKyNkZWZpbmUgV0VCS0lUX0lTX01FRElBX0NFTkNfREVDUllQVChvYmopICAgICAgIChHX1RZ
UEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfTUVESUFfQ0VOQ19ERUNS
WVBUKSkKKyNkZWZpbmUgV0VCS0lUX0lTX01FRElBX0NFTkNfREVDUllQVF9DTEFTUyhvYmopIChH
X1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCBXRUJLSVRfVFlQRV9NRURJQV9DRU5DX0RF
Q1JZUFQpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVj
cnlwdCAgICAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdDsKK3R5cGVkZWYg
c3RydWN0IF9XZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MgICBXZWJLaXRN
ZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGUgV2ViS2l0TWVkaWFDb21tb25FbmNy
eXB0aW9uRGVjcnlwdFByaXZhdGU7CisKK0dUeXBlIHdlYmtpdF9tZWRpYV9jb21tb25fZW5jcnlw
dGlvbl9kZWNyeXB0X2dldF90eXBlKHZvaWQpOworCitzdHJ1Y3QgX1dlYktpdE1lZGlhQ29tbW9u
RW5jcnlwdGlvbkRlY3J5cHQgeworICAgIEdzdEJhc2VUcmFuc2Zvcm0gcGFyZW50OworCisgICAg
V2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGUqIHByaXY7Cit9OworCitz
dHJ1Y3QgX1dlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzcyB7CisgICAgR3N0
QmFzZVRyYW5zZm9ybUNsYXNzIHBhcmVudENsYXNzOworCisgICAgY29uc3QgY2hhciogcHJvdGVj
dGlvblN5c3RlbUlkOworICAgIHZvaWQgKCpyZXF1ZXN0RGVjcnlwdGlvbktleSkgKFdlYktpdE1l
ZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqLCBHc3RCdWZmZXIqIGluaXREYXRhKTsKKyAgICBn
Ym9vbGVhbiAoKmhhbmRsZUtleVJlc3BvbnNlKSAoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9u
RGVjcnlwdCosIEdzdEV2ZW50KiBldmVudCk7CisgICAgZ2Jvb2xlYW4gKCpzZXR1cENpcGhlcikg
KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqKTsKKyAgICBnYm9vbGVhbiAoKmRl
Y3J5cHQpIChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgR3N0QnVmZmVyKiBp
dkJ1ZmZlciwgR3N0QnVmZmVyKiBidWZmZXIsIHVuc2lnbmVkIHN1YlNhbXBsZXNDb3VudCwgR3N0
QnVmZmVyKiBzdWJTYW1wbGVzQnVmZmVyKTsKKyAgICB2b2lkICgqcmVsZWFzZUNpcGhlcikgKFdl
YktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqKTsKK307CisKK0dfRU5EX0RFQ0xTCisK
KyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFr
ZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCmluZGV4IGMzNWIxZTEuLjEwOTY4M2Ig
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9j
bWFrZS9PcHRpb25zR1RLLmNtYWtlCkBAIC0xMzMsNiArMTMzLDcgQEAgZW5kaWYgKCkKIFdFQktJ
VF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9BQ0NFTEVSQVRFRF8yRF9DQU5WQVMg
UFVCTElDIE9GRikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9DUkVE
RU5USUFMX1NUT1JBR0UgUFVCTElDIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFM
VUUoRU5BQkxFX0RSQUdfU1VQUE9SVCBQVUJMSUMgT04pCitXRUJLSVRfT1BUSU9OX0RFRkFVTFRf
UE9SVF9WQUxVRShFTkFCTEVfRU5DUllQVEVEX01FRElBIFBVQkxJQyBPTikKIFdFQktJVF9PUFRJ
T05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9HRU9MT0NBVElPTiBQVUJMSUMgT04pCiBXRUJL
SVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfSUNPTkRBVEFCQVNFIFBVQkxJQyBP
TikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9KSVQgUFVCTElDIE9O
KQpAQCAtMzc1LDYgKzM3NiwxMyBAQCBpZiAoRU5BQkxFX1ZJREVPIE9SIEVOQUJMRV9XRUJfQVVE
SU8pCiAgICAgU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0dTVFJFQU1FUiBUUlVFKQogZW5k
aWYgKCkKIAoraWYgKEVOQUJMRV9FTkNSWVBURURfTUVESUEpCisgICAgaWYgKFBDX0dTVFJFQU1F
Ul9WRVJTSU9OIFZFUlNJT05fTEVTUyAxLjYuMSkKKyAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJP
UiAiR1N0cmVhbWVyIDEuNiBpcyByZXF1aXJlZCB0byB1c2UgRU5BQkxFX0VOQ1JZUFRFRF9NRURJ
QSIpCisgICAgZW5kaWYgKCkKKyAgICBmaW5kX3BhY2thZ2UoTGliR2NyeXB0IFJFUVVJUkVEKQor
ZW5kaWYgKCkKKwogaWYgKEVOQUJMRV9RVUFSVFpfVEFSR0VUKQogICAgIGlmIChOT1QgR1RLM19T
VVBQT1JUU19RVUFSVFopCiAgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlJlY29tcGlsZSBH
VEsrIHdpdGggUXVhcnR6IGJhY2tlbmQgdG8gdXNlIEVOQUJMRV9RVUFSVFpfVEFSR0VUIikKLS0g
CjIuNy4w
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272316</attachid>
            <date>2016-02-26 00:58:57 -0800</date>
            <delta_ts>2016-02-26 06:09:47 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>55745</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSA3MzUxYWVkYmU0OGIyOWIwZjIzZjQxNDcwZjU5OGNlNzMzZTkyYWI2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBNb24sIDE1IEZlYiAyMDE2IDEwOjQ3OjUwICswMTAwClN1YmplY3Q6IFtQQVRDSF0g
cGF0Y2gKCi0tLQogQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgMTIgKwogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgODAgKysrKysKIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlICAg
ICAgICAgICAgICAgICAgIHwgIDE0ICsKIC4uLi9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyLmNwcCAgICAgIHwgIDIxICstCiAuLi4vZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2UuY3BwICB8IDExMCArKysrKy0KIC4uLi9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oICAgIHwgIDEyICsKIC4uLi9nc3RyZWFtZXIvV2Vi
S2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwIHwgMjU2ICsrKysrKysrKysrKysrCiAu
Li4vZ3N0cmVhbWVyL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmggICB8ICA1NSAr
KysKIC4uLi9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcCAgIHwg
MzcxICsrKysrKysrKysrKysrKysrKysrKwogLi4uL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNy
eXB0b3JHU3RyZWFtZXIuaCAgICAgfCAgNjYgKysrKwogU291cmNlL2NtYWtlL0ZpbmRMaWJHY3J5
cHQuY21ha2UgICAgICAgICAgICAgICAgICAgfCAgOTAgKysrKysKIFNvdXJjZS9jbWFrZS9PcHRp
b25zR1RLLmNtYWtlICAgICAgICAgICAgICAgICAgICAgIHwgICA4ICsKIFRvb2xzL2d0ay9pbnN0
YWxsLWRlcGVuZGVuY2llcyAgICAgICAgICAgICAgICAgICAgIHwgICA0ICstCiAxMyBmaWxlcyBj
aGFuZ2VkLCAxMDk1IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAx
MDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdENs
ZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRDbGVhcktleURlY3J5cHRv
ckdTdHJlYW1lci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFt
ZXIuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuaAog
Y3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9jbWFrZS9GaW5kTGliR2NyeXB0LmNtYWtlCgpkaWZm
IC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IGE1YWVhNjAuLjg4OWRlMzYgMTAw
NjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAx
Ni0wMi0xNSAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CisKKyAgICAg
ICAgW0dUS11bR1N0cmVhbWVyXSBDbGVhcktleSBFTUUgdjEgZGVjcnlwdGlvbiBzdXBwb3J0Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQyMzUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZS9j
bWFrZS9GaW5kTGliR2NyeXB0LmNtYWtlOiBBZGRlZC4KKyAgICAgICAgKiBTb3VyY2UvY21ha2Uv
T3B0aW9uc0dUSy5jbWFrZTogTmV3IHB1YmxpYyBvcHRpb24gZm9yCisgICAgICAgIEVOQ1JZUFRF
RF9NRURJQSwgb2ZmIGJ5IGRlZmF1bHQuIFRoaXMgcmVxdWlyZXMgR1N0cmVhbWVyIDEuNi54IG9y
CisgICAgICAgIGFib3ZlIGFuZCBsaWJnY3J5cHQuCisKIDIwMTYtMDItMjUgIE15bGVzIEMuIE1h
eGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2luXSBbU1ZHIC0+IE9U
RiBDb252ZXJ0ZXJdIFN1cHBvcnQgdGhlIFNWRyAtPiBPVEYgRm9udCBDb252ZXJ0ZXIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCBkZDQ2MmE4Li40OWVkMzZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODMgQEAKKzIw
MTYtMDItMTUgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgorCisgICAg
ICAgIFtHVEtdW0dTdHJlYW1lcl0gQ2xlYXJLZXkgRU1FIHYxIGRlY3J5cHRpb24gc3VwcG9ydAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0MjM1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBpbnRyb2R1Y2VzIGEgbmV3IEdTdHJlYW1lciBiYXNlIGNsYXNzIChpdHNlbGYKKyAgICAgICAg
aW5oZXJpdGluZyBmcm9tIGJhc2V0cmFuc2Zvcm0pIHRoYXQgcHJvdmlkZXMgQ29tbW9uIEVuY3J5
cHRpb24KKyAgICAgICAgZGVjcnlwdGlvbiBzdXBwb3J0IGZvciBJU08gYmFzZSBtZWRpYSBmaWxl
IGZvcm1hdC4gQSBDbGVhcktleQorICAgICAgICBkZWNyeXB0b3IgdXNpbmcgdGhpcyBiYXNlIGNs
YXNzIGlzIGFsc28gcHJvdmlkZWQgYXMgYSBwcm9vZiBvZgorICAgICAgICBjb25jZXB0LgorCisg
ICAgICAgIFdoZW4gdGhlIEdTdHJlYW1lciBkZW11eGVyIGRldGVjdHMgdGhlIHByZXNlbmNlIG9m
IHByb3RlY3RlZAorICAgICAgICBjb250ZW50LCB0aGlzIGluZm9ybWF0aW9uIGlzIGJyb2FkY2Fz
dGVkIHRvIHRoZSByZXN0IG9mIHRoZQorICAgICAgICBwaXBlbGluZSBhbmQgdGhlIGRlY29kZXIg
YXR0ZW1wdHMgdG8gY3JlYXRlIGEgZGVjcnlwdG9yIGVsZW1lbnQKKyAgICAgICAgYWJsZSB0byBo
YW5kbGUgdGhpcyBwcm90ZWN0ZWQgY29udGVudC4gSW4gdGhpcyBzY2VuYXJpbyB0aGUgbWVkaWEK
KyAgICAgICAgcGxheWVyIHJlY2VpdmVzIGEgbWVzc2FnZSBmcm9tIHRoZSBkZWNyeXB0b3IgYW5k
IHRyaWdnZXJzIGtleQorICAgICAgICBuZWdvdGlhdGlvbi4gQWZ0ZXIgdGhlIGRlY3J5cHRpb24g
a2V5IHdhcyBhY3F1aXJlZCBpdCBpcyBwYXNzZWQKKyAgICAgICAgYmFjayBvbiB0byB0aGUgZGVj
cnlwdG9yIHVzaW5nIGFuIE9PQiBkb3duc3RyZWFtIEdTdHJlYW1lciBldmVudAorICAgICAgICBh
bmQgdGhlIGRlY3J5cHRvciBjYW4gb3BlcmF0ZSBmcm9tIHRoYXQgcG9pbnQuCisKKyAgICAgICAg
VGhlcmUgYXJlIG5vIGxheW91dCB0ZXN0cyB1bnNraXBwZWQgYmVjYXVzZSB0aGlzIGZlYXR1cmUg
aXMKKyAgICAgICAgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKworICAgICAgICAqIFBsYXRmb3JtR1RL
LmNtYWtlOiBBZGQgbmV3IGZpbGVzIHRvIHRoZSBidWlsZCBpZiBFTkNSWVBURURfTUVESUEgaXMg
ZW5hYmxlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmluaXRpYWxpemVHU3Ry
ZWFtZXJBbmRSZWdpc3RlcldlYktpdEVsZW1lbnRzKTogUmVnaXN0ZXIgZGVjcnlwdG9yKHMpIGhl
cmUuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnN1cHBv
cnRzVHlwZSk6IEhvb2sgb24gdG8gZXh0ZW5kZWRTdXBwb3J0c1R5cGUgKHNlZSBiZWxvdyksCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lckJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVnaXN0ZXJXZWJLaXRHU3RyZWFt
ZXJFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJCYXNlOjpoYW5kbGVTeW5jTWVzc2FnZSk6CisgICAgICAgIEhhbmRsZSBkcm0ta2V5LW5lZWRl
ZCBtZXNzYWdlcyBjb21pbmcgZnJvbSBkZWNyeXB0b3JzLgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6c3VwcG9ydHNLZXlTeXN0ZW0pOiBXZSBjYW4g
bm93IGhhbmRsZSBDbGVhcktleS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lckJhc2U6OmRpc3BhdGNoRGVjcnlwdGlvbktleSk6CisgICAgICAgIFRoaXMgaXMg
Y2FsbGVkIGFmdGVyIHRoZSBkZWNyeXB0aW9uIGtleSB3YXMgYWNxdWlyZWQuCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjphZGRLZXkpOiBCYXNpYyBp
bXBsZW1lbnRhdGlvbiBvZiBFTUUgdjEKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2U6OmdlbmVyYXRlS2V5UmVxdWVzdCk6IERpdHRvCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpjYW5jZWxLZXlSZXF1ZXN0
KTogRGl0dG8KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJh
c2U6Om5lZWRLZXkpOiBEaXR0bworICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyQmFzZTo6ZXh0ZW5kZWRTdXBwb3J0c1R5cGUpOiBIb29rIG9uIHRvIHN1cHBvcnRz
S2V5U3lzdGVtLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcDogQWRkZWQuCisg
ICAgICAgICh3ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRfY2xhc3NfaW5pdCk6CisgICAg
ICAgICh3ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRfaW5pdCk6CisgICAgICAgICh3ZWJL
aXRNZWRpYUNsZWFyS2V5RGVjcnlwdG9yRmluYWxpemUpOgorICAgICAgICAod2ViS2l0TWVkaWFD
bGVhcktleURlY3J5cHRvclJlcXVlc3REZWNyeXB0aW9uS2V5KTogTWV0aG9kIHVzZWQgdG8KKyAg
ICAgICAgdHJpZ2dlciBrZXkgbmVnb3RpYXRpb24sIHVzdWFsbHkgdGhpcyB3b3VsZCBzZW5kIGEg
ZHJtLWtleS1uZWVkZWQKKyAgICAgICAgbWVzc2FnZSBvbiB0aGUgYnVzLgorICAgICAgICAod2Vi
S2l0TWVkaWFDbGVhcktleURlY3J5cHRvckhhbmRsZUtleVJlc3BvbnNlKTogTWV0aG9kIHVzZWQg
dG8KKyAgICAgICAgc2F2ZSB0aGUgZGVjcnlwdGlvbiBrZXkgb3Igc2Vzc2lvbiBkYXRhIHJlcXVp
cmVkIHRvIHBlcmZvcm0KKyAgICAgICAgY29udGVudCBkZWNyeXB0aW9uLgorICAgICAgICAod2Vi
S2l0TWVkaWFDbGVhcktleURlY3J5cHRvclNldHVwQ2lwaGVyKTogTWV0aG9kIGNhbGxlZCBldmVy
eQorICAgICAgICB0aW1lIGEgYnVmZmVyIG5lZWRzIHRvIGJlIGRlY3J5cHRlZC4KKyAgICAgICAg
KHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JEZWNyeXB0KTogQWN0dWFsIGNvbnRlbnQgZGVj
cnlwdGlvbgorICAgICAgICB3aXRoIG9wdGlvbmFsIHN1Yi1zYW1wbGVzIGRhdGEgYW5kIGluaXRp
YWxpemF0aW9uIHZlY3Rvci4KKyAgICAgICAgKHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JS
ZWxlYXNlQ2lwaGVyKTogVGhpcyBpcyBjYWxsZWQgYWZ0ZXIKKyAgICAgICAgY29udGVudCBkZWNy
eXB0aW9uIHdhcyBwZXJmb3JtZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmg6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlw
dG9yR1N0cmVhbWVyLmNwcDogQWRkZWQuCisgICAgICAgICh3ZWJraXRfbWVkaWFfY29tbW9uX2Vu
Y3J5cHRpb25fZGVjcnlwdF9jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdF9tZWRpYV9jb21t
b25fZW5jcnlwdGlvbl9kZWNyeXB0X2luaXQpOgorICAgICAgICAod2ViS2l0TWVkaWFDb21tb25F
bmNyeXB0aW9uRGVjcnlwdG9yRmluYWxpemUpOgorICAgICAgICAod2Via2l0TWVkaWFDb21tb25F
bmNyeXB0aW9uRGVjcnlwdFRyYW5zZm9ybUNhcHMpOiBGaWx0ZXIgb3V0CisgICAgICAgIGNvbnRl
bnQgcHJvdGVjdGlvbiBpbmZvcm1hdGlvbnMgZnJvbSB0aGUgaW5jb21pbmcgY2Fwcy4KKyAgICAg
ICAgKHdlYmtpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRUcmFuc2Zvcm1JblBsYWNlKTog
UHJvY2VzcyBhbgorICAgICAgICBpbmNvbWluZyBidWZmZXIsIGNoZWNrIGl0IGhhcyBhIHByb3Rl
Y3Rpb24gbWV0YWRhdGEgc3RydWN0dXJlIGFuZAorICAgICAgICBwZXJmb3JtIGluLXBsYWNlIGNv
bnRlbnQgZGVjcnlwdGlvbiBhY2NvcmRpbmcgdG8gdGhlCisgICAgICAgIGluaXRpYWxpemF0aW9u
IHZlY3RvciBhbmQgc3ViLXNhbXBsZXMgZGF0YS4KKyAgICAgICAgKHdlYmtpdE1lZGlhQ29tbW9u
RW5jcnlwdGlvbkRlY3J5cHRTaW5rRXZlbnRIYW5kbGVyKTogSG9vayBvbiB0bworICAgICAgICBw
cm90ZWN0aW9uIGV2ZW50cyB0byB0cmlnZ2VyIGtleSBuZWdvdGlhdGlvbiBpbiB0aGUgbWVkaWEg
cGxheWVyCisgICAgICAgIGFuZCBoYW5kbGUgT09CIGV2ZW50cyBjb21pbmcgZnJvbSB0aGUgbWVk
aWEgcGxheWVyIHRvIHVuYmxvY2sKKyAgICAgICAgY29udGVudCBkZWNyeXB0aW9uIHRhc2tzLgor
ICAgICAgICAod2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yQ2hhbmdlU3RhdGUp
OiBNYWtlIHN1cmUgdG8KKyAgICAgICAgYXZvaWQgZGVhZGxvY2tzIGluIGNhc2VzIHdoZXJlIHRo
ZSBkZWNyeXB0b3IgaXMgZGlzcG9zZWQgYmVmb3JlCisgICAgICAgIHRoZSBkZWNyeXB0aW9uIGtl
eSB3YXMgcmVjZWl2ZWQuCisgICAgICAgICh3ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNy
eXB0RGVmYXVsdFNldHVwQ2lwaGVyKTogRGVmYXVsdCBkdW1teSBtZXRob2QgaW1wbGVtZW50YXRp
b24uCisgICAgICAgICh3ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0RGVmYXVsdFJl
bGVhc2VDaXBoZXIpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oOiBBZGRlZC4KKwog
MjAxNi0wMi0yNSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAg
ICAgICAgIEZvbnQgc2l6ZSBjb21wdXRlZCBzdHlsZSBpcyBpbm5hY2N1cmF0ZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUdUSy5jbWFrZQppbmRleCAwM2FkZGM2Li4zN2Q4YmRlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdU
Sy5jbWFrZQpAQCAtODI1LDMgKzgyNSwxNyBAQCBpZiAoRU5BQkxFX1NVQlRMRV9DUllQVE8pCiAg
ICAgICAgICR7R05VVExTX0xJQlJBUklFU30KICAgICApCiBlbmRpZiAoKQorCitpZiAoRU5BQkxF
X0VOQ1JZUFRFRF9NRURJQSkKKyAgICBsaXN0KEFQUEVORCBXZWJDb3JlX0lOQ0xVREVfRElSRUNU
T1JJRVMKKyAgICAgICAgJHtMSUJHQ1JZUFRfSU5DTFVERV9ESVJTfQorICAgICkKKyAgICBsaXN0
KEFQUEVORCBXZWJDb3JlX0xJQlJBUklFUworICAgICAgICAke0xJQkdDUllQVF9MSUJSQVJJRVN9
IC1sZ3BnLWVycm9yCisgICAgKQorICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JH
U3RyZWFtZXIuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRD
b21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcAorICAgICkKKworZW5kaWYgKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKaW5kZXgg
NzViYjUzMy4uYzg3OWM0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lci5jcHAKQEAgLTcwLDYgKzcwLDEwIEBACiAjaW5jbHVkZSAiQXVkaW9Tb3VyY2VQ
cm92aWRlckdTdHJlYW1lci5oIgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElB
KQorI2luY2x1ZGUgIldlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmgiCisjZW5kaWYK
KwogR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTih3ZWJraXRfbWVkaWFfcGxheWVyX2RlYnVnKTsK
ICNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF9tZWRpYV9wbGF5ZXJfZGVidWcKIApAQCAt
NzcsNiArODEsMTggQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCitzdGF0aWMgdm9pZCByZWdpc3RlcldlYktpdEdTdHJlYW1lckVsZW1lbnRzKCkKK3sKKyNp
ZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQorICAgIGlmICghd2Via2l0R3N0Q2hlY2tWZXJzaW9u
KDEsIDYsIDEpKQorICAgICAgICByZXR1cm47CisKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnRGYWN0
b3J5PiBjbGVhcktleURlY3J5cHRvckZhY3RvcnkgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZmFj
dG9yeV9maW5kKCJ3ZWJraXRjbGVhcmtleSIpKTsKKyAgICBpZiAoIWNsZWFyS2V5RGVjcnlwdG9y
RmFjdG9yeSkKKyAgICAgICAgZ3N0X2VsZW1lbnRfcmVnaXN0ZXIobnVsbHB0ciwgIndlYmtpdGNs
ZWFya2V5IiwgR1NUX1JBTktfUFJJTUFSWSArIDEwMCwgV0VCS0lUX1RZUEVfTUVESUFfQ0tfREVD
UllQVCk7CisjZW5kaWYKK30KKwogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNl
dEF1ZGlvU3RyZWFtUHJvcGVydGllc0NhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ciogcGxheWVyLCBHT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgcGxheWVyLT5zZXRBdWRpb1N0cmVh
bVByb3BlcnRpZXMob2JqZWN0KTsKQEAgLTEwNyw2ICsxMjMsOCBAQCBib29sIGluaXRpYWxpemVH
U3RyZWFtZXJBbmRSZWdpc3RlcldlYktpdEVsZW1lbnRzKCkKICAgICBpZiAoIWluaXRpYWxpemVH
U3RyZWFtZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgcmVnaXN0ZXJXZWJLaXRH
U3RyZWFtZXJFbGVtZW50cygpOworCiAgICAgR1JlZlB0cjxHc3RFbGVtZW50RmFjdG9yeT4gc3Jj
RmFjdG9yeSA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9mYWN0b3J5X2ZpbmQoIndlYmtpdHdlYnNy
YyIpKTsKICAgICBpZiAoIXNyY0ZhY3RvcnkpIHsKICAgICAgICAgR1NUX0RFQlVHX0NBVEVHT1JZ
X0lOSVQod2Via2l0X21lZGlhX3BsYXllcl9kZWJ1ZywgIndlYmtpdG1lZGlhcGxheWVyIiwgMCwg
IldlYktpdCBtZWRpYSBwbGF5ZXIiKTsKQEAgLTE3NzcsNyArMTc5NSw4IEBAIE1lZGlhUGxheWVy
OjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzdXBwb3J0c1R5cGUo
Y29uc3QgTWVkaWFFCiAgICAgLy8gc3BlYyBzYXlzIHdlIHNob3VsZCBub3QgcmV0dXJuICJwcm9i
YWJseSIgaWYgdGhlIGNvZGVjcyBzdHJpbmcgaXMgZW1wdHkKICAgICBpZiAobWltZVR5cGVDYWNo
ZSgpLmNvbnRhaW5zKHBhcmFtZXRlcnMudHlwZSkpCiAgICAgICAgIHJldHVybiBwYXJhbWV0ZXJz
LmNvZGVjcy5pc0VtcHR5KCkgPyBNZWRpYVBsYXllcjo6TWF5QmVTdXBwb3J0ZWQgOiBNZWRpYVBs
YXllcjo6SXNTdXBwb3J0ZWQ7Ci0gICAgcmV0dXJuIE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRl
ZDsKKworICAgIHJldHVybiBleHRlbmRlZFN1cHBvcnRzVHlwZShwYXJhbWV0ZXJzLCBNZWRpYVBs
YXllcjo6SXNOb3RTdXBwb3J0ZWQpOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6c2V0RG93bmxvYWRCdWZmZXJpbmcoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJh
c2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwCmluZGV4IDQyODAzOGMuLmYxMzk4N2EgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5j
cHAKQEAgLTgwLDYgKzgwLDEzIEBACiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXJCdWZmZXIuaCIKICNlbmRpZgogCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKyNpbmNs
dWRlICJVVUlELmgiCisjaW5jbHVkZSA8cnVudGltZS9KU0NJbmxpbmVzLmg+CisjaW5jbHVkZSA8
cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVWludDhBcnJh
eS5oPgorI2VuZGlmCisKICNpZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9D
QU5WQVMpCiAjaW5jbHVkZSA8Y2Fpcm8tZ2wuaD4KICNlbmRpZgpAQCAtMjI2LDEwICsyMzMsMzQg
QEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpoYW5kbGVTeW5jTWVzc2Fn
ZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogICAgICAgICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChH
U1RfRUxFTUVOVChtZXNzYWdlLT5zcmMpLCBhcHBDb250ZXh0LmdldCgpKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0obWVzc2FnZSk7CiAjZW5k
aWYgLy8gVVNFKEdTVFJFQU1FUl9HTCkKIAorI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCisg
ICAgaWYgKEdTVF9NRVNTQUdFX1RZUEUobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfRUxFTUVOVCkg
eworICAgICAgICBjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9tZXNzYWdlX2dl
dF9zdHJ1Y3R1cmUobWVzc2FnZSk7CisgICAgICAgIGlmICghZ3N0X3N0cnVjdHVyZV9oYXNfbmFt
ZShzdHJ1Y3R1cmUsICJkcm0ta2V5LW5lZWRlZCIpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgIExPR19NRURJQV9NRVNTQUdFKCJoYW5kbGluZyBkcm0ta2V5LW5lZWRlZCBt
ZXNzYWdlIik7CisKKyAgICAgICAgR3N0QnVmZmVyKiBkYXRhOworICAgICAgICBHVW5pcXVlT3V0
UHRyPGNoYXI+IGtleVN5c3RlbUlkOworICAgICAgICBnYm9vbGVhbiB2YWxpZCA9IGdzdF9zdHJ1
Y3R1cmVfZ2V0KHN0cnVjdHVyZSwgImRhdGEiLCBHU1RfVFlQRV9CVUZGRVIsICZkYXRhLCAia2V5
LXN5c3RlbS1pZCIsIEdfVFlQRV9TVFJJTkcsICZrZXlTeXN0ZW1JZC5vdXRQdHIoKSwgbnVsbHB0
cik7CisgICAgICAgIEdzdE1hcEluZm8gbWFwSW5mbzsKKyAgICAgICAgaWYgKCF2YWxpZCB8fCAh
Z3N0X2J1ZmZlcl9tYXAoZGF0YSwgJm1hcEluZm8sIEdTVF9NQVBfUkVBRCkpIHsKKyAgICAgICAg
ICAgIGdzdF9idWZmZXJfdW5yZWYoZGF0YSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKworICAgICAgICBHU1RfREVCVUcoInNjaGVkdWxpbmcga2V5TmVlZGVkIGV2ZW50
Iik7CisgICAgICAgIG5lZWRLZXkoa2V5U3lzdGVtSWQuZ2V0KCksIGNyZWF0ZUNhbm9uaWNhbFVV
SURTdHJpbmcoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4obWFwSW5m
by5kYXRhKSwgbWFwSW5mby5zaXplKTsKKyAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcChkYXRhLCAm
bWFwSW5mbyk7CisgICAgICAgIGdzdF9idWZmZXJfdW5yZWYoZGF0YSk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElBKQorCisgICAg
VU5VU0VEX1BBUkFNKG1lc3NhZ2UpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtODIzLDYg
Kzg1NCw4MSBAQCB1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjp2aWRl
b0RlY29kZWRCeXRlQ291bnQoKSBjb25zdAogICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4ocG9zaXRpb24pOwogfQogCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6
OnN1cHBvcnRzS2V5U3lzdGVtKGNvbnN0IFN0cmluZyYga2V5U3lzdGVtLCBjb25zdCBTdHJpbmcm
IG1pbWVUeXBlKQoreworICAgIExPR19NRURJQV9NRVNTQUdFKCJDaGVja2luZyBmb3IgS2V5U3lz
dGVtIHN1cHBvcnQgd2l0aCAlcyBhbmQgdHlwZSAlcyIsIGtleVN5c3RlbS51dGY4KCkuZGF0YSgp
LCBtaW1lVHlwZS51dGY4KCkuZGF0YSgpKTsKKworI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEp
CisgICAgaWYgKCF3ZWJraXRHc3RDaGVja1ZlcnNpb24oMSwgNiwgMSkpIHsKKyAgICAgICAgV0FS
Tl9NRURJQV9NRVNTQUdFKCJFbmNyeXB0ZWQgTWVkaWEgRXh0ZW5zaW9ucyByZXF1aXJlIEdTdHJl
YW1lciAxLjYiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChlcXVh
bElnbm9yaW5nQVNDSUlDYXNlKGtleVN5c3RlbSwgIm9yZy53My5jbGVhcmtleSIpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisjaWYgRU5B
QkxFKEVOQ1JZUFRFRF9NRURJQSkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFz
ZTo6ZGlzcGF0Y2hEZWNyeXB0aW9uS2V5KEdzdEJ1ZmZlciogYnVmZmVyKQoreworICAgIGdzdF9l
bGVtZW50X3NlbmRfZXZlbnQobV9waXBlbGluZS5nZXQoKSwgZ3N0X2V2ZW50X25ld19jdXN0b20o
R1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNX09PQiwKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9u
ZXcoImRybS1jaXBoZXIiLCAia2V5IiwgR1NUX1RZUEVfQlVGRkVSLCBidWZmZXIsIG51bGxwdHIp
KSk7Cit9CisKK01lZGlhUGxheWVyOjpNZWRpYUtleUV4Y2VwdGlvbiBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJCYXNlOjphZGRLZXkoY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0sIGNvbnN0IHVu
c2lnbmVkIGNoYXIqIGtleURhdGEsIHVuc2lnbmVkIGtleUxlbmd0aCwgY29uc3QgdW5zaWduZWQg
Y2hhciogLyogaW5pdERhdGEgKi8sIHVuc2lnbmVkIC8qIGluaXREYXRhTGVuZ3RoICovICwgY29u
c3QgU3RyaW5nJiBzZXNzaW9uSUQpCit7CisgICAgTE9HX01FRElBX01FU1NBR0UoImFkZEtleSBz
eXN0ZW06ICVzLCBsZW5ndGg6ICV1LCBzZXNzaW9uOiAlcyIsIGtleVN5c3RlbS51dGY4KCkuZGF0
YSgpLCBrZXlMZW5ndGgsIHNlc3Npb25JRC51dGY4KCkuZGF0YSgpKTsKKworICAgIGlmICghc3Vw
cG9ydHNLZXlTeXN0ZW0oa2V5U3lzdGVtLCBlbXB0eVN0cmluZygpKSkKKyAgICAgICAgcmV0dXJu
IE1lZGlhUGxheWVyOjpLZXlTeXN0ZW1Ob3RTdXBwb3J0ZWQ7CisKKyAgICBHUmVmUHRyPEdzdEJ1
ZmZlcj4gYnVmZmVyID0gYWRvcHRHUmVmKGdzdF9idWZmZXJfbmV3X3dyYXBwZWQoZ19tZW1kdXAo
a2V5RGF0YSwga2V5TGVuZ3RoKSwga2V5TGVuZ3RoKSk7CisgICAgZGlzcGF0Y2hEZWNyeXB0aW9u
S2V5KGJ1ZmZlci5nZXQoKSk7CisgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpOb0Vycm9yOworfQor
CitNZWRpYVBsYXllcjo6TWVkaWFLZXlFeGNlcHRpb24gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyQmFzZTo6Z2VuZXJhdGVLZXlSZXF1ZXN0KGNvbnN0IFN0cmluZyYga2V5U3lzdGVtLCBjb25z
dCB1bnNpZ25lZCBjaGFyKiBpbml0RGF0YVB0ciwgdW5zaWduZWQgaW5pdERhdGFMZW5ndGgpCit7
CisgICAgTE9HX01FRElBX01FU1NBR0UoImdlbmVyYXRpbmcga2V5IHJlcXVlc3QgZm9yIHN5c3Rl
bTogJXMiLCBrZXlTeXN0ZW0udXRmOCgpLmRhdGEoKSk7CisKKyAgICBpZiAoIXN1cHBvcnRzS2V5
U3lzdGVtKGtleVN5c3RlbSwgZW1wdHlTdHJpbmcoKSkpCisgICAgICAgIHJldHVybiBNZWRpYVBs
YXllcjo6S2V5U3lzdGVtTm90U3VwcG9ydGVkOworCisgICAgbV9wbGF5ZXItPmtleU1lc3NhZ2Uo
a2V5U3lzdGVtLCBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCksIGluaXREYXRhUHRyLCBpbml0
RGF0YUxlbmd0aCwgVVJMKCkpOworICAgIHJldHVybiBNZWRpYVBsYXllcjo6Tm9FcnJvcjsKK30K
KworTWVkaWFQbGF5ZXI6Ok1lZGlhS2V5RXhjZXB0aW9uIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lckJhc2U6OmNhbmNlbEtleVJlcXVlc3QoY29uc3QgU3RyaW5nJiAvKiBrZXlTeXN0ZW0gKi8g
LCBjb25zdCBTdHJpbmcmIC8qIHNlc3Npb25JRCAqLykKK3sKKyAgICBMT0dfTUVESUFfTUVTU0FH
RSgiY2FuY2VsS2V5UmVxdWVzdCIpOworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IE1lZGlhUGxheWVyOjpLZXlTeXN0ZW1Ob3RTdXBwb3J0ZWQ7Cit9CisKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6bmVlZEtleShjb25zdCBTdHJpbmcmIGtleVN5c3RlbSwg
Y29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGluaXREYXRhLCB1
bnNpZ25lZCBpbml0RGF0YUxlbmd0aCkKK3sKKyAgICBpZiAoIW1fcGxheWVyLT5rZXlOZWVkZWQo
a2V5U3lzdGVtLCBzZXNzaW9uSWQsIGluaXREYXRhLCBpbml0RGF0YUxlbmd0aCkpCisgICAgICAg
IEdTVF9ERUJVRygibm8gZXZlbnQgaGFuZGxlciBmb3Iga2V5IG5lZWRlZCIpOworfQorI2VuZGlm
CisKK01lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
QmFzZTo6ZXh0ZW5kZWRTdXBwb3J0c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1l
dGVycyYgcGFyYW1ldGVycywgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSByZXN1bHQpCit7Cisj
aWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKyAgICBpZiAocGFyYW1ldGVycy5rZXlTeXN0ZW0u
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgaWYgKHN1cHBvcnRzS2V5
U3lzdGVtKHBhcmFtZXRlcnMua2V5U3lzdGVtLCBlbXB0eVN0cmluZygpKSkKKyAgICAgICAgcmVz
dWx0ID0gTWVkaWFQbGF5ZXI6OklzU3VwcG9ydGVkOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
cGFyYW1ldGVycyk7CisjZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB9CiAKICNlbmRp
ZiAvLyBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJCYXNlLmgKaW5kZXggZjVlYTIxZC4uYzE2YmYzNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lckJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oCkBAIC0xMTgsMTAgKzEx
OCwyMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5k
ZXJpbmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAjZW5kaWYKIAorICAgIHN0
YXRpYyBib29sIHN1cHBvcnRzS2V5U3lzdGVtKGNvbnN0IFN0cmluZyYga2V5U3lzdGVtLCBjb25z
dCBTdHJpbmcmIG1pbWVUeXBlKTsKKyAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlw
ZSBleHRlbmRlZFN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJz
JiwgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSk7CisKICNpZiBVU0UoR1NUUkVBTUVSX0dMKQog
ICAgIHZpcnR1YWwgUGFzc05hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudFRpbWUo
KSBvdmVycmlkZTsKICNlbmRpZgogCitwcml2YXRlOgorI2lmIEVOQUJMRShFTkNSWVBURURfTUVE
SUEpCisgICAgTWVkaWFQbGF5ZXI6Ok1lZGlhS2V5RXhjZXB0aW9uIGFkZEtleShjb25zdCBTdHJp
bmcmLCBjb25zdCB1bnNpZ25lZCBjaGFyKiwgdW5zaWduZWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIq
LCB1bnNpZ25lZCwgY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CisgICAgTWVkaWFQbGF5ZXI6Ok1l
ZGlhS2V5RXhjZXB0aW9uIGdlbmVyYXRlS2V5UmVxdWVzdChjb25zdCBTdHJpbmcmLCBjb25zdCB1
bnNpZ25lZCBjaGFyKiwgdW5zaWduZWQpIG92ZXJyaWRlOworICAgIE1lZGlhUGxheWVyOjpNZWRp
YUtleUV4Y2VwdGlvbiBjYW5jZWxLZXlSZXF1ZXN0KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYpIG92ZXJyaWRlOworICAgIHZvaWQgbmVlZEtleShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJp
bmcmLCBjb25zdCB1bnNpZ25lZCBjaGFyKiwgdW5zaWduZWQpOworICAgIHZvaWQgZGlzcGF0Y2hE
ZWNyeXB0aW9uS2V5KEdzdEJ1ZmZlciopOworI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKE1lZGlhUGxheWVyKik7CiAgICAgdmlydHVhbCBH
c3RFbGVtZW50KiBjcmVhdGVWaWRlb1NpbmsoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRDbGVhcktleURlY3J5cHRvckdTdHJl
YW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2Vi
S2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjE0M2MyYjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFt
ZXIuY3BwCkBAIC0wLDAgKzEsMjU2IEBACisvKiBHU3RyZWFtZXIgQ2xlYXJLZXkgY29tbW9uIGVu
Y3J5cHRpb24gZGVjcnlwdG9yCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBNZXRyb2xvZ2ljYWwKKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRDbGVhcktl
eURlY3J5cHRvckdTdHJlYW1lci5oIgorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYg
VVNFKEdTVFJFQU1FUikKKworI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRl
IDxnY3J5cHQuaD4KKyNpbmNsdWRlIDxnc3QvYmFzZS9nc3RieXRlcmVhZGVyLmg+CisjaW5jbHVk
ZSA8d3RmL1J1bkxvb3AuaD4KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNsZWFyS2V5U2l6ZSA9
IDE2OworCitzdHJ1Y3QgX1dlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSB7CisgICAg
R1JlZlB0cjxHc3RCdWZmZXI+IGtleTsKKyAgICBnY3J5X2NpcGhlcl9oZF90IGhhbmRsZTsKK307
CisKK0dTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMod2Via2l0X21lZGlhX2NsZWFyX2tleV9kZWNy
eXB0X2RlYnVnX2NhdGVnb3J5KTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF9tZWRp
YV9jbGVhcl9rZXlfZGVjcnlwdF9kZWJ1Z19jYXRlZ29yeQorCisjZGVmaW5lIENMRUFSX0tFWV9Q
Uk9URUNUSU9OX1NZU1RFTV9JRCAiNTgxNDdlYzgtMDQyMy00NjU5LTkyZTYtZjUyYzVjZThjM2Nj
IgorCisjZGVmaW5lIHdlYmtpdF9tZWRpYV9jbGVhcl9rZXlfZGVjcnlwdF9wYXJlbnRfY2xhc3Mg
cGFyZW50X2NsYXNzCitHX0RFRklORV9UWVBFKFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0LCB3
ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHQsIFdFQktJVF9UWVBFX01FRElBX0NFTkNfREVD
UllQVCkKKworc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtUZW1wbGF0ZSA9IEdTVF9T
VEFUSUNfUEFEX1RFTVBMQVRFKCJzaW5rIiwKKyAgICBHU1RfUEFEX1NJTkssCisgICAgR1NUX1BB
RF9BTFdBWVMsCisgICAgR1NUX1NUQVRJQ19DQVBTKCJhcHBsaWNhdGlvbi94LWNlbmMsIG9yaWdp
bmFsLW1lZGlhLXR5cGU9KHN0cmluZyl2aWRlby94LWgyNjQsIHByb3RlY3Rpb24tc3lzdGVtPShz
dHJpbmcpIiBDTEVBUl9LRVlfUFJPVEVDVElPTl9TWVNURU1fSUQgIjsgIgorICAgICJhcHBsaWNh
dGlvbi94LWNlbmMsIG9yaWdpbmFsLW1lZGlhLXR5cGU9KHN0cmluZylhdWRpby9tcGVnLCBwcm90
ZWN0aW9uLXN5c3RlbT0oc3RyaW5nKSIgQ0xFQVJfS0VZX1BST1RFQ1RJT05fU1lTVEVNX0lEKSk7
CisKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNUZW1wbGF0ZSA9IEdTVF9TVEFUSUNf
UEFEX1RFTVBMQVRFKCJzcmMiLAorICAgIEdTVF9QQURfU1JDLAorICAgIEdTVF9QQURfQUxXQVlT
LAorICAgIEdTVF9TVEFUSUNfQ0FQUygidmlkZW8veC1oMjY0OyBhdWRpby9tcGVnIikpOworCisK
K3N0YXRpYyB2b2lkIHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JGaW5hbGl6ZShHT2JqZWN0
KiBvYmplY3QpCit7CisgICAgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHQqIHNlbGYgPSBXRUJL
SVRfTUVESUFfQ0tfREVDUllQVChvYmplY3QpOworICAgIFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNy
eXB0UHJpdmF0ZSogcHJpdiA9IHNlbGYtPnByaXY7CisKKyAgICBwcml2LT5+V2ViS2l0TWVkaWFD
bGVhcktleURlY3J5cHRQcml2YXRlKCk7CisKKyAgICBHU1RfQ0FMTF9QQVJFTlQoR19PQkpFQ1Rf
Q0xBU1MsIGZpbmFsaXplLCAob2JqZWN0KSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYktpdE1lZGlh
Q2xlYXJLZXlEZWNyeXB0b3JSZXF1ZXN0RGVjcnlwdGlvbktleShXZWJLaXRNZWRpYUNvbW1vbkVu
Y3J5cHRpb25EZWNyeXB0KiBzZWxmLCBHc3RCdWZmZXIqIGluaXREYXRhQnVmZmVyKQoreworICAg
IGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZShHU1RfRUxFTUVOVChzZWxmKSwKKyAgICAgICAgZ3N0
X21lc3NhZ2VfbmV3X2VsZW1lbnQoR1NUX09CSkVDVChzZWxmKSwKKyAgICAgICAgICAgIGdzdF9z
dHJ1Y3R1cmVfbmV3KCJkcm0ta2V5LW5lZWRlZCIsICJkYXRhIiwgR1NUX1RZUEVfQlVGRkVSLCBp
bml0RGF0YUJ1ZmZlciwKKyAgICAgICAgICAgICAgICAia2V5LXN5c3RlbS1pZCIsIEdfVFlQRV9T
VFJJTkcsICJvcmcudzMuY2xlYXJrZXkiLCBudWxscHRyKSkpOworfQorCitzdGF0aWMgZ2Jvb2xl
YW4gd2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRvckhhbmRsZUtleVJlc3BvbnNlKFdlYktpdE1l
ZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYsIEdzdEV2ZW50KiBldmVudCkKK3sKKyAg
ICBjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9ldmVudF9nZXRfc3RydWN0dXJl
KGV2ZW50KTsKKworICAgIGlmICghZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1cmUsICJk
cm0tY2lwaGVyIikpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIGNvbnN0IEdWYWx1ZSog
dmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShzdHJ1Y3R1cmUsICJrZXkiKTsKKyAgICBX
RUJLSVRfTUVESUFfQ0tfREVDUllQVChzZWxmKS0+cHJpdi0+a2V5ID0gYWRvcHRHUmVmKGdzdF9i
dWZmZXJfY29weShnc3RfdmFsdWVfZ2V0X2J1ZmZlcih2YWx1ZSkpKTsKKyAgICByZXR1cm4gVFJV
RTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JTZXR1
cENpcGhlcihXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmKQoreworICAg
IFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9D
S19ERUNSWVBUKHNlbGYpLT5wcml2OworCisgICAgQVNTRVJUKHByaXYtPmtleSk7CisgICAgaWYg
KCFwcml2LT5rZXkpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRGVjcnlwdGlv
biBrZXkgbm90IHByb3ZpZGVkIik7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAg
ICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X2NpcGhlcl9vcGVuKCYocHJpdi0+aGFuZGxlKSwg
R0NSWV9DSVBIRVJfQUVTMTI4LCBHQ1JZX0NJUEhFUl9NT0RFX0NUUiwgR0NSWV9DSVBIRVJfU0VD
VVJFKTsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAi
RmFpbGVkIHRvIGNyZWF0ZSBBRVMgMTI4IENUUiBjaXBoZXIgaGFuZGxlOiAlcyIsIGdwZ19zdHJl
cnJvcihlcnJvcikpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgR3N0TWFw
SW5mbyBrZXlNYXA7CisgICAgaWYgKCFnc3RfYnVmZmVyX21hcChwcml2LT5rZXkuZ2V0KCksICZr
ZXlNYXAsIEdTVF9NQVBfUkVBRCkpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAi
RmFpbGVkIHRvIG1hcCBkZWNyeXB0aW9uIGtleSIpOworICAgICAgICByZXR1cm4gRkFMU0U7Cisg
ICAgfQorCisgICAgQVNTRVJUKGtleU1hcC5zaXplID09IGNsZWFyS2V5U2l6ZSk7CisgICAgZXJy
b3IgPSBnY3J5X2NpcGhlcl9zZXRrZXkocHJpdi0+aGFuZGxlLCBrZXlNYXAuZGF0YSwga2V5TWFw
LnNpemUpOworICAgIGdzdF9idWZmZXJfdW5tYXAocHJpdi0+a2V5LmdldCgpLCAma2V5TWFwKTsK
KyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiZ2NyeV9j
aXBoZXJfc2V0a2V5IGZhaWxlZDogJXMiLCBncGdfc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgICAg
cmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jv
b2xlYW4gd2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRvckRlY3J5cHQoV2ViS2l0TWVkaWFDb21t
b25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgR3N0QnVmZmVyKiBpdkJ1ZmZlciwgR3N0QnVmZmVy
KiBidWZmZXIsIHVuc2lnbmVkIHN1YlNhbXBsZUNvdW50LCBHc3RCdWZmZXIqIHN1YlNhbXBsZXNC
dWZmZXIpCit7CisgICAgR3N0TWFwSW5mbyBpdk1hcDsKKyAgICBpZiAoIWdzdF9idWZmZXJfbWFw
KGl2QnVmZmVyLCAmaXZNYXAsIEdTVF9NQVBfUkVBRCkpIHsKKyAgICAgICAgR1NUX0VSUk9SX09C
SkVDVChzZWxmLCAiRmFpbGVkIHRvIG1hcCBJViIpOworICAgICAgICByZXR1cm4gRkFMU0U7Cisg
ICAgfQorCisgICAgdWludDhfdCBjdHJbY2xlYXJLZXlTaXplXTsKKyAgICBpZiAoaXZNYXAuc2l6
ZSA9PSA4KSB7CisgICAgICAgIG1lbXNldChjdHIgKyA4LCAwLCA4KTsKKyAgICAgICAgbWVtY3B5
KGN0ciwgaXZNYXAuZGF0YSwgOCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGl2TWFw
LnNpemUgPT0gY2xlYXJLZXlTaXplKTsKKyAgICAgICAgbWVtY3B5KGN0ciwgaXZNYXAuZGF0YSwg
Y2xlYXJLZXlTaXplKTsKKyAgICB9CisgICAgZ3N0X2J1ZmZlcl91bm1hcChpdkJ1ZmZlciwgJml2
TWFwKTsKKworICAgIFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdF
QktJVF9NRURJQV9DS19ERUNSWVBUKHNlbGYpLT5wcml2OworICAgIGdjcnlfZXJyb3JfdCBlcnJv
ciA9IGdjcnlfY2lwaGVyX3NldGN0cihwcml2LT5oYW5kbGUsIGN0ciwgY2xlYXJLZXlTaXplKTsK
KyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiZ2NyeV9j
aXBoZXJfc2V0Y3RyIGZhaWxlZDogJXMiLCBncGdfc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgICAg
cmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIEdzdE1hcEluZm8gbWFwOworICAgIGdib29sZWFu
IGJ1ZmZlck1hcHBlZCA9IGdzdF9idWZmZXJfbWFwKGJ1ZmZlciwgJm1hcCwgc3RhdGljX2Nhc3Q8
R3N0TWFwRmxhZ3M+KEdTVF9NQVBfUkVBRFdSSVRFKSk7CisgICAgaWYgKCFidWZmZXJNYXBwZWQp
IHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIG1hcCBidWZmZXIi
KTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIEdzdE1hcEluZm8gc3ViU2Ft
cGxlc01hcDsKKyAgICBnYm9vbGVhbiBzdWJzYW1wbGVzQnVmZmVyTWFwcGVkID0gZ3N0X2J1ZmZl
cl9tYXAoc3ViU2FtcGxlc0J1ZmZlciwgJnN1YlNhbXBsZXNNYXAsIEdTVF9NQVBfUkVBRCk7Cisg
ICAgaWYgKCFzdWJzYW1wbGVzQnVmZmVyTWFwcGVkKSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpF
Q1Qoc2VsZiwgIkZhaWxlZCB0byBtYXAgc3Vic2FtcGxlIGJ1ZmZlciIpOworICAgICAgICBnc3Rf
YnVmZmVyX3VubWFwKGJ1ZmZlciwgJm1hcCk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9
CisKKyAgICBHc3RCeXRlUmVhZGVyKiByZWFkZXIgPSBnc3RfYnl0ZV9yZWFkZXJfbmV3KHN1YlNh
bXBsZXNNYXAuZGF0YSwgc3ViU2FtcGxlc01hcC5zaXplKTsKKyAgICB1bnNpZ25lZCBwb3NpdGlv
biA9IDA7CisgICAgdW5zaWduZWQgc2FtcGxlSW5kZXggPSAwOworICAgIHdoaWxlIChwb3NpdGlv
biA8IG1hcC5zaXplKSB7CisgICAgICAgIGd1aW50MTYgY2xlYXJCeXRlc0NvdW50ID0gMDsKKyAg
ICAgICAgZ3VpbnQzMiBlbmNyeXB0ZWRCeXRlc0NvdW50ID0gMDsKKworICAgICAgICBpZiAoc2Ft
cGxlSW5kZXggPCBzdWJTYW1wbGVDb3VudCkgeworICAgICAgICAgICAgaWYgKCFnc3RfYnl0ZV9y
ZWFkZXJfZ2V0X3VpbnQxNl9iZShyZWFkZXIsICZjbGVhckJ5dGVzQ291bnQpIHx8ICFnc3RfYnl0
ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZShyZWFkZXIsICZlbmNyeXB0ZWRCeXRlc0NvdW50KSkgewor
ICAgICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgInVuc3VwcG9ydGVkIik7Cisg
ICAgICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2ZyZWUocmVhZGVyKTsKKyAgICAgICAgICAg
ICAgICBnc3RfYnVmZmVyX3VubWFwKGJ1ZmZlciwgJm1hcCk7CisgICAgICAgICAgICAgICAgZ3N0
X2J1ZmZlcl91bm1hcChzdWJTYW1wbGVzQnVmZmVyLCAmc3ViU2FtcGxlc01hcCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzYW1w
bGVJbmRleCsrOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY2xlYXJCeXRlc0NvdW50
ID0gMDsKKyAgICAgICAgICAgIGVuY3J5cHRlZEJ5dGVzQ291bnQgPSBtYXAuc2l6ZSAtIHBvc2l0
aW9uOworICAgICAgICB9CisKKyAgICAgICAgR1NUX1RSQUNFX09CSkVDVChzZWxmLCAiJWQgYnl0
ZXMgY2xlYXIgKHRvZG89JWQpIiwgY2xlYXJCeXRlc0NvdW50LCBtYXAuc2l6ZSAtIHBvc2l0aW9u
KTsKKyAgICAgICAgcG9zaXRpb24gKz0gY2xlYXJCeXRlc0NvdW50OworICAgICAgICBpZiAoZW5j
cnlwdGVkQnl0ZXNDb3VudCkgeworICAgICAgICAgICAgR1NUX1RSQUNFX09CSkVDVChzZWxmLCAi
JWQgYnl0ZXMgZW5jcnlwdGVkICh0b2RvPSVkKSIsIGVuY3J5cHRlZEJ5dGVzQ291bnQsIG1hcC5z
aXplIC0gcG9zaXRpb24pOworICAgICAgICAgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9kZWNyeXB0
KHByaXYtPmhhbmRsZSwgbWFwLmRhdGEgKyBwb3NpdGlvbiwgZW5jcnlwdGVkQnl0ZXNDb3VudCwg
MCwgMCk7CisgICAgICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgICAgICAgICBHU1RfRVJS
T1JfT0JKRUNUKHNlbGYsICJkZWNyeXB0aW9uIGZhaWxlZDogJXMiLCBncGdfc3RyZXJyb3IoZXJy
b3IpKTsKKyAgICAgICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfZnJlZShyZWFkZXIpOworICAg
ICAgICAgICAgICAgIGdzdF9idWZmZXJfdW5tYXAoYnVmZmVyLCAmbWFwKTsKKyAgICAgICAgICAg
ICAgICBnc3RfYnVmZmVyX3VubWFwKHN1YlNhbXBsZXNCdWZmZXIsICZzdWJTYW1wbGVzTWFwKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBwb3NpdGlvbiArPSBlbmNyeXB0ZWRCeXRlc0NvdW50OworICAgICAgICB9CisgICAgfQorCisg
ICAgZ3N0X2J5dGVfcmVhZGVyX2ZyZWUocmVhZGVyKTsKKyAgICBnc3RfYnVmZmVyX3VubWFwKGJ1
ZmZlciwgJm1hcCk7CisgICAgZ3N0X2J1ZmZlcl91bm1hcChzdWJTYW1wbGVzQnVmZmVyLCAmc3Vi
U2FtcGxlc01hcCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkIHdlYktpdE1l
ZGlhQ2xlYXJLZXlEZWNyeXB0b3JSZWxlYXNlQ2lwaGVyKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlw
dGlvbkRlY3J5cHQqIHNlbGYpCit7CisgICAgZ2NyeV9jaXBoZXJfY2xvc2UoV0VCS0lUX01FRElB
X0NLX0RFQ1JZUFQoc2VsZiktPnByaXYtPmhhbmRsZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9tZWRpYV9jbGVhcl9rZXlfZGVjcnlwdF9jbGFzc19pbml0KFdlYktpdE1lZGlhQ2xlYXJLZXlE
ZWNyeXB0Q2xhc3MqIGtsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0g
R19PQkpFQ1RfQ0xBU1Moa2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJL
aXRNZWRpYUNsZWFyS2V5RGVjcnlwdG9yRmluYWxpemU7CisKKyAgICBHc3RFbGVtZW50Q2xhc3Mq
IGVsZW1lbnRDbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTKGtsYXNzKTsKKyAgICBnc3RfZWxlbWVu
dF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlKGVsZW1lbnRDbGFzcywgZ3N0X3N0YXRpY19wYWRfdGVt
cGxhdGVfZ2V0KCZzaW5rVGVtcGxhdGUpKTsKKyAgICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFk
X3RlbXBsYXRlKGVsZW1lbnRDbGFzcywgZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0KCZzcmNU
ZW1wbGF0ZSkpOworCisgICAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YShl
bGVtZW50Q2xhc3MsCisgICAgICAgICJEZWNyeXB0IGNvbnRlbnQgZW5jcnlwdGVkIHVzaW5nIElT
T0JNRkYgQ2xlYXJLZXkgQ29tbW9uIEVuY3J5cHRpb24iLAorICAgICAgICBHU1RfRUxFTUVOVF9G
QUNUT1JZX0tMQVNTX0RFQ1JZUFRPUiwKKyAgICAgICAgIkRlY3J5cHRzIG1lZGlhIHRoYXQgaGFz
IGJlZW4gZW5jcnlwdGVkIHVzaW5nIElTT0JNRkYgQ2xlYXJLZXkgQ29tbW9uIEVuY3J5cHRpb24u
IiwKKyAgICAgICAgIlBoaWxpcHBlIE5vcm1hbmQgPHBoaWxuQGlnYWxpYS5jb20+Iik7CisKKyAg
ICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCh3ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRf
ZGVidWdfY2F0ZWdvcnksCisgICAgICAgICJ3ZWJraXRjbGVhcmtleSIsIDAsICJDbGVhcktleSBk
ZWNyeXB0b3IiKTsKKworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFz
cyogY2VuY0NsYXNzID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9DTEFTUyhrbGFzcyk7Cisg
ICAgY2VuY0NsYXNzLT5wcm90ZWN0aW9uU3lzdGVtSWQgPSBDTEVBUl9LRVlfUFJPVEVDVElPTl9T
WVNURU1fSUQ7CisgICAgY2VuY0NsYXNzLT5yZXF1ZXN0RGVjcnlwdGlvbktleSA9IEdTVF9ERUJV
R19GVU5DUFRSKHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JSZXF1ZXN0RGVjcnlwdGlvbktl
eSk7CisgICAgY2VuY0NsYXNzLT5oYW5kbGVLZXlSZXNwb25zZSA9IEdTVF9ERUJVR19GVU5DUFRS
KHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JIYW5kbGVLZXlSZXNwb25zZSk7CisgICAgY2Vu
Y0NsYXNzLT5zZXR1cENpcGhlciA9IEdTVF9ERUJVR19GVU5DUFRSKHdlYktpdE1lZGlhQ2xlYXJL
ZXlEZWNyeXB0b3JTZXR1cENpcGhlcik7CisgICAgY2VuY0NsYXNzLT5kZWNyeXB0ID0gR1NUX0RF
QlVHX0ZVTkNQVFIod2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRvckRlY3J5cHQpOworICAgIGNl
bmNDbGFzcy0+cmVsZWFzZUNpcGhlciA9IEdTVF9ERUJVR19GVU5DUFRSKHdlYktpdE1lZGlhQ2xl
YXJLZXlEZWNyeXB0b3JSZWxlYXNlQ2lwaGVyKTsKKworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJp
dmF0ZShrbGFzcywgc2l6ZW9mKFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSkpOwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRfaW5pdChXZWJL
aXRNZWRpYUNsZWFyS2V5RGVjcnlwdCogc2VsZikKK3sKKyAgICBXZWJLaXRNZWRpYUNsZWFyS2V5
RGVjcnlwdFByaXZhdGUqIHByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoc2VsZiwg
V0VCS0lUX1RZUEVfTUVESUFfQ0tfREVDUllQVCwgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQ
cml2YXRlKTsKKworICAgIGlmICghZ2NyeV9jaGVja192ZXJzaW9uKEdDUllQVF9WRVJTSU9OKSkK
KyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiTGliZ2NyeXB0IGZhaWxlZCB0byBpbml0
aWFsaXplIik7CisKKyAgICAvLyBBbGxvY2F0ZSBhIHBvb2wgb2YgMTZrIHNlY3VyZSBtZW1vcnku
IFRoaXMgbWFrZSB0aGUgc2VjdXJlIG1lbW9yeQorICAgIC8vIGF2YWlsYWJsZSBhbmQgYWxzbyBk
cm9wcyBwcml2aWxlZ2VzIHdoZXJlIG5lZWRlZC4KKyAgICBnY3J5X2NvbnRyb2woR0NSWUNUTF9J
TklUX1NFQ01FTSwgMTYzODQsIDApOworCisgICAgZ2NyeV9jb250cm9sKEdDUllDVExfSU5JVElB
TElaQVRJT05fRklOSVNIRUQsIDApOworCisgICAgc2VsZi0+cHJpdiA9IHByaXY7CisgICAgbmV3
IChwcml2KSBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUoKTsKK30KKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
V2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRDbGVhcktleURlY3J5cHRvckdTdHJlYW1lci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMjEyYzUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0
Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuaApAQCAtMCwwICsxLDU1IEBACisvKiBHU3RyZWFt
ZXIgQ2xlYXJLZXkgY29tbW9uIGVuY3J5cHRpb24gZGVjcnlwdG9yCisgKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IElnYWxpYSBTLkwKKyAqIENvcHlyaWdodCAoQykgMjAxNiBNZXRyb2xvZ2ljYWwK
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
ICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgV2ViS2l0Q2xlYXJLZXlE
ZWNyeXB0b3JHU3RyZWFtZXJfaAorI2RlZmluZSBXZWJLaXRDbGVhcktleURlY3J5cHRvckdTdHJl
YW1lcl9oCisKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBVU0UoR1NUUkVBTUVSKQor
CisjaW5jbHVkZSAiV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oIgor
CitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfTUVESUFfQ0tfREVDUllQVCAg
ICAgICAgICAod2Via2l0X21lZGlhX2NsZWFyX2tleV9kZWNyeXB0X2dldF90eXBlKCkpCisjZGVm
aW5lIFdFQktJVF9NRURJQV9DS19ERUNSWVBUKG9iaikgICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9NRURJQV9DS19ERUNSWVBULCBXZWJLaXRN
ZWRpYUNsZWFyS2V5RGVjcnlwdCkpCisjZGVmaW5lIFdFQktJVF9NRURJQV9DS19ERUNSWVBUX0NM
QVNTKGtsYXNzKSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksIFdFQktJVF9UWVBF
X01FRElBX0NLX0RFQ1JZUFQsIFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0Q2xhc3MpKQorI2Rl
ZmluZSBXRUJLSVRfSVNfTUVESUFfQ0tfREVDUllQVChvYmopICAgICAgIChHX1RZUEVfQ0hFQ0tf
SU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfTUVESUFfQ0tfREVDUllQVCkpCisjZGVm
aW5lIFdFQktJVF9JU19NRURJQV9DS19ERUNSWVBUX0NMQVNTKG9iaikgKEdfVFlQRV9DSEVDS19D
TEFTU19UWVBFKChrbGFzcyksIFdFQktJVF9UWVBFX01FRElBX0NLX0RFQ1JZUFQpKQorCit0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHQgICAgICAgIFdlYktpdE1lZGlh
Q2xlYXJLZXlEZWNyeXB0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdE1lZGlhQ2xlYXJLZXlEZWNy
eXB0Q2xhc3MgICBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdENsYXNzOwordHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSBXZWJLaXRNZWRpYUNsZWFyS2V5
RGVjcnlwdFByaXZhdGU7CisKK0dUeXBlIHdlYmtpdF9tZWRpYV9jbGVhcl9rZXlfZGVjcnlwdF9n
ZXRfdHlwZSh2b2lkKTsKKworc3RydWN0IF9XZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdCB7Cisg
ICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCBwYXJlbnQ7CisKKyAgICBXZWJL
aXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUqIHByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktp
dE1lZGlhQ2xlYXJLZXlEZWNyeXB0Q2xhc3MgeworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlw
dGlvbkRlY3J5cHRDbGFzcyBwYXJlbnRDbGFzczsKK307CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRp
ZgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0Q29tbW9uRW5j
cnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNTdhMDhlZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0
cmVhbWVyLmNwcApAQCAtMCwwICsxLDM3MSBAQAorLyogR1N0cmVhbWVyIENsZWFyS2V5IGNvbW1v
biBlbmNyeXB0aW9uIGRlY3J5cHRvcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBJZ2FsaWEg
Uy5MCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgTWV0cm9sb2dpY2FsCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgWW91VmlldyBUViBMdGQuIDxhbGV4LmFzaGxleUB5b3V2aWV3LmNvbT4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmgiCisKKyNpZiBFTkFCTEUo
RU5DUllQVEVEX01FRElBKSAmJiBVU0UoR1NUUkVBTUVSKQorI2luY2x1ZGUgIkdSZWZQdHJHU3Ry
ZWFtZXIuaCIKKyNpbmNsdWRlICJHVW5pcXVlUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSA8d3Rm
L0NvbmRpdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3Rm
L1J1bkxvb3AuaD4KKworc3RydWN0IF9XZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0
UHJpdmF0ZSB7CisgICAgYm9vbCBrZXlSZWNlaXZlZDsKKyAgICBMb2NrIG11dGV4OworICAgIENv
bmRpdGlvbiBjb25kaXRpb247Cit9OworCitHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDKHdlYmtp
dF9tZWRpYV9jb21tb25fZW5jcnlwdGlvbl9kZWNyeXB0X2RlYnVnX2NhdGVnb3J5KTsKKyNkZWZp
bmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF9tZWRpYV9jb21tb25fZW5jcnlwdGlvbl9kZWNyeXB0
X2RlYnVnX2NhdGVnb3J5CisKKyNkZWZpbmUgd2Via2l0X21lZGlhX2NvbW1vbl9lbmNyeXB0aW9u
X2RlY3J5cHRfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcworR19ERUZJTkVfVFlQRShXZWJLaXRN
ZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0LCB3ZWJraXRfbWVkaWFfY29tbW9uX2VuY3J5cHRp
b25fZGVjcnlwdCwgR1NUX1RZUEVfQkFTRV9UUkFOU0ZPUk0pCisKK3N0YXRpYyB2b2lkIHdlYktp
dE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkK
K3sKKyAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmID0gV0VCS0lU
X01FRElBX0NFTkNfREVDUllQVChvYmplY3QpOworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlw
dGlvbkRlY3J5cHRQcml2YXRlKiBwcml2ID0gc2VsZi0+cHJpdjsKKworICAgIHByaXYtPn5XZWJL
aXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJpdmF0ZSgpOworICAgIEdTVF9DQUxMX1BB
UkVOVChHX09CSkVDVF9DTEFTUywgZmluYWxpemUsIChvYmplY3QpKTsKK30KKworc3RhdGljIGdi
b29sZWFuIHdlYmtpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRTZXR1cENpcGhlcihXZWJL
aXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmKQoreworICAgIFdlYktpdE1lZGlh
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzcyogY2VuY0NsYXNzID0gV0VCS0lUX01FRElBX0NF
TkNfREVDUllQVF9HRVRfQ0xBU1Moc2VsZik7CisgICAgcmV0dXJuIGNlbmNDbGFzcy0+c2V0dXBD
aXBoZXIoc2VsZik7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdE1lZGlhQ29tbW9uRW5jcnlwdGlv
bkRlY3J5cHRSZWxlYXNlQ2lwaGVyKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQq
IHNlbGYpCit7CisgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdENsYXNzKiBj
ZW5jQ2xhc3MgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9DTEFTUyhzZWxmKTsKKyAg
ICBjZW5jQ2xhc3MtPnJlbGVhc2VDaXBoZXIoc2VsZik7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRSZXF1ZXN0RGVjcnlwdGlvbktleShXZWJLaXRN
ZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmLCBHc3RCdWZmZXIqIGluaXREYXRhQnVm
ZmVyKQoreworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzcyogY2Vu
Y0NsYXNzID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfQ0xBU1Moc2VsZik7CisgICAg
Y2VuY0NsYXNzLT5yZXF1ZXN0RGVjcnlwdGlvbktleShzZWxmLCBpbml0RGF0YUJ1ZmZlcik7Cit9
CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0SGFu
ZGxlS2V5UmVzcG9uc2UoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwg
R3N0RXZlbnQqIGV2ZW50KQoreworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5
cHRDbGFzcyogY2VuY0NsYXNzID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfQ0xBU1Mo
c2VsZik7CisgICAgcmV0dXJuIGNlbmNDbGFzcy0+aGFuZGxlS2V5UmVzcG9uc2Uoc2VsZiwgZXZl
bnQpOworfQorCitzdGF0aWMgY29uc3QgY2hhciogd2Via2l0TWVkaWFDb21tb25FbmNyeXB0aW9u
RGVjcnlwdFByb3RlY3Rpb25TeXN0ZW1JRChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNy
eXB0KiBzZWxmKQoreworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFz
cyogY2VuY0NsYXNzID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfQ0xBU1Moc2VsZik7
CisgICAgcmV0dXJuIGNlbmNDbGFzcy0+cHJvdGVjdGlvblN5c3RlbUlkOworfQorCitzdGF0aWMg
Z2Jvb2xlYW4gd2Via2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdERlY3J5cHQoV2ViS2l0
TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgR3N0QnVmZmVyKiBpdkJ1ZmZlciwg
R3N0QnVmZmVyKiBidWZmZXIsIHVuc2lnbmVkIHN1YlNhbXBsZUNvdW50LCBHc3RCdWZmZXIqIHN1
YlNhbXBsZXNCdWZmZXIpCit7CisgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlw
dENsYXNzKiBjZW5jQ2xhc3MgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9DTEFTUyhz
ZWxmKTsKKyAgICByZXR1cm4gY2VuY0NsYXNzLT5kZWNyeXB0KHNlbGYsIGl2QnVmZmVyLCBidWZm
ZXIsIHN1YlNhbXBsZUNvdW50LCBzdWJTYW1wbGVzQnVmZmVyKTsKK30KKworc3RhdGljIEdzdENh
cHMqIHdlYmtpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRUcmFuc2Zvcm1DYXBzKEdzdEJh
c2VUcmFuc2Zvcm0qIGJhc2UsIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sIEdzdENhcHMqIGNh
cHMsIEdzdENhcHMqIGZpbHRlcikKK3sKKyAgICBpZiAoZGlyZWN0aW9uID09IEdTVF9QQURfVU5L
Tk9XTikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBHc3RDYXBzKiB0cmFuc2Zvcm1l
ZENhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHkoKTsKKyAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5
cHRpb25EZWNyeXB0KiBzZWxmID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVChiYXNlKTsKKyAg
ICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MqIGtsYXNzID0gV0VCS0lU
X01FRElBX0NFTkNfREVDUllQVF9HRVRfQ0xBU1Moc2VsZik7CisKKyAgICBHU1RfREVCVUdfT0JK
RUNUKGJhc2UsICJkaXJlY3Rpb246ICVzLCBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCAiIGZpbHRl
cjogJSIgR1NUX1BUUl9GT1JNQVQsIChkaXJlY3Rpb24gPT0gR1NUX1BBRF9TUkMpID8gInNyYyIg
OiAic2luayIsIGNhcHMsIGZpbHRlcik7CisKKyAgICB1bnNpZ25lZCBzaXplID0gZ3N0X2NhcHNf
Z2V0X3NpemUoY2Fwcyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkg
eworICAgICAgICBHc3RTdHJ1Y3R1cmUqIGluID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZShjYXBz
LCBpKTsKKyAgICAgICAgR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+IG91dDsKKworICAgICAgICBp
ZiAoZGlyZWN0aW9uID09IEdTVF9QQURfU0lOSykgeworICAgICAgICAgICAgaWYgKCFnc3Rfc3Ry
dWN0dXJlX2hhc19maWVsZChpbiwgIm9yaWdpbmFsLW1lZGlhLXR5cGUiKSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgb3V0LnJlc2V0KGdzdF9zdHJ1Y3R1cmVfY29w
eShpbikpOworICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXRfbmFtZShvdXQuZ2V0KCksIGdz
dF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyhvdXQuZ2V0KCksICJvcmlnaW5hbC1tZWRpYS10eXBlIikp
OworCisgICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHRoZSBEUk0gcmVsYXRlZCBmaWVsZHMgZnJv
bSB0aGUgZG93bi1zdHJlYW0gY2Fwcy4KKyAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwg
Z3N0X3N0cnVjdHVyZV9uX2ZpZWxkcyhpbik7ICsraikgeworICAgICAgICAgICAgICAgIGNvbnN0
IGdjaGFyKiBmaWVsZE5hbWUgPSBnc3Rfc3RydWN0dXJlX250aF9maWVsZF9uYW1lKGluLCBqKTsK
KworICAgICAgICAgICAgICAgIGlmIChnX3N0cl9oYXNfcHJlZml4KGZpZWxkTmFtZSwgInByb3Rl
Y3Rpb24tc3lzdGVtIikKKyAgICAgICAgICAgICAgICAgICAgfHwgZ19zdHJfaGFzX3ByZWZpeChm
aWVsZE5hbWUsICJvcmlnaW5hbC1tZWRpYS10eXBlIikpCisgICAgICAgICAgICAgICAgICAgIGdz
dF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkKG91dC5nZXQoKSwgZmllbGROYW1lKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEdVbmlxdWVQdHI8R3N0U3RydWN0
dXJlPiB0bXA7CisgICAgICAgICAgICB0bXAucmVzZXQoZ3N0X3N0cnVjdHVyZV9jb3B5KGluKSk7
CisgICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHRoZSB2aWRlbyByZWxhdGVkIGZpZWxkcyBmcm9t
IHRoZSB1cC1zdHJlYW0gY2FwcywKKyAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhleSBhcmUgbm90
IHJlbGV2YW50IHRvIHRoZSBpbnB1dCBjYXBzIG9mIHRoaXMgZWxlbWVudCBhbmQKKyAgICAgICAg
ICAgIC8vIGNhbiBjYXVzZSBjYXBzIG5lZ290aWF0aW9uIGZhaWx1cmVzIHdpdGggYWRhcHRpdmUg
Yml0cmF0ZSBzdHJlYW1zLgorICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSBnc3Rfc3RydWN0
dXJlX25fZmllbGRzKHRtcC5nZXQoKSkgLSAxOyBpbmRleCA+PSAwOyAtLWluZGV4KSB7CisgICAg
ICAgICAgICAgICAgY29uc3QgZ2NoYXIqIGZpZWxkTmFtZSA9IGdzdF9zdHJ1Y3R1cmVfbnRoX2Zp
ZWxkX25hbWUodG1wLmdldCgpLCBpbmRleCk7CisgICAgICAgICAgICAgICAgR1NUX1RSQUNFKCJD
aGVjayBmaWVsZCBcIiVzXCIgZm9yIHJlbW92YWwiLCBmaWVsZE5hbWUpOworCisgICAgICAgICAg
ICAgICAgaWYgKCFnX3N0cmNtcDAoZmllbGROYW1lLCAiYmFzZS1wcm9maWxlIikKKyAgICAgICAg
ICAgICAgICAgICAgfHwgIWdfc3RyY21wMChmaWVsZE5hbWUsICJjb2RlY19kYXRhIikKKyAgICAg
ICAgICAgICAgICAgICAgfHwgIWdfc3RyY21wMChmaWVsZE5hbWUsICJoZWlnaHQiKQorICAgICAg
ICAgICAgICAgICAgICB8fCAhZ19zdHJjbXAwKGZpZWxkTmFtZSwgImZyYW1lcmF0ZSIpCisgICAg
ICAgICAgICAgICAgICAgIHx8ICFnX3N0cmNtcDAoZmllbGROYW1lLCAibGV2ZWwiKQorICAgICAg
ICAgICAgICAgICAgICB8fCAhZ19zdHJjbXAwKGZpZWxkTmFtZSwgInBpeGVsLWFzcGVjdC1yYXRp
byIpCisgICAgICAgICAgICAgICAgICAgIHx8ICFnX3N0cmNtcDAoZmllbGROYW1lLCAicHJvZmls
ZSIpCisgICAgICAgICAgICAgICAgICAgIHx8ICFnX3N0cmNtcDAoZmllbGROYW1lLCAicmF0ZSIp
CisgICAgICAgICAgICAgICAgICAgIHx8ICFnX3N0cmNtcDAoZmllbGROYW1lLCAid2lkdGgiKSkg
eworICAgICAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZCh0bXAuZ2V0
KCksIGZpZWxkTmFtZSk7CisgICAgICAgICAgICAgICAgICAgIEdTVF9UUkFDRSgiUmVtb3Zpbmcg
ZmllbGQgJXMiLCBmaWVsZE5hbWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgb3V0LnJlc2V0KGdzdF9zdHJ1Y3R1cmVfY29weSh0bXAuZ2V0KCkpKTsK
KyAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KG91dC5nZXQoKSwgInByb3RlY3Rpb24tc3lz
dGVtIiwgR19UWVBFX1NUUklORywga2xhc3MtPnByb3RlY3Rpb25TeXN0ZW1JZCwKKyAgICAgICAg
ICAgICAgICAib3JpZ2luYWwtbWVkaWEtdHlwZSIsIEdfVFlQRV9TVFJJTkcsIGdzdF9zdHJ1Y3R1
cmVfZ2V0X25hbWUoaW4pLCBudWxscHRyKTsKKworICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9z
ZXRfbmFtZShvdXQuZ2V0KCksICJhcHBsaWNhdGlvbi94LWNlbmMiKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGJvb2wgaXNEdXBsaWNhdGVkID0gZmFsc2U7CisgICAgICAgIHVuc2lnbmVkIHNpemUg
PSBnc3RfY2Fwc19nZXRfc2l6ZSh0cmFuc2Zvcm1lZENhcHMpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGluZGV4ID0gMDsgIWlzRHVwbGljYXRlZCAmJiBpbmRleCA8IHNpemU7ICsraW5kZXgpIHsK
KyAgICAgICAgICAgIEdzdFN0cnVjdHVyZSogaXRlbSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUo
dHJhbnNmb3JtZWRDYXBzLCBpbmRleCk7CisgICAgICAgICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9p
c19lcXVhbChpdGVtLCBvdXQuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgaXNEdXBsaWNhdGVk
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGlmICghaXNEdXBsaWNhdGVkKSB7CisgICAgICAgICAgICBnc3RfY2Fwc19h
cHBlbmRfc3RydWN0dXJlKHRyYW5zZm9ybWVkQ2Fwcywgb3V0LmdldCgpKTsKKyAgICAgICAgICAg
IG91dC5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZmlsdGVyKSB7Cisg
ICAgICAgIEdTVF9ERUJVR19PQkpFQ1QoYmFzZSwgIlVzaW5nIGZpbHRlciBjYXBzICUiIEdTVF9Q
VFJfRk9STUFULCBmaWx0ZXIpOworICAgICAgICBHc3RDYXBzKiBpbnRlcnNlY3Rpb24gPSBnc3Rf
Y2Fwc19pbnRlcnNlY3RfZnVsbCh0cmFuc2Zvcm1lZENhcHMsIGZpbHRlciwgR1NUX0NBUFNfSU5U
RVJTRUNUX0ZJUlNUKTsKKyAgICAgICAgZ3N0X2NhcHNfdW5yZWYodHJhbnNmb3JtZWRDYXBzKTsK
KyAgICAgICAgdHJhbnNmb3JtZWRDYXBzID0gaW50ZXJzZWN0aW9uOworICAgIH0KKworICAgIEdT
VF9ERUJVR19PQkpFQ1QoYmFzZSwgInJldHVybmluZyAlIiBHU1RfUFRSX0ZPUk1BVCwgdHJhbnNm
b3JtZWRDYXBzKTsKKyAgICByZXR1cm4gdHJhbnNmb3JtZWRDYXBzOworfQorCitzdGF0aWMgR3N0
Rmxvd1JldHVybiB3ZWJraXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0VHJhbnNmb3JtSW5Q
bGFjZShHc3RCYXNlVHJhbnNmb3JtKiBiYXNlLCBHc3RCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBX
ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmID0gV0VCS0lUX01FRElBX0NF
TkNfREVDUllQVChiYXNlKTsKKyAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0
UHJpdmF0ZSogcHJpdiA9IHNlbGYtPnByaXY7CisgICAgTG9ja0hvbGRlciBsb2NrZXIocHJpdi0+
bXV0ZXgpOworCisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisKKyAgICAvLyBUaGUga2V5
IG1pZ2h0IG5vdCBoYXZlIGJlZW4gcmVjZWl2ZWQgeWV0LiBXYWl0IGZvciBpdC4KKyAgICBpZiAo
IXByaXYtPmtleVJlY2VpdmVkKQorICAgICAgICBwcml2LT5jb25kaXRpb24ud2FpdChwcml2LT5t
dXRleCk7CisKKyAgICBHc3RQcm90ZWN0aW9uTWV0YSogcHJvdGVjdGlvbk1ldGEgPSBnc3RfYnVm
ZmVyX2dldF9wcm90ZWN0aW9uX21ldGEoYnVmZmVyKTsKKyAgICBpZiAoIXByb3RlY3Rpb25NZXRh
KSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQgR3N0UHJv
dGVjdGlvbiBtZXRhZGF0YSBmcm9tIGJ1ZmZlciAlcCIsIGJ1ZmZlcik7CisgICAgICAgIHJldHVy
biBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOworICAgIH0KKworICAgIEdzdE1ldGEqIG1ldGEgPSBy
ZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSk7CisgICAgZ3VpbnQgaXZT
aXplOworICAgIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfdWludChwcm90ZWN0aW9uTWV0YS0+aW5m
bywgIml2X3NpemUiLCAmaXZTaXplKSkgeworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYs
ICJGYWlsZWQgdG8gZ2V0IGl2X3NpemUiKTsKKyAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0
YShidWZmZXIsIG1ldGEpOworICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsK
KyAgICB9CisKKyAgICBnYm9vbGVhbiBlbmNyeXB0ZWQ7CisgICAgaWYgKCFnc3Rfc3RydWN0dXJl
X2dldF9ib29sZWFuKHByb3RlY3Rpb25NZXRhLT5pbmZvLCAiZW5jcnlwdGVkIiwgJmVuY3J5cHRl
ZCkpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBlbmNy
eXB0ZWQgZmxhZyIpOworICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgbWV0
YSk7CisgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOworICAgIH0KKworICAg
IGlmICghaXZTaXplIHx8ICFlbmNyeXB0ZWQpIHsKKyAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVf
bWV0YShidWZmZXIsIG1ldGEpOworICAgICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7CisgICAgfQor
CisgICAgR1NUX0RFQlVHX09CSkVDVChiYXNlLCAicHJvdGVjdGlvbiBtZXRhOiAlIiBHU1RfUFRS
X0ZPUk1BVCwgcHJvdGVjdGlvbk1ldGEtPmluZm8pOworICAgIGd1aW50IHN1YlNhbXBsZUNvdW50
OworICAgIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfdWludChwcm90ZWN0aW9uTWV0YS0+aW5mbywg
InN1YnNhbXBsZV9jb3VudCIsICZzdWJTYW1wbGVDb3VudCkpIHsKKyAgICAgICAgR1NUX0VSUk9S
X09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBzdWJzYW1wbGVfY291bnQiKTsKKyAgICAgICAg
Z3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIG1ldGEpOworICAgICAgICByZXR1cm4gR1NU
X0ZMT1dfTk9UX1NVUFBPUlRFRDsKKyAgICB9CisKKyAgICBjb25zdCBHVmFsdWUqIHZhbHVlOwor
ICAgIEdzdEJ1ZmZlciogc3ViU2FtcGxlc0J1ZmZlciA9IG51bGxwdHI7CisgICAgaWYgKHN1YlNh
bXBsZUNvdW50KSB7CisgICAgICAgIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUocHJv
dGVjdGlvbk1ldGEtPmluZm8sICJzdWJzYW1wbGVzIik7CisgICAgICAgIGlmICghdmFsdWUpIHsK
KyAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQgc3Vic2Ft
cGxlcyIpOworICAgICAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIG1ldGEp
OworICAgICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CisgICAgICAgIH0K
KyAgICAgICAgc3ViU2FtcGxlc0J1ZmZlciA9IGdzdF92YWx1ZV9nZXRfYnVmZmVyKHZhbHVlKTsK
KyAgICB9CisKKyAgICBpZiAoIXdlYmtpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRTZXR1
cENpcGhlcihzZWxmKSkgeworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQg
dG8gY29uZmlndXJlIGNpcGhlciIpOworICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1
ZmZlciwgbWV0YSk7CisgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOworICAg
IH0KKworICAgIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUocHJvdGVjdGlvbk1ldGEt
PmluZm8sICJpdiIpOworICAgIGlmICghdmFsdWUpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVD
VChzZWxmLCAiRmFpbGVkIHRvIGdldCBJViBmb3Igc2FtcGxlIik7CisgICAgICAgIHdlYmtpdE1l
ZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRSZWxlYXNlQ2lwaGVyKHNlbGYpOworICAgICAgICBn
c3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgbWV0YSk7CisgICAgICAgIHJldHVybiBHU1Rf
RkxPV19OT1RfU1VQUE9SVEVEOworICAgIH0KKworICAgIEdzdEJ1ZmZlciogaXZCdWZmZXIgPSBn
c3RfdmFsdWVfZ2V0X2J1ZmZlcih2YWx1ZSk7CisgICAgaWYgKCF3ZWJraXRNZWRpYUNvbW1vbkVu
Y3J5cHRpb25EZWNyeXB0RGVjcnlwdChzZWxmLCBpdkJ1ZmZlciwgYnVmZmVyLCBzdWJTYW1wbGVD
b3VudCwgc3ViU2FtcGxlc0J1ZmZlcikpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxm
LCAiRGVjcnlwdGlvbiBmYWlsZWQiKTsKKyAgICAgICAgd2Via2l0TWVkaWFDb21tb25FbmNyeXB0
aW9uRGVjcnlwdFJlbGVhc2VDaXBoZXIoc2VsZik7CisgICAgICAgIGdzdF9idWZmZXJfcmVtb3Zl
X21ldGEoYnVmZmVyLCBtZXRhKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JU
RUQ7CisgICAgfQorCisgICAgd2Via2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFJlbGVh
c2VDaXBoZXIoc2VsZik7CisgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIG1ldGEp
OworICAgIHJldHVybiBHU1RfRkxPV19PSzsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdE1l
ZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRTaW5rRXZlbnRIYW5kbGVyKEdzdEJhc2VUcmFuc2Zv
cm0qIHRyYW5zLCBHc3RFdmVudCogZXZlbnQpCit7CisgICAgV2ViS2l0TWVkaWFDb21tb25FbmNy
eXB0aW9uRGVjcnlwdCogc2VsZiA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFQodHJhbnMpOwor
ICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlKiBwcml2ID0gc2Vs
Zi0+cHJpdjsKKworICAgIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUoZXZlbnQpKSB7CisgICAgY2Fz
ZSBHU1RfRVZFTlRfUFJPVEVDVElPTjogeworICAgICAgICBjb25zdCBjaGFyKiBzeXN0ZW1JZDsK
KyAgICAgICAgY29uc3QgY2hhciogb3JpZ2luOworICAgICAgICBHc3RCdWZmZXIqIGluaXREYXRh
QnVmZmVyOworCisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgInJlY2VpdmVkIHByb3Rl
Y3Rpb24gZXZlbnQiKTsKKyAgICAgICAgZ3N0X2V2ZW50X3BhcnNlX3Byb3RlY3Rpb24oZXZlbnQs
ICZzeXN0ZW1JZCwgJmluaXREYXRhQnVmZmVyLCAmb3JpZ2luKTsKKyAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChzZWxmLCAic3lzdGVtSWQ6ICVzIiwgc3lzdGVtSWQpOworCisgICAgICAgIGlmICgh
Z19zdHJfZXF1YWwoc3lzdGVtSWQsIHdlYmtpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQ
cm90ZWN0aW9uU3lzdGVtSUQoc2VsZikpKSB7CisgICAgICAgICAgICBnc3RfZXZlbnRfdW5yZWYo
ZXZlbnQpOworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKworICAgICAgICAv
LyBLZWVwIHRoZSBldmVudCByZWYgYXJvdW5kIHNvIHRoYXQgdGhlIHBhcnNlZCBldmVudCBkYXRh
CisgICAgICAgIC8vIHJlbWFpbnMgdmFsaWQgdW50aWwgdGhlIGRybS1rZXktbmVlZCBtZXNzYWdl
IGhhcyBiZWVuIHNlbnQuCisgICAgICAgIEdSZWZQdHI8R3N0RXZlbnQ+IHByb3RlY3RlZEV2ZW50
KGV2ZW50KTsKKyAgICAgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBwcm90ZWN0ZWRUaGlzKEdTVF9F
TEVNRU5UX0NBU1Qoc2VsZikpOworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3By
b3RlY3RlZFRoaXMsIHByb3RlY3RlZEV2ZW50LCBpbml0RGF0YUJ1ZmZlcl0geworICAgICAgICAg
ICAgaWYgKHByb3RlY3RlZFRoaXMpCisgICAgICAgICAgICAgICAgd2Via2l0TWVkaWFDb21tb25F
bmNyeXB0aW9uRGVjcnlwdFJlcXVlc3REZWNyeXB0aW9uS2V5KFdFQktJVF9NRURJQV9DRU5DX0RF
Q1JZUFQocHJvdGVjdGVkVGhpcy5nZXQoKSksIGluaXREYXRhQnVmZmVyKTsKKyAgICAgICAgfSk7
CisKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIGNhc2UgR1NUX0VWRU5UX0NVU1RP
TV9ET1dOU1RSRUFNX09PQjogeworICAgICAgICBpZiAod2Via2l0TWVkaWFDb21tb25FbmNyeXB0
aW9uRGVjcnlwdEhhbmRsZUtleVJlc3BvbnNlKHNlbGYsIGV2ZW50KSkgeworICAgICAgICAgICAg
cHJpdi0+a2V5UmVjZWl2ZWQgPSB0cnVlOworICAgICAgICAgICAgcHJpdi0+Y29uZGl0aW9uLm5v
dGlmeU9uZSgpOworICAgICAgICB9CisKKyAgICAgICAgZ3N0X2V2ZW50X3VucmVmKGV2ZW50KTsK
KyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biBHU1RfQkFTRV9UUkFOU0ZPUk1fQ0xBU1MocGFyZW50X2NsYXNzKS0+c2lua19ldmVudCh0cmFu
cywgZXZlbnQpOworICAgIH0KKworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIEdzdFN0
YXRlQ2hhbmdlUmV0dXJuIHdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckNoYW5n
ZVN0YXRlKEdzdEVsZW1lbnQqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCit7
CisgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiA9IFdFQktJVF9N
RURJQV9DRU5DX0RFQ1JZUFQoZWxlbWVudCk7CisKKyAgICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsK
KyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgorICAgICAgICBHU1Rf
REVCVUdfT0JKRUNUKHNlbGYsICJQQVVTRUQtPlJFQURZIik7CisgICAgICAgIHNlbGYtPnByaXYt
PmNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIEdTVF9FTEVNRU5UX0NMQVNTKHBhcmVu
dF9jbGFzcyktPmNoYW5nZV9zdGF0ZShlbGVtZW50LCB0cmFuc2l0aW9uKTsKK30KKworc3RhdGlj
IGdib29sZWFuIHdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHREZWZhdWx0U2V0dXBD
aXBoZXIoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCopCit7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIHdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5
cHREZWZhdWx0UmVsZWFzZUNpcGhlcihXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0
KikKK3sKK30KKworc3RhdGljIHZvaWQgd2Via2l0X21lZGlhX2NvbW1vbl9lbmNyeXB0aW9uX2Rl
Y3J5cHRfY2xhc3NfaW5pdChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3Mq
IGtsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xB
U1Moa2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJLaXRNZWRpYUNvbW1v
bkVuY3J5cHRpb25EZWNyeXB0b3JGaW5hbGl6ZTsKKworICAgIEdTVF9ERUJVR19DQVRFR09SWV9J
TklUKHdlYmtpdF9tZWRpYV9jb21tb25fZW5jcnlwdGlvbl9kZWNyeXB0X2RlYnVnX2NhdGVnb3J5
LAorICAgICAgICAid2Via2l0Y2VuYyIsIDAsICJDb21tb24gRW5jcnlwdGlvbiBiYXNlIGNsYXNz
Iik7CisKKyAgICBHc3RFbGVtZW50Q2xhc3MqIGVsZW1lbnRDbGFzcyA9IEdTVF9FTEVNRU5UX0NM
QVNTKGtsYXNzKTsKKyAgICBlbGVtZW50Q2xhc3MtPmNoYW5nZV9zdGF0ZSA9IEdTVF9ERUJVR19G
VU5DUFRSKHdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckNoYW5nZVN0YXRlKTsK
KworICAgIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyogYmFzZVRyYW5zZm9ybUNsYXNzID0gR1NUX0JB
U0VfVFJBTlNGT1JNX0NMQVNTKGtsYXNzKTsKKyAgICBiYXNlVHJhbnNmb3JtQ2xhc3MtPnRyYW5z
Zm9ybV9pcCA9IEdTVF9ERUJVR19GVU5DUFRSKHdlYmtpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHRUcmFuc2Zvcm1JblBsYWNlKTsKKyAgICBiYXNlVHJhbnNmb3JtQ2xhc3MtPnRyYW5zZm9y
bV9jYXBzID0gR1NUX0RFQlVHX0ZVTkNQVFIod2Via2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVj
cnlwdFRyYW5zZm9ybUNhcHMpOworICAgIGJhc2VUcmFuc2Zvcm1DbGFzcy0+dHJhbnNmb3JtX2lw
X29uX3Bhc3N0aHJvdWdoID0gRkFMU0U7CisgICAgYmFzZVRyYW5zZm9ybUNsYXNzLT5zaW5rX2V2
ZW50ID0gR1NUX0RFQlVHX0ZVTkNQVFIod2Via2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlw
dFNpbmtFdmVudEhhbmRsZXIpOworCisgICAga2xhc3MtPnNldHVwQ2lwaGVyID0gR1NUX0RFQlVH
X0ZVTkNQVFIod2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdERlZmF1bHRTZXR1cENp
cGhlcik7CisgICAga2xhc3MtPnJlbGVhc2VDaXBoZXIgPSBHU1RfREVCVUdfRlVOQ1BUUih3ZWJL
aXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0RGVmYXVsdFJlbGVhc2VDaXBoZXIpOworCisg
ICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGtsYXNzLCBzaXplb2YoV2ViS2l0TWVkaWFDb21t
b25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGUpKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X21l
ZGlhX2NvbW1vbl9lbmNyeXB0aW9uX2RlY3J5cHRfaW5pdChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5
cHRpb25EZWNyeXB0KiBzZWxmKQoreworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHRQcml2YXRlKiBwcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKHNlbGYsIFdF
QktJVF9UWVBFX01FRElBX0NFTkNfREVDUllQVCwgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9u
RGVjcnlwdFByaXZhdGUpOworCisgICAgc2VsZi0+cHJpdiA9IHByaXY7CisgICAgbmV3IChwcml2
KSBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJpdmF0ZSgpOworCisgICAgR3N0
QmFzZVRyYW5zZm9ybSogYmFzZSA9IEdTVF9CQVNFX1RSQU5TRk9STShzZWxmKTsKKyAgICBnc3Rf
YmFzZV90cmFuc2Zvcm1fc2V0X2luX3BsYWNlKGJhc2UsIFRSVUUpOworICAgIGdzdF9iYXNlX3Ry
YW5zZm9ybV9zZXRfcGFzc3Rocm91Z2goYmFzZSwgRkFMU0UpOworICAgIGdzdF9iYXNlX3RyYW5z
Zm9ybV9zZXRfZ2FwX2F3YXJlKGJhc2UsIEZBTFNFKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0Q29tbW9u
RW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFt
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjU1MjE2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dl
YktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuaApAQCAtMCwwICsxLDY2IEBA
CisvKiBHU3RyZWFtZXIgQ2xlYXJLZXkgY29tbW9uIGVuY3J5cHRpb24gZGVjcnlwdG9yCisgKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwKKyAqIENvcHlyaWdodCAoQykgMjAxNiBN
ZXRyb2xvZ2ljYWwKKyAqIENvcHlyaWdodCAoQykgMjAxMyBZb3VWaWV3IFRWIEx0ZC4gPGFsZXgu
YXNobGV5QHlvdXZpZXcuY29tPgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lm
bmRlZiBXZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyX2gKKyNkZWZpbmUg
V2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lcl9oCisKKyNpZiBFTkFCTEUo
RU5DUllQVEVEX01FRElBKSAmJiBVU0UoR1NUUkVBTUVSKQorCisjaW5jbHVkZSA8Z3N0L2dzdC5o
PgorI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaD4KKworR19CRUdJTl9ERUNM
UworCisjZGVmaW5lIFdFQktJVF9UWVBFX01FRElBX0NFTkNfREVDUllQVCAgICAgICAgICAod2Vi
a2l0X21lZGlhX2NvbW1vbl9lbmNyeXB0aW9uX2RlY3J5cHRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUg
V0VCS0lUX01FRElBX0NFTkNfREVDUllQVChvYmopICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfTUVESUFfQ0VOQ19ERUNSWVBULCBXZWJLaXRN
ZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KSkKKyNkZWZpbmUgV0VCS0lUX01FRElBX0NFTkNf
REVDUllQVF9DTEFTUyhrbGFzcykgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCBX
RUJLSVRfVFlQRV9NRURJQV9DRU5DX0RFQ1JZUFQsIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlv
bkRlY3J5cHRDbGFzcykpCisjZGVmaW5lIFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX0NM
QVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCBXRUJLSVRfVFlQRV9N
RURJQV9DRU5DX0RFQ1JZUFQsIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFz
cykpCisKKyNkZWZpbmUgV0VCS0lUX0lTX01FRElBX0NFTkNfREVDUllQVChvYmopICAgICAgIChH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfTUVESUFfQ0VOQ19E
RUNSWVBUKSkKKyNkZWZpbmUgV0VCS0lUX0lTX01FRElBX0NFTkNfREVDUllQVF9DTEFTUyhvYmop
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCBXRUJLSVRfVFlQRV9NRURJQV9DRU5D
X0RFQ1JZUFQpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9u
RGVjcnlwdCAgICAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdDsKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MgICBXZWJL
aXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGUgV2ViS2l0TWVkaWFDb21tb25F
bmNyeXB0aW9uRGVjcnlwdFByaXZhdGU7CisKK0dUeXBlIHdlYmtpdF9tZWRpYV9jb21tb25fZW5j
cnlwdGlvbl9kZWNyeXB0X2dldF90eXBlKHZvaWQpOworCitzdHJ1Y3QgX1dlYktpdE1lZGlhQ29t
bW9uRW5jcnlwdGlvbkRlY3J5cHQgeworICAgIEdzdEJhc2VUcmFuc2Zvcm0gcGFyZW50OworCisg
ICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGUqIHByaXY7Cit9Owor
CitzdHJ1Y3QgX1dlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzcyB7CisgICAg
R3N0QmFzZVRyYW5zZm9ybUNsYXNzIHBhcmVudENsYXNzOworCisgICAgY29uc3QgY2hhciogcHJv
dGVjdGlvblN5c3RlbUlkOworICAgIHZvaWQgKCpyZXF1ZXN0RGVjcnlwdGlvbktleSkgKFdlYktp
dE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqLCBHc3RCdWZmZXIqIGluaXREYXRhKTsKKyAg
ICBnYm9vbGVhbiAoKmhhbmRsZUtleVJlc3BvbnNlKSAoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0
aW9uRGVjcnlwdCosIEdzdEV2ZW50KiBldmVudCk7CisgICAgZ2Jvb2xlYW4gKCpzZXR1cENpcGhl
cikgKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqKTsKKyAgICBnYm9vbGVhbiAo
KmRlY3J5cHQpIChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgR3N0QnVmZmVy
KiBpdkJ1ZmZlciwgR3N0QnVmZmVyKiBidWZmZXIsIHVuc2lnbmVkIHN1YlNhbXBsZXNDb3VudCwg
R3N0QnVmZmVyKiBzdWJTYW1wbGVzQnVmZmVyKTsKKyAgICB2b2lkICgqcmVsZWFzZUNpcGhlcikg
KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqKTsKK307CisKK0dfRU5EX0RFQ0xT
CisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvRmluZExpYkdjcnlw
dC5jbWFrZSBiL1NvdXJjZS9jbWFrZS9GaW5kTGliR2NyeXB0LmNtYWtlCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YzMwNjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
Y21ha2UvRmluZExpYkdjcnlwdC5jbWFrZQpAQCAtMCwwICsxLDkwIEBACisjLnJzdAorIyBGaW5k
TGliR2NyeXB0CisjIC0tLS0tLS0tLS0tLS0KKyMKKyMgRmluZHMgdGhlIExpYmdjcnlwdCBsaWJy
YXJ5LgorIworIyBUaGlzIHdpbGwgZGVmaW5lIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzOgorIwor
IyBgYExJQkdDUllQVF9GT1VORGBgCisjICAgICBUcnVlIGlmIHRoZSByZXF1ZXN0ZWQgdmVyc2lv
biBvZiBnY3J5cHQgd2FzIGZvdW5kCisjIGBgTElCR0NSWVBUX1ZFUlNJT05gYAorIyAgICAgVGhl
IHZlcnNpb24gb2YgZ2NyeXB0IHRoYXQgd2FzIGZvdW5kCisjIGBgTElCR0NSWVBUX0lOQ0xVREVf
RElSU2BgCisjICAgICBUaGUgZ2NyeXB0IGluY2x1ZGUgZGlyZWN0b3JpZXMKKyMgYGBMSUJHQ1JZ
UFRfTElCUkFSSUVTYGAKKyMgICAgIFRoZSBsaW5rZXIgbGlicmFyaWVzIG5lZWRlZCB0byB1c2Ug
dGhlIGdjcnlwdCBsaWJyYXJ5CisKKyMgQ29weXJpZ2h0IDIwMTQgTmljb2zDoXMgQWx2YXJleiA8
bmljb2xhcy5hbHZhcmV6QGdtYWlsLmNvbT4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
IyBhcmUgbWV0OgorIworIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFO
RCBBTlkgRVhQUkVTUyBPUgorIyBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisjIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisj
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwKKyMgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisjIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisjIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2Zp
bmRfcHJvZ3JhbShMSUJHQ1JZUFRDT05GSUdfU0NSSVBUIE5BTUVTIGxpYmdjcnlwdC1jb25maWcp
CitpZihMSUJHQ1JZUFRDT05GSUdfU0NSSVBUKQorICAgIGV4ZWN1dGVfcHJvY2VzcygKKyAgICAg
ICAgQ09NTUFORCAiJHtMSUJHQ1JZUFRDT05GSUdfU0NSSVBUfSIgLS1wcmVmaXgKKyAgICAgICAg
UkVTVUxUX1ZBUklBQkxFIENPTkZJR1NDUklQVF9SRVNVTFQKKyAgICAgICAgT1VUUFVUX1ZBUklB
QkxFIFBSRUZJWAorICAgICAgICBPVVRQVVRfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRQorICAg
ICkKKyAgICBpZiAoQ09ORklHU0NSSVBUX1JFU1VMVCBFUVVBTCAwKQorICAgICAgICBzZXQoTElC
R0NSWVBUX0xJQl9ISU5UICIke1BSRUZJWH0vbGliIikKKyAgICAgICAgc2V0KExJQkdDUllQVF9J
TkNMVURFX0hJTlQgIiR7UFJFRklYfS9pbmNsdWRlIikKKyAgICBlbmRpZigpCitlbmRpZigpCisK
K2ZpbmRfbGlicmFyeShMSUJHQ1JZUFRfTElCUkFSWQorICAgIE5BTUVTIGdjcnlwdAorICAgIEhJ
TlRTICR7TElCR0NSWVBUX0xJQl9ISU5UfQorKQorZmluZF9wYXRoKExJQkdDUllQVF9JTkNMVURF
X0RJUgorICAgIE5BTUVTIGdjcnlwdC5oCisgICAgSElOVFMgJHtMSUJHQ1JZUFRfSU5DTFVERV9I
SU5UfQorKQorCitpZihMSUJHQ1JZUFRfSU5DTFVERV9ESVIpCisgICAgZmlsZShTVFJJTkdTICR7
TElCR0NSWVBUX0lOQ0xVREVfRElSfS9nY3J5cHQuaCBHQ1JZUFRfSCBSRUdFWCAiXiNkZWZpbmUg
R0NSWVBUX1ZFUlNJT04gIikKKyAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXiNkZWZpbmUgR0NS
WVBUX1ZFUlNJT04gXCIoLiopXCIuKiQiICJcXDEiIExJQkdDUllQVF9WRVJTSU9OICIke0dDUllQ
VF9IfSIpCitlbmRpZigpCisKK2luY2x1ZGUoRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3Mp
CisKK2ZpbmRfcGFja2FnZV9oYW5kbGVfc3RhbmRhcmRfYXJncyhMaWJHY3J5cHQKKyAgICBGT1VO
RF9WQVIgTElCR0NSWVBUX0ZPVU5ECisgICAgUkVRVUlSRURfVkFSUyBMSUJHQ1JZUFRfTElCUkFS
WSBMSUJHQ1JZUFRfSU5DTFVERV9ESVIKKyAgICBWRVJTSU9OX1ZBUiBMSUJHQ1JZUFRfVkVSU0lP
TgorKQoraWYoTElCR0NSWVBUX0ZPVU5EKQorICAgIHNldChMSUJHQ1JZUFRfTElCUkFSSUVTICR7
TElCR0NSWVBUX0xJQlJBUll9KQorICAgIHNldChMSUJHQ1JZUFRfSU5DTFVERV9ESVJTICR7TElC
R0NSWVBUX0lOQ0xVREVfRElSfSkKK2VuZGlmKCkKKworbWFya19hc19hZHZhbmNlZChMSUJHQ1JZ
UFRfTElCUkFSWSBMSUJHQ1JZUFRfSU5DTFVERV9ESVIpCisKK2luY2x1ZGUoRmVhdHVyZVN1bW1h
cnkpCitzZXRfcGFja2FnZV9wcm9wZXJ0aWVzKExpYkdjcnlwdCBQUk9QRVJUSUVTCisgICAgREVT
Q1JJUFRJT04gIkEgZ2VuZXJhbCBwdXJwb3NlIGNyeXB0b2dyYXBoaWMgbGlicmFyeSBiYXNlZCBv
biB0aGUgY29kZSBmcm9tIEdudVBHLiIKKyAgICBVUkwgImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0
d2FyZS9saWJnY3J5cHQvIgorKQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0dU
Sy5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCmluZGV4IGMzNWIxZTEuLjEw
OTY4M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCisrKyBiL1Nv
dXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCkBAIC0xMzMsNiArMTMzLDcgQEAgZW5kaWYgKCkK
IFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9BQ0NFTEVSQVRFRF8yRF9D
QU5WQVMgUFVCTElDIE9GRikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJM
RV9DUkVERU5USUFMX1NUT1JBR0UgUFVCTElDIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BP
UlRfVkFMVUUoRU5BQkxFX0RSQUdfU1VQUE9SVCBQVUJMSUMgT04pCitXRUJLSVRfT1BUSU9OX0RF
RkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfRU5DUllQVEVEX01FRElBIFBVQkxJQyBPTikKIFdFQktJ
VF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9HRU9MT0NBVElPTiBQVUJMSUMgT04p
CiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfSUNPTkRBVEFCQVNFIFBV
QkxJQyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9KSVQgUFVC
TElDIE9OKQpAQCAtMzc1LDYgKzM3NiwxMyBAQCBpZiAoRU5BQkxFX1ZJREVPIE9SIEVOQUJMRV9X
RUJfQVVESU8pCiAgICAgU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0dTVFJFQU1FUiBUUlVF
KQogZW5kaWYgKCkKIAoraWYgKEVOQUJMRV9FTkNSWVBURURfTUVESUEpCisgICAgaWYgKFBDX0dT
VFJFQU1FUl9WRVJTSU9OIFZFUlNJT05fTEVTUyAxLjYuMSkKKyAgICAgICAgbWVzc2FnZShGQVRB
TF9FUlJPUiAiR1N0cmVhbWVyIDEuNiBpcyByZXF1aXJlZCB0byB1c2UgRU5BQkxFX0VOQ1JZUFRF
RF9NRURJQSIpCisgICAgZW5kaWYgKCkKKyAgICBmaW5kX3BhY2thZ2UoTGliR2NyeXB0IFJFUVVJ
UkVEKQorZW5kaWYgKCkKKwogaWYgKEVOQUJMRV9RVUFSVFpfVEFSR0VUKQogICAgIGlmIChOT1Qg
R1RLM19TVVBQT1JUU19RVUFSVFopCiAgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlJlY29t
cGlsZSBHVEsrIHdpdGggUXVhcnR6IGJhY2tlbmQgdG8gdXNlIEVOQUJMRV9RVUFSVFpfVEFSR0VU
IikKZGlmZiAtLWdpdCBhL1Rvb2xzL2d0ay9pbnN0YWxsLWRlcGVuZGVuY2llcyBiL1Rvb2xzL2d0
ay9pbnN0YWxsLWRlcGVuZGVuY2llcwppbmRleCBjYjA3ZjUxLi44MjY4NjE4IDEwMDc1NQotLS0g
YS9Ub29scy9ndGsvaW5zdGFsbC1kZXBlbmRlbmNpZXMKKysrIGIvVG9vbHMvZ3RrL2luc3RhbGwt
ZGVwZW5kZW5jaWVzCkBAIC0xNTUsNyArMTU1LDcgQEAgZnVuY3Rpb24gaW5zdGFsbERlcGVuZGVu
Y2llc1dpdGhBcHQgewogICAgICAgICBsaWJjcm9jbzMtZGV2IFwKICAgICAgICAgbGliZWdsMS1t
ZXNhLWRldiBcCiAgICAgICAgIGxpYmVwb3h5LWRldiBcCi0gICAgICAgIGxpYmdjcnlwdDExLWRl
diBcCisgICAgICAgIGxpYmdjcnlwdDIwLWRldiBcCiAgICAgICAgIGxpYmdwZy1lcnJvci1kZXYg
XAogICAgICAgICBsaWJqc29uLWdsaWItZGV2IFwKICAgICAgICAgbGlib3JjLTAuNC1kZXYgXApA
QCAtMjMxLDYgKzIzMSw3IEBAIGZ1bmN0aW9uIGluc3RhbGxEZXBlbmRlbmNpZXNXaXRoUGFjbWFu
IHsKICAgICAgICAgZmFhZDIgXAogICAgICAgICBnZW9jbHVlIFwKICAgICAgICAgZ29iamVjdC1p
bnRyb3NwZWN0aW9uIFwKKyAgICAgICAgbGliZ2NyeXB0IFwKICAgICAgICAgbWVzYSBcCiAgICAg
ICAgIG1lc2EtbGliZ2wgXAogICAgICAgICBnbnV0bHMgXApAQCAtMzU1LDYgKzM1Niw3IEBAIGZ1
bmN0aW9uIGluc3RhbGxEZXBlbmRlbmNpZXNXaXRoRG5mIHsKICAgICAgICAgbGliWHQtZGV2ZWwg
XAogICAgICAgICBsaWJYdHN0LWRldmVsIFwKICAgICAgICAgbGliZWRpdC1kZXZlbCBcCisgICAg
ICAgIGxpYmdjcnlwdC1kZXZlbCBcCiAgICAgICAgIGxpYmd1ZGV2MS1kZXZlbCBcCiAgICAgICAg
IGxpYmljdS1kZXZlbCBcCiAgICAgICAgIGxpYmpwZWctdHVyYm8tZGV2ZWwgXAotLSAKMi43LjA=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272321</attachid>
            <date>2016-02-26 06:09:47 -0800</date>
            <delta_ts>2016-02-29 09:25:31 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>59507</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSA4M2MwODQ3Y2Y4YmUxMmI5ODdkZDE1M2VmY2Q0ZTJiYmNmMWRkMWIyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBNb24sIDE1IEZlYiAyMDE2IDEwOjQ3OjUwICswMTAwClN1YmplY3Q6IFtQQVRDSF0g
cGF0Y2gKCi0tLQogQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgMTIgKwogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgODAgKysrKysKIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlICAg
ICAgICAgICAgICAgICAgIHwgIDE2ICsKIC4uLi9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyLmNwcCAgICAgIHwgIDE4ICstCiAuLi4vZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2UuY3BwICB8IDEwNyArKysrKy0KIC4uLi9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oICAgIHwgIDEyICsKIC4uLi9nc3RyZWFtZXIvV2Vi
S2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwIHwgMjUzICsrKysrKysrKysrKysrCiAu
Li4vZ3N0cmVhbWVyL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmggICB8ICA1NSAr
KysrCiAuLi4vV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5jcHAgICB8
IDM2MyArKysrKysrKysrKysrKysrKysrKysKIC4uLi9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVj
cnlwdG9yR1N0cmVhbWVyLmggICAgIHwgIDY2ICsrKysKIFNvdXJjZS9jbWFrZS9GaW5kTGliR2Ny
eXB0LmNtYWtlICAgICAgICAgICAgICAgICAgIHwgIDkwICsrKysrCiBTb3VyY2UvY21ha2UvRmlu
ZExpYkdwZ0Vycm9yLmNtYWtlICAgICAgICAgICAgICAgICB8ICA5MiArKysrKysKIFNvdXJjZS9j
bWFrZS9PcHRpb25zR1RLLmNtYWtlICAgICAgICAgICAgICAgICAgICAgIHwgICA5ICsKIFRvb2xz
L2d0ay9pbnN0YWxsLWRlcGVuZGVuY2llcyAgICAgICAgICAgICAgICAgICAgIHwgICA0ICstCiAx
NCBmaWxlcyBjaGFuZ2VkLCAxMTczIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCiBjcmVh
dGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRDbGVhcktl
eURlY3J5cHRvckdTdHJlYW1lci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0
b3JHU3RyZWFtZXIuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3Ry
ZWFtZXIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9jbWFrZS9GaW5kTGliR2NyeXB0LmNt
YWtlCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL2NtYWtlL0ZpbmRMaWJHcGdFcnJvci5jbWFr
ZQoKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBhNWFlYTYwLi44ODlk
ZTM2IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMTYtMDItMTUgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHVEtdW0dTdHJlYW1lcl0gQ2xlYXJLZXkgRU1FIHYxIGRlY3J5cHRpb24gc3Vw
cG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0
MjM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBT
b3VyY2UvY21ha2UvRmluZExpYkdjcnlwdC5jbWFrZTogQWRkZWQuCisgICAgICAgICogU291cmNl
L2NtYWtlL09wdGlvbnNHVEsuY21ha2U6IE5ldyBwdWJsaWMgb3B0aW9uIGZvcgorICAgICAgICBF
TkNSWVBURURfTUVESUEsIG9mZiBieSBkZWZhdWx0LiBUaGlzIHJlcXVpcmVzIEdTdHJlYW1lciAx
LjYueCBvcgorICAgICAgICBhYm92ZSBhbmQgbGliZ2NyeXB0LgorCiAyMDE2LTAyLTI1ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgW1dpbl0gW1NW
RyAtPiBPVEYgQ29udmVydGVyXSBTdXBwb3J0IHRoZSBTVkcgLT4gT1RGIEZvbnQgQ29udmVydGVy
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggZGQ0NjJhOC4uNDllZDM2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgz
IEBACisyMDE2LTAyLTE1ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4K
KworICAgICAgICBbR1RLXVtHU3RyZWFtZXJdIENsZWFyS2V5IEVNRSB2MSBkZWNyeXB0aW9uIHN1
cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
NDIzNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBHU3RyZWFtZXIgYmFzZSBjbGFzcyAoaXRzZWxmCisg
ICAgICAgIGluaGVyaXRpbmcgZnJvbSBiYXNldHJhbnNmb3JtKSB0aGF0IHByb3ZpZGVzIENvbW1v
biBFbmNyeXB0aW9uCisgICAgICAgIGRlY3J5cHRpb24gc3VwcG9ydCBmb3IgSVNPIGJhc2UgbWVk
aWEgZmlsZSBmb3JtYXQuIEEgQ2xlYXJLZXkKKyAgICAgICAgZGVjcnlwdG9yIHVzaW5nIHRoaXMg
YmFzZSBjbGFzcyBpcyBhbHNvIHByb3ZpZGVkIGFzIGEgcHJvb2Ygb2YKKyAgICAgICAgY29uY2Vw
dC4KKworICAgICAgICBXaGVuIHRoZSBHU3RyZWFtZXIgZGVtdXhlciBkZXRlY3RzIHRoZSBwcmVz
ZW5jZSBvZiBwcm90ZWN0ZWQKKyAgICAgICAgY29udGVudCwgdGhpcyBpbmZvcm1hdGlvbiBpcyBi
cm9hZGNhc3RlZCB0byB0aGUgcmVzdCBvZiB0aGUKKyAgICAgICAgcGlwZWxpbmUgYW5kIHRoZSBk
ZWNvZGVyIGF0dGVtcHRzIHRvIGNyZWF0ZSBhIGRlY3J5cHRvciBlbGVtZW50CisgICAgICAgIGFi
bGUgdG8gaGFuZGxlIHRoaXMgcHJvdGVjdGVkIGNvbnRlbnQuIEluIHRoaXMgc2NlbmFyaW8gdGhl
IG1lZGlhCisgICAgICAgIHBsYXllciByZWNlaXZlcyBhIG1lc3NhZ2UgZnJvbSB0aGUgZGVjcnlw
dG9yIGFuZCB0cmlnZ2VycyBrZXkKKyAgICAgICAgbmVnb3RpYXRpb24uIEFmdGVyIHRoZSBkZWNy
eXB0aW9uIGtleSB3YXMgYWNxdWlyZWQgaXQgaXMgcGFzc2VkCisgICAgICAgIGJhY2sgb24gdG8g
dGhlIGRlY3J5cHRvciB1c2luZyBhbiBPT0IgZG93bnN0cmVhbSBHU3RyZWFtZXIgZXZlbnQKKyAg
ICAgICAgYW5kIHRoZSBkZWNyeXB0b3IgY2FuIG9wZXJhdGUgZnJvbSB0aGF0IHBvaW50LgorCisg
ICAgICAgIFRoZXJlIGFyZSBubyBsYXlvdXQgdGVzdHMgdW5za2lwcGVkIGJlY2F1c2UgdGhpcyBm
ZWF0dXJlIGlzCisgICAgICAgIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisKKyAgICAgICAgKiBQbGF0
Zm9ybUdUSy5jbWFrZTogQWRkIG5ldyBmaWxlcyB0byB0aGUgYnVpbGQgaWYgRU5DUllQVEVEX01F
RElBIGlzIGVuYWJsZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbml0aWFs
aXplR1N0cmVhbWVyQW5kUmVnaXN0ZXJXZWJLaXRFbGVtZW50cyk6IFJlZ2lzdGVyIGRlY3J5cHRv
cihzKSBoZXJlLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpzdXBwb3J0c1R5cGUpOiBIb29rIG9uIHRvIGV4dGVuZGVkU3VwcG9ydHNUeXBlIChzZWUgYmVs
b3cpLAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlZ2lzdGVyV2ViS2l0
R1N0cmVhbWVyRWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyQmFzZTo6aGFuZGxlU3luY01lc3NhZ2UpOgorICAgICAgICBIYW5kbGUgZHJtLWtl
eS1uZWVkZWQgbWVzc2FnZXMgY29taW5nIGZyb20gZGVjcnlwdG9ycy4KKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnN1cHBvcnRzS2V5U3lzdGVtKTog
V2UgY2FuIG5vdyBoYW5kbGUgQ2xlYXJLZXkuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJCYXNlOjpkaXNwYXRjaERlY3J5cHRpb25LZXkpOgorICAgICAgICBU
aGlzIGlzIGNhbGxlZCBhZnRlciB0aGUgZGVjcnlwdGlvbiBrZXkgd2FzIGFjcXVpcmVkLgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6YWRkS2V5KTog
QmFzaWMgaW1wbGVtZW50YXRpb24gb2YgRU1FIHYxCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpnZW5lcmF0ZUtleVJlcXVlc3QpOiBEaXR0bworICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6Y2FuY2VsS2V5
UmVxdWVzdCk6IERpdHRvCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlOjpuZWVkS2V5KTogRGl0dG8KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lckJhc2U6OmV4dGVuZGVkU3VwcG9ydHNUeXBlKTogSG9vayBvbiB0byBz
dXBwb3J0c0tleVN5c3RlbS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9XZWJLaXRDbGVhcktleURlY3J5cHRvckdTdHJlYW1lci5jcHA6IEFk
ZGVkLgorICAgICAgICAod2Via2l0X21lZGlhX2NsZWFyX2tleV9kZWNyeXB0X2NsYXNzX2luaXQp
OgorICAgICAgICAod2Via2l0X21lZGlhX2NsZWFyX2tleV9kZWNyeXB0X2luaXQpOgorICAgICAg
ICAod2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRvckZpbmFsaXplKToKKyAgICAgICAgKHdlYktp
dE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JSZXF1ZXN0RGVjcnlwdGlvbktleSk6IE1ldGhvZCB1c2Vk
IHRvCisgICAgICAgIHRyaWdnZXIga2V5IG5lZ290aWF0aW9uLCB1c3VhbGx5IHRoaXMgd291bGQg
c2VuZCBhIGRybS1rZXktbmVlZGVkCisgICAgICAgIG1lc3NhZ2Ugb24gdGhlIGJ1cy4KKyAgICAg
ICAgKHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JIYW5kbGVLZXlSZXNwb25zZSk6IE1ldGhv
ZCB1c2VkIHRvCisgICAgICAgIHNhdmUgdGhlIGRlY3J5cHRpb24ga2V5IG9yIHNlc3Npb24gZGF0
YSByZXF1aXJlZCB0byBwZXJmb3JtCisgICAgICAgIGNvbnRlbnQgZGVjcnlwdGlvbi4KKyAgICAg
ICAgKHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JTZXR1cENpcGhlcik6IE1ldGhvZCBjYWxs
ZWQgZXZlcnkKKyAgICAgICAgdGltZSBhIGJ1ZmZlciBuZWVkcyB0byBiZSBkZWNyeXB0ZWQuCisg
ICAgICAgICh3ZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdG9yRGVjcnlwdCk6IEFjdHVhbCBjb250
ZW50IGRlY3J5cHRpb24KKyAgICAgICAgd2l0aCBvcHRpb25hbCBzdWItc2FtcGxlcyBkYXRhIGFu
ZCBpbml0aWFsaXphdGlvbiB2ZWN0b3IuCisgICAgICAgICh3ZWJLaXRNZWRpYUNsZWFyS2V5RGVj
cnlwdG9yUmVsZWFzZUNpcGhlcik6IFRoaXMgaXMgY2FsbGVkIGFmdGVyCisgICAgICAgIGNvbnRl
bnQgZGVjcnlwdGlvbiB3YXMgcGVyZm9ybWVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9XZWJLaXRDbGVhcktleURlY3J5cHRvckdTdHJlYW1lci5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0Q29tbW9uRW5jcnlwdGlv
bkRlY3J5cHRvckdTdHJlYW1lci5jcHA6IEFkZGVkLgorICAgICAgICAod2Via2l0X21lZGlhX2Nv
bW1vbl9lbmNyeXB0aW9uX2RlY3J5cHRfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfbWVk
aWFfY29tbW9uX2VuY3J5cHRpb25fZGVjcnlwdF9pbml0KToKKyAgICAgICAgKHdlYktpdE1lZGlh
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdE1lZGlh
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRUcmFuc2Zvcm1DYXBzKTogRmlsdGVyIG91dAorICAgICAg
ICBjb250ZW50IHByb3RlY3Rpb24gaW5mb3JtYXRpb25zIGZyb20gdGhlIGluY29taW5nIGNhcHMu
CisgICAgICAgICh3ZWJraXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0VHJhbnNmb3JtSW5Q
bGFjZSk6IFByb2Nlc3MgYW4KKyAgICAgICAgaW5jb21pbmcgYnVmZmVyLCBjaGVjayBpdCBoYXMg
YSBwcm90ZWN0aW9uIG1ldGFkYXRhIHN0cnVjdHVyZSBhbmQKKyAgICAgICAgcGVyZm9ybSBpbi1w
bGFjZSBjb250ZW50IGRlY3J5cHRpb24gYWNjb3JkaW5nIHRvIHRoZQorICAgICAgICBpbml0aWFs
aXphdGlvbiB2ZWN0b3IgYW5kIHN1Yi1zYW1wbGVzIGRhdGEuCisgICAgICAgICh3ZWJraXRNZWRp
YUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0U2lua0V2ZW50SGFuZGxlcik6IEhvb2sgb24gdG8KKyAg
ICAgICAgcHJvdGVjdGlvbiBldmVudHMgdG8gdHJpZ2dlciBrZXkgbmVnb3RpYXRpb24gaW4gdGhl
IG1lZGlhIHBsYXllcgorICAgICAgICBhbmQgaGFuZGxlIE9PQiBldmVudHMgY29taW5nIGZyb20g
dGhlIG1lZGlhIHBsYXllciB0byB1bmJsb2NrCisgICAgICAgIGNvbnRlbnQgZGVjcnlwdGlvbiB0
YXNrcy4KKyAgICAgICAgKHdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckNoYW5n
ZVN0YXRlKTogTWFrZSBzdXJlIHRvCisgICAgICAgIGF2b2lkIGRlYWRsb2NrcyBpbiBjYXNlcyB3
aGVyZSB0aGUgZGVjcnlwdG9yIGlzIGRpc3Bvc2VkIGJlZm9yZQorICAgICAgICB0aGUgZGVjcnlw
dGlvbiBrZXkgd2FzIHJlY2VpdmVkLgorICAgICAgICAod2ViS2l0TWVkaWFDb21tb25FbmNyeXB0
aW9uRGVjcnlwdERlZmF1bHRTZXR1cENpcGhlcik6IERlZmF1bHQgZHVtbXkgbWV0aG9kIGltcGxl
bWVudGF0aW9uLgorICAgICAgICAod2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdERl
ZmF1bHRSZWxlYXNlQ2lwaGVyKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuaDogQWRk
ZWQuCisKIDIwMTYtMDItMjUgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNv
bT4KIAogICAgICAgICBGb250IHNpemUgY29tcHV0ZWQgc3R5bGUgaXMgaW5uYWNjdXJhdGUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggMDNhZGRjNi4uZDQ5YmIwZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1HVEsuY21ha2UKQEAgLTgyNSwzICs4MjUsMTkgQEAgaWYgKEVOQUJMRV9TVUJUTEVfQ1JZ
UFRPKQogICAgICAgICAke0dOVVRMU19MSUJSQVJJRVN9CiAgICAgKQogZW5kaWYgKCkKKworaWYg
KEVOQUJMRV9FTkNSWVBURURfTUVESUEpCisgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9JTkNMVURF
X0RJUkVDVE9SSUVTCisgICAgICAgICR7TElCR0NSWVBUX0lOQ0xVREVfRElSU30KKyAgICAgICAg
JHtMSUJHUEdfRVJST1JfSU5DTFVERV9ESVJTfQorICAgICkKKyAgICBsaXN0KEFQUEVORCBXZWJD
b3JlX0xJQlJBUklFUworICAgICAgICAke0xJQkdDUllQVF9MSUJSQVJJRVN9CisgICAgICAgICR7
TElCR1BHX0VSUk9SX0xJQlJBUklFU30KKyAgICApCisgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9T
T1VSQ0VTCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRDbGVhcktl
eURlY3J5cHRvckdTdHJlYW1lci5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwCisgICAgKQor
CitlbmRpZiAoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
LmNwcAppbmRleCA3NWJiNTMzLi40OGU1NTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJU
aW1lUmFuZ2VzLmgiCisjaW5jbHVkZSAiV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIu
aCIKICNpbmNsdWRlICJXZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuaCIKICNpbmNsdWRlIDxnc3Qv
Z3N0Lmg+CiAjaW5jbHVkZSA8Z3N0L3BidXRpbHMvbWlzc2luZy1wbHVnaW5zLmg+CkBAIC03Nyw2
ICs3OCwxOCBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K3N0YXRpYyB2b2lkIHJlZ2lzdGVyV2ViS2l0R1N0cmVhbWVyRWxlbWVudHMoKQoreworI2lmIEVO
QUJMRShFTkNSWVBURURfTUVESUEpCisgICAgaWYgKCF3ZWJraXRHc3RDaGVja1ZlcnNpb24oMSwg
NiwgMSkpCisgICAgICAgIHJldHVybjsKKworICAgIEdSZWZQdHI8R3N0RWxlbWVudEZhY3Rvcnk+
IGNsZWFyS2V5RGVjcnlwdG9yRmFjdG9yeSA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9mYWN0b3J5
X2ZpbmQoIndlYmtpdGNsZWFya2V5IikpOworICAgIGlmICghY2xlYXJLZXlEZWNyeXB0b3JGYWN0
b3J5KQorICAgICAgICBnc3RfZWxlbWVudF9yZWdpc3RlcihudWxscHRyLCAid2Via2l0Y2xlYXJr
ZXkiLCBHU1RfUkFOS19QUklNQVJZICsgMTAwLCBXRUJLSVRfVFlQRV9DTEVBUl9LRVlfREVDUllQ
VE9SKTsKKyNlbmRpZgorfQorCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0
QXVkaW9TdHJlYW1Qcm9wZXJ0aWVzQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
KiBwbGF5ZXIsIEdPYmplY3QqIG9iamVjdCkKIHsKICAgICBwbGF5ZXItPnNldEF1ZGlvU3RyZWFt
UHJvcGVydGllcyhvYmplY3QpOwpAQCAtMTA3LDYgKzEyMCw4IEBAIGJvb2wgaW5pdGlhbGl6ZUdT
dHJlYW1lckFuZFJlZ2lzdGVyV2ViS2l0RWxlbWVudHMoKQogICAgIGlmICghaW5pdGlhbGl6ZUdT
dHJlYW1lcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICByZWdpc3RlcldlYktpdEdT
dHJlYW1lckVsZW1lbnRzKCk7CisKICAgICBHUmVmUHRyPEdzdEVsZW1lbnRGYWN0b3J5PiBzcmNG
YWN0b3J5ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2ZhY3RvcnlfZmluZCgid2Via2l0d2Vic3Jj
IikpOwogICAgIGlmICghc3JjRmFjdG9yeSkgewogICAgICAgICBHU1RfREVCVUdfQ0FURUdPUllf
SU5JVCh3ZWJraXRfbWVkaWFfcGxheWVyX2RlYnVnLCAid2Via2l0bWVkaWFwbGF5ZXIiLCAwLCAi
V2ViS2l0IG1lZGlhIHBsYXllciIpOwpAQCAtMTc3Nyw3ICsxNzkyLDggQEAgTWVkaWFQbGF5ZXI6
OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnN1cHBvcnRzVHlwZShj
b25zdCBNZWRpYUUKICAgICAvLyBzcGVjIHNheXMgd2Ugc2hvdWxkIG5vdCByZXR1cm4gInByb2Jh
Ymx5IiBpZiB0aGUgY29kZWNzIHN0cmluZyBpcyBlbXB0eQogICAgIGlmIChtaW1lVHlwZUNhY2hl
KCkuY29udGFpbnMocGFyYW1ldGVycy50eXBlKSkKICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcnMu
Y29kZWNzLmlzRW1wdHkoKSA/IE1lZGlhUGxheWVyOjpNYXlCZVN1cHBvcnRlZCA6IE1lZGlhUGxh
eWVyOjpJc1N1cHBvcnRlZDsKLSAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVk
OworCisgICAgcmV0dXJuIGV4dGVuZGVkU3VwcG9ydHNUeXBlKHBhcmFtZXRlcnMsIE1lZGlhUGxh
eWVyOjpJc05vdFN1cHBvcnRlZCk7CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpzZXREb3dubG9hZEJ1ZmZlcmluZygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFz
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5jcHAKaW5kZXggNDI4MDM4Yy4uMmY0OTA1MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmNw
cApAQCAtODAsNiArODAsMTMgQEAKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
ckJ1ZmZlci5oIgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQorI2luY2x1
ZGUgIlVVSUQuaCIKKyNpbmNsdWRlIDxydW50aW1lL0pTQ0lubGluZXMuaD4KKyNpbmNsdWRlIDxy
dW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9VaW50OEFycmF5
Lmg+CisjZW5kaWYKKwogI2lmIFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NB
TlZBUykKICNpbmNsdWRlIDxjYWlyby1nbC5oPgogI2VuZGlmCkBAIC0yMjYsMTAgKzIzMywzMSBA
QCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmhhbmRsZVN5bmNNZXNzYWdl
KEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiAgICAgICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0KEdT
VF9FTEVNRU5UKG1lc3NhZ2UtPnNyYyksIGFwcENvbnRleHQuZ2V0KCkpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShtZXNzYWdlKTsKICNlbmRp
ZiAvLyBVU0UoR1NUUkVBTUVSX0dMKQogCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKyAg
ICBpZiAoR1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9FTEVNRU5UKSB7
CisgICAgICAgIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X21lc3NhZ2VfZ2V0
X3N0cnVjdHVyZShtZXNzYWdlKTsKKyAgICAgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2hhc19uYW1l
KHN0cnVjdHVyZSwgImRybS1rZXktbmVlZGVkIikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgTE9HX01FRElBX01FU1NBR0UoImhhbmRsaW5nIGRybS1rZXktbmVlZGVkIG1l
c3NhZ2UiKTsKKworICAgICAgICBHUmVmUHRyPEdzdEJ1ZmZlcj4gZGF0YTsKKyAgICAgICAgR1Vu
aXF1ZU91dFB0cjxjaGFyPiBrZXlTeXN0ZW1JZDsKKyAgICAgICAgZ2Jvb2xlYW4gdmFsaWQgPSBn
c3Rfc3RydWN0dXJlX2dldChzdHJ1Y3R1cmUsICJkYXRhIiwgR1NUX1RZUEVfQlVGRkVSLCAmZGF0
YS5vdXRQdHIoKSwgImtleS1zeXN0ZW0taWQiLCBHX1RZUEVfU1RSSU5HLCAma2V5U3lzdGVtSWQu
b3V0UHRyKCksIG51bGxwdHIpOworICAgICAgICBHc3RNYXBJbmZvIG1hcEluZm87CisgICAgICAg
IGlmICghdmFsaWQgfHwgIWdzdF9idWZmZXJfbWFwKGRhdGEuZ2V0KCksICZtYXBJbmZvLCBHU1Rf
TUFQX1JFQUQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIEdTVF9ERUJV
Rygic2NoZWR1bGluZyBrZXlOZWVkZWQgZXZlbnQiKTsKKyAgICAgICAgbmVlZEtleShrZXlTeXN0
ZW1JZC5nZXQoKSwgY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpLCByZWludGVycHJldF9jYXN0
PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihtYXBJbmZvLmRhdGEpLCBtYXBJbmZvLnNpemUpOworICAg
ICAgICBnc3RfYnVmZmVyX3VubWFwKGRhdGEuZ2V0KCksICZtYXBJbmZvKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpCisKKyAg
ICBVTlVTRURfUEFSQU0obWVzc2FnZSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC04MjMs
NiArODUxLDgxIEBAIHVuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnZp
ZGVvRGVjb2RlZEJ5dGVDb3VudCgpIGNvbnN0CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihwb3NpdGlvbik7CiB9CiAKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFz
ZTo6c3VwcG9ydHNLZXlTeXN0ZW0oY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0sIGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUpCit7CisgICAgTE9HX01FRElBX01FU1NBR0UoIkNoZWNraW5nIGZvciBLZXlT
eXN0ZW0gc3VwcG9ydCB3aXRoICVzIGFuZCB0eXBlICVzIiwga2V5U3lzdGVtLnV0ZjgoKS5kYXRh
KCksIG1pbWVUeXBlLnV0ZjgoKS5kYXRhKCkpOworCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJ
QSkKKyAgICBpZiAoIXdlYmtpdEdzdENoZWNrVmVyc2lvbigxLCA2LCAxKSkgeworICAgICAgICBX
QVJOX01FRElBX01FU1NBR0UoIkVuY3J5cHRlZCBNZWRpYSBFeHRlbnNpb25zIHJlcXVpcmUgR1N0
cmVhbWVyIDEuNiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGVx
dWFsSWdub3JpbmdBU0NJSUNhc2Uoa2V5U3lzdGVtLCAib3JnLnczLmNsZWFya2V5IikpCisgICAg
ICAgIHJldHVybiB0cnVlOworI2VuZGlmCisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKyNpZiBF
TkFCTEUoRU5DUllQVEVEX01FRElBKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJC
YXNlOjpkaXNwYXRjaERlY3J5cHRpb25LZXkoR3N0QnVmZmVyKiBidWZmZXIpCit7CisgICAgZ3N0
X2VsZW1lbnRfc2VuZF9ldmVudChtX3BpcGVsaW5lLmdldCgpLCBnc3RfZXZlbnRfbmV3X2N1c3Rv
bShHU1RfRVZFTlRfQ1VTVE9NX0RPV05TVFJFQU1fT09CLAorICAgICAgICBnc3Rfc3RydWN0dXJl
X25ldygiZHJtLWNpcGhlciIsICJrZXkiLCBHU1RfVFlQRV9CVUZGRVIsIGJ1ZmZlciwgbnVsbHB0
cikpKTsKK30KKworTWVkaWFQbGF5ZXI6Ok1lZGlhS2V5RXhjZXB0aW9uIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2U6OmFkZEtleShjb25zdCBTdHJpbmcmIGtleVN5c3RlbSwgY29uc3Qg
dW5zaWduZWQgY2hhcioga2V5RGF0YSwgdW5zaWduZWQga2V5TGVuZ3RoLCBjb25zdCB1bnNpZ25l
ZCBjaGFyKiAvKiBpbml0RGF0YSAqLywgdW5zaWduZWQgLyogaW5pdERhdGFMZW5ndGggKi8gLCBj
b25zdCBTdHJpbmcmIHNlc3Npb25JZCkKK3sKKyAgICBMT0dfTUVESUFfTUVTU0FHRSgiYWRkS2V5
IHN5c3RlbTogJXMsIGxlbmd0aDogJXUsIHNlc3Npb246ICVzIiwga2V5U3lzdGVtLnV0ZjgoKS5k
YXRhKCksIGtleUxlbmd0aCwgc2Vzc2lvbklkLnV0ZjgoKS5kYXRhKCkpOworCisgICAgaWYgKCFz
dXBwb3J0c0tleVN5c3RlbShrZXlTeXN0ZW0sIGVtcHR5U3RyaW5nKCkpKQorICAgICAgICByZXR1
cm4gTWVkaWFQbGF5ZXI6OktleVN5c3RlbU5vdFN1cHBvcnRlZDsKKworICAgIEdSZWZQdHI8R3N0
QnVmZmVyPiBidWZmZXIgPSBhZG9wdEdSZWYoZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZChnX21lbWR1
cChrZXlEYXRhLCBrZXlMZW5ndGgpLCBrZXlMZW5ndGgpKTsKKyAgICBkaXNwYXRjaERlY3J5cHRp
b25LZXkoYnVmZmVyLmdldCgpKTsKKyAgICByZXR1cm4gTWVkaWFQbGF5ZXI6Ok5vRXJyb3I7Cit9
CisKK01lZGlhUGxheWVyOjpNZWRpYUtleUV4Y2VwdGlvbiBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlOjpnZW5lcmF0ZUtleVJlcXVlc3QoY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0sIGNv
bnN0IHVuc2lnbmVkIGNoYXIqIGluaXREYXRhUHRyLCB1bnNpZ25lZCBpbml0RGF0YUxlbmd0aCkK
K3sKKyAgICBMT0dfTUVESUFfTUVTU0FHRSgiZ2VuZXJhdGluZyBrZXkgcmVxdWVzdCBmb3Igc3lz
dGVtOiAlcyIsIGtleVN5c3RlbS51dGY4KCkuZGF0YSgpKTsKKworICAgIGlmICghc3VwcG9ydHNL
ZXlTeXN0ZW0oa2V5U3lzdGVtLCBlbXB0eVN0cmluZygpKSkKKyAgICAgICAgcmV0dXJuIE1lZGlh
UGxheWVyOjpLZXlTeXN0ZW1Ob3RTdXBwb3J0ZWQ7CisKKyAgICBtX3BsYXllci0+a2V5TWVzc2Fn
ZShrZXlTeXN0ZW0sIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSwgaW5pdERhdGFQdHIsIGlu
aXREYXRhTGVuZ3RoLCBVUkwoKSk7CisgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpOb0Vycm9yOwor
fQorCitNZWRpYVBsYXllcjo6TWVkaWFLZXlFeGNlcHRpb24gTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyQmFzZTo6Y2FuY2VsS2V5UmVxdWVzdChjb25zdCBTdHJpbmcmIC8qIGtleVN5c3RlbSAq
LyAsIGNvbnN0IFN0cmluZyYgLyogc2Vzc2lvbklkICovKQoreworICAgIExPR19NRURJQV9NRVNT
QUdFKCJjYW5jZWxLZXlSZXF1ZXN0Iik7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gTWVkaWFQbGF5ZXI6OktleVN5c3RlbU5vdFN1cHBvcnRlZDsKK30KKwordm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpuZWVkS2V5KGNvbnN0IFN0cmluZyYga2V5U3lzdGVt
LCBjb25zdCBTdHJpbmcmIHNlc3Npb25JZCwgY29uc3QgdW5zaWduZWQgY2hhciogaW5pdERhdGEs
IHVuc2lnbmVkIGluaXREYXRhTGVuZ3RoKQoreworICAgIGlmICghbV9wbGF5ZXItPmtleU5lZWRl
ZChrZXlTeXN0ZW0sIHNlc3Npb25JZCwgaW5pdERhdGEsIGluaXREYXRhTGVuZ3RoKSkKKyAgICAg
ICAgR1NUX0RFQlVHKCJubyBldmVudCBoYW5kbGVyIGZvciBrZXkgbmVlZGVkIik7Cit9CisjZW5k
aWYKKworTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJCYXNlOjpleHRlbmRlZFN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJh
bWV0ZXJzJiBwYXJhbWV0ZXJzLCBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIHJlc3VsdCkKK3sK
KyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQorICAgIGlmIChwYXJhbWV0ZXJzLmtleVN5c3Rl
bS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBpZiAoc3VwcG9ydHNL
ZXlTeXN0ZW0ocGFyYW1ldGVycy5rZXlTeXN0ZW0sIGVtcHR5U3RyaW5nKCkpKQorICAgICAgICBy
ZXN1bHQgPSBNZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShwYXJhbWV0ZXJzKTsKKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0KIAogI2Vu
ZGlmIC8vIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2UuaAppbmRleCBmNWVhMjFkLi5jMTZiZjM1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmgKQEAgLTExOCwxMCAr
MTE4LDIyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBY2NlbGVyYXRlZFJl
bmRlcmluZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KICNlbmRpZgogCisgICAg
c3RhdGljIGJvb2wgc3VwcG9ydHNLZXlTeXN0ZW0oY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0sIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpOworICAgIHN0YXRpYyBNZWRpYVBsYXllcjo6U3VwcG9ydHNU
eXBlIGV4dGVuZGVkU3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRl
cnMmLCBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlKTsKKwogI2lmIFVTRShHU1RSRUFNRVJfR0wp
CiAgICAgdmlydHVhbCBQYXNzTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50VGlt
ZSgpIG92ZXJyaWRlOwogI2VuZGlmCiAKK3ByaXZhdGU6CisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9N
RURJQSkKKyAgICBNZWRpYVBsYXllcjo6TWVkaWFLZXlFeGNlcHRpb24gYWRkS2V5KGNvbnN0IFN0
cmluZyYsIGNvbnN0IHVuc2lnbmVkIGNoYXIqLCB1bnNpZ25lZCwgY29uc3QgdW5zaWduZWQgY2hh
ciosIHVuc2lnbmVkLCBjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyAgICBNZWRpYVBsYXllcjo6
TWVkaWFLZXlFeGNlcHRpb24gZ2VuZXJhdGVLZXlSZXF1ZXN0KGNvbnN0IFN0cmluZyYsIGNvbnN0
IHVuc2lnbmVkIGNoYXIqLCB1bnNpZ25lZCkgb3ZlcnJpZGU7CisgICAgTWVkaWFQbGF5ZXI6Ok1l
ZGlhS2V5RXhjZXB0aW9uIGNhbmNlbEtleVJlcXVlc3QoY29uc3QgU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJikgb3ZlcnJpZGU7CisgICAgdm9pZCBuZWVkS2V5KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0
cmluZyYsIGNvbnN0IHVuc2lnbmVkIGNoYXIqLCB1bnNpZ25lZCk7CisgICAgdm9pZCBkaXNwYXRj
aERlY3J5cHRpb25LZXkoR3N0QnVmZmVyKik7CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UoTWVkaWFQbGF5ZXIqKTsKICAgICB2aXJ0dWFs
IEdzdEVsZW1lbnQqIGNyZWF0ZVZpZGVvU2luaygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0
cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9X
ZWJLaXRDbGVhcktleURlY3J5cHRvckdTdHJlYW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZjFhY2Y0NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRDbGVhcktleURlY3J5cHRvckdTdHJl
YW1lci5jcHAKQEAgLTAsMCArMSwyNTMgQEAKKy8qIEdTdHJlYW1lciBDbGVhcktleSBjb21tb24g
ZW5jcnlwdGlvbiBkZWNyeXB0b3IKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMu
TAorICogQ29weXJpZ2h0IChDKSAyMDE2IE1ldHJvbG9naWNhbAorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdENsZWFy
S2V5RGVjcnlwdG9yR1N0cmVhbWVyLmgiCisKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAm
JiBVU0UoR1NUUkVBTUVSKQorCisjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1
ZGUgPGdjcnlwdC5oPgorI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuaD4KKyNpbmNs
dWRlIDx3dGYvUnVuTG9vcC5oPgorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2xlYXJLZXlTaXpl
ID0gMTY7CisKK3N0cnVjdCBfV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JQcml2YXRlIHsKKyAgICBH
UmVmUHRyPEdzdEJ1ZmZlcj4ga2V5OworICAgIGdjcnlfY2lwaGVyX2hkX3QgaGFuZGxlOworfTsK
KworR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyh3ZWJraXRfY2xlYXJfa2V5X2RlY3J5cHRvcl9k
ZWJ1Z19jYXRlZ29yeSk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfY2xlYXJfa2V5
X2RlY3J5cHRvcl9kZWJ1Z19jYXRlZ29yeQorCisjZGVmaW5lIENMRUFSX0tFWV9QUk9URUNUSU9O
X1NZU1RFTV9JRCAiNTgxNDdlYzgtMDQyMy00NjU5LTkyZTYtZjUyYzVjZThjM2NjIgorCisjZGVm
aW5lIHdlYmtpdF9jbGVhcl9rZXlfZGVjcnlwdG9yX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MK
K0dfREVGSU5FX1RZUEUoV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3IsIHdlYmtpdF9jbGVhcl9rZXlf
ZGVjcnlwdG9yLCBXRUJLSVRfVFlQRV9DT01NT05fRU5DUllQVElPTl9ERUNSWVBUT1IpCisKK3N0
YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rVGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9U
RU1QTEFURSgic2luayIsCisgICAgR1NUX1BBRF9TSU5LLAorICAgIEdTVF9QQURfQUxXQVlTLAor
ICAgIEdTVF9TVEFUSUNfQ0FQUygiYXBwbGljYXRpb24veC1jZW5jLCBvcmlnaW5hbC1tZWRpYS10
eXBlPShzdHJpbmcpdmlkZW8veC1oMjY0LCBwcm90ZWN0aW9uLXN5c3RlbT0oc3RyaW5nKSIgQ0xF
QVJfS0VZX1BST1RFQ1RJT05fU1lTVEVNX0lEICI7ICIKKyAgICAiYXBwbGljYXRpb24veC1jZW5j
LCBvcmlnaW5hbC1tZWRpYS10eXBlPShzdHJpbmcpYXVkaW8vbXBlZywgcHJvdGVjdGlvbi1zeXN0
ZW09KHN0cmluZykiIENMRUFSX0tFWV9QUk9URUNUSU9OX1NZU1RFTV9JRCkpOworCitzdGF0aWMg
R3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjVGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFU
RSgic3JjIiwKKyAgICBHU1RfUEFEX1NSQywKKyAgICBHU1RfUEFEX0FMV0FZUywKKyAgICBHU1Rf
U1RBVElDX0NBUFMoInZpZGVvL3gtaDI2NDsgYXVkaW8vbXBlZyIpKTsKKworCitzdGF0aWMgdm9p
ZCB3ZWJLaXRDbGVhcktleURlY3J5cHRvckZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAg
ICBXRUJLSVRfQ0xFQVJfS0VZX0RFQ1JZUFRPUihvYmplY3QpLT5wcml2LT5+V2ViS2l0Q2xlYXJL
ZXlEZWNyeXB0b3JQcml2YXRlKCk7CisKKyAgICBHU1RfQ0FMTF9QQVJFTlQoR19PQkpFQ1RfQ0xB
U1MsIGZpbmFsaXplLCAob2JqZWN0KSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYktpdENsZWFyS2V5
RGVjcnlwdG9yUmVxdWVzdERlY3J5cHRpb25LZXkoV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5
cHRvciogc2VsZiwgR3N0QnVmZmVyKiBpbml0RGF0YUJ1ZmZlcikKK3sKKyAgICBnc3RfZWxlbWVu
dF9wb3N0X21lc3NhZ2UoR1NUX0VMRU1FTlQoc2VsZiksCisgICAgICAgIGdzdF9tZXNzYWdlX25l
d19lbGVtZW50KEdTVF9PQkpFQ1Qoc2VsZiksCisgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX25l
dygiZHJtLWtleS1uZWVkZWQiLCAiZGF0YSIsIEdTVF9UWVBFX0JVRkZFUiwgaW5pdERhdGFCdWZm
ZXIsCisgICAgICAgICAgICAgICAgImtleS1zeXN0ZW0taWQiLCBHX1RZUEVfU1RSSU5HLCAib3Jn
LnczLmNsZWFya2V5IiwgbnVsbHB0cikpKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYktpdENs
ZWFyS2V5RGVjcnlwdG9ySGFuZGxlS2V5UmVzcG9uc2UoV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHRvciogc2VsZiwgR3N0RXZlbnQqIGV2ZW50KQoreworICAgIGNvbnN0IEdzdFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gZ3N0X2V2ZW50X2dldF9zdHJ1Y3R1cmUoZXZlbnQpOworCisgICAgaWYg
KCFnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImRybS1jaXBoZXIiKSkKKyAgICAg
ICAgcmV0dXJuIEZBTFNFOworCisgICAgY29uc3QgR1ZhbHVlKiB2YWx1ZSA9IGdzdF9zdHJ1Y3R1
cmVfZ2V0X3ZhbHVlKHN0cnVjdHVyZSwgImtleSIpOworICAgIFdFQktJVF9DTEVBUl9LRVlfREVD
UllQVE9SKHNlbGYpLT5wcml2LT5rZXkgPSBhZG9wdEdSZWYoZ3N0X2J1ZmZlcl9jb3B5KGdzdF92
YWx1ZV9nZXRfYnVmZmVyKHZhbHVlKSkpOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMg
Z2Jvb2xlYW4gd2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JTZXR1cENpcGhlcihXZWJLaXRDb21tb25F
bmNyeXB0aW9uRGVjcnlwdG9yKiBzZWxmKQoreworICAgIFdlYktpdENsZWFyS2V5RGVjcnlwdG9y
UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9DTEVBUl9LRVlfREVDUllQVE9SKHNlbGYpLT5wcml2Owor
CisgICAgQVNTRVJUKHByaXYtPmtleSk7CisgICAgaWYgKCFwcml2LT5rZXkpIHsKKyAgICAgICAg
R1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRGVjcnlwdGlvbiBrZXkgbm90IHByb3ZpZGVkIik7Cisg
ICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBn
Y3J5X2NpcGhlcl9vcGVuKCYocHJpdi0+aGFuZGxlKSwgR0NSWV9DSVBIRVJfQUVTMTI4LCBHQ1JZ
X0NJUEhFUl9NT0RFX0NUUiwgR0NSWV9DSVBIRVJfU0VDVVJFKTsKKyAgICBpZiAoZXJyb3IpIHsK
KyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGNyZWF0ZSBBRVMgMTI4
IENUUiBjaXBoZXIgaGFuZGxlOiAlcyIsIGdwZ19zdHJlcnJvcihlcnJvcikpOworICAgICAgICBy
ZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgR3N0TWFwSW5mbyBrZXlNYXA7CisgICAgaWYgKCFn
c3RfYnVmZmVyX21hcChwcml2LT5rZXkuZ2V0KCksICZrZXlNYXAsIEdTVF9NQVBfUkVBRCkpIHsK
KyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIG1hcCBkZWNyeXB0aW9u
IGtleSIpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgQVNTRVJUKGtleU1h
cC5zaXplID09IGNsZWFyS2V5U2l6ZSk7CisgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRrZXko
cHJpdi0+aGFuZGxlLCBrZXlNYXAuZGF0YSwga2V5TWFwLnNpemUpOworICAgIGdzdF9idWZmZXJf
dW5tYXAocHJpdi0+a2V5LmdldCgpLCAma2V5TWFwKTsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAg
ICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiZ2NyeV9jaXBoZXJfc2V0a2V5IGZhaWxlZDogJXMi
LCBncGdfc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKwor
ICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0Q2xlYXJLZXlEZWNy
eXB0b3JEZWNyeXB0KFdlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3IqIHNlbGYsIEdzdEJ1
ZmZlciogaXZCdWZmZXIsIEdzdEJ1ZmZlciogYnVmZmVyLCB1bnNpZ25lZCBzdWJTYW1wbGVDb3Vu
dCwgR3N0QnVmZmVyKiBzdWJTYW1wbGVzQnVmZmVyKQoreworICAgIEdzdE1hcEluZm8gaXZNYXA7
CisgICAgaWYgKCFnc3RfYnVmZmVyX21hcChpdkJ1ZmZlciwgJml2TWFwLCBHU1RfTUFQX1JFQUQp
KSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBtYXAgSVYiKTsK
KyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIHVpbnQ4X3QgY3RyW2NsZWFyS2V5
U2l6ZV07CisgICAgaWYgKGl2TWFwLnNpemUgPT0gOCkgeworICAgICAgICBtZW1zZXQoY3RyICsg
OCwgMCwgOCk7CisgICAgICAgIG1lbWNweShjdHIsIGl2TWFwLmRhdGEsIDgpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIEFTU0VSVChpdk1hcC5zaXplID09IGNsZWFyS2V5U2l6ZSk7CisgICAgICAg
IG1lbWNweShjdHIsIGl2TWFwLmRhdGEsIGNsZWFyS2V5U2l6ZSk7CisgICAgfQorICAgIGdzdF9i
dWZmZXJfdW5tYXAoaXZCdWZmZXIsICZpdk1hcCk7CisKKyAgICBXZWJLaXRDbGVhcktleURlY3J5
cHRvclByaXZhdGUqIHByaXYgPSBXRUJLSVRfQ0xFQVJfS0VZX0RFQ1JZUFRPUihzZWxmKS0+cHJp
djsKKyAgICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRjdHIocHJpdi0+aGFu
ZGxlLCBjdHIsIGNsZWFyS2V5U2l6ZSk7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIEdTVF9F
UlJPUl9PQkpFQ1Qoc2VsZiwgImdjcnlfY2lwaGVyX3NldGN0ciBmYWlsZWQ6ICVzIiwgZ3BnX3N0
cmVycm9yKGVycm9yKSk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBHc3RN
YXBJbmZvIG1hcDsKKyAgICBnYm9vbGVhbiBidWZmZXJNYXBwZWQgPSBnc3RfYnVmZmVyX21hcChi
dWZmZXIsICZtYXAsIHN0YXRpY19jYXN0PEdzdE1hcEZsYWdzPihHU1RfTUFQX1JFQURXUklURSkp
OworICAgIGlmICghYnVmZmVyTWFwcGVkKSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2Vs
ZiwgIkZhaWxlZCB0byBtYXAgYnVmZmVyIik7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9
CisKKyAgICBHc3RNYXBJbmZvIHN1YlNhbXBsZXNNYXA7CisgICAgZ2Jvb2xlYW4gc3Vic2FtcGxl
c0J1ZmZlck1hcHBlZCA9IGdzdF9idWZmZXJfbWFwKHN1YlNhbXBsZXNCdWZmZXIsICZzdWJTYW1w
bGVzTWFwLCBHU1RfTUFQX1JFQUQpOworICAgIGlmICghc3Vic2FtcGxlc0J1ZmZlck1hcHBlZCkg
eworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gbWFwIHN1YnNhbXBs
ZSBidWZmZXIiKTsKKyAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcChidWZmZXIsICZtYXApOworICAg
ICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgR3N0Qnl0ZVJlYWRlciogcmVhZGVyID0g
Z3N0X2J5dGVfcmVhZGVyX25ldyhzdWJTYW1wbGVzTWFwLmRhdGEsIHN1YlNhbXBsZXNNYXAuc2l6
ZSk7CisgICAgdW5zaWduZWQgcG9zaXRpb24gPSAwOworICAgIHVuc2lnbmVkIHNhbXBsZUluZGV4
ID0gMDsKKyAgICB3aGlsZSAocG9zaXRpb24gPCBtYXAuc2l6ZSkgeworICAgICAgICBndWludDE2
IGNsZWFyQnl0ZXNDb3VudCA9IDA7CisgICAgICAgIGd1aW50MzIgZW5jcnlwdGVkQnl0ZXNDb3Vu
dCA9IDA7CisKKyAgICAgICAgaWYgKHNhbXBsZUluZGV4IDwgc3ViU2FtcGxlQ291bnQpIHsKKyAg
ICAgICAgICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfYmUocmVhZGVyLCAmY2xl
YXJCeXRlc0NvdW50KSB8fCAhZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUocmVhZGVyLCAm
ZW5jcnlwdGVkQnl0ZXNDb3VudCkpIHsKKyAgICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNU
KHNlbGYsICJ1bnN1cHBvcnRlZCIpOworICAgICAgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9m
cmVlKHJlYWRlcik7CisgICAgICAgICAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcChidWZmZXIsICZt
YXApOworICAgICAgICAgICAgICAgIGdzdF9idWZmZXJfdW5tYXAoc3ViU2FtcGxlc0J1ZmZlciwg
JnN1YlNhbXBsZXNNYXApOworICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2FtcGxlSW5kZXgrKzsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGNsZWFyQnl0ZXNDb3VudCA9IDA7CisgICAgICAgICAgICBlbmNyeXB0ZWRCeXRl
c0NvdW50ID0gbWFwLnNpemUgLSBwb3NpdGlvbjsKKyAgICAgICAgfQorCisgICAgICAgIEdTVF9U
UkFDRV9PQkpFQ1Qoc2VsZiwgIiVkIGJ5dGVzIGNsZWFyICh0b2RvPSVkKSIsIGNsZWFyQnl0ZXND
b3VudCwgbWFwLnNpemUgLSBwb3NpdGlvbik7CisgICAgICAgIHBvc2l0aW9uICs9IGNsZWFyQnl0
ZXNDb3VudDsKKyAgICAgICAgaWYgKGVuY3J5cHRlZEJ5dGVzQ291bnQpIHsKKyAgICAgICAgICAg
IEdTVF9UUkFDRV9PQkpFQ1Qoc2VsZiwgIiVkIGJ5dGVzIGVuY3J5cHRlZCAodG9kbz0lZCkiLCBl
bmNyeXB0ZWRCeXRlc0NvdW50LCBtYXAuc2l6ZSAtIHBvc2l0aW9uKTsKKyAgICAgICAgICAgIGVy
cm9yID0gZ2NyeV9jaXBoZXJfZGVjcnlwdChwcml2LT5oYW5kbGUsIG1hcC5kYXRhICsgcG9zaXRp
b24sIGVuY3J5cHRlZEJ5dGVzQ291bnQsIDAsIDApOworICAgICAgICAgICAgaWYgKGVycm9yKSB7
CisgICAgICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiZGVjcnlwdGlvbiBmYWls
ZWQ6ICVzIiwgZ3BnX3N0cmVycm9yKGVycm9yKSk7CisgICAgICAgICAgICAgICAgZ3N0X2J5dGVf
cmVhZGVyX2ZyZWUocmVhZGVyKTsKKyAgICAgICAgICAgICAgICBnc3RfYnVmZmVyX3VubWFwKGJ1
ZmZlciwgJm1hcCk7CisgICAgICAgICAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcChzdWJTYW1wbGVz
QnVmZmVyLCAmc3ViU2FtcGxlc01hcCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcG9zaXRpb24gKz0gZW5jcnlwdGVkQnl0ZXNDb3Vu
dDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGdzdF9ieXRlX3JlYWRlcl9mcmVlKHJlYWRlcik7
CisgICAgZ3N0X2J1ZmZlcl91bm1hcChidWZmZXIsICZtYXApOworICAgIGdzdF9idWZmZXJfdW5t
YXAoc3ViU2FtcGxlc0J1ZmZlciwgJnN1YlNhbXBsZXNNYXApOworICAgIHJldHVybiBUUlVFOwor
fQorCitzdGF0aWMgdm9pZCB3ZWJLaXRDbGVhcktleURlY3J5cHRvclJlbGVhc2VDaXBoZXIoV2Vi
S2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvciogc2VsZikKK3sKKyAgICBnY3J5X2NpcGhlcl9j
bG9zZShXRUJLSVRfQ0xFQVJfS0VZX0RFQ1JZUFRPUihzZWxmKS0+cHJpdi0+aGFuZGxlKTsKK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X2NsZWFyX2tleV9kZWNyeXB0b3JfY2xhc3NfaW5pdChXZWJL
aXRDbGVhcktleURlY3J5cHRvckNsYXNzKiBrbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdv
YmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmZp
bmFsaXplID0gd2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JGaW5hbGl6ZTsKKworICAgIEdzdEVsZW1l
bnRDbGFzcyogZWxlbWVudENsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1Moa2xhc3MpOworICAgIGdz
dF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUoZWxlbWVudENsYXNzLCBnc3Rfc3RhdGlj
X3BhZF90ZW1wbGF0ZV9nZXQoJnNpbmtUZW1wbGF0ZSkpOworICAgIGdzdF9lbGVtZW50X2NsYXNz
X2FkZF9wYWRfdGVtcGxhdGUoZWxlbWVudENsYXNzLCBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9n
ZXQoJnNyY1RlbXBsYXRlKSk7CisKKyAgICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21l
dGFkYXRhKGVsZW1lbnRDbGFzcywKKyAgICAgICAgIkRlY3J5cHQgY29udGVudCBlbmNyeXB0ZWQg
dXNpbmcgSVNPQk1GRiBDbGVhcktleSBDb21tb24gRW5jcnlwdGlvbiIsCisgICAgICAgIEdTVF9F
TEVNRU5UX0ZBQ1RPUllfS0xBU1NfREVDUllQVE9SLAorICAgICAgICAiRGVjcnlwdHMgbWVkaWEg
dGhhdCBoYXMgYmVlbiBlbmNyeXB0ZWQgdXNpbmcgSVNPQk1GRiBDbGVhcktleSBDb21tb24gRW5j
cnlwdGlvbi4iLAorICAgICAgICAiUGhpbGlwcGUgTm9ybWFuZCA8cGhpbG5AaWdhbGlhLmNvbT4i
KTsKKworICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF9jbGVhcl9rZXlfZGVjcnlw
dG9yX2RlYnVnX2NhdGVnb3J5LAorICAgICAgICAid2Via2l0Y2xlYXJrZXkiLCAwLCAiQ2xlYXJL
ZXkgZGVjcnlwdG9yIik7CisKKyAgICBXZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yQ2xh
c3MqIGNvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JDbGFzcyA9IFdFQktJVF9DT01NT05fRU5DUllQ
VElPTl9ERUNSWVBUT1JfQ0xBU1Moa2xhc3MpOworICAgIGNvbW1vbkVuY3J5cHRpb25EZWNyeXB0
b3JDbGFzcy0+cHJvdGVjdGlvblN5c3RlbUlkID0gQ0xFQVJfS0VZX1BST1RFQ1RJT05fU1lTVEVN
X0lEOworICAgIGNvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JDbGFzcy0+cmVxdWVzdERlY3J5cHRp
b25LZXkgPSBHU1RfREVCVUdfRlVOQ1BUUih3ZWJLaXRDbGVhcktleURlY3J5cHRvclJlcXVlc3RE
ZWNyeXB0aW9uS2V5KTsKKyAgICBjb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yQ2xhc3MtPmhhbmRs
ZUtleVJlc3BvbnNlID0gR1NUX0RFQlVHX0ZVTkNQVFIod2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JI
YW5kbGVLZXlSZXNwb25zZSk7CisgICAgY29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckNsYXNzLT5z
ZXR1cENpcGhlciA9IEdTVF9ERUJVR19GVU5DUFRSKHdlYktpdENsZWFyS2V5RGVjcnlwdG9yU2V0
dXBDaXBoZXIpOworICAgIGNvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JDbGFzcy0+ZGVjcnlwdCA9
IEdTVF9ERUJVR19GVU5DUFRSKHdlYktpdENsZWFyS2V5RGVjcnlwdG9yRGVjcnlwdCk7CisgICAg
Y29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckNsYXNzLT5yZWxlYXNlQ2lwaGVyID0gR1NUX0RFQlVH
X0ZVTkNQVFIod2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JSZWxlYXNlQ2lwaGVyKTsKKworICAgIGdf
dHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9mKFdlYktpdENsZWFyS2V5RGVjcnlw
dG9yUHJpdmF0ZSkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfY2xlYXJfa2V5X2RlY3J5cHRv
cl9pbml0KFdlYktpdENsZWFyS2V5RGVjcnlwdG9yKiBzZWxmKQoreworICAgIFdlYktpdENsZWFy
S2V5RGVjcnlwdG9yUHJpdmF0ZSogcHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShz
ZWxmLCBXRUJLSVRfVFlQRV9DTEVBUl9LRVlfREVDUllQVE9SLCBXZWJLaXRDbGVhcktleURlY3J5
cHRvclByaXZhdGUpOworCisgICAgaWYgKCFnY3J5X2NoZWNrX3ZlcnNpb24oR0NSWVBUX1ZFUlNJ
T04pKQorICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJMaWJnY3J5cHQgZmFpbGVkIHRv
IGluaXRpYWxpemUiKTsKKworICAgIC8vIEFsbG9jYXRlIGEgcG9vbCBvZiAxNmsgc2VjdXJlIG1l
bW9yeS4gVGhpcyBtYWtlIHRoZSBzZWN1cmUgbWVtb3J5CisgICAgLy8gYXZhaWxhYmxlIGFuZCBh
bHNvIGRyb3BzIHByaXZpbGVnZXMgd2hlcmUgbmVlZGVkLgorICAgIGdjcnlfY29udHJvbChHQ1JZ
Q1RMX0lOSVRfU0VDTUVNLCAxNjM4NCwgMCk7CisKKyAgICBnY3J5X2NvbnRyb2woR0NSWUNUTF9J
TklUSUFMSVpBVElPTl9GSU5JU0hFRCwgMCk7CisKKyAgICBzZWxmLT5wcml2ID0gcHJpdjsKKyAg
ICBuZXcgKHByaXYpIFdlYktpdENsZWFyS2V5RGVjcnlwdG9yUHJpdmF0ZSgpOworfQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9XZWJLaXRDbGVhcktleURlY3J5cHRvckdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAwMjI3YQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJL
aXRDbGVhcktleURlY3J5cHRvckdTdHJlYW1lci5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qIEdTdHJl
YW1lciBDbGVhcktleSBjb21tb24gZW5jcnlwdGlvbiBkZWNyeXB0b3IKKyAqCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgSWdhbGlhIFMuTAorICogQ29weXJpZ2h0IChDKSAyMDE2IE1ldHJvbG9naWNh
bAorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBXZWJLaXRDbGVhcktl
eURlY3J5cHRvckdTdHJlYW1lcl9oCisjZGVmaW5lIFdlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0
cmVhbWVyX2gKKworI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIFVTRShHU1RSRUFNRVIp
CisKKyNpbmNsdWRlICJXZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmgi
CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9DTEVBUl9LRVlfREVDUllQ
VE9SICAgICAgICAgICh3ZWJraXRfY2xlYXJfa2V5X2RlY3J5cHRvcl9nZXRfdHlwZSgpKQorI2Rl
ZmluZSBXRUJLSVRfQ0xFQVJfS0VZX0RFQ1JZUFRPUihvYmopICAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfQ0xFQVJfS0VZX0RFQ1JZUFRPUiwg
V2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3IpKQorI2RlZmluZSBXRUJLSVRfQ0xFQVJfS0VZX0RFQ1JZ
UFRPUl9DTEFTUyhrbGFzcykgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCBXRUJL
SVRfVFlQRV9DTEVBUl9LRVlfREVDUllQVE9SLCBXZWJLaXRDbGVhcktleURlY3J5cHRvckNsYXNz
KSkKKyNkZWZpbmUgV0VCS0lUX0lTX0NMRUFSX0tFWV9ERUNSWVBUT1Iob2JqKSAgICAgICAoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX0NMRUFSX0tFWV9ERUNS
WVBUT1IpKQorI2RlZmluZSBXRUJLSVRfSVNfQ0xFQVJfS0VZX0RFQ1JZUFRPUl9DTEFTUyhvYmop
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCBXRUJLSVRfVFlQRV9DTEVBUl9LRVlf
REVDUllQVE9SKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdENsZWFyS2V5RGVjcnlwdG9yICAg
ICAgICBXZWJLaXRDbGVhcktleURlY3J5cHRvcjsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRDbGVh
cktleURlY3J5cHRvckNsYXNzICAgV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JDbGFzczsKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRDbGVhcktleURlY3J5cHRvclByaXZhdGUgV2ViS2l0Q2xlYXJLZXlE
ZWNyeXB0b3JQcml2YXRlOworCitHVHlwZSB3ZWJraXRfY2xlYXJfa2V5X2RlY3J5cHRvcl9nZXRf
dHlwZSh2b2lkKTsKKworc3RydWN0IF9XZWJLaXRDbGVhcktleURlY3J5cHRvciB7CisgICAgV2Vi
S2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvciBwYXJlbnQ7CisKKyAgICBXZWJLaXRDbGVhcktl
eURlY3J5cHRvclByaXZhdGUqIHByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdENsZWFyS2V5RGVj
cnlwdG9yQ2xhc3MgeworICAgIFdlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JDbGFzcyBw
YXJlbnRDbGFzczsKK307CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0Q29t
bW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdT
dHJlYW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVhZDYxYgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcApAQCAtMCww
ICsxLDM2MyBAQAorLyogR1N0cmVhbWVyIENsZWFyS2V5IGNvbW1vbiBlbmNyeXB0aW9uIGRlY3J5
cHRvcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBJZ2FsaWEgUy5MCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgTWV0cm9sb2dpY2FsCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgWW91VmlldyBUViBM
dGQuIDxhbGV4LmFzaGxleUB5b3V2aWV3LmNvbT4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRDb21tb25FbmNyeXB0
aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmgiCisKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAm
JiBVU0UoR1NUUkVBTUVSKQorI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRl
ICJHVW5pcXVlUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorI2lu
Y2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKworc3Ry
dWN0IF9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yUHJpdmF0ZSB7CisgICAgYm9vbCBr
ZXlSZWNlaXZlZDsKKyAgICBMb2NrIG11dGV4OworICAgIENvbmRpdGlvbiBjb25kaXRpb247Cit9
OworCitHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDKHdlYmtpdF9jb21tb25fZW5jcnlwdGlvbl9k
ZWNyeXB0b3JfZGVidWdfY2F0ZWdvcnkpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0
X2NvbW1vbl9lbmNyeXB0aW9uX2RlY3J5cHRvcl9kZWJ1Z19jYXRlZ29yeQorCisjZGVmaW5lIHdl
YmtpdF9jb21tb25fZW5jcnlwdGlvbl9kZWNyeXB0b3JfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFz
cworR19ERUZJTkVfQUJTVFJBQ1RfVFlQRShXZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9y
LCB3ZWJraXRfY29tbW9uX2VuY3J5cHRpb25fZGVjcnlwdG9yLCBHU1RfVFlQRV9CQVNFX1RSQU5T
Rk9STSkKKworc3RhdGljIHZvaWQgd2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckZpbmFs
aXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXRUJLSVRfQ09NTU9OX0VOQ1JZUFRJT05fREVD
UllQVE9SKG9iamVjdCktPnByaXYtPn5XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yUHJp
dmF0ZSgpOworICAgIEdTVF9DQUxMX1BBUkVOVChHX09CSkVDVF9DTEFTUywgZmluYWxpemUsIChv
YmplY3QpKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdENvbW1vbkVuY3J5cHRpb25EZWNy
eXB0b3JTZXR1cENpcGhlcihXZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yKiBzZWxmKQor
eworICAgIFdlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JDbGFzcyogY29tbW9uRW5jcnlw
dGlvbkRlY3J5cHRvckNsYXNzID0gV0VCS0lUX0NPTU1PTl9FTkNSWVBUSU9OX0RFQ1JZUFRPUl9H
RVRfQ0xBU1Moc2VsZik7CisgICAgcmV0dXJuIGNvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JDbGFz
cy0+c2V0dXBDaXBoZXIoc2VsZik7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdENvbW1vbkVuY3J5
cHRpb25EZWNyeXB0b3JSZWxlYXNlQ2lwaGVyKFdlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0
b3IqIHNlbGYpCit7CisgICAgV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckNsYXNzKiBj
b21tb25FbmNyeXB0aW9uRGVjcnlwdG9yQ2xhc3MgPSBXRUJLSVRfQ09NTU9OX0VOQ1JZUFRJT05f
REVDUllQVE9SX0dFVF9DTEFTUyhzZWxmKTsKKyAgICBjb21tb25FbmNyeXB0aW9uRGVjcnlwdG9y
Q2xhc3MtPnJlbGVhc2VDaXBoZXIoc2VsZik7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdENvbW1v
bkVuY3J5cHRpb25EZWNyeXB0b3JSZXF1ZXN0RGVjcnlwdGlvbktleShXZWJLaXRDb21tb25FbmNy
eXB0aW9uRGVjcnlwdG9yKiBzZWxmLCBHc3RCdWZmZXIqIGluaXREYXRhQnVmZmVyKQoreworICAg
IFdlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JDbGFzcyogY29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHRvckNsYXNzID0gV0VCS0lUX0NPTU1PTl9FTkNSWVBUSU9OX0RFQ1JZUFRPUl9HRVRfQ0xB
U1Moc2VsZik7CisgICAgY29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckNsYXNzLT5yZXF1ZXN0RGVj
cnlwdGlvbktleShzZWxmLCBpbml0RGF0YUJ1ZmZlcik7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3
ZWJraXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9ySGFuZGxlS2V5UmVzcG9uc2UoV2ViS2l0Q29t
bW9uRW5jcnlwdGlvbkRlY3J5cHRvciogc2VsZiwgR3N0RXZlbnQqIGV2ZW50KQoreworICAgIFdl
YktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JDbGFzcyogY29tbW9uRW5jcnlwdGlvbkRlY3J5
cHRvckNsYXNzID0gV0VCS0lUX0NPTU1PTl9FTkNSWVBUSU9OX0RFQ1JZUFRPUl9HRVRfQ0xBU1Mo
c2VsZik7CisgICAgcmV0dXJuIGNvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JDbGFzcy0+aGFuZGxl
S2V5UmVzcG9uc2Uoc2VsZiwgZXZlbnQpOworfQorCitzdGF0aWMgY29uc3QgY2hhciogd2Via2l0
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvclByb3RlY3Rpb25TeXN0ZW1JZChXZWJLaXRDb21tb25F
bmNyeXB0aW9uRGVjcnlwdG9yKiBzZWxmKQoreworICAgIFdlYktpdENvbW1vbkVuY3J5cHRpb25E
ZWNyeXB0b3JDbGFzcyogY29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckNsYXNzID0gV0VCS0lUX0NP
TU1PTl9FTkNSWVBUSU9OX0RFQ1JZUFRPUl9HRVRfQ0xBU1Moc2VsZik7CisgICAgcmV0dXJuIGNv
bW1vbkVuY3J5cHRpb25EZWNyeXB0b3JDbGFzcy0+cHJvdGVjdGlvblN5c3RlbUlkOworfQorCitz
dGF0aWMgZ2Jvb2xlYW4gd2Via2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckRlY3J5cHQoV2Vi
S2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvciogc2VsZiwgR3N0QnVmZmVyKiBpdkJ1ZmZlciwg
R3N0QnVmZmVyKiBidWZmZXIsIHVuc2lnbmVkIHN1YlNhbXBsZUNvdW50LCBHc3RCdWZmZXIqIHN1
YlNhbXBsZXNCdWZmZXIpCit7CisgICAgV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckNs
YXNzKiBjb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yQ2xhc3MgPSBXRUJLSVRfQ09NTU9OX0VOQ1JZ
UFRJT05fREVDUllQVE9SX0dFVF9DTEFTUyhzZWxmKTsKKyAgICByZXR1cm4gY29tbW9uRW5jcnlw
dGlvbkRlY3J5cHRvckNsYXNzLT5kZWNyeXB0KHNlbGYsIGl2QnVmZmVyLCBidWZmZXIsIHN1YlNh
bXBsZUNvdW50LCBzdWJTYW1wbGVzQnVmZmVyKTsKK30KKworc3RhdGljIEdzdENhcHMqIHdlYmtp
dENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JUcmFuc2Zvcm1DYXBzKEdzdEJhc2VUcmFuc2Zvcm0q
IGJhc2UsIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sIEdzdENhcHMqIGNhcHMsIEdzdENhcHMq
IGZpbHRlcikKK3sKKyAgICBpZiAoZGlyZWN0aW9uID09IEdTVF9QQURfVU5LTk9XTikKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBHc3RDYXBzKiB0cmFuc2Zvcm1lZENhcHMgPSBnc3Rf
Y2Fwc19uZXdfZW1wdHkoKTsKKyAgICBXZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yKiBz
ZWxmID0gV0VCS0lUX0NPTU1PTl9FTkNSWVBUSU9OX0RFQ1JZUFRPUihiYXNlKTsKKworICAgIEdT
VF9ERUJVR19PQkpFQ1QoYmFzZSwgImRpcmVjdGlvbjogJXMsIGNhcHM6ICUiIEdTVF9QVFJfRk9S
TUFUICIgZmlsdGVyOiAlIiBHU1RfUFRSX0ZPUk1BVCwgKGRpcmVjdGlvbiA9PSBHU1RfUEFEX1NS
QykgPyAic3JjIiA6ICJzaW5rIiwgY2FwcywgZmlsdGVyKTsKKworICAgIHVuc2lnbmVkIHNpemUg
PSBnc3RfY2Fwc19nZXRfc2l6ZShjYXBzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2l6ZTsgKytpKSB7CisgICAgICAgIEdzdFN0cnVjdHVyZSogaW4gPSBnc3RfY2Fwc19nZXRfc3Ry
dWN0dXJlKGNhcHMsIGkpOworICAgICAgICBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gb3V0Owor
CisgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gR1NUX1BBRF9TSU5LKSB7CisgICAgICAgICAgICBp
ZiAoIWdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkKGluLCAib3JpZ2luYWwtbWVkaWEtdHlwZSIpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBvdXQucmVzZXQoZ3N0X3N0
cnVjdHVyZV9jb3B5KGluKSk7CisgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldF9uYW1lKG91
dC5nZXQoKSwgZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKG91dC5nZXQoKSwgIm9yaWdpbmFsLW1l
ZGlhLXR5cGUiKSk7CisKKyAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgdGhlIERSTSByZWxhdGVk
IGZpZWxkcyBmcm9tIHRoZSBkb3duLXN0cmVhbSBjYXBzLgorICAgICAgICAgICAgZm9yIChpbnQg
aiA9IDA7IGogPCBnc3Rfc3RydWN0dXJlX25fZmllbGRzKGluKTsgKytqKSB7CisgICAgICAgICAg
ICAgICAgY29uc3QgZ2NoYXIqIGZpZWxkTmFtZSA9IGdzdF9zdHJ1Y3R1cmVfbnRoX2ZpZWxkX25h
bWUoaW4sIGopOworCisgICAgICAgICAgICAgICAgaWYgKGdfc3RyX2hhc19wcmVmaXgoZmllbGRO
YW1lLCAicHJvdGVjdGlvbi1zeXN0ZW0iKQorICAgICAgICAgICAgICAgICAgICB8fCBnX3N0cl9o
YXNfcHJlZml4KGZpZWxkTmFtZSwgIm9yaWdpbmFsLW1lZGlhLXR5cGUiKSkKKyAgICAgICAgICAg
ICAgICAgICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQob3V0LmdldCgpLCBmaWVsZE5hbWUp
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgR1VuaXF1ZVB0
cjxHc3RTdHJ1Y3R1cmU+IHRtcChnc3Rfc3RydWN0dXJlX2NvcHkoaW4pKTsKKyAgICAgICAgICAg
IC8vIEZpbHRlciBvdXQgdGhlIHZpZGVvIHJlbGF0ZWQgZmllbGRzIGZyb20gdGhlIHVwLXN0cmVh
bSBjYXBzLAorICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGV5IGFyZSBub3QgcmVsZXZhbnQgdG8g
dGhlIGlucHV0IGNhcHMgb2YgdGhpcyBlbGVtZW50IGFuZAorICAgICAgICAgICAgLy8gY2FuIGNh
dXNlIGNhcHMgbmVnb3RpYXRpb24gZmFpbHVyZXMgd2l0aCBhZGFwdGl2ZSBiaXRyYXRlIHN0cmVh
bXMuCisgICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IGdzdF9zdHJ1Y3R1cmVfbl9maWVsZHMo
dG1wLmdldCgpKSAtIDE7IGluZGV4ID49IDA7IC0taW5kZXgpIHsKKyAgICAgICAgICAgICAgICBj
b25zdCBnY2hhciogZmllbGROYW1lID0gZ3N0X3N0cnVjdHVyZV9udGhfZmllbGRfbmFtZSh0bXAu
Z2V0KCksIGluZGV4KTsKKyAgICAgICAgICAgICAgICBHU1RfVFJBQ0UoIkNoZWNrIGZpZWxkIFwi
JXNcIiBmb3IgcmVtb3ZhbCIsIGZpZWxkTmFtZSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIWdf
c3RyY21wMChmaWVsZE5hbWUsICJiYXNlLXByb2ZpbGUiKQorICAgICAgICAgICAgICAgICAgICB8
fCAhZ19zdHJjbXAwKGZpZWxkTmFtZSwgImNvZGVjX2RhdGEiKQorICAgICAgICAgICAgICAgICAg
ICB8fCAhZ19zdHJjbXAwKGZpZWxkTmFtZSwgImhlaWdodCIpCisgICAgICAgICAgICAgICAgICAg
IHx8ICFnX3N0cmNtcDAoZmllbGROYW1lLCAiZnJhbWVyYXRlIikKKyAgICAgICAgICAgICAgICAg
ICAgfHwgIWdfc3RyY21wMChmaWVsZE5hbWUsICJsZXZlbCIpCisgICAgICAgICAgICAgICAgICAg
IHx8ICFnX3N0cmNtcDAoZmllbGROYW1lLCAicGl4ZWwtYXNwZWN0LXJhdGlvIikKKyAgICAgICAg
ICAgICAgICAgICAgfHwgIWdfc3RyY21wMChmaWVsZE5hbWUsICJwcm9maWxlIikKKyAgICAgICAg
ICAgICAgICAgICAgfHwgIWdfc3RyY21wMChmaWVsZE5hbWUsICJyYXRlIikKKyAgICAgICAgICAg
ICAgICAgICAgfHwgIWdfc3RyY21wMChmaWVsZE5hbWUsICJ3aWR0aCIpKSB7CisgICAgICAgICAg
ICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkKHRtcC5nZXQoKSwgZmllbGROYW1l
KTsKKyAgICAgICAgICAgICAgICAgICAgR1NUX1RSQUNFKCJSZW1vdmluZyBmaWVsZCAlcyIsIGZp
ZWxkTmFtZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBvdXQucmVzZXQoZ3N0X3N0cnVjdHVyZV9jb3B5KHRtcC5nZXQoKSkpOworICAgICAgICAgICAg
Z3N0X3N0cnVjdHVyZV9zZXQob3V0LmdldCgpLCAicHJvdGVjdGlvbi1zeXN0ZW0iLCBHX1RZUEVf
U1RSSU5HLCB3ZWJraXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yUHJvdGVjdGlvblN5c3RlbUlk
KHNlbGYpLAorICAgICAgICAgICAgICAgICJvcmlnaW5hbC1tZWRpYS10eXBlIiwgR19UWVBFX1NU
UklORywgZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZShpbiksIG51bGxwdHIpOworCisgICAgICAgICAg
ICBnc3Rfc3RydWN0dXJlX3NldF9uYW1lKG91dC5nZXQoKSwgImFwcGxpY2F0aW9uL3gtY2VuYyIp
OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBpc0R1cGxpY2F0ZWQgPSBmYWxzZTsKKyAgICAg
ICAgdW5zaWduZWQgc2l6ZSA9IGdzdF9jYXBzX2dldF9zaXplKHRyYW5zZm9ybWVkQ2Fwcyk7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IHNpemU7ICsraW5kZXgpIHsK
KyAgICAgICAgICAgIEdzdFN0cnVjdHVyZSogaXRlbSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUo
dHJhbnNmb3JtZWRDYXBzLCBpbmRleCk7CisgICAgICAgICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9p
c19lcXVhbChpdGVtLCBvdXQuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgaXNEdXBsaWNhdGVk
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGlmICghaXNEdXBsaWNhdGVkKQorICAgICAgICAgICAgZ3N0X2NhcHNfYXBw
ZW5kX3N0cnVjdHVyZSh0cmFuc2Zvcm1lZENhcHMsIG91dC5yZWxlYXNlKCkpOworICAgIH0KKwor
ICAgIGlmIChmaWx0ZXIpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChiYXNlLCAiVXNpbmcg
ZmlsdGVyIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsIGZpbHRlcik7CisgICAgICAgIEdzdENhcHMq
IGludGVyc2VjdGlvbiA9IGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsKHRyYW5zZm9ybWVkQ2Fwcywg
ZmlsdGVyLCBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOworICAgICAgICBnc3RfY2Fwc191bnJl
Zih0cmFuc2Zvcm1lZENhcHMpOworICAgICAgICB0cmFuc2Zvcm1lZENhcHMgPSBpbnRlcnNlY3Rp
b247CisgICAgfQorCisgICAgR1NUX0RFQlVHX09CSkVDVChiYXNlLCAicmV0dXJuaW5nICUiIEdT
VF9QVFJfRk9STUFULCB0cmFuc2Zvcm1lZENhcHMpOworICAgIHJldHVybiB0cmFuc2Zvcm1lZENh
cHM7Cit9CisKK3N0YXRpYyBHc3RGbG93UmV0dXJuIHdlYmtpdENvbW1vbkVuY3J5cHRpb25EZWNy
eXB0b3JUcmFuc2Zvcm1JblBsYWNlKEdzdEJhc2VUcmFuc2Zvcm0qIGJhc2UsIEdzdEJ1ZmZlciog
YnVmZmVyKQoreworICAgIFdlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3IqIHNlbGYgPSBX
RUJLSVRfQ09NTU9OX0VOQ1JZUFRJT05fREVDUllQVE9SKGJhc2UpOworICAgIFdlYktpdENvbW1v
bkVuY3J5cHRpb25EZWNyeXB0b3JQcml2YXRlKiBwcml2ID0gc2VsZi0+cHJpdjsKKyAgICBMb2Nr
SG9sZGVyIGxvY2tlcihwcml2LT5tdXRleCk7CisKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgp
KTsKKworICAgIC8vIFRoZSBrZXkgbWlnaHQgbm90IGhhdmUgYmVlbiByZWNlaXZlZCB5ZXQuIFdh
aXQgZm9yIGl0LgorICAgIGlmICghcHJpdi0+a2V5UmVjZWl2ZWQpCisgICAgICAgIHByaXYtPmNv
bmRpdGlvbi53YWl0KHByaXYtPm11dGV4KTsKKworICAgIEdzdFByb3RlY3Rpb25NZXRhKiBwcm90
ZWN0aW9uTWV0YSA9IGdzdF9idWZmZXJfZ2V0X3Byb3RlY3Rpb25fbWV0YShidWZmZXIpOworICAg
IGlmICghcHJvdGVjdGlvbk1ldGEpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAi
RmFpbGVkIHRvIGdldCBHc3RQcm90ZWN0aW9uIG1ldGFkYXRhIGZyb20gYnVmZmVyICVwIiwgYnVm
ZmVyKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CisgICAgfQorCisg
ICAgR3N0TWV0YSogbWV0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25N
ZXRhKTsKKyAgICBndWludCBpdlNpemU7CisgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF91aW50
KHByb3RlY3Rpb25NZXRhLT5pbmZvLCAiaXZfc2l6ZSIsICZpdlNpemUpKSB7CisgICAgICAgIEdT
VF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQgaXZfc2l6ZSIpOworICAgICAgICBn
c3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgbWV0YSk7CisgICAgICAgIHJldHVybiBHU1Rf
RkxPV19OT1RfU1VQUE9SVEVEOworICAgIH0KKworICAgIGdib29sZWFuIGVuY3J5cHRlZDsKKyAg
ICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2Jvb2xlYW4ocHJvdGVjdGlvbk1ldGEtPmluZm8sICJl
bmNyeXB0ZWQiLCAmZW5jcnlwdGVkKSkgeworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYs
ICJGYWlsZWQgdG8gZ2V0IGVuY3J5cHRlZCBmbGFnIik7CisgICAgICAgIGdzdF9idWZmZXJfcmVt
b3ZlX21ldGEoYnVmZmVyLCBtZXRhKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQ
T1JURUQ7CisgICAgfQorCisgICAgaWYgKCFpdlNpemUgfHwgIWVuY3J5cHRlZCkgeworICAgICAg
ICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgbWV0YSk7CisgICAgICAgIHJldHVybiBH
U1RfRkxPV19PSzsKKyAgICB9CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKGJhc2UsICJwcm90ZWN0
aW9uIG1ldGE6ICUiIEdTVF9QVFJfRk9STUFULCBwcm90ZWN0aW9uTWV0YS0+aW5mbyk7CisgICAg
Z3VpbnQgc3ViU2FtcGxlQ291bnQ7CisgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF91aW50KHBy
b3RlY3Rpb25NZXRhLT5pbmZvLCAic3Vic2FtcGxlX2NvdW50IiwgJnN1YlNhbXBsZUNvdW50KSkg
eworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gZ2V0IHN1YnNhbXBs
ZV9jb3VudCIpOworICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgbWV0YSk7
CisgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOworICAgIH0KKworICAgIGNv
bnN0IEdWYWx1ZSogdmFsdWU7CisgICAgR3N0QnVmZmVyKiBzdWJTYW1wbGVzQnVmZmVyID0gbnVs
bHB0cjsKKyAgICBpZiAoc3ViU2FtcGxlQ291bnQpIHsKKyAgICAgICAgdmFsdWUgPSBnc3Rfc3Ry
dWN0dXJlX2dldF92YWx1ZShwcm90ZWN0aW9uTWV0YS0+aW5mbywgInN1YnNhbXBsZXMiKTsKKyAg
ICAgICAgaWYgKCF2YWx1ZSkgeworICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAi
RmFpbGVkIHRvIGdldCBzdWJzYW1wbGVzIik7CisgICAgICAgICAgICBnc3RfYnVmZmVyX3JlbW92
ZV9tZXRhKGJ1ZmZlciwgbWV0YSk7CisgICAgICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NV
UFBPUlRFRDsKKyAgICAgICAgfQorICAgICAgICBzdWJTYW1wbGVzQnVmZmVyID0gZ3N0X3ZhbHVl
X2dldF9idWZmZXIodmFsdWUpOworICAgIH0KKworICAgIGlmICghd2Via2l0Q29tbW9uRW5jcnlw
dGlvbkRlY3J5cHRvclNldHVwQ2lwaGVyKHNlbGYpKSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpF
Q1Qoc2VsZiwgIkZhaWxlZCB0byBjb25maWd1cmUgY2lwaGVyIik7CisgICAgICAgIGdzdF9idWZm
ZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCBtZXRhKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05P
VF9TVVBQT1JURUQ7CisgICAgfQorCisgICAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1
ZShwcm90ZWN0aW9uTWV0YS0+aW5mbywgIml2Iik7CisgICAgaWYgKCF2YWx1ZSkgeworICAgICAg
ICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gZ2V0IElWIGZvciBzYW1wbGUiKTsK
KyAgICAgICAgd2Via2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvclJlbGVhc2VDaXBoZXIoc2Vs
Zik7CisgICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCBtZXRhKTsKKyAgICAg
ICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CisgICAgfQorCisgICAgR3N0QnVmZmVy
KiBpdkJ1ZmZlciA9IGdzdF92YWx1ZV9nZXRfYnVmZmVyKHZhbHVlKTsKKyAgICBpZiAoIXdlYmtp
dENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JEZWNyeXB0KHNlbGYsIGl2QnVmZmVyLCBidWZmZXIs
IHN1YlNhbXBsZUNvdW50LCBzdWJTYW1wbGVzQnVmZmVyKSkgeworICAgICAgICBHU1RfRVJST1Jf
T0JKRUNUKHNlbGYsICJEZWNyeXB0aW9uIGZhaWxlZCIpOworICAgICAgICB3ZWJraXRDb21tb25F
bmNyeXB0aW9uRGVjcnlwdG9yUmVsZWFzZUNpcGhlcihzZWxmKTsKKyAgICAgICAgZ3N0X2J1ZmZl
cl9yZW1vdmVfbWV0YShidWZmZXIsIG1ldGEpOworICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9U
X1NVUFBPUlRFRDsKKyAgICB9CisKKyAgICB3ZWJraXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9y
UmVsZWFzZUNpcGhlcihzZWxmKTsKKyAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwg
bWV0YSk7CisgICAgcmV0dXJuIEdTVF9GTE9XX09LOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Vi
a2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvclNpbmtFdmVudEhhbmRsZXIoR3N0QmFzZVRyYW5z
Zm9ybSogdHJhbnMsIEdzdEV2ZW50KiBldmVudCkKK3sKKyAgICBXZWJLaXRDb21tb25FbmNyeXB0
aW9uRGVjcnlwdG9yKiBzZWxmID0gV0VCS0lUX0NPTU1PTl9FTkNSWVBUSU9OX0RFQ1JZUFRPUih0
cmFucyk7CisgICAgV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvclByaXZhdGUqIHByaXYg
PSBzZWxmLT5wcml2OworCisgICAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRShldmVudCkpIHsKKyAg
ICBjYXNlIEdTVF9FVkVOVF9QUk9URUNUSU9OOiB7CisgICAgICAgIGNvbnN0IGNoYXIqIHN5c3Rl
bUlkOworICAgICAgICBjb25zdCBjaGFyKiBvcmlnaW47CisgICAgICAgIEdzdEJ1ZmZlciogaW5p
dERhdGFCdWZmZXI7CisgICAgICAgIEdSZWZQdHI8R3N0RXZlbnQ+IHByb3RlY3RlZEV2ZW50ID0g
YWRvcHRHUmVmKGV2ZW50KTsKKworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJyZWNl
aXZlZCBwcm90ZWN0aW9uIGV2ZW50Iik7CisgICAgICAgIGdzdF9ldmVudF9wYXJzZV9wcm90ZWN0
aW9uKHByb3RlY3RlZEV2ZW50LmdldCgpLCAmc3lzdGVtSWQsICZpbml0RGF0YUJ1ZmZlciwgJm9y
aWdpbik7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgInN5c3RlbUlkOiAlcyIsIHN5
c3RlbUlkKTsKKworICAgICAgICBpZiAoIWdfc3RyX2VxdWFsKHN5c3RlbUlkLCB3ZWJraXRDb21t
b25FbmNyeXB0aW9uRGVjcnlwdG9yUHJvdGVjdGlvblN5c3RlbUlkKHNlbGYpKSkKKyAgICAgICAg
ICAgIHJldHVybiBUUlVFOworCisgICAgICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gcHJvdGVjdGVk
VGhpcyhHU1RfRUxFTUVOVF9DQVNUKHNlbGYpKTsKKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRp
c3BhdGNoKFtwcm90ZWN0ZWRUaGlzLCBwcm90ZWN0ZWRFdmVudCwgaW5pdERhdGFCdWZmZXJdIHsK
KyAgICAgICAgICAgIHdlYmtpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JSZXF1ZXN0RGVjcnlw
dGlvbktleShXRUJLSVRfQ09NTU9OX0VOQ1JZUFRJT05fREVDUllQVE9SKHByb3RlY3RlZFRoaXMu
Z2V0KCkpLCBpbml0RGF0YUJ1ZmZlcik7CisgICAgICAgIH0pOworCisgICAgICAgIHJldHVybiBU
UlVFOworICAgIH0KKyAgICBjYXNlIEdTVF9FVkVOVF9DVVNUT01fRE9XTlNUUkVBTV9PT0I6IHsK
KyAgICAgICAgR1JlZlB0cjxHc3RFdmVudD4gcHJvdGVjdGVkRXZlbnQgPSBhZG9wdEdSZWYoZXZl
bnQpOworICAgICAgICBpZiAod2Via2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckhhbmRsZUtl
eVJlc3BvbnNlKHNlbGYsIHByb3RlY3RlZEV2ZW50LmdldCgpKSkgeworICAgICAgICAgICAgTG9j
a0hvbGRlciBsb2NrZXIocHJpdi0+bXV0ZXgpOworICAgICAgICAgICAgcHJpdi0+a2V5UmVjZWl2
ZWQgPSB0cnVlOworICAgICAgICAgICAgcHJpdi0+Y29uZGl0aW9uLm5vdGlmeU9uZSgpOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiBHU1RfQkFTRV9UUkFOU0ZPUk1fQ0xBU1MocGFyZW50X2NsYXNzKS0+c2lua19l
dmVudCh0cmFucywgZXZlbnQpOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHdlYktp
dENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JDaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiBlbGVtZW50
LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQoreworICAgIFdlYktpdENvbW1vbkVuY3J5cHRp
b25EZWNyeXB0b3IqIHNlbGYgPSBXRUJLSVRfQ09NTU9OX0VOQ1JZUFRJT05fREVDUllQVE9SKGVs
ZW1lbnQpOworCisgICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7CisgICAgY2FzZSBHU1RfU1RBVEVf
Q0hBTkdFX1BBVVNFRF9UT19SRUFEWTogeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYs
ICJQQVVTRUQtPlJFQURZIik7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHNlbGYtPnByaXYt
Pm11dGV4KTsKKyAgICAgICAgc2VsZi0+cHJpdi0+Y29uZGl0aW9uLm5vdGlmeU9uZSgpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgcmV0dXJuIEdTVF9FTEVNRU5UX0NMQVNTKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0
ZShlbGVtZW50LCB0cmFuc2l0aW9uKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYktpdENvbW1v
bkVuY3J5cHRpb25EZWNyeXB0b3JEZWZhdWx0U2V0dXBDaXBoZXIoV2ViS2l0Q29tbW9uRW5jcnlw
dGlvbkRlY3J5cHRvciopCit7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkIHdl
YktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JEZWZhdWx0UmVsZWFzZUNpcGhlcihXZWJLaXRD
b21tb25FbmNyeXB0aW9uRGVjcnlwdG9yKikKK3sKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Nv
bW1vbl9lbmNyeXB0aW9uX2RlY3J5cHRvcl9jbGFzc19pbml0KFdlYktpdENvbW1vbkVuY3J5cHRp
b25EZWNyeXB0b3JDbGFzcyoga2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xh
c3MgPSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9
IHdlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JGaW5hbGl6ZTsKKworICAgIEdTVF9ERUJV
R19DQVRFR09SWV9JTklUKHdlYmtpdF9jb21tb25fZW5jcnlwdGlvbl9kZWNyeXB0b3JfZGVidWdf
Y2F0ZWdvcnksCisgICAgICAgICJ3ZWJraXRjZW5jIiwgMCwgIkNvbW1vbiBFbmNyeXB0aW9uIGJh
c2UgY2xhc3MiKTsKKworICAgIEdzdEVsZW1lbnRDbGFzcyogZWxlbWVudENsYXNzID0gR1NUX0VM
RU1FTlRfQ0xBU1Moa2xhc3MpOworICAgIGVsZW1lbnRDbGFzcy0+Y2hhbmdlX3N0YXRlID0gR1NU
X0RFQlVHX0ZVTkNQVFIod2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckNoYW5nZVN0YXRl
KTsKKworICAgIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyogYmFzZVRyYW5zZm9ybUNsYXNzID0gR1NU
X0JBU0VfVFJBTlNGT1JNX0NMQVNTKGtsYXNzKTsKKyAgICBiYXNlVHJhbnNmb3JtQ2xhc3MtPnRy
YW5zZm9ybV9pcCA9IEdTVF9ERUJVR19GVU5DUFRSKHdlYmtpdENvbW1vbkVuY3J5cHRpb25EZWNy
eXB0b3JUcmFuc2Zvcm1JblBsYWNlKTsKKyAgICBiYXNlVHJhbnNmb3JtQ2xhc3MtPnRyYW5zZm9y
bV9jYXBzID0gR1NUX0RFQlVHX0ZVTkNQVFIod2Via2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRv
clRyYW5zZm9ybUNhcHMpOworICAgIGJhc2VUcmFuc2Zvcm1DbGFzcy0+dHJhbnNmb3JtX2lwX29u
X3Bhc3N0aHJvdWdoID0gRkFMU0U7CisgICAgYmFzZVRyYW5zZm9ybUNsYXNzLT5zaW5rX2V2ZW50
ID0gR1NUX0RFQlVHX0ZVTkNQVFIod2Via2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvclNpbmtF
dmVudEhhbmRsZXIpOworCisgICAga2xhc3MtPnNldHVwQ2lwaGVyID0gR1NUX0RFQlVHX0ZVTkNQ
VFIod2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckRlZmF1bHRTZXR1cENpcGhlcik7Cisg
ICAga2xhc3MtPnJlbGVhc2VDaXBoZXIgPSBHU1RfREVCVUdfRlVOQ1BUUih3ZWJLaXRDb21tb25F
bmNyeXB0aW9uRGVjcnlwdG9yRGVmYXVsdFJlbGVhc2VDaXBoZXIpOworCisgICAgZ190eXBlX2Ns
YXNzX2FkZF9wcml2YXRlKGtsYXNzLCBzaXplb2YoV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5
cHRvclByaXZhdGUpKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2NvbW1vbl9lbmNyeXB0aW9u
X2RlY3J5cHRvcl9pbml0KFdlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3IqIHNlbGYpCit7
CisgICAgV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvclByaXZhdGUqIHByaXYgPSBHX1RZ
UEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoc2VsZiwgV0VCS0lUX1RZUEVfQ09NTU9OX0VOQ1JZUFRJ
T05fREVDUllQVE9SLCBXZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yUHJpdmF0ZSk7CisK
KyAgICBzZWxmLT5wcml2ID0gcHJpdjsKKyAgICBuZXcgKHByaXYpIFdlYktpdENvbW1vbkVuY3J5
cHRpb25EZWNyeXB0b3JQcml2YXRlKCk7CisKKyAgICBHc3RCYXNlVHJhbnNmb3JtKiBiYXNlID0g
R1NUX0JBU0VfVFJBTlNGT1JNKHNlbGYpOworICAgIGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfaW5f
cGxhY2UoYmFzZSwgVFJVRSk7CisgICAgZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9wYXNzdGhyb3Vn
aChiYXNlLCBGQUxTRSk7CisgICAgZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9nYXBfYXdhcmUoYmFz
ZSwgRkFMU0UpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0
cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2Vi
S2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjA3MjM2NTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHRvckdTdHJlYW1lci5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qIEdTdHJlYW1lciBDbGVhcktl
eSBjb21tb24gZW5jcnlwdGlvbiBkZWNyeXB0b3IKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
SWdhbGlhIFMuTAorICogQ29weXJpZ2h0IChDKSAyMDE2IE1ldHJvbG9naWNhbAorICogQ29weXJp
Z2h0IChDKSAyMDEzIFlvdVZpZXcgVFYgTHRkLiA8YWxleC5hc2hsZXlAeW91dmlldy5jb20+Cisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAq
ICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIFdlYktpdENvbW1vbkVuY3J5
cHRpb25EZWNyeXB0b3JHU3RyZWFtZXJfaAorI2RlZmluZSBXZWJLaXRDb21tb25FbmNyeXB0aW9u
RGVjcnlwdG9yR1N0cmVhbWVyX2gKKworI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIFVT
RShHU1RSRUFNRVIpCisKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8Z3N0L2Jhc2Uv
Z3N0YmFzZXRyYW5zZm9ybS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZ
UEVfQ09NTU9OX0VOQ1JZUFRJT05fREVDUllQVE9SICAgICAgICAgICh3ZWJraXRfY29tbW9uX2Vu
Y3J5cHRpb25fZGVjcnlwdG9yX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9DT01NT05fRU5D
UllQVElPTl9ERUNSWVBUT1Iob2JqKSAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NB
U1QoKG9iaiksIFdFQktJVF9UWVBFX0NPTU1PTl9FTkNSWVBUSU9OX0RFQ1JZUFRPUiwgV2ViS2l0
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvcikpCisjZGVmaW5lIFdFQktJVF9DT01NT05fRU5DUllQ
VElPTl9ERUNSWVBUT1JfQ0xBU1Moa2xhc3MpICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGts
YXNzKSwgV0VCS0lUX1RZUEVfQ09NTU9OX0VOQ1JZUFRJT05fREVDUllQVE9SLCBXZWJLaXRDb21t
b25FbmNyeXB0aW9uRGVjcnlwdG9yQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfQ09NTU9OX0VOQ1JZ
UFRJT05fREVDUllQVE9SX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFT
Uygob2JqKSwgV0VCS0lUX1RZUEVfQ09NTU9OX0VOQ1JZUFRJT05fREVDUllQVE9SLCBXZWJLaXRD
b21tb25FbmNyeXB0aW9uRGVjcnlwdG9yQ2xhc3MpKQorCisjZGVmaW5lIFdFQktJVF9JU19DT01N
T05fRU5DUllQVElPTl9ERUNSWVBUT1Iob2JqKSAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNF
X1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX0NPTU1PTl9FTkNSWVBUSU9OX0RFQ1JZUFRPUikpCisj
ZGVmaW5lIFdFQktJVF9JU19DT01NT05fRU5DUllQVElPTl9ERUNSWVBUT1JfQ0xBU1Mob2JqKSAo
R19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgV0VCS0lUX1RZUEVfQ09NTU9OX0VOQ1JZ
UFRJT05fREVDUllQVE9SKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdENvbW1vbkVuY3J5cHRp
b25EZWNyeXB0b3IgICAgICAgIFdlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3I7Cit0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckNsYXNzICAgV2ViS2l0
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckNsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdENv
bW1vbkVuY3J5cHRpb25EZWNyeXB0b3JQcml2YXRlIFdlYktpdENvbW1vbkVuY3J5cHRpb25EZWNy
eXB0b3JQcml2YXRlOworCitHVHlwZSB3ZWJraXRfY29tbW9uX2VuY3J5cHRpb25fZGVjcnlwdG9y
X2dldF90eXBlKHZvaWQpOworCitzdHJ1Y3QgX1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0
b3IgeworICAgIEdzdEJhc2VUcmFuc2Zvcm0gcGFyZW50OworCisgICAgV2ViS2l0Q29tbW9uRW5j
cnlwdGlvbkRlY3J5cHRvclByaXZhdGUqIHByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdENvbW1v
bkVuY3J5cHRpb25EZWNyeXB0b3JDbGFzcyB7CisgICAgR3N0QmFzZVRyYW5zZm9ybUNsYXNzIHBh
cmVudENsYXNzOworCisgICAgY29uc3QgY2hhciogcHJvdGVjdGlvblN5c3RlbUlkOworICAgIHZv
aWQgKCpyZXF1ZXN0RGVjcnlwdGlvbktleSkgKFdlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0
b3IqLCBHc3RCdWZmZXIqIGluaXREYXRhKTsKKyAgICBnYm9vbGVhbiAoKmhhbmRsZUtleVJlc3Bv
bnNlKSAoV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvciosIEdzdEV2ZW50KiBldmVudCk7
CisgICAgZ2Jvb2xlYW4gKCpzZXR1cENpcGhlcikgKFdlYktpdENvbW1vbkVuY3J5cHRpb25EZWNy
eXB0b3IqKTsKKyAgICBnYm9vbGVhbiAoKmRlY3J5cHQpIChXZWJLaXRDb21tb25FbmNyeXB0aW9u
RGVjcnlwdG9yKiwgR3N0QnVmZmVyKiBpdkJ1ZmZlciwgR3N0QnVmZmVyKiBidWZmZXIsIHVuc2ln
bmVkIHN1YlNhbXBsZXNDb3VudCwgR3N0QnVmZmVyKiBzdWJTYW1wbGVzQnVmZmVyKTsKKyAgICB2
b2lkICgqcmVsZWFzZUNpcGhlcikgKFdlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3IqKTsK
K307CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
Y21ha2UvRmluZExpYkdjcnlwdC5jbWFrZSBiL1NvdXJjZS9jbWFrZS9GaW5kTGliR2NyeXB0LmNt
YWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YzMwNjIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvY21ha2UvRmluZExpYkdjcnlwdC5jbWFrZQpAQCAtMCwwICsxLDkw
IEBACisjLnJzdAorIyBGaW5kTGliR2NyeXB0CisjIC0tLS0tLS0tLS0tLS0KKyMKKyMgRmluZHMg
dGhlIExpYmdjcnlwdCBsaWJyYXJ5LgorIworIyBUaGlzIHdpbGwgZGVmaW5lIHRoZSBmb2xsb3dp
bmcgdmFyaWFibGVzOgorIworIyBgYExJQkdDUllQVF9GT1VORGBgCisjICAgICBUcnVlIGlmIHRo
ZSByZXF1ZXN0ZWQgdmVyc2lvbiBvZiBnY3J5cHQgd2FzIGZvdW5kCisjIGBgTElCR0NSWVBUX1ZF
UlNJT05gYAorIyAgICAgVGhlIHZlcnNpb24gb2YgZ2NyeXB0IHRoYXQgd2FzIGZvdW5kCisjIGBg
TElCR0NSWVBUX0lOQ0xVREVfRElSU2BgCisjICAgICBUaGUgZ2NyeXB0IGluY2x1ZGUgZGlyZWN0
b3JpZXMKKyMgYGBMSUJHQ1JZUFRfTElCUkFSSUVTYGAKKyMgICAgIFRoZSBsaW5rZXIgbGlicmFy
aWVzIG5lZWRlZCB0byB1c2UgdGhlIGdjcnlwdCBsaWJyYXJ5CisKKyMgQ29weXJpZ2h0IDIwMTQg
Tmljb2zDoXMgQWx2YXJleiA8bmljb2xhcy5hbHZhcmV6QGdtYWlsLmNvbT4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIworIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgY29weXJpZ2h0
CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gVGhlIG5hbWUgb2YgdGhl
IGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisj
ICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBB
VVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorIyBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisj
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuCisjIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyMgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisjIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisjIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKK2ZpbmRfcHJvZ3JhbShMSUJHQ1JZUFRDT05GSUdfU0NSSVBUIE5BTUVT
IGxpYmdjcnlwdC1jb25maWcpCitpZihMSUJHQ1JZUFRDT05GSUdfU0NSSVBUKQorICAgIGV4ZWN1
dGVfcHJvY2VzcygKKyAgICAgICAgQ09NTUFORCAiJHtMSUJHQ1JZUFRDT05GSUdfU0NSSVBUfSIg
LS1wcmVmaXgKKyAgICAgICAgUkVTVUxUX1ZBUklBQkxFIENPTkZJR1NDUklQVF9SRVNVTFQKKyAg
ICAgICAgT1VUUFVUX1ZBUklBQkxFIFBSRUZJWAorICAgICAgICBPVVRQVVRfU1RSSVBfVFJBSUxJ
TkdfV0hJVEVTUEFDRQorICAgICkKKyAgICBpZiAoQ09ORklHU0NSSVBUX1JFU1VMVCBFUVVBTCAw
KQorICAgICAgICBzZXQoTElCR0NSWVBUX0xJQl9ISU5UICIke1BSRUZJWH0vbGliIikKKyAgICAg
ICAgc2V0KExJQkdDUllQVF9JTkNMVURFX0hJTlQgIiR7UFJFRklYfS9pbmNsdWRlIikKKyAgICBl
bmRpZigpCitlbmRpZigpCisKK2ZpbmRfbGlicmFyeShMSUJHQ1JZUFRfTElCUkFSWQorICAgIE5B
TUVTIGdjcnlwdAorICAgIEhJTlRTICR7TElCR0NSWVBUX0xJQl9ISU5UfQorKQorZmluZF9wYXRo
KExJQkdDUllQVF9JTkNMVURFX0RJUgorICAgIE5BTUVTIGdjcnlwdC5oCisgICAgSElOVFMgJHtM
SUJHQ1JZUFRfSU5DTFVERV9ISU5UfQorKQorCitpZihMSUJHQ1JZUFRfSU5DTFVERV9ESVIpCisg
ICAgZmlsZShTVFJJTkdTICR7TElCR0NSWVBUX0lOQ0xVREVfRElSfS9nY3J5cHQuaCBHQ1JZUFRf
SCBSRUdFWCAiXiNkZWZpbmUgR0NSWVBUX1ZFUlNJT04gIikKKyAgICBzdHJpbmcoUkVHRVggUkVQ
TEFDRSAiXiNkZWZpbmUgR0NSWVBUX1ZFUlNJT04gXCIoLiopXCIuKiQiICJcXDEiIExJQkdDUllQ
VF9WRVJTSU9OICIke0dDUllQVF9IfSIpCitlbmRpZigpCisKK2luY2x1ZGUoRmluZFBhY2thZ2VI
YW5kbGVTdGFuZGFyZEFyZ3MpCisKK2ZpbmRfcGFja2FnZV9oYW5kbGVfc3RhbmRhcmRfYXJncyhM
aWJHY3J5cHQKKyAgICBGT1VORF9WQVIgTElCR0NSWVBUX0ZPVU5ECisgICAgUkVRVUlSRURfVkFS
UyBMSUJHQ1JZUFRfTElCUkFSWSBMSUJHQ1JZUFRfSU5DTFVERV9ESVIKKyAgICBWRVJTSU9OX1ZB
UiBMSUJHQ1JZUFRfVkVSU0lPTgorKQoraWYoTElCR0NSWVBUX0ZPVU5EKQorICAgIHNldChMSUJH
Q1JZUFRfTElCUkFSSUVTICR7TElCR0NSWVBUX0xJQlJBUll9KQorICAgIHNldChMSUJHQ1JZUFRf
SU5DTFVERV9ESVJTICR7TElCR0NSWVBUX0lOQ0xVREVfRElSfSkKK2VuZGlmKCkKKworbWFya19h
c19hZHZhbmNlZChMSUJHQ1JZUFRfTElCUkFSWSBMSUJHQ1JZUFRfSU5DTFVERV9ESVIpCisKK2lu
Y2x1ZGUoRmVhdHVyZVN1bW1hcnkpCitzZXRfcGFja2FnZV9wcm9wZXJ0aWVzKExpYkdjcnlwdCBQ
Uk9QRVJUSUVTCisgICAgREVTQ1JJUFRJT04gIkEgZ2VuZXJhbCBwdXJwb3NlIGNyeXB0b2dyYXBo
aWMgbGlicmFyeSBiYXNlZCBvbiB0aGUgY29kZSBmcm9tIEdudVBHLiIKKyAgICBVUkwgImh0dHA6
Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJnY3J5cHQvIgorKQorCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvY21ha2UvRmluZExpYkdwZ0Vycm9yLmNtYWtlIGIvU291cmNlL2NtYWtlL0ZpbmRMaWJHcGdF
cnJvci5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2Q1NzA2Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL2NtYWtlL0ZpbmRMaWJHcGdFcnJvci5jbWFrZQpAQCAt
MCwwICsxLDkyIEBACisjLnJzdAorIyBGaW5kTGliR3BnRXJyb3IKKyMgLS0tLS0tLS0tLS0tLS0t
CisjCisjIEZpbmRzIHRoZSBMaWJncGctZXJyb3IgbGlicmFyeS4KKyMKKyMgVGhpcyB3aWxsIGRl
ZmluZSB0aGUgZm9sbG93aW5nIHZhcmlhYmxlczoKKyMKKyMgYGBMSUJHUEdfRVJST1JfRk9VTkRg
YAorIyAgICAgVHJ1ZSBpZiB0aGUgcmVxdWVzdGVkIHZlcnNpb24gb2YgZ2NyeXB0IHdhcyBmb3Vu
ZAorIyBgYExJQkdQR19FUlJPUl9WRVJTSU9OYGAKKyMgICAgIFRoZSB2ZXJzaW9uIG9mIGdjcnlw
dCB0aGF0IHdhcyBmb3VuZAorIyBgYExJQkdQR19FUlJPUl9JTkNMVURFX0RJUlNgYAorIyAgICAg
VGhlIGdjcnlwdCBpbmNsdWRlIGRpcmVjdG9yaWVzCisjIGBgTElCR1BHX0VSUk9SX0xJQlJBUklF
U2BgCisjICAgICBUaGUgbGlua2VyIGxpYnJhcmllcyBuZWVkZWQgdG8gdXNlIHRoZSBnY3J5cHQg
bGlicmFyeQorCisjIEluc3BpcmVkIGJ5IExpYkdjcnlwdC5jbWFrZQorIyBDb3B5cmlnaHQgMjAx
NCBOaWNvbMOhcyBBbHZhcmV6IDxuaWNvbGFzLmFsdmFyZXpAZ21haWwuY29tPgorIyBDb3B5cmln
aHQgMjAxNiBQaGlsaXBwZSBOb3JtYW5kIDxwaGlsbkBpZ2FsaWEuY29tPgorIworIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjCisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBjb3B5cmlnaHQK
KyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBUaGUgbmFtZSBvZiB0aGUg
YXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMg
ICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFV
VEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisjIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4KKyMgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorIyBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyMgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyMgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworZmluZF9wcm9ncmFtKEdQR19FUlJPUl9DT05GSUdfU0NSSVBUIE5BTUVT
IGdwZy1lcnJvci1jb25maWcpCitpZihHUEdfRVJST1JfQ09ORklHX1NDUklQVCkKKyAgICBleGVj
dXRlX3Byb2Nlc3MoCisgICAgICAgIENPTU1BTkQgIiR7R1BHX0VSUk9SX0NPTkZJR19TQ1JJUFR9
IiAtLXByZWZpeAorICAgICAgICBSRVNVTFRfVkFSSUFCTEUgQ09ORklHU0NSSVBUX1JFU1VMVAor
ICAgICAgICBPVVRQVVRfVkFSSUFCTEUgUFJFRklYCisgICAgICAgIE9VVFBVVF9TVFJJUF9UUkFJ
TElOR19XSElURVNQQUNFCisgICAgKQorICAgIGlmIChDT05GSUdTQ1JJUFRfUkVTVUxUIEVRVUFM
IDApCisgICAgICAgIHNldChMSUJHUEdfRVJST1JfTElCX0hJTlQgIiR7UFJFRklYfS9saWIiKQor
ICAgICAgICBzZXQoTElCR1BHX0VSUk9SX0lOQ0xVREVfSElOVCAiJHtQUkVGSVh9L2luY2x1ZGUi
KQorICAgIGVuZGlmKCkKK2VuZGlmKCkKKworZmluZF9saWJyYXJ5KExJQkdQR19FUlJPUl9MSUJS
QVJZCisgICAgTkFNRVMgZ3BnLWVycm9yCisgICAgSElOVFMgJHtMSUJHUEdfRVJST1JfTElCX0hJ
TlR9CispCitmaW5kX3BhdGgoTElCR1BHX0VSUk9SX0lOQ0xVREVfRElSCisgICAgTkFNRVMgZ3Bn
LWVycm9yLmgKKyAgICBISU5UUyAke0xJQkdQR19FUlJPUl9JTkNMVURFX0hJTlR9CispCisKK2lm
KExJQkdQR19FUlJPUl9JTkNMVURFX0RJUikKKyAgICBmaWxlKFNUUklOR1MgJHtMSUJHUEdfRVJS
T1JfSU5DTFVERV9ESVJ9L2dwZy1lcnJvci5oIEdQR19FUlJPUl9IIFJFR0VYICJeI2RlZmluZSBH
UEdfRVJST1JfVkVSU0lPTiAiKQorICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICJeI2RlZmluZSBH
UEdfRVJST1JfVkVSU0lPTiBcIiguKilcIi4qJCIgIlxcMSIgTElCR1BHX0VSUk9SX1ZFUlNJT04g
IiR7R1BHX0VSUk9SX0h9IikKK2VuZGlmKCkKKworaW5jbHVkZShGaW5kUGFja2FnZUhhbmRsZVN0
YW5kYXJkQXJncykKKworZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdzKExpYkdwZ19F
cnJvcgorICAgIEZPVU5EX1ZBUiBMSUJHUEdfRVJST1JfRk9VTkQKKyAgICBSRVFVSVJFRF9WQVJT
IExJQkdQR19FUlJPUl9MSUJSQVJZIExJQkdQR19FUlJPUl9JTkNMVURFX0RJUgorICAgIFZFUlNJ
T05fVkFSIExJQkdQR19FUlJPUl9WRVJTSU9OCispCitpZihMSUJHUEdfRVJST1JfRk9VTkQpCisg
ICAgc2V0KExJQkdQR19FUlJPUl9MSUJSQVJJRVMgJHtMSUJHUEdfRVJST1JfTElCUkFSWX0pCisg
ICAgc2V0KExJQkdQR19FUlJPUl9JTkNMVURFX0RJUlMgJHtMSUJHUEdfRVJST1JfSU5DTFVERV9E
SVJ9KQorZW5kaWYoKQorCittYXJrX2FzX2FkdmFuY2VkKExJQkdQR19FUlJPUl9MSUJSQVJZIExJ
QkdQR19FUlJPUl9JTkNMVURFX0RJUikKKworaW5jbHVkZShGZWF0dXJlU3VtbWFyeSkKK3NldF9w
YWNrYWdlX3Byb3BlcnRpZXMoTGliR3BnRXJyb3IgUFJPUEVSVElFUworICAgIERFU0NSSVBUSU9O
ICJUaGUgR251UEcgZXJyb3IgbGlicmFyeS4iCisgICAgVVJMICJodHRwOi8vd3d3LmdudXBnLm9y
Zy9yZWxhdGVkX3NvZnR3YXJlL2xpYmdwZy1lcnJvci8iCispCisKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UK
aW5kZXggYzM1YjFlMS4uZWMzNDQ1ZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNH
VEsuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKQEAgLTEzMyw2ICsx
MzMsNyBAQCBlbmRpZiAoKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxF
X0FDQ0VMRVJBVEVEXzJEX0NBTlZBUyBQVUJMSUMgT0ZGKQogV0VCS0lUX09QVElPTl9ERUZBVUxU
X1BPUlRfVkFMVUUoRU5BQkxFX0NSRURFTlRJQUxfU1RPUkFHRSBQVUJMSUMgT04pCiBXRUJLSVRf
T1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfRFJBR19TVVBQT1JUIFBVQkxJQyBPTikK
K1dFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9FTkNSWVBURURfTUVESUEg
UFVCTElDIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0dFT0xP
Q0FUSU9OIFBVQkxJQyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJM
RV9JQ09OREFUQUJBU0UgUFVCTElDIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFM
VUUoRU5BQkxFX0pJVCBQVUJMSUMgT04pCkBAIC0zNzUsNiArMzc2LDE0IEBAIGlmIChFTkFCTEVf
VklERU8gT1IgRU5BQkxFX1dFQl9BVURJTykKICAgICBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChV
U0VfR1NUUkVBTUVSIFRSVUUpCiBlbmRpZiAoKQogCitpZiAoRU5BQkxFX0VOQ1JZUFRFRF9NRURJ
QSkKKyAgICBpZiAoUENfR1NUUkVBTUVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDEuNi4xKQorICAg
ICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJHU3RyZWFtZXIgMS42IGlzIHJlcXVpcmVkIHRvIHVz
ZSBFTkFCTEVfRU5DUllQVEVEX01FRElBIikKKyAgICBlbmRpZiAoKQorICAgIGZpbmRfcGFja2Fn
ZShMaWJHY3J5cHQgUkVRVUlSRUQpCisgICAgZmluZF9wYWNrYWdlKExpYkdwZ0Vycm9yIFJFUVVJ
UkVEKQorZW5kaWYgKCkKKwogaWYgKEVOQUJMRV9RVUFSVFpfVEFSR0VUKQogICAgIGlmIChOT1Qg
R1RLM19TVVBQT1JUU19RVUFSVFopCiAgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlJlY29t
cGlsZSBHVEsrIHdpdGggUXVhcnR6IGJhY2tlbmQgdG8gdXNlIEVOQUJMRV9RVUFSVFpfVEFSR0VU
IikKZGlmZiAtLWdpdCBhL1Rvb2xzL2d0ay9pbnN0YWxsLWRlcGVuZGVuY2llcyBiL1Rvb2xzL2d0
ay9pbnN0YWxsLWRlcGVuZGVuY2llcwppbmRleCBjYjA3ZjUxLi44MjY4NjE4IDEwMDc1NQotLS0g
YS9Ub29scy9ndGsvaW5zdGFsbC1kZXBlbmRlbmNpZXMKKysrIGIvVG9vbHMvZ3RrL2luc3RhbGwt
ZGVwZW5kZW5jaWVzCkBAIC0xNTUsNyArMTU1LDcgQEAgZnVuY3Rpb24gaW5zdGFsbERlcGVuZGVu
Y2llc1dpdGhBcHQgewogICAgICAgICBsaWJjcm9jbzMtZGV2IFwKICAgICAgICAgbGliZWdsMS1t
ZXNhLWRldiBcCiAgICAgICAgIGxpYmVwb3h5LWRldiBcCi0gICAgICAgIGxpYmdjcnlwdDExLWRl
diBcCisgICAgICAgIGxpYmdjcnlwdDIwLWRldiBcCiAgICAgICAgIGxpYmdwZy1lcnJvci1kZXYg
XAogICAgICAgICBsaWJqc29uLWdsaWItZGV2IFwKICAgICAgICAgbGlib3JjLTAuNC1kZXYgXApA
QCAtMjMxLDYgKzIzMSw3IEBAIGZ1bmN0aW9uIGluc3RhbGxEZXBlbmRlbmNpZXNXaXRoUGFjbWFu
IHsKICAgICAgICAgZmFhZDIgXAogICAgICAgICBnZW9jbHVlIFwKICAgICAgICAgZ29iamVjdC1p
bnRyb3NwZWN0aW9uIFwKKyAgICAgICAgbGliZ2NyeXB0IFwKICAgICAgICAgbWVzYSBcCiAgICAg
ICAgIG1lc2EtbGliZ2wgXAogICAgICAgICBnbnV0bHMgXApAQCAtMzU1LDYgKzM1Niw3IEBAIGZ1
bmN0aW9uIGluc3RhbGxEZXBlbmRlbmNpZXNXaXRoRG5mIHsKICAgICAgICAgbGliWHQtZGV2ZWwg
XAogICAgICAgICBsaWJYdHN0LWRldmVsIFwKICAgICAgICAgbGliZWRpdC1kZXZlbCBcCisgICAg
ICAgIGxpYmdjcnlwdC1kZXZlbCBcCiAgICAgICAgIGxpYmd1ZGV2MS1kZXZlbCBcCiAgICAgICAg
IGxpYmljdS1kZXZlbCBcCiAgICAgICAgIGxpYmpwZWctdHVyYm8tZGV2ZWwgXAotLSAKMi43LjA=
</data>
<flag name="review"
          id="297088"
          type_id="1"
          status="-"
          setter="calvaris"
    />
    <flag name="commit-queue"
          id="297263"
          type_id="3"
          status="-"
          setter="cgarcia"
    />
          </attachment>
      

    </bug>

</bugzilla>