<?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>125105</bug_id>
          
          <creation_ts>2013-12-02 14:14:29 -0800</creation_ts>
          <short_desc>Support WebCrypto AES-KW</short_desc>
          <delta_ts>2013-12-02 14:33:34 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          
          <blocked>122679</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>955570</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-12-02 14:14:29 -0800</bug_when>
    <thetext>AES-KW is not standardized in WebCrypto yet, but there appears to be a consensus that it will be added.

Using &lt;http://www.w3.org/2012/webcrypto/wiki/KeyWrap_Proposal&gt; as a reference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955583</commentid>
    <comment_count>1</comment_count>
      <attachid>218216</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-12-02 14:26:21 -0800</bug_when>
    <thetext>Created attachment 218216
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955585</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-12-02 14:29:25 -0800</bug_when>
    <thetext>Attachment 218216 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/crypto/subtle/aes-kw-key-manipulation-expected.txt&apos;, u&apos;LayoutTests/crypto/subtle/aes-kw-key-manipulation.html&apos;, u&apos;LayoutTests/crypto/subtle/aes-kw-wrap-unwrap-aes-expected.txt&apos;, u&apos;LayoutTests/crypto/subtle/aes-kw-wrap-unwrap-aes.html&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/bindings/js/JSCryptoAlgorithmDictionary.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSCryptoKeySerializationJWK.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSSubtleCryptoCustom.cpp&apos;, u&apos;Source/WebCore/crypto/CryptoAlgorithmIdentifier.h&apos;, u&apos;Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_KW.cpp&apos;, u&apos;Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_KW.h&apos;, u&apos;Source/WebCore/crypto/keys/CryptoKeyAES.cpp&apos;, u&apos;Source/WebCore/crypto/mac/CryptoAlgorithmAES_KWMac.cpp&apos;, u&apos;Source/WebCore/crypto/mac/CryptoAlgorithmRegistryMac.cpp&apos;]&quot; exit_code: 1
Source/WebCore/crypto/mac/CryptoAlgorithmAES_KWMac.cpp:37:  CryptoAlgorithmAES_KW::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/mac/CryptoAlgorithmAES_KWMac.cpp:50:  CryptoAlgorithmAES_KW::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_KW.cpp:38:  CryptoAlgorithmAES_KW::s_name is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_KW.cpp:48:  CryptoAlgorithmAES_KW::create is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_KW.cpp:53:  CryptoAlgorithmAES_KW::identifier is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_KW.cpp:58:  CryptoAlgorithmAES_KW::keyAlgorithmMatches is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_KW.cpp:67:  CryptoAlgorithmAES_KW::encryptForWrapKey is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_KW.cpp:77:  CryptoAlgorithmAES_KW::decryptForUnwrapKey is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_KW.cpp:87:  CryptoAlgorithmAES_KW::generateKey is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_KW.cpp:100:  CryptoAlgorithmAES_KW::importKey is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/CryptoAlgorithmIdentifier.h:54:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/crypto/CryptoAlgorithmIdentifier.h:55:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Total errors found: 12 in 16 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>955589</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-12-02 14:33:34 -0800</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/r159966&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218216</attachid>
            <date>2013-12-02 14:26:21 -0800</date>
            <delta_ts>2013-12-02 14:28:51 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>aes-kw.txt</filename>
            <type>text/plain</type>
            <size>41335</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1OTk2MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBACisyMDEzLTEyLTAyICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIFN1cHBvcnQgV2ViQ3J5cHRv
IEFFUy1LVworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTI1MTA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGVzdHM6IGNyeXB0by9zdWJ0bGUvYWVzLWt3LWtleS1tYW5pcHVsYXRpb24uaHRtbAorICAgICAg
ICAgICAgICAgY3J5cHRvL3N1YnRsZS9hZXMta3ctd3JhcC11bndyYXAtYWVzLmh0bWwKKworICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRkZWQgbmV3IGZpbGVz
LgorCisgICAgICAgICogY3J5cHRvL0NyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIuaDogKFdlYkNv
cmU6OkNyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIpOiBBZGRlZCBBRVMtS1cuCisgICAgICAgIEl0
J3Mgbm90IHN0YW5kYXJkaXplZCB5ZXQsIGJ1dCB0aGVyZSBhcHBlYXJzIHRvIGJlIGEgY29uc2Vu
c3VzIHRoYXQgaXQgd2lsbCBiZSBzcGVjaWZpZWQuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDcnlw
dG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yRW5jcnlwdCk6CisgICAg
ICAgIChXZWJDb3JlOjpKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRl
cnNGb3JEZWNyeXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3J5cHRvQWxnb3JpdGhtRGljdGlv
bmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvclNpZ24pOgorICAgICAgICAoV2ViQ29yZTo6SlNDcnlw
dG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yVmVyaWZ5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVy
c0ZvckRpZ2VzdCk6CisgICAgICAgIChXZWJDb3JlOjpKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25h
cnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JHZW5lcmF0ZUtleSk6CisgICAgICAgIChXZWJDb3JlOjpK
U0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JEZXJpdmVLZXkp
OgorICAgICAgICAoV2ViQ29yZTo6SlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQ
YXJhbWV0ZXJzRm9yRGVyaXZlQml0cyk6CisgICAgICAgIChXZWJDb3JlOjpKU0NyeXB0b0FsZ29y
aXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JJbXBvcnRLZXkpOgorICAgICAgICAo
V2ViQ29yZTo6SlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9y
RXhwb3J0S2V5KToKKyAgICAgICAgQWRkZWQgQUVTLUtXIGNhc2VzIGV2ZXJ5d2hlcmUuCisKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0suY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLOjpyZWNvbmNpbGVBbGdv
cml0aG0pOgorICAgICAgICAoV2ViQ29yZTo6SlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLOjpr
ZXlTaXplSXNWYWxpZCk6CisgICAgICAgIChXZWJDb3JlOjpKU0NyeXB0b0tleVNlcmlhbGl6YXRp
b25KV0s6OmFkZEpXS0FsZ29yaXRobVRvSlNPTik6CisgICAgICAgIFN1cHBvcnQgaW1wb3J0aW5n
L2V4cG9ydGluZyBBRVMtS1cga2V5cyBpbiBKV0suCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U1N1YnRsZUNyeXB0b0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1N1YnRsZUNyeXB0
bzo6aW1wb3J0S2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkpTU3VidGxlQ3J5cHRvOjpleHBvcnRL
ZXkpOgorICAgICAgICAoV2ViQ29yZTo6SlNTdWJ0bGVDcnlwdG86OndyYXBLZXkpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNTdWJ0bGVDcnlwdG86OnVud3JhcEtleSk6CisgICAgICAgIEFkZGVkIHNv
bWUgYWNjaWRlbnRhbGx5IGZvcmdvdHRlbiBzdGQ6Om1vdmVzLgorCisgICAgICAgICogY3J5cHRv
L2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXLmNwcDogQWRkZWQuCisgICAgICAgICog
Y3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXLmg6IEFkZGVkLgorICAgICAg
ICAqIGNyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXTWFjLmNwcDogQWRkZWQuCisKKyAg
ICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuY3BwOiAoV2ViQ29yZTo6Q3J5cHRvS2V5
QUVTOjpDcnlwdG9LZXlBRVMpOiBBbGxvdyBBRVMtS1cKKyAgICAgICAgYXMgdmFsaWQgYWxnb3Jp
dGhtIGZvciBBRVMga2V5cy4KKworICAgICAgICAqIGNyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGht
UmVnaXN0cnlNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtUmVnaXN0
cnk6OnBsYXRmb3JtUmVnaXN0ZXJBbGdvcml0aG1zKTogUmVnaXN0ZXIgQUVTLUtXLgorCiAyMDEz
LTEyLTAyICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYSBz
ZXR0aW5nIHRvIG9wdCBpbnRvIGEgbW9kZSB3aGVyZSB0aGUgYmFja2dyb3VuZCBleHRlbmRzIGFu
ZCBmaXhlZCBlbGVtZW50cyAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1OTk0OSkKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
NTczNCw2ICs1NzM0LDkgQEAKIAkJRTFGRTEzNzQxODQwMkE2NzAwODkyRjEzIC8qIENvbW1vbkNy
eXB0b1V0aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMUZFMTM3MjE4NDAyQTY3MDA4OTJGMTMgLyogQ29tbW9uQ3J5cHRvVXRpbGl0aWVz
LmNwcCAqLzsgfTsKIAkJRTFGRTEzNzUxODQwMkE2NzAwODkyRjEzIC8qIENvbW1vbkNyeXB0b1V0
aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTFGRTEzNzMxODQwMkE2NzAwODkyRjEzIC8qIENvbW1vbkNyeXB0b1V0aWxpdGllcy5oICovOyB9
OwogCQlFMUZFMTM3NzE4NEQxRTMzMDA4OTJGMTMgLyogQ3J5cHRvQWxnb3JpdGhtUnNhT2FlcFBh
cmFtcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFG
RTEzNzYxODREMUUzMzAwODkyRjEzIC8qIENyeXB0b0FsZ29yaXRobVJzYU9hZXBQYXJhbXMuaCAq
LzsgfTsKKwkJRTFGRTEzN0ExODREMjFCQjAwODkyRjEzIC8qIENyeXB0b0FsZ29yaXRobUFFU19L
Vy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUZF
MTM3ODE4NEQyMUJCMDA4OTJGMTMgLyogQ3J5cHRvQWxnb3JpdGhtQUVTX0tXLmNwcCAqLzsgfTsK
KwkJRTFGRTEzN0IxODREMjFCQjAwODkyRjEzIC8qIENyeXB0b0FsZ29yaXRobUFFU19LVy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFGRTEzNzkxODRE
MjFCQjAwODkyRjEzIC8qIENyeXB0b0FsZ29yaXRobUFFU19LVy5oICovOyB9OworCQlFMUZFMTM3
RTE4NEQyNzAyMDA4OTJGMTMgLyogQ3J5cHRvQWxnb3JpdGhtQUVTX0tXTWFjLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRkUxMzdDMTg0RDI3MDIw
MDg5MkYxMyAvKiBDcnlwdG9BbGdvcml0aG1BRVNfS1dNYWMuY3BwICovOyB9OwogCQlFMUZGNTdB
MzBGMDEyNTVCMDA4OTFFQkIgLyogVGhyZWFkR2xvYmFsRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFGRjU3QTIwRjAxMjU1QjAwODkxRUJCIC8q
IFRocmVhZEdsb2JhbERhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlFMUZGNTdBNjBGMDEyNTZCMDA4OTFFQkIgLyogVGhyZWFkR2xvYmFsRGF0
YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUZG
NTdBNTBGMDEyNTZCMDA4OTFFQkIgLyogVGhyZWFkR2xvYmFsRGF0YS5jcHAgKi87IH07CiAJCUUx
RkY4RjVGMTgwNzQ0MjEwMDEzMjY3NCAvKiBTdWJ0bGVDcnlwdG8uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFGRjhGNUQxODA3NDQyMTAwMTMyNjc0
IC8qIFN1YnRsZUNyeXB0by5jcHAgKi87IH07CkBAIC0xMjg2MCw2ICsxMjg2Myw5IEBACiAJCUUx
RkUxMzcyMTg0MDJBNjcwMDg5MkYxMyAvKiBDb21tb25DcnlwdG9VdGlsaXRpZXMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29tbW9uQ3J5cHRvVXRpbGl0aWVzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFGRTEzNzMxODQwMkE2NzAwODkyRjEz
IC8qIENvbW1vbkNyeXB0b1V0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDb21tb25DcnlwdG9VdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTFGRTEzNzYxODREMUUzMzAwODkyRjEzIC8qIENyeXB0b0FsZ29yaXRobVJzYU9hZXBQYXJh
bXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ3J5cHRvQWxnb3JpdGhtUnNh
T2FlcFBhcmFtcy5oOyBwYXRoID0gcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1Sc2FPYWVwUGFy
YW1zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxRkUxMzc4MTg0RDIxQkIwMDg5
MkYxMyAvKiBDcnlwdG9BbGdvcml0aG1BRVNfS1cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ3J5cHRvQWxnb3JpdGhtQUVTX0tXLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRTFGRTEzNzkxODREMjFCQjAwODkyRjEzIC8qIENyeXB0b0FsZ29yaXRo
bUFFU19LVy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcnlwdG9BbGdvcml0
aG1BRVNfS1cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTFGRTEzN0MxODREMjcw
MjAwODkyRjEzIC8qIENyeXB0b0FsZ29yaXRobUFFU19LV01hYy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDcnlwdG9BbGdvcml0aG1BRVNfS1dNYWMuY3BwOyBwYXRo
ID0gbWFjL0NyeXB0b0FsZ29yaXRobUFFU19LV01hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUUxRkY1N0EyMEYwMTI1NUIwMDg5MUVCQiAvKiBUaHJlYWRHbG9iYWxEYXRhLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZEdsb2JhbERhdGEuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFGRjU3QTUwRjAxMjU2QjAwODkxRUJCIC8qIFRo
cmVhZEdsb2JhbERhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VGhyZWFkR2xvYmFsRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxRkY4
RjVDMTgwNzM2NEIwMDEzMjY3NCAvKiBTdWJ0bGVDcnlwdG8uaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFN1YnRsZUNyeXB0
by5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDQyMSw2ICsyMDQyNyw3IEBA
CiAJCQkJRTFGRTEzNzIxODQwMkE2NzAwODkyRjEzIC8qIENvbW1vbkNyeXB0b1V0aWxpdGllcy5j
cHAgKi8sCiAJCQkJRTFGRTEzNzMxODQwMkE2NzAwODkyRjEzIC8qIENvbW1vbkNyeXB0b1V0aWxp
dGllcy5oICovLAogCQkJCUUxMjVGODQzMTgyNDI1QzkwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0
aG1BRVNfQ0JDTWFjLmNwcCAqLywKKwkJCQlFMUZFMTM3QzE4NEQyNzAyMDA4OTJGMTMgLyogQ3J5
cHRvQWxnb3JpdGhtQUVTX0tXTWFjLmNwcCAqLywKIAkJCQlFMTI1RjgzNzE4MjJGMUVCMDBEODRD
RDkgLyogQ3J5cHRvQWxnb3JpdGhtSE1BQ01hYy5jcHAgKi8sCiAJCQkJRTFCQjg0QUMxODIyQ0E3
NDAwNTI1MDQzIC8qIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5TWFjLmNwcCAqLywKIAkJCQlFMUMy
NjZENjE4MzE3QUI0MDAzRjhCMzMgLyogQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzVN
YWMuY3BwICovLApAQCAtMjA0MzcsNiArMjA0NDQsOCBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJ
RTEyNUY4M0YxODI0MjUzQTAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobUFFU19DQkMuY3BwICov
LAogCQkJCUUxMjVGODQwMTgyNDI1M0EwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1BRVNfQ0JD
LmggKi8sCisJCQkJRTFGRTEzNzgxODREMjFCQjAwODkyRjEzIC8qIENyeXB0b0FsZ29yaXRobUFF
U19LVy5jcHAgKi8sCisJCQkJRTFGRTEzNzkxODREMjFCQjAwODkyRjEzIC8qIENyeXB0b0FsZ29y
aXRobUFFU19LVy5oICovLAogCQkJCUUxMjVGODJGMTgyMkYxMUIwMEQ4NENEOSAvKiBDcnlwdG9B
bGdvcml0aG1ITUFDLmNwcCAqLywKIAkJCQlFMTI1RjgzMDE4MjJGMTFCMDBEODRDRDkgLyogQ3J5
cHRvQWxnb3JpdGhtSE1BQy5oICovLAogCQkJCUUxRkUxMzY4MTgzRkUxQUIwMDg5MkYxMyAvKiBD
cnlwdG9BbGdvcml0aG1SU0FfT0FFUC5jcHAgKi8sCkBAIC0yNDMyNiw2ICsyNDMzNSw3IEBACiAJ
CQkJQkNDNTJGRDYxNTEyOThEMjAwM0Y5MTRCIC8qIFJlbmRlck11bHRpQ29sdW1uQmxvY2suaCBp
biBIZWFkZXJzICovLAogCQkJCTFBMzU4NkUwMTUyNjRDNDUwMDIyQTY1OSAvKiBSZW5kZXJNdWx0
aUNvbHVtbkZsb3dUaHJlYWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTMyQjlDMTUxN0MwQjIw
MEY1NDJFQyAvKiBSZW5kZXJNdWx0aUNvbHVtblNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTFG
RTEzN0IxODREMjFCQjAwODkyRjEzIC8qIENyeXB0b0FsZ29yaXRobUFFU19LVy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkM4NUYyM0QxNTE5MTVFMDAwQkMxN0JFIC8qIFJlbmRlck5hbWVkRmxvd1Ro
cmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQTQ4ODAwOTdEOTMwMjAwOTRDOUU0IC8qIFJl
bmRlck9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNGQTkzMDgxMDMzMzE5MzAwN0IyNUQx
IC8qIFJlbmRlck92ZXJmbG93LmggaW4gSGVhZGVycyAqLywKQEAgLTI1NjM2LDYgKzI1NjQ2LDcg
QEAKIAkJCQkzN0REQ0Q5RTEzODQ0RkZBMDAwOEI3OTMgLyogQXJjaGl2ZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1MTJERDhGQTBEOTFFNkFGMDAwRjg5RUUgLyogQXJjaGl2ZUZhY3RvcnkuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNTEyREQ4RkIwRDkxRTZBRjAwMEY4OUVFIC8qIEFyY2hpdmVS
ZXNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMUZFMTM3QTE4NEQyMUJCMDA4OTJGMTMg
LyogQ3J5cHRvQWxnb3JpdGhtQUVTX0tXLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMkREOEY3
MEQ5MUU2QUYwMDBGODlFRSAvKiBBcmNoaXZlUmVzb3VyY2VDb2xsZWN0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTQ5QjM3NjBDMTVDNkM2ODQwMDU5MTMxRCAvKiBBcnJheVZhbHVlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUZENTY4NkM5MTNBQzE4MDIwMEI2OUM2OCAvKiBBc3luY0F1ZGlv
RGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI4Mjk0LDYgKzI4MzA1LDcgQEAKIAkJCQk3
RTk5QUY1MTBCMTM4NDY0NjhGQjAxQTUgLyogV2luZG93Rm9jdXNBbGxvd2VkSW5kaWNhdG9yLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTM3OTkxOTk2MTIwMERERjQwMEVBMDQxQyAvKiBXT0ZGRmls
ZUZvcm1hdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRTQzNDY0NTBGNTQ2QTgyMDBCMEYxQkEg
LyogV29ya2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUxRkUxMzdFMTg0RDI3MDIwMDg5MkYx
MyAvKiBDcnlwdG9BbGdvcml0aG1BRVNfS1dNYWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEw
NTlEREQxODIwQjE3NjAwREZGOUIxIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjM4MjA4OTYxNDdEMzVGOTAwMTBCQzA2IC8qIFdvcmtl
ckNvbnNvbGVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGMzQ3NDJFMDEzNDM2MzFGMDA1
MzFCQzIgLyogV29ya2VyRGVidWdnZXJBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9BbGdvcml0
aG1EaWN0aW9uYXJ5LmNwcAkocmV2aXNpb24gMTU5OTQ0KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzI5LDYgKzMyOSw4IEBAIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0
ZXIKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlBCS0RGMjoKICAgICAgICAg
c2V0RE9NRXhjZXB0aW9uKGV4ZWMsIE5PVF9TVVBQT1JURURfRVJSKTsKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpBRVNfS1c6Cisg
ICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+
KCk7CiAgICAgfQogfQogCkBAIC0zNjQsNiArMzY2LDggQEAgc3RkOjp1bmlxdWVfcHRyPENyeXB0
b0FsZ29yaXRobVBhcmFtZXRlcgogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6
UEJLREYyOgogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgTk9UX1NVUFBPUlRFRF9FUlIp
OwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50
aWZpZXI6OkFFU19LVzoKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8Q3J5cHRvQWxn
b3JpdGhtUGFyYW1ldGVycz4oKTsKICAgICB9CiB9CiAKQEAgLTM5Nyw2ICs0MDEsNyBAQCBzdGQ6
OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVyCiAgICAgY2FzZSBDcnlwdG9BbGdv
cml0aG1JZGVudGlmaWVyOjpDT05DQVQ6CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlm
aWVyOjpIS0RGX0NUUjoKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlBCS0RG
MjoKKyAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkFFU19LVzoKICAgICAgICAg
c2V0RE9NRXhjZXB0aW9uKGV4ZWMsIE5PVF9TVVBQT1JURURfRVJSKTsKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgfQpAQCAtNDMyLDYgKzQzNyw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxDcnlw
dG9BbGdvcml0aG1QYXJhbWV0ZXIKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6
OkNPTkNBVDoKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkhLREZfQ1RSOgog
ICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6UEJLREYyOgorICAgIGNhc2UgQ3J5
cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0tXOgogICAgICAgICBzZXRET01FeGNlcHRpb24o
ZXhlYywgTk9UX1NVUFBPUlRFRF9FUlIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CkBAIC00NjQsNiArNDcwLDcgQEAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFt
ZXRlcgogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6Q09OQ0FUOgogICAgIGNh
c2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6SEtERl9DVFI6CiAgICAgY2FzZSBDcnlwdG9B
bGdvcml0aG1JZGVudGlmaWVyOjpQQktERjI6CisgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVu
dGlmaWVyOjpBRVNfS1c6CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBOT1RfU1VQUE9S
VEVEX0VSUik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KQEAgLTUwMCw2ICs1MDcs
OCBAQCBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVyCiAgICAgY2FzZSBD
cnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpQQktERjI6CiAgICAgICAgIHNldERPTUV4Y2VwdGlv
bihleGVjLCBOT1RfU1VQUE9SVEVEX0VSUik7CiAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0tXOgorICAgICAgICByZXR1cm4g
Y3JlYXRlQWVzS2V5R2VuUGFyYW1zKGV4ZWMsIHZhbHVlKTsKICAgICB9CiB9CiAKQEAgLTUyNyw2
ICs1MzYsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVyCiAgICAg
Y2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpDT05DQVQ6CiAgICAgY2FzZSBDcnlwdG9B
bGdvcml0aG1JZGVudGlmaWVyOjpIS0RGX0NUUjoKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlk
ZW50aWZpZXI6OlBCS0RGMjoKKyAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkFF
U19LVzoKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIE5PVF9TVVBQT1JURURfRVJSKTsK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAtNTU2LDYgKzU2Niw3IEBAIHN0ZDo6
dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXIKICAgICBjYXNlIENyeXB0b0FsZ29y
aXRobUlkZW50aWZpZXI6OkNPTkNBVDoKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZp
ZXI6OkhLREZfQ1RSOgogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6UEJLREYy
OgorICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0tXOgogICAgICAgICBz
ZXRET01FeGNlcHRpb24oZXhlYywgTk9UX1NVUFBPUlRFRF9FUlIpOwogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICB9CkBAIC01OTQsNiArNjA1LDggQEAgc3RkOjp1bmlxdWVfcHRyPENyeXB0
b0FsZ29yaXRobVBhcmFtZXRlcgogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6
UEJLREYyOgogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgTk9UX1NVUFBPUlRFRF9FUlIp
OwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50
aWZpZXI6OkFFU19LVzoKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8Q3J5cHRvQWxn
b3JpdGhtUGFyYW1ldGVycz4oKTsKICAgICB9CiB9CiAKQEAgLTYyNCw2ICs2MzcsOCBAQCBzdGQ6
OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVyCiAgICAgY2FzZSBDcnlwdG9BbGdv
cml0aG1JZGVudGlmaWVyOjpQQktERjI6CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBO
T1RfU1VQUE9SVEVEX0VSUik7CiAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGNhc2UgQ3J5
cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0tXOgorICAgICAgICByZXR1cm4gc3RkOjptYWtl
X3VuaXF1ZTxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPigpOwogICAgIH0KIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0tleVNl
cmlhbGl6YXRpb25KV0suY3BwCShyZXZpc2lvbiAxNTk5NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDIsNiArMjAyLDE1IEBAIGJvb2wgSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLOjpy
ZWNvbmMKICAgICB9IGVsc2UgaWYgKG1fandrQWxnb3JpdGhtTmFtZSA9PSAiQTI1NkNCQyIpIHsK
ICAgICAgICAgYWxnb3JpdGhtID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNoYXJlZCgpLmNy
ZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpBRVNfQ0JDKTsKICAgICAgICAgcGFyYW1l
dGVycyA9IHN0ZDo6bWFrZV91bmlxdWU8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4oKTsKKyAg
ICB9IGVsc2UgaWYgKG1fandrQWxnb3JpdGhtTmFtZSA9PSAiQTEyOEtXIikgeworICAgICAgICBh
bGdvcml0aG0gPSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2hhcmVkKCkuY3JlYXRlKENyeXB0
b0FsZ29yaXRobUlkZW50aWZpZXI6OkFFU19LVyk7CisgICAgICAgIHBhcmFtZXRlcnMgPSBzdGQ6
Om1ha2VfdW5pcXVlPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+KCk7CisgICAgfSBlbHNlIGlm
IChtX2p3a0FsZ29yaXRobU5hbWUgPT0gIkExOTJLVyIpIHsKKyAgICAgICAgYWxnb3JpdGhtID0g
Q3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNoYXJlZCgpLmNyZWF0ZShDcnlwdG9BbGdvcml0aG1J
ZGVudGlmaWVyOjpBRVNfS1cpOworICAgICAgICBwYXJhbWV0ZXJzID0gc3RkOjptYWtlX3VuaXF1
ZTxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPigpOworICAgIH0gZWxzZSBpZiAobV9qd2tBbGdv
cml0aG1OYW1lID09ICJBMjU2S1ciKSB7CisgICAgICAgIGFsZ29yaXRobSA9IENyeXB0b0FsZ29y
aXRobVJlZ2lzdHJ5OjpzaGFyZWQoKS5jcmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6
QUVTX0tXKTsKKyAgICAgICAgcGFyYW1ldGVycyA9IHN0ZDo6bWFrZV91bmlxdWU8Q3J5cHRvQWxn
b3JpdGhtUGFyYW1ldGVycz4oKTsKICAgICB9IGVsc2UgewogICAgICAgICB0aHJvd1R5cGVFcnJv
cihtX2V4ZWMsICJVbnN1cHBvcnRlZCBKV0sgYWxnb3JpdGhtICIgKyBtX2p3a0FsZ29yaXRobU5h
bWUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yODEsNiArMjkwLDEyIEBAIGJvb2wgSlND
cnlwdG9LZXlTZXJpYWxpemF0aW9uSldLOjprZXlTaXoKICAgICAgICAgcmV0dXJuIHNpemVJbkJp
dHMgPT0gMTkyOwogICAgIGlmIChtX2p3a0FsZ29yaXRobU5hbWUgPT0gIkEyNTZDQkMiKQogICAg
ICAgICByZXR1cm4gc2l6ZUluQml0cyA9PSAyNTY7CisgICAgaWYgKG1fandrQWxnb3JpdGhtTmFt
ZSA9PSAiQTEyOEtXIikKKyAgICAgICAgcmV0dXJuIHNpemVJbkJpdHMgPT0gMTI4OworICAgIGlm
IChtX2p3a0FsZ29yaXRobU5hbWUgPT0gIkExOTJLVyIpCisgICAgICAgIHJldHVybiBzaXplSW5C
aXRzID09IDE5MjsKKyAgICBpZiAobV9qd2tBbGdvcml0aG1OYW1lID09ICJBMjU2S1ciKQorICAg
ICAgICByZXR1cm4gc2l6ZUluQml0cyA9PSAyNTY7CiAgICAgaWYgKG1fandrQWxnb3JpdGhtTmFt
ZSA9PSAiUlMyNTYiKQogICAgICAgICByZXR1cm4gc2l6ZUluQml0cyA+PSAyMDQ4OwogICAgIGlm
IChtX2p3a0FsZ29yaXRobU5hbWUgPT0gIlJTMzg0IikKQEAgLTUyMiw2ICs1MzcsMTkgQEAgdm9p
ZCBKU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s6OmFkZEpXSwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVu
dGlmaWVyOjpBRVNfS1c6CisgICAgICAgIHN3aXRjaCAodG9DcnlwdG9LZXlBRVMoa2V5KS5rZXko
KS5zaXplKCkgKiA4KSB7CisgICAgICAgIGNhc2UgMTI4OgorICAgICAgICAgICAgandrQWxnb3Jp
dGhtID0gIkExMjhLVyI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxOTI6Cisg
ICAgICAgICAgICBqd2tBbGdvcml0aG0gPSAiQTE5MktXIjsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIDI1NjoKKyAgICAgICAgICAgIGp3a0FsZ29yaXRobSA9ICJBMjU2S1ciOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBD
cnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpSU0FTU0FfUEtDUzFfdjFfNTogewogICAgICAgICBj
b25zdCBDcnlwdG9LZXlSU0EmIHJzYUtleSA9IHRvQ3J5cHRvS2V5UlNBKGtleSk7CiAgICAgICAg
IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaGFzaDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTU3VidGxlQ3J5cHRvQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N1YnRsZUNyeXB0b0N1c3RvbS5jcHAJKHJldmlzaW9uIDE1
OTk0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3VidGxlQ3J5cHRvQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTU2LDcgKzU1Niw3IEBAIEpTVmFsdWUgSlNTdWJ0bGVD
cnlwdG86OmltcG9ydEtleShFeGVjU3QKICAgICAgICAgcHJvbWlzZVdyYXBwZXIucmVqZWN0KG51
bGxwdHIpOwogICAgIH07CiAKLSAgICBXZWJDb3JlOjppbXBvcnRLZXkoZXhlYywga2V5Rm9ybWF0
LCBkYXRhLCBhbGdvcml0aG0ucmVsZWFzZSgpLCBwYXJhbWV0ZXJzLnJlbGVhc2UoKSwgZXh0cmFj
dGFibGUsIGtleVVzYWdlcywgc3VjY2Vzc0NhbGxiYWNrLCBmYWlsdXJlQ2FsbGJhY2spOworICAg
IFdlYkNvcmU6OmltcG9ydEtleShleGVjLCBrZXlGb3JtYXQsIGRhdGEsIGFsZ29yaXRobS5yZWxl
YXNlKCksIHBhcmFtZXRlcnMucmVsZWFzZSgpLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCBzdGQ6
Om1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgc3RkOjptb3ZlKGZhaWx1cmVDYWxsYmFjaykpOwogICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKQEAgLTYyMCw3ICs2MjAsNyBAQCBKU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjpleHBvcnRLZXko
RXhlY1N0CiAgICAgICAgIHByb21pc2VXcmFwcGVyLnJlamVjdChudWxscHRyKTsKICAgICB9Owog
Ci0gICAgV2ViQ29yZTo6ZXhwb3J0S2V5KGV4ZWMsIGtleUZvcm1hdCwgKmtleSwgc3VjY2Vzc0Nh
bGxiYWNrLCBmYWlsdXJlQ2FsbGJhY2spOworICAgIFdlYkNvcmU6OmV4cG9ydEtleShleGVjLCBr
ZXlGb3JtYXQsICprZXksIHN0ZDo6bW92ZShzdWNjZXNzQ2FsbGJhY2spLCBzdGQ6Om1vdmUoZmFp
bHVyZUNhbGxiYWNrKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIApAQCAtNjg3LDcgKzY4Nyw3IEBAIEpTVmFsdWUgSlNTdWJ0
bGVDcnlwdG86OndyYXBLZXkoRXhlY1N0YXQKICAgICB9OwogCiAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7Ci0gICAgV2ViQ29yZTo6ZXhwb3J0S2V5KGV4ZWMsIGtleUZvcm1hdCwgKmtleSwgZXhw
b3J0U3VjY2Vzc0NhbGxiYWNrLCBleHBvcnRGYWlsdXJlQ2FsbGJhY2spOworICAgIFdlYkNvcmU6
OmV4cG9ydEtleShleGVjLCBrZXlGb3JtYXQsICprZXksIHN0ZDo6bW92ZShleHBvcnRTdWNjZXNz
Q2FsbGJhY2spLCBzdGQ6Om1vdmUoZXhwb3J0RmFpbHVyZUNhbGxiYWNrKSk7CiAgICAgaWYgKGVj
KSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwpAQCAtNzgxLDcgKzc4MSw3IEBAIEpTVmFsdWUgSlNTdWJ0bGVDcnlwdG86
OnVud3JhcEtleShFeGVjU3QKICAgICAgICAgICAgIHByb21pc2VXcmFwcGVyLnJlamVjdChudWxs
cHRyKTsKICAgICAgICAgfTsKICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZG9tR2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIFdlYkNvcmU6OmltcG9ydEtleShleGVjLCBrZXlG
b3JtYXQsIHN0ZDo6bWFrZV9wYWlyKHJlc3VsdC5kYXRhKCksIHJlc3VsdC5zaXplKCkpLCB1bndy
YXBwZWRLZXlBbGdvcml0aG1QdHIsIHVud3JhcHBlZEtleUFsZ29yaXRobVBhcmFtZXRlcnNQdHIs
IGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIGltcG9ydFN1Y2Nlc3NDYWxsYmFjaywgaW1wb3J0RmFp
bHVyZUNhbGxiYWNrKTsKKyAgICAgICAgV2ViQ29yZTo6aW1wb3J0S2V5KGV4ZWMsIGtleUZvcm1h
dCwgc3RkOjptYWtlX3BhaXIocmVzdWx0LmRhdGEoKSwgcmVzdWx0LnNpemUoKSksIHVud3JhcHBl
ZEtleUFsZ29yaXRobVB0ciwgdW53cmFwcGVkS2V5QWxnb3JpdGhtUGFyYW1ldGVyc1B0ciwgZXh0
cmFjdGFibGUsIGtleVVzYWdlcywgc3RkOjptb3ZlKGltcG9ydFN1Y2Nlc3NDYWxsYmFjayksIHN0
ZDo6bW92ZShpbXBvcnRGYWlsdXJlQ2FsbGJhY2spKTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogUmVwb3J0IGV4Y2VwdGlvbiBkZXRh
aWxzIHRvIGNvbnNvbGUsIGFuZCBwb3NzaWJseSB0byBjYWxsaW5nIHNjcmlwdCBvbmNlIHRoZXJl
IGlzIGEgc3RhbmRhcmRpemVkIHdheSB0byBwYXNzIGVycm9ycyB0byBXZWJDcnlwdG8gcHJvbWlz
ZSByZWplY3QgZnVuY3Rpb25zLgogICAgICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobUlkZW50
aWZpZXIuaAkocmV2aXNpb24gMTU5OTQzKQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0
b0FsZ29yaXRobUlkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsOCBAQCBF
TlVNX0NMQVNTKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIpIHsKICAgICBTSEFfNTEyLAogICAg
IENPTkNBVCwKICAgICBIS0RGX0NUUiwKLSAgICBQQktERjIKKyAgICBQQktERjIsCisgICAgQUVT
X0tXIC8vIE5vdCB5ZXQgc3RhbmRhcmRpemVkLgogfTsKIAogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNf
S1cuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMv
Q3J5cHRvQWxnb3JpdGhtQUVTX0tXLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDcnlwdG9BbGdv
cml0aG1BRVNfS1cuaCIKKworI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQorCisjaW5jbHVkZSAi
Q3J5cHRvQWxnb3JpdGhtQWVzS2V5R2VuUGFyYW1zLmgiCisjaW5jbHVkZSAiQ3J5cHRvS2V5QUVT
LmgiCisjaW5jbHVkZSAiQ3J5cHRvS2V5RGF0YU9jdGV0U2VxdWVuY2UuaCIKKyNpbmNsdWRlICJF
eGNlcHRpb25Db2RlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgY2hhciogY29u
c3QgQ3J5cHRvQWxnb3JpdGhtQUVTX0tXOjpzX25hbWUgPSAiYWVzLWt3IjsKKworQ3J5cHRvQWxn
b3JpdGhtQUVTX0tXOjpDcnlwdG9BbGdvcml0aG1BRVNfS1coKQoreworfQorCitDcnlwdG9BbGdv
cml0aG1BRVNfS1c6On5DcnlwdG9BbGdvcml0aG1BRVNfS1coKQoreworfQorCitzdGQ6OnVuaXF1
ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtPiBDcnlwdG9BbGdvcml0aG1BRVNfS1c6OmNyZWF0ZSgpCit7
CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG0+KG5ldyBDcnlwdG9B
bGdvcml0aG1BRVNfS1cpOworfQorCitDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIENyeXB0b0Fs
Z29yaXRobUFFU19LVzo6aWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNfaWRlbnRp
ZmllcjsKK30KKworYm9vbCBDcnlwdG9BbGdvcml0aG1BRVNfS1c6OmtleUFsZ29yaXRobU1hdGNo
ZXMoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIGNvbnN0IENyeXB0b0tleSYga2V5
KSBjb25zdAoreworICAgIGlmIChrZXkuYWxnb3JpdGhtSWRlbnRpZmllcigpICE9IHNfaWRlbnRp
ZmllcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VSVChpc0NyeXB0b0tleUFFUyhr
ZXkpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIENyeXB0b0FsZ29yaXRobUFFU19L
Vzo6ZW5jcnlwdEZvcldyYXBLZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFy
YW1ldGVycywgY29uc3QgQ3J5cHRvS2V5JiBrZXksIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEm
IGRhdGEsIFZlY3RvckNhbGxiYWNrIGNhbGxiYWNrLCBWb2lkQ2FsbGJhY2sgZmFpbHVyZUNhbGxi
YWNrLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIWtleUFsZ29yaXRobU1hdGNoZXMo
cGFyYW1ldGVycywga2V5KSkgeworICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgcGxhdGZvcm1FbmNyeXB0KHRvQ3J5cHRvS2V5QUVT
KGtleSksIGRhdGEsIHN0ZDo6bW92ZShjYWxsYmFjayksIHN0ZDo6bW92ZShmYWlsdXJlQ2FsbGJh
Y2spLCBlYyk7Cit9CisKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0tXOjpkZWNyeXB0Rm9yVW53
cmFwS2V5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGNvbnN0
IENyeXB0b0tleSYga2V5LCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiBkYXRhLCBWZWN0b3JD
YWxsYmFjayBjYWxsYmFjaywgVm9pZENhbGxiYWNrIGZhaWx1cmVDYWxsYmFjaywgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgaWYgKCFrZXlBbGdvcml0aG1NYXRjaGVzKHBhcmFtZXRlcnMsIGtl
eSkpIHsKKyAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIHBsYXRmb3JtRGVjcnlwdCh0b0NyeXB0b0tleUFFUyhrZXkpLCBkYXRhLCBz
dGQ6Om1vdmUoY2FsbGJhY2spLCBzdGQ6Om1vdmUoZmFpbHVyZUNhbGxiYWNrKSwgZWMpOworfQor
Cit2b2lkIENyeXB0b0FsZ29yaXRobUFFU19LVzo6Z2VuZXJhdGVLZXkoY29uc3QgQ3J5cHRvQWxn
b3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5
VXNhZ2UgdXNhZ2VzLCBLZXlPcktleVBhaXJDYWxsYmFjayBjYWxsYmFjaywgVm9pZENhbGxiYWNr
IGZhaWx1cmVDYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYpCit7CisgICAgY29uc3QgQ3J5cHRvQWxn
b3JpdGhtQWVzS2V5R2VuUGFyYW1zJiBhZXNQYXJhbWV0ZXJzID0gdG9DcnlwdG9BbGdvcml0aG1B
ZXNLZXlHZW5QYXJhbXMocGFyYW1ldGVycyk7CisKKyAgICBSZWZQdHI8Q3J5cHRvS2V5QUVTPiBy
ZXN1bHQgPSBDcnlwdG9LZXlBRVM6OmdlbmVyYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6
OkFFU19LVywgYWVzUGFyYW1ldGVycy5sZW5ndGgsIGV4dHJhY3RhYmxlLCB1c2FnZXMpOworICAg
IGlmICghcmVzdWx0KSB7CisgICAgICAgIGZhaWx1cmVDYWxsYmFjaygpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgY2FsbGJhY2socmVzdWx0LmdldCgpLCBudWxscHRyKTsKK30KKwor
dm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfS1c6OmltcG9ydEtleShjb25zdCBDcnlwdG9BbGdvcml0
aG1QYXJhbWV0ZXJzJiwgY29uc3QgQ3J5cHRvS2V5RGF0YSYga2V5RGF0YSwgYm9vbCBleHRyYWN0
YWJsZSwgQ3J5cHRvS2V5VXNhZ2UgdXNhZ2UsIEtleUNhbGxiYWNrIGNhbGxiYWNrLCBWb2lkQ2Fs
bGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmIChrZXlEYXRhLmZvcm1hdCgpICE9
IENyeXB0b0tleURhdGE6OkZvcm1hdDo6T2N0ZXRTZXF1ZW5jZSkgeworICAgICAgICBlYyA9IE5P
VF9TVVBQT1JURURfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNvbnN0IENyeXB0
b0tleURhdGFPY3RldFNlcXVlbmNlJiBrZXlEYXRhT2N0ZXRTZXF1ZW5jZSA9IHRvQ3J5cHRvS2V5
RGF0YU9jdGV0U2VxdWVuY2Uoa2V5RGF0YSk7CisgICAgUmVmUHRyPENyeXB0b0tleUFFUz4gcmVz
dWx0ID0gQ3J5cHRvS2V5QUVTOjpjcmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVT
X0tXLCBrZXlEYXRhT2N0ZXRTZXF1ZW5jZS5vY3RldFNlcXVlbmNlKCksIGV4dHJhY3RhYmxlLCB1
c2FnZSk7CisgICAgY2FsbGJhY2soKnJlc3VsdCk7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJM
RShTVUJUTEVfQ1JZUFRPKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvY3J5
cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXLmNwcApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVk
OiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9Dcnlw
dG9BbGdvcml0aG1BRVNfS1cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8v
YWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfS1cuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19LVy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENyeXB0b0Fs
Z29yaXRobUFFU19LV19oCisjZGVmaW5lIENyeXB0b0FsZ29yaXRobUFFU19LV19oCisKKyNpbmNs
dWRlICJDcnlwdG9BbGdvcml0aG0uaCIKKworI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENyeXB0b0tleUFFUzsKKworY2xhc3MgQ3J5cHRv
QWxnb3JpdGhtQUVTX0tXIEZJTkFMIDogcHVibGljIENyeXB0b0FsZ29yaXRobSB7CitwdWJsaWM6
CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHNfbmFtZTsKKyAgICBzdGF0aWMgY29uc3Qg
Q3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBzX2lkZW50aWZpZXIgPSBDcnlwdG9BbGdvcml0aG1J
ZGVudGlmaWVyOjpBRVNfS1c7CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0Fs
Z29yaXRobT4gY3JlYXRlKCk7CisKKyAgICB2aXJ0dWFsIENyeXB0b0FsZ29yaXRobUlkZW50aWZp
ZXIgaWRlbnRpZmllcigpIGNvbnN0IE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIGVuY3J5
cHRGb3JXcmFwS2V5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBjb25zdCBDcnlw
dG9LZXkmLCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiwgVmVjdG9yQ2FsbGJhY2ssIFZvaWRD
YWxsYmFjayBmYWlsdXJlQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGVjcnlwdEZvclVud3JhcEtleShjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJh
bWV0ZXJzJiwgY29uc3QgQ3J5cHRvS2V5JiwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYsIFZl
Y3RvckNhbGxiYWNrLCBWb2lkQ2FsbGJhY2sgZmFpbHVyZUNhbGxiYWNrLCBFeGNlcHRpb25Db2Rl
JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlS2V5KGNvbnN0IENyeXB0b0Fs
Z29yaXRobVBhcmFtZXRlcnMmLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSwgS2V5
T3JLZXlQYWlyQ2FsbGJhY2ssIFZvaWRDYWxsYmFjayBmYWlsdXJlQ2FsbGJhY2ssIEV4Y2VwdGlv
bkNvZGUmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgaW1wb3J0S2V5KGNvbnN0IENyeXB0
b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBjb25zdCBDcnlwdG9LZXlEYXRhJiwgYm9vbCBleHRyYWN0
YWJsZSwgQ3J5cHRvS2V5VXNhZ2UsIEtleUNhbGxiYWNrLCBWb2lkQ2FsbGJhY2sgZmFpbHVyZUNh
bGxiYWNrLCBFeGNlcHRpb25Db2RlJikgT1ZFUlJJREU7CisKK3ByaXZhdGU6CisgICAgQ3J5cHRv
QWxnb3JpdGhtQUVTX0tXKCk7CisgICAgdmlydHVhbCB+Q3J5cHRvQWxnb3JpdGhtQUVTX0tXKCk7
CisKKyAgICBib29sIGtleUFsZ29yaXRobU1hdGNoZXMoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFy
YW1ldGVycyYsIGNvbnN0IENyeXB0b0tleSYpIGNvbnN0OworICAgIHZvaWQgcGxhdGZvcm1FbmNy
eXB0KGNvbnN0IENyeXB0b0tleUFFUyYsIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmLCBWZWN0
b3JDYWxsYmFjaywgVm9pZENhbGxiYWNrIGZhaWx1cmVDYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYp
OworICAgIHZvaWQgcGxhdGZvcm1EZWNyeXB0KGNvbnN0IENyeXB0b0tleUFFUyYsIGNvbnN0IENy
eXB0b09wZXJhdGlvbkRhdGEmLCBWZWN0b3JDYWxsYmFjaywgVm9pZENhbGxiYWNrIGZhaWx1cmVD
YWxsYmFjaywgRXhjZXB0aW9uQ29kZSYpOworfTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNV
QlRMRV9DUllQVE8pCisjZW5kaWYgLy8gQ3J5cHRvQWxnb3JpdGhtQUVTX0tXX2gKClByb3BlcnR5
IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29y
aXRobUFFU19LVy5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAj
IworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmNwcAkocmV2aXNpb24gMTU5OTQzKQor
KysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDMsNyArNDMsOCBAQCBDcnlwdG9LZXlBRVM6OkNyeXB0b0tleUFFUyhDcnlwdG9B
bGdvcml0CiAgICAgICAgIHx8IGFsZ29yaXRobSA9PSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVy
OjpBRVNfQ0JDCiAgICAgICAgIHx8IGFsZ29yaXRobSA9PSBDcnlwdG9BbGdvcml0aG1JZGVudGlm
aWVyOjpBRVNfQ01BQwogICAgICAgICB8fCBhbGdvcml0aG0gPT0gQ3J5cHRvQWxnb3JpdGhtSWRl
bnRpZmllcjo6QUVTX0dDTQotICAgICAgICB8fCBhbGdvcml0aG0gPT0gQ3J5cHRvQWxnb3JpdGht
SWRlbnRpZmllcjo6QUVTX0NGQik7CisgICAgICAgIHx8IGFsZ29yaXRobSA9PSBDcnlwdG9BbGdv
cml0aG1JZGVudGlmaWVyOjpBRVNfQ0ZCCisgICAgICAgIHx8IGFsZ29yaXRobSA9PSBDcnlwdG9B
bGdvcml0aG1JZGVudGlmaWVyOjpBRVNfS1cpOwogfQogCiBDcnlwdG9LZXlBRVM6On5DcnlwdG9L
ZXlBRVMoKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1B
RVNfS1dNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5
cHRvQWxnb3JpdGhtQUVTX0tXTWFjLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXTWFjLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkNyeXB0b0FsZ29yaXRobUFFU19LVy5oIgorCisjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8p
CisKKyNpbmNsdWRlICJDcnlwdG9LZXlBRVMuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgi
CisjaW5jbHVkZSA8Q29tbW9uQ3J5cHRvL0NvbW1vbkNyeXB0by5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0tXOjpwbGF0Zm9ybUVuY3J5cHQoY29u
c3QgQ3J5cHRvS2V5QUVTJiBrZXksIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmIGRhdGEsIFZl
Y3RvckNhbGxiYWNrIGNhbGxiYWNrLCBWb2lkQ2FsbGJhY2sgZmFpbHVyZUNhbGxiYWNrLCBFeGNl
cHRpb25Db2RlJikKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0KENDU3ltbWV0cmljV3Jh
cHBlZFNpemUoa0NDV1JBUEFFUywgZGF0YS5zZWNvbmQpKTsKKyAgICBzaXplX3QgcmVzdWx0U2l6
ZSA9IHJlc3VsdC5zaXplKCk7CisgICAgaW50IHN0YXR1cyA9IENDU3ltbWV0cmljS2V5V3JhcChr
Q0NXUkFQQUVTLCBDQ3JmYzMzOTRfaXYsIENDcmZjMzM5NF9pdkxlbiwga2V5LmtleSgpLmRhdGEo
KSwga2V5LmtleSgpLnNpemUoKSwgZGF0YS5maXJzdCwgZGF0YS5zZWNvbmQsIHJlc3VsdC5kYXRh
KCksICZyZXN1bHRTaXplKTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIGZhaWx1cmVDYWxs
YmFjaygpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHJlc3VsdC5zaHJpbmsocmVzdWx0
U2l6ZSk7CisgICAgY2FsbGJhY2socmVzdWx0KTsKK30KKwordm9pZCBDcnlwdG9BbGdvcml0aG1B
RVNfS1c6OnBsYXRmb3JtRGVjcnlwdChjb25zdCBDcnlwdG9LZXlBRVMmIGtleSwgY29uc3QgQ3J5
cHRvT3BlcmF0aW9uRGF0YSYgZGF0YSwgVmVjdG9yQ2FsbGJhY2sgY2FsbGJhY2ssIFZvaWRDYWxs
YmFjayBmYWlsdXJlQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmKQoreworICAgIFZlY3Rvcjx1aW50
OF90PiByZXN1bHQoQ0NTeW1tZXRyaWNVbndyYXBwZWRTaXplKGtDQ1dSQVBBRVMsIGRhdGEuc2Vj
b25kKSk7CisgICAgc2l6ZV90IHJlc3VsdFNpemUgPSByZXN1bHQuc2l6ZSgpOworICAgIGludCBz
dGF0dXMgPSBDQ1N5bW1ldHJpY0tleVVud3JhcChrQ0NXUkFQQUVTLCBDQ3JmYzMzOTRfaXYsIEND
cmZjMzM5NF9pdkxlbiwga2V5LmtleSgpLmRhdGEoKSwga2V5LmtleSgpLnNpemUoKSwgZGF0YS5m
aXJzdCwgZGF0YS5zZWNvbmQsIHJlc3VsdC5kYXRhKCksICZyZXN1bHRTaXplKTsKKyAgICBpZiAo
c3RhdHVzKSB7CisgICAgICAgIGZhaWx1cmVDYWxsYmFjaygpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIHJlc3VsdC5zaHJpbmsocmVzdWx0U2l6ZSk7CisgICAgY2FsbGJhY2socmVzdWx0
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNVQlRM
RV9DUllQVE8pCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFj
L0NyeXB0b0FsZ29yaXRobUFFU19LV01hYy5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1z
dHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0
eQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1SZWdpc3Ry
eU1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9B
bGdvcml0aG1SZWdpc3RyeU1hYy5jcHAJKHJldmlzaW9uIDE1OTk0NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnlNYWMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCiAKICNpbmNs
dWRlICJDcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmgiCisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGht
QUVTX0tXLmgiCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtSE1BQy5oIgogI2luY2x1ZGUgIkNy
eXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81LmgiCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3Jp
dGhtUlNBX09BRVAuaCIKQEAgLTQzLDYgKzQ0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdm9p
ZCBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6cGxhdGZvcm1SZWdpc3RlckFsZ29yaXRobXMoKQog
ewogICAgIHJlZ2lzdGVyQWxnb3JpdGhtPENyeXB0b0FsZ29yaXRobUFFU19DQkM+KCk7CisgICAg
cmVnaXN0ZXJBbGdvcml0aG08Q3J5cHRvQWxnb3JpdGhtQUVTX0tXPigpOwogICAgIHJlZ2lzdGVy
QWxnb3JpdGhtPENyeXB0b0FsZ29yaXRobUhNQUM+KCk7CiAgICAgcmVnaXN0ZXJBbGdvcml0aG08
Q3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzU+KCk7CiAgICAgcmVnaXN0ZXJBbGdvcml0
aG08Q3J5cHRvQWxnb3JpdGhtUlNBX09BRVA+KCk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTk5NjAp
CisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBA
QAorMjAxMy0xMi0wMiAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KKworICAg
ICAgICBTdXBwb3J0IFdlYkNyeXB0byBBRVMtS1cKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNTEwNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogY3J5cHRvL3N1YnRsZS9hZXMta3cta2V5LW1hbmlwdWxh
dGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGNyeXB0by9zdWJ0bGUvYWVzLWt3
LWtleS1tYW5pcHVsYXRpb24uaHRtbDogQWRkZWQuCisgICAgICAgICogY3J5cHRvL3N1YnRsZS9h
ZXMta3ctd3JhcC11bndyYXAtYWVzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogY3J5
cHRvL3N1YnRsZS9hZXMta3ctd3JhcC11bndyYXAtYWVzLmh0bWw6IEFkZGVkLgorCiAyMDEzLTEy
LTAyICBSb2IgQnVpcyAgPHJvYi5idWlzQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtjc3Mgc2hh
cGVzXSBQYXJzZSBuZXcgZWxsaXBzZSBzaGFwZSBzeW50YXgKSW5kZXg6IExheW91dFRlc3RzL2Ny
eXB0by9zdWJ0bGUvYWVzLWt3LWtleS1tYW5pcHVsYXRpb24tZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWt3LWtleS1tYW5pcHVsYXRpb24t
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9h
ZXMta3cta2V5LW1hbmlwdWxhdGlvbi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyNSBAQAorVGVzdCBnZW5lcmF0aW5nLCBpbXBvcnRpbmcgYW5kIGV4cG9ydGluZyBrZXlz
IGZvciBBRVMtS1cuIFRlc3QgdGhhdCB0aGV5IGNhbid0IGJlIHVzZWQgd2l0aCBhbm90aGVyIGFs
Z29yaXRobS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK0dlbmVyYXRpbmcgYSBr
ZXkuLi4KK1BBU1Mga2V5LnRvU3RyaW5nKCkgaXMgJ1tvYmplY3QgS2V5XScKK1BBU1Mga2V5LnR5
cGUgaXMgJ3NlY3JldCcKK1BBU1Mga2V5LmFsZ29yaXRobS5uYW1lIGlzICdhZXMta3cnCitQQVNT
IGtleS5hbGdvcml0aG0ubGVuZ3RoIGlzIDI1NgorCitUZXN0aW5nIHRoYXQgdGhlIGtleSBjYW4n
dCBiZSB1c2VkIHdpdGggQUVTLUNCQy4uLgorUEFTUyBjcnlwdG8uc3VidGxlLmVuY3J5cHQoe25h
bWU6ICJhZXMtY2JjIiwgaXY6IGl2fSwga2V5LCBoZXhTdHJpbmdUb1VpbnQ4QXJyYXkoIjAwIikp
IHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogTm90U3VwcG9ydGVkRXJyb3I6IERPTSBFeGNlcHRpb24g
OS4KKworRXhwb3J0aW5nIHRoZSBrZXkgdG8gcmF3Li4uCitQQVNTIGV4cG9ydGVkS2V5LnRvU3Ry
aW5nKCkgaXMgJ1tvYmplY3QgQXJyYXlCdWZmZXJdJworSW1wb3J0aW5nIGl0IGJhY2suLi4KK1BB
U1MgaW1wb3J0ZWRLZXkudG9TdHJpbmcoKSBpcyAnW29iamVjdCBLZXldJworUEFTUyBpbXBvcnRl
ZEtleS50eXBlIGlzICdzZWNyZXQnCitQQVNTIGltcG9ydGVkS2V5LmFsZ29yaXRobS5uYW1lIGlz
ICdhZXMta3cnCitQQVNTIGltcG9ydGVkS2V5LmFsZ29yaXRobS5sZW5ndGggaXMgMjU2CitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMta3cta2V5LW1hbmlwdWxh
dGlvbi1leHBlY3RlZC50eHQKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMCww
ICsxICMjCit0ZXh0L3BsYWluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKQWRkZWQ6
IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgcHJvcGVydHkKSW5kZXg6IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWt3LWtleS1t
YW5pcHVsYXRpb24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxl
L2Flcy1rdy1rZXktbWFuaXB1bGF0aW9uLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9jcnlwdG8vc3VidGxlL2Flcy1rdy1rZXktbWFuaXB1bGF0aW9uLmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1MSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL2NvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxz
Y3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdCBnZW5lcmF0aW5nLCBpbXBvcnRpbmcgYW5kIGV4cG9y
dGluZyBrZXlzIGZvciBBRVMtS1cuIFRlc3QgdGhhdCB0aGV5IGNhbid0IGJlIHVzZWQgd2l0aCBh
bm90aGVyIGFsZ29yaXRobS4iKTsKKworanNUZXN0SXNBc3luYyA9IHRydWU7CisKK3ZhciBleHRy
YWN0YWJsZSA9IHRydWU7CisKK2RlYnVnKCJHZW5lcmF0aW5nIGEga2V5Li4uIik7CitjcnlwdG8u
c3VidGxlLmdlbmVyYXRlS2V5KHtuYW1lOiAiYWVzLWt3IiwgbGVuZ3RoOiAyNTZ9LCBleHRyYWN0
YWJsZSwgWyJlbmNyeXB0IiwgImRlY3J5cHQiLCAid3JhcEtleSIsICJ1bndyYXBLZXkiXSkudGhl
bihmdW5jdGlvbihyZXN1bHQpIHsKKyAgICBrZXkgPSByZXN1bHQ7CisgICAgc2hvdWxkQmUoImtl
eS50b1N0cmluZygpIiwgIidbb2JqZWN0IEtleV0nIik7CisgICAgc2hvdWxkQmUoImtleS50eXBl
IiwgIidzZWNyZXQnIik7CisgICAgc2hvdWxkQmUoImtleS5hbGdvcml0aG0ubmFtZSIsICInYWVz
LWt3JyIpOworICAgIHNob3VsZEJlKCJrZXkuYWxnb3JpdGhtLmxlbmd0aCIsICIyNTYiKTsKKwor
ICAgIGRlYnVnKCJcblRlc3RpbmcgdGhhdCB0aGUga2V5IGNhbid0IGJlIHVzZWQgd2l0aCBBRVMt
Q0JDLi4uIik7CisgICAgaXYgPSBoZXhTdHJpbmdUb1VpbnQ4QXJyYXkoIjAwMDEwMjAzMDQwNTA2
MDcwODA5MGEwYjBjMGQwZTBmIik7CisgICAgc2hvdWxkVGhyb3coJ2NyeXB0by5zdWJ0bGUuZW5j
cnlwdCh7bmFtZTogImFlcy1jYmMiLCBpdjogaXZ9LCBrZXksIGhleFN0cmluZ1RvVWludDhBcnJh
eSgiMDAiKSknKTsKKworICAgIGRlYnVnKCJcbkV4cG9ydGluZyB0aGUga2V5IHRvIHJhdy4uLiIp
OworICAgIHJldHVybiBjcnlwdG8uc3VidGxlLmV4cG9ydEtleSgncmF3Jywga2V5KTsKK30pLnRo
ZW4oZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgZXhwb3J0ZWRLZXkgPSByZXN1bHQ7CisgICAgc2hv
dWxkQmUoImV4cG9ydGVkS2V5LnRvU3RyaW5nKCkiLCAiJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyIp
OworICAgIGRlYnVnKCJJbXBvcnRpbmcgaXQgYmFjay4uLiIpOworICAgIHJldHVybiBjcnlwdG8u
c3VidGxlLmltcG9ydEtleSgncmF3JywgZXhwb3J0ZWRLZXksICJhZXMta3ciLCBleHRyYWN0YWJs
ZSwgWyJlbmNyeXB0IiwgImRlY3J5cHQiLCAid3JhcEtleSIsICJ1bndyYXBLZXkiXSk7Cit9KS50
aGVuKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgIGltcG9ydGVkS2V5ID0gcmVzdWx0OworCisgICAg
c2hvdWxkQmUoImltcG9ydGVkS2V5LnRvU3RyaW5nKCkiLCAiJ1tvYmplY3QgS2V5XSciKTsKKyAg
ICBzaG91bGRCZSgiaW1wb3J0ZWRLZXkudHlwZSIsICInc2VjcmV0JyIpOworICAgIHNob3VsZEJl
KCJpbXBvcnRlZEtleS5hbGdvcml0aG0ubmFtZSIsICInYWVzLWt3JyIpOworICAgIHNob3VsZEJl
KCJpbXBvcnRlZEtleS5hbGdvcml0aG0ubGVuZ3RoIiwgIjI1NiIpOworCisgICAgZmluaXNoSlNU
ZXN0KCk7Cit9KTsKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1rdy1rZXktbWFuaXB1bGF0aW9u
Lmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMCwwICsxICMjCit0ZXh0
L2h0bWwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMv
Y3J5cHRvL3N1YnRsZS9hZXMta3ctd3JhcC11bndyYXAtYWVzLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1rdy13cmFwLXVud3JhcC1hZXMt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9h
ZXMta3ctd3JhcC11bndyYXAtYWVzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDMzIEBACitUZXN0IHdyYXBwaW5nIGFuZCB1bndyYXBwaW5nIGtleXMgd2l0aCBBRVMtS1cu
CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitJbXBvcnRpbmcga2V5IGVuY3J5cHRp
b24ga2V5Li4uCitJbXBvcnRpbmcgYSBrZXkgdG8gYmUgd3JhcHBlZC4uLgorV3JhcHBpbmcgaXQu
Li4KK1BBU1MgYnl0ZXNUb0hleFN0cmluZyh3cmFwcGVkS2V5KSBpcyAnMWZhNjhiMGE4MTEyYjQ0
N2FlZjM0YmQ4ZmI1YTdiODI5ZDNlODYyMzcxZDJjZmU1JworVW53cmFwcGluZyBpdC4uLgorUEFT
UyB1bndyYXBwZWRLZXkudG9TdHJpbmcoKSBpcyAnW29iamVjdCBLZXldJworUEFTUyB1bndyYXBw
ZWRLZXkudHlwZSBpcyAnc2VjcmV0JworUEFTUyB1bndyYXBwZWRLZXkuZXh0cmFjdGFibGUgaXMg
dHJ1ZQorUEFTUyB1bndyYXBwZWRLZXkuYWxnb3JpdGhtLm5hbWUgaXMgJ2Flcy1jYmMnCitQQVNT
IHVud3JhcHBlZEtleS5hbGdvcml0aG0ubGVuZ3RoIGlzIDEyOAorUEFTUyB1bndyYXBwZWRLZXku
dXNhZ2VzIGlzIFsnZW5jcnlwdCcsICdkZWNyeXB0JywgJ3dyYXBLZXknLCAndW53cmFwS2V5J10K
K0V4cG9ydGluZyBpdC4uLgorUEFTUyBieXRlc1RvSGV4U3RyaW5nKHVud3JhcHBlZEtleURhdGEp
IGlzIGJ5dGVzVG9IZXhTdHJpbmcoa2V5RGF0YSkKKworV3JhcHBpbmcgaXQgYXMgSldLLi4uCitV
bndyYXBwaW5nIGl0Li4uCitQQVNTIHVud3JhcHBlZEtleS50b1N0cmluZygpIGlzICdbb2JqZWN0
IEtleV0nCitQQVNTIHVud3JhcHBlZEtleS50eXBlIGlzICdzZWNyZXQnCitQQVNTIHVud3JhcHBl
ZEtleS5leHRyYWN0YWJsZSBpcyB0cnVlCitQQVNTIHVud3JhcHBlZEtleS5hbGdvcml0aG0ubmFt
ZSBpcyAnYWVzLWNiYycKK1BBU1MgdW53cmFwcGVkS2V5LmFsZ29yaXRobS5sZW5ndGggaXMgMTI4
CitQQVNTIHVud3JhcHBlZEtleS51c2FnZXMgaXMgWydlbmNyeXB0JywgJ2RlY3J5cHQnLCAnd3Jh
cEtleScsICd1bndyYXBLZXknXQorRXhwb3J0aW5nIGl0Li4uCitQQVNTIGJ5dGVzVG9IZXhTdHJp
bmcodW53cmFwcGVkS2V5RGF0YSkgaXMgYnl0ZXNUb0hleFN0cmluZyhrZXlEYXRhKQorUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKClByb3BlcnR5IGNo
YW5nZXMgb246IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWt3LXdyYXAtdW53cmFwLWFl
cy1leHBlY3RlZC50eHQKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMCwwICsx
ICMjCit0ZXh0L3BsYWluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKQWRkZWQ6IHN2
bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
cHJvcGVydHkKSW5kZXg6IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWt3LXdyYXAtdW53
cmFwLWFlcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVz
LWt3LXdyYXAtdW53cmFwLWFlcy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvY3J5
cHRvL3N1YnRsZS9hZXMta3ctd3JhcC11bndyYXAtYWVzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw4MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBz
cmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0icmVzb3VyY2VzL2NvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlk
PSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+
CitkZXNjcmlwdGlvbigiVGVzdCB3cmFwcGluZyBhbmQgdW53cmFwcGluZyBrZXlzIHdpdGggQUVT
LUtXLiIpOworCitqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKwordmFyIGtla0RhdGEgPSBoZXhTdHJp
bmdUb1VpbnQ4QXJyYXkoIjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGIik7Cit2YXIg
a2V5RGF0YSA9IGhleFN0cmluZ1RvVWludDhBcnJheSgiMDAxMTIyMzM0NDU1NjY3Nzg4OTlBQUJC
Q0NEREVFRkYiKTsKK3ZhciBleHRyYWN0YWJsZSA9IHRydWU7CisKK2RlYnVnKCJJbXBvcnRpbmcg
a2V5IGVuY3J5cHRpb24ga2V5Li4uIik7CitjcnlwdG8uc3VidGxlLmltcG9ydEtleSgicmF3Iiwg
a2VrRGF0YSwgImFlcy1rdyIsIGV4dHJhY3RhYmxlLCBbIndyYXBLZXkiLCAidW53cmFwS2V5Il0p
LnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7CisgICAga2VrID0gcmVzdWx0OworCisgICAgZGVidWco
IkltcG9ydGluZyBhIGtleSB0byBiZSB3cmFwcGVkLi4uIik7CisgICAgcmV0dXJuIGNyeXB0by5z
dWJ0bGUuaW1wb3J0S2V5KCJyYXciLCBrZXlEYXRhLCAiYWVzLWNiYyIsIGV4dHJhY3RhYmxlLCBb
ImVuY3J5cHQiLCAiZGVjcnlwdCIsICJ3cmFwS2V5IiwgInVud3JhcEtleSJdKTsKK30pLnRoZW4o
ZnVuY3Rpb24ocmVzdWx0KSB7CisgICAga2V5ID0gcmVzdWx0OworCisgICAgZGVidWcoIldyYXBw
aW5nIGl0Li4uIik7CisgICAgcmV0dXJuIGNyeXB0by5zdWJ0bGUud3JhcEtleSgicmF3Iiwga2V5
LCBrZWssICJhZXMta3ciKTsKK30pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgd3JhcHBl
ZEtleSA9IHJlc3VsdDsKKyAgICBzaG91bGRCZSgiYnl0ZXNUb0hleFN0cmluZyh3cmFwcGVkS2V5
KSIsICInMWZhNjhiMGE4MTEyYjQ0N2FlZjM0YmQ4ZmI1YTdiODI5ZDNlODYyMzcxZDJjZmU1JyIp
OyAvLyBSZXN1bHQgZnJvbSBSRkMgMzM5NC4KKworICAgIGRlYnVnKCJVbndyYXBwaW5nIGl0Li4u
Iik7CisgICAgcmV0dXJuIGNyeXB0by5zdWJ0bGUudW53cmFwS2V5KCJyYXciLCB3cmFwcGVkS2V5
LCBrZWssICJhZXMta3ciLCAiYWVzLWNiYyIsIGV4dHJhY3RhYmxlLCBbImVuY3J5cHQiLCAiZGVj
cnlwdCIsICJ3cmFwS2V5IiwgInVud3JhcEtleSJdKTsKK30pLnRoZW4oZnVuY3Rpb24ocmVzdWx0
KSB7CisgICAgdW53cmFwcGVkS2V5ID0gcmVzdWx0OworICAgIHNob3VsZEJlKCJ1bndyYXBwZWRL
ZXkudG9TdHJpbmcoKSIsICInW29iamVjdCBLZXldJyIpOworICAgIHNob3VsZEJlKCJ1bndyYXBw
ZWRLZXkudHlwZSIsICInc2VjcmV0JyIpOworICAgIHNob3VsZEJlKCJ1bndyYXBwZWRLZXkuZXh0
cmFjdGFibGUiLCAidHJ1ZSIpOworICAgIHNob3VsZEJlKCJ1bndyYXBwZWRLZXkuYWxnb3JpdGht
Lm5hbWUiLCAiJ2Flcy1jYmMnIik7CisgICAgc2hvdWxkQmUoInVud3JhcHBlZEtleS5hbGdvcml0
aG0ubGVuZ3RoIiwgIjEyOCIpOworICAgIHNob3VsZEJlKCJ1bndyYXBwZWRLZXkudXNhZ2VzIiwg
IlsnZW5jcnlwdCcsICdkZWNyeXB0JywgJ3dyYXBLZXknLCAndW53cmFwS2V5J10iKTsKKworICAg
IGRlYnVnKCJFeHBvcnRpbmcgaXQuLi4iKTsKKyAgICByZXR1cm4gY3J5cHRvLnN1YnRsZS5leHBv
cnRLZXkoInJhdyIsIHVud3JhcHBlZEtleSk7Cit9KS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkgewor
ICAgIHVud3JhcHBlZEtleURhdGEgPSByZXN1bHQ7CisgICAgc2hvdWxkQmUoImJ5dGVzVG9IZXhT
dHJpbmcodW53cmFwcGVkS2V5RGF0YSkiLCAiYnl0ZXNUb0hleFN0cmluZyhrZXlEYXRhKSIpOwor
CisgICAgZGVidWcoIlxuV3JhcHBpbmcgaXQgYXMgSldLLi4uIik7CisgICAgcmV0dXJuIGNyeXB0
by5zdWJ0bGUud3JhcEtleSgiandrIiwga2V5LCBrZWssICJhZXMta3ciKTsKK30pLnRoZW4oZnVu
Y3Rpb24ocmVzdWx0KSB7CisgICAgd3JhcHBlZEtleSA9IHJlc3VsdDsKKworICAgIGRlYnVnKCJV
bndyYXBwaW5nIGl0Li4uIik7CisgICAgcmV0dXJuIGNyeXB0by5zdWJ0bGUudW53cmFwS2V5KCJq
d2siLCB3cmFwcGVkS2V5LCBrZWssICJhZXMta3ciLCAiYWVzLWNiYyIsIGV4dHJhY3RhYmxlLCBb
ImVuY3J5cHQiLCAiZGVjcnlwdCIsICJ3cmFwS2V5IiwgInVud3JhcEtleSJdKTsKK30pLnRoZW4o
ZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgdW53cmFwcGVkS2V5ID0gcmVzdWx0OworICAgIHNob3Vs
ZEJlKCJ1bndyYXBwZWRLZXkudG9TdHJpbmcoKSIsICInW29iamVjdCBLZXldJyIpOworICAgIHNo
b3VsZEJlKCJ1bndyYXBwZWRLZXkudHlwZSIsICInc2VjcmV0JyIpOworICAgIHNob3VsZEJlKCJ1
bndyYXBwZWRLZXkuZXh0cmFjdGFibGUiLCAidHJ1ZSIpOworICAgIHNob3VsZEJlKCJ1bndyYXBw
ZWRLZXkuYWxnb3JpdGhtLm5hbWUiLCAiJ2Flcy1jYmMnIik7CisgICAgc2hvdWxkQmUoInVud3Jh
cHBlZEtleS5hbGdvcml0aG0ubGVuZ3RoIiwgIjEyOCIpOworICAgIHNob3VsZEJlKCJ1bndyYXBw
ZWRLZXkudXNhZ2VzIiwgIlsnZW5jcnlwdCcsICdkZWNyeXB0JywgJ3dyYXBLZXknLCAndW53cmFw
S2V5J10iKTsKKworICAgIGRlYnVnKCJFeHBvcnRpbmcgaXQuLi4iKTsKKyAgICByZXR1cm4gY3J5
cHRvLnN1YnRsZS5leHBvcnRLZXkoInJhdyIsIHVud3JhcHBlZEtleSk7Cit9KS50aGVuKGZ1bmN0
aW9uKHJlc3VsdCkgeworICAgIHVud3JhcHBlZEtleURhdGEgPSByZXN1bHQ7CisgICAgc2hvdWxk
QmUoImJ5dGVzVG9IZXhTdHJpbmcodW53cmFwcGVkS2V5RGF0YSkiLCAiYnl0ZXNUb0hleFN0cmlu
ZyhrZXlEYXRhKSIpOworCisgICAgZmluaXNoSlNUZXN0KCk7Cit9KTsKKzwvc2NyaXB0PgorCis8
c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9jcnlwdG8v
c3VidGxlL2Flcy1rdy13cmFwLXVud3JhcC1hZXMuaHRtbApfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46
bWltZS10eXBlCiMjIC0wLDAgKzEgIyMKK3RleHQvaHRtbApcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IHByb3BlcnR5Cg==
</data>
<flag name="review"
          id="241578"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>