<?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>137884</bug_id>
          
          <creation_ts>2014-10-20 10:06:34 -0700</creation_ts>
          <short_desc>[GTK] Move GtkInputMethodFilter from Platform to WebKit2</short_desc>
          <delta_ts>2014-10-22 06:00:19 -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>WebKitGTK</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>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>gustavo</cc>
    
    <cc>pnormand</cc>
    
    <cc>svillar</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1042856</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-20 10:06:34 -0700</bug_when>
    <thetext>And merge it with WebViewBaseInputMethodFilter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042859</commentid>
    <comment_count>1</comment_count>
      <attachid>240128</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-20 10:18:31 -0700</bug_when>
    <thetext>Created attachment 240128
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042867</commentid>
    <comment_count>2</comment_count>
      <attachid>240129</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-20 10:27:18 -0700</bug_when>
    <thetext>Created attachment 240129
Updated the apply on current git master</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042869</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-20 10:29:51 -0700</bug_when>
    <thetext>Attachment 240129 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/gtk/InputMethodFilter.cpp:143:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebKit2/UIProcess/gtk/InputMethodFilter.cpp:249:  Missing space before {  [whitespace/braces] [5]
Total errors found: 2 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>1043403</commentid>
    <comment_count>4</comment_count>
      <attachid>240129</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2014-10-22 04:04:25 -0700</bug_when>
    <thetext>Comment on attachment 240129
Updated the apply on current git master

This rocks =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1043432</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-22 06:00:19 -0700</bug_when>
    <thetext>Committed r175046: &lt;http://trac.webkit.org/changeset/175046&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240128</attachid>
            <date>2014-10-20 10:18:31 -0700</date>
            <delta_ts>2014-10-20 10:27:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-input-method-filter.diff</filename>
            <type>text/plain</type>
            <size>82819</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5MTU3NzdkLi5hNDY3N2QwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTgg
QEAKIDIwMTQtMTAtMjAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCisgICAgICAgIFtHVEtdIE1vdmUgR3RrSW5wdXRNZXRob2RGaWx0ZXIgZnJvbSBQbGF0Zm9y
bSB0byBXZWJLaXQyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzc4ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBSZW1vdmUgR3RrSW5wdXRNZXRob2RGaWx0ZXIuCisKKyAgICAgICAgKiBQbGF0Zm9ybUdU
Sy5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRlci5o
OiBSZW1vdmVkLgorCisyMDE0LTEwLTIwICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KKwogICAgICAgICBbR1RLXSBTZXZlcmFsIGxhYmVscyBhcmUgd2hpdGUgaW5z
dGVhZCBvZiBibGFjawogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTM3ODAzCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNt
YWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggZDcwNjQ1MS4uNmVh
Nzc4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTIyMSw3ICsyMjEsNiBAQCBsaXN0
KEFQUEVORCBXZWJDb3JlUGxhdGZvcm1HVEtfU09VUkNFUwogICAgIHBsYXRmb3JtL2d0ay9EcmFn
SWNvbi5jcHAKICAgICBwbGF0Zm9ybS9ndGsvRHJhZ0ltYWdlR3RrLmNwcAogICAgIHBsYXRmb3Jt
L2d0ay9HUmVmUHRyR3RrLmNwcAotICAgIHBsYXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRl
ci5jcHAKICAgICBwbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmNwcAogICAgIHBsYXRmb3JtL2d0
ay9HdGtWZXJzaW9uaW5nLmMKICAgICBwbGF0Zm9ybS9ndGsvS2V5QmluZGluZ1RyYW5zbGF0b3Iu
Y3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRo
b2RGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0aG9k
RmlsdGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQzNWZhMy4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzUzICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChD
KSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3RrSW5wdXRNZXRob2RGaWx0ZXIuaCIKLQotI2lu
Y2x1ZGUgIkdVbmlxdWVQdHJHdGsuaCIKLSNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCi0jaW5j
bHVkZSA8Z2RrL2dka2tleXN5bXMuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8
d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HVW5pcXVlUHRyLmg+Ci0K
LS8vIFRoZSBXaW5kb3dzIGNvbXBvc2l0aW9uIGtleSBldmVudCBjb2RlIGlzIDI5OSBvciBWS19Q
Uk9DRVNTS0VZLiBXZSBuZWVkIHRvCi0vLyBlbWl0IHRoaXMgY29kZSBmb3Igd2ViIGNvbXBhdGli
aWxpdHkgcmVhc29ucyB3aGVuIGtleSBldmVudHMgdHJpZ2dlcgotLy8gY29tcG9zaXRpb24gcmVz
dWx0cy4gR0RLIGRvZXNuJ3QgaGF2ZSBhbiBlcXVpdmFsZW50LCBzbyB3ZSBzZW5kIFZvaWRTeW1i
b2wKLS8vIGhlcmUgdG8gV2ViQ29yZS4gUGxhdGZvcm1LZXlFdmVudCBrbm93cyB0byBjb252ZXJ0
IHRoaXMgY29kZSBpbnRvCi0vLyBWS19QUk9DRVNTS0VZLgotY29uc3QgaW50IGdDb21wb3NpdGlv
bkV2ZW50S2V5Q29kZSA9IEdES19LRVlfVm9pZFN5bWJvbDsKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1zdGF0aWMgdm9pZCBoYW5kbGVDb21taXRDYWxsYmFjayhHdGtJTUNvbnRleHQqLCBjb25z
dCBjaGFyKiBjb21wb3NpdGlvblN0cmluZywgR3RrSW5wdXRNZXRob2RGaWx0ZXIqIGZpbHRlcikK
LXsKLSAgICBmaWx0ZXItPmhhbmRsZUNvbW1pdChjb21wb3NpdGlvblN0cmluZyk7Ci19Ci0KLXN0
YXRpYyB2b2lkIGhhbmRsZVByZWVkaXRTdGFydENhbGxiYWNrKEd0a0lNQ29udGV4dCosIEd0a0lu
cHV0TWV0aG9kRmlsdGVyKiBmaWx0ZXIpCi17Ci0gICAgZmlsdGVyLT5oYW5kbGVQcmVlZGl0U3Rh
cnQoKTsKLX0KLQotc3RhdGljIHZvaWQgaGFuZGxlUHJlZWRpdENoYW5nZWRDYWxsYmFjayhHdGtJ
TUNvbnRleHQqLCBHdGtJbnB1dE1ldGhvZEZpbHRlciogZmlsdGVyKQotewotICAgIGZpbHRlci0+
aGFuZGxlUHJlZWRpdENoYW5nZWQoKTsKLX0KLQotc3RhdGljIHZvaWQgaGFuZGxlUHJlZWRpdEVu
ZENhbGxiYWNrKEd0a0lNQ29udGV4dCosIEd0a0lucHV0TWV0aG9kRmlsdGVyKiBmaWx0ZXIpCi17
Ci0gICAgZmlsdGVyLT5oYW5kbGVQcmVlZGl0RW5kKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGhhbmRs
ZVdpZGdldFJlYWxpemUoR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a0lucHV0TWV0aG9kRmlsdGVyKiBm
aWx0ZXIpCi17Ci0gICAgR2RrV2luZG93KiB3aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3co
d2lkZ2V0KTsKLSAgICBBU1NFUlQod2luZG93KTsKLSAgICBndGtfaW1fY29udGV4dF9zZXRfY2xp
ZW50X3dpbmRvdyhmaWx0ZXItPmNvbnRleHQoKSwgd2luZG93KTsKLX0KLQotdm9pZCBHdGtJbnB1
dE1ldGhvZEZpbHRlcjo6c2V0V2lkZ2V0KEd0a1dpZGdldCogd2lkZ2V0KQotewotICAgIEFTU0VS
VCghbV93aWRnZXQpOwotCi0gICAgbV93aWRnZXQgPSB3aWRnZXQ7Ci0gICAgaWYgKGd0a193aWRn
ZXRfZ2V0X3dpbmRvdyhtX3dpZGdldCkpCi0gICAgICAgIGhhbmRsZVdpZGdldFJlYWxpemUobV93
aWRnZXQsIHRoaXMpOwotICAgIGVsc2UKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdF9hZnRlcih3
aWRnZXQsICJyZWFsaXplIiwgR19DQUxMQkFDSyhoYW5kbGVXaWRnZXRSZWFsaXplKSwgdGhpcyk7
Ci19Ci0KLXZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OnNldEN1cnNvclJlY3QoY29uc3QgSW50
UmVjdCYgY3Vyc29yUmVjdCkKLXsKLSAgICAvLyBEb24ndCBtb3ZlIHRoZSB3aW5kb3cgdW5sZXNz
IHRoZSBjdXJzb3IgYWN0dWFsbHkgbW92ZXMgbW9yZSB0aGFuIDEwCi0gICAgLy8gcGl4ZWxzLiBU
aGlzIHByZXZlbnRzIHVzIGZyb20gbWFraW5nIHRoZSB3aW5kb3cgZmxhc2ggZHVyaW5nIG1pbm9y
Ci0gICAgLy8gY3Vyc29yIGFkanVzdG1lbnRzLgotICAgIHN0YXRpYyBjb25zdCBpbnQgd2luZG93
TW92ZW1lbnRUaHJlc2hvbGQgPSAxMCAqIDEwOwotICAgIGlmIChjdXJzb3JSZWN0LmxvY2F0aW9u
KCkuZGlzdGFuY2VTcXVhcmVkVG9Qb2ludChtX2xhc3RDYXJlTG9jYXRpb24pIDwgd2luZG93TW92
ZW1lbnRUaHJlc2hvbGQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbGFzdENhcmVMb2NhdGlv
biA9IGN1cnNvclJlY3QubG9jYXRpb24oKTsKLSAgICBJbnRSZWN0IHRyYW5zbGF0ZWRSZWN0ID0g
Y3Vyc29yUmVjdDsKLQotICAgIEFTU0VSVChtX3dpZGdldCk7Ci0gICAgR3RrQWxsb2NhdGlvbiBh
bGxvY2F0aW9uOwotICAgIGd0a193aWRnZXRfZ2V0X2FsbG9jYXRpb24obV93aWRnZXQsICZhbGxv
Y2F0aW9uKTsKLSAgICB0cmFuc2xhdGVkUmVjdC5tb3ZlKGFsbG9jYXRpb24ueCwgYWxsb2NhdGlv
bi55KTsKLQotICAgIEdka1JlY3RhbmdsZSBnZGtDdXJzb3JSZWN0ID0geyBjdXJzb3JSZWN0Lngo
KSwgY3Vyc29yUmVjdC55KCksIGN1cnNvclJlY3Qud2lkdGgoKSwgY3Vyc29yUmVjdC5oZWlnaHQo
KSB9OwotICAgIGd0a19pbV9jb250ZXh0X3NldF9jdXJzb3JfbG9jYXRpb24obV9jb250ZXh0Lmdl
dCgpLCAmZ2RrQ3Vyc29yUmVjdCk7Ci19Ci0KLUd0a0lucHV0TWV0aG9kRmlsdGVyOjpHdGtJbnB1
dE1ldGhvZEZpbHRlcigpCi0gICAgOiBtX2N1cnNvck9mZnNldCgwKQotICAgICwgbV9jb250ZXh0
KGFkb3B0R1JlZihndGtfaW1fbXVsdGljb250ZXh0X25ldygpKSkKLSAgICAsIG1fd2lkZ2V0KDAp
Ci0gICAgLCBtX2VuYWJsZWQoZmFsc2UpCi0gICAgLCBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHko
ZmFsc2UpCi0gICAgLCBtX2ZpbHRlcmluZ0tleUV2ZW50KGZhbHNlKQotICAgICwgbV9wcmVlZGl0
Q2hhbmdlZChmYWxzZSkKLSAgICAsIG1fcHJldmVudE5leHRDb21taXQoZmFsc2UpCi0gICAgLCBt
X2p1c3RTZW50RmFrZUtleVVwKGZhbHNlKQotICAgICwgbV9sYXN0RmlsdGVyZWRLZXlQcmVzc0Nv
ZGVXaXRoTm9SZXN1bHRzKEdES19LRVlfVm9pZFN5bWJvbCkKLXsKLSAgICBnX3NpZ25hbF9jb25u
ZWN0KG1fY29udGV4dC5nZXQoKSwgImNvbW1pdCIsIEdfQ0FMTEJBQ0soaGFuZGxlQ29tbWl0Q2Fs
bGJhY2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fY29udGV4dC5nZXQoKSwgInBy
ZWVkaXQtc3RhcnQiLCBHX0NBTExCQUNLKGhhbmRsZVByZWVkaXRTdGFydENhbGxiYWNrKSwgdGhp
cyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX2NvbnRleHQuZ2V0KCksICJwcmVlZGl0LWNoYW5n
ZWQiLCBHX0NBTExCQUNLKGhhbmRsZVByZWVkaXRDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKLSAg
ICBnX3NpZ25hbF9jb25uZWN0KG1fY29udGV4dC5nZXQoKSwgInByZWVkaXQtZW5kIiwgR19DQUxM
QkFDSyhoYW5kbGVQcmVlZGl0RW5kQ2FsbGJhY2spLCB0aGlzKTsKLX0KLQotR3RrSW5wdXRNZXRo
b2RGaWx0ZXI6On5HdGtJbnB1dE1ldGhvZEZpbHRlcigpCi17Ci0gICAgZ19zaWduYWxfaGFuZGxl
cnNfZGlzY29ubmVjdF9ieV9mdW5jKG1fY29udGV4dC5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oaGFuZGxlQ29tbWl0Q2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9oYW5kbGVy
c19kaXNjb25uZWN0X2J5X2Z1bmMobV9jb250ZXh0LmdldCgpLCByZWludGVycHJldF9jYXN0PHZv
aWQqPihoYW5kbGVQcmVlZGl0U3RhcnRDYWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2hh
bmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX2NvbnRleHQuZ2V0KCksIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KGhhbmRsZVByZWVkaXRDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3Np
Z25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV9jb250ZXh0LmdldCgpLCByZWludGVy
cHJldF9jYXN0PHZvaWQqPihoYW5kbGVQcmVlZGl0RW5kQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBn
X3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV93aWRnZXQsIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KGhhbmRsZVdpZGdldFJlYWxpemUpLCB0aGlzKTsKLX0KLQotdm9pZCBHdGtJ
bnB1dE1ldGhvZEZpbHRlcjo6c2V0RW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgbV9lbmFi
bGVkID0gZW5hYmxlZDsKLSAgICBpZiAoZW5hYmxlZCkKLSAgICAgICAgZ3RrX2ltX2NvbnRleHRf
Zm9jdXNfaW4obV9jb250ZXh0LmdldCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGd0a19pbV9jb250
ZXh0X2ZvY3VzX291dChtX2NvbnRleHQuZ2V0KCkpOwotfQotCi1ib29sIEd0a0lucHV0TWV0aG9k
RmlsdGVyOjpmaWx0ZXJLZXlFdmVudChHZGtFdmVudEtleSogZXZlbnQpCi17Ci0gICAgaWYgKCFj
YW5FZGl0KCkgfHwgIW1fZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuIHNlbmRTaW1wbGVLZXlFdmVu
dChldmVudCk7Ci0KLSAgICBtX3ByZWVkaXRDaGFuZ2VkID0gZmFsc2U7Ci0gICAgbV9maWx0ZXJp
bmdLZXlFdmVudCA9IHRydWU7Ci0KLSAgICB1bnNpZ25lZCBpbnQgbGFzdEZpbHRlcmVkS2V5UHJl
c3NDb2RlV2l0aE5vUmVzdWx0cyA9IG1fbGFzdEZpbHRlcmVkS2V5UHJlc3NDb2RlV2l0aE5vUmVz
dWx0czsKLSAgICBtX2xhc3RGaWx0ZXJlZEtleVByZXNzQ29kZVdpdGhOb1Jlc3VsdHMgPSBHREtf
S0VZX1ZvaWRTeW1ib2w7Ci0KLSAgICBib29sIGZpbHRlcmVkID0gZ3RrX2ltX2NvbnRleHRfZmls
dGVyX2tleXByZXNzKG1fY29udGV4dC5nZXQoKSwgZXZlbnQpOwotICAgIG1fZmlsdGVyaW5nS2V5
RXZlbnQgPSBmYWxzZTsKLQotICAgIGJvb2wganVzdFNlbnRGYWtlS2V5VXAgPSBtX2p1c3RTZW50
RmFrZUtleVVwOwotICAgIG1fanVzdFNlbnRGYWtlS2V5VXAgPSBmYWxzZTsKLSAgICBpZiAoanVz
dFNlbnRGYWtlS2V5VXAgJiYgZXZlbnQtPnR5cGUgPT0gR0RLX0tFWV9SRUxFQVNFKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIFNpbXBsZSBpbnB1dCBtZXRob2RzIHdvcmsgc3VjaCB0
aGF0IGV2ZW4gbm9ybWFsIGtleXN0cm9rZXMgZmlyZSB0aGUKLSAgICAvLyBjb21taXQgc2lnbmFs
LiBXZSBkZXRlY3QgdGhvc2Ugc2l0dWF0aW9ucyBhbmQgdHJlYXQgdGhlbSBhcyBub3JtYWwKLSAg
ICAvLyBrZXkgZXZlbnRzLCBzdXBwbHlpbmcgdGhlIGNvbW1pdCBzdHJpbmcgYXMgdGhlIGtleSBj
aGFyYWN0ZXIuCi0gICAgaWYgKGZpbHRlcmVkICYmICFtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkg
JiYgIW1fcHJlZWRpdENoYW5nZWQgJiYgbV9jb25maXJtZWRDb21wb3NpdGlvbi5sZW5ndGgoKSA9
PSAxKSB7Ci0gICAgICAgIGJvb2wgcmVzdWx0ID0gc2VuZFNpbXBsZUtleUV2ZW50KGV2ZW50LCBt
X2NvbmZpcm1lZENvbXBvc2l0aW9uKTsKLSAgICAgICAgbV9jb25maXJtZWRDb21wb3NpdGlvbiA9
IFN0cmluZygpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIGlmIChmaWx0
ZXJlZCAmJiBldmVudC0+dHlwZSA9PSBHREtfS0VZX1BSRVNTKSB7Ci0gICAgICAgIGlmICghbV9w
cmVlZGl0Q2hhbmdlZCAmJiBtX2NvbmZpcm1lZENvbXBvc2l0aW9uLmlzTnVsbCgpKSB7Ci0gICAg
ICAgICAgICBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkgPSB0cnVlOwotICAgICAgICAgICAgbV9s
YXN0RmlsdGVyZWRLZXlQcmVzc0NvZGVXaXRoTm9SZXN1bHRzID0gZXZlbnQtPmtleXZhbDsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCByZXN1bHQg
PSBzZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzKGV2ZW50KTsKLSAgICAgICAgaWYg
KCFtX2NvbmZpcm1lZENvbXBvc2l0aW9uLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgbV9jb21w
b3NpbmdUZXh0Q3VycmVudGx5ID0gZmFsc2U7Ci0gICAgICAgICAgICBtX2NvbmZpcm1lZENvbXBv
c2l0aW9uID0gU3RyaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICB9Ci0KLSAgICAvLyBJZiB3ZSBwcmV2aW91c2x5IGZpbHRlcmVkIGEga2V5IHByZXNzIGV2ZW50
IGFuZCBpdCB5aWVsZGVkIG5vIHJlc3VsdHMuIFN1cHByZXNzCi0gICAgLy8gdGhlIGNvcnJlc3Bv
bmRpbmcga2V5IHJlbGVhc2UgZXZlbnQgdG8gYXZvaWQgY29uZnVzaW5nIHRoZSB3ZWIgY29udGVu
dC4KLSAgICBpZiAoZXZlbnQtPnR5cGUgPT0gR0RLX0tFWV9SRUxFQVNFICYmIGxhc3RGaWx0ZXJl
ZEtleVByZXNzQ29kZVdpdGhOb1Jlc3VsdHMgPT0gZXZlbnQtPmtleXZhbCkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICAvLyBBdCB0aGlzIHBvaW50IGEga2V5c3Ryb2tlIHdhcyBlaXRoZXI6
Ci0gICAgLy8gMS4gVW5maWx0ZXJlZAotICAgIC8vIDIuIEEgZmlsdGVyZWQga2V5dXAgZXZlbnQu
IEFzIHRoZSBJTUUgY29kZSBpbiBFZGl0b3JDbGllbnQuaCBkb2Vzbid0Ci0gICAgLy8gICAgZXZl
ciBsb29rIGF0IGtleXVwIGV2ZW50cywgd2Ugc2VuZCBhbnkgY29tcG9zaXRpb24gcmVzdWx0cyBi
ZWZvcmUKLSAgICAvLyAgICB0aGUga2V5IGV2ZW50LgotICAgIC8vIEJvdGggbWlnaHQgaGF2ZSBj
b21wb3NpdGlvbiByZXN1bHRzIG9yIG5vdC4KLSAgICAvLwotICAgIC8vIEl0J3MgaW1wb3J0YW50
IHRvIHNlbmQgdGhlIGNvbXBvc2l0aW9uIHJlc3VsdHMgYmVmb3JlIHRoZSBldmVudAotICAgIC8v
IGJlY2F1c2Ugc29tZSBJTSBtb2R1bGVzIG9wZXJhdGUgdGhhdCB3YXkuIEZvciBleGFtcGxlICh0
YWtlbiBmcm9tCi0gICAgLy8gdGhlIENocm9taXVtIHNvdXJjZSksIHRoZSBsYXRpbi1wb3N0IGlu
cHV0IG1ldGhvZCBnaXZlcyB0aGlzIHNlcXVlbmNlCi0gICAgLy8gd2hlbiB5b3UgcHJlc3MgJ2En
IGFuZCB0aGVuIGJhY2tzcGFjZToKLSAgICAvLyAgMS4ga2V5ZG93biAnYScgKGZpbHRlcmVkKQot
ICAgIC8vICAyLiBwcmVlZGl0IGNoYW5nZWQgdG8gImEiCi0gICAgLy8gIDMuIGtleXVwICdhJyAo
dW5maWx0ZXJlZCkKLSAgICAvLyAgNC4ga2V5ZG93biBCYWNrc3BhY2UgKHVuZmlsdGVyZWQpCi0g
ICAgLy8gIDUuIGNvbW1pdCAiYSIKLSAgICAvLyAgNi4gcHJlZWRpdCBlbmQKLSAgICBpZiAoIW1f
Y29uZmlybWVkQ29tcG9zaXRpb24uaXNFbXB0eSgpKQotICAgICAgICBjb25maXJtQ29tcG9zaXRp
b24oKTsKLSAgICBpZiAobV9wcmVlZGl0Q2hhbmdlZCkKLSAgICAgICAgdXBkYXRlUHJlZWRpdCgp
OwotICAgIHJldHVybiBzZW5kU2ltcGxlS2V5RXZlbnQoZXZlbnQpOwotfQotCi12b2lkIEd0a0lu
cHV0TWV0aG9kRmlsdGVyOjpub3RpZnlNb3VzZUJ1dHRvblByZXNzKCkKLXsKLSAgICAvLyBDb25m
aXJtaW5nIHRoZSBjb21wb3NpdGlvbiBtYXkgdHJpZ2dlciBhIHNlbGVjdGlvbiBjaGFuZ2UsIHdo
aWNoCi0gICAgLy8gbWlnaHQgdHJpZ2dlciBmdXJ0aGVyIHVud2FudGVkIGFjdGlvbnMgb24gdGhl
IGNvbnRleHQsIHNvIHdlIHByZXZlbnQKLSAgICAvLyB0aGF0IGJ5IHNldHRpbmcgbV9jb21wb3Np
bmdUZXh0Q3VycmVudGx5IHRvIGZhbHNlLgotICAgIGlmIChtX2NvbXBvc2luZ1RleHRDdXJyZW50
bHkpCi0gICAgICAgIGNvbmZpcm1DdXJyZW50Q29tcG9zaXRpb24oKTsKLSAgICBtX2NvbXBvc2lu
Z1RleHRDdXJyZW50bHkgPSBmYWxzZTsKLSAgICBjYW5jZWxDb250ZXh0Q29tcG9zaXRpb24oKTsK
LX0KLQotdm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6cmVzZXRDb250ZXh0KCkKLXsKLQotICAg
IC8vIFdlIGFsd2F5cyBjYW5jZWwgdGhlIGN1cnJlbnQgV2ViQ29yZSBjb21wb3NpdGlvbiBoZXJl
LCBpbiBjYXNlIHRoZQotICAgIC8vIGNvbXBvc2l0aW9uIHdhcyBzZXQgb3V0c2lkZSB0aGUgR1RL
KyBJTUUgcGF0aCAodmlhIGEgc2NyaXB0LCBmb3IKLSAgICAvLyBpbnN0YW5jZSkgYW5kIHdlIGFy
ZW4ndCB0cmFja2luZyBpdC4KLSAgICBjYW5jZWxDdXJyZW50Q29tcG9zaXRpb24oKTsKLQotICAg
IGlmICghbV9jb21wb3NpbmdUZXh0Q3VycmVudGx5KQotICAgICAgICByZXR1cm47Ci0gICAgbV9j
b21wb3NpbmdUZXh0Q3VycmVudGx5ID0gZmFsc2U7Ci0gICAgY2FuY2VsQ29udGV4dENvbXBvc2l0
aW9uKCk7Ci19Ci0KLXZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OmNhbmNlbENvbnRleHRDb21w
b3NpdGlvbigpCi17Ci0gICAgbV9wcmV2ZW50TmV4dENvbW1pdCA9ICFtX3ByZWVkaXQuaXNFbXB0
eSgpOwotCi0gICAgZ3RrX2ltX2NvbnRleHRfcmVzZXQobV9jb250ZXh0LmdldCgpKTsKLQotICAg
IG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSA9IGZhbHNlOwotICAgIG1fanVzdFNlbnRGYWtlS2V5
VXAgPSBmYWxzZTsKLSAgICBtX3ByZWVkaXQgPSBTdHJpbmcoKTsKLSAgICBtX2NvbmZpcm1lZENv
bXBvc2l0aW9uID0gU3RyaW5nKCk7Ci19Ci0KLXZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6Om5v
dGlmeUZvY3VzZWRJbigpCi17Ci0gICAgbV9lbmFibGVkID0gdHJ1ZTsKLSAgICBndGtfaW1fY29u
dGV4dF9mb2N1c19pbihtX2NvbnRleHQuZ2V0KCkpOwotfQotCi12b2lkIEd0a0lucHV0TWV0aG9k
RmlsdGVyOjpub3RpZnlGb2N1c2VkT3V0KCkKLXsKLSAgICBpZiAoIW1fZW5hYmxlZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSkKLSAgICAgICAg
Y29uZmlybUN1cnJlbnRDb21wb3NpdGlvbigpOwotICAgIGNhbmNlbENvbnRleHRDb21wb3NpdGlv
bigpOwotICAgIGd0a19pbV9jb250ZXh0X2ZvY3VzX291dChtX2NvbnRleHQuZ2V0KCkpOwotICAg
IG1fZW5hYmxlZCA9IGZhbHNlOwotfQotCi12b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpjb25m
aXJtQ29tcG9zaXRpb24oKQotewotICAgIGNvbmZpcm1Db21wb3NpdGlvblRleHQobV9jb25maXJt
ZWRDb21wb3NpdGlvbik7Ci0gICAgbV9jb25maXJtZWRDb21wb3NpdGlvbiA9IFN0cmluZygpOwot
fQotCi12b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjp1cGRhdGVQcmVlZGl0KCkKLXsKLSAgICBz
ZXRQcmVlZGl0KG1fcHJlZWRpdCwgbV9jdXJzb3JPZmZzZXQpOwotICAgIG1fcHJlZWRpdENoYW5n
ZWQgPSBmYWxzZTsKLX0KLQotdm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6c2VuZENvbXBvc2l0
aW9uQW5kUHJlZWRpdFdpdGhGYWtlS2V5RXZlbnRzKFJlc3VsdHNUb1NlbmQgcmVzdWx0c1RvU2Vu
ZCkKLXsKLSAgICBHVW5pcXVlUHRyPEdka0V2ZW50PiBldmVudChnZGtfZXZlbnRfbmV3KEdES19L
RVlfUFJFU1MpKTsKLSAgICBldmVudC0+a2V5LnRpbWUgPSBHREtfQ1VSUkVOVF9USU1FOwotICAg
IGV2ZW50LT5rZXkua2V5dmFsID0gZ0NvbXBvc2l0aW9uRXZlbnRLZXlDb2RlOwotICAgIHNlbmRL
ZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMoJmV2ZW50LT5rZXksIHJlc3VsdHNUb1NlbmQs
IEV2ZW50RmFrZWQpOwotCi0gICAgbV9jb25maXJtZWRDb21wb3NpdGlvbiA9IFN0cmluZygpOwot
ICAgIGlmIChyZXN1bHRzVG9TZW5kICYgQ29tcG9zaXRpb24pCi0gICAgICAgIG1fY29tcG9zaW5n
VGV4dEN1cnJlbnRseSA9IGZhbHNlOwotCi0gICAgZXZlbnQtPnR5cGUgPSBHREtfS0VZX1JFTEVB
U0U7Ci0gICAgc2VuZFNpbXBsZUtleUV2ZW50KCZldmVudC0+a2V5LCBTdHJpbmcoKSwgRXZlbnRG
YWtlZCk7Ci0gICAgbV9qdXN0U2VudEZha2VLZXlVcCA9IHRydWU7Ci19Ci0KLXZvaWQgR3RrSW5w
dXRNZXRob2RGaWx0ZXI6OmhhbmRsZUNvbW1pdChjb25zdCBjaGFyKiBjb21wb3NpdGlvblN0cmlu
ZykKLXsKLSAgICBpZiAobV9wcmV2ZW50TmV4dENvbW1pdCkgewotICAgICAgICBtX3ByZXZlbnRO
ZXh0Q29tbWl0ID0gZmFsc2U7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1f
ZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb25maXJtZWRDb21wb3NpdGlvbi5h
cHBlbmQoU3RyaW5nOjpmcm9tVVRGOChjb21wb3NpdGlvblN0cmluZykpOwotCi0gICAgLy8gSWYg
dGhlIGNvbW1pdCB3YXMgdHJpZ2dlcmVkIG91dHNpZGUgb2YgYSBrZXkgZXZlbnQsIGp1c3Qgc2Vu
ZAotICAgIC8vIHRoZSBJTUUgZXZlbnQgbm93LiBJZiB3ZSBhcmUgaGFuZGxpbmcgYSBrZXkgZXZl
bnQsIHdlJ2xsIGRlY2lkZQotICAgIC8vIGxhdGVyIGhvdyB0byBoYW5kbGUgdGhpcy4KLSAgICBp
ZiAoIW1fZmlsdGVyaW5nS2V5RXZlbnQpCi0gICAgICAgIHNlbmRDb21wb3NpdGlvbkFuZFByZWVk
aXRXaXRoRmFrZUtleUV2ZW50cyhDb21wb3NpdGlvbik7Ci19Ci0KLXZvaWQgR3RrSW5wdXRNZXRo
b2RGaWx0ZXI6OmhhbmRsZVByZWVkaXRTdGFydCgpCi17Ci0gICAgaWYgKG1fcHJldmVudE5leHRD
b21taXQgfHwgIW1fZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fcHJlZWRpdENoYW5n
ZWQgPSB0cnVlOwotICAgIG1fcHJlZWRpdCA9ICIiOwotfQotCi12b2lkIEd0a0lucHV0TWV0aG9k
RmlsdGVyOjpoYW5kbGVQcmVlZGl0Q2hhbmdlZCgpCi17Ci0gICAgaWYgKCFtX2VuYWJsZWQpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEdVbmlxdWVPdXRQdHI8Z2NoYXI+IG5ld1ByZWVkaXQ7Ci0g
ICAgZ3RrX2ltX2NvbnRleHRfZ2V0X3ByZWVkaXRfc3RyaW5nKG1fY29udGV4dC5nZXQoKSwgJm5l
d1ByZWVkaXQub3V0UHRyKCksIDAsICZtX2N1cnNvck9mZnNldCk7Ci0KLSAgICBpZiAobV9wcmV2
ZW50TmV4dENvbW1pdCkgewotICAgICAgICBpZiAoc3RybGVuKG5ld1ByZWVkaXQuZ2V0KCkpID4g
MCkKLSAgICAgICAgICAgIG1fcHJldmVudE5leHRDb21taXQgPSBmYWxzZTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fcHJlZWRpdCA9IFN0cmluZzo6
ZnJvbVVURjgobmV3UHJlZWRpdC5nZXQoKSk7Ci0gICAgbV9jdXJzb3JPZmZzZXQgPSBzdGQ6Om1p
bihzdGQ6Om1heChtX2N1cnNvck9mZnNldCwgMCksIHN0YXRpY19jYXN0PGludD4obV9wcmVlZGl0
Lmxlbmd0aCgpKSk7Ci0KLSAgICBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkgPSAhbV9wcmVlZGl0
LmlzRW1wdHkoKTsKLSAgICBtX3ByZWVkaXRDaGFuZ2VkID0gdHJ1ZTsKLQotICAgIGlmICghbV9m
aWx0ZXJpbmdLZXlFdmVudCkKLSAgICAgICAgc2VuZENvbXBvc2l0aW9uQW5kUHJlZWRpdFdpdGhG
YWtlS2V5RXZlbnRzKFByZWVkaXQpOwotfQotCi12b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpo
YW5kbGVQcmVlZGl0RW5kKCkKLXsKLSAgICBpZiAobV9wcmV2ZW50TmV4dENvbW1pdCB8fCAhbV9l
bmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3ByZWVkaXQgPSBTdHJpbmcoKTsKLSAg
ICBtX2N1cnNvck9mZnNldCA9IDA7Ci0gICAgbV9wcmVlZGl0Q2hhbmdlZCA9IHRydWU7Ci0KLSAg
ICBpZiAoIW1fZmlsdGVyaW5nS2V5RXZlbnQpCi0gICAgICAgIHVwZGF0ZVByZWVkaXQoKTsKLX0K
LQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0
aG9kRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RG
aWx0ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU0ODI1My4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIuaAor
KysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
SWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKi8KLQotI2lmbmRlZiBHdGtJbnB1dE1ldGhvZEZpbHRlcl9oCi0jZGVmaW5lIEd0a0lu
cHV0TWV0aG9kRmlsdGVyX2gKLQotI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKLSNpbmNsdWRlICJJ
bnRSZWN0LmgiCi0jaW5jbHVkZSA8Z2RrL2dkay5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgotCi10eXBlZGVmIHN0cnVjdCBfR3RrSU1Db250ZXh0IEd0a0lNQ29udGV4dDsKLXR5
cGVkZWYgc3RydWN0IF9HdGtXaWRnZXQgR3RrV2lkZ2V0OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIEd0a0lucHV0TWV0aG9kRmlsdGVyIHsKLXB1YmxpYzoKLSAgICBHdGtJbnB1dE1l
dGhvZEZpbHRlcigpOwotICAgIH5HdGtJbnB1dE1ldGhvZEZpbHRlcigpOwotCi0gICAgYm9vbCBm
aWx0ZXJLZXlFdmVudChHZGtFdmVudEtleSopOwotICAgIHZvaWQgbm90aWZ5TW91c2VCdXR0b25Q
cmVzcygpOwotICAgIHZvaWQgbm90aWZ5Rm9jdXNlZEluKCk7Ci0gICAgdm9pZCBub3RpZnlGb2N1
c2VkT3V0KCk7Ci0gICAgdm9pZCByZXNldENvbnRleHQoKTsKLSAgICB2b2lkIHNldEVuYWJsZWQo
Ym9vbCk7Ci0KLSAgICB2b2lkIGhhbmRsZUNvbW1pdChjb25zdCBjaGFyKiBjb21wb3NpdGlvblN0
cmluZyk7Ci0gICAgdm9pZCBoYW5kbGVQcmVlZGl0Q2hhbmdlZCgpOwotICAgIHZvaWQgaGFuZGxl
UHJlZWRpdFN0YXJ0KCk7Ci0gICAgdm9pZCBoYW5kbGVQcmVlZGl0RW5kKCk7Ci0KLSAgICB2b2lk
IGNvbmZpcm1Db21wb3NpdGlvbigpOwotICAgIHZvaWQgY2FuY2VsQ29udGV4dENvbXBvc2l0aW9u
KCk7Ci0gICAgdm9pZCB1cGRhdGVQcmVlZGl0KCk7Ci0gICAgdm9pZCBzZXRDdXJzb3JSZWN0KGNv
bnN0IEludFJlY3QmIGxvY2F0aW9uKTsKLQotICAgIEd0a0lNQ29udGV4dCogY29udGV4dCgpIHsg
cmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQotCi0gICAgZW51bSBFdmVudEZha2VkRm9yQ29tcG9z
aXRpb24gewotICAgICAgICBFdmVudEZha2VkLAotICAgICAgICBFdmVudE5vdEZha2VkCi0gICAg
fTsKLQotcHJvdGVjdGVkOgotICAgIGVudW0gUmVzdWx0c1RvU2VuZCB7Ci0gICAgICAgIFByZWVk
aXQgPSAxIDw8IDEsCi0gICAgICAgIENvbXBvc2l0aW9uID0gMSA8PCAyLAotICAgICAgICBQcmVl
ZGl0QW5kQ29tcG9zaXRpb24gPSBQcmVlZGl0ICsgQ29tcG9zaXRpb24KLSAgICB9OwotCi0gICAg
dm9pZCBzZXRXaWRnZXQoR3RrV2lkZ2V0Kik7Ci0gICAgdmlydHVhbCBib29sIGNhbkVkaXQoKSA9
IDA7Ci0gICAgdmlydHVhbCBib29sIHNlbmRTaW1wbGVLZXlFdmVudChHZGtFdmVudEtleSosIFdU
Rjo6U3RyaW5nIGV2ZW50U3RyaW5nID0gU3RyaW5nKCksIEV2ZW50RmFrZWRGb3JDb21wb3NpdGlv
biA9IEV2ZW50Tm90RmFrZWQpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc2VuZEtleUV2ZW50V2l0
aENvbXBvc2l0aW9uUmVzdWx0cyhHZGtFdmVudEtleSosIFJlc3VsdHNUb1NlbmQgPSBQcmVlZGl0
QW5kQ29tcG9zaXRpb24sIEV2ZW50RmFrZWRGb3JDb21wb3NpdGlvbiA9IEV2ZW50Tm90RmFrZWQp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY29uZmlybUNvbXBvc2l0aW9uVGV4dChTdHJpbmcgY29t
cG9zaXRpb24pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY29uZmlybUN1cnJlbnRDb21wb3NpdGlv
bigpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsQ3VycmVudENvbXBvc2l0aW9uKCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVlZGl0KFN0cmluZywgaW50IGN1cnNvck9mZnNldCkg
PSAwOwotCi0gICAgV1RGOjpTdHJpbmcgbV9jb25maXJtZWRDb21wb3NpdGlvbjsKLSAgICBXVEY6
OlN0cmluZyBtX3ByZWVkaXQ7Ci0gICAgaW50IG1fY3Vyc29yT2Zmc2V0OwotCi1wcml2YXRlOgot
ICAgIHZvaWQgc2VuZENvbXBvc2l0aW9uQW5kUHJlZWRpdFdpdGhGYWtlS2V5RXZlbnRzKFJlc3Vs
dHNUb1NlbmQpOwotCi0gICAgR1JlZlB0cjxHdGtJTUNvbnRleHQ+IG1fY29udGV4dDsKLSAgICBH
dGtXaWRnZXQqIG1fd2lkZ2V0OwotICAgIGJvb2wgbV9lbmFibGVkOwotICAgIGJvb2wgbV9jb21w
b3NpbmdUZXh0Q3VycmVudGx5OwotICAgIGJvb2wgbV9maWx0ZXJpbmdLZXlFdmVudDsKLSAgICBi
b29sIG1fcHJlZWRpdENoYW5nZWQ7Ci0gICAgYm9vbCBtX3ByZXZlbnROZXh0Q29tbWl0OwotICAg
IGJvb2wgbV9qdXN0U2VudEZha2VLZXlVcDsKLSAgICB1bnNpZ25lZCBpbnQgbV9sYXN0RmlsdGVy
ZWRLZXlQcmVzc0NvZGVXaXRoTm9SZXN1bHRzOwotICAgIEludFBvaW50IG1fbGFzdENhcmVMb2Nh
dGlvbjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEd0a0lucHV0
TWV0aG9kRmlsdGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA0NTU5ZjM2Li42OTYzNDRlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CkBAIC0xLDUgKzEsNjQgQEAKIDIwMTQtMTAtMjAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dh
cmNpYUBpZ2FsaWEuY29tPgogCisgICAgICAgIFtHVEtdIE1vdmUgR3RrSW5wdXRNZXRob2RGaWx0
ZXIgZnJvbSBQbGF0Zm9ybSB0byBXZWJLaXQyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzc4ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBNZXJnZSBXZWJWaWV3QmFzZUlucHV0TWV0aG9kRmlsdGVyIGFu
ZCBHdGtJbnB1dE1ldGhvZEZpbHRlciBpbnRvIGEKKyAgICAgICAgc2luZ2xlIGNsYXNzIElucHV0
TWV0aG9kRmlsdGVyLiBUaGUgY29kZSBpcyBtb3N0bHkgdGhlIHNhbWUsIGJ1dAorICAgICAgICBp
bnN0ZWFkIG9mIGhhdmluZyBhIHNldFdlYlZpZXcgbWV0aG9kIG9ubHkgdG8gZ2V0IHRoZSBXZWJQ
YWdlUHJveHksCisgICAgICAgIGl0IGhhcyBhIHNldFBhZ2UgbWV0aG9kIHRoYXQgcGFzc2VzIHRo
ZSBXZWJQYWdlUHJveHkuIFRoZSBHdGtJTUNvbnRleHQKKyAgICAgICAgY2xpZW50IHdpbmRvdyBp
cyBzZXQgYnkgdGhlIFdlYlZpZXcgd2hlbiBpdCdzIHJlYWxpemVkL3VucmVhbGl6ZWQuCisKKyAg
ICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBTaGFyZWQvTmF0aXZlV2ViS2V5
Ym9hcmRFdmVudC5oOgorICAgICAgICAqIFNoYXJlZC9ndGsvTmF0aXZlV2ViS2V5Ym9hcmRFdmVu
dEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5hdGl2ZVdlYktleWJvYXJkRXZlbnQ6Ok5hdGl2
ZVdlYktleWJvYXJkRXZlbnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXdCYXNlLmNwcDoKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlUmVhbGl6ZSk6CisgICAg
ICAgICh3ZWJraXRXZWJWaWV3QmFzZVVucmVhbGl6ZSk6CisgICAgICAgICh3ZWJraXRfd2ViX3Zp
ZXdfYmFzZV9jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlQ3JlYXRlV2Vi
UGFnZSk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUVudGVyRnVsbFNjcmVlbik6IERlbGV0
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViVmlld0Jhc2VJbnB1dE1ldGhvZEZp
bHRlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViVmlld0Jh
c2VJbnB1dE1ldGhvZEZpbHRlci5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsv
SW5wdXRNZXRob2RGaWx0ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6SW5wdXRNZXRo
b2RGaWx0ZXI6OmhhbmRsZUNvbW1pdENhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6SW5wdXRN
ZXRob2RGaWx0ZXI6OmhhbmRsZVByZWVkaXRTdGFydENhbGxiYWNrKToKKyAgICAgICAgKFdlYktp
dDo6SW5wdXRNZXRob2RGaWx0ZXI6OmhhbmRsZVByZWVkaXRDaGFuZ2VkQ2FsbGJhY2spOgorICAg
ICAgICAoV2ViS2l0OjpJbnB1dE1ldGhvZEZpbHRlcjo6aGFuZGxlUHJlZWRpdEVuZENhbGxiYWNr
KToKKyAgICAgICAgKFdlYktpdDo6SW5wdXRNZXRob2RGaWx0ZXI6OklucHV0TWV0aG9kRmlsdGVy
KToKKyAgICAgICAgKFdlYktpdDo6SW5wdXRNZXRob2RGaWx0ZXI6On5JbnB1dE1ldGhvZEZpbHRl
cik6CisgICAgICAgIChXZWJLaXQ6OklucHV0TWV0aG9kRmlsdGVyOjpzZXRFbmFibGVkKToKKyAg
ICAgICAgKFdlYktpdDo6SW5wdXRNZXRob2RGaWx0ZXI6OnNldEN1cnNvclJlY3QpOgorICAgICAg
ICAoV2ViS2l0OjpJbnB1dE1ldGhvZEZpbHRlcjo6aGFuZGxlS2V5Ym9hcmRFdmVudCk6CisgICAg
ICAgIChXZWJLaXQ6OklucHV0TWV0aG9kRmlsdGVyOjpoYW5kbGVLZXlib2FyZEV2ZW50V2l0aENv
bXBvc2l0aW9uUmVzdWx0cyk6CisgICAgICAgIChXZWJLaXQ6OklucHV0TWV0aG9kRmlsdGVyOjpm
aWx0ZXJLZXlFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OklucHV0TWV0aG9kRmlsdGVyOjpjb25m
aXJtQ29tcG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0OjpJbnB1dE1ldGhvZEZpbHRlcjo6dXBk
YXRlUHJlZWRpdCk6CisgICAgICAgIChXZWJLaXQ6OklucHV0TWV0aG9kRmlsdGVyOjpub3RpZnlG
b2N1c2VkSW4pOgorICAgICAgICAoV2ViS2l0OjpJbnB1dE1ldGhvZEZpbHRlcjo6bm90aWZ5Rm9j
dXNlZE91dCk6CisgICAgICAgIChXZWJLaXQ6OklucHV0TWV0aG9kRmlsdGVyOjpub3RpZnlNb3Vz
ZUJ1dHRvblByZXNzKToKKyAgICAgICAgKFdlYktpdDo6SW5wdXRNZXRob2RGaWx0ZXI6OmNvbmZp
cm1DdXJyZW50Q29tcG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0OjpJbnB1dE1ldGhvZEZpbHRl
cjo6Y2FuY2VsQ29udGV4dENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6SW5wdXRNZXRo
b2RGaWx0ZXI6OnNlbmRDb21wb3NpdGlvbkFuZFByZWVkaXRXaXRoRmFrZUtleUV2ZW50cyk6Cisg
ICAgICAgIChXZWJLaXQ6OklucHV0TWV0aG9kRmlsdGVyOjpoYW5kbGVDb21taXQpOgorICAgICAg
ICAoV2ViS2l0OjpJbnB1dE1ldGhvZEZpbHRlcjo6aGFuZGxlUHJlZWRpdFN0YXJ0KToKKyAgICAg
ICAgKFdlYktpdDo6SW5wdXRNZXRob2RGaWx0ZXI6OmhhbmRsZVByZWVkaXRDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYktpdDo6SW5wdXRNZXRob2RGaWx0ZXI6OmhhbmRsZVByZWVkaXRFbmQpOgorICAg
ICAgICAoV2ViS2l0OjpJbnB1dE1ldGhvZEZpbHRlcjo6bG9nSGFuZGxlS2V5Ym9hcmRFdmVudEZv
clRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpJbnB1dE1ldGhvZEZpbHRlcjo6bG9nSGFuZGxl
S2V5Ym9hcmRFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHNGb3JUZXN0aW5nKToKKyAgICAgICAg
KFdlYktpdDo6SW5wdXRNZXRob2RGaWx0ZXI6OmxvZ0NvbmZpcm1Db21wb3NpdGlvbkZvclRlc3Rp
bmcpOgorICAgICAgICAoV2ViS2l0OjpJbnB1dE1ldGhvZEZpbHRlcjo6bG9nU2V0UHJlZWRpdEZv
clRlc3RpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvSW5wdXRNZXRob2RGaWx0ZXIuaDog
QWRkZWQuCisgICAgICAgIChXZWJLaXQ6OklucHV0TWV0aG9kRmlsdGVyOjpjb250ZXh0KToKKyAg
ICAgICAgKFdlYktpdDo6SW5wdXRNZXRob2RGaWx0ZXI6OnNldFBhZ2UpOgorICAgICAgICAoV2Vi
S2l0OjpJbnB1dE1ldGhvZEZpbHRlcjo6c2V0VGVzdGluZ01vZGUpOgorICAgICAgICAoV2ViS2l0
OjpJbnB1dE1ldGhvZEZpbHRlcjo6ZXZlbnRzKToKKworMjAxNC0xMC0yMCAgQ2FybG9zIEdhcmNp
YSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKICAgICAgICAgW0dUS10gTW92ZSBjbGlj
ayBjb3VudGVyIGxvZ2ljIGJhY2sgdG8gV2ViS2l0V2ViVmlld0Jhc2UKICAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzY4NQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
R1RLLmNtYWtlCmluZGV4IDUyZTU5ZDYuLmRlNTc3Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNt
YWtlCkBAIC0yMjgsOCArMjI4LDYgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAg
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2luZG93UHJvcGVydGllcy5jcHAKICAgICBVSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXaW5kb3dQcm9wZXJ0aWVzLmgKICAgICBVSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXaW5kb3dQcm9wZXJ0aWVzUHJpdmF0ZS5oCi0gICAgVUlQcm9jZXNzL0FQSS9ndGsv
V2ViVmlld0Jhc2VJbnB1dE1ldGhvZEZpbHRlci5jcHAKLSAgICBVSVByb2Nlc3MvQVBJL2d0ay9X
ZWJWaWV3QmFzZUlucHV0TWV0aG9kRmlsdGVyLmgKICAgICBVSVByb2Nlc3MvQVBJL2d0ay93ZWJr
aXQyLmgKIAogICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvZ3RrL1dlYkluc3BlY3RvclNl
cnZlckd0ay5jcHAKQEAgLTI1NCw2ICsyNTIsNyBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJD
RVMKICAgICBVSVByb2Nlc3MvZ3RrL0RyYWdBbmREcm9wSGFuZGxlci5jcHAKICAgICBVSVByb2Nl
c3MvZ3RrL0V4cGVyaW1lbnRhbEZlYXR1cmVzLmNwcAogICAgIFVJUHJvY2Vzcy9ndGsvR2VzdHVy
ZUNvbnRyb2xsZXIuY3BwCisgICAgVUlQcm9jZXNzL2d0ay9JbnB1dE1ldGhvZEZpbHRlci5jcHAK
ICAgICBVSVByb2Nlc3MvZ3RrL1RleHRDaGVja2VyR3RrLmNwcAogICAgIFVJUHJvY2Vzcy9ndGsv
V2ViQ29udGV4dEd0ay5jcHAKICAgICBVSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRNZW51UHJveHlH
dGsuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2ViS2V5Ym9h
cmRFdmVudC5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL05hdGl2ZVdlYktleWJvYXJkRXZlbnQu
aAppbmRleCAyNzczMTcwLi4wMDU5N2QzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9O
YXRpdmVXZWJLZXlib2FyZEV2ZW50LmgKQEAgLTQ0LDkgKzQ0LDkgQEAgc3RydWN0IEtleXByZXNz
Q29tbWFuZDsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUgIklucHV0TWV0
aG9kRmlsdGVyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Db21wb3NpdGlvblJlc3VsdHMuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0dVbmlxdWVQdHJHdGsuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0d0a0lu
cHV0TWV0aG9kRmlsdGVyLmg+CiB0eXBlZGVmIHVuaW9uIF9HZGtFdmVudCBHZGtFdmVudDsKICNl
bmRpZgogCkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKICAgICBOYXRpdmVXZWJLZXlib2FyZEV2
ZW50KE5TRXZlbnQgKiwgYm9vbCBoYW5kbGVkQnlJbnB1dE1ldGhvZCwgY29uc3QgVmVjdG9yPFdl
YkNvcmU6OktleXByZXNzQ29tbWFuZD4mKTsKICNlbGlmIFBMQVRGT1JNKEdUSykKICAgICBOYXRp
dmVXZWJLZXlib2FyZEV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmKTsKLSAgICBO
YXRpdmVXZWJLZXlib2FyZEV2ZW50KEdka0V2ZW50KiwgY29uc3QgV2ViQ29yZTo6Q29tcG9zaXRp
b25SZXN1bHRzJiwgV2ViQ29yZTo6R3RrSW5wdXRNZXRob2RGaWx0ZXI6OkV2ZW50RmFrZWRGb3JD
b21wb3NpdGlvbik7CisgICAgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChHZGtFdmVudCosIGNvbnN0
IFdlYkNvcmU6OkNvbXBvc2l0aW9uUmVzdWx0cyYsIElucHV0TWV0aG9kRmlsdGVyOjpFdmVudEZh
a2VkRm9yQ29tcG9zaXRpb24pOwogI2VsaWYgUExBVEZPUk0oRUZMKQogICAgIE5hdGl2ZVdlYktl
eWJvYXJkRXZlbnQoY29uc3QgRXZhc19FdmVudF9LZXlfRG93biosIGJvb2wpOwogICAgIE5hdGl2
ZVdlYktleWJvYXJkRXZlbnQoY29uc3QgRXZhc19FdmVudF9LZXlfVXAqKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudEd0ay5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYktleWJvYXJkRXZlbnRHdGsuY3Bw
CmluZGV4IDQyNGUwYjMuLjdmZGFjZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9ndGsvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL2d0ay9OYXRpdmVXZWJLZXlib2FyZEV2ZW50R3RrLmNwcApAQCAtMzUsMTEgKzM1LDEx
IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotTmF0
aXZlV2ViS2V5Ym9hcmRFdmVudDo6TmF0aXZlV2ViS2V5Ym9hcmRFdmVudChHZGtFdmVudCogZXZl
bnQsIGNvbnN0IFdlYkNvcmU6OkNvbXBvc2l0aW9uUmVzdWx0cyYgY29tcG9zaXRpb25SZXN1bHRz
LCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6RXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uIGZha2VkKQor
TmF0aXZlV2ViS2V5Ym9hcmRFdmVudDo6TmF0aXZlV2ViS2V5Ym9hcmRFdmVudChHZGtFdmVudCog
ZXZlbnQsIGNvbnN0IFdlYkNvcmU6OkNvbXBvc2l0aW9uUmVzdWx0cyYgY29tcG9zaXRpb25SZXN1
bHRzLCBJbnB1dE1ldGhvZEZpbHRlcjo6RXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uIGZha2VkKQog
ICAgIDogV2ViS2V5Ym9hcmRFdmVudChXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYktleWJvYXJk
RXZlbnQoZXZlbnQsIGNvbXBvc2l0aW9uUmVzdWx0cykpCiAgICAgLCBtX25hdGl2ZUV2ZW50KGdk
a19ldmVudF9jb3B5KGV2ZW50KSkKICAgICAsIG1fY29tcG9zaXRpb25SZXN1bHRzKGNvbXBvc2l0
aW9uUmVzdWx0cykKLSAgICAsIG1fZmFrZUV2ZW50Rm9yQ29tcG9zaXRpb24oZmFrZWQgPT0gR3Rr
SW5wdXRNZXRob2RGaWx0ZXI6OkV2ZW50RmFrZWQpCisgICAgLCBtX2Zha2VFdmVudEZvckNvbXBv
c2l0aW9uKGZha2VkID09IElucHV0TWV0aG9kRmlsdGVyOjpFdmVudEZha2VkKQogewogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
QmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
QmFzZS5jcHAKaW5kZXggNDI1NWU2OS4uNmMwNzkzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcApAQCAtMzAsNiAr
MzAsNyBAQAogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlLmgiCiAKICNpbmNsdWRlICJEcmF3
aW5nQXJlYVByb3h5SW1wbC5oIgorI2luY2x1ZGUgIklucHV0TWV0aG9kRmlsdGVyLmgiCiAjaW5j
bHVkZSAiTmF0aXZlV2ViTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIk5hdGl2ZVdlYldoZWVsRXZl
bnQuaCIKICNpbmNsdWRlICJQYWdlQ2xpZW50SW1wbC5oIgpAQCAtNDYsNyArNDcsNiBAQAogI2lu
Y2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgiCiAjaW5j
bHVkZSAiV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuaCIKLSNpbmNsdWRlICJXZWJWaWV3
QmFzZUlucHV0TWV0aG9kRmlsdGVyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9DYWlyb1V0aWxpdGll
cy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR1VuaXF1ZVB0ckd0ay5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvR3RrVXRpbGl0aWVzLmg+CkBAIC0xMDUsNyArMTA1LDcgQEAgc3RydWN0IF9XZWJLaXRXZWJW
aWV3QmFzZVByaXZhdGUgewogICAgIHVuc2lnbmVkIGluc3BlY3RvclZpZXdTaXplOwogICAgIEdV
bmlxdWVQdHI8R2RrRXZlbnQ+IGNvbnRleHRNZW51RXZlbnQ7CiAgICAgV2ViQ29udGV4dE1lbnVQ
cm94eUd0ayogYWN0aXZlQ29udGV4dE1lbnVQcm94eTsKLSAgICBXZWJWaWV3QmFzZUlucHV0TWV0
aG9kRmlsdGVyIGlucHV0TWV0aG9kRmlsdGVyOworICAgIElucHV0TWV0aG9kRmlsdGVyIGlucHV0
TWV0aG9kRmlsdGVyOwogICAgIFRvdWNoRXZlbnRzTWFwIHRvdWNoRXZlbnRzOwogCiAgICAgR3Rr
V2luZG93KiB0b3BsZXZlbE9uU2NyZWVuV2luZG93OwpAQCAtMzAzLDExICszMDMsMjEgQEAgc3Rh
dGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VSZWFsaXplKEd0a1dpZGdldCogd2lkZ2V0KQogICAg
IGd0a19zdHlsZV9jb250ZXh0X3NldF9iYWNrZ3JvdW5kKGd0a193aWRnZXRfZ2V0X3N0eWxlX2Nv
bnRleHQod2lkZ2V0KSwgd2luZG93KTsKIAogICAgIFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3
ID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KTsKKyAgICBndGtfaW1fY29udGV4dF9zZXRf
Y2xpZW50X3dpbmRvdyh3ZWJWaWV3LT5wcml2LT5pbnB1dE1ldGhvZEZpbHRlci5jb250ZXh0KCks
IHdpbmRvdyk7CisKICAgICBHdGtXaWRnZXQqIHRvcGxldmVsID0gZ3RrX3dpZGdldF9nZXRfdG9w
bGV2ZWwod2lkZ2V0KTsKICAgICBpZiAod2lkZ2V0SXNPbnNjcmVlblRvcGxldmVsV2luZG93KHRv
cGxldmVsKSkKICAgICAgICAgd2Via2l0V2ViVmlld0Jhc2VTZXRUb3BsZXZlbE9uU2NyZWVuV2lu
ZG93KHdlYlZpZXcsIEdUS19XSU5ET1codG9wbGV2ZWwpKTsKIH0KIAorc3RhdGljIHZvaWQgd2Vi
a2l0V2ViVmlld0Jhc2VVbnJlYWxpemUoR3RrV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgV2ViS2l0
V2ViVmlld0Jhc2UqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpOworICAg
IGd0a19pbV9jb250ZXh0X3NldF9jbGllbnRfd2luZG93KHdlYlZpZXctPnByaXYtPmlucHV0TWV0
aG9kRmlsdGVyLmNvbnRleHQoKSwgbnVsbHB0cik7CisKKyAgICBHVEtfV0lER0VUX0NMQVNTKHdl
YmtpdF93ZWJfdmlld19iYXNlX3BhcmVudF9jbGFzcyktPnVucmVhbGl6ZSh3aWRnZXQpOworfQor
CiBzdGF0aWMgYm9vbCB3ZWJraXRXZWJWaWV3Q2hpbGRJc0ludGVybmFsV2lkZ2V0KFdlYktpdFdl
YlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSwgR3RrV2lkZ2V0KiB3aWRnZXQpCiB7CiAgICAgV2ViS2l0
V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7CkBAIC0xMDE1LDYg
KzEwMjUsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfYmFzZV9jbGFzc19pbml0KFdl
YktpdFdlYlZpZXdCYXNlQ2xhc3MqIHdlYmtpdFdlYlZpZQogewogICAgIEd0a1dpZGdldENsYXNz
KiB3aWRnZXRDbGFzcyA9IEdUS19XSURHRVRfQ0xBU1Mod2Via2l0V2ViVmlld0Jhc2VDbGFzcyk7
CiAgICAgd2lkZ2V0Q2xhc3MtPnJlYWxpemUgPSB3ZWJraXRXZWJWaWV3QmFzZVJlYWxpemU7Cisg
ICAgd2lkZ2V0Q2xhc3MtPnVucmVhbGl6ZSA9IHdlYmtpdFdlYlZpZXdCYXNlVW5yZWFsaXplOwog
ICAgIHdpZGdldENsYXNzLT5kcmF3ID0gd2Via2l0V2ViVmlld0Jhc2VEcmF3OwogICAgIHdpZGdl
dENsYXNzLT5zaXplX2FsbG9jYXRlID0gd2Via2l0V2ViVmlld0Jhc2VTaXplQWxsb2NhdGU7CiAg
ICAgd2lkZ2V0Q2xhc3MtPm1hcCA9IHdlYmtpdFdlYlZpZXdCYXNlTWFwOwpAQCAtMTEwMCw2ICsx
MTExLDggQEAgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUNyZWF0ZVdlYlBhZ2UoV2ViS2l0V2ViVmll
d0Jhc2UqIHdlYmtpdFdlYlZpZXdCYXNlLCBXZWJDb24KICAgICBwcml2LT5wYWdlUHJveHkgPSBj
b250ZXh0LT5jcmVhdGVXZWJQYWdlKCpwcml2LT5wYWdlQ2xpZW50LCBXVEY6Om1vdmUod2ViUGFn
ZUNvbmZpZ3VyYXRpb24pKTsKICAgICBwcml2LT5wYWdlUHJveHktPmluaXRpYWxpemVXZWJQYWdl
KCk7CiAKKyAgICBwcml2LT5pbnB1dE1ldGhvZEZpbHRlci5zZXRQYWdlKHByaXYtPnBhZ2VQcm94
eS5nZXQoKSk7CisKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpICYmIFBMQVRGT1JNKFgxMSkK
ICAgICBpZiAocHJpdi0+cmVkaXJlY3RlZFdpbmRvdykKICAgICAgICAgcHJpdi0+cGFnZVByb3h5
LT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nV2luZG93SWQocHJpdi0+cmVkaXJlY3RlZFdpbmRv
dy0+d2luZG93SWQoKSk7CkBAIC0xMTEyLDEwICsxMTI1LDYgQEAgdm9pZCB3ZWJraXRXZWJWaWV3
QmFzZUNyZWF0ZVdlYlBhZ2UoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdlYlZpZXdCYXNlLCBX
ZWJDb24KICNlbmRpZgogCiAgICAgd2Via2l0V2ViVmlld0Jhc2VVcGRhdGVQcmVmZXJlbmNlcyh3
ZWJraXRXZWJWaWV3QmFzZSk7Ci0KLSAgICAvLyBUaGlzIG11c3QgaGFwcGVuIGhlcmUgaW5zdGVh
ZCBvZiB0aGUgaW5zdGFuY2UgaW5pdGlhbGl6ZXIsIGJlY2F1c2UgdGhlIGlucHV0IG1ldGhvZAot
ICAgIC8vIGZpbHRlciBtdXN0IGhhdmUgYWNjZXNzIHRvIHRoZSBwYWdlLgotICAgIHByaXYtPmlu
cHV0TWV0aG9kRmlsdGVyLnNldFdlYlZpZXcod2Via2l0V2ViVmlld0Jhc2UpOwogfQogCiB2b2lk
IHdlYmtpdFdlYlZpZXdCYXNlU2V0VG9vbHRpcFRleHQoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZp
ZXdCYXNlLCBjb25zdCBjaGFyKiB0b29sdGlwKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViVmlld0Jhc2VJbnB1dE1ldGhvZEZpbHRlci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJWaWV3QmFzZUlucHV0TWV0aG9kRmlsdGVy
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTA5OTgyZS4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJWaWV3QmFzZUlucHV0TWV0aG9k
RmlsdGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldl
YlZpZXdCYXNlSW5wdXRNZXRob2RGaWx0ZXIuaCIKLQotI2luY2x1ZGUgIk5hdGl2ZVdlYktleWJv
YXJkRXZlbnQuaCIKLSNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCIKLSNpbmNs
dWRlICJXZWJQYWdlUHJveHkuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9Db21wb3NpdGlvblJlc3VsdHMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0VkaXRv
ci5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0K
LXZvaWQgV2ViVmlld0Jhc2VJbnB1dE1ldGhvZEZpbHRlcjo6c2V0V2ViVmlldyhXZWJLaXRXZWJW
aWV3QmFzZSogd2ViVmlldykKLXsKLSAgICBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6c2V0V2lkZ2V0
KEdUS19XSURHRVQod2ViVmlldykpOwotCi0gICAgbV93ZWJQYWdlUHJveHkgPSB3ZWJraXRXZWJW
aWV3QmFzZUdldFBhZ2Uod2ViVmlldyk7Ci0gICAgQVNTRVJUKG1fd2ViUGFnZVByb3h5KTsKLX0K
LQotYm9vbCBXZWJWaWV3QmFzZUlucHV0TWV0aG9kRmlsdGVyOjpjYW5FZGl0KCkKLXsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJWaWV3QmFzZUlucHV0TWV0aG9kRmlsdGVyOjpzZW5k
U2ltcGxlS2V5RXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50LCBXVEY6OlN0cmluZyBzaW1wbGVTdHJp
bmcsIEV2ZW50RmFrZWRGb3JDb21wb3NpdGlvbiBmYWtlZCkKLXsKLSAgICBBU1NFUlQobV93ZWJQ
YWdlUHJveHkpOwotICAgIG1fd2ViUGFnZVByb3h5LT5oYW5kbGVLZXlib2FyZEV2ZW50KE5hdGl2
ZVdlYktleWJvYXJkRXZlbnQocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBvc2l0aW9uUmVzdWx0cyhz
aW1wbGVTdHJpbmcpLCBmYWtlZCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYlZp
ZXdCYXNlSW5wdXRNZXRob2RGaWx0ZXI6OnNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3Vs
dHMoR2RrRXZlbnRLZXkqIGV2ZW50LCBSZXN1bHRzVG9TZW5kIHJlc3VsdHNUb1NlbmQsIEV2ZW50
RmFrZWRGb3JDb21wb3NpdGlvbiBmYWtlZCkKLXsKLSAgICBBU1NFUlQobV93ZWJQYWdlUHJveHkp
OwotICAgIG1fd2ViUGFnZVByb3h5LT5oYW5kbGVLZXlib2FyZEV2ZW50KE5hdGl2ZVdlYktleWJv
YXJkRXZlbnQocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wb3NpdGlvblJlc3VsdHMoQ29tcG9zaXRp
b25SZXN1bHRzOjpXaWxsU2VuZENvbXBvc2l0aW9uUmVzdWx0c1Nvb24pLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZha2VkKSk7Ci0KLSAgICBpZiAocmVzdWx0c1Rv
U2VuZCAmIENvbXBvc2l0aW9uICYmICFtX2NvbmZpcm1lZENvbXBvc2l0aW9uLmlzTnVsbCgpKQot
ICAgICAgICBjb25maXJtQ29tcG9zaXRpb25UZXh0KG1fY29uZmlybWVkQ29tcG9zaXRpb24pOwot
ICAgIGlmIChyZXN1bHRzVG9TZW5kICYgUHJlZWRpdCAmJiAhbV9wcmVlZGl0LmlzTnVsbCgpKQot
ICAgICAgICBzZXRQcmVlZGl0KG1fcHJlZWRpdCwgbV9jdXJzb3JPZmZzZXQpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi12b2lkIFdlYlZpZXdCYXNlSW5wdXRNZXRob2RGaWx0ZXI6OmNvbmZpcm1D
b21wb3NpdGlvblRleHQoU3RyaW5nIHRleHQpCi17Ci0gICAgQVNTRVJUKG1fd2ViUGFnZVByb3h5
KTsKLSAgICBtX3dlYlBhZ2VQcm94eS0+Y29uZmlybUNvbXBvc2l0aW9uKHRleHQsIC0xLCAwKTsK
LX0KLQotdm9pZCBXZWJWaWV3QmFzZUlucHV0TWV0aG9kRmlsdGVyOjpjb25maXJtQ3VycmVudENv
bXBvc2l0aW9uKCkKLXsKLSAgICBBU1NFUlQobV93ZWJQYWdlUHJveHkpOwotICAgIG1fd2ViUGFn
ZVByb3h5LT5jb25maXJtQ29tcG9zaXRpb24oU3RyaW5nKCksIC0xLCAwKTsKLX0KLQotdm9pZCBX
ZWJWaWV3QmFzZUlucHV0TWV0aG9kRmlsdGVyOjpjYW5jZWxDdXJyZW50Q29tcG9zaXRpb24oKQot
ewotICAgIEFTU0VSVChtX3dlYlBhZ2VQcm94eSk7Ci0gICAgbV93ZWJQYWdlUHJveHktPmNhbmNl
bENvbXBvc2l0aW9uKCk7Ci19Ci0KLXZvaWQgV2ViVmlld0Jhc2VJbnB1dE1ldGhvZEZpbHRlcjo6
c2V0UHJlZWRpdChTdHJpbmcgbmV3UHJlZWRpdCwgaW50IC8qIGN1cnNvck9mZnNldCAqLykKLXsK
LSAgICAvLyBUT0RPOiBXZSBzaG91bGQgcGFyc2UgdGhlIFBhbmdvQXR0ckxpc3QgdGhhdCB3ZSBn
ZXQgZnJvbSB0aGUgSU0gY29udGV4dCBoZXJlLgotICAgIEFTU0VSVChtX3dlYlBhZ2VQcm94eSk7
Ci0gICAgbV93ZWJQYWdlUHJveHktPnNldENvbXBvc2l0aW9uKG5ld1ByZWVkaXQsIFZlY3RvcjxD
b21wb3NpdGlvblVuZGVybGluZT57IENvbXBvc2l0aW9uVW5kZXJsaW5lKDAsIG5ld1ByZWVkaXQu
bGVuZ3RoKCksIENvbG9yKDEsIDEsIDEpLCBmYWxzZSkgfSwKLSAgICAgICAgbV9jdXJzb3JPZmZz
ZXQsIG1fY3Vyc29yT2Zmc2V0LCAwIC8qIHJlcGxhY2VtZW50IHN0YXJ0ICovLCAwIC8qIHJlcGxh
Y2VtZW50IGVuZCAqLyk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViVmlld0Jhc2VJbnB1dE1ldGhvZEZp
bHRlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViVmlld0Jhc2VJbnB1
dE1ldGhvZEZpbHRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Y2RlOGIxLi4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYlZpZXdCYXNl
SW5wdXRNZXRob2RGaWx0ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBXZWJWaWV3QmFzZUlucHV0
TWV0aG9kRmlsdGVyX2gKLSNkZWZpbmUgV2ViVmlld0Jhc2VJbnB1dE1ldGhvZEZpbHRlcl9oCi0K
LSNpbmNsdWRlICJHdGtJbnB1dE1ldGhvZEZpbHRlci5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94
eS5oIgotCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmlld0Jhc2UgV2ViS2l0V2ViVmlld0Jh
c2U7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJWaWV3QmFzZUlucHV0TWV0aG9k
RmlsdGVyIDogcHVibGljIFdlYkNvcmU6Okd0a0lucHV0TWV0aG9kRmlsdGVyIHsKLXB1YmxpYzoK
LSAgICB2b2lkIHNldFdlYlZpZXcoV2ViS2l0V2ViVmlld0Jhc2UqKTsKLQotcHJvdGVjdGVkOgot
ICAgIHZpcnR1YWwgYm9vbCBzZW5kU2ltcGxlS2V5RXZlbnQoR2RrRXZlbnRLZXkqLCBXVEY6OlN0
cmluZyBldmVudFN0cmluZywgRXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uKTsKLSAgICB2aXJ0dWFs
IGJvb2wgc2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cyhHZGtFdmVudEtleSosIFJl
c3VsdHNUb1NlbmQsIEV2ZW50RmFrZWRGb3JDb21wb3NpdGlvbik7Ci0gICAgdmlydHVhbCBib29s
IGNhbkVkaXQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29uZmlybUNvbXBvc2l0aW9uVGV4dChTdHJp
bmcpOwotICAgIHZpcnR1YWwgdm9pZCBjb25maXJtQ3VycmVudENvbXBvc2l0aW9uKCk7Ci0gICAg
dmlydHVhbCB2b2lkIGNhbmNlbEN1cnJlbnRDb21wb3NpdGlvbigpOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRQcmVlZGl0KFN0cmluZywgaW50IGN1cnNvck9mZnNldCk7Ci0KLXByaXZhdGU6Ci0gICAg
V2ViUGFnZVByb3h5KiBtX3dlYlBhZ2VQcm94eTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktp
dAotCi0jZW5kaWYgLy8gV2ViVmlld0Jhc2VJbnB1dE1ldGhvZEZpbHRlcl9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0lucHV0TWV0aG9kRmlsdGVyLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvSW5wdXRNZXRob2RGaWx0ZXIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYzUxMmIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0lucHV0TWV0aG9kRmlsdGVyLmNwcApAQCAtMCww
ICsxLDQ0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBJZ2FsaWEgUy5MLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5wdXRNZXRob2RGaWx0ZXIuaCIKKworI2lu
Y2x1ZGUgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHku
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Db21wb3Np
dGlvblJlc3VsdHMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0VkaXRvci5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvR1VuaXF1ZVB0ckd0ay5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgorI2lu
Y2x1ZGUgPGdkay9nZGtrZXlzeW1zLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HVW5pcXVlUHRyLmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBJbnB1
dE1ldGhvZEZpbHRlcjo6aGFuZGxlQ29tbWl0Q2FsbGJhY2soSW5wdXRNZXRob2RGaWx0ZXIqIGZp
bHRlciwgY29uc3QgY2hhciogY29tcG9zaXRpb25TdHJpbmcpCit7CisgICAgZmlsdGVyLT5oYW5k
bGVDb21taXQoY29tcG9zaXRpb25TdHJpbmcpOworfQorCit2b2lkIElucHV0TWV0aG9kRmlsdGVy
OjpoYW5kbGVQcmVlZGl0U3RhcnRDYWxsYmFjayhJbnB1dE1ldGhvZEZpbHRlciogZmlsdGVyKQor
eworICAgIGZpbHRlci0+aGFuZGxlUHJlZWRpdFN0YXJ0KCk7Cit9CisKK3ZvaWQgSW5wdXRNZXRo
b2RGaWx0ZXI6OmhhbmRsZVByZWVkaXRDaGFuZ2VkQ2FsbGJhY2soSW5wdXRNZXRob2RGaWx0ZXIq
IGZpbHRlcikKK3sKKyAgICBmaWx0ZXItPmhhbmRsZVByZWVkaXRDaGFuZ2VkKCk7Cit9CisKK3Zv
aWQgSW5wdXRNZXRob2RGaWx0ZXI6OmhhbmRsZVByZWVkaXRFbmRDYWxsYmFjayhJbnB1dE1ldGhv
ZEZpbHRlciogZmlsdGVyKQoreworICAgIGZpbHRlci0+aGFuZGxlUHJlZWRpdEVuZCgpOworfQor
CitJbnB1dE1ldGhvZEZpbHRlcjo6SW5wdXRNZXRob2RGaWx0ZXIoKQorICAgIDogbV9jb250ZXh0
KGFkb3B0R1JlZihndGtfaW1fbXVsdGljb250ZXh0X25ldygpKSkKKyAgICAsIG1fcGFnZShudWxs
cHRyKQorICAgICwgbV9lbmFibGVkKGZhbHNlKQorICAgICwgbV9jb21wb3NpbmdUZXh0Q3VycmVu
dGx5KGZhbHNlKQorICAgICwgbV9maWx0ZXJpbmdLZXlFdmVudChmYWxzZSkKKyAgICAsIG1fcHJl
ZWRpdENoYW5nZWQoZmFsc2UpCisgICAgLCBtX3ByZXZlbnROZXh0Q29tbWl0KGZhbHNlKQorICAg
ICwgbV9qdXN0U2VudEZha2VLZXlVcChmYWxzZSkKKyAgICAsIG1fY3Vyc29yT2Zmc2V0KDApCisg
ICAgLCBtX2xhc3RGaWx0ZXJlZEtleVByZXNzQ29kZVdpdGhOb1Jlc3VsdHMoR0RLX0tFWV9Wb2lk
U3ltYm9sKQorI2lmIEVOQUJMRShBUElfVEVTVFMpCisgICAgLCBtX3Rlc3RpbmdNb2RlKGZhbHNl
KQorI2VuZGlmCit7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fY29udGV4dC5nZXQo
KSwgImNvbW1pdCIsIEdfQ0FMTEJBQ0soaGFuZGxlQ29tbWl0Q2FsbGJhY2spLCB0aGlzKTsKKyAg
ICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9jb250ZXh0LmdldCgpLCAicHJlZWRpdC1zdGFy
dCIsIEdfQ0FMTEJBQ0soaGFuZGxlUHJlZWRpdFN0YXJ0Q2FsbGJhY2spLCB0aGlzKTsKKyAgICBn
X3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9jb250ZXh0LmdldCgpLCAicHJlZWRpdC1jaGFuZ2Vk
IiwgR19DQUxMQkFDSyhoYW5kbGVQcmVlZGl0Q2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CisgICAg
Z19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fY29udGV4dC5nZXQoKSwgInByZWVkaXQtZW5kIiwg
R19DQUxMQkFDSyhoYW5kbGVQcmVlZGl0RW5kQ2FsbGJhY2spLCB0aGlzKTsKK30KKworSW5wdXRN
ZXRob2RGaWx0ZXI6On5JbnB1dE1ldGhvZEZpbHRlcigpCit7CisgICAgZ19zaWduYWxfaGFuZGxl
cnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fY29udGV4dC5nZXQoKSwgR19TSUdOQUxfTUFUQ0hfREFU
QSwgMCwgMCwgbnVsbHB0ciwgbnVsbHB0ciwgdGhpcyk7Cit9CisKK3ZvaWQgSW5wdXRNZXRob2RG
aWx0ZXI6OnNldEVuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIEFTU0VSVChtX3BhZ2UpOwor
CisgICAgbV9lbmFibGVkID0gZW5hYmxlZDsKKyAgICBpZiAoZW5hYmxlZCkKKyAgICAgICAgZ3Rr
X2ltX2NvbnRleHRfZm9jdXNfaW4obV9jb250ZXh0LmdldCgpKTsKKyAgICBlbHNlCisgICAgICAg
IGd0a19pbV9jb250ZXh0X2ZvY3VzX291dChtX2NvbnRleHQuZ2V0KCkpOworfQorCit2b2lkIElu
cHV0TWV0aG9kRmlsdGVyOjpzZXRDdXJzb3JSZWN0KGNvbnN0IEludFJlY3QmIGN1cnNvclJlY3Qp
Cit7CisgICAgQVNTRVJUKG1fcGFnZSk7CisgICAgLy8gRG9uJ3QgbW92ZSB0aGUgd2luZG93IHVu
bGVzcyB0aGUgY3Vyc29yIGFjdHVhbGx5IG1vdmVzIG1vcmUgdGhhbiAxMAorICAgIC8vIHBpeGVs
cy4gVGhpcyBwcmV2ZW50cyB1cyBmcm9tIG1ha2luZyB0aGUgd2luZG93IGZsYXNoIGR1cmluZyBt
aW5vcgorICAgIC8vIGN1cnNvciBhZGp1c3RtZW50cy4KKyAgICBzdGF0aWMgY29uc3QgaW50IHdp
bmRvd01vdmVtZW50VGhyZXNob2xkID0gMTAgKiAxMDsKKyAgICBpZiAoY3Vyc29yUmVjdC5sb2Nh
dGlvbigpLmRpc3RhbmNlU3F1YXJlZFRvUG9pbnQobV9sYXN0Q2FyZUxvY2F0aW9uKSA8IHdpbmRv
d01vdmVtZW50VGhyZXNob2xkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2xhc3RDYXJlTG9j
YXRpb24gPSBjdXJzb3JSZWN0LmxvY2F0aW9uKCk7CisgICAgSW50UmVjdCB0cmFuc2xhdGVkUmVj
dCA9IGN1cnNvclJlY3Q7CisKKyAgICBBU1NFUlQobV93aWRnZXQpOworICAgIEd0a0FsbG9jYXRp
b24gYWxsb2NhdGlvbjsKKyAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9uKG1fcGFnZS0+dmll
d1dpZGdldCgpLCAmYWxsb2NhdGlvbik7CisgICAgdHJhbnNsYXRlZFJlY3QubW92ZShhbGxvY2F0
aW9uLngsIGFsbG9jYXRpb24ueSk7CisKKyAgICBHZGtSZWN0YW5nbGUgZ2RrQ3Vyc29yUmVjdCA9
IHRyYW5zbGF0ZWRSZWN0OworICAgIGd0a19pbV9jb250ZXh0X3NldF9jdXJzb3JfbG9jYXRpb24o
bV9jb250ZXh0LmdldCgpLCAmZ2RrQ3Vyc29yUmVjdCk7Cit9CisKK3ZvaWQgSW5wdXRNZXRob2RG
aWx0ZXI6OmhhbmRsZUtleWJvYXJkRXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50LCBjb25zdCBTdHJp
bmcmIHNpbXBsZVN0cmluZywgRXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uIGZha2VkKQoreworI2lm
IEVOQUJMRShBUElfVEVTVFMpCisgICAgaWYgKG1fdGVzdGluZ01vZGUpIHsKKyAgICAgICAgbG9n
SGFuZGxlS2V5Ym9hcmRFdmVudEZvclRlc3RpbmcoZXZlbnQsIHNpbXBsZVN0cmluZywgZmFrZWQp
OworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgbV9wYWdlLT5oYW5kbGVLZXli
b2FyZEV2ZW50KE5hdGl2ZVdlYktleWJvYXJkRXZlbnQocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVu
dCo+KGV2ZW50KSwgQ29tcG9zaXRpb25SZXN1bHRzKHNpbXBsZVN0cmluZyksIGZha2VkKSk7Cit9
CisKK3ZvaWQgSW5wdXRNZXRob2RGaWx0ZXI6OmhhbmRsZUtleWJvYXJkRXZlbnRXaXRoQ29tcG9z
aXRpb25SZXN1bHRzKEdka0V2ZW50S2V5KiBldmVudCwgUmVzdWx0c1RvU2VuZCByZXN1bHRzVG9T
ZW5kLCBFdmVudEZha2VkRm9yQ29tcG9zaXRpb24gZmFrZWQpCit7CisjaWYgRU5BQkxFKEFQSV9U
RVNUUykKKyAgICBpZiAobV90ZXN0aW5nTW9kZSkgeworICAgICAgICBsb2dIYW5kbGVLZXlib2Fy
ZEV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0c0ZvclRlc3RpbmcoZXZlbnQsIHJlc3VsdHNUb1Nl
bmQsIGZha2VkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorICAgIG1fcGFnZS0+
aGFuZGxlS2V5Ym9hcmRFdmVudChOYXRpdmVXZWJLZXlib2FyZEV2ZW50KHJlaW50ZXJwcmV0X2Nh
c3Q8R2RrRXZlbnQqPihldmVudCksIENvbXBvc2l0aW9uUmVzdWx0cyhDb21wb3NpdGlvblJlc3Vs
dHM6OldpbGxTZW5kQ29tcG9zaXRpb25SZXN1bHRzU29vbiksIGZha2VkKSk7CisKKyAgICBpZiAo
cmVzdWx0c1RvU2VuZCAmIENvbXBvc2l0aW9uICYmICFtX2NvbmZpcm1lZENvbXBvc2l0aW9uLmlz
TnVsbCgpKQorICAgICAgICBtX3BhZ2UtPmNvbmZpcm1Db21wb3NpdGlvbihtX2NvbmZpcm1lZENv
bXBvc2l0aW9uLCAtMSwgMCk7CisKKyAgICBpZiAocmVzdWx0c1RvU2VuZCAmIFByZWVkaXQgJiYg
IW1fcHJlZWRpdC5pc051bGwoKSkgeworICAgICAgICBtX3BhZ2UtPnNldENvbXBvc2l0aW9uKG1f
cHJlZWRpdCwgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW5lPnsgQ29tcG9zaXRpb25VbmRlcmxp
bmUoMCwgbV9wcmVlZGl0Lmxlbmd0aCgpLCBDb2xvcigxLCAxLCAxKSwgZmFsc2UpIH0sCisgICAg
ICAgICAgICBtX2N1cnNvck9mZnNldCwgbV9jdXJzb3JPZmZzZXQsIDAgLyogcmVwbGFjZW1lbnQg
c3RhcnQgKi8sIDAgLyogcmVwbGFjZW1lbnQgZW5kICovKTsKKyAgICB9Cit9CisKK3ZvaWQgSW5w
dXRNZXRob2RGaWx0ZXI6OmZpbHRlcktleUV2ZW50KEdka0V2ZW50S2V5KiBldmVudCkKK3sKKyNp
ZiBFTkFCTEUoQVBJX1RFU1RTKQorICAgIEFTU0VSVChtX3BhZ2UgfHwgbV90ZXN0aW5nTW9kZSk7
CisjZWxzZQorICAgIEFTU0VSVChtX3BhZ2UpOworI2VuZGlmCisgICAgaWYgKCFtX2VuYWJsZWQp
IHsKKyAgICAgICAgaGFuZGxlS2V5Ym9hcmRFdmVudChldmVudCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBtX3ByZWVkaXRDaGFuZ2VkID0gZmFsc2U7CisgICAgbV9maWx0ZXJpbmdL
ZXlFdmVudCA9IHRydWU7CisKKyAgICB1bnNpZ25lZCBsYXN0RmlsdGVyZWRLZXlQcmVzc0NvZGVX
aXRoTm9SZXN1bHRzID0gbV9sYXN0RmlsdGVyZWRLZXlQcmVzc0NvZGVXaXRoTm9SZXN1bHRzOwor
ICAgIG1fbGFzdEZpbHRlcmVkS2V5UHJlc3NDb2RlV2l0aE5vUmVzdWx0cyA9IEdES19LRVlfVm9p
ZFN5bWJvbDsKKworICAgIGJvb2wgZmlsdGVyZWQgPSBndGtfaW1fY29udGV4dF9maWx0ZXJfa2V5
cHJlc3MobV9jb250ZXh0LmdldCgpLCBldmVudCk7CisgICAgbV9maWx0ZXJpbmdLZXlFdmVudCA9
IGZhbHNlOworCisgICAgYm9vbCBqdXN0U2VudEZha2VLZXlVcCA9IG1fanVzdFNlbnRGYWtlS2V5
VXA7CisgICAgbV9qdXN0U2VudEZha2VLZXlVcCA9IGZhbHNlOworICAgIGlmIChqdXN0U2VudEZh
a2VLZXlVcCAmJiBldmVudC0+dHlwZSA9PSBHREtfS0VZX1JFTEVBU0UpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIFNpbXBsZSBpbnB1dCBtZXRob2RzIHdvcmsgc3VjaCB0aGF0IGV2ZW4gbm9y
bWFsIGtleXN0cm9rZXMgZmlyZSB0aGUKKyAgICAvLyBjb21taXQgc2lnbmFsLiBXZSBkZXRlY3Qg
dGhvc2Ugc2l0dWF0aW9ucyBhbmQgdHJlYXQgdGhlbSBhcyBub3JtYWwKKyAgICAvLyBrZXkgZXZl
bnRzLCBzdXBwbHlpbmcgdGhlIGNvbW1pdCBzdHJpbmcgYXMgdGhlIGtleSBjaGFyYWN0ZXIuCisg
ICAgaWYgKGZpbHRlcmVkICYmICFtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkgJiYgIW1fcHJlZWRp
dENoYW5nZWQgJiYgbV9jb25maXJtZWRDb21wb3NpdGlvbi5sZW5ndGgoKSA9PSAxKSB7CisgICAg
ICAgIGhhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQsIG1fY29uZmlybWVkQ29tcG9zaXRpb24pOwor
ICAgICAgICBtX2NvbmZpcm1lZENvbXBvc2l0aW9uID0gU3RyaW5nKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoZmlsdGVyZWQgJiYgZXZlbnQtPnR5cGUgPT0gR0RLX0tFWV9Q
UkVTUykgeworICAgICAgICBpZiAoIW1fcHJlZWRpdENoYW5nZWQgJiYgbV9jb25maXJtZWRDb21w
b3NpdGlvbi5pc051bGwoKSkgeworICAgICAgICAgICAgbV9jb21wb3NpbmdUZXh0Q3VycmVudGx5
ID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fbGFzdEZpbHRlcmVkS2V5UHJlc3NDb2RlV2l0aE5vUmVz
dWx0cyA9IGV2ZW50LT5rZXl2YWw7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBoYW5kbGVLZXlib2FyZEV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cyhldmVudCk7
CisgICAgICAgIGlmICghbV9jb25maXJtZWRDb21wb3NpdGlvbi5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgIG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSA9IGZhbHNlOworICAgICAgICAgICAgbV9j
b25maXJtZWRDb21wb3NpdGlvbiA9IFN0cmluZygpOworICAgICAgICB9CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBwcmV2aW91c2x5IGZpbHRlcmVkIGEga2V5IHByZXNz
IGV2ZW50IGFuZCBpdCB5aWVsZGVkIG5vIHJlc3VsdHMuIFN1cHByZXNzCisgICAgLy8gdGhlIGNv
cnJlc3BvbmRpbmcga2V5IHJlbGVhc2UgZXZlbnQgdG8gYXZvaWQgY29uZnVzaW5nIHRoZSB3ZWIg
Y29udGVudC4KKyAgICBpZiAoZXZlbnQtPnR5cGUgPT0gR0RLX0tFWV9SRUxFQVNFICYmIGxhc3RG
aWx0ZXJlZEtleVByZXNzQ29kZVdpdGhOb1Jlc3VsdHMgPT0gZXZlbnQtPmtleXZhbCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gQXQgdGhpcyBwb2ludCBhIGtleXN0cm9rZSB3YXMgZWl0aGVy
OgorICAgIC8vIDEuIFVuZmlsdGVyZWQKKyAgICAvLyAyLiBBIGZpbHRlcmVkIGtleXVwIGV2ZW50
LiBBcyB0aGUgSU1FIGNvZGUgaW4gRWRpdG9yQ2xpZW50LmggZG9lc24ndAorICAgIC8vICAgIGV2
ZXIgbG9vayBhdCBrZXl1cCBldmVudHMsIHdlIHNlbmQgYW55IGNvbXBvc2l0aW9uIHJlc3VsdHMg
YmVmb3JlCisgICAgLy8gICAgdGhlIGtleSBldmVudC4KKyAgICAvLyBCb3RoIG1pZ2h0IGhhdmUg
Y29tcG9zaXRpb24gcmVzdWx0cyBvciBub3QuCisgICAgLy8KKyAgICAvLyBJdCdzIGltcG9ydGFu
dCB0byBzZW5kIHRoZSBjb21wb3NpdGlvbiByZXN1bHRzIGJlZm9yZSB0aGUgZXZlbnQKKyAgICAv
LyBiZWNhdXNlIHNvbWUgSU0gbW9kdWxlcyBvcGVyYXRlIHRoYXQgd2F5LiBGb3IgZXhhbXBsZSAo
dGFrZW4gZnJvbQorICAgIC8vIHRoZSBDaHJvbWl1bSBzb3VyY2UpLCB0aGUgbGF0aW4tcG9zdCBp
bnB1dCBtZXRob2QgZ2l2ZXMgdGhpcyBzZXF1ZW5jZQorICAgIC8vIHdoZW4geW91IHByZXNzICdh
JyBhbmQgdGhlbiBiYWNrc3BhY2U6CisgICAgLy8gIDEuIGtleWRvd24gJ2EnIChmaWx0ZXJlZCkK
KyAgICAvLyAgMi4gcHJlZWRpdCBjaGFuZ2VkIHRvICJhIgorICAgIC8vICAzLiBrZXl1cCAnYScg
KHVuZmlsdGVyZWQpCisgICAgLy8gIDQuIGtleWRvd24gQmFja3NwYWNlICh1bmZpbHRlcmVkKQor
ICAgIC8vICA1LiBjb21taXQgImEiCisgICAgLy8gIDYuIHByZWVkaXQgZW5kCisgICAgaWYgKCFt
X2NvbmZpcm1lZENvbXBvc2l0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgY29uZmlybUNvbXBvc2l0
aW9uKCk7CisgICAgaWYgKG1fcHJlZWRpdENoYW5nZWQpCisgICAgICAgIHVwZGF0ZVByZWVkaXQo
KTsKKyAgICBoYW5kbGVLZXlib2FyZEV2ZW50KGV2ZW50KTsKK30KKwordm9pZCBJbnB1dE1ldGhv
ZEZpbHRlcjo6Y29uZmlybUNvbXBvc2l0aW9uKCkKK3sKKyNpZiBFTkFCTEUoQVBJX1RFU1RTKQor
ICAgIGlmIChtX3Rlc3RpbmdNb2RlKSB7CisgICAgICAgIGxvZ0NvbmZpcm1Db21wb3NpdGlvbkZv
clRlc3RpbmcoKTsKKyAgICAgICAgbV9jb25maXJtZWRDb21wb3NpdGlvbiA9IFN0cmluZygpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgbV9wYWdlLT5jb25maXJtQ29tcG9z
aXRpb24obV9jb25maXJtZWRDb21wb3NpdGlvbiwgLTEsIDApOworICAgIG1fY29uZmlybWVkQ29t
cG9zaXRpb24gPSBTdHJpbmcoKTsKK30KKwordm9pZCBJbnB1dE1ldGhvZEZpbHRlcjo6dXBkYXRl
UHJlZWRpdCgpCit7CisjaWYgRU5BQkxFKEFQSV9URVNUUykKKyAgICBpZiAobV90ZXN0aW5nTW9k
ZSkgeworICAgICAgICBsb2dTZXRQcmVlZGl0Rm9yVGVzdGluZygpOworICAgICAgICByZXR1cm47
CisgICAgfQorI2VuZGlmCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBwYXJzZSB0aGUgUGFuZ29B
dHRyTGlzdCB0aGF0IHdlIGdldCBmcm9tIHRoZSBJTSBjb250ZXh0IGhlcmUuCisgICAgbV9wYWdl
LT5zZXRDb21wb3NpdGlvbihtX3ByZWVkaXQsIFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluZT57
IENvbXBvc2l0aW9uVW5kZXJsaW5lKDAsIG1fcHJlZWRpdC5sZW5ndGgoKSwgQ29sb3IoMSwgMSwg
MSksIGZhbHNlKSB9LAorICAgICAgICBtX2N1cnNvck9mZnNldCwgbV9jdXJzb3JPZmZzZXQsIDAg
LyogcmVwbGFjZW1lbnQgc3RhcnQgKi8sIDAgLyogcmVwbGFjZW1lbnQgZW5kICovKTsKKyAgICBt
X3ByZWVkaXRDaGFuZ2VkID0gZmFsc2U7Cit9CisKK3ZvaWQgSW5wdXRNZXRob2RGaWx0ZXI6Om5v
dGlmeUZvY3VzZWRJbigpCit7CisjaWYgRU5BQkxFKEFQSV9URVNUUykKKyAgICBBU1NFUlQobV9w
YWdlIHx8IG1fdGVzdGluZ01vZGUpOworI2Vsc2UKKyAgICBBU1NFUlQobV9wYWdlKTsKKyNlbmRp
ZgorICAgIG1fZW5hYmxlZCA9IHRydWU7CisgICAgZ3RrX2ltX2NvbnRleHRfZm9jdXNfaW4obV9j
b250ZXh0LmdldCgpKTsKK30KKwordm9pZCBJbnB1dE1ldGhvZEZpbHRlcjo6bm90aWZ5Rm9jdXNl
ZE91dCgpCit7CisjaWYgRU5BQkxFKEFQSV9URVNUUykKKyAgICBBU1NFUlQobV9wYWdlIHx8IG1f
dGVzdGluZ01vZGUpOworI2Vsc2UKKyAgICBBU1NFUlQobV9wYWdlKTsKKyNlbmRpZgorICAgIGlm
ICghbV9lbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25maXJtQ3VycmVudENvbXBv
c2l0aW9uKCk7CisgICAgY2FuY2VsQ29udGV4dENvbXBvc2l0aW9uKCk7CisgICAgZ3RrX2ltX2Nv
bnRleHRfZm9jdXNfb3V0KG1fY29udGV4dC5nZXQoKSk7CisgICAgbV9lbmFibGVkID0gZmFsc2U7
Cit9CisKK3ZvaWQgSW5wdXRNZXRob2RGaWx0ZXI6Om5vdGlmeU1vdXNlQnV0dG9uUHJlc3MoKQor
eworI2lmIEVOQUJMRShBUElfVEVTVFMpCisgICAgQVNTRVJUKG1fcGFnZSB8fCBtX3Rlc3RpbmdN
b2RlKTsKKyNlbHNlCisgICAgQVNTRVJUKG1fcGFnZSk7CisjZW5kaWYKKworICAgIC8vIENvbmZp
cm1pbmcgdGhlIGNvbXBvc2l0aW9uIG1heSB0cmlnZ2VyIGEgc2VsZWN0aW9uIGNoYW5nZSwgd2hp
Y2gKKyAgICAvLyBtaWdodCB0cmlnZ2VyIGZ1cnRoZXIgdW53YW50ZWQgYWN0aW9ucyBvbiB0aGUg
Y29udGV4dCwgc28gd2UgcHJldmVudAorICAgIC8vIHRoYXQgYnkgc2V0dGluZyBtX2NvbXBvc2lu
Z1RleHRDdXJyZW50bHkgdG8gZmFsc2UuCisgICAgY29uZmlybUN1cnJlbnRDb21wb3NpdGlvbigp
OworICAgIGNhbmNlbENvbnRleHRDb21wb3NpdGlvbigpOworfQorCit2b2lkIElucHV0TWV0aG9k
RmlsdGVyOjpjb25maXJtQ3VycmVudENvbXBvc2l0aW9uKCkKK3sKKyAgICBpZiAoIW1fY29tcG9z
aW5nVGV4dEN1cnJlbnRseSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fcGFnZS0+Y29uZmlybUNv
bXBvc2l0aW9uKFN0cmluZygpLCAtMSwgMCk7CisgICAgbV9jb21wb3NpbmdUZXh0Q3VycmVudGx5
ID0gZmFsc2U7Cit9CisKK3ZvaWQgSW5wdXRNZXRob2RGaWx0ZXI6OmNhbmNlbENvbnRleHRDb21w
b3NpdGlvbigpCit7CisgICAgbV9wcmV2ZW50TmV4dENvbW1pdCA9ICFtX3ByZWVkaXQuaXNFbXB0
eSgpOworCisgICAgZ3RrX2ltX2NvbnRleHRfcmVzZXQobV9jb250ZXh0LmdldCgpKTsKKworICAg
IG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSA9IGZhbHNlOworICAgIG1fanVzdFNlbnRGYWtlS2V5
VXAgPSBmYWxzZTsKKyAgICBtX3ByZWVkaXQgPSBTdHJpbmcoKTsKKyAgICBtX2NvbmZpcm1lZENv
bXBvc2l0aW9uID0gU3RyaW5nKCk7Cit9CisKK3ZvaWQgSW5wdXRNZXRob2RGaWx0ZXI6OnNlbmRD
b21wb3NpdGlvbkFuZFByZWVkaXRXaXRoRmFrZUtleUV2ZW50cyhSZXN1bHRzVG9TZW5kIHJlc3Vs
dHNUb1NlbmQpCit7CisgICAgLy8gVGhlIFdpbmRvd3MgY29tcG9zaXRpb24ga2V5IGV2ZW50IGNv
ZGUgaXMgMjk5IG9yIFZLX1BST0NFU1NLRVkuIFdlIG5lZWQgdG8KKyAgICAvLyBlbWl0IHRoaXMg
Y29kZSBmb3Igd2ViIGNvbXBhdGliaWxpdHkgcmVhc29ucyB3aGVuIGtleSBldmVudHMgdHJpZ2dl
cgorICAgIC8vIGNvbXBvc2l0aW9uIHJlc3VsdHMuIEdESyBkb2Vzbid0IGhhdmUgYW4gZXF1aXZh
bGVudCwgc28gd2Ugc2VuZCBWb2lkU3ltYm9sCisgICAgLy8gaGVyZSB0byBXZWJDb3JlLiBQbGF0
Zm9ybUtleUV2ZW50IGtub3dzIHRvIGNvbnZlcnQgdGhpcyBjb2RlIGludG8KKyAgICAvLyBWS19Q
Uk9DRVNTS0VZLgorICAgIHN0YXRpYyBjb25zdCBpbnQgY29tcG9zaXRpb25FdmVudEtleUNvZGUg
PSBHREtfS0VZX1ZvaWRTeW1ib2w7CisKKyAgICBHVW5pcXVlUHRyPEdka0V2ZW50PiBldmVudChn
ZGtfZXZlbnRfbmV3KEdES19LRVlfUFJFU1MpKTsKKyAgICBldmVudC0+a2V5LnRpbWUgPSBHREtf
Q1VSUkVOVF9USU1FOworICAgIGV2ZW50LT5rZXkua2V5dmFsID0gY29tcG9zaXRpb25FdmVudEtl
eUNvZGU7CisgICAgaGFuZGxlS2V5Ym9hcmRFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMoJmV2
ZW50LT5rZXksIHJlc3VsdHNUb1NlbmQsIEV2ZW50RmFrZWQpOworCisgICAgbV9jb25maXJtZWRD
b21wb3NpdGlvbiA9IFN0cmluZygpOworICAgIGlmIChyZXN1bHRzVG9TZW5kICYgQ29tcG9zaXRp
b24pCisgICAgICAgIG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSA9IGZhbHNlOworCisgICAgZXZl
bnQtPnR5cGUgPSBHREtfS0VZX1JFTEVBU0U7CisgICAgaGFuZGxlS2V5Ym9hcmRFdmVudCgmZXZl
bnQtPmtleSwgU3RyaW5nKCksIEV2ZW50RmFrZWQpOworICAgIG1fanVzdFNlbnRGYWtlS2V5VXAg
PSB0cnVlOworfQorCit2b2lkIElucHV0TWV0aG9kRmlsdGVyOjpoYW5kbGVDb21taXQoY29uc3Qg
Y2hhciogY29tcG9zaXRpb25TdHJpbmcpCit7CisgICAgaWYgKG1fcHJldmVudE5leHRDb21taXQp
IHsKKyAgICAgICAgbV9wcmV2ZW50TmV4dENvbW1pdCA9IGZhbHNlOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKCFtX2VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
Y29uZmlybWVkQ29tcG9zaXRpb24uYXBwZW5kKFN0cmluZzo6ZnJvbVVURjgoY29tcG9zaXRpb25T
dHJpbmcpKTsKKworICAgIC8vIElmIHRoZSBjb21taXQgd2FzIHRyaWdnZXJlZCBvdXRzaWRlIG9m
IGEga2V5IGV2ZW50LCBqdXN0IHNlbmQKKyAgICAvLyB0aGUgSU1FIGV2ZW50IG5vdy4gSWYgd2Ug
YXJlIGhhbmRsaW5nIGEga2V5IGV2ZW50LCB3ZSdsbCBkZWNpZGUKKyAgICAvLyBsYXRlciBob3cg
dG8gaGFuZGxlIHRoaXMuCisgICAgaWYgKCFtX2ZpbHRlcmluZ0tleUV2ZW50KQorICAgICAgICBz
ZW5kQ29tcG9zaXRpb25BbmRQcmVlZGl0V2l0aEZha2VLZXlFdmVudHMoQ29tcG9zaXRpb24pOwor
fQorCit2b2lkIElucHV0TWV0aG9kRmlsdGVyOjpoYW5kbGVQcmVlZGl0U3RhcnQoKQoreworICAg
IGlmIChtX3ByZXZlbnROZXh0Q29tbWl0IHx8ICFtX2VuYWJsZWQpCisgICAgICAgIHJldHVybjsK
KyAgICBtX3ByZWVkaXRDaGFuZ2VkID0gdHJ1ZTsKKyAgICBtX3ByZWVkaXQgPSBlbXB0eVN0cmlu
ZygpOworfQorCit2b2lkIElucHV0TWV0aG9kRmlsdGVyOjpoYW5kbGVQcmVlZGl0Q2hhbmdlZCgp
Cit7CisgICAgaWYgKCFtX2VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEdVbmlxdWVP
dXRQdHI8Z2NoYXI+IG5ld1ByZWVkaXQ7CisgICAgZ3RrX2ltX2NvbnRleHRfZ2V0X3ByZWVkaXRf
c3RyaW5nKG1fY29udGV4dC5nZXQoKSwgJm5ld1ByZWVkaXQub3V0UHRyKCksIG51bGxwdHIsICZt
X2N1cnNvck9mZnNldCk7CisKKyAgICBpZiAobV9wcmV2ZW50TmV4dENvbW1pdCkgeworICAgICAg
ICBpZiAoc3RybGVuKG5ld1ByZWVkaXQuZ2V0KCkpID4gMCkKKyAgICAgICAgICAgIG1fcHJldmVu
dE5leHRDb21taXQgPSBmYWxzZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIG1fcHJlZWRpdCA9IFN0cmluZzo6ZnJvbVVURjgobmV3UHJlZWRpdC5nZXQo
KSk7CisgICAgbV9jdXJzb3JPZmZzZXQgPSBzdGQ6Om1pbihzdGQ6Om1heChtX2N1cnNvck9mZnNl
dCwgMCksIHN0YXRpY19jYXN0PGludD4obV9wcmVlZGl0Lmxlbmd0aCgpKSk7CisKKyAgICBtX2Nv
bXBvc2luZ1RleHRDdXJyZW50bHkgPSAhbV9wcmVlZGl0LmlzRW1wdHkoKTsKKyAgICBtX3ByZWVk
aXRDaGFuZ2VkID0gdHJ1ZTsKKworICAgIGlmICghbV9maWx0ZXJpbmdLZXlFdmVudCkKKyAgICAg
ICAgc2VuZENvbXBvc2l0aW9uQW5kUHJlZWRpdFdpdGhGYWtlS2V5RXZlbnRzKFByZWVkaXQpOwor
fQorCit2b2lkIElucHV0TWV0aG9kRmlsdGVyOjpoYW5kbGVQcmVlZGl0RW5kKCkKK3sKKyAgICBp
ZiAobV9wcmV2ZW50TmV4dENvbW1pdCB8fCAhbV9lbmFibGVkKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX3ByZWVkaXQgPSBTdHJpbmcoKTsKKyAgICBtX2N1cnNvck9mZnNldCA9IDA7CisgICAg
bV9wcmVlZGl0Q2hhbmdlZCA9IHRydWU7CisKKyAgICBpZiAoIW1fZmlsdGVyaW5nS2V5RXZlbnQp
CisgICAgICAgIHVwZGF0ZVByZWVkaXQoKTsKK30KKworI2lmIEVOQUJMRShBUElfVEVTVFMpCit2
b2lkIElucHV0TWV0aG9kRmlsdGVyOjpsb2dIYW5kbGVLZXlib2FyZEV2ZW50Rm9yVGVzdGluZyhH
ZGtFdmVudEtleSogZXZlbnQsIGNvbnN0IFN0cmluZyYgZXZlbnRTdHJpbmcsIEV2ZW50RmFrZWRG
b3JDb21wb3NpdGlvbiBmYWtlZCkKK3sKKyAgICBjb25zdCBjaGFyKiBldmVudFR5cGUgPSBldmVu
dC0+dHlwZSA9PSBHREtfS0VZX1JFTEVBU0UgPyAicmVsZWFzZSIgOiAicHJlc3MiOworICAgIGNv
bnN0IGNoYXIqIGZha2VkU3RyaW5nID0gZmFrZWQgPT0gRXZlbnRGYWtlZCA/ICIgKGZha2VkKSIg
OiAiIjsKKyAgICBpZiAoIWV2ZW50U3RyaW5nLmlzTnVsbCgpKQorICAgICAgICBtX2V2ZW50cy5h
cHBlbmQoU3RyaW5nOjpmb3JtYXQoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPSVzIGtleWNvZGU9
JXggdGV4dD0nJXMnJXMiLCBldmVudFR5cGUsIGV2ZW50LT5rZXl2YWwsIGV2ZW50U3RyaW5nLnV0
ZjgoKS5kYXRhKCksIGZha2VkU3RyaW5nKSk7CisgICAgZWxzZQorICAgICAgICBtX2V2ZW50cy5h
cHBlbmQoU3RyaW5nOjpmb3JtYXQoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPSVzIGtleWNvZGU9
JXglcyIsIGV2ZW50VHlwZSwgZXZlbnQtPmtleXZhbCwgZmFrZWRTdHJpbmcpKTsKK30KKwordm9p
ZCBJbnB1dE1ldGhvZEZpbHRlcjo6bG9nSGFuZGxlS2V5Ym9hcmRFdmVudFdpdGhDb21wb3NpdGlv
blJlc3VsdHNGb3JUZXN0aW5nKEdka0V2ZW50S2V5KiBldmVudCwgUmVzdWx0c1RvU2VuZCByZXN1
bHRzVG9TZW5kLCBFdmVudEZha2VkRm9yQ29tcG9zaXRpb24gZmFrZWQpCit7CisgICAgY29uc3Qg
Y2hhciogZXZlbnRUeXBlID0gZXZlbnQtPnR5cGUgPT0gR0RLX0tFWV9SRUxFQVNFID8gInJlbGVh
c2UiIDogInByZXNzIjsKKyAgICBjb25zdCBjaGFyKiBmYWtlZFN0cmluZyA9IGZha2VkID09IEV2
ZW50RmFrZWQgPyAiIChmYWtlZCkiIDogIiI7CisgICAgbV9ldmVudHMuYXBwZW5kKFN0cmluZzo6
Zm9ybWF0KCJzZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzIHR5cGU9JXMga2V5Y29k
ZT0ldSVzIiwgZXZlbnRUeXBlLCBldmVudC0+a2V5dmFsLCBmYWtlZFN0cmluZykpOworCisgICAg
aWYgKHJlc3VsdHNUb1NlbmQgJiBDb21wb3NpdGlvbiAmJiAhbV9jb25maXJtZWRDb21wb3NpdGlv
bi5pc051bGwoKSkKKyAgICAgICAgbG9nQ29uZmlybUNvbXBvc2l0aW9uRm9yVGVzdGluZygpOwor
ICAgIGlmIChyZXN1bHRzVG9TZW5kICYgUHJlZWRpdCAmJiAhbV9wcmVlZGl0LmlzTnVsbCgpKQor
ICAgICAgICBsb2dTZXRQcmVlZGl0Rm9yVGVzdGluZygpOworfQorCit2b2lkIElucHV0TWV0aG9k
RmlsdGVyOjpsb2dDb25maXJtQ29tcG9zaXRpb25Gb3JUZXN0aW5nKCkKK3sKKyAgICBpZiAobV9j
b25maXJtZWRDb21wb3NpdGlvbi5pc0VtcHR5KCkpCisgICAgICAgIG1fZXZlbnRzLmFwcGVuZChT
dHJpbmcoImNvbmZpcm1DdXJyZW50Y29tcG9zaXRpb24iKSk7CisgICAgZWxzZQorICAgICAgICBt
X2V2ZW50cy5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoImNvbmZpcm1Db21wb3NpdGlvbiAnJXMnIiwg
bV9jb25maXJtZWRDb21wb3NpdGlvbi51dGY4KCkuZGF0YSgpKSk7Cit9CisKK3ZvaWQgSW5wdXRN
ZXRob2RGaWx0ZXI6OmxvZ1NldFByZWVkaXRGb3JUZXN0aW5nKCkKK3sKKyAgICBtX2V2ZW50cy5h
cHBlbmQoU3RyaW5nOjpmb3JtYXQoInNldFByZWVkaXQgdGV4dD0nJXMnIGN1cnNvck9mZnNldD0l
aSIsIG1fcHJlZWRpdC51dGY4KCkuZGF0YSgpLCBtX2N1cnNvck9mZnNldCkpOworfQorI2VuZGlm
IC8vIEVOQUJMRShBUElfVEVTVFMpCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9JbnB1dE1ldGhvZEZpbHRlci5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9JbnB1dE1ldGhvZEZpbHRlci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZGU4M2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0lucHV0TWV0aG9kRmlsdGVyLmgKQEAgLTAsMCArMSwx
MjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQgSWdhbGlhIFMuTC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRl
ZiBJbnB1dE1ldGhvZEZpbHRlcl9oCisjZGVmaW5lIElucHV0TWV0aG9kRmlsdGVyX2gKKworI2lu
Y2x1ZGUgPFdlYkNvcmUvSW50UG9pbnQuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
KyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CisKK3R5cGVkZWYgc3RydWN0IF9HZGtFdmVudEtleSBHZGtFdmVudEtleTsKK3R5
cGVkZWYgc3RydWN0IF9HdGtJTUNvbnRleHQgR3RrSU1Db250ZXh0OworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CitjbGFzcyBJbnRSZWN0OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
V2ViUGFnZVByb3h5OworCitjbGFzcyBJbnB1dE1ldGhvZEZpbHRlciB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoSW5wdXRNZXRob2RGaWx0ZXIpOworcHVibGljOgorICAgIGVudW0gRXZlbnRG
YWtlZEZvckNvbXBvc2l0aW9uIHsKKyAgICAgICAgRXZlbnRGYWtlZCwKKyAgICAgICAgRXZlbnRO
b3RGYWtlZAorICAgIH07CisKKyAgICBJbnB1dE1ldGhvZEZpbHRlcigpOworICAgIH5JbnB1dE1l
dGhvZEZpbHRlcigpOworCisgICAgR3RrSU1Db250ZXh0KiBjb250ZXh0KCkgY29uc3QgeyByZXR1
cm4gbV9jb250ZXh0LmdldCgpOyB9CisKKyAgICB2b2lkIHNldFBhZ2UoV2ViUGFnZVByb3h5KiBw
YWdlKSB7IG1fcGFnZSA9IHBhZ2U7IH0KKworICAgIHZvaWQgc2V0RW5hYmxlZChib29sKTsKKyAg
ICB2b2lkIHNldEN1cnNvclJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworCisgICAgdm9p
ZCBmaWx0ZXJLZXlFdmVudChHZGtFdmVudEtleSopOworICAgIHZvaWQgbm90aWZ5Rm9jdXNlZElu
KCk7CisgICAgdm9pZCBub3RpZnlGb2N1c2VkT3V0KCk7CisgICAgdm9pZCBub3RpZnlNb3VzZUJ1
dHRvblByZXNzKCk7CisKKyNpZiBFTkFCTEUoQVBJX1RFU1RTKQorICAgIHZvaWQgc2V0VGVzdGlu
Z01vZGUoYm9vbCBlbmFibGUpIHsgbV90ZXN0aW5nTW9kZSA9IGVuYWJsZTsgfQorICAgIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBldmVudHMoKSBjb25zdCB7IHJldHVybiBtX2V2ZW50czsgfQorI2Vu
ZGlmCisKK3ByaXZhdGU6CisgICAgZW51bSBSZXN1bHRzVG9TZW5kIHsKKyAgICAgICAgUHJlZWRp
dCA9IDEgPDwgMSwKKyAgICAgICAgQ29tcG9zaXRpb24gPSAxIDw8IDIsCisgICAgICAgIFByZWVk
aXRBbmRDb21wb3NpdGlvbiA9IFByZWVkaXQgfCBDb21wb3NpdGlvbgorICAgIH07CisKKyAgICBz
dGF0aWMgdm9pZCBoYW5kbGVDb21taXRDYWxsYmFjayhJbnB1dE1ldGhvZEZpbHRlciosIGNvbnN0
IGNoYXIqIGNvbXBvc2l0aW9uU3RyaW5nKTsKKyAgICBzdGF0aWMgdm9pZCBoYW5kbGVQcmVlZGl0
U3RhcnRDYWxsYmFjayhJbnB1dE1ldGhvZEZpbHRlciopOworICAgIHN0YXRpYyB2b2lkIGhhbmRs
ZVByZWVkaXRDaGFuZ2VkQ2FsbGJhY2soSW5wdXRNZXRob2RGaWx0ZXIqKTsKKyAgICBzdGF0aWMg
dm9pZCBoYW5kbGVQcmVlZGl0RW5kQ2FsbGJhY2soSW5wdXRNZXRob2RGaWx0ZXIqKTsKKworICAg
IHZvaWQgaGFuZGxlQ29tbWl0KGNvbnN0IGNoYXIqIGNvbXBvc2l0aW9uU3RyaW5nKTsKKyAgICB2
b2lkIGhhbmRsZVByZWVkaXRDaGFuZ2VkKCk7CisgICAgdm9pZCBoYW5kbGVQcmVlZGl0U3RhcnQo
KTsKKyAgICB2b2lkIGhhbmRsZVByZWVkaXRFbmQoKTsKKworICAgIHZvaWQgaGFuZGxlS2V5Ym9h
cmRFdmVudChHZGtFdmVudEtleSosIGNvbnN0IFN0cmluZyYgZXZlbnRTdHJpbmcgPSBTdHJpbmco
KSwgRXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uID0gRXZlbnROb3RGYWtlZCk7CisgICAgdm9pZCBo
YW5kbGVLZXlib2FyZEV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cyhHZGtFdmVudEtleSosIFJl
c3VsdHNUb1NlbmQgPSBQcmVlZGl0QW5kQ29tcG9zaXRpb24sIEV2ZW50RmFrZWRGb3JDb21wb3Np
dGlvbiA9IEV2ZW50Tm90RmFrZWQpOworCisgICAgdm9pZCBzZW5kQ29tcG9zaXRpb25BbmRQcmVl
ZGl0V2l0aEZha2VLZXlFdmVudHMoUmVzdWx0c1RvU2VuZCk7CisgICAgdm9pZCBjb25maXJtQ29t
cG9zaXRpb24oKTsKKyAgICB2b2lkIHVwZGF0ZVByZWVkaXQoKTsKKyAgICB2b2lkIGNvbmZpcm1D
dXJyZW50Q29tcG9zaXRpb24oKTsKKyAgICB2b2lkIGNhbmNlbENvbnRleHRDb21wb3NpdGlvbigp
OworCisjaWYgRU5BQkxFKEFQSV9URVNUUykKKyAgICB2b2lkIGxvZ0hhbmRsZUtleWJvYXJkRXZl
bnRGb3JUZXN0aW5nKEdka0V2ZW50S2V5KiwgY29uc3QgU3RyaW5nJiwgRXZlbnRGYWtlZEZvckNv
bXBvc2l0aW9uKTsKKyAgICB2b2lkIGxvZ0hhbmRsZUtleWJvYXJkRXZlbnRXaXRoQ29tcG9zaXRp
b25SZXN1bHRzRm9yVGVzdGluZyhHZGtFdmVudEtleSosIFJlc3VsdHNUb1NlbmQsIEV2ZW50RmFr
ZWRGb3JDb21wb3NpdGlvbik7CisgICAgdm9pZCBsb2dDb25maXJtQ29tcG9zaXRpb25Gb3JUZXN0
aW5nKCk7CisgICAgdm9pZCBsb2dTZXRQcmVlZGl0Rm9yVGVzdGluZygpOworI2VuZGlmCisKKyAg
ICBHUmVmUHRyPEd0a0lNQ29udGV4dD4gbV9jb250ZXh0OworICAgIFdlYlBhZ2VQcm94eSogbV9w
YWdlOworICAgIHVuc2lnbmVkIG1fZW5hYmxlZCA6IDE7CisgICAgdW5zaWduZWQgbV9jb21wb3Np
bmdUZXh0Q3VycmVudGx5IDogMTsKKyAgICB1bnNpZ25lZCBtX2ZpbHRlcmluZ0tleUV2ZW50IDog
MTsKKyAgICB1bnNpZ25lZCBtX3ByZWVkaXRDaGFuZ2VkIDogMTsKKyAgICB1bnNpZ25lZCBtX3By
ZXZlbnROZXh0Q29tbWl0IDogMTsKKyAgICB1bnNpZ25lZCBtX2p1c3RTZW50RmFrZUtleVVwIDog
MTsKKyAgICBpbnQgbV9jdXJzb3JPZmZzZXQ7CisgICAgdW5zaWduZWQgbV9sYXN0RmlsdGVyZWRL
ZXlQcmVzc0NvZGVXaXRoTm9SZXN1bHRzOworICAgIFdlYkNvcmU6OkludFBvaW50IG1fbGFzdENh
cmVMb2NhdGlvbjsKKyAgICBTdHJpbmcgbV9jb25maXJtZWRDb21wb3NpdGlvbjsKKyAgICBTdHJp
bmcgbV9wcmVlZGl0OworCisjaWYgRU5BQkxFKEFQSV9URVNUUykKKyAgICBib29sIG1fdGVzdGlu
Z01vZGU7CisgICAgVmVjdG9yPFN0cmluZz4gbV9ldmVudHM7CisjZW5kaWYKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gSW5wdXRNZXRob2RGaWx0ZXJfaApkaWZmIC0t
Z2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDJiYTc3NmYuLjg1
YzgwMDYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyNiBAQAorMjAxNC0xMC0yMCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2Fy
Y2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gTW92ZSBHdGtJbnB1dE1ldGhvZEZpbHRl
ciBmcm9tIFBsYXRmb3JtIHRvIFdlYktpdDIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzNzg4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE1vdmUgSW5wdXRNZXRob2RGaWx0ZXIgdGVzdCBmcm9tIFdlYkNv
cmUgdGVzdHMgdG8gV2ViS2l0MiB0ZXN0cworICAgICAgICBhbmQgYWRhcHQgaXQgdG8gdXNlIHRo
ZSBuZXcgSW5wdXRNZXRob2RGaWx0ZXIgV2ViS2l0IGNsYXNzLiBJbnN0ZWFkCisgICAgICAgIG9m
IGhhdmluZyB2aXJ0dWFsIG1ldGhvZHMganVzdCBmb3IgdGVzdGluZywgaXQgaGFzIGEgdGVzdGlu
ZyBtb2RlCisgICAgICAgIHRoYXQgbG9ncyB0aGUgZXZlbnRzLgorCisgICAgICAgICogVGVzdFdl
YktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdDIvZ3RrL0lucHV0TWV0aG9kRmlsdGVyLmNwcDogUmVuYW1lZCBmcm9tIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9ndGsvSW5wdXRNZXRob2RGaWx0ZXIuY3BwLgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6VGVzdElucHV0TWV0aG9kRmlsdGVyOjpUZXN0SW5wdXRNZXRo
b2RGaWx0ZXIpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VGVzdElucHV0TWV0aG9kRmlsdGVy
Ojp+VGVzdElucHV0TWV0aG9kRmlsdGVyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRlc3RJ
bnB1dE1ldGhvZEZpbHRlcjo6c2VuZEtleUV2ZW50VG9GaWx0ZXIpOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6VGVzdElucHV0TWV0aG9kRmlsdGVyOjpzZW5kUHJlc3NBbmRSZWxlYXNlS2V5RXZl
bnRQYWlyVG9GaWx0ZXIpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjp0ZW1wb3JhcnlHZXRQcmVlZGl0U3RyaW5nT3ZlcnJpZGUpOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6dGVtcG9yYXJ5UmVzZXRPdmVycmlkZSk6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjp2ZXJpZnlDYW5jZWxlZENvbXBvc2l0aW9uKToKKwogMjAxNC0xMC0yMCAg
VGFuYXkgQyAgPHRhbmF5LmNAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0dUS11bTWluaWJyb3dz
ZXJdIEVzY2FwZSBrZXkgZG9lcyBub3QgaGlkZSB0aGUgc2VhcmNoIGJveApkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFrZSBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggYmFlODRkMy4uYWE5NzA3YSAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC05OCw2ICs5OCw3IEBAIGFkZF9leGVjdXRhYmxl
KFRlc3RXZWJLaXQyCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViS2l0Mi9XS1N0
cmluZy5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJLaXQyL1dLU3RyaW5n
SlNTdHJpbmcuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViS2l0Mi9XS1VS
TC5jcHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJLaXQyL2d0ay9JbnB1dE1l
dGhvZEZpbHRlci5jcHAKICkKIAogdGFyZ2V0X2xpbmtfbGlicmFyaWVzKFRlc3RXZWJLaXQyICR7
dGVzdF93ZWJraXQyX2FwaV9MSUJSQVJJRVN9KQpAQCAtMTA2LDEyICsxMDcsNiBAQCBzZXRfdGVz
dHNfcHJvcGVydGllcyhUZXN0V2ViS2l0MiBQUk9QRVJUSUVTIFRJTUVPVVQgNjApCiBzZXRfdGFy
Z2V0X3Byb3BlcnRpZXMoVGVzdFdlYktpdDIgUFJPUEVSVElFUyBSVU5USU1FX09VVFBVVF9ESVJF
Q1RPUlkgJHtURVNUV0VCS0lUQVBJX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWX0vV2ViS2l0MikK
IAogc2V0KFRlc3RXZWJDb3JlR3RrX1NPVVJDRVMKLSAgICAke1dFQkNPUkVfRElSfS9wbGF0Zm9y
bS9ncmFwaGljcy9JbnRQb2ludC5jcHAKLSAgICAke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFw
aGljcy9JbnRSZWN0LmNwcAotICAgICR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL0lu
dFNpemUuY3BwCi0gICAgJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW50
UmVjdENhaXJvLmNwcAotICAgICR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2d0ay9HdGtJbnB1dE1l
dGhvZEZpbHRlci5jcHAKLSAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL2d0
ay9JbnB1dE1ldGhvZEZpbHRlci5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9X
ZWJDb3JlL2d0ay9Vc2VyQWdlbnRRdWlya3MuY3BwCiApCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9ndGsvSW5wdXRNZXRob2RGaWx0ZXIuY3BwIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2d0ay9JbnB1dE1ldGhvZEZpbHRlci5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzZjNjOTIuLjAwMDAwMDAKLS0tIGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2d0ay9JbnB1dE1ldGhvZEZpbHRlci5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwzMTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRl
ICJXVEZTdHJpbmdVdGlsaXRpZXMuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0d0a0lucHV0TWV0aG9k
RmlsdGVyLmg+Ci0jaW5jbHVkZSA8Z2RrL2dka2tleXN5bXMuaD4KLSNpbmNsdWRlIDxndGsvZ3Rr
Lmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1VuaXF1ZVB0ci5oPgotI2luY2x1ZGUgPHd0Zi9n
b2JqZWN0L0dSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLXVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7Ci0KLWNsYXNz
IFRlc3RJbnB1dE1ldGhvZEZpbHRlciA6IHB1YmxpYyBHdGtJbnB1dE1ldGhvZEZpbHRlciB7Ci1w
dWJsaWM6Ci0gICAgVGVzdElucHV0TWV0aG9kRmlsdGVyKCkKLSAgICAgICAgOiBtX3Rlc3RXaW5k
b3coZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19QT1BVUCkpCi0gICAgewotICAgICAgICBndGtf
d2lkZ2V0X3Nob3cobV90ZXN0V2luZG93LmdldCgpKTsKLSAgICAgICAgc2V0V2lkZ2V0KG1fdGVz
dFdpbmRvdy5nZXQoKSk7Ci0KLSAgICAgICAgLy8gRm9jdXMgaW4gaXMgbmVjZXNzYXJ5IHRvIGFj
dGl2YXRlIHRoZSBkZWZhdWx0IGlucHV0IG1ldGhvZCBpbiB0aGUgbXVsdGljb250ZXh0LgotICAg
ICAgICBub3RpZnlGb2N1c2VkSW4oKTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8U3RyaW5nPiYgZXZl
bnRzKCkgeyByZXR1cm4gbV9ldmVudHM7IH0KLQotICAgIHZvaWQgc2VuZEtleUV2ZW50VG9GaWx0
ZXIodW5zaWduZWQgZ2RrS2V5VmFsdWUsIEdka0V2ZW50VHlwZSB0eXBlLCB1bnNpZ25lZCBtb2Rp
ZmllcnMgPSAwKQotICAgIHsKLSAgICAgICAgR2RrRXZlbnQqIGV2ZW50ID0gZ2RrX2V2ZW50X25l
dyh0eXBlKTsKLSAgICAgICAgZXZlbnQtPmtleS5rZXl2YWwgPSBnZGtLZXlWYWx1ZTsKLSAgICAg
ICAgZXZlbnQtPmtleS5zdGF0ZSA9IG1vZGlmaWVyczsKLSAgICAgICAgZXZlbnQtPmtleS53aW5k
b3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3cobV90ZXN0V2luZG93LmdldCgpKTsKLSAgICAgICAg
ZXZlbnQtPmtleS50aW1lID0gR0RLX0NVUlJFTlRfVElNRTsKLSAgICAgICAgZ19vYmplY3RfcmVm
KGV2ZW50LT5rZXkud2luZG93KTsKLQotI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgICAg
ICBnZGtfZXZlbnRfc2V0X2RldmljZShldmVudCwgZ2RrX2RldmljZV9tYW5hZ2VyX2dldF9jbGll
bnRfcG9pbnRlcihnZGtfZGlzcGxheV9nZXRfZGV2aWNlX21hbmFnZXIoZ2RrX2Rpc3BsYXlfZ2V0
X2RlZmF1bHQoKSkpKTsKLSNlbmRpZgotCi0gICAgICAgIEdVbmlxdWVPdXRQdHI8R2RrS2V5bWFw
S2V5PiBrZXlzOwotICAgICAgICBnaW50IG5LZXlzOwotICAgICAgICBpZiAoZ2RrX2tleW1hcF9n
ZXRfZW50cmllc19mb3Jfa2V5dmFsKGdka19rZXltYXBfZ2V0X2RlZmF1bHQoKSwgZ2RrS2V5VmFs
dWUsICZrZXlzLm91dFB0cigpLCAmbktleXMpKQotICAgICAgICAgICAgZXZlbnQtPmtleS5oYXJk
d2FyZV9rZXljb2RlID0ga2V5cy5nZXQoKVswXS5rZXljb2RlOwotCi0gICAgICAgIGZpbHRlcktl
eUV2ZW50KCZldmVudC0+a2V5KTsKLSAgICAgICAgZ2RrX2V2ZW50X2ZyZWUoZXZlbnQpOwotICAg
IH0KLQotICAgIHZvaWQgc2VuZFByZXNzQW5kUmVsZWFzZUtleUV2ZW50UGFpclRvRmlsdGVyKHVu
c2lnbmVkIGdka0tleVZhbHVlLCB1bnNpZ25lZCBtb2RpZmllcnMgPSAwKQotICAgIHsKLSAgICAg
ICAgc2VuZEtleUV2ZW50VG9GaWx0ZXIoZ2RrS2V5VmFsdWUsIEdES19LRVlfUFJFU1MsIG1vZGlm
aWVycyk7Ci0gICAgICAgIHNlbmRLZXlFdmVudFRvRmlsdGVyKGdka0tleVZhbHVlLCBHREtfS0VZ
X1JFTEVBU0UsIG1vZGlmaWVycyk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBi
b29sIHNlbmRTaW1wbGVLZXlFdmVudChHZGtFdmVudEtleSogZXZlbnQsIFdURjo6U3RyaW5nIGV2
ZW50U3RyaW5nLCBFdmVudEZha2VkRm9yQ29tcG9zaXRpb24gZmFrZWQpCi0gICAgewotICAgICAg
ICBjb25zdCBjaGFyKiBldmVudFR5cGUgPSBldmVudC0+dHlwZSA9PSBHREtfS0VZX1JFTEVBU0Ug
PyAicmVsZWFzZSIgOiAicHJlc3MiOwotICAgICAgICBjb25zdCBjaGFyKiBmYWtlZFN0cmluZyA9
IGZha2VkID09IEV2ZW50RmFrZWQgPyAiIChmYWtlZCkiIDogIiI7Ci0gICAgICAgIGlmICghZXZl
bnRTdHJpbmcuaXNOdWxsKCkpCi0gICAgICAgICAgICBtX2V2ZW50cy5hcHBlbmQoU3RyaW5nOjpm
b3JtYXQoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPSVzIGtleWNvZGU9JXggdGV4dD0nJXMnJXMi
LCBldmVudFR5cGUsIGV2ZW50LT5rZXl2YWwsIGV2ZW50U3RyaW5nLnV0ZjgoKS5kYXRhKCksIGZh
a2VkU3RyaW5nKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fZXZlbnRzLmFwcGVuZChT
dHJpbmc6OmZvcm1hdCgic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9JXMga2V5Y29kZT0leCVzIiwg
ZXZlbnRUeXBlLCBldmVudC0+a2V5dmFsLCBmYWtlZFN0cmluZykpOwotCi0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIHZpcnR1YWwgYm9vbCBzZW5kS2V5RXZlbnRXaXRoQ29tcG9z
aXRpb25SZXN1bHRzKEdka0V2ZW50S2V5KiBldmVudCwgUmVzdWx0c1RvU2VuZCByZXN1bHRzVG9T
ZW5kLCBFdmVudEZha2VkRm9yQ29tcG9zaXRpb24gZmFrZWQpCi0gICAgewotICAgICAgICBjb25z
dCBjaGFyKiBldmVudFR5cGUgPSBldmVudC0+dHlwZSA9PSBHREtfS0VZX1JFTEVBU0UgPyAicmVs
ZWFzZSIgOiAicHJlc3MiOwotICAgICAgICBjb25zdCBjaGFyKiBmYWtlZFN0cmluZyA9IGZha2Vk
ID09IEV2ZW50RmFrZWQgPyAiIChmYWtlZCkiIDogIiI7Ci0gICAgICAgIG1fZXZlbnRzLmFwcGVu
ZChTdHJpbmc6OmZvcm1hdCgic2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cyB0eXBl
PSVzIGtleWNvZGU9JXUlcyIsIGV2ZW50VHlwZSwgZXZlbnQtPmtleXZhbCwgZmFrZWRTdHJpbmcp
KTsKLQotICAgICAgICBpZiAocmVzdWx0c1RvU2VuZCAmIENvbXBvc2l0aW9uICYmICFtX2NvbmZp
cm1lZENvbXBvc2l0aW9uLmlzTnVsbCgpKQotICAgICAgICAgICAgY29uZmlybUNvbXBvc2l0aW9u
VGV4dChtX2NvbmZpcm1lZENvbXBvc2l0aW9uKTsKLSAgICAgICAgaWYgKHJlc3VsdHNUb1NlbmQg
JiBQcmVlZGl0ICYmICFtX3ByZWVkaXQuaXNOdWxsKCkpCi0gICAgICAgICAgICBzZXRQcmVlZGl0
KG1fcHJlZWRpdCwgbV9jdXJzb3JPZmZzZXQpOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLQotICAgIHZpcnR1YWwgYm9vbCBjYW5FZGl0KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBjb25maXJtQ29tcG9zaXRpb25UZXh0KFN0
cmluZyB0ZXh0KQotICAgIHsKLSAgICAgICAgbV9ldmVudHMuYXBwZW5kKFN0cmluZzo6Zm9ybWF0
KCJjb25maXJtQ29tcG9zaXRpb24gJyVzJyIsIHRleHQudXRmOCgpLmRhdGEoKSkpOwotICAgIH0K
LQotICAgIHZpcnR1YWwgdm9pZCBjb25maXJtQ3VycmVudENvbXBvc2l0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIG1fZXZlbnRzLmFwcGVuZChTdHJpbmcoImNvbmZpcm1DdXJyZW50Y29tcG9zaXRpb24i
KSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIGNhbmNlbEN1cnJlbnRDb21wb3NpdGlvbigp
Ci0gICAgewotICAgICAgICBtX2V2ZW50cy5hcHBlbmQoU3RyaW5nKCJjYW5jZWxDdXJyZW50Q29t
cG9zaXRpb24iKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHNldFByZWVkaXQoU3RyaW5n
IHByZWVkaXQsIGludCBjdXJzb3JPZmZzZXQpCi0gICAgewotICAgICAgICBtX2V2ZW50cy5hcHBl
bmQoU3RyaW5nOjpmb3JtYXQoInNldFByZWVkaXQgdGV4dD0nJXMnIGN1cnNvck9mZnNldD0laSIs
IHByZWVkaXQudXRmOCgpLmRhdGEoKSwgY3Vyc29yT2Zmc2V0KSk7Ci0gICAgfQotCi1wcml2YXRl
OgotICAgIEdSZWZQdHI8R3RrV2lkZ2V0PiBtX3Rlc3RXaW5kb3c7Ci0gICAgVmVjdG9yPFN0cmlu
Zz4gbV9ldmVudHM7Ci19OwotCi1URVNUKEdUSywgR3RrSW5wdXRNZXRob2RGaWx0ZXJTaW1wbGUp
Ci17Ci0gICAgVGVzdElucHV0TWV0aG9kRmlsdGVyIGlucHV0TWV0aG9kRmlsdGVyOwotICAgIGlu
cHV0TWV0aG9kRmlsdGVyLnNlbmRQcmVzc0FuZFJlbGVhc2VLZXlFdmVudFBhaXJUb0ZpbHRlcihH
REtfS0VZX2cpOwotICAgIGlucHV0TWV0aG9kRmlsdGVyLnNlbmRQcmVzc0FuZFJlbGVhc2VLZXlF
dmVudFBhaXJUb0ZpbHRlcihHREtfS0VZX3QpOwotICAgIGlucHV0TWV0aG9kRmlsdGVyLnNlbmRQ
cmVzc0FuZFJlbGVhc2VLZXlFdmVudFBhaXJUb0ZpbHRlcihHREtfS0VZX2spOwotCi0gICAgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGV2ZW50cyA9IGlucHV0TWV0aG9kRmlsdGVyLmV2ZW50cygpOwot
Ci0gICAgQVNTRVJUX0VRKDYsIGV2ZW50cy5zaXplKCkpOwotICAgIEFTU0VSVF9FUShTdHJpbmco
InNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXByZXNzIGtleWNvZGU9NjcgdGV4dD0nZyciKSwgZXZl
bnRzWzBdKTsKLSAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT1y
ZWxlYXNlIGtleWNvZGU9NjciKSwgZXZlbnRzWzFdKTsKLSAgICBBU1NFUlRfRVEoU3RyaW5nKCJz
ZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT1wcmVzcyBrZXljb2RlPTc0IHRleHQ9J3QnIiksIGV2ZW50
c1syXSk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9cmVs
ZWFzZSBrZXljb2RlPTc0IiksIGV2ZW50c1szXSk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygic2Vu
ZFNpbXBsZUtleUV2ZW50IHR5cGU9cHJlc3Mga2V5Y29kZT02YiB0ZXh0PSdrJyIpLCBldmVudHNb
NF0pOwotICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXJlbGVh
c2Uga2V5Y29kZT02YiIpLCBldmVudHNbNV0pOwotfQotCi1URVNUKEdUSywgR3RrSW5wdXRNZXRo
b2RGaWx0ZXJVbmljb2RlU2VxdWVuY2UpCi17Ci0gICAgVGVzdElucHV0TWV0aG9kRmlsdGVyIGlu
cHV0TWV0aG9kRmlsdGVyOwotCi0gICAgLy8gVGhpcyBpcyBzaW1wbGUgdW5pY29kZSBoZXggZW50
cnkgb2YgdGhlIGNoYXJhY3RlcnMsIHUsIDAsIDAsIGYsIDQgcHJlc3NlZCB3aXRoCi0gICAgLy8g
dGhlIHNoaWZ0IGFuZCBjb250cm9scyBrZXlzIGhlbGQgZG93bi4gSW4gcmVhbGl0eSwgdGhlc2Ug
dmFsdWVzIGFyZSBub3QgdHlwaWNhbAotICAgIC8vIG9mIGFuIGFjdHVhbCBoZXggZW50cnksIGJl
Y2F1c2UgdGhleSdkIGJlIHRyYW5zZm9ybWVkIGJ5IHRoZSBzaGlmdCBtb2RpZmllciBhY2NvcmRp
bmcKLSAgICAvLyB0byB0aGUga2V5Ym9hcmQgbGF5b3V0LiBGb3IgaW5zdGFuY2UsIG9uIGEgVVMg
a2V5Ym9hcmQgYSAwIHdpdGggdGhlIHNoaWZ0IGtleSBwcmVzc2VkCi0gICAgLy8gaXMgYSByaWdo
dCBwYXJlbnRoZXNpcy4gVXNpbmcgdGhlc2UgdmFsdWVzIHByZXZlbnRzIGhhdmluZyB0byB3b3Jr
IG91dCB3aGF0IHRoZQotICAgIC8vIHRyYW5zZm9ybWVkIGNoYXJhY3RlcnMgYXJlIGJhc2VkIG9u
IHRoZSBjdXJyZW50IGtleWJvYXJkIGxheW91dC4KLSAgICBpbnB1dE1ldGhvZEZpbHRlci5zZW5k
S2V5RXZlbnRUb0ZpbHRlcihHREtfS0VZX0NvbnRyb2xfTCwgR0RLX0tFWV9QUkVTUyk7Ci0gICAg
aW5wdXRNZXRob2RGaWx0ZXIuc2VuZEtleUV2ZW50VG9GaWx0ZXIoR0RLX0tFWV9TaGlmdF9MLCBH
REtfS0VZX1BSRVNTLCBHREtfQ09OVFJPTF9NQVNLKTsKLQotICAgIGlucHV0TWV0aG9kRmlsdGVy
LnNlbmRQcmVzc0FuZFJlbGVhc2VLZXlFdmVudFBhaXJUb0ZpbHRlcihHREtfS0VZX1UsIEdES19T
SElGVF9NQVNLIHwgR0RLX0NPTlRST0xfTUFTSyk7Ci0gICAgaW5wdXRNZXRob2RGaWx0ZXIuc2Vu
ZFByZXNzQW5kUmVsZWFzZUtleUV2ZW50UGFpclRvRmlsdGVyKEdES19LRVlfMCwgR0RLX1NISUZU
X01BU0sgfCBHREtfQ09OVFJPTF9NQVNLKTsKLSAgICBpbnB1dE1ldGhvZEZpbHRlci5zZW5kUHJl
c3NBbmRSZWxlYXNlS2V5RXZlbnRQYWlyVG9GaWx0ZXIoR0RLX0tFWV8wLCBHREtfU0hJRlRfTUFT
SyB8IEdES19DT05UUk9MX01BU0spOwotICAgIGlucHV0TWV0aG9kRmlsdGVyLnNlbmRQcmVzc0Fu
ZFJlbGVhc2VLZXlFdmVudFBhaXJUb0ZpbHRlcihHREtfS0VZX0YsIEdES19TSElGVF9NQVNLIHwg
R0RLX0NPTlRST0xfTUFTSyk7Ci0gICAgaW5wdXRNZXRob2RGaWx0ZXIuc2VuZFByZXNzQW5kUmVs
ZWFzZUtleUV2ZW50UGFpclRvRmlsdGVyKEdES19LRVlfNCwgR0RLX1NISUZUX01BU0sgfCBHREtf
Q09OVFJPTF9NQVNLKTsKLQotICAgIGlucHV0TWV0aG9kRmlsdGVyLnNlbmRLZXlFdmVudFRvRmls
dGVyKEdES19LRVlfU2hpZnRfTCwgR0RLX0tFWV9SRUxFQVNFLCBHREtfQ09OVFJPTF9NQVNLIHwg
R0RLX1NISUZUX01BU0spOwotICAgIGlucHV0TWV0aG9kRmlsdGVyLnNlbmRLZXlFdmVudFRvRmls
dGVyKEdES19LRVlfQ29udHJvbF9MLCBHREtfS0VZX1JFTEVBU0UsIEdES19DT05UUk9MX01BU0sp
OwotCi0gICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGV2ZW50cyA9IGlucHV0TWV0aG9kRmlsdGVy
LmV2ZW50cygpOwotICAgIEFTU0VSVF9FUSgyMSwgZXZlbnRzLnNpemUoKSk7Ci0gICAgQVNTRVJU
X0VRKFN0cmluZygic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9cHJlc3Mga2V5Y29kZT1mZmUzIiks
IGV2ZW50c1swXSk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygic2VuZFNpbXBsZUtleUV2ZW50IHR5
cGU9cHJlc3Mga2V5Y29kZT1mZmUxIiksIGV2ZW50c1sxXSk7Ci0gICAgQVNTRVJUX0VRKFN0cmlu
Zygic2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cyB0eXBlPXByZXNzIGtleWNvZGU9
ODUiKSwgZXZlbnRzWzJdKTsKLSAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZXRQcmVlZGl0IHRleHQ9
J3UnIGN1cnNvck9mZnNldD0xIiksIGV2ZW50c1szXSk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygi
c2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9cmVsZWFzZSBrZXljb2RlPTU1IiksIGV2ZW50c1s0XSk7
Ci0gICAgQVNTRVJUX0VRKFN0cmluZygic2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0
cyB0eXBlPXByZXNzIGtleWNvZGU9NDgiKSwgZXZlbnRzWzVdKTsKLSAgICBBU1NFUlRfRVEoU3Ry
aW5nKCJzZXRQcmVlZGl0IHRleHQ9J3UwJyBjdXJzb3JPZmZzZXQ9MiIpLCBldmVudHNbNl0pOwot
ICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXJlbGVhc2Uga2V5
Y29kZT0zMCIpLCBldmVudHNbN10pOwotICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRLZXlFdmVu
dFdpdGhDb21wb3NpdGlvblJlc3VsdHMgdHlwZT1wcmVzcyBrZXljb2RlPTQ4IiksIGV2ZW50c1s4
XSk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygic2V0UHJlZWRpdCB0ZXh0PSd1MDAnIGN1cnNvck9m
ZnNldD0zIiksIGV2ZW50c1s5XSk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygic2VuZFNpbXBsZUtl
eUV2ZW50IHR5cGU9cmVsZWFzZSBrZXljb2RlPTMwIiksIGV2ZW50c1sxMF0pOwotICAgIEFTU0VS
VF9FUShTdHJpbmcoInNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMgdHlwZT1wcmVz
cyBrZXljb2RlPTcwIiksIGV2ZW50c1sxMV0pOwotICAgIEFTU0VSVF9FUShTdHJpbmcoInNldFBy
ZWVkaXQgdGV4dD0ndTAwRicgY3Vyc29yT2Zmc2V0PTQiKSwgZXZlbnRzWzEyXSk7Ci0gICAgQVNT
RVJUX0VRKFN0cmluZygic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9cmVsZWFzZSBrZXljb2RlPTQ2
IiksIGV2ZW50c1sxM10pOwotICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRLZXlFdmVudFdpdGhD
b21wb3NpdGlvblJlc3VsdHMgdHlwZT1wcmVzcyBrZXljb2RlPTUyIiksIGV2ZW50c1sxNF0pOwot
ICAgIEFTU0VSVF9FUShTdHJpbmcoInNldFByZWVkaXQgdGV4dD0ndTAwRjQnIGN1cnNvck9mZnNl
dD01IiksIGV2ZW50c1sxNV0pOwotICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlF
dmVudCB0eXBlPXJlbGVhc2Uga2V5Y29kZT0zNCIpLCBldmVudHNbMTZdKTsKLSAgICBBU1NFUlRf
RVEoU3RyaW5nKCJjb25maXJtQ29tcG9zaXRpb24gJ8O0JyIpLCBldmVudHNbMTddKTsKLSAgICBB
U1NFUlRfRVEoU3RyaW5nKCJzZXRQcmVlZGl0IHRleHQ9JycgY3Vyc29yT2Zmc2V0PTAiKSwgZXZl
bnRzWzE4XSk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9
cmVsZWFzZSBrZXljb2RlPWZmZTEiKSwgZXZlbnRzWzE5XSk7Ci0gICAgQVNTRVJUX0VRKFN0cmlu
Zygic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9cmVsZWFzZSBrZXljb2RlPWZmZTMiKSwgZXZlbnRz
WzIwXSk7Ci19Ci0KLVRFU1QoR1RLLCBHdGtJbnB1dE1ldGhvZEZpbHRlckNvbXBvc2VLZXkpCi17
Ci0gICAgVGVzdElucHV0TWV0aG9kRmlsdGVyIGlucHV0TWV0aG9kRmlsdGVyOwotCi0gICAgaW5w
dXRNZXRob2RGaWx0ZXIuc2VuZFByZXNzQW5kUmVsZWFzZUtleUV2ZW50UGFpclRvRmlsdGVyKEdE
S19LRVlfTXVsdGlfa2V5KTsKLSAgICBpbnB1dE1ldGhvZEZpbHRlci5zZW5kUHJlc3NBbmRSZWxl
YXNlS2V5RXZlbnRQYWlyVG9GaWx0ZXIoR0RLX0tFWV9hcG9zdHJvcGhlKTsKLSAgICBpbnB1dE1l
dGhvZEZpbHRlci5zZW5kUHJlc3NBbmRSZWxlYXNlS2V5RXZlbnRQYWlyVG9GaWx0ZXIoR0RLX0tF
WV9vKTsKLQotICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBldmVudHMgPSBpbnB1dE1ldGhvZEZp
bHRlci5ldmVudHMoKTsKLSAgICBBU1NFUlRfRVEoNSwgZXZlbnRzLnNpemUoKSk7Ci0gICAgQVNT
RVJUX0VRKFN0cmluZygic2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cyB0eXBlPXBy
ZXNzIGtleWNvZGU9MzkiKSwgZXZlbnRzWzBdKTsKLSAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZXRQ
cmVlZGl0IHRleHQ9JycgY3Vyc29yT2Zmc2V0PTAiKSwgZXZlbnRzWzFdKTsKLSAgICBBU1NFUlRf
RVEoU3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT1yZWxlYXNlIGtleWNvZGU9MjciKSwg
ZXZlbnRzWzJdKTsKLSAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlw
ZT1wcmVzcyBrZXljb2RlPTZmIHRleHQ9J8OzJyIpLCBldmVudHNbM10pOwotICAgIEFTU0VSVF9F
UShTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXJlbGVhc2Uga2V5Y29kZT02ZiIpLCBl
dmVudHNbNF0pOwotfQotCi10eXBlZGVmIHZvaWQgKCpHZXRQcmVlZGl0U3RyaW5nQ2FsbGJhY2sp
IChHdGtJTUNvbnRleHQqLCBnY2hhcioqLCBQYW5nb0F0dHJMaXN0KiosIGludCopOwotc3RhdGlj
IHZvaWQgdGVtcG9yYXJ5R2V0UHJlZWRpdFN0cmluZ092ZXJyaWRlKEd0a0lNQ29udGV4dCosIGNo
YXIqKiBzdHJpbmcsIFBhbmdvQXR0ckxpc3QqKiBhdHRycywgaW50KiBjdXJzb3JQb3NpdGlvbikK
LXsKLSAgICAqc3RyaW5nID0gZ19zdHJkdXAoInByZWVkaXQgb2YgZG9vbSwgYnJpbmdlciBvZiBj
aGVlc2UiKTsKLSAgICAqY3Vyc29yUG9zaXRpb24gPSAzOwotfQotCi1URVNUKEdUSywgR3RrSW5w
dXRNZXRob2RGaWx0ZXJDb250ZXh0RXZlbnRzV2l0aG91dEtleUV2ZW50cykKLXsKLSAgICBUZXN0
SW5wdXRNZXRob2RGaWx0ZXIgaW5wdXRNZXRob2RGaWx0ZXI7Ci0KLSAgICAvLyBUaGlzIGlzIGEg
Yml0IG9mIGEgaGFjayB0byBhdm9pZCBtb2NraW5nIG91dCB0aGUgZW50aXJlIElucHV0TWV0aG9k
Q29udGV4dCwgYnkKLSAgICAvLyBzaW1wbHkgcmVwbGFjaW5nIHRoZSBnZXRfcHJlZWRpdF9zdHJp
bmcgdmlydHVhbCBtZXRob2QgZm9yIHRoZSBsZW5ndGggb2YgdGhpcyB0ZXN0LgotICAgIEd0a0lN
Q29udGV4dCogY29udGV4dCA9IGlucHV0TWV0aG9kRmlsdGVyLmNvbnRleHQoKTsKLSAgICBHdGtJ
TUNvbnRleHRDbGFzcyogY29udGV4dENsYXNzID0gR1RLX0lNX0NPTlRFWFRfR0VUX0NMQVNTKGNv
bnRleHQpOwotICAgIEdldFByZWVkaXRTdHJpbmdDYWxsYmFjayBwcmV2aW91c0NhbGxiYWNrID0g
Y29udGV4dENsYXNzLT5nZXRfcHJlZWRpdF9zdHJpbmc7Ci0gICAgY29udGV4dENsYXNzLT5nZXRf
cHJlZWRpdF9zdHJpbmcgPSB0ZW1wb3JhcnlHZXRQcmVlZGl0U3RyaW5nT3ZlcnJpZGU7Ci0KLSAg
ICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoY29udGV4dCwgInByZWVkaXQtY2hhbmdlZCIpOwotICAg
IGdfc2lnbmFsX2VtaXRfYnlfbmFtZShjb250ZXh0LCAiY29tbWl0IiwgImNvbW1pdCB0ZXh0Iik7
Ci0KLSAgICBjb250ZXh0Q2xhc3MtPmdldF9wcmVlZGl0X3N0cmluZyA9IHByZXZpb3VzQ2FsbGJh
Y2s7Ci0KLSAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZXZlbnRzID0gaW5wdXRNZXRob2RGaWx0
ZXIuZXZlbnRzKCk7Ci0gICAgQVNTRVJUX0VRKDYsIGV2ZW50cy5zaXplKCkpOwotICAgIEFTU0VS
VF9FUShTdHJpbmcoInNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMgdHlwZT1wcmVz
cyBrZXljb2RlPTE2Nzc3MjE1IChmYWtlZCkiKSwgZXZlbnRzWzBdKTsKLSAgICBBU1NFUlRfRVEo
U3RyaW5nKCJzZXRQcmVlZGl0IHRleHQ9J3ByZWVkaXQgb2YgZG9vbSwgYnJpbmdlciBvZiBjaGVl
c2UnIGN1cnNvck9mZnNldD0zIiksIGV2ZW50c1sxXSk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygi
c2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9cmVsZWFzZSBrZXljb2RlPWZmZmZmZiAoZmFrZWQpIiks
IGV2ZW50c1syXSk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygic2VuZEtleUV2ZW50V2l0aENvbXBv
c2l0aW9uUmVzdWx0cyB0eXBlPXByZXNzIGtleWNvZGU9MTY3NzcyMTUgKGZha2VkKSIpLCBldmVu
dHNbM10pOwotICAgIEFTU0VSVF9FUShTdHJpbmcoImNvbmZpcm1Db21wb3NpdGlvbiAnY29tbWl0
IHRleHQnIiksIGV2ZW50c1s0XSk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygic2VuZFNpbXBsZUtl
eUV2ZW50IHR5cGU9cmVsZWFzZSBrZXljb2RlPWZmZmZmZiAoZmFrZWQpIiksIGV2ZW50c1s1XSk7
Ci19Ci0KLXN0YXRpYyBib29sIGdTYXdDb250ZXh0UmVzZXQgPSBmYWxzZTsKLXR5cGVkZWYgdm9p
ZCAoKlJlc2V0Q2FsbGJhY2spIChHdGtJTUNvbnRleHQqKTsKLXN0YXRpYyB2b2lkIHRlbXBvcmFy
eVJlc2V0T3ZlcnJpZGUoR3RrSU1Db250ZXh0KikKLXsKLSAgICBnU2F3Q29udGV4dFJlc2V0ID0g
dHJ1ZTsKLX0KLQotc3RhdGljIHZvaWQgdmVyaWZ5Q2FuY2VsZWRDb21wb3NpdGlvbihjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgZXZlbnRzKQotewotICAgIEFTU0VSVF9FUSgzLCBldmVudHMuc2l6ZSgp
KTsKLSAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1
bHRzIHR5cGU9cHJlc3Mga2V5Y29kZT0zOSIpLCBldmVudHNbMF0pOwotICAgIEFTU0VSVF9FUShT
dHJpbmcoInNldFByZWVkaXQgdGV4dD0nJyBjdXJzb3JPZmZzZXQ9MCIpLCBldmVudHNbMV0pOwot
ICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXJlbGVhc2Uga2V5
Y29kZT0yNyIpLCBldmVudHNbMl0pOwotICAgIEFTU0VSVChnU2F3Q29udGV4dFJlc2V0KTsKLX0K
LQotVEVTVChHVEssIEd0a0lucHV0TWV0aG9kRmlsdGVyQ29udGV4dEZvY3VzT3V0RHVyaW5nT25n
b2luZ0NvbXBvc2l0aW9uKQotewotICAgIFRlc3RJbnB1dE1ldGhvZEZpbHRlciBpbnB1dE1ldGhv
ZEZpbHRlcjsKLQotICAgIC8vIFNlZSBjb21tZW50IGFib3ZlIGFib3V0IHRoaXMgdGVjaG5pcXVl
LgotICAgIEd0a0lNQ29udGV4dCogY29udGV4dCA9IGlucHV0TWV0aG9kRmlsdGVyLmNvbnRleHQo
KTsKLSAgICBHdGtJTUNvbnRleHRDbGFzcyogY29udGV4dENsYXNzID0gR1RLX0lNX0NPTlRFWFRf
R0VUX0NMQVNTKGNvbnRleHQpOwotICAgIFJlc2V0Q2FsbGJhY2sgcHJldmlvdXNDYWxsYmFjayA9
IGNvbnRleHRDbGFzcy0+cmVzZXQ7Ci0gICAgY29udGV4dENsYXNzLT5yZXNldCA9IHRlbXBvcmFy
eVJlc2V0T3ZlcnJpZGU7Ci0KLSAgICBnU2F3Q29udGV4dFJlc2V0ID0gZmFsc2U7Ci0gICAgaW5w
dXRNZXRob2RGaWx0ZXIuc2VuZFByZXNzQW5kUmVsZWFzZUtleUV2ZW50UGFpclRvRmlsdGVyKEdE
S19LRVlfTXVsdGlfa2V5KTsKLSAgICBpbnB1dE1ldGhvZEZpbHRlci5zZW5kUHJlc3NBbmRSZWxl
YXNlS2V5RXZlbnRQYWlyVG9GaWx0ZXIoR0RLX0tFWV9hcG9zdHJvcGhlKTsKLSAgICBpbnB1dE1l
dGhvZEZpbHRlci5ub3RpZnlGb2N1c2VkT3V0KCk7Ci0KLSAgICB2ZXJpZnlDYW5jZWxlZENvbXBv
c2l0aW9uKGlucHV0TWV0aG9kRmlsdGVyLmV2ZW50cygpKTsKLQotICAgIGNvbnRleHRDbGFzcy0+
cmVzZXQgPSBwcmV2aW91c0NhbGxiYWNrOwotfQotCi1URVNUKEdUSywgR3RrSW5wdXRNZXRob2RG
aWx0ZXJDb250ZXh0TW91c2VDbGlja0R1cmluZ09uZ29pbmdDb21wb3NpdGlvbikKLXsKLSAgICBU
ZXN0SW5wdXRNZXRob2RGaWx0ZXIgaW5wdXRNZXRob2RGaWx0ZXI7Ci0KLSAgICAvLyBTZWUgY29t
bWVudCBhYm92ZSBhYm91dCB0aGlzIHRlY2huaXF1ZS4KLSAgICBHdGtJTUNvbnRleHQqIGNvbnRl
eHQgPSBpbnB1dE1ldGhvZEZpbHRlci5jb250ZXh0KCk7Ci0gICAgR3RrSU1Db250ZXh0Q2xhc3Mq
IGNvbnRleHRDbGFzcyA9IEdUS19JTV9DT05URVhUX0dFVF9DTEFTUyhjb250ZXh0KTsKLSAgICBS
ZXNldENhbGxiYWNrIHByZXZpb3VzQ2FsbGJhY2sgPSBjb250ZXh0Q2xhc3MtPnJlc2V0OwotICAg
IGNvbnRleHRDbGFzcy0+cmVzZXQgPSB0ZW1wb3JhcnlSZXNldE92ZXJyaWRlOwotCi0gICAgZ1Nh
d0NvbnRleHRSZXNldCA9IGZhbHNlOwotICAgIGlucHV0TWV0aG9kRmlsdGVyLnNlbmRQcmVzc0Fu
ZFJlbGVhc2VLZXlFdmVudFBhaXJUb0ZpbHRlcihHREtfS0VZX011bHRpX2tleSk7Ci0gICAgaW5w
dXRNZXRob2RGaWx0ZXIuc2VuZFByZXNzQW5kUmVsZWFzZUtleUV2ZW50UGFpclRvRmlsdGVyKEdE
S19LRVlfYXBvc3Ryb3BoZSk7Ci0gICAgaW5wdXRNZXRob2RGaWx0ZXIubm90aWZ5TW91c2VCdXR0
b25QcmVzcygpOwotCi0gICAgdmVyaWZ5Q2FuY2VsZWRDb21wb3NpdGlvbihpbnB1dE1ldGhvZEZp
bHRlci5ldmVudHMoKSk7Ci0KLSAgICBjb250ZXh0Q2xhc3MtPnJlc2V0ID0gcHJldmlvdXNDYWxs
YmFjazsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL2d0ay9JbnB1dE1ldGhvZEZpbHRlci5jcHAg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvZ3RrL0lucHV0TWV0aG9kRmlsdGVy
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODgxYTQ0Ci0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL2d0ay9JbnB1dE1l
dGhvZEZpbHRlci5jcHAKQEAgLTAsMCArMSwyNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVk
ZSAiV1RGU3RyaW5nVXRpbGl0aWVzLmgiCisjaW5jbHVkZSA8V2ViS2l0L0lucHV0TWV0aG9kRmls
dGVyLmg+CisjaW5jbHVkZSA8Z2RrL2dka2tleXN5bXMuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+
CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1VuaXF1ZVB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nb2Jq
ZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBXZWJLaXQ7CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworY2xhc3MgVGVz
dElucHV0TWV0aG9kRmlsdGVyIDogcHVibGljIElucHV0TWV0aG9kRmlsdGVyIHsKK3B1YmxpYzoK
KyAgICBUZXN0SW5wdXRNZXRob2RGaWx0ZXIoKQorICAgICAgICA6IG1fdGVzdFdpbmRvdyhndGtf
d2luZG93X25ldyhHVEtfV0lORE9XX1BPUFVQKSkKKyAgICB7CisgICAgICAgIHNldFRlc3RpbmdN
b2RlKHRydWUpOworCisgICAgICAgIGd0a193aWRnZXRfc2hvdyhtX3Rlc3RXaW5kb3cpOworICAg
ICAgICBndGtfaW1fY29udGV4dF9zZXRfY2xpZW50X3dpbmRvdyhjb250ZXh0KCksIGd0a193aWRn
ZXRfZ2V0X3dpbmRvdyhtX3Rlc3RXaW5kb3cpKTsKKworICAgICAgICAvLyBGb2N1cyBpbiBpcyBu
ZWNlc3NhcnkgdG8gYWN0aXZhdGUgdGhlIGRlZmF1bHQgaW5wdXQgbWV0aG9kIGluIHRoZSBtdWx0
aWNvbnRleHQuCisgICAgICAgIG5vdGlmeUZvY3VzZWRJbigpOworICAgIH0KKworICAgIH5UZXN0
SW5wdXRNZXRob2RGaWx0ZXIoKQorICAgIHsKKyAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KG1f
dGVzdFdpbmRvdyk7CisgICAgfQorCisgICAgdm9pZCBzZW5kS2V5RXZlbnRUb0ZpbHRlcih1bnNp
Z25lZCBnZGtLZXlWYWx1ZSwgR2RrRXZlbnRUeXBlIHR5cGUsIHVuc2lnbmVkIG1vZGlmaWVycyA9
IDApCisgICAgeworICAgICAgICBHZGtFdmVudCogZXZlbnQgPSBnZGtfZXZlbnRfbmV3KHR5cGUp
OworICAgICAgICBldmVudC0+a2V5LmtleXZhbCA9IGdka0tleVZhbHVlOworICAgICAgICBldmVu
dC0+a2V5LnN0YXRlID0gbW9kaWZpZXJzOworICAgICAgICBldmVudC0+a2V5LndpbmRvdyA9IGd0
a193aWRnZXRfZ2V0X3dpbmRvdyhtX3Rlc3RXaW5kb3cpOworICAgICAgICBldmVudC0+a2V5LnRp
bWUgPSBHREtfQ1VSUkVOVF9USU1FOworICAgICAgICBnX29iamVjdF9yZWYoZXZlbnQtPmtleS53
aW5kb3cpOworICAgICAgICBnZGtfZXZlbnRfc2V0X2RldmljZShldmVudCwgZ2RrX2RldmljZV9t
YW5hZ2VyX2dldF9jbGllbnRfcG9pbnRlcihnZGtfZGlzcGxheV9nZXRfZGV2aWNlX21hbmFnZXIo
Z2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSkpKTsKKworICAgICAgICBHVW5pcXVlT3V0UHRyPEdk
a0tleW1hcEtleT4ga2V5czsKKyAgICAgICAgZ2ludCBuS2V5czsKKyAgICAgICAgaWYgKGdka19r
ZXltYXBfZ2V0X2VudHJpZXNfZm9yX2tleXZhbChnZGtfa2V5bWFwX2dldF9kZWZhdWx0KCksIGdk
a0tleVZhbHVlLCAma2V5cy5vdXRQdHIoKSwgJm5LZXlzKSkKKyAgICAgICAgICAgIGV2ZW50LT5r
ZXkuaGFyZHdhcmVfa2V5Y29kZSA9IGtleXMuZ2V0KClbMF0ua2V5Y29kZTsKKworICAgICAgICBm
aWx0ZXJLZXlFdmVudCgmZXZlbnQtPmtleSk7CisgICAgICAgIGdka19ldmVudF9mcmVlKGV2ZW50
KTsKKyAgICB9CisKKyAgICB2b2lkIHNlbmRQcmVzc0FuZFJlbGVhc2VLZXlFdmVudFBhaXJUb0Zp
bHRlcih1bnNpZ25lZCBnZGtLZXlWYWx1ZSwgdW5zaWduZWQgbW9kaWZpZXJzID0gMCkKKyAgICB7
CisgICAgICAgIHNlbmRLZXlFdmVudFRvRmlsdGVyKGdka0tleVZhbHVlLCBHREtfS0VZX1BSRVNT
LCBtb2RpZmllcnMpOworICAgICAgICBzZW5kS2V5RXZlbnRUb0ZpbHRlcihnZGtLZXlWYWx1ZSwg
R0RLX0tFWV9SRUxFQVNFLCBtb2RpZmllcnMpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBHdGtX
aWRnZXQqIG1fdGVzdFdpbmRvdzsKK307CisKK1RFU1QoV2ViS2l0MiwgSW5wdXRNZXRob2RGaWx0
ZXJTaW1wbGUpCit7CisgICAgVGVzdElucHV0TWV0aG9kRmlsdGVyIGlucHV0TWV0aG9kRmlsdGVy
OworICAgIGlucHV0TWV0aG9kRmlsdGVyLnNlbmRQcmVzc0FuZFJlbGVhc2VLZXlFdmVudFBhaXJU
b0ZpbHRlcihHREtfS0VZX2cpOworICAgIGlucHV0TWV0aG9kRmlsdGVyLnNlbmRQcmVzc0FuZFJl
bGVhc2VLZXlFdmVudFBhaXJUb0ZpbHRlcihHREtfS0VZX3QpOworICAgIGlucHV0TWV0aG9kRmls
dGVyLnNlbmRQcmVzc0FuZFJlbGVhc2VLZXlFdmVudFBhaXJUb0ZpbHRlcihHREtfS0VZX2spOwor
CisgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGV2ZW50cyA9IGlucHV0TWV0aG9kRmlsdGVyLmV2
ZW50cygpOworCisgICAgQVNTRVJUX0VRKDYsIGV2ZW50cy5zaXplKCkpOworICAgIEFTU0VSVF9F
UShTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXByZXNzIGtleWNvZGU9NjcgdGV4dD0n
ZyciKSwgZXZlbnRzWzBdKTsKKyAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZl
bnQgdHlwZT1yZWxlYXNlIGtleWNvZGU9NjciKSwgZXZlbnRzWzFdKTsKKyAgICBBU1NFUlRfRVEo
U3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT1wcmVzcyBrZXljb2RlPTc0IHRleHQ9J3Qn
IiksIGV2ZW50c1syXSk7CisgICAgQVNTRVJUX0VRKFN0cmluZygic2VuZFNpbXBsZUtleUV2ZW50
IHR5cGU9cmVsZWFzZSBrZXljb2RlPTc0IiksIGV2ZW50c1szXSk7CisgICAgQVNTRVJUX0VRKFN0
cmluZygic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9cHJlc3Mga2V5Y29kZT02YiB0ZXh0PSdrJyIp
LCBldmVudHNbNF0pOworICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0
eXBlPXJlbGVhc2Uga2V5Y29kZT02YiIpLCBldmVudHNbNV0pOworfQorCitURVNUKFdlYktpdDIs
IElucHV0TWV0aG9kRmlsdGVyVW5pY29kZVNlcXVlbmNlKQoreworICAgIFRlc3RJbnB1dE1ldGhv
ZEZpbHRlciBpbnB1dE1ldGhvZEZpbHRlcjsKKworICAgIC8vIFRoaXMgaXMgc2ltcGxlIHVuaWNv
ZGUgaGV4IGVudHJ5IG9mIHRoZSBjaGFyYWN0ZXJzLCB1LCAwLCAwLCBmLCA0IHByZXNzZWQgd2l0
aAorICAgIC8vIHRoZSBzaGlmdCBhbmQgY29udHJvbHMga2V5cyBoZWxkIGRvd24uIEluIHJlYWxp
dHksIHRoZXNlIHZhbHVlcyBhcmUgbm90IHR5cGljYWwKKyAgICAvLyBvZiBhbiBhY3R1YWwgaGV4
IGVudHJ5LCBiZWNhdXNlIHRoZXknZCBiZSB0cmFuc2Zvcm1lZCBieSB0aGUgc2hpZnQgbW9kaWZp
ZXIgYWNjb3JkaW5nCisgICAgLy8gdG8gdGhlIGtleWJvYXJkIGxheW91dC4gRm9yIGluc3RhbmNl
LCBvbiBhIFVTIGtleWJvYXJkIGEgMCB3aXRoIHRoZSBzaGlmdCBrZXkgcHJlc3NlZAorICAgIC8v
IGlzIGEgcmlnaHQgcGFyZW50aGVzaXMuIFVzaW5nIHRoZXNlIHZhbHVlcyBwcmV2ZW50cyBoYXZp
bmcgdG8gd29yayBvdXQgd2hhdCB0aGUKKyAgICAvLyB0cmFuc2Zvcm1lZCBjaGFyYWN0ZXJzIGFy
ZSBiYXNlZCBvbiB0aGUgY3VycmVudCBrZXlib2FyZCBsYXlvdXQuCisgICAgaW5wdXRNZXRob2RG
aWx0ZXIuc2VuZEtleUV2ZW50VG9GaWx0ZXIoR0RLX0tFWV9Db250cm9sX0wsIEdES19LRVlfUFJF
U1MpOworICAgIGlucHV0TWV0aG9kRmlsdGVyLnNlbmRLZXlFdmVudFRvRmlsdGVyKEdES19LRVlf
U2hpZnRfTCwgR0RLX0tFWV9QUkVTUywgR0RLX0NPTlRST0xfTUFTSyk7CisKKyAgICBpbnB1dE1l
dGhvZEZpbHRlci5zZW5kUHJlc3NBbmRSZWxlYXNlS2V5RXZlbnRQYWlyVG9GaWx0ZXIoR0RLX0tF
WV9VLCBHREtfU0hJRlRfTUFTSyB8IEdES19DT05UUk9MX01BU0spOworICAgIGlucHV0TWV0aG9k
RmlsdGVyLnNlbmRQcmVzc0FuZFJlbGVhc2VLZXlFdmVudFBhaXJUb0ZpbHRlcihHREtfS0VZXzAs
IEdES19TSElGVF9NQVNLIHwgR0RLX0NPTlRST0xfTUFTSyk7CisgICAgaW5wdXRNZXRob2RGaWx0
ZXIuc2VuZFByZXNzQW5kUmVsZWFzZUtleUV2ZW50UGFpclRvRmlsdGVyKEdES19LRVlfMCwgR0RL
X1NISUZUX01BU0sgfCBHREtfQ09OVFJPTF9NQVNLKTsKKyAgICBpbnB1dE1ldGhvZEZpbHRlci5z
ZW5kUHJlc3NBbmRSZWxlYXNlS2V5RXZlbnRQYWlyVG9GaWx0ZXIoR0RLX0tFWV9GLCBHREtfU0hJ
RlRfTUFTSyB8IEdES19DT05UUk9MX01BU0spOworICAgIGlucHV0TWV0aG9kRmlsdGVyLnNlbmRQ
cmVzc0FuZFJlbGVhc2VLZXlFdmVudFBhaXJUb0ZpbHRlcihHREtfS0VZXzQsIEdES19TSElGVF9N
QVNLIHwgR0RLX0NPTlRST0xfTUFTSyk7CisKKyAgICBpbnB1dE1ldGhvZEZpbHRlci5zZW5kS2V5
RXZlbnRUb0ZpbHRlcihHREtfS0VZX1NoaWZ0X0wsIEdES19LRVlfUkVMRUFTRSwgR0RLX0NPTlRS
T0xfTUFTSyB8IEdES19TSElGVF9NQVNLKTsKKyAgICBpbnB1dE1ldGhvZEZpbHRlci5zZW5kS2V5
RXZlbnRUb0ZpbHRlcihHREtfS0VZX0NvbnRyb2xfTCwgR0RLX0tFWV9SRUxFQVNFLCBHREtfQ09O
VFJPTF9NQVNLKTsKKworICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBldmVudHMgPSBpbnB1dE1l
dGhvZEZpbHRlci5ldmVudHMoKTsKKyAgICBBU1NFUlRfRVEoMjEsIGV2ZW50cy5zaXplKCkpOwor
ICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXByZXNzIGtleWNv
ZGU9ZmZlMyIpLCBldmVudHNbMF0pOworICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVL
ZXlFdmVudCB0eXBlPXByZXNzIGtleWNvZGU9ZmZlMSIpLCBldmVudHNbMV0pOworICAgIEFTU0VS
VF9FUShTdHJpbmcoInNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMgdHlwZT1wcmVz
cyBrZXljb2RlPTg1IiksIGV2ZW50c1syXSk7CisgICAgQVNTRVJUX0VRKFN0cmluZygic2V0UHJl
ZWRpdCB0ZXh0PSd1JyBjdXJzb3JPZmZzZXQ9MSIpLCBldmVudHNbM10pOworICAgIEFTU0VSVF9F
UShTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXJlbGVhc2Uga2V5Y29kZT01NSIpLCBl
dmVudHNbNF0pOworICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRLZXlFdmVudFdpdGhDb21wb3Np
dGlvblJlc3VsdHMgdHlwZT1wcmVzcyBrZXljb2RlPTQ4IiksIGV2ZW50c1s1XSk7CisgICAgQVNT
RVJUX0VRKFN0cmluZygic2V0UHJlZWRpdCB0ZXh0PSd1MCcgY3Vyc29yT2Zmc2V0PTIiKSwgZXZl
bnRzWzZdKTsKKyAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT1y
ZWxlYXNlIGtleWNvZGU9MzAiKSwgZXZlbnRzWzddKTsKKyAgICBBU1NFUlRfRVEoU3RyaW5nKCJz
ZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzIHR5cGU9cHJlc3Mga2V5Y29kZT00OCIp
LCBldmVudHNbOF0pOworICAgIEFTU0VSVF9FUShTdHJpbmcoInNldFByZWVkaXQgdGV4dD0ndTAw
JyBjdXJzb3JPZmZzZXQ9MyIpLCBldmVudHNbOV0pOworICAgIEFTU0VSVF9FUShTdHJpbmcoInNl
bmRTaW1wbGVLZXlFdmVudCB0eXBlPXJlbGVhc2Uga2V5Y29kZT0zMCIpLCBldmVudHNbMTBdKTsK
KyAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRz
IHR5cGU9cHJlc3Mga2V5Y29kZT03MCIpLCBldmVudHNbMTFdKTsKKyAgICBBU1NFUlRfRVEoU3Ry
aW5nKCJzZXRQcmVlZGl0IHRleHQ9J3UwMEYnIGN1cnNvck9mZnNldD00IiksIGV2ZW50c1sxMl0p
OworICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXJlbGVhc2Ug
a2V5Y29kZT00NiIpLCBldmVudHNbMTNdKTsKKyAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kS2V5
RXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzIHR5cGU9cHJlc3Mga2V5Y29kZT01MiIpLCBldmVu
dHNbMTRdKTsKKyAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZXRQcmVlZGl0IHRleHQ9J3UwMEY0JyBj
dXJzb3JPZmZzZXQ9NSIpLCBldmVudHNbMTVdKTsKKyAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5k
U2ltcGxlS2V5RXZlbnQgdHlwZT1yZWxlYXNlIGtleWNvZGU9MzQiKSwgZXZlbnRzWzE2XSk7Cisg
ICAgQVNTRVJUX0VRKFN0cmluZygiY29uZmlybUNvbXBvc2l0aW9uICfDtCciKSwgZXZlbnRzWzE3
XSk7CisgICAgQVNTRVJUX0VRKFN0cmluZygic2V0UHJlZWRpdCB0ZXh0PScnIGN1cnNvck9mZnNl
dD0wIiksIGV2ZW50c1sxOF0pOworICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlF
dmVudCB0eXBlPXJlbGVhc2Uga2V5Y29kZT1mZmUxIiksIGV2ZW50c1sxOV0pOworICAgIEFTU0VS
VF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXJlbGVhc2Uga2V5Y29kZT1mZmUz
IiksIGV2ZW50c1syMF0pOworfQorCitURVNUKFdlYktpdDIsIElucHV0TWV0aG9kRmlsdGVyQ29t
cG9zZUtleSkKK3sKKyAgICBUZXN0SW5wdXRNZXRob2RGaWx0ZXIgaW5wdXRNZXRob2RGaWx0ZXI7
CisKKyAgICBpbnB1dE1ldGhvZEZpbHRlci5zZW5kUHJlc3NBbmRSZWxlYXNlS2V5RXZlbnRQYWly
VG9GaWx0ZXIoR0RLX0tFWV9NdWx0aV9rZXkpOworICAgIGlucHV0TWV0aG9kRmlsdGVyLnNlbmRQ
cmVzc0FuZFJlbGVhc2VLZXlFdmVudFBhaXJUb0ZpbHRlcihHREtfS0VZX2Fwb3N0cm9waGUpOwor
ICAgIGlucHV0TWV0aG9kRmlsdGVyLnNlbmRQcmVzc0FuZFJlbGVhc2VLZXlFdmVudFBhaXJUb0Zp
bHRlcihHREtfS0VZX28pOworCisgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGV2ZW50cyA9IGlu
cHV0TWV0aG9kRmlsdGVyLmV2ZW50cygpOworICAgIEFTU0VSVF9FUSg1LCBldmVudHMuc2l6ZSgp
KTsKKyAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1
bHRzIHR5cGU9cHJlc3Mga2V5Y29kZT0zOSIpLCBldmVudHNbMF0pOworICAgIEFTU0VSVF9FUShT
dHJpbmcoInNldFByZWVkaXQgdGV4dD0nJyBjdXJzb3JPZmZzZXQ9MCIpLCBldmVudHNbMV0pOwor
ICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXJlbGVhc2Uga2V5
Y29kZT0yNyIpLCBldmVudHNbMl0pOworICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVL
ZXlFdmVudCB0eXBlPXByZXNzIGtleWNvZGU9NmYgdGV4dD0nw7MnIiksIGV2ZW50c1szXSk7Cisg
ICAgQVNTRVJUX0VRKFN0cmluZygic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9cmVsZWFzZSBrZXlj
b2RlPTZmIiksIGV2ZW50c1s0XSk7Cit9CisKK3R5cGVkZWYgdm9pZCAoKkdldFByZWVkaXRTdHJp
bmdDYWxsYmFjaykgKEd0a0lNQ29udGV4dCosIGdjaGFyKiosIFBhbmdvQXR0ckxpc3QqKiwgaW50
Kik7CitzdGF0aWMgdm9pZCB0ZW1wb3JhcnlHZXRQcmVlZGl0U3RyaW5nT3ZlcnJpZGUoR3RrSU1D
b250ZXh0KiwgY2hhcioqIHN0cmluZywgUGFuZ29BdHRyTGlzdCoqIGF0dHJzLCBpbnQqIGN1cnNv
clBvc2l0aW9uKQoreworICAgICpzdHJpbmcgPSBnX3N0cmR1cCgicHJlZWRpdCBvZiBkb29tLCBi
cmluZ2VyIG9mIGNoZWVzZSIpOworICAgICpjdXJzb3JQb3NpdGlvbiA9IDM7Cit9CisKK1RFU1Qo
V2ViS2l0MiwgSW5wdXRNZXRob2RGaWx0ZXJDb250ZXh0RXZlbnRzV2l0aG91dEtleUV2ZW50cykK
K3sKKyAgICBUZXN0SW5wdXRNZXRob2RGaWx0ZXIgaW5wdXRNZXRob2RGaWx0ZXI7CisKKyAgICAv
LyBUaGlzIGlzIGEgYml0IG9mIGEgaGFjayB0byBhdm9pZCBtb2NraW5nIG91dCB0aGUgZW50aXJl
IElucHV0TWV0aG9kQ29udGV4dCwgYnkKKyAgICAvLyBzaW1wbHkgcmVwbGFjaW5nIHRoZSBnZXRf
cHJlZWRpdF9zdHJpbmcgdmlydHVhbCBtZXRob2QgZm9yIHRoZSBsZW5ndGggb2YgdGhpcyB0ZXN0
LgorICAgIEd0a0lNQ29udGV4dCogY29udGV4dCA9IGlucHV0TWV0aG9kRmlsdGVyLmNvbnRleHQo
KTsKKyAgICBHdGtJTUNvbnRleHRDbGFzcyogY29udGV4dENsYXNzID0gR1RLX0lNX0NPTlRFWFRf
R0VUX0NMQVNTKGNvbnRleHQpOworICAgIEdldFByZWVkaXRTdHJpbmdDYWxsYmFjayBwcmV2aW91
c0NhbGxiYWNrID0gY29udGV4dENsYXNzLT5nZXRfcHJlZWRpdF9zdHJpbmc7CisgICAgY29udGV4
dENsYXNzLT5nZXRfcHJlZWRpdF9zdHJpbmcgPSB0ZW1wb3JhcnlHZXRQcmVlZGl0U3RyaW5nT3Zl
cnJpZGU7CisKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoY29udGV4dCwgInByZWVkaXQtY2hh
bmdlZCIpOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShjb250ZXh0LCAiY29tbWl0IiwgImNv
bW1pdCB0ZXh0Iik7CisKKyAgICBjb250ZXh0Q2xhc3MtPmdldF9wcmVlZGl0X3N0cmluZyA9IHBy
ZXZpb3VzQ2FsbGJhY2s7CisKKyAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZXZlbnRzID0gaW5w
dXRNZXRob2RGaWx0ZXIuZXZlbnRzKCk7CisgICAgQVNTRVJUX0VRKDYsIGV2ZW50cy5zaXplKCkp
OworICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3Vs
dHMgdHlwZT1wcmVzcyBrZXljb2RlPTE2Nzc3MjE1IChmYWtlZCkiKSwgZXZlbnRzWzBdKTsKKyAg
ICBBU1NFUlRfRVEoU3RyaW5nKCJzZXRQcmVlZGl0IHRleHQ9J3ByZWVkaXQgb2YgZG9vbSwgYnJp
bmdlciBvZiBjaGVlc2UnIGN1cnNvck9mZnNldD0zIiksIGV2ZW50c1sxXSk7CisgICAgQVNTRVJU
X0VRKFN0cmluZygic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9cmVsZWFzZSBrZXljb2RlPWZmZmZm
ZiAoZmFrZWQpIiksIGV2ZW50c1syXSk7CisgICAgQVNTRVJUX0VRKFN0cmluZygic2VuZEtleUV2
ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cyB0eXBlPXByZXNzIGtleWNvZGU9MTY3NzcyMTUgKGZh
a2VkKSIpLCBldmVudHNbM10pOworICAgIEFTU0VSVF9FUShTdHJpbmcoImNvbmZpcm1Db21wb3Np
dGlvbiAnY29tbWl0IHRleHQnIiksIGV2ZW50c1s0XSk7CisgICAgQVNTRVJUX0VRKFN0cmluZygi
c2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9cmVsZWFzZSBrZXljb2RlPWZmZmZmZiAoZmFrZWQpIiks
IGV2ZW50c1s1XSk7Cit9CisKK3N0YXRpYyBib29sIGdTYXdDb250ZXh0UmVzZXQgPSBmYWxzZTsK
K3R5cGVkZWYgdm9pZCAoKlJlc2V0Q2FsbGJhY2spIChHdGtJTUNvbnRleHQqKTsKK3N0YXRpYyB2
b2lkIHRlbXBvcmFyeVJlc2V0T3ZlcnJpZGUoR3RrSU1Db250ZXh0KikKK3sKKyAgICBnU2F3Q29u
dGV4dFJlc2V0ID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgdmVyaWZ5Q2FuY2VsZWRDb21wb3Np
dGlvbihjb25zdCBWZWN0b3I8U3RyaW5nPiYgZXZlbnRzKQoreworICAgIEFTU0VSVF9FUSgzLCBl
dmVudHMuc2l6ZSgpKTsKKyAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kS2V5RXZlbnRXaXRoQ29t
cG9zaXRpb25SZXN1bHRzIHR5cGU9cHJlc3Mga2V5Y29kZT0zOSIpLCBldmVudHNbMF0pOworICAg
IEFTU0VSVF9FUShTdHJpbmcoInNldFByZWVkaXQgdGV4dD0nJyBjdXJzb3JPZmZzZXQ9MCIpLCBl
dmVudHNbMV0pOworICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBl
PXJlbGVhc2Uga2V5Y29kZT0yNyIpLCBldmVudHNbMl0pOworICAgIEFTU0VSVChnU2F3Q29udGV4
dFJlc2V0KTsKK30KKworVEVTVChXZWJLaXQyLCBJbnB1dE1ldGhvZEZpbHRlckNvbnRleHRGb2N1
c091dER1cmluZ09uZ29pbmdDb21wb3NpdGlvbikKK3sKKyAgICBUZXN0SW5wdXRNZXRob2RGaWx0
ZXIgaW5wdXRNZXRob2RGaWx0ZXI7CisKKyAgICAvLyBTZWUgY29tbWVudCBhYm92ZSBhYm91dCB0
aGlzIHRlY2huaXF1ZS4KKyAgICBHdGtJTUNvbnRleHQqIGNvbnRleHQgPSBpbnB1dE1ldGhvZEZp
bHRlci5jb250ZXh0KCk7CisgICAgR3RrSU1Db250ZXh0Q2xhc3MqIGNvbnRleHRDbGFzcyA9IEdU
S19JTV9DT05URVhUX0dFVF9DTEFTUyhjb250ZXh0KTsKKyAgICBSZXNldENhbGxiYWNrIHByZXZp
b3VzQ2FsbGJhY2sgPSBjb250ZXh0Q2xhc3MtPnJlc2V0OworICAgIGNvbnRleHRDbGFzcy0+cmVz
ZXQgPSB0ZW1wb3JhcnlSZXNldE92ZXJyaWRlOworCisgICAgZ1Nhd0NvbnRleHRSZXNldCA9IGZh
bHNlOworICAgIGlucHV0TWV0aG9kRmlsdGVyLnNlbmRQcmVzc0FuZFJlbGVhc2VLZXlFdmVudFBh
aXJUb0ZpbHRlcihHREtfS0VZX011bHRpX2tleSk7CisgICAgaW5wdXRNZXRob2RGaWx0ZXIuc2Vu
ZFByZXNzQW5kUmVsZWFzZUtleUV2ZW50UGFpclRvRmlsdGVyKEdES19LRVlfYXBvc3Ryb3BoZSk7
CisgICAgaW5wdXRNZXRob2RGaWx0ZXIubm90aWZ5Rm9jdXNlZE91dCgpOworCisgICAgdmVyaWZ5
Q2FuY2VsZWRDb21wb3NpdGlvbihpbnB1dE1ldGhvZEZpbHRlci5ldmVudHMoKSk7CisKKyAgICBj
b250ZXh0Q2xhc3MtPnJlc2V0ID0gcHJldmlvdXNDYWxsYmFjazsKK30KKworVEVTVChXZWJLaXQy
LCBJbnB1dE1ldGhvZEZpbHRlckNvbnRleHRNb3VzZUNsaWNrRHVyaW5nT25nb2luZ0NvbXBvc2l0
aW9uKQoreworICAgIFRlc3RJbnB1dE1ldGhvZEZpbHRlciBpbnB1dE1ldGhvZEZpbHRlcjsKKwor
ICAgIC8vIFNlZSBjb21tZW50IGFib3ZlIGFib3V0IHRoaXMgdGVjaG5pcXVlLgorICAgIEd0a0lN
Q29udGV4dCogY29udGV4dCA9IGlucHV0TWV0aG9kRmlsdGVyLmNvbnRleHQoKTsKKyAgICBHdGtJ
TUNvbnRleHRDbGFzcyogY29udGV4dENsYXNzID0gR1RLX0lNX0NPTlRFWFRfR0VUX0NMQVNTKGNv
bnRleHQpOworICAgIFJlc2V0Q2FsbGJhY2sgcHJldmlvdXNDYWxsYmFjayA9IGNvbnRleHRDbGFz
cy0+cmVzZXQ7CisgICAgY29udGV4dENsYXNzLT5yZXNldCA9IHRlbXBvcmFyeVJlc2V0T3ZlcnJp
ZGU7CisKKyAgICBnU2F3Q29udGV4dFJlc2V0ID0gZmFsc2U7CisgICAgaW5wdXRNZXRob2RGaWx0
ZXIuc2VuZFByZXNzQW5kUmVsZWFzZUtleUV2ZW50UGFpclRvRmlsdGVyKEdES19LRVlfTXVsdGlf
a2V5KTsKKyAgICBpbnB1dE1ldGhvZEZpbHRlci5zZW5kUHJlc3NBbmRSZWxlYXNlS2V5RXZlbnRQ
YWlyVG9GaWx0ZXIoR0RLX0tFWV9hcG9zdHJvcGhlKTsKKyAgICBpbnB1dE1ldGhvZEZpbHRlci5u
b3RpZnlNb3VzZUJ1dHRvblByZXNzKCk7CisKKyAgICB2ZXJpZnlDYW5jZWxlZENvbXBvc2l0aW9u
KGlucHV0TWV0aG9kRmlsdGVyLmV2ZW50cygpKTsKKworICAgIGNvbnRleHRDbGFzcy0+cmVzZXQg
PSBwcmV2aW91c0NhbGxiYWNrOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240129</attachid>
            <date>2014-10-20 10:27:18 -0700</date>
            <delta_ts>2014-10-22 04:04:25 -0700</delta_ts>
            <desc>Updated the apply on current git master</desc>
            <filename>wk2-input-method-filter.diff</filename>
            <type>text/plain</type>
            <size>82769</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4ZWExOWRkLi44ZjJmMGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTgg
QEAKIDIwMTQtMTAtMjAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCisgICAgICAgIFtHVEtdIE1vdmUgR3RrSW5wdXRNZXRob2RGaWx0ZXIgZnJvbSBQbGF0Zm9y
bSB0byBXZWJLaXQyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzc4ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBSZW1vdmUgR3RrSW5wdXRNZXRob2RGaWx0ZXIuCisKKyAgICAgICAgKiBQbGF0Zm9ybUdU
Sy5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRlci5o
OiBSZW1vdmVkLgorCisyMDE0LTEwLTIwICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KKwogICAgICAgICBbR1RLXSBTZXZlcmFsIGxhYmVscyBhcmUgd2hpdGUgaW5z
dGVhZCBvZiBibGFjawogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTM3ODAzCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNt
YWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggZDYzM2E0Ny4uYzJl
YmFmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTIyMiw3ICsyMjIsNiBAQCBsaXN0
KEFQUEVORCBXZWJDb3JlUGxhdGZvcm1HVEtfU09VUkNFUwogICAgIHBsYXRmb3JtL2d0ay9EcmFn
SW1hZ2VHdGsuY3BwCiAgICAgcGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuY3BwCiAgICAgcGxhdGZv
cm0vZ3RrL0d0a0NsaWNrQ291bnRlci5jcHAKLSAgICBwbGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRo
b2RGaWx0ZXIuY3BwCiAgICAgcGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5jcHAKICAgICBwbGF0
Zm9ybS9ndGsvR3RrVmVyc2lvbmluZy5jCiAgICAgcGxhdGZvcm0vZ3RrL0tleUJpbmRpbmdUcmFu
c2xhdG9yLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0lu
cHV0TWV0aG9kRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtJbnB1
dE1ldGhvZEZpbHRlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0MzVmYTMu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0aG9k
RmlsdGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM1MyArMCwwIEBACi0vKgotICogIENvcHly
aWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkd0a0lucHV0TWV0aG9kRmlsdGVyLmgi
Ci0KLSNpbmNsdWRlICJHVW5pcXVlUHRyR3RrLmgiCi0jaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5o
IgotI2luY2x1ZGUgPGdkay9nZGtrZXlzeW1zLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1VuaXF1ZVB0
ci5oPgotCi0vLyBUaGUgV2luZG93cyBjb21wb3NpdGlvbiBrZXkgZXZlbnQgY29kZSBpcyAyOTkg
b3IgVktfUFJPQ0VTU0tFWS4gV2UgbmVlZCB0bwotLy8gZW1pdCB0aGlzIGNvZGUgZm9yIHdlYiBj
b21wYXRpYmlsaXR5IHJlYXNvbnMgd2hlbiBrZXkgZXZlbnRzIHRyaWdnZXIKLS8vIGNvbXBvc2l0
aW9uIHJlc3VsdHMuIEdESyBkb2Vzbid0IGhhdmUgYW4gZXF1aXZhbGVudCwgc28gd2Ugc2VuZCBW
b2lkU3ltYm9sCi0vLyBoZXJlIHRvIFdlYkNvcmUuIFBsYXRmb3JtS2V5RXZlbnQga25vd3MgdG8g
Y29udmVydCB0aGlzIGNvZGUgaW50bwotLy8gVktfUFJPQ0VTU0tFWS4KLWNvbnN0IGludCBnQ29t
cG9zaXRpb25FdmVudEtleUNvZGUgPSBHREtfS0VZX1ZvaWRTeW1ib2w7Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotc3RhdGljIHZvaWQgaGFuZGxlQ29tbWl0Q2FsbGJhY2soR3RrSU1Db250ZXh0
KiwgY29uc3QgY2hhciogY29tcG9zaXRpb25TdHJpbmcsIEd0a0lucHV0TWV0aG9kRmlsdGVyKiBm
aWx0ZXIpCi17Ci0gICAgZmlsdGVyLT5oYW5kbGVDb21taXQoY29tcG9zaXRpb25TdHJpbmcpOwot
fQotCi1zdGF0aWMgdm9pZCBoYW5kbGVQcmVlZGl0U3RhcnRDYWxsYmFjayhHdGtJTUNvbnRleHQq
LCBHdGtJbnB1dE1ldGhvZEZpbHRlciogZmlsdGVyKQotewotICAgIGZpbHRlci0+aGFuZGxlUHJl
ZWRpdFN0YXJ0KCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGhhbmRsZVByZWVkaXRDaGFuZ2VkQ2FsbGJh
Y2soR3RrSU1Db250ZXh0KiwgR3RrSW5wdXRNZXRob2RGaWx0ZXIqIGZpbHRlcikKLXsKLSAgICBm
aWx0ZXItPmhhbmRsZVByZWVkaXRDaGFuZ2VkKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGhhbmRsZVBy
ZWVkaXRFbmRDYWxsYmFjayhHdGtJTUNvbnRleHQqLCBHdGtJbnB1dE1ldGhvZEZpbHRlciogZmls
dGVyKQotewotICAgIGZpbHRlci0+aGFuZGxlUHJlZWRpdEVuZCgpOwotfQotCi1zdGF0aWMgdm9p
ZCBoYW5kbGVXaWRnZXRSZWFsaXplKEd0a1dpZGdldCogd2lkZ2V0LCBHdGtJbnB1dE1ldGhvZEZp
bHRlciogZmlsdGVyKQotewotICAgIEdka1dpbmRvdyogd2luZG93ID0gZ3RrX3dpZGdldF9nZXRf
d2luZG93KHdpZGdldCk7Ci0gICAgQVNTRVJUKHdpbmRvdyk7Ci0gICAgZ3RrX2ltX2NvbnRleHRf
c2V0X2NsaWVudF93aW5kb3coZmlsdGVyLT5jb250ZXh0KCksIHdpbmRvdyk7Ci19Ci0KLXZvaWQg
R3RrSW5wdXRNZXRob2RGaWx0ZXI6OnNldFdpZGdldChHdGtXaWRnZXQqIHdpZGdldCkKLXsKLSAg
ICBBU1NFUlQoIW1fd2lkZ2V0KTsKLQotICAgIG1fd2lkZ2V0ID0gd2lkZ2V0OwotICAgIGlmIChn
dGtfd2lkZ2V0X2dldF93aW5kb3cobV93aWRnZXQpKQotICAgICAgICBoYW5kbGVXaWRnZXRSZWFs
aXplKG1fd2lkZ2V0LCB0aGlzKTsKLSAgICBlbHNlCi0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Rf
YWZ0ZXIod2lkZ2V0LCAicmVhbGl6ZSIsIEdfQ0FMTEJBQ0soaGFuZGxlV2lkZ2V0UmVhbGl6ZSks
IHRoaXMpOwotfQotCi12b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpzZXRDdXJzb3JSZWN0KGNv
bnN0IEludFJlY3QmIGN1cnNvclJlY3QpCi17Ci0gICAgLy8gRG9uJ3QgbW92ZSB0aGUgd2luZG93
IHVubGVzcyB0aGUgY3Vyc29yIGFjdHVhbGx5IG1vdmVzIG1vcmUgdGhhbiAxMAotICAgIC8vIHBp
eGVscy4gVGhpcyBwcmV2ZW50cyB1cyBmcm9tIG1ha2luZyB0aGUgd2luZG93IGZsYXNoIGR1cmlu
ZyBtaW5vcgotICAgIC8vIGN1cnNvciBhZGp1c3RtZW50cy4KLSAgICBzdGF0aWMgY29uc3QgaW50
IHdpbmRvd01vdmVtZW50VGhyZXNob2xkID0gMTAgKiAxMDsKLSAgICBpZiAoY3Vyc29yUmVjdC5s
b2NhdGlvbigpLmRpc3RhbmNlU3F1YXJlZFRvUG9pbnQobV9sYXN0Q2FyZUxvY2F0aW9uKSA8IHdp
bmRvd01vdmVtZW50VGhyZXNob2xkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2xhc3RDYXJl
TG9jYXRpb24gPSBjdXJzb3JSZWN0LmxvY2F0aW9uKCk7Ci0gICAgSW50UmVjdCB0cmFuc2xhdGVk
UmVjdCA9IGN1cnNvclJlY3Q7Ci0KLSAgICBBU1NFUlQobV93aWRnZXQpOwotICAgIEd0a0FsbG9j
YXRpb24gYWxsb2NhdGlvbjsKLSAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9uKG1fd2lkZ2V0
LCAmYWxsb2NhdGlvbik7Ci0gICAgdHJhbnNsYXRlZFJlY3QubW92ZShhbGxvY2F0aW9uLngsIGFs
bG9jYXRpb24ueSk7Ci0KLSAgICBHZGtSZWN0YW5nbGUgZ2RrQ3Vyc29yUmVjdCA9IHsgY3Vyc29y
UmVjdC54KCksIGN1cnNvclJlY3QueSgpLCBjdXJzb3JSZWN0LndpZHRoKCksIGN1cnNvclJlY3Qu
aGVpZ2h0KCkgfTsKLSAgICBndGtfaW1fY29udGV4dF9zZXRfY3Vyc29yX2xvY2F0aW9uKG1fY29u
dGV4dC5nZXQoKSwgJmdka0N1cnNvclJlY3QpOwotfQotCi1HdGtJbnB1dE1ldGhvZEZpbHRlcjo6
R3RrSW5wdXRNZXRob2RGaWx0ZXIoKQotICAgIDogbV9jdXJzb3JPZmZzZXQoMCkKLSAgICAsIG1f
Y29udGV4dChhZG9wdEdSZWYoZ3RrX2ltX211bHRpY29udGV4dF9uZXcoKSkpCi0gICAgLCBtX3dp
ZGdldCgwKQotICAgICwgbV9lbmFibGVkKGZhbHNlKQotICAgICwgbV9jb21wb3NpbmdUZXh0Q3Vy
cmVudGx5KGZhbHNlKQotICAgICwgbV9maWx0ZXJpbmdLZXlFdmVudChmYWxzZSkKLSAgICAsIG1f
cHJlZWRpdENoYW5nZWQoZmFsc2UpCi0gICAgLCBtX3ByZXZlbnROZXh0Q29tbWl0KGZhbHNlKQot
ICAgICwgbV9qdXN0U2VudEZha2VLZXlVcChmYWxzZSkKLSAgICAsIG1fbGFzdEZpbHRlcmVkS2V5
UHJlc3NDb2RlV2l0aE5vUmVzdWx0cyhHREtfS0VZX1ZvaWRTeW1ib2wpCi17Ci0gICAgZ19zaWdu
YWxfY29ubmVjdChtX2NvbnRleHQuZ2V0KCksICJjb21taXQiLCBHX0NBTExCQUNLKGhhbmRsZUNv
bW1pdENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX2NvbnRleHQuZ2V0
KCksICJwcmVlZGl0LXN0YXJ0IiwgR19DQUxMQkFDSyhoYW5kbGVQcmVlZGl0U3RhcnRDYWxsYmFj
ayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9jb250ZXh0LmdldCgpLCAicHJlZWRp
dC1jaGFuZ2VkIiwgR19DQUxMQkFDSyhoYW5kbGVQcmVlZGl0Q2hhbmdlZENhbGxiYWNrKSwgdGhp
cyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX2NvbnRleHQuZ2V0KCksICJwcmVlZGl0LWVuZCIs
IEdfQ0FMTEJBQ0soaGFuZGxlUHJlZWRpdEVuZENhbGxiYWNrKSwgdGhpcyk7Ci19Ci0KLUd0a0lu
cHV0TWV0aG9kRmlsdGVyOjp+R3RrSW5wdXRNZXRob2RGaWx0ZXIoKQotewotICAgIGdfc2lnbmFs
X2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX2NvbnRleHQuZ2V0KCksIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KGhhbmRsZUNvbW1pdENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxf
aGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1fY29udGV4dC5nZXQoKSwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oaGFuZGxlUHJlZWRpdFN0YXJ0Q2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3Np
Z25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV9jb250ZXh0LmdldCgpLCByZWludGVy
cHJldF9jYXN0PHZvaWQqPihoYW5kbGVQcmVlZGl0Q2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7Ci0g
ICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1fY29udGV4dC5nZXQoKSwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaGFuZGxlUHJlZWRpdEVuZENhbGxiYWNrKSwgdGhpcyk7
Ci0gICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1fd2lkZ2V0LCByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihoYW5kbGVXaWRnZXRSZWFsaXplKSwgdGhpcyk7Ci19Ci0KLXZv
aWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OnNldEVuYWJsZWQoYm9vbCBlbmFibGVkKQotewotICAg
IG1fZW5hYmxlZCA9IGVuYWJsZWQ7Ci0gICAgaWYgKGVuYWJsZWQpCi0gICAgICAgIGd0a19pbV9j
b250ZXh0X2ZvY3VzX2luKG1fY29udGV4dC5nZXQoKSk7Ci0gICAgZWxzZQotICAgICAgICBndGtf
aW1fY29udGV4dF9mb2N1c19vdXQobV9jb250ZXh0LmdldCgpKTsKLX0KLQotYm9vbCBHdGtJbnB1
dE1ldGhvZEZpbHRlcjo6ZmlsdGVyS2V5RXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50KQotewotICAg
IGlmICghY2FuRWRpdCgpIHx8ICFtX2VuYWJsZWQpCi0gICAgICAgIHJldHVybiBzZW5kU2ltcGxl
S2V5RXZlbnQoZXZlbnQpOwotCi0gICAgbV9wcmVlZGl0Q2hhbmdlZCA9IGZhbHNlOwotICAgIG1f
ZmlsdGVyaW5nS2V5RXZlbnQgPSB0cnVlOwotCi0gICAgdW5zaWduZWQgaW50IGxhc3RGaWx0ZXJl
ZEtleVByZXNzQ29kZVdpdGhOb1Jlc3VsdHMgPSBtX2xhc3RGaWx0ZXJlZEtleVByZXNzQ29kZVdp
dGhOb1Jlc3VsdHM7Ci0gICAgbV9sYXN0RmlsdGVyZWRLZXlQcmVzc0NvZGVXaXRoTm9SZXN1bHRz
ID0gR0RLX0tFWV9Wb2lkU3ltYm9sOwotCi0gICAgYm9vbCBmaWx0ZXJlZCA9IGd0a19pbV9jb250
ZXh0X2ZpbHRlcl9rZXlwcmVzcyhtX2NvbnRleHQuZ2V0KCksIGV2ZW50KTsKLSAgICBtX2ZpbHRl
cmluZ0tleUV2ZW50ID0gZmFsc2U7Ci0KLSAgICBib29sIGp1c3RTZW50RmFrZUtleVVwID0gbV9q
dXN0U2VudEZha2VLZXlVcDsKLSAgICBtX2p1c3RTZW50RmFrZUtleVVwID0gZmFsc2U7Ci0gICAg
aWYgKGp1c3RTZW50RmFrZUtleVVwICYmIGV2ZW50LT50eXBlID09IEdES19LRVlfUkVMRUFTRSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBTaW1wbGUgaW5wdXQgbWV0aG9kcyB3b3Jr
IHN1Y2ggdGhhdCBldmVuIG5vcm1hbCBrZXlzdHJva2VzIGZpcmUgdGhlCi0gICAgLy8gY29tbWl0
IHNpZ25hbC4gV2UgZGV0ZWN0IHRob3NlIHNpdHVhdGlvbnMgYW5kIHRyZWF0IHRoZW0gYXMgbm9y
bWFsCi0gICAgLy8ga2V5IGV2ZW50cywgc3VwcGx5aW5nIHRoZSBjb21taXQgc3RyaW5nIGFzIHRo
ZSBrZXkgY2hhcmFjdGVyLgotICAgIGlmIChmaWx0ZXJlZCAmJiAhbV9jb21wb3NpbmdUZXh0Q3Vy
cmVudGx5ICYmICFtX3ByZWVkaXRDaGFuZ2VkICYmIG1fY29uZmlybWVkQ29tcG9zaXRpb24ubGVu
Z3RoKCkgPT0gMSkgewotICAgICAgICBib29sIHJlc3VsdCA9IHNlbmRTaW1wbGVLZXlFdmVudChl
dmVudCwgbV9jb25maXJtZWRDb21wb3NpdGlvbik7Ci0gICAgICAgIG1fY29uZmlybWVkQ29tcG9z
aXRpb24gPSBTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBp
ZiAoZmlsdGVyZWQgJiYgZXZlbnQtPnR5cGUgPT0gR0RLX0tFWV9QUkVTUykgewotICAgICAgICBp
ZiAoIW1fcHJlZWRpdENoYW5nZWQgJiYgbV9jb25maXJtZWRDb21wb3NpdGlvbi5pc051bGwoKSkg
ewotICAgICAgICAgICAgbV9jb21wb3NpbmdUZXh0Q3VycmVudGx5ID0gdHJ1ZTsKLSAgICAgICAg
ICAgIG1fbGFzdEZpbHRlcmVkS2V5UHJlc3NDb2RlV2l0aE5vUmVzdWx0cyA9IGV2ZW50LT5rZXl2
YWw7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wg
cmVzdWx0ID0gc2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cyhldmVudCk7Ci0gICAg
ICAgIGlmICghbV9jb25maXJtZWRDb21wb3NpdGlvbi5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAg
IG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSA9IGZhbHNlOwotICAgICAgICAgICAgbV9jb25maXJt
ZWRDb21wb3NpdGlvbiA9IFN0cmluZygpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgcHJldmlvdXNseSBmaWx0ZXJlZCBhIGtleSBwcmVz
cyBldmVudCBhbmQgaXQgeWllbGRlZCBubyByZXN1bHRzLiBTdXBwcmVzcwotICAgIC8vIHRoZSBj
b3JyZXNwb25kaW5nIGtleSByZWxlYXNlIGV2ZW50IHRvIGF2b2lkIGNvbmZ1c2luZyB0aGUgd2Vi
IGNvbnRlbnQuCi0gICAgaWYgKGV2ZW50LT50eXBlID09IEdES19LRVlfUkVMRUFTRSAmJiBsYXN0
RmlsdGVyZWRLZXlQcmVzc0NvZGVXaXRoTm9SZXN1bHRzID09IGV2ZW50LT5rZXl2YWwpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gQXQgdGhpcyBwb2ludCBhIGtleXN0cm9rZSB3YXMg
ZWl0aGVyOgotICAgIC8vIDEuIFVuZmlsdGVyZWQKLSAgICAvLyAyLiBBIGZpbHRlcmVkIGtleXVw
IGV2ZW50LiBBcyB0aGUgSU1FIGNvZGUgaW4gRWRpdG9yQ2xpZW50LmggZG9lc24ndAotICAgIC8v
ICAgIGV2ZXIgbG9vayBhdCBrZXl1cCBldmVudHMsIHdlIHNlbmQgYW55IGNvbXBvc2l0aW9uIHJl
c3VsdHMgYmVmb3JlCi0gICAgLy8gICAgdGhlIGtleSBldmVudC4KLSAgICAvLyBCb3RoIG1pZ2h0
IGhhdmUgY29tcG9zaXRpb24gcmVzdWx0cyBvciBub3QuCi0gICAgLy8KLSAgICAvLyBJdCdzIGlt
cG9ydGFudCB0byBzZW5kIHRoZSBjb21wb3NpdGlvbiByZXN1bHRzIGJlZm9yZSB0aGUgZXZlbnQK
LSAgICAvLyBiZWNhdXNlIHNvbWUgSU0gbW9kdWxlcyBvcGVyYXRlIHRoYXQgd2F5LiBGb3IgZXhh
bXBsZSAodGFrZW4gZnJvbQotICAgIC8vIHRoZSBDaHJvbWl1bSBzb3VyY2UpLCB0aGUgbGF0aW4t
cG9zdCBpbnB1dCBtZXRob2QgZ2l2ZXMgdGhpcyBzZXF1ZW5jZQotICAgIC8vIHdoZW4geW91IHBy
ZXNzICdhJyBhbmQgdGhlbiBiYWNrc3BhY2U6Ci0gICAgLy8gIDEuIGtleWRvd24gJ2EnIChmaWx0
ZXJlZCkKLSAgICAvLyAgMi4gcHJlZWRpdCBjaGFuZ2VkIHRvICJhIgotICAgIC8vICAzLiBrZXl1
cCAnYScgKHVuZmlsdGVyZWQpCi0gICAgLy8gIDQuIGtleWRvd24gQmFja3NwYWNlICh1bmZpbHRl
cmVkKQotICAgIC8vICA1LiBjb21taXQgImEiCi0gICAgLy8gIDYuIHByZWVkaXQgZW5kCi0gICAg
aWYgKCFtX2NvbmZpcm1lZENvbXBvc2l0aW9uLmlzRW1wdHkoKSkKLSAgICAgICAgY29uZmlybUNv
bXBvc2l0aW9uKCk7Ci0gICAgaWYgKG1fcHJlZWRpdENoYW5nZWQpCi0gICAgICAgIHVwZGF0ZVBy
ZWVkaXQoKTsKLSAgICByZXR1cm4gc2VuZFNpbXBsZUtleUV2ZW50KGV2ZW50KTsKLX0KLQotdm9p
ZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6bm90aWZ5TW91c2VCdXR0b25QcmVzcygpCi17Ci0gICAg
Ly8gQ29uZmlybWluZyB0aGUgY29tcG9zaXRpb24gbWF5IHRyaWdnZXIgYSBzZWxlY3Rpb24gY2hh
bmdlLCB3aGljaAotICAgIC8vIG1pZ2h0IHRyaWdnZXIgZnVydGhlciB1bndhbnRlZCBhY3Rpb25z
IG9uIHRoZSBjb250ZXh0LCBzbyB3ZSBwcmV2ZW50Ci0gICAgLy8gdGhhdCBieSBzZXR0aW5nIG1f
Y29tcG9zaW5nVGV4dEN1cnJlbnRseSB0byBmYWxzZS4KLSAgICBpZiAobV9jb21wb3NpbmdUZXh0
Q3VycmVudGx5KQotICAgICAgICBjb25maXJtQ3VycmVudENvbXBvc2l0aW9uKCk7Ci0gICAgbV9j
b21wb3NpbmdUZXh0Q3VycmVudGx5ID0gZmFsc2U7Ci0gICAgY2FuY2VsQ29udGV4dENvbXBvc2l0
aW9uKCk7Ci19Ci0KLXZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OnJlc2V0Q29udGV4dCgpCi17
Ci0KLSAgICAvLyBXZSBhbHdheXMgY2FuY2VsIHRoZSBjdXJyZW50IFdlYkNvcmUgY29tcG9zaXRp
b24gaGVyZSwgaW4gY2FzZSB0aGUKLSAgICAvLyBjb21wb3NpdGlvbiB3YXMgc2V0IG91dHNpZGUg
dGhlIEdUSysgSU1FIHBhdGggKHZpYSBhIHNjcmlwdCwgZm9yCi0gICAgLy8gaW5zdGFuY2UpIGFu
ZCB3ZSBhcmVuJ3QgdHJhY2tpbmcgaXQuCi0gICAgY2FuY2VsQ3VycmVudENvbXBvc2l0aW9uKCk7
Ci0KLSAgICBpZiAoIW1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSA9IGZhbHNlOwotICAgIGNhbmNlbENvbnRleHRD
b21wb3NpdGlvbigpOwotfQotCi12b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpjYW5jZWxDb250
ZXh0Q29tcG9zaXRpb24oKQotewotICAgIG1fcHJldmVudE5leHRDb21taXQgPSAhbV9wcmVlZGl0
LmlzRW1wdHkoKTsKLQotICAgIGd0a19pbV9jb250ZXh0X3Jlc2V0KG1fY29udGV4dC5nZXQoKSk7
Ci0KLSAgICBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkgPSBmYWxzZTsKLSAgICBtX2p1c3RTZW50
RmFrZUtleVVwID0gZmFsc2U7Ci0gICAgbV9wcmVlZGl0ID0gU3RyaW5nKCk7Ci0gICAgbV9jb25m
aXJtZWRDb21wb3NpdGlvbiA9IFN0cmluZygpOwotfQotCi12b2lkIEd0a0lucHV0TWV0aG9kRmls
dGVyOjpub3RpZnlGb2N1c2VkSW4oKQotewotICAgIG1fZW5hYmxlZCA9IHRydWU7Ci0gICAgZ3Rr
X2ltX2NvbnRleHRfZm9jdXNfaW4obV9jb250ZXh0LmdldCgpKTsKLX0KLQotdm9pZCBHdGtJbnB1
dE1ldGhvZEZpbHRlcjo6bm90aWZ5Rm9jdXNlZE91dCgpCi17Ci0gICAgaWYgKCFtX2VuYWJsZWQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkpCi0g
ICAgICAgIGNvbmZpcm1DdXJyZW50Q29tcG9zaXRpb24oKTsKLSAgICBjYW5jZWxDb250ZXh0Q29t
cG9zaXRpb24oKTsKLSAgICBndGtfaW1fY29udGV4dF9mb2N1c19vdXQobV9jb250ZXh0LmdldCgp
KTsKLSAgICBtX2VuYWJsZWQgPSBmYWxzZTsKLX0KLQotdm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRl
cjo6Y29uZmlybUNvbXBvc2l0aW9uKCkKLXsKLSAgICBjb25maXJtQ29tcG9zaXRpb25UZXh0KG1f
Y29uZmlybWVkQ29tcG9zaXRpb24pOwotICAgIG1fY29uZmlybWVkQ29tcG9zaXRpb24gPSBTdHJp
bmcoKTsKLX0KLQotdm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6dXBkYXRlUHJlZWRpdCgpCi17
Ci0gICAgc2V0UHJlZWRpdChtX3ByZWVkaXQsIG1fY3Vyc29yT2Zmc2V0KTsKLSAgICBtX3ByZWVk
aXRDaGFuZ2VkID0gZmFsc2U7Ci19Ci0KLXZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OnNlbmRD
b21wb3NpdGlvbkFuZFByZWVkaXRXaXRoRmFrZUtleUV2ZW50cyhSZXN1bHRzVG9TZW5kIHJlc3Vs
dHNUb1NlbmQpCi17Ci0gICAgR1VuaXF1ZVB0cjxHZGtFdmVudD4gZXZlbnQoZ2RrX2V2ZW50X25l
dyhHREtfS0VZX1BSRVNTKSk7Ci0gICAgZXZlbnQtPmtleS50aW1lID0gR0RLX0NVUlJFTlRfVElN
RTsKLSAgICBldmVudC0+a2V5LmtleXZhbCA9IGdDb21wb3NpdGlvbkV2ZW50S2V5Q29kZTsKLSAg
ICBzZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzKCZldmVudC0+a2V5LCByZXN1bHRz
VG9TZW5kLCBFdmVudEZha2VkKTsKLQotICAgIG1fY29uZmlybWVkQ29tcG9zaXRpb24gPSBTdHJp
bmcoKTsKLSAgICBpZiAocmVzdWx0c1RvU2VuZCAmIENvbXBvc2l0aW9uKQotICAgICAgICBtX2Nv
bXBvc2luZ1RleHRDdXJyZW50bHkgPSBmYWxzZTsKLQotICAgIGV2ZW50LT50eXBlID0gR0RLX0tF
WV9SRUxFQVNFOwotICAgIHNlbmRTaW1wbGVLZXlFdmVudCgmZXZlbnQtPmtleSwgU3RyaW5nKCks
IEV2ZW50RmFrZWQpOwotICAgIG1fanVzdFNlbnRGYWtlS2V5VXAgPSB0cnVlOwotfQotCi12b2lk
IEd0a0lucHV0TWV0aG9kRmlsdGVyOjpoYW5kbGVDb21taXQoY29uc3QgY2hhciogY29tcG9zaXRp
b25TdHJpbmcpCi17Ci0gICAgaWYgKG1fcHJldmVudE5leHRDb21taXQpIHsKLSAgICAgICAgbV9w
cmV2ZW50TmV4dENvbW1pdCA9IGZhbHNlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKCFtX2VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29uZmlybWVkQ29tcG9z
aXRpb24uYXBwZW5kKFN0cmluZzo6ZnJvbVVURjgoY29tcG9zaXRpb25TdHJpbmcpKTsKLQotICAg
IC8vIElmIHRoZSBjb21taXQgd2FzIHRyaWdnZXJlZCBvdXRzaWRlIG9mIGEga2V5IGV2ZW50LCBq
dXN0IHNlbmQKLSAgICAvLyB0aGUgSU1FIGV2ZW50IG5vdy4gSWYgd2UgYXJlIGhhbmRsaW5nIGEg
a2V5IGV2ZW50LCB3ZSdsbCBkZWNpZGUKLSAgICAvLyBsYXRlciBob3cgdG8gaGFuZGxlIHRoaXMu
Ci0gICAgaWYgKCFtX2ZpbHRlcmluZ0tleUV2ZW50KQotICAgICAgICBzZW5kQ29tcG9zaXRpb25B
bmRQcmVlZGl0V2l0aEZha2VLZXlFdmVudHMoQ29tcG9zaXRpb24pOwotfQotCi12b2lkIEd0a0lu
cHV0TWV0aG9kRmlsdGVyOjpoYW5kbGVQcmVlZGl0U3RhcnQoKQotewotICAgIGlmIChtX3ByZXZl
bnROZXh0Q29tbWl0IHx8ICFtX2VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3ByZWVk
aXRDaGFuZ2VkID0gdHJ1ZTsKLSAgICBtX3ByZWVkaXQgPSAiIjsKLX0KLQotdm9pZCBHdGtJbnB1
dE1ldGhvZEZpbHRlcjo6aGFuZGxlUHJlZWRpdENoYW5nZWQoKQotewotICAgIGlmICghbV9lbmFi
bGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHVW5pcXVlT3V0UHRyPGdjaGFyPiBuZXdQcmVl
ZGl0OwotICAgIGd0a19pbV9jb250ZXh0X2dldF9wcmVlZGl0X3N0cmluZyhtX2NvbnRleHQuZ2V0
KCksICZuZXdQcmVlZGl0Lm91dFB0cigpLCAwLCAmbV9jdXJzb3JPZmZzZXQpOwotCi0gICAgaWYg
KG1fcHJldmVudE5leHRDb21taXQpIHsKLSAgICAgICAgaWYgKHN0cmxlbihuZXdQcmVlZGl0Lmdl
dCgpKSA+IDApCi0gICAgICAgICAgICBtX3ByZXZlbnROZXh0Q29tbWl0ID0gZmFsc2U7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3ByZWVkaXQgPSBT
dHJpbmc6OmZyb21VVEY4KG5ld1ByZWVkaXQuZ2V0KCkpOwotICAgIG1fY3Vyc29yT2Zmc2V0ID0g
c3RkOjptaW4oc3RkOjptYXgobV9jdXJzb3JPZmZzZXQsIDApLCBzdGF0aWNfY2FzdDxpbnQ+KG1f
cHJlZWRpdC5sZW5ndGgoKSkpOwotCi0gICAgbV9jb21wb3NpbmdUZXh0Q3VycmVudGx5ID0gIW1f
cHJlZWRpdC5pc0VtcHR5KCk7Ci0gICAgbV9wcmVlZGl0Q2hhbmdlZCA9IHRydWU7Ci0KLSAgICBp
ZiAoIW1fZmlsdGVyaW5nS2V5RXZlbnQpCi0gICAgICAgIHNlbmRDb21wb3NpdGlvbkFuZFByZWVk
aXRXaXRoRmFrZUtleUV2ZW50cyhQcmVlZGl0KTsKLX0KLQotdm9pZCBHdGtJbnB1dE1ldGhvZEZp
bHRlcjo6aGFuZGxlUHJlZWRpdEVuZCgpCi17Ci0gICAgaWYgKG1fcHJldmVudE5leHRDb21taXQg
fHwgIW1fZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wcmVlZGl0ID0gU3RyaW5n
KCk7Ci0gICAgbV9jdXJzb3JPZmZzZXQgPSAwOwotICAgIG1fcHJlZWRpdENoYW5nZWQgPSB0cnVl
OwotCi0gICAgaWYgKCFtX2ZpbHRlcmluZ0tleUV2ZW50KQotICAgICAgICB1cGRhdGVQcmVlZGl0
KCk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtJ
bnB1dE1ldGhvZEZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0lucHV0
TWV0aG9kRmlsdGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlNDgyNTMuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0aG9kRmls
dGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgR3RrSW5wdXRNZXRob2RGaWx0ZXJfaAotI2RlZmlu
ZSBHdGtJbnB1dE1ldGhvZEZpbHRlcl9oCi0KLSNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCi0jaW5j
bHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgPGdkay9nZGsuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgX0d0a0lNQ29udGV4dCBHdGtJTUNvbnRl
eHQ7Ci10eXBlZGVmIHN0cnVjdCBfR3RrV2lkZ2V0IEd0a1dpZGdldDsKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBHdGtJbnB1dE1ldGhvZEZpbHRlciB7Ci1wdWJsaWM6Ci0gICAgR3Rr
SW5wdXRNZXRob2RGaWx0ZXIoKTsKLSAgICB+R3RrSW5wdXRNZXRob2RGaWx0ZXIoKTsKLQotICAg
IGJvb2wgZmlsdGVyS2V5RXZlbnQoR2RrRXZlbnRLZXkqKTsKLSAgICB2b2lkIG5vdGlmeU1vdXNl
QnV0dG9uUHJlc3MoKTsKLSAgICB2b2lkIG5vdGlmeUZvY3VzZWRJbigpOwotICAgIHZvaWQgbm90
aWZ5Rm9jdXNlZE91dCgpOwotICAgIHZvaWQgcmVzZXRDb250ZXh0KCk7Ci0gICAgdm9pZCBzZXRF
bmFibGVkKGJvb2wpOwotCi0gICAgdm9pZCBoYW5kbGVDb21taXQoY29uc3QgY2hhciogY29tcG9z
aXRpb25TdHJpbmcpOwotICAgIHZvaWQgaGFuZGxlUHJlZWRpdENoYW5nZWQoKTsKLSAgICB2b2lk
IGhhbmRsZVByZWVkaXRTdGFydCgpOwotICAgIHZvaWQgaGFuZGxlUHJlZWRpdEVuZCgpOwotCi0g
ICAgdm9pZCBjb25maXJtQ29tcG9zaXRpb24oKTsKLSAgICB2b2lkIGNhbmNlbENvbnRleHRDb21w
b3NpdGlvbigpOwotICAgIHZvaWQgdXBkYXRlUHJlZWRpdCgpOwotICAgIHZvaWQgc2V0Q3Vyc29y
UmVjdChjb25zdCBJbnRSZWN0JiBsb2NhdGlvbik7Ci0KLSAgICBHdGtJTUNvbnRleHQqIGNvbnRl
eHQoKSB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KLQotICAgIGVudW0gRXZlbnRGYWtlZEZv
ckNvbXBvc2l0aW9uIHsKLSAgICAgICAgRXZlbnRGYWtlZCwKLSAgICAgICAgRXZlbnROb3RGYWtl
ZAotICAgIH07Ci0KLXByb3RlY3RlZDoKLSAgICBlbnVtIFJlc3VsdHNUb1NlbmQgewotICAgICAg
ICBQcmVlZGl0ID0gMSA8PCAxLAotICAgICAgICBDb21wb3NpdGlvbiA9IDEgPDwgMiwKLSAgICAg
ICAgUHJlZWRpdEFuZENvbXBvc2l0aW9uID0gUHJlZWRpdCArIENvbXBvc2l0aW9uCi0gICAgfTsK
LQotICAgIHZvaWQgc2V0V2lkZ2V0KEd0a1dpZGdldCopOwotICAgIHZpcnR1YWwgYm9vbCBjYW5F
ZGl0KCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBzZW5kU2ltcGxlS2V5RXZlbnQoR2RrRXZlbnRL
ZXkqLCBXVEY6OlN0cmluZyBldmVudFN0cmluZyA9IFN0cmluZygpLCBFdmVudEZha2VkRm9yQ29t
cG9zaXRpb24gPSBFdmVudE5vdEZha2VkKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHNlbmRLZXlF
dmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMoR2RrRXZlbnRLZXkqLCBSZXN1bHRzVG9TZW5kID0g
UHJlZWRpdEFuZENvbXBvc2l0aW9uLCBFdmVudEZha2VkRm9yQ29tcG9zaXRpb24gPSBFdmVudE5v
dEZha2VkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNvbmZpcm1Db21wb3NpdGlvblRleHQoU3Ry
aW5nIGNvbXBvc2l0aW9uKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNvbmZpcm1DdXJyZW50Q29t
cG9zaXRpb24oKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNhbmNlbEN1cnJlbnRDb21wb3NpdGlv
bigpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlZWRpdChTdHJpbmcsIGludCBjdXJzb3JP
ZmZzZXQpID0gMDsKLQotICAgIFdURjo6U3RyaW5nIG1fY29uZmlybWVkQ29tcG9zaXRpb247Ci0g
ICAgV1RGOjpTdHJpbmcgbV9wcmVlZGl0OwotICAgIGludCBtX2N1cnNvck9mZnNldDsKLQotcHJp
dmF0ZToKLSAgICB2b2lkIHNlbmRDb21wb3NpdGlvbkFuZFByZWVkaXRXaXRoRmFrZUtleUV2ZW50
cyhSZXN1bHRzVG9TZW5kKTsKLQotICAgIEdSZWZQdHI8R3RrSU1Db250ZXh0PiBtX2NvbnRleHQ7
Ci0gICAgR3RrV2lkZ2V0KiBtX3dpZGdldDsKLSAgICBib29sIG1fZW5hYmxlZDsKLSAgICBib29s
IG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseTsKLSAgICBib29sIG1fZmlsdGVyaW5nS2V5RXZlbnQ7
Ci0gICAgYm9vbCBtX3ByZWVkaXRDaGFuZ2VkOwotICAgIGJvb2wgbV9wcmV2ZW50TmV4dENvbW1p
dDsKLSAgICBib29sIG1fanVzdFNlbnRGYWtlS2V5VXA7Ci0gICAgdW5zaWduZWQgaW50IG1fbGFz
dEZpbHRlcmVkS2V5UHJlc3NDb2RlV2l0aE5vUmVzdWx0czsKLSAgICBJbnRQb2ludCBtX2xhc3RD
YXJlTG9jYXRpb247Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBH
dGtJbnB1dE1ldGhvZEZpbHRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZGQyYjU5Ni4uMDkwZjdjOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDE0LTEwLTIwICBDYXJsb3MgR2FyY2lhIENhbXBv
cyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBNb3ZlIEd0a0lucHV0TWV0
aG9kRmlsdGVyIGZyb20gUGxhdGZvcm0gdG8gV2ViS2l0MgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3ODg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWVyZ2UgV2ViVmlld0Jhc2VJbnB1dE1ldGhvZEZp
bHRlciBhbmQgR3RrSW5wdXRNZXRob2RGaWx0ZXIgaW50byBhCisgICAgICAgIHNpbmdsZSBjbGFz
cyBJbnB1dE1ldGhvZEZpbHRlci4gVGhlIGNvZGUgaXMgbW9zdGx5IHRoZSBzYW1lLCBidXQKKyAg
ICAgICAgaW5zdGVhZCBvZiBoYXZpbmcgYSBzZXRXZWJWaWV3IG1ldGhvZCBvbmx5IHRvIGdldCB0
aGUgV2ViUGFnZVByb3h5LAorICAgICAgICBpdCBoYXMgYSBzZXRQYWdlIG1ldGhvZCB0aGF0IHBh
c3NlcyB0aGUgV2ViUGFnZVByb3h5LiBUaGUgR3RrSU1Db250ZXh0CisgICAgICAgIGNsaWVudCB3
aW5kb3cgaXMgc2V0IGJ5IHRoZSBXZWJWaWV3IHdoZW4gaXQncyByZWFsaXplZC91bnJlYWxpemVk
LgorCisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogU2hhcmVkL05hdGl2
ZVdlYktleWJvYXJkRXZlbnQuaDoKKyAgICAgICAgKiBTaGFyZWQvZ3RrL05hdGl2ZVdlYktleWJv
YXJkRXZlbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpOYXRpdmVXZWJLZXlib2FyZEV2ZW50
OjpOYXRpdmVXZWJLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3QmFzZS5jcHA6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZVJlYWxpemUp
OgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VVbnJlYWxpemUpOgorICAgICAgICAod2Via2l0
X3dlYl92aWV3X2Jhc2VfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUNy
ZWF0ZVdlYlBhZ2UpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VFbnRlckZ1bGxTY3JlZW4p
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYlZpZXdCYXNlSW5wdXRN
ZXRob2RGaWx0ZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dl
YlZpZXdCYXNlSW5wdXRNZXRob2RGaWx0ZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvZ3RrL0lucHV0TWV0aG9kRmlsdGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Oklu
cHV0TWV0aG9kRmlsdGVyOjpoYW5kbGVDb21taXRDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6
OklucHV0TWV0aG9kRmlsdGVyOjpoYW5kbGVQcmVlZGl0U3RhcnRDYWxsYmFjayk6CisgICAgICAg
IChXZWJLaXQ6OklucHV0TWV0aG9kRmlsdGVyOjpoYW5kbGVQcmVlZGl0Q2hhbmdlZENhbGxiYWNr
KToKKyAgICAgICAgKFdlYktpdDo6SW5wdXRNZXRob2RGaWx0ZXI6OmhhbmRsZVByZWVkaXRFbmRD
YWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OklucHV0TWV0aG9kRmlsdGVyOjpJbnB1dE1ldGhv
ZEZpbHRlcik6CisgICAgICAgIChXZWJLaXQ6OklucHV0TWV0aG9kRmlsdGVyOjp+SW5wdXRNZXRo
b2RGaWx0ZXIpOgorICAgICAgICAoV2ViS2l0OjpJbnB1dE1ldGhvZEZpbHRlcjo6c2V0RW5hYmxl
ZCk6CisgICAgICAgIChXZWJLaXQ6OklucHV0TWV0aG9kRmlsdGVyOjpzZXRDdXJzb3JSZWN0KToK
KyAgICAgICAgKFdlYktpdDo6SW5wdXRNZXRob2RGaWx0ZXI6OmhhbmRsZUtleWJvYXJkRXZlbnQp
OgorICAgICAgICAoV2ViS2l0OjpJbnB1dE1ldGhvZEZpbHRlcjo6aGFuZGxlS2V5Ym9hcmRFdmVu
dFdpdGhDb21wb3NpdGlvblJlc3VsdHMpOgorICAgICAgICAoV2ViS2l0OjpJbnB1dE1ldGhvZEZp
bHRlcjo6ZmlsdGVyS2V5RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpJbnB1dE1ldGhvZEZpbHRl
cjo6Y29uZmlybUNvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6SW5wdXRNZXRob2RGaWx0
ZXI6OnVwZGF0ZVByZWVkaXQpOgorICAgICAgICAoV2ViS2l0OjpJbnB1dE1ldGhvZEZpbHRlcjo6
bm90aWZ5Rm9jdXNlZEluKToKKyAgICAgICAgKFdlYktpdDo6SW5wdXRNZXRob2RGaWx0ZXI6Om5v
dGlmeUZvY3VzZWRPdXQpOgorICAgICAgICAoV2ViS2l0OjpJbnB1dE1ldGhvZEZpbHRlcjo6bm90
aWZ5TW91c2VCdXR0b25QcmVzcyk6CisgICAgICAgIChXZWJLaXQ6OklucHV0TWV0aG9kRmlsdGVy
Ojpjb25maXJtQ3VycmVudENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6SW5wdXRNZXRo
b2RGaWx0ZXI6OmNhbmNlbENvbnRleHRDb21wb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6Oklu
cHV0TWV0aG9kRmlsdGVyOjpzZW5kQ29tcG9zaXRpb25BbmRQcmVlZGl0V2l0aEZha2VLZXlFdmVu
dHMpOgorICAgICAgICAoV2ViS2l0OjpJbnB1dE1ldGhvZEZpbHRlcjo6aGFuZGxlQ29tbWl0KToK
KyAgICAgICAgKFdlYktpdDo6SW5wdXRNZXRob2RGaWx0ZXI6OmhhbmRsZVByZWVkaXRTdGFydCk6
CisgICAgICAgIChXZWJLaXQ6OklucHV0TWV0aG9kRmlsdGVyOjpoYW5kbGVQcmVlZGl0Q2hhbmdl
ZCk6CisgICAgICAgIChXZWJLaXQ6OklucHV0TWV0aG9kRmlsdGVyOjpoYW5kbGVQcmVlZGl0RW5k
KToKKyAgICAgICAgKFdlYktpdDo6SW5wdXRNZXRob2RGaWx0ZXI6OmxvZ0hhbmRsZUtleWJvYXJk
RXZlbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6SW5wdXRNZXRob2RGaWx0ZXI6Omxv
Z0hhbmRsZUtleWJvYXJkRXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzRm9yVGVzdGluZyk6Cisg
ICAgICAgIChXZWJLaXQ6OklucHV0TWV0aG9kRmlsdGVyOjpsb2dDb25maXJtQ29tcG9zaXRpb25G
b3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6SW5wdXRNZXRob2RGaWx0ZXI6OmxvZ1NldFBy
ZWVkaXRGb3JUZXN0aW5nKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL0lucHV0TWV0aG9kRmls
dGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpJbnB1dE1ldGhvZEZpbHRlcjo6Y29udGV4
dCk6CisgICAgICAgIChXZWJLaXQ6OklucHV0TWV0aG9kRmlsdGVyOjpzZXRQYWdlKToKKyAgICAg
ICAgKFdlYktpdDo6SW5wdXRNZXRob2RGaWx0ZXI6OnNldFRlc3RpbmdNb2RlKToKKyAgICAgICAg
KFdlYktpdDo6SW5wdXRNZXRob2RGaWx0ZXI6OmV2ZW50cyk6CisKIDIwMTQtMTAtMTkgIEFudHRp
IEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIEF2b2lkIHVubmVjZXNzYXJ5
IE5TVVJMUmVzcG9uc2UgY29uc3RydWN0aW9uIGZvciBRdWlja0xvb2sgb24gaU9TCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtR1RLLmNtYWtlCmluZGV4IDUyZTU5ZDYuLmRlNTc3Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
R1RLLmNtYWtlCkBAIC0yMjgsOCArMjI4LDYgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VT
CiAgICAgVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2luZG93UHJvcGVydGllcy5jcHAKICAgICBV
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXaW5kb3dQcm9wZXJ0aWVzLmgKICAgICBVSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXaW5kb3dQcm9wZXJ0aWVzUHJpdmF0ZS5oCi0gICAgVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViVmlld0Jhc2VJbnB1dE1ldGhvZEZpbHRlci5jcHAKLSAgICBVSVByb2Nlc3MvQVBJ
L2d0ay9XZWJWaWV3QmFzZUlucHV0TWV0aG9kRmlsdGVyLmgKICAgICBVSVByb2Nlc3MvQVBJL2d0
ay93ZWJraXQyLmgKIAogICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvZ3RrL1dlYkluc3Bl
Y3RvclNlcnZlckd0ay5jcHAKQEAgLTI1NCw2ICsyNTIsNyBAQCBsaXN0KEFQUEVORCBXZWJLaXQy
X1NPVVJDRVMKICAgICBVSVByb2Nlc3MvZ3RrL0RyYWdBbmREcm9wSGFuZGxlci5jcHAKICAgICBV
SVByb2Nlc3MvZ3RrL0V4cGVyaW1lbnRhbEZlYXR1cmVzLmNwcAogICAgIFVJUHJvY2Vzcy9ndGsv
R2VzdHVyZUNvbnRyb2xsZXIuY3BwCisgICAgVUlQcm9jZXNzL2d0ay9JbnB1dE1ldGhvZEZpbHRl
ci5jcHAKICAgICBVSVByb2Nlc3MvZ3RrL1RleHRDaGVja2VyR3RrLmNwcAogICAgIFVJUHJvY2Vz
cy9ndGsvV2ViQ29udGV4dEd0ay5jcHAKICAgICBVSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRNZW51
UHJveHlHdGsuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2Vi
S2V5Ym9hcmRFdmVudC5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL05hdGl2ZVdlYktleWJvYXJk
RXZlbnQuaAppbmRleCAyNzczMTcwLi4wMDU5N2QzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9OYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgKQEAgLTQ0LDkgKzQ0LDkgQEAgc3RydWN0IEtl
eXByZXNzQ29tbWFuZDsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUgIklu
cHV0TWV0aG9kRmlsdGVyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Db21wb3NpdGlvblJlc3VsdHMu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0dVbmlxdWVQdHJHdGsuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L0d0a0lucHV0TWV0aG9kRmlsdGVyLmg+CiB0eXBlZGVmIHVuaW9uIF9HZGtFdmVudCBHZGtFdmVu
dDsKICNlbmRpZgogCkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKICAgICBOYXRpdmVXZWJLZXli
b2FyZEV2ZW50KE5TRXZlbnQgKiwgYm9vbCBoYW5kbGVkQnlJbnB1dE1ldGhvZCwgY29uc3QgVmVj
dG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mKTsKICNlbGlmIFBMQVRGT1JNKEdUSykKICAg
ICBOYXRpdmVXZWJLZXlib2FyZEV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmKTsK
LSAgICBOYXRpdmVXZWJLZXlib2FyZEV2ZW50KEdka0V2ZW50KiwgY29uc3QgV2ViQ29yZTo6Q29t
cG9zaXRpb25SZXN1bHRzJiwgV2ViQ29yZTo6R3RrSW5wdXRNZXRob2RGaWx0ZXI6OkV2ZW50RmFr
ZWRGb3JDb21wb3NpdGlvbik7CisgICAgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChHZGtFdmVudCos
IGNvbnN0IFdlYkNvcmU6OkNvbXBvc2l0aW9uUmVzdWx0cyYsIElucHV0TWV0aG9kRmlsdGVyOjpF
dmVudEZha2VkRm9yQ29tcG9zaXRpb24pOwogI2VsaWYgUExBVEZPUk0oRUZMKQogICAgIE5hdGl2
ZVdlYktleWJvYXJkRXZlbnQoY29uc3QgRXZhc19FdmVudF9LZXlfRG93biosIGJvb2wpOwogICAg
IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQoY29uc3QgRXZhc19FdmVudF9LZXlfVXAqKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudEd0
ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYktleWJvYXJkRXZlbnRH
dGsuY3BwCmluZGV4IDQyNGUwYjMuLjdmZGFjZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9ndGsvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudEd0ay5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL2d0ay9OYXRpdmVXZWJLZXlib2FyZEV2ZW50R3RrLmNwcApAQCAtMzUsMTEg
KzM1LDExIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAotTmF0aXZlV2ViS2V5Ym9hcmRFdmVudDo6TmF0aXZlV2ViS2V5Ym9hcmRFdmVudChHZGtFdmVu
dCogZXZlbnQsIGNvbnN0IFdlYkNvcmU6OkNvbXBvc2l0aW9uUmVzdWx0cyYgY29tcG9zaXRpb25S
ZXN1bHRzLCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6RXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uIGZh
a2VkKQorTmF0aXZlV2ViS2V5Ym9hcmRFdmVudDo6TmF0aXZlV2ViS2V5Ym9hcmRFdmVudChHZGtF
dmVudCogZXZlbnQsIGNvbnN0IFdlYkNvcmU6OkNvbXBvc2l0aW9uUmVzdWx0cyYgY29tcG9zaXRp
b25SZXN1bHRzLCBJbnB1dE1ldGhvZEZpbHRlcjo6RXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uIGZh
a2VkKQogICAgIDogV2ViS2V5Ym9hcmRFdmVudChXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYktl
eWJvYXJkRXZlbnQoZXZlbnQsIGNvbXBvc2l0aW9uUmVzdWx0cykpCiAgICAgLCBtX25hdGl2ZUV2
ZW50KGdka19ldmVudF9jb3B5KGV2ZW50KSkKICAgICAsIG1fY29tcG9zaXRpb25SZXN1bHRzKGNv
bXBvc2l0aW9uUmVzdWx0cykKLSAgICAsIG1fZmFrZUV2ZW50Rm9yQ29tcG9zaXRpb24oZmFrZWQg
PT0gR3RrSW5wdXRNZXRob2RGaWx0ZXI6OkV2ZW50RmFrZWQpCisgICAgLCBtX2Zha2VFdmVudEZv
ckNvbXBvc2l0aW9uKGZha2VkID09IElucHV0TWV0aG9kRmlsdGVyOjpFdmVudEZha2VkKQogewog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3QmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3QmFzZS5jcHAKaW5kZXggOTY4NWM1MS4uYzYzODAzNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcApAQCAt
MzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlLmgiCiAKICNpbmNsdWRl
ICJEcmF3aW5nQXJlYVByb3h5SW1wbC5oIgorI2luY2x1ZGUgIklucHV0TWV0aG9kRmlsdGVyLmgi
CiAjaW5jbHVkZSAiTmF0aXZlV2ViTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIk5hdGl2ZVdlYldo
ZWVsRXZlbnQuaCIKICNpbmNsdWRlICJQYWdlQ2xpZW50SW1wbC5oIgpAQCAtNDYsNyArNDcsNiBA
QAogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgi
CiAjaW5jbHVkZSAiV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuaCIKLSNpbmNsdWRlICJX
ZWJWaWV3QmFzZUlucHV0TWV0aG9kRmlsdGVyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9DYWlyb1V0
aWxpdGllcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR1VuaXF1ZVB0ckd0ay5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvR3RrQ2xpY2tDb3VudGVyLmg+CkBAIC0xMDcsNyArMTA3LDcgQEAgc3RydWN0IF9X
ZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUgewogICAgIHVuc2lnbmVkIGluc3BlY3RvclZpZXdTaXpl
OwogICAgIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IGNvbnRleHRNZW51RXZlbnQ7CiAgICAgV2ViQ29u
dGV4dE1lbnVQcm94eUd0ayogYWN0aXZlQ29udGV4dE1lbnVQcm94eTsKLSAgICBXZWJWaWV3QmFz
ZUlucHV0TWV0aG9kRmlsdGVyIGlucHV0TWV0aG9kRmlsdGVyOworICAgIElucHV0TWV0aG9kRmls
dGVyIGlucHV0TWV0aG9kRmlsdGVyOwogICAgIFRvdWNoRXZlbnRzTWFwIHRvdWNoRXZlbnRzOwog
CiAgICAgR3RrV2luZG93KiB0b3BsZXZlbE9uU2NyZWVuV2luZG93OwpAQCAtMjk5LDExICsyOTks
MjEgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VSZWFsaXplKEd0a1dpZGdldCogd2lk
Z2V0KQogICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9iYWNrZ3JvdW5kKGd0a193aWRnZXRfZ2V0
X3N0eWxlX2NvbnRleHQod2lkZ2V0KSwgd2luZG93KTsKIAogICAgIFdlYktpdFdlYlZpZXdCYXNl
KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KTsKKyAgICBndGtfaW1fY29u
dGV4dF9zZXRfY2xpZW50X3dpbmRvdyh3ZWJWaWV3LT5wcml2LT5pbnB1dE1ldGhvZEZpbHRlci5j
b250ZXh0KCksIHdpbmRvdyk7CisKICAgICBHdGtXaWRnZXQqIHRvcGxldmVsID0gZ3RrX3dpZGdl
dF9nZXRfdG9wbGV2ZWwod2lkZ2V0KTsKICAgICBpZiAod2lkZ2V0SXNPbnNjcmVlblRvcGxldmVs
V2luZG93KHRvcGxldmVsKSkKICAgICAgICAgd2Via2l0V2ViVmlld0Jhc2VTZXRUb3BsZXZlbE9u
U2NyZWVuV2luZG93KHdlYlZpZXcsIEdUS19XSU5ET1codG9wbGV2ZWwpKTsKIH0KIAorc3RhdGlj
IHZvaWQgd2Via2l0V2ViVmlld0Jhc2VVbnJlYWxpemUoR3RrV2lkZ2V0KiB3aWRnZXQpCit7Cisg
ICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRn
ZXQpOworICAgIGd0a19pbV9jb250ZXh0X3NldF9jbGllbnRfd2luZG93KHdlYlZpZXctPnByaXYt
PmlucHV0TWV0aG9kRmlsdGVyLmNvbnRleHQoKSwgbnVsbHB0cik7CisKKyAgICBHVEtfV0lER0VU
X0NMQVNTKHdlYmtpdF93ZWJfdmlld19iYXNlX3BhcmVudF9jbGFzcyktPnVucmVhbGl6ZSh3aWRn
ZXQpOworfQorCiBzdGF0aWMgYm9vbCB3ZWJraXRXZWJWaWV3Q2hpbGRJc0ludGVybmFsV2lkZ2V0
KFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSwgR3RrV2lkZ2V0KiB3aWRnZXQpCiB7CiAg
ICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7CkBA
IC05NjUsNiArOTc1LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2Jhc2VfY2xhc3Nf
aW5pdChXZWJLaXRXZWJWaWV3QmFzZUNsYXNzKiB3ZWJraXRXZWJWaWUKIHsKICAgICBHdGtXaWRn
ZXRDbGFzcyogd2lkZ2V0Q2xhc3MgPSBHVEtfV0lER0VUX0NMQVNTKHdlYmtpdFdlYlZpZXdCYXNl
Q2xhc3MpOwogICAgIHdpZGdldENsYXNzLT5yZWFsaXplID0gd2Via2l0V2ViVmlld0Jhc2VSZWFs
aXplOworICAgIHdpZGdldENsYXNzLT51bnJlYWxpemUgPSB3ZWJraXRXZWJWaWV3QmFzZVVucmVh
bGl6ZTsKICAgICB3aWRnZXRDbGFzcy0+ZHJhdyA9IHdlYmtpdFdlYlZpZXdCYXNlRHJhdzsKICAg
ICB3aWRnZXRDbGFzcy0+c2l6ZV9hbGxvY2F0ZSA9IHdlYmtpdFdlYlZpZXdCYXNlU2l6ZUFsbG9j
YXRlOwogICAgIHdpZGdldENsYXNzLT5tYXAgPSB3ZWJraXRXZWJWaWV3QmFzZU1hcDsKQEAgLTEw
NTAsNiArMTA2MSw4IEBAIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VDcmVhdGVXZWJQYWdlKFdlYktp
dFdlYlZpZXdCYXNlKiB3ZWJraXRXZWJWaWV3QmFzZSwgV2ViQ29uCiAgICAgcHJpdi0+cGFnZVBy
b3h5ID0gY29udGV4dC0+Y3JlYXRlV2ViUGFnZSgqcHJpdi0+cGFnZUNsaWVudCwgV1RGOjptb3Zl
KHdlYlBhZ2VDb25maWd1cmF0aW9uKSk7CiAgICAgcHJpdi0+cGFnZVByb3h5LT5pbml0aWFsaXpl
V2ViUGFnZSgpOwogCisgICAgcHJpdi0+aW5wdXRNZXRob2RGaWx0ZXIuc2V0UGFnZShwcml2LT5w
YWdlUHJveHkuZ2V0KCkpOworCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKSAmJiBQTEFURk9S
TShYMTEpCiAgICAgaWYgKHByaXYtPnJlZGlyZWN0ZWRXaW5kb3cpCiAgICAgICAgIHByaXYtPnBh
Z2VQcm94eS0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1dpbmRvd0lkKHByaXYtPnJlZGlyZWN0
ZWRXaW5kb3ctPndpbmRvd0lkKCkpOwpAQCAtMTA2MiwxMCArMTA3NSw2IEBAIHZvaWQgd2Via2l0
V2ViVmlld0Jhc2VDcmVhdGVXZWJQYWdlKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJraXRXZWJWaWV3
QmFzZSwgV2ViQ29uCiAjZW5kaWYKIAogICAgIHdlYmtpdFdlYlZpZXdCYXNlVXBkYXRlUHJlZmVy
ZW5jZXMod2Via2l0V2ViVmlld0Jhc2UpOwotCi0gICAgLy8gVGhpcyBtdXN0IGhhcHBlbiBoZXJl
IGluc3RlYWQgb2YgdGhlIGluc3RhbmNlIGluaXRpYWxpemVyLCBiZWNhdXNlIHRoZSBpbnB1dCBt
ZXRob2QKLSAgICAvLyBmaWx0ZXIgbXVzdCBoYXZlIGFjY2VzcyB0byB0aGUgcGFnZS4KLSAgICBw
cml2LT5pbnB1dE1ldGhvZEZpbHRlci5zZXRXZWJWaWV3KHdlYmtpdFdlYlZpZXdCYXNlKTsKIH0K
IAogdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVNldFRvb2x0aXBUZXh0KFdlYktpdFdlYlZpZXdCYXNl
KiB3ZWJWaWV3QmFzZSwgY29uc3QgY2hhciogdG9vbHRpcCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYlZpZXdCYXNlSW5wdXRNZXRob2RGaWx0ZXIuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViVmlld0Jhc2VJbnB1dE1ldGhv
ZEZpbHRlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwOTk4MmUuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViVmlld0Jhc2VJbnB1
dE1ldGhvZEZpbHRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJXZWJWaWV3QmFzZUlucHV0TWV0aG9kRmlsdGVyLmgiCi0KLSNpbmNsdWRlICJOYXRpdmVX
ZWJLZXlib2FyZEV2ZW50LmgiCi0jaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgi
Ci0jaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Db2xvci5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvQ29tcG9zaXRpb25SZXN1bHRzLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9FZGl0b3IuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJL
aXQgewotCi12b2lkIFdlYlZpZXdCYXNlSW5wdXRNZXRob2RGaWx0ZXI6OnNldFdlYlZpZXcoV2Vi
S2l0V2ViVmlld0Jhc2UqIHdlYlZpZXcpCi17Ci0gICAgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OnNl
dFdpZGdldChHVEtfV0lER0VUKHdlYlZpZXcpKTsKLQotICAgIG1fd2ViUGFnZVByb3h5ID0gd2Vi
a2l0V2ViVmlld0Jhc2VHZXRQYWdlKHdlYlZpZXcpOwotICAgIEFTU0VSVChtX3dlYlBhZ2VQcm94
eSk7Ci19Ci0KLWJvb2wgV2ViVmlld0Jhc2VJbnB1dE1ldGhvZEZpbHRlcjo6Y2FuRWRpdCgpCi17
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViVmlld0Jhc2VJbnB1dE1ldGhvZEZpbHRl
cjo6c2VuZFNpbXBsZUtleUV2ZW50KEdka0V2ZW50S2V5KiBldmVudCwgV1RGOjpTdHJpbmcgc2lt
cGxlU3RyaW5nLCBFdmVudEZha2VkRm9yQ29tcG9zaXRpb24gZmFrZWQpCi17Ci0gICAgQVNTRVJU
KG1fd2ViUGFnZVByb3h5KTsKLSAgICBtX3dlYlBhZ2VQcm94eS0+aGFuZGxlS2V5Ym9hcmRFdmVu
dChOYXRpdmVXZWJLZXlib2FyZEV2ZW50KHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQqPihldmVu
dCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wb3NpdGlvblJl
c3VsdHMoc2ltcGxlU3RyaW5nKSwgZmFrZWQpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBXZWJWaWV3QmFzZUlucHV0TWV0aG9kRmlsdGVyOjpzZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRp
b25SZXN1bHRzKEdka0V2ZW50S2V5KiBldmVudCwgUmVzdWx0c1RvU2VuZCByZXN1bHRzVG9TZW5k
LCBFdmVudEZha2VkRm9yQ29tcG9zaXRpb24gZmFrZWQpCi17Ci0gICAgQVNTRVJUKG1fd2ViUGFn
ZVByb3h5KTsKLSAgICBtX3dlYlBhZ2VQcm94eS0+aGFuZGxlS2V5Ym9hcmRFdmVudChOYXRpdmVX
ZWJLZXlib2FyZEV2ZW50KHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQqPihldmVudCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9zaXRpb25SZXN1bHRzKENv
bXBvc2l0aW9uUmVzdWx0czo6V2lsbFNlbmRDb21wb3NpdGlvblJlc3VsdHNTb29uKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWtlZCkpOwotCi0gICAgaWYgKHJl
c3VsdHNUb1NlbmQgJiBDb21wb3NpdGlvbiAmJiAhbV9jb25maXJtZWRDb21wb3NpdGlvbi5pc051
bGwoKSkKLSAgICAgICAgY29uZmlybUNvbXBvc2l0aW9uVGV4dChtX2NvbmZpcm1lZENvbXBvc2l0
aW9uKTsKLSAgICBpZiAocmVzdWx0c1RvU2VuZCAmIFByZWVkaXQgJiYgIW1fcHJlZWRpdC5pc051
bGwoKSkKLSAgICAgICAgc2V0UHJlZWRpdChtX3ByZWVkaXQsIG1fY3Vyc29yT2Zmc2V0KTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBXZWJWaWV3QmFzZUlucHV0TWV0aG9kRmlsdGVyOjpj
b25maXJtQ29tcG9zaXRpb25UZXh0KFN0cmluZyB0ZXh0KQotewotICAgIEFTU0VSVChtX3dlYlBh
Z2VQcm94eSk7Ci0gICAgbV93ZWJQYWdlUHJveHktPmNvbmZpcm1Db21wb3NpdGlvbih0ZXh0LCAt
MSwgMCk7Ci19Ci0KLXZvaWQgV2ViVmlld0Jhc2VJbnB1dE1ldGhvZEZpbHRlcjo6Y29uZmlybUN1
cnJlbnRDb21wb3NpdGlvbigpCi17Ci0gICAgQVNTRVJUKG1fd2ViUGFnZVByb3h5KTsKLSAgICBt
X3dlYlBhZ2VQcm94eS0+Y29uZmlybUNvbXBvc2l0aW9uKFN0cmluZygpLCAtMSwgMCk7Ci19Ci0K
LXZvaWQgV2ViVmlld0Jhc2VJbnB1dE1ldGhvZEZpbHRlcjo6Y2FuY2VsQ3VycmVudENvbXBvc2l0
aW9uKCkKLXsKLSAgICBBU1NFUlQobV93ZWJQYWdlUHJveHkpOwotICAgIG1fd2ViUGFnZVByb3h5
LT5jYW5jZWxDb21wb3NpdGlvbigpOwotfQotCi12b2lkIFdlYlZpZXdCYXNlSW5wdXRNZXRob2RG
aWx0ZXI6OnNldFByZWVkaXQoU3RyaW5nIG5ld1ByZWVkaXQsIGludCAvKiBjdXJzb3JPZmZzZXQg
Ki8pCi17Ci0gICAgLy8gVE9ETzogV2Ugc2hvdWxkIHBhcnNlIHRoZSBQYW5nb0F0dHJMaXN0IHRo
YXQgd2UgZ2V0IGZyb20gdGhlIElNIGNvbnRleHQgaGVyZS4KLSAgICBBU1NFUlQobV93ZWJQYWdl
UHJveHkpOwotICAgIG1fd2ViUGFnZVByb3h5LT5zZXRDb21wb3NpdGlvbihuZXdQcmVlZGl0LCBW
ZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+eyBDb21wb3NpdGlvblVuZGVybGluZSgwLCBuZXdQ
cmVlZGl0Lmxlbmd0aCgpLCBDb2xvcigxLCAxLCAxKSwgZmFsc2UpIH0sCi0gICAgICAgIG1fY3Vy
c29yT2Zmc2V0LCBtX2N1cnNvck9mZnNldCwgMCAvKiByZXBsYWNlbWVudCBzdGFydCAqLywgMCAv
KiByZXBsYWNlbWVudCBlbmQgKi8pOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYlZpZXdCYXNlSW5wdXRN
ZXRob2RGaWx0ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYlZpZXdC
YXNlSW5wdXRNZXRob2RGaWx0ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNk
ZThiMS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJW
aWV3QmFzZUlucHV0TWV0aG9kRmlsdGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgV2ViVmlld0Jh
c2VJbnB1dE1ldGhvZEZpbHRlcl9oCi0jZGVmaW5lIFdlYlZpZXdCYXNlSW5wdXRNZXRob2RGaWx0
ZXJfaAotCi0jaW5jbHVkZSAiR3RrSW5wdXRNZXRob2RGaWx0ZXIuaCIKLSNpbmNsdWRlICJXZWJQ
YWdlUHJveHkuaCIKLQotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdCYXNlIFdlYktpdFdl
YlZpZXdCYXNlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViVmlld0Jhc2VJbnB1
dE1ldGhvZEZpbHRlciA6IHB1YmxpYyBXZWJDb3JlOjpHdGtJbnB1dE1ldGhvZEZpbHRlciB7Ci1w
dWJsaWM6Ci0gICAgdm9pZCBzZXRXZWJWaWV3KFdlYktpdFdlYlZpZXdCYXNlKik7Ci0KLXByb3Rl
Y3RlZDoKLSAgICB2aXJ0dWFsIGJvb2wgc2VuZFNpbXBsZUtleUV2ZW50KEdka0V2ZW50S2V5Kiwg
V1RGOjpTdHJpbmcgZXZlbnRTdHJpbmcsIEV2ZW50RmFrZWRGb3JDb21wb3NpdGlvbik7Ci0gICAg
dmlydHVhbCBib29sIHNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMoR2RrRXZlbnRL
ZXkqLCBSZXN1bHRzVG9TZW5kLCBFdmVudEZha2VkRm9yQ29tcG9zaXRpb24pOwotICAgIHZpcnR1
YWwgYm9vbCBjYW5FZGl0KCk7Ci0gICAgdmlydHVhbCB2b2lkIGNvbmZpcm1Db21wb3NpdGlvblRl
eHQoU3RyaW5nKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29uZmlybUN1cnJlbnRDb21wb3NpdGlvbigp
OwotICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxDdXJyZW50Q29tcG9zaXRpb24oKTsKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0UHJlZWRpdChTdHJpbmcsIGludCBjdXJzb3JPZmZzZXQpOwotCi1wcml2YXRl
OgotICAgIFdlYlBhZ2VQcm94eSogbV93ZWJQYWdlUHJveHk7Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKLQotI2VuZGlmIC8vIFdlYlZpZXdCYXNlSW5wdXRNZXRob2RGaWx0ZXJfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9JbnB1dE1ldGhvZEZpbHRlci5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0lucHV0TWV0aG9kRmlsdGVyLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGM1MTJiCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9JbnB1dE1ldGhvZEZpbHRlci5jcHAK
QEAgLTAsMCArMSw0NDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQgSWdhbGlh
IFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklucHV0TWV0aG9kRmlsdGVyLmgi
CisKKyNpbmNsdWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiV2ViUGFn
ZVByb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Db2xvci5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
Q29tcG9zaXRpb25SZXN1bHRzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FZGl0b3IuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0dVbmlxdWVQdHJHdGsuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3Qu
aD4KKyNpbmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1VuaXF1ZVB0ci5o
PgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3Zv
aWQgSW5wdXRNZXRob2RGaWx0ZXI6OmhhbmRsZUNvbW1pdENhbGxiYWNrKElucHV0TWV0aG9kRmls
dGVyKiBmaWx0ZXIsIGNvbnN0IGNoYXIqIGNvbXBvc2l0aW9uU3RyaW5nKQoreworICAgIGZpbHRl
ci0+aGFuZGxlQ29tbWl0KGNvbXBvc2l0aW9uU3RyaW5nKTsKK30KKwordm9pZCBJbnB1dE1ldGhv
ZEZpbHRlcjo6aGFuZGxlUHJlZWRpdFN0YXJ0Q2FsbGJhY2soSW5wdXRNZXRob2RGaWx0ZXIqIGZp
bHRlcikKK3sKKyAgICBmaWx0ZXItPmhhbmRsZVByZWVkaXRTdGFydCgpOworfQorCit2b2lkIElu
cHV0TWV0aG9kRmlsdGVyOjpoYW5kbGVQcmVlZGl0Q2hhbmdlZENhbGxiYWNrKElucHV0TWV0aG9k
RmlsdGVyKiBmaWx0ZXIpCit7CisgICAgZmlsdGVyLT5oYW5kbGVQcmVlZGl0Q2hhbmdlZCgpOwor
fQorCit2b2lkIElucHV0TWV0aG9kRmlsdGVyOjpoYW5kbGVQcmVlZGl0RW5kQ2FsbGJhY2soSW5w
dXRNZXRob2RGaWx0ZXIqIGZpbHRlcikKK3sKKyAgICBmaWx0ZXItPmhhbmRsZVByZWVkaXRFbmQo
KTsKK30KKworSW5wdXRNZXRob2RGaWx0ZXI6OklucHV0TWV0aG9kRmlsdGVyKCkKKyAgICA6IG1f
Y29udGV4dChhZG9wdEdSZWYoZ3RrX2ltX211bHRpY29udGV4dF9uZXcoKSkpCisgICAgLCBtX3Bh
Z2UobnVsbHB0cikKKyAgICAsIG1fZW5hYmxlZChmYWxzZSkKKyAgICAsIG1fY29tcG9zaW5nVGV4
dEN1cnJlbnRseShmYWxzZSkKKyAgICAsIG1fZmlsdGVyaW5nS2V5RXZlbnQoZmFsc2UpCisgICAg
LCBtX3ByZWVkaXRDaGFuZ2VkKGZhbHNlKQorICAgICwgbV9wcmV2ZW50TmV4dENvbW1pdChmYWxz
ZSkKKyAgICAsIG1fanVzdFNlbnRGYWtlS2V5VXAoZmFsc2UpCisgICAgLCBtX2N1cnNvck9mZnNl
dCgwKQorICAgICwgbV9sYXN0RmlsdGVyZWRLZXlQcmVzc0NvZGVXaXRoTm9SZXN1bHRzKEdES19L
RVlfVm9pZFN5bWJvbCkKKyNpZiBFTkFCTEUoQVBJX1RFU1RTKQorICAgICwgbV90ZXN0aW5nTW9k
ZShmYWxzZSkKKyNlbmRpZgoreworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2NvbnRl
eHQuZ2V0KCksICJjb21taXQiLCBHX0NBTExCQUNLKGhhbmRsZUNvbW1pdENhbGxiYWNrKSwgdGhp
cyk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fY29udGV4dC5nZXQoKSwgInByZWVk
aXQtc3RhcnQiLCBHX0NBTExCQUNLKGhhbmRsZVByZWVkaXRTdGFydENhbGxiYWNrKSwgdGhpcyk7
CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fY29udGV4dC5nZXQoKSwgInByZWVkaXQt
Y2hhbmdlZCIsIEdfQ0FMTEJBQ0soaGFuZGxlUHJlZWRpdENoYW5nZWRDYWxsYmFjayksIHRoaXMp
OworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2NvbnRleHQuZ2V0KCksICJwcmVlZGl0
LWVuZCIsIEdfQ0FMTEJBQ0soaGFuZGxlUHJlZWRpdEVuZENhbGxiYWNrKSwgdGhpcyk7Cit9CisK
K0lucHV0TWV0aG9kRmlsdGVyOjp+SW5wdXRNZXRob2RGaWx0ZXIoKQoreworICAgIGdfc2lnbmFs
X2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX2NvbnRleHQuZ2V0KCksIEdfU0lHTkFMX01B
VENIX0RBVEEsIDAsIDAsIG51bGxwdHIsIG51bGxwdHIsIHRoaXMpOworfQorCit2b2lkIElucHV0
TWV0aG9kRmlsdGVyOjpzZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBBU1NFUlQobV9w
YWdlKTsKKworICAgIG1fZW5hYmxlZCA9IGVuYWJsZWQ7CisgICAgaWYgKGVuYWJsZWQpCisgICAg
ICAgIGd0a19pbV9jb250ZXh0X2ZvY3VzX2luKG1fY29udGV4dC5nZXQoKSk7CisgICAgZWxzZQor
ICAgICAgICBndGtfaW1fY29udGV4dF9mb2N1c19vdXQobV9jb250ZXh0LmdldCgpKTsKK30KKwor
dm9pZCBJbnB1dE1ldGhvZEZpbHRlcjo6c2V0Q3Vyc29yUmVjdChjb25zdCBJbnRSZWN0JiBjdXJz
b3JSZWN0KQoreworICAgIEFTU0VSVChtX3BhZ2UpOworICAgIC8vIERvbid0IG1vdmUgdGhlIHdp
bmRvdyB1bmxlc3MgdGhlIGN1cnNvciBhY3R1YWxseSBtb3ZlcyBtb3JlIHRoYW4gMTAKKyAgICAv
LyBwaXhlbHMuIFRoaXMgcHJldmVudHMgdXMgZnJvbSBtYWtpbmcgdGhlIHdpbmRvdyBmbGFzaCBk
dXJpbmcgbWlub3IKKyAgICAvLyBjdXJzb3IgYWRqdXN0bWVudHMuCisgICAgc3RhdGljIGNvbnN0
IGludCB3aW5kb3dNb3ZlbWVudFRocmVzaG9sZCA9IDEwICogMTA7CisgICAgaWYgKGN1cnNvclJl
Y3QubG9jYXRpb24oKS5kaXN0YW5jZVNxdWFyZWRUb1BvaW50KG1fbGFzdENhcmVMb2NhdGlvbikg
PCB3aW5kb3dNb3ZlbWVudFRocmVzaG9sZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9sYXN0
Q2FyZUxvY2F0aW9uID0gY3Vyc29yUmVjdC5sb2NhdGlvbigpOworICAgIEludFJlY3QgdHJhbnNs
YXRlZFJlY3QgPSBjdXJzb3JSZWN0OworCisgICAgQVNTRVJUKG1fd2lkZ2V0KTsKKyAgICBHdGtB
bGxvY2F0aW9uIGFsbG9jYXRpb247CisgICAgZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGlvbihtX3Bh
Z2UtPnZpZXdXaWRnZXQoKSwgJmFsbG9jYXRpb24pOworICAgIHRyYW5zbGF0ZWRSZWN0Lm1vdmUo
YWxsb2NhdGlvbi54LCBhbGxvY2F0aW9uLnkpOworCisgICAgR2RrUmVjdGFuZ2xlIGdka0N1cnNv
clJlY3QgPSB0cmFuc2xhdGVkUmVjdDsKKyAgICBndGtfaW1fY29udGV4dF9zZXRfY3Vyc29yX2xv
Y2F0aW9uKG1fY29udGV4dC5nZXQoKSwgJmdka0N1cnNvclJlY3QpOworfQorCit2b2lkIElucHV0
TWV0aG9kRmlsdGVyOjpoYW5kbGVLZXlib2FyZEV2ZW50KEdka0V2ZW50S2V5KiBldmVudCwgY29u
c3QgU3RyaW5nJiBzaW1wbGVTdHJpbmcsIEV2ZW50RmFrZWRGb3JDb21wb3NpdGlvbiBmYWtlZCkK
K3sKKyNpZiBFTkFCTEUoQVBJX1RFU1RTKQorICAgIGlmIChtX3Rlc3RpbmdNb2RlKSB7CisgICAg
ICAgIGxvZ0hhbmRsZUtleWJvYXJkRXZlbnRGb3JUZXN0aW5nKGV2ZW50LCBzaW1wbGVTdHJpbmcs
IGZha2VkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorICAgIG1fcGFnZS0+aGFu
ZGxlS2V5Ym9hcmRFdmVudChOYXRpdmVXZWJLZXlib2FyZEV2ZW50KHJlaW50ZXJwcmV0X2Nhc3Q8
R2RrRXZlbnQqPihldmVudCksIENvbXBvc2l0aW9uUmVzdWx0cyhzaW1wbGVTdHJpbmcpLCBmYWtl
ZCkpOworfQorCit2b2lkIElucHV0TWV0aG9kRmlsdGVyOjpoYW5kbGVLZXlib2FyZEV2ZW50V2l0
aENvbXBvc2l0aW9uUmVzdWx0cyhHZGtFdmVudEtleSogZXZlbnQsIFJlc3VsdHNUb1NlbmQgcmVz
dWx0c1RvU2VuZCwgRXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uIGZha2VkKQoreworI2lmIEVOQUJM
RShBUElfVEVTVFMpCisgICAgaWYgKG1fdGVzdGluZ01vZGUpIHsKKyAgICAgICAgbG9nSGFuZGxl
S2V5Ym9hcmRFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHNGb3JUZXN0aW5nKGV2ZW50LCByZXN1
bHRzVG9TZW5kLCBmYWtlZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBt
X3BhZ2UtPmhhbmRsZUtleWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChyZWludGVy
cHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpLCBDb21wb3NpdGlvblJlc3VsdHMoQ29tcG9zaXRp
b25SZXN1bHRzOjpXaWxsU2VuZENvbXBvc2l0aW9uUmVzdWx0c1Nvb24pLCBmYWtlZCkpOworCisg
ICAgaWYgKHJlc3VsdHNUb1NlbmQgJiBDb21wb3NpdGlvbiAmJiAhbV9jb25maXJtZWRDb21wb3Np
dGlvbi5pc051bGwoKSkKKyAgICAgICAgbV9wYWdlLT5jb25maXJtQ29tcG9zaXRpb24obV9jb25m
aXJtZWRDb21wb3NpdGlvbiwgLTEsIDApOworCisgICAgaWYgKHJlc3VsdHNUb1NlbmQgJiBQcmVl
ZGl0ICYmICFtX3ByZWVkaXQuaXNOdWxsKCkpIHsKKyAgICAgICAgbV9wYWdlLT5zZXRDb21wb3Np
dGlvbihtX3ByZWVkaXQsIFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluZT57IENvbXBvc2l0aW9u
VW5kZXJsaW5lKDAsIG1fcHJlZWRpdC5sZW5ndGgoKSwgQ29sb3IoMSwgMSwgMSksIGZhbHNlKSB9
LAorICAgICAgICAgICAgbV9jdXJzb3JPZmZzZXQsIG1fY3Vyc29yT2Zmc2V0LCAwIC8qIHJlcGxh
Y2VtZW50IHN0YXJ0ICovLCAwIC8qIHJlcGxhY2VtZW50IGVuZCAqLyk7CisgICAgfQorfQorCit2
b2lkIElucHV0TWV0aG9kRmlsdGVyOjpmaWx0ZXJLZXlFdmVudChHZGtFdmVudEtleSogZXZlbnQp
Cit7CisjaWYgRU5BQkxFKEFQSV9URVNUUykKKyAgICBBU1NFUlQobV9wYWdlIHx8IG1fdGVzdGlu
Z01vZGUpOworI2Vsc2UKKyAgICBBU1NFUlQobV9wYWdlKTsKKyNlbmRpZgorICAgIGlmICghbV9l
bmFibGVkKSB7CisgICAgICAgIGhhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgbV9wcmVlZGl0Q2hhbmdlZCA9IGZhbHNlOworICAgIG1fZmls
dGVyaW5nS2V5RXZlbnQgPSB0cnVlOworCisgICAgdW5zaWduZWQgbGFzdEZpbHRlcmVkS2V5UHJl
c3NDb2RlV2l0aE5vUmVzdWx0cyA9IG1fbGFzdEZpbHRlcmVkS2V5UHJlc3NDb2RlV2l0aE5vUmVz
dWx0czsKKyAgICBtX2xhc3RGaWx0ZXJlZEtleVByZXNzQ29kZVdpdGhOb1Jlc3VsdHMgPSBHREtf
S0VZX1ZvaWRTeW1ib2w7CisKKyAgICBib29sIGZpbHRlcmVkID0gZ3RrX2ltX2NvbnRleHRfZmls
dGVyX2tleXByZXNzKG1fY29udGV4dC5nZXQoKSwgZXZlbnQpOworICAgIG1fZmlsdGVyaW5nS2V5
RXZlbnQgPSBmYWxzZTsKKworICAgIGJvb2wganVzdFNlbnRGYWtlS2V5VXAgPSBtX2p1c3RTZW50
RmFrZUtleVVwOworICAgIG1fanVzdFNlbnRGYWtlS2V5VXAgPSBmYWxzZTsKKyAgICBpZiAoanVz
dFNlbnRGYWtlS2V5VXAgJiYgZXZlbnQtPnR5cGUgPT0gR0RLX0tFWV9SRUxFQVNFKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBTaW1wbGUgaW5wdXQgbWV0aG9kcyB3b3JrIHN1Y2ggdGhhdCBl
dmVuIG5vcm1hbCBrZXlzdHJva2VzIGZpcmUgdGhlCisgICAgLy8gY29tbWl0IHNpZ25hbC4gV2Ug
ZGV0ZWN0IHRob3NlIHNpdHVhdGlvbnMgYW5kIHRyZWF0IHRoZW0gYXMgbm9ybWFsCisgICAgLy8g
a2V5IGV2ZW50cywgc3VwcGx5aW5nIHRoZSBjb21taXQgc3RyaW5nIGFzIHRoZSBrZXkgY2hhcmFj
dGVyLgorICAgIGlmIChmaWx0ZXJlZCAmJiAhbV9jb21wb3NpbmdUZXh0Q3VycmVudGx5ICYmICFt
X3ByZWVkaXRDaGFuZ2VkICYmIG1fY29uZmlybWVkQ29tcG9zaXRpb24ubGVuZ3RoKCkgPT0gMSkg
eworICAgICAgICBoYW5kbGVLZXlib2FyZEV2ZW50KGV2ZW50LCBtX2NvbmZpcm1lZENvbXBvc2l0
aW9uKTsKKyAgICAgICAgbV9jb25maXJtZWRDb21wb3NpdGlvbiA9IFN0cmluZygpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGZpbHRlcmVkICYmIGV2ZW50LT50eXBlID09IEdE
S19LRVlfUFJFU1MpIHsKKyAgICAgICAgaWYgKCFtX3ByZWVkaXRDaGFuZ2VkICYmIG1fY29uZmly
bWVkQ29tcG9zaXRpb24uaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIG1fY29tcG9zaW5nVGV4dEN1
cnJlbnRseSA9IHRydWU7CisgICAgICAgICAgICBtX2xhc3RGaWx0ZXJlZEtleVByZXNzQ29kZVdp
dGhOb1Jlc3VsdHMgPSBldmVudC0+a2V5dmFsOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgaGFuZGxlS2V5Ym9hcmRFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMo
ZXZlbnQpOworICAgICAgICBpZiAoIW1fY29uZmlybWVkQ29tcG9zaXRpb24uaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkgPSBmYWxzZTsKKyAgICAgICAg
ICAgIG1fY29uZmlybWVkQ29tcG9zaXRpb24gPSBTdHJpbmcoKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gSWYgd2UgcHJldmlvdXNseSBmaWx0ZXJlZCBhIGtl
eSBwcmVzcyBldmVudCBhbmQgaXQgeWllbGRlZCBubyByZXN1bHRzLiBTdXBwcmVzcworICAgIC8v
IHRoZSBjb3JyZXNwb25kaW5nIGtleSByZWxlYXNlIGV2ZW50IHRvIGF2b2lkIGNvbmZ1c2luZyB0
aGUgd2ViIGNvbnRlbnQuCisgICAgaWYgKGV2ZW50LT50eXBlID09IEdES19LRVlfUkVMRUFTRSAm
JiBsYXN0RmlsdGVyZWRLZXlQcmVzc0NvZGVXaXRoTm9SZXN1bHRzID09IGV2ZW50LT5rZXl2YWwp
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIEF0IHRoaXMgcG9pbnQgYSBrZXlzdHJva2Ugd2Fz
IGVpdGhlcjoKKyAgICAvLyAxLiBVbmZpbHRlcmVkCisgICAgLy8gMi4gQSBmaWx0ZXJlZCBrZXl1
cCBldmVudC4gQXMgdGhlIElNRSBjb2RlIGluIEVkaXRvckNsaWVudC5oIGRvZXNuJ3QKKyAgICAv
LyAgICBldmVyIGxvb2sgYXQga2V5dXAgZXZlbnRzLCB3ZSBzZW5kIGFueSBjb21wb3NpdGlvbiBy
ZXN1bHRzIGJlZm9yZQorICAgIC8vICAgIHRoZSBrZXkgZXZlbnQuCisgICAgLy8gQm90aCBtaWdo
dCBoYXZlIGNvbXBvc2l0aW9uIHJlc3VsdHMgb3Igbm90LgorICAgIC8vCisgICAgLy8gSXQncyBp
bXBvcnRhbnQgdG8gc2VuZCB0aGUgY29tcG9zaXRpb24gcmVzdWx0cyBiZWZvcmUgdGhlIGV2ZW50
CisgICAgLy8gYmVjYXVzZSBzb21lIElNIG1vZHVsZXMgb3BlcmF0ZSB0aGF0IHdheS4gRm9yIGV4
YW1wbGUgKHRha2VuIGZyb20KKyAgICAvLyB0aGUgQ2hyb21pdW0gc291cmNlKSwgdGhlIGxhdGlu
LXBvc3QgaW5wdXQgbWV0aG9kIGdpdmVzIHRoaXMgc2VxdWVuY2UKKyAgICAvLyB3aGVuIHlvdSBw
cmVzcyAnYScgYW5kIHRoZW4gYmFja3NwYWNlOgorICAgIC8vICAxLiBrZXlkb3duICdhJyAoZmls
dGVyZWQpCisgICAgLy8gIDIuIHByZWVkaXQgY2hhbmdlZCB0byAiYSIKKyAgICAvLyAgMy4ga2V5
dXAgJ2EnICh1bmZpbHRlcmVkKQorICAgIC8vICA0LiBrZXlkb3duIEJhY2tzcGFjZSAodW5maWx0
ZXJlZCkKKyAgICAvLyAgNS4gY29tbWl0ICJhIgorICAgIC8vICA2LiBwcmVlZGl0IGVuZAorICAg
IGlmICghbV9jb25maXJtZWRDb21wb3NpdGlvbi5pc0VtcHR5KCkpCisgICAgICAgIGNvbmZpcm1D
b21wb3NpdGlvbigpOworICAgIGlmIChtX3ByZWVkaXRDaGFuZ2VkKQorICAgICAgICB1cGRhdGVQ
cmVlZGl0KCk7CisgICAgaGFuZGxlS2V5Ym9hcmRFdmVudChldmVudCk7Cit9CisKK3ZvaWQgSW5w
dXRNZXRob2RGaWx0ZXI6OmNvbmZpcm1Db21wb3NpdGlvbigpCit7CisjaWYgRU5BQkxFKEFQSV9U
RVNUUykKKyAgICBpZiAobV90ZXN0aW5nTW9kZSkgeworICAgICAgICBsb2dDb25maXJtQ29tcG9z
aXRpb25Gb3JUZXN0aW5nKCk7CisgICAgICAgIG1fY29uZmlybWVkQ29tcG9zaXRpb24gPSBTdHJp
bmcoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorICAgIG1fcGFnZS0+Y29uZmly
bUNvbXBvc2l0aW9uKG1fY29uZmlybWVkQ29tcG9zaXRpb24sIC0xLCAwKTsKKyAgICBtX2NvbmZp
cm1lZENvbXBvc2l0aW9uID0gU3RyaW5nKCk7Cit9CisKK3ZvaWQgSW5wdXRNZXRob2RGaWx0ZXI6
OnVwZGF0ZVByZWVkaXQoKQoreworI2lmIEVOQUJMRShBUElfVEVTVFMpCisgICAgaWYgKG1fdGVz
dGluZ01vZGUpIHsKKyAgICAgICAgbG9nU2V0UHJlZWRpdEZvclRlc3RpbmcoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyNlbmRpZgorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcGFyc2UgdGhl
IFBhbmdvQXR0ckxpc3QgdGhhdCB3ZSBnZXQgZnJvbSB0aGUgSU0gY29udGV4dCBoZXJlLgorICAg
IG1fcGFnZS0+c2V0Q29tcG9zaXRpb24obV9wcmVlZGl0LCBWZWN0b3I8Q29tcG9zaXRpb25VbmRl
cmxpbmU+eyBDb21wb3NpdGlvblVuZGVybGluZSgwLCBtX3ByZWVkaXQubGVuZ3RoKCksIENvbG9y
KDEsIDEsIDEpLCBmYWxzZSkgfSwKKyAgICAgICAgbV9jdXJzb3JPZmZzZXQsIG1fY3Vyc29yT2Zm
c2V0LCAwIC8qIHJlcGxhY2VtZW50IHN0YXJ0ICovLCAwIC8qIHJlcGxhY2VtZW50IGVuZCAqLyk7
CisgICAgbV9wcmVlZGl0Q2hhbmdlZCA9IGZhbHNlOworfQorCit2b2lkIElucHV0TWV0aG9kRmls
dGVyOjpub3RpZnlGb2N1c2VkSW4oKQoreworI2lmIEVOQUJMRShBUElfVEVTVFMpCisgICAgQVNT
RVJUKG1fcGFnZSB8fCBtX3Rlc3RpbmdNb2RlKTsKKyNlbHNlCisgICAgQVNTRVJUKG1fcGFnZSk7
CisjZW5kaWYKKyAgICBtX2VuYWJsZWQgPSB0cnVlOworICAgIGd0a19pbV9jb250ZXh0X2ZvY3Vz
X2luKG1fY29udGV4dC5nZXQoKSk7Cit9CisKK3ZvaWQgSW5wdXRNZXRob2RGaWx0ZXI6Om5vdGlm
eUZvY3VzZWRPdXQoKQoreworI2lmIEVOQUJMRShBUElfVEVTVFMpCisgICAgQVNTRVJUKG1fcGFn
ZSB8fCBtX3Rlc3RpbmdNb2RlKTsKKyNlbHNlCisgICAgQVNTRVJUKG1fcGFnZSk7CisjZW5kaWYK
KyAgICBpZiAoIW1fZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uZmlybUN1cnJl
bnRDb21wb3NpdGlvbigpOworICAgIGNhbmNlbENvbnRleHRDb21wb3NpdGlvbigpOworICAgIGd0
a19pbV9jb250ZXh0X2ZvY3VzX291dChtX2NvbnRleHQuZ2V0KCkpOworICAgIG1fZW5hYmxlZCA9
IGZhbHNlOworfQorCit2b2lkIElucHV0TWV0aG9kRmlsdGVyOjpub3RpZnlNb3VzZUJ1dHRvblBy
ZXNzKCkKK3sKKyNpZiBFTkFCTEUoQVBJX1RFU1RTKQorICAgIEFTU0VSVChtX3BhZ2UgfHwgbV90
ZXN0aW5nTW9kZSk7CisjZWxzZQorICAgIEFTU0VSVChtX3BhZ2UpOworI2VuZGlmCisKKyAgICAv
LyBDb25maXJtaW5nIHRoZSBjb21wb3NpdGlvbiBtYXkgdHJpZ2dlciBhIHNlbGVjdGlvbiBjaGFu
Z2UsIHdoaWNoCisgICAgLy8gbWlnaHQgdHJpZ2dlciBmdXJ0aGVyIHVud2FudGVkIGFjdGlvbnMg
b24gdGhlIGNvbnRleHQsIHNvIHdlIHByZXZlbnQKKyAgICAvLyB0aGF0IGJ5IHNldHRpbmcgbV9j
b21wb3NpbmdUZXh0Q3VycmVudGx5IHRvIGZhbHNlLgorICAgIGNvbmZpcm1DdXJyZW50Q29tcG9z
aXRpb24oKTsKKyAgICBjYW5jZWxDb250ZXh0Q29tcG9zaXRpb24oKTsKK30KKwordm9pZCBJbnB1
dE1ldGhvZEZpbHRlcjo6Y29uZmlybUN1cnJlbnRDb21wb3NpdGlvbigpCit7CisgICAgaWYgKCFt
X2NvbXBvc2luZ1RleHRDdXJyZW50bHkpCisgICAgICAgIHJldHVybjsKKyAgICBtX3BhZ2UtPmNv
bmZpcm1Db21wb3NpdGlvbihTdHJpbmcoKSwgLTEsIDApOworICAgIG1fY29tcG9zaW5nVGV4dEN1
cnJlbnRseSA9IGZhbHNlOworfQorCit2b2lkIElucHV0TWV0aG9kRmlsdGVyOjpjYW5jZWxDb250
ZXh0Q29tcG9zaXRpb24oKQoreworICAgIG1fcHJldmVudE5leHRDb21taXQgPSAhbV9wcmVlZGl0
LmlzRW1wdHkoKTsKKworICAgIGd0a19pbV9jb250ZXh0X3Jlc2V0KG1fY29udGV4dC5nZXQoKSk7
CisKKyAgICBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkgPSBmYWxzZTsKKyAgICBtX2p1c3RTZW50
RmFrZUtleVVwID0gZmFsc2U7CisgICAgbV9wcmVlZGl0ID0gU3RyaW5nKCk7CisgICAgbV9jb25m
aXJtZWRDb21wb3NpdGlvbiA9IFN0cmluZygpOworfQorCit2b2lkIElucHV0TWV0aG9kRmlsdGVy
OjpzZW5kQ29tcG9zaXRpb25BbmRQcmVlZGl0V2l0aEZha2VLZXlFdmVudHMoUmVzdWx0c1RvU2Vu
ZCByZXN1bHRzVG9TZW5kKQoreworICAgIC8vIFRoZSBXaW5kb3dzIGNvbXBvc2l0aW9uIGtleSBl
dmVudCBjb2RlIGlzIDI5OSBvciBWS19QUk9DRVNTS0VZLiBXZSBuZWVkIHRvCisgICAgLy8gZW1p
dCB0aGlzIGNvZGUgZm9yIHdlYiBjb21wYXRpYmlsaXR5IHJlYXNvbnMgd2hlbiBrZXkgZXZlbnRz
IHRyaWdnZXIKKyAgICAvLyBjb21wb3NpdGlvbiByZXN1bHRzLiBHREsgZG9lc24ndCBoYXZlIGFu
IGVxdWl2YWxlbnQsIHNvIHdlIHNlbmQgVm9pZFN5bWJvbAorICAgIC8vIGhlcmUgdG8gV2ViQ29y
ZS4gUGxhdGZvcm1LZXlFdmVudCBrbm93cyB0byBjb252ZXJ0IHRoaXMgY29kZSBpbnRvCisgICAg
Ly8gVktfUFJPQ0VTU0tFWS4KKyAgICBzdGF0aWMgY29uc3QgaW50IGNvbXBvc2l0aW9uRXZlbnRL
ZXlDb2RlID0gR0RLX0tFWV9Wb2lkU3ltYm9sOworCisgICAgR1VuaXF1ZVB0cjxHZGtFdmVudD4g
ZXZlbnQoZ2RrX2V2ZW50X25ldyhHREtfS0VZX1BSRVNTKSk7CisgICAgZXZlbnQtPmtleS50aW1l
ID0gR0RLX0NVUlJFTlRfVElNRTsKKyAgICBldmVudC0+a2V5LmtleXZhbCA9IGNvbXBvc2l0aW9u
RXZlbnRLZXlDb2RlOworICAgIGhhbmRsZUtleWJvYXJkRXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1
bHRzKCZldmVudC0+a2V5LCByZXN1bHRzVG9TZW5kLCBFdmVudEZha2VkKTsKKworICAgIG1fY29u
ZmlybWVkQ29tcG9zaXRpb24gPSBTdHJpbmcoKTsKKyAgICBpZiAocmVzdWx0c1RvU2VuZCAmIENv
bXBvc2l0aW9uKQorICAgICAgICBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkgPSBmYWxzZTsKKwor
ICAgIGV2ZW50LT50eXBlID0gR0RLX0tFWV9SRUxFQVNFOworICAgIGhhbmRsZUtleWJvYXJkRXZl
bnQoJmV2ZW50LT5rZXksIFN0cmluZygpLCBFdmVudEZha2VkKTsKKyAgICBtX2p1c3RTZW50RmFr
ZUtleVVwID0gdHJ1ZTsKK30KKwordm9pZCBJbnB1dE1ldGhvZEZpbHRlcjo6aGFuZGxlQ29tbWl0
KGNvbnN0IGNoYXIqIGNvbXBvc2l0aW9uU3RyaW5nKQoreworICAgIGlmIChtX3ByZXZlbnROZXh0
Q29tbWl0KSB7CisgICAgICAgIG1fcHJldmVudE5leHRDb21taXQgPSBmYWxzZTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9lbmFibGVkKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX2NvbmZpcm1lZENvbXBvc2l0aW9uLmFwcGVuZChTdHJpbmc6OmZyb21VVEY4KGNvbXBv
c2l0aW9uU3RyaW5nKSk7CisKKyAgICAvLyBJZiB0aGUgY29tbWl0IHdhcyB0cmlnZ2VyZWQgb3V0
c2lkZSBvZiBhIGtleSBldmVudCwganVzdCBzZW5kCisgICAgLy8gdGhlIElNRSBldmVudCBub3cu
IElmIHdlIGFyZSBoYW5kbGluZyBhIGtleSBldmVudCwgd2UnbGwgZGVjaWRlCisgICAgLy8gbGF0
ZXIgaG93IHRvIGhhbmRsZSB0aGlzLgorICAgIGlmICghbV9maWx0ZXJpbmdLZXlFdmVudCkKKyAg
ICAgICAgc2VuZENvbXBvc2l0aW9uQW5kUHJlZWRpdFdpdGhGYWtlS2V5RXZlbnRzKENvbXBvc2l0
aW9uKTsKK30KKwordm9pZCBJbnB1dE1ldGhvZEZpbHRlcjo6aGFuZGxlUHJlZWRpdFN0YXJ0KCkK
K3sKKyAgICBpZiAobV9wcmV2ZW50TmV4dENvbW1pdCB8fCAhbV9lbmFibGVkKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9wcmVlZGl0Q2hhbmdlZCA9IHRydWU7CisgICAgbV9wcmVlZGl0ID0gZW1w
dHlTdHJpbmcoKTsKK30KKwordm9pZCBJbnB1dE1ldGhvZEZpbHRlcjo6aGFuZGxlUHJlZWRpdENo
YW5nZWQoKQoreworICAgIGlmICghbV9lbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBH
VW5pcXVlT3V0UHRyPGdjaGFyPiBuZXdQcmVlZGl0OworICAgIGd0a19pbV9jb250ZXh0X2dldF9w
cmVlZGl0X3N0cmluZyhtX2NvbnRleHQuZ2V0KCksICZuZXdQcmVlZGl0Lm91dFB0cigpLCBudWxs
cHRyLCAmbV9jdXJzb3JPZmZzZXQpOworCisgICAgaWYgKG1fcHJldmVudE5leHRDb21taXQpIHsK
KyAgICAgICAgaWYgKHN0cmxlbihuZXdQcmVlZGl0LmdldCgpKSA+IDApCisgICAgICAgICAgICBt
X3ByZXZlbnROZXh0Q29tbWl0ID0gZmFsc2U7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBtX3ByZWVkaXQgPSBTdHJpbmc6OmZyb21VVEY4KG5ld1ByZWVk
aXQuZ2V0KCkpOworICAgIG1fY3Vyc29yT2Zmc2V0ID0gc3RkOjptaW4oc3RkOjptYXgobV9jdXJz
b3JPZmZzZXQsIDApLCBzdGF0aWNfY2FzdDxpbnQ+KG1fcHJlZWRpdC5sZW5ndGgoKSkpOworCisg
ICAgbV9jb21wb3NpbmdUZXh0Q3VycmVudGx5ID0gIW1fcHJlZWRpdC5pc0VtcHR5KCk7CisgICAg
bV9wcmVlZGl0Q2hhbmdlZCA9IHRydWU7CisKKyAgICBpZiAoIW1fZmlsdGVyaW5nS2V5RXZlbnQp
CisgICAgICAgIHNlbmRDb21wb3NpdGlvbkFuZFByZWVkaXRXaXRoRmFrZUtleUV2ZW50cyhQcmVl
ZGl0KTsKK30KKwordm9pZCBJbnB1dE1ldGhvZEZpbHRlcjo6aGFuZGxlUHJlZWRpdEVuZCgpCit7
CisgICAgaWYgKG1fcHJldmVudE5leHRDb21taXQgfHwgIW1fZW5hYmxlZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9wcmVlZGl0ID0gU3RyaW5nKCk7CisgICAgbV9jdXJzb3JPZmZzZXQgPSAw
OworICAgIG1fcHJlZWRpdENoYW5nZWQgPSB0cnVlOworCisgICAgaWYgKCFtX2ZpbHRlcmluZ0tl
eUV2ZW50KQorICAgICAgICB1cGRhdGVQcmVlZGl0KCk7Cit9CisKKyNpZiBFTkFCTEUoQVBJX1RF
U1RTKQordm9pZCBJbnB1dE1ldGhvZEZpbHRlcjo6bG9nSGFuZGxlS2V5Ym9hcmRFdmVudEZvclRl
c3RpbmcoR2RrRXZlbnRLZXkqIGV2ZW50LCBjb25zdCBTdHJpbmcmIGV2ZW50U3RyaW5nLCBFdmVu
dEZha2VkRm9yQ29tcG9zaXRpb24gZmFrZWQpCit7CisgICAgY29uc3QgY2hhciogZXZlbnRUeXBl
ID0gZXZlbnQtPnR5cGUgPT0gR0RLX0tFWV9SRUxFQVNFID8gInJlbGVhc2UiIDogInByZXNzIjsK
KyAgICBjb25zdCBjaGFyKiBmYWtlZFN0cmluZyA9IGZha2VkID09IEV2ZW50RmFrZWQgPyAiIChm
YWtlZCkiIDogIiI7CisgICAgaWYgKCFldmVudFN0cmluZy5pc051bGwoKSkKKyAgICAgICAgbV9l
dmVudHMuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT0lcyBr
ZXljb2RlPSV4IHRleHQ9JyVzJyVzIiwgZXZlbnRUeXBlLCBldmVudC0+a2V5dmFsLCBldmVudFN0
cmluZy51dGY4KCkuZGF0YSgpLCBmYWtlZFN0cmluZykpOworICAgIGVsc2UKKyAgICAgICAgbV9l
dmVudHMuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT0lcyBr
ZXljb2RlPSV4JXMiLCBldmVudFR5cGUsIGV2ZW50LT5rZXl2YWwsIGZha2VkU3RyaW5nKSk7Cit9
CisKK3ZvaWQgSW5wdXRNZXRob2RGaWx0ZXI6OmxvZ0hhbmRsZUtleWJvYXJkRXZlbnRXaXRoQ29t
cG9zaXRpb25SZXN1bHRzRm9yVGVzdGluZyhHZGtFdmVudEtleSogZXZlbnQsIFJlc3VsdHNUb1Nl
bmQgcmVzdWx0c1RvU2VuZCwgRXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uIGZha2VkKQoreworICAg
IGNvbnN0IGNoYXIqIGV2ZW50VHlwZSA9IGV2ZW50LT50eXBlID09IEdES19LRVlfUkVMRUFTRSA/
ICJyZWxlYXNlIiA6ICJwcmVzcyI7CisgICAgY29uc3QgY2hhciogZmFrZWRTdHJpbmcgPSBmYWtl
ZCA9PSBFdmVudEZha2VkID8gIiAoZmFrZWQpIiA6ICIiOworICAgIG1fZXZlbnRzLmFwcGVuZChT
dHJpbmc6OmZvcm1hdCgic2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cyB0eXBlPSVz
IGtleWNvZGU9JXUlcyIsIGV2ZW50VHlwZSwgZXZlbnQtPmtleXZhbCwgZmFrZWRTdHJpbmcpKTsK
KworICAgIGlmIChyZXN1bHRzVG9TZW5kICYgQ29tcG9zaXRpb24gJiYgIW1fY29uZmlybWVkQ29t
cG9zaXRpb24uaXNOdWxsKCkpCisgICAgICAgIGxvZ0NvbmZpcm1Db21wb3NpdGlvbkZvclRlc3Rp
bmcoKTsKKyAgICBpZiAocmVzdWx0c1RvU2VuZCAmIFByZWVkaXQgJiYgIW1fcHJlZWRpdC5pc051
bGwoKSkKKyAgICAgICAgbG9nU2V0UHJlZWRpdEZvclRlc3RpbmcoKTsKK30KKwordm9pZCBJbnB1
dE1ldGhvZEZpbHRlcjo6bG9nQ29uZmlybUNvbXBvc2l0aW9uRm9yVGVzdGluZygpCit7CisgICAg
aWYgKG1fY29uZmlybWVkQ29tcG9zaXRpb24uaXNFbXB0eSgpKQorICAgICAgICBtX2V2ZW50cy5h
cHBlbmQoU3RyaW5nKCJjb25maXJtQ3VycmVudGNvbXBvc2l0aW9uIikpOworICAgIGVsc2UKKyAg
ICAgICAgbV9ldmVudHMuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCJjb25maXJtQ29tcG9zaXRpb24g
JyVzJyIsIG1fY29uZmlybWVkQ29tcG9zaXRpb24udXRmOCgpLmRhdGEoKSkpOworfQorCit2b2lk
IElucHV0TWV0aG9kRmlsdGVyOjpsb2dTZXRQcmVlZGl0Rm9yVGVzdGluZygpCit7CisgICAgbV9l
dmVudHMuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCJzZXRQcmVlZGl0IHRleHQ9JyVzJyBjdXJzb3JP
ZmZzZXQ9JWkiLCBtX3ByZWVkaXQudXRmOCgpLmRhdGEoKSwgbV9jdXJzb3JPZmZzZXQpKTsKK30K
KyNlbmRpZiAvLyBFTkFCTEUoQVBJX1RFU1RTKQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvSW5wdXRNZXRob2RGaWx0ZXIu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvSW5wdXRNZXRob2RGaWx0ZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2RlODNlCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9JbnB1dE1ldGhvZEZpbHRlci5oCkBAIC0w
LDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0IElnYWxpYSBTLkwu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpZm5kZWYgSW5wdXRNZXRob2RGaWx0ZXJfaAorI2RlZmluZSBJbnB1dE1ldGhvZEZpbHRlcl9o
CisKKyNpbmNsdWRlIDxXZWJDb3JlL0ludFBvaW50Lmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCit0eXBlZGVmIHN0cnVjdCBfR2RrRXZlbnRLZXkgR2RrRXZlbnRL
ZXk7Cit0eXBlZGVmIHN0cnVjdCBfR3RrSU1Db250ZXh0IEd0a0lNQ29udGV4dDsKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworY2xhc3MgSW50UmVjdDsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFdlYlBhZ2VQcm94eTsKKworY2xhc3MgSW5wdXRNZXRob2RGaWx0ZXIgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKElucHV0TWV0aG9kRmlsdGVyKTsKK3B1YmxpYzoKKyAgICBlbnVt
IEV2ZW50RmFrZWRGb3JDb21wb3NpdGlvbiB7CisgICAgICAgIEV2ZW50RmFrZWQsCisgICAgICAg
IEV2ZW50Tm90RmFrZWQKKyAgICB9OworCisgICAgSW5wdXRNZXRob2RGaWx0ZXIoKTsKKyAgICB+
SW5wdXRNZXRob2RGaWx0ZXIoKTsKKworICAgIEd0a0lNQ29udGV4dCogY29udGV4dCgpIGNvbnN0
IHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQorCisgICAgdm9pZCBzZXRQYWdlKFdlYlBhZ2VQ
cm94eSogcGFnZSkgeyBtX3BhZ2UgPSBwYWdlOyB9CisKKyAgICB2b2lkIHNldEVuYWJsZWQoYm9v
bCk7CisgICAgdm9pZCBzZXRDdXJzb3JSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKwor
ICAgIHZvaWQgZmlsdGVyS2V5RXZlbnQoR2RrRXZlbnRLZXkqKTsKKyAgICB2b2lkIG5vdGlmeUZv
Y3VzZWRJbigpOworICAgIHZvaWQgbm90aWZ5Rm9jdXNlZE91dCgpOworICAgIHZvaWQgbm90aWZ5
TW91c2VCdXR0b25QcmVzcygpOworCisjaWYgRU5BQkxFKEFQSV9URVNUUykKKyAgICB2b2lkIHNl
dFRlc3RpbmdNb2RlKGJvb2wgZW5hYmxlKSB7IG1fdGVzdGluZ01vZGUgPSBlbmFibGU7IH0KKyAg
ICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZXZlbnRzKCkgY29uc3QgeyByZXR1cm4gbV9ldmVudHM7
IH0KKyNlbmRpZgorCitwcml2YXRlOgorICAgIGVudW0gUmVzdWx0c1RvU2VuZCB7CisgICAgICAg
IFByZWVkaXQgPSAxIDw8IDEsCisgICAgICAgIENvbXBvc2l0aW9uID0gMSA8PCAyLAorICAgICAg
ICBQcmVlZGl0QW5kQ29tcG9zaXRpb24gPSBQcmVlZGl0IHwgQ29tcG9zaXRpb24KKyAgICB9Owor
CisgICAgc3RhdGljIHZvaWQgaGFuZGxlQ29tbWl0Q2FsbGJhY2soSW5wdXRNZXRob2RGaWx0ZXIq
LCBjb25zdCBjaGFyKiBjb21wb3NpdGlvblN0cmluZyk7CisgICAgc3RhdGljIHZvaWQgaGFuZGxl
UHJlZWRpdFN0YXJ0Q2FsbGJhY2soSW5wdXRNZXRob2RGaWx0ZXIqKTsKKyAgICBzdGF0aWMgdm9p
ZCBoYW5kbGVQcmVlZGl0Q2hhbmdlZENhbGxiYWNrKElucHV0TWV0aG9kRmlsdGVyKik7CisgICAg
c3RhdGljIHZvaWQgaGFuZGxlUHJlZWRpdEVuZENhbGxiYWNrKElucHV0TWV0aG9kRmlsdGVyKik7
CisKKyAgICB2b2lkIGhhbmRsZUNvbW1pdChjb25zdCBjaGFyKiBjb21wb3NpdGlvblN0cmluZyk7
CisgICAgdm9pZCBoYW5kbGVQcmVlZGl0Q2hhbmdlZCgpOworICAgIHZvaWQgaGFuZGxlUHJlZWRp
dFN0YXJ0KCk7CisgICAgdm9pZCBoYW5kbGVQcmVlZGl0RW5kKCk7CisKKyAgICB2b2lkIGhhbmRs
ZUtleWJvYXJkRXZlbnQoR2RrRXZlbnRLZXkqLCBjb25zdCBTdHJpbmcmIGV2ZW50U3RyaW5nID0g
U3RyaW5nKCksIEV2ZW50RmFrZWRGb3JDb21wb3NpdGlvbiA9IEV2ZW50Tm90RmFrZWQpOworICAg
IHZvaWQgaGFuZGxlS2V5Ym9hcmRFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMoR2RrRXZlbnRL
ZXkqLCBSZXN1bHRzVG9TZW5kID0gUHJlZWRpdEFuZENvbXBvc2l0aW9uLCBFdmVudEZha2VkRm9y
Q29tcG9zaXRpb24gPSBFdmVudE5vdEZha2VkKTsKKworICAgIHZvaWQgc2VuZENvbXBvc2l0aW9u
QW5kUHJlZWRpdFdpdGhGYWtlS2V5RXZlbnRzKFJlc3VsdHNUb1NlbmQpOworICAgIHZvaWQgY29u
ZmlybUNvbXBvc2l0aW9uKCk7CisgICAgdm9pZCB1cGRhdGVQcmVlZGl0KCk7CisgICAgdm9pZCBj
b25maXJtQ3VycmVudENvbXBvc2l0aW9uKCk7CisgICAgdm9pZCBjYW5jZWxDb250ZXh0Q29tcG9z
aXRpb24oKTsKKworI2lmIEVOQUJMRShBUElfVEVTVFMpCisgICAgdm9pZCBsb2dIYW5kbGVLZXli
b2FyZEV2ZW50Rm9yVGVzdGluZyhHZGtFdmVudEtleSosIGNvbnN0IFN0cmluZyYsIEV2ZW50RmFr
ZWRGb3JDb21wb3NpdGlvbik7CisgICAgdm9pZCBsb2dIYW5kbGVLZXlib2FyZEV2ZW50V2l0aENv
bXBvc2l0aW9uUmVzdWx0c0ZvclRlc3RpbmcoR2RrRXZlbnRLZXkqLCBSZXN1bHRzVG9TZW5kLCBF
dmVudEZha2VkRm9yQ29tcG9zaXRpb24pOworICAgIHZvaWQgbG9nQ29uZmlybUNvbXBvc2l0aW9u
Rm9yVGVzdGluZygpOworICAgIHZvaWQgbG9nU2V0UHJlZWRpdEZvclRlc3RpbmcoKTsKKyNlbmRp
ZgorCisgICAgR1JlZlB0cjxHdGtJTUNvbnRleHQ+IG1fY29udGV4dDsKKyAgICBXZWJQYWdlUHJv
eHkqIG1fcGFnZTsKKyAgICB1bnNpZ25lZCBtX2VuYWJsZWQgOiAxOworICAgIHVuc2lnbmVkIG1f
Y29tcG9zaW5nVGV4dEN1cnJlbnRseSA6IDE7CisgICAgdW5zaWduZWQgbV9maWx0ZXJpbmdLZXlF
dmVudCA6IDE7CisgICAgdW5zaWduZWQgbV9wcmVlZGl0Q2hhbmdlZCA6IDE7CisgICAgdW5zaWdu
ZWQgbV9wcmV2ZW50TmV4dENvbW1pdCA6IDE7CisgICAgdW5zaWduZWQgbV9qdXN0U2VudEZha2VL
ZXlVcCA6IDE7CisgICAgaW50IG1fY3Vyc29yT2Zmc2V0OworICAgIHVuc2lnbmVkIG1fbGFzdEZp
bHRlcmVkS2V5UHJlc3NDb2RlV2l0aE5vUmVzdWx0czsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBt
X2xhc3RDYXJlTG9jYXRpb247CisgICAgU3RyaW5nIG1fY29uZmlybWVkQ29tcG9zaXRpb247Cisg
ICAgU3RyaW5nIG1fcHJlZWRpdDsKKworI2lmIEVOQUJMRShBUElfVEVTVFMpCisgICAgYm9vbCBt
X3Rlc3RpbmdNb2RlOworICAgIFZlY3RvcjxTdHJpbmc+IG1fZXZlbnRzOworI2VuZGlmCit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIElucHV0TWV0aG9kRmlsdGVyX2gK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAyYmE3
NzZmLi44NWM4MDA2IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTQtMTAtMjAgIENhcmxvcyBHYXJjaWEgQ2FtcG9z
ICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIE1vdmUgR3RrSW5wdXRNZXRo
b2RGaWx0ZXIgZnJvbSBQbGF0Zm9ybSB0byBXZWJLaXQyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzc4ODQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIElucHV0TWV0aG9kRmlsdGVyIHRlc3QgZnJv
bSBXZWJDb3JlIHRlc3RzIHRvIFdlYktpdDIgdGVzdHMKKyAgICAgICAgYW5kIGFkYXB0IGl0IHRv
IHVzZSB0aGUgbmV3IElucHV0TWV0aG9kRmlsdGVyIFdlYktpdCBjbGFzcy4gSW5zdGVhZAorICAg
ICAgICBvZiBoYXZpbmcgdmlydHVhbCBtZXRob2RzIGp1c3QgZm9yIHRlc3RpbmcsIGl0IGhhcyBh
IHRlc3RpbmcgbW9kZQorICAgICAgICB0aGF0IGxvZ3MgdGhlIGV2ZW50cy4KKworICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQyL2d0ay9JbnB1dE1ldGhvZEZpbHRlci5jcHA6IFJlbmFtZWQgZnJvbSBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvZ3RrL0lucHV0TWV0aG9kRmlsdGVyLmNw
cC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRlc3RJbnB1dE1ldGhvZEZpbHRlcjo6VGVzdElu
cHV0TWV0aG9kRmlsdGVyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRlc3RJbnB1dE1ldGhv
ZEZpbHRlcjo6flRlc3RJbnB1dE1ldGhvZEZpbHRlcik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpUZXN0SW5wdXRNZXRob2RGaWx0ZXI6OnNlbmRLZXlFdmVudFRvRmlsdGVyKToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OlRlc3RJbnB1dE1ldGhvZEZpbHRlcjo6c2VuZFByZXNzQW5kUmVsZWFz
ZUtleUV2ZW50UGFpclRvRmlsdGVyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6dGVtcG9yYXJ5R2V0UHJlZWRpdFN0cmluZ092ZXJyaWRl
KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnRlbXBvcmFyeVJlc2V0T3ZlcnJpZGUpOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6dmVyaWZ5Q2FuY2VsZWRDb21wb3NpdGlvbik6CisKIDIwMTQt
MTAtMjAgIFRhbmF5IEMgIDx0YW5heS5jQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtHVEtdW01p
bmlicm93c2VyXSBFc2NhcGUga2V5IGRvZXMgbm90IGhpZGUgdGhlIHNlYXJjaCBib3gKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1HVEsuY21ha2UgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IGJhZTg0ZDMuLmFhOTcwN2EgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtOTgsNiArOTgsNyBAQCBhZGRfZXhl
Y3V0YWJsZShUZXN0V2ViS2l0MgogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYktp
dDIvV0tTdHJpbmcuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViS2l0Mi9X
S1N0cmluZ0pTU3RyaW5nLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYktp
dDIvV0tVUkwuY3BwCisgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViS2l0Mi9ndGsv
SW5wdXRNZXRob2RGaWx0ZXIuY3BwCiApCiAKIHRhcmdldF9saW5rX2xpYnJhcmllcyhUZXN0V2Vi
S2l0MiAke3Rlc3Rfd2Via2l0Ml9hcGlfTElCUkFSSUVTfSkKQEAgLTEwNiwxMiArMTA3LDYgQEAg
c2V0X3Rlc3RzX3Byb3BlcnRpZXMoVGVzdFdlYktpdDIgUFJPUEVSVElFUyBUSU1FT1VUIDYwKQog
c2V0X3RhcmdldF9wcm9wZXJ0aWVzKFRlc3RXZWJLaXQyIFBST1BFUlRJRVMgUlVOVElNRV9PVVRQ
VVRfRElSRUNUT1JZICR7VEVTVFdFQktJVEFQSV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUll9L1dl
YktpdDIpCiAKIHNldChUZXN0V2ViQ29yZUd0a19TT1VSQ0VTCi0gICAgJHtXRUJDT1JFX0RJUn0v
cGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuY3BwCi0gICAgJHtXRUJDT1JFX0RJUn0vcGxhdGZv
cm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAKLSAgICAke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFw
aGljcy9JbnRTaXplLmNwcAotICAgICR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ludFJlY3RDYWlyby5jcHAKLSAgICAke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ndGsvR3Rr
SW5wdXRNZXRob2RGaWx0ZXIuY3BwCi0gICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV2Vi
Q29yZS9ndGsvSW5wdXRNZXRob2RGaWx0ZXIuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0v
VGVzdHMvV2ViQ29yZS9ndGsvVXNlckFnZW50UXVpcmtzLmNwcAogKQogCmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvZ3RrL0lucHV0TWV0aG9kRmlsdGVyLmNw
cCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9ndGsvSW5wdXRNZXRob2RGaWx0
ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2YzYzkyLi4wMDAwMDAwCi0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9ndGsvSW5wdXRNZXRob2RGaWx0
ZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzEwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0j
aW5jbHVkZSAiV1RGU3RyaW5nVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9HdGtJbnB1
dE1ldGhvZEZpbHRlci5oPgotI2luY2x1ZGUgPGdkay9nZGtrZXlzeW1zLmg+Ci0jaW5jbHVkZSA8
Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dVbmlxdWVQdHIuaD4KLSNpbmNsdWRl
IDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgot
Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewot
Ci1jbGFzcyBUZXN0SW5wdXRNZXRob2RGaWx0ZXIgOiBwdWJsaWMgR3RrSW5wdXRNZXRob2RGaWx0
ZXIgewotcHVibGljOgotICAgIFRlc3RJbnB1dE1ldGhvZEZpbHRlcigpCi0gICAgICAgIDogbV90
ZXN0V2luZG93KGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfUE9QVVApKQotICAgIHsKLSAgICAg
ICAgZ3RrX3dpZGdldF9zaG93KG1fdGVzdFdpbmRvdy5nZXQoKSk7Ci0gICAgICAgIHNldFdpZGdl
dChtX3Rlc3RXaW5kb3cuZ2V0KCkpOwotCi0gICAgICAgIC8vIEZvY3VzIGluIGlzIG5lY2Vzc2Fy
eSB0byBhY3RpdmF0ZSB0aGUgZGVmYXVsdCBpbnB1dCBtZXRob2QgaW4gdGhlIG11bHRpY29udGV4
dC4KLSAgICAgICAgbm90aWZ5Rm9jdXNlZEluKCk7Ci0gICAgfQotCi0gICAgVmVjdG9yPFN0cmlu
Zz4mIGV2ZW50cygpIHsgcmV0dXJuIG1fZXZlbnRzOyB9Ci0KLSAgICB2b2lkIHNlbmRLZXlFdmVu
dFRvRmlsdGVyKHVuc2lnbmVkIGdka0tleVZhbHVlLCBHZGtFdmVudFR5cGUgdHlwZSwgdW5zaWdu
ZWQgbW9kaWZpZXJzID0gMCkKLSAgICB7Ci0gICAgICAgIEdka0V2ZW50KiBldmVudCA9IGdka19l
dmVudF9uZXcodHlwZSk7Ci0gICAgICAgIGV2ZW50LT5rZXkua2V5dmFsID0gZ2RrS2V5VmFsdWU7
Ci0gICAgICAgIGV2ZW50LT5rZXkuc3RhdGUgPSBtb2RpZmllcnM7Ci0gICAgICAgIGV2ZW50LT5r
ZXkud2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KG1fdGVzdFdpbmRvdy5nZXQoKSk7Ci0g
ICAgICAgIGV2ZW50LT5rZXkudGltZSA9IEdES19DVVJSRU5UX1RJTUU7Ci0gICAgICAgIGdfb2Jq
ZWN0X3JlZihldmVudC0+a2V5LndpbmRvdyk7Ci0KLSNpZm5kZWYgR1RLX0FQSV9WRVJTSU9OXzIK
LSAgICAgICAgZ2RrX2V2ZW50X3NldF9kZXZpY2UoZXZlbnQsIGdka19kZXZpY2VfbWFuYWdlcl9n
ZXRfY2xpZW50X3BvaW50ZXIoZ2RrX2Rpc3BsYXlfZ2V0X2RldmljZV9tYW5hZ2VyKGdka19kaXNw
bGF5X2dldF9kZWZhdWx0KCkpKSk7Ci0jZW5kaWYKLQotICAgICAgICBHVW5pcXVlT3V0UHRyPEdk
a0tleW1hcEtleT4ga2V5czsKLSAgICAgICAgZ2ludCBuS2V5czsKLSAgICAgICAgaWYgKGdka19r
ZXltYXBfZ2V0X2VudHJpZXNfZm9yX2tleXZhbChnZGtfa2V5bWFwX2dldF9kZWZhdWx0KCksIGdk
a0tleVZhbHVlLCAma2V5cy5vdXRQdHIoKSwgJm5LZXlzKSkKLSAgICAgICAgICAgIGV2ZW50LT5r
ZXkuaGFyZHdhcmVfa2V5Y29kZSA9IGtleXMuZ2V0KClbMF0ua2V5Y29kZTsKLQotICAgICAgICBm
aWx0ZXJLZXlFdmVudCgmZXZlbnQtPmtleSk7Ci0gICAgICAgIGdka19ldmVudF9mcmVlKGV2ZW50
KTsKLSAgICB9Ci0KLSAgICB2b2lkIHNlbmRQcmVzc0FuZFJlbGVhc2VLZXlFdmVudFBhaXJUb0Zp
bHRlcih1bnNpZ25lZCBnZGtLZXlWYWx1ZSwgdW5zaWduZWQgbW9kaWZpZXJzID0gMCkKLSAgICB7
Ci0gICAgICAgIHNlbmRLZXlFdmVudFRvRmlsdGVyKGdka0tleVZhbHVlLCBHREtfS0VZX1BSRVNT
LCBtb2RpZmllcnMpOwotICAgICAgICBzZW5kS2V5RXZlbnRUb0ZpbHRlcihnZGtLZXlWYWx1ZSwg
R0RLX0tFWV9SRUxFQVNFLCBtb2RpZmllcnMpOwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIHZp
cnR1YWwgYm9vbCBzZW5kU2ltcGxlS2V5RXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50LCBXVEY6OlN0
cmluZyBldmVudFN0cmluZywgRXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uIGZha2VkKQotICAgIHsK
LSAgICAgICAgY29uc3QgY2hhciogZXZlbnRUeXBlID0gZXZlbnQtPnR5cGUgPT0gR0RLX0tFWV9S
RUxFQVNFID8gInJlbGVhc2UiIDogInByZXNzIjsKLSAgICAgICAgY29uc3QgY2hhciogZmFrZWRT
dHJpbmcgPSBmYWtlZCA9PSBFdmVudEZha2VkID8gIiAoZmFrZWQpIiA6ICIiOwotICAgICAgICBp
ZiAoIWV2ZW50U3RyaW5nLmlzTnVsbCgpKQotICAgICAgICAgICAgbV9ldmVudHMuYXBwZW5kKFN0
cmluZzo6Zm9ybWF0KCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT0lcyBrZXljb2RlPSV4IHRleHQ9
JyVzJyVzIiwgZXZlbnRUeXBlLCBldmVudC0+a2V5dmFsLCBldmVudFN0cmluZy51dGY4KCkuZGF0
YSgpLCBmYWtlZFN0cmluZykpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2V2ZW50cy5h
cHBlbmQoU3RyaW5nOjpmb3JtYXQoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPSVzIGtleWNvZGU9
JXglcyIsIGV2ZW50VHlwZSwgZXZlbnQtPmtleXZhbCwgZmFrZWRTdHJpbmcpKTsKLQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc2VuZEtleUV2ZW50V2l0
aENvbXBvc2l0aW9uUmVzdWx0cyhHZGtFdmVudEtleSogZXZlbnQsIFJlc3VsdHNUb1NlbmQgcmVz
dWx0c1RvU2VuZCwgRXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uIGZha2VkKQotICAgIHsKLSAgICAg
ICAgY29uc3QgY2hhciogZXZlbnRUeXBlID0gZXZlbnQtPnR5cGUgPT0gR0RLX0tFWV9SRUxFQVNF
ID8gInJlbGVhc2UiIDogInByZXNzIjsKLSAgICAgICAgY29uc3QgY2hhciogZmFrZWRTdHJpbmcg
PSBmYWtlZCA9PSBFdmVudEZha2VkID8gIiAoZmFrZWQpIiA6ICIiOwotICAgICAgICBtX2V2ZW50
cy5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoInNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3Vs
dHMgdHlwZT0lcyBrZXljb2RlPSV1JXMiLCBldmVudFR5cGUsIGV2ZW50LT5rZXl2YWwsIGZha2Vk
U3RyaW5nKSk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdHNUb1NlbmQgJiBDb21wb3NpdGlvbiAmJiAh
bV9jb25maXJtZWRDb21wb3NpdGlvbi5pc051bGwoKSkKLSAgICAgICAgICAgIGNvbmZpcm1Db21w
b3NpdGlvblRleHQobV9jb25maXJtZWRDb21wb3NpdGlvbik7Ci0gICAgICAgIGlmIChyZXN1bHRz
VG9TZW5kICYgUHJlZWRpdCAmJiAhbV9wcmVlZGl0LmlzTnVsbCgpKQotICAgICAgICAgICAgc2V0
UHJlZWRpdChtX3ByZWVkaXQsIG1fY3Vyc29yT2Zmc2V0KTsKLQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgY2FuRWRpdCgpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY29uZmlybUNvbXBvc2l0aW9u
VGV4dChTdHJpbmcgdGV4dCkKLSAgICB7Ci0gICAgICAgIG1fZXZlbnRzLmFwcGVuZChTdHJpbmc6
OmZvcm1hdCgiY29uZmlybUNvbXBvc2l0aW9uICclcyciLCB0ZXh0LnV0ZjgoKS5kYXRhKCkpKTsK
LSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY29uZmlybUN1cnJlbnRDb21wb3NpdGlvbigpCi0g
ICAgewotICAgICAgICBtX2V2ZW50cy5hcHBlbmQoU3RyaW5nKCJjb25maXJtQ3VycmVudGNvbXBv
c2l0aW9uIikpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxDdXJyZW50Q29tcG9z
aXRpb24oKQotICAgIHsKLSAgICAgICAgbV9ldmVudHMuYXBwZW5kKFN0cmluZygiY2FuY2VsQ3Vy
cmVudENvbXBvc2l0aW9uIikpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVlZGl0
KFN0cmluZyBwcmVlZGl0LCBpbnQgY3Vyc29yT2Zmc2V0KQotICAgIHsKLSAgICAgICAgbV9ldmVu
dHMuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCJzZXRQcmVlZGl0IHRleHQ9JyVzJyBjdXJzb3JPZmZz
ZXQ9JWkiLCBwcmVlZGl0LnV0ZjgoKS5kYXRhKCksIGN1cnNvck9mZnNldCkpOwotICAgIH0KLQot
cHJpdmF0ZToKLSAgICBHUmVmUHRyPEd0a1dpZGdldD4gbV90ZXN0V2luZG93OwotICAgIFZlY3Rv
cjxTdHJpbmc+IG1fZXZlbnRzOwotfTsKLQotVEVTVChHVEssIEd0a0lucHV0TWV0aG9kRmlsdGVy
U2ltcGxlKQotewotICAgIFRlc3RJbnB1dE1ldGhvZEZpbHRlciBpbnB1dE1ldGhvZEZpbHRlcjsK
LSAgICBpbnB1dE1ldGhvZEZpbHRlci5zZW5kUHJlc3NBbmRSZWxlYXNlS2V5RXZlbnRQYWlyVG9G
aWx0ZXIoR0RLX0tFWV9nKTsKLSAgICBpbnB1dE1ldGhvZEZpbHRlci5zZW5kUHJlc3NBbmRSZWxl
YXNlS2V5RXZlbnRQYWlyVG9GaWx0ZXIoR0RLX0tFWV90KTsKLSAgICBpbnB1dE1ldGhvZEZpbHRl
ci5zZW5kUHJlc3NBbmRSZWxlYXNlS2V5RXZlbnRQYWlyVG9GaWx0ZXIoR0RLX0tFWV9rKTsKLQot
ICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBldmVudHMgPSBpbnB1dE1ldGhvZEZpbHRlci5ldmVu
dHMoKTsKLQotICAgIEFTU0VSVF9FUSg2LCBldmVudHMuc2l6ZSgpKTsKLSAgICBBU1NFUlRfRVEo
U3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT1wcmVzcyBrZXljb2RlPTY3IHRleHQ9J2cn
IiksIGV2ZW50c1swXSk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygic2VuZFNpbXBsZUtleUV2ZW50
IHR5cGU9cmVsZWFzZSBrZXljb2RlPTY3IiksIGV2ZW50c1sxXSk7Ci0gICAgQVNTRVJUX0VRKFN0
cmluZygic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9cHJlc3Mga2V5Y29kZT03NCB0ZXh0PSd0JyIp
LCBldmVudHNbMl0pOwotICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0
eXBlPXJlbGVhc2Uga2V5Y29kZT03NCIpLCBldmVudHNbM10pOwotICAgIEFTU0VSVF9FUShTdHJp
bmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXByZXNzIGtleWNvZGU9NmIgdGV4dD0nayciKSwg
ZXZlbnRzWzRdKTsKLSAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlw
ZT1yZWxlYXNlIGtleWNvZGU9NmIiKSwgZXZlbnRzWzVdKTsKLX0KLQotVEVTVChHVEssIEd0a0lu
cHV0TWV0aG9kRmlsdGVyVW5pY29kZVNlcXVlbmNlKQotewotICAgIFRlc3RJbnB1dE1ldGhvZEZp
bHRlciBpbnB1dE1ldGhvZEZpbHRlcjsKLQotICAgIC8vIFRoaXMgaXMgc2ltcGxlIHVuaWNvZGUg
aGV4IGVudHJ5IG9mIHRoZSBjaGFyYWN0ZXJzLCB1LCAwLCAwLCBmLCA0IHByZXNzZWQgd2l0aAot
ICAgIC8vIHRoZSBzaGlmdCBhbmQgY29udHJvbHMga2V5cyBoZWxkIGRvd24uIEluIHJlYWxpdHks
IHRoZXNlIHZhbHVlcyBhcmUgbm90IHR5cGljYWwKLSAgICAvLyBvZiBhbiBhY3R1YWwgaGV4IGVu
dHJ5LCBiZWNhdXNlIHRoZXknZCBiZSB0cmFuc2Zvcm1lZCBieSB0aGUgc2hpZnQgbW9kaWZpZXIg
YWNjb3JkaW5nCi0gICAgLy8gdG8gdGhlIGtleWJvYXJkIGxheW91dC4gRm9yIGluc3RhbmNlLCBv
biBhIFVTIGtleWJvYXJkIGEgMCB3aXRoIHRoZSBzaGlmdCBrZXkgcHJlc3NlZAotICAgIC8vIGlz
IGEgcmlnaHQgcGFyZW50aGVzaXMuIFVzaW5nIHRoZXNlIHZhbHVlcyBwcmV2ZW50cyBoYXZpbmcg
dG8gd29yayBvdXQgd2hhdCB0aGUKLSAgICAvLyB0cmFuc2Zvcm1lZCBjaGFyYWN0ZXJzIGFyZSBi
YXNlZCBvbiB0aGUgY3VycmVudCBrZXlib2FyZCBsYXlvdXQuCi0gICAgaW5wdXRNZXRob2RGaWx0
ZXIuc2VuZEtleUV2ZW50VG9GaWx0ZXIoR0RLX0tFWV9Db250cm9sX0wsIEdES19LRVlfUFJFU1Mp
OwotICAgIGlucHV0TWV0aG9kRmlsdGVyLnNlbmRLZXlFdmVudFRvRmlsdGVyKEdES19LRVlfU2hp
ZnRfTCwgR0RLX0tFWV9QUkVTUywgR0RLX0NPTlRST0xfTUFTSyk7Ci0KLSAgICBpbnB1dE1ldGhv
ZEZpbHRlci5zZW5kUHJlc3NBbmRSZWxlYXNlS2V5RXZlbnRQYWlyVG9GaWx0ZXIoR0RLX0tFWV9V
LCBHREtfU0hJRlRfTUFTSyB8IEdES19DT05UUk9MX01BU0spOwotICAgIGlucHV0TWV0aG9kRmls
dGVyLnNlbmRQcmVzc0FuZFJlbGVhc2VLZXlFdmVudFBhaXJUb0ZpbHRlcihHREtfS0VZXzAsIEdE
S19TSElGVF9NQVNLIHwgR0RLX0NPTlRST0xfTUFTSyk7Ci0gICAgaW5wdXRNZXRob2RGaWx0ZXIu
c2VuZFByZXNzQW5kUmVsZWFzZUtleUV2ZW50UGFpclRvRmlsdGVyKEdES19LRVlfMCwgR0RLX1NI
SUZUX01BU0sgfCBHREtfQ09OVFJPTF9NQVNLKTsKLSAgICBpbnB1dE1ldGhvZEZpbHRlci5zZW5k
UHJlc3NBbmRSZWxlYXNlS2V5RXZlbnRQYWlyVG9GaWx0ZXIoR0RLX0tFWV9GLCBHREtfU0hJRlRf
TUFTSyB8IEdES19DT05UUk9MX01BU0spOwotICAgIGlucHV0TWV0aG9kRmlsdGVyLnNlbmRQcmVz
c0FuZFJlbGVhc2VLZXlFdmVudFBhaXJUb0ZpbHRlcihHREtfS0VZXzQsIEdES19TSElGVF9NQVNL
IHwgR0RLX0NPTlRST0xfTUFTSyk7Ci0KLSAgICBpbnB1dE1ldGhvZEZpbHRlci5zZW5kS2V5RXZl
bnRUb0ZpbHRlcihHREtfS0VZX1NoaWZ0X0wsIEdES19LRVlfUkVMRUFTRSwgR0RLX0NPTlRST0xf
TUFTSyB8IEdES19TSElGVF9NQVNLKTsKLSAgICBpbnB1dE1ldGhvZEZpbHRlci5zZW5kS2V5RXZl
bnRUb0ZpbHRlcihHREtfS0VZX0NvbnRyb2xfTCwgR0RLX0tFWV9SRUxFQVNFLCBHREtfQ09OVFJP
TF9NQVNLKTsKLQotICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBldmVudHMgPSBpbnB1dE1ldGhv
ZEZpbHRlci5ldmVudHMoKTsKLSAgICBBU1NFUlRfRVEoMjEsIGV2ZW50cy5zaXplKCkpOwotICAg
IEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXByZXNzIGtleWNvZGU9
ZmZlMyIpLCBldmVudHNbMF0pOwotICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlF
dmVudCB0eXBlPXByZXNzIGtleWNvZGU9ZmZlMSIpLCBldmVudHNbMV0pOwotICAgIEFTU0VSVF9F
UShTdHJpbmcoInNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMgdHlwZT1wcmVzcyBr
ZXljb2RlPTg1IiksIGV2ZW50c1syXSk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygic2V0UHJlZWRp
dCB0ZXh0PSd1JyBjdXJzb3JPZmZzZXQ9MSIpLCBldmVudHNbM10pOwotICAgIEFTU0VSVF9FUShT
dHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXJlbGVhc2Uga2V5Y29kZT01NSIpLCBldmVu
dHNbNF0pOwotICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlv
blJlc3VsdHMgdHlwZT1wcmVzcyBrZXljb2RlPTQ4IiksIGV2ZW50c1s1XSk7Ci0gICAgQVNTRVJU
X0VRKFN0cmluZygic2V0UHJlZWRpdCB0ZXh0PSd1MCcgY3Vyc29yT2Zmc2V0PTIiKSwgZXZlbnRz
WzZdKTsKLSAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT1yZWxl
YXNlIGtleWNvZGU9MzAiKSwgZXZlbnRzWzddKTsKLSAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5k
S2V5RXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzIHR5cGU9cHJlc3Mga2V5Y29kZT00OCIpLCBl
dmVudHNbOF0pOwotICAgIEFTU0VSVF9FUShTdHJpbmcoInNldFByZWVkaXQgdGV4dD0ndTAwJyBj
dXJzb3JPZmZzZXQ9MyIpLCBldmVudHNbOV0pOwotICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRT
aW1wbGVLZXlFdmVudCB0eXBlPXJlbGVhc2Uga2V5Y29kZT0zMCIpLCBldmVudHNbMTBdKTsKLSAg
ICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzIHR5
cGU9cHJlc3Mga2V5Y29kZT03MCIpLCBldmVudHNbMTFdKTsKLSAgICBBU1NFUlRfRVEoU3RyaW5n
KCJzZXRQcmVlZGl0IHRleHQ9J3UwMEYnIGN1cnNvck9mZnNldD00IiksIGV2ZW50c1sxMl0pOwot
ICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXJlbGVhc2Uga2V5
Y29kZT00NiIpLCBldmVudHNbMTNdKTsKLSAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kS2V5RXZl
bnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzIHR5cGU9cHJlc3Mga2V5Y29kZT01MiIpLCBldmVudHNb
MTRdKTsKLSAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZXRQcmVlZGl0IHRleHQ9J3UwMEY0JyBjdXJz
b3JPZmZzZXQ9NSIpLCBldmVudHNbMTVdKTsKLSAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kU2lt
cGxlS2V5RXZlbnQgdHlwZT1yZWxlYXNlIGtleWNvZGU9MzQiKSwgZXZlbnRzWzE2XSk7Ci0gICAg
QVNTRVJUX0VRKFN0cmluZygiY29uZmlybUNvbXBvc2l0aW9uICfDtCciKSwgZXZlbnRzWzE3XSk7
Ci0gICAgQVNTRVJUX0VRKFN0cmluZygic2V0UHJlZWRpdCB0ZXh0PScnIGN1cnNvck9mZnNldD0w
IiksIGV2ZW50c1sxOF0pOwotICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVu
dCB0eXBlPXJlbGVhc2Uga2V5Y29kZT1mZmUxIiksIGV2ZW50c1sxOV0pOwotICAgIEFTU0VSVF9F
UShTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXJlbGVhc2Uga2V5Y29kZT1mZmUzIiks
IGV2ZW50c1syMF0pOwotfQotCi1URVNUKEdUSywgR3RrSW5wdXRNZXRob2RGaWx0ZXJDb21wb3Nl
S2V5KQotewotICAgIFRlc3RJbnB1dE1ldGhvZEZpbHRlciBpbnB1dE1ldGhvZEZpbHRlcjsKLQot
ICAgIGlucHV0TWV0aG9kRmlsdGVyLnNlbmRQcmVzc0FuZFJlbGVhc2VLZXlFdmVudFBhaXJUb0Zp
bHRlcihHREtfS0VZX011bHRpX2tleSk7Ci0gICAgaW5wdXRNZXRob2RGaWx0ZXIuc2VuZFByZXNz
QW5kUmVsZWFzZUtleUV2ZW50UGFpclRvRmlsdGVyKEdES19LRVlfYXBvc3Ryb3BoZSk7Ci0gICAg
aW5wdXRNZXRob2RGaWx0ZXIuc2VuZFByZXNzQW5kUmVsZWFzZUtleUV2ZW50UGFpclRvRmlsdGVy
KEdES19LRVlfbyk7Ci0KLSAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZXZlbnRzID0gaW5wdXRN
ZXRob2RGaWx0ZXIuZXZlbnRzKCk7Ci0gICAgQVNTRVJUX0VRKDUsIGV2ZW50cy5zaXplKCkpOwot
ICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMg
dHlwZT1wcmVzcyBrZXljb2RlPTM5IiksIGV2ZW50c1swXSk7Ci0gICAgQVNTRVJUX0VRKFN0cmlu
Zygic2V0UHJlZWRpdCB0ZXh0PScnIGN1cnNvck9mZnNldD0wIiksIGV2ZW50c1sxXSk7Ci0gICAg
QVNTRVJUX0VRKFN0cmluZygic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9cmVsZWFzZSBrZXljb2Rl
PTI3IiksIGV2ZW50c1syXSk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygic2VuZFNpbXBsZUtleUV2
ZW50IHR5cGU9cHJlc3Mga2V5Y29kZT02ZiB0ZXh0PSfDsyciKSwgZXZlbnRzWzNdKTsKLSAgICBB
U1NFUlRfRVEoU3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT1yZWxlYXNlIGtleWNvZGU9
NmYiKSwgZXZlbnRzWzRdKTsKLX0KLQotdHlwZWRlZiB2b2lkICgqR2V0UHJlZWRpdFN0cmluZ0Nh
bGxiYWNrKSAoR3RrSU1Db250ZXh0KiwgZ2NoYXIqKiwgUGFuZ29BdHRyTGlzdCoqLCBpbnQqKTsK
LXN0YXRpYyB2b2lkIHRlbXBvcmFyeUdldFByZWVkaXRTdHJpbmdPdmVycmlkZShHdGtJTUNvbnRl
eHQqLCBjaGFyKiogc3RyaW5nLCBQYW5nb0F0dHJMaXN0KiogYXR0cnMsIGludCogY3Vyc29yUG9z
aXRpb24pCi17Ci0gICAgKnN0cmluZyA9IGdfc3RyZHVwKCJwcmVlZGl0IG9mIGRvb20sIGJyaW5n
ZXIgb2YgY2hlZXNlIik7Ci0gICAgKmN1cnNvclBvc2l0aW9uID0gMzsKLX0KLQotVEVTVChHVEss
IEd0a0lucHV0TWV0aG9kRmlsdGVyQ29udGV4dEV2ZW50c1dpdGhvdXRLZXlFdmVudHMpCi17Ci0g
ICAgVGVzdElucHV0TWV0aG9kRmlsdGVyIGlucHV0TWV0aG9kRmlsdGVyOwotCi0gICAgLy8gVGhp
cyBpcyBhIGJpdCBvZiBhIGhhY2sgdG8gYXZvaWQgbW9ja2luZyBvdXQgdGhlIGVudGlyZSBJbnB1
dE1ldGhvZENvbnRleHQsIGJ5Ci0gICAgLy8gc2ltcGx5IHJlcGxhY2luZyB0aGUgZ2V0X3ByZWVk
aXRfc3RyaW5nIHZpcnR1YWwgbWV0aG9kIGZvciB0aGUgbGVuZ3RoIG9mIHRoaXMgdGVzdC4KLSAg
ICBHdGtJTUNvbnRleHQqIGNvbnRleHQgPSBpbnB1dE1ldGhvZEZpbHRlci5jb250ZXh0KCk7Ci0g
ICAgR3RrSU1Db250ZXh0Q2xhc3MqIGNvbnRleHRDbGFzcyA9IEdUS19JTV9DT05URVhUX0dFVF9D
TEFTUyhjb250ZXh0KTsKLSAgICBHZXRQcmVlZGl0U3RyaW5nQ2FsbGJhY2sgcHJldmlvdXNDYWxs
YmFjayA9IGNvbnRleHRDbGFzcy0+Z2V0X3ByZWVkaXRfc3RyaW5nOwotICAgIGNvbnRleHRDbGFz
cy0+Z2V0X3ByZWVkaXRfc3RyaW5nID0gdGVtcG9yYXJ5R2V0UHJlZWRpdFN0cmluZ092ZXJyaWRl
OwotCi0gICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGNvbnRleHQsICJwcmVlZGl0LWNoYW5nZWQi
KTsKLSAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoY29udGV4dCwgImNvbW1pdCIsICJjb21taXQg
dGV4dCIpOwotCi0gICAgY29udGV4dENsYXNzLT5nZXRfcHJlZWRpdF9zdHJpbmcgPSBwcmV2aW91
c0NhbGxiYWNrOwotCi0gICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGV2ZW50cyA9IGlucHV0TWV0
aG9kRmlsdGVyLmV2ZW50cygpOwotICAgIEFTU0VSVF9FUSg2LCBldmVudHMuc2l6ZSgpKTsKLSAg
ICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzIHR5
cGU9cHJlc3Mga2V5Y29kZT0xNjc3NzIxNSAoZmFrZWQpIiksIGV2ZW50c1swXSk7Ci0gICAgQVNT
RVJUX0VRKFN0cmluZygic2V0UHJlZWRpdCB0ZXh0PSdwcmVlZGl0IG9mIGRvb20sIGJyaW5nZXIg
b2YgY2hlZXNlJyBjdXJzb3JPZmZzZXQ9MyIpLCBldmVudHNbMV0pOwotICAgIEFTU0VSVF9FUShT
dHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXJlbGVhc2Uga2V5Y29kZT1mZmZmZmYgKGZh
a2VkKSIpLCBldmVudHNbMl0pOwotICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRLZXlFdmVudFdp
dGhDb21wb3NpdGlvblJlc3VsdHMgdHlwZT1wcmVzcyBrZXljb2RlPTE2Nzc3MjE1IChmYWtlZCki
KSwgZXZlbnRzWzNdKTsKLSAgICBBU1NFUlRfRVEoU3RyaW5nKCJjb25maXJtQ29tcG9zaXRpb24g
J2NvbW1pdCB0ZXh0JyIpLCBldmVudHNbNF0pOwotICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRT
aW1wbGVLZXlFdmVudCB0eXBlPXJlbGVhc2Uga2V5Y29kZT1mZmZmZmYgKGZha2VkKSIpLCBldmVu
dHNbNV0pOwotfQotCi1zdGF0aWMgYm9vbCBnU2F3Q29udGV4dFJlc2V0ID0gZmFsc2U7Ci10eXBl
ZGVmIHZvaWQgKCpSZXNldENhbGxiYWNrKSAoR3RrSU1Db250ZXh0Kik7Ci1zdGF0aWMgdm9pZCB0
ZW1wb3JhcnlSZXNldE92ZXJyaWRlKEd0a0lNQ29udGV4dCopCi17Ci0gICAgZ1Nhd0NvbnRleHRS
ZXNldCA9IHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIHZlcmlmeUNhbmNlbGVkQ29tcG9zaXRpb24o
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGV2ZW50cykKLXsKLSAgICBBU1NFUlRfRVEoMywgZXZlbnRz
LnNpemUoKSk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygic2VuZEtleUV2ZW50V2l0aENvbXBvc2l0
aW9uUmVzdWx0cyB0eXBlPXByZXNzIGtleWNvZGU9MzkiKSwgZXZlbnRzWzBdKTsKLSAgICBBU1NF
UlRfRVEoU3RyaW5nKCJzZXRQcmVlZGl0IHRleHQ9JycgY3Vyc29yT2Zmc2V0PTAiKSwgZXZlbnRz
WzFdKTsKLSAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT1yZWxl
YXNlIGtleWNvZGU9MjciKSwgZXZlbnRzWzJdKTsKLSAgICBBU1NFUlQoZ1Nhd0NvbnRleHRSZXNl
dCk7Ci19Ci0KLVRFU1QoR1RLLCBHdGtJbnB1dE1ldGhvZEZpbHRlckNvbnRleHRGb2N1c091dER1
cmluZ09uZ29pbmdDb21wb3NpdGlvbikKLXsKLSAgICBUZXN0SW5wdXRNZXRob2RGaWx0ZXIgaW5w
dXRNZXRob2RGaWx0ZXI7Ci0KLSAgICAvLyBTZWUgY29tbWVudCBhYm92ZSBhYm91dCB0aGlzIHRl
Y2huaXF1ZS4KLSAgICBHdGtJTUNvbnRleHQqIGNvbnRleHQgPSBpbnB1dE1ldGhvZEZpbHRlci5j
b250ZXh0KCk7Ci0gICAgR3RrSU1Db250ZXh0Q2xhc3MqIGNvbnRleHRDbGFzcyA9IEdUS19JTV9D
T05URVhUX0dFVF9DTEFTUyhjb250ZXh0KTsKLSAgICBSZXNldENhbGxiYWNrIHByZXZpb3VzQ2Fs
bGJhY2sgPSBjb250ZXh0Q2xhc3MtPnJlc2V0OwotICAgIGNvbnRleHRDbGFzcy0+cmVzZXQgPSB0
ZW1wb3JhcnlSZXNldE92ZXJyaWRlOwotCi0gICAgZ1Nhd0NvbnRleHRSZXNldCA9IGZhbHNlOwot
ICAgIGlucHV0TWV0aG9kRmlsdGVyLnNlbmRQcmVzc0FuZFJlbGVhc2VLZXlFdmVudFBhaXJUb0Zp
bHRlcihHREtfS0VZX011bHRpX2tleSk7Ci0gICAgaW5wdXRNZXRob2RGaWx0ZXIuc2VuZFByZXNz
QW5kUmVsZWFzZUtleUV2ZW50UGFpclRvRmlsdGVyKEdES19LRVlfYXBvc3Ryb3BoZSk7Ci0gICAg
aW5wdXRNZXRob2RGaWx0ZXIubm90aWZ5Rm9jdXNlZE91dCgpOwotCi0gICAgdmVyaWZ5Q2FuY2Vs
ZWRDb21wb3NpdGlvbihpbnB1dE1ldGhvZEZpbHRlci5ldmVudHMoKSk7Ci0KLSAgICBjb250ZXh0
Q2xhc3MtPnJlc2V0ID0gcHJldmlvdXNDYWxsYmFjazsKLX0KLQotVEVTVChHVEssIEd0a0lucHV0
TWV0aG9kRmlsdGVyQ29udGV4dE1vdXNlQ2xpY2tEdXJpbmdPbmdvaW5nQ29tcG9zaXRpb24pCi17
Ci0gICAgVGVzdElucHV0TWV0aG9kRmlsdGVyIGlucHV0TWV0aG9kRmlsdGVyOwotCi0gICAgLy8g
U2VlIGNvbW1lbnQgYWJvdmUgYWJvdXQgdGhpcyB0ZWNobmlxdWUuCi0gICAgR3RrSU1Db250ZXh0
KiBjb250ZXh0ID0gaW5wdXRNZXRob2RGaWx0ZXIuY29udGV4dCgpOwotICAgIEd0a0lNQ29udGV4
dENsYXNzKiBjb250ZXh0Q2xhc3MgPSBHVEtfSU1fQ09OVEVYVF9HRVRfQ0xBU1MoY29udGV4dCk7
Ci0gICAgUmVzZXRDYWxsYmFjayBwcmV2aW91c0NhbGxiYWNrID0gY29udGV4dENsYXNzLT5yZXNl
dDsKLSAgICBjb250ZXh0Q2xhc3MtPnJlc2V0ID0gdGVtcG9yYXJ5UmVzZXRPdmVycmlkZTsKLQot
ICAgIGdTYXdDb250ZXh0UmVzZXQgPSBmYWxzZTsKLSAgICBpbnB1dE1ldGhvZEZpbHRlci5zZW5k
UHJlc3NBbmRSZWxlYXNlS2V5RXZlbnRQYWlyVG9GaWx0ZXIoR0RLX0tFWV9NdWx0aV9rZXkpOwot
ICAgIGlucHV0TWV0aG9kRmlsdGVyLnNlbmRQcmVzc0FuZFJlbGVhc2VLZXlFdmVudFBhaXJUb0Zp
bHRlcihHREtfS0VZX2Fwb3N0cm9waGUpOwotICAgIGlucHV0TWV0aG9kRmlsdGVyLm5vdGlmeU1v
dXNlQnV0dG9uUHJlc3MoKTsKLQotICAgIHZlcmlmeUNhbmNlbGVkQ29tcG9zaXRpb24oaW5wdXRN
ZXRob2RGaWx0ZXIuZXZlbnRzKCkpOwotCi0gICAgY29udGV4dENsYXNzLT5yZXNldCA9IHByZXZp
b3VzQ2FsbGJhY2s7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9ndGsvSW5wdXRNZXRob2RGaWx0
ZXIuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL2d0ay9JbnB1dE1ldGhv
ZEZpbHRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg4MWE0NAot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9ndGsv
SW5wdXRNZXRob2RGaWx0ZXIuY3BwCkBAIC0wLDAgKzEsMjU5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2luY2x1ZGUgIldURlN0cmluZ1V0aWxpdGllcy5oIgorI2luY2x1ZGUgPFdlYktpdC9JbnB1dE1l
dGhvZEZpbHRlci5oPgorI2luY2x1ZGUgPGdkay9nZGtrZXlzeW1zLmg+CisjaW5jbHVkZSA8Z3Rr
L2d0ay5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dVbmlxdWVQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1
c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK2Ns
YXNzIFRlc3RJbnB1dE1ldGhvZEZpbHRlciA6IHB1YmxpYyBJbnB1dE1ldGhvZEZpbHRlciB7Citw
dWJsaWM6CisgICAgVGVzdElucHV0TWV0aG9kRmlsdGVyKCkKKyAgICAgICAgOiBtX3Rlc3RXaW5k
b3coZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19QT1BVUCkpCisgICAgeworICAgICAgICBzZXRU
ZXN0aW5nTW9kZSh0cnVlKTsKKworICAgICAgICBndGtfd2lkZ2V0X3Nob3cobV90ZXN0V2luZG93
KTsKKyAgICAgICAgZ3RrX2ltX2NvbnRleHRfc2V0X2NsaWVudF93aW5kb3coY29udGV4dCgpLCBn
dGtfd2lkZ2V0X2dldF93aW5kb3cobV90ZXN0V2luZG93KSk7CisKKyAgICAgICAgLy8gRm9jdXMg
aW4gaXMgbmVjZXNzYXJ5IHRvIGFjdGl2YXRlIHRoZSBkZWZhdWx0IGlucHV0IG1ldGhvZCBpbiB0
aGUgbXVsdGljb250ZXh0LgorICAgICAgICBub3RpZnlGb2N1c2VkSW4oKTsKKyAgICB9CisKKyAg
ICB+VGVzdElucHV0TWV0aG9kRmlsdGVyKCkKKyAgICB7CisgICAgICAgIGd0a193aWRnZXRfZGVz
dHJveShtX3Rlc3RXaW5kb3cpOworICAgIH0KKworICAgIHZvaWQgc2VuZEtleUV2ZW50VG9GaWx0
ZXIodW5zaWduZWQgZ2RrS2V5VmFsdWUsIEdka0V2ZW50VHlwZSB0eXBlLCB1bnNpZ25lZCBtb2Rp
ZmllcnMgPSAwKQorICAgIHsKKyAgICAgICAgR2RrRXZlbnQqIGV2ZW50ID0gZ2RrX2V2ZW50X25l
dyh0eXBlKTsKKyAgICAgICAgZXZlbnQtPmtleS5rZXl2YWwgPSBnZGtLZXlWYWx1ZTsKKyAgICAg
ICAgZXZlbnQtPmtleS5zdGF0ZSA9IG1vZGlmaWVyczsKKyAgICAgICAgZXZlbnQtPmtleS53aW5k
b3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3cobV90ZXN0V2luZG93KTsKKyAgICAgICAgZXZlbnQt
PmtleS50aW1lID0gR0RLX0NVUlJFTlRfVElNRTsKKyAgICAgICAgZ19vYmplY3RfcmVmKGV2ZW50
LT5rZXkud2luZG93KTsKKyAgICAgICAgZ2RrX2V2ZW50X3NldF9kZXZpY2UoZXZlbnQsIGdka19k
ZXZpY2VfbWFuYWdlcl9nZXRfY2xpZW50X3BvaW50ZXIoZ2RrX2Rpc3BsYXlfZ2V0X2RldmljZV9t
YW5hZ2VyKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkpKSk7CisKKyAgICAgICAgR1VuaXF1ZU91
dFB0cjxHZGtLZXltYXBLZXk+IGtleXM7CisgICAgICAgIGdpbnQgbktleXM7CisgICAgICAgIGlm
IChnZGtfa2V5bWFwX2dldF9lbnRyaWVzX2Zvcl9rZXl2YWwoZ2RrX2tleW1hcF9nZXRfZGVmYXVs
dCgpLCBnZGtLZXlWYWx1ZSwgJmtleXMub3V0UHRyKCksICZuS2V5cykpCisgICAgICAgICAgICBl
dmVudC0+a2V5LmhhcmR3YXJlX2tleWNvZGUgPSBrZXlzLmdldCgpWzBdLmtleWNvZGU7CisKKyAg
ICAgICAgZmlsdGVyS2V5RXZlbnQoJmV2ZW50LT5rZXkpOworICAgICAgICBnZGtfZXZlbnRfZnJl
ZShldmVudCk7CisgICAgfQorCisgICAgdm9pZCBzZW5kUHJlc3NBbmRSZWxlYXNlS2V5RXZlbnRQ
YWlyVG9GaWx0ZXIodW5zaWduZWQgZ2RrS2V5VmFsdWUsIHVuc2lnbmVkIG1vZGlmaWVycyA9IDAp
CisgICAgeworICAgICAgICBzZW5kS2V5RXZlbnRUb0ZpbHRlcihnZGtLZXlWYWx1ZSwgR0RLX0tF
WV9QUkVTUywgbW9kaWZpZXJzKTsKKyAgICAgICAgc2VuZEtleUV2ZW50VG9GaWx0ZXIoZ2RrS2V5
VmFsdWUsIEdES19LRVlfUkVMRUFTRSwgbW9kaWZpZXJzKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgR3RrV2lkZ2V0KiBtX3Rlc3RXaW5kb3c7Cit9OworCitURVNUKFdlYktpdDIsIElucHV0TWV0
aG9kRmlsdGVyU2ltcGxlKQoreworICAgIFRlc3RJbnB1dE1ldGhvZEZpbHRlciBpbnB1dE1ldGhv
ZEZpbHRlcjsKKyAgICBpbnB1dE1ldGhvZEZpbHRlci5zZW5kUHJlc3NBbmRSZWxlYXNlS2V5RXZl
bnRQYWlyVG9GaWx0ZXIoR0RLX0tFWV9nKTsKKyAgICBpbnB1dE1ldGhvZEZpbHRlci5zZW5kUHJl
c3NBbmRSZWxlYXNlS2V5RXZlbnRQYWlyVG9GaWx0ZXIoR0RLX0tFWV90KTsKKyAgICBpbnB1dE1l
dGhvZEZpbHRlci5zZW5kUHJlc3NBbmRSZWxlYXNlS2V5RXZlbnRQYWlyVG9GaWx0ZXIoR0RLX0tF
WV9rKTsKKworICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBldmVudHMgPSBpbnB1dE1ldGhvZEZp
bHRlci5ldmVudHMoKTsKKworICAgIEFTU0VSVF9FUSg2LCBldmVudHMuc2l6ZSgpKTsKKyAgICBB
U1NFUlRfRVEoU3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT1wcmVzcyBrZXljb2RlPTY3
IHRleHQ9J2cnIiksIGV2ZW50c1swXSk7CisgICAgQVNTRVJUX0VRKFN0cmluZygic2VuZFNpbXBs
ZUtleUV2ZW50IHR5cGU9cmVsZWFzZSBrZXljb2RlPTY3IiksIGV2ZW50c1sxXSk7CisgICAgQVNT
RVJUX0VRKFN0cmluZygic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9cHJlc3Mga2V5Y29kZT03NCB0
ZXh0PSd0JyIpLCBldmVudHNbMl0pOworICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVL
ZXlFdmVudCB0eXBlPXJlbGVhc2Uga2V5Y29kZT03NCIpLCBldmVudHNbM10pOworICAgIEFTU0VS
VF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXByZXNzIGtleWNvZGU9NmIgdGV4
dD0nayciKSwgZXZlbnRzWzRdKTsKKyAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kU2ltcGxlS2V5
RXZlbnQgdHlwZT1yZWxlYXNlIGtleWNvZGU9NmIiKSwgZXZlbnRzWzVdKTsKK30KKworVEVTVChX
ZWJLaXQyLCBJbnB1dE1ldGhvZEZpbHRlclVuaWNvZGVTZXF1ZW5jZSkKK3sKKyAgICBUZXN0SW5w
dXRNZXRob2RGaWx0ZXIgaW5wdXRNZXRob2RGaWx0ZXI7CisKKyAgICAvLyBUaGlzIGlzIHNpbXBs
ZSB1bmljb2RlIGhleCBlbnRyeSBvZiB0aGUgY2hhcmFjdGVycywgdSwgMCwgMCwgZiwgNCBwcmVz
c2VkIHdpdGgKKyAgICAvLyB0aGUgc2hpZnQgYW5kIGNvbnRyb2xzIGtleXMgaGVsZCBkb3duLiBJ
biByZWFsaXR5LCB0aGVzZSB2YWx1ZXMgYXJlIG5vdCB0eXBpY2FsCisgICAgLy8gb2YgYW4gYWN0
dWFsIGhleCBlbnRyeSwgYmVjYXVzZSB0aGV5J2QgYmUgdHJhbnNmb3JtZWQgYnkgdGhlIHNoaWZ0
IG1vZGlmaWVyIGFjY29yZGluZworICAgIC8vIHRvIHRoZSBrZXlib2FyZCBsYXlvdXQuIEZvciBp
bnN0YW5jZSwgb24gYSBVUyBrZXlib2FyZCBhIDAgd2l0aCB0aGUgc2hpZnQga2V5IHByZXNzZWQK
KyAgICAvLyBpcyBhIHJpZ2h0IHBhcmVudGhlc2lzLiBVc2luZyB0aGVzZSB2YWx1ZXMgcHJldmVu
dHMgaGF2aW5nIHRvIHdvcmsgb3V0IHdoYXQgdGhlCisgICAgLy8gdHJhbnNmb3JtZWQgY2hhcmFj
dGVycyBhcmUgYmFzZWQgb24gdGhlIGN1cnJlbnQga2V5Ym9hcmQgbGF5b3V0LgorICAgIGlucHV0
TWV0aG9kRmlsdGVyLnNlbmRLZXlFdmVudFRvRmlsdGVyKEdES19LRVlfQ29udHJvbF9MLCBHREtf
S0VZX1BSRVNTKTsKKyAgICBpbnB1dE1ldGhvZEZpbHRlci5zZW5kS2V5RXZlbnRUb0ZpbHRlcihH
REtfS0VZX1NoaWZ0X0wsIEdES19LRVlfUFJFU1MsIEdES19DT05UUk9MX01BU0spOworCisgICAg
aW5wdXRNZXRob2RGaWx0ZXIuc2VuZFByZXNzQW5kUmVsZWFzZUtleUV2ZW50UGFpclRvRmlsdGVy
KEdES19LRVlfVSwgR0RLX1NISUZUX01BU0sgfCBHREtfQ09OVFJPTF9NQVNLKTsKKyAgICBpbnB1
dE1ldGhvZEZpbHRlci5zZW5kUHJlc3NBbmRSZWxlYXNlS2V5RXZlbnRQYWlyVG9GaWx0ZXIoR0RL
X0tFWV8wLCBHREtfU0hJRlRfTUFTSyB8IEdES19DT05UUk9MX01BU0spOworICAgIGlucHV0TWV0
aG9kRmlsdGVyLnNlbmRQcmVzc0FuZFJlbGVhc2VLZXlFdmVudFBhaXJUb0ZpbHRlcihHREtfS0VZ
XzAsIEdES19TSElGVF9NQVNLIHwgR0RLX0NPTlRST0xfTUFTSyk7CisgICAgaW5wdXRNZXRob2RG
aWx0ZXIuc2VuZFByZXNzQW5kUmVsZWFzZUtleUV2ZW50UGFpclRvRmlsdGVyKEdES19LRVlfRiwg
R0RLX1NISUZUX01BU0sgfCBHREtfQ09OVFJPTF9NQVNLKTsKKyAgICBpbnB1dE1ldGhvZEZpbHRl
ci5zZW5kUHJlc3NBbmRSZWxlYXNlS2V5RXZlbnRQYWlyVG9GaWx0ZXIoR0RLX0tFWV80LCBHREtf
U0hJRlRfTUFTSyB8IEdES19DT05UUk9MX01BU0spOworCisgICAgaW5wdXRNZXRob2RGaWx0ZXIu
c2VuZEtleUV2ZW50VG9GaWx0ZXIoR0RLX0tFWV9TaGlmdF9MLCBHREtfS0VZX1JFTEVBU0UsIEdE
S19DT05UUk9MX01BU0sgfCBHREtfU0hJRlRfTUFTSyk7CisgICAgaW5wdXRNZXRob2RGaWx0ZXIu
c2VuZEtleUV2ZW50VG9GaWx0ZXIoR0RLX0tFWV9Db250cm9sX0wsIEdES19LRVlfUkVMRUFTRSwg
R0RLX0NPTlRST0xfTUFTSyk7CisKKyAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZXZlbnRzID0g
aW5wdXRNZXRob2RGaWx0ZXIuZXZlbnRzKCk7CisgICAgQVNTRVJUX0VRKDIxLCBldmVudHMuc2l6
ZSgpKTsKKyAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT1wcmVz
cyBrZXljb2RlPWZmZTMiKSwgZXZlbnRzWzBdKTsKKyAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5k
U2ltcGxlS2V5RXZlbnQgdHlwZT1wcmVzcyBrZXljb2RlPWZmZTEiKSwgZXZlbnRzWzFdKTsKKyAg
ICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzIHR5
cGU9cHJlc3Mga2V5Y29kZT04NSIpLCBldmVudHNbMl0pOworICAgIEFTU0VSVF9FUShTdHJpbmco
InNldFByZWVkaXQgdGV4dD0ndScgY3Vyc29yT2Zmc2V0PTEiKSwgZXZlbnRzWzNdKTsKKyAgICBB
U1NFUlRfRVEoU3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT1yZWxlYXNlIGtleWNvZGU9
NTUiKSwgZXZlbnRzWzRdKTsKKyAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kS2V5RXZlbnRXaXRo
Q29tcG9zaXRpb25SZXN1bHRzIHR5cGU9cHJlc3Mga2V5Y29kZT00OCIpLCBldmVudHNbNV0pOwor
ICAgIEFTU0VSVF9FUShTdHJpbmcoInNldFByZWVkaXQgdGV4dD0ndTAnIGN1cnNvck9mZnNldD0y
IiksIGV2ZW50c1s2XSk7CisgICAgQVNTRVJUX0VRKFN0cmluZygic2VuZFNpbXBsZUtleUV2ZW50
IHR5cGU9cmVsZWFzZSBrZXljb2RlPTMwIiksIGV2ZW50c1s3XSk7CisgICAgQVNTRVJUX0VRKFN0
cmluZygic2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cyB0eXBlPXByZXNzIGtleWNv
ZGU9NDgiKSwgZXZlbnRzWzhdKTsKKyAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZXRQcmVlZGl0IHRl
eHQ9J3UwMCcgY3Vyc29yT2Zmc2V0PTMiKSwgZXZlbnRzWzldKTsKKyAgICBBU1NFUlRfRVEoU3Ry
aW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT1yZWxlYXNlIGtleWNvZGU9MzAiKSwgZXZlbnRz
WzEwXSk7CisgICAgQVNTRVJUX0VRKFN0cmluZygic2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9u
UmVzdWx0cyB0eXBlPXByZXNzIGtleWNvZGU9NzAiKSwgZXZlbnRzWzExXSk7CisgICAgQVNTRVJU
X0VRKFN0cmluZygic2V0UHJlZWRpdCB0ZXh0PSd1MDBGJyBjdXJzb3JPZmZzZXQ9NCIpLCBldmVu
dHNbMTJdKTsKKyAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT1y
ZWxlYXNlIGtleWNvZGU9NDYiKSwgZXZlbnRzWzEzXSk7CisgICAgQVNTRVJUX0VRKFN0cmluZygi
c2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cyB0eXBlPXByZXNzIGtleWNvZGU9NTIi
KSwgZXZlbnRzWzE0XSk7CisgICAgQVNTRVJUX0VRKFN0cmluZygic2V0UHJlZWRpdCB0ZXh0PSd1
MDBGNCcgY3Vyc29yT2Zmc2V0PTUiKSwgZXZlbnRzWzE1XSk7CisgICAgQVNTRVJUX0VRKFN0cmlu
Zygic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9cmVsZWFzZSBrZXljb2RlPTM0IiksIGV2ZW50c1sx
Nl0pOworICAgIEFTU0VSVF9FUShTdHJpbmcoImNvbmZpcm1Db21wb3NpdGlvbiAnw7QnIiksIGV2
ZW50c1sxN10pOworICAgIEFTU0VSVF9FUShTdHJpbmcoInNldFByZWVkaXQgdGV4dD0nJyBjdXJz
b3JPZmZzZXQ9MCIpLCBldmVudHNbMThdKTsKKyAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kU2lt
cGxlS2V5RXZlbnQgdHlwZT1yZWxlYXNlIGtleWNvZGU9ZmZlMSIpLCBldmVudHNbMTldKTsKKyAg
ICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT1yZWxlYXNlIGtleWNv
ZGU9ZmZlMyIpLCBldmVudHNbMjBdKTsKK30KKworVEVTVChXZWJLaXQyLCBJbnB1dE1ldGhvZEZp
bHRlckNvbXBvc2VLZXkpCit7CisgICAgVGVzdElucHV0TWV0aG9kRmlsdGVyIGlucHV0TWV0aG9k
RmlsdGVyOworCisgICAgaW5wdXRNZXRob2RGaWx0ZXIuc2VuZFByZXNzQW5kUmVsZWFzZUtleUV2
ZW50UGFpclRvRmlsdGVyKEdES19LRVlfTXVsdGlfa2V5KTsKKyAgICBpbnB1dE1ldGhvZEZpbHRl
ci5zZW5kUHJlc3NBbmRSZWxlYXNlS2V5RXZlbnRQYWlyVG9GaWx0ZXIoR0RLX0tFWV9hcG9zdHJv
cGhlKTsKKyAgICBpbnB1dE1ldGhvZEZpbHRlci5zZW5kUHJlc3NBbmRSZWxlYXNlS2V5RXZlbnRQ
YWlyVG9GaWx0ZXIoR0RLX0tFWV9vKTsKKworICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBldmVu
dHMgPSBpbnB1dE1ldGhvZEZpbHRlci5ldmVudHMoKTsKKyAgICBBU1NFUlRfRVEoNSwgZXZlbnRz
LnNpemUoKSk7CisgICAgQVNTRVJUX0VRKFN0cmluZygic2VuZEtleUV2ZW50V2l0aENvbXBvc2l0
aW9uUmVzdWx0cyB0eXBlPXByZXNzIGtleWNvZGU9MzkiKSwgZXZlbnRzWzBdKTsKKyAgICBBU1NF
UlRfRVEoU3RyaW5nKCJzZXRQcmVlZGl0IHRleHQ9JycgY3Vyc29yT2Zmc2V0PTAiKSwgZXZlbnRz
WzFdKTsKKyAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT1yZWxl
YXNlIGtleWNvZGU9MjciKSwgZXZlbnRzWzJdKTsKKyAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5k
U2ltcGxlS2V5RXZlbnQgdHlwZT1wcmVzcyBrZXljb2RlPTZmIHRleHQ9J8OzJyIpLCBldmVudHNb
M10pOworICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXJlbGVh
c2Uga2V5Y29kZT02ZiIpLCBldmVudHNbNF0pOworfQorCit0eXBlZGVmIHZvaWQgKCpHZXRQcmVl
ZGl0U3RyaW5nQ2FsbGJhY2spIChHdGtJTUNvbnRleHQqLCBnY2hhcioqLCBQYW5nb0F0dHJMaXN0
KiosIGludCopOworc3RhdGljIHZvaWQgdGVtcG9yYXJ5R2V0UHJlZWRpdFN0cmluZ092ZXJyaWRl
KEd0a0lNQ29udGV4dCosIGNoYXIqKiBzdHJpbmcsIFBhbmdvQXR0ckxpc3QqKiBhdHRycywgaW50
KiBjdXJzb3JQb3NpdGlvbikKK3sKKyAgICAqc3RyaW5nID0gZ19zdHJkdXAoInByZWVkaXQgb2Yg
ZG9vbSwgYnJpbmdlciBvZiBjaGVlc2UiKTsKKyAgICAqY3Vyc29yUG9zaXRpb24gPSAzOworfQor
CitURVNUKFdlYktpdDIsIElucHV0TWV0aG9kRmlsdGVyQ29udGV4dEV2ZW50c1dpdGhvdXRLZXlF
dmVudHMpCit7CisgICAgVGVzdElucHV0TWV0aG9kRmlsdGVyIGlucHV0TWV0aG9kRmlsdGVyOwor
CisgICAgLy8gVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2sgdG8gYXZvaWQgbW9ja2luZyBvdXQgdGhl
IGVudGlyZSBJbnB1dE1ldGhvZENvbnRleHQsIGJ5CisgICAgLy8gc2ltcGx5IHJlcGxhY2luZyB0
aGUgZ2V0X3ByZWVkaXRfc3RyaW5nIHZpcnR1YWwgbWV0aG9kIGZvciB0aGUgbGVuZ3RoIG9mIHRo
aXMgdGVzdC4KKyAgICBHdGtJTUNvbnRleHQqIGNvbnRleHQgPSBpbnB1dE1ldGhvZEZpbHRlci5j
b250ZXh0KCk7CisgICAgR3RrSU1Db250ZXh0Q2xhc3MqIGNvbnRleHRDbGFzcyA9IEdUS19JTV9D
T05URVhUX0dFVF9DTEFTUyhjb250ZXh0KTsKKyAgICBHZXRQcmVlZGl0U3RyaW5nQ2FsbGJhY2sg
cHJldmlvdXNDYWxsYmFjayA9IGNvbnRleHRDbGFzcy0+Z2V0X3ByZWVkaXRfc3RyaW5nOworICAg
IGNvbnRleHRDbGFzcy0+Z2V0X3ByZWVkaXRfc3RyaW5nID0gdGVtcG9yYXJ5R2V0UHJlZWRpdFN0
cmluZ092ZXJyaWRlOworCisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGNvbnRleHQsICJwcmVl
ZGl0LWNoYW5nZWQiKTsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoY29udGV4dCwgImNvbW1p
dCIsICJjb21taXQgdGV4dCIpOworCisgICAgY29udGV4dENsYXNzLT5nZXRfcHJlZWRpdF9zdHJp
bmcgPSBwcmV2aW91c0NhbGxiYWNrOworCisgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGV2ZW50
cyA9IGlucHV0TWV0aG9kRmlsdGVyLmV2ZW50cygpOworICAgIEFTU0VSVF9FUSg2LCBldmVudHMu
c2l6ZSgpKTsKKyAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRp
b25SZXN1bHRzIHR5cGU9cHJlc3Mga2V5Y29kZT0xNjc3NzIxNSAoZmFrZWQpIiksIGV2ZW50c1sw
XSk7CisgICAgQVNTRVJUX0VRKFN0cmluZygic2V0UHJlZWRpdCB0ZXh0PSdwcmVlZGl0IG9mIGRv
b20sIGJyaW5nZXIgb2YgY2hlZXNlJyBjdXJzb3JPZmZzZXQ9MyIpLCBldmVudHNbMV0pOworICAg
IEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXJlbGVhc2Uga2V5Y29k
ZT1mZmZmZmYgKGZha2VkKSIpLCBldmVudHNbMl0pOworICAgIEFTU0VSVF9FUShTdHJpbmcoInNl
bmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMgdHlwZT1wcmVzcyBrZXljb2RlPTE2Nzc3
MjE1IChmYWtlZCkiKSwgZXZlbnRzWzNdKTsKKyAgICBBU1NFUlRfRVEoU3RyaW5nKCJjb25maXJt
Q29tcG9zaXRpb24gJ2NvbW1pdCB0ZXh0JyIpLCBldmVudHNbNF0pOworICAgIEFTU0VSVF9FUShT
dHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXJlbGVhc2Uga2V5Y29kZT1mZmZmZmYgKGZh
a2VkKSIpLCBldmVudHNbNV0pOworfQorCitzdGF0aWMgYm9vbCBnU2F3Q29udGV4dFJlc2V0ID0g
ZmFsc2U7Cit0eXBlZGVmIHZvaWQgKCpSZXNldENhbGxiYWNrKSAoR3RrSU1Db250ZXh0Kik7Citz
dGF0aWMgdm9pZCB0ZW1wb3JhcnlSZXNldE92ZXJyaWRlKEd0a0lNQ29udGV4dCopCit7CisgICAg
Z1Nhd0NvbnRleHRSZXNldCA9IHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIHZlcmlmeUNhbmNlbGVk
Q29tcG9zaXRpb24oY29uc3QgVmVjdG9yPFN0cmluZz4mIGV2ZW50cykKK3sKKyAgICBBU1NFUlRf
RVEoMywgZXZlbnRzLnNpemUoKSk7CisgICAgQVNTRVJUX0VRKFN0cmluZygic2VuZEtleUV2ZW50
V2l0aENvbXBvc2l0aW9uUmVzdWx0cyB0eXBlPXByZXNzIGtleWNvZGU9MzkiKSwgZXZlbnRzWzBd
KTsKKyAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZXRQcmVlZGl0IHRleHQ9JycgY3Vyc29yT2Zmc2V0
PTAiKSwgZXZlbnRzWzFdKTsKKyAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZl
bnQgdHlwZT1yZWxlYXNlIGtleWNvZGU9MjciKSwgZXZlbnRzWzJdKTsKKyAgICBBU1NFUlQoZ1Nh
d0NvbnRleHRSZXNldCk7Cit9CisKK1RFU1QoV2ViS2l0MiwgSW5wdXRNZXRob2RGaWx0ZXJDb250
ZXh0Rm9jdXNPdXREdXJpbmdPbmdvaW5nQ29tcG9zaXRpb24pCit7CisgICAgVGVzdElucHV0TWV0
aG9kRmlsdGVyIGlucHV0TWV0aG9kRmlsdGVyOworCisgICAgLy8gU2VlIGNvbW1lbnQgYWJvdmUg
YWJvdXQgdGhpcyB0ZWNobmlxdWUuCisgICAgR3RrSU1Db250ZXh0KiBjb250ZXh0ID0gaW5wdXRN
ZXRob2RGaWx0ZXIuY29udGV4dCgpOworICAgIEd0a0lNQ29udGV4dENsYXNzKiBjb250ZXh0Q2xh
c3MgPSBHVEtfSU1fQ09OVEVYVF9HRVRfQ0xBU1MoY29udGV4dCk7CisgICAgUmVzZXRDYWxsYmFj
ayBwcmV2aW91c0NhbGxiYWNrID0gY29udGV4dENsYXNzLT5yZXNldDsKKyAgICBjb250ZXh0Q2xh
c3MtPnJlc2V0ID0gdGVtcG9yYXJ5UmVzZXRPdmVycmlkZTsKKworICAgIGdTYXdDb250ZXh0UmVz
ZXQgPSBmYWxzZTsKKyAgICBpbnB1dE1ldGhvZEZpbHRlci5zZW5kUHJlc3NBbmRSZWxlYXNlS2V5
RXZlbnRQYWlyVG9GaWx0ZXIoR0RLX0tFWV9NdWx0aV9rZXkpOworICAgIGlucHV0TWV0aG9kRmls
dGVyLnNlbmRQcmVzc0FuZFJlbGVhc2VLZXlFdmVudFBhaXJUb0ZpbHRlcihHREtfS0VZX2Fwb3N0
cm9waGUpOworICAgIGlucHV0TWV0aG9kRmlsdGVyLm5vdGlmeUZvY3VzZWRPdXQoKTsKKworICAg
IHZlcmlmeUNhbmNlbGVkQ29tcG9zaXRpb24oaW5wdXRNZXRob2RGaWx0ZXIuZXZlbnRzKCkpOwor
CisgICAgY29udGV4dENsYXNzLT5yZXNldCA9IHByZXZpb3VzQ2FsbGJhY2s7Cit9CisKK1RFU1Qo
V2ViS2l0MiwgSW5wdXRNZXRob2RGaWx0ZXJDb250ZXh0TW91c2VDbGlja0R1cmluZ09uZ29pbmdD
b21wb3NpdGlvbikKK3sKKyAgICBUZXN0SW5wdXRNZXRob2RGaWx0ZXIgaW5wdXRNZXRob2RGaWx0
ZXI7CisKKyAgICAvLyBTZWUgY29tbWVudCBhYm92ZSBhYm91dCB0aGlzIHRlY2huaXF1ZS4KKyAg
ICBHdGtJTUNvbnRleHQqIGNvbnRleHQgPSBpbnB1dE1ldGhvZEZpbHRlci5jb250ZXh0KCk7Cisg
ICAgR3RrSU1Db250ZXh0Q2xhc3MqIGNvbnRleHRDbGFzcyA9IEdUS19JTV9DT05URVhUX0dFVF9D
TEFTUyhjb250ZXh0KTsKKyAgICBSZXNldENhbGxiYWNrIHByZXZpb3VzQ2FsbGJhY2sgPSBjb250
ZXh0Q2xhc3MtPnJlc2V0OworICAgIGNvbnRleHRDbGFzcy0+cmVzZXQgPSB0ZW1wb3JhcnlSZXNl
dE92ZXJyaWRlOworCisgICAgZ1Nhd0NvbnRleHRSZXNldCA9IGZhbHNlOworICAgIGlucHV0TWV0
aG9kRmlsdGVyLnNlbmRQcmVzc0FuZFJlbGVhc2VLZXlFdmVudFBhaXJUb0ZpbHRlcihHREtfS0VZ
X011bHRpX2tleSk7CisgICAgaW5wdXRNZXRob2RGaWx0ZXIuc2VuZFByZXNzQW5kUmVsZWFzZUtl
eUV2ZW50UGFpclRvRmlsdGVyKEdES19LRVlfYXBvc3Ryb3BoZSk7CisgICAgaW5wdXRNZXRob2RG
aWx0ZXIubm90aWZ5TW91c2VCdXR0b25QcmVzcygpOworCisgICAgdmVyaWZ5Q2FuY2VsZWRDb21w
b3NpdGlvbihpbnB1dE1ldGhvZEZpbHRlci5ldmVudHMoKSk7CisKKyAgICBjb250ZXh0Q2xhc3Mt
PnJlc2V0ID0gcHJldmlvdXNDYWxsYmFjazsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktp
dEFQSQo=
</data>
<flag name="review"
          id="264895"
          type_id="1"
          status="+"
          setter="gustavo"
    />
          </attachment>
      

    </bug>

</bugzilla>