<?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>162915</bug_id>
          
          <creation_ts>2016-10-04 10:19:47 -0700</creation_ts>
          <short_desc>[GStreamer][EME] Base class for decryption support</short_desc>
          <delta_ts>2016-10-26 01:48:55 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>157314</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Enrique Ocaña">eocanha</reporter>
          <assigned_to name="Enrique Ocaña">eocanha</assigned_to>
          <cc>calvaris</cc>
    
    <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1236229</commentid>
    <comment_count>0</comment_count>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-04 10:19:47 -0700</bug_when>
    <thetext>Add common encryption base class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236231</commentid>
    <comment_count>1</comment_count>
      <attachid>290611</attachid>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-04 10:25:35 -0700</bug_when>
    <thetext>Created attachment 290611
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236233</commentid>
    <comment_count>2</comment_count>
      <attachid>290611</attachid>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-04 10:26:24 -0700</bug_when>
    <thetext>Comment on attachment 290611
Patch

Wait until all the patches in 157314 are ready.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236234</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-04 10:28:09 -0700</bug_when>
    <thetext>Attachment 290611 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/gstreamer/eme/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/eme/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/eme/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: 3 in 3 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>1236238</commentid>
    <comment_count>4</comment_count>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-04 10:36:14 -0700</bug_when>
    <thetext>The style failures are on purpose, because of gobject macro machinery requirements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1237974</commentid>
    <comment_count>5</comment_count>
      <attachid>290611</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2016-10-08 08:59:41 -0700</bug_when>
    <thetext>Comment on attachment 290611
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:34
&gt; +    GstEvent* protectionEvent;

GRefPtr

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

Move these to the latest before they are used.

&gt; Source/WebCore/platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:109
&gt; +    GstCaps* transformedCaps = gst_caps_new_empty();
&gt; +    WebKitMediaCommonEncryptionDecrypt* self = WEBKIT_MEDIA_CENC_DECRYPT(base);
&gt; +    WebKitMediaCommonEncryptionDecryptClass* klass = WEBKIT_MEDIA_CENC_DECRYPT_GET_CLASS(self);

Move these after the GST_DEBUG_OBJECT

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

incomingStructure, outgoingStructure, GRefPtr for outgoing

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

GRefPtr

&gt; Source/WebCore/platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:161
&gt; +            out = gst_structure_copy(tmp);
&gt; +            gst_structure_set(out, &quot;protection-system&quot;, G_TYPE_STRING, klass-&gt;protectionSystemId,
&gt; +                &quot;original-media-type&quot;, G_TYPE_STRING, gst_structure_get_name(in), nullptr);
&gt; +
&gt; +            gst_structure_set_name(out, &quot;application/x-cenc&quot;);
&gt; +            gst_structure_free(tmp);

It does not make too much sense to me to copy the structure and free the original. Better to just assign it and avoid a copy.

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

s -&gt; structure

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

If we want to use GRefPtr we probably want to use leakRef here in the if and remove the else.

&gt; Source/WebCore/platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:197
&gt; +    guint subSampleCount, ivSize;

unsigned

&gt; Source/WebCore/platform/graphics/gstreamer/eme/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;

Could you please check this variables and move them to the latest place possible?

&gt; Source/WebCore/platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:210
&gt; +            GST_DEBUG_OBJECT(self, &quot;can&apos;t process key requests in less than PAUSED state&quot;);

ERROR?

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

ret -&gt; result</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240771</commentid>
    <comment_count>6</comment_count>
      <attachid>291770</attachid>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-16 12:11:48 -0700</bug_when>
    <thetext>Created attachment 291770
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240778</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-16 12:14:45 -0700</bug_when>
    <thetext>Attachment 291770 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/gstreamer/eme/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/eme/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/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:79:  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: 3 in 3 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>1244682</commentid>
    <comment_count>8</comment_count>
      <attachid>292900</attachid>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-26 01:23:25 -0700</bug_when>
    <thetext>Created attachment 292900
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244689</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-26 01:29:40 -0700</bug_when>
    <thetext>Attachment 292900 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/gstreamer/eme/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/eme/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/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:79:  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: 3 in 3 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>1244722</commentid>
    <comment_count>10</comment_count>
      <attachid>292900</attachid>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-26 01:48:47 -0700</bug_when>
    <thetext>Comment on attachment 292900
Patch

Clearing flags on attachment: 292900

Committed r207887: &lt;http://trac.webkit.org/changeset/207887&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244723</commentid>
    <comment_count>11</comment_count>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-26 01:48:55 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290611</attachid>
            <date>2016-10-04 10:25:35 -0700</date>
            <delta_ts>2016-10-16 12:11:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162915-20161004172223.patch</filename>
            <type>text/plain</type>
            <size>21944</size>
            <attacher name="Enrique Ocaña">eocanha</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2NTc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjQwMmFjYTQ4ZTJhZGEw
OTY5MGM2ZDcyZTA3NmI2NTc3ODBiZGY2YS4uMTE5MmE3NDllZDYxYWI0OTdmNjg3MjI0OTQ0M2Vi
YTlhZTNmOGI5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI4IEBACiAyMDE2LTEwLTA0ICBFbnJp
cXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+CiAKKyAgICAgICAgW0dT
dHJlYW1lcl1bRU1FXSBCYXNlIGNsYXNzIGZvciBkZWNyeXB0aW9uIHN1cHBvcnQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjkxNQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBjb21tb24gZW5jcnlw
dGlvbiBiYXNlIGNsYXNzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaXMgYXV0aG9yZWQgYnkgUGhp
bGlwcGUgTm9ybWFuZCA8cGhpbG5AaWdhbGlhLmNvbT4uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3Ry
ZWFtZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKHdlYmtpdF9tZWRpYV9jb21tb25fZW5jcnlwdGlv
bl9kZWNyeXB0X2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0X21lZGlhX2NvbW1vbl9lbmNy
eXB0aW9uX2RlY3J5cHRfaW5pdCk6CisgICAgICAgICh3ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRp
b25EZWNyeXB0b3JGaW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRNZWRpYUNvbW1vbkVuY3J5cHRp
b25EZWNyeXB0VHJhbnNmb3JtQ2Fwcyk6CisgICAgICAgICh3ZWJraXRNZWRpYUNvbW1vbkVuY3J5
cHRpb25EZWNyeXB0VHJhbnNmb3JtSW5QbGFjZSk6CisgICAgICAgICh3ZWJraXRNZWRpYUNvbW1v
bkVuY3J5cHRpb25EZWNyeXB0U2lua0V2ZW50SGFuZGxlcik6CisgICAgICAgICh3ZWJLaXRNZWRp
YUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JDaGFuZ2VTdGF0ZSk6CisgICAgICAgICh3ZWJLaXRN
ZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0RGVmYXVsdFNldHVwQ2lwaGVyKToKKyAgICAgICAg
KHdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHREZWZhdWx0UmVsZWFzZUNpcGhlcik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25F
bmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmg6IEFkZGVkLgorCisyMDE2LTEwLTA0ICBFbnJp
cXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+CisKICAgICAgICAgW0dT
dHJlYW1lcl1bRU1FXSBVdGlsaXR5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBkZWNyeXB0b3IKICAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjkxNAogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dl
YktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9u
RGVjcnlwdG9yR1N0cmVhbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MmUxMzdhM2ViNDU0MDliMzc4NjUy
Yzk1MTM3MDE0OGIyYzUxNmI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlw
dG9yR1N0cmVhbWVyLmNwcApAQCAtMCwwICsxLDM4NCBAQAorLyogR1N0cmVhbWVyIENsZWFyS2V5
IGNvbW1vbiBlbmNyeXB0aW9uIGRlY3J5cHRvcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBZ
b3VWaWV3IFRWIEx0ZC4gPGFsZXguYXNobGV5QHlvdXZpZXcuY29tPgorICogQ29weXJpZ2h0IChD
KSAyMDE2IE1ldHJvbG9naWNhbAorICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwKKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIFN1aXRlIDUwMCwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMzNSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmgiCisKKyNpZiBFTkFCTEUo
RU5DUllQVEVEX01FRElBX1YyKSAmJiBVU0UoR1NUUkVBTUVSKQorCisjaW5jbHVkZSAiR1JlZlB0
ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKyNpbmNsdWRlIDx3dGYv
UnVuTG9vcC5oPgorCisjZGVmaW5lIFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX1BSSVZB
VEUob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBXRUJLSVRfVFlQRV9N
RURJQV9DRU5DX0RFQ1JZUFQsIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2
YXRlKSkKK3N0cnVjdCBfV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGUg
eworICAgIEdzdEV2ZW50KiBwcm90ZWN0aW9uRXZlbnQ7CisKKyAgICBib29sIGtleVJlY2VpdmVk
OworICAgIExvY2sgbXV0ZXg7CisgICAgQ29uZGl0aW9uIGNvbmRpdGlvbjsKK307CisKK3N0YXRp
YyBHc3RTdGF0ZUNoYW5nZVJldHVybiB3ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0
b3JDaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7Citz
dGF0aWMgdm9pZCB3ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JGaW5hbGl6ZShH
T2JqZWN0Kik7CitzdGF0aWMgR3N0Q2Fwcyogd2Via2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVj
cnlwdFRyYW5zZm9ybUNhcHMoR3N0QmFzZVRyYW5zZm9ybSosIEdzdFBhZERpcmVjdGlvbiwgR3N0
Q2FwcyosIEdzdENhcHMqKTsKK3N0YXRpYyBHc3RGbG93UmV0dXJuIHdlYmtpdE1lZGlhQ29tbW9u
RW5jcnlwdGlvbkRlY3J5cHRUcmFuc2Zvcm1JblBsYWNlKEdzdEJhc2VUcmFuc2Zvcm0qLCBHc3RC
dWZmZXIqKTsKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNy
eXB0U2lua0V2ZW50SGFuZGxlcihHc3RCYXNlVHJhbnNmb3JtKiwgR3N0RXZlbnQqKTsKKworc3Rh
dGljIGdib29sZWFuIHdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHREZWZhdWx0U2V0
dXBDaXBoZXIoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCopOworc3RhdGljIHZv
aWQgd2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdERlZmF1bHRSZWxlYXNlQ2lwaGVy
KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqKTsKKworR1NUX0RFQlVHX0NBVEVH
T1JZX1NUQVRJQyh3ZWJraXRfbWVkaWFfY29tbW9uX2VuY3J5cHRpb25fZGVjcnlwdF9kZWJ1Z19j
YXRlZ29yeSk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfbWVkaWFfY29tbW9uX2Vu
Y3J5cHRpb25fZGVjcnlwdF9kZWJ1Z19jYXRlZ29yeQorCisjZGVmaW5lIHdlYmtpdF9tZWRpYV9j
b21tb25fZW5jcnlwdGlvbl9kZWNyeXB0X3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKK0dfREVG
SU5FX1RZUEUoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCwgd2Via2l0X21lZGlh
X2NvbW1vbl9lbmNyeXB0aW9uX2RlY3J5cHQsIEdTVF9UWVBFX0JBU0VfVFJBTlNGT1JNKTsKKwor
c3RhdGljIHZvaWQgd2Via2l0X21lZGlhX2NvbW1vbl9lbmNyeXB0aW9uX2RlY3J5cHRfY2xhc3Nf
aW5pdChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MqIGtsYXNzKQorewor
ICAgIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyogYmFzZVRyYW5zZm9ybUNsYXNzID0gR1NUX0JBU0Vf
VFJBTlNGT1JNX0NMQVNTKGtsYXNzKTsKKyAgICBHc3RFbGVtZW50Q2xhc3MqIGVsZW1lbnRDbGFz
cyA9IEdTVF9FTEVNRU5UX0NMQVNTKGtsYXNzKTsKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RD
bGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxp
emUgPSB3ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JGaW5hbGl6ZTsKKworICAg
IEdTVF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF9tZWRpYV9jb21tb25fZW5jcnlwdGlvbl9k
ZWNyeXB0X2RlYnVnX2NhdGVnb3J5LAorICAgICAgICAid2Via2l0Y2VuYyIsIDAsICJDb21tb24g
RW5jcnlwdGlvbiBiYXNlIGNsYXNzIik7CisKKyAgICBlbGVtZW50Q2xhc3MtPmNoYW5nZV9zdGF0
ZSA9IEdTVF9ERUJVR19GVU5DUFRSKHdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRv
ckNoYW5nZVN0YXRlKTsKKworICAgIGJhc2VUcmFuc2Zvcm1DbGFzcy0+dHJhbnNmb3JtX2lwID0g
R1NUX0RFQlVHX0ZVTkNQVFIod2Via2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFRyYW5z
Zm9ybUluUGxhY2UpOworICAgIGJhc2VUcmFuc2Zvcm1DbGFzcy0+dHJhbnNmb3JtX2NhcHMgPSBH
U1RfREVCVUdfRlVOQ1BUUih3ZWJraXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0VHJhbnNm
b3JtQ2Fwcyk7CisgICAgYmFzZVRyYW5zZm9ybUNsYXNzLT50cmFuc2Zvcm1faXBfb25fcGFzc3Ro
cm91Z2ggPSBGQUxTRTsKKyAgICBiYXNlVHJhbnNmb3JtQ2xhc3MtPnNpbmtfZXZlbnQgPSBHU1Rf
REVCVUdfRlVOQ1BUUih3ZWJraXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0U2lua0V2ZW50
SGFuZGxlcik7CisKKyAgICBrbGFzcy0+c2V0dXBDaXBoZXIgPSBHU1RfREVCVUdfRlVOQ1BUUih3
ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0RGVmYXVsdFNldHVwQ2lwaGVyKTsKKyAg
ICBrbGFzcy0+cmVsZWFzZUNpcGhlciA9IEdTVF9ERUJVR19GVU5DUFRSKHdlYktpdE1lZGlhQ29t
bW9uRW5jcnlwdGlvbkRlY3J5cHREZWZhdWx0UmVsZWFzZUNpcGhlcik7CisKKyAgICBnX3R5cGVf
Y2xhc3NfYWRkX3ByaXZhdGUoa2xhc3MsIHNpemVvZihXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRp
b25EZWNyeXB0UHJpdmF0ZSkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfbWVkaWFfY29tbW9u
X2VuY3J5cHRpb25fZGVjcnlwdF9pbml0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5
cHQqIHNlbGYpCit7CisgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZh
dGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9QUklWQVRFKHNlbGYpOwor
CisgICAgc2VsZi0+cHJpdiA9IHByaXY7CisgICAgbmV3IChwcml2KSBXZWJLaXRNZWRpYUNvbW1v
bkVuY3J5cHRpb25EZWNyeXB0UHJpdmF0ZSgpOworCisgICAgR3N0QmFzZVRyYW5zZm9ybSogYmFz
ZSA9IEdTVF9CQVNFX1RSQU5TRk9STShzZWxmKTsKKyAgICBnc3RfYmFzZV90cmFuc2Zvcm1fc2V0
X2luX3BsYWNlKGJhc2UsIFRSVUUpOworICAgIGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcGFzc3Ro
cm91Z2goYmFzZSwgRkFMU0UpOworICAgIGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfZ2FwX2F3YXJl
KGJhc2UsIEZBTFNFKTsKK30KKworc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFDb21tb25FbmNyeXB0
aW9uRGVjcnlwdG9yRmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdE1lZGlh
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBU
KG9iamVjdCk7CisgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGUq
IHByaXYgPSBzZWxmLT5wcml2OworCisgICAgcHJpdi0+fldlYktpdE1lZGlhQ29tbW9uRW5jcnlw
dGlvbkRlY3J5cHRQcml2YXRlKCk7CisgICAgR1NUX0NBTExfUEFSRU5UKEdfT0JKRUNUX0NMQVNT
LCBmaW5hbGl6ZSwgKG9iamVjdCkpOworfQorCitzdGF0aWMgR3N0Q2Fwcyogd2Via2l0TWVkaWFD
b21tb25FbmNyeXB0aW9uRGVjcnlwdFRyYW5zZm9ybUNhcHMoR3N0QmFzZVRyYW5zZm9ybSogYmFz
ZSwgR3N0UGFkRGlyZWN0aW9uIGRpcmVjdGlvbiwgR3N0Q2FwcyogY2FwcywgR3N0Q2FwcyogZmls
dGVyKQoreworICAgIGlmIChkaXJlY3Rpb24gPT0gR1NUX1BBRF9VTktOT1dOKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIEdzdENhcHMqIHRyYW5zZm9ybWVkQ2FwcyA9IGdzdF9jYXBz
X25ld19lbXB0eSgpOworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNl
bGYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUKGJhc2UpOworICAgIFdlYktpdE1lZGlhQ29t
bW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzcyoga2xhc3MgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNS
WVBUX0dFVF9DTEFTUyhzZWxmKTsKKworICAgIEdTVF9ERUJVR19PQkpFQ1QoYmFzZSwgImRpcmVj
dGlvbjogJXMsIGNhcHM6ICUiIEdTVF9QVFJfRk9STUFUICIgZmlsdGVyOiAlIiBHU1RfUFRSX0ZP
Uk1BVCwgKGRpcmVjdGlvbiA9PSBHU1RfUEFEX1NSQykgPyAic3JjIiA6ICJzaW5rIiwgY2Fwcywg
ZmlsdGVyKTsKKworICAgIHVuc2lnbmVkIHNpemUgPSBnc3RfY2Fwc19nZXRfc2l6ZShjYXBzKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIEdzdFN0
cnVjdHVyZSogaW4gPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlKGNhcHMsIGkpOworICAgICAgICBH
c3RTdHJ1Y3R1cmUqIG91dCA9IG51bGxwdHI7CisKKyAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBH
U1RfUEFEX1NJTkspIHsKKyAgICAgICAgICAgIGlmICghZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGQo
aW4sICJvcmlnaW5hbC1tZWRpYS10eXBlIikpCisgICAgICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgICAgIG91dCA9IGdzdF9zdHJ1Y3R1cmVfY29weShpbik7CisgICAgICAgICAgICBn
c3Rfc3RydWN0dXJlX3NldF9uYW1lKG91dCwgZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKG91dCwg
Im9yaWdpbmFsLW1lZGlhLXR5cGUiKSk7CisKKyAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgdGhl
IERSTSByZWxhdGVkIGZpZWxkcyBmcm9tIHRoZSBkb3duLXN0cmVhbSBjYXBzLgorICAgICAgICAg
ICAgZm9yIChpbnQgaiA9IDA7IGogPCBnc3Rfc3RydWN0dXJlX25fZmllbGRzKGluKTsgKytqKSB7
CisgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIqIGZpZWxkTmFtZSA9IGdzdF9zdHJ1Y3R1cmVf
bnRoX2ZpZWxkX25hbWUoaW4sIGopOworCisgICAgICAgICAgICAgICAgaWYgKGdfc3RyX2hhc19w
cmVmaXgoZmllbGROYW1lLCAicHJvdGVjdGlvbi1zeXN0ZW0iKQorICAgICAgICAgICAgICAgICAg
ICB8fCBnX3N0cl9oYXNfcHJlZml4KGZpZWxkTmFtZSwgIm9yaWdpbmFsLW1lZGlhLXR5cGUiKSkK
KyAgICAgICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQob3V0LCBmaWVs
ZE5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgR3N0
U3RydWN0dXJlKiB0bXAgPSBnc3Rfc3RydWN0dXJlX2NvcHkoaW4pOworICAgICAgICAgICAgLy8g
RmlsdGVyIG91dCB0aGUgdmlkZW8gcmVsYXRlZCBmaWVsZHMgZnJvbSB0aGUgdXAtc3RyZWFtIGNh
cHMsCisgICAgICAgICAgICAvLyBiZWNhdXNlIHRoZXkgYXJlIG5vdCByZWxldmFudCB0byB0aGUg
aW5wdXQgY2FwcyBvZiB0aGlzIGVsZW1lbnQgYW5kCisgICAgICAgICAgICAvLyBjYW4gY2F1c2Ug
Y2FwcyBuZWdvdGlhdGlvbiBmYWlsdXJlcyB3aXRoIGFkYXB0aXZlIGJpdHJhdGUgc3RyZWFtcy4K
KyAgICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gZ3N0X3N0cnVjdHVyZV9uX2ZpZWxkcyh0bXAp
IC0gMTsgaW5kZXggPj0gMDsgLS1pbmRleCkgeworICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFy
KiBmaWVsZE5hbWUgPSBnc3Rfc3RydWN0dXJlX250aF9maWVsZF9uYW1lKHRtcCwgaW5kZXgpOwor
ICAgICAgICAgICAgICAgIEdTVF9UUkFDRSgiQ2hlY2sgZmllbGQgXCIlc1wiIGZvciByZW1vdmFs
IiwgZmllbGROYW1lKTsKKworICAgICAgICAgICAgICAgIGlmICghZ19zdHJjbXAwKGZpZWxkTmFt
ZSwgImJhc2UtcHJvZmlsZSIpCisgICAgICAgICAgICAgICAgICAgIHx8ICFnX3N0cmNtcDAoZmll
bGROYW1lLCAiY29kZWNfZGF0YSIpCisgICAgICAgICAgICAgICAgICAgIHx8ICFnX3N0cmNtcDAo
ZmllbGROYW1lLCAiaGVpZ2h0IikKKyAgICAgICAgICAgICAgICAgICAgfHwgIWdfc3RyY21wMChm
aWVsZE5hbWUsICJmcmFtZXJhdGUiKQorICAgICAgICAgICAgICAgICAgICB8fCAhZ19zdHJjbXAw
KGZpZWxkTmFtZSwgImxldmVsIikKKyAgICAgICAgICAgICAgICAgICAgfHwgIWdfc3RyY21wMChm
aWVsZE5hbWUsICJwaXhlbC1hc3BlY3QtcmF0aW8iKQorICAgICAgICAgICAgICAgICAgICB8fCAh
Z19zdHJjbXAwKGZpZWxkTmFtZSwgInByb2ZpbGUiKQorICAgICAgICAgICAgICAgICAgICB8fCAh
Z19zdHJjbXAwKGZpZWxkTmFtZSwgInJhdGUiKQorICAgICAgICAgICAgICAgICAgICB8fCAhZ19z
dHJjbXAwKGZpZWxkTmFtZSwgIndpZHRoIikpIHsKKyAgICAgICAgICAgICAgICAgICAgZ3N0X3N0
cnVjdHVyZV9yZW1vdmVfZmllbGQodG1wLCBmaWVsZE5hbWUpOworICAgICAgICAgICAgICAgICAg
ICBHU1RfVFJBQ0UoIlJlbW92aW5nIGZpZWxkICVzIiwgZmllbGROYW1lKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG91dCA9IGdzdF9zdHJ1Y3R1cmVf
Y29weSh0bXApOworICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQob3V0LCAicHJvdGVjdGlv
bi1zeXN0ZW0iLCBHX1RZUEVfU1RSSU5HLCBrbGFzcy0+cHJvdGVjdGlvblN5c3RlbUlkLAorICAg
ICAgICAgICAgICAgICJvcmlnaW5hbC1tZWRpYS10eXBlIiwgR19UWVBFX1NUUklORywgZ3N0X3N0
cnVjdHVyZV9nZXRfbmFtZShpbiksIG51bGxwdHIpOworCisgICAgICAgICAgICBnc3Rfc3RydWN0
dXJlX3NldF9uYW1lKG91dCwgImFwcGxpY2F0aW9uL3gtY2VuYyIpOworICAgICAgICAgICAgZ3N0
X3N0cnVjdHVyZV9mcmVlKHRtcCk7CisgICAgICAgIH0KKworICAgICAgICBib29sIGR1cGxpY2F0
ZSA9IGZhbHNlOworICAgICAgICB1bnNpZ25lZCBzaXplID0gZ3N0X2NhcHNfZ2V0X3NpemUodHJh
bnNmb3JtZWRDYXBzKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgIWR1cGxp
Y2F0ZSAmJiBpbmRleCA8IHNpemU7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIEdzdFN0cnVjdHVy
ZSogcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUodHJhbnNmb3JtZWRDYXBzLCBpbmRleCk7Cisg
ICAgICAgICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9pc19lcXVhbChzLCBvdXQpKQorICAgICAgICAg
ICAgICAgIGR1cGxpY2F0ZSA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWR1cGxp
Y2F0ZSkKKyAgICAgICAgICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmUodHJhbnNmb3JtZWRD
YXBzLCBvdXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2ZyZWUo
b3V0KTsKKyAgICB9CisKKyAgICBpZiAoZmlsdGVyKSB7CisgICAgICAgIEdzdENhcHMqIGludGVy
c2VjdGlvbjsKKworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKGJhc2UsICJVc2luZyBmaWx0ZXIg
Y2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwgZmlsdGVyKTsKKyAgICAgICAgaW50ZXJzZWN0aW9uID0g
Z3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwodHJhbnNmb3JtZWRDYXBzLCBmaWx0ZXIsIEdTVF9DQVBT
X0lOVEVSU0VDVF9GSVJTVCk7CisgICAgICAgIGdzdF9jYXBzX3VucmVmKHRyYW5zZm9ybWVkQ2Fw
cyk7CisgICAgICAgIHRyYW5zZm9ybWVkQ2FwcyA9IGludGVyc2VjdGlvbjsKKyAgICB9CisKKyAg
ICBHU1RfREVCVUdfT0JKRUNUKGJhc2UsICJyZXR1cm5pbmcgJSIgR1NUX1BUUl9GT1JNQVQsIHRy
YW5zZm9ybWVkQ2Fwcyk7CisgICAgcmV0dXJuIHRyYW5zZm9ybWVkQ2FwczsKK30KKworc3RhdGlj
IEdzdEZsb3dSZXR1cm4gd2Via2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFRyYW5zZm9y
bUluUGxhY2UoR3N0QmFzZVRyYW5zZm9ybSogYmFzZSwgR3N0QnVmZmVyKiBidWZmZXIpCit7Cisg
ICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiA9IFdFQktJVF9NRURJ
QV9DRU5DX0RFQ1JZUFQoYmFzZSk7CisgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVj
cnlwdENsYXNzKiBrbGFzcyA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX0NMQVNTKHNl
bGYpOworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlKiBwcml2
ID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfUFJJVkFURShzZWxmKTsKKyAgICBndWlu
dCBzdWJTYW1wbGVDb3VudCwgaXZTaXplOworICAgIGdib29sZWFuIGVuY3J5cHRlZDsKKyAgICBj
b25zdCBHVmFsdWUqIHZhbHVlOworICAgIEdzdEJ1ZmZlciogaXZCdWZmZXIgPSBudWxscHRyOwor
ICAgIEdzdEJ1ZmZlciogc3ViU2FtcGxlc0J1ZmZlciA9IG51bGxwdHI7CisgICAgR3N0UHJvdGVj
dGlvbk1ldGEqIHByb3RlY3Rpb25NZXRhOworCisgICAgTG9ja0hvbGRlciBsb2NrZXIocHJpdi0+
bXV0ZXgpOworCisgICAgLy8gVGhlIGtleSBtaWdodCBub3QgaGF2ZSBiZWVuIHJlY2VpdmVkIHll
dC4gV2FpdCBmb3IgaXQuCisgICAgaWYgKCFwcml2LT5rZXlSZWNlaXZlZCkgeworICAgICAgICBH
U1RfREVCVUdfT0JKRUNUKHNlbGYsICJrZXkgbm90IGF2YWlsYWJsZSB5ZXQsIHdhaXRpbmcgZm9y
IGl0Iik7CisgICAgICAgIGlmIChHU1RfU1RBVEUoR1NUX0VMRU1FTlQoc2VsZikpIDwgR1NUX1NU
QVRFX1BBVVNFRCB8fCAoR1NUX1NUQVRFX1RBUkdFVChHU1RfRUxFTUVOVChzZWxmKSkgIT0gR1NU
X1NUQVRFX1ZPSURfUEVORElORyAmJiBHU1RfU1RBVEVfVEFSR0VUKEdTVF9FTEVNRU5UKHNlbGYp
KSA8IEdTVF9TVEFURV9QQVVTRUQpKSB7CisgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNl
bGYsICJjYW4ndCBwcm9jZXNzIGtleSByZXF1ZXN0cyBpbiBsZXNzIHRoYW4gUEFVU0VEIHN0YXRl
Iik7CisgICAgICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKKyAgICAgICAg
fQorICAgICAgICBwcml2LT5jb25kaXRpb24ud2FpdEZvcihwcml2LT5tdXRleCwgc3RkOjpjaHJv
bm86OnNlY29uZHMoNSksIFtwcml2XSB7CisgICAgICAgICAgICByZXR1cm4gcHJpdi0+a2V5UmVj
ZWl2ZWQ7CisgICAgICAgIH0pOworICAgICAgICBpZiAoIXByaXYtPmtleVJlY2VpdmVkKSB7Cisg
ICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJrZXkgbm90IGF2YWlsYWJsZSIpOwor
ICAgICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CisgICAgICAgIH0KKyAg
ICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAia2V5IHJlY2VpdmVkLCBjb250aW51aW5nIik7
CisgICAgfQorCisgICAgcHJvdGVjdGlvbk1ldGEgPSByZWludGVycHJldF9jYXN0PEdzdFByb3Rl
Y3Rpb25NZXRhKj4oZ3N0X2J1ZmZlcl9nZXRfcHJvdGVjdGlvbl9tZXRhKGJ1ZmZlcikpOworICAg
IGlmICghcHJvdGVjdGlvbk1ldGEpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAi
RmFpbGVkIHRvIGdldCBHc3RQcm90ZWN0aW9uIG1ldGFkYXRhIGZyb20gYnVmZmVyICVwIiwgYnVm
ZmVyKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CisgICAgfQorCisg
ICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF91aW50KHByb3RlY3Rpb25NZXRhLT5pbmZvLCAiaXZf
c2l6ZSIsICZpdlNpemUpKSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxl
ZCB0byBnZXQgaXZfc2l6ZSIpOworICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZl
ciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKKyAgICAgICAg
cmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CisgICAgfQorCisgICAgaWYgKCFnc3Rfc3Ry
dWN0dXJlX2dldF9ib29sZWFuKHByb3RlY3Rpb25NZXRhLT5pbmZvLCAiZW5jcnlwdGVkIiwgJmVu
Y3J5cHRlZCkpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdl
dCBlbmNyeXB0ZWQgZmxhZyIpOworICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZl
ciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKKyAgICAgICAg
cmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CisgICAgfQorCisgICAgaWYgKCFpdlNpemUg
fHwgIWVuY3J5cHRlZCkgeworICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwg
cmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKKyAgICAgICAgcmV0
dXJuIEdTVF9GTE9XX09LOworICAgIH0KKworICAgIEdTVF9ERUJVR19PQkpFQ1QoYmFzZSwgInBy
b3RlY3Rpb24gbWV0YTogJSIgR1NUX1BUUl9GT1JNQVQsIHByb3RlY3Rpb25NZXRhLT5pbmZvKTsK
KyAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQocHJvdGVjdGlvbk1ldGEtPmluZm8sICJz
dWJzYW1wbGVfY291bnQiLCAmc3ViU2FtcGxlQ291bnQpKSB7CisgICAgICAgIEdTVF9FUlJPUl9P
QkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQgc3Vic2FtcGxlX2NvdW50Iik7CisgICAgICAgIGdz
dF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihw
cm90ZWN0aW9uTWV0YSkpOworICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsK
KyAgICB9CisKKyAgICBpZiAoc3ViU2FtcGxlQ291bnQpIHsKKyAgICAgICAgdmFsdWUgPSBnc3Rf
c3RydWN0dXJlX2dldF92YWx1ZShwcm90ZWN0aW9uTWV0YS0+aW5mbywgInN1YnNhbXBsZXMiKTsK
KyAgICAgICAgaWYgKCF2YWx1ZSkgeworICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxm
LCAiRmFpbGVkIHRvIGdldCBzdWJzYW1wbGVzIik7CisgICAgICAgICAgICBnc3RfYnVmZmVyX3Jl
bW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1l
dGEpKTsKKyAgICAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOworICAgICAg
ICB9CisgICAgICAgIHN1YlNhbXBsZXNCdWZmZXIgPSBnc3RfdmFsdWVfZ2V0X2J1ZmZlcih2YWx1
ZSk7CisgICAgfQorCisgICAgaWYgKCFrbGFzcy0+c2V0dXBDaXBoZXIoc2VsZikpIHsKKyAgICAg
ICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBjaXBoZXIiKTsK
KyAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8
R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CisgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1Rf
U1VQUE9SVEVEOworICAgIH0KKworICAgIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUo
cHJvdGVjdGlvbk1ldGEtPmluZm8sICJpdiIpOworICAgIGlmICghdmFsdWUpIHsKKyAgICAgICAg
R1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBJViBmb3Igc2FtcGxlIik7Cisg
ICAgICAgIGtsYXNzLT5yZWxlYXNlQ2lwaGVyKHNlbGYpOworICAgICAgICBnc3RfYnVmZmVyX3Jl
bW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1l
dGEpKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CisgICAgfQorCisg
ICAgaXZCdWZmZXIgPSBnc3RfdmFsdWVfZ2V0X2J1ZmZlcih2YWx1ZSk7CisgICAgR1NUX1RSQUNF
X09CSkVDVChzZWxmLCAiZGVjcnlwdGluZyIpOworICAgIGlmICgha2xhc3MtPmRlY3J5cHQoc2Vs
ZiwgaXZCdWZmZXIsIGJ1ZmZlciwgc3ViU2FtcGxlQ291bnQsIHN1YlNhbXBsZXNCdWZmZXIpKSB7
CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkRlY3J5cHRpb24gZmFpbGVkIik7Cisg
ICAgICAgIGtsYXNzLT5yZWxlYXNlQ2lwaGVyKHNlbGYpOworICAgICAgICBnc3RfYnVmZmVyX3Jl
bW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1l
dGEpKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CisgICAgfQorCisg
ICAga2xhc3MtPnJlbGVhc2VDaXBoZXIoc2VsZik7CisgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0
YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7Cisg
ICAgcmV0dXJuIEdTVF9GTE9XX09LOworfQorCisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRNZWRp
YUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0U2lua0V2ZW50SGFuZGxlcihHc3RCYXNlVHJhbnNmb3Jt
KiB0cmFucywgR3N0RXZlbnQqIGV2ZW50KQoreworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlw
dGlvbkRlY3J5cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUKHRyYW5zKTsKKyAg
ICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJ
VF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX1BSSVZBVEUoc2VsZik7CisgICAgV2ViS2l0TWVkaWFD
b21tb25FbmNyeXB0aW9uRGVjcnlwdENsYXNzKiBrbGFzcyA9IFdFQktJVF9NRURJQV9DRU5DX0RF
Q1JZUFRfR0VUX0NMQVNTKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IEZBTFNFOworCisg
ICAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRShldmVudCkpIHsKKyAgICBjYXNlIEdTVF9FVkVOVF9Q
Uk9URUNUSU9OOiB7CisgICAgICAgIGNvbnN0IGNoYXIqIHN5c3RlbUlkOworICAgICAgICBjb25z
dCBjaGFyKiBvcmlnaW47CisgICAgICAgIEdzdEJ1ZmZlciogaW5pdERhdGFCdWZmZXI7CisKKyAg
ICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAicmVjZWl2ZWQgcHJvdGVjdGlvbiBldmVudCIp
OworICAgICAgICBnc3RfZXZlbnRfcGFyc2VfcHJvdGVjdGlvbihldmVudCwgJnN5c3RlbUlkLCAm
aW5pdERhdGFCdWZmZXIsICZvcmlnaW4pOworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYs
ICJzeXN0ZW1JZDogJXMiLCBzeXN0ZW1JZCk7CisKKyAgICAgICAgaWYgKCFnX3N0cl9lcXVhbChz
eXN0ZW1JZCwga2xhc3MtPnByb3RlY3Rpb25TeXN0ZW1JZCkpIHsKKyAgICAgICAgICAgIGdzdF9l
dmVudF91bnJlZihldmVudCk7CisgICAgICAgICAgICByZXN1bHQgPSBUUlVFOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBLZWVwIHRoZSBldmVudCByZWYgYXJv
dW5kIHNvIHRoYXQgdGhlIHBhcnNlZCBldmVudCBkYXRhCisgICAgICAgIC8vIHJlbWFpbnMgdmFs
aWQgdW50aWwgdGhlIGRybS1rZXktbmVlZCBtZXNzYWdlIGhhcyBiZWVuIHNlbnQuCisgICAgICAg
IHByaXYtPnByb3RlY3Rpb25FdmVudCA9IGV2ZW50OworICAgICAgICBSdW5Mb29wOjptYWluKCku
ZGlzcGF0Y2goW3NlbGYsIGluaXREYXRhQnVmZmVyXSB7CisgICAgICAgICAgICBXZWJLaXRNZWRp
YUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MqIGtsYXNzID0gV0VCS0lUX01FRElBX0NFTkNf
REVDUllQVF9HRVRfQ0xBU1Moc2VsZik7CisgICAgICAgICAgICBpZiAoa2xhc3MpIHsKKyAgICAg
ICAgICAgICAgICBrbGFzcy0+cmVxdWVzdERlY3J5cHRpb25LZXkoc2VsZiwgaW5pdERhdGFCdWZm
ZXIpOworICAgICAgICAgICAgICAgIGlmIChzZWxmLT5wcml2LT5wcm90ZWN0aW9uRXZlbnQpIHsK
KyAgICAgICAgICAgICAgICAgICAgZ3N0X2V2ZW50X3VucmVmKHNlbGYtPnByaXYtPnByb3RlY3Rp
b25FdmVudCk7CisgICAgICAgICAgICAgICAgICAgIHNlbGYtPnByaXYtPnByb3RlY3Rpb25FdmVu
dCA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfX0pOworCisgICAg
ICAgIHJlc3VsdCA9IFRSVUU7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9F
VkVOVF9DVVNUT01fRE9XTlNUUkVBTV9PT0I6IHsKKyAgICAgICAgaWYgKGtsYXNzLT5oYW5kbGVL
ZXlSZXNwb25zZShzZWxmLCBldmVudCkpIHsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qo
c2VsZiwgImtleSByZWNlaXZlZCIpOworICAgICAgICAgICAgcHJpdi0+a2V5UmVjZWl2ZWQgPSB0
cnVlOworICAgICAgICAgICAgcHJpdi0+Y29uZGl0aW9uLm5vdGlmeU9uZSgpOworICAgICAgICB9
CisKKyAgICAgICAgZ3N0X2V2ZW50X3VucmVmKGV2ZW50KTsKKyAgICAgICAgcmVzdWx0ID0gVFJV
RTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIHJlc3VsdCA9
IEdTVF9CQVNFX1RSQU5TRk9STV9DTEFTUyhwYXJlbnRfY2xhc3MpLT5zaW5rX2V2ZW50KHRyYW5z
LCBldmVudCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3N0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiB3ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRp
b25EZWNyeXB0b3JDaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5n
ZSB0cmFuc2l0aW9uKQoreworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQq
IHNlbGYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUKGVsZW1lbnQpOworICAgIFdlYktpdE1l
ZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NF
TkNfREVDUllQVF9HRVRfUFJJVkFURShzZWxmKTsKKyAgICBHc3RTdGF0ZUNoYW5nZVJldHVybiBy
ZXQgPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M7CisKKyAgICBzd2l0Y2ggKHRyYW5zaXRpb24p
IHsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgorICAgICAgICBH
U1RfREVCVUdfT0JKRUNUKHNlbGYsICJQQVVTRUQtPlJFQURZIik7CisgICAgICAgIHByaXYtPmNv
bmRpdGlvbi5ub3RpZnlPbmUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0ID0gR1NUX0VMRU1FTlRfQ0xBU1MocGFyZW50X2Ns
YXNzKS0+Y2hhbmdlX3N0YXRlKGVsZW1lbnQsIHRyYW5zaXRpb24pOworCisgICAgLy8gQWRkIHBv
c3QtdHJhbnNpdGlvbiBjb2RlIGhlcmUuCisKKyAgICByZXR1cm4gcmV0OworfQorCisKK3N0YXRp
YyBnYm9vbGVhbiB3ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0RGVmYXVsdFNldHVw
Q2lwaGVyKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqKQoreworICAgIHJldHVy
biB0cnVlOworfQorCisKK3N0YXRpYyB2b2lkIHdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHREZWZhdWx0UmVsZWFzZUNpcGhlcihXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNy
eXB0KikKK3sKK30KKworCisjZW5kaWYgLy8gRU5BQkxFKEVOQ1JZUFRFRF9NRURJQV9WMikgJiYg
VVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1l
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJL
aXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWFjMGJi
ODEwMGQzNGFiNDY5ZDRhYTBhMTQ3MTU0ZWI3N2MzNzQyMQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9u
RW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qIEdTdHJl
YW1lciBDbGVhcktleSBjb21tb24gZW5jcnlwdGlvbiBkZWNyeXB0b3IKKyAqCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgWW91VmlldyBUViBMdGQuIDxhbGV4LmFzaGxleUB5b3V2aWV3LmNvbT4KKyAq
IENvcHlyaWdodCAoQykgMjAxNiBNZXRyb2xvZ2ljYWwKKyAqIENvcHlyaWdodCAoQykgMjAxNiBJ
Z2FsaWEgUy5MCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRDb21tb25F
bmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyX2gKKyNkZWZpbmUgV2ViS2l0Q29tbW9uRW5jcnlw
dGlvbkRlY3J5cHRvckdTdHJlYW1lcl9oCisKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBX1Yy
KSAmJiBVU0UoR1NUUkVBTUVSKQorCisjaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9y
bS5oPgorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdF
QktJVF9UWVBFX01FRElBX0NFTkNfREVDUllQVCAgICAgICAgICAod2Via2l0X21lZGlhX2NvbW1v
bl9lbmNyeXB0aW9uX2RlY3J5cHRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX01FRElBX0NF
TkNfREVDUllQVChvYmopICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2Jq
KSwgV0VCS0lUX1RZUEVfTUVESUFfQ0VOQ19ERUNSWVBULCBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5
cHRpb25EZWNyeXB0KSkKKyNkZWZpbmUgV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9DTEFTUyhr
bGFzcykgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCBXRUJLSVRfVFlQRV9NRURJ
QV9DRU5DX0RFQ1JZUFQsIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzcykp
CisjZGVmaW5lIFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX0NMQVNTKG9iaikgIChHX1RZ
UEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCBXRUJLSVRfVFlQRV9NRURJQV9DRU5DX0RFQ1JZ
UFQsIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzcykpCisKKyNkZWZpbmUg
V0VCS0lUX0lTX01FRElBX0NFTkNfREVDUllQVChvYmopICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfTUVESUFfQ0VOQ19ERUNSWVBUKSkKKyNkZWZp
bmUgV0VCS0lUX0lTX01FRElBX0NFTkNfREVDUllQVF9DTEFTUyhvYmopIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfVFlQRSgoa2xhc3MpLCBXRUJLSVRfVFlQRV9NRURJQV9DRU5DX0RFQ1JZUFQpKQorCit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCAgICAgICAg
V2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdDsKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MgICBXZWJLaXRNZWRpYUNvbW1vbkVu
Y3J5cHRpb25EZWNyeXB0Q2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0TWVkaWFDb21tb25F
bmNyeXB0aW9uRGVjcnlwdFByaXZhdGUgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlw
dFByaXZhdGU7CisKK0dUeXBlIHdlYmtpdF9tZWRpYV9jb21tb25fZW5jcnlwdGlvbl9kZWNyeXB0
X2dldF90eXBlKHZvaWQpOworCitzdHJ1Y3QgX1dlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHQgeworICAgIEdzdEJhc2VUcmFuc2Zvcm0gcGFyZW50OworCisgICAgV2ViS2l0TWVkaWFD
b21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGUqIHByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktp
dE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzcyB7CisgICAgR3N0QmFzZVRyYW5zZm9y
bUNsYXNzIHBhcmVudENsYXNzOworCisgICAgY29uc3QgY2hhciogcHJvdGVjdGlvblN5c3RlbUlk
OworICAgIHZvaWQgKCpyZXF1ZXN0RGVjcnlwdGlvbktleSkoV2ViS2l0TWVkaWFDb21tb25FbmNy
eXB0aW9uRGVjcnlwdCosIEdzdEJ1ZmZlciogaW5pdERhdGEpOworICAgIGdib29sZWFuICgqaGFu
ZGxlS2V5UmVzcG9uc2UpKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqLCBHc3RF
dmVudCogZXZlbnQpOworICAgIGdib29sZWFuICgqc2V0dXBDaXBoZXIpKFdlYktpdE1lZGlhQ29t
bW9uRW5jcnlwdGlvbkRlY3J5cHQqKTsKKyAgICBnYm9vbGVhbiAoKmRlY3J5cHQpKFdlYktpdE1l
ZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqLCBHc3RCdWZmZXIqIGl2QnVmZmVyLCBHc3RCdWZm
ZXIqIGJ1ZmZlciwgdW5zaWduZWQgc3ViU2FtcGxlc0NvdW50LCBHc3RCdWZmZXIqIHN1YlNhbXBs
ZXNCdWZmZXIpOworICAgIHZvaWQgKCpyZWxlYXNlQ2lwaGVyKShXZWJLaXRNZWRpYUNvbW1vbkVu
Y3J5cHRpb25EZWNyeXB0Kik7Cit9OworCitHX0VORF9ERUNMUworCisjZW5kaWYKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291770</attachid>
            <date>2016-10-16 12:11:48 -0700</date>
            <delta_ts>2016-10-26 01:23:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162915-20161016190816.patch</filename>
            <type>text/plain</type>
            <size>21922</size>
            <attacher name="Enrique Ocaña">eocanha</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3MzQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWNlNmJhNzRjOGU5NTlh
MWFmZTI4YWM0ZTFkZTg4Y2JlYWMzMmViNi4uMTdmYzhjNTllNjFkNWRiM2MwZWU5OGMxOGYyOTdl
NTFhY2YwMjU3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI4IEBACiAyMDE2LTEwLTA0ICBFbnJp
cXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+CiAKKyAgICAgICAgW0dT
dHJlYW1lcl1bRU1FXSBCYXNlIGNsYXNzIGZvciBkZWNyeXB0aW9uIHN1cHBvcnQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjkxNQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBjb21tb24gZW5jcnlw
dGlvbiBiYXNlIGNsYXNzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaXMgYXV0aG9yZWQgYnkgUGhp
bGlwcGUgTm9ybWFuZCA8cGhpbG5AaWdhbGlhLmNvbT4uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3Ry
ZWFtZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKHdlYmtpdF9tZWRpYV9jb21tb25fZW5jcnlwdGlv
bl9kZWNyeXB0X2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0X21lZGlhX2NvbW1vbl9lbmNy
eXB0aW9uX2RlY3J5cHRfaW5pdCk6CisgICAgICAgICh3ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRp
b25EZWNyeXB0b3JGaW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRNZWRpYUNvbW1vbkVuY3J5cHRp
b25EZWNyeXB0VHJhbnNmb3JtQ2Fwcyk6CisgICAgICAgICh3ZWJraXRNZWRpYUNvbW1vbkVuY3J5
cHRpb25EZWNyeXB0VHJhbnNmb3JtSW5QbGFjZSk6CisgICAgICAgICh3ZWJraXRNZWRpYUNvbW1v
bkVuY3J5cHRpb25EZWNyeXB0U2lua0V2ZW50SGFuZGxlcik6CisgICAgICAgICh3ZWJLaXRNZWRp
YUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JDaGFuZ2VTdGF0ZSk6CisgICAgICAgICh3ZWJLaXRN
ZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0RGVmYXVsdFNldHVwQ2lwaGVyKToKKyAgICAgICAg
KHdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHREZWZhdWx0UmVsZWFzZUNpcGhlcik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25F
bmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmg6IEFkZGVkLgorCisyMDE2LTEwLTA0ICBFbnJp
cXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+CisKICAgICAgICAgW0dT
dHJlYW1lcl1bRU1FXSBVdGlsaXR5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBkZWNyeXB0b3IKICAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjkxNAogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dl
YktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9u
RGVjcnlwdG9yR1N0cmVhbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNmM2ZmZhYzYwNTgxZjgxZjg5Y2E5
NDIyZmZmY2JhOWNlNzgwMDZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlw
dG9yR1N0cmVhbWVyLmNwcApAQCAtMCwwICsxLDM3NCBAQAorLyogR1N0cmVhbWVyIENsZWFyS2V5
IGNvbW1vbiBlbmNyeXB0aW9uIGRlY3J5cHRvcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBZ
b3VWaWV3IFRWIEx0ZC4gPGFsZXguYXNobGV5QHlvdXZpZXcuY29tPgorICogQ29weXJpZ2h0IChD
KSAyMDE2IE1ldHJvbG9naWNhbAorICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwKKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIFN1aXRlIDUwMCwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMzNSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmgiCisKKyNpZiBFTkFCTEUo
TEVHQUNZX0VOQ1JZUFRFRF9NRURJQSkgJiYgVVNFKEdTVFJFQU1FUikKKworI2luY2x1ZGUgIkdS
ZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CisjaW5jbHVkZSA8
d3RmL1J1bkxvb3AuaD4KKworI2RlZmluZSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9Q
UklWQVRFKG9iaikgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX1RZ
UEVfTUVESUFfQ0VOQ19ERUNSWVBULCBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0
UHJpdmF0ZSkpCitzdHJ1Y3QgX1dlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2
YXRlIHsKKyAgICBHUmVmUHRyPEdzdEV2ZW50PiBwcm90ZWN0aW9uRXZlbnQ7CisKKyAgICBib29s
IGtleVJlY2VpdmVkOworICAgIExvY2sgbXV0ZXg7CisgICAgQ29uZGl0aW9uIGNvbmRpdGlvbjsK
K307CisKK3N0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiB3ZWJLaXRNZWRpYUNvbW1vbkVuY3J5
cHRpb25EZWNyeXB0b3JDaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiwgR3N0U3RhdGVDaGFuZ2UgdHJh
bnNpdGlvbik7CitzdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0
b3JGaW5hbGl6ZShHT2JqZWN0Kik7CitzdGF0aWMgR3N0Q2Fwcyogd2Via2l0TWVkaWFDb21tb25F
bmNyeXB0aW9uRGVjcnlwdFRyYW5zZm9ybUNhcHMoR3N0QmFzZVRyYW5zZm9ybSosIEdzdFBhZERp
cmVjdGlvbiwgR3N0Q2FwcyosIEdzdENhcHMqKTsKK3N0YXRpYyBHc3RGbG93UmV0dXJuIHdlYmtp
dE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRUcmFuc2Zvcm1JblBsYWNlKEdzdEJhc2VUcmFu
c2Zvcm0qLCBHc3RCdWZmZXIqKTsKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRNZWRpYUNvbW1vbkVu
Y3J5cHRpb25EZWNyeXB0U2lua0V2ZW50SGFuZGxlcihHc3RCYXNlVHJhbnNmb3JtKiwgR3N0RXZl
bnQqKTsKKworc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5
cHREZWZhdWx0U2V0dXBDaXBoZXIoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCop
Oworc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdERlZmF1bHRS
ZWxlYXNlQ2lwaGVyKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqKTsKKworR1NU
X0RFQlVHX0NBVEVHT1JZX1NUQVRJQyh3ZWJraXRfbWVkaWFfY29tbW9uX2VuY3J5cHRpb25fZGVj
cnlwdF9kZWJ1Z19jYXRlZ29yeSk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfbWVk
aWFfY29tbW9uX2VuY3J5cHRpb25fZGVjcnlwdF9kZWJ1Z19jYXRlZ29yeQorCisjZGVmaW5lIHdl
YmtpdF9tZWRpYV9jb21tb25fZW5jcnlwdGlvbl9kZWNyeXB0X3BhcmVudF9jbGFzcyBwYXJlbnRf
Y2xhc3MKK0dfREVGSU5FX1RZUEUoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCwg
d2Via2l0X21lZGlhX2NvbW1vbl9lbmNyeXB0aW9uX2RlY3J5cHQsIEdTVF9UWVBFX0JBU0VfVFJB
TlNGT1JNKTsKKworc3RhdGljIHZvaWQgd2Via2l0X21lZGlhX2NvbW1vbl9lbmNyeXB0aW9uX2Rl
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
Y3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfUFJJVkFU
RShzZWxmKTsKKworICAgIHNlbGYtPnByaXYgPSBwcml2OworICAgIG5ldyAocHJpdikgV2ViS2l0
TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGUoKTsKKworICAgIEdzdEJhc2VUcmFu
c2Zvcm0qIGJhc2UgPSBHU1RfQkFTRV9UUkFOU0ZPUk0oc2VsZik7CisgICAgZ3N0X2Jhc2VfdHJh
bnNmb3JtX3NldF9pbl9wbGFjZShiYXNlLCBUUlVFKTsKKyAgICBnc3RfYmFzZV90cmFuc2Zvcm1f
c2V0X3Bhc3N0aHJvdWdoKGJhc2UsIEZBTFNFKTsKKyAgICBnc3RfYmFzZV90cmFuc2Zvcm1fc2V0
X2dhcF9hd2FyZShiYXNlLCBGQUxTRSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYktpdE1lZGlhQ29t
bW9uRW5jcnlwdGlvbkRlY3J5cHRvckZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBX
ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmID0gV0VCS0lUX01FRElBX0NF
TkNfREVDUllQVChvYmplY3QpOworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5
cHRQcml2YXRlKiBwcml2ID0gc2VsZi0+cHJpdjsKKworICAgIHByaXYtPn5XZWJLaXRNZWRpYUNv
bW1vbkVuY3J5cHRpb25EZWNyeXB0UHJpdmF0ZSgpOworICAgIEdTVF9DQUxMX1BBUkVOVChHX09C
SkVDVF9DTEFTUywgZmluYWxpemUsIChvYmplY3QpKTsKK30KKworc3RhdGljIEdzdENhcHMqIHdl
YmtpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRUcmFuc2Zvcm1DYXBzKEdzdEJhc2VUcmFu
c2Zvcm0qIGJhc2UsIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sIEdzdENhcHMqIGNhcHMsIEdz
dENhcHMqIGZpbHRlcikKK3sKKyAgICBpZiAoZGlyZWN0aW9uID09IEdTVF9QQURfVU5LTk9XTikK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKGJhc2UsICJk
aXJlY3Rpb246ICVzLCBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCAiIGZpbHRlcjogJSIgR1NUX1BU
Ul9GT1JNQVQsIChkaXJlY3Rpb24gPT0gR1NUX1BBRF9TUkMpID8gInNyYyIgOiAic2luayIsIGNh
cHMsIGZpbHRlcik7CisKKyAgICBHc3RDYXBzKiB0cmFuc2Zvcm1lZENhcHMgPSBnc3RfY2Fwc19u
ZXdfZW1wdHkoKTsKKyAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxm
ID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVChiYXNlKTsKKyAgICBXZWJLaXRNZWRpYUNvbW1v
bkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MqIGtsYXNzID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQ
VF9HRVRfQ0xBU1Moc2VsZik7CisKKyAgICB1bnNpZ25lZCBzaXplID0gZ3N0X2NhcHNfZ2V0X3Np
emUoY2Fwcyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAg
ICAgICBHc3RTdHJ1Y3R1cmUqIGluY29taW5nU3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVj
dHVyZShjYXBzLCBpKTsKKyAgICAgICAgR1JlZlB0cjxHc3RTdHJ1Y3R1cmU+IG91dGdvaW5nU3Ry
dWN0dXJlID0gbnVsbHB0cjsKKworICAgICAgICBpZiAoZGlyZWN0aW9uID09IEdTVF9QQURfU0lO
SykgeworICAgICAgICAgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2hhc19maWVsZChpbmNvbWluZ1N0
cnVjdHVyZSwgIm9yaWdpbmFsLW1lZGlhLXR5cGUiKSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICAgICAgb3V0Z29pbmdTdHJ1Y3R1cmUgPSBhZG9wdEdSZWYoZ3N0X3N0cnVj
dHVyZV9jb3B5KGluY29taW5nU3RydWN0dXJlKSk7CisgICAgICAgICAgICBnc3Rfc3RydWN0dXJl
X3NldF9uYW1lKG91dGdvaW5nU3RydWN0dXJlLmdldCgpLCBnc3Rfc3RydWN0dXJlX2dldF9zdHJp
bmcob3V0Z29pbmdTdHJ1Y3R1cmUuZ2V0KCksICJvcmlnaW5hbC1tZWRpYS10eXBlIikpOworCisg
ICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHRoZSBEUk0gcmVsYXRlZCBmaWVsZHMgZnJvbSB0aGUg
ZG93bi1zdHJlYW0gY2Fwcy4KKyAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZ3N0X3N0
cnVjdHVyZV9uX2ZpZWxkcyhpbmNvbWluZ1N0cnVjdHVyZSk7ICsraikgeworICAgICAgICAgICAg
ICAgIGNvbnN0IGdjaGFyKiBmaWVsZE5hbWUgPSBnc3Rfc3RydWN0dXJlX250aF9maWVsZF9uYW1l
KGluY29taW5nU3RydWN0dXJlLCBqKTsKKworICAgICAgICAgICAgICAgIGlmIChnX3N0cl9oYXNf
cHJlZml4KGZpZWxkTmFtZSwgInByb3RlY3Rpb24tc3lzdGVtIikKKyAgICAgICAgICAgICAgICAg
ICAgfHwgZ19zdHJfaGFzX3ByZWZpeChmaWVsZE5hbWUsICJvcmlnaW5hbC1tZWRpYS10eXBlIikp
CisgICAgICAgICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkKG91dGdvaW5n
U3RydWN0dXJlLmdldCgpLCBmaWVsZE5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgb3V0Z29pbmdTdHJ1Y3R1cmUgPSBhZG9wdEdSZWYoZ3N0X3N0cnVj
dHVyZV9jb3B5KGluY29taW5nU3RydWN0dXJlKSk7CisgICAgICAgICAgICAvLyBGaWx0ZXIgb3V0
IHRoZSB2aWRlbyByZWxhdGVkIGZpZWxkcyBmcm9tIHRoZSB1cC1zdHJlYW0gY2FwcywKKyAgICAg
ICAgICAgIC8vIGJlY2F1c2UgdGhleSBhcmUgbm90IHJlbGV2YW50IHRvIHRoZSBpbnB1dCBjYXBz
IG9mIHRoaXMgZWxlbWVudCBhbmQKKyAgICAgICAgICAgIC8vIGNhbiBjYXVzZSBjYXBzIG5lZ290
aWF0aW9uIGZhaWx1cmVzIHdpdGggYWRhcHRpdmUgYml0cmF0ZSBzdHJlYW1zLgorICAgICAgICAg
ICAgZm9yIChpbnQgaW5kZXggPSBnc3Rfc3RydWN0dXJlX25fZmllbGRzKG91dGdvaW5nU3RydWN0
dXJlLmdldCgpKSAtIDE7IGluZGV4ID49IDA7IC0taW5kZXgpIHsKKyAgICAgICAgICAgICAgICBj
b25zdCBnY2hhciogZmllbGROYW1lID0gZ3N0X3N0cnVjdHVyZV9udGhfZmllbGRfbmFtZShvdXRn
b2luZ1N0cnVjdHVyZS5nZXQoKSwgaW5kZXgpOworICAgICAgICAgICAgICAgIEdTVF9UUkFDRSgi
Q2hlY2sgZmllbGQgXCIlc1wiIGZvciByZW1vdmFsIiwgZmllbGROYW1lKTsKKworICAgICAgICAg
ICAgICAgIGlmICghZ19zdHJjbXAwKGZpZWxkTmFtZSwgImJhc2UtcHJvZmlsZSIpCisgICAgICAg
ICAgICAgICAgICAgIHx8ICFnX3N0cmNtcDAoZmllbGROYW1lLCAiY29kZWNfZGF0YSIpCisgICAg
ICAgICAgICAgICAgICAgIHx8ICFnX3N0cmNtcDAoZmllbGROYW1lLCAiaGVpZ2h0IikKKyAgICAg
ICAgICAgICAgICAgICAgfHwgIWdfc3RyY21wMChmaWVsZE5hbWUsICJmcmFtZXJhdGUiKQorICAg
ICAgICAgICAgICAgICAgICB8fCAhZ19zdHJjbXAwKGZpZWxkTmFtZSwgImxldmVsIikKKyAgICAg
ICAgICAgICAgICAgICAgfHwgIWdfc3RyY21wMChmaWVsZE5hbWUsICJwaXhlbC1hc3BlY3QtcmF0
aW8iKQorICAgICAgICAgICAgICAgICAgICB8fCAhZ19zdHJjbXAwKGZpZWxkTmFtZSwgInByb2Zp
bGUiKQorICAgICAgICAgICAgICAgICAgICB8fCAhZ19zdHJjbXAwKGZpZWxkTmFtZSwgInJhdGUi
KQorICAgICAgICAgICAgICAgICAgICB8fCAhZ19zdHJjbXAwKGZpZWxkTmFtZSwgIndpZHRoIikp
IHsKKyAgICAgICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQob3V0Z29p
bmdTdHJ1Y3R1cmUuZ2V0KCksIGZpZWxkTmFtZSk7CisgICAgICAgICAgICAgICAgICAgIEdTVF9U
UkFDRSgiUmVtb3ZpbmcgZmllbGQgJXMiLCBmaWVsZE5hbWUpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQob3V0Z29pbmdT
dHJ1Y3R1cmUuZ2V0KCksICJwcm90ZWN0aW9uLXN5c3RlbSIsIEdfVFlQRV9TVFJJTkcsIGtsYXNz
LT5wcm90ZWN0aW9uU3lzdGVtSWQsCisgICAgICAgICAgICAgICAgIm9yaWdpbmFsLW1lZGlhLXR5
cGUiLCBHX1RZUEVfU1RSSU5HLCBnc3Rfc3RydWN0dXJlX2dldF9uYW1lKGluY29taW5nU3RydWN0
dXJlKSwgbnVsbHB0cik7CisKKyAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0X25hbWUob3V0
Z29pbmdTdHJ1Y3R1cmUuZ2V0KCksICJhcHBsaWNhdGlvbi94LWNlbmMiKTsKKyAgICAgICAgfQor
CisgICAgICAgIGJvb2wgZHVwbGljYXRlID0gZmFsc2U7CisgICAgICAgIHVuc2lnbmVkIHNpemUg
PSBnc3RfY2Fwc19nZXRfc2l6ZSh0cmFuc2Zvcm1lZENhcHMpOworCisgICAgICAgIGZvciAodW5z
aWduZWQgaW5kZXggPSAwOyAhZHVwbGljYXRlICYmIGluZGV4IDwgc2l6ZTsgKytpbmRleCkgewor
ICAgICAgICAgICAgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0
dXJlKHRyYW5zZm9ybWVkQ2FwcywgaW5kZXgpOworICAgICAgICAgICAgaWYgKGdzdF9zdHJ1Y3R1
cmVfaXNfZXF1YWwoc3RydWN0dXJlLCBvdXRnb2luZ1N0cnVjdHVyZS5nZXQoKSkpCisgICAgICAg
ICAgICAgICAgZHVwbGljYXRlID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghZHVw
bGljYXRlKQorICAgICAgICAgICAgZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZSh0cmFuc2Zvcm1l
ZENhcHMsIG91dGdvaW5nU3RydWN0dXJlLmxlYWtSZWYoKSk7CisgICAgfQorCisgICAgaWYgKGZp
bHRlcikgeworICAgICAgICBHc3RDYXBzKiBpbnRlcnNlY3Rpb247CisKKyAgICAgICAgR1NUX0RF
QlVHX09CSkVDVChiYXNlLCAiVXNpbmcgZmlsdGVyIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsIGZp
bHRlcik7CisgICAgICAgIGludGVyc2VjdGlvbiA9IGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsKHRy
YW5zZm9ybWVkQ2FwcywgZmlsdGVyLCBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOworICAgICAg
ICBnc3RfY2Fwc191bnJlZih0cmFuc2Zvcm1lZENhcHMpOworICAgICAgICB0cmFuc2Zvcm1lZENh
cHMgPSBpbnRlcnNlY3Rpb247CisgICAgfQorCisgICAgR1NUX0RFQlVHX09CSkVDVChiYXNlLCAi
cmV0dXJuaW5nICUiIEdTVF9QVFJfRk9STUFULCB0cmFuc2Zvcm1lZENhcHMpOworICAgIHJldHVy
biB0cmFuc2Zvcm1lZENhcHM7Cit9CisKK3N0YXRpYyBHc3RGbG93UmV0dXJuIHdlYmtpdE1lZGlh
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRUcmFuc2Zvcm1JblBsYWNlKEdzdEJhc2VUcmFuc2Zvcm0q
IGJhc2UsIEdzdEJ1ZmZlciogYnVmZmVyKQoreworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlw
dGlvbkRlY3J5cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUKGJhc2UpOworICAg
IFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lU
X01FRElBX0NFTkNfREVDUllQVF9HRVRfUFJJVkFURShzZWxmKTsKKyAgICBMb2NrSG9sZGVyIGxv
Y2tlcihwcml2LT5tdXRleCk7CisKKyAgICAvLyBUaGUga2V5IG1pZ2h0IG5vdCBoYXZlIGJlZW4g
cmVjZWl2ZWQgeWV0LiBXYWl0IGZvciBpdC4KKyAgICBpZiAoIXByaXYtPmtleVJlY2VpdmVkKSB7
CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgImtleSBub3QgYXZhaWxhYmxlIHlldCwg
d2FpdGluZyBmb3IgaXQiKTsKKyAgICAgICAgaWYgKEdTVF9TVEFURShHU1RfRUxFTUVOVChzZWxm
KSkgPCBHU1RfU1RBVEVfUEFVU0VEIHx8IChHU1RfU1RBVEVfVEFSR0VUKEdTVF9FTEVNRU5UKHNl
bGYpKSAhPSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HICYmIEdTVF9TVEFURV9UQVJHRVQoR1NUX0VM
RU1FTlQoc2VsZikpIDwgR1NUX1NUQVRFX1BBVVNFRCkpIHsKKyAgICAgICAgICAgIEdTVF9FUlJP
Ul9PQkpFQ1Qoc2VsZiwgImNhbid0IHByb2Nlc3Mga2V5IHJlcXVlc3RzIGluIGxlc3MgdGhhbiBQ
QVVTRUQgc3RhdGUiKTsKKyAgICAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVE
OworICAgICAgICB9CisgICAgICAgIHByaXYtPmNvbmRpdGlvbi53YWl0Rm9yKHByaXYtPm11dGV4
LCBzdGQ6OmNocm9ubzo6c2Vjb25kcyg1KSwgW3ByaXZdIHsKKyAgICAgICAgICAgIHJldHVybiBw
cml2LT5rZXlSZWNlaXZlZDsKKyAgICAgICAgfSk7CisgICAgICAgIGlmICghcHJpdi0+a2V5UmVj
ZWl2ZWQpIHsKKyAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgImtleSBub3QgYXZh
aWxhYmxlIik7CisgICAgICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKKyAg
ICAgICAgfQorICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJrZXkgcmVjZWl2ZWQsIGNv
bnRpbnVpbmciKTsKKyAgICB9CisKKyAgICBHc3RQcm90ZWN0aW9uTWV0YSogcHJvdGVjdGlvbk1l
dGEgPSByZWludGVycHJldF9jYXN0PEdzdFByb3RlY3Rpb25NZXRhKj4oZ3N0X2J1ZmZlcl9nZXRf
cHJvdGVjdGlvbl9tZXRhKGJ1ZmZlcikpOworICAgIGlmICghcHJvdGVjdGlvbk1ldGEpIHsKKyAg
ICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBHc3RQcm90ZWN0aW9u
IG1ldGFkYXRhIGZyb20gYnVmZmVyICVwIiwgYnVmZmVyKTsKKyAgICAgICAgcmV0dXJuIEdTVF9G
TE9XX05PVF9TVVBQT1JURUQ7CisgICAgfQorCisgICAgdW5zaWduZWQgaXZTaXplOworICAgIGlm
ICghZ3N0X3N0cnVjdHVyZV9nZXRfdWludChwcm90ZWN0aW9uTWV0YS0+aW5mbywgIml2X3NpemUi
LCAmaXZTaXplKSkgeworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8g
Z2V0IGl2X3NpemUiKTsKKyAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJl
aW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CisgICAgICAgIHJldHVy
biBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOworICAgIH0KKworICAgIGdib29sZWFuIGVuY3J5cHRl
ZDsKKyAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2Jvb2xlYW4ocHJvdGVjdGlvbk1ldGEtPmlu
Zm8sICJlbmNyeXB0ZWQiLCAmZW5jcnlwdGVkKSkgeworICAgICAgICBHU1RfRVJST1JfT0JKRUNU
KHNlbGYsICJGYWlsZWQgdG8gZ2V0IGVuY3J5cHRlZCBmbGFnIik7CisgICAgICAgIGdzdF9idWZm
ZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0
aW9uTWV0YSkpOworICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKKyAgICB9
CisKKyAgICBpZiAoIWl2U2l6ZSB8fCAhZW5jcnlwdGVkKSB7CisgICAgICAgIGdzdF9idWZmZXJf
cmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9u
TWV0YSkpOworICAgICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7CisgICAgfQorCisgICAgR1NUX0RF
QlVHX09CSkVDVChiYXNlLCAicHJvdGVjdGlvbiBtZXRhOiAlIiBHU1RfUFRSX0ZPUk1BVCwgcHJv
dGVjdGlvbk1ldGEtPmluZm8pOworCisgICAgdW5zaWduZWQgc3ViU2FtcGxlQ291bnQ7CisgICAg
aWYgKCFnc3Rfc3RydWN0dXJlX2dldF91aW50KHByb3RlY3Rpb25NZXRhLT5pbmZvLCAic3Vic2Ft
cGxlX2NvdW50IiwgJnN1YlNhbXBsZUNvdW50KSkgeworICAgICAgICBHU1RfRVJST1JfT0JKRUNU
KHNlbGYsICJGYWlsZWQgdG8gZ2V0IHN1YnNhbXBsZV9jb3VudCIpOworICAgICAgICBnc3RfYnVm
ZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVj
dGlvbk1ldGEpKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CisgICAg
fQorCisgICAgY29uc3QgR1ZhbHVlKiB2YWx1ZTsKKyAgICBHc3RCdWZmZXIqIHN1YlNhbXBsZXNC
dWZmZXIgPSBudWxscHRyOworICAgIGlmIChzdWJTYW1wbGVDb3VudCkgeworICAgICAgICB2YWx1
ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlKHByb3RlY3Rpb25NZXRhLT5pbmZvLCAic3Vic2Ft
cGxlcyIpOworICAgICAgICBpZiAoIXZhbHVlKSB7CisgICAgICAgICAgICBHU1RfRVJST1JfT0JK
RUNUKHNlbGYsICJGYWlsZWQgdG8gZ2V0IHN1YnNhbXBsZXMiKTsKKyAgICAgICAgICAgIGdzdF9i
dWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90
ZWN0aW9uTWV0YSkpOworICAgICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7
CisgICAgICAgIH0KKyAgICAgICAgc3ViU2FtcGxlc0J1ZmZlciA9IGdzdF92YWx1ZV9nZXRfYnVm
ZmVyKHZhbHVlKTsKKyAgICB9CisKKyAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNy
eXB0Q2xhc3MqIGtsYXNzID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfQ0xBU1Moc2Vs
Zik7CisgICAgaWYgKCFrbGFzcy0+c2V0dXBDaXBoZXIoc2VsZikpIHsKKyAgICAgICAgR1NUX0VS
Uk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBjaXBoZXIiKTsKKyAgICAgICAg
Z3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+
KHByb3RlY3Rpb25NZXRhKSk7CisgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVE
OworICAgIH0KKworICAgIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUocHJvdGVjdGlv
bk1ldGEtPmluZm8sICJpdiIpOworICAgIGlmICghdmFsdWUpIHsKKyAgICAgICAgR1NUX0VSUk9S
X09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBJViBmb3Igc2FtcGxlIik7CisgICAgICAgIGts
YXNzLT5yZWxlYXNlQ2lwaGVyKHNlbGYpOworICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRh
KGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKKyAg
ICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CisgICAgfQorCisgICAgR3N0QnVm
ZmVyKiBpdkJ1ZmZlciA9IGdzdF92YWx1ZV9nZXRfYnVmZmVyKHZhbHVlKTsKKyAgICBHU1RfVFJB
Q0VfT0JKRUNUKHNlbGYsICJkZWNyeXB0aW5nIik7CisgICAgaWYgKCFrbGFzcy0+ZGVjcnlwdChz
ZWxmLCBpdkJ1ZmZlciwgYnVmZmVyLCBzdWJTYW1wbGVDb3VudCwgc3ViU2FtcGxlc0J1ZmZlcikp
IHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRGVjcnlwdGlvbiBmYWlsZWQiKTsK
KyAgICAgICAga2xhc3MtPnJlbGVhc2VDaXBoZXIoc2VsZik7CisgICAgICAgIGdzdF9idWZmZXJf
cmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9u
TWV0YSkpOworICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKKyAgICB9CisK
KyAgICBrbGFzcy0+cmVsZWFzZUNpcGhlcihzZWxmKTsKKyAgICBnc3RfYnVmZmVyX3JlbW92ZV9t
ZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsK
KyAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Cit9CisKKworc3RhdGljIGdib29sZWFuIHdlYmtpdE1l
ZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRTaW5rRXZlbnRIYW5kbGVyKEdzdEJhc2VUcmFuc2Zv
cm0qIHRyYW5zLCBHc3RFdmVudCogZXZlbnQpCit7CisgICAgV2ViS2l0TWVkaWFDb21tb25FbmNy
eXB0aW9uRGVjcnlwdCogc2VsZiA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFQodHJhbnMpOwor
ICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VC
S0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfUFJJVkFURShzZWxmKTsKKyAgICBXZWJLaXRNZWRp
YUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MqIGtsYXNzID0gV0VCS0lUX01FRElBX0NFTkNf
REVDUllQVF9HRVRfQ0xBU1Moc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7CisK
KyAgICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFKGV2ZW50KSkgeworICAgIGNhc2UgR1NUX0VWRU5U
X1BST1RFQ1RJT046IHsKKyAgICAgICAgY29uc3QgY2hhciogc3lzdGVtSWQ7CisgICAgICAgIGNv
bnN0IGNoYXIqIG9yaWdpbjsKKyAgICAgICAgR3N0QnVmZmVyKiBpbml0RGF0YUJ1ZmZlcjsKKwor
ICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJyZWNlaXZlZCBwcm90ZWN0aW9uIGV2ZW50
Iik7CisgICAgICAgIGdzdF9ldmVudF9wYXJzZV9wcm90ZWN0aW9uKGV2ZW50LCAmc3lzdGVtSWQs
ICZpbml0RGF0YUJ1ZmZlciwgJm9yaWdpbik7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2Vs
ZiwgInN5c3RlbUlkOiAlcyIsIHN5c3RlbUlkKTsKKworICAgICAgICBpZiAoIWdfc3RyX2VxdWFs
KHN5c3RlbUlkLCBrbGFzcy0+cHJvdGVjdGlvblN5c3RlbUlkKSkgeworICAgICAgICAgICAgZ3N0
X2V2ZW50X3VucmVmKGV2ZW50KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IFRSVUU7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEtlZXAgdGhlIGV2ZW50IHJlZiBh
cm91bmQgc28gdGhhdCB0aGUgcGFyc2VkIGV2ZW50IGRhdGEKKyAgICAgICAgLy8gcmVtYWlucyB2
YWxpZCB1bnRpbCB0aGUgZHJtLWtleS1uZWVkIG1lc3NhZ2UgaGFzIGJlZW4gc2VudC4KKyAgICAg
ICAgcHJpdi0+cHJvdGVjdGlvbkV2ZW50ID0gYWRvcHRHUmVmKGV2ZW50KTsKKyAgICAgICAgUnVu
TG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzZWxmLCBpbml0RGF0YUJ1ZmZlcl0geworICAgICAgICAg
ICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdENsYXNzKiBrbGFzcyA9IFdFQktJ
VF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX0NMQVNTKHNlbGYpOworICAgICAgICAgICAgaWYgKGts
YXNzKSB7CisgICAgICAgICAgICAgICAga2xhc3MtPnJlcXVlc3REZWNyeXB0aW9uS2V5KHNlbGYs
IGluaXREYXRhQnVmZmVyKTsKKyAgICAgICAgICAgICAgICBzZWxmLT5wcml2LT5wcm90ZWN0aW9u
RXZlbnQgPSBudWxscHRyOworICAgICAgICAgICAgfX0pOworCisgICAgICAgIHJlc3VsdCA9IFRS
VUU7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9FVkVOVF9DVVNUT01fRE9X
TlNUUkVBTV9PT0I6IHsKKyAgICAgICAgaWYgKGtsYXNzLT5oYW5kbGVLZXlSZXNwb25zZShzZWxm
LCBldmVudCkpIHsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgImtleSByZWNl
aXZlZCIpOworICAgICAgICAgICAgcHJpdi0+a2V5UmVjZWl2ZWQgPSB0cnVlOworICAgICAgICAg
ICAgcHJpdi0+Y29uZGl0aW9uLm5vdGlmeU9uZSgpOworICAgICAgICB9CisKKyAgICAgICAgZ3N0
X2V2ZW50X3VucmVmKGV2ZW50KTsKKyAgICAgICAgcmVzdWx0ID0gVFJVRTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIHJlc3VsdCA9IEdTVF9CQVNFX1RSQU5T
Rk9STV9DTEFTUyhwYXJlbnRfY2xhc3MpLT5zaW5rX2V2ZW50KHRyYW5zLCBldmVudCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBHc3RT
dGF0ZUNoYW5nZVJldHVybiB3ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JDaGFu
Z2VTdGF0ZShHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQor
eworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYgPSBXRUJLSVRf
TUVESUFfQ0VOQ19ERUNSWVBUKGVsZW1lbnQpOworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlw
dGlvbkRlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRf
UFJJVkFURShzZWxmKTsKKworICAgIHN3aXRjaCAodHJhbnNpdGlvbikgeworICAgIGNhc2UgR1NU
X1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qo
c2VsZiwgIlBBVVNFRC0+UkVBRFkiKTsKKyAgICAgICAgcHJpdi0+Y29uZGl0aW9uLm5vdGlmeU9u
ZSgpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXN1bHQgPSBHU1RfRUxFTUVOVF9DTEFTUyhw
YXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUoZWxlbWVudCwgdHJhbnNpdGlvbik7CisKKyAgICAv
LyBBZGQgcG9zdC10cmFuc2l0aW9uIGNvZGUgaGVyZS4KKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKKworc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRE
ZWZhdWx0U2V0dXBDaXBoZXIoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCopCit7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKKworc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFDb21tb25F
bmNyeXB0aW9uRGVjcnlwdERlZmF1bHRSZWxlYXNlQ2lwaGVyKFdlYktpdE1lZGlhQ29tbW9uRW5j
cnlwdGlvbkRlY3J5cHQqKQoreworfQorCisKKyNlbmRpZiAvLyBFTkFCTEUoTEVHQUNZX0VOQ1JZ
UFRFRF9NRURJQSkgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHRvckdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNGNiODdkN2FhZGQwNzI0YjMyNDNlYWZmZDc0NzdmMThjNzViMjBiYQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9l
bWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oCkBAIC0wLDAgKzEs
NjUgQEAKKy8qIEdTdHJlYW1lciBDbGVhcktleSBjb21tb24gZW5jcnlwdGlvbiBkZWNyeXB0b3IK
KyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgWW91VmlldyBUViBMdGQuIDxhbGV4LmFzaGxleUB5
b3V2aWV3LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBNZXRyb2xvZ2ljYWwKKyAqIENvcHly
aWdodCAoQykgMjAxNiBJZ2FsaWEgUy5MCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoTEVHQUNZX0VOQ1JZUFRFRF9NRURJQSkgJiYgVVNFKEdTVFJF
QU1FUikKKworI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaD4KKyNpbmNsdWRl
IDxnc3QvZ3N0Lmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9NRURJ
QV9DRU5DX0RFQ1JZUFQgICAgICAgICAgKHdlYmtpdF9tZWRpYV9jb21tb25fZW5jcnlwdGlvbl9k
ZWNyeXB0X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFQob2Jq
KSAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBF
X01FRElBX0NFTkNfREVDUllQVCwgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCkp
CisjZGVmaW5lIFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfQ0xBU1Moa2xhc3MpICAoR19UWVBF
X0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgV0VCS0lUX1RZUEVfTUVESUFfQ0VOQ19ERUNSWVBU
LCBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MpKQorI2RlZmluZSBXRUJL
SVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dF
VF9DTEFTUygob2JqKSwgV0VCS0lUX1RZUEVfTUVESUFfQ0VOQ19ERUNSWVBULCBXZWJLaXRNZWRp
YUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MpKQorCisjZGVmaW5lIFdFQktJVF9JU19NRURJ
QV9DRU5DX0RFQ1JZUFQob2JqKSAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9i
aiksIFdFQktJVF9UWVBFX01FRElBX0NFTkNfREVDUllQVCkpCisjZGVmaW5lIFdFQktJVF9JU19N
RURJQV9DRU5DX0RFQ1JZUFRfQ0xBU1Mob2JqKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGts
YXNzKSwgV0VCS0lUX1RZUEVfTUVESUFfQ0VOQ19ERUNSWVBUKSkKKwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQgICAgICAgIFdlYktpdE1lZGlhQ29t
bW9uRW5jcnlwdGlvbkRlY3J5cHQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0TWVkaWFDb21tb25F
bmNyeXB0aW9uRGVjcnlwdENsYXNzICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlw
dENsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5
cHRQcml2YXRlIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlOworCitH
VHlwZSB3ZWJraXRfbWVkaWFfY29tbW9uX2VuY3J5cHRpb25fZGVjcnlwdF9nZXRfdHlwZSh2b2lk
KTsKKworc3RydWN0IF9XZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0IHsKKyAgICBH
c3RCYXNlVHJhbnNmb3JtIHBhcmVudDsKKworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlv
bkRlY3J5cHRQcml2YXRlKiBwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRNZWRpYUNvbW1vbkVu
Y3J5cHRpb25EZWNyeXB0Q2xhc3MgeworICAgIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyBwYXJlbnRD
bGFzczsKKworICAgIGNvbnN0IGNoYXIqIHByb3RlY3Rpb25TeXN0ZW1JZDsKKyAgICB2b2lkICgq
cmVxdWVzdERlY3J5cHRpb25LZXkpKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQq
LCBHc3RCdWZmZXIqIGluaXREYXRhKTsKKyAgICBnYm9vbGVhbiAoKmhhbmRsZUtleVJlc3BvbnNl
KShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgR3N0RXZlbnQqIGV2ZW50KTsK
KyAgICBnYm9vbGVhbiAoKnNldHVwQ2lwaGVyKShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25E
ZWNyeXB0Kik7CisgICAgZ2Jvb2xlYW4gKCpkZWNyeXB0KShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5
cHRpb25EZWNyeXB0KiwgR3N0QnVmZmVyKiBpdkJ1ZmZlciwgR3N0QnVmZmVyKiBidWZmZXIsIHVu
c2lnbmVkIHN1YlNhbXBsZXNDb3VudCwgR3N0QnVmZmVyKiBzdWJTYW1wbGVzQnVmZmVyKTsKKyAg
ICB2b2lkICgqcmVsZWFzZUNpcGhlcikoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlw
dCopOworfTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292900</attachid>
            <date>2016-10-26 01:23:25 -0700</date>
            <delta_ts>2016-10-26 01:48:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162915-20161026081937.patch</filename>
            <type>text/plain</type>
            <size>21931</size>
            <attacher name="Enrique Ocaña">eocanha</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3ODcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWNiMDdhNDdlNzFkMmVj
MGY2ODAyZWNmZDdiMjdhNmQwOWE0NDNjMi4uNWEyZWUzODBjY2YyMzBiN2ZmMjE1ZDdmM2ExMThm
Y2Q4NjMwNWRjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI4IEBACiAyMDE2LTEwLTI2ICBFbnJp
cXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+CiAKKyAgICAgICAgW0dT
dHJlYW1lcl1bRU1FXSBCYXNlIGNsYXNzIGZvciBkZWNyeXB0aW9uIHN1cHBvcnQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjkxNQorCisgICAgICAg
IFJldmlld2VkIGJ5IFhhYmllciBSb2RyaWd1ZXotQ2FsdmFyLgorCisgICAgICAgIEFkZCBjb21t
b24gZW5jcnlwdGlvbiBiYXNlIGNsYXNzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaXMgYXV0aG9y
ZWQgYnkgUGhpbGlwcGUgTm9ybWFuZCA8cGhpbG5AaWdhbGlhLmNvbT4uCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNy
eXB0b3JHU3RyZWFtZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKHdlYmtpdF9tZWRpYV9jb21tb25f
ZW5jcnlwdGlvbl9kZWNyeXB0X2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0X21lZGlhX2Nv
bW1vbl9lbmNyeXB0aW9uX2RlY3J5cHRfaW5pdCk6CisgICAgICAgICh3ZWJLaXRNZWRpYUNvbW1v
bkVuY3J5cHRpb25EZWNyeXB0b3JGaW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRNZWRpYUNvbW1v
bkVuY3J5cHRpb25EZWNyeXB0VHJhbnNmb3JtQ2Fwcyk6CisgICAgICAgICh3ZWJraXRNZWRpYUNv
bW1vbkVuY3J5cHRpb25EZWNyeXB0VHJhbnNmb3JtSW5QbGFjZSk6CisgICAgICAgICh3ZWJraXRN
ZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0U2lua0V2ZW50SGFuZGxlcik6CisgICAgICAgICh3
ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JDaGFuZ2VTdGF0ZSk6CisgICAgICAg
ICh3ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0RGVmYXVsdFNldHVwQ2lwaGVyKToK
KyAgICAgICAgKHdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHREZWZhdWx0UmVsZWFz
ZUNpcGhlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJL
aXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmg6IEFkZGVkLgorCisyMDE2LTEw
LTI2ICBFbnJpcXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+CisKICAg
ICAgICAgW0dTdHJlYW1lcl1bRU1FXSBVdGlsaXR5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBkZWNyeXB0
b3IKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mjkx
NAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25F
bmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNmM2ZmZhYzYwNTgx
ZjgxZjg5Y2E5NDIyZmZmY2JhOWNlNzgwMDZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0
aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcApAQCAtMCwwICsxLDM3NCBAQAorLyogR1N0cmVhbWVy
IENsZWFyS2V5IGNvbW1vbiBlbmNyeXB0aW9uIGRlY3J5cHRvcgorICoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBZb3VWaWV3IFRWIEx0ZC4gPGFsZXguYXNobGV5QHlvdXZpZXcuY29tPgorICogQ29w
eXJpZ2h0IChDKSAyMDE2IE1ldHJvbG9naWNhbAorICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxp
YSBTLkwKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIFN1aXRlIDUwMCwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmgiCisKKyNp
ZiBFTkFCTEUoTEVHQUNZX0VOQ1JZUFRFRF9NRURJQSkgJiYgVVNFKEdTVFJFQU1FUikKKworI2lu
Y2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+Cisj
aW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKworI2RlZmluZSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNS
WVBUX0dFVF9QUklWQVRFKG9iaikgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwg
V0VCS0lUX1RZUEVfTUVESUFfQ0VOQ19ERUNSWVBULCBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRp
b25EZWNyeXB0UHJpdmF0ZSkpCitzdHJ1Y3QgX1dlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHRQcml2YXRlIHsKKyAgICBHUmVmUHRyPEdzdEV2ZW50PiBwcm90ZWN0aW9uRXZlbnQ7CisK
KyAgICBib29sIGtleVJlY2VpdmVkOworICAgIExvY2sgbXV0ZXg7CisgICAgQ29uZGl0aW9uIGNv
bmRpdGlvbjsKK307CisKK3N0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiB3ZWJLaXRNZWRpYUNv
bW1vbkVuY3J5cHRpb25EZWNyeXB0b3JDaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiwgR3N0U3RhdGVD
aGFuZ2UgdHJhbnNpdGlvbik7CitzdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRp
b25EZWNyeXB0b3JGaW5hbGl6ZShHT2JqZWN0Kik7CitzdGF0aWMgR3N0Q2Fwcyogd2Via2l0TWVk
aWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFRyYW5zZm9ybUNhcHMoR3N0QmFzZVRyYW5zZm9ybSos
IEdzdFBhZERpcmVjdGlvbiwgR3N0Q2FwcyosIEdzdENhcHMqKTsKK3N0YXRpYyBHc3RGbG93UmV0
dXJuIHdlYmtpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRUcmFuc2Zvcm1JblBsYWNlKEdz
dEJhc2VUcmFuc2Zvcm0qLCBHc3RCdWZmZXIqKTsKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRNZWRp
YUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0U2lua0V2ZW50SGFuZGxlcihHc3RCYXNlVHJhbnNmb3Jt
KiwgR3N0RXZlbnQqKTsKKworc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlhQ29tbW9uRW5jcnlw
dGlvbkRlY3J5cHREZWZhdWx0U2V0dXBDaXBoZXIoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9u
RGVjcnlwdCopOworc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlw
dERlZmF1bHRSZWxlYXNlQ2lwaGVyKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQq
KTsKKworR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyh3ZWJraXRfbWVkaWFfY29tbW9uX2VuY3J5
cHRpb25fZGVjcnlwdF9kZWJ1Z19jYXRlZ29yeSk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3
ZWJraXRfbWVkaWFfY29tbW9uX2VuY3J5cHRpb25fZGVjcnlwdF9kZWJ1Z19jYXRlZ29yeQorCisj
ZGVmaW5lIHdlYmtpdF9tZWRpYV9jb21tb25fZW5jcnlwdGlvbl9kZWNyeXB0X3BhcmVudF9jbGFz
cyBwYXJlbnRfY2xhc3MKK0dfREVGSU5FX1RZUEUoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9u
RGVjcnlwdCwgd2Via2l0X21lZGlhX2NvbW1vbl9lbmNyeXB0aW9uX2RlY3J5cHQsIEdTVF9UWVBF
X0JBU0VfVFJBTlNGT1JNKTsKKworc3RhdGljIHZvaWQgd2Via2l0X21lZGlhX2NvbW1vbl9lbmNy
eXB0aW9uX2RlY3J5cHRfY2xhc3NfaW5pdChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNy
eXB0Q2xhc3MqIGtsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19P
QkpFQ1RfQ0xBU1Moa2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJLaXRN
ZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JGaW5hbGl6ZTsKKworICAgIEdTVF9ERUJVR19D
QVRFR09SWV9JTklUKHdlYmtpdF9tZWRpYV9jb21tb25fZW5jcnlwdGlvbl9kZWNyeXB0X2RlYnVn
X2NhdGVnb3J5LAorICAgICAgICAid2Via2l0Y2VuYyIsIDAsICJDb21tb24gRW5jcnlwdGlvbiBi
YXNlIGNsYXNzIik7CisKKyAgICBHc3RFbGVtZW50Q2xhc3MqIGVsZW1lbnRDbGFzcyA9IEdTVF9F
TEVNRU5UX0NMQVNTKGtsYXNzKTsKKyAgICBlbGVtZW50Q2xhc3MtPmNoYW5nZV9zdGF0ZSA9IEdT
VF9ERUJVR19GVU5DUFRSKHdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckNoYW5n
ZVN0YXRlKTsKKworICAgIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyogYmFzZVRyYW5zZm9ybUNsYXNz
ID0gR1NUX0JBU0VfVFJBTlNGT1JNX0NMQVNTKGtsYXNzKTsKKyAgICBiYXNlVHJhbnNmb3JtQ2xh
c3MtPnRyYW5zZm9ybV9pcCA9IEdTVF9ERUJVR19GVU5DUFRSKHdlYmtpdE1lZGlhQ29tbW9uRW5j
cnlwdGlvbkRlY3J5cHRUcmFuc2Zvcm1JblBsYWNlKTsKKyAgICBiYXNlVHJhbnNmb3JtQ2xhc3Mt
PnRyYW5zZm9ybV9jYXBzID0gR1NUX0RFQlVHX0ZVTkNQVFIod2Via2l0TWVkaWFDb21tb25FbmNy
eXB0aW9uRGVjcnlwdFRyYW5zZm9ybUNhcHMpOworICAgIGJhc2VUcmFuc2Zvcm1DbGFzcy0+dHJh
bnNmb3JtX2lwX29uX3Bhc3N0aHJvdWdoID0gRkFMU0U7CisgICAgYmFzZVRyYW5zZm9ybUNsYXNz
LT5zaW5rX2V2ZW50ID0gR1NUX0RFQlVHX0ZVTkNQVFIod2Via2l0TWVkaWFDb21tb25FbmNyeXB0
aW9uRGVjcnlwdFNpbmtFdmVudEhhbmRsZXIpOworCisgICAga2xhc3MtPnNldHVwQ2lwaGVyID0g
R1NUX0RFQlVHX0ZVTkNQVFIod2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdERlZmF1
bHRTZXR1cENpcGhlcik7CisgICAga2xhc3MtPnJlbGVhc2VDaXBoZXIgPSBHU1RfREVCVUdfRlVO
Q1BUUih3ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0RGVmYXVsdFJlbGVhc2VDaXBo
ZXIpOworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGtsYXNzLCBzaXplb2YoV2ViS2l0
TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGUpKTsKK30KKworc3RhdGljIHZvaWQg
d2Via2l0X21lZGlhX2NvbW1vbl9lbmNyeXB0aW9uX2RlY3J5cHRfaW5pdChXZWJLaXRNZWRpYUNv
bW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmKQoreworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5j
cnlwdGlvbkRlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9H
RVRfUFJJVkFURShzZWxmKTsKKworICAgIHNlbGYtPnByaXYgPSBwcml2OworICAgIG5ldyAocHJp
dikgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGUoKTsKKworICAgIEdz
dEJhc2VUcmFuc2Zvcm0qIGJhc2UgPSBHU1RfQkFTRV9UUkFOU0ZPUk0oc2VsZik7CisgICAgZ3N0
X2Jhc2VfdHJhbnNmb3JtX3NldF9pbl9wbGFjZShiYXNlLCBUUlVFKTsKKyAgICBnc3RfYmFzZV90
cmFuc2Zvcm1fc2V0X3Bhc3N0aHJvdWdoKGJhc2UsIEZBTFNFKTsKKyAgICBnc3RfYmFzZV90cmFu
c2Zvcm1fc2V0X2dhcF9hd2FyZShiYXNlLCBGQUxTRSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYktp
dE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkK
K3sKKyAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmID0gV0VCS0lU
X01FRElBX0NFTkNfREVDUllQVChvYmplY3QpOworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlw
dGlvbkRlY3J5cHRQcml2YXRlKiBwcml2ID0gc2VsZi0+cHJpdjsKKworICAgIHByaXYtPn5XZWJL
aXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJpdmF0ZSgpOworICAgIEdTVF9DQUxMX1BB
UkVOVChHX09CSkVDVF9DTEFTUywgZmluYWxpemUsIChvYmplY3QpKTsKK30KKworc3RhdGljIEdz
dENhcHMqIHdlYmtpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRUcmFuc2Zvcm1DYXBzKEdz
dEJhc2VUcmFuc2Zvcm0qIGJhc2UsIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sIEdzdENhcHMq
IGNhcHMsIEdzdENhcHMqIGZpbHRlcikKK3sKKyAgICBpZiAoZGlyZWN0aW9uID09IEdTVF9QQURf
VU5LTk9XTikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBHU1RfREVCVUdfT0JKRUNU
KGJhc2UsICJkaXJlY3Rpb246ICVzLCBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCAiIGZpbHRlcjog
JSIgR1NUX1BUUl9GT1JNQVQsIChkaXJlY3Rpb24gPT0gR1NUX1BBRF9TUkMpID8gInNyYyIgOiAi
c2luayIsIGNhcHMsIGZpbHRlcik7CisKKyAgICBHc3RDYXBzKiB0cmFuc2Zvcm1lZENhcHMgPSBn
c3RfY2Fwc19uZXdfZW1wdHkoKTsKKyAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNy
eXB0KiBzZWxmID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVChiYXNlKTsKKyAgICBXZWJLaXRN
ZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MqIGtsYXNzID0gV0VCS0lUX01FRElBX0NF
TkNfREVDUllQVF9HRVRfQ0xBU1Moc2VsZik7CisKKyAgICB1bnNpZ25lZCBzaXplID0gZ3N0X2Nh
cHNfZ2V0X3NpemUoY2Fwcyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsr
aSkgeworICAgICAgICBHc3RTdHJ1Y3R1cmUqIGluY29taW5nU3RydWN0dXJlID0gZ3N0X2NhcHNf
Z2V0X3N0cnVjdHVyZShjYXBzLCBpKTsKKyAgICAgICAgR1JlZlB0cjxHc3RTdHJ1Y3R1cmU+IG91
dGdvaW5nU3RydWN0dXJlID0gbnVsbHB0cjsKKworICAgICAgICBpZiAoZGlyZWN0aW9uID09IEdT
VF9QQURfU0lOSykgeworICAgICAgICAgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2hhc19maWVsZChp
bmNvbWluZ1N0cnVjdHVyZSwgIm9yaWdpbmFsLW1lZGlhLXR5cGUiKSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICAgICAgb3V0Z29pbmdTdHJ1Y3R1cmUgPSBhZG9wdEdSZWYo
Z3N0X3N0cnVjdHVyZV9jb3B5KGluY29taW5nU3RydWN0dXJlKSk7CisgICAgICAgICAgICBnc3Rf
c3RydWN0dXJlX3NldF9uYW1lKG91dGdvaW5nU3RydWN0dXJlLmdldCgpLCBnc3Rfc3RydWN0dXJl
X2dldF9zdHJpbmcob3V0Z29pbmdTdHJ1Y3R1cmUuZ2V0KCksICJvcmlnaW5hbC1tZWRpYS10eXBl
IikpOworCisgICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHRoZSBEUk0gcmVsYXRlZCBmaWVsZHMg
ZnJvbSB0aGUgZG93bi1zdHJlYW0gY2Fwcy4KKyAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBq
IDwgZ3N0X3N0cnVjdHVyZV9uX2ZpZWxkcyhpbmNvbWluZ1N0cnVjdHVyZSk7ICsraikgeworICAg
ICAgICAgICAgICAgIGNvbnN0IGdjaGFyKiBmaWVsZE5hbWUgPSBnc3Rfc3RydWN0dXJlX250aF9m
aWVsZF9uYW1lKGluY29taW5nU3RydWN0dXJlLCBqKTsKKworICAgICAgICAgICAgICAgIGlmIChn
X3N0cl9oYXNfcHJlZml4KGZpZWxkTmFtZSwgInByb3RlY3Rpb24tc3lzdGVtIikKKyAgICAgICAg
ICAgICAgICAgICAgfHwgZ19zdHJfaGFzX3ByZWZpeChmaWVsZE5hbWUsICJvcmlnaW5hbC1tZWRp
YS10eXBlIikpCisgICAgICAgICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxk
KG91dGdvaW5nU3RydWN0dXJlLmdldCgpLCBmaWVsZE5hbWUpOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgb3V0Z29pbmdTdHJ1Y3R1cmUgPSBhZG9wdEdSZWYo
Z3N0X3N0cnVjdHVyZV9jb3B5KGluY29taW5nU3RydWN0dXJlKSk7CisgICAgICAgICAgICAvLyBG
aWx0ZXIgb3V0IHRoZSB2aWRlbyByZWxhdGVkIGZpZWxkcyBmcm9tIHRoZSB1cC1zdHJlYW0gY2Fw
cywKKyAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhleSBhcmUgbm90IHJlbGV2YW50IHRvIHRoZSBp
bnB1dCBjYXBzIG9mIHRoaXMgZWxlbWVudCBhbmQKKyAgICAgICAgICAgIC8vIGNhbiBjYXVzZSBj
YXBzIG5lZ290aWF0aW9uIGZhaWx1cmVzIHdpdGggYWRhcHRpdmUgYml0cmF0ZSBzdHJlYW1zLgor
ICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSBnc3Rfc3RydWN0dXJlX25fZmllbGRzKG91dGdv
aW5nU3RydWN0dXJlLmdldCgpKSAtIDE7IGluZGV4ID49IDA7IC0taW5kZXgpIHsKKyAgICAgICAg
ICAgICAgICBjb25zdCBnY2hhciogZmllbGROYW1lID0gZ3N0X3N0cnVjdHVyZV9udGhfZmllbGRf
bmFtZShvdXRnb2luZ1N0cnVjdHVyZS5nZXQoKSwgaW5kZXgpOworICAgICAgICAgICAgICAgIEdT
VF9UUkFDRSgiQ2hlY2sgZmllbGQgXCIlc1wiIGZvciByZW1vdmFsIiwgZmllbGROYW1lKTsKKwor
ICAgICAgICAgICAgICAgIGlmICghZ19zdHJjbXAwKGZpZWxkTmFtZSwgImJhc2UtcHJvZmlsZSIp
CisgICAgICAgICAgICAgICAgICAgIHx8ICFnX3N0cmNtcDAoZmllbGROYW1lLCAiY29kZWNfZGF0
YSIpCisgICAgICAgICAgICAgICAgICAgIHx8ICFnX3N0cmNtcDAoZmllbGROYW1lLCAiaGVpZ2h0
IikKKyAgICAgICAgICAgICAgICAgICAgfHwgIWdfc3RyY21wMChmaWVsZE5hbWUsICJmcmFtZXJh
dGUiKQorICAgICAgICAgICAgICAgICAgICB8fCAhZ19zdHJjbXAwKGZpZWxkTmFtZSwgImxldmVs
IikKKyAgICAgICAgICAgICAgICAgICAgfHwgIWdfc3RyY21wMChmaWVsZE5hbWUsICJwaXhlbC1h
c3BlY3QtcmF0aW8iKQorICAgICAgICAgICAgICAgICAgICB8fCAhZ19zdHJjbXAwKGZpZWxkTmFt
ZSwgInByb2ZpbGUiKQorICAgICAgICAgICAgICAgICAgICB8fCAhZ19zdHJjbXAwKGZpZWxkTmFt
ZSwgInJhdGUiKQorICAgICAgICAgICAgICAgICAgICB8fCAhZ19zdHJjbXAwKGZpZWxkTmFtZSwg
IndpZHRoIikpIHsKKyAgICAgICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmll
bGQob3V0Z29pbmdTdHJ1Y3R1cmUuZ2V0KCksIGZpZWxkTmFtZSk7CisgICAgICAgICAgICAgICAg
ICAgIEdTVF9UUkFDRSgiUmVtb3ZpbmcgZmllbGQgJXMiLCBmaWVsZE5hbWUpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQo
b3V0Z29pbmdTdHJ1Y3R1cmUuZ2V0KCksICJwcm90ZWN0aW9uLXN5c3RlbSIsIEdfVFlQRV9TVFJJ
TkcsIGtsYXNzLT5wcm90ZWN0aW9uU3lzdGVtSWQsCisgICAgICAgICAgICAgICAgIm9yaWdpbmFs
LW1lZGlhLXR5cGUiLCBHX1RZUEVfU1RSSU5HLCBnc3Rfc3RydWN0dXJlX2dldF9uYW1lKGluY29t
aW5nU3RydWN0dXJlKSwgbnVsbHB0cik7CisKKyAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0
X25hbWUob3V0Z29pbmdTdHJ1Y3R1cmUuZ2V0KCksICJhcHBsaWNhdGlvbi94LWNlbmMiKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGJvb2wgZHVwbGljYXRlID0gZmFsc2U7CisgICAgICAgIHVuc2ln
bmVkIHNpemUgPSBnc3RfY2Fwc19nZXRfc2l6ZSh0cmFuc2Zvcm1lZENhcHMpOworCisgICAgICAg
IGZvciAodW5zaWduZWQgaW5kZXggPSAwOyAhZHVwbGljYXRlICYmIGluZGV4IDwgc2l6ZTsgKytp
bmRleCkgeworICAgICAgICAgICAgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19n
ZXRfc3RydWN0dXJlKHRyYW5zZm9ybWVkQ2FwcywgaW5kZXgpOworICAgICAgICAgICAgaWYgKGdz
dF9zdHJ1Y3R1cmVfaXNfZXF1YWwoc3RydWN0dXJlLCBvdXRnb2luZ1N0cnVjdHVyZS5nZXQoKSkp
CisgICAgICAgICAgICAgICAgZHVwbGljYXRlID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmICghZHVwbGljYXRlKQorICAgICAgICAgICAgZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZSh0
cmFuc2Zvcm1lZENhcHMsIG91dGdvaW5nU3RydWN0dXJlLmxlYWtSZWYoKSk7CisgICAgfQorCisg
ICAgaWYgKGZpbHRlcikgeworICAgICAgICBHc3RDYXBzKiBpbnRlcnNlY3Rpb247CisKKyAgICAg
ICAgR1NUX0RFQlVHX09CSkVDVChiYXNlLCAiVXNpbmcgZmlsdGVyIGNhcHMgJSIgR1NUX1BUUl9G
T1JNQVQsIGZpbHRlcik7CisgICAgICAgIGludGVyc2VjdGlvbiA9IGdzdF9jYXBzX2ludGVyc2Vj
dF9mdWxsKHRyYW5zZm9ybWVkQ2FwcywgZmlsdGVyLCBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1Qp
OworICAgICAgICBnc3RfY2Fwc191bnJlZih0cmFuc2Zvcm1lZENhcHMpOworICAgICAgICB0cmFu
c2Zvcm1lZENhcHMgPSBpbnRlcnNlY3Rpb247CisgICAgfQorCisgICAgR1NUX0RFQlVHX09CSkVD
VChiYXNlLCAicmV0dXJuaW5nICUiIEdTVF9QVFJfRk9STUFULCB0cmFuc2Zvcm1lZENhcHMpOwor
ICAgIHJldHVybiB0cmFuc2Zvcm1lZENhcHM7Cit9CisKK3N0YXRpYyBHc3RGbG93UmV0dXJuIHdl
YmtpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRUcmFuc2Zvcm1JblBsYWNlKEdzdEJhc2VU
cmFuc2Zvcm0qIGJhc2UsIEdzdEJ1ZmZlciogYnVmZmVyKQoreworICAgIFdlYktpdE1lZGlhQ29t
bW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUKGJh
c2UpOworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlKiBwcml2
ID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfUFJJVkFURShzZWxmKTsKKyAgICBMb2Nr
SG9sZGVyIGxvY2tlcihwcml2LT5tdXRleCk7CisKKyAgICAvLyBUaGUga2V5IG1pZ2h0IG5vdCBo
YXZlIGJlZW4gcmVjZWl2ZWQgeWV0LiBXYWl0IGZvciBpdC4KKyAgICBpZiAoIXByaXYtPmtleVJl
Y2VpdmVkKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgImtleSBub3QgYXZhaWxh
YmxlIHlldCwgd2FpdGluZyBmb3IgaXQiKTsKKyAgICAgICAgaWYgKEdTVF9TVEFURShHU1RfRUxF
TUVOVChzZWxmKSkgPCBHU1RfU1RBVEVfUEFVU0VEIHx8IChHU1RfU1RBVEVfVEFSR0VUKEdTVF9F
TEVNRU5UKHNlbGYpKSAhPSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HICYmIEdTVF9TVEFURV9UQVJH
RVQoR1NUX0VMRU1FTlQoc2VsZikpIDwgR1NUX1NUQVRFX1BBVVNFRCkpIHsKKyAgICAgICAgICAg
IEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgImNhbid0IHByb2Nlc3Mga2V5IHJlcXVlc3RzIGluIGxl
c3MgdGhhbiBQQVVTRUQgc3RhdGUiKTsKKyAgICAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1Rf
U1VQUE9SVEVEOworICAgICAgICB9CisgICAgICAgIHByaXYtPmNvbmRpdGlvbi53YWl0Rm9yKHBy
aXYtPm11dGV4LCBzdGQ6OmNocm9ubzo6c2Vjb25kcyg1KSwgW3ByaXZdIHsKKyAgICAgICAgICAg
IHJldHVybiBwcml2LT5rZXlSZWNlaXZlZDsKKyAgICAgICAgfSk7CisgICAgICAgIGlmICghcHJp
di0+a2V5UmVjZWl2ZWQpIHsKKyAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgImtl
eSBub3QgYXZhaWxhYmxlIik7CisgICAgICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBP
UlRFRDsKKyAgICAgICAgfQorICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJrZXkgcmVj
ZWl2ZWQsIGNvbnRpbnVpbmciKTsKKyAgICB9CisKKyAgICBHc3RQcm90ZWN0aW9uTWV0YSogcHJv
dGVjdGlvbk1ldGEgPSByZWludGVycHJldF9jYXN0PEdzdFByb3RlY3Rpb25NZXRhKj4oZ3N0X2J1
ZmZlcl9nZXRfcHJvdGVjdGlvbl9tZXRhKGJ1ZmZlcikpOworICAgIGlmICghcHJvdGVjdGlvbk1l
dGEpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBHc3RQ
cm90ZWN0aW9uIG1ldGFkYXRhIGZyb20gYnVmZmVyICVwIiwgYnVmZmVyKTsKKyAgICAgICAgcmV0
dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CisgICAgfQorCisgICAgdW5zaWduZWQgaXZTaXpl
OworICAgIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfdWludChwcm90ZWN0aW9uTWV0YS0+aW5mbywg
Iml2X3NpemUiLCAmaXZTaXplKSkgeworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJG
YWlsZWQgdG8gZ2V0IGl2X3NpemUiKTsKKyAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShi
dWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CisgICAg
ICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOworICAgIH0KKworICAgIGdib29sZWFu
IGVuY3J5cHRlZDsKKyAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2Jvb2xlYW4ocHJvdGVjdGlv
bk1ldGEtPmluZm8sICJlbmNyeXB0ZWQiLCAmZW5jcnlwdGVkKSkgeworICAgICAgICBHU1RfRVJS
T1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gZ2V0IGVuY3J5cHRlZCBmbGFnIik7CisgICAgICAg
IGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEq
Pihwcm90ZWN0aW9uTWV0YSkpOworICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRF
RDsKKyAgICB9CisKKyAgICBpZiAoIWl2U2l6ZSB8fCAhZW5jcnlwdGVkKSB7CisgICAgICAgIGdz
dF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihw
cm90ZWN0aW9uTWV0YSkpOworICAgICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7CisgICAgfQorCisg
ICAgR1NUX0RFQlVHX09CSkVDVChiYXNlLCAicHJvdGVjdGlvbiBtZXRhOiAlIiBHU1RfUFRSX0ZP
Uk1BVCwgcHJvdGVjdGlvbk1ldGEtPmluZm8pOworCisgICAgdW5zaWduZWQgc3ViU2FtcGxlQ291
bnQ7CisgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF91aW50KHByb3RlY3Rpb25NZXRhLT5pbmZv
LCAic3Vic2FtcGxlX2NvdW50IiwgJnN1YlNhbXBsZUNvdW50KSkgeworICAgICAgICBHU1RfRVJS
T1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gZ2V0IHN1YnNhbXBsZV9jb3VudCIpOworICAgICAg
ICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRh
Kj4ocHJvdGVjdGlvbk1ldGEpKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JU
RUQ7CisgICAgfQorCisgICAgY29uc3QgR1ZhbHVlKiB2YWx1ZTsKKyAgICBHc3RCdWZmZXIqIHN1
YlNhbXBsZXNCdWZmZXIgPSBudWxscHRyOworICAgIGlmIChzdWJTYW1wbGVDb3VudCkgeworICAg
ICAgICB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlKHByb3RlY3Rpb25NZXRhLT5pbmZv
LCAic3Vic2FtcGxlcyIpOworICAgICAgICBpZiAoIXZhbHVlKSB7CisgICAgICAgICAgICBHU1Rf
RVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gZ2V0IHN1YnNhbXBsZXMiKTsKKyAgICAgICAg
ICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1l
dGEqPihwcm90ZWN0aW9uTWV0YSkpOworICAgICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9T
VVBQT1JURUQ7CisgICAgICAgIH0KKyAgICAgICAgc3ViU2FtcGxlc0J1ZmZlciA9IGdzdF92YWx1
ZV9nZXRfYnVmZmVyKHZhbHVlKTsKKyAgICB9CisKKyAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5
cHRpb25EZWNyeXB0Q2xhc3MqIGtsYXNzID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRf
Q0xBU1Moc2VsZik7CisgICAgaWYgKCFrbGFzcy0+c2V0dXBDaXBoZXIoc2VsZikpIHsKKyAgICAg
ICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBjaXBoZXIiKTsK
KyAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8
R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CisgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1Rf
U1VQUE9SVEVEOworICAgIH0KKworICAgIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUo
cHJvdGVjdGlvbk1ldGEtPmluZm8sICJpdiIpOworICAgIGlmICghdmFsdWUpIHsKKyAgICAgICAg
R1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBJViBmb3Igc2FtcGxlIik7Cisg
ICAgICAgIGtsYXNzLT5yZWxlYXNlQ2lwaGVyKHNlbGYpOworICAgICAgICBnc3RfYnVmZmVyX3Jl
bW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1l
dGEpKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CisgICAgfQorCisg
ICAgR3N0QnVmZmVyKiBpdkJ1ZmZlciA9IGdzdF92YWx1ZV9nZXRfYnVmZmVyKHZhbHVlKTsKKyAg
ICBHU1RfVFJBQ0VfT0JKRUNUKHNlbGYsICJkZWNyeXB0aW5nIik7CisgICAgaWYgKCFrbGFzcy0+
ZGVjcnlwdChzZWxmLCBpdkJ1ZmZlciwgYnVmZmVyLCBzdWJTYW1wbGVDb3VudCwgc3ViU2FtcGxl
c0J1ZmZlcikpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRGVjcnlwdGlvbiBm
YWlsZWQiKTsKKyAgICAgICAga2xhc3MtPnJlbGVhc2VDaXBoZXIoc2VsZik7CisgICAgICAgIGdz
dF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihw
cm90ZWN0aW9uTWV0YSkpOworICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsK
KyAgICB9CisKKyAgICBrbGFzcy0+cmVsZWFzZUNpcGhlcihzZWxmKTsKKyAgICBnc3RfYnVmZmVy
X3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlv
bk1ldGEpKTsKKyAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Cit9CisKKworc3RhdGljIGdib29sZWFu
IHdlYmtpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRTaW5rRXZlbnRIYW5kbGVyKEdzdEJh
c2VUcmFuc2Zvcm0qIHRyYW5zLCBHc3RFdmVudCogZXZlbnQpCit7CisgICAgV2ViS2l0TWVkaWFD
b21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFQo
dHJhbnMpOworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlKiBw
cml2ID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfUFJJVkFURShzZWxmKTsKKyAgICBX
ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MqIGtsYXNzID0gV0VCS0lUX01F
RElBX0NFTkNfREVDUllQVF9HRVRfQ0xBU1Moc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0g
RkFMU0U7CisKKyAgICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFKGV2ZW50KSkgeworICAgIGNhc2Ug
R1NUX0VWRU5UX1BST1RFQ1RJT046IHsKKyAgICAgICAgY29uc3QgY2hhciogc3lzdGVtSWQ7Cisg
ICAgICAgIGNvbnN0IGNoYXIqIG9yaWdpbjsKKyAgICAgICAgR3N0QnVmZmVyKiBpbml0RGF0YUJ1
ZmZlcjsKKworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJyZWNlaXZlZCBwcm90ZWN0
aW9uIGV2ZW50Iik7CisgICAgICAgIGdzdF9ldmVudF9wYXJzZV9wcm90ZWN0aW9uKGV2ZW50LCAm
c3lzdGVtSWQsICZpbml0RGF0YUJ1ZmZlciwgJm9yaWdpbik7CisgICAgICAgIEdTVF9ERUJVR19P
QkpFQ1Qoc2VsZiwgInN5c3RlbUlkOiAlcyIsIHN5c3RlbUlkKTsKKworICAgICAgICBpZiAoIWdf
c3RyX2VxdWFsKHN5c3RlbUlkLCBrbGFzcy0+cHJvdGVjdGlvblN5c3RlbUlkKSkgeworICAgICAg
ICAgICAgZ3N0X2V2ZW50X3VucmVmKGV2ZW50KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IFRSVUU7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEtlZXAgdGhlIGV2
ZW50IHJlZiBhcm91bmQgc28gdGhhdCB0aGUgcGFyc2VkIGV2ZW50IGRhdGEKKyAgICAgICAgLy8g
cmVtYWlucyB2YWxpZCB1bnRpbCB0aGUgZHJtLWtleS1uZWVkIG1lc3NhZ2UgaGFzIGJlZW4gc2Vu
dC4KKyAgICAgICAgcHJpdi0+cHJvdGVjdGlvbkV2ZW50ID0gYWRvcHRHUmVmKGV2ZW50KTsKKyAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzZWxmLCBpbml0RGF0YUJ1ZmZlcl0gewor
ICAgICAgICAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdENsYXNzKiBrbGFz
cyA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX0NMQVNTKHNlbGYpOworICAgICAgICAg
ICAgaWYgKGtsYXNzKSB7CisgICAgICAgICAgICAgICAga2xhc3MtPnJlcXVlc3REZWNyeXB0aW9u
S2V5KHNlbGYsIGluaXREYXRhQnVmZmVyKTsKKyAgICAgICAgICAgICAgICBzZWxmLT5wcml2LT5w
cm90ZWN0aW9uRXZlbnQgPSBudWxscHRyOworICAgICAgICAgICAgfX0pOworCisgICAgICAgIHJl
c3VsdCA9IFRSVUU7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9FVkVOVF9D
VVNUT01fRE9XTlNUUkVBTV9PT0I6IHsKKyAgICAgICAgaWYgKGtsYXNzLT5oYW5kbGVLZXlSZXNw
b25zZShzZWxmLCBldmVudCkpIHsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwg
ImtleSByZWNlaXZlZCIpOworICAgICAgICAgICAgcHJpdi0+a2V5UmVjZWl2ZWQgPSB0cnVlOwor
ICAgICAgICAgICAgcHJpdi0+Y29uZGl0aW9uLm5vdGlmeU9uZSgpOworICAgICAgICB9CisKKyAg
ICAgICAgZ3N0X2V2ZW50X3VucmVmKGV2ZW50KTsKKyAgICAgICAgcmVzdWx0ID0gVFJVRTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIHJlc3VsdCA9IEdTVF9C
QVNFX1RSQU5TRk9STV9DTEFTUyhwYXJlbnRfY2xhc3MpLT5zaW5rX2V2ZW50KHRyYW5zLCBldmVu
dCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0
YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiB3ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNy
eXB0b3JDaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFu
c2l0aW9uKQoreworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYg
PSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUKGVsZW1lbnQpOworICAgIFdlYktpdE1lZGlhQ29t
bW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NFTkNfREVD
UllQVF9HRVRfUFJJVkFURShzZWxmKTsKKworICAgIHN3aXRjaCAodHJhbnNpdGlvbikgeworICAg
IGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6CisgICAgICAgIEdTVF9ERUJV
R19PQkpFQ1Qoc2VsZiwgIlBBVVNFRC0+UkVBRFkiKTsKKyAgICAgICAgcHJpdi0+Y29uZGl0aW9u
Lm5vdGlmeU9uZSgpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXN1bHQgPSBHU1RfRUxFTUVO
VF9DTEFTUyhwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUoZWxlbWVudCwgdHJhbnNpdGlvbik7
CisKKyAgICAvLyBBZGQgcG9zdC10cmFuc2l0aW9uIGNvZGUgaGVyZS4KKworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKKworc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlv
bkRlY3J5cHREZWZhdWx0U2V0dXBDaXBoZXIoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVj
cnlwdCopCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKworc3RhdGljIHZvaWQgd2ViS2l0TWVk
aWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdERlZmF1bHRSZWxlYXNlQ2lwaGVyKFdlYktpdE1lZGlh
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqKQoreworfQorCisKKyNlbmRpZiAvLyBFTkFCTEUoTEVH
QUNZX0VOQ1JZUFRFRF9NRURJQSkgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5j
cnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVh
bWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNGNiODdkN2FhZGQwNzI0YjMyNDNlYWZmZDc0NzdmMThjNzViMjBi
YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oCkBA
IC0wLDAgKzEsNjUgQEAKKy8qIEdTdHJlYW1lciBDbGVhcktleSBjb21tb24gZW5jcnlwdGlvbiBk
ZWNyeXB0b3IKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgWW91VmlldyBUViBMdGQuIDxhbGV4
LmFzaGxleUB5b3V2aWV3LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBNZXRyb2xvZ2ljYWwK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBJZ2FsaWEgUy5MCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3QsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTEVHQUNZX0VOQ1JZUFRFRF9NRURJQSkgJiYg
VVNFKEdTVFJFQU1FUikKKworI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaD4K
KyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRf
VFlQRV9NRURJQV9DRU5DX0RFQ1JZUFQgICAgICAgICAgKHdlYmtpdF9tZWRpYV9jb21tb25fZW5j
cnlwdGlvbl9kZWNyeXB0X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9NRURJQV9DRU5DX0RF
Q1JZUFQob2JqKSAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdF
QktJVF9UWVBFX01FRElBX0NFTkNfREVDUllQVCwgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9u
RGVjcnlwdCkpCisjZGVmaW5lIFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfQ0xBU1Moa2xhc3Mp
ICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgV0VCS0lUX1RZUEVfTUVESUFfQ0VO
Q19ERUNSWVBULCBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MpKQorI2Rl
ZmluZSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lO
U1RBTkNFX0dFVF9DTEFTUygob2JqKSwgV0VCS0lUX1RZUEVfTUVESUFfQ0VOQ19ERUNSWVBULCBX
ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MpKQorCisjZGVmaW5lIFdFQktJ
VF9JU19NRURJQV9DRU5DX0RFQ1JZUFQob2JqKSAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNF
X1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX01FRElBX0NFTkNfREVDUllQVCkpCisjZGVmaW5lIFdF
QktJVF9JU19NRURJQV9DRU5DX0RFQ1JZUFRfQ0xBU1Mob2JqKSAoR19UWVBFX0NIRUNLX0NMQVNT
X1RZUEUoKGtsYXNzKSwgV0VCS0lUX1RZUEVfTUVESUFfQ0VOQ19ERUNSWVBUKSkKKwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQgICAgICAgIFdlYktp
dE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0TWVk
aWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdENsYXNzICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0
aW9uRGVjcnlwdENsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdE1lZGlhQ29tbW9uRW5jcnlw
dGlvbkRlY3J5cHRQcml2YXRlIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2
YXRlOworCitHVHlwZSB3ZWJraXRfbWVkaWFfY29tbW9uX2VuY3J5cHRpb25fZGVjcnlwdF9nZXRf
dHlwZSh2b2lkKTsKKworc3RydWN0IF9XZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0
IHsKKyAgICBHc3RCYXNlVHJhbnNmb3JtIHBhcmVudDsKKworICAgIFdlYktpdE1lZGlhQ29tbW9u
RW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlKiBwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRNZWRp
YUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MgeworICAgIEdzdEJhc2VUcmFuc2Zvcm1DbGFz
cyBwYXJlbnRDbGFzczsKKworICAgIGNvbnN0IGNoYXIqIHByb3RlY3Rpb25TeXN0ZW1JZDsKKyAg
ICB2b2lkICgqcmVxdWVzdERlY3J5cHRpb25LZXkpKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlv
bkRlY3J5cHQqLCBHc3RCdWZmZXIqIGluaXREYXRhKTsKKyAgICBnYm9vbGVhbiAoKmhhbmRsZUtl
eVJlc3BvbnNlKShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgR3N0RXZlbnQq
IGV2ZW50KTsKKyAgICBnYm9vbGVhbiAoKnNldHVwQ2lwaGVyKShXZWJLaXRNZWRpYUNvbW1vbkVu
Y3J5cHRpb25EZWNyeXB0Kik7CisgICAgZ2Jvb2xlYW4gKCpkZWNyeXB0KShXZWJLaXRNZWRpYUNv
bW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgR3N0QnVmZmVyKiBpdkJ1ZmZlciwgR3N0QnVmZmVyKiBi
dWZmZXIsIHVuc2lnbmVkIHN1YlNhbXBsZXNDb3VudCwgR3N0QnVmZmVyKiBzdWJTYW1wbGVzQnVm
ZmVyKTsKKyAgICB2b2lkICgqcmVsZWFzZUNpcGhlcikoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0
aW9uRGVjcnlwdCopOworfTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>