<?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>163909</bug_id>
          
          <creation_ts>2016-10-24 13:56:50 -0700</creation_ts>
          <short_desc>Replace IDBKeyPath with a WTF::Variant</short_desc>
          <delta_ts>2016-10-26 20:16:18 -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>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>163916</dependson>
    
    <dependson>163935</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>jsbell</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1243872</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-10-24 13:56:50 -0700</bug_when>
    <thetext>Replace IDBKeyPath with a WTF::Variant and use a (DOMString or sequence&lt;DOMString&gt;) union on IDL side, as per the specification:
- https://www.w3.org/TR/IndexedDB/#idl-def-IDBObjectStoreParameters
- https://www.w3.org/TR/IndexedDB/#dfn-valid-key-path

I&apos;ll likely go incrementally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244615</commentid>
    <comment_count>1</comment_count>
      <attachid>292869</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-10-25 20:04:00 -0700</bug_when>
    <thetext>Created attachment 292869
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244618</commentid>
    <comment_count>2</comment_count>
      <attachid>292871</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-10-25 20:45:57 -0700</bug_when>
    <thetext>Created attachment 292871
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244956</commentid>
    <comment_count>3</comment_count>
      <attachid>292871</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-26 16:38:41 -0700</bug_when>
    <thetext>Comment on attachment 292871
Patch

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

&gt; Source/WebCore/Modules/indexeddb/IDBKeyPath.h:37
&gt; +bool isIDBKeyPathValid(const IDBKeyPath&amp;);

This function does need IDBKeyPath in its name, because it’s not something that is a general operation on any variant that happens to have a string plus a vector of strings.

&gt; Source/WebCore/Modules/indexeddb/IDBKeyPath.h:48
&gt; +IDBKeyPath IDBKeyPathIsolatedCopy(const IDBKeyPath&amp;);
&gt; +inline Optional&lt;IDBKeyPath&gt; IDBKeyPathIsolatedCopy(const Optional&lt;IDBKeyPath&gt;&amp; variant)

The functions in this overloaded pair do not need IDBKeyPath in their names and should just be named isolatedCopy. The algorithm would be correct for any other variant combining String and Vector&lt;String&gt;, this could be overloaded for other types, and in fact we might eventually want to replace this with a generic implementation that can traverse the variants and do isolated copy on each piece.

&gt; Source/WebCore/Modules/indexeddb/server/IDBSerialization.h:38
&gt; +RefPtr&lt;SharedBuffer&gt; serializeIDBKeyPath(const Optional&lt;IDBKeyPath&gt;&amp;);

Why does this return RefPtr, not Ref? Can it return null?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244959</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-10-26 16:46:00 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 292871 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=292871&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/IDBKeyPath.h:37
&gt; &gt; +bool isIDBKeyPathValid(const IDBKeyPath&amp;);
&gt; 
&gt; This function does need IDBKeyPath in its name, because it’s not something
&gt; that is a general operation on any variant that happens to have a string
&gt; plus a vector of strings.
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/IDBKeyPath.h:48
&gt; &gt; +IDBKeyPath IDBKeyPathIsolatedCopy(const IDBKeyPath&amp;);
&gt; &gt; +inline Optional&lt;IDBKeyPath&gt; IDBKeyPathIsolatedCopy(const Optional&lt;IDBKeyPath&gt;&amp; variant)
&gt; 
&gt; The functions in this overloaded pair do not need IDBKeyPath in their names
&gt; and should just be named isolatedCopy. The algorithm would be correct for
&gt; any other variant combining String and Vector&lt;String&gt;, this could be
&gt; overloaded for other types, and in fact we might eventually want to replace
&gt; this with a generic implementation that can traverse the variants and do
&gt; isolated copy on each piece.

I initially called it isolatedCopy(). However, this is usually called from classes that already have an isolatedCopy() method and the compiler complains about it. The compiler want me to call ::WebCore::isolatedCopy() then, which looked horrible. This is why I renamed. What do you think?

&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/server/IDBSerialization.h:38
&gt; &gt; +RefPtr&lt;SharedBuffer&gt; serializeIDBKeyPath(const Optional&lt;IDBKeyPath&gt;&amp;);
&gt; 
&gt; Why does this return RefPtr, not Ref? Can it return null?

It relies on KeyedEncoder.finishEncoding() internally which returns a PassRefPtr at the moment :( It seems KeyedEncoder.finishEncoding() can return null if CFPropertyListCreateData() return null.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244961</commentid>
    <comment_count>5</comment_count>
      <attachid>292871</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-26 16:58:46 -0700</bug_when>
    <thetext>Comment on attachment 292871
Patch

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

&gt;&gt;&gt; Source/WebCore/Modules/indexeddb/IDBKeyPath.h:37
&gt;&gt;&gt; +bool isIDBKeyPathValid(const IDBKeyPath&amp;);
&gt;&gt; 
&gt;&gt; This function does need IDBKeyPath in its name, because it’s not something that is a general operation on any variant that happens to have a string plus a vector of strings.
&gt; 
&gt; I initially called it isolatedCopy(). However, this is usually called from classes that already have an isolatedCopy() method and the compiler complains about it. The compiler want me to call ::WebCore::isolatedCopy() then, which looked horrible. This is why I renamed. What do you think?

You can use WebCore::isolatedCopy; don’t need the extra :: prefix, and I probably would do that.

Longer term I think an elegant solution is to use the overall pattern of a free function named isolatedCopy rather than a member function, using friend as needed, which can be used on a whole data structure or on a single object like a String.

But using this key-path-specific name in the short term is also OK, even though I do not think it is forward looking. Easy to rename later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244978</commentid>
    <comment_count>6</comment_count>
      <attachid>292871</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-26 17:36:09 -0700</bug_when>
    <thetext>Comment on attachment 292871
Patch

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

&gt;&gt;&gt; Source/WebCore/Modules/indexeddb/server/IDBSerialization.h:38
&gt;&gt;&gt; +RefPtr&lt;SharedBuffer&gt; serializeIDBKeyPath(const Optional&lt;IDBKeyPath&gt;&amp;);
&gt;&gt; 
&gt;&gt; Why does this return RefPtr, not Ref? Can it return null?
&gt; 
&gt; It relies on KeyedEncoder.finishEncoding() internally which returns a PassRefPtr at the moment :( It seems KeyedEncoder.finishEncoding() can return null if CFPropertyListCreateData() return null.

Here’s what I do in situations like this: I try to find out if the callers check for null. If they don’t, then it’s just about moving the null-dereference crash around. So I try to move it down to as low level as possible.

If some callers check for null, then I try to make sure that either all of them do it, or there is some rationale instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244999</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-10-26 19:19:01 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Comment on attachment 292871 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=292871&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/Modules/indexeddb/server/IDBSerialization.h:38
&gt; &gt;&gt;&gt; +RefPtr&lt;SharedBuffer&gt; serializeIDBKeyPath(const Optional&lt;IDBKeyPath&gt;&amp;);
&gt; &gt;&gt; 
&gt; &gt;&gt; Why does this return RefPtr, not Ref? Can it return null?
&gt; &gt; 
&gt; &gt; It relies on KeyedEncoder.finishEncoding() internally which returns a PassRefPtr at the moment :( It seems KeyedEncoder.finishEncoding() can return null if CFPropertyListCreateData() return null.
&gt; 
&gt; Here’s what I do in situations like this: I try to find out if the callers
&gt; check for null. If they don’t, then it’s just about moving the
&gt; null-dereference crash around. So I try to move it down to as low level as
&gt; possible.
&gt; 
&gt; If some callers check for null, then I try to make sure that either all of
&gt; them do it, or there is some rationale instead.

All call sites check for null.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245000</commentid>
    <comment_count>8</comment_count>
      <attachid>292984</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-10-26 19:19:48 -0700</bug_when>
    <thetext>Created attachment 292984
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245008</commentid>
    <comment_count>9</comment_count>
      <attachid>292984</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-26 20:16:13 -0700</bug_when>
    <thetext>Comment on attachment 292984
Patch

Clearing flags on attachment: 292984

Committed r207931: &lt;http://trac.webkit.org/changeset/207931&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245009</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-26 20:16:18 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292869</attachid>
            <date>2016-10-25 20:04:00 -0700</date>
            <delta_ts>2016-10-25 20:45:53 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>163909_IDBKeyPath_wip.patch</filename>
            <type>text/plain</type>
            <size>41985</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCmluZGV4
IDU0MTY5MDkuLjE5NWExODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkN1cnNvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQ3Vyc29yLmNwcApAQCAtMTk0LDEwICsxOTQsMTAgQEAgRXhjZXB0aW9uT3I8UmVmPElE
QlJlcXVlc3Q+PiBJREJDdXJzb3I6OnVwZGF0ZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZh
bHVlKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSURCRGF0YWJhc2VFeGNlcHRpb246Oklu
dmFsaWRTdGF0ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICd1cGRhdGUn
IG9uICdJREJDdXJzb3InOiBUaGUgY3Vyc29yIGlzIGEga2V5IGN1cnNvci4iKSB9OwogCiAgICAg
YXV0byYgb2JqZWN0U3RvcmUgPSBlZmZlY3RpdmVPYmplY3RTdG9yZSgpOwotICAgIGF1dG8mIGtl
eVBhdGggPSBvYmplY3RTdG9yZS5pbmZvKCkua2V5UGF0aCgpOwotICAgIGNvbnN0IGJvb2wgdXNl
c0luTGluZUtleXMgPSAha2V5UGF0aC5pc051bGwoKTsKKyAgICBhdXRvJiBvcHRpb25hbEtleVBh
dGggPSBvYmplY3RTdG9yZS5pbmZvKCkua2V5UGF0aCgpOworICAgIGNvbnN0IGJvb2wgdXNlc0lu
TGluZUtleXMgPSAhIW9wdGlvbmFsS2V5UGF0aDsKICAgICBpZiAodXNlc0luTGluZUtleXMpIHsK
LSAgICAgICAgUmVmUHRyPElEQktleT4ga2V5UGF0aEtleSA9IG1heWJlQ3JlYXRlSURCS2V5RnJv
bVNjcmlwdFZhbHVlQW5kS2V5UGF0aChzdGF0ZSwgdmFsdWUsIGtleVBhdGgpOworICAgICAgICBS
ZWZQdHI8SURCS2V5PiBrZXlQYXRoS2V5ID0gbWF5YmVDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFs
dWVBbmRLZXlQYXRoKHN0YXRlLCB2YWx1ZSwgb3B0aW9uYWxLZXlQYXRoLnZhbHVlKCkpOwogICAg
ICAgICBJREJLZXlEYXRhIGtleVBhdGhLZXlEYXRhKGtleVBhdGhLZXkuZ2V0KCkpOwogICAgICAg
ICBpZiAoIWtleVBhdGhLZXkgfHwga2V5UGF0aEtleURhdGEgIT0gbV9jdXJyZW50UHJpbWFyeUtl
eURhdGEpCiAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSURCRGF0YWJhc2VFeGNlcHRp
b246OkRhdGFFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAndXBkYXRlJyBv
biAnSURCQ3Vyc29yJzogVGhlIGVmZmVjdGl2ZSBvYmplY3Qgc3RvcmUgb2YgdGhpcyBjdXJzb3Ig
dXNlcyBpbi1saW5lIGtleXMgYW5kIGV2YWx1YXRpbmcgdGhlIGtleSBwYXRoIG9mIHRoZSB2YWx1
ZSBwYXJhbWV0ZXIgcmVzdWx0cyBpbiBhIGRpZmZlcmVudCB2YWx1ZSB0aGFuIHRoZSBjdXJzb3In
cyBlZmZlY3RpdmUga2V5LiIpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2UuaAppbmRleCAyYjg2ODU3Li44OTJlYzY1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmgKQEAgLTU3LDcgKzU3LDcgQEAg
cHVibGljOgogICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBvYmplY3RTdG9yZU5hbWVzKCkgY29u
c3Q7CiAKICAgICBzdHJ1Y3QgT2JqZWN0U3RvcmVQYXJhbWV0ZXJzIHsKLSAgICAgICAgT3B0aW9u
YWw8SURCS2V5UGF0aFZhcmlhbnQ+IGtleVBhdGg7CisgICAgICAgIE9wdGlvbmFsPElEQktleVBh
dGg+IGtleVBhdGg7CiAgICAgICAgIGJvb2wgYXV0b0luY3JlbWVudDsKICAgICB9OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJHZXRSZXN1bHQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCR2V0UmVzdWx0LmNwcAppbmRl
eCBjNjU3OGY4Li5jNTVkMjNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJHZXRSZXN1bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkdldFJlc3VsdC5jcHAKQEAgLTUzLDcgKzUzLDcgQEAgdm9pZCBJREJHZXRSZXN1
bHQ6Omlzb2xhdGVkQ29weShjb25zdCBJREJHZXRSZXN1bHQmIHNvdXJjZSwgSURCR2V0UmVzdWx0
JiBkZXN0aW4KICAgICBkZXN0aW5hdGlvbi5tX3ZhbHVlID0gc291cmNlLm1fdmFsdWUuaXNvbGF0
ZWRDb3B5KCk7CiAgICAgZGVzdGluYXRpb24ubV9rZXlEYXRhID0gc291cmNlLm1fa2V5RGF0YS5p
c29sYXRlZENvcHkoKTsKICAgICBkZXN0aW5hdGlvbi5tX3ByaW1hcnlLZXlEYXRhID0gc291cmNl
Lm1fcHJpbWFyeUtleURhdGEuaXNvbGF0ZWRDb3B5KCk7Ci0gICAgZGVzdGluYXRpb24ubV9rZXlQ
YXRoID0gc291cmNlLm1fa2V5UGF0aC5pc29sYXRlZENvcHkoKTsKKyAgICBkZXN0aW5hdGlvbi5t
X2tleVBhdGggPSBJREJLZXlQYXRoSXNvbGF0ZWRDb3B5KHNvdXJjZS5tX2tleVBhdGgpOwogICAg
IGRlc3RpbmF0aW9uLm1faXNEZWZpbmVkID0gc291cmNlLm1faXNEZWZpbmVkOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCmluZGV4IGM0
YTRlZTIuLjg4ZmIwNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQktleVBhdGguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQktleVBhdGguY3BwCkBAIC0yNCwxMSArMjQsMTAgQEAKICAqLwogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiSURCS2V5UGF0aC5oIgogCiAjaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCisjaW5jbHVkZSAiSURCS2V5UGF0aC5oIgogCi0jaW5jbHVkZSAiS2V5ZWRDb2Rpbmcu
aCIKICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9kdG9hLmg+CiAK
QEAgLTE5MSwzOCArMTkwLDcgQEAgdm9pZCBJREJQYXJzZUtleVBhdGgoY29uc3QgU3RyaW5nJiBr
ZXlQYXRoLCBWZWN0b3I8U3RyaW5nPiYgZWxlbWVudHMsIElEQktleVBhdGgKICAgICB9CiB9CiAK
LUlEQktleVBhdGg6OklEQktleVBhdGgoY29uc3QgU3RyaW5nJiBzdHJpbmcpCi0gICAgOiBtX3R5
cGUoVHlwZTo6U3RyaW5nKQotICAgICwgbV9zdHJpbmcoc3RyaW5nKQotewotICAgIEFTU0VSVCgh
bV9zdHJpbmcuaXNOdWxsKCkpOwotfQotCi1JREJLZXlQYXRoOjpJREJLZXlQYXRoKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBhcnJheSkKLSAgICA6IG1fdHlwZShUeXBlOjpBcnJheSkKLSAgICAsIG1f
YXJyYXkoYXJyYXkpCi17Ci0jaWYgIUxPR19ESVNBQkxFRAotICAgIGZvciAoYXV0byYga2V5IDog
YXJyYXkpCi0gICAgICAgIEFTU0VSVCgha2V5LmlzTnVsbCgpKTsKLSNlbmRpZgotfQotCi1JREJL
ZXlQYXRoOjpJREJLZXlQYXRoKE9wdGlvbmFsPElEQktleVBhdGhWYXJpYW50PiYmIHZhcmlhbnQp
Ci17Ci0gICAgaWYgKCF2YXJpYW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoV1RGOjpo
b2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KCp2YXJpYW50KSkgewotICAgICAgICBtX3R5cGUgPSBU
eXBlOjpTdHJpbmc7Ci0gICAgICAgIG1fc3RyaW5nID0gV1RGTW92ZShXVEY6OmdldDxTdHJpbmc+
KCp2YXJpYW50KSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV90eXBlID0gVHlwZTo6QXJyYXk7
Ci0gICAgICAgIG1fYXJyYXkgPSBXVEZNb3ZlKFdURjo6Z2V0PFZlY3RvcjxTdHJpbmc+PigqdmFy
aWFudCkpOwotICAgIH0KLX0KLQotYm9vbCBpc0lEQktleVBhdGhWYWxpZChjb25zdCBJREJLZXlQ
YXRoVmFyaWFudCYga2V5UGF0aCkKK2Jvb2wgaXNJREJLZXlQYXRoVmFsaWQoY29uc3QgSURCS2V5
UGF0aCYga2V5UGF0aCkKIHsKICAgICBhdXRvIHZpc2l0b3IgPSBXVEY6Om1ha2VWaXNpdG9yKFtd
KGNvbnN0IFN0cmluZyYgc3RyaW5nKSB7CiAgICAgICAgIHJldHVybiBJREJJc1ZhbGlkS2V5UGF0
aChzdHJpbmcpOwpAQCAtMjM4LDczICsyMDYsMTkgQEAgYm9vbCBpc0lEQktleVBhdGhWYWxpZChj
b25zdCBJREJLZXlQYXRoVmFyaWFudCYga2V5UGF0aCkKICAgICByZXR1cm4gV1RGOjp2aXNpdCh2
aXNpdG9yLCBrZXlQYXRoKTsKIH0KIAotYm9vbCBJREJLZXlQYXRoOjpvcGVyYXRvcj09KGNvbnN0
IElEQktleVBhdGgmIG90aGVyKSBjb25zdAorSURCS2V5UGF0aCBJREJLZXlQYXRoSXNvbGF0ZWRD
b3B5KGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCiB7Ci0gICAgaWYgKG1fdHlwZSAhPSBvdGhl
ci5tX3R5cGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN3aXRjaCAobV90eXBlKSB7
Ci0gICAgY2FzZSBUeXBlOjpOdWxsOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIFR5
cGU6OlN0cmluZzoKLSAgICAgICAgcmV0dXJuIG1fc3RyaW5nID09IG90aGVyLm1fc3RyaW5nOwot
ICAgIGNhc2UgVHlwZTo6QXJyYXk6Ci0gICAgICAgIHJldHVybiBtX2FycmF5ID09IG90aGVyLm1f
YXJyYXk7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotSURCS2V5UGF0aCBJREJLZXlQYXRoOjppc29sYXRlZENvcHkoKSBjb25zdAotewot
ICAgIElEQktleVBhdGggcmVzdWx0OwotICAgIHJlc3VsdC5tX3R5cGUgPSBtX3R5cGU7Ci0gICAg
cmVzdWx0Lm1fc3RyaW5nID0gbV9zdHJpbmcuaXNvbGF0ZWRDb3B5KCk7Ci0gICAgcmVzdWx0Lm1f
YXJyYXkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2FycmF5LnNpemUoKSk7Ci0gICAgZm9yIChh
dXRvJiBrZXkgOiBtX2FycmF5KQotICAgICAgICByZXN1bHQubV9hcnJheS51bmNoZWNrZWRBcHBl
bmQoa2V5Lmlzb2xhdGVkQ29weSgpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIElE
QktleVBhdGg6OmVuY29kZShLZXllZEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5j
b2Rlci5lbmNvZGVFbnVtKCJ0eXBlIiwgbV90eXBlKTsKLSAgICBzd2l0Y2ggKG1fdHlwZSkgewot
ICAgIGNhc2UgVHlwZTo6TnVsbDoKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgVHlwZTo6U3Ry
aW5nOgotICAgICAgICBlbmNvZGVyLmVuY29kZVN0cmluZygic3RyaW5nIiwgbV9zdHJpbmcpOwot
ICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBUeXBlOjpBcnJheToKLSAgICAgICAgZW5jb2Rlci5l
bmNvZGVPYmplY3RzKCJhcnJheSIsIG1fYXJyYXkuYmVnaW4oKSwgbV9hcnJheS5lbmQoKSwgW10o
V2ViQ29yZTo6S2V5ZWRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykgewot
ICAgICAgICAgICAgZW5jb2Rlci5lbmNvZGVTdHJpbmcoInN0cmluZyIsIHN0cmluZyk7Ci0gICAg
ICAgIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfTsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLX0KLQotYm9vbCBJREJLZXlQYXRoOjpkZWNvZGUoS2V5ZWREZWNvZGVyJiBkZWNvZGVyLCBJ
REJLZXlQYXRoJiByZXN1bHQpCi17Ci0gICAgYm9vbCBzdWNjZWVkZWQgPSBkZWNvZGVyLmRlY29k
ZUVudW0oInR5cGUiLCByZXN1bHQubV90eXBlLCBbXShUeXBlIHZhbHVlKSB7Ci0gICAgICAgIHJl
dHVybiB2YWx1ZSA9PSBUeXBlOjpOdWxsIHx8IHZhbHVlID09IFR5cGU6OlN0cmluZyB8fCB2YWx1
ZSA9PSBUeXBlOjpBcnJheTsKKyAgICBhdXRvIHZpc2l0b3IgPSBXVEY6Om1ha2VWaXNpdG9yKFtd
KGNvbnN0IFN0cmluZyYgc3RyaW5nKSAtPiBJREJLZXlQYXRoIHsKKyAgICAgICAgcmV0dXJuIHN0
cmluZy5pc29sYXRlZENvcHkoKTsKKyAgICB9LCBbXShjb25zdCBWZWN0b3I8U3RyaW5nPiYgdmVj
dG9yKSAtPiBJREJLZXlQYXRoIHsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gdmVjdG9yQ29weTsK
KyAgICAgICAgdmVjdG9yQ29weS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHZlY3Rvci5zaXplKCkp
OworICAgICAgICBmb3IgKGF1dG8mIHN0cmluZyA6IHZlY3RvcikKKyAgICAgICAgICAgIHZlY3Rv
ckNvcHkudW5jaGVja2VkQXBwZW5kKHN0cmluZy5pc29sYXRlZENvcHkoKSk7CisgICAgICAgIHJl
dHVybiB2ZWN0b3JDb3B5OwogICAgIH0pOwotICAgIGlmICghc3VjY2VlZGVkKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBzd2l0Y2ggKHJlc3VsdC5tX3R5cGUpIHsKLSAgICBjYXNlIFR5
cGU6Ok51bGw6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgVHlwZTo6U3RyaW5nOgot
ICAgICAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVTdHJpbmcoInN0cmluZyIsIHJlc3VsdC5tX3N0
cmluZyk7Ci0gICAgY2FzZSBUeXBlOjpBcnJheToKLSAgICAgICAgcmVzdWx0Lm1fYXJyYXkuY2xl
YXIoKTsKLSAgICAgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlT2JqZWN0cygiYXJyYXkiLCByZXN1
bHQubV9hcnJheSwgW10oS2V5ZWREZWNvZGVyJiBkZWNvZGVyLCBTdHJpbmcmIHJlc3VsdCkgewot
ICAgICAgICAgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlU3RyaW5nKCJzdHJpbmciLCByZXN1bHQp
OwotICAgICAgICB9KTsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIGtleVBhdGgpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJLZXlQYXRoLmgKaW5kZXggMGY5YzVjYy4uYmJjZDA3OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguaApAQCAtMzMsMTEgKzMzLDggQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11c2luZyBJREJLZXlQYXRoVmFyaWFudCA9IFdURjo6
VmFyaWFudDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+PjsKLWJvb2wgaXNJREJLZXlQYXRoVmFsaWQo
Y29uc3QgSURCS2V5UGF0aFZhcmlhbnQmKTsKLQotY2xhc3MgS2V5ZWREZWNvZGVyOwotY2xhc3Mg
S2V5ZWRFbmNvZGVyOwordXNpbmcgSURCS2V5UGF0aCA9IFdURjo6VmFyaWFudDxTdHJpbmcsIFZl
Y3RvcjxTdHJpbmc+PjsKK2Jvb2wgaXNJREJLZXlQYXRoVmFsaWQoY29uc3QgSURCS2V5UGF0aCYp
OwogCiBlbnVtIGNsYXNzIElEQktleVBhdGhQYXJzZUVycm9yIHsKICAgICBOb25lLApAQCAtNDcs
OTUgKzQ0LDEyIEBAIGVudW0gY2xhc3MgSURCS2V5UGF0aFBhcnNlRXJyb3IgewogfTsKIAogdm9p
ZCBJREJQYXJzZUtleVBhdGgoY29uc3QgU3RyaW5nJiwgVmVjdG9yPFN0cmluZz4mLCBJREJLZXlQ
YXRoUGFyc2VFcnJvciYpOwotCi0vLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVwbGFj
ZSBJREJLZXlQYXRoIHdpdGggSURCS2V5UGF0aFZhcmlhbnQuCi1jbGFzcyBJREJLZXlQYXRoIHsK
LXB1YmxpYzoKLSAgICBJREJLZXlQYXRoKCkgeyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgSURCS2V5
UGF0aChjb25zdCBTdHJpbmcmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBJREJLZXlQYXRoKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBhcnJheSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgSURCS2V5UGF0aChP
cHRpb25hbDxJREJLZXlQYXRoVmFyaWFudD4mJik7Ci0KLSAgICBlbnVtIGNsYXNzIFR5cGUgeyBO
dWxsLCBTdHJpbmcsIEFycmF5IH07Ci0gICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlOyB9Ci0KLSAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYXJyYXkoKSBjb25zdAotICAgIHsK
LSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBUeXBlOjpBcnJheSk7Ci0gICAgICAgIHJldHVybiBt
X2FycmF5OwotICAgIH0KLQotICAgIGNvbnN0IFN0cmluZyYgc3RyaW5nKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChtX3R5cGUgPT0gVHlwZTo6U3RyaW5nKTsKLSAgICAgICAgcmV0dXJu
IG1fc3RyaW5nOwotICAgIH0KLQotICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlID09IFR5cGU6Ok51bGw7IH0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSURCS2V5UGF0
aCYgb3RoZXIpIGNvbnN0OwotCi0gICAgSURCS2V5UGF0aCBpc29sYXRlZENvcHkoKSBjb25zdDsK
LQotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2Rl
ciYsIElEQktleVBhdGgmKTsKLSAgICAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuY29kZShL
ZXllZEVuY29kZXImKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBkZWNv
ZGUoS2V5ZWREZWNvZGVyJiwgSURCS2V5UGF0aCYpOwotCi1wcml2YXRlOgotICAgIFR5cGUgbV90
eXBlIHsgVHlwZTo6TnVsbCB9OwotICAgIFN0cmluZyBtX3N0cmluZzsKLSAgICBWZWN0b3I8U3Ry
aW5nPiBtX2FycmF5OwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBJREJLZXlQ
YXRoOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyLmVuY29k
ZUVudW0obV90eXBlKTsKLQotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBUeXBlOjpO
dWxsOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIFR5cGU6OlN0cmluZzoKLSAgICAgICAgZW5j
b2RlciA8PCBtX3N0cmluZzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUeXBlOjpBcnJheToK
LSAgICAgICAgZW5jb2RlciA8PCBtX2FycmF5OwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IGJvb2wgSURCS2V5UGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIElE
QktleVBhdGgmIGtleVBhdGgpCitJREJLZXlQYXRoIElEQktleVBhdGhJc29sYXRlZENvcHkoY29u
c3QgSURCS2V5UGF0aCYpOworaW5saW5lIE9wdGlvbmFsPElEQktleVBhdGg+IElEQktleVBhdGhJ
c29sYXRlZENvcHkoY29uc3QgT3B0aW9uYWw8SURCS2V5UGF0aD4mIHZhcmlhbnQpCiB7Ci0gICAg
VHlwZSB0eXBlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKHR5cGUpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIFR5cGU6Ok51bGw6
Ci0gICAgICAgIGtleVBhdGggPSBJREJLZXlQYXRoKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
Ci0gICAgY2FzZSBUeXBlOjpTdHJpbmc6IHsKLSAgICAgICAgU3RyaW5nIHN0cmluZzsKLSAgICAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdHJpbmcpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgICAgIGtleVBhdGggPSBJREJLZXlQYXRoKHN0cmluZyk7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLSAgICBjYXNlIFR5cGU6OkFycmF5OiB7Ci0gICAgICAgIFZlY3RvcjxT
dHJpbmc+IGFycmF5OwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGFycmF5KSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBrZXlQYXRoID0gSURCS2V5UGF0aChhcnJh
eSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgaWYgKCF2YXJpYW50KQorICAgICAgICByZXR1cm4geyB9
OworICAgIHJldHVybiBJREJLZXlQYXRoSXNvbGF0ZWRDb3B5KHZhcmlhbnQudmFsdWUoKSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAppbmRleCA3OWVlM2Q3Li5lZmZhMGU2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9y
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmUuY3BwCkBAIC0xMjAsNyArMTIwLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSURCT2JqZWN0U3Rv
cmU6OnNldE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQogICAgIHJldHVybiB7IH07CiB9CiAKLWNv
bnN0IElEQktleVBhdGgmIElEQk9iamVjdFN0b3JlOjprZXlQYXRoKCkgY29uc3QKK2NvbnN0IE9w
dGlvbmFsPElEQktleVBhdGg+JiBJREJPYmplY3RTdG9yZTo6a2V5UGF0aCgpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLm9y
aWdpblRocmVhZElEKCkpOwogICAgIHJldHVybiBtX2luZm8ua2V5UGF0aCgpOwpAQCAtMzExLDIw
ICszMTEsMjAgQEAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJPYmplY3RTdG9yZTo6
cHV0T3JBZGQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZQogICAgIGlmIChrZXkgJiYgIWtleS0+
aXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSURCRGF0YWJhc2VFeGNlcHRp
b246OkRhdGFFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gc3RvcmUgcmVjb3JkIGluIGFu
IElEQk9iamVjdFN0b3JlOiBUaGUgcGFyYW1ldGVyIGlzIG5vdCBhIHZhbGlkIGtleS4iKSB9Owog
Ci0gICAgYm9vbCB1c2VzSW5saW5lS2V5cyA9ICFtX2luZm8ua2V5UGF0aCgpLmlzTnVsbCgpOwor
ICAgIGJvb2wgdXNlc0lubGluZUtleXMgPSAhIW1faW5mby5rZXlQYXRoKCk7CiAgICAgYm9vbCB1
c2VzS2V5R2VuZXJhdG9yID0gYXV0b0luY3JlbWVudCgpOwogICAgIGlmICh1c2VzSW5saW5lS2V5
cyAmJiBpbmxpbmVLZXlDaGVjayA9PSBJbmxpbmVLZXlDaGVjazo6UGVyZm9ybSkgewogICAgICAg
ICBpZiAoa2V5KQogICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpEYXRhRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIHN0b3JlIHJlY29yZCBp
biBhbiBJREJPYmplY3RTdG9yZTogVGhlIG9iamVjdCBzdG9yZSB1c2VzIGluLWxpbmUga2V5cyBh
bmQgdGhlIGtleSBwYXJhbWV0ZXIgd2FzIHByb3ZpZGVkLiIpIH07CiAKLSAgICAgICAgUmVmUHRy
PElEQktleT4ga2V5UGF0aEtleSA9IG1heWJlQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5k
S2V5UGF0aChzdGF0ZSwgdmFsdWUsIG1faW5mby5rZXlQYXRoKCkpOworICAgICAgICBSZWZQdHI8
SURCS2V5PiBrZXlQYXRoS2V5ID0gbWF5YmVDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRL
ZXlQYXRoKHN0YXRlLCB2YWx1ZSwgbV9pbmZvLmtleVBhdGgoKS52YWx1ZSgpKTsKICAgICAgICAg
aWYgKGtleVBhdGhLZXkgJiYgIWtleVBhdGhLZXktPmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yLCBBU0NJSUxp
dGVyYWwoIkZhaWxlZCB0byBzdG9yZSByZWNvcmQgaW4gYW4gSURCT2JqZWN0U3RvcmU6IEV2YWx1
YXRpbmcgdGhlIG9iamVjdCBzdG9yZSdzIGtleSBwYXRoIHlpZWxkZWQgYSB2YWx1ZSB0aGF0IGlz
IG5vdCBhIHZhbGlkIGtleS4iKSB9OwogCiAgICAgICAgIGlmICgha2V5UGF0aEtleSkgewogICAg
ICAgICAgICAgaWYgKCF1c2VzS2V5R2VuZXJhdG9yKQogICAgICAgICAgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yLCBBU0NJSUxpdGVyYWwo
IkZhaWxlZCB0byBzdG9yZSByZWNvcmQgaW4gYW4gSURCT2JqZWN0U3RvcmU6IEV2YWx1YXRpbmcg
dGhlIG9iamVjdCBzdG9yZSdzIGtleSBwYXRoIGRpZCBub3QgeWllbGQgYSB2YWx1ZS4iKSB9Owot
ICAgICAgICAgICAgaWYgKCFjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoc3RhdGUsIHZh
bHVlLCBtX2luZm8ua2V5UGF0aCgpKSkKKyAgICAgICAgICAgIGlmICghY2FuSW5qZWN0SURCS2V5
SW50b1NjcmlwdFZhbHVlKHN0YXRlLCB2YWx1ZSwgbV9pbmZvLmtleVBhdGgoKS52YWx1ZSgpKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSURCRGF0YWJhc2VFeGNlcHRpb246
OkRhdGFFcnJvciB9OwogICAgICAgICB9CiAKQEAgLTM5OSw3ICszOTksNyBAQCBFeGNlcHRpb25P
cjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVjdFN0b3JlOjpjbGVhcihFeGVjU3RhdGUmIGV4ZWNT
dGF0ZSkKICAgICByZXR1cm4gbV90cmFuc2FjdGlvbi0+cmVxdWVzdENsZWFyT2JqZWN0U3RvcmUo
ZXhlY1N0YXRlLCAqdGhpcyk7CiB9CiAKLUV4Y2VwdGlvbk9yPFJlZjxJREJJbmRleD4+IElEQk9i
amVjdFN0b3JlOjpjcmVhdGVJbmRleChFeGVjU3RhdGUmLCBjb25zdCBTdHJpbmcmIG5hbWUsIElE
QktleVBhdGhWYXJpYW50JiYga2V5UGF0aCwgY29uc3QgSW5kZXhQYXJhbWV0ZXJzJiBwYXJhbWV0
ZXJzKQorRXhjZXB0aW9uT3I8UmVmPElEQkluZGV4Pj4gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZUlu
ZGV4KEV4ZWNTdGF0ZSYsIGNvbnN0IFN0cmluZyYgbmFtZSwgSURCS2V5UGF0aCYmIGtleVBhdGgs
IGNvbnN0IEluZGV4UGFyYW1ldGVycyYgcGFyYW1ldGVycykKIHsKICAgICBMT0coSW5kZXhlZERC
LCAiSURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4ICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpKTsK
ICAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCku
b3JpZ2luVGhyZWFkSUQoKSk7CkBAIC00MjYsNyArNDI2LDcgQEAgRXhjZXB0aW9uT3I8UmVmPElE
QkluZGV4Pj4gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KEV4ZWNTdGF0ZSYsIGNvbnN0IFN0
cmluZyYKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJ
bnZhbGlkQWNjZXNzRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NyZWF0
ZUluZGV4JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUga2V5UGF0aCBhcmd1bWVudCB3YXMgYW4g
YXJyYXkgYW5kIHRoZSBtdWx0aUVudHJ5IG9wdGlvbiBpcyB0cnVlLiIpIH07CiAKICAgICAvLyBJ
bnN0YWxsIHRoZSBuZXcgSW5kZXggaW50byB0aGUgT2JqZWN0U3RvcmUncyBpbmZvLgotICAgIElE
QkluZGV4SW5mbyBpbmZvID0gbV9pbmZvLmNyZWF0ZU5ld0luZGV4KG5hbWUsIE9wdGlvbmFsPElE
QktleVBhdGhWYXJpYW50PihXVEZNb3ZlKGtleVBhdGgpKSwgcGFyYW1ldGVycy51bmlxdWUsIHBh
cmFtZXRlcnMubXVsdGlFbnRyeSk7CisgICAgSURCSW5kZXhJbmZvIGluZm8gPSBtX2luZm8uY3Jl
YXRlTmV3SW5kZXgobmFtZSwgV1RGTW92ZShrZXlQYXRoKSwgcGFyYW1ldGVycy51bmlxdWUsIHBh
cmFtZXRlcnMubXVsdGlFbnRyeSk7CiAgICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5kaWRD
cmVhdGVJbmRleEluZm8oaW5mbyk7CiAKICAgICAvLyBDcmVhdGUgdGhlIGFjdHVhbCBJREJPYmpl
Y3RTdG9yZSBmcm9tIHRoZSB0cmFuc2FjdGlvbiwgd2hpY2ggYWxzbyBzY2hlZHVsZXMgdGhlIG9w
ZXJhdGlvbiBzZXJ2ZXIgc2lkZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZS5oCmluZGV4IDdiMjFjY2MuLmY3ODdmYWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaApAQCAtNjIs
NyArNjIsNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdDsKICAg
ICBFeGNlcHRpb25Pcjx2b2lkPiBzZXROYW1lKGNvbnN0IFN0cmluZyYpOwotICAgIGNvbnN0IElE
QktleVBhdGgmIGtleVBhdGgoKSBjb25zdDsKKyAgICBjb25zdCBPcHRpb25hbDxJREJLZXlQYXRo
PiYga2V5UGF0aCgpIGNvbnN0OwogICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBpbmRleE5hbWVz
KCkgY29uc3Q7CiAgICAgSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKCk7CiAgICAgYm9vbCBh
dXRvSW5jcmVtZW50KCkgY29uc3Q7CkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKICAgICBFeGNl
cHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IGRlbGV0ZUZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRlJiwg
SURCS2V5UmFuZ2UqKTsKICAgICBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IGRlbGV0ZUZ1
bmN0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIGtleSk7CiAgICAgRXhjZXB0aW9u
T3I8UmVmPElEQlJlcXVlc3Q+PiBjbGVhcihKU0M6OkV4ZWNTdGF0ZSYpOwotICAgIEV4Y2VwdGlv
bk9yPFJlZjxJREJJbmRleD4+IGNyZWF0ZUluZGV4KEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBJREJLZXlQYXRoVmFyaWFudCYmLCBjb25zdCBJbmRleFBhcmFtZXRlcnMmKTsK
KyAgICBFeGNlcHRpb25PcjxSZWY8SURCSW5kZXg+PiBjcmVhdGVJbmRleChKU0M6OkV4ZWNTdGF0
ZSYsIGNvbnN0IFN0cmluZyYgbmFtZSwgSURCS2V5UGF0aCYmLCBjb25zdCBJbmRleFBhcmFtZXRl
cnMmKTsKICAgICBFeGNlcHRpb25PcjxSZWY8SURCSW5kZXg+PiBpbmRleChjb25zdCBTdHJpbmcm
IG5hbWUpOwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IGRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYg
bmFtZSk7CiAgICAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBjb3VudChKU0M6OkV4ZWNT
dGF0ZSYsIElEQktleVJhbmdlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbi5jcHAKaW5kZXggY2UxNTlh
YS4uNTgwZTM1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL0lEQlNlcmlhbGl6YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9JREJTZXJpYWxpemF0aW9uLmNwcApAQCAtMzMsMjAgKzMzLDY1IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gc2VyaWFsaXpl
SURCS2V5UGF0aChjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQorZW51bSBjbGFzcyBLZXlQYXRo
VHlwZSB7IE51bGwsIFN0cmluZywgQXJyYXkgfTsKKworUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gc2Vy
aWFsaXplSURCS2V5UGF0aChjb25zdCBPcHRpb25hbDxJREJLZXlQYXRoPiYga2V5UGF0aCkKIHsK
ICAgICBhdXRvIGVuY29kZXIgPSBLZXllZEVuY29kZXI6OmVuY29kZXIoKTsKLSAgICBrZXlQYXRo
LmVuY29kZSgqZW5jb2Rlcik7CisKKyAgICBpZiAoa2V5UGF0aCkgeworICAgICAgICBhdXRvIHZp
c2l0b3IgPSBXVEY6Om1ha2VWaXNpdG9yKFsmXShjb25zdCBTdHJpbmcmIHN0cmluZykgeworICAg
ICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlRW51bSgidHlwZSIsIEtleVBhdGhUeXBlOjpTdHJpbmcp
OworICAgICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlU3RyaW5nKCJzdHJpbmciLCBzdHJpbmcpOwor
ICAgICAgICB9LCBbJl0oY29uc3QgVmVjdG9yPFN0cmluZz4mIHZlY3RvcikgeworICAgICAgICAg
ICAgZW5jb2Rlci0+ZW5jb2RlRW51bSgidHlwZSIsIEtleVBhdGhUeXBlOjpBcnJheSk7CisgICAg
ICAgICAgICBlbmNvZGVyLT5lbmNvZGVPYmplY3RzKCJhcnJheSIsIHZlY3Rvci5iZWdpbigpLCB2
ZWN0b3IuZW5kKCksIFtdKFdlYkNvcmU6OktleWVkRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU3Ry
aW5nJiBzdHJpbmcpIHsKKyAgICAgICAgICAgICAgICBlbmNvZGVyLmVuY29kZVN0cmluZygic3Ry
aW5nIiwgc3RyaW5nKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICAgICAgV1RG
Ojp2aXNpdCh2aXNpdG9yLCBrZXlQYXRoLnZhbHVlKCkpOworICAgIH0gZWxzZQorICAgICAgICBl
bmNvZGVyLT5lbmNvZGVFbnVtKCJ0eXBlIiwgS2V5UGF0aFR5cGU6Ok51bGwpOworCiAgICAgcmV0
dXJuIGVuY29kZXItPmZpbmlzaEVuY29kaW5nKCk7CiB9CiAKLWJvb2wgZGVzZXJpYWxpemVJREJL
ZXlQYXRoKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBJREJLZXlQYXRoJiByZXN1
bHQpCitib29sIGRlc2VyaWFsaXplSURCS2V5UGF0aChjb25zdCB1aW50OF90KiBkYXRhLCBzaXpl
X3Qgc2l6ZSwgT3B0aW9uYWw8SURCS2V5UGF0aD4mIHJlc3VsdCkKIHsKICAgICBpZiAoIWRhdGEg
fHwgIXNpemUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGF1dG8gZGVjb2RlciA9IEtl
eWVkRGVjb2Rlcjo6ZGVjb2RlcihkYXRhLCBzaXplKTsKLSAgICByZXR1cm4gSURCS2V5UGF0aDo6
ZGVjb2RlKCpkZWNvZGVyLCByZXN1bHQpOworCisgICAgS2V5UGF0aFR5cGUgdHlwZTsKKyAgICBi
b29sIHN1Y2NlZWRlZCA9IGRlY29kZXItPmRlY29kZUVudW0oInR5cGUiLCB0eXBlLCBbXShLZXlQ
YXRoVHlwZSB2YWx1ZSkgeworICAgICAgICByZXR1cm4gdmFsdWUgPT0gS2V5UGF0aFR5cGU6Ok51
bGwgfHwgdmFsdWUgPT0gS2V5UGF0aFR5cGU6OlN0cmluZyB8fCB2YWx1ZSA9PSBLZXlQYXRoVHlw
ZTo6QXJyYXk7CisgICAgfSk7CisgICAgaWYgKCFzdWNjZWVkZWQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgS2V5UGF0aFR5cGU6Ok51bGw6
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS2V5UGF0aFR5cGU6OlN0cmluZzogeworICAgICAg
ICBTdHJpbmcgc3RyaW5nOworICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZVN0cmluZygic3Ry
aW5nIiwgc3RyaW5nKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmVzdWx0
ID0gSURCS2V5UGF0aChXVEZNb3ZlKHN0cmluZykpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgY2FzZSBLZXlQYXRoVHlwZTo6QXJyYXk6IHsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gdmVj
dG9yOworICAgICAgICBzdWNjZWVkZWQgPSBkZWNvZGVyLT5kZWNvZGVPYmplY3RzKCJhcnJheSIs
IHZlY3RvciwgW10oS2V5ZWREZWNvZGVyJiBkZWNvZGVyLCBTdHJpbmcmIHJlc3VsdCkgeworICAg
ICAgICAgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlU3RyaW5nKCJzdHJpbmciLCByZXN1bHQpOwor
ICAgICAgICB9KTsKKyAgICAgICAgaWYgKCFzdWNjZWVkZWQpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIHJlc3VsdCA9IElEQktleVBhdGgoV1RGTW92ZSh2ZWN0b3IpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gc2VyaWFsaXplSURCS2V5RGF0YShjb25zdCBJREJLZXlEYXRhJiBrZXkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURC
U2VyaWFsaXphdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L0lEQlNlcmlhbGl6YXRpb24uaAppbmRleCA4MGQyYzJiLi5jYzQ4NjJiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJpYWxp
emF0aW9uLmgKQEAgLTI4LDE1ICsyOCwxNSBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCiAKKyNpbmNsdWRlICJJREJLZXlQYXRoLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSURCS2V5RGF0YTsKLWNsYXNzIElEQktl
eVBhdGg7CiAKLVJlZlB0cjxTaGFyZWRCdWZmZXI+IHNlcmlhbGl6ZUlEQktleVBhdGgoY29uc3Qg
SURCS2V5UGF0aCYpOwotYm9vbCBkZXNlcmlhbGl6ZUlEQktleVBhdGgoY29uc3QgdWludDhfdCog
YnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSwgSURCS2V5UGF0aCYpOworUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gc2VyaWFsaXplSURCS2V5UGF0aChjb25zdCBPcHRpb25hbDxJREJLZXlQYXRoPiYpOwor
Ym9vbCBkZXNlcmlhbGl6ZUlEQktleVBhdGgoY29uc3QgdWludDhfdCogYnVmZmVyLCBzaXplX3Qg
YnVmZmVyU2l6ZSwgT3B0aW9uYWw8SURCS2V5UGF0aD4mKTsKIAogUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gc2VyaWFsaXplSURCS2V5RGF0YShjb25zdCBJREJLZXlEYXRhJik7CiBib29sIGRlc2VyaWFs
aXplSURCS2V5RGF0YShjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplLCBJ
REJLZXlEYXRhJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IGJkNzZl
ZjQuLjczZTFlMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwCkBAIC01OTks
NyArNTk5LDcgQEAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFj
a2luZ1N0b3JlOjpleHRyYWN0RXhpc3RpbmdEYXRhYmFzZUkKICAgICAgICAgICAgIFZlY3Rvcjxj
aGFyPiBrZXlQYXRoQnVmZmVyOwogICAgICAgICAgICAgc3FsLmdldENvbHVtbkJsb2JBc1ZlY3Rv
cigyLCBrZXlQYXRoQnVmZmVyKTsKIAotICAgICAgICAgICAgSURCS2V5UGF0aCBvYmplY3RTdG9y
ZUtleVBhdGg7CisgICAgICAgICAgICBPcHRpb25hbDxJREJLZXlQYXRoPiBvYmplY3RTdG9yZUtl
eVBhdGg7CiAgICAgICAgICAgICBpZiAoIWRlc2VyaWFsaXplSURCS2V5UGF0aChyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihrZXlQYXRoQnVmZmVyLmRhdGEoKSksIGtleVBhdGhCdWZm
ZXIuc2l6ZSgpLCBvYmplY3RTdG9yZUtleVBhdGgpKSB7CiAgICAgICAgICAgICAgICAgTE9HX0VS
Uk9SKCJVbmFibGUgdG8gZXh0cmFjdCBrZXkgcGF0aCBmcm9tIGRhdGFiYXNlIik7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC02MDcsNyArNjA3LDcgQEAgc3RkOjp1bmlxdWVf
cHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpleHRyYWN0RXhpc3Rp
bmdEYXRhYmFzZUkKIAogICAgICAgICAgICAgYm9vbCBhdXRvSW5jcmVtZW50ID0gc3FsLmdldENv
bHVtbkludCgzKTsKIAotICAgICAgICAgICAgZGF0YWJhc2VJbmZvLT5hZGRFeGlzdGluZ09iamVj
dFN0b3JlKHsgb2JqZWN0U3RvcmVJRCwgb2JqZWN0U3RvcmVOYW1lLCBvYmplY3RTdG9yZUtleVBh
dGgsIGF1dG9JbmNyZW1lbnQgfSk7CisgICAgICAgICAgICBkYXRhYmFzZUluZm8tPmFkZEV4aXN0
aW5nT2JqZWN0U3RvcmUoeyBvYmplY3RTdG9yZUlELCBvYmplY3RTdG9yZU5hbWUsIFdURk1vdmUo
b2JqZWN0U3RvcmVLZXlQYXRoKSwgYXV0b0luY3JlbWVudCB9KTsKIAogICAgICAgICAgICAgcmVz
dWx0ID0gc3FsLnN0ZXAoKTsKICAgICAgICAgfQpAQCAtNjMyLDExICs2MzIsMTUgQEAgc3RkOjp1
bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpleHRyYWN0
RXhpc3RpbmdEYXRhYmFzZUkKICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBrZXlQYXRoQnVmZmVy
OwogICAgICAgICAgICAgc3FsLmdldENvbHVtbkJsb2JBc1ZlY3RvcigzLCBrZXlQYXRoQnVmZmVy
KTsKIAotICAgICAgICAgICAgSURCS2V5UGF0aCBpbmRleEtleVBhdGg7CisgICAgICAgICAgICBP
cHRpb25hbDxJREJLZXlQYXRoPiBpbmRleEtleVBhdGg7CiAgICAgICAgICAgICBpZiAoIWRlc2Vy
aWFsaXplSURCS2V5UGF0aChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihrZXlQYXRo
QnVmZmVyLmRhdGEoKSksIGtleVBhdGhCdWZmZXIuc2l6ZSgpLCBpbmRleEtleVBhdGgpKSB7CiAg
ICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXh0cmFjdCBrZXkgcGF0aCBmcm9t
IGRhdGFiYXNlIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoIWluZGV4S2V5UGF0aCkgeworICAgICAgICAgICAgICAgIExP
R19FUlJPUigiVW5hYmxlIHRvIGV4dHJhY3Qga2V5IHBhdGggZnJvbSBkYXRhYmFzZSIpOworICAg
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBib29sIHVuaXF1ZSA9IHNxbC5nZXRDb2x1bW5JbnQoNCk7CiAgICAgICAgICAgICBib29sIG11
bHRpRW50cnkgPSBzcWwuZ2V0Q29sdW1uSW50KDUpOwpAQCAtNjQ3LDcgKzY1MSw3IEBAIHN0ZDo6
dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZXh0cmFj
dEV4aXN0aW5nRGF0YWJhc2VJCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIG9iamVjdFN0b3JlLT5hZGRFeGlzdGluZ0luZGV4KHsg
aW5kZXhJRCwgb2JqZWN0U3RvcmVJRCwgaW5kZXhOYW1lLCBpbmRleEtleVBhdGgsIHVuaXF1ZSwg
bXVsdGlFbnRyeSB9KTsKKyAgICAgICAgICAgIG9iamVjdFN0b3JlLT5hZGRFeGlzdGluZ0luZGV4
KHsgaW5kZXhJRCwgb2JqZWN0U3RvcmVJRCwgaW5kZXhOYW1lLCBXVEZNb3ZlKGluZGV4S2V5UGF0
aC52YWx1ZSgpKSwgdW5pcXVlLCBtdWx0aUVudHJ5IH0pOwogCiAgICAgICAgICAgICByZXN1bHQg
PSBzcWwuc3RlcCgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAppbmRleCAz
MDJmODM3Li44ZmVkY2Y2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKQEAgLTk1Myw3ICs5
NTMsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQodWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZQogICAgIC8vIElmIE9iamVjdFN0b3JlIGhh
cyBhIGtleSBwYXRoIGFuZCB0aGUga2V5IGlzIGF1dG9nZW5lcmF0ZWQsIHRoZW4gaW5qZWN0IHRo
ZSBrZXkgaW50byB0aGUgdmFsdWUKICAgICAvLyB1c2luZyBzdGVwcyB0byBhc3NpZ24gYSBrZXkg
dG8gYSB2YWx1ZSB1c2luZyBhIGtleSBwYXRoLgogICAgIFRocmVhZFNhZmVEYXRhQnVmZmVyIGlu
amVjdGVkUmVjb3JkVmFsdWU7Ci0gICAgaWYgKHVzZWRLZXlJc0dlbmVyYXRlZCAmJiAhb2JqZWN0
U3RvcmVJbmZvLT5rZXlQYXRoKCkuaXNOdWxsKCkpIHsKKyAgICBpZiAodXNlZEtleUlzR2VuZXJh
dGVkICYmIG9iamVjdFN0b3JlSW5mby0+a2V5UGF0aCgpKSB7CiAgICAgICAgIFZNJiB2bSA9IGRh
dGFiYXNlVGhyZWFkVk0oKTsKICAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTk2NCw3ICs5NjQs
NyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKLSAgICAgICAgaWYgKCFpbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoZGF0YWJhc2VU
aHJlYWRFeGVjU3RhdGUoKSwgdXNlZEtleSwgdmFsdWUsIG9iamVjdFN0b3JlSW5mby0+a2V5UGF0
aCgpKSkgeworICAgICAgICBpZiAoIWluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShkYXRhYmFz
ZVRocmVhZEV4ZWNTdGF0ZSgpLCB1c2VkS2V5LCB2YWx1ZSwgb2JqZWN0U3RvcmVJbmZvLT5rZXlQ
YXRoKCkudmFsdWUoKSkpIHsKICAgICAgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVh
dGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1
dE9yQWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVycm9yKElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpDb25zdHJhaW50RXJyb3IsIEFTQ0lJTGl0ZXJhbCgiVW5hYmxlIHRvIGluamVjdCByZWNvcmQg
a2V5IGludG8gcmVjb3JkIHZhbHVlIikpLCB1c2VkS2V5KSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NoYXJlZC9JREJEYXRhYmFzZUluZm8uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2hhcmVkL0lEQkRhdGFiYXNlSW5mby5jcHAKaW5kZXggNDRjMmI0Ni4uZjk4NTcxNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkRh
dGFiYXNlSW5mby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hh
cmVkL0lEQkRhdGFiYXNlSW5mby5jcHAKQEAgLTY2LDkgKzY2LDkgQEAgYm9vbCBJREJEYXRhYmFz
ZUluZm86Omhhc09iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLUlEQk9iamVjdFN0b3JlSW5mbyBJREJEYXRhYmFzZUluZm86OmNyZWF0
ZU5ld09iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5
UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50KQorSURCT2JqZWN0U3RvcmVJbmZvIElEQkRhdGFiYXNl
SW5mbzo6Y3JlYXRlTmV3T2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBPcHRpb25hbDxJ
REJLZXlQYXRoPiYmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCkKIHsKLSAgICBJREJPYmpl
Y3RTdG9yZUluZm8gaW5mbygrK21fbWF4T2JqZWN0U3RvcmVJRCwgbmFtZSwga2V5UGF0aCwgYXV0
b0luY3JlbWVudCk7CisgICAgSURCT2JqZWN0U3RvcmVJbmZvIGluZm8oKyttX21heE9iamVjdFN0
b3JlSUQsIG5hbWUsIFdURk1vdmUoa2V5UGF0aCksIGF1dG9JbmNyZW1lbnQpOwogICAgIG1fb2Jq
ZWN0U3RvcmVNYXAuc2V0KGluZm8uaWRlbnRpZmllcigpLCBpbmZvKTsKICAgICByZXR1cm4gaW5m
bzsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJl
ZC9JREJEYXRhYmFzZUluZm8uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3No
YXJlZC9JREJEYXRhYmFzZUluZm8uaAppbmRleCA4ZTNkNDgxLi5lMGI1MTQ0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRGF0YWJhc2VJbmZv
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkRhdGFi
YXNlSW5mby5oCkBAIC0zMyw4ICszMyw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xh
c3MgSURCS2V5UGF0aDsKLQogY2xhc3MgSURCRGF0YWJhc2VJbmZvIHsKIHB1YmxpYzoKICAgICBJ
REJEYXRhYmFzZUluZm8oY29uc3QgU3RyaW5nJiBuYW1lLCB1aW50NjRfdCB2ZXJzaW9uKTsKQEAg
LTUwLDcgKzQ4LDcgQEAgcHVibGljOgogICAgIHVpbnQ2NF90IHZlcnNpb24oKSBjb25zdCB7IHJl
dHVybiBtX3ZlcnNpb247IH0KIAogICAgIGJvb2wgaGFzT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5n
JiBuYW1lKSBjb25zdDsKLSAgICBJREJPYmplY3RTdG9yZUluZm8gY3JlYXRlTmV3T2JqZWN0U3Rv
cmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVt
ZW50KTsKKyAgICBJREJPYmplY3RTdG9yZUluZm8gY3JlYXRlTmV3T2JqZWN0U3RvcmUoY29uc3Qg
U3RyaW5nJiBuYW1lLCBPcHRpb25hbDxJREJLZXlQYXRoPiYmLCBib29sIGF1dG9JbmNyZW1lbnQp
OwogICAgIHZvaWQgYWRkRXhpc3RpbmdPYmplY3RTdG9yZShjb25zdCBJREJPYmplY3RTdG9yZUlu
Zm8mKTsKICAgICBJREJPYmplY3RTdG9yZUluZm8qIGluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3Jl
KHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAgICAgSURCT2JqZWN0U3RvcmVJbmZv
KiBpbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFt
ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQv
SURCSW5kZXhJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJl
ZC9JREJJbmRleEluZm8uY3BwCmluZGV4IGNiZjg1ZjYuLmVhYjdmZjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJJbmRleEluZm8uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJJbmRleEluZm8u
Y3BwCkBAIC0zNCwxMSArMzQsMTEgQEAgSURCSW5kZXhJbmZvOjpJREJJbmRleEluZm8oKQogewog
fQogCi1JREJJbmRleEluZm86OklEQkluZGV4SW5mbyh1aW50NjRfdCBpZGVudGlmaWVyLCB1aW50
NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURC
S2V5UGF0aCYga2V5UGF0aCwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSkKK0lEQkluZGV4
SW5mbzo6SURCSW5kZXhJbmZvKHVpbnQ2NF90IGlkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0
b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuYW1lLCBJREJLZXlQYXRoJiYga2V5UGF0aCwg
Ym9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSkKICAgICA6IG1faWRlbnRpZmllcihpZGVudGlm
aWVyKQogICAgICwgbV9vYmplY3RTdG9yZUlkZW50aWZpZXIob2JqZWN0U3RvcmVJZGVudGlmaWVy
KQogICAgICwgbV9uYW1lKG5hbWUpCi0gICAgLCBtX2tleVBhdGgoa2V5UGF0aCkKKyAgICAsIG1f
a2V5UGF0aChXVEZNb3ZlKGtleVBhdGgpKQogICAgICwgbV91bmlxdWUodW5pcXVlKQogICAgICwg
bV9tdWx0aUVudHJ5KG11bHRpRW50cnkpCiB7CkBAIC00Niw3ICs0Niw3IEBAIElEQkluZGV4SW5m
bzo6SURCSW5kZXhJbmZvKHVpbnQ2NF90IGlkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3Jl
SWRlbnRpZmllciwKIAogSURCSW5kZXhJbmZvIElEQkluZGV4SW5mbzo6aXNvbGF0ZWRDb3B5KCkg
Y29uc3QKIHsKLSAgICByZXR1cm4geyBtX2lkZW50aWZpZXIsIG1fb2JqZWN0U3RvcmVJZGVudGlm
aWVyLCBtX25hbWUuaXNvbGF0ZWRDb3B5KCksIG1fa2V5UGF0aC5pc29sYXRlZENvcHkoKSwgbV91
bmlxdWUsIG1fbXVsdGlFbnRyeSB9OworICAgIHJldHVybiB7IG1faWRlbnRpZmllciwgbV9vYmpl
Y3RTdG9yZUlkZW50aWZpZXIsIG1fbmFtZS5pc29sYXRlZENvcHkoKSwgSURCS2V5UGF0aElzb2xh
dGVkQ29weShtX2tleVBhdGgpLCBtX3VuaXF1ZSwgbV9tdWx0aUVudHJ5IH07CiB9CiAKICNpZiAh
TE9HX0RJU0FCTEVECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zaGFyZWQvSURCSW5kZXhJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zaGFyZWQvSURCSW5kZXhJbmZvLmgKaW5kZXggN2YwOWQ5Mi4uODE1Nzc1OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkluZGV4SW5mby5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJJbmRleElu
Zm8uaApAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJREJJbmRl
eEluZm8gewogcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIElEQkluZGV4SW5mbygpOwotICAg
IElEQkluZGV4SW5mbyh1aW50NjRfdCBpZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlk
ZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgdW5p
cXVlLCBib29sIG11bHRpRW50cnkpOworICAgIElEQkluZGV4SW5mbyh1aW50NjRfdCBpZGVudGlm
aWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmFtZSwg
SURCS2V5UGF0aCYmLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5KTsKIAogICAgIElEQklu
ZGV4SW5mbyBpc29sYXRlZENvcHkoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0b3JlSW5mby5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCT2JqZWN0U3RvcmVJbmZvLmNw
cAppbmRleCAzZjFjODVlLi5lOTZkZTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCT2JqZWN0U3RvcmVJbmZvLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCT2JqZWN0U3RvcmVJbmZvLmNwcApA
QCAtMzUsMTcgKzM1LDE3IEBAIElEQk9iamVjdFN0b3JlSW5mbzo6SURCT2JqZWN0U3RvcmVJbmZv
KCkKIHsKIH0KIAotSURCT2JqZWN0U3RvcmVJbmZvOjpJREJPYmplY3RTdG9yZUluZm8odWludDY0
X3QgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQ
YXRoLCBib29sIGF1dG9JbmNyZW1lbnQpCitJREJPYmplY3RTdG9yZUluZm86OklEQk9iamVjdFN0
b3JlSW5mbyh1aW50NjRfdCBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5hbWUsIE9wdGlvbmFs
PElEQktleVBhdGg+JiYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50KQogICAgIDogbV9pZGVu
dGlmaWVyKGlkZW50aWZpZXIpCiAgICAgLCBtX25hbWUobmFtZSkKLSAgICAsIG1fa2V5UGF0aChr
ZXlQYXRoKQorICAgICwgbV9rZXlQYXRoKFdURk1vdmUoa2V5UGF0aCkpCiAgICAgLCBtX2F1dG9J
bmNyZW1lbnQoYXV0b0luY3JlbWVudCkKIHsKIH0KIAotSURCSW5kZXhJbmZvIElEQk9iamVjdFN0
b3JlSW5mbzo6Y3JlYXRlTmV3SW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQ
YXRoJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5KQorSURCSW5kZXhJbmZv
IElEQk9iamVjdFN0b3JlSW5mbzo6Y3JlYXRlTmV3SW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBJ
REJLZXlQYXRoJiYga2V5UGF0aCwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSkKIHsKLSAg
ICBJREJJbmRleEluZm8gaW5mbygrK21fbWF4SW5kZXhJRCwgbV9pZGVudGlmaWVyLCBuYW1lLCBr
ZXlQYXRoLCB1bmlxdWUsIG11bHRpRW50cnkpOworICAgIElEQkluZGV4SW5mbyBpbmZvKCsrbV9t
YXhJbmRleElELCBtX2lkZW50aWZpZXIsIG5hbWUsIFdURk1vdmUoa2V5UGF0aCksIHVuaXF1ZSwg
bXVsdGlFbnRyeSk7CiAgICAgbV9pbmRleE1hcC5zZXQoaW5mby5pZGVudGlmaWVyKCksIGluZm8p
OwogICAgIHJldHVybiBpbmZvOwogfQpAQCAtOTYsNyArOTYsNyBAQCBJREJJbmRleEluZm8qIElE
Qk9iamVjdFN0b3JlSW5mbzo6aW5mb0ZvckV4aXN0aW5nSW5kZXgodWludDY0X3QgaWRlbnRpZmll
cikKIAogSURCT2JqZWN0U3RvcmVJbmZvIElEQk9iamVjdFN0b3JlSW5mbzo6aXNvbGF0ZWRDb3B5
KCkgY29uc3QKIHsKLSAgICBJREJPYmplY3RTdG9yZUluZm8gcmVzdWx0ID0geyBtX2lkZW50aWZp
ZXIsIG1fbmFtZS5pc29sYXRlZENvcHkoKSwgbV9rZXlQYXRoLmlzb2xhdGVkQ29weSgpLCBtX2F1
dG9JbmNyZW1lbnQgfTsKKyAgICBJREJPYmplY3RTdG9yZUluZm8gcmVzdWx0ID0geyBtX2lkZW50
aWZpZXIsIG1fbmFtZS5pc29sYXRlZENvcHkoKSwgSURCS2V5UGF0aElzb2xhdGVkQ29weShtX2tl
eVBhdGgpLCBtX2F1dG9JbmNyZW1lbnQgfTsKIAogICAgIGZvciAoYXV0byYgaXRlcmF0b3IgOiBt
X2luZGV4TWFwKSB7CiAgICAgICAgIHJlc3VsdC5tX2luZGV4TWFwLnNldChpdGVyYXRvci5rZXks
IGl0ZXJhdG9yLnZhbHVlLmlzb2xhdGVkQ29weSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJPYmplY3RTdG9yZUluZm8uaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJPYmplY3RTdG9yZUluZm8uaApp
bmRleCBkZGVhMWVhLi41MDc1YTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zaGFyZWQvSURCT2JqZWN0U3RvcmVJbmZvLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0b3JlSW5mby5oCkBAIC0zNSwx
NiArMzUsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBJREJLZXlQYXRoOwot
CiBjbGFzcyBJREJPYmplY3RTdG9yZUluZm8gewogcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JU
IElEQk9iamVjdFN0b3JlSW5mbygpOwotICAgIElEQk9iamVjdFN0b3JlSW5mbyh1aW50NjRfdCBp
ZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGF1
dG9JbmNyZW1lbnQpOworICAgIElEQk9iamVjdFN0b3JlSW5mbyh1aW50NjRfdCBpZGVudGlmaWVy
LCBjb25zdCBTdHJpbmcmIG5hbWUsIE9wdGlvbmFsPElEQktleVBhdGg+JiYsIGJvb2wgYXV0b0lu
Y3JlbWVudCk7CiAKICAgICB1aW50NjRfdCBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9p
ZGVudGlmaWVyOyB9CiAgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9u
YW1lOyB9Ci0gICAgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
a2V5UGF0aDsgfQorICAgIGNvbnN0IE9wdGlvbmFsPElEQktleVBhdGg+JiBrZXlQYXRoKCkgY29u
c3QgeyByZXR1cm4gbV9rZXlQYXRoOyB9CiAgICAgYm9vbCBhdXRvSW5jcmVtZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9hdXRvSW5jcmVtZW50OyB9CiAgICAgdWludDY0X3QgbWF4SW5kZXhJRCgpIGNv
bnN0IHsgcmV0dXJuIG1fbWF4SW5kZXhJRDsgfQogCkBAIC01Miw3ICs1MCw3IEBAIHB1YmxpYzoK
IAogICAgIElEQk9iamVjdFN0b3JlSW5mbyBpc29sYXRlZENvcHkoKSBjb25zdDsKIAotICAgIElE
QkluZGV4SW5mbyBjcmVhdGVOZXdJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktl
eVBhdGgmLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5KTsKKyAgICBJREJJbmRleEluZm8g
Y3JlYXRlTmV3SW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJLZXlQYXRoJiYsIGJvb2wgdW5p
cXVlLCBib29sIG11bHRpRW50cnkpOwogICAgIHZvaWQgYWRkRXhpc3RpbmdJbmRleChjb25zdCBJ
REJJbmRleEluZm8mKTsKICAgICBib29sIGhhc0luZGV4KGNvbnN0IFN0cmluZyYgbmFtZSkgY29u
c3Q7CiAgICAgYm9vbCBoYXNJbmRleCh1aW50NjRfdCBpbmRleElkZW50aWZpZXIpIGNvbnN0OwpA
QCAtNzUsNyArNzMsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHVpbnQ2NF90IG1faWRlbnRp
ZmllciB7IDAgfTsKICAgICBTdHJpbmcgbV9uYW1lOwotICAgIElEQktleVBhdGggbV9rZXlQYXRo
OworICAgIE9wdGlvbmFsPElEQktleVBhdGg+IG1fa2V5UGF0aDsKICAgICBib29sIG1fYXV0b0lu
Y3JlbWVudCB7IGZhbHNlIH07CiAgICAgdWludDY0X3QgbV9tYXhJbmRleElEIHsgMCB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVz
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3Bw
CmluZGV4IDU3MWRiYzEuLmQ2N2M0NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCkBAIC0yNDIsMTEgKzI0MiwxMSBAQCBib29s
IGluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0IElEQktl
eURhdGEmIGtleURhdGEsIEpTVgogewogICAgIExPRyhJbmRleGVkREIsICJpbmplY3RJREJLZXlJ
bnRvU2NyaXB0VmFsdWUiKTsKIAotICAgIEFTU0VSVChrZXlQYXRoLnR5cGUoKSA9PSBJREJLZXlQ
YXRoOjpUeXBlOjpTdHJpbmcpOworICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFN0
cmluZz4oa2V5UGF0aCkpOwogCiAgICAgVmVjdG9yPFN0cmluZz4ga2V5UGF0aEVsZW1lbnRzOwog
ICAgIElEQktleVBhdGhQYXJzZUVycm9yIGVycm9yOwotICAgIElEQlBhcnNlS2V5UGF0aChrZXlQ
YXRoLnN0cmluZygpLCBrZXlQYXRoRWxlbWVudHMsIGVycm9yKTsKKyAgICBJREJQYXJzZUtleVBh
dGgoV1RGOjpnZXQ8U3RyaW5nPihrZXlQYXRoKSwga2V5UGF0aEVsZW1lbnRzLCBlcnJvcik7CiAg
ICAgQVNTRVJUKGVycm9yID09IElEQktleVBhdGhQYXJzZUVycm9yOjpOb25lKTsKIAogICAgIGlm
IChrZXlQYXRoRWxlbWVudHMuaXNFbXB0eSgpKQpAQCAtMjY5LDEwICsyNjksOCBAQCBib29sIGlu
amVjdElEQktleUludG9TY3JpcHRWYWx1ZShFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0IElEQktleURh
dGEmIGtleURhdGEsIEpTVgogCiBSZWZQdHI8SURCS2V5PiBtYXliZUNyZWF0ZUlEQktleUZyb21T
Y3JpcHRWYWx1ZUFuZEtleVBhdGgoRXhlY1N0YXRlJiBleGVjLCBjb25zdCBKU1ZhbHVlJiB2YWx1
ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKIHsKLSAgICBBU1NFUlQoIWtleVBhdGguaXNO
dWxsKCkpOwotCi0gICAgaWYgKGtleVBhdGgudHlwZSgpID09IElEQktleVBhdGg6OlR5cGU6OkFy
cmF5KSB7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhcnJheSA9IGtleVBhdGguYXJy
YXkoKTsKKyAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8U3RyaW5nPj4oa2V5
UGF0aCkpIHsKKyAgICAgICAgYXV0byYgYXJyYXkgPSBXVEY6OmdldDxWZWN0b3I8U3RyaW5nPj4o
a2V5UGF0aCk7CiAgICAgICAgIFZlY3RvcjxSZWZQdHI8SURCS2V5Pj4gcmVzdWx0OwogICAgICAg
ICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShhcnJheS5zaXplKCkpOwogICAgICAgICBm
b3IgKGF1dG8mIHN0cmluZyA6IGFycmF5KSB7CkBAIC0yODQsMTggKzI4MiwxNyBAQCBSZWZQdHI8
SURCS2V5PiBtYXliZUNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoRXhlY1N0
YXRlJiBleGVjLCBjb25zdAogICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVBcnJheShXVEZN
b3ZlKHJlc3VsdCkpOwogICAgIH0KIAotICAgIEFTU0VSVChrZXlQYXRoLnR5cGUoKSA9PSBJREJL
ZXlQYXRoOjpUeXBlOjpTdHJpbmcpOwotICAgIHJldHVybiBpbnRlcm5hbENyZWF0ZUlEQktleUZy
b21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoZXhlYywgdmFsdWUsIGtleVBhdGguc3RyaW5nKCkpOwor
ICAgIHJldHVybiBpbnRlcm5hbENyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgo
ZXhlYywgdmFsdWUsIFdURjo6Z2V0PFN0cmluZz4oa2V5UGF0aCkpOwogfQogCiBib29sIGNhbklu
amVjdElEQktleUludG9TY3JpcHRWYWx1ZShFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0IEpTVmFsdWUm
IHNjcmlwdFZhbHVlLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQogewogICAgIExPRyhTdG9y
YWdlQVBJLCAiY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlIik7CiAKLSAgICBBU1NFUlQo
a2V5UGF0aC50eXBlKCkgPT0gSURCS2V5UGF0aDo6VHlwZTo6U3RyaW5nKTsKKyAgICBBU1NFUlQo
V1RGOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KGtleVBhdGgpKTsKICAgICBWZWN0b3I8U3Ry
aW5nPiBrZXlQYXRoRWxlbWVudHM7CiAgICAgSURCS2V5UGF0aFBhcnNlRXJyb3IgZXJyb3I7Ci0g
ICAgSURCUGFyc2VLZXlQYXRoKGtleVBhdGguc3RyaW5nKCksIGtleVBhdGhFbGVtZW50cywgZXJy
b3IpOworICAgIElEQlBhcnNlS2V5UGF0aChXVEY6OmdldDxTdHJpbmc+KGtleVBhdGgpLCBrZXlQ
YXRoRWxlbWVudHMsIGVycm9yKTsKICAgICBBU1NFUlQoZXJyb3IgPT0gSURCS2V5UGF0aFBhcnNl
RXJyb3I6Ok5vbmUpOwogCiAgICAgaWYgKCFrZXlQYXRoRWxlbWVudHMuc2l6ZSgpKQpAQCAtMzM5
LDM1ICszMzYsMzAgQEAgSlNDOjpKU1ZhbHVlIGlkYktleURhdGFUb1NjcmlwdFZhbHVlKEpTQzo6
RXhlY1N0YXRlJiBleGVjLCBjb25zdCBJREJLZXlEYXRhJiBrZXkKIAogc3RhdGljIFZlY3RvcjxJ
REJLZXlEYXRhPiBjcmVhdGVLZXlQYXRoQXJyYXkoRXhlY1N0YXRlJiBleGVjLCBKU1ZhbHVlIHZh
bHVlLCBjb25zdCBJREJJbmRleEluZm8mIGluZm8pCiB7Ci0gICAgVmVjdG9yPElEQktleURhdGE+
IGtleXM7Ci0KLSAgICBzd2l0Y2ggKGluZm8ua2V5UGF0aCgpLnR5cGUoKSkgewotICAgIGNhc2Ug
SURCS2V5UGF0aDo6VHlwZTo6QXJyYXk6Ci0gICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBpbmZv
LmtleVBhdGgoKS5hcnJheSgpKSB7Ci0gICAgICAgICAgICBhdXRvIGtleSA9IGludGVybmFsQ3Jl
YXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChleGVjLCB2YWx1ZSwgZW50cnkpOwot
ICAgICAgICAgICAgaWYgKCFrZXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAg
ICAgICAgIGtleXMuYXBwZW5kKGtleS5nZXQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJREJLZXlQYXRoOjpUeXBlOjpTdHJpbmc6IHsKLSAgICAgICAgYXV0byBpZGJL
ZXkgPSBpbnRlcm5hbENyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoZXhlYywg
dmFsdWUsIGluZm8ua2V5UGF0aCgpLnN0cmluZygpKTsKKyAgICBhdXRvIHZpc2l0b3IgPSBXVEY6
Om1ha2VWaXNpdG9yKFsmXShjb25zdCBTdHJpbmcmIHN0cmluZykgLT4gVmVjdG9yPElEQktleURh
dGE+IHsKKyAgICAgICAgYXV0byBpZGJLZXkgPSBpbnRlcm5hbENyZWF0ZUlEQktleUZyb21TY3Jp
cHRWYWx1ZUFuZEtleVBhdGgoZXhlYywgdmFsdWUsIHN0cmluZyk7CiAgICAgICAgIGlmICghaWRi
S2V5KQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAorICAgICAgICBWZWN0b3I8SURCS2V5RGF0
YT4ga2V5czsKICAgICAgICAgaWYgKGluZm8ubXVsdGlFbnRyeSgpICYmIGlkYktleS0+dHlwZSgp
ID09IEluZGV4ZWREQjo6QXJyYXkpIHsKICAgICAgICAgICAgIGZvciAoYXV0byYga2V5IDogaWRi
S2V5LT5hcnJheSgpKQogICAgICAgICAgICAgICAgIGtleXMuYXBwZW5kKGtleS5nZXQoKSk7CiAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAga2V5cy5hcHBlbmQoaWRiS2V5LmdldCgpKTsKKyAg
ICAgICAgcmV0dXJuIGtleXM7CisgICAgfSwgWyZdKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB2ZWN0
b3IpIC0+IFZlY3RvcjxJREJLZXlEYXRhPiB7CisgICAgICAgIFZlY3RvcjxJREJLZXlEYXRhPiBr
ZXlzOworICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogdmVjdG9yKSB7CisgICAgICAgICAgICBh
dXRvIGtleSA9IGludGVybmFsQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChl
eGVjLCB2YWx1ZSwgZW50cnkpOworICAgICAgICAgICAgaWYgKCFrZXkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIGtleXMuYXBwZW5kKGtleS5nZXQoKSk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGtleXM7CisgICAgfSk7CiAKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGNhc2UgSURCS2V5UGF0aDo6VHlwZTo6TnVsbDoKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4ga2V5czsKKyAgICByZXR1
cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBpbmZvLmtleVBhdGgoKSk7CiB9CiAKIHZvaWQgZ2VuZXJh
dGVJbmRleEtleUZvclZhbHVlKEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgSURCSW5kZXhJbmZvJiBp
bmZvLCBKU1ZhbHVlIHZhbHVlLCBJbmRleEtleSYgb3V0S2V5KQpAQCAtMzgwLDIyICszNzIsMTcg
QEAgdm9pZCBnZW5lcmF0ZUluZGV4S2V5Rm9yVmFsdWUoRXhlY1N0YXRlJiBleGVjLCBjb25zdCBJ
REJJbmRleEluZm8mIGluZm8sIEpTVmFsdWUKICAgICBvdXRLZXkgPSBJbmRleEtleShXVEZNb3Zl
KGtleURhdGFzKSk7CiB9CiAKLUpTVmFsdWUgdG9KUyhFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBJREJLZXlQYXRoJiB2YWx1ZSkKK0pTVmFs
dWUgdG9KUyhFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBjb25zdCBPcHRpb25hbDxJREJLZXlQYXRoPiYga2V5UGF0aCkKIHsKLSAgICBzd2l0Y2ggKHZh
bHVlLnR5cGUoKSkgewotICAgIGNhc2UgSURCS2V5UGF0aDo6VHlwZTo6TnVsbDoKKyAgICBpZiAo
IWtleVBhdGgpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKLSAgICBjYXNlIElEQktleVBhdGg6
OlR5cGU6OlN0cmluZzoKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwg
dmFsdWUuc3RyaW5nKCkpOwotICAgIGNhc2UgSURCS2V5UGF0aDo6VHlwZTo6QXJyYXk6Ci0gICAg
ICAgIGF1dG8ga2V5UGF0aHMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKLSAgICAgICAgZm9y
IChhdXRvJiBwYXRoIDogdmFsdWUuYXJyYXkoKSkKLSAgICAgICAgICAgIGtleVBhdGhzLT5hcHBl
bmQocGF0aCk7Ci0gICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwga2V5
UGF0aHMpOwotICAgIH0KIAotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBq
c051bGwoKTsKKyAgICBhdXRvIHZpc2l0b3IgPSBXVEY6Om1ha2VWaXNpdG9yKFsmXShjb25zdCBT
dHJpbmcmIHN0cmluZykgLT4gSlNWYWx1ZSB7CisgICAgICAgIHJldHVybiB0b0pTPElETERPTVN0
cmluZz4oc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RyaW5nKTsKKyAgICB9LCBbJl0oY29uc3QgVmVj
dG9yPFN0cmluZz4mIHZlY3RvcikgLT4gSlNWYWx1ZSB7CisgICAgICAgIHJldHVybiB0b0pTPElE
TFNlcXVlbmNlPElETERPTVN0cmluZz4+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZlY3Rvcik7Cisg
ICAgfSk7CisgICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwga2V5UGF0aC52YWx1ZSgpKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5oCmluZGV4IGFhNGY1YzMuLjc1N2EyOWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmgKQEAg
LTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCisjaW5jbHVk
ZSAiSURCS2V5UGF0aC5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBK
U0MgewpAQCAtNDEsMTMgKzQyLDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIElEQklu
ZGV4SW5mbzsKIGNsYXNzIElEQktleTsKIGNsYXNzIElEQktleURhdGE7Ci1jbGFzcyBJREJLZXlQ
YXRoOwogY2xhc3MgSURCVmFsdWU7CiBjbGFzcyBJbmRleEtleTsKIGNsYXNzIEpTRE9NR2xvYmFs
T2JqZWN0OwogY2xhc3MgVGhyZWFkU2FmZURhdGFCdWZmZXI7CiAKLUpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBjb25zdCBJREJLZXlQYXRoJik7
CisvLyBGSVhNRTogUmVtb3ZlIHRoaXMgb25jZSB3ZSBzdXBwb3J0IHJldHVybmluZyB1bmlvbiB0
eXBlcy4KK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmpl
Y3QmLCBjb25zdCBPcHRpb25hbDxJREJLZXlQYXRoPiYpOwogCiBSZWZQdHI8SURCS2V5PiBtYXli
ZUNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoSlNDOjpFeGVjU3RhdGUmLCBj
b25zdCBKU0M6OkpTVmFsdWUmLCBjb25zdCBJREJLZXlQYXRoJik7CiBib29sIGNhbkluamVjdElE
QktleUludG9TY3JpcHRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SlNWYWx1ZSYs
IGNvbnN0IElEQktleVBhdGgmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCmluZGV4IGM1YzgwMTMuLmNmNDMwYmEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50
LmNwcApAQCAtMTYyLDM5ICsxNjIsMjQgQEAgdm9pZCBFeGVjdXRhYmxlV2l0aERhdGFiYXNlOjpz
dGFydChJREJGYWN0b3J5KiBpZGJGYWN0b3J5LCBTZWN1cml0eU9yaWdpbiosIGNvbnMKIH0KIAog
Ci1zdGF0aWMgUmVmUHRyPEtleVBhdGg+IGtleVBhdGhGcm9tSURCS2V5UGF0aChjb25zdCBJREJL
ZXlQYXRoJiBpZGJLZXlQYXRoKQorc3RhdGljIFJlZlB0cjxLZXlQYXRoPiBrZXlQYXRoRnJvbUlE
QktleVBhdGgoY29uc3QgT3B0aW9uYWw8SURCS2V5UGF0aD4mIGlkYktleVBhdGgpCiB7Ci0gICAg
UmVmUHRyPEtleVBhdGg+IGtleVBhdGg7Ci0gICAgc3dpdGNoIChpZGJLZXlQYXRoLnR5cGUoKSkg
ewotICAgIGNhc2UgSURCS2V5UGF0aDo6VHlwZTo6TnVsbDoKLSAgICAgICAga2V5UGF0aCA9IEtl
eVBhdGg6OmNyZWF0ZSgpCi0gICAgICAgICAgICAuc2V0VHlwZShLZXlQYXRoOjpUeXBlOjpOdWxs
KQotICAgICAgICAgICAgLnJlbGVhc2UoKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIElE
QktleVBhdGg6OlR5cGU6OlN0cmluZzoKLSAgICAgICAga2V5UGF0aCA9IEtleVBhdGg6OmNyZWF0
ZSgpCi0gICAgICAgICAgICAuc2V0VHlwZShLZXlQYXRoOjpUeXBlOjpTdHJpbmcpCi0gICAgICAg
ICAgICAucmVsZWFzZSgpOwotICAgICAgICBrZXlQYXRoLT5zZXRTdHJpbmcoaWRiS2V5UGF0aC5z
dHJpbmcoKSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBJREJLZXlQYXRoOjpUeXBlOjpB
cnJheTogeworICAgIGlmICghaWRiS2V5UGF0aCkKKyAgICAgICAgcmV0dXJuIEtleVBhdGg6OmNy
ZWF0ZSgpLnNldFR5cGUoS2V5UGF0aDo6VHlwZTo6TnVsbCkucmVsZWFzZSgpOworCisgICAgYXV0
byB2aXNpdG9yID0gV1RGOjptYWtlVmlzaXRvcihbXShjb25zdCBTdHJpbmcmIHN0cmluZykgewor
ICAgICAgICBSZWZQdHI8S2V5UGF0aD4ga2V5UGF0aCA9IEtleVBhdGg6OmNyZWF0ZSgpLnNldFR5
cGUoS2V5UGF0aDo6VHlwZTo6U3RyaW5nKS5yZWxlYXNlKCk7CisgICAgICAgIGtleVBhdGgtPnNl
dFN0cmluZyhzdHJpbmcpOworICAgICAgICByZXR1cm4ga2V5UGF0aDsKKyAgICB9LCBbXShjb25z
dCBWZWN0b3I8U3RyaW5nPiYgdmVjdG9yKSB7CiAgICAgICAgIGF1dG8gYXJyYXkgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+OjpjcmVhdGUoKTsKLSAgICAgICAgZm9yIChhdXRv
JiBzdHJpbmcgOiBpZGJLZXlQYXRoLmFycmF5KCkpCisgICAgICAgIGZvciAoYXV0byYgc3RyaW5n
IDogdmVjdG9yKQogICAgICAgICAgICAgYXJyYXktPmFkZEl0ZW0oc3RyaW5nKTsKLSAgICAgICAg
a2V5UGF0aCA9IEtleVBhdGg6OmNyZWF0ZSgpCi0gICAgICAgICAgICAuc2V0VHlwZShLZXlQYXRo
OjpUeXBlOjpBcnJheSkKLSAgICAgICAgICAgIC5yZWxlYXNlKCk7CisgICAgICAgIFJlZlB0cjxL
ZXlQYXRoPiBrZXlQYXRoID0gS2V5UGF0aDo6Y3JlYXRlKCkuc2V0VHlwZShLZXlQYXRoOjpUeXBl
OjpBcnJheSkucmVsZWFzZSgpOwogICAgICAgICBrZXlQYXRoLT5zZXRBcnJheShXVEZNb3ZlKGFy
cmF5KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIHJldHVybiBrZXlQYXRoOworICAgICAg
ICByZXR1cm4ga2V5UGF0aDsKKyAgICB9KTsKKyAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9y
LCBpZGJLZXlQYXRoLnZhbHVlKCkpOwogfQogCiBzdGF0aWMgUmVmUHRyPElEQlRyYW5zYWN0aW9u
PiB0cmFuc2FjdGlvbkZvckRhdGFiYXNlKElEQkRhdGFiYXNlKiBpZGJEYXRhYmFzZSwgY29uc3Qg
U3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYgbW9kZSA9IElEQlRyYW5zYWN0
aW9uOjptb2RlUmVhZE9ubHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9E
YXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQlJlc3VsdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJSZXN1bHQuY3BwCmluZGV4IGEwZWM4MWEuLjcw
NmM2MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9EYXRhYmFzZXMvSW5kZXhl
ZERCL1dlYklEQlJlc3VsdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0RhdGFiYXNl
cy9JbmRleGVkREIvV2ViSURCUmVzdWx0LmNwcApAQCAtMjgsNyArMjgsNyBAQAogCiAjaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCiAKLSNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgorI2lu
Y2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAppbmRl
eCAzNzkzZmJiLi42NmZjNjEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzLmNwcApAQCAtMjMwMyw1ICsyMzAzLDM1IEBAIGJvb2wgQXJndW1lbnRD
b2RlcjxDYXB0dXJlRGV2aWNlPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFdlYkNvcmU6OkNh
cHR1cmVEZXZpCiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQordm9p
ZCBBcmd1bWVudENvZGVyPElEQktleVBhdGg+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29u
c3QgSURCS2V5UGF0aCYga2V5UGF0aCkKK3sKKyAgICBib29sIGlzU3RyaW5nID0gV1RGOjpob2xk
c19hbHRlcm5hdGl2ZTxTdHJpbmc+KGtleVBhdGgpOworICAgIGVuY29kZXIgPDwgaXNTdHJpbmc7
CisgICAgaWYgKGlzU3RyaW5nKQorICAgICAgICBlbmNvZGVyIDw8IFdURjo6Z2V0PFN0cmluZz4o
a2V5UGF0aCk7CisgICAgZWxzZQorICAgICAgICBlbmNvZGVyIDw8IFdURjo6Z2V0PFZlY3RvcjxT
dHJpbmc+PihrZXlQYXRoKTsKK30KKworYm9vbCBBcmd1bWVudENvZGVyPElEQktleVBhdGg+Ojpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgSURCS2V5UGF0aCYga2V5UGF0aCkKK3sKKyAgICBib29s
IGlzU3RyaW5nOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNTdHJpbmcpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKGlzU3RyaW5nKSB7CisgICAgICAgIFN0cmluZyBzdHJpbmc7
CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RyaW5nKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAga2V5UGF0aCA9IHN0cmluZzsKKyAgICB9IGVsc2UgeworICAgICAg
ICBWZWN0b3I8U3RyaW5nPiB2ZWN0b3I7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmVj
dG9yKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAga2V5UGF0aCA9IHZlY3Rv
cjsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2Ug
SVBDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKaW5k
ZXggYjRiMTExYi4uNjA0ZGM5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YkNvcmVBcmd1bWVudENvZGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3Jl
QXJndW1lbnRDb2RlcnMuaApAQCAtMTM0LDYgKzEzNCwxMiBAQCBzdHJ1Y3QgTWVkaWFDb25zdHJh
aW50c0RhdGE7CiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorbmFt
ZXNwYWNlIFdlYkNvcmUgewordXNpbmcgSURCS2V5UGF0aCA9IFZhcmlhbnQ8U3RyaW5nLCBWZWN0
b3I8U3RyaW5nPj47Cit9CisjZW5kaWYKKwogbmFtZXNwYWNlIElQQyB7CiAKIHRlbXBsYXRlPD4g
c3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtPiB7CkBAIC01NDcs
NiArNTUzLDE1IEBAIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Q2Fw
dHVyZURldmljZT4gewogfTsKICNlbmRpZgogCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CisKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6SURCS2V5UGF0aD4g
eworICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6SURCS2V5
UGF0aCYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgV2ViQ29yZTo6SURCS2V5
UGF0aCYpOworfTsKKworI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIElQQwogCiBuYW1lc3BhY2Ug
V1RGIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0lu
ZGV4ZWREQi9XZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQkNvbm5lY3Rpb25Ub1NlcnZlci5jcHAK
aW5kZXggN2IzYjNmOC4uZjZkZWZjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQkNvbm5lY3Rpb25Ub1NlcnZlci5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQkNv
bm5lY3Rpb25Ub1NlcnZlci5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJEYXRhYmFz
ZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb24uaCIKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRl
ICJXZWJJREJDb25uZWN0aW9uVG9DbGllbnRNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYklEQlJl
c3VsdC5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292871</attachid>
            <date>2016-10-25 20:45:57 -0700</date>
            <delta_ts>2016-10-26 19:19:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-163909-20161025204211.patch</filename>
            <type>text/plain</type>
            <size>51022</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3ODQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjRlMTMyN2I3MTdmYzMx
MjhkODM0ZWNlMjJjYzBiZjUzZjA1YTE5NS4uODMyNDMwMTk1OWY4ZjFmNmE1YmNkYzE3MWU1YTg2
NDNlZTI0MzdjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDc0IEBACiAyMDE2LTEwLTI1ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgUmVwbGFjZSBJREJLZXlQYXRo
IHdpdGggYSBXVEY6OlZhcmlhbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2MzkwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFJlcGxhY2UgSURCS2V5UGF0aCBjbGFzcyB3aXRoIHRoZSBJREJLZXlQYXRo
VmFyaWFudCB0eXBlIGVudGlyZWx5CisgICAgICAgIGFuZCByZW5hbWUgSURCS2V5UGF0aFZhcmlh
bnQgdG8gSURCS2V5UGF0aC4KKworICAgICAgICBVbmZvcnR1bmF0ZWx5LCBJREJLZXlQYXRoIHN0
aWxsIG5lZWRzIHNvbWUgc3BlY2lhbCBoYW5kbGluZyB3aGVuCisgICAgICAgIHJldHVybmVkIHRv
IHRoZSBKYXZhU2NyaXB0IGJlY2F1c2Ugd2UgZG8gbm90IGhhdmUgYSB0b0pTKCkgYWNjZXB0aW5n
CisgICAgICAgIGEgV1RGOjpWYXJpYW50IGFzIGlucHV0IHlldC4KKworICAgICAgICBUaGVyZSBz
aG91bGQgYmUgbm8gc2lnbmlmaWNhbnQgYmVoYXZpb3IgY2hhbmdlIGV4Y2VwdCB0aGF0CisgICAg
ICAgIElEQkluZGV4LmtleVBhdGggLyBJREJPYmplY3RTdG9yZS5rZXlQYXRoIG5vdyByZXR1cm5z
IGFuIGFycmF5IG9mCisgICAgICAgIFN0cmluZ3MgaW5zdGVhZCBvZiBhIERPTVN0cmluZ0xpc3Qg
b2JqZWN0IHdoZW4gdGhlIElEQktleVBhdGgKKyAgICAgICAgY29udGFpbnMgYSB2ZWN0b3IuIFRo
aXMgaXMgYSBwcm9ncmVzc2lvbiBhbmQgbWF0Y2hlcyB0aGUKKyAgICAgICAgc3BlY2lmaWNhdGlv
bjoKKyAgICAgICAgLSBodHRwczovL3d3dy53My5vcmcvVFIvSW5kZXhlZERCLyN3aWRsLUlEQklu
ZGV4LWtleVBhdGgKKyAgICAgICAgLSBodHRwczovL3d3dy53My5vcmcvVFIvSW5kZXhlZERCLyN3
aWRsLUlEQk9iamVjdFN0b3JlLWtleVBhdGgKKworICAgICAgICBObyBuZXcgdGVzdHMsIHJlYmFz
ZWxpbmVkIGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
Q3Vyc29yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6dXBkYXRlKToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkdldFJlc3VsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJHZXRSZXN1
bHQ6Omlzb2xhdGVkQ29weSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0
aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0lEQktleVBhdGhWYWxpZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJLZXlQYXRoSXNvbGF0ZWRDb3B5KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJLZXlQYXRoLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlQYXRoSXNvbGF0ZWRD
b3B5KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6a2V5UGF0aCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJPYmplY3RTdG9yZTo6cHV0T3JBZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZS5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJp
YWxpemF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6ZUlEQktleVBhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6ZGVzZXJpYWxpemVJREJLZXlQYXRoKToKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbi5oOgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmV4dHJhY3RFeGlzdGlu
Z0RhdGFiYXNlSW5mbyk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1
ZUlEQkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
c2hhcmVkL0lEQkRhdGFiYXNlSW5mby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFz
ZUluZm86OmNyZWF0ZU5ld09iamVjdFN0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9zaGFyZWQvSURCRGF0YWJhc2VJbmZvLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
c2hhcmVkL0lEQkluZGV4SW5mby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEluZm86
OklEQkluZGV4SW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEluZm86Omlzb2xhdGVk
Q29weSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkluZGV4SW5mby5o
OgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJPYmplY3RTdG9yZUluZm8u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVJbmZvOjpJREJPYmplY3RTdG9y
ZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVJbmZvOjpjcmVhdGVOZXdJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUluZm86Omlzb2xhdGVkQ29w
eSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0b3JlSW5m
by5oOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVJbmZvOjprZXlQYXRoKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmluamVjdElEQktleUludG9TY3JpcHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpt
YXliZUNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6Y2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZUtleVBhdGhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmg6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcDoKKworMjAxNi0xMC0yNSAgQ2hyaXMgRHVtZXog
IDxjZHVtZXpAYXBwbGUuY29tPgorCiAgICAgICAgIElEQkRhdGFiYXNlLnRyYW5zYWN0aW9uKCkg
c2hvdWxkIHRha2UgYSB1bmlvbiBpbiBwYXJhbWV0ZXIKICAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mzk2NgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZWY3ZDExMmRk
MzdkZjM2ZWUyYjFjMTM5ODdmMDg2ZjYwNzFmMmJmOC4uYzNiZWNhNWU3NWNmYmVmZDhmMGYyMTkw
YmE3YjEyYjJlZWZkNWUxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDE2LTEwLTI1
ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgUmVwbGFjZSBJREJL
ZXlQYXRoIHdpdGggYSBXVEY6OlZhcmlhbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2MzkwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZCBjb2RlcnMgdG8gZW5jb2RlIC8gZGVjb2RlIElEQktleVBh
dGggdHlwZSBmb3IgSVBDLgorCisgICAgICAgICogU2hhcmVkL0RhdGFiYXNlcy9JbmRleGVkREIv
V2ViSURCUmVzdWx0LmNwcDoKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJz
LmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxJREJLZXlQYXRoPjo6ZW5jb2RlKToK
KyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxJREJLZXlQYXRoPjo6ZGVjb2RlKToKKyAgICAg
ICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgICogV2ViUHJvY2Vz
cy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQkNvbm5lY3Rpb25Ub1NlcnZlci5jcHA6CisKIDIw
MTYtMTAtMjUgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgW01lZGlhU3RyZWFtXSBBZGQgImhhcyBjYXB0dXJlIGRldmljZSIgYml0IHRvIG1lZGlhIHN0
YXRlIGZsYWdzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJDdXJzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29y
LmNwcAppbmRleCA1NDE2OTA5YWJkOTY4MGU2YWZlY2MyYzUxYjljNWJkYTlmZDQwMmIzLi4xOTVh
MTgyMGYxYTM1MjBmYzY0ZjVkZjJmMmVhOTYyYjQzM2YxZjg2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAKQEAgLTE5NCwxMCArMTk0LDEwIEBA
IEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCQ3Vyc29yOjp1cGRhdGUoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQg
dG8gZXhlY3V0ZSAndXBkYXRlJyBvbiAnSURCQ3Vyc29yJzogVGhlIGN1cnNvciBpcyBhIGtleSBj
dXJzb3IuIikgfTsKIAogICAgIGF1dG8mIG9iamVjdFN0b3JlID0gZWZmZWN0aXZlT2JqZWN0U3Rv
cmUoKTsKLSAgICBhdXRvJiBrZXlQYXRoID0gb2JqZWN0U3RvcmUuaW5mbygpLmtleVBhdGgoKTsK
LSAgICBjb25zdCBib29sIHVzZXNJbkxpbmVLZXlzID0gIWtleVBhdGguaXNOdWxsKCk7CisgICAg
YXV0byYgb3B0aW9uYWxLZXlQYXRoID0gb2JqZWN0U3RvcmUuaW5mbygpLmtleVBhdGgoKTsKKyAg
ICBjb25zdCBib29sIHVzZXNJbkxpbmVLZXlzID0gISFvcHRpb25hbEtleVBhdGg7CiAgICAgaWYg
KHVzZXNJbkxpbmVLZXlzKSB7Ci0gICAgICAgIFJlZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBt
YXliZUNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoc3RhdGUsIHZhbHVlLCBr
ZXlQYXRoKTsKKyAgICAgICAgUmVmUHRyPElEQktleT4ga2V5UGF0aEtleSA9IG1heWJlQ3JlYXRl
SURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChzdGF0ZSwgdmFsdWUsIG9wdGlvbmFsS2V5
UGF0aC52YWx1ZSgpKTsKICAgICAgICAgSURCS2V5RGF0YSBrZXlQYXRoS2V5RGF0YShrZXlQYXRo
S2V5LmdldCgpKTsKICAgICAgICAgaWYgKCFrZXlQYXRoS2V5IHx8IGtleVBhdGhLZXlEYXRhICE9
IG1fY3VycmVudFByaW1hcnlLZXlEYXRhKQogICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRv
IGV4ZWN1dGUgJ3VwZGF0ZScgb24gJ0lEQkN1cnNvcic6IFRoZSBlZmZlY3RpdmUgb2JqZWN0IHN0
b3JlIG9mIHRoaXMgY3Vyc29yIHVzZXMgaW4tbGluZSBrZXlzIGFuZCBldmFsdWF0aW5nIHRoZSBr
ZXkgcGF0aCBvZiB0aGUgdmFsdWUgcGFyYW1ldGVyIHJlc3VsdHMgaW4gYSBkaWZmZXJlbnQgdmFs
dWUgdGhhbiB0aGUgY3Vyc29yJ3MgZWZmZWN0aXZlIGtleS4iKSB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmgKaW5kZXggMmI4Njg1N2QxODc1MjMw
MmY1ZTFlZGJhYzMwMmMwMTI2MGY3OGI1My4uODkyZWM2NTY5NTkzYjc5YmFmYmU0OWYzYzhjMzQ2
YmQ0NWVkNmRhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZS5oCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8RE9NU3RyaW5n
TGlzdD4gb2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0OwogCiAgICAgc3RydWN0IE9iamVjdFN0b3Jl
UGFyYW1ldGVycyB7Ci0gICAgICAgIE9wdGlvbmFsPElEQktleVBhdGhWYXJpYW50PiBrZXlQYXRo
OworICAgICAgICBPcHRpb25hbDxJREJLZXlQYXRoPiBrZXlQYXRoOwogICAgICAgICBib29sIGF1
dG9JbmNyZW1lbnQ7CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCR2V0UmVzdWx0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkdldFJlc3VsdC5jcHAKaW5kZXggYzY1NzhmOGViMWE4MTBlNjU3Y2EzZWNkZDQx
MDhhMDVkNGFmZTc2ZS4uYzU1ZDIzZGQ2MzhjOWFmMDZlMGMxNDBmMTQ5ZTNhNzJiOTJkNTkxOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCR2V0UmVzdWx0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJHZXRSZXN1bHQu
Y3BwCkBAIC01Myw3ICs1Myw3IEBAIHZvaWQgSURCR2V0UmVzdWx0Ojppc29sYXRlZENvcHkoY29u
c3QgSURCR2V0UmVzdWx0JiBzb3VyY2UsIElEQkdldFJlc3VsdCYgZGVzdGluCiAgICAgZGVzdGlu
YXRpb24ubV92YWx1ZSA9IHNvdXJjZS5tX3ZhbHVlLmlzb2xhdGVkQ29weSgpOwogICAgIGRlc3Rp
bmF0aW9uLm1fa2V5RGF0YSA9IHNvdXJjZS5tX2tleURhdGEuaXNvbGF0ZWRDb3B5KCk7CiAgICAg
ZGVzdGluYXRpb24ubV9wcmltYXJ5S2V5RGF0YSA9IHNvdXJjZS5tX3ByaW1hcnlLZXlEYXRhLmlz
b2xhdGVkQ29weSgpOwotICAgIGRlc3RpbmF0aW9uLm1fa2V5UGF0aCA9IHNvdXJjZS5tX2tleVBh
dGguaXNvbGF0ZWRDb3B5KCk7CisgICAgZGVzdGluYXRpb24ubV9rZXlQYXRoID0gSURCS2V5UGF0
aElzb2xhdGVkQ29weShzb3VyY2UubV9rZXlQYXRoKTsKICAgICBkZXN0aW5hdGlvbi5tX2lzRGVm
aW5lZCA9IHNvdXJjZS5tX2lzRGVmaW5lZDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmNwcAppbmRleCBjNGE0ZWUyOTkxODQ1YWFlM2JiYTI0
NWNjYWUwY2ZhNTkyMmRlMGRhLi44OGZiMDRlODNhYTEyN2U2YzMwOGVhNzk5NTM3MWM3ZGY0NDI1
N2YwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQ
YXRoLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRo
LmNwcApAQCAtMjQsMTEgKzI0LDEwIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIklEQktleVBhdGguaCIKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorI2lu
Y2x1ZGUgIklEQktleVBhdGguaCIKIAotI2luY2x1ZGUgIktleWVkQ29kaW5nLmgiCiAjaW5jbHVk
ZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvZHRvYS5oPgogCkBAIC0xOTEsMzgg
KzE5MCw3IEBAIHZvaWQgSURCUGFyc2VLZXlQYXRoKGNvbnN0IFN0cmluZyYga2V5UGF0aCwgVmVj
dG9yPFN0cmluZz4mIGVsZW1lbnRzLCBJREJLZXlQYXRoCiAgICAgfQogfQogCi1JREJLZXlQYXRo
OjpJREJLZXlQYXRoKGNvbnN0IFN0cmluZyYgc3RyaW5nKQotICAgIDogbV90eXBlKFR5cGU6OlN0
cmluZykKLSAgICAsIG1fc3RyaW5nKHN0cmluZykKLXsKLSAgICBBU1NFUlQoIW1fc3RyaW5nLmlz
TnVsbCgpKTsKLX0KLQotSURCS2V5UGF0aDo6SURCS2V5UGF0aChjb25zdCBWZWN0b3I8U3RyaW5n
PiYgYXJyYXkpCi0gICAgOiBtX3R5cGUoVHlwZTo6QXJyYXkpCi0gICAgLCBtX2FycmF5KGFycmF5
KQotewotI2lmICFMT0dfRElTQUJMRUQKLSAgICBmb3IgKGF1dG8mIGtleSA6IGFycmF5KQotICAg
ICAgICBBU1NFUlQoIWtleS5pc051bGwoKSk7Ci0jZW5kaWYKLX0KLQotSURCS2V5UGF0aDo6SURC
S2V5UGF0aChPcHRpb25hbDxJREJLZXlQYXRoVmFyaWFudD4mJiB2YXJpYW50KQotewotICAgIGlm
ICghdmFyaWFudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJu
YXRpdmU8U3RyaW5nPigqdmFyaWFudCkpIHsKLSAgICAgICAgbV90eXBlID0gVHlwZTo6U3RyaW5n
OwotICAgICAgICBtX3N0cmluZyA9IFdURk1vdmUoV1RGOjpnZXQ8U3RyaW5nPigqdmFyaWFudCkp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fdHlwZSA9IFR5cGU6OkFycmF5OwotICAgICAgICBt
X2FycmF5ID0gV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8U3RyaW5nPj4oKnZhcmlhbnQpKTsKLSAg
ICB9Ci19Ci0KLWJvb2wgaXNJREJLZXlQYXRoVmFsaWQoY29uc3QgSURCS2V5UGF0aFZhcmlhbnQm
IGtleVBhdGgpCitib29sIGlzSURCS2V5UGF0aFZhbGlkKGNvbnN0IElEQktleVBhdGgmIGtleVBh
dGgpCiB7CiAgICAgYXV0byB2aXNpdG9yID0gV1RGOjptYWtlVmlzaXRvcihbXShjb25zdCBTdHJp
bmcmIHN0cmluZykgewogICAgICAgICByZXR1cm4gSURCSXNWYWxpZEtleVBhdGgoc3RyaW5nKTsK
QEAgLTIzOCw3MyArMjA2LDE5IEBAIGJvb2wgaXNJREJLZXlQYXRoVmFsaWQoY29uc3QgSURCS2V5
UGF0aFZhcmlhbnQmIGtleVBhdGgpCiAgICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwga2V5
UGF0aCk7CiB9CiAKLWJvb2wgSURCS2V5UGF0aDo6b3BlcmF0b3I9PShjb25zdCBJREJLZXlQYXRo
JiBvdGhlcikgY29uc3QKK0lEQktleVBhdGggSURCS2V5UGF0aElzb2xhdGVkQ29weShjb25zdCBJ
REJLZXlQYXRoJiBrZXlQYXRoKQogewotICAgIGlmIChtX3R5cGUgIT0gb3RoZXIubV90eXBlKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2Ug
VHlwZTo6TnVsbDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBUeXBlOjpTdHJpbmc6
Ci0gICAgICAgIHJldHVybiBtX3N0cmluZyA9PSBvdGhlci5tX3N0cmluZzsKLSAgICBjYXNlIFR5
cGU6OkFycmF5OgotICAgICAgICByZXR1cm4gbV9hcnJheSA9PSBvdGhlci5tX2FycmF5OwotICAg
IH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUlE
QktleVBhdGggSURCS2V5UGF0aDo6aXNvbGF0ZWRDb3B5KCkgY29uc3QKLXsKLSAgICBJREJLZXlQ
YXRoIHJlc3VsdDsKLSAgICByZXN1bHQubV90eXBlID0gbV90eXBlOwotICAgIHJlc3VsdC5tX3N0
cmluZyA9IG1fc3RyaW5nLmlzb2xhdGVkQ29weSgpOwotICAgIHJlc3VsdC5tX2FycmF5LnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkobV9hcnJheS5zaXplKCkpOwotICAgIGZvciAoYXV0byYga2V5IDog
bV9hcnJheSkKLSAgICAgICAgcmVzdWx0Lm1fYXJyYXkudW5jaGVja2VkQXBwZW5kKGtleS5pc29s
YXRlZENvcHkoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBJREJLZXlQYXRoOjpl
bmNvZGUoS2V5ZWRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIuZW5jb2Rl
RW51bSgidHlwZSIsIG1fdHlwZSk7Ci0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIFR5
cGU6Ok51bGw6Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFR5cGU6OlN0cmluZzoKLSAgICAg
ICAgZW5jb2Rlci5lbmNvZGVTdHJpbmcoInN0cmluZyIsIG1fc3RyaW5nKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgVHlwZTo6QXJyYXk6Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlT2JqZWN0
cygiYXJyYXkiLCBtX2FycmF5LmJlZ2luKCksIG1fYXJyYXkuZW5kKCksIFtdKFdlYkNvcmU6Oktl
eWVkRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU3RyaW5nJiBzdHJpbmcpIHsKLSAgICAgICAgICAg
IGVuY29kZXIuZW5jb2RlU3RyaW5nKCJzdHJpbmciLCBzdHJpbmcpOwotICAgICAgICB9KTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH07Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLWJv
b2wgSURCS2V5UGF0aDo6ZGVjb2RlKEtleWVkRGVjb2RlciYgZGVjb2RlciwgSURCS2V5UGF0aCYg
cmVzdWx0KQotewotICAgIGJvb2wgc3VjY2VlZGVkID0gZGVjb2Rlci5kZWNvZGVFbnVtKCJ0eXBl
IiwgcmVzdWx0Lm1fdHlwZSwgW10oVHlwZSB2YWx1ZSkgewotICAgICAgICByZXR1cm4gdmFsdWUg
PT0gVHlwZTo6TnVsbCB8fCB2YWx1ZSA9PSBUeXBlOjpTdHJpbmcgfHwgdmFsdWUgPT0gVHlwZTo6
QXJyYXk7CisgICAgYXV0byB2aXNpdG9yID0gV1RGOjptYWtlVmlzaXRvcihbXShjb25zdCBTdHJp
bmcmIHN0cmluZykgLT4gSURCS2V5UGF0aCB7CisgICAgICAgIHJldHVybiBzdHJpbmcuaXNvbGF0
ZWRDb3B5KCk7CisgICAgfSwgW10oY29uc3QgVmVjdG9yPFN0cmluZz4mIHZlY3RvcikgLT4gSURC
S2V5UGF0aCB7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IHZlY3RvckNvcHk7CisgICAgICAgIHZl
Y3RvckNvcHkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh2ZWN0b3Iuc2l6ZSgpKTsKKyAgICAgICAg
Zm9yIChhdXRvJiBzdHJpbmcgOiB2ZWN0b3IpCisgICAgICAgICAgICB2ZWN0b3JDb3B5LnVuY2hl
Y2tlZEFwcGVuZChzdHJpbmcuaXNvbGF0ZWRDb3B5KCkpOworICAgICAgICByZXR1cm4gdmVjdG9y
Q29weTsKICAgICB9KTsKLSAgICBpZiAoIXN1Y2NlZWRlZCkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgc3dpdGNoIChyZXN1bHQubV90eXBlKSB7Ci0gICAgY2FzZSBUeXBlOjpOdWxsOgot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIFR5cGU6OlN0cmluZzoKLSAgICAgICAgcmV0
dXJuIGRlY29kZXIuZGVjb2RlU3RyaW5nKCJzdHJpbmciLCByZXN1bHQubV9zdHJpbmcpOwotICAg
IGNhc2UgVHlwZTo6QXJyYXk6Ci0gICAgICAgIHJlc3VsdC5tX2FycmF5LmNsZWFyKCk7Ci0gICAg
ICAgIHJldHVybiBkZWNvZGVyLmRlY29kZU9iamVjdHMoImFycmF5IiwgcmVzdWx0Lm1fYXJyYXks
IFtdKEtleWVkRGVjb2RlciYgZGVjb2RlciwgU3RyaW5nJiByZXN1bHQpIHsKLSAgICAgICAgICAg
IHJldHVybiBkZWNvZGVyLmRlY29kZVN0cmluZygic3RyaW5nIiwgcmVzdWx0KTsKLSAgICAgICAg
fSk7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBrZXlQYXRoKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCS2V5UGF0aC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5
UGF0aC5oCmluZGV4IDBmOWM1Y2NkN2UzYjJmZmI5YTc1MTQ4MjYxYzMwZDZhNTUwMjlmMzMuLmJi
Y2QwNzlmMmQwMTkwMWQwN2JiYjYwOGQ4Zjg0NmRlOWJlNjE4NmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmgKQEAgLTMzLDExICszMyw4IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgSURCS2V5UGF0aFZhcmlhbnQgPSBXVEY6OlZh
cmlhbnQ8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPj47Ci1ib29sIGlzSURCS2V5UGF0aFZhbGlkKGNv
bnN0IElEQktleVBhdGhWYXJpYW50Jik7Ci0KLWNsYXNzIEtleWVkRGVjb2RlcjsKLWNsYXNzIEtl
eWVkRW5jb2RlcjsKK3VzaW5nIElEQktleVBhdGggPSBXVEY6OlZhcmlhbnQ8U3RyaW5nLCBWZWN0
b3I8U3RyaW5nPj47Citib29sIGlzSURCS2V5UGF0aFZhbGlkKGNvbnN0IElEQktleVBhdGgmKTsK
IAogZW51bSBjbGFzcyBJREJLZXlQYXRoUGFyc2VFcnJvciB7CiAgICAgTm9uZSwKQEAgLTQ3LDk1
ICs0NCwxMiBAQCBlbnVtIGNsYXNzIElEQktleVBhdGhQYXJzZUVycm9yIHsKIH07CiAKIHZvaWQg
SURCUGFyc2VLZXlQYXRoKGNvbnN0IFN0cmluZyYsIFZlY3RvcjxTdHJpbmc+JiwgSURCS2V5UGF0
aFBhcnNlRXJyb3ImKTsKLQotLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIHJlcGxhY2Ug
SURCS2V5UGF0aCB3aXRoIElEQktleVBhdGhWYXJpYW50LgotY2xhc3MgSURCS2V5UGF0aCB7Ci1w
dWJsaWM6Ci0gICAgSURCS2V5UGF0aCgpIHsgfQotICAgIFdFQkNPUkVfRVhQT1JUIElEQktleVBh
dGgoY29uc3QgU3RyaW5nJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgSURCS2V5UGF0aChjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgYXJyYXkpOwotICAgIFdFQkNPUkVfRVhQT1JUIElEQktleVBhdGgoT3B0
aW9uYWw8SURCS2V5UGF0aFZhcmlhbnQ+JiYpOwotCi0gICAgZW51bSBjbGFzcyBUeXBlIHsgTnVs
bCwgU3RyaW5nLCBBcnJheSB9OwotICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZTsgfQotCi0gICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFycmF5KCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChtX3R5cGUgPT0gVHlwZTo6QXJyYXkpOwotICAgICAgICByZXR1cm4gbV9h
cnJheTsKLSAgICB9Ci0KLSAgICBjb25zdCBTdHJpbmcmIHN0cmluZygpIGNvbnN0Ci0gICAgewot
ICAgICAgICBBU1NFUlQobV90eXBlID09IFR5cGU6OlN0cmluZyk7Ci0gICAgICAgIHJldHVybiBt
X3N0cmluZzsKLSAgICB9Ci0KLSAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZSA9PSBUeXBlOjpOdWxsOyB9Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IElEQktleVBhdGgm
IG90aGVyKSBjb25zdDsKLQotICAgIElEQktleVBhdGggaXNvbGF0ZWRDb3B5KCkgY29uc3Q7Ci0K
LSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7
Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXIm
LCBJREJLZXlQYXRoJik7Ci0gICAgCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBlbmNvZGUoS2V5
ZWRFbmNvZGVyJikgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgZGVjb2Rl
KEtleWVkRGVjb2RlciYsIElEQktleVBhdGgmKTsKLQotcHJpdmF0ZToKLSAgICBUeXBlIG1fdHlw
ZSB7IFR5cGU6Ok51bGwgfTsKLSAgICBTdHJpbmcgbV9zdHJpbmc7Ci0gICAgVmVjdG9yPFN0cmlu
Zz4gbV9hcnJheTsKLX07Ci0KLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgSURCS2V5UGF0
aDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2Rlci5lbmNvZGVF
bnVtKG1fdHlwZSk7Ci0KLSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgVHlwZTo6TnVs
bDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUeXBlOjpTdHJpbmc6Ci0gICAgICAgIGVuY29k
ZXIgPDwgbV9zdHJpbmc7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVHlwZTo6QXJyYXk6Ci0g
ICAgICAgIGVuY29kZXIgPDwgbV9hcnJheTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBib29sIElEQktleVBhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBJREJL
ZXlQYXRoJiBrZXlQYXRoKQorSURCS2V5UGF0aCBJREJLZXlQYXRoSXNvbGF0ZWRDb3B5KGNvbnN0
IElEQktleVBhdGgmKTsKK2lubGluZSBPcHRpb25hbDxJREJLZXlQYXRoPiBJREJLZXlQYXRoSXNv
bGF0ZWRDb3B5KGNvbnN0IE9wdGlvbmFsPElEQktleVBhdGg+JiB2YXJpYW50KQogewotICAgIFR5
cGUgdHlwZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bSh0eXBlKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBUeXBlOjpOdWxsOgot
ICAgICAgICBrZXlQYXRoID0gSURCS2V5UGF0aCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIGNhc2UgVHlwZTo6U3RyaW5nOiB7Ci0gICAgICAgIFN0cmluZyBzdHJpbmc7Ci0gICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoc3RyaW5nKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgICAgICBrZXlQYXRoID0gSURCS2V5UGF0aChzdHJpbmcpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0gICAgY2FzZSBUeXBlOjpBcnJheTogewotICAgICAgICBWZWN0b3I8U3Ry
aW5nPiBhcnJheTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShhcnJheSkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAga2V5UGF0aCA9IElEQktleVBhdGgoYXJyYXkp
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQorICAgIGlmICghdmFyaWFudCkKKyAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICByZXR1cm4gSURCS2V5UGF0aElzb2xhdGVkQ29weSh2YXJpYW50LnZhbHVlKCkpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKaW5kZXggNzllZTNkNzc4NjZmMWVjNjE3MDJm
Mjc2YjdkZTIzYmIwNzkxYzkxMy4uZWZmYTBlNjRhNDA0ODMyZmQwM2I0NTMzNjEyNzk5ZjI5Mjc5
ZTVjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlLmNwcApAQCAtMTIwLDcgKzEyMCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IElEQk9i
amVjdFN0b3JlOjpzZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKICAgICByZXR1cm4geyB9Owog
fQogCi1jb25zdCBJREJLZXlQYXRoJiBJREJPYmplY3RTdG9yZTo6a2V5UGF0aCgpIGNvbnN0Citj
b25zdCBPcHRpb25hbDxJREJLZXlQYXRoPiYgSURCT2JqZWN0U3RvcmU6OmtleVBhdGgoKSBjb25z
dAogewogICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV90cmFuc2FjdGlvbi0+ZGF0YWJh
c2UoKS5vcmlnaW5UaHJlYWRJRCgpKTsKICAgICByZXR1cm4gbV9pbmZvLmtleVBhdGgoKTsKQEAg
LTMxMSwyMCArMzExLDIwIEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCT2JqZWN0
U3RvcmU6OnB1dE9yQWRkKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUKICAgICBpZiAoa2V5ICYm
ICFrZXktPmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpEYXRhRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIHN0b3JlIHJlY29y
ZCBpbiBhbiBJREJPYmplY3RTdG9yZTogVGhlIHBhcmFtZXRlciBpcyBub3QgYSB2YWxpZCBrZXku
IikgfTsKIAotICAgIGJvb2wgdXNlc0lubGluZUtleXMgPSAhbV9pbmZvLmtleVBhdGgoKS5pc051
bGwoKTsKKyAgICBib29sIHVzZXNJbmxpbmVLZXlzID0gISFtX2luZm8ua2V5UGF0aCgpOwogICAg
IGJvb2wgdXNlc0tleUdlbmVyYXRvciA9IGF1dG9JbmNyZW1lbnQoKTsKICAgICBpZiAodXNlc0lu
bGluZUtleXMgJiYgaW5saW5lS2V5Q2hlY2sgPT0gSW5saW5lS2V5Q2hlY2s6OlBlcmZvcm0pIHsK
ICAgICAgICAgaWYgKGtleSkKICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBzdG9yZSBy
ZWNvcmQgaW4gYW4gSURCT2JqZWN0U3RvcmU6IFRoZSBvYmplY3Qgc3RvcmUgdXNlcyBpbi1saW5l
IGtleXMgYW5kIHRoZSBrZXkgcGFyYW1ldGVyIHdhcyBwcm92aWRlZC4iKSB9OwogCi0gICAgICAg
IFJlZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBtYXliZUNyZWF0ZUlEQktleUZyb21TY3JpcHRW
YWx1ZUFuZEtleVBhdGgoc3RhdGUsIHZhbHVlLCBtX2luZm8ua2V5UGF0aCgpKTsKKyAgICAgICAg
UmVmUHRyPElEQktleT4ga2V5UGF0aEtleSA9IG1heWJlQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZh
bHVlQW5kS2V5UGF0aChzdGF0ZSwgdmFsdWUsIG1faW5mby5rZXlQYXRoKCkudmFsdWUoKSk7CiAg
ICAgICAgIGlmIChrZXlQYXRoS2V5ICYmICFrZXlQYXRoS2V5LT5pc1ZhbGlkKCkpCiAgICAgICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvciwg
QVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gc3RvcmUgcmVjb3JkIGluIGFuIElEQk9iamVjdFN0b3Jl
OiBFdmFsdWF0aW5nIHRoZSBvYmplY3Qgc3RvcmUncyBrZXkgcGF0aCB5aWVsZGVkIGEgdmFsdWUg
dGhhdCBpcyBub3QgYSB2YWxpZCBrZXkuIikgfTsKIAogICAgICAgICBpZiAoIWtleVBhdGhLZXkp
IHsKICAgICAgICAgICAgIGlmICghdXNlc0tleUdlbmVyYXRvcikKICAgICAgICAgICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvciwgQVNDSUlM
aXRlcmFsKCJGYWlsZWQgdG8gc3RvcmUgcmVjb3JkIGluIGFuIElEQk9iamVjdFN0b3JlOiBFdmFs
dWF0aW5nIHRoZSBvYmplY3Qgc3RvcmUncyBrZXkgcGF0aCBkaWQgbm90IHlpZWxkIGEgdmFsdWUu
IikgfTsKLSAgICAgICAgICAgIGlmICghY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKHN0
YXRlLCB2YWx1ZSwgbV9pbmZvLmtleVBhdGgoKSkpCisgICAgICAgICAgICBpZiAoIWNhbkluamVj
dElEQktleUludG9TY3JpcHRWYWx1ZShzdGF0ZSwgdmFsdWUsIG1faW5mby5rZXlQYXRoKCkudmFs
dWUoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpEYXRhRXJyb3IgfTsKICAgICAgICAgfQogCkBAIC0zOTksNyArMzk5LDcgQEAgRXhj
ZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJPYmplY3RTdG9yZTo6Y2xlYXIoRXhlY1N0YXRl
JiBleGVjU3RhdGUpCiAgICAgcmV0dXJuIG1fdHJhbnNhY3Rpb24tPnJlcXVlc3RDbGVhck9iamVj
dFN0b3JlKGV4ZWNTdGF0ZSwgKnRoaXMpOwogfQogCi1FeGNlcHRpb25PcjxSZWY8SURCSW5kZXg+
PiBJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgoRXhlY1N0YXRlJiwgY29uc3QgU3RyaW5nJiBu
YW1lLCBJREJLZXlQYXRoVmFyaWFudCYmIGtleVBhdGgsIGNvbnN0IEluZGV4UGFyYW1ldGVycyYg
cGFyYW1ldGVycykKK0V4Y2VwdGlvbk9yPFJlZjxJREJJbmRleD4+IElEQk9iamVjdFN0b3JlOjpj
cmVhdGVJbmRleChFeGVjU3RhdGUmLCBjb25zdCBTdHJpbmcmIG5hbWUsIElEQktleVBhdGgmJiBr
ZXlQYXRoLCBjb25zdCBJbmRleFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7CiAgICAgTE9HKElu
ZGV4ZWREQiwgIklEQk9iamVjdFN0b3JlOjpjcmVhdGVJbmRleCAlcyIsIG5hbWUudXRmOCgpLmRh
dGEoKSk7CiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX3RyYW5zYWN0aW9uLT5kYXRh
YmFzZSgpLm9yaWdpblRocmVhZElEKCkpOwpAQCAtNDI2LDcgKzQyNiw3IEBAIEV4Y2VwdGlvbk9y
PFJlZjxJREJJbmRleD4+IElEQk9iamVjdFN0b3JlOjpjcmVhdGVJbmRleChFeGVjU3RhdGUmLCBj
b25zdCBTdHJpbmcmCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6SW52YWxpZEFjY2Vzc0Vycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRl
ICdjcmVhdGVJbmRleCcgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIGtleVBhdGggYXJndW1lbnQg
d2FzIGFuIGFycmF5IGFuZCB0aGUgbXVsdGlFbnRyeSBvcHRpb24gaXMgdHJ1ZS4iKSB9OwogCiAg
ICAgLy8gSW5zdGFsbCB0aGUgbmV3IEluZGV4IGludG8gdGhlIE9iamVjdFN0b3JlJ3MgaW5mby4K
LSAgICBJREJJbmRleEluZm8gaW5mbyA9IG1faW5mby5jcmVhdGVOZXdJbmRleChuYW1lLCBPcHRp
b25hbDxJREJLZXlQYXRoVmFyaWFudD4oV1RGTW92ZShrZXlQYXRoKSksIHBhcmFtZXRlcnMudW5p
cXVlLCBwYXJhbWV0ZXJzLm11bHRpRW50cnkpOworICAgIElEQkluZGV4SW5mbyBpbmZvID0gbV9p
bmZvLmNyZWF0ZU5ld0luZGV4KG5hbWUsIFdURk1vdmUoa2V5UGF0aCksIHBhcmFtZXRlcnMudW5p
cXVlLCBwYXJhbWV0ZXJzLm11bHRpRW50cnkpOwogICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNl
KCkuZGlkQ3JlYXRlSW5kZXhJbmZvKGluZm8pOwogCiAgICAgLy8gQ3JlYXRlIHRoZSBhY3R1YWwg
SURCT2JqZWN0U3RvcmUgZnJvbSB0aGUgdHJhbnNhY3Rpb24sIHdoaWNoIGFsc28gc2NoZWR1bGVz
IHRoZSBvcGVyYXRpb24gc2VydmVyIHNpZGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaAppbmRleCA3YjIxY2NjNjgyN2RlZDZjNWI2MzY1
ZDcxZjU0YWQ5MGZhZDYxYmNhLi5mNzg3ZmFiZjYwNzY2NTdkNmJjODU5OWVhNmU0M2NhMmRkMTI5
ODA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVj
dFN0b3JlLmgKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogCiAgICAgY29uc3QgU3RyaW5nJiBu
YW1lKCkgY29uc3Q7CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0TmFtZShjb25zdCBTdHJpbmcm
KTsKLSAgICBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKCkgY29uc3Q7CisgICAgY29uc3QgT3B0
aW9uYWw8SURCS2V5UGF0aD4mIGtleVBhdGgoKSBjb25zdDsKICAgICBSZWZQdHI8RE9NU3RyaW5n
TGlzdD4gaW5kZXhOYW1lcygpIGNvbnN0OwogICAgIElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlv
bigpOwogICAgIGJvb2wgYXV0b0luY3JlbWVudCgpIGNvbnN0OwpAQCAtODMsNyArODMsNyBAQCBw
dWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBkZWxldGVGdW5jdGlvbihK
U0M6OkV4ZWNTdGF0ZSYsIElEQktleVJhbmdlKik7CiAgICAgRXhjZXB0aW9uT3I8UmVmPElEQlJl
cXVlc3Q+PiBkZWxldGVGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSBrZXkp
OwogICAgIEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gY2xlYXIoSlNDOjpFeGVjU3RhdGUm
KTsKLSAgICBFeGNlcHRpb25PcjxSZWY8SURCSW5kZXg+PiBjcmVhdGVJbmRleChKU0M6OkV4ZWNT
dGF0ZSYsIGNvbnN0IFN0cmluZyYgbmFtZSwgSURCS2V5UGF0aFZhcmlhbnQmJiwgY29uc3QgSW5k
ZXhQYXJhbWV0ZXJzJik7CisgICAgRXhjZXB0aW9uT3I8UmVmPElEQkluZGV4Pj4gY3JlYXRlSW5k
ZXgoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBTdHJpbmcmIG5hbWUsIElEQktleVBhdGgmJiwgY29u
c3QgSW5kZXhQYXJhbWV0ZXJzJik7CiAgICAgRXhjZXB0aW9uT3I8UmVmPElEQkluZGV4Pj4gaW5k
ZXgoY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBkZWxldGVJbmRl
eChjb25zdCBTdHJpbmcmIG5hbWUpOwogICAgIEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4g
Y291bnQoSlNDOjpFeGVjU3RhdGUmLCBJREJLZXlSYW5nZSopOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6YXRpb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6YXRpb24u
Y3BwCmluZGV4IGNlMTU5YWEwNzBkZmQ4ZGEwNjA3MGZjZGI2OWZhMmM2ODNjYTk4YjguLjU4MGUz
NTEwNzU1OTI3NzAwY2Q1ZjczMjMyZGQ4MDgxZDY1NWI2NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJpYWxpemF0aW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlv
bi5jcHAKQEAgLTMzLDIwICszMyw2NSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZlB0
cjxTaGFyZWRCdWZmZXI+IHNlcmlhbGl6ZUlEQktleVBhdGgoY29uc3QgSURCS2V5UGF0aCYga2V5
UGF0aCkKK2VudW0gY2xhc3MgS2V5UGF0aFR5cGUgeyBOdWxsLCBTdHJpbmcsIEFycmF5IH07CisK
K1JlZlB0cjxTaGFyZWRCdWZmZXI+IHNlcmlhbGl6ZUlEQktleVBhdGgoY29uc3QgT3B0aW9uYWw8
SURCS2V5UGF0aD4mIGtleVBhdGgpCiB7CiAgICAgYXV0byBlbmNvZGVyID0gS2V5ZWRFbmNvZGVy
OjplbmNvZGVyKCk7Ci0gICAga2V5UGF0aC5lbmNvZGUoKmVuY29kZXIpOworCisgICAgaWYgKGtl
eVBhdGgpIHsKKyAgICAgICAgYXV0byB2aXNpdG9yID0gV1RGOjptYWtlVmlzaXRvcihbJl0oY29u
c3QgU3RyaW5nJiBzdHJpbmcpIHsKKyAgICAgICAgICAgIGVuY29kZXItPmVuY29kZUVudW0oInR5
cGUiLCBLZXlQYXRoVHlwZTo6U3RyaW5nKTsKKyAgICAgICAgICAgIGVuY29kZXItPmVuY29kZVN0
cmluZygic3RyaW5nIiwgc3RyaW5nKTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiB2ZWN0b3IpIHsKKyAgICAgICAgICAgIGVuY29kZXItPmVuY29kZUVudW0oInR5cGUiLCBL
ZXlQYXRoVHlwZTo6QXJyYXkpOworICAgICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlT2JqZWN0cygi
YXJyYXkiLCB2ZWN0b3IuYmVnaW4oKSwgdmVjdG9yLmVuZCgpLCBbXShXZWJDb3JlOjpLZXllZEVu
Y29kZXImIGVuY29kZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKSB7CisgICAgICAgICAgICAgICAg
ZW5jb2Rlci5lbmNvZGVTdHJpbmcoInN0cmluZyIsIHN0cmluZyk7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgfSk7CisgICAgICAgIFdURjo6dmlzaXQodmlzaXRvciwga2V5UGF0aC52YWx1ZSgp
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlRW51bSgidHlwZSIsIEtleVBh
dGhUeXBlOjpOdWxsKTsKKwogICAgIHJldHVybiBlbmNvZGVyLT5maW5pc2hFbmNvZGluZygpOwog
fQogCi1ib29sIGRlc2VyaWFsaXplSURCS2V5UGF0aChjb25zdCB1aW50OF90KiBkYXRhLCBzaXpl
X3Qgc2l6ZSwgSURCS2V5UGF0aCYgcmVzdWx0KQorYm9vbCBkZXNlcmlhbGl6ZUlEQktleVBhdGgo
Y29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIE9wdGlvbmFsPElEQktleVBhdGg+JiBy
ZXN1bHQpCiB7CiAgICAgaWYgKCFkYXRhIHx8ICFzaXplKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBhdXRvIGRlY29kZXIgPSBLZXllZERlY29kZXI6OmRlY29kZXIoZGF0YSwgc2l6ZSk7
Ci0gICAgcmV0dXJuIElEQktleVBhdGg6OmRlY29kZSgqZGVjb2RlciwgcmVzdWx0KTsKKworICAg
IEtleVBhdGhUeXBlIHR5cGU7CisgICAgYm9vbCBzdWNjZWVkZWQgPSBkZWNvZGVyLT5kZWNvZGVF
bnVtKCJ0eXBlIiwgdHlwZSwgW10oS2V5UGF0aFR5cGUgdmFsdWUpIHsKKyAgICAgICAgcmV0dXJu
IHZhbHVlID09IEtleVBhdGhUeXBlOjpOdWxsIHx8IHZhbHVlID09IEtleVBhdGhUeXBlOjpTdHJp
bmcgfHwgdmFsdWUgPT0gS2V5UGF0aFR5cGU6OkFycmF5OworICAgIH0pOworICAgIGlmICghc3Vj
Y2VlZGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAg
ICBjYXNlIEtleVBhdGhUeXBlOjpOdWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEtleVBh
dGhUeXBlOjpTdHJpbmc6IHsKKyAgICAgICAgU3RyaW5nIHN0cmluZzsKKyAgICAgICAgaWYgKCFk
ZWNvZGVyLT5kZWNvZGVTdHJpbmcoInN0cmluZyIsIHN0cmluZykpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHJlc3VsdCA9IElEQktleVBhdGgoV1RGTW92ZShzdHJpbmcpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgS2V5UGF0aFR5cGU6OkFycmF5OiB7Cisg
ICAgICAgIFZlY3RvcjxTdHJpbmc+IHZlY3RvcjsKKyAgICAgICAgc3VjY2VlZGVkID0gZGVjb2Rl
ci0+ZGVjb2RlT2JqZWN0cygiYXJyYXkiLCB2ZWN0b3IsIFtdKEtleWVkRGVjb2RlciYgZGVjb2Rl
ciwgU3RyaW5nJiByZXN1bHQpIHsKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVyLmRlY29kZVN0
cmluZygic3RyaW5nIiwgcmVzdWx0KTsKKyAgICAgICAgfSk7CisgICAgICAgIGlmICghc3VjY2Vl
ZGVkKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXN1bHQgPSBJREJLZXlQ
YXRoKFdURk1vdmUodmVjdG9yKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9CisgICAg
cmV0dXJuIHRydWU7CiB9CiAKIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHNlcmlhbGl6ZUlEQktleURh
dGEoY29uc3QgSURCS2V5RGF0YSYga2V5KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6YXRpb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJpYWxpemF0aW9uLmgKaW5kZXggODBkMmMy
YjU4MzhiMWQ0ZGY4MmNlNzEzYzIwNmIxNjJmNTg1MmUyNS4uY2M0ODYyYjUyMDU0M2RlZjNjMWU3
Yjk1ZDU5OGIzMTQxNzNiMjBjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6YXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbi5oCkBAIC0yOCwxNSArMjgs
MTUgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCisjaW5jbHVkZSAiSURCS2V5
UGF0aC5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIElEQktleURhdGE7Ci1jbGFzcyBJREJLZXlQYXRoOwogCi1SZWZQdHI8U2hhcmVk
QnVmZmVyPiBzZXJpYWxpemVJREJLZXlQYXRoKGNvbnN0IElEQktleVBhdGgmKTsKLWJvb2wgZGVz
ZXJpYWxpemVJREJLZXlQYXRoKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNp
emUsIElEQktleVBhdGgmKTsKK1JlZlB0cjxTaGFyZWRCdWZmZXI+IHNlcmlhbGl6ZUlEQktleVBh
dGgoY29uc3QgT3B0aW9uYWw8SURCS2V5UGF0aD4mKTsKK2Jvb2wgZGVzZXJpYWxpemVJREJLZXlQ
YXRoKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUsIE9wdGlvbmFsPElE
QktleVBhdGg+Jik7CiAKIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHNlcmlhbGl6ZUlEQktleURhdGEo
Y29uc3QgSURCS2V5RGF0YSYpOwogYm9vbCBkZXNlcmlhbGl6ZUlEQktleURhdGEoY29uc3QgdWlu
dDhfdCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSwgSURCS2V5RGF0YSYpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tp
bmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FM
aXRlSURCQmFja2luZ1N0b3JlLmNwcAppbmRleCBiZDc2ZWY0ZjExZDhjOTlmMTlmNDQ1YTg1YmMw
NGIyYzhkYTI0MDhhLi43M2UxZTAyMTQ2MmJkMjZmOWM2MWM1MDU5NzY3MDVhMzI4NDlkZGVkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRl
SURCQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcApAQCAtNTk5LDcgKzU5OSw3IEBAIHN0
ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZXh0
cmFjdEV4aXN0aW5nRGF0YWJhc2VJCiAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4ga2V5UGF0aEJ1
ZmZlcjsKICAgICAgICAgICAgIHNxbC5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMiwga2V5UGF0aEJ1
ZmZlcik7CiAKLSAgICAgICAgICAgIElEQktleVBhdGggb2JqZWN0U3RvcmVLZXlQYXRoOworICAg
ICAgICAgICAgT3B0aW9uYWw8SURCS2V5UGF0aD4gb2JqZWN0U3RvcmVLZXlQYXRoOwogICAgICAg
ICAgICAgaWYgKCFkZXNlcmlhbGl6ZUlEQktleVBhdGgocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
aW50OF90Kj4oa2V5UGF0aEJ1ZmZlci5kYXRhKCkpLCBrZXlQYXRoQnVmZmVyLnNpemUoKSwgb2Jq
ZWN0U3RvcmVLZXlQYXRoKSkgewogICAgICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRv
IGV4dHJhY3Qga2V5IHBhdGggZnJvbSBkYXRhYmFzZSIpOwogICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwpAQCAtNjA3LDcgKzYwNyw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFz
ZUluZm8+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZXh0cmFjdEV4aXN0aW5nRGF0YWJhc2VJCiAK
ICAgICAgICAgICAgIGJvb2wgYXV0b0luY3JlbWVudCA9IHNxbC5nZXRDb2x1bW5JbnQoMyk7CiAK
LSAgICAgICAgICAgIGRhdGFiYXNlSW5mby0+YWRkRXhpc3RpbmdPYmplY3RTdG9yZSh7IG9iamVj
dFN0b3JlSUQsIG9iamVjdFN0b3JlTmFtZSwgb2JqZWN0U3RvcmVLZXlQYXRoLCBhdXRvSW5jcmVt
ZW50IH0pOworICAgICAgICAgICAgZGF0YWJhc2VJbmZvLT5hZGRFeGlzdGluZ09iamVjdFN0b3Jl
KHsgb2JqZWN0U3RvcmVJRCwgb2JqZWN0U3RvcmVOYW1lLCBXVEZNb3ZlKG9iamVjdFN0b3JlS2V5
UGF0aCksIGF1dG9JbmNyZW1lbnQgfSk7CiAKICAgICAgICAgICAgIHJlc3VsdCA9IHNxbC5zdGVw
KCk7CiAgICAgICAgIH0KQEAgLTYzMiwxMSArNjMyLDE1IEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJE
YXRhYmFzZUluZm8+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZXh0cmFjdEV4aXN0aW5nRGF0YWJh
c2VJCiAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4ga2V5UGF0aEJ1ZmZlcjsKICAgICAgICAgICAg
IHNxbC5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMywga2V5UGF0aEJ1ZmZlcik7CiAKLSAgICAgICAg
ICAgIElEQktleVBhdGggaW5kZXhLZXlQYXRoOworICAgICAgICAgICAgT3B0aW9uYWw8SURCS2V5
UGF0aD4gaW5kZXhLZXlQYXRoOwogICAgICAgICAgICAgaWYgKCFkZXNlcmlhbGl6ZUlEQktleVBh
dGgocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oa2V5UGF0aEJ1ZmZlci5kYXRhKCkp
LCBrZXlQYXRoQnVmZmVyLnNpemUoKSwgaW5kZXhLZXlQYXRoKSkgewogICAgICAgICAgICAgICAg
IExPR19FUlJPUigiVW5hYmxlIHRvIGV4dHJhY3Qga2V5IHBhdGggZnJvbSBkYXRhYmFzZSIpOwog
ICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKCFpbmRleEtleVBhdGgpIHsKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJs
ZSB0byBleHRyYWN0IGtleSBwYXRoIGZyb20gZGF0YWJhc2UiKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgYm9vbCB1bmlxdWUg
PSBzcWwuZ2V0Q29sdW1uSW50KDQpOwogICAgICAgICAgICAgYm9vbCBtdWx0aUVudHJ5ID0gc3Fs
LmdldENvbHVtbkludCg1KTsKQEAgLTY0Nyw3ICs2NTEsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SURC
RGF0YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmV4dHJhY3RFeGlzdGluZ0RhdGFi
YXNlSQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBvYmplY3RTdG9yZS0+YWRkRXhpc3RpbmdJbmRleCh7IGluZGV4SUQsIG9iamVj
dFN0b3JlSUQsIGluZGV4TmFtZSwgaW5kZXhLZXlQYXRoLCB1bmlxdWUsIG11bHRpRW50cnkgfSk7
CisgICAgICAgICAgICBvYmplY3RTdG9yZS0+YWRkRXhpc3RpbmdJbmRleCh7IGluZGV4SUQsIG9i
amVjdFN0b3JlSUQsIGluZGV4TmFtZSwgV1RGTW92ZShpbmRleEtleVBhdGgudmFsdWUoKSksIHVu
aXF1ZSwgbXVsdGlFbnRyeSB9KTsKIAogICAgICAgICAgICAgcmVzdWx0ID0gc3FsLnN0ZXAoKTsK
ICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKaW5kZXggMzAyZjgzN2ZkOWI1ODVj
ODM2ZWE5YTU5MzBlYjI2OGI0MTM3MmZmOS4uOGZlZGNmNjY3ZmYyMTk2NmI0M2EzYzczYTU0OTNj
MTczMDNkMGQ0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCkBAIC05NTMsNyArOTUzLDcg
QEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkKHVpbnQ2NF90IGNhbGxi
YWNrSWRlbnRpZmllciwgY29uc3QgSURCUmUKICAgICAvLyBJZiBPYmplY3RTdG9yZSBoYXMgYSBr
ZXkgcGF0aCBhbmQgdGhlIGtleSBpcyBhdXRvZ2VuZXJhdGVkLCB0aGVuIGluamVjdCB0aGUga2V5
IGludG8gdGhlIHZhbHVlCiAgICAgLy8gdXNpbmcgc3RlcHMgdG8gYXNzaWduIGEga2V5IHRvIGEg
dmFsdWUgdXNpbmcgYSBrZXkgcGF0aC4KICAgICBUaHJlYWRTYWZlRGF0YUJ1ZmZlciBpbmplY3Rl
ZFJlY29yZFZhbHVlOwotICAgIGlmICh1c2VkS2V5SXNHZW5lcmF0ZWQgJiYgIW9iamVjdFN0b3Jl
SW5mby0+a2V5UGF0aCgpLmlzTnVsbCgpKSB7CisgICAgaWYgKHVzZWRLZXlJc0dlbmVyYXRlZCAm
JiBvYmplY3RTdG9yZUluZm8tPmtleVBhdGgoKSkgewogICAgICAgICBWTSYgdm0gPSBkYXRhYmFz
ZVRocmVhZFZNKCk7CiAgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogICAgICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC05NjQsNyArOTY0LDcgQEAg
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkKHVpbnQ2NF90IGNhbGxiYWNr
SWRlbnRpZmllciwgY29uc3QgSURCUmUKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
Ci0gICAgICAgIGlmICghaW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKGRhdGFiYXNlVGhyZWFk
RXhlY1N0YXRlKCksIHVzZWRLZXksIHZhbHVlLCBvYmplY3RTdG9yZUluZm8tPmtleVBhdGgoKSkp
IHsKKyAgICAgICAgaWYgKCFpbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoZGF0YWJhc2VUaHJl
YWRFeGVjU3RhdGUoKSwgdXNlZEtleSwgdmFsdWUsIG9iamVjdFN0b3JlSW5mby0+a2V5UGF0aCgp
LnZhbHVlKCkpKSB7CiAgICAgICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jv
c3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFk
ZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJvcihJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q29u
c3RyYWludEVycm9yLCBBU0NJSUxpdGVyYWwoIlVuYWJsZSB0byBpbmplY3QgcmVjb3JkIGtleSBp
bnRvIHJlY29yZCB2YWx1ZSIpKSwgdXNlZEtleSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFy
ZWQvSURCRGF0YWJhc2VJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NoYXJlZC9JREJEYXRhYmFzZUluZm8uY3BwCmluZGV4IDQ0YzJiNDYyY2RjNDg2YTI5NDFkZjI1
ZWFjZjBhNmM4ODA1Mzc1YzcuLmY5ODU3MTcyOWZkNjZjNmE0Mzc0YWQyYTk5NmRmNmM0ZjY3MTM3
YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9J
REJEYXRhYmFzZUluZm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NoYXJlZC9JREJEYXRhYmFzZUluZm8uY3BwCkBAIC02Niw5ICs2Niw5IEBAIGJvb2wgSURCRGF0
YWJhc2VJbmZvOjpoYXNPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1JREJPYmplY3RTdG9yZUluZm8gSURCRGF0YWJhc2VJbmZvOjpj
cmVhdGVOZXdPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgm
IGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCkKK0lEQk9iamVjdFN0b3JlSW5mbyBJREJEYXRh
YmFzZUluZm86OmNyZWF0ZU5ld09iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgT3B0aW9u
YWw8SURCS2V5UGF0aD4mJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQpCiB7Ci0gICAgSURC
T2JqZWN0U3RvcmVJbmZvIGluZm8oKyttX21heE9iamVjdFN0b3JlSUQsIG5hbWUsIGtleVBhdGgs
IGF1dG9JbmNyZW1lbnQpOworICAgIElEQk9iamVjdFN0b3JlSW5mbyBpbmZvKCsrbV9tYXhPYmpl
Y3RTdG9yZUlELCBuYW1lLCBXVEZNb3ZlKGtleVBhdGgpLCBhdXRvSW5jcmVtZW50KTsKICAgICBt
X29iamVjdFN0b3JlTWFwLnNldChpbmZvLmlkZW50aWZpZXIoKSwgaW5mbyk7CiAgICAgcmV0dXJu
IGluZm87CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
aGFyZWQvSURCRGF0YWJhc2VJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zaGFyZWQvSURCRGF0YWJhc2VJbmZvLmgKaW5kZXggOGUzZDQ4MTQ1NDQ1Y2E2ZTFjMjg2ZGI2
NWFmNDdlNzgxODkwMmUxNi4uZTBiNTE0NDgzNTVjOGMwMzJiYjU2ZmU3NTIzYTQ1MTk2Y2Q2Zjlh
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lE
QkRhdGFiYXNlSW5mby5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3No
YXJlZC9JREJEYXRhYmFzZUluZm8uaApAQCAtMzMsOCArMzMsNiBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWNsYXNzIElEQktleVBhdGg7Ci0KIGNsYXNzIElEQkRhdGFiYXNlSW5mbyB7CiBw
dWJsaWM6CiAgICAgSURCRGF0YWJhc2VJbmZvKGNvbnN0IFN0cmluZyYgbmFtZSwgdWludDY0X3Qg
dmVyc2lvbik7CkBAIC01MCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICB1aW50NjRfdCB2ZXJzaW9u
KCkgY29uc3QgeyByZXR1cm4gbV92ZXJzaW9uOyB9CiAKICAgICBib29sIGhhc09iamVjdFN0b3Jl
KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7Ci0gICAgSURCT2JqZWN0U3RvcmVJbmZvIGNyZWF0
ZU5ld09iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJv
b2wgYXV0b0luY3JlbWVudCk7CisgICAgSURCT2JqZWN0U3RvcmVJbmZvIGNyZWF0ZU5ld09iamVj
dFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgT3B0aW9uYWw8SURCS2V5UGF0aD4mJiwgYm9vbCBh
dXRvSW5jcmVtZW50KTsKICAgICB2b2lkIGFkZEV4aXN0aW5nT2JqZWN0U3RvcmUoY29uc3QgSURC
T2JqZWN0U3RvcmVJbmZvJik7CiAgICAgSURCT2JqZWN0U3RvcmVJbmZvKiBpbmZvRm9yRXhpc3Rp
bmdPYmplY3RTdG9yZSh1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpOwogICAgIElEQk9i
amVjdFN0b3JlSW5mbyogaW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBv
YmplY3RTdG9yZU5hbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2hhcmVkL0lEQkluZGV4SW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zaGFyZWQvSURCSW5kZXhJbmZvLmNwcAppbmRleCBjYmY4NWY2MWM4NDVjMzA1MTBk
MDRjN2ZhYzY4OTUyYTc4ODYxYjBlLi5lYWI3ZmY2ZDc1NDJkYzFiZWRmNTRiMmJkZGM3ZmU2ZWEz
ZWYxZGVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFy
ZWQvSURCSW5kZXhJbmZvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zaGFyZWQvSURCSW5kZXhJbmZvLmNwcApAQCAtMzQsMTEgKzM0LDExIEBAIElEQkluZGV4SW5m
bzo6SURCSW5kZXhJbmZvKCkKIHsKIH0KIAotSURCSW5kZXhJbmZvOjpJREJJbmRleEluZm8odWlu
dDY0X3QgaWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29s
IG11bHRpRW50cnkpCitJREJJbmRleEluZm86OklEQkluZGV4SW5mbyh1aW50NjRfdCBpZGVudGlm
aWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmFtZSwg
SURCS2V5UGF0aCYmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnkpCiAgICAg
OiBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKICAgICAsIG1fb2JqZWN0U3RvcmVJZGVudGlmaWVy
KG9iamVjdFN0b3JlSWRlbnRpZmllcikKICAgICAsIG1fbmFtZShuYW1lKQotICAgICwgbV9rZXlQ
YXRoKGtleVBhdGgpCisgICAgLCBtX2tleVBhdGgoV1RGTW92ZShrZXlQYXRoKSkKICAgICAsIG1f
dW5pcXVlKHVuaXF1ZSkKICAgICAsIG1fbXVsdGlFbnRyeShtdWx0aUVudHJ5KQogewpAQCAtNDYs
NyArNDYsNyBAQCBJREJJbmRleEluZm86OklEQkluZGV4SW5mbyh1aW50NjRfdCBpZGVudGlmaWVy
LCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsCiAKIElEQkluZGV4SW5mbyBJREJJbmRl
eEluZm86Omlzb2xhdGVkQ29weSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHsgbV9pZGVudGlmaWVy
LCBtX29iamVjdFN0b3JlSWRlbnRpZmllciwgbV9uYW1lLmlzb2xhdGVkQ29weSgpLCBtX2tleVBh
dGguaXNvbGF0ZWRDb3B5KCksIG1fdW5pcXVlLCBtX211bHRpRW50cnkgfTsKKyAgICByZXR1cm4g
eyBtX2lkZW50aWZpZXIsIG1fb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBtX25hbWUuaXNvbGF0ZWRD
b3B5KCksIElEQktleVBhdGhJc29sYXRlZENvcHkobV9rZXlQYXRoKSwgbV91bmlxdWUsIG1fbXVs
dGlFbnRyeSB9OwogfQogCiAjaWYgIUxPR19ESVNBQkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkluZGV4SW5mby5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkluZGV4SW5mby5oCmluZGV4IDdmMDlk
OTJlMGI5NjliNzdiMTI1MWY1ZmVlOWU5NDJkMmM2MmRiOWUuLjgxNTc3NThlNjc0NDg0NDJkMDUz
M2FhOWFlNjUwY2E1M2MyMDdmYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NoYXJlZC9JREJJbmRleEluZm8uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCSW5kZXhJbmZvLmgKQEAgLTM2LDcgKzM2LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSURCSW5kZXhJbmZvIHsKIHB1YmxpYzoKICAgICBXRUJD
T1JFX0VYUE9SVCBJREJJbmRleEluZm8oKTsKLSAgICBJREJJbmRleEluZm8odWludDY0X3QgaWRl
bnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5KTsKKyAg
ICBJREJJbmRleEluZm8odWludDY0X3QgaWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5hbWUsIElEQktleVBhdGgmJiwgYm9vbCB1bmlxdWUs
IGJvb2wgbXVsdGlFbnRyeSk7CiAKICAgICBJREJJbmRleEluZm8gaXNvbGF0ZWRDb3B5KCkgY29u
c3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJl
ZC9JREJPYmplY3RTdG9yZUluZm8uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2hhcmVkL0lEQk9iamVjdFN0b3JlSW5mby5jcHAKaW5kZXggM2YxYzg1ZTFkZmQwYjNlMGE5
ZThlZDJjZTc1YzM3Mzg1NzE4OWI3OC4uZTk2ZGU3NDg0YjBkM2EwZjZjMTI2YzZiMDM4ZWY3NDMx
Y2RlN2NlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hh
cmVkL0lEQk9iamVjdFN0b3JlSW5mby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0b3JlSW5mby5jcHAKQEAgLTM1LDE3ICszNSwxNyBA
QCBJREJPYmplY3RTdG9yZUluZm86OklEQk9iamVjdFN0b3JlSW5mbygpCiB7CiB9CiAKLUlEQk9i
amVjdFN0b3JlSW5mbzo6SURCT2JqZWN0U3RvcmVJbmZvKHVpbnQ2NF90IGlkZW50aWZpZXIsIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCBhdXRvSW5j
cmVtZW50KQorSURCT2JqZWN0U3RvcmVJbmZvOjpJREJPYmplY3RTdG9yZUluZm8odWludDY0X3Qg
aWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuYW1lLCBPcHRpb25hbDxJREJLZXlQYXRoPiYmIGtl
eVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCkKICAgICA6IG1faWRlbnRpZmllcihpZGVudGlmaWVy
KQogICAgICwgbV9uYW1lKG5hbWUpCi0gICAgLCBtX2tleVBhdGgoa2V5UGF0aCkKKyAgICAsIG1f
a2V5UGF0aChXVEZNb3ZlKGtleVBhdGgpKQogICAgICwgbV9hdXRvSW5jcmVtZW50KGF1dG9JbmNy
ZW1lbnQpCiB7CiB9CiAKLUlEQkluZGV4SW5mbyBJREJPYmplY3RTdG9yZUluZm86OmNyZWF0ZU5l
d0luZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9v
bCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSkKK0lEQkluZGV4SW5mbyBJREJPYmplY3RTdG9yZUlu
Zm86OmNyZWF0ZU5ld0luZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgSURCS2V5UGF0aCYmIGtleVBh
dGgsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnkpCiB7Ci0gICAgSURCSW5kZXhJbmZvIGlu
Zm8oKyttX21heEluZGV4SUQsIG1faWRlbnRpZmllciwgbmFtZSwga2V5UGF0aCwgdW5pcXVlLCBt
dWx0aUVudHJ5KTsKKyAgICBJREJJbmRleEluZm8gaW5mbygrK21fbWF4SW5kZXhJRCwgbV9pZGVu
dGlmaWVyLCBuYW1lLCBXVEZNb3ZlKGtleVBhdGgpLCB1bmlxdWUsIG11bHRpRW50cnkpOwogICAg
IG1faW5kZXhNYXAuc2V0KGluZm8uaWRlbnRpZmllcigpLCBpbmZvKTsKICAgICByZXR1cm4gaW5m
bzsKIH0KQEAgLTk2LDcgKzk2LDcgQEAgSURCSW5kZXhJbmZvKiBJREJPYmplY3RTdG9yZUluZm86
OmluZm9Gb3JFeGlzdGluZ0luZGV4KHVpbnQ2NF90IGlkZW50aWZpZXIpCiAKIElEQk9iamVjdFN0
b3JlSW5mbyBJREJPYmplY3RTdG9yZUluZm86Omlzb2xhdGVkQ29weSgpIGNvbnN0CiB7Ci0gICAg
SURCT2JqZWN0U3RvcmVJbmZvIHJlc3VsdCA9IHsgbV9pZGVudGlmaWVyLCBtX25hbWUuaXNvbGF0
ZWRDb3B5KCksIG1fa2V5UGF0aC5pc29sYXRlZENvcHkoKSwgbV9hdXRvSW5jcmVtZW50IH07Cisg
ICAgSURCT2JqZWN0U3RvcmVJbmZvIHJlc3VsdCA9IHsgbV9pZGVudGlmaWVyLCBtX25hbWUuaXNv
bGF0ZWRDb3B5KCksIElEQktleVBhdGhJc29sYXRlZENvcHkobV9rZXlQYXRoKSwgbV9hdXRvSW5j
cmVtZW50IH07CiAKICAgICBmb3IgKGF1dG8mIGl0ZXJhdG9yIDogbV9pbmRleE1hcCkgewogICAg
ICAgICByZXN1bHQubV9pbmRleE1hcC5zZXQoaXRlcmF0b3Iua2V5LCBpdGVyYXRvci52YWx1ZS5p
c29sYXRlZENvcHkoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zaGFyZWQvSURCT2JqZWN0U3RvcmVJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zaGFyZWQvSURCT2JqZWN0U3RvcmVJbmZvLmgKaW5kZXggZGRlYTFlYTIxM2Fh
NDgzMzFhYmQ2MTM4NmQxNGM2ZmYxY2I0NGIxOC4uNTA3NWE0MTRiOWMzMTI1YmQzZTBhOGNmMTg3
ODRiZDY3NzQ2NjkxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2hhcmVkL0lEQk9iamVjdFN0b3JlSW5mby5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJPYmplY3RTdG9yZUluZm8uaApAQCAtMzUsMTYgKzM1LDE0
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSURCS2V5UGF0aDsKLQogY2xhc3Mg
SURCT2JqZWN0U3RvcmVJbmZvIHsKIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBJREJPYmpl
Y3RTdG9yZUluZm8oKTsKLSAgICBJREJPYmplY3RTdG9yZUluZm8odWludDY0X3QgaWRlbnRpZmll
ciwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVt
ZW50KTsKKyAgICBJREJPYmplY3RTdG9yZUluZm8odWludDY0X3QgaWRlbnRpZmllciwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBPcHRpb25hbDxJREJLZXlQYXRoPiYmLCBib29sIGF1dG9JbmNyZW1lbnQp
OwogCiAgICAgdWludDY0X3QgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmll
cjsgfQogICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQot
ICAgIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgoKSBjb25zdCB7IHJldHVybiBtX2tleVBhdGg7
IH0KKyAgICBjb25zdCBPcHRpb25hbDxJREJLZXlQYXRoPiYga2V5UGF0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fa2V5UGF0aDsgfQogICAgIGJvb2wgYXV0b0luY3JlbWVudCgpIGNvbnN0IHsgcmV0dXJu
IG1fYXV0b0luY3JlbWVudDsgfQogICAgIHVpbnQ2NF90IG1heEluZGV4SUQoKSBjb25zdCB7IHJl
dHVybiBtX21heEluZGV4SUQ7IH0KIApAQCAtNTIsNyArNTAsNyBAQCBwdWJsaWM6CiAKICAgICBJ
REJPYmplY3RTdG9yZUluZm8gaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiAKLSAgICBJREJJbmRleElu
Zm8gY3JlYXRlTmV3SW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwg
Ym9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSk7CisgICAgSURCSW5kZXhJbmZvIGNyZWF0ZU5l
d0luZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgSURCS2V5UGF0aCYmLCBib29sIHVuaXF1ZSwgYm9v
bCBtdWx0aUVudHJ5KTsKICAgICB2b2lkIGFkZEV4aXN0aW5nSW5kZXgoY29uc3QgSURCSW5kZXhJ
bmZvJik7CiAgICAgYm9vbCBoYXNJbmRleChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0OwogICAg
IGJvb2wgaGFzSW5kZXgodWludDY0X3QgaW5kZXhJZGVudGlmaWVyKSBjb25zdDsKQEAgLTc1LDcg
KzczLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB1aW50NjRfdCBtX2lkZW50aWZpZXIgeyAw
IH07CiAgICAgU3RyaW5nIG1fbmFtZTsKLSAgICBJREJLZXlQYXRoIG1fa2V5UGF0aDsKKyAgICBP
cHRpb25hbDxJREJLZXlQYXRoPiBtX2tleVBhdGg7CiAgICAgYm9vbCBtX2F1dG9JbmNyZW1lbnQg
eyBmYWxzZSB9OwogICAgIHVpbnQ2NF90IG1fbWF4SW5kZXhJRCB7IDAgfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAppbmRleCA1
NzFkYmMxZTA5Y2EzZmUxNTJlZDEzMmY4YzBjYjAwYmRkYzY5NjJkLi5kNjdjNDcwMjk0YjM5N2Rm
NmVkYTM2ZTgxNGU2MWVkNGJmZWNlZjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcApAQCAtMjQyLDExICsyNDIsMTEgQEAgYm9v
bCBpbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoRXhlY1N0YXRlJiBleGVjLCBjb25zdCBJREJL
ZXlEYXRhJiBrZXlEYXRhLCBKU1YKIHsKICAgICBMT0coSW5kZXhlZERCLCAiaW5qZWN0SURCS2V5
SW50b1NjcmlwdFZhbHVlIik7CiAKLSAgICBBU1NFUlQoa2V5UGF0aC50eXBlKCkgPT0gSURCS2V5
UGF0aDo6VHlwZTo6U3RyaW5nKTsKKyAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxT
dHJpbmc+KGtleVBhdGgpKTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IGtleVBhdGhFbGVtZW50czsK
ICAgICBJREJLZXlQYXRoUGFyc2VFcnJvciBlcnJvcjsKLSAgICBJREJQYXJzZUtleVBhdGgoa2V5
UGF0aC5zdHJpbmcoKSwga2V5UGF0aEVsZW1lbnRzLCBlcnJvcik7CisgICAgSURCUGFyc2VLZXlQ
YXRoKFdURjo6Z2V0PFN0cmluZz4oa2V5UGF0aCksIGtleVBhdGhFbGVtZW50cywgZXJyb3IpOwog
ICAgIEFTU0VSVChlcnJvciA9PSBJREJLZXlQYXRoUGFyc2VFcnJvcjo6Tm9uZSk7CiAKICAgICBp
ZiAoa2V5UGF0aEVsZW1lbnRzLmlzRW1wdHkoKSkKQEAgLTI2OSwxMCArMjY5LDggQEAgYm9vbCBp
bmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoRXhlY1N0YXRlJiBleGVjLCBjb25zdCBJREJLZXlE
YXRhJiBrZXlEYXRhLCBKU1YKIAogUmVmUHRyPElEQktleT4gbWF5YmVDcmVhdGVJREJLZXlGcm9t
U2NyaXB0VmFsdWVBbmRLZXlQYXRoKEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgSlNWYWx1ZSYgdmFs
dWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCiB7Ci0gICAgQVNTRVJUKCFrZXlQYXRoLmlz
TnVsbCgpKTsKLQotICAgIGlmIChrZXlQYXRoLnR5cGUoKSA9PSBJREJLZXlQYXRoOjpUeXBlOjpB
cnJheSkgewotICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYXJyYXkgPSBrZXlQYXRoLmFy
cmF5KCk7CisgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPFN0cmluZz4+KGtl
eVBhdGgpKSB7CisgICAgICAgIGF1dG8mIGFycmF5ID0gV1RGOjpnZXQ8VmVjdG9yPFN0cmluZz4+
KGtleVBhdGgpOwogICAgICAgICBWZWN0b3I8UmVmUHRyPElEQktleT4+IHJlc3VsdDsKICAgICAg
ICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoYXJyYXkuc2l6ZSgpKTsKICAgICAgICAg
Zm9yIChhdXRvJiBzdHJpbmcgOiBhcnJheSkgewpAQCAtMjg0LDE4ICsyODIsMTcgQEAgUmVmUHRy
PElEQktleT4gbWF5YmVDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKEV4ZWNT
dGF0ZSYgZXhlYywgY29uc3QKICAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlQXJyYXkoV1RG
TW92ZShyZXN1bHQpKTsKICAgICB9CiAKLSAgICBBU1NFUlQoa2V5UGF0aC50eXBlKCkgPT0gSURC
S2V5UGF0aDo6VHlwZTo6U3RyaW5nKTsKLSAgICByZXR1cm4gaW50ZXJuYWxDcmVhdGVJREJLZXlG
cm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKGV4ZWMsIHZhbHVlLCBrZXlQYXRoLnN0cmluZygpKTsK
KyAgICByZXR1cm4gaW50ZXJuYWxDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRo
KGV4ZWMsIHZhbHVlLCBXVEY6OmdldDxTdHJpbmc+KGtleVBhdGgpKTsKIH0KIAogYm9vbCBjYW5J
bmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoRXhlY1N0YXRlJiBleGVjLCBjb25zdCBKU1ZhbHVl
JiBzY3JpcHRWYWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKIHsKICAgICBMT0coU3Rv
cmFnZUFQSSwgImNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZSIpOwogCi0gICAgQVNTRVJU
KGtleVBhdGgudHlwZSgpID09IElEQktleVBhdGg6OlR5cGU6OlN0cmluZyk7CisgICAgQVNTRVJU
KFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihrZXlQYXRoKSk7CiAgICAgVmVjdG9yPFN0
cmluZz4ga2V5UGF0aEVsZW1lbnRzOwogICAgIElEQktleVBhdGhQYXJzZUVycm9yIGVycm9yOwot
ICAgIElEQlBhcnNlS2V5UGF0aChrZXlQYXRoLnN0cmluZygpLCBrZXlQYXRoRWxlbWVudHMsIGVy
cm9yKTsKKyAgICBJREJQYXJzZUtleVBhdGgoV1RGOjpnZXQ8U3RyaW5nPihrZXlQYXRoKSwga2V5
UGF0aEVsZW1lbnRzLCBlcnJvcik7CiAgICAgQVNTRVJUKGVycm9yID09IElEQktleVBhdGhQYXJz
ZUVycm9yOjpOb25lKTsKIAogICAgIGlmICgha2V5UGF0aEVsZW1lbnRzLnNpemUoKSkKQEAgLTMz
OSwzNSArMzM2LDMwIEBAIEpTQzo6SlNWYWx1ZSBpZGJLZXlEYXRhVG9TY3JpcHRWYWx1ZShKU0M6
OkV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgSURCS2V5RGF0YSYga2V5CiAKIHN0YXRpYyBWZWN0b3I8
SURCS2V5RGF0YT4gY3JlYXRlS2V5UGF0aEFycmF5KEV4ZWNTdGF0ZSYgZXhlYywgSlNWYWx1ZSB2
YWx1ZSwgY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvKQogewotICAgIFZlY3RvcjxJREJLZXlEYXRh
PiBrZXlzOwotCi0gICAgc3dpdGNoIChpbmZvLmtleVBhdGgoKS50eXBlKCkpIHsKLSAgICBjYXNl
IElEQktleVBhdGg6OlR5cGU6OkFycmF5OgotICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogaW5m
by5rZXlQYXRoKCkuYXJyYXkoKSkgewotICAgICAgICAgICAgYXV0byBrZXkgPSBpbnRlcm5hbENy
ZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoZXhlYywgdmFsdWUsIGVudHJ5KTsK
LSAgICAgICAgICAgIGlmICgha2V5KQotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAg
ICAgICAgICBrZXlzLmFwcGVuZChrZXkuZ2V0KCkpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSURCS2V5UGF0aDo6VHlwZTo6U3RyaW5nOiB7Ci0gICAgICAgIGF1dG8gaWRi
S2V5ID0gaW50ZXJuYWxDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKGV4ZWMs
IHZhbHVlLCBpbmZvLmtleVBhdGgoKS5zdHJpbmcoKSk7CisgICAgYXV0byB2aXNpdG9yID0gV1RG
OjptYWtlVmlzaXRvcihbJl0oY29uc3QgU3RyaW5nJiBzdHJpbmcpIC0+IFZlY3RvcjxJREJLZXlE
YXRhPiB7CisgICAgICAgIGF1dG8gaWRiS2V5ID0gaW50ZXJuYWxDcmVhdGVJREJLZXlGcm9tU2Ny
aXB0VmFsdWVBbmRLZXlQYXRoKGV4ZWMsIHZhbHVlLCBzdHJpbmcpOwogICAgICAgICBpZiAoIWlk
YktleSkKICAgICAgICAgICAgIHJldHVybiB7IH07CiAKKyAgICAgICAgVmVjdG9yPElEQktleURh
dGE+IGtleXM7CiAgICAgICAgIGlmIChpbmZvLm11bHRpRW50cnkoKSAmJiBpZGJLZXktPnR5cGUo
KSA9PSBJbmRleGVkREI6OkFycmF5KSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGlk
YktleS0+YXJyYXkoKSkKICAgICAgICAgICAgICAgICBrZXlzLmFwcGVuZChrZXkuZ2V0KCkpOwog
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGtleXMuYXBwZW5kKGlkYktleS5nZXQoKSk7Cisg
ICAgICAgIHJldHVybiBrZXlzOworICAgIH0sIFsmXShjb25zdCBWZWN0b3I8U3RyaW5nPiYgdmVj
dG9yKSAtPiBWZWN0b3I8SURCS2V5RGF0YT4geworICAgICAgICBWZWN0b3I8SURCS2V5RGF0YT4g
a2V5czsKKyAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IHZlY3RvcikgeworICAgICAgICAgICAg
YXV0byBrZXkgPSBpbnRlcm5hbENyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgo
ZXhlYywgdmFsdWUsIGVudHJ5KTsKKyAgICAgICAgICAgIGlmICgha2V5KQorICAgICAgICAgICAg
ICAgIHJldHVybiB7IH07CisgICAgICAgICAgICBrZXlzLmFwcGVuZChrZXkuZ2V0KCkpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBrZXlzOworICAgIH0pOwogCi0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICBjYXNlIElEQktleVBhdGg6OlR5cGU6Ok51bGw6Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGtleXM7CisgICAgcmV0
dXJuIFdURjo6dmlzaXQodmlzaXRvciwgaW5mby5rZXlQYXRoKCkpOwogfQogCiB2b2lkIGdlbmVy
YXRlSW5kZXhLZXlGb3JWYWx1ZShFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0IElEQkluZGV4SW5mbyYg
aW5mbywgSlNWYWx1ZSB2YWx1ZSwgSW5kZXhLZXkmIG91dEtleSkKQEAgLTM4MCwyMiArMzcyLDE3
IEBAIHZvaWQgZ2VuZXJhdGVJbmRleEtleUZvclZhbHVlKEV4ZWNTdGF0ZSYgZXhlYywgY29uc3Qg
SURCSW5kZXhJbmZvJiBpbmZvLCBKU1ZhbHVlCiAgICAgb3V0S2V5ID0gSW5kZXhLZXkoV1RGTW92
ZShrZXlEYXRhcykpOwogfQogCi1KU1ZhbHVlIHRvSlMoRXhlY1N0YXRlJiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgSURCS2V5UGF0aCYgdmFsdWUpCitKU1Zh
bHVlIHRvSlMoRXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgY29uc3QgT3B0aW9uYWw8SURCS2V5UGF0aD4mIGtleVBhdGgpCiB7Ci0gICAgc3dpdGNoICh2
YWx1ZS50eXBlKCkpIHsKLSAgICBjYXNlIElEQktleVBhdGg6OlR5cGU6Ok51bGw6CisgICAgaWYg
KCFrZXlQYXRoKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgY2FzZSBJREJLZXlQYXRo
OjpUeXBlOjpTdHJpbmc6Ci0gICAgICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUs
IHZhbHVlLnN0cmluZygpKTsKLSAgICBjYXNlIElEQktleVBhdGg6OlR5cGU6OkFycmF5OgotICAg
ICAgICBhdXRvIGtleVBhdGhzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7Ci0gICAgICAgIGZv
ciAoYXV0byYgcGF0aCA6IHZhbHVlLmFycmF5KCkpCi0gICAgICAgICAgICBrZXlQYXRocy0+YXBw
ZW5kKHBhdGgpOwotICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIGtl
eVBhdGhzKTsKLSAgICB9CiAKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
anNOdWxsKCk7CisgICAgYXV0byB2aXNpdG9yID0gV1RGOjptYWtlVmlzaXRvcihbJl0oY29uc3Qg
U3RyaW5nJiBzdHJpbmcpIC0+IEpTVmFsdWUgeworICAgICAgICByZXR1cm4gdG9KUzxJRExET01T
dHJpbmc+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0cmluZyk7CisgICAgfSwgWyZdKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiB2ZWN0b3IpIC0+IEpTVmFsdWUgeworICAgICAgICByZXR1cm4gdG9KUzxJ
RExTZXF1ZW5jZTxJRExET01TdHJpbmc+PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2ZWN0b3IpOwor
ICAgIH0pOworICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIGtleVBhdGgudmFsdWUoKSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuaAppbmRleCBhYTRmNWMzYmI5ODgwOGNhM2E0ODcw
YTg3YTM5NWM4MTA2N2M5MjE2Li43NTdhMjlhMDk3ZjBjYjI4ZDI2YjViNGZmMTAxYzJhN2FhZjI5
Yjg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRp
bGl0aWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxp
dGllcy5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
IAorI2luY2x1ZGUgIklEQktleVBhdGguaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBu
YW1lc3BhY2UgSlNDIHsKQEAgLTQxLDEzICs0MiwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBj
bGFzcyBJREJJbmRleEluZm87CiBjbGFzcyBJREJLZXk7CiBjbGFzcyBJREJLZXlEYXRhOwotY2xh
c3MgSURCS2V5UGF0aDsKIGNsYXNzIElEQlZhbHVlOwogY2xhc3MgSW5kZXhLZXk7CiBjbGFzcyBK
U0RPTUdsb2JhbE9iamVjdDsKIGNsYXNzIFRocmVhZFNhZmVEYXRhQnVmZmVyOwogCi1KU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgY29uc3QgSURC
S2V5UGF0aCYpOworLy8gRklYTUU6IFJlbW92ZSB0aGlzIG9uY2Ugd2Ugc3VwcG9ydCByZXR1cm5p
bmcgdW5pb24gdHlwZXMuCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9N
R2xvYmFsT2JqZWN0JiwgY29uc3QgT3B0aW9uYWw8SURCS2V5UGF0aD4mKTsKIAogUmVmUHRyPElE
QktleT4gbWF5YmVDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKEpTQzo6RXhl
Y1N0YXRlJiwgY29uc3QgSlNDOjpKU1ZhbHVlJiwgY29uc3QgSURCS2V5UGF0aCYpOwogYm9vbCBj
YW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6
OkpTVmFsdWUmLCBjb25zdCBJREJLZXlQYXRoJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcAppbmRleCBjNWM4MDEzOWQ1M2Qx
NWIxNjVhYTA4YzVhNWJlZGZmNzYwYzhjOWUxLi5jZjQzMGJhZTVkN2I5Y2U1OGZiOTc3ZTQ3ZWE4
ZTQ0N2EzOWFmNzJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9ySW5kZXhlZERCQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JJbmRleGVkREJBZ2VudC5jcHAKQEAgLTE2MiwzOSArMTYyLDI0IEBAIHZvaWQgRXhlY3V0
YWJsZVdpdGhEYXRhYmFzZTo6c3RhcnQoSURCRmFjdG9yeSogaWRiRmFjdG9yeSwgU2VjdXJpdHlP
cmlnaW4qLCBjb25zCiB9CiAKIAotc3RhdGljIFJlZlB0cjxLZXlQYXRoPiBrZXlQYXRoRnJvbUlE
QktleVBhdGgoY29uc3QgSURCS2V5UGF0aCYgaWRiS2V5UGF0aCkKK3N0YXRpYyBSZWZQdHI8S2V5
UGF0aD4ga2V5UGF0aEZyb21JREJLZXlQYXRoKGNvbnN0IE9wdGlvbmFsPElEQktleVBhdGg+JiBp
ZGJLZXlQYXRoKQogewotICAgIFJlZlB0cjxLZXlQYXRoPiBrZXlQYXRoOwotICAgIHN3aXRjaCAo
aWRiS2V5UGF0aC50eXBlKCkpIHsKLSAgICBjYXNlIElEQktleVBhdGg6OlR5cGU6Ok51bGw6Ci0g
ICAgICAgIGtleVBhdGggPSBLZXlQYXRoOjpjcmVhdGUoKQotICAgICAgICAgICAgLnNldFR5cGUo
S2V5UGF0aDo6VHlwZTo6TnVsbCkKLSAgICAgICAgICAgIC5yZWxlYXNlKCk7Ci0gICAgICAgIGJy
ZWFrOwotCi0gICAgY2FzZSBJREJLZXlQYXRoOjpUeXBlOjpTdHJpbmc6Ci0gICAgICAgIGtleVBh
dGggPSBLZXlQYXRoOjpjcmVhdGUoKQotICAgICAgICAgICAgLnNldFR5cGUoS2V5UGF0aDo6VHlw
ZTo6U3RyaW5nKQotICAgICAgICAgICAgLnJlbGVhc2UoKTsKLSAgICAgICAga2V5UGF0aC0+c2V0
U3RyaW5nKGlkYktleVBhdGguc3RyaW5nKCkpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2Ug
SURCS2V5UGF0aDo6VHlwZTo6QXJyYXk6IHsKKyAgICBpZiAoIWlkYktleVBhdGgpCisgICAgICAg
IHJldHVybiBLZXlQYXRoOjpjcmVhdGUoKS5zZXRUeXBlKEtleVBhdGg6OlR5cGU6Ok51bGwpLnJl
bGVhc2UoKTsKKworICAgIGF1dG8gdmlzaXRvciA9IFdURjo6bWFrZVZpc2l0b3IoW10oY29uc3Qg
U3RyaW5nJiBzdHJpbmcpIHsKKyAgICAgICAgUmVmUHRyPEtleVBhdGg+IGtleVBhdGggPSBLZXlQ
YXRoOjpjcmVhdGUoKS5zZXRUeXBlKEtleVBhdGg6OlR5cGU6OlN0cmluZykucmVsZWFzZSgpOwor
ICAgICAgICBrZXlQYXRoLT5zZXRTdHJpbmcoc3RyaW5nKTsKKyAgICAgICAgcmV0dXJuIGtleVBh
dGg7CisgICAgfSwgW10oY29uc3QgVmVjdG9yPFN0cmluZz4mIHZlY3RvcikgewogICAgICAgICBh
dXRvIGFycmF5ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7
Ci0gICAgICAgIGZvciAoYXV0byYgc3RyaW5nIDogaWRiS2V5UGF0aC5hcnJheSgpKQorICAgICAg
ICBmb3IgKGF1dG8mIHN0cmluZyA6IHZlY3RvcikKICAgICAgICAgICAgIGFycmF5LT5hZGRJdGVt
KHN0cmluZyk7Ci0gICAgICAgIGtleVBhdGggPSBLZXlQYXRoOjpjcmVhdGUoKQotICAgICAgICAg
ICAgLnNldFR5cGUoS2V5UGF0aDo6VHlwZTo6QXJyYXkpCi0gICAgICAgICAgICAucmVsZWFzZSgp
OworICAgICAgICBSZWZQdHI8S2V5UGF0aD4ga2V5UGF0aCA9IEtleVBhdGg6OmNyZWF0ZSgpLnNl
dFR5cGUoS2V5UGF0aDo6VHlwZTo6QXJyYXkpLnJlbGVhc2UoKTsKICAgICAgICAga2V5UGF0aC0+
c2V0QXJyYXkoV1RGTW92ZShhcnJheSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBk
ZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4ga2V5UGF0aDsKKyAgICAgICAgcmV0dXJuIGtleVBhdGg7CisgICAgfSk7CisgICAgcmV0dXJu
IFdURjo6dmlzaXQodmlzaXRvciwgaWRiS2V5UGF0aC52YWx1ZSgpKTsKIH0KIAogc3RhdGljIFJl
ZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb25Gb3JEYXRhYmFzZShJREJEYXRhYmFzZSog
aWRiRGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcm
IG1vZGUgPSBJREJUcmFuc2FjdGlvbjo6bW9kZVJlYWRPbmx5KCkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJSZXN1bHQuY3BwIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCUmVzdWx0LmNw
cAppbmRleCBhMGVjODFhM2VkNTg4OTEwYmUyYWEzYjM5YjFjYTAxYjM2ZDhhMjJiLi43MDZjNjJl
YjUyN2YxYjZjZjJiNGFlOTJlMDNmNGQ0OTRkMDliNTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJSZXN1bHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQlJlc3VsdC5jcHAK
QEAgLTI4LDcgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCi0jaW5j
bHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMu
aCIKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YkNvcmVBcmd1bWVudENvZGVycy5jcHAKaW5kZXggMzc5M2ZiYmNiOGYyYzMzNDgwNGE4M2ZjMzIy
ZmY1MWY4MDQ0NzY4NC4uNjZmYzYxMjZkZTMyNGJmZDMyYWM3YjA2NDVlMjk5MTM2YzNlMDJiMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAK
QEAgLTIzMDMsNSArMjMwMywzNSBAQCBib29sIEFyZ3VtZW50Q29kZXI8Q2FwdHVyZURldmljZT46
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXZWJDb3JlOjpDYXB0dXJlRGV2aQogfQogI2VuZGlm
CiAKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKK3ZvaWQgQXJndW1lbnRDb2RlcjxJREJL
ZXlQYXRoPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IElEQktleVBhdGgmIGtleVBh
dGgpCit7CisgICAgYm9vbCBpc1N0cmluZyA9IFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5n
PihrZXlQYXRoKTsKKyAgICBlbmNvZGVyIDw8IGlzU3RyaW5nOworICAgIGlmIChpc1N0cmluZykK
KyAgICAgICAgZW5jb2RlciA8PCBXVEY6OmdldDxTdHJpbmc+KGtleVBhdGgpOworICAgIGVsc2UK
KyAgICAgICAgZW5jb2RlciA8PCBXVEY6OmdldDxWZWN0b3I8U3RyaW5nPj4oa2V5UGF0aCk7Cit9
CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxJREJLZXlQYXRoPjo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIsIElEQktleVBhdGgmIGtleVBhdGgpCit7CisgICAgYm9vbCBpc1N0cmluZzsKKyAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKGlzU3RyaW5nKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
IChpc1N0cmluZykgeworICAgICAgICBTdHJpbmcgc3RyaW5nOworICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHN0cmluZykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGtl
eVBhdGggPSBzdHJpbmc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gdmVj
dG9yOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHZlY3RvcikpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGtleVBhdGggPSB2ZWN0b3I7CisgICAgfQorICAgIHJldHVy
biB0cnVlOworfQorI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIElQQwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCmluZGV4IGI0YjExMWI3MjIzNDU3ZTQ4
YmRlNzJiY2ZlOWJlNzJjOTUyY2ZhN2EuLjYwNGRjOTc4ODYyMWY4MDEyYjM5YTM4ODliYjI4YWVk
NTk2YWE3YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1l
bnRDb2RlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmgKQEAgLTEzNCw2ICsxMzQsMTIgQEAgc3RydWN0IE1lZGlhQ29uc3RyYWludHNEYXRhOwog
fQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKK25hbWVzcGFjZSBXZWJD
b3JlIHsKK3VzaW5nIElEQktleVBhdGggPSBWYXJpYW50PFN0cmluZywgVmVjdG9yPFN0cmluZz4+
OworfQorI2VuZGlmCisKIG5hbWVzcGFjZSBJUEMgewogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1
bWVudENvZGVyPFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybT4gewpAQCAtNTQ3LDYgKzU1MywxNSBA
QCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkNhcHR1cmVEZXZpY2U+
IHsKIH07CiAjZW5kaWYKIAorI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCit0ZW1wbGF0
ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OklEQktleVBhdGg+IHsKKyAgICBzdGF0
aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OklEQktleVBhdGgmKTsKKyAg
ICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6OklEQktleVBhdGgmKTsKK307
CisKKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBJUEMKIAogbmFtZXNwYWNlIFdURiB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2Vi
SURCQ29ubmVjdGlvblRvU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0
YWJhc2VzL0luZGV4ZWREQi9XZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwCmluZGV4IDdiM2Iz
ZjgxNjJiZDNmZmE1ZTkwNmNiODY0Y2Y3OTRiMjU1ZTBhMWQuLmY2ZGVmY2U1N2ZmNGFjMDgzNDFh
NjcyNDUwYzA0Njg1MDcxOTA0ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJDb25u
ZWN0aW9uVG9TZXJ2ZXIuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiRGF0YWJhc2VU
b1dlYlByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uLmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAi
V2ViSURCQ29ubmVjdGlvblRvQ2xpZW50TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJJREJSZXN1
bHQuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMDE0NGViZmZjOTEzNzM1MTcz
ZTI3MmIzNjZlZDI1OTk5Zjk0NGJlNy4uOWI4MjdlZTlhODIwNThlY2ZhM2RjYzVmNDg4NjQyNjVl
MTJjZGE5OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE2LTEwLTI1ICBDaHJpcyBEdW1leiAg
PGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgUmVwbGFjZSBJREJLZXlQYXRoIHdpdGggYSBX
VEY6OlZhcmlhbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2MzkwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFJlYmFzZWxpbmUgYSBmZXcgdGVzdHMgbm93IHRoYXQgSURCSW5kZXgua2V5UGF0aCAvIElE
Qk9iamVjdFN0b3JlLmtleVBhdGgKKyAgICAgICAgbm8gbG9uZ2VyIGluY29ycmVjdGx5IHJldHVy
biBET01TdHJpbmdMaXN0IG9iamVjdHMgYW5kIHJldHVybiByZWd1bGFyCisgICAgICAgIGFycmF5
cyBpbnN0ZWFkLgorCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2lkYmluZGV4
LXByb3BlcnRpZXMtYmFzaWMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhl
ZGRiL21vZGVybi9pZGJpbmRleC1wcm9wZXJ0aWVzLWJhc2ljLXByaXZhdGUtZXhwZWN0ZWQudHh0
OgorCiAyMDE2LTEwLTI1ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAg
ICAgICBJbmRleGVkREIgMi4wOiBTdXBwb3J0IElEQk9iamVjdFN0b3JlIG9wZW5LZXlDdXJzb3Iu
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vaWRiaW5k
ZXgtcHJvcGVydGllcy1iYXNpYy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2lu
ZGV4ZWRkYi9tb2Rlcm4vaWRiaW5kZXgtcHJvcGVydGllcy1iYXNpYy1leHBlY3RlZC50eHQKaW5k
ZXggYzM3YjU1ODNiZDBmNDc0YWI4OGNlY2E3ZDk2ODg4YmMwNDA4Nzg4YS4uNTIwYTIyMTMyZjJi
OWMzMTBlNjBkMGZiZTc3NDI2MzVlOTZjMDliZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvbW9kZXJuL2lkYmluZGV4LXByb3BlcnRpZXMtYmFzaWMtZXhwZWN0ZWQu
dHh0CisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9pZGJpbmRleC1w
cm9wZXJ0aWVzLWJhc2ljLWV4cGVjdGVkLnR4dApAQCAtNDEsMTMgKzQxLDEzIEBAIHRydWUKIFRl
c3RJbmRleDYKIFtvYmplY3QgSURCT2JqZWN0U3RvcmVdCiBUZXN0T2JqZWN0U3RvcmUKLVtvYmpl
Y3QgRE9NU3RyaW5nTGlzdF0KK2ZvbwogZmFsc2UKIGZhbHNlCiBUZXN0SW5kZXg3CiBbb2JqZWN0
IElEQk9iamVjdFN0b3JlXQogVGVzdE9iamVjdFN0b3JlCi1bb2JqZWN0IERPTVN0cmluZ0xpc3Rd
Citmb28sYmFyCiBmYWxzZQogZmFsc2UKIEluaXRpYWwgdXBncmFkZSB2ZXJzaW9uY2hhbmdlIHRy
YW5zYWN0aW9uIGNvbXBsZXRlCkBAIC04NCwxMyArODQsMTMgQEAgdHJ1ZQogVGVzdEluZGV4Ngog
W29iamVjdCBJREJPYmplY3RTdG9yZV0KIFRlc3RPYmplY3RTdG9yZQotW29iamVjdCBET01TdHJp
bmdMaXN0XQorZm9vCiBmYWxzZQogZmFsc2UKIFRlc3RJbmRleDcKIFtvYmplY3QgSURCT2JqZWN0
U3RvcmVdCiBUZXN0T2JqZWN0U3RvcmUKLVtvYmplY3QgRE9NU3RyaW5nTGlzdF0KK2ZvbyxiYXIK
IGZhbHNlCiBmYWxzZQogcmVhZG9ubHkgdHJhbnNhY3Rpb24gY29tcGxldGUKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9pZGJpbmRleC1wcm9wZXJ0aWVz
LWJhc2ljLXByaXZhdGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVk
ZGIvbW9kZXJuL2lkYmluZGV4LXByb3BlcnRpZXMtYmFzaWMtcHJpdmF0ZS1leHBlY3RlZC50eHQK
aW5kZXggYzM3YjU1ODNiZDBmNDc0YWI4OGNlY2E3ZDk2ODg4YmMwNDA4Nzg4YS4uNTIwYTIyMTMy
ZjJiOWMzMTBlNjBkMGZiZTc3NDI2MzVlOTZjMDliZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
c3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2lkYmluZGV4LXByb3BlcnRpZXMtYmFzaWMtcHJpdmF0
ZS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJu
L2lkYmluZGV4LXByb3BlcnRpZXMtYmFzaWMtcHJpdmF0ZS1leHBlY3RlZC50eHQKQEAgLTQxLDEz
ICs0MSwxMyBAQCB0cnVlCiBUZXN0SW5kZXg2CiBbb2JqZWN0IElEQk9iamVjdFN0b3JlXQogVGVz
dE9iamVjdFN0b3JlCi1bb2JqZWN0IERPTVN0cmluZ0xpc3RdCitmb28KIGZhbHNlCiBmYWxzZQog
VGVzdEluZGV4NwogW29iamVjdCBJREJPYmplY3RTdG9yZV0KIFRlc3RPYmplY3RTdG9yZQotW29i
amVjdCBET01TdHJpbmdMaXN0XQorZm9vLGJhcgogZmFsc2UKIGZhbHNlCiBJbml0aWFsIHVwZ3Jh
ZGUgdmVyc2lvbmNoYW5nZSB0cmFuc2FjdGlvbiBjb21wbGV0ZQpAQCAtODQsMTMgKzg0LDEzIEBA
IHRydWUKIFRlc3RJbmRleDYKIFtvYmplY3QgSURCT2JqZWN0U3RvcmVdCiBUZXN0T2JqZWN0U3Rv
cmUKLVtvYmplY3QgRE9NU3RyaW5nTGlzdF0KK2ZvbwogZmFsc2UKIGZhbHNlCiBUZXN0SW5kZXg3
CiBbb2JqZWN0IElEQk9iamVjdFN0b3JlXQogVGVzdE9iamVjdFN0b3JlCi1bb2JqZWN0IERPTVN0
cmluZ0xpc3RdCitmb28sYmFyCiBmYWxzZQogZmFsc2UKIHJlYWRvbmx5IHRyYW5zYWN0aW9uIGNv
bXBsZXRlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292984</attachid>
            <date>2016-10-26 19:19:48 -0700</date>
            <delta_ts>2016-10-26 20:16:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-163909-20161026191600.patch</filename>
            <type>text/plain</type>
            <size>50948</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3OTEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGYzZTI1MzA5YTQzYTY0
MGIwNDBkZThmNzFkNTYxODRmOWRiNWY5OS4uNTg0MDg2YmIyMTgwNTA5Njg1MDY4MjZlOTczYTRi
OTUxMzBjMDNiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyIEBACisyMDE2LTEwLTI1ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgUmVwbGFjZSBJREJLZXlQYXRo
IHdpdGggYSBXVEY6OlZhcmlhbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2MzkwOQorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgor
CisgICAgICAgIFJlcGxhY2UgSURCS2V5UGF0aCBjbGFzcyB3aXRoIHRoZSBJREJLZXlQYXRoVmFy
aWFudCB0eXBlIGVudGlyZWx5CisgICAgICAgIGFuZCByZW5hbWUgSURCS2V5UGF0aFZhcmlhbnQg
dG8gSURCS2V5UGF0aC4KKworICAgICAgICBVbmZvcnR1bmF0ZWx5LCBJREJLZXlQYXRoIHN0aWxs
IG5lZWRzIHNvbWUgc3BlY2lhbCBoYW5kbGluZyB3aGVuCisgICAgICAgIHJldHVybmVkIHRvIHRo
ZSBKYXZhU2NyaXB0IGJlY2F1c2Ugd2UgZG8gbm90IGhhdmUgYSB0b0pTKCkgYWNjZXB0aW5nCisg
ICAgICAgIGEgV1RGOjpWYXJpYW50IGFzIGlucHV0IHlldC4KKworICAgICAgICBUaGVyZSBzaG91
bGQgYmUgbm8gc2lnbmlmaWNhbnQgYmVoYXZpb3IgY2hhbmdlIGV4Y2VwdCB0aGF0CisgICAgICAg
IElEQkluZGV4LmtleVBhdGggLyBJREJPYmplY3RTdG9yZS5rZXlQYXRoIG5vdyByZXR1cm5zIGFu
IGFycmF5IG9mCisgICAgICAgIFN0cmluZ3MgaW5zdGVhZCBvZiBhIERPTVN0cmluZ0xpc3Qgb2Jq
ZWN0IHdoZW4gdGhlIElEQktleVBhdGgKKyAgICAgICAgY29udGFpbnMgYSB2ZWN0b3IuIFRoaXMg
aXMgYSBwcm9ncmVzc2lvbiBhbmQgbWF0Y2hlcyB0aGUKKyAgICAgICAgc3BlY2lmaWNhdGlvbjoK
KyAgICAgICAgLSBodHRwczovL3d3dy53My5vcmcvVFIvSW5kZXhlZERCLyN3aWRsLUlEQkluZGV4
LWtleVBhdGgKKyAgICAgICAgLSBodHRwczovL3d3dy53My5vcmcvVFIvSW5kZXhlZERCLyN3aWRs
LUlEQk9iamVjdFN0b3JlLWtleVBhdGgKKworICAgICAgICBObyBuZXcgdGVzdHMsIHJlYmFzZWxp
bmVkIGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vy
c29yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6dXBkYXRlKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQkdldFJlc3VsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJHZXRSZXN1bHQ6
Omlzb2xhdGVkQ29weSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjppc0lEQktleVBhdGhWYWxpZCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJLZXlQYXRoSXNvbGF0ZWRDb3B5KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJLZXlQYXRoLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlQYXRoSXNvbGF0ZWRDb3B5
KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6a2V5UGF0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJPYmplY3RTdG9yZTo6cHV0T3JBZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0
U3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZS5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJpYWxp
emF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6ZUlEQktleVBhdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6ZGVzZXJpYWxpemVJREJLZXlQYXRoKToKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbi5oOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmV4dHJhY3RFeGlzdGluZ0Rh
dGFiYXNlSW5mbyk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlE
QkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0
YWJhc2U6OnBlcmZvcm1QdXRPckFkZCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hh
cmVkL0lEQkRhdGFiYXNlSW5mby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUlu
Zm86OmNyZWF0ZU5ld09iamVjdFN0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9z
aGFyZWQvSURCRGF0YWJhc2VJbmZvLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hh
cmVkL0lEQkluZGV4SW5mby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEluZm86OklE
QkluZGV4SW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEluZm86Omlzb2xhdGVkQ29w
eSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkluZGV4SW5mby5oOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJPYmplY3RTdG9yZUluZm8uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVJbmZvOjpJREJPYmplY3RTdG9yZUlu
Zm8pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVJbmZvOjpjcmVhdGVOZXdJbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUluZm86Omlzb2xhdGVkQ29weSk6
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0b3JlSW5mby5o
OgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVJbmZvOjprZXlQYXRoKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmluamVjdElEQktleUludG9TY3JpcHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjptYXli
ZUNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6Y2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZUtleVBhdGhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmg6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvckluZGV4ZWREQkFnZW50LmNwcDoKKwogMjAxNi0xMC0yNiAgU2FtIFdlaW5pZyAgPHNh
bUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtXZWJJRExdIE1vdmUgbW9yZSBzdHJpbmcgY29udmVy
c2lvbnMgb3ZlciB0byBKU0RPTUNvbnZlcnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBkMTRjMzdmYjgzMWU5YWY3
ZjI0YTM3N2FlZGNmYzQzODQxYjIwZTAyLi4wODNjMGRkNWFlYjAwN2RiMmQxMWE5YzBjOWU2NGJh
YjU1Yzk2MDQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTYtMTAtMjUgIENocmlz
IER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBSZXBsYWNlIElEQktleVBhdGgg
d2l0aCBhIFdURjo6VmFyaWFudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYzOTA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisK
KyAgICAgICAgQWRkIGNvZGVycyB0byBlbmNvZGUgLyBkZWNvZGUgSURCS2V5UGF0aCB0eXBlIGZv
ciBJUEMuCisKKyAgICAgICAgKiBTaGFyZWQvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJSZXN1
bHQuY3BwOgorICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgorICAg
ICAgICAoSVBDOjpBcmd1bWVudENvZGVyPElEQktleVBhdGg+OjplbmNvZGUpOgorICAgICAgICAo
SVBDOjpBcmd1bWVudENvZGVyPElEQktleVBhdGg+OjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJl
ZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0RhdGFiYXNl
cy9JbmRleGVkREIvV2ViSURCQ29ubmVjdGlvblRvU2VydmVyLmNwcDoKKwogMjAxNi0xMC0yNiAg
RXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBbTWVkaWFT
dHJlYW1dIEFkZCAiaGFzIGNhcHR1cmUgZGV2aWNlIiBiaXQgdG8gbWVkaWEgc3RhdGUgZmxhZ3MK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCmluZGV4
IDU0MTY5MDlhYmQ5NjgwZTZhZmVjYzJjNTFiOWM1YmRhOWZkNDAyYjMuLjE5NWExODIwZjFhMzUy
MGZjNjRmNWRmMmYyZWE5NjJiNDMzZjFmODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcApAQCAtMTk0LDEwICsxOTQsMTAgQEAgRXhjZXB0aW9u
T3I8UmVmPElEQlJlcXVlc3Q+PiBJREJDdXJzb3I6OnVwZGF0ZShFeGVjU3RhdGUmIHN0YXRlLCBK
U1ZhbHVlIHZhbHVlKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSURCRGF0YWJhc2VFeGNl
cHRpb246OkludmFsaWRTdGF0ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRl
ICd1cGRhdGUnIG9uICdJREJDdXJzb3InOiBUaGUgY3Vyc29yIGlzIGEga2V5IGN1cnNvci4iKSB9
OwogCiAgICAgYXV0byYgb2JqZWN0U3RvcmUgPSBlZmZlY3RpdmVPYmplY3RTdG9yZSgpOwotICAg
IGF1dG8mIGtleVBhdGggPSBvYmplY3RTdG9yZS5pbmZvKCkua2V5UGF0aCgpOwotICAgIGNvbnN0
IGJvb2wgdXNlc0luTGluZUtleXMgPSAha2V5UGF0aC5pc051bGwoKTsKKyAgICBhdXRvJiBvcHRp
b25hbEtleVBhdGggPSBvYmplY3RTdG9yZS5pbmZvKCkua2V5UGF0aCgpOworICAgIGNvbnN0IGJv
b2wgdXNlc0luTGluZUtleXMgPSAhIW9wdGlvbmFsS2V5UGF0aDsKICAgICBpZiAodXNlc0luTGlu
ZUtleXMpIHsKLSAgICAgICAgUmVmUHRyPElEQktleT4ga2V5UGF0aEtleSA9IG1heWJlQ3JlYXRl
SURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChzdGF0ZSwgdmFsdWUsIGtleVBhdGgpOwor
ICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlQYXRoS2V5ID0gbWF5YmVDcmVhdGVJREJLZXlGcm9t
U2NyaXB0VmFsdWVBbmRLZXlQYXRoKHN0YXRlLCB2YWx1ZSwgb3B0aW9uYWxLZXlQYXRoLnZhbHVl
KCkpOwogICAgICAgICBJREJLZXlEYXRhIGtleVBhdGhLZXlEYXRhKGtleVBhdGhLZXkuZ2V0KCkp
OwogICAgICAgICBpZiAoIWtleVBhdGhLZXkgfHwga2V5UGF0aEtleURhdGEgIT0gbV9jdXJyZW50
UHJpbWFyeUtleURhdGEpCiAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSURCRGF0YWJh
c2VFeGNlcHRpb246OkRhdGFFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAn
dXBkYXRlJyBvbiAnSURCQ3Vyc29yJzogVGhlIGVmZmVjdGl2ZSBvYmplY3Qgc3RvcmUgb2YgdGhp
cyBjdXJzb3IgdXNlcyBpbi1saW5lIGtleXMgYW5kIGV2YWx1YXRpbmcgdGhlIGtleSBwYXRoIG9m
IHRoZSB2YWx1ZSBwYXJhbWV0ZXIgcmVzdWx0cyBpbiBhIGRpZmZlcmVudCB2YWx1ZSB0aGFuIHRo
ZSBjdXJzb3IncyBlZmZlY3RpdmUga2V5LiIpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaAppbmRleCAyYjg2ODU3ZDE4NzUyMzAyZjVlMWVkYmFj
MzAyYzAxMjYwZjc4YjUzLi44OTJlYzY1Njk1OTNiNzliYWZiZTQ5ZjNjOGMzNDZiZDQ1ZWQ2ZGE2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFz
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmgK
QEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBvYmpl
Y3RTdG9yZU5hbWVzKCkgY29uc3Q7CiAKICAgICBzdHJ1Y3QgT2JqZWN0U3RvcmVQYXJhbWV0ZXJz
IHsKLSAgICAgICAgT3B0aW9uYWw8SURCS2V5UGF0aFZhcmlhbnQ+IGtleVBhdGg7CisgICAgICAg
IE9wdGlvbmFsPElEQktleVBhdGg+IGtleVBhdGg7CiAgICAgICAgIGJvb2wgYXV0b0luY3JlbWVu
dDsKICAgICB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJHZXRSZXN1bHQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
R2V0UmVzdWx0LmNwcAppbmRleCBjNjU3OGY4ZWIxYTgxMGU2NTdjYTNlY2RkNDEwOGEwNWQ0YWZl
NzZlLi5hYTM2NDUxZjJiNTkxZGE4OTYwNzUyNGI1MzRmNTNkYjAxZjYyMDEzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJHZXRSZXN1bHQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkdldFJlc3VsdC5jcHAKQEAgLTUz
LDcgKzUzLDcgQEAgdm9pZCBJREJHZXRSZXN1bHQ6Omlzb2xhdGVkQ29weShjb25zdCBJREJHZXRS
ZXN1bHQmIHNvdXJjZSwgSURCR2V0UmVzdWx0JiBkZXN0aW4KICAgICBkZXN0aW5hdGlvbi5tX3Zh
bHVlID0gc291cmNlLm1fdmFsdWUuaXNvbGF0ZWRDb3B5KCk7CiAgICAgZGVzdGluYXRpb24ubV9r
ZXlEYXRhID0gc291cmNlLm1fa2V5RGF0YS5pc29sYXRlZENvcHkoKTsKICAgICBkZXN0aW5hdGlv
bi5tX3ByaW1hcnlLZXlEYXRhID0gc291cmNlLm1fcHJpbWFyeUtleURhdGEuaXNvbGF0ZWRDb3B5
KCk7Ci0gICAgZGVzdGluYXRpb24ubV9rZXlQYXRoID0gc291cmNlLm1fa2V5UGF0aC5pc29sYXRl
ZENvcHkoKTsKKyAgICBkZXN0aW5hdGlvbi5tX2tleVBhdGggPSBXZWJDb3JlOjppc29sYXRlZENv
cHkoc291cmNlLm1fa2V5UGF0aCk7CiAgICAgZGVzdGluYXRpb24ubV9pc0RlZmluZWQgPSBzb3Vy
Y2UubV9pc0RlZmluZWQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQktleVBhdGguY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCS2V5UGF0aC5jcHAKaW5kZXggYzRhNGVlMjk5MTg0NWFhZTNiYmEyNDVjY2FlMGNmYTU5
MjJkZTBkYS4uZjQxNWFjOGE2ODkzODZkMTk5ZWRjY2M4OWJkZGE4Mzk4M2I5OGQ2OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5jcHAKQEAgLTI0
LDExICsyNCwxMCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJL
ZXlQYXRoLmgiCiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyNpbmNsdWRlICJJREJL
ZXlQYXRoLmgiCiAKLSNpbmNsdWRlICJLZXllZENvZGluZy5oIgogI2luY2x1ZGUgPHd0Zi9BU0NJ
SUNUeXBlLmg+CiAjaW5jbHVkZSA8d3RmL2R0b2EuaD4KIApAQCAtMTkxLDM4ICsxOTAsNyBAQCB2
b2lkIElEQlBhcnNlS2V5UGF0aChjb25zdCBTdHJpbmcmIGtleVBhdGgsIFZlY3RvcjxTdHJpbmc+
JiBlbGVtZW50cywgSURCS2V5UGF0aAogICAgIH0KIH0KIAotSURCS2V5UGF0aDo6SURCS2V5UGF0
aChjb25zdCBTdHJpbmcmIHN0cmluZykKLSAgICA6IG1fdHlwZShUeXBlOjpTdHJpbmcpCi0gICAg
LCBtX3N0cmluZyhzdHJpbmcpCi17Ci0gICAgQVNTRVJUKCFtX3N0cmluZy5pc051bGwoKSk7Ci19
Ci0KLUlEQktleVBhdGg6OklEQktleVBhdGgoY29uc3QgVmVjdG9yPFN0cmluZz4mIGFycmF5KQot
ICAgIDogbV90eXBlKFR5cGU6OkFycmF5KQotICAgICwgbV9hcnJheShhcnJheSkKLXsKLSNpZiAh
TE9HX0RJU0FCTEVECi0gICAgZm9yIChhdXRvJiBrZXkgOiBhcnJheSkKLSAgICAgICAgQVNTRVJU
KCFrZXkuaXNOdWxsKCkpOwotI2VuZGlmCi19Ci0KLUlEQktleVBhdGg6OklEQktleVBhdGgoT3B0
aW9uYWw8SURCS2V5UGF0aFZhcmlhbnQ+JiYgdmFyaWFudCkKLXsKLSAgICBpZiAoIXZhcmlhbnQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmlu
Zz4oKnZhcmlhbnQpKSB7Ci0gICAgICAgIG1fdHlwZSA9IFR5cGU6OlN0cmluZzsKLSAgICAgICAg
bV9zdHJpbmcgPSBXVEZNb3ZlKFdURjo6Z2V0PFN0cmluZz4oKnZhcmlhbnQpKTsKLSAgICB9IGVs
c2UgewotICAgICAgICBtX3R5cGUgPSBUeXBlOjpBcnJheTsKLSAgICAgICAgbV9hcnJheSA9IFdU
Rk1vdmUoV1RGOjpnZXQ8VmVjdG9yPFN0cmluZz4+KCp2YXJpYW50KSk7Ci0gICAgfQotfQotCi1i
b29sIGlzSURCS2V5UGF0aFZhbGlkKGNvbnN0IElEQktleVBhdGhWYXJpYW50JiBrZXlQYXRoKQor
Ym9vbCBpc0lEQktleVBhdGhWYWxpZChjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQogewogICAg
IGF1dG8gdmlzaXRvciA9IFdURjo6bWFrZVZpc2l0b3IoW10oY29uc3QgU3RyaW5nJiBzdHJpbmcp
IHsKICAgICAgICAgcmV0dXJuIElEQklzVmFsaWRLZXlQYXRoKHN0cmluZyk7CkBAIC0yMzgsNzMg
KzIwNiwxOSBAQCBib29sIGlzSURCS2V5UGF0aFZhbGlkKGNvbnN0IElEQktleVBhdGhWYXJpYW50
JiBrZXlQYXRoKQogICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIGtleVBhdGgpOwogfQog
Ci1ib29sIElEQktleVBhdGg6Om9wZXJhdG9yPT0oY29uc3QgSURCS2V5UGF0aCYgb3RoZXIpIGNv
bnN0CitJREJLZXlQYXRoIGlzb2xhdGVkQ29weShjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQog
ewotICAgIGlmIChtX3R5cGUgIT0gb3RoZXIubV90eXBlKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgVHlwZTo6TnVsbDoKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgY2FzZSBUeXBlOjpTdHJpbmc6Ci0gICAgICAgIHJldHVybiBtX3N0
cmluZyA9PSBvdGhlci5tX3N0cmluZzsKLSAgICBjYXNlIFR5cGU6OkFycmF5OgotICAgICAgICBy
ZXR1cm4gbV9hcnJheSA9PSBvdGhlci5tX2FycmF5OwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUlEQktleVBhdGggSURCS2V5UGF0aDo6
aXNvbGF0ZWRDb3B5KCkgY29uc3QKLXsKLSAgICBJREJLZXlQYXRoIHJlc3VsdDsKLSAgICByZXN1
bHQubV90eXBlID0gbV90eXBlOwotICAgIHJlc3VsdC5tX3N0cmluZyA9IG1fc3RyaW5nLmlzb2xh
dGVkQ29weSgpOwotICAgIHJlc3VsdC5tX2FycmF5LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9h
cnJheS5zaXplKCkpOwotICAgIGZvciAoYXV0byYga2V5IDogbV9hcnJheSkKLSAgICAgICAgcmVz
dWx0Lm1fYXJyYXkudW5jaGVja2VkQXBwZW5kKGtleS5pc29sYXRlZENvcHkoKSk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBJREJLZXlQYXRoOjplbmNvZGUoS2V5ZWRFbmNvZGVyJiBl
bmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIuZW5jb2RlRW51bSgidHlwZSIsIG1fdHlwZSk7
Ci0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIFR5cGU6Ok51bGw6Ci0gICAgICAgIHJl
dHVybjsKLSAgICBjYXNlIFR5cGU6OlN0cmluZzoKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVTdHJp
bmcoInN0cmluZyIsIG1fc3RyaW5nKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgVHlwZTo6
QXJyYXk6Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlT2JqZWN0cygiYXJyYXkiLCBtX2FycmF5LmJl
Z2luKCksIG1fYXJyYXkuZW5kKCksIFtdKFdlYkNvcmU6OktleWVkRW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgU3RyaW5nJiBzdHJpbmcpIHsKLSAgICAgICAgICAgIGVuY29kZXIuZW5jb2RlU3RyaW5n
KCJzdHJpbmciLCBzdHJpbmcpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH07
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLWJvb2wgSURCS2V5UGF0aDo6ZGVjb2Rl
KEtleWVkRGVjb2RlciYgZGVjb2RlciwgSURCS2V5UGF0aCYgcmVzdWx0KQotewotICAgIGJvb2wg
c3VjY2VlZGVkID0gZGVjb2Rlci5kZWNvZGVFbnVtKCJ0eXBlIiwgcmVzdWx0Lm1fdHlwZSwgW10o
VHlwZSB2YWx1ZSkgewotICAgICAgICByZXR1cm4gdmFsdWUgPT0gVHlwZTo6TnVsbCB8fCB2YWx1
ZSA9PSBUeXBlOjpTdHJpbmcgfHwgdmFsdWUgPT0gVHlwZTo6QXJyYXk7CisgICAgYXV0byB2aXNp
dG9yID0gV1RGOjptYWtlVmlzaXRvcihbXShjb25zdCBTdHJpbmcmIHN0cmluZykgLT4gSURCS2V5
UGF0aCB7CisgICAgICAgIHJldHVybiBzdHJpbmcuaXNvbGF0ZWRDb3B5KCk7CisgICAgfSwgW10o
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHZlY3RvcikgLT4gSURCS2V5UGF0aCB7CisgICAgICAgIFZl
Y3RvcjxTdHJpbmc+IHZlY3RvckNvcHk7CisgICAgICAgIHZlY3RvckNvcHkucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eSh2ZWN0b3Iuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChhdXRvJiBzdHJpbmcgOiB2
ZWN0b3IpCisgICAgICAgICAgICB2ZWN0b3JDb3B5LnVuY2hlY2tlZEFwcGVuZChzdHJpbmcuaXNv
bGF0ZWRDb3B5KCkpOworICAgICAgICByZXR1cm4gdmVjdG9yQ29weTsKICAgICB9KTsKLSAgICBp
ZiAoIXN1Y2NlZWRlZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc3dpdGNoIChyZXN1
bHQubV90eXBlKSB7Ci0gICAgY2FzZSBUeXBlOjpOdWxsOgotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICBjYXNlIFR5cGU6OlN0cmluZzoKLSAgICAgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlU3Ry
aW5nKCJzdHJpbmciLCByZXN1bHQubV9zdHJpbmcpOwotICAgIGNhc2UgVHlwZTo6QXJyYXk6Ci0g
ICAgICAgIHJlc3VsdC5tX2FycmF5LmNsZWFyKCk7Ci0gICAgICAgIHJldHVybiBkZWNvZGVyLmRl
Y29kZU9iamVjdHMoImFycmF5IiwgcmVzdWx0Lm1fYXJyYXksIFtdKEtleWVkRGVjb2RlciYgZGVj
b2RlciwgU3RyaW5nJiByZXN1bHQpIHsKLSAgICAgICAgICAgIHJldHVybiBkZWNvZGVyLmRlY29k
ZVN0cmluZygic3RyaW5nIiwgcmVzdWx0KTsKLSAgICAgICAgfSk7Ci0gICAgfQotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gV1RGOjp2aXNp
dCh2aXNpdG9yLCBrZXlQYXRoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5oCmluZGV4IDBmOWM1Y2Nk
N2UzYjJmZmI5YTc1MTQ4MjYxYzMwZDZhNTUwMjlmMzMuLmU2ZmFhMTk1NmM5MzYzN2JmYzZjMTIy
ZTAwOGJiOTFjNzU5OWUwYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQktleVBhdGguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJLZXlQYXRoLmgKQEAgLTMzLDExICszMyw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotdXNpbmcgSURCS2V5UGF0aFZhcmlhbnQgPSBXVEY6OlZhcmlhbnQ8U3RyaW5nLCBWZWN0b3I8
U3RyaW5nPj47Ci1ib29sIGlzSURCS2V5UGF0aFZhbGlkKGNvbnN0IElEQktleVBhdGhWYXJpYW50
Jik7Ci0KLWNsYXNzIEtleWVkRGVjb2RlcjsKLWNsYXNzIEtleWVkRW5jb2RlcjsKK3VzaW5nIElE
QktleVBhdGggPSBXVEY6OlZhcmlhbnQ8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPj47Citib29sIGlz
SURCS2V5UGF0aFZhbGlkKGNvbnN0IElEQktleVBhdGgmKTsKIAogZW51bSBjbGFzcyBJREJLZXlQ
YXRoUGFyc2VFcnJvciB7CiAgICAgTm9uZSwKQEAgLTQ3LDk1ICs0NCwxMiBAQCBlbnVtIGNsYXNz
IElEQktleVBhdGhQYXJzZUVycm9yIHsKIH07CiAKIHZvaWQgSURCUGFyc2VLZXlQYXRoKGNvbnN0
IFN0cmluZyYsIFZlY3RvcjxTdHJpbmc+JiwgSURCS2V5UGF0aFBhcnNlRXJyb3ImKTsKLQotLy8g
RklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIHJlcGxhY2UgSURCS2V5UGF0aCB3aXRoIElEQktl
eVBhdGhWYXJpYW50LgotY2xhc3MgSURCS2V5UGF0aCB7Ci1wdWJsaWM6Ci0gICAgSURCS2V5UGF0
aCgpIHsgfQotICAgIFdFQkNPUkVfRVhQT1JUIElEQktleVBhdGgoY29uc3QgU3RyaW5nJik7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgSURCS2V5UGF0aChjb25zdCBWZWN0b3I8U3RyaW5nPiYgYXJyYXkp
OwotICAgIFdFQkNPUkVfRVhQT1JUIElEQktleVBhdGgoT3B0aW9uYWw8SURCS2V5UGF0aFZhcmlh
bnQ+JiYpOwotCi0gICAgZW51bSBjbGFzcyBUeXBlIHsgTnVsbCwgU3RyaW5nLCBBcnJheSB9Owot
ICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotCi0gICAgY29uc3QgVmVj
dG9yPFN0cmluZz4mIGFycmF5KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3R5cGUg
PT0gVHlwZTo6QXJyYXkpOwotICAgICAgICByZXR1cm4gbV9hcnJheTsKLSAgICB9Ci0KLSAgICBj
b25zdCBTdHJpbmcmIHN0cmluZygpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV90eXBl
ID09IFR5cGU6OlN0cmluZyk7Ci0gICAgICAgIHJldHVybiBtX3N0cmluZzsKLSAgICB9Ci0KLSAg
ICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBlOjpOdWxsOyB9Ci0g
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IElEQktleVBhdGgmIG90aGVyKSBjb25zdDsKLQotICAg
IElEQktleVBhdGggaXNvbGF0ZWRDb3B5KCkgY29uc3Q7Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4gc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImLCBJREJLZXlQYXRoJik7Ci0gICAg
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBlbmNvZGUoS2V5ZWRFbmNvZGVyJikgY29uc3Q7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgZGVjb2RlKEtleWVkRGVjb2RlciYsIElEQktl
eVBhdGgmKTsKLQotcHJpdmF0ZToKLSAgICBUeXBlIG1fdHlwZSB7IFR5cGU6Ok51bGwgfTsKLSAg
ICBTdHJpbmcgbV9zdHJpbmc7Ci0gICAgVmVjdG9yPFN0cmluZz4gbV9hcnJheTsKLX07Ci0KLXRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgSURCS2V5UGF0aDo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2Rlci5lbmNvZGVFbnVtKG1fdHlwZSk7Ci0KLSAgICBz
d2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgVHlwZTo6TnVsbDoKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBUeXBlOjpTdHJpbmc6Ci0gICAgICAgIGVuY29kZXIgPDwgbV9zdHJpbmc7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgVHlwZTo6QXJyYXk6Ci0gICAgICAgIGVuY29kZXIgPDwgbV9h
cnJheTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBib29sIElEQktl
eVBhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBJREJLZXlQYXRoJiBrZXlQYXRoKQorSURC
S2V5UGF0aCBpc29sYXRlZENvcHkoY29uc3QgSURCS2V5UGF0aCYpOworaW5saW5lIE9wdGlvbmFs
PElEQktleVBhdGg+IGlzb2xhdGVkQ29weShjb25zdCBPcHRpb25hbDxJREJLZXlQYXRoPiYgdmFy
aWFudCkKIHsKLSAgICBUeXBlIHR5cGU7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0odHlw
ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNh
c2UgVHlwZTo6TnVsbDoKLSAgICAgICAga2V5UGF0aCA9IElEQktleVBhdGgoKTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICBjYXNlIFR5cGU6OlN0cmluZzogewotICAgICAgICBTdHJpbmcg
c3RyaW5nOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0cmluZykpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAga2V5UGF0aCA9IElEQktleVBhdGgoc3RyaW5nKTsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhc2UgVHlwZTo6QXJyYXk6IHsKLSAg
ICAgICAgVmVjdG9yPFN0cmluZz4gYXJyYXk7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
YXJyYXkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGtleVBhdGggPSBJ
REJLZXlQYXRoKGFycmF5KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KKyAgICBpZiAoIXZhcmlhbnQpCisgICAg
ICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIGlzb2xhdGVkQ29weSh2YXJpYW50LnZhbHVlKCkp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKaW5kZXggNzllZTNkNzc4NjZmMWVj
NjE3MDJmMjc2YjdkZTIzYmIwNzkxYzkxMy4uZWZmYTBlNjRhNDA0ODMyZmQwM2I0NTMzNjEyNzk5
ZjI5Mjc5ZTVjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlLmNwcApAQCAtMTIwLDcgKzEyMCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+
IElEQk9iamVjdFN0b3JlOjpzZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKICAgICByZXR1cm4g
eyB9OwogfQogCi1jb25zdCBJREJLZXlQYXRoJiBJREJPYmplY3RTdG9yZTo6a2V5UGF0aCgpIGNv
bnN0Citjb25zdCBPcHRpb25hbDxJREJLZXlQYXRoPiYgSURCT2JqZWN0U3RvcmU6OmtleVBhdGgo
KSBjb25zdAogewogICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV90cmFuc2FjdGlvbi0+
ZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWRJRCgpKTsKICAgICByZXR1cm4gbV9pbmZvLmtleVBhdGgo
KTsKQEAgLTMxMSwyMCArMzExLDIwIEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURC
T2JqZWN0U3RvcmU6OnB1dE9yQWRkKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUKICAgICBpZiAo
a2V5ICYmICFrZXktPmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIHN0b3Jl
IHJlY29yZCBpbiBhbiBJREJPYmplY3RTdG9yZTogVGhlIHBhcmFtZXRlciBpcyBub3QgYSB2YWxp
ZCBrZXkuIikgfTsKIAotICAgIGJvb2wgdXNlc0lubGluZUtleXMgPSAhbV9pbmZvLmtleVBhdGgo
KS5pc051bGwoKTsKKyAgICBib29sIHVzZXNJbmxpbmVLZXlzID0gISFtX2luZm8ua2V5UGF0aCgp
OwogICAgIGJvb2wgdXNlc0tleUdlbmVyYXRvciA9IGF1dG9JbmNyZW1lbnQoKTsKICAgICBpZiAo
dXNlc0lubGluZUtleXMgJiYgaW5saW5lS2V5Q2hlY2sgPT0gSW5saW5lS2V5Q2hlY2s6OlBlcmZv
cm0pIHsKICAgICAgICAgaWYgKGtleSkKICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBz
dG9yZSByZWNvcmQgaW4gYW4gSURCT2JqZWN0U3RvcmU6IFRoZSBvYmplY3Qgc3RvcmUgdXNlcyBp
bi1saW5lIGtleXMgYW5kIHRoZSBrZXkgcGFyYW1ldGVyIHdhcyBwcm92aWRlZC4iKSB9OwogCi0g
ICAgICAgIFJlZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBtYXliZUNyZWF0ZUlEQktleUZyb21T
Y3JpcHRWYWx1ZUFuZEtleVBhdGgoc3RhdGUsIHZhbHVlLCBtX2luZm8ua2V5UGF0aCgpKTsKKyAg
ICAgICAgUmVmUHRyPElEQktleT4ga2V5UGF0aEtleSA9IG1heWJlQ3JlYXRlSURCS2V5RnJvbVNj
cmlwdFZhbHVlQW5kS2V5UGF0aChzdGF0ZSwgdmFsdWUsIG1faW5mby5rZXlQYXRoKCkudmFsdWUo
KSk7CiAgICAgICAgIGlmIChrZXlQYXRoS2V5ICYmICFrZXlQYXRoS2V5LT5pc1ZhbGlkKCkpCiAg
ICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFF
cnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gc3RvcmUgcmVjb3JkIGluIGFuIElEQk9iamVj
dFN0b3JlOiBFdmFsdWF0aW5nIHRoZSBvYmplY3Qgc3RvcmUncyBrZXkgcGF0aCB5aWVsZGVkIGEg
dmFsdWUgdGhhdCBpcyBub3QgYSB2YWxpZCBrZXkuIikgfTsKIAogICAgICAgICBpZiAoIWtleVBh
dGhLZXkpIHsKICAgICAgICAgICAgIGlmICghdXNlc0tleUdlbmVyYXRvcikKICAgICAgICAgICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvciwg
QVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gc3RvcmUgcmVjb3JkIGluIGFuIElEQk9iamVjdFN0b3Jl
OiBFdmFsdWF0aW5nIHRoZSBvYmplY3Qgc3RvcmUncyBrZXkgcGF0aCBkaWQgbm90IHlpZWxkIGEg
dmFsdWUuIikgfTsKLSAgICAgICAgICAgIGlmICghY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZh
bHVlKHN0YXRlLCB2YWx1ZSwgbV9pbmZvLmtleVBhdGgoKSkpCisgICAgICAgICAgICBpZiAoIWNh
bkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShzdGF0ZSwgdmFsdWUsIG1faW5mby5rZXlQYXRo
KCkudmFsdWUoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpEYXRhRXJyb3IgfTsKICAgICAgICAgfQogCkBAIC0zOTksNyArMzk5LDcg
QEAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJPYmplY3RTdG9yZTo6Y2xlYXIoRXhl
Y1N0YXRlJiBleGVjU3RhdGUpCiAgICAgcmV0dXJuIG1fdHJhbnNhY3Rpb24tPnJlcXVlc3RDbGVh
ck9iamVjdFN0b3JlKGV4ZWNTdGF0ZSwgKnRoaXMpOwogfQogCi1FeGNlcHRpb25PcjxSZWY8SURC
SW5kZXg+PiBJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgoRXhlY1N0YXRlJiwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBJREJLZXlQYXRoVmFyaWFudCYmIGtleVBhdGgsIGNvbnN0IEluZGV4UGFyYW1l
dGVycyYgcGFyYW1ldGVycykKK0V4Y2VwdGlvbk9yPFJlZjxJREJJbmRleD4+IElEQk9iamVjdFN0
b3JlOjpjcmVhdGVJbmRleChFeGVjU3RhdGUmLCBjb25zdCBTdHJpbmcmIG5hbWUsIElEQktleVBh
dGgmJiBrZXlQYXRoLCBjb25zdCBJbmRleFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7CiAgICAg
TE9HKEluZGV4ZWREQiwgIklEQk9iamVjdFN0b3JlOjpjcmVhdGVJbmRleCAlcyIsIG5hbWUudXRm
OCgpLmRhdGEoKSk7CiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX3RyYW5zYWN0aW9u
LT5kYXRhYmFzZSgpLm9yaWdpblRocmVhZElEKCkpOwpAQCAtNDI2LDcgKzQyNiw3IEBAIEV4Y2Vw
dGlvbk9yPFJlZjxJREJJbmRleD4+IElEQk9iamVjdFN0b3JlOjpjcmVhdGVJbmRleChFeGVjU3Rh
dGUmLCBjb25zdCBTdHJpbmcmCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6SW52YWxpZEFjY2Vzc0Vycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBl
eGVjdXRlICdjcmVhdGVJbmRleCcgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIGtleVBhdGggYXJn
dW1lbnQgd2FzIGFuIGFycmF5IGFuZCB0aGUgbXVsdGlFbnRyeSBvcHRpb24gaXMgdHJ1ZS4iKSB9
OwogCiAgICAgLy8gSW5zdGFsbCB0aGUgbmV3IEluZGV4IGludG8gdGhlIE9iamVjdFN0b3JlJ3Mg
aW5mby4KLSAgICBJREJJbmRleEluZm8gaW5mbyA9IG1faW5mby5jcmVhdGVOZXdJbmRleChuYW1l
LCBPcHRpb25hbDxJREJLZXlQYXRoVmFyaWFudD4oV1RGTW92ZShrZXlQYXRoKSksIHBhcmFtZXRl
cnMudW5pcXVlLCBwYXJhbWV0ZXJzLm11bHRpRW50cnkpOworICAgIElEQkluZGV4SW5mbyBpbmZv
ID0gbV9pbmZvLmNyZWF0ZU5ld0luZGV4KG5hbWUsIFdURk1vdmUoa2V5UGF0aCksIHBhcmFtZXRl
cnMudW5pcXVlLCBwYXJhbWV0ZXJzLm11bHRpRW50cnkpOwogICAgIG1fdHJhbnNhY3Rpb24tPmRh
dGFiYXNlKCkuZGlkQ3JlYXRlSW5kZXhJbmZvKGluZm8pOwogCiAgICAgLy8gQ3JlYXRlIHRoZSBh
Y3R1YWwgSURCT2JqZWN0U3RvcmUgZnJvbSB0aGUgdHJhbnNhY3Rpb24sIHdoaWNoIGFsc28gc2No
ZWR1bGVzIHRoZSBvcGVyYXRpb24gc2VydmVyIHNpZGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaAppbmRleCA3YjIxY2NjNjgyN2RlZDZj
NWI2MzY1ZDcxZjU0YWQ5MGZhZDYxYmNhLi5mNzg3ZmFiZjYwNzY2NTdkNmJjODU5OWVhNmU0M2Nh
MmRkMTI5ODA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlLmgKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogCiAgICAgY29uc3QgU3Ry
aW5nJiBuYW1lKCkgY29uc3Q7CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0TmFtZShjb25zdCBT
dHJpbmcmKTsKLSAgICBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKCkgY29uc3Q7CisgICAgY29u
c3QgT3B0aW9uYWw8SURCS2V5UGF0aD4mIGtleVBhdGgoKSBjb25zdDsKICAgICBSZWZQdHI8RE9N
U3RyaW5nTGlzdD4gaW5kZXhOYW1lcygpIGNvbnN0OwogICAgIElEQlRyYW5zYWN0aW9uJiB0cmFu
c2FjdGlvbigpOwogICAgIGJvb2wgYXV0b0luY3JlbWVudCgpIGNvbnN0OwpAQCAtODMsNyArODMs
NyBAQCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBkZWxldGVGdW5j
dGlvbihKU0M6OkV4ZWNTdGF0ZSYsIElEQktleVJhbmdlKik7CiAgICAgRXhjZXB0aW9uT3I8UmVm
PElEQlJlcXVlc3Q+PiBkZWxldGVGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSBrZXkpOwogICAgIEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gY2xlYXIoSlNDOjpFeGVj
U3RhdGUmKTsKLSAgICBFeGNlcHRpb25PcjxSZWY8SURCSW5kZXg+PiBjcmVhdGVJbmRleChKU0M6
OkV4ZWNTdGF0ZSYsIGNvbnN0IFN0cmluZyYgbmFtZSwgSURCS2V5UGF0aFZhcmlhbnQmJiwgY29u
c3QgSW5kZXhQYXJhbWV0ZXJzJik7CisgICAgRXhjZXB0aW9uT3I8UmVmPElEQkluZGV4Pj4gY3Jl
YXRlSW5kZXgoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBTdHJpbmcmIG5hbWUsIElEQktleVBhdGgm
JiwgY29uc3QgSW5kZXhQYXJhbWV0ZXJzJik7CiAgICAgRXhjZXB0aW9uT3I8UmVmPElEQkluZGV4
Pj4gaW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBkZWxl
dGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUpOwogICAgIEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1
ZXN0Pj4gY291bnQoSlNDOjpFeGVjU3RhdGUmLCBJREJLZXlSYW5nZSopOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6YXRpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6
YXRpb24uY3BwCmluZGV4IGNlMTU5YWEwNzBkZmQ4ZGEwNjA3MGZjZGI2OWZhMmM2ODNjYTk4Yjgu
LjU4MGUzNTEwNzU1OTI3NzAwY2Q1ZjczMjMyZGQ4MDgxZDY1NWI2NzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJpYWxpemF0aW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFs
aXphdGlvbi5jcHAKQEAgLTMzLDIwICszMyw2NSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LVJlZlB0cjxTaGFyZWRCdWZmZXI+IHNlcmlhbGl6ZUlEQktleVBhdGgoY29uc3QgSURCS2V5UGF0
aCYga2V5UGF0aCkKK2VudW0gY2xhc3MgS2V5UGF0aFR5cGUgeyBOdWxsLCBTdHJpbmcsIEFycmF5
IH07CisKK1JlZlB0cjxTaGFyZWRCdWZmZXI+IHNlcmlhbGl6ZUlEQktleVBhdGgoY29uc3QgT3B0
aW9uYWw8SURCS2V5UGF0aD4mIGtleVBhdGgpCiB7CiAgICAgYXV0byBlbmNvZGVyID0gS2V5ZWRF
bmNvZGVyOjplbmNvZGVyKCk7Ci0gICAga2V5UGF0aC5lbmNvZGUoKmVuY29kZXIpOworCisgICAg
aWYgKGtleVBhdGgpIHsKKyAgICAgICAgYXV0byB2aXNpdG9yID0gV1RGOjptYWtlVmlzaXRvcihb
Jl0oY29uc3QgU3RyaW5nJiBzdHJpbmcpIHsKKyAgICAgICAgICAgIGVuY29kZXItPmVuY29kZUVu
dW0oInR5cGUiLCBLZXlQYXRoVHlwZTo6U3RyaW5nKTsKKyAgICAgICAgICAgIGVuY29kZXItPmVu
Y29kZVN0cmluZygic3RyaW5nIiwgc3RyaW5nKTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiB2ZWN0b3IpIHsKKyAgICAgICAgICAgIGVuY29kZXItPmVuY29kZUVudW0oInR5
cGUiLCBLZXlQYXRoVHlwZTo6QXJyYXkpOworICAgICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlT2Jq
ZWN0cygiYXJyYXkiLCB2ZWN0b3IuYmVnaW4oKSwgdmVjdG9yLmVuZCgpLCBbXShXZWJDb3JlOjpL
ZXllZEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKSB7CisgICAgICAgICAg
ICAgICAgZW5jb2Rlci5lbmNvZGVTdHJpbmcoInN0cmluZyIsIHN0cmluZyk7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfSk7CisgICAgICAgIFdURjo6dmlzaXQodmlzaXRvciwga2V5UGF0aC52
YWx1ZSgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlRW51bSgidHlwZSIs
IEtleVBhdGhUeXBlOjpOdWxsKTsKKwogICAgIHJldHVybiBlbmNvZGVyLT5maW5pc2hFbmNvZGlu
ZygpOwogfQogCi1ib29sIGRlc2VyaWFsaXplSURCS2V5UGF0aChjb25zdCB1aW50OF90KiBkYXRh
LCBzaXplX3Qgc2l6ZSwgSURCS2V5UGF0aCYgcmVzdWx0KQorYm9vbCBkZXNlcmlhbGl6ZUlEQktl
eVBhdGgoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIE9wdGlvbmFsPElEQktleVBh
dGg+JiByZXN1bHQpCiB7CiAgICAgaWYgKCFkYXRhIHx8ICFzaXplKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBhdXRvIGRlY29kZXIgPSBLZXllZERlY29kZXI6OmRlY29kZXIoZGF0YSwg
c2l6ZSk7Ci0gICAgcmV0dXJuIElEQktleVBhdGg6OmRlY29kZSgqZGVjb2RlciwgcmVzdWx0KTsK
KworICAgIEtleVBhdGhUeXBlIHR5cGU7CisgICAgYm9vbCBzdWNjZWVkZWQgPSBkZWNvZGVyLT5k
ZWNvZGVFbnVtKCJ0eXBlIiwgdHlwZSwgW10oS2V5UGF0aFR5cGUgdmFsdWUpIHsKKyAgICAgICAg
cmV0dXJuIHZhbHVlID09IEtleVBhdGhUeXBlOjpOdWxsIHx8IHZhbHVlID09IEtleVBhdGhUeXBl
OjpTdHJpbmcgfHwgdmFsdWUgPT0gS2V5UGF0aFR5cGU6OkFycmF5OworICAgIH0pOworICAgIGlm
ICghc3VjY2VlZGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICBjYXNlIEtleVBhdGhUeXBlOjpOdWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNl
IEtleVBhdGhUeXBlOjpTdHJpbmc6IHsKKyAgICAgICAgU3RyaW5nIHN0cmluZzsKKyAgICAgICAg
aWYgKCFkZWNvZGVyLT5kZWNvZGVTdHJpbmcoInN0cmluZyIsIHN0cmluZykpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJlc3VsdCA9IElEQktleVBhdGgoV1RGTW92ZShzdHJp
bmcpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgS2V5UGF0aFR5cGU6OkFycmF5
OiB7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IHZlY3RvcjsKKyAgICAgICAgc3VjY2VlZGVkID0g
ZGVjb2Rlci0+ZGVjb2RlT2JqZWN0cygiYXJyYXkiLCB2ZWN0b3IsIFtdKEtleWVkRGVjb2RlciYg
ZGVjb2RlciwgU3RyaW5nJiByZXN1bHQpIHsKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVyLmRl
Y29kZVN0cmluZygic3RyaW5nIiwgcmVzdWx0KTsKKyAgICAgICAgfSk7CisgICAgICAgIGlmICgh
c3VjY2VlZGVkKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXN1bHQgPSBJ
REJLZXlQYXRoKFdURk1vdmUodmVjdG9yKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9
CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHNlcmlhbGl6ZUlE
QktleURhdGEoY29uc3QgSURCS2V5RGF0YSYga2V5KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6YXRpb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJpYWxpemF0aW9uLmgKaW5kZXgg
ODBkMmMyYjU4MzhiMWQ0ZGY4MmNlNzEzYzIwNmIxNjJmNTg1MmUyNS4uY2M0ODYyYjUyMDU0M2Rl
ZjNjMWU3Yjk1ZDU5OGIzMTQxNzNiMjBjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6YXRpb24uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbi5oCkBAIC0yOCwx
NSArMjgsMTUgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCisjaW5jbHVkZSAi
SURCS2V5UGF0aC5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIElEQktleURhdGE7Ci1jbGFzcyBJREJLZXlQYXRoOwogCi1SZWZQdHI8
U2hhcmVkQnVmZmVyPiBzZXJpYWxpemVJREJLZXlQYXRoKGNvbnN0IElEQktleVBhdGgmKTsKLWJv
b2wgZGVzZXJpYWxpemVJREJLZXlQYXRoKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1
ZmZlclNpemUsIElEQktleVBhdGgmKTsKK1JlZlB0cjxTaGFyZWRCdWZmZXI+IHNlcmlhbGl6ZUlE
QktleVBhdGgoY29uc3QgT3B0aW9uYWw8SURCS2V5UGF0aD4mKTsKK2Jvb2wgZGVzZXJpYWxpemVJ
REJLZXlQYXRoKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUsIE9wdGlv
bmFsPElEQktleVBhdGg+Jik7CiAKIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHNlcmlhbGl6ZUlEQktl
eURhdGEoY29uc3QgSURCS2V5RGF0YSYpOwogYm9vbCBkZXNlcmlhbGl6ZUlEQktleURhdGEoY29u
c3QgdWludDhfdCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSwgSURCS2V5RGF0YSYpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlE
QkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcAppbmRleCBiZDc2ZWY0ZjExZDhjOTlmMTlmNDQ1
YTg1YmMwNGIyYzhkYTI0MDhhLi43M2UxZTAyMTQ2MmJkMjZmOWM2MWM1MDU5NzY3MDVhMzI4NDlk
ZGVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
U1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcApAQCAtNTk5LDcgKzU5OSw3
IEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IFNRTGl0ZUlEQkJhY2tpbmdTdG9y
ZTo6ZXh0cmFjdEV4aXN0aW5nRGF0YWJhc2VJCiAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4ga2V5
UGF0aEJ1ZmZlcjsKICAgICAgICAgICAgIHNxbC5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMiwga2V5
UGF0aEJ1ZmZlcik7CiAKLSAgICAgICAgICAgIElEQktleVBhdGggb2JqZWN0U3RvcmVLZXlQYXRo
OworICAgICAgICAgICAgT3B0aW9uYWw8SURCS2V5UGF0aD4gb2JqZWN0U3RvcmVLZXlQYXRoOwog
ICAgICAgICAgICAgaWYgKCFkZXNlcmlhbGl6ZUlEQktleVBhdGgocmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1aW50OF90Kj4oa2V5UGF0aEJ1ZmZlci5kYXRhKCkpLCBrZXlQYXRoQnVmZmVyLnNpemUo
KSwgb2JqZWN0U3RvcmVLZXlQYXRoKSkgewogICAgICAgICAgICAgICAgIExPR19FUlJPUigiVW5h
YmxlIHRvIGV4dHJhY3Qga2V5IHBhdGggZnJvbSBkYXRhYmFzZSIpOwogICAgICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwpAQCAtNjA3LDcgKzYwNyw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJE
YXRhYmFzZUluZm8+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZXh0cmFjdEV4aXN0aW5nRGF0YWJh
c2VJCiAKICAgICAgICAgICAgIGJvb2wgYXV0b0luY3JlbWVudCA9IHNxbC5nZXRDb2x1bW5JbnQo
Myk7CiAKLSAgICAgICAgICAgIGRhdGFiYXNlSW5mby0+YWRkRXhpc3RpbmdPYmplY3RTdG9yZSh7
IG9iamVjdFN0b3JlSUQsIG9iamVjdFN0b3JlTmFtZSwgb2JqZWN0U3RvcmVLZXlQYXRoLCBhdXRv
SW5jcmVtZW50IH0pOworICAgICAgICAgICAgZGF0YWJhc2VJbmZvLT5hZGRFeGlzdGluZ09iamVj
dFN0b3JlKHsgb2JqZWN0U3RvcmVJRCwgb2JqZWN0U3RvcmVOYW1lLCBXVEZNb3ZlKG9iamVjdFN0
b3JlS2V5UGF0aCksIGF1dG9JbmNyZW1lbnQgfSk7CiAKICAgICAgICAgICAgIHJlc3VsdCA9IHNx
bC5zdGVwKCk7CiAgICAgICAgIH0KQEAgLTYzMiwxMSArNjMyLDE1IEBAIHN0ZDo6dW5pcXVlX3B0
cjxJREJEYXRhYmFzZUluZm8+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZXh0cmFjdEV4aXN0aW5n
RGF0YWJhc2VJCiAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4ga2V5UGF0aEJ1ZmZlcjsKICAgICAg
ICAgICAgIHNxbC5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMywga2V5UGF0aEJ1ZmZlcik7CiAKLSAg
ICAgICAgICAgIElEQktleVBhdGggaW5kZXhLZXlQYXRoOworICAgICAgICAgICAgT3B0aW9uYWw8
SURCS2V5UGF0aD4gaW5kZXhLZXlQYXRoOwogICAgICAgICAgICAgaWYgKCFkZXNlcmlhbGl6ZUlE
QktleVBhdGgocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oa2V5UGF0aEJ1ZmZlci5k
YXRhKCkpLCBrZXlQYXRoQnVmZmVyLnNpemUoKSwgaW5kZXhLZXlQYXRoKSkgewogICAgICAgICAg
ICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGV4dHJhY3Qga2V5IHBhdGggZnJvbSBkYXRhYmFz
ZSIpOwogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKCFpbmRleEtleVBhdGgpIHsKKyAgICAgICAgICAgICAgICBMT0dfRVJST1Io
IlVuYWJsZSB0byBleHRyYWN0IGtleSBwYXRoIGZyb20gZGF0YWJhc2UiKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgYm9vbCB1
bmlxdWUgPSBzcWwuZ2V0Q29sdW1uSW50KDQpOwogICAgICAgICAgICAgYm9vbCBtdWx0aUVudHJ5
ID0gc3FsLmdldENvbHVtbkludCg1KTsKQEAgLTY0Nyw3ICs2NTEsNyBAQCBzdGQ6OnVuaXF1ZV9w
dHI8SURCRGF0YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmV4dHJhY3RFeGlzdGlu
Z0RhdGFiYXNlSQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICBvYmplY3RTdG9yZS0+YWRkRXhpc3RpbmdJbmRleCh7IGluZGV4SUQs
IG9iamVjdFN0b3JlSUQsIGluZGV4TmFtZSwgaW5kZXhLZXlQYXRoLCB1bmlxdWUsIG11bHRpRW50
cnkgfSk7CisgICAgICAgICAgICBvYmplY3RTdG9yZS0+YWRkRXhpc3RpbmdJbmRleCh7IGluZGV4
SUQsIG9iamVjdFN0b3JlSUQsIGluZGV4TmFtZSwgV1RGTW92ZShpbmRleEtleVBhdGgudmFsdWUo
KSksIHVuaXF1ZSwgbXVsdGlFbnRyeSB9KTsKIAogICAgICAgICAgICAgcmVzdWx0ID0gc3FsLnN0
ZXAoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKaW5kZXggMzAyZjgzN2Zk
OWI1ODVjODM2ZWE5YTU5MzBlYjI2OGI0MTM3MmZmOS4uOGZlZGNmNjY3ZmYyMTk2NmI0M2EzYzcz
YTU0OTNjMTczMDNkMGQ0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCkBAIC05NTMsNyAr
OTUzLDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkKHVpbnQ2NF90
IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmUKICAgICAvLyBJZiBPYmplY3RTdG9yZSBo
YXMgYSBrZXkgcGF0aCBhbmQgdGhlIGtleSBpcyBhdXRvZ2VuZXJhdGVkLCB0aGVuIGluamVjdCB0
aGUga2V5IGludG8gdGhlIHZhbHVlCiAgICAgLy8gdXNpbmcgc3RlcHMgdG8gYXNzaWduIGEga2V5
IHRvIGEgdmFsdWUgdXNpbmcgYSBrZXkgcGF0aC4KICAgICBUaHJlYWRTYWZlRGF0YUJ1ZmZlciBp
bmplY3RlZFJlY29yZFZhbHVlOwotICAgIGlmICh1c2VkS2V5SXNHZW5lcmF0ZWQgJiYgIW9iamVj
dFN0b3JlSW5mby0+a2V5UGF0aCgpLmlzTnVsbCgpKSB7CisgICAgaWYgKHVzZWRLZXlJc0dlbmVy
YXRlZCAmJiBvYmplY3RTdG9yZUluZm8tPmtleVBhdGgoKSkgewogICAgICAgICBWTSYgdm0gPSBk
YXRhYmFzZVRocmVhZFZNKCk7CiAgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogICAg
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC05NjQsNyArOTY0
LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkKHVpbnQ2NF90IGNh
bGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmUKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCi0gICAgICAgIGlmICghaW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKGRhdGFiYXNl
VGhyZWFkRXhlY1N0YXRlKCksIHVzZWRLZXksIHZhbHVlLCBvYmplY3RTdG9yZUluZm8tPmtleVBh
dGgoKSkpIHsKKyAgICAgICAgaWYgKCFpbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoZGF0YWJh
c2VUaHJlYWRFeGVjU3RhdGUoKSwgdXNlZEtleSwgdmFsdWUsIG9iamVjdFN0b3JlSW5mby0+a2V5
UGF0aCgpLnZhbHVlKCkpKSB7CiAgICAgICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3Jl
YXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1Q
dXRPckFkZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJvcihJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6Q29uc3RyYWludEVycm9yLCBBU0NJSUxpdGVyYWwoIlVuYWJsZSB0byBpbmplY3QgcmVjb3Jk
IGtleSBpbnRvIHJlY29yZCB2YWx1ZSIpKSwgdXNlZEtleSkpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zaGFyZWQvSURCRGF0YWJhc2VJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NoYXJlZC9JREJEYXRhYmFzZUluZm8uY3BwCmluZGV4IDQ0YzJiNDYyY2RjNDg2YTI5
NDFkZjI1ZWFjZjBhNmM4ODA1Mzc1YzcuLmY5ODU3MTcyOWZkNjZjNmE0Mzc0YWQyYTk5NmRmNmM0
ZjY3MTM3YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3No
YXJlZC9JREJEYXRhYmFzZUluZm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NoYXJlZC9JREJEYXRhYmFzZUluZm8uY3BwCkBAIC02Niw5ICs2Niw5IEBAIGJvb2wg
SURCRGF0YWJhc2VJbmZvOjpoYXNPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1JREJPYmplY3RTdG9yZUluZm8gSURCRGF0YWJhc2VJ
bmZvOjpjcmVhdGVOZXdPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktl
eVBhdGgmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCkKK0lEQk9iamVjdFN0b3JlSW5mbyBJ
REJEYXRhYmFzZUluZm86OmNyZWF0ZU5ld09iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwg
T3B0aW9uYWw8SURCS2V5UGF0aD4mJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQpCiB7Ci0g
ICAgSURCT2JqZWN0U3RvcmVJbmZvIGluZm8oKyttX21heE9iamVjdFN0b3JlSUQsIG5hbWUsIGtl
eVBhdGgsIGF1dG9JbmNyZW1lbnQpOworICAgIElEQk9iamVjdFN0b3JlSW5mbyBpbmZvKCsrbV9t
YXhPYmplY3RTdG9yZUlELCBuYW1lLCBXVEZNb3ZlKGtleVBhdGgpLCBhdXRvSW5jcmVtZW50KTsK
ICAgICBtX29iamVjdFN0b3JlTWFwLnNldChpbmZvLmlkZW50aWZpZXIoKSwgaW5mbyk7CiAgICAg
cmV0dXJuIGluZm87CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zaGFyZWQvSURCRGF0YWJhc2VJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zaGFyZWQvSURCRGF0YWJhc2VJbmZvLmgKaW5kZXggOGUzZDQ4MTQ1NDQ1Y2E2ZTFj
Mjg2ZGI2NWFmNDdlNzgxODkwMmUxNi4uZTBiNTE0NDgzNTVjOGMwMzJiYjU2ZmU3NTIzYTQ1MTk2
Y2Q2ZjlhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hh
cmVkL0lEQkRhdGFiYXNlSW5mby5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NoYXJlZC9JREJEYXRhYmFzZUluZm8uaApAQCAtMzMsOCArMzMsNiBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIElEQktleVBhdGg7Ci0KIGNsYXNzIElEQkRhdGFiYXNlSW5m
byB7CiBwdWJsaWM6CiAgICAgSURCRGF0YWJhc2VJbmZvKGNvbnN0IFN0cmluZyYgbmFtZSwgdWlu
dDY0X3QgdmVyc2lvbik7CkBAIC01MCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICB1aW50NjRfdCB2
ZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV92ZXJzaW9uOyB9CiAKICAgICBib29sIGhhc09iamVj
dFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7Ci0gICAgSURCT2JqZWN0U3RvcmVJbmZv
IGNyZWF0ZU5ld09iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0
aCYsIGJvb2wgYXV0b0luY3JlbWVudCk7CisgICAgSURCT2JqZWN0U3RvcmVJbmZvIGNyZWF0ZU5l
d09iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgT3B0aW9uYWw8SURCS2V5UGF0aD4mJiwg
Ym9vbCBhdXRvSW5jcmVtZW50KTsKICAgICB2b2lkIGFkZEV4aXN0aW5nT2JqZWN0U3RvcmUoY29u
c3QgSURCT2JqZWN0U3RvcmVJbmZvJik7CiAgICAgSURCT2JqZWN0U3RvcmVJbmZvKiBpbmZvRm9y
RXhpc3RpbmdPYmplY3RTdG9yZSh1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpOwogICAg
IElEQk9iamVjdFN0b3JlSW5mbyogaW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUoY29uc3QgU3Ry
aW5nJiBvYmplY3RTdG9yZU5hbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2hhcmVkL0lEQkluZGV4SW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCSW5kZXhJbmZvLmNwcAppbmRleCBjYmY4NWY2MWM4NDVj
MzA1MTBkMDRjN2ZhYzY4OTUyYTc4ODYxYjBlLi40NjhjOWI4ZmUyNzczZmQ5NGIyZjI2NmQ5MTIx
ZmMwZDEyZTgzNGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zaGFyZWQvSURCSW5kZXhJbmZvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zaGFyZWQvSURCSW5kZXhJbmZvLmNwcApAQCAtMzQsMTEgKzM0LDExIEBAIElEQklu
ZGV4SW5mbzo6SURCSW5kZXhJbmZvKCkKIHsKIH0KIAotSURCSW5kZXhJbmZvOjpJREJJbmRleElu
Zm8odWludDY0X3QgaWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgdW5pcXVl
LCBib29sIG11bHRpRW50cnkpCitJREJJbmRleEluZm86OklEQkluZGV4SW5mbyh1aW50NjRfdCBp
ZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYg
bmFtZSwgSURCS2V5UGF0aCYmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnkp
CiAgICAgOiBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKICAgICAsIG1fb2JqZWN0U3RvcmVJZGVu
dGlmaWVyKG9iamVjdFN0b3JlSWRlbnRpZmllcikKICAgICAsIG1fbmFtZShuYW1lKQotICAgICwg
bV9rZXlQYXRoKGtleVBhdGgpCisgICAgLCBtX2tleVBhdGgoV1RGTW92ZShrZXlQYXRoKSkKICAg
ICAsIG1fdW5pcXVlKHVuaXF1ZSkKICAgICAsIG1fbXVsdGlFbnRyeShtdWx0aUVudHJ5KQogewpA
QCAtNDYsNyArNDYsNyBAQCBJREJJbmRleEluZm86OklEQkluZGV4SW5mbyh1aW50NjRfdCBpZGVu
dGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsCiAKIElEQkluZGV4SW5mbyBJ
REJJbmRleEluZm86Omlzb2xhdGVkQ29weSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHsgbV9pZGVu
dGlmaWVyLCBtX29iamVjdFN0b3JlSWRlbnRpZmllciwgbV9uYW1lLmlzb2xhdGVkQ29weSgpLCBt
X2tleVBhdGguaXNvbGF0ZWRDb3B5KCksIG1fdW5pcXVlLCBtX211bHRpRW50cnkgfTsKKyAgICBy
ZXR1cm4geyBtX2lkZW50aWZpZXIsIG1fb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBtX25hbWUuaXNv
bGF0ZWRDb3B5KCksIFdlYkNvcmU6Omlzb2xhdGVkQ29weShtX2tleVBhdGgpLCBtX3VuaXF1ZSwg
bV9tdWx0aUVudHJ5IH07CiB9CiAKICNpZiAhTE9HX0RJU0FCTEVECmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCSW5kZXhJbmZvLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCSW5kZXhJbmZvLmgKaW5kZXgg
N2YwOWQ5MmUwYjk2OWI3N2IxMjUxZjVmZWU5ZTk0MmQyYzYyZGI5ZS4uODE1Nzc1OGU2NzQ0ODQ0
MmQwNTMzYWE5YWU2NTBjYTUzYzIwN2ZjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkluZGV4SW5mby5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJJbmRleEluZm8uaApAQCAtMzYsNyArMzYsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJREJJbmRleEluZm8gewogcHVibGljOgogICAg
IFdFQkNPUkVfRVhQT1JUIElEQkluZGV4SW5mbygpOwotICAgIElEQkluZGV4SW5mbyh1aW50NjRf
dCBpZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnkp
OworICAgIElEQkluZGV4SW5mbyh1aW50NjRfdCBpZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RT
dG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmFtZSwgSURCS2V5UGF0aCYmLCBib29sIHVu
aXF1ZSwgYm9vbCBtdWx0aUVudHJ5KTsKIAogICAgIElEQkluZGV4SW5mbyBpc29sYXRlZENvcHko
KSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2hhcmVkL0lEQk9iamVjdFN0b3JlSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zaGFyZWQvSURCT2JqZWN0U3RvcmVJbmZvLmNwcAppbmRleCAzZjFjODVlMWRmZDBi
M2UwYTllOGVkMmNlNzVjMzczODU3MTg5Yjc4Li42ODIwYTlmZmFiYjdjYTFkZTBkNGVmMWQ1NDFm
MWU2OTY1MjYwZGJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zaGFyZWQvSURCT2JqZWN0U3RvcmVJbmZvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCT2JqZWN0U3RvcmVJbmZvLmNwcApAQCAtMzUsMTcgKzM1
LDE3IEBAIElEQk9iamVjdFN0b3JlSW5mbzo6SURCT2JqZWN0U3RvcmVJbmZvKCkKIHsKIH0KIAot
SURCT2JqZWN0U3RvcmVJbmZvOjpJREJPYmplY3RTdG9yZUluZm8odWludDY0X3QgaWRlbnRpZmll
ciwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGF1
dG9JbmNyZW1lbnQpCitJREJPYmplY3RTdG9yZUluZm86OklEQk9iamVjdFN0b3JlSW5mbyh1aW50
NjRfdCBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5hbWUsIE9wdGlvbmFsPElEQktleVBhdGg+
JiYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50KQogICAgIDogbV9pZGVudGlmaWVyKGlkZW50
aWZpZXIpCiAgICAgLCBtX25hbWUobmFtZSkKLSAgICAsIG1fa2V5UGF0aChrZXlQYXRoKQorICAg
ICwgbV9rZXlQYXRoKFdURk1vdmUoa2V5UGF0aCkpCiAgICAgLCBtX2F1dG9JbmNyZW1lbnQoYXV0
b0luY3JlbWVudCkKIHsKIH0KIAotSURCSW5kZXhJbmZvIElEQk9iamVjdFN0b3JlSW5mbzo6Y3Jl
YXRlTmV3SW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRo
LCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5KQorSURCSW5kZXhJbmZvIElEQk9iamVjdFN0
b3JlSW5mbzo6Y3JlYXRlTmV3SW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJLZXlQYXRoJiYg
a2V5UGF0aCwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSkKIHsKLSAgICBJREJJbmRleElu
Zm8gaW5mbygrK21fbWF4SW5kZXhJRCwgbV9pZGVudGlmaWVyLCBuYW1lLCBrZXlQYXRoLCB1bmlx
dWUsIG11bHRpRW50cnkpOworICAgIElEQkluZGV4SW5mbyBpbmZvKCsrbV9tYXhJbmRleElELCBt
X2lkZW50aWZpZXIsIG5hbWUsIFdURk1vdmUoa2V5UGF0aCksIHVuaXF1ZSwgbXVsdGlFbnRyeSk7
CiAgICAgbV9pbmRleE1hcC5zZXQoaW5mby5pZGVudGlmaWVyKCksIGluZm8pOwogICAgIHJldHVy
biBpbmZvOwogfQpAQCAtOTYsNyArOTYsNyBAQCBJREJJbmRleEluZm8qIElEQk9iamVjdFN0b3Jl
SW5mbzo6aW5mb0ZvckV4aXN0aW5nSW5kZXgodWludDY0X3QgaWRlbnRpZmllcikKIAogSURCT2Jq
ZWN0U3RvcmVJbmZvIElEQk9iamVjdFN0b3JlSW5mbzo6aXNvbGF0ZWRDb3B5KCkgY29uc3QKIHsK
LSAgICBJREJPYmplY3RTdG9yZUluZm8gcmVzdWx0ID0geyBtX2lkZW50aWZpZXIsIG1fbmFtZS5p
c29sYXRlZENvcHkoKSwgbV9rZXlQYXRoLmlzb2xhdGVkQ29weSgpLCBtX2F1dG9JbmNyZW1lbnQg
fTsKKyAgICBJREJPYmplY3RTdG9yZUluZm8gcmVzdWx0ID0geyBtX2lkZW50aWZpZXIsIG1fbmFt
ZS5pc29sYXRlZENvcHkoKSwgV2ViQ29yZTo6aXNvbGF0ZWRDb3B5KG1fa2V5UGF0aCksIG1fYXV0
b0luY3JlbWVudCB9OwogCiAgICAgZm9yIChhdXRvJiBpdGVyYXRvciA6IG1faW5kZXhNYXApIHsK
ICAgICAgICAgcmVzdWx0Lm1faW5kZXhNYXAuc2V0KGl0ZXJhdG9yLmtleSwgaXRlcmF0b3IudmFs
dWUuaXNvbGF0ZWRDb3B5KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0b3JlSW5mby5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0b3JlSW5mby5oCmluZGV4IGRkZWExZWEy
MTNhYTQ4MzMxYWJkNjEzODZkMTRjNmZmMWNiNDRiMTguLjUwNzVhNDE0YjljMzEyNWJkM2UwYThj
ZjE4Nzg0YmQ2Nzc0NjY5MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NoYXJlZC9JREJPYmplY3RTdG9yZUluZm8uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCT2JqZWN0U3RvcmVJbmZvLmgKQEAgLTM1LDE2ICsz
NSwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIElEQktleVBhdGg7Ci0KIGNs
YXNzIElEQk9iamVjdFN0b3JlSW5mbyB7CiBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgSURC
T2JqZWN0U3RvcmVJbmZvKCk7Ci0gICAgSURCT2JqZWN0U3RvcmVJbmZvKHVpbnQ2NF90IGlkZW50
aWZpZXIsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0lu
Y3JlbWVudCk7CisgICAgSURCT2JqZWN0U3RvcmVJbmZvKHVpbnQ2NF90IGlkZW50aWZpZXIsIGNv
bnN0IFN0cmluZyYgbmFtZSwgT3B0aW9uYWw8SURCS2V5UGF0aD4mJiwgYm9vbCBhdXRvSW5jcmVt
ZW50KTsKIAogICAgIHVpbnQ2NF90IGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50
aWZpZXI7IH0KICAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7
IH0KLSAgICBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9rZXlQ
YXRoOyB9CisgICAgY29uc3QgT3B0aW9uYWw8SURCS2V5UGF0aD4mIGtleVBhdGgoKSBjb25zdCB7
IHJldHVybiBtX2tleVBhdGg7IH0KICAgICBib29sIGF1dG9JbmNyZW1lbnQoKSBjb25zdCB7IHJl
dHVybiBtX2F1dG9JbmNyZW1lbnQ7IH0KICAgICB1aW50NjRfdCBtYXhJbmRleElEKCkgY29uc3Qg
eyByZXR1cm4gbV9tYXhJbmRleElEOyB9CiAKQEAgLTUyLDcgKzUwLDcgQEAgcHVibGljOgogCiAg
ICAgSURCT2JqZWN0U3RvcmVJbmZvIGlzb2xhdGVkQ29weSgpIGNvbnN0OwogCi0gICAgSURCSW5k
ZXhJbmZvIGNyZWF0ZU5ld0luZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0
aCYsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnkpOworICAgIElEQkluZGV4SW5mbyBjcmVh
dGVOZXdJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIElEQktleVBhdGgmJiwgYm9vbCB1bmlxdWUs
IGJvb2wgbXVsdGlFbnRyeSk7CiAgICAgdm9pZCBhZGRFeGlzdGluZ0luZGV4KGNvbnN0IElEQklu
ZGV4SW5mbyYpOwogICAgIGJvb2wgaGFzSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsK
ICAgICBib29sIGhhc0luZGV4KHVpbnQ2NF90IGluZGV4SWRlbnRpZmllcikgY29uc3Q7CkBAIC03
NSw3ICs3Myw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdWludDY0X3QgbV9pZGVudGlmaWVy
IHsgMCB9OwogICAgIFN0cmluZyBtX25hbWU7Ci0gICAgSURCS2V5UGF0aCBtX2tleVBhdGg7Cisg
ICAgT3B0aW9uYWw8SURCS2V5UGF0aD4gbV9rZXlQYXRoOwogICAgIGJvb2wgbV9hdXRvSW5jcmVt
ZW50IHsgZmFsc2UgfTsKICAgICB1aW50NjRfdCBtX21heEluZGV4SUQgeyAwIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKaW5k
ZXggNTcxZGJjMWUwOWNhM2ZlMTUyZWQxMzJmOGMwY2IwMGJkZGM2OTYyZC4uZDY3YzQ3MDI5NGIz
OTdkZjZlZGEzNmU4MTRlNjFlZDRiZmVjZWYwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKQEAgLTI0MiwxMSArMjQyLDExIEBA
IGJvb2wgaW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKEV4ZWNTdGF0ZSYgZXhlYywgY29uc3Qg
SURCS2V5RGF0YSYga2V5RGF0YSwgSlNWCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgImluamVjdElE
QktleUludG9TY3JpcHRWYWx1ZSIpOwogCi0gICAgQVNTRVJUKGtleVBhdGgudHlwZSgpID09IElE
QktleVBhdGg6OlR5cGU6OlN0cmluZyk7CisgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRp
dmU8U3RyaW5nPihrZXlQYXRoKSk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiBrZXlQYXRoRWxlbWVu
dHM7CiAgICAgSURCS2V5UGF0aFBhcnNlRXJyb3IgZXJyb3I7Ci0gICAgSURCUGFyc2VLZXlQYXRo
KGtleVBhdGguc3RyaW5nKCksIGtleVBhdGhFbGVtZW50cywgZXJyb3IpOworICAgIElEQlBhcnNl
S2V5UGF0aChXVEY6OmdldDxTdHJpbmc+KGtleVBhdGgpLCBrZXlQYXRoRWxlbWVudHMsIGVycm9y
KTsKICAgICBBU1NFUlQoZXJyb3IgPT0gSURCS2V5UGF0aFBhcnNlRXJyb3I6Ok5vbmUpOwogCiAg
ICAgaWYgKGtleVBhdGhFbGVtZW50cy5pc0VtcHR5KCkpCkBAIC0yNjksMTAgKzI2OSw4IEBAIGJv
b2wgaW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgSURC
S2V5RGF0YSYga2V5RGF0YSwgSlNWCiAKIFJlZlB0cjxJREJLZXk+IG1heWJlQ3JlYXRlSURCS2V5
RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0IEpTVmFsdWUm
IHZhbHVlLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQogewotICAgIEFTU0VSVCgha2V5UGF0
aC5pc051bGwoKSk7Ci0KLSAgICBpZiAoa2V5UGF0aC50eXBlKCkgPT0gSURCS2V5UGF0aDo6VHlw
ZTo6QXJyYXkpIHsKLSAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFycmF5ID0ga2V5UGF0
aC5hcnJheSgpOworICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxTdHJpbmc+
PihrZXlQYXRoKSkgeworICAgICAgICBhdXRvJiBhcnJheSA9IFdURjo6Z2V0PFZlY3RvcjxTdHJp
bmc+PihrZXlQYXRoKTsKICAgICAgICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+PiByZXN1bHQ7CiAg
ICAgICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFycmF5LnNpemUoKSk7CiAgICAg
ICAgIGZvciAoYXV0byYgc3RyaW5nIDogYXJyYXkpIHsKQEAgLTI4NCwxOCArMjgyLDE3IEBAIFJl
ZlB0cjxJREJLZXk+IG1heWJlQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChF
eGVjU3RhdGUmIGV4ZWMsIGNvbnN0CiAgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUFycmF5
KFdURk1vdmUocmVzdWx0KSk7CiAgICAgfQogCi0gICAgQVNTRVJUKGtleVBhdGgudHlwZSgpID09
IElEQktleVBhdGg6OlR5cGU6OlN0cmluZyk7Ci0gICAgcmV0dXJuIGludGVybmFsQ3JlYXRlSURC
S2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChleGVjLCB2YWx1ZSwga2V5UGF0aC5zdHJpbmco
KSk7CisgICAgcmV0dXJuIGludGVybmFsQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5
UGF0aChleGVjLCB2YWx1ZSwgV1RGOjpnZXQ8U3RyaW5nPihrZXlQYXRoKSk7CiB9CiAKIGJvb2wg
Y2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgSlNW
YWx1ZSYgc2NyaXB0VmFsdWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCiB7CiAgICAgTE9H
KFN0b3JhZ2VBUEksICJjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUiKTsKIAotICAgIEFT
U0VSVChrZXlQYXRoLnR5cGUoKSA9PSBJREJLZXlQYXRoOjpUeXBlOjpTdHJpbmcpOworICAgIEFT
U0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4oa2V5UGF0aCkpOwogICAgIFZlY3Rv
cjxTdHJpbmc+IGtleVBhdGhFbGVtZW50czsKICAgICBJREJLZXlQYXRoUGFyc2VFcnJvciBlcnJv
cjsKLSAgICBJREJQYXJzZUtleVBhdGgoa2V5UGF0aC5zdHJpbmcoKSwga2V5UGF0aEVsZW1lbnRz
LCBlcnJvcik7CisgICAgSURCUGFyc2VLZXlQYXRoKFdURjo6Z2V0PFN0cmluZz4oa2V5UGF0aCks
IGtleVBhdGhFbGVtZW50cywgZXJyb3IpOwogICAgIEFTU0VSVChlcnJvciA9PSBJREJLZXlQYXRo
UGFyc2VFcnJvcjo6Tm9uZSk7CiAKICAgICBpZiAoIWtleVBhdGhFbGVtZW50cy5zaXplKCkpCkBA
IC0zMzksMzUgKzMzNiwzMCBAQCBKU0M6OkpTVmFsdWUgaWRiS2V5RGF0YVRvU2NyaXB0VmFsdWUo
SlNDOjpFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0IElEQktleURhdGEmIGtleQogCiBzdGF0aWMgVmVj
dG9yPElEQktleURhdGE+IGNyZWF0ZUtleVBhdGhBcnJheShFeGVjU3RhdGUmIGV4ZWMsIEpTVmFs
dWUgdmFsdWUsIGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbykKIHsKLSAgICBWZWN0b3I8SURCS2V5
RGF0YT4ga2V5czsKLQotICAgIHN3aXRjaCAoaW5mby5rZXlQYXRoKCkudHlwZSgpKSB7Ci0gICAg
Y2FzZSBJREJLZXlQYXRoOjpUeXBlOjpBcnJheToKLSAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6
IGluZm8ua2V5UGF0aCgpLmFycmF5KCkpIHsKLSAgICAgICAgICAgIGF1dG8ga2V5ID0gaW50ZXJu
YWxDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKGV4ZWMsIHZhbHVlLCBlbnRy
eSk7Ci0gICAgICAgICAgICBpZiAoIWtleSkKLSAgICAgICAgICAgICAgICByZXR1cm4geyB9Owot
ICAgICAgICAgICAga2V5cy5hcHBlbmQoa2V5LmdldCgpKTsKLSAgICAgICAgfQotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIElEQktleVBhdGg6OlR5cGU6OlN0cmluZzogewotICAgICAgICBhdXRv
IGlkYktleSA9IGludGVybmFsQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChl
eGVjLCB2YWx1ZSwgaW5mby5rZXlQYXRoKCkuc3RyaW5nKCkpOworICAgIGF1dG8gdmlzaXRvciA9
IFdURjo6bWFrZVZpc2l0b3IoWyZdKGNvbnN0IFN0cmluZyYgc3RyaW5nKSAtPiBWZWN0b3I8SURC
S2V5RGF0YT4geworICAgICAgICBhdXRvIGlkYktleSA9IGludGVybmFsQ3JlYXRlSURCS2V5RnJv
bVNjcmlwdFZhbHVlQW5kS2V5UGF0aChleGVjLCB2YWx1ZSwgc3RyaW5nKTsKICAgICAgICAgaWYg
KCFpZGJLZXkpCiAgICAgICAgICAgICByZXR1cm4geyB9OwogCisgICAgICAgIFZlY3RvcjxJREJL
ZXlEYXRhPiBrZXlzOwogICAgICAgICBpZiAoaW5mby5tdWx0aUVudHJ5KCkgJiYgaWRiS2V5LT50
eXBlKCkgPT0gSW5kZXhlZERCOjpBcnJheSkgewogICAgICAgICAgICAgZm9yIChhdXRvJiBrZXkg
OiBpZGJLZXktPmFycmF5KCkpCiAgICAgICAgICAgICAgICAga2V5cy5hcHBlbmQoa2V5LmdldCgp
KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBrZXlzLmFwcGVuZChpZGJLZXkuZ2V0KCkp
OworICAgICAgICByZXR1cm4ga2V5czsKKyAgICB9LCBbJl0oY29uc3QgVmVjdG9yPFN0cmluZz4m
IHZlY3RvcikgLT4gVmVjdG9yPElEQktleURhdGE+IHsKKyAgICAgICAgVmVjdG9yPElEQktleURh
dGE+IGtleXM7CisgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiB2ZWN0b3IpIHsKKyAgICAgICAg
ICAgIGF1dG8ga2V5ID0gaW50ZXJuYWxDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQ
YXRoKGV4ZWMsIHZhbHVlLCBlbnRyeSk7CisgICAgICAgICAgICBpZiAoIWtleSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAga2V5cy5hcHBlbmQoa2V5LmdldCgpKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4ga2V5czsKKyAgICB9KTsKIAotICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgY2FzZSBJREJLZXlQYXRoOjpUeXBlOjpOdWxsOgotICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIHJldHVybiBrZXlzOworICAg
IHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIGluZm8ua2V5UGF0aCgpKTsKIH0KIAogdm9pZCBn
ZW5lcmF0ZUluZGV4S2V5Rm9yVmFsdWUoRXhlY1N0YXRlJiBleGVjLCBjb25zdCBJREJJbmRleElu
Zm8mIGluZm8sIEpTVmFsdWUgdmFsdWUsIEluZGV4S2V5JiBvdXRLZXkpCkBAIC0zODAsMjIgKzM3
MiwxNyBAQCB2b2lkIGdlbmVyYXRlSW5kZXhLZXlGb3JWYWx1ZShFeGVjU3RhdGUmIGV4ZWMsIGNv
bnN0IElEQkluZGV4SW5mbyYgaW5mbywgSlNWYWx1ZQogICAgIG91dEtleSA9IEluZGV4S2V5KFdU
Rk1vdmUoa2V5RGF0YXMpKTsKIH0KIAotSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IElEQktleVBhdGgmIHZhbHVlKQor
SlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIGNvbnN0IE9wdGlvbmFsPElEQktleVBhdGg+JiBrZXlQYXRoKQogewotICAgIHN3aXRj
aCAodmFsdWUudHlwZSgpKSB7Ci0gICAgY2FzZSBJREJLZXlQYXRoOjpUeXBlOjpOdWxsOgorICAg
IGlmICgha2V5UGF0aCkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgIGNhc2UgSURCS2V5
UGF0aDo6VHlwZTo6U3RyaW5nOgotICAgICAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoJnN0
YXRlLCB2YWx1ZS5zdHJpbmcoKSk7Ci0gICAgY2FzZSBJREJLZXlQYXRoOjpUeXBlOjpBcnJheToK
LSAgICAgICAgYXV0byBrZXlQYXRocyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwotICAgICAg
ICBmb3IgKGF1dG8mIHBhdGggOiB2YWx1ZS5hcnJheSgpKQotICAgICAgICAgICAga2V5UGF0aHMt
PmFwcGVuZChwYXRoKTsKLSAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0
LCBrZXlQYXRocyk7Ci0gICAgfQogCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0
dXJuIGpzTnVsbCgpOworICAgIGF1dG8gdmlzaXRvciA9IFdURjo6bWFrZVZpc2l0b3IoWyZdKGNv
bnN0IFN0cmluZyYgc3RyaW5nKSAtPiBKU1ZhbHVlIHsKKyAgICAgICAgcmV0dXJuIHRvSlM8SURM
RE9NU3RyaW5nPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdHJpbmcpOworICAgIH0sIFsmXShjb25z
dCBWZWN0b3I8U3RyaW5nPiYgdmVjdG9yKSAtPiBKU1ZhbHVlIHsKKyAgICAgICAgcmV0dXJuIHRv
SlM8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmVjdG9y
KTsKKyAgICB9KTsKKyAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBrZXlQYXRoLnZhbHVl
KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmgKaW5kZXggYWE0ZjVjM2JiOTg4MDhjYTNh
NDg3MGE4N2EzOTVjODEwNjdjOTIxNi4uNzU3YTI5YTA5N2YwY2IyOGQyNmI1YjRmZjEwMWMyYTdh
YWYyOWI4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGlu
Z1V0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdV
dGlsaXRpZXMuaApAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCiAKKyNpbmNsdWRlICJJREJLZXlQYXRoLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
IAogbmFtZXNwYWNlIEpTQyB7CkBAIC00MSwxMyArNDIsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogY2xhc3MgSURCSW5kZXhJbmZvOwogY2xhc3MgSURCS2V5OwogY2xhc3MgSURCS2V5RGF0YTsK
LWNsYXNzIElEQktleVBhdGg7CiBjbGFzcyBJREJWYWx1ZTsKIGNsYXNzIEluZGV4S2V5OwogY2xh
c3MgSlNET01HbG9iYWxPYmplY3Q7CiBjbGFzcyBUaHJlYWRTYWZlRGF0YUJ1ZmZlcjsKIAotSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIGNvbnN0
IElEQktleVBhdGgmKTsKKy8vIEZJWE1FOiBSZW1vdmUgdGhpcyBvbmNlIHdlIHN1cHBvcnQgcmV0
dXJuaW5nIHVuaW9uIHR5cGVzLgorSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBK
U0RPTUdsb2JhbE9iamVjdCYsIGNvbnN0IE9wdGlvbmFsPElEQktleVBhdGg+Jik7CiAKIFJlZlB0
cjxJREJLZXk+IG1heWJlQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChKU0M6
OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SlNWYWx1ZSYsIGNvbnN0IElEQktleVBhdGgmKTsKIGJv
b2wgY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKEpTQzo6RXhlY1N0YXRlJiwgY29uc3Qg
SlNDOjpKU1ZhbHVlJiwgY29uc3QgSURCS2V5UGF0aCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAKaW5kZXggYzVjODAxMzlk
NTNkMTViMTY1YWEwOGM1YTViZWRmZjc2MGM4YzllMS4uY2Y0MzBiYWU1ZDdiOWNlNThmYjk3N2U0
N2VhOGU0NDdhMzlhZjcyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckluZGV4ZWREQkFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCkBAIC0xNjIsMzkgKzE2MiwyNCBAQCB2b2lkIEV4
ZWN1dGFibGVXaXRoRGF0YWJhc2U6OnN0YXJ0KElEQkZhY3RvcnkqIGlkYkZhY3RvcnksIFNlY3Vy
aXR5T3JpZ2luKiwgY29ucwogfQogCiAKLXN0YXRpYyBSZWZQdHI8S2V5UGF0aD4ga2V5UGF0aEZy
b21JREJLZXlQYXRoKGNvbnN0IElEQktleVBhdGgmIGlkYktleVBhdGgpCitzdGF0aWMgUmVmUHRy
PEtleVBhdGg+IGtleVBhdGhGcm9tSURCS2V5UGF0aChjb25zdCBPcHRpb25hbDxJREJLZXlQYXRo
PiYgaWRiS2V5UGF0aCkKIHsKLSAgICBSZWZQdHI8S2V5UGF0aD4ga2V5UGF0aDsKLSAgICBzd2l0
Y2ggKGlkYktleVBhdGgudHlwZSgpKSB7Ci0gICAgY2FzZSBJREJLZXlQYXRoOjpUeXBlOjpOdWxs
OgotICAgICAgICBrZXlQYXRoID0gS2V5UGF0aDo6Y3JlYXRlKCkKLSAgICAgICAgICAgIC5zZXRU
eXBlKEtleVBhdGg6OlR5cGU6Ok51bGwpCi0gICAgICAgICAgICAucmVsZWFzZSgpOwotICAgICAg
ICBicmVhazsKLQotICAgIGNhc2UgSURCS2V5UGF0aDo6VHlwZTo6U3RyaW5nOgotICAgICAgICBr
ZXlQYXRoID0gS2V5UGF0aDo6Y3JlYXRlKCkKLSAgICAgICAgICAgIC5zZXRUeXBlKEtleVBhdGg6
OlR5cGU6OlN0cmluZykKLSAgICAgICAgICAgIC5yZWxlYXNlKCk7Ci0gICAgICAgIGtleVBhdGgt
PnNldFN0cmluZyhpZGJLZXlQYXRoLnN0cmluZygpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBj
YXNlIElEQktleVBhdGg6OlR5cGU6OkFycmF5OiB7CisgICAgaWYgKCFpZGJLZXlQYXRoKQorICAg
ICAgICByZXR1cm4gS2V5UGF0aDo6Y3JlYXRlKCkuc2V0VHlwZShLZXlQYXRoOjpUeXBlOjpOdWxs
KS5yZWxlYXNlKCk7CisKKyAgICBhdXRvIHZpc2l0b3IgPSBXVEY6Om1ha2VWaXNpdG9yKFtdKGNv
bnN0IFN0cmluZyYgc3RyaW5nKSB7CisgICAgICAgIFJlZlB0cjxLZXlQYXRoPiBrZXlQYXRoID0g
S2V5UGF0aDo6Y3JlYXRlKCkuc2V0VHlwZShLZXlQYXRoOjpUeXBlOjpTdHJpbmcpLnJlbGVhc2Uo
KTsKKyAgICAgICAga2V5UGF0aC0+c2V0U3RyaW5nKHN0cmluZyk7CisgICAgICAgIHJldHVybiBr
ZXlQYXRoOworICAgIH0sIFtdKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB2ZWN0b3IpIHsKICAgICAg
ICAgYXV0byBhcnJheSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz46OmNyZWF0
ZSgpOwotICAgICAgICBmb3IgKGF1dG8mIHN0cmluZyA6IGlkYktleVBhdGguYXJyYXkoKSkKKyAg
ICAgICAgZm9yIChhdXRvJiBzdHJpbmcgOiB2ZWN0b3IpCiAgICAgICAgICAgICBhcnJheS0+YWRk
SXRlbShzdHJpbmcpOwotICAgICAgICBrZXlQYXRoID0gS2V5UGF0aDo6Y3JlYXRlKCkKLSAgICAg
ICAgICAgIC5zZXRUeXBlKEtleVBhdGg6OlR5cGU6OkFycmF5KQotICAgICAgICAgICAgLnJlbGVh
c2UoKTsKKyAgICAgICAgUmVmUHRyPEtleVBhdGg+IGtleVBhdGggPSBLZXlQYXRoOjpjcmVhdGUo
KS5zZXRUeXBlKEtleVBhdGg6OlR5cGU6OkFycmF5KS5yZWxlYXNlKCk7CiAgICAgICAgIGtleVBh
dGgtPnNldEFycmF5KFdURk1vdmUoYXJyYXkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0g
ICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIGtleVBhdGg7CisgICAgICAgIHJldHVybiBrZXlQYXRoOworICAgIH0pOworICAgIHJl
dHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIGlkYktleVBhdGgudmFsdWUoKSk7CiB9CiAKIHN0YXRp
YyBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uRm9yRGF0YWJhc2UoSURCRGF0YWJh
c2UqIGlkYkRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3QgU3Ry
aW5nJiBtb2RlID0gSURCVHJhbnNhY3Rpb246Om1vZGVSZWFkT25seSgpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCUmVzdWx0LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQlJlc3Vs
dC5jcHAKaW5kZXggYTBlYzgxYTNlZDU4ODkxMGJlMmFhM2IzOWIxY2EwMWIzNmQ4YTIyYi4uNzA2
YzYyZWI1MjdmMWI2Y2YyYjRhZTkyZTAzZjRkNDk0ZDA5YjU3MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvU2hhcmVkL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCUmVzdWx0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJSZXN1bHQu
Y3BwCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAot
I2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCmluZGV4IDM3OTNmYmJjYjhmMmMzMzQ4MDRhODNm
YzMyMmZmNTFmODA0NDc2ODQuLjY2ZmM2MTI2ZGUzMjRiZmQzMmFjN2IwNjQ1ZTI5OTEzNmMzZTAy
YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2Rl
cnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMu
Y3BwCkBAIC0yMzAzLDUgKzIzMDMsMzUgQEAgYm9vbCBBcmd1bWVudENvZGVyPENhcHR1cmVEZXZp
Y2U+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgV2ViQ29yZTo6Q2FwdHVyZURldmkKIH0KICNl
bmRpZgogCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCit2b2lkIEFyZ3VtZW50Q29kZXI8
SURCS2V5UGF0aD46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBJREJLZXlQYXRoJiBr
ZXlQYXRoKQoreworICAgIGJvb2wgaXNTdHJpbmcgPSBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFN0
cmluZz4oa2V5UGF0aCk7CisgICAgZW5jb2RlciA8PCBpc1N0cmluZzsKKyAgICBpZiAoaXNTdHJp
bmcpCisgICAgICAgIGVuY29kZXIgPDwgV1RGOjpnZXQ8U3RyaW5nPihrZXlQYXRoKTsKKyAgICBl
bHNlCisgICAgICAgIGVuY29kZXIgPDwgV1RGOjpnZXQ8VmVjdG9yPFN0cmluZz4+KGtleVBhdGgp
OworfQorCitib29sIEFyZ3VtZW50Q29kZXI8SURCS2V5UGF0aD46OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyLCBJREJLZXlQYXRoJiBrZXlQYXRoKQoreworICAgIGJvb2wgaXNTdHJpbmc7CisgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShpc1N0cmluZykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoaXNTdHJpbmcpIHsKKyAgICAgICAgU3RyaW5nIHN0cmluZzsKKyAgICAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShzdHJpbmcpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBrZXlQYXRoID0gc3RyaW5nOworICAgIH0gZWxzZSB7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+
IHZlY3RvcjsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2ZWN0b3IpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBrZXlQYXRoID0gdmVjdG9yOworICAgIH0KKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBJUEMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaCBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAppbmRleCBiNGIxMTFiNzIyMzQ1
N2U0OGJkZTcyYmNmZTliZTcyYzk1MmNmYTdhLi42MDRkYzk3ODg2MjFmODAxMmIzOWEzODg5YmIy
OGFlZDU5NmFhN2EwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFy
Z3VtZW50Q29kZXJzLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVu
dENvZGVycy5oCkBAIC0xMzQsNiArMTM0LDEyIEBAIHN0cnVjdCBNZWRpYUNvbnN0cmFpbnRzRGF0
YTsKIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCituYW1lc3BhY2Ug
V2ViQ29yZSB7Cit1c2luZyBJREJLZXlQYXRoID0gVmFyaWFudDxTdHJpbmcsIFZlY3RvcjxTdHJp
bmc+PjsKK30KKyNlbmRpZgorCiBuYW1lc3BhY2UgSVBDIHsKIAogdGVtcGxhdGU8PiBzdHJ1Y3Qg
QXJndW1lbnRDb2RlcjxXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0+IHsKQEAgLTU0Nyw2ICs1NTMs
MTUgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpDYXB0dXJlRGV2
aWNlPiB7CiB9OwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpJREJLZXlQYXRoPiB7CisgICAg
c3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpJREJLZXlQYXRoJik7
CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImLCBXZWJDb3JlOjpJREJLZXlQYXRoJik7
Cit9OworCisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgSVBDCiAKIG5hbWVzcGFjZSBXVEYgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERC
L1dlYklEQkNvbm5lY3Rpb25Ub1NlcnZlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCQ29ubmVjdGlvblRvU2VydmVyLmNwcAppbmRleCA3
YjNiM2Y4MTYyYmQzZmZhNWU5MDZjYjg2NGNmNzk0YjI1NWUwYTFkLi5mNmRlZmNlNTdmZjRhYzA4
MzQxYTY3MjQ1MGMwNDY4NTA3MTkwNGY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCQ29ubmVjdGlvblRvU2VydmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURC
Q29ubmVjdGlvblRvU2VydmVyLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkRhdGFi
YXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1
ZGUgIldlYklEQkNvbm5lY3Rpb25Ub0NsaWVudE1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViSURC
UmVzdWx0LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDRjM2NkZmEzZWE2NGJk
ZmIzODQxODE1OTNjMTU3NGU2ZTg3YTM3YTguLjgxYTdlNzM5ZjcxOThlN2JjZWFhODE5ZTg2MDc3
M2FiNDY3YWEyYzcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxNi0xMC0yNSAgQ2hyaXMgRHVt
ZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFJlcGxhY2UgSURCS2V5UGF0aCB3aXRo
IGEgV1RGOjpWYXJpYW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjM5MDkKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAg
ICAgICBSZWJhc2VsaW5lIGEgZmV3IHRlc3RzIG5vdyB0aGF0IElEQkluZGV4LmtleVBhdGggLyBJ
REJPYmplY3RTdG9yZS5rZXlQYXRoCisgICAgICAgIG5vIGxvbmdlciBpbmNvcnJlY3RseSByZXR1
cm4gRE9NU3RyaW5nTGlzdCBvYmplY3RzIGFuZCByZXR1cm4gcmVndWxhcgorICAgICAgICBhcnJh
eXMgaW5zdGVhZC4KKworICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9pZGJpbmRl
eC1wcm9wZXJ0aWVzLWJhc2ljLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4
ZWRkYi9tb2Rlcm4vaWRiaW5kZXgtcHJvcGVydGllcy1iYXNpYy1wcml2YXRlLWV4cGVjdGVkLnR4
dDoKKwogMjAxNi0xMC0yNiAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAg
ICAgIFdoZW4gcGFzdGluZyB3ZWIgYXJjaGl2ZSwgd2lkdGggc3BlY2lmaWVycyBpbiBzcmNzZXQg
YXR0cmlidXRlIGNoYW5nZSBpbnRvIGRlbnNpdHkgc3BlY2lmaWVycwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2lkYmluZGV4LXByb3BlcnRpZXMtYmFz
aWMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2lk
YmluZGV4LXByb3BlcnRpZXMtYmFzaWMtZXhwZWN0ZWQudHh0CmluZGV4IGMzN2I1NTgzYmQwZjQ3
NGFiODhjZWNhN2Q5Njg4OGJjMDQwODc4OGEuLjUyMGEyMjEzMmYyYjljMzEwZTYwZDBmYmU3NzQy
NjM1ZTk2YzA5YmQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21v
ZGVybi9pZGJpbmRleC1wcm9wZXJ0aWVzLWJhc2ljLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRU
ZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vaWRiaW5kZXgtcHJvcGVydGllcy1iYXNpYy1l
eHBlY3RlZC50eHQKQEAgLTQxLDEzICs0MSwxMyBAQCB0cnVlCiBUZXN0SW5kZXg2CiBbb2JqZWN0
IElEQk9iamVjdFN0b3JlXQogVGVzdE9iamVjdFN0b3JlCi1bb2JqZWN0IERPTVN0cmluZ0xpc3Rd
Citmb28KIGZhbHNlCiBmYWxzZQogVGVzdEluZGV4NwogW29iamVjdCBJREJPYmplY3RTdG9yZV0K
IFRlc3RPYmplY3RTdG9yZQotW29iamVjdCBET01TdHJpbmdMaXN0XQorZm9vLGJhcgogZmFsc2UK
IGZhbHNlCiBJbml0aWFsIHVwZ3JhZGUgdmVyc2lvbmNoYW5nZSB0cmFuc2FjdGlvbiBjb21wbGV0
ZQpAQCAtODQsMTMgKzg0LDEzIEBAIHRydWUKIFRlc3RJbmRleDYKIFtvYmplY3QgSURCT2JqZWN0
U3RvcmVdCiBUZXN0T2JqZWN0U3RvcmUKLVtvYmplY3QgRE9NU3RyaW5nTGlzdF0KK2ZvbwogZmFs
c2UKIGZhbHNlCiBUZXN0SW5kZXg3CiBbb2JqZWN0IElEQk9iamVjdFN0b3JlXQogVGVzdE9iamVj
dFN0b3JlCi1bb2JqZWN0IERPTVN0cmluZ0xpc3RdCitmb28sYmFyCiBmYWxzZQogZmFsc2UKIHJl
YWRvbmx5IHRyYW5zYWN0aW9uIGNvbXBsZXRlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9tb2Rlcm4vaWRiaW5kZXgtcHJvcGVydGllcy1iYXNpYy1wcml2YXRlLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9pZGJpbmRl
eC1wcm9wZXJ0aWVzLWJhc2ljLXByaXZhdGUtZXhwZWN0ZWQudHh0CmluZGV4IGMzN2I1NTgzYmQw
ZjQ3NGFiODhjZWNhN2Q5Njg4OGJjMDQwODc4OGEuLjUyMGEyMjEzMmYyYjljMzEwZTYwZDBmYmU3
NzQyNjM1ZTk2YzA5YmQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRi
L21vZGVybi9pZGJpbmRleC1wcm9wZXJ0aWVzLWJhc2ljLXByaXZhdGUtZXhwZWN0ZWQudHh0Cisr
KyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9pZGJpbmRleC1wcm9wZXJ0
aWVzLWJhc2ljLXByaXZhdGUtZXhwZWN0ZWQudHh0CkBAIC00MSwxMyArNDEsMTMgQEAgdHJ1ZQog
VGVzdEluZGV4NgogW29iamVjdCBJREJPYmplY3RTdG9yZV0KIFRlc3RPYmplY3RTdG9yZQotW29i
amVjdCBET01TdHJpbmdMaXN0XQorZm9vCiBmYWxzZQogZmFsc2UKIFRlc3RJbmRleDcKIFtvYmpl
Y3QgSURCT2JqZWN0U3RvcmVdCiBUZXN0T2JqZWN0U3RvcmUKLVtvYmplY3QgRE9NU3RyaW5nTGlz
dF0KK2ZvbyxiYXIKIGZhbHNlCiBmYWxzZQogSW5pdGlhbCB1cGdyYWRlIHZlcnNpb25jaGFuZ2Ug
dHJhbnNhY3Rpb24gY29tcGxldGUKQEAgLTg0LDEzICs4NCwxMyBAQCB0cnVlCiBUZXN0SW5kZXg2
CiBbb2JqZWN0IElEQk9iamVjdFN0b3JlXQogVGVzdE9iamVjdFN0b3JlCi1bb2JqZWN0IERPTVN0
cmluZ0xpc3RdCitmb28KIGZhbHNlCiBmYWxzZQogVGVzdEluZGV4NwogW29iamVjdCBJREJPYmpl
Y3RTdG9yZV0KIFRlc3RPYmplY3RTdG9yZQotW29iamVjdCBET01TdHJpbmdMaXN0XQorZm9vLGJh
cgogZmFsc2UKIGZhbHNlCiByZWFkb25seSB0cmFuc2FjdGlvbiBjb21wbGV0ZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>