<?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>217614</bug_id>
          
          <creation_ts>2020-10-12 10:15:30 -0700</creation_ts>
          <short_desc>Share TestFeatures and TestCommand infrastructure between DumpRenderTree and WebKitTestRunner</short_desc>
          <delta_ts>2020-10-12 14:55:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>andersca</cc>
    
    <cc>annulen</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1696892</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-12 10:15:30 -0700</bug_when>
    <thetext>Share TestFeatures and TestCommand infrastructure between DumpRenderTree and WebKitTestRunner</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696894</commentid>
    <comment_count>1</comment_count>
      <attachid>411126</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-12 10:16:42 -0700</bug_when>
    <thetext>Created attachment 411126
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696907</commentid>
    <comment_count>2</comment_count>
      <attachid>411128</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-12 10:31:37 -0700</bug_when>
    <thetext>Created attachment 411128
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696956</commentid>
    <comment_count>3</comment_count>
      <attachid>411136</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-12 11:38:51 -0700</bug_when>
    <thetext>Created attachment 411136
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696957</commentid>
    <comment_count>4</comment_count>
      <attachid>411137</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-12 11:39:38 -0700</bug_when>
    <thetext>Created attachment 411137
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696972</commentid>
    <comment_count>5</comment_count>
      <attachid>411141</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-12 12:20:14 -0700</bug_when>
    <thetext>Created attachment 411141
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697051</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-10-12 14:54:55 -0700</bug_when>
    <thetext>Committed r268370: &lt;https://trac.webkit.org/changeset/268370&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 411141.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697053</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-10-12 14:55:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/70224887&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411126</attachid>
            <date>2020-10-12 10:16:42 -0700</date>
            <delta_ts>2020-10-12 10:31:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217614-20201012101641.patch</filename>
            <type>text/plain</type>
            <size>91614</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2ODM1NSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDk3IEBACisyMDIwLTEwLTEyICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBTaGFyZSBUZXN0RmVhdHVyZXMgYW5kIFRlc3RDb21tYW5kIGluZnJhc3RydWN0dXJl
IGJldHdlZW4gRHVtcFJlbmRlclRyZWUgYW5kIFdlYktpdFRlc3RSdW5uZXIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzYxNAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtXSVBdCisKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9E
dW1wUmVuZGVyVHJlZS5oOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5jcHA6CisgICAgICAgIChXVFI6OlRl
c3RPcHRpb25zOjprZXlUeXBlTWFwcGluZyk6CisgICAgICAgIChXVFI6OnNldFZhbHVlSWZTZXRJ
bk1hcCk6CisgICAgICAgIChXVFI6OlRlc3RPcHRpb25zOjpUZXN0T3B0aW9ucyk6CisgICAgICAg
IChwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAocGF0aENv
bnRhaW5zKTogRGVsZXRlZC4KKyAgICAgICAgKHNob3VsZER1bXBKU0NvbnNvbGVMb2dJblN0ZEVy
cik6IERlbGV0ZWQuCisgICAgICAgIChUZXN0T3B0aW9uczo6VGVzdE9wdGlvbnMpOiBEZWxldGVk
LgorICAgICAgICAoVGVzdE9wdGlvbnM6OndlYlZpZXdJc0NvbXBhdGlibGVXaXRoT3B0aW9ucyBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlvbnMuaDoK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW06CisgICAgICAg
IChzZXRXZWJQcmVmZXJlbmNlc0ZvclRlc3RPcHRpb25zKToKKyAgICAgICAgKHNldEpTQ09wdGlv
bnMpOgorICAgICAgICAocmVzZXRXZWJWaWV3VG9Db25zaXN0ZW50U3RhdGUpOgorICAgICAgICAo
dGVzdE9wdGlvbnNGb3JUZXN0KToKKyAgICAgICAgKHJ1blRlc3QpOgorICAgICAgICAqIER1bXBS
ZW5kZXJUcmVlL21hYy9VSURlbGVnYXRlLmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFj
L1VJRGVsZWdhdGUubW06CisgICAgICAgICgtW1VJRGVsZWdhdGUgcmVzZXRUb0NvbnNpc3RlbnRT
dGF0ZUJlZm9yZVRlc3Rpbmc6XSk6CisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9DTWFrZUxp
c3RzLnR4dDoKKyAgICAgICAgKiBUZXN0UnVubmVyU2hhcmVkL1Rlc3RDb21tYW5kLmNwcDogQWRk
ZWQuCisgICAgICAgIChXVFI6OkNvbW1hbmRUb2tlbml6ZXI6OkNvbW1hbmRUb2tlbml6ZXIpOgor
ICAgICAgICAoV1RSOjpDb21tYW5kVG9rZW5pemVyOjpwdW1wKToKKyAgICAgICAgKFdUUjo6Q29t
bWFuZFRva2VuaXplcjo6bmV4dCk6CisgICAgICAgIChXVFI6OkNvbW1hbmRUb2tlbml6ZXI6Omhh
c05leHQgY29uc3QpOgorICAgICAgICAoV1RSOjpkaWUpOgorICAgICAgICAoV1RSOjpwYXJzZUlu
cHV0TGluZSk6CisgICAgICAgIChXVFI6OnRlc3RQYXRoKToKKyAgICAgICAgKFdUUjo6dGVzdFVS
TFN0cmluZyk6CisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9UZXN0Q29tbWFuZC5oOiBBZGRl
ZC4KKyAgICAgICAgKiBUZXN0UnVubmVyU2hhcmVkL1Rlc3RGZWF0dXJlcy5jcHA6IEFkZGVkLgor
ICAgICAgICAoV1RSOjptZXJnZSk6CisgICAgICAgIChXVFI6OnBhdGhDb250YWlucyk6CisgICAg
ICAgIChXVFI6OnNob3VsZE1ha2VWaWV3cG9ydEZsZXhpYmxlKToKKyAgICAgICAgKFdUUjo6c2hv
dWxkVXNlRXBoZW1lcmFsU2Vzc2lvbik6CisgICAgICAgIChXVFI6Om92ZXJyaWRlVmlld1dpZHRo
QW5kSGVpZ2h0Rm9yVGVzdCk6CisgICAgICAgIChXVFI6Om92ZXJyaWRlRGV2aWNlU2NhbGVGYWN0
b3JGb3JUZXN0KToKKyAgICAgICAgKFdUUjo6c2hvdWxkRHVtcEpTQ29uc29sZUxvZ0luU3RkRXJy
KToKKyAgICAgICAgKFdUUjo6aGFyZGNvZGVkRmVhdHVyZXNCYXNlZE9uUGF0aEZvclRlc3QpOgor
ICAgICAgICAoV1RSOjpwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUpOgorICAgICAgICAoV1RS
OjpwYXJzZURvdWJsZVRlc3RIZWFkZXJWYWx1ZSk6CisgICAgICAgIChXVFI6OnBhcnNlU3RyaW5n
VGVzdEhlYWRlclZhbHVlQXNSZWxhdGl2ZVBhdGgpOgorICAgICAgICAoV1RSOjpwYXJzZVN0cmlu
Z1Rlc3RIZWFkZXJWYWx1ZUFzVVJMKToKKyAgICAgICAgKFdUUjo6cGFyc2VTdHJpbmdUZXN0SGVh
ZGVyVmFsdWVBc1N0cmluZ1ZlY3Rvcik6CisgICAgICAgIChXVFI6OnBhcnNlVGVzdEhlYWRlcik6
CisgICAgICAgIChXVFI6OmZlYXR1cmVEZWZhdWx0c0Zyb21UZXN0SGVhZGVyRm9yVGVzdCk6Cisg
ICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9UZXN0RmVhdHVyZXMuaDogQWRkZWQuCisgICAgICAg
ICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlRl
c3RDb250cm9sbGVyOjp0ZXN0T3B0aW9uc0ZvclRlc3QgY29uc3QpOgorICAgICAgICAoV1RSOjp0
ZXN0UGF0aCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpydW5UZXN0KToKKyAgICAg
ICAgKFdUUjo6Q29tbWFuZFRva2VuaXplcjo6Q29tbWFuZFRva2VuaXplcik6IERlbGV0ZWQuCisg
ICAgICAgIChXVFI6OkNvbW1hbmRUb2tlbml6ZXI6OnB1bXApOiBEZWxldGVkLgorICAgICAgICAo
V1RSOjpDb21tYW5kVG9rZW5pemVyOjpuZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6Q29t
bWFuZFRva2VuaXplcjo6aGFzTmV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OmRp
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OnBhcnNlSW5wdXRMaW5lKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmg6CisgICAgICAgICogV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0T3B0aW9ucy5jcHA6CisgICAgICAgIChXVFI6OlRlc3RPcHRpb25z
OjprZXlUeXBlTWFwcGluZyk6CisgICAgICAgIChXVFI6OlRlc3RPcHRpb25zOjpoYXNTYW1lSW5p
dGlhbGl6YXRpb25PcHRpb25zIGNvbnN0KToKKyAgICAgICAgKFdUUjo6ZHVtcEZlYXR1cmVzKTog
RGVsZXRlZC4KKyAgICAgICAgKFdUUjo6bWVyZ2UpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpr
ZXlUeXBlTWFwKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6a2V5VHlwZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXVFI6OnBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXVFI6OnBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNSZWxhdGl2ZVBhdGgpOiBEZWxl
dGVkLgorICAgICAgICAoV1RSOjpwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzVVJMKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdUUjo6cGFyc2VUZXN0SGVhZGVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdUUjo6cGF0aENvbnRhaW5zKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6c2hvdWxkTWFrZVZp
ZXdwb3J0RmxleGlibGUpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpzaG91bGRVc2VFcGhlbWVy
YWxTZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6b3ZlcnJpZGVWaWV3V2lkdGhBbmRI
ZWlnaHRGb3JUZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6b3ZlcnJpZGVEZXZpY2VTY2Fs
ZUZhY3RvckZvclRlc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpzaG91bGREdW1wSlNDb25z
b2xlTG9nSW5TdGRFcnIpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpoYXJkY29kZWRGZWF0dXJl
c0Jhc2VkT25QYXRoRm9yVGVzdCk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OmZlYXR1cmVEZWZh
dWx0c0Zyb21UZXN0SGVhZGVyRm9yVGVzdCk6IERlbGV0ZWQuCisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9UZXN0T3B0aW9ucy5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvV2ViS2l0
VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDIwLTEwLTEyICBMdW1p
bmcgWWluICA8bHVtaW5nX3lpbkBhcHBsZS5jb20+CiAKICAgICAgICAgW21hY09TXSBXb3JrYXJv
dW5kIGZvciBNQUNfT1NfWF9WRVJTSU9OX01BSk9SIGluY29ycmVjdGx5IGluY2x1ZGluZyBtaW5v
ciB2ZXJzaW9uIHdoZW4gYnVpbGRpbmcgCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9DTWFr
ZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9DTWFrZUxpc3Rz
LnR4dAkocmV2aXNpb24gMjY4MzU1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvQ01ha2VMaXN0
cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEwLDcgKzEwLDYgQEAgc2V0KER1bXBSZW5kZXJUcmVl
X1NPVVJDRVMKICAgICBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlci5jcHAKICAgICBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50LmNwcAogICAgIEN5Y2xpY1JlZHVuZGFuY3lDaGVjay5jcHAKLSAgICBEdW1w
UmVuZGVyVHJlZUNvbW1vbi5jcHAKICAgICBHQ0NvbnRyb2xsZXIuY3BwCiAgICAgSmF2YVNjcmlw
dFRocmVhZGluZy5jcHAKICAgICBQaXhlbER1bXBTdXBwb3J0LmNwcApJbmRleDogVG9vbHMvRHVt
cFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVu
ZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5oCShyZXZpc2lvbiAyNjgzNTUpCisrKyBUb29scy9EdW1w
UmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxNCArNTQs
MyBAQCBleHRlcm4gUmVmUHRyPFRlc3RSdW5uZXI+IGdUZXN0UnVubmVyOwogdm9pZCBkdW1wKCk7
CiB2b2lkIGRpc3BsYXlXZWJWaWV3KCk7CiB2b2lkIGRpc3BsYXlBbmRUcmFja1JlcGFpbnRzV2Vi
VmlldygpOwotCi1zdHJ1Y3QgVGVzdENvbW1hbmQgewotICAgIHN0ZDo6c3RyaW5nIHBhdGhPclVS
TDsKLSAgICBzdGQ6OnN0cmluZyBhYnNvbHV0ZVBhdGg7Ci0gICAgYm9vbCBzaG91bGREdW1wUGl4
ZWxzIHsgZmFsc2UgfTsKLSAgICBzdGQ6OnN0cmluZyBleHBlY3RlZFBpeGVsSGFzaDsKLSAgICBp
bnQgdGltZW91dCB7IDMwMDAwIH07IC8vIGluIG1zCi0gICAgYm9vbCBkdW1wSlNDb25zb2xlTG9n
SW5TdGRFcnIgeyBmYWxzZSB9OwotfTsKLQotVGVzdENvbW1hbmQgcGFyc2VJbnB1dExpbmUoY29u
c3Qgc3RkOjpzdHJpbmcmKTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJU
cmVlQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVu
ZGVyVHJlZUNvbW1vbi5jcHAJKHJldmlzaW9uIDI2ODM1NSkKKysrIFRvb2xzL0R1bXBSZW5kZXJU
cmVlL0R1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDExNCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCi0KLSNpbmNsdWRlIDxh
bGdvcml0aG0+Ci0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1
ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZz4KLQotY2xhc3MgQ29tbWFuZFRva2VuaXpl
ciB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgQ29tbWFuZFRva2VuaXplcihjb25zdCBzdGQ6OnN0
cmluZyYgaW5wdXQpCi0gICAgICAgIDogbV9pbnB1dChpbnB1dCkKLSAgICAgICAgLCBtX3Bvc05l
eHRTZXBhcmF0b3IoMCkKLSAgICB7Ci0gICAgICAgIHB1bXAoKTsKLSAgICB9Ci0KLSAgICBib29s
IGhhc05leHQoKSBjb25zdDsKLSAgICBzdGQ6OnN0cmluZyBuZXh0KCk7Ci0KLXByaXZhdGU6Ci0g
ICAgdm9pZCBwdW1wKCk7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIga1NlcGFyYXRvciA9ICdcJyc7
Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1faW5wdXQ7Ci0gICAgc3RkOjpzdHJpbmcgbV9uZXh0
OwotICAgIHNpemVfdCBtX3Bvc05leHRTZXBhcmF0b3I7Ci19OwotCi12b2lkIENvbW1hbmRUb2tl
bml6ZXI6OnB1bXAoKQotewotICAgIGlmIChtX3Bvc05leHRTZXBhcmF0b3IgPT0gc3RkOjpzdHJp
bmc6Om5wb3MgfHwgbV9wb3NOZXh0U2VwYXJhdG9yID09IG1faW5wdXQuc2l6ZSgpKSB7Ci0gICAg
ICAgIG1fbmV4dCA9IHN0ZDo6c3RyaW5nKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
c2l6ZV90IHN0YXJ0ID0gbV9wb3NOZXh0U2VwYXJhdG9yID8gbV9wb3NOZXh0U2VwYXJhdG9yICsg
MSA6IDA7Ci0gICAgbV9wb3NOZXh0U2VwYXJhdG9yID0gbV9pbnB1dC5maW5kKGtTZXBhcmF0b3Is
IHN0YXJ0KTsKLSAgICBzaXplX3Qgc2l6ZSA9IG1fcG9zTmV4dFNlcGFyYXRvciA9PSBzdGQ6OnN0
cmluZzo6bnBvcyA/IHN0ZDo6c3RyaW5nOjpucG9zIDogbV9wb3NOZXh0U2VwYXJhdG9yIC0gc3Rh
cnQ7Ci0gICAgbV9uZXh0ID0gc3RkOjpzdHJpbmcobV9pbnB1dCwgc3RhcnQsIHNpemUpOwotfQot
Ci1zdGQ6OnN0cmluZyBDb21tYW5kVG9rZW5pemVyOjpuZXh0KCkKLXsKLSAgICBBU1NFUlQoaGFz
TmV4dCgpKTsKLQotICAgIHN0ZDo6c3RyaW5nIG9sZE5leHQgPSBtX25leHQ7Ci0gICAgcHVtcCgp
OwotICAgIHJldHVybiBvbGROZXh0OwotfQotCi1ib29sIENvbW1hbmRUb2tlbml6ZXI6Omhhc05l
eHQoKSBjb25zdAotewotICAgIHJldHVybiAhbV9uZXh0LmVtcHR5KCk7Ci19Ci0KLU5PX1JFVFVS
TiBzdGF0aWMgdm9pZCBkaWUoY29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0TGluZSkKLXsKLSAgICBm
cHJpbnRmKHN0ZGVyciwgIlVuZXhwZWN0ZWQgaW5wdXQgbGluZTogJXNcbiIsIGlucHV0TGluZS5j
X3N0cigpKTsKLSAgICBleGl0KDEpOwotfQotCi1UZXN0Q29tbWFuZCBwYXJzZUlucHV0TGluZShj
b25zdCBzdGQ6OnN0cmluZyYgaW5wdXRMaW5lKQotewotICAgIFRlc3RDb21tYW5kIHJlc3VsdDsK
LSAgICBDb21tYW5kVG9rZW5pemVyIHRva2VuaXplcihpbnB1dExpbmUpOwotICAgIGlmICghdG9r
ZW5pemVyLmhhc05leHQoKSkKLSAgICAgICAgZGllKGlucHV0TGluZSk7Ci0KLSAgICBzdGQ6OnN0
cmluZyBhcmcgPSB0b2tlbml6ZXIubmV4dCgpOwotICAgIHJlc3VsdC5wYXRoT3JVUkwgPSBhcmc7
Ci0gICAgd2hpbGUgKHRva2VuaXplci5oYXNOZXh0KCkpIHsKLSAgICAgICAgYXJnID0gdG9rZW5p
emVyLm5leHQoKTsKLSAgICAgICAgaWYgKGFyZyA9PSAiLS10aW1lb3V0IikgewotICAgICAgICAg
ICAgc3RkOjpzdHJpbmcgdGltZW91dFRva2VuID0gdG9rZW5pemVyLm5leHQoKTsKLSAgICAgICAg
ICAgIHJlc3VsdC50aW1lb3V0ID0gYXRvaSh0aW1lb3V0VG9rZW4uY19zdHIoKSk7Ci0gICAgICAg
IH0gZWxzZSBpZiAoYXJnID09ICItcCIgfHwgYXJnID09ICItLXBpeGVsLXRlc3QiKSB7Ci0gICAg
ICAgICAgICByZXN1bHQuc2hvdWxkRHVtcFBpeGVscyA9IHRydWU7Ci0gICAgICAgICAgICBpZiAo
dG9rZW5pemVyLmhhc05leHQoKSkKLSAgICAgICAgICAgICAgICByZXN1bHQuZXhwZWN0ZWRQaXhl
bEhhc2ggPSB0b2tlbml6ZXIubmV4dCgpOwotICAgICAgICB9IGVsc2UgaWYgKGFyZyA9PSAiLS1k
dW1wLWpzY29uc29sZWxvZy1pbi1zdGRlcnIiKQotICAgICAgICAgICAgcmVzdWx0LmR1bXBKU0Nv
bnNvbGVMb2dJblN0ZEVyciA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKGFyZyA9PSBzdGQ6OnN0
cmluZygiLS1hYnNvbHV0ZVBhdGgiKSkKLSAgICAgICAgICAgIHJlc3VsdC5hYnNvbHV0ZVBhdGgg
PSB0b2tlbml6ZXIubmV4dCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkaWUoaW5wdXRM
aW5lKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQpJbmRleDogVG9vbHMvRHVtcFJl
bmRlclRyZWUvVGVzdE9wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJU
cmVlL1Rlc3RPcHRpb25zLmNwcAkocmV2aXNpb24gMjY4MzU1KQorKysgVG9vbHMvRHVtcFJlbmRl
clRyZWUvVGVzdE9wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNDAgKzI2LDg1IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdE9wdGlvbnMuaCIKIAorI2luY2x1
ZGUgIlRlc3RGZWF0dXJlcy5oIgogI2luY2x1ZGUgPGZzdHJlYW0+CiAjaW5jbHVkZSA8c3RyaW5n
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCi1zdGF0aWMgYm9vbCBwYXJzZUJv
b2xlYW5UZXN0SGVhZGVyVmFsdWUoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKQotewotICAgIGlm
ICh2YWx1ZSA9PSAidHJ1ZSIpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICh2YWx1ZSA9
PSAiZmFsc2UiKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBMT0dfRVJST1IoIkZvdW5k
IHVuZXhwZWN0ZWQgdmFsdWUgJyVzJyBmb3IgYm9vbGVhbiBvcHRpb24uIEV4cGVjdGVkICd0cnVl
JyBvciAnZmFsc2UnLiIsIHZhbHVlLmNfc3RyKCkpOwotICAgIHJldHVybiBmYWxzZTsKLX0KK25h
bWVzcGFjZSBXVFIgewogCi1zdGF0aWMgYm9vbCBwYXRoQ29udGFpbnMoY29uc3Qgc3RkOjpzdHJp
bmcmIHBhdGhPclVSTCwgY29uc3QgY2hhciogc3Vic3RyaW5nKQorY29uc3Qgc3RkOjp1bm9yZGVy
ZWRfbWFwPHN0ZDo6c3RyaW5nLCBUZXN0SGVhZGVyS2V5VHlwZT4mIFRlc3RPcHRpb25zOjprZXlU
eXBlTWFwcGluZygpCiB7Ci0gICAgU3RyaW5nIHBhdGgocGF0aE9yVVJMLmNfc3RyKCkpOwotICAg
IHJldHVybiBwYXRoLmNvbnRhaW5zKHN1YnN0cmluZyk7Ci19CisgICAgc3RhdGljIHN0ZDo6dW5v
cmRlcmVkX21hcDxzdGQ6OnN0cmluZywgVGVzdEhlYWRlcktleVR5cGU+IG1hcCB7CisgICAgICAg
IHsgImFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzIiwgVGVz
dEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiYWxsb3dUb3BOYXZpZ2F0aW9uVG9E
YXRhVVJMcyIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImR1bXBKU0Nv
bnNvbGVMb2dJblN0ZEVyciIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsg
ImVuYWJsZUF0dGFjaG1lbnRFbGVtZW50IiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAg
ICAgICAgeyAiZW5hYmxlQmFja0ZvcndhcmRDYWNoZSIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29s
IH0sCisgICAgICAgIHsgImVuYWJsZUNvbG9yRmlsdGVyIiwgVGVzdEhlYWRlcktleVR5cGU6OkJv
b2wgfSwKKyAgICAgICAgeyAiZW5hYmxlRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTG9hZCIsIFRlc3RI
ZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUluc3BlY3RvckFkZGl0aW9u
cyIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUludGVyc2Vj
dGlvbk9ic2VydmVyIiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5h
YmxlS2V5Z2VuRWxlbWVudCIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsg
ImVuYWJsZU1lbnVJdGVtRWxlbWVudCIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAg
ICAgIHsgImVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9v
bCB9LAorICAgICAgICB7ICJlbmFibGVQb2ludGVyTG9jayIsIFRlc3RIZWFkZXJLZXlUeXBlOjpC
b29sIH0sCisgICAgICAgIHsgImxheWVyQmFja2VkV2ViVmlldyIsIFRlc3RIZWFkZXJLZXlUeXBl
OjpCb29sIH0sCisgICAgICAgIHsgInVzZUFjY2VsZXJhdGVkRHJhd2luZyIsIFRlc3RIZWFkZXJL
ZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInVzZUVwaGVtZXJhbFNlc3Npb24iLCBUZXN0SGVh
ZGVyS2V5VHlwZTo6Qm9vbCB9LAorCisgICAgICAgIHsgImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFn
ZVR5cGVzIiwgVGVzdEhlYWRlcktleVR5cGU6OlN0cmluZyB9LAorICAgICAgICB7ICJqc2NPcHRp
b25zIiwgVGVzdEhlYWRlcktleVR5cGU6OlN0cmluZyB9LAorICAgIH07CiAKLXN0YXRpYyBib29s
IHNob3VsZER1bXBKU0NvbnNvbGVMb2dJblN0ZEVycihjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9y
VVJMKQotewotICAgIHJldHVybiBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4
MDAvYmVhY29uIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL2Jl
YWNvbiIpCi0gICAgICAgIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgw
MC9jb3JzIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL2NvcnMi
KQotICAgICAgICB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvZmV0
Y2giKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMvZmV0Y2giKQot
ICAgICAgICB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvc2Vydmlj
ZS13b3JrZXJzIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3Nl
cnZpY2Utd29ya2VycyIpCi0gICAgICAgIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2Nh
bGhvc3Q6ODgwMC9zdHJlYW1zL3dyaXRhYmxlLXN0cmVhbXMiKSB8fCBwYXRoQ29udGFpbnMocGF0
aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMvc3RyZWFtcy93cml0YWJsZS1zdHJlYW1zIikKLSAgICAg
ICAgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo4ODAwL3N0cmVhbXMvcGlw
aW5nIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3N0cmVhbXMv
cGlwaW5nIikKLSAgICAgICAgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo4
ODAwL3hociIpIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6OTQ0My94aHIi
KQotICAgICAgICB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvd2Vi
cnRjIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3dlYnJ0YyIp
Ci0gICAgICAgIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgwMC93ZWJz
b2NrZXRzIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3dlYnNv
Y2tldHMiKTsKKyAgICByZXR1cm4gbWFwOwogfQogCi1UZXN0T3B0aW9uczo6VGVzdE9wdGlvbnMo
Y29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCwgY29uc3Qgc3RkOjpzdHJpbmcmIGFic29sdXRl
UGF0aCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdGF0aWMgdm9pZCBzZXRWYWx1ZUlmU2V0SW5N
YXAoVCYgdmFsdWVUb1NldCwgc3RkOjpzdHJpbmcga2V5LCBjb25zdCBzdGQ6OnVub3JkZXJlZF9t
YXA8c3RkOjpzdHJpbmcsIFQ+JiBtYXApCiB7Ci0gICAgY29uc3QgYXV0byYgcGF0aCA9IGFic29s
dXRlUGF0aC5lbXB0eSgpID8gcGF0aE9yVVJMIDogYWJzb2x1dGVQYXRoOwotICAgIGlmIChwYXRo
LmVtcHR5KCkpCisgICAgYXV0byBpdCA9IG1hcC5maW5kKGtleSk7CisgICAgaWYgKGl0ID09IG1h
cC5lbmQoKSkKICAgICAgICAgcmV0dXJuOworICAgIHZhbHVlVG9TZXQgPSBpdC0+c2Vjb25kOwor
fQogCi0gICAgZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyID0gc2hvdWxkRHVtcEpTQ29uc29sZUxv
Z0luU3RkRXJyKHBhdGhPclVSTCk7Ci0KLSAgICBzdGQ6OnN0cmluZyBvcHRpb25zOwotICAgIHN0
ZDo6aWZzdHJlYW0gdGVzdEZpbGUocGF0aC5kYXRhKCkpOwotICAgIGlmICghdGVzdEZpbGUuZ29v
ZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgZ2V0bGluZSh0ZXN0RmlsZSwgb3B0aW9ucyk7Ci0g
ICAgc3RkOjpzdHJpbmcgYmVnaW5TdHJpbmcoIndlYmtpdC10ZXN0LXJ1bm5lciBbICIpOwotICAg
IHN0ZDo6c3RyaW5nIGVuZFN0cmluZygiIF0iKTsKLSAgICBzaXplX3QgYmVnaW5Mb2NhdGlvbiA9
IG9wdGlvbnMuZmluZChiZWdpblN0cmluZyk7Ci0gICAgaWYgKGJlZ2luTG9jYXRpb24gPT0gc3Rk
OjpzdHJpbmc6Om5wb3MpCi0gICAgICAgIHJldHVybjsKLSAgICBzaXplX3QgZW5kTG9jYXRpb24g
PSBvcHRpb25zLmZpbmQoZW5kU3RyaW5nLCBiZWdpbkxvY2F0aW9uKTsKLSAgICBpZiAoZW5kTG9j
YXRpb24gPT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBu
b3QgZmluZCBlbmQgb2YgdGVzdCBoZWFkZXIgaW4gJXMiLCBwYXRoLmNfc3RyKCkpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIHN0ZDo6c3RyaW5nIHBhaXJTdHJpbmcgPSBvcHRpb25zLnN1
YnN0cihiZWdpbkxvY2F0aW9uICsgYmVnaW5TdHJpbmcuc2l6ZSgpLCBlbmRMb2NhdGlvbiAtIChi
ZWdpbkxvY2F0aW9uICsgYmVnaW5TdHJpbmcuc2l6ZSgpKSk7Ci0gICAgc2l6ZV90IHBhaXJTdGFy
dCA9IDA7Ci0gICAgd2hpbGUgKHBhaXJTdGFydCA8IHBhaXJTdHJpbmcuc2l6ZSgpKSB7Ci0gICAg
ICAgIHNpemVfdCBwYWlyRW5kID0gcGFpclN0cmluZy5maW5kKCIgIiwgcGFpclN0YXJ0KTsKLSAg
ICAgICAgaWYgKHBhaXJFbmQgPT0gc3RkOjpzdHJpbmc6Om5wb3MpCi0gICAgICAgICAgICBwYWly
RW5kID0gcGFpclN0cmluZy5zaXplKCk7Ci0gICAgICAgIHNpemVfdCBlcXVhbHNMb2NhdGlvbiA9
IHBhaXJTdHJpbmcuZmluZCgiPSIsIHBhaXJTdGFydCk7Ci0gICAgICAgIGlmIChlcXVhbHNMb2Nh
dGlvbiA9PSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJNYWxm
b3JtZWQgb3B0aW9uIGluIHRlc3QgaGVhZGVyIChjb3VsZCBub3QgZmluZCAnPScgY2hhcmFjdGVy
KSBpbiAlcyIsIHBhdGguY19zdHIoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBhdXRvIGtleSA9IHBhaXJTdHJpbmcuc3Vic3RyKHBhaXJTdGFydCwgZXF1YWxzTG9j
YXRpb24gLSBwYWlyU3RhcnQpOwotICAgICAgICBhdXRvIHZhbHVlID0gcGFpclN0cmluZy5zdWJz
dHIoZXF1YWxzTG9jYXRpb24gKyAxLCBwYWlyRW5kIC0gKGVxdWFsc0xvY2F0aW9uICsgMSkpOwot
ICAgICAgICBpZiAoa2V5ID09ICJlbmFibGVBdHRhY2htZW50RWxlbWVudCIpCi0gICAgICAgICAg
ICBlbmFibGVBdHRhY2htZW50RWxlbWVudCA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2
YWx1ZSk7Ci0gICAgICAgIGlmIChrZXkgPT0gInVzZUFjY2VsZXJhdGVkRHJhd2luZyIpCi0gICAg
ICAgICAgICB1c2VBY2NlbGVyYXRlZERyYXdpbmcgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFs
dWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUludGVyc2VjdGlvbk9i
c2VydmVyIikKLSAgICAgICAgICAgIGVuYWJsZUludGVyc2VjdGlvbk9ic2VydmVyID0gcGFyc2VC
b29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJ1
c2VFcGhlbWVyYWxTZXNzaW9uIikKLSAgICAgICAgICAgIHVzZUVwaGVtZXJhbFNlc3Npb24gPSBw
YXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkg
PT0gImVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUiKQotICAgICAgICAgICAgZW5hYmxlQmFja0Zvcndh
cmRDYWNoZSA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVs
c2UgaWYgKGtleSA9PSAiZW5hYmxlTWVudUl0ZW1FbGVtZW50IikKLSAgICAgICAgICAgIGVuYWJs
ZU1lbnVJdGVtRWxlbWVudCA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0g
ICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlS2V5Z2VuRWxlbWVudCIpCi0gICAgICAgICAg
ICBlbmFibGVLZXlnZW5FbGVtZW50ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVl
KTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzIikK
LSAgICAgICAgICAgIGVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMgPSBwYXJzZUJvb2xlYW5UZXN0
SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZVBvaW50
ZXJMb2NrIikKLSAgICAgICAgICAgIGVuYWJsZVBvaW50ZXJMb2NrID0gcGFyc2VCb29sZWFuVGVz
dEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVEcmFn
RGVzdGluYXRpb25BY3Rpb25Mb2FkIikKLSAgICAgICAgICAgIGVuYWJsZURyYWdEZXN0aW5hdGlv
bkFjdGlvbkxvYWQgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAg
ICBlbHNlIGlmIChrZXkgPT0gImxheWVyQmFja2VkV2ViVmlldyIpCi0gICAgICAgICAgICBsYXll
ckJhY2tlZFdlYlZpZXcgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAg
ICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUluc3BlY3RvckFkZGl0aW9ucyIpCi0gICAgICAg
ICAgICBlbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFs
dWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImR1bXBKU0NvbnNvbGVMb2dJblN0
ZEVyciIpCi0gICAgICAgICAgICBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgPSBwYXJzZUJvb2xl
YW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImFsbG93
Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzIikKLSAgICAgICAgICAg
IGFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzID0gcGFyc2VC
b29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJp
bnRlcm5hbDpzZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCIpCi0gICAgICAg
ICAgICBlbmFibGVTZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzID0gcGFyc2VCb29sZWFu
VGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVD
b2xvckZpbHRlciIpCi0gICAgICAgICAgICBlbmFibGVDb2xvckZpbHRlciA9IHBhcnNlQm9vbGVh
blRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAianNjT3B0
aW9ucyIpCi0gICAgICAgICAgICBqc2NPcHRpb25zID0gdmFsdWU7Ci0gICAgICAgIGVsc2UgaWYg
KGtleSA9PSAiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMiKQotICAgICAgICAgICAgYWRk
aXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMgPSB2YWx1ZTsKLSAgICAgICAgZWxzZSBpZiAoa2V5
ID09ICJleHBlcmltZW50YWw6V2ViR1BVRW5hYmxlZCIpCi0gICAgICAgICAgICBlbmFibGVXZWJH
UFUgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlm
IChrZXkgPT0gImludGVybmFsOkNTU0xvZ2ljYWxFbmFibGVkIikKLSAgICAgICAgICAgIGVuYWJs
ZUNTU0xvZ2ljYWwgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAg
ICBlbHNlIGlmIChrZXkgPT0gImludGVybmFsOkxpbmVIZWlnaHRVbml0c0VuYWJsZWQiKQotICAg
ICAgICAgICAgZW5hYmxlTGluZUhlaWdodFVuaXRzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZh
bHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJleHBlcmltZW50YWw6QWRDbGlj
a0F0dHJpYnV0aW9uRW5hYmxlZCIpCi0gICAgICAgICAgICBhZENsaWNrQXR0cmlidXRpb25FbmFi
bGVkID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBp
ZiAoa2V5ID09ICJleHBlcmltZW50YWw6UmVzaXplT2JzZXJ2ZXJFbmFibGVkIikKLSAgICAgICAg
ICAgIGVuYWJsZVJlc2l6ZU9ic2VydmVyID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZh
bHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJleHBlcmltZW50YWw6Q1NTT01WaWV3U21v
b3RoU2Nyb2xsaW5nRW5hYmxlZCIpCi0gICAgICAgICAgICBlbmFibGVDU1NPTVZpZXdTbW9vdGhT
Y3JvbGxpbmcgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBl
bHNlIGlmIChrZXkgPT0gImV4cGVyaW1lbnRhbDpDb3JlTWF0aE1MRW5hYmxlZCIpCi0gICAgICAg
ICAgICBlbmFibGVDb3JlTWF0aE1MID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVl
KTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJleHBlcmltZW50YWw6UmVxdWVzdElkbGVDYWxs
YmFja0VuYWJsZWQiKQotICAgICAgICAgICAgZW5hYmxlUmVxdWVzdElkbGVDYWxsYmFjayA9IHBh
cnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9
PSAiZXhwZXJpbWVudGFsOkFzeW5jQ2xpcGJvYXJkQVBJRW5hYmxlZCIpCi0gICAgICAgICAgICBl
bmFibGVBc3luY0NsaXBib2FyZEFQSSA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1
ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiaW50ZXJuYWw6TGF5b3V0Rm9ybWF0dGluZ0Nv
bnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQiKQotICAgICAgICAgICAgbGF5b3V0Rm9ybWF0dGluZ0Nv
bnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFs
dWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImV4cGVyaW1lbnRhbDpBc3BlY3RSYXRpb09m
SW1nRnJvbVdpZHRoQW5kSGVpZ2h0RW5hYmxlZCIpCi0gICAgICAgICAgICBlbmFibGVBc3BlY3RS
YXRpb09mSW1nRnJvbVdpZHRoQW5kSGVpZ2h0ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVl
KHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJhbGxvd1RvcE5hdmlnYXRpb25Ub0Rh
dGFVUkxzIikKLSAgICAgICAgICAgIGFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMgPSBwYXJz
ZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0g
ImV4cGVyaW1lbnRhbDpDb250YWN0UGlja2VyQVBJRW5hYmxlZCIpCi0gICAgICAgICAgICBlbmFi
bGVDb250YWN0UGlja2VyQVBJID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsK
LSAgICAgICAgcGFpclN0YXJ0ID0gcGFpckVuZCArIDE7Ci0gICAgfQorVGVzdE9wdGlvbnM6OlRl
c3RPcHRpb25zKFRlc3RGZWF0dXJlcyB0ZXN0RmVhdHVyZXMpCit7CisgICAgc2V0VmFsdWVJZlNl
dEluTWFwKGFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzLCAi
YWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMiLCB0ZXN0RmVh
dHVyZXMuYm9vbEZlYXR1cmVzKTsKKyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoYWxsb3dUb3BOYXZp
Z2F0aW9uVG9EYXRhVVJMcywgImFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMiLCB0ZXN0RmVh
dHVyZXMuYm9vbEZlYXR1cmVzKTsKKyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZHVtcEpTQ29uc29s
ZUxvZ0luU3RkRXJyLCAiZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIiwgdGVzdEZlYXR1cmVzLmJv
b2xGZWF0dXJlcyk7CisgICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUF0dGFjaG1lbnRFbGVt
ZW50LCAiZW5hYmxlQXR0YWNobWVudEVsZW1lbnQiLCB0ZXN0RmVhdHVyZXMuYm9vbEZlYXR1cmVz
KTsKKyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlQmFja0ZvcndhcmRDYWNoZSwgImVuYWJs
ZUJhY2tGb3J3YXJkQ2FjaGUiLCB0ZXN0RmVhdHVyZXMuYm9vbEZlYXR1cmVzKTsKKyAgICBzZXRW
YWx1ZUlmU2V0SW5NYXAoZW5hYmxlQ29sb3JGaWx0ZXIsICJlbmFibGVDb2xvckZpbHRlciIsIHRl
c3RGZWF0dXJlcy5ib29sRmVhdHVyZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVE
cmFnRGVzdGluYXRpb25BY3Rpb25Mb2FkLCAiZW5hYmxlRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTG9h
ZCIsIHRlc3RGZWF0dXJlcy5ib29sRmVhdHVyZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChl
bmFibGVJbnNwZWN0b3JBZGRpdGlvbnMsICJlbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMiLCB0ZXN0
RmVhdHVyZXMuYm9vbEZlYXR1cmVzKTsKKyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlSW50
ZXJzZWN0aW9uT2JzZXJ2ZXIsICJlbmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlciIsIHRlc3RGZWF0
dXJlcy5ib29sRmVhdHVyZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVLZXlnZW5F
bGVtZW50LCAiZW5hYmxlS2V5Z2VuRWxlbWVudCIsIHRlc3RGZWF0dXJlcy5ib29sRmVhdHVyZXMp
OworICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVNZW51SXRlbUVsZW1lbnQsICJlbmFibGVN
ZW51SXRlbUVsZW1lbnQiLCB0ZXN0RmVhdHVyZXMuYm9vbEZlYXR1cmVzKTsKKyAgICBzZXRWYWx1
ZUlmU2V0SW5NYXAoZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scywgImVuYWJsZU1vZGVybk1lZGlh
Q29udHJvbHMiLCB0ZXN0RmVhdHVyZXMuYm9vbEZlYXR1cmVzKTsKKyAgICBzZXRWYWx1ZUlmU2V0
SW5NYXAoZW5hYmxlUG9pbnRlckxvY2ssICJlbmFibGVQb2ludGVyTG9jayIsIHRlc3RGZWF0dXJl
cy5ib29sRmVhdHVyZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChsYXllckJhY2tlZFdlYlZp
ZXcsICJsYXllckJhY2tlZFdlYlZpZXciLCB0ZXN0RmVhdHVyZXMuYm9vbEZlYXR1cmVzKTsKKyAg
ICBzZXRWYWx1ZUlmU2V0SW5NYXAodXNlQWNjZWxlcmF0ZWREcmF3aW5nLCAidXNlQWNjZWxlcmF0
ZWREcmF3aW5nIiwgdGVzdEZlYXR1cmVzLmJvb2xGZWF0dXJlcyk7CisgICAgc2V0VmFsdWVJZlNl
dEluTWFwKHVzZUVwaGVtZXJhbFNlc3Npb24sICJ1c2VFcGhlbWVyYWxTZXNzaW9uIiwgdGVzdEZl
YXR1cmVzLmJvb2xGZWF0dXJlcyk7CisKKyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoYWRkaXRpb25h
bFN1cHBvcnRlZEltYWdlVHlwZXMsICJhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyIsIHRl
c3RGZWF0dXJlcy5zdHJpbmdGZWF0dXJlcyk7CisgICAgc2V0VmFsdWVJZlNldEluTWFwKGpzY09w
dGlvbnMsICJqc2NPcHRpb25zIiwgdGVzdEZlYXR1cmVzLnN0cmluZ0ZlYXR1cmVzKTsKKworICAg
IHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVDU1NMb2dpY2FsLCAiQ1NTTG9naWNhbEVuYWJsZWQi
LCB0ZXN0RmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzKTsKKyAgICBzZXRWYWx1ZUlmU2V0
SW5NYXAoZW5hYmxlTGluZUhlaWdodFVuaXRzLCAiTGluZUhlaWdodFVuaXRzRW5hYmxlZCIsIHRl
c3RGZWF0dXJlcy5pbnRlcm5hbERlYnVnRmVhdHVyZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1h
cChlbmFibGVTZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzLCAic2VsZWN0aW9uQWNyb3Nz
U2hhZG93Qm91bmRhcmllc0VuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1
cmVzKTsKKyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAobGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRJbnRl
Z3JhdGlvbkVuYWJsZWQsICJMYXlvdXRGb3JtYXR0aW5nQ29udGV4dEludGVncmF0aW9uRW5hYmxl
ZCIsIHRlc3RGZWF0dXJlcy5pbnRlcm5hbERlYnVnRmVhdHVyZXMpOworCisgICAgc2V0VmFsdWVJ
ZlNldEluTWFwKGFkQ2xpY2tBdHRyaWJ1dGlvbkVuYWJsZWQsICJBZENsaWNrQXR0cmlidXRpb25F
bmFibGVkIiwgdGVzdEZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzKTsKKyAgICBzZXRWYWx1
ZUlmU2V0SW5NYXAoZW5hYmxlQXNwZWN0UmF0aW9PZkltZ0Zyb21XaWR0aEFuZEhlaWdodCwgIkFz
cGVjdFJhdGlvT2ZJbWdGcm9tV2lkdGhBbmRIZWlnaHRFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmV4
cGVyaW1lbnRhbEZlYXR1cmVzKTsKKyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlQXN5bmND
bGlwYm9hcmRBUEksICJBc3luY0NsaXBib2FyZEFQSUVuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuZXhw
ZXJpbWVudGFsRmVhdHVyZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVDU1NPTVZp
ZXdTbW9vdGhTY3JvbGxpbmcsICJDU1NPTVZpZXdTbW9vdGhTY3JvbGxpbmdFbmFibGVkIiwgdGVz
dEZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzKTsKKyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAo
ZW5hYmxlQ29udGFjdFBpY2tlckFQSSwgIkNvbnRhY3RQaWNrZXJBUElFbmFibGVkIiwgdGVzdEZl
YXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzKTsKKyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5h
YmxlQ29yZU1hdGhNTCwgIldlYkdQVUVuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuZXhwZXJpbWVudGFs
RmVhdHVyZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVSZXF1ZXN0SWRsZUNhbGxi
YWNrLCAiUmVxdWVzdElkbGVDYWxsYmFja0VuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuZXhwZXJpbWVu
dGFsRmVhdHVyZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVSZXNpemVPYnNlcnZl
ciwgIlJlc2l6ZU9ic2VydmVyRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0
dXJlcyk7CisgICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZVdlYkdQVSwgIkNvcmVNYXRoTUxF
bmFibGVkIiwgdGVzdEZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzKTsKKyAgICBzZXRWYWx1
ZUlmU2V0SW5NYXAoZW5hYmxlV2ViR1BVLCAiV2ViR1BVRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5l
eHBlcmltZW50YWxGZWF0dXJlcyk7CiB9CiAKIGJvb2wgVGVzdE9wdGlvbnM6OndlYlZpZXdJc0Nv
bXBhdGlibGVXaXRoT3B0aW9ucyhjb25zdCBUZXN0T3B0aW9ucyYgb3RoZXIpIGNvbnN0CkBAIC0x
NjcsMyArMTEyLDUgQEAgYm9vbCBUZXN0T3B0aW9uczo6d2ViVmlld0lzQ29tcGF0aWJsZVdpdAog
ICAgIHJldHVybiBvdGhlci5sYXllckJhY2tlZFdlYlZpZXcgPT0gbGF5ZXJCYWNrZWRXZWJWaWV3
CiAgICAgICAgICYmIG90aGVyLmpzY09wdGlvbnMgPT0ganNjT3B0aW9uczsKIH0KKworfQpJbmRl
eDogVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9EdW1wUmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5oCShyZXZpc2lvbiAyNjgzNTUpCisrKyBUb29s
cy9EdW1wUmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsy
NSwxMSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIlRlc3RGZWF0dXJlcy5oIgogI2lu
Y2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorCituYW1lc3BhY2UgV1RS
IHsKIAogc3RydWN0IFRlc3RPcHRpb25zIHsKICAgICBib29sIGVuYWJsZUF0dGFjaG1lbnRFbGVt
ZW50IHsgZmFsc2UgfTsKQEAgLTYxLDYgKzY1LDExIEBAIHN0cnVjdCBUZXN0T3B0aW9ucyB7CiAg
ICAgc3RkOjpzdHJpbmcganNjT3B0aW9uczsKICAgICBzdGQ6OnN0cmluZyBhZGRpdGlvbmFsU3Vw
cG9ydGVkSW1hZ2VUeXBlczsKIAotICAgIFRlc3RPcHRpb25zKGNvbnN0IHN0ZDo6c3RyaW5nJiBw
YXRoT3JVUkwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBhYnNvbHV0ZVBhdGgpOworICAgIGV4cGxpY2l0
IFRlc3RPcHRpb25zKFRlc3RGZWF0dXJlcyk7CiAgICAgYm9vbCB3ZWJWaWV3SXNDb21wYXRpYmxl
V2l0aE9wdGlvbnMoY29uc3QgVGVzdE9wdGlvbnMmKSBjb25zdDsKKyAgICAKKyAgICBzdGF0aWMg
Y29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBUZXN0SGVhZGVyS2V5VHlwZT4m
IGtleVR5cGVNYXBwaW5nKCk7CiB9OworCit9CisKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVl
L0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMjY4MzU1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRl
clRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA5LDEx
ICsxMDksMTIgQEAKIAkJNURCOUFDOUUwRjcyMkMzNjAwNjg0NjQxIC8qIFdlYktpdFdlaWdodFdh
dGNoZXI3MDAudHRmIGluIENvcHkgRm9udCBGaWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzNzVGMDk3NzBEQUMzQ0I2MDBDOEI0RTUgLyogV2ViS2l0V2VpZ2h0V2F0Y2hl
cjcwMC50dGYgKi87IH07CiAJCTVEQjlBQzlGMEY3MjJDMzYwMDY4NDY0MSAvKiBXZWJLaXRXZWln
aHRXYXRjaGVyODAwLnR0ZiBpbiBDb3B5IEZvbnQgRmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzc1RjA5NzgwREFDM0NCNjAwQzhCNEU1IC8qIFdlYktpdFdlaWdodFdh
dGNoZXI4MDAudHRmICovOyB9OwogCQk1REI5QUNBMDBGNzIyQzM2MDA2ODQ2NDEgLyogV2ViS2l0
V2VpZ2h0V2F0Y2hlcjkwMC50dGYgaW4gQ29weSBGb250IEZpbGVzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDM3NUYwOTc5MERBQzNDQjYwMEM4QjRFNSAvKiBXZWJLaXRXZWln
aHRXYXRjaGVyOTAwLnR0ZiAqLzsgfTsKKwkJN0NGRjlCQkYyNTMzQkIyNDAwMDgwMDlGIC8qIFRl
c3RGZWF0dXJlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3Q0ZGOUJCRTI1MzNCQjI0MDAwODAwOUYgLyogVGVzdEZlYXR1cmVzLmNwcCAqLzsgfTsK
KwkJN0NGRjlCQzIyNTMzQkMxNjAwMDgwMDlGIC8qIFRlc3RDb21tYW5kLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRkY5QkMxMjUzM0JDMTYwMDA4
MDA5RiAvKiBUZXN0Q29tbWFuZC5jcHAgKi87IH07CiAJCTgwMDQ1QUVFMTQ3NzE4RTcwMDgyOTBB
OCAvKiBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgwMDQ1QUVDMTQ3NzE4RTcwMDgyOTBBOCAv
KiBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbSAqLzsgfTsKIAkJODQ2NUUyQzcw
RkZBOERGMjAwM0I4MzQyIC8qIFBpeGVsRHVtcFN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ2NUUyQzYwRkZBOERGMjAwM0I4MzQyIC8q
IFBpeGVsRHVtcFN1cHBvcnQuY3BwICovOyB9OwogCQk5M0M3ODgyNjI1MEM2RDNBMDBDMEFBMjQg
LyogUmVmdGVzdEZ1bmN0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5M0M3ODgyNDI1MEM2RDM5MDBDMEFBMjQgLyogUmVmdGVzdEZ1bmN0aW9u
cy5jcHAgKi87IH07CiAJCTkzQzc4ODJFMjUwQzcxNzIwMEMwQUEyNCAvKiBKU0Jhc2ljcy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0M3ODgyOTI1
MEM3MTM0MDBDMEFBMjQgLyogSlNCYXNpY3MuY3BwICovOyB9OwotCQk5ODMwRjMxRjE1QzgxMTgx
MDA1QUIyMDYgLyogRHVtcFJlbmRlclRyZWVDb21tb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTgzMEYzMUUxNUM4MTE4MTAwNUFCMjA2IC8qIER1
bXBSZW5kZXJUcmVlQ29tbW9uLmNwcCAqLzsgfTsKIAkJQTExNThENTgxODkyNzQwQzAwODhDMTdC
IC8qIER1bXBSZW5kZXJUcmVlQnJvd3NlclZpZXcubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTE1OEQ1NjE4OTI3M0VCMDA4OEMxN0IgLyogRHVtcFJl
bmRlclRyZWVCcm93c2VyVmlldy5tbSAqLzsgfTsKIAkJQTExNThENTkxODkyNzQzNjAwODhDMTdC
IC8qIFBpeGVsRHVtcFN1cHBvcnRJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMTE1OEQ1NzE4OTI3M0VCMDA4OEMxN0IgLyogUGl4ZWxEdW1wU3Vw
cG9ydElPUy5tbSAqLzsgfTsKIAkJQTEzNEU1MzExODhGQzI3MDAwOTAxRDA2IC8qIER1bXBSZW5k
ZXJUcmVlTWFpbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEExMzRFNTJGMTg4RkMyNzAwMDkwMUQwNiAvKiBEdW1wUmVuZGVyVHJlZU1haW4ubW0gKi87
IH07CkBAIC0zMzAsNiArMzMxLDEwIEBACiAJCTUzQ0JCODMxMTM0RTQyRjMwMDFDRTZBNCAvKiBD
eWNsaWNSZWR1bmRhbmN5Q2hlY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q3ljbGljUmVkdW5kYW5jeUNoZWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVE
RThBRTQzMTNBMkMxNTgwMEQ2QTM3RCAvKiBsaWJXZWJDb3JlVGVzdFN1cHBvcnQuZHlsaWIgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSAiY29tcGlsZWQu
bWFjaC1vLmR5bGliIjsgcGF0aCA9IGxpYldlYkNvcmVUZXN0U3VwcG9ydC5keWxpYjsgc291cmNl
VHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJN0NCQkMzMjIxRERGQ0Y5QTAwNzg2QjlE
IC8qIFRlc3RPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRlc3RP
cHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDRkY5QkJEMjUzM0JCMjQw
MDA4MDA5RiAvKiBUZXN0RmVhdHVyZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVzdEZlYXR1cmVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDRkY5QkJFMjUzM0JCMjQwMDA4MDA5RiAv
KiBUZXN0RmVhdHVyZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGVzdEZlYXR1cmVzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NGRjlCQzAyNTMzQkMxNjAwMDgwMDlGIC8q
IFRlc3RDb21tYW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRlc3RDb21tYW5kLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTdDRkY5QkMxMjUzM0JDMTYwMDA4MDA5RiAvKiBUZXN0Q29tbWFu
ZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXN0Q29tbWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTgwMDQ1QUVCMTQ3NzE4RTcwMDgyOTBBOCAvKiBBY2Nlc3NpYmlsaXR5
Tm90aWZpY2F0aW9uSGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBB
Y2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oOyBwYXRoID0gbWFjL0FjY2Vzc2liaWxp
dHlOb3RpZmljYXRpb25IYW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgw
MDQ1QUVDMTQ3NzE4RTcwMDgyOTBBOCAvKiBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxl
ci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IEFjY2Vzc2liaWxp
dHlOb3RpZmljYXRpb25IYW5kbGVyLm1tOyBwYXRoID0gbWFjL0FjY2Vzc2liaWxpdHlOb3RpZmlj
YXRpb25IYW5kbGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDY1RTJDNjBG
RkE4REYyMDAzQjgzNDIgLyogUGl4ZWxEdW1wU3VwcG9ydC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUGl4ZWxEdW1wU3VwcG9ydC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0zMzksNyArMzQ0LDYgQEAKIAkJOTNDNzg4MjUyNTBDNkQzOTAwQzBB
QTI0IC8qIFJlZnRlc3RGdW5jdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVmdGVzdEZ1bmN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0M3
ODgyOTI1MEM3MTM0MDBDMEFBMjQgLyogSlNCYXNpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNCYXNpY3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0M3ODgyQjI1MEM3
MTM0MDBDMEFBMjQgLyogSlNCYXNpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNCYXNpY3MuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTgzMEYzMUUxNUM4MTE4MTAwNUFCMjA2IC8qIER1
bXBSZW5kZXJUcmVlQ29tbW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IER1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTExMDNCNUIxODkyNDk4RjAwNzM4Qzg3IC8qIExheW91dFRlc3RIZWxwZXIueGNjb25maWcg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lnhj
Y29uZmlnOyBuYW1lID0gTGF5b3V0VGVzdEhlbHBlci54Y2NvbmZpZzsgcGF0aCA9IG1hYy9Db25m
aWd1cmF0aW9ucy9MYXlvdXRUZXN0SGVscGVyLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBMTE1OEQ1NTE4OTI3M0VCMDA4OEMxN0IgLyogRHVtcFJlbmRlclRyZWVCcm93
c2VyVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBEdW1wUmVuZGVyVHJlZUJyb3dzZXJWaWV3Lmg7IHBh
dGggPSBpb3MvRHVtcFJlbmRlclRyZWVCcm93c2VyVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBMTE1OEQ1NjE4OTI3M0VCMDA4OEMxN0IgLyogRHVtcFJlbmRlclRyZWVCcm93
c2VyVmlldy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IER1bXBSZW5kZXJUcmVlQnJvd3NlclZp
ZXcubW07IHBhdGggPSBpb3MvRHVtcFJlbmRlclRyZWVCcm93c2VyVmlldy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ5OSw3ICs1MDMsNiBAQAogCQkJCUExMzRFNTM0MTg5MDVF
NkMwMDkwMUQwNiAvKiBjb25maWcuaCAqLywKIAkJCQkxQTJGQjg0QzE3OEM4MDkyMDA1OUZEOTYg
LyogRGVmYXVsdFBvbGljeURlbGVnYXRlLmggKi8sCiAJCQkJMUEyRkI4NEQxNzhDODA5MzAwNTlG
RDk2IC8qIERlZmF1bHRQb2xpY3lEZWxlZ2F0ZS5tbSAqLywKLQkJCQk5ODMwRjMxRTE1QzgxMTgx
MDA1QUIyMDYgLyogRHVtcFJlbmRlclRyZWVDb21tb24uY3BwICovLAogCQkJCTMyQTcwQUFCMDM3
MDVFMUYwMEM5MTc4MyAvKiBEdW1wUmVuZGVyVHJlZVByZWZpeC5oICovLAogCQkJCTE0MjJBMjc1
MEFGNkY0QkQwMEUxQTg4MyAvKiBEZWxlZ2F0ZXMgKi8sCiAJCQkJMTQyMkEyNjkwQUY2RjQ1MjAw
RTFBODgzIC8qIENvbnRyb2xsZXJzICovLApAQCAtNzMwLDYgKzczMywxMCBAQAogCQkJCTMxNDhB
MDU2MUU2RjkwRjQwMEQzQjMxNiAvKiBJT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5oICovLAog
CQkJCTkzQzc4ODI0MjUwQzZEMzkwMEMwQUEyNCAvKiBSZWZ0ZXN0RnVuY3Rpb25zLmNwcCAqLywK
IAkJCQk5M0M3ODgyNTI1MEM2RDM5MDBDMEFBMjQgLyogUmVmdGVzdEZ1bmN0aW9ucy5oICovLAor
CQkJCTdDRkY5QkMxMjUzM0JDMTYwMDA4MDA5RiAvKiBUZXN0Q29tbWFuZC5jcHAgKi8sCisJCQkJ
N0NGRjlCQzAyNTMzQkMxNjAwMDgwMDlGIC8qIFRlc3RDb21tYW5kLmggKi8sCisJCQkJN0NGRjlC
QkUyNTMzQkIyNDAwMDgwMDlGIC8qIFRlc3RGZWF0dXJlcy5jcHAgKi8sCisJCQkJN0NGRjlCQkQy
NTMzQkIyNDAwMDgwMDlGIC8qIFRlc3RGZWF0dXJlcy5oICovLAogCQkJKTsKIAkJCW5hbWUgPSBU
ZXN0UnVubmVyU2hhcmVkOwogCQkJcGF0aCA9IC4uL1Rlc3RSdW5uZXJTaGFyZWQ7CkBAIC0xMjE2
LDcgKzEyMjMsNiBAQAogCQkJCTFBMkZCODRGMTc4QzgwOTMwMDU5RkQ5NiAvKiBEZWZhdWx0UG9s
aWN5RGVsZWdhdGUubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQ0ExOEM0NzBDOUI1Qjk0MDAxMTQz
NjkgLyogRHVtcFJlbmRlclRyZWUubW0gaW4gU291cmNlcyAqLywKIAkJCQlBMTE1OEQ1ODE4OTI3
NDBDMDA4OEMxN0IgLyogRHVtcFJlbmRlclRyZWVCcm93c2VyVmlldy5tbSBpbiBTb3VyY2VzICov
LAotCQkJCTk4MzBGMzFGMTVDODExODEwMDVBQjIwNiAvKiBEdW1wUmVuZGVyVHJlZUNvbW1vbi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0ExOEI3QjBDOUIwOEYxMDAxMTQzNjkgLyogRHVtcFJl
bmRlclRyZWVEcmFnZ2luZ0luZm8ubW0gaW4gU291cmNlcyAqLywKIAkJCQlBOEQ3OUNFQjBGQzI4
QjJDMDA0QUM4RkUgLyogRHVtcFJlbmRlclRyZWVGaWxlRHJhZ2dpbmdTb3VyY2UubSBpbiBTb3Vy
Y2VzICovLAogCQkJCUE4QjkxQURBMENGM0IzMkYwMDhGOTFGRiAvKiBEdW1wUmVuZGVyVHJlZVBh
c3RlYm9hcmQubW0gaW4gU291cmNlcyAqLywKQEAgLTEyNDksNiArMTI1NSw4IEBACiAJCQkJRjQw
MTBCN0IyNERBMjAxRjAwQTg3NkUyIC8qIFBvc2VBc0NsYXNzLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOTNDNzg4MjYyNTBDNkQzQTAwQzBBQTI0IC8qIFJlZnRlc3RGdW5jdGlvbnMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkNBMThCNjgwQzlCMDhDMjAwMTE0MzY5IC8qIFJlc291cmNlTG9hZERl
bGVnYXRlLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJN0NGRjlCQzIyNTMzQkMxNjAwMDgwMDlGIC8q
IFRlc3RDb21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdDRkY5QkJGMjUzM0JCMjQwMDA4
MDA5RiAvKiBUZXN0RmVhdHVyZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTMwQTIxRjgyMDUx
RDhDNDAwMDhGRjQyIC8qIFRlc3RPcHRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMDEz
MURBMEM5NzcyMDEwMDg3MzE3RCAvKiBUZXN0UnVubmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUJDQTE4QjI0MEM5QjAxNEIwMDExNDM2OSAvKiBUZXN0UnVubmVyTWFjLm1tIGluIFNvdXJjZXMg
Ki8sCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCShy
ZXZpc2lvbiAyNjgzNTUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRy
ZWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDggQEAKICNpbXBvcnQgIlBvbGljeURl
bGVnYXRlLmgiCiAjaW1wb3J0ICJQb3NlQXNDbGFzcy5oIgogI2ltcG9ydCAiUmVzb3VyY2VMb2Fk
RGVsZWdhdGUuaCIKKyNpbXBvcnQgIlRlc3RDb21tYW5kLmgiCisjaW1wb3J0ICJUZXN0RmVhdHVy
ZXMuaCIKICNpbXBvcnQgIlRlc3RPcHRpb25zLmgiCiAjaW1wb3J0ICJUZXN0UnVubmVyLmgiCiAj
aW1wb3J0ICJVSURlbGVnYXRlLmgiCkBAIC0xODksNyArMTkxLDcgQEAgdm9sYXRpbGUgYm9vbCBk
b25lOwogTmF2aWdhdGlvbkNvbnRyb2xsZXIqIGdOYXZpZ2F0aW9uQ29udHJvbGxlciA9IG51bGxw
dHI7CiBSZWZQdHI8VGVzdFJ1bm5lcj4gZ1Rlc3RSdW5uZXI7CiAKLU9wdGlvbmFsPFRlc3RPcHRp
b25zPiBtYWluRnJhbWVUZXN0T3B0aW9uczsKK09wdGlvbmFsPFdUUjo6VGVzdE9wdGlvbnM+IG1h
aW5GcmFtZVRlc3RPcHRpb25zOwogV2ViRnJhbWUgKm1haW5GcmFtZSA9IG5pbDsKIC8vIFRoaXMg
aXMgdGhlIHRvcG1vc3QgZnJhbWUgdGhhdCBpcyBsb2FkaW5nLCBkdXJpbmcgYSBnaXZlbiBsb2Fk
LCBvciBuaWwgd2hlbiBubyBsb2FkIGlzIAogLy8gaW4gcHJvZ3Jlc3MuICBVc3VhbGx5IHRoaXMg
aXMgdGhlIHNhbWUgYXMgdGhlIG1haW4gZnJhbWUsIGJ1dCBub3QgYWx3YXlzLiAgSW4gdGhlIGNh
c2UKQEAgLTk2Niw3ICs5NjgsNyBAQCBzdGF0aWMgdm9pZCByZXNldFdlYlByZWZlcmVuY2VzVG9D
b25zaXN0CiAgICAgW1dlYlByZWZlcmVuY2VzIF9zZXRDdXJyZW50TmV0d29ya0xvYWRlclNlc3Np
b25Db29raWVBY2NlcHRQb2xpY3k6TlNIVFRQQ29va2llQWNjZXB0UG9saWN5T25seUZyb21NYWlu
RG9jdW1lbnREb21haW5dOwogfQogCi1zdGF0aWMgdm9pZCBzZXRXZWJQcmVmZXJlbmNlc0ZvclRl
c3RPcHRpb25zKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKQorc3RhdGljIHZvaWQgc2V0V2Vi
UHJlZmVyZW5jZXNGb3JUZXN0T3B0aW9ucyhjb25zdCBXVFI6OlRlc3RPcHRpb25zJiBvcHRpb25z
KQogewogICAgIFdlYlByZWZlcmVuY2VzICpwcmVmZXJlbmNlcyA9IFtXZWJQcmVmZXJlbmNlcyBz
dGFuZGFyZFByZWZlcmVuY2VzXTsKIApAQCAtMTgxNiw3ICsxODE4LDcgQEAgc3RhdGljIGJvb2wg
c2hvdWxkVXNlRXBoZW1lcmFsU2Vzc2lvbihjbwogICAgIHJldHVybiBzdHJzdHIocGF0aE9yVVJM
LCAidzNjL0luZGV4ZWREQi1wcml2YXRlLWJyb3dzaW5nIik7CiB9CiAKLXN0YXRpYyB2b2lkIHNl
dEpTQ09wdGlvbnMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpCitzdGF0aWMgdm9pZCBzZXRK
U0NPcHRpb25zKGNvbnN0IFdUUjo6VGVzdE9wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAgc3RhdGlj
IFdURjo6U3RyaW5nQnVpbGRlciBzYXZlZE9wdGlvbnM7CiAKQEAgLTE4MzIsNyArMTgzNCw3IEBA
IHN0YXRpYyB2b2lkIHNldEpTQ09wdGlvbnMoY29uc3QgVGVzdE9wdGkKIH0KIAogZW51bSBjbGFz
cyBSZXNldFRpbWUgeyBCZWZvcmVUZXN0LCBBZnRlclRlc3QgfTsKLXN0YXRpYyB2b2lkIHJlc2V0
V2ViVmlld1RvQ29uc2lzdGVudFN0YXRlKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zLCBSZXNl
dFRpbWUgcmVzZXRUaW1lKQorc3RhdGljIHZvaWQgcmVzZXRXZWJWaWV3VG9Db25zaXN0ZW50U3Rh
dGUoY29uc3QgV1RSOjpUZXN0T3B0aW9ucyYgb3B0aW9ucywgUmVzZXRUaW1lIHJlc2V0VGltZSkK
IHsKICAgICBzZXRKU0NPcHRpb25zKG9wdGlvbnMpOwogCkBAIC0xOTY3LDExICsxOTY5LDIwIEBA
IHN0YXRpYyBOU1VSTCAqY29tcHV0ZVRlc3RVUkwoTlNTdHJpbmcgKnAKICAgICByZXR1cm4gW05T
VVJMIGZpbGVVUkxXaXRoUGF0aDphYnNvbHV0ZVBhdGhdOwogfQogCitXVFI6OlRlc3RPcHRpb25z
IHRlc3RPcHRpb25zRm9yVGVzdChjb25zdCBXVFI6OlRlc3RDb21tYW5kJiBjb21tYW5kKQorewor
ICAgIFdUUjo6VGVzdEZlYXR1cmVzIGZlYXR1cmVzOworICAgIFdUUjo6bWVyZ2UoZmVhdHVyZXMs
IFdUUjo6aGFyZGNvZGVkRmVhdHVyZXNCYXNlZE9uUGF0aEZvclRlc3QoY29tbWFuZCkpOworICAg
IFdUUjo6bWVyZ2UoZmVhdHVyZXMsIFdUUjo6ZmVhdHVyZURlZmF1bHRzRnJvbVRlc3RIZWFkZXJG
b3JUZXN0KGNvbW1hbmQsIFdUUjo6VGVzdE9wdGlvbnM6OmtleVR5cGVNYXBwaW5nKCkpKTsKKwor
ICAgIHJldHVybiBXVFI6OlRlc3RPcHRpb25zIHsgV1RGTW92ZShmZWF0dXJlcykgfTsKK30KKwog
c3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcmIGlucHV0TGluZSkKIHsKICAgICBBU1NF
UlQoIWlucHV0TGluZS5lbXB0eSgpKTsKIAotICAgIFRlc3RDb21tYW5kIGNvbW1hbmQgPSBwYXJz
ZUlucHV0TGluZShpbnB1dExpbmUpOworICAgIGF1dG8gY29tbWFuZCA9IFdUUjo6cGFyc2VJbnB1
dExpbmUoaW5wdXRMaW5lKTsKICAgICBjb25zdCBzdHJpbmcmIHBhdGhPclVSTCA9IGNvbW1hbmQu
cGF0aE9yVVJMOwogICAgIGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdCA9IGNvbW1hbmQuc2hvdWxk
RHVtcFBpeGVscyB8fCBkdW1wUGl4ZWxzRm9yQWxsVGVzdHM7CiAKQEAgLTE5OTMsNyArMjAwNCw3
IEBAIHN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiBpbnB1dEwKICAgICBhdXRvIG1l
c3NhZ2UgPSBtYWtlU3RyaW5nKCJDUkFTSElORyBURVNUOiAiLCB0ZXN0UGF0aC5VVEY4U3RyaW5n
KTsKICAgICBXVEY6OnNldENyYXNoTG9nTWVzc2FnZShtZXNzYWdlLnV0ZjgoKS5kYXRhKCkpOwog
Ci0gICAgVGVzdE9wdGlvbnMgb3B0aW9ucyB7IFt1cmwgaXNGaWxlVVJMXSA/IFt1cmwgZmlsZVN5
c3RlbVJlcHJlc2VudGF0aW9uXSA6IHBhdGhPclVSTCwgY29tbWFuZC5hYnNvbHV0ZVBhdGggfTsK
KyAgICBhdXRvIG9wdGlvbnMgPSB0ZXN0T3B0aW9uc0ZvclRlc3QoY29tbWFuZCk7CiAKICAgICBp
ZiAoIW1haW5GcmFtZVRlc3RPcHRpb25zIHx8ICFvcHRpb25zLndlYlZpZXdJc0NvbXBhdGlibGVX
aXRoT3B0aW9ucyhtYWluRnJhbWVUZXN0T3B0aW9ucy52YWx1ZSgpKSkgewogICAgICAgICBpZiAo
bWFpbkZyYW1lKQpAQCAtMjAwNiw3ICsyMDE3LDcgQEAgc3RhdGljIHZvaWQgcnVuVGVzdChjb25z
dCBzdHJpbmcmIGlucHV0TAogICAgIGNvbnN0IGNoYXIqIHRlc3RVUkwoW1t1cmwgYWJzb2x1dGVT
dHJpbmddIFVURjhTdHJpbmddKTsKICAgICBnVGVzdFJ1bm5lciA9IFRlc3RSdW5uZXI6OmNyZWF0
ZSh0ZXN0VVJMLCBjb21tYW5kLmV4cGVjdGVkUGl4ZWxIYXNoKTsKICAgICBnVGVzdFJ1bm5lci0+
c2V0QWxsb3dlZEhvc3RzKGFsbG93ZWRIb3N0cyk7Ci0gICAgZ1Rlc3RSdW5uZXItPnNldEN1c3Rv
bVRpbWVvdXQoY29tbWFuZC50aW1lb3V0KTsKKyAgICBnVGVzdFJ1bm5lci0+c2V0Q3VzdG9tVGlt
ZW91dChjb21tYW5kLnRpbWVvdXQubWlsbGlzZWNvbmRzKCkpOwogICAgIGdUZXN0UnVubmVyLT5z
ZXREdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIoY29tbWFuZC5kdW1wSlNDb25zb2xlTG9nSW5TdGRF
cnIgfHwgb3B0aW9ucy5kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIpOwogCiAgICAgcmVzZXRXZWJW
aWV3VG9Db25zaXN0ZW50U3RhdGUob3B0aW9ucywgUmVzZXRUaW1lOjpCZWZvcmVUZXN0KTsKSW5k
ZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9VSURlbGVnYXRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1VJRGVsZWdhdGUuaAkocmV2aXNpb24gMjY4MzU1KQor
KysgVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1VJRGVsZWdhdGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNDcsNiArNDcsNiBAQCBAaW50ZXJmYWNlIFVJRGVsZWdhdGUgOiBOU09iamVjdCA8V2ViVUlE
CiAtICh2b2lkKXJlc2V0V2luZG93T3JpZ2luOwogLSAodm9pZClkaWRTZXRNb2NrR2VvbG9jYXRp
b25QZXJtaXNzaW9uOwogLSAoaW50KW51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RzOwotLSAodm9pZClyZXNldFRvQ29uc2lzdGVudFN0YXRlQmVmb3JlVGVzdGluZzoo
Y29uc3QgVGVzdE9wdGlvbnMmKW9wdGlvbnM7CistICh2b2lkKXJlc2V0VG9Db25zaXN0ZW50U3Rh
dGVCZWZvcmVUZXN0aW5nOihjb25zdCBXVFI6OlRlc3RPcHRpb25zJilvcHRpb25zOwogCiBAZW5k
CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVUlEZWxlZ2F0ZS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVUlEZWxlZ2F0ZS5tbQkocmV2aXNpb24gMjY4
MzU1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1VJRGVsZWdhdGUubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTU4LDcgKzU4LDcgQEAgLSAodm9pZClyZXNldFdpbmRvd09yaWdpbgogICAgIHdp
bmRvd09yaWdpbiA9IE5TWmVyb1BvaW50OwogfQogCi0tICh2b2lkKXJlc2V0VG9Db25zaXN0ZW50
U3RhdGVCZWZvcmVUZXN0aW5nOihjb25zdCBUZXN0T3B0aW9ucyYpb3B0aW9ucworLSAodm9pZCly
ZXNldFRvQ29uc2lzdGVudFN0YXRlQmVmb3JlVGVzdGluZzooY29uc3QgV1RSOjpUZXN0T3B0aW9u
cyYpb3B0aW9ucwogewogICAgIG1fZW5hYmxlRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTG9hZCA9IG9w
dGlvbnMuZW5hYmxlRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTG9hZDsKIH0KSW5kZXg6IFRvb2xzL1Rl
c3RSdW5uZXJTaGFyZWQvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFJ1
bm5lclNoYXJlZC9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjY4MzU1KQorKysgVG9vbHMvVGVz
dFJ1bm5lclNoYXJlZC9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNyw2ICs3LDgg
QEAgZmlsZShNQUtFX0RJUkVDVE9SWSAke1Rlc3RSdW5uZXJTaGFyZWRfRAogCiBzZXQoVGVzdFJ1
bm5lclNoYXJlZF9TT1VSQ0VTCiAgICAgUmVmdGVzdEZ1bmN0aW9ucy5jcHAKKyAgICBUZXN0Q29t
bWFuZC5jcHAKKyAgICBUZXN0RmVhdHVyZXMuY3BwCiAKICAgICBCaW5kaW5ncy9KU0Jhc2ljcy5j
cHAKICAgICBCaW5kaW5ncy9KU1dyYXBwZXIuY3BwCkluZGV4OiBUb29scy9UZXN0UnVubmVyU2hh
cmVkL1Rlc3RDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0UnVubmVyU2hhcmVk
L1Rlc3RDb21tYW5kLmNwcAkobm9uZXhpc3RlbnQpCisrKyBUb29scy9UZXN0UnVubmVyU2hhcmVk
L1Rlc3RDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0Q29tbWFuZC5oIgorCitu
YW1lc3BhY2UgV1RSIHsKKworY2xhc3MgQ29tbWFuZFRva2VuaXplciB7CitwdWJsaWM6CisgICAg
ZXhwbGljaXQgQ29tbWFuZFRva2VuaXplcihjb25zdCBzdGQ6OnN0cmluZyYgaW5wdXQpCisgICAg
ICAgIDogbV9pbnB1dChpbnB1dCkKKyAgICAgICAgLCBtX3Bvc05leHRTZXBhcmF0b3IoMCkKKyAg
ICB7CisgICAgICAgIHB1bXAoKTsKKyAgICB9CisKKyAgICBib29sIGhhc05leHQoKSBjb25zdDsK
KyAgICBzdGQ6OnN0cmluZyBuZXh0KCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBwdW1wKCk7Cisg
ICAgc3RhdGljIGNvbnN0IGNoYXIga1NlcGFyYXRvciA9ICdcJyc7CisgICAgY29uc3Qgc3RkOjpz
dHJpbmcmIG1faW5wdXQ7CisgICAgc3RkOjpzdHJpbmcgbV9uZXh0OworICAgIHNpemVfdCBtX3Bv
c05leHRTZXBhcmF0b3I7Cit9OworCit2b2lkIENvbW1hbmRUb2tlbml6ZXI6OnB1bXAoKQorewor
ICAgIGlmIChtX3Bvc05leHRTZXBhcmF0b3IgPT0gc3RkOjpzdHJpbmc6Om5wb3MgfHwgbV9wb3NO
ZXh0U2VwYXJhdG9yID09IG1faW5wdXQuc2l6ZSgpKSB7CisgICAgICAgIG1fbmV4dCA9IHN0ZDo6
c3RyaW5nKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc2l6ZV90IHN0YXJ0ID0gbV9w
b3NOZXh0U2VwYXJhdG9yID8gbV9wb3NOZXh0U2VwYXJhdG9yICsgMSA6IDA7CisgICAgbV9wb3NO
ZXh0U2VwYXJhdG9yID0gbV9pbnB1dC5maW5kKGtTZXBhcmF0b3IsIHN0YXJ0KTsKKyAgICBzaXpl
X3Qgc2l6ZSA9IG1fcG9zTmV4dFNlcGFyYXRvciA9PSBzdGQ6OnN0cmluZzo6bnBvcyA/IHN0ZDo6
c3RyaW5nOjpucG9zIDogbV9wb3NOZXh0U2VwYXJhdG9yIC0gc3RhcnQ7CisgICAgbV9uZXh0ID0g
c3RkOjpzdHJpbmcobV9pbnB1dCwgc3RhcnQsIHNpemUpOworfQorCitzdGQ6OnN0cmluZyBDb21t
YW5kVG9rZW5pemVyOjpuZXh0KCkKK3sKKyAgICBBU1NFUlQoaGFzTmV4dCgpKTsKKworICAgIHN0
ZDo6c3RyaW5nIG9sZE5leHQgPSBtX25leHQ7CisgICAgcHVtcCgpOworICAgIHJldHVybiBvbGRO
ZXh0OworfQorCitib29sIENvbW1hbmRUb2tlbml6ZXI6Omhhc05leHQoKSBjb25zdAoreworICAg
IHJldHVybiAhbV9uZXh0LmVtcHR5KCk7Cit9CisKK05PX1JFVFVSTiBzdGF0aWMgdm9pZCBkaWUo
Y29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0TGluZSkKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlVu
ZXhwZWN0ZWQgaW5wdXQgbGluZTogJXNcbiIsIGlucHV0TGluZS5jX3N0cigpKTsKKyAgICBleGl0
KDEpOworfQorCitUZXN0Q29tbWFuZCBwYXJzZUlucHV0TGluZShjb25zdCBzdGQ6OnN0cmluZyYg
aW5wdXRMaW5lKQoreworICAgIFRlc3RDb21tYW5kIHJlc3VsdDsKKyAgICBDb21tYW5kVG9rZW5p
emVyIHRva2VuaXplcihpbnB1dExpbmUpOworICAgIGlmICghdG9rZW5pemVyLmhhc05leHQoKSkK
KyAgICAgICAgZGllKGlucHV0TGluZSk7CisKKyAgICBzdGQ6OnN0cmluZyBhcmcgPSB0b2tlbml6
ZXIubmV4dCgpOworICAgIHJlc3VsdC5wYXRoT3JVUkwgPSBhcmc7CisgICAgd2hpbGUgKHRva2Vu
aXplci5oYXNOZXh0KCkpIHsKKyAgICAgICAgYXJnID0gdG9rZW5pemVyLm5leHQoKTsKKyAgICAg
ICAgaWYgKGFyZyA9PSAiLS10aW1lb3V0IikgeworICAgICAgICAgICAgYXV0byB0aW1lb3V0VG9r
ZW4gPSB0b2tlbml6ZXIubmV4dCgpOworICAgICAgICAgICAgcmVzdWx0LnRpbWVvdXQgPSBTZWNv
bmRzOjpmcm9tTWlsbGlzZWNvbmRzKGF0b2kodGltZW91dFRva2VuLmNfc3RyKCkpKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChhcmcgPT0gIi1wIiB8fCBhcmcgPT0gIi0tcGl4ZWwtdGVzdCIpIHsKKyAg
ICAgICAgICAgIHJlc3VsdC5zaG91bGREdW1wUGl4ZWxzID0gdHJ1ZTsKKyAgICAgICAgICAgIGlm
ICh0b2tlbml6ZXIuaGFzTmV4dCgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC5leHBlY3RlZFBp
eGVsSGFzaCA9IHRva2VuaXplci5uZXh0KCk7CisgICAgICAgIH0gZWxzZSBpZiAoYXJnID09IHN0
ZDo6c3RyaW5nKCItLWR1bXAtanNjb25zb2xlbG9nLWluLXN0ZGVyciIpKQorICAgICAgICAgICAg
cmVzdWx0LmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciA9IHRydWU7CisgICAgICAgIGVsc2UgaWYg
KGFyZyA9PSBzdGQ6OnN0cmluZygiLS1hYnNvbHV0ZVBhdGgiKSkKKyAgICAgICAgICAgIHJlc3Vs
dC5hYnNvbHV0ZVBhdGggPSB0b2tlbml6ZXIubmV4dCgpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBkaWUoaW5wdXRMaW5lKTsKKyAgICB9CisgICAgCisgICAgaWYgKHJlc3VsdC5hYnNvbHV0
ZVBhdGguZW1wdHkoKSkKKyAgICAgICAgcmVzdWx0LmFic29sdXRlUGF0aCA9IHRlc3RQYXRoKHJl
c3VsdC5wYXRoT3JVUkwpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RkOjpmaWxlc3lz
dGVtOjpwYXRoIHRlc3RQYXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCit7CisgICAg
aWYgKHBhdGhPclVSTC5maW5kKCJodHRwOi8vIikgPT0gMCB8fCBwYXRoT3JVUkwuZmluZCgiaHR0
cHM6Ly8iKSA9PSAwKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgaWYgKHBhdGhPclVSTC5m
aW5kKCJmaWxlOi8vIikgPT0gMCkKKyAgICAgICAgcmV0dXJuIHBhdGhPclVSTC5zdWJzdHIoc3Ry
bGVuKCJmaWxlOi8iKSk7CisKKyAgICByZXR1cm4gc3RkOjpmaWxlc3lzdGVtOjphYnNvbHV0ZShw
YXRoT3JVUkwpOworfQorCitzdGQ6OnN0cmluZyB0ZXN0VVJMU3RyaW5nKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBwYXRoT3JVUkwpCit7CisgICAgaWYgKHBhdGhPclVSTC5maW5kKCJodHRwOi8vIikgPT0g
MCB8fCBwYXRoT3JVUkwuZmluZCgiaHR0cHM6Ly8iKSA9PSAwIHx8IHBhdGhPclVSTC5maW5kKCJm
aWxlOi8vIikgPT0gMCkKKyAgICAgICAgcmV0dXJuIHBhdGhPclVSTDsKKworICAgIHJldHVybiAi
ZmlsZTovLyIgKyBzdGQ6OmZpbGVzeXN0ZW06OmFic29sdXRlKHBhdGhPclVSTCkuZ2VuZXJpY19z
dHJpbmcoKTsKK30KKworfQpJbmRleDogVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9UZXN0Q29tbWFu
ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVGVzdENvbW1hbmQuaAko
bm9uZXhpc3RlbnQpCisrKyBUb29scy9UZXN0UnVubmVyU2hhcmVkL1Rlc3RDb21tYW5kLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHd0Zi9TdGRGaWxlc3lzdGVtLmg+CisjaW5j
bHVkZSA8d3RmL1NlY29uZHMuaD4KKworbmFtZXNwYWNlIFdUUiB7CisKK3N0cnVjdCBUZXN0Q29t
bWFuZCB7CisgICAgc3RkOjpzdHJpbmcgcGF0aE9yVVJMOworICAgIHN0ZDo6ZmlsZXN5c3RlbTo6
cGF0aCBhYnNvbHV0ZVBhdGg7CisgICAgc3RkOjpzdHJpbmcgZXhwZWN0ZWRQaXhlbEhhc2g7Cisg
ICAgV1RGOjpTZWNvbmRzIHRpbWVvdXQ7CisgICAgYm9vbCBzaG91bGREdW1wUGl4ZWxzIHsgZmFs
c2UgfTsKKyAgICBib29sIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciB7IGZhbHNlIH07Cit9Owor
CitUZXN0Q29tbWFuZCBwYXJzZUlucHV0TGluZShjb25zdCBzdGQ6OnN0cmluZyYgaW5wdXRMaW5l
KTsKKworc3RkOjpmaWxlc3lzdGVtOjpwYXRoIHRlc3RQYXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBw
YXRoT3JVUkwpOworc3RkOjpzdHJpbmcgdGVzdFVSTFN0cmluZyhjb25zdCBzdGQ6OnN0cmluZyYg
cGF0aE9yVVJMKTsKKworfQpJbmRleDogVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9UZXN0RmVhdHVy
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVGVzdEZlYXR1cmVz
LmNwcAkobm9uZXhpc3RlbnQpCisrKyBUb29scy9UZXN0UnVubmVyU2hhcmVkL1Rlc3RGZWF0dXJl
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZlYXR1cmVzLmgiCisKKyNpbmNsdWRlICJU
ZXN0Q29tbWFuZC5oIgorI2luY2x1ZGUgPGZzdHJlYW0+CisjaW5jbHVkZSA8c3RyaW5nPgorI2lu
Y2x1ZGUgPHd0Zi9TdGRGaWxlc3lzdGVtLmg+CisKK25hbWVzcGFjZSBXVFIgeworCit2b2lkIG1l
cmdlKFRlc3RGZWF0dXJlcyYgYmFzZSwgVGVzdEZlYXR1cmVzIGFkZGl0aW9uYWwpCit7CisgICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzdGQ6OnVub3JkZXJlZF9tYXA6Om1lcmdlIHdoZW4g
aXQgaXMgYXZhaWxhYmxlIGZvciBhbGwgcG9ydHMuCisKKyAgICBmb3IgKGF1dG8gW2tleSwgdmFs
dWVdIDogYWRkaXRpb25hbC5leHBlcmltZW50YWxGZWF0dXJlcykKKyAgICAgICAgYmFzZS5leHBl
cmltZW50YWxGZWF0dXJlcy5pbnNlcnRfb3JfYXNzaWduKGtleSwgdmFsdWUpOworICAgIGZvciAo
YXV0byBba2V5LCB2YWx1ZV0gOiBhZGRpdGlvbmFsLmludGVybmFsRGVidWdGZWF0dXJlcykKKyAg
ICAgICAgYmFzZS5pbnRlcm5hbERlYnVnRmVhdHVyZXMuaW5zZXJ0X29yX2Fzc2lnbihrZXksIHZh
bHVlKTsKKyAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogYWRkaXRpb25hbC5ib29sRmVhdHVy
ZXMpCisgICAgICAgIGJhc2UuYm9vbEZlYXR1cmVzLmluc2VydF9vcl9hc3NpZ24oa2V5LCB2YWx1
ZSk7CisgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGFkZGl0aW9uYWwuZG91YmxlRmVhdHVy
ZXMpCisgICAgICAgIGJhc2UuZG91YmxlRmVhdHVyZXMuaW5zZXJ0X29yX2Fzc2lnbihrZXksIHZh
bHVlKTsKKyAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogYWRkaXRpb25hbC5zdHJpbmdGZWF0
dXJlcykKKyAgICAgICAgYmFzZS5zdHJpbmdGZWF0dXJlcy5pbnNlcnRfb3JfYXNzaWduKGtleSwg
dmFsdWUpOworICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBhZGRpdGlvbmFsLnN0cmluZ1Zl
Y3RvckZlYXR1cmVzKQorICAgICAgICBiYXNlLnN0cmluZ1ZlY3RvckZlYXR1cmVzLmluc2VydF9v
cl9hc3NpZ24oa2V5LCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBib29sIHBhdGhDb250YWlucyhjb25z
dCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMLCBjb25zdCBjaGFyKiBzdWJzdHJpbmcpCit7CisgICAg
cmV0dXJuIHBhdGhPclVSTC5maW5kKHN1YnN0cmluZykgIT0gc3RkOjpzdHJpbmc6Om5wb3M7Cit9
CisKK3N0YXRpYyBib29sIHNob3VsZE1ha2VWaWV3cG9ydEZsZXhpYmxlKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBwYXRoT3JVUkwpCit7CisgICAgcmV0dXJuIHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJ2
aWV3cG9ydC8iKSAmJiAhcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgInZpc3VhbC12aWV3cG9ydC8i
KTsKK30KKworc3RhdGljIGJvb2wgc2hvdWxkVXNlRXBoZW1lcmFsU2Vzc2lvbihjb25zdCBzdGQ6
OnN0cmluZyYgcGF0aE9yVVJMKQoreworICAgIHJldHVybiBwYXRoQ29udGFpbnMocGF0aE9yVVJM
LCAidzNjL0luZGV4ZWREQi1wcml2YXRlLWJyb3dzaW5nIikgfHwgcGF0aENvbnRhaW5zKHBhdGhP
clVSTCwgInczY1xcSW5kZXhlZERCLXByaXZhdGUtYnJvd3NpbmciKTsKK30KKworc3RhdGljIHN0
ZDo6b3B0aW9uYWw8c3RkOjpwYWlyPGRvdWJsZSwgZG91YmxlPj4gb3ZlcnJpZGVWaWV3V2lkdGhB
bmRIZWlnaHRGb3JUZXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCit7CisgICAgaWYg
KHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJzdmcvVzNDLVNWRy0xLjEiKSB8fCBwYXRoQ29udGFp
bnMocGF0aE9yVVJMLCAic3ZnXFxXM0MtU1ZHLTEuMSIpKQorICAgICAgICByZXR1cm4geyB7IDQ4
MCwgMzYwIH0gfTsKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCitzdGF0aWMgc3RkOjpv
cHRpb25hbDxkb3VibGU+IG92ZXJyaWRlRGV2aWNlU2NhbGVGYWN0b3JGb3JUZXN0KGNvbnN0IHN0
ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCit7CisgICAgaWYgKHBhdGhDb250YWlucyhwYXRoT3JVUkws
ICIvaGlkcGktM3gtIikpCisgICAgICAgIHJldHVybiAzOworICAgIGlmIChwYXRoQ29udGFpbnMo
cGF0aE9yVVJMLCAiL2hpZHBpLSIpKQorICAgICAgICByZXR1cm4gMjsKKyAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworfQorCitzdGF0aWMgYm9vbCBzaG91bGREdW1wSlNDb25zb2xlTG9nSW5TdGRF
cnIoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKK3sKKyAgICByZXR1cm4gcGF0aENvbnRh
aW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo4ODAwL2JlYWNvbiIpIHx8IHBhdGhDb250YWlucyhw
YXRoT3JVUkwsICJsb2NhbGhvc3Q6OTQ0My9iZWFjb24iKQorICAgICAgICB8fCBwYXRoQ29udGFp
bnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvY29ycyIpIHx8IHBhdGhDb250YWlucyhwYXRo
T3JVUkwsICJsb2NhbGhvc3Q6OTQ0My9jb3JzIikKKyAgICAgICAgfHwgcGF0aENvbnRhaW5zKHBh
dGhPclVSTCwgImxvY2FsaG9zdDo4ODAwL2ZldGNoIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVS
TCwgImxvY2FsaG9zdDo5NDQzL2ZldGNoIikKKyAgICAgICAgfHwgcGF0aENvbnRhaW5zKHBhdGhP
clVSTCwgImxvY2FsaG9zdDo4ODAwL3NlcnZpY2Utd29ya2VycyIpIHx8IHBhdGhDb250YWlucyhw
YXRoT3JVUkwsICJsb2NhbGhvc3Q6OTQ0My9zZXJ2aWNlLXdvcmtlcnMiKQorICAgICAgICB8fCBw
YXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvc3RyZWFtcy93cml0YWJsZS1z
dHJlYW1zIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3N0cmVh
bXMvd3JpdGFibGUtc3RyZWFtcyIpCisgICAgICAgIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkws
ICJsb2NhbGhvc3Q6ODgwMC9zdHJlYW1zL3BpcGluZyIpIHx8IHBhdGhDb250YWlucyhwYXRoT3JV
UkwsICJsb2NhbGhvc3Q6OTQ0My9zdHJlYW1zL3BpcGluZyIpCisgICAgICAgIHx8IHBhdGhDb250
YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgwMC94aHIiKSB8fCBwYXRoQ29udGFpbnMocGF0
aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMveGhyIikKKyAgICAgICAgfHwgcGF0aENvbnRhaW5zKHBh
dGhPclVSTCwgImxvY2FsaG9zdDo4ODAwL3dlYnJ0YyIpIHx8IHBhdGhDb250YWlucyhwYXRoT3JV
UkwsICJsb2NhbGhvc3Q6OTQ0My93ZWJydGMiKQorICAgICAgICB8fCBwYXRoQ29udGFpbnMocGF0
aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvd2Vic29ja2V0cyIpIHx8IHBhdGhDb250YWlucyhwYXRo
T3JVUkwsICJsb2NhbGhvc3Q6OTQ0My93ZWJzb2NrZXRzIik7Cit9CisKK1Rlc3RGZWF0dXJlcyBo
YXJkY29kZWRGZWF0dXJlc0Jhc2VkT25QYXRoRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYgY29t
bWFuZCkKK3sKKyAgICBUZXN0RmVhdHVyZXMgZmVhdHVyZXM7CisKKyAgICBpZiAoc2hvdWxkTWFr
ZVZpZXdwb3J0RmxleGlibGUoY29tbWFuZC5wYXRoT3JVUkwpKQorICAgICAgICBmZWF0dXJlcy5i
b29sRmVhdHVyZXMuaW5zZXJ0KHsgInVzZUZsZXhpYmxlVmlld3BvcnQiLCB0cnVlIH0pOworICAg
IGlmIChzaG91bGRVc2VFcGhlbWVyYWxTZXNzaW9uKGNvbW1hbmQucGF0aE9yVVJMKSkKKyAgICAg
ICAgZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJ1c2VFcGhlbWVyYWxTZXNzaW9uIiwg
dHJ1ZSB9KTsKKyAgICBpZiAoc2hvdWxkRHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKGNvbW1hbmQu
cGF0aE9yVVJMKSkKKyAgICAgICAgZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJkdW1w
SlNDb25zb2xlTG9nSW5TdGRFcnIiLCB0cnVlIH0pOworICAgIGlmIChhdXRvIGRldmljZVNjYWxl
RmFjdG9yID0gb3ZlcnJpZGVEZXZpY2VTY2FsZUZhY3RvckZvclRlc3QoY29tbWFuZC5wYXRoT3JV
UkwpOyBkZXZpY2VTY2FsZUZhY3RvciAhPSBzdGQ6Om51bGxvcHQpCisgICAgICAgIGZlYXR1cmVz
LmRvdWJsZUZlYXR1cmVzLmluc2VydCh7ICJkZXZpY2VTY2FsZUZhY3RvciIsIGRldmljZVNjYWxl
RmFjdG9yLnZhbHVlKCkgfSk7CisgICAgaWYgKGF1dG8gdmlld1dpZHRoQW5kSGVpZ2h0ID0gb3Zl
cnJpZGVWaWV3V2lkdGhBbmRIZWlnaHRGb3JUZXN0KGNvbW1hbmQucGF0aE9yVVJMKTsgdmlld1dp
ZHRoQW5kSGVpZ2h0ICE9IHN0ZDo6bnVsbG9wdCkgeworICAgICAgICBmZWF0dXJlcy5kb3VibGVG
ZWF0dXJlcy5pbnNlcnQoeyAidmlld1dpZHRoIiwgdmlld1dpZHRoQW5kSGVpZ2h0LT5maXJzdCB9
KTsKKyAgICAgICAgZmVhdHVyZXMuZG91YmxlRmVhdHVyZXMuaW5zZXJ0KHsgInZpZXdIZWlnaHQi
LCB2aWV3V2lkdGhBbmRIZWlnaHQtPnNlY29uZCB9KTsKKyAgICB9CisKKyAgICByZXR1cm4gZmVh
dHVyZXM7Cit9CisKK3N0YXRpYyBib29sIHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZShjb25z
dCBzdGQ6OnN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJ0cnVlIikKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHZhbHVlID09ICJmYWxzZSIpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIExPR19FUlJPUigiRm91bmQgdW5leHBlY3RlZCB2YWx1ZSAnJXMnIGZv
ciBib29sZWFuIG9wdGlvbi4gRXhwZWN0ZWQgJ3RydWUnIG9yICdmYWxzZScuIiwgdmFsdWUuY19z
dHIoKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgZG91YmxlIHBhcnNlRG91Ymxl
VGVzdEhlYWRlclZhbHVlKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4g
c3RkOjpzdG9kKHZhbHVlKTsKK30KKworc3RhdGljIHN0ZDo6c3RyaW5nIHBhcnNlU3RyaW5nVGVz
dEhlYWRlclZhbHVlQXNSZWxhdGl2ZVBhdGgoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlLCBjb25z
dCBzdGQ6OmZpbGVzeXN0ZW06OnBhdGgmIHRlc3RQYXRoKQoreworICAgIGF1dG8gYmFzZVBhdGgg
PSB0ZXN0UGF0aC5wYXJlbnRfcGF0aCgpOworICAgIHJldHVybiBiYXNlUGF0aCAvIHZhbHVlOwor
fQorCitzdGF0aWMgc3RkOjpzdHJpbmcgcGFyc2VTdHJpbmdUZXN0SGVhZGVyVmFsdWVBc1VSTChj
b25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpCit7CisgICAgcmV0dXJuIHRlc3RVUkxTdHJpbmcodmFs
dWUpOworfQorCitzdGF0aWMgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHBhcnNlU3RyaW5nVGVz
dEhlYWRlclZhbHVlQXNTdHJpbmdWZWN0b3IoY29uc3Qgc3RkOjpzdHJpbmcmIHN0cmluZykKK3sK
KyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcmVzdWx0OworCisgICAgc2l6ZV90IGkgPSAw
OworICAgIHdoaWxlIChpIDwgc3RyaW5nLnNpemUoKSkgeworICAgICAgICBhdXRvIGZvdW5kSW5k
ZXggPSBzdHJpbmcuZmluZF9maXJzdF9vZignLCcsIGkpOworCisgICAgICAgIGlmIChmb3VuZElu
ZGV4ICE9IGkpCisgICAgICAgICAgICByZXN1bHQucHVzaF9iYWNrKHN0cmluZy5zdWJzdHIoaSwg
Zm91bmRJbmRleCAtIGkpKTsKKworICAgICAgICBpZiAoZm91bmRJbmRleCA9PSBzdGQ6OnN0cmlu
Zzo6bnBvcykKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGkgPSBmb3VuZEluZGV4ICsg
MTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgVGVzdEZlYXR1cmVz
IHBhcnNlVGVzdEhlYWRlcihzdGQ6OmZpbGVzeXN0ZW06OnBhdGggcGF0aCwgY29uc3Qgc3RkOjp1
bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBUZXN0SGVhZGVyS2V5VHlwZT4mIGtleVR5cGVNYXAp
Cit7CisgICAgYXV0byBrZXlUeXBlID0gWyZrZXlUeXBlTWFwXShhdXRvJiBrZXkpIHsKKyAgICAg
ICAgYXV0byBpdCA9IGtleVR5cGVNYXAuZmluZChrZXkpOworICAgICAgICBpZiAoaXQgPT0ga2V5
VHlwZU1hcC5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBUZXN0SGVhZGVyS2V5VHlwZTo6VW5r
bm93bjsKKyAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgfTsKKworICAgIFRlc3RGZWF0
dXJlcyBmZWF0dXJlczsKKyAgICBpZiAoIXN0ZDo6ZmlsZXN5c3RlbTo6ZXhpc3RzKHBhdGgpKQor
ICAgICAgICByZXR1cm4gZmVhdHVyZXM7CisKKyAgICBzdGQ6Omlmc3RyZWFtIGZpbGUocGF0aCk7
CisgICAgaWYgKCFmaWxlLmdvb2QoKSkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBv
cGVuIGZpbGUgdG8gaW5zcGVjdCB0ZXN0IGhlYWRlcnMgaW4gJXMiLCBwYXRoLmNfc3RyKCkpOwor
ICAgICAgICByZXR1cm4gZmVhdHVyZXM7CisgICAgfQorCisgICAgc3RkOjpzdHJpbmcgb3B0aW9u
czsKKyAgICBnZXRsaW5lKGZpbGUsIG9wdGlvbnMpOworICAgIHN0ZDo6c3RyaW5nIGJlZ2luU3Ry
aW5nKCJ3ZWJraXQtdGVzdC1ydW5uZXIgWyAiKTsKKyAgICBzdGQ6OnN0cmluZyBlbmRTdHJpbmco
IiBdIik7CisgICAgc2l6ZV90IGJlZ2luTG9jYXRpb24gPSBvcHRpb25zLmZpbmQoYmVnaW5TdHJp
bmcpOworICAgIGlmIChiZWdpbkxvY2F0aW9uID09IHN0ZDo6c3RyaW5nOjpucG9zKQorICAgICAg
ICByZXR1cm4gZmVhdHVyZXM7CisgICAgc2l6ZV90IGVuZExvY2F0aW9uID0gb3B0aW9ucy5maW5k
KGVuZFN0cmluZywgYmVnaW5Mb2NhdGlvbik7CisgICAgaWYgKGVuZExvY2F0aW9uID09IHN0ZDo6
c3RyaW5nOjpucG9zKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGZpbmQgZW5kIG9m
IHRlc3QgaGVhZGVyIGluICVzIiwgcGF0aC5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJuIGZlYXR1
cmVzOworICAgIH0KKyAgICBzdGQ6OnN0cmluZyBwYWlyU3RyaW5nID0gb3B0aW9ucy5zdWJzdHIo
YmVnaW5Mb2NhdGlvbiArIGJlZ2luU3RyaW5nLnNpemUoKSwgZW5kTG9jYXRpb24gLSAoYmVnaW5M
b2NhdGlvbiArIGJlZ2luU3RyaW5nLnNpemUoKSkpOworICAgIHNpemVfdCBwYWlyU3RhcnQgPSAw
OworICAgIHdoaWxlIChwYWlyU3RhcnQgPCBwYWlyU3RyaW5nLnNpemUoKSkgeworICAgICAgICBz
aXplX3QgcGFpckVuZCA9IHBhaXJTdHJpbmcuZmluZCgiICIsIHBhaXJTdGFydCk7CisgICAgICAg
IGlmIChwYWlyRW5kID09IHN0ZDo6c3RyaW5nOjpucG9zKQorICAgICAgICAgICAgcGFpckVuZCA9
IHBhaXJTdHJpbmcuc2l6ZSgpOworICAgICAgICBzaXplX3QgZXF1YWxzTG9jYXRpb24gPSBwYWly
U3RyaW5nLmZpbmQoIj0iLCBwYWlyU3RhcnQpOworICAgICAgICBpZiAoZXF1YWxzTG9jYXRpb24g
PT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiTWFsZm9ybWVk
IG9wdGlvbiBpbiB0ZXN0IGhlYWRlciAoY291bGQgbm90IGZpbmQgJz0nIGNoYXJhY3RlcikgaW4g
JXMiLCBwYXRoLmNfc3RyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgYXV0byBrZXkgPSBwYWlyU3RyaW5nLnN1YnN0cihwYWlyU3RhcnQsIGVxdWFsc0xvY2F0aW9u
IC0gcGFpclN0YXJ0KTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IHBhaXJTdHJpbmcuc3Vic3RyKGVx
dWFsc0xvY2F0aW9uICsgMSwgcGFpckVuZCAtIChlcXVhbHNMb2NhdGlvbiArIDEpKTsKKworICAg
ICAgICBpZiAoa2V5LnJmaW5kKCJleHBlcmltZW50YWw6IikgPT0gMCkgeworICAgICAgICAgICAg
a2V5ID0ga2V5LnN1YnN0cigxMyk7CisgICAgICAgICAgICBmZWF0dXJlcy5leHBlcmltZW50YWxG
ZWF0dXJlcy5pbnNlcnQoeyBrZXksIHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSkg
fSk7CisgICAgICAgIH0gZWxzZSBpZiAoa2V5LnJmaW5kKCJpbnRlcm5hbDoiKSA9PSAwKSB7Cisg
ICAgICAgICAgICBrZXkgPSBrZXkuc3Vic3RyKDkpOworICAgICAgICAgICAgZmVhdHVyZXMuaW50
ZXJuYWxEZWJ1Z0ZlYXR1cmVzLmluc2VydCh7IGtleSwgcGFyc2VCb29sZWFuVGVzdEhlYWRlclZh
bHVlKHZhbHVlKSB9KTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoa2V5VHlwZShrZXkp
KSB7CisgICAgICAgIGNhc2UgVGVzdEhlYWRlcktleVR5cGU6OkJvb2w6CisgICAgICAgICAgICBm
ZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCBwYXJzZUJvb2xlYW5UZXN0SGVhZGVy
VmFsdWUodmFsdWUpIH0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVGVzdEhl
YWRlcktleVR5cGU6OkRvdWJsZToKKyAgICAgICAgICAgIGZlYXR1cmVzLmRvdWJsZUZlYXR1cmVz
Lmluc2VydCh7IGtleSwgcGFyc2VEb3VibGVUZXN0SGVhZGVyVmFsdWUodmFsdWUpIH0pOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVGVzdEhlYWRlcktleVR5cGU6OlN0cmluZzoK
KyAgICAgICAgICAgIGZlYXR1cmVzLnN0cmluZ0ZlYXR1cmVzLmluc2VydCh7IGtleSwgdmFsdWUg
fSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUZXN0SGVhZGVyS2V5VHlwZTo6
U3RyaW5nUmVsYXRpdmVQYXRoOgorICAgICAgICAgICAgZmVhdHVyZXMuc3RyaW5nRmVhdHVyZXMu
aW5zZXJ0KHsga2V5LCBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzUmVsYXRpdmVQYXRoKHZh
bHVlLCBwYXRoKSB9KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRlc3RIZWFk
ZXJLZXlUeXBlOjpTdHJpbmdVUkw6CisgICAgICAgICAgICBmZWF0dXJlcy5zdHJpbmdGZWF0dXJl
cy5pbnNlcnQoeyBrZXksIHBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNVUkwodmFsdWUpIH0p
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVGVzdEhlYWRlcktleVR5cGU6OlN0
cmluZ1ZlY3RvcjoKKyAgICAgICAgICAgIGZlYXR1cmVzLnN0cmluZ1ZlY3RvckZlYXR1cmVzLmlu
c2VydCh7IGtleSwgcGFyc2VTdHJpbmdUZXN0SGVhZGVyVmFsdWVBc1N0cmluZ1ZlY3Rvcih2YWx1
ZSkgfSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUZXN0SGVhZGVyS2V5VHlw
ZTo6VW5rbm93bjoKKyAgICAgICAgICAgIExPR19FUlJPUigiVW5rbm93biBrZXksICclcywgaW4g
dGVzdCBoZWFkZXIgaW4gJXMiLCBrZXkuY19zdHIoKSwgcGF0aC5jX3N0cigpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcGFpclN0YXJ0ID0gcGFpckVuZCArIDE7
CisgICAgfQorCisgICAgcmV0dXJuIGZlYXR1cmVzOworfQorCitUZXN0RmVhdHVyZXMgZmVhdHVy
ZURlZmF1bHRzRnJvbVRlc3RIZWFkZXJGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJiBjb21tYW5k
LCBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIFRlc3RIZWFkZXJLZXlUeXBl
PiYga2V5VHlwZU1hcCkKK3sKKyAgICByZXR1cm4gcGFyc2VUZXN0SGVhZGVyKGNvbW1hbmQuYWJz
b2x1dGVQYXRoLCBrZXlUeXBlTWFwKTsKK30KKworfQpJbmRleDogVG9vbHMvVGVzdFJ1bm5lclNo
YXJlZC9UZXN0RmVhdHVyZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0UnVubmVyU2hhcmVk
L1Rlc3RGZWF0dXJlcy5oCShub25leGlzdGVudCkKKysrIFRvb2xzL1Rlc3RSdW5uZXJTaGFyZWQv
VGVzdEZlYXR1cmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8b3B0aW9uYWw+CisjaW5jbHVkZSA8c3RyaW5n
PgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisjaW5jbHVkZSA8dmVjdG9yPgorCituYW1lc3Bh
Y2UgV1RSIHsKKworc3RydWN0IFRlc3RDb21tYW5kOworCitzdHJ1Y3QgVGVzdEZlYXR1cmVzIHsK
KyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+IGV4cGVyaW1lbnRhbEZl
YXR1cmVzOworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9vbD4gaW50ZXJu
YWxEZWJ1Z0ZlYXR1cmVzOworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9v
bD4gYm9vbEZlYXR1cmVzOworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgZG91
YmxlPiBkb3VibGVGZWF0dXJlczsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcs
IHN0ZDo6c3RyaW5nPiBzdHJpbmdGZWF0dXJlczsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3Rk
OjpzdHJpbmcsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPj4gc3RyaW5nVmVjdG9yRmVhdHVyZXM7
Cit9OworCit2b2lkIG1lcmdlKFRlc3RGZWF0dXJlcyYgYmFzZSwgVGVzdEZlYXR1cmVzIGFkZGl0
aW9uYWwpOworCitUZXN0RmVhdHVyZXMgaGFyZGNvZGVkRmVhdHVyZXNCYXNlZE9uUGF0aEZvclRl
c3QoY29uc3QgVGVzdENvbW1hbmQmKTsKKworZW51bSBjbGFzcyBUZXN0SGVhZGVyS2V5VHlwZSA6
IHVpbnQ4X3QgeworICAgIEJvb2wsCisgICAgRG91YmxlLAorICAgIFN0cmluZywKKyAgICBTdHJp
bmdSZWxhdGl2ZVBhdGgsCisgICAgU3RyaW5nVVJMLAorICAgIFN0cmluZ1ZlY3RvciwKKyAgICBV
bmtub3duCit9OworVGVzdEZlYXR1cmVzIGZlYXR1cmVEZWZhdWx0c0Zyb21UZXN0SGVhZGVyRm9y
VGVzdChjb25zdCBUZXN0Q29tbWFuZCYsIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0
cmluZywgVGVzdEhlYWRlcktleVR5cGU+Jik7CisKK30KSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyNjgzNTUpCisrKyBUb29scy9XZWJL
aXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiAr
MzAsNyBAQAogI2luY2x1ZGUgIkV2ZW50U2VuZGVyUHJveHkuaCIKICNpbmNsdWRlICJPcHRpb25z
LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCisjaW5jbHVkZSAiVGVzdENvbW1hbmQu
aCIKICNpbmNsdWRlICJUZXN0SW52b2NhdGlvbi5oIgogI2luY2x1ZGUgIldlYkNvcmVUZXN0U3Vw
cG9ydC5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luaXRpYWxpemVUaHJlYWRpbmcuaD4K
QEAgLTEyMzYsMjQgKzEyMzcsNiBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRBbGxvd3NBbnlT
U0xDZXJ0CiB9CiAjZW5kaWYKIAotc3RhdGljIHN0ZDo6c3RyaW5nIHRlc3RQYXRoKFdLVVJMUmVm
IHVybCkKLXsKLSAgICBhdXRvIHNjaGVtZSA9IGFkb3B0V0soV0tVUkxDb3B5U2NoZW1lKHVybCkp
OwotICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nSWdub3JpbmdDYXNlKHNjaGVt
ZS5nZXQoKSwgImZpbGUiKSkgewotICAgICAgICBhdXRvIHBhdGggPSBhZG9wdFdLKFdLVVJMQ29w
eVBhdGgodXJsKSk7Ci0gICAgICAgIGF1dG8gYnVmZmVyID0gc3RkOjp2ZWN0b3I8Y2hhcj4oV0tT
dHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKHBhdGguZ2V0KCkpKTsKLSAgICAgICAgYXV0
byBsZW5ndGggPSBXS1N0cmluZ0dldFVURjhDU3RyaW5nKHBhdGguZ2V0KCksIGJ1ZmZlci5kYXRh
KCksIGJ1ZmZlci5zaXplKCkpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChsZW5ndGggPiAwKTsK
LSNpZiBPUyhXSU5ET1dTKQotICAgICAgICAvLyBSZW1vdmUgdGhlIGZpcnN0ICcvJyBpZiBpdCBz
dGFydHMgd2l0aCBzb21ldGhpbmcgbGlrZSAiL0M6LyIuCi0gICAgICAgIGlmIChsZW5ndGggPj0g
NCAmJiBidWZmZXJbMF0gPT0gJy8nICYmIGJ1ZmZlclsyXSA9PSAnOicgJiYgYnVmZmVyWzNdID09
ICcvJykKLSAgICAgICAgICAgIHJldHVybiBzdGQ6OnN0cmluZyhidWZmZXIuZGF0YSgpICsgMSwg
bGVuZ3RoIC0gMSk7Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKGJ1ZmZlci5k
YXRhKCksIGxlbmd0aCAtIDEpOwotICAgIH0KLSAgICByZXR1cm4gc3RkOjpzdHJpbmcoKTsKLX0K
LQogV0tVUkxSZWYgVGVzdENvbnRyb2xsZXI6OmNyZWF0ZVRlc3RVUkwoY29uc3QgY2hhciogcGF0
aE9yVVJMKQogewogICAgIGlmIChzdHJzdHIocGF0aE9yVVJMLCAiaHR0cDovLyIpIHx8IHN0cnN0
cihwYXRoT3JVUkwsICJodHRwczovLyIpIHx8IHN0cnN0cihwYXRoT3JVUkwsICJmaWxlOi8vIikp
CkBAIC0xMjk3LDcgKzEyODAsNyBAQCBUZXN0T3B0aW9ucyBUZXN0Q29udHJvbGxlcjo6dGVzdE9w
dGlvbnNGCiAgICAgVGVzdEZlYXR1cmVzIGZlYXR1cmVzID0gbV9nbG9iYWxGZWF0dXJlczsKICAg
ICBtZXJnZShmZWF0dXJlcywgaGFyZGNvZGVkRmVhdHVyZXNCYXNlZE9uUGF0aEZvclRlc3QoY29t
bWFuZCkpOwogICAgIG1lcmdlKGZlYXR1cmVzLCBwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURlZmF1
bHRzRm9yVGVzdChjb21tYW5kKSk7Ci0gICAgbWVyZ2UoZmVhdHVyZXMsIGZlYXR1cmVEZWZhdWx0
c0Zyb21UZXN0SGVhZGVyRm9yVGVzdChjb21tYW5kKSk7CisgICAgbWVyZ2UoZmVhdHVyZXMsIGZl
YXR1cmVEZWZhdWx0c0Zyb21UZXN0SGVhZGVyRm9yVGVzdChjb21tYW5kLCBUZXN0T3B0aW9uczo6
a2V5VHlwZU1hcHBpbmcoKSkpOwogICAgIG1lcmdlKGZlYXR1cmVzLCBwbGF0Zm9ybVNwZWNpZmlj
RmVhdHVyZU92ZXJyaWRlc0RlZmF1bHRzRm9yVGVzdChjb21tYW5kKSk7CiAKICAgICByZXR1cm4g
VGVzdE9wdGlvbnMgeyBmZWF0dXJlcyB9OwpAQCAtMTM0NSw2ICsxMzI4LDI0IEBAIHN0YXRpYyB2
b2lkIGNvbnRlbnRFeHRlbnNpb25TdG9yZUNhbGxiYWMKICAgICBjb250ZXh0LT50ZXN0Q29udHJv
bGxlci5ub3RpZnlEb25lKCk7CiB9CiAKK3N0YXRpYyBzdGQ6OnN0cmluZyB0ZXN0UGF0aChXS1VS
TFJlZiB1cmwpCit7CisgICAgYXV0byBzY2hlbWUgPSBhZG9wdFdLKFdLVVJMQ29weVNjaGVtZSh1
cmwpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZ0lnbm9yaW5nQ2FzZShz
Y2hlbWUuZ2V0KCksICJmaWxlIikpIHsKKyAgICAgICAgYXV0byBwYXRoID0gYWRvcHRXSyhXS1VS
TENvcHlQYXRoKHVybCkpOworICAgICAgICBhdXRvIGJ1ZmZlciA9IHN0ZDo6dmVjdG9yPGNoYXI+
KFdLU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShwYXRoLmdldCgpKSk7CisgICAgICAg
IGF1dG8gbGVuZ3RoID0gV0tTdHJpbmdHZXRVVEY4Q1N0cmluZyhwYXRoLmdldCgpLCBidWZmZXIu
ZGF0YSgpLCBidWZmZXIuc2l6ZSgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobGVuZ3RoID4g
MCk7CisjaWYgT1MoV0lORE9XUykKKyAgICAgICAgLy8gUmVtb3ZlIHRoZSBmaXJzdCAnLycgaWYg
aXQgc3RhcnRzIHdpdGggc29tZXRoaW5nIGxpa2UgIi9DOi8iLgorICAgICAgICBpZiAobGVuZ3Ro
ID49IDQgJiYgYnVmZmVyWzBdID09ICcvJyAmJiBidWZmZXJbMl0gPT0gJzonICYmIGJ1ZmZlclsz
XSA9PSAnLycpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpzdHJpbmcoYnVmZmVyLmRhdGEoKSAr
IDEsIGxlbmd0aCAtIDEpOworI2VuZGlmCisgICAgICAgIHJldHVybiBzdGQ6OnN0cmluZyhidWZm
ZXIuZGF0YSgpLCBsZW5ndGggLSAxKTsKKyAgICB9CisgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7
Cit9CisKIHN0YXRpYyBzdGQ6OnN0cmluZyBjb250ZW50RXh0ZW5zaW9uSlNPTlBhdGgoV0tVUkxS
ZWYgdXJsKQogewogICAgIGF1dG8gcGF0aCA9IHRlc3RQYXRoKHVybCk7CkBAIC0xNDMwLDk3ICsx
NDMxLDEzIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0Q29udGVudEV4dGVuc2kKIAogI2Vu
ZGlmIC8vICFFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogCi1jbGFzcyBDb21tYW5kVG9rZW5p
emVyIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBDb21tYW5kVG9rZW5pemVyKGNvbnN0IHN0ZDo6
c3RyaW5nJiBpbnB1dCkKLSAgICAgICAgOiBtX2lucHV0KGlucHV0KQotICAgIHsKLSAgICAgICAg
cHVtcCgpOwotICAgIH0KLQotICAgIGJvb2wgaGFzTmV4dCgpIGNvbnN0OwotICAgIHN0ZDo6c3Ry
aW5nIG5leHQoKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHB1bXAoKTsKLSAgICBzdGF0aWMgY29u
c3QgY2hhciBrU2VwYXJhdG9yID0gJ1wnJzsKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYgbV9pbnB1
dDsKLSAgICBzdGQ6OnN0cmluZyBtX25leHQ7Ci0gICAgc2l6ZV90IG1fcG9zTmV4dFNlcGFyYXRv
ciB7IDAgfTsKLX07Ci0KLXZvaWQgQ29tbWFuZFRva2VuaXplcjo6cHVtcCgpCi17Ci0gICAgaWYg
KG1fcG9zTmV4dFNlcGFyYXRvciA9PSBzdGQ6OnN0cmluZzo6bnBvcyB8fCBtX3Bvc05leHRTZXBh
cmF0b3IgPT0gbV9pbnB1dC5zaXplKCkpIHsKLSAgICAgICAgbV9uZXh0ID0gc3RkOjpzdHJpbmco
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzaXplX3Qgc3RhcnQgPSBtX3Bvc05leHRT
ZXBhcmF0b3IgPyBtX3Bvc05leHRTZXBhcmF0b3IgKyAxIDogMDsKLSAgICBtX3Bvc05leHRTZXBh
cmF0b3IgPSBtX2lucHV0LmZpbmQoa1NlcGFyYXRvciwgc3RhcnQpOwotICAgIHNpemVfdCBzaXpl
ID0gbV9wb3NOZXh0U2VwYXJhdG9yID09IHN0ZDo6c3RyaW5nOjpucG9zID8gc3RkOjpzdHJpbmc6
Om5wb3MgOiBtX3Bvc05leHRTZXBhcmF0b3IgLSBzdGFydDsKLSAgICBtX25leHQgPSBzdGQ6OnN0
cmluZyhtX2lucHV0LCBzdGFydCwgc2l6ZSk7Ci19Ci0KLXN0ZDo6c3RyaW5nIENvbW1hbmRUb2tl
bml6ZXI6Om5leHQoKQotewotICAgIEFTU0VSVChoYXNOZXh0KCkpOwotCi0gICAgc3RkOjpzdHJp
bmcgb2xkTmV4dCA9IG1fbmV4dDsKLSAgICBwdW1wKCk7Ci0gICAgcmV0dXJuIG9sZE5leHQ7Ci19
Ci0KLWJvb2wgQ29tbWFuZFRva2VuaXplcjo6aGFzTmV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
ICFtX25leHQuZW1wdHkoKTsKLX0KLQotTk9fUkVUVVJOIHN0YXRpYyB2b2lkIGRpZShjb25zdCBz
dGQ6OnN0cmluZyYgaW5wdXRMaW5lKQotewotICAgIGZwcmludGYoc3RkZXJyLCAiVW5leHBlY3Rl
ZCBpbnB1dCBsaW5lOiAlc1xuIiwgaW5wdXRMaW5lLmNfc3RyKCkpOwotICAgIGV4aXQoMSk7Ci19
Ci0KLXN0YXRpYyBUZXN0Q29tbWFuZCBwYXJzZUlucHV0TGluZShjb25zdCBzdGQ6OnN0cmluZyYg
aW5wdXRMaW5lKQotewotICAgIFRlc3RDb21tYW5kIHJlc3VsdDsKLSAgICBDb21tYW5kVG9rZW5p
emVyIHRva2VuaXplcihpbnB1dExpbmUpOwotICAgIGlmICghdG9rZW5pemVyLmhhc05leHQoKSkK
LSAgICAgICAgZGllKGlucHV0TGluZSk7Ci0KLSAgICBzdGQ6OnN0cmluZyBhcmcgPSB0b2tlbml6
ZXIubmV4dCgpOwotICAgIHJlc3VsdC5wYXRoT3JVUkwgPSBhcmc7Ci0gICAgd2hpbGUgKHRva2Vu
aXplci5oYXNOZXh0KCkpIHsKLSAgICAgICAgYXJnID0gdG9rZW5pemVyLm5leHQoKTsKLSAgICAg
ICAgaWYgKGFyZyA9PSBzdGQ6OnN0cmluZygiLS10aW1lb3V0IikpIHsKLSAgICAgICAgICAgIHN0
ZDo6c3RyaW5nIHRpbWVvdXRUb2tlbiA9IHRva2VuaXplci5uZXh0KCk7Ci0gICAgICAgICAgICBy
ZXN1bHQudGltZW91dCA9IFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMoYXRvaSh0aW1lb3V0VG9r
ZW4uY19zdHIoKSkpOwotICAgICAgICB9IGVsc2UgaWYgKGFyZyA9PSBzdGQ6OnN0cmluZygiLXAi
KSB8fCBhcmcgPT0gc3RkOjpzdHJpbmcoIi0tcGl4ZWwtdGVzdCIpKSB7Ci0gICAgICAgICAgICBy
ZXN1bHQuc2hvdWxkRHVtcFBpeGVscyA9IHRydWU7Ci0gICAgICAgICAgICBpZiAodG9rZW5pemVy
Lmhhc05leHQoKSkKLSAgICAgICAgICAgICAgICByZXN1bHQuZXhwZWN0ZWRQaXhlbEhhc2ggPSB0
b2tlbml6ZXIubmV4dCgpOwotICAgICAgICB9IGVsc2UgaWYgKGFyZyA9PSBzdGQ6OnN0cmluZygi
LS1kdW1wLWpzY29uc29sZWxvZy1pbi1zdGRlcnIiKSkKLSAgICAgICAgICAgIHJlc3VsdC5kdW1w
SlNDb25zb2xlTG9nSW5TdGRFcnIgPSB0cnVlOwotICAgICAgICBlbHNlIGlmIChhcmcgPT0gc3Rk
OjpzdHJpbmcoIi0tYWJzb2x1dGVQYXRoIikpCi0gICAgICAgICAgICByZXN1bHQuYWJzb2x1dGVQ
YXRoID0gdG9rZW5pemVyLm5leHQoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZGllKGlu
cHV0TGluZSk7Ci0gICAgfQotICAgIAotICAgIGlmIChyZXN1bHQuYWJzb2x1dGVQYXRoLmVtcHR5
KCkpIHsKLSAgICAgICAgLy8gR3Jvc3MuIE5lZWQgdG8gcmVkdWNlIGNvbnZlcnNpb25zIGJldHdl
ZW4gYWxsIHRoZSBzdHJpbmcgdHlwZXMgYW5kIFVSTHMuCi0gICAgICAgIHJlc3VsdC5hYnNvbHV0
ZVBhdGggPSB0ZXN0UGF0aChhZG9wdFdLKFRlc3RDb250cm9sbGVyOjpjcmVhdGVUZXN0VVJMKHJl
c3VsdC5wYXRoT3JVUkwuY19zdHIoKSkpLmdldCgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCiBib29sIFRlc3RDb250cm9sbGVyOjpydW5UZXN0KGNvbnN0IGNoYXIqIGlucHV0
TGluZSkKIHsKICAgICBBdXRvZHJhaW5lZFBvb2wgcG9vbDsKLSAgICAKKwogICAgIFdLVGV4dENo
ZWNrZXJTZXRUZXN0aW5nTW9kZSh0cnVlKTsKLSAgICBUZXN0Q29tbWFuZCBjb21tYW5kID0gcGFy
c2VJbnB1dExpbmUoc3RkOjpzdHJpbmcoaW5wdXRMaW5lKSk7CisgICAgCisgICAgYXV0byBjb21t
YW5kID0gcGFyc2VJbnB1dExpbmUoc3RkOjpzdHJpbmcoaW5wdXRMaW5lKSk7CiAKICAgICBtX3N0
YXRlID0gUnVubmluZ1Rlc3Q7CiAgICAgCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rl
c3RDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0
Q29udHJvbGxlci5oCShyZXZpc2lvbiAyNjgzNTUpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVy
L1Rlc3RDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0NCwxMyArNjQ0LDQgQEAgcHJp
dmF0ZToKICNlbmRpZgogfTsKIAotc3RydWN0IFRlc3RDb21tYW5kIHsKLSAgICBzdGQ6OnN0cmlu
ZyBwYXRoT3JVUkw7Ci0gICAgc3RkOjpzdHJpbmcgYWJzb2x1dGVQYXRoOwotICAgIHN0ZDo6c3Ry
aW5nIGV4cGVjdGVkUGl4ZWxIYXNoOwotICAgIFdURjo6U2Vjb25kcyB0aW1lb3V0OwotICAgIGJv
b2wgc2hvdWxkRHVtcFBpeGVscyB7IGZhbHNlIH07Ci0gICAgYm9vbCBkdW1wSlNDb25zb2xlTG9n
SW5TdGRFcnIgeyBmYWxzZSB9OwotfTsKLQogfSAvLyBuYW1lc3BhY2UgV1RSCkluZGV4OiBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RPcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL1Rlc3RPcHRpb25zLmNwcAkocmV2aXNpb24gMjY4MzU1KQorKysgVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0T3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDc4ICsyNiwxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlc3RPcHRpb25z
LmgiCiAKLSNpbmNsdWRlICJTdHJpbmdGdW5jdGlvbnMuaCIKLSNpbmNsdWRlICJUZXN0Q29udHJv
bGxlci5oIgogI2luY2x1ZGUgPGZzdHJlYW0+Ci0jaW5jbHVkZSA8aW9zdHJlYW0+CiAjaW5jbHVk
ZSA8c3RyaW5nPgotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZEZpbGVzeXN0ZW0uaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotI2RlZmluZSBEVU1QX0ZFQVRVUkVTIDAKIAogbmFtZXNwYWNl
IFdUUiB7CiAKLSNpZiBEVU1QX0ZFQVRVUkVTCi1zdGF0aWMgdm9pZCBkdW1wRmVhdHVyZXMoY29u
c3QgVGVzdEZlYXR1cmVzJiBmZWF0dXJlcykKLXsKLSAgICBpZiAoZmVhdHVyZXMuZXhwZXJpbWVu
dGFsRmVhdHVyZXMuZW1wdHkoKSAmJiBmZWF0dXJlcy5pbnRlcm5hbERlYnVnRmVhdHVyZXMuZW1w
dHkoKSAmJiBmZWF0dXJlcy5ib29sRmVhdHVyZXMuZW1wdHkoKSAmJiBmZWF0dXJlcy5kb3VibGVG
ZWF0dXJlcy5lbXB0eSgpICYmIGZlYXR1cmVzLnN0cmluZ0ZlYXR1cmVzLmVtcHR5KCkgJiYgZmVh
dHVyZXMuc3RyaW5nVmVjdG9yRmVhdHVyZXMuZW1wdHkoKSkgewotICAgICAgICBzdGQ6OmNlcnIg
PDwgIiAgW0VNUFRZXVxuIjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBpZiAo
IWZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzLmVtcHR5KCkpIHsKLSAgICAgICAgc3RkOjpj
ZXJyIDw8ICIgIEV4cGVyaW1lbnRhbCBGZWF0dXJlczogXG4iOwotICAgICAgICBmb3IgKGF1dG8g
W2tleSwgdmFsdWVdIDogZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMpCi0gICAgICAgICAg
ICBzdGQ6OmNlcnIgPDwgIiAgICAiIDw8IGtleSA8PCAiOiAiIDw8IHZhbHVlIDw8ICdcbic7Ci0g
ICAgfQotICAgIGlmICghZmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzLmVtcHR5KCkpIHsK
LSAgICAgICAgc3RkOjpjZXJyIDw8ICIgIEludGVybmFsIEZlYXR1cmVzOiBcbiI7Ci0gICAgICAg
IGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBmZWF0dXJlcy5pbnRlcm5hbERlYnVnRmVhdHVyZXMp
Ci0gICAgICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgICAiIDw8IGtleSA8PCAiOiAiIDw8IHZhbHVl
IDw8ICdcbic7Ci0gICAgfQotICAgIGlmICghZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmVtcHR5KCkp
IHsKLSAgICAgICAgc3RkOjpjZXJyIDw8ICIgIEJvb2wgRmVhdHVyZXM6IFxuIjsKLSAgICAgICAg
Zm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGZlYXR1cmVzLmJvb2xGZWF0dXJlcykKLSAgICAgICAg
ICAgIHN0ZDo6Y2VyciA8PCAiICAgICIgPDwga2V5IDw8ICI6ICIgPDwgdmFsdWUgPDwgJ1xuJzsK
LSAgICB9Ci0gICAgaWYgKCFmZWF0dXJlcy5kb3VibGVGZWF0dXJlcy5lbXB0eSgpKSB7Ci0gICAg
ICAgIHN0ZDo6Y2VyciA8PCAiICBEb3VibGUgRmVhdHVyZXM6IFxuIjsKLSAgICAgICAgZm9yIChh
dXRvIFtrZXksIHZhbHVlXSA6IGZlYXR1cmVzLmRvdWJsZUZlYXR1cmVzKQotICAgICAgICAgICAg
c3RkOjpjZXJyIDw8ICIgICAgIiA8PCBrZXkgPDwgIjogIiA8PCB2YWx1ZSA8PCAnXG4nOwotICAg
IH0KLSAgICBpZiAoIWZlYXR1cmVzLnN0cmluZ0ZlYXR1cmVzLmVtcHR5KCkpIHsKLSAgICAgICAg
c3RkOjpjZXJyIDw8ICIgIFN0cmluZyBGZWF0dXJlczogXG4iOwotICAgICAgICBmb3IgKGF1dG8g
W2tleSwgdmFsdWVdIDogZmVhdHVyZXMuc3RyaW5nRmVhdHVyZXMpCi0gICAgICAgICAgICBzdGQ6
OmNlcnIgPDwgIiAgICAiIDw8IGtleSA8PCAiOiAiIDw8IHZhbHVlIDw8ICdcbic7Ci0gICAgfQot
ICAgIGlmICghZmVhdHVyZXMuc3RyaW5nVmVjdG9yRmVhdHVyZXMuZW1wdHkoKSkgewotICAgICAg
ICBzdGQ6OmNlcnIgPDwgIiAgU3RyaW5nIFZlY3RvciBGZWF0dXJlczogXG4iOwotICAgICAgICBm
b3IgKGF1dG8gW2tleSwgdmFsdWVdIDogZmVhdHVyZXMuc3RyaW5nVmVjdG9yRmVhdHVyZXMpCi0g
ICAgICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgICAiIDw8IGtleSA8PCAiOiBOdW1iZXIgb2Ygc3Ry
aW5ncyAiIDw8IHZhbHVlLnNpemUoKSA8PCAnXG4nOwotICAgIH0KLX0KLSNlbmRpZgotCi12b2lk
IG1lcmdlKFRlc3RGZWF0dXJlcyYgYmFzZSwgVGVzdEZlYXR1cmVzIGFkZGl0aW9uYWwpCi17Ci0g
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzdGQ6OnVub3JkZXJlZF9tYXA6Om1lcmdlIHdo
ZW4gaXQgaXMgYXZhaWxhYmxlIGZvciBhbGwgcG9ydHMuCi0KLSAgICBmb3IgKGF1dG8gW2tleSwg
dmFsdWVdIDogYWRkaXRpb25hbC5leHBlcmltZW50YWxGZWF0dXJlcykKLSAgICAgICAgYmFzZS5l
eHBlcmltZW50YWxGZWF0dXJlcy5pbnNlcnRfb3JfYXNzaWduKGtleSwgdmFsdWUpOwotICAgIGZv
ciAoYXV0byBba2V5LCB2YWx1ZV0gOiBhZGRpdGlvbmFsLmludGVybmFsRGVidWdGZWF0dXJlcykK
LSAgICAgICAgYmFzZS5pbnRlcm5hbERlYnVnRmVhdHVyZXMuaW5zZXJ0X29yX2Fzc2lnbihrZXks
IHZhbHVlKTsKLSAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogYWRkaXRpb25hbC5ib29sRmVh
dHVyZXMpCi0gICAgICAgIGJhc2UuYm9vbEZlYXR1cmVzLmluc2VydF9vcl9hc3NpZ24oa2V5LCB2
YWx1ZSk7Ci0gICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGFkZGl0aW9uYWwuZG91YmxlRmVh
dHVyZXMpCi0gICAgICAgIGJhc2UuZG91YmxlRmVhdHVyZXMuaW5zZXJ0X29yX2Fzc2lnbihrZXks
IHZhbHVlKTsKLSAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogYWRkaXRpb25hbC5zdHJpbmdG
ZWF0dXJlcykKLSAgICAgICAgYmFzZS5zdHJpbmdGZWF0dXJlcy5pbnNlcnRfb3JfYXNzaWduKGtl
eSwgdmFsdWUpOwotICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBhZGRpdGlvbmFsLnN0cmlu
Z1ZlY3RvckZlYXR1cmVzKQotICAgICAgICBiYXNlLnN0cmluZ1ZlY3RvckZlYXR1cmVzLmluc2Vy
dF9vcl9hc3NpZ24oa2V5LCB2YWx1ZSk7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdGQ6OnVub3JkZXJl
ZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+JiBib29sRGVmYXVsdHNNYXAoKQogewogICAgIHN0YXRp
YyBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+IG1hcCB7CkBAIC0xODIsMjY4
ICsxMTcsNzYgQEAgc3RhdGljIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cgogICAg
IHJldHVybiBtYXA7CiB9CiAKLWVudW0gY2xhc3MgS2V5VHlwZSA6IHVpbnQ4X3QgewotICAgIEJv
b2wsCi0gICAgRG91YmxlLAotICAgIFN0cmluZywKLSAgICBTdHJpbmdSZWxhdGl2ZVBhdGgsCi0g
ICAgU3RyaW5nVVJMLAotICAgIFN0cmluZ1ZlY3RvciwKLSAgICBVbmtub3duCi19OwotCi1zdGF0
aWMgY29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBLZXlUeXBlPiYga2V5VHlw
ZU1hcCgpCi17Ci0gICAgc3RhdGljIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgS2V5
VHlwZT4gbWFwIHsKLSAgICAgICAgeyAiYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNr
Rm9yQ3JlZGVudGlhbHMiLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsgImFsbG93VG9wTmF2
aWdhdGlvblRvRGF0YVVSTHMiLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsgImFsbG93c0xp
bmtQcmV2aWV3IiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJkb21QYXN0ZUFsbG93ZWQi
LCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsgImR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciIs
IEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAiZWRpdGFibGUiLCBLZXlUeXBlOjpCb29sIH0s
Ci0gICAgICAgIHsgImVuYWJsZUFwcE5hcCIsIEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAi
ZW5hYmxlQXR0YWNobWVudEVsZW1lbnQiLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsgImVu
YWJsZUJhY2tGb3J3YXJkQ2FjaGUiLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsgImVuYWJs
ZUNhcHR1cmVBdWRpb0luR1BVUHJvY2VzcyIsIEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAi
ZW5hYmxlQ2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3MiLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAg
IHsgImVuYWJsZUNhcHR1cmVWaWRlb0luR1BVUHJvY2VzcyIsIEtleVR5cGU6OkJvb2wgfSwKLSAg
ICAgICAgeyAiZW5hYmxlQ2FwdHVyZVZpZGVvSW5VSVByb2Nlc3MiLCBLZXlUeXBlOjpCb29sIH0s
Ci0gICAgICAgIHsgImVuYWJsZUNvbG9yRmlsdGVyIiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAg
ICB7ICJlbmFibGVJbkFwcEJyb3dzZXJQcml2YWN5IiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAg
ICB7ICJlbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMiLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAg
IHsgImVuYWJsZUtleWdlbkVsZW1lbnQiLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsgImVu
YWJsZU1lbnVJdGVtRWxlbWVudCIsIEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAiZW5hYmxl
TW9kZXJuTWVkaWFDb250cm9scyIsIEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAiZW5hYmxl
UHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24iLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsgImVu
YWJsZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVuIiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7
ICJlbmFibGVTZXJ2aWNlQ29udHJvbHMiLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsgImVu
YWJsZVdlYkF1dGhlbnRpY2F0aW9uIiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJlbmFi
bGVXZWJBdXRoZW50aWNhdGlvbkxvY2FsQXV0aGVudGljYXRvciIsIEtleVR5cGU6OkJvb2wgfSwK
LSAgICAgICAgeyAiaWdub3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1lb3V0cyIsIEtleVR5cGU6
OkJvb2wgfSwKLSAgICAgICAgeyAiaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMiLCBLZXlUeXBl
OjpCb29sIH0sCi0gICAgICAgIHsgImlzQXBwQm91bmRXZWJWaWV3IiwgS2V5VHlwZTo6Qm9vbCB9
LAotICAgICAgICB7ICJuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyIsIEtleVR5cGU6OkJvb2wgfSwK
LSAgICAgICAgeyAicHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZSIsIEtleVR5cGU6
OkJvb2wgfSwKLSAgICAgICAgeyAicnVuU2luZ2x5IiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAg
ICB7ICJzaG91bGRIYW5kbGVSdW5PcGVuUGFuZWwiLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAg
IHsgInNob3VsZElnbm9yZU1ldGFWaWV3cG9ydCIsIEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAg
eyAic2hvdWxkUHJlc2VudFBvcG92ZXJzIiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJz
aG91bGRTaG93VG91Y2hlcyIsIEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAic2hvdWxkU2hv
d1dlYlZpZXciLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsgInNwZWxsQ2hlY2tpbmdEb3Rz
IiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJ1c2VBY2NlbGVyYXRlZERyYXdpbmciLCBL
ZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsgInVzZUNoYXJhY3RlclNlbGVjdGlvbkdyYW51bGFy
aXR5IiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJ1c2VEYXRhRGV0ZWN0aW9uIiwgS2V5
VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJ1c2VFcGhlbWVyYWxTZXNzaW9uIiwgS2V5VHlwZTo6
Qm9vbCB9LAotICAgICAgICB7ICJ1c2VGbGV4aWJsZVZpZXdwb3J0IiwgS2V5VHlwZTo6Qm9vbCB9
LAotICAgICAgICB7ICJ1c2VNb2NrU2Nyb2xsYmFycyIsIEtleVR5cGU6OkJvb2wgfSwKLSAgICAg
ICAgeyAidXNlUmVtb3RlTGF5ZXJUcmVlIiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJ1
c2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0IiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7
ICJ1c2VUaHJlYWRlZFNjcm9sbGluZyIsIEtleVR5cGU6OkJvb2wgfSwKK2NvbnN0IHN0ZDo6dW5v
cmRlcmVkX21hcDxzdGQ6OnN0cmluZywgVGVzdEhlYWRlcktleVR5cGU+JiBUZXN0T3B0aW9uczo6
a2V5VHlwZU1hcHBpbmcoKQoreworICAgIHN0YXRpYyBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpz
dHJpbmcsIFRlc3RIZWFkZXJLZXlUeXBlPiBtYXAgeworICAgICAgICB7ICJhbGxvd0Nyb3NzT3Jp
Z2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscyIsIFRlc3RIZWFkZXJLZXlUeXBlOjpC
b29sIH0sCisgICAgICAgIHsgImFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMiLCBUZXN0SGVh
ZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJhbGxvd3NMaW5rUHJldmlldyIsIFRlc3RI
ZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImRvbVBhc3RlQWxsb3dlZCIsIFRlc3RI
ZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImR1bXBKU0NvbnNvbGVMb2dJblN0ZEVy
ciIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVkaXRhYmxlIiwgVGVz
dEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlQXBwTmFwIiwgVGVzdEhl
YWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlQXR0YWNobWVudEVsZW1lbnQi
LCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVCYWNrRm9yd2Fy
ZENhY2hlIiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlQ2Fw
dHVyZUF1ZGlvSW5HUFVQcm9jZXNzIiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAg
ICAgeyAiZW5hYmxlQ2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3MiLCBUZXN0SGVhZGVyS2V5VHlwZTo6
Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVDYXB0dXJlVmlkZW9JbkdQVVByb2Nlc3MiLCBUZXN0
SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVDYXB0dXJlVmlkZW9JblVJ
UHJvY2VzcyIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUNv
bG9yRmlsdGVyIiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxl
SW5BcHBCcm93c2VyUHJpdmFjeSIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAg
IHsgImVuYWJsZUluc3BlY3RvckFkZGl0aW9ucyIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0s
CisgICAgICAgIHsgImVuYWJsZUtleWdlbkVsZW1lbnQiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9v
bCB9LAorICAgICAgICB7ICJlbmFibGVNZW51SXRlbUVsZW1lbnQiLCBUZXN0SGVhZGVyS2V5VHlw
ZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzIiwgVGVzdEhl
YWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmln
YXRpb24iLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVQcm9j
ZXNzU3dhcE9uV2luZG93T3BlbiIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAg
IHsgImVuYWJsZVNlcnZpY2VDb250cm9scyIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisg
ICAgICAgIHsgImVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uIiwgVGVzdEhlYWRlcktleVR5cGU6OkJv
b2wgfSwKKyAgICAgICAgeyAiZW5hYmxlV2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0
b3IiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJpZ25vcmVTeW5jaHJv
bm91c01lc3NhZ2luZ1RpbWVvdXRzIiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAg
ICAgeyAiaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9v
bCB9LAorICAgICAgICB7ICJpc0FwcEJvdW5kV2ViVmlldyIsIFRlc3RIZWFkZXJLZXlUeXBlOjpC
b29sIH0sCisgICAgICAgIHsgIm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzIiwgVGVzdEhlYWRlcktl
eVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAicHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJr
TW9kZSIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInJ1blNpbmdseSIs
IFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInNob3VsZEhhbmRsZVJ1bk9w
ZW5QYW5lbCIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInNob3VsZEln
bm9yZU1ldGFWaWV3cG9ydCIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsg
InNob3VsZFByZXNlbnRQb3BvdmVycyIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAg
ICAgIHsgInNob3VsZFNob3dUb3VjaGVzIiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAg
ICAgICAgeyAic2hvdWxkU2hvd1dlYlZpZXciLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAor
ICAgICAgICB7ICJzcGVsbENoZWNraW5nRG90cyIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0s
CisgICAgICAgIHsgInVzZUFjY2VsZXJhdGVkRHJhd2luZyIsIFRlc3RIZWFkZXJLZXlUeXBlOjpC
b29sIH0sCisgICAgICAgIHsgInVzZUNoYXJhY3RlclNlbGVjdGlvbkdyYW51bGFyaXR5IiwgVGVz
dEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAidXNlRGF0YURldGVjdGlvbiIsIFRl
c3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInVzZUVwaGVtZXJhbFNlc3Npb24i
LCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VGbGV4aWJsZVZpZXdw
b3J0IiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAidXNlTW9ja1Njcm9s
bGJhcnMiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VSZW1vdGVM
YXllclRyZWUiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VTZXJ2
aWNlV29ya2VyU2hvcnRUaW1lb3V0IiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAg
ICAgeyAidXNlVGhyZWFkZWRTY3JvbGxpbmciLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAog
ICAgIAotICAgICAgICB7ICJjb250ZW50SW5zZXQudG9wIiwgS2V5VHlwZTo6RG91YmxlIH0sCi0g
ICAgICAgIHsgImRldmljZVNjYWxlRmFjdG9yIiwgS2V5VHlwZTo6RG91YmxlIH0sCi0gICAgICAg
IHsgInZpZXdIZWlnaHQiLCBLZXlUeXBlOjpEb3VibGUgfSwKLSAgICAgICAgeyAidmlld1dpZHRo
IiwgS2V5VHlwZTo6RG91YmxlIH0sCi0KLSAgICAgICAgeyAiYWRkaXRpb25hbFN1cHBvcnRlZElt
YWdlVHlwZXMiLCBLZXlUeXBlOjpTdHJpbmcgfSwKLSAgICAgICAgeyAiYXBwbGljYXRpb25CdW5k
bGVJZGVudGlmaWVyIiwgS2V5VHlwZTo6U3RyaW5nIH0sCi0gICAgICAgIHsgImFwcGxpY2F0aW9u
TWFuaWZlc3QiLCBLZXlUeXBlOjpTdHJpbmdSZWxhdGl2ZVBhdGggfSwKLSAgICAgICAgeyAiY29u
dGVudE1vZGUiLCBLZXlUeXBlOjpTdHJpbmcgfSwKLSAgICAgICAgeyAianNjT3B0aW9ucyIsIEtl
eVR5cGU6OlN0cmluZyB9LAotICAgICAgICB7ICJzdGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkwi
LCBLZXlUeXBlOjpTdHJpbmdVUkwgfSwKKyAgICAgICAgeyAiY29udGVudEluc2V0LnRvcCIsIFRl
c3RIZWFkZXJLZXlUeXBlOjpEb3VibGUgfSwKKyAgICAgICAgeyAiZGV2aWNlU2NhbGVGYWN0b3Ii
LCBUZXN0SGVhZGVyS2V5VHlwZTo6RG91YmxlIH0sCisgICAgICAgIHsgInZpZXdIZWlnaHQiLCBU
ZXN0SGVhZGVyS2V5VHlwZTo6RG91YmxlIH0sCisgICAgICAgIHsgInZpZXdXaWR0aCIsIFRlc3RI
ZWFkZXJLZXlUeXBlOjpEb3VibGUgfSwKKworICAgICAgICB7ICJhZGRpdGlvbmFsU3VwcG9ydGVk
SW1hZ2VUeXBlcyIsIFRlc3RIZWFkZXJLZXlUeXBlOjpTdHJpbmcgfSwKKyAgICAgICAgeyAiYXBw
bGljYXRpb25CdW5kbGVJZGVudGlmaWVyIiwgVGVzdEhlYWRlcktleVR5cGU6OlN0cmluZyB9LAor
ICAgICAgICB7ICJhcHBsaWNhdGlvbk1hbmlmZXN0IiwgVGVzdEhlYWRlcktleVR5cGU6OlN0cmlu
Z1JlbGF0aXZlUGF0aCB9LAorICAgICAgICB7ICJjb250ZW50TW9kZSIsIFRlc3RIZWFkZXJLZXlU
eXBlOjpTdHJpbmcgfSwKKyAgICAgICAgeyAianNjT3B0aW9ucyIsIFRlc3RIZWFkZXJLZXlUeXBl
OjpTdHJpbmcgfSwKKyAgICAgICAgeyAic3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJMIiwgVGVz
dEhlYWRlcktleVR5cGU6OlN0cmluZ1VSTCB9LAogCi0gICAgICAgIHsgImxhbmd1YWdlIiwgS2V5
VHlwZTo6U3RyaW5nVmVjdG9yIH0sCisgICAgICAgIHsgImxhbmd1YWdlIiwgVGVzdEhlYWRlcktl
eVR5cGU6OlN0cmluZ1ZlY3RvciB9LAogICAgIH07CiAKICAgICByZXR1cm4gbWFwOwogfQogCi1z
dGF0aWMgS2V5VHlwZSBrZXlUeXBlKHN0ZDo6c3RyaW5nIGtleSkKLXsKLSAgICBhdXRvIG1hcCA9
IGtleVR5cGVNYXAoKTsKLSAgICBhdXRvIGl0ID0gbWFwLmZpbmQoa2V5KTsKLSAgICBpZiAoaXQg
PT0gbWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gS2V5VHlwZTo6VW5rbm93bjsKLSAgICByZXR1
cm4gaXQtPnNlY29uZDsKLX0KLQotc3RhdGljIGJvb2wgcGFyc2VCb29sZWFuVGVzdEhlYWRlclZh
bHVlKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gInRydWUi
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAodmFsdWUgPT0gImZhbHNlIikKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTE9HX0VSUk9SKCJGb3VuZCB1bmV4cGVjdGVkIHZhbHVl
ICclcycgZm9yIGJvb2xlYW4gb3B0aW9uLiBFeHBlY3RlZCAndHJ1ZScgb3IgJ2ZhbHNlJy4iLCB2
YWx1ZS5jX3N0cigpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBzdGQ6OnN0cmlu
ZyBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzUmVsYXRpdmVQYXRoKGNvbnN0IHN0ZDo6c3Ry
aW5nJiB2YWx1ZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKLXsKLSAgICBhdXRvIGJh
c2VVUkwgPSBhZG9wdFdLKFRlc3RDb250cm9sbGVyOjpjcmVhdGVUZXN0VVJMKHBhdGhPclVSTC5j
X3N0cigpKSk7Ci0gICAgYXV0byByZWxhdGl2ZVVSTCA9IGFkb3B0V0soV0tVUkxDcmVhdGVXaXRo
QmFzZVVSTChiYXNlVVJMLmdldCgpLCB2YWx1ZS5jX3N0cigpKSk7Ci0gICAgcmV0dXJuIHRvU1RE
KGFkb3B0V0soV0tVUkxDb3B5UGF0aChyZWxhdGl2ZVVSTC5nZXQoKSkpKTsKLX0KLQotc3RhdGlj
IHN0ZDo6c3RyaW5nIHBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNVUkwoY29uc3Qgc3RkOjpz
dHJpbmcmIHZhbHVlKQotewotICAgIHJldHVybiB0b1NURChhZG9wdFdLKFdLVVJMQ29weVN0cmlu
ZyhUZXN0Q29udHJvbGxlcjo6Y3JlYXRlVGVzdFVSTCh2YWx1ZS5jX3N0cigpKSkpKTsKLX0KLQot
c3RhdGljIFRlc3RGZWF0dXJlcyBwYXJzZVRlc3RIZWFkZXIoc3RkOjpmaWxlc3lzdGVtOjpwYXRo
IHBhdGgsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCi17Ci0gICAgVGVzdEZlYXR1cmVz
IGZlYXR1cmVzOwotICAgIGlmICghc3RkOjpmaWxlc3lzdGVtOjpleGlzdHMocGF0aCkpCi0gICAg
ICAgIHJldHVybiBmZWF0dXJlczsKLQotICAgIHN0ZDo6aWZzdHJlYW0gZmlsZShwYXRoKTsKLSAg
ICBpZiAoIWZpbGUuZ29vZCgpKSB7Ci0gICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IG9wZW4g
ZmlsZSB0byBpbnNwZWN0IHRlc3QgaGVhZGVycyBpbiAlcyIsIHBhdGguY19zdHIoKSk7Ci0gICAg
ICAgIHJldHVybiBmZWF0dXJlczsKLSAgICB9Ci0KLSAgICBzdGQ6OnN0cmluZyBvcHRpb25zOwot
ICAgIGdldGxpbmUoZmlsZSwgb3B0aW9ucyk7Ci0gICAgc3RkOjpzdHJpbmcgYmVnaW5TdHJpbmco
IndlYmtpdC10ZXN0LXJ1bm5lciBbICIpOwotICAgIHN0ZDo6c3RyaW5nIGVuZFN0cmluZygiIF0i
KTsKLSAgICBzaXplX3QgYmVnaW5Mb2NhdGlvbiA9IG9wdGlvbnMuZmluZChiZWdpblN0cmluZyk7
Ci0gICAgaWYgKGJlZ2luTG9jYXRpb24gPT0gc3RkOjpzdHJpbmc6Om5wb3MpCi0gICAgICAgIHJl
dHVybiBmZWF0dXJlczsKLSAgICBzaXplX3QgZW5kTG9jYXRpb24gPSBvcHRpb25zLmZpbmQoZW5k
U3RyaW5nLCBiZWdpbkxvY2F0aW9uKTsKLSAgICBpZiAoZW5kTG9jYXRpb24gPT0gc3RkOjpzdHJp
bmc6Om5wb3MpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgZmluZCBlbmQgb2YgdGVz
dCBoZWFkZXIgaW4gJXMiLCBwYXRoLmNfc3RyKCkpOwotICAgICAgICByZXR1cm4gZmVhdHVyZXM7
Ci0gICAgfQotICAgIHN0ZDo6c3RyaW5nIHBhaXJTdHJpbmcgPSBvcHRpb25zLnN1YnN0cihiZWdp
bkxvY2F0aW9uICsgYmVnaW5TdHJpbmcuc2l6ZSgpLCBlbmRMb2NhdGlvbiAtIChiZWdpbkxvY2F0
aW9uICsgYmVnaW5TdHJpbmcuc2l6ZSgpKSk7Ci0gICAgc2l6ZV90IHBhaXJTdGFydCA9IDA7Ci0g
ICAgd2hpbGUgKHBhaXJTdGFydCA8IHBhaXJTdHJpbmcuc2l6ZSgpKSB7Ci0gICAgICAgIHNpemVf
dCBwYWlyRW5kID0gcGFpclN0cmluZy5maW5kKCIgIiwgcGFpclN0YXJ0KTsKLSAgICAgICAgaWYg
KHBhaXJFbmQgPT0gc3RkOjpzdHJpbmc6Om5wb3MpCi0gICAgICAgICAgICBwYWlyRW5kID0gcGFp
clN0cmluZy5zaXplKCk7Ci0gICAgICAgIHNpemVfdCBlcXVhbHNMb2NhdGlvbiA9IHBhaXJTdHJp
bmcuZmluZCgiPSIsIHBhaXJTdGFydCk7Ci0gICAgICAgIGlmIChlcXVhbHNMb2NhdGlvbiA9PSBz
dGQ6OnN0cmluZzo6bnBvcykgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJNYWxmb3JtZWQgb3B0
aW9uIGluIHRlc3QgaGVhZGVyIChjb3VsZCBub3QgZmluZCAnPScgY2hhcmFjdGVyKSBpbiAlcyIs
IHBhdGguY19zdHIoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBh
dXRvIGtleSA9IHBhaXJTdHJpbmcuc3Vic3RyKHBhaXJTdGFydCwgZXF1YWxzTG9jYXRpb24gLSBw
YWlyU3RhcnQpOwotICAgICAgICBhdXRvIHZhbHVlID0gcGFpclN0cmluZy5zdWJzdHIoZXF1YWxz
TG9jYXRpb24gKyAxLCBwYWlyRW5kIC0gKGVxdWFsc0xvY2F0aW9uICsgMSkpOwotCi0gICAgICAg
IGlmIChrZXkucmZpbmQoImV4cGVyaW1lbnRhbDoiKSA9PSAwKSB7Ci0gICAgICAgICAgICBrZXkg
PSBrZXkuc3Vic3RyKDEzKTsKLSAgICAgICAgICAgIGZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1
cmVzLmluc2VydCh7IGtleSwgcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKSB9KTsK
LSAgICAgICAgfSBlbHNlIGlmIChrZXkucmZpbmQoImludGVybmFsOiIpID09IDApIHsKLSAgICAg
ICAgICAgIGtleSA9IGtleS5zdWJzdHIoOSk7Ci0gICAgICAgICAgICBmZWF0dXJlcy5pbnRlcm5h
bERlYnVnRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUo
dmFsdWUpIH0pOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChrZXlUeXBlKGtleSkpIHsK
LSAgICAgICAgY2FzZSBLZXlUeXBlOjpCb29sOgotICAgICAgICAgICAgZmVhdHVyZXMuYm9vbEZl
YXR1cmVzLmluc2VydCh7IGtleSwgcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKSB9
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEtleVR5cGU6OkRvdWJsZToKLSAg
ICAgICAgICAgIGZlYXR1cmVzLmRvdWJsZUZlYXR1cmVzLmluc2VydCh7IGtleSwgc3RkOjpzdG9k
KHZhbHVlKSB9KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEtleVR5cGU6OlN0
cmluZzoKLSAgICAgICAgICAgIGZlYXR1cmVzLnN0cmluZ0ZlYXR1cmVzLmluc2VydCh7IGtleSwg
dmFsdWUgfSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBLZXlUeXBlOjpTdHJp
bmdSZWxhdGl2ZVBhdGg6Ci0gICAgICAgICAgICBmZWF0dXJlcy5zdHJpbmdGZWF0dXJlcy5pbnNl
cnQoeyBrZXksIHBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNSZWxhdGl2ZVBhdGgodmFsdWUs
IHBhdGhPclVSTCkgfSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBLZXlUeXBl
OjpTdHJpbmdVUkw6Ci0gICAgICAgICAgICBmZWF0dXJlcy5zdHJpbmdGZWF0dXJlcy5pbnNlcnQo
eyBrZXksIHBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNVUkwodmFsdWUpIH0pOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nVmVjdG9yOgotICAgICAg
ICAgICAgZmVhdHVyZXMuc3RyaW5nVmVjdG9yRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCBzcGxpdCh2
YWx1ZSwgJywnKSB9KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEtleVR5cGU6
OlVua25vd246Ci0gICAgICAgICAgICBMT0dfRVJST1IoIlVua25vd24ga2V5LCAnJXMsIGluIHRl
c3QgaGVhZGVyIGluICVzIiwga2V5LmNfc3RyKCksIHBhdGguY19zdHIoKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHBhaXJTdGFydCA9IHBhaXJFbmQgKyAxOwot
ICAgIH0KLQotICAgIHJldHVybiBmZWF0dXJlczsKLX0KLQotc3RhdGljIGJvb2wgcGF0aENvbnRh
aW5zKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwsIGNvbnN0IGNoYXIqIHN1YnN0cmluZykK
LXsKLSAgICBTdHJpbmcgcGF0aChwYXRoT3JVUkwuY19zdHIoKSk7Ci0gICAgcmV0dXJuIHBhdGgu
Y29udGFpbnMoc3Vic3RyaW5nKTsgLy8gQ2FzZS1pbnNlbnNpdGl2ZS4KLX0KLQotc3RhdGljIGJv
b2wgc2hvdWxkTWFrZVZpZXdwb3J0RmxleGlibGUoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVS
TCkKLXsKLSAgICByZXR1cm4gcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgInZpZXdwb3J0LyIpICYm
ICFwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAidmlzdWFsLXZpZXdwb3J0LyIpOwotfQotCi1zdGF0
aWMgYm9vbCBzaG91bGRVc2VFcGhlbWVyYWxTZXNzaW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRo
T3JVUkwpCi17Ci0gICAgcmV0dXJuIHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJ3M2MvSW5kZXhl
ZERCLXByaXZhdGUtYnJvd3NpbmciKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAidzNjXFxJ
bmRleGVkREItcHJpdmF0ZS1icm93c2luZyIpOwotfQotCi1zdGF0aWMgT3B0aW9uYWw8c3RkOjpw
YWlyPGRvdWJsZSwgZG91YmxlPj4gb3ZlcnJpZGVWaWV3V2lkdGhBbmRIZWlnaHRGb3JUZXN0KGNv
bnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCi17Ci0gICAgaWYgKHBhdGhDb250YWlucyhwYXRo
T3JVUkwsICJzdmcvVzNDLVNWRy0xLjEiKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAic3Zn
XFxXM0MtU1ZHLTEuMSIpKQotICAgICAgICByZXR1cm4geyB7IDQ4MCwgMzYwIH0gfTsKLSAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi1zdGF0aWMgT3B0aW9uYWw8ZG91YmxlPiBvdmVycmlk
ZURldmljZVNjYWxlRmFjdG9yRm9yVGVzdChjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQot
ewotICAgIGlmIChwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAiL2hpZHBpLTN4LSIpKQotICAgICAg
ICByZXR1cm4gMzsKLSAgICBpZiAocGF0aENvbnRhaW5zKHBhdGhPclVSTCwgIi9oaWRwaS0iKSkK
LSAgICAgICAgcmV0dXJuIDI7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotc3RhdGlj
IGJvb2wgc2hvdWxkRHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKGNvbnN0IHN0ZDo6c3RyaW5nJiBw
YXRoT3JVUkwpCi17Ci0gICAgcmV0dXJuIHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhv
c3Q6ODgwMC9iZWFjb24iKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0
NDMvYmVhY29uIikKLSAgICAgICAgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9z
dDo4ODAwL2NvcnMiKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMv
Y29ycyIpCi0gICAgICAgIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgw
MC9mZXRjaCIpIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6OTQ0My9mZXRj
aCIpCi0gICAgICAgIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgwMC9z
ZXJ2aWNlLXdvcmtlcnMiKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0
NDMvc2VydmljZS13b3JrZXJzIikKLSAgICAgICAgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwg
ImxvY2FsaG9zdDo4ODAwL3N0cmVhbXMvd3JpdGFibGUtc3RyZWFtcyIpIHx8IHBhdGhDb250YWlu
cyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6OTQ0My9zdHJlYW1zL3dyaXRhYmxlLXN0cmVhbXMiKQot
ICAgICAgICB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvc3RyZWFt
cy9waXBpbmciKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMvc3Ry
ZWFtcy9waXBpbmciKQotICAgICAgICB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxo
b3N0Ojg4MDAveGhyIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQz
L3hociIpCi0gICAgICAgIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgw
MC93ZWJydGMiKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMvd2Vi
cnRjIikKLSAgICAgICAgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo4ODAw
L3dlYnNvY2tldHMiKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMv
d2Vic29ja2V0cyIpOwotfQotCi1UZXN0RmVhdHVyZXMgaGFyZGNvZGVkRmVhdHVyZXNCYXNlZE9u
UGF0aEZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmIGNvbW1hbmQpCi17Ci0gICAgVGVzdEZlYXR1
cmVzIGZlYXR1cmVzOwotCi0gICAgaWYgKHNob3VsZE1ha2VWaWV3cG9ydEZsZXhpYmxlKGNvbW1h
bmQucGF0aE9yVVJMKSkKLSAgICAgICAgZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJ1
c2VGbGV4aWJsZVZpZXdwb3J0IiwgdHJ1ZSB9KTsKLSAgICBpZiAoc2hvdWxkVXNlRXBoZW1lcmFs
U2Vzc2lvbihjb21tYW5kLnBhdGhPclVSTCkpCi0gICAgICAgIGZlYXR1cmVzLmJvb2xGZWF0dXJl
cy5pbnNlcnQoeyAidXNlRXBoZW1lcmFsU2Vzc2lvbiIsIHRydWUgfSk7Ci0gICAgaWYgKHNob3Vs
ZER1bXBKU0NvbnNvbGVMb2dJblN0ZEVycihjb21tYW5kLnBhdGhPclVSTCkpCi0gICAgICAgIGZl
YXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyAiZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIiwg
dHJ1ZSB9KTsKLSAgICBpZiAoYXV0byBkZXZpY2VTY2FsZUZhY3RvciA9IG92ZXJyaWRlRGV2aWNl
U2NhbGVGYWN0b3JGb3JUZXN0KGNvbW1hbmQucGF0aE9yVVJMKTsgZGV2aWNlU2NhbGVGYWN0b3Ig
IT0gV1RGOjpudWxsb3B0KQotICAgICAgICBmZWF0dXJlcy5kb3VibGVGZWF0dXJlcy5pbnNlcnQo
eyAiZGV2aWNlU2NhbGVGYWN0b3IiLCBkZXZpY2VTY2FsZUZhY3Rvci52YWx1ZSgpIH0pOwotICAg
IGlmIChhdXRvIHZpZXdXaWR0aEFuZEhlaWdodCA9IG92ZXJyaWRlVmlld1dpZHRoQW5kSGVpZ2h0
Rm9yVGVzdChjb21tYW5kLnBhdGhPclVSTCk7IHZpZXdXaWR0aEFuZEhlaWdodCAhPSBXVEY6Om51
bGxvcHQpIHsKLSAgICAgICAgZmVhdHVyZXMuZG91YmxlRmVhdHVyZXMuaW5zZXJ0KHsgInZpZXdX
aWR0aCIsIHZpZXdXaWR0aEFuZEhlaWdodC0+Zmlyc3QgfSk7Ci0gICAgICAgIGZlYXR1cmVzLmRv
dWJsZUZlYXR1cmVzLmluc2VydCh7ICJ2aWV3SGVpZ2h0Iiwgdmlld1dpZHRoQW5kSGVpZ2h0LT5z
ZWNvbmQgfSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZlYXR1cmVzOwotfQotCi1UZXN0RmVhdHVy
ZXMgZmVhdHVyZURlZmF1bHRzRnJvbVRlc3RIZWFkZXJGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5k
JiBjb21tYW5kKQotewotICAgIHJldHVybiBwYXJzZVRlc3RIZWFkZXIoY29tbWFuZC5hYnNvbHV0
ZVBhdGgsIGNvbW1hbmQucGF0aE9yVVJMKTsKLX0KLQogVGVzdE9wdGlvbnM6OlRlc3RPcHRpb25z
KFRlc3RGZWF0dXJlcyBmZWF0dXJlcykKICAgICA6IG1fZmVhdHVyZXMgeyBmZWF0dXJlcyB9CiB7
Ci0jaWYgRFVNUF9GRUFUVVJFUwotICAgIHN0ZDo6Y2VyciA8PCAiRFVNUElORyBGRUFUVVJFU1xu
IjsKLSAgICBkdW1wRmVhdHVyZXMobV9mZWF0dXJlcyk7Ci0jZW5kaWYKIH0KIAogYm9vbCBUZXN0
T3B0aW9uczo6aGFzU2FtZUluaXRpYWxpemF0aW9uT3B0aW9ucyhjb25zdCBUZXN0T3B0aW9ucyYg
b3B0aW9ucykgY29uc3QKQEAgLTQ1MywyNyArMTk2LDI3IEBAIGJvb2wgVGVzdE9wdGlvbnM6Omhh
c1NhbWVJbml0aWFsaXphdGlvbk8KICAgICBpZiAobV9mZWF0dXJlcy5pbnRlcm5hbERlYnVnRmVh
dHVyZXMgIT0gb3B0aW9ucy5tX2ZlYXR1cmVzLmludGVybmFsRGVidWdGZWF0dXJlcykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZm9yIChhdXRvIFtrZXksIGtleVR5cGVdIDoga2V5VHlw
ZU1hcCgpKSB7CisgICAgZm9yIChhdXRvIFtrZXksIGtleVR5cGVdIDoga2V5VHlwZU1hcHBpbmco
KSkgewogICAgICAgICBzd2l0Y2ggKGtleVR5cGUpIHsKLSAgICAgICAgY2FzZSBLZXlUeXBlOjpC
b29sOgorICAgICAgICBjYXNlIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sOgogICAgICAgICAgICAg
aWYgKGJvb2xGZWF0dXJlVmFsdWUoa2V5KSAhPSBvcHRpb25zLmJvb2xGZWF0dXJlVmFsdWUoa2V5
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBLZXlUeXBlOjpEb3VibGU6CisgICAgICAgIGNhc2UgVGVzdEhlYWRlcktleVR5
cGU6OkRvdWJsZToKICAgICAgICAgICAgIGlmIChkb3VibGVGZWF0dXJlVmFsdWUoa2V5KSAhPSBv
cHRpb25zLmRvdWJsZUZlYXR1cmVWYWx1ZShrZXkpKQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEtleVR5cGU6OlN0cmluZzoK
LSAgICAgICAgY2FzZSBLZXlUeXBlOjpTdHJpbmdSZWxhdGl2ZVBhdGg6Ci0gICAgICAgIGNhc2Ug
S2V5VHlwZTo6U3RyaW5nVVJMOgorICAgICAgICBjYXNlIFRlc3RIZWFkZXJLZXlUeXBlOjpTdHJp
bmc6CisgICAgICAgIGNhc2UgVGVzdEhlYWRlcktleVR5cGU6OlN0cmluZ1JlbGF0aXZlUGF0aDoK
KyAgICAgICAgY2FzZSBUZXN0SGVhZGVyS2V5VHlwZTo6U3RyaW5nVVJMOgogICAgICAgICAgICAg
aWYgKHN0cmluZ0ZlYXR1cmVWYWx1ZShrZXkpICE9IG9wdGlvbnMuc3RyaW5nRmVhdHVyZVZhbHVl
KGtleSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nVmVjdG9yOgorICAgICAgICBjYXNlIFRlc3RI
ZWFkZXJLZXlUeXBlOjpTdHJpbmdWZWN0b3I6CiAgICAgICAgICAgICBpZiAoc3RyaW5nVmVjdG9y
RmVhdHVyZVZhbHVlKGtleSkgIT0gb3B0aW9ucy5zdHJpbmdWZWN0b3JGZWF0dXJlVmFsdWUoa2V5
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBLZXlUeXBlOjpVbmtub3duOgorICAgICAgICBjYXNlIFRlc3RIZWFkZXJLZXlU
eXBlOjpVbmtub3duOgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IH0KICAgICB9CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RPcHRpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0T3B0aW9ucy5oCShyZXZpc2lv
biAyNjgzNTUpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RPcHRpb25zLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJU
ZXN0RmVhdHVyZXMuaCIKICNpbmNsdWRlIDxvcHRpb25hbD4KICNpbmNsdWRlIDxzdHJpbmc+CiAj
aW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KQEAgLTMyLDIyICszMyw2IEBACiAKIG5hbWVzcGFjZSBX
VFIgewogCi1zdHJ1Y3QgVGVzdENvbW1hbmQ7Ci0KLXN0cnVjdCBUZXN0RmVhdHVyZXMgewotICAg
IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9vbD4gZXhwZXJpbWVudGFsRmVhdHVy
ZXM7Ci0gICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBib29sPiBpbnRlcm5hbERl
YnVnRmVhdHVyZXM7Ci0gICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBib29sPiBi
b29sRmVhdHVyZXM7Ci0gICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBkb3VibGU+
IGRvdWJsZUZlYXR1cmVzOwotICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgc3Rk
OjpzdHJpbmc+IHN0cmluZ0ZlYXR1cmVzOwotICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0
cmluZywgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+PiBzdHJpbmdWZWN0b3JGZWF0dXJlczsKLX07
Ci0KLXZvaWQgbWVyZ2UoVGVzdEZlYXR1cmVzJiBiYXNlLCBUZXN0RmVhdHVyZXMgYWRkaXRpb25h
bCk7Ci0KLVRlc3RGZWF0dXJlcyBoYXJkY29kZWRGZWF0dXJlc0Jhc2VkT25QYXRoRm9yVGVzdChj
b25zdCBUZXN0Q29tbWFuZCYpOwotVGVzdEZlYXR1cmVzIGZlYXR1cmVEZWZhdWx0c0Zyb21UZXN0
SGVhZGVyRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYpOwotCiBzdHJ1Y3QgQ29udGV4dE9wdGlv
bnMgewogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBvdmVycmlkZUxhbmd1YWdlczsKICAg
ICBib29sIGlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHM7CkBAIC03NCw2ICs1OSw4
IEBAIHN0cnVjdCBDb250ZXh0T3B0aW9ucyB7CiAKIGNsYXNzIFRlc3RPcHRpb25zIHsKIHB1Ymxp
YzoKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBUZXN0
SGVhZGVyS2V5VHlwZT4mIGtleVR5cGVNYXBwaW5nKCk7CisKICAgICBleHBsaWNpdCBUZXN0T3B0
aW9ucyhUZXN0RmVhdHVyZXMpOwogCiAgICAgQ29udGV4dE9wdGlvbnMgY29udGV4dE9wdGlvbnMo
KSBjb25zdApJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDI2ODM1NSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNiArMTIwLDggQEAK
IAkJNjUxMEE3OEIxMUVDNjQzODAwNDEwODY3IC8qIFdlYktpdFdlaWdodFdhdGNoZXI4MDAudHRm
IGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTEwQTc4
MDExRUM2NDM4MDA0MTA4NjcgLyogV2ViS2l0V2VpZ2h0V2F0Y2hlcjgwMC50dGYgKi87IH07CiAJ
CTY1MTBBNzhDMTFFQzY0MzgwMDQxMDg2NyAvKiBXZWJLaXRXZWlnaHRXYXRjaGVyOTAwLnR0ZiBp
biBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjUxMEE3ODEx
MUVDNjQzODAwNDEwODY3IC8qIFdlYktpdFdlaWdodFdhdGNoZXI5MDAudHRmICovOyB9OwogCQk2
NUVCODVBMDExRUM2N0NDMDAzNEQzMDAgLyogQWN0aXZhdGVGb250c0NvY29hLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVFQjg1OUYxMUVDNjdDQzAw
MzREMzAwIC8qIEFjdGl2YXRlRm9udHNDb2NvYS5tbSAqLzsgfTsKKwkJN0NGRjlCQ0EyNTM0QUYx
RDAwMDgwMDlGIC8qIFRlc3RGZWF0dXJlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0ZGOUJDNjI1MzRBRjFEMDAwODAwOUYgLyogVGVzdEZlYXR1
cmVzLmNwcCAqLzsgfTsKKwkJN0NGRjlCQ0IyNTM0QUYxRDAwMDgwMDlGIC8qIFRlc3RDb21tYW5k
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRkY5
QkM3MjUzNEFGMUQwMDA4MDA5RiAvKiBUZXN0Q29tbWFuZC5jcHAgKi87IH07CiAJCTgwMzRDNjYy
MTQ4NzYzNjQwMEFDMzJFOSAvKiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgwMzRDNjYxMTQ4NzYzNjQw
MEFDMzJFOSAvKiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbSAqLzsgfTsKIAkJODA5NzMz
OEExNDg3NEE1QTAwODE1NkQ5IC8qIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODA5NzMzODkx
NDg3NEE1QTAwODE1NkQ5IC8qIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1tICov
OyB9OwogCQk5Mzc2NDE3QTIxMEQ3MzcyMDBBM0RBQUUgLyogV2ViS2l0VGVzdFJ1bm5lcldpbmRv
dy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNzY0
MTc2MjEwRDczNjAwMEEzREFBRSAvKiBXZWJLaXRUZXN0UnVubmVyV2luZG93Lm1tICovOyB9OwpA
QCAtMzQ5LDEzICszNTEsMTYgQEAKIAkJNjUxMEE3ODExMUVDNjQzODAwNDEwODY3IC8qIFdlYktp
dFdlaWdodFdhdGNoZXI5MDAudHRmICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gZmlsZTsgbmFtZSA9IFdlYktpdFdlaWdodFdhdGNoZXI5MDAudHRmOyBw
YXRoID0gZm9udHMvV2ViS2l0V2VpZ2h0V2F0Y2hlcjkwMC50dGY7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTY1RUI4NTlEMTFFQzY3Q0MwMDM0RDMwMCAvKiBBY3RpdmF0ZUZvbnRzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjdGl2YXRlRm9udHMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjVFQjg1OUYxMUVDNjdDQzAwMzREMzAwIC8qIEFjdGl2
YXRlRm9udHNDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IEFjdGl2YXRlRm9udHNDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NG
RjlCQzUyNTM0QUYxRDAwMDgwMDlGIC8qIFRlc3RGZWF0dXJlcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBUZXN0RmVhdHVyZXMuaDsgcGF0aCA9IC4uL1Rlc3RSdW5uZXJTaGFy
ZWQvVGVzdEZlYXR1cmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDRkY5QkM2
MjUzNEFGMUQwMDA4MDA5RiAvKiBUZXN0RmVhdHVyZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gVGVzdEZlYXR1cmVzLmNwcDsgcGF0aCA9IC4uL1Rlc3RSdW5uZXJT
aGFyZWQvVGVzdEZlYXR1cmVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NG
RjlCQzcyNTM0QUYxRDAwMDgwMDlGIC8qIFRlc3RDb21tYW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFRlc3RDb21tYW5kLmNwcDsgcGF0aCA9IC4uL1Rlc3RSdW5u
ZXJTaGFyZWQvVGVzdENvbW1hbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
Q0ZGOUJDODI1MzRBRjFEMDAwODAwOUYgLyogVGVzdENvbW1hbmQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gVGVzdENvbW1hbmQuaDsgcGF0aCA9IC4uL1Rlc3RSdW5uZXJTaGFy
ZWQvVGVzdENvbW1hbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODAzNEM2NjEx
NDg3NjM2NDAwQUMzMkU5IC8qIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJN
YWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgwOTczMzg4MTQ4NzRBNUEwMDgx
NTZEOSAvKiBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oOyBw
YXRoID0gbWFjL0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTgwOTczMzg5MTQ4NzRBNUEwMDgxNTZEOSAvKiBBY2Nlc3NpYmls
aXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgbmFtZSA9IEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1tOyBwYXRoID0gbWFj
L0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk4NDFDQzAwRDE4MTE4NUJGMDA0MkU5QjYgLyogT3B0aW9ucy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcHRpb25zLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODQxQ0MwMEUxODExODVCRjAwNDJFOUI2IC8qIE9wdGlvbnMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk4REQ3NkZBMTA0ODZBQTc2MDBEOTZCNUUgLyogV2ViS2l0VGVzdFJ1
bm5lciAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNv
bXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gV2Vi
S2l0VGVzdFJ1bm5lcjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKLQkJOTMz
OEQxQkEyNTBBNzlFQjAwRTgyN0Y2IC8qIEpTQmFzaWNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTQmFz
aWNzLmg7IHBhdGggPSAuLi9UZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pTQmFzaWNzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMzhEMUJFMjUwQkQ5REQwMEU4MjdGNiAvKiBE
aWN0aW9uYXJ5RnVuY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpY3Rpb25hcnlGdW5jdGlvbnMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM3NjQxNzYyMTBENzM2MDAwQTNEQUFF
IC8qIFdlYktpdFRlc3RSdW5uZXJXaW5kb3cubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBXZWJLaXRUZXN0UnVubmVyV2luZG93Lm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5Mzc2NDE3NzIxMEQ3MzYxMDBBM0RBQUUgLyogV2ViS2l0VGVzdFJ1bm5l
cldpbmRvdy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRUZXN0UnVu
bmVyV2luZG93Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NDksNiArNTU0LDEw
IEBACiAJCQkJMzE0OEEwNTQxRTZGODVCNjAwRDNCMzE2IC8qIElPU0xheW91dFRlc3RDb21tdW5p
Y2F0aW9uLmggKi8sCiAJCQkJOTNDNzg4MUYyNTBDNjlFNDAwQzBBQTI0IC8qIFJlZnRlc3RGdW5j
dGlvbnMuY3BwICovLAogCQkJCTkzQzc4ODIwMjUwQzY5RTQwMEMwQUEyNCAvKiBSZWZ0ZXN0RnVu
Y3Rpb25zLmggKi8sCisJCQkJN0NGRjlCQzcyNTM0QUYxRDAwMDgwMDlGIC8qIFRlc3RDb21tYW5k
LmNwcCAqLywKKwkJCQk3Q0ZGOUJDODI1MzRBRjFEMDAwODAwOUYgLyogVGVzdENvbW1hbmQuaCAq
LywKKwkJCQk3Q0ZGOUJDNjI1MzRBRjFEMDAwODAwOUYgLyogVGVzdEZlYXR1cmVzLmNwcCAqLywK
KwkJCQk3Q0ZGOUJDNTI1MzRBRjFEMDAwODAwOUYgLyogVGVzdEZlYXR1cmVzLmggKi8sCiAJCQkp
OwogCQkJbmFtZSA9IFRlc3RSdW5uZXJTaGFyZWQ7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OwpAQCAtMTIwOSw4ICsxMjE4LDEwIEBACiAJCQkJMkUyQTc2NUQyMzcwQzhEMTAwOEY5RkZFIC8q
IFBsYXRmb3JtVmlld0hlbHBlcnMubW0gaW4gU291cmNlcyAqLywKIAkJCQlGNDAxMEI3RTI0REEy
MDUzMDBBODc2RTIgLyogUG9zZUFzQ2xhc3MubW0gaW4gU291cmNlcyAqLywKIAkJCQkyREZBOTg0
OTFEN0Y3MENGMDBBRkYyQzkgLyogU2hhcmVkRXZlbnRTdHJlYW1zTWFjLm1tIGluIFNvdXJjZXMg
Ki8sCisJCQkJN0NGRjlCQ0IyNTM0QUYxRDAwMDgwMDlGIC8qIFRlc3RDb21tYW5kLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUExODUxMDQxMUI5QUUxMzgwMDc0NEFFQiAvKiBUZXN0Q29udHJvbGxl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTg1MTAzQjFCOUFFMEUyMDA3NDRBRUIgLyogVGVz
dENvbnRyb2xsZXJDb2NvYS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTdDRkY5QkNBMjUzNEFGMUQw
MDA4MDA5RiAvKiBUZXN0RmVhdHVyZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE4NTEwNDIx
QjlBRTEzRTAwNzQ0QUVCIC8qIFRlc3RJbnZvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUExODUxMDNEMUI5QUUxMDYwMDc0NEFFQiAvKiBUZXN0SW52b2NhdGlvbkNHLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGNjIyQ0U5MUJCQjNBMUEwMDgzOEFEMyAvKiBUZXN0T3B0aW9ucy5jcHAg
aW4gU291cmNlcyAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411128</attachid>
            <date>2020-10-12 10:31:37 -0700</date>
            <delta_ts>2020-10-12 11:52:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217614-20201012103136.patch</filename>
            <type>text/plain</type>
            <size>92126</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2ODM1NSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDk3IEBACisyMDIwLTEwLTEyICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBTaGFyZSBUZXN0RmVhdHVyZXMgYW5kIFRlc3RDb21tYW5kIGluZnJhc3RydWN0dXJl
IGJldHdlZW4gRHVtcFJlbmRlclRyZWUgYW5kIFdlYktpdFRlc3RSdW5uZXIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzYxNAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtXSVBdCisKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9E
dW1wUmVuZGVyVHJlZS5oOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5jcHA6CisgICAgICAgIChXVFI6OlRl
c3RPcHRpb25zOjprZXlUeXBlTWFwcGluZyk6CisgICAgICAgIChXVFI6OnNldFZhbHVlSWZTZXRJ
bk1hcCk6CisgICAgICAgIChXVFI6OlRlc3RPcHRpb25zOjpUZXN0T3B0aW9ucyk6CisgICAgICAg
IChwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAocGF0aENv
bnRhaW5zKTogRGVsZXRlZC4KKyAgICAgICAgKHNob3VsZER1bXBKU0NvbnNvbGVMb2dJblN0ZEVy
cik6IERlbGV0ZWQuCisgICAgICAgIChUZXN0T3B0aW9uczo6VGVzdE9wdGlvbnMpOiBEZWxldGVk
LgorICAgICAgICAoVGVzdE9wdGlvbnM6OndlYlZpZXdJc0NvbXBhdGlibGVXaXRoT3B0aW9ucyBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlvbnMuaDoK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW06CisgICAgICAg
IChzZXRXZWJQcmVmZXJlbmNlc0ZvclRlc3RPcHRpb25zKToKKyAgICAgICAgKHNldEpTQ09wdGlv
bnMpOgorICAgICAgICAocmVzZXRXZWJWaWV3VG9Db25zaXN0ZW50U3RhdGUpOgorICAgICAgICAo
dGVzdE9wdGlvbnNGb3JUZXN0KToKKyAgICAgICAgKHJ1blRlc3QpOgorICAgICAgICAqIER1bXBS
ZW5kZXJUcmVlL21hYy9VSURlbGVnYXRlLmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFj
L1VJRGVsZWdhdGUubW06CisgICAgICAgICgtW1VJRGVsZWdhdGUgcmVzZXRUb0NvbnNpc3RlbnRT
dGF0ZUJlZm9yZVRlc3Rpbmc6XSk6CisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9DTWFrZUxp
c3RzLnR4dDoKKyAgICAgICAgKiBUZXN0UnVubmVyU2hhcmVkL1Rlc3RDb21tYW5kLmNwcDogQWRk
ZWQuCisgICAgICAgIChXVFI6OkNvbW1hbmRUb2tlbml6ZXI6OkNvbW1hbmRUb2tlbml6ZXIpOgor
ICAgICAgICAoV1RSOjpDb21tYW5kVG9rZW5pemVyOjpwdW1wKToKKyAgICAgICAgKFdUUjo6Q29t
bWFuZFRva2VuaXplcjo6bmV4dCk6CisgICAgICAgIChXVFI6OkNvbW1hbmRUb2tlbml6ZXI6Omhh
c05leHQgY29uc3QpOgorICAgICAgICAoV1RSOjpkaWUpOgorICAgICAgICAoV1RSOjpwYXJzZUlu
cHV0TGluZSk6CisgICAgICAgIChXVFI6OnRlc3RQYXRoKToKKyAgICAgICAgKFdUUjo6dGVzdFVS
TFN0cmluZyk6CisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9UZXN0Q29tbWFuZC5oOiBBZGRl
ZC4KKyAgICAgICAgKiBUZXN0UnVubmVyU2hhcmVkL1Rlc3RGZWF0dXJlcy5jcHA6IEFkZGVkLgor
ICAgICAgICAoV1RSOjptZXJnZSk6CisgICAgICAgIChXVFI6OnBhdGhDb250YWlucyk6CisgICAg
ICAgIChXVFI6OnNob3VsZE1ha2VWaWV3cG9ydEZsZXhpYmxlKToKKyAgICAgICAgKFdUUjo6c2hv
dWxkVXNlRXBoZW1lcmFsU2Vzc2lvbik6CisgICAgICAgIChXVFI6Om92ZXJyaWRlVmlld1dpZHRo
QW5kSGVpZ2h0Rm9yVGVzdCk6CisgICAgICAgIChXVFI6Om92ZXJyaWRlRGV2aWNlU2NhbGVGYWN0
b3JGb3JUZXN0KToKKyAgICAgICAgKFdUUjo6c2hvdWxkRHVtcEpTQ29uc29sZUxvZ0luU3RkRXJy
KToKKyAgICAgICAgKFdUUjo6aGFyZGNvZGVkRmVhdHVyZXNCYXNlZE9uUGF0aEZvclRlc3QpOgor
ICAgICAgICAoV1RSOjpwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUpOgorICAgICAgICAoV1RS
OjpwYXJzZURvdWJsZVRlc3RIZWFkZXJWYWx1ZSk6CisgICAgICAgIChXVFI6OnBhcnNlU3RyaW5n
VGVzdEhlYWRlclZhbHVlQXNSZWxhdGl2ZVBhdGgpOgorICAgICAgICAoV1RSOjpwYXJzZVN0cmlu
Z1Rlc3RIZWFkZXJWYWx1ZUFzVVJMKToKKyAgICAgICAgKFdUUjo6cGFyc2VTdHJpbmdUZXN0SGVh
ZGVyVmFsdWVBc1N0cmluZ1ZlY3Rvcik6CisgICAgICAgIChXVFI6OnBhcnNlVGVzdEhlYWRlcik6
CisgICAgICAgIChXVFI6OmZlYXR1cmVEZWZhdWx0c0Zyb21UZXN0SGVhZGVyRm9yVGVzdCk6Cisg
ICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9UZXN0RmVhdHVyZXMuaDogQWRkZWQuCisgICAgICAg
ICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlRl
c3RDb250cm9sbGVyOjp0ZXN0T3B0aW9uc0ZvclRlc3QgY29uc3QpOgorICAgICAgICAoV1RSOjp0
ZXN0UGF0aCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpydW5UZXN0KToKKyAgICAg
ICAgKFdUUjo6Q29tbWFuZFRva2VuaXplcjo6Q29tbWFuZFRva2VuaXplcik6IERlbGV0ZWQuCisg
ICAgICAgIChXVFI6OkNvbW1hbmRUb2tlbml6ZXI6OnB1bXApOiBEZWxldGVkLgorICAgICAgICAo
V1RSOjpDb21tYW5kVG9rZW5pemVyOjpuZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6Q29t
bWFuZFRva2VuaXplcjo6aGFzTmV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OmRp
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OnBhcnNlSW5wdXRMaW5lKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmg6CisgICAgICAgICogV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0T3B0aW9ucy5jcHA6CisgICAgICAgIChXVFI6OlRlc3RPcHRpb25z
OjprZXlUeXBlTWFwcGluZyk6CisgICAgICAgIChXVFI6OlRlc3RPcHRpb25zOjpoYXNTYW1lSW5p
dGlhbGl6YXRpb25PcHRpb25zIGNvbnN0KToKKyAgICAgICAgKFdUUjo6ZHVtcEZlYXR1cmVzKTog
RGVsZXRlZC4KKyAgICAgICAgKFdUUjo6bWVyZ2UpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpr
ZXlUeXBlTWFwKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6a2V5VHlwZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXVFI6OnBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXVFI6OnBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNSZWxhdGl2ZVBhdGgpOiBEZWxl
dGVkLgorICAgICAgICAoV1RSOjpwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzVVJMKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdUUjo6cGFyc2VUZXN0SGVhZGVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdUUjo6cGF0aENvbnRhaW5zKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6c2hvdWxkTWFrZVZp
ZXdwb3J0RmxleGlibGUpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpzaG91bGRVc2VFcGhlbWVy
YWxTZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6b3ZlcnJpZGVWaWV3V2lkdGhBbmRI
ZWlnaHRGb3JUZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6b3ZlcnJpZGVEZXZpY2VTY2Fs
ZUZhY3RvckZvclRlc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpzaG91bGREdW1wSlNDb25z
b2xlTG9nSW5TdGRFcnIpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpoYXJkY29kZWRGZWF0dXJl
c0Jhc2VkT25QYXRoRm9yVGVzdCk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OmZlYXR1cmVEZWZh
dWx0c0Zyb21UZXN0SGVhZGVyRm9yVGVzdCk6IERlbGV0ZWQuCisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9UZXN0T3B0aW9ucy5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvV2ViS2l0
VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDIwLTEwLTEyICBMdW1p
bmcgWWluICA8bHVtaW5nX3lpbkBhcHBsZS5jb20+CiAKICAgICAgICAgW21hY09TXSBXb3JrYXJv
dW5kIGZvciBNQUNfT1NfWF9WRVJTSU9OX01BSk9SIGluY29ycmVjdGx5IGluY2x1ZGluZyBtaW5v
ciB2ZXJzaW9uIHdoZW4gYnVpbGRpbmcgCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9DTWFr
ZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9DTWFrZUxpc3Rz
LnR4dAkocmV2aXNpb24gMjY4MzU1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvQ01ha2VMaXN0
cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEwLDcgKzEwLDYgQEAgc2V0KER1bXBSZW5kZXJUcmVl
X1NPVVJDRVMKICAgICBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlci5jcHAKICAgICBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50LmNwcAogICAgIEN5Y2xpY1JlZHVuZGFuY3lDaGVjay5jcHAKLSAgICBEdW1w
UmVuZGVyVHJlZUNvbW1vbi5jcHAKICAgICBHQ0NvbnRyb2xsZXIuY3BwCiAgICAgSmF2YVNjcmlw
dFRocmVhZGluZy5jcHAKICAgICBQaXhlbER1bXBTdXBwb3J0LmNwcApJbmRleDogVG9vbHMvRHVt
cFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVu
ZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5oCShyZXZpc2lvbiAyNjgzNTUpCisrKyBUb29scy9EdW1w
UmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxNCArNTQs
MyBAQCBleHRlcm4gUmVmUHRyPFRlc3RSdW5uZXI+IGdUZXN0UnVubmVyOwogdm9pZCBkdW1wKCk7
CiB2b2lkIGRpc3BsYXlXZWJWaWV3KCk7CiB2b2lkIGRpc3BsYXlBbmRUcmFja1JlcGFpbnRzV2Vi
VmlldygpOwotCi1zdHJ1Y3QgVGVzdENvbW1hbmQgewotICAgIHN0ZDo6c3RyaW5nIHBhdGhPclVS
TDsKLSAgICBzdGQ6OnN0cmluZyBhYnNvbHV0ZVBhdGg7Ci0gICAgYm9vbCBzaG91bGREdW1wUGl4
ZWxzIHsgZmFsc2UgfTsKLSAgICBzdGQ6OnN0cmluZyBleHBlY3RlZFBpeGVsSGFzaDsKLSAgICBp
bnQgdGltZW91dCB7IDMwMDAwIH07IC8vIGluIG1zCi0gICAgYm9vbCBkdW1wSlNDb25zb2xlTG9n
SW5TdGRFcnIgeyBmYWxzZSB9OwotfTsKLQotVGVzdENvbW1hbmQgcGFyc2VJbnB1dExpbmUoY29u
c3Qgc3RkOjpzdHJpbmcmKTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJU
cmVlQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVu
ZGVyVHJlZUNvbW1vbi5jcHAJKHJldmlzaW9uIDI2ODM1NSkKKysrIFRvb2xzL0R1bXBSZW5kZXJU
cmVlL0R1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDExNCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCi0KLSNpbmNsdWRlIDxh
bGdvcml0aG0+Ci0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1
ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZz4KLQotY2xhc3MgQ29tbWFuZFRva2VuaXpl
ciB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgQ29tbWFuZFRva2VuaXplcihjb25zdCBzdGQ6OnN0
cmluZyYgaW5wdXQpCi0gICAgICAgIDogbV9pbnB1dChpbnB1dCkKLSAgICAgICAgLCBtX3Bvc05l
eHRTZXBhcmF0b3IoMCkKLSAgICB7Ci0gICAgICAgIHB1bXAoKTsKLSAgICB9Ci0KLSAgICBib29s
IGhhc05leHQoKSBjb25zdDsKLSAgICBzdGQ6OnN0cmluZyBuZXh0KCk7Ci0KLXByaXZhdGU6Ci0g
ICAgdm9pZCBwdW1wKCk7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIga1NlcGFyYXRvciA9ICdcJyc7
Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1faW5wdXQ7Ci0gICAgc3RkOjpzdHJpbmcgbV9uZXh0
OwotICAgIHNpemVfdCBtX3Bvc05leHRTZXBhcmF0b3I7Ci19OwotCi12b2lkIENvbW1hbmRUb2tl
bml6ZXI6OnB1bXAoKQotewotICAgIGlmIChtX3Bvc05leHRTZXBhcmF0b3IgPT0gc3RkOjpzdHJp
bmc6Om5wb3MgfHwgbV9wb3NOZXh0U2VwYXJhdG9yID09IG1faW5wdXQuc2l6ZSgpKSB7Ci0gICAg
ICAgIG1fbmV4dCA9IHN0ZDo6c3RyaW5nKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
c2l6ZV90IHN0YXJ0ID0gbV9wb3NOZXh0U2VwYXJhdG9yID8gbV9wb3NOZXh0U2VwYXJhdG9yICsg
MSA6IDA7Ci0gICAgbV9wb3NOZXh0U2VwYXJhdG9yID0gbV9pbnB1dC5maW5kKGtTZXBhcmF0b3Is
IHN0YXJ0KTsKLSAgICBzaXplX3Qgc2l6ZSA9IG1fcG9zTmV4dFNlcGFyYXRvciA9PSBzdGQ6OnN0
cmluZzo6bnBvcyA/IHN0ZDo6c3RyaW5nOjpucG9zIDogbV9wb3NOZXh0U2VwYXJhdG9yIC0gc3Rh
cnQ7Ci0gICAgbV9uZXh0ID0gc3RkOjpzdHJpbmcobV9pbnB1dCwgc3RhcnQsIHNpemUpOwotfQot
Ci1zdGQ6OnN0cmluZyBDb21tYW5kVG9rZW5pemVyOjpuZXh0KCkKLXsKLSAgICBBU1NFUlQoaGFz
TmV4dCgpKTsKLQotICAgIHN0ZDo6c3RyaW5nIG9sZE5leHQgPSBtX25leHQ7Ci0gICAgcHVtcCgp
OwotICAgIHJldHVybiBvbGROZXh0OwotfQotCi1ib29sIENvbW1hbmRUb2tlbml6ZXI6Omhhc05l
eHQoKSBjb25zdAotewotICAgIHJldHVybiAhbV9uZXh0LmVtcHR5KCk7Ci19Ci0KLU5PX1JFVFVS
TiBzdGF0aWMgdm9pZCBkaWUoY29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0TGluZSkKLXsKLSAgICBm
cHJpbnRmKHN0ZGVyciwgIlVuZXhwZWN0ZWQgaW5wdXQgbGluZTogJXNcbiIsIGlucHV0TGluZS5j
X3N0cigpKTsKLSAgICBleGl0KDEpOwotfQotCi1UZXN0Q29tbWFuZCBwYXJzZUlucHV0TGluZShj
b25zdCBzdGQ6OnN0cmluZyYgaW5wdXRMaW5lKQotewotICAgIFRlc3RDb21tYW5kIHJlc3VsdDsK
LSAgICBDb21tYW5kVG9rZW5pemVyIHRva2VuaXplcihpbnB1dExpbmUpOwotICAgIGlmICghdG9r
ZW5pemVyLmhhc05leHQoKSkKLSAgICAgICAgZGllKGlucHV0TGluZSk7Ci0KLSAgICBzdGQ6OnN0
cmluZyBhcmcgPSB0b2tlbml6ZXIubmV4dCgpOwotICAgIHJlc3VsdC5wYXRoT3JVUkwgPSBhcmc7
Ci0gICAgd2hpbGUgKHRva2VuaXplci5oYXNOZXh0KCkpIHsKLSAgICAgICAgYXJnID0gdG9rZW5p
emVyLm5leHQoKTsKLSAgICAgICAgaWYgKGFyZyA9PSAiLS10aW1lb3V0IikgewotICAgICAgICAg
ICAgc3RkOjpzdHJpbmcgdGltZW91dFRva2VuID0gdG9rZW5pemVyLm5leHQoKTsKLSAgICAgICAg
ICAgIHJlc3VsdC50aW1lb3V0ID0gYXRvaSh0aW1lb3V0VG9rZW4uY19zdHIoKSk7Ci0gICAgICAg
IH0gZWxzZSBpZiAoYXJnID09ICItcCIgfHwgYXJnID09ICItLXBpeGVsLXRlc3QiKSB7Ci0gICAg
ICAgICAgICByZXN1bHQuc2hvdWxkRHVtcFBpeGVscyA9IHRydWU7Ci0gICAgICAgICAgICBpZiAo
dG9rZW5pemVyLmhhc05leHQoKSkKLSAgICAgICAgICAgICAgICByZXN1bHQuZXhwZWN0ZWRQaXhl
bEhhc2ggPSB0b2tlbml6ZXIubmV4dCgpOwotICAgICAgICB9IGVsc2UgaWYgKGFyZyA9PSAiLS1k
dW1wLWpzY29uc29sZWxvZy1pbi1zdGRlcnIiKQotICAgICAgICAgICAgcmVzdWx0LmR1bXBKU0Nv
bnNvbGVMb2dJblN0ZEVyciA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKGFyZyA9PSBzdGQ6OnN0
cmluZygiLS1hYnNvbHV0ZVBhdGgiKSkKLSAgICAgICAgICAgIHJlc3VsdC5hYnNvbHV0ZVBhdGgg
PSB0b2tlbml6ZXIubmV4dCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkaWUoaW5wdXRM
aW5lKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQpJbmRleDogVG9vbHMvRHVtcFJl
bmRlclRyZWUvVGVzdE9wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJU
cmVlL1Rlc3RPcHRpb25zLmNwcAkocmV2aXNpb24gMjY4MzU1KQorKysgVG9vbHMvRHVtcFJlbmRl
clRyZWUvVGVzdE9wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNDAgKzI2LDg1IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdE9wdGlvbnMuaCIKIAorI2luY2x1
ZGUgIlRlc3RGZWF0dXJlcy5oIgogI2luY2x1ZGUgPGZzdHJlYW0+CiAjaW5jbHVkZSA8c3RyaW5n
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCi1zdGF0aWMgYm9vbCBwYXJzZUJv
b2xlYW5UZXN0SGVhZGVyVmFsdWUoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKQotewotICAgIGlm
ICh2YWx1ZSA9PSAidHJ1ZSIpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICh2YWx1ZSA9
PSAiZmFsc2UiKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBMT0dfRVJST1IoIkZvdW5k
IHVuZXhwZWN0ZWQgdmFsdWUgJyVzJyBmb3IgYm9vbGVhbiBvcHRpb24uIEV4cGVjdGVkICd0cnVl
JyBvciAnZmFsc2UnLiIsIHZhbHVlLmNfc3RyKCkpOwotICAgIHJldHVybiBmYWxzZTsKLX0KK25h
bWVzcGFjZSBXVFIgewogCi1zdGF0aWMgYm9vbCBwYXRoQ29udGFpbnMoY29uc3Qgc3RkOjpzdHJp
bmcmIHBhdGhPclVSTCwgY29uc3QgY2hhciogc3Vic3RyaW5nKQorY29uc3Qgc3RkOjp1bm9yZGVy
ZWRfbWFwPHN0ZDo6c3RyaW5nLCBUZXN0SGVhZGVyS2V5VHlwZT4mIFRlc3RPcHRpb25zOjprZXlU
eXBlTWFwcGluZygpCiB7Ci0gICAgU3RyaW5nIHBhdGgocGF0aE9yVVJMLmNfc3RyKCkpOwotICAg
IHJldHVybiBwYXRoLmNvbnRhaW5zKHN1YnN0cmluZyk7Ci19CisgICAgc3RhdGljIHN0ZDo6dW5v
cmRlcmVkX21hcDxzdGQ6OnN0cmluZywgVGVzdEhlYWRlcktleVR5cGU+IG1hcCB7CisgICAgICAg
IHsgImFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzIiwgVGVz
dEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiYWxsb3dUb3BOYXZpZ2F0aW9uVG9E
YXRhVVJMcyIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImR1bXBKU0Nv
bnNvbGVMb2dJblN0ZEVyciIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsg
ImVuYWJsZUF0dGFjaG1lbnRFbGVtZW50IiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAg
ICAgICAgeyAiZW5hYmxlQmFja0ZvcndhcmRDYWNoZSIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29s
IH0sCisgICAgICAgIHsgImVuYWJsZUNvbG9yRmlsdGVyIiwgVGVzdEhlYWRlcktleVR5cGU6OkJv
b2wgfSwKKyAgICAgICAgeyAiZW5hYmxlRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTG9hZCIsIFRlc3RI
ZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUluc3BlY3RvckFkZGl0aW9u
cyIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUludGVyc2Vj
dGlvbk9ic2VydmVyIiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5h
YmxlS2V5Z2VuRWxlbWVudCIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsg
ImVuYWJsZU1lbnVJdGVtRWxlbWVudCIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAg
ICAgIHsgImVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9v
bCB9LAorICAgICAgICB7ICJlbmFibGVQb2ludGVyTG9jayIsIFRlc3RIZWFkZXJLZXlUeXBlOjpC
b29sIH0sCisgICAgICAgIHsgImxheWVyQmFja2VkV2ViVmlldyIsIFRlc3RIZWFkZXJLZXlUeXBl
OjpCb29sIH0sCisgICAgICAgIHsgInVzZUFjY2VsZXJhdGVkRHJhd2luZyIsIFRlc3RIZWFkZXJL
ZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInVzZUVwaGVtZXJhbFNlc3Npb24iLCBUZXN0SGVh
ZGVyS2V5VHlwZTo6Qm9vbCB9LAorCisgICAgICAgIHsgImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFn
ZVR5cGVzIiwgVGVzdEhlYWRlcktleVR5cGU6OlN0cmluZyB9LAorICAgICAgICB7ICJqc2NPcHRp
b25zIiwgVGVzdEhlYWRlcktleVR5cGU6OlN0cmluZyB9LAorICAgIH07CiAKLXN0YXRpYyBib29s
IHNob3VsZER1bXBKU0NvbnNvbGVMb2dJblN0ZEVycihjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9y
VVJMKQotewotICAgIHJldHVybiBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4
MDAvYmVhY29uIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL2Jl
YWNvbiIpCi0gICAgICAgIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgw
MC9jb3JzIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL2NvcnMi
KQotICAgICAgICB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvZmV0
Y2giKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMvZmV0Y2giKQot
ICAgICAgICB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvc2Vydmlj
ZS13b3JrZXJzIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3Nl
cnZpY2Utd29ya2VycyIpCi0gICAgICAgIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2Nh
bGhvc3Q6ODgwMC9zdHJlYW1zL3dyaXRhYmxlLXN0cmVhbXMiKSB8fCBwYXRoQ29udGFpbnMocGF0
aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMvc3RyZWFtcy93cml0YWJsZS1zdHJlYW1zIikKLSAgICAg
ICAgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo4ODAwL3N0cmVhbXMvcGlw
aW5nIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3N0cmVhbXMv
cGlwaW5nIikKLSAgICAgICAgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo4
ODAwL3hociIpIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6OTQ0My94aHIi
KQotICAgICAgICB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvd2Vi
cnRjIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3dlYnJ0YyIp
Ci0gICAgICAgIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgwMC93ZWJz
b2NrZXRzIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3dlYnNv
Y2tldHMiKTsKKyAgICByZXR1cm4gbWFwOwogfQogCi1UZXN0T3B0aW9uczo6VGVzdE9wdGlvbnMo
Y29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCwgY29uc3Qgc3RkOjpzdHJpbmcmIGFic29sdXRl
UGF0aCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdGF0aWMgdm9pZCBzZXRWYWx1ZUlmU2V0SW5N
YXAoVCYgdmFsdWVUb1NldCwgc3RkOjpzdHJpbmcga2V5LCBjb25zdCBzdGQ6OnVub3JkZXJlZF9t
YXA8c3RkOjpzdHJpbmcsIFQ+JiBtYXApCiB7Ci0gICAgY29uc3QgYXV0byYgcGF0aCA9IGFic29s
dXRlUGF0aC5lbXB0eSgpID8gcGF0aE9yVVJMIDogYWJzb2x1dGVQYXRoOwotICAgIGlmIChwYXRo
LmVtcHR5KCkpCisgICAgYXV0byBpdCA9IG1hcC5maW5kKGtleSk7CisgICAgaWYgKGl0ID09IG1h
cC5lbmQoKSkKICAgICAgICAgcmV0dXJuOworICAgIHZhbHVlVG9TZXQgPSBpdC0+c2Vjb25kOwor
fQogCi0gICAgZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyID0gc2hvdWxkRHVtcEpTQ29uc29sZUxv
Z0luU3RkRXJyKHBhdGhPclVSTCk7Ci0KLSAgICBzdGQ6OnN0cmluZyBvcHRpb25zOwotICAgIHN0
ZDo6aWZzdHJlYW0gdGVzdEZpbGUocGF0aC5kYXRhKCkpOwotICAgIGlmICghdGVzdEZpbGUuZ29v
ZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgZ2V0bGluZSh0ZXN0RmlsZSwgb3B0aW9ucyk7Ci0g
ICAgc3RkOjpzdHJpbmcgYmVnaW5TdHJpbmcoIndlYmtpdC10ZXN0LXJ1bm5lciBbICIpOwotICAg
IHN0ZDo6c3RyaW5nIGVuZFN0cmluZygiIF0iKTsKLSAgICBzaXplX3QgYmVnaW5Mb2NhdGlvbiA9
IG9wdGlvbnMuZmluZChiZWdpblN0cmluZyk7Ci0gICAgaWYgKGJlZ2luTG9jYXRpb24gPT0gc3Rk
OjpzdHJpbmc6Om5wb3MpCi0gICAgICAgIHJldHVybjsKLSAgICBzaXplX3QgZW5kTG9jYXRpb24g
PSBvcHRpb25zLmZpbmQoZW5kU3RyaW5nLCBiZWdpbkxvY2F0aW9uKTsKLSAgICBpZiAoZW5kTG9j
YXRpb24gPT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBu
b3QgZmluZCBlbmQgb2YgdGVzdCBoZWFkZXIgaW4gJXMiLCBwYXRoLmNfc3RyKCkpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIHN0ZDo6c3RyaW5nIHBhaXJTdHJpbmcgPSBvcHRpb25zLnN1
YnN0cihiZWdpbkxvY2F0aW9uICsgYmVnaW5TdHJpbmcuc2l6ZSgpLCBlbmRMb2NhdGlvbiAtIChi
ZWdpbkxvY2F0aW9uICsgYmVnaW5TdHJpbmcuc2l6ZSgpKSk7Ci0gICAgc2l6ZV90IHBhaXJTdGFy
dCA9IDA7Ci0gICAgd2hpbGUgKHBhaXJTdGFydCA8IHBhaXJTdHJpbmcuc2l6ZSgpKSB7Ci0gICAg
ICAgIHNpemVfdCBwYWlyRW5kID0gcGFpclN0cmluZy5maW5kKCIgIiwgcGFpclN0YXJ0KTsKLSAg
ICAgICAgaWYgKHBhaXJFbmQgPT0gc3RkOjpzdHJpbmc6Om5wb3MpCi0gICAgICAgICAgICBwYWly
RW5kID0gcGFpclN0cmluZy5zaXplKCk7Ci0gICAgICAgIHNpemVfdCBlcXVhbHNMb2NhdGlvbiA9
IHBhaXJTdHJpbmcuZmluZCgiPSIsIHBhaXJTdGFydCk7Ci0gICAgICAgIGlmIChlcXVhbHNMb2Nh
dGlvbiA9PSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJNYWxm
b3JtZWQgb3B0aW9uIGluIHRlc3QgaGVhZGVyIChjb3VsZCBub3QgZmluZCAnPScgY2hhcmFjdGVy
KSBpbiAlcyIsIHBhdGguY19zdHIoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBhdXRvIGtleSA9IHBhaXJTdHJpbmcuc3Vic3RyKHBhaXJTdGFydCwgZXF1YWxzTG9j
YXRpb24gLSBwYWlyU3RhcnQpOwotICAgICAgICBhdXRvIHZhbHVlID0gcGFpclN0cmluZy5zdWJz
dHIoZXF1YWxzTG9jYXRpb24gKyAxLCBwYWlyRW5kIC0gKGVxdWFsc0xvY2F0aW9uICsgMSkpOwot
ICAgICAgICBpZiAoa2V5ID09ICJlbmFibGVBdHRhY2htZW50RWxlbWVudCIpCi0gICAgICAgICAg
ICBlbmFibGVBdHRhY2htZW50RWxlbWVudCA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2
YWx1ZSk7Ci0gICAgICAgIGlmIChrZXkgPT0gInVzZUFjY2VsZXJhdGVkRHJhd2luZyIpCi0gICAg
ICAgICAgICB1c2VBY2NlbGVyYXRlZERyYXdpbmcgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFs
dWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUludGVyc2VjdGlvbk9i
c2VydmVyIikKLSAgICAgICAgICAgIGVuYWJsZUludGVyc2VjdGlvbk9ic2VydmVyID0gcGFyc2VC
b29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJ1
c2VFcGhlbWVyYWxTZXNzaW9uIikKLSAgICAgICAgICAgIHVzZUVwaGVtZXJhbFNlc3Npb24gPSBw
YXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkg
PT0gImVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUiKQotICAgICAgICAgICAgZW5hYmxlQmFja0Zvcndh
cmRDYWNoZSA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVs
c2UgaWYgKGtleSA9PSAiZW5hYmxlTWVudUl0ZW1FbGVtZW50IikKLSAgICAgICAgICAgIGVuYWJs
ZU1lbnVJdGVtRWxlbWVudCA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0g
ICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlS2V5Z2VuRWxlbWVudCIpCi0gICAgICAgICAg
ICBlbmFibGVLZXlnZW5FbGVtZW50ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVl
KTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzIikK
LSAgICAgICAgICAgIGVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMgPSBwYXJzZUJvb2xlYW5UZXN0
SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZVBvaW50
ZXJMb2NrIikKLSAgICAgICAgICAgIGVuYWJsZVBvaW50ZXJMb2NrID0gcGFyc2VCb29sZWFuVGVz
dEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVEcmFn
RGVzdGluYXRpb25BY3Rpb25Mb2FkIikKLSAgICAgICAgICAgIGVuYWJsZURyYWdEZXN0aW5hdGlv
bkFjdGlvbkxvYWQgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAg
ICBlbHNlIGlmIChrZXkgPT0gImxheWVyQmFja2VkV2ViVmlldyIpCi0gICAgICAgICAgICBsYXll
ckJhY2tlZFdlYlZpZXcgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAg
ICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUluc3BlY3RvckFkZGl0aW9ucyIpCi0gICAgICAg
ICAgICBlbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFs
dWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImR1bXBKU0NvbnNvbGVMb2dJblN0
ZEVyciIpCi0gICAgICAgICAgICBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgPSBwYXJzZUJvb2xl
YW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImFsbG93
Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzIikKLSAgICAgICAgICAg
IGFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzID0gcGFyc2VC
b29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJp
bnRlcm5hbDpzZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCIpCi0gICAgICAg
ICAgICBlbmFibGVTZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzID0gcGFyc2VCb29sZWFu
VGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVD
b2xvckZpbHRlciIpCi0gICAgICAgICAgICBlbmFibGVDb2xvckZpbHRlciA9IHBhcnNlQm9vbGVh
blRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAianNjT3B0
aW9ucyIpCi0gICAgICAgICAgICBqc2NPcHRpb25zID0gdmFsdWU7Ci0gICAgICAgIGVsc2UgaWYg
KGtleSA9PSAiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMiKQotICAgICAgICAgICAgYWRk
aXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMgPSB2YWx1ZTsKLSAgICAgICAgZWxzZSBpZiAoa2V5
ID09ICJleHBlcmltZW50YWw6V2ViR1BVRW5hYmxlZCIpCi0gICAgICAgICAgICBlbmFibGVXZWJH
UFUgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlm
IChrZXkgPT0gImludGVybmFsOkNTU0xvZ2ljYWxFbmFibGVkIikKLSAgICAgICAgICAgIGVuYWJs
ZUNTU0xvZ2ljYWwgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAg
ICBlbHNlIGlmIChrZXkgPT0gImludGVybmFsOkxpbmVIZWlnaHRVbml0c0VuYWJsZWQiKQotICAg
ICAgICAgICAgZW5hYmxlTGluZUhlaWdodFVuaXRzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZh
bHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJleHBlcmltZW50YWw6QWRDbGlj
a0F0dHJpYnV0aW9uRW5hYmxlZCIpCi0gICAgICAgICAgICBhZENsaWNrQXR0cmlidXRpb25FbmFi
bGVkID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBp
ZiAoa2V5ID09ICJleHBlcmltZW50YWw6UmVzaXplT2JzZXJ2ZXJFbmFibGVkIikKLSAgICAgICAg
ICAgIGVuYWJsZVJlc2l6ZU9ic2VydmVyID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZh
bHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJleHBlcmltZW50YWw6Q1NTT01WaWV3U21v
b3RoU2Nyb2xsaW5nRW5hYmxlZCIpCi0gICAgICAgICAgICBlbmFibGVDU1NPTVZpZXdTbW9vdGhT
Y3JvbGxpbmcgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBl
bHNlIGlmIChrZXkgPT0gImV4cGVyaW1lbnRhbDpDb3JlTWF0aE1MRW5hYmxlZCIpCi0gICAgICAg
ICAgICBlbmFibGVDb3JlTWF0aE1MID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVl
KTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJleHBlcmltZW50YWw6UmVxdWVzdElkbGVDYWxs
YmFja0VuYWJsZWQiKQotICAgICAgICAgICAgZW5hYmxlUmVxdWVzdElkbGVDYWxsYmFjayA9IHBh
cnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9
PSAiZXhwZXJpbWVudGFsOkFzeW5jQ2xpcGJvYXJkQVBJRW5hYmxlZCIpCi0gICAgICAgICAgICBl
bmFibGVBc3luY0NsaXBib2FyZEFQSSA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1
ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiaW50ZXJuYWw6TGF5b3V0Rm9ybWF0dGluZ0Nv
bnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQiKQotICAgICAgICAgICAgbGF5b3V0Rm9ybWF0dGluZ0Nv
bnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFs
dWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImV4cGVyaW1lbnRhbDpBc3BlY3RSYXRpb09m
SW1nRnJvbVdpZHRoQW5kSGVpZ2h0RW5hYmxlZCIpCi0gICAgICAgICAgICBlbmFibGVBc3BlY3RS
YXRpb09mSW1nRnJvbVdpZHRoQW5kSGVpZ2h0ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVl
KHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJhbGxvd1RvcE5hdmlnYXRpb25Ub0Rh
dGFVUkxzIikKLSAgICAgICAgICAgIGFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMgPSBwYXJz
ZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0g
ImV4cGVyaW1lbnRhbDpDb250YWN0UGlja2VyQVBJRW5hYmxlZCIpCi0gICAgICAgICAgICBlbmFi
bGVDb250YWN0UGlja2VyQVBJID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsK
LSAgICAgICAgcGFpclN0YXJ0ID0gcGFpckVuZCArIDE7Ci0gICAgfQorVGVzdE9wdGlvbnM6OlRl
c3RPcHRpb25zKFRlc3RGZWF0dXJlcyB0ZXN0RmVhdHVyZXMpCit7CisgICAgc2V0VmFsdWVJZlNl
dEluTWFwKGFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzLCAi
YWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMiLCB0ZXN0RmVh
dHVyZXMuYm9vbEZlYXR1cmVzKTsKKyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoYWxsb3dUb3BOYXZp
Z2F0aW9uVG9EYXRhVVJMcywgImFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMiLCB0ZXN0RmVh
dHVyZXMuYm9vbEZlYXR1cmVzKTsKKyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZHVtcEpTQ29uc29s
ZUxvZ0luU3RkRXJyLCAiZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIiwgdGVzdEZlYXR1cmVzLmJv
b2xGZWF0dXJlcyk7CisgICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUF0dGFjaG1lbnRFbGVt
ZW50LCAiZW5hYmxlQXR0YWNobWVudEVsZW1lbnQiLCB0ZXN0RmVhdHVyZXMuYm9vbEZlYXR1cmVz
KTsKKyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlQmFja0ZvcndhcmRDYWNoZSwgImVuYWJs
ZUJhY2tGb3J3YXJkQ2FjaGUiLCB0ZXN0RmVhdHVyZXMuYm9vbEZlYXR1cmVzKTsKKyAgICBzZXRW
YWx1ZUlmU2V0SW5NYXAoZW5hYmxlQ29sb3JGaWx0ZXIsICJlbmFibGVDb2xvckZpbHRlciIsIHRl
c3RGZWF0dXJlcy5ib29sRmVhdHVyZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVE
cmFnRGVzdGluYXRpb25BY3Rpb25Mb2FkLCAiZW5hYmxlRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTG9h
ZCIsIHRlc3RGZWF0dXJlcy5ib29sRmVhdHVyZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChl
bmFibGVJbnNwZWN0b3JBZGRpdGlvbnMsICJlbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMiLCB0ZXN0
RmVhdHVyZXMuYm9vbEZlYXR1cmVzKTsKKyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlSW50
ZXJzZWN0aW9uT2JzZXJ2ZXIsICJlbmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlciIsIHRlc3RGZWF0
dXJlcy5ib29sRmVhdHVyZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVLZXlnZW5F
bGVtZW50LCAiZW5hYmxlS2V5Z2VuRWxlbWVudCIsIHRlc3RGZWF0dXJlcy5ib29sRmVhdHVyZXMp
OworICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVNZW51SXRlbUVsZW1lbnQsICJlbmFibGVN
ZW51SXRlbUVsZW1lbnQiLCB0ZXN0RmVhdHVyZXMuYm9vbEZlYXR1cmVzKTsKKyAgICBzZXRWYWx1
ZUlmU2V0SW5NYXAoZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scywgImVuYWJsZU1vZGVybk1lZGlh
Q29udHJvbHMiLCB0ZXN0RmVhdHVyZXMuYm9vbEZlYXR1cmVzKTsKKyAgICBzZXRWYWx1ZUlmU2V0
SW5NYXAoZW5hYmxlUG9pbnRlckxvY2ssICJlbmFibGVQb2ludGVyTG9jayIsIHRlc3RGZWF0dXJl
cy5ib29sRmVhdHVyZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChsYXllckJhY2tlZFdlYlZp
ZXcsICJsYXllckJhY2tlZFdlYlZpZXciLCB0ZXN0RmVhdHVyZXMuYm9vbEZlYXR1cmVzKTsKKyAg
ICBzZXRWYWx1ZUlmU2V0SW5NYXAodXNlQWNjZWxlcmF0ZWREcmF3aW5nLCAidXNlQWNjZWxlcmF0
ZWREcmF3aW5nIiwgdGVzdEZlYXR1cmVzLmJvb2xGZWF0dXJlcyk7CisgICAgc2V0VmFsdWVJZlNl
dEluTWFwKHVzZUVwaGVtZXJhbFNlc3Npb24sICJ1c2VFcGhlbWVyYWxTZXNzaW9uIiwgdGVzdEZl
YXR1cmVzLmJvb2xGZWF0dXJlcyk7CisKKyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoYWRkaXRpb25h
bFN1cHBvcnRlZEltYWdlVHlwZXMsICJhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyIsIHRl
c3RGZWF0dXJlcy5zdHJpbmdGZWF0dXJlcyk7CisgICAgc2V0VmFsdWVJZlNldEluTWFwKGpzY09w
dGlvbnMsICJqc2NPcHRpb25zIiwgdGVzdEZlYXR1cmVzLnN0cmluZ0ZlYXR1cmVzKTsKKworICAg
IHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVDU1NMb2dpY2FsLCAiQ1NTTG9naWNhbEVuYWJsZWQi
LCB0ZXN0RmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzKTsKKyAgICBzZXRWYWx1ZUlmU2V0
SW5NYXAoZW5hYmxlTGluZUhlaWdodFVuaXRzLCAiTGluZUhlaWdodFVuaXRzRW5hYmxlZCIsIHRl
c3RGZWF0dXJlcy5pbnRlcm5hbERlYnVnRmVhdHVyZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1h
cChlbmFibGVTZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzLCAic2VsZWN0aW9uQWNyb3Nz
U2hhZG93Qm91bmRhcmllc0VuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1
cmVzKTsKKyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAobGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRJbnRl
Z3JhdGlvbkVuYWJsZWQsICJMYXlvdXRGb3JtYXR0aW5nQ29udGV4dEludGVncmF0aW9uRW5hYmxl
ZCIsIHRlc3RGZWF0dXJlcy5pbnRlcm5hbERlYnVnRmVhdHVyZXMpOworCisgICAgc2V0VmFsdWVJ
ZlNldEluTWFwKGFkQ2xpY2tBdHRyaWJ1dGlvbkVuYWJsZWQsICJBZENsaWNrQXR0cmlidXRpb25F
bmFibGVkIiwgdGVzdEZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzKTsKKyAgICBzZXRWYWx1
ZUlmU2V0SW5NYXAoZW5hYmxlQXNwZWN0UmF0aW9PZkltZ0Zyb21XaWR0aEFuZEhlaWdodCwgIkFz
cGVjdFJhdGlvT2ZJbWdGcm9tV2lkdGhBbmRIZWlnaHRFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmV4
cGVyaW1lbnRhbEZlYXR1cmVzKTsKKyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlQXN5bmND
bGlwYm9hcmRBUEksICJBc3luY0NsaXBib2FyZEFQSUVuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuZXhw
ZXJpbWVudGFsRmVhdHVyZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVDU1NPTVZp
ZXdTbW9vdGhTY3JvbGxpbmcsICJDU1NPTVZpZXdTbW9vdGhTY3JvbGxpbmdFbmFibGVkIiwgdGVz
dEZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzKTsKKyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAo
ZW5hYmxlQ29udGFjdFBpY2tlckFQSSwgIkNvbnRhY3RQaWNrZXJBUElFbmFibGVkIiwgdGVzdEZl
YXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzKTsKKyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5h
YmxlQ29yZU1hdGhNTCwgIldlYkdQVUVuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuZXhwZXJpbWVudGFs
RmVhdHVyZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVSZXF1ZXN0SWRsZUNhbGxi
YWNrLCAiUmVxdWVzdElkbGVDYWxsYmFja0VuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuZXhwZXJpbWVu
dGFsRmVhdHVyZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVSZXNpemVPYnNlcnZl
ciwgIlJlc2l6ZU9ic2VydmVyRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0
dXJlcyk7CisgICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZVdlYkdQVSwgIkNvcmVNYXRoTUxF
bmFibGVkIiwgdGVzdEZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzKTsKKyAgICBzZXRWYWx1
ZUlmU2V0SW5NYXAoZW5hYmxlV2ViR1BVLCAiV2ViR1BVRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5l
eHBlcmltZW50YWxGZWF0dXJlcyk7CiB9CiAKIGJvb2wgVGVzdE9wdGlvbnM6OndlYlZpZXdJc0Nv
bXBhdGlibGVXaXRoT3B0aW9ucyhjb25zdCBUZXN0T3B0aW9ucyYgb3RoZXIpIGNvbnN0CkBAIC0x
NjcsMyArMTEyLDUgQEAgYm9vbCBUZXN0T3B0aW9uczo6d2ViVmlld0lzQ29tcGF0aWJsZVdpdAog
ICAgIHJldHVybiBvdGhlci5sYXllckJhY2tlZFdlYlZpZXcgPT0gbGF5ZXJCYWNrZWRXZWJWaWV3
CiAgICAgICAgICYmIG90aGVyLmpzY09wdGlvbnMgPT0ganNjT3B0aW9uczsKIH0KKworfQpJbmRl
eDogVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9EdW1wUmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5oCShyZXZpc2lvbiAyNjgzNTUpCisrKyBUb29s
cy9EdW1wUmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsy
NSwxMSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIlRlc3RGZWF0dXJlcy5oIgogI2lu
Y2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorCituYW1lc3BhY2UgV1RS
IHsKIAogc3RydWN0IFRlc3RPcHRpb25zIHsKICAgICBib29sIGVuYWJsZUF0dGFjaG1lbnRFbGVt
ZW50IHsgZmFsc2UgfTsKQEAgLTYxLDYgKzY1LDExIEBAIHN0cnVjdCBUZXN0T3B0aW9ucyB7CiAg
ICAgc3RkOjpzdHJpbmcganNjT3B0aW9uczsKICAgICBzdGQ6OnN0cmluZyBhZGRpdGlvbmFsU3Vw
cG9ydGVkSW1hZ2VUeXBlczsKIAotICAgIFRlc3RPcHRpb25zKGNvbnN0IHN0ZDo6c3RyaW5nJiBw
YXRoT3JVUkwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBhYnNvbHV0ZVBhdGgpOworICAgIGV4cGxpY2l0
IFRlc3RPcHRpb25zKFRlc3RGZWF0dXJlcyk7CiAgICAgYm9vbCB3ZWJWaWV3SXNDb21wYXRpYmxl
V2l0aE9wdGlvbnMoY29uc3QgVGVzdE9wdGlvbnMmKSBjb25zdDsKKyAgICAKKyAgICBzdGF0aWMg
Y29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBUZXN0SGVhZGVyS2V5VHlwZT4m
IGtleVR5cGVNYXBwaW5nKCk7CiB9OworCit9CisKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVl
L0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMjY4MzU1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRl
clRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA5LDEx
ICsxMDksMTIgQEAKIAkJNURCOUFDOUUwRjcyMkMzNjAwNjg0NjQxIC8qIFdlYktpdFdlaWdodFdh
dGNoZXI3MDAudHRmIGluIENvcHkgRm9udCBGaWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzNzVGMDk3NzBEQUMzQ0I2MDBDOEI0RTUgLyogV2ViS2l0V2VpZ2h0V2F0Y2hl
cjcwMC50dGYgKi87IH07CiAJCTVEQjlBQzlGMEY3MjJDMzYwMDY4NDY0MSAvKiBXZWJLaXRXZWln
aHRXYXRjaGVyODAwLnR0ZiBpbiBDb3B5IEZvbnQgRmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzc1RjA5NzgwREFDM0NCNjAwQzhCNEU1IC8qIFdlYktpdFdlaWdodFdh
dGNoZXI4MDAudHRmICovOyB9OwogCQk1REI5QUNBMDBGNzIyQzM2MDA2ODQ2NDEgLyogV2ViS2l0
V2VpZ2h0V2F0Y2hlcjkwMC50dGYgaW4gQ29weSBGb250IEZpbGVzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDM3NUYwOTc5MERBQzNDQjYwMEM4QjRFNSAvKiBXZWJLaXRXZWln
aHRXYXRjaGVyOTAwLnR0ZiAqLzsgfTsKKwkJN0NGRjlCQkYyNTMzQkIyNDAwMDgwMDlGIC8qIFRl
c3RGZWF0dXJlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3Q0ZGOUJCRTI1MzNCQjI0MDAwODAwOUYgLyogVGVzdEZlYXR1cmVzLmNwcCAqLzsgfTsK
KwkJN0NGRjlCQzIyNTMzQkMxNjAwMDgwMDlGIC8qIFRlc3RDb21tYW5kLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRkY5QkMxMjUzM0JDMTYwMDA4
MDA5RiAvKiBUZXN0Q29tbWFuZC5jcHAgKi87IH07CiAJCTgwMDQ1QUVFMTQ3NzE4RTcwMDgyOTBB
OCAvKiBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgwMDQ1QUVDMTQ3NzE4RTcwMDgyOTBBOCAv
KiBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbSAqLzsgfTsKIAkJODQ2NUUyQzcw
RkZBOERGMjAwM0I4MzQyIC8qIFBpeGVsRHVtcFN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ2NUUyQzYwRkZBOERGMjAwM0I4MzQyIC8q
IFBpeGVsRHVtcFN1cHBvcnQuY3BwICovOyB9OwogCQk5M0M3ODgyNjI1MEM2RDNBMDBDMEFBMjQg
LyogUmVmdGVzdEZ1bmN0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5M0M3ODgyNDI1MEM2RDM5MDBDMEFBMjQgLyogUmVmdGVzdEZ1bmN0aW9u
cy5jcHAgKi87IH07CiAJCTkzQzc4ODJFMjUwQzcxNzIwMEMwQUEyNCAvKiBKU0Jhc2ljcy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0M3ODgyOTI1
MEM3MTM0MDBDMEFBMjQgLyogSlNCYXNpY3MuY3BwICovOyB9OwotCQk5ODMwRjMxRjE1QzgxMTgx
MDA1QUIyMDYgLyogRHVtcFJlbmRlclRyZWVDb21tb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTgzMEYzMUUxNUM4MTE4MTAwNUFCMjA2IC8qIER1
bXBSZW5kZXJUcmVlQ29tbW9uLmNwcCAqLzsgfTsKIAkJQTExNThENTgxODkyNzQwQzAwODhDMTdC
IC8qIER1bXBSZW5kZXJUcmVlQnJvd3NlclZpZXcubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTE1OEQ1NjE4OTI3M0VCMDA4OEMxN0IgLyogRHVtcFJl
bmRlclRyZWVCcm93c2VyVmlldy5tbSAqLzsgfTsKIAkJQTExNThENTkxODkyNzQzNjAwODhDMTdC
IC8qIFBpeGVsRHVtcFN1cHBvcnRJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMTE1OEQ1NzE4OTI3M0VCMDA4OEMxN0IgLyogUGl4ZWxEdW1wU3Vw
cG9ydElPUy5tbSAqLzsgfTsKIAkJQTEzNEU1MzExODhGQzI3MDAwOTAxRDA2IC8qIER1bXBSZW5k
ZXJUcmVlTWFpbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEExMzRFNTJGMTg4RkMyNzAwMDkwMUQwNiAvKiBEdW1wUmVuZGVyVHJlZU1haW4ubW0gKi87
IH07CkBAIC0zMzAsNiArMzMxLDEwIEBACiAJCTUzQ0JCODMxMTM0RTQyRjMwMDFDRTZBNCAvKiBD
eWNsaWNSZWR1bmRhbmN5Q2hlY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q3ljbGljUmVkdW5kYW5jeUNoZWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVE
RThBRTQzMTNBMkMxNTgwMEQ2QTM3RCAvKiBsaWJXZWJDb3JlVGVzdFN1cHBvcnQuZHlsaWIgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSAiY29tcGlsZWQu
bWFjaC1vLmR5bGliIjsgcGF0aCA9IGxpYldlYkNvcmVUZXN0U3VwcG9ydC5keWxpYjsgc291cmNl
VHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJN0NCQkMzMjIxRERGQ0Y5QTAwNzg2QjlE
IC8qIFRlc3RPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRlc3RP
cHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDRkY5QkJEMjUzM0JCMjQw
MDA4MDA5RiAvKiBUZXN0RmVhdHVyZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVzdEZlYXR1cmVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDRkY5QkJFMjUzM0JCMjQwMDA4MDA5RiAv
KiBUZXN0RmVhdHVyZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGVzdEZlYXR1cmVzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NGRjlCQzAyNTMzQkMxNjAwMDgwMDlGIC8q
IFRlc3RDb21tYW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRlc3RDb21tYW5kLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTdDRkY5QkMxMjUzM0JDMTYwMDA4MDA5RiAvKiBUZXN0Q29tbWFu
ZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXN0Q29tbWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTgwMDQ1QUVCMTQ3NzE4RTcwMDgyOTBBOCAvKiBBY2Nlc3NpYmlsaXR5
Tm90aWZpY2F0aW9uSGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBB
Y2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oOyBwYXRoID0gbWFjL0FjY2Vzc2liaWxp
dHlOb3RpZmljYXRpb25IYW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgw
MDQ1QUVDMTQ3NzE4RTcwMDgyOTBBOCAvKiBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxl
ci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IEFjY2Vzc2liaWxp
dHlOb3RpZmljYXRpb25IYW5kbGVyLm1tOyBwYXRoID0gbWFjL0FjY2Vzc2liaWxpdHlOb3RpZmlj
YXRpb25IYW5kbGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDY1RTJDNjBG
RkE4REYyMDAzQjgzNDIgLyogUGl4ZWxEdW1wU3VwcG9ydC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUGl4ZWxEdW1wU3VwcG9ydC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0zMzksNyArMzQ0LDYgQEAKIAkJOTNDNzg4MjUyNTBDNkQzOTAwQzBB
QTI0IC8qIFJlZnRlc3RGdW5jdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVmdGVzdEZ1bmN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0M3
ODgyOTI1MEM3MTM0MDBDMEFBMjQgLyogSlNCYXNpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNCYXNpY3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0M3ODgyQjI1MEM3
MTM0MDBDMEFBMjQgLyogSlNCYXNpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNCYXNpY3MuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTgzMEYzMUUxNUM4MTE4MTAwNUFCMjA2IC8qIER1
bXBSZW5kZXJUcmVlQ29tbW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IER1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTExMDNCNUIxODkyNDk4RjAwNzM4Qzg3IC8qIExheW91dFRlc3RIZWxwZXIueGNjb25maWcg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lnhj
Y29uZmlnOyBuYW1lID0gTGF5b3V0VGVzdEhlbHBlci54Y2NvbmZpZzsgcGF0aCA9IG1hYy9Db25m
aWd1cmF0aW9ucy9MYXlvdXRUZXN0SGVscGVyLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBMTE1OEQ1NTE4OTI3M0VCMDA4OEMxN0IgLyogRHVtcFJlbmRlclRyZWVCcm93
c2VyVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBEdW1wUmVuZGVyVHJlZUJyb3dzZXJWaWV3Lmg7IHBh
dGggPSBpb3MvRHVtcFJlbmRlclRyZWVCcm93c2VyVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBMTE1OEQ1NjE4OTI3M0VCMDA4OEMxN0IgLyogRHVtcFJlbmRlclRyZWVCcm93
c2VyVmlldy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IER1bXBSZW5kZXJUcmVlQnJvd3NlclZp
ZXcubW07IHBhdGggPSBpb3MvRHVtcFJlbmRlclRyZWVCcm93c2VyVmlldy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ5OSw3ICs1MDMsNiBAQAogCQkJCUExMzRFNTM0MTg5MDVF
NkMwMDkwMUQwNiAvKiBjb25maWcuaCAqLywKIAkJCQkxQTJGQjg0QzE3OEM4MDkyMDA1OUZEOTYg
LyogRGVmYXVsdFBvbGljeURlbGVnYXRlLmggKi8sCiAJCQkJMUEyRkI4NEQxNzhDODA5MzAwNTlG
RDk2IC8qIERlZmF1bHRQb2xpY3lEZWxlZ2F0ZS5tbSAqLywKLQkJCQk5ODMwRjMxRTE1QzgxMTgx
MDA1QUIyMDYgLyogRHVtcFJlbmRlclRyZWVDb21tb24uY3BwICovLAogCQkJCTMyQTcwQUFCMDM3
MDVFMUYwMEM5MTc4MyAvKiBEdW1wUmVuZGVyVHJlZVByZWZpeC5oICovLAogCQkJCTE0MjJBMjc1
MEFGNkY0QkQwMEUxQTg4MyAvKiBEZWxlZ2F0ZXMgKi8sCiAJCQkJMTQyMkEyNjkwQUY2RjQ1MjAw
RTFBODgzIC8qIENvbnRyb2xsZXJzICovLApAQCAtNzMwLDYgKzczMywxMCBAQAogCQkJCTMxNDhB
MDU2MUU2RjkwRjQwMEQzQjMxNiAvKiBJT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5oICovLAog
CQkJCTkzQzc4ODI0MjUwQzZEMzkwMEMwQUEyNCAvKiBSZWZ0ZXN0RnVuY3Rpb25zLmNwcCAqLywK
IAkJCQk5M0M3ODgyNTI1MEM2RDM5MDBDMEFBMjQgLyogUmVmdGVzdEZ1bmN0aW9ucy5oICovLAor
CQkJCTdDRkY5QkMxMjUzM0JDMTYwMDA4MDA5RiAvKiBUZXN0Q29tbWFuZC5jcHAgKi8sCisJCQkJ
N0NGRjlCQzAyNTMzQkMxNjAwMDgwMDlGIC8qIFRlc3RDb21tYW5kLmggKi8sCisJCQkJN0NGRjlC
QkUyNTMzQkIyNDAwMDgwMDlGIC8qIFRlc3RGZWF0dXJlcy5jcHAgKi8sCisJCQkJN0NGRjlCQkQy
NTMzQkIyNDAwMDgwMDlGIC8qIFRlc3RGZWF0dXJlcy5oICovLAogCQkJKTsKIAkJCW5hbWUgPSBU
ZXN0UnVubmVyU2hhcmVkOwogCQkJcGF0aCA9IC4uL1Rlc3RSdW5uZXJTaGFyZWQ7CkBAIC0xMjE2
LDcgKzEyMjMsNiBAQAogCQkJCTFBMkZCODRGMTc4QzgwOTMwMDU5RkQ5NiAvKiBEZWZhdWx0UG9s
aWN5RGVsZWdhdGUubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQ0ExOEM0NzBDOUI1Qjk0MDAxMTQz
NjkgLyogRHVtcFJlbmRlclRyZWUubW0gaW4gU291cmNlcyAqLywKIAkJCQlBMTE1OEQ1ODE4OTI3
NDBDMDA4OEMxN0IgLyogRHVtcFJlbmRlclRyZWVCcm93c2VyVmlldy5tbSBpbiBTb3VyY2VzICov
LAotCQkJCTk4MzBGMzFGMTVDODExODEwMDVBQjIwNiAvKiBEdW1wUmVuZGVyVHJlZUNvbW1vbi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0ExOEI3QjBDOUIwOEYxMDAxMTQzNjkgLyogRHVtcFJl
bmRlclRyZWVEcmFnZ2luZ0luZm8ubW0gaW4gU291cmNlcyAqLywKIAkJCQlBOEQ3OUNFQjBGQzI4
QjJDMDA0QUM4RkUgLyogRHVtcFJlbmRlclRyZWVGaWxlRHJhZ2dpbmdTb3VyY2UubSBpbiBTb3Vy
Y2VzICovLAogCQkJCUE4QjkxQURBMENGM0IzMkYwMDhGOTFGRiAvKiBEdW1wUmVuZGVyVHJlZVBh
c3RlYm9hcmQubW0gaW4gU291cmNlcyAqLywKQEAgLTEyNDksNiArMTI1NSw4IEBACiAJCQkJRjQw
MTBCN0IyNERBMjAxRjAwQTg3NkUyIC8qIFBvc2VBc0NsYXNzLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOTNDNzg4MjYyNTBDNkQzQTAwQzBBQTI0IC8qIFJlZnRlc3RGdW5jdGlvbnMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkNBMThCNjgwQzlCMDhDMjAwMTE0MzY5IC8qIFJlc291cmNlTG9hZERl
bGVnYXRlLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJN0NGRjlCQzIyNTMzQkMxNjAwMDgwMDlGIC8q
IFRlc3RDb21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdDRkY5QkJGMjUzM0JCMjQwMDA4
MDA5RiAvKiBUZXN0RmVhdHVyZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTMwQTIxRjgyMDUx
RDhDNDAwMDhGRjQyIC8qIFRlc3RPcHRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMDEz
MURBMEM5NzcyMDEwMDg3MzE3RCAvKiBUZXN0UnVubmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUJDQTE4QjI0MEM5QjAxNEIwMDExNDM2OSAvKiBUZXN0UnVubmVyTWFjLm1tIGluIFNvdXJjZXMg
Ki8sCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCShy
ZXZpc2lvbiAyNjgzNTUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRy
ZWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDggQEAKICNpbXBvcnQgIlBvbGljeURl
bGVnYXRlLmgiCiAjaW1wb3J0ICJQb3NlQXNDbGFzcy5oIgogI2ltcG9ydCAiUmVzb3VyY2VMb2Fk
RGVsZWdhdGUuaCIKKyNpbXBvcnQgIlRlc3RDb21tYW5kLmgiCisjaW1wb3J0ICJUZXN0RmVhdHVy
ZXMuaCIKICNpbXBvcnQgIlRlc3RPcHRpb25zLmgiCiAjaW1wb3J0ICJUZXN0UnVubmVyLmgiCiAj
aW1wb3J0ICJVSURlbGVnYXRlLmgiCkBAIC0xODksNyArMTkxLDcgQEAgdm9sYXRpbGUgYm9vbCBk
b25lOwogTmF2aWdhdGlvbkNvbnRyb2xsZXIqIGdOYXZpZ2F0aW9uQ29udHJvbGxlciA9IG51bGxw
dHI7CiBSZWZQdHI8VGVzdFJ1bm5lcj4gZ1Rlc3RSdW5uZXI7CiAKLU9wdGlvbmFsPFRlc3RPcHRp
b25zPiBtYWluRnJhbWVUZXN0T3B0aW9uczsKK09wdGlvbmFsPFdUUjo6VGVzdE9wdGlvbnM+IG1h
aW5GcmFtZVRlc3RPcHRpb25zOwogV2ViRnJhbWUgKm1haW5GcmFtZSA9IG5pbDsKIC8vIFRoaXMg
aXMgdGhlIHRvcG1vc3QgZnJhbWUgdGhhdCBpcyBsb2FkaW5nLCBkdXJpbmcgYSBnaXZlbiBsb2Fk
LCBvciBuaWwgd2hlbiBubyBsb2FkIGlzIAogLy8gaW4gcHJvZ3Jlc3MuICBVc3VhbGx5IHRoaXMg
aXMgdGhlIHNhbWUgYXMgdGhlIG1haW4gZnJhbWUsIGJ1dCBub3QgYWx3YXlzLiAgSW4gdGhlIGNh
c2UKQEAgLTk2Niw3ICs5NjgsNyBAQCBzdGF0aWMgdm9pZCByZXNldFdlYlByZWZlcmVuY2VzVG9D
b25zaXN0CiAgICAgW1dlYlByZWZlcmVuY2VzIF9zZXRDdXJyZW50TmV0d29ya0xvYWRlclNlc3Np
b25Db29raWVBY2NlcHRQb2xpY3k6TlNIVFRQQ29va2llQWNjZXB0UG9saWN5T25seUZyb21NYWlu
RG9jdW1lbnREb21haW5dOwogfQogCi1zdGF0aWMgdm9pZCBzZXRXZWJQcmVmZXJlbmNlc0ZvclRl
c3RPcHRpb25zKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKQorc3RhdGljIHZvaWQgc2V0V2Vi
UHJlZmVyZW5jZXNGb3JUZXN0T3B0aW9ucyhjb25zdCBXVFI6OlRlc3RPcHRpb25zJiBvcHRpb25z
KQogewogICAgIFdlYlByZWZlcmVuY2VzICpwcmVmZXJlbmNlcyA9IFtXZWJQcmVmZXJlbmNlcyBz
dGFuZGFyZFByZWZlcmVuY2VzXTsKIApAQCAtMTgxNiw3ICsxODE4LDcgQEAgc3RhdGljIGJvb2wg
c2hvdWxkVXNlRXBoZW1lcmFsU2Vzc2lvbihjbwogICAgIHJldHVybiBzdHJzdHIocGF0aE9yVVJM
LCAidzNjL0luZGV4ZWREQi1wcml2YXRlLWJyb3dzaW5nIik7CiB9CiAKLXN0YXRpYyB2b2lkIHNl
dEpTQ09wdGlvbnMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpCitzdGF0aWMgdm9pZCBzZXRK
U0NPcHRpb25zKGNvbnN0IFdUUjo6VGVzdE9wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAgc3RhdGlj
IFdURjo6U3RyaW5nQnVpbGRlciBzYXZlZE9wdGlvbnM7CiAKQEAgLTE4MzIsNyArMTgzNCw3IEBA
IHN0YXRpYyB2b2lkIHNldEpTQ09wdGlvbnMoY29uc3QgVGVzdE9wdGkKIH0KIAogZW51bSBjbGFz
cyBSZXNldFRpbWUgeyBCZWZvcmVUZXN0LCBBZnRlclRlc3QgfTsKLXN0YXRpYyB2b2lkIHJlc2V0
V2ViVmlld1RvQ29uc2lzdGVudFN0YXRlKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zLCBSZXNl
dFRpbWUgcmVzZXRUaW1lKQorc3RhdGljIHZvaWQgcmVzZXRXZWJWaWV3VG9Db25zaXN0ZW50U3Rh
dGUoY29uc3QgV1RSOjpUZXN0T3B0aW9ucyYgb3B0aW9ucywgUmVzZXRUaW1lIHJlc2V0VGltZSkK
IHsKICAgICBzZXRKU0NPcHRpb25zKG9wdGlvbnMpOwogCkBAIC0xOTY3LDExICsxOTY5LDIwIEBA
IHN0YXRpYyBOU1VSTCAqY29tcHV0ZVRlc3RVUkwoTlNTdHJpbmcgKnAKICAgICByZXR1cm4gW05T
VVJMIGZpbGVVUkxXaXRoUGF0aDphYnNvbHV0ZVBhdGhdOwogfQogCitXVFI6OlRlc3RPcHRpb25z
IHRlc3RPcHRpb25zRm9yVGVzdChjb25zdCBXVFI6OlRlc3RDb21tYW5kJiBjb21tYW5kKQorewor
ICAgIFdUUjo6VGVzdEZlYXR1cmVzIGZlYXR1cmVzOworICAgIFdUUjo6bWVyZ2UoZmVhdHVyZXMs
IFdUUjo6aGFyZGNvZGVkRmVhdHVyZXNCYXNlZE9uUGF0aEZvclRlc3QoY29tbWFuZCkpOworICAg
IFdUUjo6bWVyZ2UoZmVhdHVyZXMsIFdUUjo6ZmVhdHVyZURlZmF1bHRzRnJvbVRlc3RIZWFkZXJG
b3JUZXN0KGNvbW1hbmQsIFdUUjo6VGVzdE9wdGlvbnM6OmtleVR5cGVNYXBwaW5nKCkpKTsKKwor
ICAgIHJldHVybiBXVFI6OlRlc3RPcHRpb25zIHsgV1RGTW92ZShmZWF0dXJlcykgfTsKK30KKwog
c3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcmIGlucHV0TGluZSkKIHsKICAgICBBU1NF
UlQoIWlucHV0TGluZS5lbXB0eSgpKTsKIAotICAgIFRlc3RDb21tYW5kIGNvbW1hbmQgPSBwYXJz
ZUlucHV0TGluZShpbnB1dExpbmUpOworICAgIGF1dG8gY29tbWFuZCA9IFdUUjo6cGFyc2VJbnB1
dExpbmUoaW5wdXRMaW5lKTsKICAgICBjb25zdCBzdHJpbmcmIHBhdGhPclVSTCA9IGNvbW1hbmQu
cGF0aE9yVVJMOwogICAgIGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdCA9IGNvbW1hbmQuc2hvdWxk
RHVtcFBpeGVscyB8fCBkdW1wUGl4ZWxzRm9yQWxsVGVzdHM7CiAKQEAgLTE5OTMsNyArMjAwNCw3
IEBAIHN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiBpbnB1dEwKICAgICBhdXRvIG1l
c3NhZ2UgPSBtYWtlU3RyaW5nKCJDUkFTSElORyBURVNUOiAiLCB0ZXN0UGF0aC5VVEY4U3RyaW5n
KTsKICAgICBXVEY6OnNldENyYXNoTG9nTWVzc2FnZShtZXNzYWdlLnV0ZjgoKS5kYXRhKCkpOwog
Ci0gICAgVGVzdE9wdGlvbnMgb3B0aW9ucyB7IFt1cmwgaXNGaWxlVVJMXSA/IFt1cmwgZmlsZVN5
c3RlbVJlcHJlc2VudGF0aW9uXSA6IHBhdGhPclVSTCwgY29tbWFuZC5hYnNvbHV0ZVBhdGggfTsK
KyAgICBhdXRvIG9wdGlvbnMgPSB0ZXN0T3B0aW9uc0ZvclRlc3QoY29tbWFuZCk7CiAKICAgICBp
ZiAoIW1haW5GcmFtZVRlc3RPcHRpb25zIHx8ICFvcHRpb25zLndlYlZpZXdJc0NvbXBhdGlibGVX
aXRoT3B0aW9ucyhtYWluRnJhbWVUZXN0T3B0aW9ucy52YWx1ZSgpKSkgewogICAgICAgICBpZiAo
bWFpbkZyYW1lKQpAQCAtMjAwNiw3ICsyMDE3LDcgQEAgc3RhdGljIHZvaWQgcnVuVGVzdChjb25z
dCBzdHJpbmcmIGlucHV0TAogICAgIGNvbnN0IGNoYXIqIHRlc3RVUkwoW1t1cmwgYWJzb2x1dGVT
dHJpbmddIFVURjhTdHJpbmddKTsKICAgICBnVGVzdFJ1bm5lciA9IFRlc3RSdW5uZXI6OmNyZWF0
ZSh0ZXN0VVJMLCBjb21tYW5kLmV4cGVjdGVkUGl4ZWxIYXNoKTsKICAgICBnVGVzdFJ1bm5lci0+
c2V0QWxsb3dlZEhvc3RzKGFsbG93ZWRIb3N0cyk7Ci0gICAgZ1Rlc3RSdW5uZXItPnNldEN1c3Rv
bVRpbWVvdXQoY29tbWFuZC50aW1lb3V0KTsKKyAgICBnVGVzdFJ1bm5lci0+c2V0Q3VzdG9tVGlt
ZW91dChjb21tYW5kLnRpbWVvdXQubWlsbGlzZWNvbmRzKCkpOwogICAgIGdUZXN0UnVubmVyLT5z
ZXREdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIoY29tbWFuZC5kdW1wSlNDb25zb2xlTG9nSW5TdGRF
cnIgfHwgb3B0aW9ucy5kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIpOwogCiAgICAgcmVzZXRXZWJW
aWV3VG9Db25zaXN0ZW50U3RhdGUob3B0aW9ucywgUmVzZXRUaW1lOjpCZWZvcmVUZXN0KTsKSW5k
ZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9VSURlbGVnYXRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1VJRGVsZWdhdGUuaAkocmV2aXNpb24gMjY4MzU1KQor
KysgVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1VJRGVsZWdhdGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNDcsNiArNDcsNiBAQCBAaW50ZXJmYWNlIFVJRGVsZWdhdGUgOiBOU09iamVjdCA8V2ViVUlE
CiAtICh2b2lkKXJlc2V0V2luZG93T3JpZ2luOwogLSAodm9pZClkaWRTZXRNb2NrR2VvbG9jYXRp
b25QZXJtaXNzaW9uOwogLSAoaW50KW51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RzOwotLSAodm9pZClyZXNldFRvQ29uc2lzdGVudFN0YXRlQmVmb3JlVGVzdGluZzoo
Y29uc3QgVGVzdE9wdGlvbnMmKW9wdGlvbnM7CistICh2b2lkKXJlc2V0VG9Db25zaXN0ZW50U3Rh
dGVCZWZvcmVUZXN0aW5nOihjb25zdCBXVFI6OlRlc3RPcHRpb25zJilvcHRpb25zOwogCiBAZW5k
CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVUlEZWxlZ2F0ZS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVUlEZWxlZ2F0ZS5tbQkocmV2aXNpb24gMjY4
MzU1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1VJRGVsZWdhdGUubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTU4LDcgKzU4LDcgQEAgLSAodm9pZClyZXNldFdpbmRvd09yaWdpbgogICAgIHdp
bmRvd09yaWdpbiA9IE5TWmVyb1BvaW50OwogfQogCi0tICh2b2lkKXJlc2V0VG9Db25zaXN0ZW50
U3RhdGVCZWZvcmVUZXN0aW5nOihjb25zdCBUZXN0T3B0aW9ucyYpb3B0aW9ucworLSAodm9pZCly
ZXNldFRvQ29uc2lzdGVudFN0YXRlQmVmb3JlVGVzdGluZzooY29uc3QgV1RSOjpUZXN0T3B0aW9u
cyYpb3B0aW9ucwogewogICAgIG1fZW5hYmxlRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTG9hZCA9IG9w
dGlvbnMuZW5hYmxlRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTG9hZDsKIH0KSW5kZXg6IFRvb2xzL1Rl
c3RSdW5uZXJTaGFyZWQvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFJ1
bm5lclNoYXJlZC9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjY4MzU1KQorKysgVG9vbHMvVGVz
dFJ1bm5lclNoYXJlZC9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNyw2ICs3LDgg
QEAgZmlsZShNQUtFX0RJUkVDVE9SWSAke1Rlc3RSdW5uZXJTaGFyZWRfRAogCiBzZXQoVGVzdFJ1
bm5lclNoYXJlZF9TT1VSQ0VTCiAgICAgUmVmdGVzdEZ1bmN0aW9ucy5jcHAKKyAgICBUZXN0Q29t
bWFuZC5jcHAKKyAgICBUZXN0RmVhdHVyZXMuY3BwCiAKICAgICBCaW5kaW5ncy9KU0Jhc2ljcy5j
cHAKICAgICBCaW5kaW5ncy9KU1dyYXBwZXIuY3BwCkluZGV4OiBUb29scy9UZXN0UnVubmVyU2hh
cmVkL1Rlc3RDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0UnVubmVyU2hhcmVk
L1Rlc3RDb21tYW5kLmNwcAkobm9uZXhpc3RlbnQpCisrKyBUb29scy9UZXN0UnVubmVyU2hhcmVk
L1Rlc3RDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0Q29tbWFuZC5oIgorCitu
YW1lc3BhY2UgV1RSIHsKKworY2xhc3MgQ29tbWFuZFRva2VuaXplciB7CitwdWJsaWM6CisgICAg
ZXhwbGljaXQgQ29tbWFuZFRva2VuaXplcihjb25zdCBzdGQ6OnN0cmluZyYgaW5wdXQpCisgICAg
ICAgIDogbV9pbnB1dChpbnB1dCkKKyAgICAgICAgLCBtX3Bvc05leHRTZXBhcmF0b3IoMCkKKyAg
ICB7CisgICAgICAgIHB1bXAoKTsKKyAgICB9CisKKyAgICBib29sIGhhc05leHQoKSBjb25zdDsK
KyAgICBzdGQ6OnN0cmluZyBuZXh0KCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBwdW1wKCk7Cisg
ICAgc3RhdGljIGNvbnN0IGNoYXIga1NlcGFyYXRvciA9ICdcJyc7CisgICAgY29uc3Qgc3RkOjpz
dHJpbmcmIG1faW5wdXQ7CisgICAgc3RkOjpzdHJpbmcgbV9uZXh0OworICAgIHNpemVfdCBtX3Bv
c05leHRTZXBhcmF0b3I7Cit9OworCit2b2lkIENvbW1hbmRUb2tlbml6ZXI6OnB1bXAoKQorewor
ICAgIGlmIChtX3Bvc05leHRTZXBhcmF0b3IgPT0gc3RkOjpzdHJpbmc6Om5wb3MgfHwgbV9wb3NO
ZXh0U2VwYXJhdG9yID09IG1faW5wdXQuc2l6ZSgpKSB7CisgICAgICAgIG1fbmV4dCA9IHN0ZDo6
c3RyaW5nKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc2l6ZV90IHN0YXJ0ID0gbV9w
b3NOZXh0U2VwYXJhdG9yID8gbV9wb3NOZXh0U2VwYXJhdG9yICsgMSA6IDA7CisgICAgbV9wb3NO
ZXh0U2VwYXJhdG9yID0gbV9pbnB1dC5maW5kKGtTZXBhcmF0b3IsIHN0YXJ0KTsKKyAgICBzaXpl
X3Qgc2l6ZSA9IG1fcG9zTmV4dFNlcGFyYXRvciA9PSBzdGQ6OnN0cmluZzo6bnBvcyA/IHN0ZDo6
c3RyaW5nOjpucG9zIDogbV9wb3NOZXh0U2VwYXJhdG9yIC0gc3RhcnQ7CisgICAgbV9uZXh0ID0g
c3RkOjpzdHJpbmcobV9pbnB1dCwgc3RhcnQsIHNpemUpOworfQorCitzdGQ6OnN0cmluZyBDb21t
YW5kVG9rZW5pemVyOjpuZXh0KCkKK3sKKyAgICBBU1NFUlQoaGFzTmV4dCgpKTsKKworICAgIHN0
ZDo6c3RyaW5nIG9sZE5leHQgPSBtX25leHQ7CisgICAgcHVtcCgpOworICAgIHJldHVybiBvbGRO
ZXh0OworfQorCitib29sIENvbW1hbmRUb2tlbml6ZXI6Omhhc05leHQoKSBjb25zdAoreworICAg
IHJldHVybiAhbV9uZXh0LmVtcHR5KCk7Cit9CisKK05PX1JFVFVSTiBzdGF0aWMgdm9pZCBkaWUo
Y29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0TGluZSkKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlVu
ZXhwZWN0ZWQgaW5wdXQgbGluZTogJXNcbiIsIGlucHV0TGluZS5jX3N0cigpKTsKKyAgICBleGl0
KDEpOworfQorCitUZXN0Q29tbWFuZCBwYXJzZUlucHV0TGluZShjb25zdCBzdGQ6OnN0cmluZyYg
aW5wdXRMaW5lKQoreworICAgIFRlc3RDb21tYW5kIHJlc3VsdDsKKyAgICBDb21tYW5kVG9rZW5p
emVyIHRva2VuaXplcihpbnB1dExpbmUpOworICAgIGlmICghdG9rZW5pemVyLmhhc05leHQoKSkK
KyAgICAgICAgZGllKGlucHV0TGluZSk7CisKKyAgICBzdGQ6OnN0cmluZyBhcmcgPSB0b2tlbml6
ZXIubmV4dCgpOworICAgIHJlc3VsdC5wYXRoT3JVUkwgPSBhcmc7CisgICAgd2hpbGUgKHRva2Vu
aXplci5oYXNOZXh0KCkpIHsKKyAgICAgICAgYXJnID0gdG9rZW5pemVyLm5leHQoKTsKKyAgICAg
ICAgaWYgKGFyZyA9PSAiLS10aW1lb3V0IikgeworICAgICAgICAgICAgYXV0byB0aW1lb3V0VG9r
ZW4gPSB0b2tlbml6ZXIubmV4dCgpOworICAgICAgICAgICAgcmVzdWx0LnRpbWVvdXQgPSBTZWNv
bmRzOjpmcm9tTWlsbGlzZWNvbmRzKGF0b2kodGltZW91dFRva2VuLmNfc3RyKCkpKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChhcmcgPT0gIi1wIiB8fCBhcmcgPT0gIi0tcGl4ZWwtdGVzdCIpIHsKKyAg
ICAgICAgICAgIHJlc3VsdC5zaG91bGREdW1wUGl4ZWxzID0gdHJ1ZTsKKyAgICAgICAgICAgIGlm
ICh0b2tlbml6ZXIuaGFzTmV4dCgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC5leHBlY3RlZFBp
eGVsSGFzaCA9IHRva2VuaXplci5uZXh0KCk7CisgICAgICAgIH0gZWxzZSBpZiAoYXJnID09IHN0
ZDo6c3RyaW5nKCItLWR1bXAtanNjb25zb2xlbG9nLWluLXN0ZGVyciIpKQorICAgICAgICAgICAg
cmVzdWx0LmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciA9IHRydWU7CisgICAgICAgIGVsc2UgaWYg
KGFyZyA9PSBzdGQ6OnN0cmluZygiLS1hYnNvbHV0ZVBhdGgiKSkKKyAgICAgICAgICAgIHJlc3Vs
dC5hYnNvbHV0ZVBhdGggPSB0b2tlbml6ZXIubmV4dCgpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBkaWUoaW5wdXRMaW5lKTsKKyAgICB9CisgICAgCisgICAgaWYgKHJlc3VsdC5hYnNvbHV0
ZVBhdGguZW1wdHkoKSkKKyAgICAgICAgcmVzdWx0LmFic29sdXRlUGF0aCA9IHRlc3RQYXRoKHJl
c3VsdC5wYXRoT3JVUkwpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RkOjpmaWxlc3lz
dGVtOjpwYXRoIHRlc3RQYXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCit7CisgICAg
aWYgKHBhdGhPclVSTC5maW5kKCJodHRwOi8vIikgPT0gMCB8fCBwYXRoT3JVUkwuZmluZCgiaHR0
cHM6Ly8iKSA9PSAwKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgaWYgKHBhdGhPclVSTC5m
aW5kKCJmaWxlOi8vIikgPT0gMCkKKyAgICAgICAgcmV0dXJuIHBhdGhPclVSTC5zdWJzdHIoc3Ry
bGVuKCJmaWxlOi8iKSk7CisKKyAgICByZXR1cm4gc3RkOjpmaWxlc3lzdGVtOjphYnNvbHV0ZShw
YXRoT3JVUkwpOworfQorCitzdGQ6OnN0cmluZyB0ZXN0VVJMU3RyaW5nKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBwYXRoT3JVUkwpCit7CisgICAgaWYgKHBhdGhPclVSTC5maW5kKCJodHRwOi8vIikgPT0g
MCB8fCBwYXRoT3JVUkwuZmluZCgiaHR0cHM6Ly8iKSA9PSAwIHx8IHBhdGhPclVSTC5maW5kKCJm
aWxlOi8vIikgPT0gMCkKKyAgICAgICAgcmV0dXJuIHBhdGhPclVSTDsKKworICAgIHJldHVybiAi
ZmlsZTovLyIgKyBzdGQ6OmZpbGVzeXN0ZW06OmFic29sdXRlKHBhdGhPclVSTCkuZ2VuZXJpY19z
dHJpbmcoKTsKK30KKworfQpJbmRleDogVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9UZXN0Q29tbWFu
ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVGVzdENvbW1hbmQuaAko
bm9uZXhpc3RlbnQpCisrKyBUb29scy9UZXN0UnVubmVyU2hhcmVkL1Rlc3RDb21tYW5kLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+CisjaW5jbHVkZSA8
d3RmL1N0ZEZpbGVzeXN0ZW0uaD4KKworbmFtZXNwYWNlIFdUUiB7CisKK3N0cnVjdCBUZXN0Q29t
bWFuZCB7CisgICAgc3RkOjpzdHJpbmcgcGF0aE9yVVJMOworICAgIHN0ZDo6ZmlsZXN5c3RlbTo6
cGF0aCBhYnNvbHV0ZVBhdGg7CisgICAgc3RkOjpzdHJpbmcgZXhwZWN0ZWRQaXhlbEhhc2g7Cisg
ICAgV1RGOjpTZWNvbmRzIHRpbWVvdXQ7CisgICAgYm9vbCBzaG91bGREdW1wUGl4ZWxzIHsgZmFs
c2UgfTsKKyAgICBib29sIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciB7IGZhbHNlIH07Cit9Owor
CitUZXN0Q29tbWFuZCBwYXJzZUlucHV0TGluZShjb25zdCBzdGQ6OnN0cmluZyYgaW5wdXRMaW5l
KTsKKworc3RkOjpmaWxlc3lzdGVtOjpwYXRoIHRlc3RQYXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBw
YXRoT3JVUkwpOworc3RkOjpzdHJpbmcgdGVzdFVSTFN0cmluZyhjb25zdCBzdGQ6OnN0cmluZyYg
cGF0aE9yVVJMKTsKKworfQpJbmRleDogVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9UZXN0RmVhdHVy
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVGVzdEZlYXR1cmVz
LmNwcAkobm9uZXhpc3RlbnQpCisrKyBUb29scy9UZXN0UnVubmVyU2hhcmVkL1Rlc3RGZWF0dXJl
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZlYXR1cmVzLmgiCisKKyNpbmNsdWRlICJU
ZXN0Q29tbWFuZC5oIgorI2luY2x1ZGUgPGZzdHJlYW0+CisjaW5jbHVkZSA8c3RyaW5nPgorI2lu
Y2x1ZGUgPHd0Zi9TdGRGaWxlc3lzdGVtLmg+CisKK25hbWVzcGFjZSBXVFIgeworCit2b2lkIG1l
cmdlKFRlc3RGZWF0dXJlcyYgYmFzZSwgVGVzdEZlYXR1cmVzIGFkZGl0aW9uYWwpCit7CisgICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzdGQ6OnVub3JkZXJlZF9tYXA6Om1lcmdlIHdoZW4g
aXQgaXMgYXZhaWxhYmxlIGZvciBhbGwgcG9ydHMuCisKKyAgICBmb3IgKGF1dG8gW2tleSwgdmFs
dWVdIDogYWRkaXRpb25hbC5leHBlcmltZW50YWxGZWF0dXJlcykKKyAgICAgICAgYmFzZS5leHBl
cmltZW50YWxGZWF0dXJlcy5pbnNlcnRfb3JfYXNzaWduKGtleSwgdmFsdWUpOworICAgIGZvciAo
YXV0byBba2V5LCB2YWx1ZV0gOiBhZGRpdGlvbmFsLmludGVybmFsRGVidWdGZWF0dXJlcykKKyAg
ICAgICAgYmFzZS5pbnRlcm5hbERlYnVnRmVhdHVyZXMuaW5zZXJ0X29yX2Fzc2lnbihrZXksIHZh
bHVlKTsKKyAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogYWRkaXRpb25hbC5ib29sRmVhdHVy
ZXMpCisgICAgICAgIGJhc2UuYm9vbEZlYXR1cmVzLmluc2VydF9vcl9hc3NpZ24oa2V5LCB2YWx1
ZSk7CisgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGFkZGl0aW9uYWwuZG91YmxlRmVhdHVy
ZXMpCisgICAgICAgIGJhc2UuZG91YmxlRmVhdHVyZXMuaW5zZXJ0X29yX2Fzc2lnbihrZXksIHZh
bHVlKTsKKyAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogYWRkaXRpb25hbC5zdHJpbmdGZWF0
dXJlcykKKyAgICAgICAgYmFzZS5zdHJpbmdGZWF0dXJlcy5pbnNlcnRfb3JfYXNzaWduKGtleSwg
dmFsdWUpOworICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBhZGRpdGlvbmFsLnN0cmluZ1Zl
Y3RvckZlYXR1cmVzKQorICAgICAgICBiYXNlLnN0cmluZ1ZlY3RvckZlYXR1cmVzLmluc2VydF9v
cl9hc3NpZ24oa2V5LCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBib29sIHBhdGhDb250YWlucyhjb25z
dCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMLCBjb25zdCBjaGFyKiBzdWJzdHJpbmcpCit7CisgICAg
cmV0dXJuIHBhdGhPclVSTC5maW5kKHN1YnN0cmluZykgIT0gc3RkOjpzdHJpbmc6Om5wb3M7Cit9
CisKK3N0YXRpYyBib29sIHNob3VsZE1ha2VWaWV3cG9ydEZsZXhpYmxlKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBwYXRoT3JVUkwpCit7CisgICAgcmV0dXJuIHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJ2
aWV3cG9ydC8iKSAmJiAhcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgInZpc3VhbC12aWV3cG9ydC8i
KTsKK30KKworc3RhdGljIGJvb2wgc2hvdWxkVXNlRXBoZW1lcmFsU2Vzc2lvbihjb25zdCBzdGQ6
OnN0cmluZyYgcGF0aE9yVVJMKQoreworICAgIHJldHVybiBwYXRoQ29udGFpbnMocGF0aE9yVVJM
LCAidzNjL0luZGV4ZWREQi1wcml2YXRlLWJyb3dzaW5nIikgfHwgcGF0aENvbnRhaW5zKHBhdGhP
clVSTCwgInczY1xcSW5kZXhlZERCLXByaXZhdGUtYnJvd3NpbmciKTsKK30KKworc3RhdGljIHN0
ZDo6b3B0aW9uYWw8c3RkOjpwYWlyPGRvdWJsZSwgZG91YmxlPj4gb3ZlcnJpZGVWaWV3V2lkdGhB
bmRIZWlnaHRGb3JUZXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCit7CisgICAgaWYg
KHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJzdmcvVzNDLVNWRy0xLjEiKSB8fCBwYXRoQ29udGFp
bnMocGF0aE9yVVJMLCAic3ZnXFxXM0MtU1ZHLTEuMSIpKQorICAgICAgICByZXR1cm4geyB7IDQ4
MCwgMzYwIH0gfTsKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCitzdGF0aWMgc3RkOjpv
cHRpb25hbDxkb3VibGU+IG92ZXJyaWRlRGV2aWNlU2NhbGVGYWN0b3JGb3JUZXN0KGNvbnN0IHN0
ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCit7CisgICAgaWYgKHBhdGhDb250YWlucyhwYXRoT3JVUkws
ICIvaGlkcGktM3gtIikpCisgICAgICAgIHJldHVybiAzOworICAgIGlmIChwYXRoQ29udGFpbnMo
cGF0aE9yVVJMLCAiL2hpZHBpLSIpKQorICAgICAgICByZXR1cm4gMjsKKyAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworfQorCitzdGF0aWMgYm9vbCBzaG91bGREdW1wSlNDb25zb2xlTG9nSW5TdGRF
cnIoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKK3sKKyAgICByZXR1cm4gcGF0aENvbnRh
aW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo4ODAwL2JlYWNvbiIpIHx8IHBhdGhDb250YWlucyhw
YXRoT3JVUkwsICJsb2NhbGhvc3Q6OTQ0My9iZWFjb24iKQorICAgICAgICB8fCBwYXRoQ29udGFp
bnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvY29ycyIpIHx8IHBhdGhDb250YWlucyhwYXRo
T3JVUkwsICJsb2NhbGhvc3Q6OTQ0My9jb3JzIikKKyAgICAgICAgfHwgcGF0aENvbnRhaW5zKHBh
dGhPclVSTCwgImxvY2FsaG9zdDo4ODAwL2ZldGNoIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVS
TCwgImxvY2FsaG9zdDo5NDQzL2ZldGNoIikKKyAgICAgICAgfHwgcGF0aENvbnRhaW5zKHBhdGhP
clVSTCwgImxvY2FsaG9zdDo4ODAwL3NlcnZpY2Utd29ya2VycyIpIHx8IHBhdGhDb250YWlucyhw
YXRoT3JVUkwsICJsb2NhbGhvc3Q6OTQ0My9zZXJ2aWNlLXdvcmtlcnMiKQorICAgICAgICB8fCBw
YXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvc3RyZWFtcy93cml0YWJsZS1z
dHJlYW1zIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3N0cmVh
bXMvd3JpdGFibGUtc3RyZWFtcyIpCisgICAgICAgIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkws
ICJsb2NhbGhvc3Q6ODgwMC9zdHJlYW1zL3BpcGluZyIpIHx8IHBhdGhDb250YWlucyhwYXRoT3JV
UkwsICJsb2NhbGhvc3Q6OTQ0My9zdHJlYW1zL3BpcGluZyIpCisgICAgICAgIHx8IHBhdGhDb250
YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgwMC94aHIiKSB8fCBwYXRoQ29udGFpbnMocGF0
aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMveGhyIikKKyAgICAgICAgfHwgcGF0aENvbnRhaW5zKHBh
dGhPclVSTCwgImxvY2FsaG9zdDo4ODAwL3dlYnJ0YyIpIHx8IHBhdGhDb250YWlucyhwYXRoT3JV
UkwsICJsb2NhbGhvc3Q6OTQ0My93ZWJydGMiKQorICAgICAgICB8fCBwYXRoQ29udGFpbnMocGF0
aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvd2Vic29ja2V0cyIpIHx8IHBhdGhDb250YWlucyhwYXRo
T3JVUkwsICJsb2NhbGhvc3Q6OTQ0My93ZWJzb2NrZXRzIik7Cit9CisKK1Rlc3RGZWF0dXJlcyBo
YXJkY29kZWRGZWF0dXJlc0Jhc2VkT25QYXRoRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYgY29t
bWFuZCkKK3sKKyAgICBUZXN0RmVhdHVyZXMgZmVhdHVyZXM7CisKKyAgICBpZiAoc2hvdWxkTWFr
ZVZpZXdwb3J0RmxleGlibGUoY29tbWFuZC5wYXRoT3JVUkwpKQorICAgICAgICBmZWF0dXJlcy5i
b29sRmVhdHVyZXMuaW5zZXJ0KHsgInVzZUZsZXhpYmxlVmlld3BvcnQiLCB0cnVlIH0pOworICAg
IGlmIChzaG91bGRVc2VFcGhlbWVyYWxTZXNzaW9uKGNvbW1hbmQucGF0aE9yVVJMKSkKKyAgICAg
ICAgZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJ1c2VFcGhlbWVyYWxTZXNzaW9uIiwg
dHJ1ZSB9KTsKKyAgICBpZiAoc2hvdWxkRHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKGNvbW1hbmQu
cGF0aE9yVVJMKSkKKyAgICAgICAgZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJkdW1w
SlNDb25zb2xlTG9nSW5TdGRFcnIiLCB0cnVlIH0pOworICAgIGlmIChhdXRvIGRldmljZVNjYWxl
RmFjdG9yID0gb3ZlcnJpZGVEZXZpY2VTY2FsZUZhY3RvckZvclRlc3QoY29tbWFuZC5wYXRoT3JV
UkwpOyBkZXZpY2VTY2FsZUZhY3RvciAhPSBzdGQ6Om51bGxvcHQpCisgICAgICAgIGZlYXR1cmVz
LmRvdWJsZUZlYXR1cmVzLmluc2VydCh7ICJkZXZpY2VTY2FsZUZhY3RvciIsIGRldmljZVNjYWxl
RmFjdG9yLnZhbHVlKCkgfSk7CisgICAgaWYgKGF1dG8gdmlld1dpZHRoQW5kSGVpZ2h0ID0gb3Zl
cnJpZGVWaWV3V2lkdGhBbmRIZWlnaHRGb3JUZXN0KGNvbW1hbmQucGF0aE9yVVJMKTsgdmlld1dp
ZHRoQW5kSGVpZ2h0ICE9IHN0ZDo6bnVsbG9wdCkgeworICAgICAgICBmZWF0dXJlcy5kb3VibGVG
ZWF0dXJlcy5pbnNlcnQoeyAidmlld1dpZHRoIiwgdmlld1dpZHRoQW5kSGVpZ2h0LT5maXJzdCB9
KTsKKyAgICAgICAgZmVhdHVyZXMuZG91YmxlRmVhdHVyZXMuaW5zZXJ0KHsgInZpZXdIZWlnaHQi
LCB2aWV3V2lkdGhBbmRIZWlnaHQtPnNlY29uZCB9KTsKKyAgICB9CisKKyAgICByZXR1cm4gZmVh
dHVyZXM7Cit9CisKK3N0YXRpYyBib29sIHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZShjb25z
dCBzdGQ6OnN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJ0cnVlIikKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHZhbHVlID09ICJmYWxzZSIpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIExPR19FUlJPUigiRm91bmQgdW5leHBlY3RlZCB2YWx1ZSAnJXMnIGZv
ciBib29sZWFuIG9wdGlvbi4gRXhwZWN0ZWQgJ3RydWUnIG9yICdmYWxzZScuIiwgdmFsdWUuY19z
dHIoKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgZG91YmxlIHBhcnNlRG91Ymxl
VGVzdEhlYWRlclZhbHVlKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4g
c3RkOjpzdG9kKHZhbHVlKTsKK30KKworc3RhdGljIHN0ZDo6c3RyaW5nIHBhcnNlU3RyaW5nVGVz
dEhlYWRlclZhbHVlQXNSZWxhdGl2ZVBhdGgoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlLCBjb25z
dCBzdGQ6OmZpbGVzeXN0ZW06OnBhdGgmIHRlc3RQYXRoKQoreworICAgIGF1dG8gYmFzZVBhdGgg
PSB0ZXN0UGF0aC5wYXJlbnRfcGF0aCgpOworICAgIHJldHVybiBiYXNlUGF0aCAvIHZhbHVlOwor
fQorCitzdGF0aWMgc3RkOjpzdHJpbmcgcGFyc2VTdHJpbmdUZXN0SGVhZGVyVmFsdWVBc1VSTChj
b25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpCit7CisgICAgcmV0dXJuIHRlc3RVUkxTdHJpbmcodmFs
dWUpOworfQorCitzdGF0aWMgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHBhcnNlU3RyaW5nVGVz
dEhlYWRlclZhbHVlQXNTdHJpbmdWZWN0b3IoY29uc3Qgc3RkOjpzdHJpbmcmIHN0cmluZykKK3sK
KyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcmVzdWx0OworCisgICAgc2l6ZV90IGkgPSAw
OworICAgIHdoaWxlIChpIDwgc3RyaW5nLnNpemUoKSkgeworICAgICAgICBhdXRvIGZvdW5kSW5k
ZXggPSBzdHJpbmcuZmluZF9maXJzdF9vZignLCcsIGkpOworCisgICAgICAgIGlmIChmb3VuZElu
ZGV4ICE9IGkpCisgICAgICAgICAgICByZXN1bHQucHVzaF9iYWNrKHN0cmluZy5zdWJzdHIoaSwg
Zm91bmRJbmRleCAtIGkpKTsKKworICAgICAgICBpZiAoZm91bmRJbmRleCA9PSBzdGQ6OnN0cmlu
Zzo6bnBvcykKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGkgPSBmb3VuZEluZGV4ICsg
MTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgVGVzdEZlYXR1cmVz
IHBhcnNlVGVzdEhlYWRlcihzdGQ6OmZpbGVzeXN0ZW06OnBhdGggcGF0aCwgY29uc3Qgc3RkOjp1
bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBUZXN0SGVhZGVyS2V5VHlwZT4mIGtleVR5cGVNYXAp
Cit7CisgICAgYXV0byBrZXlUeXBlID0gWyZrZXlUeXBlTWFwXShhdXRvJiBrZXkpIHsKKyAgICAg
ICAgYXV0byBpdCA9IGtleVR5cGVNYXAuZmluZChrZXkpOworICAgICAgICBpZiAoaXQgPT0ga2V5
VHlwZU1hcC5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBUZXN0SGVhZGVyS2V5VHlwZTo6VW5r
bm93bjsKKyAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgfTsKKworICAgIFRlc3RGZWF0
dXJlcyBmZWF0dXJlczsKKyAgICBpZiAoIXN0ZDo6ZmlsZXN5c3RlbTo6ZXhpc3RzKHBhdGgpKQor
ICAgICAgICByZXR1cm4gZmVhdHVyZXM7CisKKyAgICBzdGQ6Omlmc3RyZWFtIGZpbGUocGF0aCk7
CisgICAgaWYgKCFmaWxlLmdvb2QoKSkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBv
cGVuIGZpbGUgdG8gaW5zcGVjdCB0ZXN0IGhlYWRlcnMgaW4gJXMiLCBwYXRoLmNfc3RyKCkpOwor
ICAgICAgICByZXR1cm4gZmVhdHVyZXM7CisgICAgfQorCisgICAgc3RkOjpzdHJpbmcgb3B0aW9u
czsKKyAgICBnZXRsaW5lKGZpbGUsIG9wdGlvbnMpOworICAgIHN0ZDo6c3RyaW5nIGJlZ2luU3Ry
aW5nKCJ3ZWJraXQtdGVzdC1ydW5uZXIgWyAiKTsKKyAgICBzdGQ6OnN0cmluZyBlbmRTdHJpbmco
IiBdIik7CisgICAgc2l6ZV90IGJlZ2luTG9jYXRpb24gPSBvcHRpb25zLmZpbmQoYmVnaW5TdHJp
bmcpOworICAgIGlmIChiZWdpbkxvY2F0aW9uID09IHN0ZDo6c3RyaW5nOjpucG9zKQorICAgICAg
ICByZXR1cm4gZmVhdHVyZXM7CisgICAgc2l6ZV90IGVuZExvY2F0aW9uID0gb3B0aW9ucy5maW5k
KGVuZFN0cmluZywgYmVnaW5Mb2NhdGlvbik7CisgICAgaWYgKGVuZExvY2F0aW9uID09IHN0ZDo6
c3RyaW5nOjpucG9zKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGZpbmQgZW5kIG9m
IHRlc3QgaGVhZGVyIGluICVzIiwgcGF0aC5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJuIGZlYXR1
cmVzOworICAgIH0KKyAgICBzdGQ6OnN0cmluZyBwYWlyU3RyaW5nID0gb3B0aW9ucy5zdWJzdHIo
YmVnaW5Mb2NhdGlvbiArIGJlZ2luU3RyaW5nLnNpemUoKSwgZW5kTG9jYXRpb24gLSAoYmVnaW5M
b2NhdGlvbiArIGJlZ2luU3RyaW5nLnNpemUoKSkpOworICAgIHNpemVfdCBwYWlyU3RhcnQgPSAw
OworICAgIHdoaWxlIChwYWlyU3RhcnQgPCBwYWlyU3RyaW5nLnNpemUoKSkgeworICAgICAgICBz
aXplX3QgcGFpckVuZCA9IHBhaXJTdHJpbmcuZmluZCgiICIsIHBhaXJTdGFydCk7CisgICAgICAg
IGlmIChwYWlyRW5kID09IHN0ZDo6c3RyaW5nOjpucG9zKQorICAgICAgICAgICAgcGFpckVuZCA9
IHBhaXJTdHJpbmcuc2l6ZSgpOworICAgICAgICBzaXplX3QgZXF1YWxzTG9jYXRpb24gPSBwYWly
U3RyaW5nLmZpbmQoIj0iLCBwYWlyU3RhcnQpOworICAgICAgICBpZiAoZXF1YWxzTG9jYXRpb24g
PT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiTWFsZm9ybWVk
IG9wdGlvbiBpbiB0ZXN0IGhlYWRlciAoY291bGQgbm90IGZpbmQgJz0nIGNoYXJhY3RlcikgaW4g
JXMiLCBwYXRoLmNfc3RyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgYXV0byBrZXkgPSBwYWlyU3RyaW5nLnN1YnN0cihwYWlyU3RhcnQsIGVxdWFsc0xvY2F0aW9u
IC0gcGFpclN0YXJ0KTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IHBhaXJTdHJpbmcuc3Vic3RyKGVx
dWFsc0xvY2F0aW9uICsgMSwgcGFpckVuZCAtIChlcXVhbHNMb2NhdGlvbiArIDEpKTsKKworICAg
ICAgICBpZiAoa2V5LnJmaW5kKCJleHBlcmltZW50YWw6IikgPT0gMCkgeworICAgICAgICAgICAg
a2V5ID0ga2V5LnN1YnN0cigxMyk7CisgICAgICAgICAgICBmZWF0dXJlcy5leHBlcmltZW50YWxG
ZWF0dXJlcy5pbnNlcnQoeyBrZXksIHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSkg
fSk7CisgICAgICAgIH0gZWxzZSBpZiAoa2V5LnJmaW5kKCJpbnRlcm5hbDoiKSA9PSAwKSB7Cisg
ICAgICAgICAgICBrZXkgPSBrZXkuc3Vic3RyKDkpOworICAgICAgICAgICAgZmVhdHVyZXMuaW50
ZXJuYWxEZWJ1Z0ZlYXR1cmVzLmluc2VydCh7IGtleSwgcGFyc2VCb29sZWFuVGVzdEhlYWRlclZh
bHVlKHZhbHVlKSB9KTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoa2V5VHlwZShrZXkp
KSB7CisgICAgICAgIGNhc2UgVGVzdEhlYWRlcktleVR5cGU6OkJvb2w6CisgICAgICAgICAgICBm
ZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCBwYXJzZUJvb2xlYW5UZXN0SGVhZGVy
VmFsdWUodmFsdWUpIH0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVGVzdEhl
YWRlcktleVR5cGU6OkRvdWJsZToKKyAgICAgICAgICAgIGZlYXR1cmVzLmRvdWJsZUZlYXR1cmVz
Lmluc2VydCh7IGtleSwgcGFyc2VEb3VibGVUZXN0SGVhZGVyVmFsdWUodmFsdWUpIH0pOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVGVzdEhlYWRlcktleVR5cGU6OlN0cmluZzoK
KyAgICAgICAgICAgIGZlYXR1cmVzLnN0cmluZ0ZlYXR1cmVzLmluc2VydCh7IGtleSwgdmFsdWUg
fSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUZXN0SGVhZGVyS2V5VHlwZTo6
U3RyaW5nUmVsYXRpdmVQYXRoOgorICAgICAgICAgICAgZmVhdHVyZXMuc3RyaW5nRmVhdHVyZXMu
aW5zZXJ0KHsga2V5LCBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzUmVsYXRpdmVQYXRoKHZh
bHVlLCBwYXRoKSB9KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRlc3RIZWFk
ZXJLZXlUeXBlOjpTdHJpbmdVUkw6CisgICAgICAgICAgICBmZWF0dXJlcy5zdHJpbmdGZWF0dXJl
cy5pbnNlcnQoeyBrZXksIHBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNVUkwodmFsdWUpIH0p
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVGVzdEhlYWRlcktleVR5cGU6OlN0
cmluZ1ZlY3RvcjoKKyAgICAgICAgICAgIGZlYXR1cmVzLnN0cmluZ1ZlY3RvckZlYXR1cmVzLmlu
c2VydCh7IGtleSwgcGFyc2VTdHJpbmdUZXN0SGVhZGVyVmFsdWVBc1N0cmluZ1ZlY3Rvcih2YWx1
ZSkgfSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUZXN0SGVhZGVyS2V5VHlw
ZTo6VW5rbm93bjoKKyAgICAgICAgICAgIExPR19FUlJPUigiVW5rbm93biBrZXksICclcywgaW4g
dGVzdCBoZWFkZXIgaW4gJXMiLCBrZXkuY19zdHIoKSwgcGF0aC5jX3N0cigpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcGFpclN0YXJ0ID0gcGFpckVuZCArIDE7
CisgICAgfQorCisgICAgcmV0dXJuIGZlYXR1cmVzOworfQorCitUZXN0RmVhdHVyZXMgZmVhdHVy
ZURlZmF1bHRzRnJvbVRlc3RIZWFkZXJGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJiBjb21tYW5k
LCBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIFRlc3RIZWFkZXJLZXlUeXBl
PiYga2V5VHlwZU1hcCkKK3sKKyAgICByZXR1cm4gcGFyc2VUZXN0SGVhZGVyKGNvbW1hbmQuYWJz
b2x1dGVQYXRoLCBrZXlUeXBlTWFwKTsKK30KKworfQpJbmRleDogVG9vbHMvVGVzdFJ1bm5lclNo
YXJlZC9UZXN0RmVhdHVyZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0UnVubmVyU2hhcmVk
L1Rlc3RGZWF0dXJlcy5oCShub25leGlzdGVudCkKKysrIFRvb2xzL1Rlc3RSdW5uZXJTaGFyZWQv
VGVzdEZlYXR1cmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8b3B0aW9uYWw+CisjaW5jbHVkZSA8c3RyaW5n
PgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisjaW5jbHVkZSA8dmVjdG9yPgorCituYW1lc3Bh
Y2UgV1RSIHsKKworc3RydWN0IFRlc3RDb21tYW5kOworCitzdHJ1Y3QgVGVzdEZlYXR1cmVzIHsK
KyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+IGV4cGVyaW1lbnRhbEZl
YXR1cmVzOworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9vbD4gaW50ZXJu
YWxEZWJ1Z0ZlYXR1cmVzOworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9v
bD4gYm9vbEZlYXR1cmVzOworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgZG91
YmxlPiBkb3VibGVGZWF0dXJlczsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcs
IHN0ZDo6c3RyaW5nPiBzdHJpbmdGZWF0dXJlczsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3Rk
OjpzdHJpbmcsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPj4gc3RyaW5nVmVjdG9yRmVhdHVyZXM7
Cit9OworCit2b2lkIG1lcmdlKFRlc3RGZWF0dXJlcyYgYmFzZSwgVGVzdEZlYXR1cmVzIGFkZGl0
aW9uYWwpOworCitUZXN0RmVhdHVyZXMgaGFyZGNvZGVkRmVhdHVyZXNCYXNlZE9uUGF0aEZvclRl
c3QoY29uc3QgVGVzdENvbW1hbmQmKTsKKworZW51bSBjbGFzcyBUZXN0SGVhZGVyS2V5VHlwZSA6
IHVpbnQ4X3QgeworICAgIEJvb2wsCisgICAgRG91YmxlLAorICAgIFN0cmluZywKKyAgICBTdHJp
bmdSZWxhdGl2ZVBhdGgsCisgICAgU3RyaW5nVVJMLAorICAgIFN0cmluZ1ZlY3RvciwKKyAgICBV
bmtub3duCit9OworVGVzdEZlYXR1cmVzIGZlYXR1cmVEZWZhdWx0c0Zyb21UZXN0SGVhZGVyRm9y
VGVzdChjb25zdCBUZXN0Q29tbWFuZCYsIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0
cmluZywgVGVzdEhlYWRlcktleVR5cGU+Jik7CisKK30KSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjY4MzU1KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQCBzZXQo
V2ViS2l0VGVzdFJ1bm5lcl9MSUJSQVJJRVMKIAogc2V0KFdlYktpdFRlc3RSdW5uZXJfSU5DTFVE
RV9ESVJFQ1RPUklFUwogICAgICR7Q01BS0VfQklOQVJZX0RJUn0KKyAgICAke1dlYktpdFRlc3RS
dW5uZXJfU0hBUkVEX0RJUn0KICAgICAke1dlYktpdFRlc3RSdW5uZXJfQklORElOR1NfRElSfQog
ICAgICR7V2ViS2l0VGVzdFJ1bm5lcl9ERVJJVkVEX1NPVVJDRVNfRElSfS9VSVNjcmlwdENvbnRl
eHQKICAgICAke1dlYktpdFRlc3RSdW5uZXJfRElSfQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9UZXN0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDI2ODM1NSkKKysrIFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICsz
MCw3IEBACiAjaW5jbHVkZSAiRXZlbnRTZW5kZXJQcm94eS5oIgogI2luY2x1ZGUgIk9wdGlvbnMu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIKKyNpbmNsdWRlICJUZXN0Q29tbWFuZC5o
IgogI2luY2x1ZGUgIlRlc3RJbnZvY2F0aW9uLmgiCiAjaW5jbHVkZSAiV2ViQ29yZVRlc3RTdXBw
b3J0LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5pdGlhbGl6ZVRocmVhZGluZy5oPgpA
QCAtMTIzNiwyNCArMTIzNyw2IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldEFsbG93c0FueVNT
TENlcnQKIH0KICNlbmRpZgogCi1zdGF0aWMgc3RkOjpzdHJpbmcgdGVzdFBhdGgoV0tVUkxSZWYg
dXJsKQotewotICAgIGF1dG8gc2NoZW1lID0gYWRvcHRXSyhXS1VSTENvcHlTY2hlbWUodXJsKSk7
Ci0gICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmdJZ25vcmluZ0Nhc2Uoc2NoZW1l
LmdldCgpLCAiZmlsZSIpKSB7Ci0gICAgICAgIGF1dG8gcGF0aCA9IGFkb3B0V0soV0tVUkxDb3B5
UGF0aCh1cmwpKTsKLSAgICAgICAgYXV0byBidWZmZXIgPSBzdGQ6OnZlY3RvcjxjaGFyPihXS1N0
cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUocGF0aC5nZXQoKSkpOwotICAgICAgICBhdXRv
IGxlbmd0aCA9IFdLU3RyaW5nR2V0VVRGOENTdHJpbmcocGF0aC5nZXQoKSwgYnVmZmVyLmRhdGEo
KSwgYnVmZmVyLnNpemUoKSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGxlbmd0aCA+IDApOwot
I2lmIE9TKFdJTkRPV1MpCi0gICAgICAgIC8vIFJlbW92ZSB0aGUgZmlyc3QgJy8nIGlmIGl0IHN0
YXJ0cyB3aXRoIHNvbWV0aGluZyBsaWtlICIvQzovIi4KLSAgICAgICAgaWYgKGxlbmd0aCA+PSA0
ICYmIGJ1ZmZlclswXSA9PSAnLycgJiYgYnVmZmVyWzJdID09ICc6JyAmJiBidWZmZXJbM10gPT0g
Jy8nKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKGJ1ZmZlci5kYXRhKCkgKyAxLCBs
ZW5ndGggLSAxKTsKLSNlbmRpZgotICAgICAgICByZXR1cm4gc3RkOjpzdHJpbmcoYnVmZmVyLmRh
dGEoKSwgbGVuZ3RoIC0gMSk7Ci0gICAgfQotICAgIHJldHVybiBzdGQ6OnN0cmluZygpOwotfQot
CiBXS1VSTFJlZiBUZXN0Q29udHJvbGxlcjo6Y3JlYXRlVGVzdFVSTChjb25zdCBjaGFyKiBwYXRo
T3JVUkwpCiB7CiAgICAgaWYgKHN0cnN0cihwYXRoT3JVUkwsICJodHRwOi8vIikgfHwgc3Ryc3Ry
KHBhdGhPclVSTCwgImh0dHBzOi8vIikgfHwgc3Ryc3RyKHBhdGhPclVSTCwgImZpbGU6Ly8iKSkK
QEAgLTEyOTcsNyArMTI4MCw3IEBAIFRlc3RPcHRpb25zIFRlc3RDb250cm9sbGVyOjp0ZXN0T3B0
aW9uc0YKICAgICBUZXN0RmVhdHVyZXMgZmVhdHVyZXMgPSBtX2dsb2JhbEZlYXR1cmVzOwogICAg
IG1lcmdlKGZlYXR1cmVzLCBoYXJkY29kZWRGZWF0dXJlc0Jhc2VkT25QYXRoRm9yVGVzdChjb21t
YW5kKSk7CiAgICAgbWVyZ2UoZmVhdHVyZXMsIHBsYXRmb3JtU3BlY2lmaWNGZWF0dXJlRGVmYXVs
dHNGb3JUZXN0KGNvbW1hbmQpKTsKLSAgICBtZXJnZShmZWF0dXJlcywgZmVhdHVyZURlZmF1bHRz
RnJvbVRlc3RIZWFkZXJGb3JUZXN0KGNvbW1hbmQpKTsKKyAgICBtZXJnZShmZWF0dXJlcywgZmVh
dHVyZURlZmF1bHRzRnJvbVRlc3RIZWFkZXJGb3JUZXN0KGNvbW1hbmQsIFRlc3RPcHRpb25zOjpr
ZXlUeXBlTWFwcGluZygpKSk7CiAgICAgbWVyZ2UoZmVhdHVyZXMsIHBsYXRmb3JtU3BlY2lmaWNG
ZWF0dXJlT3ZlcnJpZGVzRGVmYXVsdHNGb3JUZXN0KGNvbW1hbmQpKTsKIAogICAgIHJldHVybiBU
ZXN0T3B0aW9ucyB7IGZlYXR1cmVzIH07CkBAIC0xMzQ1LDYgKzEzMjgsMjQgQEAgc3RhdGljIHZv
aWQgY29udGVudEV4dGVuc2lvblN0b3JlQ2FsbGJhYwogICAgIGNvbnRleHQtPnRlc3RDb250cm9s
bGVyLm5vdGlmeURvbmUoKTsKIH0KIAorc3RhdGljIHN0ZDo6c3RyaW5nIHRlc3RQYXRoKFdLVVJM
UmVmIHVybCkKK3sKKyAgICBhdXRvIHNjaGVtZSA9IGFkb3B0V0soV0tVUkxDb3B5U2NoZW1lKHVy
bCkpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nSWdub3JpbmdDYXNlKHNj
aGVtZS5nZXQoKSwgImZpbGUiKSkgeworICAgICAgICBhdXRvIHBhdGggPSBhZG9wdFdLKFdLVVJM
Q29weVBhdGgodXJsKSk7CisgICAgICAgIGF1dG8gYnVmZmVyID0gc3RkOjp2ZWN0b3I8Y2hhcj4o
V0tTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKHBhdGguZ2V0KCkpKTsKKyAgICAgICAg
YXV0byBsZW5ndGggPSBXS1N0cmluZ0dldFVURjhDU3RyaW5nKHBhdGguZ2V0KCksIGJ1ZmZlci5k
YXRhKCksIGJ1ZmZlci5zaXplKCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChsZW5ndGggPiAw
KTsKKyNpZiBPUyhXSU5ET1dTKQorICAgICAgICAvLyBSZW1vdmUgdGhlIGZpcnN0ICcvJyBpZiBp
dCBzdGFydHMgd2l0aCBzb21ldGhpbmcgbGlrZSAiL0M6LyIuCisgICAgICAgIGlmIChsZW5ndGgg
Pj0gNCAmJiBidWZmZXJbMF0gPT0gJy8nICYmIGJ1ZmZlclsyXSA9PSAnOicgJiYgYnVmZmVyWzNd
ID09ICcvJykKKyAgICAgICAgICAgIHJldHVybiBzdGQ6OnN0cmluZyhidWZmZXIuZGF0YSgpICsg
MSwgbGVuZ3RoIC0gMSk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKGJ1ZmZl
ci5kYXRhKCksIGxlbmd0aCAtIDEpOworICAgIH0KKyAgICByZXR1cm4gc3RkOjpzdHJpbmcoKTsK
K30KKwogc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnRlbnRFeHRlbnNpb25KU09OUGF0aChXS1VSTFJl
ZiB1cmwpCiB7CiAgICAgYXV0byBwYXRoID0gdGVzdFBhdGgodXJsKTsKQEAgLTE0MzAsOTcgKzE0
MzEsMTMgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRDb250ZW50RXh0ZW5zaQogCiAjZW5k
aWYgLy8gIUVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAKLWNsYXNzIENvbW1hbmRUb2tlbml6
ZXIgewotcHVibGljOgotICAgIGV4cGxpY2l0IENvbW1hbmRUb2tlbml6ZXIoY29uc3Qgc3RkOjpz
dHJpbmcmIGlucHV0KQotICAgICAgICA6IG1faW5wdXQoaW5wdXQpCi0gICAgewotICAgICAgICBw
dW1wKCk7Ci0gICAgfQotCi0gICAgYm9vbCBoYXNOZXh0KCkgY29uc3Q7Ci0gICAgc3RkOjpzdHJp
bmcgbmV4dCgpOwotCi1wcml2YXRlOgotICAgIHZvaWQgcHVtcCgpOwotICAgIHN0YXRpYyBjb25z
dCBjaGFyIGtTZXBhcmF0b3IgPSAnXCcnOwotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtX2lucHV0
OwotICAgIHN0ZDo6c3RyaW5nIG1fbmV4dDsKLSAgICBzaXplX3QgbV9wb3NOZXh0U2VwYXJhdG9y
IHsgMCB9OwotfTsKLQotdm9pZCBDb21tYW5kVG9rZW5pemVyOjpwdW1wKCkKLXsKLSAgICBpZiAo
bV9wb3NOZXh0U2VwYXJhdG9yID09IHN0ZDo6c3RyaW5nOjpucG9zIHx8IG1fcG9zTmV4dFNlcGFy
YXRvciA9PSBtX2lucHV0LnNpemUoKSkgewotICAgICAgICBtX25leHQgPSBzdGQ6OnN0cmluZygp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHNpemVfdCBzdGFydCA9IG1fcG9zTmV4dFNl
cGFyYXRvciA/IG1fcG9zTmV4dFNlcGFyYXRvciArIDEgOiAwOwotICAgIG1fcG9zTmV4dFNlcGFy
YXRvciA9IG1faW5wdXQuZmluZChrU2VwYXJhdG9yLCBzdGFydCk7Ci0gICAgc2l6ZV90IHNpemUg
PSBtX3Bvc05leHRTZXBhcmF0b3IgPT0gc3RkOjpzdHJpbmc6Om5wb3MgPyBzdGQ6OnN0cmluZzo6
bnBvcyA6IG1fcG9zTmV4dFNlcGFyYXRvciAtIHN0YXJ0OwotICAgIG1fbmV4dCA9IHN0ZDo6c3Ry
aW5nKG1faW5wdXQsIHN0YXJ0LCBzaXplKTsKLX0KLQotc3RkOjpzdHJpbmcgQ29tbWFuZFRva2Vu
aXplcjo6bmV4dCgpCi17Ci0gICAgQVNTRVJUKGhhc05leHQoKSk7Ci0KLSAgICBzdGQ6OnN0cmlu
ZyBvbGROZXh0ID0gbV9uZXh0OwotICAgIHB1bXAoKTsKLSAgICByZXR1cm4gb2xkTmV4dDsKLX0K
LQotYm9vbCBDb21tYW5kVG9rZW5pemVyOjpoYXNOZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
IW1fbmV4dC5lbXB0eSgpOwotfQotCi1OT19SRVRVUk4gc3RhdGljIHZvaWQgZGllKGNvbnN0IHN0
ZDo6c3RyaW5nJiBpbnB1dExpbmUpCi17Ci0gICAgZnByaW50ZihzdGRlcnIsICJVbmV4cGVjdGVk
IGlucHV0IGxpbmU6ICVzXG4iLCBpbnB1dExpbmUuY19zdHIoKSk7Ci0gICAgZXhpdCgxKTsKLX0K
LQotc3RhdGljIFRlc3RDb21tYW5kIHBhcnNlSW5wdXRMaW5lKGNvbnN0IHN0ZDo6c3RyaW5nJiBp
bnB1dExpbmUpCi17Ci0gICAgVGVzdENvbW1hbmQgcmVzdWx0OwotICAgIENvbW1hbmRUb2tlbml6
ZXIgdG9rZW5pemVyKGlucHV0TGluZSk7Ci0gICAgaWYgKCF0b2tlbml6ZXIuaGFzTmV4dCgpKQot
ICAgICAgICBkaWUoaW5wdXRMaW5lKTsKLQotICAgIHN0ZDo6c3RyaW5nIGFyZyA9IHRva2VuaXpl
ci5uZXh0KCk7Ci0gICAgcmVzdWx0LnBhdGhPclVSTCA9IGFyZzsKLSAgICB3aGlsZSAodG9rZW5p
emVyLmhhc05leHQoKSkgewotICAgICAgICBhcmcgPSB0b2tlbml6ZXIubmV4dCgpOwotICAgICAg
ICBpZiAoYXJnID09IHN0ZDo6c3RyaW5nKCItLXRpbWVvdXQiKSkgewotICAgICAgICAgICAgc3Rk
OjpzdHJpbmcgdGltZW91dFRva2VuID0gdG9rZW5pemVyLm5leHQoKTsKLSAgICAgICAgICAgIHJl
c3VsdC50aW1lb3V0ID0gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyhhdG9pKHRpbWVvdXRUb2tl
bi5jX3N0cigpKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoYXJnID09IHN0ZDo6c3RyaW5nKCItcCIp
IHx8IGFyZyA9PSBzdGQ6OnN0cmluZygiLS1waXhlbC10ZXN0IikpIHsKLSAgICAgICAgICAgIHJl
c3VsdC5zaG91bGREdW1wUGl4ZWxzID0gdHJ1ZTsKLSAgICAgICAgICAgIGlmICh0b2tlbml6ZXIu
aGFzTmV4dCgpKQotICAgICAgICAgICAgICAgIHJlc3VsdC5leHBlY3RlZFBpeGVsSGFzaCA9IHRv
a2VuaXplci5uZXh0KCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoYXJnID09IHN0ZDo6c3RyaW5nKCIt
LWR1bXAtanNjb25zb2xlbG9nLWluLXN0ZGVyciIpKQotICAgICAgICAgICAgcmVzdWx0LmR1bXBK
U0NvbnNvbGVMb2dJblN0ZEVyciA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKGFyZyA9PSBzdGQ6
OnN0cmluZygiLS1hYnNvbHV0ZVBhdGgiKSkKLSAgICAgICAgICAgIHJlc3VsdC5hYnNvbHV0ZVBh
dGggPSB0b2tlbml6ZXIubmV4dCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkaWUoaW5w
dXRMaW5lKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHJlc3VsdC5hYnNvbHV0ZVBhdGguZW1wdHko
KSkgewotICAgICAgICAvLyBHcm9zcy4gTmVlZCB0byByZWR1Y2UgY29udmVyc2lvbnMgYmV0d2Vl
biBhbGwgdGhlIHN0cmluZyB0eXBlcyBhbmQgVVJMcy4KLSAgICAgICAgcmVzdWx0LmFic29sdXRl
UGF0aCA9IHRlc3RQYXRoKGFkb3B0V0soVGVzdENvbnRyb2xsZXI6OmNyZWF0ZVRlc3RVUkwocmVz
dWx0LnBhdGhPclVSTC5jX3N0cigpKSkuZ2V0KCkpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJ1blRlc3QoY29uc3QgY2hhciogaW5wdXRM
aW5lKQogewogICAgIEF1dG9kcmFpbmVkUG9vbCBwb29sOwotICAgIAorCiAgICAgV0tUZXh0Q2hl
Y2tlclNldFRlc3RpbmdNb2RlKHRydWUpOwotICAgIFRlc3RDb21tYW5kIGNvbW1hbmQgPSBwYXJz
ZUlucHV0TGluZShzdGQ6OnN0cmluZyhpbnB1dExpbmUpKTsKKyAgICAKKyAgICBhdXRvIGNvbW1h
bmQgPSBwYXJzZUlucHV0TGluZShzdGQ6OnN0cmluZyhpbnB1dExpbmUpKTsKIAogICAgIG1fc3Rh
dGUgPSBSdW5uaW5nVGVzdDsKICAgICAKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RD
b250cm9sbGVyLmgJKHJldmlzaW9uIDI2ODM1NSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
VGVzdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjQ0LDEzICs2NDQsNCBAQCBwcml2
YXRlOgogI2VuZGlmCiB9OwogCi1zdHJ1Y3QgVGVzdENvbW1hbmQgewotICAgIHN0ZDo6c3RyaW5n
IHBhdGhPclVSTDsKLSAgICBzdGQ6OnN0cmluZyBhYnNvbHV0ZVBhdGg7Ci0gICAgc3RkOjpzdHJp
bmcgZXhwZWN0ZWRQaXhlbEhhc2g7Ci0gICAgV1RGOjpTZWNvbmRzIHRpbWVvdXQ7Ci0gICAgYm9v
bCBzaG91bGREdW1wUGl4ZWxzIHsgZmFsc2UgfTsKLSAgICBib29sIGR1bXBKU0NvbnNvbGVMb2dJ
blN0ZEVyciB7IGZhbHNlIH07Ci19OwotCiB9IC8vIG5hbWVzcGFjZSBXVFIKSW5kZXg6IFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuY3BwCShyZXZpc2lvbiAyNjgzNTUpCisrKyBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RPcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NzggKzI2LDEzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdE9wdGlvbnMu
aCIKIAotI2luY2x1ZGUgIlN0cmluZ0Z1bmN0aW9ucy5oIgotI2luY2x1ZGUgIlRlc3RDb250cm9s
bGVyLmgiCiAjaW5jbHVkZSA8ZnN0cmVhbT4KLSNpbmNsdWRlIDxpb3N0cmVhbT4KICNpbmNsdWRl
IDxzdHJpbmc+Ci0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvU3RkRmlsZXN5c3RlbS5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgotCi0jZGVmaW5lIERVTVBfRkVBVFVSRVMgMAogCiBuYW1lc3BhY2Ug
V1RSIHsKIAotI2lmIERVTVBfRkVBVFVSRVMKLXN0YXRpYyB2b2lkIGR1bXBGZWF0dXJlcyhjb25z
dCBUZXN0RmVhdHVyZXMmIGZlYXR1cmVzKQotewotICAgIGlmIChmZWF0dXJlcy5leHBlcmltZW50
YWxGZWF0dXJlcy5lbXB0eSgpICYmIGZlYXR1cmVzLmludGVybmFsRGVidWdGZWF0dXJlcy5lbXB0
eSgpICYmIGZlYXR1cmVzLmJvb2xGZWF0dXJlcy5lbXB0eSgpICYmIGZlYXR1cmVzLmRvdWJsZUZl
YXR1cmVzLmVtcHR5KCkgJiYgZmVhdHVyZXMuc3RyaW5nRmVhdHVyZXMuZW1wdHkoKSAmJiBmZWF0
dXJlcy5zdHJpbmdWZWN0b3JGZWF0dXJlcy5lbXB0eSgpKSB7Ci0gICAgICAgIHN0ZDo6Y2VyciA8
PCAiICBbRU1QVFldXG4iOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmICgh
ZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMuZW1wdHkoKSkgewotICAgICAgICBzdGQ6OmNl
cnIgPDwgIiAgRXhwZXJpbWVudGFsIEZlYXR1cmVzOiBcbiI7Ci0gICAgICAgIGZvciAoYXV0byBb
a2V5LCB2YWx1ZV0gOiBmZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcykKLSAgICAgICAgICAg
IHN0ZDo6Y2VyciA8PCAiICAgICIgPDwga2V5IDw8ICI6ICIgPDwgdmFsdWUgPDwgJ1xuJzsKLSAg
ICB9Ci0gICAgaWYgKCFmZWF0dXJlcy5pbnRlcm5hbERlYnVnRmVhdHVyZXMuZW1wdHkoKSkgewot
ICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgSW50ZXJuYWwgRmVhdHVyZXM6IFxuIjsKLSAgICAgICAg
Zm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGZlYXR1cmVzLmludGVybmFsRGVidWdGZWF0dXJlcykK
LSAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiICAgICIgPDwga2V5IDw8ICI6ICIgPDwgdmFsdWUg
PDwgJ1xuJzsKLSAgICB9Ci0gICAgaWYgKCFmZWF0dXJlcy5ib29sRmVhdHVyZXMuZW1wdHkoKSkg
ewotICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgQm9vbCBGZWF0dXJlczogXG4iOwotICAgICAgICBm
b3IgKGF1dG8gW2tleSwgdmFsdWVdIDogZmVhdHVyZXMuYm9vbEZlYXR1cmVzKQotICAgICAgICAg
ICAgc3RkOjpjZXJyIDw8ICIgICAgIiA8PCBrZXkgPDwgIjogIiA8PCB2YWx1ZSA8PCAnXG4nOwot
ICAgIH0KLSAgICBpZiAoIWZlYXR1cmVzLmRvdWJsZUZlYXR1cmVzLmVtcHR5KCkpIHsKLSAgICAg
ICAgc3RkOjpjZXJyIDw8ICIgIERvdWJsZSBGZWF0dXJlczogXG4iOwotICAgICAgICBmb3IgKGF1
dG8gW2tleSwgdmFsdWVdIDogZmVhdHVyZXMuZG91YmxlRmVhdHVyZXMpCi0gICAgICAgICAgICBz
dGQ6OmNlcnIgPDwgIiAgICAiIDw8IGtleSA8PCAiOiAiIDw8IHZhbHVlIDw8ICdcbic7Ci0gICAg
fQotICAgIGlmICghZmVhdHVyZXMuc3RyaW5nRmVhdHVyZXMuZW1wdHkoKSkgewotICAgICAgICBz
dGQ6OmNlcnIgPDwgIiAgU3RyaW5nIEZlYXR1cmVzOiBcbiI7Ci0gICAgICAgIGZvciAoYXV0byBb
a2V5LCB2YWx1ZV0gOiBmZWF0dXJlcy5zdHJpbmdGZWF0dXJlcykKLSAgICAgICAgICAgIHN0ZDo6
Y2VyciA8PCAiICAgICIgPDwga2V5IDw8ICI6ICIgPDwgdmFsdWUgPDwgJ1xuJzsKLSAgICB9Ci0g
ICAgaWYgKCFmZWF0dXJlcy5zdHJpbmdWZWN0b3JGZWF0dXJlcy5lbXB0eSgpKSB7Ci0gICAgICAg
IHN0ZDo6Y2VyciA8PCAiICBTdHJpbmcgVmVjdG9yIEZlYXR1cmVzOiBcbiI7Ci0gICAgICAgIGZv
ciAoYXV0byBba2V5LCB2YWx1ZV0gOiBmZWF0dXJlcy5zdHJpbmdWZWN0b3JGZWF0dXJlcykKLSAg
ICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiICAgICIgPDwga2V5IDw8ICI6IE51bWJlciBvZiBzdHJp
bmdzICIgPDwgdmFsdWUuc2l6ZSgpIDw8ICdcbic7Ci0gICAgfQotfQotI2VuZGlmCi0KLXZvaWQg
bWVyZ2UoVGVzdEZlYXR1cmVzJiBiYXNlLCBUZXN0RmVhdHVyZXMgYWRkaXRpb25hbCkKLXsKLSAg
ICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHN0ZDo6dW5vcmRlcmVkX21hcDo6bWVyZ2Ugd2hl
biBpdCBpcyBhdmFpbGFibGUgZm9yIGFsbCBwb3J0cy4KLQotICAgIGZvciAoYXV0byBba2V5LCB2
YWx1ZV0gOiBhZGRpdGlvbmFsLmV4cGVyaW1lbnRhbEZlYXR1cmVzKQotICAgICAgICBiYXNlLmV4
cGVyaW1lbnRhbEZlYXR1cmVzLmluc2VydF9vcl9hc3NpZ24oa2V5LCB2YWx1ZSk7Ci0gICAgZm9y
IChhdXRvIFtrZXksIHZhbHVlXSA6IGFkZGl0aW9uYWwuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzKQot
ICAgICAgICBiYXNlLmludGVybmFsRGVidWdGZWF0dXJlcy5pbnNlcnRfb3JfYXNzaWduKGtleSwg
dmFsdWUpOwotICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBhZGRpdGlvbmFsLmJvb2xGZWF0
dXJlcykKLSAgICAgICAgYmFzZS5ib29sRmVhdHVyZXMuaW5zZXJ0X29yX2Fzc2lnbihrZXksIHZh
bHVlKTsKLSAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogYWRkaXRpb25hbC5kb3VibGVGZWF0
dXJlcykKLSAgICAgICAgYmFzZS5kb3VibGVGZWF0dXJlcy5pbnNlcnRfb3JfYXNzaWduKGtleSwg
dmFsdWUpOwotICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBhZGRpdGlvbmFsLnN0cmluZ0Zl
YXR1cmVzKQotICAgICAgICBiYXNlLnN0cmluZ0ZlYXR1cmVzLmluc2VydF9vcl9hc3NpZ24oa2V5
LCB2YWx1ZSk7Ci0gICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGFkZGl0aW9uYWwuc3RyaW5n
VmVjdG9yRmVhdHVyZXMpCi0gICAgICAgIGJhc2Uuc3RyaW5nVmVjdG9yRmVhdHVyZXMuaW5zZXJ0
X29yX2Fzc2lnbihrZXksIHZhbHVlKTsKLX0KLQogc3RhdGljIGNvbnN0IHN0ZDo6dW5vcmRlcmVk
X21hcDxzdGQ6OnN0cmluZywgYm9vbD4mIGJvb2xEZWZhdWx0c01hcCgpCiB7CiAgICAgc3RhdGlj
IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9vbD4gbWFwIHsKQEAgLTE4MiwyNjgg
KzExNyw3NiBAQCBzdGF0aWMgY29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyCiAgICAg
cmV0dXJuIG1hcDsKIH0KIAotZW51bSBjbGFzcyBLZXlUeXBlIDogdWludDhfdCB7Ci0gICAgQm9v
bCwKLSAgICBEb3VibGUsCi0gICAgU3RyaW5nLAotICAgIFN0cmluZ1JlbGF0aXZlUGF0aCwKLSAg
ICBTdHJpbmdVUkwsCi0gICAgU3RyaW5nVmVjdG9yLAotICAgIFVua25vd24KLX07Ci0KLXN0YXRp
YyBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIEtleVR5cGU+JiBrZXlUeXBl
TWFwKCkKLXsKLSAgICBzdGF0aWMgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBLZXlU
eXBlPiBtYXAgewotICAgICAgICB7ICJhbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tG
b3JDcmVkZW50aWFscyIsIEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAiYWxsb3dUb3BOYXZp
Z2F0aW9uVG9EYXRhVVJMcyIsIEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAiYWxsb3dzTGlu
a1ByZXZpZXciLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsgImRvbVBhc3RlQWxsb3dlZCIs
IEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAiZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIiwg
S2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJlZGl0YWJsZSIsIEtleVR5cGU6OkJvb2wgfSwK
LSAgICAgICAgeyAiZW5hYmxlQXBwTmFwIiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJl
bmFibGVBdHRhY2htZW50RWxlbWVudCIsIEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAiZW5h
YmxlQmFja0ZvcndhcmRDYWNoZSIsIEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAiZW5hYmxl
Q2FwdHVyZUF1ZGlvSW5HUFVQcm9jZXNzIiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJl
bmFibGVDYXB0dXJlQXVkaW9JblVJUHJvY2VzcyIsIEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAg
eyAiZW5hYmxlQ2FwdHVyZVZpZGVvSW5HUFVQcm9jZXNzIiwgS2V5VHlwZTo6Qm9vbCB9LAotICAg
ICAgICB7ICJlbmFibGVDYXB0dXJlVmlkZW9JblVJUHJvY2VzcyIsIEtleVR5cGU6OkJvb2wgfSwK
LSAgICAgICAgeyAiZW5hYmxlQ29sb3JGaWx0ZXIiLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAg
IHsgImVuYWJsZUluQXBwQnJvd3NlclByaXZhY3kiLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAg
IHsgImVuYWJsZUluc3BlY3RvckFkZGl0aW9ucyIsIEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAg
eyAiZW5hYmxlS2V5Z2VuRWxlbWVudCIsIEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAiZW5h
YmxlTWVudUl0ZW1FbGVtZW50IiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJlbmFibGVN
b2Rlcm5NZWRpYUNvbnRyb2xzIiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJlbmFibGVQ
cm9jZXNzU3dhcE9uTmF2aWdhdGlvbiIsIEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAiZW5h
YmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW4iLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsg
ImVuYWJsZVNlcnZpY2VDb250cm9scyIsIEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAiZW5h
YmxlV2ViQXV0aGVudGljYXRpb24iLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsgImVuYWJs
ZVdlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50aWNhdG9yIiwgS2V5VHlwZTo6Qm9vbCB9LAot
ICAgICAgICB7ICJpZ25vcmVTeW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzIiwgS2V5VHlwZTo6
Qm9vbCB9LAotICAgICAgICB7ICJpZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyIsIEtleVR5cGU6
OkJvb2wgfSwKLSAgICAgICAgeyAiaXNBcHBCb3VuZFdlYlZpZXciLCBLZXlUeXBlOjpCb29sIH0s
Ci0gICAgICAgIHsgIm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzIiwgS2V5VHlwZTo6Qm9vbCB9LAot
ICAgICAgICB7ICJwdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlIiwgS2V5VHlwZTo6
Qm9vbCB9LAotICAgICAgICB7ICJydW5TaW5nbHkiLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAg
IHsgInNob3VsZEhhbmRsZVJ1bk9wZW5QYW5lbCIsIEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAg
eyAic2hvdWxkSWdub3JlTWV0YVZpZXdwb3J0IiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7
ICJzaG91bGRQcmVzZW50UG9wb3ZlcnMiLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsgInNo
b3VsZFNob3dUb3VjaGVzIiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJzaG91bGRTaG93
V2ViVmlldyIsIEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAic3BlbGxDaGVja2luZ0RvdHMi
LCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsgInVzZUFjY2VsZXJhdGVkRHJhd2luZyIsIEtl
eVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAidXNlQ2hhcmFjdGVyU2VsZWN0aW9uR3JhbnVsYXJp
dHkiLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsgInVzZURhdGFEZXRlY3Rpb24iLCBLZXlU
eXBlOjpCb29sIH0sCi0gICAgICAgIHsgInVzZUVwaGVtZXJhbFNlc3Npb24iLCBLZXlUeXBlOjpC
b29sIH0sCi0gICAgICAgIHsgInVzZUZsZXhpYmxlVmlld3BvcnQiLCBLZXlUeXBlOjpCb29sIH0s
Ci0gICAgICAgIHsgInVzZU1vY2tTY3JvbGxiYXJzIiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAg
ICB7ICJ1c2VSZW1vdGVMYXllclRyZWUiLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsgInVz
ZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQiLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsg
InVzZVRocmVhZGVkU2Nyb2xsaW5nIiwgS2V5VHlwZTo6Qm9vbCB9LAorY29uc3Qgc3RkOjp1bm9y
ZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBUZXN0SGVhZGVyS2V5VHlwZT4mIFRlc3RPcHRpb25zOjpr
ZXlUeXBlTWFwcGluZygpCit7CisgICAgc3RhdGljIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0
cmluZywgVGVzdEhlYWRlcktleVR5cGU+IG1hcCB7CisgICAgICAgIHsgImFsbG93Q3Jvc3NPcmln
aW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzIiwgVGVzdEhlYWRlcktleVR5cGU6OkJv
b2wgfSwKKyAgICAgICAgeyAiYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyIsIFRlc3RIZWFk
ZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImFsbG93c0xpbmtQcmV2aWV3IiwgVGVzdEhl
YWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZG9tUGFzdGVBbGxvd2VkIiwgVGVzdEhl
YWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJy
IiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZWRpdGFibGUiLCBUZXN0
SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVBcHBOYXAiLCBUZXN0SGVh
ZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVBdHRhY2htZW50RWxlbWVudCIs
IFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUJhY2tGb3J3YXJk
Q2FjaGUiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVDYXB0
dXJlQXVkaW9JbkdQVVByb2Nlc3MiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAg
ICB7ICJlbmFibGVDYXB0dXJlQXVkaW9JblVJUHJvY2VzcyIsIFRlc3RIZWFkZXJLZXlUeXBlOjpC
b29sIH0sCisgICAgICAgIHsgImVuYWJsZUNhcHR1cmVWaWRlb0luR1BVUHJvY2VzcyIsIFRlc3RI
ZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUNhcHR1cmVWaWRlb0luVUlQ
cm9jZXNzIiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlQ29s
b3JGaWx0ZXIiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVJ
bkFwcEJyb3dzZXJQcml2YWN5IiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAg
eyAiZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zIiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwK
KyAgICAgICAgeyAiZW5hYmxlS2V5Z2VuRWxlbWVudCIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29s
IH0sCisgICAgICAgIHsgImVuYWJsZU1lbnVJdGVtRWxlbWVudCIsIFRlc3RIZWFkZXJLZXlUeXBl
OjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMiLCBUZXN0SGVh
ZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdh
dGlvbiIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZVByb2Nl
c3NTd2FwT25XaW5kb3dPcGVuIiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAg
eyAiZW5hYmxlU2VydmljZUNvbnRyb2xzIiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAg
ICAgICAgeyAiZW5hYmxlV2ViQXV0aGVudGljYXRpb24iLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9v
bCB9LAorICAgICAgICB7ICJlbmFibGVXZWJBdXRoZW50aWNhdGlvbkxvY2FsQXV0aGVudGljYXRv
ciIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImlnbm9yZVN5bmNocm9u
b3VzTWVzc2FnaW5nVGltZW91dHMiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAg
ICB7ICJpZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29s
IH0sCisgICAgICAgIHsgImlzQXBwQm91bmRXZWJWaWV3IiwgVGVzdEhlYWRlcktleVR5cGU6OkJv
b2wgfSwKKyAgICAgICAgeyAibmVlZHNTaXRlU3BlY2lmaWNRdWlya3MiLCBUZXN0SGVhZGVyS2V5
VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJwdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtN
b2RlIiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAicnVuU2luZ2x5Iiwg
VGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAic2hvdWxkSGFuZGxlUnVuT3Bl
blBhbmVsIiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAic2hvdWxkSWdu
b3JlTWV0YVZpZXdwb3J0IiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAi
c2hvdWxkUHJlc2VudFBvcG92ZXJzIiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAg
ICAgeyAic2hvdWxkU2hvd1RvdWNoZXMiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAg
ICAgICB7ICJzaG91bGRTaG93V2ViVmlldyIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisg
ICAgICAgIHsgInNwZWxsQ2hlY2tpbmdEb3RzIiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwK
KyAgICAgICAgeyAidXNlQWNjZWxlcmF0ZWREcmF3aW5nIiwgVGVzdEhlYWRlcktleVR5cGU6OkJv
b2wgfSwKKyAgICAgICAgeyAidXNlQ2hhcmFjdGVyU2VsZWN0aW9uR3JhbnVsYXJpdHkiLCBUZXN0
SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VEYXRhRGV0ZWN0aW9uIiwgVGVz
dEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAidXNlRXBoZW1lcmFsU2Vzc2lvbiIs
IFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInVzZUZsZXhpYmxlVmlld3Bv
cnQiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VNb2NrU2Nyb2xs
YmFycyIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInVzZVJlbW90ZUxh
eWVyVHJlZSIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInVzZVNlcnZp
Y2VXb3JrZXJTaG9ydFRpbWVvdXQiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAg
ICB7ICJ1c2VUaHJlYWRlZFNjcm9sbGluZyIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCiAg
ICAgCi0gICAgICAgIHsgImNvbnRlbnRJbnNldC50b3AiLCBLZXlUeXBlOjpEb3VibGUgfSwKLSAg
ICAgICAgeyAiZGV2aWNlU2NhbGVGYWN0b3IiLCBLZXlUeXBlOjpEb3VibGUgfSwKLSAgICAgICAg
eyAidmlld0hlaWdodCIsIEtleVR5cGU6OkRvdWJsZSB9LAotICAgICAgICB7ICJ2aWV3V2lkdGgi
LCBLZXlUeXBlOjpEb3VibGUgfSwKLQotICAgICAgICB7ICJhZGRpdGlvbmFsU3VwcG9ydGVkSW1h
Z2VUeXBlcyIsIEtleVR5cGU6OlN0cmluZyB9LAotICAgICAgICB7ICJhcHBsaWNhdGlvbkJ1bmRs
ZUlkZW50aWZpZXIiLCBLZXlUeXBlOjpTdHJpbmcgfSwKLSAgICAgICAgeyAiYXBwbGljYXRpb25N
YW5pZmVzdCIsIEtleVR5cGU6OlN0cmluZ1JlbGF0aXZlUGF0aCB9LAotICAgICAgICB7ICJjb250
ZW50TW9kZSIsIEtleVR5cGU6OlN0cmluZyB9LAotICAgICAgICB7ICJqc2NPcHRpb25zIiwgS2V5
VHlwZTo6U3RyaW5nIH0sCi0gICAgICAgIHsgInN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTCIs
IEtleVR5cGU6OlN0cmluZ1VSTCB9LAorICAgICAgICB7ICJjb250ZW50SW5zZXQudG9wIiwgVGVz
dEhlYWRlcktleVR5cGU6OkRvdWJsZSB9LAorICAgICAgICB7ICJkZXZpY2VTY2FsZUZhY3RvciIs
IFRlc3RIZWFkZXJLZXlUeXBlOjpEb3VibGUgfSwKKyAgICAgICAgeyAidmlld0hlaWdodCIsIFRl
c3RIZWFkZXJLZXlUeXBlOjpEb3VibGUgfSwKKyAgICAgICAgeyAidmlld1dpZHRoIiwgVGVzdEhl
YWRlcktleVR5cGU6OkRvdWJsZSB9LAorCisgICAgICAgIHsgImFkZGl0aW9uYWxTdXBwb3J0ZWRJ
bWFnZVR5cGVzIiwgVGVzdEhlYWRlcktleVR5cGU6OlN0cmluZyB9LAorICAgICAgICB7ICJhcHBs
aWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIiLCBUZXN0SGVhZGVyS2V5VHlwZTo6U3RyaW5nIH0sCisg
ICAgICAgIHsgImFwcGxpY2F0aW9uTWFuaWZlc3QiLCBUZXN0SGVhZGVyS2V5VHlwZTo6U3RyaW5n
UmVsYXRpdmVQYXRoIH0sCisgICAgICAgIHsgImNvbnRlbnRNb2RlIiwgVGVzdEhlYWRlcktleVR5
cGU6OlN0cmluZyB9LAorICAgICAgICB7ICJqc2NPcHRpb25zIiwgVGVzdEhlYWRlcktleVR5cGU6
OlN0cmluZyB9LAorICAgICAgICB7ICJzdGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkwiLCBUZXN0
SGVhZGVyS2V5VHlwZTo6U3RyaW5nVVJMIH0sCiAKLSAgICAgICAgeyAibGFuZ3VhZ2UiLCBLZXlU
eXBlOjpTdHJpbmdWZWN0b3IgfSwKKyAgICAgICAgeyAibGFuZ3VhZ2UiLCBUZXN0SGVhZGVyS2V5
VHlwZTo6U3RyaW5nVmVjdG9yIH0sCiAgICAgfTsKIAogICAgIHJldHVybiBtYXA7CiB9CiAKLXN0
YXRpYyBLZXlUeXBlIGtleVR5cGUoc3RkOjpzdHJpbmcga2V5KQotewotICAgIGF1dG8gbWFwID0g
a2V5VHlwZU1hcCgpOwotICAgIGF1dG8gaXQgPSBtYXAuZmluZChrZXkpOwotICAgIGlmIChpdCA9
PSBtYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBLZXlUeXBlOjpVbmtub3duOwotICAgIHJldHVy
biBpdC0+c2Vjb25kOwotfQotCi1zdGF0aWMgYm9vbCBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFs
dWUoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAidHJ1ZSIp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICh2YWx1ZSA9PSAiZmFsc2UiKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBMT0dfRVJST1IoIkZvdW5kIHVuZXhwZWN0ZWQgdmFsdWUg
JyVzJyBmb3IgYm9vbGVhbiBvcHRpb24uIEV4cGVjdGVkICd0cnVlJyBvciAnZmFsc2UnLiIsIHZh
bHVlLmNfc3RyKCkpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIHN0ZDo6c3RyaW5n
IHBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNSZWxhdGl2ZVBhdGgoY29uc3Qgc3RkOjpzdHJp
bmcmIHZhbHVlLCBjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQotewotICAgIGF1dG8gYmFz
ZVVSTCA9IGFkb3B0V0soVGVzdENvbnRyb2xsZXI6OmNyZWF0ZVRlc3RVUkwocGF0aE9yVVJMLmNf
c3RyKCkpKTsKLSAgICBhdXRvIHJlbGF0aXZlVVJMID0gYWRvcHRXSyhXS1VSTENyZWF0ZVdpdGhC
YXNlVVJMKGJhc2VVUkwuZ2V0KCksIHZhbHVlLmNfc3RyKCkpKTsKLSAgICByZXR1cm4gdG9TVEQo
YWRvcHRXSyhXS1VSTENvcHlQYXRoKHJlbGF0aXZlVVJMLmdldCgpKSkpOwotfQotCi1zdGF0aWMg
c3RkOjpzdHJpbmcgcGFyc2VTdHJpbmdUZXN0SGVhZGVyVmFsdWVBc1VSTChjb25zdCBzdGQ6OnN0
cmluZyYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU1REKGFkb3B0V0soV0tVUkxDb3B5U3RyaW5n
KFRlc3RDb250cm9sbGVyOjpjcmVhdGVUZXN0VVJMKHZhbHVlLmNfc3RyKCkpKSkpOwotfQotCi1z
dGF0aWMgVGVzdEZlYXR1cmVzIHBhcnNlVGVzdEhlYWRlcihzdGQ6OmZpbGVzeXN0ZW06OnBhdGgg
cGF0aCwgY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKLXsKLSAgICBUZXN0RmVhdHVyZXMg
ZmVhdHVyZXM7Ci0gICAgaWYgKCFzdGQ6OmZpbGVzeXN0ZW06OmV4aXN0cyhwYXRoKSkKLSAgICAg
ICAgcmV0dXJuIGZlYXR1cmVzOwotCi0gICAgc3RkOjppZnN0cmVhbSBmaWxlKHBhdGgpOwotICAg
IGlmICghZmlsZS5nb29kKCkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3Qgb3BlbiBm
aWxlIHRvIGluc3BlY3QgdGVzdCBoZWFkZXJzIGluICVzIiwgcGF0aC5jX3N0cigpKTsKLSAgICAg
ICAgcmV0dXJuIGZlYXR1cmVzOwotICAgIH0KLQotICAgIHN0ZDo6c3RyaW5nIG9wdGlvbnM7Ci0g
ICAgZ2V0bGluZShmaWxlLCBvcHRpb25zKTsKLSAgICBzdGQ6OnN0cmluZyBiZWdpblN0cmluZygi
d2Via2l0LXRlc3QtcnVubmVyIFsgIik7Ci0gICAgc3RkOjpzdHJpbmcgZW5kU3RyaW5nKCIgXSIp
OwotICAgIHNpemVfdCBiZWdpbkxvY2F0aW9uID0gb3B0aW9ucy5maW5kKGJlZ2luU3RyaW5nKTsK
LSAgICBpZiAoYmVnaW5Mb2NhdGlvbiA9PSBzdGQ6OnN0cmluZzo6bnBvcykKLSAgICAgICAgcmV0
dXJuIGZlYXR1cmVzOwotICAgIHNpemVfdCBlbmRMb2NhdGlvbiA9IG9wdGlvbnMuZmluZChlbmRT
dHJpbmcsIGJlZ2luTG9jYXRpb24pOwotICAgIGlmIChlbmRMb2NhdGlvbiA9PSBzdGQ6OnN0cmlu
Zzo6bnBvcykgewotICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBmaW5kIGVuZCBvZiB0ZXN0
IGhlYWRlciBpbiAlcyIsIHBhdGguY19zdHIoKSk7Ci0gICAgICAgIHJldHVybiBmZWF0dXJlczsK
LSAgICB9Ci0gICAgc3RkOjpzdHJpbmcgcGFpclN0cmluZyA9IG9wdGlvbnMuc3Vic3RyKGJlZ2lu
TG9jYXRpb24gKyBiZWdpblN0cmluZy5zaXplKCksIGVuZExvY2F0aW9uIC0gKGJlZ2luTG9jYXRp
b24gKyBiZWdpblN0cmluZy5zaXplKCkpKTsKLSAgICBzaXplX3QgcGFpclN0YXJ0ID0gMDsKLSAg
ICB3aGlsZSAocGFpclN0YXJ0IDwgcGFpclN0cmluZy5zaXplKCkpIHsKLSAgICAgICAgc2l6ZV90
IHBhaXJFbmQgPSBwYWlyU3RyaW5nLmZpbmQoIiAiLCBwYWlyU3RhcnQpOwotICAgICAgICBpZiAo
cGFpckVuZCA9PSBzdGQ6OnN0cmluZzo6bnBvcykKLSAgICAgICAgICAgIHBhaXJFbmQgPSBwYWly
U3RyaW5nLnNpemUoKTsKLSAgICAgICAgc2l6ZV90IGVxdWFsc0xvY2F0aW9uID0gcGFpclN0cmlu
Zy5maW5kKCI9IiwgcGFpclN0YXJ0KTsKLSAgICAgICAgaWYgKGVxdWFsc0xvY2F0aW9uID09IHN0
ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIk1hbGZvcm1lZCBvcHRp
b24gaW4gdGVzdCBoZWFkZXIgKGNvdWxkIG5vdCBmaW5kICc9JyBjaGFyYWN0ZXIpIGluICVzIiwg
cGF0aC5jX3N0cigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGF1
dG8ga2V5ID0gcGFpclN0cmluZy5zdWJzdHIocGFpclN0YXJ0LCBlcXVhbHNMb2NhdGlvbiAtIHBh
aXJTdGFydCk7Ci0gICAgICAgIGF1dG8gdmFsdWUgPSBwYWlyU3RyaW5nLnN1YnN0cihlcXVhbHNM
b2NhdGlvbiArIDEsIHBhaXJFbmQgLSAoZXF1YWxzTG9jYXRpb24gKyAxKSk7Ci0KLSAgICAgICAg
aWYgKGtleS5yZmluZCgiZXhwZXJpbWVudGFsOiIpID09IDApIHsKLSAgICAgICAgICAgIGtleSA9
IGtleS5zdWJzdHIoMTMpOwotICAgICAgICAgICAgZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVy
ZXMuaW5zZXJ0KHsga2V5LCBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpIH0pOwot
ICAgICAgICB9IGVsc2UgaWYgKGtleS5yZmluZCgiaW50ZXJuYWw6IikgPT0gMCkgewotICAgICAg
ICAgICAga2V5ID0ga2V5LnN1YnN0cig5KTsKLSAgICAgICAgICAgIGZlYXR1cmVzLmludGVybmFs
RGVidWdGZWF0dXJlcy5pbnNlcnQoeyBrZXksIHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2
YWx1ZSkgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKGtleVR5cGUoa2V5KSkgewot
ICAgICAgICBjYXNlIEtleVR5cGU6OkJvb2w6Ci0gICAgICAgICAgICBmZWF0dXJlcy5ib29sRmVh
dHVyZXMuaW5zZXJ0KHsga2V5LCBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpIH0p
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgS2V5VHlwZTo6RG91YmxlOgotICAg
ICAgICAgICAgZmVhdHVyZXMuZG91YmxlRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCBzdGQ6OnN0b2Qo
dmFsdWUpIH0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgS2V5VHlwZTo6U3Ry
aW5nOgotICAgICAgICAgICAgZmVhdHVyZXMuc3RyaW5nRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCB2
YWx1ZSB9KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEtleVR5cGU6OlN0cmlu
Z1JlbGF0aXZlUGF0aDoKLSAgICAgICAgICAgIGZlYXR1cmVzLnN0cmluZ0ZlYXR1cmVzLmluc2Vy
dCh7IGtleSwgcGFyc2VTdHJpbmdUZXN0SGVhZGVyVmFsdWVBc1JlbGF0aXZlUGF0aCh2YWx1ZSwg
cGF0aE9yVVJMKSB9KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEtleVR5cGU6
OlN0cmluZ1VSTDoKLSAgICAgICAgICAgIGZlYXR1cmVzLnN0cmluZ0ZlYXR1cmVzLmluc2VydCh7
IGtleSwgcGFyc2VTdHJpbmdUZXN0SGVhZGVyVmFsdWVBc1VSTCh2YWx1ZSkgfSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBLZXlUeXBlOjpTdHJpbmdWZWN0b3I6Ci0gICAgICAg
ICAgICBmZWF0dXJlcy5zdHJpbmdWZWN0b3JGZWF0dXJlcy5pbnNlcnQoeyBrZXksIHNwbGl0KHZh
bHVlLCAnLCcpIH0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgS2V5VHlwZTo6
VW5rbm93bjoKLSAgICAgICAgICAgIExPR19FUlJPUigiVW5rbm93biBrZXksICclcywgaW4gdGVz
dCBoZWFkZXIgaW4gJXMiLCBrZXkuY19zdHIoKSwgcGF0aC5jX3N0cigpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFpclN0YXJ0ID0gcGFpckVuZCArIDE7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGZlYXR1cmVzOwotfQotCi1zdGF0aWMgYm9vbCBwYXRoQ29udGFp
bnMoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCwgY29uc3QgY2hhciogc3Vic3RyaW5nKQot
ewotICAgIFN0cmluZyBwYXRoKHBhdGhPclVSTC5jX3N0cigpKTsKLSAgICByZXR1cm4gcGF0aC5j
b250YWlucyhzdWJzdHJpbmcpOyAvLyBDYXNlLWluc2Vuc2l0aXZlLgotfQotCi1zdGF0aWMgYm9v
bCBzaG91bGRNYWtlVmlld3BvcnRGbGV4aWJsZShjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJM
KQotewotICAgIHJldHVybiBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAidmlld3BvcnQvIikgJiYg
IXBhdGhDb250YWlucyhwYXRoT3JVUkwsICJ2aXN1YWwtdmlld3BvcnQvIik7Ci19Ci0KLXN0YXRp
YyBib29sIHNob3VsZFVzZUVwaGVtZXJhbFNlc3Npb24oY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhP
clVSTCkKLXsKLSAgICByZXR1cm4gcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgInczYy9JbmRleGVk
REItcHJpdmF0ZS1icm93c2luZyIpIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJ3M2NcXElu
ZGV4ZWREQi1wcml2YXRlLWJyb3dzaW5nIik7Ci19Ci0KLXN0YXRpYyBPcHRpb25hbDxzdGQ6OnBh
aXI8ZG91YmxlLCBkb3VibGU+PiBvdmVycmlkZVZpZXdXaWR0aEFuZEhlaWdodEZvclRlc3QoY29u
c3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKLXsKLSAgICBpZiAocGF0aENvbnRhaW5zKHBhdGhP
clVSTCwgInN2Zy9XM0MtU1ZHLTEuMSIpIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJzdmdc
XFczQy1TVkctMS4xIikpCi0gICAgICAgIHJldHVybiB7IHsgNDgwLCAzNjAgfSB9OwotICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLXN0YXRpYyBPcHRpb25hbDxkb3VibGU+IG92ZXJyaWRl
RGV2aWNlU2NhbGVGYWN0b3JGb3JUZXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCi17
Ci0gICAgaWYgKHBhdGhDb250YWlucyhwYXRoT3JVUkwsICIvaGlkcGktM3gtIikpCi0gICAgICAg
IHJldHVybiAzOwotICAgIGlmIChwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAiL2hpZHBpLSIpKQot
ICAgICAgICByZXR1cm4gMjsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi1zdGF0aWMg
Ym9vbCBzaG91bGREdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIoY29uc3Qgc3RkOjpzdHJpbmcmIHBh
dGhPclVSTCkKLXsKLSAgICByZXR1cm4gcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9z
dDo4ODAwL2JlYWNvbiIpIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6OTQ0
My9iZWFjb24iKQotICAgICAgICB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0
Ojg4MDAvY29ycyIpIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6OTQ0My9j
b3JzIikKLSAgICAgICAgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo4ODAw
L2ZldGNoIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL2ZldGNo
IikKLSAgICAgICAgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo4ODAwL3Nl
cnZpY2Utd29ya2VycyIpIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6OTQ0
My9zZXJ2aWNlLXdvcmtlcnMiKQotICAgICAgICB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAi
bG9jYWxob3N0Ojg4MDAvc3RyZWFtcy93cml0YWJsZS1zdHJlYW1zIikgfHwgcGF0aENvbnRhaW5z
KHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3N0cmVhbXMvd3JpdGFibGUtc3RyZWFtcyIpCi0g
ICAgICAgIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgwMC9zdHJlYW1z
L3BpcGluZyIpIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6OTQ0My9zdHJl
YW1zL3BpcGluZyIpCi0gICAgICAgIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhv
c3Q6ODgwMC94aHIiKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMv
eGhyIikKLSAgICAgICAgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo4ODAw
L3dlYnJ0YyIpIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6OTQ0My93ZWJy
dGMiKQotICAgICAgICB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAv
d2Vic29ja2V0cyIpIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6OTQ0My93
ZWJzb2NrZXRzIik7Ci19Ci0KLVRlc3RGZWF0dXJlcyBoYXJkY29kZWRGZWF0dXJlc0Jhc2VkT25Q
YXRoRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYgY29tbWFuZCkKLXsKLSAgICBUZXN0RmVhdHVy
ZXMgZmVhdHVyZXM7Ci0KLSAgICBpZiAoc2hvdWxkTWFrZVZpZXdwb3J0RmxleGlibGUoY29tbWFu
ZC5wYXRoT3JVUkwpKQotICAgICAgICBmZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsgInVz
ZUZsZXhpYmxlVmlld3BvcnQiLCB0cnVlIH0pOwotICAgIGlmIChzaG91bGRVc2VFcGhlbWVyYWxT
ZXNzaW9uKGNvbW1hbmQucGF0aE9yVVJMKSkKLSAgICAgICAgZmVhdHVyZXMuYm9vbEZlYXR1cmVz
Lmluc2VydCh7ICJ1c2VFcGhlbWVyYWxTZXNzaW9uIiwgdHJ1ZSB9KTsKLSAgICBpZiAoc2hvdWxk
RHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKGNvbW1hbmQucGF0aE9yVVJMKSkKLSAgICAgICAgZmVh
dHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIiLCB0
cnVlIH0pOwotICAgIGlmIChhdXRvIGRldmljZVNjYWxlRmFjdG9yID0gb3ZlcnJpZGVEZXZpY2VT
Y2FsZUZhY3RvckZvclRlc3QoY29tbWFuZC5wYXRoT3JVUkwpOyBkZXZpY2VTY2FsZUZhY3RvciAh
PSBXVEY6Om51bGxvcHQpCi0gICAgICAgIGZlYXR1cmVzLmRvdWJsZUZlYXR1cmVzLmluc2VydCh7
ICJkZXZpY2VTY2FsZUZhY3RvciIsIGRldmljZVNjYWxlRmFjdG9yLnZhbHVlKCkgfSk7Ci0gICAg
aWYgKGF1dG8gdmlld1dpZHRoQW5kSGVpZ2h0ID0gb3ZlcnJpZGVWaWV3V2lkdGhBbmRIZWlnaHRG
b3JUZXN0KGNvbW1hbmQucGF0aE9yVVJMKTsgdmlld1dpZHRoQW5kSGVpZ2h0ICE9IFdURjo6bnVs
bG9wdCkgewotICAgICAgICBmZWF0dXJlcy5kb3VibGVGZWF0dXJlcy5pbnNlcnQoeyAidmlld1dp
ZHRoIiwgdmlld1dpZHRoQW5kSGVpZ2h0LT5maXJzdCB9KTsKLSAgICAgICAgZmVhdHVyZXMuZG91
YmxlRmVhdHVyZXMuaW5zZXJ0KHsgInZpZXdIZWlnaHQiLCB2aWV3V2lkdGhBbmRIZWlnaHQtPnNl
Y29uZCB9KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmVhdHVyZXM7Ci19Ci0KLVRlc3RGZWF0dXJl
cyBmZWF0dXJlRGVmYXVsdHNGcm9tVGVzdEhlYWRlckZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQm
IGNvbW1hbmQpCi17Ci0gICAgcmV0dXJuIHBhcnNlVGVzdEhlYWRlcihjb21tYW5kLmFic29sdXRl
UGF0aCwgY29tbWFuZC5wYXRoT3JVUkwpOwotfQotCiBUZXN0T3B0aW9uczo6VGVzdE9wdGlvbnMo
VGVzdEZlYXR1cmVzIGZlYXR1cmVzKQogICAgIDogbV9mZWF0dXJlcyB7IGZlYXR1cmVzIH0KIHsK
LSNpZiBEVU1QX0ZFQVRVUkVTCi0gICAgc3RkOjpjZXJyIDw8ICJEVU1QSU5HIEZFQVRVUkVTXG4i
OwotICAgIGR1bXBGZWF0dXJlcyhtX2ZlYXR1cmVzKTsKLSNlbmRpZgogfQogCiBib29sIFRlc3RP
cHRpb25zOjpoYXNTYW1lSW5pdGlhbGl6YXRpb25PcHRpb25zKGNvbnN0IFRlc3RPcHRpb25zJiBv
cHRpb25zKSBjb25zdApAQCAtNDUzLDI3ICsxOTYsMjcgQEAgYm9vbCBUZXN0T3B0aW9uczo6aGFz
U2FtZUluaXRpYWxpemF0aW9uTwogICAgIGlmIChtX2ZlYXR1cmVzLmludGVybmFsRGVidWdGZWF0
dXJlcyAhPSBvcHRpb25zLm1fZmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBmb3IgKGF1dG8gW2tleSwga2V5VHlwZV0gOiBrZXlUeXBl
TWFwKCkpIHsKKyAgICBmb3IgKGF1dG8gW2tleSwga2V5VHlwZV0gOiBrZXlUeXBlTWFwcGluZygp
KSB7CiAgICAgICAgIHN3aXRjaCAoa2V5VHlwZSkgewotICAgICAgICBjYXNlIEtleVR5cGU6OkJv
b2w6CisgICAgICAgIGNhc2UgVGVzdEhlYWRlcktleVR5cGU6OkJvb2w6CiAgICAgICAgICAgICBp
ZiAoYm9vbEZlYXR1cmVWYWx1ZShrZXkpICE9IG9wdGlvbnMuYm9vbEZlYXR1cmVWYWx1ZShrZXkp
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEtleVR5cGU6OkRvdWJsZToKKyAgICAgICAgY2FzZSBUZXN0SGVhZGVyS2V5VHlw
ZTo6RG91YmxlOgogICAgICAgICAgICAgaWYgKGRvdWJsZUZlYXR1cmVWYWx1ZShrZXkpICE9IG9w
dGlvbnMuZG91YmxlRmVhdHVyZVZhbHVlKGtleSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nOgot
ICAgICAgICBjYXNlIEtleVR5cGU6OlN0cmluZ1JlbGF0aXZlUGF0aDoKLSAgICAgICAgY2FzZSBL
ZXlUeXBlOjpTdHJpbmdVUkw6CisgICAgICAgIGNhc2UgVGVzdEhlYWRlcktleVR5cGU6OlN0cmlu
ZzoKKyAgICAgICAgY2FzZSBUZXN0SGVhZGVyS2V5VHlwZTo6U3RyaW5nUmVsYXRpdmVQYXRoOgor
ICAgICAgICBjYXNlIFRlc3RIZWFkZXJLZXlUeXBlOjpTdHJpbmdVUkw6CiAgICAgICAgICAgICBp
ZiAoc3RyaW5nRmVhdHVyZVZhbHVlKGtleSkgIT0gb3B0aW9ucy5zdHJpbmdGZWF0dXJlVmFsdWUo
a2V5KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBLZXlUeXBlOjpTdHJpbmdWZWN0b3I6CisgICAgICAgIGNhc2UgVGVzdEhl
YWRlcktleVR5cGU6OlN0cmluZ1ZlY3RvcjoKICAgICAgICAgICAgIGlmIChzdHJpbmdWZWN0b3JG
ZWF0dXJlVmFsdWUoa2V5KSAhPSBvcHRpb25zLnN0cmluZ1ZlY3RvckZlYXR1cmVWYWx1ZShrZXkp
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEtleVR5cGU6OlVua25vd246CisgICAgICAgIGNhc2UgVGVzdEhlYWRlcktleVR5
cGU6OlVua25vd246CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
fQogICAgIH0KSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RPcHRpb25zLmgJKHJldmlzaW9u
IDI2ODM1NSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIlRl
c3RGZWF0dXJlcy5oIgogI2luY2x1ZGUgPG9wdGlvbmFsPgogI2luY2x1ZGUgPHN0cmluZz4KICNp
bmNsdWRlIDx1bm9yZGVyZWRfbWFwPgpAQCAtMzIsMjIgKzMzLDYgQEAKIAogbmFtZXNwYWNlIFdU
UiB7CiAKLXN0cnVjdCBUZXN0Q29tbWFuZDsKLQotc3RydWN0IFRlc3RGZWF0dXJlcyB7Ci0gICAg
c3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBib29sPiBleHBlcmltZW50YWxGZWF0dXJl
czsKLSAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+IGludGVybmFsRGVi
dWdGZWF0dXJlczsKLSAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+IGJv
b2xGZWF0dXJlczsKLSAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGRvdWJsZT4g
ZG91YmxlRmVhdHVyZXM7Ci0gICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBzdGQ6
OnN0cmluZz4gc3RyaW5nRmVhdHVyZXM7Ci0gICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3Ry
aW5nLCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4+IHN0cmluZ1ZlY3RvckZlYXR1cmVzOwotfTsK
LQotdm9pZCBtZXJnZShUZXN0RmVhdHVyZXMmIGJhc2UsIFRlc3RGZWF0dXJlcyBhZGRpdGlvbmFs
KTsKLQotVGVzdEZlYXR1cmVzIGhhcmRjb2RlZEZlYXR1cmVzQmFzZWRPblBhdGhGb3JUZXN0KGNv
bnN0IFRlc3RDb21tYW5kJik7Ci1UZXN0RmVhdHVyZXMgZmVhdHVyZURlZmF1bHRzRnJvbVRlc3RI
ZWFkZXJGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJik7Ci0KIHN0cnVjdCBDb250ZXh0T3B0aW9u
cyB7CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG92ZXJyaWRlTGFuZ3VhZ2VzOwogICAg
IGJvb2wgaWdub3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1lb3V0czsKQEAgLTc0LDYgKzU5LDgg
QEAgc3RydWN0IENvbnRleHRPcHRpb25zIHsKIAogY2xhc3MgVGVzdE9wdGlvbnMgewogcHVibGlj
OgorICAgIHN0YXRpYyBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIFRlc3RI
ZWFkZXJLZXlUeXBlPiYga2V5VHlwZU1hcHBpbmcoKTsKKwogICAgIGV4cGxpY2l0IFRlc3RPcHRp
b25zKFRlc3RGZWF0dXJlcyk7CiAKICAgICBDb250ZXh0T3B0aW9ucyBjb250ZXh0T3B0aW9ucygp
IGNvbnN0CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MjY4MzU1KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw2ICsxMjAsOCBAQAog
CQk2NTEwQTc4QjExRUM2NDM4MDA0MTA4NjcgLyogV2ViS2l0V2VpZ2h0V2F0Y2hlcjgwMC50dGYg
aW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MTBBNzgw
MTFFQzY0MzgwMDQxMDg2NyAvKiBXZWJLaXRXZWlnaHRXYXRjaGVyODAwLnR0ZiAqLzsgfTsKIAkJ
NjUxMEE3OEMxMUVDNjQzODAwNDEwODY3IC8qIFdlYktpdFdlaWdodFdhdGNoZXI5MDAudHRmIGlu
IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTEwQTc4MTEx
RUM2NDM4MDA0MTA4NjcgLyogV2ViS2l0V2VpZ2h0V2F0Y2hlcjkwMC50dGYgKi87IH07CiAJCTY1
RUI4NUEwMTFFQzY3Q0MwMDM0RDMwMCAvKiBBY3RpdmF0ZUZvbnRzQ29jb2EubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUVCODU5RjExRUM2N0NDMDAz
NEQzMDAgLyogQWN0aXZhdGVGb250c0NvY29hLm1tICovOyB9OworCQk3Q0ZGOUJDQTI1MzRBRjFE
MDAwODAwOUYgLyogVGVzdEZlYXR1cmVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdDRkY5QkM2MjUzNEFGMUQwMDA4MDA5RiAvKiBUZXN0RmVhdHVy
ZXMuY3BwICovOyB9OworCQk3Q0ZGOUJDQjI1MzRBRjFEMDAwODAwOUYgLyogVGVzdENvbW1hbmQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NGRjlC
QzcyNTM0QUYxRDAwMDgwMDlGIC8qIFRlc3RDb21tYW5kLmNwcCAqLzsgfTsKIAkJODAzNEM2NjIx
NDg3NjM2NDAwQUMzMkU5IC8qIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODAzNEM2NjExNDg3NjM2NDAw
QUMzMkU5IC8qIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tICovOyB9OwogCQk4MDk3MzM4
QTE0ODc0QTVBMDA4MTU2RDkgLyogQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MDk3MzM4OTE0
ODc0QTVBMDA4MTU2RDkgLyogQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0gKi87
IH07CiAJCTkzNzY0MTdBMjEwRDczNzIwMEEzREFBRSAvKiBXZWJLaXRUZXN0UnVubmVyV2luZG93
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM3NjQx
NzYyMTBENzM2MDAwQTNEQUFFIC8qIFdlYktpdFRlc3RSdW5uZXJXaW5kb3cubW0gKi87IH07CkBA
IC0zNDksMTMgKzM1MSwxNiBAQAogCQk2NTEwQTc4MTExRUM2NDM4MDA0MTA4NjcgLyogV2ViS2l0
V2VpZ2h0V2F0Y2hlcjkwMC50dGYgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBmaWxlOyBuYW1lID0gV2ViS2l0V2VpZ2h0V2F0Y2hlcjkwMC50dGY7IHBh
dGggPSBmb250cy9XZWJLaXRXZWlnaHRXYXRjaGVyOTAwLnR0Zjsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNjVFQjg1OUQxMUVDNjdDQzAwMzREMzAwIC8qIEFjdGl2YXRlRm9udHMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWN0aXZhdGVGb250cy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk2NUVCODU5RjExRUM2N0NDMDAzNEQzMDAgLyogQWN0aXZh
dGVGb250c0NvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
QWN0aXZhdGVGb250c0NvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Q0ZG
OUJDNTI1MzRBRjFEMDAwODAwOUYgLyogVGVzdEZlYXR1cmVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IFRlc3RGZWF0dXJlcy5oOyBwYXRoID0gLi4vVGVzdFJ1bm5lclNoYXJl
ZC9UZXN0RmVhdHVyZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NGRjlCQzYy
NTM0QUYxRDAwMDgwMDlGIC8qIFRlc3RGZWF0dXJlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBUZXN0RmVhdHVyZXMuY3BwOyBwYXRoID0gLi4vVGVzdFJ1bm5lclNo
YXJlZC9UZXN0RmVhdHVyZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Q0ZG
OUJDNzI1MzRBRjFEMDAwODAwOUYgLyogVGVzdENvbW1hbmQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gVGVzdENvbW1hbmQuY3BwOyBwYXRoID0gLi4vVGVzdFJ1bm5l
clNoYXJlZC9UZXN0Q29tbWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdD
RkY5QkM4MjUzNEFGMUQwMDA4MDA5RiAvKiBUZXN0Q29tbWFuZC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBUZXN0Q29tbWFuZC5oOyBwYXRoID0gLi4vVGVzdFJ1bm5lclNoYXJl
ZC9UZXN0Q29tbWFuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MDM0QzY2MTE0
ODc2MzY0MDBBQzMyRTkgLyogQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1h
Yy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODA5NzMzODgxNDg3NEE1QTAwODE1
NkQ5IC8qIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLmg7IHBh
dGggPSBtYWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODA5NzMzODkxNDg3NEE1QTAwODE1NkQ5IC8qIEFjY2Vzc2liaWxp
dHlOb3RpZmljYXRpb25IYW5kbGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBuYW1lID0gQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW07IHBhdGggPSBtYWMv
QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTg0MUNDMDBEMTgxMTg1QkYwMDQyRTlCNiAvKiBPcHRpb25zLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9wdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk4NDFDQzAwRTE4MTE4NUJGMDA0MkU5QjYgLyogT3B0aW9ucy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCThERDc2RkExMDQ4NkFBNzYwMEQ5NkI1RSAvKiBXZWJLaXRUZXN0UnVu
bmVyICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29t
cGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBXZWJL
aXRUZXN0UnVubmVyOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQk5MzM4
RDFCQTI1MEE3OUVCMDBFODI3RjYgLyogSlNCYXNpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNCYXNp
Y3MuaDsgcGF0aCA9IC4uL1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMzOEQxQkUyNTBCRDlERDAwRTgyN0Y2IC8qIERp
Y3Rpb25hcnlGdW5jdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGljdGlvbmFyeUZ1bmN0aW9ucy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5Mzc2NDE3NjIxMEQ3MzYwMDBBM0RBQUUg
LyogV2ViS2l0VGVzdFJ1bm5lcldpbmRvdy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFdlYktpdFRlc3RSdW5uZXJXaW5kb3cubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTkzNzY0MTc3MjEwRDczNjEwMEEzREFBRSAvKiBXZWJLaXRUZXN0UnVubmVy
V2luZG93LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdFRlc3RSdW5u
ZXJXaW5kb3cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU0OSw2ICs1NTQsMTAg
QEAKIAkJCQkzMTQ4QTA1NDFFNkY4NUI2MDBEM0IzMTYgLyogSU9TTGF5b3V0VGVzdENvbW11bmlj
YXRpb24uaCAqLywKIAkJCQk5M0M3ODgxRjI1MEM2OUU0MDBDMEFBMjQgLyogUmVmdGVzdEZ1bmN0
aW9ucy5jcHAgKi8sCiAJCQkJOTNDNzg4MjAyNTBDNjlFNDAwQzBBQTI0IC8qIFJlZnRlc3RGdW5j
dGlvbnMuaCAqLywKKwkJCQk3Q0ZGOUJDNzI1MzRBRjFEMDAwODAwOUYgLyogVGVzdENvbW1hbmQu
Y3BwICovLAorCQkJCTdDRkY5QkM4MjUzNEFGMUQwMDA4MDA5RiAvKiBUZXN0Q29tbWFuZC5oICov
LAorCQkJCTdDRkY5QkM2MjUzNEFGMUQwMDA4MDA5RiAvKiBUZXN0RmVhdHVyZXMuY3BwICovLAor
CQkJCTdDRkY5QkM1MjUzNEFGMUQwMDA4MDA5RiAvKiBUZXN0RmVhdHVyZXMuaCAqLywKIAkJCSk7
CiAJCQluYW1lID0gVGVzdFJ1bm5lclNoYXJlZDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CkBAIC0xMjA5LDggKzEyMTgsMTAgQEAKIAkJCQkyRTJBNzY1RDIzNzBDOEQxMDA4RjlGRkUgLyog
UGxhdGZvcm1WaWV3SGVscGVycy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUY0MDEwQjdFMjREQTIw
NTMwMEE4NzZFMiAvKiBQb3NlQXNDbGFzcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTJERkE5ODQ5
MUQ3RjcwQ0YwMEFGRjJDOSAvKiBTaGFyZWRFdmVudFN0cmVhbXNNYWMubW0gaW4gU291cmNlcyAq
LywKKwkJCQk3Q0ZGOUJDQjI1MzRBRjFEMDAwODAwOUYgLyogVGVzdENvbW1hbmQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTE4NTEwNDExQjlBRTEzODAwNzQ0QUVCIC8qIFRlc3RDb250cm9sbGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExODUxMDNCMUI5QUUwRTIwMDc0NEFFQiAvKiBUZXN0
Q29udHJvbGxlckNvY29hLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJN0NGRjlCQ0EyNTM0QUYxRDAw
MDgwMDlGIC8qIFRlc3RGZWF0dXJlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTg1MTA0MjFC
OUFFMTNFMDA3NDRBRUIgLyogVGVzdEludm9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTE4NTEwM0QxQjlBRTEwNjAwNzQ0QUVCIC8qIFRlc3RJbnZvY2F0aW9uQ0cuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY2MjJDRTkxQkJCM0ExQTAwODM4QUQzIC8qIFRlc3RPcHRpb25zLmNwcCBp
biBTb3VyY2VzICovLAo=
</data>
<flag name="commit-queue"
          id="427266"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411136</attachid>
            <date>2020-10-12 11:38:51 -0700</date>
            <delta_ts>2020-10-12 11:39:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217614-20201012113850.patch</filename>
            <type>text/plain</type>
            <size>90785</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2ODM2NCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDYyIEBACisyMDIwLTEwLTEyICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBTaGFyZSBUZXN0RmVhdHVyZXMgYW5kIFRlc3RDb21tYW5kIGluZnJhc3RydWN0dXJl
IGJldHdlZW4gRHVtcFJlbmRlclRyZWUgYW5kIFdlYktpdFRlc3RSdW5uZXIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzYxNAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgVGVzdEZlYXR1cmVzIGFu
ZCBUZXN0Q29tbWFuZCBjb2RlIGZyb20gV2ViS2l0VGVzdFJ1bm5lciB0byBUZXN0UnVubmVyU2hh
cmVkCisgICAgICAgIGFuZCBhZG9wdCBzaGFyZWQgY29kZSBpbiBib3RoIFdlYktpdFRlc3RSdW5u
ZXIgYW5kIER1bXBSZW5kZXJUcmVlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBhbGxvd3MgdXMg
dG8gcmVtb3ZlIGR1cGxpY2F0ZSBhcmd1bWVudCBhbmQgdGVzdCBoZWFkZXIgcGFyc2luZyBjb2Rl
IGFuZAorICAgICAgICBhdm9pZCB1cGRhdGluZyBib3RoIHdoZW4gd2Ugd2FudCB3YW50IGNoYW5n
ZSB0aGluZ3MuCisgICAgICAgIAorICAgICAgICBUbyBzdXBwb3J0IGRpZmZlcmVudCBzZXRzIG9m
IHRlc3QgaGVhZGVyIG9wdGlvbnMsIGZlYXR1cmVEZWZhdWx0c0Zyb21UZXN0SGVhZGVyRm9yVGVz
dCBub3cKKyAgICAgICAgaGFzIGEgcGFyYW1ldGVyIGZvciBhIGtleSB0eXBlIG1hcCwgcmF0aGVy
IHRoYW4gdGhlIG9sZCBoYXJkY29kZWQgc2V0LiBUaGlzIGFsbG93cworICAgICAgICBXZWJLaXRU
ZXN0UnVubmVyIGFuZCBEdW1wUmVuZGVyVHJlZSwgd2hpY2ggY3VycmVudGx5IGhhdmUgc2xpZ2h0
bHkgZGlmZmVyZW50IG9wdGlvbnMKKyAgICAgICAgdG8gY29udGludWUgdG8gYmVoYXZlIGluIHRo
ZSBzYW1lIHdheS4gRXZlbnR1YWxseSwgaXQgd2lsbCBwcm9iYWJseSBtYWtlIHNlbnNlIHRvIGhh
dmUgdGhlc2UKKyAgICAgICAgbW9zdGx5IGdlbmVyYXRlZCBmcm9tIHRoZSBXZWJQcmVmZXJlbmNl
cyoueWFtbCBjb25maWd1cmF0aW9uIGZpbGVzLgorCisgICAgICAgIE1hdGNoaW5nIHByZWNlZGVu
dCwgc2hhcmVkIGZpbGVzIHVzZSB0aGUgV1RSIG5hbWVzcGFjZS4gCisKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9EdW1w
UmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RSdW5u
ZXJTaGFyZWQvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9DTWFr
ZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgQWRkIG5ldyBmaWxlcy4KKworICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmg6CisgICAgICAgIFJlbW92ZXMg
VGVzdENvbW1hbmQgYW5kIHBhcnNlSW5wdXRMaW5lIG5vdyB0aGF0IHRoZXkgY29tZSBmcm9tIHNo
YXJlZCBUZXN0Q29tbWFuZC5oCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVy
VHJlZUNvbW1vbi5jcHA6IFJlbW92ZWQuCisgICAgICAgIE1vdmVkIGNvbnRlbnRzIHRvIHNoYXJl
ZCBUZXN0Q29tbWFuZC5jcHAKKyAgICAgICAgCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvVGVz
dE9wdGlvbnMuY3BwOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25zLmg6Cisg
ICAgICAgIEFkb3B0IG1vZGVsIGZyb20gV2ViS2l0VGVzdFJ1bm5lciBhbmQgdXNlIGluaXRpYWxp
emF0aW9uIGZyb20gVGVzdEZlYXR1cmVzLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFj
L0R1bXBSZW5kZXJUcmVlLm1tOgorICAgICAgICBBZG9wdCBzaGFyZWQgVGVzdEZlYXR1cmVzIGFu
ZCBUZXN0Q29tbWFuZCBpbmZyYXN0cnVjdHVyZS4gQ29uc3RydWN0IFRlc3RPcHRpb25zCisgICAg
ICAgIGluIGEgc2ltaWxhciBtYW5uZXIgdG8gV2ViS2l0VGVzdFJ1bm5lciBieSBtZXJnaW5nIHRv
Z2V0aGVyIGhhcmRjb2RlZCAvIHBhdGggYmFzZWQKKyAgICAgICAgZmVhdHVyZXMgYW5kIHRlc3Qg
aGVhZGVyIGJhc2VkIGZlYXR1cmVzLgorIAorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9V
SURlbGVnYXRlLmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL1VJRGVsZWdhdGUubW06
CisgICAgICAgIFVwZGF0ZSBmb3IgbmV3IG5hbWVzcGFjZS4KKworICAgICAgICAqIFRlc3RSdW5u
ZXJTaGFyZWQvVGVzdENvbW1hbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBUZXN0UnVubmVyU2hh
cmVkL1Rlc3RDb21tYW5kLmg6IEFkZGVkLgorICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvVGVz
dEZlYXR1cmVzLmNwcDogQWRkZWQuCisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9UZXN0RmVh
dHVyZXMuaDogQWRkZWQuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxl
ci5jcHA6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oOgorICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuY3BwOgorICAgICAgICAqIFdlYktp
dFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuaDoKKyAgICAgICAgTW92ZWQgZnJvbSBXZWJLaXRUZXN0
UnVubmVyLiBHZW5lcmFsaXplZCB0byBUZXN0RmVhdHVyZXMgdG8gdGFrZSBhIGtleSB0eXBlIG1h
cCwKKyAgICAgICAgcmF0aGVyIHRoYW4gaGFyZCBjb2RpbmcgaXQuIFJlcGxhY2UgdXNlIG9mIFdl
YktpdCB0eXBlcywgbGlrZSBXS1VSTFJlZiwgd2l0aCBzdGQ6OnN0cmluZworICAgICAgICBhbmQg
c3RkOjpmaWxlc3lzdGVtOjpwYXRoLgorCiAyMDIwLTEwLTEyICBMdW1pbmcgWWluICA8bHVtaW5n
X3lpbkBhcHBsZS5jb20+CiAKICAgICAgICAgW21hY09TXSBXb3JrYXJvdW5kIGZvciBNQUNfT1Nf
WF9WRVJTSU9OX01BSk9SIGluY29ycmVjdGx5IGluY2x1ZGluZyBtaW5vciB2ZXJzaW9uIHdoZW4g
YnVpbGRpbmcgCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9DTWFrZUxpc3RzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24g
MjY4MzY0KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTEwLDcgKzEwLDYgQEAgc2V0KER1bXBSZW5kZXJUcmVlX1NPVVJDRVMKICAgICBB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlci5jcHAKICAgICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNw
cAogICAgIEN5Y2xpY1JlZHVuZGFuY3lDaGVjay5jcHAKLSAgICBEdW1wUmVuZGVyVHJlZUNvbW1v
bi5jcHAKICAgICBHQ0NvbnRyb2xsZXIuY3BwCiAgICAgSmF2YVNjcmlwdFRocmVhZGluZy5jcHAK
ICAgICBQaXhlbER1bXBTdXBwb3J0LmNwcApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVt
cFJlbmRlclRyZWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVu
ZGVyVHJlZS5oCShyZXZpc2lvbiAyNjgzNjQpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1w
UmVuZGVyVHJlZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxNCArNTQsMyBAQCBleHRlcm4gUmVm
UHRyPFRlc3RSdW5uZXI+IGdUZXN0UnVubmVyOwogdm9pZCBkdW1wKCk7CiB2b2lkIGRpc3BsYXlX
ZWJWaWV3KCk7CiB2b2lkIGRpc3BsYXlBbmRUcmFja1JlcGFpbnRzV2ViVmlldygpOwotCi1zdHJ1
Y3QgVGVzdENvbW1hbmQgewotICAgIHN0ZDo6c3RyaW5nIHBhdGhPclVSTDsKLSAgICBzdGQ6OnN0
cmluZyBhYnNvbHV0ZVBhdGg7Ci0gICAgYm9vbCBzaG91bGREdW1wUGl4ZWxzIHsgZmFsc2UgfTsK
LSAgICBzdGQ6OnN0cmluZyBleHBlY3RlZFBpeGVsSGFzaDsKLSAgICBpbnQgdGltZW91dCB7IDMw
MDAwIH07IC8vIGluIG1zCi0gICAgYm9vbCBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgeyBmYWxz
ZSB9OwotfTsKLQotVGVzdENvbW1hbmQgcGFyc2VJbnB1dExpbmUoY29uc3Qgc3RkOjpzdHJpbmcm
KTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZUNvbW1vbi5j
cHAJKHJldmlzaW9uIDI2ODM2NCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJU
cmVlQ29tbW9uLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDExNCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5j
bHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgot
I2luY2x1ZGUgPHN0cmluZz4KLQotY2xhc3MgQ29tbWFuZFRva2VuaXplciB7Ci1wdWJsaWM6Ci0g
ICAgZXhwbGljaXQgQ29tbWFuZFRva2VuaXplcihjb25zdCBzdGQ6OnN0cmluZyYgaW5wdXQpCi0g
ICAgICAgIDogbV9pbnB1dChpbnB1dCkKLSAgICAgICAgLCBtX3Bvc05leHRTZXBhcmF0b3IoMCkK
LSAgICB7Ci0gICAgICAgIHB1bXAoKTsKLSAgICB9Ci0KLSAgICBib29sIGhhc05leHQoKSBjb25z
dDsKLSAgICBzdGQ6OnN0cmluZyBuZXh0KCk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBwdW1wKCk7
Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIga1NlcGFyYXRvciA9ICdcJyc7Ci0gICAgY29uc3Qgc3Rk
OjpzdHJpbmcmIG1faW5wdXQ7Ci0gICAgc3RkOjpzdHJpbmcgbV9uZXh0OwotICAgIHNpemVfdCBt
X3Bvc05leHRTZXBhcmF0b3I7Ci19OwotCi12b2lkIENvbW1hbmRUb2tlbml6ZXI6OnB1bXAoKQot
ewotICAgIGlmIChtX3Bvc05leHRTZXBhcmF0b3IgPT0gc3RkOjpzdHJpbmc6Om5wb3MgfHwgbV9w
b3NOZXh0U2VwYXJhdG9yID09IG1faW5wdXQuc2l6ZSgpKSB7Ci0gICAgICAgIG1fbmV4dCA9IHN0
ZDo6c3RyaW5nKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc2l6ZV90IHN0YXJ0ID0g
bV9wb3NOZXh0U2VwYXJhdG9yID8gbV9wb3NOZXh0U2VwYXJhdG9yICsgMSA6IDA7Ci0gICAgbV9w
b3NOZXh0U2VwYXJhdG9yID0gbV9pbnB1dC5maW5kKGtTZXBhcmF0b3IsIHN0YXJ0KTsKLSAgICBz
aXplX3Qgc2l6ZSA9IG1fcG9zTmV4dFNlcGFyYXRvciA9PSBzdGQ6OnN0cmluZzo6bnBvcyA/IHN0
ZDo6c3RyaW5nOjpucG9zIDogbV9wb3NOZXh0U2VwYXJhdG9yIC0gc3RhcnQ7Ci0gICAgbV9uZXh0
ID0gc3RkOjpzdHJpbmcobV9pbnB1dCwgc3RhcnQsIHNpemUpOwotfQotCi1zdGQ6OnN0cmluZyBD
b21tYW5kVG9rZW5pemVyOjpuZXh0KCkKLXsKLSAgICBBU1NFUlQoaGFzTmV4dCgpKTsKLQotICAg
IHN0ZDo6c3RyaW5nIG9sZE5leHQgPSBtX25leHQ7Ci0gICAgcHVtcCgpOwotICAgIHJldHVybiBv
bGROZXh0OwotfQotCi1ib29sIENvbW1hbmRUb2tlbml6ZXI6Omhhc05leHQoKSBjb25zdAotewot
ICAgIHJldHVybiAhbV9uZXh0LmVtcHR5KCk7Ci19Ci0KLU5PX1JFVFVSTiBzdGF0aWMgdm9pZCBk
aWUoY29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0TGluZSkKLXsKLSAgICBmcHJpbnRmKHN0ZGVyciwg
IlVuZXhwZWN0ZWQgaW5wdXQgbGluZTogJXNcbiIsIGlucHV0TGluZS5jX3N0cigpKTsKLSAgICBl
eGl0KDEpOwotfQotCi1UZXN0Q29tbWFuZCBwYXJzZUlucHV0TGluZShjb25zdCBzdGQ6OnN0cmlu
ZyYgaW5wdXRMaW5lKQotewotICAgIFRlc3RDb21tYW5kIHJlc3VsdDsKLSAgICBDb21tYW5kVG9r
ZW5pemVyIHRva2VuaXplcihpbnB1dExpbmUpOwotICAgIGlmICghdG9rZW5pemVyLmhhc05leHQo
KSkKLSAgICAgICAgZGllKGlucHV0TGluZSk7Ci0KLSAgICBzdGQ6OnN0cmluZyBhcmcgPSB0b2tl
bml6ZXIubmV4dCgpOwotICAgIHJlc3VsdC5wYXRoT3JVUkwgPSBhcmc7Ci0gICAgd2hpbGUgKHRv
a2VuaXplci5oYXNOZXh0KCkpIHsKLSAgICAgICAgYXJnID0gdG9rZW5pemVyLm5leHQoKTsKLSAg
ICAgICAgaWYgKGFyZyA9PSAiLS10aW1lb3V0IikgewotICAgICAgICAgICAgc3RkOjpzdHJpbmcg
dGltZW91dFRva2VuID0gdG9rZW5pemVyLm5leHQoKTsKLSAgICAgICAgICAgIHJlc3VsdC50aW1l
b3V0ID0gYXRvaSh0aW1lb3V0VG9rZW4uY19zdHIoKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoYXJn
ID09ICItcCIgfHwgYXJnID09ICItLXBpeGVsLXRlc3QiKSB7Ci0gICAgICAgICAgICByZXN1bHQu
c2hvdWxkRHVtcFBpeGVscyA9IHRydWU7Ci0gICAgICAgICAgICBpZiAodG9rZW5pemVyLmhhc05l
eHQoKSkKLSAgICAgICAgICAgICAgICByZXN1bHQuZXhwZWN0ZWRQaXhlbEhhc2ggPSB0b2tlbml6
ZXIubmV4dCgpOwotICAgICAgICB9IGVsc2UgaWYgKGFyZyA9PSAiLS1kdW1wLWpzY29uc29sZWxv
Zy1pbi1zdGRlcnIiKQotICAgICAgICAgICAgcmVzdWx0LmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVy
ciA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKGFyZyA9PSBzdGQ6OnN0cmluZygiLS1hYnNvbHV0
ZVBhdGgiKSkKLSAgICAgICAgICAgIHJlc3VsdC5hYnNvbHV0ZVBhdGggPSB0b2tlbml6ZXIubmV4
dCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkaWUoaW5wdXRMaW5lKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE9w
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25z
LmNwcAkocmV2aXNpb24gMjY4MzY0KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlv
bnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNDAgKzI2LDg0IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiVGVzdE9wdGlvbnMuaCIKIAorI2luY2x1ZGUgIlRlc3RGZWF0dXJl
cy5oIgogI2luY2x1ZGUgPGZzdHJlYW0+CiAjaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCi1zdGF0aWMgYm9vbCBwYXJzZUJvb2xlYW5UZXN0SGVhZGVy
VmFsdWUoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAidHJ1
ZSIpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICh2YWx1ZSA9PSAiZmFsc2UiKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBMT0dfRVJST1IoIkZvdW5kIHVuZXhwZWN0ZWQgdmFs
dWUgJyVzJyBmb3IgYm9vbGVhbiBvcHRpb24uIEV4cGVjdGVkICd0cnVlJyBvciAnZmFsc2UnLiIs
IHZhbHVlLmNfc3RyKCkpOwotICAgIHJldHVybiBmYWxzZTsKLX0KK25hbWVzcGFjZSBXVFIgewog
Ci1zdGF0aWMgYm9vbCBwYXRoQ29udGFpbnMoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCwg
Y29uc3QgY2hhciogc3Vic3RyaW5nKQorY29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3Ry
aW5nLCBUZXN0SGVhZGVyS2V5VHlwZT4mIFRlc3RPcHRpb25zOjprZXlUeXBlTWFwcGluZygpCiB7
Ci0gICAgU3RyaW5nIHBhdGgocGF0aE9yVVJMLmNfc3RyKCkpOwotICAgIHJldHVybiBwYXRoLmNv
bnRhaW5zKHN1YnN0cmluZyk7Ci19CisgICAgc3RhdGljIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6
OnN0cmluZywgVGVzdEhlYWRlcktleVR5cGU+IG1hcCB7CisgICAgICAgIHsgImFsbG93Q3Jvc3NP
cmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzIiwgVGVzdEhlYWRlcktleVR5cGU6
OkJvb2wgfSwKKyAgICAgICAgeyAiYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyIsIFRlc3RI
ZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImR1bXBKU0NvbnNvbGVMb2dJblN0ZEVy
ciIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUF0dGFjaG1l
bnRFbGVtZW50IiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxl
QmFja0ZvcndhcmRDYWNoZSIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsg
ImVuYWJsZUNvbG9yRmlsdGVyIiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAg
eyAiZW5hYmxlRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTG9hZCIsIFRlc3RIZWFkZXJLZXlUeXBlOjpC
b29sIH0sCisgICAgICAgIHsgImVuYWJsZUluc3BlY3RvckFkZGl0aW9ucyIsIFRlc3RIZWFkZXJL
ZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUludGVyc2VjdGlvbk9ic2VydmVyIiwg
VGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlS2V5Z2VuRWxlbWVu
dCIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZU1lbnVJdGVt
RWxlbWVudCIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZU1v
ZGVybk1lZGlhQ29udHJvbHMiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7
ICJlbmFibGVQb2ludGVyTG9jayIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAg
IHsgImxheWVyQmFja2VkV2ViVmlldyIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAg
ICAgIHsgInVzZUFjY2VsZXJhdGVkRHJhd2luZyIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0s
CisgICAgICAgIHsgInVzZUVwaGVtZXJhbFNlc3Npb24iLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9v
bCB9LAorCisgICAgICAgIHsgImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzIiwgVGVzdEhl
YWRlcktleVR5cGU6OlN0cmluZyB9LAorICAgICAgICB7ICJqc2NPcHRpb25zIiwgVGVzdEhlYWRl
cktleVR5cGU6OlN0cmluZyB9LAorICAgIH07CiAKLXN0YXRpYyBib29sIHNob3VsZER1bXBKU0Nv
bnNvbGVMb2dJblN0ZEVycihjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQotewotICAgIHJl
dHVybiBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvYmVhY29uIikgfHwg
cGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL2JlYWNvbiIpCi0gICAgICAg
IHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgwMC9jb3JzIikgfHwgcGF0
aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL2NvcnMiKQotICAgICAgICB8fCBw
YXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvZmV0Y2giKSB8fCBwYXRoQ29u
dGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMvZmV0Y2giKQotICAgICAgICB8fCBwYXRo
Q29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvc2VydmljZS13b3JrZXJzIikgfHwg
cGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3NlcnZpY2Utd29ya2VycyIp
Ci0gICAgICAgIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgwMC9zdHJl
YW1zL3dyaXRhYmxlLXN0cmVhbXMiKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxo
b3N0Ojk0NDMvc3RyZWFtcy93cml0YWJsZS1zdHJlYW1zIikKLSAgICAgICAgfHwgcGF0aENvbnRh
aW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo4ODAwL3N0cmVhbXMvcGlwaW5nIikgfHwgcGF0aENv
bnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3N0cmVhbXMvcGlwaW5nIikKLSAgICAg
ICAgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo4ODAwL3hociIpIHx8IHBh
dGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6OTQ0My94aHIiKQotICAgICAgICB8fCBw
YXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvd2VicnRjIikgfHwgcGF0aENv
bnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3dlYnJ0YyIpCi0gICAgICAgIHx8IHBh
dGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgwMC93ZWJzb2NrZXRzIikgfHwgcGF0
aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3dlYnNvY2tldHMiKTsKKyAgICBy
ZXR1cm4gbWFwOwogfQogCi1UZXN0T3B0aW9uczo6VGVzdE9wdGlvbnMoY29uc3Qgc3RkOjpzdHJp
bmcmIHBhdGhPclVSTCwgY29uc3Qgc3RkOjpzdHJpbmcmIGFic29sdXRlUGF0aCkKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+CitzdGF0aWMgdm9pZCBzZXRWYWx1ZUlmU2V0SW5NYXAoVCYgdmFsdWVUb1Nl
dCwgc3RkOjpzdHJpbmcga2V5LCBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcs
IFQ+JiBtYXApCiB7Ci0gICAgY29uc3QgYXV0byYgcGF0aCA9IGFic29sdXRlUGF0aC5lbXB0eSgp
ID8gcGF0aE9yVVJMIDogYWJzb2x1dGVQYXRoOwotICAgIGlmIChwYXRoLmVtcHR5KCkpCisgICAg
YXV0byBpdCA9IG1hcC5maW5kKGtleSk7CisgICAgaWYgKGl0ID09IG1hcC5lbmQoKSkKICAgICAg
ICAgcmV0dXJuOworICAgIHZhbHVlVG9TZXQgPSBpdC0+c2Vjb25kOworfQogCi0gICAgZHVtcEpT
Q29uc29sZUxvZ0luU3RkRXJyID0gc2hvdWxkRHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKHBhdGhP
clVSTCk7Ci0KLSAgICBzdGQ6OnN0cmluZyBvcHRpb25zOwotICAgIHN0ZDo6aWZzdHJlYW0gdGVz
dEZpbGUocGF0aC5kYXRhKCkpOwotICAgIGlmICghdGVzdEZpbGUuZ29vZCgpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgZ2V0bGluZSh0ZXN0RmlsZSwgb3B0aW9ucyk7Ci0gICAgc3RkOjpzdHJpbmcg
YmVnaW5TdHJpbmcoIndlYmtpdC10ZXN0LXJ1bm5lciBbICIpOwotICAgIHN0ZDo6c3RyaW5nIGVu
ZFN0cmluZygiIF0iKTsKLSAgICBzaXplX3QgYmVnaW5Mb2NhdGlvbiA9IG9wdGlvbnMuZmluZChi
ZWdpblN0cmluZyk7Ci0gICAgaWYgKGJlZ2luTG9jYXRpb24gPT0gc3RkOjpzdHJpbmc6Om5wb3Mp
Ci0gICAgICAgIHJldHVybjsKLSAgICBzaXplX3QgZW5kTG9jYXRpb24gPSBvcHRpb25zLmZpbmQo
ZW5kU3RyaW5nLCBiZWdpbkxvY2F0aW9uKTsKLSAgICBpZiAoZW5kTG9jYXRpb24gPT0gc3RkOjpz
dHJpbmc6Om5wb3MpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgZmluZCBlbmQgb2Yg
dGVzdCBoZWFkZXIgaW4gJXMiLCBwYXRoLmNfc3RyKCkpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIHN0ZDo6c3RyaW5nIHBhaXJTdHJpbmcgPSBvcHRpb25zLnN1YnN0cihiZWdpbkxvY2F0
aW9uICsgYmVnaW5TdHJpbmcuc2l6ZSgpLCBlbmRMb2NhdGlvbiAtIChiZWdpbkxvY2F0aW9uICsg
YmVnaW5TdHJpbmcuc2l6ZSgpKSk7Ci0gICAgc2l6ZV90IHBhaXJTdGFydCA9IDA7Ci0gICAgd2hp
bGUgKHBhaXJTdGFydCA8IHBhaXJTdHJpbmcuc2l6ZSgpKSB7Ci0gICAgICAgIHNpemVfdCBwYWly
RW5kID0gcGFpclN0cmluZy5maW5kKCIgIiwgcGFpclN0YXJ0KTsKLSAgICAgICAgaWYgKHBhaXJF
bmQgPT0gc3RkOjpzdHJpbmc6Om5wb3MpCi0gICAgICAgICAgICBwYWlyRW5kID0gcGFpclN0cmlu
Zy5zaXplKCk7Ci0gICAgICAgIHNpemVfdCBlcXVhbHNMb2NhdGlvbiA9IHBhaXJTdHJpbmcuZmlu
ZCgiPSIsIHBhaXJTdGFydCk7Ci0gICAgICAgIGlmIChlcXVhbHNMb2NhdGlvbiA9PSBzdGQ6OnN0
cmluZzo6bnBvcykgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJNYWxmb3JtZWQgb3B0aW9uIGlu
IHRlc3QgaGVhZGVyIChjb3VsZCBub3QgZmluZCAnPScgY2hhcmFjdGVyKSBpbiAlcyIsIHBhdGgu
Y19zdHIoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBhdXRvIGtl
eSA9IHBhaXJTdHJpbmcuc3Vic3RyKHBhaXJTdGFydCwgZXF1YWxzTG9jYXRpb24gLSBwYWlyU3Rh
cnQpOwotICAgICAgICBhdXRvIHZhbHVlID0gcGFpclN0cmluZy5zdWJzdHIoZXF1YWxzTG9jYXRp
b24gKyAxLCBwYWlyRW5kIC0gKGVxdWFsc0xvY2F0aW9uICsgMSkpOwotICAgICAgICBpZiAoa2V5
ID09ICJlbmFibGVBdHRhY2htZW50RWxlbWVudCIpCi0gICAgICAgICAgICBlbmFibGVBdHRhY2ht
ZW50RWxlbWVudCA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAg
IGlmIChrZXkgPT0gInVzZUFjY2VsZXJhdGVkRHJhd2luZyIpCi0gICAgICAgICAgICB1c2VBY2Nl
bGVyYXRlZERyYXdpbmcgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAg
ICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUludGVyc2VjdGlvbk9ic2VydmVyIikKLSAgICAg
ICAgICAgIGVuYWJsZUludGVyc2VjdGlvbk9ic2VydmVyID0gcGFyc2VCb29sZWFuVGVzdEhlYWRl
clZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJ1c2VFcGhlbWVyYWxTZXNz
aW9uIikKLSAgICAgICAgICAgIHVzZUVwaGVtZXJhbFNlc3Npb24gPSBwYXJzZUJvb2xlYW5UZXN0
SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUJhY2tG
b3J3YXJkQ2FjaGUiKQotICAgICAgICAgICAgZW5hYmxlQmFja0ZvcndhcmRDYWNoZSA9IHBhcnNl
Qm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAi
ZW5hYmxlTWVudUl0ZW1FbGVtZW50IikKLSAgICAgICAgICAgIGVuYWJsZU1lbnVJdGVtRWxlbWVu
dCA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYg
KGtleSA9PSAiZW5hYmxlS2V5Z2VuRWxlbWVudCIpCi0gICAgICAgICAgICBlbmFibGVLZXlnZW5F
bGVtZW50ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxz
ZSBpZiAoa2V5ID09ICJlbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzIikKLSAgICAgICAgICAgIGVu
YWJsZU1vZGVybk1lZGlhQ29udHJvbHMgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFs
dWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZVBvaW50ZXJMb2NrIikKLSAgICAg
ICAgICAgIGVuYWJsZVBvaW50ZXJMb2NrID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZh
bHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVEcmFnRGVzdGluYXRpb25BY3Rp
b25Mb2FkIikKLSAgICAgICAgICAgIGVuYWJsZURyYWdEZXN0aW5hdGlvbkFjdGlvbkxvYWQgPSBw
YXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkg
PT0gImxheWVyQmFja2VkV2ViVmlldyIpCi0gICAgICAgICAgICBsYXllckJhY2tlZFdlYlZpZXcg
PSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChr
ZXkgPT0gImVuYWJsZUluc3BlY3RvckFkZGl0aW9ucyIpCi0gICAgICAgICAgICBlbmFibGVJbnNw
ZWN0b3JBZGRpdGlvbnMgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAg
ICAgICBlbHNlIGlmIChrZXkgPT0gImR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciIpCi0gICAgICAg
ICAgICBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFs
dWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImFsbG93Q3Jvc3NPcmlnaW5TdWJy
ZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzIikKLSAgICAgICAgICAgIGFsbG93Q3Jvc3NPcmln
aW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRl
clZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJpbnRlcm5hbDpzZWxlY3Rp
b25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCIpCi0gICAgICAgICAgICBlbmFibGVTZWxl
Y3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVl
KHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVDb2xvckZpbHRlciIpCi0g
ICAgICAgICAgICBlbmFibGVDb2xvckZpbHRlciA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1
ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAianNjT3B0aW9ucyIpCi0gICAgICAg
ICAgICBqc2NPcHRpb25zID0gdmFsdWU7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiYWRkaXRp
b25hbFN1cHBvcnRlZEltYWdlVHlwZXMiKQotICAgICAgICAgICAgYWRkaXRpb25hbFN1cHBvcnRl
ZEltYWdlVHlwZXMgPSB2YWx1ZTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJleHBlcmltZW50
YWw6V2ViR1BVRW5hYmxlZCIpCi0gICAgICAgICAgICBlbmFibGVXZWJHUFUgPSBwYXJzZUJvb2xl
YW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImludGVy
bmFsOkNTU0xvZ2ljYWxFbmFibGVkIikKLSAgICAgICAgICAgIGVuYWJsZUNTU0xvZ2ljYWwgPSBw
YXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkg
PT0gImludGVybmFsOkxpbmVIZWlnaHRVbml0c0VuYWJsZWQiKQotICAgICAgICAgICAgZW5hYmxl
TGluZUhlaWdodFVuaXRzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAg
ICAgICAgZWxzZSBpZiAoa2V5ID09ICJleHBlcmltZW50YWw6QWRDbGlja0F0dHJpYnV0aW9uRW5h
YmxlZCIpCi0gICAgICAgICAgICBhZENsaWNrQXR0cmlidXRpb25FbmFibGVkID0gcGFyc2VCb29s
ZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJleHBl
cmltZW50YWw6UmVzaXplT2JzZXJ2ZXJFbmFibGVkIikKLSAgICAgICAgICAgIGVuYWJsZVJlc2l6
ZU9ic2VydmVyID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAg
ZWxzZSBpZiAoa2V5ID09ICJleHBlcmltZW50YWw6Q1NTT01WaWV3U21vb3RoU2Nyb2xsaW5nRW5h
YmxlZCIpCi0gICAgICAgICAgICBlbmFibGVDU1NPTVZpZXdTbW9vdGhTY3JvbGxpbmcgPSBwYXJz
ZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0g
ImV4cGVyaW1lbnRhbDpDb3JlTWF0aE1MRW5hYmxlZCIpCi0gICAgICAgICAgICBlbmFibGVDb3Jl
TWF0aE1MID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxz
ZSBpZiAoa2V5ID09ICJleHBlcmltZW50YWw6UmVxdWVzdElkbGVDYWxsYmFja0VuYWJsZWQiKQot
ICAgICAgICAgICAgZW5hYmxlUmVxdWVzdElkbGVDYWxsYmFjayA9IHBhcnNlQm9vbGVhblRlc3RI
ZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZXhwZXJpbWVudGFs
OkFzeW5jQ2xpcGJvYXJkQVBJRW5hYmxlZCIpCi0gICAgICAgICAgICBlbmFibGVBc3luY0NsaXBi
b2FyZEFQSSA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVs
c2UgaWYgKGtleSA9PSAiaW50ZXJuYWw6TGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRJbnRlZ3JhdGlv
bkVuYWJsZWQiKQotICAgICAgICAgICAgbGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRJbnRlZ3JhdGlv
bkVuYWJsZWQgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBl
bHNlIGlmIChrZXkgPT0gImV4cGVyaW1lbnRhbDpBc3BlY3RSYXRpb09mSW1nRnJvbVdpZHRoQW5k
SGVpZ2h0RW5hYmxlZCIpCi0gICAgICAgICAgICBlbmFibGVBc3BlY3RSYXRpb09mSW1nRnJvbVdp
ZHRoQW5kSGVpZ2h0ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAg
ICAgZWxzZSBpZiAoa2V5ID09ICJhbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzIikKLSAgICAg
ICAgICAgIGFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMgPSBwYXJzZUJvb2xlYW5UZXN0SGVh
ZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImV4cGVyaW1lbnRhbDpD
b250YWN0UGlja2VyQVBJRW5hYmxlZCIpCi0gICAgICAgICAgICBlbmFibGVDb250YWN0UGlja2Vy
QVBJID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgcGFpclN0
YXJ0ID0gcGFpckVuZCArIDE7Ci0gICAgfQorVGVzdE9wdGlvbnM6OlRlc3RPcHRpb25zKFRlc3RG
ZWF0dXJlcyB0ZXN0RmVhdHVyZXMpCit7CisgICAgc2V0VmFsdWVJZlNldEluTWFwKGFsbG93Q3Jv
c3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzLCAiYWxsb3dDcm9zc09yaWdp
blN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMiLCB0ZXN0RmVhdHVyZXMuYm9vbEZlYXR1
cmVzKTsKKyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJM
cywgImFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMiLCB0ZXN0RmVhdHVyZXMuYm9vbEZlYXR1
cmVzKTsKKyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyLCAi
ZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIiwgdGVzdEZlYXR1cmVzLmJvb2xGZWF0dXJlcyk7Cisg
ICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUF0dGFjaG1lbnRFbGVtZW50LCAiZW5hYmxlQXR0
YWNobWVudEVsZW1lbnQiLCB0ZXN0RmVhdHVyZXMuYm9vbEZlYXR1cmVzKTsKKyAgICBzZXRWYWx1
ZUlmU2V0SW5NYXAoZW5hYmxlQmFja0ZvcndhcmRDYWNoZSwgImVuYWJsZUJhY2tGb3J3YXJkQ2Fj
aGUiLCB0ZXN0RmVhdHVyZXMuYm9vbEZlYXR1cmVzKTsKKyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAo
ZW5hYmxlQ29sb3JGaWx0ZXIsICJlbmFibGVDb2xvckZpbHRlciIsIHRlc3RGZWF0dXJlcy5ib29s
RmVhdHVyZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVEcmFnRGVzdGluYXRpb25B
Y3Rpb25Mb2FkLCAiZW5hYmxlRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTG9hZCIsIHRlc3RGZWF0dXJl
cy5ib29sRmVhdHVyZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVJbnNwZWN0b3JB
ZGRpdGlvbnMsICJlbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMiLCB0ZXN0RmVhdHVyZXMuYm9vbEZl
YXR1cmVzKTsKKyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlSW50ZXJzZWN0aW9uT2JzZXJ2
ZXIsICJlbmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlciIsIHRlc3RGZWF0dXJlcy5ib29sRmVhdHVy
ZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVLZXlnZW5FbGVtZW50LCAiZW5hYmxl
S2V5Z2VuRWxlbWVudCIsIHRlc3RGZWF0dXJlcy5ib29sRmVhdHVyZXMpOworICAgIHNldFZhbHVl
SWZTZXRJbk1hcChlbmFibGVNZW51SXRlbUVsZW1lbnQsICJlbmFibGVNZW51SXRlbUVsZW1lbnQi
LCB0ZXN0RmVhdHVyZXMuYm9vbEZlYXR1cmVzKTsKKyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5h
YmxlTW9kZXJuTWVkaWFDb250cm9scywgImVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMiLCB0ZXN0
RmVhdHVyZXMuYm9vbEZlYXR1cmVzKTsKKyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlUG9p
bnRlckxvY2ssICJlbmFibGVQb2ludGVyTG9jayIsIHRlc3RGZWF0dXJlcy5ib29sRmVhdHVyZXMp
OworICAgIHNldFZhbHVlSWZTZXRJbk1hcChsYXllckJhY2tlZFdlYlZpZXcsICJsYXllckJhY2tl
ZFdlYlZpZXciLCB0ZXN0RmVhdHVyZXMuYm9vbEZlYXR1cmVzKTsKKyAgICBzZXRWYWx1ZUlmU2V0
SW5NYXAodXNlQWNjZWxlcmF0ZWREcmF3aW5nLCAidXNlQWNjZWxlcmF0ZWREcmF3aW5nIiwgdGVz
dEZlYXR1cmVzLmJvb2xGZWF0dXJlcyk7CisgICAgc2V0VmFsdWVJZlNldEluTWFwKHVzZUVwaGVt
ZXJhbFNlc3Npb24sICJ1c2VFcGhlbWVyYWxTZXNzaW9uIiwgdGVzdEZlYXR1cmVzLmJvb2xGZWF0
dXJlcyk7CisKKyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoYWRkaXRpb25hbFN1cHBvcnRlZEltYWdl
VHlwZXMsICJhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyIsIHRlc3RGZWF0dXJlcy5zdHJp
bmdGZWF0dXJlcyk7CisgICAgc2V0VmFsdWVJZlNldEluTWFwKGpzY09wdGlvbnMsICJqc2NPcHRp
b25zIiwgdGVzdEZlYXR1cmVzLnN0cmluZ0ZlYXR1cmVzKTsKKworICAgIHNldFZhbHVlSWZTZXRJ
bk1hcChlbmFibGVDU1NMb2dpY2FsLCAiQ1NTTG9naWNhbEVuYWJsZWQiLCB0ZXN0RmVhdHVyZXMu
aW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzKTsKKyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlTGlu
ZUhlaWdodFVuaXRzLCAiTGluZUhlaWdodFVuaXRzRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5pbnRl
cm5hbERlYnVnRmVhdHVyZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVTZWxlY3Rp
b25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzLCAic2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmll
c0VuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzKTsKKyAgICBzZXRW
YWx1ZUlmU2V0SW5NYXAobGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQs
ICJMYXlvdXRGb3JtYXR0aW5nQ29udGV4dEludGVncmF0aW9uRW5hYmxlZCIsIHRlc3RGZWF0dXJl
cy5pbnRlcm5hbERlYnVnRmVhdHVyZXMpOworCisgICAgc2V0VmFsdWVJZlNldEluTWFwKGFkQ2xp
Y2tBdHRyaWJ1dGlvbkVuYWJsZWQsICJBZENsaWNrQXR0cmlidXRpb25FbmFibGVkIiwgdGVzdEZl
YXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzKTsKKyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5h
YmxlQXNwZWN0UmF0aW9PZkltZ0Zyb21XaWR0aEFuZEhlaWdodCwgIkFzcGVjdFJhdGlvT2ZJbWdG
cm9tV2lkdGhBbmRIZWlnaHRFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1
cmVzKTsKKyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlQXN5bmNDbGlwYm9hcmRBUEksICJB
c3luY0NsaXBib2FyZEFQSUVuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVy
ZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVDU1NPTVZpZXdTbW9vdGhTY3JvbGxp
bmcsICJDU1NPTVZpZXdTbW9vdGhTY3JvbGxpbmdFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmV4cGVy
aW1lbnRhbEZlYXR1cmVzKTsKKyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlQ29udGFjdFBp
Y2tlckFQSSwgIkNvbnRhY3RQaWNrZXJBUElFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmV4cGVyaW1l
bnRhbEZlYXR1cmVzKTsKKyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlQ29yZU1hdGhNTCwg
IkNvcmVNYXRoTUxFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzKTsK
KyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlUmVxdWVzdElkbGVDYWxsYmFjaywgIlJlcXVl
c3RJZGxlQ2FsbGJhY2tFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVz
KTsKKyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlUmVzaXplT2JzZXJ2ZXIsICJSZXNpemVP
YnNlcnZlckVuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMpOworICAg
IHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVXZWJHUFUsICJXZWJHUFVFbmFibGVkIiwgdGVzdEZl
YXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzKTsKIH0KIAogYm9vbCBUZXN0T3B0aW9uczo6d2Vi
Vmlld0lzQ29tcGF0aWJsZVdpdGhPcHRpb25zKGNvbnN0IFRlc3RPcHRpb25zJiBvdGhlcikgY29u
c3QKQEAgLTE2NywzICsxMTEsNSBAQCBib29sIFRlc3RPcHRpb25zOjp3ZWJWaWV3SXNDb21wYXRp
YmxlV2l0CiAgICAgcmV0dXJuIG90aGVyLmxheWVyQmFja2VkV2ViVmlldyA9PSBsYXllckJhY2tl
ZFdlYlZpZXcKICAgICAgICAgJiYgb3RoZXIuanNjT3B0aW9ucyA9PSBqc2NPcHRpb25zOwogfQor
Cit9CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25zLmgJKHJldmlzaW9uIDI2ODM2NCkK
KysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI1LDcgKzI1LDExIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiVGVzdEZlYXR1cmVz
LmgiCiAjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisKK25hbWVz
cGFjZSBXVFIgewogCiBzdHJ1Y3QgVGVzdE9wdGlvbnMgewogICAgIGJvb2wgZW5hYmxlQXR0YWNo
bWVudEVsZW1lbnQgeyBmYWxzZSB9OwpAQCAtNjEsNiArNjUsMTEgQEAgc3RydWN0IFRlc3RPcHRp
b25zIHsKICAgICBzdGQ6OnN0cmluZyBqc2NPcHRpb25zOwogICAgIHN0ZDo6c3RyaW5nIGFkZGl0
aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzOwogCi0gICAgVGVzdE9wdGlvbnMoY29uc3Qgc3RkOjpz
dHJpbmcmIHBhdGhPclVSTCwgY29uc3Qgc3RkOjpzdHJpbmcmIGFic29sdXRlUGF0aCk7CisgICAg
ZXhwbGljaXQgVGVzdE9wdGlvbnMoVGVzdEZlYXR1cmVzKTsKICAgICBib29sIHdlYlZpZXdJc0Nv
bXBhdGlibGVXaXRoT3B0aW9ucyhjb25zdCBUZXN0T3B0aW9ucyYpIGNvbnN0OworICAgIAorICAg
IHN0YXRpYyBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIFRlc3RIZWFkZXJL
ZXlUeXBlPiYga2V5VHlwZU1hcHBpbmcoKTsKIH07CisKK30KKwpJbmRleDogVG9vbHMvRHVtcFJl
bmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNjgzNjQpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9E
dW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDksMTEgKzEwOSwxMiBAQAogCQk1REI5QUM5RTBGNzIyQzM2MDA2ODQ2NDEgLyogV2ViS2l0
V2VpZ2h0V2F0Y2hlcjcwMC50dGYgaW4gQ29weSBGb250IEZpbGVzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDM3NUYwOTc3MERBQzNDQjYwMEM4QjRFNSAvKiBXZWJLaXRXZWln
aHRXYXRjaGVyNzAwLnR0ZiAqLzsgfTsKIAkJNURCOUFDOUYwRjcyMkMzNjAwNjg0NjQxIC8qIFdl
YktpdFdlaWdodFdhdGNoZXI4MDAudHRmIGluIENvcHkgRm9udCBGaWxlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzVGMDk3ODBEQUMzQ0I2MDBDOEI0RTUgLyogV2ViS2l0
V2VpZ2h0V2F0Y2hlcjgwMC50dGYgKi87IH07CiAJCTVEQjlBQ0EwMEY3MjJDMzYwMDY4NDY0MSAv
KiBXZWJLaXRXZWlnaHRXYXRjaGVyOTAwLnR0ZiBpbiBDb3B5IEZvbnQgRmlsZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc1RjA5NzkwREFDM0NCNjAwQzhCNEU1IC8qIFdl
YktpdFdlaWdodFdhdGNoZXI5MDAudHRmICovOyB9OworCQk3Q0ZGOUJCRjI1MzNCQjI0MDAwODAw
OUYgLyogVGVzdEZlYXR1cmVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdDRkY5QkJFMjUzM0JCMjQwMDA4MDA5RiAvKiBUZXN0RmVhdHVyZXMuY3Bw
ICovOyB9OworCQk3Q0ZGOUJDMjI1MzNCQzE2MDAwODAwOUYgLyogVGVzdENvbW1hbmQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NGRjlCQzEyNTMz
QkMxNjAwMDgwMDlGIC8qIFRlc3RDb21tYW5kLmNwcCAqLzsgfTsKIAkJODAwNDVBRUUxNDc3MThF
NzAwODI5MEE4IC8qIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODAwNDVBRUMxNDc3MThFNzAw
ODI5MEE4IC8qIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1tICovOyB9OwogCQk4
NDY1RTJDNzBGRkE4REYyMDAzQjgzNDIgLyogUGl4ZWxEdW1wU3VwcG9ydC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDY1RTJDNjBGRkE4REYyMDAz
QjgzNDIgLyogUGl4ZWxEdW1wU3VwcG9ydC5jcHAgKi87IH07CiAJCTkzQzc4ODI2MjUwQzZEM0Ew
MEMwQUEyNCAvKiBSZWZ0ZXN0RnVuY3Rpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQzc4ODI0MjUwQzZEMzkwMEMwQUEyNCAvKiBSZWZ0ZXN0
RnVuY3Rpb25zLmNwcCAqLzsgfTsKIAkJOTNDNzg4MkUyNTBDNzE3MjAwQzBBQTI0IC8qIEpTQmFz
aWNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkz
Qzc4ODI5MjUwQzcxMzQwMEMwQUEyNCAvKiBKU0Jhc2ljcy5jcHAgKi87IH07Ci0JCTk4MzBGMzFG
MTVDODExODEwMDVBQjIwNiAvKiBEdW1wUmVuZGVyVHJlZUNvbW1vbi5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5ODMwRjMxRTE1QzgxMTgxMDA1QUIy
MDYgLyogRHVtcFJlbmRlclRyZWVDb21tb24uY3BwICovOyB9OwogCQlBMTE1OEQ1ODE4OTI3NDBD
MDA4OEMxN0IgLyogRHVtcFJlbmRlclRyZWVCcm93c2VyVmlldy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExMTU4RDU2MTg5MjczRUIwMDg4QzE3QiAv
KiBEdW1wUmVuZGVyVHJlZUJyb3dzZXJWaWV3Lm1tICovOyB9OwogCQlBMTE1OEQ1OTE4OTI3NDM2
MDA4OEMxN0IgLyogUGl4ZWxEdW1wU3VwcG9ydElPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExMTU4RDU3MTg5MjczRUIwMDg4QzE3QiAvKiBQaXhl
bER1bXBTdXBwb3J0SU9TLm1tICovOyB9OwogCQlBMTM0RTUzMTE4OEZDMjcwMDA5MDFEMDYgLyog
RHVtcFJlbmRlclRyZWVNYWluLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTEzNEU1MkYxODhGQzI3MDAwOTAxRDA2IC8qIER1bXBSZW5kZXJUcmVlTWFp
bi5tbSAqLzsgfTsKQEAgLTMzMCw2ICszMzEsMTAgQEAKIAkJNTNDQkI4MzExMzRFNDJGMzAwMUNF
NkE0IC8qIEN5Y2xpY1JlZHVuZGFuY3lDaGVjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDeWNsaWNSZWR1bmRhbmN5Q2hlY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNURFOEFFNDMxM0EyQzE1ODAwRDZBMzdEIC8qIGxpYldlYkNvcmVUZXN0U3VwcG9ydC5k
eWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9ICJj
b21waWxlZC5tYWNoLW8uZHlsaWIiOyBwYXRoID0gbGliV2ViQ29yZVRlc3RTdXBwb3J0LmR5bGli
OyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk3Q0JCQzMyMjFEREZDRjlB
MDA3ODZCOUQgLyogVGVzdE9wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVGVzdE9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NGRjlCQkQy
NTMzQkIyNDAwMDgwMDlGIC8qIFRlc3RGZWF0dXJlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXN0RmVh
dHVyZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NGRjlCQkUyNTMzQkIyNDAw
MDgwMDlGIC8qIFRlc3RGZWF0dXJlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXN0RmVhdHVy
ZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Q0ZGOUJDMDI1MzNCQzE2MDAw
ODAwOUYgLyogVGVzdENvbW1hbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVzdENvbW1hbmQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NGRjlCQzEyNTMzQkMxNjAwMDgwMDlGIC8qIFRl
c3RDb21tYW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRlc3RDb21tYW5kLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODAwNDVBRUIxNDc3MThFNzAwODI5MEE4IC8qIEFjY2Vz
c2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLmg7IHBhdGggPSBtYWMvQWNj
ZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJODAwNDVBRUMxNDc3MThFNzAwODI5MEE4IC8qIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRp
b25IYW5kbGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gQWNj
ZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW07IHBhdGggPSBtYWMvQWNjZXNzaWJpbGl0
eU5vdGlmaWNhdGlvbkhhbmRsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0
NjVFMkM2MEZGQThERjIwMDNCODM0MiAvKiBQaXhlbER1bXBTdXBwb3J0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQaXhlbER1bXBTdXBwb3J0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMzOSw3ICszNDQsNiBAQAogCQk5M0M3ODgyNTI1MEM2
RDM5MDBDMEFBMjQgLyogUmVmdGVzdEZ1bmN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZWZ0ZXN0RnVuY3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTkzQzc4ODI5MjUwQzcxMzQwMEMwQUEyNCAvKiBKU0Jhc2ljcy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0Jhc2ljcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQzc4
ODJCMjUwQzcxMzQwMEMwQUEyNCAvKiBKU0Jhc2ljcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Jhc2lj
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5ODMwRjMxRTE1QzgxMTgxMDA1QUIy
MDYgLyogRHVtcFJlbmRlclRyZWVDb21tb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRHVtcFJlbmRlclRyZWVDb21tb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBMTEwM0I1QjE4OTI0OThGMDA3MzhDODcgLyogTGF5b3V0VGVzdEhlbHBlci54
Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQueGNjb25maWc7IG5hbWUgPSBMYXlvdXRUZXN0SGVscGVyLnhjY29uZmlnOyBwYXRoID0g
bWFjL0NvbmZpZ3VyYXRpb25zL0xheW91dFRlc3RIZWxwZXIueGNjb25maWc7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUExMTU4RDU1MTg5MjczRUIwMDg4QzE3QiAvKiBEdW1wUmVuZGVy
VHJlZUJyb3dzZXJWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IER1bXBSZW5kZXJUcmVlQnJvd3NlclZp
ZXcuaDsgcGF0aCA9IGlvcy9EdW1wUmVuZGVyVHJlZUJyb3dzZXJWaWV3Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUExMTU4RDU2MTg5MjczRUIwMDg4QzE3QiAvKiBEdW1wUmVuZGVy
VHJlZUJyb3dzZXJWaWV3Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gRHVtcFJlbmRlclRyZWVC
cm93c2VyVmlldy5tbTsgcGF0aCA9IGlvcy9EdW1wUmVuZGVyVHJlZUJyb3dzZXJWaWV3Lm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDk5LDcgKzUwMyw2IEBACiAJCQkJQTEzNEU1
MzQxODkwNUU2QzAwOTAxRDA2IC8qIGNvbmZpZy5oICovLAogCQkJCTFBMkZCODRDMTc4QzgwOTIw
MDU5RkQ5NiAvKiBEZWZhdWx0UG9saWN5RGVsZWdhdGUuaCAqLywKIAkJCQkxQTJGQjg0RDE3OEM4
MDkzMDA1OUZEOTYgLyogRGVmYXVsdFBvbGljeURlbGVnYXRlLm1tICovLAotCQkJCTk4MzBGMzFF
MTVDODExODEwMDVBQjIwNiAvKiBEdW1wUmVuZGVyVHJlZUNvbW1vbi5jcHAgKi8sCiAJCQkJMzJB
NzBBQUIwMzcwNUUxRjAwQzkxNzgzIC8qIER1bXBSZW5kZXJUcmVlUHJlZml4LmggKi8sCiAJCQkJ
MTQyMkEyNzUwQUY2RjRCRDAwRTFBODgzIC8qIERlbGVnYXRlcyAqLywKIAkJCQkxNDIyQTI2OTBB
RjZGNDUyMDBFMUE4ODMgLyogQ29udHJvbGxlcnMgKi8sCkBAIC03MzAsNiArNzMzLDEwIEBACiAJ
CQkJMzE0OEEwNTYxRTZGOTBGNDAwRDNCMzE2IC8qIElPU0xheW91dFRlc3RDb21tdW5pY2F0aW9u
LmggKi8sCiAJCQkJOTNDNzg4MjQyNTBDNkQzOTAwQzBBQTI0IC8qIFJlZnRlc3RGdW5jdGlvbnMu
Y3BwICovLAogCQkJCTkzQzc4ODI1MjUwQzZEMzkwMEMwQUEyNCAvKiBSZWZ0ZXN0RnVuY3Rpb25z
LmggKi8sCisJCQkJN0NGRjlCQzEyNTMzQkMxNjAwMDgwMDlGIC8qIFRlc3RDb21tYW5kLmNwcCAq
LywKKwkJCQk3Q0ZGOUJDMDI1MzNCQzE2MDAwODAwOUYgLyogVGVzdENvbW1hbmQuaCAqLywKKwkJ
CQk3Q0ZGOUJCRTI1MzNCQjI0MDAwODAwOUYgLyogVGVzdEZlYXR1cmVzLmNwcCAqLywKKwkJCQk3
Q0ZGOUJCRDI1MzNCQjI0MDAwODAwOUYgLyogVGVzdEZlYXR1cmVzLmggKi8sCiAJCQkpOwogCQkJ
bmFtZSA9IFRlc3RSdW5uZXJTaGFyZWQ7CiAJCQlwYXRoID0gLi4vVGVzdFJ1bm5lclNoYXJlZDsK
QEAgLTEyMTYsNyArMTIyMyw2IEBACiAJCQkJMUEyRkI4NEYxNzhDODA5MzAwNTlGRDk2IC8qIERl
ZmF1bHRQb2xpY3lEZWxlZ2F0ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDQTE4QzQ3MEM5QjVC
OTQwMDExNDM2OSAvKiBEdW1wUmVuZGVyVHJlZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUExMTU4
RDU4MTg5Mjc0MEMwMDg4QzE3QiAvKiBEdW1wUmVuZGVyVHJlZUJyb3dzZXJWaWV3Lm1tIGluIFNv
dXJjZXMgKi8sCi0JCQkJOTgzMEYzMUYxNUM4MTE4MTAwNUFCMjA2IC8qIER1bXBSZW5kZXJUcmVl
Q29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQTE4QjdCMEM5QjA4RjEwMDExNDM2OSAv
KiBEdW1wUmVuZGVyVHJlZURyYWdnaW5nSW5mby5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE4RDc5
Q0VCMEZDMjhCMkMwMDRBQzhGRSAvKiBEdW1wUmVuZGVyVHJlZUZpbGVEcmFnZ2luZ1NvdXJjZS5t
IGluIFNvdXJjZXMgKi8sCiAJCQkJQThCOTFBREEwQ0YzQjMyRjAwOEY5MUZGIC8qIER1bXBSZW5k
ZXJUcmVlUGFzdGVib2FyZC5tbSBpbiBTb3VyY2VzICovLApAQCAtMTI0OSw2ICsxMjU1LDggQEAK
IAkJCQlGNDAxMEI3QjI0REEyMDFGMDBBODc2RTIgLyogUG9zZUFzQ2xhc3MubW0gaW4gU291cmNl
cyAqLywKIAkJCQk5M0M3ODgyNjI1MEM2RDNBMDBDMEFBMjQgLyogUmVmdGVzdEZ1bmN0aW9ucy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0ExOEI2ODBDOUIwOEMyMDAxMTQzNjkgLyogUmVzb3Vy
Y2VMb2FkRGVsZWdhdGUubW0gaW4gU291cmNlcyAqLywKKwkJCQk3Q0ZGOUJDMjI1MzNCQzE2MDAw
ODAwOUYgLyogVGVzdENvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJN0NGRjlCQkYyNTMz
QkIyNDAwMDgwMDlGIC8qIFRlc3RGZWF0dXJlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMzBB
MjFGODIwNTFEOEM0MDAwOEZGNDIgLyogVGVzdE9wdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkMwMTMxREEwQzk3NzIwMTAwODczMTdEIC8qIFRlc3RSdW5uZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkNBMThCMjQwQzlCMDE0QjAwMTE0MzY5IC8qIFRlc3RSdW5uZXJNYWMubW0gaW4g
U291cmNlcyAqLywKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJl
ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRy
ZWUubW0JKHJldmlzaW9uIDI2ODM2NCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1w
UmVuZGVyVHJlZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsOCBAQAogI2ltcG9ydCAi
UG9saWN5RGVsZWdhdGUuaCIKICNpbXBvcnQgIlBvc2VBc0NsYXNzLmgiCiAjaW1wb3J0ICJSZXNv
dXJjZUxvYWREZWxlZ2F0ZS5oIgorI2ltcG9ydCAiVGVzdENvbW1hbmQuaCIKKyNpbXBvcnQgIlRl
c3RGZWF0dXJlcy5oIgogI2ltcG9ydCAiVGVzdE9wdGlvbnMuaCIKICNpbXBvcnQgIlRlc3RSdW5u
ZXIuaCIKICNpbXBvcnQgIlVJRGVsZWdhdGUuaCIKQEAgLTE4OSw3ICsxOTEsNyBAQCB2b2xhdGls
ZSBib29sIGRvbmU7CiBOYXZpZ2F0aW9uQ29udHJvbGxlciogZ05hdmlnYXRpb25Db250cm9sbGVy
ID0gbnVsbHB0cjsKIFJlZlB0cjxUZXN0UnVubmVyPiBnVGVzdFJ1bm5lcjsKIAotT3B0aW9uYWw8
VGVzdE9wdGlvbnM+IG1haW5GcmFtZVRlc3RPcHRpb25zOworT3B0aW9uYWw8V1RSOjpUZXN0T3B0
aW9ucz4gbWFpbkZyYW1lVGVzdE9wdGlvbnM7CiBXZWJGcmFtZSAqbWFpbkZyYW1lID0gbmlsOwog
Ly8gVGhpcyBpcyB0aGUgdG9wbW9zdCBmcmFtZSB0aGF0IGlzIGxvYWRpbmcsIGR1cmluZyBhIGdp
dmVuIGxvYWQsIG9yIG5pbCB3aGVuIG5vIGxvYWQgaXMgCiAvLyBpbiBwcm9ncmVzcy4gIFVzdWFs
bHkgdGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgbWFpbiBmcmFtZSwgYnV0IG5vdCBhbHdheXMuICBJ
biB0aGUgY2FzZQpAQCAtOTY2LDcgKzk2OCw3IEBAIHN0YXRpYyB2b2lkIHJlc2V0V2ViUHJlZmVy
ZW5jZXNUb0NvbnNpc3QKICAgICBbV2ViUHJlZmVyZW5jZXMgX3NldEN1cnJlbnROZXR3b3JrTG9h
ZGVyU2Vzc2lvbkNvb2tpZUFjY2VwdFBvbGljeTpOU0hUVFBDb29raWVBY2NlcHRQb2xpY3lPbmx5
RnJvbU1haW5Eb2N1bWVudERvbWFpbl07CiB9CiAKLXN0YXRpYyB2b2lkIHNldFdlYlByZWZlcmVu
Y2VzRm9yVGVzdE9wdGlvbnMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpCitzdGF0aWMgdm9p
ZCBzZXRXZWJQcmVmZXJlbmNlc0ZvclRlc3RPcHRpb25zKGNvbnN0IFdUUjo6VGVzdE9wdGlvbnMm
IG9wdGlvbnMpCiB7CiAgICAgV2ViUHJlZmVyZW5jZXMgKnByZWZlcmVuY2VzID0gW1dlYlByZWZl
cmVuY2VzIHN0YW5kYXJkUHJlZmVyZW5jZXNdOwogCkBAIC0xODE2LDcgKzE4MTgsNyBAQCBzdGF0
aWMgYm9vbCBzaG91bGRVc2VFcGhlbWVyYWxTZXNzaW9uKGNvCiAgICAgcmV0dXJuIHN0cnN0cihw
YXRoT3JVUkwsICJ3M2MvSW5kZXhlZERCLXByaXZhdGUtYnJvd3NpbmciKTsKIH0KIAotc3RhdGlj
IHZvaWQgc2V0SlNDT3B0aW9ucyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucykKK3N0YXRpYyB2
b2lkIHNldEpTQ09wdGlvbnMoY29uc3QgV1RSOjpUZXN0T3B0aW9ucyYgb3B0aW9ucykKIHsKICAg
ICBzdGF0aWMgV1RGOjpTdHJpbmdCdWlsZGVyIHNhdmVkT3B0aW9uczsKIApAQCAtMTgzMiw3ICsx
ODM0LDcgQEAgc3RhdGljIHZvaWQgc2V0SlNDT3B0aW9ucyhjb25zdCBUZXN0T3B0aQogfQogCiBl
bnVtIGNsYXNzIFJlc2V0VGltZSB7IEJlZm9yZVRlc3QsIEFmdGVyVGVzdCB9Owotc3RhdGljIHZv
aWQgcmVzZXRXZWJWaWV3VG9Db25zaXN0ZW50U3RhdGUoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlv
bnMsIFJlc2V0VGltZSByZXNldFRpbWUpCitzdGF0aWMgdm9pZCByZXNldFdlYlZpZXdUb0NvbnNp
c3RlbnRTdGF0ZShjb25zdCBXVFI6OlRlc3RPcHRpb25zJiBvcHRpb25zLCBSZXNldFRpbWUgcmVz
ZXRUaW1lKQogewogICAgIHNldEpTQ09wdGlvbnMob3B0aW9ucyk7CiAKQEAgLTE5NjcsMTEgKzE5
NjksMjAgQEAgc3RhdGljIE5TVVJMICpjb21wdXRlVGVzdFVSTChOU1N0cmluZyAqcAogICAgIHJl
dHVybiBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOmFic29sdXRlUGF0aF07CiB9CiAKK1dUUjo6VGVz
dE9wdGlvbnMgdGVzdE9wdGlvbnNGb3JUZXN0KGNvbnN0IFdUUjo6VGVzdENvbW1hbmQmIGNvbW1h
bmQpCit7CisgICAgV1RSOjpUZXN0RmVhdHVyZXMgZmVhdHVyZXM7CisgICAgV1RSOjptZXJnZShm
ZWF0dXJlcywgV1RSOjpoYXJkY29kZWRGZWF0dXJlc0Jhc2VkT25QYXRoRm9yVGVzdChjb21tYW5k
KSk7CisgICAgV1RSOjptZXJnZShmZWF0dXJlcywgV1RSOjpmZWF0dXJlRGVmYXVsdHNGcm9tVGVz
dEhlYWRlckZvclRlc3QoY29tbWFuZCwgV1RSOjpUZXN0T3B0aW9uczo6a2V5VHlwZU1hcHBpbmco
KSkpOworCisgICAgcmV0dXJuIFdUUjo6VGVzdE9wdGlvbnMgeyBXVEZNb3ZlKGZlYXR1cmVzKSB9
OworfQorCiBzdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IHN0cmluZyYgaW5wdXRMaW5lKQogewog
ICAgIEFTU0VSVCghaW5wdXRMaW5lLmVtcHR5KCkpOwogCi0gICAgVGVzdENvbW1hbmQgY29tbWFu
ZCA9IHBhcnNlSW5wdXRMaW5lKGlucHV0TGluZSk7CisgICAgYXV0byBjb21tYW5kID0gV1RSOjpw
YXJzZUlucHV0TGluZShpbnB1dExpbmUpOwogICAgIGNvbnN0IHN0cmluZyYgcGF0aE9yVVJMID0g
Y29tbWFuZC5wYXRoT3JVUkw7CiAgICAgZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0gY29tbWFu
ZC5zaG91bGREdW1wUGl4ZWxzIHx8IGR1bXBQaXhlbHNGb3JBbGxUZXN0czsKIApAQCAtMTk5Myw3
ICsyMDA0LDcgQEAgc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcmIGlucHV0TAogICAg
IGF1dG8gbWVzc2FnZSA9IG1ha2VTdHJpbmcoIkNSQVNISU5HIFRFU1Q6ICIsIHRlc3RQYXRoLlVU
RjhTdHJpbmcpOwogICAgIFdURjo6c2V0Q3Jhc2hMb2dNZXNzYWdlKG1lc3NhZ2UudXRmOCgpLmRh
dGEoKSk7CiAKLSAgICBUZXN0T3B0aW9ucyBvcHRpb25zIHsgW3VybCBpc0ZpbGVVUkxdID8gW3Vy
bCBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb25dIDogcGF0aE9yVVJMLCBjb21tYW5kLmFic29sdXRl
UGF0aCB9OworICAgIGF1dG8gb3B0aW9ucyA9IHRlc3RPcHRpb25zRm9yVGVzdChjb21tYW5kKTsK
IAogICAgIGlmICghbWFpbkZyYW1lVGVzdE9wdGlvbnMgfHwgIW9wdGlvbnMud2ViVmlld0lzQ29t
cGF0aWJsZVdpdGhPcHRpb25zKG1haW5GcmFtZVRlc3RPcHRpb25zLnZhbHVlKCkpKSB7CiAgICAg
ICAgIGlmIChtYWluRnJhbWUpCkBAIC0yMDA2LDcgKzIwMTcsNyBAQCBzdGF0aWMgdm9pZCBydW5U
ZXN0KGNvbnN0IHN0cmluZyYgaW5wdXRMCiAgICAgY29uc3QgY2hhciogdGVzdFVSTChbW3VybCBh
YnNvbHV0ZVN0cmluZ10gVVRGOFN0cmluZ10pOwogICAgIGdUZXN0UnVubmVyID0gVGVzdFJ1bm5l
cjo6Y3JlYXRlKHRlc3RVUkwsIGNvbW1hbmQuZXhwZWN0ZWRQaXhlbEhhc2gpOwogICAgIGdUZXN0
UnVubmVyLT5zZXRBbGxvd2VkSG9zdHMoYWxsb3dlZEhvc3RzKTsKLSAgICBnVGVzdFJ1bm5lci0+
c2V0Q3VzdG9tVGltZW91dChjb21tYW5kLnRpbWVvdXQpOworICAgIGdUZXN0UnVubmVyLT5zZXRD
dXN0b21UaW1lb3V0KGNvbW1hbmQudGltZW91dC5taWxsaXNlY29uZHMoKSk7CiAgICAgZ1Rlc3RS
dW5uZXItPnNldER1bXBKU0NvbnNvbGVMb2dJblN0ZEVycihjb21tYW5kLmR1bXBKU0NvbnNvbGVM
b2dJblN0ZEVyciB8fCBvcHRpb25zLmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycik7CiAKICAgICBy
ZXNldFdlYlZpZXdUb0NvbnNpc3RlbnRTdGF0ZShvcHRpb25zLCBSZXNldFRpbWU6OkJlZm9yZVRl
c3QpOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1VJRGVsZWdhdGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVUlEZWxlZ2F0ZS5oCShyZXZpc2lvbiAy
NjgzNjQpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVUlEZWxlZ2F0ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Nyw2ICs0Nyw2IEBAIEBpbnRlcmZhY2UgVUlEZWxlZ2F0ZSA6IE5TT2JqZWN0
IDxXZWJVSUQKIC0gKHZvaWQpcmVzZXRXaW5kb3dPcmlnaW47CiAtICh2b2lkKWRpZFNldE1vY2tH
ZW9sb2NhdGlvblBlcm1pc3Npb247CiAtIChpbnQpbnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdHM7Ci0tICh2b2lkKXJlc2V0VG9Db25zaXN0ZW50U3RhdGVCZWZvcmVU
ZXN0aW5nOihjb25zdCBUZXN0T3B0aW9ucyYpb3B0aW9uczsKKy0gKHZvaWQpcmVzZXRUb0NvbnNp
c3RlbnRTdGF0ZUJlZm9yZVRlc3Rpbmc6KGNvbnN0IFdUUjo6VGVzdE9wdGlvbnMmKW9wdGlvbnM7
CiAKIEBlbmQKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9VSURlbGVnYXRlLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9VSURlbGVnYXRlLm1tCShyZXZp
c2lvbiAyNjgzNjQpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVUlEZWxlZ2F0ZS5tbQko
d29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCAtICh2b2lkKXJlc2V0V2luZG93T3JpZ2lu
CiAgICAgd2luZG93T3JpZ2luID0gTlNaZXJvUG9pbnQ7CiB9CiAKLS0gKHZvaWQpcmVzZXRUb0Nv
bnNpc3RlbnRTdGF0ZUJlZm9yZVRlc3Rpbmc6KGNvbnN0IFRlc3RPcHRpb25zJilvcHRpb25zCist
ICh2b2lkKXJlc2V0VG9Db25zaXN0ZW50U3RhdGVCZWZvcmVUZXN0aW5nOihjb25zdCBXVFI6OlRl
c3RPcHRpb25zJilvcHRpb25zCiB7CiAgICAgbV9lbmFibGVEcmFnRGVzdGluYXRpb25BY3Rpb25M
b2FkID0gb3B0aW9ucy5lbmFibGVEcmFnRGVzdGluYXRpb25BY3Rpb25Mb2FkOwogfQpJbmRleDog
VG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9UZXN0UnVubmVyU2hhcmVkL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyNjgzNjQpCisrKyBU
b29scy9UZXN0UnVubmVyU2hhcmVkL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC03
LDYgKzcsOCBAQCBmaWxlKE1BS0VfRElSRUNUT1JZICR7VGVzdFJ1bm5lclNoYXJlZF9ECiAKIHNl
dChUZXN0UnVubmVyU2hhcmVkX1NPVVJDRVMKICAgICBSZWZ0ZXN0RnVuY3Rpb25zLmNwcAorICAg
IFRlc3RDb21tYW5kLmNwcAorICAgIFRlc3RGZWF0dXJlcy5jcHAKIAogICAgIEJpbmRpbmdzL0pT
QmFzaWNzLmNwcAogICAgIEJpbmRpbmdzL0pTV3JhcHBlci5jcHAKSW5kZXg6IFRvb2xzL1Rlc3RS
dW5uZXJTaGFyZWQvVGVzdENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RSdW5u
ZXJTaGFyZWQvVGVzdENvbW1hbmQuY3BwCShub25leGlzdGVudCkKKysrIFRvb2xzL1Rlc3RSdW5u
ZXJTaGFyZWQvVGVzdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RDb21tYW5k
LmgiCisKK25hbWVzcGFjZSBXVFIgeworCitjbGFzcyBDb21tYW5kVG9rZW5pemVyIHsKK3B1Ymxp
YzoKKyAgICBleHBsaWNpdCBDb21tYW5kVG9rZW5pemVyKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnB1
dCkKKyAgICAgICAgOiBtX2lucHV0KGlucHV0KQorICAgICAgICAsIG1fcG9zTmV4dFNlcGFyYXRv
cigwKQorICAgIHsKKyAgICAgICAgcHVtcCgpOworICAgIH0KKworICAgIGJvb2wgaGFzTmV4dCgp
IGNvbnN0OworICAgIHN0ZDo6c3RyaW5nIG5leHQoKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHB1
bXAoKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciBrU2VwYXJhdG9yID0gJ1wnJzsKKyAgICBjb25z
dCBzdGQ6OnN0cmluZyYgbV9pbnB1dDsKKyAgICBzdGQ6OnN0cmluZyBtX25leHQ7CisgICAgc2l6
ZV90IG1fcG9zTmV4dFNlcGFyYXRvcjsKK307CisKK3ZvaWQgQ29tbWFuZFRva2VuaXplcjo6cHVt
cCgpCit7CisgICAgaWYgKG1fcG9zTmV4dFNlcGFyYXRvciA9PSBzdGQ6OnN0cmluZzo6bnBvcyB8
fCBtX3Bvc05leHRTZXBhcmF0b3IgPT0gbV9pbnB1dC5zaXplKCkpIHsKKyAgICAgICAgbV9uZXh0
ID0gc3RkOjpzdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzaXplX3Qgc3Rh
cnQgPSBtX3Bvc05leHRTZXBhcmF0b3IgPyBtX3Bvc05leHRTZXBhcmF0b3IgKyAxIDogMDsKKyAg
ICBtX3Bvc05leHRTZXBhcmF0b3IgPSBtX2lucHV0LmZpbmQoa1NlcGFyYXRvciwgc3RhcnQpOwor
ICAgIHNpemVfdCBzaXplID0gbV9wb3NOZXh0U2VwYXJhdG9yID09IHN0ZDo6c3RyaW5nOjpucG9z
ID8gc3RkOjpzdHJpbmc6Om5wb3MgOiBtX3Bvc05leHRTZXBhcmF0b3IgLSBzdGFydDsKKyAgICBt
X25leHQgPSBzdGQ6OnN0cmluZyhtX2lucHV0LCBzdGFydCwgc2l6ZSk7Cit9CisKK3N0ZDo6c3Ry
aW5nIENvbW1hbmRUb2tlbml6ZXI6Om5leHQoKQoreworICAgIEFTU0VSVChoYXNOZXh0KCkpOwor
CisgICAgc3RkOjpzdHJpbmcgb2xkTmV4dCA9IG1fbmV4dDsKKyAgICBwdW1wKCk7CisgICAgcmV0
dXJuIG9sZE5leHQ7Cit9CisKK2Jvb2wgQ29tbWFuZFRva2VuaXplcjo6aGFzTmV4dCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuICFtX25leHQuZW1wdHkoKTsKK30KKworTk9fUkVUVVJOIHN0YXRpYyB2
b2lkIGRpZShjb25zdCBzdGQ6OnN0cmluZyYgaW5wdXRMaW5lKQoreworICAgIGZwcmludGYoc3Rk
ZXJyLCAiVW5leHBlY3RlZCBpbnB1dCBsaW5lOiAlc1xuIiwgaW5wdXRMaW5lLmNfc3RyKCkpOwor
ICAgIGV4aXQoMSk7Cit9CisKK1Rlc3RDb21tYW5kIHBhcnNlSW5wdXRMaW5lKGNvbnN0IHN0ZDo6
c3RyaW5nJiBpbnB1dExpbmUpCit7CisgICAgVGVzdENvbW1hbmQgcmVzdWx0OworICAgIENvbW1h
bmRUb2tlbml6ZXIgdG9rZW5pemVyKGlucHV0TGluZSk7CisgICAgaWYgKCF0b2tlbml6ZXIuaGFz
TmV4dCgpKQorICAgICAgICBkaWUoaW5wdXRMaW5lKTsKKworICAgIHN0ZDo6c3RyaW5nIGFyZyA9
IHRva2VuaXplci5uZXh0KCk7CisgICAgcmVzdWx0LnBhdGhPclVSTCA9IGFyZzsKKyAgICB3aGls
ZSAodG9rZW5pemVyLmhhc05leHQoKSkgeworICAgICAgICBhcmcgPSB0b2tlbml6ZXIubmV4dCgp
OworICAgICAgICBpZiAoYXJnID09ICItLXRpbWVvdXQiKSB7CisgICAgICAgICAgICBhdXRvIHRp
bWVvdXRUb2tlbiA9IHRva2VuaXplci5uZXh0KCk7CisgICAgICAgICAgICByZXN1bHQudGltZW91
dCA9IFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMoYXRvaSh0aW1lb3V0VG9rZW4uY19zdHIoKSkp
OworICAgICAgICB9IGVsc2UgaWYgKGFyZyA9PSAiLXAiIHx8IGFyZyA9PSAiLS1waXhlbC10ZXN0
IikgeworICAgICAgICAgICAgcmVzdWx0LnNob3VsZER1bXBQaXhlbHMgPSB0cnVlOworICAgICAg
ICAgICAgaWYgKHRva2VuaXplci5oYXNOZXh0KCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LmV4
cGVjdGVkUGl4ZWxIYXNoID0gdG9rZW5pemVyLm5leHQoKTsKKyAgICAgICAgfSBlbHNlIGlmIChh
cmcgPT0gc3RkOjpzdHJpbmcoIi0tZHVtcC1qc2NvbnNvbGVsb2ctaW4tc3RkZXJyIikpCisgICAg
ICAgICAgICByZXN1bHQuZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyID0gdHJ1ZTsKKyAgICAgICAg
ZWxzZSBpZiAoYXJnID09IHN0ZDo6c3RyaW5nKCItLWFic29sdXRlUGF0aCIpKQorICAgICAgICAg
ICAgcmVzdWx0LmFic29sdXRlUGF0aCA9IHRva2VuaXplci5uZXh0KCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGRpZShpbnB1dExpbmUpOworICAgIH0KKyAgICAKKyAgICBpZiAocmVzdWx0
LmFic29sdXRlUGF0aC5lbXB0eSgpKQorICAgICAgICByZXN1bHQuYWJzb2x1dGVQYXRoID0gdGVz
dFBhdGgocmVzdWx0LnBhdGhPclVSTCk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGQ6
OmZpbGVzeXN0ZW06OnBhdGggdGVzdFBhdGgoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkK
K3sKKyAgICBpZiAocGF0aE9yVVJMLmZpbmQoImh0dHA6Ly8iKSA9PSAwIHx8IHBhdGhPclVSTC5m
aW5kKCJodHRwczovLyIpID09IDApCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBpZiAocGF0
aE9yVVJMLmZpbmQoImZpbGU6Ly8iKSA9PSAwKQorICAgICAgICByZXR1cm4gcGF0aE9yVVJMLnN1
YnN0cihzdHJsZW4oImZpbGU6LyIpKTsKKworICAgIHJldHVybiBzdGQ6OmZpbGVzeXN0ZW06OmFi
c29sdXRlKHBhdGhPclVSTCk7Cit9CisKK3N0ZDo6c3RyaW5nIHRlc3RVUkxTdHJpbmcoY29uc3Qg
c3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKK3sKKyAgICBpZiAocGF0aE9yVVJMLmZpbmQoImh0dHA6
Ly8iKSA9PSAwIHx8IHBhdGhPclVSTC5maW5kKCJodHRwczovLyIpID09IDAgfHwgcGF0aE9yVVJM
LmZpbmQoImZpbGU6Ly8iKSA9PSAwKQorICAgICAgICByZXR1cm4gcGF0aE9yVVJMOworCisgICAg
cmV0dXJuICJmaWxlOi8vIiArIHN0ZDo6ZmlsZXN5c3RlbTo6YWJzb2x1dGUocGF0aE9yVVJMKS5n
ZW5lcmljX3N0cmluZygpOworfQorCit9CkluZGV4OiBUb29scy9UZXN0UnVubmVyU2hhcmVkL1Rl
c3RDb21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9UZXN0Q29t
bWFuZC5oCShub25leGlzdGVudCkKKysrIFRvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVGVzdENvbW1h
bmQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8d3RmL1NlY29uZHMuaD4KKyNp
bmNsdWRlIDx3dGYvU3RkRmlsZXN5c3RlbS5oPgorCituYW1lc3BhY2UgV1RSIHsKKworc3RydWN0
IFRlc3RDb21tYW5kIHsKKyAgICBzdGQ6OnN0cmluZyBwYXRoT3JVUkw7CisgICAgc3RkOjpmaWxl
c3lzdGVtOjpwYXRoIGFic29sdXRlUGF0aDsKKyAgICBzdGQ6OnN0cmluZyBleHBlY3RlZFBpeGVs
SGFzaDsKKyAgICBXVEY6OlNlY29uZHMgdGltZW91dDsKKyAgICBib29sIHNob3VsZER1bXBQaXhl
bHMgeyBmYWxzZSB9OworICAgIGJvb2wgZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIHsgZmFsc2Ug
fTsKK307CisKK1Rlc3RDb21tYW5kIHBhcnNlSW5wdXRMaW5lKGNvbnN0IHN0ZDo6c3RyaW5nJiBp
bnB1dExpbmUpOworCitzdGQ6OmZpbGVzeXN0ZW06OnBhdGggdGVzdFBhdGgoY29uc3Qgc3RkOjpz
dHJpbmcmIHBhdGhPclVSTCk7CitzdGQ6OnN0cmluZyB0ZXN0VVJMU3RyaW5nKGNvbnN0IHN0ZDo6
c3RyaW5nJiBwYXRoT3JVUkwpOworCit9CkluZGV4OiBUb29scy9UZXN0UnVubmVyU2hhcmVkL1Rl
c3RGZWF0dXJlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9UZXN0
RmVhdHVyZXMuY3BwCShub25leGlzdGVudCkKKysrIFRvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVGVz
dEZlYXR1cmVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RmVhdHVyZXMuaCIKKworI2lu
Y2x1ZGUgIlRlc3RDb21tYW5kLmgiCisjaW5jbHVkZSA8ZnN0cmVhbT4KKyNpbmNsdWRlIDxzdHJp
bmc+CisjaW5jbHVkZSA8d3RmL1N0ZEZpbGVzeXN0ZW0uaD4KKworbmFtZXNwYWNlIFdUUiB7CisK
K3ZvaWQgbWVyZ2UoVGVzdEZlYXR1cmVzJiBiYXNlLCBUZXN0RmVhdHVyZXMgYWRkaXRpb25hbCkK
K3sKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHN0ZDo6dW5vcmRlcmVkX21hcDo6bWVy
Z2Ugd2hlbiBpdCBpcyBhdmFpbGFibGUgZm9yIGFsbCBwb3J0cy4KKworICAgIGZvciAoYXV0byBb
a2V5LCB2YWx1ZV0gOiBhZGRpdGlvbmFsLmV4cGVyaW1lbnRhbEZlYXR1cmVzKQorICAgICAgICBi
YXNlLmV4cGVyaW1lbnRhbEZlYXR1cmVzLmluc2VydF9vcl9hc3NpZ24oa2V5LCB2YWx1ZSk7Cisg
ICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGFkZGl0aW9uYWwuaW50ZXJuYWxEZWJ1Z0ZlYXR1
cmVzKQorICAgICAgICBiYXNlLmludGVybmFsRGVidWdGZWF0dXJlcy5pbnNlcnRfb3JfYXNzaWdu
KGtleSwgdmFsdWUpOworICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBhZGRpdGlvbmFsLmJv
b2xGZWF0dXJlcykKKyAgICAgICAgYmFzZS5ib29sRmVhdHVyZXMuaW5zZXJ0X29yX2Fzc2lnbihr
ZXksIHZhbHVlKTsKKyAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogYWRkaXRpb25hbC5kb3Vi
bGVGZWF0dXJlcykKKyAgICAgICAgYmFzZS5kb3VibGVGZWF0dXJlcy5pbnNlcnRfb3JfYXNzaWdu
KGtleSwgdmFsdWUpOworICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBhZGRpdGlvbmFsLnN0
cmluZ0ZlYXR1cmVzKQorICAgICAgICBiYXNlLnN0cmluZ0ZlYXR1cmVzLmluc2VydF9vcl9hc3Np
Z24oa2V5LCB2YWx1ZSk7CisgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGFkZGl0aW9uYWwu
c3RyaW5nVmVjdG9yRmVhdHVyZXMpCisgICAgICAgIGJhc2Uuc3RyaW5nVmVjdG9yRmVhdHVyZXMu
aW5zZXJ0X29yX2Fzc2lnbihrZXksIHZhbHVlKTsKK30KKworc3RhdGljIGJvb2wgcGF0aENvbnRh
aW5zKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwsIGNvbnN0IGNoYXIqIHN1YnN0cmluZykK
K3sKKyAgICByZXR1cm4gcGF0aE9yVVJMLmZpbmQoc3Vic3RyaW5nKSAhPSBzdGQ6OnN0cmluZzo6
bnBvczsKK30KKworc3RhdGljIGJvb2wgc2hvdWxkTWFrZVZpZXdwb3J0RmxleGlibGUoY29uc3Qg
c3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKK3sKKyAgICByZXR1cm4gcGF0aENvbnRhaW5zKHBhdGhP
clVSTCwgInZpZXdwb3J0LyIpICYmICFwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAidmlzdWFsLXZp
ZXdwb3J0LyIpOworfQorCitzdGF0aWMgYm9vbCBzaG91bGRVc2VFcGhlbWVyYWxTZXNzaW9uKGNv
bnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCit7CisgICAgcmV0dXJuIHBhdGhDb250YWlucyhw
YXRoT3JVUkwsICJ3M2MvSW5kZXhlZERCLXByaXZhdGUtYnJvd3NpbmciKSB8fCBwYXRoQ29udGFp
bnMocGF0aE9yVVJMLCAidzNjXFxJbmRleGVkREItcHJpdmF0ZS1icm93c2luZyIpOworfQorCitz
dGF0aWMgc3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+PiBvdmVycmlkZVZp
ZXdXaWR0aEFuZEhlaWdodEZvclRlc3QoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKK3sK
KyAgICBpZiAocGF0aENvbnRhaW5zKHBhdGhPclVSTCwgInN2Zy9XM0MtU1ZHLTEuMSIpIHx8IHBh
dGhDb250YWlucyhwYXRoT3JVUkwsICJzdmdcXFczQy1TVkctMS4xIikpCisgICAgICAgIHJldHVy
biB7IHsgNDgwLCAzNjAgfSB9OworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKK3N0YXRp
YyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gb3ZlcnJpZGVEZXZpY2VTY2FsZUZhY3RvckZvclRlc3Qo
Y29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKK3sKKyAgICBpZiAocGF0aENvbnRhaW5zKHBh
dGhPclVSTCwgIi9oaWRwaS0zeC0iKSkKKyAgICAgICAgcmV0dXJuIDM7CisgICAgaWYgKHBhdGhD
b250YWlucyhwYXRoT3JVUkwsICIvaGlkcGktIikpCisgICAgICAgIHJldHVybiAyOworICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKK3N0YXRpYyBib29sIHNob3VsZER1bXBKU0NvbnNvbGVM
b2dJblN0ZEVycihjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQoreworICAgIHJldHVybiBw
YXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvYmVhY29uIikgfHwgcGF0aENv
bnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL2JlYWNvbiIpCisgICAgICAgIHx8IHBh
dGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgwMC9jb3JzIikgfHwgcGF0aENvbnRh
aW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL2NvcnMiKQorICAgICAgICB8fCBwYXRoQ29u
dGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvZmV0Y2giKSB8fCBwYXRoQ29udGFpbnMo
cGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMvZmV0Y2giKQorICAgICAgICB8fCBwYXRoQ29udGFp
bnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvc2VydmljZS13b3JrZXJzIikgfHwgcGF0aENv
bnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3NlcnZpY2Utd29ya2VycyIpCisgICAg
ICAgIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgwMC9zdHJlYW1zL3dy
aXRhYmxlLXN0cmVhbXMiKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0
NDMvc3RyZWFtcy93cml0YWJsZS1zdHJlYW1zIikKKyAgICAgICAgfHwgcGF0aENvbnRhaW5zKHBh
dGhPclVSTCwgImxvY2FsaG9zdDo4ODAwL3N0cmVhbXMvcGlwaW5nIikgfHwgcGF0aENvbnRhaW5z
KHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3N0cmVhbXMvcGlwaW5nIikKKyAgICAgICAgfHwg
cGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo4ODAwL3hociIpIHx8IHBhdGhDb250
YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6OTQ0My94aHIiKQorICAgICAgICB8fCBwYXRoQ29u
dGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvd2VicnRjIikgfHwgcGF0aENvbnRhaW5z
KHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3dlYnJ0YyIpCisgICAgICAgIHx8IHBhdGhDb250
YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgwMC93ZWJzb2NrZXRzIikgfHwgcGF0aENvbnRh
aW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3dlYnNvY2tldHMiKTsKK30KKworVGVzdEZl
YXR1cmVzIGhhcmRjb2RlZEZlYXR1cmVzQmFzZWRPblBhdGhGb3JUZXN0KGNvbnN0IFRlc3RDb21t
YW5kJiBjb21tYW5kKQoreworICAgIFRlc3RGZWF0dXJlcyBmZWF0dXJlczsKKworICAgIGlmIChz
aG91bGRNYWtlVmlld3BvcnRGbGV4aWJsZShjb21tYW5kLnBhdGhPclVSTCkpCisgICAgICAgIGZl
YXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyAidXNlRmxleGlibGVWaWV3cG9ydCIsIHRydWUg
fSk7CisgICAgaWYgKHNob3VsZFVzZUVwaGVtZXJhbFNlc3Npb24oY29tbWFuZC5wYXRoT3JVUkwp
KQorICAgICAgICBmZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsgInVzZUVwaGVtZXJhbFNl
c3Npb24iLCB0cnVlIH0pOworICAgIGlmIChzaG91bGREdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIo
Y29tbWFuZC5wYXRoT3JVUkwpKQorICAgICAgICBmZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0
KHsgImR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciIsIHRydWUgfSk7CisgICAgaWYgKGF1dG8gZGV2
aWNlU2NhbGVGYWN0b3IgPSBvdmVycmlkZURldmljZVNjYWxlRmFjdG9yRm9yVGVzdChjb21tYW5k
LnBhdGhPclVSTCk7IGRldmljZVNjYWxlRmFjdG9yICE9IHN0ZDo6bnVsbG9wdCkKKyAgICAgICAg
ZmVhdHVyZXMuZG91YmxlRmVhdHVyZXMuaW5zZXJ0KHsgImRldmljZVNjYWxlRmFjdG9yIiwgZGV2
aWNlU2NhbGVGYWN0b3IudmFsdWUoKSB9KTsKKyAgICBpZiAoYXV0byB2aWV3V2lkdGhBbmRIZWln
aHQgPSBvdmVycmlkZVZpZXdXaWR0aEFuZEhlaWdodEZvclRlc3QoY29tbWFuZC5wYXRoT3JVUkwp
OyB2aWV3V2lkdGhBbmRIZWlnaHQgIT0gc3RkOjpudWxsb3B0KSB7CisgICAgICAgIGZlYXR1cmVz
LmRvdWJsZUZlYXR1cmVzLmluc2VydCh7ICJ2aWV3V2lkdGgiLCB2aWV3V2lkdGhBbmRIZWlnaHQt
PmZpcnN0IH0pOworICAgICAgICBmZWF0dXJlcy5kb3VibGVGZWF0dXJlcy5pbnNlcnQoeyAidmll
d0hlaWdodCIsIHZpZXdXaWR0aEFuZEhlaWdodC0+c2Vjb25kIH0pOworICAgIH0KKworICAgIHJl
dHVybiBmZWF0dXJlczsKK30KKworc3RhdGljIGJvb2wgcGFyc2VCb29sZWFuVGVzdEhlYWRlclZh
bHVlKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gInRydWUi
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAodmFsdWUgPT0gImZhbHNlIikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgTE9HX0VSUk9SKCJGb3VuZCB1bmV4cGVjdGVkIHZhbHVl
ICclcycgZm9yIGJvb2xlYW4gb3B0aW9uLiBFeHBlY3RlZCAndHJ1ZScgb3IgJ2ZhbHNlJy4iLCB2
YWx1ZS5jX3N0cigpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBkb3VibGUgcGFy
c2VEb3VibGVUZXN0SGVhZGVyVmFsdWUoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKQoreworICAg
IHJldHVybiBzdGQ6OnN0b2QodmFsdWUpOworfQorCitzdGF0aWMgc3RkOjpzdHJpbmcgcGFyc2VT
dHJpbmdUZXN0SGVhZGVyVmFsdWVBc1JlbGF0aXZlUGF0aChjb25zdCBzdGQ6OnN0cmluZyYgdmFs
dWUsIGNvbnN0IHN0ZDo6ZmlsZXN5c3RlbTo6cGF0aCYgdGVzdFBhdGgpCit7CisgICAgYXV0byBi
YXNlUGF0aCA9IHRlc3RQYXRoLnBhcmVudF9wYXRoKCk7CisgICAgcmV0dXJuIChiYXNlUGF0aCAv
IHZhbHVlKS5nZW5lcmljX3N0cmluZygpOworfQorCitzdGF0aWMgc3RkOjpzdHJpbmcgcGFyc2VT
dHJpbmdUZXN0SGVhZGVyVmFsdWVBc1VSTChjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpCit7Cisg
ICAgcmV0dXJuIHRlc3RVUkxTdHJpbmcodmFsdWUpOworfQorCitzdGF0aWMgc3RkOjp2ZWN0b3I8
c3RkOjpzdHJpbmc+IHBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNTdHJpbmdWZWN0b3IoY29u
c3Qgc3RkOjpzdHJpbmcmIHN0cmluZykKK3sKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4g
cmVzdWx0OworCisgICAgc2l6ZV90IGkgPSAwOworICAgIHdoaWxlIChpIDwgc3RyaW5nLnNpemUo
KSkgeworICAgICAgICBhdXRvIGZvdW5kSW5kZXggPSBzdHJpbmcuZmluZF9maXJzdF9vZignLCcs
IGkpOworCisgICAgICAgIGlmIChmb3VuZEluZGV4ICE9IGkpCisgICAgICAgICAgICByZXN1bHQu
cHVzaF9iYWNrKHN0cmluZy5zdWJzdHIoaSwgZm91bmRJbmRleCAtIGkpKTsKKworICAgICAgICBp
ZiAoZm91bmRJbmRleCA9PSBzdGQ6OnN0cmluZzo6bnBvcykKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGkgPSBmb3VuZEluZGV4ICsgMTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitzdGF0aWMgVGVzdEZlYXR1cmVzIHBhcnNlVGVzdEhlYWRlcihzdGQ6OmZpbGVzeXN0
ZW06OnBhdGggcGF0aCwgY29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBUZXN0
SGVhZGVyS2V5VHlwZT4mIGtleVR5cGVNYXApCit7CisgICAgYXV0byBrZXlUeXBlID0gWyZrZXlU
eXBlTWFwXShhdXRvJiBrZXkpIHsKKyAgICAgICAgYXV0byBpdCA9IGtleVR5cGVNYXAuZmluZChr
ZXkpOworICAgICAgICBpZiAoaXQgPT0ga2V5VHlwZU1hcC5lbmQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBUZXN0SGVhZGVyS2V5VHlwZTo6VW5rbm93bjsKKyAgICAgICAgcmV0dXJuIGl0LT5zZWNv
bmQ7CisgICAgfTsKKworICAgIFRlc3RGZWF0dXJlcyBmZWF0dXJlczsKKyAgICBpZiAoIXN0ZDo6
ZmlsZXN5c3RlbTo6ZXhpc3RzKHBhdGgpKQorICAgICAgICByZXR1cm4gZmVhdHVyZXM7CisKKyAg
ICBzdGQ6Omlmc3RyZWFtIGZpbGUocGF0aCk7CisgICAgaWYgKCFmaWxlLmdvb2QoKSkgeworICAg
ICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBvcGVuIGZpbGUgdG8gaW5zcGVjdCB0ZXN0IGhlYWRl
cnMgaW4gJXMiLCBwYXRoLmNfc3RyKCkpOworICAgICAgICByZXR1cm4gZmVhdHVyZXM7CisgICAg
fQorCisgICAgc3RkOjpzdHJpbmcgb3B0aW9uczsKKyAgICBnZXRsaW5lKGZpbGUsIG9wdGlvbnMp
OworICAgIHN0ZDo6c3RyaW5nIGJlZ2luU3RyaW5nKCJ3ZWJraXQtdGVzdC1ydW5uZXIgWyAiKTsK
KyAgICBzdGQ6OnN0cmluZyBlbmRTdHJpbmcoIiBdIik7CisgICAgc2l6ZV90IGJlZ2luTG9jYXRp
b24gPSBvcHRpb25zLmZpbmQoYmVnaW5TdHJpbmcpOworICAgIGlmIChiZWdpbkxvY2F0aW9uID09
IHN0ZDo6c3RyaW5nOjpucG9zKQorICAgICAgICByZXR1cm4gZmVhdHVyZXM7CisgICAgc2l6ZV90
IGVuZExvY2F0aW9uID0gb3B0aW9ucy5maW5kKGVuZFN0cmluZywgYmVnaW5Mb2NhdGlvbik7Cisg
ICAgaWYgKGVuZExvY2F0aW9uID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgICAgIExPR19F
UlJPUigiQ291bGQgbm90IGZpbmQgZW5kIG9mIHRlc3QgaGVhZGVyIGluICVzIiwgcGF0aC5jX3N0
cigpKTsKKyAgICAgICAgcmV0dXJuIGZlYXR1cmVzOworICAgIH0KKyAgICBzdGQ6OnN0cmluZyBw
YWlyU3RyaW5nID0gb3B0aW9ucy5zdWJzdHIoYmVnaW5Mb2NhdGlvbiArIGJlZ2luU3RyaW5nLnNp
emUoKSwgZW5kTG9jYXRpb24gLSAoYmVnaW5Mb2NhdGlvbiArIGJlZ2luU3RyaW5nLnNpemUoKSkp
OworICAgIHNpemVfdCBwYWlyU3RhcnQgPSAwOworICAgIHdoaWxlIChwYWlyU3RhcnQgPCBwYWly
U3RyaW5nLnNpemUoKSkgeworICAgICAgICBzaXplX3QgcGFpckVuZCA9IHBhaXJTdHJpbmcuZmlu
ZCgiICIsIHBhaXJTdGFydCk7CisgICAgICAgIGlmIChwYWlyRW5kID09IHN0ZDo6c3RyaW5nOjpu
cG9zKQorICAgICAgICAgICAgcGFpckVuZCA9IHBhaXJTdHJpbmcuc2l6ZSgpOworICAgICAgICBz
aXplX3QgZXF1YWxzTG9jYXRpb24gPSBwYWlyU3RyaW5nLmZpbmQoIj0iLCBwYWlyU3RhcnQpOwor
ICAgICAgICBpZiAoZXF1YWxzTG9jYXRpb24gPT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICAg
ICAgICAgIExPR19FUlJPUigiTWFsZm9ybWVkIG9wdGlvbiBpbiB0ZXN0IGhlYWRlciAoY291bGQg
bm90IGZpbmQgJz0nIGNoYXJhY3RlcikgaW4gJXMiLCBwYXRoLmNfc3RyKCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYXV0byBrZXkgPSBwYWlyU3RyaW5nLnN1YnN0
cihwYWlyU3RhcnQsIGVxdWFsc0xvY2F0aW9uIC0gcGFpclN0YXJ0KTsKKyAgICAgICAgYXV0byB2
YWx1ZSA9IHBhaXJTdHJpbmcuc3Vic3RyKGVxdWFsc0xvY2F0aW9uICsgMSwgcGFpckVuZCAtIChl
cXVhbHNMb2NhdGlvbiArIDEpKTsKKworICAgICAgICBpZiAoa2V5LnJmaW5kKCJleHBlcmltZW50
YWw6IikgPT0gMCkgeworICAgICAgICAgICAga2V5ID0ga2V5LnN1YnN0cigxMyk7CisgICAgICAg
ICAgICBmZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcy5pbnNlcnQoeyBrZXksIHBhcnNlQm9v
bGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSkgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoa2V5LnJm
aW5kKCJpbnRlcm5hbDoiKSA9PSAwKSB7CisgICAgICAgICAgICBrZXkgPSBrZXkuc3Vic3RyKDkp
OworICAgICAgICAgICAgZmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzLmluc2VydCh7IGtl
eSwgcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKSB9KTsKKyAgICAgICAgfQorCisg
ICAgICAgIHN3aXRjaCAoa2V5VHlwZShrZXkpKSB7CisgICAgICAgIGNhc2UgVGVzdEhlYWRlcktl
eVR5cGU6OkJvb2w6CisgICAgICAgICAgICBmZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsg
a2V5LCBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpIH0pOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgVGVzdEhlYWRlcktleVR5cGU6OkRvdWJsZToKKyAgICAgICAg
ICAgIGZlYXR1cmVzLmRvdWJsZUZlYXR1cmVzLmluc2VydCh7IGtleSwgcGFyc2VEb3VibGVUZXN0
SGVhZGVyVmFsdWUodmFsdWUpIH0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
VGVzdEhlYWRlcktleVR5cGU6OlN0cmluZzoKKyAgICAgICAgICAgIGZlYXR1cmVzLnN0cmluZ0Zl
YXR1cmVzLmluc2VydCh7IGtleSwgdmFsdWUgfSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBUZXN0SGVhZGVyS2V5VHlwZTo6U3RyaW5nUmVsYXRpdmVQYXRoOgorICAgICAgICAg
ICAgZmVhdHVyZXMuc3RyaW5nRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCBwYXJzZVN0cmluZ1Rlc3RI
ZWFkZXJWYWx1ZUFzUmVsYXRpdmVQYXRoKHZhbHVlLCBwYXRoKSB9KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFRlc3RIZWFkZXJLZXlUeXBlOjpTdHJpbmdVUkw6CisgICAgICAg
ICAgICBmZWF0dXJlcy5zdHJpbmdGZWF0dXJlcy5pbnNlcnQoeyBrZXksIHBhcnNlU3RyaW5nVGVz
dEhlYWRlclZhbHVlQXNVUkwodmFsdWUpIH0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgVGVzdEhlYWRlcktleVR5cGU6OlN0cmluZ1ZlY3RvcjoKKyAgICAgICAgICAgIGZlYXR1
cmVzLnN0cmluZ1ZlY3RvckZlYXR1cmVzLmluc2VydCh7IGtleSwgcGFyc2VTdHJpbmdUZXN0SGVh
ZGVyVmFsdWVBc1N0cmluZ1ZlY3Rvcih2YWx1ZSkgfSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBUZXN0SGVhZGVyS2V5VHlwZTo6VW5rbm93bjoKKyAgICAgICAgICAgIExPR19F
UlJPUigiVW5rbm93biBrZXksICclcywgaW4gdGVzdCBoZWFkZXIgaW4gJXMiLCBrZXkuY19zdHIo
KSwgcGF0aC5jX3N0cigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAg
ICAgcGFpclN0YXJ0ID0gcGFpckVuZCArIDE7CisgICAgfQorCisgICAgcmV0dXJuIGZlYXR1cmVz
OworfQorCitUZXN0RmVhdHVyZXMgZmVhdHVyZURlZmF1bHRzRnJvbVRlc3RIZWFkZXJGb3JUZXN0
KGNvbnN0IFRlc3RDb21tYW5kJiBjb21tYW5kLCBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3Rk
OjpzdHJpbmcsIFRlc3RIZWFkZXJLZXlUeXBlPiYga2V5VHlwZU1hcCkKK3sKKyAgICByZXR1cm4g
cGFyc2VUZXN0SGVhZGVyKGNvbW1hbmQuYWJzb2x1dGVQYXRoLCBrZXlUeXBlTWFwKTsKK30KKwor
fQpJbmRleDogVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9UZXN0RmVhdHVyZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9UZXN0UnVubmVyU2hhcmVkL1Rlc3RGZWF0dXJlcy5oCShub25leGlzdGVudCkK
KysrIFRvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVGVzdEZlYXR1cmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
b3B0aW9uYWw+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+Cisj
aW5jbHVkZSA8dmVjdG9yPgorCituYW1lc3BhY2UgV1RSIHsKKworc3RydWN0IFRlc3RDb21tYW5k
OworCitzdHJ1Y3QgVGVzdEZlYXR1cmVzIHsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpz
dHJpbmcsIGJvb2w+IGV4cGVyaW1lbnRhbEZlYXR1cmVzOworICAgIHN0ZDo6dW5vcmRlcmVkX21h
cDxzdGQ6OnN0cmluZywgYm9vbD4gaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzOworICAgIHN0ZDo6dW5v
cmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9vbD4gYm9vbEZlYXR1cmVzOworICAgIHN0ZDo6dW5v
cmRlcmVkX21hcDxzdGQ6OnN0cmluZywgZG91YmxlPiBkb3VibGVGZWF0dXJlczsKKyAgICBzdGQ6
OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiBzdHJpbmdGZWF0dXJlczsK
KyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHN0ZDo6dmVjdG9yPHN0ZDo6c3Ry
aW5nPj4gc3RyaW5nVmVjdG9yRmVhdHVyZXM7Cit9OworCit2b2lkIG1lcmdlKFRlc3RGZWF0dXJl
cyYgYmFzZSwgVGVzdEZlYXR1cmVzIGFkZGl0aW9uYWwpOworCitUZXN0RmVhdHVyZXMgaGFyZGNv
ZGVkRmVhdHVyZXNCYXNlZE9uUGF0aEZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmKTsKKworZW51
bSBjbGFzcyBUZXN0SGVhZGVyS2V5VHlwZSA6IHVpbnQ4X3QgeworICAgIEJvb2wsCisgICAgRG91
YmxlLAorICAgIFN0cmluZywKKyAgICBTdHJpbmdSZWxhdGl2ZVBhdGgsCisgICAgU3RyaW5nVVJM
LAorICAgIFN0cmluZ1ZlY3RvciwKKyAgICBVbmtub3duCit9OworVGVzdEZlYXR1cmVzIGZlYXR1
cmVEZWZhdWx0c0Zyb21UZXN0SGVhZGVyRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYsIGNvbnN0
IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgVGVzdEhlYWRlcktleVR5cGU+Jik7CisK
K30KSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvQ01ha2VMaXN0cy50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjY4
MzY0KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNiArMjgsNyBAQCBzZXQoV2ViS2l0VGVzdFJ1bm5lcl9MSUJSQVJJRVMKIAog
c2V0KFdlYktpdFRlc3RSdW5uZXJfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICR7Q01BS0VfQklO
QVJZX0RJUn0KKyAgICAke1dlYktpdFRlc3RSdW5uZXJfU0hBUkVEX0RJUn0KICAgICAke1dlYktp
dFRlc3RSdW5uZXJfQklORElOR1NfRElSfQogICAgICR7V2ViS2l0VGVzdFJ1bm5lcl9ERVJJVkVE
X1NPVVJDRVNfRElSfS9VSVNjcmlwdENvbnRleHQKICAgICAke1dlYktpdFRlc3RSdW5uZXJfRElS
fQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHJldmlz
aW9uIDI2ODM2NCkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiRXZlbnRTZW5kZXJQ
cm94eS5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcu
aCIKKyNpbmNsdWRlICJUZXN0Q29tbWFuZC5oIgogI2luY2x1ZGUgIlRlc3RJbnZvY2F0aW9uLmgi
CiAjaW5jbHVkZSAiV2ViQ29yZVRlc3RTdXBwb3J0LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5pdGlhbGl6ZVRocmVhZGluZy5oPgpAQCAtMTIzNiwyNCArMTIzNyw2IEBAIHZvaWQgVGVz
dENvbnRyb2xsZXI6OnNldEFsbG93c0FueVNTTENlcnQKIH0KICNlbmRpZgogCi1zdGF0aWMgc3Rk
OjpzdHJpbmcgdGVzdFBhdGgoV0tVUkxSZWYgdXJsKQotewotICAgIGF1dG8gc2NoZW1lID0gYWRv
cHRXSyhXS1VSTENvcHlTY2hlbWUodXJsKSk7Ci0gICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmdJZ25vcmluZ0Nhc2Uoc2NoZW1lLmdldCgpLCAiZmlsZSIpKSB7Ci0gICAgICAgIGF1
dG8gcGF0aCA9IGFkb3B0V0soV0tVUkxDb3B5UGF0aCh1cmwpKTsKLSAgICAgICAgYXV0byBidWZm
ZXIgPSBzdGQ6OnZlY3RvcjxjaGFyPihXS1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUo
cGF0aC5nZXQoKSkpOwotICAgICAgICBhdXRvIGxlbmd0aCA9IFdLU3RyaW5nR2V0VVRGOENTdHJp
bmcocGF0aC5nZXQoKSwgYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSk7Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUKGxlbmd0aCA+IDApOwotI2lmIE9TKFdJTkRPV1MpCi0gICAgICAgIC8vIFJl
bW92ZSB0aGUgZmlyc3QgJy8nIGlmIGl0IHN0YXJ0cyB3aXRoIHNvbWV0aGluZyBsaWtlICIvQzov
Ii4KLSAgICAgICAgaWYgKGxlbmd0aCA+PSA0ICYmIGJ1ZmZlclswXSA9PSAnLycgJiYgYnVmZmVy
WzJdID09ICc6JyAmJiBidWZmZXJbM10gPT0gJy8nKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
c3RyaW5nKGJ1ZmZlci5kYXRhKCkgKyAxLCBsZW5ndGggLSAxKTsKLSNlbmRpZgotICAgICAgICBy
ZXR1cm4gc3RkOjpzdHJpbmcoYnVmZmVyLmRhdGEoKSwgbGVuZ3RoIC0gMSk7Ci0gICAgfQotICAg
IHJldHVybiBzdGQ6OnN0cmluZygpOwotfQotCiBXS1VSTFJlZiBUZXN0Q29udHJvbGxlcjo6Y3Jl
YXRlVGVzdFVSTChjb25zdCBjaGFyKiBwYXRoT3JVUkwpCiB7CiAgICAgaWYgKHN0cnN0cihwYXRo
T3JVUkwsICJodHRwOi8vIikgfHwgc3Ryc3RyKHBhdGhPclVSTCwgImh0dHBzOi8vIikgfHwgc3Ry
c3RyKHBhdGhPclVSTCwgImZpbGU6Ly8iKSkKQEAgLTEyOTcsNyArMTI4MCw3IEBAIFRlc3RPcHRp
b25zIFRlc3RDb250cm9sbGVyOjp0ZXN0T3B0aW9uc0YKICAgICBUZXN0RmVhdHVyZXMgZmVhdHVy
ZXMgPSBtX2dsb2JhbEZlYXR1cmVzOwogICAgIG1lcmdlKGZlYXR1cmVzLCBoYXJkY29kZWRGZWF0
dXJlc0Jhc2VkT25QYXRoRm9yVGVzdChjb21tYW5kKSk7CiAgICAgbWVyZ2UoZmVhdHVyZXMsIHBs
YXRmb3JtU3BlY2lmaWNGZWF0dXJlRGVmYXVsdHNGb3JUZXN0KGNvbW1hbmQpKTsKLSAgICBtZXJn
ZShmZWF0dXJlcywgZmVhdHVyZURlZmF1bHRzRnJvbVRlc3RIZWFkZXJGb3JUZXN0KGNvbW1hbmQp
KTsKKyAgICBtZXJnZShmZWF0dXJlcywgZmVhdHVyZURlZmF1bHRzRnJvbVRlc3RIZWFkZXJGb3JU
ZXN0KGNvbW1hbmQsIFRlc3RPcHRpb25zOjprZXlUeXBlTWFwcGluZygpKSk7CiAgICAgbWVyZ2Uo
ZmVhdHVyZXMsIHBsYXRmb3JtU3BlY2lmaWNGZWF0dXJlT3ZlcnJpZGVzRGVmYXVsdHNGb3JUZXN0
KGNvbW1hbmQpKTsKIAogICAgIHJldHVybiBUZXN0T3B0aW9ucyB7IGZlYXR1cmVzIH07CkBAIC0x
MzQ1LDYgKzEzMjgsMjQgQEAgc3RhdGljIHZvaWQgY29udGVudEV4dGVuc2lvblN0b3JlQ2FsbGJh
YwogICAgIGNvbnRleHQtPnRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKIH0KIAorc3RhdGlj
IHN0ZDo6c3RyaW5nIHRlc3RQYXRoKFdLVVJMUmVmIHVybCkKK3sKKyAgICBhdXRvIHNjaGVtZSA9
IGFkb3B0V0soV0tVUkxDb3B5U2NoZW1lKHVybCkpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nSWdub3JpbmdDYXNlKHNjaGVtZS5nZXQoKSwgImZpbGUiKSkgeworICAgICAg
ICBhdXRvIHBhdGggPSBhZG9wdFdLKFdLVVJMQ29weVBhdGgodXJsKSk7CisgICAgICAgIGF1dG8g
YnVmZmVyID0gc3RkOjp2ZWN0b3I8Y2hhcj4oV0tTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdT
aXplKHBhdGguZ2V0KCkpKTsKKyAgICAgICAgYXV0byBsZW5ndGggPSBXS1N0cmluZ0dldFVURjhD
U3RyaW5nKHBhdGguZ2V0KCksIGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCkpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChsZW5ndGggPiAwKTsKKyNpZiBPUyhXSU5ET1dTKQorICAgICAgICAv
LyBSZW1vdmUgdGhlIGZpcnN0ICcvJyBpZiBpdCBzdGFydHMgd2l0aCBzb21ldGhpbmcgbGlrZSAi
L0M6LyIuCisgICAgICAgIGlmIChsZW5ndGggPj0gNCAmJiBidWZmZXJbMF0gPT0gJy8nICYmIGJ1
ZmZlclsyXSA9PSAnOicgJiYgYnVmZmVyWzNdID09ICcvJykKKyAgICAgICAgICAgIHJldHVybiBz
dGQ6OnN0cmluZyhidWZmZXIuZGF0YSgpICsgMSwgbGVuZ3RoIC0gMSk7CisjZW5kaWYKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6c3RyaW5nKGJ1ZmZlci5kYXRhKCksIGxlbmd0aCAtIDEpOworICAgIH0K
KyAgICByZXR1cm4gc3RkOjpzdHJpbmcoKTsKK30KKwogc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnRl
bnRFeHRlbnNpb25KU09OUGF0aChXS1VSTFJlZiB1cmwpCiB7CiAgICAgYXV0byBwYXRoID0gdGVz
dFBhdGgodXJsKTsKQEAgLTE0MzAsOTcgKzE0MzEsMTMgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6
cmVzZXRDb250ZW50RXh0ZW5zaQogCiAjZW5kaWYgLy8gIUVOQUJMRShDT05URU5UX0VYVEVOU0lP
TlMpCiAKLWNsYXNzIENvbW1hbmRUb2tlbml6ZXIgewotcHVibGljOgotICAgIGV4cGxpY2l0IENv
bW1hbmRUb2tlbml6ZXIoY29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0KQotICAgICAgICA6IG1faW5w
dXQoaW5wdXQpCi0gICAgewotICAgICAgICBwdW1wKCk7Ci0gICAgfQotCi0gICAgYm9vbCBoYXNO
ZXh0KCkgY29uc3Q7Ci0gICAgc3RkOjpzdHJpbmcgbmV4dCgpOwotCi1wcml2YXRlOgotICAgIHZv
aWQgcHVtcCgpOwotICAgIHN0YXRpYyBjb25zdCBjaGFyIGtTZXBhcmF0b3IgPSAnXCcnOwotICAg
IGNvbnN0IHN0ZDo6c3RyaW5nJiBtX2lucHV0OwotICAgIHN0ZDo6c3RyaW5nIG1fbmV4dDsKLSAg
ICBzaXplX3QgbV9wb3NOZXh0U2VwYXJhdG9yIHsgMCB9OwotfTsKLQotdm9pZCBDb21tYW5kVG9r
ZW5pemVyOjpwdW1wKCkKLXsKLSAgICBpZiAobV9wb3NOZXh0U2VwYXJhdG9yID09IHN0ZDo6c3Ry
aW5nOjpucG9zIHx8IG1fcG9zTmV4dFNlcGFyYXRvciA9PSBtX2lucHV0LnNpemUoKSkgewotICAg
ICAgICBtX25leHQgPSBzdGQ6OnN0cmluZygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IHNpemVfdCBzdGFydCA9IG1fcG9zTmV4dFNlcGFyYXRvciA/IG1fcG9zTmV4dFNlcGFyYXRvciAr
IDEgOiAwOwotICAgIG1fcG9zTmV4dFNlcGFyYXRvciA9IG1faW5wdXQuZmluZChrU2VwYXJhdG9y
LCBzdGFydCk7Ci0gICAgc2l6ZV90IHNpemUgPSBtX3Bvc05leHRTZXBhcmF0b3IgPT0gc3RkOjpz
dHJpbmc6Om5wb3MgPyBzdGQ6OnN0cmluZzo6bnBvcyA6IG1fcG9zTmV4dFNlcGFyYXRvciAtIHN0
YXJ0OwotICAgIG1fbmV4dCA9IHN0ZDo6c3RyaW5nKG1faW5wdXQsIHN0YXJ0LCBzaXplKTsKLX0K
LQotc3RkOjpzdHJpbmcgQ29tbWFuZFRva2VuaXplcjo6bmV4dCgpCi17Ci0gICAgQVNTRVJUKGhh
c05leHQoKSk7Ci0KLSAgICBzdGQ6OnN0cmluZyBvbGROZXh0ID0gbV9uZXh0OwotICAgIHB1bXAo
KTsKLSAgICByZXR1cm4gb2xkTmV4dDsKLX0KLQotYm9vbCBDb21tYW5kVG9rZW5pemVyOjpoYXNO
ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gIW1fbmV4dC5lbXB0eSgpOwotfQotCi1OT19SRVRV
Uk4gc3RhdGljIHZvaWQgZGllKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnB1dExpbmUpCi17Ci0gICAg
ZnByaW50ZihzdGRlcnIsICJVbmV4cGVjdGVkIGlucHV0IGxpbmU6ICVzXG4iLCBpbnB1dExpbmUu
Y19zdHIoKSk7Ci0gICAgZXhpdCgxKTsKLX0KLQotc3RhdGljIFRlc3RDb21tYW5kIHBhcnNlSW5w
dXRMaW5lKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnB1dExpbmUpCi17Ci0gICAgVGVzdENvbW1hbmQg
cmVzdWx0OwotICAgIENvbW1hbmRUb2tlbml6ZXIgdG9rZW5pemVyKGlucHV0TGluZSk7Ci0gICAg
aWYgKCF0b2tlbml6ZXIuaGFzTmV4dCgpKQotICAgICAgICBkaWUoaW5wdXRMaW5lKTsKLQotICAg
IHN0ZDo6c3RyaW5nIGFyZyA9IHRva2VuaXplci5uZXh0KCk7Ci0gICAgcmVzdWx0LnBhdGhPclVS
TCA9IGFyZzsKLSAgICB3aGlsZSAodG9rZW5pemVyLmhhc05leHQoKSkgewotICAgICAgICBhcmcg
PSB0b2tlbml6ZXIubmV4dCgpOwotICAgICAgICBpZiAoYXJnID09IHN0ZDo6c3RyaW5nKCItLXRp
bWVvdXQiKSkgewotICAgICAgICAgICAgc3RkOjpzdHJpbmcgdGltZW91dFRva2VuID0gdG9rZW5p
emVyLm5leHQoKTsKLSAgICAgICAgICAgIHJlc3VsdC50aW1lb3V0ID0gU2Vjb25kczo6ZnJvbU1p
bGxpc2Vjb25kcyhhdG9pKHRpbWVvdXRUb2tlbi5jX3N0cigpKSk7Ci0gICAgICAgIH0gZWxzZSBp
ZiAoYXJnID09IHN0ZDo6c3RyaW5nKCItcCIpIHx8IGFyZyA9PSBzdGQ6OnN0cmluZygiLS1waXhl
bC10ZXN0IikpIHsKLSAgICAgICAgICAgIHJlc3VsdC5zaG91bGREdW1wUGl4ZWxzID0gdHJ1ZTsK
LSAgICAgICAgICAgIGlmICh0b2tlbml6ZXIuaGFzTmV4dCgpKQotICAgICAgICAgICAgICAgIHJl
c3VsdC5leHBlY3RlZFBpeGVsSGFzaCA9IHRva2VuaXplci5uZXh0KCk7Ci0gICAgICAgIH0gZWxz
ZSBpZiAoYXJnID09IHN0ZDo6c3RyaW5nKCItLWR1bXAtanNjb25zb2xlbG9nLWluLXN0ZGVyciIp
KQotICAgICAgICAgICAgcmVzdWx0LmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciA9IHRydWU7Ci0g
ICAgICAgIGVsc2UgaWYgKGFyZyA9PSBzdGQ6OnN0cmluZygiLS1hYnNvbHV0ZVBhdGgiKSkKLSAg
ICAgICAgICAgIHJlc3VsdC5hYnNvbHV0ZVBhdGggPSB0b2tlbml6ZXIubmV4dCgpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBkaWUoaW5wdXRMaW5lKTsKLSAgICB9Ci0gICAgCi0gICAgaWYg
KHJlc3VsdC5hYnNvbHV0ZVBhdGguZW1wdHkoKSkgewotICAgICAgICAvLyBHcm9zcy4gTmVlZCB0
byByZWR1Y2UgY29udmVyc2lvbnMgYmV0d2VlbiBhbGwgdGhlIHN0cmluZyB0eXBlcyBhbmQgVVJM
cy4KLSAgICAgICAgcmVzdWx0LmFic29sdXRlUGF0aCA9IHRlc3RQYXRoKGFkb3B0V0soVGVzdENv
bnRyb2xsZXI6OmNyZWF0ZVRlc3RVUkwocmVzdWx0LnBhdGhPclVSTC5jX3N0cigpKSkuZ2V0KCkp
OwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIGJvb2wgVGVzdENvbnRyb2xsZXI6
OnJ1blRlc3QoY29uc3QgY2hhciogaW5wdXRMaW5lKQogewogICAgIEF1dG9kcmFpbmVkUG9vbCBw
b29sOwotICAgIAorCiAgICAgV0tUZXh0Q2hlY2tlclNldFRlc3RpbmdNb2RlKHRydWUpOwotICAg
IFRlc3RDb21tYW5kIGNvbW1hbmQgPSBwYXJzZUlucHV0TGluZShzdGQ6OnN0cmluZyhpbnB1dExp
bmUpKTsKKyAgICAKKyAgICBhdXRvIGNvbW1hbmQgPSBwYXJzZUlucHV0TGluZShzdGQ6OnN0cmlu
ZyhpbnB1dExpbmUpKTsKIAogICAgIG1fc3RhdGUgPSBSdW5uaW5nVGVzdDsKICAgICAKSW5kZXg6
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgJKHJldmlzaW9uIDI2ODM2NCkK
KysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNjQ0LDEzICs2NDQsNCBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi1zdHJ1Y3QgVGVz
dENvbW1hbmQgewotICAgIHN0ZDo6c3RyaW5nIHBhdGhPclVSTDsKLSAgICBzdGQ6OnN0cmluZyBh
YnNvbHV0ZVBhdGg7Ci0gICAgc3RkOjpzdHJpbmcgZXhwZWN0ZWRQaXhlbEhhc2g7Ci0gICAgV1RG
OjpTZWNvbmRzIHRpbWVvdXQ7Ci0gICAgYm9vbCBzaG91bGREdW1wUGl4ZWxzIHsgZmFsc2UgfTsK
LSAgICBib29sIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciB7IGZhbHNlIH07Ci19OwotCiB9IC8v
IG5hbWVzcGFjZSBXVFIKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuY3Bw
CShyZXZpc2lvbiAyNjgzNjQpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RPcHRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNzggKzI2LDEzIEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiVGVzdE9wdGlvbnMuaCIKIAotI2luY2x1ZGUgIlN0cmluZ0Z1bmN0aW9u
cy5oIgotI2luY2x1ZGUgIlRlc3RDb250cm9sbGVyLmgiCiAjaW5jbHVkZSA8ZnN0cmVhbT4KLSNp
bmNsdWRlIDxpb3N0cmVhbT4KICNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvU3RkRmls
ZXN5c3RlbS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jZGVmaW5lIERV
TVBfRkVBVFVSRVMgMAogCiBuYW1lc3BhY2UgV1RSIHsKIAotI2lmIERVTVBfRkVBVFVSRVMKLXN0
YXRpYyB2b2lkIGR1bXBGZWF0dXJlcyhjb25zdCBUZXN0RmVhdHVyZXMmIGZlYXR1cmVzKQotewot
ICAgIGlmIChmZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcy5lbXB0eSgpICYmIGZlYXR1cmVz
LmludGVybmFsRGVidWdGZWF0dXJlcy5lbXB0eSgpICYmIGZlYXR1cmVzLmJvb2xGZWF0dXJlcy5l
bXB0eSgpICYmIGZlYXR1cmVzLmRvdWJsZUZlYXR1cmVzLmVtcHR5KCkgJiYgZmVhdHVyZXMuc3Ry
aW5nRmVhdHVyZXMuZW1wdHkoKSAmJiBmZWF0dXJlcy5zdHJpbmdWZWN0b3JGZWF0dXJlcy5lbXB0
eSgpKSB7Ci0gICAgICAgIHN0ZDo6Y2VyciA8PCAiICBbRU1QVFldXG4iOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIAotICAgIGlmICghZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMu
ZW1wdHkoKSkgewotICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgRXhwZXJpbWVudGFsIEZlYXR1cmVz
OiBcbiI7Ci0gICAgICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBmZWF0dXJlcy5leHBlcmlt
ZW50YWxGZWF0dXJlcykKLSAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiICAgICIgPDwga2V5IDw8
ICI6ICIgPDwgdmFsdWUgPDwgJ1xuJzsKLSAgICB9Ci0gICAgaWYgKCFmZWF0dXJlcy5pbnRlcm5h
bERlYnVnRmVhdHVyZXMuZW1wdHkoKSkgewotICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgSW50ZXJu
YWwgRmVhdHVyZXM6IFxuIjsKLSAgICAgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGZlYXR1
cmVzLmludGVybmFsRGVidWdGZWF0dXJlcykKLSAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiICAg
ICIgPDwga2V5IDw8ICI6ICIgPDwgdmFsdWUgPDwgJ1xuJzsKLSAgICB9Ci0gICAgaWYgKCFmZWF0
dXJlcy5ib29sRmVhdHVyZXMuZW1wdHkoKSkgewotICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgQm9v
bCBGZWF0dXJlczogXG4iOwotICAgICAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogZmVhdHVy
ZXMuYm9vbEZlYXR1cmVzKQotICAgICAgICAgICAgc3RkOjpjZXJyIDw8ICIgICAgIiA8PCBrZXkg
PDwgIjogIiA8PCB2YWx1ZSA8PCAnXG4nOwotICAgIH0KLSAgICBpZiAoIWZlYXR1cmVzLmRvdWJs
ZUZlYXR1cmVzLmVtcHR5KCkpIHsKLSAgICAgICAgc3RkOjpjZXJyIDw8ICIgIERvdWJsZSBGZWF0
dXJlczogXG4iOwotICAgICAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogZmVhdHVyZXMuZG91
YmxlRmVhdHVyZXMpCi0gICAgICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgICAiIDw8IGtleSA8PCAi
OiAiIDw8IHZhbHVlIDw8ICdcbic7Ci0gICAgfQotICAgIGlmICghZmVhdHVyZXMuc3RyaW5nRmVh
dHVyZXMuZW1wdHkoKSkgewotICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgU3RyaW5nIEZlYXR1cmVz
OiBcbiI7Ci0gICAgICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBmZWF0dXJlcy5zdHJpbmdG
ZWF0dXJlcykKLSAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiICAgICIgPDwga2V5IDw8ICI6ICIg
PDwgdmFsdWUgPDwgJ1xuJzsKLSAgICB9Ci0gICAgaWYgKCFmZWF0dXJlcy5zdHJpbmdWZWN0b3JG
ZWF0dXJlcy5lbXB0eSgpKSB7Ci0gICAgICAgIHN0ZDo6Y2VyciA8PCAiICBTdHJpbmcgVmVjdG9y
IEZlYXR1cmVzOiBcbiI7Ci0gICAgICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBmZWF0dXJl
cy5zdHJpbmdWZWN0b3JGZWF0dXJlcykKLSAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiICAgICIg
PDwga2V5IDw8ICI6IE51bWJlciBvZiBzdHJpbmdzICIgPDwgdmFsdWUuc2l6ZSgpIDw8ICdcbic7
Ci0gICAgfQotfQotI2VuZGlmCi0KLXZvaWQgbWVyZ2UoVGVzdEZlYXR1cmVzJiBiYXNlLCBUZXN0
RmVhdHVyZXMgYWRkaXRpb25hbCkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHN0
ZDo6dW5vcmRlcmVkX21hcDo6bWVyZ2Ugd2hlbiBpdCBpcyBhdmFpbGFibGUgZm9yIGFsbCBwb3J0
cy4KLQotICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBhZGRpdGlvbmFsLmV4cGVyaW1lbnRh
bEZlYXR1cmVzKQotICAgICAgICBiYXNlLmV4cGVyaW1lbnRhbEZlYXR1cmVzLmluc2VydF9vcl9h
c3NpZ24oa2V5LCB2YWx1ZSk7Ci0gICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGFkZGl0aW9u
YWwuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzKQotICAgICAgICBiYXNlLmludGVybmFsRGVidWdGZWF0
dXJlcy5pbnNlcnRfb3JfYXNzaWduKGtleSwgdmFsdWUpOwotICAgIGZvciAoYXV0byBba2V5LCB2
YWx1ZV0gOiBhZGRpdGlvbmFsLmJvb2xGZWF0dXJlcykKLSAgICAgICAgYmFzZS5ib29sRmVhdHVy
ZXMuaW5zZXJ0X29yX2Fzc2lnbihrZXksIHZhbHVlKTsKLSAgICBmb3IgKGF1dG8gW2tleSwgdmFs
dWVdIDogYWRkaXRpb25hbC5kb3VibGVGZWF0dXJlcykKLSAgICAgICAgYmFzZS5kb3VibGVGZWF0
dXJlcy5pbnNlcnRfb3JfYXNzaWduKGtleSwgdmFsdWUpOwotICAgIGZvciAoYXV0byBba2V5LCB2
YWx1ZV0gOiBhZGRpdGlvbmFsLnN0cmluZ0ZlYXR1cmVzKQotICAgICAgICBiYXNlLnN0cmluZ0Zl
YXR1cmVzLmluc2VydF9vcl9hc3NpZ24oa2V5LCB2YWx1ZSk7Ci0gICAgZm9yIChhdXRvIFtrZXks
IHZhbHVlXSA6IGFkZGl0aW9uYWwuc3RyaW5nVmVjdG9yRmVhdHVyZXMpCi0gICAgICAgIGJhc2Uu
c3RyaW5nVmVjdG9yRmVhdHVyZXMuaW5zZXJ0X29yX2Fzc2lnbihrZXksIHZhbHVlKTsKLX0KLQog
c3RhdGljIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9vbD4mIGJvb2xE
ZWZhdWx0c01hcCgpCiB7CiAgICAgc3RhdGljIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmlu
ZywgYm9vbD4gbWFwIHsKQEAgLTE4MiwyNjggKzExNyw3NiBAQCBzdGF0aWMgY29uc3Qgc3RkOjp1
bm9yZGVyZWRfbWFwPHN0ZDo6c3RyCiAgICAgcmV0dXJuIG1hcDsKIH0KIAotZW51bSBjbGFzcyBL
ZXlUeXBlIDogdWludDhfdCB7Ci0gICAgQm9vbCwKLSAgICBEb3VibGUsCi0gICAgU3RyaW5nLAot
ICAgIFN0cmluZ1JlbGF0aXZlUGF0aCwKLSAgICBTdHJpbmdVUkwsCi0gICAgU3RyaW5nVmVjdG9y
LAotICAgIFVua25vd24KLX07Ci0KLXN0YXRpYyBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3Rk
OjpzdHJpbmcsIEtleVR5cGU+JiBrZXlUeXBlTWFwKCkKLXsKLSAgICBzdGF0aWMgc3RkOjp1bm9y
ZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBLZXlUeXBlPiBtYXAgewotICAgICAgICB7ICJhbGxvd0Ny
b3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscyIsIEtleVR5cGU6OkJvb2wg
fSwKLSAgICAgICAgeyAiYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyIsIEtleVR5cGU6OkJv
b2wgfSwKLSAgICAgICAgeyAiYWxsb3dzTGlua1ByZXZpZXciLCBLZXlUeXBlOjpCb29sIH0sCi0g
ICAgICAgIHsgImRvbVBhc3RlQWxsb3dlZCIsIEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAi
ZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJl
ZGl0YWJsZSIsIEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAiZW5hYmxlQXBwTmFwIiwgS2V5
VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJlbmFibGVBdHRhY2htZW50RWxlbWVudCIsIEtleVR5
cGU6OkJvb2wgfSwKLSAgICAgICAgeyAiZW5hYmxlQmFja0ZvcndhcmRDYWNoZSIsIEtleVR5cGU6
OkJvb2wgfSwKLSAgICAgICAgeyAiZW5hYmxlQ2FwdHVyZUF1ZGlvSW5HUFVQcm9jZXNzIiwgS2V5
VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJlbmFibGVDYXB0dXJlQXVkaW9JblVJUHJvY2VzcyIs
IEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAiZW5hYmxlQ2FwdHVyZVZpZGVvSW5HUFVQcm9j
ZXNzIiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJlbmFibGVDYXB0dXJlVmlkZW9JblVJ
UHJvY2VzcyIsIEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAiZW5hYmxlQ29sb3JGaWx0ZXIi
LCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsgImVuYWJsZUluQXBwQnJvd3NlclByaXZhY3ki
LCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsgImVuYWJsZUluc3BlY3RvckFkZGl0aW9ucyIs
IEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAiZW5hYmxlS2V5Z2VuRWxlbWVudCIsIEtleVR5
cGU6OkJvb2wgfSwKLSAgICAgICAgeyAiZW5hYmxlTWVudUl0ZW1FbGVtZW50IiwgS2V5VHlwZTo6
Qm9vbCB9LAotICAgICAgICB7ICJlbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzIiwgS2V5VHlwZTo6
Qm9vbCB9LAotICAgICAgICB7ICJlbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbiIsIEtleVR5
cGU6OkJvb2wgfSwKLSAgICAgICAgeyAiZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW4iLCBL
ZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsgImVuYWJsZVNlcnZpY2VDb250cm9scyIsIEtleVR5
cGU6OkJvb2wgfSwKLSAgICAgICAgeyAiZW5hYmxlV2ViQXV0aGVudGljYXRpb24iLCBLZXlUeXBl
OjpCb29sIH0sCi0gICAgICAgIHsgImVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50
aWNhdG9yIiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJpZ25vcmVTeW5jaHJvbm91c01l
c3NhZ2luZ1RpbWVvdXRzIiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJpZ25vcmVzVmll
d3BvcnRTY2FsZUxpbWl0cyIsIEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAiaXNBcHBCb3Vu
ZFdlYlZpZXciLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsgIm5lZWRzU2l0ZVNwZWNpZmlj
UXVpcmtzIiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJwdW5jaE91dFdoaXRlQmFja2dy
b3VuZHNJbkRhcmtNb2RlIiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJydW5TaW5nbHki
LCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsgInNob3VsZEhhbmRsZVJ1bk9wZW5QYW5lbCIs
IEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAic2hvdWxkSWdub3JlTWV0YVZpZXdwb3J0Iiwg
S2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJzaG91bGRQcmVzZW50UG9wb3ZlcnMiLCBLZXlU
eXBlOjpCb29sIH0sCi0gICAgICAgIHsgInNob3VsZFNob3dUb3VjaGVzIiwgS2V5VHlwZTo6Qm9v
bCB9LAotICAgICAgICB7ICJzaG91bGRTaG93V2ViVmlldyIsIEtleVR5cGU6OkJvb2wgfSwKLSAg
ICAgICAgeyAic3BlbGxDaGVja2luZ0RvdHMiLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsg
InVzZUFjY2VsZXJhdGVkRHJhd2luZyIsIEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAidXNl
Q2hhcmFjdGVyU2VsZWN0aW9uR3JhbnVsYXJpdHkiLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAg
IHsgInVzZURhdGFEZXRlY3Rpb24iLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsgInVzZUVw
aGVtZXJhbFNlc3Npb24iLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsgInVzZUZsZXhpYmxl
Vmlld3BvcnQiLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsgInVzZU1vY2tTY3JvbGxiYXJz
IiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJ1c2VSZW1vdGVMYXllclRyZWUiLCBLZXlU
eXBlOjpCb29sIH0sCi0gICAgICAgIHsgInVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQiLCBL
ZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsgInVzZVRocmVhZGVkU2Nyb2xsaW5nIiwgS2V5VHlw
ZTo6Qm9vbCB9LAorY29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBUZXN0SGVh
ZGVyS2V5VHlwZT4mIFRlc3RPcHRpb25zOjprZXlUeXBlTWFwcGluZygpCit7CisgICAgc3RhdGlj
IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgVGVzdEhlYWRlcktleVR5cGU+IG1hcCB7
CisgICAgICAgIHsgImFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRp
YWxzIiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiYWxsb3dUb3BOYXZp
Z2F0aW9uVG9EYXRhVVJMcyIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsg
ImFsbG93c0xpbmtQcmV2aWV3IiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAg
eyAiZG9tUGFzdGVBbGxvd2VkIiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAg
eyAiZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwK
KyAgICAgICAgeyAiZWRpdGFibGUiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAg
ICB7ICJlbmFibGVBcHBOYXAiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7
ICJlbmFibGVBdHRhY2htZW50RWxlbWVudCIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisg
ICAgICAgIHsgImVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9v
bCB9LAorICAgICAgICB7ICJlbmFibGVDYXB0dXJlQXVkaW9JbkdQVVByb2Nlc3MiLCBUZXN0SGVh
ZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVDYXB0dXJlQXVkaW9JblVJUHJv
Y2VzcyIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUNhcHR1
cmVWaWRlb0luR1BVUHJvY2VzcyIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAg
IHsgImVuYWJsZUNhcHR1cmVWaWRlb0luVUlQcm9jZXNzIiwgVGVzdEhlYWRlcktleVR5cGU6OkJv
b2wgfSwKKyAgICAgICAgeyAiZW5hYmxlQ29sb3JGaWx0ZXIiLCBUZXN0SGVhZGVyS2V5VHlwZTo6
Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVJbkFwcEJyb3dzZXJQcml2YWN5IiwgVGVzdEhlYWRl
cktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zIiwg
VGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlS2V5Z2VuRWxlbWVu
dCIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZU1lbnVJdGVt
RWxlbWVudCIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZU1v
ZGVybk1lZGlhQ29udHJvbHMiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7
ICJlbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbiIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29s
IH0sCisgICAgICAgIHsgImVuYWJsZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVuIiwgVGVzdEhlYWRl
cktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlU2VydmljZUNvbnRyb2xzIiwgVGVz
dEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlV2ViQXV0aGVudGljYXRp
b24iLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVXZWJBdXRo
ZW50aWNhdGlvbkxvY2FsQXV0aGVudGljYXRvciIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0s
CisgICAgICAgIHsgImlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHMiLCBUZXN0SGVh
ZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJpZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0
cyIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImlzQXBwQm91bmRXZWJW
aWV3IiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAibmVlZHNTaXRlU3Bl
Y2lmaWNRdWlya3MiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJwdW5j
aE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlIiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wg
fSwKKyAgICAgICAgeyAicnVuU2luZ2x5IiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAg
ICAgICAgeyAic2hvdWxkSGFuZGxlUnVuT3BlblBhbmVsIiwgVGVzdEhlYWRlcktleVR5cGU6OkJv
b2wgfSwKKyAgICAgICAgeyAic2hvdWxkSWdub3JlTWV0YVZpZXdwb3J0IiwgVGVzdEhlYWRlcktl
eVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAic2hvdWxkUHJlc2VudFBvcG92ZXJzIiwgVGVzdEhl
YWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAic2hvdWxkU2hvd1RvdWNoZXMiLCBUZXN0
SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJzaG91bGRTaG93V2ViVmlldyIsIFRl
c3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInNwZWxsQ2hlY2tpbmdEb3RzIiwg
VGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAidXNlQWNjZWxlcmF0ZWREcmF3
aW5nIiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAidXNlQ2hhcmFjdGVy
U2VsZWN0aW9uR3JhbnVsYXJpdHkiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAg
ICB7ICJ1c2VEYXRhRGV0ZWN0aW9uIiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAg
ICAgeyAidXNlRXBoZW1lcmFsU2Vzc2lvbiIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisg
ICAgICAgIHsgInVzZUZsZXhpYmxlVmlld3BvcnQiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9
LAorICAgICAgICB7ICJ1c2VNb2NrU2Nyb2xsYmFycyIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29s
IH0sCisgICAgICAgIHsgInVzZVJlbW90ZUxheWVyVHJlZSIsIFRlc3RIZWFkZXJLZXlUeXBlOjpC
b29sIH0sCisgICAgICAgIHsgInVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQiLCBUZXN0SGVh
ZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VUaHJlYWRlZFNjcm9sbGluZyIsIFRl
c3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCiAgICAgCi0gICAgICAgIHsgImNvbnRlbnRJbnNldC50
b3AiLCBLZXlUeXBlOjpEb3VibGUgfSwKLSAgICAgICAgeyAiZGV2aWNlU2NhbGVGYWN0b3IiLCBL
ZXlUeXBlOjpEb3VibGUgfSwKLSAgICAgICAgeyAidmlld0hlaWdodCIsIEtleVR5cGU6OkRvdWJs
ZSB9LAotICAgICAgICB7ICJ2aWV3V2lkdGgiLCBLZXlUeXBlOjpEb3VibGUgfSwKLQotICAgICAg
ICB7ICJhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyIsIEtleVR5cGU6OlN0cmluZyB9LAot
ICAgICAgICB7ICJhcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIiLCBLZXlUeXBlOjpTdHJpbmcg
fSwKLSAgICAgICAgeyAiYXBwbGljYXRpb25NYW5pZmVzdCIsIEtleVR5cGU6OlN0cmluZ1JlbGF0
aXZlUGF0aCB9LAotICAgICAgICB7ICJjb250ZW50TW9kZSIsIEtleVR5cGU6OlN0cmluZyB9LAot
ICAgICAgICB7ICJqc2NPcHRpb25zIiwgS2V5VHlwZTo6U3RyaW5nIH0sCi0gICAgICAgIHsgInN0
YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTCIsIEtleVR5cGU6OlN0cmluZ1VSTCB9LAorICAgICAg
ICB7ICJjb250ZW50SW5zZXQudG9wIiwgVGVzdEhlYWRlcktleVR5cGU6OkRvdWJsZSB9LAorICAg
ICAgICB7ICJkZXZpY2VTY2FsZUZhY3RvciIsIFRlc3RIZWFkZXJLZXlUeXBlOjpEb3VibGUgfSwK
KyAgICAgICAgeyAidmlld0hlaWdodCIsIFRlc3RIZWFkZXJLZXlUeXBlOjpEb3VibGUgfSwKKyAg
ICAgICAgeyAidmlld1dpZHRoIiwgVGVzdEhlYWRlcktleVR5cGU6OkRvdWJsZSB9LAorCisgICAg
ICAgIHsgImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzIiwgVGVzdEhlYWRlcktleVR5cGU6
OlN0cmluZyB9LAorICAgICAgICB7ICJhcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIiLCBUZXN0
SGVhZGVyS2V5VHlwZTo6U3RyaW5nIH0sCisgICAgICAgIHsgImFwcGxpY2F0aW9uTWFuaWZlc3Qi
LCBUZXN0SGVhZGVyS2V5VHlwZTo6U3RyaW5nUmVsYXRpdmVQYXRoIH0sCisgICAgICAgIHsgImNv
bnRlbnRNb2RlIiwgVGVzdEhlYWRlcktleVR5cGU6OlN0cmluZyB9LAorICAgICAgICB7ICJqc2NP
cHRpb25zIiwgVGVzdEhlYWRlcktleVR5cGU6OlN0cmluZyB9LAorICAgICAgICB7ICJzdGFuZGFs
b25lV2ViQXBwbGljYXRpb25VUkwiLCBUZXN0SGVhZGVyS2V5VHlwZTo6U3RyaW5nVVJMIH0sCiAK
LSAgICAgICAgeyAibGFuZ3VhZ2UiLCBLZXlUeXBlOjpTdHJpbmdWZWN0b3IgfSwKKyAgICAgICAg
eyAibGFuZ3VhZ2UiLCBUZXN0SGVhZGVyS2V5VHlwZTo6U3RyaW5nVmVjdG9yIH0sCiAgICAgfTsK
IAogICAgIHJldHVybiBtYXA7CiB9CiAKLXN0YXRpYyBLZXlUeXBlIGtleVR5cGUoc3RkOjpzdHJp
bmcga2V5KQotewotICAgIGF1dG8gbWFwID0ga2V5VHlwZU1hcCgpOwotICAgIGF1dG8gaXQgPSBt
YXAuZmluZChrZXkpOwotICAgIGlmIChpdCA9PSBtYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBL
ZXlUeXBlOjpVbmtub3duOwotICAgIHJldHVybiBpdC0+c2Vjb25kOwotfQotCi1zdGF0aWMgYm9v
bCBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKQot
ewotICAgIGlmICh2YWx1ZSA9PSAidHJ1ZSIpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlm
ICh2YWx1ZSA9PSAiZmFsc2UiKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBMT0dfRVJS
T1IoIkZvdW5kIHVuZXhwZWN0ZWQgdmFsdWUgJyVzJyBmb3IgYm9vbGVhbiBvcHRpb24uIEV4cGVj
dGVkICd0cnVlJyBvciAnZmFsc2UnLiIsIHZhbHVlLmNfc3RyKCkpOwotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotc3RhdGljIHN0ZDo6c3RyaW5nIHBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNS
ZWxhdGl2ZVBhdGgoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlLCBjb25zdCBzdGQ6OnN0cmluZyYg
cGF0aE9yVVJMKQotewotICAgIGF1dG8gYmFzZVVSTCA9IGFkb3B0V0soVGVzdENvbnRyb2xsZXI6
OmNyZWF0ZVRlc3RVUkwocGF0aE9yVVJMLmNfc3RyKCkpKTsKLSAgICBhdXRvIHJlbGF0aXZlVVJM
ID0gYWRvcHRXSyhXS1VSTENyZWF0ZVdpdGhCYXNlVVJMKGJhc2VVUkwuZ2V0KCksIHZhbHVlLmNf
c3RyKCkpKTsKLSAgICByZXR1cm4gdG9TVEQoYWRvcHRXSyhXS1VSTENvcHlQYXRoKHJlbGF0aXZl
VVJMLmdldCgpKSkpOwotfQotCi1zdGF0aWMgc3RkOjpzdHJpbmcgcGFyc2VTdHJpbmdUZXN0SGVh
ZGVyVmFsdWVBc1VSTChjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRv
U1REKGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKFRlc3RDb250cm9sbGVyOjpjcmVhdGVUZXN0VVJM
KHZhbHVlLmNfc3RyKCkpKSkpOwotfQotCi1zdGF0aWMgVGVzdEZlYXR1cmVzIHBhcnNlVGVzdEhl
YWRlcihzdGQ6OmZpbGVzeXN0ZW06OnBhdGggcGF0aCwgY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhP
clVSTCkKLXsKLSAgICBUZXN0RmVhdHVyZXMgZmVhdHVyZXM7Ci0gICAgaWYgKCFzdGQ6OmZpbGVz
eXN0ZW06OmV4aXN0cyhwYXRoKSkKLSAgICAgICAgcmV0dXJuIGZlYXR1cmVzOwotCi0gICAgc3Rk
OjppZnN0cmVhbSBmaWxlKHBhdGgpOwotICAgIGlmICghZmlsZS5nb29kKCkpIHsKLSAgICAgICAg
TE9HX0VSUk9SKCJDb3VsZCBub3Qgb3BlbiBmaWxlIHRvIGluc3BlY3QgdGVzdCBoZWFkZXJzIGlu
ICVzIiwgcGF0aC5jX3N0cigpKTsKLSAgICAgICAgcmV0dXJuIGZlYXR1cmVzOwotICAgIH0KLQot
ICAgIHN0ZDo6c3RyaW5nIG9wdGlvbnM7Ci0gICAgZ2V0bGluZShmaWxlLCBvcHRpb25zKTsKLSAg
ICBzdGQ6OnN0cmluZyBiZWdpblN0cmluZygid2Via2l0LXRlc3QtcnVubmVyIFsgIik7Ci0gICAg
c3RkOjpzdHJpbmcgZW5kU3RyaW5nKCIgXSIpOwotICAgIHNpemVfdCBiZWdpbkxvY2F0aW9uID0g
b3B0aW9ucy5maW5kKGJlZ2luU3RyaW5nKTsKLSAgICBpZiAoYmVnaW5Mb2NhdGlvbiA9PSBzdGQ6
OnN0cmluZzo6bnBvcykKLSAgICAgICAgcmV0dXJuIGZlYXR1cmVzOwotICAgIHNpemVfdCBlbmRM
b2NhdGlvbiA9IG9wdGlvbnMuZmluZChlbmRTdHJpbmcsIGJlZ2luTG9jYXRpb24pOwotICAgIGlm
IChlbmRMb2NhdGlvbiA9PSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgICAgICBMT0dfRVJST1Io
IkNvdWxkIG5vdCBmaW5kIGVuZCBvZiB0ZXN0IGhlYWRlciBpbiAlcyIsIHBhdGguY19zdHIoKSk7
Ci0gICAgICAgIHJldHVybiBmZWF0dXJlczsKLSAgICB9Ci0gICAgc3RkOjpzdHJpbmcgcGFpclN0
cmluZyA9IG9wdGlvbnMuc3Vic3RyKGJlZ2luTG9jYXRpb24gKyBiZWdpblN0cmluZy5zaXplKCks
IGVuZExvY2F0aW9uIC0gKGJlZ2luTG9jYXRpb24gKyBiZWdpblN0cmluZy5zaXplKCkpKTsKLSAg
ICBzaXplX3QgcGFpclN0YXJ0ID0gMDsKLSAgICB3aGlsZSAocGFpclN0YXJ0IDwgcGFpclN0cmlu
Zy5zaXplKCkpIHsKLSAgICAgICAgc2l6ZV90IHBhaXJFbmQgPSBwYWlyU3RyaW5nLmZpbmQoIiAi
LCBwYWlyU3RhcnQpOwotICAgICAgICBpZiAocGFpckVuZCA9PSBzdGQ6OnN0cmluZzo6bnBvcykK
LSAgICAgICAgICAgIHBhaXJFbmQgPSBwYWlyU3RyaW5nLnNpemUoKTsKLSAgICAgICAgc2l6ZV90
IGVxdWFsc0xvY2F0aW9uID0gcGFpclN0cmluZy5maW5kKCI9IiwgcGFpclN0YXJ0KTsKLSAgICAg
ICAgaWYgKGVxdWFsc0xvY2F0aW9uID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgICAgICAg
ICBMT0dfRVJST1IoIk1hbGZvcm1lZCBvcHRpb24gaW4gdGVzdCBoZWFkZXIgKGNvdWxkIG5vdCBm
aW5kICc9JyBjaGFyYWN0ZXIpIGluICVzIiwgcGF0aC5jX3N0cigpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGF1dG8ga2V5ID0gcGFpclN0cmluZy5zdWJzdHIocGFp
clN0YXJ0LCBlcXVhbHNMb2NhdGlvbiAtIHBhaXJTdGFydCk7Ci0gICAgICAgIGF1dG8gdmFsdWUg
PSBwYWlyU3RyaW5nLnN1YnN0cihlcXVhbHNMb2NhdGlvbiArIDEsIHBhaXJFbmQgLSAoZXF1YWxz
TG9jYXRpb24gKyAxKSk7Ci0KLSAgICAgICAgaWYgKGtleS5yZmluZCgiZXhwZXJpbWVudGFsOiIp
ID09IDApIHsKLSAgICAgICAgICAgIGtleSA9IGtleS5zdWJzdHIoMTMpOwotICAgICAgICAgICAg
ZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCBwYXJzZUJvb2xlYW5U
ZXN0SGVhZGVyVmFsdWUodmFsdWUpIH0pOwotICAgICAgICB9IGVsc2UgaWYgKGtleS5yZmluZCgi
aW50ZXJuYWw6IikgPT0gMCkgewotICAgICAgICAgICAga2V5ID0ga2V5LnN1YnN0cig5KTsKLSAg
ICAgICAgICAgIGZlYXR1cmVzLmludGVybmFsRGVidWdGZWF0dXJlcy5pbnNlcnQoeyBrZXksIHBh
cnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSkgfSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBzd2l0Y2ggKGtleVR5cGUoa2V5KSkgewotICAgICAgICBjYXNlIEtleVR5cGU6OkJvb2w6Ci0g
ICAgICAgICAgICBmZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCBwYXJzZUJvb2xl
YW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpIH0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgS2V5VHlwZTo6RG91YmxlOgotICAgICAgICAgICAgZmVhdHVyZXMuZG91YmxlRmVhdHVy
ZXMuaW5zZXJ0KHsga2V5LCBzdGQ6OnN0b2QodmFsdWUpIH0pOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nOgotICAgICAgICAgICAgZmVhdHVyZXMuc3Ry
aW5nRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCB2YWx1ZSB9KTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEtleVR5cGU6OlN0cmluZ1JlbGF0aXZlUGF0aDoKLSAgICAgICAgICAgIGZl
YXR1cmVzLnN0cmluZ0ZlYXR1cmVzLmluc2VydCh7IGtleSwgcGFyc2VTdHJpbmdUZXN0SGVhZGVy
VmFsdWVBc1JlbGF0aXZlUGF0aCh2YWx1ZSwgcGF0aE9yVVJMKSB9KTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEtleVR5cGU6OlN0cmluZ1VSTDoKLSAgICAgICAgICAgIGZlYXR1
cmVzLnN0cmluZ0ZlYXR1cmVzLmluc2VydCh7IGtleSwgcGFyc2VTdHJpbmdUZXN0SGVhZGVyVmFs
dWVBc1VSTCh2YWx1ZSkgfSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBLZXlU
eXBlOjpTdHJpbmdWZWN0b3I6Ci0gICAgICAgICAgICBmZWF0dXJlcy5zdHJpbmdWZWN0b3JGZWF0
dXJlcy5pbnNlcnQoeyBrZXksIHNwbGl0KHZhbHVlLCAnLCcpIH0pOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgS2V5VHlwZTo6VW5rbm93bjoKLSAgICAgICAgICAgIExPR19FUlJP
UigiVW5rbm93biBrZXksICclcywgaW4gdGVzdCBoZWFkZXIgaW4gJXMiLCBrZXkuY19zdHIoKSwg
cGF0aC5jX3N0cigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAg
cGFpclN0YXJ0ID0gcGFpckVuZCArIDE7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZlYXR1cmVzOwot
fQotCi1zdGF0aWMgYm9vbCBwYXRoQ29udGFpbnMoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVS
TCwgY29uc3QgY2hhciogc3Vic3RyaW5nKQotewotICAgIFN0cmluZyBwYXRoKHBhdGhPclVSTC5j
X3N0cigpKTsKLSAgICByZXR1cm4gcGF0aC5jb250YWlucyhzdWJzdHJpbmcpOyAvLyBDYXNlLWlu
c2Vuc2l0aXZlLgotfQotCi1zdGF0aWMgYm9vbCBzaG91bGRNYWtlVmlld3BvcnRGbGV4aWJsZShj
b25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQotewotICAgIHJldHVybiBwYXRoQ29udGFpbnMo
cGF0aE9yVVJMLCAidmlld3BvcnQvIikgJiYgIXBhdGhDb250YWlucyhwYXRoT3JVUkwsICJ2aXN1
YWwtdmlld3BvcnQvIik7Ci19Ci0KLXN0YXRpYyBib29sIHNob3VsZFVzZUVwaGVtZXJhbFNlc3Np
b24oY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKLXsKLSAgICByZXR1cm4gcGF0aENvbnRh
aW5zKHBhdGhPclVSTCwgInczYy9JbmRleGVkREItcHJpdmF0ZS1icm93c2luZyIpIHx8IHBhdGhD
b250YWlucyhwYXRoT3JVUkwsICJ3M2NcXEluZGV4ZWREQi1wcml2YXRlLWJyb3dzaW5nIik7Ci19
Ci0KLXN0YXRpYyBPcHRpb25hbDxzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+PiBvdmVycmlkZVZp
ZXdXaWR0aEFuZEhlaWdodEZvclRlc3QoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKLXsK
LSAgICBpZiAocGF0aENvbnRhaW5zKHBhdGhPclVSTCwgInN2Zy9XM0MtU1ZHLTEuMSIpIHx8IHBh
dGhDb250YWlucyhwYXRoT3JVUkwsICJzdmdcXFczQy1TVkctMS4xIikpCi0gICAgICAgIHJldHVy
biB7IHsgNDgwLCAzNjAgfSB9OwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLXN0YXRp
YyBPcHRpb25hbDxkb3VibGU+IG92ZXJyaWRlRGV2aWNlU2NhbGVGYWN0b3JGb3JUZXN0KGNvbnN0
IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCi17Ci0gICAgaWYgKHBhdGhDb250YWlucyhwYXRoT3JV
UkwsICIvaGlkcGktM3gtIikpCi0gICAgICAgIHJldHVybiAzOwotICAgIGlmIChwYXRoQ29udGFp
bnMocGF0aE9yVVJMLCAiL2hpZHBpLSIpKQotICAgICAgICByZXR1cm4gMjsKLSAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwotfQotCi1zdGF0aWMgYm9vbCBzaG91bGREdW1wSlNDb25zb2xlTG9nSW5T
dGRFcnIoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKLXsKLSAgICByZXR1cm4gcGF0aENv
bnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo4ODAwL2JlYWNvbiIpIHx8IHBhdGhDb250YWlu
cyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6OTQ0My9iZWFjb24iKQotICAgICAgICB8fCBwYXRoQ29u
dGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvY29ycyIpIHx8IHBhdGhDb250YWlucyhw
YXRoT3JVUkwsICJsb2NhbGhvc3Q6OTQ0My9jb3JzIikKLSAgICAgICAgfHwgcGF0aENvbnRhaW5z
KHBhdGhPclVSTCwgImxvY2FsaG9zdDo4ODAwL2ZldGNoIikgfHwgcGF0aENvbnRhaW5zKHBhdGhP
clVSTCwgImxvY2FsaG9zdDo5NDQzL2ZldGNoIikKLSAgICAgICAgfHwgcGF0aENvbnRhaW5zKHBh
dGhPclVSTCwgImxvY2FsaG9zdDo4ODAwL3NlcnZpY2Utd29ya2VycyIpIHx8IHBhdGhDb250YWlu
cyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6OTQ0My9zZXJ2aWNlLXdvcmtlcnMiKQotICAgICAgICB8
fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvc3RyZWFtcy93cml0YWJs
ZS1zdHJlYW1zIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3N0
cmVhbXMvd3JpdGFibGUtc3RyZWFtcyIpCi0gICAgICAgIHx8IHBhdGhDb250YWlucyhwYXRoT3JV
UkwsICJsb2NhbGhvc3Q6ODgwMC9zdHJlYW1zL3BpcGluZyIpIHx8IHBhdGhDb250YWlucyhwYXRo
T3JVUkwsICJsb2NhbGhvc3Q6OTQ0My9zdHJlYW1zL3BpcGluZyIpCi0gICAgICAgIHx8IHBhdGhD
b250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgwMC94aHIiKSB8fCBwYXRoQ29udGFpbnMo
cGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMveGhyIikKLSAgICAgICAgfHwgcGF0aENvbnRhaW5z
KHBhdGhPclVSTCwgImxvY2FsaG9zdDo4ODAwL3dlYnJ0YyIpIHx8IHBhdGhDb250YWlucyhwYXRo
T3JVUkwsICJsb2NhbGhvc3Q6OTQ0My93ZWJydGMiKQotICAgICAgICB8fCBwYXRoQ29udGFpbnMo
cGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvd2Vic29ja2V0cyIpIHx8IHBhdGhDb250YWlucyhw
YXRoT3JVUkwsICJsb2NhbGhvc3Q6OTQ0My93ZWJzb2NrZXRzIik7Ci19Ci0KLVRlc3RGZWF0dXJl
cyBoYXJkY29kZWRGZWF0dXJlc0Jhc2VkT25QYXRoRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYg
Y29tbWFuZCkKLXsKLSAgICBUZXN0RmVhdHVyZXMgZmVhdHVyZXM7Ci0KLSAgICBpZiAoc2hvdWxk
TWFrZVZpZXdwb3J0RmxleGlibGUoY29tbWFuZC5wYXRoT3JVUkwpKQotICAgICAgICBmZWF0dXJl
cy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsgInVzZUZsZXhpYmxlVmlld3BvcnQiLCB0cnVlIH0pOwot
ICAgIGlmIChzaG91bGRVc2VFcGhlbWVyYWxTZXNzaW9uKGNvbW1hbmQucGF0aE9yVVJMKSkKLSAg
ICAgICAgZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJ1c2VFcGhlbWVyYWxTZXNzaW9u
IiwgdHJ1ZSB9KTsKLSAgICBpZiAoc2hvdWxkRHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKGNvbW1h
bmQucGF0aE9yVVJMKSkKLSAgICAgICAgZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJk
dW1wSlNDb25zb2xlTG9nSW5TdGRFcnIiLCB0cnVlIH0pOwotICAgIGlmIChhdXRvIGRldmljZVNj
YWxlRmFjdG9yID0gb3ZlcnJpZGVEZXZpY2VTY2FsZUZhY3RvckZvclRlc3QoY29tbWFuZC5wYXRo
T3JVUkwpOyBkZXZpY2VTY2FsZUZhY3RvciAhPSBXVEY6Om51bGxvcHQpCi0gICAgICAgIGZlYXR1
cmVzLmRvdWJsZUZlYXR1cmVzLmluc2VydCh7ICJkZXZpY2VTY2FsZUZhY3RvciIsIGRldmljZVNj
YWxlRmFjdG9yLnZhbHVlKCkgfSk7Ci0gICAgaWYgKGF1dG8gdmlld1dpZHRoQW5kSGVpZ2h0ID0g
b3ZlcnJpZGVWaWV3V2lkdGhBbmRIZWlnaHRGb3JUZXN0KGNvbW1hbmQucGF0aE9yVVJMKTsgdmll
d1dpZHRoQW5kSGVpZ2h0ICE9IFdURjo6bnVsbG9wdCkgewotICAgICAgICBmZWF0dXJlcy5kb3Vi
bGVGZWF0dXJlcy5pbnNlcnQoeyAidmlld1dpZHRoIiwgdmlld1dpZHRoQW5kSGVpZ2h0LT5maXJz
dCB9KTsKLSAgICAgICAgZmVhdHVyZXMuZG91YmxlRmVhdHVyZXMuaW5zZXJ0KHsgInZpZXdIZWln
aHQiLCB2aWV3V2lkdGhBbmRIZWlnaHQtPnNlY29uZCB9KTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
ZmVhdHVyZXM7Ci19Ci0KLVRlc3RGZWF0dXJlcyBmZWF0dXJlRGVmYXVsdHNGcm9tVGVzdEhlYWRl
ckZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmIGNvbW1hbmQpCi17Ci0gICAgcmV0dXJuIHBhcnNl
VGVzdEhlYWRlcihjb21tYW5kLmFic29sdXRlUGF0aCwgY29tbWFuZC5wYXRoT3JVUkwpOwotfQot
CiBUZXN0T3B0aW9uczo6VGVzdE9wdGlvbnMoVGVzdEZlYXR1cmVzIGZlYXR1cmVzKQogICAgIDog
bV9mZWF0dXJlcyB7IGZlYXR1cmVzIH0KIHsKLSNpZiBEVU1QX0ZFQVRVUkVTCi0gICAgc3RkOjpj
ZXJyIDw8ICJEVU1QSU5HIEZFQVRVUkVTXG4iOwotICAgIGR1bXBGZWF0dXJlcyhtX2ZlYXR1cmVz
KTsKLSNlbmRpZgogfQogCiBib29sIFRlc3RPcHRpb25zOjpoYXNTYW1lSW5pdGlhbGl6YXRpb25P
cHRpb25zKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKSBjb25zdApAQCAtNDUzLDI3ICsxOTYs
MjcgQEAgYm9vbCBUZXN0T3B0aW9uczo6aGFzU2FtZUluaXRpYWxpemF0aW9uTwogICAgIGlmICht
X2ZlYXR1cmVzLmludGVybmFsRGVidWdGZWF0dXJlcyAhPSBvcHRpb25zLm1fZmVhdHVyZXMuaW50
ZXJuYWxEZWJ1Z0ZlYXR1cmVzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBmb3IgKGF1
dG8gW2tleSwga2V5VHlwZV0gOiBrZXlUeXBlTWFwKCkpIHsKKyAgICBmb3IgKGF1dG8gW2tleSwg
a2V5VHlwZV0gOiBrZXlUeXBlTWFwcGluZygpKSB7CiAgICAgICAgIHN3aXRjaCAoa2V5VHlwZSkg
ewotICAgICAgICBjYXNlIEtleVR5cGU6OkJvb2w6CisgICAgICAgIGNhc2UgVGVzdEhlYWRlcktl
eVR5cGU6OkJvb2w6CiAgICAgICAgICAgICBpZiAoYm9vbEZlYXR1cmVWYWx1ZShrZXkpICE9IG9w
dGlvbnMuYm9vbEZlYXR1cmVWYWx1ZShrZXkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEtleVR5cGU6OkRvdWJsZToKKyAg
ICAgICAgY2FzZSBUZXN0SGVhZGVyS2V5VHlwZTo6RG91YmxlOgogICAgICAgICAgICAgaWYgKGRv
dWJsZUZlYXR1cmVWYWx1ZShrZXkpICE9IG9wdGlvbnMuZG91YmxlRmVhdHVyZVZhbHVlKGtleSkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nOgotICAgICAgICBjYXNlIEtleVR5cGU6OlN0cmluZ1Jl
bGF0aXZlUGF0aDoKLSAgICAgICAgY2FzZSBLZXlUeXBlOjpTdHJpbmdVUkw6CisgICAgICAgIGNh
c2UgVGVzdEhlYWRlcktleVR5cGU6OlN0cmluZzoKKyAgICAgICAgY2FzZSBUZXN0SGVhZGVyS2V5
VHlwZTo6U3RyaW5nUmVsYXRpdmVQYXRoOgorICAgICAgICBjYXNlIFRlc3RIZWFkZXJLZXlUeXBl
OjpTdHJpbmdVUkw6CiAgICAgICAgICAgICBpZiAoc3RyaW5nRmVhdHVyZVZhbHVlKGtleSkgIT0g
b3B0aW9ucy5zdHJpbmdGZWF0dXJlVmFsdWUoa2V5KSkKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBLZXlUeXBlOjpTdHJpbmdW
ZWN0b3I6CisgICAgICAgIGNhc2UgVGVzdEhlYWRlcktleVR5cGU6OlN0cmluZ1ZlY3RvcjoKICAg
ICAgICAgICAgIGlmIChzdHJpbmdWZWN0b3JGZWF0dXJlVmFsdWUoa2V5KSAhPSBvcHRpb25zLnN0
cmluZ1ZlY3RvckZlYXR1cmVWYWx1ZShrZXkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEtleVR5cGU6OlVua25vd246Cisg
ICAgICAgIGNhc2UgVGVzdEhlYWRlcktleVR5cGU6OlVua25vd246CiAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvVGVzdE9wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL1Rlc3RPcHRpb25zLmgJKHJldmlzaW9uIDI2ODM2NCkKKysrIFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdE9wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAj
cHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIlRlc3RGZWF0dXJlcy5oIgogI2luY2x1ZGUgPG9wdGlv
bmFsPgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgpAQCAtMzIs
MjIgKzMzLDYgQEAKIAogbmFtZXNwYWNlIFdUUiB7CiAKLXN0cnVjdCBUZXN0Q29tbWFuZDsKLQot
c3RydWN0IFRlc3RGZWF0dXJlcyB7Ci0gICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5n
LCBib29sPiBleHBlcmltZW50YWxGZWF0dXJlczsKLSAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3Rk
OjpzdHJpbmcsIGJvb2w+IGludGVybmFsRGVidWdGZWF0dXJlczsKLSAgICBzdGQ6OnVub3JkZXJl
ZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+IGJvb2xGZWF0dXJlczsKLSAgICBzdGQ6OnVub3JkZXJl
ZF9tYXA8c3RkOjpzdHJpbmcsIGRvdWJsZT4gZG91YmxlRmVhdHVyZXM7Ci0gICAgc3RkOjp1bm9y
ZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4gc3RyaW5nRmVhdHVyZXM7Ci0gICAg
c3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4+
IHN0cmluZ1ZlY3RvckZlYXR1cmVzOwotfTsKLQotdm9pZCBtZXJnZShUZXN0RmVhdHVyZXMmIGJh
c2UsIFRlc3RGZWF0dXJlcyBhZGRpdGlvbmFsKTsKLQotVGVzdEZlYXR1cmVzIGhhcmRjb2RlZEZl
YXR1cmVzQmFzZWRPblBhdGhGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJik7Ci1UZXN0RmVhdHVy
ZXMgZmVhdHVyZURlZmF1bHRzRnJvbVRlc3RIZWFkZXJGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5k
Jik7Ci0KIHN0cnVjdCBDb250ZXh0T3B0aW9ucyB7CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJp
bmc+IG92ZXJyaWRlTGFuZ3VhZ2VzOwogICAgIGJvb2wgaWdub3JlU3luY2hyb25vdXNNZXNzYWdp
bmdUaW1lb3V0czsKQEAgLTc0LDYgKzU5LDggQEAgc3RydWN0IENvbnRleHRPcHRpb25zIHsKIAog
Y2xhc3MgVGVzdE9wdGlvbnMgewogcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBzdGQ6OnVub3Jk
ZXJlZF9tYXA8c3RkOjpzdHJpbmcsIFRlc3RIZWFkZXJLZXlUeXBlPiYga2V5VHlwZU1hcHBpbmco
KTsKKwogICAgIGV4cGxpY2l0IFRlc3RPcHRpb25zKFRlc3RGZWF0dXJlcyk7CiAKICAgICBDb250
ZXh0T3B0aW9ucyBjb250ZXh0T3B0aW9ucygpIGNvbnN0CkluZGV4OiBUb29scy9XZWJLaXRUZXN0
UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjY4MzY0KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTEyMCw2ICsxMjAsOCBAQAogCQk2NTEwQTc4QjExRUM2NDM4MDA0MTA4NjcgLyog
V2ViS2l0V2VpZ2h0V2F0Y2hlcjgwMC50dGYgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDY1MTBBNzgwMTFFQzY0MzgwMDQxMDg2NyAvKiBXZWJLaXRXZWln
aHRXYXRjaGVyODAwLnR0ZiAqLzsgfTsKIAkJNjUxMEE3OEMxMUVDNjQzODAwNDEwODY3IC8qIFdl
YktpdFdlaWdodFdhdGNoZXI5MDAudHRmIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2NTEwQTc4MTExRUM2NDM4MDA0MTA4NjcgLyogV2ViS2l0V2VpZ2h0
V2F0Y2hlcjkwMC50dGYgKi87IH07CiAJCTY1RUI4NUEwMTFFQzY3Q0MwMDM0RDMwMCAvKiBBY3Rp
dmF0ZUZvbnRzQ29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2NUVCODU5RjExRUM2N0NDMDAzNEQzMDAgLyogQWN0aXZhdGVGb250c0NvY29hLm1t
ICovOyB9OworCQk3Q0ZGOUJDQTI1MzRBRjFEMDAwODAwOUYgLyogVGVzdEZlYXR1cmVzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRkY5QkM2MjUz
NEFGMUQwMDA4MDA5RiAvKiBUZXN0RmVhdHVyZXMuY3BwICovOyB9OworCQk3Q0ZGOUJDQjI1MzRB
RjFEMDAwODAwOUYgLyogVGVzdENvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0NGRjlCQzcyNTM0QUYxRDAwMDgwMDlGIC8qIFRlc3RDb21t
YW5kLmNwcCAqLzsgfTsKIAkJODAzNEM2NjIxNDg3NjM2NDAwQUMzMkU5IC8qIEFjY2Vzc2liaWxp
dHlDb250cm9sbGVyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODAzNEM2NjExNDg3NjM2NDAwQUMzMkU5IC8qIEFjY2Vzc2liaWxpdHlDb250cm9s
bGVyTWFjLm1tICovOyB9OwogCQk4MDk3MzM4QTE0ODc0QTVBMDA4MTU2RDkgLyogQWNjZXNzaWJp
bGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4MDk3MzM4OTE0ODc0QTVBMDA4MTU2RDkgLyogQWNjZXNzaWJpbGl0
eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0gKi87IH07CiAJCTkzNzY0MTdBMjEwRDczNzIwMEEzREFB
RSAvKiBXZWJLaXRUZXN0UnVubmVyV2luZG93Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTM3NjQxNzYyMTBENzM2MDAwQTNEQUFFIC8qIFdlYktpdFRl
c3RSdW5uZXJXaW5kb3cubW0gKi87IH07CkBAIC0zNDksMTMgKzM1MSwxNiBAQAogCQk2NTEwQTc4
MTExRUM2NDM4MDA0MTA4NjcgLyogV2ViS2l0V2VpZ2h0V2F0Y2hlcjkwMC50dGYgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBmaWxlOyBuYW1lID0gV2Vi
S2l0V2VpZ2h0V2F0Y2hlcjkwMC50dGY7IHBhdGggPSBmb250cy9XZWJLaXRXZWlnaHRXYXRjaGVy
OTAwLnR0Zjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjVFQjg1OUQxMUVDNjdDQzAw
MzREMzAwIC8qIEFjdGl2YXRlRm9udHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQWN0aXZhdGVGb250cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NUVCODU5
RjExRUM2N0NDMDAzNEQzMDAgLyogQWN0aXZhdGVGb250c0NvY29hLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQWN0aXZhdGVGb250c0NvY29hLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3Q0ZGOUJDNTI1MzRBRjFEMDAwODAwOUYgLyogVGVzdEZl
YXR1cmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFRlc3RGZWF0dXJlcy5o
OyBwYXRoID0gLi4vVGVzdFJ1bm5lclNoYXJlZC9UZXN0RmVhdHVyZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJN0NGRjlCQzYyNTM0QUYxRDAwMDgwMDlGIC8qIFRlc3RGZWF0dXJl
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBUZXN0RmVhdHVyZXMu
Y3BwOyBwYXRoID0gLi4vVGVzdFJ1bm5lclNoYXJlZC9UZXN0RmVhdHVyZXMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3Q0ZGOUJDNzI1MzRBRjFEMDAwODAwOUYgLyogVGVzdENv
bW1hbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gVGVzdENvbW1h
bmQuY3BwOyBwYXRoID0gLi4vVGVzdFJ1bm5lclNoYXJlZC9UZXN0Q29tbWFuZC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDRkY5QkM4MjUzNEFGMUQwMDA4MDA5RiAvKiBUZXN0
Q29tbWFuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBUZXN0Q29tbWFuZC5o
OyBwYXRoID0gLi4vVGVzdFJ1bm5lclNoYXJlZC9UZXN0Q29tbWFuZC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk4MDM0QzY2MTE0ODc2MzY0MDBBQzMyRTkgLyogQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJODA5NzMzODgxNDg3NEE1QTAwODE1NkQ5IC8qIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRp
b25IYW5kbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFjY2Vzc2liaWxp
dHlOb3RpZmljYXRpb25IYW5kbGVyLmg7IHBhdGggPSBtYWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNh
dGlvbkhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODA5NzMzODkxNDg3
NEE1QTAwODE1NkQ5IC8qIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gQWNjZXNzaWJpbGl0eU5vdGlmaWNh
dGlvbkhhbmRsZXIubW07IHBhdGggPSBtYWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRs
ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0MUNDMDBEMTgxMTg1QkYwMDQy
RTlCNiAvKiBPcHRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE9wdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDFDQzAwRTE4MTE4
NUJGMDA0MkU5QjYgLyogT3B0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThERDc2RkExMDQ4NkFB
NzYwMEQ5NkI1RSAvKiBXZWJLaXRUZXN0UnVubmVyICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNs
dWRlSW5JbmRleCA9IDA7IHBhdGggPSBXZWJLaXRUZXN0UnVubmVyOyBzb3VyY2VUcmVlID0gQlVJ
TFRfUFJPRFVDVFNfRElSOyB9OwotCQk5MzM4RDFCQTI1MEE3OUVCMDBFODI3RjYgLyogSlNCYXNp
Y3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gSlNCYXNpY3MuaDsgcGF0aCA9IC4uL1Rlc3RSdW5uZXJTaGFy
ZWQvQmluZGluZ3MvSlNCYXNpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMz
OEQxQkUyNTBCRDlERDAwRTgyN0Y2IC8qIERpY3Rpb25hcnlGdW5jdGlvbnMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRGljdGlvbmFyeUZ1bmN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5Mzc2NDE3NjIxMEQ3MzYwMDBBM0RBQUUgLyogV2ViS2l0VGVzdFJ1bm5lcldpbmRvdy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYktpdFRlc3RSdW5uZXJX
aW5kb3cubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzNzY0MTc3MjEwRDczNjEw
MEEzREFBRSAvKiBXZWJLaXRUZXN0UnVubmVyV2luZG93LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYktpdFRlc3RSdW5uZXJXaW5kb3cuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTU0OSw2ICs1NTQsMTAgQEAKIAkJCQkzMTQ4QTA1NDFFNkY4NUI2MDBEM0Iz
MTYgLyogSU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uaCAqLywKIAkJCQk5M0M3ODgxRjI1MEM2
OUU0MDBDMEFBMjQgLyogUmVmdGVzdEZ1bmN0aW9ucy5jcHAgKi8sCiAJCQkJOTNDNzg4MjAyNTBD
NjlFNDAwQzBBQTI0IC8qIFJlZnRlc3RGdW5jdGlvbnMuaCAqLywKKwkJCQk3Q0ZGOUJDNzI1MzRB
RjFEMDAwODAwOUYgLyogVGVzdENvbW1hbmQuY3BwICovLAorCQkJCTdDRkY5QkM4MjUzNEFGMUQw
MDA4MDA5RiAvKiBUZXN0Q29tbWFuZC5oICovLAorCQkJCTdDRkY5QkM2MjUzNEFGMUQwMDA4MDA5
RiAvKiBUZXN0RmVhdHVyZXMuY3BwICovLAorCQkJCTdDRkY5QkM1MjUzNEFGMUQwMDA4MDA5RiAv
KiBUZXN0RmVhdHVyZXMuaCAqLywKIAkJCSk7CiAJCQluYW1lID0gVGVzdFJ1bm5lclNoYXJlZDsK
IAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xMjA5LDggKzEyMTgsMTAgQEAKIAkJCQky
RTJBNzY1RDIzNzBDOEQxMDA4RjlGRkUgLyogUGxhdGZvcm1WaWV3SGVscGVycy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCUY0MDEwQjdFMjREQTIwNTMwMEE4NzZFMiAvKiBQb3NlQXNDbGFzcy5tbSBp
biBTb3VyY2VzICovLAogCQkJCTJERkE5ODQ5MUQ3RjcwQ0YwMEFGRjJDOSAvKiBTaGFyZWRFdmVu
dFN0cmVhbXNNYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQk3Q0ZGOUJDQjI1MzRBRjFEMDAwODAw
OUYgLyogVGVzdENvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE4NTEwNDExQjlBRTEz
ODAwNzQ0QUVCIC8qIFRlc3RDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExODUx
MDNCMUI5QUUwRTIwMDc0NEFFQiAvKiBUZXN0Q29udHJvbGxlckNvY29hLm1tIGluIFNvdXJjZXMg
Ki8sCisJCQkJN0NGRjlCQ0EyNTM0QUYxRDAwMDgwMDlGIC8qIFRlc3RGZWF0dXJlcy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBMTg1MTA0MjFCOUFFMTNFMDA3NDRBRUIgLyogVGVzdEludm9jYXRp
b24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE4NTEwM0QxQjlBRTEwNjAwNzQ0QUVCIC8qIFRl
c3RJbnZvY2F0aW9uQ0cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2MjJDRTkxQkJCM0ExQTAw
ODM4QUQzIC8qIFRlc3RPcHRpb25zLmNwcCBpbiBTb3VyY2VzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411137</attachid>
            <date>2020-10-12 11:39:38 -0700</date>
            <delta_ts>2020-10-12 12:33:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217614-20201012113938.patch</filename>
            <type>text/plain</type>
            <size>90784</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2ODM2NCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDYyIEBACisyMDIwLTEwLTEyICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBTaGFyZSBUZXN0RmVhdHVyZXMgYW5kIFRlc3RDb21tYW5kIGluZnJhc3RydWN0dXJl
IGJldHdlZW4gRHVtcFJlbmRlclRyZWUgYW5kIFdlYktpdFRlc3RSdW5uZXIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzYxNAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgVGVzdEZlYXR1cmVzIGFu
ZCBUZXN0Q29tbWFuZCBjb2RlIGZyb20gV2ViS2l0VGVzdFJ1bm5lciB0byBUZXN0UnVubmVyU2hh
cmVkCisgICAgICAgIGFuZCBhZG9wdCBzaGFyZWQgY29kZSBpbiBib3RoIFdlYktpdFRlc3RSdW5u
ZXIgYW5kIER1bXBSZW5kZXJUcmVlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBhbGxvd3MgdXMg
dG8gcmVtb3ZlIGR1cGxpY2F0ZSBhcmd1bWVudCBhbmQgdGVzdCBoZWFkZXIgcGFyc2luZyBjb2Rl
IGFuZAorICAgICAgICBhdm9pZCB1cGRhdGluZyBib3RoIHdoZW4gd2Ugd2FudCB3YW50IGNoYW5n
ZSB0aGluZ3MuCisgICAgICAgIAorICAgICAgICBUbyBzdXBwb3J0IGRpZmZlcmVudCBzZXRzIG9m
IHRlc3QgaGVhZGVyIG9wdGlvbnMsIGZlYXR1cmVEZWZhdWx0c0Zyb21UZXN0SGVhZGVyRm9yVGVz
dCBub3cKKyAgICAgICAgaGFzIGEgcGFyYW1ldGVyIGZvciBhIGtleSB0eXBlIG1hcCwgcmF0aGVy
IHRoYW4gdGhlIG9sZCBoYXJkY29kZWQgc2V0LiBUaGlzIGFsbG93cworICAgICAgICBXZWJLaXRU
ZXN0UnVubmVyIGFuZCBEdW1wUmVuZGVyVHJlZSwgd2hpY2ggY3VycmVudGx5IGhhdmUgc2xpZ2h0
bHkgZGlmZmVyZW50IG9wdGlvbnMKKyAgICAgICAgdG8gY29udGludWUgdG8gYmVoYXZlIGluIHRo
ZSBzYW1lIHdheS4gRXZlbnR1YWxseSwgaXQgd2lsbCBwcm9iYWJseSBtYWtlIHNlbnNlIHRvIGhh
dmUgdGhlc2UKKyAgICAgICAgbW9zdGx5IGdlbmVyYXRlZCBmcm9tIHRoZSBXZWJQcmVmZXJlbmNl
cyoueWFtbCBjb25maWd1cmF0aW9uIGZpbGVzLgorCisgICAgICAgIE1hdGNoaW5nIHByZWNlZGVu
dCwgc2hhcmVkIGZpbGVzIHVzZSB0aGUgV1RSIG5hbWVzcGFjZS4gCisKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9EdW1w
UmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RSdW5u
ZXJTaGFyZWQvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9DTWFr
ZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgQWRkIG5ldyBmaWxlcy4KKworICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmg6CisgICAgICAgIFJlbW92ZXMg
VGVzdENvbW1hbmQgYW5kIHBhcnNlSW5wdXRMaW5lIG5vdyB0aGF0IHRoZXkgY29tZSBmcm9tIHNo
YXJlZCBUZXN0Q29tbWFuZC5oCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVy
VHJlZUNvbW1vbi5jcHA6IFJlbW92ZWQuCisgICAgICAgIE1vdmVkIGNvbnRlbnRzIHRvIHNoYXJl
ZCBUZXN0Q29tbWFuZC5jcHAKKyAgICAgICAgCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvVGVz
dE9wdGlvbnMuY3BwOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25zLmg6Cisg
ICAgICAgIEFkb3B0IG1vZGVsIGZyb20gV2ViS2l0VGVzdFJ1bm5lciBhbmQgdXNlIGluaXRpYWxp
emF0aW9uIGZyb20gVGVzdEZlYXR1cmVzLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFj
L0R1bXBSZW5kZXJUcmVlLm1tOgorICAgICAgICBBZG9wdCBzaGFyZWQgVGVzdEZlYXR1cmVzIGFu
ZCBUZXN0Q29tbWFuZCBpbmZyYXN0cnVjdHVyZS4gQ29uc3RydWN0IFRlc3RPcHRpb25zCisgICAg
ICAgIGluIGEgc2ltaWxhciBtYW5uZXIgdG8gV2ViS2l0VGVzdFJ1bm5lciBieSBtZXJnaW5nIHRv
Z2V0aGVyIGhhcmRjb2RlZCAvIHBhdGggYmFzZWQKKyAgICAgICAgZmVhdHVyZXMgYW5kIHRlc3Qg
aGVhZGVyIGJhc2VkIGZlYXR1cmVzLgorIAorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9V
SURlbGVnYXRlLmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL1VJRGVsZWdhdGUubW06
CisgICAgICAgIFVwZGF0ZSBmb3IgbmV3IG5hbWVzcGFjZS4KKworICAgICAgICAqIFRlc3RSdW5u
ZXJTaGFyZWQvVGVzdENvbW1hbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBUZXN0UnVubmVyU2hh
cmVkL1Rlc3RDb21tYW5kLmg6IEFkZGVkLgorICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvVGVz
dEZlYXR1cmVzLmNwcDogQWRkZWQuCisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9UZXN0RmVh
dHVyZXMuaDogQWRkZWQuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxl
ci5jcHA6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oOgorICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuY3BwOgorICAgICAgICAqIFdlYktp
dFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuaDoKKyAgICAgICAgTW92ZWQgZnJvbSBXZWJLaXRUZXN0
UnVubmVyLiBHZW5lcmFsaXplZCB0byBUZXN0RmVhdHVyZXMgdG8gdGFrZSBhIGtleSB0eXBlIG1h
cCwKKyAgICAgICAgcmF0aGVyIHRoYW4gaGFyZCBjb2RpbmcgaXQuIFJlcGxhY2UgdXNlIG9mIFdl
YktpdCB0eXBlcywgbGlrZSBXS1VSTFJlZiwgd2l0aCBzdGQ6OnN0cmluZworICAgICAgICBhbmQg
c3RkOjpmaWxlc3lzdGVtOjpwYXRoLgorCiAyMDIwLTEwLTEyICBMdW1pbmcgWWluICA8bHVtaW5n
X3lpbkBhcHBsZS5jb20+CiAKICAgICAgICAgW21hY09TXSBXb3JrYXJvdW5kIGZvciBNQUNfT1Nf
WF9WRVJTSU9OX01BSk9SIGluY29ycmVjdGx5IGluY2x1ZGluZyBtaW5vciB2ZXJzaW9uIHdoZW4g
YnVpbGRpbmcgCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9DTWFrZUxpc3RzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24g
MjY4MzY0KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTEwLDcgKzEwLDYgQEAgc2V0KER1bXBSZW5kZXJUcmVlX1NPVVJDRVMKICAgICBB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlci5jcHAKICAgICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNw
cAogICAgIEN5Y2xpY1JlZHVuZGFuY3lDaGVjay5jcHAKLSAgICBEdW1wUmVuZGVyVHJlZUNvbW1v
bi5jcHAKICAgICBHQ0NvbnRyb2xsZXIuY3BwCiAgICAgSmF2YVNjcmlwdFRocmVhZGluZy5jcHAK
ICAgICBQaXhlbER1bXBTdXBwb3J0LmNwcApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVt
cFJlbmRlclRyZWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVu
ZGVyVHJlZS5oCShyZXZpc2lvbiAyNjgzNjQpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1w
UmVuZGVyVHJlZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxNCArNTQsMyBAQCBleHRlcm4gUmVm
UHRyPFRlc3RSdW5uZXI+IGdUZXN0UnVubmVyOwogdm9pZCBkdW1wKCk7CiB2b2lkIGRpc3BsYXlX
ZWJWaWV3KCk7CiB2b2lkIGRpc3BsYXlBbmRUcmFja1JlcGFpbnRzV2ViVmlldygpOwotCi1zdHJ1
Y3QgVGVzdENvbW1hbmQgewotICAgIHN0ZDo6c3RyaW5nIHBhdGhPclVSTDsKLSAgICBzdGQ6OnN0
cmluZyBhYnNvbHV0ZVBhdGg7Ci0gICAgYm9vbCBzaG91bGREdW1wUGl4ZWxzIHsgZmFsc2UgfTsK
LSAgICBzdGQ6OnN0cmluZyBleHBlY3RlZFBpeGVsSGFzaDsKLSAgICBpbnQgdGltZW91dCB7IDMw
MDAwIH07IC8vIGluIG1zCi0gICAgYm9vbCBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgeyBmYWxz
ZSB9OwotfTsKLQotVGVzdENvbW1hbmQgcGFyc2VJbnB1dExpbmUoY29uc3Qgc3RkOjpzdHJpbmcm
KTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZUNvbW1vbi5j
cHAJKHJldmlzaW9uIDI2ODM2NCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJU
cmVlQ29tbW9uLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDExNCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5j
bHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgot
I2luY2x1ZGUgPHN0cmluZz4KLQotY2xhc3MgQ29tbWFuZFRva2VuaXplciB7Ci1wdWJsaWM6Ci0g
ICAgZXhwbGljaXQgQ29tbWFuZFRva2VuaXplcihjb25zdCBzdGQ6OnN0cmluZyYgaW5wdXQpCi0g
ICAgICAgIDogbV9pbnB1dChpbnB1dCkKLSAgICAgICAgLCBtX3Bvc05leHRTZXBhcmF0b3IoMCkK
LSAgICB7Ci0gICAgICAgIHB1bXAoKTsKLSAgICB9Ci0KLSAgICBib29sIGhhc05leHQoKSBjb25z
dDsKLSAgICBzdGQ6OnN0cmluZyBuZXh0KCk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBwdW1wKCk7
Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIga1NlcGFyYXRvciA9ICdcJyc7Ci0gICAgY29uc3Qgc3Rk
OjpzdHJpbmcmIG1faW5wdXQ7Ci0gICAgc3RkOjpzdHJpbmcgbV9uZXh0OwotICAgIHNpemVfdCBt
X3Bvc05leHRTZXBhcmF0b3I7Ci19OwotCi12b2lkIENvbW1hbmRUb2tlbml6ZXI6OnB1bXAoKQot
ewotICAgIGlmIChtX3Bvc05leHRTZXBhcmF0b3IgPT0gc3RkOjpzdHJpbmc6Om5wb3MgfHwgbV9w
b3NOZXh0U2VwYXJhdG9yID09IG1faW5wdXQuc2l6ZSgpKSB7Ci0gICAgICAgIG1fbmV4dCA9IHN0
ZDo6c3RyaW5nKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc2l6ZV90IHN0YXJ0ID0g
bV9wb3NOZXh0U2VwYXJhdG9yID8gbV9wb3NOZXh0U2VwYXJhdG9yICsgMSA6IDA7Ci0gICAgbV9w
b3NOZXh0U2VwYXJhdG9yID0gbV9pbnB1dC5maW5kKGtTZXBhcmF0b3IsIHN0YXJ0KTsKLSAgICBz
aXplX3Qgc2l6ZSA9IG1fcG9zTmV4dFNlcGFyYXRvciA9PSBzdGQ6OnN0cmluZzo6bnBvcyA/IHN0
ZDo6c3RyaW5nOjpucG9zIDogbV9wb3NOZXh0U2VwYXJhdG9yIC0gc3RhcnQ7Ci0gICAgbV9uZXh0
ID0gc3RkOjpzdHJpbmcobV9pbnB1dCwgc3RhcnQsIHNpemUpOwotfQotCi1zdGQ6OnN0cmluZyBD
b21tYW5kVG9rZW5pemVyOjpuZXh0KCkKLXsKLSAgICBBU1NFUlQoaGFzTmV4dCgpKTsKLQotICAg
IHN0ZDo6c3RyaW5nIG9sZE5leHQgPSBtX25leHQ7Ci0gICAgcHVtcCgpOwotICAgIHJldHVybiBv
bGROZXh0OwotfQotCi1ib29sIENvbW1hbmRUb2tlbml6ZXI6Omhhc05leHQoKSBjb25zdAotewot
ICAgIHJldHVybiAhbV9uZXh0LmVtcHR5KCk7Ci19Ci0KLU5PX1JFVFVSTiBzdGF0aWMgdm9pZCBk
aWUoY29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0TGluZSkKLXsKLSAgICBmcHJpbnRmKHN0ZGVyciwg
IlVuZXhwZWN0ZWQgaW5wdXQgbGluZTogJXNcbiIsIGlucHV0TGluZS5jX3N0cigpKTsKLSAgICBl
eGl0KDEpOwotfQotCi1UZXN0Q29tbWFuZCBwYXJzZUlucHV0TGluZShjb25zdCBzdGQ6OnN0cmlu
ZyYgaW5wdXRMaW5lKQotewotICAgIFRlc3RDb21tYW5kIHJlc3VsdDsKLSAgICBDb21tYW5kVG9r
ZW5pemVyIHRva2VuaXplcihpbnB1dExpbmUpOwotICAgIGlmICghdG9rZW5pemVyLmhhc05leHQo
KSkKLSAgICAgICAgZGllKGlucHV0TGluZSk7Ci0KLSAgICBzdGQ6OnN0cmluZyBhcmcgPSB0b2tl
bml6ZXIubmV4dCgpOwotICAgIHJlc3VsdC5wYXRoT3JVUkwgPSBhcmc7Ci0gICAgd2hpbGUgKHRv
a2VuaXplci5oYXNOZXh0KCkpIHsKLSAgICAgICAgYXJnID0gdG9rZW5pemVyLm5leHQoKTsKLSAg
ICAgICAgaWYgKGFyZyA9PSAiLS10aW1lb3V0IikgewotICAgICAgICAgICAgc3RkOjpzdHJpbmcg
dGltZW91dFRva2VuID0gdG9rZW5pemVyLm5leHQoKTsKLSAgICAgICAgICAgIHJlc3VsdC50aW1l
b3V0ID0gYXRvaSh0aW1lb3V0VG9rZW4uY19zdHIoKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoYXJn
ID09ICItcCIgfHwgYXJnID09ICItLXBpeGVsLXRlc3QiKSB7Ci0gICAgICAgICAgICByZXN1bHQu
c2hvdWxkRHVtcFBpeGVscyA9IHRydWU7Ci0gICAgICAgICAgICBpZiAodG9rZW5pemVyLmhhc05l
eHQoKSkKLSAgICAgICAgICAgICAgICByZXN1bHQuZXhwZWN0ZWRQaXhlbEhhc2ggPSB0b2tlbml6
ZXIubmV4dCgpOwotICAgICAgICB9IGVsc2UgaWYgKGFyZyA9PSAiLS1kdW1wLWpzY29uc29sZWxv
Zy1pbi1zdGRlcnIiKQotICAgICAgICAgICAgcmVzdWx0LmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVy
ciA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKGFyZyA9PSBzdGQ6OnN0cmluZygiLS1hYnNvbHV0
ZVBhdGgiKSkKLSAgICAgICAgICAgIHJlc3VsdC5hYnNvbHV0ZVBhdGggPSB0b2tlbml6ZXIubmV4
dCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkaWUoaW5wdXRMaW5lKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE9w
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25z
LmNwcAkocmV2aXNpb24gMjY4MzY0KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlv
bnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNDAgKzI2LDgzIEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiVGVzdE9wdGlvbnMuaCIKIAorI2luY2x1ZGUgIlRlc3RGZWF0dXJl
cy5oIgogI2luY2x1ZGUgPGZzdHJlYW0+CiAjaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCi1zdGF0aWMgYm9vbCBwYXJzZUJvb2xlYW5UZXN0SGVhZGVy
VmFsdWUoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAidHJ1
ZSIpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICh2YWx1ZSA9PSAiZmFsc2UiKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBMT0dfRVJST1IoIkZvdW5kIHVuZXhwZWN0ZWQgdmFs
dWUgJyVzJyBmb3IgYm9vbGVhbiBvcHRpb24uIEV4cGVjdGVkICd0cnVlJyBvciAnZmFsc2UnLiIs
IHZhbHVlLmNfc3RyKCkpOwotICAgIHJldHVybiBmYWxzZTsKLX0KK25hbWVzcGFjZSBXVFIgewog
Ci1zdGF0aWMgYm9vbCBwYXRoQ29udGFpbnMoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCwg
Y29uc3QgY2hhciogc3Vic3RyaW5nKQorY29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3Ry
aW5nLCBUZXN0SGVhZGVyS2V5VHlwZT4mIFRlc3RPcHRpb25zOjprZXlUeXBlTWFwcGluZygpCiB7
Ci0gICAgU3RyaW5nIHBhdGgocGF0aE9yVVJMLmNfc3RyKCkpOwotICAgIHJldHVybiBwYXRoLmNv
bnRhaW5zKHN1YnN0cmluZyk7Ci19CisgICAgc3RhdGljIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6
OnN0cmluZywgVGVzdEhlYWRlcktleVR5cGU+IG1hcCB7CisgICAgICAgIHsgImFsbG93Q3Jvc3NP
cmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzIiwgVGVzdEhlYWRlcktleVR5cGU6
OkJvb2wgfSwKKyAgICAgICAgeyAiYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyIsIFRlc3RI
ZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImR1bXBKU0NvbnNvbGVMb2dJblN0ZEVy
ciIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUF0dGFjaG1l
bnRFbGVtZW50IiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxl
QmFja0ZvcndhcmRDYWNoZSIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsg
ImVuYWJsZUNvbG9yRmlsdGVyIiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAg
eyAiZW5hYmxlRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTG9hZCIsIFRlc3RIZWFkZXJLZXlUeXBlOjpC
b29sIH0sCisgICAgICAgIHsgImVuYWJsZUluc3BlY3RvckFkZGl0aW9ucyIsIFRlc3RIZWFkZXJL
ZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUludGVyc2VjdGlvbk9ic2VydmVyIiwg
VGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlS2V5Z2VuRWxlbWVu
dCIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZU1lbnVJdGVt
RWxlbWVudCIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZU1v
ZGVybk1lZGlhQ29udHJvbHMiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7
ICJlbmFibGVQb2ludGVyTG9jayIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAg
IHsgImxheWVyQmFja2VkV2ViVmlldyIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAg
ICAgIHsgInVzZUFjY2VsZXJhdGVkRHJhd2luZyIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0s
CisgICAgICAgIHsgInVzZUVwaGVtZXJhbFNlc3Npb24iLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9v
bCB9LAorCisgICAgICAgIHsgImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzIiwgVGVzdEhl
YWRlcktleVR5cGU6OlN0cmluZyB9LAorICAgICAgICB7ICJqc2NPcHRpb25zIiwgVGVzdEhlYWRl
cktleVR5cGU6OlN0cmluZyB9LAorICAgIH07CiAKLXN0YXRpYyBib29sIHNob3VsZER1bXBKU0Nv
bnNvbGVMb2dJblN0ZEVycihjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQotewotICAgIHJl
dHVybiBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvYmVhY29uIikgfHwg
cGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL2JlYWNvbiIpCi0gICAgICAg
IHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgwMC9jb3JzIikgfHwgcGF0
aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL2NvcnMiKQotICAgICAgICB8fCBw
YXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvZmV0Y2giKSB8fCBwYXRoQ29u
dGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMvZmV0Y2giKQotICAgICAgICB8fCBwYXRo
Q29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvc2VydmljZS13b3JrZXJzIikgfHwg
cGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3NlcnZpY2Utd29ya2VycyIp
Ci0gICAgICAgIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgwMC9zdHJl
YW1zL3dyaXRhYmxlLXN0cmVhbXMiKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxo
b3N0Ojk0NDMvc3RyZWFtcy93cml0YWJsZS1zdHJlYW1zIikKLSAgICAgICAgfHwgcGF0aENvbnRh
aW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo4ODAwL3N0cmVhbXMvcGlwaW5nIikgfHwgcGF0aENv
bnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3N0cmVhbXMvcGlwaW5nIikKLSAgICAg
ICAgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo4ODAwL3hociIpIHx8IHBh
dGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6OTQ0My94aHIiKQotICAgICAgICB8fCBw
YXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvd2VicnRjIikgfHwgcGF0aENv
bnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3dlYnJ0YyIpCi0gICAgICAgIHx8IHBh
dGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgwMC93ZWJzb2NrZXRzIikgfHwgcGF0
aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3dlYnNvY2tldHMiKTsKKyAgICBy
ZXR1cm4gbWFwOwogfQogCi1UZXN0T3B0aW9uczo6VGVzdE9wdGlvbnMoY29uc3Qgc3RkOjpzdHJp
bmcmIHBhdGhPclVSTCwgY29uc3Qgc3RkOjpzdHJpbmcmIGFic29sdXRlUGF0aCkKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIHNldFZhbHVlSWZTZXRJbk1hcChUJiB2YWx1ZVRvU2V0
LCBzdGQ6OnN0cmluZyBrZXksIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywg
VD4mIG1hcCkKIHsKLSAgICBjb25zdCBhdXRvJiBwYXRoID0gYWJzb2x1dGVQYXRoLmVtcHR5KCkg
PyBwYXRoT3JVUkwgOiBhYnNvbHV0ZVBhdGg7Ci0gICAgaWYgKHBhdGguZW1wdHkoKSkKKyAgICBh
dXRvIGl0ID0gbWFwLmZpbmQoa2V5KTsKKyAgICBpZiAoaXQgPT0gbWFwLmVuZCgpKQogICAgICAg
ICByZXR1cm47CisgICAgdmFsdWVUb1NldCA9IGl0LT5zZWNvbmQ7Cit9CiAKLSAgICBkdW1wSlND
b25zb2xlTG9nSW5TdGRFcnIgPSBzaG91bGREdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIocGF0aE9y
VVJMKTsKLQotICAgIHN0ZDo6c3RyaW5nIG9wdGlvbnM7Ci0gICAgc3RkOjppZnN0cmVhbSB0ZXN0
RmlsZShwYXRoLmRhdGEoKSk7Ci0gICAgaWYgKCF0ZXN0RmlsZS5nb29kKCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBnZXRsaW5lKHRlc3RGaWxlLCBvcHRpb25zKTsKLSAgICBzdGQ6OnN0cmluZyBi
ZWdpblN0cmluZygid2Via2l0LXRlc3QtcnVubmVyIFsgIik7Ci0gICAgc3RkOjpzdHJpbmcgZW5k
U3RyaW5nKCIgXSIpOwotICAgIHNpemVfdCBiZWdpbkxvY2F0aW9uID0gb3B0aW9ucy5maW5kKGJl
Z2luU3RyaW5nKTsKLSAgICBpZiAoYmVnaW5Mb2NhdGlvbiA9PSBzdGQ6OnN0cmluZzo6bnBvcykK
LSAgICAgICAgcmV0dXJuOwotICAgIHNpemVfdCBlbmRMb2NhdGlvbiA9IG9wdGlvbnMuZmluZChl
bmRTdHJpbmcsIGJlZ2luTG9jYXRpb24pOwotICAgIGlmIChlbmRMb2NhdGlvbiA9PSBzdGQ6OnN0
cmluZzo6bnBvcykgewotICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBmaW5kIGVuZCBvZiB0
ZXN0IGhlYWRlciBpbiAlcyIsIHBhdGguY19zdHIoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgc3RkOjpzdHJpbmcgcGFpclN0cmluZyA9IG9wdGlvbnMuc3Vic3RyKGJlZ2luTG9jYXRp
b24gKyBiZWdpblN0cmluZy5zaXplKCksIGVuZExvY2F0aW9uIC0gKGJlZ2luTG9jYXRpb24gKyBi
ZWdpblN0cmluZy5zaXplKCkpKTsKLSAgICBzaXplX3QgcGFpclN0YXJ0ID0gMDsKLSAgICB3aGls
ZSAocGFpclN0YXJ0IDwgcGFpclN0cmluZy5zaXplKCkpIHsKLSAgICAgICAgc2l6ZV90IHBhaXJF
bmQgPSBwYWlyU3RyaW5nLmZpbmQoIiAiLCBwYWlyU3RhcnQpOwotICAgICAgICBpZiAocGFpckVu
ZCA9PSBzdGQ6OnN0cmluZzo6bnBvcykKLSAgICAgICAgICAgIHBhaXJFbmQgPSBwYWlyU3RyaW5n
LnNpemUoKTsKLSAgICAgICAgc2l6ZV90IGVxdWFsc0xvY2F0aW9uID0gcGFpclN0cmluZy5maW5k
KCI9IiwgcGFpclN0YXJ0KTsKLSAgICAgICAgaWYgKGVxdWFsc0xvY2F0aW9uID09IHN0ZDo6c3Ry
aW5nOjpucG9zKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIk1hbGZvcm1lZCBvcHRpb24gaW4g
dGVzdCBoZWFkZXIgKGNvdWxkIG5vdCBmaW5kICc9JyBjaGFyYWN0ZXIpIGluICVzIiwgcGF0aC5j
X3N0cigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGF1dG8ga2V5
ID0gcGFpclN0cmluZy5zdWJzdHIocGFpclN0YXJ0LCBlcXVhbHNMb2NhdGlvbiAtIHBhaXJTdGFy
dCk7Ci0gICAgICAgIGF1dG8gdmFsdWUgPSBwYWlyU3RyaW5nLnN1YnN0cihlcXVhbHNMb2NhdGlv
biArIDEsIHBhaXJFbmQgLSAoZXF1YWxzTG9jYXRpb24gKyAxKSk7Ci0gICAgICAgIGlmIChrZXkg
PT0gImVuYWJsZUF0dGFjaG1lbnRFbGVtZW50IikKLSAgICAgICAgICAgIGVuYWJsZUF0dGFjaG1l
bnRFbGVtZW50ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAg
aWYgKGtleSA9PSAidXNlQWNjZWxlcmF0ZWREcmF3aW5nIikKLSAgICAgICAgICAgIHVzZUFjY2Vs
ZXJhdGVkRHJhd2luZyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAg
ICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiKQotICAgICAg
ICAgICAgZW5hYmxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVy
VmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInVzZUVwaGVtZXJhbFNlc3Np
b24iKQotICAgICAgICAgICAgdXNlRXBoZW1lcmFsU2Vzc2lvbiA9IHBhcnNlQm9vbGVhblRlc3RI
ZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlQmFja0Zv
cndhcmRDYWNoZSIpCi0gICAgICAgICAgICBlbmFibGVCYWNrRm9yd2FyZENhY2hlID0gcGFyc2VC
b29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJl
bmFibGVNZW51SXRlbUVsZW1lbnQiKQotICAgICAgICAgICAgZW5hYmxlTWVudUl0ZW1FbGVtZW50
ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAo
a2V5ID09ICJlbmFibGVLZXlnZW5FbGVtZW50IikKLSAgICAgICAgICAgIGVuYWJsZUtleWdlbkVs
ZW1lbnQgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNl
IGlmIChrZXkgPT0gImVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMiKQotICAgICAgICAgICAgZW5h
YmxlTW9kZXJuTWVkaWFDb250cm9scyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1
ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlUG9pbnRlckxvY2siKQotICAgICAg
ICAgICAgZW5hYmxlUG9pbnRlckxvY2sgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFs
dWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZURyYWdEZXN0aW5hdGlvbkFjdGlv
bkxvYWQiKQotICAgICAgICAgICAgZW5hYmxlRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTG9hZCA9IHBh
cnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9
PSAibGF5ZXJCYWNrZWRXZWJWaWV3IikKLSAgICAgICAgICAgIGxheWVyQmFja2VkV2ViVmlldyA9
IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtl
eSA9PSAiZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zIikKLSAgICAgICAgICAgIGVuYWJsZUluc3Bl
Y3RvckFkZGl0aW9ucyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAg
ICAgIGVsc2UgaWYgKGtleSA9PSAiZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIikKLSAgICAgICAg
ICAgIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1
ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiYWxsb3dDcm9zc09yaWdpblN1YnJl
c291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMiKQotICAgICAgICAgICAgYWxsb3dDcm9zc09yaWdp
blN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVy
VmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImludGVybmFsOnNlbGVjdGlv
bkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkIikKLSAgICAgICAgICAgIGVuYWJsZVNlbGVj
dGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXMgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUo
dmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUNvbG9yRmlsdGVyIikKLSAg
ICAgICAgICAgIGVuYWJsZUNvbG9yRmlsdGVyID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVl
KHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJqc2NPcHRpb25zIikKLSAgICAgICAg
ICAgIGpzY09wdGlvbnMgPSB2YWx1ZTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJhZGRpdGlv
bmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyIpCi0gICAgICAgICAgICBhZGRpdGlvbmFsU3VwcG9ydGVk
SW1hZ2VUeXBlcyA9IHZhbHVlOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImV4cGVyaW1lbnRh
bDpXZWJHUFVFbmFibGVkIikKLSAgICAgICAgICAgIGVuYWJsZVdlYkdQVSA9IHBhcnNlQm9vbGVh
blRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiaW50ZXJu
YWw6Q1NTTG9naWNhbEVuYWJsZWQiKQotICAgICAgICAgICAgZW5hYmxlQ1NTTG9naWNhbCA9IHBh
cnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9
PSAiaW50ZXJuYWw6TGluZUhlaWdodFVuaXRzRW5hYmxlZCIpCi0gICAgICAgICAgICBlbmFibGVM
aW5lSGVpZ2h0VW5pdHMgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAg
ICAgICBlbHNlIGlmIChrZXkgPT0gImV4cGVyaW1lbnRhbDpBZENsaWNrQXR0cmlidXRpb25FbmFi
bGVkIikKLSAgICAgICAgICAgIGFkQ2xpY2tBdHRyaWJ1dGlvbkVuYWJsZWQgPSBwYXJzZUJvb2xl
YW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImV4cGVy
aW1lbnRhbDpSZXNpemVPYnNlcnZlckVuYWJsZWQiKQotICAgICAgICAgICAgZW5hYmxlUmVzaXpl
T2JzZXJ2ZXIgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBl
bHNlIGlmIChrZXkgPT0gImV4cGVyaW1lbnRhbDpDU1NPTVZpZXdTbW9vdGhTY3JvbGxpbmdFbmFi
bGVkIikKLSAgICAgICAgICAgIGVuYWJsZUNTU09NVmlld1Ntb290aFNjcm9sbGluZyA9IHBhcnNl
Qm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAi
ZXhwZXJpbWVudGFsOkNvcmVNYXRoTUxFbmFibGVkIikKLSAgICAgICAgICAgIGVuYWJsZUNvcmVN
YXRoTUwgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNl
IGlmIChrZXkgPT0gImV4cGVyaW1lbnRhbDpSZXF1ZXN0SWRsZUNhbGxiYWNrRW5hYmxlZCIpCi0g
ICAgICAgICAgICBlbmFibGVSZXF1ZXN0SWRsZUNhbGxiYWNrID0gcGFyc2VCb29sZWFuVGVzdEhl
YWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJleHBlcmltZW50YWw6
QXN5bmNDbGlwYm9hcmRBUElFbmFibGVkIikKLSAgICAgICAgICAgIGVuYWJsZUFzeW5jQ2xpcGJv
YXJkQVBJID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxz
ZSBpZiAoa2V5ID09ICJpbnRlcm5hbDpMYXlvdXRGb3JtYXR0aW5nQ29udGV4dEludGVncmF0aW9u
RW5hYmxlZCIpCi0gICAgICAgICAgICBsYXlvdXRGb3JtYXR0aW5nQ29udGV4dEludGVncmF0aW9u
RW5hYmxlZCA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVs
c2UgaWYgKGtleSA9PSAiZXhwZXJpbWVudGFsOkFzcGVjdFJhdGlvT2ZJbWdGcm9tV2lkdGhBbmRI
ZWlnaHRFbmFibGVkIikKLSAgICAgICAgICAgIGVuYWJsZUFzcGVjdFJhdGlvT2ZJbWdGcm9tV2lk
dGhBbmRIZWlnaHQgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAg
ICBlbHNlIGlmIChrZXkgPT0gImFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMiKQotICAgICAg
ICAgICAgYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyA9IHBhcnNlQm9vbGVhblRlc3RIZWFk
ZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZXhwZXJpbWVudGFsOkNv
bnRhY3RQaWNrZXJBUElFbmFibGVkIikKLSAgICAgICAgICAgIGVuYWJsZUNvbnRhY3RQaWNrZXJB
UEkgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBwYWlyU3Rh
cnQgPSBwYWlyRW5kICsgMTsKLSAgICB9CitUZXN0T3B0aW9uczo6VGVzdE9wdGlvbnMoVGVzdEZl
YXR1cmVzIHRlc3RGZWF0dXJlcykKK3sKKyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoYWxsb3dDcm9z
c09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMsICJhbGxvd0Nyb3NzT3JpZ2lu
U3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscyIsIHRlc3RGZWF0dXJlcy5ib29sRmVhdHVy
ZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChhbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxz
LCAiYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyIsIHRlc3RGZWF0dXJlcy5ib29sRmVhdHVy
ZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIsICJk
dW1wSlNDb25zb2xlTG9nSW5TdGRFcnIiLCB0ZXN0RmVhdHVyZXMuYm9vbEZlYXR1cmVzKTsKKyAg
ICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlQXR0YWNobWVudEVsZW1lbnQsICJlbmFibGVBdHRh
Y2htZW50RWxlbWVudCIsIHRlc3RGZWF0dXJlcy5ib29sRmVhdHVyZXMpOworICAgIHNldFZhbHVl
SWZTZXRJbk1hcChlbmFibGVCYWNrRm9yd2FyZENhY2hlLCAiZW5hYmxlQmFja0ZvcndhcmRDYWNo
ZSIsIHRlc3RGZWF0dXJlcy5ib29sRmVhdHVyZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChl
bmFibGVDb2xvckZpbHRlciwgImVuYWJsZUNvbG9yRmlsdGVyIiwgdGVzdEZlYXR1cmVzLmJvb2xG
ZWF0dXJlcyk7CisgICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZURyYWdEZXN0aW5hdGlvbkFj
dGlvbkxvYWQsICJlbmFibGVEcmFnRGVzdGluYXRpb25BY3Rpb25Mb2FkIiwgdGVzdEZlYXR1cmVz
LmJvb2xGZWF0dXJlcyk7CisgICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUluc3BlY3RvckFk
ZGl0aW9ucywgImVuYWJsZUluc3BlY3RvckFkZGl0aW9ucyIsIHRlc3RGZWF0dXJlcy5ib29sRmVh
dHVyZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVJbnRlcnNlY3Rpb25PYnNlcnZl
ciwgImVuYWJsZUludGVyc2VjdGlvbk9ic2VydmVyIiwgdGVzdEZlYXR1cmVzLmJvb2xGZWF0dXJl
cyk7CisgICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUtleWdlbkVsZW1lbnQsICJlbmFibGVL
ZXlnZW5FbGVtZW50IiwgdGVzdEZlYXR1cmVzLmJvb2xGZWF0dXJlcyk7CisgICAgc2V0VmFsdWVJ
ZlNldEluTWFwKGVuYWJsZU1lbnVJdGVtRWxlbWVudCwgImVuYWJsZU1lbnVJdGVtRWxlbWVudCIs
IHRlc3RGZWF0dXJlcy5ib29sRmVhdHVyZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFi
bGVNb2Rlcm5NZWRpYUNvbnRyb2xzLCAiZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scyIsIHRlc3RG
ZWF0dXJlcy5ib29sRmVhdHVyZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVQb2lu
dGVyTG9jaywgImVuYWJsZVBvaW50ZXJMb2NrIiwgdGVzdEZlYXR1cmVzLmJvb2xGZWF0dXJlcyk7
CisgICAgc2V0VmFsdWVJZlNldEluTWFwKGxheWVyQmFja2VkV2ViVmlldywgImxheWVyQmFja2Vk
V2ViVmlldyIsIHRlc3RGZWF0dXJlcy5ib29sRmVhdHVyZXMpOworICAgIHNldFZhbHVlSWZTZXRJ
bk1hcCh1c2VBY2NlbGVyYXRlZERyYXdpbmcsICJ1c2VBY2NlbGVyYXRlZERyYXdpbmciLCB0ZXN0
RmVhdHVyZXMuYm9vbEZlYXR1cmVzKTsKKyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAodXNlRXBoZW1l
cmFsU2Vzc2lvbiwgInVzZUVwaGVtZXJhbFNlc3Npb24iLCB0ZXN0RmVhdHVyZXMuYm9vbEZlYXR1
cmVzKTsKKworICAgIHNldFZhbHVlSWZTZXRJbk1hcChhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VU
eXBlcywgImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzIiwgdGVzdEZlYXR1cmVzLnN0cmlu
Z0ZlYXR1cmVzKTsKKyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoanNjT3B0aW9ucywgImpzY09wdGlv
bnMiLCB0ZXN0RmVhdHVyZXMuc3RyaW5nRmVhdHVyZXMpOworCisgICAgc2V0VmFsdWVJZlNldElu
TWFwKGVuYWJsZUNTU0xvZ2ljYWwsICJDU1NMb2dpY2FsRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5p
bnRlcm5hbERlYnVnRmVhdHVyZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVMaW5l
SGVpZ2h0VW5pdHMsICJMaW5lSGVpZ2h0VW5pdHNFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmludGVy
bmFsRGVidWdGZWF0dXJlcyk7CisgICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZVNlbGVjdGlv
bkFjcm9zc1NoYWRvd0JvdW5kYXJpZXMsICJzZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVz
RW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5pbnRlcm5hbERlYnVnRmVhdHVyZXMpOworICAgIHNldFZh
bHVlSWZTZXRJbk1hcChsYXlvdXRGb3JtYXR0aW5nQ29udGV4dEludGVncmF0aW9uRW5hYmxlZCwg
IkxheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25FbmFibGVkIiwgdGVzdEZlYXR1cmVz
LmludGVybmFsRGVidWdGZWF0dXJlcyk7CisKKyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoYWRDbGlj
a0F0dHJpYnV0aW9uRW5hYmxlZCwgIkFkQ2xpY2tBdHRyaWJ1dGlvbkVuYWJsZWQiLCB0ZXN0RmVh
dHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFi
bGVBc3BlY3RSYXRpb09mSW1nRnJvbVdpZHRoQW5kSGVpZ2h0LCAiQXNwZWN0UmF0aW9PZkltZ0Zy
b21XaWR0aEFuZEhlaWdodEVuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVy
ZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVBc3luY0NsaXBib2FyZEFQSSwgIkFz
eW5jQ2xpcGJvYXJkQVBJRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJl
cyk7CisgICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUNTU09NVmlld1Ntb290aFNjcm9sbGlu
ZywgIkNTU09NVmlld1Ntb290aFNjcm9sbGluZ0VuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuZXhwZXJp
bWVudGFsRmVhdHVyZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVDb250YWN0UGlj
a2VyQVBJLCAiQ29udGFjdFBpY2tlckFQSUVuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuZXhwZXJpbWVu
dGFsRmVhdHVyZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVDb3JlTWF0aE1MLCAi
Q29yZU1hdGhNTEVuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMpOwor
ICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVSZXF1ZXN0SWRsZUNhbGxiYWNrLCAiUmVxdWVz
dElkbGVDYWxsYmFja0VuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMp
OworICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVSZXNpemVPYnNlcnZlciwgIlJlc2l6ZU9i
c2VydmVyRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcyk7CisgICAg
c2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZVdlYkdQVSwgIldlYkdQVUVuYWJsZWQiLCB0ZXN0RmVh
dHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMpOwogfQogCiBib29sIFRlc3RPcHRpb25zOjp3ZWJW
aWV3SXNDb21wYXRpYmxlV2l0aE9wdGlvbnMoY29uc3QgVGVzdE9wdGlvbnMmIG90aGVyKSBjb25z
dApAQCAtMTY3LDMgKzExMCw1IEBAIGJvb2wgVGVzdE9wdGlvbnM6OndlYlZpZXdJc0NvbXBhdGli
bGVXaXQKICAgICByZXR1cm4gb3RoZXIubGF5ZXJCYWNrZWRXZWJWaWV3ID09IGxheWVyQmFja2Vk
V2ViVmlldwogICAgICAgICAmJiBvdGhlci5qc2NPcHRpb25zID09IGpzY09wdGlvbnM7CiB9CisK
K30KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25zLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlvbnMuaAkocmV2aXNpb24gMjY4MzY0KQor
KysgVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAt
MjUsNyArMjUsMTEgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJUZXN0RmVhdHVyZXMu
aCIKICNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKworbmFtZXNw
YWNlIFdUUiB7CiAKIHN0cnVjdCBUZXN0T3B0aW9ucyB7CiAgICAgYm9vbCBlbmFibGVBdHRhY2ht
ZW50RWxlbWVudCB7IGZhbHNlIH07CkBAIC02MSw2ICs2NSwxMSBAQCBzdHJ1Y3QgVGVzdE9wdGlv
bnMgewogICAgIHN0ZDo6c3RyaW5nIGpzY09wdGlvbnM7CiAgICAgc3RkOjpzdHJpbmcgYWRkaXRp
b25hbFN1cHBvcnRlZEltYWdlVHlwZXM7CiAKLSAgICBUZXN0T3B0aW9ucyhjb25zdCBzdGQ6OnN0
cmluZyYgcGF0aE9yVVJMLCBjb25zdCBzdGQ6OnN0cmluZyYgYWJzb2x1dGVQYXRoKTsKKyAgICBl
eHBsaWNpdCBUZXN0T3B0aW9ucyhUZXN0RmVhdHVyZXMpOwogICAgIGJvb2wgd2ViVmlld0lzQ29t
cGF0aWJsZVdpdGhPcHRpb25zKGNvbnN0IFRlc3RPcHRpb25zJikgY29uc3Q7CisgICAgCisgICAg
c3RhdGljIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgVGVzdEhlYWRlcktl
eVR5cGU+JiBrZXlUeXBlTWFwcGluZygpOwogfTsKKworfQorCkluZGV4OiBUb29scy9EdW1wUmVu
ZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDI2ODM2NCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1
bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTEwOSwxMSArMTA5LDEyIEBACiAJCTVEQjlBQzlFMEY3MjJDMzYwMDY4NDY0MSAvKiBXZWJLaXRX
ZWlnaHRXYXRjaGVyNzAwLnR0ZiBpbiBDb3B5IEZvbnQgRmlsZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzc1RjA5NzcwREFDM0NCNjAwQzhCNEU1IC8qIFdlYktpdFdlaWdo
dFdhdGNoZXI3MDAudHRmICovOyB9OwogCQk1REI5QUM5RjBGNzIyQzM2MDA2ODQ2NDEgLyogV2Vi
S2l0V2VpZ2h0V2F0Y2hlcjgwMC50dGYgaW4gQ29weSBGb250IEZpbGVzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3NUYwOTc4MERBQzNDQjYwMEM4QjRFNSAvKiBXZWJLaXRX
ZWlnaHRXYXRjaGVyODAwLnR0ZiAqLzsgfTsKIAkJNURCOUFDQTAwRjcyMkMzNjAwNjg0NjQxIC8q
IFdlYktpdFdlaWdodFdhdGNoZXI5MDAudHRmIGluIENvcHkgRm9udCBGaWxlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzVGMDk3OTBEQUMzQ0I2MDBDOEI0RTUgLyogV2Vi
S2l0V2VpZ2h0V2F0Y2hlcjkwMC50dGYgKi87IH07CisJCTdDRkY5QkJGMjUzM0JCMjQwMDA4MDA5
RiAvKiBUZXN0RmVhdHVyZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0NGRjlCQkUyNTMzQkIyNDAwMDgwMDlGIC8qIFRlc3RGZWF0dXJlcy5jcHAg
Ki87IH07CisJCTdDRkY5QkMyMjUzM0JDMTYwMDA4MDA5RiAvKiBUZXN0Q29tbWFuZC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0ZGOUJDMTI1MzNC
QzE2MDAwODAwOUYgLyogVGVzdENvbW1hbmQuY3BwICovOyB9OwogCQk4MDA0NUFFRTE0NzcxOEU3
MDA4MjkwQTggLyogQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MDA0NUFFQzE0NzcxOEU3MDA4
MjkwQTggLyogQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0gKi87IH07CiAJCTg0
NjVFMkM3MEZGQThERjIwMDNCODM0MiAvKiBQaXhlbER1bXBTdXBwb3J0LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NjVFMkM2MEZGQThERjIwMDNC
ODM0MiAvKiBQaXhlbER1bXBTdXBwb3J0LmNwcCAqLzsgfTsKIAkJOTNDNzg4MjYyNTBDNkQzQTAw
QzBBQTI0IC8qIFJlZnRlc3RGdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTNDNzg4MjQyNTBDNkQzOTAwQzBBQTI0IC8qIFJlZnRlc3RG
dW5jdGlvbnMuY3BwICovOyB9OwogCQk5M0M3ODgyRTI1MEM3MTcyMDBDMEFBMjQgLyogSlNCYXNp
Y3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTND
Nzg4MjkyNTBDNzEzNDAwQzBBQTI0IC8qIEpTQmFzaWNzLmNwcCAqLzsgfTsKLQkJOTgzMEYzMUYx
NUM4MTE4MTAwNUFCMjA2IC8qIER1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk4MzBGMzFFMTVDODExODEwMDVBQjIw
NiAvKiBEdW1wUmVuZGVyVHJlZUNvbW1vbi5jcHAgKi87IH07CiAJCUExMTU4RDU4MTg5Mjc0MEMw
MDg4QzE3QiAvKiBEdW1wUmVuZGVyVHJlZUJyb3dzZXJWaWV3Lm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTExNThENTYxODkyNzNFQjAwODhDMTdCIC8q
IER1bXBSZW5kZXJUcmVlQnJvd3NlclZpZXcubW0gKi87IH07CiAJCUExMTU4RDU5MTg5Mjc0MzYw
MDg4QzE3QiAvKiBQaXhlbER1bXBTdXBwb3J0SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTExNThENTcxODkyNzNFQjAwODhDMTdCIC8qIFBpeGVs
RHVtcFN1cHBvcnRJT1MubW0gKi87IH07CiAJCUExMzRFNTMxMTg4RkMyNzAwMDkwMUQwNiAvKiBE
dW1wUmVuZGVyVHJlZU1haW4ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMTM0RTUyRjE4OEZDMjcwMDA5MDFEMDYgLyogRHVtcFJlbmRlclRyZWVNYWlu
Lm1tICovOyB9OwpAQCAtMzMwLDYgKzMzMSwxMCBAQAogCQk1M0NCQjgzMTEzNEU0MkYzMDAxQ0U2
QTQgLyogQ3ljbGljUmVkdW5kYW5jeUNoZWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEN5Y2xpY1JlZHVuZGFuY3lDaGVjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1REU4QUU0MzEzQTJDMTU4MDBENkEzN0QgLyogbGliV2ViQ29yZVRlc3RTdXBwb3J0LmR5
bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gImNv
bXBpbGVkLm1hY2gtby5keWxpYiI7IHBhdGggPSBsaWJXZWJDb3JlVGVzdFN1cHBvcnQuZHlsaWI7
IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTdDQkJDMzIyMURERkNGOUEw
MDc4NkI5RCAvKiBUZXN0T3B0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBUZXN0T3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Q0ZGOUJCRDI1
MzNCQjI0MDAwODAwOUYgLyogVGVzdEZlYXR1cmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRlc3RGZWF0
dXJlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Q0ZGOUJCRTI1MzNCQjI0MDAw
ODAwOUYgLyogVGVzdEZlYXR1cmVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRlc3RGZWF0dXJl
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDRkY5QkMwMjUzM0JDMTYwMDA4
MDA5RiAvKiBUZXN0Q29tbWFuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXN0Q29tbWFuZC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Q0ZGOUJDMTI1MzNCQzE2MDAwODAwOUYgLyogVGVz
dENvbW1hbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGVzdENvbW1hbmQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk4MDA0NUFFQjE0NzcxOEU3MDA4MjkwQTggLyogQWNjZXNz
aWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIuaDsgcGF0aCA9IG1hYy9BY2Nl
c3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4MDA0NUFFQzE0NzcxOEU3MDA4MjkwQTggLyogQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlv
bkhhbmRsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBBY2Nl
c3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbTsgcGF0aCA9IG1hYy9BY2Nlc3NpYmlsaXR5
Tm90aWZpY2F0aW9uSGFuZGxlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQ2
NUUyQzYwRkZBOERGMjAwM0I4MzQyIC8qIFBpeGVsRHVtcFN1cHBvcnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBpeGVsRHVtcFN1cHBvcnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzM5LDcgKzM0NCw2IEBACiAJCTkzQzc4ODI1MjUwQzZE
MzkwMEMwQUEyNCAvKiBSZWZ0ZXN0RnVuY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlZnRlc3RGdW5jdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTNDNzg4MjkyNTBDNzEzNDAwQzBBQTI0IC8qIEpTQmFzaWNzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTQmFzaWNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNDNzg4
MkIyNTBDNzEzNDAwQzBBQTI0IC8qIEpTQmFzaWNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQmFzaWNz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk4MzBGMzFFMTVDODExODEwMDVBQjIw
NiAvKiBEdW1wUmVuZGVyVHJlZUNvbW1vbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBEdW1wUmVuZGVyVHJlZUNvbW1vbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUExMTAzQjVCMTg5MjQ5OEYwMDczOEM4NyAvKiBMYXlvdXRUZXN0SGVscGVyLnhj
Y29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dC54Y2NvbmZpZzsgbmFtZSA9IExheW91dFRlc3RIZWxwZXIueGNjb25maWc7IHBhdGggPSBt
YWMvQ29uZmlndXJhdGlvbnMvTGF5b3V0VGVzdEhlbHBlci54Y2NvbmZpZzsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTExNThENTUxODkyNzNFQjAwODhDMTdCIC8qIER1bXBSZW5kZXJU
cmVlQnJvd3NlclZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRHVtcFJlbmRlclRyZWVCcm93c2VyVmll
dy5oOyBwYXRoID0gaW9zL0R1bXBSZW5kZXJUcmVlQnJvd3NlclZpZXcuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTExNThENTYxODkyNzNFQjAwODhDMTdCIC8qIER1bXBSZW5kZXJU
cmVlQnJvd3NlclZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBEdW1wUmVuZGVyVHJlZUJy
b3dzZXJWaWV3Lm1tOyBwYXRoID0gaW9zL0R1bXBSZW5kZXJUcmVlQnJvd3NlclZpZXcubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00OTksNyArNTAzLDYgQEAKIAkJCQlBMTM0RTUz
NDE4OTA1RTZDMDA5MDFEMDYgLyogY29uZmlnLmggKi8sCiAJCQkJMUEyRkI4NEMxNzhDODA5MjAw
NTlGRDk2IC8qIERlZmF1bHRQb2xpY3lEZWxlZ2F0ZS5oICovLAogCQkJCTFBMkZCODREMTc4Qzgw
OTMwMDU5RkQ5NiAvKiBEZWZhdWx0UG9saWN5RGVsZWdhdGUubW0gKi8sCi0JCQkJOTgzMEYzMUUx
NUM4MTE4MTAwNUFCMjA2IC8qIER1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcCAqLywKIAkJCQkzMkE3
MEFBQjAzNzA1RTFGMDBDOTE3ODMgLyogRHVtcFJlbmRlclRyZWVQcmVmaXguaCAqLywKIAkJCQkx
NDIyQTI3NTBBRjZGNEJEMDBFMUE4ODMgLyogRGVsZWdhdGVzICovLAogCQkJCTE0MjJBMjY5MEFG
NkY0NTIwMEUxQTg4MyAvKiBDb250cm9sbGVycyAqLywKQEAgLTczMCw2ICs3MzMsMTAgQEAKIAkJ
CQkzMTQ4QTA1NjFFNkY5MEY0MDBEM0IzMTYgLyogSU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24u
aCAqLywKIAkJCQk5M0M3ODgyNDI1MEM2RDM5MDBDMEFBMjQgLyogUmVmdGVzdEZ1bmN0aW9ucy5j
cHAgKi8sCiAJCQkJOTNDNzg4MjUyNTBDNkQzOTAwQzBBQTI0IC8qIFJlZnRlc3RGdW5jdGlvbnMu
aCAqLywKKwkJCQk3Q0ZGOUJDMTI1MzNCQzE2MDAwODAwOUYgLyogVGVzdENvbW1hbmQuY3BwICov
LAorCQkJCTdDRkY5QkMwMjUzM0JDMTYwMDA4MDA5RiAvKiBUZXN0Q29tbWFuZC5oICovLAorCQkJ
CTdDRkY5QkJFMjUzM0JCMjQwMDA4MDA5RiAvKiBUZXN0RmVhdHVyZXMuY3BwICovLAorCQkJCTdD
RkY5QkJEMjUzM0JCMjQwMDA4MDA5RiAvKiBUZXN0RmVhdHVyZXMuaCAqLywKIAkJCSk7CiAJCQlu
YW1lID0gVGVzdFJ1bm5lclNoYXJlZDsKIAkJCXBhdGggPSAuLi9UZXN0UnVubmVyU2hhcmVkOwpA
QCAtMTIxNiw3ICsxMjIzLDYgQEAKIAkJCQkxQTJGQjg0RjE3OEM4MDkzMDA1OUZEOTYgLyogRGVm
YXVsdFBvbGljeURlbGVnYXRlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBMThDNDcwQzlCNUI5
NDAwMTE0MzY5IC8qIER1bXBSZW5kZXJUcmVlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTExNThE
NTgxODkyNzQwQzAwODhDMTdCIC8qIER1bXBSZW5kZXJUcmVlQnJvd3NlclZpZXcubW0gaW4gU291
cmNlcyAqLywKLQkJCQk5ODMwRjMxRjE1QzgxMTgxMDA1QUIyMDYgLyogRHVtcFJlbmRlclRyZWVD
b21tb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBMThCN0IwQzlCMDhGMTAwMTE0MzY5IC8q
IER1bXBSZW5kZXJUcmVlRHJhZ2dpbmdJbmZvLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQThENzlD
RUIwRkMyOEIyQzAwNEFDOEZFIC8qIER1bXBSZW5kZXJUcmVlRmlsZURyYWdnaW5nU291cmNlLm0g
aW4gU291cmNlcyAqLywKIAkJCQlBOEI5MUFEQTBDRjNCMzJGMDA4RjkxRkYgLyogRHVtcFJlbmRl
clRyZWVQYXN0ZWJvYXJkLm1tIGluIFNvdXJjZXMgKi8sCkBAIC0xMjQ5LDYgKzEyNTUsOCBAQAog
CQkJCUY0MDEwQjdCMjREQTIwMUYwMEE4NzZFMiAvKiBQb3NlQXNDbGFzcy5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTkzQzc4ODI2MjUwQzZEM0EwMEMwQUEyNCAvKiBSZWZ0ZXN0RnVuY3Rpb25zLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUJDQTE4QjY4MEM5QjA4QzIwMDExNDM2OSAvKiBSZXNvdXJj
ZUxvYWREZWxlZ2F0ZS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTdDRkY5QkMyMjUzM0JDMTYwMDA4
MDA5RiAvKiBUZXN0Q29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3Q0ZGOUJCRjI1MzNC
QjI0MDAwODAwOUYgLyogVGVzdEZlYXR1cmVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEzMEEy
MUY4MjA1MUQ4QzQwMDA4RkY0MiAvKiBUZXN0T3B0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCQzAxMzFEQTBDOTc3MjAxMDA4NzMxN0QgLyogVGVzdFJ1bm5lci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCQ0ExOEIyNDBDOUIwMTRCMDAxMTQzNjkgLyogVGVzdFJ1bm5lck1hYy5tbSBpbiBT
b3VyY2VzICovLApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVl
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJl
ZS5tbQkocmV2aXNpb24gMjY4MzY0KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBS
ZW5kZXJUcmVlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw4IEBACiAjaW1wb3J0ICJQ
b2xpY3lEZWxlZ2F0ZS5oIgogI2ltcG9ydCAiUG9zZUFzQ2xhc3MuaCIKICNpbXBvcnQgIlJlc291
cmNlTG9hZERlbGVnYXRlLmgiCisjaW1wb3J0ICJUZXN0Q29tbWFuZC5oIgorI2ltcG9ydCAiVGVz
dEZlYXR1cmVzLmgiCiAjaW1wb3J0ICJUZXN0T3B0aW9ucy5oIgogI2ltcG9ydCAiVGVzdFJ1bm5l
ci5oIgogI2ltcG9ydCAiVUlEZWxlZ2F0ZS5oIgpAQCAtMTg5LDcgKzE5MSw3IEBAIHZvbGF0aWxl
IGJvb2wgZG9uZTsKIE5hdmlnYXRpb25Db250cm9sbGVyKiBnTmF2aWdhdGlvbkNvbnRyb2xsZXIg
PSBudWxscHRyOwogUmVmUHRyPFRlc3RSdW5uZXI+IGdUZXN0UnVubmVyOwogCi1PcHRpb25hbDxU
ZXN0T3B0aW9ucz4gbWFpbkZyYW1lVGVzdE9wdGlvbnM7CitPcHRpb25hbDxXVFI6OlRlc3RPcHRp
b25zPiBtYWluRnJhbWVUZXN0T3B0aW9uczsKIFdlYkZyYW1lICptYWluRnJhbWUgPSBuaWw7CiAv
LyBUaGlzIGlzIHRoZSB0b3Btb3N0IGZyYW1lIHRoYXQgaXMgbG9hZGluZywgZHVyaW5nIGEgZ2l2
ZW4gbG9hZCwgb3IgbmlsIHdoZW4gbm8gbG9hZCBpcyAKIC8vIGluIHByb2dyZXNzLiAgVXN1YWxs
eSB0aGlzIGlzIHRoZSBzYW1lIGFzIHRoZSBtYWluIGZyYW1lLCBidXQgbm90IGFsd2F5cy4gIElu
IHRoZSBjYXNlCkBAIC05NjYsNyArOTY4LDcgQEAgc3RhdGljIHZvaWQgcmVzZXRXZWJQcmVmZXJl
bmNlc1RvQ29uc2lzdAogICAgIFtXZWJQcmVmZXJlbmNlcyBfc2V0Q3VycmVudE5ldHdvcmtMb2Fk
ZXJTZXNzaW9uQ29va2llQWNjZXB0UG9saWN5Ok5TSFRUUENvb2tpZUFjY2VwdFBvbGljeU9ubHlG
cm9tTWFpbkRvY3VtZW50RG9tYWluXTsKIH0KIAotc3RhdGljIHZvaWQgc2V0V2ViUHJlZmVyZW5j
ZXNGb3JUZXN0T3B0aW9ucyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucykKK3N0YXRpYyB2b2lk
IHNldFdlYlByZWZlcmVuY2VzRm9yVGVzdE9wdGlvbnMoY29uc3QgV1RSOjpUZXN0T3B0aW9ucyYg
b3B0aW9ucykKIHsKICAgICBXZWJQcmVmZXJlbmNlcyAqcHJlZmVyZW5jZXMgPSBbV2ViUHJlZmVy
ZW5jZXMgc3RhbmRhcmRQcmVmZXJlbmNlc107CiAKQEAgLTE4MTYsNyArMTgxOCw3IEBAIHN0YXRp
YyBib29sIHNob3VsZFVzZUVwaGVtZXJhbFNlc3Npb24oY28KICAgICByZXR1cm4gc3Ryc3RyKHBh
dGhPclVSTCwgInczYy9JbmRleGVkREItcHJpdmF0ZS1icm93c2luZyIpOwogfQogCi1zdGF0aWMg
dm9pZCBzZXRKU0NPcHRpb25zKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKQorc3RhdGljIHZv
aWQgc2V0SlNDT3B0aW9ucyhjb25zdCBXVFI6OlRlc3RPcHRpb25zJiBvcHRpb25zKQogewogICAg
IHN0YXRpYyBXVEY6OlN0cmluZ0J1aWxkZXIgc2F2ZWRPcHRpb25zOwogCkBAIC0xODMyLDcgKzE4
MzQsNyBAQCBzdGF0aWMgdm9pZCBzZXRKU0NPcHRpb25zKGNvbnN0IFRlc3RPcHRpCiB9CiAKIGVu
dW0gY2xhc3MgUmVzZXRUaW1lIHsgQmVmb3JlVGVzdCwgQWZ0ZXJUZXN0IH07Ci1zdGF0aWMgdm9p
ZCByZXNldFdlYlZpZXdUb0NvbnNpc3RlbnRTdGF0ZShjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9u
cywgUmVzZXRUaW1lIHJlc2V0VGltZSkKK3N0YXRpYyB2b2lkIHJlc2V0V2ViVmlld1RvQ29uc2lz
dGVudFN0YXRlKGNvbnN0IFdUUjo6VGVzdE9wdGlvbnMmIG9wdGlvbnMsIFJlc2V0VGltZSByZXNl
dFRpbWUpCiB7CiAgICAgc2V0SlNDT3B0aW9ucyhvcHRpb25zKTsKIApAQCAtMTk2NywxMSArMTk2
OSwyMCBAQCBzdGF0aWMgTlNVUkwgKmNvbXB1dGVUZXN0VVJMKE5TU3RyaW5nICpwCiAgICAgcmV0
dXJuIFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6YWJzb2x1dGVQYXRoXTsKIH0KIAorV1RSOjpUZXN0
T3B0aW9ucyB0ZXN0T3B0aW9uc0ZvclRlc3QoY29uc3QgV1RSOjpUZXN0Q29tbWFuZCYgY29tbWFu
ZCkKK3sKKyAgICBXVFI6OlRlc3RGZWF0dXJlcyBmZWF0dXJlczsKKyAgICBXVFI6Om1lcmdlKGZl
YXR1cmVzLCBXVFI6OmhhcmRjb2RlZEZlYXR1cmVzQmFzZWRPblBhdGhGb3JUZXN0KGNvbW1hbmQp
KTsKKyAgICBXVFI6Om1lcmdlKGZlYXR1cmVzLCBXVFI6OmZlYXR1cmVEZWZhdWx0c0Zyb21UZXN0
SGVhZGVyRm9yVGVzdChjb21tYW5kLCBXVFI6OlRlc3RPcHRpb25zOjprZXlUeXBlTWFwcGluZygp
KSk7CisKKyAgICByZXR1cm4gV1RSOjpUZXN0T3B0aW9ucyB7IFdURk1vdmUoZmVhdHVyZXMpIH07
Cit9CisKIHN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiBpbnB1dExpbmUpCiB7CiAg
ICAgQVNTRVJUKCFpbnB1dExpbmUuZW1wdHkoKSk7CiAKLSAgICBUZXN0Q29tbWFuZCBjb21tYW5k
ID0gcGFyc2VJbnB1dExpbmUoaW5wdXRMaW5lKTsKKyAgICBhdXRvIGNvbW1hbmQgPSBXVFI6OnBh
cnNlSW5wdXRMaW5lKGlucHV0TGluZSk7CiAgICAgY29uc3Qgc3RyaW5nJiBwYXRoT3JVUkwgPSBj
b21tYW5kLnBhdGhPclVSTDsKICAgICBkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QgPSBjb21tYW5k
LnNob3VsZER1bXBQaXhlbHMgfHwgZHVtcFBpeGVsc0ZvckFsbFRlc3RzOwogCkBAIC0xOTkzLDcg
KzIwMDQsNyBAQCBzdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IHN0cmluZyYgaW5wdXRMCiAgICAg
YXV0byBtZXNzYWdlID0gbWFrZVN0cmluZygiQ1JBU0hJTkcgVEVTVDogIiwgdGVzdFBhdGguVVRG
OFN0cmluZyk7CiAgICAgV1RGOjpzZXRDcmFzaExvZ01lc3NhZ2UobWVzc2FnZS51dGY4KCkuZGF0
YSgpKTsKIAotICAgIFRlc3RPcHRpb25zIG9wdGlvbnMgeyBbdXJsIGlzRmlsZVVSTF0gPyBbdXJs
IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbl0gOiBwYXRoT3JVUkwsIGNvbW1hbmQuYWJzb2x1dGVQ
YXRoIH07CisgICAgYXV0byBvcHRpb25zID0gdGVzdE9wdGlvbnNGb3JUZXN0KGNvbW1hbmQpOwog
CiAgICAgaWYgKCFtYWluRnJhbWVUZXN0T3B0aW9ucyB8fCAhb3B0aW9ucy53ZWJWaWV3SXNDb21w
YXRpYmxlV2l0aE9wdGlvbnMobWFpbkZyYW1lVGVzdE9wdGlvbnMudmFsdWUoKSkpIHsKICAgICAg
ICAgaWYgKG1haW5GcmFtZSkKQEAgLTIwMDYsNyArMjAxNyw3IEBAIHN0YXRpYyB2b2lkIHJ1blRl
c3QoY29uc3Qgc3RyaW5nJiBpbnB1dEwKICAgICBjb25zdCBjaGFyKiB0ZXN0VVJMKFtbdXJsIGFi
c29sdXRlU3RyaW5nXSBVVEY4U3RyaW5nXSk7CiAgICAgZ1Rlc3RSdW5uZXIgPSBUZXN0UnVubmVy
OjpjcmVhdGUodGVzdFVSTCwgY29tbWFuZC5leHBlY3RlZFBpeGVsSGFzaCk7CiAgICAgZ1Rlc3RS
dW5uZXItPnNldEFsbG93ZWRIb3N0cyhhbGxvd2VkSG9zdHMpOwotICAgIGdUZXN0UnVubmVyLT5z
ZXRDdXN0b21UaW1lb3V0KGNvbW1hbmQudGltZW91dCk7CisgICAgZ1Rlc3RSdW5uZXItPnNldEN1
c3RvbVRpbWVvdXQoY29tbWFuZC50aW1lb3V0Lm1pbGxpc2Vjb25kcygpKTsKICAgICBnVGVzdFJ1
bm5lci0+c2V0RHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKGNvbW1hbmQuZHVtcEpTQ29uc29sZUxv
Z0luU3RkRXJyIHx8IG9wdGlvbnMuZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKTsKIAogICAgIHJl
c2V0V2ViVmlld1RvQ29uc2lzdGVudFN0YXRlKG9wdGlvbnMsIFJlc2V0VGltZTo6QmVmb3JlVGVz
dCk7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVUlEZWxlZ2F0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9VSURlbGVnYXRlLmgJKHJldmlzaW9uIDI2
ODM2NCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9VSURlbGVnYXRlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3LDYgKzQ3LDYgQEAgQGludGVyZmFjZSBVSURlbGVnYXRlIDogTlNPYmplY3Qg
PFdlYlVJRAogLSAodm9pZClyZXNldFdpbmRvd09yaWdpbjsKIC0gKHZvaWQpZGlkU2V0TW9ja0dl
b2xvY2F0aW9uUGVybWlzc2lvbjsKIC0gKGludCludW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBl
cm1pc3Npb25SZXF1ZXN0czsKLS0gKHZvaWQpcmVzZXRUb0NvbnNpc3RlbnRTdGF0ZUJlZm9yZVRl
c3Rpbmc6KGNvbnN0IFRlc3RPcHRpb25zJilvcHRpb25zOworLSAodm9pZClyZXNldFRvQ29uc2lz
dGVudFN0YXRlQmVmb3JlVGVzdGluZzooY29uc3QgV1RSOjpUZXN0T3B0aW9ucyYpb3B0aW9uczsK
IAogQGVuZApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1VJRGVsZWdhdGUubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1VJRGVsZWdhdGUubW0JKHJldmlz
aW9uIDI2ODM2NCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9VSURlbGVnYXRlLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIC0gKHZvaWQpcmVzZXRXaW5kb3dPcmlnaW4K
ICAgICB3aW5kb3dPcmlnaW4gPSBOU1plcm9Qb2ludDsKIH0KIAotLSAodm9pZClyZXNldFRvQ29u
c2lzdGVudFN0YXRlQmVmb3JlVGVzdGluZzooY29uc3QgVGVzdE9wdGlvbnMmKW9wdGlvbnMKKy0g
KHZvaWQpcmVzZXRUb0NvbnNpc3RlbnRTdGF0ZUJlZm9yZVRlc3Rpbmc6KGNvbnN0IFdUUjo6VGVz
dE9wdGlvbnMmKW9wdGlvbnMKIHsKICAgICBtX2VuYWJsZURyYWdEZXN0aW5hdGlvbkFjdGlvbkxv
YWQgPSBvcHRpb25zLmVuYWJsZURyYWdEZXN0aW5hdGlvbkFjdGlvbkxvYWQ7CiB9CkluZGV4OiBU
b29scy9UZXN0UnVubmVyU2hhcmVkL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1Rlc3RSdW5uZXJTaGFyZWQvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI2ODM2NCkKKysrIFRv
b2xzL1Rlc3RSdW5uZXJTaGFyZWQvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTcs
NiArNyw4IEBAIGZpbGUoTUFLRV9ESVJFQ1RPUlkgJHtUZXN0UnVubmVyU2hhcmVkX0QKIAogc2V0
KFRlc3RSdW5uZXJTaGFyZWRfU09VUkNFUwogICAgIFJlZnRlc3RGdW5jdGlvbnMuY3BwCisgICAg
VGVzdENvbW1hbmQuY3BwCisgICAgVGVzdEZlYXR1cmVzLmNwcAogCiAgICAgQmluZGluZ3MvSlNC
YXNpY3MuY3BwCiAgICAgQmluZGluZ3MvSlNXcmFwcGVyLmNwcApJbmRleDogVG9vbHMvVGVzdFJ1
bm5lclNoYXJlZC9UZXN0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFJ1bm5l
clNoYXJlZC9UZXN0Q29tbWFuZC5jcHAJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFJ1bm5l
clNoYXJlZC9UZXN0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdENvbW1hbmQu
aCIKKworbmFtZXNwYWNlIFdUUiB7CisKK2NsYXNzIENvbW1hbmRUb2tlbml6ZXIgeworcHVibGlj
OgorICAgIGV4cGxpY2l0IENvbW1hbmRUb2tlbml6ZXIoY29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0
KQorICAgICAgICA6IG1faW5wdXQoaW5wdXQpCisgICAgICAgICwgbV9wb3NOZXh0U2VwYXJhdG9y
KDApCisgICAgeworICAgICAgICBwdW1wKCk7CisgICAgfQorCisgICAgYm9vbCBoYXNOZXh0KCkg
Y29uc3Q7CisgICAgc3RkOjpzdHJpbmcgbmV4dCgpOworCitwcml2YXRlOgorICAgIHZvaWQgcHVt
cCgpOworICAgIHN0YXRpYyBjb25zdCBjaGFyIGtTZXBhcmF0b3IgPSAnXCcnOworICAgIGNvbnN0
IHN0ZDo6c3RyaW5nJiBtX2lucHV0OworICAgIHN0ZDo6c3RyaW5nIG1fbmV4dDsKKyAgICBzaXpl
X3QgbV9wb3NOZXh0U2VwYXJhdG9yOworfTsKKwordm9pZCBDb21tYW5kVG9rZW5pemVyOjpwdW1w
KCkKK3sKKyAgICBpZiAobV9wb3NOZXh0U2VwYXJhdG9yID09IHN0ZDo6c3RyaW5nOjpucG9zIHx8
IG1fcG9zTmV4dFNlcGFyYXRvciA9PSBtX2lucHV0LnNpemUoKSkgeworICAgICAgICBtX25leHQg
PSBzdGQ6OnN0cmluZygpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHNpemVfdCBzdGFy
dCA9IG1fcG9zTmV4dFNlcGFyYXRvciA/IG1fcG9zTmV4dFNlcGFyYXRvciArIDEgOiAwOworICAg
IG1fcG9zTmV4dFNlcGFyYXRvciA9IG1faW5wdXQuZmluZChrU2VwYXJhdG9yLCBzdGFydCk7Cisg
ICAgc2l6ZV90IHNpemUgPSBtX3Bvc05leHRTZXBhcmF0b3IgPT0gc3RkOjpzdHJpbmc6Om5wb3Mg
PyBzdGQ6OnN0cmluZzo6bnBvcyA6IG1fcG9zTmV4dFNlcGFyYXRvciAtIHN0YXJ0OworICAgIG1f
bmV4dCA9IHN0ZDo6c3RyaW5nKG1faW5wdXQsIHN0YXJ0LCBzaXplKTsKK30KKworc3RkOjpzdHJp
bmcgQ29tbWFuZFRva2VuaXplcjo6bmV4dCgpCit7CisgICAgQVNTRVJUKGhhc05leHQoKSk7CisK
KyAgICBzdGQ6OnN0cmluZyBvbGROZXh0ID0gbV9uZXh0OworICAgIHB1bXAoKTsKKyAgICByZXR1
cm4gb2xkTmV4dDsKK30KKworYm9vbCBDb21tYW5kVG9rZW5pemVyOjpoYXNOZXh0KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gIW1fbmV4dC5lbXB0eSgpOworfQorCitOT19SRVRVUk4gc3RhdGljIHZv
aWQgZGllKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnB1dExpbmUpCit7CisgICAgZnByaW50ZihzdGRl
cnIsICJVbmV4cGVjdGVkIGlucHV0IGxpbmU6ICVzXG4iLCBpbnB1dExpbmUuY19zdHIoKSk7Cisg
ICAgZXhpdCgxKTsKK30KKworVGVzdENvbW1hbmQgcGFyc2VJbnB1dExpbmUoY29uc3Qgc3RkOjpz
dHJpbmcmIGlucHV0TGluZSkKK3sKKyAgICBUZXN0Q29tbWFuZCByZXN1bHQ7CisgICAgQ29tbWFu
ZFRva2VuaXplciB0b2tlbml6ZXIoaW5wdXRMaW5lKTsKKyAgICBpZiAoIXRva2VuaXplci5oYXNO
ZXh0KCkpCisgICAgICAgIGRpZShpbnB1dExpbmUpOworCisgICAgc3RkOjpzdHJpbmcgYXJnID0g
dG9rZW5pemVyLm5leHQoKTsKKyAgICByZXN1bHQucGF0aE9yVVJMID0gYXJnOworICAgIHdoaWxl
ICh0b2tlbml6ZXIuaGFzTmV4dCgpKSB7CisgICAgICAgIGFyZyA9IHRva2VuaXplci5uZXh0KCk7
CisgICAgICAgIGlmIChhcmcgPT0gIi0tdGltZW91dCIpIHsKKyAgICAgICAgICAgIGF1dG8gdGlt
ZW91dFRva2VuID0gdG9rZW5pemVyLm5leHQoKTsKKyAgICAgICAgICAgIHJlc3VsdC50aW1lb3V0
ID0gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyhhdG9pKHRpbWVvdXRUb2tlbi5jX3N0cigpKSk7
CisgICAgICAgIH0gZWxzZSBpZiAoYXJnID09ICItcCIgfHwgYXJnID09ICItLXBpeGVsLXRlc3Qi
KSB7CisgICAgICAgICAgICByZXN1bHQuc2hvdWxkRHVtcFBpeGVscyA9IHRydWU7CisgICAgICAg
ICAgICBpZiAodG9rZW5pemVyLmhhc05leHQoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQuZXhw
ZWN0ZWRQaXhlbEhhc2ggPSB0b2tlbml6ZXIubmV4dCgpOworICAgICAgICB9IGVsc2UgaWYgKGFy
ZyA9PSBzdGQ6OnN0cmluZygiLS1kdW1wLWpzY29uc29sZWxvZy1pbi1zdGRlcnIiKSkKKyAgICAg
ICAgICAgIHJlc3VsdC5kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgPSB0cnVlOworICAgICAgICBl
bHNlIGlmIChhcmcgPT0gc3RkOjpzdHJpbmcoIi0tYWJzb2x1dGVQYXRoIikpCisgICAgICAgICAg
ICByZXN1bHQuYWJzb2x1dGVQYXRoID0gdG9rZW5pemVyLm5leHQoKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgZGllKGlucHV0TGluZSk7CisgICAgfQorICAgIAorICAgIGlmIChyZXN1bHQu
YWJzb2x1dGVQYXRoLmVtcHR5KCkpCisgICAgICAgIHJlc3VsdC5hYnNvbHV0ZVBhdGggPSB0ZXN0
UGF0aChyZXN1bHQucGF0aE9yVVJMKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0ZDo6
ZmlsZXN5c3RlbTo6cGF0aCB0ZXN0UGF0aChjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQor
eworICAgIGlmIChwYXRoT3JVUkwuZmluZCgiaHR0cDovLyIpID09IDAgfHwgcGF0aE9yVVJMLmZp
bmQoImh0dHBzOi8vIikgPT0gMCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmIChwYXRo
T3JVUkwuZmluZCgiZmlsZTovLyIpID09IDApCisgICAgICAgIHJldHVybiBwYXRoT3JVUkwuc3Vi
c3RyKHN0cmxlbigiZmlsZTovIikpOworCisgICAgcmV0dXJuIHN0ZDo6ZmlsZXN5c3RlbTo6YWJz
b2x1dGUocGF0aE9yVVJMKTsKK30KKworc3RkOjpzdHJpbmcgdGVzdFVSTFN0cmluZyhjb25zdCBz
dGQ6OnN0cmluZyYgcGF0aE9yVVJMKQoreworICAgIGlmIChwYXRoT3JVUkwuZmluZCgiaHR0cDov
LyIpID09IDAgfHwgcGF0aE9yVVJMLmZpbmQoImh0dHBzOi8vIikgPT0gMCB8fCBwYXRoT3JVUkwu
ZmluZCgiZmlsZTovLyIpID09IDApCisgICAgICAgIHJldHVybiBwYXRoT3JVUkw7CisKKyAgICBy
ZXR1cm4gImZpbGU6Ly8iICsgc3RkOjpmaWxlc3lzdGVtOjphYnNvbHV0ZShwYXRoT3JVUkwpLmdl
bmVyaWNfc3RyaW5nKCk7Cit9CisKK30KSW5kZXg6IFRvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVGVz
dENvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0UnVubmVyU2hhcmVkL1Rlc3RDb21t
YW5kLmgJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9UZXN0Q29tbWFu
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx3dGYvU2Vjb25kcy5oPgorI2lu
Y2x1ZGUgPHd0Zi9TdGRGaWxlc3lzdGVtLmg+CisKK25hbWVzcGFjZSBXVFIgeworCitzdHJ1Y3Qg
VGVzdENvbW1hbmQgeworICAgIHN0ZDo6c3RyaW5nIHBhdGhPclVSTDsKKyAgICBzdGQ6OmZpbGVz
eXN0ZW06OnBhdGggYWJzb2x1dGVQYXRoOworICAgIHN0ZDo6c3RyaW5nIGV4cGVjdGVkUGl4ZWxI
YXNoOworICAgIFdURjo6U2Vjb25kcyB0aW1lb3V0OworICAgIGJvb2wgc2hvdWxkRHVtcFBpeGVs
cyB7IGZhbHNlIH07CisgICAgYm9vbCBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgeyBmYWxzZSB9
OworfTsKKworVGVzdENvbW1hbmQgcGFyc2VJbnB1dExpbmUoY29uc3Qgc3RkOjpzdHJpbmcmIGlu
cHV0TGluZSk7CisKK3N0ZDo6ZmlsZXN5c3RlbTo6cGF0aCB0ZXN0UGF0aChjb25zdCBzdGQ6OnN0
cmluZyYgcGF0aE9yVVJMKTsKK3N0ZDo6c3RyaW5nIHRlc3RVUkxTdHJpbmcoY29uc3Qgc3RkOjpz
dHJpbmcmIHBhdGhPclVSTCk7CisKK30KSW5kZXg6IFRvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVGVz
dEZlYXR1cmVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0UnVubmVyU2hhcmVkL1Rlc3RG
ZWF0dXJlcy5jcHAJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9UZXN0
RmVhdHVyZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGZWF0dXJlcy5oIgorCisjaW5j
bHVkZSAiVGVzdENvbW1hbmQuaCIKKyNpbmNsdWRlIDxmc3RyZWFtPgorI2luY2x1ZGUgPHN0cmlu
Zz4KKyNpbmNsdWRlIDx3dGYvU3RkRmlsZXN5c3RlbS5oPgorCituYW1lc3BhY2UgV1RSIHsKKwor
dm9pZCBtZXJnZShUZXN0RmVhdHVyZXMmIGJhc2UsIFRlc3RGZWF0dXJlcyBhZGRpdGlvbmFsKQor
eworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2Ugc3RkOjp1bm9yZGVyZWRfbWFwOjptZXJn
ZSB3aGVuIGl0IGlzIGF2YWlsYWJsZSBmb3IgYWxsIHBvcnRzLgorCisgICAgZm9yIChhdXRvIFtr
ZXksIHZhbHVlXSA6IGFkZGl0aW9uYWwuZXhwZXJpbWVudGFsRmVhdHVyZXMpCisgICAgICAgIGJh
c2UuZXhwZXJpbWVudGFsRmVhdHVyZXMuaW5zZXJ0X29yX2Fzc2lnbihrZXksIHZhbHVlKTsKKyAg
ICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogYWRkaXRpb25hbC5pbnRlcm5hbERlYnVnRmVhdHVy
ZXMpCisgICAgICAgIGJhc2UuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzLmluc2VydF9vcl9hc3NpZ24o
a2V5LCB2YWx1ZSk7CisgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGFkZGl0aW9uYWwuYm9v
bEZlYXR1cmVzKQorICAgICAgICBiYXNlLmJvb2xGZWF0dXJlcy5pbnNlcnRfb3JfYXNzaWduKGtl
eSwgdmFsdWUpOworICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBhZGRpdGlvbmFsLmRvdWJs
ZUZlYXR1cmVzKQorICAgICAgICBiYXNlLmRvdWJsZUZlYXR1cmVzLmluc2VydF9vcl9hc3NpZ24o
a2V5LCB2YWx1ZSk7CisgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGFkZGl0aW9uYWwuc3Ry
aW5nRmVhdHVyZXMpCisgICAgICAgIGJhc2Uuc3RyaW5nRmVhdHVyZXMuaW5zZXJ0X29yX2Fzc2ln
bihrZXksIHZhbHVlKTsKKyAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogYWRkaXRpb25hbC5z
dHJpbmdWZWN0b3JGZWF0dXJlcykKKyAgICAgICAgYmFzZS5zdHJpbmdWZWN0b3JGZWF0dXJlcy5p
bnNlcnRfb3JfYXNzaWduKGtleSwgdmFsdWUpOworfQorCitzdGF0aWMgYm9vbCBwYXRoQ29udGFp
bnMoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCwgY29uc3QgY2hhciogc3Vic3RyaW5nKQor
eworICAgIHJldHVybiBwYXRoT3JVUkwuZmluZChzdWJzdHJpbmcpICE9IHN0ZDo6c3RyaW5nOjpu
cG9zOworfQorCitzdGF0aWMgYm9vbCBzaG91bGRNYWtlVmlld3BvcnRGbGV4aWJsZShjb25zdCBz
dGQ6OnN0cmluZyYgcGF0aE9yVVJMKQoreworICAgIHJldHVybiBwYXRoQ29udGFpbnMocGF0aE9y
VVJMLCAidmlld3BvcnQvIikgJiYgIXBhdGhDb250YWlucyhwYXRoT3JVUkwsICJ2aXN1YWwtdmll
d3BvcnQvIik7Cit9CisKK3N0YXRpYyBib29sIHNob3VsZFVzZUVwaGVtZXJhbFNlc3Npb24oY29u
c3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKK3sKKyAgICByZXR1cm4gcGF0aENvbnRhaW5zKHBh
dGhPclVSTCwgInczYy9JbmRleGVkREItcHJpdmF0ZS1icm93c2luZyIpIHx8IHBhdGhDb250YWlu
cyhwYXRoT3JVUkwsICJ3M2NcXEluZGV4ZWREQi1wcml2YXRlLWJyb3dzaW5nIik7Cit9CisKK3N0
YXRpYyBzdGQ6Om9wdGlvbmFsPHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4+IG92ZXJyaWRlVmll
d1dpZHRoQW5kSGVpZ2h0Rm9yVGVzdChjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQorewor
ICAgIGlmIChwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAic3ZnL1czQy1TVkctMS4xIikgfHwgcGF0
aENvbnRhaW5zKHBhdGhPclVSTCwgInN2Z1xcVzNDLVNWRy0xLjEiKSkKKyAgICAgICAgcmV0dXJu
IHsgeyA0ODAsIDM2MCB9IH07CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBvdmVycmlkZURldmljZVNjYWxlRmFjdG9yRm9yVGVzdChj
b25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQoreworICAgIGlmIChwYXRoQ29udGFpbnMocGF0
aE9yVVJMLCAiL2hpZHBpLTN4LSIpKQorICAgICAgICByZXR1cm4gMzsKKyAgICBpZiAocGF0aENv
bnRhaW5zKHBhdGhPclVSTCwgIi9oaWRwaS0iKSkKKyAgICAgICAgcmV0dXJuIDI7CisgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworc3RhdGljIGJvb2wgc2hvdWxkRHVtcEpTQ29uc29sZUxv
Z0luU3RkRXJyKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCit7CisgICAgcmV0dXJuIHBh
dGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgwMC9iZWFjb24iKSB8fCBwYXRoQ29u
dGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMvYmVhY29uIikKKyAgICAgICAgfHwgcGF0
aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo4ODAwL2NvcnMiKSB8fCBwYXRoQ29udGFp
bnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMvY29ycyIpCisgICAgICAgIHx8IHBhdGhDb250
YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgwMC9mZXRjaCIpIHx8IHBhdGhDb250YWlucyhw
YXRoT3JVUkwsICJsb2NhbGhvc3Q6OTQ0My9mZXRjaCIpCisgICAgICAgIHx8IHBhdGhDb250YWlu
cyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgwMC9zZXJ2aWNlLXdvcmtlcnMiKSB8fCBwYXRoQ29u
dGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMvc2VydmljZS13b3JrZXJzIikKKyAgICAg
ICAgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo4ODAwL3N0cmVhbXMvd3Jp
dGFibGUtc3RyZWFtcyIpIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6OTQ0
My9zdHJlYW1zL3dyaXRhYmxlLXN0cmVhbXMiKQorICAgICAgICB8fCBwYXRoQ29udGFpbnMocGF0
aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvc3RyZWFtcy9waXBpbmciKSB8fCBwYXRoQ29udGFpbnMo
cGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMvc3RyZWFtcy9waXBpbmciKQorICAgICAgICB8fCBw
YXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAveGhyIikgfHwgcGF0aENvbnRh
aW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3hociIpCisgICAgICAgIHx8IHBhdGhDb250
YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgwMC93ZWJydGMiKSB8fCBwYXRoQ29udGFpbnMo
cGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMvd2VicnRjIikKKyAgICAgICAgfHwgcGF0aENvbnRh
aW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo4ODAwL3dlYnNvY2tldHMiKSB8fCBwYXRoQ29udGFp
bnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMvd2Vic29ja2V0cyIpOworfQorCitUZXN0RmVh
dHVyZXMgaGFyZGNvZGVkRmVhdHVyZXNCYXNlZE9uUGF0aEZvclRlc3QoY29uc3QgVGVzdENvbW1h
bmQmIGNvbW1hbmQpCit7CisgICAgVGVzdEZlYXR1cmVzIGZlYXR1cmVzOworCisgICAgaWYgKHNo
b3VsZE1ha2VWaWV3cG9ydEZsZXhpYmxlKGNvbW1hbmQucGF0aE9yVVJMKSkKKyAgICAgICAgZmVh
dHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJ1c2VGbGV4aWJsZVZpZXdwb3J0IiwgdHJ1ZSB9
KTsKKyAgICBpZiAoc2hvdWxkVXNlRXBoZW1lcmFsU2Vzc2lvbihjb21tYW5kLnBhdGhPclVSTCkp
CisgICAgICAgIGZlYXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyAidXNlRXBoZW1lcmFsU2Vz
c2lvbiIsIHRydWUgfSk7CisgICAgaWYgKHNob3VsZER1bXBKU0NvbnNvbGVMb2dJblN0ZEVycihj
b21tYW5kLnBhdGhPclVSTCkpCisgICAgICAgIGZlYXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQo
eyAiZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIiwgdHJ1ZSB9KTsKKyAgICBpZiAoYXV0byBkZXZp
Y2VTY2FsZUZhY3RvciA9IG92ZXJyaWRlRGV2aWNlU2NhbGVGYWN0b3JGb3JUZXN0KGNvbW1hbmQu
cGF0aE9yVVJMKTsgZGV2aWNlU2NhbGVGYWN0b3IgIT0gc3RkOjpudWxsb3B0KQorICAgICAgICBm
ZWF0dXJlcy5kb3VibGVGZWF0dXJlcy5pbnNlcnQoeyAiZGV2aWNlU2NhbGVGYWN0b3IiLCBkZXZp
Y2VTY2FsZUZhY3Rvci52YWx1ZSgpIH0pOworICAgIGlmIChhdXRvIHZpZXdXaWR0aEFuZEhlaWdo
dCA9IG92ZXJyaWRlVmlld1dpZHRoQW5kSGVpZ2h0Rm9yVGVzdChjb21tYW5kLnBhdGhPclVSTCk7
IHZpZXdXaWR0aEFuZEhlaWdodCAhPSBzdGQ6Om51bGxvcHQpIHsKKyAgICAgICAgZmVhdHVyZXMu
ZG91YmxlRmVhdHVyZXMuaW5zZXJ0KHsgInZpZXdXaWR0aCIsIHZpZXdXaWR0aEFuZEhlaWdodC0+
Zmlyc3QgfSk7CisgICAgICAgIGZlYXR1cmVzLmRvdWJsZUZlYXR1cmVzLmluc2VydCh7ICJ2aWV3
SGVpZ2h0Iiwgdmlld1dpZHRoQW5kSGVpZ2h0LT5zZWNvbmQgfSk7CisgICAgfQorCisgICAgcmV0
dXJuIGZlYXR1cmVzOworfQorCitzdGF0aWMgYm9vbCBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFs
dWUoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAidHJ1ZSIp
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICh2YWx1ZSA9PSAiZmFsc2UiKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBMT0dfRVJST1IoIkZvdW5kIHVuZXhwZWN0ZWQgdmFsdWUg
JyVzJyBmb3IgYm9vbGVhbiBvcHRpb24uIEV4cGVjdGVkICd0cnVlJyBvciAnZmFsc2UnLiIsIHZh
bHVlLmNfc3RyKCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGRvdWJsZSBwYXJz
ZURvdWJsZVRlc3RIZWFkZXJWYWx1ZShjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpCit7CisgICAg
cmV0dXJuIHN0ZDo6c3RvZCh2YWx1ZSk7Cit9CisKK3N0YXRpYyBzdGQ6OnN0cmluZyBwYXJzZVN0
cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzUmVsYXRpdmVQYXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1
ZSwgY29uc3Qgc3RkOjpmaWxlc3lzdGVtOjpwYXRoJiB0ZXN0UGF0aCkKK3sKKyAgICBhdXRvIGJh
c2VQYXRoID0gdGVzdFBhdGgucGFyZW50X3BhdGgoKTsKKyAgICByZXR1cm4gKGJhc2VQYXRoIC8g
dmFsdWUpLmdlbmVyaWNfc3RyaW5nKCk7Cit9CisKK3N0YXRpYyBzdGQ6OnN0cmluZyBwYXJzZVN0
cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzVVJMKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkKK3sKKyAg
ICByZXR1cm4gdGVzdFVSTFN0cmluZyh2YWx1ZSk7Cit9CisKK3N0YXRpYyBzdGQ6OnZlY3Rvcjxz
dGQ6OnN0cmluZz4gcGFyc2VTdHJpbmdUZXN0SGVhZGVyVmFsdWVBc1N0cmluZ1ZlY3Rvcihjb25z
dCBzdGQ6OnN0cmluZyYgc3RyaW5nKQoreworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBy
ZXN1bHQ7CisKKyAgICBzaXplX3QgaSA9IDA7CisgICAgd2hpbGUgKGkgPCBzdHJpbmcuc2l6ZSgp
KSB7CisgICAgICAgIGF1dG8gZm91bmRJbmRleCA9IHN0cmluZy5maW5kX2ZpcnN0X29mKCcsJywg
aSk7CisKKyAgICAgICAgaWYgKGZvdW5kSW5kZXggIT0gaSkKKyAgICAgICAgICAgIHJlc3VsdC5w
dXNoX2JhY2soc3RyaW5nLnN1YnN0cihpLCBmb3VuZEluZGV4IC0gaSkpOworCisgICAgICAgIGlm
IChmb3VuZEluZGV4ID09IHN0ZDo6c3RyaW5nOjpucG9zKQorICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgaSA9IGZvdW5kSW5kZXggKyAxOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3N0YXRpYyBUZXN0RmVhdHVyZXMgcGFyc2VUZXN0SGVhZGVyKHN0ZDo6ZmlsZXN5c3Rl
bTo6cGF0aCBwYXRoLCBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIFRlc3RI
ZWFkZXJLZXlUeXBlPiYga2V5VHlwZU1hcCkKK3sKKyAgICBhdXRvIGtleVR5cGUgPSBbJmtleVR5
cGVNYXBdKGF1dG8mIGtleSkgeworICAgICAgICBhdXRvIGl0ID0ga2V5VHlwZU1hcC5maW5kKGtl
eSk7CisgICAgICAgIGlmIChpdCA9PSBrZXlUeXBlTWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0
dXJuIFRlc3RIZWFkZXJLZXlUeXBlOjpVbmtub3duOworICAgICAgICByZXR1cm4gaXQtPnNlY29u
ZDsKKyAgICB9OworCisgICAgVGVzdEZlYXR1cmVzIGZlYXR1cmVzOworICAgIGlmICghc3RkOjpm
aWxlc3lzdGVtOjpleGlzdHMocGF0aCkpCisgICAgICAgIHJldHVybiBmZWF0dXJlczsKKworICAg
IHN0ZDo6aWZzdHJlYW0gZmlsZShwYXRoKTsKKyAgICBpZiAoIWZpbGUuZ29vZCgpKSB7CisgICAg
ICAgIExPR19FUlJPUigiQ291bGQgbm90IG9wZW4gZmlsZSB0byBpbnNwZWN0IHRlc3QgaGVhZGVy
cyBpbiAlcyIsIHBhdGguY19zdHIoKSk7CisgICAgICAgIHJldHVybiBmZWF0dXJlczsKKyAgICB9
CisKKyAgICBzdGQ6OnN0cmluZyBvcHRpb25zOworICAgIGdldGxpbmUoZmlsZSwgb3B0aW9ucyk7
CisgICAgc3RkOjpzdHJpbmcgYmVnaW5TdHJpbmcoIndlYmtpdC10ZXN0LXJ1bm5lciBbICIpOwor
ICAgIHN0ZDo6c3RyaW5nIGVuZFN0cmluZygiIF0iKTsKKyAgICBzaXplX3QgYmVnaW5Mb2NhdGlv
biA9IG9wdGlvbnMuZmluZChiZWdpblN0cmluZyk7CisgICAgaWYgKGJlZ2luTG9jYXRpb24gPT0g
c3RkOjpzdHJpbmc6Om5wb3MpCisgICAgICAgIHJldHVybiBmZWF0dXJlczsKKyAgICBzaXplX3Qg
ZW5kTG9jYXRpb24gPSBvcHRpb25zLmZpbmQoZW5kU3RyaW5nLCBiZWdpbkxvY2F0aW9uKTsKKyAg
ICBpZiAoZW5kTG9jYXRpb24gPT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICAgICAgTE9HX0VS
Uk9SKCJDb3VsZCBub3QgZmluZCBlbmQgb2YgdGVzdCBoZWFkZXIgaW4gJXMiLCBwYXRoLmNfc3Ry
KCkpOworICAgICAgICByZXR1cm4gZmVhdHVyZXM7CisgICAgfQorICAgIHN0ZDo6c3RyaW5nIHBh
aXJTdHJpbmcgPSBvcHRpb25zLnN1YnN0cihiZWdpbkxvY2F0aW9uICsgYmVnaW5TdHJpbmcuc2l6
ZSgpLCBlbmRMb2NhdGlvbiAtIChiZWdpbkxvY2F0aW9uICsgYmVnaW5TdHJpbmcuc2l6ZSgpKSk7
CisgICAgc2l6ZV90IHBhaXJTdGFydCA9IDA7CisgICAgd2hpbGUgKHBhaXJTdGFydCA8IHBhaXJT
dHJpbmcuc2l6ZSgpKSB7CisgICAgICAgIHNpemVfdCBwYWlyRW5kID0gcGFpclN0cmluZy5maW5k
KCIgIiwgcGFpclN0YXJ0KTsKKyAgICAgICAgaWYgKHBhaXJFbmQgPT0gc3RkOjpzdHJpbmc6Om5w
b3MpCisgICAgICAgICAgICBwYWlyRW5kID0gcGFpclN0cmluZy5zaXplKCk7CisgICAgICAgIHNp
emVfdCBlcXVhbHNMb2NhdGlvbiA9IHBhaXJTdHJpbmcuZmluZCgiPSIsIHBhaXJTdGFydCk7Cisg
ICAgICAgIGlmIChlcXVhbHNMb2NhdGlvbiA9PSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAgICAg
ICAgICAgTE9HX0VSUk9SKCJNYWxmb3JtZWQgb3B0aW9uIGluIHRlc3QgaGVhZGVyIChjb3VsZCBu
b3QgZmluZCAnPScgY2hhcmFjdGVyKSBpbiAlcyIsIHBhdGguY19zdHIoKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBhdXRvIGtleSA9IHBhaXJTdHJpbmcuc3Vic3Ry
KHBhaXJTdGFydCwgZXF1YWxzTG9jYXRpb24gLSBwYWlyU3RhcnQpOworICAgICAgICBhdXRvIHZh
bHVlID0gcGFpclN0cmluZy5zdWJzdHIoZXF1YWxzTG9jYXRpb24gKyAxLCBwYWlyRW5kIC0gKGVx
dWFsc0xvY2F0aW9uICsgMSkpOworCisgICAgICAgIGlmIChrZXkucmZpbmQoImV4cGVyaW1lbnRh
bDoiKSA9PSAwKSB7CisgICAgICAgICAgICBrZXkgPSBrZXkuc3Vic3RyKDEzKTsKKyAgICAgICAg
ICAgIGZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzLmluc2VydCh7IGtleSwgcGFyc2VCb29s
ZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKSB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChrZXkucmZp
bmQoImludGVybmFsOiIpID09IDApIHsKKyAgICAgICAgICAgIGtleSA9IGtleS5zdWJzdHIoOSk7
CisgICAgICAgICAgICBmZWF0dXJlcy5pbnRlcm5hbERlYnVnRmVhdHVyZXMuaW5zZXJ0KHsga2V5
LCBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpIH0pOworICAgICAgICB9CisKKyAg
ICAgICAgc3dpdGNoIChrZXlUeXBlKGtleSkpIHsKKyAgICAgICAgY2FzZSBUZXN0SGVhZGVyS2V5
VHlwZTo6Qm9vbDoKKyAgICAgICAgICAgIGZlYXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyBr
ZXksIHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSkgfSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBUZXN0SGVhZGVyS2V5VHlwZTo6RG91YmxlOgorICAgICAgICAg
ICAgZmVhdHVyZXMuZG91YmxlRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCBwYXJzZURvdWJsZVRlc3RI
ZWFkZXJWYWx1ZSh2YWx1ZSkgfSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBU
ZXN0SGVhZGVyS2V5VHlwZTo6U3RyaW5nOgorICAgICAgICAgICAgZmVhdHVyZXMuc3RyaW5nRmVh
dHVyZXMuaW5zZXJ0KHsga2V5LCB2YWx1ZSB9KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFRlc3RIZWFkZXJLZXlUeXBlOjpTdHJpbmdSZWxhdGl2ZVBhdGg6CisgICAgICAgICAg
ICBmZWF0dXJlcy5zdHJpbmdGZWF0dXJlcy5pbnNlcnQoeyBrZXksIHBhcnNlU3RyaW5nVGVzdEhl
YWRlclZhbHVlQXNSZWxhdGl2ZVBhdGgodmFsdWUsIHBhdGgpIH0pOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgVGVzdEhlYWRlcktleVR5cGU6OlN0cmluZ1VSTDoKKyAgICAgICAg
ICAgIGZlYXR1cmVzLnN0cmluZ0ZlYXR1cmVzLmluc2VydCh7IGtleSwgcGFyc2VTdHJpbmdUZXN0
SGVhZGVyVmFsdWVBc1VSTCh2YWx1ZSkgfSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBUZXN0SGVhZGVyS2V5VHlwZTo6U3RyaW5nVmVjdG9yOgorICAgICAgICAgICAgZmVhdHVy
ZXMuc3RyaW5nVmVjdG9yRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCBwYXJzZVN0cmluZ1Rlc3RIZWFk
ZXJWYWx1ZUFzU3RyaW5nVmVjdG9yKHZhbHVlKSB9KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFRlc3RIZWFkZXJLZXlUeXBlOjpVbmtub3duOgorICAgICAgICAgICAgTE9HX0VS
Uk9SKCJVbmtub3duIGtleSwgJyVzLCBpbiB0ZXN0IGhlYWRlciBpbiAlcyIsIGtleS5jX3N0cigp
LCBwYXRoLmNfc3RyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg
ICBwYWlyU3RhcnQgPSBwYWlyRW5kICsgMTsKKyAgICB9CisKKyAgICByZXR1cm4gZmVhdHVyZXM7
Cit9CisKK1Rlc3RGZWF0dXJlcyBmZWF0dXJlRGVmYXVsdHNGcm9tVGVzdEhlYWRlckZvclRlc3Qo
Y29uc3QgVGVzdENvbW1hbmQmIGNvbW1hbmQsIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6
OnN0cmluZywgVGVzdEhlYWRlcktleVR5cGU+JiBrZXlUeXBlTWFwKQoreworICAgIHJldHVybiBw
YXJzZVRlc3RIZWFkZXIoY29tbWFuZC5hYnNvbHV0ZVBhdGgsIGtleVR5cGVNYXApOworfQorCit9
CkluZGV4OiBUb29scy9UZXN0UnVubmVyU2hhcmVkL1Rlc3RGZWF0dXJlcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVGVzdEZlYXR1cmVzLmgJKG5vbmV4aXN0ZW50KQor
KysgVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9UZXN0RmVhdHVyZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxv
cHRpb25hbD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKyNp
bmNsdWRlIDx2ZWN0b3I+CisKK25hbWVzcGFjZSBXVFIgeworCitzdHJ1Y3QgVGVzdENvbW1hbmQ7
CisKK3N0cnVjdCBUZXN0RmVhdHVyZXMgeworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0
cmluZywgYm9vbD4gZXhwZXJpbWVudGFsRmVhdHVyZXM7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFw
PHN0ZDo6c3RyaW5nLCBib29sPiBpbnRlcm5hbERlYnVnRmVhdHVyZXM7CisgICAgc3RkOjp1bm9y
ZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBib29sPiBib29sRmVhdHVyZXM7CisgICAgc3RkOjp1bm9y
ZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBkb3VibGU+IGRvdWJsZUZlYXR1cmVzOworICAgIHN0ZDo6
dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+IHN0cmluZ0ZlYXR1cmVzOwor
ICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgc3RkOjp2ZWN0b3I8c3RkOjpzdHJp
bmc+PiBzdHJpbmdWZWN0b3JGZWF0dXJlczsKK307CisKK3ZvaWQgbWVyZ2UoVGVzdEZlYXR1cmVz
JiBiYXNlLCBUZXN0RmVhdHVyZXMgYWRkaXRpb25hbCk7CisKK1Rlc3RGZWF0dXJlcyBoYXJkY29k
ZWRGZWF0dXJlc0Jhc2VkT25QYXRoRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYpOworCitlbnVt
IGNsYXNzIFRlc3RIZWFkZXJLZXlUeXBlIDogdWludDhfdCB7CisgICAgQm9vbCwKKyAgICBEb3Vi
bGUsCisgICAgU3RyaW5nLAorICAgIFN0cmluZ1JlbGF0aXZlUGF0aCwKKyAgICBTdHJpbmdVUkws
CisgICAgU3RyaW5nVmVjdG9yLAorICAgIFVua25vd24KK307CitUZXN0RmVhdHVyZXMgZmVhdHVy
ZURlZmF1bHRzRnJvbVRlc3RIZWFkZXJGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJiwgY29uc3Qg
c3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBUZXN0SGVhZGVyS2V5VHlwZT4mKTsKKwor
fQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyNjgz
NjQpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw2ICsyOCw3IEBAIHNldChXZWJLaXRUZXN0UnVubmVyX0xJQlJBUklFUwogCiBz
ZXQoV2ViS2l0VGVzdFJ1bm5lcl9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgJHtDTUFLRV9CSU5B
UllfRElSfQorICAgICR7V2ViS2l0VGVzdFJ1bm5lcl9TSEFSRURfRElSfQogICAgICR7V2ViS2l0
VGVzdFJ1bm5lcl9CSU5ESU5HU19ESVJ9CiAgICAgJHtXZWJLaXRUZXN0UnVubmVyX0RFUklWRURf
U09VUkNFU19ESVJ9L1VJU2NyaXB0Q29udGV4dAogICAgICR7V2ViS2l0VGVzdFJ1bm5lcl9ESVJ9
CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAkocmV2aXNp
b24gMjY4MzY0KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJFdmVudFNlbmRlclBy
b3h5LmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2ViVmlldy5o
IgorI2luY2x1ZGUgIlRlc3RDb21tYW5kLmgiCiAjaW5jbHVkZSAiVGVzdEludm9jYXRpb24uaCIK
ICNpbmNsdWRlICJXZWJDb3JlVGVzdFN1cHBvcnQuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CkBAIC0xMjM2LDI0ICsxMjM3LDYgQEAgdm9pZCBUZXN0
Q29udHJvbGxlcjo6c2V0QWxsb3dzQW55U1NMQ2VydAogfQogI2VuZGlmCiAKLXN0YXRpYyBzdGQ6
OnN0cmluZyB0ZXN0UGF0aChXS1VSTFJlZiB1cmwpCi17Ci0gICAgYXV0byBzY2hlbWUgPSBhZG9w
dFdLKFdLVVJMQ29weVNjaGVtZSh1cmwpKTsKLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZ0lnbm9yaW5nQ2FzZShzY2hlbWUuZ2V0KCksICJmaWxlIikpIHsKLSAgICAgICAgYXV0
byBwYXRoID0gYWRvcHRXSyhXS1VSTENvcHlQYXRoKHVybCkpOwotICAgICAgICBhdXRvIGJ1ZmZl
ciA9IHN0ZDo6dmVjdG9yPGNoYXI+KFdLU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShw
YXRoLmdldCgpKSk7Ci0gICAgICAgIGF1dG8gbGVuZ3RoID0gV0tTdHJpbmdHZXRVVEY4Q1N0cmlu
ZyhwYXRoLmdldCgpLCBidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpKTsKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlQobGVuZ3RoID4gMCk7Ci0jaWYgT1MoV0lORE9XUykKLSAgICAgICAgLy8gUmVt
b3ZlIHRoZSBmaXJzdCAnLycgaWYgaXQgc3RhcnRzIHdpdGggc29tZXRoaW5nIGxpa2UgIi9DOi8i
LgotICAgICAgICBpZiAobGVuZ3RoID49IDQgJiYgYnVmZmVyWzBdID09ICcvJyAmJiBidWZmZXJb
Ml0gPT0gJzonICYmIGJ1ZmZlclszXSA9PSAnLycpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpz
dHJpbmcoYnVmZmVyLmRhdGEoKSArIDEsIGxlbmd0aCAtIDEpOwotI2VuZGlmCi0gICAgICAgIHJl
dHVybiBzdGQ6OnN0cmluZyhidWZmZXIuZGF0YSgpLCBsZW5ndGggLSAxKTsKLSAgICB9Ci0gICAg
cmV0dXJuIHN0ZDo6c3RyaW5nKCk7Ci19Ci0KIFdLVVJMUmVmIFRlc3RDb250cm9sbGVyOjpjcmVh
dGVUZXN0VVJMKGNvbnN0IGNoYXIqIHBhdGhPclVSTCkKIHsKICAgICBpZiAoc3Ryc3RyKHBhdGhP
clVSTCwgImh0dHA6Ly8iKSB8fCBzdHJzdHIocGF0aE9yVVJMLCAiaHR0cHM6Ly8iKSB8fCBzdHJz
dHIocGF0aE9yVVJMLCAiZmlsZTovLyIpKQpAQCAtMTI5Nyw3ICsxMjgwLDcgQEAgVGVzdE9wdGlv
bnMgVGVzdENvbnRyb2xsZXI6OnRlc3RPcHRpb25zRgogICAgIFRlc3RGZWF0dXJlcyBmZWF0dXJl
cyA9IG1fZ2xvYmFsRmVhdHVyZXM7CiAgICAgbWVyZ2UoZmVhdHVyZXMsIGhhcmRjb2RlZEZlYXR1
cmVzQmFzZWRPblBhdGhGb3JUZXN0KGNvbW1hbmQpKTsKICAgICBtZXJnZShmZWF0dXJlcywgcGxh
dGZvcm1TcGVjaWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QoY29tbWFuZCkpOwotICAgIG1lcmdl
KGZlYXR1cmVzLCBmZWF0dXJlRGVmYXVsdHNGcm9tVGVzdEhlYWRlckZvclRlc3QoY29tbWFuZCkp
OworICAgIG1lcmdlKGZlYXR1cmVzLCBmZWF0dXJlRGVmYXVsdHNGcm9tVGVzdEhlYWRlckZvclRl
c3QoY29tbWFuZCwgVGVzdE9wdGlvbnM6OmtleVR5cGVNYXBwaW5nKCkpKTsKICAgICBtZXJnZShm
ZWF0dXJlcywgcGxhdGZvcm1TcGVjaWZpY0ZlYXR1cmVPdmVycmlkZXNEZWZhdWx0c0ZvclRlc3Qo
Y29tbWFuZCkpOwogCiAgICAgcmV0dXJuIFRlc3RPcHRpb25zIHsgZmVhdHVyZXMgfTsKQEAgLTEz
NDUsNiArMTMyOCwyNCBAQCBzdGF0aWMgdm9pZCBjb250ZW50RXh0ZW5zaW9uU3RvcmVDYWxsYmFj
CiAgICAgY29udGV4dC0+dGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwogfQogCitzdGF0aWMg
c3RkOjpzdHJpbmcgdGVzdFBhdGgoV0tVUkxSZWYgdXJsKQoreworICAgIGF1dG8gc2NoZW1lID0g
YWRvcHRXSyhXS1VSTENvcHlTY2hlbWUodXJsKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmdJZ25vcmluZ0Nhc2Uoc2NoZW1lLmdldCgpLCAiZmlsZSIpKSB7CisgICAgICAg
IGF1dG8gcGF0aCA9IGFkb3B0V0soV0tVUkxDb3B5UGF0aCh1cmwpKTsKKyAgICAgICAgYXV0byBi
dWZmZXIgPSBzdGQ6OnZlY3RvcjxjaGFyPihXS1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1Np
emUocGF0aC5nZXQoKSkpOworICAgICAgICBhdXRvIGxlbmd0aCA9IFdLU3RyaW5nR2V0VVRGOENT
dHJpbmcocGF0aC5nZXQoKSwgYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSk7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGxlbmd0aCA+IDApOworI2lmIE9TKFdJTkRPV1MpCisgICAgICAgIC8v
IFJlbW92ZSB0aGUgZmlyc3QgJy8nIGlmIGl0IHN0YXJ0cyB3aXRoIHNvbWV0aGluZyBsaWtlICIv
QzovIi4KKyAgICAgICAgaWYgKGxlbmd0aCA+PSA0ICYmIGJ1ZmZlclswXSA9PSAnLycgJiYgYnVm
ZmVyWzJdID09ICc6JyAmJiBidWZmZXJbM10gPT0gJy8nKQorICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6c3RyaW5nKGJ1ZmZlci5kYXRhKCkgKyAxLCBsZW5ndGggLSAxKTsKKyNlbmRpZgorICAgICAg
ICByZXR1cm4gc3RkOjpzdHJpbmcoYnVmZmVyLmRhdGEoKSwgbGVuZ3RoIC0gMSk7CisgICAgfQor
ICAgIHJldHVybiBzdGQ6OnN0cmluZygpOworfQorCiBzdGF0aWMgc3RkOjpzdHJpbmcgY29udGVu
dEV4dGVuc2lvbkpTT05QYXRoKFdLVVJMUmVmIHVybCkKIHsKICAgICBhdXRvIHBhdGggPSB0ZXN0
UGF0aCh1cmwpOwpAQCAtMTQzMCw5NyArMTQzMSwxMyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpy
ZXNldENvbnRlbnRFeHRlbnNpCiAKICNlbmRpZiAvLyAhRU5BQkxFKENPTlRFTlRfRVhURU5TSU9O
UykKIAotY2xhc3MgQ29tbWFuZFRva2VuaXplciB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgQ29t
bWFuZFRva2VuaXplcihjb25zdCBzdGQ6OnN0cmluZyYgaW5wdXQpCi0gICAgICAgIDogbV9pbnB1
dChpbnB1dCkKLSAgICB7Ci0gICAgICAgIHB1bXAoKTsKLSAgICB9Ci0KLSAgICBib29sIGhhc05l
eHQoKSBjb25zdDsKLSAgICBzdGQ6OnN0cmluZyBuZXh0KCk7Ci0KLXByaXZhdGU6Ci0gICAgdm9p
ZCBwdW1wKCk7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIga1NlcGFyYXRvciA9ICdcJyc7Ci0gICAg
Y29uc3Qgc3RkOjpzdHJpbmcmIG1faW5wdXQ7Ci0gICAgc3RkOjpzdHJpbmcgbV9uZXh0OwotICAg
IHNpemVfdCBtX3Bvc05leHRTZXBhcmF0b3IgeyAwIH07Ci19OwotCi12b2lkIENvbW1hbmRUb2tl
bml6ZXI6OnB1bXAoKQotewotICAgIGlmIChtX3Bvc05leHRTZXBhcmF0b3IgPT0gc3RkOjpzdHJp
bmc6Om5wb3MgfHwgbV9wb3NOZXh0U2VwYXJhdG9yID09IG1faW5wdXQuc2l6ZSgpKSB7Ci0gICAg
ICAgIG1fbmV4dCA9IHN0ZDo6c3RyaW5nKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
c2l6ZV90IHN0YXJ0ID0gbV9wb3NOZXh0U2VwYXJhdG9yID8gbV9wb3NOZXh0U2VwYXJhdG9yICsg
MSA6IDA7Ci0gICAgbV9wb3NOZXh0U2VwYXJhdG9yID0gbV9pbnB1dC5maW5kKGtTZXBhcmF0b3Is
IHN0YXJ0KTsKLSAgICBzaXplX3Qgc2l6ZSA9IG1fcG9zTmV4dFNlcGFyYXRvciA9PSBzdGQ6OnN0
cmluZzo6bnBvcyA/IHN0ZDo6c3RyaW5nOjpucG9zIDogbV9wb3NOZXh0U2VwYXJhdG9yIC0gc3Rh
cnQ7Ci0gICAgbV9uZXh0ID0gc3RkOjpzdHJpbmcobV9pbnB1dCwgc3RhcnQsIHNpemUpOwotfQot
Ci1zdGQ6OnN0cmluZyBDb21tYW5kVG9rZW5pemVyOjpuZXh0KCkKLXsKLSAgICBBU1NFUlQoaGFz
TmV4dCgpKTsKLQotICAgIHN0ZDo6c3RyaW5nIG9sZE5leHQgPSBtX25leHQ7Ci0gICAgcHVtcCgp
OwotICAgIHJldHVybiBvbGROZXh0OwotfQotCi1ib29sIENvbW1hbmRUb2tlbml6ZXI6Omhhc05l
eHQoKSBjb25zdAotewotICAgIHJldHVybiAhbV9uZXh0LmVtcHR5KCk7Ci19Ci0KLU5PX1JFVFVS
TiBzdGF0aWMgdm9pZCBkaWUoY29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0TGluZSkKLXsKLSAgICBm
cHJpbnRmKHN0ZGVyciwgIlVuZXhwZWN0ZWQgaW5wdXQgbGluZTogJXNcbiIsIGlucHV0TGluZS5j
X3N0cigpKTsKLSAgICBleGl0KDEpOwotfQotCi1zdGF0aWMgVGVzdENvbW1hbmQgcGFyc2VJbnB1
dExpbmUoY29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0TGluZSkKLXsKLSAgICBUZXN0Q29tbWFuZCBy
ZXN1bHQ7Ci0gICAgQ29tbWFuZFRva2VuaXplciB0b2tlbml6ZXIoaW5wdXRMaW5lKTsKLSAgICBp
ZiAoIXRva2VuaXplci5oYXNOZXh0KCkpCi0gICAgICAgIGRpZShpbnB1dExpbmUpOwotCi0gICAg
c3RkOjpzdHJpbmcgYXJnID0gdG9rZW5pemVyLm5leHQoKTsKLSAgICByZXN1bHQucGF0aE9yVVJM
ID0gYXJnOwotICAgIHdoaWxlICh0b2tlbml6ZXIuaGFzTmV4dCgpKSB7Ci0gICAgICAgIGFyZyA9
IHRva2VuaXplci5uZXh0KCk7Ci0gICAgICAgIGlmIChhcmcgPT0gc3RkOjpzdHJpbmcoIi0tdGlt
ZW91dCIpKSB7Ci0gICAgICAgICAgICBzdGQ6OnN0cmluZyB0aW1lb3V0VG9rZW4gPSB0b2tlbml6
ZXIubmV4dCgpOwotICAgICAgICAgICAgcmVzdWx0LnRpbWVvdXQgPSBTZWNvbmRzOjpmcm9tTWls
bGlzZWNvbmRzKGF0b2kodGltZW91dFRva2VuLmNfc3RyKCkpKTsKLSAgICAgICAgfSBlbHNlIGlm
IChhcmcgPT0gc3RkOjpzdHJpbmcoIi1wIikgfHwgYXJnID09IHN0ZDo6c3RyaW5nKCItLXBpeGVs
LXRlc3QiKSkgewotICAgICAgICAgICAgcmVzdWx0LnNob3VsZER1bXBQaXhlbHMgPSB0cnVlOwot
ICAgICAgICAgICAgaWYgKHRva2VuaXplci5oYXNOZXh0KCkpCi0gICAgICAgICAgICAgICAgcmVz
dWx0LmV4cGVjdGVkUGl4ZWxIYXNoID0gdG9rZW5pemVyLm5leHQoKTsKLSAgICAgICAgfSBlbHNl
IGlmIChhcmcgPT0gc3RkOjpzdHJpbmcoIi0tZHVtcC1qc2NvbnNvbGVsb2ctaW4tc3RkZXJyIikp
Ci0gICAgICAgICAgICByZXN1bHQuZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyID0gdHJ1ZTsKLSAg
ICAgICAgZWxzZSBpZiAoYXJnID09IHN0ZDo6c3RyaW5nKCItLWFic29sdXRlUGF0aCIpKQotICAg
ICAgICAgICAgcmVzdWx0LmFic29sdXRlUGF0aCA9IHRva2VuaXplci5uZXh0KCk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGRpZShpbnB1dExpbmUpOwotICAgIH0KLSAgICAKLSAgICBpZiAo
cmVzdWx0LmFic29sdXRlUGF0aC5lbXB0eSgpKSB7Ci0gICAgICAgIC8vIEdyb3NzLiBOZWVkIHRv
IHJlZHVjZSBjb252ZXJzaW9ucyBiZXR3ZWVuIGFsbCB0aGUgc3RyaW5nIHR5cGVzIGFuZCBVUkxz
LgotICAgICAgICByZXN1bHQuYWJzb2x1dGVQYXRoID0gdGVzdFBhdGgoYWRvcHRXSyhUZXN0Q29u
dHJvbGxlcjo6Y3JlYXRlVGVzdFVSTChyZXN1bHQucGF0aE9yVVJMLmNfc3RyKCkpKS5nZXQoKSk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogYm9vbCBUZXN0Q29udHJvbGxlcjo6
cnVuVGVzdChjb25zdCBjaGFyKiBpbnB1dExpbmUpCiB7CiAgICAgQXV0b2RyYWluZWRQb29sIHBv
b2w7Ci0gICAgCisKICAgICBXS1RleHRDaGVja2VyU2V0VGVzdGluZ01vZGUodHJ1ZSk7Ci0gICAg
VGVzdENvbW1hbmQgY29tbWFuZCA9IHBhcnNlSW5wdXRMaW5lKHN0ZDo6c3RyaW5nKGlucHV0TGlu
ZSkpOworICAgIAorICAgIGF1dG8gY29tbWFuZCA9IHBhcnNlSW5wdXRMaW5lKHN0ZDo6c3RyaW5n
KGlucHV0TGluZSkpOwogCiAgICAgbV9zdGF0ZSA9IFJ1bm5pbmdUZXN0OwogICAgIApJbmRleDog
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAkocmV2aXNpb24gMjY4MzY0KQor
KysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC02NDQsMTMgKzY0NCw0IEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKLXN0cnVjdCBUZXN0
Q29tbWFuZCB7Ci0gICAgc3RkOjpzdHJpbmcgcGF0aE9yVVJMOwotICAgIHN0ZDo6c3RyaW5nIGFi
c29sdXRlUGF0aDsKLSAgICBzdGQ6OnN0cmluZyBleHBlY3RlZFBpeGVsSGFzaDsKLSAgICBXVEY6
OlNlY29uZHMgdGltZW91dDsKLSAgICBib29sIHNob3VsZER1bXBQaXhlbHMgeyBmYWxzZSB9Owot
ICAgIGJvb2wgZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIHsgZmFsc2UgfTsKLX07Ci0KIH0gLy8g
bmFtZXNwYWNlIFdUUgpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0T3B0aW9ucy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0T3B0aW9ucy5jcHAJ
KHJldmlzaW9uIDI2ODM2NCkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3OCArMjYsMTMgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJUZXN0T3B0aW9ucy5oIgogCi0jaW5jbHVkZSAiU3RyaW5nRnVuY3Rpb25z
LmgiCi0jaW5jbHVkZSAiVGVzdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlIDxmc3RyZWFtPgotI2lu
Y2x1ZGUgPGlvc3RyZWFtPgogI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRGaWxl
c3lzdGVtLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNkZWZpbmUgRFVN
UF9GRUFUVVJFUyAwCiAKIG5hbWVzcGFjZSBXVFIgewogCi0jaWYgRFVNUF9GRUFUVVJFUwotc3Rh
dGljIHZvaWQgZHVtcEZlYXR1cmVzKGNvbnN0IFRlc3RGZWF0dXJlcyYgZmVhdHVyZXMpCi17Ci0g
ICAgaWYgKGZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzLmVtcHR5KCkgJiYgZmVhdHVyZXMu
aW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzLmVtcHR5KCkgJiYgZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmVt
cHR5KCkgJiYgZmVhdHVyZXMuZG91YmxlRmVhdHVyZXMuZW1wdHkoKSAmJiBmZWF0dXJlcy5zdHJp
bmdGZWF0dXJlcy5lbXB0eSgpICYmIGZlYXR1cmVzLnN0cmluZ1ZlY3RvckZlYXR1cmVzLmVtcHR5
KCkpIHsKLSAgICAgICAgc3RkOjpjZXJyIDw8ICIgIFtFTVBUWV1cbiI7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKCFmZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcy5l
bXB0eSgpKSB7Ci0gICAgICAgIHN0ZDo6Y2VyciA8PCAiICBFeHBlcmltZW50YWwgRmVhdHVyZXM6
IFxuIjsKLSAgICAgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGZlYXR1cmVzLmV4cGVyaW1l
bnRhbEZlYXR1cmVzKQotICAgICAgICAgICAgc3RkOjpjZXJyIDw8ICIgICAgIiA8PCBrZXkgPDwg
IjogIiA8PCB2YWx1ZSA8PCAnXG4nOwotICAgIH0KLSAgICBpZiAoIWZlYXR1cmVzLmludGVybmFs
RGVidWdGZWF0dXJlcy5lbXB0eSgpKSB7Ci0gICAgICAgIHN0ZDo6Y2VyciA8PCAiICBJbnRlcm5h
bCBGZWF0dXJlczogXG4iOwotICAgICAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogZmVhdHVy
ZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzKQotICAgICAgICAgICAgc3RkOjpjZXJyIDw8ICIgICAg
IiA8PCBrZXkgPDwgIjogIiA8PCB2YWx1ZSA8PCAnXG4nOwotICAgIH0KLSAgICBpZiAoIWZlYXR1
cmVzLmJvb2xGZWF0dXJlcy5lbXB0eSgpKSB7Ci0gICAgICAgIHN0ZDo6Y2VyciA8PCAiICBCb29s
IEZlYXR1cmVzOiBcbiI7Ci0gICAgICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBmZWF0dXJl
cy5ib29sRmVhdHVyZXMpCi0gICAgICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgICAiIDw8IGtleSA8
PCAiOiAiIDw8IHZhbHVlIDw8ICdcbic7Ci0gICAgfQotICAgIGlmICghZmVhdHVyZXMuZG91Ymxl
RmVhdHVyZXMuZW1wdHkoKSkgewotICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgRG91YmxlIEZlYXR1
cmVzOiBcbiI7Ci0gICAgICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBmZWF0dXJlcy5kb3Vi
bGVGZWF0dXJlcykKLSAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiICAgICIgPDwga2V5IDw8ICI6
ICIgPDwgdmFsdWUgPDwgJ1xuJzsKLSAgICB9Ci0gICAgaWYgKCFmZWF0dXJlcy5zdHJpbmdGZWF0
dXJlcy5lbXB0eSgpKSB7Ci0gICAgICAgIHN0ZDo6Y2VyciA8PCAiICBTdHJpbmcgRmVhdHVyZXM6
IFxuIjsKLSAgICAgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGZlYXR1cmVzLnN0cmluZ0Zl
YXR1cmVzKQotICAgICAgICAgICAgc3RkOjpjZXJyIDw8ICIgICAgIiA8PCBrZXkgPDwgIjogIiA8
PCB2YWx1ZSA8PCAnXG4nOwotICAgIH0KLSAgICBpZiAoIWZlYXR1cmVzLnN0cmluZ1ZlY3RvckZl
YXR1cmVzLmVtcHR5KCkpIHsKLSAgICAgICAgc3RkOjpjZXJyIDw8ICIgIFN0cmluZyBWZWN0b3Ig
RmVhdHVyZXM6IFxuIjsKLSAgICAgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGZlYXR1cmVz
LnN0cmluZ1ZlY3RvckZlYXR1cmVzKQotICAgICAgICAgICAgc3RkOjpjZXJyIDw8ICIgICAgIiA8
PCBrZXkgPDwgIjogTnVtYmVyIG9mIHN0cmluZ3MgIiA8PCB2YWx1ZS5zaXplKCkgPDwgJ1xuJzsK
LSAgICB9Ci19Ci0jZW5kaWYKLQotdm9pZCBtZXJnZShUZXN0RmVhdHVyZXMmIGJhc2UsIFRlc3RG
ZWF0dXJlcyBhZGRpdGlvbmFsKQotewotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2Ugc3Rk
Ojp1bm9yZGVyZWRfbWFwOjptZXJnZSB3aGVuIGl0IGlzIGF2YWlsYWJsZSBmb3IgYWxsIHBvcnRz
LgotCi0gICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGFkZGl0aW9uYWwuZXhwZXJpbWVudGFs
RmVhdHVyZXMpCi0gICAgICAgIGJhc2UuZXhwZXJpbWVudGFsRmVhdHVyZXMuaW5zZXJ0X29yX2Fz
c2lnbihrZXksIHZhbHVlKTsKLSAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogYWRkaXRpb25h
bC5pbnRlcm5hbERlYnVnRmVhdHVyZXMpCi0gICAgICAgIGJhc2UuaW50ZXJuYWxEZWJ1Z0ZlYXR1
cmVzLmluc2VydF9vcl9hc3NpZ24oa2V5LCB2YWx1ZSk7Ci0gICAgZm9yIChhdXRvIFtrZXksIHZh
bHVlXSA6IGFkZGl0aW9uYWwuYm9vbEZlYXR1cmVzKQotICAgICAgICBiYXNlLmJvb2xGZWF0dXJl
cy5pbnNlcnRfb3JfYXNzaWduKGtleSwgdmFsdWUpOwotICAgIGZvciAoYXV0byBba2V5LCB2YWx1
ZV0gOiBhZGRpdGlvbmFsLmRvdWJsZUZlYXR1cmVzKQotICAgICAgICBiYXNlLmRvdWJsZUZlYXR1
cmVzLmluc2VydF9vcl9hc3NpZ24oa2V5LCB2YWx1ZSk7Ci0gICAgZm9yIChhdXRvIFtrZXksIHZh
bHVlXSA6IGFkZGl0aW9uYWwuc3RyaW5nRmVhdHVyZXMpCi0gICAgICAgIGJhc2Uuc3RyaW5nRmVh
dHVyZXMuaW5zZXJ0X29yX2Fzc2lnbihrZXksIHZhbHVlKTsKLSAgICBmb3IgKGF1dG8gW2tleSwg
dmFsdWVdIDogYWRkaXRpb25hbC5zdHJpbmdWZWN0b3JGZWF0dXJlcykKLSAgICAgICAgYmFzZS5z
dHJpbmdWZWN0b3JGZWF0dXJlcy5pbnNlcnRfb3JfYXNzaWduKGtleSwgdmFsdWUpOwotfQotCiBz
dGF0aWMgY29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBib29sPiYgYm9vbERl
ZmF1bHRzTWFwKCkKIHsKICAgICBzdGF0aWMgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5n
LCBib29sPiBtYXAgewpAQCAtMTgyLDI2OCArMTE3LDc2IEBAIHN0YXRpYyBjb25zdCBzdGQ6OnVu
b3JkZXJlZF9tYXA8c3RkOjpzdHIKICAgICByZXR1cm4gbWFwOwogfQogCi1lbnVtIGNsYXNzIEtl
eVR5cGUgOiB1aW50OF90IHsKLSAgICBCb29sLAotICAgIERvdWJsZSwKLSAgICBTdHJpbmcsCi0g
ICAgU3RyaW5nUmVsYXRpdmVQYXRoLAotICAgIFN0cmluZ1VSTCwKLSAgICBTdHJpbmdWZWN0b3Is
Ci0gICAgVW5rbm93bgotfTsKLQotc3RhdGljIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6
OnN0cmluZywgS2V5VHlwZT4mIGtleVR5cGVNYXAoKQotewotICAgIHN0YXRpYyBzdGQ6OnVub3Jk
ZXJlZF9tYXA8c3RkOjpzdHJpbmcsIEtleVR5cGU+IG1hcCB7Ci0gICAgICAgIHsgImFsbG93Q3Jv
c3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzIiwgS2V5VHlwZTo6Qm9vbCB9
LAotICAgICAgICB7ICJhbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzIiwgS2V5VHlwZTo6Qm9v
bCB9LAotICAgICAgICB7ICJhbGxvd3NMaW5rUHJldmlldyIsIEtleVR5cGU6OkJvb2wgfSwKLSAg
ICAgICAgeyAiZG9tUGFzdGVBbGxvd2VkIiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJk
dW1wSlNDb25zb2xlTG9nSW5TdGRFcnIiLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsgImVk
aXRhYmxlIiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJlbmFibGVBcHBOYXAiLCBLZXlU
eXBlOjpCb29sIH0sCi0gICAgICAgIHsgImVuYWJsZUF0dGFjaG1lbnRFbGVtZW50IiwgS2V5VHlw
ZTo6Qm9vbCB9LAotICAgICAgICB7ICJlbmFibGVCYWNrRm9yd2FyZENhY2hlIiwgS2V5VHlwZTo6
Qm9vbCB9LAotICAgICAgICB7ICJlbmFibGVDYXB0dXJlQXVkaW9JbkdQVVByb2Nlc3MiLCBLZXlU
eXBlOjpCb29sIH0sCi0gICAgICAgIHsgImVuYWJsZUNhcHR1cmVBdWRpb0luVUlQcm9jZXNzIiwg
S2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJlbmFibGVDYXB0dXJlVmlkZW9JbkdQVVByb2Nl
c3MiLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsgImVuYWJsZUNhcHR1cmVWaWRlb0luVUlQ
cm9jZXNzIiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJlbmFibGVDb2xvckZpbHRlciIs
IEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAiZW5hYmxlSW5BcHBCcm93c2VyUHJpdmFjeSIs
IEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAiZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zIiwg
S2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJlbmFibGVLZXlnZW5FbGVtZW50IiwgS2V5VHlw
ZTo6Qm9vbCB9LAotICAgICAgICB7ICJlbmFibGVNZW51SXRlbUVsZW1lbnQiLCBLZXlUeXBlOjpC
b29sIH0sCi0gICAgICAgIHsgImVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMiLCBLZXlUeXBlOjpC
b29sIH0sCi0gICAgICAgIHsgImVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uIiwgS2V5VHlw
ZTo6Qm9vbCB9LAotICAgICAgICB7ICJlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiIsIEtl
eVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAiZW5hYmxlU2VydmljZUNvbnRyb2xzIiwgS2V5VHlw
ZTo6Qm9vbCB9LAotICAgICAgICB7ICJlbmFibGVXZWJBdXRoZW50aWNhdGlvbiIsIEtleVR5cGU6
OkJvb2wgfSwKLSAgICAgICAgeyAiZW5hYmxlV2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRp
Y2F0b3IiLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsgImlnbm9yZVN5bmNocm9ub3VzTWVz
c2FnaW5nVGltZW91dHMiLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsgImlnbm9yZXNWaWV3
cG9ydFNjYWxlTGltaXRzIiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJpc0FwcEJvdW5k
V2ViVmlldyIsIEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAibmVlZHNTaXRlU3BlY2lmaWNR
dWlya3MiLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsgInB1bmNoT3V0V2hpdGVCYWNrZ3Jv
dW5kc0luRGFya01vZGUiLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsgInJ1blNpbmdseSIs
IEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAic2hvdWxkSGFuZGxlUnVuT3BlblBhbmVsIiwg
S2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJzaG91bGRJZ25vcmVNZXRhVmlld3BvcnQiLCBL
ZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsgInNob3VsZFByZXNlbnRQb3BvdmVycyIsIEtleVR5
cGU6OkJvb2wgfSwKLSAgICAgICAgeyAic2hvdWxkU2hvd1RvdWNoZXMiLCBLZXlUeXBlOjpCb29s
IH0sCi0gICAgICAgIHsgInNob3VsZFNob3dXZWJWaWV3IiwgS2V5VHlwZTo6Qm9vbCB9LAotICAg
ICAgICB7ICJzcGVsbENoZWNraW5nRG90cyIsIEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAi
dXNlQWNjZWxlcmF0ZWREcmF3aW5nIiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJ1c2VD
aGFyYWN0ZXJTZWxlY3Rpb25HcmFudWxhcml0eSIsIEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAg
eyAidXNlRGF0YURldGVjdGlvbiIsIEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAidXNlRXBo
ZW1lcmFsU2Vzc2lvbiIsIEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAidXNlRmxleGlibGVW
aWV3cG9ydCIsIEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAidXNlTW9ja1Njcm9sbGJhcnMi
LCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsgInVzZVJlbW90ZUxheWVyVHJlZSIsIEtleVR5
cGU6OkJvb2wgfSwKLSAgICAgICAgeyAidXNlU2VydmljZVdvcmtlclNob3J0VGltZW91dCIsIEtl
eVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAidXNlVGhyZWFkZWRTY3JvbGxpbmciLCBLZXlUeXBl
OjpCb29sIH0sCitjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIFRlc3RIZWFk
ZXJLZXlUeXBlPiYgVGVzdE9wdGlvbnM6OmtleVR5cGVNYXBwaW5nKCkKK3sKKyAgICBzdGF0aWMg
c3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBUZXN0SGVhZGVyS2V5VHlwZT4gbWFwIHsK
KyAgICAgICAgeyAiYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlh
bHMiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJhbGxvd1RvcE5hdmln
YXRpb25Ub0RhdGFVUkxzIiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAi
YWxsb3dzTGlua1ByZXZpZXciLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7
ICJkb21QYXN0ZUFsbG93ZWQiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7
ICJkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAor
ICAgICAgICB7ICJlZGl0YWJsZSIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAg
IHsgImVuYWJsZUFwcE5hcCIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsg
ImVuYWJsZUF0dGFjaG1lbnRFbGVtZW50IiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAg
ICAgICAgeyAiZW5hYmxlQmFja0ZvcndhcmRDYWNoZSIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29s
IH0sCisgICAgICAgIHsgImVuYWJsZUNhcHR1cmVBdWRpb0luR1BVUHJvY2VzcyIsIFRlc3RIZWFk
ZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUNhcHR1cmVBdWRpb0luVUlQcm9j
ZXNzIiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlQ2FwdHVy
ZVZpZGVvSW5HUFVQcm9jZXNzIiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAg
eyAiZW5hYmxlQ2FwdHVyZVZpZGVvSW5VSVByb2Nlc3MiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9v
bCB9LAorICAgICAgICB7ICJlbmFibGVDb2xvckZpbHRlciIsIFRlc3RIZWFkZXJLZXlUeXBlOjpC
b29sIH0sCisgICAgICAgIHsgImVuYWJsZUluQXBwQnJvd3NlclByaXZhY3kiLCBUZXN0SGVhZGVy
S2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMiLCBU
ZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVLZXlnZW5FbGVtZW50
IiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlTWVudUl0ZW1F
bGVtZW50IiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlTW9k
ZXJuTWVkaWFDb250cm9scyIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsg
ImVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uIiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wg
fSwKKyAgICAgICAgeyAiZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW4iLCBUZXN0SGVhZGVy
S2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVTZXJ2aWNlQ29udHJvbHMiLCBUZXN0
SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVXZWJBdXRoZW50aWNhdGlv
biIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZVdlYkF1dGhl
bnRpY2F0aW9uTG9jYWxBdXRoZW50aWNhdG9yIiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwK
KyAgICAgICAgeyAiaWdub3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1lb3V0cyIsIFRlc3RIZWFk
ZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImlnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRz
IiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiaXNBcHBCb3VuZFdlYlZp
ZXciLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJuZWVkc1NpdGVTcGVj
aWZpY1F1aXJrcyIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInB1bmNo
T3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9
LAorICAgICAgICB7ICJydW5TaW5nbHkiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAg
ICAgICB7ICJzaG91bGRIYW5kbGVSdW5PcGVuUGFuZWwiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9v
bCB9LAorICAgICAgICB7ICJzaG91bGRJZ25vcmVNZXRhVmlld3BvcnQiLCBUZXN0SGVhZGVyS2V5
VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJzaG91bGRQcmVzZW50UG9wb3ZlcnMiLCBUZXN0SGVh
ZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJzaG91bGRTaG93VG91Y2hlcyIsIFRlc3RI
ZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInNob3VsZFNob3dXZWJWaWV3IiwgVGVz
dEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAic3BlbGxDaGVja2luZ0RvdHMiLCBU
ZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VBY2NlbGVyYXRlZERyYXdp
bmciLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VDaGFyYWN0ZXJT
ZWxlY3Rpb25HcmFudWxhcml0eSIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAg
IHsgInVzZURhdGFEZXRlY3Rpb24iLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAg
ICB7ICJ1c2VFcGhlbWVyYWxTZXNzaW9uIiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAg
ICAgICAgeyAidXNlRmxleGlibGVWaWV3cG9ydCIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0s
CisgICAgICAgIHsgInVzZU1vY2tTY3JvbGxiYXJzIiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wg
fSwKKyAgICAgICAgeyAidXNlUmVtb3RlTGF5ZXJUcmVlIiwgVGVzdEhlYWRlcktleVR5cGU6OkJv
b2wgfSwKKyAgICAgICAgeyAidXNlU2VydmljZVdvcmtlclNob3J0VGltZW91dCIsIFRlc3RIZWFk
ZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInVzZVRocmVhZGVkU2Nyb2xsaW5nIiwgVGVz
dEhlYWRlcktleVR5cGU6OkJvb2wgfSwKICAgICAKLSAgICAgICAgeyAiY29udGVudEluc2V0LnRv
cCIsIEtleVR5cGU6OkRvdWJsZSB9LAotICAgICAgICB7ICJkZXZpY2VTY2FsZUZhY3RvciIsIEtl
eVR5cGU6OkRvdWJsZSB9LAotICAgICAgICB7ICJ2aWV3SGVpZ2h0IiwgS2V5VHlwZTo6RG91Ymxl
IH0sCi0gICAgICAgIHsgInZpZXdXaWR0aCIsIEtleVR5cGU6OkRvdWJsZSB9LAotCi0gICAgICAg
IHsgImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzIiwgS2V5VHlwZTo6U3RyaW5nIH0sCi0g
ICAgICAgIHsgImFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllciIsIEtleVR5cGU6OlN0cmluZyB9
LAotICAgICAgICB7ICJhcHBsaWNhdGlvbk1hbmlmZXN0IiwgS2V5VHlwZTo6U3RyaW5nUmVsYXRp
dmVQYXRoIH0sCi0gICAgICAgIHsgImNvbnRlbnRNb2RlIiwgS2V5VHlwZTo6U3RyaW5nIH0sCi0g
ICAgICAgIHsgImpzY09wdGlvbnMiLCBLZXlUeXBlOjpTdHJpbmcgfSwKLSAgICAgICAgeyAic3Rh
bmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJMIiwgS2V5VHlwZTo6U3RyaW5nVVJMIH0sCisgICAgICAg
IHsgImNvbnRlbnRJbnNldC50b3AiLCBUZXN0SGVhZGVyS2V5VHlwZTo6RG91YmxlIH0sCisgICAg
ICAgIHsgImRldmljZVNjYWxlRmFjdG9yIiwgVGVzdEhlYWRlcktleVR5cGU6OkRvdWJsZSB9LAor
ICAgICAgICB7ICJ2aWV3SGVpZ2h0IiwgVGVzdEhlYWRlcktleVR5cGU6OkRvdWJsZSB9LAorICAg
ICAgICB7ICJ2aWV3V2lkdGgiLCBUZXN0SGVhZGVyS2V5VHlwZTo6RG91YmxlIH0sCisKKyAgICAg
ICAgeyAiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMiLCBUZXN0SGVhZGVyS2V5VHlwZTo6
U3RyaW5nIH0sCisgICAgICAgIHsgImFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllciIsIFRlc3RI
ZWFkZXJLZXlUeXBlOjpTdHJpbmcgfSwKKyAgICAgICAgeyAiYXBwbGljYXRpb25NYW5pZmVzdCIs
IFRlc3RIZWFkZXJLZXlUeXBlOjpTdHJpbmdSZWxhdGl2ZVBhdGggfSwKKyAgICAgICAgeyAiY29u
dGVudE1vZGUiLCBUZXN0SGVhZGVyS2V5VHlwZTo6U3RyaW5nIH0sCisgICAgICAgIHsgImpzY09w
dGlvbnMiLCBUZXN0SGVhZGVyS2V5VHlwZTo6U3RyaW5nIH0sCisgICAgICAgIHsgInN0YW5kYWxv
bmVXZWJBcHBsaWNhdGlvblVSTCIsIFRlc3RIZWFkZXJLZXlUeXBlOjpTdHJpbmdVUkwgfSwKIAot
ICAgICAgICB7ICJsYW5ndWFnZSIsIEtleVR5cGU6OlN0cmluZ1ZlY3RvciB9LAorICAgICAgICB7
ICJsYW5ndWFnZSIsIFRlc3RIZWFkZXJLZXlUeXBlOjpTdHJpbmdWZWN0b3IgfSwKICAgICB9Owog
CiAgICAgcmV0dXJuIG1hcDsKIH0KIAotc3RhdGljIEtleVR5cGUga2V5VHlwZShzdGQ6OnN0cmlu
ZyBrZXkpCi17Ci0gICAgYXV0byBtYXAgPSBrZXlUeXBlTWFwKCk7Ci0gICAgYXV0byBpdCA9IG1h
cC5maW5kKGtleSk7Ci0gICAgaWYgKGl0ID09IG1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIEtl
eVR5cGU6OlVua25vd247Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7Ci19Ci0KLXN0YXRpYyBib29s
IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZShjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpCi17
Ci0gICAgaWYgKHZhbHVlID09ICJ0cnVlIikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYg
KHZhbHVlID09ICJmYWxzZSIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIExPR19FUlJP
UigiRm91bmQgdW5leHBlY3RlZCB2YWx1ZSAnJXMnIGZvciBib29sZWFuIG9wdGlvbi4gRXhwZWN0
ZWQgJ3RydWUnIG9yICdmYWxzZScuIiwgdmFsdWUuY19zdHIoKSk7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1zdGF0aWMgc3RkOjpzdHJpbmcgcGFyc2VTdHJpbmdUZXN0SGVhZGVyVmFsdWVBc1Jl
bGF0aXZlUGF0aChjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBw
YXRoT3JVUkwpCi17Ci0gICAgYXV0byBiYXNlVVJMID0gYWRvcHRXSyhUZXN0Q29udHJvbGxlcjo6
Y3JlYXRlVGVzdFVSTChwYXRoT3JVUkwuY19zdHIoKSkpOwotICAgIGF1dG8gcmVsYXRpdmVVUkwg
PSBhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aEJhc2VVUkwoYmFzZVVSTC5nZXQoKSwgdmFsdWUuY19z
dHIoKSkpOwotICAgIHJldHVybiB0b1NURChhZG9wdFdLKFdLVVJMQ29weVBhdGgocmVsYXRpdmVV
UkwuZ2V0KCkpKSk7Ci19Ci0KLXN0YXRpYyBzdGQ6OnN0cmluZyBwYXJzZVN0cmluZ1Rlc3RIZWFk
ZXJWYWx1ZUFzVVJMKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9T
VEQoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcoVGVzdENvbnRyb2xsZXI6OmNyZWF0ZVRlc3RVUkwo
dmFsdWUuY19zdHIoKSkpKSk7Ci19Ci0KLXN0YXRpYyBUZXN0RmVhdHVyZXMgcGFyc2VUZXN0SGVh
ZGVyKHN0ZDo6ZmlsZXN5c3RlbTo6cGF0aCBwYXRoLCBjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9y
VVJMKQotewotICAgIFRlc3RGZWF0dXJlcyBmZWF0dXJlczsKLSAgICBpZiAoIXN0ZDo6ZmlsZXN5
c3RlbTo6ZXhpc3RzKHBhdGgpKQotICAgICAgICByZXR1cm4gZmVhdHVyZXM7Ci0KLSAgICBzdGQ6
Omlmc3RyZWFtIGZpbGUocGF0aCk7Ci0gICAgaWYgKCFmaWxlLmdvb2QoKSkgewotICAgICAgICBM
T0dfRVJST1IoIkNvdWxkIG5vdCBvcGVuIGZpbGUgdG8gaW5zcGVjdCB0ZXN0IGhlYWRlcnMgaW4g
JXMiLCBwYXRoLmNfc3RyKCkpOwotICAgICAgICByZXR1cm4gZmVhdHVyZXM7Ci0gICAgfQotCi0g
ICAgc3RkOjpzdHJpbmcgb3B0aW9uczsKLSAgICBnZXRsaW5lKGZpbGUsIG9wdGlvbnMpOwotICAg
IHN0ZDo6c3RyaW5nIGJlZ2luU3RyaW5nKCJ3ZWJraXQtdGVzdC1ydW5uZXIgWyAiKTsKLSAgICBz
dGQ6OnN0cmluZyBlbmRTdHJpbmcoIiBdIik7Ci0gICAgc2l6ZV90IGJlZ2luTG9jYXRpb24gPSBv
cHRpb25zLmZpbmQoYmVnaW5TdHJpbmcpOwotICAgIGlmIChiZWdpbkxvY2F0aW9uID09IHN0ZDo6
c3RyaW5nOjpucG9zKQotICAgICAgICByZXR1cm4gZmVhdHVyZXM7Ci0gICAgc2l6ZV90IGVuZExv
Y2F0aW9uID0gb3B0aW9ucy5maW5kKGVuZFN0cmluZywgYmVnaW5Mb2NhdGlvbik7Ci0gICAgaWYg
KGVuZExvY2F0aW9uID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgICAgIExPR19FUlJPUigi
Q291bGQgbm90IGZpbmQgZW5kIG9mIHRlc3QgaGVhZGVyIGluICVzIiwgcGF0aC5jX3N0cigpKTsK
LSAgICAgICAgcmV0dXJuIGZlYXR1cmVzOwotICAgIH0KLSAgICBzdGQ6OnN0cmluZyBwYWlyU3Ry
aW5nID0gb3B0aW9ucy5zdWJzdHIoYmVnaW5Mb2NhdGlvbiArIGJlZ2luU3RyaW5nLnNpemUoKSwg
ZW5kTG9jYXRpb24gLSAoYmVnaW5Mb2NhdGlvbiArIGJlZ2luU3RyaW5nLnNpemUoKSkpOwotICAg
IHNpemVfdCBwYWlyU3RhcnQgPSAwOwotICAgIHdoaWxlIChwYWlyU3RhcnQgPCBwYWlyU3RyaW5n
LnNpemUoKSkgewotICAgICAgICBzaXplX3QgcGFpckVuZCA9IHBhaXJTdHJpbmcuZmluZCgiICIs
IHBhaXJTdGFydCk7Ci0gICAgICAgIGlmIChwYWlyRW5kID09IHN0ZDo6c3RyaW5nOjpucG9zKQot
ICAgICAgICAgICAgcGFpckVuZCA9IHBhaXJTdHJpbmcuc2l6ZSgpOwotICAgICAgICBzaXplX3Qg
ZXF1YWxzTG9jYXRpb24gPSBwYWlyU3RyaW5nLmZpbmQoIj0iLCBwYWlyU3RhcnQpOwotICAgICAg
ICBpZiAoZXF1YWxzTG9jYXRpb24gPT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAgICAgICAgICAg
IExPR19FUlJPUigiTWFsZm9ybWVkIG9wdGlvbiBpbiB0ZXN0IGhlYWRlciAoY291bGQgbm90IGZp
bmQgJz0nIGNoYXJhY3RlcikgaW4gJXMiLCBwYXRoLmNfc3RyKCkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgYXV0byBrZXkgPSBwYWlyU3RyaW5nLnN1YnN0cihwYWly
U3RhcnQsIGVxdWFsc0xvY2F0aW9uIC0gcGFpclN0YXJ0KTsKLSAgICAgICAgYXV0byB2YWx1ZSA9
IHBhaXJTdHJpbmcuc3Vic3RyKGVxdWFsc0xvY2F0aW9uICsgMSwgcGFpckVuZCAtIChlcXVhbHNM
b2NhdGlvbiArIDEpKTsKLQotICAgICAgICBpZiAoa2V5LnJmaW5kKCJleHBlcmltZW50YWw6Iikg
PT0gMCkgewotICAgICAgICAgICAga2V5ID0ga2V5LnN1YnN0cigxMyk7Ci0gICAgICAgICAgICBm
ZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcy5pbnNlcnQoeyBrZXksIHBhcnNlQm9vbGVhblRl
c3RIZWFkZXJWYWx1ZSh2YWx1ZSkgfSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoa2V5LnJmaW5kKCJp
bnRlcm5hbDoiKSA9PSAwKSB7Ci0gICAgICAgICAgICBrZXkgPSBrZXkuc3Vic3RyKDkpOwotICAg
ICAgICAgICAgZmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzLmluc2VydCh7IGtleSwgcGFy
c2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKSB9KTsKLSAgICAgICAgfQotCi0gICAgICAg
IHN3aXRjaCAoa2V5VHlwZShrZXkpKSB7Ci0gICAgICAgIGNhc2UgS2V5VHlwZTo6Qm9vbDoKLSAg
ICAgICAgICAgIGZlYXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyBrZXksIHBhcnNlQm9vbGVh
blRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSkgfSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBLZXlUeXBlOjpEb3VibGU6Ci0gICAgICAgICAgICBmZWF0dXJlcy5kb3VibGVGZWF0dXJl
cy5pbnNlcnQoeyBrZXksIHN0ZDo6c3RvZCh2YWx1ZSkgfSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBLZXlUeXBlOjpTdHJpbmc6Ci0gICAgICAgICAgICBmZWF0dXJlcy5zdHJp
bmdGZWF0dXJlcy5pbnNlcnQoeyBrZXksIHZhbHVlIH0pOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nUmVsYXRpdmVQYXRoOgotICAgICAgICAgICAgZmVh
dHVyZXMuc3RyaW5nRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJW
YWx1ZUFzUmVsYXRpdmVQYXRoKHZhbHVlLCBwYXRoT3JVUkwpIH0pOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nVVJMOgotICAgICAgICAgICAgZmVhdHVy
ZXMuc3RyaW5nRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1
ZUFzVVJMKHZhbHVlKSB9KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEtleVR5
cGU6OlN0cmluZ1ZlY3RvcjoKLSAgICAgICAgICAgIGZlYXR1cmVzLnN0cmluZ1ZlY3RvckZlYXR1
cmVzLmluc2VydCh7IGtleSwgc3BsaXQodmFsdWUsICcsJykgfSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBLZXlUeXBlOjpVbmtub3duOgotICAgICAgICAgICAgTE9HX0VSUk9S
KCJVbmtub3duIGtleSwgJyVzLCBpbiB0ZXN0IGhlYWRlciBpbiAlcyIsIGtleS5jX3N0cigpLCBw
YXRoLmNfc3RyKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBw
YWlyU3RhcnQgPSBwYWlyRW5kICsgMTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmVhdHVyZXM7Ci19
Ci0KLXN0YXRpYyBib29sIHBhdGhDb250YWlucyhjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJM
LCBjb25zdCBjaGFyKiBzdWJzdHJpbmcpCi17Ci0gICAgU3RyaW5nIHBhdGgocGF0aE9yVVJMLmNf
c3RyKCkpOwotICAgIHJldHVybiBwYXRoLmNvbnRhaW5zKHN1YnN0cmluZyk7IC8vIENhc2UtaW5z
ZW5zaXRpdmUuCi19Ci0KLXN0YXRpYyBib29sIHNob3VsZE1ha2VWaWV3cG9ydEZsZXhpYmxlKGNv
bnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCi17Ci0gICAgcmV0dXJuIHBhdGhDb250YWlucyhw
YXRoT3JVUkwsICJ2aWV3cG9ydC8iKSAmJiAhcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgInZpc3Vh
bC12aWV3cG9ydC8iKTsKLX0KLQotc3RhdGljIGJvb2wgc2hvdWxkVXNlRXBoZW1lcmFsU2Vzc2lv
bihjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQotewotICAgIHJldHVybiBwYXRoQ29udGFp
bnMocGF0aE9yVVJMLCAidzNjL0luZGV4ZWREQi1wcml2YXRlLWJyb3dzaW5nIikgfHwgcGF0aENv
bnRhaW5zKHBhdGhPclVSTCwgInczY1xcSW5kZXhlZERCLXByaXZhdGUtYnJvd3NpbmciKTsKLX0K
LQotc3RhdGljIE9wdGlvbmFsPHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4+IG92ZXJyaWRlVmll
d1dpZHRoQW5kSGVpZ2h0Rm9yVGVzdChjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQotewot
ICAgIGlmIChwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAic3ZnL1czQy1TVkctMS4xIikgfHwgcGF0
aENvbnRhaW5zKHBhdGhPclVSTCwgInN2Z1xcVzNDLVNWRy0xLjEiKSkKLSAgICAgICAgcmV0dXJu
IHsgeyA0ODAsIDM2MCB9IH07Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotc3RhdGlj
IE9wdGlvbmFsPGRvdWJsZT4gb3ZlcnJpZGVEZXZpY2VTY2FsZUZhY3RvckZvclRlc3QoY29uc3Qg
c3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKLXsKLSAgICBpZiAocGF0aENvbnRhaW5zKHBhdGhPclVS
TCwgIi9oaWRwaS0zeC0iKSkKLSAgICAgICAgcmV0dXJuIDM7Ci0gICAgaWYgKHBhdGhDb250YWlu
cyhwYXRoT3JVUkwsICIvaGlkcGktIikpCi0gICAgICAgIHJldHVybiAyOwotICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci19Ci0KLXN0YXRpYyBib29sIHNob3VsZER1bXBKU0NvbnNvbGVMb2dJblN0
ZEVycihjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQotewotICAgIHJldHVybiBwYXRoQ29u
dGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvYmVhY29uIikgfHwgcGF0aENvbnRhaW5z
KHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL2JlYWNvbiIpCi0gICAgICAgIHx8IHBhdGhDb250
YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgwMC9jb3JzIikgfHwgcGF0aENvbnRhaW5zKHBh
dGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL2NvcnMiKQotICAgICAgICB8fCBwYXRoQ29udGFpbnMo
cGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvZmV0Y2giKSB8fCBwYXRoQ29udGFpbnMocGF0aE9y
VVJMLCAibG9jYWxob3N0Ojk0NDMvZmV0Y2giKQotICAgICAgICB8fCBwYXRoQ29udGFpbnMocGF0
aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvc2VydmljZS13b3JrZXJzIikgfHwgcGF0aENvbnRhaW5z
KHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3NlcnZpY2Utd29ya2VycyIpCi0gICAgICAgIHx8
IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgwMC9zdHJlYW1zL3dyaXRhYmxl
LXN0cmVhbXMiKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMvc3Ry
ZWFtcy93cml0YWJsZS1zdHJlYW1zIikKLSAgICAgICAgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVS
TCwgImxvY2FsaG9zdDo4ODAwL3N0cmVhbXMvcGlwaW5nIikgfHwgcGF0aENvbnRhaW5zKHBhdGhP
clVSTCwgImxvY2FsaG9zdDo5NDQzL3N0cmVhbXMvcGlwaW5nIikKLSAgICAgICAgfHwgcGF0aENv
bnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo4ODAwL3hociIpIHx8IHBhdGhDb250YWlucyhw
YXRoT3JVUkwsICJsb2NhbGhvc3Q6OTQ0My94aHIiKQotICAgICAgICB8fCBwYXRoQ29udGFpbnMo
cGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvd2VicnRjIikgfHwgcGF0aENvbnRhaW5zKHBhdGhP
clVSTCwgImxvY2FsaG9zdDo5NDQzL3dlYnJ0YyIpCi0gICAgICAgIHx8IHBhdGhDb250YWlucyhw
YXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgwMC93ZWJzb2NrZXRzIikgfHwgcGF0aENvbnRhaW5zKHBh
dGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3dlYnNvY2tldHMiKTsKLX0KLQotVGVzdEZlYXR1cmVz
IGhhcmRjb2RlZEZlYXR1cmVzQmFzZWRPblBhdGhGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJiBj
b21tYW5kKQotewotICAgIFRlc3RGZWF0dXJlcyBmZWF0dXJlczsKLQotICAgIGlmIChzaG91bGRN
YWtlVmlld3BvcnRGbGV4aWJsZShjb21tYW5kLnBhdGhPclVSTCkpCi0gICAgICAgIGZlYXR1cmVz
LmJvb2xGZWF0dXJlcy5pbnNlcnQoeyAidXNlRmxleGlibGVWaWV3cG9ydCIsIHRydWUgfSk7Ci0g
ICAgaWYgKHNob3VsZFVzZUVwaGVtZXJhbFNlc3Npb24oY29tbWFuZC5wYXRoT3JVUkwpKQotICAg
ICAgICBmZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsgInVzZUVwaGVtZXJhbFNlc3Npb24i
LCB0cnVlIH0pOwotICAgIGlmIChzaG91bGREdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIoY29tbWFu
ZC5wYXRoT3JVUkwpKQotICAgICAgICBmZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsgImR1
bXBKU0NvbnNvbGVMb2dJblN0ZEVyciIsIHRydWUgfSk7Ci0gICAgaWYgKGF1dG8gZGV2aWNlU2Nh
bGVGYWN0b3IgPSBvdmVycmlkZURldmljZVNjYWxlRmFjdG9yRm9yVGVzdChjb21tYW5kLnBhdGhP
clVSTCk7IGRldmljZVNjYWxlRmFjdG9yICE9IFdURjo6bnVsbG9wdCkKLSAgICAgICAgZmVhdHVy
ZXMuZG91YmxlRmVhdHVyZXMuaW5zZXJ0KHsgImRldmljZVNjYWxlRmFjdG9yIiwgZGV2aWNlU2Nh
bGVGYWN0b3IudmFsdWUoKSB9KTsKLSAgICBpZiAoYXV0byB2aWV3V2lkdGhBbmRIZWlnaHQgPSBv
dmVycmlkZVZpZXdXaWR0aEFuZEhlaWdodEZvclRlc3QoY29tbWFuZC5wYXRoT3JVUkwpOyB2aWV3
V2lkdGhBbmRIZWlnaHQgIT0gV1RGOjpudWxsb3B0KSB7Ci0gICAgICAgIGZlYXR1cmVzLmRvdWJs
ZUZlYXR1cmVzLmluc2VydCh7ICJ2aWV3V2lkdGgiLCB2aWV3V2lkdGhBbmRIZWlnaHQtPmZpcnN0
IH0pOwotICAgICAgICBmZWF0dXJlcy5kb3VibGVGZWF0dXJlcy5pbnNlcnQoeyAidmlld0hlaWdo
dCIsIHZpZXdXaWR0aEFuZEhlaWdodC0+c2Vjb25kIH0pOwotICAgIH0KLQotICAgIHJldHVybiBm
ZWF0dXJlczsKLX0KLQotVGVzdEZlYXR1cmVzIGZlYXR1cmVEZWZhdWx0c0Zyb21UZXN0SGVhZGVy
Rm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYgY29tbWFuZCkKLXsKLSAgICByZXR1cm4gcGFyc2VU
ZXN0SGVhZGVyKGNvbW1hbmQuYWJzb2x1dGVQYXRoLCBjb21tYW5kLnBhdGhPclVSTCk7Ci19Ci0K
IFRlc3RPcHRpb25zOjpUZXN0T3B0aW9ucyhUZXN0RmVhdHVyZXMgZmVhdHVyZXMpCiAgICAgOiBt
X2ZlYXR1cmVzIHsgZmVhdHVyZXMgfQogewotI2lmIERVTVBfRkVBVFVSRVMKLSAgICBzdGQ6OmNl
cnIgPDwgIkRVTVBJTkcgRkVBVFVSRVNcbiI7Ci0gICAgZHVtcEZlYXR1cmVzKG1fZmVhdHVyZXMp
OwotI2VuZGlmCiB9CiAKIGJvb2wgVGVzdE9wdGlvbnM6Omhhc1NhbWVJbml0aWFsaXphdGlvbk9w
dGlvbnMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpIGNvbnN0CkBAIC00NTMsMjcgKzE5Niwy
NyBAQCBib29sIFRlc3RPcHRpb25zOjpoYXNTYW1lSW5pdGlhbGl6YXRpb25PCiAgICAgaWYgKG1f
ZmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzICE9IG9wdGlvbnMubV9mZWF0dXJlcy5pbnRl
cm5hbERlYnVnRmVhdHVyZXMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGZvciAoYXV0
byBba2V5LCBrZXlUeXBlXSA6IGtleVR5cGVNYXAoKSkgeworICAgIGZvciAoYXV0byBba2V5LCBr
ZXlUeXBlXSA6IGtleVR5cGVNYXBwaW5nKCkpIHsKICAgICAgICAgc3dpdGNoIChrZXlUeXBlKSB7
Ci0gICAgICAgIGNhc2UgS2V5VHlwZTo6Qm9vbDoKKyAgICAgICAgY2FzZSBUZXN0SGVhZGVyS2V5
VHlwZTo6Qm9vbDoKICAgICAgICAgICAgIGlmIChib29sRmVhdHVyZVZhbHVlKGtleSkgIT0gb3B0
aW9ucy5ib29sRmVhdHVyZVZhbHVlKGtleSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgS2V5VHlwZTo6RG91YmxlOgorICAg
ICAgICBjYXNlIFRlc3RIZWFkZXJLZXlUeXBlOjpEb3VibGU6CiAgICAgICAgICAgICBpZiAoZG91
YmxlRmVhdHVyZVZhbHVlKGtleSkgIT0gb3B0aW9ucy5kb3VibGVGZWF0dXJlVmFsdWUoa2V5KSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBLZXlUeXBlOjpTdHJpbmc6Ci0gICAgICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nUmVs
YXRpdmVQYXRoOgotICAgICAgICBjYXNlIEtleVR5cGU6OlN0cmluZ1VSTDoKKyAgICAgICAgY2Fz
ZSBUZXN0SGVhZGVyS2V5VHlwZTo6U3RyaW5nOgorICAgICAgICBjYXNlIFRlc3RIZWFkZXJLZXlU
eXBlOjpTdHJpbmdSZWxhdGl2ZVBhdGg6CisgICAgICAgIGNhc2UgVGVzdEhlYWRlcktleVR5cGU6
OlN0cmluZ1VSTDoKICAgICAgICAgICAgIGlmIChzdHJpbmdGZWF0dXJlVmFsdWUoa2V5KSAhPSBv
cHRpb25zLnN0cmluZ0ZlYXR1cmVWYWx1ZShrZXkpKQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEtleVR5cGU6OlN0cmluZ1Zl
Y3RvcjoKKyAgICAgICAgY2FzZSBUZXN0SGVhZGVyS2V5VHlwZTo6U3RyaW5nVmVjdG9yOgogICAg
ICAgICAgICAgaWYgKHN0cmluZ1ZlY3RvckZlYXR1cmVWYWx1ZShrZXkpICE9IG9wdGlvbnMuc3Ry
aW5nVmVjdG9yRmVhdHVyZVZhbHVlKGtleSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgS2V5VHlwZTo6VW5rbm93bjoKKyAg
ICAgICAgY2FzZSBUZXN0SGVhZGVyS2V5VHlwZTo6VW5rbm93bjoKICAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9UZXN0T3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvVGVzdE9wdGlvbnMuaAkocmV2aXNpb24gMjY4MzY0KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9UZXN0T3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNw
cmFnbWEgb25jZQogCisjaW5jbHVkZSAiVGVzdEZlYXR1cmVzLmgiCiAjaW5jbHVkZSA8b3B0aW9u
YWw+CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CkBAIC0zMiwy
MiArMzMsNiBAQAogCiBuYW1lc3BhY2UgV1RSIHsKIAotc3RydWN0IFRlc3RDb21tYW5kOwotCi1z
dHJ1Y3QgVGVzdEZlYXR1cmVzIHsKLSAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcs
IGJvb2w+IGV4cGVyaW1lbnRhbEZlYXR1cmVzOwotICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6
OnN0cmluZywgYm9vbD4gaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzOwotICAgIHN0ZDo6dW5vcmRlcmVk
X21hcDxzdGQ6OnN0cmluZywgYm9vbD4gYm9vbEZlYXR1cmVzOwotICAgIHN0ZDo6dW5vcmRlcmVk
X21hcDxzdGQ6OnN0cmluZywgZG91YmxlPiBkb3VibGVGZWF0dXJlczsKLSAgICBzdGQ6OnVub3Jk
ZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiBzdHJpbmdGZWF0dXJlczsKLSAgICBz
dGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPj4g
c3RyaW5nVmVjdG9yRmVhdHVyZXM7Ci19OwotCi12b2lkIG1lcmdlKFRlc3RGZWF0dXJlcyYgYmFz
ZSwgVGVzdEZlYXR1cmVzIGFkZGl0aW9uYWwpOwotCi1UZXN0RmVhdHVyZXMgaGFyZGNvZGVkRmVh
dHVyZXNCYXNlZE9uUGF0aEZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmKTsKLVRlc3RGZWF0dXJl
cyBmZWF0dXJlRGVmYXVsdHNGcm9tVGVzdEhlYWRlckZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQm
KTsKLQogc3RydWN0IENvbnRleHRPcHRpb25zIHsKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmlu
Zz4gb3ZlcnJpZGVMYW5ndWFnZXM7CiAgICAgYm9vbCBpZ25vcmVTeW5jaHJvbm91c01lc3NhZ2lu
Z1RpbWVvdXRzOwpAQCAtNzQsNiArNTksOCBAQCBzdHJ1Y3QgQ29udGV4dE9wdGlvbnMgewogCiBj
bGFzcyBUZXN0T3B0aW9ucyB7CiBwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6dW5vcmRl
cmVkX21hcDxzdGQ6OnN0cmluZywgVGVzdEhlYWRlcktleVR5cGU+JiBrZXlUeXBlTWFwcGluZygp
OworCiAgICAgZXhwbGljaXQgVGVzdE9wdGlvbnMoVGVzdEZlYXR1cmVzKTsKIAogICAgIENvbnRl
eHRPcHRpb25zIGNvbnRleHRPcHRpb25zKCkgY29uc3QKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNjgzNjQpCisrKyBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtMTIwLDYgKzEyMCw4IEBACiAJCTY1MTBBNzhCMTFFQzY0MzgwMDQxMDg2NyAvKiBX
ZWJLaXRXZWlnaHRXYXRjaGVyODAwLnR0ZiBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNjUxMEE3ODAxMUVDNjQzODAwNDEwODY3IC8qIFdlYktpdFdlaWdo
dFdhdGNoZXI4MDAudHRmICovOyB9OwogCQk2NTEwQTc4QzExRUM2NDM4MDA0MTA4NjcgLyogV2Vi
S2l0V2VpZ2h0V2F0Y2hlcjkwMC50dGYgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDY1MTBBNzgxMTFFQzY0MzgwMDQxMDg2NyAvKiBXZWJLaXRXZWlnaHRX
YXRjaGVyOTAwLnR0ZiAqLzsgfTsKIAkJNjVFQjg1QTAxMUVDNjdDQzAwMzREMzAwIC8qIEFjdGl2
YXRlRm9udHNDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDY1RUI4NTlGMTFFQzY3Q0MwMDM0RDMwMCAvKiBBY3RpdmF0ZUZvbnRzQ29jb2EubW0g
Ki87IH07CisJCTdDRkY5QkNBMjUzNEFGMUQwMDA4MDA5RiAvKiBUZXN0RmVhdHVyZXMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NGRjlCQzYyNTM0
QUYxRDAwMDgwMDlGIC8qIFRlc3RGZWF0dXJlcy5jcHAgKi87IH07CisJCTdDRkY5QkNCMjUzNEFG
MUQwMDA4MDA5RiAvKiBUZXN0Q29tbWFuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0ZGOUJDNzI1MzRBRjFEMDAwODAwOUYgLyogVGVzdENvbW1h
bmQuY3BwICovOyB9OwogCQk4MDM0QzY2MjE0ODc2MzY0MDBBQzMyRTkgLyogQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4MDM0QzY2MTE0ODc2MzY0MDBBQzMyRTkgLyogQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXJNYWMubW0gKi87IH07CiAJCTgwOTczMzhBMTQ4NzRBNUEwMDgxNTZEOSAvKiBBY2Nlc3NpYmls
aXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDgwOTczMzg5MTQ4NzRBNUEwMDgxNTZEOSAvKiBBY2Nlc3NpYmlsaXR5
Tm90aWZpY2F0aW9uSGFuZGxlci5tbSAqLzsgfTsKIAkJOTM3NjQxN0EyMTBENzM3MjAwQTNEQUFF
IC8qIFdlYktpdFRlc3RSdW5uZXJXaW5kb3cubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5Mzc2NDE3NjIxMEQ3MzYwMDBBM0RBQUUgLyogV2ViS2l0VGVz
dFJ1bm5lcldpbmRvdy5tbSAqLzsgfTsKQEAgLTM0OSwxMyArMzUxLDE2IEBACiAJCTY1MTBBNzgx
MTFFQzY0MzgwMDQxMDg2NyAvKiBXZWJLaXRXZWlnaHRXYXRjaGVyOTAwLnR0ZiAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZpbGU7IG5hbWUgPSBXZWJL
aXRXZWlnaHRXYXRjaGVyOTAwLnR0ZjsgcGF0aCA9IGZvbnRzL1dlYktpdFdlaWdodFdhdGNoZXI5
MDAudHRmOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NUVCODU5RDExRUM2N0NDMDAz
NEQzMDAgLyogQWN0aXZhdGVGb250cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBY3RpdmF0ZUZvbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1RUI4NTlG
MTFFQzY3Q0MwMDM0RDMwMCAvKiBBY3RpdmF0ZUZvbnRzQ29jb2EubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBY3RpdmF0ZUZvbnRzQ29jb2EubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDRkY5QkM1MjUzNEFGMUQwMDA4MDA5RiAvKiBUZXN0RmVh
dHVyZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gVGVzdEZlYXR1cmVzLmg7
IHBhdGggPSAuLi9UZXN0UnVubmVyU2hhcmVkL1Rlc3RGZWF0dXJlcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3Q0ZGOUJDNjI1MzRBRjFEMDAwODAwOUYgLyogVGVzdEZlYXR1cmVz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFRlc3RGZWF0dXJlcy5j
cHA7IHBhdGggPSAuLi9UZXN0UnVubmVyU2hhcmVkL1Rlc3RGZWF0dXJlcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDRkY5QkM3MjUzNEFGMUQwMDA4MDA5RiAvKiBUZXN0Q29t
bWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBUZXN0Q29tbWFu
ZC5jcHA7IHBhdGggPSAuLi9UZXN0UnVubmVyU2hhcmVkL1Rlc3RDb21tYW5kLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NGRjlCQzgyNTM0QUYxRDAwMDgwMDlGIC8qIFRlc3RD
b21tYW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFRlc3RDb21tYW5kLmg7
IHBhdGggPSAuLi9UZXN0UnVubmVyU2hhcmVkL1Rlc3RDb21tYW5kLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTgwMzRDNjYxMTQ4NzYzNjQwMEFDMzJFOSAvKiBBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4MDk3MzM4ODE0ODc0QTVBMDA4MTU2RDkgLyogQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlv
bkhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWNjZXNzaWJpbGl0
eU5vdGlmaWNhdGlvbkhhbmRsZXIuaDsgcGF0aCA9IG1hYy9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0
aW9uSGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MDk3MzM4OTE0ODc0
QTVBMDA4MTU2RDkgLyogQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0
aW9uSGFuZGxlci5tbTsgcGF0aCA9IG1hYy9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxl
ci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQxQ0MwMEQxODExODVCRjAwNDJF
OUI2IC8qIE9wdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
T3B0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0MUNDMDBFMTgxMTg1
QkYwMDQyRTlCNiAvKiBPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOERENzZGQTEwNDg2QUE3
NjAwRDk2QjVFIC8qIFdlYktpdFRlc3RSdW5uZXIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1
ZGVJbkluZGV4ID0gMDsgcGF0aCA9IFdlYktpdFRlc3RSdW5uZXI7IHNvdXJjZVRyZWUgPSBCVUlM
VF9QUk9EVUNUU19ESVI7IH07Ci0JCTkzMzhEMUJBMjUwQTc5RUIwMEU4MjdGNiAvKiBKU0Jhc2lj
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBKU0Jhc2ljcy5oOyBwYXRoID0gLi4vVGVzdFJ1bm5lclNoYXJl
ZC9CaW5kaW5ncy9KU0Jhc2ljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzM4
RDFCRTI1MEJEOUREMDBFODI3RjYgLyogRGljdGlvbmFyeUZ1bmN0aW9ucy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEaWN0aW9uYXJ5RnVuY3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTkzNzY0MTc2MjEwRDczNjAwMEEzREFBRSAvKiBXZWJLaXRUZXN0UnVubmVyV2luZG93Lm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViS2l0VGVzdFJ1bm5lcldp
bmRvdy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM3NjQxNzcyMTBENzM2MTAw
QTNEQUFFIC8qIFdlYktpdFRlc3RSdW5uZXJXaW5kb3cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViS2l0VGVzdFJ1bm5lcldpbmRvdy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNTQ5LDYgKzU1NCwxMCBAQAogCQkJCTMxNDhBMDU0MUU2Rjg1QjYwMEQzQjMx
NiAvKiBJT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5oICovLAogCQkJCTkzQzc4ODFGMjUwQzY5
RTQwMEMwQUEyNCAvKiBSZWZ0ZXN0RnVuY3Rpb25zLmNwcCAqLywKIAkJCQk5M0M3ODgyMDI1MEM2
OUU0MDBDMEFBMjQgLyogUmVmdGVzdEZ1bmN0aW9ucy5oICovLAorCQkJCTdDRkY5QkM3MjUzNEFG
MUQwMDA4MDA5RiAvKiBUZXN0Q29tbWFuZC5jcHAgKi8sCisJCQkJN0NGRjlCQzgyNTM0QUYxRDAw
MDgwMDlGIC8qIFRlc3RDb21tYW5kLmggKi8sCisJCQkJN0NGRjlCQzYyNTM0QUYxRDAwMDgwMDlG
IC8qIFRlc3RGZWF0dXJlcy5jcHAgKi8sCisJCQkJN0NGRjlCQzUyNTM0QUYxRDAwMDgwMDlGIC8q
IFRlc3RGZWF0dXJlcy5oICovLAogCQkJKTsKIAkJCW5hbWUgPSBUZXN0UnVubmVyU2hhcmVkOwog
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTEyMDksOCArMTIxOCwxMCBAQAogCQkJCTJF
MkE3NjVEMjM3MEM4RDEwMDhGOUZGRSAvKiBQbGF0Zm9ybVZpZXdIZWxwZXJzLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRjQwMTBCN0UyNERBMjA1MzAwQTg3NkUyIC8qIFBvc2VBc0NsYXNzLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMkRGQTk4NDkxRDdGNzBDRjAwQUZGMkM5IC8qIFNoYXJlZEV2ZW50
U3RyZWFtc01hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCTdDRkY5QkNCMjUzNEFGMUQwMDA4MDA5
RiAvKiBUZXN0Q29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTg1MTA0MTFCOUFFMTM4
MDA3NDRBRUIgLyogVGVzdENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE4NTEw
M0IxQjlBRTBFMjAwNzQ0QUVCIC8qIFRlc3RDb250cm9sbGVyQ29jb2EubW0gaW4gU291cmNlcyAq
LywKKwkJCQk3Q0ZGOUJDQTI1MzRBRjFEMDAwODAwOUYgLyogVGVzdEZlYXR1cmVzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUExODUxMDQyMUI5QUUxM0UwMDc0NEFFQiAvKiBUZXN0SW52b2NhdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTg1MTAzRDFCOUFFMTA2MDA3NDRBRUIgLyogVGVz
dEludm9jYXRpb25DRy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjYyMkNFOTFCQkIzQTFBMDA4
MzhBRDMgLyogVGVzdE9wdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCg==
</data>
<flag name="commit-queue"
          id="427273"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411141</attachid>
            <date>2020-10-12 12:20:14 -0700</date>
            <delta_ts>2020-10-12 14:54:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217614-20201012122014.patch</filename>
            <type>text/plain</type>
            <size>93604</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2ODM2NSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDYyIEBACisyMDIwLTEwLTEyICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBTaGFyZSBUZXN0RmVhdHVyZXMgYW5kIFRlc3RDb21tYW5kIGluZnJhc3RydWN0dXJl
IGJldHdlZW4gRHVtcFJlbmRlclRyZWUgYW5kIFdlYktpdFRlc3RSdW5uZXIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzYxNAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgVGVzdEZlYXR1cmVzIGFu
ZCBUZXN0Q29tbWFuZCBjb2RlIGZyb20gV2ViS2l0VGVzdFJ1bm5lciB0byBUZXN0UnVubmVyU2hh
cmVkCisgICAgICAgIGFuZCBhZG9wdCBzaGFyZWQgY29kZSBpbiBib3RoIFdlYktpdFRlc3RSdW5u
ZXIgYW5kIER1bXBSZW5kZXJUcmVlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBhbGxvd3MgdXMg
dG8gcmVtb3ZlIGR1cGxpY2F0ZSBhcmd1bWVudCBhbmQgdGVzdCBoZWFkZXIgcGFyc2luZyBjb2Rl
IGFuZAorICAgICAgICBhdm9pZCB1cGRhdGluZyBib3RoIHdoZW4gd2Ugd2FudCB3YW50IGNoYW5n
ZSB0aGluZ3MuCisgICAgICAgIAorICAgICAgICBUbyBzdXBwb3J0IGRpZmZlcmVudCBzZXRzIG9m
IHRlc3QgaGVhZGVyIG9wdGlvbnMsIGZlYXR1cmVEZWZhdWx0c0Zyb21UZXN0SGVhZGVyRm9yVGVz
dCBub3cKKyAgICAgICAgaGFzIGEgcGFyYW1ldGVyIGZvciBhIGtleSB0eXBlIG1hcCwgcmF0aGVy
IHRoYW4gdGhlIG9sZCBoYXJkY29kZWQgc2V0LiBUaGlzIGFsbG93cworICAgICAgICBXZWJLaXRU
ZXN0UnVubmVyIGFuZCBEdW1wUmVuZGVyVHJlZSwgd2hpY2ggY3VycmVudGx5IGhhdmUgc2xpZ2h0
bHkgZGlmZmVyZW50IG9wdGlvbnMKKyAgICAgICAgdG8gY29udGludWUgdG8gYmVoYXZlIGluIHRo
ZSBzYW1lIHdheS4gRXZlbnR1YWxseSwgaXQgd2lsbCBwcm9iYWJseSBtYWtlIHNlbnNlIHRvIGhh
dmUgdGhlc2UKKyAgICAgICAgbW9zdGx5IGdlbmVyYXRlZCBmcm9tIHRoZSBXZWJQcmVmZXJlbmNl
cyoueWFtbCBjb25maWd1cmF0aW9uIGZpbGVzLgorCisgICAgICAgIE1hdGNoaW5nIHByZWNlZGVu
dCwgc2hhcmVkIGZpbGVzIHVzZSB0aGUgV1RSIG5hbWVzcGFjZS4gCisKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9EdW1w
UmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RSdW5u
ZXJTaGFyZWQvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9DTWFr
ZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgQWRkIG5ldyBmaWxlcy4KKworICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmg6CisgICAgICAgIFJlbW92ZXMg
VGVzdENvbW1hbmQgYW5kIHBhcnNlSW5wdXRMaW5lIG5vdyB0aGF0IHRoZXkgY29tZSBmcm9tIHNo
YXJlZCBUZXN0Q29tbWFuZC5oCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVy
VHJlZUNvbW1vbi5jcHA6IFJlbW92ZWQuCisgICAgICAgIE1vdmVkIGNvbnRlbnRzIHRvIHNoYXJl
ZCBUZXN0Q29tbWFuZC5jcHAKKyAgICAgICAgCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvVGVz
dE9wdGlvbnMuY3BwOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25zLmg6Cisg
ICAgICAgIEFkb3B0IG1vZGVsIGZyb20gV2ViS2l0VGVzdFJ1bm5lciBhbmQgdXNlIGluaXRpYWxp
emF0aW9uIGZyb20gVGVzdEZlYXR1cmVzLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFj
L0R1bXBSZW5kZXJUcmVlLm1tOgorICAgICAgICBBZG9wdCBzaGFyZWQgVGVzdEZlYXR1cmVzIGFu
ZCBUZXN0Q29tbWFuZCBpbmZyYXN0cnVjdHVyZS4gQ29uc3RydWN0IFRlc3RPcHRpb25zCisgICAg
ICAgIGluIGEgc2ltaWxhciBtYW5uZXIgdG8gV2ViS2l0VGVzdFJ1bm5lciBieSBtZXJnaW5nIHRv
Z2V0aGVyIGhhcmRjb2RlZCAvIHBhdGggYmFzZWQKKyAgICAgICAgZmVhdHVyZXMgYW5kIHRlc3Qg
aGVhZGVyIGJhc2VkIGZlYXR1cmVzLgorIAorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9V
SURlbGVnYXRlLmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL1VJRGVsZWdhdGUubW06
CisgICAgICAgIFVwZGF0ZSBmb3IgbmV3IG5hbWVzcGFjZS4KKworICAgICAgICAqIFRlc3RSdW5u
ZXJTaGFyZWQvVGVzdENvbW1hbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBUZXN0UnVubmVyU2hh
cmVkL1Rlc3RDb21tYW5kLmg6IEFkZGVkLgorICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvVGVz
dEZlYXR1cmVzLmNwcDogQWRkZWQuCisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9UZXN0RmVh
dHVyZXMuaDogQWRkZWQuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxl
ci5jcHA6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oOgorICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuY3BwOgorICAgICAgICAqIFdlYktp
dFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuaDoKKyAgICAgICAgTW92ZWQgZnJvbSBXZWJLaXRUZXN0
UnVubmVyLiBHZW5lcmFsaXplZCB0byBUZXN0RmVhdHVyZXMgdG8gdGFrZSBhIGtleSB0eXBlIG1h
cCwKKyAgICAgICAgcmF0aGVyIHRoYW4gaGFyZCBjb2RpbmcgaXQuIFJlcGxhY2UgdXNlIG9mIFdl
YktpdCB0eXBlcywgbGlrZSBXS1VSTFJlZiwgd2l0aCBzdGQ6OnN0cmluZworICAgICAgICBhbmQg
c3RkOjpmaWxlc3lzdGVtOjpwYXRoLgorCiAyMDIwLTEwLTEyICBMdW1pbmcgWWluICA8bHVtaW5n
X3lpbkBhcHBsZS5jb20+CiAKICAgICAgICAgW21hY09TXSBXb3JrYXJvdW5kIGZvciBNQUNfT1Nf
WF9WRVJTSU9OX01BSk9SIGluY29ycmVjdGx5IGluY2x1ZGluZyBtaW5vciB2ZXJzaW9uIHdoZW4g
YnVpbGRpbmcgCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9DTWFrZUxpc3RzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24g
MjY4MzY1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTEwLDcgKzEwLDYgQEAgc2V0KER1bXBSZW5kZXJUcmVlX1NPVVJDRVMKICAgICBB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlci5jcHAKICAgICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNw
cAogICAgIEN5Y2xpY1JlZHVuZGFuY3lDaGVjay5jcHAKLSAgICBEdW1wUmVuZGVyVHJlZUNvbW1v
bi5jcHAKICAgICBHQ0NvbnRyb2xsZXIuY3BwCiAgICAgSmF2YVNjcmlwdFRocmVhZGluZy5jcHAK
ICAgICBQaXhlbER1bXBTdXBwb3J0LmNwcApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVt
cFJlbmRlclRyZWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVu
ZGVyVHJlZS5oCShyZXZpc2lvbiAyNjgzNjUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1w
UmVuZGVyVHJlZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxNCArNTQsMyBAQCBleHRlcm4gUmVm
UHRyPFRlc3RSdW5uZXI+IGdUZXN0UnVubmVyOwogdm9pZCBkdW1wKCk7CiB2b2lkIGRpc3BsYXlX
ZWJWaWV3KCk7CiB2b2lkIGRpc3BsYXlBbmRUcmFja1JlcGFpbnRzV2ViVmlldygpOwotCi1zdHJ1
Y3QgVGVzdENvbW1hbmQgewotICAgIHN0ZDo6c3RyaW5nIHBhdGhPclVSTDsKLSAgICBzdGQ6OnN0
cmluZyBhYnNvbHV0ZVBhdGg7Ci0gICAgYm9vbCBzaG91bGREdW1wUGl4ZWxzIHsgZmFsc2UgfTsK
LSAgICBzdGQ6OnN0cmluZyBleHBlY3RlZFBpeGVsSGFzaDsKLSAgICBpbnQgdGltZW91dCB7IDMw
MDAwIH07IC8vIGluIG1zCi0gICAgYm9vbCBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgeyBmYWxz
ZSB9OwotfTsKLQotVGVzdENvbW1hbmQgcGFyc2VJbnB1dExpbmUoY29uc3Qgc3RkOjpzdHJpbmcm
KTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZUNvbW1vbi5j
cHAJKHJldmlzaW9uIDI2ODM2NSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJU
cmVlQ29tbW9uLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDExNCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5j
bHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgot
I2luY2x1ZGUgPHN0cmluZz4KLQotY2xhc3MgQ29tbWFuZFRva2VuaXplciB7Ci1wdWJsaWM6Ci0g
ICAgZXhwbGljaXQgQ29tbWFuZFRva2VuaXplcihjb25zdCBzdGQ6OnN0cmluZyYgaW5wdXQpCi0g
ICAgICAgIDogbV9pbnB1dChpbnB1dCkKLSAgICAgICAgLCBtX3Bvc05leHRTZXBhcmF0b3IoMCkK
LSAgICB7Ci0gICAgICAgIHB1bXAoKTsKLSAgICB9Ci0KLSAgICBib29sIGhhc05leHQoKSBjb25z
dDsKLSAgICBzdGQ6OnN0cmluZyBuZXh0KCk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBwdW1wKCk7
Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIga1NlcGFyYXRvciA9ICdcJyc7Ci0gICAgY29uc3Qgc3Rk
OjpzdHJpbmcmIG1faW5wdXQ7Ci0gICAgc3RkOjpzdHJpbmcgbV9uZXh0OwotICAgIHNpemVfdCBt
X3Bvc05leHRTZXBhcmF0b3I7Ci19OwotCi12b2lkIENvbW1hbmRUb2tlbml6ZXI6OnB1bXAoKQot
ewotICAgIGlmIChtX3Bvc05leHRTZXBhcmF0b3IgPT0gc3RkOjpzdHJpbmc6Om5wb3MgfHwgbV9w
b3NOZXh0U2VwYXJhdG9yID09IG1faW5wdXQuc2l6ZSgpKSB7Ci0gICAgICAgIG1fbmV4dCA9IHN0
ZDo6c3RyaW5nKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc2l6ZV90IHN0YXJ0ID0g
bV9wb3NOZXh0U2VwYXJhdG9yID8gbV9wb3NOZXh0U2VwYXJhdG9yICsgMSA6IDA7Ci0gICAgbV9w
b3NOZXh0U2VwYXJhdG9yID0gbV9pbnB1dC5maW5kKGtTZXBhcmF0b3IsIHN0YXJ0KTsKLSAgICBz
aXplX3Qgc2l6ZSA9IG1fcG9zTmV4dFNlcGFyYXRvciA9PSBzdGQ6OnN0cmluZzo6bnBvcyA/IHN0
ZDo6c3RyaW5nOjpucG9zIDogbV9wb3NOZXh0U2VwYXJhdG9yIC0gc3RhcnQ7Ci0gICAgbV9uZXh0
ID0gc3RkOjpzdHJpbmcobV9pbnB1dCwgc3RhcnQsIHNpemUpOwotfQotCi1zdGQ6OnN0cmluZyBD
b21tYW5kVG9rZW5pemVyOjpuZXh0KCkKLXsKLSAgICBBU1NFUlQoaGFzTmV4dCgpKTsKLQotICAg
IHN0ZDo6c3RyaW5nIG9sZE5leHQgPSBtX25leHQ7Ci0gICAgcHVtcCgpOwotICAgIHJldHVybiBv
bGROZXh0OwotfQotCi1ib29sIENvbW1hbmRUb2tlbml6ZXI6Omhhc05leHQoKSBjb25zdAotewot
ICAgIHJldHVybiAhbV9uZXh0LmVtcHR5KCk7Ci19Ci0KLU5PX1JFVFVSTiBzdGF0aWMgdm9pZCBk
aWUoY29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0TGluZSkKLXsKLSAgICBmcHJpbnRmKHN0ZGVyciwg
IlVuZXhwZWN0ZWQgaW5wdXQgbGluZTogJXNcbiIsIGlucHV0TGluZS5jX3N0cigpKTsKLSAgICBl
eGl0KDEpOwotfQotCi1UZXN0Q29tbWFuZCBwYXJzZUlucHV0TGluZShjb25zdCBzdGQ6OnN0cmlu
ZyYgaW5wdXRMaW5lKQotewotICAgIFRlc3RDb21tYW5kIHJlc3VsdDsKLSAgICBDb21tYW5kVG9r
ZW5pemVyIHRva2VuaXplcihpbnB1dExpbmUpOwotICAgIGlmICghdG9rZW5pemVyLmhhc05leHQo
KSkKLSAgICAgICAgZGllKGlucHV0TGluZSk7Ci0KLSAgICBzdGQ6OnN0cmluZyBhcmcgPSB0b2tl
bml6ZXIubmV4dCgpOwotICAgIHJlc3VsdC5wYXRoT3JVUkwgPSBhcmc7Ci0gICAgd2hpbGUgKHRv
a2VuaXplci5oYXNOZXh0KCkpIHsKLSAgICAgICAgYXJnID0gdG9rZW5pemVyLm5leHQoKTsKLSAg
ICAgICAgaWYgKGFyZyA9PSAiLS10aW1lb3V0IikgewotICAgICAgICAgICAgc3RkOjpzdHJpbmcg
dGltZW91dFRva2VuID0gdG9rZW5pemVyLm5leHQoKTsKLSAgICAgICAgICAgIHJlc3VsdC50aW1l
b3V0ID0gYXRvaSh0aW1lb3V0VG9rZW4uY19zdHIoKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoYXJn
ID09ICItcCIgfHwgYXJnID09ICItLXBpeGVsLXRlc3QiKSB7Ci0gICAgICAgICAgICByZXN1bHQu
c2hvdWxkRHVtcFBpeGVscyA9IHRydWU7Ci0gICAgICAgICAgICBpZiAodG9rZW5pemVyLmhhc05l
eHQoKSkKLSAgICAgICAgICAgICAgICByZXN1bHQuZXhwZWN0ZWRQaXhlbEhhc2ggPSB0b2tlbml6
ZXIubmV4dCgpOwotICAgICAgICB9IGVsc2UgaWYgKGFyZyA9PSAiLS1kdW1wLWpzY29uc29sZWxv
Zy1pbi1zdGRlcnIiKQotICAgICAgICAgICAgcmVzdWx0LmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVy
ciA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKGFyZyA9PSBzdGQ6OnN0cmluZygiLS1hYnNvbHV0
ZVBhdGgiKSkKLSAgICAgICAgICAgIHJlc3VsdC5hYnNvbHV0ZVBhdGggPSB0b2tlbml6ZXIubmV4
dCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkaWUoaW5wdXRMaW5lKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE9w
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25z
LmNwcAkocmV2aXNpb24gMjY4MzY1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlv
bnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNDAgKzI2LDgzIEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiVGVzdE9wdGlvbnMuaCIKIAorI2luY2x1ZGUgIlRlc3RGZWF0dXJl
cy5oIgogI2luY2x1ZGUgPGZzdHJlYW0+CiAjaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCi1zdGF0aWMgYm9vbCBwYXJzZUJvb2xlYW5UZXN0SGVhZGVy
VmFsdWUoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAidHJ1
ZSIpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICh2YWx1ZSA9PSAiZmFsc2UiKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBMT0dfRVJST1IoIkZvdW5kIHVuZXhwZWN0ZWQgdmFs
dWUgJyVzJyBmb3IgYm9vbGVhbiBvcHRpb24uIEV4cGVjdGVkICd0cnVlJyBvciAnZmFsc2UnLiIs
IHZhbHVlLmNfc3RyKCkpOwotICAgIHJldHVybiBmYWxzZTsKLX0KK25hbWVzcGFjZSBXVFIgewog
Ci1zdGF0aWMgYm9vbCBwYXRoQ29udGFpbnMoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCwg
Y29uc3QgY2hhciogc3Vic3RyaW5nKQorY29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3Ry
aW5nLCBUZXN0SGVhZGVyS2V5VHlwZT4mIFRlc3RPcHRpb25zOjprZXlUeXBlTWFwcGluZygpCiB7
Ci0gICAgU3RyaW5nIHBhdGgocGF0aE9yVVJMLmNfc3RyKCkpOwotICAgIHJldHVybiBwYXRoLmNv
bnRhaW5zKHN1YnN0cmluZyk7Ci19CisgICAgc3RhdGljIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6
OnN0cmluZywgVGVzdEhlYWRlcktleVR5cGU+IG1hcCB7CisgICAgICAgIHsgImFsbG93Q3Jvc3NP
cmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzIiwgVGVzdEhlYWRlcktleVR5cGU6
OkJvb2wgfSwKKyAgICAgICAgeyAiYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyIsIFRlc3RI
ZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImR1bXBKU0NvbnNvbGVMb2dJblN0ZEVy
ciIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUF0dGFjaG1l
bnRFbGVtZW50IiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxl
QmFja0ZvcndhcmRDYWNoZSIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsg
ImVuYWJsZUNvbG9yRmlsdGVyIiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAg
eyAiZW5hYmxlRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTG9hZCIsIFRlc3RIZWFkZXJLZXlUeXBlOjpC
b29sIH0sCisgICAgICAgIHsgImVuYWJsZUluc3BlY3RvckFkZGl0aW9ucyIsIFRlc3RIZWFkZXJL
ZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUludGVyc2VjdGlvbk9ic2VydmVyIiwg
VGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlS2V5Z2VuRWxlbWVu
dCIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZU1lbnVJdGVt
RWxlbWVudCIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZU1v
ZGVybk1lZGlhQ29udHJvbHMiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7
ICJlbmFibGVQb2ludGVyTG9jayIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAg
IHsgImxheWVyQmFja2VkV2ViVmlldyIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAg
ICAgIHsgInVzZUFjY2VsZXJhdGVkRHJhd2luZyIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0s
CisgICAgICAgIHsgInVzZUVwaGVtZXJhbFNlc3Npb24iLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9v
bCB9LAorCisgICAgICAgIHsgImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzIiwgVGVzdEhl
YWRlcktleVR5cGU6OlN0cmluZyB9LAorICAgICAgICB7ICJqc2NPcHRpb25zIiwgVGVzdEhlYWRl
cktleVR5cGU6OlN0cmluZyB9LAorICAgIH07CiAKLXN0YXRpYyBib29sIHNob3VsZER1bXBKU0Nv
bnNvbGVMb2dJblN0ZEVycihjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQotewotICAgIHJl
dHVybiBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvYmVhY29uIikgfHwg
cGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL2JlYWNvbiIpCi0gICAgICAg
IHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgwMC9jb3JzIikgfHwgcGF0
aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL2NvcnMiKQotICAgICAgICB8fCBw
YXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvZmV0Y2giKSB8fCBwYXRoQ29u
dGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMvZmV0Y2giKQotICAgICAgICB8fCBwYXRo
Q29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvc2VydmljZS13b3JrZXJzIikgfHwg
cGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3NlcnZpY2Utd29ya2VycyIp
Ci0gICAgICAgIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgwMC9zdHJl
YW1zL3dyaXRhYmxlLXN0cmVhbXMiKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxo
b3N0Ojk0NDMvc3RyZWFtcy93cml0YWJsZS1zdHJlYW1zIikKLSAgICAgICAgfHwgcGF0aENvbnRh
aW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo4ODAwL3N0cmVhbXMvcGlwaW5nIikgfHwgcGF0aENv
bnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3N0cmVhbXMvcGlwaW5nIikKLSAgICAg
ICAgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo4ODAwL3hociIpIHx8IHBh
dGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6OTQ0My94aHIiKQotICAgICAgICB8fCBw
YXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvd2VicnRjIikgfHwgcGF0aENv
bnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3dlYnJ0YyIpCi0gICAgICAgIHx8IHBh
dGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgwMC93ZWJzb2NrZXRzIikgfHwgcGF0
aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3dlYnNvY2tldHMiKTsKKyAgICBy
ZXR1cm4gbWFwOwogfQogCi1UZXN0T3B0aW9uczo6VGVzdE9wdGlvbnMoY29uc3Qgc3RkOjpzdHJp
bmcmIHBhdGhPclVSTCwgY29uc3Qgc3RkOjpzdHJpbmcmIGFic29sdXRlUGF0aCkKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIHNldFZhbHVlSWZTZXRJbk1hcChUJiB2YWx1ZVRvU2V0
LCBzdGQ6OnN0cmluZyBrZXksIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywg
VD4mIG1hcCkKIHsKLSAgICBjb25zdCBhdXRvJiBwYXRoID0gYWJzb2x1dGVQYXRoLmVtcHR5KCkg
PyBwYXRoT3JVUkwgOiBhYnNvbHV0ZVBhdGg7Ci0gICAgaWYgKHBhdGguZW1wdHkoKSkKKyAgICBh
dXRvIGl0ID0gbWFwLmZpbmQoa2V5KTsKKyAgICBpZiAoaXQgPT0gbWFwLmVuZCgpKQogICAgICAg
ICByZXR1cm47CisgICAgdmFsdWVUb1NldCA9IGl0LT5zZWNvbmQ7Cit9CiAKLSAgICBkdW1wSlND
b25zb2xlTG9nSW5TdGRFcnIgPSBzaG91bGREdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIocGF0aE9y
VVJMKTsKLQotICAgIHN0ZDo6c3RyaW5nIG9wdGlvbnM7Ci0gICAgc3RkOjppZnN0cmVhbSB0ZXN0
RmlsZShwYXRoLmRhdGEoKSk7Ci0gICAgaWYgKCF0ZXN0RmlsZS5nb29kKCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBnZXRsaW5lKHRlc3RGaWxlLCBvcHRpb25zKTsKLSAgICBzdGQ6OnN0cmluZyBi
ZWdpblN0cmluZygid2Via2l0LXRlc3QtcnVubmVyIFsgIik7Ci0gICAgc3RkOjpzdHJpbmcgZW5k
U3RyaW5nKCIgXSIpOwotICAgIHNpemVfdCBiZWdpbkxvY2F0aW9uID0gb3B0aW9ucy5maW5kKGJl
Z2luU3RyaW5nKTsKLSAgICBpZiAoYmVnaW5Mb2NhdGlvbiA9PSBzdGQ6OnN0cmluZzo6bnBvcykK
LSAgICAgICAgcmV0dXJuOwotICAgIHNpemVfdCBlbmRMb2NhdGlvbiA9IG9wdGlvbnMuZmluZChl
bmRTdHJpbmcsIGJlZ2luTG9jYXRpb24pOwotICAgIGlmIChlbmRMb2NhdGlvbiA9PSBzdGQ6OnN0
cmluZzo6bnBvcykgewotICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBmaW5kIGVuZCBvZiB0
ZXN0IGhlYWRlciBpbiAlcyIsIHBhdGguY19zdHIoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgc3RkOjpzdHJpbmcgcGFpclN0cmluZyA9IG9wdGlvbnMuc3Vic3RyKGJlZ2luTG9jYXRp
b24gKyBiZWdpblN0cmluZy5zaXplKCksIGVuZExvY2F0aW9uIC0gKGJlZ2luTG9jYXRpb24gKyBi
ZWdpblN0cmluZy5zaXplKCkpKTsKLSAgICBzaXplX3QgcGFpclN0YXJ0ID0gMDsKLSAgICB3aGls
ZSAocGFpclN0YXJ0IDwgcGFpclN0cmluZy5zaXplKCkpIHsKLSAgICAgICAgc2l6ZV90IHBhaXJF
bmQgPSBwYWlyU3RyaW5nLmZpbmQoIiAiLCBwYWlyU3RhcnQpOwotICAgICAgICBpZiAocGFpckVu
ZCA9PSBzdGQ6OnN0cmluZzo6bnBvcykKLSAgICAgICAgICAgIHBhaXJFbmQgPSBwYWlyU3RyaW5n
LnNpemUoKTsKLSAgICAgICAgc2l6ZV90IGVxdWFsc0xvY2F0aW9uID0gcGFpclN0cmluZy5maW5k
KCI9IiwgcGFpclN0YXJ0KTsKLSAgICAgICAgaWYgKGVxdWFsc0xvY2F0aW9uID09IHN0ZDo6c3Ry
aW5nOjpucG9zKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIk1hbGZvcm1lZCBvcHRpb24gaW4g
dGVzdCBoZWFkZXIgKGNvdWxkIG5vdCBmaW5kICc9JyBjaGFyYWN0ZXIpIGluICVzIiwgcGF0aC5j
X3N0cigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGF1dG8ga2V5
ID0gcGFpclN0cmluZy5zdWJzdHIocGFpclN0YXJ0LCBlcXVhbHNMb2NhdGlvbiAtIHBhaXJTdGFy
dCk7Ci0gICAgICAgIGF1dG8gdmFsdWUgPSBwYWlyU3RyaW5nLnN1YnN0cihlcXVhbHNMb2NhdGlv
biArIDEsIHBhaXJFbmQgLSAoZXF1YWxzTG9jYXRpb24gKyAxKSk7Ci0gICAgICAgIGlmIChrZXkg
PT0gImVuYWJsZUF0dGFjaG1lbnRFbGVtZW50IikKLSAgICAgICAgICAgIGVuYWJsZUF0dGFjaG1l
bnRFbGVtZW50ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAg
aWYgKGtleSA9PSAidXNlQWNjZWxlcmF0ZWREcmF3aW5nIikKLSAgICAgICAgICAgIHVzZUFjY2Vs
ZXJhdGVkRHJhd2luZyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAg
ICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiKQotICAgICAg
ICAgICAgZW5hYmxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVy
VmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInVzZUVwaGVtZXJhbFNlc3Np
b24iKQotICAgICAgICAgICAgdXNlRXBoZW1lcmFsU2Vzc2lvbiA9IHBhcnNlQm9vbGVhblRlc3RI
ZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlQmFja0Zv
cndhcmRDYWNoZSIpCi0gICAgICAgICAgICBlbmFibGVCYWNrRm9yd2FyZENhY2hlID0gcGFyc2VC
b29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJl
bmFibGVNZW51SXRlbUVsZW1lbnQiKQotICAgICAgICAgICAgZW5hYmxlTWVudUl0ZW1FbGVtZW50
ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAo
a2V5ID09ICJlbmFibGVLZXlnZW5FbGVtZW50IikKLSAgICAgICAgICAgIGVuYWJsZUtleWdlbkVs
ZW1lbnQgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNl
IGlmIChrZXkgPT0gImVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMiKQotICAgICAgICAgICAgZW5h
YmxlTW9kZXJuTWVkaWFDb250cm9scyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1
ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlUG9pbnRlckxvY2siKQotICAgICAg
ICAgICAgZW5hYmxlUG9pbnRlckxvY2sgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFs
dWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZURyYWdEZXN0aW5hdGlvbkFjdGlv
bkxvYWQiKQotICAgICAgICAgICAgZW5hYmxlRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTG9hZCA9IHBh
cnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9
PSAibGF5ZXJCYWNrZWRXZWJWaWV3IikKLSAgICAgICAgICAgIGxheWVyQmFja2VkV2ViVmlldyA9
IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtl
eSA9PSAiZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zIikKLSAgICAgICAgICAgIGVuYWJsZUluc3Bl
Y3RvckFkZGl0aW9ucyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAg
ICAgIGVsc2UgaWYgKGtleSA9PSAiZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIikKLSAgICAgICAg
ICAgIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1
ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiYWxsb3dDcm9zc09yaWdpblN1YnJl
c291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMiKQotICAgICAgICAgICAgYWxsb3dDcm9zc09yaWdp
blN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVy
VmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImludGVybmFsOnNlbGVjdGlv
bkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkIikKLSAgICAgICAgICAgIGVuYWJsZVNlbGVj
dGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXMgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUo
dmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUNvbG9yRmlsdGVyIikKLSAg
ICAgICAgICAgIGVuYWJsZUNvbG9yRmlsdGVyID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVl
KHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJqc2NPcHRpb25zIikKLSAgICAgICAg
ICAgIGpzY09wdGlvbnMgPSB2YWx1ZTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJhZGRpdGlv
bmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyIpCi0gICAgICAgICAgICBhZGRpdGlvbmFsU3VwcG9ydGVk
SW1hZ2VUeXBlcyA9IHZhbHVlOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImV4cGVyaW1lbnRh
bDpXZWJHUFVFbmFibGVkIikKLSAgICAgICAgICAgIGVuYWJsZVdlYkdQVSA9IHBhcnNlQm9vbGVh
blRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiaW50ZXJu
YWw6Q1NTTG9naWNhbEVuYWJsZWQiKQotICAgICAgICAgICAgZW5hYmxlQ1NTTG9naWNhbCA9IHBh
cnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9
PSAiaW50ZXJuYWw6TGluZUhlaWdodFVuaXRzRW5hYmxlZCIpCi0gICAgICAgICAgICBlbmFibGVM
aW5lSGVpZ2h0VW5pdHMgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAg
ICAgICBlbHNlIGlmIChrZXkgPT0gImV4cGVyaW1lbnRhbDpBZENsaWNrQXR0cmlidXRpb25FbmFi
bGVkIikKLSAgICAgICAgICAgIGFkQ2xpY2tBdHRyaWJ1dGlvbkVuYWJsZWQgPSBwYXJzZUJvb2xl
YW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImV4cGVy
aW1lbnRhbDpSZXNpemVPYnNlcnZlckVuYWJsZWQiKQotICAgICAgICAgICAgZW5hYmxlUmVzaXpl
T2JzZXJ2ZXIgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBl
bHNlIGlmIChrZXkgPT0gImV4cGVyaW1lbnRhbDpDU1NPTVZpZXdTbW9vdGhTY3JvbGxpbmdFbmFi
bGVkIikKLSAgICAgICAgICAgIGVuYWJsZUNTU09NVmlld1Ntb290aFNjcm9sbGluZyA9IHBhcnNl
Qm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAi
ZXhwZXJpbWVudGFsOkNvcmVNYXRoTUxFbmFibGVkIikKLSAgICAgICAgICAgIGVuYWJsZUNvcmVN
YXRoTUwgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNl
IGlmIChrZXkgPT0gImV4cGVyaW1lbnRhbDpSZXF1ZXN0SWRsZUNhbGxiYWNrRW5hYmxlZCIpCi0g
ICAgICAgICAgICBlbmFibGVSZXF1ZXN0SWRsZUNhbGxiYWNrID0gcGFyc2VCb29sZWFuVGVzdEhl
YWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJleHBlcmltZW50YWw6
QXN5bmNDbGlwYm9hcmRBUElFbmFibGVkIikKLSAgICAgICAgICAgIGVuYWJsZUFzeW5jQ2xpcGJv
YXJkQVBJID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxz
ZSBpZiAoa2V5ID09ICJpbnRlcm5hbDpMYXlvdXRGb3JtYXR0aW5nQ29udGV4dEludGVncmF0aW9u
RW5hYmxlZCIpCi0gICAgICAgICAgICBsYXlvdXRGb3JtYXR0aW5nQ29udGV4dEludGVncmF0aW9u
RW5hYmxlZCA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVs
c2UgaWYgKGtleSA9PSAiZXhwZXJpbWVudGFsOkFzcGVjdFJhdGlvT2ZJbWdGcm9tV2lkdGhBbmRI
ZWlnaHRFbmFibGVkIikKLSAgICAgICAgICAgIGVuYWJsZUFzcGVjdFJhdGlvT2ZJbWdGcm9tV2lk
dGhBbmRIZWlnaHQgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAg
ICBlbHNlIGlmIChrZXkgPT0gImFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMiKQotICAgICAg
ICAgICAgYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyA9IHBhcnNlQm9vbGVhblRlc3RIZWFk
ZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZXhwZXJpbWVudGFsOkNv
bnRhY3RQaWNrZXJBUElFbmFibGVkIikKLSAgICAgICAgICAgIGVuYWJsZUNvbnRhY3RQaWNrZXJB
UEkgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBwYWlyU3Rh
cnQgPSBwYWlyRW5kICsgMTsKLSAgICB9CitUZXN0T3B0aW9uczo6VGVzdE9wdGlvbnMoVGVzdEZl
YXR1cmVzIHRlc3RGZWF0dXJlcykKK3sKKyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoYWxsb3dDcm9z
c09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMsICJhbGxvd0Nyb3NzT3JpZ2lu
U3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscyIsIHRlc3RGZWF0dXJlcy5ib29sRmVhdHVy
ZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChhbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxz
LCAiYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyIsIHRlc3RGZWF0dXJlcy5ib29sRmVhdHVy
ZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIsICJk
dW1wSlNDb25zb2xlTG9nSW5TdGRFcnIiLCB0ZXN0RmVhdHVyZXMuYm9vbEZlYXR1cmVzKTsKKyAg
ICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlQXR0YWNobWVudEVsZW1lbnQsICJlbmFibGVBdHRh
Y2htZW50RWxlbWVudCIsIHRlc3RGZWF0dXJlcy5ib29sRmVhdHVyZXMpOworICAgIHNldFZhbHVl
SWZTZXRJbk1hcChlbmFibGVCYWNrRm9yd2FyZENhY2hlLCAiZW5hYmxlQmFja0ZvcndhcmRDYWNo
ZSIsIHRlc3RGZWF0dXJlcy5ib29sRmVhdHVyZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChl
bmFibGVDb2xvckZpbHRlciwgImVuYWJsZUNvbG9yRmlsdGVyIiwgdGVzdEZlYXR1cmVzLmJvb2xG
ZWF0dXJlcyk7CisgICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZURyYWdEZXN0aW5hdGlvbkFj
dGlvbkxvYWQsICJlbmFibGVEcmFnRGVzdGluYXRpb25BY3Rpb25Mb2FkIiwgdGVzdEZlYXR1cmVz
LmJvb2xGZWF0dXJlcyk7CisgICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUluc3BlY3RvckFk
ZGl0aW9ucywgImVuYWJsZUluc3BlY3RvckFkZGl0aW9ucyIsIHRlc3RGZWF0dXJlcy5ib29sRmVh
dHVyZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVJbnRlcnNlY3Rpb25PYnNlcnZl
ciwgImVuYWJsZUludGVyc2VjdGlvbk9ic2VydmVyIiwgdGVzdEZlYXR1cmVzLmJvb2xGZWF0dXJl
cyk7CisgICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUtleWdlbkVsZW1lbnQsICJlbmFibGVL
ZXlnZW5FbGVtZW50IiwgdGVzdEZlYXR1cmVzLmJvb2xGZWF0dXJlcyk7CisgICAgc2V0VmFsdWVJ
ZlNldEluTWFwKGVuYWJsZU1lbnVJdGVtRWxlbWVudCwgImVuYWJsZU1lbnVJdGVtRWxlbWVudCIs
IHRlc3RGZWF0dXJlcy5ib29sRmVhdHVyZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFi
bGVNb2Rlcm5NZWRpYUNvbnRyb2xzLCAiZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scyIsIHRlc3RG
ZWF0dXJlcy5ib29sRmVhdHVyZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVQb2lu
dGVyTG9jaywgImVuYWJsZVBvaW50ZXJMb2NrIiwgdGVzdEZlYXR1cmVzLmJvb2xGZWF0dXJlcyk7
CisgICAgc2V0VmFsdWVJZlNldEluTWFwKGxheWVyQmFja2VkV2ViVmlldywgImxheWVyQmFja2Vk
V2ViVmlldyIsIHRlc3RGZWF0dXJlcy5ib29sRmVhdHVyZXMpOworICAgIHNldFZhbHVlSWZTZXRJ
bk1hcCh1c2VBY2NlbGVyYXRlZERyYXdpbmcsICJ1c2VBY2NlbGVyYXRlZERyYXdpbmciLCB0ZXN0
RmVhdHVyZXMuYm9vbEZlYXR1cmVzKTsKKyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAodXNlRXBoZW1l
cmFsU2Vzc2lvbiwgInVzZUVwaGVtZXJhbFNlc3Npb24iLCB0ZXN0RmVhdHVyZXMuYm9vbEZlYXR1
cmVzKTsKKworICAgIHNldFZhbHVlSWZTZXRJbk1hcChhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VU
eXBlcywgImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzIiwgdGVzdEZlYXR1cmVzLnN0cmlu
Z0ZlYXR1cmVzKTsKKyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoanNjT3B0aW9ucywgImpzY09wdGlv
bnMiLCB0ZXN0RmVhdHVyZXMuc3RyaW5nRmVhdHVyZXMpOworCisgICAgc2V0VmFsdWVJZlNldElu
TWFwKGVuYWJsZUNTU0xvZ2ljYWwsICJDU1NMb2dpY2FsRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5p
bnRlcm5hbERlYnVnRmVhdHVyZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVMaW5l
SGVpZ2h0VW5pdHMsICJMaW5lSGVpZ2h0VW5pdHNFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmludGVy
bmFsRGVidWdGZWF0dXJlcyk7CisgICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZVNlbGVjdGlv
bkFjcm9zc1NoYWRvd0JvdW5kYXJpZXMsICJzZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVz
RW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5pbnRlcm5hbERlYnVnRmVhdHVyZXMpOworICAgIHNldFZh
bHVlSWZTZXRJbk1hcChsYXlvdXRGb3JtYXR0aW5nQ29udGV4dEludGVncmF0aW9uRW5hYmxlZCwg
IkxheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25FbmFibGVkIiwgdGVzdEZlYXR1cmVz
LmludGVybmFsRGVidWdGZWF0dXJlcyk7CisKKyAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoYWRDbGlj
a0F0dHJpYnV0aW9uRW5hYmxlZCwgIkFkQ2xpY2tBdHRyaWJ1dGlvbkVuYWJsZWQiLCB0ZXN0RmVh
dHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFi
bGVBc3BlY3RSYXRpb09mSW1nRnJvbVdpZHRoQW5kSGVpZ2h0LCAiQXNwZWN0UmF0aW9PZkltZ0Zy
b21XaWR0aEFuZEhlaWdodEVuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVy
ZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVBc3luY0NsaXBib2FyZEFQSSwgIkFz
eW5jQ2xpcGJvYXJkQVBJRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJl
cyk7CisgICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUNTU09NVmlld1Ntb290aFNjcm9sbGlu
ZywgIkNTU09NVmlld1Ntb290aFNjcm9sbGluZ0VuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuZXhwZXJp
bWVudGFsRmVhdHVyZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVDb250YWN0UGlj
a2VyQVBJLCAiQ29udGFjdFBpY2tlckFQSUVuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuZXhwZXJpbWVu
dGFsRmVhdHVyZXMpOworICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVDb3JlTWF0aE1MLCAi
Q29yZU1hdGhNTEVuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMpOwor
ICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVSZXF1ZXN0SWRsZUNhbGxiYWNrLCAiUmVxdWVz
dElkbGVDYWxsYmFja0VuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMp
OworICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVSZXNpemVPYnNlcnZlciwgIlJlc2l6ZU9i
c2VydmVyRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcyk7CisgICAg
c2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZVdlYkdQVSwgIldlYkdQVUVuYWJsZWQiLCB0ZXN0RmVh
dHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMpOwogfQogCiBib29sIFRlc3RPcHRpb25zOjp3ZWJW
aWV3SXNDb21wYXRpYmxlV2l0aE9wdGlvbnMoY29uc3QgVGVzdE9wdGlvbnMmIG90aGVyKSBjb25z
dApAQCAtMTY3LDMgKzExMCw1IEBAIGJvb2wgVGVzdE9wdGlvbnM6OndlYlZpZXdJc0NvbXBhdGli
bGVXaXQKICAgICByZXR1cm4gb3RoZXIubGF5ZXJCYWNrZWRXZWJWaWV3ID09IGxheWVyQmFja2Vk
V2ViVmlldwogICAgICAgICAmJiBvdGhlci5qc2NPcHRpb25zID09IGpzY09wdGlvbnM7CiB9CisK
K30KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25zLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlvbnMuaAkocmV2aXNpb24gMjY4MzY1KQor
KysgVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAt
MjUsNyArMjUsMTEgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJUZXN0RmVhdHVyZXMu
aCIKICNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKworbmFtZXNw
YWNlIFdUUiB7CiAKIHN0cnVjdCBUZXN0T3B0aW9ucyB7CiAgICAgYm9vbCBlbmFibGVBdHRhY2ht
ZW50RWxlbWVudCB7IGZhbHNlIH07CkBAIC02MSw2ICs2NSwxMSBAQCBzdHJ1Y3QgVGVzdE9wdGlv
bnMgewogICAgIHN0ZDo6c3RyaW5nIGpzY09wdGlvbnM7CiAgICAgc3RkOjpzdHJpbmcgYWRkaXRp
b25hbFN1cHBvcnRlZEltYWdlVHlwZXM7CiAKLSAgICBUZXN0T3B0aW9ucyhjb25zdCBzdGQ6OnN0
cmluZyYgcGF0aE9yVVJMLCBjb25zdCBzdGQ6OnN0cmluZyYgYWJzb2x1dGVQYXRoKTsKKyAgICBl
eHBsaWNpdCBUZXN0T3B0aW9ucyhUZXN0RmVhdHVyZXMpOwogICAgIGJvb2wgd2ViVmlld0lzQ29t
cGF0aWJsZVdpdGhPcHRpb25zKGNvbnN0IFRlc3RPcHRpb25zJikgY29uc3Q7CisgICAgCisgICAg
c3RhdGljIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgVGVzdEhlYWRlcktl
eVR5cGU+JiBrZXlUeXBlTWFwcGluZygpOwogfTsKKworfQorCkluZGV4OiBUb29scy9EdW1wUmVu
ZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDI2ODM2NSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1
bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTEwOSwxMSArMTA5LDEyIEBACiAJCTVEQjlBQzlFMEY3MjJDMzYwMDY4NDY0MSAvKiBXZWJLaXRX
ZWlnaHRXYXRjaGVyNzAwLnR0ZiBpbiBDb3B5IEZvbnQgRmlsZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzc1RjA5NzcwREFDM0NCNjAwQzhCNEU1IC8qIFdlYktpdFdlaWdo
dFdhdGNoZXI3MDAudHRmICovOyB9OwogCQk1REI5QUM5RjBGNzIyQzM2MDA2ODQ2NDEgLyogV2Vi
S2l0V2VpZ2h0V2F0Y2hlcjgwMC50dGYgaW4gQ29weSBGb250IEZpbGVzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3NUYwOTc4MERBQzNDQjYwMEM4QjRFNSAvKiBXZWJLaXRX
ZWlnaHRXYXRjaGVyODAwLnR0ZiAqLzsgfTsKIAkJNURCOUFDQTAwRjcyMkMzNjAwNjg0NjQxIC8q
IFdlYktpdFdlaWdodFdhdGNoZXI5MDAudHRmIGluIENvcHkgRm9udCBGaWxlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzVGMDk3OTBEQUMzQ0I2MDBDOEI0RTUgLyogV2Vi
S2l0V2VpZ2h0V2F0Y2hlcjkwMC50dGYgKi87IH07CisJCTdDRkY5QkJGMjUzM0JCMjQwMDA4MDA5
RiAvKiBUZXN0RmVhdHVyZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0NGRjlCQkUyNTMzQkIyNDAwMDgwMDlGIC8qIFRlc3RGZWF0dXJlcy5jcHAg
Ki87IH07CisJCTdDRkY5QkMyMjUzM0JDMTYwMDA4MDA5RiAvKiBUZXN0Q29tbWFuZC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0ZGOUJDMTI1MzNC
QzE2MDAwODAwOUYgLyogVGVzdENvbW1hbmQuY3BwICovOyB9OwogCQk4MDA0NUFFRTE0NzcxOEU3
MDA4MjkwQTggLyogQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MDA0NUFFQzE0NzcxOEU3MDA4
MjkwQTggLyogQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0gKi87IH07CiAJCTg0
NjVFMkM3MEZGQThERjIwMDNCODM0MiAvKiBQaXhlbER1bXBTdXBwb3J0LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NjVFMkM2MEZGQThERjIwMDNC
ODM0MiAvKiBQaXhlbER1bXBTdXBwb3J0LmNwcCAqLzsgfTsKIAkJOTNDNzg4MjYyNTBDNkQzQTAw
QzBBQTI0IC8qIFJlZnRlc3RGdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTNDNzg4MjQyNTBDNkQzOTAwQzBBQTI0IC8qIFJlZnRlc3RG
dW5jdGlvbnMuY3BwICovOyB9OwogCQk5M0M3ODgyRTI1MEM3MTcyMDBDMEFBMjQgLyogSlNCYXNp
Y3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTND
Nzg4MjkyNTBDNzEzNDAwQzBBQTI0IC8qIEpTQmFzaWNzLmNwcCAqLzsgfTsKLQkJOTgzMEYzMUYx
NUM4MTE4MTAwNUFCMjA2IC8qIER1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk4MzBGMzFFMTVDODExODEwMDVBQjIw
NiAvKiBEdW1wUmVuZGVyVHJlZUNvbW1vbi5jcHAgKi87IH07CiAJCUExMTU4RDU4MTg5Mjc0MEMw
MDg4QzE3QiAvKiBEdW1wUmVuZGVyVHJlZUJyb3dzZXJWaWV3Lm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTExNThENTYxODkyNzNFQjAwODhDMTdCIC8q
IER1bXBSZW5kZXJUcmVlQnJvd3NlclZpZXcubW0gKi87IH07CiAJCUExMTU4RDU5MTg5Mjc0MzYw
MDg4QzE3QiAvKiBQaXhlbER1bXBTdXBwb3J0SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTExNThENTcxODkyNzNFQjAwODhDMTdCIC8qIFBpeGVs
RHVtcFN1cHBvcnRJT1MubW0gKi87IH07CiAJCUExMzRFNTMxMTg4RkMyNzAwMDkwMUQwNiAvKiBE
dW1wUmVuZGVyVHJlZU1haW4ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMTM0RTUyRjE4OEZDMjcwMDA5MDFEMDYgLyogRHVtcFJlbmRlclRyZWVNYWlu
Lm1tICovOyB9OwpAQCAtMzMwLDYgKzMzMSwxMCBAQAogCQk1M0NCQjgzMTEzNEU0MkYzMDAxQ0U2
QTQgLyogQ3ljbGljUmVkdW5kYW5jeUNoZWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEN5Y2xpY1JlZHVuZGFuY3lDaGVjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1REU4QUU0MzEzQTJDMTU4MDBENkEzN0QgLyogbGliV2ViQ29yZVRlc3RTdXBwb3J0LmR5
bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gImNv
bXBpbGVkLm1hY2gtby5keWxpYiI7IHBhdGggPSBsaWJXZWJDb3JlVGVzdFN1cHBvcnQuZHlsaWI7
IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTdDQkJDMzIyMURERkNGOUEw
MDc4NkI5RCAvKiBUZXN0T3B0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBUZXN0T3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Q0ZGOUJCRDI1
MzNCQjI0MDAwODAwOUYgLyogVGVzdEZlYXR1cmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRlc3RGZWF0
dXJlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Q0ZGOUJCRTI1MzNCQjI0MDAw
ODAwOUYgLyogVGVzdEZlYXR1cmVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRlc3RGZWF0dXJl
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDRkY5QkMwMjUzM0JDMTYwMDA4
MDA5RiAvKiBUZXN0Q29tbWFuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXN0Q29tbWFuZC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Q0ZGOUJDMTI1MzNCQzE2MDAwODAwOUYgLyogVGVz
dENvbW1hbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGVzdENvbW1hbmQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk4MDA0NUFFQjE0NzcxOEU3MDA4MjkwQTggLyogQWNjZXNz
aWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIuaDsgcGF0aCA9IG1hYy9BY2Nl
c3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4MDA0NUFFQzE0NzcxOEU3MDA4MjkwQTggLyogQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlv
bkhhbmRsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBBY2Nl
c3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbTsgcGF0aCA9IG1hYy9BY2Nlc3NpYmlsaXR5
Tm90aWZpY2F0aW9uSGFuZGxlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQ2
NUUyQzYwRkZBOERGMjAwM0I4MzQyIC8qIFBpeGVsRHVtcFN1cHBvcnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBpeGVsRHVtcFN1cHBvcnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzM5LDcgKzM0NCw2IEBACiAJCTkzQzc4ODI1MjUwQzZE
MzkwMEMwQUEyNCAvKiBSZWZ0ZXN0RnVuY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlZnRlc3RGdW5jdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTNDNzg4MjkyNTBDNzEzNDAwQzBBQTI0IC8qIEpTQmFzaWNzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTQmFzaWNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNDNzg4
MkIyNTBDNzEzNDAwQzBBQTI0IC8qIEpTQmFzaWNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQmFzaWNz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk4MzBGMzFFMTVDODExODEwMDVBQjIw
NiAvKiBEdW1wUmVuZGVyVHJlZUNvbW1vbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBEdW1wUmVuZGVyVHJlZUNvbW1vbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUExMTAzQjVCMTg5MjQ5OEYwMDczOEM4NyAvKiBMYXlvdXRUZXN0SGVscGVyLnhj
Y29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dC54Y2NvbmZpZzsgbmFtZSA9IExheW91dFRlc3RIZWxwZXIueGNjb25maWc7IHBhdGggPSBt
YWMvQ29uZmlndXJhdGlvbnMvTGF5b3V0VGVzdEhlbHBlci54Y2NvbmZpZzsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTExNThENTUxODkyNzNFQjAwODhDMTdCIC8qIER1bXBSZW5kZXJU
cmVlQnJvd3NlclZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRHVtcFJlbmRlclRyZWVCcm93c2VyVmll
dy5oOyBwYXRoID0gaW9zL0R1bXBSZW5kZXJUcmVlQnJvd3NlclZpZXcuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTExNThENTYxODkyNzNFQjAwODhDMTdCIC8qIER1bXBSZW5kZXJU
cmVlQnJvd3NlclZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBEdW1wUmVuZGVyVHJlZUJy
b3dzZXJWaWV3Lm1tOyBwYXRoID0gaW9zL0R1bXBSZW5kZXJUcmVlQnJvd3NlclZpZXcubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00OTksNyArNTAzLDYgQEAKIAkJCQlBMTM0RTUz
NDE4OTA1RTZDMDA5MDFEMDYgLyogY29uZmlnLmggKi8sCiAJCQkJMUEyRkI4NEMxNzhDODA5MjAw
NTlGRDk2IC8qIERlZmF1bHRQb2xpY3lEZWxlZ2F0ZS5oICovLAogCQkJCTFBMkZCODREMTc4Qzgw
OTMwMDU5RkQ5NiAvKiBEZWZhdWx0UG9saWN5RGVsZWdhdGUubW0gKi8sCi0JCQkJOTgzMEYzMUUx
NUM4MTE4MTAwNUFCMjA2IC8qIER1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcCAqLywKIAkJCQkzMkE3
MEFBQjAzNzA1RTFGMDBDOTE3ODMgLyogRHVtcFJlbmRlclRyZWVQcmVmaXguaCAqLywKIAkJCQkx
NDIyQTI3NTBBRjZGNEJEMDBFMUE4ODMgLyogRGVsZWdhdGVzICovLAogCQkJCTE0MjJBMjY5MEFG
NkY0NTIwMEUxQTg4MyAvKiBDb250cm9sbGVycyAqLywKQEAgLTczMCw2ICs3MzMsMTAgQEAKIAkJ
CQkzMTQ4QTA1NjFFNkY5MEY0MDBEM0IzMTYgLyogSU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24u
aCAqLywKIAkJCQk5M0M3ODgyNDI1MEM2RDM5MDBDMEFBMjQgLyogUmVmdGVzdEZ1bmN0aW9ucy5j
cHAgKi8sCiAJCQkJOTNDNzg4MjUyNTBDNkQzOTAwQzBBQTI0IC8qIFJlZnRlc3RGdW5jdGlvbnMu
aCAqLywKKwkJCQk3Q0ZGOUJDMTI1MzNCQzE2MDAwODAwOUYgLyogVGVzdENvbW1hbmQuY3BwICov
LAorCQkJCTdDRkY5QkMwMjUzM0JDMTYwMDA4MDA5RiAvKiBUZXN0Q29tbWFuZC5oICovLAorCQkJ
CTdDRkY5QkJFMjUzM0JCMjQwMDA4MDA5RiAvKiBUZXN0RmVhdHVyZXMuY3BwICovLAorCQkJCTdD
RkY5QkJEMjUzM0JCMjQwMDA4MDA5RiAvKiBUZXN0RmVhdHVyZXMuaCAqLywKIAkJCSk7CiAJCQlu
YW1lID0gVGVzdFJ1bm5lclNoYXJlZDsKIAkJCXBhdGggPSAuLi9UZXN0UnVubmVyU2hhcmVkOwpA
QCAtMTIxNiw3ICsxMjIzLDYgQEAKIAkJCQkxQTJGQjg0RjE3OEM4MDkzMDA1OUZEOTYgLyogRGVm
YXVsdFBvbGljeURlbGVnYXRlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBMThDNDcwQzlCNUI5
NDAwMTE0MzY5IC8qIER1bXBSZW5kZXJUcmVlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTExNThE
NTgxODkyNzQwQzAwODhDMTdCIC8qIER1bXBSZW5kZXJUcmVlQnJvd3NlclZpZXcubW0gaW4gU291
cmNlcyAqLywKLQkJCQk5ODMwRjMxRjE1QzgxMTgxMDA1QUIyMDYgLyogRHVtcFJlbmRlclRyZWVD
b21tb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBMThCN0IwQzlCMDhGMTAwMTE0MzY5IC8q
IER1bXBSZW5kZXJUcmVlRHJhZ2dpbmdJbmZvLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQThENzlD
RUIwRkMyOEIyQzAwNEFDOEZFIC8qIER1bXBSZW5kZXJUcmVlRmlsZURyYWdnaW5nU291cmNlLm0g
aW4gU291cmNlcyAqLywKIAkJCQlBOEI5MUFEQTBDRjNCMzJGMDA4RjkxRkYgLyogRHVtcFJlbmRl
clRyZWVQYXN0ZWJvYXJkLm1tIGluIFNvdXJjZXMgKi8sCkBAIC0xMjQ5LDYgKzEyNTUsOCBAQAog
CQkJCUY0MDEwQjdCMjREQTIwMUYwMEE4NzZFMiAvKiBQb3NlQXNDbGFzcy5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTkzQzc4ODI2MjUwQzZEM0EwMEMwQUEyNCAvKiBSZWZ0ZXN0RnVuY3Rpb25zLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUJDQTE4QjY4MEM5QjA4QzIwMDExNDM2OSAvKiBSZXNvdXJj
ZUxvYWREZWxlZ2F0ZS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTdDRkY5QkMyMjUzM0JDMTYwMDA4
MDA5RiAvKiBUZXN0Q29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3Q0ZGOUJCRjI1MzNC
QjI0MDAwODAwOUYgLyogVGVzdEZlYXR1cmVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEzMEEy
MUY4MjA1MUQ4QzQwMDA4RkY0MiAvKiBUZXN0T3B0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCQzAxMzFEQTBDOTc3MjAxMDA4NzMxN0QgLyogVGVzdFJ1bm5lci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCQ0ExOEIyNDBDOUIwMTRCMDAxMTQzNjkgLyogVGVzdFJ1bm5lck1hYy5tbSBpbiBT
b3VyY2VzICovLApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVl
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJl
ZS5tbQkocmV2aXNpb24gMjY4MzY1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBS
ZW5kZXJUcmVlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw4IEBACiAjaW1wb3J0ICJQ
b2xpY3lEZWxlZ2F0ZS5oIgogI2ltcG9ydCAiUG9zZUFzQ2xhc3MuaCIKICNpbXBvcnQgIlJlc291
cmNlTG9hZERlbGVnYXRlLmgiCisjaW1wb3J0ICJUZXN0Q29tbWFuZC5oIgorI2ltcG9ydCAiVGVz
dEZlYXR1cmVzLmgiCiAjaW1wb3J0ICJUZXN0T3B0aW9ucy5oIgogI2ltcG9ydCAiVGVzdFJ1bm5l
ci5oIgogI2ltcG9ydCAiVUlEZWxlZ2F0ZS5oIgpAQCAtMTg5LDcgKzE5MSw3IEBAIHZvbGF0aWxl
IGJvb2wgZG9uZTsKIE5hdmlnYXRpb25Db250cm9sbGVyKiBnTmF2aWdhdGlvbkNvbnRyb2xsZXIg
PSBudWxscHRyOwogUmVmUHRyPFRlc3RSdW5uZXI+IGdUZXN0UnVubmVyOwogCi1PcHRpb25hbDxU
ZXN0T3B0aW9ucz4gbWFpbkZyYW1lVGVzdE9wdGlvbnM7CitPcHRpb25hbDxXVFI6OlRlc3RPcHRp
b25zPiBtYWluRnJhbWVUZXN0T3B0aW9uczsKIFdlYkZyYW1lICptYWluRnJhbWUgPSBuaWw7CiAv
LyBUaGlzIGlzIHRoZSB0b3Btb3N0IGZyYW1lIHRoYXQgaXMgbG9hZGluZywgZHVyaW5nIGEgZ2l2
ZW4gbG9hZCwgb3IgbmlsIHdoZW4gbm8gbG9hZCBpcyAKIC8vIGluIHByb2dyZXNzLiAgVXN1YWxs
eSB0aGlzIGlzIHRoZSBzYW1lIGFzIHRoZSBtYWluIGZyYW1lLCBidXQgbm90IGFsd2F5cy4gIElu
IHRoZSBjYXNlCkBAIC05NjYsNyArOTY4LDcgQEAgc3RhdGljIHZvaWQgcmVzZXRXZWJQcmVmZXJl
bmNlc1RvQ29uc2lzdAogICAgIFtXZWJQcmVmZXJlbmNlcyBfc2V0Q3VycmVudE5ldHdvcmtMb2Fk
ZXJTZXNzaW9uQ29va2llQWNjZXB0UG9saWN5Ok5TSFRUUENvb2tpZUFjY2VwdFBvbGljeU9ubHlG
cm9tTWFpbkRvY3VtZW50RG9tYWluXTsKIH0KIAotc3RhdGljIHZvaWQgc2V0V2ViUHJlZmVyZW5j
ZXNGb3JUZXN0T3B0aW9ucyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucykKK3N0YXRpYyB2b2lk
IHNldFdlYlByZWZlcmVuY2VzRm9yVGVzdE9wdGlvbnMoY29uc3QgV1RSOjpUZXN0T3B0aW9ucyYg
b3B0aW9ucykKIHsKICAgICBXZWJQcmVmZXJlbmNlcyAqcHJlZmVyZW5jZXMgPSBbV2ViUHJlZmVy
ZW5jZXMgc3RhbmRhcmRQcmVmZXJlbmNlc107CiAKQEAgLTE4MTYsNyArMTgxOCw3IEBAIHN0YXRp
YyBib29sIHNob3VsZFVzZUVwaGVtZXJhbFNlc3Npb24oY28KICAgICByZXR1cm4gc3Ryc3RyKHBh
dGhPclVSTCwgInczYy9JbmRleGVkREItcHJpdmF0ZS1icm93c2luZyIpOwogfQogCi1zdGF0aWMg
dm9pZCBzZXRKU0NPcHRpb25zKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKQorc3RhdGljIHZv
aWQgc2V0SlNDT3B0aW9ucyhjb25zdCBXVFI6OlRlc3RPcHRpb25zJiBvcHRpb25zKQogewogICAg
IHN0YXRpYyBXVEY6OlN0cmluZ0J1aWxkZXIgc2F2ZWRPcHRpb25zOwogCkBAIC0xODMyLDcgKzE4
MzQsNyBAQCBzdGF0aWMgdm9pZCBzZXRKU0NPcHRpb25zKGNvbnN0IFRlc3RPcHRpCiB9CiAKIGVu
dW0gY2xhc3MgUmVzZXRUaW1lIHsgQmVmb3JlVGVzdCwgQWZ0ZXJUZXN0IH07Ci1zdGF0aWMgdm9p
ZCByZXNldFdlYlZpZXdUb0NvbnNpc3RlbnRTdGF0ZShjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9u
cywgUmVzZXRUaW1lIHJlc2V0VGltZSkKK3N0YXRpYyB2b2lkIHJlc2V0V2ViVmlld1RvQ29uc2lz
dGVudFN0YXRlKGNvbnN0IFdUUjo6VGVzdE9wdGlvbnMmIG9wdGlvbnMsIFJlc2V0VGltZSByZXNl
dFRpbWUpCiB7CiAgICAgc2V0SlNDT3B0aW9ucyhvcHRpb25zKTsKIApAQCAtMTk2NywxMSArMTk2
OSwyMCBAQCBzdGF0aWMgTlNVUkwgKmNvbXB1dGVUZXN0VVJMKE5TU3RyaW5nICpwCiAgICAgcmV0
dXJuIFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6YWJzb2x1dGVQYXRoXTsKIH0KIAorc3RhdGljIFdU
Ujo6VGVzdE9wdGlvbnMgdGVzdE9wdGlvbnNGb3JUZXN0KGNvbnN0IFdUUjo6VGVzdENvbW1hbmQm
IGNvbW1hbmQpCit7CisgICAgV1RSOjpUZXN0RmVhdHVyZXMgZmVhdHVyZXM7CisgICAgV1RSOjpt
ZXJnZShmZWF0dXJlcywgV1RSOjpoYXJkY29kZWRGZWF0dXJlc0Jhc2VkT25QYXRoRm9yVGVzdChj
b21tYW5kKSk7CisgICAgV1RSOjptZXJnZShmZWF0dXJlcywgV1RSOjpmZWF0dXJlRGVmYXVsdHNG
cm9tVGVzdEhlYWRlckZvclRlc3QoY29tbWFuZCwgV1RSOjpUZXN0T3B0aW9uczo6a2V5VHlwZU1h
cHBpbmcoKSkpOworCisgICAgcmV0dXJuIFdUUjo6VGVzdE9wdGlvbnMgeyBXVEZNb3ZlKGZlYXR1
cmVzKSB9OworfQorCiBzdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IHN0cmluZyYgaW5wdXRMaW5l
KQogewogICAgIEFTU0VSVCghaW5wdXRMaW5lLmVtcHR5KCkpOwogCi0gICAgVGVzdENvbW1hbmQg
Y29tbWFuZCA9IHBhcnNlSW5wdXRMaW5lKGlucHV0TGluZSk7CisgICAgYXV0byBjb21tYW5kID0g
V1RSOjpwYXJzZUlucHV0TGluZShpbnB1dExpbmUpOwogICAgIGNvbnN0IHN0cmluZyYgcGF0aE9y
VVJMID0gY29tbWFuZC5wYXRoT3JVUkw7CiAgICAgZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0g
Y29tbWFuZC5zaG91bGREdW1wUGl4ZWxzIHx8IGR1bXBQaXhlbHNGb3JBbGxUZXN0czsKIApAQCAt
MTk5Myw3ICsyMDA0LDcgQEAgc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcmIGlucHV0
TAogICAgIGF1dG8gbWVzc2FnZSA9IG1ha2VTdHJpbmcoIkNSQVNISU5HIFRFU1Q6ICIsIHRlc3RQ
YXRoLlVURjhTdHJpbmcpOwogICAgIFdURjo6c2V0Q3Jhc2hMb2dNZXNzYWdlKG1lc3NhZ2UudXRm
OCgpLmRhdGEoKSk7CiAKLSAgICBUZXN0T3B0aW9ucyBvcHRpb25zIHsgW3VybCBpc0ZpbGVVUkxd
ID8gW3VybCBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb25dIDogcGF0aE9yVVJMLCBjb21tYW5kLmFi
c29sdXRlUGF0aCB9OworICAgIGF1dG8gb3B0aW9ucyA9IHRlc3RPcHRpb25zRm9yVGVzdChjb21t
YW5kKTsKIAogICAgIGlmICghbWFpbkZyYW1lVGVzdE9wdGlvbnMgfHwgIW9wdGlvbnMud2ViVmll
d0lzQ29tcGF0aWJsZVdpdGhPcHRpb25zKG1haW5GcmFtZVRlc3RPcHRpb25zLnZhbHVlKCkpKSB7
CiAgICAgICAgIGlmIChtYWluRnJhbWUpCkBAIC0yMDA2LDcgKzIwMTcsNyBAQCBzdGF0aWMgdm9p
ZCBydW5UZXN0KGNvbnN0IHN0cmluZyYgaW5wdXRMCiAgICAgY29uc3QgY2hhciogdGVzdFVSTChb
W3VybCBhYnNvbHV0ZVN0cmluZ10gVVRGOFN0cmluZ10pOwogICAgIGdUZXN0UnVubmVyID0gVGVz
dFJ1bm5lcjo6Y3JlYXRlKHRlc3RVUkwsIGNvbW1hbmQuZXhwZWN0ZWRQaXhlbEhhc2gpOwogICAg
IGdUZXN0UnVubmVyLT5zZXRBbGxvd2VkSG9zdHMoYWxsb3dlZEhvc3RzKTsKLSAgICBnVGVzdFJ1
bm5lci0+c2V0Q3VzdG9tVGltZW91dChjb21tYW5kLnRpbWVvdXQpOworICAgIGdUZXN0UnVubmVy
LT5zZXRDdXN0b21UaW1lb3V0KGNvbW1hbmQudGltZW91dC5taWxsaXNlY29uZHMoKSk7CiAgICAg
Z1Rlc3RSdW5uZXItPnNldER1bXBKU0NvbnNvbGVMb2dJblN0ZEVycihjb21tYW5kLmR1bXBKU0Nv
bnNvbGVMb2dJblN0ZEVyciB8fCBvcHRpb25zLmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycik7CiAK
ICAgICByZXNldFdlYlZpZXdUb0NvbnNpc3RlbnRTdGF0ZShvcHRpb25zLCBSZXNldFRpbWU6OkJl
Zm9yZVRlc3QpOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1VJRGVsZWdhdGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVUlEZWxlZ2F0ZS5oCShyZXZp
c2lvbiAyNjgzNjUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVUlEZWxlZ2F0ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw2IEBAIEBpbnRlcmZhY2UgVUlEZWxlZ2F0ZSA6IE5T
T2JqZWN0IDxXZWJVSUQKIC0gKHZvaWQpcmVzZXRXaW5kb3dPcmlnaW47CiAtICh2b2lkKWRpZFNl
dE1vY2tHZW9sb2NhdGlvblBlcm1pc3Npb247CiAtIChpbnQpbnVtYmVyT2ZQZW5kaW5nR2VvbG9j
YXRpb25QZXJtaXNzaW9uUmVxdWVzdHM7Ci0tICh2b2lkKXJlc2V0VG9Db25zaXN0ZW50U3RhdGVC
ZWZvcmVUZXN0aW5nOihjb25zdCBUZXN0T3B0aW9ucyYpb3B0aW9uczsKKy0gKHZvaWQpcmVzZXRU
b0NvbnNpc3RlbnRTdGF0ZUJlZm9yZVRlc3Rpbmc6KGNvbnN0IFdUUjo6VGVzdE9wdGlvbnMmKW9w
dGlvbnM7CiAKIEBlbmQKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9VSURlbGVnYXRl
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9VSURlbGVnYXRlLm1t
CShyZXZpc2lvbiAyNjgzNjUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVUlEZWxlZ2F0
ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCAtICh2b2lkKXJlc2V0V2luZG93
T3JpZ2luCiAgICAgd2luZG93T3JpZ2luID0gTlNaZXJvUG9pbnQ7CiB9CiAKLS0gKHZvaWQpcmVz
ZXRUb0NvbnNpc3RlbnRTdGF0ZUJlZm9yZVRlc3Rpbmc6KGNvbnN0IFRlc3RPcHRpb25zJilvcHRp
b25zCistICh2b2lkKXJlc2V0VG9Db25zaXN0ZW50U3RhdGVCZWZvcmVUZXN0aW5nOihjb25zdCBX
VFI6OlRlc3RPcHRpb25zJilvcHRpb25zCiB7CiAgICAgbV9lbmFibGVEcmFnRGVzdGluYXRpb25B
Y3Rpb25Mb2FkID0gb3B0aW9ucy5lbmFibGVEcmFnRGVzdGluYXRpb25BY3Rpb25Mb2FkOwogfQpJ
bmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUuY3BwCShyZXZp
c2lvbiAyNjgzNjUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw4IEBACiAjaW5jbHVkZSAiUGl4ZWxEdW1w
U3VwcG9ydC5oIgogI2luY2x1ZGUgIlBvbGljeURlbGVnYXRlLmgiCiAjaW5jbHVkZSAiUmVzb3Vy
Y2VMb2FkRGVsZWdhdGUuaCIKKyNpbmNsdWRlICJUZXN0Q29tbWFuZC5oIgorI2luY2x1ZGUgIlRl
c3RGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlRlc3RPcHRpb25zLmgiCiAjaW5jbHVkZSAiVGVzdFJ1
bm5lci5oIgogI2luY2x1ZGUgIlVJRGVsZWdhdGUuaCIKQEAgLTkxMSw3ICs5MTMsNyBAQCBzdGF0
aWMgdm9pZCByZXNldFdlYlByZWZlcmVuY2VzVG9Db25zaXN0CiAgICAgc2V0QWx3YXlzQWNjZXB0
Q29va2llcyhmYWxzZSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNldFdlYlByZWZlcmVuY2VzRm9yVGVz
dE9wdGlvbnMoSVdlYlByZWZlcmVuY2VzKiBwcmVmZXJlbmNlcywgY29uc3QgVGVzdE9wdGlvbnMm
IG9wdGlvbnMpCitzdGF0aWMgdm9pZCBzZXRXZWJQcmVmZXJlbmNlc0ZvclRlc3RPcHRpb25zKElX
ZWJQcmVmZXJlbmNlcyogcHJlZmVyZW5jZXMsIGNvbnN0IFdUUjo6VGVzdE9wdGlvbnMmIG9wdGlv
bnMpCiB7CiAgICAgQ09NUHRyPElXZWJQcmVmZXJlbmNlc1ByaXZhdGU4PiBwcmVmc1ByaXZhdGUg
eyBRdWVyeSwgcHJlZmVyZW5jZXMgfTsKIApAQCAtOTYzLDcgKzk2NSw3IEBAIHN0YXRpYyB2b2lk
IHNldERlZmF1bHRzVG9Db25zaXN0ZW50VmFsdWUKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBz
ZXRKU0NPcHRpb25zKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKQorc3RhdGljIHZvaWQgc2V0
SlNDT3B0aW9ucyhjb25zdCBXVFI6OlRlc3RPcHRpb25zJiBvcHRpb25zKQogewogICAgIHN0YXRp
YyBXVEY6OlN0cmluZ0J1aWxkZXIgc2F2ZWRPcHRpb25zOwogCkBAIC05NzgsNyArOTgwLDcgQEAg
c3RhdGljIHZvaWQgc2V0SlNDT3B0aW9ucyhjb25zdCBUZXN0T3B0aQogICAgIH0KIH0KIAotc3Rh
dGljIHZvaWQgcmVzZXRXZWJWaWV3VG9Db25zaXN0ZW50U3RhdGVCZWZvcmVUZXN0aW5nKGNvbnN0
IFRlc3RPcHRpb25zJiBvcHRpb25zKQorc3RhdGljIHZvaWQgcmVzZXRXZWJWaWV3VG9Db25zaXN0
ZW50U3RhdGVCZWZvcmVUZXN0aW5nKGNvbnN0IFdUUjo6VGVzdE9wdGlvbnMmIG9wdGlvbnMpCiB7
CiAgICAgc2V0SlNDT3B0aW9ucyhvcHRpb25zKTsKIApAQCAtMTE2NSwxMSArMTE2NywyMCBAQCBz
dGF0aWMgYm9vbCBoYW5kbGVDb250cm9sQ29tbWFuZChjb25zdCBjCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCitzdGF0aWMgV1RSOjpUZXN0T3B0aW9ucyB0ZXN0T3B0aW9uc0ZvclRlc3QoY29uc3Qg
V1RSOjpUZXN0Q29tbWFuZCYgY29tbWFuZCkKK3sKKyAgICBXVFI6OlRlc3RGZWF0dXJlcyBmZWF0
dXJlczsKKyAgICBXVFI6Om1lcmdlKGZlYXR1cmVzLCBXVFI6OmhhcmRjb2RlZEZlYXR1cmVzQmFz
ZWRPblBhdGhGb3JUZXN0KGNvbW1hbmQpKTsKKyAgICBXVFI6Om1lcmdlKGZlYXR1cmVzLCBXVFI6
OmZlYXR1cmVEZWZhdWx0c0Zyb21UZXN0SGVhZGVyRm9yVGVzdChjb21tYW5kLCBXVFI6OlRlc3RP
cHRpb25zOjprZXlUeXBlTWFwcGluZygpKSk7CisKKyAgICByZXR1cm4gV1RSOjpUZXN0T3B0aW9u
cyB7IFdURk1vdmUoZmVhdHVyZXMpIH07Cit9CisKIHN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qg
c3RyaW5nJiBpbnB1dExpbmUpCiB7CiAgICAgQVNTRVJUKCFpbnB1dExpbmUuZW1wdHkoKSk7CiAK
LSAgICBUZXN0Q29tbWFuZCBjb21tYW5kID0gcGFyc2VJbnB1dExpbmUoaW5wdXRMaW5lKTsKKyAg
ICBhdXRvIGNvbW1hbmQgPSBXVFI6OnBhcnNlSW5wdXRMaW5lKGlucHV0TGluZSk7CiAgICAgY29u
c3Qgc3RyaW5nJiBwYXRoT3JVUkwgPSBjb21tYW5kLnBhdGhPclVSTDsKICAgICBkdW1wUGl4ZWxz
Rm9yQ3VycmVudFRlc3QgPSBjb21tYW5kLnNob3VsZER1bXBQaXhlbHMgfHwgZHVtcFBpeGVsc0Zv
ckFsbFRlc3RzOwogCkBAIC0xMjEzLDEyICsxMjI0LDEyIEBAIHN0YXRpYyB2b2lkIHJ1blRlc3Qo
Y29uc3Qgc3RyaW5nJiBpbnB1dEwKIAogICAgIENGUmVsZWFzZSh1cmwpOwogCi0gICAgVGVzdE9w
dGlvbnMgb3B0aW9ucyB7IGNvbW1hbmQucGF0aE9yVVJMLCBjb21tYW5kLmFic29sdXRlUGF0aCB9
OworICAgIGF1dG8gb3B0aW9ucyA9IHRlc3RPcHRpb25zRm9yVGVzdChjb21tYW5kKTsKIAogICAg
IHJlc2V0V2ViVmlld1RvQ29uc2lzdGVudFN0YXRlQmVmb3JlVGVzdGluZyhvcHRpb25zKTsKIAog
ICAgIDo6Z1Rlc3RSdW5uZXIgPSBUZXN0UnVubmVyOjpjcmVhdGUodGVzdFVSTC5kYXRhKCksIGNv
bW1hbmQuZXhwZWN0ZWRQaXhlbEhhc2gpOwotICAgIDo6Z1Rlc3RSdW5uZXItPnNldEN1c3RvbVRp
bWVvdXQoY29tbWFuZC50aW1lb3V0KTsKKyAgICA6OmdUZXN0UnVubmVyLT5zZXRDdXN0b21UaW1l
b3V0KGNvbW1hbmQudGltZW91dC5taWxsaXNlY29uZHMoKSk7CiAgICAgOjpnVGVzdFJ1bm5lci0+
c2V0RHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKGNvbW1hbmQuZHVtcEpTQ29uc29sZUxvZ0luU3Rk
RXJyIHx8IG9wdGlvbnMuZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKTsKIAogICAgIHRvcExvYWRp
bmdGcmFtZSA9IG51bGxwdHI7CkluZGV4OiBUb29scy9UZXN0UnVubmVyU2hhcmVkL0NNYWtlTGlz
dHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvQ01ha2VMaXN0cy50
eHQJKHJldmlzaW9uIDI2ODM2NSkKKysrIFRvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvQ01ha2VMaXN0
cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTcsNiArNyw4IEBAIGZpbGUoTUFLRV9ESVJFQ1RPUlkg
JHtUZXN0UnVubmVyU2hhcmVkX0QKIAogc2V0KFRlc3RSdW5uZXJTaGFyZWRfU09VUkNFUwogICAg
IFJlZnRlc3RGdW5jdGlvbnMuY3BwCisgICAgVGVzdENvbW1hbmQuY3BwCisgICAgVGVzdEZlYXR1
cmVzLmNwcAogCiAgICAgQmluZGluZ3MvSlNCYXNpY3MuY3BwCiAgICAgQmluZGluZ3MvSlNXcmFw
cGVyLmNwcApJbmRleDogVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9UZXN0Q29tbWFuZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9UZXN0Q29tbWFuZC5jcHAJKG5vbmV4
aXN0ZW50KQorKysgVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9UZXN0Q29tbWFuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiVGVzdENvbW1hbmQuaCIKKworbmFtZXNwYWNlIFdUUiB7CisKK2NsYXNz
IENvbW1hbmRUb2tlbml6ZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IENvbW1hbmRUb2tlbml6
ZXIoY29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0KQorICAgICAgICA6IG1faW5wdXQoaW5wdXQpCisg
ICAgICAgICwgbV9wb3NOZXh0U2VwYXJhdG9yKDApCisgICAgeworICAgICAgICBwdW1wKCk7Cisg
ICAgfQorCisgICAgYm9vbCBoYXNOZXh0KCkgY29uc3Q7CisgICAgc3RkOjpzdHJpbmcgbmV4dCgp
OworCitwcml2YXRlOgorICAgIHZvaWQgcHVtcCgpOworICAgIHN0YXRpYyBjb25zdCBjaGFyIGtT
ZXBhcmF0b3IgPSAnXCcnOworICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtX2lucHV0OworICAgIHN0
ZDo6c3RyaW5nIG1fbmV4dDsKKyAgICBzaXplX3QgbV9wb3NOZXh0U2VwYXJhdG9yOworfTsKKwor
dm9pZCBDb21tYW5kVG9rZW5pemVyOjpwdW1wKCkKK3sKKyAgICBpZiAobV9wb3NOZXh0U2VwYXJh
dG9yID09IHN0ZDo6c3RyaW5nOjpucG9zIHx8IG1fcG9zTmV4dFNlcGFyYXRvciA9PSBtX2lucHV0
LnNpemUoKSkgeworICAgICAgICBtX25leHQgPSBzdGQ6OnN0cmluZygpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIHNpemVfdCBzdGFydCA9IG1fcG9zTmV4dFNlcGFyYXRvciA/IG1fcG9z
TmV4dFNlcGFyYXRvciArIDEgOiAwOworICAgIG1fcG9zTmV4dFNlcGFyYXRvciA9IG1faW5wdXQu
ZmluZChrU2VwYXJhdG9yLCBzdGFydCk7CisgICAgc2l6ZV90IHNpemUgPSBtX3Bvc05leHRTZXBh
cmF0b3IgPT0gc3RkOjpzdHJpbmc6Om5wb3MgPyBzdGQ6OnN0cmluZzo6bnBvcyA6IG1fcG9zTmV4
dFNlcGFyYXRvciAtIHN0YXJ0OworICAgIG1fbmV4dCA9IHN0ZDo6c3RyaW5nKG1faW5wdXQsIHN0
YXJ0LCBzaXplKTsKK30KKworc3RkOjpzdHJpbmcgQ29tbWFuZFRva2VuaXplcjo6bmV4dCgpCit7
CisgICAgQVNTRVJUKGhhc05leHQoKSk7CisKKyAgICBzdGQ6OnN0cmluZyBvbGROZXh0ID0gbV9u
ZXh0OworICAgIHB1bXAoKTsKKyAgICByZXR1cm4gb2xkTmV4dDsKK30KKworYm9vbCBDb21tYW5k
VG9rZW5pemVyOjpoYXNOZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fbmV4dC5lbXB0eSgp
OworfQorCitOT19SRVRVUk4gc3RhdGljIHZvaWQgZGllKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnB1
dExpbmUpCit7CisgICAgZnByaW50ZihzdGRlcnIsICJVbmV4cGVjdGVkIGlucHV0IGxpbmU6ICVz
XG4iLCBpbnB1dExpbmUuY19zdHIoKSk7CisgICAgZXhpdCgxKTsKK30KKworVGVzdENvbW1hbmQg
cGFyc2VJbnB1dExpbmUoY29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0TGluZSkKK3sKKyAgICBUZXN0
Q29tbWFuZCByZXN1bHQ7CisgICAgQ29tbWFuZFRva2VuaXplciB0b2tlbml6ZXIoaW5wdXRMaW5l
KTsKKyAgICBpZiAoIXRva2VuaXplci5oYXNOZXh0KCkpCisgICAgICAgIGRpZShpbnB1dExpbmUp
OworCisgICAgc3RkOjpzdHJpbmcgYXJnID0gdG9rZW5pemVyLm5leHQoKTsKKyAgICByZXN1bHQu
cGF0aE9yVVJMID0gYXJnOworICAgIHdoaWxlICh0b2tlbml6ZXIuaGFzTmV4dCgpKSB7CisgICAg
ICAgIGFyZyA9IHRva2VuaXplci5uZXh0KCk7CisgICAgICAgIGlmIChhcmcgPT0gIi0tdGltZW91
dCIpIHsKKyAgICAgICAgICAgIGF1dG8gdGltZW91dFRva2VuID0gdG9rZW5pemVyLm5leHQoKTsK
KyAgICAgICAgICAgIHJlc3VsdC50aW1lb3V0ID0gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyhh
dG9pKHRpbWVvdXRUb2tlbi5jX3N0cigpKSk7CisgICAgICAgIH0gZWxzZSBpZiAoYXJnID09ICIt
cCIgfHwgYXJnID09ICItLXBpeGVsLXRlc3QiKSB7CisgICAgICAgICAgICByZXN1bHQuc2hvdWxk
RHVtcFBpeGVscyA9IHRydWU7CisgICAgICAgICAgICBpZiAodG9rZW5pemVyLmhhc05leHQoKSkK
KyAgICAgICAgICAgICAgICByZXN1bHQuZXhwZWN0ZWRQaXhlbEhhc2ggPSB0b2tlbml6ZXIubmV4
dCgpOworICAgICAgICB9IGVsc2UgaWYgKGFyZyA9PSBzdGQ6OnN0cmluZygiLS1kdW1wLWpzY29u
c29sZWxvZy1pbi1zdGRlcnIiKSkKKyAgICAgICAgICAgIHJlc3VsdC5kdW1wSlNDb25zb2xlTG9n
SW5TdGRFcnIgPSB0cnVlOworICAgICAgICBlbHNlIGlmIChhcmcgPT0gc3RkOjpzdHJpbmcoIi0t
YWJzb2x1dGVQYXRoIikpCisgICAgICAgICAgICByZXN1bHQuYWJzb2x1dGVQYXRoID0gdG9rZW5p
emVyLm5leHQoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGllKGlucHV0TGluZSk7Cisg
ICAgfQorICAgIAorICAgIGlmIChyZXN1bHQuYWJzb2x1dGVQYXRoLmVtcHR5KCkpCisgICAgICAg
IHJlc3VsdC5hYnNvbHV0ZVBhdGggPSB0ZXN0UGF0aChyZXN1bHQucGF0aE9yVVJMKTsKKworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3N0ZDo6ZmlsZXN5c3RlbTo6cGF0aCB0ZXN0UGF0aChjb25z
dCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQoreworICAgIGlmIChwYXRoT3JVUkwuZmluZCgiaHR0
cDovLyIpID09IDAgfHwgcGF0aE9yVVJMLmZpbmQoImh0dHBzOi8vIikgPT0gMCkKKyAgICAgICAg
cmV0dXJuIHsgfTsKKworICAgIGlmIChwYXRoT3JVUkwuZmluZCgiZmlsZTovLyIpID09IDApCisg
ICAgICAgIHJldHVybiBwYXRoT3JVUkwuc3Vic3RyKHN0cmxlbigiZmlsZTovIikpOworCisgICAg
cmV0dXJuIHN0ZDo6ZmlsZXN5c3RlbTo6YWJzb2x1dGUocGF0aE9yVVJMKTsKK30KKworc3RkOjpz
dHJpbmcgdGVzdFVSTFN0cmluZyhjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQoreworICAg
IGlmIChwYXRoT3JVUkwuZmluZCgiaHR0cDovLyIpID09IDAgfHwgcGF0aE9yVVJMLmZpbmQoImh0
dHBzOi8vIikgPT0gMCB8fCBwYXRoT3JVUkwuZmluZCgiZmlsZTovLyIpID09IDApCisgICAgICAg
IHJldHVybiBwYXRoT3JVUkw7CisKKyAgICByZXR1cm4gImZpbGU6Ly8iICsgc3RkOjpmaWxlc3lz
dGVtOjphYnNvbHV0ZShwYXRoT3JVUkwpLmdlbmVyaWNfc3RyaW5nKCk7Cit9CisKK30KSW5kZXg6
IFRvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVGVzdENvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9UZXN0UnVubmVyU2hhcmVkL1Rlc3RDb21tYW5kLmgJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMv
VGVzdFJ1bm5lclNoYXJlZC9UZXN0Q29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHN0cmluZz4KKyNp
bmNsdWRlIDx3dGYvU2Vjb25kcy5oPgorI2luY2x1ZGUgPHd0Zi9TdGRGaWxlc3lzdGVtLmg+CisK
K25hbWVzcGFjZSBXVFIgeworCitzdHJ1Y3QgVGVzdENvbW1hbmQgeworICAgIHN0ZDo6c3RyaW5n
IHBhdGhPclVSTDsKKyAgICBzdGQ6OmZpbGVzeXN0ZW06OnBhdGggYWJzb2x1dGVQYXRoOworICAg
IHN0ZDo6c3RyaW5nIGV4cGVjdGVkUGl4ZWxIYXNoOworICAgIFdURjo6U2Vjb25kcyB0aW1lb3V0
OworICAgIGJvb2wgc2hvdWxkRHVtcFBpeGVscyB7IGZhbHNlIH07CisgICAgYm9vbCBkdW1wSlND
b25zb2xlTG9nSW5TdGRFcnIgeyBmYWxzZSB9OworfTsKKworVGVzdENvbW1hbmQgcGFyc2VJbnB1
dExpbmUoY29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0TGluZSk7CisKK3N0ZDo6ZmlsZXN5c3RlbTo6
cGF0aCB0ZXN0UGF0aChjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKTsKK3N0ZDo6c3RyaW5n
IHRlc3RVUkxTdHJpbmcoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCk7CisKK30KSW5kZXg6
IFRvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVGVzdEZlYXR1cmVzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9UZXN0UnVubmVyU2hhcmVkL1Rlc3RGZWF0dXJlcy5jcHAJKG5vbmV4aXN0ZW50KQorKysg
VG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9UZXN0RmVhdHVyZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlRlc3RGZWF0dXJlcy5oIgorCisjaW5jbHVkZSAiVGVzdENvbW1hbmQuaCIKKyNpbmNsdWRl
IDxmc3RyZWFtPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx3dGYvU3RkRmlsZXN5c3Rl
bS5oPgorCituYW1lc3BhY2UgV1RSIHsKKwordm9pZCBtZXJnZShUZXN0RmVhdHVyZXMmIGJhc2Us
IFRlc3RGZWF0dXJlcyBhZGRpdGlvbmFsKQoreworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1
c2Ugc3RkOjp1bm9yZGVyZWRfbWFwOjptZXJnZSB3aGVuIGl0IGlzIGF2YWlsYWJsZSBmb3IgYWxs
IHBvcnRzLgorCisgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGFkZGl0aW9uYWwuZXhwZXJp
bWVudGFsRmVhdHVyZXMpCisgICAgICAgIGJhc2UuZXhwZXJpbWVudGFsRmVhdHVyZXMuaW5zZXJ0
X29yX2Fzc2lnbihrZXksIHZhbHVlKTsKKyAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogYWRk
aXRpb25hbC5pbnRlcm5hbERlYnVnRmVhdHVyZXMpCisgICAgICAgIGJhc2UuaW50ZXJuYWxEZWJ1
Z0ZlYXR1cmVzLmluc2VydF9vcl9hc3NpZ24oa2V5LCB2YWx1ZSk7CisgICAgZm9yIChhdXRvIFtr
ZXksIHZhbHVlXSA6IGFkZGl0aW9uYWwuYm9vbEZlYXR1cmVzKQorICAgICAgICBiYXNlLmJvb2xG
ZWF0dXJlcy5pbnNlcnRfb3JfYXNzaWduKGtleSwgdmFsdWUpOworICAgIGZvciAoYXV0byBba2V5
LCB2YWx1ZV0gOiBhZGRpdGlvbmFsLmRvdWJsZUZlYXR1cmVzKQorICAgICAgICBiYXNlLmRvdWJs
ZUZlYXR1cmVzLmluc2VydF9vcl9hc3NpZ24oa2V5LCB2YWx1ZSk7CisgICAgZm9yIChhdXRvIFtr
ZXksIHZhbHVlXSA6IGFkZGl0aW9uYWwuc3RyaW5nRmVhdHVyZXMpCisgICAgICAgIGJhc2Uuc3Ry
aW5nRmVhdHVyZXMuaW5zZXJ0X29yX2Fzc2lnbihrZXksIHZhbHVlKTsKKyAgICBmb3IgKGF1dG8g
W2tleSwgdmFsdWVdIDogYWRkaXRpb25hbC5zdHJpbmdWZWN0b3JGZWF0dXJlcykKKyAgICAgICAg
YmFzZS5zdHJpbmdWZWN0b3JGZWF0dXJlcy5pbnNlcnRfb3JfYXNzaWduKGtleSwgdmFsdWUpOwor
fQorCitzdGF0aWMgYm9vbCBwYXRoQ29udGFpbnMoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVS
TCwgY29uc3QgY2hhciogc3Vic3RyaW5nKQoreworICAgIHJldHVybiBwYXRoT3JVUkwuZmluZChz
dWJzdHJpbmcpICE9IHN0ZDo6c3RyaW5nOjpucG9zOworfQorCitzdGF0aWMgYm9vbCBzaG91bGRN
YWtlVmlld3BvcnRGbGV4aWJsZShjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQoreworICAg
IHJldHVybiBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAidmlld3BvcnQvIikgJiYgIXBhdGhDb250
YWlucyhwYXRoT3JVUkwsICJ2aXN1YWwtdmlld3BvcnQvIik7Cit9CisKK3N0YXRpYyBib29sIHNo
b3VsZFVzZUVwaGVtZXJhbFNlc3Npb24oY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKK3sK
KyAgICByZXR1cm4gcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgInczYy9JbmRleGVkREItcHJpdmF0
ZS1icm93c2luZyIpIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJ3M2NcXEluZGV4ZWREQi1w
cml2YXRlLWJyb3dzaW5nIik7Cit9CisKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPHN0ZDo6cGFpcjxk
b3VibGUsIGRvdWJsZT4+IG92ZXJyaWRlVmlld1dpZHRoQW5kSGVpZ2h0Rm9yVGVzdChjb25zdCBz
dGQ6OnN0cmluZyYgcGF0aE9yVVJMKQoreworICAgIGlmIChwYXRoQ29udGFpbnMocGF0aE9yVVJM
LCAic3ZnL1czQy1TVkctMS4xIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgInN2Z1xcVzND
LVNWRy0xLjEiKSkKKyAgICAgICAgcmV0dXJuIHsgeyA0ODAsIDM2MCB9IH07CisgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKK30KKworc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBvdmVycmlk
ZURldmljZVNjYWxlRmFjdG9yRm9yVGVzdChjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQor
eworICAgIGlmIChwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAiL2hpZHBpLTN4LSIpKQorICAgICAg
ICByZXR1cm4gMzsKKyAgICBpZiAocGF0aENvbnRhaW5zKHBhdGhPclVSTCwgIi9oaWRwaS0iKSkK
KyAgICAgICAgcmV0dXJuIDI7CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworc3RhdGlj
IGJvb2wgc2hvdWxkRHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKGNvbnN0IHN0ZDo6c3RyaW5nJiBw
YXRoT3JVUkwpCit7CisgICAgcmV0dXJuIHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhv
c3Q6ODgwMC9iZWFjb24iKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0
NDMvYmVhY29uIikKKyAgICAgICAgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9z
dDo4ODAwL2NvcnMiKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMv
Y29ycyIpCisgICAgICAgIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgw
MC9mZXRjaCIpIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6OTQ0My9mZXRj
aCIpCisgICAgICAgIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgwMC9z
ZXJ2aWNlLXdvcmtlcnMiKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0
NDMvc2VydmljZS13b3JrZXJzIikKKyAgICAgICAgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwg
ImxvY2FsaG9zdDo4ODAwL3N0cmVhbXMvd3JpdGFibGUtc3RyZWFtcyIpIHx8IHBhdGhDb250YWlu
cyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6OTQ0My9zdHJlYW1zL3dyaXRhYmxlLXN0cmVhbXMiKQor
ICAgICAgICB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvc3RyZWFt
cy9waXBpbmciKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMvc3Ry
ZWFtcy9waXBpbmciKQorICAgICAgICB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxo
b3N0Ojg4MDAveGhyIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQz
L3hociIpCisgICAgICAgIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgw
MC93ZWJydGMiKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMvd2Vi
cnRjIikKKyAgICAgICAgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo4ODAw
L3dlYnNvY2tldHMiKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMv
d2Vic29ja2V0cyIpOworfQorCitUZXN0RmVhdHVyZXMgaGFyZGNvZGVkRmVhdHVyZXNCYXNlZE9u
UGF0aEZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmIGNvbW1hbmQpCit7CisgICAgVGVzdEZlYXR1
cmVzIGZlYXR1cmVzOworCisgICAgaWYgKHNob3VsZE1ha2VWaWV3cG9ydEZsZXhpYmxlKGNvbW1h
bmQucGF0aE9yVVJMKSkKKyAgICAgICAgZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJ1
c2VGbGV4aWJsZVZpZXdwb3J0IiwgdHJ1ZSB9KTsKKyAgICBpZiAoc2hvdWxkVXNlRXBoZW1lcmFs
U2Vzc2lvbihjb21tYW5kLnBhdGhPclVSTCkpCisgICAgICAgIGZlYXR1cmVzLmJvb2xGZWF0dXJl
cy5pbnNlcnQoeyAidXNlRXBoZW1lcmFsU2Vzc2lvbiIsIHRydWUgfSk7CisgICAgaWYgKHNob3Vs
ZER1bXBKU0NvbnNvbGVMb2dJblN0ZEVycihjb21tYW5kLnBhdGhPclVSTCkpCisgICAgICAgIGZl
YXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyAiZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIiwg
dHJ1ZSB9KTsKKyAgICBpZiAoYXV0byBkZXZpY2VTY2FsZUZhY3RvciA9IG92ZXJyaWRlRGV2aWNl
U2NhbGVGYWN0b3JGb3JUZXN0KGNvbW1hbmQucGF0aE9yVVJMKTsgZGV2aWNlU2NhbGVGYWN0b3Ig
IT0gc3RkOjpudWxsb3B0KQorICAgICAgICBmZWF0dXJlcy5kb3VibGVGZWF0dXJlcy5pbnNlcnQo
eyAiZGV2aWNlU2NhbGVGYWN0b3IiLCBkZXZpY2VTY2FsZUZhY3Rvci52YWx1ZSgpIH0pOworICAg
IGlmIChhdXRvIHZpZXdXaWR0aEFuZEhlaWdodCA9IG92ZXJyaWRlVmlld1dpZHRoQW5kSGVpZ2h0
Rm9yVGVzdChjb21tYW5kLnBhdGhPclVSTCk7IHZpZXdXaWR0aEFuZEhlaWdodCAhPSBzdGQ6Om51
bGxvcHQpIHsKKyAgICAgICAgZmVhdHVyZXMuZG91YmxlRmVhdHVyZXMuaW5zZXJ0KHsgInZpZXdX
aWR0aCIsIHZpZXdXaWR0aEFuZEhlaWdodC0+Zmlyc3QgfSk7CisgICAgICAgIGZlYXR1cmVzLmRv
dWJsZUZlYXR1cmVzLmluc2VydCh7ICJ2aWV3SGVpZ2h0Iiwgdmlld1dpZHRoQW5kSGVpZ2h0LT5z
ZWNvbmQgfSk7CisgICAgfQorCisgICAgcmV0dXJuIGZlYXR1cmVzOworfQorCitzdGF0aWMgYm9v
bCBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKQor
eworICAgIGlmICh2YWx1ZSA9PSAidHJ1ZSIpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlm
ICh2YWx1ZSA9PSAiZmFsc2UiKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBMT0dfRVJS
T1IoIkZvdW5kIHVuZXhwZWN0ZWQgdmFsdWUgJyVzJyBmb3IgYm9vbGVhbiBvcHRpb24uIEV4cGVj
dGVkICd0cnVlJyBvciAnZmFsc2UnLiIsIHZhbHVlLmNfc3RyKCkpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKworc3RhdGljIGRvdWJsZSBwYXJzZURvdWJsZVRlc3RIZWFkZXJWYWx1ZShjb25zdCBz
dGQ6OnN0cmluZyYgdmFsdWUpCit7CisgICAgcmV0dXJuIHN0ZDo6c3RvZCh2YWx1ZSk7Cit9CisK
K3N0YXRpYyBzdGQ6OnN0cmluZyBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzUmVsYXRpdmVQ
YXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSwgY29uc3Qgc3RkOjpmaWxlc3lzdGVtOjpwYXRo
JiB0ZXN0UGF0aCkKK3sKKyAgICBhdXRvIGJhc2VQYXRoID0gdGVzdFBhdGgucGFyZW50X3BhdGgo
KTsKKyAgICByZXR1cm4gKGJhc2VQYXRoIC8gdmFsdWUpLmdlbmVyaWNfc3RyaW5nKCk7Cit9CisK
K3N0YXRpYyBzdGQ6OnN0cmluZyBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzVVJMKGNvbnN0
IHN0ZDo6c3RyaW5nJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdGVzdFVSTFN0cmluZyh2YWx1ZSk7
Cit9CisKK3N0YXRpYyBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcGFyc2VTdHJpbmdUZXN0SGVh
ZGVyVmFsdWVBc1N0cmluZ1ZlY3Rvcihjb25zdCBzdGQ6OnN0cmluZyYgc3RyaW5nKQoreworICAg
IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiByZXN1bHQ7CisKKyAgICBzaXplX3QgaSA9IDA7Cisg
ICAgd2hpbGUgKGkgPCBzdHJpbmcuc2l6ZSgpKSB7CisgICAgICAgIGF1dG8gZm91bmRJbmRleCA9
IHN0cmluZy5maW5kX2ZpcnN0X29mKCcsJywgaSk7CisKKyAgICAgICAgaWYgKGZvdW5kSW5kZXgg
IT0gaSkKKyAgICAgICAgICAgIHJlc3VsdC5wdXNoX2JhY2soc3RyaW5nLnN1YnN0cihpLCBmb3Vu
ZEluZGV4IC0gaSkpOworCisgICAgICAgIGlmIChmb3VuZEluZGV4ID09IHN0ZDo6c3RyaW5nOjpu
cG9zKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaSA9IGZvdW5kSW5kZXggKyAxOwor
ICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBUZXN0RmVhdHVyZXMgcGFy
c2VUZXN0SGVhZGVyKHN0ZDo6ZmlsZXN5c3RlbTo6cGF0aCBwYXRoLCBjb25zdCBzdGQ6OnVub3Jk
ZXJlZF9tYXA8c3RkOjpzdHJpbmcsIFRlc3RIZWFkZXJLZXlUeXBlPiYga2V5VHlwZU1hcCkKK3sK
KyAgICBhdXRvIGtleVR5cGUgPSBbJmtleVR5cGVNYXBdKGF1dG8mIGtleSkgeworICAgICAgICBh
dXRvIGl0ID0ga2V5VHlwZU1hcC5maW5kKGtleSk7CisgICAgICAgIGlmIChpdCA9PSBrZXlUeXBl
TWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIFRlc3RIZWFkZXJLZXlUeXBlOjpVbmtub3du
OworICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICB9OworCisgICAgVGVzdEZlYXR1cmVz
IGZlYXR1cmVzOworICAgIGlmICghc3RkOjpmaWxlc3lzdGVtOjpleGlzdHMocGF0aCkpCisgICAg
ICAgIHJldHVybiBmZWF0dXJlczsKKworICAgIHN0ZDo6aWZzdHJlYW0gZmlsZShwYXRoKTsKKyAg
ICBpZiAoIWZpbGUuZ29vZCgpKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IG9wZW4g
ZmlsZSB0byBpbnNwZWN0IHRlc3QgaGVhZGVycyBpbiAlcyIsIHBhdGguY19zdHIoKSk7CisgICAg
ICAgIHJldHVybiBmZWF0dXJlczsKKyAgICB9CisKKyAgICBzdGQ6OnN0cmluZyBvcHRpb25zOwor
ICAgIGdldGxpbmUoZmlsZSwgb3B0aW9ucyk7CisgICAgc3RkOjpzdHJpbmcgYmVnaW5TdHJpbmco
IndlYmtpdC10ZXN0LXJ1bm5lciBbICIpOworICAgIHN0ZDo6c3RyaW5nIGVuZFN0cmluZygiIF0i
KTsKKyAgICBzaXplX3QgYmVnaW5Mb2NhdGlvbiA9IG9wdGlvbnMuZmluZChiZWdpblN0cmluZyk7
CisgICAgaWYgKGJlZ2luTG9jYXRpb24gPT0gc3RkOjpzdHJpbmc6Om5wb3MpCisgICAgICAgIHJl
dHVybiBmZWF0dXJlczsKKyAgICBzaXplX3QgZW5kTG9jYXRpb24gPSBvcHRpb25zLmZpbmQoZW5k
U3RyaW5nLCBiZWdpbkxvY2F0aW9uKTsKKyAgICBpZiAoZW5kTG9jYXRpb24gPT0gc3RkOjpzdHJp
bmc6Om5wb3MpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgZmluZCBlbmQgb2YgdGVz
dCBoZWFkZXIgaW4gJXMiLCBwYXRoLmNfc3RyKCkpOworICAgICAgICByZXR1cm4gZmVhdHVyZXM7
CisgICAgfQorICAgIHN0ZDo6c3RyaW5nIHBhaXJTdHJpbmcgPSBvcHRpb25zLnN1YnN0cihiZWdp
bkxvY2F0aW9uICsgYmVnaW5TdHJpbmcuc2l6ZSgpLCBlbmRMb2NhdGlvbiAtIChiZWdpbkxvY2F0
aW9uICsgYmVnaW5TdHJpbmcuc2l6ZSgpKSk7CisgICAgc2l6ZV90IHBhaXJTdGFydCA9IDA7Cisg
ICAgd2hpbGUgKHBhaXJTdGFydCA8IHBhaXJTdHJpbmcuc2l6ZSgpKSB7CisgICAgICAgIHNpemVf
dCBwYWlyRW5kID0gcGFpclN0cmluZy5maW5kKCIgIiwgcGFpclN0YXJ0KTsKKyAgICAgICAgaWYg
KHBhaXJFbmQgPT0gc3RkOjpzdHJpbmc6Om5wb3MpCisgICAgICAgICAgICBwYWlyRW5kID0gcGFp
clN0cmluZy5zaXplKCk7CisgICAgICAgIHNpemVfdCBlcXVhbHNMb2NhdGlvbiA9IHBhaXJTdHJp
bmcuZmluZCgiPSIsIHBhaXJTdGFydCk7CisgICAgICAgIGlmIChlcXVhbHNMb2NhdGlvbiA9PSBz
dGQ6OnN0cmluZzo6bnBvcykgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJNYWxmb3JtZWQgb3B0
aW9uIGluIHRlc3QgaGVhZGVyIChjb3VsZCBub3QgZmluZCAnPScgY2hhcmFjdGVyKSBpbiAlcyIs
IHBhdGguY19zdHIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBh
dXRvIGtleSA9IHBhaXJTdHJpbmcuc3Vic3RyKHBhaXJTdGFydCwgZXF1YWxzTG9jYXRpb24gLSBw
YWlyU3RhcnQpOworICAgICAgICBhdXRvIHZhbHVlID0gcGFpclN0cmluZy5zdWJzdHIoZXF1YWxz
TG9jYXRpb24gKyAxLCBwYWlyRW5kIC0gKGVxdWFsc0xvY2F0aW9uICsgMSkpOworCisgICAgICAg
IGlmIChrZXkucmZpbmQoImV4cGVyaW1lbnRhbDoiKSA9PSAwKSB7CisgICAgICAgICAgICBrZXkg
PSBrZXkuc3Vic3RyKDEzKTsKKyAgICAgICAgICAgIGZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1
cmVzLmluc2VydCh7IGtleSwgcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKSB9KTsK
KyAgICAgICAgfSBlbHNlIGlmIChrZXkucmZpbmQoImludGVybmFsOiIpID09IDApIHsKKyAgICAg
ICAgICAgIGtleSA9IGtleS5zdWJzdHIoOSk7CisgICAgICAgICAgICBmZWF0dXJlcy5pbnRlcm5h
bERlYnVnRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUo
dmFsdWUpIH0pOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChrZXlUeXBlKGtleSkpIHsK
KyAgICAgICAgY2FzZSBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbDoKKyAgICAgICAgICAgIGZlYXR1
cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyBrZXksIHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1
ZSh2YWx1ZSkgfSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUZXN0SGVhZGVy
S2V5VHlwZTo6RG91YmxlOgorICAgICAgICAgICAgZmVhdHVyZXMuZG91YmxlRmVhdHVyZXMuaW5z
ZXJ0KHsga2V5LCBwYXJzZURvdWJsZVRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSkgfSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUZXN0SGVhZGVyS2V5VHlwZTo6U3RyaW5nOgorICAg
ICAgICAgICAgZmVhdHVyZXMuc3RyaW5nRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCB2YWx1ZSB9KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRlc3RIZWFkZXJLZXlUeXBlOjpTdHJp
bmdSZWxhdGl2ZVBhdGg6CisgICAgICAgICAgICBmZWF0dXJlcy5zdHJpbmdGZWF0dXJlcy5pbnNl
cnQoeyBrZXksIHBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNSZWxhdGl2ZVBhdGgodmFsdWUs
IHBhdGgpIH0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVGVzdEhlYWRlcktl
eVR5cGU6OlN0cmluZ1VSTDoKKyAgICAgICAgICAgIGZlYXR1cmVzLnN0cmluZ0ZlYXR1cmVzLmlu
c2VydCh7IGtleSwgcGFyc2VTdHJpbmdUZXN0SGVhZGVyVmFsdWVBc1VSTCh2YWx1ZSkgfSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUZXN0SGVhZGVyS2V5VHlwZTo6U3RyaW5n
VmVjdG9yOgorICAgICAgICAgICAgZmVhdHVyZXMuc3RyaW5nVmVjdG9yRmVhdHVyZXMuaW5zZXJ0
KHsga2V5LCBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzU3RyaW5nVmVjdG9yKHZhbHVlKSB9
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRlc3RIZWFkZXJLZXlUeXBlOjpV
bmtub3duOgorICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmtub3duIGtleSwgJyVzLCBpbiB0ZXN0
IGhlYWRlciBpbiAlcyIsIGtleS5jX3N0cigpLCBwYXRoLmNfc3RyKCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBwYWlyU3RhcnQgPSBwYWlyRW5kICsgMTsKKyAg
ICB9CisKKyAgICByZXR1cm4gZmVhdHVyZXM7Cit9CisKK1Rlc3RGZWF0dXJlcyBmZWF0dXJlRGVm
YXVsdHNGcm9tVGVzdEhlYWRlckZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmIGNvbW1hbmQsIGNv
bnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgVGVzdEhlYWRlcktleVR5cGU+JiBr
ZXlUeXBlTWFwKQoreworICAgIHJldHVybiBwYXJzZVRlc3RIZWFkZXIoY29tbWFuZC5hYnNvbHV0
ZVBhdGgsIGtleVR5cGVNYXApOworfQorCit9CkluZGV4OiBUb29scy9UZXN0UnVubmVyU2hhcmVk
L1Rlc3RGZWF0dXJlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVGVz
dEZlYXR1cmVzLmgJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9UZXN0
RmVhdHVyZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxvcHRpb25hbD4KKyNpbmNsdWRlIDxzdHJpbmc+Cisj
aW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKK25hbWVzcGFjZSBX
VFIgeworCitzdHJ1Y3QgVGVzdENvbW1hbmQ7CisKK3N0cnVjdCBUZXN0RmVhdHVyZXMgeworICAg
IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9vbD4gZXhwZXJpbWVudGFsRmVhdHVy
ZXM7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBib29sPiBpbnRlcm5hbERl
YnVnRmVhdHVyZXM7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBib29sPiBi
b29sRmVhdHVyZXM7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBkb3VibGU+
IGRvdWJsZUZlYXR1cmVzOworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgc3Rk
OjpzdHJpbmc+IHN0cmluZ0ZlYXR1cmVzOworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0
cmluZywgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+PiBzdHJpbmdWZWN0b3JGZWF0dXJlczsKK307
CisKK3ZvaWQgbWVyZ2UoVGVzdEZlYXR1cmVzJiBiYXNlLCBUZXN0RmVhdHVyZXMgYWRkaXRpb25h
bCk7CisKK1Rlc3RGZWF0dXJlcyBoYXJkY29kZWRGZWF0dXJlc0Jhc2VkT25QYXRoRm9yVGVzdChj
b25zdCBUZXN0Q29tbWFuZCYpOworCitlbnVtIGNsYXNzIFRlc3RIZWFkZXJLZXlUeXBlIDogdWlu
dDhfdCB7CisgICAgQm9vbCwKKyAgICBEb3VibGUsCisgICAgU3RyaW5nLAorICAgIFN0cmluZ1Jl
bGF0aXZlUGF0aCwKKyAgICBTdHJpbmdVUkwsCisgICAgU3RyaW5nVmVjdG9yLAorICAgIFVua25v
d24KK307CitUZXN0RmVhdHVyZXMgZmVhdHVyZURlZmF1bHRzRnJvbVRlc3RIZWFkZXJGb3JUZXN0
KGNvbnN0IFRlc3RDb21tYW5kJiwgY29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5n
LCBUZXN0SGVhZGVyS2V5VHlwZT4mKTsKKworfQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0NN
YWtlTGlzdHMudHh0CShyZXZpc2lvbiAyNjgzNjUpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVy
L0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBAIHNldChXZWJL
aXRUZXN0UnVubmVyX0xJQlJBUklFUwogCiBzZXQoV2ViS2l0VGVzdFJ1bm5lcl9JTkNMVURFX0RJ
UkVDVE9SSUVTCiAgICAgJHtDTUFLRV9CSU5BUllfRElSfQorICAgICR7V2ViS2l0VGVzdFJ1bm5l
cl9TSEFSRURfRElSfQogICAgICR7V2ViS2l0VGVzdFJ1bm5lcl9CSU5ESU5HU19ESVJ9CiAgICAg
JHtXZWJLaXRUZXN0UnVubmVyX0RFUklWRURfU09VUkNFU19ESVJ9L1VJU2NyaXB0Q29udGV4dAog
ICAgICR7V2ViS2l0VGVzdFJ1bm5lcl9ESVJ9CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVy
L1Rlc3RDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVy
L1Rlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjY4MzY1KQorKysgVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcg
QEAKICNpbmNsdWRlICJFdmVudFNlbmRlclByb3h5LmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtV2ViVmlldy5oIgorI2luY2x1ZGUgIlRlc3RDb21tYW5kLmgiCiAj
aW5jbHVkZSAiVGVzdEludm9jYXRpb24uaCIKICNpbmNsdWRlICJXZWJDb3JlVGVzdFN1cHBvcnQu
aCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CkBAIC0x
MjM2LDI0ICsxMjM3LDYgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dzQW55U1NMQ2Vy
dAogfQogI2VuZGlmCiAKLXN0YXRpYyBzdGQ6OnN0cmluZyB0ZXN0UGF0aChXS1VSTFJlZiB1cmwp
Ci17Ci0gICAgYXV0byBzY2hlbWUgPSBhZG9wdFdLKFdLVVJMQ29weVNjaGVtZSh1cmwpKTsKLSAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZ0lnbm9yaW5nQ2FzZShzY2hlbWUuZ2V0
KCksICJmaWxlIikpIHsKLSAgICAgICAgYXV0byBwYXRoID0gYWRvcHRXSyhXS1VSTENvcHlQYXRo
KHVybCkpOwotICAgICAgICBhdXRvIGJ1ZmZlciA9IHN0ZDo6dmVjdG9yPGNoYXI+KFdLU3RyaW5n
R2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShwYXRoLmdldCgpKSk7Ci0gICAgICAgIGF1dG8gbGVu
Z3RoID0gV0tTdHJpbmdHZXRVVEY4Q1N0cmluZyhwYXRoLmdldCgpLCBidWZmZXIuZGF0YSgpLCBi
dWZmZXIuc2l6ZSgpKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobGVuZ3RoID4gMCk7Ci0jaWYg
T1MoV0lORE9XUykKLSAgICAgICAgLy8gUmVtb3ZlIHRoZSBmaXJzdCAnLycgaWYgaXQgc3RhcnRz
IHdpdGggc29tZXRoaW5nIGxpa2UgIi9DOi8iLgotICAgICAgICBpZiAobGVuZ3RoID49IDQgJiYg
YnVmZmVyWzBdID09ICcvJyAmJiBidWZmZXJbMl0gPT0gJzonICYmIGJ1ZmZlclszXSA9PSAnLycp
Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpzdHJpbmcoYnVmZmVyLmRhdGEoKSArIDEsIGxlbmd0
aCAtIDEpOwotI2VuZGlmCi0gICAgICAgIHJldHVybiBzdGQ6OnN0cmluZyhidWZmZXIuZGF0YSgp
LCBsZW5ndGggLSAxKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7Ci19Ci0KIFdL
VVJMUmVmIFRlc3RDb250cm9sbGVyOjpjcmVhdGVUZXN0VVJMKGNvbnN0IGNoYXIqIHBhdGhPclVS
TCkKIHsKICAgICBpZiAoc3Ryc3RyKHBhdGhPclVSTCwgImh0dHA6Ly8iKSB8fCBzdHJzdHIocGF0
aE9yVVJMLCAiaHR0cHM6Ly8iKSB8fCBzdHJzdHIocGF0aE9yVVJMLCAiZmlsZTovLyIpKQpAQCAt
MTI5Nyw3ICsxMjgwLDcgQEAgVGVzdE9wdGlvbnMgVGVzdENvbnRyb2xsZXI6OnRlc3RPcHRpb25z
RgogICAgIFRlc3RGZWF0dXJlcyBmZWF0dXJlcyA9IG1fZ2xvYmFsRmVhdHVyZXM7CiAgICAgbWVy
Z2UoZmVhdHVyZXMsIGhhcmRjb2RlZEZlYXR1cmVzQmFzZWRPblBhdGhGb3JUZXN0KGNvbW1hbmQp
KTsKICAgICBtZXJnZShmZWF0dXJlcywgcGxhdGZvcm1TcGVjaWZpY0ZlYXR1cmVEZWZhdWx0c0Zv
clRlc3QoY29tbWFuZCkpOwotICAgIG1lcmdlKGZlYXR1cmVzLCBmZWF0dXJlRGVmYXVsdHNGcm9t
VGVzdEhlYWRlckZvclRlc3QoY29tbWFuZCkpOworICAgIG1lcmdlKGZlYXR1cmVzLCBmZWF0dXJl
RGVmYXVsdHNGcm9tVGVzdEhlYWRlckZvclRlc3QoY29tbWFuZCwgVGVzdE9wdGlvbnM6OmtleVR5
cGVNYXBwaW5nKCkpKTsKICAgICBtZXJnZShmZWF0dXJlcywgcGxhdGZvcm1TcGVjaWZpY0ZlYXR1
cmVPdmVycmlkZXNEZWZhdWx0c0ZvclRlc3QoY29tbWFuZCkpOwogCiAgICAgcmV0dXJuIFRlc3RP
cHRpb25zIHsgZmVhdHVyZXMgfTsKQEAgLTEzNDUsNiArMTMyOCwyNCBAQCBzdGF0aWMgdm9pZCBj
b250ZW50RXh0ZW5zaW9uU3RvcmVDYWxsYmFjCiAgICAgY29udGV4dC0+dGVzdENvbnRyb2xsZXIu
bm90aWZ5RG9uZSgpOwogfQogCitzdGF0aWMgc3RkOjpzdHJpbmcgdGVzdFBhdGgoV0tVUkxSZWYg
dXJsKQoreworICAgIGF1dG8gc2NoZW1lID0gYWRvcHRXSyhXS1VSTENvcHlTY2hlbWUodXJsKSk7
CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmdJZ25vcmluZ0Nhc2Uoc2NoZW1l
LmdldCgpLCAiZmlsZSIpKSB7CisgICAgICAgIGF1dG8gcGF0aCA9IGFkb3B0V0soV0tVUkxDb3B5
UGF0aCh1cmwpKTsKKyAgICAgICAgYXV0byBidWZmZXIgPSBzdGQ6OnZlY3RvcjxjaGFyPihXS1N0
cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUocGF0aC5nZXQoKSkpOworICAgICAgICBhdXRv
IGxlbmd0aCA9IFdLU3RyaW5nR2V0VVRGOENTdHJpbmcocGF0aC5nZXQoKSwgYnVmZmVyLmRhdGEo
KSwgYnVmZmVyLnNpemUoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxlbmd0aCA+IDApOwor
I2lmIE9TKFdJTkRPV1MpCisgICAgICAgIC8vIFJlbW92ZSB0aGUgZmlyc3QgJy8nIGlmIGl0IHN0
YXJ0cyB3aXRoIHNvbWV0aGluZyBsaWtlICIvQzovIi4KKyAgICAgICAgaWYgKGxlbmd0aCA+PSA0
ICYmIGJ1ZmZlclswXSA9PSAnLycgJiYgYnVmZmVyWzJdID09ICc6JyAmJiBidWZmZXJbM10gPT0g
Jy8nKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKGJ1ZmZlci5kYXRhKCkgKyAxLCBs
ZW5ndGggLSAxKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gc3RkOjpzdHJpbmcoYnVmZmVyLmRh
dGEoKSwgbGVuZ3RoIC0gMSk7CisgICAgfQorICAgIHJldHVybiBzdGQ6OnN0cmluZygpOworfQor
CiBzdGF0aWMgc3RkOjpzdHJpbmcgY29udGVudEV4dGVuc2lvbkpTT05QYXRoKFdLVVJMUmVmIHVy
bCkKIHsKICAgICBhdXRvIHBhdGggPSB0ZXN0UGF0aCh1cmwpOwpAQCAtMTQzMCw5NyArMTQzMSwx
MyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpyZXNldENvbnRlbnRFeHRlbnNpCiAKICNlbmRpZiAv
LyAhRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKIAotY2xhc3MgQ29tbWFuZFRva2VuaXplciB7
Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgQ29tbWFuZFRva2VuaXplcihjb25zdCBzdGQ6OnN0cmlu
ZyYgaW5wdXQpCi0gICAgICAgIDogbV9pbnB1dChpbnB1dCkKLSAgICB7Ci0gICAgICAgIHB1bXAo
KTsKLSAgICB9Ci0KLSAgICBib29sIGhhc05leHQoKSBjb25zdDsKLSAgICBzdGQ6OnN0cmluZyBu
ZXh0KCk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBwdW1wKCk7Ci0gICAgc3RhdGljIGNvbnN0IGNo
YXIga1NlcGFyYXRvciA9ICdcJyc7Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1faW5wdXQ7Ci0g
ICAgc3RkOjpzdHJpbmcgbV9uZXh0OwotICAgIHNpemVfdCBtX3Bvc05leHRTZXBhcmF0b3IgeyAw
IH07Ci19OwotCi12b2lkIENvbW1hbmRUb2tlbml6ZXI6OnB1bXAoKQotewotICAgIGlmIChtX3Bv
c05leHRTZXBhcmF0b3IgPT0gc3RkOjpzdHJpbmc6Om5wb3MgfHwgbV9wb3NOZXh0U2VwYXJhdG9y
ID09IG1faW5wdXQuc2l6ZSgpKSB7Ci0gICAgICAgIG1fbmV4dCA9IHN0ZDo6c3RyaW5nKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc2l6ZV90IHN0YXJ0ID0gbV9wb3NOZXh0U2VwYXJh
dG9yID8gbV9wb3NOZXh0U2VwYXJhdG9yICsgMSA6IDA7Ci0gICAgbV9wb3NOZXh0U2VwYXJhdG9y
ID0gbV9pbnB1dC5maW5kKGtTZXBhcmF0b3IsIHN0YXJ0KTsKLSAgICBzaXplX3Qgc2l6ZSA9IG1f
cG9zTmV4dFNlcGFyYXRvciA9PSBzdGQ6OnN0cmluZzo6bnBvcyA/IHN0ZDo6c3RyaW5nOjpucG9z
IDogbV9wb3NOZXh0U2VwYXJhdG9yIC0gc3RhcnQ7Ci0gICAgbV9uZXh0ID0gc3RkOjpzdHJpbmco
bV9pbnB1dCwgc3RhcnQsIHNpemUpOwotfQotCi1zdGQ6OnN0cmluZyBDb21tYW5kVG9rZW5pemVy
OjpuZXh0KCkKLXsKLSAgICBBU1NFUlQoaGFzTmV4dCgpKTsKLQotICAgIHN0ZDo6c3RyaW5nIG9s
ZE5leHQgPSBtX25leHQ7Ci0gICAgcHVtcCgpOwotICAgIHJldHVybiBvbGROZXh0OwotfQotCi1i
b29sIENvbW1hbmRUb2tlbml6ZXI6Omhhc05leHQoKSBjb25zdAotewotICAgIHJldHVybiAhbV9u
ZXh0LmVtcHR5KCk7Ci19Ci0KLU5PX1JFVFVSTiBzdGF0aWMgdm9pZCBkaWUoY29uc3Qgc3RkOjpz
dHJpbmcmIGlucHV0TGluZSkKLXsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIlVuZXhwZWN0ZWQgaW5w
dXQgbGluZTogJXNcbiIsIGlucHV0TGluZS5jX3N0cigpKTsKLSAgICBleGl0KDEpOwotfQotCi1z
dGF0aWMgVGVzdENvbW1hbmQgcGFyc2VJbnB1dExpbmUoY29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0
TGluZSkKLXsKLSAgICBUZXN0Q29tbWFuZCByZXN1bHQ7Ci0gICAgQ29tbWFuZFRva2VuaXplciB0
b2tlbml6ZXIoaW5wdXRMaW5lKTsKLSAgICBpZiAoIXRva2VuaXplci5oYXNOZXh0KCkpCi0gICAg
ICAgIGRpZShpbnB1dExpbmUpOwotCi0gICAgc3RkOjpzdHJpbmcgYXJnID0gdG9rZW5pemVyLm5l
eHQoKTsKLSAgICByZXN1bHQucGF0aE9yVVJMID0gYXJnOwotICAgIHdoaWxlICh0b2tlbml6ZXIu
aGFzTmV4dCgpKSB7Ci0gICAgICAgIGFyZyA9IHRva2VuaXplci5uZXh0KCk7Ci0gICAgICAgIGlm
IChhcmcgPT0gc3RkOjpzdHJpbmcoIi0tdGltZW91dCIpKSB7Ci0gICAgICAgICAgICBzdGQ6OnN0
cmluZyB0aW1lb3V0VG9rZW4gPSB0b2tlbml6ZXIubmV4dCgpOwotICAgICAgICAgICAgcmVzdWx0
LnRpbWVvdXQgPSBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKGF0b2kodGltZW91dFRva2VuLmNf
c3RyKCkpKTsKLSAgICAgICAgfSBlbHNlIGlmIChhcmcgPT0gc3RkOjpzdHJpbmcoIi1wIikgfHwg
YXJnID09IHN0ZDo6c3RyaW5nKCItLXBpeGVsLXRlc3QiKSkgewotICAgICAgICAgICAgcmVzdWx0
LnNob3VsZER1bXBQaXhlbHMgPSB0cnVlOwotICAgICAgICAgICAgaWYgKHRva2VuaXplci5oYXNO
ZXh0KCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0LmV4cGVjdGVkUGl4ZWxIYXNoID0gdG9rZW5p
emVyLm5leHQoKTsKLSAgICAgICAgfSBlbHNlIGlmIChhcmcgPT0gc3RkOjpzdHJpbmcoIi0tZHVt
cC1qc2NvbnNvbGVsb2ctaW4tc3RkZXJyIikpCi0gICAgICAgICAgICByZXN1bHQuZHVtcEpTQ29u
c29sZUxvZ0luU3RkRXJyID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAoYXJnID09IHN0ZDo6c3Ry
aW5nKCItLWFic29sdXRlUGF0aCIpKQotICAgICAgICAgICAgcmVzdWx0LmFic29sdXRlUGF0aCA9
IHRva2VuaXplci5uZXh0KCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRpZShpbnB1dExp
bmUpOwotICAgIH0KLSAgICAKLSAgICBpZiAocmVzdWx0LmFic29sdXRlUGF0aC5lbXB0eSgpKSB7
Ci0gICAgICAgIC8vIEdyb3NzLiBOZWVkIHRvIHJlZHVjZSBjb252ZXJzaW9ucyBiZXR3ZWVuIGFs
bCB0aGUgc3RyaW5nIHR5cGVzIGFuZCBVUkxzLgotICAgICAgICByZXN1bHQuYWJzb2x1dGVQYXRo
ID0gdGVzdFBhdGgoYWRvcHRXSyhUZXN0Q29udHJvbGxlcjo6Y3JlYXRlVGVzdFVSTChyZXN1bHQu
cGF0aE9yVVJMLmNfc3RyKCkpKS5nZXQoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQogYm9vbCBUZXN0Q29udHJvbGxlcjo6cnVuVGVzdChjb25zdCBjaGFyKiBpbnB1dExpbmUp
CiB7CiAgICAgQXV0b2RyYWluZWRQb29sIHBvb2w7Ci0gICAgCisKICAgICBXS1RleHRDaGVja2Vy
U2V0VGVzdGluZ01vZGUodHJ1ZSk7Ci0gICAgVGVzdENvbW1hbmQgY29tbWFuZCA9IHBhcnNlSW5w
dXRMaW5lKHN0ZDo6c3RyaW5nKGlucHV0TGluZSkpOworICAgIAorICAgIGF1dG8gY29tbWFuZCA9
IHBhcnNlSW5wdXRMaW5lKHN0ZDo6c3RyaW5nKGlucHV0TGluZSkpOwogCiAgICAgbV9zdGF0ZSA9
IFJ1bm5pbmdUZXN0OwogICAgIApJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29u
dHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRy
b2xsZXIuaAkocmV2aXNpb24gMjY4MzY1KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0
Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NDQsMTMgKzY0NCw0IEBAIHByaXZhdGU6
CiAjZW5kaWYKIH07CiAKLXN0cnVjdCBUZXN0Q29tbWFuZCB7Ci0gICAgc3RkOjpzdHJpbmcgcGF0
aE9yVVJMOwotICAgIHN0ZDo6c3RyaW5nIGFic29sdXRlUGF0aDsKLSAgICBzdGQ6OnN0cmluZyBl
eHBlY3RlZFBpeGVsSGFzaDsKLSAgICBXVEY6OlNlY29uZHMgdGltZW91dDsKLSAgICBib29sIHNo
b3VsZER1bXBQaXhlbHMgeyBmYWxzZSB9OwotICAgIGJvb2wgZHVtcEpTQ29uc29sZUxvZ0luU3Rk
RXJyIHsgZmFsc2UgfTsKLX07Ci0KIH0gLy8gbmFtZXNwYWNlIFdUUgpJbmRleDogVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0T3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9UZXN0T3B0aW9ucy5jcHAJKHJldmlzaW9uIDI2ODM2NSkKKysrIFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3OCAr
MjYsMTMgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0T3B0aW9ucy5oIgog
Ci0jaW5jbHVkZSAiU3RyaW5nRnVuY3Rpb25zLmgiCi0jaW5jbHVkZSAiVGVzdENvbnRyb2xsZXIu
aCIKICNpbmNsdWRlIDxmc3RyZWFtPgotI2luY2x1ZGUgPGlvc3RyZWFtPgogI2luY2x1ZGUgPHN0
cmluZz4KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRGaWxlc3lzdGVtLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+Ci0KLSNkZWZpbmUgRFVNUF9GRUFUVVJFUyAwCiAKIG5hbWVzcGFjZSBXVFIg
ewogCi0jaWYgRFVNUF9GRUFUVVJFUwotc3RhdGljIHZvaWQgZHVtcEZlYXR1cmVzKGNvbnN0IFRl
c3RGZWF0dXJlcyYgZmVhdHVyZXMpCi17Ci0gICAgaWYgKGZlYXR1cmVzLmV4cGVyaW1lbnRhbEZl
YXR1cmVzLmVtcHR5KCkgJiYgZmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzLmVtcHR5KCkg
JiYgZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmVtcHR5KCkgJiYgZmVhdHVyZXMuZG91YmxlRmVhdHVy
ZXMuZW1wdHkoKSAmJiBmZWF0dXJlcy5zdHJpbmdGZWF0dXJlcy5lbXB0eSgpICYmIGZlYXR1cmVz
LnN0cmluZ1ZlY3RvckZlYXR1cmVzLmVtcHR5KCkpIHsKLSAgICAgICAgc3RkOjpjZXJyIDw8ICIg
IFtFTVBUWV1cbiI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKCFmZWF0
dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcy5lbXB0eSgpKSB7Ci0gICAgICAgIHN0ZDo6Y2VyciA8
PCAiICBFeHBlcmltZW50YWwgRmVhdHVyZXM6IFxuIjsKLSAgICAgICAgZm9yIChhdXRvIFtrZXks
IHZhbHVlXSA6IGZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzKQotICAgICAgICAgICAgc3Rk
OjpjZXJyIDw8ICIgICAgIiA8PCBrZXkgPDwgIjogIiA8PCB2YWx1ZSA8PCAnXG4nOwotICAgIH0K
LSAgICBpZiAoIWZlYXR1cmVzLmludGVybmFsRGVidWdGZWF0dXJlcy5lbXB0eSgpKSB7Ci0gICAg
ICAgIHN0ZDo6Y2VyciA8PCAiICBJbnRlcm5hbCBGZWF0dXJlczogXG4iOwotICAgICAgICBmb3Ig
KGF1dG8gW2tleSwgdmFsdWVdIDogZmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzKQotICAg
ICAgICAgICAgc3RkOjpjZXJyIDw8ICIgICAgIiA8PCBrZXkgPDwgIjogIiA8PCB2YWx1ZSA8PCAn
XG4nOwotICAgIH0KLSAgICBpZiAoIWZlYXR1cmVzLmJvb2xGZWF0dXJlcy5lbXB0eSgpKSB7Ci0g
ICAgICAgIHN0ZDo6Y2VyciA8PCAiICBCb29sIEZlYXR1cmVzOiBcbiI7Ci0gICAgICAgIGZvciAo
YXV0byBba2V5LCB2YWx1ZV0gOiBmZWF0dXJlcy5ib29sRmVhdHVyZXMpCi0gICAgICAgICAgICBz
dGQ6OmNlcnIgPDwgIiAgICAiIDw8IGtleSA8PCAiOiAiIDw8IHZhbHVlIDw8ICdcbic7Ci0gICAg
fQotICAgIGlmICghZmVhdHVyZXMuZG91YmxlRmVhdHVyZXMuZW1wdHkoKSkgewotICAgICAgICBz
dGQ6OmNlcnIgPDwgIiAgRG91YmxlIEZlYXR1cmVzOiBcbiI7Ci0gICAgICAgIGZvciAoYXV0byBb
a2V5LCB2YWx1ZV0gOiBmZWF0dXJlcy5kb3VibGVGZWF0dXJlcykKLSAgICAgICAgICAgIHN0ZDo6
Y2VyciA8PCAiICAgICIgPDwga2V5IDw8ICI6ICIgPDwgdmFsdWUgPDwgJ1xuJzsKLSAgICB9Ci0g
ICAgaWYgKCFmZWF0dXJlcy5zdHJpbmdGZWF0dXJlcy5lbXB0eSgpKSB7Ci0gICAgICAgIHN0ZDo6
Y2VyciA8PCAiICBTdHJpbmcgRmVhdHVyZXM6IFxuIjsKLSAgICAgICAgZm9yIChhdXRvIFtrZXks
IHZhbHVlXSA6IGZlYXR1cmVzLnN0cmluZ0ZlYXR1cmVzKQotICAgICAgICAgICAgc3RkOjpjZXJy
IDw8ICIgICAgIiA8PCBrZXkgPDwgIjogIiA8PCB2YWx1ZSA8PCAnXG4nOwotICAgIH0KLSAgICBp
ZiAoIWZlYXR1cmVzLnN0cmluZ1ZlY3RvckZlYXR1cmVzLmVtcHR5KCkpIHsKLSAgICAgICAgc3Rk
OjpjZXJyIDw8ICIgIFN0cmluZyBWZWN0b3IgRmVhdHVyZXM6IFxuIjsKLSAgICAgICAgZm9yIChh
dXRvIFtrZXksIHZhbHVlXSA6IGZlYXR1cmVzLnN0cmluZ1ZlY3RvckZlYXR1cmVzKQotICAgICAg
ICAgICAgc3RkOjpjZXJyIDw8ICIgICAgIiA8PCBrZXkgPDwgIjogTnVtYmVyIG9mIHN0cmluZ3Mg
IiA8PCB2YWx1ZS5zaXplKCkgPDwgJ1xuJzsKLSAgICB9Ci19Ci0jZW5kaWYKLQotdm9pZCBtZXJn
ZShUZXN0RmVhdHVyZXMmIGJhc2UsIFRlc3RGZWF0dXJlcyBhZGRpdGlvbmFsKQotewotICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCB1c2Ugc3RkOjp1bm9yZGVyZWRfbWFwOjptZXJnZSB3aGVuIGl0
IGlzIGF2YWlsYWJsZSBmb3IgYWxsIHBvcnRzLgotCi0gICAgZm9yIChhdXRvIFtrZXksIHZhbHVl
XSA6IGFkZGl0aW9uYWwuZXhwZXJpbWVudGFsRmVhdHVyZXMpCi0gICAgICAgIGJhc2UuZXhwZXJp
bWVudGFsRmVhdHVyZXMuaW5zZXJ0X29yX2Fzc2lnbihrZXksIHZhbHVlKTsKLSAgICBmb3IgKGF1
dG8gW2tleSwgdmFsdWVdIDogYWRkaXRpb25hbC5pbnRlcm5hbERlYnVnRmVhdHVyZXMpCi0gICAg
ICAgIGJhc2UuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzLmluc2VydF9vcl9hc3NpZ24oa2V5LCB2YWx1
ZSk7Ci0gICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGFkZGl0aW9uYWwuYm9vbEZlYXR1cmVz
KQotICAgICAgICBiYXNlLmJvb2xGZWF0dXJlcy5pbnNlcnRfb3JfYXNzaWduKGtleSwgdmFsdWUp
OwotICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBhZGRpdGlvbmFsLmRvdWJsZUZlYXR1cmVz
KQotICAgICAgICBiYXNlLmRvdWJsZUZlYXR1cmVzLmluc2VydF9vcl9hc3NpZ24oa2V5LCB2YWx1
ZSk7Ci0gICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGFkZGl0aW9uYWwuc3RyaW5nRmVhdHVy
ZXMpCi0gICAgICAgIGJhc2Uuc3RyaW5nRmVhdHVyZXMuaW5zZXJ0X29yX2Fzc2lnbihrZXksIHZh
bHVlKTsKLSAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogYWRkaXRpb25hbC5zdHJpbmdWZWN0
b3JGZWF0dXJlcykKLSAgICAgICAgYmFzZS5zdHJpbmdWZWN0b3JGZWF0dXJlcy5pbnNlcnRfb3Jf
YXNzaWduKGtleSwgdmFsdWUpOwotfQotCiBzdGF0aWMgY29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFw
PHN0ZDo6c3RyaW5nLCBib29sPiYgYm9vbERlZmF1bHRzTWFwKCkKIHsKICAgICBzdGF0aWMgc3Rk
Ojp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBib29sPiBtYXAgewpAQCAtMTgyLDI2OCArMTE3
LDc2IEBAIHN0YXRpYyBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHIKICAgICByZXR1
cm4gbWFwOwogfQogCi1lbnVtIGNsYXNzIEtleVR5cGUgOiB1aW50OF90IHsKLSAgICBCb29sLAot
ICAgIERvdWJsZSwKLSAgICBTdHJpbmcsCi0gICAgU3RyaW5nUmVsYXRpdmVQYXRoLAotICAgIFN0
cmluZ1VSTCwKLSAgICBTdHJpbmdWZWN0b3IsCi0gICAgVW5rbm93bgotfTsKLQotc3RhdGljIGNv
bnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgS2V5VHlwZT4mIGtleVR5cGVNYXAo
KQotewotICAgIHN0YXRpYyBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIEtleVR5cGU+
IG1hcCB7Ci0gICAgICAgIHsgImFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNy
ZWRlbnRpYWxzIiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJhbGxvd1RvcE5hdmlnYXRp
b25Ub0RhdGFVUkxzIiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJhbGxvd3NMaW5rUHJl
dmlldyIsIEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAiZG9tUGFzdGVBbGxvd2VkIiwgS2V5
VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIiLCBLZXlU
eXBlOjpCb29sIH0sCi0gICAgICAgIHsgImVkaXRhYmxlIiwgS2V5VHlwZTo6Qm9vbCB9LAotICAg
ICAgICB7ICJlbmFibGVBcHBOYXAiLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsgImVuYWJs
ZUF0dGFjaG1lbnRFbGVtZW50IiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJlbmFibGVC
YWNrRm9yd2FyZENhY2hlIiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJlbmFibGVDYXB0
dXJlQXVkaW9JbkdQVVByb2Nlc3MiLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsgImVuYWJs
ZUNhcHR1cmVBdWRpb0luVUlQcm9jZXNzIiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJl
bmFibGVDYXB0dXJlVmlkZW9JbkdQVVByb2Nlc3MiLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAg
IHsgImVuYWJsZUNhcHR1cmVWaWRlb0luVUlQcm9jZXNzIiwgS2V5VHlwZTo6Qm9vbCB9LAotICAg
ICAgICB7ICJlbmFibGVDb2xvckZpbHRlciIsIEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAi
ZW5hYmxlSW5BcHBCcm93c2VyUHJpdmFjeSIsIEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAi
ZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zIiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJl
bmFibGVLZXlnZW5FbGVtZW50IiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJlbmFibGVN
ZW51SXRlbUVsZW1lbnQiLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsgImVuYWJsZU1vZGVy
bk1lZGlhQ29udHJvbHMiLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsgImVuYWJsZVByb2Nl
c3NTd2FwT25OYXZpZ2F0aW9uIiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJlbmFibGVQ
cm9jZXNzU3dhcE9uV2luZG93T3BlbiIsIEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAiZW5h
YmxlU2VydmljZUNvbnRyb2xzIiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJlbmFibGVX
ZWJBdXRoZW50aWNhdGlvbiIsIEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAiZW5hYmxlV2Vi
QXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3IiLCBLZXlUeXBlOjpCb29sIH0sCi0gICAg
ICAgIHsgImlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHMiLCBLZXlUeXBlOjpCb29s
IH0sCi0gICAgICAgIHsgImlnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzIiwgS2V5VHlwZTo6Qm9v
bCB9LAotICAgICAgICB7ICJpc0FwcEJvdW5kV2ViVmlldyIsIEtleVR5cGU6OkJvb2wgfSwKLSAg
ICAgICAgeyAibmVlZHNTaXRlU3BlY2lmaWNRdWlya3MiLCBLZXlUeXBlOjpCb29sIH0sCi0gICAg
ICAgIHsgInB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUiLCBLZXlUeXBlOjpCb29s
IH0sCi0gICAgICAgIHsgInJ1blNpbmdseSIsIEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAi
c2hvdWxkSGFuZGxlUnVuT3BlblBhbmVsIiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJz
aG91bGRJZ25vcmVNZXRhVmlld3BvcnQiLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsgInNo
b3VsZFByZXNlbnRQb3BvdmVycyIsIEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAic2hvdWxk
U2hvd1RvdWNoZXMiLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsgInNob3VsZFNob3dXZWJW
aWV3IiwgS2V5VHlwZTo6Qm9vbCB9LAotICAgICAgICB7ICJzcGVsbENoZWNraW5nRG90cyIsIEtl
eVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAidXNlQWNjZWxlcmF0ZWREcmF3aW5nIiwgS2V5VHlw
ZTo6Qm9vbCB9LAotICAgICAgICB7ICJ1c2VDaGFyYWN0ZXJTZWxlY3Rpb25HcmFudWxhcml0eSIs
IEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAidXNlRGF0YURldGVjdGlvbiIsIEtleVR5cGU6
OkJvb2wgfSwKLSAgICAgICAgeyAidXNlRXBoZW1lcmFsU2Vzc2lvbiIsIEtleVR5cGU6OkJvb2wg
fSwKLSAgICAgICAgeyAidXNlRmxleGlibGVWaWV3cG9ydCIsIEtleVR5cGU6OkJvb2wgfSwKLSAg
ICAgICAgeyAidXNlTW9ja1Njcm9sbGJhcnMiLCBLZXlUeXBlOjpCb29sIH0sCi0gICAgICAgIHsg
InVzZVJlbW90ZUxheWVyVHJlZSIsIEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAidXNlU2Vy
dmljZVdvcmtlclNob3J0VGltZW91dCIsIEtleVR5cGU6OkJvb2wgfSwKLSAgICAgICAgeyAidXNl
VGhyZWFkZWRTY3JvbGxpbmciLCBLZXlUeXBlOjpCb29sIH0sCitjb25zdCBzdGQ6OnVub3JkZXJl
ZF9tYXA8c3RkOjpzdHJpbmcsIFRlc3RIZWFkZXJLZXlUeXBlPiYgVGVzdE9wdGlvbnM6OmtleVR5
cGVNYXBwaW5nKCkKK3sKKyAgICBzdGF0aWMgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5n
LCBUZXN0SGVhZGVyS2V5VHlwZT4gbWFwIHsKKyAgICAgICAgeyAiYWxsb3dDcm9zc09yaWdpblN1
YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9
LAorICAgICAgICB7ICJhbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzIiwgVGVzdEhlYWRlcktl
eVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiYWxsb3dzTGlua1ByZXZpZXciLCBUZXN0SGVhZGVy
S2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJkb21QYXN0ZUFsbG93ZWQiLCBUZXN0SGVhZGVy
S2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIiLCBU
ZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlZGl0YWJsZSIsIFRlc3RIZWFk
ZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUFwcE5hcCIsIFRlc3RIZWFkZXJL
ZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUF0dGFjaG1lbnRFbGVtZW50IiwgVGVz
dEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlQmFja0ZvcndhcmRDYWNo
ZSIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUNhcHR1cmVB
dWRpb0luR1BVUHJvY2VzcyIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsg
ImVuYWJsZUNhcHR1cmVBdWRpb0luVUlQcm9jZXNzIiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wg
fSwKKyAgICAgICAgeyAiZW5hYmxlQ2FwdHVyZVZpZGVvSW5HUFVQcm9jZXNzIiwgVGVzdEhlYWRl
cktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlQ2FwdHVyZVZpZGVvSW5VSVByb2Nl
c3MiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVDb2xvckZp
bHRlciIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUluQXBw
QnJvd3NlclByaXZhY3kiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJl
bmFibGVJbnNwZWN0b3JBZGRpdGlvbnMiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAg
ICAgICB7ICJlbmFibGVLZXlnZW5FbGVtZW50IiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwK
KyAgICAgICAgeyAiZW5hYmxlTWVudUl0ZW1FbGVtZW50IiwgVGVzdEhlYWRlcktleVR5cGU6OkJv
b2wgfSwKKyAgICAgICAgeyAiZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scyIsIFRlc3RIZWFkZXJL
ZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9u
IiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlUHJvY2Vzc1N3
YXBPbldpbmRvd09wZW4iLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJl
bmFibGVTZXJ2aWNlQ29udHJvbHMiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAg
ICB7ICJlbmFibGVXZWJBdXRoZW50aWNhdGlvbiIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0s
CisgICAgICAgIHsgImVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50aWNhdG9yIiwg
VGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiaWdub3JlU3luY2hyb25vdXNN
ZXNzYWdpbmdUaW1lb3V0cyIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsg
Imlnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzIiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwK
KyAgICAgICAgeyAiaXNBcHBCb3VuZFdlYlZpZXciLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9
LAorICAgICAgICB7ICJuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyIsIFRlc3RIZWFkZXJLZXlUeXBl
OjpCb29sIH0sCisgICAgICAgIHsgInB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUi
LCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJydW5TaW5nbHkiLCBUZXN0
SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJzaG91bGRIYW5kbGVSdW5PcGVuUGFu
ZWwiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJzaG91bGRJZ25vcmVN
ZXRhVmlld3BvcnQiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJzaG91
bGRQcmVzZW50UG9wb3ZlcnMiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7
ICJzaG91bGRTaG93VG91Y2hlcyIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAg
IHsgInNob3VsZFNob3dXZWJWaWV3IiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAg
ICAgeyAic3BlbGxDaGVja2luZ0RvdHMiLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAg
ICAgICB7ICJ1c2VBY2NlbGVyYXRlZERyYXdpbmciLCBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbCB9
LAorICAgICAgICB7ICJ1c2VDaGFyYWN0ZXJTZWxlY3Rpb25HcmFudWxhcml0eSIsIFRlc3RIZWFk
ZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInVzZURhdGFEZXRlY3Rpb24iLCBUZXN0SGVh
ZGVyS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VFcGhlbWVyYWxTZXNzaW9uIiwgVGVz
dEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAidXNlRmxleGlibGVWaWV3cG9ydCIs
IFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInVzZU1vY2tTY3JvbGxiYXJz
IiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAidXNlUmVtb3RlTGF5ZXJU
cmVlIiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAidXNlU2VydmljZVdv
cmtlclNob3J0VGltZW91dCIsIFRlc3RIZWFkZXJLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsg
InVzZVRocmVhZGVkU2Nyb2xsaW5nIiwgVGVzdEhlYWRlcktleVR5cGU6OkJvb2wgfSwKICAgICAK
LSAgICAgICAgeyAiY29udGVudEluc2V0LnRvcCIsIEtleVR5cGU6OkRvdWJsZSB9LAotICAgICAg
ICB7ICJkZXZpY2VTY2FsZUZhY3RvciIsIEtleVR5cGU6OkRvdWJsZSB9LAotICAgICAgICB7ICJ2
aWV3SGVpZ2h0IiwgS2V5VHlwZTo6RG91YmxlIH0sCi0gICAgICAgIHsgInZpZXdXaWR0aCIsIEtl
eVR5cGU6OkRvdWJsZSB9LAotCi0gICAgICAgIHsgImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5
cGVzIiwgS2V5VHlwZTo6U3RyaW5nIH0sCi0gICAgICAgIHsgImFwcGxpY2F0aW9uQnVuZGxlSWRl
bnRpZmllciIsIEtleVR5cGU6OlN0cmluZyB9LAotICAgICAgICB7ICJhcHBsaWNhdGlvbk1hbmlm
ZXN0IiwgS2V5VHlwZTo6U3RyaW5nUmVsYXRpdmVQYXRoIH0sCi0gICAgICAgIHsgImNvbnRlbnRN
b2RlIiwgS2V5VHlwZTo6U3RyaW5nIH0sCi0gICAgICAgIHsgImpzY09wdGlvbnMiLCBLZXlUeXBl
OjpTdHJpbmcgfSwKLSAgICAgICAgeyAic3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJMIiwgS2V5
VHlwZTo6U3RyaW5nVVJMIH0sCisgICAgICAgIHsgImNvbnRlbnRJbnNldC50b3AiLCBUZXN0SGVh
ZGVyS2V5VHlwZTo6RG91YmxlIH0sCisgICAgICAgIHsgImRldmljZVNjYWxlRmFjdG9yIiwgVGVz
dEhlYWRlcktleVR5cGU6OkRvdWJsZSB9LAorICAgICAgICB7ICJ2aWV3SGVpZ2h0IiwgVGVzdEhl
YWRlcktleVR5cGU6OkRvdWJsZSB9LAorICAgICAgICB7ICJ2aWV3V2lkdGgiLCBUZXN0SGVhZGVy
S2V5VHlwZTo6RG91YmxlIH0sCisKKyAgICAgICAgeyAiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdl
VHlwZXMiLCBUZXN0SGVhZGVyS2V5VHlwZTo6U3RyaW5nIH0sCisgICAgICAgIHsgImFwcGxpY2F0
aW9uQnVuZGxlSWRlbnRpZmllciIsIFRlc3RIZWFkZXJLZXlUeXBlOjpTdHJpbmcgfSwKKyAgICAg
ICAgeyAiYXBwbGljYXRpb25NYW5pZmVzdCIsIFRlc3RIZWFkZXJLZXlUeXBlOjpTdHJpbmdSZWxh
dGl2ZVBhdGggfSwKKyAgICAgICAgeyAiY29udGVudE1vZGUiLCBUZXN0SGVhZGVyS2V5VHlwZTo6
U3RyaW5nIH0sCisgICAgICAgIHsgImpzY09wdGlvbnMiLCBUZXN0SGVhZGVyS2V5VHlwZTo6U3Ry
aW5nIH0sCisgICAgICAgIHsgInN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTCIsIFRlc3RIZWFk
ZXJLZXlUeXBlOjpTdHJpbmdVUkwgfSwKIAotICAgICAgICB7ICJsYW5ndWFnZSIsIEtleVR5cGU6
OlN0cmluZ1ZlY3RvciB9LAorICAgICAgICB7ICJsYW5ndWFnZSIsIFRlc3RIZWFkZXJLZXlUeXBl
OjpTdHJpbmdWZWN0b3IgfSwKICAgICB9OwogCiAgICAgcmV0dXJuIG1hcDsKIH0KIAotc3RhdGlj
IEtleVR5cGUga2V5VHlwZShzdGQ6OnN0cmluZyBrZXkpCi17Ci0gICAgYXV0byBtYXAgPSBrZXlU
eXBlTWFwKCk7Ci0gICAgYXV0byBpdCA9IG1hcC5maW5kKGtleSk7Ci0gICAgaWYgKGl0ID09IG1h
cC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIEtleVR5cGU6OlVua25vd247Ci0gICAgcmV0dXJuIGl0
LT5zZWNvbmQ7Ci19Ci0KLXN0YXRpYyBib29sIHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZShj
b25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJ0cnVlIikKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHZhbHVlID09ICJmYWxzZSIpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIExPR19FUlJPUigiRm91bmQgdW5leHBlY3RlZCB2YWx1ZSAnJXMn
IGZvciBib29sZWFuIG9wdGlvbi4gRXhwZWN0ZWQgJ3RydWUnIG9yICdmYWxzZScuIiwgdmFsdWUu
Y19zdHIoKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgc3RkOjpzdHJpbmcgcGFy
c2VTdHJpbmdUZXN0SGVhZGVyVmFsdWVBc1JlbGF0aXZlUGF0aChjb25zdCBzdGQ6OnN0cmluZyYg
dmFsdWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCi17Ci0gICAgYXV0byBiYXNlVVJM
ID0gYWRvcHRXSyhUZXN0Q29udHJvbGxlcjo6Y3JlYXRlVGVzdFVSTChwYXRoT3JVUkwuY19zdHIo
KSkpOwotICAgIGF1dG8gcmVsYXRpdmVVUkwgPSBhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aEJhc2VV
UkwoYmFzZVVSTC5nZXQoKSwgdmFsdWUuY19zdHIoKSkpOwotICAgIHJldHVybiB0b1NURChhZG9w
dFdLKFdLVVJMQ29weVBhdGgocmVsYXRpdmVVUkwuZ2V0KCkpKSk7Ci19Ci0KLXN0YXRpYyBzdGQ6
OnN0cmluZyBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzVVJMKGNvbnN0IHN0ZDo6c3RyaW5n
JiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TVEQoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcoVGVz
dENvbnRyb2xsZXI6OmNyZWF0ZVRlc3RVUkwodmFsdWUuY19zdHIoKSkpKSk7Ci19Ci0KLXN0YXRp
YyBUZXN0RmVhdHVyZXMgcGFyc2VUZXN0SGVhZGVyKHN0ZDo6ZmlsZXN5c3RlbTo6cGF0aCBwYXRo
LCBjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQotewotICAgIFRlc3RGZWF0dXJlcyBmZWF0
dXJlczsKLSAgICBpZiAoIXN0ZDo6ZmlsZXN5c3RlbTo6ZXhpc3RzKHBhdGgpKQotICAgICAgICBy
ZXR1cm4gZmVhdHVyZXM7Ci0KLSAgICBzdGQ6Omlmc3RyZWFtIGZpbGUocGF0aCk7Ci0gICAgaWYg
KCFmaWxlLmdvb2QoKSkgewotICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBvcGVuIGZpbGUg
dG8gaW5zcGVjdCB0ZXN0IGhlYWRlcnMgaW4gJXMiLCBwYXRoLmNfc3RyKCkpOwotICAgICAgICBy
ZXR1cm4gZmVhdHVyZXM7Ci0gICAgfQotCi0gICAgc3RkOjpzdHJpbmcgb3B0aW9uczsKLSAgICBn
ZXRsaW5lKGZpbGUsIG9wdGlvbnMpOwotICAgIHN0ZDo6c3RyaW5nIGJlZ2luU3RyaW5nKCJ3ZWJr
aXQtdGVzdC1ydW5uZXIgWyAiKTsKLSAgICBzdGQ6OnN0cmluZyBlbmRTdHJpbmcoIiBdIik7Ci0g
ICAgc2l6ZV90IGJlZ2luTG9jYXRpb24gPSBvcHRpb25zLmZpbmQoYmVnaW5TdHJpbmcpOwotICAg
IGlmIChiZWdpbkxvY2F0aW9uID09IHN0ZDo6c3RyaW5nOjpucG9zKQotICAgICAgICByZXR1cm4g
ZmVhdHVyZXM7Ci0gICAgc2l6ZV90IGVuZExvY2F0aW9uID0gb3B0aW9ucy5maW5kKGVuZFN0cmlu
ZywgYmVnaW5Mb2NhdGlvbik7Ci0gICAgaWYgKGVuZExvY2F0aW9uID09IHN0ZDo6c3RyaW5nOjpu
cG9zKSB7Ci0gICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGZpbmQgZW5kIG9mIHRlc3QgaGVh
ZGVyIGluICVzIiwgcGF0aC5jX3N0cigpKTsKLSAgICAgICAgcmV0dXJuIGZlYXR1cmVzOwotICAg
IH0KLSAgICBzdGQ6OnN0cmluZyBwYWlyU3RyaW5nID0gb3B0aW9ucy5zdWJzdHIoYmVnaW5Mb2Nh
dGlvbiArIGJlZ2luU3RyaW5nLnNpemUoKSwgZW5kTG9jYXRpb24gLSAoYmVnaW5Mb2NhdGlvbiAr
IGJlZ2luU3RyaW5nLnNpemUoKSkpOwotICAgIHNpemVfdCBwYWlyU3RhcnQgPSAwOwotICAgIHdo
aWxlIChwYWlyU3RhcnQgPCBwYWlyU3RyaW5nLnNpemUoKSkgewotICAgICAgICBzaXplX3QgcGFp
ckVuZCA9IHBhaXJTdHJpbmcuZmluZCgiICIsIHBhaXJTdGFydCk7Ci0gICAgICAgIGlmIChwYWly
RW5kID09IHN0ZDo6c3RyaW5nOjpucG9zKQotICAgICAgICAgICAgcGFpckVuZCA9IHBhaXJTdHJp
bmcuc2l6ZSgpOwotICAgICAgICBzaXplX3QgZXF1YWxzTG9jYXRpb24gPSBwYWlyU3RyaW5nLmZp
bmQoIj0iLCBwYWlyU3RhcnQpOwotICAgICAgICBpZiAoZXF1YWxzTG9jYXRpb24gPT0gc3RkOjpz
dHJpbmc6Om5wb3MpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiTWFsZm9ybWVkIG9wdGlvbiBp
biB0ZXN0IGhlYWRlciAoY291bGQgbm90IGZpbmQgJz0nIGNoYXJhY3RlcikgaW4gJXMiLCBwYXRo
LmNfc3RyKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYXV0byBr
ZXkgPSBwYWlyU3RyaW5nLnN1YnN0cihwYWlyU3RhcnQsIGVxdWFsc0xvY2F0aW9uIC0gcGFpclN0
YXJ0KTsKLSAgICAgICAgYXV0byB2YWx1ZSA9IHBhaXJTdHJpbmcuc3Vic3RyKGVxdWFsc0xvY2F0
aW9uICsgMSwgcGFpckVuZCAtIChlcXVhbHNMb2NhdGlvbiArIDEpKTsKLQotICAgICAgICBpZiAo
a2V5LnJmaW5kKCJleHBlcmltZW50YWw6IikgPT0gMCkgewotICAgICAgICAgICAga2V5ID0ga2V5
LnN1YnN0cigxMyk7Ci0gICAgICAgICAgICBmZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcy5p
bnNlcnQoeyBrZXksIHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSkgfSk7Ci0gICAg
ICAgIH0gZWxzZSBpZiAoa2V5LnJmaW5kKCJpbnRlcm5hbDoiKSA9PSAwKSB7Ci0gICAgICAgICAg
ICBrZXkgPSBrZXkuc3Vic3RyKDkpOwotICAgICAgICAgICAgZmVhdHVyZXMuaW50ZXJuYWxEZWJ1
Z0ZlYXR1cmVzLmluc2VydCh7IGtleSwgcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVl
KSB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAoa2V5VHlwZShrZXkpKSB7Ci0gICAg
ICAgIGNhc2UgS2V5VHlwZTo6Qm9vbDoKLSAgICAgICAgICAgIGZlYXR1cmVzLmJvb2xGZWF0dXJl
cy5pbnNlcnQoeyBrZXksIHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSkgfSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBLZXlUeXBlOjpEb3VibGU6Ci0gICAgICAg
ICAgICBmZWF0dXJlcy5kb3VibGVGZWF0dXJlcy5pbnNlcnQoeyBrZXksIHN0ZDo6c3RvZCh2YWx1
ZSkgfSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBLZXlUeXBlOjpTdHJpbmc6
Ci0gICAgICAgICAgICBmZWF0dXJlcy5zdHJpbmdGZWF0dXJlcy5pbnNlcnQoeyBrZXksIHZhbHVl
IH0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nUmVs
YXRpdmVQYXRoOgotICAgICAgICAgICAgZmVhdHVyZXMuc3RyaW5nRmVhdHVyZXMuaW5zZXJ0KHsg
a2V5LCBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzUmVsYXRpdmVQYXRoKHZhbHVlLCBwYXRo
T3JVUkwpIH0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgS2V5VHlwZTo6U3Ry
aW5nVVJMOgotICAgICAgICAgICAgZmVhdHVyZXMuc3RyaW5nRmVhdHVyZXMuaW5zZXJ0KHsga2V5
LCBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzVVJMKHZhbHVlKSB9KTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEtleVR5cGU6OlN0cmluZ1ZlY3RvcjoKLSAgICAgICAgICAg
IGZlYXR1cmVzLnN0cmluZ1ZlY3RvckZlYXR1cmVzLmluc2VydCh7IGtleSwgc3BsaXQodmFsdWUs
ICcsJykgfSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBLZXlUeXBlOjpVbmtu
b3duOgotICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmtub3duIGtleSwgJyVzLCBpbiB0ZXN0IGhl
YWRlciBpbiAlcyIsIGtleS5jX3N0cigpLCBwYXRoLmNfc3RyKCkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLQotICAgICAgICBwYWlyU3RhcnQgPSBwYWlyRW5kICsgMTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gZmVhdHVyZXM7Ci19Ci0KLXN0YXRpYyBib29sIHBhdGhDb250YWlucyhj
b25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMLCBjb25zdCBjaGFyKiBzdWJzdHJpbmcpCi17Ci0g
ICAgU3RyaW5nIHBhdGgocGF0aE9yVVJMLmNfc3RyKCkpOwotICAgIHJldHVybiBwYXRoLmNvbnRh
aW5zKHN1YnN0cmluZyk7IC8vIENhc2UtaW5zZW5zaXRpdmUuCi19Ci0KLXN0YXRpYyBib29sIHNo
b3VsZE1ha2VWaWV3cG9ydEZsZXhpYmxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCi17
Ci0gICAgcmV0dXJuIHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJ2aWV3cG9ydC8iKSAmJiAhcGF0
aENvbnRhaW5zKHBhdGhPclVSTCwgInZpc3VhbC12aWV3cG9ydC8iKTsKLX0KLQotc3RhdGljIGJv
b2wgc2hvdWxkVXNlRXBoZW1lcmFsU2Vzc2lvbihjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJM
KQotewotICAgIHJldHVybiBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAidzNjL0luZGV4ZWREQi1w
cml2YXRlLWJyb3dzaW5nIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgInczY1xcSW5kZXhl
ZERCLXByaXZhdGUtYnJvd3NpbmciKTsKLX0KLQotc3RhdGljIE9wdGlvbmFsPHN0ZDo6cGFpcjxk
b3VibGUsIGRvdWJsZT4+IG92ZXJyaWRlVmlld1dpZHRoQW5kSGVpZ2h0Rm9yVGVzdChjb25zdCBz
dGQ6OnN0cmluZyYgcGF0aE9yVVJMKQotewotICAgIGlmIChwYXRoQ29udGFpbnMocGF0aE9yVVJM
LCAic3ZnL1czQy1TVkctMS4xIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgInN2Z1xcVzND
LVNWRy0xLjEiKSkKLSAgICAgICAgcmV0dXJuIHsgeyA0ODAsIDM2MCB9IH07Ci0gICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKLX0KLQotc3RhdGljIE9wdGlvbmFsPGRvdWJsZT4gb3ZlcnJpZGVEZXZp
Y2VTY2FsZUZhY3RvckZvclRlc3QoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKLXsKLSAg
ICBpZiAocGF0aENvbnRhaW5zKHBhdGhPclVSTCwgIi9oaWRwaS0zeC0iKSkKLSAgICAgICAgcmV0
dXJuIDM7Ci0gICAgaWYgKHBhdGhDb250YWlucyhwYXRoT3JVUkwsICIvaGlkcGktIikpCi0gICAg
ICAgIHJldHVybiAyOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLXN0YXRpYyBib29s
IHNob3VsZER1bXBKU0NvbnNvbGVMb2dJblN0ZEVycihjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9y
VVJMKQotewotICAgIHJldHVybiBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4
MDAvYmVhY29uIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL2Jl
YWNvbiIpCi0gICAgICAgIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgw
MC9jb3JzIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL2NvcnMi
KQotICAgICAgICB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvZmV0
Y2giKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMvZmV0Y2giKQot
ICAgICAgICB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvc2Vydmlj
ZS13b3JrZXJzIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3Nl
cnZpY2Utd29ya2VycyIpCi0gICAgICAgIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2Nh
bGhvc3Q6ODgwMC9zdHJlYW1zL3dyaXRhYmxlLXN0cmVhbXMiKSB8fCBwYXRoQ29udGFpbnMocGF0
aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMvc3RyZWFtcy93cml0YWJsZS1zdHJlYW1zIikKLSAgICAg
ICAgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo4ODAwL3N0cmVhbXMvcGlw
aW5nIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3N0cmVhbXMv
cGlwaW5nIikKLSAgICAgICAgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo4
ODAwL3hociIpIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6OTQ0My94aHIi
KQotICAgICAgICB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvd2Vi
cnRjIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3dlYnJ0YyIp
Ci0gICAgICAgIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgwMC93ZWJz
b2NrZXRzIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3dlYnNv
Y2tldHMiKTsKLX0KLQotVGVzdEZlYXR1cmVzIGhhcmRjb2RlZEZlYXR1cmVzQmFzZWRPblBhdGhG
b3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJiBjb21tYW5kKQotewotICAgIFRlc3RGZWF0dXJlcyBm
ZWF0dXJlczsKLQotICAgIGlmIChzaG91bGRNYWtlVmlld3BvcnRGbGV4aWJsZShjb21tYW5kLnBh
dGhPclVSTCkpCi0gICAgICAgIGZlYXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyAidXNlRmxl
eGlibGVWaWV3cG9ydCIsIHRydWUgfSk7Ci0gICAgaWYgKHNob3VsZFVzZUVwaGVtZXJhbFNlc3Np
b24oY29tbWFuZC5wYXRoT3JVUkwpKQotICAgICAgICBmZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5z
ZXJ0KHsgInVzZUVwaGVtZXJhbFNlc3Npb24iLCB0cnVlIH0pOwotICAgIGlmIChzaG91bGREdW1w
SlNDb25zb2xlTG9nSW5TdGRFcnIoY29tbWFuZC5wYXRoT3JVUkwpKQotICAgICAgICBmZWF0dXJl
cy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsgImR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciIsIHRydWUg
fSk7Ci0gICAgaWYgKGF1dG8gZGV2aWNlU2NhbGVGYWN0b3IgPSBvdmVycmlkZURldmljZVNjYWxl
RmFjdG9yRm9yVGVzdChjb21tYW5kLnBhdGhPclVSTCk7IGRldmljZVNjYWxlRmFjdG9yICE9IFdU
Rjo6bnVsbG9wdCkKLSAgICAgICAgZmVhdHVyZXMuZG91YmxlRmVhdHVyZXMuaW5zZXJ0KHsgImRl
dmljZVNjYWxlRmFjdG9yIiwgZGV2aWNlU2NhbGVGYWN0b3IudmFsdWUoKSB9KTsKLSAgICBpZiAo
YXV0byB2aWV3V2lkdGhBbmRIZWlnaHQgPSBvdmVycmlkZVZpZXdXaWR0aEFuZEhlaWdodEZvclRl
c3QoY29tbWFuZC5wYXRoT3JVUkwpOyB2aWV3V2lkdGhBbmRIZWlnaHQgIT0gV1RGOjpudWxsb3B0
KSB7Ci0gICAgICAgIGZlYXR1cmVzLmRvdWJsZUZlYXR1cmVzLmluc2VydCh7ICJ2aWV3V2lkdGgi
LCB2aWV3V2lkdGhBbmRIZWlnaHQtPmZpcnN0IH0pOwotICAgICAgICBmZWF0dXJlcy5kb3VibGVG
ZWF0dXJlcy5pbnNlcnQoeyAidmlld0hlaWdodCIsIHZpZXdXaWR0aEFuZEhlaWdodC0+c2Vjb25k
IH0pOwotICAgIH0KLQotICAgIHJldHVybiBmZWF0dXJlczsKLX0KLQotVGVzdEZlYXR1cmVzIGZl
YXR1cmVEZWZhdWx0c0Zyb21UZXN0SGVhZGVyRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYgY29t
bWFuZCkKLXsKLSAgICByZXR1cm4gcGFyc2VUZXN0SGVhZGVyKGNvbW1hbmQuYWJzb2x1dGVQYXRo
LCBjb21tYW5kLnBhdGhPclVSTCk7Ci19Ci0KIFRlc3RPcHRpb25zOjpUZXN0T3B0aW9ucyhUZXN0
RmVhdHVyZXMgZmVhdHVyZXMpCiAgICAgOiBtX2ZlYXR1cmVzIHsgZmVhdHVyZXMgfQogewotI2lm
IERVTVBfRkVBVFVSRVMKLSAgICBzdGQ6OmNlcnIgPDwgIkRVTVBJTkcgRkVBVFVSRVNcbiI7Ci0g
ICAgZHVtcEZlYXR1cmVzKG1fZmVhdHVyZXMpOwotI2VuZGlmCiB9CiAKIGJvb2wgVGVzdE9wdGlv
bnM6Omhhc1NhbWVJbml0aWFsaXphdGlvbk9wdGlvbnMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlv
bnMpIGNvbnN0CkBAIC00NTMsMjcgKzE5NiwyNyBAQCBib29sIFRlc3RPcHRpb25zOjpoYXNTYW1l
SW5pdGlhbGl6YXRpb25PCiAgICAgaWYgKG1fZmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVz
ICE9IG9wdGlvbnMubV9mZWF0dXJlcy5pbnRlcm5hbERlYnVnRmVhdHVyZXMpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGZvciAoYXV0byBba2V5LCBrZXlUeXBlXSA6IGtleVR5cGVNYXAo
KSkgeworICAgIGZvciAoYXV0byBba2V5LCBrZXlUeXBlXSA6IGtleVR5cGVNYXBwaW5nKCkpIHsK
ICAgICAgICAgc3dpdGNoIChrZXlUeXBlKSB7Ci0gICAgICAgIGNhc2UgS2V5VHlwZTo6Qm9vbDoK
KyAgICAgICAgY2FzZSBUZXN0SGVhZGVyS2V5VHlwZTo6Qm9vbDoKICAgICAgICAgICAgIGlmIChi
b29sRmVhdHVyZVZhbHVlKGtleSkgIT0gb3B0aW9ucy5ib29sRmVhdHVyZVZhbHVlKGtleSkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgS2V5VHlwZTo6RG91YmxlOgorICAgICAgICBjYXNlIFRlc3RIZWFkZXJLZXlUeXBlOjpE
b3VibGU6CiAgICAgICAgICAgICBpZiAoZG91YmxlRmVhdHVyZVZhbHVlKGtleSkgIT0gb3B0aW9u
cy5kb3VibGVGZWF0dXJlVmFsdWUoa2V5KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBLZXlUeXBlOjpTdHJpbmc6Ci0gICAg
ICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nUmVsYXRpdmVQYXRoOgotICAgICAgICBjYXNlIEtleVR5
cGU6OlN0cmluZ1VSTDoKKyAgICAgICAgY2FzZSBUZXN0SGVhZGVyS2V5VHlwZTo6U3RyaW5nOgor
ICAgICAgICBjYXNlIFRlc3RIZWFkZXJLZXlUeXBlOjpTdHJpbmdSZWxhdGl2ZVBhdGg6CisgICAg
ICAgIGNhc2UgVGVzdEhlYWRlcktleVR5cGU6OlN0cmluZ1VSTDoKICAgICAgICAgICAgIGlmIChz
dHJpbmdGZWF0dXJlVmFsdWUoa2V5KSAhPSBvcHRpb25zLnN0cmluZ0ZlYXR1cmVWYWx1ZShrZXkp
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEtleVR5cGU6OlN0cmluZ1ZlY3RvcjoKKyAgICAgICAgY2FzZSBUZXN0SGVhZGVy
S2V5VHlwZTo6U3RyaW5nVmVjdG9yOgogICAgICAgICAgICAgaWYgKHN0cmluZ1ZlY3RvckZlYXR1
cmVWYWx1ZShrZXkpICE9IG9wdGlvbnMuc3RyaW5nVmVjdG9yRmVhdHVyZVZhbHVlKGtleSkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgS2V5VHlwZTo6VW5rbm93bjoKKyAgICAgICAgY2FzZSBUZXN0SGVhZGVyS2V5VHlwZTo6
VW5rbm93bjoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAg
ICAgfQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0T3B0aW9ucy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuaAkocmV2aXNpb24gMjY4
MzY1KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0T3B0aW9ucy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiVGVzdEZl
YXR1cmVzLmgiCiAjaW5jbHVkZSA8b3B0aW9uYWw+CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1
ZGUgPHVub3JkZXJlZF9tYXA+CkBAIC0zMiwyMiArMzMsNiBAQAogCiBuYW1lc3BhY2UgV1RSIHsK
IAotc3RydWN0IFRlc3RDb21tYW5kOwotCi1zdHJ1Y3QgVGVzdEZlYXR1cmVzIHsKLSAgICBzdGQ6
OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+IGV4cGVyaW1lbnRhbEZlYXR1cmVzOwot
ICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9vbD4gaW50ZXJuYWxEZWJ1Z0Zl
YXR1cmVzOwotICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9vbD4gYm9vbEZl
YXR1cmVzOwotICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgZG91YmxlPiBkb3Vi
bGVGZWF0dXJlczsKLSAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3Ry
aW5nPiBzdHJpbmdGZWF0dXJlczsKLSAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcs
IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPj4gc3RyaW5nVmVjdG9yRmVhdHVyZXM7Ci19OwotCi12
b2lkIG1lcmdlKFRlc3RGZWF0dXJlcyYgYmFzZSwgVGVzdEZlYXR1cmVzIGFkZGl0aW9uYWwpOwot
Ci1UZXN0RmVhdHVyZXMgaGFyZGNvZGVkRmVhdHVyZXNCYXNlZE9uUGF0aEZvclRlc3QoY29uc3Qg
VGVzdENvbW1hbmQmKTsKLVRlc3RGZWF0dXJlcyBmZWF0dXJlRGVmYXVsdHNGcm9tVGVzdEhlYWRl
ckZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmKTsKLQogc3RydWN0IENvbnRleHRPcHRpb25zIHsK
ICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gb3ZlcnJpZGVMYW5ndWFnZXM7CiAgICAgYm9v
bCBpZ25vcmVTeW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzOwpAQCAtNzQsNiArNTksOCBAQCBz
dHJ1Y3QgQ29udGV4dE9wdGlvbnMgewogCiBjbGFzcyBUZXN0T3B0aW9ucyB7CiBwdWJsaWM6Cisg
ICAgc3RhdGljIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgVGVzdEhlYWRl
cktleVR5cGU+JiBrZXlUeXBlTWFwcGluZygpOworCiAgICAgZXhwbGljaXQgVGVzdE9wdGlvbnMo
VGVzdEZlYXR1cmVzKTsKIAogICAgIENvbnRleHRPcHRpb25zIGNvbnRleHRPcHRpb25zKCkgY29u
c3QKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
V2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNjgz
NjUpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTIwLDYgKzEyMCw4IEBACiAJCTY1
MTBBNzhCMTFFQzY0MzgwMDQxMDg2NyAvKiBXZWJLaXRXZWlnaHRXYXRjaGVyODAwLnR0ZiBpbiBS
ZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjUxMEE3ODAxMUVD
NjQzODAwNDEwODY3IC8qIFdlYktpdFdlaWdodFdhdGNoZXI4MDAudHRmICovOyB9OwogCQk2NTEw
QTc4QzExRUM2NDM4MDA0MTA4NjcgLyogV2ViS2l0V2VpZ2h0V2F0Y2hlcjkwMC50dGYgaW4gUmVz
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MTBBNzgxMTFFQzY0
MzgwMDQxMDg2NyAvKiBXZWJLaXRXZWlnaHRXYXRjaGVyOTAwLnR0ZiAqLzsgfTsKIAkJNjVFQjg1
QTAxMUVDNjdDQzAwMzREMzAwIC8qIEFjdGl2YXRlRm9udHNDb2NvYS5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1RUI4NTlGMTFFQzY3Q0MwMDM0RDMw
MCAvKiBBY3RpdmF0ZUZvbnRzQ29jb2EubW0gKi87IH07CisJCTdDRkY5QkNBMjUzNEFGMUQwMDA4
MDA5RiAvKiBUZXN0RmVhdHVyZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0NGRjlCQzYyNTM0QUYxRDAwMDgwMDlGIC8qIFRlc3RGZWF0dXJlcy5j
cHAgKi87IH07CisJCTdDRkY5QkNCMjUzNEFGMUQwMDA4MDA5RiAvKiBUZXN0Q29tbWFuZC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0ZGOUJDNzI1
MzRBRjFEMDAwODAwOUYgLyogVGVzdENvbW1hbmQuY3BwICovOyB9OwogCQk4MDM0QzY2MjE0ODc2
MzY0MDBBQzMyRTkgLyogQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MDM0QzY2MTE0ODc2MzY0MDBBQzMy
RTkgLyogQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0gKi87IH07CiAJCTgwOTczMzhBMTQ4
NzRBNUEwMDgxNTZEOSAvKiBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgwOTczMzg5MTQ4NzRB
NUEwMDgxNTZEOSAvKiBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbSAqLzsgfTsK
IAkJOTM3NjQxN0EyMTBENzM3MjAwQTNEQUFFIC8qIFdlYktpdFRlc3RSdW5uZXJXaW5kb3cubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5Mzc2NDE3NjIx
MEQ3MzYwMDBBM0RBQUUgLyogV2ViS2l0VGVzdFJ1bm5lcldpbmRvdy5tbSAqLzsgfTsKQEAgLTM0
OSwxMyArMzUxLDE2IEBACiAJCTY1MTBBNzgxMTFFQzY0MzgwMDQxMDg2NyAvKiBXZWJLaXRXZWln
aHRXYXRjaGVyOTAwLnR0ZiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IGZpbGU7IG5hbWUgPSBXZWJLaXRXZWlnaHRXYXRjaGVyOTAwLnR0ZjsgcGF0aCA9
IGZvbnRzL1dlYktpdFdlaWdodFdhdGNoZXI5MDAudHRmOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk2NUVCODU5RDExRUM2N0NDMDAzNEQzMDAgLyogQWN0aXZhdGVGb250cy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY3RpdmF0ZUZvbnRzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTY1RUI4NTlGMTFFQzY3Q0MwMDM0RDMwMCAvKiBBY3RpdmF0ZUZv
bnRzQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBY3Rp
dmF0ZUZvbnRzQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDRkY5QkM1
MjUzNEFGMUQwMDA4MDA5RiAvKiBUZXN0RmVhdHVyZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gVGVzdEZlYXR1cmVzLmg7IHBhdGggPSAuLi9UZXN0UnVubmVyU2hhcmVkL1Rl
c3RGZWF0dXJlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Q0ZGOUJDNjI1MzRB
RjFEMDAwODAwOUYgLyogVGVzdEZlYXR1cmVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IFRlc3RGZWF0dXJlcy5jcHA7IHBhdGggPSAuLi9UZXN0UnVubmVyU2hhcmVk
L1Rlc3RGZWF0dXJlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDRkY5QkM3
MjUzNEFGMUQwMDA4MDA5RiAvKiBUZXN0Q29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBUZXN0Q29tbWFuZC5jcHA7IHBhdGggPSAuLi9UZXN0UnVubmVyU2hh
cmVkL1Rlc3RDb21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NGRjlC
QzgyNTM0QUYxRDAwMDgwMDlGIC8qIFRlc3RDb21tYW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFRlc3RDb21tYW5kLmg7IHBhdGggPSAuLi9UZXN0UnVubmVyU2hhcmVkL1Rl
c3RDb21tYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgwMzRDNjYxMTQ4NzYz
NjQwMEFDMzJFOSAvKiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MDk3MzM4ODE0ODc0QTVBMDA4MTU2RDkg
LyogQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIuaDsgcGF0aCA9
IG1hYy9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk4MDk3MzM4OTE0ODc0QTVBMDA4MTU2RDkgLyogQWNjZXNzaWJpbGl0eU5v
dGlmaWNhdGlvbkhhbmRsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5h
bWUgPSBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbTsgcGF0aCA9IG1hYy9BY2Nl
c3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJODQxQ0MwMEQxODExODVCRjAwNDJFOUI2IC8qIE9wdGlvbnMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3B0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTg0MUNDMDBFMTgxMTg1QkYwMDQyRTlCNiAvKiBPcHRpb25zLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOERENzZGQTEwNDg2QUE3NjAwRDk2QjVFIC8qIFdlYktpdFRlc3RSdW5uZXIg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxl
ZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IFdlYktpdFRl
c3RSdW5uZXI7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07Ci0JCTkzMzhEMUJB
MjUwQTc5RUIwMEU4MjdGNiAvKiBKU0Jhc2ljcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU0Jhc2ljcy5o
OyBwYXRoID0gLi4vVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jhc2ljcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5MzM4RDFCRTI1MEJEOUREMDBFODI3RjYgLyogRGljdGlv
bmFyeUZ1bmN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaWN0aW9uYXJ5RnVuY3Rpb25zLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzNzY0MTc2MjEwRDczNjAwMEEzREFBRSAvKiBX
ZWJLaXRUZXN0UnVubmVyV2luZG93Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gV2ViS2l0VGVzdFJ1bm5lcldpbmRvdy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTM3NjQxNzcyMTBENzM2MTAwQTNEQUFFIC8qIFdlYktpdFRlc3RSdW5uZXJXaW5k
b3cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViS2l0VGVzdFJ1bm5lcldp
bmRvdy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTQ5LDYgKzU1NCwxMCBAQAog
CQkJCTMxNDhBMDU0MUU2Rjg1QjYwMEQzQjMxNiAvKiBJT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlv
bi5oICovLAogCQkJCTkzQzc4ODFGMjUwQzY5RTQwMEMwQUEyNCAvKiBSZWZ0ZXN0RnVuY3Rpb25z
LmNwcCAqLywKIAkJCQk5M0M3ODgyMDI1MEM2OUU0MDBDMEFBMjQgLyogUmVmdGVzdEZ1bmN0aW9u
cy5oICovLAorCQkJCTdDRkY5QkM3MjUzNEFGMUQwMDA4MDA5RiAvKiBUZXN0Q29tbWFuZC5jcHAg
Ki8sCisJCQkJN0NGRjlCQzgyNTM0QUYxRDAwMDgwMDlGIC8qIFRlc3RDb21tYW5kLmggKi8sCisJ
CQkJN0NGRjlCQzYyNTM0QUYxRDAwMDgwMDlGIC8qIFRlc3RGZWF0dXJlcy5jcHAgKi8sCisJCQkJ
N0NGRjlCQzUyNTM0QUYxRDAwMDgwMDlGIC8qIFRlc3RGZWF0dXJlcy5oICovLAogCQkJKTsKIAkJ
CW5hbWUgPSBUZXN0UnVubmVyU2hhcmVkOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAg
LTEyMDksOCArMTIxOCwxMCBAQAogCQkJCTJFMkE3NjVEMjM3MEM4RDEwMDhGOUZGRSAvKiBQbGF0
Zm9ybVZpZXdIZWxwZXJzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRjQwMTBCN0UyNERBMjA1MzAw
QTg3NkUyIC8qIFBvc2VBc0NsYXNzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkRGQTk4NDkxRDdG
NzBDRjAwQUZGMkM5IC8qIFNoYXJlZEV2ZW50U3RyZWFtc01hYy5tbSBpbiBTb3VyY2VzICovLAor
CQkJCTdDRkY5QkNCMjUzNEFGMUQwMDA4MDA5RiAvKiBUZXN0Q29tbWFuZC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBMTg1MTA0MTFCOUFFMTM4MDA3NDRBRUIgLyogVGVzdENvbnRyb2xsZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTE4NTEwM0IxQjlBRTBFMjAwNzQ0QUVCIC8qIFRlc3RDb250
cm9sbGVyQ29jb2EubW0gaW4gU291cmNlcyAqLywKKwkJCQk3Q0ZGOUJDQTI1MzRBRjFEMDAwODAw
OUYgLyogVGVzdEZlYXR1cmVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExODUxMDQyMUI5QUUx
M0UwMDc0NEFFQiAvKiBUZXN0SW52b2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTg1
MTAzRDFCOUFFMTA2MDA3NDRBRUIgLyogVGVzdEludm9jYXRpb25DRy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjYyMkNFOTFCQkIzQTFBMDA4MzhBRDMgLyogVGVzdE9wdGlvbnMuY3BwIGluIFNv
dXJjZXMgKi8sCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>