<?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>147757</bug_id>
          
          <creation_ts>2015-08-06 17:03:42 -0700</creation_ts>
          <short_desc>Move concrete KeyedDecoder/Encoder implementations to WebCore</short_desc>
          <delta_ts>2015-08-07 09:05:21 -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>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1115558</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-08-06 17:03:42 -0700</bug_when>
    <thetext>Move concrete KeyedDecoder/Encoder implementations to WebCore

They&apos;ll be needed there for some feature work I&apos;m doing, and there&apos;s no particular benefit to having them in WK2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115643</commentid>
    <comment_count>1</comment_count>
      <attachid>258453</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-08-06 21:53:00 -0700</bug_when>
    <thetext>Created attachment 258453
Patch v1 - EWS to tell me what platforms break.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115644</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-06 21:54:12 -0700</bug_when>
    <thetext>Attachment 258453 did not pass style-queue:


ERROR: Source/WebCore/platform/glib/KeyedDecoderGlib.h:26:  #ifndef header guard has wrong style, please use: KeyedDecoderGlib_h  [build/header_guard] [5]
ERROR: Source/WebCore/platform/cf/KeyedDecoderCF.h:26:  #ifndef header guard has wrong style, please use: KeyedDecoderCF_h  [build/header_guard] [5]
ERROR: Source/WebCore/platform/cf/KeyedEncoderCF.h:26:  #ifndef header guard has wrong style, please use: KeyedEncoderCF_h  [build/header_guard] [5]
ERROR: Source/WebCore/platform/glib/KeyedEncoderGlib.h:26:  #ifndef header guard has wrong style, please use: KeyedEncoderGlib_h  [build/header_guard] [5]
Total errors found: 4 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115645</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-08-06 21:57:35 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Attachment 258453 [details] did not pass style-queue:
&gt; 
&gt; 
&gt; ERROR: Source/WebCore/platform/glib/KeyedDecoderGlib.h:26:  #ifndef header
&gt; guard has wrong style, please use: KeyedDecoderGlib_h  [build/header_guard]
&gt; [5]
&gt; ERROR: Source/WebCore/platform/cf/KeyedDecoderCF.h:26:  #ifndef header guard
&gt; has wrong style, please use: KeyedDecoderCF_h  [build/header_guard] [5]
&gt; ERROR: Source/WebCore/platform/cf/KeyedEncoderCF.h:26:  #ifndef header guard
&gt; has wrong style, please use: KeyedEncoderCF_h  [build/header_guard] [5]
&gt; ERROR: Source/WebCore/platform/glib/KeyedEncoderGlib.h:26:  #ifndef header
&gt; guard has wrong style, please use: KeyedEncoderGlib_h  [build/header_guard]
&gt; [5]
&gt; Total errors found: 4 in 11 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against
&gt; check-webkit-style.

Indeed. Fixed locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115651</commentid>
    <comment_count>4</comment_count>
      <attachid>258455</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-08-06 22:29:33 -0700</bug_when>
    <thetext>Created attachment 258455
Patch v2 for EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115652</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-06 22:32:07 -0700</bug_when>
    <thetext>Attachment 258455 did not pass style-queue:


ERROR: Source/WebCore/PlatformGTK.cmake:70:  No trailing spaces  [whitespace/trailing] [5]
ERROR: Source/WebCore/PlatformEfl.cmake:111:  No trailing spaces  [whitespace/trailing] [5]
Total errors found: 2 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115654</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-08-06 22:35:42 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Attachment 258455 [details] did not pass style-queue:
&gt; 
&gt; 
&gt; ERROR: Source/WebCore/PlatformGTK.cmake:70:  No trailing spaces 
&gt; [whitespace/trailing] [5]
&gt; ERROR: Source/WebCore/PlatformEfl.cmake:111:  No trailing spaces 
&gt; [whitespace/trailing] [5]
&gt; Total errors found: 2 in 13 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against
&gt; check-webkit-style.

Will fix with a final patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115762</commentid>
    <comment_count>7</comment_count>
      <attachid>258503</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-08-07 08:26:16 -0700</bug_when>
    <thetext>Created attachment 258503
Patch v3 - For review/landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115764</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-07 08:29:13 -0700</bug_when>
    <thetext>Attachment 258503 did not pass style-queue:


ERROR: Source/WebCore/PlatformGTK.cmake:70:  No trailing spaces  [whitespace/trailing] [5]
ERROR: Source/WebCore/PlatformEfl.cmake:111:  No trailing spaces  [whitespace/trailing] [5]
Total errors found: 2 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115765</commentid>
    <comment_count>9</comment_count>
      <attachid>258504</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-08-07 08:31:53 -0700</bug_when>
    <thetext>Created attachment 258504
Patch v4 - For review and landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115766</commentid>
    <comment_count>10</comment_count>
      <attachid>258504</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2015-08-07 08:43:08 -0700</bug_when>
    <thetext>Comment on attachment 258504
Patch v4 - For review and landing

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115768</commentid>
    <comment_count>11</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-08-07 09:05:21 -0700</bug_when>
    <thetext>https://trac.webkit.org/changeset/188126</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258453</attachid>
            <date>2015-08-06 21:53:00 -0700</date>
            <delta_ts>2015-08-06 22:29:33 -0700</delta_ts>
            <desc>Patch v1 - EWS to tell me what platforms break.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>89437</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBjNTQwZDhhLi44MDdlNzYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xOTk4LDYgKzE5OTgsMTAgQEAKIAkJNTE3OUNF
MkExOTVDOTE4NjAwMTlDMTk4IC8qIEdhbWVwYWRQcm92aWRlckNsaWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3OUNFMjkxOTVDOTE4NjAwMTlD
MTk4IC8qIEdhbWVwYWRQcm92aWRlckNsaWVudC5oICovOyB9OwogCQk1MTc5Q0UzNjE5NUNBQzdF
MDAxOUMxOTggLyogSElER2FtZXBhZFByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNzlDRTM0MTk1Q0FDN0UwMDE5QzE5OCAvKiBISURH
YW1lcGFkUHJvdmlkZXIuY3BwICovOyB9OwogCQk1MTc5Q0UzNzE5NUNBQzdFMDAxOUMxOTggLyog
SElER2FtZXBhZFByb3ZpZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MTc5Q0UzNTE5NUNBQzdFMDAxOUMxOTggLyogSElER2FtZXBhZFByb3ZpZGVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTE3
QTYzQzMxQjc0MzE4NzAwRTdEQ0RDIC8qIEtleWVkRGVjb2RlckNGLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0E2M0JGMUI3NDMxN0UwMEU3RENE
QyAvKiBLZXllZERlY29kZXJDRi5jcHAgKi87IH07CisJCTUxN0E2M0M0MUI3NDMxOEIwMEU3RENE
QyAvKiBLZXllZEVuY29kZXJDRi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTdBNjNDMTFCNzQzMTdFMDBFN0RDREMgLyogS2V5ZWRFbmNvZGVyQ0Yu
Y3BwICovOyB9OworCQk1MTdBNjNDNTFCNzQzMThGMDBFN0RDREMgLyogS2V5ZWREZWNvZGVyQ0Yu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0E2M0Mw
MUI3NDMxN0UwMEU3RENEQyAvKiBLZXllZERlY29kZXJDRi5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUxN0E2M0M2MUI3NDMxOTIwMEU3RENEQyAv
KiBLZXllZEVuY29kZXJDRi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTE3QTYzQzIxQjc0MzE3RTAwRTdEQ0RDIC8qIEtleWVkRW5jb2RlckNGLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE3RkJBMUUx
NTFBQjE3QzAwQjU3OTU5IC8qIERPTVdpbmRvd0V4dGVuc2lvbi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTdGQkExNzE1MUFBNzFCMDBCNTc5NTkg
LyogRE9NV2luZG93RXh0ZW5zaW9uLmNwcCAqLzsgfTsKIAkJNTE4OUYwMUQxMEIzN0JEOTAwRjND
NzM5IC8qIEpTUG9wU3RhdGVFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTg5RjAxQjEwQjM3QkQ5MDBGM0M3MzkgLyogSlNQb3BTdGF0ZUV2
ZW50LmNwcCAqLzsgfTsKIAkJNTE4OUYwMUUxMEIzN0JEOTAwRjNDNzM5IC8qIEpTUG9wU3RhdGVF
dmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE4
OUYwMUMxMEIzN0JEOTAwRjNDNzM5IC8qIEpTUG9wU3RhdGVFdmVudC5oICovOyB9OwpAQCAtOTI0
OSw2ICs5MjUzLDEwIEBACiAJCTUxNzlDRTI5MTk1QzkxODYwMDE5QzE5OCAvKiBHYW1lcGFkUHJv
dmlkZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2FtZXBhZFBy
b3ZpZGVyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNzlDRTM0MTk1
Q0FDN0UwMDE5QzE5OCAvKiBISURHYW1lcGFkUHJvdmlkZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSElER2FtZXBhZFByb3ZpZGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTE3OUNFMzUxOTVDQUM3RTAwMTlDMTk4IC8qIEhJREdhbWVwYWRQ
cm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBISURHYW1lcGFkUHJv
dmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE3QTYzQkYxQjc0MzE3RTAw
RTdEQ0RDIC8qIEtleWVkRGVjb2RlckNGLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEtleWVkRGVjb2RlckNGLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTE3QTYzQzAxQjc0MzE3RTAwRTdEQ0RDIC8qIEtleWVkRGVjb2RlckNGLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEtleWVkRGVjb2RlckNGLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTUxN0E2M0MxMUI3NDMxN0UwMEU3RENEQyAvKiBLZXllZEVuY29kZXJD
Ri5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBLZXllZEVuY29kZXJD
Ri5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxN0E2M0MyMUI3NDMxN0UwMEU3
RENEQyAvKiBLZXllZEVuY29kZXJDRi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBLZXllZEVuY29kZXJDRi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTdGQkEx
NzE1MUFBNzFCMDBCNTc5NTkgLyogRE9NV2luZG93RXh0ZW5zaW9uLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERPTVdpbmRvd0V4dGVuc2lvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxN0ZCQTE4MTUxQUE3MUIwMEI1Nzk1OSAvKiBET01XaW5k
b3dFeHRlbnNpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NV2luZG93
RXh0ZW5zaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxODlGMDFCMTBCMzdC
RDkwMEYzQzczOSAvKiBKU1BvcFN0YXRlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSlNQb3BTdGF0ZUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTE1NDUxLDYgKzE1NDU5LDEwIEBACiAJCQkJNDQzODE3RkQxQTkxQjJGODAwNkUw
NEYyIC8qIENvcmVNZWRpYVNvZnRMaW5rLmNwcCAqLywKIAkJCQk0NDM4MTdGRTFBOTFCMkY4MDA2
RTA0RjIgLyogQ29yZU1lZGlhU29mdExpbmsuaCAqLywKIAkJCQk1MTYwMzA2QjBDQzQzNjIzMDBD
OEFDMjUgLyogRmlsZVN5c3RlbUNGLmNwcCAqLywKKwkJCQk1MTdBNjNCRjFCNzQzMTdFMDBFN0RD
REMgLyogS2V5ZWREZWNvZGVyQ0YuY3BwICovLAorCQkJCTUxN0E2M0MwMUI3NDMxN0UwMEU3RENE
QyAvKiBLZXllZERlY29kZXJDRi5oICovLAorCQkJCTUxN0E2M0MxMUI3NDMxN0UwMEU3RENEQyAv
KiBLZXllZEVuY29kZXJDRi5jcHAgKi8sCisJCQkJNTE3QTYzQzIxQjc0MzE3RTAwRTdEQ0RDIC8q
IEtleWVkRW5jb2RlckNGLmggKi8sCiAJCQkJNUNCQzhEQUExQUFBMzAyMjAwRTFDODAzIC8qIE1l
ZGlhQWNjZXNzaWJpbGl0eVNvZnRMaW5rLmNwcCAqLywKIAkJCQk1Q0JDOERBQjFBQUEzMDIyMDBF
MUM4MDMgLyogTWVkaWFBY2Nlc3NpYmlsaXR5U29mdExpbmsuaCAqLywKIAkJCQkyRDc2QkI4MzE5
NDU2RjgxMDBDRkQyOUEgLyogUnVuTG9vcE9ic2VydmVyLmNwcCAqLywKQEAgLTI1NjI0LDYgKzI1
NjM2LDcgQEAKIAkJCQkwNzk2OURCMDE3RDE0MTUxMDA3RkY4NDIgLyogSlNSVENEVE1GU2VuZGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzk2OURCMjE3RDE0MTUxMDA3RkY4NDIgLyogSlNSVENE
VE1GVG9uZUNoYW5nZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzk2OURCNjE3RDE0MTUx
MDA3RkY4NDIgLyogSlNSVENJY2VDYW5kaWRhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxN0E2
M0M2MUI3NDMxOTIwMEU3RENEQyAvKiBLZXllZEVuY29kZXJDRi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMDc5NjlEQjgxN0QxNDE1MTAwN0ZGODQyIC8qIEpTUlRDSWNlQ2FuZGlkYXRlRXZlbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCTA3Mzc5NEVDMTlFRTM0MUUwMEU1QTA0NSAvKiBKU1JUQ0ljZVNl
cnZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc5NjlEQkExN0QxNDE1MTAwN0ZGODQyIC8qIEpT
UlRDUGVlckNvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLApAQCAtMjY0MjQsNiArMjY0MzcsNyBA
QAogCQkJCTMxOTU1QTg4MTYwRDE5OTIwMDg1ODAyNSAvKiBSZW5kZXJTbmFwc2hvdHRlZFBsdWdJ
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM4QzhGQUUwRERDRDMxQjAwQjU5MkY0IC8qIFJlbmRl
clN0eWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzVFQjY2ODBFODFDQjcxMDBCMjU5NjUgLyog
UmVuZGVyU3R5bGVDb25zdGFudHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxN0E2M0M1MUI3NDMx
OEYwMEU3RENEQyAvKiBLZXllZERlY29kZXJDRi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM2NzA4
QzExMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR0Jsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0MzY3MDhDMzEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHQ29udGFpbmVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkyQjM2NUM4NDE1MjUxMTlFMDA5MUQyN0IgLyogUmVuZGVyU1ZHRWxsaXBz
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTYyNSw2ICsyOTYzOSw3IEBACiAJCQkJMDdDNTlCNjgx
N0Y3ODRCQTAwMEZCQ0JCIC8qIE1lZGlhU291cmNlU3RhdGVzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTA3OEUwOEZGMTdEMTRDRUUwMDQyMEFBMSAvKiBNZWRpYVN0cmVhbS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwNzhFMDk0QjE3RDE3MDk2MDA0MjBBQTEgLyogTWVkaWFTdHJlYW1BdWRpb0Rl
c3RpbmF0aW9uTm9kZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTdBNjNDMzFCNzQzMTg3MDBF
N0RDREMgLyogS2V5ZWREZWNvZGVyQ0YuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDc4MzIyODQx
ODAxM0VEODAwOTk5RTBDIC8qIE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJRkQ2NzFBNzcxNTlCQjA3MDAwMTk3NTU5IC8qIE1lZGlhU3RyZWFtQXVkaW9Tb3Vy
Y2VOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3MDU4NTE1MTdGQjBFRUEwMDVGMkJDQiAv
KiBNZWRpYVN0cmVhbUNhcGFiaWxpdGllcy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI5NzM1LDYg
KzI5NzUwLDcgQEAKIAkJCQkxQTBENTczNjBBNUM3N0ZFMDA3RURENEMgLyogT3ZlcmZsb3dFdmVu
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5QjU1RUVFOTFCM0U4ODk4MDA1MzQyQkMgLyogRWRp
dG9yQ29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQk2NUZFQTg2OTA5ODMzQURFMDBCRUQ0QUIg
LyogUGFnZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTdBNjNDNDFCNzQzMThCMDBFN0RDREMg
LyogS2V5ZWRFbmNvZGVyQ0YuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3N0U3NzYwQkY0MTM0
QTAwMTUyODcyIC8qIFBhZ2VDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDRDVFNUI2MTFB
MTVGMTU2MDAwQzYwOUUgLyogUGFnZUNvbmZpZ3VyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRjM4MjA4OTIxNDdEMzVGOTAwMTBCQzA2IC8qIFBhZ2VDb25zb2xlQWdlbnQuY3BwIGluIFNv
dXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LZXllZENvZGlu
Zy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS2V5ZWRDb2RpbmcuaAppbmRleCA5ZmE1Yzhm
Li5lMjk2OWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LZXllZENvZGlu
Zy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tleWVkQ29kaW5nLmgKQEAgLTM1LDEw
ICszNSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiAKIGNs
YXNzIEtleWVkRGVjb2RlciB7Ci1wcm90ZWN0ZWQ6CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxLZXllZERlY29kZXI+IGRlY29kZXIoY29uc3QgdWlu
dDhfdCogZGF0YSwgc2l6ZV90KTsKKwogICAgIHZpcnR1YWwgfktleWVkRGVjb2RlcigpIHsgfQog
Ci1wdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGRlY29kZUJ5dGVzKGNvbnN0IFN0cmluZyYga2V5
LCBjb25zdCB1aW50OF90KiYsIHNpemVfdCYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZGVjb2Rl
Qm9vbChjb25zdCBTdHJpbmcmIGtleSwgYm9vbCYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZGVj
b2RlVUludDMyKGNvbnN0IFN0cmluZyYga2V5LCB1aW50MzJfdCYpID0gMDsKQEAgLTEyNSw2ICsx
MjYsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorcHJvdGVj
dGVkOgorICAgIEtleWVkRGVjb2RlcigpCisgICAgeworICAgIH0KKwogcHJpdmF0ZToKICAgICB2
aXJ0dWFsIGJvb2wgYmVnaW5PYmplY3QoY29uc3QgU3RyaW5nJiBrZXkpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgZW5kT2JqZWN0KCkgPSAwOwpAQCAtMTM2LDEwICsxNDIsMTEgQEAgcHJpdmF0ZToK
IH07CiAKIGNsYXNzIEtleWVkRW5jb2RlciB7Ci1wcm90ZWN0ZWQ6CitwdWJsaWM6CisgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxLZXllZEVuY29kZXI+IGVuY29kZXIo
KTsKKwogICAgIHZpcnR1YWwgfktleWVkRW5jb2RlcigpIHsgfQogCi1wdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGVuY29kZUJ5dGVzKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCB1aW50OF90Kiwg
c2l6ZV90KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGVuY29kZUJvb2woY29uc3QgU3RyaW5nJiBr
ZXksIGJvb2wpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlVUludDMyKGNvbnN0IFN0cmlu
ZyYga2V5LCB1aW50MzJfdCkgPSAwOwpAQCAtMTg4LDYgKzE5NSwxMSBAQCBwdWJsaWM6CiAgICAg
ICAgIGVuZEFycmF5KCk7CiAgICAgfQogCitwcm90ZWN0ZWQ6CisgICAgS2V5ZWRFbmNvZGVyKCkK
KyAgICB7CisgICAgfQorCiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBiZWdpbk9iamVjdChj
b25zdCBTdHJpbmcmIGtleSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBlbmRPYmplY3QoKSA9IDA7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9LZXllZERlY29kZXJDRi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9LZXllZERlY29kZXJDRi5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUzNGJhNwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL0tleWVkRGVjb2RlckNGLmNwcApAQCAtMCwwICsx
LDE4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJLZXll
ZERlY29kZXJDRi5oIgorCisjaW5jbHVkZSA8d3RmL2NmL1R5cGVDYXN0c0NGLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RkOjp1
bmlxdWVfcHRyPEtleWVkRGVjb2Rlcj4gS2V5ZWREZWNvZGVyOjpkZWNvZGVyKGNvbnN0IHVpbnQ4
X3QqIGRhdGEsIHNpemVfdCBzaXplKQoreworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEtl
eWVkRGVjb2RlckNGPihkYXRhLCBzaXplKTsKK30KKworS2V5ZWREZWNvZGVyQ0Y6OktleWVkRGVj
b2RlckNGKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQoreworICAgIGF1dG8gY2ZE
YXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVXaXRoQnl0ZXNOb0NvcHkoa0NGQWxsb2NhdG9yRGVm
YXVsdCwgZGF0YSwgc2l6ZSwga0NGQWxsb2NhdG9yTnVsbCkpOworCisgICAgaWYgKGF1dG8gcm9v
dERpY3Rpb25hcnkgPSBhZG9wdENGKGR5bmFtaWNfY2ZfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENG
UHJvcGVydHlMaXN0Q3JlYXRlV2l0aERhdGEoa0NGQWxsb2NhdG9yRGVmYXVsdCwgY2ZEYXRhLmdl
dCgpLCBrQ0ZQcm9wZXJ0eUxpc3RJbW11dGFibGUsIG51bGxwdHIsIG51bGxwdHIpKSkpCisgICAg
ICAgIG1fcm9vdERpY3Rpb25hcnkgPSBXVEY6Om1vdmUocm9vdERpY3Rpb25hcnkpOworICAgIGVs
c2UKKyAgICAgICAgbV9yb290RGljdGlvbmFyeSA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIG51bGxwdHIsIG51bGxwdHIsIDAsICZrQ0ZUeXBlRGljdGlv
bmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKyAg
ICBtX2RpY3Rpb25hcnlTdGFjay5hcHBlbmQobV9yb290RGljdGlvbmFyeS5nZXQoKSk7Cit9CisK
K0tleWVkRGVjb2RlckNGOjp+S2V5ZWREZWNvZGVyQ0YoKQoreworICAgIEFTU0VSVChtX2RpY3Rp
b25hcnlTdGFjay5zaXplKCkgPT0gMSk7CisgICAgQVNTRVJUKG1fZGljdGlvbmFyeVN0YWNrLmxh
c3QoKSA9PSBtX3Jvb3REaWN0aW9uYXJ5KTsKKyAgICBBU1NFUlQobV9hcnJheVN0YWNrLmlzRW1w
dHkoKSk7CisgICAgQVNTRVJUKG1fYXJyYXlJbmRleFN0YWNrLmlzRW1wdHkoKSk7Cit9CisKK2Jv
b2wgS2V5ZWREZWNvZGVyQ0Y6OmRlY29kZUJ5dGVzKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCB1
aW50OF90KiYgYnl0ZXMsIHNpemVfdCYgc2l6ZSkKK3sKKyAgICBhdXRvIGRhdGEgPSBkeW5hbWlj
X2NmX2Nhc3Q8Q0ZEYXRhUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShtX2RpY3Rpb25hcnlTdGFj
ay5sYXN0KCksIGtleS5jcmVhdGVDRlN0cmluZygpLmdldCgpKSk7CisgICAgaWYgKCFkYXRhKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBieXRlcyA9IENGRGF0YUdldEJ5dGVQdHIoZGF0
YSk7CisgICAgc2l6ZSA9IENGRGF0YUdldExlbmd0aChkYXRhKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBLZXllZERlY29kZXJDRjo6ZGVjb2RlQm9vbChjb25zdCBTdHJpbmcmIGtleSwg
Ym9vbCYgcmVzdWx0KQoreworICAgIGF1dG8gYm9vbGVhbiA9IGR5bmFtaWNfY2ZfY2FzdDxDRkJv
b2xlYW5SZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwg
a2V5LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKTsKKyAgICBpZiAoIWJvb2xlYW4pCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHJlc3VsdCA9IENGQm9vbGVhbkdldFZhbHVlKGJvb2xlYW4p
OworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEtleWVkRGVjb2RlckNGOjpkZWNvZGVVSW50
MzIoY29uc3QgU3RyaW5nJiBrZXksIHVpbnQzMl90JiByZXN1bHQpCit7CisgICAgcmV0dXJuIGRl
Y29kZUludDMyKGtleSwgcmVpbnRlcnByZXRfY2FzdDxpbnQzMl90Jj4ocmVzdWx0KSk7Cit9CisK
K2Jvb2wgS2V5ZWREZWNvZGVyQ0Y6OmRlY29kZUludDMyKGNvbnN0IFN0cmluZyYga2V5LCBpbnQz
Ml90JiByZXN1bHQpCit7CisgICAgYXV0byBudW1iZXIgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZOdW1i
ZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5
LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKTsKKyAgICBpZiAoIW51bWJlcikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgcmV0dXJuIENGTnVtYmVyR2V0VmFsdWUobnVtYmVyLCBrQ0ZOdW1i
ZXJTSW50MzJUeXBlLCAmcmVzdWx0KTsKK30KKworYm9vbCBLZXllZERlY29kZXJDRjo6ZGVjb2Rl
SW50NjQoY29uc3QgU3RyaW5nJiBrZXksIGludDY0X3QmIHJlc3VsdCkKK3sKKyAgICBhdXRvIG51
bWJlciA9IGR5bmFtaWNfY2ZfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUo
bV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOwor
ICAgIGlmICghbnVtYmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gQ0ZO
dW1iZXJHZXRWYWx1ZShudW1iZXIsIGtDRk51bWJlclNJbnQ2NFR5cGUsICZyZXN1bHQpOworfQor
Citib29sIEtleWVkRGVjb2RlckNGOjpkZWNvZGVGbG9hdChjb25zdCBTdHJpbmcmIGtleSwgZmxv
YXQmIHJlc3VsdCkKK3sKKyAgICBhdXRvIG51bWJlciA9IGR5bmFtaWNfY2ZfY2FzdDxDRk51bWJl
clJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXku
Y3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOworICAgIGlmICghbnVtYmVyKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICByZXR1cm4gQ0ZOdW1iZXJHZXRWYWx1ZShudW1iZXIsIGtDRk51bWJl
ckZsb2F0VHlwZSwgJnJlc3VsdCk7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyQ0Y6OmRlY29kZURv
dWJsZShjb25zdCBTdHJpbmcmIGtleSwgZG91YmxlJiByZXN1bHQpCit7CisgICAgYXV0byBudW1i
ZXIgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKG1f
ZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKTsKKyAg
ICBpZiAoIW51bWJlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIENGTnVt
YmVyR2V0VmFsdWUobnVtYmVyLCBrQ0ZOdW1iZXJEb3VibGVUeXBlLCAmcmVzdWx0KTsKK30KKwor
Ym9vbCBLZXllZERlY29kZXJDRjo6ZGVjb2RlU3RyaW5nKGNvbnN0IFN0cmluZyYga2V5LCBTdHJp
bmcmIHJlc3VsdCkKK3sKKyAgICBhdXRvIHN0cmluZyA9IGR5bmFtaWNfY2ZfY2FzdDxDRlN0cmlu
Z1JlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXku
Y3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOworICAgIGlmICghc3RyaW5nKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICByZXN1bHQgPSBzdHJpbmc7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgS2V5ZWREZWNvZGVyQ0Y6OmJlZ2luT2JqZWN0KGNvbnN0IFN0cmluZyYga2V5KQorewor
ICAgIGF1dG8gZGljdGlvbmFyeSA9IGR5bmFtaWNfY2ZfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENG
RGljdGlvbmFyeUdldFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5LmNyZWF0ZUNG
U3RyaW5nKCkuZ2V0KCkpKTsKKyAgICBpZiAoIWRpY3Rpb25hcnkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIG1fZGljdGlvbmFyeVN0YWNrLmFwcGVuZChkaWN0aW9uYXJ5KTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBLZXllZERlY29kZXJDRjo6ZW5kT2JqZWN0KCkKK3sKKyAg
ICBtX2RpY3Rpb25hcnlTdGFjay5yZW1vdmVMYXN0KCk7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVy
Q0Y6OmJlZ2luQXJyYXkoY29uc3QgU3RyaW5nJiBrZXkpCit7CisgICAgYXV0byBhcnJheSA9IGR5
bmFtaWNfY2ZfY2FzdDxDRkFycmF5UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShtX2RpY3Rpb25h
cnlTdGFjay5sYXN0KCksIGtleS5jcmVhdGVDRlN0cmluZygpLmdldCgpKSk7CisgICAgaWYgKCFh
cnJheSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yIChDRkluZGV4IGkgPSAwOyBp
IDwgQ0ZBcnJheUdldENvdW50KGFycmF5KTsgKytpKSB7CisgICAgICAgIENGVHlwZVJlZiBvYmpl
Y3QgPSBDRkFycmF5R2V0VmFsdWVBdEluZGV4KGFycmF5LCBpKTsKKyAgICAgICAgaWYgKENGR2V0
VHlwZUlEKG9iamVjdCkgIT0gQ0ZEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbV9hcnJheVN0YWNrLmFwcGVuZChhcnJheSk7Cisg
ICAgbV9hcnJheUluZGV4U3RhY2suYXBwZW5kKDApOworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIEtleWVkRGVjb2RlckNGOjpiZWdpbkFycmF5RWxlbWVudCgpCit7CisgICAgaWYgKG1fYXJy
YXlJbmRleFN0YWNrLmxhc3QoKSA+PSBDRkFycmF5R2V0Q291bnQobV9hcnJheVN0YWNrLmxhc3Qo
KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gZGljdGlvbmFyeSA9IGNoZWNr
ZWRfY2ZfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgobV9hcnJh
eVN0YWNrLmxhc3QoKSwgbV9hcnJheUluZGV4U3RhY2subGFzdCgpKyspKTsKKyAgICBtX2RpY3Rp
b25hcnlTdGFjay5hcHBlbmQoZGljdGlvbmFyeSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgS2V5ZWREZWNvZGVyQ0Y6OmVuZEFycmF5RWxlbWVudCgpCit7CisgICAgbV9kaWN0aW9uYXJ5
U3RhY2sucmVtb3ZlTGFzdCgpOworfQorCit2b2lkIEtleWVkRGVjb2RlckNGOjplbmRBcnJheSgp
Cit7CisgICAgbV9hcnJheVN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICBtX2FycmF5SW5kZXhTdGFj
ay5yZW1vdmVMYXN0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL0tleWVkRGVjb2RlckNGLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jZi9LZXllZERlY29kZXJDRi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjNjYWIxOGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jZi9LZXllZERlY29kZXJDRi5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIEtleWVkRGVjb2Rlcl9oCisjZGVmaW5lIEtleWVkRGVjb2Rlcl9oCisKKyNpbmNs
dWRlICJLZXllZENvZGluZy5oIgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgS2V5ZWREZWNv
ZGVyQ0YgZmluYWwgOiBwdWJsaWMgS2V5ZWREZWNvZGVyIHsKK3B1YmxpYzoKKyAgICBLZXllZERl
Y29kZXJDRihjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QpOworICAgIHZpcnR1YWwgfktleWVk
RGVjb2RlckNGKCkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBib29sIGRlY29k
ZUJ5dGVzKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCB1aW50OF90KiYsIHNpemVfdCYpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVCb29sKGNvbnN0IFN0cmluZyYga2V5LCBib29s
Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGRlY29kZVVJbnQzMihjb25zdCBTdHJpbmcm
IGtleSwgdWludDMyX3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlSW50MzIo
Y29uc3QgU3RyaW5nJiBrZXksIGludDMyX3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wg
ZGVjb2RlSW50NjQoY29uc3QgU3RyaW5nJiBrZXksIGludDY0X3QmKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIGJvb2wgZGVjb2RlRmxvYXQoY29uc3QgU3RyaW5nJiBrZXksIGZsb2F0Jikgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCBib29sIGRlY29kZURvdWJsZShjb25zdCBTdHJpbmcmIGtleSwgZG91
YmxlJikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGRlY29kZVN0cmluZyhjb25zdCBTdHJp
bmcmIGtleSwgU3RyaW5nJikgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIGJvb2wgYmVnaW5PYmpl
Y3QoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmRPYmpl
Y3QoKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgYm9vbCBiZWdpbkFycmF5KGNvbnN0IFN0cmlu
ZyYga2V5KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgYmVnaW5BcnJheUVsZW1lbnQoKSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kQXJyYXlFbGVtZW50KCkgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIGVuZEFycmF5KCkgb3ZlcnJpZGU7CisKKyAgICBSZXRhaW5QdHI8Q0ZE
aWN0aW9uYXJ5UmVmPiBtX3Jvb3REaWN0aW9uYXJ5OworCisgICAgVmVjdG9yPENGRGljdGlvbmFy
eVJlZiwgMTY+IG1fZGljdGlvbmFyeVN0YWNrOworICAgIFZlY3RvcjxDRkFycmF5UmVmLCAxNj4g
bV9hcnJheVN0YWNrOworICAgIFZlY3RvcjxDRkluZGV4PiBtX2FycmF5SW5kZXhTdGFjazsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEtleWVkRGVjb2Rlcl9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9LZXllZEVuY29kZXJDRi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9LZXllZEVuY29kZXJDRi5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVjNTNkOAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL0tleWVkRW5jb2RlckNGLmNwcApAQCAtMCwwICsxLDE1
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJLZXllZEVu
Y29kZXJDRi5oIgorCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8Q29yZUZv
dW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGQ6OnVuaXF1ZV9wdHI8S2V5ZWRFbmNvZGVy
PiBLZXllZEVuY29kZXI6OmVuY29kZXIoKQoreworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVl
PEtleWVkRW5jb2RlckNGPigpOworfQorCitzdGF0aWMgUmV0YWluUHRyPENGTXV0YWJsZURpY3Rp
b25hcnlSZWY+IGNyZWF0ZURpY3Rpb25hcnkoKQoreworICAgIHJldHVybiBhZG9wdENGKENGRGlj
dGlvbmFyeUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwgJmtDRlR5cGVEaWN0
aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwor
fQorCitLZXllZEVuY29kZXJDRjo6S2V5ZWRFbmNvZGVyQ0YoKQorICAgIDogbV9yb290RGljdGlv
bmFyeShjcmVhdGVEaWN0aW9uYXJ5KCkpCit7CisgICAgbV9kaWN0aW9uYXJ5U3RhY2suYXBwZW5k
KG1fcm9vdERpY3Rpb25hcnkuZ2V0KCkpOworfQorICAgIAorS2V5ZWRFbmNvZGVyQ0Y6On5LZXll
ZEVuY29kZXJDRigpCit7CisgICAgQVNTRVJUKG1fZGljdGlvbmFyeVN0YWNrLnNpemUoKSA9PSAx
KTsKKyAgICBBU1NFUlQobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpID09IG1fcm9vdERpY3Rpb25h
cnkpOworICAgIEFTU0VSVChtX2FycmF5U3RhY2suaXNFbXB0eSgpKTsKK30KKwordm9pZCBLZXll
ZEVuY29kZXJDRjo6ZW5jb2RlQnl0ZXMoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IHVpbnQ4X3Qq
IGJ5dGVzLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBhdXRvIGRhdGEgPSBhZG9wdENGKENGRGF0YUNy
ZWF0ZVdpdGhCeXRlc05vQ29weShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBieXRlcywgc2l6ZSwga0NG
QWxsb2NhdG9yTnVsbCkpOworICAgIENGRGljdGlvbmFyeVNldFZhbHVlKG1fZGljdGlvbmFyeVN0
YWNrLmxhc3QoKSwga2V5LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIGRhdGEuZ2V0KCkpOworfQor
Cit2b2lkIEtleWVkRW5jb2RlckNGOjplbmNvZGVCb29sKGNvbnN0IFN0cmluZyYga2V5LCBib29s
IHZhbHVlKQoreworICAgIENGRGljdGlvbmFyeVNldFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxh
c3QoKSwga2V5LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIHZhbHVlID8ga0NGQm9vbGVhblRydWUg
OiBrQ0ZCb29sZWFuRmFsc2UpOworfQorCit2b2lkIEtleWVkRW5jb2RlckNGOjplbmNvZGVVSW50
MzIoY29uc3QgU3RyaW5nJiBrZXksIHVpbnQzMl90IHZhbHVlKQoreworICAgIGF1dG8gbnVtYmVy
ID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJT
SW50MzJUeXBlLCAmdmFsdWUpKTsKKyAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShtX2RpY3Rpb25h
cnlTdGFjay5sYXN0KCksIGtleS5jcmVhdGVDRlN0cmluZygpLmdldCgpLCBudW1iZXIuZ2V0KCkp
OworfQorCit2b2lkIEtleWVkRW5jb2RlckNGOjplbmNvZGVJbnQzMihjb25zdCBTdHJpbmcmIGtl
eSwgaW50MzJfdCB2YWx1ZSkKK3sKKyAgICBhdXRvIG51bWJlciA9IGFkb3B0Q0YoQ0ZOdW1iZXJD
cmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyU0ludDMyVHlwZSwgJnZhbHVlKSk7
CisgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXku
Y3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgbnVtYmVyLmdldCgpKTsKK30KKwordm9pZCBLZXllZEVu
Y29kZXJDRjo6ZW5jb2RlSW50NjQoY29uc3QgU3RyaW5nJiBrZXksIGludDY0X3QgdmFsdWUpCit7
CisgICAgYXV0byBudW1iZXIgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIGtDRk51bWJlclNJbnQ2NFR5cGUsICZ2YWx1ZSkpOworICAgIENGRGljdGlvbmFyeVNl
dFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0
KCksIG51bWJlci5nZXQoKSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyQ0Y6OmVuY29kZUZsb2F0
KGNvbnN0IFN0cmluZyYga2V5LCBmbG9hdCB2YWx1ZSkKK3sKKyAgICBhdXRvIG51bWJlciA9IGFk
b3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyRmxvYXRU
eXBlLCAmdmFsdWUpKTsKKyAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShtX2RpY3Rpb25hcnlTdGFj
ay5sYXN0KCksIGtleS5jcmVhdGVDRlN0cmluZygpLmdldCgpLCBudW1iZXIuZ2V0KCkpOworfQor
Cit2b2lkIEtleWVkRW5jb2RlckNGOjplbmNvZGVEb3VibGUoY29uc3QgU3RyaW5nJiBrZXksIGRv
dWJsZSB2YWx1ZSkKK3sKKyAgICBhdXRvIG51bWJlciA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUo
a0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyRG91YmxlVHlwZSwgJnZhbHVlKSk7CisgICAg
Q0ZEaWN0aW9uYXJ5U2V0VmFsdWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXkuY3JlYXRl
Q0ZTdHJpbmcoKS5nZXQoKSwgbnVtYmVyLmdldCgpKTsKK30KKwordm9pZCBLZXllZEVuY29kZXJD
Rjo6ZW5jb2RlU3RyaW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQor
eworICAgIENGRGljdGlvbmFyeVNldFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5
LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIHZhbHVlLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpOwor
fQorCit2b2lkIEtleWVkRW5jb2RlckNGOjpiZWdpbk9iamVjdChjb25zdCBTdHJpbmcmIGtleSkK
K3sKKyAgICBhdXRvIGRpY3Rpb25hcnkgPSBjcmVhdGVEaWN0aW9uYXJ5KCk7CisgICAgQ0ZEaWN0
aW9uYXJ5U2V0VmFsdWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXkuY3JlYXRlQ0ZTdHJp
bmcoKS5nZXQoKSwgZGljdGlvbmFyeS5nZXQoKSk7CisKKyAgICBtX2RpY3Rpb25hcnlTdGFjay5h
cHBlbmQoZGljdGlvbmFyeS5nZXQoKSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyQ0Y6OmVuZE9i
amVjdCgpCit7CisgICAgbV9kaWN0aW9uYXJ5U3RhY2sucmVtb3ZlTGFzdCgpOworfQorCit2b2lk
IEtleWVkRW5jb2RlckNGOjpiZWdpbkFycmF5KGNvbnN0IFN0cmluZyYga2V5KQoreworICAgIGF1
dG8gYXJyYXkgPSBhZG9wdENGKENGQXJyYXlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1
bHQsIDAsICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpKTsKKyAgICBDRkRpY3Rpb25hcnlTZXRWYWx1
ZShtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCksIGtleS5jcmVhdGVDRlN0cmluZygpLmdldCgpLCBh
cnJheS5nZXQoKSk7CisKKyAgICBtX2FycmF5U3RhY2suYXBwZW5kKGFycmF5LmdldCgpKTsKK30K
Kwordm9pZCBLZXllZEVuY29kZXJDRjo6YmVnaW5BcnJheUVsZW1lbnQoKQoreworICAgIGF1dG8g
ZGljdGlvbmFyeSA9IGNyZWF0ZURpY3Rpb25hcnkoKTsKKyAgICBDRkFycmF5QXBwZW5kVmFsdWUo
bV9hcnJheVN0YWNrLmxhc3QoKSwgZGljdGlvbmFyeS5nZXQoKSk7CisKKyAgICBtX2RpY3Rpb25h
cnlTdGFjay5hcHBlbmQoZGljdGlvbmFyeS5nZXQoKSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVy
Q0Y6OmVuZEFycmF5RWxlbWVudCgpCit7CisgICAgbV9kaWN0aW9uYXJ5U3RhY2sucmVtb3ZlTGFz
dCgpOworfQorCit2b2lkIEtleWVkRW5jb2RlckNGOjplbmRBcnJheSgpCit7CisgICAgbV9hcnJh
eVN0YWNrLnJlbW92ZUxhc3QoKTsKK30KKworUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IEtleWVk
RW5jb2RlckNGOjpmaW5pc2hFbmNvZGluZygpCit7CisgICAgUmV0YWluUHRyPENGRGF0YVJlZj4g
ZGF0YSA9IGFkb3B0Q0YoQ0ZQcm9wZXJ0eUxpc3RDcmVhdGVEYXRhKGtDRkFsbG9jYXRvckRlZmF1
bHQsIG1fcm9vdERpY3Rpb25hcnkuZ2V0KCksIGtDRlByb3BlcnR5TGlzdEJpbmFyeUZvcm1hdF92
MV8wLCAwLCBudWxscHRyKSk7CisgICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OndyYXBDRkRhdGEoZGF0YS5nZXQoKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NmL0tleWVkRW5jb2RlckNGLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9L
ZXllZEVuY29kZXJDRi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZDRm
ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9LZXllZEVu
Y29kZXJDRi5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEtleWVkRW5j
b2Rlcl9oCisjZGVmaW5lIEtleWVkRW5jb2Rlcl9oCisKKyNpbmNsdWRlICJLZXllZENvZGluZy5o
IgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgS2V5ZWRFbmNvZGVyQ0YgZmluYWwgOiBwdWJs
aWMgS2V5ZWRFbmNvZGVyIHsKK3B1YmxpYzoKKyAgICBLZXllZEVuY29kZXJDRigpOworICAgIH5L
ZXllZEVuY29kZXJDRigpOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJl
ZEJ1ZmZlcj4gZmluaXNoRW5jb2RpbmcoKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICB2aXJ0
dWFsIHZvaWQgZW5jb2RlQnl0ZXMoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IHVpbnQ4X3QqLCBz
aXplX3QpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVCb29sKGNvbnN0IFN0cmlu
ZyYga2V5LCBib29sKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlVUludDMyKGNv
bnN0IFN0cmluZyYga2V5LCB1aW50MzJfdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVu
Y29kZUludDMyKGNvbnN0IFN0cmluZyYga2V5LCBpbnQzMl90KSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgZW5jb2RlSW50NjQoY29uc3QgU3RyaW5nJiBrZXksIGludDY0X3QpIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVGbG9hdChjb25zdCBTdHJpbmcmIGtleSwgZmxvYXQp
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVEb3VibGUoY29uc3QgU3RyaW5nJiBr
ZXksIGRvdWJsZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuY29kZVN0cmluZyhjb25z
dCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIHZv
aWQgYmVnaW5PYmplY3QoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
dm9pZCBlbmRPYmplY3QoKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkFycmF5
KGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5BcnJh
eUVsZW1lbnQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kQXJyYXlFbGVtZW50KCkg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuZEFycmF5KCkgb3ZlcnJpZGU7CisKKyAgICBS
ZXRhaW5QdHI8Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZj4gbV9yb290RGljdGlvbmFyeTsKKworICAg
IFZlY3RvcjxDRk11dGFibGVEaWN0aW9uYXJ5UmVmLCAxNj4gbV9kaWN0aW9uYXJ5U3RhY2s7Cisg
ICAgVmVjdG9yPENGTXV0YWJsZUFycmF5UmVmLCAxNj4gbV9hcnJheVN0YWNrOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gS2V5ZWRFbmNvZGVyX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dsaWIvS2V5ZWREZWNvZGVyR2xpYi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL0tleWVkRGVjb2RlckdsaWIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjZDE5NDEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL0tleWVkRGVjb2RlckdsaWIuY3BwCkBAIC0wLDAg
KzEsMTczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJLZXllZERlY29kZXJHbGliLmgiCisK
KyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
c3RkOjp1bmlxdWVfcHRyPEtleWVkRGVjb2Rlcj4gS2V5ZWREZWNvZGVyOjpkZWNvZGVyKGNvbnN0
IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQoreworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5p
cXVlPEtleWVkRGVjb2RlckdsaWI+KGRhdGEsIHNpemUpOworfQorCitLZXllZERlY29kZXJHbGli
OjpLZXllZERlY29kZXJHbGliKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQorewor
ICAgIEdSZWZQdHI8R0J5dGVzPiBieXRlcyA9IGFkb3B0R1JlZihnX2J5dGVzX25ldyhkYXRhLCBz
aXplKSk7CisgICAgR1JlZlB0cjxHVmFyaWFudD4gdmFyaWFudCA9IGdfdmFyaWFudF9uZXdfZnJv
bV9ieXRlcyhHX1ZBUklBTlRfVFlQRSgiYXtzdn0iKSwgYnl0ZXMuZ2V0KCksIFRSVUUpOworICAg
IG1fZGljdGlvbmFyeVN0YWNrLmFwcGVuZChkaWN0aW9uYXJ5RnJvbUdWYXJpYW50KHZhcmlhbnQu
Z2V0KCkpKTsKK30KKworS2V5ZWREZWNvZGVyR2xpYjo6fktleWVkRGVjb2RlckdsaWIoKQorewor
ICAgIEFTU0VSVChtX2RpY3Rpb25hcnlTdGFjay5zaXplKCkgPT0gMSk7CisgICAgQVNTRVJUKG1f
YXJyYXlTdGFjay5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtX2FycmF5SW5kZXhTdGFjay5pc0Vt
cHR5KCkpOworfQorCitIYXNoTWFwPFN0cmluZywgR1JlZlB0cjxHVmFyaWFudD4+IEtleWVkRGVj
b2RlckdsaWI6OmRpY3Rpb25hcnlGcm9tR1ZhcmlhbnQoR1ZhcmlhbnQqIHZhcmlhbnQpCit7Cisg
ICAgSGFzaE1hcDxTdHJpbmcsIEdSZWZQdHI8R1ZhcmlhbnQ+PiBkaWN0aW9uYXJ5OworICAgIEdW
YXJpYW50SXRlciBpdGVyOworICAgIGdfdmFyaWFudF9pdGVyX2luaXQoJml0ZXIsIHZhcmlhbnQp
OworICAgIGNvbnN0IGNoYXIqIGtleTsKKyAgICBHVmFyaWFudCogdmFsdWU7CisgICAgd2hpbGUg
KGdfdmFyaWFudF9pdGVyX2xvb3AoJml0ZXIsICJ7JnN2fSIsICZrZXksICZ2YWx1ZSkpCisgICAg
ICAgIGRpY3Rpb25hcnkuc2V0KFN0cmluZzo6ZnJvbVVURjgoa2V5KSwgdmFsdWUpOworICAgIHJl
dHVybiBXVEY6Om1vdmUoZGljdGlvbmFyeSk7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyR2xpYjo6
ZGVjb2RlQnl0ZXMoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IHVpbnQ4X3QqJiBieXRlcywgc2l6
ZV90JiBzaXplKQoreworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhbHVlID0gbV9kaWN0aW9uYXJ5
U3RhY2subGFzdCgpLmdldChrZXkpOworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHNpemUgPSBnX3ZhcmlhbnRfZ2V0X3NpemUodmFsdWUuZ2V0KCkpOworICAg
IGJ5dGVzID0gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGdfdmFyaWFudF9nZXRfZGF0YSh2
YWx1ZS5nZXQoKSkpOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBGPgorYm9vbCBLZXllZERlY29kZXJHbGliOjpkZWNvZGVTaW1wbGVWYWx1ZShj
b25zdCBTdHJpbmcmIGtleSwgVCYgcmVzdWx0LCBGIGdldEZ1bmN0aW9uKQoreworICAgIEdSZWZQ
dHI8R1ZhcmlhbnQ+IHZhbHVlID0gbV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLmdldChrZXkpOwor
ICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJlc3VsdCA9IGdl
dEZ1bmN0aW9uKHZhbHVlLmdldCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBLZXll
ZERlY29kZXJHbGliOjpkZWNvZGVCb29sKGNvbnN0IFN0cmluZyYga2V5LCBib29sJiByZXN1bHQp
Cit7CisgICAgcmV0dXJuIGRlY29kZVNpbXBsZVZhbHVlKGtleSwgcmVzdWx0LCBnX3ZhcmlhbnRf
Z2V0X2Jvb2xlYW4pOworfQorCitib29sIEtleWVkRGVjb2RlckdsaWI6OmRlY29kZVVJbnQzMihj
b25zdCBTdHJpbmcmIGtleSwgdWludDMyX3QmIHJlc3VsdCkKK3sKKyAgICByZXR1cm4gZGVjb2Rl
U2ltcGxlVmFsdWUoa2V5LCByZXN1bHQsIGdfdmFyaWFudF9nZXRfdWludDMyKTsKK30KKworYm9v
bCBLZXllZERlY29kZXJHbGliOjpkZWNvZGVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgaW50MzJf
dCYgcmVzdWx0KQoreworICAgIHJldHVybiBkZWNvZGVTaW1wbGVWYWx1ZShrZXksIHJlc3VsdCwg
Z192YXJpYW50X2dldF9pbnQzMik7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyR2xpYjo6ZGVjb2Rl
SW50NjQoY29uc3QgU3RyaW5nJiBrZXksIGludDY0X3QmIHJlc3VsdCkKK3sKKyAgICByZXR1cm4g
ZGVjb2RlU2ltcGxlVmFsdWUoa2V5LCByZXN1bHQsIGdfdmFyaWFudF9nZXRfaW50NjQpOworfQor
Citib29sIEtleWVkRGVjb2RlckdsaWI6OmRlY29kZUZsb2F0KGNvbnN0IFN0cmluZyYga2V5LCBm
bG9hdCYgcmVzdWx0KQoreworICAgIHJldHVybiBkZWNvZGVTaW1wbGVWYWx1ZShrZXksIHJlc3Vs
dCwgZ192YXJpYW50X2dldF9kb3VibGUpOworfQorCitib29sIEtleWVkRGVjb2RlckdsaWI6OmRl
Y29kZURvdWJsZShjb25zdCBTdHJpbmcmIGtleSwgZG91YmxlJiByZXN1bHQpCit7CisgICAgcmV0
dXJuIGRlY29kZVNpbXBsZVZhbHVlKGtleSwgcmVzdWx0LCBnX3ZhcmlhbnRfZ2V0X2RvdWJsZSk7
Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyR2xpYjo6ZGVjb2RlU3RyaW5nKGNvbnN0IFN0cmluZyYg
a2V5LCBTdHJpbmcmIHJlc3VsdCkKK3sKKyAgICBHUmVmUHRyPEdWYXJpYW50PiB2YWx1ZSA9IG1f
ZGljdGlvbmFyeVN0YWNrLmxhc3QoKS5nZXQoa2V5KTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICByZXN1bHQgPSBTdHJpbmc6OmZyb21VVEY4KGdfdmFyaWFu
dF9nZXRfc3RyaW5nKHZhbHVlLmdldCgpLCBudWxscHRyKSk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgS2V5ZWREZWNvZGVyR2xpYjo6YmVnaW5PYmplY3QoY29uc3QgU3RyaW5nJiBrZXkp
Cit7CisgICAgR1JlZlB0cjxHVmFyaWFudD4gdmFsdWUgPSBtX2RpY3Rpb25hcnlTdGFjay5sYXN0
KCkuZ2V0KGtleSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgbV9kaWN0aW9uYXJ5U3RhY2suYXBwZW5kKGRpY3Rpb25hcnlGcm9tR1ZhcmlhbnQodmFsdWUu
Z2V0KCkpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBLZXllZERlY29kZXJHbGliOjpl
bmRPYmplY3QoKQoreworICAgIG1fZGljdGlvbmFyeVN0YWNrLnJlbW92ZUxhc3QoKTsKK30KKwor
Ym9vbCBLZXllZERlY29kZXJHbGliOjpiZWdpbkFycmF5KGNvbnN0IFN0cmluZyYga2V5KQorewor
ICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhbHVlID0gbV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLmdl
dChrZXkpOworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1f
YXJyYXlTdGFjay5hcHBlbmQodmFsdWUuZ2V0KCkpOworICAgIG1fYXJyYXlJbmRleFN0YWNrLmFw
cGVuZCgwKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBLZXllZERlY29kZXJHbGliOjpi
ZWdpbkFycmF5RWxlbWVudCgpCit7CisgICAgaWYgKG1fYXJyYXlJbmRleFN0YWNrLmxhc3QoKSA+
PSBnX3ZhcmlhbnRfbl9jaGlsZHJlbihtX2FycmF5U3RhY2subGFzdCgpKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgR1JlZlB0cjxHVmFyaWFudD4gdmFyaWFudCA9IGFkb3B0R1JlZihn
X3ZhcmlhbnRfZ2V0X2NoaWxkX3ZhbHVlKG1fYXJyYXlTdGFjay5sYXN0KCksIG1fYXJyYXlJbmRl
eFN0YWNrLmxhc3QoKSsrKSk7CisgICAgbV9kaWN0aW9uYXJ5U3RhY2suYXBwZW5kKGRpY3Rpb25h
cnlGcm9tR1ZhcmlhbnQodmFyaWFudC5nZXQoKSkpOworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIEtleWVkRGVjb2RlckdsaWI6OmVuZEFycmF5RWxlbWVudCgpCit7CisgICAgbV9kaWN0aW9u
YXJ5U3RhY2sucmVtb3ZlTGFzdCgpOworfQorCit2b2lkIEtleWVkRGVjb2RlckdsaWI6OmVuZEFy
cmF5KCkKK3sKKyAgICBtX2FycmF5U3RhY2sucmVtb3ZlTGFzdCgpOworICAgIG1fYXJyYXlJbmRl
eFN0YWNrLnJlbW92ZUxhc3QoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2xpYi9LZXllZERlY29kZXJHbGliLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL0tleWVkRGVjb2RlckdsaWIuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzhjMmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2xpYi9LZXllZERlY29kZXJHbGliLmgKQEAgLTAsMCArMSw3
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FpYSBTLkwuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgS2V5ZWREZWNvZGVyX2gKKyNkZWZpbmUgS2V5ZWREZWNvZGVyX2gKKworI2luY2x1ZGUg
IktleWVkQ29kaW5nLmgiCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0hhc2guaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBLZXllZERlY29kZXJHbGliIGZpbmFsIDogcHVibGljIEtleWVk
RGVjb2RlciB7CitwdWJsaWM6CisgICAgS2V5ZWREZWNvZGVyR2xpYihjb25zdCB1aW50OF90KiBk
YXRhLCBzaXplX3QpOworICAgIHZpcnR1YWwgfktleWVkRGVjb2RlckdsaWIoKSBvdmVycmlkZTsK
KworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlQnl0ZXMoY29uc3QgU3RyaW5nJiBr
ZXksIGNvbnN0IHVpbnQ4X3QqJiwgc2l6ZV90Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29s
IGRlY29kZUJvb2woY29uc3QgU3RyaW5nJiBrZXksIGJvb2wmKSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIGJvb2wgZGVjb2RlVUludDMyKGNvbnN0IFN0cmluZyYga2V5LCB1aW50MzJfdCYpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgaW50
MzJfdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVJbnQ2NChjb25zdCBTdHJp
bmcmIGtleSwgaW50NjRfdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVGbG9h
dChjb25zdCBTdHJpbmcmIGtleSwgZmxvYXQmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wg
ZGVjb2RlRG91YmxlKGNvbnN0IFN0cmluZyYga2V5LCBkb3VibGUmKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIGJvb2wgZGVjb2RlU3RyaW5nKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcmKSBvdmVy
cmlkZTsKKworICAgIHZpcnR1YWwgYm9vbCBiZWdpbk9iamVjdChjb25zdCBTdHJpbmcmIGtleSkg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuZE9iamVjdCgpIG92ZXJyaWRlOworCisgICAg
dmlydHVhbCBib29sIGJlZ2luQXJyYXkoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgYm9vbCBiZWdpbkFycmF5RWxlbWVudCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
dm9pZCBlbmRBcnJheUVsZW1lbnQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kQXJy
YXkoKSBvdmVycmlkZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEY+IGJv
b2wgZGVjb2RlU2ltcGxlVmFsdWUoY29uc3QgU3RyaW5nJiBrZXksIFQmIHJlc3VsdCwgRiBnZXRG
dW5jdGlvbik7CisgICAgSGFzaE1hcDxTdHJpbmcsIEdSZWZQdHI8R1ZhcmlhbnQ+PiBkaWN0aW9u
YXJ5RnJvbUdWYXJpYW50KEdWYXJpYW50Kik7CisKKyAgICBWZWN0b3I8SGFzaE1hcDxTdHJpbmcs
IEdSZWZQdHI8R1ZhcmlhbnQ+Pj4gbV9kaWN0aW9uYXJ5U3RhY2s7CisgICAgVmVjdG9yPEdWYXJp
YW50KiwgMTY+IG1fYXJyYXlTdGFjazsKKyAgICBWZWN0b3I8dW5zaWduZWQ+IG1fYXJyYXlJbmRl
eFN0YWNrOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gS2V5ZWRE
ZWNvZGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dsaWIvS2V5ZWRF
bmNvZGVyR2xpYi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL0tleWVkRW5jb2Rl
ckdsaWIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0OTIxMzYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL0tleWVkRW5jb2Rl
ckdsaWIuY3BwCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEln
YWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJLZXll
ZEVuY29kZXJHbGliLmgiCisKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RkOjp1bmlxdWVf
cHRyPEtleWVkRW5jb2Rlcj4gS2V5ZWRFbmNvZGVyOjplbmNvZGVyKCkKK3sKKyAgICByZXR1cm4g
c3RkOjptYWtlX3VuaXF1ZTxLZXllZEVuY29kZXJHbGliPigpOworfQorCitLZXllZEVuY29kZXJH
bGliOjpLZXllZEVuY29kZXJHbGliKCkKK3sKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9pbml0KCZt
X3ZhcmlhbnRCdWlsZGVyLCBHX1ZBUklBTlRfVFlQRSgiYXtzdn0iKSk7CisgICAgbV92YXJpYW50
QnVpbGRlclN0YWNrLmFwcGVuZCgmbV92YXJpYW50QnVpbGRlcik7Cit9CisKK0tleWVkRW5jb2Rl
ckdsaWI6On5LZXllZEVuY29kZXJHbGliKCkKK3sKKyAgICBBU1NFUlQobV92YXJpYW50QnVpbGRl
clN0YWNrLnNpemUoKSA9PSAxKTsKKyAgICBBU1NFUlQobV92YXJpYW50QnVpbGRlclN0YWNrLmxh
c3QoKSA9PSAmbV92YXJpYW50QnVpbGRlcik7CisgICAgQVNTRVJUKG1fYXJyYXlTdGFjay5pc0Vt
cHR5KCkpOworICAgIEFTU0VSVChtX29iamVjdFN0YWNrLmlzRW1wdHkoKSk7Cit9CisKK3ZvaWQg
S2V5ZWRFbmNvZGVyR2xpYjo6ZW5jb2RlQnl0ZXMoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IHVp
bnQ4X3QqIGJ5dGVzLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBHUmVmUHRyPEdCeXRlcz4gZ0J5dGVz
ID0gYWRvcHRHUmVmKGdfYnl0ZXNfbmV3X3N0YXRpYyhieXRlcywgc2l6ZSkpOworICAgIGdfdmFy
aWFudF9idWlsZGVyX2FkZChtX3ZhcmlhbnRCdWlsZGVyU3RhY2subGFzdCgpLCAie3N2fSIsIGtl
eS51dGY4KCkuZGF0YSgpLCBnX3ZhcmlhbnRfbmV3X2Zyb21fYnl0ZXMoR19WQVJJQU5UX1RZUEUo
ImF5IiksIGdCeXRlcy5nZXQoKSwgVFJVRSkpOworfQorCit2b2lkIEtleWVkRW5jb2RlckdsaWI6
OmVuY29kZUJvb2woY29uc3QgU3RyaW5nJiBrZXksIGJvb2wgdmFsdWUpCit7CisgICAgZ192YXJp
YW50X2J1aWxkZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCksICJ7c3Z9Iiwga2V5
LnV0ZjgoKS5kYXRhKCksIGdfdmFyaWFudF9uZXdfYm9vbGVhbih2YWx1ZSkpOworfQorCit2b2lk
IEtleWVkRW5jb2RlckdsaWI6OmVuY29kZVVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgdWludDMy
X3QgdmFsdWUpCit7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJT
dGFjay5sYXN0KCksICJ7c3Z9Iiwga2V5LnV0ZjgoKS5kYXRhKCksIGdfdmFyaWFudF9uZXdfdWlu
dDMyKHZhbHVlKSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyR2xpYjo6ZW5jb2RlSW50MzIoY29u
c3QgU3RyaW5nJiBrZXksIGludDMyX3QgdmFsdWUpCit7CisgICAgZ192YXJpYW50X2J1aWxkZXJf
YWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCksICJ7c3Z9Iiwga2V5LnV0ZjgoKS5kYXRh
KCksIGdfdmFyaWFudF9uZXdfaW50MzIodmFsdWUpKTsKK30KKwordm9pZCBLZXllZEVuY29kZXJH
bGliOjplbmNvZGVJbnQ2NChjb25zdCBTdHJpbmcmIGtleSwgaW50NjRfdCB2YWx1ZSkKK3sKKyAg
ICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQobV92YXJpYW50QnVpbGRlclN0YWNrLmxhc3QoKSwgIntz
dn0iLCBrZXkudXRmOCgpLmRhdGEoKSwgZ192YXJpYW50X25ld19pbnQ2NCh2YWx1ZSkpOworfQor
Cit2b2lkIEtleWVkRW5jb2RlckdsaWI6OmVuY29kZUZsb2F0KGNvbnN0IFN0cmluZyYga2V5LCBm
bG9hdCB2YWx1ZSkKK3sKKyAgICBlbmNvZGVEb3VibGUoa2V5LCB2YWx1ZSk7Cit9CisKK3ZvaWQg
S2V5ZWRFbmNvZGVyR2xpYjo6ZW5jb2RlRG91YmxlKGNvbnN0IFN0cmluZyYga2V5LCBkb3VibGUg
dmFsdWUpCit7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFj
ay5sYXN0KCksICJ7c3Z9Iiwga2V5LnV0ZjgoKS5kYXRhKCksIGdfdmFyaWFudF9uZXdfZG91Ymxl
KHZhbHVlKSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyR2xpYjo6ZW5jb2RlU3RyaW5nKGNvbnN0
IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGdfdmFyaWFudF9idWls
ZGVyX2FkZChtX3ZhcmlhbnRCdWlsZGVyU3RhY2subGFzdCgpLCAie3N2fSIsIGtleS51dGY4KCku
ZGF0YSgpLCBnX3ZhcmlhbnRfbmV3X3N0cmluZyh2YWx1ZS51dGY4KCkuZGF0YSgpKSk7Cit9CisK
K3ZvaWQgS2V5ZWRFbmNvZGVyR2xpYjo6YmVnaW5PYmplY3QoY29uc3QgU3RyaW5nJiBrZXkpCit7
CisgICAgR1JlZlB0cjxHVmFyaWFudEJ1aWxkZXI+IGJ1aWxkZXIgPSBhZG9wdEdSZWYoZ192YXJp
YW50X2J1aWxkZXJfbmV3KEdfVkFSSUFOVF9UWVBFKCJhYXtzdn0iKSkpOworICAgIG1fb2JqZWN0
U3RhY2suYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGtleSwgYnVpbGRlcikpOworICAgIG1fdmFyaWFu
dEJ1aWxkZXJTdGFjay5hcHBlbmQoYnVpbGRlci5nZXQoKSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNv
ZGVyR2xpYjo6ZW5kT2JqZWN0KCkKK3sKKyAgICBHVmFyaWFudEJ1aWxkZXIqIGJ1aWxkZXIgPSBt
X3ZhcmlhbnRCdWlsZGVyU3RhY2sudGFrZUxhc3QoKTsKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9h
ZGQobV92YXJpYW50QnVpbGRlclN0YWNrLmxhc3QoKSwgIntzdn0iLCBtX29iamVjdFN0YWNrLmxh
c3QoKS5maXJzdC51dGY4KCkuZGF0YSgpLCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQoYnVpbGRlcikp
OworICAgIG1fb2JqZWN0U3RhY2sucmVtb3ZlTGFzdCgpOworfQorCit2b2lkIEtleWVkRW5jb2Rl
ckdsaWI6OmJlZ2luQXJyYXkoY29uc3QgU3RyaW5nJiBrZXkpCit7CisgICAgbV9hcnJheVN0YWNr
LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihrZXksIGFkb3B0R1JlZihnX3ZhcmlhbnRfYnVpbGRlcl9u
ZXcoR19WQVJJQU5UX1RZUEUoImFhe3N2fSIpKSkpKTsKK30KKwordm9pZCBLZXllZEVuY29kZXJH
bGliOjpiZWdpbkFycmF5RWxlbWVudCgpCit7CisgICAgbV92YXJpYW50QnVpbGRlclN0YWNrLmFw
cGVuZChnX3ZhcmlhbnRfYnVpbGRlcl9uZXcoR19WQVJJQU5UX1RZUEUoImF7c3Z9IikpKTsKK30K
Kwordm9pZCBLZXllZEVuY29kZXJHbGliOjplbmRBcnJheUVsZW1lbnQoKQoreworICAgIEdSZWZQ
dHI8R1ZhcmlhbnRCdWlsZGVyPiB2YXJpYW50QnVpbGRlciA9IGFkb3B0R1JlZihtX3ZhcmlhbnRC
dWlsZGVyU3RhY2sudGFrZUxhc3QoKSk7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkX3ZhbHVl
KG1fYXJyYXlTdGFjay5sYXN0KCkuc2Vjb25kLmdldCgpLCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQo
dmFyaWFudEJ1aWxkZXIuZ2V0KCkpKTsKK30KKwordm9pZCBLZXllZEVuY29kZXJHbGliOjplbmRB
cnJheSgpCit7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFj
ay5sYXN0KCksICJ7c3Z9IiwgbV9hcnJheVN0YWNrLmxhc3QoKS5maXJzdC51dGY4KCkuZGF0YSgp
LCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQobV9hcnJheVN0YWNrLmxhc3QoKS5zZWNvbmQuZ2V0KCkp
KTsKKyAgICBtX2FycmF5U3RhY2sucmVtb3ZlTGFzdCgpOworfQorCitQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gS2V5ZWRFbmNvZGVyR2xpYjo6ZmluaXNoRW5jb2RpbmcoKQoreworICAgIGdfYXNz
ZXJ0KG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCkgPT0gJm1fdmFyaWFudEJ1aWxkZXIpOwor
ICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhcmlhbnQgPSBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQoJm1f
dmFyaWFudEJ1aWxkZXIpOworICAgIEdSZWZQdHI8R0J5dGVzPiBkYXRhID0gZ192YXJpYW50X2dl
dF9kYXRhX2FzX2J5dGVzKHZhcmlhbnQuZ2V0KCkpOworICAgIHJldHVybiBTaGFyZWRCdWZmZXI6
OmNyZWF0ZShzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oZ19ieXRlc19nZXRfZGF0
YShkYXRhLmdldCgpLCBudWxscHRyKSksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihnX2J5dGVzX2dl
dF9zaXplKGRhdGEuZ2V0KCkpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dsaWIvS2V5ZWRFbmNvZGVyR2xpYi5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2xpYi9LZXllZEVuY29kZXJHbGliLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ1MDBkNQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dsaWIvS2V5ZWRFbmNvZGVyR2xpYi5oCkBAIC0wLDAgKzEs
NzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBLZXllZEVuY29kZXJfaAorI2RlZmluZSBLZXllZEVuY29kZXJfaAorCisjaW5jbHVk
ZSAiS2V5ZWRDb2RpbmcuaCIKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBLZXllZEVuY29kZXJH
bGliIGZpbmFsIDogcHVibGljIEtleWVkRW5jb2RlciB7CitwdWJsaWM6CisgICAgS2V5ZWRFbmNv
ZGVyR2xpYigpOworICAgIH5LZXllZEVuY29kZXJHbGliKCk7CisKKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBmaW5pc2hFbmNvZGluZygpIG92ZXJyaWRlOwor
Citwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVCeXRlcyhjb25zdCBTdHJpbmcmIGtl
eSwgY29uc3QgdWludDhfdCosIHNpemVfdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVu
Y29kZUJvb2woY29uc3QgU3RyaW5nJiBrZXksIGJvb2wpIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
dm9pZCBlbmNvZGVVSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIHVpbnQzMl90KSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIGludDMyX3Qp
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVJbnQ2NChjb25zdCBTdHJpbmcmIGtl
eSwgaW50NjRfdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuY29kZUZsb2F0KGNvbnN0
IFN0cmluZyYga2V5LCBmbG9hdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuY29kZURv
dWJsZShjb25zdCBTdHJpbmcmIGtleSwgZG91YmxlKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZv
aWQgZW5jb2RlU3RyaW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmKSBvdmVycmlk
ZTsKKworICAgIHZpcnR1YWwgdm9pZCBiZWdpbk9iamVjdChjb25zdCBTdHJpbmcmIGtleSkgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuZE9iamVjdCgpIG92ZXJyaWRlOworCisgICAgdmly
dHVhbCB2b2lkIGJlZ2luQXJyYXkoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBiZWdpbkFycmF5RWxlbWVudCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCBlbmRBcnJheUVsZW1lbnQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kQXJyYXko
KSBvdmVycmlkZTsKKworICAgIEdWYXJpYW50QnVpbGRlciBtX3ZhcmlhbnRCdWlsZGVyOworICAg
IFZlY3RvcjxHVmFyaWFudEJ1aWxkZXIqLCAxNj4gbV92YXJpYW50QnVpbGRlclN0YWNrOworICAg
IFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBHUmVmUHRyPEdWYXJpYW50QnVpbGRlcj4+LCAxNj4g
bV9hcnJheVN0YWNrOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBHUmVmUHRyPEdWYXJp
YW50QnVpbGRlcj4+LCAxNj4gbV9vYmplY3RTdGFjazsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEtleWVkRW5jb2Rlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0lEQlNlcmlhbGl6YXRpb24uY3BwIGIvU291
cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9JREJTZXJpYWxpemF0aW9uLmNw
cAppbmRleCA3ZDczMGJlLi5hMTI1ZDZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRh
YmFzZVByb2Nlc3MvSW5kZXhlZERCL0lEQlNlcmlhbGl6YXRpb24uY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvSURCU2VyaWFsaXphdGlvbi5jcHAKQEAg
LTI4LDEwICsyOCw5IEBACiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKICNpbmNsdWRl
ICJBcmd1bWVudEVuY29kZXIuaCIKLSNpbmNsdWRlICJLZXllZERlY29kZXIuaCIKLSNpbmNsdWRl
ICJLZXllZEVuY29kZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0lEQktleURhdGEuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0lEQktleVBhdGguaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0tleWVkQ29kaW5n
Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0zOSw5ICszOCw5IEBAIG5hbWVz
cGFjZSBXZWJLaXQgewogCiBSZWZQdHI8U2hhcmVkQnVmZmVyPiBzZXJpYWxpemVJREJLZXlQYXRo
KGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCiB7Ci0gICAgS2V5ZWRFbmNvZGVyIGVuY29kZXI7
Ci0gICAga2V5UGF0aC5lbmNvZGUoZW5jb2Rlcik7Ci0gICAgcmV0dXJuIGVuY29kZXIuZmluaXNo
RW5jb2RpbmcoKTsKKyAgICBhdXRvIGVuY29kZXIgPSBLZXllZEVuY29kZXI6OmVuY29kZXIoKTsK
KyAgICBrZXlQYXRoLmVuY29kZSgqZW5jb2Rlcik7CisgICAgcmV0dXJuIGVuY29kZXItPmZpbmlz
aEVuY29kaW5nKCk7CiB9CiAKIGJvb2wgZGVzZXJpYWxpemVJREJLZXlQYXRoKGNvbnN0IHVpbnQ4
X3QqIGRhdGEsIHNpemVfdCBzaXplLCBJREJLZXlQYXRoJiByZXN1bHQpCkBAIC00OSwxNSArNDgs
MTUgQEAgYm9vbCBkZXNlcmlhbGl6ZUlEQktleVBhdGgoY29uc3QgdWludDhfdCogZGF0YSwgc2l6
ZV90IHNpemUsIElEQktleVBhdGgmIHJlc3VsdCkKICAgICBpZiAoIWRhdGEgfHwgIXNpemUpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEtleWVkRGVjb2RlciBkZWNvZGVyKGRhdGEsIHNp
emUpOwotICAgIHJldHVybiBJREJLZXlQYXRoOjpkZWNvZGUoZGVjb2RlciwgcmVzdWx0KTsKKyAg
ICBhdXRvIGRlY29kZXIgPSBLZXllZERlY29kZXI6OmRlY29kZXIoZGF0YSwgc2l6ZSk7CisgICAg
cmV0dXJuIElEQktleVBhdGg6OmRlY29kZSgqZGVjb2RlciwgcmVzdWx0KTsKIH0KIAogUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gc2VyaWFsaXplSURCS2V5RGF0YShjb25zdCBJREJLZXlEYXRhJiBrZXkp
CiB7Ci0gICAgS2V5ZWRFbmNvZGVyIGVuY29kZXI7Ci0gICAga2V5LmVuY29kZShlbmNvZGVyKTsK
LSAgICByZXR1cm4gZW5jb2Rlci5maW5pc2hFbmNvZGluZygpOworICAgIGF1dG8gZW5jb2RlciA9
IEtleWVkRW5jb2Rlcjo6ZW5jb2RlcigpOworICAgIGtleS5lbmNvZGUoKmVuY29kZXIpOworICAg
IHJldHVybiBlbmNvZGVyLT5maW5pc2hFbmNvZGluZygpOwogfQogCiBib29sIGRlc2VyaWFsaXpl
SURCS2V5RGF0YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSwgSURCS2V5RGF0YSYg
cmVzdWx0KQpAQCAtNjUsOCArNjQsOCBAQCBib29sIGRlc2VyaWFsaXplSURCS2V5RGF0YShjb25z
dCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSwgSURCS2V5RGF0YSYgcmVzdWx0KQogICAgIGlm
ICghZGF0YSB8fCAhc2l6ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgS2V5ZWREZWNv
ZGVyIGRlY29kZXIoZGF0YSwgc2l6ZSk7Ci0gICAgcmV0dXJuIElEQktleURhdGE6OmRlY29kZShk
ZWNvZGVyLCByZXN1bHQpOworICAgIGF1dG8gZGVjb2RlciA9IEtleWVkRGVjb2Rlcjo6ZGVjb2Rl
cihkYXRhLCBzaXplKTsKKyAgICByZXR1cm4gSURCS2V5RGF0YTo6ZGVjb2RlKCpkZWNvZGVyLCBy
ZXN1bHQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9jZi9LZXllZERlY29kZXIuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L2NmL0tleWVkRGVjb2Rlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiYTNm
YzEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2NmL0tleWVkRGVjb2Rlci5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJLZXllZERlY29kZXIuaCIKLQotI2luY2x1ZGUgPHd0Zi9j
Zi9UeXBlQ2FzdHNDRi5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLQotS2V5ZWREZWNvZGVyOjpLZXllZERlY29kZXIoY29uc3QgdWludDhf
dCogZGF0YSwgc2l6ZV90IHNpemUpCi17Ci0gICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0
YUNyZWF0ZVdpdGhCeXRlc05vQ29weShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBkYXRhLCBzaXplLCBr
Q0ZBbGxvY2F0b3JOdWxsKSk7Ci0KLSAgICBpZiAoYXV0byByb290RGljdGlvbmFyeSA9IGFkb3B0
Q0YoZHluYW1pY19jZl9jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZQcm9wZXJ0eUxpc3RDcmVhdGVX
aXRoRGF0YShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjZkRhdGEuZ2V0KCksIGtDRlByb3BlcnR5TGlz
dEltbXV0YWJsZSwgbnVsbHB0ciwgbnVsbHB0cikpKSkKLSAgICAgICAgbV9yb290RGljdGlvbmFy
eSA9IFdURjo6bW92ZShyb290RGljdGlvbmFyeSk7Ci0gICAgZWxzZQotICAgICAgICBtX3Jvb3RE
aWN0aW9uYXJ5ID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgbnVsbHB0ciwgbnVsbHB0ciwgMCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAm
a0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwotICAgIG1fZGljdGlvbmFyeVN0YWNr
LmFwcGVuZChtX3Jvb3REaWN0aW9uYXJ5LmdldCgpKTsKLX0KLQotS2V5ZWREZWNvZGVyOjp+S2V5
ZWREZWNvZGVyKCkKLXsKLSAgICBBU1NFUlQobV9kaWN0aW9uYXJ5U3RhY2suc2l6ZSgpID09IDEp
OwotICAgIEFTU0VSVChtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCkgPT0gbV9yb290RGljdGlvbmFy
eSk7Ci0gICAgQVNTRVJUKG1fYXJyYXlTdGFjay5pc0VtcHR5KCkpOwotICAgIEFTU0VSVChtX2Fy
cmF5SW5kZXhTdGFjay5pc0VtcHR5KCkpOwotfQotCi1ib29sIEtleWVkRGVjb2Rlcjo6ZGVjb2Rl
Qnl0ZXMoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IHVpbnQ4X3QqJiBieXRlcywgc2l6ZV90JiBz
aXplKQotewotICAgIGF1dG8gZGF0YSA9IGR5bmFtaWNfY2ZfY2FzdDxDRkRhdGFSZWY+KENGRGlj
dGlvbmFyeUdldFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5LmNyZWF0ZUNGU3Ry
aW5nKCkuZ2V0KCkpKTsKLSAgICBpZiAoIWRhdGEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGJ5dGVzID0gQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhKTsKLSAgICBzaXplID0gQ0ZEYXRhR2V0
TGVuZ3RoKGRhdGEpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEtleWVkRGVjb2Rlcjo6
ZGVjb2RlQm9vbChjb25zdCBTdHJpbmcmIGtleSwgYm9vbCYgcmVzdWx0KQotewotICAgIGF1dG8g
Ym9vbGVhbiA9IGR5bmFtaWNfY2ZfY2FzdDxDRkJvb2xlYW5SZWY+KENGRGljdGlvbmFyeUdldFZh
bHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkp
KTsKLSAgICBpZiAoIWJvb2xlYW4pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJlc3Vs
dCA9IENGQm9vbGVhbkdldFZhbHVlKGJvb2xlYW4pOwotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIEtleWVkRGVjb2Rlcjo6ZGVjb2RlVUludDMyKGNvbnN0IFN0cmluZyYga2V5LCB1aW50MzJf
dCYgcmVzdWx0KQotewotICAgIHJldHVybiBkZWNvZGVJbnQzMihrZXksIHJlaW50ZXJwcmV0X2Nh
c3Q8aW50MzJfdCY+KHJlc3VsdCkpOwotfQotCi1ib29sIEtleWVkRGVjb2Rlcjo6ZGVjb2RlSW50
MzIoY29uc3QgU3RyaW5nJiBrZXksIGludDMyX3QmIHJlc3VsdCkKLXsKLSAgICBhdXRvIG51bWJl
ciA9IGR5bmFtaWNfY2ZfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUobV9k
aWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOwotICAg
IGlmICghbnVtYmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gQ0ZOdW1i
ZXJHZXRWYWx1ZShudW1iZXIsIGtDRk51bWJlclNJbnQzMlR5cGUsICZyZXN1bHQpOwotfQotCi1i
b29sIEtleWVkRGVjb2Rlcjo6ZGVjb2RlSW50NjQoY29uc3QgU3RyaW5nJiBrZXksIGludDY0X3Qm
IHJlc3VsdCkKLXsKLSAgICBhdXRvIG51bWJlciA9IGR5bmFtaWNfY2ZfY2FzdDxDRk51bWJlclJl
Zj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXkuY3Jl
YXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOwotICAgIGlmICghbnVtYmVyKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICByZXR1cm4gQ0ZOdW1iZXJHZXRWYWx1ZShudW1iZXIsIGtDRk51bWJlclNJ
bnQ2NFR5cGUsICZyZXN1bHQpOwotfQotCi1ib29sIEtleWVkRGVjb2Rlcjo6ZGVjb2RlRmxvYXQo
Y29uc3QgU3RyaW5nJiBrZXksIGZsb2F0JiByZXN1bHQpCi17Ci0gICAgYXV0byBudW1iZXIgPSBk
eW5hbWljX2NmX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKG1fZGljdGlv
bmFyeVN0YWNrLmxhc3QoKSwga2V5LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKTsKLSAgICBpZiAo
IW51bWJlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIENGTnVtYmVyR2V0
VmFsdWUobnVtYmVyLCBrQ0ZOdW1iZXJGbG9hdFR5cGUsICZyZXN1bHQpOwotfQotCi1ib29sIEtl
eWVkRGVjb2Rlcjo6ZGVjb2RlRG91YmxlKGNvbnN0IFN0cmluZyYga2V5LCBkb3VibGUmIHJlc3Vs
dCkKLXsKLSAgICBhdXRvIG51bWJlciA9IGR5bmFtaWNfY2ZfY2FzdDxDRk51bWJlclJlZj4oQ0ZE
aWN0aW9uYXJ5R2V0VmFsdWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXkuY3JlYXRlQ0ZT
dHJpbmcoKS5nZXQoKSkpOwotICAgIGlmICghbnVtYmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICByZXR1cm4gQ0ZOdW1iZXJHZXRWYWx1ZShudW1iZXIsIGtDRk51bWJlckRvdWJsZVR5
cGUsICZyZXN1bHQpOwotfQotCi1ib29sIEtleWVkRGVjb2Rlcjo6ZGVjb2RlU3RyaW5nKGNvbnN0
IFN0cmluZyYga2V5LCBTdHJpbmcmIHJlc3VsdCkKLXsKLSAgICBhdXRvIHN0cmluZyA9IGR5bmFt
aWNfY2ZfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUobV9kaWN0aW9uYXJ5
U3RhY2subGFzdCgpLCBrZXkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOwotICAgIGlmICghc3Ry
aW5nKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXN1bHQgPSBzdHJpbmc7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgS2V5ZWREZWNvZGVyOjpiZWdpbk9iamVjdChjb25zdCBT
dHJpbmcmIGtleSkKLXsKLSAgICBhdXRvIGRpY3Rpb25hcnkgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZE
aWN0aW9uYXJ5UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShtX2RpY3Rpb25hcnlTdGFjay5sYXN0
KCksIGtleS5jcmVhdGVDRlN0cmluZygpLmdldCgpKSk7Ci0gICAgaWYgKCFkaWN0aW9uYXJ5KQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2RpY3Rpb25hcnlTdGFjay5hcHBlbmQoZGlj
dGlvbmFyeSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgS2V5ZWREZWNvZGVyOjplbmRP
YmplY3QoKQotewotICAgIG1fZGljdGlvbmFyeVN0YWNrLnJlbW92ZUxhc3QoKTsKLX0KLQotYm9v
bCBLZXllZERlY29kZXI6OmJlZ2luQXJyYXkoY29uc3QgU3RyaW5nJiBrZXkpCi17Ci0gICAgYXV0
byBhcnJheSA9IGR5bmFtaWNfY2ZfY2FzdDxDRkFycmF5UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1
ZShtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCksIGtleS5jcmVhdGVDRlN0cmluZygpLmdldCgpKSk7
Ci0gICAgaWYgKCFhcnJheSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm9yIChDRklu
ZGV4IGkgPSAwOyBpIDwgQ0ZBcnJheUdldENvdW50KGFycmF5KTsgKytpKSB7Ci0gICAgICAgIENG
VHlwZVJlZiBvYmplY3QgPSBDRkFycmF5R2V0VmFsdWVBdEluZGV4KGFycmF5LCBpKTsKLSAgICAg
ICAgaWYgKENGR2V0VHlwZUlEKG9iamVjdCkgIT0gQ0ZEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbV9hcnJheVN0YWNrLmFwcGVu
ZChhcnJheSk7Ci0gICAgbV9hcnJheUluZGV4U3RhY2suYXBwZW5kKDApOwotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIEtleWVkRGVjb2Rlcjo6YmVnaW5BcnJheUVsZW1lbnQoKQotewotICAg
IGlmIChtX2FycmF5SW5kZXhTdGFjay5sYXN0KCkgPj0gQ0ZBcnJheUdldENvdW50KG1fYXJyYXlT
dGFjay5sYXN0KCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGRpY3Rpb25h
cnkgPSBjaGVja2VkX2NmX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRkFycmF5R2V0VmFsdWVBdElu
ZGV4KG1fYXJyYXlTdGFjay5sYXN0KCksIG1fYXJyYXlJbmRleFN0YWNrLmxhc3QoKSsrKSk7Ci0g
ICAgbV9kaWN0aW9uYXJ5U3RhY2suYXBwZW5kKGRpY3Rpb25hcnkpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi12b2lkIEtleWVkRGVjb2Rlcjo6ZW5kQXJyYXlFbGVtZW50KCkKLXsKLSAgICBtX2Rp
Y3Rpb25hcnlTdGFjay5yZW1vdmVMYXN0KCk7Ci19Ci0KLXZvaWQgS2V5ZWREZWNvZGVyOjplbmRB
cnJheSgpCi17Ci0gICAgbV9hcnJheVN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICBtX2FycmF5SW5k
ZXhTdGFjay5yZW1vdmVMYXN0KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2NmL0tleWVkRGVjb2Rlci5oIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL2NmL0tleWVkRGVjb2Rlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA5OGFiNzg0Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9jZi9LZXll
ZERlY29kZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIEtleWVkRGVjb2Rlcl9oCi0jZGVmaW5lIEtleWVkRGVjb2Rlcl9oCi0KLSNpbmNsdWRl
IDxXZWJDb3JlL0tleWVkQ29kaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIEtleWVk
RGVjb2RlciBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpLZXllZERlY29kZXIgewotcHVibGljOgot
ICAgIEtleWVkRGVjb2Rlcihjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QpOwotICAgIHZpcnR1
YWwgfktleWVkRGVjb2RlcigpIG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgYm9v
bCBkZWNvZGVCeXRlcyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgdWludDhfdComLCBzaXplX3Qm
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlQm9vbChjb25zdCBTdHJpbmcmIGtl
eSwgYm9vbCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVVSW50MzIoY29uc3Qg
U3RyaW5nJiBrZXksIHVpbnQzMl90Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGRlY29k
ZUludDMyKGNvbnN0IFN0cmluZyYga2V5LCBpbnQzMl90Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCBib29sIGRlY29kZUludDY0KGNvbnN0IFN0cmluZyYga2V5LCBpbnQ2NF90Jikgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCBib29sIGRlY29kZUZsb2F0KGNvbnN0IFN0cmluZyYga2V5LCBmbG9hdCYp
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVEb3VibGUoY29uc3QgU3RyaW5nJiBr
ZXksIGRvdWJsZSYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVTdHJpbmcoY29u
c3QgU3RyaW5nJiBrZXksIFN0cmluZyYpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCBib29sIGJl
Z2luT2JqZWN0KGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZW5kT2JqZWN0KCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgYmVnaW5BcnJheShjb25z
dCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGJlZ2luQXJyYXlFbGVt
ZW50KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGVuZEFycmF5RWxlbWVudCgpIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCBlbmRBcnJheSgpIG92ZXJyaWRlOwotCi0gICAgUmV0YWlu
UHRyPENGRGljdGlvbmFyeVJlZj4gbV9yb290RGljdGlvbmFyeTsKLQotICAgIFZlY3RvcjxDRkRp
Y3Rpb25hcnlSZWYsIDE2PiBtX2RpY3Rpb25hcnlTdGFjazsKLSAgICBWZWN0b3I8Q0ZBcnJheVJl
ZiwgMTY+IG1fYXJyYXlTdGFjazsKLSAgICBWZWN0b3I8Q0ZJbmRleD4gbV9hcnJheUluZGV4U3Rh
Y2s7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEtleWVkRGVjb2Rl
cl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2YvS2V5ZWRFbmNvZGVyLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9jZi9LZXllZEVuY29kZXIuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA2M2Y3MmE1Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9jZi9LZXllZEVuY29kZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTQ5ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiS2V5ZWRFbmNv
ZGVyLmgiCi0KLSNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotc3RhdGljIFJldGFpblB0cjxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPiBjcmVhdGVEaWN0aW9u
YXJ5KCkKLXsKLSAgICByZXR1cm4gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKGtD
RkFsbG9jYXRvckRlZmF1bHQsIDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtD
RlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLX0KLQotS2V5ZWRFbmNvZGVyOjpLZXll
ZEVuY29kZXIoKQotICAgIDogbV9yb290RGljdGlvbmFyeShjcmVhdGVEaWN0aW9uYXJ5KCkpCi17
Ci0gICAgbV9kaWN0aW9uYXJ5U3RhY2suYXBwZW5kKG1fcm9vdERpY3Rpb25hcnkuZ2V0KCkpOwot
fQotICAgIAotS2V5ZWRFbmNvZGVyOjp+S2V5ZWRFbmNvZGVyKCkKLXsKLSAgICBBU1NFUlQobV9k
aWN0aW9uYXJ5U3RhY2suc2l6ZSgpID09IDEpOwotICAgIEFTU0VSVChtX2RpY3Rpb25hcnlTdGFj
ay5sYXN0KCkgPT0gbV9yb290RGljdGlvbmFyeSk7Ci0gICAgQVNTRVJUKG1fYXJyYXlTdGFjay5p
c0VtcHR5KCkpOwotfQotCi12b2lkIEtleWVkRW5jb2Rlcjo6ZW5jb2RlQnl0ZXMoY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBhdXRv
IGRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZVdpdGhCeXRlc05vQ29weShrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCBieXRlcywgc2l6ZSwga0NGQWxsb2NhdG9yTnVsbCkpOwotICAgIENGRGljdGlvbmFy
eVNldFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5LmNyZWF0ZUNGU3RyaW5nKCku
Z2V0KCksIGRhdGEuZ2V0KCkpOwotfQotCi12b2lkIEtleWVkRW5jb2Rlcjo6ZW5jb2RlQm9vbChj
b25zdCBTdHJpbmcmIGtleSwgYm9vbCB2YWx1ZSkKLXsKLSAgICBDRkRpY3Rpb25hcnlTZXRWYWx1
ZShtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCksIGtleS5jcmVhdGVDRlN0cmluZygpLmdldCgpLCB2
YWx1ZSA/IGtDRkJvb2xlYW5UcnVlIDoga0NGQm9vbGVhbkZhbHNlKTsKLX0KLQotdm9pZCBLZXll
ZEVuY29kZXI6OmVuY29kZVVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgdWludDMyX3QgdmFsdWUp
Ci17Ci0gICAgYXV0byBudW1iZXIgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIGtDRk51bWJlclNJbnQzMlR5cGUsICZ2YWx1ZSkpOwotICAgIENGRGljdGlvbmFy
eVNldFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5LmNyZWF0ZUNGU3RyaW5nKCku
Z2V0KCksIG51bWJlci5nZXQoKSk7Ci19Ci0KLXZvaWQgS2V5ZWRFbmNvZGVyOjplbmNvZGVJbnQz
Mihjb25zdCBTdHJpbmcmIGtleSwgaW50MzJfdCB2YWx1ZSkKLXsKLSAgICBhdXRvIG51bWJlciA9
IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyU0lu
dDMyVHlwZSwgJnZhbHVlKSk7Ci0gICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUobV9kaWN0aW9uYXJ5
U3RhY2subGFzdCgpLCBrZXkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgbnVtYmVyLmdldCgpKTsK
LX0KLQotdm9pZCBLZXllZEVuY29kZXI6OmVuY29kZUludDY0KGNvbnN0IFN0cmluZyYga2V5LCBp
bnQ2NF90IHZhbHVlKQotewotICAgIGF1dG8gbnVtYmVyID0gYWRvcHRDRihDRk51bWJlckNyZWF0
ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJTSW50NjRUeXBlLCAmdmFsdWUpKTsKLSAg
ICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCksIGtleS5jcmVh
dGVDRlN0cmluZygpLmdldCgpLCBudW1iZXIuZ2V0KCkpOwotfQotCi12b2lkIEtleWVkRW5jb2Rl
cjo6ZW5jb2RlRmxvYXQoY29uc3QgU3RyaW5nJiBrZXksIGZsb2F0IHZhbHVlKQotewotICAgIGF1
dG8gbnVtYmVyID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBr
Q0ZOdW1iZXJGbG9hdFR5cGUsICZ2YWx1ZSkpOwotICAgIENGRGljdGlvbmFyeVNldFZhbHVlKG1f
ZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIG51bWJl
ci5nZXQoKSk7Ci19Ci0KLXZvaWQgS2V5ZWRFbmNvZGVyOjplbmNvZGVEb3VibGUoY29uc3QgU3Ry
aW5nJiBrZXksIGRvdWJsZSB2YWx1ZSkKLXsKLSAgICBhdXRvIG51bWJlciA9IGFkb3B0Q0YoQ0ZO
dW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyRG91YmxlVHlwZSwgJnZh
bHVlKSk7Ci0gICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgp
LCBrZXkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgbnVtYmVyLmdldCgpKTsKLX0KLQotdm9pZCBL
ZXllZEVuY29kZXI6OmVuY29kZVN0cmluZyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSkKLXsKLSAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShtX2RpY3Rpb25hcnlTdGFjay5s
YXN0KCksIGtleS5jcmVhdGVDRlN0cmluZygpLmdldCgpLCB2YWx1ZS5jcmVhdGVDRlN0cmluZygp
LmdldCgpKTsKLX0KLQotdm9pZCBLZXllZEVuY29kZXI6OmJlZ2luT2JqZWN0KGNvbnN0IFN0cmlu
ZyYga2V5KQotewotICAgIGF1dG8gZGljdGlvbmFyeSA9IGNyZWF0ZURpY3Rpb25hcnkoKTsKLSAg
ICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCksIGtleS5jcmVh
dGVDRlN0cmluZygpLmdldCgpLCBkaWN0aW9uYXJ5LmdldCgpKTsKLQotICAgIG1fZGljdGlvbmFy
eVN0YWNrLmFwcGVuZChkaWN0aW9uYXJ5LmdldCgpKTsKLX0KLQotdm9pZCBLZXllZEVuY29kZXI6
OmVuZE9iamVjdCgpCi17Ci0gICAgbV9kaWN0aW9uYXJ5U3RhY2sucmVtb3ZlTGFzdCgpOwotfQot
Ci12b2lkIEtleWVkRW5jb2Rlcjo6YmVnaW5BcnJheShjb25zdCBTdHJpbmcmIGtleSkKLXsKLSAg
ICBhdXRvIGFycmF5ID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCAwLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7Ci0gICAgQ0ZEaWN0aW9uYXJ5U2V0
VmFsdWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQo
KSwgYXJyYXkuZ2V0KCkpOwotCi0gICAgbV9hcnJheVN0YWNrLmFwcGVuZChhcnJheS5nZXQoKSk7
Ci19Ci0KLXZvaWQgS2V5ZWRFbmNvZGVyOjpiZWdpbkFycmF5RWxlbWVudCgpCi17Ci0gICAgYXV0
byBkaWN0aW9uYXJ5ID0gY3JlYXRlRGljdGlvbmFyeSgpOwotICAgIENGQXJyYXlBcHBlbmRWYWx1
ZShtX2FycmF5U3RhY2subGFzdCgpLCBkaWN0aW9uYXJ5LmdldCgpKTsKLQotICAgIG1fZGljdGlv
bmFyeVN0YWNrLmFwcGVuZChkaWN0aW9uYXJ5LmdldCgpKTsKLX0KLQotdm9pZCBLZXllZEVuY29k
ZXI6OmVuZEFycmF5RWxlbWVudCgpCi17Ci0gICAgbV9kaWN0aW9uYXJ5U3RhY2sucmVtb3ZlTGFz
dCgpOwotfQotCi12b2lkIEtleWVkRW5jb2Rlcjo6ZW5kQXJyYXkoKQotewotICAgIG1fYXJyYXlT
dGFjay5yZW1vdmVMYXN0KCk7Ci19Ci0KLVBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBLZXllZEVu
Y29kZXI6OmZpbmlzaEVuY29kaW5nKCkKLXsKLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRh
ID0gYWRvcHRDRihDRlByb3BlcnR5TGlzdENyZWF0ZURhdGEoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
bV9yb290RGljdGlvbmFyeS5nZXQoKSwga0NGUHJvcGVydHlMaXN0QmluYXJ5Rm9ybWF0X3YxXzAs
IDAsIG51bGxwdHIpKTsKLSAgICBpZiAoIWRhdGEpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6d3JhcENGRGF0YShkYXRhLmdldCgpKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Y2YvS2V5ZWRFbmNvZGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2YvS2V5ZWRFbmNvZGVy
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwY2EzYmYuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL2NmL0tleWVkRW5jb2Rlci5oCisrKyAvZGV2L251bGwKQEAg
LTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgS2V5ZWRFbmNvZGVyX2gKLSNkZWZp
bmUgS2V5ZWRFbmNvZGVyX2gKLQotI2luY2x1ZGUgPFdlYkNvcmUvS2V5ZWRDb2RpbmcuaD4KLSNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgS2V5ZWRFbmNvZGVyIGZpbmFsIDogcHVibGljIFdlYkNv
cmU6OktleWVkRW5jb2RlciB7Ci1wdWJsaWM6Ci0gICAgS2V5ZWRFbmNvZGVyKCk7Ci0gICAgfktl
eWVkRW5jb2RlcigpOwotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1
ZmZlcj4gZmluaXNoRW5jb2RpbmcoKSBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFs
IHZvaWQgZW5jb2RlQnl0ZXMoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IHVpbnQ4X3QqLCBzaXpl
X3QpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVCb29sKGNvbnN0IFN0cmluZyYg
a2V5LCBib29sKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlVUludDMyKGNvbnN0
IFN0cmluZyYga2V5LCB1aW50MzJfdCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGVuY29k
ZUludDMyKGNvbnN0IFN0cmluZyYga2V5LCBpbnQzMl90KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IHZvaWQgZW5jb2RlSW50NjQoY29uc3QgU3RyaW5nJiBrZXksIGludDY0X3QpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVGbG9hdChjb25zdCBTdHJpbmcmIGtleSwgZmxvYXQpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVEb3VibGUoY29uc3QgU3RyaW5nJiBrZXks
IGRvdWJsZSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGVuY29kZVN0cmluZyhjb25zdCBT
dHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
YmVnaW5PYmplY3QoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCBlbmRPYmplY3QoKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBiZWdpbkFycmF5KGNv
bnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5BcnJheUVs
ZW1lbnQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5kQXJyYXlFbGVtZW50KCkgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGVuZEFycmF5KCkgb3ZlcnJpZGU7Ci0KLSAgICBSZXRh
aW5QdHI8Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZj4gbV9yb290RGljdGlvbmFyeTsKLQotICAgIFZl
Y3RvcjxDRk11dGFibGVEaWN0aW9uYXJ5UmVmLCAxNj4gbV9kaWN0aW9uYXJ5U3RhY2s7Ci0gICAg
VmVjdG9yPENGTXV0YWJsZUFycmF5UmVmLCAxNj4gbV9hcnJheVN0YWNrOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBLZXllZEVuY29kZXJfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL2dsaWIvS2V5ZWREZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9nbGliL0tleWVkRGVjb2Rlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDNkMjBkOTAuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2dsaWIv
S2V5ZWREZWNvZGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJLZXllZERlY29kZXIuaCIKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLUtleWVkRGVjb2Rlcjo6S2V5ZWREZWNv
ZGVyKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQotewotICAgIEdSZWZQdHI8R0J5
dGVzPiBieXRlcyA9IGFkb3B0R1JlZihnX2J5dGVzX25ldyhkYXRhLCBzaXplKSk7Ci0gICAgR1Jl
ZlB0cjxHVmFyaWFudD4gdmFyaWFudCA9IGdfdmFyaWFudF9uZXdfZnJvbV9ieXRlcyhHX1ZBUklB
TlRfVFlQRSgiYXtzdn0iKSwgYnl0ZXMuZ2V0KCksIFRSVUUpOwotICAgIG1fZGljdGlvbmFyeVN0
YWNrLmFwcGVuZChkaWN0aW9uYXJ5RnJvbUdWYXJpYW50KHZhcmlhbnQuZ2V0KCkpKTsKLX0KLQot
S2V5ZWREZWNvZGVyOjp+S2V5ZWREZWNvZGVyKCkKLXsKLSAgICBBU1NFUlQobV9kaWN0aW9uYXJ5
U3RhY2suc2l6ZSgpID09IDEpOwotICAgIEFTU0VSVChtX2FycmF5U3RhY2suaXNFbXB0eSgpKTsK
LSAgICBBU1NFUlQobV9hcnJheUluZGV4U3RhY2suaXNFbXB0eSgpKTsKLX0KLQotSGFzaE1hcDxT
dHJpbmcsIEdSZWZQdHI8R1ZhcmlhbnQ+PiBLZXllZERlY29kZXI6OmRpY3Rpb25hcnlGcm9tR1Zh
cmlhbnQoR1ZhcmlhbnQqIHZhcmlhbnQpCi17Ci0gICAgSGFzaE1hcDxTdHJpbmcsIEdSZWZQdHI8
R1ZhcmlhbnQ+PiBkaWN0aW9uYXJ5OwotICAgIEdWYXJpYW50SXRlciBpdGVyOwotICAgIGdfdmFy
aWFudF9pdGVyX2luaXQoJml0ZXIsIHZhcmlhbnQpOwotICAgIGNvbnN0IGNoYXIqIGtleTsKLSAg
ICBHVmFyaWFudCogdmFsdWU7Ci0gICAgd2hpbGUgKGdfdmFyaWFudF9pdGVyX2xvb3AoJml0ZXIs
ICJ7JnN2fSIsICZrZXksICZ2YWx1ZSkpCi0gICAgICAgIGRpY3Rpb25hcnkuc2V0KFN0cmluZzo6
ZnJvbVVURjgoa2V5KSwgdmFsdWUpOwotICAgIHJldHVybiBXVEY6Om1vdmUoZGljdGlvbmFyeSk7
Ci19Ci0KLWJvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVCeXRlcyhjb25zdCBTdHJpbmcmIGtleSwg
Y29uc3QgdWludDhfdComIGJ5dGVzLCBzaXplX3QmIHNpemUpCi17Ci0gICAgR1JlZlB0cjxHVmFy
aWFudD4gdmFsdWUgPSBtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCkuZ2V0KGtleSk7Ci0gICAgaWYg
KCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc2l6ZSA9IGdfdmFyaWFudF9n
ZXRfc2l6ZSh2YWx1ZS5nZXQoKSk7Ci0gICAgYnl0ZXMgPSBzdGF0aWNfY2FzdDxjb25zdCB1aW50
OF90Kj4oZ192YXJpYW50X2dldF9kYXRhKHZhbHVlLmdldCgpKSk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEY+Ci1ib29sIEtleWVkRGVjb2Rl
cjo6ZGVjb2RlU2ltcGxlVmFsdWUoY29uc3QgU3RyaW5nJiBrZXksIFQmIHJlc3VsdCwgRiBnZXRG
dW5jdGlvbikKLXsKLSAgICBHUmVmUHRyPEdWYXJpYW50PiB2YWx1ZSA9IG1fZGljdGlvbmFyeVN0
YWNrLmxhc3QoKS5nZXQoa2V5KTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICByZXN1bHQgPSBnZXRGdW5jdGlvbih2YWx1ZS5nZXQoKSk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVCb29sKGNvbnN0IFN0cmluZyYg
a2V5LCBib29sJiByZXN1bHQpCi17Ci0gICAgcmV0dXJuIGRlY29kZVNpbXBsZVZhbHVlKGtleSwg
cmVzdWx0LCBnX3ZhcmlhbnRfZ2V0X2Jvb2xlYW4pOwotfQotCi1ib29sIEtleWVkRGVjb2Rlcjo6
ZGVjb2RlVUludDMyKGNvbnN0IFN0cmluZyYga2V5LCB1aW50MzJfdCYgcmVzdWx0KQotewotICAg
IHJldHVybiBkZWNvZGVTaW1wbGVWYWx1ZShrZXksIHJlc3VsdCwgZ192YXJpYW50X2dldF91aW50
MzIpOwotfQotCi1ib29sIEtleWVkRGVjb2Rlcjo6ZGVjb2RlSW50MzIoY29uc3QgU3RyaW5nJiBr
ZXksIGludDMyX3QmIHJlc3VsdCkKLXsKLSAgICByZXR1cm4gZGVjb2RlU2ltcGxlVmFsdWUoa2V5
LCByZXN1bHQsIGdfdmFyaWFudF9nZXRfaW50MzIpOwotfQotCi1ib29sIEtleWVkRGVjb2Rlcjo6
ZGVjb2RlSW50NjQoY29uc3QgU3RyaW5nJiBrZXksIGludDY0X3QmIHJlc3VsdCkKLXsKLSAgICBy
ZXR1cm4gZGVjb2RlU2ltcGxlVmFsdWUoa2V5LCByZXN1bHQsIGdfdmFyaWFudF9nZXRfaW50NjQp
OwotfQotCi1ib29sIEtleWVkRGVjb2Rlcjo6ZGVjb2RlRmxvYXQoY29uc3QgU3RyaW5nJiBrZXks
IGZsb2F0JiByZXN1bHQpCi17Ci0gICAgcmV0dXJuIGRlY29kZVNpbXBsZVZhbHVlKGtleSwgcmVz
dWx0LCBnX3ZhcmlhbnRfZ2V0X2RvdWJsZSk7Ci19Ci0KLWJvb2wgS2V5ZWREZWNvZGVyOjpkZWNv
ZGVEb3VibGUoY29uc3QgU3RyaW5nJiBrZXksIGRvdWJsZSYgcmVzdWx0KQotewotICAgIHJldHVy
biBkZWNvZGVTaW1wbGVWYWx1ZShrZXksIHJlc3VsdCwgZ192YXJpYW50X2dldF9kb3VibGUpOwot
fQotCi1ib29sIEtleWVkRGVjb2Rlcjo6ZGVjb2RlU3RyaW5nKGNvbnN0IFN0cmluZyYga2V5LCBT
dHJpbmcmIHJlc3VsdCkKLXsKLSAgICBHUmVmUHRyPEdWYXJpYW50PiB2YWx1ZSA9IG1fZGljdGlv
bmFyeVN0YWNrLmxhc3QoKS5nZXQoa2V5KTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICByZXN1bHQgPSBTdHJpbmc6OmZyb21VVEY4KGdfdmFyaWFudF9nZXRf
c3RyaW5nKHZhbHVlLmdldCgpLCBudWxscHRyKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgS2V5ZWREZWNvZGVyOjpiZWdpbk9iamVjdChjb25zdCBTdHJpbmcmIGtleSkKLXsKLSAgICBH
UmVmUHRyPEdWYXJpYW50PiB2YWx1ZSA9IG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKS5nZXQoa2V5
KTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2RpY3Rp
b25hcnlTdGFjay5hcHBlbmQoZGljdGlvbmFyeUZyb21HVmFyaWFudCh2YWx1ZS5nZXQoKSkpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEtleWVkRGVjb2Rlcjo6ZW5kT2JqZWN0KCkKLXsK
LSAgICBtX2RpY3Rpb25hcnlTdGFjay5yZW1vdmVMYXN0KCk7Ci19Ci0KLWJvb2wgS2V5ZWREZWNv
ZGVyOjpiZWdpbkFycmF5KGNvbnN0IFN0cmluZyYga2V5KQotewotICAgIEdSZWZQdHI8R1Zhcmlh
bnQ+IHZhbHVlID0gbV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLmdldChrZXkpOwotICAgIGlmICgh
dmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fYXJyYXlTdGFjay5hcHBlbmQo
dmFsdWUuZ2V0KCkpOwotICAgIG1fYXJyYXlJbmRleFN0YWNrLmFwcGVuZCgwKTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBLZXllZERlY29kZXI6OmJlZ2luQXJyYXlFbGVtZW50KCkKLXsK
LSAgICBpZiAobV9hcnJheUluZGV4U3RhY2subGFzdCgpID49IGdfdmFyaWFudF9uX2NoaWxkcmVu
KG1fYXJyYXlTdGFjay5sYXN0KCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHUmVm
UHRyPEdWYXJpYW50PiB2YXJpYW50ID0gYWRvcHRHUmVmKGdfdmFyaWFudF9nZXRfY2hpbGRfdmFs
dWUobV9hcnJheVN0YWNrLmxhc3QoKSwgbV9hcnJheUluZGV4U3RhY2subGFzdCgpKyspKTsKLSAg
ICBtX2RpY3Rpb25hcnlTdGFjay5hcHBlbmQoZGljdGlvbmFyeUZyb21HVmFyaWFudCh2YXJpYW50
LmdldCgpKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgS2V5ZWREZWNvZGVyOjplbmRB
cnJheUVsZW1lbnQoKQotewotICAgIG1fZGljdGlvbmFyeVN0YWNrLnJlbW92ZUxhc3QoKTsKLX0K
LQotdm9pZCBLZXllZERlY29kZXI6OmVuZEFycmF5KCkKLXsKLSAgICBtX2FycmF5U3RhY2sucmVt
b3ZlTGFzdCgpOwotICAgIG1fYXJyYXlJbmRleFN0YWNrLnJlbW92ZUxhc3QoKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ2xp
Yi9LZXllZERlY29kZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9nbGliL0tleWVkRGVjb2Rl
ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWIxYzYxLi4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9nbGliL0tleWVkRGVjb2Rlci5oCisrKyAvZGV2L251bGwK
QEAgLTEsNzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FpYSBTLkwuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgS2V5ZWREZWNvZGVyX2gKLSNkZWZpbmUgS2V5ZWREZWNvZGVyX2gK
LQotI2luY2x1ZGUgPFdlYkNvcmUvS2V5ZWRDb2RpbmcuaD4KLSNpbmNsdWRlIDxnbGliLmg+Ci0j
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgS2V5ZWREZWNvZGVyIGZpbmFs
IDogcHVibGljIFdlYkNvcmU6OktleWVkRGVjb2RlciB7Ci1wdWJsaWM6Ci0gICAgS2V5ZWREZWNv
ZGVyKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCk7Ci0gICAgdmlydHVhbCB+S2V5ZWREZWNv
ZGVyKCkgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBib29sIGRlY29kZUJ5dGVz
KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCB1aW50OF90KiYsIHNpemVfdCYpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVCb29sKGNvbnN0IFN0cmluZyYga2V5LCBib29sJikgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGRlY29kZVVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwg
dWludDMyX3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlSW50MzIoY29uc3Qg
U3RyaW5nJiBrZXksIGludDMyX3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgZGVjb2Rl
SW50NjQoY29uc3QgU3RyaW5nJiBrZXksIGludDY0X3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IGJvb2wgZGVjb2RlRmxvYXQoY29uc3QgU3RyaW5nJiBrZXksIGZsb2F0Jikgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCBib29sIGRlY29kZURvdWJsZShjb25zdCBTdHJpbmcmIGtleSwgZG91YmxlJikg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGRlY29kZVN0cmluZyhjb25zdCBTdHJpbmcmIGtl
eSwgU3RyaW5nJikgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgYmVnaW5PYmplY3QoY29u
c3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBlbmRPYmplY3QoKSBv
dmVycmlkZTsKLQotICAgIHZpcnR1YWwgYm9vbCBiZWdpbkFycmF5KGNvbnN0IFN0cmluZyYga2V5
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgYmVnaW5BcnJheUVsZW1lbnQoKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5kQXJyYXlFbGVtZW50KCkgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCB2b2lkIGVuZEFycmF5KCkgb3ZlcnJpZGU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBGPiBib29sIGRlY29kZVNpbXBsZVZhbHVlKGNvbnN0IFN0cmluZyYga2V5LCBU
JiByZXN1bHQsIEYgZ2V0RnVuY3Rpb24pOwotICAgIEhhc2hNYXA8U3RyaW5nLCBHUmVmUHRyPEdW
YXJpYW50Pj4gZGljdGlvbmFyeUZyb21HVmFyaWFudChHVmFyaWFudCopOwotCi0gICAgVmVjdG9y
PEhhc2hNYXA8U3RyaW5nLCBHUmVmUHRyPEdWYXJpYW50Pj4+IG1fZGljdGlvbmFyeVN0YWNrOwot
ICAgIFZlY3RvcjxHVmFyaWFudCosIDE2PiBtX2FycmF5U3RhY2s7Ci0gICAgVmVjdG9yPHVuc2ln
bmVkPiBtX2FycmF5SW5kZXhTdGFjazsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0j
ZW5kaWYgLy8gS2V5ZWREZWNvZGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9nbGliL0tleWVkRW5jb2Rlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ2xpYi9LZXll
ZEVuY29kZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmY2RmZDhkLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9nbGliL0tleWVkRW5jb2Rlci5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwxMzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBJ
Z2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiS2V5
ZWRFbmNvZGVyLmgiCi0KLSNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5h
bWVzcGFjZSBXZWJLaXQgewotCi1LZXllZEVuY29kZXI6OktleWVkRW5jb2RlcigpCi17Ci0gICAg
Z192YXJpYW50X2J1aWxkZXJfaW5pdCgmbV92YXJpYW50QnVpbGRlciwgR19WQVJJQU5UX1RZUEUo
ImF7c3Z9IikpOwotICAgIG1fdmFyaWFudEJ1aWxkZXJTdGFjay5hcHBlbmQoJm1fdmFyaWFudEJ1
aWxkZXIpOwotfQotCi1LZXllZEVuY29kZXI6On5LZXllZEVuY29kZXIoKQotewotICAgIEFTU0VS
VChtX3ZhcmlhbnRCdWlsZGVyU3RhY2suc2l6ZSgpID09IDEpOwotICAgIEFTU0VSVChtX3Zhcmlh
bnRCdWlsZGVyU3RhY2subGFzdCgpID09ICZtX3ZhcmlhbnRCdWlsZGVyKTsKLSAgICBBU1NFUlQo
bV9hcnJheVN0YWNrLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKG1fb2JqZWN0U3RhY2suaXNFbXB0
eSgpKTsKLX0KLQotdm9pZCBLZXllZEVuY29kZXI6OmVuY29kZUJ5dGVzKGNvbnN0IFN0cmluZyYg
a2V5LCBjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90IHNpemUpCi17Ci0gICAgR1JlZlB0cjxH
Qnl0ZXM+IGdCeXRlcyA9IGFkb3B0R1JlZihnX2J5dGVzX25ld19zdGF0aWMoYnl0ZXMsIHNpemUp
KTsKLSAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQobV92YXJpYW50QnVpbGRlclN0YWNrLmxhc3Qo
KSwgIntzdn0iLCBrZXkudXRmOCgpLmRhdGEoKSwgZ192YXJpYW50X25ld19mcm9tX2J5dGVzKEdf
VkFSSUFOVF9UWVBFKCJheSIpLCBnQnl0ZXMuZ2V0KCksIFRSVUUpKTsKLX0KLQotdm9pZCBLZXll
ZEVuY29kZXI6OmVuY29kZUJvb2woY29uc3QgU3RyaW5nJiBrZXksIGJvb2wgdmFsdWUpCi17Ci0g
ICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCksICJ7
c3Z9Iiwga2V5LnV0ZjgoKS5kYXRhKCksIGdfdmFyaWFudF9uZXdfYm9vbGVhbih2YWx1ZSkpOwot
fQotCi12b2lkIEtleWVkRW5jb2Rlcjo6ZW5jb2RlVUludDMyKGNvbnN0IFN0cmluZyYga2V5LCB1
aW50MzJfdCB2YWx1ZSkKLXsKLSAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQobV92YXJpYW50QnVp
bGRlclN0YWNrLmxhc3QoKSwgIntzdn0iLCBrZXkudXRmOCgpLmRhdGEoKSwgZ192YXJpYW50X25l
d191aW50MzIodmFsdWUpKTsKLX0KLQotdm9pZCBLZXllZEVuY29kZXI6OmVuY29kZUludDMyKGNv
bnN0IFN0cmluZyYga2V5LCBpbnQzMl90IHZhbHVlKQotewotICAgIGdfdmFyaWFudF9idWlsZGVy
X2FkZChtX3ZhcmlhbnRCdWlsZGVyU3RhY2subGFzdCgpLCAie3N2fSIsIGtleS51dGY4KCkuZGF0
YSgpLCBnX3ZhcmlhbnRfbmV3X2ludDMyKHZhbHVlKSk7Ci19Ci0KLXZvaWQgS2V5ZWRFbmNvZGVy
OjplbmNvZGVJbnQ2NChjb25zdCBTdHJpbmcmIGtleSwgaW50NjRfdCB2YWx1ZSkKLXsKLSAgICBn
X3ZhcmlhbnRfYnVpbGRlcl9hZGQobV92YXJpYW50QnVpbGRlclN0YWNrLmxhc3QoKSwgIntzdn0i
LCBrZXkudXRmOCgpLmRhdGEoKSwgZ192YXJpYW50X25ld19pbnQ2NCh2YWx1ZSkpOwotfQotCi12
b2lkIEtleWVkRW5jb2Rlcjo6ZW5jb2RlRmxvYXQoY29uc3QgU3RyaW5nJiBrZXksIGZsb2F0IHZh
bHVlKQotewotICAgIGVuY29kZURvdWJsZShrZXksIHZhbHVlKTsKLX0KLQotdm9pZCBLZXllZEVu
Y29kZXI6OmVuY29kZURvdWJsZShjb25zdCBTdHJpbmcmIGtleSwgZG91YmxlIHZhbHVlKQotewot
ICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChtX3ZhcmlhbnRCdWlsZGVyU3RhY2subGFzdCgpLCAi
e3N2fSIsIGtleS51dGY4KCkuZGF0YSgpLCBnX3ZhcmlhbnRfbmV3X2RvdWJsZSh2YWx1ZSkpOwot
fQotCi12b2lkIEtleWVkRW5jb2Rlcjo6ZW5jb2RlU3RyaW5nKGNvbnN0IFN0cmluZyYga2V5LCBj
b25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChtX3Zhcmlh
bnRCdWlsZGVyU3RhY2subGFzdCgpLCAie3N2fSIsIGtleS51dGY4KCkuZGF0YSgpLCBnX3Zhcmlh
bnRfbmV3X3N0cmluZyh2YWx1ZS51dGY4KCkuZGF0YSgpKSk7Ci19Ci0KLXZvaWQgS2V5ZWRFbmNv
ZGVyOjpiZWdpbk9iamVjdChjb25zdCBTdHJpbmcmIGtleSkKLXsKLSAgICBHUmVmUHRyPEdWYXJp
YW50QnVpbGRlcj4gYnVpbGRlciA9IGFkb3B0R1JlZihnX3ZhcmlhbnRfYnVpbGRlcl9uZXcoR19W
QVJJQU5UX1RZUEUoImFhe3N2fSIpKSk7Ci0gICAgbV9vYmplY3RTdGFjay5hcHBlbmQoc3RkOjpt
YWtlX3BhaXIoa2V5LCBidWlsZGVyKSk7Ci0gICAgbV92YXJpYW50QnVpbGRlclN0YWNrLmFwcGVu
ZChidWlsZGVyLmdldCgpKTsKLX0KLQotdm9pZCBLZXllZEVuY29kZXI6OmVuZE9iamVjdCgpCi17
Ci0gICAgR1ZhcmlhbnRCdWlsZGVyKiBidWlsZGVyID0gbV92YXJpYW50QnVpbGRlclN0YWNrLnRh
a2VMYXN0KCk7Ci0gICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFj
ay5sYXN0KCksICJ7c3Z9IiwgbV9vYmplY3RTdGFjay5sYXN0KCkuZmlyc3QudXRmOCgpLmRhdGEo
KSwgZ192YXJpYW50X2J1aWxkZXJfZW5kKGJ1aWxkZXIpKTsKLSAgICBtX29iamVjdFN0YWNrLnJl
bW92ZUxhc3QoKTsKLX0KLQotdm9pZCBLZXllZEVuY29kZXI6OmJlZ2luQXJyYXkoY29uc3QgU3Ry
aW5nJiBrZXkpCi17Ci0gICAgbV9hcnJheVN0YWNrLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihrZXks
IGFkb3B0R1JlZihnX3ZhcmlhbnRfYnVpbGRlcl9uZXcoR19WQVJJQU5UX1RZUEUoImFhe3N2fSIp
KSkpKTsKLX0KLQotdm9pZCBLZXllZEVuY29kZXI6OmJlZ2luQXJyYXlFbGVtZW50KCkKLXsKLSAg
ICBtX3ZhcmlhbnRCdWlsZGVyU3RhY2suYXBwZW5kKGdfdmFyaWFudF9idWlsZGVyX25ldyhHX1ZB
UklBTlRfVFlQRSgiYXtzdn0iKSkpOwotfQotCi12b2lkIEtleWVkRW5jb2Rlcjo6ZW5kQXJyYXlF
bGVtZW50KCkKLXsKLSAgICBHUmVmUHRyPEdWYXJpYW50QnVpbGRlcj4gdmFyaWFudEJ1aWxkZXIg
PSBhZG9wdEdSZWYobV92YXJpYW50QnVpbGRlclN0YWNrLnRha2VMYXN0KCkpOwotICAgIGdfdmFy
aWFudF9idWlsZGVyX2FkZF92YWx1ZShtX2FycmF5U3RhY2subGFzdCgpLnNlY29uZC5nZXQoKSwg
Z192YXJpYW50X2J1aWxkZXJfZW5kKHZhcmlhbnRCdWlsZGVyLmdldCgpKSk7Ci19Ci0KLXZvaWQg
S2V5ZWRFbmNvZGVyOjplbmRBcnJheSgpCi17Ci0gICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKG1f
dmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCksICJ7c3Z9IiwgbV9hcnJheVN0YWNrLmxhc3QoKS5m
aXJzdC51dGY4KCkuZGF0YSgpLCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQobV9hcnJheVN0YWNrLmxh
c3QoKS5zZWNvbmQuZ2V0KCkpKTsKLSAgICBtX2FycmF5U3RhY2sucmVtb3ZlTGFzdCgpOwotfQot
Ci1QYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gS2V5ZWRFbmNvZGVyOjpmaW5pc2hFbmNvZGluZygp
Ci17Ci0gICAgZ19hc3NlcnQobV92YXJpYW50QnVpbGRlclN0YWNrLmxhc3QoKSA9PSAmbV92YXJp
YW50QnVpbGRlcik7Ci0gICAgR1JlZlB0cjxHVmFyaWFudD4gdmFyaWFudCA9IGdfdmFyaWFudF9i
dWlsZGVyX2VuZCgmbV92YXJpYW50QnVpbGRlcik7Ci0gICAgR1JlZlB0cjxHQnl0ZXM+IGRhdGEg
PSBnX3ZhcmlhbnRfZ2V0X2RhdGFfYXNfYnl0ZXModmFyaWFudC5nZXQoKSk7Ci0gICAgcmV0dXJu
IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihn
X2J5dGVzX2dldF9kYXRhKGRhdGEuZ2V0KCksIG51bGxwdHIpKSwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGdfYnl0ZXNfZ2V0X3NpemUoZGF0YS5nZXQoKSkpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ2xpYi9LZXllZEVuY29k
ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9nbGliL0tleWVkRW5jb2Rlci5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhY2JiNzZiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9nbGliL0tleWVkRW5jb2Rlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIEtleWVkRW5jb2Rlcl9oCi0jZGVmaW5lIEtleWVkRW5jb2Rlcl9oCi0KLSNpbmNsdWRl
IDxXZWJDb3JlL0tleWVkQ29kaW5nLmg+Ci0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBLZXllZEVu
Y29kZXIgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6S2V5ZWRFbmNvZGVyIHsKLXB1YmxpYzoKLSAg
ICBLZXllZEVuY29kZXIoKTsKLSAgICB+S2V5ZWRFbmNvZGVyKCk7Ci0KLSAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBmaW5pc2hFbmNvZGluZygpIG92ZXJyaWRl
OwotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVCeXRlcyhjb25zdCBTdHJpbmcm
IGtleSwgY29uc3QgdWludDhfdCosIHNpemVfdCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lk
IGVuY29kZUJvb2woY29uc3QgU3RyaW5nJiBrZXksIGJvb2wpIG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgdm9pZCBlbmNvZGVVSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIHVpbnQzMl90KSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIGludDMy
X3QpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVJbnQ2NChjb25zdCBTdHJpbmcm
IGtleSwgaW50NjRfdCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGVuY29kZUZsb2F0KGNv
bnN0IFN0cmluZyYga2V5LCBmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGVuY29k
ZURvdWJsZShjb25zdCBTdHJpbmcmIGtleSwgZG91YmxlKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IHZvaWQgZW5jb2RlU3RyaW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmKSBvdmVy
cmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBiZWdpbk9iamVjdChjb25zdCBTdHJpbmcmIGtleSkg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGVuZE9iamVjdCgpIG92ZXJyaWRlOwotCi0gICAg
dmlydHVhbCB2b2lkIGJlZ2luQXJyYXkoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgdm9pZCBiZWdpbkFycmF5RWxlbWVudCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
dm9pZCBlbmRBcnJheUVsZW1lbnQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5kQXJy
YXkoKSBvdmVycmlkZTsKLQotICAgIEdWYXJpYW50QnVpbGRlciBtX3ZhcmlhbnRCdWlsZGVyOwot
ICAgIFZlY3RvcjxHVmFyaWFudEJ1aWxkZXIqLCAxNj4gbV92YXJpYW50QnVpbGRlclN0YWNrOwot
ICAgIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBHUmVmUHRyPEdWYXJpYW50QnVpbGRlcj4+LCAx
Nj4gbV9hcnJheVN0YWNrOwotICAgIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBHUmVmUHRyPEdW
YXJpYW50QnVpbGRlcj4+LCAxNj4gbV9vYmplY3RTdGFjazsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdAotCi0jZW5kaWYgLy8gS2V5ZWRFbmNvZGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQy
L1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAxNGQ2MDJmLi4xZDQyOTVm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC00NjIsOCArNDYyLDYgQEAKIAkJMUFFMDBENEMxODJENkVCMDAwMDg3REQ3IC8qIFdL
QnJvd3NpbmdDb250ZXh0SGFuZGxlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUFFMDBENEExODJENkVCMDAwMDg3REQ3IC8qIFdLQnJvd3NpbmdDb250
ZXh0SGFuZGxlLm1tICovOyB9OwogCQkxQUUwMEQ0RDE4MkQ2RUIwMDAwODdERDcgLyogV0tCcm93
c2luZ0NvbnRleHRIYW5kbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBRTAwRDRCMTgyRDZFQjAwMDA4N0RENyAvKiBXS0Jyb3dzaW5nQ29udGV4dEhh
bmRsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTFBRTAwRDRGMTgyRDZGNTAwMDA4N0RENyAvKiBXS0Jyb3dzaW5nQ29udGV4dEhhbmRsZUludGVy
bmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUUw
MEQ0RTE4MkQ2RjUwMDAwODdERDcgLyogV0tCcm93c2luZ0NvbnRleHRIYW5kbGVJbnRlcm5hbC5o
ICovOyB9OwotCQkxQUUwMEQ1QzE4MkRBREUxMDAwODdERDcgLyogS2V5ZWRFbmNvZGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRTAwRDVBMTgy
REFERTEwMDA4N0RENyAvKiBLZXllZEVuY29kZXIuY3BwICovOyB9OwotCQkxQUUwMEQ1RDE4MkRB
REUxMDAwODdERDcgLyogS2V5ZWRFbmNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQUUwMEQ1QjE4MkRBREUxMDAwODdERDcgLyogS2V5ZWRFbmNv
ZGVyLmggKi87IH07CiAJCTFBRTAwRDYwMTgzMTc5MjEwMDA4N0RENyAvKiBGcmFtZUxvYWRTdGF0
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUUw
MEQ1RTE4MzE3OTIxMDAwODdERDcgLyogRnJhbWVMb2FkU3RhdGUuY3BwICovOyB9OwogCQkxQUUw
MEQ2MTE4MzE3OTIxMDAwODdERDcgLyogRnJhbWVMb2FkU3RhdGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRTAwRDVGMTgzMTc5MjEwMDA4N0RENyAv
KiBGcmFtZUxvYWRTdGF0ZS5oICovOyB9OwogCQkxQUUwMEQ2QjE4MzI3QzEyMDAwODdERDcgLyog
U3RyaW5nUmVmZXJlbmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBRTAwRDY5MTgzMjdDMTIwMDA4N0RENyAvKiBTdHJpbmdSZWZlcmVuY2UuY3Bw
ICovOyB9OwpAQCAtOTQ3LDggKzk0NSw2IEBACiAJCTUxODM0NTkzMTM0NTMyRTkwMDkyQjY5NiAv
KiBXZWJJY29uRGF0YWJhc2VDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxODM0NTkxMTM0NTMyRTgwMDkyQjY5NiAvKiBXZWJJY29uRGF0YWJh
c2VDbGllbnQuaCAqLzsgfTsKIAkJNTE4MzUzREExODg1QkY4QzAwRDlGRTQ0IC8qIElEQlNlcmlh
bGl6YXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTE4MzUzRDgxODg1QkY4QzAwRDlGRTQ0IC8qIElEQlNlcmlhbGl6YXRpb24uY3BwICovOyB9
OwogCQk1MTgzNTNEQjE4ODVCRjhDMDBEOUZFNDQgLyogSURCU2VyaWFsaXphdGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE4MzUzRDkxODg1QkY4
QzAwRDlGRTQ0IC8qIElEQlNlcmlhbGl6YXRpb24uaCAqLzsgfTsKLQkJNTE4MzUzREUxODg3MTI4
QjAwRDlGRTQ0IC8qIEtleWVkRGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MTgzNTNEQzE4ODcxMjhCMDBEOUZFNDQgLyogS2V5ZWREZWNv
ZGVyLmNwcCAqLzsgfTsKLQkJNTE4MzUzREYxODg3MTI4QjAwRDlGRTQ0IC8qIEtleWVkRGVjb2Rl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE4MzUz
REQxODg3MTI4QjAwRDlGRTQ0IC8qIEtleWVkRGVjb2Rlci5oICovOyB9OwogCQk1MTgzRERFQzE2
MzBCREZDMDA4QkU1QzcgLyogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDVCMEQ0MTYyRjdBN0EwMEUy
NzcwOSAvKiBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwICovOyB9OwogCQk1MTg3MUI1QjEy
N0NCODlEMDBGNzYyMzIgLyogV2ViQ29udGV4dE1lbnUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE4NzFCNTkxMjdDQjg5RDAwRjc2MjMyIC8qIFdl
YkNvbnRleHRNZW51LmNwcCAqLzsgfTsKIAkJNTE4NzFCNUMxMjdDQjg5RDAwRjc2MjMyIC8qIFdl
YkNvbnRleHRNZW51LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTg3MUI1QTEyN0NCODlEMDBGNzYyMzIgLyogV2ViQ29udGV4dE1lbnUuaCAqLzsgfTsK
QEAgLTI1ODgsOCArMjU4NCw2IEBACiAJCTFBRTAwRDRBMTgyRDZFQjAwMDA4N0RENyAvKiBXS0Jy
b3dzaW5nQ29udGV4dEhhbmRsZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFdLQnJvd3NpbmdDb250ZXh0SGFuZGxlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxQUUwMEQ0QjE4MkQ2RUIwMDAwODdERDcgLyogV0tCcm93c2luZ0NvbnRleHRIYW5k
bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tCcm93c2luZ0NvbnRleHRI
YW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFFMDBENEUxODJENkY1MDAw
MDg3REQ3IC8qIFdLQnJvd3NpbmdDb250ZXh0SGFuZGxlSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV0tCcm93c2luZ0NvbnRleHRIYW5kbGVJbnRlcm5hbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQUUwMEQ1QTE4MkRBREUxMDAwODdERDcgLyog
S2V5ZWRFbmNvZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEtl
eWVkRW5jb2Rlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBRTAwRDVCMTgy
REFERTEwMDA4N0RENyAvKiBLZXllZEVuY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gS2V5ZWRFbmNvZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFB
RTAwRDVFMTgzMTc5MjEwMDA4N0RENyAvKiBGcmFtZUxvYWRTdGF0ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGcmFtZUxvYWRTdGF0ZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFBRTAwRDVGMTgzMTc5MjEwMDA4N0RENyAvKiBGcmFtZUxvYWRT
dGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGcmFtZUxvYWRTdGF0ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUUwMEQ2OTE4MzI3QzEyMDAwODdERDcg
LyogU3RyaW5nUmVmZXJlbmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFN0cmluZ1JlZmVyZW5jZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0z
MTExLDggKzMxMDUsNiBAQAogCQk1MTgzNDU5MTEzNDUzMkU4MDA5MkI2OTYgLyogV2ViSWNvbkRh
dGFiYXNlQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkljb25E
YXRhYmFzZUNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTgzNTNEODE4
ODVCRjhDMDBEOUZFNDQgLyogSURCU2VyaWFsaXphdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBJREJTZXJpYWxpemF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTE4MzUzRDkxODg1QkY4QzAwRDlGRTQ0IC8qIElEQlNlcmlhbGl6YXRp
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCU2VyaWFsaXphdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MTgzNTNEQzE4ODcxMjhCMDBEOUZFNDQg
LyogS2V5ZWREZWNvZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEtleWVkRGVjb2Rlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxODM1M0RE
MTg4NzEyOEIwMEQ5RkU0NCAvKiBLZXllZERlY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gS2V5ZWREZWNvZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUxODNCMzkzMTM3OUY4NUMwMEU4NzU0RSAvKiBTaGltLnhjY29uZmlnICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dC54Y2NvbmZpZzsgcGF0aCA9IFNoaW0ueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxODRCQzRBMTMyRTkwN0EwMDZCOUUyOCAvKiBXZWJJY29uRGF0YWJhc2UubWVzc2Fn
ZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViSWNvbkRhdGFiYXNlLm1lc3NhZ2VzLmlu
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTg3MUI1OTEyN0NCODlEMDBGNzYyMzIg
LyogV2ViQ29udGV4dE1lbnUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV2ViQ29udGV4dE1lbnUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDg3
MSwxMCArNDg2Myw2IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQkxQUFGMEM0OTEyQjE2MzM0MDA4
RTQ5RTIgLyogQXJndW1lbnRDb2RlcnNDRi5jcHAgKi8sCiAJCQkJMUFBRjBDNDgxMkIxNjMzNDAw
OEU0OUUyIC8qIEFyZ3VtZW50Q29kZXJzQ0YuaCAqLywKLQkJCQk1MTgzNTNEQzE4ODcxMjhCMDBE
OUZFNDQgLyogS2V5ZWREZWNvZGVyLmNwcCAqLywKLQkJCQk1MTgzNTNERDE4ODcxMjhCMDBEOUZF
NDQgLyogS2V5ZWREZWNvZGVyLmggKi8sCi0JCQkJMUFFMDBENUExODJEQURFMTAwMDg3REQ3IC8q
IEtleWVkRW5jb2Rlci5jcHAgKi8sCi0JCQkJMUFFMDBENUIxODJEQURFMTAwMDg3REQ3IC8qIEtl
eWVkRW5jb2Rlci5oICovLAogCQkJKTsKIAkJCXBhdGggPSBjZjsKIAkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CkBAIC03Njk5LDggKzc2ODcsNiBAQAogCQkJCUM1OENERjJBMTg4NzU0OEIwMDg3
MTUzNiAvKiBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUFFNDlBNDkxMUZGQThDRTAwNDhCNDY0IC8qIEpTTlBNZXRob2QuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFBRTQ5ODc4MTFGRjdGQUEwMDQ4QjQ2NCAvKiBKU05QT2JqZWN0LmggaW4gSGVh
ZGVycyAqLywKLQkJCQk1MTgzNTNERjE4ODcxMjhCMDBEOUZFNDQgLyogS2V5ZWREZWNvZGVyLmgg
aW4gSGVhZGVycyAqLywKLQkJCQkxQUUwMEQ1RDE4MkRBREUxMDAwODdERDcgLyogS2V5ZWRFbmNv
ZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0UwOTM3ODE0RkIxMjhDMDAxMTM4RDkgLyogTGF5
ZXJIb3N0aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQzM2NUExOEMwNTU1ODAw
RjYwN0Q3IC8qIExheWVyUmVwcmVzZW50YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTFBOTJE
QzExMTJGOEJBNDYwMDE3QUY2NSAvKiBMYXllclRyZWVDb250ZXh0LmggaW4gSGVhZGVycyAqLywK
QEAgLTk0OTcsOCArOTQ4Myw2IEBACiAJCQkJQzU4Q0RGMkQxODg3NjA5RjAwODcxNTM2IC8qIElu
dGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFB
RTQ5QTRBMTFGRkE4Q0UwMDQ4QjQ2NCAvKiBKU05QTWV0aG9kLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTFBRTQ5ODc5MTFGRjdGQUEwMDQ4QjQ2NCAvKiBKU05QT2JqZWN0LmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCTUxODM1M0RFMTg4NzEyOEIwMEQ5RkU0NCAvKiBLZXllZERlY29kZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJMUFFMDBENUMxODJEQURFMTAwMDg3REQ3IC8qIEtleWVkRW5jb2Rl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0UwOTM3NzE0RkIxMjhDMDAxMTM4RDkgLyogTGF5
ZXJIb3N0aW5nQ29udGV4dC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBGMEMzNjVFMThDMTEwQTUw
MEY2MDdENyAvKiBMYXllclJlcHJlc2VudGF0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE5
MkRDMTMxMkY4QkFCOTAwMTdBRjY1IC8qIExheWVyVHJlZUNvbnRleHQuY3BwIGluIFNvdXJjZXMg
Ki8sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258455</attachid>
            <date>2015-08-06 22:29:33 -0700</date>
            <delta_ts>2015-08-07 08:26:16 -0700</delta_ts>
            <desc>Patch v2 for EWS</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>91551</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggYzFmNmY0Yy4uODJmNWMyYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1FZmwuY21ha2UKQEAgLTEwNiw2ICsxMDYsOSBAQCBsaXN0KEFQUEVORCBXZWJDb3Jl
X1NPVVJDRVMKICAgICBwbGF0Zm9ybS9nZW9jbHVlL0dlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVl
MS5jcHAKICAgICBwbGF0Zm9ybS9nZW9jbHVlL0dlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlMi5j
cHAKIAorICAgIHBsYXRmb3JtL2dsaWIvS2V5ZWREZWNvZGVyR2xpYi5jcHAKKyAgICBwbGF0Zm9y
bS9nbGliL0tleWVkRW5jb2RlckdsaWIuY3BwCisgICAgCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VTb3VyY2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1dPRkZGaWxlRm9ybWF0LmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUdUSy5jbWFrZQppbmRleCAxZmM2ODUzLi45OTZiZWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5j
bWFrZQpAQCAtNjUsNiArNjUsOSBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9nZW9jbHVlL0dlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlMS5jcHAKICAgICBwbGF0
Zm9ybS9nZW9jbHVlL0dlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlMi5jcHAKIAorICAgIHBsYXRm
b3JtL2dsaWIvS2V5ZWREZWNvZGVyR2xpYi5jcHAKKyAgICBwbGF0Zm9ybS9nbGliL0tleWVkRW5j
b2RlckdsaWIuY3BwCisgICAgCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR0xDb250ZXh0LmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjNTQwZDhhLi44MDdlNzYzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC0xOTk4LDYgKzE5OTgsMTAgQEAKIAkJNTE3OUNFMkExOTVDOTE4NjAwMTlDMTk4IC8qIEdh
bWVwYWRQcm92aWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTE3OUNFMjkxOTVDOTE4NjAwMTlDMTk4IC8qIEdhbWVwYWRQcm92aWRlckNs
aWVudC5oICovOyB9OwogCQk1MTc5Q0UzNjE5NUNBQzdFMDAxOUMxOTggLyogSElER2FtZXBhZFBy
b3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxNzlDRTM0MTk1Q0FDN0UwMDE5QzE5OCAvKiBISURHYW1lcGFkUHJvdmlkZXIuY3BwICovOyB9
OwogCQk1MTc5Q0UzNzE5NUNBQzdFMDAxOUMxOTggLyogSElER2FtZXBhZFByb3ZpZGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTc5Q0UzNTE5NUNB
QzdFMDAxOUMxOTggLyogSElER2FtZXBhZFByb3ZpZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTE3QTYzQzMxQjc0MzE4NzAwRTdEQ0RDIC8q
IEtleWVkRGVjb2RlckNGLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxN0E2M0JGMUI3NDMxN0UwMEU3RENEQyAvKiBLZXllZERlY29kZXJDRi5jcHAg
Ki87IH07CisJCTUxN0E2M0M0MUI3NDMxOEIwMEU3RENEQyAvKiBLZXllZEVuY29kZXJDRi5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTdBNjNDMTFC
NzQzMTdFMDBFN0RDREMgLyogS2V5ZWRFbmNvZGVyQ0YuY3BwICovOyB9OworCQk1MTdBNjNDNTFC
NzQzMThGMDBFN0RDREMgLyogS2V5ZWREZWNvZGVyQ0YuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0E2M0MwMUI3NDMxN0UwMEU3RENEQyAvKiBLZXll
ZERlY29kZXJDRi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTUxN0E2M0M2MUI3NDMxOTIwMEU3RENEQyAvKiBLZXllZEVuY29kZXJDRi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3QTYzQzIxQjc0MzE3
RTAwRTdEQ0RDIC8qIEtleWVkRW5jb2RlckNGLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE3RkJBMUUxNTFBQjE3QzAwQjU3OTU5IC8qIERPTVdp
bmRvd0V4dGVuc2lvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MTdGQkExNzE1MUFBNzFCMDBCNTc5NTkgLyogRE9NV2luZG93RXh0ZW5zaW9uLmNw
cCAqLzsgfTsKIAkJNTE4OUYwMUQxMEIzN0JEOTAwRjNDNzM5IC8qIEpTUG9wU3RhdGVFdmVudC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTg5RjAx
QjEwQjM3QkQ5MDBGM0M3MzkgLyogSlNQb3BTdGF0ZUV2ZW50LmNwcCAqLzsgfTsKIAkJNTE4OUYw
MUUxMEIzN0JEOTAwRjNDNzM5IC8qIEpTUG9wU3RhdGVFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE4OUYwMUMxMEIzN0JEOTAwRjNDNzM5IC8q
IEpTUG9wU3RhdGVFdmVudC5oICovOyB9OwpAQCAtOTI0OSw2ICs5MjUzLDEwIEBACiAJCTUxNzlD
RTI5MTk1QzkxODYwMDE5QzE5OCAvKiBHYW1lcGFkUHJvdmlkZXJDbGllbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2FtZXBhZFByb3ZpZGVyQ2xpZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNzlDRTM0MTk1Q0FDN0UwMDE5QzE5OCAvKiBISURHYW1l
cGFkUHJvdmlkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSElE
R2FtZXBhZFByb3ZpZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE3OUNF
MzUxOTVDQUM3RTAwMTlDMTk4IC8qIEhJREdhbWVwYWRQcm92aWRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBISURHYW1lcGFkUHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTE3QTYzQkYxQjc0MzE3RTAwRTdEQ0RDIC8qIEtleWVkRGVjb2RlckNG
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEtleWVkRGVjb2RlckNG
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE3QTYzQzAxQjc0MzE3RTAwRTdE
Q0RDIC8qIEtleWVkRGVjb2RlckNGLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEtleWVkRGVjb2RlckNGLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxN0E2M0Mx
MUI3NDMxN0UwMEU3RENEQyAvKiBLZXllZEVuY29kZXJDRi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBLZXllZEVuY29kZXJDRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUxN0E2M0MyMUI3NDMxN0UwMEU3RENEQyAvKiBLZXllZEVuY29kZXJDRi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBLZXllZEVuY29kZXJDRi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTdGQkExNzE1MUFBNzFCMDBCNTc5NTkgLyogRE9N
V2luZG93RXh0ZW5zaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IERPTVdpbmRvd0V4dGVuc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
N0ZCQTE4MTUxQUE3MUIwMEI1Nzk1OSAvKiBET01XaW5kb3dFeHRlbnNpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NV2luZG93RXh0ZW5zaW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUxODlGMDFCMTBCMzdCRDkwMEYzQzczOSAvKiBKU1BvcFN0YXRl
RXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNQb3BTdGF0
ZUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NDUxLDYgKzE1NDU5
LDEwIEBACiAJCQkJNDQzODE3RkQxQTkxQjJGODAwNkUwNEYyIC8qIENvcmVNZWRpYVNvZnRMaW5r
LmNwcCAqLywKIAkJCQk0NDM4MTdGRTFBOTFCMkY4MDA2RTA0RjIgLyogQ29yZU1lZGlhU29mdExp
bmsuaCAqLywKIAkJCQk1MTYwMzA2QjBDQzQzNjIzMDBDOEFDMjUgLyogRmlsZVN5c3RlbUNGLmNw
cCAqLywKKwkJCQk1MTdBNjNCRjFCNzQzMTdFMDBFN0RDREMgLyogS2V5ZWREZWNvZGVyQ0YuY3Bw
ICovLAorCQkJCTUxN0E2M0MwMUI3NDMxN0UwMEU3RENEQyAvKiBLZXllZERlY29kZXJDRi5oICov
LAorCQkJCTUxN0E2M0MxMUI3NDMxN0UwMEU3RENEQyAvKiBLZXllZEVuY29kZXJDRi5jcHAgKi8s
CisJCQkJNTE3QTYzQzIxQjc0MzE3RTAwRTdEQ0RDIC8qIEtleWVkRW5jb2RlckNGLmggKi8sCiAJ
CQkJNUNCQzhEQUExQUFBMzAyMjAwRTFDODAzIC8qIE1lZGlhQWNjZXNzaWJpbGl0eVNvZnRMaW5r
LmNwcCAqLywKIAkJCQk1Q0JDOERBQjFBQUEzMDIyMDBFMUM4MDMgLyogTWVkaWFBY2Nlc3NpYmls
aXR5U29mdExpbmsuaCAqLywKIAkJCQkyRDc2QkI4MzE5NDU2RjgxMDBDRkQyOUEgLyogUnVuTG9v
cE9ic2VydmVyLmNwcCAqLywKQEAgLTI1NjI0LDYgKzI1NjM2LDcgQEAKIAkJCQkwNzk2OURCMDE3
RDE0MTUxMDA3RkY4NDIgLyogSlNSVENEVE1GU2VuZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
Nzk2OURCMjE3RDE0MTUxMDA3RkY4NDIgLyogSlNSVENEVE1GVG9uZUNoYW5nZUV2ZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwNzk2OURCNjE3RDE0MTUxMDA3RkY4NDIgLyogSlNSVENJY2VDYW5k
aWRhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxN0E2M0M2MUI3NDMxOTIwMEU3RENEQyAvKiBL
ZXllZEVuY29kZXJDRi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc5NjlEQjgxN0QxNDE1MTAwN0ZG
ODQyIC8qIEpTUlRDSWNlQ2FuZGlkYXRlRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3Mzc5
NEVDMTlFRTM0MUUwMEU1QTA0NSAvKiBKU1JUQ0ljZVNlcnZlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMDc5NjlEQkExN0QxNDE1MTAwN0ZGODQyIC8qIEpTUlRDUGVlckNvbm5lY3Rpb24uaCBpbiBI
ZWFkZXJzICovLApAQCAtMjY0MjQsNiArMjY0MzcsNyBAQAogCQkJCTMxOTU1QTg4MTYwRDE5OTIw
MDg1ODAyNSAvKiBSZW5kZXJTbmFwc2hvdHRlZFBsdWdJbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkM4QzhGQUUwRERDRDMxQjAwQjU5MkY0IC8qIFJlbmRlclN0eWxlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzVFQjY2ODBFODFDQjcxMDBCMjU5NjUgLyogUmVuZGVyU3R5bGVDb25zdGFudHMuaCBp
biBIZWFkZXJzICovLAorCQkJCTUxN0E2M0M1MUI3NDMxOEYwMEU3RENEQyAvKiBLZXllZERlY29k
ZXJDRi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM2NzA4QzExMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJl
bmRlclNWR0Jsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzY3MDhDMzEyRDlDQTRCMDAwNDQy
MzQgLyogUmVuZGVyU1ZHQ29udGFpbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQjM2NUM4NDE1
MjUxMTlFMDA5MUQyN0IgLyogUmVuZGVyU1ZHRWxsaXBzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
OTYyNSw2ICsyOTYzOSw3IEBACiAJCQkJMDdDNTlCNjgxN0Y3ODRCQTAwMEZCQ0JCIC8qIE1lZGlh
U291cmNlU3RhdGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3OEUwOEZGMTdEMTRDRUUwMDQy
MEFBMSAvKiBNZWRpYVN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNzhFMDk0QjE3RDE3
MDk2MDA0MjBBQTEgLyogTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk1MTdBNjNDMzFCNzQzMTg3MDBFN0RDREMgLyogS2V5ZWREZWNvZGVyQ0Yu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDc4MzIyODQxODAxM0VEODAwOTk5RTBDIC8qIE1lZGlh
U3RyZWFtQXVkaW9Tb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQ2NzFBNzcxNTlCQjA3
MDAwMTk3NTU5IC8qIE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTA3MDU4NTE1MTdGQjBFRUEwMDVGMkJDQiAvKiBNZWRpYVN0cmVhbUNhcGFiaWxpdGll
cy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI5NzM1LDYgKzI5NzUwLDcgQEAKIAkJCQkxQTBENTcz
NjBBNUM3N0ZFMDA3RURENEMgLyogT3ZlcmZsb3dFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5QjU1RUVFOTFCM0U4ODk4MDA1MzQyQkMgLyogRWRpdG9yQ29jb2EubW0gaW4gU291cmNlcyAq
LywKIAkJCQk2NUZFQTg2OTA5ODMzQURFMDBCRUQ0QUIgLyogUGFnZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk1MTdBNjNDNDFCNzQzMThCMDBFN0RDREMgLyogS2V5ZWRFbmNvZGVyQ0YuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMTQ3N0U3NzYwQkY0MTM0QTAwMTUyODcyIC8qIFBhZ2VDYWNoZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlDRDVFNUI2MTFBMTVGMTU2MDAwQzYwOUUgLyogUGFnZUNv
bmZpZ3VyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjM4MjA4OTIxNDdEMzVGOTAwMTBC
QzA2IC8qIFBhZ2VDb25zb2xlQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LZXllZENvZGluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vS2V5ZWRDb2RpbmcuaAppbmRleCA5ZmE1YzhmLi5lMjk2OWEyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LZXllZENvZGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0tleWVkQ29kaW5nLmgKQEAgLTM1LDEwICszNSwxMSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiAKIGNsYXNzIEtleWVkRGVjb2RlciB7Ci1wcm90
ZWN0ZWQ6CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxLZXllZERlY29kZXI+IGRlY29kZXIoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90KTsKKwog
ICAgIHZpcnR1YWwgfktleWVkRGVjb2RlcigpIHsgfQogCi1wdWJsaWM6CiAgICAgdmlydHVhbCBi
b29sIGRlY29kZUJ5dGVzKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCB1aW50OF90KiYsIHNpemVf
dCYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlQm9vbChjb25zdCBTdHJpbmcmIGtleSwg
Ym9vbCYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlVUludDMyKGNvbnN0IFN0cmluZyYg
a2V5LCB1aW50MzJfdCYpID0gMDsKQEAgLTEyNSw2ICsxMjYsMTEgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorcHJvdGVjdGVkOgorICAgIEtleWVkRGVjb2Rlcigp
CisgICAgeworICAgIH0KKwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgYmVnaW5PYmplY3Qo
Y29uc3QgU3RyaW5nJiBrZXkpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZW5kT2JqZWN0KCkgPSAw
OwpAQCAtMTM2LDEwICsxNDIsMTEgQEAgcHJpdmF0ZToKIH07CiAKIGNsYXNzIEtleWVkRW5jb2Rl
ciB7Ci1wcm90ZWN0ZWQ6CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxLZXllZEVuY29kZXI+IGVuY29kZXIoKTsKKwogICAgIHZpcnR1YWwgfktleWVk
RW5jb2RlcigpIHsgfQogCi1wdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGVuY29kZUJ5dGVzKGNv
bnN0IFN0cmluZyYga2V5LCBjb25zdCB1aW50OF90Kiwgc2l6ZV90KSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIGVuY29kZUJvb2woY29uc3QgU3RyaW5nJiBrZXksIGJvb2wpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgZW5jb2RlVUludDMyKGNvbnN0IFN0cmluZyYga2V5LCB1aW50MzJfdCkgPSAwOwpA
QCAtMTg4LDYgKzE5NSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIGVuZEFycmF5KCk7CiAgICAgfQog
Citwcm90ZWN0ZWQ6CisgICAgS2V5ZWRFbmNvZGVyKCkKKyAgICB7CisgICAgfQorCiBwcml2YXRl
OgogICAgIHZpcnR1YWwgdm9pZCBiZWdpbk9iamVjdChjb25zdCBTdHJpbmcmIGtleSkgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBlbmRPYmplY3QoKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jZi9LZXllZERlY29kZXJDRi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jZi9LZXllZERlY29kZXJDRi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNzUzNGJhNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NmL0tleWVkRGVjb2RlckNGLmNwcApAQCAtMCwwICsxLDE4MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJLZXllZERlY29kZXJDRi5oIgorCisjaW5jbHVk
ZSA8d3RmL2NmL1R5cGVDYXN0c0NGLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RkOjp1bmlxdWVfcHRyPEtleWVkRGVjb2Rlcj4g
S2V5ZWREZWNvZGVyOjpkZWNvZGVyKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQor
eworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEtleWVkRGVjb2RlckNGPihkYXRhLCBzaXpl
KTsKK30KKworS2V5ZWREZWNvZGVyQ0Y6OktleWVkRGVjb2RlckNGKGNvbnN0IHVpbnQ4X3QqIGRh
dGEsIHNpemVfdCBzaXplKQoreworICAgIGF1dG8gY2ZEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVh
dGVXaXRoQnl0ZXNOb0NvcHkoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZGF0YSwgc2l6ZSwga0NGQWxs
b2NhdG9yTnVsbCkpOworCisgICAgaWYgKGF1dG8gcm9vdERpY3Rpb25hcnkgPSBhZG9wdENGKGR5
bmFtaWNfY2ZfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENGUHJvcGVydHlMaXN0Q3JlYXRlV2l0aERh
dGEoa0NGQWxsb2NhdG9yRGVmYXVsdCwgY2ZEYXRhLmdldCgpLCBrQ0ZQcm9wZXJ0eUxpc3RJbW11
dGFibGUsIG51bGxwdHIsIG51bGxwdHIpKSkpCisgICAgICAgIG1fcm9vdERpY3Rpb25hcnkgPSBX
VEY6Om1vdmUocm9vdERpY3Rpb25hcnkpOworICAgIGVsc2UKKyAgICAgICAgbV9yb290RGljdGlv
bmFyeSA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIG51
bGxwdHIsIG51bGxwdHIsIDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5
cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKyAgICBtX2RpY3Rpb25hcnlTdGFjay5hcHBl
bmQobV9yb290RGljdGlvbmFyeS5nZXQoKSk7Cit9CisKK0tleWVkRGVjb2RlckNGOjp+S2V5ZWRE
ZWNvZGVyQ0YoKQoreworICAgIEFTU0VSVChtX2RpY3Rpb25hcnlTdGFjay5zaXplKCkgPT0gMSk7
CisgICAgQVNTRVJUKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSA9PSBtX3Jvb3REaWN0aW9uYXJ5
KTsKKyAgICBBU1NFUlQobV9hcnJheVN0YWNrLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1fYXJy
YXlJbmRleFN0YWNrLmlzRW1wdHkoKSk7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyQ0Y6OmRlY29k
ZUJ5dGVzKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCB1aW50OF90KiYgYnl0ZXMsIHNpemVfdCYg
c2l6ZSkKK3sKKyAgICBhdXRvIGRhdGEgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZEYXRhUmVmPihDRkRp
Y3Rpb25hcnlHZXRWYWx1ZShtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCksIGtleS5jcmVhdGVDRlN0
cmluZygpLmdldCgpKSk7CisgICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBieXRlcyA9IENGRGF0YUdldEJ5dGVQdHIoZGF0YSk7CisgICAgc2l6ZSA9IENGRGF0YUdl
dExlbmd0aChkYXRhKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBLZXllZERlY29kZXJD
Rjo6ZGVjb2RlQm9vbChjb25zdCBTdHJpbmcmIGtleSwgYm9vbCYgcmVzdWx0KQoreworICAgIGF1
dG8gYm9vbGVhbiA9IGR5bmFtaWNfY2ZfY2FzdDxDRkJvb2xlYW5SZWY+KENGRGljdGlvbmFyeUdl
dFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0
KCkpKTsKKyAgICBpZiAoIWJvb2xlYW4pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJl
c3VsdCA9IENGQm9vbGVhbkdldFZhbHVlKGJvb2xlYW4pOworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIEtleWVkRGVjb2RlckNGOjpkZWNvZGVVSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIHVp
bnQzMl90JiByZXN1bHQpCit7CisgICAgcmV0dXJuIGRlY29kZUludDMyKGtleSwgcmVpbnRlcnBy
ZXRfY2FzdDxpbnQzMl90Jj4ocmVzdWx0KSk7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyQ0Y6OmRl
Y29kZUludDMyKGNvbnN0IFN0cmluZyYga2V5LCBpbnQzMl90JiByZXN1bHQpCit7CisgICAgYXV0
byBudW1iZXIgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZh
bHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkp
KTsKKyAgICBpZiAoIW51bWJlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJu
IENGTnVtYmVyR2V0VmFsdWUobnVtYmVyLCBrQ0ZOdW1iZXJTSW50MzJUeXBlLCAmcmVzdWx0KTsK
K30KKworYm9vbCBLZXllZERlY29kZXJDRjo6ZGVjb2RlSW50NjQoY29uc3QgU3RyaW5nJiBrZXks
IGludDY0X3QmIHJlc3VsdCkKK3sKKyAgICBhdXRvIG51bWJlciA9IGR5bmFtaWNfY2ZfY2FzdDxD
Rk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgp
LCBrZXkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOworICAgIGlmICghbnVtYmVyKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gQ0ZOdW1iZXJHZXRWYWx1ZShudW1iZXIsIGtD
Rk51bWJlclNJbnQ2NFR5cGUsICZyZXN1bHQpOworfQorCitib29sIEtleWVkRGVjb2RlckNGOjpk
ZWNvZGVGbG9hdChjb25zdCBTdHJpbmcmIGtleSwgZmxvYXQmIHJlc3VsdCkKK3sKKyAgICBhdXRv
IG51bWJlciA9IGR5bmFtaWNfY2ZfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFs
dWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkp
OworICAgIGlmICghbnVtYmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4g
Q0ZOdW1iZXJHZXRWYWx1ZShudW1iZXIsIGtDRk51bWJlckZsb2F0VHlwZSwgJnJlc3VsdCk7Cit9
CisKK2Jvb2wgS2V5ZWREZWNvZGVyQ0Y6OmRlY29kZURvdWJsZShjb25zdCBTdHJpbmcmIGtleSwg
ZG91YmxlJiByZXN1bHQpCit7CisgICAgYXV0byBudW1iZXIgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZO
dW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwg
a2V5LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKTsKKyAgICBpZiAoIW51bWJlcikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIENGTnVtYmVyR2V0VmFsdWUobnVtYmVyLCBrQ0ZO
dW1iZXJEb3VibGVUeXBlLCAmcmVzdWx0KTsKK30KKworYm9vbCBLZXllZERlY29kZXJDRjo6ZGVj
b2RlU3RyaW5nKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcmIHJlc3VsdCkKK3sKKyAgICBhdXRv
IHN0cmluZyA9IGR5bmFtaWNfY2ZfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFs
dWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkp
OworICAgIGlmICghc3RyaW5nKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXN1bHQg
PSBzdHJpbmc7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyQ0Y6OmJl
Z2luT2JqZWN0KGNvbnN0IFN0cmluZyYga2V5KQoreworICAgIGF1dG8gZGljdGlvbmFyeSA9IGR5
bmFtaWNfY2ZfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKG1fZGlj
dGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKTsKKyAgICBp
ZiAoIWRpY3Rpb25hcnkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fZGljdGlvbmFy
eVN0YWNrLmFwcGVuZChkaWN0aW9uYXJ5KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBL
ZXllZERlY29kZXJDRjo6ZW5kT2JqZWN0KCkKK3sKKyAgICBtX2RpY3Rpb25hcnlTdGFjay5yZW1v
dmVMYXN0KCk7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyQ0Y6OmJlZ2luQXJyYXkoY29uc3QgU3Ry
aW5nJiBrZXkpCit7CisgICAgYXV0byBhcnJheSA9IGR5bmFtaWNfY2ZfY2FzdDxDRkFycmF5UmVm
PihDRkRpY3Rpb25hcnlHZXRWYWx1ZShtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCksIGtleS5jcmVh
dGVDRlN0cmluZygpLmdldCgpKSk7CisgICAgaWYgKCFhcnJheSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgQ0ZBcnJheUdldENvdW50KGFycmF5
KTsgKytpKSB7CisgICAgICAgIENGVHlwZVJlZiBvYmplY3QgPSBDRkFycmF5R2V0VmFsdWVBdElu
ZGV4KGFycmF5LCBpKTsKKyAgICAgICAgaWYgKENGR2V0VHlwZUlEKG9iamVjdCkgIT0gQ0ZEaWN0
aW9uYXJ5R2V0VHlwZUlEKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgbV9hcnJheVN0YWNrLmFwcGVuZChhcnJheSk7CisgICAgbV9hcnJheUluZGV4U3RhY2suYXBw
ZW5kKDApOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEtleWVkRGVjb2RlckNGOjpiZWdp
bkFycmF5RWxlbWVudCgpCit7CisgICAgaWYgKG1fYXJyYXlJbmRleFN0YWNrLmxhc3QoKSA+PSBD
RkFycmF5R2V0Q291bnQobV9hcnJheVN0YWNrLmxhc3QoKSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGF1dG8gZGljdGlvbmFyeSA9IGNoZWNrZWRfY2ZfY2FzdDxDRkRpY3Rpb25hcnlS
ZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgobV9hcnJheVN0YWNrLmxhc3QoKSwgbV9hcnJheUlu
ZGV4U3RhY2subGFzdCgpKyspKTsKKyAgICBtX2RpY3Rpb25hcnlTdGFjay5hcHBlbmQoZGljdGlv
bmFyeSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgS2V5ZWREZWNvZGVyQ0Y6OmVuZEFy
cmF5RWxlbWVudCgpCit7CisgICAgbV9kaWN0aW9uYXJ5U3RhY2sucmVtb3ZlTGFzdCgpOworfQor
Cit2b2lkIEtleWVkRGVjb2RlckNGOjplbmRBcnJheSgpCit7CisgICAgbV9hcnJheVN0YWNrLnJl
bW92ZUxhc3QoKTsKKyAgICBtX2FycmF5SW5kZXhTdGFjay5yZW1vdmVMYXN0KCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NmL0tleWVkRGVjb2RlckNGLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9LZXllZERl
Y29kZXJDRi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMDdiOWEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9LZXllZERlY29kZXJD
Ri5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEtleWVkRGVjb2RlckNG
X2gKKyNkZWZpbmUgS2V5ZWREZWNvZGVyQ0ZfaAorCisjaW5jbHVkZSAiS2V5ZWRDb2RpbmcuaCIK
KyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEtleWVkRGVjb2RlckNGIGZpbmFsIDogcHVibGlj
IEtleWVkRGVjb2RlciB7CitwdWJsaWM6CisgICAgS2V5ZWREZWNvZGVyQ0YoY29uc3QgdWludDhf
dCogZGF0YSwgc2l6ZV90KTsKKyAgICB2aXJ0dWFsIH5LZXllZERlY29kZXJDRigpIG92ZXJyaWRl
OworCitwcml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVCeXRlcyhjb25zdCBTdHJpbmcm
IGtleSwgY29uc3QgdWludDhfdComLCBzaXplX3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJv
b2wgZGVjb2RlQm9vbChjb25zdCBTdHJpbmcmIGtleSwgYm9vbCYpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgYm9vbCBkZWNvZGVVSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIHVpbnQzMl90Jikgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCBib29sIGRlY29kZUludDMyKGNvbnN0IFN0cmluZyYga2V5LCBp
bnQzMl90Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGRlY29kZUludDY0KGNvbnN0IFN0
cmluZyYga2V5LCBpbnQ2NF90Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGRlY29kZUZs
b2F0KGNvbnN0IFN0cmluZyYga2V5LCBmbG9hdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9v
bCBkZWNvZGVEb3VibGUoY29uc3QgU3RyaW5nJiBrZXksIGRvdWJsZSYpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgYm9vbCBkZWNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyYpIG92
ZXJyaWRlOworCisgICAgdmlydHVhbCBib29sIGJlZ2luT2JqZWN0KGNvbnN0IFN0cmluZyYga2V5
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kT2JqZWN0KCkgb3ZlcnJpZGU7CisKKyAg
ICB2aXJ0dWFsIGJvb2wgYmVnaW5BcnJheShjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCBib29sIGJlZ2luQXJyYXlFbGVtZW50KCkgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCB2b2lkIGVuZEFycmF5RWxlbWVudCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmRB
cnJheSgpIG92ZXJyaWRlOworCisgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gbV9yb290
RGljdGlvbmFyeTsKKworICAgIFZlY3RvcjxDRkRpY3Rpb25hcnlSZWYsIDE2PiBtX2RpY3Rpb25h
cnlTdGFjazsKKyAgICBWZWN0b3I8Q0ZBcnJheVJlZiwgMTY+IG1fYXJyYXlTdGFjazsKKyAgICBW
ZWN0b3I8Q0ZJbmRleD4gbV9hcnJheUluZGV4U3RhY2s7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBLZXllZERlY29kZXJDRl9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jZi9LZXllZEVuY29kZXJDRi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jZi9LZXllZEVuY29kZXJDRi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMWVjNTNkOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2NmL0tleWVkRW5jb2RlckNGLmNwcApAQCAtMCwwICsxLDE1MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJLZXllZEVuY29kZXJDRi5oIgorCisjaW5j
bHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5k
YXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdGQ6OnVuaXF1ZV9wdHI8S2V5ZWRFbmNvZGVyPiBLZXllZEVuY29kZXI6OmVu
Y29kZXIoKQoreworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEtleWVkRW5jb2RlckNGPigp
OworfQorCitzdGF0aWMgUmV0YWluUHRyPENGTXV0YWJsZURpY3Rpb25hcnlSZWY+IGNyZWF0ZURp
Y3Rpb25hcnkoKQoreworICAgIHJldHVybiBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZU11dGFi
bGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tz
LCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworfQorCitLZXllZEVuY29kZXJD
Rjo6S2V5ZWRFbmNvZGVyQ0YoKQorICAgIDogbV9yb290RGljdGlvbmFyeShjcmVhdGVEaWN0aW9u
YXJ5KCkpCit7CisgICAgbV9kaWN0aW9uYXJ5U3RhY2suYXBwZW5kKG1fcm9vdERpY3Rpb25hcnku
Z2V0KCkpOworfQorICAgIAorS2V5ZWRFbmNvZGVyQ0Y6On5LZXllZEVuY29kZXJDRigpCit7Cisg
ICAgQVNTRVJUKG1fZGljdGlvbmFyeVN0YWNrLnNpemUoKSA9PSAxKTsKKyAgICBBU1NFUlQobV9k
aWN0aW9uYXJ5U3RhY2subGFzdCgpID09IG1fcm9vdERpY3Rpb25hcnkpOworICAgIEFTU0VSVCht
X2FycmF5U3RhY2suaXNFbXB0eSgpKTsKK30KKwordm9pZCBLZXllZEVuY29kZXJDRjo6ZW5jb2Rl
Qnl0ZXMoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3Qgc2l6
ZSkKK3sKKyAgICBhdXRvIGRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZVdpdGhCeXRlc05vQ29w
eShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBieXRlcywgc2l6ZSwga0NGQWxsb2NhdG9yTnVsbCkpOwor
ICAgIENGRGljdGlvbmFyeVNldFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5LmNy
ZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIGRhdGEuZ2V0KCkpOworfQorCit2b2lkIEtleWVkRW5jb2Rl
ckNGOjplbmNvZGVCb29sKGNvbnN0IFN0cmluZyYga2V5LCBib29sIHZhbHVlKQoreworICAgIENG
RGljdGlvbmFyeVNldFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5LmNyZWF0ZUNG
U3RyaW5nKCkuZ2V0KCksIHZhbHVlID8ga0NGQm9vbGVhblRydWUgOiBrQ0ZCb29sZWFuRmFsc2Up
OworfQorCit2b2lkIEtleWVkRW5jb2RlckNGOjplbmNvZGVVSW50MzIoY29uc3QgU3RyaW5nJiBr
ZXksIHVpbnQzMl90IHZhbHVlKQoreworICAgIGF1dG8gbnVtYmVyID0gYWRvcHRDRihDRk51bWJl
ckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJTSW50MzJUeXBlLCAmdmFsdWUp
KTsKKyAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCksIGtl
eS5jcmVhdGVDRlN0cmluZygpLmdldCgpLCBudW1iZXIuZ2V0KCkpOworfQorCit2b2lkIEtleWVk
RW5jb2RlckNGOjplbmNvZGVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgaW50MzJfdCB2YWx1ZSkK
K3sKKyAgICBhdXRvIG51bWJlciA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9y
RGVmYXVsdCwga0NGTnVtYmVyU0ludDMyVHlwZSwgJnZhbHVlKSk7CisgICAgQ0ZEaWN0aW9uYXJ5
U2V0VmFsdWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXkuY3JlYXRlQ0ZTdHJpbmcoKS5n
ZXQoKSwgbnVtYmVyLmdldCgpKTsKK30KKwordm9pZCBLZXllZEVuY29kZXJDRjo6ZW5jb2RlSW50
NjQoY29uc3QgU3RyaW5nJiBrZXksIGludDY0X3QgdmFsdWUpCit7CisgICAgYXV0byBudW1iZXIg
PSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlclNJ
bnQ2NFR5cGUsICZ2YWx1ZSkpOworICAgIENGRGljdGlvbmFyeVNldFZhbHVlKG1fZGljdGlvbmFy
eVN0YWNrLmxhc3QoKSwga2V5LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIG51bWJlci5nZXQoKSk7
Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyQ0Y6OmVuY29kZUZsb2F0KGNvbnN0IFN0cmluZyYga2V5
LCBmbG9hdCB2YWx1ZSkKK3sKKyAgICBhdXRvIG51bWJlciA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVh
dGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyRmxvYXRUeXBlLCAmdmFsdWUpKTsKKyAg
ICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCksIGtleS5jcmVh
dGVDRlN0cmluZygpLmdldCgpLCBudW1iZXIuZ2V0KCkpOworfQorCit2b2lkIEtleWVkRW5jb2Rl
ckNGOjplbmNvZGVEb3VibGUoY29uc3QgU3RyaW5nJiBrZXksIGRvdWJsZSB2YWx1ZSkKK3sKKyAg
ICBhdXRvIG51bWJlciA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVs
dCwga0NGTnVtYmVyRG91YmxlVHlwZSwgJnZhbHVlKSk7CisgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFs
dWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwg
bnVtYmVyLmdldCgpKTsKK30KKwordm9pZCBLZXllZEVuY29kZXJDRjo6ZW5jb2RlU3RyaW5nKGNv
bnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIENGRGljdGlvbmFy
eVNldFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5LmNyZWF0ZUNGU3RyaW5nKCku
Z2V0KCksIHZhbHVlLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpOworfQorCit2b2lkIEtleWVkRW5j
b2RlckNGOjpiZWdpbk9iamVjdChjb25zdCBTdHJpbmcmIGtleSkKK3sKKyAgICBhdXRvIGRpY3Rp
b25hcnkgPSBjcmVhdGVEaWN0aW9uYXJ5KCk7CisgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUobV9k
aWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgZGljdGlv
bmFyeS5nZXQoKSk7CisKKyAgICBtX2RpY3Rpb25hcnlTdGFjay5hcHBlbmQoZGljdGlvbmFyeS5n
ZXQoKSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyQ0Y6OmVuZE9iamVjdCgpCit7CisgICAgbV9k
aWN0aW9uYXJ5U3RhY2sucmVtb3ZlTGFzdCgpOworfQorCit2b2lkIEtleWVkRW5jb2RlckNGOjpi
ZWdpbkFycmF5KGNvbnN0IFN0cmluZyYga2V5KQoreworICAgIGF1dG8gYXJyYXkgPSBhZG9wdENG
KENGQXJyYXlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsICZrQ0ZUeXBlQXJy
YXlDYWxsQmFja3MpKTsKKyAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShtX2RpY3Rpb25hcnlTdGFj
ay5sYXN0KCksIGtleS5jcmVhdGVDRlN0cmluZygpLmdldCgpLCBhcnJheS5nZXQoKSk7CisKKyAg
ICBtX2FycmF5U3RhY2suYXBwZW5kKGFycmF5LmdldCgpKTsKK30KKwordm9pZCBLZXllZEVuY29k
ZXJDRjo6YmVnaW5BcnJheUVsZW1lbnQoKQoreworICAgIGF1dG8gZGljdGlvbmFyeSA9IGNyZWF0
ZURpY3Rpb25hcnkoKTsKKyAgICBDRkFycmF5QXBwZW5kVmFsdWUobV9hcnJheVN0YWNrLmxhc3Qo
KSwgZGljdGlvbmFyeS5nZXQoKSk7CisKKyAgICBtX2RpY3Rpb25hcnlTdGFjay5hcHBlbmQoZGlj
dGlvbmFyeS5nZXQoKSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyQ0Y6OmVuZEFycmF5RWxlbWVu
dCgpCit7CisgICAgbV9kaWN0aW9uYXJ5U3RhY2sucmVtb3ZlTGFzdCgpOworfQorCit2b2lkIEtl
eWVkRW5jb2RlckNGOjplbmRBcnJheSgpCit7CisgICAgbV9hcnJheVN0YWNrLnJlbW92ZUxhc3Qo
KTsKK30KKworUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IEtleWVkRW5jb2RlckNGOjpmaW5pc2hF
bmNvZGluZygpCit7CisgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YSA9IGFkb3B0Q0YoQ0ZQ
cm9wZXJ0eUxpc3RDcmVhdGVEYXRhKGtDRkFsbG9jYXRvckRlZmF1bHQsIG1fcm9vdERpY3Rpb25h
cnkuZ2V0KCksIGtDRlByb3BlcnR5TGlzdEJpbmFyeUZvcm1hdF92MV8wLCAwLCBudWxscHRyKSk7
CisgICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBT
aGFyZWRCdWZmZXI6OndyYXBDRkRhdGEoZGF0YS5nZXQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL0tleWVkRW5j
b2RlckNGLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9LZXllZEVuY29kZXJDRi5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MjhjNDkKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9LZXllZEVuY29kZXJDRi5oCkBAIC0wLDAg
KzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEtleWVkRW5jb2RlckNGX2gKKyNkZWZpbmUg
S2V5ZWRFbmNvZGVyQ0ZfaAorCisjaW5jbHVkZSAiS2V5ZWRDb2RpbmcuaCIKKyNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEtleWVkRW5jb2RlckNGIGZpbmFsIDogcHVibGljIEtleWVkRW5jb2Rl
ciB7CitwdWJsaWM6CisgICAgS2V5ZWRFbmNvZGVyQ0YoKTsKKyAgICB+S2V5ZWRFbmNvZGVyQ0Yo
KTsKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IGZpbmlz
aEVuY29kaW5nKCkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIGVuY29k
ZUJ5dGVzKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCB1aW50OF90Kiwgc2l6ZV90KSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlQm9vbChjb25zdCBTdHJpbmcmIGtleSwgYm9vbCkg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuY29kZVVJbnQzMihjb25zdCBTdHJpbmcmIGtl
eSwgdWludDMyX3QpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVJbnQzMihjb25z
dCBTdHJpbmcmIGtleSwgaW50MzJfdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuY29k
ZUludDY0KGNvbnN0IFN0cmluZyYga2V5LCBpbnQ2NF90KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IHZvaWQgZW5jb2RlRmxvYXQoY29uc3QgU3RyaW5nJiBrZXksIGZsb2F0KSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZW5jb2RlRG91YmxlKGNvbnN0IFN0cmluZyYga2V5LCBkb3VibGUpIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBrZXks
IGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCB2b2lkIGJlZ2luT2JqZWN0
KGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kT2JqZWN0
KCkgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5BcnJheShjb25zdCBTdHJpbmcm
IGtleSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGJlZ2luQXJyYXlFbGVtZW50KCkgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuZEFycmF5RWxlbWVudCgpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBlbmRBcnJheSgpIG92ZXJyaWRlOworCisgICAgUmV0YWluUHRyPENGTXV0
YWJsZURpY3Rpb25hcnlSZWY+IG1fcm9vdERpY3Rpb25hcnk7CisKKyAgICBWZWN0b3I8Q0ZNdXRh
YmxlRGljdGlvbmFyeVJlZiwgMTY+IG1fZGljdGlvbmFyeVN0YWNrOworICAgIFZlY3RvcjxDRk11
dGFibGVBcnJheVJlZiwgMTY+IG1fYXJyYXlTdGFjazsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEtleWVkRW5jb2RlckNGX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dsaWIvS2V5ZWREZWNvZGVyR2xpYi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9nbGliL0tleWVkRGVjb2RlckdsaWIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjBjZDE5NDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9nbGliL0tleWVkRGVjb2RlckdsaWIuY3BwCkBAIC0wLDAgKzEsMTczIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJLZXllZERlY29kZXJHbGliLmgiCisKKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RkOjp1bmlxdWVf
cHRyPEtleWVkRGVjb2Rlcj4gS2V5ZWREZWNvZGVyOjpkZWNvZGVyKGNvbnN0IHVpbnQ4X3QqIGRh
dGEsIHNpemVfdCBzaXplKQoreworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEtleWVkRGVj
b2RlckdsaWI+KGRhdGEsIHNpemUpOworfQorCitLZXllZERlY29kZXJHbGliOjpLZXllZERlY29k
ZXJHbGliKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQoreworICAgIEdSZWZQdHI8
R0J5dGVzPiBieXRlcyA9IGFkb3B0R1JlZihnX2J5dGVzX25ldyhkYXRhLCBzaXplKSk7CisgICAg
R1JlZlB0cjxHVmFyaWFudD4gdmFyaWFudCA9IGdfdmFyaWFudF9uZXdfZnJvbV9ieXRlcyhHX1ZB
UklBTlRfVFlQRSgiYXtzdn0iKSwgYnl0ZXMuZ2V0KCksIFRSVUUpOworICAgIG1fZGljdGlvbmFy
eVN0YWNrLmFwcGVuZChkaWN0aW9uYXJ5RnJvbUdWYXJpYW50KHZhcmlhbnQuZ2V0KCkpKTsKK30K
KworS2V5ZWREZWNvZGVyR2xpYjo6fktleWVkRGVjb2RlckdsaWIoKQoreworICAgIEFTU0VSVCht
X2RpY3Rpb25hcnlTdGFjay5zaXplKCkgPT0gMSk7CisgICAgQVNTRVJUKG1fYXJyYXlTdGFjay5p
c0VtcHR5KCkpOworICAgIEFTU0VSVChtX2FycmF5SW5kZXhTdGFjay5pc0VtcHR5KCkpOworfQor
CitIYXNoTWFwPFN0cmluZywgR1JlZlB0cjxHVmFyaWFudD4+IEtleWVkRGVjb2RlckdsaWI6OmRp
Y3Rpb25hcnlGcm9tR1ZhcmlhbnQoR1ZhcmlhbnQqIHZhcmlhbnQpCit7CisgICAgSGFzaE1hcDxT
dHJpbmcsIEdSZWZQdHI8R1ZhcmlhbnQ+PiBkaWN0aW9uYXJ5OworICAgIEdWYXJpYW50SXRlciBp
dGVyOworICAgIGdfdmFyaWFudF9pdGVyX2luaXQoJml0ZXIsIHZhcmlhbnQpOworICAgIGNvbnN0
IGNoYXIqIGtleTsKKyAgICBHVmFyaWFudCogdmFsdWU7CisgICAgd2hpbGUgKGdfdmFyaWFudF9p
dGVyX2xvb3AoJml0ZXIsICJ7JnN2fSIsICZrZXksICZ2YWx1ZSkpCisgICAgICAgIGRpY3Rpb25h
cnkuc2V0KFN0cmluZzo6ZnJvbVVURjgoa2V5KSwgdmFsdWUpOworICAgIHJldHVybiBXVEY6Om1v
dmUoZGljdGlvbmFyeSk7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyR2xpYjo6ZGVjb2RlQnl0ZXMo
Y29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IHVpbnQ4X3QqJiBieXRlcywgc2l6ZV90JiBzaXplKQor
eworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhbHVlID0gbV9kaWN0aW9uYXJ5U3RhY2subGFzdCgp
LmdldChrZXkpOworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHNpemUgPSBnX3ZhcmlhbnRfZ2V0X3NpemUodmFsdWUuZ2V0KCkpOworICAgIGJ5dGVzID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGdfdmFyaWFudF9nZXRfZGF0YSh2YWx1ZS5nZXQoKSkp
OworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBG
PgorYm9vbCBLZXllZERlY29kZXJHbGliOjpkZWNvZGVTaW1wbGVWYWx1ZShjb25zdCBTdHJpbmcm
IGtleSwgVCYgcmVzdWx0LCBGIGdldEZ1bmN0aW9uKQoreworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+
IHZhbHVlID0gbV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLmdldChrZXkpOworICAgIGlmICghdmFs
dWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJlc3VsdCA9IGdldEZ1bmN0aW9uKHZh
bHVlLmdldCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBLZXllZERlY29kZXJHbGli
OjpkZWNvZGVCb29sKGNvbnN0IFN0cmluZyYga2V5LCBib29sJiByZXN1bHQpCit7CisgICAgcmV0
dXJuIGRlY29kZVNpbXBsZVZhbHVlKGtleSwgcmVzdWx0LCBnX3ZhcmlhbnRfZ2V0X2Jvb2xlYW4p
OworfQorCitib29sIEtleWVkRGVjb2RlckdsaWI6OmRlY29kZVVJbnQzMihjb25zdCBTdHJpbmcm
IGtleSwgdWludDMyX3QmIHJlc3VsdCkKK3sKKyAgICByZXR1cm4gZGVjb2RlU2ltcGxlVmFsdWUo
a2V5LCByZXN1bHQsIGdfdmFyaWFudF9nZXRfdWludDMyKTsKK30KKworYm9vbCBLZXllZERlY29k
ZXJHbGliOjpkZWNvZGVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgaW50MzJfdCYgcmVzdWx0KQor
eworICAgIHJldHVybiBkZWNvZGVTaW1wbGVWYWx1ZShrZXksIHJlc3VsdCwgZ192YXJpYW50X2dl
dF9pbnQzMik7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyR2xpYjo6ZGVjb2RlSW50NjQoY29uc3Qg
U3RyaW5nJiBrZXksIGludDY0X3QmIHJlc3VsdCkKK3sKKyAgICByZXR1cm4gZGVjb2RlU2ltcGxl
VmFsdWUoa2V5LCByZXN1bHQsIGdfdmFyaWFudF9nZXRfaW50NjQpOworfQorCitib29sIEtleWVk
RGVjb2RlckdsaWI6OmRlY29kZUZsb2F0KGNvbnN0IFN0cmluZyYga2V5LCBmbG9hdCYgcmVzdWx0
KQoreworICAgIHJldHVybiBkZWNvZGVTaW1wbGVWYWx1ZShrZXksIHJlc3VsdCwgZ192YXJpYW50
X2dldF9kb3VibGUpOworfQorCitib29sIEtleWVkRGVjb2RlckdsaWI6OmRlY29kZURvdWJsZShj
b25zdCBTdHJpbmcmIGtleSwgZG91YmxlJiByZXN1bHQpCit7CisgICAgcmV0dXJuIGRlY29kZVNp
bXBsZVZhbHVlKGtleSwgcmVzdWx0LCBnX3ZhcmlhbnRfZ2V0X2RvdWJsZSk7Cit9CisKK2Jvb2wg
S2V5ZWREZWNvZGVyR2xpYjo6ZGVjb2RlU3RyaW5nKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcm
IHJlc3VsdCkKK3sKKyAgICBHUmVmUHRyPEdWYXJpYW50PiB2YWx1ZSA9IG1fZGljdGlvbmFyeVN0
YWNrLmxhc3QoKS5nZXQoa2V5KTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICByZXN1bHQgPSBTdHJpbmc6OmZyb21VVEY4KGdfdmFyaWFudF9nZXRfc3RyaW5n
KHZhbHVlLmdldCgpLCBudWxscHRyKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgS2V5
ZWREZWNvZGVyR2xpYjo6YmVnaW5PYmplY3QoY29uc3QgU3RyaW5nJiBrZXkpCit7CisgICAgR1Jl
ZlB0cjxHVmFyaWFudD4gdmFsdWUgPSBtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCkuZ2V0KGtleSk7
CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9kaWN0aW9u
YXJ5U3RhY2suYXBwZW5kKGRpY3Rpb25hcnlGcm9tR1ZhcmlhbnQodmFsdWUuZ2V0KCkpKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBLZXllZERlY29kZXJHbGliOjplbmRPYmplY3QoKQor
eworICAgIG1fZGljdGlvbmFyeVN0YWNrLnJlbW92ZUxhc3QoKTsKK30KKworYm9vbCBLZXllZERl
Y29kZXJHbGliOjpiZWdpbkFycmF5KGNvbnN0IFN0cmluZyYga2V5KQoreworICAgIEdSZWZQdHI8
R1ZhcmlhbnQ+IHZhbHVlID0gbV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLmdldChrZXkpOworICAg
IGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fYXJyYXlTdGFjay5h
cHBlbmQodmFsdWUuZ2V0KCkpOworICAgIG1fYXJyYXlJbmRleFN0YWNrLmFwcGVuZCgwKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBLZXllZERlY29kZXJHbGliOjpiZWdpbkFycmF5RWxl
bWVudCgpCit7CisgICAgaWYgKG1fYXJyYXlJbmRleFN0YWNrLmxhc3QoKSA+PSBnX3ZhcmlhbnRf
bl9jaGlsZHJlbihtX2FycmF5U3RhY2subGFzdCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgR1JlZlB0cjxHVmFyaWFudD4gdmFyaWFudCA9IGFkb3B0R1JlZihnX3ZhcmlhbnRfZ2V0
X2NoaWxkX3ZhbHVlKG1fYXJyYXlTdGFjay5sYXN0KCksIG1fYXJyYXlJbmRleFN0YWNrLmxhc3Qo
KSsrKSk7CisgICAgbV9kaWN0aW9uYXJ5U3RhY2suYXBwZW5kKGRpY3Rpb25hcnlGcm9tR1Zhcmlh
bnQodmFyaWFudC5nZXQoKSkpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEtleWVkRGVj
b2RlckdsaWI6OmVuZEFycmF5RWxlbWVudCgpCit7CisgICAgbV9kaWN0aW9uYXJ5U3RhY2sucmVt
b3ZlTGFzdCgpOworfQorCit2b2lkIEtleWVkRGVjb2RlckdsaWI6OmVuZEFycmF5KCkKK3sKKyAg
ICBtX2FycmF5U3RhY2sucmVtb3ZlTGFzdCgpOworICAgIG1fYXJyYXlJbmRleFN0YWNrLnJlbW92
ZUxhc3QoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ2xpYi9LZXllZERlY29kZXJHbGliLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9nbGliL0tleWVkRGVjb2RlckdsaWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi45Y2U4OGUxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ2xpYi9LZXllZERlY29kZXJHbGliLmgKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBJZ2FpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgS2V5ZWRE
ZWNvZGVyR2xpYl9oCisjZGVmaW5lIEtleWVkRGVjb2RlckdsaWJfaAorCisjaW5jbHVkZSAiS2V5
ZWRDb2RpbmcuaCIKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
KyNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
SGFzaC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEtleWVkRGVjb2RlckdsaWIgZmluYWwgOiBwdWJsaWMgS2V5ZWREZWNv
ZGVyIHsKK3B1YmxpYzoKKyAgICBLZXllZERlY29kZXJHbGliKGNvbnN0IHVpbnQ4X3QqIGRhdGEs
IHNpemVfdCk7CisgICAgdmlydHVhbCB+S2V5ZWREZWNvZGVyR2xpYigpIG92ZXJyaWRlOworCitw
cml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVCeXRlcyhjb25zdCBTdHJpbmcmIGtleSwg
Y29uc3QgdWludDhfdComLCBzaXplX3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZGVj
b2RlQm9vbChjb25zdCBTdHJpbmcmIGtleSwgYm9vbCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
Ym9vbCBkZWNvZGVVSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIHVpbnQzMl90Jikgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCBib29sIGRlY29kZUludDMyKGNvbnN0IFN0cmluZyYga2V5LCBpbnQzMl90
Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGRlY29kZUludDY0KGNvbnN0IFN0cmluZyYg
a2V5LCBpbnQ2NF90Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGRlY29kZUZsb2F0KGNv
bnN0IFN0cmluZyYga2V5LCBmbG9hdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBkZWNv
ZGVEb3VibGUoY29uc3QgU3RyaW5nJiBrZXksIGRvdWJsZSYpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgYm9vbCBkZWNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyYpIG92ZXJyaWRl
OworCisgICAgdmlydHVhbCBib29sIGJlZ2luT2JqZWN0KGNvbnN0IFN0cmluZyYga2V5KSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kT2JqZWN0KCkgb3ZlcnJpZGU7CisKKyAgICB2aXJ0
dWFsIGJvb2wgYmVnaW5BcnJheShjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCBib29sIGJlZ2luQXJyYXlFbGVtZW50KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IGVuZEFycmF5RWxlbWVudCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmRBcnJheSgp
IG92ZXJyaWRlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRj4gYm9vbCBk
ZWNvZGVTaW1wbGVWYWx1ZShjb25zdCBTdHJpbmcmIGtleSwgVCYgcmVzdWx0LCBGIGdldEZ1bmN0
aW9uKTsKKyAgICBIYXNoTWFwPFN0cmluZywgR1JlZlB0cjxHVmFyaWFudD4+IGRpY3Rpb25hcnlG
cm9tR1ZhcmlhbnQoR1ZhcmlhbnQqKTsKKworICAgIFZlY3RvcjxIYXNoTWFwPFN0cmluZywgR1Jl
ZlB0cjxHVmFyaWFudD4+PiBtX2RpY3Rpb25hcnlTdGFjazsKKyAgICBWZWN0b3I8R1ZhcmlhbnQq
LCAxNj4gbV9hcnJheVN0YWNrOworICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9hcnJheUluZGV4U3Rh
Y2s7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBLZXllZERlY29k
ZXJHbGliX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dsaWIvS2V5ZWRF
bmNvZGVyR2xpYi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL0tleWVkRW5jb2Rl
ckdsaWIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0OTIxMzYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL0tleWVkRW5jb2Rl
ckdsaWIuY3BwCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEln
YWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJLZXll
ZEVuY29kZXJHbGliLmgiCisKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RkOjp1bmlxdWVf
cHRyPEtleWVkRW5jb2Rlcj4gS2V5ZWRFbmNvZGVyOjplbmNvZGVyKCkKK3sKKyAgICByZXR1cm4g
c3RkOjptYWtlX3VuaXF1ZTxLZXllZEVuY29kZXJHbGliPigpOworfQorCitLZXllZEVuY29kZXJH
bGliOjpLZXllZEVuY29kZXJHbGliKCkKK3sKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9pbml0KCZt
X3ZhcmlhbnRCdWlsZGVyLCBHX1ZBUklBTlRfVFlQRSgiYXtzdn0iKSk7CisgICAgbV92YXJpYW50
QnVpbGRlclN0YWNrLmFwcGVuZCgmbV92YXJpYW50QnVpbGRlcik7Cit9CisKK0tleWVkRW5jb2Rl
ckdsaWI6On5LZXllZEVuY29kZXJHbGliKCkKK3sKKyAgICBBU1NFUlQobV92YXJpYW50QnVpbGRl
clN0YWNrLnNpemUoKSA9PSAxKTsKKyAgICBBU1NFUlQobV92YXJpYW50QnVpbGRlclN0YWNrLmxh
c3QoKSA9PSAmbV92YXJpYW50QnVpbGRlcik7CisgICAgQVNTRVJUKG1fYXJyYXlTdGFjay5pc0Vt
cHR5KCkpOworICAgIEFTU0VSVChtX29iamVjdFN0YWNrLmlzRW1wdHkoKSk7Cit9CisKK3ZvaWQg
S2V5ZWRFbmNvZGVyR2xpYjo6ZW5jb2RlQnl0ZXMoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IHVp
bnQ4X3QqIGJ5dGVzLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBHUmVmUHRyPEdCeXRlcz4gZ0J5dGVz
ID0gYWRvcHRHUmVmKGdfYnl0ZXNfbmV3X3N0YXRpYyhieXRlcywgc2l6ZSkpOworICAgIGdfdmFy
aWFudF9idWlsZGVyX2FkZChtX3ZhcmlhbnRCdWlsZGVyU3RhY2subGFzdCgpLCAie3N2fSIsIGtl
eS51dGY4KCkuZGF0YSgpLCBnX3ZhcmlhbnRfbmV3X2Zyb21fYnl0ZXMoR19WQVJJQU5UX1RZUEUo
ImF5IiksIGdCeXRlcy5nZXQoKSwgVFJVRSkpOworfQorCit2b2lkIEtleWVkRW5jb2RlckdsaWI6
OmVuY29kZUJvb2woY29uc3QgU3RyaW5nJiBrZXksIGJvb2wgdmFsdWUpCit7CisgICAgZ192YXJp
YW50X2J1aWxkZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCksICJ7c3Z9Iiwga2V5
LnV0ZjgoKS5kYXRhKCksIGdfdmFyaWFudF9uZXdfYm9vbGVhbih2YWx1ZSkpOworfQorCit2b2lk
IEtleWVkRW5jb2RlckdsaWI6OmVuY29kZVVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgdWludDMy
X3QgdmFsdWUpCit7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJT
dGFjay5sYXN0KCksICJ7c3Z9Iiwga2V5LnV0ZjgoKS5kYXRhKCksIGdfdmFyaWFudF9uZXdfdWlu
dDMyKHZhbHVlKSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyR2xpYjo6ZW5jb2RlSW50MzIoY29u
c3QgU3RyaW5nJiBrZXksIGludDMyX3QgdmFsdWUpCit7CisgICAgZ192YXJpYW50X2J1aWxkZXJf
YWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCksICJ7c3Z9Iiwga2V5LnV0ZjgoKS5kYXRh
KCksIGdfdmFyaWFudF9uZXdfaW50MzIodmFsdWUpKTsKK30KKwordm9pZCBLZXllZEVuY29kZXJH
bGliOjplbmNvZGVJbnQ2NChjb25zdCBTdHJpbmcmIGtleSwgaW50NjRfdCB2YWx1ZSkKK3sKKyAg
ICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQobV92YXJpYW50QnVpbGRlclN0YWNrLmxhc3QoKSwgIntz
dn0iLCBrZXkudXRmOCgpLmRhdGEoKSwgZ192YXJpYW50X25ld19pbnQ2NCh2YWx1ZSkpOworfQor
Cit2b2lkIEtleWVkRW5jb2RlckdsaWI6OmVuY29kZUZsb2F0KGNvbnN0IFN0cmluZyYga2V5LCBm
bG9hdCB2YWx1ZSkKK3sKKyAgICBlbmNvZGVEb3VibGUoa2V5LCB2YWx1ZSk7Cit9CisKK3ZvaWQg
S2V5ZWRFbmNvZGVyR2xpYjo6ZW5jb2RlRG91YmxlKGNvbnN0IFN0cmluZyYga2V5LCBkb3VibGUg
dmFsdWUpCit7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFj
ay5sYXN0KCksICJ7c3Z9Iiwga2V5LnV0ZjgoKS5kYXRhKCksIGdfdmFyaWFudF9uZXdfZG91Ymxl
KHZhbHVlKSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyR2xpYjo6ZW5jb2RlU3RyaW5nKGNvbnN0
IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGdfdmFyaWFudF9idWls
ZGVyX2FkZChtX3ZhcmlhbnRCdWlsZGVyU3RhY2subGFzdCgpLCAie3N2fSIsIGtleS51dGY4KCku
ZGF0YSgpLCBnX3ZhcmlhbnRfbmV3X3N0cmluZyh2YWx1ZS51dGY4KCkuZGF0YSgpKSk7Cit9CisK
K3ZvaWQgS2V5ZWRFbmNvZGVyR2xpYjo6YmVnaW5PYmplY3QoY29uc3QgU3RyaW5nJiBrZXkpCit7
CisgICAgR1JlZlB0cjxHVmFyaWFudEJ1aWxkZXI+IGJ1aWxkZXIgPSBhZG9wdEdSZWYoZ192YXJp
YW50X2J1aWxkZXJfbmV3KEdfVkFSSUFOVF9UWVBFKCJhYXtzdn0iKSkpOworICAgIG1fb2JqZWN0
U3RhY2suYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGtleSwgYnVpbGRlcikpOworICAgIG1fdmFyaWFu
dEJ1aWxkZXJTdGFjay5hcHBlbmQoYnVpbGRlci5nZXQoKSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNv
ZGVyR2xpYjo6ZW5kT2JqZWN0KCkKK3sKKyAgICBHVmFyaWFudEJ1aWxkZXIqIGJ1aWxkZXIgPSBt
X3ZhcmlhbnRCdWlsZGVyU3RhY2sudGFrZUxhc3QoKTsKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9h
ZGQobV92YXJpYW50QnVpbGRlclN0YWNrLmxhc3QoKSwgIntzdn0iLCBtX29iamVjdFN0YWNrLmxh
c3QoKS5maXJzdC51dGY4KCkuZGF0YSgpLCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQoYnVpbGRlcikp
OworICAgIG1fb2JqZWN0U3RhY2sucmVtb3ZlTGFzdCgpOworfQorCit2b2lkIEtleWVkRW5jb2Rl
ckdsaWI6OmJlZ2luQXJyYXkoY29uc3QgU3RyaW5nJiBrZXkpCit7CisgICAgbV9hcnJheVN0YWNr
LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihrZXksIGFkb3B0R1JlZihnX3ZhcmlhbnRfYnVpbGRlcl9u
ZXcoR19WQVJJQU5UX1RZUEUoImFhe3N2fSIpKSkpKTsKK30KKwordm9pZCBLZXllZEVuY29kZXJH
bGliOjpiZWdpbkFycmF5RWxlbWVudCgpCit7CisgICAgbV92YXJpYW50QnVpbGRlclN0YWNrLmFw
cGVuZChnX3ZhcmlhbnRfYnVpbGRlcl9uZXcoR19WQVJJQU5UX1RZUEUoImF7c3Z9IikpKTsKK30K
Kwordm9pZCBLZXllZEVuY29kZXJHbGliOjplbmRBcnJheUVsZW1lbnQoKQoreworICAgIEdSZWZQ
dHI8R1ZhcmlhbnRCdWlsZGVyPiB2YXJpYW50QnVpbGRlciA9IGFkb3B0R1JlZihtX3ZhcmlhbnRC
dWlsZGVyU3RhY2sudGFrZUxhc3QoKSk7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkX3ZhbHVl
KG1fYXJyYXlTdGFjay5sYXN0KCkuc2Vjb25kLmdldCgpLCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQo
dmFyaWFudEJ1aWxkZXIuZ2V0KCkpKTsKK30KKwordm9pZCBLZXllZEVuY29kZXJHbGliOjplbmRB
cnJheSgpCit7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFj
ay5sYXN0KCksICJ7c3Z9IiwgbV9hcnJheVN0YWNrLmxhc3QoKS5maXJzdC51dGY4KCkuZGF0YSgp
LCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQobV9hcnJheVN0YWNrLmxhc3QoKS5zZWNvbmQuZ2V0KCkp
KTsKKyAgICBtX2FycmF5U3RhY2sucmVtb3ZlTGFzdCgpOworfQorCitQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gS2V5ZWRFbmNvZGVyR2xpYjo6ZmluaXNoRW5jb2RpbmcoKQoreworICAgIGdfYXNz
ZXJ0KG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCkgPT0gJm1fdmFyaWFudEJ1aWxkZXIpOwor
ICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhcmlhbnQgPSBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQoJm1f
dmFyaWFudEJ1aWxkZXIpOworICAgIEdSZWZQdHI8R0J5dGVzPiBkYXRhID0gZ192YXJpYW50X2dl
dF9kYXRhX2FzX2J5dGVzKHZhcmlhbnQuZ2V0KCkpOworICAgIHJldHVybiBTaGFyZWRCdWZmZXI6
OmNyZWF0ZShzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oZ19ieXRlc19nZXRfZGF0
YShkYXRhLmdldCgpLCBudWxscHRyKSksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihnX2J5dGVzX2dl
dF9zaXplKGRhdGEuZ2V0KCkpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dsaWIvS2V5ZWRFbmNvZGVyR2xpYi5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2xpYi9LZXllZEVuY29kZXJHbGliLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EzMGY0YwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dsaWIvS2V5ZWRFbmNvZGVyR2xpYi5oCkBAIC0wLDAgKzEs
NzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBLZXllZEVuY29kZXJHbGliX2gKKyNkZWZpbmUgS2V5ZWRFbmNvZGVyR2xpYl9oCisK
KyNpbmNsdWRlICJLZXllZENvZGluZy5oIgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEtleWVk
RW5jb2RlckdsaWIgZmluYWwgOiBwdWJsaWMgS2V5ZWRFbmNvZGVyIHsKK3B1YmxpYzoKKyAgICBL
ZXllZEVuY29kZXJHbGliKCk7CisgICAgfktleWVkRW5jb2RlckdsaWIoKTsKKworICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IGZpbmlzaEVuY29kaW5nKCkgb3Zl
cnJpZGU7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIGVuY29kZUJ5dGVzKGNvbnN0IFN0
cmluZyYga2V5LCBjb25zdCB1aW50OF90Kiwgc2l6ZV90KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IHZvaWQgZW5jb2RlQm9vbChjb25zdCBTdHJpbmcmIGtleSwgYm9vbCkgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIGVuY29kZVVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgdWludDMyX3QpIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwg
aW50MzJfdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuY29kZUludDY0KGNvbnN0IFN0
cmluZyYga2V5LCBpbnQ2NF90KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlRmxv
YXQoY29uc3QgU3RyaW5nJiBrZXksIGZsb2F0KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZW5jb2RlRG91YmxlKGNvbnN0IFN0cmluZyYga2V5LCBkb3VibGUpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBlbmNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYp
IG92ZXJyaWRlOworCisgICAgdmlydHVhbCB2b2lkIGJlZ2luT2JqZWN0KGNvbnN0IFN0cmluZyYg
a2V5KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kT2JqZWN0KCkgb3ZlcnJpZGU7CisK
KyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5BcnJheShjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIGJlZ2luQXJyYXlFbGVtZW50KCkgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIGVuZEFycmF5RWxlbWVudCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBl
bmRBcnJheSgpIG92ZXJyaWRlOworCisgICAgR1ZhcmlhbnRCdWlsZGVyIG1fdmFyaWFudEJ1aWxk
ZXI7CisgICAgVmVjdG9yPEdWYXJpYW50QnVpbGRlciosIDE2PiBtX3ZhcmlhbnRCdWlsZGVyU3Rh
Y2s7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIEdSZWZQdHI8R1ZhcmlhbnRCdWlsZGVy
Pj4sIDE2PiBtX2FycmF5U3RhY2s7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIEdSZWZQ
dHI8R1ZhcmlhbnRCdWlsZGVyPj4sIDE2PiBtX29iamVjdFN0YWNrOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gS2V5ZWRFbmNvZGVyR2xpYl9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0lEQlNlcmlhbGl6YXRp
b24uY3BwIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9JREJTZXJp
YWxpemF0aW9uLmNwcAppbmRleCA3ZDczMGJlLi5hMTI1ZDZhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0lEQlNlcmlhbGl6YXRpb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvSURCU2VyaWFsaXph
dGlvbi5jcHAKQEAgLTI4LDEwICsyOCw5IEBACiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CiAKICNpbmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIKLSNpbmNsdWRlICJLZXllZERlY29kZXIu
aCIKLSNpbmNsdWRlICJLZXllZEVuY29kZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0lEQktleURh
dGEuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0lEQktleVBhdGguaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0tleWVkQ29kaW5nLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0zOSw5ICsz
OCw5IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBSZWZQdHI8U2hhcmVkQnVmZmVyPiBzZXJpYWxp
emVJREJLZXlQYXRoKGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCiB7Ci0gICAgS2V5ZWRFbmNv
ZGVyIGVuY29kZXI7Ci0gICAga2V5UGF0aC5lbmNvZGUoZW5jb2Rlcik7Ci0gICAgcmV0dXJuIGVu
Y29kZXIuZmluaXNoRW5jb2RpbmcoKTsKKyAgICBhdXRvIGVuY29kZXIgPSBLZXllZEVuY29kZXI6
OmVuY29kZXIoKTsKKyAgICBrZXlQYXRoLmVuY29kZSgqZW5jb2Rlcik7CisgICAgcmV0dXJuIGVu
Y29kZXItPmZpbmlzaEVuY29kaW5nKCk7CiB9CiAKIGJvb2wgZGVzZXJpYWxpemVJREJLZXlQYXRo
KGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBJREJLZXlQYXRoJiByZXN1bHQpCkBA
IC00OSwxNSArNDgsMTUgQEAgYm9vbCBkZXNlcmlhbGl6ZUlEQktleVBhdGgoY29uc3QgdWludDhf
dCogZGF0YSwgc2l6ZV90IHNpemUsIElEQktleVBhdGgmIHJlc3VsdCkKICAgICBpZiAoIWRhdGEg
fHwgIXNpemUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEtleWVkRGVjb2RlciBkZWNv
ZGVyKGRhdGEsIHNpemUpOwotICAgIHJldHVybiBJREJLZXlQYXRoOjpkZWNvZGUoZGVjb2Rlciwg
cmVzdWx0KTsKKyAgICBhdXRvIGRlY29kZXIgPSBLZXllZERlY29kZXI6OmRlY29kZXIoZGF0YSwg
c2l6ZSk7CisgICAgcmV0dXJuIElEQktleVBhdGg6OmRlY29kZSgqZGVjb2RlciwgcmVzdWx0KTsK
IH0KIAogUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gc2VyaWFsaXplSURCS2V5RGF0YShjb25zdCBJREJL
ZXlEYXRhJiBrZXkpCiB7Ci0gICAgS2V5ZWRFbmNvZGVyIGVuY29kZXI7Ci0gICAga2V5LmVuY29k
ZShlbmNvZGVyKTsKLSAgICByZXR1cm4gZW5jb2Rlci5maW5pc2hFbmNvZGluZygpOworICAgIGF1
dG8gZW5jb2RlciA9IEtleWVkRW5jb2Rlcjo6ZW5jb2RlcigpOworICAgIGtleS5lbmNvZGUoKmVu
Y29kZXIpOworICAgIHJldHVybiBlbmNvZGVyLT5maW5pc2hFbmNvZGluZygpOwogfQogCiBib29s
IGRlc2VyaWFsaXplSURCS2V5RGF0YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSwg
SURCS2V5RGF0YSYgcmVzdWx0KQpAQCAtNjUsOCArNjQsOCBAQCBib29sIGRlc2VyaWFsaXplSURC
S2V5RGF0YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSwgSURCS2V5RGF0YSYgcmVz
dWx0KQogICAgIGlmICghZGF0YSB8fCAhc2l6ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgS2V5ZWREZWNvZGVyIGRlY29kZXIoZGF0YSwgc2l6ZSk7Ci0gICAgcmV0dXJuIElEQktleURh
dGE6OmRlY29kZShkZWNvZGVyLCByZXN1bHQpOworICAgIGF1dG8gZGVjb2RlciA9IEtleWVkRGVj
b2Rlcjo6ZGVjb2RlcihkYXRhLCBzaXplKTsKKyAgICByZXR1cm4gSURCS2V5RGF0YTo6ZGVjb2Rl
KCpkZWNvZGVyLCByZXN1bHQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxh
dGZvcm1FZmwuY21ha2UKaW5kZXggZTQzNWU4MS4uMDVhNTI4ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1F
ZmwuY21ha2UKQEAgLTQ3LDkgKzQ3LDYgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAg
ICAgU2hhcmVkL2VmbC9Qcm9jZXNzRXhlY3V0YWJsZVBhdGhFZmwuY3BwCiAgICAgU2hhcmVkL2Vm
bC9XZWJFdmVudEZhY3RvcnkuY3BwCiAKLSAgICBTaGFyZWQvZ2xpYi9LZXllZERlY29kZXIuY3Bw
Ci0gICAgU2hhcmVkL2dsaWIvS2V5ZWRFbmNvZGVyLmNwcAotCiAgICAgU2hhcmVkL2xpbnV4L1dl
Yk1lbW9yeVNhbXBsZXJMaW51eC5jcHAKIAogICAgIFNoYXJlZC9saW51eC9TZWNjb21wRmlsdGVy
cy9PcGVuU3lzY2FsbC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RL
LmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggNjExM2U2MS4u
YmQ5ZjcyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKKysr
IGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTYyLDggKzYyLDYgQEAgbGlz
dChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAKICAgICBTaGFyZWQvY2Fpcm8vU2hhcmVhYmxlQml0
bWFwQ2Fpcm8uY3BwCiAKLSAgICBTaGFyZWQvZ2xpYi9LZXllZERlY29kZXIuY3BwCi0gICAgU2hh
cmVkL2dsaWIvS2V5ZWRFbmNvZGVyLmNwcAogICAgIFNoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNH
dGsuY3BwCiAgICAgU2hhcmVkL2d0ay9OYXRpdmVDb250ZXh0TWVudUl0ZW1HdGsuY3BwCiAgICAg
U2hhcmVkL2d0ay9OYXRpdmVXZWJLZXlib2FyZEV2ZW50R3RrLmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL2NmL0tleWVkRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvY2YvS2V5ZWREZWNvZGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MmJhM2ZjMS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2YvS2V5ZWREZWNv
ZGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIktleWVkRGVjb2Rlci5oIgotCi0jaW5jbHVkZSA8
d3RmL2NmL1R5cGVDYXN0c0NGLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0K
LW5hbWVzcGFjZSBXZWJLaXQgewotCi1LZXllZERlY29kZXI6OktleWVkRGVjb2Rlcihjb25zdCB1
aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0Yo
Q0ZEYXRhQ3JlYXRlV2l0aEJ5dGVzTm9Db3B5KGtDRkFsbG9jYXRvckRlZmF1bHQsIGRhdGEsIHNp
emUsIGtDRkFsbG9jYXRvck51bGwpKTsKLQotICAgIGlmIChhdXRvIHJvb3REaWN0aW9uYXJ5ID0g
YWRvcHRDRihkeW5hbWljX2NmX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRlByb3BlcnR5TGlzdENy
ZWF0ZVdpdGhEYXRhKGtDRkFsbG9jYXRvckRlZmF1bHQsIGNmRGF0YS5nZXQoKSwga0NGUHJvcGVy
dHlMaXN0SW1tdXRhYmxlLCBudWxscHRyLCBudWxscHRyKSkpKQotICAgICAgICBtX3Jvb3REaWN0
aW9uYXJ5ID0gV1RGOjptb3ZlKHJvb3REaWN0aW9uYXJ5KTsKLSAgICBlbHNlCi0gICAgICAgIG1f
cm9vdERpY3Rpb25hcnkgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCBudWxscHRyLCBudWxscHRyLCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFj
a3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgbV9kaWN0aW9uYXJ5
U3RhY2suYXBwZW5kKG1fcm9vdERpY3Rpb25hcnkuZ2V0KCkpOwotfQotCi1LZXllZERlY29kZXI6
On5LZXllZERlY29kZXIoKQotewotICAgIEFTU0VSVChtX2RpY3Rpb25hcnlTdGFjay5zaXplKCkg
PT0gMSk7Ci0gICAgQVNTRVJUKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSA9PSBtX3Jvb3REaWN0
aW9uYXJ5KTsKLSAgICBBU1NFUlQobV9hcnJheVN0YWNrLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJU
KG1fYXJyYXlJbmRleFN0YWNrLmlzRW1wdHkoKSk7Ci19Ci0KLWJvb2wgS2V5ZWREZWNvZGVyOjpk
ZWNvZGVCeXRlcyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgdWludDhfdComIGJ5dGVzLCBzaXpl
X3QmIHNpemUpCi17Ci0gICAgYXV0byBkYXRhID0gZHluYW1pY19jZl9jYXN0PENGRGF0YVJlZj4o
Q0ZEaWN0aW9uYXJ5R2V0VmFsdWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXkuY3JlYXRl
Q0ZTdHJpbmcoKS5nZXQoKSkpOwotICAgIGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgYnl0ZXMgPSBDRkRhdGFHZXRCeXRlUHRyKGRhdGEpOwotICAgIHNpemUgPSBDRkRh
dGFHZXRMZW5ndGgoZGF0YSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgS2V5ZWREZWNv
ZGVyOjpkZWNvZGVCb29sKGNvbnN0IFN0cmluZyYga2V5LCBib29sJiByZXN1bHQpCi17Ci0gICAg
YXV0byBib29sZWFuID0gZHluYW1pY19jZl9jYXN0PENGQm9vbGVhblJlZj4oQ0ZEaWN0aW9uYXJ5
R2V0VmFsdWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXkuY3JlYXRlQ0ZTdHJpbmcoKS5n
ZXQoKSkpOwotICAgIGlmICghYm9vbGVhbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
cmVzdWx0ID0gQ0ZCb29sZWFuR2V0VmFsdWUoYm9vbGVhbik7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVVSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIHVp
bnQzMl90JiByZXN1bHQpCi17Ci0gICAgcmV0dXJuIGRlY29kZUludDMyKGtleSwgcmVpbnRlcnBy
ZXRfY2FzdDxpbnQzMl90Jj4ocmVzdWx0KSk7Ci19Ci0KLWJvb2wgS2V5ZWREZWNvZGVyOjpkZWNv
ZGVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgaW50MzJfdCYgcmVzdWx0KQotewotICAgIGF1dG8g
bnVtYmVyID0gZHluYW1pY19jZl9jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1
ZShtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCksIGtleS5jcmVhdGVDRlN0cmluZygpLmdldCgpKSk7
Ci0gICAgaWYgKCFudW1iZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBD
Rk51bWJlckdldFZhbHVlKG51bWJlciwga0NGTnVtYmVyU0ludDMyVHlwZSwgJnJlc3VsdCk7Ci19
Ci0KLWJvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVJbnQ2NChjb25zdCBTdHJpbmcmIGtleSwgaW50
NjRfdCYgcmVzdWx0KQotewotICAgIGF1dG8gbnVtYmVyID0gZHluYW1pY19jZl9jYXN0PENGTnVt
YmVyUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCksIGtl
eS5jcmVhdGVDRlN0cmluZygpLmdldCgpKSk7Ci0gICAgaWYgKCFudW1iZXIpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHJldHVybiBDRk51bWJlckdldFZhbHVlKG51bWJlciwga0NGTnVt
YmVyU0ludDY0VHlwZSwgJnJlc3VsdCk7Ci19Ci0KLWJvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVG
bG9hdChjb25zdCBTdHJpbmcmIGtleSwgZmxvYXQmIHJlc3VsdCkKLXsKLSAgICBhdXRvIG51bWJl
ciA9IGR5bmFtaWNfY2ZfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUobV9k
aWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOwotICAg
IGlmICghbnVtYmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gQ0ZOdW1i
ZXJHZXRWYWx1ZShudW1iZXIsIGtDRk51bWJlckZsb2F0VHlwZSwgJnJlc3VsdCk7Ci19Ci0KLWJv
b2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVEb3VibGUoY29uc3QgU3RyaW5nJiBrZXksIGRvdWJsZSYg
cmVzdWx0KQotewotICAgIGF1dG8gbnVtYmVyID0gZHluYW1pY19jZl9jYXN0PENGTnVtYmVyUmVm
PihDRkRpY3Rpb25hcnlHZXRWYWx1ZShtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCksIGtleS5jcmVh
dGVDRlN0cmluZygpLmdldCgpKSk7Ci0gICAgaWYgKCFudW1iZXIpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHJldHVybiBDRk51bWJlckdldFZhbHVlKG51bWJlciwga0NGTnVtYmVyRG91
YmxlVHlwZSwgJnJlc3VsdCk7Ci19Ci0KLWJvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVTdHJpbmco
Y29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyYgcmVzdWx0KQotewotICAgIGF1dG8gc3RyaW5nID0g
ZHluYW1pY19jZl9jYXN0PENGU3RyaW5nUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShtX2RpY3Rp
b25hcnlTdGFjay5sYXN0KCksIGtleS5jcmVhdGVDRlN0cmluZygpLmdldCgpKSk7Ci0gICAgaWYg
KCFzdHJpbmcpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJlc3VsdCA9IHN0cmluZzsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBLZXllZERlY29kZXI6OmJlZ2luT2JqZWN0KGNv
bnN0IFN0cmluZyYga2V5KQotewotICAgIGF1dG8gZGljdGlvbmFyeSA9IGR5bmFtaWNfY2ZfY2Fz
dDxDRkRpY3Rpb25hcnlSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKG1fZGljdGlvbmFyeVN0YWNr
Lmxhc3QoKSwga2V5LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKTsKLSAgICBpZiAoIWRpY3Rpb25h
cnkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fZGljdGlvbmFyeVN0YWNrLmFwcGVu
ZChkaWN0aW9uYXJ5KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBLZXllZERlY29kZXI6
OmVuZE9iamVjdCgpCi17Ci0gICAgbV9kaWN0aW9uYXJ5U3RhY2sucmVtb3ZlTGFzdCgpOwotfQot
Ci1ib29sIEtleWVkRGVjb2Rlcjo6YmVnaW5BcnJheShjb25zdCBTdHJpbmcmIGtleSkKLXsKLSAg
ICBhdXRvIGFycmF5ID0gZHluYW1pY19jZl9jYXN0PENGQXJyYXlSZWY+KENGRGljdGlvbmFyeUdl
dFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0
KCkpKTsKLSAgICBpZiAoIWFycmF5KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3Ig
KENGSW5kZXggaSA9IDA7IGkgPCBDRkFycmF5R2V0Q291bnQoYXJyYXkpOyArK2kpIHsKLSAgICAg
ICAgQ0ZUeXBlUmVmIG9iamVjdCA9IENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoYXJyYXksIGkpOwot
ICAgICAgICBpZiAoQ0ZHZXRUeXBlSUQob2JqZWN0KSAhPSBDRkRpY3Rpb25hcnlHZXRUeXBlSUQo
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBtX2FycmF5U3RhY2su
YXBwZW5kKGFycmF5KTsKLSAgICBtX2FycmF5SW5kZXhTdGFjay5hcHBlbmQoMCk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgS2V5ZWREZWNvZGVyOjpiZWdpbkFycmF5RWxlbWVudCgpCi17
Ci0gICAgaWYgKG1fYXJyYXlJbmRleFN0YWNrLmxhc3QoKSA+PSBDRkFycmF5R2V0Q291bnQobV9h
cnJheVN0YWNrLmxhc3QoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gZGlj
dGlvbmFyeSA9IGNoZWNrZWRfY2ZfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENGQXJyYXlHZXRWYWx1
ZUF0SW5kZXgobV9hcnJheVN0YWNrLmxhc3QoKSwgbV9hcnJheUluZGV4U3RhY2subGFzdCgpKysp
KTsKLSAgICBtX2RpY3Rpb25hcnlTdGFjay5hcHBlbmQoZGljdGlvbmFyeSk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXZvaWQgS2V5ZWREZWNvZGVyOjplbmRBcnJheUVsZW1lbnQoKQotewotICAg
IG1fZGljdGlvbmFyeVN0YWNrLnJlbW92ZUxhc3QoKTsKLX0KLQotdm9pZCBLZXllZERlY29kZXI6
OmVuZEFycmF5KCkKLXsKLSAgICBtX2FycmF5U3RhY2sucmVtb3ZlTGFzdCgpOwotICAgIG1fYXJy
YXlJbmRleFN0YWNrLnJlbW92ZUxhc3QoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2YvS2V5ZWREZWNvZGVyLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvY2YvS2V5ZWREZWNvZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDk4YWI3ODQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2Nm
L0tleWVkRGVjb2Rlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgS2V5ZWREZWNvZGVyX2gKLSNkZWZpbmUgS2V5ZWREZWNvZGVyX2gKLQotI2lu
Y2x1ZGUgPFdlYkNvcmUvS2V5ZWRDb2RpbmcuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3Mg
S2V5ZWREZWNvZGVyIGZpbmFsIDogcHVibGljIFdlYkNvcmU6OktleWVkRGVjb2RlciB7Ci1wdWJs
aWM6Ci0gICAgS2V5ZWREZWNvZGVyKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCk7Ci0gICAg
dmlydHVhbCB+S2V5ZWREZWNvZGVyKCkgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVh
bCBib29sIGRlY29kZUJ5dGVzKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCB1aW50OF90KiYsIHNp
emVfdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVCb29sKGNvbnN0IFN0cmlu
ZyYga2V5LCBib29sJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGRlY29kZVVJbnQzMihj
b25zdCBTdHJpbmcmIGtleSwgdWludDMyX3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wg
ZGVjb2RlSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIGludDMyX3QmKSBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIGJvb2wgZGVjb2RlSW50NjQoY29uc3QgU3RyaW5nJiBrZXksIGludDY0X3QmKSBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlRmxvYXQoY29uc3QgU3RyaW5nJiBrZXksIGZs
b2F0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGRlY29kZURvdWJsZShjb25zdCBTdHJp
bmcmIGtleSwgZG91YmxlJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGRlY29kZVN0cmlu
Zyhjb25zdCBTdHJpbmcmIGtleSwgU3RyaW5nJikgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIGJv
b2wgYmVnaW5PYmplY3QoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
dm9pZCBlbmRPYmplY3QoKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgYm9vbCBiZWdpbkFycmF5
KGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgYmVnaW5BcnJh
eUVsZW1lbnQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5kQXJyYXlFbGVtZW50KCkg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGVuZEFycmF5KCkgb3ZlcnJpZGU7Ci0KLSAgICBS
ZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBtX3Jvb3REaWN0aW9uYXJ5OwotCi0gICAgVmVjdG9y
PENGRGljdGlvbmFyeVJlZiwgMTY+IG1fZGljdGlvbmFyeVN0YWNrOwotICAgIFZlY3RvcjxDRkFy
cmF5UmVmLCAxNj4gbV9hcnJheVN0YWNrOwotICAgIFZlY3RvcjxDRkluZGV4PiBtX2FycmF5SW5k
ZXhTdGFjazsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gS2V5ZWRE
ZWNvZGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9jZi9LZXllZEVuY29k
ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2NmL0tleWVkRW5jb2Rlci5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzZjcyYTUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL2NmL0tleWVkRW5jb2Rlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNDkg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJLZXll
ZEVuY29kZXIuaCIKLQotI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJL
aXQgewotCi1zdGF0aWMgUmV0YWluUHRyPENGTXV0YWJsZURpY3Rpb25hcnlSZWY+IGNyZWF0ZURp
Y3Rpb25hcnkoKQotewotICAgIHJldHVybiBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZU11dGFi
bGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tz
LCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwotfQotCi1LZXllZEVuY29kZXI6
OktleWVkRW5jb2RlcigpCi0gICAgOiBtX3Jvb3REaWN0aW9uYXJ5KGNyZWF0ZURpY3Rpb25hcnko
KSkKLXsKLSAgICBtX2RpY3Rpb25hcnlTdGFjay5hcHBlbmQobV9yb290RGljdGlvbmFyeS5nZXQo
KSk7Ci19Ci0gICAgCi1LZXllZEVuY29kZXI6On5LZXllZEVuY29kZXIoKQotewotICAgIEFTU0VS
VChtX2RpY3Rpb25hcnlTdGFjay5zaXplKCkgPT0gMSk7Ci0gICAgQVNTRVJUKG1fZGljdGlvbmFy
eVN0YWNrLmxhc3QoKSA9PSBtX3Jvb3REaWN0aW9uYXJ5KTsKLSAgICBBU1NFUlQobV9hcnJheVN0
YWNrLmlzRW1wdHkoKSk7Ci19Ci0KLXZvaWQgS2V5ZWRFbmNvZGVyOjplbmNvZGVCeXRlcyhjb25z
dCBTdHJpbmcmIGtleSwgY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBzaXplKQotewotICAg
IGF1dG8gZGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlV2l0aEJ5dGVzTm9Db3B5KGtDRkFsbG9j
YXRvckRlZmF1bHQsIGJ5dGVzLCBzaXplLCBrQ0ZBbGxvY2F0b3JOdWxsKSk7Ci0gICAgQ0ZEaWN0
aW9uYXJ5U2V0VmFsdWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXkuY3JlYXRlQ0ZTdHJp
bmcoKS5nZXQoKSwgZGF0YS5nZXQoKSk7Ci19Ci0KLXZvaWQgS2V5ZWRFbmNvZGVyOjplbmNvZGVC
b29sKGNvbnN0IFN0cmluZyYga2V5LCBib29sIHZhbHVlKQotewotICAgIENGRGljdGlvbmFyeVNl
dFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0
KCksIHZhbHVlID8ga0NGQm9vbGVhblRydWUgOiBrQ0ZCb29sZWFuRmFsc2UpOwotfQotCi12b2lk
IEtleWVkRW5jb2Rlcjo6ZW5jb2RlVUludDMyKGNvbnN0IFN0cmluZyYga2V5LCB1aW50MzJfdCB2
YWx1ZSkKLXsKLSAgICBhdXRvIG51bWJlciA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxs
b2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyU0ludDMyVHlwZSwgJnZhbHVlKSk7Ci0gICAgQ0ZEaWN0
aW9uYXJ5U2V0VmFsdWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXkuY3JlYXRlQ0ZTdHJp
bmcoKS5nZXQoKSwgbnVtYmVyLmdldCgpKTsKLX0KLQotdm9pZCBLZXllZEVuY29kZXI6OmVuY29k
ZUludDMyKGNvbnN0IFN0cmluZyYga2V5LCBpbnQzMl90IHZhbHVlKQotewotICAgIGF1dG8gbnVt
YmVyID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1i
ZXJTSW50MzJUeXBlLCAmdmFsdWUpKTsKLSAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShtX2RpY3Rp
b25hcnlTdGFjay5sYXN0KCksIGtleS5jcmVhdGVDRlN0cmluZygpLmdldCgpLCBudW1iZXIuZ2V0
KCkpOwotfQotCi12b2lkIEtleWVkRW5jb2Rlcjo6ZW5jb2RlSW50NjQoY29uc3QgU3RyaW5nJiBr
ZXksIGludDY0X3QgdmFsdWUpCi17Ci0gICAgYXV0byBudW1iZXIgPSBhZG9wdENGKENGTnVtYmVy
Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlclNJbnQ2NFR5cGUsICZ2YWx1ZSkp
OwotICAgIENGRGljdGlvbmFyeVNldFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5
LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIG51bWJlci5nZXQoKSk7Ci19Ci0KLXZvaWQgS2V5ZWRF
bmNvZGVyOjplbmNvZGVGbG9hdChjb25zdCBTdHJpbmcmIGtleSwgZmxvYXQgdmFsdWUpCi17Ci0g
ICAgYXV0byBudW1iZXIgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1
bHQsIGtDRk51bWJlckZsb2F0VHlwZSwgJnZhbHVlKSk7Ci0gICAgQ0ZEaWN0aW9uYXJ5U2V0VmFs
dWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwg
bnVtYmVyLmdldCgpKTsKLX0KLQotdm9pZCBLZXllZEVuY29kZXI6OmVuY29kZURvdWJsZShjb25z
dCBTdHJpbmcmIGtleSwgZG91YmxlIHZhbHVlKQotewotICAgIGF1dG8gbnVtYmVyID0gYWRvcHRD
RihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJEb3VibGVUeXBl
LCAmdmFsdWUpKTsKLSAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShtX2RpY3Rpb25hcnlTdGFjay5s
YXN0KCksIGtleS5jcmVhdGVDRlN0cmluZygpLmdldCgpLCBudW1iZXIuZ2V0KCkpOwotfQotCi12
b2lkIEtleWVkRW5jb2Rlcjo6ZW5jb2RlU3RyaW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBT
dHJpbmcmIHZhbHVlKQotewotICAgIENGRGljdGlvbmFyeVNldFZhbHVlKG1fZGljdGlvbmFyeVN0
YWNrLmxhc3QoKSwga2V5LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIHZhbHVlLmNyZWF0ZUNGU3Ry
aW5nKCkuZ2V0KCkpOwotfQotCi12b2lkIEtleWVkRW5jb2Rlcjo6YmVnaW5PYmplY3QoY29uc3Qg
U3RyaW5nJiBrZXkpCi17Ci0gICAgYXV0byBkaWN0aW9uYXJ5ID0gY3JlYXRlRGljdGlvbmFyeSgp
OwotICAgIENGRGljdGlvbmFyeVNldFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5
LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIGRpY3Rpb25hcnkuZ2V0KCkpOwotCi0gICAgbV9kaWN0
aW9uYXJ5U3RhY2suYXBwZW5kKGRpY3Rpb25hcnkuZ2V0KCkpOwotfQotCi12b2lkIEtleWVkRW5j
b2Rlcjo6ZW5kT2JqZWN0KCkKLXsKLSAgICBtX2RpY3Rpb25hcnlTdGFjay5yZW1vdmVMYXN0KCk7
Ci19Ci0KLXZvaWQgS2V5ZWRFbmNvZGVyOjpiZWdpbkFycmF5KGNvbnN0IFN0cmluZyYga2V5KQot
ewotICAgIGF1dG8gYXJyYXkgPSBhZG9wdENGKENGQXJyYXlDcmVhdGVNdXRhYmxlKGtDRkFsbG9j
YXRvckRlZmF1bHQsIDAsICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpKTsKLSAgICBDRkRpY3Rpb25h
cnlTZXRWYWx1ZShtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCksIGtleS5jcmVhdGVDRlN0cmluZygp
LmdldCgpLCBhcnJheS5nZXQoKSk7Ci0KLSAgICBtX2FycmF5U3RhY2suYXBwZW5kKGFycmF5Lmdl
dCgpKTsKLX0KLQotdm9pZCBLZXllZEVuY29kZXI6OmJlZ2luQXJyYXlFbGVtZW50KCkKLXsKLSAg
ICBhdXRvIGRpY3Rpb25hcnkgPSBjcmVhdGVEaWN0aW9uYXJ5KCk7Ci0gICAgQ0ZBcnJheUFwcGVu
ZFZhbHVlKG1fYXJyYXlTdGFjay5sYXN0KCksIGRpY3Rpb25hcnkuZ2V0KCkpOwotCi0gICAgbV9k
aWN0aW9uYXJ5U3RhY2suYXBwZW5kKGRpY3Rpb25hcnkuZ2V0KCkpOwotfQotCi12b2lkIEtleWVk
RW5jb2Rlcjo6ZW5kQXJyYXlFbGVtZW50KCkKLXsKLSAgICBtX2RpY3Rpb25hcnlTdGFjay5yZW1v
dmVMYXN0KCk7Ci19Ci0KLXZvaWQgS2V5ZWRFbmNvZGVyOjplbmRBcnJheSgpCi17Ci0gICAgbV9h
cnJheVN0YWNrLnJlbW92ZUxhc3QoKTsKLX0KLQotUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IEtl
eWVkRW5jb2Rlcjo6ZmluaXNoRW5jb2RpbmcoKQotewotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+
IGRhdGEgPSBhZG9wdENGKENGUHJvcGVydHlMaXN0Q3JlYXRlRGF0YShrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCBtX3Jvb3REaWN0aW9uYXJ5LmdldCgpLCBrQ0ZQcm9wZXJ0eUxpc3RCaW5hcnlGb3JtYXRf
djFfMCwgMCwgbnVsbHB0cikpOwotICAgIGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjp3cmFwQ0ZEYXRhKGRhdGEuZ2V0KCkpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9jZi9LZXllZEVuY29kZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9jZi9LZXllZEVu
Y29kZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBjYTNiZi4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2YvS2V5ZWRFbmNvZGVyLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBLZXllZEVuY29kZXJfaAot
I2RlZmluZSBLZXllZEVuY29kZXJfaAotCi0jaW5jbHVkZSA8V2ViQ29yZS9LZXllZENvZGluZy5o
PgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0K
LW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBLZXllZEVuY29kZXIgZmluYWwgOiBwdWJsaWMg
V2ViQ29yZTo6S2V5ZWRFbmNvZGVyIHsKLXB1YmxpYzoKLSAgICBLZXllZEVuY29kZXIoKTsKLSAg
ICB+S2V5ZWRFbmNvZGVyKCk7Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hh
cmVkQnVmZmVyPiBmaW5pc2hFbmNvZGluZygpIG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIHZp
cnR1YWwgdm9pZCBlbmNvZGVCeXRlcyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgdWludDhfdCos
IHNpemVfdCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGVuY29kZUJvb2woY29uc3QgU3Ry
aW5nJiBrZXksIGJvb2wpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVVSW50MzIo
Y29uc3QgU3RyaW5nJiBrZXksIHVpbnQzMl90KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZW5jb2RlSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIGludDMyX3QpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBlbmNvZGVJbnQ2NChjb25zdCBTdHJpbmcmIGtleSwgaW50NjRfdCkgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCB2b2lkIGVuY29kZUZsb2F0KGNvbnN0IFN0cmluZyYga2V5LCBmbG9h
dCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGVuY29kZURvdWJsZShjb25zdCBTdHJpbmcm
IGtleSwgZG91YmxlKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlU3RyaW5nKGNv
bnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwg
dm9pZCBiZWdpbk9iamVjdChjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCB2b2lkIGVuZE9iamVjdCgpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIGJlZ2luQXJy
YXkoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBiZWdpbkFy
cmF5RWxlbWVudCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBlbmRBcnJheUVsZW1lbnQo
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5kQXJyYXkoKSBvdmVycmlkZTsKLQotICAg
IFJldGFpblB0cjxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPiBtX3Jvb3REaWN0aW9uYXJ5OwotCi0g
ICAgVmVjdG9yPENGTXV0YWJsZURpY3Rpb25hcnlSZWYsIDE2PiBtX2RpY3Rpb25hcnlTdGFjazsK
LSAgICBWZWN0b3I8Q0ZNdXRhYmxlQXJyYXlSZWYsIDE2PiBtX2FycmF5U3RhY2s7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEtleWVkRW5jb2Rlcl9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ2xpYi9LZXllZERlY29kZXIuY3BwIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL2dsaWIvS2V5ZWREZWNvZGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggM2QyMGQ5MC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Z2xpYi9LZXllZERlY29kZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTY4ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIktleWVkRGVjb2Rlci5oIgotCi0jaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotS2V5ZWREZWNvZGVyOjpLZXll
ZERlY29kZXIoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCi17Ci0gICAgR1JlZlB0
cjxHQnl0ZXM+IGJ5dGVzID0gYWRvcHRHUmVmKGdfYnl0ZXNfbmV3KGRhdGEsIHNpemUpKTsKLSAg
ICBHUmVmUHRyPEdWYXJpYW50PiB2YXJpYW50ID0gZ192YXJpYW50X25ld19mcm9tX2J5dGVzKEdf
VkFSSUFOVF9UWVBFKCJhe3N2fSIpLCBieXRlcy5nZXQoKSwgVFJVRSk7Ci0gICAgbV9kaWN0aW9u
YXJ5U3RhY2suYXBwZW5kKGRpY3Rpb25hcnlGcm9tR1ZhcmlhbnQodmFyaWFudC5nZXQoKSkpOwot
fQotCi1LZXllZERlY29kZXI6On5LZXllZERlY29kZXIoKQotewotICAgIEFTU0VSVChtX2RpY3Rp
b25hcnlTdGFjay5zaXplKCkgPT0gMSk7Ci0gICAgQVNTRVJUKG1fYXJyYXlTdGFjay5pc0VtcHR5
KCkpOwotICAgIEFTU0VSVChtX2FycmF5SW5kZXhTdGFjay5pc0VtcHR5KCkpOwotfQotCi1IYXNo
TWFwPFN0cmluZywgR1JlZlB0cjxHVmFyaWFudD4+IEtleWVkRGVjb2Rlcjo6ZGljdGlvbmFyeUZy
b21HVmFyaWFudChHVmFyaWFudCogdmFyaWFudCkKLXsKLSAgICBIYXNoTWFwPFN0cmluZywgR1Jl
ZlB0cjxHVmFyaWFudD4+IGRpY3Rpb25hcnk7Ci0gICAgR1ZhcmlhbnRJdGVyIGl0ZXI7Ci0gICAg
Z192YXJpYW50X2l0ZXJfaW5pdCgmaXRlciwgdmFyaWFudCk7Ci0gICAgY29uc3QgY2hhcioga2V5
OwotICAgIEdWYXJpYW50KiB2YWx1ZTsKLSAgICB3aGlsZSAoZ192YXJpYW50X2l0ZXJfbG9vcCgm
aXRlciwgInsmc3Z9IiwgJmtleSwgJnZhbHVlKSkKLSAgICAgICAgZGljdGlvbmFyeS5zZXQoU3Ry
aW5nOjpmcm9tVVRGOChrZXkpLCB2YWx1ZSk7Ci0gICAgcmV0dXJuIFdURjo6bW92ZShkaWN0aW9u
YXJ5KTsKLX0KLQotYm9vbCBLZXllZERlY29kZXI6OmRlY29kZUJ5dGVzKGNvbnN0IFN0cmluZyYg
a2V5LCBjb25zdCB1aW50OF90KiYgYnl0ZXMsIHNpemVfdCYgc2l6ZSkKLXsKLSAgICBHUmVmUHRy
PEdWYXJpYW50PiB2YWx1ZSA9IG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKS5nZXQoa2V5KTsKLSAg
ICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzaXplID0gZ192YXJp
YW50X2dldF9zaXplKHZhbHVlLmdldCgpKTsKLSAgICBieXRlcyA9IHN0YXRpY19jYXN0PGNvbnN0
IHVpbnQ4X3QqPihnX3ZhcmlhbnRfZ2V0X2RhdGEodmFsdWUuZ2V0KCkpKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRj4KLWJvb2wgS2V5ZWRE
ZWNvZGVyOjpkZWNvZGVTaW1wbGVWYWx1ZShjb25zdCBTdHJpbmcmIGtleSwgVCYgcmVzdWx0LCBG
IGdldEZ1bmN0aW9uKQotewotICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhbHVlID0gbV9kaWN0aW9u
YXJ5U3RhY2subGFzdCgpLmdldChrZXkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIHJlc3VsdCA9IGdldEZ1bmN0aW9uKHZhbHVlLmdldCgpKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBLZXllZERlY29kZXI6OmRlY29kZUJvb2woY29uc3QgU3Ry
aW5nJiBrZXksIGJvb2wmIHJlc3VsdCkKLXsKLSAgICByZXR1cm4gZGVjb2RlU2ltcGxlVmFsdWUo
a2V5LCByZXN1bHQsIGdfdmFyaWFudF9nZXRfYm9vbGVhbik7Ci19Ci0KLWJvb2wgS2V5ZWREZWNv
ZGVyOjpkZWNvZGVVSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIHVpbnQzMl90JiByZXN1bHQpCi17
Ci0gICAgcmV0dXJuIGRlY29kZVNpbXBsZVZhbHVlKGtleSwgcmVzdWx0LCBnX3ZhcmlhbnRfZ2V0
X3VpbnQzMik7Ci19Ci0KLWJvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVJbnQzMihjb25zdCBTdHJp
bmcmIGtleSwgaW50MzJfdCYgcmVzdWx0KQotewotICAgIHJldHVybiBkZWNvZGVTaW1wbGVWYWx1
ZShrZXksIHJlc3VsdCwgZ192YXJpYW50X2dldF9pbnQzMik7Ci19Ci0KLWJvb2wgS2V5ZWREZWNv
ZGVyOjpkZWNvZGVJbnQ2NChjb25zdCBTdHJpbmcmIGtleSwgaW50NjRfdCYgcmVzdWx0KQotewot
ICAgIHJldHVybiBkZWNvZGVTaW1wbGVWYWx1ZShrZXksIHJlc3VsdCwgZ192YXJpYW50X2dldF9p
bnQ2NCk7Ci19Ci0KLWJvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVGbG9hdChjb25zdCBTdHJpbmcm
IGtleSwgZmxvYXQmIHJlc3VsdCkKLXsKLSAgICByZXR1cm4gZGVjb2RlU2ltcGxlVmFsdWUoa2V5
LCByZXN1bHQsIGdfdmFyaWFudF9nZXRfZG91YmxlKTsKLX0KLQotYm9vbCBLZXllZERlY29kZXI6
OmRlY29kZURvdWJsZShjb25zdCBTdHJpbmcmIGtleSwgZG91YmxlJiByZXN1bHQpCi17Ci0gICAg
cmV0dXJuIGRlY29kZVNpbXBsZVZhbHVlKGtleSwgcmVzdWx0LCBnX3ZhcmlhbnRfZ2V0X2RvdWJs
ZSk7Ci19Ci0KLWJvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBr
ZXksIFN0cmluZyYgcmVzdWx0KQotewotICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhbHVlID0gbV9k
aWN0aW9uYXJ5U3RhY2subGFzdCgpLmdldChrZXkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIHJlc3VsdCA9IFN0cmluZzo6ZnJvbVVURjgoZ192YXJpYW50
X2dldF9zdHJpbmcodmFsdWUuZ2V0KCksIG51bGxwdHIpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBLZXllZERlY29kZXI6OmJlZ2luT2JqZWN0KGNvbnN0IFN0cmluZyYga2V5KQotewot
ICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhbHVlID0gbV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLmdl
dChrZXkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1f
ZGljdGlvbmFyeVN0YWNrLmFwcGVuZChkaWN0aW9uYXJ5RnJvbUdWYXJpYW50KHZhbHVlLmdldCgp
KSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgS2V5ZWREZWNvZGVyOjplbmRPYmplY3Qo
KQotewotICAgIG1fZGljdGlvbmFyeVN0YWNrLnJlbW92ZUxhc3QoKTsKLX0KLQotYm9vbCBLZXll
ZERlY29kZXI6OmJlZ2luQXJyYXkoY29uc3QgU3RyaW5nJiBrZXkpCi17Ci0gICAgR1JlZlB0cjxH
VmFyaWFudD4gdmFsdWUgPSBtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCkuZ2V0KGtleSk7Ci0gICAg
aWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9hcnJheVN0YWNrLmFw
cGVuZCh2YWx1ZS5nZXQoKSk7Ci0gICAgbV9hcnJheUluZGV4U3RhY2suYXBwZW5kKDApOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIEtleWVkRGVjb2Rlcjo6YmVnaW5BcnJheUVsZW1lbnQo
KQotewotICAgIGlmIChtX2FycmF5SW5kZXhTdGFjay5sYXN0KCkgPj0gZ192YXJpYW50X25fY2hp
bGRyZW4obV9hcnJheVN0YWNrLmxhc3QoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IEdSZWZQdHI8R1ZhcmlhbnQ+IHZhcmlhbnQgPSBhZG9wdEdSZWYoZ192YXJpYW50X2dldF9jaGls
ZF92YWx1ZShtX2FycmF5U3RhY2subGFzdCgpLCBtX2FycmF5SW5kZXhTdGFjay5sYXN0KCkrKykp
OwotICAgIG1fZGljdGlvbmFyeVN0YWNrLmFwcGVuZChkaWN0aW9uYXJ5RnJvbUdWYXJpYW50KHZh
cmlhbnQuZ2V0KCkpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBLZXllZERlY29kZXI6
OmVuZEFycmF5RWxlbWVudCgpCi17Ci0gICAgbV9kaWN0aW9uYXJ5U3RhY2sucmVtb3ZlTGFzdCgp
OwotfQotCi12b2lkIEtleWVkRGVjb2Rlcjo6ZW5kQXJyYXkoKQotewotICAgIG1fYXJyYXlTdGFj
ay5yZW1vdmVMYXN0KCk7Ci0gICAgbV9hcnJheUluZGV4U3RhY2sucmVtb3ZlTGFzdCgpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9nbGliL0tleWVkRGVjb2Rlci5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2dsaWIvS2V5ZWRE
ZWNvZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlYjFjNjEuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2dsaWIvS2V5ZWREZWNvZGVyLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IElnYWlhIFMu
TC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmbmRlZiBLZXllZERlY29kZXJfaAotI2RlZmluZSBLZXllZERlY29k
ZXJfaAotCi0jaW5jbHVkZSA8V2ViQ29yZS9LZXllZENvZGluZy5oPgotI2luY2x1ZGUgPGdsaWIu
aD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBLZXllZERlY29kZXIg
ZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6S2V5ZWREZWNvZGVyIHsKLXB1YmxpYzoKLSAgICBLZXll
ZERlY29kZXIoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90KTsKLSAgICB2aXJ0dWFsIH5LZXll
ZERlY29kZXIoKSBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGJvb2wgZGVjb2Rl
Qnl0ZXMoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IHVpbnQ4X3QqJiwgc2l6ZV90Jikgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCBib29sIGRlY29kZUJvb2woY29uc3QgU3RyaW5nJiBrZXksIGJvb2wm
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlVUludDMyKGNvbnN0IFN0cmluZyYg
a2V5LCB1aW50MzJfdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVJbnQzMihj
b25zdCBTdHJpbmcmIGtleSwgaW50MzJfdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBk
ZWNvZGVJbnQ2NChjb25zdCBTdHJpbmcmIGtleSwgaW50NjRfdCYpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgYm9vbCBkZWNvZGVGbG9hdChjb25zdCBTdHJpbmcmIGtleSwgZmxvYXQmKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlRG91YmxlKGNvbnN0IFN0cmluZyYga2V5LCBkb3Vi
bGUmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlU3RyaW5nKGNvbnN0IFN0cmlu
ZyYga2V5LCBTdHJpbmcmKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgYm9vbCBiZWdpbk9iamVj
dChjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGVuZE9iamVj
dCgpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCBib29sIGJlZ2luQXJyYXkoY29uc3QgU3RyaW5n
JiBrZXkpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBiZWdpbkFycmF5RWxlbWVudCgpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBlbmRBcnJheUVsZW1lbnQoKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZW5kQXJyYXkoKSBvdmVycmlkZTsKLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIEY+IGJvb2wgZGVjb2RlU2ltcGxlVmFsdWUoY29uc3QgU3RyaW5nJiBr
ZXksIFQmIHJlc3VsdCwgRiBnZXRGdW5jdGlvbik7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIEdSZWZQ
dHI8R1ZhcmlhbnQ+PiBkaWN0aW9uYXJ5RnJvbUdWYXJpYW50KEdWYXJpYW50Kik7Ci0KLSAgICBW
ZWN0b3I8SGFzaE1hcDxTdHJpbmcsIEdSZWZQdHI8R1ZhcmlhbnQ+Pj4gbV9kaWN0aW9uYXJ5U3Rh
Y2s7Ci0gICAgVmVjdG9yPEdWYXJpYW50KiwgMTY+IG1fYXJyYXlTdGFjazsKLSAgICBWZWN0b3I8
dW5zaWduZWQ+IG1fYXJyYXlJbmRleFN0YWNrOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
Ci0KLSNlbmRpZiAvLyBLZXllZERlY29kZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
U2hhcmVkL2dsaWIvS2V5ZWRFbmNvZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9nbGli
L0tleWVkRW5jb2Rlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjZGZkOGQu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2dsaWIvS2V5ZWRFbmNvZGVyLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDEzNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE1IElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJLZXllZEVuY29kZXIuaCIKLQotI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLUtleWVkRW5jb2Rlcjo6S2V5ZWRFbmNvZGVyKCkKLXsK
LSAgICBnX3ZhcmlhbnRfYnVpbGRlcl9pbml0KCZtX3ZhcmlhbnRCdWlsZGVyLCBHX1ZBUklBTlRf
VFlQRSgiYXtzdn0iKSk7Ci0gICAgbV92YXJpYW50QnVpbGRlclN0YWNrLmFwcGVuZCgmbV92YXJp
YW50QnVpbGRlcik7Ci19Ci0KLUtleWVkRW5jb2Rlcjo6fktleWVkRW5jb2RlcigpCi17Ci0gICAg
QVNTRVJUKG1fdmFyaWFudEJ1aWxkZXJTdGFjay5zaXplKCkgPT0gMSk7Ci0gICAgQVNTRVJUKG1f
dmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCkgPT0gJm1fdmFyaWFudEJ1aWxkZXIpOwotICAgIEFT
U0VSVChtX2FycmF5U3RhY2suaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQobV9vYmplY3RTdGFjay5p
c0VtcHR5KCkpOwotfQotCi12b2lkIEtleWVkRW5jb2Rlcjo6ZW5jb2RlQnl0ZXMoY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBHUmVm
UHRyPEdCeXRlcz4gZ0J5dGVzID0gYWRvcHRHUmVmKGdfYnl0ZXNfbmV3X3N0YXRpYyhieXRlcywg
c2l6ZSkpOwotICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChtX3ZhcmlhbnRCdWlsZGVyU3RhY2su
bGFzdCgpLCAie3N2fSIsIGtleS51dGY4KCkuZGF0YSgpLCBnX3ZhcmlhbnRfbmV3X2Zyb21fYnl0
ZXMoR19WQVJJQU5UX1RZUEUoImF5IiksIGdCeXRlcy5nZXQoKSwgVFJVRSkpOwotfQotCi12b2lk
IEtleWVkRW5jb2Rlcjo6ZW5jb2RlQm9vbChjb25zdCBTdHJpbmcmIGtleSwgYm9vbCB2YWx1ZSkK
LXsKLSAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQobV92YXJpYW50QnVpbGRlclN0YWNrLmxhc3Qo
KSwgIntzdn0iLCBrZXkudXRmOCgpLmRhdGEoKSwgZ192YXJpYW50X25ld19ib29sZWFuKHZhbHVl
KSk7Ci19Ci0KLXZvaWQgS2V5ZWRFbmNvZGVyOjplbmNvZGVVSW50MzIoY29uc3QgU3RyaW5nJiBr
ZXksIHVpbnQzMl90IHZhbHVlKQotewotICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChtX3Zhcmlh
bnRCdWlsZGVyU3RhY2subGFzdCgpLCAie3N2fSIsIGtleS51dGY4KCkuZGF0YSgpLCBnX3Zhcmlh
bnRfbmV3X3VpbnQzMih2YWx1ZSkpOwotfQotCi12b2lkIEtleWVkRW5jb2Rlcjo6ZW5jb2RlSW50
MzIoY29uc3QgU3RyaW5nJiBrZXksIGludDMyX3QgdmFsdWUpCi17Ci0gICAgZ192YXJpYW50X2J1
aWxkZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCksICJ7c3Z9Iiwga2V5LnV0Zjgo
KS5kYXRhKCksIGdfdmFyaWFudF9uZXdfaW50MzIodmFsdWUpKTsKLX0KLQotdm9pZCBLZXllZEVu
Y29kZXI6OmVuY29kZUludDY0KGNvbnN0IFN0cmluZyYga2V5LCBpbnQ2NF90IHZhbHVlKQotewot
ICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChtX3ZhcmlhbnRCdWlsZGVyU3RhY2subGFzdCgpLCAi
e3N2fSIsIGtleS51dGY4KCkuZGF0YSgpLCBnX3ZhcmlhbnRfbmV3X2ludDY0KHZhbHVlKSk7Ci19
Ci0KLXZvaWQgS2V5ZWRFbmNvZGVyOjplbmNvZGVGbG9hdChjb25zdCBTdHJpbmcmIGtleSwgZmxv
YXQgdmFsdWUpCi17Ci0gICAgZW5jb2RlRG91YmxlKGtleSwgdmFsdWUpOwotfQotCi12b2lkIEtl
eWVkRW5jb2Rlcjo6ZW5jb2RlRG91YmxlKGNvbnN0IFN0cmluZyYga2V5LCBkb3VibGUgdmFsdWUp
Ci17Ci0gICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0
KCksICJ7c3Z9Iiwga2V5LnV0ZjgoKS5kYXRhKCksIGdfdmFyaWFudF9uZXdfZG91YmxlKHZhbHVl
KSk7Ci19Ci0KLXZvaWQgS2V5ZWRFbmNvZGVyOjplbmNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBr
ZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKG1f
dmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCksICJ7c3Z9Iiwga2V5LnV0ZjgoKS5kYXRhKCksIGdf
dmFyaWFudF9uZXdfc3RyaW5nKHZhbHVlLnV0ZjgoKS5kYXRhKCkpKTsKLX0KLQotdm9pZCBLZXll
ZEVuY29kZXI6OmJlZ2luT2JqZWN0KGNvbnN0IFN0cmluZyYga2V5KQotewotICAgIEdSZWZQdHI8
R1ZhcmlhbnRCdWlsZGVyPiBidWlsZGVyID0gYWRvcHRHUmVmKGdfdmFyaWFudF9idWlsZGVyX25l
dyhHX1ZBUklBTlRfVFlQRSgiYWF7c3Z9IikpKTsKLSAgICBtX29iamVjdFN0YWNrLmFwcGVuZChz
dGQ6Om1ha2VfcGFpcihrZXksIGJ1aWxkZXIpKTsKLSAgICBtX3ZhcmlhbnRCdWlsZGVyU3RhY2su
YXBwZW5kKGJ1aWxkZXIuZ2V0KCkpOwotfQotCi12b2lkIEtleWVkRW5jb2Rlcjo6ZW5kT2JqZWN0
KCkKLXsKLSAgICBHVmFyaWFudEJ1aWxkZXIqIGJ1aWxkZXIgPSBtX3ZhcmlhbnRCdWlsZGVyU3Rh
Y2sudGFrZUxhc3QoKTsKLSAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQobV92YXJpYW50QnVpbGRl
clN0YWNrLmxhc3QoKSwgIntzdn0iLCBtX29iamVjdFN0YWNrLmxhc3QoKS5maXJzdC51dGY4KCku
ZGF0YSgpLCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQoYnVpbGRlcikpOwotICAgIG1fb2JqZWN0U3Rh
Y2sucmVtb3ZlTGFzdCgpOwotfQotCi12b2lkIEtleWVkRW5jb2Rlcjo6YmVnaW5BcnJheShjb25z
dCBTdHJpbmcmIGtleSkKLXsKLSAgICBtX2FycmF5U3RhY2suYXBwZW5kKHN0ZDo6bWFrZV9wYWly
KGtleSwgYWRvcHRHUmVmKGdfdmFyaWFudF9idWlsZGVyX25ldyhHX1ZBUklBTlRfVFlQRSgiYWF7
c3Z9IikpKSkpOwotfQotCi12b2lkIEtleWVkRW5jb2Rlcjo6YmVnaW5BcnJheUVsZW1lbnQoKQot
ewotICAgIG1fdmFyaWFudEJ1aWxkZXJTdGFjay5hcHBlbmQoZ192YXJpYW50X2J1aWxkZXJfbmV3
KEdfVkFSSUFOVF9UWVBFKCJhe3N2fSIpKSk7Ci19Ci0KLXZvaWQgS2V5ZWRFbmNvZGVyOjplbmRB
cnJheUVsZW1lbnQoKQotewotICAgIEdSZWZQdHI8R1ZhcmlhbnRCdWlsZGVyPiB2YXJpYW50QnVp
bGRlciA9IGFkb3B0R1JlZihtX3ZhcmlhbnRCdWlsZGVyU3RhY2sudGFrZUxhc3QoKSk7Ci0gICAg
Z192YXJpYW50X2J1aWxkZXJfYWRkX3ZhbHVlKG1fYXJyYXlTdGFjay5sYXN0KCkuc2Vjb25kLmdl
dCgpLCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQodmFyaWFudEJ1aWxkZXIuZ2V0KCkpKTsKLX0KLQot
dm9pZCBLZXllZEVuY29kZXI6OmVuZEFycmF5KCkKLXsKLSAgICBnX3ZhcmlhbnRfYnVpbGRlcl9h
ZGQobV92YXJpYW50QnVpbGRlclN0YWNrLmxhc3QoKSwgIntzdn0iLCBtX2FycmF5U3RhY2subGFz
dCgpLmZpcnN0LnV0ZjgoKS5kYXRhKCksIGdfdmFyaWFudF9idWlsZGVyX2VuZChtX2FycmF5U3Rh
Y2subGFzdCgpLnNlY29uZC5nZXQoKSkpOwotICAgIG1fYXJyYXlTdGFjay5yZW1vdmVMYXN0KCk7
Ci19Ci0KLVBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBLZXllZEVuY29kZXI6OmZpbmlzaEVuY29k
aW5nKCkKLXsKLSAgICBnX2Fzc2VydChtX3ZhcmlhbnRCdWlsZGVyU3RhY2subGFzdCgpID09ICZt
X3ZhcmlhbnRCdWlsZGVyKTsKLSAgICBHUmVmUHRyPEdWYXJpYW50PiB2YXJpYW50ID0gZ192YXJp
YW50X2J1aWxkZXJfZW5kKCZtX3ZhcmlhbnRCdWlsZGVyKTsKLSAgICBHUmVmUHRyPEdCeXRlcz4g
ZGF0YSA9IGdfdmFyaWFudF9nZXRfZGF0YV9hc19ieXRlcyh2YXJpYW50LmdldCgpKTsKLSAgICBy
ZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hh
cio+KGdfYnl0ZXNfZ2V0X2RhdGEoZGF0YS5nZXQoKSwgbnVsbHB0cikpLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oZ19ieXRlc19nZXRfc2l6ZShkYXRhLmdldCgpKSkpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9nbGliL0tleWVk
RW5jb2Rlci5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2dsaWIvS2V5ZWRFbmNvZGVyLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjYmI3NmIuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdDIvU2hhcmVkL2dsaWIvS2V5ZWRFbmNvZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3
MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgS2V5ZWRFbmNvZGVyX2gKLSNkZWZpbmUgS2V5ZWRFbmNvZGVyX2gKLQotI2lu
Y2x1ZGUgPFdlYkNvcmUvS2V5ZWRDb2RpbmcuaD4KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIEtl
eWVkRW5jb2RlciBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpLZXllZEVuY29kZXIgewotcHVibGlj
OgotICAgIEtleWVkRW5jb2RlcigpOwotICAgIH5LZXllZEVuY29kZXIoKTsKLQotICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IGZpbmlzaEVuY29kaW5nKCkgb3Zl
cnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIGVuY29kZUJ5dGVzKGNvbnN0IFN0
cmluZyYga2V5LCBjb25zdCB1aW50OF90Kiwgc2l6ZV90KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IHZvaWQgZW5jb2RlQm9vbChjb25zdCBTdHJpbmcmIGtleSwgYm9vbCkgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIGVuY29kZVVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgdWludDMyX3QpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwg
aW50MzJfdCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGVuY29kZUludDY0KGNvbnN0IFN0
cmluZyYga2V5LCBpbnQ2NF90KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlRmxv
YXQoY29uc3QgU3RyaW5nJiBrZXksIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZW5jb2RlRG91YmxlKGNvbnN0IFN0cmluZyYga2V5LCBkb3VibGUpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBlbmNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYp
IG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIGJlZ2luT2JqZWN0KGNvbnN0IFN0cmluZyYg
a2V5KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5kT2JqZWN0KCkgb3ZlcnJpZGU7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5BcnJheShjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCB2b2lkIGJlZ2luQXJyYXlFbGVtZW50KCkgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCB2b2lkIGVuZEFycmF5RWxlbWVudCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBl
bmRBcnJheSgpIG92ZXJyaWRlOwotCi0gICAgR1ZhcmlhbnRCdWlsZGVyIG1fdmFyaWFudEJ1aWxk
ZXI7Ci0gICAgVmVjdG9yPEdWYXJpYW50QnVpbGRlciosIDE2PiBtX3ZhcmlhbnRCdWlsZGVyU3Rh
Y2s7Ci0gICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIEdSZWZQdHI8R1ZhcmlhbnRCdWlsZGVy
Pj4sIDE2PiBtX2FycmF5U3RhY2s7Ci0gICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIEdSZWZQ
dHI8R1ZhcmlhbnRCdWlsZGVyPj4sIDE2PiBtX29iamVjdFN0YWNrOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBLZXllZEVuY29kZXJfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dl
YktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDE0ZDYwMmYuLjFk
NDI5NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTQ2Miw4ICs0NjIsNiBAQAogCQkxQUUwMEQ0QzE4MkQ2RUIwMDAwODdERDcg
LyogV0tCcm93c2luZ0NvbnRleHRIYW5kbGUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQUUwMEQ0QTE4MkQ2RUIwMDAwODdERDcgLyogV0tCcm93c2lu
Z0NvbnRleHRIYW5kbGUubW0gKi87IH07CiAJCTFBRTAwRDREMTgyRDZFQjAwMDA4N0RENyAvKiBX
S0Jyb3dzaW5nQ29udGV4dEhhbmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUFFMDBENEIxODJENkVCMDAwMDg3REQ3IC8qIFdLQnJvd3NpbmdDb250
ZXh0SGFuZGxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMUFFMDBENEYxODJENkY1MDAwMDg3REQ3IC8qIFdLQnJvd3NpbmdDb250ZXh0SGFuZGxl
SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFBRTAwRDRFMTgyRDZGNTAwMDA4N0RENyAvKiBXS0Jyb3dzaW5nQ29udGV4dEhhbmRsZUludGVy
bmFsLmggKi87IH07Ci0JCTFBRTAwRDVDMTgyREFERTEwMDA4N0RENyAvKiBLZXllZEVuY29kZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFFMDBE
NUExODJEQURFMTAwMDg3REQ3IC8qIEtleWVkRW5jb2Rlci5jcHAgKi87IH07Ci0JCTFBRTAwRDVE
MTgyREFERTEwMDA4N0RENyAvKiBLZXllZEVuY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRTAwRDVCMTgyREFERTEwMDA4N0RENyAvKiBLZXll
ZEVuY29kZXIuaCAqLzsgfTsKIAkJMUFFMDBENjAxODMxNzkyMTAwMDg3REQ3IC8qIEZyYW1lTG9h
ZFN0YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFBRTAwRDVFMTgzMTc5MjEwMDA4N0RENyAvKiBGcmFtZUxvYWRTdGF0ZS5jcHAgKi87IH07CiAJ
CTFBRTAwRDYxMTgzMTc5MjEwMDA4N0RENyAvKiBGcmFtZUxvYWRTdGF0ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFFMDBENUYxODMxNzkyMTAwMDg3
REQ3IC8qIEZyYW1lTG9hZFN0YXRlLmggKi87IH07CiAJCTFBRTAwRDZCMTgzMjdDMTIwMDA4N0RE
NyAvKiBTdHJpbmdSZWZlcmVuY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUFFMDBENjkxODMyN0MxMjAwMDg3REQ3IC8qIFN0cmluZ1JlZmVyZW5j
ZS5jcHAgKi87IH07CkBAIC05NDcsOCArOTQ1LDYgQEAKIAkJNTE4MzQ1OTMxMzQ1MzJFOTAwOTJC
Njk2IC8qIFdlYkljb25EYXRhYmFzZUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTE4MzQ1OTExMzQ1MzJFODAwOTJCNjk2IC8qIFdlYkljb25E
YXRhYmFzZUNsaWVudC5oICovOyB9OwogCQk1MTgzNTNEQTE4ODVCRjhDMDBEOUZFNDQgLyogSURC
U2VyaWFsaXphdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MTgzNTNEODE4ODVCRjhDMDBEOUZFNDQgLyogSURCU2VyaWFsaXphdGlvbi5jcHAg
Ki87IH07CiAJCTUxODM1M0RCMTg4NUJGOEMwMEQ5RkU0NCAvKiBJREJTZXJpYWxpemF0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTgzNTNEOTE4
ODVCRjhDMDBEOUZFNDQgLyogSURCU2VyaWFsaXphdGlvbi5oICovOyB9OwotCQk1MTgzNTNERTE4
ODcxMjhCMDBEOUZFNDQgLyogS2V5ZWREZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxODM1M0RDMTg4NzEyOEIwMEQ5RkU0NCAvKiBLZXll
ZERlY29kZXIuY3BwICovOyB9OwotCQk1MTgzNTNERjE4ODcxMjhCMDBEOUZFNDQgLyogS2V5ZWRE
ZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTgzNTNERDE4ODcxMjhCMDBEOUZFNDQgLyogS2V5ZWREZWNvZGVyLmggKi87IH07CiAJCTUxODNE
REVDMTYzMEJERkMwMDhCRTVDNyAvKiBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwNUIwRDQxNjJGN0E3
QTAwRTI3NzA5IC8qIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5jcHAgKi87IH07CiAJCTUxODcx
QjVCMTI3Q0I4OUQwMEY3NjIzMiAvKiBXZWJDb250ZXh0TWVudS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTg3MUI1OTEyN0NCODlEMDBGNzYyMzIg
LyogV2ViQ29udGV4dE1lbnUuY3BwICovOyB9OwogCQk1MTg3MUI1QzEyN0NCODlEMDBGNzYyMzIg
LyogV2ViQ29udGV4dE1lbnUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxODcxQjVBMTI3Q0I4OUQwMEY3NjIzMiAvKiBXZWJDb250ZXh0TWVudS5oICov
OyB9OwpAQCAtMjU4OCw4ICsyNTg0LDYgQEAKIAkJMUFFMDBENEExODJENkVCMDAwMDg3REQ3IC8q
IFdLQnJvd3NpbmdDb250ZXh0SGFuZGxlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gV0tCcm93c2luZ0NvbnRleHRIYW5kbGUubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFBRTAwRDRCMTgyRDZFQjAwMDA4N0RENyAvKiBXS0Jyb3dzaW5nQ29udGV4
dEhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0Jyb3dzaW5nQ29u
dGV4dEhhbmRsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUUwMEQ0RTE4MkQ2
RjUwMDAwODdERDcgLyogV0tCcm93c2luZ0NvbnRleHRIYW5kbGVJbnRlcm5hbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0Jyb3dzaW5nQ29udGV4dEhhbmRsZUludGVybmFs
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBRTAwRDVBMTgyREFERTEwMDA4N0RE
NyAvKiBLZXllZEVuY29kZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gS2V5ZWRFbmNvZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFFMDBE
NUIxODJEQURFMTAwMDg3REQ3IC8qIEtleWVkRW5jb2Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBLZXllZEVuY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMUFFMDBENUUxODMxNzkyMTAwMDg3REQ3IC8qIEZyYW1lTG9hZFN0YXRlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZyYW1lTG9hZFN0YXRlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFFMDBENUYxODMxNzkyMTAwMDg3REQ3IC8qIEZyYW1l
TG9hZFN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZyYW1lTG9hZFN0
YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBRTAwRDY5MTgzMjdDMTIwMDA4
N0RENyAvKiBTdHJpbmdSZWZlcmVuY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU3RyaW5nUmVmZXJlbmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTMxMTEsOCArMzEwNSw2IEBACiAJCTUxODM0NTkxMTM0NTMyRTgwMDkyQjY5NiAvKiBXZWJJ
Y29uRGF0YWJhc2VDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
SWNvbkRhdGFiYXNlQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxODM1
M0Q4MTg4NUJGOEMwMEQ5RkU0NCAvKiBJREJTZXJpYWxpemF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQlNlcmlhbGl6YXRpb24uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MTgzNTNEOTE4ODVCRjhDMDBEOUZFNDQgLyogSURCU2VyaWFs
aXphdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJTZXJpYWxpemF0
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxODM1M0RDMTg4NzEyOEIwMEQ5
RkU0NCAvKiBLZXllZERlY29kZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gS2V5ZWREZWNvZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE4
MzUzREQxODg3MTI4QjAwRDlGRTQ0IC8qIEtleWVkRGVjb2Rlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBLZXllZERlY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTE4M0IzOTMxMzc5Rjg1QzAwRTg3NTRFIC8qIFNoaW0ueGNjb25maWcgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gU2hpbS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTE4NEJDNEExMzJFOTA3QTAwNkI5RTI4IC8qIFdlYkljb25EYXRhYmFzZS5t
ZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJJY29uRGF0YWJhc2UubWVzc2Fn
ZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxODcxQjU5MTI3Q0I4OUQwMEY3
NjIzMiAvKiBXZWJDb250ZXh0TWVudS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXZWJDb250ZXh0TWVudS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC00ODcxLDEwICs0ODYzLDYgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTFBQUYwQzQ5MTJCMTYz
MzQwMDhFNDlFMiAvKiBBcmd1bWVudENvZGVyc0NGLmNwcCAqLywKIAkJCQkxQUFGMEM0ODEyQjE2
MzM0MDA4RTQ5RTIgLyogQXJndW1lbnRDb2RlcnNDRi5oICovLAotCQkJCTUxODM1M0RDMTg4NzEy
OEIwMEQ5RkU0NCAvKiBLZXllZERlY29kZXIuY3BwICovLAotCQkJCTUxODM1M0REMTg4NzEyOEIw
MEQ5RkU0NCAvKiBLZXllZERlY29kZXIuaCAqLywKLQkJCQkxQUUwMEQ1QTE4MkRBREUxMDAwODdE
RDcgLyogS2V5ZWRFbmNvZGVyLmNwcCAqLywKLQkJCQkxQUUwMEQ1QjE4MkRBREUxMDAwODdERDcg
LyogS2V5ZWRFbmNvZGVyLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGNmOwogCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKQEAgLTc2OTksOCArNzY4Nyw2IEBACiAJCQkJQzU4Q0RGMkExODg3NTQ4
QjAwODcxNTM2IC8qIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxQUU0OUE0OTExRkZBOENFMDA0OEI0NjQgLyogSlNOUE1ldGhvZC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUFFNDk4NzgxMUZGN0ZBQTAwNDhCNDY0IC8qIEpTTlBPYmplY3QuaCBp
biBIZWFkZXJzICovLAotCQkJCTUxODM1M0RGMTg4NzEyOEIwMEQ5RkU0NCAvKiBLZXllZERlY29k
ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTFBRTAwRDVEMTgyREFERTEwMDA4N0RENyAvKiBLZXll
ZEVuY29kZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTA5Mzc4MTRGQjEyOEMwMDExMzhEOSAv
KiBMYXllckhvc3RpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBDMzY1QTE4QzA1
NTU4MDBGNjA3RDcgLyogTGF5ZXJSZXByZXNlbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUE5MkRDMTExMkY4QkE0NjAwMTdBRjY1IC8qIExheWVyVHJlZUNvbnRleHQuaCBpbiBIZWFkZXJz
ICovLApAQCAtOTQ5Nyw4ICs5NDgzLDYgQEAKIAkJCQlDNThDREYyRDE4ODc2MDlGMDA4NzE1MzYg
LyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMUFFNDlBNEExMUZGQThDRTAwNDhCNDY0IC8qIEpTTlBNZXRob2QuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMUFFNDk4NzkxMUZGN0ZBQTAwNDhCNDY0IC8qIEpTTlBPYmplY3QuY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJNTE4MzUzREUxODg3MTI4QjAwRDlGRTQ0IC8qIEtleWVkRGVjb2Rlci5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQkxQUUwMEQ1QzE4MkRBREUxMDAwODdERDcgLyogS2V5ZWRF
bmNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRTA5Mzc3MTRGQjEyOEMwMDExMzhEOSAv
KiBMYXllckhvc3RpbmdDb250ZXh0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYwQzM2NUUxOEMx
MTBBNTAwRjYwN0Q3IC8qIExheWVyUmVwcmVzZW50YXRpb24ubW0gaW4gU291cmNlcyAqLywKIAkJ
CQkxQTkyREMxMzEyRjhCQUI5MDAxN0FGNjUgLyogTGF5ZXJUcmVlQ29udGV4dC5jcHAgaW4gU291
cmNlcyAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258503</attachid>
            <date>2015-08-07 08:26:16 -0700</date>
            <delta_ts>2015-08-07 08:31:53 -0700</delta_ts>
            <desc>Patch v3 - For review/landing</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>97769</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzMjgwNmJhLi43YTk1ZjNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTAz
IEBACisyMDE1LTA4LTA3ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAg
ICAgICBNb3ZlIGNvbmNyZXRlIEtleWVkRGVjb2Rlci9FbmNvZGVyIGltcGxlbWVudGF0aW9ucyB0
byBXZWJDb3JlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQ3NzU3LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6Cisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgICog
cGxhdGZvcm0vS2V5ZWRDb2RpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OktleWVkRGVjb2Rlcjo6
S2V5ZWREZWNvZGVyKTogU3RhdGljIGNvbnN0cnVjdG9yIHRvIGJlIGltcGxlbWVudGVkIHBlci1w
bGF0Zm9ybS4KKyAgICAgICAgKFdlYkNvcmU6OktleWVkRW5jb2Rlcjo6S2V5ZWRFbmNvZGVyKTog
RGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9jZi9LZXllZERlY29kZXJDRi5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2YvS2V5ZWREZWNvZGVyLmNwcC4KKyAgICAg
ICAgKFdlYkNvcmU6OktleWVkRGVjb2Rlcjo6ZGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpL
ZXllZERlY29kZXJDRjo6S2V5ZWREZWNvZGVyQ0YpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZWRE
ZWNvZGVyQ0Y6On5LZXllZERlY29kZXJDRik6CisgICAgICAgIChXZWJDb3JlOjpLZXllZERlY29k
ZXJDRjo6ZGVjb2RlQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZWREZWNvZGVyQ0Y6OmRl
Y29kZUJvb2wpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZWREZWNvZGVyQ0Y6OmRlY29kZVVJbnQz
Mik6CisgICAgICAgIChXZWJDb3JlOjpLZXllZERlY29kZXJDRjo6ZGVjb2RlSW50MzIpOgorICAg
ICAgICAoV2ViQ29yZTo6S2V5ZWREZWNvZGVyQ0Y6OmRlY29kZUludDY0KToKKyAgICAgICAgKFdl
YkNvcmU6OktleWVkRGVjb2RlckNGOjpkZWNvZGVGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpL
ZXllZERlY29kZXJDRjo6ZGVjb2RlRG91YmxlKToKKyAgICAgICAgKFdlYkNvcmU6OktleWVkRGVj
b2RlckNGOjpkZWNvZGVTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZWREZWNvZGVyQ0Y6
OmJlZ2luT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleWVkRGVjb2RlckNGOjplbmRPYmpl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZWREZWNvZGVyQ0Y6OmJlZ2luQXJyYXkpOgorICAg
ICAgICAoV2ViQ29yZTo6S2V5ZWREZWNvZGVyQ0Y6OmJlZ2luQXJyYXlFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OktleWVkRGVjb2RlckNGOjplbmRBcnJheUVsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6S2V5ZWREZWNvZGVyQ0Y6OmVuZEFycmF5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9j
Zi9LZXllZERlY29kZXJDRi5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvU2hhcmVkL2Nm
L0tleWVkRGVjb2Rlci5oLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9jZi9LZXllZEVu
Y29kZXJDRi5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2YvS2V5ZWRF
bmNvZGVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OktleWVkRW5jb2Rlcjo6ZW5jb2Rlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVEaWN0aW9uYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6Oktl
eWVkRW5jb2RlckNGOjpLZXllZEVuY29kZXJDRik6CisgICAgICAgIChXZWJDb3JlOjpLZXllZEVu
Y29kZXJDRjo6fktleWVkRW5jb2RlckNGKToKKyAgICAgICAgKFdlYkNvcmU6OktleWVkRW5jb2Rl
ckNGOjplbmNvZGVCeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpLZXllZEVuY29kZXJDRjo6ZW5j
b2RlQm9vbCk6CisgICAgICAgIChXZWJDb3JlOjpLZXllZEVuY29kZXJDRjo6ZW5jb2RlVUludDMy
KToKKyAgICAgICAgKFdlYkNvcmU6OktleWVkRW5jb2RlckNGOjplbmNvZGVJbnQzMik6CisgICAg
ICAgIChXZWJDb3JlOjpLZXllZEVuY29kZXJDRjo6ZW5jb2RlSW50NjQpOgorICAgICAgICAoV2Vi
Q29yZTo6S2V5ZWRFbmNvZGVyQ0Y6OmVuY29kZUZsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6Oktl
eWVkRW5jb2RlckNGOjplbmNvZGVEb3VibGUpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZWRFbmNv
ZGVyQ0Y6OmVuY29kZVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpLZXllZEVuY29kZXJDRjo6
YmVnaW5PYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZWRFbmNvZGVyQ0Y6OmVuZE9iamVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpLZXllZEVuY29kZXJDRjo6YmVnaW5BcnJheSk6CisgICAg
ICAgIChXZWJDb3JlOjpLZXllZEVuY29kZXJDRjo6YmVnaW5BcnJheUVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6S2V5ZWRFbmNvZGVyQ0Y6OmVuZEFycmF5RWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpLZXllZEVuY29kZXJDRjo6ZW5kQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6S2V5
ZWRFbmNvZGVyQ0Y6OmZpbmlzaEVuY29kaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jZi9LZXll
ZEVuY29kZXJDRi5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvU2hhcmVkL2NmL0tleWVk
RW5jb2Rlci5oLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9nbGliL0tleWVkRGVjb2Rl
ckdsaWIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvU2hhcmVkL2dsaWIvS2V5ZWRE
ZWNvZGVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OktleWVkRGVjb2Rlcjo6ZGVjb2Rlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpLZXllZERlY29kZXJHbGliOjpLZXllZERlY29kZXJHbGliKToKKyAg
ICAgICAgKFdlYkNvcmU6OktleWVkRGVjb2RlckdsaWI6On5LZXllZERlY29kZXJHbGliKToKKyAg
ICAgICAgKFdlYkNvcmU6OktleWVkRGVjb2RlckdsaWI6OmRpY3Rpb25hcnlGcm9tR1ZhcmlhbnQp
OgorICAgICAgICAoV2ViQ29yZTo6S2V5ZWREZWNvZGVyR2xpYjo6ZGVjb2RlQnl0ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6S2V5ZWREZWNvZGVyR2xpYjo6ZGVjb2RlU2ltcGxlVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6S2V5ZWREZWNvZGVyR2xpYjo6ZGVjb2RlQm9vbCk6CisgICAgICAgIChX
ZWJDb3JlOjpLZXllZERlY29kZXJHbGliOjpkZWNvZGVVSW50MzIpOgorICAgICAgICAoV2ViQ29y
ZTo6S2V5ZWREZWNvZGVyR2xpYjo6ZGVjb2RlSW50MzIpOgorICAgICAgICAoV2ViQ29yZTo6S2V5
ZWREZWNvZGVyR2xpYjo6ZGVjb2RlSW50NjQpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZWREZWNv
ZGVyR2xpYjo6ZGVjb2RlRmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZWREZWNvZGVyR2xp
Yjo6ZGVjb2RlRG91YmxlKToKKyAgICAgICAgKFdlYkNvcmU6OktleWVkRGVjb2RlckdsaWI6OmRl
Y29kZVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpLZXllZERlY29kZXJHbGliOjpiZWdpbk9i
amVjdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXllZERlY29kZXJHbGliOjplbmRPYmplY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6S2V5ZWREZWNvZGVyR2xpYjo6YmVnaW5BcnJheSk6CisgICAgICAg
IChXZWJDb3JlOjpLZXllZERlY29kZXJHbGliOjpiZWdpbkFycmF5RWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpLZXllZERlY29kZXJHbGliOjplbmRBcnJheUVsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6S2V5ZWREZWNvZGVyR2xpYjo6ZW5kQXJyYXkpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dsaWIvS2V5ZWREZWNvZGVyR2xpYi5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvU2hh
cmVkL2dsaWIvS2V5ZWREZWNvZGVyLmguCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2ds
aWIvS2V5ZWRFbmNvZGVyR2xpYi5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvZ2xpYi9LZXllZEVuY29kZXIuY3BwLgorICAgICAgICAoV2ViQ29yZTo6S2V5ZWRFbmNvZGVy
OjplbmNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OktleWVkRW5jb2RlckdsaWI6OktleWVkRW5j
b2RlckdsaWIpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZWRFbmNvZGVyR2xpYjo6fktleWVkRW5j
b2RlckdsaWIpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZWRFbmNvZGVyR2xpYjo6ZW5jb2RlQnl0
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZWRFbmNvZGVyR2xpYjo6ZW5jb2RlQm9vbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpLZXllZEVuY29kZXJHbGliOjplbmNvZGVVSW50MzIpOgorICAgICAg
ICAoV2ViQ29yZTo6S2V5ZWRFbmNvZGVyR2xpYjo6ZW5jb2RlSW50MzIpOgorICAgICAgICAoV2Vi
Q29yZTo6S2V5ZWRFbmNvZGVyR2xpYjo6ZW5jb2RlSW50NjQpOgorICAgICAgICAoV2ViQ29yZTo6
S2V5ZWRFbmNvZGVyR2xpYjo6ZW5jb2RlRmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZWRF
bmNvZGVyR2xpYjo6ZW5jb2RlRG91YmxlKToKKyAgICAgICAgKFdlYkNvcmU6OktleWVkRW5jb2Rl
ckdsaWI6OmVuY29kZVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpLZXllZEVuY29kZXJHbGli
OjpiZWdpbk9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXllZEVuY29kZXJHbGliOjplbmRP
YmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZWRFbmNvZGVyR2xpYjo6YmVnaW5BcnJheSk6
CisgICAgICAgIChXZWJDb3JlOjpLZXllZEVuY29kZXJHbGliOjpiZWdpbkFycmF5RWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpLZXllZEVuY29kZXJHbGliOjplbmRBcnJheUVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6S2V5ZWRFbmNvZGVyR2xpYjo6ZW5kQXJyYXkpOgorICAgICAgICAo
V2ViQ29yZTo6S2V5ZWRFbmNvZGVyR2xpYjo6ZmluaXNoRW5jb2RpbmcpOgorICAgICAgICAqIHBs
YXRmb3JtL2dsaWIvS2V5ZWRFbmNvZGVyR2xpYi5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktp
dDIvU2hhcmVkL2dsaWIvS2V5ZWRFbmNvZGVyLmguCisKIDIwMTUtMDgtMDYgIEFuZGVycyBDYXJs
c3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW5hbWUgU1FMU3RhdGVtZW50
QmFja2VuZCB0byBTUUxTdGF0ZW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggYzFm
NmY0Yy4uODJmNWMyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21h
a2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTEwNiw2ICsxMDYs
OSBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9nZW9jbHVlL0dl
b2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlMS5jcHAKICAgICBwbGF0Zm9ybS9nZW9jbHVlL0dlb2xv
Y2F0aW9uUHJvdmlkZXJHZW9jbHVlMi5jcHAKIAorICAgIHBsYXRmb3JtL2dsaWIvS2V5ZWREZWNv
ZGVyR2xpYi5jcHAKKyAgICBwbGF0Zm9ybS9nbGliL0tleWVkRW5jb2RlckdsaWIuY3BwCisgICAg
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvUGxhdGZvcm1EaXNwbGF5LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1dPRkZGaWxl
Rm9ybWF0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2Ug
Yi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCAxZmM2ODUzLi45OTZiZWYy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtNjUsNiArNjUsOSBAQCBsaXN0KEFQUEVO
RCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9nZW9jbHVlL0dlb2xvY2F0aW9uUHJvdmlk
ZXJHZW9jbHVlMS5jcHAKICAgICBwbGF0Zm9ybS9nZW9jbHVlL0dlb2xvY2F0aW9uUHJvdmlkZXJH
ZW9jbHVlMi5jcHAKIAorICAgIHBsYXRmb3JtL2dsaWIvS2V5ZWREZWNvZGVyR2xpYi5jcHAKKyAg
ICBwbGF0Zm9ybS9nbGliL0tleWVkRW5jb2RlckdsaWIuY3BwCisgICAgCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvR0xDb250ZXh0LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBjNTQwZDhhLi44MDdlNzYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xOTk4LDYgKzE5OTgsMTAgQEAKIAkJNTE3OUNF
MkExOTVDOTE4NjAwMTlDMTk4IC8qIEdhbWVwYWRQcm92aWRlckNsaWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3OUNFMjkxOTVDOTE4NjAwMTlD
MTk4IC8qIEdhbWVwYWRQcm92aWRlckNsaWVudC5oICovOyB9OwogCQk1MTc5Q0UzNjE5NUNBQzdF
MDAxOUMxOTggLyogSElER2FtZXBhZFByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNzlDRTM0MTk1Q0FDN0UwMDE5QzE5OCAvKiBISURH
YW1lcGFkUHJvdmlkZXIuY3BwICovOyB9OwogCQk1MTc5Q0UzNzE5NUNBQzdFMDAxOUMxOTggLyog
SElER2FtZXBhZFByb3ZpZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MTc5Q0UzNTE5NUNBQzdFMDAxOUMxOTggLyogSElER2FtZXBhZFByb3ZpZGVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTE3
QTYzQzMxQjc0MzE4NzAwRTdEQ0RDIC8qIEtleWVkRGVjb2RlckNGLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0E2M0JGMUI3NDMxN0UwMEU3RENE
QyAvKiBLZXllZERlY29kZXJDRi5jcHAgKi87IH07CisJCTUxN0E2M0M0MUI3NDMxOEIwMEU3RENE
QyAvKiBLZXllZEVuY29kZXJDRi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTdBNjNDMTFCNzQzMTdFMDBFN0RDREMgLyogS2V5ZWRFbmNvZGVyQ0Yu
Y3BwICovOyB9OworCQk1MTdBNjNDNTFCNzQzMThGMDBFN0RDREMgLyogS2V5ZWREZWNvZGVyQ0Yu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0E2M0Mw
MUI3NDMxN0UwMEU3RENEQyAvKiBLZXllZERlY29kZXJDRi5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUxN0E2M0M2MUI3NDMxOTIwMEU3RENEQyAv
KiBLZXllZEVuY29kZXJDRi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTE3QTYzQzIxQjc0MzE3RTAwRTdEQ0RDIC8qIEtleWVkRW5jb2RlckNGLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE3RkJBMUUx
NTFBQjE3QzAwQjU3OTU5IC8qIERPTVdpbmRvd0V4dGVuc2lvbi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTdGQkExNzE1MUFBNzFCMDBCNTc5NTkg
LyogRE9NV2luZG93RXh0ZW5zaW9uLmNwcCAqLzsgfTsKIAkJNTE4OUYwMUQxMEIzN0JEOTAwRjND
NzM5IC8qIEpTUG9wU3RhdGVFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTg5RjAxQjEwQjM3QkQ5MDBGM0M3MzkgLyogSlNQb3BTdGF0ZUV2
ZW50LmNwcCAqLzsgfTsKIAkJNTE4OUYwMUUxMEIzN0JEOTAwRjNDNzM5IC8qIEpTUG9wU3RhdGVF
dmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE4
OUYwMUMxMEIzN0JEOTAwRjNDNzM5IC8qIEpTUG9wU3RhdGVFdmVudC5oICovOyB9OwpAQCAtOTI0
OSw2ICs5MjUzLDEwIEBACiAJCTUxNzlDRTI5MTk1QzkxODYwMDE5QzE5OCAvKiBHYW1lcGFkUHJv
dmlkZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2FtZXBhZFBy
b3ZpZGVyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNzlDRTM0MTk1
Q0FDN0UwMDE5QzE5OCAvKiBISURHYW1lcGFkUHJvdmlkZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSElER2FtZXBhZFByb3ZpZGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTE3OUNFMzUxOTVDQUM3RTAwMTlDMTk4IC8qIEhJREdhbWVwYWRQ
cm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBISURHYW1lcGFkUHJv
dmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE3QTYzQkYxQjc0MzE3RTAw
RTdEQ0RDIC8qIEtleWVkRGVjb2RlckNGLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEtleWVkRGVjb2RlckNGLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTE3QTYzQzAxQjc0MzE3RTAwRTdEQ0RDIC8qIEtleWVkRGVjb2RlckNGLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEtleWVkRGVjb2RlckNGLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTUxN0E2M0MxMUI3NDMxN0UwMEU3RENEQyAvKiBLZXllZEVuY29kZXJD
Ri5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBLZXllZEVuY29kZXJD
Ri5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxN0E2M0MyMUI3NDMxN0UwMEU3
RENEQyAvKiBLZXllZEVuY29kZXJDRi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBLZXllZEVuY29kZXJDRi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTdGQkEx
NzE1MUFBNzFCMDBCNTc5NTkgLyogRE9NV2luZG93RXh0ZW5zaW9uLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERPTVdpbmRvd0V4dGVuc2lvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxN0ZCQTE4MTUxQUE3MUIwMEI1Nzk1OSAvKiBET01XaW5k
b3dFeHRlbnNpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NV2luZG93
RXh0ZW5zaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxODlGMDFCMTBCMzdC
RDkwMEYzQzczOSAvKiBKU1BvcFN0YXRlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSlNQb3BTdGF0ZUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTE1NDUxLDYgKzE1NDU5LDEwIEBACiAJCQkJNDQzODE3RkQxQTkxQjJGODAwNkUw
NEYyIC8qIENvcmVNZWRpYVNvZnRMaW5rLmNwcCAqLywKIAkJCQk0NDM4MTdGRTFBOTFCMkY4MDA2
RTA0RjIgLyogQ29yZU1lZGlhU29mdExpbmsuaCAqLywKIAkJCQk1MTYwMzA2QjBDQzQzNjIzMDBD
OEFDMjUgLyogRmlsZVN5c3RlbUNGLmNwcCAqLywKKwkJCQk1MTdBNjNCRjFCNzQzMTdFMDBFN0RD
REMgLyogS2V5ZWREZWNvZGVyQ0YuY3BwICovLAorCQkJCTUxN0E2M0MwMUI3NDMxN0UwMEU3RENE
QyAvKiBLZXllZERlY29kZXJDRi5oICovLAorCQkJCTUxN0E2M0MxMUI3NDMxN0UwMEU3RENEQyAv
KiBLZXllZEVuY29kZXJDRi5jcHAgKi8sCisJCQkJNTE3QTYzQzIxQjc0MzE3RTAwRTdEQ0RDIC8q
IEtleWVkRW5jb2RlckNGLmggKi8sCiAJCQkJNUNCQzhEQUExQUFBMzAyMjAwRTFDODAzIC8qIE1l
ZGlhQWNjZXNzaWJpbGl0eVNvZnRMaW5rLmNwcCAqLywKIAkJCQk1Q0JDOERBQjFBQUEzMDIyMDBF
MUM4MDMgLyogTWVkaWFBY2Nlc3NpYmlsaXR5U29mdExpbmsuaCAqLywKIAkJCQkyRDc2QkI4MzE5
NDU2RjgxMDBDRkQyOUEgLyogUnVuTG9vcE9ic2VydmVyLmNwcCAqLywKQEAgLTI1NjI0LDYgKzI1
NjM2LDcgQEAKIAkJCQkwNzk2OURCMDE3RDE0MTUxMDA3RkY4NDIgLyogSlNSVENEVE1GU2VuZGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzk2OURCMjE3RDE0MTUxMDA3RkY4NDIgLyogSlNSVENE
VE1GVG9uZUNoYW5nZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzk2OURCNjE3RDE0MTUx
MDA3RkY4NDIgLyogSlNSVENJY2VDYW5kaWRhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxN0E2
M0M2MUI3NDMxOTIwMEU3RENEQyAvKiBLZXllZEVuY29kZXJDRi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMDc5NjlEQjgxN0QxNDE1MTAwN0ZGODQyIC8qIEpTUlRDSWNlQ2FuZGlkYXRlRXZlbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCTA3Mzc5NEVDMTlFRTM0MUUwMEU1QTA0NSAvKiBKU1JUQ0ljZVNl
cnZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc5NjlEQkExN0QxNDE1MTAwN0ZGODQyIC8qIEpT
UlRDUGVlckNvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLApAQCAtMjY0MjQsNiArMjY0MzcsNyBA
QAogCQkJCTMxOTU1QTg4MTYwRDE5OTIwMDg1ODAyNSAvKiBSZW5kZXJTbmFwc2hvdHRlZFBsdWdJ
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM4QzhGQUUwRERDRDMxQjAwQjU5MkY0IC8qIFJlbmRl
clN0eWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzVFQjY2ODBFODFDQjcxMDBCMjU5NjUgLyog
UmVuZGVyU3R5bGVDb25zdGFudHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxN0E2M0M1MUI3NDMx
OEYwMEU3RENEQyAvKiBLZXllZERlY29kZXJDRi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM2NzA4
QzExMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR0Jsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0MzY3MDhDMzEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHQ29udGFpbmVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkyQjM2NUM4NDE1MjUxMTlFMDA5MUQyN0IgLyogUmVuZGVyU1ZHRWxsaXBz
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTYyNSw2ICsyOTYzOSw3IEBACiAJCQkJMDdDNTlCNjgx
N0Y3ODRCQTAwMEZCQ0JCIC8qIE1lZGlhU291cmNlU3RhdGVzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTA3OEUwOEZGMTdEMTRDRUUwMDQyMEFBMSAvKiBNZWRpYVN0cmVhbS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwNzhFMDk0QjE3RDE3MDk2MDA0MjBBQTEgLyogTWVkaWFTdHJlYW1BdWRpb0Rl
c3RpbmF0aW9uTm9kZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTdBNjNDMzFCNzQzMTg3MDBF
N0RDREMgLyogS2V5ZWREZWNvZGVyQ0YuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDc4MzIyODQx
ODAxM0VEODAwOTk5RTBDIC8qIE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJRkQ2NzFBNzcxNTlCQjA3MDAwMTk3NTU5IC8qIE1lZGlhU3RyZWFtQXVkaW9Tb3Vy
Y2VOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3MDU4NTE1MTdGQjBFRUEwMDVGMkJDQiAv
KiBNZWRpYVN0cmVhbUNhcGFiaWxpdGllcy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI5NzM1LDYg
KzI5NzUwLDcgQEAKIAkJCQkxQTBENTczNjBBNUM3N0ZFMDA3RURENEMgLyogT3ZlcmZsb3dFdmVu
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5QjU1RUVFOTFCM0U4ODk4MDA1MzQyQkMgLyogRWRp
dG9yQ29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQk2NUZFQTg2OTA5ODMzQURFMDBCRUQ0QUIg
LyogUGFnZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTdBNjNDNDFCNzQzMThCMDBFN0RDREMg
LyogS2V5ZWRFbmNvZGVyQ0YuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3N0U3NzYwQkY0MTM0
QTAwMTUyODcyIC8qIFBhZ2VDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDRDVFNUI2MTFB
MTVGMTU2MDAwQzYwOUUgLyogUGFnZUNvbmZpZ3VyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRjM4MjA4OTIxNDdEMzVGOTAwMTBCQzA2IC8qIFBhZ2VDb25zb2xlQWdlbnQuY3BwIGluIFNv
dXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LZXllZENvZGlu
Zy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS2V5ZWRDb2RpbmcuaAppbmRleCA5ZmE1Yzhm
Li5lMjk2OWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LZXllZENvZGlu
Zy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tleWVkQ29kaW5nLmgKQEAgLTM1LDEw
ICszNSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiAKIGNs
YXNzIEtleWVkRGVjb2RlciB7Ci1wcm90ZWN0ZWQ6CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxLZXllZERlY29kZXI+IGRlY29kZXIoY29uc3QgdWlu
dDhfdCogZGF0YSwgc2l6ZV90KTsKKwogICAgIHZpcnR1YWwgfktleWVkRGVjb2RlcigpIHsgfQog
Ci1wdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGRlY29kZUJ5dGVzKGNvbnN0IFN0cmluZyYga2V5
LCBjb25zdCB1aW50OF90KiYsIHNpemVfdCYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZGVjb2Rl
Qm9vbChjb25zdCBTdHJpbmcmIGtleSwgYm9vbCYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZGVj
b2RlVUludDMyKGNvbnN0IFN0cmluZyYga2V5LCB1aW50MzJfdCYpID0gMDsKQEAgLTEyNSw2ICsx
MjYsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorcHJvdGVj
dGVkOgorICAgIEtleWVkRGVjb2RlcigpCisgICAgeworICAgIH0KKwogcHJpdmF0ZToKICAgICB2
aXJ0dWFsIGJvb2wgYmVnaW5PYmplY3QoY29uc3QgU3RyaW5nJiBrZXkpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgZW5kT2JqZWN0KCkgPSAwOwpAQCAtMTM2LDEwICsxNDIsMTEgQEAgcHJpdmF0ZToK
IH07CiAKIGNsYXNzIEtleWVkRW5jb2RlciB7Ci1wcm90ZWN0ZWQ6CitwdWJsaWM6CisgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxLZXllZEVuY29kZXI+IGVuY29kZXIo
KTsKKwogICAgIHZpcnR1YWwgfktleWVkRW5jb2RlcigpIHsgfQogCi1wdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGVuY29kZUJ5dGVzKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCB1aW50OF90Kiwg
c2l6ZV90KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGVuY29kZUJvb2woY29uc3QgU3RyaW5nJiBr
ZXksIGJvb2wpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlVUludDMyKGNvbnN0IFN0cmlu
ZyYga2V5LCB1aW50MzJfdCkgPSAwOwpAQCAtMTg4LDYgKzE5NSwxMSBAQCBwdWJsaWM6CiAgICAg
ICAgIGVuZEFycmF5KCk7CiAgICAgfQogCitwcm90ZWN0ZWQ6CisgICAgS2V5ZWRFbmNvZGVyKCkK
KyAgICB7CisgICAgfQorCiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBiZWdpbk9iamVjdChj
b25zdCBTdHJpbmcmIGtleSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBlbmRPYmplY3QoKSA9IDA7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9LZXllZERlY29kZXJDRi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9LZXllZERlY29kZXJDRi5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUzNGJhNwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL0tleWVkRGVjb2RlckNGLmNwcApAQCAtMCwwICsx
LDE4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJLZXll
ZERlY29kZXJDRi5oIgorCisjaW5jbHVkZSA8d3RmL2NmL1R5cGVDYXN0c0NGLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RkOjp1
bmlxdWVfcHRyPEtleWVkRGVjb2Rlcj4gS2V5ZWREZWNvZGVyOjpkZWNvZGVyKGNvbnN0IHVpbnQ4
X3QqIGRhdGEsIHNpemVfdCBzaXplKQoreworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEtl
eWVkRGVjb2RlckNGPihkYXRhLCBzaXplKTsKK30KKworS2V5ZWREZWNvZGVyQ0Y6OktleWVkRGVj
b2RlckNGKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQoreworICAgIGF1dG8gY2ZE
YXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVXaXRoQnl0ZXNOb0NvcHkoa0NGQWxsb2NhdG9yRGVm
YXVsdCwgZGF0YSwgc2l6ZSwga0NGQWxsb2NhdG9yTnVsbCkpOworCisgICAgaWYgKGF1dG8gcm9v
dERpY3Rpb25hcnkgPSBhZG9wdENGKGR5bmFtaWNfY2ZfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENG
UHJvcGVydHlMaXN0Q3JlYXRlV2l0aERhdGEoa0NGQWxsb2NhdG9yRGVmYXVsdCwgY2ZEYXRhLmdl
dCgpLCBrQ0ZQcm9wZXJ0eUxpc3RJbW11dGFibGUsIG51bGxwdHIsIG51bGxwdHIpKSkpCisgICAg
ICAgIG1fcm9vdERpY3Rpb25hcnkgPSBXVEY6Om1vdmUocm9vdERpY3Rpb25hcnkpOworICAgIGVs
c2UKKyAgICAgICAgbV9yb290RGljdGlvbmFyeSA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIG51bGxwdHIsIG51bGxwdHIsIDAsICZrQ0ZUeXBlRGljdGlv
bmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKyAg
ICBtX2RpY3Rpb25hcnlTdGFjay5hcHBlbmQobV9yb290RGljdGlvbmFyeS5nZXQoKSk7Cit9CisK
K0tleWVkRGVjb2RlckNGOjp+S2V5ZWREZWNvZGVyQ0YoKQoreworICAgIEFTU0VSVChtX2RpY3Rp
b25hcnlTdGFjay5zaXplKCkgPT0gMSk7CisgICAgQVNTRVJUKG1fZGljdGlvbmFyeVN0YWNrLmxh
c3QoKSA9PSBtX3Jvb3REaWN0aW9uYXJ5KTsKKyAgICBBU1NFUlQobV9hcnJheVN0YWNrLmlzRW1w
dHkoKSk7CisgICAgQVNTRVJUKG1fYXJyYXlJbmRleFN0YWNrLmlzRW1wdHkoKSk7Cit9CisKK2Jv
b2wgS2V5ZWREZWNvZGVyQ0Y6OmRlY29kZUJ5dGVzKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCB1
aW50OF90KiYgYnl0ZXMsIHNpemVfdCYgc2l6ZSkKK3sKKyAgICBhdXRvIGRhdGEgPSBkeW5hbWlj
X2NmX2Nhc3Q8Q0ZEYXRhUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShtX2RpY3Rpb25hcnlTdGFj
ay5sYXN0KCksIGtleS5jcmVhdGVDRlN0cmluZygpLmdldCgpKSk7CisgICAgaWYgKCFkYXRhKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBieXRlcyA9IENGRGF0YUdldEJ5dGVQdHIoZGF0
YSk7CisgICAgc2l6ZSA9IENGRGF0YUdldExlbmd0aChkYXRhKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBLZXllZERlY29kZXJDRjo6ZGVjb2RlQm9vbChjb25zdCBTdHJpbmcmIGtleSwg
Ym9vbCYgcmVzdWx0KQoreworICAgIGF1dG8gYm9vbGVhbiA9IGR5bmFtaWNfY2ZfY2FzdDxDRkJv
b2xlYW5SZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwg
a2V5LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKTsKKyAgICBpZiAoIWJvb2xlYW4pCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHJlc3VsdCA9IENGQm9vbGVhbkdldFZhbHVlKGJvb2xlYW4p
OworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEtleWVkRGVjb2RlckNGOjpkZWNvZGVVSW50
MzIoY29uc3QgU3RyaW5nJiBrZXksIHVpbnQzMl90JiByZXN1bHQpCit7CisgICAgcmV0dXJuIGRl
Y29kZUludDMyKGtleSwgcmVpbnRlcnByZXRfY2FzdDxpbnQzMl90Jj4ocmVzdWx0KSk7Cit9CisK
K2Jvb2wgS2V5ZWREZWNvZGVyQ0Y6OmRlY29kZUludDMyKGNvbnN0IFN0cmluZyYga2V5LCBpbnQz
Ml90JiByZXN1bHQpCit7CisgICAgYXV0byBudW1iZXIgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZOdW1i
ZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5
LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKTsKKyAgICBpZiAoIW51bWJlcikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgcmV0dXJuIENGTnVtYmVyR2V0VmFsdWUobnVtYmVyLCBrQ0ZOdW1i
ZXJTSW50MzJUeXBlLCAmcmVzdWx0KTsKK30KKworYm9vbCBLZXllZERlY29kZXJDRjo6ZGVjb2Rl
SW50NjQoY29uc3QgU3RyaW5nJiBrZXksIGludDY0X3QmIHJlc3VsdCkKK3sKKyAgICBhdXRvIG51
bWJlciA9IGR5bmFtaWNfY2ZfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUo
bV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOwor
ICAgIGlmICghbnVtYmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gQ0ZO
dW1iZXJHZXRWYWx1ZShudW1iZXIsIGtDRk51bWJlclNJbnQ2NFR5cGUsICZyZXN1bHQpOworfQor
Citib29sIEtleWVkRGVjb2RlckNGOjpkZWNvZGVGbG9hdChjb25zdCBTdHJpbmcmIGtleSwgZmxv
YXQmIHJlc3VsdCkKK3sKKyAgICBhdXRvIG51bWJlciA9IGR5bmFtaWNfY2ZfY2FzdDxDRk51bWJl
clJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXku
Y3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOworICAgIGlmICghbnVtYmVyKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICByZXR1cm4gQ0ZOdW1iZXJHZXRWYWx1ZShudW1iZXIsIGtDRk51bWJl
ckZsb2F0VHlwZSwgJnJlc3VsdCk7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyQ0Y6OmRlY29kZURv
dWJsZShjb25zdCBTdHJpbmcmIGtleSwgZG91YmxlJiByZXN1bHQpCit7CisgICAgYXV0byBudW1i
ZXIgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKG1f
ZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKTsKKyAg
ICBpZiAoIW51bWJlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIENGTnVt
YmVyR2V0VmFsdWUobnVtYmVyLCBrQ0ZOdW1iZXJEb3VibGVUeXBlLCAmcmVzdWx0KTsKK30KKwor
Ym9vbCBLZXllZERlY29kZXJDRjo6ZGVjb2RlU3RyaW5nKGNvbnN0IFN0cmluZyYga2V5LCBTdHJp
bmcmIHJlc3VsdCkKK3sKKyAgICBhdXRvIHN0cmluZyA9IGR5bmFtaWNfY2ZfY2FzdDxDRlN0cmlu
Z1JlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXku
Y3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOworICAgIGlmICghc3RyaW5nKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICByZXN1bHQgPSBzdHJpbmc7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgS2V5ZWREZWNvZGVyQ0Y6OmJlZ2luT2JqZWN0KGNvbnN0IFN0cmluZyYga2V5KQorewor
ICAgIGF1dG8gZGljdGlvbmFyeSA9IGR5bmFtaWNfY2ZfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENG
RGljdGlvbmFyeUdldFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5LmNyZWF0ZUNG
U3RyaW5nKCkuZ2V0KCkpKTsKKyAgICBpZiAoIWRpY3Rpb25hcnkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIG1fZGljdGlvbmFyeVN0YWNrLmFwcGVuZChkaWN0aW9uYXJ5KTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBLZXllZERlY29kZXJDRjo6ZW5kT2JqZWN0KCkKK3sKKyAg
ICBtX2RpY3Rpb25hcnlTdGFjay5yZW1vdmVMYXN0KCk7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVy
Q0Y6OmJlZ2luQXJyYXkoY29uc3QgU3RyaW5nJiBrZXkpCit7CisgICAgYXV0byBhcnJheSA9IGR5
bmFtaWNfY2ZfY2FzdDxDRkFycmF5UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShtX2RpY3Rpb25h
cnlTdGFjay5sYXN0KCksIGtleS5jcmVhdGVDRlN0cmluZygpLmdldCgpKSk7CisgICAgaWYgKCFh
cnJheSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yIChDRkluZGV4IGkgPSAwOyBp
IDwgQ0ZBcnJheUdldENvdW50KGFycmF5KTsgKytpKSB7CisgICAgICAgIENGVHlwZVJlZiBvYmpl
Y3QgPSBDRkFycmF5R2V0VmFsdWVBdEluZGV4KGFycmF5LCBpKTsKKyAgICAgICAgaWYgKENGR2V0
VHlwZUlEKG9iamVjdCkgIT0gQ0ZEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbV9hcnJheVN0YWNrLmFwcGVuZChhcnJheSk7Cisg
ICAgbV9hcnJheUluZGV4U3RhY2suYXBwZW5kKDApOworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIEtleWVkRGVjb2RlckNGOjpiZWdpbkFycmF5RWxlbWVudCgpCit7CisgICAgaWYgKG1fYXJy
YXlJbmRleFN0YWNrLmxhc3QoKSA+PSBDRkFycmF5R2V0Q291bnQobV9hcnJheVN0YWNrLmxhc3Qo
KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gZGljdGlvbmFyeSA9IGNoZWNr
ZWRfY2ZfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgobV9hcnJh
eVN0YWNrLmxhc3QoKSwgbV9hcnJheUluZGV4U3RhY2subGFzdCgpKyspKTsKKyAgICBtX2RpY3Rp
b25hcnlTdGFjay5hcHBlbmQoZGljdGlvbmFyeSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgS2V5ZWREZWNvZGVyQ0Y6OmVuZEFycmF5RWxlbWVudCgpCit7CisgICAgbV9kaWN0aW9uYXJ5
U3RhY2sucmVtb3ZlTGFzdCgpOworfQorCit2b2lkIEtleWVkRGVjb2RlckNGOjplbmRBcnJheSgp
Cit7CisgICAgbV9hcnJheVN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICBtX2FycmF5SW5kZXhTdGFj
ay5yZW1vdmVMYXN0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL0tleWVkRGVjb2RlckNGLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jZi9LZXllZERlY29kZXJDRi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjNmMDdiOWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jZi9LZXllZERlY29kZXJDRi5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIEtleWVkRGVjb2RlckNGX2gKKyNkZWZpbmUgS2V5ZWREZWNvZGVyQ0ZfaAorCisj
aW5jbHVkZSAiS2V5ZWRDb2RpbmcuaCIKKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEtleWVk
RGVjb2RlckNGIGZpbmFsIDogcHVibGljIEtleWVkRGVjb2RlciB7CitwdWJsaWM6CisgICAgS2V5
ZWREZWNvZGVyQ0YoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90KTsKKyAgICB2aXJ0dWFsIH5L
ZXllZERlY29kZXJDRigpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCBk
ZWNvZGVCeXRlcyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgdWludDhfdComLCBzaXplX3QmKSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlQm9vbChjb25zdCBTdHJpbmcmIGtleSwg
Ym9vbCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVVSW50MzIoY29uc3QgU3Ry
aW5nJiBrZXksIHVpbnQzMl90Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGRlY29kZUlu
dDMyKGNvbnN0IFN0cmluZyYga2V5LCBpbnQzMl90Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBi
b29sIGRlY29kZUludDY0KGNvbnN0IFN0cmluZyYga2V5LCBpbnQ2NF90Jikgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCBib29sIGRlY29kZUZsb2F0KGNvbnN0IFN0cmluZyYga2V5LCBmbG9hdCYpIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVEb3VibGUoY29uc3QgU3RyaW5nJiBrZXks
IGRvdWJsZSYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVTdHJpbmcoY29uc3Qg
U3RyaW5nJiBrZXksIFN0cmluZyYpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBib29sIGJlZ2lu
T2JqZWN0KGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5k
T2JqZWN0KCkgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIGJvb2wgYmVnaW5BcnJheShjb25zdCBT
dHJpbmcmIGtleSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGJlZ2luQXJyYXlFbGVtZW50
KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuZEFycmF5RWxlbWVudCgpIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBlbmRBcnJheSgpIG92ZXJyaWRlOworCisgICAgUmV0YWluUHRy
PENGRGljdGlvbmFyeVJlZj4gbV9yb290RGljdGlvbmFyeTsKKworICAgIFZlY3RvcjxDRkRpY3Rp
b25hcnlSZWYsIDE2PiBtX2RpY3Rpb25hcnlTdGFjazsKKyAgICBWZWN0b3I8Q0ZBcnJheVJlZiwg
MTY+IG1fYXJyYXlTdGFjazsKKyAgICBWZWN0b3I8Q0ZJbmRleD4gbV9hcnJheUluZGV4U3RhY2s7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBLZXllZERlY29kZXJD
Rl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9LZXllZEVuY29kZXJD
Ri5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9LZXllZEVuY29kZXJDRi5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVjNTNkOAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL0tleWVkRW5jb2RlckNGLmNwcApAQCAtMCww
ICsxLDE1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJL
ZXllZEVuY29kZXJDRi5oIgorCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8
Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGQ6OnVuaXF1ZV9wdHI8S2V5ZWRF
bmNvZGVyPiBLZXllZEVuY29kZXI6OmVuY29kZXIoKQoreworICAgIHJldHVybiBzdGQ6Om1ha2Vf
dW5pcXVlPEtleWVkRW5jb2RlckNGPigpOworfQorCitzdGF0aWMgUmV0YWluUHRyPENGTXV0YWJs
ZURpY3Rpb25hcnlSZWY+IGNyZWF0ZURpY3Rpb25hcnkoKQoreworICAgIHJldHVybiBhZG9wdENG
KENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwgJmtDRlR5
cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNr
cykpOworfQorCitLZXllZEVuY29kZXJDRjo6S2V5ZWRFbmNvZGVyQ0YoKQorICAgIDogbV9yb290
RGljdGlvbmFyeShjcmVhdGVEaWN0aW9uYXJ5KCkpCit7CisgICAgbV9kaWN0aW9uYXJ5U3RhY2su
YXBwZW5kKG1fcm9vdERpY3Rpb25hcnkuZ2V0KCkpOworfQorICAgIAorS2V5ZWRFbmNvZGVyQ0Y6
On5LZXllZEVuY29kZXJDRigpCit7CisgICAgQVNTRVJUKG1fZGljdGlvbmFyeVN0YWNrLnNpemUo
KSA9PSAxKTsKKyAgICBBU1NFUlQobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpID09IG1fcm9vdERp
Y3Rpb25hcnkpOworICAgIEFTU0VSVChtX2FycmF5U3RhY2suaXNFbXB0eSgpKTsKK30KKwordm9p
ZCBLZXllZEVuY29kZXJDRjo6ZW5jb2RlQnl0ZXMoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IHVp
bnQ4X3QqIGJ5dGVzLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBhdXRvIGRhdGEgPSBhZG9wdENGKENG
RGF0YUNyZWF0ZVdpdGhCeXRlc05vQ29weShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBieXRlcywgc2l6
ZSwga0NGQWxsb2NhdG9yTnVsbCkpOworICAgIENGRGljdGlvbmFyeVNldFZhbHVlKG1fZGljdGlv
bmFyeVN0YWNrLmxhc3QoKSwga2V5LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIGRhdGEuZ2V0KCkp
OworfQorCit2b2lkIEtleWVkRW5jb2RlckNGOjplbmNvZGVCb29sKGNvbnN0IFN0cmluZyYga2V5
LCBib29sIHZhbHVlKQoreworICAgIENGRGljdGlvbmFyeVNldFZhbHVlKG1fZGljdGlvbmFyeVN0
YWNrLmxhc3QoKSwga2V5LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIHZhbHVlID8ga0NGQm9vbGVh
blRydWUgOiBrQ0ZCb29sZWFuRmFsc2UpOworfQorCit2b2lkIEtleWVkRW5jb2RlckNGOjplbmNv
ZGVVSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIHVpbnQzMl90IHZhbHVlKQoreworICAgIGF1dG8g
bnVtYmVyID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZO
dW1iZXJTSW50MzJUeXBlLCAmdmFsdWUpKTsKKyAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShtX2Rp
Y3Rpb25hcnlTdGFjay5sYXN0KCksIGtleS5jcmVhdGVDRlN0cmluZygpLmdldCgpLCBudW1iZXIu
Z2V0KCkpOworfQorCit2b2lkIEtleWVkRW5jb2RlckNGOjplbmNvZGVJbnQzMihjb25zdCBTdHJp
bmcmIGtleSwgaW50MzJfdCB2YWx1ZSkKK3sKKyAgICBhdXRvIG51bWJlciA9IGFkb3B0Q0YoQ0ZO
dW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyU0ludDMyVHlwZSwgJnZh
bHVlKSk7CisgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgp
LCBrZXkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgbnVtYmVyLmdldCgpKTsKK30KKwordm9pZCBL
ZXllZEVuY29kZXJDRjo6ZW5jb2RlSW50NjQoY29uc3QgU3RyaW5nJiBrZXksIGludDY0X3QgdmFs
dWUpCit7CisgICAgYXV0byBudW1iZXIgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9j
YXRvckRlZmF1bHQsIGtDRk51bWJlclNJbnQ2NFR5cGUsICZ2YWx1ZSkpOworICAgIENGRGljdGlv
bmFyeVNldFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5LmNyZWF0ZUNGU3RyaW5n
KCkuZ2V0KCksIG51bWJlci5nZXQoKSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyQ0Y6OmVuY29k
ZUZsb2F0KGNvbnN0IFN0cmluZyYga2V5LCBmbG9hdCB2YWx1ZSkKK3sKKyAgICBhdXRvIG51bWJl
ciA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVy
RmxvYXRUeXBlLCAmdmFsdWUpKTsKKyAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShtX2RpY3Rpb25h
cnlTdGFjay5sYXN0KCksIGtleS5jcmVhdGVDRlN0cmluZygpLmdldCgpLCBudW1iZXIuZ2V0KCkp
OworfQorCit2b2lkIEtleWVkRW5jb2RlckNGOjplbmNvZGVEb3VibGUoY29uc3QgU3RyaW5nJiBr
ZXksIGRvdWJsZSB2YWx1ZSkKK3sKKyAgICBhdXRvIG51bWJlciA9IGFkb3B0Q0YoQ0ZOdW1iZXJD
cmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyRG91YmxlVHlwZSwgJnZhbHVlKSk7
CisgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXku
Y3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgbnVtYmVyLmdldCgpKTsKK30KKwordm9pZCBLZXllZEVu
Y29kZXJDRjo6ZW5jb2RlU3RyaW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZh
bHVlKQoreworICAgIENGRGljdGlvbmFyeVNldFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3Qo
KSwga2V5LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIHZhbHVlLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0
KCkpOworfQorCit2b2lkIEtleWVkRW5jb2RlckNGOjpiZWdpbk9iamVjdChjb25zdCBTdHJpbmcm
IGtleSkKK3sKKyAgICBhdXRvIGRpY3Rpb25hcnkgPSBjcmVhdGVEaWN0aW9uYXJ5KCk7CisgICAg
Q0ZEaWN0aW9uYXJ5U2V0VmFsdWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXkuY3JlYXRl
Q0ZTdHJpbmcoKS5nZXQoKSwgZGljdGlvbmFyeS5nZXQoKSk7CisKKyAgICBtX2RpY3Rpb25hcnlT
dGFjay5hcHBlbmQoZGljdGlvbmFyeS5nZXQoKSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyQ0Y6
OmVuZE9iamVjdCgpCit7CisgICAgbV9kaWN0aW9uYXJ5U3RhY2sucmVtb3ZlTGFzdCgpOworfQor
Cit2b2lkIEtleWVkRW5jb2RlckNGOjpiZWdpbkFycmF5KGNvbnN0IFN0cmluZyYga2V5KQorewor
ICAgIGF1dG8gYXJyYXkgPSBhZG9wdENGKENGQXJyYXlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIDAsICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpKTsKKyAgICBDRkRpY3Rpb25hcnlT
ZXRWYWx1ZShtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCksIGtleS5jcmVhdGVDRlN0cmluZygpLmdl
dCgpLCBhcnJheS5nZXQoKSk7CisKKyAgICBtX2FycmF5U3RhY2suYXBwZW5kKGFycmF5LmdldCgp
KTsKK30KKwordm9pZCBLZXllZEVuY29kZXJDRjo6YmVnaW5BcnJheUVsZW1lbnQoKQoreworICAg
IGF1dG8gZGljdGlvbmFyeSA9IGNyZWF0ZURpY3Rpb25hcnkoKTsKKyAgICBDRkFycmF5QXBwZW5k
VmFsdWUobV9hcnJheVN0YWNrLmxhc3QoKSwgZGljdGlvbmFyeS5nZXQoKSk7CisKKyAgICBtX2Rp
Y3Rpb25hcnlTdGFjay5hcHBlbmQoZGljdGlvbmFyeS5nZXQoKSk7Cit9CisKK3ZvaWQgS2V5ZWRF
bmNvZGVyQ0Y6OmVuZEFycmF5RWxlbWVudCgpCit7CisgICAgbV9kaWN0aW9uYXJ5U3RhY2sucmVt
b3ZlTGFzdCgpOworfQorCit2b2lkIEtleWVkRW5jb2RlckNGOjplbmRBcnJheSgpCit7CisgICAg
bV9hcnJheVN0YWNrLnJlbW92ZUxhc3QoKTsKK30KKworUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+
IEtleWVkRW5jb2RlckNGOjpmaW5pc2hFbmNvZGluZygpCit7CisgICAgUmV0YWluUHRyPENGRGF0
YVJlZj4gZGF0YSA9IGFkb3B0Q0YoQ0ZQcm9wZXJ0eUxpc3RDcmVhdGVEYXRhKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIG1fcm9vdERpY3Rpb25hcnkuZ2V0KCksIGtDRlByb3BlcnR5TGlzdEJpbmFyeUZv
cm1hdF92MV8wLCAwLCBudWxscHRyKSk7CisgICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OndyYXBDRkRhdGEoZGF0YS5nZXQo
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NmL0tleWVkRW5jb2RlckNGLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jZi9LZXllZEVuY29kZXJDRi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmE5MjhjNDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9L
ZXllZEVuY29kZXJDRi5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEtl
eWVkRW5jb2RlckNGX2gKKyNkZWZpbmUgS2V5ZWRFbmNvZGVyQ0ZfaAorCisjaW5jbHVkZSAiS2V5
ZWRDb2RpbmcuaCIKKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEtleWVkRW5jb2RlckNGIGZp
bmFsIDogcHVibGljIEtleWVkRW5jb2RlciB7CitwdWJsaWM6CisgICAgS2V5ZWRFbmNvZGVyQ0Yo
KTsKKyAgICB+S2V5ZWRFbmNvZGVyQ0YoKTsKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJD
b3JlOjpTaGFyZWRCdWZmZXI+IGZpbmlzaEVuY29kaW5nKCkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6
CisgICAgdmlydHVhbCB2b2lkIGVuY29kZUJ5dGVzKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCB1
aW50OF90Kiwgc2l6ZV90KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlQm9vbChj
b25zdCBTdHJpbmcmIGtleSwgYm9vbCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuY29k
ZVVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgdWludDMyX3QpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgdm9pZCBlbmNvZGVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgaW50MzJfdCkgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIGVuY29kZUludDY0KGNvbnN0IFN0cmluZyYga2V5LCBpbnQ2NF90
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlRmxvYXQoY29uc3QgU3RyaW5nJiBr
ZXksIGZsb2F0KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlRG91YmxlKGNvbnN0
IFN0cmluZyYga2V5LCBkb3VibGUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVT
dHJpbmcoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworCisgICAg
dmlydHVhbCB2b2lkIGJlZ2luT2JqZWN0KGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZW5kT2JqZWN0KCkgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIHZvaWQg
YmVnaW5BcnJheShjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IGJlZ2luQXJyYXlFbGVtZW50KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuZEFycmF5
RWxlbWVudCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmRBcnJheSgpIG92ZXJyaWRl
OworCisgICAgUmV0YWluUHRyPENGTXV0YWJsZURpY3Rpb25hcnlSZWY+IG1fcm9vdERpY3Rpb25h
cnk7CisKKyAgICBWZWN0b3I8Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZiwgMTY+IG1fZGljdGlvbmFy
eVN0YWNrOworICAgIFZlY3RvcjxDRk11dGFibGVBcnJheVJlZiwgMTY+IG1fYXJyYXlTdGFjazsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEtleWVkRW5jb2RlckNG
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dsaWIvS2V5ZWREZWNvZGVy
R2xpYi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL0tleWVkRGVjb2RlckdsaWIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjZDE5NDEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL0tleWVkRGVjb2RlckdsaWIu
Y3BwCkBAIC0wLDAgKzEsMTczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBT
LkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJLZXllZERlY29k
ZXJHbGliLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworc3RkOjp1bmlxdWVfcHRyPEtleWVkRGVjb2Rlcj4gS2V5ZWREZWNvZGVyOjpk
ZWNvZGVyKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQoreworICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPEtleWVkRGVjb2RlckdsaWI+KGRhdGEsIHNpemUpOworfQorCitLZXll
ZERlY29kZXJHbGliOjpLZXllZERlY29kZXJHbGliKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVf
dCBzaXplKQoreworICAgIEdSZWZQdHI8R0J5dGVzPiBieXRlcyA9IGFkb3B0R1JlZihnX2J5dGVz
X25ldyhkYXRhLCBzaXplKSk7CisgICAgR1JlZlB0cjxHVmFyaWFudD4gdmFyaWFudCA9IGdfdmFy
aWFudF9uZXdfZnJvbV9ieXRlcyhHX1ZBUklBTlRfVFlQRSgiYXtzdn0iKSwgYnl0ZXMuZ2V0KCks
IFRSVUUpOworICAgIG1fZGljdGlvbmFyeVN0YWNrLmFwcGVuZChkaWN0aW9uYXJ5RnJvbUdWYXJp
YW50KHZhcmlhbnQuZ2V0KCkpKTsKK30KKworS2V5ZWREZWNvZGVyR2xpYjo6fktleWVkRGVjb2Rl
ckdsaWIoKQoreworICAgIEFTU0VSVChtX2RpY3Rpb25hcnlTdGFjay5zaXplKCkgPT0gMSk7Cisg
ICAgQVNTRVJUKG1fYXJyYXlTdGFjay5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtX2FycmF5SW5k
ZXhTdGFjay5pc0VtcHR5KCkpOworfQorCitIYXNoTWFwPFN0cmluZywgR1JlZlB0cjxHVmFyaWFu
dD4+IEtleWVkRGVjb2RlckdsaWI6OmRpY3Rpb25hcnlGcm9tR1ZhcmlhbnQoR1ZhcmlhbnQqIHZh
cmlhbnQpCit7CisgICAgSGFzaE1hcDxTdHJpbmcsIEdSZWZQdHI8R1ZhcmlhbnQ+PiBkaWN0aW9u
YXJ5OworICAgIEdWYXJpYW50SXRlciBpdGVyOworICAgIGdfdmFyaWFudF9pdGVyX2luaXQoJml0
ZXIsIHZhcmlhbnQpOworICAgIGNvbnN0IGNoYXIqIGtleTsKKyAgICBHVmFyaWFudCogdmFsdWU7
CisgICAgd2hpbGUgKGdfdmFyaWFudF9pdGVyX2xvb3AoJml0ZXIsICJ7JnN2fSIsICZrZXksICZ2
YWx1ZSkpCisgICAgICAgIGRpY3Rpb25hcnkuc2V0KFN0cmluZzo6ZnJvbVVURjgoa2V5KSwgdmFs
dWUpOworICAgIHJldHVybiBXVEY6Om1vdmUoZGljdGlvbmFyeSk7Cit9CisKK2Jvb2wgS2V5ZWRE
ZWNvZGVyR2xpYjo6ZGVjb2RlQnl0ZXMoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IHVpbnQ4X3Qq
JiBieXRlcywgc2l6ZV90JiBzaXplKQoreworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhbHVlID0g
bV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLmdldChrZXkpOworICAgIGlmICghdmFsdWUpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHNpemUgPSBnX3ZhcmlhbnRfZ2V0X3NpemUodmFsdWUu
Z2V0KCkpOworICAgIGJ5dGVzID0gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGdfdmFyaWFu
dF9nZXRfZGF0YSh2YWx1ZS5nZXQoKSkpOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBGPgorYm9vbCBLZXllZERlY29kZXJHbGliOjpkZWNvZGVT
aW1wbGVWYWx1ZShjb25zdCBTdHJpbmcmIGtleSwgVCYgcmVzdWx0LCBGIGdldEZ1bmN0aW9uKQor
eworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhbHVlID0gbV9kaWN0aW9uYXJ5U3RhY2subGFzdCgp
LmdldChrZXkpOworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHJlc3VsdCA9IGdldEZ1bmN0aW9uKHZhbHVlLmdldCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBLZXllZERlY29kZXJHbGliOjpkZWNvZGVCb29sKGNvbnN0IFN0cmluZyYga2V5LCBi
b29sJiByZXN1bHQpCit7CisgICAgcmV0dXJuIGRlY29kZVNpbXBsZVZhbHVlKGtleSwgcmVzdWx0
LCBnX3ZhcmlhbnRfZ2V0X2Jvb2xlYW4pOworfQorCitib29sIEtleWVkRGVjb2RlckdsaWI6OmRl
Y29kZVVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgdWludDMyX3QmIHJlc3VsdCkKK3sKKyAgICBy
ZXR1cm4gZGVjb2RlU2ltcGxlVmFsdWUoa2V5LCByZXN1bHQsIGdfdmFyaWFudF9nZXRfdWludDMy
KTsKK30KKworYm9vbCBLZXllZERlY29kZXJHbGliOjpkZWNvZGVJbnQzMihjb25zdCBTdHJpbmcm
IGtleSwgaW50MzJfdCYgcmVzdWx0KQoreworICAgIHJldHVybiBkZWNvZGVTaW1wbGVWYWx1ZShr
ZXksIHJlc3VsdCwgZ192YXJpYW50X2dldF9pbnQzMik7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVy
R2xpYjo6ZGVjb2RlSW50NjQoY29uc3QgU3RyaW5nJiBrZXksIGludDY0X3QmIHJlc3VsdCkKK3sK
KyAgICByZXR1cm4gZGVjb2RlU2ltcGxlVmFsdWUoa2V5LCByZXN1bHQsIGdfdmFyaWFudF9nZXRf
aW50NjQpOworfQorCitib29sIEtleWVkRGVjb2RlckdsaWI6OmRlY29kZUZsb2F0KGNvbnN0IFN0
cmluZyYga2V5LCBmbG9hdCYgcmVzdWx0KQoreworICAgIHJldHVybiBkZWNvZGVTaW1wbGVWYWx1
ZShrZXksIHJlc3VsdCwgZ192YXJpYW50X2dldF9kb3VibGUpOworfQorCitib29sIEtleWVkRGVj
b2RlckdsaWI6OmRlY29kZURvdWJsZShjb25zdCBTdHJpbmcmIGtleSwgZG91YmxlJiByZXN1bHQp
Cit7CisgICAgcmV0dXJuIGRlY29kZVNpbXBsZVZhbHVlKGtleSwgcmVzdWx0LCBnX3ZhcmlhbnRf
Z2V0X2RvdWJsZSk7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyR2xpYjo6ZGVjb2RlU3RyaW5nKGNv
bnN0IFN0cmluZyYga2V5LCBTdHJpbmcmIHJlc3VsdCkKK3sKKyAgICBHUmVmUHRyPEdWYXJpYW50
PiB2YWx1ZSA9IG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKS5nZXQoa2V5KTsKKyAgICBpZiAoIXZh
bHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXN1bHQgPSBTdHJpbmc6OmZyb21V
VEY4KGdfdmFyaWFudF9nZXRfc3RyaW5nKHZhbHVlLmdldCgpLCBudWxscHRyKSk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyR2xpYjo6YmVnaW5PYmplY3QoY29uc3Qg
U3RyaW5nJiBrZXkpCit7CisgICAgR1JlZlB0cjxHVmFyaWFudD4gdmFsdWUgPSBtX2RpY3Rpb25h
cnlTdGFjay5sYXN0KCkuZ2V0KGtleSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgbV9kaWN0aW9uYXJ5U3RhY2suYXBwZW5kKGRpY3Rpb25hcnlGcm9tR1Zh
cmlhbnQodmFsdWUuZ2V0KCkpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBLZXllZERl
Y29kZXJHbGliOjplbmRPYmplY3QoKQoreworICAgIG1fZGljdGlvbmFyeVN0YWNrLnJlbW92ZUxh
c3QoKTsKK30KKworYm9vbCBLZXllZERlY29kZXJHbGliOjpiZWdpbkFycmF5KGNvbnN0IFN0cmlu
ZyYga2V5KQoreworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhbHVlID0gbV9kaWN0aW9uYXJ5U3Rh
Y2subGFzdCgpLmdldChrZXkpOworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIG1fYXJyYXlTdGFjay5hcHBlbmQodmFsdWUuZ2V0KCkpOworICAgIG1fYXJyYXlJ
bmRleFN0YWNrLmFwcGVuZCgwKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBLZXllZERl
Y29kZXJHbGliOjpiZWdpbkFycmF5RWxlbWVudCgpCit7CisgICAgaWYgKG1fYXJyYXlJbmRleFN0
YWNrLmxhc3QoKSA+PSBnX3ZhcmlhbnRfbl9jaGlsZHJlbihtX2FycmF5U3RhY2subGFzdCgpKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR1JlZlB0cjxHVmFyaWFudD4gdmFyaWFudCA9
IGFkb3B0R1JlZihnX3ZhcmlhbnRfZ2V0X2NoaWxkX3ZhbHVlKG1fYXJyYXlTdGFjay5sYXN0KCks
IG1fYXJyYXlJbmRleFN0YWNrLmxhc3QoKSsrKSk7CisgICAgbV9kaWN0aW9uYXJ5U3RhY2suYXBw
ZW5kKGRpY3Rpb25hcnlGcm9tR1ZhcmlhbnQodmFyaWFudC5nZXQoKSkpOworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIEtleWVkRGVjb2RlckdsaWI6OmVuZEFycmF5RWxlbWVudCgpCit7Cisg
ICAgbV9kaWN0aW9uYXJ5U3RhY2sucmVtb3ZlTGFzdCgpOworfQorCit2b2lkIEtleWVkRGVjb2Rl
ckdsaWI6OmVuZEFycmF5KCkKK3sKKyAgICBtX2FycmF5U3RhY2sucmVtb3ZlTGFzdCgpOworICAg
IG1fYXJyYXlJbmRleFN0YWNrLnJlbW92ZUxhc3QoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2xpYi9LZXllZERlY29k
ZXJHbGliLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL0tleWVkRGVjb2RlckdsaWIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2U4OGUxCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2xpYi9LZXllZERlY29kZXJHbGliLmgK
QEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FpYSBTLkwuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgS2V5ZWREZWNvZGVyR2xpYl9oCisjZGVmaW5lIEtleWVkRGVjb2Rl
ckdsaWJfaAorCisjaW5jbHVkZSAiS2V5ZWRDb2RpbmcuaCIKKyNpbmNsdWRlIDxnbGliLmg+Cisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEtleWVkRGVjb2RlckdsaWIg
ZmluYWwgOiBwdWJsaWMgS2V5ZWREZWNvZGVyIHsKK3B1YmxpYzoKKyAgICBLZXllZERlY29kZXJH
bGliKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCk7CisgICAgdmlydHVhbCB+S2V5ZWREZWNv
ZGVyR2xpYigpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVC
eXRlcyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgdWludDhfdComLCBzaXplX3QmKSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlQm9vbChjb25zdCBTdHJpbmcmIGtleSwgYm9vbCYp
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVVSW50MzIoY29uc3QgU3RyaW5nJiBr
ZXksIHVpbnQzMl90Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGRlY29kZUludDMyKGNv
bnN0IFN0cmluZyYga2V5LCBpbnQzMl90Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGRl
Y29kZUludDY0KGNvbnN0IFN0cmluZyYga2V5LCBpbnQ2NF90Jikgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCBib29sIGRlY29kZUZsb2F0KGNvbnN0IFN0cmluZyYga2V5LCBmbG9hdCYpIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVEb3VibGUoY29uc3QgU3RyaW5nJiBrZXksIGRvdWJs
ZSYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVTdHJpbmcoY29uc3QgU3RyaW5n
JiBrZXksIFN0cmluZyYpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBib29sIGJlZ2luT2JqZWN0
KGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kT2JqZWN0
KCkgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIGJvb2wgYmVnaW5BcnJheShjb25zdCBTdHJpbmcm
IGtleSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGJlZ2luQXJyYXlFbGVtZW50KCkgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuZEFycmF5RWxlbWVudCgpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBlbmRBcnJheSgpIG92ZXJyaWRlOworCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgRj4gYm9vbCBkZWNvZGVTaW1wbGVWYWx1ZShjb25zdCBTdHJpbmcmIGtl
eSwgVCYgcmVzdWx0LCBGIGdldEZ1bmN0aW9uKTsKKyAgICBIYXNoTWFwPFN0cmluZywgR1JlZlB0
cjxHVmFyaWFudD4+IGRpY3Rpb25hcnlGcm9tR1ZhcmlhbnQoR1ZhcmlhbnQqKTsKKworICAgIFZl
Y3RvcjxIYXNoTWFwPFN0cmluZywgR1JlZlB0cjxHVmFyaWFudD4+PiBtX2RpY3Rpb25hcnlTdGFj
azsKKyAgICBWZWN0b3I8R1ZhcmlhbnQqLCAxNj4gbV9hcnJheVN0YWNrOworICAgIFZlY3Rvcjx1
bnNpZ25lZD4gbV9hcnJheUluZGV4U3RhY2s7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBLZXllZERlY29kZXJHbGliX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dsaWIvS2V5ZWRFbmNvZGVyR2xpYi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9nbGliL0tleWVkRW5jb2RlckdsaWIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmQ0OTIxMzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9nbGliL0tleWVkRW5jb2RlckdsaWIuY3BwCkBAIC0wLDAgKzEsMTM4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJLZXllZEVuY29kZXJHbGliLmgiCisKKyNpbmNsdWRlICJTaGFy
ZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworc3RkOjp1bmlxdWVfcHRyPEtleWVkRW5jb2Rlcj4gS2V5ZWRFbmNvZGVyOjpl
bmNvZGVyKCkKK3sKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxLZXllZEVuY29kZXJHbGli
PigpOworfQorCitLZXllZEVuY29kZXJHbGliOjpLZXllZEVuY29kZXJHbGliKCkKK3sKKyAgICBn
X3ZhcmlhbnRfYnVpbGRlcl9pbml0KCZtX3ZhcmlhbnRCdWlsZGVyLCBHX1ZBUklBTlRfVFlQRSgi
YXtzdn0iKSk7CisgICAgbV92YXJpYW50QnVpbGRlclN0YWNrLmFwcGVuZCgmbV92YXJpYW50QnVp
bGRlcik7Cit9CisKK0tleWVkRW5jb2RlckdsaWI6On5LZXllZEVuY29kZXJHbGliKCkKK3sKKyAg
ICBBU1NFUlQobV92YXJpYW50QnVpbGRlclN0YWNrLnNpemUoKSA9PSAxKTsKKyAgICBBU1NFUlQo
bV92YXJpYW50QnVpbGRlclN0YWNrLmxhc3QoKSA9PSAmbV92YXJpYW50QnVpbGRlcik7CisgICAg
QVNTRVJUKG1fYXJyYXlTdGFjay5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtX29iamVjdFN0YWNr
LmlzRW1wdHkoKSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyR2xpYjo6ZW5jb2RlQnl0ZXMoY29u
c3QgU3RyaW5nJiBrZXksIGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3Qgc2l6ZSkKK3sKKyAg
ICBHUmVmUHRyPEdCeXRlcz4gZ0J5dGVzID0gYWRvcHRHUmVmKGdfYnl0ZXNfbmV3X3N0YXRpYyhi
eXRlcywgc2l6ZSkpOworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChtX3ZhcmlhbnRCdWlsZGVy
U3RhY2subGFzdCgpLCAie3N2fSIsIGtleS51dGY4KCkuZGF0YSgpLCBnX3ZhcmlhbnRfbmV3X2Zy
b21fYnl0ZXMoR19WQVJJQU5UX1RZUEUoImF5IiksIGdCeXRlcy5nZXQoKSwgVFJVRSkpOworfQor
Cit2b2lkIEtleWVkRW5jb2RlckdsaWI6OmVuY29kZUJvb2woY29uc3QgU3RyaW5nJiBrZXksIGJv
b2wgdmFsdWUpCit7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJT
dGFjay5sYXN0KCksICJ7c3Z9Iiwga2V5LnV0ZjgoKS5kYXRhKCksIGdfdmFyaWFudF9uZXdfYm9v
bGVhbih2YWx1ZSkpOworfQorCit2b2lkIEtleWVkRW5jb2RlckdsaWI6OmVuY29kZVVJbnQzMihj
b25zdCBTdHJpbmcmIGtleSwgdWludDMyX3QgdmFsdWUpCit7CisgICAgZ192YXJpYW50X2J1aWxk
ZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCksICJ7c3Z9Iiwga2V5LnV0ZjgoKS5k
YXRhKCksIGdfdmFyaWFudF9uZXdfdWludDMyKHZhbHVlKSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNv
ZGVyR2xpYjo6ZW5jb2RlSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIGludDMyX3QgdmFsdWUpCit7
CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCks
ICJ7c3Z9Iiwga2V5LnV0ZjgoKS5kYXRhKCksIGdfdmFyaWFudF9uZXdfaW50MzIodmFsdWUpKTsK
K30KKwordm9pZCBLZXllZEVuY29kZXJHbGliOjplbmNvZGVJbnQ2NChjb25zdCBTdHJpbmcmIGtl
eSwgaW50NjRfdCB2YWx1ZSkKK3sKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQobV92YXJpYW50
QnVpbGRlclN0YWNrLmxhc3QoKSwgIntzdn0iLCBrZXkudXRmOCgpLmRhdGEoKSwgZ192YXJpYW50
X25ld19pbnQ2NCh2YWx1ZSkpOworfQorCit2b2lkIEtleWVkRW5jb2RlckdsaWI6OmVuY29kZUZs
b2F0KGNvbnN0IFN0cmluZyYga2V5LCBmbG9hdCB2YWx1ZSkKK3sKKyAgICBlbmNvZGVEb3VibGUo
a2V5LCB2YWx1ZSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyR2xpYjo6ZW5jb2RlRG91YmxlKGNv
bnN0IFN0cmluZyYga2V5LCBkb3VibGUgdmFsdWUpCit7CisgICAgZ192YXJpYW50X2J1aWxkZXJf
YWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCksICJ7c3Z9Iiwga2V5LnV0ZjgoKS5kYXRh
KCksIGdfdmFyaWFudF9uZXdfZG91YmxlKHZhbHVlKSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVy
R2xpYjo6ZW5jb2RlU3RyaW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVl
KQoreworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChtX3ZhcmlhbnRCdWlsZGVyU3RhY2subGFz
dCgpLCAie3N2fSIsIGtleS51dGY4KCkuZGF0YSgpLCBnX3ZhcmlhbnRfbmV3X3N0cmluZyh2YWx1
ZS51dGY4KCkuZGF0YSgpKSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyR2xpYjo6YmVnaW5PYmpl
Y3QoY29uc3QgU3RyaW5nJiBrZXkpCit7CisgICAgR1JlZlB0cjxHVmFyaWFudEJ1aWxkZXI+IGJ1
aWxkZXIgPSBhZG9wdEdSZWYoZ192YXJpYW50X2J1aWxkZXJfbmV3KEdfVkFSSUFOVF9UWVBFKCJh
YXtzdn0iKSkpOworICAgIG1fb2JqZWN0U3RhY2suYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGtleSwg
YnVpbGRlcikpOworICAgIG1fdmFyaWFudEJ1aWxkZXJTdGFjay5hcHBlbmQoYnVpbGRlci5nZXQo
KSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyR2xpYjo6ZW5kT2JqZWN0KCkKK3sKKyAgICBHVmFy
aWFudEJ1aWxkZXIqIGJ1aWxkZXIgPSBtX3ZhcmlhbnRCdWlsZGVyU3RhY2sudGFrZUxhc3QoKTsK
KyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQobV92YXJpYW50QnVpbGRlclN0YWNrLmxhc3QoKSwg
Intzdn0iLCBtX29iamVjdFN0YWNrLmxhc3QoKS5maXJzdC51dGY4KCkuZGF0YSgpLCBnX3Zhcmlh
bnRfYnVpbGRlcl9lbmQoYnVpbGRlcikpOworICAgIG1fb2JqZWN0U3RhY2sucmVtb3ZlTGFzdCgp
OworfQorCit2b2lkIEtleWVkRW5jb2RlckdsaWI6OmJlZ2luQXJyYXkoY29uc3QgU3RyaW5nJiBr
ZXkpCit7CisgICAgbV9hcnJheVN0YWNrLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihrZXksIGFkb3B0
R1JlZihnX3ZhcmlhbnRfYnVpbGRlcl9uZXcoR19WQVJJQU5UX1RZUEUoImFhe3N2fSIpKSkpKTsK
K30KKwordm9pZCBLZXllZEVuY29kZXJHbGliOjpiZWdpbkFycmF5RWxlbWVudCgpCit7CisgICAg
bV92YXJpYW50QnVpbGRlclN0YWNrLmFwcGVuZChnX3ZhcmlhbnRfYnVpbGRlcl9uZXcoR19WQVJJ
QU5UX1RZUEUoImF7c3Z9IikpKTsKK30KKwordm9pZCBLZXllZEVuY29kZXJHbGliOjplbmRBcnJh
eUVsZW1lbnQoKQoreworICAgIEdSZWZQdHI8R1ZhcmlhbnRCdWlsZGVyPiB2YXJpYW50QnVpbGRl
ciA9IGFkb3B0R1JlZihtX3ZhcmlhbnRCdWlsZGVyU3RhY2sudGFrZUxhc3QoKSk7CisgICAgZ192
YXJpYW50X2J1aWxkZXJfYWRkX3ZhbHVlKG1fYXJyYXlTdGFjay5sYXN0KCkuc2Vjb25kLmdldCgp
LCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQodmFyaWFudEJ1aWxkZXIuZ2V0KCkpKTsKK30KKwordm9p
ZCBLZXllZEVuY29kZXJHbGliOjplbmRBcnJheSgpCit7CisgICAgZ192YXJpYW50X2J1aWxkZXJf
YWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCksICJ7c3Z9IiwgbV9hcnJheVN0YWNrLmxh
c3QoKS5maXJzdC51dGY4KCkuZGF0YSgpLCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQobV9hcnJheVN0
YWNrLmxhc3QoKS5zZWNvbmQuZ2V0KCkpKTsKKyAgICBtX2FycmF5U3RhY2sucmVtb3ZlTGFzdCgp
OworfQorCitQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gS2V5ZWRFbmNvZGVyR2xpYjo6ZmluaXNo
RW5jb2RpbmcoKQoreworICAgIGdfYXNzZXJ0KG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCkg
PT0gJm1fdmFyaWFudEJ1aWxkZXIpOworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhcmlhbnQgPSBn
X3ZhcmlhbnRfYnVpbGRlcl9lbmQoJm1fdmFyaWFudEJ1aWxkZXIpOworICAgIEdSZWZQdHI8R0J5
dGVzPiBkYXRhID0gZ192YXJpYW50X2dldF9kYXRhX2FzX2J5dGVzKHZhcmlhbnQuZ2V0KCkpOwor
ICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25l
ZCBjaGFyKj4oZ19ieXRlc19nZXRfZGF0YShkYXRhLmdldCgpLCBudWxscHRyKSksIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihnX2J5dGVzX2dldF9zaXplKGRhdGEuZ2V0KCkpKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ds
aWIvS2V5ZWRFbmNvZGVyR2xpYi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2xpYi9LZXll
ZEVuY29kZXJHbGliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EzMGY0
YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dsaWIvS2V5ZWRF
bmNvZGVyR2xpYi5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
SWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBLZXllZEVuY29kZXJHbGliX2gKKyNkZWZp
bmUgS2V5ZWRFbmNvZGVyR2xpYl9oCisKKyNpbmNsdWRlICJLZXllZENvZGluZy5oIgorI2luY2x1
ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIv
R1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEtleWVkRW5jb2RlckdsaWIgZmluYWwgOiBwdWJsaWMgS2V5ZWRF
bmNvZGVyIHsKK3B1YmxpYzoKKyAgICBLZXllZEVuY29kZXJHbGliKCk7CisgICAgfktleWVkRW5j
b2RlckdsaWIoKTsKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZm
ZXI+IGZpbmlzaEVuY29kaW5nKCkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2
b2lkIGVuY29kZUJ5dGVzKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCB1aW50OF90Kiwgc2l6ZV90
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlQm9vbChjb25zdCBTdHJpbmcmIGtl
eSwgYm9vbCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuY29kZVVJbnQzMihjb25zdCBT
dHJpbmcmIGtleSwgdWludDMyX3QpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVJ
bnQzMihjb25zdCBTdHJpbmcmIGtleSwgaW50MzJfdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIGVuY29kZUludDY0KGNvbnN0IFN0cmluZyYga2V5LCBpbnQ2NF90KSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZW5jb2RlRmxvYXQoY29uc3QgU3RyaW5nJiBrZXksIGZsb2F0KSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlRG91YmxlKGNvbnN0IFN0cmluZyYga2V5LCBk
b3VibGUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVTdHJpbmcoY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCB2b2lkIGJl
Z2luT2JqZWN0KGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZW5kT2JqZWN0KCkgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5BcnJheShjb25z
dCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGJlZ2luQXJyYXlFbGVt
ZW50KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuZEFycmF5RWxlbWVudCgpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmRBcnJheSgpIG92ZXJyaWRlOworCisgICAgR1Zhcmlh
bnRCdWlsZGVyIG1fdmFyaWFudEJ1aWxkZXI7CisgICAgVmVjdG9yPEdWYXJpYW50QnVpbGRlcios
IDE2PiBtX3ZhcmlhbnRCdWlsZGVyU3RhY2s7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcs
IEdSZWZQdHI8R1ZhcmlhbnRCdWlsZGVyPj4sIDE2PiBtX2FycmF5U3RhY2s7CisgICAgVmVjdG9y
PHN0ZDo6cGFpcjxTdHJpbmcsIEdSZWZQdHI8R1ZhcmlhbnRCdWlsZGVyPj4sIDE2PiBtX29iamVj
dFN0YWNrOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gS2V5ZWRF
bmNvZGVyR2xpYl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggY2Y2ZGZhOS4uYjdiYjZhZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDIwIEBACisyMDE1LTA4LTA3ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxl
LmNvbT4KKworICAgICAgICBNb3ZlIGNvbmNyZXRlIEtleWVkRGVjb2Rlci9FbmNvZGVyIGltcGxl
bWVudGF0aW9ucyB0byBXZWJDb3JlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQ3NzU3LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9JREJTZXJpYWxpemF0
aW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6c2VyaWFsaXplSURCS2V5UGF0aCk6CisgICAgICAg
IChXZWJLaXQ6OmRlc2VyaWFsaXplSURCS2V5UGF0aCk6CisgICAgICAgIChXZWJLaXQ6OnNlcmlh
bGl6ZUlEQktleURhdGEpOgorICAgICAgICAoV2ViS2l0OjpkZXNlcmlhbGl6ZUlEQktleURhdGEp
OgorICAgICAgICAKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBQbGF0
Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisKIDIwMTUtMDgtMDYgIE1hdHQgUmFqY2EgIDxtcmFqY2FAYXBwbGUuY29tPgogCiAgICAg
ICAgIE1lZGlhIFNlc3Npb246IG5vdGlmeSBmb2N1cyBtYW5hZ2VyIGNsaWVudHMgd2hlbiB0aGUg
cGxheWluZyBzdGF0ZSBvZiB0aGUgZm9jdXNlZCBtZWRpYSBlbGVtZW50IGNoYW5nZXMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvSURCU2VyaWFs
aXphdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0lE
QlNlcmlhbGl6YXRpb24uY3BwCmluZGV4IDdkNzMwYmUuLmExMjVkNmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvSURCU2VyaWFsaXphdGlvbi5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9JREJTZXJp
YWxpemF0aW9uLmNwcApAQCAtMjgsMTAgKzI4LDkgQEAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKIAogI2luY2x1ZGUgIkFyZ3VtZW50RW5jb2Rlci5oIgotI2luY2x1ZGUgIktleWVkRGVj
b2Rlci5oIgotI2luY2x1ZGUgIktleWVkRW5jb2Rlci5oIgogI2luY2x1ZGUgPFdlYkNvcmUvSURC
S2V5RGF0YS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSURCS2V5UGF0aC5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvS2V5ZWRDb2RpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTM5
LDkgKzM4LDkgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHNl
cmlhbGl6ZUlEQktleVBhdGgoY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKIHsKLSAgICBLZXll
ZEVuY29kZXIgZW5jb2RlcjsKLSAgICBrZXlQYXRoLmVuY29kZShlbmNvZGVyKTsKLSAgICByZXR1
cm4gZW5jb2Rlci5maW5pc2hFbmNvZGluZygpOworICAgIGF1dG8gZW5jb2RlciA9IEtleWVkRW5j
b2Rlcjo6ZW5jb2RlcigpOworICAgIGtleVBhdGguZW5jb2RlKCplbmNvZGVyKTsKKyAgICByZXR1
cm4gZW5jb2Rlci0+ZmluaXNoRW5jb2RpbmcoKTsKIH0KIAogYm9vbCBkZXNlcmlhbGl6ZUlEQktl
eVBhdGgoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIElEQktleVBhdGgmIHJlc3Vs
dCkKQEAgLTQ5LDE1ICs0OCwxNSBAQCBib29sIGRlc2VyaWFsaXplSURCS2V5UGF0aChjb25zdCB1
aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSwgSURCS2V5UGF0aCYgcmVzdWx0KQogICAgIGlmICgh
ZGF0YSB8fCAhc2l6ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgS2V5ZWREZWNvZGVy
IGRlY29kZXIoZGF0YSwgc2l6ZSk7Ci0gICAgcmV0dXJuIElEQktleVBhdGg6OmRlY29kZShkZWNv
ZGVyLCByZXN1bHQpOworICAgIGF1dG8gZGVjb2RlciA9IEtleWVkRGVjb2Rlcjo6ZGVjb2Rlcihk
YXRhLCBzaXplKTsKKyAgICByZXR1cm4gSURCS2V5UGF0aDo6ZGVjb2RlKCpkZWNvZGVyLCByZXN1
bHQpOwogfQogCiBSZWZQdHI8U2hhcmVkQnVmZmVyPiBzZXJpYWxpemVJREJLZXlEYXRhKGNvbnN0
IElEQktleURhdGEmIGtleSkKIHsKLSAgICBLZXllZEVuY29kZXIgZW5jb2RlcjsKLSAgICBrZXku
ZW5jb2RlKGVuY29kZXIpOwotICAgIHJldHVybiBlbmNvZGVyLmZpbmlzaEVuY29kaW5nKCk7Cisg
ICAgYXV0byBlbmNvZGVyID0gS2V5ZWRFbmNvZGVyOjplbmNvZGVyKCk7CisgICAga2V5LmVuY29k
ZSgqZW5jb2Rlcik7CisgICAgcmV0dXJuIGVuY29kZXItPmZpbmlzaEVuY29kaW5nKCk7CiB9CiAK
IGJvb2wgZGVzZXJpYWxpemVJREJLZXlEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBz
aXplLCBJREJLZXlEYXRhJiByZXN1bHQpCkBAIC02NSw4ICs2NCw4IEBAIGJvb2wgZGVzZXJpYWxp
emVJREJLZXlEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBJREJLZXlEYXRh
JiByZXN1bHQpCiAgICAgaWYgKCFkYXRhIHx8ICFzaXplKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBLZXllZERlY29kZXIgZGVjb2RlcihkYXRhLCBzaXplKTsKLSAgICByZXR1cm4gSURC
S2V5RGF0YTo6ZGVjb2RlKGRlY29kZXIsIHJlc3VsdCk7CisgICAgYXV0byBkZWNvZGVyID0gS2V5
ZWREZWNvZGVyOjpkZWNvZGVyKGRhdGEsIHNpemUpOworICAgIHJldHVybiBJREJLZXlEYXRhOjpk
ZWNvZGUoKmRlY29kZXIsIHJlc3VsdCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCBlNDM1ZTgxLi4wNWE1MjhmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybUVmbC5jbWFrZQpAQCAtNDcsOSArNDcsNiBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJD
RVMKICAgICBTaGFyZWQvZWZsL1Byb2Nlc3NFeGVjdXRhYmxlUGF0aEVmbC5jcHAKICAgICBTaGFy
ZWQvZWZsL1dlYkV2ZW50RmFjdG9yeS5jcHAKIAotICAgIFNoYXJlZC9nbGliL0tleWVkRGVjb2Rl
ci5jcHAKLSAgICBTaGFyZWQvZ2xpYi9LZXllZEVuY29kZXIuY3BwCi0KICAgICBTaGFyZWQvbGlu
dXgvV2ViTWVtb3J5U2FtcGxlckxpbnV4LmNwcAogCiAgICAgU2hhcmVkL2xpbnV4L1NlY2NvbXBG
aWx0ZXJzL09wZW5TeXNjYWxsLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZv
cm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCA2MTEz
ZTYxLi5iZDlmNzI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFr
ZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtNjIsOCArNjIsNiBA
QCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKIAogICAgIFNoYXJlZC9jYWlyby9TaGFyZWFi
bGVCaXRtYXBDYWlyby5jcHAKIAotICAgIFNoYXJlZC9nbGliL0tleWVkRGVjb2Rlci5jcHAKLSAg
ICBTaGFyZWQvZ2xpYi9LZXllZEVuY29kZXIuY3BwCiAgICAgU2hhcmVkL2d0ay9Bcmd1bWVudENv
ZGVyc0d0ay5jcHAKICAgICBTaGFyZWQvZ3RrL05hdGl2ZUNvbnRleHRNZW51SXRlbUd0ay5jcHAK
ICAgICBTaGFyZWQvZ3RrL05hdGl2ZVdlYktleWJvYXJkRXZlbnRHdGsuY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2YvS2V5ZWREZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9jZi9LZXllZERlY29kZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAyYmEzZmMxLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9jZi9LZXll
ZERlY29kZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTc4ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiS2V5ZWREZWNvZGVyLmgiCi0KLSNpbmNs
dWRlIDx3dGYvY2YvVHlwZUNhc3RzQ0YuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLUtleWVkRGVjb2Rlcjo6S2V5ZWREZWNvZGVyKGNv
bnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQotewotICAgIGF1dG8gY2ZEYXRhID0gYWRv
cHRDRihDRkRhdGFDcmVhdGVXaXRoQnl0ZXNOb0NvcHkoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZGF0
YSwgc2l6ZSwga0NGQWxsb2NhdG9yTnVsbCkpOwotCi0gICAgaWYgKGF1dG8gcm9vdERpY3Rpb25h
cnkgPSBhZG9wdENGKGR5bmFtaWNfY2ZfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENGUHJvcGVydHlM
aXN0Q3JlYXRlV2l0aERhdGEoa0NGQWxsb2NhdG9yRGVmYXVsdCwgY2ZEYXRhLmdldCgpLCBrQ0ZQ
cm9wZXJ0eUxpc3RJbW11dGFibGUsIG51bGxwdHIsIG51bGxwdHIpKSkpCi0gICAgICAgIG1fcm9v
dERpY3Rpb25hcnkgPSBXVEY6Om1vdmUocm9vdERpY3Rpb25hcnkpOwotICAgIGVsc2UKLSAgICAg
ICAgbV9yb290RGljdGlvbmFyeSA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9j
YXRvckRlZmF1bHQsIG51bGxwdHIsIG51bGxwdHIsIDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNh
bGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLSAgICBtX2RpY3Rp
b25hcnlTdGFjay5hcHBlbmQobV9yb290RGljdGlvbmFyeS5nZXQoKSk7Ci19Ci0KLUtleWVkRGVj
b2Rlcjo6fktleWVkRGVjb2RlcigpCi17Ci0gICAgQVNTRVJUKG1fZGljdGlvbmFyeVN0YWNrLnNp
emUoKSA9PSAxKTsKLSAgICBBU1NFUlQobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpID09IG1fcm9v
dERpY3Rpb25hcnkpOwotICAgIEFTU0VSVChtX2FycmF5U3RhY2suaXNFbXB0eSgpKTsKLSAgICBB
U1NFUlQobV9hcnJheUluZGV4U3RhY2suaXNFbXB0eSgpKTsKLX0KLQotYm9vbCBLZXllZERlY29k
ZXI6OmRlY29kZUJ5dGVzKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCB1aW50OF90KiYgYnl0ZXMs
IHNpemVfdCYgc2l6ZSkKLXsKLSAgICBhdXRvIGRhdGEgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZEYXRh
UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCksIGtleS5j
cmVhdGVDRlN0cmluZygpLmdldCgpKSk7Ci0gICAgaWYgKCFkYXRhKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBieXRlcyA9IENGRGF0YUdldEJ5dGVQdHIoZGF0YSk7Ci0gICAgc2l6ZSA9
IENGRGF0YUdldExlbmd0aChkYXRhKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBLZXll
ZERlY29kZXI6OmRlY29kZUJvb2woY29uc3QgU3RyaW5nJiBrZXksIGJvb2wmIHJlc3VsdCkKLXsK
LSAgICBhdXRvIGJvb2xlYW4gPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZCb29sZWFuUmVmPihDRkRpY3Rp
b25hcnlHZXRWYWx1ZShtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCksIGtleS5jcmVhdGVDRlN0cmlu
ZygpLmdldCgpKSk7Ci0gICAgaWYgKCFib29sZWFuKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICByZXN1bHQgPSBDRkJvb2xlYW5HZXRWYWx1ZShib29sZWFuKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBLZXllZERlY29kZXI6OmRlY29kZVVJbnQzMihjb25zdCBTdHJpbmcmIGtl
eSwgdWludDMyX3QmIHJlc3VsdCkKLXsKLSAgICByZXR1cm4gZGVjb2RlSW50MzIoa2V5LCByZWlu
dGVycHJldF9jYXN0PGludDMyX3QmPihyZXN1bHQpKTsKLX0KLQotYm9vbCBLZXllZERlY29kZXI6
OmRlY29kZUludDMyKGNvbnN0IFN0cmluZyYga2V5LCBpbnQzMl90JiByZXN1bHQpCi17Ci0gICAg
YXV0byBudW1iZXIgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdl
dFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0
KCkpKTsKLSAgICBpZiAoIW51bWJlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0
dXJuIENGTnVtYmVyR2V0VmFsdWUobnVtYmVyLCBrQ0ZOdW1iZXJTSW50MzJUeXBlLCAmcmVzdWx0
KTsKLX0KLQotYm9vbCBLZXllZERlY29kZXI6OmRlY29kZUludDY0KGNvbnN0IFN0cmluZyYga2V5
LCBpbnQ2NF90JiByZXN1bHQpCi17Ci0gICAgYXV0byBudW1iZXIgPSBkeW5hbWljX2NmX2Nhc3Q8
Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3Qo
KSwga2V5LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKTsKLSAgICBpZiAoIW51bWJlcikKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIENGTnVtYmVyR2V0VmFsdWUobnVtYmVyLCBr
Q0ZOdW1iZXJTSW50NjRUeXBlLCAmcmVzdWx0KTsKLX0KLQotYm9vbCBLZXllZERlY29kZXI6OmRl
Y29kZUZsb2F0KGNvbnN0IFN0cmluZyYga2V5LCBmbG9hdCYgcmVzdWx0KQotewotICAgIGF1dG8g
bnVtYmVyID0gZHluYW1pY19jZl9jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1
ZShtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCksIGtleS5jcmVhdGVDRlN0cmluZygpLmdldCgpKSk7
Ci0gICAgaWYgKCFudW1iZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBD
Rk51bWJlckdldFZhbHVlKG51bWJlciwga0NGTnVtYmVyRmxvYXRUeXBlLCAmcmVzdWx0KTsKLX0K
LQotYm9vbCBLZXllZERlY29kZXI6OmRlY29kZURvdWJsZShjb25zdCBTdHJpbmcmIGtleSwgZG91
YmxlJiByZXN1bHQpCi17Ci0gICAgYXV0byBudW1iZXIgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZOdW1i
ZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5
LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKTsKLSAgICBpZiAoIW51bWJlcikKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIENGTnVtYmVyR2V0VmFsdWUobnVtYmVyLCBrQ0ZOdW1i
ZXJEb3VibGVUeXBlLCAmcmVzdWx0KTsKLX0KLQotYm9vbCBLZXllZERlY29kZXI6OmRlY29kZVN0
cmluZyhjb25zdCBTdHJpbmcmIGtleSwgU3RyaW5nJiByZXN1bHQpCi17Ci0gICAgYXV0byBzdHJp
bmcgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKG1f
ZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKTsKLSAg
ICBpZiAoIXN0cmluZykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmVzdWx0ID0gc3Ry
aW5nOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEtleWVkRGVjb2Rlcjo6YmVnaW5PYmpl
Y3QoY29uc3QgU3RyaW5nJiBrZXkpCi17Ci0gICAgYXV0byBkaWN0aW9uYXJ5ID0gZHluYW1pY19j
Zl9jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUobV9kaWN0aW9uYXJ5
U3RhY2subGFzdCgpLCBrZXkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOwotICAgIGlmICghZGlj
dGlvbmFyeSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9kaWN0aW9uYXJ5U3RhY2su
YXBwZW5kKGRpY3Rpb25hcnkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEtleWVkRGVj
b2Rlcjo6ZW5kT2JqZWN0KCkKLXsKLSAgICBtX2RpY3Rpb25hcnlTdGFjay5yZW1vdmVMYXN0KCk7
Ci19Ci0KLWJvb2wgS2V5ZWREZWNvZGVyOjpiZWdpbkFycmF5KGNvbnN0IFN0cmluZyYga2V5KQot
ewotICAgIGF1dG8gYXJyYXkgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZBcnJheVJlZj4oQ0ZEaWN0aW9u
YXJ5R2V0VmFsdWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXkuY3JlYXRlQ0ZTdHJpbmco
KS5nZXQoKSkpOwotICAgIGlmICghYXJyYXkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IENGQXJyYXlHZXRDb3VudChhcnJheSk7ICsraSkgewot
ICAgICAgICBDRlR5cGVSZWYgb2JqZWN0ID0gQ0ZBcnJheUdldFZhbHVlQXRJbmRleChhcnJheSwg
aSk7Ci0gICAgICAgIGlmIChDRkdldFR5cGVJRChvYmplY3QpICE9IENGRGljdGlvbmFyeUdldFR5
cGVJRCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIG1fYXJyYXlT
dGFjay5hcHBlbmQoYXJyYXkpOwotICAgIG1fYXJyYXlJbmRleFN0YWNrLmFwcGVuZCgwKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBLZXllZERlY29kZXI6OmJlZ2luQXJyYXlFbGVtZW50
KCkKLXsKLSAgICBpZiAobV9hcnJheUluZGV4U3RhY2subGFzdCgpID49IENGQXJyYXlHZXRDb3Vu
dChtX2FycmF5U3RhY2subGFzdCgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0
byBkaWN0aW9uYXJ5ID0gY2hlY2tlZF9jZl9jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZBcnJheUdl
dFZhbHVlQXRJbmRleChtX2FycmF5U3RhY2subGFzdCgpLCBtX2FycmF5SW5kZXhTdGFjay5sYXN0
KCkrKykpOwotICAgIG1fZGljdGlvbmFyeVN0YWNrLmFwcGVuZChkaWN0aW9uYXJ5KTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBLZXllZERlY29kZXI6OmVuZEFycmF5RWxlbWVudCgpCi17
Ci0gICAgbV9kaWN0aW9uYXJ5U3RhY2sucmVtb3ZlTGFzdCgpOwotfQotCi12b2lkIEtleWVkRGVj
b2Rlcjo6ZW5kQXJyYXkoKQotewotICAgIG1fYXJyYXlTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAg
bV9hcnJheUluZGV4U3RhY2sucmVtb3ZlTGFzdCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9jZi9LZXllZERlY29kZXIuaCBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9jZi9LZXllZERlY29kZXIuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggOThhYjc4NC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvY2YvS2V5ZWREZWNvZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBLZXllZERlY29kZXJfaAotI2RlZmluZSBLZXllZERlY29kZXJfaAot
Ci0jaW5jbHVkZSA8V2ViQ29yZS9LZXllZENvZGluZy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1j
bGFzcyBLZXllZERlY29kZXIgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6S2V5ZWREZWNvZGVyIHsK
LXB1YmxpYzoKLSAgICBLZXllZERlY29kZXIoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90KTsK
LSAgICB2aXJ0dWFsIH5LZXllZERlY29kZXIoKSBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICB2
aXJ0dWFsIGJvb2wgZGVjb2RlQnl0ZXMoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IHVpbnQ4X3Qq
Jiwgc2l6ZV90Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGRlY29kZUJvb2woY29uc3Qg
U3RyaW5nJiBrZXksIGJvb2wmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlVUlu
dDMyKGNvbnN0IFN0cmluZyYga2V5LCB1aW50MzJfdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
Ym9vbCBkZWNvZGVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgaW50MzJfdCYpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVJbnQ2NChjb25zdCBTdHJpbmcmIGtleSwgaW50NjRfdCYp
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVGbG9hdChjb25zdCBTdHJpbmcmIGtl
eSwgZmxvYXQmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlRG91YmxlKGNvbnN0
IFN0cmluZyYga2V5LCBkb3VibGUmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgZGVjb2Rl
U3RyaW5nKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcmKSBvdmVycmlkZTsKLQotICAgIHZpcnR1
YWwgYm9vbCBiZWdpbk9iamVjdChjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCB2b2lkIGVuZE9iamVjdCgpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCBib29sIGJlZ2lu
QXJyYXkoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBiZWdp
bkFycmF5RWxlbWVudCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBlbmRBcnJheUVsZW1l
bnQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5kQXJyYXkoKSBvdmVycmlkZTsKLQot
ICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IG1fcm9vdERpY3Rpb25hcnk7Ci0KLSAgICBW
ZWN0b3I8Q0ZEaWN0aW9uYXJ5UmVmLCAxNj4gbV9kaWN0aW9uYXJ5U3RhY2s7Ci0gICAgVmVjdG9y
PENGQXJyYXlSZWYsIDE2PiBtX2FycmF5U3RhY2s7Ci0gICAgVmVjdG9yPENGSW5kZXg+IG1fYXJy
YXlJbmRleFN0YWNrOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBL
ZXllZERlY29kZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2NmL0tleWVk
RW5jb2Rlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2YvS2V5ZWRFbmNvZGVyLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNmNzJhNS4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvY2YvS2V5ZWRFbmNvZGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDE0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IktleWVkRW5jb2Rlci5oIgotCi0jaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRp
b24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZj4gY3Jl
YXRlRGljdGlvbmFyeSgpCi17Ci0gICAgcmV0dXJuIGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRl
TXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxs
QmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci19Ci0KLUtleWVkRW5j
b2Rlcjo6S2V5ZWRFbmNvZGVyKCkKLSAgICA6IG1fcm9vdERpY3Rpb25hcnkoY3JlYXRlRGljdGlv
bmFyeSgpKQotewotICAgIG1fZGljdGlvbmFyeVN0YWNrLmFwcGVuZChtX3Jvb3REaWN0aW9uYXJ5
LmdldCgpKTsKLX0KLSAgICAKLUtleWVkRW5jb2Rlcjo6fktleWVkRW5jb2RlcigpCi17Ci0gICAg
QVNTRVJUKG1fZGljdGlvbmFyeVN0YWNrLnNpemUoKSA9PSAxKTsKLSAgICBBU1NFUlQobV9kaWN0
aW9uYXJ5U3RhY2subGFzdCgpID09IG1fcm9vdERpY3Rpb25hcnkpOwotICAgIEFTU0VSVChtX2Fy
cmF5U3RhY2suaXNFbXB0eSgpKTsKLX0KLQotdm9pZCBLZXllZEVuY29kZXI6OmVuY29kZUJ5dGVz
KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90IHNpemUpCi17
Ci0gICAgYXV0byBkYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVXaXRoQnl0ZXNOb0NvcHkoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgYnl0ZXMsIHNpemUsIGtDRkFsbG9jYXRvck51bGwpKTsKLSAgICBD
RkRpY3Rpb25hcnlTZXRWYWx1ZShtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCksIGtleS5jcmVhdGVD
RlN0cmluZygpLmdldCgpLCBkYXRhLmdldCgpKTsKLX0KLQotdm9pZCBLZXllZEVuY29kZXI6OmVu
Y29kZUJvb2woY29uc3QgU3RyaW5nJiBrZXksIGJvb2wgdmFsdWUpCi17Ci0gICAgQ0ZEaWN0aW9u
YXJ5U2V0VmFsdWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXkuY3JlYXRlQ0ZTdHJpbmco
KS5nZXQoKSwgdmFsdWUgPyBrQ0ZCb29sZWFuVHJ1ZSA6IGtDRkJvb2xlYW5GYWxzZSk7Ci19Ci0K
LXZvaWQgS2V5ZWRFbmNvZGVyOjplbmNvZGVVSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIHVpbnQz
Ml90IHZhbHVlKQotewotICAgIGF1dG8gbnVtYmVyID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJTSW50MzJUeXBlLCAmdmFsdWUpKTsKLSAgICBD
RkRpY3Rpb25hcnlTZXRWYWx1ZShtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCksIGtleS5jcmVhdGVD
RlN0cmluZygpLmdldCgpLCBudW1iZXIuZ2V0KCkpOwotfQotCi12b2lkIEtleWVkRW5jb2Rlcjo6
ZW5jb2RlSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIGludDMyX3QgdmFsdWUpCi17Ci0gICAgYXV0
byBudW1iZXIgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtD
Rk51bWJlclNJbnQzMlR5cGUsICZ2YWx1ZSkpOwotICAgIENGRGljdGlvbmFyeVNldFZhbHVlKG1f
ZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIG51bWJl
ci5nZXQoKSk7Ci19Ci0KLXZvaWQgS2V5ZWRFbmNvZGVyOjplbmNvZGVJbnQ2NChjb25zdCBTdHJp
bmcmIGtleSwgaW50NjRfdCB2YWx1ZSkKLXsKLSAgICBhdXRvIG51bWJlciA9IGFkb3B0Q0YoQ0ZO
dW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyU0ludDY0VHlwZSwgJnZh
bHVlKSk7Ci0gICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgp
LCBrZXkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgbnVtYmVyLmdldCgpKTsKLX0KLQotdm9pZCBL
ZXllZEVuY29kZXI6OmVuY29kZUZsb2F0KGNvbnN0IFN0cmluZyYga2V5LCBmbG9hdCB2YWx1ZSkK
LXsKLSAgICBhdXRvIG51bWJlciA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9y
RGVmYXVsdCwga0NGTnVtYmVyRmxvYXRUeXBlLCAmdmFsdWUpKTsKLSAgICBDRkRpY3Rpb25hcnlT
ZXRWYWx1ZShtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCksIGtleS5jcmVhdGVDRlN0cmluZygpLmdl
dCgpLCBudW1iZXIuZ2V0KCkpOwotfQotCi12b2lkIEtleWVkRW5jb2Rlcjo6ZW5jb2RlRG91Ymxl
KGNvbnN0IFN0cmluZyYga2V5LCBkb3VibGUgdmFsdWUpCi17Ci0gICAgYXV0byBudW1iZXIgPSBh
ZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckRvdWJs
ZVR5cGUsICZ2YWx1ZSkpOwotICAgIENGRGljdGlvbmFyeVNldFZhbHVlKG1fZGljdGlvbmFyeVN0
YWNrLmxhc3QoKSwga2V5LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIG51bWJlci5nZXQoKSk7Ci19
Ci0KLXZvaWQgS2V5ZWRFbmNvZGVyOjplbmNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBrZXksIGNv
bnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUobV9kaWN0aW9u
YXJ5U3RhY2subGFzdCgpLCBrZXkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgdmFsdWUuY3JlYXRl
Q0ZTdHJpbmcoKS5nZXQoKSk7Ci19Ci0KLXZvaWQgS2V5ZWRFbmNvZGVyOjpiZWdpbk9iamVjdChj
b25zdCBTdHJpbmcmIGtleSkKLXsKLSAgICBhdXRvIGRpY3Rpb25hcnkgPSBjcmVhdGVEaWN0aW9u
YXJ5KCk7Ci0gICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgp
LCBrZXkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgZGljdGlvbmFyeS5nZXQoKSk7Ci0KLSAgICBt
X2RpY3Rpb25hcnlTdGFjay5hcHBlbmQoZGljdGlvbmFyeS5nZXQoKSk7Ci19Ci0KLXZvaWQgS2V5
ZWRFbmNvZGVyOjplbmRPYmplY3QoKQotewotICAgIG1fZGljdGlvbmFyeVN0YWNrLnJlbW92ZUxh
c3QoKTsKLX0KLQotdm9pZCBLZXllZEVuY29kZXI6OmJlZ2luQXJyYXkoY29uc3QgU3RyaW5nJiBr
ZXkpCi17Ci0gICAgYXV0byBhcnJheSA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0ZU11dGFibGUoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgMCwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOwotICAgIENGRGlj
dGlvbmFyeVNldFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5LmNyZWF0ZUNGU3Ry
aW5nKCkuZ2V0KCksIGFycmF5LmdldCgpKTsKLQotICAgIG1fYXJyYXlTdGFjay5hcHBlbmQoYXJy
YXkuZ2V0KCkpOwotfQotCi12b2lkIEtleWVkRW5jb2Rlcjo6YmVnaW5BcnJheUVsZW1lbnQoKQot
ewotICAgIGF1dG8gZGljdGlvbmFyeSA9IGNyZWF0ZURpY3Rpb25hcnkoKTsKLSAgICBDRkFycmF5
QXBwZW5kVmFsdWUobV9hcnJheVN0YWNrLmxhc3QoKSwgZGljdGlvbmFyeS5nZXQoKSk7Ci0KLSAg
ICBtX2RpY3Rpb25hcnlTdGFjay5hcHBlbmQoZGljdGlvbmFyeS5nZXQoKSk7Ci19Ci0KLXZvaWQg
S2V5ZWRFbmNvZGVyOjplbmRBcnJheUVsZW1lbnQoKQotewotICAgIG1fZGljdGlvbmFyeVN0YWNr
LnJlbW92ZUxhc3QoKTsKLX0KLQotdm9pZCBLZXllZEVuY29kZXI6OmVuZEFycmF5KCkKLXsKLSAg
ICBtX2FycmF5U3RhY2sucmVtb3ZlTGFzdCgpOwotfQotCi1QYXNzUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gS2V5ZWRFbmNvZGVyOjpmaW5pc2hFbmNvZGluZygpCi17Ci0gICAgUmV0YWluUHRyPENGRGF0
YVJlZj4gZGF0YSA9IGFkb3B0Q0YoQ0ZQcm9wZXJ0eUxpc3RDcmVhdGVEYXRhKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIG1fcm9vdERpY3Rpb25hcnkuZ2V0KCksIGtDRlByb3BlcnR5TGlzdEJpbmFyeUZv
cm1hdF92MV8wLCAwLCBudWxscHRyKSk7Ci0gICAgaWYgKCFkYXRhKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OndyYXBDRkRhdGEoZGF0YS5nZXQo
KSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL2NmL0tleWVkRW5jb2Rlci5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2NmL0tl
eWVkRW5jb2Rlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMGNhM2JmLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9jZi9LZXllZEVuY29kZXIuaAorKysgL2Rl
di9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEtleWVkRW5jb2Rl
cl9oCi0jZGVmaW5lIEtleWVkRW5jb2Rlcl9oCi0KLSNpbmNsdWRlIDxXZWJDb3JlL0tleWVkQ29k
aW5nLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIEtleWVkRW5jb2RlciBmaW5hbCA6IHB1
YmxpYyBXZWJDb3JlOjpLZXllZEVuY29kZXIgewotcHVibGljOgotICAgIEtleWVkRW5jb2Rlcigp
OwotICAgIH5LZXllZEVuY29kZXIoKTsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpTaGFyZWRCdWZmZXI+IGZpbmlzaEVuY29kaW5nKCkgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0g
ICAgdmlydHVhbCB2b2lkIGVuY29kZUJ5dGVzKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCB1aW50
OF90Kiwgc2l6ZV90KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlQm9vbChjb25z
dCBTdHJpbmcmIGtleSwgYm9vbCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGVuY29kZVVJ
bnQzMihjb25zdCBTdHJpbmcmIGtleSwgdWludDMyX3QpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
dm9pZCBlbmNvZGVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgaW50MzJfdCkgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCB2b2lkIGVuY29kZUludDY0KGNvbnN0IFN0cmluZyYga2V5LCBpbnQ2NF90KSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlRmxvYXQoY29uc3QgU3RyaW5nJiBrZXks
IGZsb2F0KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlRG91YmxlKGNvbnN0IFN0
cmluZyYga2V5LCBkb3VibGUpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVTdHJp
bmcoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwotCi0gICAgdmly
dHVhbCB2b2lkIGJlZ2luT2JqZWN0KGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIHZvaWQgZW5kT2JqZWN0KCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYmVn
aW5BcnJheShjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGJl
Z2luQXJyYXlFbGVtZW50KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGVuZEFycmF5RWxl
bWVudCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBlbmRBcnJheSgpIG92ZXJyaWRlOwot
Ci0gICAgUmV0YWluUHRyPENGTXV0YWJsZURpY3Rpb25hcnlSZWY+IG1fcm9vdERpY3Rpb25hcnk7
Ci0KLSAgICBWZWN0b3I8Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZiwgMTY+IG1fZGljdGlvbmFyeVN0
YWNrOwotICAgIFZlY3RvcjxDRk11dGFibGVBcnJheVJlZiwgMTY+IG1fYXJyYXlTdGFjazsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gS2V5ZWRFbmNvZGVyX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9nbGliL0tleWVkRGVjb2Rlci5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ2xpYi9LZXllZERlY29kZXIuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAzZDIwZDkwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9nbGliL0tleWVkRGVjb2Rlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNjggKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiS2V5ZWREZWNvZGVyLmgiCi0KLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1LZXllZERlY29kZXI6
OktleWVkRGVjb2Rlcihjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBH
UmVmUHRyPEdCeXRlcz4gYnl0ZXMgPSBhZG9wdEdSZWYoZ19ieXRlc19uZXcoZGF0YSwgc2l6ZSkp
OwotICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhcmlhbnQgPSBnX3ZhcmlhbnRfbmV3X2Zyb21fYnl0
ZXMoR19WQVJJQU5UX1RZUEUoImF7c3Z9IiksIGJ5dGVzLmdldCgpLCBUUlVFKTsKLSAgICBtX2Rp
Y3Rpb25hcnlTdGFjay5hcHBlbmQoZGljdGlvbmFyeUZyb21HVmFyaWFudCh2YXJpYW50LmdldCgp
KSk7Ci19Ci0KLUtleWVkRGVjb2Rlcjo6fktleWVkRGVjb2RlcigpCi17Ci0gICAgQVNTRVJUKG1f
ZGljdGlvbmFyeVN0YWNrLnNpemUoKSA9PSAxKTsKLSAgICBBU1NFUlQobV9hcnJheVN0YWNrLmlz
RW1wdHkoKSk7Ci0gICAgQVNTRVJUKG1fYXJyYXlJbmRleFN0YWNrLmlzRW1wdHkoKSk7Ci19Ci0K
LUhhc2hNYXA8U3RyaW5nLCBHUmVmUHRyPEdWYXJpYW50Pj4gS2V5ZWREZWNvZGVyOjpkaWN0aW9u
YXJ5RnJvbUdWYXJpYW50KEdWYXJpYW50KiB2YXJpYW50KQotewotICAgIEhhc2hNYXA8U3RyaW5n
LCBHUmVmUHRyPEdWYXJpYW50Pj4gZGljdGlvbmFyeTsKLSAgICBHVmFyaWFudEl0ZXIgaXRlcjsK
LSAgICBnX3ZhcmlhbnRfaXRlcl9pbml0KCZpdGVyLCB2YXJpYW50KTsKLSAgICBjb25zdCBjaGFy
KiBrZXk7Ci0gICAgR1ZhcmlhbnQqIHZhbHVlOwotICAgIHdoaWxlIChnX3ZhcmlhbnRfaXRlcl9s
b29wKCZpdGVyLCAieyZzdn0iLCAma2V5LCAmdmFsdWUpKQotICAgICAgICBkaWN0aW9uYXJ5LnNl
dChTdHJpbmc6OmZyb21VVEY4KGtleSksIHZhbHVlKTsKLSAgICByZXR1cm4gV1RGOjptb3ZlKGRp
Y3Rpb25hcnkpOwotfQotCi1ib29sIEtleWVkRGVjb2Rlcjo6ZGVjb2RlQnl0ZXMoY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IHVpbnQ4X3QqJiBieXRlcywgc2l6ZV90JiBzaXplKQotewotICAgIEdS
ZWZQdHI8R1ZhcmlhbnQ+IHZhbHVlID0gbV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLmdldChrZXkp
OwotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHNpemUgPSBn
X3ZhcmlhbnRfZ2V0X3NpemUodmFsdWUuZ2V0KCkpOwotICAgIGJ5dGVzID0gc3RhdGljX2Nhc3Q8
Y29uc3QgdWludDhfdCo+KGdfdmFyaWFudF9nZXRfZGF0YSh2YWx1ZS5nZXQoKSkpOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBGPgotYm9vbCBL
ZXllZERlY29kZXI6OmRlY29kZVNpbXBsZVZhbHVlKGNvbnN0IFN0cmluZyYga2V5LCBUJiByZXN1
bHQsIEYgZ2V0RnVuY3Rpb24pCi17Ci0gICAgR1JlZlB0cjxHVmFyaWFudD4gdmFsdWUgPSBtX2Rp
Y3Rpb25hcnlTdGFjay5sYXN0KCkuZ2V0KGtleSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgcmVzdWx0ID0gZ2V0RnVuY3Rpb24odmFsdWUuZ2V0KCkpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEtleWVkRGVjb2Rlcjo6ZGVjb2RlQm9vbChjb25z
dCBTdHJpbmcmIGtleSwgYm9vbCYgcmVzdWx0KQotewotICAgIHJldHVybiBkZWNvZGVTaW1wbGVW
YWx1ZShrZXksIHJlc3VsdCwgZ192YXJpYW50X2dldF9ib29sZWFuKTsKLX0KLQotYm9vbCBLZXll
ZERlY29kZXI6OmRlY29kZVVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgdWludDMyX3QmIHJlc3Vs
dCkKLXsKLSAgICByZXR1cm4gZGVjb2RlU2ltcGxlVmFsdWUoa2V5LCByZXN1bHQsIGdfdmFyaWFu
dF9nZXRfdWludDMyKTsKLX0KLQotYm9vbCBLZXllZERlY29kZXI6OmRlY29kZUludDMyKGNvbnN0
IFN0cmluZyYga2V5LCBpbnQzMl90JiByZXN1bHQpCi17Ci0gICAgcmV0dXJuIGRlY29kZVNpbXBs
ZVZhbHVlKGtleSwgcmVzdWx0LCBnX3ZhcmlhbnRfZ2V0X2ludDMyKTsKLX0KLQotYm9vbCBLZXll
ZERlY29kZXI6OmRlY29kZUludDY0KGNvbnN0IFN0cmluZyYga2V5LCBpbnQ2NF90JiByZXN1bHQp
Ci17Ci0gICAgcmV0dXJuIGRlY29kZVNpbXBsZVZhbHVlKGtleSwgcmVzdWx0LCBnX3ZhcmlhbnRf
Z2V0X2ludDY0KTsKLX0KLQotYm9vbCBLZXllZERlY29kZXI6OmRlY29kZUZsb2F0KGNvbnN0IFN0
cmluZyYga2V5LCBmbG9hdCYgcmVzdWx0KQotewotICAgIHJldHVybiBkZWNvZGVTaW1wbGVWYWx1
ZShrZXksIHJlc3VsdCwgZ192YXJpYW50X2dldF9kb3VibGUpOwotfQotCi1ib29sIEtleWVkRGVj
b2Rlcjo6ZGVjb2RlRG91YmxlKGNvbnN0IFN0cmluZyYga2V5LCBkb3VibGUmIHJlc3VsdCkKLXsK
LSAgICByZXR1cm4gZGVjb2RlU2ltcGxlVmFsdWUoa2V5LCByZXN1bHQsIGdfdmFyaWFudF9nZXRf
ZG91YmxlKTsKLX0KLQotYm9vbCBLZXllZERlY29kZXI6OmRlY29kZVN0cmluZyhjb25zdCBTdHJp
bmcmIGtleSwgU3RyaW5nJiByZXN1bHQpCi17Ci0gICAgR1JlZlB0cjxHVmFyaWFudD4gdmFsdWUg
PSBtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCkuZ2V0KGtleSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmVzdWx0ID0gU3RyaW5nOjpmcm9tVVRGOChnX3Zh
cmlhbnRfZ2V0X3N0cmluZyh2YWx1ZS5nZXQoKSwgbnVsbHB0cikpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIEtleWVkRGVjb2Rlcjo6YmVnaW5PYmplY3QoY29uc3QgU3RyaW5nJiBrZXkp
Ci17Ci0gICAgR1JlZlB0cjxHVmFyaWFudD4gdmFsdWUgPSBtX2RpY3Rpb25hcnlTdGFjay5sYXN0
KCkuZ2V0KGtleSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgbV9kaWN0aW9uYXJ5U3RhY2suYXBwZW5kKGRpY3Rpb25hcnlGcm9tR1ZhcmlhbnQodmFsdWUu
Z2V0KCkpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBLZXllZERlY29kZXI6OmVuZE9i
amVjdCgpCi17Ci0gICAgbV9kaWN0aW9uYXJ5U3RhY2sucmVtb3ZlTGFzdCgpOwotfQotCi1ib29s
IEtleWVkRGVjb2Rlcjo6YmVnaW5BcnJheShjb25zdCBTdHJpbmcmIGtleSkKLXsKLSAgICBHUmVm
UHRyPEdWYXJpYW50PiB2YWx1ZSA9IG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKS5nZXQoa2V5KTsK
LSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2FycmF5U3Rh
Y2suYXBwZW5kKHZhbHVlLmdldCgpKTsKLSAgICBtX2FycmF5SW5kZXhTdGFjay5hcHBlbmQoMCk7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgS2V5ZWREZWNvZGVyOjpiZWdpbkFycmF5RWxl
bWVudCgpCi17Ci0gICAgaWYgKG1fYXJyYXlJbmRleFN0YWNrLmxhc3QoKSA+PSBnX3ZhcmlhbnRf
bl9jaGlsZHJlbihtX2FycmF5U3RhY2subGFzdCgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgR1JlZlB0cjxHVmFyaWFudD4gdmFyaWFudCA9IGFkb3B0R1JlZihnX3ZhcmlhbnRfZ2V0
X2NoaWxkX3ZhbHVlKG1fYXJyYXlTdGFjay5sYXN0KCksIG1fYXJyYXlJbmRleFN0YWNrLmxhc3Qo
KSsrKSk7Ci0gICAgbV9kaWN0aW9uYXJ5U3RhY2suYXBwZW5kKGRpY3Rpb25hcnlGcm9tR1Zhcmlh
bnQodmFyaWFudC5nZXQoKSkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEtleWVkRGVj
b2Rlcjo6ZW5kQXJyYXlFbGVtZW50KCkKLXsKLSAgICBtX2RpY3Rpb25hcnlTdGFjay5yZW1vdmVM
YXN0KCk7Ci19Ci0KLXZvaWQgS2V5ZWREZWNvZGVyOjplbmRBcnJheSgpCi17Ci0gICAgbV9hcnJh
eVN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICBtX2FycmF5SW5kZXhTdGFjay5yZW1vdmVMYXN0KCk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
U2hhcmVkL2dsaWIvS2V5ZWREZWNvZGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ2xpYi9L
ZXllZERlY29kZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGViMWM2MS4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ2xpYi9LZXllZERlY29kZXIuaAorKysg
L2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgSWdh
aWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEtleWVkRGVjb2Rlcl9oCi0jZGVmaW5lIEtleWVk
RGVjb2Rlcl9oCi0KLSNpbmNsdWRlIDxXZWJDb3JlL0tleWVkQ29kaW5nLmg+Ci0jaW5jbHVkZSA8
Z2xpYi5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1Jl
ZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIEtleWVkRGVj
b2RlciBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpLZXllZERlY29kZXIgewotcHVibGljOgotICAg
IEtleWVkRGVjb2Rlcihjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QpOwotICAgIHZpcnR1YWwg
fktleWVkRGVjb2RlcigpIG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgYm9vbCBk
ZWNvZGVCeXRlcyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgdWludDhfdComLCBzaXplX3QmKSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlQm9vbChjb25zdCBTdHJpbmcmIGtleSwg
Ym9vbCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVVSW50MzIoY29uc3QgU3Ry
aW5nJiBrZXksIHVpbnQzMl90Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGRlY29kZUlu
dDMyKGNvbnN0IFN0cmluZyYga2V5LCBpbnQzMl90Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBi
b29sIGRlY29kZUludDY0KGNvbnN0IFN0cmluZyYga2V5LCBpbnQ2NF90Jikgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCBib29sIGRlY29kZUZsb2F0KGNvbnN0IFN0cmluZyYga2V5LCBmbG9hdCYpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVEb3VibGUoY29uc3QgU3RyaW5nJiBrZXks
IGRvdWJsZSYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVTdHJpbmcoY29uc3Qg
U3RyaW5nJiBrZXksIFN0cmluZyYpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCBib29sIGJlZ2lu
T2JqZWN0KGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5k
T2JqZWN0KCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgYmVnaW5BcnJheShjb25zdCBT
dHJpbmcmIGtleSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGJlZ2luQXJyYXlFbGVtZW50
KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGVuZEFycmF5RWxlbWVudCgpIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgdm9pZCBlbmRBcnJheSgpIG92ZXJyaWRlOwotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgRj4gYm9vbCBkZWNvZGVTaW1wbGVWYWx1ZShjb25zdCBTdHJp
bmcmIGtleSwgVCYgcmVzdWx0LCBGIGdldEZ1bmN0aW9uKTsKLSAgICBIYXNoTWFwPFN0cmluZywg
R1JlZlB0cjxHVmFyaWFudD4+IGRpY3Rpb25hcnlGcm9tR1ZhcmlhbnQoR1ZhcmlhbnQqKTsKLQot
ICAgIFZlY3RvcjxIYXNoTWFwPFN0cmluZywgR1JlZlB0cjxHVmFyaWFudD4+PiBtX2RpY3Rpb25h
cnlTdGFjazsKLSAgICBWZWN0b3I8R1ZhcmlhbnQqLCAxNj4gbV9hcnJheVN0YWNrOwotICAgIFZl
Y3Rvcjx1bnNpZ25lZD4gbV9hcnJheUluZGV4U3RhY2s7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKLQotI2VuZGlmIC8vIEtleWVkRGVjb2Rlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvZ2xpYi9LZXllZEVuY29kZXIuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L2dsaWIvS2V5ZWRFbmNvZGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmNk
ZmQ4ZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ2xpYi9LZXllZEVuY29k
ZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIktleWVkRW5jb2Rlci5oIgotCi0jaW5jbHVkZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotS2V5ZWRFbmNvZGVyOjpLZXllZEVuY29kZXIo
KQotewotICAgIGdfdmFyaWFudF9idWlsZGVyX2luaXQoJm1fdmFyaWFudEJ1aWxkZXIsIEdfVkFS
SUFOVF9UWVBFKCJhe3N2fSIpKTsKLSAgICBtX3ZhcmlhbnRCdWlsZGVyU3RhY2suYXBwZW5kKCZt
X3ZhcmlhbnRCdWlsZGVyKTsKLX0KLQotS2V5ZWRFbmNvZGVyOjp+S2V5ZWRFbmNvZGVyKCkKLXsK
LSAgICBBU1NFUlQobV92YXJpYW50QnVpbGRlclN0YWNrLnNpemUoKSA9PSAxKTsKLSAgICBBU1NF
UlQobV92YXJpYW50QnVpbGRlclN0YWNrLmxhc3QoKSA9PSAmbV92YXJpYW50QnVpbGRlcik7Ci0g
ICAgQVNTRVJUKG1fYXJyYXlTdGFjay5pc0VtcHR5KCkpOwotICAgIEFTU0VSVChtX29iamVjdFN0
YWNrLmlzRW1wdHkoKSk7Ci19Ci0KLXZvaWQgS2V5ZWRFbmNvZGVyOjplbmNvZGVCeXRlcyhjb25z
dCBTdHJpbmcmIGtleSwgY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBzaXplKQotewotICAg
IEdSZWZQdHI8R0J5dGVzPiBnQnl0ZXMgPSBhZG9wdEdSZWYoZ19ieXRlc19uZXdfc3RhdGljKGJ5
dGVzLCBzaXplKSk7Ci0gICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJT
dGFjay5sYXN0KCksICJ7c3Z9Iiwga2V5LnV0ZjgoKS5kYXRhKCksIGdfdmFyaWFudF9uZXdfZnJv
bV9ieXRlcyhHX1ZBUklBTlRfVFlQRSgiYXkiKSwgZ0J5dGVzLmdldCgpLCBUUlVFKSk7Ci19Ci0K
LXZvaWQgS2V5ZWRFbmNvZGVyOjplbmNvZGVCb29sKGNvbnN0IFN0cmluZyYga2V5LCBib29sIHZh
bHVlKQotewotICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChtX3ZhcmlhbnRCdWlsZGVyU3RhY2su
bGFzdCgpLCAie3N2fSIsIGtleS51dGY4KCkuZGF0YSgpLCBnX3ZhcmlhbnRfbmV3X2Jvb2xlYW4o
dmFsdWUpKTsKLX0KLQotdm9pZCBLZXllZEVuY29kZXI6OmVuY29kZVVJbnQzMihjb25zdCBTdHJp
bmcmIGtleSwgdWludDMyX3QgdmFsdWUpCi17Ci0gICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKG1f
dmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCksICJ7c3Z9Iiwga2V5LnV0ZjgoKS5kYXRhKCksIGdf
dmFyaWFudF9uZXdfdWludDMyKHZhbHVlKSk7Ci19Ci0KLXZvaWQgS2V5ZWRFbmNvZGVyOjplbmNv
ZGVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgaW50MzJfdCB2YWx1ZSkKLXsKLSAgICBnX3Zhcmlh
bnRfYnVpbGRlcl9hZGQobV92YXJpYW50QnVpbGRlclN0YWNrLmxhc3QoKSwgIntzdn0iLCBrZXku
dXRmOCgpLmRhdGEoKSwgZ192YXJpYW50X25ld19pbnQzMih2YWx1ZSkpOwotfQotCi12b2lkIEtl
eWVkRW5jb2Rlcjo6ZW5jb2RlSW50NjQoY29uc3QgU3RyaW5nJiBrZXksIGludDY0X3QgdmFsdWUp
Ci17Ci0gICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0
KCksICJ7c3Z9Iiwga2V5LnV0ZjgoKS5kYXRhKCksIGdfdmFyaWFudF9uZXdfaW50NjQodmFsdWUp
KTsKLX0KLQotdm9pZCBLZXllZEVuY29kZXI6OmVuY29kZUZsb2F0KGNvbnN0IFN0cmluZyYga2V5
LCBmbG9hdCB2YWx1ZSkKLXsKLSAgICBlbmNvZGVEb3VibGUoa2V5LCB2YWx1ZSk7Ci19Ci0KLXZv
aWQgS2V5ZWRFbmNvZGVyOjplbmNvZGVEb3VibGUoY29uc3QgU3RyaW5nJiBrZXksIGRvdWJsZSB2
YWx1ZSkKLXsKLSAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQobV92YXJpYW50QnVpbGRlclN0YWNr
Lmxhc3QoKSwgIntzdn0iLCBrZXkudXRmOCgpLmRhdGEoKSwgZ192YXJpYW50X25ld19kb3VibGUo
dmFsdWUpKTsKLX0KLQotdm9pZCBLZXllZEVuY29kZXI6OmVuY29kZVN0cmluZyhjb25zdCBTdHJp
bmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBnX3ZhcmlhbnRfYnVpbGRlcl9h
ZGQobV92YXJpYW50QnVpbGRlclN0YWNrLmxhc3QoKSwgIntzdn0iLCBrZXkudXRmOCgpLmRhdGEo
KSwgZ192YXJpYW50X25ld19zdHJpbmcodmFsdWUudXRmOCgpLmRhdGEoKSkpOwotfQotCi12b2lk
IEtleWVkRW5jb2Rlcjo6YmVnaW5PYmplY3QoY29uc3QgU3RyaW5nJiBrZXkpCi17Ci0gICAgR1Jl
ZlB0cjxHVmFyaWFudEJ1aWxkZXI+IGJ1aWxkZXIgPSBhZG9wdEdSZWYoZ192YXJpYW50X2J1aWxk
ZXJfbmV3KEdfVkFSSUFOVF9UWVBFKCJhYXtzdn0iKSkpOwotICAgIG1fb2JqZWN0U3RhY2suYXBw
ZW5kKHN0ZDo6bWFrZV9wYWlyKGtleSwgYnVpbGRlcikpOwotICAgIG1fdmFyaWFudEJ1aWxkZXJT
dGFjay5hcHBlbmQoYnVpbGRlci5nZXQoKSk7Ci19Ci0KLXZvaWQgS2V5ZWRFbmNvZGVyOjplbmRP
YmplY3QoKQotewotICAgIEdWYXJpYW50QnVpbGRlciogYnVpbGRlciA9IG1fdmFyaWFudEJ1aWxk
ZXJTdGFjay50YWtlTGFzdCgpOwotICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChtX3ZhcmlhbnRC
dWlsZGVyU3RhY2subGFzdCgpLCAie3N2fSIsIG1fb2JqZWN0U3RhY2subGFzdCgpLmZpcnN0LnV0
ZjgoKS5kYXRhKCksIGdfdmFyaWFudF9idWlsZGVyX2VuZChidWlsZGVyKSk7Ci0gICAgbV9vYmpl
Y3RTdGFjay5yZW1vdmVMYXN0KCk7Ci19Ci0KLXZvaWQgS2V5ZWRFbmNvZGVyOjpiZWdpbkFycmF5
KGNvbnN0IFN0cmluZyYga2V5KQotewotICAgIG1fYXJyYXlTdGFjay5hcHBlbmQoc3RkOjptYWtl
X3BhaXIoa2V5LCBhZG9wdEdSZWYoZ192YXJpYW50X2J1aWxkZXJfbmV3KEdfVkFSSUFOVF9UWVBF
KCJhYXtzdn0iKSkpKSk7Ci19Ci0KLXZvaWQgS2V5ZWRFbmNvZGVyOjpiZWdpbkFycmF5RWxlbWVu
dCgpCi17Ci0gICAgbV92YXJpYW50QnVpbGRlclN0YWNrLmFwcGVuZChnX3ZhcmlhbnRfYnVpbGRl
cl9uZXcoR19WQVJJQU5UX1RZUEUoImF7c3Z9IikpKTsKLX0KLQotdm9pZCBLZXllZEVuY29kZXI6
OmVuZEFycmF5RWxlbWVudCgpCi17Ci0gICAgR1JlZlB0cjxHVmFyaWFudEJ1aWxkZXI+IHZhcmlh
bnRCdWlsZGVyID0gYWRvcHRHUmVmKG1fdmFyaWFudEJ1aWxkZXJTdGFjay50YWtlTGFzdCgpKTsK
LSAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGRfdmFsdWUobV9hcnJheVN0YWNrLmxhc3QoKS5zZWNv
bmQuZ2V0KCksIGdfdmFyaWFudF9idWlsZGVyX2VuZCh2YXJpYW50QnVpbGRlci5nZXQoKSkpOwot
fQotCi12b2lkIEtleWVkRW5jb2Rlcjo6ZW5kQXJyYXkoKQotewotICAgIGdfdmFyaWFudF9idWls
ZGVyX2FkZChtX3ZhcmlhbnRCdWlsZGVyU3RhY2subGFzdCgpLCAie3N2fSIsIG1fYXJyYXlTdGFj
ay5sYXN0KCkuZmlyc3QudXRmOCgpLmRhdGEoKSwgZ192YXJpYW50X2J1aWxkZXJfZW5kKG1fYXJy
YXlTdGFjay5sYXN0KCkuc2Vjb25kLmdldCgpKSk7Ci0gICAgbV9hcnJheVN0YWNrLnJlbW92ZUxh
c3QoKTsKLX0KLQotUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IEtleWVkRW5jb2Rlcjo6ZmluaXNo
RW5jb2RpbmcoKQotewotICAgIGdfYXNzZXJ0KG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCkg
PT0gJm1fdmFyaWFudEJ1aWxkZXIpOwotICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhcmlhbnQgPSBn
X3ZhcmlhbnRfYnVpbGRlcl9lbmQoJm1fdmFyaWFudEJ1aWxkZXIpOwotICAgIEdSZWZQdHI8R0J5
dGVzPiBkYXRhID0gZ192YXJpYW50X2dldF9kYXRhX2FzX2J5dGVzKHZhcmlhbnQuZ2V0KCkpOwot
ICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25l
ZCBjaGFyKj4oZ19ieXRlc19nZXRfZGF0YShkYXRhLmdldCgpLCBudWxscHRyKSksIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihnX2J5dGVzX2dldF9zaXplKGRhdGEuZ2V0KCkpKSk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2dsaWIv
S2V5ZWRFbmNvZGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ2xpYi9LZXllZEVuY29kZXIu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNiYjc2Yi4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ2xpYi9LZXllZEVuY29kZXIuaAorKysgL2Rldi9udWxsCkBA
IC0xLDcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgSWdhbGlhIFMuTC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBLZXllZEVuY29kZXJfaAotI2RlZmluZSBLZXllZEVuY29kZXJfaAot
Ci0jaW5jbHVkZSA8V2ViQ29yZS9LZXllZENvZGluZy5oPgotI2luY2x1ZGUgPGdsaWIuaD4KLSNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xh
c3MgS2V5ZWRFbmNvZGVyIGZpbmFsIDogcHVibGljIFdlYkNvcmU6OktleWVkRW5jb2RlciB7Ci1w
dWJsaWM6Ci0gICAgS2V5ZWRFbmNvZGVyKCk7Ci0gICAgfktleWVkRW5jb2RlcigpOwotCi0gICAg
dmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gZmluaXNoRW5jb2Rpbmco
KSBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlQnl0ZXMoY29u
c3QgU3RyaW5nJiBrZXksIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBlbmNvZGVCb29sKGNvbnN0IFN0cmluZyYga2V5LCBib29sKSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlVUludDMyKGNvbnN0IFN0cmluZyYga2V5LCB1aW50MzJf
dCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGVuY29kZUludDMyKGNvbnN0IFN0cmluZyYg
a2V5LCBpbnQzMl90KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlSW50NjQoY29u
c3QgU3RyaW5nJiBrZXksIGludDY0X3QpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBlbmNv
ZGVGbG9hdChjb25zdCBTdHJpbmcmIGtleSwgZmxvYXQpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
dm9pZCBlbmNvZGVEb3VibGUoY29uc3QgU3RyaW5nJiBrZXksIGRvdWJsZSkgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCB2b2lkIGVuY29kZVN0cmluZyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3Ry
aW5nJikgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5PYmplY3QoY29uc3QgU3Ry
aW5nJiBrZXkpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBlbmRPYmplY3QoKSBvdmVycmlk
ZTsKLQotICAgIHZpcnR1YWwgdm9pZCBiZWdpbkFycmF5KGNvbnN0IFN0cmluZyYga2V5KSBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5BcnJheUVsZW1lbnQoKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZW5kQXJyYXlFbGVtZW50KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2
b2lkIGVuZEFycmF5KCkgb3ZlcnJpZGU7Ci0KLSAgICBHVmFyaWFudEJ1aWxkZXIgbV92YXJpYW50
QnVpbGRlcjsKLSAgICBWZWN0b3I8R1ZhcmlhbnRCdWlsZGVyKiwgMTY+IG1fdmFyaWFudEJ1aWxk
ZXJTdGFjazsKLSAgICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgR1JlZlB0cjxHVmFyaWFudEJ1
aWxkZXI+PiwgMTY+IG1fYXJyYXlTdGFjazsKLSAgICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywg
R1JlZlB0cjxHVmFyaWFudEJ1aWxkZXI+PiwgMTY+IG1fb2JqZWN0U3RhY2s7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEtleWVkRW5jb2Rlcl9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMTRkNjAy
Zi4uMWQ0Mjk1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtNDYyLDggKzQ2Miw2IEBACiAJCTFBRTAwRDRDMTgyRDZFQjAwMDA4
N0RENyAvKiBXS0Jyb3dzaW5nQ29udGV4dEhhbmRsZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRTAwRDRBMTgyRDZFQjAwMDA4N0RENyAvKiBXS0Jy
b3dzaW5nQ29udGV4dEhhbmRsZS5tbSAqLzsgfTsKIAkJMUFFMDBENEQxODJENkVCMDAwMDg3REQ3
IC8qIFdLQnJvd3NpbmdDb250ZXh0SGFuZGxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQUUwMEQ0QjE4MkQ2RUIwMDAwODdERDcgLyogV0tCcm93c2lu
Z0NvbnRleHRIYW5kbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkxQUUwMEQ0RjE4MkQ2RjUwMDAwODdERDcgLyogV0tCcm93c2luZ0NvbnRleHRI
YW5kbGVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUFFMDBENEUxODJENkY1MDAwMDg3REQ3IC8qIFdLQnJvd3NpbmdDb250ZXh0SGFuZGxl
SW50ZXJuYWwuaCAqLzsgfTsKLQkJMUFFMDBENUMxODJEQURFMTAwMDg3REQ3IC8qIEtleWVkRW5j
b2Rlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QUUwMEQ1QTE4MkRBREUxMDAwODdERDcgLyogS2V5ZWRFbmNvZGVyLmNwcCAqLzsgfTsKLQkJMUFF
MDBENUQxODJEQURFMTAwMDg3REQ3IC8qIEtleWVkRW5jb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFFMDBENUIxODJEQURFMTAwMDg3REQ3IC8q
IEtleWVkRW5jb2Rlci5oICovOyB9OwogCQkxQUUwMEQ2MDE4MzE3OTIxMDAwODdERDcgLyogRnJh
bWVMb2FkU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUFFMDBENUUxODMxNzkyMTAwMDg3REQ3IC8qIEZyYW1lTG9hZFN0YXRlLmNwcCAqLzsg
fTsKIAkJMUFFMDBENjExODMxNzkyMTAwMDg3REQ3IC8qIEZyYW1lTG9hZFN0YXRlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUUwMEQ1RjE4MzE3OTIx
MDAwODdERDcgLyogRnJhbWVMb2FkU3RhdGUuaCAqLzsgfTsKIAkJMUFFMDBENkIxODMyN0MxMjAw
MDg3REQ3IC8qIFN0cmluZ1JlZmVyZW5jZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQUUwMEQ2OTE4MzI3QzEyMDAwODdERDcgLyogU3RyaW5nUmVm
ZXJlbmNlLmNwcCAqLzsgfTsKQEAgLTk0Nyw4ICs5NDUsNiBAQAogCQk1MTgzNDU5MzEzNDUzMkU5
MDA5MkI2OTYgLyogV2ViSWNvbkRhdGFiYXNlQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTgzNDU5MTEzNDUzMkU4MDA5MkI2OTYgLyogV2Vi
SWNvbkRhdGFiYXNlQ2xpZW50LmggKi87IH07CiAJCTUxODM1M0RBMTg4NUJGOEMwMEQ5RkU0NCAv
KiBJREJTZXJpYWxpemF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxODM1M0Q4MTg4NUJGOEMwMEQ5RkU0NCAvKiBJREJTZXJpYWxpemF0aW9u
LmNwcCAqLzsgfTsKIAkJNTE4MzUzREIxODg1QkY4QzAwRDlGRTQ0IC8qIElEQlNlcmlhbGl6YXRp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxODM1
M0Q5MTg4NUJGOEMwMEQ5RkU0NCAvKiBJREJTZXJpYWxpemF0aW9uLmggKi87IH07Ci0JCTUxODM1
M0RFMTg4NzEyOEIwMEQ5RkU0NCAvKiBLZXllZERlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE4MzUzREMxODg3MTI4QjAwRDlGRTQ0IC8q
IEtleWVkRGVjb2Rlci5jcHAgKi87IH07Ci0JCTUxODM1M0RGMTg4NzEyOEIwMEQ5RkU0NCAvKiBL
ZXllZERlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxODM1M0REMTg4NzEyOEIwMEQ5RkU0NCAvKiBLZXllZERlY29kZXIuaCAqLzsgfTsKIAkJ
NTE4M0RERUMxNjMwQkRGQzAwOEJFNUM3IC8qIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTA1QjBENDE2
MkY3QTdBMDBFMjc3MDkgLyogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmNwcCAqLzsgfTsKIAkJ
NTE4NzFCNUIxMjdDQjg5RDAwRjc2MjMyIC8qIFdlYkNvbnRleHRNZW51LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxODcxQjU5MTI3Q0I4OUQwMEY3
NjIzMiAvKiBXZWJDb250ZXh0TWVudS5jcHAgKi87IH07CiAJCTUxODcxQjVDMTI3Q0I4OUQwMEY3
NjIzMiAvKiBXZWJDb250ZXh0TWVudS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTE4NzFCNUExMjdDQjg5RDAwRjc2MjMyIC8qIFdlYkNvbnRleHRNZW51
LmggKi87IH07CkBAIC0yNTg4LDggKzI1ODQsNiBAQAogCQkxQUUwMEQ0QTE4MkQ2RUIwMDAwODdE
RDcgLyogV0tCcm93c2luZ0NvbnRleHRIYW5kbGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBXS0Jyb3dzaW5nQ29udGV4dEhhbmRsZS5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMUFFMDBENEIxODJENkVCMDAwMDg3REQ3IC8qIFdLQnJvd3NpbmdD
b250ZXh0SGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQnJvd3Np
bmdDb250ZXh0SGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBRTAwRDRF
MTgyRDZGNTAwMDA4N0RENyAvKiBXS0Jyb3dzaW5nQ29udGV4dEhhbmRsZUludGVybmFsLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQnJvd3NpbmdDb250ZXh0SGFuZGxlSW50
ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFFMDBENUExODJEQURFMTAw
MDg3REQ3IC8qIEtleWVkRW5jb2Rlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBLZXllZEVuY29kZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkx
QUUwMEQ1QjE4MkRBREUxMDAwODdERDcgLyogS2V5ZWRFbmNvZGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEtleWVkRW5jb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxQUUwMEQ1RTE4MzE3OTIxMDAwODdERDcgLyogRnJhbWVMb2FkU3RhdGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRnJhbWVMb2FkU3RhdGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUUwMEQ1RjE4MzE3OTIxMDAwODdERDcgLyog
RnJhbWVMb2FkU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnJhbWVM
b2FkU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFFMDBENjkxODMyN0Mx
MjAwMDg3REQ3IC8qIFN0cmluZ1JlZmVyZW5jZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTdHJpbmdSZWZlcmVuY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMzExMSw4ICszMTA1LDYgQEAKIAkJNTE4MzQ1OTExMzQ1MzJFODAwOTJCNjk2IC8q
IFdlYkljb25EYXRhYmFzZUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWJJY29uRGF0YWJhc2VDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTE4MzUzRDgxODg1QkY4QzAwRDlGRTQ0IC8qIElEQlNlcmlhbGl6YXRpb24uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCU2VyaWFsaXphdGlvbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxODM1M0Q5MTg4NUJGOEMwMEQ5RkU0NCAvKiBJREJT
ZXJpYWxpemF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQlNlcmlh
bGl6YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE4MzUzREMxODg3MTI4
QjAwRDlGRTQ0IC8qIEtleWVkRGVjb2Rlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBLZXllZERlY29kZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk1MTgzNTNERDE4ODcxMjhCMDBEOUZFNDQgLyogS2V5ZWREZWNvZGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEtleWVkRGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MTgzQjM5MzEzNzlGODVDMDBFODc1NEUgLyogU2hpbS54Y2NvbmZpZyAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBTaGltLnhjY29uZmlnOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MTg0QkM0QTEzMkU5MDdBMDA2QjlFMjggLyogV2ViSWNvbkRhdGFi
YXNlLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYkljb25EYXRhYmFzZS5t
ZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE4NzFCNTkxMjdDQjg5
RDAwRjc2MjMyIC8qIFdlYkNvbnRleHRNZW51LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdlYkNvbnRleHRNZW51LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTQ4NzEsMTAgKzQ4NjMsNiBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMUFBRjBDNDkx
MkIxNjMzNDAwOEU0OUUyIC8qIEFyZ3VtZW50Q29kZXJzQ0YuY3BwICovLAogCQkJCTFBQUYwQzQ4
MTJCMTYzMzQwMDhFNDlFMiAvKiBBcmd1bWVudENvZGVyc0NGLmggKi8sCi0JCQkJNTE4MzUzREMx
ODg3MTI4QjAwRDlGRTQ0IC8qIEtleWVkRGVjb2Rlci5jcHAgKi8sCi0JCQkJNTE4MzUzREQxODg3
MTI4QjAwRDlGRTQ0IC8qIEtleWVkRGVjb2Rlci5oICovLAotCQkJCTFBRTAwRDVBMTgyREFERTEw
MDA4N0RENyAvKiBLZXllZEVuY29kZXIuY3BwICovLAotCQkJCTFBRTAwRDVCMTgyREFERTEwMDA4
N0RENyAvKiBLZXllZEVuY29kZXIuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gY2Y7CiAJCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOwpAQCAtNzY5OSw4ICs3Njg3LDYgQEAKIAkJCQlDNThDREYyQTE4
ODc1NDhCMDA4NzE1MzYgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFBRTQ5QTQ5MTFGRkE4Q0UwMDQ4QjQ2NCAvKiBKU05QTWV0aG9kLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQUU0OTg3ODExRkY3RkFBMDA0OEI0NjQgLyogSlNOUE9iamVj
dC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTE4MzUzREYxODg3MTI4QjAwRDlGRTQ0IC8qIEtleWVk
RGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUFFMDBENUQxODJEQURFMTAwMDg3REQ3IC8q
IEtleWVkRW5jb2Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFMDkzNzgxNEZCMTI4QzAwMTEz
OEQ5IC8qIExheWVySG9zdGluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEMzNjVB
MThDMDU1NTgwMEY2MDdENyAvKiBMYXllclJlcHJlc2VudGF0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxQTkyREMxMTEyRjhCQTQ2MDAxN0FGNjUgLyogTGF5ZXJUcmVlQ29udGV4dC5oIGluIEhl
YWRlcnMgKi8sCkBAIC05NDk3LDggKzk0ODMsNiBAQAogCQkJCUM1OENERjJEMTg4NzYwOUYwMDg3
MTUzNiAvKiBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxQUU0OUE0QTExRkZBOENFMDA0OEI0NjQgLyogSlNOUE1ldGhvZC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxQUU0OTg3OTExRkY3RkFBMDA0OEI0NjQgLyogSlNOUE9iamVjdC5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQk1MTgzNTNERTE4ODcxMjhCMDBEOUZFNDQgLyogS2V5ZWREZWNv
ZGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTFBRTAwRDVDMTgyREFERTEwMDA4N0RENyAvKiBL
ZXllZEVuY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFMDkzNzcxNEZCMTI4QzAwMTEz
OEQ5IC8qIExheWVySG9zdGluZ0NvbnRleHQubW0gaW4gU291cmNlcyAqLywKIAkJCQkwRjBDMzY1
RTE4QzExMEE1MDBGNjA3RDcgLyogTGF5ZXJSZXByZXNlbnRhdGlvbi5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTFBOTJEQzEzMTJGOEJBQjkwMDE3QUY2NSAvKiBMYXllclRyZWVDb250ZXh0LmNwcCBp
biBTb3VyY2VzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258504</attachid>
            <date>2015-08-07 08:31:53 -0700</date>
            <delta_ts>2015-08-07 09:04:35 -0700</delta_ts>
            <desc>Patch v4 - For review and landing</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>97761</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzMjgwNmJhLi43YTk1ZjNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTAz
IEBACisyMDE1LTA4LTA3ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAg
ICAgICBNb3ZlIGNvbmNyZXRlIEtleWVkRGVjb2Rlci9FbmNvZGVyIGltcGxlbWVudGF0aW9ucyB0
byBXZWJDb3JlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQ3NzU3LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6Cisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgICog
cGxhdGZvcm0vS2V5ZWRDb2RpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OktleWVkRGVjb2Rlcjo6
S2V5ZWREZWNvZGVyKTogU3RhdGljIGNvbnN0cnVjdG9yIHRvIGJlIGltcGxlbWVudGVkIHBlci1w
bGF0Zm9ybS4KKyAgICAgICAgKFdlYkNvcmU6OktleWVkRW5jb2Rlcjo6S2V5ZWRFbmNvZGVyKTog
RGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9jZi9LZXllZERlY29kZXJDRi5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2YvS2V5ZWREZWNvZGVyLmNwcC4KKyAgICAg
ICAgKFdlYkNvcmU6OktleWVkRGVjb2Rlcjo6ZGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpL
ZXllZERlY29kZXJDRjo6S2V5ZWREZWNvZGVyQ0YpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZWRE
ZWNvZGVyQ0Y6On5LZXllZERlY29kZXJDRik6CisgICAgICAgIChXZWJDb3JlOjpLZXllZERlY29k
ZXJDRjo6ZGVjb2RlQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZWREZWNvZGVyQ0Y6OmRl
Y29kZUJvb2wpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZWREZWNvZGVyQ0Y6OmRlY29kZVVJbnQz
Mik6CisgICAgICAgIChXZWJDb3JlOjpLZXllZERlY29kZXJDRjo6ZGVjb2RlSW50MzIpOgorICAg
ICAgICAoV2ViQ29yZTo6S2V5ZWREZWNvZGVyQ0Y6OmRlY29kZUludDY0KToKKyAgICAgICAgKFdl
YkNvcmU6OktleWVkRGVjb2RlckNGOjpkZWNvZGVGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpL
ZXllZERlY29kZXJDRjo6ZGVjb2RlRG91YmxlKToKKyAgICAgICAgKFdlYkNvcmU6OktleWVkRGVj
b2RlckNGOjpkZWNvZGVTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZWREZWNvZGVyQ0Y6
OmJlZ2luT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleWVkRGVjb2RlckNGOjplbmRPYmpl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZWREZWNvZGVyQ0Y6OmJlZ2luQXJyYXkpOgorICAg
ICAgICAoV2ViQ29yZTo6S2V5ZWREZWNvZGVyQ0Y6OmJlZ2luQXJyYXlFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OktleWVkRGVjb2RlckNGOjplbmRBcnJheUVsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6S2V5ZWREZWNvZGVyQ0Y6OmVuZEFycmF5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9j
Zi9LZXllZERlY29kZXJDRi5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvU2hhcmVkL2Nm
L0tleWVkRGVjb2Rlci5oLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9jZi9LZXllZEVu
Y29kZXJDRi5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2YvS2V5ZWRF
bmNvZGVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OktleWVkRW5jb2Rlcjo6ZW5jb2Rlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVEaWN0aW9uYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6Oktl
eWVkRW5jb2RlckNGOjpLZXllZEVuY29kZXJDRik6CisgICAgICAgIChXZWJDb3JlOjpLZXllZEVu
Y29kZXJDRjo6fktleWVkRW5jb2RlckNGKToKKyAgICAgICAgKFdlYkNvcmU6OktleWVkRW5jb2Rl
ckNGOjplbmNvZGVCeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpLZXllZEVuY29kZXJDRjo6ZW5j
b2RlQm9vbCk6CisgICAgICAgIChXZWJDb3JlOjpLZXllZEVuY29kZXJDRjo6ZW5jb2RlVUludDMy
KToKKyAgICAgICAgKFdlYkNvcmU6OktleWVkRW5jb2RlckNGOjplbmNvZGVJbnQzMik6CisgICAg
ICAgIChXZWJDb3JlOjpLZXllZEVuY29kZXJDRjo6ZW5jb2RlSW50NjQpOgorICAgICAgICAoV2Vi
Q29yZTo6S2V5ZWRFbmNvZGVyQ0Y6OmVuY29kZUZsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6Oktl
eWVkRW5jb2RlckNGOjplbmNvZGVEb3VibGUpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZWRFbmNv
ZGVyQ0Y6OmVuY29kZVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpLZXllZEVuY29kZXJDRjo6
YmVnaW5PYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZWRFbmNvZGVyQ0Y6OmVuZE9iamVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpLZXllZEVuY29kZXJDRjo6YmVnaW5BcnJheSk6CisgICAg
ICAgIChXZWJDb3JlOjpLZXllZEVuY29kZXJDRjo6YmVnaW5BcnJheUVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6S2V5ZWRFbmNvZGVyQ0Y6OmVuZEFycmF5RWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpLZXllZEVuY29kZXJDRjo6ZW5kQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6S2V5
ZWRFbmNvZGVyQ0Y6OmZpbmlzaEVuY29kaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jZi9LZXll
ZEVuY29kZXJDRi5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvU2hhcmVkL2NmL0tleWVk
RW5jb2Rlci5oLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9nbGliL0tleWVkRGVjb2Rl
ckdsaWIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvU2hhcmVkL2dsaWIvS2V5ZWRE
ZWNvZGVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OktleWVkRGVjb2Rlcjo6ZGVjb2Rlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpLZXllZERlY29kZXJHbGliOjpLZXllZERlY29kZXJHbGliKToKKyAg
ICAgICAgKFdlYkNvcmU6OktleWVkRGVjb2RlckdsaWI6On5LZXllZERlY29kZXJHbGliKToKKyAg
ICAgICAgKFdlYkNvcmU6OktleWVkRGVjb2RlckdsaWI6OmRpY3Rpb25hcnlGcm9tR1ZhcmlhbnQp
OgorICAgICAgICAoV2ViQ29yZTo6S2V5ZWREZWNvZGVyR2xpYjo6ZGVjb2RlQnl0ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6S2V5ZWREZWNvZGVyR2xpYjo6ZGVjb2RlU2ltcGxlVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6S2V5ZWREZWNvZGVyR2xpYjo6ZGVjb2RlQm9vbCk6CisgICAgICAgIChX
ZWJDb3JlOjpLZXllZERlY29kZXJHbGliOjpkZWNvZGVVSW50MzIpOgorICAgICAgICAoV2ViQ29y
ZTo6S2V5ZWREZWNvZGVyR2xpYjo6ZGVjb2RlSW50MzIpOgorICAgICAgICAoV2ViQ29yZTo6S2V5
ZWREZWNvZGVyR2xpYjo6ZGVjb2RlSW50NjQpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZWREZWNv
ZGVyR2xpYjo6ZGVjb2RlRmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZWREZWNvZGVyR2xp
Yjo6ZGVjb2RlRG91YmxlKToKKyAgICAgICAgKFdlYkNvcmU6OktleWVkRGVjb2RlckdsaWI6OmRl
Y29kZVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpLZXllZERlY29kZXJHbGliOjpiZWdpbk9i
amVjdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXllZERlY29kZXJHbGliOjplbmRPYmplY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6S2V5ZWREZWNvZGVyR2xpYjo6YmVnaW5BcnJheSk6CisgICAgICAg
IChXZWJDb3JlOjpLZXllZERlY29kZXJHbGliOjpiZWdpbkFycmF5RWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpLZXllZERlY29kZXJHbGliOjplbmRBcnJheUVsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6S2V5ZWREZWNvZGVyR2xpYjo6ZW5kQXJyYXkpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dsaWIvS2V5ZWREZWNvZGVyR2xpYi5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvU2hh
cmVkL2dsaWIvS2V5ZWREZWNvZGVyLmguCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2ds
aWIvS2V5ZWRFbmNvZGVyR2xpYi5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvZ2xpYi9LZXllZEVuY29kZXIuY3BwLgorICAgICAgICAoV2ViQ29yZTo6S2V5ZWRFbmNvZGVy
OjplbmNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OktleWVkRW5jb2RlckdsaWI6OktleWVkRW5j
b2RlckdsaWIpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZWRFbmNvZGVyR2xpYjo6fktleWVkRW5j
b2RlckdsaWIpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZWRFbmNvZGVyR2xpYjo6ZW5jb2RlQnl0
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZWRFbmNvZGVyR2xpYjo6ZW5jb2RlQm9vbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpLZXllZEVuY29kZXJHbGliOjplbmNvZGVVSW50MzIpOgorICAgICAg
ICAoV2ViQ29yZTo6S2V5ZWRFbmNvZGVyR2xpYjo6ZW5jb2RlSW50MzIpOgorICAgICAgICAoV2Vi
Q29yZTo6S2V5ZWRFbmNvZGVyR2xpYjo6ZW5jb2RlSW50NjQpOgorICAgICAgICAoV2ViQ29yZTo6
S2V5ZWRFbmNvZGVyR2xpYjo6ZW5jb2RlRmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZWRF
bmNvZGVyR2xpYjo6ZW5jb2RlRG91YmxlKToKKyAgICAgICAgKFdlYkNvcmU6OktleWVkRW5jb2Rl
ckdsaWI6OmVuY29kZVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpLZXllZEVuY29kZXJHbGli
OjpiZWdpbk9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXllZEVuY29kZXJHbGliOjplbmRP
YmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZWRFbmNvZGVyR2xpYjo6YmVnaW5BcnJheSk6
CisgICAgICAgIChXZWJDb3JlOjpLZXllZEVuY29kZXJHbGliOjpiZWdpbkFycmF5RWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpLZXllZEVuY29kZXJHbGliOjplbmRBcnJheUVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6S2V5ZWRFbmNvZGVyR2xpYjo6ZW5kQXJyYXkpOgorICAgICAgICAo
V2ViQ29yZTo6S2V5ZWRFbmNvZGVyR2xpYjo6ZmluaXNoRW5jb2RpbmcpOgorICAgICAgICAqIHBs
YXRmb3JtL2dsaWIvS2V5ZWRFbmNvZGVyR2xpYi5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktp
dDIvU2hhcmVkL2dsaWIvS2V5ZWRFbmNvZGVyLmguCisKIDIwMTUtMDgtMDYgIEFuZGVycyBDYXJs
c3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW5hbWUgU1FMU3RhdGVtZW50
QmFja2VuZCB0byBTUUxTdGF0ZW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggYzFm
NmY0Yy4uMTNlNWE1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21h
a2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTEwNiw2ICsxMDYs
OSBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9nZW9jbHVlL0dl
b2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlMS5jcHAKICAgICBwbGF0Zm9ybS9nZW9jbHVlL0dlb2xv
Y2F0aW9uUHJvdmlkZXJHZW9jbHVlMi5jcHAKIAorICAgIHBsYXRmb3JtL2dsaWIvS2V5ZWREZWNv
ZGVyR2xpYi5jcHAKKyAgICBwbGF0Zm9ybS9nbGliL0tleWVkRW5jb2RlckdsaWIuY3BwCisKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9QbGF0Zm9ybURpc3BsYXkuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvV09GRkZpbGVGb3Jt
YXQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZSBiL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDFmYzY4NTMuLjJlOWRhYTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC02NSw2ICs2NSw5IEBAIGxpc3QoQVBQRU5EIFdl
YkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dlb2NsdWUvR2VvbG9jYXRpb25Qcm92aWRlckdl
b2NsdWUxLmNwcAogICAgIHBsYXRmb3JtL2dlb2NsdWUvR2VvbG9jYXRpb25Qcm92aWRlckdlb2Ns
dWUyLmNwcAogCisgICAgcGxhdGZvcm0vZ2xpYi9LZXllZERlY29kZXJHbGliLmNwcAorICAgIHBs
YXRmb3JtL2dsaWIvS2V5ZWRFbmNvZGVyR2xpYi5jcHAKKwogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L0dMQ29udGV4dC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRFBy
aXZhdGUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYzU0
MGQ4YS4uODA3ZTc2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtMTk5OCw2ICsxOTk4LDEwIEBACiAJCTUxNzlDRTJBMTk1Qzkx
ODYwMDE5QzE5OCAvKiBHYW1lcGFkUHJvdmlkZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNzlDRTI5MTk1QzkxODYwMDE5QzE5OCAvKiBH
YW1lcGFkUHJvdmlkZXJDbGllbnQuaCAqLzsgfTsKIAkJNTE3OUNFMzYxOTVDQUM3RTAwMTlDMTk4
IC8qIEhJREdhbWVwYWRQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTc5Q0UzNDE5NUNBQzdFMDAxOUMxOTggLyogSElER2FtZXBhZFBy
b3ZpZGVyLmNwcCAqLzsgfTsKIAkJNTE3OUNFMzcxOTVDQUM3RTAwMTlDMTk4IC8qIEhJREdhbWVw
YWRQcm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTE3OUNFMzUxOTVDQUM3RTAwMTlDMTk4IC8qIEhJREdhbWVwYWRQcm92aWRlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUxN0E2M0MzMUI3
NDMxODcwMEU3RENEQyAvKiBLZXllZERlY29kZXJDRi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTdBNjNCRjFCNzQzMTdFMDBFN0RDREMgLyogS2V5
ZWREZWNvZGVyQ0YuY3BwICovOyB9OworCQk1MTdBNjNDNDFCNzQzMThCMDBFN0RDREMgLyogS2V5
ZWRFbmNvZGVyQ0YuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTE3QTYzQzExQjc0MzE3RTAwRTdEQ0RDIC8qIEtleWVkRW5jb2RlckNGLmNwcCAqLzsg
fTsKKwkJNTE3QTYzQzUxQjc0MzE4RjAwRTdEQ0RDIC8qIEtleWVkRGVjb2RlckNGLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTdBNjNDMDFCNzQzMTdF
MDBFN0RDREMgLyogS2V5ZWREZWNvZGVyQ0YuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQk1MTdBNjNDNjFCNzQzMTkyMDBFN0RDREMgLyogS2V5ZWRF
bmNvZGVyQ0YuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxN0E2M0MyMUI3NDMxN0UwMEU3RENEQyAvKiBLZXllZEVuY29kZXJDRi5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxN0ZCQTFFMTUxQUIxN0Mw
MEI1Nzk1OSAvKiBET01XaW5kb3dFeHRlbnNpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3RkJBMTcxNTFBQTcxQjAwQjU3OTU5IC8qIERPTVdp
bmRvd0V4dGVuc2lvbi5jcHAgKi87IH07CiAJCTUxODlGMDFEMTBCMzdCRDkwMEYzQzczOSAvKiBK
U1BvcFN0YXRlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTE4OUYwMUIxMEIzN0JEOTAwRjNDNzM5IC8qIEpTUG9wU3RhdGVFdmVudC5jcHAg
Ki87IH07CiAJCTUxODlGMDFFMTBCMzdCRDkwMEYzQzczOSAvKiBKU1BvcFN0YXRlRXZlbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxODlGMDFDMTBC
MzdCRDkwMEYzQzczOSAvKiBKU1BvcFN0YXRlRXZlbnQuaCAqLzsgfTsKQEAgLTkyNDksNiArOTI1
MywxMCBAQAogCQk1MTc5Q0UyOTE5NUM5MTg2MDAxOUMxOTggLyogR2FtZXBhZFByb3ZpZGVyQ2xp
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdhbWVwYWRQcm92aWRlckNs
aWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTc5Q0UzNDE5NUNBQzdFMDAx
OUMxOTggLyogSElER2FtZXBhZFByb3ZpZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEhJREdhbWVwYWRQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUxNzlDRTM1MTk1Q0FDN0UwMDE5QzE5OCAvKiBISURHYW1lcGFkUHJvdmlkZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSElER2FtZXBhZFByb3ZpZGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxN0E2M0JGMUI3NDMxN0UwMEU3RENEQyAv
KiBLZXllZERlY29kZXJDRi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBLZXllZERlY29kZXJDRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxN0E2
M0MwMUI3NDMxN0UwMEU3RENEQyAvKiBLZXllZERlY29kZXJDRi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBLZXllZERlY29kZXJDRi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1MTdBNjNDMTFCNzQzMTdFMDBFN0RDREMgLyogS2V5ZWRFbmNvZGVyQ0YuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gS2V5ZWRFbmNvZGVyQ0YuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTdBNjNDMjFCNzQzMTdFMDBFN0RDREMgLyog
S2V5ZWRFbmNvZGVyQ0YuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gS2V5ZWRF
bmNvZGVyQ0YuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE3RkJBMTcxNTFBQTcx
QjAwQjU3OTU5IC8qIERPTVdpbmRvd0V4dGVuc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBET01XaW5kb3dFeHRlbnNpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MTdGQkExODE1MUFBNzFCMDBCNTc5NTkgLyogRE9NV2luZG93RXh0ZW5z
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVdpbmRvd0V4dGVuc2lv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTg5RjAxQjEwQjM3QkQ5MDBGM0M3
MzkgLyogSlNQb3BTdGF0ZUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTUG9wU3RhdGVFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xNTQ1MSw2ICsxNTQ1OSwxMCBAQAogCQkJCTQ0MzgxN0ZEMUE5MUIyRjgwMDZFMDRGMiAvKiBD
b3JlTWVkaWFTb2Z0TGluay5jcHAgKi8sCiAJCQkJNDQzODE3RkUxQTkxQjJGODAwNkUwNEYyIC8q
IENvcmVNZWRpYVNvZnRMaW5rLmggKi8sCiAJCQkJNTE2MDMwNkIwQ0M0MzYyMzAwQzhBQzI1IC8q
IEZpbGVTeXN0ZW1DRi5jcHAgKi8sCisJCQkJNTE3QTYzQkYxQjc0MzE3RTAwRTdEQ0RDIC8qIEtl
eWVkRGVjb2RlckNGLmNwcCAqLywKKwkJCQk1MTdBNjNDMDFCNzQzMTdFMDBFN0RDREMgLyogS2V5
ZWREZWNvZGVyQ0YuaCAqLywKKwkJCQk1MTdBNjNDMTFCNzQzMTdFMDBFN0RDREMgLyogS2V5ZWRF
bmNvZGVyQ0YuY3BwICovLAorCQkJCTUxN0E2M0MyMUI3NDMxN0UwMEU3RENEQyAvKiBLZXllZEVu
Y29kZXJDRi5oICovLAogCQkJCTVDQkM4REFBMUFBQTMwMjIwMEUxQzgwMyAvKiBNZWRpYUFjY2Vz
c2liaWxpdHlTb2Z0TGluay5jcHAgKi8sCiAJCQkJNUNCQzhEQUIxQUFBMzAyMjAwRTFDODAzIC8q
IE1lZGlhQWNjZXNzaWJpbGl0eVNvZnRMaW5rLmggKi8sCiAJCQkJMkQ3NkJCODMxOTQ1NkY4MTAw
Q0ZEMjlBIC8qIFJ1bkxvb3BPYnNlcnZlci5jcHAgKi8sCkBAIC0yNTYyNCw2ICsyNTYzNiw3IEBA
CiAJCQkJMDc5NjlEQjAxN0QxNDE1MTAwN0ZGODQyIC8qIEpTUlRDRFRNRlNlbmRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMDc5NjlEQjIxN0QxNDE1MTAwN0ZGODQyIC8qIEpTUlRDRFRNRlRvbmVD
aGFuZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc5NjlEQjYxN0QxNDE1MTAwN0ZGODQy
IC8qIEpTUlRDSWNlQ2FuZGlkYXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTdBNjNDNjFCNzQz
MTkyMDBFN0RDREMgLyogS2V5ZWRFbmNvZGVyQ0YuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3OTY5
REI4MTdEMTQxNTEwMDdGRjg0MiAvKiBKU1JUQ0ljZUNhbmRpZGF0ZUV2ZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwNzM3OTRFQzE5RUUzNDFFMDBFNUEwNDUgLyogSlNSVENJY2VTZXJ2ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTA3OTY5REJBMTdEMTQxNTEwMDdGRjg0MiAvKiBKU1JUQ1BlZXJD
b25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTI2NDI0LDYgKzI2NDM3LDcgQEAKIAkJCQkz
MTk1NUE4ODE2MEQxOTkyMDA4NTgwMjUgLyogUmVuZGVyU25hcHNob3R0ZWRQbHVnSW4uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDOEM4RkFFMEREQ0QzMUIwMEI1OTJGNCAvKiBSZW5kZXJTdHlsZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI2NjgwRTgxQ0I3MTAwQjI1OTY1IC8qIFJlbmRlclN0
eWxlQ29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTdBNjNDNTFCNzQzMThGMDBFN0RD
REMgLyogS2V5ZWREZWNvZGVyQ0YuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzNjcwOEMxMTJEOUNB
NEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM2NzA4
QzMxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR0NvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMkIzNjVDODQxNTI1MTE5RTAwOTFEMjdCIC8qIFJlbmRlclNWR0VsbGlwc2UuaCBpbiBI
ZWFkZXJzICovLApAQCAtMjk2MjUsNiArMjk2MzksNyBAQAogCQkJCTA3QzU5QjY4MTdGNzg0QkEw
MDBGQkNCQiAvKiBNZWRpYVNvdXJjZVN0YXRlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNzhF
MDhGRjE3RDE0Q0VFMDA0MjBBQTEgLyogTWVkaWFTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMDc4RTA5NEIxN0QxNzA5NjAwNDIwQUExIC8qIE1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlv
bk5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTE3QTYzQzMxQjc0MzE4NzAwRTdEQ0RDIC8q
IEtleWVkRGVjb2RlckNGLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3ODMyMjg0MTgwMTNFRDgw
MDk5OUUwQyAvKiBNZWRpYVN0cmVhbUF1ZGlvU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUZENjcxQTc3MTU5QkIwNzAwMDE5NzU1OSAvKiBNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwNzA1ODUxNTE3RkIwRUVBMDA1RjJCQ0IgLyogTWVkaWFT
dHJlYW1DYXBhYmlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTczNSw2ICsyOTc1MCw3
IEBACiAJCQkJMUEwRDU3MzYwQTVDNzdGRTAwN0VERDRDIC8qIE92ZXJmbG93RXZlbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOUI1NUVFRTkxQjNFODg5ODAwNTM0MkJDIC8qIEVkaXRvckNvY29h
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNjVGRUE4NjkwOTgzM0FERTAwQkVENEFCIC8qIFBhZ2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTE3QTYzQzQxQjc0MzE4QjAwRTdEQ0RDIC8qIEtleWVk
RW5jb2RlckNGLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NzdFNzc2MEJGNDEzNEEwMDE1Mjg3
MiAvKiBQYWdlQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0Q1RTVCNjExQTE1RjE1NjAw
MEM2MDlFIC8qIFBhZ2VDb25maWd1cmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUYzODIw
ODkyMTQ3RDM1RjkwMDEwQkMwNiAvKiBQYWdlQ29uc29sZUFnZW50LmNwcCBpbiBTb3VyY2VzICov
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS2V5ZWRDb2RpbmcuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tleWVkQ29kaW5nLmgKaW5kZXggOWZhNWM4Zi4uZTI5Njlh
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS2V5ZWRDb2RpbmcuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LZXllZENvZGluZy5oCkBAIC0zNSwxMCArMzUsMTEg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgU2hhcmVkQnVmZmVyOwogCiBjbGFzcyBLZXll
ZERlY29kZXIgewotcHJvdGVjdGVkOgorcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8S2V5ZWREZWNvZGVyPiBkZWNvZGVyKGNvbnN0IHVpbnQ4X3QqIGRh
dGEsIHNpemVfdCk7CisKICAgICB2aXJ0dWFsIH5LZXllZERlY29kZXIoKSB7IH0KIAotcHVibGlj
OgogICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVCeXRlcyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3Qg
dWludDhfdComLCBzaXplX3QmKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGRlY29kZUJvb2woY29u
c3QgU3RyaW5nJiBrZXksIGJvb2wmKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGRlY29kZVVJbnQz
Mihjb25zdCBTdHJpbmcmIGtleSwgdWludDMyX3QmKSA9IDA7CkBAIC0xMjUsNiArMTI2LDExIEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKK3Byb3RlY3RlZDoKKyAg
ICBLZXllZERlY29kZXIoKQorICAgIHsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCBi
b29sIGJlZ2luT2JqZWN0KGNvbnN0IFN0cmluZyYga2V5KSA9IDA7CiAgICAgdmlydHVhbCB2b2lk
IGVuZE9iamVjdCgpID0gMDsKQEAgLTEzNiwxMCArMTQyLDExIEBAIHByaXZhdGU6CiB9OwogCiBj
bGFzcyBLZXllZEVuY29kZXIgewotcHJvdGVjdGVkOgorcHVibGljOgorICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8S2V5ZWRFbmNvZGVyPiBlbmNvZGVyKCk7CisKICAg
ICB2aXJ0dWFsIH5LZXllZEVuY29kZXIoKSB7IH0KIAotcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBlbmNvZGVCeXRlcyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgdWludDhfdCosIHNpemVfdCkg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVCb29sKGNvbnN0IFN0cmluZyYga2V5LCBib29s
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGVuY29kZVVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwg
dWludDMyX3QpID0gMDsKQEAgLTE4OCw2ICsxOTUsMTEgQEAgcHVibGljOgogICAgICAgICBlbmRB
cnJheSgpOwogICAgIH0KIAorcHJvdGVjdGVkOgorICAgIEtleWVkRW5jb2RlcigpCisgICAgewor
ICAgIH0KKwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5PYmplY3QoY29uc3QgU3Ry
aW5nJiBrZXkpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZW5kT2JqZWN0KCkgPSAwOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvS2V5ZWREZWNvZGVyQ0YuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvS2V5ZWREZWNvZGVyQ0YuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MzRiYTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jZi9LZXllZERlY29kZXJDRi5jcHAKQEAgLTAsMCArMSwxODMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiS2V5ZWREZWNvZGVy
Q0YuaCIKKworI2luY2x1ZGUgPHd0Zi9jZi9UeXBlQ2FzdHNDRi5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0ZDo6dW5pcXVlX3B0
cjxLZXllZERlY29kZXI+IEtleWVkRGVjb2Rlcjo6ZGVjb2Rlcihjb25zdCB1aW50OF90KiBkYXRh
LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxLZXllZERlY29k
ZXJDRj4oZGF0YSwgc2l6ZSk7Cit9CisKK0tleWVkRGVjb2RlckNGOjpLZXllZERlY29kZXJDRihj
b25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBhdXRvIGNmRGF0YSA9IGFk
b3B0Q0YoQ0ZEYXRhQ3JlYXRlV2l0aEJ5dGVzTm9Db3B5KGtDRkFsbG9jYXRvckRlZmF1bHQsIGRh
dGEsIHNpemUsIGtDRkFsbG9jYXRvck51bGwpKTsKKworICAgIGlmIChhdXRvIHJvb3REaWN0aW9u
YXJ5ID0gYWRvcHRDRihkeW5hbWljX2NmX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRlByb3BlcnR5
TGlzdENyZWF0ZVdpdGhEYXRhKGtDRkFsbG9jYXRvckRlZmF1bHQsIGNmRGF0YS5nZXQoKSwga0NG
UHJvcGVydHlMaXN0SW1tdXRhYmxlLCBudWxscHRyLCBudWxscHRyKSkpKQorICAgICAgICBtX3Jv
b3REaWN0aW9uYXJ5ID0gV1RGOjptb3ZlKHJvb3REaWN0aW9uYXJ5KTsKKyAgICBlbHNlCisgICAg
ICAgIG1fcm9vdERpY3Rpb25hcnkgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCBudWxscHRyLCBudWxscHRyLCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlD
YWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAgbV9kaWN0
aW9uYXJ5U3RhY2suYXBwZW5kKG1fcm9vdERpY3Rpb25hcnkuZ2V0KCkpOworfQorCitLZXllZERl
Y29kZXJDRjo6fktleWVkRGVjb2RlckNGKCkKK3sKKyAgICBBU1NFUlQobV9kaWN0aW9uYXJ5U3Rh
Y2suc2l6ZSgpID09IDEpOworICAgIEFTU0VSVChtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCkgPT0g
bV9yb290RGljdGlvbmFyeSk7CisgICAgQVNTRVJUKG1fYXJyYXlTdGFjay5pc0VtcHR5KCkpOwor
ICAgIEFTU0VSVChtX2FycmF5SW5kZXhTdGFjay5pc0VtcHR5KCkpOworfQorCitib29sIEtleWVk
RGVjb2RlckNGOjpkZWNvZGVCeXRlcyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgdWludDhfdCom
IGJ5dGVzLCBzaXplX3QmIHNpemUpCit7CisgICAgYXV0byBkYXRhID0gZHluYW1pY19jZl9jYXN0
PENGRGF0YVJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgp
LCBrZXkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOworICAgIGlmICghZGF0YSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgYnl0ZXMgPSBDRkRhdGFHZXRCeXRlUHRyKGRhdGEpOworICAg
IHNpemUgPSBDRkRhdGFHZXRMZW5ndGgoZGF0YSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgS2V5ZWREZWNvZGVyQ0Y6OmRlY29kZUJvb2woY29uc3QgU3RyaW5nJiBrZXksIGJvb2wmIHJl
c3VsdCkKK3sKKyAgICBhdXRvIGJvb2xlYW4gPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZCb29sZWFuUmVm
PihDRkRpY3Rpb25hcnlHZXRWYWx1ZShtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCksIGtleS5jcmVh
dGVDRlN0cmluZygpLmdldCgpKSk7CisgICAgaWYgKCFib29sZWFuKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICByZXN1bHQgPSBDRkJvb2xlYW5HZXRWYWx1ZShib29sZWFuKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBLZXllZERlY29kZXJDRjo6ZGVjb2RlVUludDMyKGNvbnN0
IFN0cmluZyYga2V5LCB1aW50MzJfdCYgcmVzdWx0KQoreworICAgIHJldHVybiBkZWNvZGVJbnQz
MihrZXksIHJlaW50ZXJwcmV0X2Nhc3Q8aW50MzJfdCY+KHJlc3VsdCkpOworfQorCitib29sIEtl
eWVkRGVjb2RlckNGOjpkZWNvZGVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgaW50MzJfdCYgcmVz
dWx0KQoreworICAgIGF1dG8gbnVtYmVyID0gZHluYW1pY19jZl9jYXN0PENGTnVtYmVyUmVmPihD
RkRpY3Rpb25hcnlHZXRWYWx1ZShtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCksIGtleS5jcmVhdGVD
RlN0cmluZygpLmdldCgpKSk7CisgICAgaWYgKCFudW1iZXIpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHJldHVybiBDRk51bWJlckdldFZhbHVlKG51bWJlciwga0NGTnVtYmVyU0ludDMy
VHlwZSwgJnJlc3VsdCk7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyQ0Y6OmRlY29kZUludDY0KGNv
bnN0IFN0cmluZyYga2V5LCBpbnQ2NF90JiByZXN1bHQpCit7CisgICAgYXV0byBudW1iZXIgPSBk
eW5hbWljX2NmX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKG1fZGljdGlv
bmFyeVN0YWNrLmxhc3QoKSwga2V5LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKTsKKyAgICBpZiAo
IW51bWJlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIENGTnVtYmVyR2V0
VmFsdWUobnVtYmVyLCBrQ0ZOdW1iZXJTSW50NjRUeXBlLCAmcmVzdWx0KTsKK30KKworYm9vbCBL
ZXllZERlY29kZXJDRjo6ZGVjb2RlRmxvYXQoY29uc3QgU3RyaW5nJiBrZXksIGZsb2F0JiByZXN1
bHQpCit7CisgICAgYXV0byBudW1iZXIgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENG
RGljdGlvbmFyeUdldFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5LmNyZWF0ZUNG
U3RyaW5nKCkuZ2V0KCkpKTsKKyAgICBpZiAoIW51bWJlcikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmV0dXJuIENGTnVtYmVyR2V0VmFsdWUobnVtYmVyLCBrQ0ZOdW1iZXJGbG9hdFR5
cGUsICZyZXN1bHQpOworfQorCitib29sIEtleWVkRGVjb2RlckNGOjpkZWNvZGVEb3VibGUoY29u
c3QgU3RyaW5nJiBrZXksIGRvdWJsZSYgcmVzdWx0KQoreworICAgIGF1dG8gbnVtYmVyID0gZHlu
YW1pY19jZl9jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShtX2RpY3Rpb25h
cnlTdGFjay5sYXN0KCksIGtleS5jcmVhdGVDRlN0cmluZygpLmdldCgpKSk7CisgICAgaWYgKCFu
dW1iZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBDRk51bWJlckdldFZh
bHVlKG51bWJlciwga0NGTnVtYmVyRG91YmxlVHlwZSwgJnJlc3VsdCk7Cit9CisKK2Jvb2wgS2V5
ZWREZWNvZGVyQ0Y6OmRlY29kZVN0cmluZyhjb25zdCBTdHJpbmcmIGtleSwgU3RyaW5nJiByZXN1
bHQpCit7CisgICAgYXV0byBzdHJpbmcgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENG
RGljdGlvbmFyeUdldFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5LmNyZWF0ZUNG
U3RyaW5nKCkuZ2V0KCkpKTsKKyAgICBpZiAoIXN0cmluZykKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmVzdWx0ID0gc3RyaW5nOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEtl
eWVkRGVjb2RlckNGOjpiZWdpbk9iamVjdChjb25zdCBTdHJpbmcmIGtleSkKK3sKKyAgICBhdXRv
IGRpY3Rpb25hcnkgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRkRpY3Rpb25h
cnlHZXRWYWx1ZShtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCksIGtleS5jcmVhdGVDRlN0cmluZygp
LmdldCgpKSk7CisgICAgaWYgKCFkaWN0aW9uYXJ5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBtX2RpY3Rpb25hcnlTdGFjay5hcHBlbmQoZGljdGlvbmFyeSk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3ZvaWQgS2V5ZWREZWNvZGVyQ0Y6OmVuZE9iamVjdCgpCit7CisgICAgbV9kaWN0
aW9uYXJ5U3RhY2sucmVtb3ZlTGFzdCgpOworfQorCitib29sIEtleWVkRGVjb2RlckNGOjpiZWdp
bkFycmF5KGNvbnN0IFN0cmluZyYga2V5KQoreworICAgIGF1dG8gYXJyYXkgPSBkeW5hbWljX2Nm
X2Nhc3Q8Q0ZBcnJheVJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUobV9kaWN0aW9uYXJ5U3RhY2su
bGFzdCgpLCBrZXkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOworICAgIGlmICghYXJyYXkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IENGQXJy
YXlHZXRDb3VudChhcnJheSk7ICsraSkgeworICAgICAgICBDRlR5cGVSZWYgb2JqZWN0ID0gQ0ZB
cnJheUdldFZhbHVlQXRJbmRleChhcnJheSwgaSk7CisgICAgICAgIGlmIChDRkdldFR5cGVJRChv
YmplY3QpICE9IENGRGljdGlvbmFyeUdldFR5cGVJRCgpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIG1fYXJyYXlTdGFjay5hcHBlbmQoYXJyYXkpOworICAgIG1fYXJy
YXlJbmRleFN0YWNrLmFwcGVuZCgwKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBLZXll
ZERlY29kZXJDRjo6YmVnaW5BcnJheUVsZW1lbnQoKQoreworICAgIGlmIChtX2FycmF5SW5kZXhT
dGFjay5sYXN0KCkgPj0gQ0ZBcnJheUdldENvdW50KG1fYXJyYXlTdGFjay5sYXN0KCkpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGRpY3Rpb25hcnkgPSBjaGVja2VkX2NmX2Nh
c3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KG1fYXJyYXlTdGFjay5s
YXN0KCksIG1fYXJyYXlJbmRleFN0YWNrLmxhc3QoKSsrKSk7CisgICAgbV9kaWN0aW9uYXJ5U3Rh
Y2suYXBwZW5kKGRpY3Rpb25hcnkpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEtleWVk
RGVjb2RlckNGOjplbmRBcnJheUVsZW1lbnQoKQoreworICAgIG1fZGljdGlvbmFyeVN0YWNrLnJl
bW92ZUxhc3QoKTsKK30KKwordm9pZCBLZXllZERlY29kZXJDRjo6ZW5kQXJyYXkoKQoreworICAg
IG1fYXJyYXlTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgbV9hcnJheUluZGV4U3RhY2sucmVtb3Zl
TGFzdCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jZi9LZXllZERlY29kZXJDRi5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2YvS2V5ZWREZWNvZGVyQ0YuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4zZjA3YjlhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2YvS2V5ZWREZWNvZGVyQ0YuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBLZXllZERlY29kZXJDRl9oCisjZGVmaW5lIEtleWVkRGVjb2RlckNGX2gKKworI2luY2x1ZGUg
IktleWVkQ29kaW5nLmgiCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBLZXllZERlY29kZXJD
RiBmaW5hbCA6IHB1YmxpYyBLZXllZERlY29kZXIgeworcHVibGljOgorICAgIEtleWVkRGVjb2Rl
ckNGKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCk7CisgICAgdmlydHVhbCB+S2V5ZWREZWNv
ZGVyQ0YoKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlQnl0
ZXMoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IHVpbnQ4X3QqJiwgc2l6ZV90Jikgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCBib29sIGRlY29kZUJvb2woY29uc3QgU3RyaW5nJiBrZXksIGJvb2wmKSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlVUludDMyKGNvbnN0IFN0cmluZyYga2V5
LCB1aW50MzJfdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVJbnQzMihjb25z
dCBTdHJpbmcmIGtleSwgaW50MzJfdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBkZWNv
ZGVJbnQ2NChjb25zdCBTdHJpbmcmIGtleSwgaW50NjRfdCYpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgYm9vbCBkZWNvZGVGbG9hdChjb25zdCBTdHJpbmcmIGtleSwgZmxvYXQmKSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlRG91YmxlKGNvbnN0IFN0cmluZyYga2V5LCBkb3VibGUm
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlU3RyaW5nKGNvbnN0IFN0cmluZyYg
a2V5LCBTdHJpbmcmKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgYm9vbCBiZWdpbk9iamVjdChj
b25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuZE9iamVjdCgp
IG92ZXJyaWRlOworCisgICAgdmlydHVhbCBib29sIGJlZ2luQXJyYXkoY29uc3QgU3RyaW5nJiBr
ZXkpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBiZWdpbkFycmF5RWxlbWVudCgpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmRBcnJheUVsZW1lbnQoKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgZW5kQXJyYXkoKSBvdmVycmlkZTsKKworICAgIFJldGFpblB0cjxDRkRpY3Rp
b25hcnlSZWY+IG1fcm9vdERpY3Rpb25hcnk7CisKKyAgICBWZWN0b3I8Q0ZEaWN0aW9uYXJ5UmVm
LCAxNj4gbV9kaWN0aW9uYXJ5U3RhY2s7CisgICAgVmVjdG9yPENGQXJyYXlSZWYsIDE2PiBtX2Fy
cmF5U3RhY2s7CisgICAgVmVjdG9yPENGSW5kZXg+IG1fYXJyYXlJbmRleFN0YWNrOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gS2V5ZWREZWNvZGVyQ0ZfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvS2V5ZWRFbmNvZGVyQ0YuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvS2V5ZWRFbmNvZGVyQ0YuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYzUzZDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9LZXllZEVuY29kZXJDRi5jcHAKQEAgLTAsMCArMSwxNTIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiS2V5ZWRFbmNv
ZGVyQ0YuaCIKKworI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgPENvcmVGb3Vu
ZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RkOjp1bmlxdWVfcHRyPEtleWVkRW5jb2Rlcj4g
S2V5ZWRFbmNvZGVyOjplbmNvZGVyKCkKK3sKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxL
ZXllZEVuY29kZXJDRj4oKTsKK30KKworc3RhdGljIFJldGFpblB0cjxDRk11dGFibGVEaWN0aW9u
YXJ5UmVmPiBjcmVhdGVEaWN0aW9uYXJ5KCkKK3sKKyAgICByZXR1cm4gYWRvcHRDRihDRkRpY3Rp
b25hcnlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsICZrQ0ZUeXBlRGljdGlv
bmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKK30K
KworS2V5ZWRFbmNvZGVyQ0Y6OktleWVkRW5jb2RlckNGKCkKKyAgICA6IG1fcm9vdERpY3Rpb25h
cnkoY3JlYXRlRGljdGlvbmFyeSgpKQoreworICAgIG1fZGljdGlvbmFyeVN0YWNrLmFwcGVuZCht
X3Jvb3REaWN0aW9uYXJ5LmdldCgpKTsKK30KKyAgICAKK0tleWVkRW5jb2RlckNGOjp+S2V5ZWRF
bmNvZGVyQ0YoKQoreworICAgIEFTU0VSVChtX2RpY3Rpb25hcnlTdGFjay5zaXplKCkgPT0gMSk7
CisgICAgQVNTRVJUKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSA9PSBtX3Jvb3REaWN0aW9uYXJ5
KTsKKyAgICBBU1NFUlQobV9hcnJheVN0YWNrLmlzRW1wdHkoKSk7Cit9CisKK3ZvaWQgS2V5ZWRF
bmNvZGVyQ0Y6OmVuY29kZUJ5dGVzKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCB1aW50OF90KiBi
eXRlcywgc2l6ZV90IHNpemUpCit7CisgICAgYXV0byBkYXRhID0gYWRvcHRDRihDRkRhdGFDcmVh
dGVXaXRoQnl0ZXNOb0NvcHkoa0NGQWxsb2NhdG9yRGVmYXVsdCwgYnl0ZXMsIHNpemUsIGtDRkFs
bG9jYXRvck51bGwpKTsKKyAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShtX2RpY3Rpb25hcnlTdGFj
ay5sYXN0KCksIGtleS5jcmVhdGVDRlN0cmluZygpLmdldCgpLCBkYXRhLmdldCgpKTsKK30KKwor
dm9pZCBLZXllZEVuY29kZXJDRjo6ZW5jb2RlQm9vbChjb25zdCBTdHJpbmcmIGtleSwgYm9vbCB2
YWx1ZSkKK3sKKyAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShtX2RpY3Rpb25hcnlTdGFjay5sYXN0
KCksIGtleS5jcmVhdGVDRlN0cmluZygpLmdldCgpLCB2YWx1ZSA/IGtDRkJvb2xlYW5UcnVlIDog
a0NGQm9vbGVhbkZhbHNlKTsKK30KKwordm9pZCBLZXllZEVuY29kZXJDRjo6ZW5jb2RlVUludDMy
KGNvbnN0IFN0cmluZyYga2V5LCB1aW50MzJfdCB2YWx1ZSkKK3sKKyAgICBhdXRvIG51bWJlciA9
IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyU0lu
dDMyVHlwZSwgJnZhbHVlKSk7CisgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUobV9kaWN0aW9uYXJ5
U3RhY2subGFzdCgpLCBrZXkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgbnVtYmVyLmdldCgpKTsK
K30KKwordm9pZCBLZXllZEVuY29kZXJDRjo6ZW5jb2RlSW50MzIoY29uc3QgU3RyaW5nJiBrZXks
IGludDMyX3QgdmFsdWUpCit7CisgICAgYXV0byBudW1iZXIgPSBhZG9wdENGKENGTnVtYmVyQ3Jl
YXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlclNJbnQzMlR5cGUsICZ2YWx1ZSkpOwor
ICAgIENGRGljdGlvbmFyeVNldFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5LmNy
ZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIG51bWJlci5nZXQoKSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNv
ZGVyQ0Y6OmVuY29kZUludDY0KGNvbnN0IFN0cmluZyYga2V5LCBpbnQ2NF90IHZhbHVlKQorewor
ICAgIGF1dG8gbnVtYmVyID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCBrQ0ZOdW1iZXJTSW50NjRUeXBlLCAmdmFsdWUpKTsKKyAgICBDRkRpY3Rpb25hcnlTZXRW
YWx1ZShtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCksIGtleS5jcmVhdGVDRlN0cmluZygpLmdldCgp
LCBudW1iZXIuZ2V0KCkpOworfQorCit2b2lkIEtleWVkRW5jb2RlckNGOjplbmNvZGVGbG9hdChj
b25zdCBTdHJpbmcmIGtleSwgZmxvYXQgdmFsdWUpCit7CisgICAgYXV0byBudW1iZXIgPSBhZG9w
dENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckZsb2F0VHlw
ZSwgJnZhbHVlKSk7CisgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUobV9kaWN0aW9uYXJ5U3RhY2su
bGFzdCgpLCBrZXkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgbnVtYmVyLmdldCgpKTsKK30KKwor
dm9pZCBLZXllZEVuY29kZXJDRjo6ZW5jb2RlRG91YmxlKGNvbnN0IFN0cmluZyYga2V5LCBkb3Vi
bGUgdmFsdWUpCit7CisgICAgYXV0byBudW1iZXIgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtD
RkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckRvdWJsZVR5cGUsICZ2YWx1ZSkpOworICAgIENG
RGljdGlvbmFyeVNldFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5LmNyZWF0ZUNG
U3RyaW5nKCkuZ2V0KCksIG51bWJlci5nZXQoKSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyQ0Y6
OmVuY29kZVN0cmluZyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sK
KyAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCksIGtleS5j
cmVhdGVDRlN0cmluZygpLmdldCgpLCB2YWx1ZS5jcmVhdGVDRlN0cmluZygpLmdldCgpKTsKK30K
Kwordm9pZCBLZXllZEVuY29kZXJDRjo6YmVnaW5PYmplY3QoY29uc3QgU3RyaW5nJiBrZXkpCit7
CisgICAgYXV0byBkaWN0aW9uYXJ5ID0gY3JlYXRlRGljdGlvbmFyeSgpOworICAgIENGRGljdGlv
bmFyeVNldFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5LmNyZWF0ZUNGU3RyaW5n
KCkuZ2V0KCksIGRpY3Rpb25hcnkuZ2V0KCkpOworCisgICAgbV9kaWN0aW9uYXJ5U3RhY2suYXBw
ZW5kKGRpY3Rpb25hcnkuZ2V0KCkpOworfQorCit2b2lkIEtleWVkRW5jb2RlckNGOjplbmRPYmpl
Y3QoKQoreworICAgIG1fZGljdGlvbmFyeVN0YWNrLnJlbW92ZUxhc3QoKTsKK30KKwordm9pZCBL
ZXllZEVuY29kZXJDRjo6YmVnaW5BcnJheShjb25zdCBTdHJpbmcmIGtleSkKK3sKKyAgICBhdXRv
IGFycmF5ID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCAwLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7CisgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUo
bV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgYXJy
YXkuZ2V0KCkpOworCisgICAgbV9hcnJheVN0YWNrLmFwcGVuZChhcnJheS5nZXQoKSk7Cit9CisK
K3ZvaWQgS2V5ZWRFbmNvZGVyQ0Y6OmJlZ2luQXJyYXlFbGVtZW50KCkKK3sKKyAgICBhdXRvIGRp
Y3Rpb25hcnkgPSBjcmVhdGVEaWN0aW9uYXJ5KCk7CisgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKG1f
YXJyYXlTdGFjay5sYXN0KCksIGRpY3Rpb25hcnkuZ2V0KCkpOworCisgICAgbV9kaWN0aW9uYXJ5
U3RhY2suYXBwZW5kKGRpY3Rpb25hcnkuZ2V0KCkpOworfQorCit2b2lkIEtleWVkRW5jb2RlckNG
OjplbmRBcnJheUVsZW1lbnQoKQoreworICAgIG1fZGljdGlvbmFyeVN0YWNrLnJlbW92ZUxhc3Qo
KTsKK30KKwordm9pZCBLZXllZEVuY29kZXJDRjo6ZW5kQXJyYXkoKQoreworICAgIG1fYXJyYXlT
dGFjay5yZW1vdmVMYXN0KCk7Cit9CisKK1Bhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBLZXllZEVu
Y29kZXJDRjo6ZmluaXNoRW5jb2RpbmcoKQoreworICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRh
dGEgPSBhZG9wdENGKENGUHJvcGVydHlMaXN0Q3JlYXRlRGF0YShrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBtX3Jvb3REaWN0aW9uYXJ5LmdldCgpLCBrQ0ZQcm9wZXJ0eUxpc3RCaW5hcnlGb3JtYXRfdjFf
MCwgMCwgbnVsbHB0cikpOworICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjp3cmFwQ0ZEYXRhKGRhdGEuZ2V0KCkpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jZi9LZXllZEVuY29kZXJDRi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvS2V5
ZWRFbmNvZGVyQ0YuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTI4YzQ5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvS2V5ZWRFbmNv
ZGVyQ0YuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBLZXllZEVuY29k
ZXJDRl9oCisjZGVmaW5lIEtleWVkRW5jb2RlckNGX2gKKworI2luY2x1ZGUgIktleWVkQ29kaW5n
LmgiCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBLZXllZEVuY29kZXJDRiBmaW5hbCA6IHB1
YmxpYyBLZXllZEVuY29kZXIgeworcHVibGljOgorICAgIEtleWVkRW5jb2RlckNGKCk7CisgICAg
fktleWVkRW5jb2RlckNGKCk7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hh
cmVkQnVmZmVyPiBmaW5pc2hFbmNvZGluZygpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIHZp
cnR1YWwgdm9pZCBlbmNvZGVCeXRlcyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgdWludDhfdCos
IHNpemVfdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuY29kZUJvb2woY29uc3QgU3Ry
aW5nJiBrZXksIGJvb2wpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVVSW50MzIo
Y29uc3QgU3RyaW5nJiBrZXksIHVpbnQzMl90KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZW5jb2RlSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIGludDMyX3QpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBlbmNvZGVJbnQ2NChjb25zdCBTdHJpbmcmIGtleSwgaW50NjRfdCkgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIGVuY29kZUZsb2F0KGNvbnN0IFN0cmluZyYga2V5LCBmbG9h
dCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuY29kZURvdWJsZShjb25zdCBTdHJpbmcm
IGtleSwgZG91YmxlKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlU3RyaW5nKGNv
bnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwg
dm9pZCBiZWdpbk9iamVjdChjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCB2b2lkIGVuZE9iamVjdCgpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCB2b2lkIGJlZ2luQXJy
YXkoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkFy
cmF5RWxlbWVudCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmRBcnJheUVsZW1lbnQo
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kQXJyYXkoKSBvdmVycmlkZTsKKworICAg
IFJldGFpblB0cjxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPiBtX3Jvb3REaWN0aW9uYXJ5OworCisg
ICAgVmVjdG9yPENGTXV0YWJsZURpY3Rpb25hcnlSZWYsIDE2PiBtX2RpY3Rpb25hcnlTdGFjazsK
KyAgICBWZWN0b3I8Q0ZNdXRhYmxlQXJyYXlSZWYsIDE2PiBtX2FycmF5U3RhY2s7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBLZXllZEVuY29kZXJDRl9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL0tleWVkRGVjb2RlckdsaWIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2xpYi9LZXllZERlY29kZXJHbGliLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2QxOTQxCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2xpYi9LZXllZERlY29kZXJHbGliLmNwcApAQCAt
MCwwICsxLDE3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5MLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiS2V5ZWREZWNvZGVyR2xpYi5o
IgorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3N0ZDo6dW5pcXVlX3B0cjxLZXllZERlY29kZXI+IEtleWVkRGVjb2Rlcjo6ZGVjb2Rlcihj
b25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gc3RkOjptYWtl
X3VuaXF1ZTxLZXllZERlY29kZXJHbGliPihkYXRhLCBzaXplKTsKK30KKworS2V5ZWREZWNvZGVy
R2xpYjo6S2V5ZWREZWNvZGVyR2xpYihjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkK
K3sKKyAgICBHUmVmUHRyPEdCeXRlcz4gYnl0ZXMgPSBhZG9wdEdSZWYoZ19ieXRlc19uZXcoZGF0
YSwgc2l6ZSkpOworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhcmlhbnQgPSBnX3ZhcmlhbnRfbmV3
X2Zyb21fYnl0ZXMoR19WQVJJQU5UX1RZUEUoImF7c3Z9IiksIGJ5dGVzLmdldCgpLCBUUlVFKTsK
KyAgICBtX2RpY3Rpb25hcnlTdGFjay5hcHBlbmQoZGljdGlvbmFyeUZyb21HVmFyaWFudCh2YXJp
YW50LmdldCgpKSk7Cit9CisKK0tleWVkRGVjb2RlckdsaWI6On5LZXllZERlY29kZXJHbGliKCkK
K3sKKyAgICBBU1NFUlQobV9kaWN0aW9uYXJ5U3RhY2suc2l6ZSgpID09IDEpOworICAgIEFTU0VS
VChtX2FycmF5U3RhY2suaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQobV9hcnJheUluZGV4U3RhY2su
aXNFbXB0eSgpKTsKK30KKworSGFzaE1hcDxTdHJpbmcsIEdSZWZQdHI8R1ZhcmlhbnQ+PiBLZXll
ZERlY29kZXJHbGliOjpkaWN0aW9uYXJ5RnJvbUdWYXJpYW50KEdWYXJpYW50KiB2YXJpYW50KQor
eworICAgIEhhc2hNYXA8U3RyaW5nLCBHUmVmUHRyPEdWYXJpYW50Pj4gZGljdGlvbmFyeTsKKyAg
ICBHVmFyaWFudEl0ZXIgaXRlcjsKKyAgICBnX3ZhcmlhbnRfaXRlcl9pbml0KCZpdGVyLCB2YXJp
YW50KTsKKyAgICBjb25zdCBjaGFyKiBrZXk7CisgICAgR1ZhcmlhbnQqIHZhbHVlOworICAgIHdo
aWxlIChnX3ZhcmlhbnRfaXRlcl9sb29wKCZpdGVyLCAieyZzdn0iLCAma2V5LCAmdmFsdWUpKQor
ICAgICAgICBkaWN0aW9uYXJ5LnNldChTdHJpbmc6OmZyb21VVEY4KGtleSksIHZhbHVlKTsKKyAg
ICByZXR1cm4gV1RGOjptb3ZlKGRpY3Rpb25hcnkpOworfQorCitib29sIEtleWVkRGVjb2Rlckds
aWI6OmRlY29kZUJ5dGVzKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCB1aW50OF90KiYgYnl0ZXMs
IHNpemVfdCYgc2l6ZSkKK3sKKyAgICBHUmVmUHRyPEdWYXJpYW50PiB2YWx1ZSA9IG1fZGljdGlv
bmFyeVN0YWNrLmxhc3QoKS5nZXQoa2V5KTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBzaXplID0gZ192YXJpYW50X2dldF9zaXplKHZhbHVlLmdldCgpKTsK
KyAgICBieXRlcyA9IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihnX3ZhcmlhbnRfZ2V0X2Rh
dGEodmFsdWUuZ2V0KCkpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgRj4KK2Jvb2wgS2V5ZWREZWNvZGVyR2xpYjo6ZGVjb2RlU2ltcGxlVmFs
dWUoY29uc3QgU3RyaW5nJiBrZXksIFQmIHJlc3VsdCwgRiBnZXRGdW5jdGlvbikKK3sKKyAgICBH
UmVmUHRyPEdWYXJpYW50PiB2YWx1ZSA9IG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKS5nZXQoa2V5
KTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXN1bHQg
PSBnZXRGdW5jdGlvbih2YWx1ZS5nZXQoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
S2V5ZWREZWNvZGVyR2xpYjo6ZGVjb2RlQm9vbChjb25zdCBTdHJpbmcmIGtleSwgYm9vbCYgcmVz
dWx0KQoreworICAgIHJldHVybiBkZWNvZGVTaW1wbGVWYWx1ZShrZXksIHJlc3VsdCwgZ192YXJp
YW50X2dldF9ib29sZWFuKTsKK30KKworYm9vbCBLZXllZERlY29kZXJHbGliOjpkZWNvZGVVSW50
MzIoY29uc3QgU3RyaW5nJiBrZXksIHVpbnQzMl90JiByZXN1bHQpCit7CisgICAgcmV0dXJuIGRl
Y29kZVNpbXBsZVZhbHVlKGtleSwgcmVzdWx0LCBnX3ZhcmlhbnRfZ2V0X3VpbnQzMik7Cit9CisK
K2Jvb2wgS2V5ZWREZWNvZGVyR2xpYjo6ZGVjb2RlSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIGlu
dDMyX3QmIHJlc3VsdCkKK3sKKyAgICByZXR1cm4gZGVjb2RlU2ltcGxlVmFsdWUoa2V5LCByZXN1
bHQsIGdfdmFyaWFudF9nZXRfaW50MzIpOworfQorCitib29sIEtleWVkRGVjb2RlckdsaWI6OmRl
Y29kZUludDY0KGNvbnN0IFN0cmluZyYga2V5LCBpbnQ2NF90JiByZXN1bHQpCit7CisgICAgcmV0
dXJuIGRlY29kZVNpbXBsZVZhbHVlKGtleSwgcmVzdWx0LCBnX3ZhcmlhbnRfZ2V0X2ludDY0KTsK
K30KKworYm9vbCBLZXllZERlY29kZXJHbGliOjpkZWNvZGVGbG9hdChjb25zdCBTdHJpbmcmIGtl
eSwgZmxvYXQmIHJlc3VsdCkKK3sKKyAgICByZXR1cm4gZGVjb2RlU2ltcGxlVmFsdWUoa2V5LCBy
ZXN1bHQsIGdfdmFyaWFudF9nZXRfZG91YmxlKTsKK30KKworYm9vbCBLZXllZERlY29kZXJHbGli
OjpkZWNvZGVEb3VibGUoY29uc3QgU3RyaW5nJiBrZXksIGRvdWJsZSYgcmVzdWx0KQoreworICAg
IHJldHVybiBkZWNvZGVTaW1wbGVWYWx1ZShrZXksIHJlc3VsdCwgZ192YXJpYW50X2dldF9kb3Vi
bGUpOworfQorCitib29sIEtleWVkRGVjb2RlckdsaWI6OmRlY29kZVN0cmluZyhjb25zdCBTdHJp
bmcmIGtleSwgU3RyaW5nJiByZXN1bHQpCit7CisgICAgR1JlZlB0cjxHVmFyaWFudD4gdmFsdWUg
PSBtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCkuZ2V0KGtleSk7CisgICAgaWYgKCF2YWx1ZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmVzdWx0ID0gU3RyaW5nOjpmcm9tVVRGOChnX3Zh
cmlhbnRfZ2V0X3N0cmluZyh2YWx1ZS5nZXQoKSwgbnVsbHB0cikpOworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIEtleWVkRGVjb2RlckdsaWI6OmJlZ2luT2JqZWN0KGNvbnN0IFN0cmluZyYg
a2V5KQoreworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhbHVlID0gbV9kaWN0aW9uYXJ5U3RhY2su
bGFzdCgpLmdldChrZXkpOworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIG1fZGljdGlvbmFyeVN0YWNrLmFwcGVuZChkaWN0aW9uYXJ5RnJvbUdWYXJpYW50KHZh
bHVlLmdldCgpKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgS2V5ZWREZWNvZGVyR2xp
Yjo6ZW5kT2JqZWN0KCkKK3sKKyAgICBtX2RpY3Rpb25hcnlTdGFjay5yZW1vdmVMYXN0KCk7Cit9
CisKK2Jvb2wgS2V5ZWREZWNvZGVyR2xpYjo6YmVnaW5BcnJheShjb25zdCBTdHJpbmcmIGtleSkK
K3sKKyAgICBHUmVmUHRyPEdWYXJpYW50PiB2YWx1ZSA9IG1fZGljdGlvbmFyeVN0YWNrLmxhc3Qo
KS5nZXQoa2V5KTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBtX2FycmF5U3RhY2suYXBwZW5kKHZhbHVlLmdldCgpKTsKKyAgICBtX2FycmF5SW5kZXhTdGFj
ay5hcHBlbmQoMCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyR2xp
Yjo6YmVnaW5BcnJheUVsZW1lbnQoKQoreworICAgIGlmIChtX2FycmF5SW5kZXhTdGFjay5sYXN0
KCkgPj0gZ192YXJpYW50X25fY2hpbGRyZW4obV9hcnJheVN0YWNrLmxhc3QoKSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhcmlhbnQgPSBhZG9wdEdS
ZWYoZ192YXJpYW50X2dldF9jaGlsZF92YWx1ZShtX2FycmF5U3RhY2subGFzdCgpLCBtX2FycmF5
SW5kZXhTdGFjay5sYXN0KCkrKykpOworICAgIG1fZGljdGlvbmFyeVN0YWNrLmFwcGVuZChkaWN0
aW9uYXJ5RnJvbUdWYXJpYW50KHZhcmlhbnQuZ2V0KCkpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBLZXllZERlY29kZXJHbGliOjplbmRBcnJheUVsZW1lbnQoKQoreworICAgIG1fZGlj
dGlvbmFyeVN0YWNrLnJlbW92ZUxhc3QoKTsKK30KKwordm9pZCBLZXllZERlY29kZXJHbGliOjpl
bmRBcnJheSgpCit7CisgICAgbV9hcnJheVN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICBtX2FycmF5
SW5kZXhTdGFjay5yZW1vdmVMYXN0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dsaWIvS2V5ZWREZWNvZGVyR2xpYi5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2xpYi9LZXllZERlY29kZXJHbGliLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNlODhlMQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dsaWIvS2V5ZWREZWNvZGVyR2xpYi5oCkBAIC0wLDAg
KzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgSWdhaWEgUy5MLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIEtleWVkRGVjb2RlckdsaWJfaAorI2RlZmluZSBLZXllZERlY29kZXJHbGliX2gK
KworI2luY2x1ZGUgIktleWVkQ29kaW5nLmgiCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBLZXllZERlY29kZXJHbGliIGZpbmFsIDog
cHVibGljIEtleWVkRGVjb2RlciB7CitwdWJsaWM6CisgICAgS2V5ZWREZWNvZGVyR2xpYihjb25z
dCB1aW50OF90KiBkYXRhLCBzaXplX3QpOworICAgIHZpcnR1YWwgfktleWVkRGVjb2RlckdsaWIo
KSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlQnl0ZXMoY29u
c3QgU3RyaW5nJiBrZXksIGNvbnN0IHVpbnQ4X3QqJiwgc2l6ZV90Jikgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCBib29sIGRlY29kZUJvb2woY29uc3QgU3RyaW5nJiBrZXksIGJvb2wmKSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlVUludDMyKGNvbnN0IFN0cmluZyYga2V5LCB1aW50
MzJfdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVJbnQzMihjb25zdCBTdHJp
bmcmIGtleSwgaW50MzJfdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVJbnQ2
NChjb25zdCBTdHJpbmcmIGtleSwgaW50NjRfdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9v
bCBkZWNvZGVGbG9hdChjb25zdCBTdHJpbmcmIGtleSwgZmxvYXQmKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIGJvb2wgZGVjb2RlRG91YmxlKGNvbnN0IFN0cmluZyYga2V5LCBkb3VibGUmKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlU3RyaW5nKGNvbnN0IFN0cmluZyYga2V5LCBT
dHJpbmcmKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgYm9vbCBiZWdpbk9iamVjdChjb25zdCBT
dHJpbmcmIGtleSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuZE9iamVjdCgpIG92ZXJy
aWRlOworCisgICAgdmlydHVhbCBib29sIGJlZ2luQXJyYXkoY29uc3QgU3RyaW5nJiBrZXkpIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBiZWdpbkFycmF5RWxlbWVudCgpIG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgdm9pZCBlbmRBcnJheUVsZW1lbnQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IHZvaWQgZW5kQXJyYXkoKSBvdmVycmlkZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIEY+IGJvb2wgZGVjb2RlU2ltcGxlVmFsdWUoY29uc3QgU3RyaW5nJiBrZXksIFQmIHJl
c3VsdCwgRiBnZXRGdW5jdGlvbik7CisgICAgSGFzaE1hcDxTdHJpbmcsIEdSZWZQdHI8R1Zhcmlh
bnQ+PiBkaWN0aW9uYXJ5RnJvbUdWYXJpYW50KEdWYXJpYW50Kik7CisKKyAgICBWZWN0b3I8SGFz
aE1hcDxTdHJpbmcsIEdSZWZQdHI8R1ZhcmlhbnQ+Pj4gbV9kaWN0aW9uYXJ5U3RhY2s7CisgICAg
VmVjdG9yPEdWYXJpYW50KiwgMTY+IG1fYXJyYXlTdGFjazsKKyAgICBWZWN0b3I8dW5zaWduZWQ+
IG1fYXJyYXlJbmRleFN0YWNrOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gS2V5ZWREZWNvZGVyR2xpYl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9nbGliL0tleWVkRW5jb2RlckdsaWIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z2xpYi9LZXllZEVuY29kZXJHbGliLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5kNDkyMTM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z2xpYi9LZXllZEVuY29kZXJHbGliLmNwcApAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiS2V5ZWRFbmNvZGVyR2xpYi5oIgorCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVy
LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3N0ZDo6dW5pcXVlX3B0cjxLZXllZEVuY29kZXI+IEtleWVkRW5jb2Rlcjo6ZW5jb2Rlcigp
Cit7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8S2V5ZWRFbmNvZGVyR2xpYj4oKTsKK30K
KworS2V5ZWRFbmNvZGVyR2xpYjo6S2V5ZWRFbmNvZGVyR2xpYigpCit7CisgICAgZ192YXJpYW50
X2J1aWxkZXJfaW5pdCgmbV92YXJpYW50QnVpbGRlciwgR19WQVJJQU5UX1RZUEUoImF7c3Z9Iikp
OworICAgIG1fdmFyaWFudEJ1aWxkZXJTdGFjay5hcHBlbmQoJm1fdmFyaWFudEJ1aWxkZXIpOwor
fQorCitLZXllZEVuY29kZXJHbGliOjp+S2V5ZWRFbmNvZGVyR2xpYigpCit7CisgICAgQVNTRVJU
KG1fdmFyaWFudEJ1aWxkZXJTdGFjay5zaXplKCkgPT0gMSk7CisgICAgQVNTRVJUKG1fdmFyaWFu
dEJ1aWxkZXJTdGFjay5sYXN0KCkgPT0gJm1fdmFyaWFudEJ1aWxkZXIpOworICAgIEFTU0VSVCht
X2FycmF5U3RhY2suaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQobV9vYmplY3RTdGFjay5pc0VtcHR5
KCkpOworfQorCit2b2lkIEtleWVkRW5jb2RlckdsaWI6OmVuY29kZUJ5dGVzKGNvbnN0IFN0cmlu
ZyYga2V5LCBjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90IHNpemUpCit7CisgICAgR1JlZlB0
cjxHQnl0ZXM+IGdCeXRlcyA9IGFkb3B0R1JlZihnX2J5dGVzX25ld19zdGF0aWMoYnl0ZXMsIHNp
emUpKTsKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQobV92YXJpYW50QnVpbGRlclN0YWNrLmxh
c3QoKSwgIntzdn0iLCBrZXkudXRmOCgpLmRhdGEoKSwgZ192YXJpYW50X25ld19mcm9tX2J5dGVz
KEdfVkFSSUFOVF9UWVBFKCJheSIpLCBnQnl0ZXMuZ2V0KCksIFRSVUUpKTsKK30KKwordm9pZCBL
ZXllZEVuY29kZXJHbGliOjplbmNvZGVCb29sKGNvbnN0IFN0cmluZyYga2V5LCBib29sIHZhbHVl
KQoreworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChtX3ZhcmlhbnRCdWlsZGVyU3RhY2subGFz
dCgpLCAie3N2fSIsIGtleS51dGY4KCkuZGF0YSgpLCBnX3ZhcmlhbnRfbmV3X2Jvb2xlYW4odmFs
dWUpKTsKK30KKwordm9pZCBLZXllZEVuY29kZXJHbGliOjplbmNvZGVVSW50MzIoY29uc3QgU3Ry
aW5nJiBrZXksIHVpbnQzMl90IHZhbHVlKQoreworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZCht
X3ZhcmlhbnRCdWlsZGVyU3RhY2subGFzdCgpLCAie3N2fSIsIGtleS51dGY4KCkuZGF0YSgpLCBn
X3ZhcmlhbnRfbmV3X3VpbnQzMih2YWx1ZSkpOworfQorCit2b2lkIEtleWVkRW5jb2RlckdsaWI6
OmVuY29kZUludDMyKGNvbnN0IFN0cmluZyYga2V5LCBpbnQzMl90IHZhbHVlKQoreworICAgIGdf
dmFyaWFudF9idWlsZGVyX2FkZChtX3ZhcmlhbnRCdWlsZGVyU3RhY2subGFzdCgpLCAie3N2fSIs
IGtleS51dGY4KCkuZGF0YSgpLCBnX3ZhcmlhbnRfbmV3X2ludDMyKHZhbHVlKSk7Cit9CisKK3Zv
aWQgS2V5ZWRFbmNvZGVyR2xpYjo6ZW5jb2RlSW50NjQoY29uc3QgU3RyaW5nJiBrZXksIGludDY0
X3QgdmFsdWUpCit7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJT
dGFjay5sYXN0KCksICJ7c3Z9Iiwga2V5LnV0ZjgoKS5kYXRhKCksIGdfdmFyaWFudF9uZXdfaW50
NjQodmFsdWUpKTsKK30KKwordm9pZCBLZXllZEVuY29kZXJHbGliOjplbmNvZGVGbG9hdChjb25z
dCBTdHJpbmcmIGtleSwgZmxvYXQgdmFsdWUpCit7CisgICAgZW5jb2RlRG91YmxlKGtleSwgdmFs
dWUpOworfQorCit2b2lkIEtleWVkRW5jb2RlckdsaWI6OmVuY29kZURvdWJsZShjb25zdCBTdHJp
bmcmIGtleSwgZG91YmxlIHZhbHVlKQoreworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChtX3Zh
cmlhbnRCdWlsZGVyU3RhY2subGFzdCgpLCAie3N2fSIsIGtleS51dGY4KCkuZGF0YSgpLCBnX3Zh
cmlhbnRfbmV3X2RvdWJsZSh2YWx1ZSkpOworfQorCit2b2lkIEtleWVkRW5jb2RlckdsaWI6OmVu
Y29kZVN0cmluZyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAg
ICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQobV92YXJpYW50QnVpbGRlclN0YWNrLmxhc3QoKSwgIntz
dn0iLCBrZXkudXRmOCgpLmRhdGEoKSwgZ192YXJpYW50X25ld19zdHJpbmcodmFsdWUudXRmOCgp
LmRhdGEoKSkpOworfQorCit2b2lkIEtleWVkRW5jb2RlckdsaWI6OmJlZ2luT2JqZWN0KGNvbnN0
IFN0cmluZyYga2V5KQoreworICAgIEdSZWZQdHI8R1ZhcmlhbnRCdWlsZGVyPiBidWlsZGVyID0g
YWRvcHRHUmVmKGdfdmFyaWFudF9idWlsZGVyX25ldyhHX1ZBUklBTlRfVFlQRSgiYWF7c3Z9Iikp
KTsKKyAgICBtX29iamVjdFN0YWNrLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihrZXksIGJ1aWxkZXIp
KTsKKyAgICBtX3ZhcmlhbnRCdWlsZGVyU3RhY2suYXBwZW5kKGJ1aWxkZXIuZ2V0KCkpOworfQor
Cit2b2lkIEtleWVkRW5jb2RlckdsaWI6OmVuZE9iamVjdCgpCit7CisgICAgR1ZhcmlhbnRCdWls
ZGVyKiBidWlsZGVyID0gbV92YXJpYW50QnVpbGRlclN0YWNrLnRha2VMYXN0KCk7CisgICAgZ192
YXJpYW50X2J1aWxkZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCksICJ7c3Z9Iiwg
bV9vYmplY3RTdGFjay5sYXN0KCkuZmlyc3QudXRmOCgpLmRhdGEoKSwgZ192YXJpYW50X2J1aWxk
ZXJfZW5kKGJ1aWxkZXIpKTsKKyAgICBtX29iamVjdFN0YWNrLnJlbW92ZUxhc3QoKTsKK30KKwor
dm9pZCBLZXllZEVuY29kZXJHbGliOjpiZWdpbkFycmF5KGNvbnN0IFN0cmluZyYga2V5KQorewor
ICAgIG1fYXJyYXlTdGFjay5hcHBlbmQoc3RkOjptYWtlX3BhaXIoa2V5LCBhZG9wdEdSZWYoZ192
YXJpYW50X2J1aWxkZXJfbmV3KEdfVkFSSUFOVF9UWVBFKCJhYXtzdn0iKSkpKSk7Cit9CisKK3Zv
aWQgS2V5ZWRFbmNvZGVyR2xpYjo6YmVnaW5BcnJheUVsZW1lbnQoKQoreworICAgIG1fdmFyaWFu
dEJ1aWxkZXJTdGFjay5hcHBlbmQoZ192YXJpYW50X2J1aWxkZXJfbmV3KEdfVkFSSUFOVF9UWVBF
KCJhe3N2fSIpKSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyR2xpYjo6ZW5kQXJyYXlFbGVtZW50
KCkKK3sKKyAgICBHUmVmUHRyPEdWYXJpYW50QnVpbGRlcj4gdmFyaWFudEJ1aWxkZXIgPSBhZG9w
dEdSZWYobV92YXJpYW50QnVpbGRlclN0YWNrLnRha2VMYXN0KCkpOworICAgIGdfdmFyaWFudF9i
dWlsZGVyX2FkZF92YWx1ZShtX2FycmF5U3RhY2subGFzdCgpLnNlY29uZC5nZXQoKSwgZ192YXJp
YW50X2J1aWxkZXJfZW5kKHZhcmlhbnRCdWlsZGVyLmdldCgpKSk7Cit9CisKK3ZvaWQgS2V5ZWRF
bmNvZGVyR2xpYjo6ZW5kQXJyYXkoKQoreworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChtX3Zh
cmlhbnRCdWlsZGVyU3RhY2subGFzdCgpLCAie3N2fSIsIG1fYXJyYXlTdGFjay5sYXN0KCkuZmly
c3QudXRmOCgpLmRhdGEoKSwgZ192YXJpYW50X2J1aWxkZXJfZW5kKG1fYXJyYXlTdGFjay5sYXN0
KCkuc2Vjb25kLmdldCgpKSk7CisgICAgbV9hcnJheVN0YWNrLnJlbW92ZUxhc3QoKTsKK30KKwor
UGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IEtleWVkRW5jb2RlckdsaWI6OmZpbmlzaEVuY29kaW5n
KCkKK3sKKyAgICBnX2Fzc2VydChtX3ZhcmlhbnRCdWlsZGVyU3RhY2subGFzdCgpID09ICZtX3Zh
cmlhbnRCdWlsZGVyKTsKKyAgICBHUmVmUHRyPEdWYXJpYW50PiB2YXJpYW50ID0gZ192YXJpYW50
X2J1aWxkZXJfZW5kKCZtX3ZhcmlhbnRCdWlsZGVyKTsKKyAgICBHUmVmUHRyPEdCeXRlcz4gZGF0
YSA9IGdfdmFyaWFudF9nZXRfZGF0YV9hc19ieXRlcyh2YXJpYW50LmdldCgpKTsKKyAgICByZXR1
cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KGdfYnl0ZXNfZ2V0X2RhdGEoZGF0YS5nZXQoKSwgbnVsbHB0cikpLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oZ19ieXRlc19nZXRfc2l6ZShkYXRhLmdldCgpKSkpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL0tleWVk
RW5jb2RlckdsaWIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dsaWIvS2V5ZWRFbmNvZGVy
R2xpYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMzBmNGMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL0tleWVkRW5jb2Rlckds
aWIuaApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBT
LkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgS2V5ZWRFbmNvZGVyR2xpYl9oCisjZGVmaW5lIEtleWVk
RW5jb2RlckdsaWJfaAorCisjaW5jbHVkZSAiS2V5ZWRDb2RpbmcuaCIKKyNpbmNsdWRlIDxnbGli
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBLZXllZEVuY29kZXJHbGliIGZpbmFsIDogcHVibGljIEtleWVkRW5jb2RlciB7
CitwdWJsaWM6CisgICAgS2V5ZWRFbmNvZGVyR2xpYigpOworICAgIH5LZXllZEVuY29kZXJHbGli
KCk7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBmaW5p
c2hFbmNvZGluZygpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBlbmNv
ZGVCeXRlcyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgdWludDhfdCosIHNpemVfdCkgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIGVuY29kZUJvb2woY29uc3QgU3RyaW5nJiBrZXksIGJvb2wp
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVVSW50MzIoY29uc3QgU3RyaW5nJiBr
ZXksIHVpbnQzMl90KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlSW50MzIoY29u
c3QgU3RyaW5nJiBrZXksIGludDMyX3QpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmNv
ZGVJbnQ2NChjb25zdCBTdHJpbmcmIGtleSwgaW50NjRfdCkgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCB2b2lkIGVuY29kZUZsb2F0KGNvbnN0IFN0cmluZyYga2V5LCBmbG9hdCkgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIGVuY29kZURvdWJsZShjb25zdCBTdHJpbmcmIGtleSwgZG91YmxlKSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlU3RyaW5nKGNvbnN0IFN0cmluZyYga2V5
LCBjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgdm9pZCBiZWdpbk9iamVj
dChjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuZE9iamVj
dCgpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCB2b2lkIGJlZ2luQXJyYXkoY29uc3QgU3RyaW5n
JiBrZXkpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkFycmF5RWxlbWVudCgpIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmRBcnJheUVsZW1lbnQoKSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZW5kQXJyYXkoKSBvdmVycmlkZTsKKworICAgIEdWYXJpYW50QnVpbGRl
ciBtX3ZhcmlhbnRCdWlsZGVyOworICAgIFZlY3RvcjxHVmFyaWFudEJ1aWxkZXIqLCAxNj4gbV92
YXJpYW50QnVpbGRlclN0YWNrOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBHUmVmUHRy
PEdWYXJpYW50QnVpbGRlcj4+LCAxNj4gbV9hcnJheVN0YWNrOworICAgIFZlY3RvcjxzdGQ6OnBh
aXI8U3RyaW5nLCBHUmVmUHRyPEdWYXJpYW50QnVpbGRlcj4+LCAxNj4gbV9vYmplY3RTdGFjazsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEtleWVkRW5jb2Rlckds
aWJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCmluZGV4IGNmNmRmYTkuLmI3YmI2YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyMCBAQAorMjAxNS0wOC0wNyAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgTW92ZSBjb25jcmV0ZSBLZXllZERlY29kZXIvRW5jb2RlciBpbXBsZW1lbnRhdGlv
bnMgdG8gV2ViQ29yZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0Nzc1Ny4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvSURCU2VyaWFsaXphdGlvbi5jcHA6
CisgICAgICAgIChXZWJLaXQ6OnNlcmlhbGl6ZUlEQktleVBhdGgpOgorICAgICAgICAoV2ViS2l0
OjpkZXNlcmlhbGl6ZUlEQktleVBhdGgpOgorICAgICAgICAoV2ViS2l0OjpzZXJpYWxpemVJREJL
ZXlEYXRhKToKKyAgICAgICAgKFdlYktpdDo6ZGVzZXJpYWxpemVJREJLZXlEYXRhKToKKyAgICAg
ICAgCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1HVEsu
Y21ha2U6CisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAy
MDE1LTA4LTA2ICBNYXR0IFJhamNhICA8bXJhamNhQGFwcGxlLmNvbT4KIAogICAgICAgICBNZWRp
YSBTZXNzaW9uOiBub3RpZnkgZm9jdXMgbWFuYWdlciBjbGllbnRzIHdoZW4gdGhlIHBsYXlpbmcg
c3RhdGUgb2YgdGhlIGZvY3VzZWQgbWVkaWEgZWxlbWVudCBjaGFuZ2VzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0lEQlNlcmlhbGl6YXRpb24u
Y3BwIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9JREJTZXJpYWxp
emF0aW9uLmNwcAppbmRleCA3ZDczMGJlLi5hMTI1ZDZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0lEQlNlcmlhbGl6YXRpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvSURCU2VyaWFsaXphdGlv
bi5jcHAKQEAgLTI4LDEwICsyOCw5IEBACiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAK
ICNpbmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIKLSNpbmNsdWRlICJLZXllZERlY29kZXIuaCIK
LSNpbmNsdWRlICJLZXllZEVuY29kZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0lEQktleURhdGEu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0lEQktleVBhdGguaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0tl
eWVkQ29kaW5nLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0zOSw5ICszOCw5
IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBSZWZQdHI8U2hhcmVkQnVmZmVyPiBzZXJpYWxpemVJ
REJLZXlQYXRoKGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCiB7Ci0gICAgS2V5ZWRFbmNvZGVy
IGVuY29kZXI7Ci0gICAga2V5UGF0aC5lbmNvZGUoZW5jb2Rlcik7Ci0gICAgcmV0dXJuIGVuY29k
ZXIuZmluaXNoRW5jb2RpbmcoKTsKKyAgICBhdXRvIGVuY29kZXIgPSBLZXllZEVuY29kZXI6OmVu
Y29kZXIoKTsKKyAgICBrZXlQYXRoLmVuY29kZSgqZW5jb2Rlcik7CisgICAgcmV0dXJuIGVuY29k
ZXItPmZpbmlzaEVuY29kaW5nKCk7CiB9CiAKIGJvb2wgZGVzZXJpYWxpemVJREJLZXlQYXRoKGNv
bnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBJREJLZXlQYXRoJiByZXN1bHQpCkBAIC00
OSwxNSArNDgsMTUgQEAgYm9vbCBkZXNlcmlhbGl6ZUlEQktleVBhdGgoY29uc3QgdWludDhfdCog
ZGF0YSwgc2l6ZV90IHNpemUsIElEQktleVBhdGgmIHJlc3VsdCkKICAgICBpZiAoIWRhdGEgfHwg
IXNpemUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEtleWVkRGVjb2RlciBkZWNvZGVy
KGRhdGEsIHNpemUpOwotICAgIHJldHVybiBJREJLZXlQYXRoOjpkZWNvZGUoZGVjb2RlciwgcmVz
dWx0KTsKKyAgICBhdXRvIGRlY29kZXIgPSBLZXllZERlY29kZXI6OmRlY29kZXIoZGF0YSwgc2l6
ZSk7CisgICAgcmV0dXJuIElEQktleVBhdGg6OmRlY29kZSgqZGVjb2RlciwgcmVzdWx0KTsKIH0K
IAogUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gc2VyaWFsaXplSURCS2V5RGF0YShjb25zdCBJREJLZXlE
YXRhJiBrZXkpCiB7Ci0gICAgS2V5ZWRFbmNvZGVyIGVuY29kZXI7Ci0gICAga2V5LmVuY29kZShl
bmNvZGVyKTsKLSAgICByZXR1cm4gZW5jb2Rlci5maW5pc2hFbmNvZGluZygpOworICAgIGF1dG8g
ZW5jb2RlciA9IEtleWVkRW5jb2Rlcjo6ZW5jb2RlcigpOworICAgIGtleS5lbmNvZGUoKmVuY29k
ZXIpOworICAgIHJldHVybiBlbmNvZGVyLT5maW5pc2hFbmNvZGluZygpOwogfQogCiBib29sIGRl
c2VyaWFsaXplSURCS2V5RGF0YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSwgSURC
S2V5RGF0YSYgcmVzdWx0KQpAQCAtNjUsOCArNjQsOCBAQCBib29sIGRlc2VyaWFsaXplSURCS2V5
RGF0YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSwgSURCS2V5RGF0YSYgcmVzdWx0
KQogICAgIGlmICghZGF0YSB8fCAhc2l6ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
S2V5ZWREZWNvZGVyIGRlY29kZXIoZGF0YSwgc2l6ZSk7Ci0gICAgcmV0dXJuIElEQktleURhdGE6
OmRlY29kZShkZWNvZGVyLCByZXN1bHQpOworICAgIGF1dG8gZGVjb2RlciA9IEtleWVkRGVjb2Rl
cjo6ZGVjb2RlcihkYXRhLCBzaXplKTsKKyAgICByZXR1cm4gSURCS2V5RGF0YTo6ZGVjb2RlKCpk
ZWNvZGVyLCByZXN1bHQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZv
cm1FZmwuY21ha2UKaW5kZXggZTQzNWU4MS4uMDVhNTI4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwu
Y21ha2UKQEAgLTQ3LDkgKzQ3LDYgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAg
U2hhcmVkL2VmbC9Qcm9jZXNzRXhlY3V0YWJsZVBhdGhFZmwuY3BwCiAgICAgU2hhcmVkL2VmbC9X
ZWJFdmVudEZhY3RvcnkuY3BwCiAKLSAgICBTaGFyZWQvZ2xpYi9LZXllZERlY29kZXIuY3BwCi0g
ICAgU2hhcmVkL2dsaWIvS2V5ZWRFbmNvZGVyLmNwcAotCiAgICAgU2hhcmVkL2xpbnV4L1dlYk1l
bW9yeVNhbXBsZXJMaW51eC5jcHAKIAogICAgIFNoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9P
cGVuU3lzY2FsbC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNt
YWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggNjExM2U2MS4uYmQ5
ZjcyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIv
U291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTYyLDggKzYyLDYgQEAgbGlzdChB
UFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAKICAgICBTaGFyZWQvY2Fpcm8vU2hhcmVhYmxlQml0bWFw
Q2Fpcm8uY3BwCiAKLSAgICBTaGFyZWQvZ2xpYi9LZXllZERlY29kZXIuY3BwCi0gICAgU2hhcmVk
L2dsaWIvS2V5ZWRFbmNvZGVyLmNwcAogICAgIFNoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsu
Y3BwCiAgICAgU2hhcmVkL2d0ay9OYXRpdmVDb250ZXh0TWVudUl0ZW1HdGsuY3BwCiAgICAgU2hh
cmVkL2d0ay9OYXRpdmVXZWJLZXlib2FyZEV2ZW50R3RrLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvU2hhcmVkL2NmL0tleWVkRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvY2YvS2V5ZWREZWNvZGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmJh
M2ZjMS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2YvS2V5ZWREZWNvZGVy
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIktleWVkRGVjb2Rlci5oIgotCi0jaW5jbHVkZSA8d3Rm
L2NmL1R5cGVDYXN0c0NGLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5h
bWVzcGFjZSBXZWJLaXQgewotCi1LZXllZERlY29kZXI6OktleWVkRGVjb2Rlcihjb25zdCB1aW50
OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZE
YXRhQ3JlYXRlV2l0aEJ5dGVzTm9Db3B5KGtDRkFsbG9jYXRvckRlZmF1bHQsIGRhdGEsIHNpemUs
IGtDRkFsbG9jYXRvck51bGwpKTsKLQotICAgIGlmIChhdXRvIHJvb3REaWN0aW9uYXJ5ID0gYWRv
cHRDRihkeW5hbWljX2NmX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRlByb3BlcnR5TGlzdENyZWF0
ZVdpdGhEYXRhKGtDRkFsbG9jYXRvckRlZmF1bHQsIGNmRGF0YS5nZXQoKSwga0NGUHJvcGVydHlM
aXN0SW1tdXRhYmxlLCBudWxscHRyLCBudWxscHRyKSkpKQotICAgICAgICBtX3Jvb3REaWN0aW9u
YXJ5ID0gV1RGOjptb3ZlKHJvb3REaWN0aW9uYXJ5KTsKLSAgICBlbHNlCi0gICAgICAgIG1fcm9v
dERpY3Rpb25hcnkgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCBudWxscHRyLCBudWxscHRyLCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3Ms
ICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgbV9kaWN0aW9uYXJ5U3Rh
Y2suYXBwZW5kKG1fcm9vdERpY3Rpb25hcnkuZ2V0KCkpOwotfQotCi1LZXllZERlY29kZXI6On5L
ZXllZERlY29kZXIoKQotewotICAgIEFTU0VSVChtX2RpY3Rpb25hcnlTdGFjay5zaXplKCkgPT0g
MSk7Ci0gICAgQVNTRVJUKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSA9PSBtX3Jvb3REaWN0aW9u
YXJ5KTsKLSAgICBBU1NFUlQobV9hcnJheVN0YWNrLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKG1f
YXJyYXlJbmRleFN0YWNrLmlzRW1wdHkoKSk7Ci19Ci0KLWJvb2wgS2V5ZWREZWNvZGVyOjpkZWNv
ZGVCeXRlcyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgdWludDhfdComIGJ5dGVzLCBzaXplX3Qm
IHNpemUpCi17Ci0gICAgYXV0byBkYXRhID0gZHluYW1pY19jZl9jYXN0PENGRGF0YVJlZj4oQ0ZE
aWN0aW9uYXJ5R2V0VmFsdWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXkuY3JlYXRlQ0ZT
dHJpbmcoKS5nZXQoKSkpOwotICAgIGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgYnl0ZXMgPSBDRkRhdGFHZXRCeXRlUHRyKGRhdGEpOwotICAgIHNpemUgPSBDRkRhdGFH
ZXRMZW5ndGgoZGF0YSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgS2V5ZWREZWNvZGVy
OjpkZWNvZGVCb29sKGNvbnN0IFN0cmluZyYga2V5LCBib29sJiByZXN1bHQpCi17Ci0gICAgYXV0
byBib29sZWFuID0gZHluYW1pY19jZl9jYXN0PENGQm9vbGVhblJlZj4oQ0ZEaWN0aW9uYXJ5R2V0
VmFsdWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQo
KSkpOwotICAgIGlmICghYm9vbGVhbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmVz
dWx0ID0gQ0ZCb29sZWFuR2V0VmFsdWUoYm9vbGVhbik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVVSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIHVpbnQz
Ml90JiByZXN1bHQpCi17Ci0gICAgcmV0dXJuIGRlY29kZUludDMyKGtleSwgcmVpbnRlcnByZXRf
Y2FzdDxpbnQzMl90Jj4ocmVzdWx0KSk7Ci19Ci0KLWJvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVJ
bnQzMihjb25zdCBTdHJpbmcmIGtleSwgaW50MzJfdCYgcmVzdWx0KQotewotICAgIGF1dG8gbnVt
YmVyID0gZHluYW1pY19jZl9jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZSht
X2RpY3Rpb25hcnlTdGFjay5sYXN0KCksIGtleS5jcmVhdGVDRlN0cmluZygpLmdldCgpKSk7Ci0g
ICAgaWYgKCFudW1iZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBDRk51
bWJlckdldFZhbHVlKG51bWJlciwga0NGTnVtYmVyU0ludDMyVHlwZSwgJnJlc3VsdCk7Ci19Ci0K
LWJvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVJbnQ2NChjb25zdCBTdHJpbmcmIGtleSwgaW50NjRf
dCYgcmVzdWx0KQotewotICAgIGF1dG8gbnVtYmVyID0gZHluYW1pY19jZl9jYXN0PENGTnVtYmVy
UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCksIGtleS5j
cmVhdGVDRlN0cmluZygpLmdldCgpKSk7Ci0gICAgaWYgKCFudW1iZXIpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIHJldHVybiBDRk51bWJlckdldFZhbHVlKG51bWJlciwga0NGTnVtYmVy
U0ludDY0VHlwZSwgJnJlc3VsdCk7Ci19Ci0KLWJvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVGbG9h
dChjb25zdCBTdHJpbmcmIGtleSwgZmxvYXQmIHJlc3VsdCkKLXsKLSAgICBhdXRvIG51bWJlciA9
IGR5bmFtaWNfY2ZfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUobV9kaWN0
aW9uYXJ5U3RhY2subGFzdCgpLCBrZXkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOwotICAgIGlm
ICghbnVtYmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gQ0ZOdW1iZXJH
ZXRWYWx1ZShudW1iZXIsIGtDRk51bWJlckZsb2F0VHlwZSwgJnJlc3VsdCk7Ci19Ci0KLWJvb2wg
S2V5ZWREZWNvZGVyOjpkZWNvZGVEb3VibGUoY29uc3QgU3RyaW5nJiBrZXksIGRvdWJsZSYgcmVz
dWx0KQotewotICAgIGF1dG8gbnVtYmVyID0gZHluYW1pY19jZl9jYXN0PENGTnVtYmVyUmVmPihD
RkRpY3Rpb25hcnlHZXRWYWx1ZShtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCksIGtleS5jcmVhdGVD
RlN0cmluZygpLmdldCgpKSk7Ci0gICAgaWYgKCFudW1iZXIpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHJldHVybiBDRk51bWJlckdldFZhbHVlKG51bWJlciwga0NGTnVtYmVyRG91Ymxl
VHlwZSwgJnJlc3VsdCk7Ci19Ci0KLWJvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVTdHJpbmcoY29u
c3QgU3RyaW5nJiBrZXksIFN0cmluZyYgcmVzdWx0KQotewotICAgIGF1dG8gc3RyaW5nID0gZHlu
YW1pY19jZl9jYXN0PENGU3RyaW5nUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShtX2RpY3Rpb25h
cnlTdGFjay5sYXN0KCksIGtleS5jcmVhdGVDRlN0cmluZygpLmdldCgpKSk7Ci0gICAgaWYgKCFz
dHJpbmcpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJlc3VsdCA9IHN0cmluZzsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBLZXllZERlY29kZXI6OmJlZ2luT2JqZWN0KGNvbnN0
IFN0cmluZyYga2V5KQotewotICAgIGF1dG8gZGljdGlvbmFyeSA9IGR5bmFtaWNfY2ZfY2FzdDxD
RkRpY3Rpb25hcnlSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxh
c3QoKSwga2V5LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKTsKLSAgICBpZiAoIWRpY3Rpb25hcnkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fZGljdGlvbmFyeVN0YWNrLmFwcGVuZChk
aWN0aW9uYXJ5KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBLZXllZERlY29kZXI6OmVu
ZE9iamVjdCgpCi17Ci0gICAgbV9kaWN0aW9uYXJ5U3RhY2sucmVtb3ZlTGFzdCgpOwotfQotCi1i
b29sIEtleWVkRGVjb2Rlcjo6YmVnaW5BcnJheShjb25zdCBTdHJpbmcmIGtleSkKLXsKLSAgICBh
dXRvIGFycmF5ID0gZHluYW1pY19jZl9jYXN0PENGQXJyYXlSZWY+KENGRGljdGlvbmFyeUdldFZh
bHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkp
KTsKLSAgICBpZiAoIWFycmF5KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3IgKENG
SW5kZXggaSA9IDA7IGkgPCBDRkFycmF5R2V0Q291bnQoYXJyYXkpOyArK2kpIHsKLSAgICAgICAg
Q0ZUeXBlUmVmIG9iamVjdCA9IENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoYXJyYXksIGkpOwotICAg
ICAgICBpZiAoQ0ZHZXRUeXBlSUQob2JqZWN0KSAhPSBDRkRpY3Rpb25hcnlHZXRUeXBlSUQoKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBtX2FycmF5U3RhY2suYXBw
ZW5kKGFycmF5KTsKLSAgICBtX2FycmF5SW5kZXhTdGFjay5hcHBlbmQoMCk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgS2V5ZWREZWNvZGVyOjpiZWdpbkFycmF5RWxlbWVudCgpCi17Ci0g
ICAgaWYgKG1fYXJyYXlJbmRleFN0YWNrLmxhc3QoKSA+PSBDRkFycmF5R2V0Q291bnQobV9hcnJh
eVN0YWNrLmxhc3QoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gZGljdGlv
bmFyeSA9IGNoZWNrZWRfY2ZfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0
SW5kZXgobV9hcnJheVN0YWNrLmxhc3QoKSwgbV9hcnJheUluZGV4U3RhY2subGFzdCgpKyspKTsK
LSAgICBtX2RpY3Rpb25hcnlTdGFjay5hcHBlbmQoZGljdGlvbmFyeSk7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXZvaWQgS2V5ZWREZWNvZGVyOjplbmRBcnJheUVsZW1lbnQoKQotewotICAgIG1f
ZGljdGlvbmFyeVN0YWNrLnJlbW92ZUxhc3QoKTsKLX0KLQotdm9pZCBLZXllZERlY29kZXI6OmVu
ZEFycmF5KCkKLXsKLSAgICBtX2FycmF5U3RhY2sucmVtb3ZlTGFzdCgpOwotICAgIG1fYXJyYXlJ
bmRleFN0YWNrLnJlbW92ZUxhc3QoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2YvS2V5ZWREZWNvZGVyLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvY2YvS2V5ZWREZWNvZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDk4YWI3ODQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2NmL0tl
eWVkRGVjb2Rlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgS2V5ZWREZWNvZGVyX2gKLSNkZWZpbmUgS2V5ZWREZWNvZGVyX2gKLQotI2luY2x1
ZGUgPFdlYkNvcmUvS2V5ZWRDb2RpbmcuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgS2V5
ZWREZWNvZGVyIGZpbmFsIDogcHVibGljIFdlYkNvcmU6OktleWVkRGVjb2RlciB7Ci1wdWJsaWM6
Ci0gICAgS2V5ZWREZWNvZGVyKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCk7Ci0gICAgdmly
dHVhbCB+S2V5ZWREZWNvZGVyKCkgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBi
b29sIGRlY29kZUJ5dGVzKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCB1aW50OF90KiYsIHNpemVf
dCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVCb29sKGNvbnN0IFN0cmluZyYg
a2V5LCBib29sJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGRlY29kZVVJbnQzMihjb25z
dCBTdHJpbmcmIGtleSwgdWludDMyX3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgZGVj
b2RlSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIGludDMyX3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIGJvb2wgZGVjb2RlSW50NjQoY29uc3QgU3RyaW5nJiBrZXksIGludDY0X3QmKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlRmxvYXQoY29uc3QgU3RyaW5nJiBrZXksIGZsb2F0
Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGRlY29kZURvdWJsZShjb25zdCBTdHJpbmcm
IGtleSwgZG91YmxlJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGRlY29kZVN0cmluZyhj
b25zdCBTdHJpbmcmIGtleSwgU3RyaW5nJikgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIGJvb2wg
YmVnaW5PYmplY3QoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCBlbmRPYmplY3QoKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgYm9vbCBiZWdpbkFycmF5KGNv
bnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgYmVnaW5BcnJheUVs
ZW1lbnQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5kQXJyYXlFbGVtZW50KCkgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGVuZEFycmF5KCkgb3ZlcnJpZGU7Ci0KLSAgICBSZXRh
aW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBtX3Jvb3REaWN0aW9uYXJ5OwotCi0gICAgVmVjdG9yPENG
RGljdGlvbmFyeVJlZiwgMTY+IG1fZGljdGlvbmFyeVN0YWNrOwotICAgIFZlY3RvcjxDRkFycmF5
UmVmLCAxNj4gbV9hcnJheVN0YWNrOwotICAgIFZlY3RvcjxDRkluZGV4PiBtX2FycmF5SW5kZXhT
dGFjazsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gS2V5ZWREZWNv
ZGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9jZi9LZXllZEVuY29kZXIu
Y3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2NmL0tleWVkRW5jb2Rlci5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzZjcyYTUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL2NmL0tleWVkRW5jb2Rlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNDkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJLZXllZEVu
Y29kZXIuaCIKLQotI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotCi1zdGF0aWMgUmV0YWluUHRyPENGTXV0YWJsZURpY3Rpb25hcnlSZWY+IGNyZWF0ZURpY3Rp
b25hcnkoKQotewotICAgIHJldHVybiBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUo
a0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAm
a0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwotfQotCi1LZXllZEVuY29kZXI6Oktl
eWVkRW5jb2RlcigpCi0gICAgOiBtX3Jvb3REaWN0aW9uYXJ5KGNyZWF0ZURpY3Rpb25hcnkoKSkK
LXsKLSAgICBtX2RpY3Rpb25hcnlTdGFjay5hcHBlbmQobV9yb290RGljdGlvbmFyeS5nZXQoKSk7
Ci19Ci0gICAgCi1LZXllZEVuY29kZXI6On5LZXllZEVuY29kZXIoKQotewotICAgIEFTU0VSVCht
X2RpY3Rpb25hcnlTdGFjay5zaXplKCkgPT0gMSk7Ci0gICAgQVNTRVJUKG1fZGljdGlvbmFyeVN0
YWNrLmxhc3QoKSA9PSBtX3Jvb3REaWN0aW9uYXJ5KTsKLSAgICBBU1NFUlQobV9hcnJheVN0YWNr
LmlzRW1wdHkoKSk7Ci19Ci0KLXZvaWQgS2V5ZWRFbmNvZGVyOjplbmNvZGVCeXRlcyhjb25zdCBT
dHJpbmcmIGtleSwgY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBzaXplKQotewotICAgIGF1
dG8gZGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlV2l0aEJ5dGVzTm9Db3B5KGtDRkFsbG9jYXRv
ckRlZmF1bHQsIGJ5dGVzLCBzaXplLCBrQ0ZBbGxvY2F0b3JOdWxsKSk7Ci0gICAgQ0ZEaWN0aW9u
YXJ5U2V0VmFsdWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXkuY3JlYXRlQ0ZTdHJpbmco
KS5nZXQoKSwgZGF0YS5nZXQoKSk7Ci19Ci0KLXZvaWQgS2V5ZWRFbmNvZGVyOjplbmNvZGVCb29s
KGNvbnN0IFN0cmluZyYga2V5LCBib29sIHZhbHVlKQotewotICAgIENGRGljdGlvbmFyeVNldFZh
bHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCks
IHZhbHVlID8ga0NGQm9vbGVhblRydWUgOiBrQ0ZCb29sZWFuRmFsc2UpOwotfQotCi12b2lkIEtl
eWVkRW5jb2Rlcjo6ZW5jb2RlVUludDMyKGNvbnN0IFN0cmluZyYga2V5LCB1aW50MzJfdCB2YWx1
ZSkKLXsKLSAgICBhdXRvIG51bWJlciA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwga0NGTnVtYmVyU0ludDMyVHlwZSwgJnZhbHVlKSk7Ci0gICAgQ0ZEaWN0aW9u
YXJ5U2V0VmFsdWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXkuY3JlYXRlQ0ZTdHJpbmco
KS5nZXQoKSwgbnVtYmVyLmdldCgpKTsKLX0KLQotdm9pZCBLZXllZEVuY29kZXI6OmVuY29kZUlu
dDMyKGNvbnN0IFN0cmluZyYga2V5LCBpbnQzMl90IHZhbHVlKQotewotICAgIGF1dG8gbnVtYmVy
ID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJT
SW50MzJUeXBlLCAmdmFsdWUpKTsKLSAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShtX2RpY3Rpb25h
cnlTdGFjay5sYXN0KCksIGtleS5jcmVhdGVDRlN0cmluZygpLmdldCgpLCBudW1iZXIuZ2V0KCkp
OwotfQotCi12b2lkIEtleWVkRW5jb2Rlcjo6ZW5jb2RlSW50NjQoY29uc3QgU3RyaW5nJiBrZXks
IGludDY0X3QgdmFsdWUpCi17Ci0gICAgYXV0byBudW1iZXIgPSBhZG9wdENGKENGTnVtYmVyQ3Jl
YXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlclNJbnQ2NFR5cGUsICZ2YWx1ZSkpOwot
ICAgIENGRGljdGlvbmFyeVNldFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5LmNy
ZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIG51bWJlci5nZXQoKSk7Ci19Ci0KLXZvaWQgS2V5ZWRFbmNv
ZGVyOjplbmNvZGVGbG9hdChjb25zdCBTdHJpbmcmIGtleSwgZmxvYXQgdmFsdWUpCi17Ci0gICAg
YXV0byBudW1iZXIgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQs
IGtDRk51bWJlckZsb2F0VHlwZSwgJnZhbHVlKSk7Ci0gICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUo
bV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgbnVt
YmVyLmdldCgpKTsKLX0KLQotdm9pZCBLZXllZEVuY29kZXI6OmVuY29kZURvdWJsZShjb25zdCBT
dHJpbmcmIGtleSwgZG91YmxlIHZhbHVlKQotewotICAgIGF1dG8gbnVtYmVyID0gYWRvcHRDRihD
Rk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJEb3VibGVUeXBlLCAm
dmFsdWUpKTsKLSAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShtX2RpY3Rpb25hcnlTdGFjay5sYXN0
KCksIGtleS5jcmVhdGVDRlN0cmluZygpLmdldCgpLCBudW1iZXIuZ2V0KCkpOwotfQotCi12b2lk
IEtleWVkRW5jb2Rlcjo6ZW5jb2RlU3RyaW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJp
bmcmIHZhbHVlKQotewotICAgIENGRGljdGlvbmFyeVNldFZhbHVlKG1fZGljdGlvbmFyeVN0YWNr
Lmxhc3QoKSwga2V5LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIHZhbHVlLmNyZWF0ZUNGU3RyaW5n
KCkuZ2V0KCkpOwotfQotCi12b2lkIEtleWVkRW5jb2Rlcjo6YmVnaW5PYmplY3QoY29uc3QgU3Ry
aW5nJiBrZXkpCi17Ci0gICAgYXV0byBkaWN0aW9uYXJ5ID0gY3JlYXRlRGljdGlvbmFyeSgpOwot
ICAgIENGRGljdGlvbmFyeVNldFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5LmNy
ZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIGRpY3Rpb25hcnkuZ2V0KCkpOwotCi0gICAgbV9kaWN0aW9u
YXJ5U3RhY2suYXBwZW5kKGRpY3Rpb25hcnkuZ2V0KCkpOwotfQotCi12b2lkIEtleWVkRW5jb2Rl
cjo6ZW5kT2JqZWN0KCkKLXsKLSAgICBtX2RpY3Rpb25hcnlTdGFjay5yZW1vdmVMYXN0KCk7Ci19
Ci0KLXZvaWQgS2V5ZWRFbmNvZGVyOjpiZWdpbkFycmF5KGNvbnN0IFN0cmluZyYga2V5KQotewot
ICAgIGF1dG8gYXJyYXkgPSBhZG9wdENGKENGQXJyYXlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIDAsICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpKTsKLSAgICBDRkRpY3Rpb25hcnlT
ZXRWYWx1ZShtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCksIGtleS5jcmVhdGVDRlN0cmluZygpLmdl
dCgpLCBhcnJheS5nZXQoKSk7Ci0KLSAgICBtX2FycmF5U3RhY2suYXBwZW5kKGFycmF5LmdldCgp
KTsKLX0KLQotdm9pZCBLZXllZEVuY29kZXI6OmJlZ2luQXJyYXlFbGVtZW50KCkKLXsKLSAgICBh
dXRvIGRpY3Rpb25hcnkgPSBjcmVhdGVEaWN0aW9uYXJ5KCk7Ci0gICAgQ0ZBcnJheUFwcGVuZFZh
bHVlKG1fYXJyYXlTdGFjay5sYXN0KCksIGRpY3Rpb25hcnkuZ2V0KCkpOwotCi0gICAgbV9kaWN0
aW9uYXJ5U3RhY2suYXBwZW5kKGRpY3Rpb25hcnkuZ2V0KCkpOwotfQotCi12b2lkIEtleWVkRW5j
b2Rlcjo6ZW5kQXJyYXlFbGVtZW50KCkKLXsKLSAgICBtX2RpY3Rpb25hcnlTdGFjay5yZW1vdmVM
YXN0KCk7Ci19Ci0KLXZvaWQgS2V5ZWRFbmNvZGVyOjplbmRBcnJheSgpCi17Ci0gICAgbV9hcnJh
eVN0YWNrLnJlbW92ZUxhc3QoKTsKLX0KLQotUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IEtleWVk
RW5jb2Rlcjo6ZmluaXNoRW5jb2RpbmcoKQotewotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRh
dGEgPSBhZG9wdENGKENGUHJvcGVydHlMaXN0Q3JlYXRlRGF0YShrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBtX3Jvb3REaWN0aW9uYXJ5LmdldCgpLCBrQ0ZQcm9wZXJ0eUxpc3RCaW5hcnlGb3JtYXRfdjFf
MCwgMCwgbnVsbHB0cikpOwotICAgIGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjp3cmFwQ0ZEYXRhKGRhdGEuZ2V0KCkpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9jZi9LZXllZEVuY29kZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9jZi9LZXllZEVuY29k
ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBjYTNiZi4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2YvS2V5ZWRFbmNvZGVyLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBLZXllZEVuY29kZXJfaAotI2Rl
ZmluZSBLZXllZEVuY29kZXJfaAotCi0jaW5jbHVkZSA8V2ViQ29yZS9LZXllZENvZGluZy5oPgot
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5h
bWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBLZXllZEVuY29kZXIgZmluYWwgOiBwdWJsaWMgV2Vi
Q29yZTo6S2V5ZWRFbmNvZGVyIHsKLXB1YmxpYzoKLSAgICBLZXllZEVuY29kZXIoKTsKLSAgICB+
S2V5ZWRFbmNvZGVyKCk7Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVk
QnVmZmVyPiBmaW5pc2hFbmNvZGluZygpIG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIHZpcnR1
YWwgdm9pZCBlbmNvZGVCeXRlcyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgdWludDhfdCosIHNp
emVfdCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGVuY29kZUJvb2woY29uc3QgU3RyaW5n
JiBrZXksIGJvb2wpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVVSW50MzIoY29u
c3QgU3RyaW5nJiBrZXksIHVpbnQzMl90KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5j
b2RlSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIGludDMyX3QpIG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgdm9pZCBlbmNvZGVJbnQ2NChjb25zdCBTdHJpbmcmIGtleSwgaW50NjRfdCkgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCB2b2lkIGVuY29kZUZsb2F0KGNvbnN0IFN0cmluZyYga2V5LCBmbG9hdCkg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGVuY29kZURvdWJsZShjb25zdCBTdHJpbmcmIGtl
eSwgZG91YmxlKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlU3RyaW5nKGNvbnN0
IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9p
ZCBiZWdpbk9iamVjdChjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2
b2lkIGVuZE9iamVjdCgpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIGJlZ2luQXJyYXko
Y29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBiZWdpbkFycmF5
RWxlbWVudCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBlbmRBcnJheUVsZW1lbnQoKSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5kQXJyYXkoKSBvdmVycmlkZTsKLQotICAgIFJl
dGFpblB0cjxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPiBtX3Jvb3REaWN0aW9uYXJ5OwotCi0gICAg
VmVjdG9yPENGTXV0YWJsZURpY3Rpb25hcnlSZWYsIDE2PiBtX2RpY3Rpb25hcnlTdGFjazsKLSAg
ICBWZWN0b3I8Q0ZNdXRhYmxlQXJyYXlSZWYsIDE2PiBtX2FycmF5U3RhY2s7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEtleWVkRW5jb2Rlcl9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ2xpYi9LZXllZERlY29kZXIuY3BwIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL2dsaWIvS2V5ZWREZWNvZGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggM2QyMGQ5MC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ2xp
Yi9LZXllZERlY29kZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTY4ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTUgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIktleWVkRGVjb2Rlci5oIgotCi0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotS2V5ZWREZWNvZGVyOjpLZXllZERl
Y29kZXIoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCi17Ci0gICAgR1JlZlB0cjxH
Qnl0ZXM+IGJ5dGVzID0gYWRvcHRHUmVmKGdfYnl0ZXNfbmV3KGRhdGEsIHNpemUpKTsKLSAgICBH
UmVmUHRyPEdWYXJpYW50PiB2YXJpYW50ID0gZ192YXJpYW50X25ld19mcm9tX2J5dGVzKEdfVkFS
SUFOVF9UWVBFKCJhe3N2fSIpLCBieXRlcy5nZXQoKSwgVFJVRSk7Ci0gICAgbV9kaWN0aW9uYXJ5
U3RhY2suYXBwZW5kKGRpY3Rpb25hcnlGcm9tR1ZhcmlhbnQodmFyaWFudC5nZXQoKSkpOwotfQot
Ci1LZXllZERlY29kZXI6On5LZXllZERlY29kZXIoKQotewotICAgIEFTU0VSVChtX2RpY3Rpb25h
cnlTdGFjay5zaXplKCkgPT0gMSk7Ci0gICAgQVNTRVJUKG1fYXJyYXlTdGFjay5pc0VtcHR5KCkp
OwotICAgIEFTU0VSVChtX2FycmF5SW5kZXhTdGFjay5pc0VtcHR5KCkpOwotfQotCi1IYXNoTWFw
PFN0cmluZywgR1JlZlB0cjxHVmFyaWFudD4+IEtleWVkRGVjb2Rlcjo6ZGljdGlvbmFyeUZyb21H
VmFyaWFudChHVmFyaWFudCogdmFyaWFudCkKLXsKLSAgICBIYXNoTWFwPFN0cmluZywgR1JlZlB0
cjxHVmFyaWFudD4+IGRpY3Rpb25hcnk7Ci0gICAgR1ZhcmlhbnRJdGVyIGl0ZXI7Ci0gICAgZ192
YXJpYW50X2l0ZXJfaW5pdCgmaXRlciwgdmFyaWFudCk7Ci0gICAgY29uc3QgY2hhcioga2V5Owot
ICAgIEdWYXJpYW50KiB2YWx1ZTsKLSAgICB3aGlsZSAoZ192YXJpYW50X2l0ZXJfbG9vcCgmaXRl
ciwgInsmc3Z9IiwgJmtleSwgJnZhbHVlKSkKLSAgICAgICAgZGljdGlvbmFyeS5zZXQoU3RyaW5n
Ojpmcm9tVVRGOChrZXkpLCB2YWx1ZSk7Ci0gICAgcmV0dXJuIFdURjo6bW92ZShkaWN0aW9uYXJ5
KTsKLX0KLQotYm9vbCBLZXllZERlY29kZXI6OmRlY29kZUJ5dGVzKGNvbnN0IFN0cmluZyYga2V5
LCBjb25zdCB1aW50OF90KiYgYnl0ZXMsIHNpemVfdCYgc2l6ZSkKLXsKLSAgICBHUmVmUHRyPEdW
YXJpYW50PiB2YWx1ZSA9IG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKS5nZXQoa2V5KTsKLSAgICBp
ZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzaXplID0gZ192YXJpYW50
X2dldF9zaXplKHZhbHVlLmdldCgpKTsKLSAgICBieXRlcyA9IHN0YXRpY19jYXN0PGNvbnN0IHVp
bnQ4X3QqPihnX3ZhcmlhbnRfZ2V0X2RhdGEodmFsdWUuZ2V0KCkpKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRj4KLWJvb2wgS2V5ZWREZWNv
ZGVyOjpkZWNvZGVTaW1wbGVWYWx1ZShjb25zdCBTdHJpbmcmIGtleSwgVCYgcmVzdWx0LCBGIGdl
dEZ1bmN0aW9uKQotewotICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhbHVlID0gbV9kaWN0aW9uYXJ5
U3RhY2subGFzdCgpLmdldChrZXkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHJlc3VsdCA9IGdldEZ1bmN0aW9uKHZhbHVlLmdldCgpKTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBLZXllZERlY29kZXI6OmRlY29kZUJvb2woY29uc3QgU3RyaW5n
JiBrZXksIGJvb2wmIHJlc3VsdCkKLXsKLSAgICByZXR1cm4gZGVjb2RlU2ltcGxlVmFsdWUoa2V5
LCByZXN1bHQsIGdfdmFyaWFudF9nZXRfYm9vbGVhbik7Ci19Ci0KLWJvb2wgS2V5ZWREZWNvZGVy
OjpkZWNvZGVVSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIHVpbnQzMl90JiByZXN1bHQpCi17Ci0g
ICAgcmV0dXJuIGRlY29kZVNpbXBsZVZhbHVlKGtleSwgcmVzdWx0LCBnX3ZhcmlhbnRfZ2V0X3Vp
bnQzMik7Ci19Ci0KLWJvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVJbnQzMihjb25zdCBTdHJpbmcm
IGtleSwgaW50MzJfdCYgcmVzdWx0KQotewotICAgIHJldHVybiBkZWNvZGVTaW1wbGVWYWx1ZShr
ZXksIHJlc3VsdCwgZ192YXJpYW50X2dldF9pbnQzMik7Ci19Ci0KLWJvb2wgS2V5ZWREZWNvZGVy
OjpkZWNvZGVJbnQ2NChjb25zdCBTdHJpbmcmIGtleSwgaW50NjRfdCYgcmVzdWx0KQotewotICAg
IHJldHVybiBkZWNvZGVTaW1wbGVWYWx1ZShrZXksIHJlc3VsdCwgZ192YXJpYW50X2dldF9pbnQ2
NCk7Ci19Ci0KLWJvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVGbG9hdChjb25zdCBTdHJpbmcmIGtl
eSwgZmxvYXQmIHJlc3VsdCkKLXsKLSAgICByZXR1cm4gZGVjb2RlU2ltcGxlVmFsdWUoa2V5LCBy
ZXN1bHQsIGdfdmFyaWFudF9nZXRfZG91YmxlKTsKLX0KLQotYm9vbCBLZXllZERlY29kZXI6OmRl
Y29kZURvdWJsZShjb25zdCBTdHJpbmcmIGtleSwgZG91YmxlJiByZXN1bHQpCi17Ci0gICAgcmV0
dXJuIGRlY29kZVNpbXBsZVZhbHVlKGtleSwgcmVzdWx0LCBnX3ZhcmlhbnRfZ2V0X2RvdWJsZSk7
Ci19Ci0KLWJvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBrZXks
IFN0cmluZyYgcmVzdWx0KQotewotICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhbHVlID0gbV9kaWN0
aW9uYXJ5U3RhY2subGFzdCgpLmdldChrZXkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHJlc3VsdCA9IFN0cmluZzo6ZnJvbVVURjgoZ192YXJpYW50X2dl
dF9zdHJpbmcodmFsdWUuZ2V0KCksIG51bGxwdHIpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBLZXllZERlY29kZXI6OmJlZ2luT2JqZWN0KGNvbnN0IFN0cmluZyYga2V5KQotewotICAg
IEdSZWZQdHI8R1ZhcmlhbnQ+IHZhbHVlID0gbV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLmdldChr
ZXkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fZGlj
dGlvbmFyeVN0YWNrLmFwcGVuZChkaWN0aW9uYXJ5RnJvbUdWYXJpYW50KHZhbHVlLmdldCgpKSk7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgS2V5ZWREZWNvZGVyOjplbmRPYmplY3QoKQot
ewotICAgIG1fZGljdGlvbmFyeVN0YWNrLnJlbW92ZUxhc3QoKTsKLX0KLQotYm9vbCBLZXllZERl
Y29kZXI6OmJlZ2luQXJyYXkoY29uc3QgU3RyaW5nJiBrZXkpCi17Ci0gICAgR1JlZlB0cjxHVmFy
aWFudD4gdmFsdWUgPSBtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCkuZ2V0KGtleSk7Ci0gICAgaWYg
KCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9hcnJheVN0YWNrLmFwcGVu
ZCh2YWx1ZS5nZXQoKSk7Ci0gICAgbV9hcnJheUluZGV4U3RhY2suYXBwZW5kKDApOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIEtleWVkRGVjb2Rlcjo6YmVnaW5BcnJheUVsZW1lbnQoKQot
ewotICAgIGlmIChtX2FycmF5SW5kZXhTdGFjay5sYXN0KCkgPj0gZ192YXJpYW50X25fY2hpbGRy
ZW4obV9hcnJheVN0YWNrLmxhc3QoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdS
ZWZQdHI8R1ZhcmlhbnQ+IHZhcmlhbnQgPSBhZG9wdEdSZWYoZ192YXJpYW50X2dldF9jaGlsZF92
YWx1ZShtX2FycmF5U3RhY2subGFzdCgpLCBtX2FycmF5SW5kZXhTdGFjay5sYXN0KCkrKykpOwot
ICAgIG1fZGljdGlvbmFyeVN0YWNrLmFwcGVuZChkaWN0aW9uYXJ5RnJvbUdWYXJpYW50KHZhcmlh
bnQuZ2V0KCkpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBLZXllZERlY29kZXI6OmVu
ZEFycmF5RWxlbWVudCgpCi17Ci0gICAgbV9kaWN0aW9uYXJ5U3RhY2sucmVtb3ZlTGFzdCgpOwot
fQotCi12b2lkIEtleWVkRGVjb2Rlcjo6ZW5kQXJyYXkoKQotewotICAgIG1fYXJyYXlTdGFjay5y
ZW1vdmVMYXN0KCk7Ci0gICAgbV9hcnJheUluZGV4U3RhY2sucmVtb3ZlTGFzdCgpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9n
bGliL0tleWVkRGVjb2Rlci5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2dsaWIvS2V5ZWREZWNv
ZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlYjFjNjEuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2dsaWIvS2V5ZWREZWNvZGVyLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IElnYWlhIFMuTC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBLZXllZERlY29kZXJfaAotI2RlZmluZSBLZXllZERlY29kZXJf
aAotCi0jaW5jbHVkZSA8V2ViQ29yZS9LZXllZENvZGluZy5oPgotI2luY2x1ZGUgPGdsaWIuaD4K
LSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBLZXllZERlY29kZXIgZmlu
YWwgOiBwdWJsaWMgV2ViQ29yZTo6S2V5ZWREZWNvZGVyIHsKLXB1YmxpYzoKLSAgICBLZXllZERl
Y29kZXIoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90KTsKLSAgICB2aXJ0dWFsIH5LZXllZERl
Y29kZXIoKSBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlQnl0
ZXMoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IHVpbnQ4X3QqJiwgc2l6ZV90Jikgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCBib29sIGRlY29kZUJvb2woY29uc3QgU3RyaW5nJiBrZXksIGJvb2wmKSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlVUludDMyKGNvbnN0IFN0cmluZyYga2V5
LCB1aW50MzJfdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVJbnQzMihjb25z
dCBTdHJpbmcmIGtleSwgaW50MzJfdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBkZWNv
ZGVJbnQ2NChjb25zdCBTdHJpbmcmIGtleSwgaW50NjRfdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgYm9vbCBkZWNvZGVGbG9hdChjb25zdCBTdHJpbmcmIGtleSwgZmxvYXQmKSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlRG91YmxlKGNvbnN0IFN0cmluZyYga2V5LCBkb3VibGUm
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlU3RyaW5nKGNvbnN0IFN0cmluZyYg
a2V5LCBTdHJpbmcmKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgYm9vbCBiZWdpbk9iamVjdChj
b25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGVuZE9iamVjdCgp
IG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCBib29sIGJlZ2luQXJyYXkoY29uc3QgU3RyaW5nJiBr
ZXkpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBiZWdpbkFycmF5RWxlbWVudCgpIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCBlbmRBcnJheUVsZW1lbnQoKSBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIHZvaWQgZW5kQXJyYXkoKSBvdmVycmlkZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIEY+IGJvb2wgZGVjb2RlU2ltcGxlVmFsdWUoY29uc3QgU3RyaW5nJiBrZXks
IFQmIHJlc3VsdCwgRiBnZXRGdW5jdGlvbik7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIEdSZWZQdHI8
R1ZhcmlhbnQ+PiBkaWN0aW9uYXJ5RnJvbUdWYXJpYW50KEdWYXJpYW50Kik7Ci0KLSAgICBWZWN0
b3I8SGFzaE1hcDxTdHJpbmcsIEdSZWZQdHI8R1ZhcmlhbnQ+Pj4gbV9kaWN0aW9uYXJ5U3RhY2s7
Ci0gICAgVmVjdG9yPEdWYXJpYW50KiwgMTY+IG1fYXJyYXlTdGFjazsKLSAgICBWZWN0b3I8dW5z
aWduZWQ+IG1fYXJyYXlJbmRleFN0YWNrOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0K
LSNlbmRpZiAvLyBLZXllZERlY29kZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL2dsaWIvS2V5ZWRFbmNvZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9nbGliL0tl
eWVkRW5jb2Rlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjZGZkOGQuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2dsaWIvS2V5ZWRFbmNvZGVyLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDEzNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1
IElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJL
ZXllZEVuY29kZXIuaCIKLQotI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci0KLUtleWVkRW5jb2Rlcjo6S2V5ZWRFbmNvZGVyKCkKLXsKLSAg
ICBnX3ZhcmlhbnRfYnVpbGRlcl9pbml0KCZtX3ZhcmlhbnRCdWlsZGVyLCBHX1ZBUklBTlRfVFlQ
RSgiYXtzdn0iKSk7Ci0gICAgbV92YXJpYW50QnVpbGRlclN0YWNrLmFwcGVuZCgmbV92YXJpYW50
QnVpbGRlcik7Ci19Ci0KLUtleWVkRW5jb2Rlcjo6fktleWVkRW5jb2RlcigpCi17Ci0gICAgQVNT
RVJUKG1fdmFyaWFudEJ1aWxkZXJTdGFjay5zaXplKCkgPT0gMSk7Ci0gICAgQVNTRVJUKG1fdmFy
aWFudEJ1aWxkZXJTdGFjay5sYXN0KCkgPT0gJm1fdmFyaWFudEJ1aWxkZXIpOwotICAgIEFTU0VS
VChtX2FycmF5U3RhY2suaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQobV9vYmplY3RTdGFjay5pc0Vt
cHR5KCkpOwotfQotCi12b2lkIEtleWVkRW5jb2Rlcjo6ZW5jb2RlQnl0ZXMoY29uc3QgU3RyaW5n
JiBrZXksIGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBHUmVmUHRy
PEdCeXRlcz4gZ0J5dGVzID0gYWRvcHRHUmVmKGdfYnl0ZXNfbmV3X3N0YXRpYyhieXRlcywgc2l6
ZSkpOwotICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChtX3ZhcmlhbnRCdWlsZGVyU3RhY2subGFz
dCgpLCAie3N2fSIsIGtleS51dGY4KCkuZGF0YSgpLCBnX3ZhcmlhbnRfbmV3X2Zyb21fYnl0ZXMo
R19WQVJJQU5UX1RZUEUoImF5IiksIGdCeXRlcy5nZXQoKSwgVFJVRSkpOwotfQotCi12b2lkIEtl
eWVkRW5jb2Rlcjo6ZW5jb2RlQm9vbChjb25zdCBTdHJpbmcmIGtleSwgYm9vbCB2YWx1ZSkKLXsK
LSAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQobV92YXJpYW50QnVpbGRlclN0YWNrLmxhc3QoKSwg
Intzdn0iLCBrZXkudXRmOCgpLmRhdGEoKSwgZ192YXJpYW50X25ld19ib29sZWFuKHZhbHVlKSk7
Ci19Ci0KLXZvaWQgS2V5ZWRFbmNvZGVyOjplbmNvZGVVSW50MzIoY29uc3QgU3RyaW5nJiBrZXks
IHVpbnQzMl90IHZhbHVlKQotewotICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChtX3ZhcmlhbnRC
dWlsZGVyU3RhY2subGFzdCgpLCAie3N2fSIsIGtleS51dGY4KCkuZGF0YSgpLCBnX3ZhcmlhbnRf
bmV3X3VpbnQzMih2YWx1ZSkpOwotfQotCi12b2lkIEtleWVkRW5jb2Rlcjo6ZW5jb2RlSW50MzIo
Y29uc3QgU3RyaW5nJiBrZXksIGludDMyX3QgdmFsdWUpCi17Ci0gICAgZ192YXJpYW50X2J1aWxk
ZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCksICJ7c3Z9Iiwga2V5LnV0ZjgoKS5k
YXRhKCksIGdfdmFyaWFudF9uZXdfaW50MzIodmFsdWUpKTsKLX0KLQotdm9pZCBLZXllZEVuY29k
ZXI6OmVuY29kZUludDY0KGNvbnN0IFN0cmluZyYga2V5LCBpbnQ2NF90IHZhbHVlKQotewotICAg
IGdfdmFyaWFudF9idWlsZGVyX2FkZChtX3ZhcmlhbnRCdWlsZGVyU3RhY2subGFzdCgpLCAie3N2
fSIsIGtleS51dGY4KCkuZGF0YSgpLCBnX3ZhcmlhbnRfbmV3X2ludDY0KHZhbHVlKSk7Ci19Ci0K
LXZvaWQgS2V5ZWRFbmNvZGVyOjplbmNvZGVGbG9hdChjb25zdCBTdHJpbmcmIGtleSwgZmxvYXQg
dmFsdWUpCi17Ci0gICAgZW5jb2RlRG91YmxlKGtleSwgdmFsdWUpOwotfQotCi12b2lkIEtleWVk
RW5jb2Rlcjo6ZW5jb2RlRG91YmxlKGNvbnN0IFN0cmluZyYga2V5LCBkb3VibGUgdmFsdWUpCi17
Ci0gICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCks
ICJ7c3Z9Iiwga2V5LnV0ZjgoKS5kYXRhKCksIGdfdmFyaWFudF9uZXdfZG91YmxlKHZhbHVlKSk7
Ci19Ci0KLXZvaWQgS2V5ZWRFbmNvZGVyOjplbmNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBrZXks
IGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKG1fdmFy
aWFudEJ1aWxkZXJTdGFjay5sYXN0KCksICJ7c3Z9Iiwga2V5LnV0ZjgoKS5kYXRhKCksIGdfdmFy
aWFudF9uZXdfc3RyaW5nKHZhbHVlLnV0ZjgoKS5kYXRhKCkpKTsKLX0KLQotdm9pZCBLZXllZEVu
Y29kZXI6OmJlZ2luT2JqZWN0KGNvbnN0IFN0cmluZyYga2V5KQotewotICAgIEdSZWZQdHI8R1Zh
cmlhbnRCdWlsZGVyPiBidWlsZGVyID0gYWRvcHRHUmVmKGdfdmFyaWFudF9idWlsZGVyX25ldyhH
X1ZBUklBTlRfVFlQRSgiYWF7c3Z9IikpKTsKLSAgICBtX29iamVjdFN0YWNrLmFwcGVuZChzdGQ6
Om1ha2VfcGFpcihrZXksIGJ1aWxkZXIpKTsKLSAgICBtX3ZhcmlhbnRCdWlsZGVyU3RhY2suYXBw
ZW5kKGJ1aWxkZXIuZ2V0KCkpOwotfQotCi12b2lkIEtleWVkRW5jb2Rlcjo6ZW5kT2JqZWN0KCkK
LXsKLSAgICBHVmFyaWFudEJ1aWxkZXIqIGJ1aWxkZXIgPSBtX3ZhcmlhbnRCdWlsZGVyU3RhY2su
dGFrZUxhc3QoKTsKLSAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQobV92YXJpYW50QnVpbGRlclN0
YWNrLmxhc3QoKSwgIntzdn0iLCBtX29iamVjdFN0YWNrLmxhc3QoKS5maXJzdC51dGY4KCkuZGF0
YSgpLCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQoYnVpbGRlcikpOwotICAgIG1fb2JqZWN0U3RhY2su
cmVtb3ZlTGFzdCgpOwotfQotCi12b2lkIEtleWVkRW5jb2Rlcjo6YmVnaW5BcnJheShjb25zdCBT
dHJpbmcmIGtleSkKLXsKLSAgICBtX2FycmF5U3RhY2suYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGtl
eSwgYWRvcHRHUmVmKGdfdmFyaWFudF9idWlsZGVyX25ldyhHX1ZBUklBTlRfVFlQRSgiYWF7c3Z9
IikpKSkpOwotfQotCi12b2lkIEtleWVkRW5jb2Rlcjo6YmVnaW5BcnJheUVsZW1lbnQoKQotewot
ICAgIG1fdmFyaWFudEJ1aWxkZXJTdGFjay5hcHBlbmQoZ192YXJpYW50X2J1aWxkZXJfbmV3KEdf
VkFSSUFOVF9UWVBFKCJhe3N2fSIpKSk7Ci19Ci0KLXZvaWQgS2V5ZWRFbmNvZGVyOjplbmRBcnJh
eUVsZW1lbnQoKQotewotICAgIEdSZWZQdHI8R1ZhcmlhbnRCdWlsZGVyPiB2YXJpYW50QnVpbGRl
ciA9IGFkb3B0R1JlZihtX3ZhcmlhbnRCdWlsZGVyU3RhY2sudGFrZUxhc3QoKSk7Ci0gICAgZ192
YXJpYW50X2J1aWxkZXJfYWRkX3ZhbHVlKG1fYXJyYXlTdGFjay5sYXN0KCkuc2Vjb25kLmdldCgp
LCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQodmFyaWFudEJ1aWxkZXIuZ2V0KCkpKTsKLX0KLQotdm9p
ZCBLZXllZEVuY29kZXI6OmVuZEFycmF5KCkKLXsKLSAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQo
bV92YXJpYW50QnVpbGRlclN0YWNrLmxhc3QoKSwgIntzdn0iLCBtX2FycmF5U3RhY2subGFzdCgp
LmZpcnN0LnV0ZjgoKS5kYXRhKCksIGdfdmFyaWFudF9idWlsZGVyX2VuZChtX2FycmF5U3RhY2su
bGFzdCgpLnNlY29uZC5nZXQoKSkpOwotICAgIG1fYXJyYXlTdGFjay5yZW1vdmVMYXN0KCk7Ci19
Ci0KLVBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBLZXllZEVuY29kZXI6OmZpbmlzaEVuY29kaW5n
KCkKLXsKLSAgICBnX2Fzc2VydChtX3ZhcmlhbnRCdWlsZGVyU3RhY2subGFzdCgpID09ICZtX3Zh
cmlhbnRCdWlsZGVyKTsKLSAgICBHUmVmUHRyPEdWYXJpYW50PiB2YXJpYW50ID0gZ192YXJpYW50
X2J1aWxkZXJfZW5kKCZtX3ZhcmlhbnRCdWlsZGVyKTsKLSAgICBHUmVmUHRyPEdCeXRlcz4gZGF0
YSA9IGdfdmFyaWFudF9nZXRfZGF0YV9hc19ieXRlcyh2YXJpYW50LmdldCgpKTsKLSAgICByZXR1
cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KGdfYnl0ZXNfZ2V0X2RhdGEoZGF0YS5nZXQoKSwgbnVsbHB0cikpLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oZ19ieXRlc19nZXRfc2l6ZShkYXRhLmdldCgpKSkpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9nbGliL0tleWVkRW5j
b2Rlci5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2dsaWIvS2V5ZWRFbmNvZGVyLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjYmI3NmIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL2dsaWIvS2V5ZWRFbmNvZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgS2V5ZWRFbmNvZGVyX2gKLSNkZWZpbmUgS2V5ZWRFbmNvZGVyX2gKLQotI2luY2x1
ZGUgPFdlYkNvcmUvS2V5ZWRDb2RpbmcuaD4KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIEtleWVk
RW5jb2RlciBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpLZXllZEVuY29kZXIgewotcHVibGljOgot
ICAgIEtleWVkRW5jb2RlcigpOwotICAgIH5LZXllZEVuY29kZXIoKTsKLQotICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IGZpbmlzaEVuY29kaW5nKCkgb3ZlcnJp
ZGU7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIGVuY29kZUJ5dGVzKGNvbnN0IFN0cmlu
ZyYga2V5LCBjb25zdCB1aW50OF90Kiwgc2l6ZV90KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZv
aWQgZW5jb2RlQm9vbChjb25zdCBTdHJpbmcmIGtleSwgYm9vbCkgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCB2b2lkIGVuY29kZVVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgdWludDMyX3QpIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgaW50
MzJfdCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGVuY29kZUludDY0KGNvbnN0IFN0cmlu
ZyYga2V5LCBpbnQ2NF90KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlRmxvYXQo
Y29uc3QgU3RyaW5nJiBrZXksIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5j
b2RlRG91YmxlKGNvbnN0IFN0cmluZyYga2V5LCBkb3VibGUpIG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgdm9pZCBlbmNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYpIG92
ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIGJlZ2luT2JqZWN0KGNvbnN0IFN0cmluZyYga2V5
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5kT2JqZWN0KCkgb3ZlcnJpZGU7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgYmVnaW5BcnJheShjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCB2b2lkIGJlZ2luQXJyYXlFbGVtZW50KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCB2b2lkIGVuZEFycmF5RWxlbWVudCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBlbmRB
cnJheSgpIG92ZXJyaWRlOwotCi0gICAgR1ZhcmlhbnRCdWlsZGVyIG1fdmFyaWFudEJ1aWxkZXI7
Ci0gICAgVmVjdG9yPEdWYXJpYW50QnVpbGRlciosIDE2PiBtX3ZhcmlhbnRCdWlsZGVyU3RhY2s7
Ci0gICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIEdSZWZQdHI8R1ZhcmlhbnRCdWlsZGVyPj4s
IDE2PiBtX2FycmF5U3RhY2s7Ci0gICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIEdSZWZQdHI8
R1ZhcmlhbnRCdWlsZGVyPj4sIDE2PiBtX29iamVjdFN0YWNrOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBLZXllZEVuY29kZXJfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktp
dDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDE0ZDYwMmYuLjFkNDI5
NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTQ2Miw4ICs0NjIsNiBAQAogCQkxQUUwMEQ0QzE4MkQ2RUIwMDAwODdERDcgLyog
V0tCcm93c2luZ0NvbnRleHRIYW5kbGUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQUUwMEQ0QTE4MkQ2RUIwMDAwODdERDcgLyogV0tCcm93c2luZ0Nv
bnRleHRIYW5kbGUubW0gKi87IH07CiAJCTFBRTAwRDREMTgyRDZFQjAwMDA4N0RENyAvKiBXS0Jy
b3dzaW5nQ29udGV4dEhhbmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUFFMDBENEIxODJENkVCMDAwMDg3REQ3IC8qIFdLQnJvd3NpbmdDb250ZXh0
SGFuZGxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMUFFMDBENEYxODJENkY1MDAwMDg3REQ3IC8qIFdLQnJvd3NpbmdDb250ZXh0SGFuZGxlSW50
ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFB
RTAwRDRFMTgyRDZGNTAwMDA4N0RENyAvKiBXS0Jyb3dzaW5nQ29udGV4dEhhbmRsZUludGVybmFs
LmggKi87IH07Ci0JCTFBRTAwRDVDMTgyREFERTEwMDA4N0RENyAvKiBLZXllZEVuY29kZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFFMDBENUEx
ODJEQURFMTAwMDg3REQ3IC8qIEtleWVkRW5jb2Rlci5jcHAgKi87IH07Ci0JCTFBRTAwRDVEMTgy
REFERTEwMDA4N0RENyAvKiBLZXllZEVuY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRTAwRDVCMTgyREFERTEwMDA4N0RENyAvKiBLZXllZEVu
Y29kZXIuaCAqLzsgfTsKIAkJMUFFMDBENjAxODMxNzkyMTAwMDg3REQ3IC8qIEZyYW1lTG9hZFN0
YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFB
RTAwRDVFMTgzMTc5MjEwMDA4N0RENyAvKiBGcmFtZUxvYWRTdGF0ZS5jcHAgKi87IH07CiAJCTFB
RTAwRDYxMTgzMTc5MjEwMDA4N0RENyAvKiBGcmFtZUxvYWRTdGF0ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFFMDBENUYxODMxNzkyMTAwMDg3REQ3
IC8qIEZyYW1lTG9hZFN0YXRlLmggKi87IH07CiAJCTFBRTAwRDZCMTgzMjdDMTIwMDA4N0RENyAv
KiBTdHJpbmdSZWZlcmVuY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUFFMDBENjkxODMyN0MxMjAwMDg3REQ3IC8qIFN0cmluZ1JlZmVyZW5jZS5j
cHAgKi87IH07CkBAIC05NDcsOCArOTQ1LDYgQEAKIAkJNTE4MzQ1OTMxMzQ1MzJFOTAwOTJCNjk2
IC8qIFdlYkljb25EYXRhYmFzZUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTE4MzQ1OTExMzQ1MzJFODAwOTJCNjk2IC8qIFdlYkljb25EYXRh
YmFzZUNsaWVudC5oICovOyB9OwogCQk1MTgzNTNEQTE4ODVCRjhDMDBEOUZFNDQgLyogSURCU2Vy
aWFsaXphdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTgzNTNEODE4ODVCRjhDMDBEOUZFNDQgLyogSURCU2VyaWFsaXphdGlvbi5jcHAgKi87
IH07CiAJCTUxODM1M0RCMTg4NUJGOEMwMEQ5RkU0NCAvKiBJREJTZXJpYWxpemF0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTgzNTNEOTE4ODVC
RjhDMDBEOUZFNDQgLyogSURCU2VyaWFsaXphdGlvbi5oICovOyB9OwotCQk1MTgzNTNERTE4ODcx
MjhCMDBEOUZFNDQgLyogS2V5ZWREZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxODM1M0RDMTg4NzEyOEIwMEQ5RkU0NCAvKiBLZXllZERl
Y29kZXIuY3BwICovOyB9OwotCQk1MTgzNTNERjE4ODcxMjhCMDBEOUZFNDQgLyogS2V5ZWREZWNv
ZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTgz
NTNERDE4ODcxMjhCMDBEOUZFNDQgLyogS2V5ZWREZWNvZGVyLmggKi87IH07CiAJCTUxODNEREVD
MTYzMEJERkMwMDhCRTVDNyAvKiBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwNUIwRDQxNjJGN0E3QTAw
RTI3NzA5IC8qIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5jcHAgKi87IH07CiAJCTUxODcxQjVC
MTI3Q0I4OUQwMEY3NjIzMiAvKiBXZWJDb250ZXh0TWVudS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTg3MUI1OTEyN0NCODlEMDBGNzYyMzIgLyog
V2ViQ29udGV4dE1lbnUuY3BwICovOyB9OwogCQk1MTg3MUI1QzEyN0NCODlEMDBGNzYyMzIgLyog
V2ViQ29udGV4dE1lbnUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxODcxQjVBMTI3Q0I4OUQwMEY3NjIzMiAvKiBXZWJDb250ZXh0TWVudS5oICovOyB9
OwpAQCAtMjU4OCw4ICsyNTg0LDYgQEAKIAkJMUFFMDBENEExODJENkVCMDAwMDg3REQ3IC8qIFdL
QnJvd3NpbmdDb250ZXh0SGFuZGxlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gV0tCcm93c2luZ0NvbnRleHRIYW5kbGUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTFBRTAwRDRCMTgyRDZFQjAwMDA4N0RENyAvKiBXS0Jyb3dzaW5nQ29udGV4dEhh
bmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0Jyb3dzaW5nQ29udGV4
dEhhbmRsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUUwMEQ0RTE4MkQ2RjUw
MDAwODdERDcgLyogV0tCcm93c2luZ0NvbnRleHRIYW5kbGVJbnRlcm5hbC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXS0Jyb3dzaW5nQ29udGV4dEhhbmRsZUludGVybmFsLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBRTAwRDVBMTgyREFERTEwMDA4N0RENyAv
KiBLZXllZEVuY29kZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
S2V5ZWRFbmNvZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFFMDBENUIx
ODJEQURFMTAwMDg3REQ3IC8qIEtleWVkRW5jb2Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBLZXllZEVuY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUFFMDBENUUxODMxNzkyMTAwMDg3REQ3IC8qIEZyYW1lTG9hZFN0YXRlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZyYW1lTG9hZFN0YXRlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFFMDBENUYxODMxNzkyMTAwMDg3REQ3IC8qIEZyYW1lTG9h
ZFN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZyYW1lTG9hZFN0YXRl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBRTAwRDY5MTgzMjdDMTIwMDA4N0RE
NyAvKiBTdHJpbmdSZWZlcmVuY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU3RyaW5nUmVmZXJlbmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTMxMTEsOCArMzEwNSw2IEBACiAJCTUxODM0NTkxMTM0NTMyRTgwMDkyQjY5NiAvKiBXZWJJY29u
RGF0YWJhc2VDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViSWNv
bkRhdGFiYXNlQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxODM1M0Q4
MTg4NUJGOEMwMEQ5RkU0NCAvKiBJREJTZXJpYWxpemF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQlNlcmlhbGl6YXRpb24uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MTgzNTNEOTE4ODVCRjhDMDBEOUZFNDQgLyogSURCU2VyaWFsaXph
dGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJTZXJpYWxpemF0aW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxODM1M0RDMTg4NzEyOEIwMEQ5RkU0
NCAvKiBLZXllZERlY29kZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gS2V5ZWREZWNvZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE4MzUz
REQxODg3MTI4QjAwRDlGRTQ0IC8qIEtleWVkRGVjb2Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBLZXllZERlY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTE4M0IzOTMxMzc5Rjg1QzAwRTg3NTRFIC8qIFNoaW0ueGNjb25maWcgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0LnhjY29uZmlnOyBwYXRoID0gU2hpbS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTE4NEJDNEExMzJFOTA3QTAwNkI5RTI4IC8qIFdlYkljb25EYXRhYmFzZS5tZXNz
YWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJJY29uRGF0YWJhc2UubWVzc2FnZXMu
aW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxODcxQjU5MTI3Q0I4OUQwMEY3NjIz
MiAvKiBXZWJDb250ZXh0TWVudS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXZWJDb250ZXh0TWVudS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00
ODcxLDEwICs0ODYzLDYgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTFBQUYwQzQ5MTJCMTYzMzQw
MDhFNDlFMiAvKiBBcmd1bWVudENvZGVyc0NGLmNwcCAqLywKIAkJCQkxQUFGMEM0ODEyQjE2MzM0
MDA4RTQ5RTIgLyogQXJndW1lbnRDb2RlcnNDRi5oICovLAotCQkJCTUxODM1M0RDMTg4NzEyOEIw
MEQ5RkU0NCAvKiBLZXllZERlY29kZXIuY3BwICovLAotCQkJCTUxODM1M0REMTg4NzEyOEIwMEQ5
RkU0NCAvKiBLZXllZERlY29kZXIuaCAqLywKLQkJCQkxQUUwMEQ1QTE4MkRBREUxMDAwODdERDcg
LyogS2V5ZWRFbmNvZGVyLmNwcCAqLywKLQkJCQkxQUUwMEQ1QjE4MkRBREUxMDAwODdERDcgLyog
S2V5ZWRFbmNvZGVyLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGNmOwogCQkJc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsKQEAgLTc2OTksOCArNzY4Nyw2IEBACiAJCQkJQzU4Q0RGMkExODg3NTQ4QjAw
ODcxNTM2IC8qIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQUU0OUE0OTExRkZBOENFMDA0OEI0NjQgLyogSlNOUE1ldGhvZC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMUFFNDk4NzgxMUZGN0ZBQTAwNDhCNDY0IC8qIEpTTlBPYmplY3QuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTUxODM1M0RGMTg4NzEyOEIwMEQ5RkU0NCAvKiBLZXllZERlY29kZXIu
aCBpbiBIZWFkZXJzICovLAotCQkJCTFBRTAwRDVEMTgyREFERTEwMDA4N0RENyAvKiBLZXllZEVu
Y29kZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTA5Mzc4MTRGQjEyOEMwMDExMzhEOSAvKiBM
YXllckhvc3RpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBDMzY1QTE4QzA1NTU4
MDBGNjA3RDcgLyogTGF5ZXJSZXByZXNlbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE5
MkRDMTExMkY4QkE0NjAwMTdBRjY1IC8qIExheWVyVHJlZUNvbnRleHQuaCBpbiBIZWFkZXJzICov
LApAQCAtOTQ5Nyw4ICs5NDgzLDYgQEAKIAkJCQlDNThDREYyRDE4ODc2MDlGMDA4NzE1MzYgLyog
SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MUFFNDlBNEExMUZGQThDRTAwNDhCNDY0IC8qIEpTTlBNZXRob2QuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMUFFNDk4NzkxMUZGN0ZBQTAwNDhCNDY0IC8qIEpTTlBPYmplY3QuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJNTE4MzUzREUxODg3MTI4QjAwRDlGRTQ0IC8qIEtleWVkRGVjb2Rlci5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQkxQUUwMEQ1QzE4MkRBREUxMDAwODdERDcgLyogS2V5ZWRFbmNv
ZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRTA5Mzc3MTRGQjEyOEMwMDExMzhEOSAvKiBM
YXllckhvc3RpbmdDb250ZXh0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYwQzM2NUUxOEMxMTBB
NTAwRjYwN0Q3IC8qIExheWVyUmVwcmVzZW50YXRpb24ubW0gaW4gU291cmNlcyAqLywKIAkJCQkx
QTkyREMxMzEyRjhCQUI5MDAxN0FGNjUgLyogTGF5ZXJUcmVlQ29udGV4dC5jcHAgaW4gU291cmNl
cyAqLywK
</data>
<flag name="review"
          id="283667"
          type_id="1"
          status="+"
          setter="aestes"
    />
          </attachment>
      

    </bug>

</bugzilla>