<?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>93899</bug_id>
          
          <creation_ts>2012-08-13 14:15:14 -0700</creation_ts>
          <short_desc>Rename files that declare and define LayoutTestController in DumpRenderTree</short_desc>
          <delta_ts>2012-08-13 21:58:48 -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>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>93758</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>darin</cc>
    
    <cc>tkent</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>694070</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-13 14:15:14 -0700</bug_when>
    <thetext>Rename files that declare and define LayoutTestController in DumpRenderTree</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694075</commentid>
    <comment_count>1</comment_count>
      <attachid>158102</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-13 14:16:57 -0700</bug_when>
    <thetext>Created attachment 158102
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694079</commentid>
    <comment_count>2</comment_count>
      <attachid>158102</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-13 14:21:07 -0700</bug_when>
    <thetext>Comment on attachment 158102
Patch

Note that there is a diff of each file after svn mv so ignore the parts where the entire file is removed and added and just look at the diff below them. There&apos;s no need to verify that deleted &amp; added file contents match because the third diff will just show you that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694340</commentid>
    <comment_count>3</comment_count>
      <attachid>158102</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-08-13 18:15:57 -0700</bug_when>
    <thetext>Comment on attachment 158102
Patch

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

rs=me

&gt; Tools/ChangeLog:8
&gt; +        Renamed files and fixed style errors.

Fix style errors?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694495</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-13 21:58:48 -0700</bug_when>
    <thetext>Committed r125508: &lt;http://trac.webkit.org/changeset/125508&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>158102</attachid>
            <date>2012-08-13 14:16:57 -0700</date>
            <delta_ts>2012-08-13 18:15:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93899-20120813141625.patch</filename>
            <type>text/plain</type>
            <size>1133972</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDEyNTQ1MCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDg1IEBACisyMDEyLTA4LTEzICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgor
CisgICAgICAgIFJlbmFtZSBmaWxlcyB0aGF0IGRlY2xhcmUgYW5kIGRlZmluZSBMYXlvdXRUZXN0
Q29udHJvbGxlciBpbiBEdW1wUmVuZGVyVHJlZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTM4OTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBSZW5hbWVkIGZpbGVzIGFuZCBmaXhlZCBzdHlsZSBlcnJvcnMu
CisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXBpOgorICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmg6
IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvUGl4ZWxEdW1wU3VwcG9ydC5jcHA6
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5tbToKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmNwcDogQ29waWVkIGZyb20gVG9vbHMv
RHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwLgorICAgICAgICAqIER1bXBS
ZW5kZXJUcmVlL1Rlc3RSdW5uZXIuaDogQ29waWVkIGZyb20gVG9vbHMvRHVtcFJlbmRlclRyZWUv
TGF5b3V0VGVzdENvbnRyb2xsZXIuaC4KKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyKToK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L0R1bXBSZW5kZXJUcmVlLmNwcDoK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L0xheW91dFRlc3RDb250cm9sbGVy
QmxhY2tCZXJyeS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvYmxhY2ti
ZXJyeS9UZXN0UnVubmVyQmxhY2tCZXJyeS5jcHA6IENvcGllZCBmcm9tIFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL2JsYWNrYmVycnkvTGF5b3V0VGVzdENvbnRyb2xsZXJCbGFja0JlcnJ5LmNwcC4KKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlRUZXN0UnVubmVyLmNwcDogQ29waWVk
IGZyb20gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIu
Y3BwLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVFRlc3RSdW5uZXIuaDog
Q29waWVkIGZyb20gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRy
b2xsZXIuaC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29u
dHJvbGxlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
TGF5b3V0VGVzdENvbnRyb2xsZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RTaGVsbC5oOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlBl
cm1pc3Npb25zLmNwcDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3
SG9zdC5jcHA6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZWZsL0NNYWtlTGlzdHMudHh0Ogor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZS5jcHA6CisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlQ2hyb21lLmNwcDoKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWVWaWV3LmNwcDoKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9lZmwvRWRpdGluZ0NhbGxiYWNrcy5jcHA6CisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVyRWZsLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9lZmwvVGVzdFJ1bm5lckVmbC5jcHA6IENvcGllZCBmcm9tIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9MYXlvdXRUZXN0Q29udHJvbGxlckVmbC5jcHAuCisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcDoKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9ndGsvRWRpdGluZ0NhbGxiYWNrcy5jcHA6CisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9ndGsvVGVzdFJ1bm5lckd0ay5jcHA6IENvcGllZCBmcm9tIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAuCisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tOgorICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZVdpbmRvdy5tbToKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9tYWMvRWRpdGluZ0RlbGVnYXRlLm1tOgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL21hYy9GcmFtZUxvYWREZWxlZ2F0ZS5tbToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9t
YWMvSGlzdG9yeURlbGVnYXRlLm1tOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9MYXlv
dXRUZXN0Q29udHJvbGxlck1hYy5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS9tYWMvUGl4ZWxEdW1wU3VwcG9ydE1hYy5tbToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9t
YWMvUG9saWN5RGVsZWdhdGUubW06CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL1Jlc291
cmNlTG9hZERlbGVnYXRlLm1tOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9UZXN0UnVu
bmVyTWFjLm1tOiBDb3BpZWQgZnJvbSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVz
dENvbnRyb2xsZXJNYWMubW0uCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL1VJRGVsZWdh
dGUubW06CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWUucHJvOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuY3BwOgorICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9UZXN0UnVubmVyUXQuY3BwOiBD
b3BpZWQgZnJvbSBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0
LmNwcC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9UZXN0UnVubmVyUXQuaDogQ29waWVk
IGZyb20gVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5oLgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcik6CisgICAg
ICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q2xvc2VSZW1haW5pbmdXaW5kb3dzV2hlbkNv
bXBsZXRlKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wU2VsZWN0aW9uUmVj
dCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q2FsbENsb3NlT25XZWJWaWV3
cyk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkRGlzYWxsb3dlZFVSTCk6Cisg
ICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWJvcnRNb2RhbCk6CisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvd2luL0RSVERlc2t0b3BOb3RpZmljYXRpb25QcmVzZW50ZXIuY3BwOgorICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHA6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLnZjcHJvajoKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS93aW4vRWRpdGluZ0RlbGVnYXRlLmNwcDoKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS93aW4vRnJhbWVMb2FkRGVsZWdhdGUuY3BwOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L3dpbi9IaXN0b3J5RGVsZWdhdGUuY3BwOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9M
YXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJlbmRl
clRyZWUvd2luL1BvbGljeURlbGVnYXRlLmNwcDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93
aW4vUmVzb3VyY2VMb2FkRGVsZWdhdGUuY3BwOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dp
bi9UZXN0UnVubmVyV2luLmNwcDogQ29waWVkIGZyb20gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcC4KKyAgICAgICAgKExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQpOgorICAgICAgICAocmVzb2x2ZUN5Z3dpblBh
dGgpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9VSURlbGVnYXRlLmNwcDoKKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS93c2NyaXB0OgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3d4
L0R1bXBSZW5kZXJUcmVlV3guY3BwOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3d4L0xheW91
dFRlc3RDb250cm9sbGVyV3guY3BwOiBSZW1vdmVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L3d4L1Rlc3RSdW5uZXJXeC5jcHA6IENvcGllZCBmcm9tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4
L0xheW91dFRlc3RDb250cm9sbGVyV3guY3BwLgorCiAyMDEyLTA4LTEzICBSYXBoYWVsIEt1Ym8g
ZGEgQ29zdGEgIDxyYWt1Y29Ad2Via2l0Lm9yZz4KIAogICAgICAgICBbQ01ha2VdIFJlbW92ZSBn
bGliLXJlbGF0ZWQgRmluZCBtb2R1bGVzIGFuZCB3cml0ZSBzaW5nbGUgbmV3IG9uZSBpbnN0ZWFk
LgpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXBpCShyZXZpc2lv
biAxMjUzMzUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXBpCSh3
b3JraW5nIGNvcHkpCkBAIC02LDggKzYsOCBAQAogICAgICAgICAgICAgJ2Nocm9taXVtL0RSVERl
dlRvb2xzQ2xpZW50LmNwcCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vRFJURGV2VG9vbHNDbGll
bnQuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwJywKLSAgICAg
ICAgICAgICdjaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAnLAotICAgICAgICAgICAg
J2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmgnLAorICAgICAgICAgICAgJ2Nocm9taXVt
L0RSVFRlc3RSdW5uZXIuY3BwJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9EUlRUZXN0UnVubmVy
LmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL01vY2tHcmFtbWFyQ2hlY2suY3BwJywKICAgICAg
ICAgICAgICdjaHJvbWl1bS9Nb2NrR3JhbW1hckNoZWNrLmgnLAogICAgICAgICAgICAgJ2Nocm9t
aXVtL01vY2tTcGVsbENoZWNrLmNwcCcsCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlv
dXRUZXN0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUv
TGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMjUzMzUpCisrKyBUb29scy9EdW1w
UmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
MjUyMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBK
b29uZSBIdXIgPGpvb25lQGtsZHAub3JnPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVp
dGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBu
YW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgotCi0jaW5jbHVkZSAiV29ya1F1ZXVlLmgiCi0jaW5j
bHVkZSAiV29ya1F1ZXVlSXRlbS5oIgotI2luY2x1ZGUgPGNzdHJpbmc+Ci0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNP
YmplY3RSZWYuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5oPgotI2lu
Y2x1ZGUgPGxvY2FsZS5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLSNpbmNsdWRlIDx3dGYvTWF0
aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgotI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KLQotTGF5b3V0VGVzdENvbnRyb2xsZXI6OkxheW91dFRlc3RDb250cm9sbGVyKGNv
bnN0IHN0ZDo6c3RyaW5nJiB0ZXN0UGF0aE9yVVJMLCBjb25zdCBzdGQ6OnN0cmluZyYgZXhwZWN0
ZWRQaXhlbEhhc2gpCi0gICAgOiBtX2Rpc2FsbG93SW5jcmVhc2VGb3JBcHBsaWNhdGlvbkNhY2hl
UXVvdGEoZmFsc2UpCi0gICAgLCBtX2R1bXBBcHBsaWNhdGlvbkNhY2hlRGVsZWdhdGVDYWxsYmFj
a3MoZmFsc2UpCi0gICAgLCBtX2R1bXBBc0F1ZGlvKGZhbHNlKQotICAgICwgbV9kdW1wQXNQREYo
ZmFsc2UpCi0gICAgLCBtX2R1bXBBc1RleHQoZmFsc2UpCi0gICAgLCBtX2R1bXBCYWNrRm9yd2Fy
ZExpc3QoZmFsc2UpCi0gICAgLCBtX2R1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zKGZhbHNl
KQotICAgICwgbV9kdW1wQ2hpbGRGcmFtZXNBc1RleHQoZmFsc2UpCi0gICAgLCBtX2R1bXBET01B
c1dlYkFyY2hpdmUoZmFsc2UpCi0gICAgLCBtX2R1bXBEYXRhYmFzZUNhbGxiYWNrcyhmYWxzZSkK
LSAgICAsIG1fZHVtcEVkaXRpbmdDYWxsYmFja3MoZmFsc2UpCi0gICAgLCBtX2R1bXBGcmFtZUxv
YWRDYWxsYmFja3MoZmFsc2UpCi0gICAgLCBtX2R1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2so
ZmFsc2UpCi0gICAgLCBtX2R1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzKGZhbHNl
KQotICAgICwgbV9kdW1wSGlzdG9yeURlbGVnYXRlQ2FsbGJhY2tzKGZhbHNlKQotICAgICwgbV9k
dW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKGZhbHNlKQotICAgICwgbV9kdW1wUmVzb3VyY2VSZXNw
b25zZU1JTUVUeXBlcyhmYWxzZSkKLSAgICAsIG1fZHVtcFNlbGVjdGlvblJlY3QoZmFsc2UpCi0g
ICAgLCBtX2R1bXBTb3VyY2VBc1dlYkFyY2hpdmUoZmFsc2UpCi0gICAgLCBtX2R1bXBTdGF0dXND
YWxsYmFja3MoZmFsc2UpCi0gICAgLCBtX2R1bXBUaXRsZUNoYW5nZXMoZmFsc2UpCi0gICAgLCBt
X2R1bXBJY29uQ2hhbmdlcyhmYWxzZSkKLSAgICAsIG1fZHVtcFZpc2l0ZWRMaW5rc0NhbGxiYWNr
KGZhbHNlKQotICAgICwgbV9kdW1wV2lsbENhY2hlUmVzcG9uc2UoZmFsc2UpCi0gICAgLCBtX2dl
bmVyYXRlUGl4ZWxSZXN1bHRzKHRydWUpCi0gICAgLCBtX2NhbGxDbG9zZU9uV2ViVmlld3ModHJ1
ZSkKLSAgICAsIG1fY2FuT3BlbldpbmRvd3MoZmFsc2UpCi0gICAgLCBtX2Nsb3NlUmVtYWluaW5n
V2luZG93c1doZW5Db21wbGV0ZSh0cnVlKQotICAgICwgbV9uZXdXaW5kb3dzQ29weUJhY2tGb3J3
YXJkTGlzdChmYWxzZSkKLSAgICAsIG1fc3RvcFByb3Zpc2lvbmFsRnJhbWVMb2FkcyhmYWxzZSkK
LSAgICAsIG1fdGVzdE9uc2NyZWVuKGZhbHNlKQotICAgICwgbV90ZXN0UmVwYWludChmYWxzZSkK
LSAgICAsIG1fdGVzdFJlcGFpbnRTd2VlcEhvcml6b250YWxseShmYWxzZSkKLSAgICAsIG1fd2Fp
dFRvRHVtcChmYWxzZSkKLSAgICAsIG1fd2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwoZmFsc2Up
Ci0gICAgLCBtX3dpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVjdChmYWxzZSkKLSAg
ICAsIG1fd2luZG93SXNLZXkodHJ1ZSkKLSAgICAsIG1fYWx3YXlzQWNjZXB0Q29va2llcyhmYWxz
ZSkKLSAgICAsIG1fZ2xvYmFsRmxhZyhmYWxzZSkKLSAgICAsIG1faXNHZW9sb2NhdGlvblBlcm1p
c3Npb25TZXQoZmFsc2UpCi0gICAgLCBtX2dlb2xvY2F0aW9uUGVybWlzc2lvbihmYWxzZSkKLSAg
ICAsIG1faGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyhmYWxzZSkKLSAgICAsIG1faXNQ
cmludGluZyhmYWxzZSkKLSAgICAsIG1fZGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZCh0cnVlKQot
ICAgICwgbV91c2VEZWZlcnJlZEZyYW1lTG9hZGluZyhmYWxzZSkKLSAgICAsIG1fc2hvdWxkUGFp
bnRCcm9rZW5JbWFnZSh0cnVlKQotICAgICwgbV9zaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGlu
Z0JlZm9yZVVubG9hZChmYWxzZSkKLSAgICAsIG1fYXJlRGVza3RvcE5vdGlmaWNhdGlvblBlcm1p
c3Npb25SZXF1ZXN0c0lnbm9yZWQoZmFsc2UpCi0gICAgLCBtX2N1c3RvbUZ1bGxTY3JlZW5CZWhh
dmlvcihmYWxzZSkgCi0gICAgLCBtX3Rlc3RQYXRoT3JVUkwodGVzdFBhdGhPclVSTCkKLSAgICAs
IG1fZXhwZWN0ZWRQaXhlbEhhc2goZXhwZWN0ZWRQaXhlbEhhc2gpCi0gICAgLCBtX3RpdGxlVGV4
dERpcmVjdGlvbigibHRyIikKLXsKLX0KLQotUGFzc1JlZlB0cjxMYXlvdXRUZXN0Q29udHJvbGxl
cj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNyZWF0ZShjb25zdCBzdGQ6OnN0cmluZyYgdGVzdFBh
dGhPclVSTCwgY29uc3Qgc3RkOjpzdHJpbmcmIGV4cGVjdGVkUGl4ZWxIYXNoKQotewotICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgTGF5b3V0VGVzdENvbnRyb2xsZXIodGVzdFBhdGhPclVSTCwgZXhw
ZWN0ZWRQaXhlbEhhc2gpKTsKLX0KLQotLy8gU3RhdGljIEZ1bmN0aW9ucwotCi1zdGF0aWMgSlNW
YWx1ZVJlZiBkaXNhbGxvd0luY3JlYXNlRm9yQXBwbGljYXRpb25DYWNoZVF1b3RhQ2FsbGJhY2so
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0
aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVu
dHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIExheW91dFRlc3RDb250cm9sbGVy
KiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVj
dEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPnNldERpc2FsbG93SW5j
cmVhc2VGb3JBcHBsaWNhdGlvbkNhY2hlUXVvdGEodHJ1ZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBkdW1wQXBwbGlj
YXRpb25DYWNoZURlbGVnYXRlQ2FsbGJhY2tzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQotewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGlj
X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOwotICAgIGNvbnRyb2xsZXItPnNldER1bXBBcHBsaWNhdGlvbkNhY2hlRGVsZWdhdGVDYWxs
YmFja3ModHJ1ZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwot
fQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBkdW1wQXNQREZDYWxsYmFjayhKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVf
dCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCi17Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBz
dGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlz
T2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+c2V0RHVtcEFzUERGKHRydWUpOwotICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYg
ZHVtcEFzVGV4dENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5j
dGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0
IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBM
YXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RD
b250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9s
bGVyLT5zZXREdW1wQXNUZXh0KHRydWUpOwotCi0gICAgLy8gT3B0aW9uYWwgcGFyYW1hdGVyLCBk
ZXNjcmliaW5nIHdoZXRoZXIgaXQncyBhbGxvd2VkIHRvIGR1bXAgcGl4ZWwgcmVzdWx0cyBpbiBk
dW1wQXNUZXh0IG1vZGUuCi0gICAgY29udHJvbGxlci0+c2V0R2VuZXJhdGVQaXhlbFJlc3VsdHMo
YXJndW1lbnRDb3VudCA+IDAgPyBKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1sw
XSkgOiBmYWxzZSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGR1bXBCYWNrRm9yd2FyZExpc3RDYWxsYmFjayhKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1td
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNv
bnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0
UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+c2V0RHVtcEJhY2tGb3J3YXJk
TGlzdCh0cnVlKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19
Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGR1bXBDaGlsZEZyYW1lc0FzVGV4dENhbGxiYWNrKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09i
amVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10s
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29u
dHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQ
cml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZXREdW1wQ2hpbGRGcmFtZXNB
c1RleHQodHJ1ZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwot
fQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBkdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9uc0NhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJn
dW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBMYXlvdXRUZXN0Q29udHJv
bGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNP
YmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZXREdW1wQ2hp
bGRGcmFtZVNjcm9sbFBvc2l0aW9ucyh0cnVlKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGR1bXBEYXRhYmFzZUNhbGxi
YWNrc0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFs
dWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBMYXlvdXRU
ZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9s
bGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5z
ZXREdW1wRGF0YWJhc2VDYWxsYmFja3ModHJ1ZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBkdW1wRE9NQXNXZWJBcmNo
aXZlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIExheW91dFRl
c3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xs
ZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPnNl
dER1bXBET01Bc1dlYkFyY2hpdmUodHJ1ZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBkdW1wRWRpdGluZ0NhbGxiYWNr
c0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVS
ZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBMYXlvdXRUZXN0
Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZXRE
dW1wRWRpdGluZ0NhbGxiYWNrcyh0cnVlKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGR1bXBGcmFtZUxvYWRDYWxsYmFj
a3NDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpT
T2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVl
UmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgTGF5b3V0VGVz
dENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxl
cio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+c2V0
RHVtcEZyYW1lTG9hZENhbGxiYWNrcyh0cnVlKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGR1bXBQcm9ncmVzc0Zpbmlz
aGVkQ2FsbGJhY2tDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVu
Y3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25z
dCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAg
TGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0
Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJv
bGxlci0+c2V0RHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjayh0cnVlKTsKLSAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGR1
bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXpl
X3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQotewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0g
c3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhp
c09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPnNldER1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2Fk
Q2FsbGJhY2tzKHRydWUpOwotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgZHVtcFJlc291cmNlTG9hZENhbGxiYWNrc0NhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJn
dW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBMYXlvdXRUZXN0Q29udHJv
bGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNP
YmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZXREdW1wUmVz
b3VyY2VMb2FkQ2FsbGJhY2tzKHRydWUpOwotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgZHVtcFJlc291cmNlUmVzcG9uc2VN
SU1FVHlwZXNDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rp
b24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgTGF5
b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29u
dHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxl
ci0+c2V0RHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXModHJ1ZSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBkdW1w
U2VsZWN0aW9uUmVjdENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBm
dW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNv
bnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAg
ICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRl
c3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250
cm9sbGVyLT5zZXREdW1wU2VsZWN0aW9uUmVjdCh0cnVlKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGR1bXBTb3VyY2VB
c1dlYkFyY2hpdmVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVu
Y3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25z
dCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAg
TGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0
Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJv
bGxlci0+c2V0RHVtcFNvdXJjZUFzV2ViQXJjaGl2ZSh0cnVlKTsKLSAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGR1bXBTdGF0
dXNDYWxsYmFja3NDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVu
Y3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25z
dCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAg
TGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0
Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJv
bGxlci0+c2V0RHVtcFN0YXR1c0NhbGxiYWNrcyh0cnVlKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGR1bXBUaXRsZUNo
YW5nZXNDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24s
IEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1Zh
bHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgTGF5b3V0
VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJv
bGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+
c2V0RHVtcFRpdGxlQ2hhbmdlcyh0cnVlKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGR1bXBJY29uQ2hhbmdlc0NhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJn
dW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBMYXlvdXRUZXN0Q29udHJv
bGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNP
YmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZXREdW1wSWNv
bkNoYW5nZXModHJ1ZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBkdW1wV2lsbENhY2hlUmVzcG9uc2VDYWxsYmFjayhK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRo
aXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50
c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIq
IGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+c2V0RHVtcFdpbGxDYWNo
ZVJlc3BvbnNlKHRydWUpOwotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgcGF0aFRvTG9jYWxSZXNvdXJjZUNhbGxiYWNrKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhp
c09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRz
W10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIExh
eW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENv
bnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBsb2NhbFBhdGgoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29u
dGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24p
OwotCi0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGNvbnZlcnRlZFBhdGgoQWRvcHQsIGNv
bnRyb2xsZXItPnBhdGhUb0xvY2FsUmVzb3VyY2UoY29udGV4dCwgbG9jYWxQYXRoLmdldCgpKSk7
Ci0gICAgaWYgKCFjb252ZXJ0ZWRQYXRoKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwg
Y29udmVydGVkUGF0aC5nZXQoKSk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHJlbW92ZUFsbFZp
c2l0ZWRMaW5rc0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5j
dGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0
IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBM
YXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RD
b250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9s
bGVyLT5zZXREdW1wVmlzaXRlZExpbmtzQ2FsbGJhY2sodHJ1ZSk7Ci0gICAgY29udHJvbGxlci0+
cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiByZXBhaW50U3dlZXBIb3Jpem9udGFs
bHlDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpT
T2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVl
UmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgTGF5b3V0VGVz
dENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxl
cio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+c2V0
VGVzdFJlcGFpbnRTd2VlcEhvcml6b250YWxseSh0cnVlKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldENhbGxDbG9z
ZU9uV2ViVmlld3NDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVu
Y3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25z
dCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAg
aWYgKGFyZ3VtZW50Q291bnQgPCAxKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0
YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZXRDYWxsQ2xvc2VPbldlYlZpZXdzKEpTVmFsdWVU
b0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBzZXRDYW5PcGVuV2lu
ZG93c0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFs
dWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBMYXlvdXRU
ZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9s
bGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5z
ZXRDYW5PcGVuV2luZG93cyh0cnVlKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldENsb3NlUmVtYWluaW5nV2luZG93
c1doZW5Db21wbGV0ZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBm
dW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNv
bnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAg
ICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKLQotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0g
c3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhp
c09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPnNldENsb3NlUmVtYWluaW5nV2luZG93c1doZW5D
b21wbGV0ZShKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOwotICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVS
ZWYgc2V0RW5jb2RlZEF1ZGlvRGF0YUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09i
amVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50
Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKLXsKLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBl
bmNvZGVkQXVkaW9EYXRhKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3Vt
ZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLSAgICAKLSAg
ICBzaXplX3QgbWF4TGVuZ3RoID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKGVu
Y29kZWRBdWRpb0RhdGEuZ2V0KCkpOwotICAgIE93bkFycmF5UHRyPGNoYXI+IGVuY29kZWRBdWRp
b0RhdGFCdWZmZXIgPSBhZG9wdEFycmF5UHRyKG5ldyBjaGFyW21heExlbmd0aCArIDFdKTsKLSAg
ICBKU1N0cmluZ0dldFVURjhDU3RyaW5nKGVuY29kZWRBdWRpb0RhdGEuZ2V0KCksIGVuY29kZWRB
dWRpb0RhdGFCdWZmZXIuZ2V0KCksIG1heExlbmd0aCArIDEpOwotCi0gICAgTGF5b3V0VGVzdENv
bnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+
KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+c2V0RW5j
b2RlZEF1ZGlvRGF0YShlbmNvZGVkQXVkaW9EYXRhQnVmZmVyLmdldCgpKTsKLSAgICBjb250cm9s
bGVyLT5zZXREdW1wQXNBdWRpbyh0cnVlKTsKLSAgICAKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHRlc3RPbnNjcmVlbkNh
bGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYg
YXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBMYXlvdXRUZXN0Q29u
dHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4o
SlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZXRUZXN0
T25zY3JlZW4odHJ1ZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiB0ZXN0UmVwYWludENhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxl
ciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRl
KHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZXRUZXN0UmVwYWludCh0cnVlKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1Zh
bHVlUmVmIGFkZERpc2FsbG93ZWRVUkxDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNP
YmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVu
dENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pCi17Ci0gICAgLy8gSGFzIG1hYyBpbXBsZW1lbnRhdGlvbgotICAgIGlmIChhcmd1bWVudENv
dW50IDwgMSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwot
Ci0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHVybChBZG9wdCwgSlNWYWx1ZVRvU3RyaW5n
Q29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCghKmV4
Y2VwdGlvbik7Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRp
Y19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmpl
Y3QpKTsKLSAgICBjb250cm9sbGVyLT5hZGREaXNhbGxvd2VkVVJMKHVybC5nZXQoKSk7Ci0KLSAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1Zh
bHVlUmVmIGFkZFVSTFRvUmVkaXJlY3RDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNP
YmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVu
dENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pCi17Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAyKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
b3JpZ2luKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwg
ZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLQotICAgIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBkZXN0aW5hdGlvbihBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250
ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7
Ci0KLSAgICBzaXplX3QgbWF4TGVuZ3RoID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdT
aXplKG9yaWdpbi5nZXQoKSk7Ci0gICAgT3duQXJyYXlQdHI8Y2hhcj4gb3JpZ2luQnVmZmVyID0g
YWRvcHRBcnJheVB0cihuZXcgY2hhclttYXhMZW5ndGggKyAxXSk7Ci0gICAgSlNTdHJpbmdHZXRV
VEY4Q1N0cmluZyhvcmlnaW4uZ2V0KCksIG9yaWdpbkJ1ZmZlci5nZXQoKSwgbWF4TGVuZ3RoICsg
MSk7Ci0KLSAgICBtYXhMZW5ndGggPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUo
ZGVzdGluYXRpb24uZ2V0KCkpOwotICAgIE93bkFycmF5UHRyPGNoYXI+IGRlc3RpbmF0aW9uQnVm
ZmVyID0gYWRvcHRBcnJheVB0cihuZXcgY2hhclttYXhMZW5ndGggKyAxXSk7Ci0gICAgSlNTdHJp
bmdHZXRVVEY4Q1N0cmluZyhkZXN0aW5hdGlvbi5nZXQoKSwgZGVzdGluYXRpb25CdWZmZXIuZ2V0
KCksIG1heExlbmd0aCArIDEpOwotCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xs
ZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0
ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+YWRkVVJMVG9SZWRpcmVjdChvcmlnaW5C
dWZmZXIuZ2V0KCksIGRlc3RpbmF0aW9uQnVmZmVyLmdldCgpKTsKLQotICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgY2FsbFNo
b3VsZENsb3NlT25XZWJWaWV3Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3Vu
dCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQot
ewotICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCi0gICAgTGF5b3V0VGVz
dENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxl
cio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1
ZU1ha2VCb29sZWFuKGNvbnRleHQsIGNvbnRyb2xsZXItPmNhbGxTaG91bGRDbG9zZU9uV2ViVmll
dygpKTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgY2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlc0Nh
bGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYg
YXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMgbWFjIGlt
cGxlbWVudGF0aW9uCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0
aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2Jq
ZWN0KSk7Ci0gICAgY29udHJvbGxlci0+Y2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcygpOwotCi0g
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNW
YWx1ZVJlZiBjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW5DYWxsYmFjayhKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3Qs
IHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQotICAgICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gb3JpZ2luVVJMKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRl
eHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsK
LQotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5
b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAg
IGNvbnRyb2xsZXItPmNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbihvcmlnaW5VUkwuZ2V0
KCkpOwotICAgIAotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0K
LQotc3RhdGljIEpTVmFsdWVSZWYgYXBwbGljYXRpb25DYWNoZURpc2tVc2FnZUZvck9yaWdpbkNh
bGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYg
YXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBpZiAoYXJndW1lbnRD
b3VudCA8IDEpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
LQotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBvcmlnaW5VUkwoQWRvcHQsIEpTVmFsdWVU
b1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKLSAgICBBU1NF
UlQoISpleGNlcHRpb24pOwotICAgIAotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9s
bGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQs
IGNvbnRyb2xsZXItPmFwcGxpY2F0aW9uQ2FjaGVEaXNrVXNhZ2VGb3JPcmlnaW4ob3JpZ2luVVJM
LmdldCgpKSk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIG9yaWdpbnNXaXRoQXBwbGljYXRpb25D
YWNoZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFs
dWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBMYXlvdXRU
ZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9s
bGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICByZXR1cm4gY29udHJv
bGxlci0+b3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKGNvbnRleHQpOwotfQotCi1zdGF0aWMg
SlNWYWx1ZVJlZiBjbGVhckFsbERhdGFiYXNlc0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRhdGlvbgotICAg
IExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVz
dENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRy
b2xsZXItPmNsZWFyQWxsRGF0YWJhc2VzKCk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHN5bmNMb2NhbFN0b3JhZ2VD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2Jq
ZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVm
IGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgTGF5b3V0VGVzdENv
bnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+
KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0KLSAgICBjb250cm9sbGVyLT5zeW5j
TG9jYWxTdG9yYWdlKCk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIG9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNh
dGlvbnNDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24s
IEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1Zh
bHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgTGF5b3V0
VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJv
bGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0KLSAgICBpZiAoYXJndW1l
bnRDb3VudCA8IDEpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKLQotICAgIHVuc2lnbmVkIG51bU5vdGlmaWNhdGlvbnMgPSBKU1ZhbHVlVG9OdW1iZXIoY29u
dGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOwotCi0gICAgQVNTRVJUKCEqZXhjZXB0aW9u
KTsKLQotICAgIGNvbnRyb2xsZXItPm9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMo
bnVtTm90aWZpY2F0aW9ucyk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGRlbGV0ZUFsbExvY2FsU3RvcmFnZUNhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJn
dW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBMYXlvdXRUZXN0Q29udHJv
bGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNP
YmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5kZWxldGVBbGxM
b2NhbFN0b3JhZ2UoKTsKLQotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luQ2Fs
bGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVj
dFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBh
cmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIExheW91dFRlc3RDb250
cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihK
U09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotCi0gICAgaWYgKGFyZ3VtZW50Q291bnQg
PCAxKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAg
ICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gdXJsKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5
KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0
aW9uKTsKLQotICAgIGNvbnRyb2xsZXItPmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbih1cmwu
Z2V0KCkpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQot
Ci1zdGF0aWMgSlNWYWx1ZVJlZiBsb2NhbFN0b3JhZ2VEaXNrVXNhZ2VGb3JPcmlnaW5DYWxsYmFj
ayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVm
IHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3Vt
ZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xs
ZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0KLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBvcmlnaW5VUkwoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0Nv
cHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKLSAgICBBU1NFUlQoISpleGNl
cHRpb24pOwotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIGNvbnRyb2xs
ZXItPmxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbihvcmlnaW5VUkwuZ2V0KCkpKTsKLX0K
LQotc3RhdGljIEpTVmFsdWVSZWYgb3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2VDYWxsYmFjayhKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1td
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNv
bnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0
UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXItPm9yaWdpbnNXaXRo
TG9jYWxTdG9yYWdlKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBjbGVhckJhY2tG
b3J3YXJkTGlzdENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5j
dGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0
IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAv
LyBIYXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRhdGlvbgotICAgIExheW91dFRlc3RDb250cm9s
bGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09i
amVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPmNsZWFyQmFja0Zv
cndhcmRMaXN0KCk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGNsZWFyUGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0Q2Fs
bGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVj
dFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBh
cmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIC8vIEhhcyBtYWMgJiB3
aW5kb3dzIGltcGxlbWVudGF0aW9uCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xs
ZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0
ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+Y2xlYXJQZXJzaXN0ZW50VXNlclN0eWxl
U2hlZXQoKTsKLQotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0K
LQotc3RhdGljIEpTVmFsdWVSZWYgZGVjb2RlSG9zdE5hbWVDYWxsYmFjayhKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNp
emVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCi17Ci0gICAgLy8gSGFzIG1hYyBpbXBsZW1lbnRhdGlvbgotICAgIGlm
IChhcmd1bWVudENvdW50IDwgMSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOwotCi0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG5hbWUoQWRvcHQsIEpT
VmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKLSAg
ICBBU1NFUlQoISpleGNlcHRpb24pOwotCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRy
b2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGRlY29kZWRI
b3N0TmFtZShBZG9wdCwgY29udHJvbGxlci0+Y29weURlY29kZWRIb3N0TmFtZShuYW1lLmdldCgp
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQsIGRlY29kZWRIb3N0TmFt
ZS5nZXQoKSk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGRpc2FibGVJbWFnZUxvYWRpbmdDYWxs
YmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0
UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFy
Z3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgLy8gSGFzIG1hYyBpbXBs
ZW1lbnRhdGlvbiwgbmVlZHMgd2luZG93cyBpbXBsZW1lbnRhdGlvbgotICAgIExheW91dFRlc3RD
b250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIq
PihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPmRpc2Fi
bGVJbWFnZUxvYWRpbmcoKTsKLSAgICAKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGRpc3BhdGNoUGVuZGluZ0xvYWRSZXF1
ZXN0c0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFs
dWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMg
bWFjIGltcGxlbWVudGF0aW9uLCBuZWVkcyB3aW5kb3dzIGltcGxlbWVudGF0aW9uCi0gICAgTGF5
b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29u
dHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxl
ci0+ZGlzcGF0Y2hQZW5kaW5nTG9hZFJlcXVlc3RzKCk7Ci0gICAgCi0gICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBkaXNwbGF5
Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09i
amVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJl
ZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIC8vIEhhcyBtYWMg
JiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRy
b2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+ZGlzcGxheSgpOwotCi0gICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJl
ZiBkaXNwbGF5SW52YWxpZGF0ZWRSZWdpb25DYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1
bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCi17Ci0gICAgLy8gSGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50YXRpb24KLSAgICBM
YXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RD
b250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICAvLyBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6ZGlzcGxheSgpIG9ubHkgcmVuZGVycyB0aGUgaW52YWxpZGF0ZWQg
cmVnaW9uIHNvCi0gICAgLy8gd2UgY2FuIGp1c3QgdXNlIHRoYXQuCi0gICAgY29udHJvbGxlci0+
ZGlzcGxheSgpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwot
fQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBlbmNvZGVIb3N0TmFtZUNhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMgbWFjIGltcGxlbWVudGF0aW9uCi0gICAg
aWYgKGFyZ3VtZW50Q291bnQgPCAxKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7Ci0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gbmFtZShBZG9wdCwg
SlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwot
ICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29u
dHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQ
cml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gZW5jb2Rl
ZEhvc3ROYW1lKEFkb3B0LCBjb250cm9sbGVyLT5jb3B5RW5jb2RlZEhvc3ROYW1lKG5hbWUuZ2V0
KCkpKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgZW5jb2RlZEhvc3RO
YW1lLmdldCgpKTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgZXhlY0NvbW1hbmRDYWxsYmFjayhK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRo
aXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50
c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgLy8gSGFzIE1hYyAmIFdpbmRvd3Mg
aW1wbGVtZW50YXRpb25zLgotICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IG5hbWUoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1l
bnRzWzBdLCBleGNlcHRpb24pKTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24pOwotCi0gICAgLy8g
SWdub3JpbmcgdGhlIHNlY29uZCBwYXJhbWV0ZXIgKHVzZXJJbnRlcmZhY2UpLCBhcyB0aGlzIGNv
bW1hbmQgZW11bGF0ZXMgYSBtYW51YWwgYWN0aW9uLgotCi0gICAgSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IHZhbHVlOwotICAgIGlmIChhcmd1bWVudENvdW50ID49IDMpIHsKLSAgICAgICAgdmFs
dWUuYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMl0sIGV4Y2Vw
dGlvbikpOwotICAgICAgICBBU1NFUlQoISpleGNlcHRpb24pOwotICAgIH0gZWxzZQotICAgICAg
ICB2YWx1ZS5hZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOwotCi0KLSAg
ICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRl
c3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250
cm9sbGVyLT5leGVjQ29tbWFuZChuYW1lLmdldCgpLCB2YWx1ZS5nZXQoKSk7Ci0KLSAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVm
IGZpbmRTdHJpbmdDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVu
Y3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25z
dCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAg
Ly8gSGFzIE1hYyBpbXBsZW1lbnRhdGlvbi4KLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDIpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiB0YXJnZXQoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29u
dGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24p
OwotCi0gICAgSlNPYmplY3RSZWYgb3B0aW9ucyA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBh
cmd1bWVudHNbMV0sIGV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLQotICAg
IExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVz
dENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIHJldHVy
biBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwgY29udHJvbGxlci0+ZmluZFN0cmluZyhjb250
ZXh0LCB0YXJnZXQuZ2V0KCksIG9wdGlvbnMpKTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgZ29C
YWNrQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIExheW91dFRl
c3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xs
ZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPmdv
QmFjaygpOwotICAgIAotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
LX0KLQotc3RhdGljIEpTVmFsdWVSZWYgZ3JhbnREZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lv
bkNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVS
ZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMgV2lu
ZG93cyBpbXBsZW1lbnRhdGlvbgotICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgTGF5b3V0VGVzdENv
bnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+
KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0KLSAgICBjb250cm9sbGVyLT5ncmFu
dERlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uKEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4
dCwgYXJndW1lbnRzWzBdLCBOVUxMKSk7Ci0gICAgICAgIAotICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgaXNDb21tYW5kRW5h
YmxlZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFs
dWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMg
TWFjIGltcGxlbWVudGF0aW9uLgotCi0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQotICAgICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gbmFtZShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBh
cmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0KLSAg
ICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRl
c3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLQotICAgIHJl
dHVybiBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwgY29udHJvbGxlci0+aXNDb21tYW5kRW5h
YmxlZChuYW1lLmdldCgpKSk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIG92ZXJyaWRlUHJlZmVy
ZW5jZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFs
dWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBpZiAoYXJn
dW1lbnRDb3VudCA8IDIpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKLQotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBrZXkoQWRvcHQsIEpTVmFsdWVU
b1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKLSAgICBBU1NF
UlQoISpleGNlcHRpb24pOwotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB2YWx1ZShBZG9w
dCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbikp
OwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciog
Y29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RH
ZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5vdmVycmlkZVByZWZlcmVu
Y2Uoa2V5LmdldCgpLCB2YWx1ZS5nZXQoKSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGtlZXBXZWJIaXN0b3J5Q2Fs
bGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVj
dFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBh
cmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIC8vIEhhcyBtYWMgaW1w
bGVtZW50YXRpb24KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRp
Y19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmpl
Y3QpKTsKLSAgICBjb250cm9sbGVyLT5rZWVwV2ViSGlzdG9yeSgpOwotCi0gICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBjb21w
dXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm9DYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBh
cmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCi17Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQgIT0gMSkKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotICAgIAotICAgIC8vIEhhcyBtYWMgaW1w
bGVtZW50YXRpb24KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRp
Y19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmpl
Y3QpKTsKLSAgICByZXR1cm4gY29udHJvbGxlci0+Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0
ZWRJbmZvKGNvbnRleHQsIGFyZ3VtZW50c1swXSk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGxh
eWVyVHJlZUFzVGV4dENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBm
dW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNv
bnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAg
ICAvLyBIYXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRhdGlvbgotICAgIExheW91dFRlc3RDb250
cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihK
U09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIHJldHVybiBKU1ZhbHVlTWFrZVN0
cmluZyhjb250ZXh0LCBjb250cm9sbGVyLT5sYXllclRyZWVBc1RleHQoKS5nZXQoKSk7Ci19Ci0K
LXN0YXRpYyBKU1ZhbHVlUmVmIG5vdGlmeURvbmVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBh
cmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCi17Ci0gICAgLy8gSGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50YXRpb24KLSAg
ICAvLyBNYXkgYmUgYWJsZSB0byBiZSBtYWRlIHBsYXRmb3JtIGluZGVwZW5kYW50IGJ5IHVzaW5n
IHNoYXJlZCBXb3JrUXVldWUKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9
IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRo
aXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5ub3RpZnlEb25lKCk7Ci0gICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgYm9vbCBwYXJzZVBhZ2VQ
YXJhbWV0ZXJzKEpTQ29udGV4dFJlZiBjb250ZXh0LCBpbnQgYXJndW1lbnRDb3VudCwgY29uc3Qg
SlNWYWx1ZVJlZiogYXJndW1lbnRzLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24sIGZsb2F0JiBwYWdl
V2lkdGhJblBpeGVscywgZmxvYXQmIHBhZ2VIZWlnaHRJblBpeGVscykKLXsKLSAgICBwYWdlV2lk
dGhJblBpeGVscyA9IExheW91dFRlc3RDb250cm9sbGVyOjptYXhWaWV3V2lkdGg7Ci0gICAgcGFn
ZUhlaWdodEluUGl4ZWxzID0gTGF5b3V0VGVzdENvbnRyb2xsZXI6Om1heFZpZXdIZWlnaHQ7Ci0g
ICAgc3dpdGNoIChhcmd1bWVudENvdW50KSB7Ci0gICAgY2FzZSAyOgotICAgICAgICBwYWdlV2lk
dGhJblBpeGVscyA9IHN0YXRpY19jYXN0PGZsb2F0PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwg
YXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKLSAgICAgICAgaWYgKCpleGNlcHRpb24pCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHBhZ2VIZWlnaHRJblBpeGVscyA9IHN0YXRp
Y19jYXN0PGZsb2F0PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNl
cHRpb24pKTsKLSAgICAgICAgaWYgKCpleGNlcHRpb24pCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgY2FzZSAwOiAvLyBGYWxsIHRocm91Z2guCi0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLS8vIENhbGxlciBuZWVkcyB0byBkZWxldGVbXSBwcm9wZXJ0eU5hbWUuCi1zdGF0aWMgYm9v
bCBwYXJzZVBhZ2VQcm9wZXJ0eVBhcmFtZXRlcnMoSlNDb250ZXh0UmVmIGNvbnRleHQsIGludCBh
cmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmKiBhcmd1bWVudHMsIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbiwgY2hhciomIHByb3BlcnR5TmFtZSwgaW50JiBwYWdlTnVtYmVyKQotewotICAgIHBh
Z2VOdW1iZXIgPSAwOwotICAgIHN3aXRjaCAoYXJndW1lbnRDb3VudCkgewotICAgIGNhc2UgMjoK
LSAgICAgICAgcGFnZU51bWJlciA9IHN0YXRpY19jYXN0PGZsb2F0PihKU1ZhbHVlVG9OdW1iZXIo
Y29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pKTsKLSAgICAgICAgaWYgKCpleGNlcHRp
b24pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIC8vIEZhbGwgdGhyb3VnaC4K
LSAgICBjYXNlIDE6IHsKLSAgICAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHByb3BlcnR5
TmFtZVN0cmluZyhBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNb
MF0sIGV4Y2VwdGlvbikpOwotICAgICAgICBpZiAoKmV4Y2VwdGlvbikKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICBzaXplX3QgbWF4TGVuZ3RoID0gSlNTdHJpbmdHZXRNYXhp
bXVtVVRGOENTdHJpbmdTaXplKHByb3BlcnR5TmFtZVN0cmluZy5nZXQoKSk7Ci0gICAgICAgIHBy
b3BlcnR5TmFtZSA9IG5ldyBjaGFyW21heExlbmd0aCArIDFdOwotICAgICAgICBKU1N0cmluZ0dl
dFVURjhDU3RyaW5nKHByb3BlcnR5TmFtZVN0cmluZy5nZXQoKSwgcHJvcGVydHlOYW1lLCBtYXhM
ZW5ndGggKyAxKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhc2UgMDoKLSAg
ICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1zdGF0aWMgYm9v
bCBwYXJzZVBhZ2VOdW1iZXJTaXplTWFyaW5ncyhKU0NvbnRleHRSZWYgY29udGV4dCwgaW50IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYqIGFyZ3VtZW50cywgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uLCBpbnQmIHBhZ2VOdW1iZXIsIGludCYgd2lkdGgsIGludCYgaGVpZ2h0LCBpbnQmIG1h
cmdpblRvcCwgaW50JiBtYXJnaW5SaWdodCwgaW50JiBtYXJnaW5Cb3R0b20sIGludCYgbWFyZ2lu
TGVmdCkKLXsKLSAgICBwYWdlTnVtYmVyID0gMDsKLSAgICB3aWR0aCA9IGhlaWdodCA9IDA7Ci0g
ICAgbWFyZ2luVG9wID0gbWFyZ2luUmlnaHQgPSBtYXJnaW5Cb3R0b20gPSBtYXJnaW5MZWZ0ID0g
MDsKLQotICAgIHN3aXRjaCAoYXJndW1lbnRDb3VudCkgewotICAgIGNhc2UgNzoKLSAgICAgICAg
bWFyZ2luTGVmdCA9IHN0YXRpY19jYXN0PGludD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFy
Z3VtZW50c1s2XSwgZXhjZXB0aW9uKSk7Ci0gICAgICAgIGlmICgqZXhjZXB0aW9uKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAvLyBGYWxsIHRocm91Z2guCi0gICAgY2FzZSA2
OgotICAgICAgICBtYXJnaW5Cb3R0b20gPSBzdGF0aWNfY2FzdDxpbnQ+KEpTVmFsdWVUb051bWJl
cihjb250ZXh0LCBhcmd1bWVudHNbNV0sIGV4Y2VwdGlvbikpOwotICAgICAgICBpZiAoKmV4Y2Vw
dGlvbikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgLy8gRmFsbCB0aHJvdWdo
LgotICAgIGNhc2UgNToKLSAgICAgICAgbWFyZ2luUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KEpT
VmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbNF0sIGV4Y2VwdGlvbikpOwotICAgICAg
ICBpZiAoKmV4Y2VwdGlvbikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgLy8g
RmFsbCB0aHJvdWdoLgotICAgIGNhc2UgNDoKLSAgICAgICAgbWFyZ2luVG9wID0gc3RhdGljX2Nh
c3Q8aW50PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzNdLCBleGNlcHRpb24p
KTsKLSAgICAgICAgaWYgKCpleGNlcHRpb24pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIC8vIEZhbGwgdGhyb3VnaC4KLSAgICBjYXNlIDM6Ci0gICAgICAgIGhlaWdodCA9IHN0
YXRpY19jYXN0PGludD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1syXSwgZXhj
ZXB0aW9uKSk7Ci0gICAgICAgIGlmICgqZXhjZXB0aW9uKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAvLyBGYWxsIHRocm91Z2guCi0gICAgY2FzZSAyOgotICAgICAgICB3aWR0
aCA9IHN0YXRpY19jYXN0PGludD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1sx
XSwgZXhjZXB0aW9uKSk7Ci0gICAgICAgIGlmICgqZXhjZXB0aW9uKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAvLyBGYWxsIHRocm91Z2guCi0gICAgY2FzZSAxOgotICAgICAg
ICBwYWdlTnVtYmVyID0gc3RhdGljX2Nhc3Q8aW50PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwg
YXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKLSAgICAgICAgaWYgKCpleGNlcHRpb24pCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIC8vIEZhbGwgdGhyb3VnaC4KLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LX0KLQotc3RhdGljIEpTVmFsdWVSZWYgbnVtYmVyT2ZQYWdlc0NhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBmbG9hdCBwYWdlV2lkdGhJblBpeGVscyA9IDA7Ci0g
ICAgZmxvYXQgcGFnZUhlaWdodEluUGl4ZWxzID0gMDsKLSAgICBpZiAoIXBhcnNlUGFnZVBhcmFt
ZXRlcnMoY29udGV4dCwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCBleGNlcHRpb24sIHBhZ2VX
aWR0aEluUGl4ZWxzLCBwYWdlSGVpZ2h0SW5QaXhlbHMpKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29u
dHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQ
cml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4
dCwgY29udHJvbGxlci0+bnVtYmVyT2ZQYWdlcyhwYWdlV2lkdGhJblBpeGVscywgcGFnZUhlaWdo
dEluUGl4ZWxzKSk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIG51bWJlck9mUGVuZGluZ0dlb2xv
Y2F0aW9uUGVybWlzc2lvblJlcXVlc3RzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQotewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nh
c3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkp
OwotICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCBjb250cm9sbGVyLT5udW1i
ZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cygpKTsKLX0KLQotc3RhdGlj
IEpTVmFsdWVSZWYgcGFnZVByb3BlcnR5Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQotewotICAgIGNoYXIqIHByb3BlcnR5TmFtZSA9IDA7Ci0gICAgaW50IHBhZ2VOdW1iZXIg
PSAwOwotICAgIGlmICghcGFyc2VQYWdlUHJvcGVydHlQYXJhbWV0ZXJzKGNvbnRleHQsIGFyZ3Vt
ZW50Q291bnQsIGFyZ3VtZW50cywgZXhjZXB0aW9uLCBwcm9wZXJ0eU5hbWUsIHBhZ2VOdW1iZXIp
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBM
YXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RD
b250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBKU1ZhbHVl
UmVmIHZhbHVlID0gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgY29udHJvbGxlci0+cGFnZVBy
b3BlcnR5KHByb3BlcnR5TmFtZSwgcGFnZU51bWJlcikuZ2V0KCkpOwotCi0gICAgZGVsZXRlW10g
cHJvcGVydHlOYW1lOwotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYg
cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHNDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1
bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCi17Ci0gICAgaW50IHBhZ2VOdW1iZXIgPSAwOwotICAgIGludCB3aWR0aCA9IDAsIGhl
aWdodCA9IDA7Ci0gICAgaW50IG1hcmdpblRvcCA9IDAsIG1hcmdpblJpZ2h0ID0gMCwgbWFyZ2lu
Qm90dG9tID0gMCwgbWFyZ2luTGVmdCA9IDA7Ci0gICAgaWYgKCFwYXJzZVBhZ2VOdW1iZXJTaXpl
TWFyaW5ncyhjb250ZXh0LCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMsIGV4Y2VwdGlvbiwgcGFn
ZU51bWJlciwgd2lkdGgsIGhlaWdodCwgbWFyZ2luVG9wLCBtYXJnaW5SaWdodCwgbWFyZ2luQm90
dG9tLCBtYXJnaW5MZWZ0KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNv
bnRleHQpOwotCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNf
Y2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQsIGNvbnRyb2xsZXItPnBh
Z2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKHBhZ2VOdW1iZXIsIHdpZHRoLCBoZWlnaHQsIG1hcmdp
blRvcCwgbWFyZ2luUmlnaHQsIG1hcmdpbkJvdHRvbSwgbWFyZ2luTGVmdCkuZ2V0KCkpOwotfQot
Ci1zdGF0aWMgSlNWYWx1ZVJlZiBxdWV1ZUJhY2tOYXZpZ2F0aW9uQ2FsbGJhY2soSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0
LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dzIGltcGxlbWVu
dGF0aW9uCi0gICAgLy8gTWF5IGJlIGFibGUgdG8gYmUgbWFkZSBwbGF0Zm9ybSBpbmRlcGVuZGFu
dCBieSB1c2luZyBzaGFyZWQgV29ya1F1ZXVlCi0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBkb3Vi
bGUgaG93RmFyQmFja0RvdWJsZSA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNb
MF0sIGV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLQotICAgIExheW91dFRl
c3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xs
ZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPnF1
ZXVlQmFja05hdmlnYXRpb24oc3RhdGljX2Nhc3Q8aW50Pihob3dGYXJCYWNrRG91YmxlKSk7Ci0K
LSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBK
U1ZhbHVlUmVmIHF1ZXVlRm9yd2FyZE5hdmlnYXRpb25DYWxsYmFjayhKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVf
dCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCi17Ci0gICAgLy8gSGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50YXRpb24K
LSAgICAvLyBNYXkgYmUgYWJsZSB0byBiZSBtYWRlIHBsYXRmb3JtIGluZGVwZW5kYW50IGJ5IHVz
aW5nIHNoYXJlZCBXb3JrUXVldWUKLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIGRvdWJsZSBob3dG
YXJGb3J3YXJkRG91YmxlID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwg
ZXhjZXB0aW9uKTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24pOwotCi0gICAgTGF5b3V0VGVzdENv
bnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+
KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+cXVldWVG
b3J3YXJkTmF2aWdhdGlvbihzdGF0aWNfY2FzdDxpbnQ+KGhvd0ZhckZvcndhcmREb3VibGUpKTsK
LQotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGlj
IEpTVmFsdWVSZWYgcXVldWVMb2FkQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2Jq
ZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRD
b3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQotewotICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCi0gICAgLy8gTWF5
IGJlIGFibGUgdG8gYmUgbWFkZSBwbGF0Zm9ybSBpbmRlcGVuZGFudCBieSB1c2luZyBzaGFyZWQg
V29ya1F1ZXVlCi0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gdXJsKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwg
ZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLQotICAgIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiB0YXJnZXQ7Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQgPj0gMikgewotICAg
ICAgICB0YXJnZXQuYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNb
MV0sIGV4Y2VwdGlvbikpOwotICAgICAgICBBU1NFUlQoISpleGNlcHRpb24pOwotICAgIH0gZWxz
ZQotICAgICAgICB0YXJnZXQuYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIp
KTsKLQotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8
TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwot
ICAgIGNvbnRyb2xsZXItPnF1ZXVlTG9hZCh1cmwuZ2V0KCksIHRhcmdldC5nZXQoKSk7Ci0KLSAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1Zh
bHVlUmVmIHF1ZXVlTG9hZEhUTUxTdHJpbmdDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1
bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCi17Ci0gICAgLy8gSGFzIE1hYyAmIFdpbmRvd3MgaW1wbGVtZW50YXRpb24KLSAgICBp
ZiAoYXJndW1lbnRDb3VudCA8IDEpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKLQotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBjb250ZW50KEFkb3B0
LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7
Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLQotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBiYXNlVVJMOwotICAgIGlmIChhcmd1bWVudENvdW50ID49IDIpIHsKLSAgICAgICAgYmFzZVVS
TC5hZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0
aW9uKSk7Ci0gICAgICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0gICAgfSBlbHNlCi0gICAgICAg
IGJhc2VVUkwuYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsKLQotICAg
IExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVz
dENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotCi0gICAgaWYg
KGFyZ3VtZW50Q291bnQgPj0gMykgewotICAgICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
dW5yZWFjaGFibGVVUkw7Ci0gICAgICAgIHVucmVhY2hhYmxlVVJMLmFkb3B0KEpTVmFsdWVUb1N0
cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzJdLCBleGNlcHRpb24pKTsKLSAgICAgICAgQVNT
RVJUKCEqZXhjZXB0aW9uKTsKLSAgICAgICAgY29udHJvbGxlci0+cXVldWVMb2FkQWx0ZXJuYXRl
SFRNTFN0cmluZyhjb250ZW50LmdldCgpLCBiYXNlVVJMLmdldCgpLCB1bnJlYWNoYWJsZVVSTC5n
ZXQoKSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLSAg
ICB9Ci0KLSAgICBjb250cm9sbGVyLT5xdWV1ZUxvYWRIVE1MU3RyaW5nKGNvbnRlbnQuZ2V0KCks
IGJhc2VVUkwuZ2V0KCkpOwotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgcXVldWVSZWxvYWRDYWxsYmFjayhKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3Qs
IHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgLy8gSGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50
YXRpb24KLSAgICAvLyBNYXkgYmUgYWJsZSB0byBiZSBtYWRlIHBsYXRmb3JtIGluZGVwZW5kYW50
IGJ5IHVzaW5nIHNoYXJlZCBXb3JrUXVldWUKLQotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBj
b250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdl
dFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPnF1ZXVlUmVsb2FkKCk7Ci0K
LSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBK
U1ZhbHVlUmVmIHF1ZXVlTG9hZGluZ1NjcmlwdENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRhdGlvbgotICAg
IC8vIE1heSBiZSBhYmxlIHRvIGJlIG1hZGUgcGxhdGZvcm0gaW5kZXBlbmRhbnQgYnkgdXNpbmcg
c2hhcmVkIFdvcmtRdWV1ZQotICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IHNjcmlwdChBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1
bWVudHNbMF0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0KLSAgICBM
YXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RD
b250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9s
bGVyLT5xdWV1ZUxvYWRpbmdTY3JpcHQoc2NyaXB0LmdldCgpKTsKLQotICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgcXVldWVO
b25Mb2FkaW5nU2NyaXB0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
IGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwg
Y29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewot
ICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCi0gICAgLy8gTWF5IGJlIGFi
bGUgdG8gYmUgbWFkZSBwbGF0Zm9ybSBpbmRlcGVuZGFudCBieSB1c2luZyBzaGFyZWQgV29ya1F1
ZXVlCi0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc2Ny
aXB0KEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhj
ZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLQotICAgIExheW91dFRlc3RDb250
cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihK
U09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPnF1ZXVlTm9u
TG9hZGluZ1NjcmlwdChzY3JpcHQuZ2V0KCkpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBzZXRBY2NlcHRzRWRpdGlu
Z0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVS
ZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMgbWFj
ICYgd2luZG93cyBpbXBsZW1lbnRhdGlvbgotICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgTGF5b3V0
VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJv
bGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+
c2V0QWNjZXB0c0VkaXRpbmcoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0p
KTsKLQotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3Rh
dGljIEpTVmFsdWVSZWYgc2V0QWx3YXlzQWNjZXB0Q29va2llc0NhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRh
dGlvbgotICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRy
b2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+c2V0QWx3YXlzQWNjZXB0Q29va2ll
cyhKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOwotCi0gICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBz
ZXRBcHBDYWNoZU1heGltdW1TaXplQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2Jq
ZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRD
b3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQotewotICAgIC8vIEhhcyBtYWMgaW1wbGVtZW50YXRpb24KLSAgICBpZiAoYXJndW1lbnRDb3Vu
dCA8IDEpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQot
ICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0
VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotCi0gICAg
ZG91YmxlIHNpemUgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBOVUxM
KTsKLSAgICBpZiAoIWlzbmFuKHNpemUpKQotICAgICAgICBjb250cm9sbGVyLT5zZXRBcHBDYWNo
ZU1heGltdW1TaXplKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc2l6ZSkpOwotICAg
ICAgICAKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0
YXRpYyBKU1ZhbHVlUmVmIHNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YUNhbGxiYWNrKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhp
c09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRz
W10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMgbWFjIGltcGxlbWVudGF0
aW9uCi0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJv
bGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2
YXRlKHRoaXNPYmplY3QpKTsKLQotICAgIGRvdWJsZSBzaXplID0gSlNWYWx1ZVRvTnVtYmVyKGNv
bnRleHQsIGFyZ3VtZW50c1swXSwgTlVMTCk7Ci0gICAgaWYgKCFpc25hbihzaXplKSkKLSAgICAg
ICAgY29udHJvbGxlci0+c2V0QXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKHN0YXRpY19jYXN0
PHVuc2lnbmVkIGxvbmcgbG9uZz4oc2l6ZSkpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBzZXRBdXRoZW50aWNhdGlv
blBhc3N3b3JkQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0
aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3Qg
SlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIC8v
IEhhcyBtYWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCi0gICAgaWYgKGFyZ3VtZW50Q291bnQg
PCAxKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAg
ICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gcGFzc3dvcmQoQWRvcHQsIEpTVmFsdWVUb1N0cmlu
Z0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKLSAgICBBU1NFUlQoISpl
eGNlcHRpb24pOwotCi0gICAgc2l6ZV90IG1heExlbmd0aCA9IEpTU3RyaW5nR2V0TWF4aW11bVVU
RjhDU3RyaW5nU2l6ZShwYXNzd29yZC5nZXQoKSk7Ci0gICAgY2hhciogcGFzc3dvcmRCdWZmZXIg
PSBuZXcgY2hhclttYXhMZW5ndGggKyAxXTsKLSAgICBKU1N0cmluZ0dldFVURjhDU3RyaW5nKHBh
c3N3b3JkLmdldCgpLCBwYXNzd29yZEJ1ZmZlciwgbWF4TGVuZ3RoICsgMSk7Ci0gICAgCi0gICAg
TGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0
Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJv
bGxlci0+c2V0QXV0aGVudGljYXRpb25QYXNzd29yZChwYXNzd29yZEJ1ZmZlcik7Ci0gICAgZGVs
ZXRlW10gcGFzc3dvcmRCdWZmZXI7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldEF1dGhlbnRpY2F0aW9uVXNlcm5h
bWVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpT
T2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVl
UmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgLy8gSGFzIG1h
YyAmIHdpbmRvd3MgaW1wbGVtZW50YXRpb24KLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiB1c2VybmFtZShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShj
b250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCghKmV4Y2VwdGlv
bik7Ci0KLSAgICBzaXplX3QgbWF4TGVuZ3RoID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJp
bmdTaXplKHVzZXJuYW1lLmdldCgpKTsKLSAgICBjaGFyKiB1c2VybmFtZUJ1ZmZlciA9IG5ldyBj
aGFyW21heExlbmd0aCArIDFdOwotICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmcodXNlcm5hbWUu
Z2V0KCksIHVzZXJuYW1lQnVmZmVyLCBtYXhMZW5ndGggKyAxKTsKLSAgICAKLSAgICBMYXlvdXRU
ZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9s
bGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5z
ZXRBdXRoZW50aWNhdGlvblVzZXJuYW1lKHVzZXJuYW1lQnVmZmVyKTsKLSAgICBkZWxldGVbXSB1
c2VybmFtZUJ1ZmZlcjsKLQotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgc2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWRD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2Jq
ZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVm
IGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgLy8gSGFzIG1hYyAm
IHdpbmRvd3MgaW1wbGVtZW50YXRpb24KLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIExheW91dFRl
c3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xs
ZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPnNl
dEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJn
dW1lbnRzWzBdKSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldEF1dG9maWxsZWRDYWxsYmFjayhKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3Qs
IHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQgIT0gMiB8fCAhYXJn
dW1lbnRzWzBdKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExh
eW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAg
ICBjb250cm9sbGVyLT5zZXRBdXRvZmlsbGVkKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgSlNWYWx1
ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMV0pKTsKLQotICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgc2V0Q2FjaGVN
b2RlbENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFs
dWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMg
TWFjIGltcGxlbWVudGF0aW9uLgotICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgaW50IGNhY2hlTW9k
ZWwgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOwot
ICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29u
dHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQ
cml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZXRDYWNoZU1vZGVsKGNhY2hl
TW9kZWwpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQot
Ci1zdGF0aWMgSlNWYWx1ZVJlZiBzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZUNhbGxiYWNrKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09i
amVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10s
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMgbWFjIGltcGxlbWVudGF0aW9u
Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7Ci0gICAgCi0gICAgYm9vbCBwZXJtaXNzaXZlID0gZmFsc2U7Ci0g
ICAgaWYgKGFyZ3VtZW50Q291bnQgPj0gMikKLSAgICAgICAgcGVybWlzc2l2ZSA9IEpTVmFsdWVU
b0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzFdKTsKLQotICAgIExheW91dFRlc3RDb250cm9s
bGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09i
amVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPnNldEN1c3RvbVBv
bGljeURlbGVnYXRlKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSwgcGVy
bWlzc2l2ZSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19
Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldERhdGFiYXNlUXVvdGFDYWxsYmFjayhKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3Qs
IHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgLy8gSGFzIG1hYyBpbXBsZW1lbnRhdGlvbgotICAg
IGlmIChhcmd1bWVudENvdW50IDwgMSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOwotCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBz
dGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlz
T2JqZWN0KSk7Ci0KLSAgICBkb3VibGUgcXVvdGEgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwg
YXJndW1lbnRzWzBdLCBOVUxMKTsKLSAgICBpZiAoIWlzbmFuKHF1b3RhKSkKLSAgICAgICAgY29u
dHJvbGxlci0+c2V0RGF0YWJhc2VRdW90YShzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+
KHF1b3RhKSk7Ci0gICAgICAgIAotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgc2V0RGVmZXJNYWluUmVzb3VyY2VEYXRhTG9h
ZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVS
ZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMgTWFj
IGFuZCBXaW5kb3dzIGltcGxlbWVudGF0aW9uCi0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBMYXlv
dXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250
cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVy
LT5zZXREZWZlck1haW5SZXNvdXJjZURhdGFMb2FkKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwg
YXJndW1lbnRzWzBdKSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldERlZmVyc0xvYWRpbmdDYWxsYmFjayhKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1td
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBMYXlv
dXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250
cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVy
LT5zZXREZWZlcnNMb2FkaW5nKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBd
KSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0
YXRpYyBKU1ZhbHVlUmVmIHNldFVzZURlZmVycmVkRnJhbWVMb2FkaW5nQ2FsbGJhY2soSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2Jq
ZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgTGF5b3V0
VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJv
bGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+
c2V0VXNlRGVmZXJyZWRGcmFtZUxvYWRpbmcoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1
bWVudHNbMF0pKTsKLQotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
LX0KLQotc3RhdGljIEpTVmFsdWVSZWYgc2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVS
TFNjaGVtZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlv
biwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpT
VmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBI
YXMgTWFjIGFuZCBXaW5kb3dzIGltcGxlbWVudGF0aW9uCi0gICAgaWYgKGFyZ3VtZW50Q291bnQg
PCAyKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAg
ICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRl
c3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLQotICAgIGJv
b2wgZm9yYmlkZGVuID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pOwot
ICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzY2hlbWUoQWRvcHQsIEpTVmFsdWVUb1N0cmlu
Z0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzFdLCAwKSk7Ci0gICAgY29udHJvbGxlci0+c2V0RG9t
YWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShmb3JiaWRkZW4sIHNjaGVtZS5nZXQo
KSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0
YXRpYyBKU1ZhbHVlUmVmIHNldE1vY2tEZXZpY2VPcmllbnRhdGlvbkNhbGxiYWNrKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDYpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIGJvb2wgY2Fu
UHJvdmlkZUFscGhhID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pOwot
ICAgIGRvdWJsZSBhbHBoYSA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMV0s
IGV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLSAgICBib29sIGNhblByb3Zp
ZGVCZXRhID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMl0pOwotICAgIGRv
dWJsZSBiZXRhID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1szXSwgZXhjZXB0
aW9uKTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24pOwotICAgIGJvb2wgY2FuUHJvdmlkZUdhbW1h
ID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbNF0pOwotICAgIGRvdWJsZSBn
YW1tYSA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbNV0sIGV4Y2VwdGlvbik7
Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLQotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBj
b250cm9sbGVyID0gcmVpbnRlcnByZXRfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+c2V0TW9ja0Rldmlj
ZU9yaWVudGF0aW9uKGNhblByb3ZpZGVBbHBoYSwgYWxwaGEsIGNhblByb3ZpZGVCZXRhLCBiZXRh
LCBjYW5Qcm92aWRlR2FtbWEsIGdhbW1hKTsKLQotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgc2V0TW9ja0dlb2xvY2F0aW9u
UG9zaXRpb25DYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rp
b24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgaWYg
KGFyZ3VtZW50Q291bnQgPCAzKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHJlaW50
ZXJwcmV0X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhp
c09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKEpT
VmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0sIE5VTEwpLCAgLy8gbGF0aXR1ZGUK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlVG9OdW1i
ZXIoY29udGV4dCwgYXJndW1lbnRzWzFdLCBOVUxMKSwgIC8vIGxvbmdpdHVkZQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVUb051bWJlcihjb250ZXh0
LCBhcmd1bWVudHNbMl0sIE5VTEwpKTsgIC8vIGFjY3VyYWN5Ci0KLSAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldE1vY2tH
ZW9sb2NhdGlvbkVycm9yQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
IGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwg
Y29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewot
ICAgIGlmIChhcmd1bWVudENvdW50IDwgMikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOwotCi0gICAgaW50IGNvZGUgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4
dCwgYXJndW1lbnRzWzBdLCBOVUxMKTsKLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gbWVz
c2FnZShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4
Y2VwdGlvbikpOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0KLSAgICBMYXlvdXRUZXN0Q29u
dHJvbGxlciogY29udHJvbGxlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xs
ZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPnNl
dE1vY2tHZW9sb2NhdGlvbkVycm9yKGNvZGUsIG1lc3NhZ2UuZ2V0KCkpOwotCi0gICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBh
ZGRNb2NrU3BlZWNoSW5wdXRSZXN1bHRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNP
YmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVu
dENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pCi17Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAzKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
cmVzdWx0KEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwg
ZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLQotICAgIGRvdWJsZSBjb25m
aWRlbmNlID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9u
KTsKLQotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBsYW5ndWFnZShBZG9wdCwgSlNWYWx1
ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMl0sIGV4Y2VwdGlvbikpOwotICAgIEFT
U0VSVCghKmV4Y2VwdGlvbik7Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxl
ciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRl
KHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5hZGRNb2NrU3BlZWNoSW5wdXRSZXN1bHQo
cmVzdWx0LmdldCgpLCBjb25maWRlbmNlLCBsYW5ndWFnZS5nZXQoKSk7Ci0KLSAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNl
dE1vY2tTcGVlY2hJbnB1dER1bXBSZWN0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQotewotICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgYm9vbCBkdW1wUmVjdCA9IEpTVmFsdWVU
b0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKTsKLQotICAgIExheW91dFRlc3RDb250cm9s
bGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09i
amVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPnNldE1vY2tTcGVl
Y2hJbnB1dER1bXBSZWN0KGR1bXBSZWN0KTsKLQotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgc2V0TmV3V2luZG93c0NvcHlC
YWNrRm9yd2FyZExpc3RDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
ZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBj
b25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0g
ICAgLy8gSGFzIG1hYyBpbXBsZW1lbnRhdGlvbgotICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotICAgIAotICAg
IExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVz
dENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRy
b2xsZXItPnNldE5ld1dpbmRvd3NDb3B5QmFja0ZvcndhcmRMaXN0KEpTVmFsdWVUb0Jvb2xlYW4o
Y29udGV4dCwgYXJndW1lbnRzWzBdKSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldEdlb2xvY2F0aW9uUGVybWlz
c2lvbkNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFs
dWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMg
bWFjIGltcGxlbWVudGF0aW9uCi0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBMYXlvdXRUZXN0Q29u
dHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4o
SlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZXRHZW9s
b2NhdGlvblBlcm1pc3Npb24oSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0p
KTsKLQotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3Rh
dGljIEpTVmFsdWVSZWYgc2V0SGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlc0NhbGxiYWNr
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYg
dGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1l
bnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMgbWFjICYgd2luZG93
cyBpbXBsZW1lbnRhdGlvbgotICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgTGF5b3V0VGVzdENvbnRy
b2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpT
T2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+c2V0SGFuZGxl
c0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyhKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3Vt
ZW50c1swXSkpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwot
fQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBzZXRQT1NJWExvY2FsZUNhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIExheW91dFRlc3RD
b250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIq
PihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBsb2NhbGUoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1l
bnRzWzBdLCBleGNlcHRpb24pKTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24pOwotICAgIGNvbnRy
b2xsZXItPnNldFBPU0lYTG9jYWxlKGxvY2FsZS5nZXQoKSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldEljb25E
YXRhYmFzZUVuYWJsZWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
ZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBj
b25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0g
ICAgLy8gSGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50YXRpb24KLSAgICBpZiAoYXJndW1lbnRD
b3VudCA8IDEpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
LQotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5
b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAg
IGNvbnRyb2xsZXItPnNldEljb25EYXRhYmFzZUVuYWJsZWQoSlNWYWx1ZVRvQm9vbGVhbihjb250
ZXh0LCBhcmd1bWVudHNbMF0pKTsKLQotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgc2V0TWFpbkZyYW1lSXNGaXJzdFJlc3Bv
bmRlckNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFs
dWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMg
bWFjIGltcGxlbWVudGF0aW9uCi0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBMYXlvdXRUZXN0Q29u
dHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4o
SlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZXRNYWlu
RnJhbWVJc0ZpcnN0UmVzcG9uZGVyKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRz
WzBdKSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0K
LXN0YXRpYyBKU1ZhbHVlUmVmIHNldFBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldExvY2F0aW9uQ2Fs
bGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVj
dFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBh
cmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIC8vIEhhcyBtYWMgaW1w
bGVtZW50YXRpb24KLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBwYXRoKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1sw
XSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLQotICAgIExheW91dFRl
c3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xs
ZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPnNl
dFBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldExvY2F0aW9uKHBhdGguZ2V0KCkpOwotCi0gICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJl
ZiBzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQotewotICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCi0gICAg
aWYgKGFyZ3VtZW50Q291bnQgPCAxKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0
YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKEpTVmFs
dWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldEphdmFT
Y3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNP
YmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVu
dENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pCi17Ci0gICAgLy8gSGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50YXRpb24KLSAgICBpZiAo
YXJndW1lbnRDb3VudCA8IDEpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKLQotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGlj
X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOwotICAgIGNvbnRyb2xsZXItPnNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQoSlNW
YWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pKTsKLQotICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgc2V0WFNT
QXVkaXRvckVuYWJsZWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
ZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBj
b25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0g
ICAgLy8gSGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50YXRpb24KLSAgICBpZiAoYXJndW1lbnRD
b3VudCA8IDEpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
LQotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5
b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAg
IGNvbnRyb2xsZXItPnNldFhTU0F1ZGl0b3JFbmFibGVkKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4
dCwgYXJndW1lbnRzWzBdKSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxl
ZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVS
ZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMgbWFj
IGltcGxlbWVudGF0aW9uLgotICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgTGF5b3V0VGVzdENvbnRy
b2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpT
T2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+c2V0U3BhdGlh
bE5hdmlnYXRpb25FbmFibGVkKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBd
KSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0
YXRpYyBKU1ZhbHVlUmVmIHNldFByaW50aW5nQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQotewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGlj
X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOwotICAgIGNvbnRyb2xsZXItPnNldElzUHJpbnRpbmcodHJ1ZSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNl
dEZyYW1lRmxhdHRlbmluZ0VuYWJsZWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNP
YmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVu
dENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pCi17Ci0gICAgLy8gSGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50YXRpb24KLSAgICBpZiAo
YXJndW1lbnRDb3VudCA8IDEpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKLQotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGlj
X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOwotICAgIGNvbnRyb2xsZXItPnNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoSlNWYWx1ZVRv
Qm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pKTsKLQotICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgc2V0QWxsb3dVbml2
ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHNDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNP
YmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVu
dENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pCi17Ci0gICAgLy8gSGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50YXRpb24KLSAgICBpZiAo
YXJndW1lbnRDb3VudCA8IDEpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKLQotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGlj
X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOwotICAgIGNvbnRyb2xsZXItPnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxz
KEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7Ci0KLSAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNl
dEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMc0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRhdGlvbgotICAg
IGlmIChhcmd1bWVudENvdW50IDwgMSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOwotCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBz
dGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlz
T2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxz
KEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7Ci0KLSAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNl
dFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50c0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRhdGlvbgotICAg
IGlmIChhcmd1bWVudENvdW50IDwgMSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOwotCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBz
dGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlz
T2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRz
KEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7Ci0KLSAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNl
dFVzZURhc2hib2FyZENvbXBhdGliaWxpdHlNb2RlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQotewotICAgIC8vIEhhcyBtYWMgaW1wbGVtZW50YXRpb24KLSAgICBpZiAoYXJn
dW1lbnRDb3VudCA8IDEpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKLQotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nh
c3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkp
OwotICAgIGNvbnRyb2xsZXItPnNldFVzZURhc2hib2FyZENvbXBhdGliaWxpdHlNb2RlKEpTVmFs
dWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldFVzZXJT
dHlsZVNoZWV0RW5hYmxlZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQs
IGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsK
LSAgICAvLyBIYXMgbWFjIGltcGxlbWVudGF0aW9uCi0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAx
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBM
YXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RD
b250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9s
bGVyLT5zZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBh
cmd1bWVudHNbMF0pKTsKLQotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgc2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbkNhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJn
dW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMgbWFjIGltcGxl
bWVudGF0aW9uCi0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gcGF0aChBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0s
IGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0KLSAgICBMYXlvdXRUZXN0
Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZXRV
c2VyU3R5bGVTaGVldExvY2F0aW9uKHBhdGguZ2V0KCkpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBzZXRWYWx1ZUZv
clVzZXJDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24s
IEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1Zh
bHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgLy8gSGFz
IG1hYyBpbXBsZW1lbnRhdGlvbgotICAgIGlmIChhcmd1bWVudENvdW50ICE9IDIpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiB2YWx1ZShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBh
cmd1bWVudHNbMV0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0KLSAg
ICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRl
c3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250
cm9sbGVyLT5zZXRWYWx1ZUZvclVzZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCB2YWx1ZS5nZXQo
KSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0
YXRpYyBKU1ZhbHVlUmVmIHNldFZpZXdNb2RlTWVkaWFGZWF0dXJlQ2FsbGJhY2soSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0
LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIC8vIEhhcyBtYWMgaW1wbGVtZW50YXRpb24KLSAg
ICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKLQotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBtb2RlKEFkb3B0
LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7
Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLQotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBj
b250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdl
dFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPnNldFZpZXdNb2RlTWVkaWFG
ZWF0dXJlKG1vZGUuZ2V0KCkpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNv
bnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBzZXRXaWxsU2VuZFJlcXVlc3RDbGVhckhl
YWRlckNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFs
dWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMg
bWFjICYgd2luZG93cyBpbXBsZW1lbnRhdGlvbgotICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGhlYWRlcihBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShj
b250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCghKmV4Y2VwdGlv
bik7Ci0KLSAgICBzaXplX3QgbWF4TGVuZ3RoID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJp
bmdTaXplKGhlYWRlci5nZXQoKSk7Ci0gICAgT3duQXJyYXlQdHI8Y2hhcj4gaGVhZGVyQnVmZmVy
ID0gYWRvcHRBcnJheVB0cihuZXcgY2hhclttYXhMZW5ndGggKyAxXSk7Ci0gICAgSlNTdHJpbmdH
ZXRVVEY4Q1N0cmluZyhoZWFkZXIuZ2V0KCksIGhlYWRlckJ1ZmZlci5nZXQoKSwgbWF4TGVuZ3Ro
ICsgMSk7Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19j
YXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3Qp
KTsKLSAgICBjb250cm9sbGVyLT5zZXRXaWxsU2VuZFJlcXVlc3RDbGVhckhlYWRlcihoZWFkZXJC
dWZmZXIuZ2V0KCkpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbENh
bGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYg
YXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMgY3Jvc3Mt
cGxhdGZvcm0gaW1wbGVtZW50YXRpb24KLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIExheW91dFRl
c3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xs
ZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPnNl
dFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJn
dW1lbnRzWzBdKSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsT25S
ZWRpcmVjdENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlv
biwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpT
VmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBI
YXMgY3Jvc3MtcGxhdGZvcm0gaW1wbGVtZW50YXRpb24KLSAgICBpZiAoYXJndW1lbnRDb3VudCA8
IDEpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAg
IExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVz
dENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRy
b2xsZXItPnNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVjdChKU1ZhbHVlVG9C
b29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBzZXRXaW5kb3dJc0tl
eUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVS
ZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMgbWFj
IGltcGxlbWVudGF0aW9uCi0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJv
bGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNP
YmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZXRXaW5kb3dJ
c0tleShKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOwotCi0gICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJl
ZiB3YWl0VW50aWxEb25lQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
IGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwg
Y29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewot
ICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCi0gICAgTGF5b3V0VGVzdENv
bnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+
KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+c2V0V2Fp
dFRvRHVtcCh0cnVlKTsKLQotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgd2luZG93Q291bnRDYWxsYmFjayhKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3Qs
IHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgLy8gSGFzIG1hYyBpbXBsZW1lbnRhdGlvbgotICAg
IExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVz
dENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGludCB3
aW5kb3dzID0gY29udHJvbGxlci0+d2luZG93Q291bnQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1h
a2VOdW1iZXIoY29udGV4dCwgd2luZG93cyk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldFBv
cHVwQmxvY2tpbmdFbmFibGVkQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3Vu
dCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQot
ewotICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCi0gICAgaWYgKGFyZ3Vt
ZW50Q291bnQgPCAxKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0
PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsK
LSAgICBjb250cm9sbGVyLT5zZXRQb3B1cEJsb2NraW5nRW5hYmxlZChKU1ZhbHVlVG9Cb29sZWFu
KGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBzZXRQbHVnaW5zRW5hYmxlZENh
bGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYg
YXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMgbWFjICYg
d2luZG93cyBpbXBsZW1lbnRhdGlvbgotICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotICAgIAotICAgIExheW91
dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRy
b2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXIt
PnNldFBsdWdpbnNFbmFibGVkKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBd
KSk7Ci0gICAgCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfSAg
ICAKLQotc3RhdGljIEpTVmFsdWVSZWYgc2V0UGFnZVZpc2liaWxpdHlDYWxsYmFjayhKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmpl
Y3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgLy8gSGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVt
ZW50YXRpb24KLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiB2aXNpYmlsaXR5KEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50
c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLQotICAgIHNpemVf
dCBtYXhMZW5ndGggPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUodmlzaWJpbGl0
eS5nZXQoKSk7Ci0gICAgY2hhciogdmlzaWJpbGl0eUJ1ZmZlciA9IG5ldyBjaGFyW21heExlbmd0
aCArIDFdOwotICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmcodmlzaWJpbGl0eS5nZXQoKSwgdmlz
aWJpbGl0eUJ1ZmZlciwgbWF4TGVuZ3RoICsgMSk7Ci0gICAgCi0gICAgTGF5b3V0VGVzdENvbnRy
b2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpT
T2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+c2V0UGFnZVZp
c2liaWxpdHkodmlzaWJpbGl0eUJ1ZmZlcik7Ci0gICAgZGVsZXRlW10gdmlzaWJpbGl0eUJ1ZmZl
cjsKLSAgICAKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19ICAg
IAotCi1zdGF0aWMgSlNWYWx1ZVJlZiByZXNldFBhZ2VWaXNpYmlsaXR5Q2FsbGJhY2soSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2Jq
ZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250
cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPnJlc2V0UGFnZVZpc2liaWxpdHko
KTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19ICAgIAotCi1z
dGF0aWMgSlNWYWx1ZVJlZiBzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWRDYWxsYmFjayhKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1td
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBMYXlv
dXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250
cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVy
LT5zZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBh
cmd1bWVudHNbMF0pKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVk
Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09i
amVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJl
ZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIGlmIChhcmd1bWVu
dENvdW50IDwgMSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OwotCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxM
YXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0g
ICAgY29udHJvbGxlci0+c2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoSlNWYWx1ZVRv
Qm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldFNlbGVjdFRyYWls
aW5nV2hpdGVzcGFjZUVuYWJsZWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmpl
Y3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENv
dW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
Ci17Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJv
bGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2
YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZXRTZWxlY3RUcmFpbGluZ1doaXRl
c3BhY2VFbmFibGVkKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNW
YWx1ZVJlZiBzZXRTdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzQ2FsbGJhY2soSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQotewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVy
ID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUo
dGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPnNldFN0b3BQcm92aXNpb25hbEZyYW1lTG9h
ZHModHJ1ZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQot
Ci1zdGF0aWMgSlNWYWx1ZVJlZiBzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZENh
bGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYg
YXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBpZiAoYXJndW1lbnRD
b3VudCA8IDEpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
LQotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5
b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAg
IGNvbnRyb2xsZXItPnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKEpTVmFsdWVU
b0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBzaG93V2ViSW5zcGVj
dG9yQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIExheW91dFRl
c3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xs
ZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPnNo
b3dXZWJJbnNwZWN0b3IoKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGNsb3NlV2ViSW5zcGVjdG9yQ2FsbGJhY2soSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlz
T2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNb
XSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBj
b250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdl
dFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPmNsb3NlV2ViSW5zcGVjdG9y
KCk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0
aWMgSlNWYWx1ZVJlZiBldmFsdWF0ZUluV2ViSW5zcGVjdG9yQ2FsbGJhY2soSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQotewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVy
ID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUo
dGhpc09iamVjdCkpOwotICAgIGRvdWJsZSBjYWxsSWQgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4
dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0g
ICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHNjcmlwdChBZG9wdCwgSlNWYWx1ZVRvU3RyaW5n
Q29weShjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCghKmV4
Y2VwdGlvbik7Ci0KLSAgICBjb250cm9sbGVyLT5ldmFsdWF0ZUluV2ViSW5zcGVjdG9yKHN0YXRp
Y19jYXN0PGxvbmc+KGNhbGxJZCksIHNjcmlwdC5nZXQoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBldmFsdWF0ZVNj
cmlwdEluSXNvbGF0ZWRXb3JsZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVj
dFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
LXsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExh
eW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAg
ICBkb3VibGUgd29ybGRJRCA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0s
IGV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLSAgICBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gc2NyaXB0KEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFy
Z3VtZW50c1sxXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLQotICAg
IGNvbnRyb2xsZXItPmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKHN0YXRpY19jYXN0PHVu
c2lnbmVkPih3b3JsZElEKSwgSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRleHQpLCBzY3Jp
cHQuZ2V0KCkpOwotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0K
LQotc3RhdGljIEpTVmFsdWVSZWYgZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1
cm5WYWx1ZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlv
biwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpT
VmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBMYXlv
dXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250
cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBkb3VibGUgd29y
bGRJRCA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7
Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
c2NyaXB0KEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1sxXSwg
ZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLQotICAgIGNvbnRyb2xsZXIt
PmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUoc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHdvcmxkSUQpLCBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCksIHNj
cmlwdC5nZXQoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwot
fQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBlbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRX
aXRoSWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24s
IEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1Zh
bHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgTGF5b3V0
VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJv
bGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IGVsZW1lbnRJZChBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0
LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0K
LSAgICBib29sIGF1dG9Db21wbGV0ZXMgPSBjb250cm9sbGVyLT5lbGVtZW50RG9lc0F1dG9Db21w
bGV0ZUZvckVsZW1lbnRXaXRoSWQoZWxlbWVudElkLmdldCgpKTsKLQotICAgIHJldHVybiBKU1Zh
bHVlTWFrZUJvb2xlYW4oY29udGV4dCwgYXV0b0NvbXBsZXRlcyk7Ci19Ci0KLXN0YXRpYyBKU1Zh
bHVlUmVmIHBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkQ2FsbGJhY2soSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2Jq
ZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIGlmIChhcmd1bWVudENvdW50ICE9IDMpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBhbmltYXRpb25OYW1lKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdD
b3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhj
ZXB0aW9uKTsKLSAgICBkb3VibGUgdGltZSA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1
bWVudHNbMV0sIGV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLSAgICBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gZWxlbWVudElkKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5
KGNvbnRleHQsIGFyZ3VtZW50c1syXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0
aW9uKTsKLQotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nh
c3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkp
OwotICAgIHJldHVybiBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwgY29udHJvbGxlci0+cGF1
c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoYW5pbWF0aW9uTmFtZS5nZXQoKSwgdGlt
ZSwgZWxlbWVudElkLmdldCgpKSk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHBhdXNlVHJhbnNp
dGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKLXsKLSAgICBpZiAoYXJndW1lbnRDb3VudCAhPSAzKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gcHJvcGVydHlOYW1lKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3Vt
ZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLSAgICBkb3Vi
bGUgdGltZSA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlv
bik7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gZWxlbWVudElkKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50
c1syXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLQotICAgIExheW91
dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRy
b2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIHJldHVybiBKU1Zh
bHVlTWFrZUJvb2xlYW4oY29udGV4dCwgY29udHJvbGxlci0+cGF1c2VUcmFuc2l0aW9uQXRUaW1l
T25FbGVtZW50V2l0aElkKHByb3BlcnR5TmFtZS5nZXQoKSwgdGltZSwgZWxlbWVudElkLmdldCgp
KSk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIG51bWJlck9mQWN0aXZlQW5pbWF0aW9uc0NhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJn
dW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBpZiAoYXJndW1lbnRDb3Vu
dCAhPSAwKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0K
LSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91
dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgY29udHJvbGxlci0+bnVtYmVyT2ZBY3Rp
dmVBbmltYXRpb25zKCkpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiB3YWl0Rm9yUG9saWN5RGVs
ZWdhdGVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0
UmVmIHRoaXNPYmplY3QsIHNpemVfdCwgY29uc3QgSlNWYWx1ZVJlZltdLCBKU1ZhbHVlUmVmKikK
LXsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExh
eW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAg
ICBjb250cm9sbGVyLT53YWl0Rm9yUG9saWN5RGVsZWdhdGUoKTsKLSAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGFkZE9yaWdp
bkFjY2Vzc1doaXRlbGlzdEVudHJ5Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2Jq
ZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29u
c3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAg
IGlmIChhcmd1bWVudENvdW50ICE9IDQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKLQotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzb3VyY2VPcmln
aW4oQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNl
cHRpb24pKTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24pOwotICAgIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBkZXN0aW5hdGlvblByb3RvY29sKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNv
bnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9u
KTsKLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gZGVzdGluYXRpb25Ib3N0KEFkb3B0LCBK
U1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1syXSwgZXhjZXB0aW9uKSk7Ci0g
ICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLSAgICBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21h
aW5zID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbM10pOwotCi0gICAgTGF5
b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29u
dHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxl
ci0+YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoc291cmNlT3JpZ2luLmdldCgpLCBkZXN0
aW5hdGlvblByb3RvY29sLmdldCgpLCBkZXN0aW5hdGlvbkhvc3QuZ2V0KCksIGFsbG93RGVzdGlu
YXRpb25TdWJkb21haW5zKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVu
dHJ5Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJl
ZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1
bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIGlmIChhcmd1bWVudENvdW50
ICE9IDQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQot
ICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzb3VyY2VPcmlnaW4oQWRvcHQsIEpTVmFsdWVU
b1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKLSAgICBBU1NF
UlQoISpleGNlcHRpb24pOwotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBkZXN0aW5hdGlv
blByb3RvY29sKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1sx
XSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLSAgICBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gZGVzdGluYXRpb25Ib3N0KEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5
KGNvbnRleHQsIGFyZ3VtZW50c1syXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0
aW9uKTsKLSAgICBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zID0gSlNWYWx1ZVRvQm9v
bGVhbihjb250ZXh0LCBhcmd1bWVudHNbM10pOwotCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIq
IGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+cmVtb3ZlT3JpZ2luQWNj
ZXNzV2hpdGVsaXN0RW50cnkoc291cmNlT3JpZ2luLmdldCgpLCBkZXN0aW5hdGlvblByb3RvY29s
LmdldCgpLCBkZXN0aW5hdGlvbkhvc3QuZ2V0KCksIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5z
KTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRp
YyBKU1ZhbHVlUmVmIHNldFNjcm9sbGJhclBvbGljeUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50
Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKLXsKLSAgICBpZiAoYXJndW1lbnRDb3VudCAhPSAyKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
b3JpZW50YXRpb24oQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRz
WzBdLCBleGNlcHRpb24pKTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24pOwotICAgIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBwb2xpY3koQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4
dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pKTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24pOwot
Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlv
dXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAg
Y29udHJvbGxlci0+c2V0U2Nyb2xsYmFyUG9saWN5KG9yaWVudGF0aW9uLmdldCgpLCBwb2xpY3ku
Z2V0KCkpOwotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQot
c3RhdGljIEpTVmFsdWVSZWYgYWRkVXNlclNjcmlwdENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50
Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKLXsKLSAgICBpZiAoYXJndW1lbnRDb3VudCAhPSAzKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0gICAgCi0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IHNvdXJjZShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNb
MF0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0gICAgYm9vbCBydW5B
dFN0YXJ0ID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMV0pOwotICAgIGJv
b2wgYWxsRnJhbWVzID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMl0pOwot
ICAgIAotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8
TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwot
ICAgIGNvbnRyb2xsZXItPmFkZFVzZXJTY3JpcHQoc291cmNlLmdldCgpLCBydW5BdFN0YXJ0LCBh
bGxGcmFtZXMpOwotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0K
LSAKLXN0YXRpYyBKU1ZhbHVlUmVmIGFkZFVzZXJTdHlsZVNoZWV0Q2FsbGJhY2soSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQotewotICAgIGlmIChhcmd1bWVudENvdW50ICE9IDIpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLSAgICAKLSAgICBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gc291cmNlKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFy
Z3VtZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLSAgICBi
b29sIGFsbEZyYW1lcyA9IEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzFdKTsK
LSAgIAotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8
TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwot
ICAgIGNvbnRyb2xsZXItPmFkZFVzZXJTdHlsZVNoZWV0KHNvdXJjZS5nZXQoKSwgYWxsRnJhbWVz
KTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRp
YyBKU1ZhbHVlUmVmIHNldFNob3VsZFBhaW50QnJva2VuSW1hZ2VDYWxsYmFjayhKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3Qs
IHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgLy8gSGFzIE1hYyBpbXBsZW1lbnRhdGlvbgotICAg
IGlmIChhcmd1bWVudENvdW50IDwgMSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOwotCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBz
dGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlz
T2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+c2V0U2hvdWxkUGFpbnRCcm9rZW5JbWFnZShKU1Zh
bHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOwotCi0gICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBhcGlUZXN0
TmV3V2luZG93RGF0YUxvYWRCYXNlVVJMQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwg
Y29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewot
ICAgIGlmIChhcmd1bWVudENvdW50ICE9IDIpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVu
ZGVmaW5lZChjb250ZXh0KTsKLQotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB1dGY4RGF0
YShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2Vw
dGlvbikpOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0KLSAgICBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gYmFzZVVSTChBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1
bWVudHNbMV0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0gICAgICAg
IAotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5
b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAg
IGNvbnRyb2xsZXItPmFwaVRlc3ROZXdXaW5kb3dEYXRhTG9hZEJhc2VVUkwodXRmOERhdGEuZ2V0
KCksIGJhc2VVUkwuZ2V0KCkpOwotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgYXBpVGVzdEdvVG9DdXJyZW50QmFja0Zvcndh
cmRJdGVtQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVj
dFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBh
cmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIExheW91dFRlc3RDb250
cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihK
U09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPmFwaVRlc3RH
b1RvQ3VycmVudEJhY2tGb3J3YXJkSXRlbSgpOwotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgc2V0V2ViVmlld0VkaXRhYmxl
Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09i
amVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJl
ZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIC8vIEhhcyBNYWMg
aW1wbGVtZW50YXRpb24KLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIExheW91dFRlc3RDb250cm9s
bGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09i
amVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPnNldFdlYlZpZXdF
ZGl0YWJsZShKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOwotCi0gICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1
ZVJlZiBzZW5kV2ViSW50ZW50UmVzcG9uc2VDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1
bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCi17Ci0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHJlc3BvbnNlOwotICAgIGlm
IChhcmd1bWVudENvdW50ID09IDEpIHsKLSAgICAgICAgcmVzcG9uc2UuYWRvcHQoSlNWYWx1ZVRv
U3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwotICAgICAgICBB
U1NFUlQoISpleGNlcHRpb24pOwotICAgIH0gZWxzZQotICAgICAgICByZXNwb25zZS5hZG9wdChK
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygwKSk7Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJv
bGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNP
YmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZW5kV2ViSW50
ZW50UmVzcG9uc2UocmVzcG9uc2UuZ2V0KCkpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBkZWxpdmVyV2ViSW50ZW50
Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09i
amVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJl
ZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIGlmIChhcmd1bWVu
dENvdW50IDwgMykKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OwotCi0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGFjdGlvbihBZG9wdCwgSlNWYWx1ZVRv
U3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VS
VCghKmV4Y2VwdGlvbik7Ci0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHR5cGUoQWRvcHQs
IEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pKTsK
LSAgICBBU1NFUlQoISpleGNlcHRpb24pOwotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBk
YXRhKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1syXSwgZXhj
ZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLQotICAgIExheW91dFRlc3RDb250
cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihK
U09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPmRlbGl2ZXJX
ZWJJbnRlbnQoYWN0aW9uLmdldCgpLCB0eXBlLmdldCgpLCBkYXRhLmdldCgpKTsKLQotICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVS
ZWYgYWJvcnRNb2RhbENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBm
dW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNv
bnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAg
ICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRl
c3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250
cm9sbGVyLT5hYm9ydE1vZGFsKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNv
bnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBtYXJrZXJUZXh0Rm9yTGlzdEl0ZW1DYWxs
YmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1td
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNv
bnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0
UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQotICAgICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0gICAgcmV0dXJuIEpTVmFs
dWVNYWtlU3RyaW5nKGNvbnRleHQsIGNvbnRyb2xsZXItPm1hcmtlclRleHRGb3JMaXN0SXRlbShj
b250ZXh0LCBhcmd1bWVudHNbMF0pLmdldCgpKTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgYXV0
aGVudGljYXRlU2Vzc2lvbkNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpT
VmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBh
dXRoZW50aWNhdGVTZXNzaW9uKHVybCwgdXNlcm5hbWUsIHBhc3N3b3JkKQotICAgIGlmIChhcmd1
bWVudENvdW50ICE9IDMpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKLQotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB1cmwoQWRvcHQsIEpTVmFsdWVU
b1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKLSAgICBBU1NF
UlQoISpleGNlcHRpb24pOwotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB1c2VybmFtZShB
ZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlv
bikpOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IHBhc3N3b3JkKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50
c1syXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLQotICAgIExheW91
dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRy
b2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXIt
PmF1dGhlbnRpY2F0ZVNlc3Npb24odXJsLmdldCgpLCB1c2VybmFtZS5nZXQoKSwgcGFzc3dvcmQu
Z2V0KCkpOwotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQot
c3RhdGljIEpTVmFsdWVSZWYgc2V0U2VyaWFsaXplSFRUUExvYWRzQ2FsbGJhY2soSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
LXsKLSAgICBib29sIHNlcmlhbGl6ZSA9IHRydWU7Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQgPT0g
MSkKLSAgICAgICAgc2VyaWFsaXplID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVu
dHNbMF0pOwotCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNlcmlhbGl6ZUhUVFBMb2Fk
cyhzZXJpYWxpemUpOwotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
LX0KLQotc3RhdGljIEpTVmFsdWVSZWYgc2V0U2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdC
ZWZvcmVVbmxvYWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpT
T2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVl
UmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgTGF5b3V0VGVz
dENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxl
cio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgCi0gICAgaWYgKGFyZ3Vt
ZW50Q291bnQgPT0gMSkKLSAgICAgICAgY29udHJvbGxlci0+c2V0U2hvdWxkU3RheU9uUGFnZUFm
dGVySGFuZGxpbmdCZWZvcmVVbmxvYWQoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVu
dHNbMF0pKTsKLQotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0K
LQotc3RhdGljIEpTVmFsdWVSZWYgYWRkQ2hyb21lSW5wdXRGaWVsZENhbGxiYWNrKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90
IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikKLXsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0
YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5hZGRDaHJvbWVJbnB1dEZpZWxkKCk7Ci0gICAgLy8g
dGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgY2FsbGJhY2sgdGhhdCBpcyBjYWxsZWQgb25jZSB0aGUg
aW5wdXQgZmllbGQgaGFzIGJlZW4gYWRkZWQKLSAgICBpZiAoYXJndW1lbnRDb3VudCA9PSAxKQot
ICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHQsIEpTVmFsdWVUb09iamVjdChj
b250ZXh0LCBhcmd1bWVudHNbMF0sIDApLCB0aGlzT2JqZWN0LCAwLCAwLCAwKTsKLSAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVm
IHJlbW92ZUNocm9tZUlucHV0RmllbGRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNP
YmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBj
b25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0g
ICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRU
ZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29u
dHJvbGxlci0+cmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCgpOwotICAgIC8vIHRoZSBmaXJzdCBhcmd1
bWVudCBpcyBhIGNhbGxiYWNrIHRoYXQgaXMgY2FsbGVkIG9uY2UgdGhlIGlucHV0IGZpZWxkIGhh
cyBiZWVuIGFkZGVkCi0gICAgaWYgKGFyZ3VtZW50Q291bnQgPT0gMSkKLSAgICAgICAgSlNPYmpl
Y3RDYWxsQXNGdW5jdGlvbihjb250ZXh0LCBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJndW1l
bnRzWzBdLCAwKSwgdGhpc09iamVjdCwgMCwgMCwgMCk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBmb2N1c1dlYlZpZXdD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRo
aXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50
c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIq
IGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+Zm9jdXNXZWJWaWV3KCk7
Ci0gICAgLy8gdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgY2FsbGJhY2sgdGhhdCBpcyBjYWxsZWQg
b25jZSB0aGUgaW5wdXQgZmllbGQgaGFzIGJlZW4gYWRkZWQKLSAgICBpZiAoYXJndW1lbnRDb3Vu
dCA9PSAxKQotICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHQsIEpTVmFsdWVU
b09iamVjdChjb250ZXh0LCBhcmd1bWVudHNbMF0sIDApLCB0aGlzT2JqZWN0LCAwLCAwLCAwKTsK
LSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBK
U1ZhbHVlUmVmIHNldEJhY2tpbmdTY2FsZUZhY3RvckNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50
Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKLXsKLSAgICBpZiAoYXJndW1lbnRDb3VudCAhPSAyKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBkb3VibGUgYmFja2luZ1NjYWxlRmFjdG9y
ID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKTsKLSAg
ICBBU1NFUlQoISpleGNlcHRpb24pOwotCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRy
b2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+c2V0QmFja2luZ1NjYWxlRmFjdG9y
KGJhY2tpbmdTY2FsZUZhY3Rvcik7Ci0KLSAgICAvLyBUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIGEg
Y2FsbGJhY2sgdGhhdCBpcyBjYWxsZWQgb25jZSB0aGUgYmFja2luZyBzY2FsZSBmYWN0b3IgaGFz
IGJlZW4gc2V0LgotICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgSlNWYWx1ZVRv
T2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgMCksIHRoaXNPYmplY3QsIDAsIDAsIDApOwot
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpT
VmFsdWVSZWYgcHJlY2lzZVRpbWVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmpl
Y3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25z
dCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAg
cmV0dXJuIEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIFdURjo6Y3VycmVudFRpbWUoKSk7Ci19
Ci0KLS8vIFN0YXRpYyBWYWx1ZXMKLQotc3RhdGljIEpTVmFsdWVSZWYgZ2V0R2xvYmFsRmxhZ0Nh
bGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0
cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBMYXlv
dXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250
cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIGNvbnRyb2xsZXItPmdsb2JhbEZsYWcoKSk7Ci19Ci0K
LXN0YXRpYyBKU1ZhbHVlUmVmIGdldFdlYkhpc3RvcnlJdGVtQ291bnRDYWxsYmFjayhKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xs
ZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVtYmVy
KGNvbnRleHQsIGNvbnRyb2xsZXItPndlYkhpc3RvcnlJdGVtQ291bnQoKSk7Ci19Ci0KLXN0YXRp
YyBKU1ZhbHVlUmVmIGdldFdvcmtlclRocmVhZENvdW50Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250
cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOwotICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0
LCBjb250cm9sbGVyLT53b3JrZXJUaHJlYWRDb3VudCgpKTsKLX0KLQotI2lmIFBMQVRGT1JNKE1B
QykgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pCi1zdGF0aWMgSlNWYWx1ZVJlZiBn
ZXRQbGF0Zm9ybU5hbWVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
dGhpc09iamVjdCwgSlNTdHJpbmdSZWYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pCi17Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2Fz
dDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7
Ci0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHBsYXRmb3JtTmFtZShjb250cm9sbGVyLT5w
bGF0Zm9ybU5hbWUoKSk7Ci0gICAgaWYgKCFwbGF0Zm9ybU5hbWUuZ2V0KCkpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLSAgICByZXR1cm4gSlNWYWx1ZU1h
a2VTdHJpbmcoY29udGV4dCwgcGxhdGZvcm1OYW1lLmdldCgpKTsKLX0KLSNlbmRpZgotCi1zdGF0
aWMgSlNWYWx1ZVJlZiBnZXRUaXRsZVRleHREaXJlY3Rpb25DYWxsYmFjayhKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNv
bnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0
UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHRpdGxl
RGlyZWN0aW9uKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhjb250cm9sbGVy
LT50aXRsZVRleHREaXJlY3Rpb24oKS5jX3N0cigpKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtl
U3RyaW5nKGNvbnRleHQsIHRpdGxlRGlyZWN0aW9uLmdldCgpKTsKLX0KLQotc3RhdGljIGJvb2wg
c2V0R2xvYmFsRmxhZ0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB0
aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVSZWYgdmFsdWUsIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJv
bGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2
YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZXRHbG9iYWxGbGFnKEpTVmFsdWVU
b0Jvb2xlYW4oY29udGV4dCwgdmFsdWUpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGlj
IEpTVmFsdWVSZWYgaWdub3JlRGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0c0Nh
bGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYg
YXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBMYXlvdXRUZXN0Q29u
dHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4o
SlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5pZ25vcmVE
ZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKCk7Ci0gICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBzaW11bGF0
ZURlc2t0b3BOb3RpZmljYXRpb25DbGlja0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKLXsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19j
YXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3Qp
KTsgCi0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHRpdGxlKEFkb3B0LCBKU1ZhbHVlVG9T
dHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAgY29udHJv
bGxlci0+c2ltdWxhdGVEZXNrdG9wTm90aWZpY2F0aW9uQ2xpY2sodGl0bGUuZ2V0KCkpOwotICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFs
dWVSZWYgc2V0TWluaW11bVRpbWVySW50ZXJ2YWxDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBh
cmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCi17Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBkb3VibGUgbWluaW11bSA9IEpT
VmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7Ci0gICAgQVNT
RVJUKCEqZXhjZXB0aW9uKTsKLQotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVy
ID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUo
dGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPnNldE1pbmltdW1UaW1lckludGVydmFsKG1p
bmltdW0pOwotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQot
Ci1zdGF0aWMgSlNWYWx1ZVJlZiBzZXRUZXh0RGlyZWN0aW9uQ2FsbGJhY2soSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQotewotICAgIGlmIChhcmd1bWVudENvdW50ID09IDEpIHsKLSAgICAg
ICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGRpcmVjdGlvbihBZG9wdCwgSlNWYWx1ZVRvU3Ry
aW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwotICAgICAgICBMYXlv
dXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250
cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICAgICAgY29udHJv
bGxlci0+c2V0VGV4dERpcmVjdGlvbihkaXJlY3Rpb24uZ2V0KCkpOwotICAgIH0KLQotICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotfQotCi1zdGF0aWMgSlNWYWx1
ZVJlZiBzZXRIYXNDdXN0b21GdWxsU2NyZWVuQmVoYXZpb3JDYWxsYmFjayhKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNp
emVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCi17Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQgPT0gMSkgewotICAgICAg
ICBib29sIGhhc0N1c3RvbUJlaGF2aW9yID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1
bWVudHNbMF0pOwotICAgICAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0
YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKLSAgICAgICAgY29udHJvbGxlci0+c2V0SGFzQ3VzdG9tRnVsbFNjcmVlbkJlaGF2
aW9yKGhhc0N1c3RvbUJlaGF2aW9yKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldFN0b3JhZ2VEYXRh
YmFzZUlkbGVJbnRlcnZhbENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQs
IGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsK
LSAgICBpZiAoYXJndW1lbnRDb3VudCAhPSAxKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBkb3VibGUgaW50ZXJ2YWwgPSBKU1ZhbHVlVG9OdW1i
ZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOwotICAgIEFTU0VSVCghKmV4Y2Vw
dGlvbik7Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19j
YXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3Qp
KTsKLSAgICBjb250cm9sbGVyLT5zZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwoaW50ZXJ2
YWwpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1z
dGF0aWMgdm9pZCBsYXlvdXRUZXN0Q29udHJvbGxlck9iamVjdEZpbmFsaXplKEpTT2JqZWN0UmVm
IG9iamVjdCkKLXsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRp
Y19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkp
OwotICAgIGNvbnRyb2xsZXItPmRlcmVmKCk7Ci19Ci0KLS8vIE9iamVjdCBDcmVhdGlvbgotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
LXsKLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gdGVzdFJ1bm5lclN0cihBZG9wdCwgSlNT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInRlc3RSdW5uZXIiKSk7Ci0gICAgcmVmKCk7Ci0g
ICAgcmVmKCk7Ci0KLSAgICBKU0NsYXNzUmVmIGNsYXNzUmVmID0gZ2V0SlNDbGFzcygpOwotICAg
IEpTVmFsdWVSZWYgbGF5b3V0VGVzdENvbnRvbGxlck9iamVjdCA9IEpTT2JqZWN0TWFrZShjb250
ZXh0LCBjbGFzc1JlZiwgdGhpcyk7Ci0gICAgSlNDbGFzc1JlbGVhc2UoY2xhc3NSZWYpOwotCi0g
ICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3QsIHRlc3RSdW5uZXJT
dHIuZ2V0KCksIGxheW91dFRlc3RDb250b2xsZXJPYmplY3QsIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4Y2VwdGlvbik7Ci19
Ci0KLUpTQ2xhc3NSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmdldEpTQ2xhc3MoKQotewotICAg
IHN0YXRpYyBKU1N0YXRpY1ZhbHVlKiBzdGF0aWNWYWx1ZXMgPSBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c3RhdGljVmFsdWVzKCk7Ci0gICAgc3RhdGljIEpTU3RhdGljRnVuY3Rpb24qIHN0YXRpY0Z1
bmN0aW9ucyA9IExheW91dFRlc3RDb250cm9sbGVyOjpzdGF0aWNGdW5jdGlvbnMoKTsKLSAgICBz
dGF0aWMgSlNDbGFzc0RlZmluaXRpb24gY2xhc3NEZWZpbml0aW9uID0gewotICAgICAgICAwLCBr
SlNDbGFzc0F0dHJpYnV0ZU5vbmUsICJMYXlvdXRUZXN0Q29udHJvbGxlciIsIDAsIHN0YXRpY1Zh
bHVlcywgc3RhdGljRnVuY3Rpb25zLAotICAgICAgICAwLCBsYXlvdXRUZXN0Q29udHJvbGxlck9i
amVjdEZpbmFsaXplLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCi0gICAgfTsKLQotICAgIHJl
dHVybiBKU0NsYXNzQ3JlYXRlKCZjbGFzc0RlZmluaXRpb24pOwotfQotCi1KU1N0YXRpY1ZhbHVl
KiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhdGljVmFsdWVzKCkKLXsKLSAgICBzdGF0aWMgSlNT
dGF0aWNWYWx1ZSBzdGF0aWNWYWx1ZXNbXSA9IHsKLSAgICAgICAgeyAiZ2xvYmFsRmxhZyIsIGdl
dEdsb2JhbEZsYWdDYWxsYmFjaywgc2V0R2xvYmFsRmxhZ0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZU5vbmUgfSwKLSAgICAgICAgeyAid2ViSGlzdG9yeUl0ZW1Db3VudCIsIGdldFdlYkhp
c3RvcnlJdGVtQ291bnRDYWxsYmFjaywgMCwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJ3b3JrZXJUaHJl
YWRDb3VudCIsIGdldFdvcmtlclRocmVhZENvdW50Q2FsbGJhY2ssIDAsIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSNpZiBQ
TEFURk9STShNQUMpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKQotICAgICAgICB7
ICJwbGF0Zm9ybU5hbWUiLCBnZXRQbGF0Zm9ybU5hbWVDYWxsYmFjaywgMCwga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotI2Vu
ZGlmCi0gICAgICAgIHsgInRpdGxlVGV4dERpcmVjdGlvbiIsIGdldFRpdGxlVGV4dERpcmVjdGlv
bkNhbGxiYWNrLCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgMCwgMCwgMCwgMCB9Ci0gICAgfTsKLSAg
ICByZXR1cm4gc3RhdGljVmFsdWVzOwotfQotCi1KU1N0YXRpY0Z1bmN0aW9uKiBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c3RhdGljRnVuY3Rpb25zKCkKLXsKLSAgICBzdGF0aWMgSlNTdGF0aWNGdW5j
dGlvbiBzdGF0aWNGdW5jdGlvbnNbXSA9IHsKLSAgICAgICAgeyAiYWJvcnRNb2RhbCIsIGFib3J0
TW9kYWxDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJhZGREaXNhbGxvd2VkVVJMIiwgYWRk
RGlzYWxsb3dlZFVSTENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgImFkZFVSTFRvUmVkaXJl
Y3QiLCBhZGRVUkxUb1JlZGlyZWN0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9u
bHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAiYWRkVXNl
clNjcmlwdCIsIGFkZFVzZXJTY3JpcHRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJhZGRV
c2VyU3R5bGVTaGVldCIsIGFkZFVzZXJTdHlsZVNoZWV0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAg
ICAgeyAiYXBpVGVzdE5ld1dpbmRvd0RhdGFMb2FkQmFzZVVSTCIsIGFwaVRlc3ROZXdXaW5kb3dE
YXRhTG9hZEJhc2VVUkxDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtK
U1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJhcGlUZXN0R29Ub0N1
cnJlbnRCYWNrRm9yd2FyZEl0ZW0iLCBhcGlUZXN0R29Ub0N1cnJlbnRCYWNrRm9yd2FyZEl0ZW1D
YWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmli
dXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJhcHBsaWNhdGlvbkNhY2hlRGlza1VzYWdlRm9y
T3JpZ2luIiwgYXBwbGljYXRpb25DYWNoZURpc2tVc2FnZUZvck9yaWdpbkNhbGxiYWNrLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRl
IH0sCi0gICAgICAgIHsgImNhbGxTaG91bGRDbG9zZU9uV2ViVmlldyIsIGNhbGxTaG91bGRDbG9z
ZU9uV2ViVmlld0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJv
cGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgImNsZWFyQWxsQXBwbGljYXRp
b25DYWNoZXMiLCBjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5
QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAg
ICAgICAgeyAiY2xlYXJBbGxEYXRhYmFzZXMiLCBjbGVhckFsbERhdGFiYXNlc0NhbGxiYWNrLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIH0sCi0gICAgICAgIHsgImNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbiIsIGNsZWFy
QXBwbGljYXRpb25DYWNoZUZvck9yaWdpbkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJl
YWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgImNs
ZWFyQmFja0ZvcndhcmRMaXN0IiwgY2xlYXJCYWNrRm9yd2FyZExpc3RDYWxsYmFjaywga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9
LAotICAgICAgICB7ICJjbGVhclBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldCIsIGNsZWFyUGVyc2lz
dGVudFVzZXJTdHlsZVNoZWV0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkg
fCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAiY2xvc2VXZWJJ
bnNwZWN0b3IiLCBjbG9zZVdlYkluc3BlY3RvckNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsg
ImNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyIsIGNvbXB1dGVkU3R5bGVJbmNsdWRp
bmdWaXNpdGVkSW5mb0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgImRlY29kZUhvc3ROYW1l
IiwgZGVjb2RlSG9zdE5hbWVDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJkZWxpdmVyV2Vi
SW50ZW50IiwgZGVsaXZlcldlYkludGVudENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJl
YWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgImRp
c2FibGVJbWFnZUxvYWRpbmciLCBkaXNhYmxlSW1hZ2VMb2FkaW5nQ2FsbGJhY2ssIGtKU1Byb3Bl
cnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwK
LSAgICAgICAgeyAiZGlzYWxsb3dJbmNyZWFzZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90YSIsIGRp
c2FsbG93SW5jcmVhc2VGb3JBcHBsaWNhdGlvbkNhY2hlUXVvdGFDYWxsYmFjaywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAot
ICAgICAgICB7ICJkaXNwYXRjaFBlbmRpbmdMb2FkUmVxdWVzdHMiLCBkaXNwYXRjaFBlbmRpbmdM
b2FkUmVxdWVzdHNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJkaXNwbGF5IiwgZGlzcGxh
eUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRy
aWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgImRpc3BsYXlJbnZhbGlkYXRlZFJlZ2lvbiIs
IGRpc3BsYXlJbnZhbGlkYXRlZFJlZ2lvbkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJl
YWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgImR1
bXBBcHBsaWNhdGlvbkNhY2hlRGVsZWdhdGVDYWxsYmFja3MiLCBkdW1wQXBwbGljYXRpb25DYWNo
ZURlbGVnYXRlQ2FsbGJhY2tzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkg
fCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAiZHVtcEFzVGV4
dCIsIGR1bXBBc1RleHRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtK
U1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJkdW1wQmFja0Zvcndh
cmRMaXN0IiwgZHVtcEJhY2tGb3J3YXJkTGlzdENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsg
ImR1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zIiwgZHVtcENoaWxkRnJhbWVTY3JvbGxQb3Np
dGlvbnNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJkdW1wQ2hpbGRGcmFtZXNBc1RleHQi
LCBkdW1wQ2hpbGRGcmFtZXNBc1RleHRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJkdW1w
RE9NQXNXZWJBcmNoaXZlIiwgZHVtcERPTUFzV2ViQXJjaGl2ZUNhbGxiYWNrLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0g
ICAgICAgIHsgImR1bXBEYXRhYmFzZUNhbGxiYWNrcyIsIGR1bXBEYXRhYmFzZUNhbGxiYWNrc0Nh
bGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1
dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgImR1bXBFZGl0aW5nQ2FsbGJhY2tzIiwgZHVtcEVk
aXRpbmdDYWxsYmFja3NDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtK
U1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJkdW1wRnJhbWVMb2Fk
Q2FsbGJhY2tzIiwgZHVtcEZyYW1lTG9hZENhbGxiYWNrc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAg
ICAgIHsgImR1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2siLCBkdW1wUHJvZ3Jlc3NGaW5pc2hl
ZENhbGxiYWNrQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAiZHVtcFVzZXJHZXN0dXJlSW5G
cmFtZUxvYWRDYWxsYmFja3MiLCBkdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrc0Nh
bGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1
dGVEb250RGVsZXRlIH0sICAgICAgICAKLSAgICAgICAgeyAiZHVtcFJlc291cmNlTG9hZENhbGxi
YWNrcyIsIGR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3NDYWxsYmFjaywga0pTUHJvcGVydHlBdHRy
aWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAg
ICB7ICJkdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcyIsIGR1bXBSZXNvdXJjZVJlc3BvbnNl
TUlNRVR5cGVzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAiZHVtcFNlbGVjdGlvblJlY3Qi
LCBkdW1wU2VsZWN0aW9uUmVjdENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgImR1bXBTb3Vy
Y2VBc1dlYkFyY2hpdmUiLCBkdW1wU291cmNlQXNXZWJBcmNoaXZlQ2FsbGJhY2ssIGtKU1Byb3Bl
cnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwK
LSAgICAgICAgeyAiZHVtcFN0YXR1c0NhbGxiYWNrcyIsIGR1bXBTdGF0dXNDYWxsYmFja3NDYWxs
YmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRl
RG9udERlbGV0ZSB9LAotICAgICAgICB7ICJkdW1wVGl0bGVDaGFuZ2VzIiwgZHVtcFRpdGxlQ2hh
bmdlc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgImR1bXBJY29uQ2hhbmdlcyIsIGR1bXBJ
Y29uQ2hhbmdlc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJv
cGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgImR1bXBXaWxsQ2FjaGVSZXNw
b25zZSIsIGR1bXBXaWxsQ2FjaGVSZXNwb25zZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsg
ImVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZCIsIGVsZW1lbnREb2VzQXV0
b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJl
YWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgImVu
Y29kZUhvc3ROYW1lIiwgZW5jb2RlSG9zdE5hbWVDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7
ICJldmFsdWF0ZUluV2ViSW5zcGVjdG9yIiwgZXZhbHVhdGVJbldlYkluc3BlY3RvckNhbGxiYWNr
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlIH0sCi0gICAgICAgIHsgImV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0
dXJuVmFsdWUiLCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlQ2Fs
bGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAiZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQi
LCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAg
IHsgImV4ZWNDb21tYW5kIiwgZXhlY0NvbW1hbmRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7
ICJmaW5kU3RyaW5nIiwgZmluZFN0cmluZ0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJl
YWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgIm9y
aWdpbnNXaXRoQXBwbGljYXRpb25DYWNoZSIsIG9yaWdpbnNXaXRoQXBwbGljYXRpb25DYWNoZUNh
bGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1
dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgImdvQmFjayIsIGdvQmFja0NhbGxiYWNrLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRl
IH0sIAotICAgICAgICB7ICJncmFudERlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uIiwgZ3Jh
bnREZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvbkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sIAotICAgICAg
ICB7ICJpZ25vcmVEZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzIiwgaWdub3Jl
RGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0c0NhbGxiYWNrLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0g
ICAgICAgIHsgImlzQ29tbWFuZEVuYWJsZWQiLCBpc0NvbW1hbmRFbmFibGVkQ2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfSwKLSAgICAgICAgeyAia2VlcFdlYkhpc3RvcnkiLCBrZWVwV2ViSGlzdG9yeUNhbGxiYWNr
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlIH0sCi0gICAgICAgIHsgImxheWVyVHJlZUFzVGV4dCIsIGxheWVyVHJlZUFzVGV4dENh
bGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1
dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgIm51bWJlck9mUGFnZXMiLCBudW1iZXJPZlBhZ2Vz
Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAibnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdHMiLCBudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0c0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgIm1hcmtlclRleHRGb3JMaXN0SXRl
bSIsIG1hcmtlclRleHRGb3JMaXN0SXRlbUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJl
YWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgIm5v
dGlmeURvbmUiLCBub3RpZnlEb25lQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9u
bHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAibnVtYmVy
T2ZBY3RpdmVBbmltYXRpb25zIiwgbnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zQ2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfSwKLSAgICAgICAgeyAib3ZlcnJpZGVQcmVmZXJlbmNlIiwgb3ZlcnJpZGVQcmVmZXJlbmNl
Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAicGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMi
LCBwYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVsc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsg
InBhZ2VQcm9wZXJ0eSIsIHBhZ2VQcm9wZXJ0eUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsg
InBhdGhUb0xvY2FsUmVzb3VyY2UiLCBwYXRoVG9Mb2NhbFJlc291cmNlQ2FsbGJhY2ssIGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUg
fSwKLSAgICAgICAgeyAicGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQiLCBwYXVz
ZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAg
IHsgInBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZCIsIHBhdXNlVHJhbnNpdGlv
bkF0VGltZU9uRWxlbWVudFdpdGhJZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInByaW50
VG9QREYiLCBkdW1wQXNQREZDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJxdWV1ZUJhY2tO
YXZpZ2F0aW9uIiwgcXVldWVCYWNrTmF2aWdhdGlvbkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAg
IHsgInF1ZXVlRm9yd2FyZE5hdmlnYXRpb24iLCBxdWV1ZUZvcndhcmROYXZpZ2F0aW9uQ2FsbGJh
Y2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURv
bnREZWxldGUgfSwKLSAgICAgICAgeyAicXVldWVMb2FkIiwgcXVldWVMb2FkQ2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfSwKLSAgICAgICAgeyAicXVldWVMb2FkSFRNTFN0cmluZyIsIHF1ZXVlTG9hZEhUTUxTdHJp
bmdDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJxdWV1ZUxvYWRpbmdTY3JpcHQiLCBxdWV1
ZUxvYWRpbmdTY3JpcHRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtK
U1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJxdWV1ZU5vbkxvYWRp
bmdTY3JpcHQiLCBxdWV1ZU5vbkxvYWRpbmdTY3JpcHRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRy
aWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAg
ICB7ICJxdWV1ZVJlbG9hZCIsIHF1ZXVlUmVsb2FkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAg
eyAicmVtb3ZlQWxsVmlzaXRlZExpbmtzIiwgcmVtb3ZlQWxsVmlzaXRlZExpbmtzQ2FsbGJhY2ss
IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUgfSwKLSAgICAgICAgeyAicmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkiLCBy
ZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAg
IHsgInJlcGFpbnRTd2VlcEhvcml6b250YWxseSIsIHJlcGFpbnRTd2VlcEhvcml6b250YWxseUNh
bGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1
dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInJlc2V0UGFnZVZpc2liaWxpdHkiLCByZXNldFBh
Z2VWaXNpYmlsaXR5Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAic2VuZFdlYkludGVudFJl
c3BvbnNlIiwgc2VuZFdlYkludGVudFJlc3BvbnNlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAg
eyAic2V0QWNjZXB0c0VkaXRpbmciLCBzZXRBY2NlcHRzRWRpdGluZ0NhbGxiYWNrLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0s
Ci0gICAgICAgIHsgInNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzIiwgc2V0QWxs
b3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7
ICJzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMiLCBzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9t
RmlsZVVSTHNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3Bl
cnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJzZXRBbHdheXNBY2NlcHRDb29r
aWVzIiwgc2V0QWx3YXlzQWNjZXB0Q29va2llc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsg
InNldEFwcENhY2hlTWF4aW11bVNpemUiLCBzZXRBcHBDYWNoZU1heGltdW1TaXplQ2FsbGJhY2ss
IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUgfSwKLSAgICAgICAgeyAic2V0QXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhIiwgc2V0
QXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAi
c2V0RW5jb2RlZEF1ZGlvRGF0YSIsIHNldEVuY29kZWRBdWRpb0RhdGFDYWxsYmFjaywga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9
LAotICAgICAgICB7ICJzZXRBdXRoZW50aWNhdGlvblBhc3N3b3JkIiwgc2V0QXV0aGVudGljYXRp
b25QYXNzd29yZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJv
cGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInNldEF1dGhlbnRpY2F0aW9u
VXNlcm5hbWUiLCBzZXRBdXRoZW50aWNhdGlvblVzZXJuYW1lQ2FsbGJhY2ssIGtKU1Byb3BlcnR5
QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAg
ICAgICAgeyAic2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQiLCBzZXRBdXRob3JBbmRVc2Vy
U3R5bGVzRW5hYmxlZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInNldEF1dG9maWxsZWQi
LCBzZXRBdXRvZmlsbGVkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAic2V0Q2FjaGVNb2Rl
bCIsIHNldENhY2hlTW9kZWxDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJzZXRDYWxsQ2xv
c2VPbldlYlZpZXdzIiwgc2V0Q2FsbENsb3NlT25XZWJWaWV3c0NhbGxiYWNrLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0g
ICAgICAgIHsgInNldENhbk9wZW5XaW5kb3dzIiwgc2V0Q2FuT3BlbldpbmRvd3NDYWxsYmFjaywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB9LAotICAgICAgICB7ICJzZXRDbG9zZVJlbWFpbmluZ1dpbmRvd3NXaGVuQ29tcGxldGUi
LCBzZXRDbG9zZVJlbWFpbmluZ1dpbmRvd3NXaGVuQ29tcGxldGVDYWxsYmFjaywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAot
ICAgICAgICB7ICJzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZSIsIHNldEN1c3RvbVBvbGljeURlbGVn
YXRlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAic2V0RGF0YWJhc2VRdW90YSIsIHNldERh
dGFiYXNlUXVvdGFDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LCAKLSAgICAgICAgeyAic2V0RGVmZXJNYWluUmVz
b3VyY2VEYXRhTG9hZCIsIHNldERlZmVyTWFpblJlc291cmNlRGF0YUxvYWRDYWxsYmFjaywga0pT
UHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0
ZSB9LAotICAgICAgICB7ICJzZXREZWZlcnNMb2FkaW5nIiwgc2V0RGVmZXJzTG9hZGluZ0NhbGxi
YWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlIH0sCi0gICAgICAgIHsgInNldFVzZURlZmVycmVkRnJhbWVMb2FkaW5nIiwgc2V0
VXNlRGVmZXJyZWRGcmFtZUxvYWRpbmdDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJzZXRE
b21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lIiwgc2V0RG9tYWluUmVsYXhhdGlv
bkZvcmJpZGRlbkZvclVSTFNjaGVtZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInNldEZy
YW1lRmxhdHRlbmluZ0VuYWJsZWQiLCBzZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkQ2FsbGJhY2ss
IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUgfSwKLSAgICAgICAgeyAic2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uIiwgc2V0R2VvbG9j
YXRpb25QZXJtaXNzaW9uQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAic2V0SGFuZGxlc0F1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyIsIHNldEhhbmRsZXNBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZXNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJzZXRJY29uRGF0YWJhc2VFbmFibGVkIiwg
c2V0SWNvbkRhdGFiYXNlRW5hYmxlZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInNldEF1
dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkIiwgc2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVu
YWJsZWRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJzZXRNYWluRnJhbWVJc0ZpcnN0UmVz
cG9uZGVyIiwgc2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlckNhbGxiYWNrLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0g
ICAgICAgIHsgInNldE1pbmltdW1UaW1lckludGVydmFsIiwgc2V0TWluaW11bVRpbWVySW50ZXJ2
YWxDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24i
LCBzZXRNb2NrRGV2aWNlT3JpZW50YXRpb25DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVS
ZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJz
ZXRNb2NrR2VvbG9jYXRpb25FcnJvciIsIHNldE1vY2tHZW9sb2NhdGlvbkVycm9yQ2FsbGJhY2ss
IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUgfSwKLSAgICAgICAgeyAic2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24iLCBzZXRNb2Nr
R2VvbG9jYXRpb25Qb3NpdGlvbkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgImFkZE1vY2tT
cGVlY2hJbnB1dFJlc3VsdCIsIGFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdENhbGxiYWNrLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRl
IH0sCi0gICAgICAgIHsgInNldE1vY2tTcGVlY2hJbnB1dER1bXBSZWN0Iiwgc2V0TW9ja1NwZWVj
aElucHV0RHVtcFJlY3RDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtK
U1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJzZXROZXdXaW5kb3dz
Q29weUJhY2tGb3J3YXJkTGlzdCIsIHNldE5ld1dpbmRvd3NDb3B5QmFja0ZvcndhcmRMaXN0Q2Fs
bGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAic2V0UGFnZVZpc2liaWxpdHkiLCBzZXRQYWdlVmlz
aWJpbGl0eUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInNldFBPU0lYTG9jYWxlIiwgc2V0
UE9TSVhMb2NhbGVDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJzZXRQZXJzaXN0ZW50VXNl
clN0eWxlU2hlZXRMb2NhdGlvbiIsIHNldFBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldExvY2F0aW9u
Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAic2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQiLCBz
ZXRQb3B1cEJsb2NraW5nRW5hYmxlZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInNldFBs
dWdpbnNFbmFibGVkIiwgc2V0UGx1Z2luc0VuYWJsZWRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRy
aWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAg
ICB7ICJzZXRQcmludGluZyIsIHNldFByaW50aW5nQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAg
eyAic2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCIsIHNldFByaXZhdGVCcm93c2luZ0VuYWJsZWRD
YWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmli
dXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJzZXRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VF
bmFibGVkIiwgc2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZENhbGxiYWNrLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRl
IH0sCi0gICAgICAgIHsgInNldFNlcmlhbGl6ZUhUVFBMb2FkcyIsIHNldFNlcmlhbGl6ZUhUVFBM
b2Fkc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5h
YmxlZCIsIHNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAg
ICAgIHsgInNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZCIsIHNldFNwYXRpYWxOYXZpZ2F0aW9u
RW5hYmxlZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInNldFN0b3BQcm92aXNpb25hbEZy
YW1lTG9hZHMiLCBzZXRTdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzQ2FsbGJhY2ssIGtKU1Byb3Bl
cnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwK
LSAgICAgICAgeyAic2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzIiwgc2V0VGFiS2V5Q3lj
bGVzVGhyb3VnaEVsZW1lbnRzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkg
fCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAic2V0VXNlRGFz
aGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUiLCBzZXRVc2VEYXNoYm9hcmRDb21wYXRpYmlsaXR5TW9k
ZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRy
aWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZCIs
IHNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJl
YWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInNl
dFVzZXJTdHlsZVNoZWV0TG9jYXRpb24iLCBzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uQ2FsbGJh
Y2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURv
bnREZWxldGUgfSwKLSAgICAgICAgeyAic2V0VmFsdWVGb3JVc2VyIiwgc2V0VmFsdWVGb3JVc2Vy
Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAic2V0Vmlld01vZGVNZWRpYUZlYXR1cmUiLCBz
ZXRWaWV3TW9kZU1lZGlhRmVhdHVyZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInNldFdl
YlZpZXdFZGl0YWJsZSIsIHNldFdlYlZpZXdFZGl0YWJsZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAg
ICAgIHsgInNldFdpbGxTZW5kUmVxdWVzdENsZWFySGVhZGVyIiwgc2V0V2lsbFNlbmRSZXF1ZXN0
Q2xlYXJIZWFkZXJDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJzZXRXaWxsU2VuZFJlcXVl
c3RSZXR1cm5zTnVsbCIsIHNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsQ2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfSwKLSAgICAgICAgeyAic2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0
Iiwgc2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0Q2FsbGJhY2ssIGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUg
fSwKLSAgICAgICAgeyAic2V0V2luZG93SXNLZXkiLCBzZXRXaW5kb3dJc0tleUNhbGxiYWNrLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIH0sCi0gICAgICAgIHsgInNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQiLCBzZXRK
YXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAi
c2V0WFNTQXVkaXRvckVuYWJsZWQiLCBzZXRYU1NBdWRpdG9yRW5hYmxlZENhbGxiYWNrLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRl
IH0sCi0gICAgICAgIHsgInNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkIiwgc2V0
QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRy
aWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAg
ICB7ICJzaG93V2ViSW5zcGVjdG9yIiwgc2hvd1dlYkluc3BlY3RvckNhbGxiYWNrLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0s
Ci0gICAgICAgIHsgInNpbXVsYXRlRGVza3RvcE5vdGlmaWNhdGlvbkNsaWNrIiwgc2ltdWxhdGVE
ZXNrdG9wTm90aWZpY2F0aW9uQ2xpY2tDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJ0ZXN0
T25zY3JlZW4iLCB0ZXN0T25zY3JlZW5DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJ0ZXN0
UmVwYWludCIsIHRlc3RSZXBhaW50Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9u
bHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAid2FpdEZv
clBvbGljeURlbGVnYXRlIiwgd2FpdEZvclBvbGljeURlbGVnYXRlQ2FsbGJhY2ssIGtKU1Byb3Bl
cnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwK
LSAgICAgICAgeyAid2FpdFVudGlsRG9uZSIsIHdhaXRVbnRpbERvbmVDYWxsYmFjaywga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9
LAotICAgICAgICB7ICJ3aW5kb3dDb3VudCIsIHdpbmRvd0NvdW50Q2FsbGJhY2ssIGtKU1Byb3Bl
cnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwK
LSAgICAgICAgeyAiYWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkiLCBhZGRPcmlnaW5BY2Nl
c3NXaGl0ZWxpc3RFbnRyeUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInNldFNjcm9sbGJh
clBvbGljeSIsIHNldFNjcm9sbGJhclBvbGljeUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsg
ImF1dGhlbnRpY2F0ZVNlc3Npb24iLCBhdXRoZW50aWNhdGVTZXNzaW9uQ2FsbGJhY2ssIGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUg
fSwKLSAgICAgICAgeyAiZGVsZXRlQWxsTG9jYWxTdG9yYWdlIiwgZGVsZXRlQWxsTG9jYWxTdG9y
YWdlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAic3luY0xvY2FsU3RvcmFnZSIsIHN5bmNM
b2NhbFN0b3JhZ2VDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LCAgICAgICAgICAgICAgICAKLSAgICAgICAgeyAi
b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyIsIG9ic2VydmVTdG9yYWdlVHJhY2tl
ck5vdGlmaWNhdGlvbnNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtK
U1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LCAgICAgICAgCi0gICAgICAgIHsgImRlbGV0
ZUxvY2FsU3RvcmFnZUZvck9yaWdpbiIsIGRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbkNhbGxi
YWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlIH0sCi0gICAgICAgIHsgImxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbiIs
IGxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAg
IHsgIm9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlIiwgb3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2VDYWxs
YmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRl
RG9udERlbGV0ZSB9LAotICAgICAgICB7ICJzZXRTaG91bGRQYWludEJyb2tlbkltYWdlIiwgc2V0
U2hvdWxkUGFpbnRCcm9rZW5JbWFnZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInNldFRl
eHREaXJlY3Rpb24iLCBzZXRUZXh0RGlyZWN0aW9uQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAg
eyAic2V0U2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQiLCBzZXRTaG91
bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZENhbGxiYWNrLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0g
ICAgICAgIHsgImFkZENocm9tZUlucHV0RmllbGQiLCBhZGRDaHJvbWVJbnB1dEZpZWxkQ2FsbGJh
Y2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURv
bnREZWxldGUgfSwKLSAgICAgICAgeyAicmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCIsIHJlbW92ZUNo
cm9tZUlucHV0RmllbGRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtK
U1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJmb2N1c1dlYlZpZXci
LCBmb2N1c1dlYlZpZXdDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtK
U1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJzZXRCYWNraW5nU2Nh
bGVGYWN0b3IiLCBzZXRCYWNraW5nU2NhbGVGYWN0b3JDYWxsYmFjaywga0pTUHJvcGVydHlBdHRy
aWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAg
ICB7ICJwcmVjaXNlVGltZSIsIHByZWNpc2VUaW1lQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAg
eyAic2V0SGFzQ3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yIiwgc2V0SGFzQ3VzdG9tRnVsbFNjcmVl
bkJlaGF2aW9yQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAic2V0U3RvcmFnZURhdGFiYXNl
SWRsZUludGVydmFsIiwgc2V0U3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsQ2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfSwKLSAgICAgICAgeyAwLCAwLCAwIH0KLSAgICB9OwotCi0gICAgcmV0dXJuIHN0YXRpY0Z1
bmN0aW9uczsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVMb2FkSFRNTFN0
cmluZyhKU1N0cmluZ1JlZiBjb250ZW50LCBKU1N0cmluZ1JlZiBiYXNlVVJMKQotewotICAgIFdv
cmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBMb2FkSFRNTFN0cmluZ0l0ZW0oY29udGVudCwg
YmFzZVVSTCkpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxvYWRBbHRl
cm5hdGVIVE1MU3RyaW5nKEpTU3RyaW5nUmVmIGNvbnRlbnQsIEpTU3RyaW5nUmVmIGJhc2VVUkws
IEpTU3RyaW5nUmVmIHVucmVhY2hhYmxlVVJMKQotewotICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCkt
PnF1ZXVlKG5ldyBMb2FkSFRNTFN0cmluZ0l0ZW0oY29udGVudCwgYmFzZVVSTCwgdW5yZWFjaGFi
bGVVUkwpKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVCYWNrTmF2aWdh
dGlvbihpbnQgaG93RmFyQmFjaykKLXsKLSAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1ZShu
ZXcgQmFja0l0ZW0oaG93RmFyQmFjaykpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpxdWV1ZUZvcndhcmROYXZpZ2F0aW9uKGludCBob3dGYXJGb3J3YXJkKQotewotICAgIFdvcmtR
dWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBGb3J3YXJkSXRlbShob3dGYXJGb3J3YXJkKSk7Ci19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVlTG9hZGluZ1NjcmlwdChKU1N0cmlu
Z1JlZiBzY3JpcHQpCi17Ci0gICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+cXVldWUobmV3IExvYWRp
bmdTY3JpcHRJdGVtKHNjcmlwdCkpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpx
dWV1ZU5vbkxvYWRpbmdTY3JpcHQoSlNTdHJpbmdSZWYgc2NyaXB0KQotewotICAgIFdvcmtRdWV1
ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBOb25Mb2FkaW5nU2NyaXB0SXRlbShzY3JpcHQpKTsKLX0K
LQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVSZWxvYWQoKQotewotICAgIFdvcmtR
dWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBSZWxvYWRJdGVtKTsKLX0KLQotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6Z3JhbnREZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvbihKU1N0cmlu
Z1JlZiBvcmlnaW4pCi17Ci0gICAgbV9kZXNrdG9wTm90aWZpY2F0aW9uQWxsb3dlZE9yaWdpbnMu
cHVzaF9iYWNrKEpTU3RyaW5nUmV0YWluKG9yaWdpbikpOwotfQotCi1ib29sIExheW91dFRlc3RD
b250cm9sbGVyOjpjaGVja0Rlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uKEpTU3RyaW5nUmVm
IG9yaWdpbikKLXsKLSAgICBzdGQ6OnZlY3RvcjxKU1N0cmluZ1JlZj46Oml0ZXJhdG9yIGk7Ci0g
ICAgZm9yIChpID0gbV9kZXNrdG9wTm90aWZpY2F0aW9uQWxsb3dlZE9yaWdpbnMuYmVnaW4oKTsK
LSAgICAgICAgIGkgIT0gbV9kZXNrdG9wTm90aWZpY2F0aW9uQWxsb3dlZE9yaWdpbnMuZW5kKCk7
Ci0gICAgICAgICArK2kpIHsKLSAgICAgICAgaWYgKEpTU3RyaW5nSXNFcXVhbCgqaSwgb3JpZ2lu
KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Omlnbm9yZURlc2t0b3BOb3RpZmljYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdHMoKQotewotICAgIG1fYXJlRGVza3RvcE5vdGlmaWNhdGlvblBlcm1p
c3Npb25SZXF1ZXN0c0lnbm9yZWQgPSBmYWxzZTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6d2FpdFRvRHVtcFdhdGNoZG9nVGltZXJGaXJlZCgpCi17Ci0gICAgY29uc3QgY2hhciog
bWVzc2FnZSA9ICJGQUlMOiBUaW1lZCBvdXQgd2FpdGluZyBmb3Igbm90aWZ5RG9uZSB0byBiZSBj
YWxsZWRcbiI7Ci0gICAgZnByaW50ZihzdGRlcnIsICIlcyIsIG1lc3NhZ2UpOwotICAgIGZwcmlu
dGYoc3Rkb3V0LCAiJXMiLCBtZXNzYWdlKTsKLSAgICBub3RpZnlEb25lKCk7Ci19Ci0KLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbihib29s
IGFsbG93KQotewotICAgIG1faXNHZW9sb2NhdGlvblBlcm1pc3Npb25TZXQgPSB0cnVlOwotICAg
IG1fZ2VvbG9jYXRpb25QZXJtaXNzaW9uID0gYWxsb3c7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldFBPU0lYTG9jYWxlKEpTU3RyaW5nUmVmIGxvY2FsZSkKLXsKLSAgICBjaGFy
IGxvY2FsZUJ1ZlszMl07Ci0gICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhsb2NhbGUsIGxvY2Fs
ZUJ1Ziwgc2l6ZW9mKGxvY2FsZUJ1ZikpOwotICAgIHNldGxvY2FsZShMQ19BTEwsIGxvY2FsZUJ1
Zik7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVSTFRvUmVkaXJlY3Qoc3Rk
OjpzdHJpbmcgb3JpZ2luLCBzdGQ6OnN0cmluZyBkZXN0aW5hdGlvbikKLXsKLSAgICBtX1VSTHNU
b1JlZGlyZWN0W29yaWdpbl0gPSBkZXN0aW5hdGlvbjsKLX0KLQotY29uc3Qgc3RkOjpzdHJpbmcm
IExheW91dFRlc3RDb250cm9sbGVyOjpyZWRpcmVjdGlvbkRlc3RpbmF0aW9uRm9yVVJMKHN0ZDo6
c3RyaW5nIG9yaWdpbikKLXsKLSAgICByZXR1cm4gbV9VUkxzVG9SZWRpcmVjdFtvcmlnaW5dOwot
fQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTaG91bGRQYWludEJyb2tlbkltYWdl
KGJvb2wgc2hvdWxkUGFpbnRCcm9rZW5JbWFnZSkKLXsKLSAgICBtX3Nob3VsZFBhaW50QnJva2Vu
SW1hZ2UgPSBzaG91bGRQYWludEJyb2tlbkltYWdlOwotfQotCi1jb25zdCB1bnNpZ25lZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6bWF4Vmlld1dpZHRoID0gODAwOwotY29uc3QgdW5zaWduZWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6Om1heFZpZXdIZWlnaHQgPSA2MDA7CkluZGV4OiBUb29scy9EdW1w
UmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgJKHJldmlzaW9uIDEyNTMzNSkKKysr
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNDQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0g
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikg
bm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0gCi0jaWZuZGVmIExheW91dFRlc3RD
b250cm9sbGVyX2gKLSNkZWZpbmUgTGF5b3V0VGVzdENvbnRyb2xsZXJfaAotCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWYuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
U1JldGFpblB0ci5oPgotI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxzZXQ+Ci0jaW5jbHVkZSA8
c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgot
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLWNsYXNzIExheW91dFRlc3RDb250cm9sbGVy
IDogcHVibGljIFJlZkNvdW50ZWQ8TGF5b3V0VGVzdENvbnRyb2xsZXI+IHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxMYXlvdXRUZXN0Q29udHJvbGxlcj4gY3JlYXRlKGNvbnN0IHN0
ZDo6c3RyaW5nJiB0ZXN0UGF0aE9yVVJMLCBjb25zdCBzdGQ6OnN0cmluZyYgZXhwZWN0ZWRQaXhl
bEhhc2gpOwotICAgIH5MYXlvdXRUZXN0Q29udHJvbGxlcigpOwotCi0gICAgdm9pZCBtYWtlV2lu
ZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3Qs
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7Ci0KLSAgICB2b2lkIGFkZERpc2FsbG93ZWRVUkwoSlNT
dHJpbmdSZWYgdXJsKTsKLSAgICB2b2lkIGFkZFVSTFRvUmVkaXJlY3Qoc3RkOjpzdHJpbmcgb3Jp
Z2luLCBzdGQ6OnN0cmluZyBkZXN0aW5hdGlvbik7Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIHJl
ZGlyZWN0aW9uRGVzdGluYXRpb25Gb3JVUkwoc3RkOjpzdHJpbmcpOwotICAgIHZvaWQgY2xlYXJB
bGxBcHBsaWNhdGlvbkNhY2hlcygpOwotICAgIHZvaWQgY2xlYXJBbGxEYXRhYmFzZXMoKTsKLSAg
ICB2b2lkIGNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbihKU1N0cmluZ1JlZiBuYW1lKTsK
LSAgICB2b2lkIGNsZWFyQmFja0ZvcndhcmRMaXN0KCk7Ci0gICAgdm9pZCBjbGVhclBlcnNpc3Rl
bnRVc2VyU3R5bGVTaGVldCgpOwotICAgIGJvb2wgY2FsbFNob3VsZENsb3NlT25XZWJWaWV3KCk7
Ci0gICAgSlNTdHJpbmdSZWYgY29weURlY29kZWRIb3N0TmFtZShKU1N0cmluZ1JlZiBuYW1lKTsK
LSAgICBKU1N0cmluZ1JlZiBjb3B5RW5jb2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVmIG5hbWUpOwot
ICAgIHZvaWQgZGVsaXZlcldlYkludGVudChKU1N0cmluZ1JlZiBhY3Rpb24sIEpTU3RyaW5nUmVm
IHR5cGUsIEpTU3RyaW5nUmVmIGRhdGEpOwotICAgIHZvaWQgZGlzYWJsZUltYWdlTG9hZGluZygp
OwotICAgIHZvaWQgZGlzcGF0Y2hQZW5kaW5nTG9hZFJlcXVlc3RzKCk7Ci0gICAgdm9pZCBkaXNw
bGF5KCk7Ci0gICAgdm9pZCBkaXNwbGF5SW52YWxpZGF0ZWRSZWdpb24oKTsKLSAgICB2b2lkIGV4
ZWNDb21tYW5kKEpTU3RyaW5nUmVmIG5hbWUsIEpTU3RyaW5nUmVmIHZhbHVlKTsKLSAgICBib29s
IGZpbmRTdHJpbmcoSlNDb250ZXh0UmVmLCBKU1N0cmluZ1JlZiwgSlNPYmplY3RSZWYgb3B0aW9u
c0FycmF5KTsKLSAgICB2b2lkIGdvQmFjaygpOwotICAgIEpTVmFsdWVSZWYgb3JpZ2luc1dpdGhB
cHBsaWNhdGlvbkNhY2hlKEpTQ29udGV4dFJlZik7Ci0gICAgbG9uZyBsb25nIGFwcGxpY2F0aW9u
Q2FjaGVEaXNrVXNhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgbmFtZSk7Ci0gICAgYm9vbCBpc0Nv
bW1hbmRFbmFibGVkKEpTU3RyaW5nUmVmIG5hbWUpOwotICAgIHZvaWQga2VlcFdlYkhpc3Rvcnko
KTsKLSAgICBKU1ZhbHVlUmVmIGNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhKU0Nv
bnRleHRSZWYsIEpTVmFsdWVSZWYpOwotICAgIHZvaWQgbm90aWZ5RG9uZSgpOwotICAgIGludCBu
dW1iZXJPZlBhZ2VzKGZsb2F0IHBhZ2VXaWR0aEluUGl4ZWxzLCBmbG9hdCBwYWdlSGVpZ2h0SW5Q
aXhlbHMpOwotICAgIGludCBudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1
ZXN0cygpOwotICAgIHZvaWQgb3ZlcnJpZGVQcmVmZXJlbmNlKEpTU3RyaW5nUmVmIGtleSwgSlNT
dHJpbmdSZWYgdmFsdWUpOwotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBwYWdlUHJvcGVy
dHkoY29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBpbnQgcGFnZU51bWJlcikgY29uc3Q7Ci0gICAg
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKGludCBw
YWdlTnVtYmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBtYXJnaW5Ub3AsIGludCBtYXJn
aW5SaWdodCwgaW50IG1hcmdpbkJvdHRvbSwgaW50IG1hcmdpbkxlZnQpIGNvbnN0OwotICAgIEpT
U3RyaW5nUmVmIHBhdGhUb0xvY2FsUmVzb3VyY2UoSlNDb250ZXh0UmVmLCBKU1N0cmluZ1JlZiB1
cmwpOwotICAgIHZvaWQgcXVldWVCYWNrTmF2aWdhdGlvbihpbnQgaG93RmFyQmFja3dhcmQpOwot
ICAgIHZvaWQgcXVldWVGb3J3YXJkTmF2aWdhdGlvbihpbnQgaG93RmFyRm9yd2FyZCk7Ci0gICAg
dm9pZCBxdWV1ZUxvYWQoSlNTdHJpbmdSZWYgdXJsLCBKU1N0cmluZ1JlZiB0YXJnZXQpOwotICAg
IHZvaWQgcXVldWVMb2FkSFRNTFN0cmluZyhKU1N0cmluZ1JlZiBjb250ZW50LCBKU1N0cmluZ1Jl
ZiBiYXNlVVJMKTsKLSAgICB2b2lkIHF1ZXVlTG9hZEFsdGVybmF0ZUhUTUxTdHJpbmcoSlNTdHJp
bmdSZWYgY29udGVudCwgSlNTdHJpbmdSZWYgYmFzZVVSTCwgSlNTdHJpbmdSZWYgdW5yZWFjaGFi
bGVVUkwpOwotICAgIHZvaWQgcXVldWVMb2FkaW5nU2NyaXB0KEpTU3RyaW5nUmVmIHNjcmlwdCk7
Ci0gICAgdm9pZCBxdWV1ZU5vbkxvYWRpbmdTY3JpcHQoSlNTdHJpbmdSZWYgc2NyaXB0KTsKLSAg
ICB2b2lkIHF1ZXVlUmVsb2FkKCk7Ci0gICAgdm9pZCByZW1vdmVBbGxWaXNpdGVkTGlua3MoKTsK
LSAgICB2b2lkIHNlbmRXZWJJbnRlbnRSZXNwb25zZShKU1N0cmluZ1JlZiByZXNwb25zZSk7Ci0g
ICAgdm9pZCBzZXRBY2NlcHRzRWRpdGluZyhib29sIGFjY2VwdHNFZGl0aW5nKTsKLSAgICB2b2lk
IHNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wpOwotICAgIHZvaWQgc2V0
QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wpOwotICAgIHZvaWQgc2V0QXBwQ2FjaGVN
YXhpbXVtU2l6ZSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpOwotICAgIHZvaWQgc2V0QXBwbGlj
YXRpb25DYWNoZU9yaWdpblF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSk7Ci0gICAgdm9p
ZCBzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChib29sKTsKLSAgICB2b2lkIHNldEF1dG9m
aWxsZWQoSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmIG5vZGVPYmplY3QsIGJvb2wgYXV0b2ZpbGxl
ZCk7Ci0gICAgdm9pZCBzZXRDYWNoZU1vZGVsKGludCk7Ci0gICAgdm9pZCBzZXRDdXN0b21Qb2xp
Y3lEZWxlZ2F0ZShib29sIHNldERlbGVnYXRlLCBib29sIHBlcm1pc3NpdmUpOwotICAgIHZvaWQg
c2V0RGF0YWJhc2VRdW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpOwotICAgIHZvaWQgc2V0
RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShib29sIGZvcmJpZGRlbiwgSlNT
dHJpbmdSZWYgc2NoZW1lKTsKLSAgICB2b2lkIHNldERlZmVyc0xvYWRpbmcoYm9vbCk7Ci0gICAg
dm9pZCBzZXRJY29uRGF0YWJhc2VFbmFibGVkKGJvb2wgaWNvbkRhdGFiYXNlRW5hYmxlZCk7Ci0g
ICAgdm9pZCBzZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKGJvb2wgZmxhZyk7Ci0gICAg
dm9pZCBzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZChib29sIGZsYWcpOwotICAgIHZv
aWQgc2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlcihib29sIGZsYWcpOwotICAgIHZvaWQgc2V0
TW9ja0RldmljZU9yaWVudGF0aW9uKGJvb2wgY2FuUHJvdmlkZUFscGhhLCBkb3VibGUgYWxwaGEs
IGJvb2wgY2FuUHJvdmlkZUJldGEsIGRvdWJsZSBiZXRhLCBib29sIGNhblByb3ZpZGVHYW1tYSwg
ZG91YmxlIGdhbW1hKTsKLSAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvbkVycm9yKGludCBjb2Rl
LCBKU1N0cmluZ1JlZiBtZXNzYWdlKTsKLSAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0
aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5KTsK
LSAgICB2b2lkIGFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdChKU1N0cmluZ1JlZiByZXN1bHQsIGRv
dWJsZSBjb25maWRlbmNlLCBKU1N0cmluZ1JlZiBsYW5ndWFnZSk7Ci0gICAgdm9pZCBzZXRNb2Nr
U3BlZWNoSW5wdXREdW1wUmVjdChib29sIGZsYWcpOwotICAgIHZvaWQgc2V0UGVyc2lzdGVudFVz
ZXJTdHlsZVNoZWV0TG9jYXRpb24oSlNTdHJpbmdSZWYgcGF0aCk7Ci0gICAgdm9pZCBzZXRQbHVn
aW5zRW5hYmxlZChib29sIGZsYWcpOwotICAgIHZvaWQgc2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQo
Ym9vbCBmbGFnKTsKLSAgICB2b2lkIHNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoYm9vbCBmbGFn
KTsKLSAgICB2b2lkIHNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoYm9vbCBmbGFn
KTsKLSAgICB2b2lkIHNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChib29sIGZsYWcpOwotICAg
IHZvaWQgc2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKGJvb2wgY3ljbGVzKTsKLSAgICB2
b2lkIHNldFVzZURhc2hib2FyZENvbXBhdGliaWxpdHlNb2RlKGJvb2wgZmxhZyk7Ci0gICAgdm9p
ZCBzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoYm9vbCBmbGFnKTsKLSAgICB2b2lkIHNldFVzZXJT
dHlsZVNoZWV0TG9jYXRpb24oSlNTdHJpbmdSZWYgcGF0aCk7Ci0gICAgdm9pZCBzZXRWYWx1ZUZv
clVzZXIoSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmIG5vZGVPYmplY3QsIEpTU3RyaW5nUmVmIHZh
bHVlKTsKLSAgICB2b2lkIHNldFZpZXdNb2RlTWVkaWFGZWF0dXJlKEpTU3RyaW5nUmVmIG1vZGUp
OwotICAgIHZvaWQgc2V0WFNTQXVkaXRvckVuYWJsZWQoYm9vbCBmbGFnKTsKLSAgICB2b2lkIHNl
dEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoYm9vbCBlbmFibGUpOwotICAgIHZvaWQgc2V0U3BhdGlh
bE5hdmlnYXRpb25FbmFibGVkKGJvb2wgZW5hYmxlKTsKLSAgICB2b2lkIHNldFNjcm9sbGJhclBv
bGljeShKU1N0cmluZ1JlZiBvcmllbnRhdGlvbiwgSlNTdHJpbmdSZWYgcG9saWN5KTsKLSAgICB2
b2lkIHN0YXJ0U3BlZWNoSW5wdXQoSlNDb250ZXh0UmVmIGlucHV0RWxlbWVudCk7Ci0gICAgdm9p
ZCBzZXRQYWdlVmlzaWJpbGl0eShjb25zdCBjaGFyKik7Ci0gICAgdm9pZCByZXNldFBhZ2VWaXNp
YmlsaXR5KCk7Ci0KLSAgICB2b2lkIHdhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgpOwotICAgIHNpemVf
dCB3ZWJIaXN0b3J5SXRlbUNvdW50KCk7Ci0gICAgdW5zaWduZWQgd29ya2VyVGhyZWFkQ291bnQo
KSBjb25zdDsKLSAgICBpbnQgd2luZG93Q291bnQoKTsKLSAgICAKLSNpZiBQTEFURk9STShNQUMp
IHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKQotICAgIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBwbGF0Zm9ybU5hbWUoKSBjb25zdDsKLSNlbmRpZgotCi0gICAgdm9pZCBncmFudERl
c2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uKEpTU3RyaW5nUmVmIG9yaWdpbik7Ci0gICAgYm9v
bCBjaGVja0Rlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uKEpTU3RyaW5nUmVmIG9yaWdpbik7
Ci0gICAgdm9pZCBpZ25vcmVEZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKCk7
Ci0gICAgYm9vbCBhcmVEZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzSWdub3Jl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXJlRGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1
ZXN0c0lnbm9yZWQ7IH0KLSAgICB2b2lkIHNpbXVsYXRlRGVza3RvcE5vdGlmaWNhdGlvbkNsaWNr
KEpTU3RyaW5nUmVmIHRpdGxlKTsKLQotICAgIGJvb2wgZWxlbWVudERvZXNBdXRvQ29tcGxldGVG
b3JFbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIGlkKTsKLQotICAgIGJvb2wgZHVtcEFzQXVkaW8o
KSBjb25zdCB7IHJldHVybiBtX2R1bXBBc0F1ZGlvOyB9Ci0gICAgdm9pZCBzZXREdW1wQXNBdWRp
byhib29sIGR1bXBBc0F1ZGlvKSB7IG1fZHVtcEFzQXVkaW8gPSBkdW1wQXNBdWRpbzsgfQotICAg
IAotICAgIGJvb2wgZHVtcEFzUERGKCkgY29uc3QgeyByZXR1cm4gbV9kdW1wQXNQREY7IH0KLSAg
ICB2b2lkIHNldER1bXBBc1BERihib29sIGR1bXBBc1BERikgeyBtX2R1bXBBc1BERiA9IGR1bXBB
c1BERjsgfQotCi0gICAgYm9vbCBkdW1wQXNUZXh0KCkgY29uc3QgeyByZXR1cm4gbV9kdW1wQXNU
ZXh0OyB9Ci0gICAgdm9pZCBzZXREdW1wQXNUZXh0KGJvb2wgZHVtcEFzVGV4dCkgeyBtX2R1bXBB
c1RleHQgPSBkdW1wQXNUZXh0OyB9Ci0KLSAgICBib29sIGdlbmVyYXRlUGl4ZWxSZXN1bHRzKCkg
Y29uc3QgeyByZXR1cm4gbV9nZW5lcmF0ZVBpeGVsUmVzdWx0czsgfQotICAgIHZvaWQgc2V0R2Vu
ZXJhdGVQaXhlbFJlc3VsdHMoYm9vbCBnZW5lcmF0ZVBpeGVsUmVzdWx0cykgeyBtX2dlbmVyYXRl
UGl4ZWxSZXN1bHRzID0gZ2VuZXJhdGVQaXhlbFJlc3VsdHM7IH0KLQotICAgIGJvb2wgZGlzYWxs
b3dJbmNyZWFzZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlz
YWxsb3dJbmNyZWFzZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90YTsgfQotICAgIHZvaWQgc2V0RGlz
YWxsb3dJbmNyZWFzZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90YShib29sIGRpc2FsbG93SW5jcmVh
c2UpIHsgbV9kaXNhbGxvd0luY3JlYXNlRm9yQXBwbGljYXRpb25DYWNoZVF1b3RhID0gZGlzYWxs
b3dJbmNyZWFzZTsgfQotCi0gICAgYm9vbCBkdW1wQXBwbGljYXRpb25DYWNoZURlbGVnYXRlQ2Fs
bGJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9kdW1wQXBwbGljYXRpb25DYWNoZURlbGVnYXRlQ2Fs
bGJhY2tzOyB9Ci0gICAgdm9pZCBzZXREdW1wQXBwbGljYXRpb25DYWNoZURlbGVnYXRlQ2FsbGJh
Y2tzKGJvb2wgZHVtcENhbGxiYWNrcykgeyBtX2R1bXBBcHBsaWNhdGlvbkNhY2hlRGVsZWdhdGVD
YWxsYmFja3MgPSBkdW1wQ2FsbGJhY2tzOyB9Ci0KLSAgICBib29sIGR1bXBCYWNrRm9yd2FyZExp
c3QoKSBjb25zdCB7IHJldHVybiBtX2R1bXBCYWNrRm9yd2FyZExpc3Q7IH0KLSAgICB2b2lkIHNl
dER1bXBCYWNrRm9yd2FyZExpc3QoYm9vbCBkdW1wQmFja0ZvcndhcmRMaXN0KSB7IG1fZHVtcEJh
Y2tGb3J3YXJkTGlzdCA9IGR1bXBCYWNrRm9yd2FyZExpc3Q7IH0KLQotICAgIGJvb2wgZHVtcENo
aWxkRnJhbWVTY3JvbGxQb3NpdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2R1bXBDaGlsZEZyYW1l
U2Nyb2xsUG9zaXRpb25zOyB9Ci0gICAgdm9pZCBzZXREdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0
aW9ucyhib29sIGR1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zKSB7IG1fZHVtcENoaWxkRnJh
bWVTY3JvbGxQb3NpdGlvbnMgPSBkdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9uczsgfQotCi0g
ICAgYm9vbCBkdW1wQ2hpbGRGcmFtZXNBc1RleHQoKSBjb25zdCB7IHJldHVybiBtX2R1bXBDaGls
ZEZyYW1lc0FzVGV4dDsgfQotICAgIHZvaWQgc2V0RHVtcENoaWxkRnJhbWVzQXNUZXh0KGJvb2wg
ZHVtcENoaWxkRnJhbWVzQXNUZXh0KSB7IG1fZHVtcENoaWxkRnJhbWVzQXNUZXh0ID0gZHVtcENo
aWxkRnJhbWVzQXNUZXh0OyB9Ci0KLSAgICBib29sIGR1bXBEYXRhYmFzZUNhbGxiYWNrcygpIGNv
bnN0IHsgcmV0dXJuIG1fZHVtcERhdGFiYXNlQ2FsbGJhY2tzOyB9Ci0gICAgdm9pZCBzZXREdW1w
RGF0YWJhc2VDYWxsYmFja3MoYm9vbCBkdW1wRGF0YWJhc2VDYWxsYmFja3MpIHsgbV9kdW1wRGF0
YWJhc2VDYWxsYmFja3MgPSBkdW1wRGF0YWJhc2VDYWxsYmFja3M7IH0KLQotICAgIGJvb2wgZHVt
cERPTUFzV2ViQXJjaGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcERPTUFzV2ViQXJjaGl2ZTsg
fQotICAgIHZvaWQgc2V0RHVtcERPTUFzV2ViQXJjaGl2ZShib29sIGR1bXBET01Bc1dlYkFyY2hp
dmUpIHsgbV9kdW1wRE9NQXNXZWJBcmNoaXZlID0gZHVtcERPTUFzV2ViQXJjaGl2ZTsgfQotCi0g
ICAgYm9vbCBkdW1wRWRpdGluZ0NhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcEVkaXRp
bmdDYWxsYmFja3M7IH0KLSAgICB2b2lkIHNldER1bXBFZGl0aW5nQ2FsbGJhY2tzKGJvb2wgZHVt
cEVkaXRpbmdDYWxsYmFja3MpIHsgbV9kdW1wRWRpdGluZ0NhbGxiYWNrcyA9IGR1bXBFZGl0aW5n
Q2FsbGJhY2tzOyB9Ci0KLSAgICBib29sIGR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSBjb25zdCB7
IHJldHVybiBtX2R1bXBGcmFtZUxvYWRDYWxsYmFja3M7IH0KLSAgICB2b2lkIHNldER1bXBGcmFt
ZUxvYWRDYWxsYmFja3MoYm9vbCBkdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKSB7IG1fZHVtcEZyYW1l
TG9hZENhbGxiYWNrcyA9IGR1bXBGcmFtZUxvYWRDYWxsYmFja3M7IH0KLQotICAgIGJvb2wgZHVt
cFByb2dyZXNzRmluaXNoZWRDYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcFByb2dyZXNz
RmluaXNoZWRDYWxsYmFjazsgfQotICAgIHZvaWQgc2V0RHVtcFByb2dyZXNzRmluaXNoZWRDYWxs
YmFjayhib29sIGR1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2spIHsgbV9kdW1wUHJvZ3Jlc3NG
aW5pc2hlZENhbGxiYWNrID0gZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjazsgfQotICAgIAot
ICAgIGJvb2wgZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MoKSBjb25zdCB7IHJl
dHVybiBtX2R1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzOyB9Ci0gICAgdm9pZCBz
ZXREdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrcyhib29sIGR1bXBVc2VyR2VzdHVy
ZUluRnJhbWVMb2FkQ2FsbGJhY2tzKSB7IG1fZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxs
YmFja3MgPSBkdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrczsgfSAgICAKLQotICAg
IGJvb2wgZHVtcEhpc3RvcnlEZWxlZ2F0ZUNhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fZHVt
cEhpc3RvcnlEZWxlZ2F0ZUNhbGxiYWNrczsgfQotICAgIHZvaWQgc2V0RHVtcEhpc3RvcnlEZWxl
Z2F0ZUNhbGxiYWNrcyhib29sIGR1bXBIaXN0b3J5RGVsZWdhdGVDYWxsYmFja3MpIHsgbV9kdW1w
SGlzdG9yeURlbGVnYXRlQ2FsbGJhY2tzID0gZHVtcEhpc3RvcnlEZWxlZ2F0ZUNhbGxiYWNrczsg
fQotICAgIAotICAgIGJvb2wgZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpIGNvbnN0IHsgcmV0
dXJuIG1fZHVtcFJlc291cmNlTG9hZENhbGxiYWNrczsgfQotICAgIHZvaWQgc2V0RHVtcFJlc291
cmNlTG9hZENhbGxiYWNrcyhib29sIGR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MpIHsgbV9kdW1w
UmVzb3VyY2VMb2FkQ2FsbGJhY2tzID0gZHVtcFJlc291cmNlTG9hZENhbGxiYWNrczsgfQotICAg
IAotICAgIGJvb2wgZHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXMoKSBjb25zdCB7IHJldHVy
biBtX2R1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzOyB9Ci0gICAgdm9pZCBzZXREdW1wUmVz
b3VyY2VSZXNwb25zZU1JTUVUeXBlcyhib29sIGR1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVz
KSB7IG1fZHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXMgPSBkdW1wUmVzb3VyY2VSZXNwb25z
ZU1JTUVUeXBlczsgfQotCi0gICAgYm9vbCBkdW1wU2VsZWN0aW9uUmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fZHVtcFNlbGVjdGlvblJlY3Q7IH0KLSAgICB2b2lkIHNldER1bXBTZWxlY3Rpb25SZWN0
KGJvb2wgZHVtcFNlbGVjdGlvblJlY3QpIHsgbV9kdW1wU2VsZWN0aW9uUmVjdCA9IGR1bXBTZWxl
Y3Rpb25SZWN0OyB9Ci0KLSAgICBib29sIGR1bXBTb3VyY2VBc1dlYkFyY2hpdmUoKSBjb25zdCB7
IHJldHVybiBtX2R1bXBTb3VyY2VBc1dlYkFyY2hpdmU7IH0KLSAgICB2b2lkIHNldER1bXBTb3Vy
Y2VBc1dlYkFyY2hpdmUoYm9vbCBkdW1wU291cmNlQXNXZWJBcmNoaXZlKSB7IG1fZHVtcFNvdXJj
ZUFzV2ViQXJjaGl2ZSA9IGR1bXBTb3VyY2VBc1dlYkFyY2hpdmU7IH0KLQotICAgIGJvb2wgZHVt
cFN0YXR1c0NhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcFN0YXR1c0NhbGxiYWNrczsg
fQotICAgIHZvaWQgc2V0RHVtcFN0YXR1c0NhbGxiYWNrcyhib29sIGR1bXBTdGF0dXNDYWxsYmFj
a3MpIHsgbV9kdW1wU3RhdHVzQ2FsbGJhY2tzID0gZHVtcFN0YXR1c0NhbGxiYWNrczsgfQotCi0g
ICAgYm9vbCBkdW1wVGl0bGVDaGFuZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9kdW1wVGl0bGVDaGFu
Z2VzOyB9Ci0gICAgdm9pZCBzZXREdW1wVGl0bGVDaGFuZ2VzKGJvb2wgZHVtcFRpdGxlQ2hhbmdl
cykgeyBtX2R1bXBUaXRsZUNoYW5nZXMgPSBkdW1wVGl0bGVDaGFuZ2VzOyB9Ci0KLSAgICBib29s
IGR1bXBJY29uQ2hhbmdlcygpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcEljb25DaGFuZ2VzOyB9Ci0g
ICAgdm9pZCBzZXREdW1wSWNvbkNoYW5nZXMoYm9vbCBkdW1wSWNvbkNoYW5nZXMpIHsgbV9kdW1w
SWNvbkNoYW5nZXMgPSBkdW1wSWNvbkNoYW5nZXM7IH0KLQotICAgIGJvb2wgZHVtcFZpc2l0ZWRM
aW5rc0NhbGxiYWNrKCkgY29uc3QgeyByZXR1cm4gbV9kdW1wVmlzaXRlZExpbmtzQ2FsbGJhY2s7
IH0KLSAgICB2b2lkIHNldER1bXBWaXNpdGVkTGlua3NDYWxsYmFjayhib29sIGR1bXBWaXNpdGVk
TGlua3NDYWxsYmFjaykgeyBtX2R1bXBWaXNpdGVkTGlua3NDYWxsYmFjayA9IGR1bXBWaXNpdGVk
TGlua3NDYWxsYmFjazsgfQotICAgIAotICAgIGJvb2wgZHVtcFdpbGxDYWNoZVJlc3BvbnNlKCkg
Y29uc3QgeyByZXR1cm4gbV9kdW1wV2lsbENhY2hlUmVzcG9uc2U7IH0KLSAgICB2b2lkIHNldER1
bXBXaWxsQ2FjaGVSZXNwb25zZShib29sIGR1bXBXaWxsQ2FjaGVSZXNwb25zZSkgeyBtX2R1bXBX
aWxsQ2FjaGVSZXNwb25zZSA9IGR1bXBXaWxsQ2FjaGVSZXNwb25zZTsgfQotICAgIAotICAgIGJv
b2wgY2FsbENsb3NlT25XZWJWaWV3cygpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbENsb3NlT25XZWJW
aWV3czsgfQotICAgIHZvaWQgc2V0Q2FsbENsb3NlT25XZWJWaWV3cyhib29sIGNhbGxDbG9zZU9u
V2ViVmlld3MpIHsgbV9jYWxsQ2xvc2VPbldlYlZpZXdzID0gY2FsbENsb3NlT25XZWJWaWV3czsg
fQotCi0gICAgYm9vbCBjYW5PcGVuV2luZG93cygpIGNvbnN0IHsgcmV0dXJuIG1fY2FuT3Blbldp
bmRvd3M7IH0KLSAgICB2b2lkIHNldENhbk9wZW5XaW5kb3dzKGJvb2wgY2FuT3BlbldpbmRvd3Mp
IHsgbV9jYW5PcGVuV2luZG93cyA9IGNhbk9wZW5XaW5kb3dzOyB9Ci0KLSAgICBib29sIGNsb3Nl
UmVtYWluaW5nV2luZG93c1doZW5Db21wbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2xvc2VSZW1h
aW5pbmdXaW5kb3dzV2hlbkNvbXBsZXRlOyB9Ci0gICAgdm9pZCBzZXRDbG9zZVJlbWFpbmluZ1dp
bmRvd3NXaGVuQ29tcGxldGUoYm9vbCBjbG9zZVJlbWFpbmluZ1dpbmRvd3NXaGVuQ29tcGxldGUp
IHsgbV9jbG9zZVJlbWFpbmluZ1dpbmRvd3NXaGVuQ29tcGxldGUgPSBjbG9zZVJlbWFpbmluZ1dp
bmRvd3NXaGVuQ29tcGxldGU7IH0KLSAgICAKLSAgICBib29sIG5ld1dpbmRvd3NDb3B5QmFja0Zv
cndhcmRMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9uZXdXaW5kb3dzQ29weUJhY2tGb3J3YXJkTGlz
dDsgfQotICAgIHZvaWQgc2V0TmV3V2luZG93c0NvcHlCYWNrRm9yd2FyZExpc3QoYm9vbCBuZXdX
aW5kb3dzQ29weUJhY2tGb3J3YXJkTGlzdCkgeyBtX25ld1dpbmRvd3NDb3B5QmFja0ZvcndhcmRM
aXN0ID0gbmV3V2luZG93c0NvcHlCYWNrRm9yd2FyZExpc3Q7IH0KLSAgICAKLSAgICBib29sIHN0
b3BQcm92aXNpb25hbEZyYW1lTG9hZHMoKSBjb25zdCB7IHJldHVybiBtX3N0b3BQcm92aXNpb25h
bEZyYW1lTG9hZHM7IH0KLSAgICB2b2lkIHNldFN0b3BQcm92aXNpb25hbEZyYW1lTG9hZHMoYm9v
bCBzdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzKSB7IG1fc3RvcFByb3Zpc2lvbmFsRnJhbWVMb2Fk
cyA9IHN0b3BQcm92aXNpb25hbEZyYW1lTG9hZHM7IH0KLQotICAgIGJvb2wgdGVzdE9uc2NyZWVu
KCkgY29uc3QgeyByZXR1cm4gbV90ZXN0T25zY3JlZW47IH0KLSAgICB2b2lkIHNldFRlc3RPbnNj
cmVlbihib29sIHRlc3RPbnNjcmVlbikgeyBtX3Rlc3RPbnNjcmVlbiA9IHRlc3RPbnNjcmVlbjsg
fQotCi0gICAgYm9vbCB0ZXN0UmVwYWludCgpIGNvbnN0IHsgcmV0dXJuIG1fdGVzdFJlcGFpbnQ7
IH0KLSAgICB2b2lkIHNldFRlc3RSZXBhaW50KGJvb2wgdGVzdFJlcGFpbnQpIHsgbV90ZXN0UmVw
YWludCA9IHRlc3RSZXBhaW50OyB9Ci0KLSAgICBib29sIHRlc3RSZXBhaW50U3dlZXBIb3Jpem9u
dGFsbHkoKSBjb25zdCB7IHJldHVybiBtX3Rlc3RSZXBhaW50U3dlZXBIb3Jpem9udGFsbHk7IH0K
LSAgICB2b2lkIHNldFRlc3RSZXBhaW50U3dlZXBIb3Jpem9udGFsbHkoYm9vbCB0ZXN0UmVwYWlu
dFN3ZWVwSG9yaXpvbnRhbGx5KSB7IG1fdGVzdFJlcGFpbnRTd2VlcEhvcml6b250YWxseSA9IHRl
c3RSZXBhaW50U3dlZXBIb3Jpem9udGFsbHk7IH0KLQotICAgIGJvb2wgd2FpdFRvRHVtcCgpIGNv
bnN0IHsgcmV0dXJuIG1fd2FpdFRvRHVtcDsgfQotICAgIHZvaWQgc2V0V2FpdFRvRHVtcChib29s
IHdhaXRUb0R1bXApOwotICAgIHZvaWQgd2FpdFRvRHVtcFdhdGNoZG9nVGltZXJGaXJlZCgpOwot
Ci0gICAgY29uc3Qgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiB3aWxsU2VuZFJlcXVlc3RDbGVhckhl
YWRlcnMoKSBjb25zdCB7IHJldHVybiBtX3dpbGxTZW5kUmVxdWVzdENsZWFySGVhZGVyczsgfQot
ICAgIHZvaWQgc2V0V2lsbFNlbmRSZXF1ZXN0Q2xlYXJIZWFkZXIoc3RkOjpzdHJpbmcgaGVhZGVy
KSB7IG1fd2lsbFNlbmRSZXF1ZXN0Q2xlYXJIZWFkZXJzLmluc2VydChoZWFkZXIpOyB9Ci0KLSAg
ICBib29sIHdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV93aWxs
U2VuZFJlcXVlc3RSZXR1cm5zTnVsbDsgfQotICAgIHZvaWQgc2V0V2lsbFNlbmRSZXF1ZXN0UmV0
dXJuc051bGwoYm9vbCByZXR1cm5zTnVsbCkgeyBtX3dpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxs
ID0gcmV0dXJuc051bGw7IH0KLQotICAgIGJvb2wgd2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxP
blJlZGlyZWN0KCkgY29uc3QgeyByZXR1cm4gbV93aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9u
UmVkaXJlY3Q7IH0KLSAgICB2b2lkIHNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRp
cmVjdChib29sIHJldHVybnNOdWxsKSB7IG1fd2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJl
ZGlyZWN0ID0gcmV0dXJuc051bGw7IH0KLQotICAgIGJvb2wgd2luZG93SXNLZXkoKSBjb25zdCB7
IHJldHVybiBtX3dpbmRvd0lzS2V5OyB9Ci0gICAgdm9pZCBzZXRXaW5kb3dJc0tleShib29sIHdp
bmRvd0lzS2V5KTsKLQotICAgIGJvb2wgYWx3YXlzQWNjZXB0Q29va2llcygpIGNvbnN0IHsgcmV0
dXJuIG1fYWx3YXlzQWNjZXB0Q29va2llczsgfQotICAgIHZvaWQgc2V0QWx3YXlzQWNjZXB0Q29v
a2llcyhib29sIGFsd2F5c0FjY2VwdENvb2tpZXMpOwotICAgIAotICAgIGJvb2wgaGFuZGxlc0F1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcygpIGNvbnN0IHsgcmV0dXJuIG1faGFuZGxlc0F1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlczsgfQotICAgIHZvaWQgc2V0SGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlcyhib29sIGhhbmRsZXNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMpIHsgbV9oYW5kbGVz
QXV0aGVudGljYXRpb25DaGFsbGVuZ2VzID0gaGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
czsgfQotICAgIAotICAgIGJvb2wgaXNQcmludGluZygpIGNvbnN0IHsgcmV0dXJuIG1faXNQcmlu
dGluZzsgfQotICAgIHZvaWQgc2V0SXNQcmludGluZyhib29sIGlzUHJpbnRpbmcpIHsgbV9pc1By
aW50aW5nID0gaXNQcmludGluZzsgfQotCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIGF1dGhlbnRp
Y2F0aW9uVXNlcm5hbWUoKSBjb25zdCB7IHJldHVybiBtX2F1dGhlbnRpY2F0aW9uVXNlcm5hbWU7
IH0KLSAgICB2b2lkIHNldEF1dGhlbnRpY2F0aW9uVXNlcm5hbWUoc3RkOjpzdHJpbmcgdXNlcm5h
bWUpIHsgbV9hdXRoZW50aWNhdGlvblVzZXJuYW1lID0gdXNlcm5hbWU7IH0KLSAgICAKLSAgICBj
b25zdCBzdGQ6OnN0cmluZyYgYXV0aGVudGljYXRpb25QYXNzd29yZCgpIGNvbnN0IHsgcmV0dXJu
IG1fYXV0aGVudGljYXRpb25QYXNzd29yZDsgfQotICAgIHZvaWQgc2V0QXV0aGVudGljYXRpb25Q
YXNzd29yZChzdGQ6OnN0cmluZyBwYXNzd29yZCkgeyBtX2F1dGhlbnRpY2F0aW9uUGFzc3dvcmQg
PSBwYXNzd29yZDsgfQotCi0gICAgYm9vbCBnbG9iYWxGbGFnKCkgY29uc3QgeyByZXR1cm4gbV9n
bG9iYWxGbGFnOyB9Ci0gICAgdm9pZCBzZXRHbG9iYWxGbGFnKGJvb2wgZ2xvYmFsRmxhZykgeyBt
X2dsb2JhbEZsYWcgPSBnbG9iYWxGbGFnOyB9Ci0gICAgCi0gICAgYm9vbCBkZWZlck1haW5SZXNv
dXJjZURhdGFMb2FkKCkgY29uc3QgeyByZXR1cm4gbV9kZWZlck1haW5SZXNvdXJjZURhdGFMb2Fk
OyB9Ci0gICAgdm9pZCBzZXREZWZlck1haW5SZXNvdXJjZURhdGFMb2FkKGJvb2wgZmxhZykgeyBt
X2RlZmVyTWFpblJlc291cmNlRGF0YUxvYWQgPSBmbGFnOyB9Ci0KLSAgICBib29sIHVzZURlZmVy
cmVkRnJhbWVMb2FkaW5nKCkgY29uc3QgeyByZXR1cm4gbV91c2VEZWZlcnJlZEZyYW1lTG9hZGlu
ZzsgfQotICAgIHZvaWQgc2V0VXNlRGVmZXJyZWRGcmFtZUxvYWRpbmcoYm9vbCBmbGFnKSB7IG1f
dXNlRGVmZXJyZWRGcmFtZUxvYWRpbmcgPSBmbGFnOyB9Ci0KLSAgICBjb25zdCBzdGQ6OnN0cmlu
ZyYgdGVzdFBhdGhPclVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fdGVzdFBhdGhPclVSTDsgfQotICAg
IGNvbnN0IHN0ZDo6c3RyaW5nJiBleHBlY3RlZFBpeGVsSGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZXhwZWN0ZWRQaXhlbEhhc2g7IH0KLQotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBlbmNvZGVkQXVk
aW9EYXRhKCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGVkQXVkaW9EYXRhOyB9Ci0gICAgdm9pZCBz
ZXRFbmNvZGVkQXVkaW9EYXRhKGNvbnN0IHN0ZDo6c3RyaW5nJiBlbmNvZGVkQXVkaW9EYXRhKSB7
IG1fZW5jb2RlZEF1ZGlvRGF0YSA9IGVuY29kZWRBdWRpb0RhdGE7IH0KLSAgICAKLSAgICBib29s
IHBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIGFuaW1hdGlv
bk5hbWUsIGRvdWJsZSB0aW1lLCBKU1N0cmluZ1JlZiBlbGVtZW50SWQpOwotICAgIGJvb2wgcGF1
c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIHByb3BlcnR5TmFt
ZSwgZG91YmxlIHRpbWUsIEpTU3RyaW5nUmVmIGVsZW1lbnRJZCk7Ci0gICAgdW5zaWduZWQgbnVt
YmVyT2ZBY3RpdmVBbmltYXRpb25zKCkgY29uc3Q7Ci0KLSAgICB2b2lkIGFkZE9yaWdpbkFjY2Vz
c1doaXRlbGlzdEVudHJ5KEpTU3RyaW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgZGVz
dGluYXRpb25Qcm90b2NvbCwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93
RGVzdGluYXRpb25TdWJkb21haW5zKTsKLSAgICB2b2lkIHJlbW92ZU9yaWdpbkFjY2Vzc1doaXRl
bGlzdEVudHJ5KEpTU3RyaW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgZGVzdGluYXRp
b25Qcm90b2NvbCwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGlu
YXRpb25TdWJkb21haW5zKTsKLQotICAgIHZvaWQgYWRkVXNlclNjcmlwdChKU1N0cmluZ1JlZiBz
b3VyY2UsIGJvb2wgcnVuQXRTdGFydCwgYm9vbCBhbGxGcmFtZXMpOwotICAgIHZvaWQgYWRkVXNl
clN0eWxlU2hlZXQoSlNTdHJpbmdSZWYgc291cmNlLCBib29sIGFsbEZyYW1lcyk7Ci0KLSAgICB2
b2lkIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sIGFsbG93KTsKLSAgICBib29sIGlzR2Vv
bG9jYXRpb25QZXJtaXNzaW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9pc0dlb2xvY2F0aW9uUGVy
bWlzc2lvblNldDsgfQotICAgIGJvb2wgZ2VvbG9jYXRpb25QZXJtaXNzaW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9nZW9sb2NhdGlvblBlcm1pc3Npb247IH0KLQotICAgIHZvaWQgc2V0RGV2ZWxvcGVy
RXh0cmFzRW5hYmxlZChib29sKTsKLSAgICB2b2lkIHNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkKGJvb2wpOwotICAgIHZvaWQgc2hvd1dlYkluc3BlY3RvcigpOwotICAgIHZvaWQg
Y2xvc2VXZWJJbnNwZWN0b3IoKTsKLSAgICB2b2lkIGV2YWx1YXRlSW5XZWJJbnNwZWN0b3IobG9u
ZyBjYWxsSWQsIEpTU3RyaW5nUmVmIHNjcmlwdCk7Ci0gICAgdm9pZCBldmFsdWF0ZVNjcmlwdElu
SXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3Qs
IEpTU3RyaW5nUmVmIHNjcmlwdCk7Ci0gICAgdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRX
b3JsZEFuZFJldHVyblZhbHVlKHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9i
amVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0KTsKLQotICAgIGJvb2wgc2hvdWxkU3RheU9uUGFnZUFm
dGVySGFuZGxpbmdCZWZvcmVVbmxvYWQoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFN0YXlPblBh
Z2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkOyB9Ci0gICAgdm9pZCBzZXRTaG91bGRTdGF5T25Q
YWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZChib29sIHNob3VsZFN0YXlPblBhZ2VBZnRlckhh
bmRsaW5nQmVmb3JlVW5sb2FkKSB7IG1fc2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZv
cmVVbmxvYWQgPSBzaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZDsgfQot
Ci0gICAgdm9pZCBhZGRDaHJvbWVJbnB1dEZpZWxkKCk7Ci0gICAgdm9pZCByZW1vdmVDaHJvbWVJ
bnB1dEZpZWxkKCk7Ci0gICAgdm9pZCBmb2N1c1dlYlZpZXcoKTsKLQotICAgIHZvaWQgc2V0QmFj
a2luZ1NjYWxlRmFjdG9yKGRvdWJsZSk7Ci0KLSAgICB2b2lkIHNldFBPU0lYTG9jYWxlKEpTU3Ry
aW5nUmVmIGxvY2FsZSk7Ci0KLSAgICB2b2lkIHNldFdlYlZpZXdFZGl0YWJsZShib29sKTsKLQot
ICAgIHZvaWQgYWJvcnRNb2RhbCgpOwotCi0gICAgc3RhdGljIHZvaWQgc2V0U2VyaWFsaXplSFRU
UExvYWRzKGJvb2wgc2VyaWFsaXplKTsKLQotICAgIC8vIFRoZSBmb2xsb3dpbmcgQVBJIHRlc3Qg
ZnVuY3Rpb25zIHNob3VsZCBwcm9iYWJseSBiZSBtb3ZlZCB0byBwbGF0Zm9ybS1zcGVjaWZpYyAK
LSAgICAvLyB1bml0IHRlc3RzIG91dHNpZGUgb2YgRFJUIG9uY2UgdGhleSBleGlzdC4KLSAgICB2
b2lkIGFwaVRlc3ROZXdXaW5kb3dEYXRhTG9hZEJhc2VVUkwoSlNTdHJpbmdSZWYgdXRmOERhdGEs
IEpTU3RyaW5nUmVmIGJhc2VVUkwpOwotICAgIHZvaWQgYXBpVGVzdEdvVG9DdXJyZW50QmFja0Zv
cndhcmRJdGVtKCk7Ci0KLSAgICAvLyBTaW11bGF0ZSBhIHJlcXVlc3QgYW4gZW1iZWRkaW5nIGFw
cGxpY2F0aW9uIGNvdWxkIG1ha2UsIHBvcHVsYXRpbmcgcGVyLXNlc3Npb24gY3JlZGVudGlhbCBz
dG9yYWdlLgotICAgIHZvaWQgYXV0aGVudGljYXRlU2Vzc2lvbihKU1N0cmluZ1JlZiB1cmwsIEpT
U3RyaW5nUmVmIHVzZXJuYW1lLCBKU1N0cmluZ1JlZiBwYXNzd29yZCk7Ci0KLSAgICBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gbGF5ZXJUcmVlQXNUZXh0KCkgY29uc3Q7Ci0KLSAgICBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gbWFya2VyVGV4dEZvckxpc3RJdGVtKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU1ZhbHVlUmVmIG5vZGVPYmplY3QpIGNvbnN0OwotCi0gICAgSlNWYWx1ZVJlZiBvcmln
aW5zV2l0aExvY2FsU3RvcmFnZShKU0NvbnRleHRSZWYpOwotICAgIHZvaWQgZGVsZXRlQWxsTG9j
YWxTdG9yYWdlKCk7Ci0gICAgdm9pZCBkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oSlNTdHJp
bmdSZWYgb3JpZ2luSWRlbnRpZmllcik7Ci0gICAgbG9uZyBsb25nIGxvY2FsU3RvcmFnZURpc2tV
c2FnZUZvck9yaWdpbihKU1N0cmluZ1JlZiBvcmlnaW5JZGVudGlmaWVyKTsKLSAgICB2b2lkIG9i
c2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnModW5zaWduZWQgbnVtYmVyKTsKLSAgICB2
b2lkIHN5bmNMb2NhbFN0b3JhZ2UoKTsKLQotICAgIHZvaWQgc2V0U2hvdWxkUGFpbnRCcm9rZW5J
bWFnZShib29sKTsKLSAgICBib29sIHNob3VsZFBhaW50QnJva2VuSW1hZ2UoKSBjb25zdCB7IHJl
dHVybiBtX3Nob3VsZFBhaW50QnJva2VuSW1hZ2U7IH0KLQotICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBtYXhWaWV3V2lkdGg7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFZpZXdIZWln
aHQ7Ci0KLSAgICB2b2lkIHNldE1pbmltdW1UaW1lckludGVydmFsKGRvdWJsZSk7Ci0KLSAgICB2
b2lkIHNldFRleHREaXJlY3Rpb24oSlNTdHJpbmdSZWYpOwotICAgIGNvbnN0IHN0ZDo6c3RyaW5n
JiB0aXRsZVRleHREaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3RpdGxlVGV4dERpcmVjdGlv
bjsgfQotICAgIHZvaWQgc2V0VGl0bGVUZXh0RGlyZWN0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBk
aXJlY3Rpb24pIHsgbV90aXRsZVRleHREaXJlY3Rpb24gPSBkaXJlY3Rpb247IH0KLQotICAgIC8v
IEN1c3RvbSBmdWxsIHNjcmVlbiBiZWhhdmlvci4KLSAgICB2b2lkIHNldEhhc0N1c3RvbUZ1bGxT
Y3JlZW5CZWhhdmlvcihib29sIHZhbHVlKSB7IG1fY3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yID0g
dmFsdWU7IH0KLSAgICBib29sIGhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvcigpIGNvbnN0IHsg
cmV0dXJuIG1fY3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yOyB9Ci0KLSAgICB2b2lkIHNldFN0b3Jh
Z2VEYXRhYmFzZUlkbGVJbnRlcnZhbChkb3VibGUpOwotCi1wcml2YXRlOgotICAgIExheW91dFRl
c3RDb250cm9sbGVyKGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXN0UGF0aE9yVVJMLCBjb25zdCBzdGQ6
OnN0cmluZyYgZXhwZWN0ZWRQaXhlbEhhc2gpOwotCi0gICAgdm9pZCBzZXRHZW9sb2NhdGlvblBl
cm1pc3Npb25Db21tb24oYm9vbCBhbGxvdyk7Ci0KLSAgICBib29sIG1fZGlzYWxsb3dJbmNyZWFz
ZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90YTsKLSAgICBib29sIG1fZHVtcEFwcGxpY2F0aW9uQ2Fj
aGVEZWxlZ2F0ZUNhbGxiYWNrczsKLSAgICBib29sIG1fZHVtcEFzQXVkaW87Ci0gICAgYm9vbCBt
X2R1bXBBc1BERjsKLSAgICBib29sIG1fZHVtcEFzVGV4dDsKLSAgICBib29sIG1fZHVtcEJhY2tG
b3J3YXJkTGlzdDsKLSAgICBib29sIG1fZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnM7Ci0g
ICAgYm9vbCBtX2R1bXBDaGlsZEZyYW1lc0FzVGV4dDsKLSAgICBib29sIG1fZHVtcERPTUFzV2Vi
QXJjaGl2ZTsKLSAgICBib29sIG1fZHVtcERhdGFiYXNlQ2FsbGJhY2tzOwotICAgIGJvb2wgbV9k
dW1wRWRpdGluZ0NhbGxiYWNrczsKLSAgICBib29sIG1fZHVtcEZyYW1lTG9hZENhbGxiYWNrczsK
LSAgICBib29sIG1fZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjazsKLSAgICBib29sIG1fZHVt
cFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3M7Ci0gICAgYm9vbCBtX2R1bXBIaXN0b3J5
RGVsZWdhdGVDYWxsYmFja3M7Ci0gICAgYm9vbCBtX2R1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3M7
Ci0gICAgYm9vbCBtX2R1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzOwotICAgIGJvb2wgbV9k
dW1wU2VsZWN0aW9uUmVjdDsKLSAgICBib29sIG1fZHVtcFNvdXJjZUFzV2ViQXJjaGl2ZTsKLSAg
ICBib29sIG1fZHVtcFN0YXR1c0NhbGxiYWNrczsKLSAgICBib29sIG1fZHVtcFRpdGxlQ2hhbmdl
czsKLSAgICBib29sIG1fZHVtcEljb25DaGFuZ2VzOwotICAgIGJvb2wgbV9kdW1wVmlzaXRlZExp
bmtzQ2FsbGJhY2s7Ci0gICAgYm9vbCBtX2R1bXBXaWxsQ2FjaGVSZXNwb25zZTsKLSAgICBib29s
IG1fZ2VuZXJhdGVQaXhlbFJlc3VsdHM7Ci0gICAgYm9vbCBtX2NhbGxDbG9zZU9uV2ViVmlld3M7
Ci0gICAgYm9vbCBtX2Nhbk9wZW5XaW5kb3dzOwotICAgIGJvb2wgbV9jbG9zZVJlbWFpbmluZ1dp
bmRvd3NXaGVuQ29tcGxldGU7Ci0gICAgYm9vbCBtX25ld1dpbmRvd3NDb3B5QmFja0ZvcndhcmRM
aXN0OwotICAgIGJvb2wgbV9zdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzOwotICAgIGJvb2wgbV90
ZXN0T25zY3JlZW47Ci0gICAgYm9vbCBtX3Rlc3RSZXBhaW50OwotICAgIGJvb2wgbV90ZXN0UmVw
YWludFN3ZWVwSG9yaXpvbnRhbGx5OwotICAgIGJvb2wgbV93YWl0VG9EdW1wOyAvLyBUcnVlIGlm
IHdhaXRVbnRpbERvbmUoKSBoYXMgYmVlbiBjYWxsZWQsIGJ1dCBub3RpZnlEb25lKCkgaGFzIG5v
dCB5ZXQgYmVlbiBjYWxsZWQuCi0gICAgYm9vbCBtX3dpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxs
OwotICAgIGJvb2wgbV93aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3Q7Ci0gICAg
Ym9vbCBtX3dpbmRvd0lzS2V5OwotICAgIGJvb2wgbV9hbHdheXNBY2NlcHRDb29raWVzOwotICAg
IGJvb2wgbV9nbG9iYWxGbGFnOwotICAgIGJvb2wgbV9pc0dlb2xvY2F0aW9uUGVybWlzc2lvblNl
dDsKLSAgICBib29sIG1fZ2VvbG9jYXRpb25QZXJtaXNzaW9uOwotICAgIGJvb2wgbV9oYW5kbGVz
QXV0aGVudGljYXRpb25DaGFsbGVuZ2VzOwotICAgIGJvb2wgbV9pc1ByaW50aW5nOwotICAgIGJv
b2wgbV9kZWZlck1haW5SZXNvdXJjZURhdGFMb2FkOwotICAgIGJvb2wgbV91c2VEZWZlcnJlZEZy
YW1lTG9hZGluZzsKLSAgICBib29sIG1fc2hvdWxkUGFpbnRCcm9rZW5JbWFnZTsKLSAgICBib29s
IG1fc2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQ7Ci0gICAgYm9vbCBt
X2FyZURlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdHNJZ25vcmVkOwotICAgIGJv
b2wgbV9jdXN0b21GdWxsU2NyZWVuQmVoYXZpb3I7Ci0KLSAgICBzdGQ6OnN0cmluZyBtX2F1dGhl
bnRpY2F0aW9uVXNlcm5hbWU7Ci0gICAgc3RkOjpzdHJpbmcgbV9hdXRoZW50aWNhdGlvblBhc3N3
b3JkOyAKLSAgICBzdGQ6OnN0cmluZyBtX3Rlc3RQYXRoT3JVUkw7Ci0gICAgc3RkOjpzdHJpbmcg
bV9leHBlY3RlZFBpeGVsSGFzaDsgICAgLy8gZW1wdHkgc3RyaW5nIGlmIG5vIGhhc2gKLSAgICBz
dGQ6OnN0cmluZyBtX3RpdGxlVGV4dERpcmVjdGlvbjsKLQotICAgIHN0ZDo6c2V0PHN0ZDo6c3Ry
aW5nPiBtX3dpbGxTZW5kUmVxdWVzdENsZWFySGVhZGVyczsKLSAgICAKLSAgICAvLyBiYXNlNjQg
ZW5jb2RlZCBXQVYgYXVkaW8gZGF0YSBpcyBzdG9yZWQgaGVyZS4KLSAgICBzdGQ6OnN0cmluZyBt
X2VuY29kZWRBdWRpb0RhdGE7Ci0gICAgCi0gICAgLy8gb3JpZ2lucyB3aGljaCBoYXZlIGJlZW4g
Z3JhbnRlZCBkZXNrdG9wIG5vdGlmaWNhdGlvbiBhY2Nlc3MKLSAgICBzdGQ6OnZlY3RvcjxKU1N0
cmluZ1JlZj4gbV9kZXNrdG9wTm90aWZpY2F0aW9uQWxsb3dlZE9yaWdpbnM7Ci0KLSAgICBzdGQ6
Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+IG1fVVJMc1RvUmVkaXJlY3Q7Ci0gICAgCi0g
ICAgc3RhdGljIEpTQ2xhc3NSZWYgZ2V0SlNDbGFzcygpOwotICAgIHN0YXRpYyBKU1N0YXRpY1Zh
bHVlKiBzdGF0aWNWYWx1ZXMoKTsKLSAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiogc3RhdGlj
RnVuY3Rpb25zKCk7Ci19OwotCi0jZW5kaWYgLy8gTGF5b3V0VGVzdENvbnRyb2xsZXJfaApJbmRl
eDogVG9vbHMvRHVtcFJlbmRlclRyZWUvUGl4ZWxEdW1wU3VwcG9ydC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvUGl4ZWxEdW1wU3VwcG9ydC5jcHAJKHJldmlzaW9uIDEy
NTMzNSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL1BpeGVsRHVtcFN1cHBvcnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKICNpbmNsdWRlICJDeWNsaWNSZWR1bmRhbmN5
Q2hlY2suaCIKICNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgotI2luY2x1ZGUgIkxheW91dFRl
c3RDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiVGVzdFJ1bm5lci5oIgogI2luY2x1ZGUgPGNzdGRp
bz4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
SW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL1N0b3JhZ2VUcmFja2VyRGVsZWdhdGUubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5t
bQkocmV2aXNpb24gMTI1MzM1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvU3RvcmFnZVRyYWNr
ZXJEZWxlZ2F0ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2ltcG9ydCAi
Y29uZmlnLmgiCiAjaW1wb3J0ICJTdG9yYWdlVHJhY2tlckRlbGVnYXRlLmgiCiAKLSNpbXBvcnQg
IkxheW91dFRlc3RDb250cm9sbGVyLmgiCisjaW1wb3J0ICJUZXN0UnVubmVyLmgiCiAjaW1wb3J0
IDxXZWJLaXQvV2ViU2VjdXJpdHlPcmlnaW5Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2Vi
U3RvcmFnZU1hbmFnZXJQcml2YXRlLmg+CiAKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rl
c3RSdW5uZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5u
ZXIuY3BwCShyZXZpc2lvbiAxMjUzMzUpCShmcm9tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91
dFRlc3RDb250cm9sbGVyLmNwcDoxMjUzMzUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0
UnVubmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1MjAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEpvb25lIEh1ciA8am9vbmVAa2xkcC5vcmc+
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENv
bXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9sbGVyLmgi
CisKKyNpbmNsdWRlICJXb3JrUXVldWUuaCIKKyNpbmNsdWRlICJXb3JrUXVldWVJdGVtLmgiCisj
aW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRSZWYu
aD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oPgorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8bG9jYWxlLmg+CisjaW5jbHVk
ZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9D
dXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3Rm
L093bkFycmF5UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCitMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6TGF5b3V0VGVzdENvbnRyb2xsZXIoY29uc3Qgc3RkOjpzdHJpbmcmIHRlc3RQYXRo
T3JVUkwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBleHBlY3RlZFBpeGVsSGFzaCkKKyAgICA6IG1fZGlz
YWxsb3dJbmNyZWFzZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90YShmYWxzZSkKKyAgICAsIG1fZHVt
cEFwcGxpY2F0aW9uQ2FjaGVEZWxlZ2F0ZUNhbGxiYWNrcyhmYWxzZSkKKyAgICAsIG1fZHVtcEFz
QXVkaW8oZmFsc2UpCisgICAgLCBtX2R1bXBBc1BERihmYWxzZSkKKyAgICAsIG1fZHVtcEFzVGV4
dChmYWxzZSkKKyAgICAsIG1fZHVtcEJhY2tGb3J3YXJkTGlzdChmYWxzZSkKKyAgICAsIG1fZHVt
cENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnMoZmFsc2UpCisgICAgLCBtX2R1bXBDaGlsZEZyYW1l
c0FzVGV4dChmYWxzZSkKKyAgICAsIG1fZHVtcERPTUFzV2ViQXJjaGl2ZShmYWxzZSkKKyAgICAs
IG1fZHVtcERhdGFiYXNlQ2FsbGJhY2tzKGZhbHNlKQorICAgICwgbV9kdW1wRWRpdGluZ0NhbGxi
YWNrcyhmYWxzZSkKKyAgICAsIG1fZHVtcEZyYW1lTG9hZENhbGxiYWNrcyhmYWxzZSkKKyAgICAs
IG1fZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjayhmYWxzZSkKKyAgICAsIG1fZHVtcFVzZXJH
ZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MoZmFsc2UpCisgICAgLCBtX2R1bXBIaXN0b3J5RGVs
ZWdhdGVDYWxsYmFja3MoZmFsc2UpCisgICAgLCBtX2R1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3Mo
ZmFsc2UpCisgICAgLCBtX2R1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzKGZhbHNlKQorICAg
ICwgbV9kdW1wU2VsZWN0aW9uUmVjdChmYWxzZSkKKyAgICAsIG1fZHVtcFNvdXJjZUFzV2ViQXJj
aGl2ZShmYWxzZSkKKyAgICAsIG1fZHVtcFN0YXR1c0NhbGxiYWNrcyhmYWxzZSkKKyAgICAsIG1f
ZHVtcFRpdGxlQ2hhbmdlcyhmYWxzZSkKKyAgICAsIG1fZHVtcEljb25DaGFuZ2VzKGZhbHNlKQor
ICAgICwgbV9kdW1wVmlzaXRlZExpbmtzQ2FsbGJhY2soZmFsc2UpCisgICAgLCBtX2R1bXBXaWxs
Q2FjaGVSZXNwb25zZShmYWxzZSkKKyAgICAsIG1fZ2VuZXJhdGVQaXhlbFJlc3VsdHModHJ1ZSkK
KyAgICAsIG1fY2FsbENsb3NlT25XZWJWaWV3cyh0cnVlKQorICAgICwgbV9jYW5PcGVuV2luZG93
cyhmYWxzZSkKKyAgICAsIG1fY2xvc2VSZW1haW5pbmdXaW5kb3dzV2hlbkNvbXBsZXRlKHRydWUp
CisgICAgLCBtX25ld1dpbmRvd3NDb3B5QmFja0ZvcndhcmRMaXN0KGZhbHNlKQorICAgICwgbV9z
dG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzKGZhbHNlKQorICAgICwgbV90ZXN0T25zY3JlZW4oZmFs
c2UpCisgICAgLCBtX3Rlc3RSZXBhaW50KGZhbHNlKQorICAgICwgbV90ZXN0UmVwYWludFN3ZWVw
SG9yaXpvbnRhbGx5KGZhbHNlKQorICAgICwgbV93YWl0VG9EdW1wKGZhbHNlKQorICAgICwgbV93
aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbChmYWxzZSkKKyAgICAsIG1fd2lsbFNlbmRSZXF1ZXN0
UmV0dXJuc051bGxPblJlZGlyZWN0KGZhbHNlKQorICAgICwgbV93aW5kb3dJc0tleSh0cnVlKQor
ICAgICwgbV9hbHdheXNBY2NlcHRDb29raWVzKGZhbHNlKQorICAgICwgbV9nbG9iYWxGbGFnKGZh
bHNlKQorICAgICwgbV9pc0dlb2xvY2F0aW9uUGVybWlzc2lvblNldChmYWxzZSkKKyAgICAsIG1f
Z2VvbG9jYXRpb25QZXJtaXNzaW9uKGZhbHNlKQorICAgICwgbV9oYW5kbGVzQXV0aGVudGljYXRp
b25DaGFsbGVuZ2VzKGZhbHNlKQorICAgICwgbV9pc1ByaW50aW5nKGZhbHNlKQorICAgICwgbV9k
ZWZlck1haW5SZXNvdXJjZURhdGFMb2FkKHRydWUpCisgICAgLCBtX3VzZURlZmVycmVkRnJhbWVM
b2FkaW5nKGZhbHNlKQorICAgICwgbV9zaG91bGRQYWludEJyb2tlbkltYWdlKHRydWUpCisgICAg
LCBtX3Nob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkKGZhbHNlKQorICAg
ICwgbV9hcmVEZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzSWdub3JlZChmYWxz
ZSkKKyAgICAsIG1fY3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yKGZhbHNlKSAKKyAgICAsIG1fdGVz
dFBhdGhPclVSTCh0ZXN0UGF0aE9yVVJMKQorICAgICwgbV9leHBlY3RlZFBpeGVsSGFzaChleHBl
Y3RlZFBpeGVsSGFzaCkKKyAgICAsIG1fdGl0bGVUZXh0RGlyZWN0aW9uKCJsdHIiKQoreworfQor
CitQYXNzUmVmUHRyPExheW91dFRlc3RDb250cm9sbGVyPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
Y3JlYXRlKGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXN0UGF0aE9yVVJMLCBjb25zdCBzdGQ6OnN0cmlu
ZyYgZXhwZWN0ZWRQaXhlbEhhc2gpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBMYXlvdXRU
ZXN0Q29udHJvbGxlcih0ZXN0UGF0aE9yVVJMLCBleHBlY3RlZFBpeGVsSGFzaCkpOworfQorCisv
LyBTdGF0aWMgRnVuY3Rpb25zCisKK3N0YXRpYyBKU1ZhbHVlUmVmIGRpc2FsbG93SW5jcmVhc2VG
b3JBcHBsaWNhdGlvbkNhY2hlUXVvdGFDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNP
YmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVu
dENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pCit7CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2Fz
dDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7
CisgICAgY29udHJvbGxlci0+c2V0RGlzYWxsb3dJbmNyZWFzZUZvckFwcGxpY2F0aW9uQ2FjaGVR
dW90YSh0cnVlKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9
CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGR1bXBBcHBsaWNhdGlvbkNhY2hlRGVsZWdhdGVDYWxsYmFj
a3NDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpT
T2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVl
UmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgTGF5b3V0VGVz
dENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxl
cio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+c2V0
RHVtcEFwcGxpY2F0aW9uQ2FjaGVEZWxlZ2F0ZUNhbGxiYWNrcyh0cnVlKTsKKyAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGR1
bXBBc1BERkNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlv
biwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpT
VmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBMYXlv
dXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250
cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVy
LT5zZXREdW1wQXNQREYodHJ1ZSk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNv
bnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBkdW1wQXNUZXh0Q2FsbGJhY2soSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2Jq
ZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250
cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldER1bXBBc1RleHQodHJ1ZSk7
CisKKyAgICAvLyBPcHRpb25hbCBwYXJhbWF0ZXIsIGRlc2NyaWJpbmcgd2hldGhlciBpdCdzIGFs
bG93ZWQgdG8gZHVtcCBwaXhlbCByZXN1bHRzIGluIGR1bXBBc1RleHQgbW9kZS4KKyAgICBjb250
cm9sbGVyLT5zZXRHZW5lcmF0ZVBpeGVsUmVzdWx0cyhhcmd1bWVudENvdW50ID4gMCA/IEpTVmFs
dWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSA6IGZhbHNlKTsKKworICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYg
ZHVtcEJhY2tGb3J3YXJkTGlzdENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVj
dFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
K3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExh
eW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAg
ICBjb250cm9sbGVyLT5zZXREdW1wQmFja0ZvcndhcmRMaXN0KHRydWUpOworICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgZHVt
cENoaWxkRnJhbWVzQXNUZXh0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3Vu
dCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQor
eworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5
b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAg
IGNvbnRyb2xsZXItPnNldER1bXBDaGlsZEZyYW1lc0FzVGV4dCh0cnVlKTsKKyAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGR1
bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQoreworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGlj
X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOworICAgIGNvbnRyb2xsZXItPnNldER1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zKHRy
dWUpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3Rh
dGljIEpTVmFsdWVSZWYgZHVtcERhdGFiYXNlQ2FsbGJhY2tzQ2FsbGJhY2soSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQoreworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVy
ID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUo
dGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldER1bXBEYXRhYmFzZUNhbGxiYWNrcyh0
cnVlKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0
YXRpYyBKU1ZhbHVlUmVmIGR1bXBET01Bc1dlYkFyY2hpdmVDYWxsYmFjayhKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNp
emVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCit7CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIg
PSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+c2V0RHVtcERPTUFzV2ViQXJjaGl2ZSh0cnVl
KTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRp
YyBKU1ZhbHVlUmVmIGR1bXBFZGl0aW5nQ2FsbGJhY2tzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXpl
X3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQoreworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0g
c3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhp
c09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldER1bXBFZGl0aW5nQ2FsbGJhY2tzKHRydWUp
OworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGlj
IEpTVmFsdWVSZWYgZHVtcEZyYW1lTG9hZENhbGxiYWNrc0NhbGxiYWNrKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6
ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9
IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRo
aXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5zZXREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKHRy
dWUpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3Rh
dGljIEpTVmFsdWVSZWYgZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFja0NhbGxiYWNrKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09i
amVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10s
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29u
dHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQ
cml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5zZXREdW1wUHJvZ3Jlc3NGaW5p
c2hlZENhbGxiYWNrKHRydWUpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRD
YWxsYmFja3NDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rp
b24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgTGF5
b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29u
dHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxl
ci0+c2V0RHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3ModHJ1ZSk7CisgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJl
ZiBkdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQoreworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGlj
X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOworICAgIGNvbnRyb2xsZXItPnNldER1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3ModHJ1ZSk7
CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMg
SlNWYWx1ZVJlZiBkdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlc0NhbGxiYWNrKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJv
bGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2
YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5zZXREdW1wUmVzb3VyY2VSZXNwb25z
ZU1JTUVUeXBlcyh0cnVlKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGR1bXBTZWxlY3Rpb25SZWN0Q2FsbGJhY2soSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlz
T2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNb
XSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBj
b250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdl
dFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldER1bXBTZWxlY3Rpb25S
ZWN0KHRydWUpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30K
Kworc3RhdGljIEpTVmFsdWVSZWYgZHVtcFNvdXJjZUFzV2ViQXJjaGl2ZUNhbGxiYWNrKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09i
amVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10s
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29u
dHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQ
cml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5zZXREdW1wU291cmNlQXNXZWJB
cmNoaXZlKHRydWUpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
K30KKworc3RhdGljIEpTVmFsdWVSZWYgZHVtcFN0YXR1c0NhbGxiYWNrc0NhbGxiYWNrKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09i
amVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10s
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29u
dHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQ
cml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5zZXREdW1wU3RhdHVzQ2FsbGJh
Y2tzKHRydWUpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30K
Kworc3RhdGljIEpTVmFsdWVSZWYgZHVtcFRpdGxlQ2hhbmdlc0NhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxl
ciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRl
KHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5zZXREdW1wVGl0bGVDaGFuZ2VzKHRydWUp
OworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGlj
IEpTVmFsdWVSZWYgZHVtcEljb25DaGFuZ2VzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQoreworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGlj
X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOworICAgIGNvbnRyb2xsZXItPnNldER1bXBJY29uQ2hhbmdlcyh0cnVlKTsKKyAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVm
IGR1bXBXaWxsQ2FjaGVSZXNwb25zZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09i
amVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50
Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKK3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0
PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsK
KyAgICBjb250cm9sbGVyLT5zZXREdW1wV2lsbENhY2hlUmVzcG9uc2UodHJ1ZSk7CisgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJl
ZiBwYXRoVG9Mb2NhbFJlc291cmNlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2Jq
ZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRD
b3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQoreworICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRy
b2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGxvY2FsUGF0
aChBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2Vw
dGlvbikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisKKyAgICBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gY29udmVydGVkUGF0aChBZG9wdCwgY29udHJvbGxlci0+cGF0aFRvTG9jYWxSZXNv
dXJjZShjb250ZXh0LCBsb2NhbFBhdGguZ2V0KCkpKTsKKyAgICBpZiAoIWNvbnZlcnRlZFBhdGgp
CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBjb252ZXJ0ZWRQYXRoLmdldCgpKTsKK30K
Kworc3RhdGljIEpTVmFsdWVSZWYgcmVtb3ZlQWxsVmlzaXRlZExpbmtzQ2FsbGJhY2soSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2Jq
ZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250
cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldER1bXBWaXNpdGVkTGlua3ND
YWxsYmFjayh0cnVlKTsKKyAgICBjb250cm9sbGVyLT5yZW1vdmVBbGxWaXNpdGVkTGlua3MoKTsK
KyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBK
U1ZhbHVlUmVmIHJlcGFpbnRTd2VlcEhvcml6b250YWxseUNhbGxiYWNrKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6
ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9
IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRo
aXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5zZXRUZXN0UmVwYWludFN3ZWVwSG9yaXpvbnRh
bGx5KHRydWUpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30K
Kworc3RhdGljIEpTVmFsdWVSZWYgc2V0Q2FsbENsb3NlT25XZWJWaWV3c0NhbGxiYWNrKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09i
amVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10s
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCisg
ICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIExheW91
dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRy
b2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXIt
PnNldENhbGxDbG9zZU9uV2ViVmlld3MoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVu
dHNbMF0pKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisK
K3N0YXRpYyBKU1ZhbHVlUmVmIHNldENhbk9wZW5XaW5kb3dzQ2FsbGJhY2soSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQoreworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVy
ID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUo
dGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldENhbk9wZW5XaW5kb3dzKHRydWUpOwor
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpT
VmFsdWVSZWYgc2V0Q2xvc2VSZW1haW5pbmdXaW5kb3dzV2hlbkNvbXBsZXRlQ2FsbGJhY2soSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlz
T2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNb
XSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgTGF5
b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29u
dHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxl
ci0+c2V0Q2xvc2VSZW1haW5pbmdXaW5kb3dzV2hlbkNvbXBsZXRlKEpTVmFsdWVUb0Jvb2xlYW4o
Y29udGV4dCwgYXJndW1lbnRzWzBdKSk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBzZXRFbmNvZGVkQXVkaW9EYXRhQ2Fs
bGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVj
dFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBh
cmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGlmIChhcmd1bWVudENv
dW50IDwgMSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwor
CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGVuY29kZWRBdWRpb0RhdGEoQWRvcHQsIEpT
VmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKKyAg
ICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIAorICAgIHNpemVfdCBtYXhMZW5ndGggPSBKU1N0
cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoZW5jb2RlZEF1ZGlvRGF0YS5nZXQoKSk7Cisg
ICAgT3duQXJyYXlQdHI8Y2hhcj4gZW5jb2RlZEF1ZGlvRGF0YUJ1ZmZlciA9IGFkb3B0QXJyYXlQ
dHIobmV3IGNoYXJbbWF4TGVuZ3RoICsgMV0pOworICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmco
ZW5jb2RlZEF1ZGlvRGF0YS5nZXQoKSwgZW5jb2RlZEF1ZGlvRGF0YUJ1ZmZlci5nZXQoKSwgbWF4
TGVuZ3RoICsgMSk7CisKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0
YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5zZXRFbmNvZGVkQXVkaW9EYXRhKGVuY29kZWRBdWRp
b0RhdGFCdWZmZXIuZ2V0KCkpOworICAgIGNvbnRyb2xsZXItPnNldER1bXBBc0F1ZGlvKHRydWUp
OworICAgIAorICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKwor
c3RhdGljIEpTVmFsdWVSZWYgdGVzdE9uc2NyZWVuQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQoreworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3Rh
dGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09i
amVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldFRlc3RPbnNjcmVlbih0cnVlKTsKKyAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVm
IHRlc3RSZXBhaW50Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1
bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29u
c3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAg
IExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVz
dENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRy
b2xsZXItPnNldFRlc3RSZXBhaW50KHRydWUpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgYWRkRGlzYWxsb3dlZFVSTENh
bGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYg
YXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAvLyBIYXMgbWFjIGlt
cGxlbWVudGF0aW9uCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQorICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gdXJsKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1sw
XSwgZXhjZXB0aW9uKSk7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKworICAgIExheW91dFRl
c3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xs
ZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPmFk
ZERpc2FsbG93ZWRVUkwodXJsLmdldCgpKTsKKworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgYWRkVVJMVG9SZWRpcmVjdENh
bGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYg
YXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBpZiAoYXJndW1lbnRD
b3VudCA8IDIpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
KworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBvcmlnaW4oQWRvcHQsIEpTVmFsdWVUb1N0
cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKKyAgICBBU1NFUlQo
ISpleGNlcHRpb24pOworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGRlc3RpbmF0aW9u
KEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0
aW9uKSk7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKworICAgIHNpemVfdCBtYXhMZW5ndGgg
PSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUob3JpZ2luLmdldCgpKTsKKyAgICBP
d25BcnJheVB0cjxjaGFyPiBvcmlnaW5CdWZmZXIgPSBhZG9wdEFycmF5UHRyKG5ldyBjaGFyW21h
eExlbmd0aCArIDFdKTsKKyAgICBKU1N0cmluZ0dldFVURjhDU3RyaW5nKG9yaWdpbi5nZXQoKSwg
b3JpZ2luQnVmZmVyLmdldCgpLCBtYXhMZW5ndGggKyAxKTsKKworICAgIG1heExlbmd0aCA9IEpT
U3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShkZXN0aW5hdGlvbi5nZXQoKSk7CisgICAg
T3duQXJyYXlQdHI8Y2hhcj4gZGVzdGluYXRpb25CdWZmZXIgPSBhZG9wdEFycmF5UHRyKG5ldyBj
aGFyW21heExlbmd0aCArIDFdKTsKKyAgICBKU1N0cmluZ0dldFVURjhDU3RyaW5nKGRlc3RpbmF0
aW9uLmdldCgpLCBkZXN0aW5hdGlvbkJ1ZmZlci5nZXQoKSwgbWF4TGVuZ3RoICsgMSk7CisKKyAg
ICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRl
c3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250
cm9sbGVyLT5hZGRVUkxUb1JlZGlyZWN0KG9yaWdpbkJ1ZmZlci5nZXQoKSwgZGVzdGluYXRpb25C
dWZmZXIuZ2V0KCkpOworCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXdDYWxsYmFj
ayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVm
IHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3Vt
ZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgLy8gSGFzIG1hYyAmIHdpbmRv
d3MgaW1wbGVtZW50YXRpb24KKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9
IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRo
aXNPYmplY3QpKTsKKworICAgIHJldHVybiBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwgY29u
dHJvbGxlci0+Y2FsbFNob3VsZENsb3NlT25XZWJWaWV3KCkpOworfQorCitzdGF0aWMgSlNWYWx1
ZVJlZiBjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQoreworICAgIC8vIEhhcyBtYWMgaW1wbGVtZW50YXRpb24KKyAgICBMYXlvdXRU
ZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9s
bGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5j
bGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKCk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGNsZWFyQXBwbGljYXRpb25D
YWNoZUZvck9yaWdpbkNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBm
dW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNv
bnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAg
ICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKKworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBvcmlnaW5VUkwo
QWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRp
b24pKTsKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xs
ZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+Y2xlYXJBcHBsaWNh
dGlvbkNhY2hlRm9yT3JpZ2luKG9yaWdpblVSTC5nZXQoKSk7CisgICAgCisgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBhcHBs
aWNhdGlvbkNhY2hlRGlza1VzYWdlRm9yT3JpZ2luQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQoreworICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IG9yaWdpblVSTChBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1
bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgCisg
ICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRU
ZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisKKyAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgY29udHJvbGxlci0+YXBwbGljYXRpb25D
YWNoZURpc2tVc2FnZUZvck9yaWdpbihvcmlnaW5VUkwuZ2V0KCkpKTsKK30KKworc3RhdGljIEpT
VmFsdWVSZWYgb3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlQ2FsbGJhY2soSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQoreworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVy
ID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUo
dGhpc09iamVjdCkpOworICAgIHJldHVybiBjb250cm9sbGVyLT5vcmlnaW5zV2l0aEFwcGxpY2F0
aW9uQ2FjaGUoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGNsZWFyQWxsRGF0YWJh
c2VzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIC8vIEhhcyBt
YWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNv
bnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0
UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+Y2xlYXJBbGxEYXRhYmFzZXMo
KTsKKworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3Rh
dGljIEpTVmFsdWVSZWYgc3luY0xvY2FsU3RvcmFnZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90
IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikKK3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0
YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKKworICAgIGNvbnRyb2xsZXItPnN5bmNMb2NhbFN0b3JhZ2UoKTsKKworICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVS
ZWYgb2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9uc0NhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxl
ciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRl
KHRoaXNPYmplY3QpKTsKKworICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgdW5zaWduZWQgbnVtTm90
aWZpY2F0aW9ucyA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2Vw
dGlvbik7CisKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworCisgICAgY29udHJvbGxlci0+b2Jz
ZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyhudW1Ob3RpZmljYXRpb25zKTsKKworICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFs
dWVSZWYgZGVsZXRlQWxsTG9jYWxTdG9yYWdlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQoreworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGlj
X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOworICAgIGNvbnRyb2xsZXItPmRlbGV0ZUFsbExvY2FsU3RvcmFnZSgpOworCisgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJl
ZiBkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW5DYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBh
cmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCit7CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0
aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2Jq
ZWN0KSk7CisKKyAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCisgICAgICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiB1cmwoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBl
eGNlcHRpb24pKTsKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworCisgICAgY29udHJvbGxlci0+
ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKHVybC5nZXQoKSk7CisKKyAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGxvY2Fs
U3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbkNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKK3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19j
YXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3Qp
KTsKKworICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG9y
aWdpblVSTChBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0s
IGV4Y2VwdGlvbikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisKKyAgICByZXR1cm4gSlNW
YWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgY29udHJvbGxlci0+bG9jYWxTdG9yYWdlRGlza1VzYWdl
Rm9yT3JpZ2luKG9yaWdpblVSTC5nZXQoKSkpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBvcmln
aW5zV2l0aExvY2FsU3RvcmFnZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVj
dFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
K3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExh
eW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAg
ICByZXR1cm4gY29udHJvbGxlci0+b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoY29udGV4dCk7Cit9
CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGNsZWFyQmFja0ZvcndhcmRMaXN0Q2FsbGJhY2soSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2Jq
ZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dzIGltcGxl
bWVudGF0aW9uCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNf
Y2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0
KSk7CisgICAgY29udHJvbGxlci0+Y2xlYXJCYWNrRm9yd2FyZExpc3QoKTsKKworICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYg
Y2xlYXJQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBh
cmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCit7CisgICAgLy8gSGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50YXRpb24KKyAg
ICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRl
c3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250
cm9sbGVyLT5jbGVhclBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldCgpOworCisgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBkZWNv
ZGVIb3N0TmFtZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5j
dGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0
IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAv
LyBIYXMgbWFjIGltcGxlbWVudGF0aW9uCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQorICAg
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gbmFtZShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0
LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisK
KyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91
dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gZGVjb2RlZEhvc3ROYW1lKEFkb3B0LCBjb250cm9sbGVy
LT5jb3B5RGVjb2RlZEhvc3ROYW1lKG5hbWUuZ2V0KCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1h
a2VTdHJpbmcoY29udGV4dCwgZGVjb2RlZEhvc3ROYW1lLmdldCgpKTsKK30KKworc3RhdGljIEpT
VmFsdWVSZWYgZGlzYWJsZUltYWdlTG9hZGluZ0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbikKK3sKKyAgICAvLyBIYXMgbWFjIGltcGxlbWVudGF0aW9uLCBuZWVkcyB3aW5kb3dz
IGltcGxlbWVudGF0aW9uCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBz
dGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlz
T2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+ZGlzYWJsZUltYWdlTG9hZGluZygpOworICAgIAor
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpT
VmFsdWVSZWYgZGlzcGF0Y2hQZW5kaW5nTG9hZFJlcXVlc3RzQ2FsbGJhY2soSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQoreworICAgIC8vIEhhcyBtYWMgaW1wbGVtZW50YXRpb24sIG5lZWRz
IHdpbmRvd3MgaW1wbGVtZW50YXRpb24KKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJv
bGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2
YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5kaXNwYXRjaFBlbmRpbmdMb2FkUmVx
dWVzdHMoKTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGRpc3BsYXlDYWxsYmFjayhKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVf
dCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCit7CisgICAgLy8gSGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50YXRpb24K
KyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91
dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBj
b250cm9sbGVyLT5kaXNwbGF5KCk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGRpc3BsYXlJbnZhbGlkYXRlZFJlZ2lv
bkNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVS
ZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAvLyBIYXMgbWFj
ICYgd2luZG93cyBpbXBsZW1lbnRhdGlvbgorICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250
cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOworICAgIC8vIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNwbGF5
KCkgb25seSByZW5kZXJzIHRoZSBpbnZhbGlkYXRlZCByZWdpb24gc28KKyAgICAvLyB3ZSBjYW4g
anVzdCB1c2UgdGhhdC4KKyAgICBjb250cm9sbGVyLT5kaXNwbGF5KCk7CisKKyAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGVu
Y29kZUhvc3ROYW1lQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1
bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29u
c3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAg
IC8vIEhhcyBtYWMgaW1wbGVtZW50YXRpb24KKyAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCisg
ICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBuYW1lKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRl
eHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsK
KworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5
b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAg
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBlbmNvZGVkSG9zdE5hbWUoQWRvcHQsIGNvbnRyb2xs
ZXItPmNvcHlFbmNvZGVkSG9zdE5hbWUobmFtZS5nZXQoKSkpOworICAgIHJldHVybiBKU1ZhbHVl
TWFrZVN0cmluZyhjb250ZXh0LCBlbmNvZGVkSG9zdE5hbWUuZ2V0KCkpOworfQorCitzdGF0aWMg
SlNWYWx1ZVJlZiBleGVjQ29tbWFuZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09i
amVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50
Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKK3sKKyAgICAvLyBIYXMgTWFjICYgV2luZG93cyBpbXBsZW1lbnRhdGlvbnMuCisgICAgaWYg
KGFyZ3VtZW50Q291bnQgPCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gbmFtZShBZG9wdCwgSlNW
YWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAg
IEFTU0VSVCghKmV4Y2VwdGlvbik7CisKKyAgICAvLyBJZ25vcmluZyB0aGUgc2Vjb25kIHBhcmFt
ZXRlciAodXNlckludGVyZmFjZSksIGFzIHRoaXMgY29tbWFuZCBlbXVsYXRlcyBhIG1hbnVhbCBh
Y3Rpb24uCisKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gdmFsdWU7CisgICAgaWYgKGFy
Z3VtZW50Q291bnQgPj0gMykgeworICAgICAgICB2YWx1ZS5hZG9wdChKU1ZhbHVlVG9TdHJpbmdD
b3B5KGNvbnRleHQsIGFyZ3VtZW50c1syXSwgZXhjZXB0aW9uKSk7CisgICAgICAgIEFTU0VSVCgh
KmV4Y2VwdGlvbik7CisgICAgfSBlbHNlCisgICAgICAgIHZhbHVlLmFkb3B0KEpTU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCIiKSk7CisKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBj
b250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdl
dFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPmV4ZWNDb21tYW5kKG5hbWUu
Z2V0KCksIHZhbHVlLmdldCgpKTsKKworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgZmluZFN0cmluZ0NhbGxiYWNrKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09i
amVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10s
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAvLyBIYXMgTWFjIGltcGxlbWVudGF0aW9u
LgorICAgIGlmIChhcmd1bWVudENvdW50IDwgMikKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHRhcmdl
dChBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2Vw
dGlvbikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisKKyAgICBKU09iamVjdFJlZiBvcHRp
b25zID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9uKTsK
KyAgICBBU1NFUlQoISpleGNlcHRpb24pOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNv
bnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0
UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihjb250
ZXh0LCBjb250cm9sbGVyLT5maW5kU3RyaW5nKGNvbnRleHQsIHRhcmdldC5nZXQoKSwgb3B0aW9u
cykpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBnb0JhY2tDYWxsYmFjayhKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNp
emVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCit7CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIg
PSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+Z29CYWNrKCk7CisgICAgCisgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBn
cmFudERlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXpl
X3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQoreworICAgIC8vIEhhcyBXaW5kb3dzIGltcGxlbWVudGF0aW9uCisgICAg
aWYgKGFyZ3VtZW50Q291bnQgPCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7CisKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0
YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKKworICAgIGNvbnRyb2xsZXItPmdyYW50RGVza3RvcE5vdGlmaWNhdGlvblBlcm1p
c3Npb24oSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIE5VTEwpKTsK
KyAgICAgICAgCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQor
CitzdGF0aWMgSlNWYWx1ZVJlZiBpc0NvbW1hbmRFbmFibGVkQ2FsbGJhY2soSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQoreworICAgIC8vIEhhcyBNYWMgaW1wbGVtZW50YXRpb24uCisKKyAg
ICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKKworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBuYW1lKEFkb3B0
LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7
CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBj
b250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdl
dFByaXZhdGUodGhpc09iamVjdCkpOworCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihj
b250ZXh0LCBjb250cm9sbGVyLT5pc0NvbW1hbmRFbmFibGVkKG5hbWUuZ2V0KCkpKTsKK30KKwor
c3RhdGljIEpTVmFsdWVSZWYgb3ZlcnJpZGVQcmVmZXJlbmNlQ2FsbGJhY2soSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGlmIChhcmd1bWVudENvdW50IDwgMikKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IGtleShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1
bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHZhbHVlKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNv
bnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9uKSk7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9u
KTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8
TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwor
ICAgIGNvbnRyb2xsZXItPm92ZXJyaWRlUHJlZmVyZW5jZShrZXkuZ2V0KCksIHZhbHVlLmdldCgp
KTsKKworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3Rh
dGljIEpTVmFsdWVSZWYga2VlcFdlYkhpc3RvcnlDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBh
cmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCit7CisgICAgLy8gSGFzIG1hYyBpbXBsZW1lbnRhdGlvbgorICAgIExheW91dFRl
c3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xs
ZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPmtl
ZXBXZWJIaXN0b3J5KCk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVk
SW5mb0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFs
dWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBpZiAoYXJn
dW1lbnRDb3VudCAhPSAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7CisgICAgCisgICAgLy8gSGFzIG1hYyBpbXBsZW1lbnRhdGlvbgorICAgIExheW91dFRl
c3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xs
ZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIHJldHVybiBjb250cm9s
bGVyLT5jb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oY29udGV4dCwgYXJndW1lbnRz
WzBdKTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgbGF5ZXJUcmVlQXNUZXh0Q2FsbGJhY2soSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlz
T2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNb
XSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dzIGlt
cGxlbWVudGF0aW9uCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0
aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2Jq
ZWN0KSk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQsIGNvbnRyb2xsZXIt
PmxheWVyVHJlZUFzVGV4dCgpLmdldCgpKTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgbm90aWZ5
RG9uZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFs
dWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAvLyBIYXMg
bWFjICYgd2luZG93cyBpbXBsZW1lbnRhdGlvbgorICAgIC8vIE1heSBiZSBhYmxlIHRvIGJlIG1h
ZGUgcGxhdGZvcm0gaW5kZXBlbmRhbnQgYnkgdXNpbmcgc2hhcmVkIFdvcmtRdWV1ZQorICAgIExh
eW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENv
bnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xs
ZXItPm5vdGlmeURvbmUoKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7Cit9CisKK3N0YXRpYyBib29sIHBhcnNlUGFnZVBhcmFtZXRlcnMoSlNDb250ZXh0UmVmIGNv
bnRleHQsIGludCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmKiBhcmd1bWVudHMsIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbiwgZmxvYXQmIHBhZ2VXaWR0aEluUGl4ZWxzLCBmbG9hdCYgcGFn
ZUhlaWdodEluUGl4ZWxzKQoreworICAgIHBhZ2VXaWR0aEluUGl4ZWxzID0gTGF5b3V0VGVzdENv
bnRyb2xsZXI6Om1heFZpZXdXaWR0aDsKKyAgICBwYWdlSGVpZ2h0SW5QaXhlbHMgPSBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6bWF4Vmlld0hlaWdodDsKKyAgICBzd2l0Y2ggKGFyZ3VtZW50Q291bnQp
IHsKKyAgICBjYXNlIDI6CisgICAgICAgIHBhZ2VXaWR0aEluUGl4ZWxzID0gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikp
OworICAgICAgICBpZiAoKmV4Y2VwdGlvbikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgcGFnZUhlaWdodEluUGl4ZWxzID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KEpTVmFsdWVUb051
bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbikpOworICAgICAgICBpZiAoKmV4
Y2VwdGlvbikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIDA6IC8vIEZhbGwg
dGhyb3VnaC4KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gQ2FsbGVyIG5lZWRzIHRvIGRl
bGV0ZVtdIHByb3BlcnR5TmFtZS4KK3N0YXRpYyBib29sIHBhcnNlUGFnZVByb3BlcnR5UGFyYW1l
dGVycyhKU0NvbnRleHRSZWYgY29udGV4dCwgaW50IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFs
dWVSZWYqIGFyZ3VtZW50cywgSlNWYWx1ZVJlZiogZXhjZXB0aW9uLCBjaGFyKiYgcHJvcGVydHlO
YW1lLCBpbnQmIHBhZ2VOdW1iZXIpCit7CisgICAgcGFnZU51bWJlciA9IDA7CisgICAgc3dpdGNo
IChhcmd1bWVudENvdW50KSB7CisgICAgY2FzZSAyOgorICAgICAgICBwYWdlTnVtYmVyID0gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4
Y2VwdGlvbikpOworICAgICAgICBpZiAoKmV4Y2VwdGlvbikKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgLy8gRmFsbCB0aHJvdWdoLgorICAgIGNhc2UgMTogeworICAgICAgICBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gcHJvcGVydHlOYW1lU3RyaW5nKEFkb3B0LCBKU1ZhbHVl
VG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7CisgICAgICAg
IGlmICgqZXhjZXB0aW9uKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHNp
emVfdCBtYXhMZW5ndGggPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUocHJvcGVy
dHlOYW1lU3RyaW5nLmdldCgpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lID0gbmV3IGNoYXJbbWF4
TGVuZ3RoICsgMV07CisgICAgICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmcocHJvcGVydHlOYW1l
U3RyaW5nLmdldCgpLCBwcm9wZXJ0eU5hbWUsIG1heExlbmd0aCArIDEpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgY2FzZSAwOgorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sIHBhcnNlUGFnZU51bWJlclNpemVNYXJp
bmdzKEpTQ29udGV4dFJlZiBjb250ZXh0LCBpbnQgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiogYXJndW1lbnRzLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24sIGludCYgcGFnZU51bWJlciwg
aW50JiB3aWR0aCwgaW50JiBoZWlnaHQsIGludCYgbWFyZ2luVG9wLCBpbnQmIG1hcmdpblJpZ2h0
LCBpbnQmIG1hcmdpbkJvdHRvbSwgaW50JiBtYXJnaW5MZWZ0KQoreworICAgIHBhZ2VOdW1iZXIg
PSAwOworICAgIHdpZHRoID0gaGVpZ2h0ID0gMDsKKyAgICBtYXJnaW5Ub3AgPSBtYXJnaW5SaWdo
dCA9IG1hcmdpbkJvdHRvbSA9IG1hcmdpbkxlZnQgPSAwOworCisgICAgc3dpdGNoIChhcmd1bWVu
dENvdW50KSB7CisgICAgY2FzZSA3OgorICAgICAgICBtYXJnaW5MZWZ0ID0gc3RhdGljX2Nhc3Q8
aW50PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzZdLCBleGNlcHRpb24pKTsK
KyAgICAgICAgaWYgKCpleGNlcHRpb24pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIC8vIEZhbGwgdGhyb3VnaC4KKyAgICBjYXNlIDY6CisgICAgICAgIG1hcmdpbkJvdHRvbSA9
IHN0YXRpY19jYXN0PGludD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1s1XSwg
ZXhjZXB0aW9uKSk7CisgICAgICAgIGlmICgqZXhjZXB0aW9uKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAvLyBGYWxsIHRocm91Z2guCisgICAgY2FzZSA1OgorICAgICAgICBt
YXJnaW5SaWdodCA9IHN0YXRpY19jYXN0PGludD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFy
Z3VtZW50c1s0XSwgZXhjZXB0aW9uKSk7CisgICAgICAgIGlmICgqZXhjZXB0aW9uKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBGYWxsIHRocm91Z2guCisgICAgY2FzZSA0
OgorICAgICAgICBtYXJnaW5Ub3AgPSBzdGF0aWNfY2FzdDxpbnQ+KEpTVmFsdWVUb051bWJlcihj
b250ZXh0LCBhcmd1bWVudHNbM10sIGV4Y2VwdGlvbikpOworICAgICAgICBpZiAoKmV4Y2VwdGlv
bikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gRmFsbCB0aHJvdWdoLgor
ICAgIGNhc2UgMzoKKyAgICAgICAgaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihKU1ZhbHVlVG9O
dW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzJdLCBleGNlcHRpb24pKTsKKyAgICAgICAgaWYgKCpl
eGNlcHRpb24pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIEZhbGwgdGhy
b3VnaC4KKyAgICBjYXNlIDI6CisgICAgICAgIHdpZHRoID0gc3RhdGljX2Nhc3Q8aW50PihKU1Zh
bHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pKTsKKyAgICAgICAg
aWYgKCpleGNlcHRpb24pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIEZh
bGwgdGhyb3VnaC4KKyAgICBjYXNlIDE6CisgICAgICAgIHBhZ2VOdW1iZXIgPSBzdGF0aWNfY2Fz
dDxpbnQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikp
OworICAgICAgICBpZiAoKmV4Y2VwdGlvbikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgLy8gRmFsbCB0aHJvdWdoLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBu
dW1iZXJPZlBhZ2VzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1
bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29u
c3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAg
IGZsb2F0IHBhZ2VXaWR0aEluUGl4ZWxzID0gMDsKKyAgICBmbG9hdCBwYWdlSGVpZ2h0SW5QaXhl
bHMgPSAwOworICAgIGlmICghcGFyc2VQYWdlUGFyYW1ldGVycyhjb250ZXh0LCBhcmd1bWVudENv
dW50LCBhcmd1bWVudHMsIGV4Y2VwdGlvbiwgcGFnZVdpZHRoSW5QaXhlbHMsIHBhZ2VIZWlnaHRJ
blBpeGVscykpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
KworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5
b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAg
IHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCBjb250cm9sbGVyLT5udW1iZXJPZlBh
Z2VzKHBhZ2VXaWR0aEluUGl4ZWxzLCBwYWdlSGVpZ2h0SW5QaXhlbHMpKTsKK30KKworc3RhdGlj
IEpTVmFsdWVSZWYgbnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHND
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2Jq
ZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVm
IGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgTGF5b3V0VGVzdENv
bnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+
KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtl
TnVtYmVyKGNvbnRleHQsIGNvbnRyb2xsZXItPm51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3RzKCkpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBwYWdlUHJvcGVydHlD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2Jq
ZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVm
IGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgY2hhciogcHJvcGVy
dHlOYW1lID0gMDsKKyAgICBpbnQgcGFnZU51bWJlciA9IDA7CisgICAgaWYgKCFwYXJzZVBhZ2VQ
cm9wZXJ0eVBhcmFtZXRlcnMoY29udGV4dCwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCBleGNl
cHRpb24sIHByb3BlcnR5TmFtZSwgcGFnZU51bWJlcikpCisgICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250
cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOworICAgIEpTVmFsdWVSZWYgdmFsdWUgPSBKU1ZhbHVlTWFrZVN0
cmluZyhjb250ZXh0LCBjb250cm9sbGVyLT5wYWdlUHJvcGVydHkocHJvcGVydHlOYW1lLCBwYWdl
TnVtYmVyKS5nZXQoKSk7CisKKyAgICBkZWxldGVbXSBwcm9wZXJ0eU5hbWU7CisgICAgcmV0dXJu
IHZhbHVlOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBwYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVs
c0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVS
ZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBpbnQgcGFnZU51
bWJlciA9IDA7CisgICAgaW50IHdpZHRoID0gMCwgaGVpZ2h0ID0gMDsKKyAgICBpbnQgbWFyZ2lu
VG9wID0gMCwgbWFyZ2luUmlnaHQgPSAwLCBtYXJnaW5Cb3R0b20gPSAwLCBtYXJnaW5MZWZ0ID0g
MDsKKyAgICBpZiAoIXBhcnNlUGFnZU51bWJlclNpemVNYXJpbmdzKGNvbnRleHQsIGFyZ3VtZW50
Q291bnQsIGFyZ3VtZW50cywgZXhjZXB0aW9uLCBwYWdlTnVtYmVyLCB3aWR0aCwgaGVpZ2h0LCBt
YXJnaW5Ub3AsIG1hcmdpblJpZ2h0LCBtYXJnaW5Cb3R0b20sIG1hcmdpbkxlZnQpKQorICAgICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBMYXlvdXRUZXN0
Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1h
a2VTdHJpbmcoY29udGV4dCwgY29udHJvbGxlci0+cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMo
cGFnZU51bWJlciwgd2lkdGgsIGhlaWdodCwgbWFyZ2luVG9wLCBtYXJnaW5SaWdodCwgbWFyZ2lu
Qm90dG9tLCBtYXJnaW5MZWZ0KS5nZXQoKSk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHF1ZXVl
QmFja05hdmlnYXRpb25DYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
ZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBj
b25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7Cisg
ICAgLy8gSGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50YXRpb24KKyAgICAvLyBNYXkgYmUgYWJs
ZSB0byBiZSBtYWRlIHBsYXRmb3JtIGluZGVwZW5kYW50IGJ5IHVzaW5nIHNoYXJlZCBXb3JrUXVl
dWUKKyAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIGRvdWJsZSBob3dGYXJCYWNrRG91YmxlID0gSlNW
YWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKTsKKyAgICBBU1NF
UlQoISpleGNlcHRpb24pOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIg
PSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+cXVldWVCYWNrTmF2aWdhdGlvbihzdGF0aWNf
Y2FzdDxpbnQ+KGhvd0ZhckJhY2tEb3VibGUpKTsKKworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVu
ZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgcXVldWVGb3J3YXJkTmF2
aWdhdGlvbkNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlv
biwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpT
VmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAvLyBI
YXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRhdGlvbgorICAgIC8vIE1heSBiZSBhYmxlIHRvIGJl
IG1hZGUgcGxhdGZvcm0gaW5kZXBlbmRhbnQgYnkgdXNpbmcgc2hhcmVkIFdvcmtRdWV1ZQorICAg
IGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOworCisgICAgZG91YmxlIGhvd0ZhckZvcndhcmREb3VibGUgPSBKU1ZhbHVl
VG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOworICAgIEFTU0VSVCgh
KmV4Y2VwdGlvbik7CisKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0
YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5xdWV1ZUZvcndhcmROYXZpZ2F0aW9uKHN0YXRpY19j
YXN0PGludD4oaG93RmFyRm9yd2FyZERvdWJsZSkpOworCisgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBxdWV1ZUxvYWRDYWxs
YmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0
UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFy
Z3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgLy8gSGFzIG1hYyAmIHdp
bmRvd3MgaW1wbGVtZW50YXRpb24KKyAgICAvLyBNYXkgYmUgYWJsZSB0byBiZSBtYWRlIHBsYXRm
b3JtIGluZGVwZW5kYW50IGJ5IHVzaW5nIHNoYXJlZCBXb3JrUXVldWUKKyAgICBpZiAoYXJndW1l
bnRDb3VudCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKKworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB1cmwoQWRvcHQsIEpTVmFsdWVUb1N0
cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKKyAgICBBU1NFUlQo
ISpleGNlcHRpb24pOworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHRhcmdldDsKKyAg
ICBpZiAoYXJndW1lbnRDb3VudCA+PSAyKSB7CisgICAgICAgIHRhcmdldC5hZG9wdChKU1ZhbHVl
VG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9uKSk7CisgICAgICAg
IEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgfSBlbHNlCisgICAgICAgIHRhcmdldC5hZG9wdChK
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOworCisgICAgTGF5b3V0VGVzdENvbnRy
b2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpT
T2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+cXVldWVMb2Fk
KHVybC5nZXQoKSwgdGFyZ2V0LmdldCgpKTsKKworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgcXVldWVMb2FkSFRNTFN0cmlu
Z0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVS
ZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAvLyBIYXMgTWFj
ICYgV2luZG93cyBpbXBsZW1lbnRhdGlvbgorICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IGNvbnRlbnQoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29u
dGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKKyAgICBBU1NFUlQoISpleGNlcHRpb24p
OworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGJhc2VVUkw7CisgICAgaWYgKGFyZ3Vt
ZW50Q291bnQgPj0gMikgeworICAgICAgICBiYXNlVVJMLmFkb3B0KEpTVmFsdWVUb1N0cmluZ0Nv
cHkoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pKTsKKyAgICAgICAgQVNTRVJUKCEq
ZXhjZXB0aW9uKTsKKyAgICB9IGVsc2UKKyAgICAgICAgYmFzZVVSTC5hZG9wdChKU1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNv
bnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0
UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisKKyAgICBpZiAoYXJndW1lbnRDb3VudCA+PSAzKSB7Cisg
ICAgICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB1bnJlYWNoYWJsZVVSTDsKKyAgICAgICAg
dW5yZWFjaGFibGVVUkwuYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVu
dHNbMl0sIGV4Y2VwdGlvbikpOworICAgICAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgICAg
ICBjb250cm9sbGVyLT5xdWV1ZUxvYWRBbHRlcm5hdGVIVE1MU3RyaW5nKGNvbnRlbnQuZ2V0KCks
IGJhc2VVUkwuZ2V0KCksIHVucmVhY2hhYmxlVVJMLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KKworICAgIGNvbnRyb2xsZXItPnF1
ZXVlTG9hZEhUTUxTdHJpbmcoY29udGVudC5nZXQoKSwgYmFzZVVSTC5nZXQoKSk7CisgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJl
ZiBxdWV1ZVJlbG9hZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBm
dW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNv
bnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAg
ICAvLyBIYXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRhdGlvbgorICAgIC8vIE1heSBiZSBhYmxl
IHRvIGJlIG1hZGUgcGxhdGZvcm0gaW5kZXBlbmRhbnQgYnkgdXNpbmcgc2hhcmVkIFdvcmtRdWV1
ZQorCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxM
YXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Cisg
ICAgY29udHJvbGxlci0+cXVldWVSZWxvYWQoKTsKKworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVu
ZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgcXVldWVMb2FkaW5nU2Ny
aXB0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIC8vIEhhcyBt
YWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCisgICAgLy8gTWF5IGJlIGFibGUgdG8gYmUgbWFk
ZSBwbGF0Zm9ybSBpbmRlcGVuZGFudCBieSB1c2luZyBzaGFyZWQgV29ya1F1ZXVlCisgICAgaWYg
KGFyZ3VtZW50Q291bnQgPCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc2NyaXB0KEFkb3B0LCBK
U1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7Cisg
ICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250
cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnF1ZXVlTG9hZGluZ1NjcmlwdChz
Y3JpcHQuZ2V0KCkpOworCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBxdWV1ZU5vbkxvYWRpbmdTY3JpcHRDYWxsYmFjayhK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRo
aXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50
c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgLy8gSGFzIG1hYyAmIHdpbmRvd3Mg
aW1wbGVtZW50YXRpb24KKyAgICAvLyBNYXkgYmUgYWJsZSB0byBiZSBtYWRlIHBsYXRmb3JtIGlu
ZGVwZW5kYW50IGJ5IHVzaW5nIHNoYXJlZCBXb3JrUXVldWUKKyAgICBpZiAoYXJndW1lbnRDb3Vu
dCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKwor
ICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzY3JpcHQoQWRvcHQsIEpTVmFsdWVUb1N0cmlu
Z0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKKyAgICBBU1NFUlQoISpl
eGNlcHRpb24pOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0
aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2Jq
ZWN0KSk7CisgICAgY29udHJvbGxlci0+cXVldWVOb25Mb2FkaW5nU2NyaXB0KHNjcmlwdC5nZXQo
KSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0
YXRpYyBKU1ZhbHVlUmVmIHNldEFjY2VwdHNFZGl0aW5nQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXpl
X3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQoreworICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9u
CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7CisKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxl
ciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRl
KHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5zZXRBY2NlcHRzRWRpdGluZyhKU1ZhbHVl
VG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOworCisgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBzZXRBbHdheXNB
Y2NlcHRDb29raWVzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1
bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29u
c3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAg
IC8vIEhhcyBtYWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCisgICAgaWYgKGFyZ3VtZW50Q291
bnQgPCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisK
KyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91
dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBj
b250cm9sbGVyLT5zZXRBbHdheXNBY2NlcHRDb29raWVzKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4
dCwgYXJndW1lbnRzWzBdKSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNldEFwcENhY2hlTWF4aW11bVNpemVDYWxs
YmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0
UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFy
Z3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgLy8gSGFzIG1hYyBpbXBs
ZW1lbnRhdGlvbgorICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIq
IGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisKKyAgICBkb3VibGUgc2l6ZSA9IEpTVmFsdWVUb051
bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0sIE5VTEwpOworICAgIGlmICghaXNuYW4oc2l6ZSkp
CisgICAgICAgIGNvbnRyb2xsZXItPnNldEFwcENhY2hlTWF4aW11bVNpemUoc3RhdGljX2Nhc3Q8
dW5zaWduZWQgbG9uZyBsb25nPihzaXplKSk7CisgICAgICAgIAorICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgc2V0QXBwbGlj
YXRpb25DYWNoZU9yaWdpblF1b3RhQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2Jq
ZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRD
b3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQoreworICAgIC8vIEhhcyBtYWMgaW1wbGVtZW50YXRpb24KKyAgICBpZiAoYXJndW1lbnRDb3Vu
dCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKwor
ICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0
VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworCisgICAg
ZG91YmxlIHNpemUgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBOVUxM
KTsKKyAgICBpZiAoIWlzbmFuKHNpemUpKQorICAgICAgICBjb250cm9sbGVyLT5zZXRBcHBsaWNh
dGlvbkNhY2hlT3JpZ2luUXVvdGEoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihzaXpl
KSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0
YXRpYyBKU1ZhbHVlUmVmIHNldEF1dGhlbnRpY2F0aW9uUGFzc3dvcmRDYWxsYmFjayhKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmpl
Y3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgLy8gSGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVt
ZW50YXRpb24KKyAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCisgICAgICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBwYXNzd29yZChBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNb
MF0sIGV4Y2VwdGlvbikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisKKyAgICBzaXplX3Qg
bWF4TGVuZ3RoID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKHBhc3N3b3JkLmdl
dCgpKTsKKyAgICBjaGFyKiBwYXNzd29yZEJ1ZmZlciA9IG5ldyBjaGFyW21heExlbmd0aCArIDFd
OworICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmcocGFzc3dvcmQuZ2V0KCksIHBhc3N3b3JkQnVm
ZmVyLCBtYXhMZW5ndGggKyAxKTsKKyAgICAKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29u
dHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQ
cml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5zZXRBdXRoZW50aWNhdGlvblBh
c3N3b3JkKHBhc3N3b3JkQnVmZmVyKTsKKyAgICBkZWxldGVbXSBwYXNzd29yZEJ1ZmZlcjsKKwor
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpT
VmFsdWVSZWYgc2V0QXV0aGVudGljYXRpb25Vc2VybmFtZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6
ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAvLyBIYXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRhdGlv
bgorICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHVzZXJu
YW1lKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhj
ZXB0aW9uKSk7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKworICAgIHNpemVfdCBtYXhMZW5n
dGggPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUodXNlcm5hbWUuZ2V0KCkpOwor
ICAgIGNoYXIqIHVzZXJuYW1lQnVmZmVyID0gbmV3IGNoYXJbbWF4TGVuZ3RoICsgMV07CisgICAg
SlNTdHJpbmdHZXRVVEY4Q1N0cmluZyh1c2VybmFtZS5nZXQoKSwgdXNlcm5hbWVCdWZmZXIsIG1h
eExlbmd0aCArIDEpOworICAgIAorICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVy
ID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUo
dGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldEF1dGhlbnRpY2F0aW9uVXNlcm5hbWUo
dXNlcm5hbWVCdWZmZXIpOworICAgIGRlbGV0ZVtdIHVzZXJuYW1lQnVmZmVyOworCisgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJl
ZiBzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90
IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikKK3sKKyAgICAvLyBIYXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRhdGlvbgor
ICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIg
PSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJs
ZWQoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pKTsKKworICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYg
c2V0QXV0b2ZpbGxlZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBm
dW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNv
bnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAg
ICBpZiAoYXJndW1lbnRDb3VudCAhPSAyIHx8ICFhcmd1bWVudHNbMF0pCisgICAgICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIExheW91dFRlc3RDb250cm9s
bGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09i
amVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldEF1dG9maWxs
ZWQoY29udGV4dCwgYXJndW1lbnRzWzBdLCBKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3Vt
ZW50c1sxXSkpOworCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwor
fQorCitzdGF0aWMgSlNWYWx1ZVJlZiBzZXRDYWNoZU1vZGVsQ2FsbGJhY2soSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQoreworICAgIC8vIEhhcyBNYWMgaW1wbGVtZW50YXRpb24uCisgICAg
aWYgKGFyZ3VtZW50Q291bnQgPCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7CisKKyAgICBpbnQgY2FjaGVNb2RlbCA9IEpTVmFsdWVUb051bWJlcihjb250
ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsK
KworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5
b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAg
IGNvbnRyb2xsZXItPnNldENhY2hlTW9kZWwoY2FjaGVNb2RlbCk7CisKKyAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNldEN1
c3RvbVBvbGljeURlbGVnYXRlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3Vu
dCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQor
eworICAgIC8vIEhhcyBtYWMgaW1wbGVtZW50YXRpb24KKyAgICBpZiAoYXJndW1lbnRDb3VudCA8
IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICAK
KyAgICBib29sIHBlcm1pc3NpdmUgPSBmYWxzZTsKKyAgICBpZiAoYXJndW1lbnRDb3VudCA+PSAy
KQorICAgICAgICBwZXJtaXNzaXZlID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVu
dHNbMV0pOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNf
Y2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0
KSk7CisgICAgY29udHJvbGxlci0+c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoSlNWYWx1ZVRvQm9v
bGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pLCBwZXJtaXNzaXZlKTsKKworICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgc2V0
RGF0YWJhc2VRdW90YUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBm
dW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNv
bnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAg
ICAvLyBIYXMgbWFjIGltcGxlbWVudGF0aW9uCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQor
ICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBMYXlv
dXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250
cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKworICAgIGRvdWJsZSBx
dW90YSA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0sIE5VTEwpOworICAg
IGlmICghaXNuYW4ocXVvdGEpKQorICAgICAgICBjb250cm9sbGVyLT5zZXREYXRhYmFzZVF1b3Rh
KHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4ocXVvdGEpKTsKKyAgICAgICAgCisgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1
ZVJlZiBzZXREZWZlck1haW5SZXNvdXJjZURhdGFMb2FkQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXpl
X3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQoreworICAgIC8vIEhhcyBNYWMgYW5kIFdpbmRvd3MgaW1wbGVtZW50YXRp
b24KKyAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9s
bGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldERlZmVyTWFpblJlc291cmNlRGF0
YUxvYWQoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pKTsKKworICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVS
ZWYgc2V0RGVmZXJzTG9hZGluZ0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVj
dFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
K3sKKyAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9s
bGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldERlZmVyc0xvYWRpbmcoSlNWYWx1
ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pKTsKKworICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgc2V0VXNlRGVm
ZXJyZWRGcmFtZUxvYWRpbmdDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50
LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7
CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7CisKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxl
ciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRl
KHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5zZXRVc2VEZWZlcnJlZEZyYW1lTG9hZGlu
ZyhKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOworCisgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBz
ZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lQ2FsbGJhY2soSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0
LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIC8vIEhhcyBNYWMgYW5kIFdpbmRvd3MgaW1wbGVt
ZW50YXRpb24KKyAgICBpZiAoYXJndW1lbnRDb3VudCA8IDIpCisgICAgICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBj
b250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdl
dFByaXZhdGUodGhpc09iamVjdCkpOworCisgICAgYm9vbCBmb3JiaWRkZW4gPSBKU1ZhbHVlVG9C
b29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSk7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IHNjaGVtZShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNb
MV0sIDApKTsKKyAgICBjb250cm9sbGVyLT5zZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9y
VVJMU2NoZW1lKGZvcmJpZGRlbiwgc2NoZW1lLmdldCgpKTsKKworICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgc2V0TW9ja0Rl
dmljZU9yaWVudGF0aW9uQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
IGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwg
Y29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorewor
ICAgIGlmIChhcmd1bWVudENvdW50IDwgNikKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOworCisgICAgYm9vbCBjYW5Qcm92aWRlQWxwaGEgPSBKU1ZhbHVlVG9C
b29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSk7CisgICAgZG91YmxlIGFscGhhID0gSlNWYWx1
ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9uKTsKKyAgICBBU1NFUlQo
ISpleGNlcHRpb24pOworICAgIGJvb2wgY2FuUHJvdmlkZUJldGEgPSBKU1ZhbHVlVG9Cb29sZWFu
KGNvbnRleHQsIGFyZ3VtZW50c1syXSk7CisgICAgZG91YmxlIGJldGEgPSBKU1ZhbHVlVG9OdW1i
ZXIoY29udGV4dCwgYXJndW1lbnRzWzNdLCBleGNlcHRpb24pOworICAgIEFTU0VSVCghKmV4Y2Vw
dGlvbik7CisgICAgYm9vbCBjYW5Qcm92aWRlR2FtbWEgPSBKU1ZhbHVlVG9Cb29sZWFuKGNvbnRl
eHQsIGFyZ3VtZW50c1s0XSk7CisgICAgZG91YmxlIGdhbW1hID0gSlNWYWx1ZVRvTnVtYmVyKGNv
bnRleHQsIGFyZ3VtZW50c1s1XSwgZXhjZXB0aW9uKTsKKyAgICBBU1NFUlQoISpleGNlcHRpb24p
OworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSByZWludGVycHJldF9j
YXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3Qp
KTsKKyAgICBjb250cm9sbGVyLT5zZXRNb2NrRGV2aWNlT3JpZW50YXRpb24oY2FuUHJvdmlkZUFs
cGhhLCBhbHBoYSwgY2FuUHJvdmlkZUJldGEsIGJldGEsIGNhblByb3ZpZGVHYW1tYSwgZ2FtbWEp
OworCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0
aWMgSlNWYWx1ZVJlZiBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbkNhbGxiYWNrKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBpZiAoYXJndW1lbnRDb3VudCA8IDMpCisgICAg
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIExheW91dFRl
c3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gcmVpbnRlcnByZXRfY2FzdDxMYXlvdXRUZXN0Q29u
dHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxl
ci0+c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFy
Z3VtZW50c1swXSwgTlVMTCksICAvLyBsYXRpdHVkZQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMV0s
IE5VTEwpLCAgLy8gbG9uZ2l0dWRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1syXSwgTlVMTCkpOyAg
Ly8gYWNjdXJhY3kKKworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
K30KKworc3RhdGljIEpTVmFsdWVSZWYgc2V0TW9ja0dlb2xvY2F0aW9uRXJyb3JDYWxsYmFjayhK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRo
aXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50
c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAy
KQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBp
bnQgY29kZSA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0sIE5VTEwpOwor
ICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBtZXNzYWdlKEFkb3B0LCBKU1ZhbHVlVG9TdHJp
bmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9uKSk7CisgICAgQVNTRVJUKCEq
ZXhjZXB0aW9uKTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gcmVp
bnRlcnByZXRfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+c2V0TW9ja0dlb2xvY2F0aW9uRXJyb3IoY29k
ZSwgbWVzc2FnZS5nZXQoKSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdENh
bGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYg
YXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBpZiAoYXJndW1lbnRD
b3VudCA8IDMpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
KworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiByZXN1bHQoQWRvcHQsIEpTVmFsdWVUb1N0
cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKKyAgICBBU1NFUlQo
ISpleGNlcHRpb24pOworCisgICAgZG91YmxlIGNvbmZpZGVuY2UgPSBKU1ZhbHVlVG9OdW1iZXIo
Y29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pOworCisgICAgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IGxhbmd1YWdlKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFy
Z3VtZW50c1syXSwgZXhjZXB0aW9uKSk7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKworICAg
IExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVz
dENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRy
b2xsZXItPmFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdChyZXN1bHQuZ2V0KCksIGNvbmZpZGVuY2Us
IGxhbmd1YWdlLmdldCgpKTsKKworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgc2V0TW9ja1NwZWVjaElucHV0RHVtcFJlY3RD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2Jq
ZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVm
IGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKGFyZ3VtZW50
Q291bnQgPCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
CisKKyAgICBib29sIGR1bXBSZWN0ID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVu
dHNbMF0pOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNf
Y2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0
KSk7CisgICAgY29udHJvbGxlci0+c2V0TW9ja1NwZWVjaElucHV0RHVtcFJlY3QoZHVtcFJlY3Qp
OworCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0
aWMgSlNWYWx1ZVJlZiBzZXROZXdXaW5kb3dzQ29weUJhY2tGb3J3YXJkTGlzdENhbGxiYWNrKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhp
c09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRz
W10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAvLyBIYXMgbWFjIGltcGxlbWVudGF0
aW9uCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNv
bnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0
UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+c2V0TmV3V2luZG93c0NvcHlC
YWNrRm9yd2FyZExpc3QoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pKTsK
KworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGlj
IEpTVmFsdWVSZWYgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uQ2FsbGJhY2soSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQoreworICAgIC8vIEhhcyBtYWMgaW1wbGVtZW50YXRpb24KKyAgICBp
ZiAoYXJndW1lbnRDb3VudCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3Rh
dGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09i
amVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihKU1ZhbHVl
VG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOworCisgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBzZXRIYW5kbGVz
QXV0aGVudGljYXRpb25DaGFsbGVuZ2VzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQoreworICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCisgICAgaWYg
KGFyZ3VtZW50Q291bnQgPCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7CisKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRp
Y19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmpl
Y3QpKTsKKyAgICBjb250cm9sbGVyLT5zZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2Vz
KEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7CisKKyAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNl
dFBPU0lYTG9jYWxlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1
bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29u
c3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAg
IGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBz
dGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlz
T2JqZWN0KSk7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGxvY2FsZShBZG9wdCwgSlNW
YWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAg
IEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgY29udHJvbGxlci0+c2V0UE9TSVhMb2NhbGUobG9j
YWxlLmdldCgpKTsKKworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
K30KKworc3RhdGljIEpTVmFsdWVSZWYgc2V0SWNvbkRhdGFiYXNlRW5hYmxlZENhbGxiYWNrKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhp
c09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRz
W10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAvLyBIYXMgbWFjICYgd2luZG93cyBp
bXBsZW1lbnRhdGlvbgorICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xs
ZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+c2V0SWNvbkRhdGFi
YXNlRW5hYmxlZChKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOworCisg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNW
YWx1ZVJlZiBzZXRNYWluRnJhbWVJc0ZpcnN0UmVzcG9uZGVyQ2FsbGJhY2soSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQoreworICAgIC8vIEhhcyBtYWMgaW1wbGVtZW50YXRpb24KKyAgICBp
ZiAoYXJndW1lbnRDb3VudCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3Rh
dGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09i
amVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25kZXIoSlNW
YWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pKTsKKworICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgc2V0UGVy
c2lzdGVudFVzZXJTdHlsZVNoZWV0TG9jYXRpb25DYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBh
cmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCit7CisgICAgLy8gSGFzIG1hYyBpbXBsZW1lbnRhdGlvbgorICAgIGlmIChhcmd1
bWVudENvdW50IDwgMSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHBhdGgoQWRvcHQsIEpTVmFsdWVU
b1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKKyAgICBBU1NF
UlQoISpleGNlcHRpb24pOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIg
PSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+c2V0UGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0
TG9jYXRpb24ocGF0aC5nZXQoKSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNldFByaXZhdGVCcm93c2luZ0VuYWJs
ZWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpT
T2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVl
UmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgLy8gSGFzIG1h
YyAmIHdpbmRvd3MgaW1wbGVtZW50YXRpb24KKyAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCisg
ICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIExheW91
dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRy
b2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXIt
PnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1
bWVudHNbMF0pKTsKKworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
K30KKworc3RhdGljIEpTVmFsdWVSZWYgc2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZENh
bGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYg
YXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAvLyBIYXMgbWFjICYg
d2luZG93cyBpbXBsZW1lbnRhdGlvbgorICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgTGF5b3V0VGVz
dENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxl
cio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+c2V0
SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFy
Z3VtZW50c1swXSkpOworCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBzZXRYU1NBdWRpdG9yRW5hYmxlZENhbGxiYWNrKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhp
c09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRz
W10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAvLyBIYXMgbWFjICYgd2luZG93cyBp
bXBsZW1lbnRhdGlvbgorICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xs
ZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+c2V0WFNTQXVkaXRv
ckVuYWJsZWQoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pKTsKKworICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFs
dWVSZWYgc2V0U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXpl
X3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQoreworICAgIC8vIEhhcyBtYWMgaW1wbGVtZW50YXRpb24uCisgICAgaWYg
KGFyZ3VtZW50Q291bnQgPCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7CisKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRp
Y19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmpl
Y3QpKTsKKyAgICBjb250cm9sbGVyLT5zZXRTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoSlNWYWx1
ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pKTsKKworICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgc2V0UHJpbnRp
bmdDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpT
T2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVl
UmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgTGF5b3V0VGVz
dENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxl
cio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+c2V0
SXNQcmludGluZyh0cnVlKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7Cit9CisKKworc3RhdGljIEpTVmFsdWVSZWYgc2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZENh
bGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYg
YXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAvLyBIYXMgbWFjICYg
d2luZG93cyBpbXBsZW1lbnRhdGlvbgorICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgTGF5b3V0VGVz
dENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxl
cio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+c2V0
RnJhbWVGbGF0dGVuaW5nRW5hYmxlZChKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50
c1swXSkpOworCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQor
CitzdGF0aWMgSlNWYWx1ZVJlZiBzZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMc0Nh
bGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYg
YXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAvLyBIYXMgbWFjICYg
d2luZG93cyBpbXBsZW1lbnRhdGlvbgorICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgTGF5b3V0VGVz
dENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxl
cio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+c2V0
QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0
LCBhcmd1bWVudHNbMF0pKTsKKworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgc2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVV
UkxzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIC8vIEhhcyBt
YWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQor
ICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBMYXlv
dXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250
cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVy
LT5zZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0
LCBhcmd1bWVudHNbMF0pKTsKKworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgc2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1l
bnRzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIC8vIEhhcyBt
YWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQor
ICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBMYXlv
dXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250
cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVy
LT5zZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0
LCBhcmd1bWVudHNbMF0pKTsKKworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgc2V0VXNlRGFzaGJvYXJkQ29tcGF0aWJpbGl0
eU1vZGVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24s
IEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1Zh
bHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgLy8gSGFz
IG1hYyBpbXBsZW1lbnRhdGlvbgorICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgTGF5b3V0VGVzdENv
bnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+
KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+c2V0VXNl
RGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1
bWVudHNbMF0pKTsKKworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
K30KKworc3RhdGljIEpTVmFsdWVSZWYgc2V0VXNlclN0eWxlU2hlZXRFbmFibGVkQ2FsbGJhY2so
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0
aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVu
dHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIC8vIEhhcyBtYWMgaW1wbGVtZW50
YXRpb24KKyAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250
cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldFVzZXJTdHlsZVNoZWV0RW5h
YmxlZChKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOworCisgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJl
ZiBzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQoreworICAgIC8vIEhhcyBtYWMgaW1wbGVtZW50YXRpb24KKyAgICBpZiAoYXJndW1l
bnRDb3VudCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKKworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBwYXRoKEFkb3B0LCBKU1ZhbHVlVG9T
dHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7CisgICAgQVNTRVJU
KCEqZXhjZXB0aW9uKTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0g
c3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhp
c09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24ocGF0
aC5nZXQoKSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9
CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNldFZhbHVlRm9yVXNlckNhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAvLyBIYXMgbWFjIGltcGxlbWVudGF0aW9uCisgICAg
aWYgKGFyZ3VtZW50Q291bnQgIT0gMikKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHZhbHVlKEFkb3B0
LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9uKSk7
CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBj
b250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdl
dFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldFZhbHVlRm9yVXNlcihj
b250ZXh0LCBhcmd1bWVudHNbMF0sIHZhbHVlLmdldCgpKTsKKworICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgc2V0Vmlld01v
ZGVNZWRpYUZlYXR1cmVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
ZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBj
b25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7Cisg
ICAgLy8gSGFzIG1hYyBpbXBsZW1lbnRhdGlvbgorICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG1vZGUoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29u
dGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKKyAgICBBU1NFUlQoISpleGNlcHRpb24p
OworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxM
YXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Cisg
ICAgY29udHJvbGxlci0+c2V0Vmlld01vZGVNZWRpYUZlYXR1cmUobW9kZS5nZXQoKSk7CisKKyAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1Zh
bHVlUmVmIHNldFdpbGxTZW5kUmVxdWVzdENsZWFySGVhZGVyQ2FsbGJhY2soSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQoreworICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dzIGltcGxlbWVudGF0
aW9uCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gaGVh
ZGVyKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhj
ZXB0aW9uKSk7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKworICAgIHNpemVfdCBtYXhMZW5n
dGggPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoaGVhZGVyLmdldCgpKTsKKyAg
ICBPd25BcnJheVB0cjxjaGFyPiBoZWFkZXJCdWZmZXIgPSBhZG9wdEFycmF5UHRyKG5ldyBjaGFy
W21heExlbmd0aCArIDFdKTsKKyAgICBKU1N0cmluZ0dldFVURjhDU3RyaW5nKGhlYWRlci5nZXQo
KSwgaGVhZGVyQnVmZmVyLmdldCgpLCBtYXhMZW5ndGggKyAxKTsKKworICAgIExheW91dFRlc3RD
b250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIq
PihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldFdp
bGxTZW5kUmVxdWVzdENsZWFySGVhZGVyKGhlYWRlckJ1ZmZlci5nZXQoKSk7CisKKyAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVm
IHNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQoreworICAgIC8vIEhhcyBjcm9zcy1wbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbgor
ICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIg
PSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+c2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051
bGwoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pKTsKKworICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYg
c2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0Q2FsbGJhY2soSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0
LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIC8vIEhhcyBjcm9zcy1wbGF0Zm9ybSBpbXBsZW1l
bnRhdGlvbgorICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNv
bnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0
UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+c2V0V2lsbFNlbmRSZXF1ZXN0
UmV0dXJuc051bGxPblJlZGlyZWN0KEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRz
WzBdKSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisK
K3N0YXRpYyBKU1ZhbHVlUmVmIHNldFdpbmRvd0lzS2V5Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXpl
X3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQoreworICAgIC8vIEhhcyBtYWMgaW1wbGVtZW50YXRpb24KKyAgICBpZiAo
YXJndW1lbnRDb3VudCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGlj
X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOworICAgIGNvbnRyb2xsZXItPnNldFdpbmRvd0lzS2V5KEpTVmFsdWVUb0Jvb2xlYW4oY29u
dGV4dCwgYXJndW1lbnRzWzBdKSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHdhaXRVbnRpbERvbmVDYWxsYmFjayhK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRo
aXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50
c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgLy8gSGFzIG1hYyAmIHdpbmRvd3Mg
aW1wbGVtZW50YXRpb24KKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0
YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5zZXRXYWl0VG9EdW1wKHRydWUpOworCisgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJl
ZiB3aW5kb3dDb3VudENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBm
dW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNv
bnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAg
ICAvLyBIYXMgbWFjIGltcGxlbWVudGF0aW9uCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNv
bnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0
UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgaW50IHdpbmRvd3MgPSBjb250cm9sbGVyLT53aW5k
b3dDb3VudCgpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCB3aW5kb3dz
KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgc2V0UG9wdXBCbG9ja2luZ0VuYWJsZWRDYWxsYmFj
ayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVm
IHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3Vt
ZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgLy8gSGFzIG1hYyAmIHdpbmRv
d3MgaW1wbGVtZW50YXRpb24KKyAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCisgICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIExheW91dFRlc3RDb250
cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihK
U09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldFBvcHVw
QmxvY2tpbmdFbmFibGVkKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7
CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRp
YyBKU1ZhbHVlUmVmIHNldFBsdWdpbnNFbmFibGVkQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQoreworICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCisg
ICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7CisgICAgCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xs
ZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0
ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+c2V0UGx1Z2luc0VuYWJsZWQoSlNWYWx1
ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pKTsKKyAgICAKKyAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9ICAgIAorCitzdGF0aWMgSlNWYWx1ZVJlZiBz
ZXRQYWdlVmlzaWJpbGl0eUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQs
IGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sK
KyAgICAvLyBIYXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRhdGlvbgorICAgIGlmIChhcmd1bWVu
dENvdW50IDwgMSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHZpc2liaWxpdHkoQWRvcHQsIEpTVmFs
dWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKKyAgICBB
U1NFUlQoISpleGNlcHRpb24pOworCisgICAgc2l6ZV90IG1heExlbmd0aCA9IEpTU3RyaW5nR2V0
TWF4aW11bVVURjhDU3RyaW5nU2l6ZSh2aXNpYmlsaXR5LmdldCgpKTsKKyAgICBjaGFyKiB2aXNp
YmlsaXR5QnVmZmVyID0gbmV3IGNoYXJbbWF4TGVuZ3RoICsgMV07CisgICAgSlNTdHJpbmdHZXRV
VEY4Q1N0cmluZyh2aXNpYmlsaXR5LmdldCgpLCB2aXNpYmlsaXR5QnVmZmVyLCBtYXhMZW5ndGgg
KyAxKTsKKyAgICAKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRp
Y19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmpl
Y3QpKTsKKyAgICBjb250cm9sbGVyLT5zZXRQYWdlVmlzaWJpbGl0eSh2aXNpYmlsaXR5QnVmZmVy
KTsKKyAgICBkZWxldGVbXSB2aXNpYmlsaXR5QnVmZmVyOworICAgIAorICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30gICAgCisKK3N0YXRpYyBKU1ZhbHVlUmVmIHJl
c2V0UGFnZVZpc2liaWxpdHlDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50
LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7
CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlv
dXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAg
Y29udHJvbGxlci0+cmVzZXRQYWdlVmlzaWJpbGl0eSgpOworICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKK30gICAgCisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNldFNtYXJ0
SW5zZXJ0RGVsZXRlRW5hYmxlZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVj
dFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
K3sKKyAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9s
bGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5h
YmxlZChKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOworICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYg
c2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVf
dCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCit7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQorICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBMYXlvdXRUZXN0Q29udHJv
bGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNP
YmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5zZXRBdXRvbWF0
aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZChKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50
c1swXSkpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKwor
c3RhdGljIEpTVmFsdWVSZWYgc2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZENhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJn
dW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBpZiAoYXJndW1lbnRDb3Vu
dCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKwor
ICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0
VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNv
bnRyb2xsZXItPnNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoSlNWYWx1ZVRvQm9v
bGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNldFN0b3BQcm92aXNpb25h
bEZyYW1lTG9hZHNDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVu
Y3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25z
dCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAg
TGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0
Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJv
bGxlci0+c2V0U3RvcFByb3Zpc2lvbmFsRnJhbWVMb2Fkcyh0cnVlKTsKKyAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNldEFz
eW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQoreworICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xs
ZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+c2V0QXN5bmNocm9u
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVu
dHNbMF0pKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisK
K3N0YXRpYyBKU1ZhbHVlUmVmIHNob3dXZWJJbnNwZWN0b3JDYWxsYmFjayhKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNp
emVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCit7CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIg
PSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+c2hvd1dlYkluc3BlY3RvcigpOworICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVS
ZWYgY2xvc2VXZWJJbnNwZWN0b3JDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmpl
Y3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENv
dW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
Cit7CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxM
YXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Cisg
ICAgY29udHJvbGxlci0+Y2xvc2VXZWJJbnNwZWN0b3IoKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGV2YWx1YXRlSW5X
ZWJJbnNwZWN0b3JDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVu
Y3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25z
dCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAg
TGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0
Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgZG91Ymxl
IGNhbGxJZCA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlv
bik7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gc2NyaXB0KEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1sx
XSwgZXhjZXB0aW9uKSk7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKworICAgIGNvbnRyb2xs
ZXItPmV2YWx1YXRlSW5XZWJJbnNwZWN0b3Ioc3RhdGljX2Nhc3Q8bG9uZz4oY2FsbElkKSwgc2Ny
aXB0LmdldCgpKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9
CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQ2FsbGJh
Y2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJl
ZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1
bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIExheW91dFRlc3RDb250cm9s
bGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09i
amVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGRvdWJsZSB3b3JsZElEID0gSlNWYWx1
ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKTsKKyAgICBBU1NFUlQo
ISpleGNlcHRpb24pOworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzY3JpcHQoQWRvcHQs
IEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pKTsK
KyAgICBBU1NFUlQoISpleGNlcHRpb24pOworCisgICAgY29udHJvbGxlci0+ZXZhbHVhdGVTY3Jp
cHRJbklzb2xhdGVkV29ybGQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHdvcmxkSUQpLCBKU0NvbnRl
eHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCksIHNjcmlwdC5nZXQoKSk7CisgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBldmFs
dWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlQ2FsbGJhY2soSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0
LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9s
bGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOworICAgIGRvdWJsZSB3b3JsZElEID0gSlNWYWx1ZVRvTnVtYmVyKGNv
bnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKTsKKyAgICBBU1NFUlQoISpleGNlcHRpb24p
OworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzY3JpcHQoQWRvcHQsIEpTVmFsdWVUb1N0
cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pKTsKKyAgICBBU1NFUlQo
ISpleGNlcHRpb24pOworCisgICAgY29udHJvbGxlci0+ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVk
V29ybGRBbmRSZXR1cm5WYWx1ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4od29ybGRJRCksIEpTQ29u
dGV4dEdldEdsb2JhbE9iamVjdChjb250ZXh0KSwgc2NyaXB0LmdldCgpKTsKKyAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGVs
ZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZENhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxl
ciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRl
KHRoaXNPYmplY3QpKTsKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gZWxlbWVudElkKEFk
b3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9u
KSk7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKworICAgIGJvb2wgYXV0b0NvbXBsZXRlcyA9
IGNvbnRyb2xsZXItPmVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZChlbGVt
ZW50SWQuZ2V0KCkpOworCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCBh
dXRvQ29tcGxldGVzKTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgcGF1c2VBbmltYXRpb25BdFRp
bWVPbkVsZW1lbnRXaXRoSWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50
LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7
CisgICAgaWYgKGFyZ3VtZW50Q291bnQgIT0gMykKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGFuaW1h
dGlvbk5hbWUoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBd
LCBleGNlcHRpb24pKTsKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIGRvdWJsZSB0aW1l
ID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9uKTsKKyAg
ICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBlbGVt
ZW50SWQoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzJdLCBl
eGNlcHRpb24pKTsKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworCisgICAgTGF5b3V0VGVzdENv
bnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+
KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtl
Qm9vbGVhbihjb250ZXh0LCBjb250cm9sbGVyLT5wYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVu
dFdpdGhJZChhbmltYXRpb25OYW1lLmdldCgpLCB0aW1lLCBlbGVtZW50SWQuZ2V0KCkpKTsKK30K
Kworc3RhdGljIEpTVmFsdWVSZWYgcGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElk
Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09i
amVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJl
ZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGlmIChhcmd1bWVu
dENvdW50ICE9IDMpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKKworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBwcm9wZXJ0eU5hbWUoQWRvcHQsIEpT
VmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKKyAg
ICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIGRvdWJsZSB0aW1lID0gSlNWYWx1ZVRvTnVtYmVy
KGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9uKTsKKyAgICBBU1NFUlQoISpleGNlcHRp
b24pOworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBlbGVtZW50SWQoQWRvcHQsIEpTVmFs
dWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzJdLCBleGNlcHRpb24pKTsKKyAgICBB
U1NFUlQoISpleGNlcHRpb24pOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xs
ZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0
ZSh0aGlzT2JqZWN0KSk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCBj
b250cm9sbGVyLT5wYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQocHJvcGVydHlO
YW1lLmdldCgpLCB0aW1lLCBlbGVtZW50SWQuZ2V0KCkpKTsKK30KKworc3RhdGljIEpTVmFsdWVS
ZWYgbnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQoreworICAgIGlmIChhcmd1bWVudENvdW50ICE9IDApCisgICAgICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVy
KiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVj
dEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihj
b250ZXh0LCBjb250cm9sbGVyLT5udW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSk7Cit9CisKK3N0
YXRpYyBKU1ZhbHVlUmVmIHdhaXRGb3JQb2xpY3lEZWxlZ2F0ZUNhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90LCBj
b25zdCBKU1ZhbHVlUmVmW10sIEpTVmFsdWVSZWYqKQoreworICAgIExheW91dFRlc3RDb250cm9s
bGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09i
amVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPndhaXRGb3JQb2xp
Y3lEZWxlZ2F0ZSgpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
K30KKworc3RhdGljIEpTVmFsdWVSZWYgYWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnlDYWxs
YmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1td
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgIT0gNCkK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHNvdXJjZU9yaWdpbihBZG9wdCwgSlNWYWx1ZVRvU3RyaW5n
Q29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAgIEFTU0VSVCghKmV4
Y2VwdGlvbik7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGRlc3RpbmF0aW9uUHJvdG9j
b2woQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNl
cHRpb24pKTsKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBkZXN0aW5hdGlvbkhvc3QoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4
dCwgYXJndW1lbnRzWzJdLCBleGNlcHRpb24pKTsKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOwor
ICAgIGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMgPSBKU1ZhbHVlVG9Cb29sZWFuKGNv
bnRleHQsIGFyZ3VtZW50c1szXSk7CisKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJv
bGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2
YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5hZGRPcmlnaW5BY2Nlc3NXaGl0ZWxp
c3RFbnRyeShzb3VyY2VPcmlnaW4uZ2V0KCksIGRlc3RpbmF0aW9uUHJvdG9jb2wuZ2V0KCksIGRl
c3RpbmF0aW9uSG9zdC5nZXQoKSwgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpOworICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVS
ZWYgcmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnlDYWxsYmFjayhKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1
bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCit7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgIT0gNCkKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IHNvdXJjZU9yaWdpbihBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1
bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGRlc3RpbmF0aW9uUHJvdG9jb2woQWRvcHQsIEpTVmFsdWVU
b1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pKTsKKyAgICBBU1NF
UlQoISpleGNlcHRpb24pOworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBkZXN0aW5hdGlv
bkhvc3QoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzJdLCBl
eGNlcHRpb24pKTsKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIGJvb2wgYWxsb3dEZXN0
aW5hdGlvblN1YmRvbWFpbnMgPSBKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1sz
XSk7CisKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0
PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsK
KyAgICBjb250cm9sbGVyLT5yZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShzb3VyY2VP
cmlnaW4uZ2V0KCksIGRlc3RpbmF0aW9uUHJvdG9jb2wuZ2V0KCksIGRlc3RpbmF0aW9uSG9zdC5n
ZXQoKSwgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpOworICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgc2V0U2Nyb2xsYmFy
UG9saWN5Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVj
dFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBh
cmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGlmIChhcmd1bWVudENv
dW50ICE9IDIpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
KworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBvcmllbnRhdGlvbihBZG9wdCwgSlNWYWx1
ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAgIEFT
U0VSVCghKmV4Y2VwdGlvbik7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHBvbGljeShB
ZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlv
bikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxl
ciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmpl
Y3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5zZXRTY3JvbGxiYXJQ
b2xpY3kob3JpZW50YXRpb24uZ2V0KCksIHBvbGljeS5nZXQoKSk7CisgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBhZGRVc2Vy
U2NyaXB0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVj
dFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBh
cmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGlmIChhcmd1bWVudENv
dW50ICE9IDMpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
KyAgICAKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc291cmNlKEFkb3B0LCBKU1ZhbHVl
VG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7CisgICAgQVNT
RVJUKCEqZXhjZXB0aW9uKTsKKyAgICBib29sIHJ1bkF0U3RhcnQgPSBKU1ZhbHVlVG9Cb29sZWFu
KGNvbnRleHQsIGFyZ3VtZW50c1sxXSk7CisgICAgYm9vbCBhbGxGcmFtZXMgPSBKU1ZhbHVlVG9C
b29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1syXSk7CisgICAgCisgICAgTGF5b3V0VGVzdENvbnRy
b2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpT
T2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+YWRkVXNlclNj
cmlwdChzb3VyY2UuZ2V0KCksIHJ1bkF0U3RhcnQsIGFsbEZyYW1lcyk7CisgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorIAorc3RhdGljIEpTVmFsdWVSZWYgYWRk
VXNlclN0eWxlU2hlZXRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYs
IEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1Zh
bHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKGFy
Z3VtZW50Q291bnQgIT0gMikKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNv
bnRleHQpOworICAgIAorICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzb3VyY2UoQWRvcHQs
IEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsK
KyAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIGJvb2wgYWxsRnJhbWVzID0gSlNWYWx1ZVRv
Qm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMV0pOworICAgCisgICAgTGF5b3V0VGVzdENvbnRy
b2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpT
T2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+YWRkVXNlclN0
eWxlU2hlZXQoc291cmNlLmdldCgpLCBhbGxGcmFtZXMpOworICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgc2V0U2hvdWxkUGFp
bnRCcm9rZW5JbWFnZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBm
dW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNv
bnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAg
ICAvLyBIYXMgTWFjIGltcGxlbWVudGF0aW9uCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQor
ICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBMYXlv
dXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250
cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVy
LT5zZXRTaG91bGRQYWludEJyb2tlbkltYWdlKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJn
dW1lbnRzWzBdKSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGFwaVRlc3ROZXdXaW5kb3dEYXRhTG9hZEJhc2VVUkxD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRo
aXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50
c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgIT0g
MikKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAg
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHV0ZjhEYXRhKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdD
b3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7CisgICAgQVNTRVJUKCEqZXhj
ZXB0aW9uKTsKKworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBiYXNlVVJMKEFkb3B0LCBK
U1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9uKSk7Cisg
ICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAgICAgICAgCisgICAgTGF5b3V0VGVzdENvbnRyb2xs
ZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+YXBpVGVzdE5ld1dp
bmRvd0RhdGFMb2FkQmFzZVVSTCh1dGY4RGF0YS5nZXQoKSwgYmFzZVVSTC5nZXQoKSk7CisgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1
ZVJlZiBhcGlUZXN0R29Ub0N1cnJlbnRCYWNrRm9yd2FyZEl0ZW1DYWxsYmFjayhKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBh
cmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCit7CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0
aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2Jq
ZWN0KSk7CisgICAgY29udHJvbGxlci0+YXBpVGVzdEdvVG9DdXJyZW50QmFja0ZvcndhcmRJdGVt
KCk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0
aWMgSlNWYWx1ZVJlZiBzZXRXZWJWaWV3RWRpdGFibGVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVf
dCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCit7CisgICAgLy8gSGFzIE1hYyBpbXBsZW1lbnRhdGlvbgorICAgIGlmIChh
cmd1bWVudENvdW50IDwgMSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNv
bnRleHQpOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNf
Y2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0
KSk7CisgICAgY29udHJvbGxlci0+c2V0V2ViVmlld0VkaXRhYmxlKEpTVmFsdWVUb0Jvb2xlYW4o
Y29udGV4dCwgYXJndW1lbnRzWzBdKSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNlbmRXZWJJbnRlbnRSZXNwb25z
ZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVS
ZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gcmVzcG9uc2U7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPT0gMSkgewor
ICAgICAgICByZXNwb25zZS5hZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3Vt
ZW50c1swXSwgZXhjZXB0aW9uKSk7CisgICAgICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAg
fSBlbHNlCisgICAgICAgIHJlc3BvbnNlLmFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKDApKTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGlj
X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOworICAgIGNvbnRyb2xsZXItPnNlbmRXZWJJbnRlbnRSZXNwb25zZShyZXNwb25zZS5nZXQo
KSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0
YXRpYyBKU1ZhbHVlUmVmIGRlbGl2ZXJXZWJJbnRlbnRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVf
dCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCit7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAzKQorICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gYWN0aW9uKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3Vt
ZW50c1swXSwgZXhjZXB0aW9uKSk7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAgICBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gdHlwZShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250
ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7
CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGRhdGEoQWRvcHQsIEpTVmFsdWVUb1N0cmlu
Z0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzJdLCBleGNlcHRpb24pKTsKKyAgICBBU1NFUlQoISpl
eGNlcHRpb24pOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0
aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2Jq
ZWN0KSk7CisgICAgY29udHJvbGxlci0+ZGVsaXZlcldlYkludGVudChhY3Rpb24uZ2V0KCksIHR5
cGUuZ2V0KCksIGRhdGEuZ2V0KCkpOworCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBhYm9ydE1vZGFsQ2FsbGJhY2soSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlz
T2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNb
XSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBj
b250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdl
dFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPmFib3J0TW9kYWwoKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1Zh
bHVlUmVmIG1hcmtlclRleHRGb3JMaXN0SXRlbUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
K3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExh
eW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAg
ICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgY29u
dHJvbGxlci0+bWFya2VyVGV4dEZvckxpc3RJdGVtKGNvbnRleHQsIGFyZ3VtZW50c1swXSkuZ2V0
KCkpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBhdXRoZW50aWNhdGVTZXNzaW9uQ2FsbGJhY2so
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0
LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIC8vIGF1dGhlbnRpY2F0ZVNlc3Npb24odXJsLCB1
c2VybmFtZSwgcGFzc3dvcmQpCisgICAgaWYgKGFyZ3VtZW50Q291bnQgIT0gMykKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IHVybChBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1
bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHVzZXJuYW1lKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5
KGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9uKSk7CisgICAgQVNTRVJUKCEqZXhjZXB0
aW9uKTsKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gcGFzc3dvcmQoQWRvcHQsIEpTVmFs
dWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzJdLCBleGNlcHRpb24pKTsKKyAgICBB
U1NFUlQoISpleGNlcHRpb24pOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xs
ZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0
ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+YXV0aGVudGljYXRlU2Vzc2lvbih1cmwu
Z2V0KCksIHVzZXJuYW1lLmdldCgpLCBwYXNzd29yZC5nZXQoKSk7CisgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBzZXRTZXJp
YWxpemVIVFRQTG9hZHNDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYs
IEpTT2JqZWN0UmVmLCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1
bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGJvb2wgc2VyaWFsaXplID0g
dHJ1ZTsKKyAgICBpZiAoYXJndW1lbnRDb3VudCA9PSAxKQorICAgICAgICBzZXJpYWxpemUgPSBK
U1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSk7CisKKyAgICBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0U2VyaWFsaXplSFRUUExvYWRzKHNlcmlhbGl6ZSk7CisgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBz
ZXRTaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZENhbGxiYWNrKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6
ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9
IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRo
aXNPYmplY3QpKTsKKyAgICAKKyAgICBpZiAoYXJndW1lbnRDb3VudCA9PSAxKQorICAgICAgICBj
b250cm9sbGVyLT5zZXRTaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZChK
U1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOworCisgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBhZGRD
aHJvbWVJbnB1dEZpZWxkQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIExheW91
dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRy
b2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXIt
PmFkZENocm9tZUlucHV0RmllbGQoKTsKKyAgICAvLyB0aGUgZmlyc3QgYXJndW1lbnQgaXMgYSBj
YWxsYmFjayB0aGF0IGlzIGNhbGxlZCBvbmNlIHRoZSBpbnB1dCBmaWVsZCBoYXMgYmVlbiBhZGRl
ZAorICAgIGlmIChhcmd1bWVudENvdW50ID09IDEpCisgICAgICAgIEpTT2JqZWN0Q2FsbEFzRnVu
Y3Rpb24oY29udGV4dCwgSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgMCks
IHRoaXNPYmplY3QsIDAsIDAsIDApOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgcmVtb3ZlQ2hyb21lSW5wdXRGaWVsZENh
bGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhp
c09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRz
W10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciog
Y29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RH
ZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5yZW1vdmVDaHJvbWVJbnB1
dEZpZWxkKCk7CisgICAgLy8gdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgY2FsbGJhY2sgdGhhdCBp
cyBjYWxsZWQgb25jZSB0aGUgaW5wdXQgZmllbGQgaGFzIGJlZW4gYWRkZWQKKyAgICBpZiAoYXJn
dW1lbnRDb3VudCA9PSAxKQorICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHQs
IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBhcmd1bWVudHNbMF0sIDApLCB0aGlzT2JqZWN0LCAw
LCAwLCAwKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisK
K3N0YXRpYyBKU1ZhbHVlUmVmIGZvY3VzV2ViVmlld0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50
Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKK3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0
PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsK
KyAgICBjb250cm9sbGVyLT5mb2N1c1dlYlZpZXcoKTsKKyAgICAvLyB0aGUgZmlyc3QgYXJndW1l
bnQgaXMgYSBjYWxsYmFjayB0aGF0IGlzIGNhbGxlZCBvbmNlIHRoZSBpbnB1dCBmaWVsZCBoYXMg
YmVlbiBhZGRlZAorICAgIGlmIChhcmd1bWVudENvdW50ID09IDEpCisgICAgICAgIEpTT2JqZWN0
Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50
c1swXSwgMCksIHRoaXNPYmplY3QsIDAsIDAsIDApOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVu
ZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgc2V0QmFja2luZ1NjYWxl
RmFjdG9yQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVj
dFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBh
cmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGlmIChhcmd1bWVudENv
dW50ICE9IDIpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
KworICAgIGRvdWJsZSBiYWNraW5nU2NhbGVGYWN0b3IgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4
dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisK
KyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91
dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBj
b250cm9sbGVyLT5zZXRCYWNraW5nU2NhbGVGYWN0b3IoYmFja2luZ1NjYWxlRmFjdG9yKTsKKwor
ICAgIC8vIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgYSBjYWxsYmFjayB0aGF0IGlzIGNhbGxlZCBv
bmNlIHRoZSBiYWNraW5nIHNjYWxlIGZhY3RvciBoYXMgYmVlbiBzZXQuCisgICAgSlNPYmplY3RD
YWxsQXNGdW5jdGlvbihjb250ZXh0LCBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJndW1lbnRz
WzFdLCAwKSwgdGhpc09iamVjdCwgMCwgMCwgMCk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBwcmVjaXNlVGltZUNhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09i
amVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10s
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIo
Y29udGV4dCwgV1RGOjpjdXJyZW50VGltZSgpKTsKK30KKworLy8gU3RhdGljIFZhbHVlcworCitz
dGF0aWMgSlNWYWx1ZVJlZiBnZXRHbG9iYWxGbGFnQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9s
bGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwg
Y29udHJvbGxlci0+Z2xvYmFsRmxhZygpKTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgZ2V0V2Vi
SGlzdG9yeUl0ZW1Db3VudENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKK3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19j
YXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3Qp
KTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgY29udHJvbGxlci0+d2Vi
SGlzdG9yeUl0ZW1Db3VudCgpKTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgZ2V0V29ya2VyVGhy
ZWFkQ291bnRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgdGhpc09i
amVjdCwgSlNTdHJpbmdSZWYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7
CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlv
dXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAg
cmV0dXJuIEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIGNvbnRyb2xsZXItPndvcmtlclRocmVh
ZENvdW50KCkpOworfQorCisjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShHVEspIHx8IFBM
QVRGT1JNKFdJTikKK3N0YXRpYyBKU1ZhbHVlUmVmIGdldFBsYXRmb3JtTmFtZUNhbGxiYWNrKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBMYXlvdXRUZXN0Q29u
dHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4o
SlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gcGxhdGZvcm1OYW1lKGNvbnRyb2xsZXItPnBsYXRmb3JtTmFtZSgpKTsKKyAgICBpZiAo
IXBsYXRmb3JtTmFtZS5nZXQoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBwbGF0Zm9y
bU5hbWUuZ2V0KCkpOworfQorI2VuZGlmCisKK3N0YXRpYyBKU1ZhbHVlUmVmIGdldFRpdGxlVGV4
dERpcmVjdGlvbkNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB0aGlz
T2JqZWN0LCBKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
K3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExh
eW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAg
ICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gdGl0bGVEaXJlY3Rpb24oQWRvcHQsIEpTU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKGNvbnRyb2xsZXItPnRpdGxlVGV4dERpcmVjdGlvbigpLmNf
c3RyKCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgdGl0bGVEaXJl
Y3Rpb24uZ2V0KCkpOworfQorCitzdGF0aWMgYm9vbCBzZXRHbG9iYWxGbGFnQ2FsbGJhY2soSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIEpTU3RyaW5nUmVmIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZVJlZiB2YWx1ZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorewor
ICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0
VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNv
bnRyb2xsZXItPnNldEdsb2JhbEZsYWcoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCB2YWx1ZSkp
OworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBpZ25vcmVEZXNrdG9w
Tm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQoreworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3Rh
dGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09i
amVjdCkpOworICAgIGNvbnRyb2xsZXItPmlnbm9yZURlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNz
aW9uUmVxdWVzdHMoKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNpbXVsYXRlRGVza3RvcE5vdGlmaWNhdGlvbkNsaWNr
Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09i
amVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJl
ZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIExheW91dFRlc3RD
b250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIq
PihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOyAKKyAgICBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gdGl0bGUoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1l
bnRzWzBdLCBleGNlcHRpb24pKTsKKyAgICBjb250cm9sbGVyLT5zaW11bGF0ZURlc2t0b3BOb3Rp
ZmljYXRpb25DbGljayh0aXRsZS5nZXQoKSk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBzZXRNaW5pbXVtVGltZXJJbnRl
cnZhbENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFs
dWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBpZiAoYXJn
dW1lbnRDb3VudCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKKworICAgIGRvdWJsZSBtaW5pbXVtID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFy
Z3VtZW50c1swXSwgZXhjZXB0aW9uKTsKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworCisgICAg
TGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0
Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJv
bGxlci0+c2V0TWluaW11bVRpbWVySW50ZXJ2YWwobWluaW11bSk7CisKKyAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNldFRl
eHREaXJlY3Rpb25DYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVu
Y3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25z
dCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAg
aWYgKGFyZ3VtZW50Q291bnQgPT0gMSkgeworICAgICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gZGlyZWN0aW9uKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50
c1swXSwgZXhjZXB0aW9uKSk7CisgICAgICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9s
bGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOworICAgICAgICBjb250cm9sbGVyLT5zZXRUZXh0RGlyZWN0aW9uKGRp
cmVjdGlvbi5nZXQoKSk7CisgICAgfQorCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOworCit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNldEhhc0N1c3RvbUZ1bGxTY3Jl
ZW5CZWhhdmlvckNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5j
dGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0
IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBp
ZiAoYXJndW1lbnRDb3VudCA9PSAxKSB7CisgICAgICAgIGJvb2wgaGFzQ3VzdG9tQmVoYXZpb3Ig
PSBKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSk7CisgICAgICAgIExheW91
dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRy
b2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgICAgICBjb250cm9s
bGVyLT5zZXRIYXNDdXN0b21GdWxsU2NyZWVuQmVoYXZpb3IoaGFzQ3VzdG9tQmVoYXZpb3IpOwor
ICAgIH0KKworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKwor
c3RhdGljIEpTVmFsdWVSZWYgc2V0U3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsQ2FsbGJhY2so
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0
aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVu
dHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGlmIChhcmd1bWVudENvdW50ICE9
IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAg
IGRvdWJsZSBpbnRlcnZhbCA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0s
IGV4Y2VwdGlvbik7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKworICAgIExheW91dFRlc3RD
b250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIq
PihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldFN0
b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbChpbnRlcnZhbCk7CisKKyAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyB2b2lkIGxheW91dFRlc3RDb250
cm9sbGVyT2JqZWN0RmluYWxpemUoSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIExheW91dFRl
c3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xs
ZXIqPihKU09iamVjdEdldFByaXZhdGUob2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+ZGVyZWYo
KTsKK30KKworLy8gT2JqZWN0IENyZWF0aW9uCisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHdpbmRv
d09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiB0ZXN0UnVubmVyU3RyKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygidGVzdFJ1bm5lciIpKTsKKyAgICByZWYoKTsKKyAgICByZWYoKTsKKworICAgIEpTQ2xhc3NS
ZWYgY2xhc3NSZWYgPSBnZXRKU0NsYXNzKCk7CisgICAgSlNWYWx1ZVJlZiBsYXlvdXRUZXN0Q29u
dG9sbGVyT2JqZWN0ID0gSlNPYmplY3RNYWtlKGNvbnRleHQsIGNsYXNzUmVmLCB0aGlzKTsKKyAg
ICBKU0NsYXNzUmVsZWFzZShjbGFzc1JlZik7CisKKyAgICBKU09iamVjdFNldFByb3BlcnR5KGNv
bnRleHQsIHdpbmRvd09iamVjdCwgdGVzdFJ1bm5lclN0ci5nZXQoKSwgbGF5b3V0VGVzdENvbnRv
bGxlck9iamVjdCwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSwgZXhjZXB0aW9uKTsKK30KKworSlNDbGFzc1JlZiBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6Z2V0SlNDbGFzcygpCit7CisgICAgc3RhdGljIEpTU3RhdGljVmFsdWUqIHN0
YXRpY1ZhbHVlcyA9IExheW91dFRlc3RDb250cm9sbGVyOjpzdGF0aWNWYWx1ZXMoKTsKKyAgICBz
dGF0aWMgSlNTdGF0aWNGdW5jdGlvbiogc3RhdGljRnVuY3Rpb25zID0gTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnN0YXRpY0Z1bmN0aW9ucygpOworICAgIHN0YXRpYyBKU0NsYXNzRGVmaW5pdGlvbiBj
bGFzc0RlZmluaXRpb24gPSB7CisgICAgICAgIDAsIGtKU0NsYXNzQXR0cmlidXRlTm9uZSwgIkxh
eW91dFRlc3RDb250cm9sbGVyIiwgMCwgc3RhdGljVmFsdWVzLCBzdGF0aWNGdW5jdGlvbnMsCisg
ICAgICAgIDAsIGxheW91dFRlc3RDb250cm9sbGVyT2JqZWN0RmluYWxpemUsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAKKyAgICB9OworCisgICAgcmV0dXJuIEpTQ2xhc3NDcmVhdGUoJmNsYXNz
RGVmaW5pdGlvbik7Cit9CisKK0pTU3RhdGljVmFsdWUqIExheW91dFRlc3RDb250cm9sbGVyOjpz
dGF0aWNWYWx1ZXMoKQoreworICAgIHN0YXRpYyBKU1N0YXRpY1ZhbHVlIHN0YXRpY1ZhbHVlc1td
ID0geworICAgICAgICB7ICJnbG9iYWxGbGFnIiwgZ2V0R2xvYmFsRmxhZ0NhbGxiYWNrLCBzZXRH
bG9iYWxGbGFnQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSB9LAorICAgICAgICB7
ICJ3ZWJIaXN0b3J5SXRlbUNvdW50IiwgZ2V0V2ViSGlzdG9yeUl0ZW1Db3VudENhbGxiYWNrLCAw
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlIH0sCisgICAgICAgIHsgIndvcmtlclRocmVhZENvdW50IiwgZ2V0V29ya2VyVGhyZWFk
Q291bnRDYWxsYmFjaywgMCwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3Bl
cnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0o
R1RLKSB8fCBQTEFURk9STShXSU4pCisgICAgICAgIHsgInBsYXRmb3JtTmFtZSIsIGdldFBsYXRm
b3JtTmFtZUNhbGxiYWNrLCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJv
cGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisjZW5kaWYKKyAgICAgICAgeyAidGl0bGVUZXh0
RGlyZWN0aW9uIiwgZ2V0VGl0bGVUZXh0RGlyZWN0aW9uQ2FsbGJhY2ssIDAsIGtKU1Byb3BlcnR5
QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAg
ICAgICAgeyAwLCAwLCAwLCAwIH0KKyAgICB9OworICAgIHJldHVybiBzdGF0aWNWYWx1ZXM7Cit9
CisKK0pTU3RhdGljRnVuY3Rpb24qIExheW91dFRlc3RDb250cm9sbGVyOjpzdGF0aWNGdW5jdGlv
bnMoKQoreworICAgIHN0YXRpYyBKU1N0YXRpY0Z1bmN0aW9uIHN0YXRpY0Z1bmN0aW9uc1tdID0g
eworICAgICAgICB7ICJhYm9ydE1vZGFsIiwgYWJvcnRNb2RhbENhbGxiYWNrLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisg
ICAgICAgIHsgImFkZERpc2FsbG93ZWRVUkwiLCBhZGREaXNhbGxvd2VkVVJMQ2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfSwKKyAgICAgICAgeyAiYWRkVVJMVG9SZWRpcmVjdCIsIGFkZFVSTFRvUmVkaXJlY3RDYWxs
YmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRl
RG9udERlbGV0ZSB9LAorICAgICAgICB7ICJhZGRVc2VyU2NyaXB0IiwgYWRkVXNlclNjcmlwdENh
bGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1
dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgImFkZFVzZXJTdHlsZVNoZWV0IiwgYWRkVXNlclN0
eWxlU2hlZXRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3Bl
cnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJhcGlUZXN0TmV3V2luZG93RGF0
YUxvYWRCYXNlVVJMIiwgYXBpVGVzdE5ld1dpbmRvd0RhdGFMb2FkQmFzZVVSTENhbGxiYWNrLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIH0sCisgICAgICAgIHsgImFwaVRlc3RHb1RvQ3VycmVudEJhY2tGb3J3YXJkSXRlbSIsIGFw
aVRlc3RHb1RvQ3VycmVudEJhY2tGb3J3YXJkSXRlbUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAg
IHsgImFwcGxpY2F0aW9uQ2FjaGVEaXNrVXNhZ2VGb3JPcmlnaW4iLCBhcHBsaWNhdGlvbkNhY2hl
RGlza1VzYWdlRm9yT3JpZ2luQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkg
fCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAiY2FsbFNob3Vs
ZENsb3NlT25XZWJWaWV3IiwgY2FsbFNob3VsZENsb3NlT25XZWJWaWV3Q2FsbGJhY2ssIGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUg
fSwKKyAgICAgICAgeyAiY2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcyIsIGNsZWFyQWxsQXBwbGlj
YXRpb25DYWNoZXNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJjbGVhckFsbERhdGFiYXNl
cyIsIGNsZWFyQWxsRGF0YWJhc2VzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9u
bHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAiY2xlYXJB
cHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luIiwgY2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2lu
Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAiY2xlYXJCYWNrRm9yd2FyZExpc3QiLCBjbGVh
ckJhY2tGb3J3YXJkTGlzdENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgImNsZWFyUGVyc2lz
dGVudFVzZXJTdHlsZVNoZWV0IiwgY2xlYXJQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXRDYWxsYmFj
aywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9u
dERlbGV0ZSB9LAorICAgICAgICB7ICJjbG9zZVdlYkluc3BlY3RvciIsIGNsb3NlV2ViSW5zcGVj
dG9yQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAiY29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zp
c2l0ZWRJbmZvIiwgY29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvQ2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfSwKKyAgICAgICAgeyAiZGVjb2RlSG9zdE5hbWUiLCBkZWNvZGVIb3N0TmFtZUNhbGxiYWNr
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlIH0sCisgICAgICAgIHsgImRlbGl2ZXJXZWJJbnRlbnQiLCBkZWxpdmVyV2ViSW50ZW50
Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAiZGlzYWJsZUltYWdlTG9hZGluZyIsIGRpc2Fi
bGVJbWFnZUxvYWRpbmdDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtK
U1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJkaXNhbGxvd0luY3Jl
YXNlRm9yQXBwbGljYXRpb25DYWNoZVF1b3RhIiwgZGlzYWxsb3dJbmNyZWFzZUZvckFwcGxpY2F0
aW9uQ2FjaGVRdW90YUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgImRpc3BhdGNoUGVuZGlu
Z0xvYWRSZXF1ZXN0cyIsIGRpc3BhdGNoUGVuZGluZ0xvYWRSZXF1ZXN0c0NhbGxiYWNrLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRl
IH0sCisgICAgICAgIHsgImRpc3BsYXkiLCBkaXNwbGF5Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAg
ICAgeyAiZGlzcGxheUludmFsaWRhdGVkUmVnaW9uIiwgZGlzcGxheUludmFsaWRhdGVkUmVnaW9u
Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAiZHVtcEFwcGxpY2F0aW9uQ2FjaGVEZWxlZ2F0
ZUNhbGxiYWNrcyIsIGR1bXBBcHBsaWNhdGlvbkNhY2hlRGVsZWdhdGVDYWxsYmFja3NDYWxsYmFj
aywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9u
dERlbGV0ZSB9LAorICAgICAgICB7ICJkdW1wQXNUZXh0IiwgZHVtcEFzVGV4dENhbGxiYWNrLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIH0sCisgICAgICAgIHsgImR1bXBCYWNrRm9yd2FyZExpc3QiLCBkdW1wQmFja0ZvcndhcmRM
aXN0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAiZHVtcENoaWxkRnJhbWVTY3JvbGxQb3Np
dGlvbnMiLCBkdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9uc0NhbGxiYWNrLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisg
ICAgICAgIHsgImR1bXBDaGlsZEZyYW1lc0FzVGV4dCIsIGR1bXBDaGlsZEZyYW1lc0FzVGV4dENh
bGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1
dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgImR1bXBET01Bc1dlYkFyY2hpdmUiLCBkdW1wRE9N
QXNXZWJBcmNoaXZlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAiZHVtcERhdGFiYXNlQ2Fs
bGJhY2tzIiwgZHVtcERhdGFiYXNlQ2FsbGJhY2tzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAg
eyAiZHVtcEVkaXRpbmdDYWxsYmFja3MiLCBkdW1wRWRpdGluZ0NhbGxiYWNrc0NhbGxiYWNrLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIH0sCisgICAgICAgIHsgImR1bXBGcmFtZUxvYWRDYWxsYmFja3MiLCBkdW1wRnJhbWVMb2Fk
Q2FsbGJhY2tzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAiZHVtcFByb2dyZXNzRmluaXNo
ZWRDYWxsYmFjayIsIGR1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2tDYWxsYmFjaywga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9
LAorICAgICAgICB7ICJkdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrcyIsIGR1bXBV
c2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwgICAgICAgIAor
ICAgICAgICB7ICJkdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzIiwgZHVtcFJlc291cmNlTG9hZENh
bGxiYWNrc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgImR1bXBSZXNvdXJjZVJlc3BvbnNl
TUlNRVR5cGVzIiwgZHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXNDYWxsYmFjaywga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9
LAorICAgICAgICB7ICJkdW1wU2VsZWN0aW9uUmVjdCIsIGR1bXBTZWxlY3Rpb25SZWN0Q2FsbGJh
Y2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURv
bnREZWxldGUgfSwKKyAgICAgICAgeyAiZHVtcFNvdXJjZUFzV2ViQXJjaGl2ZSIsIGR1bXBTb3Vy
Y2VBc1dlYkFyY2hpdmVDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtK
U1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJkdW1wU3RhdHVzQ2Fs
bGJhY2tzIiwgZHVtcFN0YXR1c0NhbGxiYWNrc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsg
ImR1bXBUaXRsZUNoYW5nZXMiLCBkdW1wVGl0bGVDaGFuZ2VzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5
QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAg
ICAgICAgeyAiZHVtcEljb25DaGFuZ2VzIiwgZHVtcEljb25DaGFuZ2VzQ2FsbGJhY2ssIGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUg
fSwKKyAgICAgICAgeyAiZHVtcFdpbGxDYWNoZVJlc3BvbnNlIiwgZHVtcFdpbGxDYWNoZVJlc3Bv
bnNlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAiZWxlbWVudERvZXNBdXRvQ29tcGxldGVG
b3JFbGVtZW50V2l0aElkIiwgZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElk
Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAiZW5jb2RlSG9zdE5hbWUiLCBlbmNvZGVIb3N0
TmFtZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgImV2YWx1YXRlSW5XZWJJbnNwZWN0b3Ii
LCBldmFsdWF0ZUluV2ViSW5zcGVjdG9yQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVh
ZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAiZXZh
bHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSIsIGV2YWx1YXRlU2NyaXB0
SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWVDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7
ICJldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCIsIGV2YWx1YXRlU2NyaXB0SW5Jc29sYXRl
ZFdvcmxkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAiZXhlY0NvbW1hbmQiLCBleGVjQ29t
bWFuZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgImZpbmRTdHJpbmciLCBmaW5kU3RyaW5n
Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAib3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hl
Iiwgb3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAg
eyAiZ29CYWNrIiwgZ29CYWNrQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkg
fCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwgCisgICAgICAgIHsgImdyYW50RGVz
a3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb24iLCBncmFudERlc2t0b3BOb3RpZmljYXRpb25QZXJt
aXNzaW9uQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwgCisgICAgICAgIHsgImlnbm9yZURlc2t0b3BOb3RpZmlj
YXRpb25QZXJtaXNzaW9uUmVxdWVzdHMiLCBpZ25vcmVEZXNrdG9wTm90aWZpY2F0aW9uUGVybWlz
c2lvblJlcXVlc3RzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAiaXNDb21tYW5kRW5hYmxl
ZCIsIGlzQ29tbWFuZEVuYWJsZWRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJrZWVwV2Vi
SGlzdG9yeSIsIGtlZXBXZWJIaXN0b3J5Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVh
ZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAibGF5
ZXJUcmVlQXNUZXh0IiwgbGF5ZXJUcmVlQXNUZXh0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAg
eyAibnVtYmVyT2ZQYWdlcyIsIG51bWJlck9mUGFnZXNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRy
aWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAg
ICB7ICJudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cyIsIG51bWJl
ck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzQ2FsbGJhY2ssIGtKU1Byb3Bl
cnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwK
KyAgICAgICAgeyAibWFya2VyVGV4dEZvckxpc3RJdGVtIiwgbWFya2VyVGV4dEZvckxpc3RJdGVt
Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAibm90aWZ5RG9uZSIsIG5vdGlmeURvbmVDYWxs
YmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRl
RG9udERlbGV0ZSB9LAorICAgICAgICB7ICJudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMiLCBudW1i
ZXJPZkFjdGl2ZUFuaW1hdGlvbnNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJvdmVycmlk
ZVByZWZlcmVuY2UiLCBvdmVycmlkZVByZWZlcmVuY2VDYWxsYmFjaywga0pTUHJvcGVydHlBdHRy
aWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAg
ICB7ICJwYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVscyIsIHBhZ2VTaXplQW5kTWFyZ2luc0luUGl4
ZWxzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAicGFnZVByb3BlcnR5IiwgcGFnZVByb3Bl
cnR5Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAicGF0aFRvTG9jYWxSZXNvdXJjZSIsIHBh
dGhUb0xvY2FsUmVzb3VyY2VDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJwYXVzZUFuaW1h
dGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZCIsIHBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50
V2l0aElkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAicGF1c2VUcmFuc2l0aW9uQXRUaW1l
T25FbGVtZW50V2l0aElkIiwgcGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkQ2Fs
bGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAicHJpbnRUb1BERiIsIGR1bXBBc1BERkNhbGxiYWNr
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlIH0sCisgICAgICAgIHsgInF1ZXVlQmFja05hdmlnYXRpb24iLCBxdWV1ZUJhY2tOYXZp
Z2F0aW9uQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAicXVldWVGb3J3YXJkTmF2aWdhdGlv
biIsIHF1ZXVlRm9yd2FyZE5hdmlnYXRpb25DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVS
ZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJx
dWV1ZUxvYWQiLCBxdWV1ZUxvYWRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJxdWV1ZUxv
YWRIVE1MU3RyaW5nIiwgcXVldWVMb2FkSFRNTFN0cmluZ0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAg
ICAgIHsgInF1ZXVlTG9hZGluZ1NjcmlwdCIsIHF1ZXVlTG9hZGluZ1NjcmlwdENhbGxiYWNrLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIH0sCisgICAgICAgIHsgInF1ZXVlTm9uTG9hZGluZ1NjcmlwdCIsIHF1ZXVlTm9uTG9hZGlu
Z1NjcmlwdENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgInF1ZXVlUmVsb2FkIiwgcXVldWVS
ZWxvYWRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJyZW1vdmVBbGxWaXNpdGVkTGlua3Mi
LCByZW1vdmVBbGxWaXNpdGVkTGlua3NDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJyZW1v
dmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSIsIHJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlz
dEVudHJ5Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAicmVwYWludFN3ZWVwSG9yaXpvbnRh
bGx5IiwgcmVwYWludFN3ZWVwSG9yaXpvbnRhbGx5Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAg
eyAicmVzZXRQYWdlVmlzaWJpbGl0eSIsIHJlc2V0UGFnZVZpc2liaWxpdHlDYWxsYmFjaywga0pT
UHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0
ZSB9LAorICAgICAgICB7ICJzZW5kV2ViSW50ZW50UmVzcG9uc2UiLCBzZW5kV2ViSW50ZW50UmVz
cG9uc2VDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJzZXRBY2NlcHRzRWRpdGluZyIsIHNl
dEFjY2VwdHNFZGl0aW5nQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic2V0QWxsb3dVbml2
ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMiLCBzZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxl
VVJMc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgInNldEFsbG93RmlsZUFjY2Vzc0Zyb21G
aWxlVVJMcyIsIHNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMc0NhbGxiYWNrLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0s
CisgICAgICAgIHsgInNldEFsd2F5c0FjY2VwdENvb2tpZXMiLCBzZXRBbHdheXNBY2NlcHRDb29r
aWVzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSIs
IHNldEFwcENhY2hlTWF4aW11bVNpemVDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJzZXRB
cHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEiLCBzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVv
dGFDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJzZXRFbmNvZGVkQXVkaW9EYXRhIiwgc2V0
RW5jb2RlZEF1ZGlvRGF0YUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgInNldEF1dGhlbnRp
Y2F0aW9uUGFzc3dvcmQiLCBzZXRBdXRoZW50aWNhdGlvblBhc3N3b3JkQ2FsbGJhY2ssIGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUg
fSwKKyAgICAgICAgeyAic2V0QXV0aGVudGljYXRpb25Vc2VybmFtZSIsIHNldEF1dGhlbnRpY2F0
aW9uVXNlcm5hbWVDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJzZXRBdXRob3JBbmRVc2Vy
U3R5bGVzRW5hYmxlZCIsIHNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkQ2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfSwKKyAgICAgICAgeyAic2V0QXV0b2ZpbGxlZCIsIHNldEF1dG9maWxsZWRDYWxsYmFjaywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB9LAorICAgICAgICB7ICJzZXRDYWNoZU1vZGVsIiwgc2V0Q2FjaGVNb2RlbENhbGxiYWNr
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlIH0sCisgICAgICAgIHsgInNldENhbGxDbG9zZU9uV2ViVmlld3MiLCBzZXRDYWxsQ2xv
c2VPbldlYlZpZXdzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic2V0Q2FuT3BlbldpbmRv
d3MiLCBzZXRDYW5PcGVuV2luZG93c0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgInNldENs
b3NlUmVtYWluaW5nV2luZG93c1doZW5Db21wbGV0ZSIsIHNldENsb3NlUmVtYWluaW5nV2luZG93
c1doZW5Db21wbGV0ZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgInNldEN1c3RvbVBvbGlj
eURlbGVnYXRlIiwgc2V0Q3VzdG9tUG9saWN5RGVsZWdhdGVDYWxsYmFjaywga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAg
ICAgICB7ICJzZXREYXRhYmFzZVF1b3RhIiwgc2V0RGF0YWJhc2VRdW90YUNhbGxiYWNrLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRl
IH0sIAorICAgICAgICB7ICJzZXREZWZlck1haW5SZXNvdXJjZURhdGFMb2FkIiwgc2V0RGVmZXJN
YWluUmVzb3VyY2VEYXRhTG9hZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgInNldERlZmVy
c0xvYWRpbmciLCBzZXREZWZlcnNMb2FkaW5nQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAi
c2V0VXNlRGVmZXJyZWRGcmFtZUxvYWRpbmciLCBzZXRVc2VEZWZlcnJlZEZyYW1lTG9hZGluZ0Nh
bGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1
dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgInNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5G
b3JVUkxTY2hlbWUiLCBzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lQ2Fs
bGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZCIsIHNl
dEZyYW1lRmxhdHRlbmluZ0VuYWJsZWRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJzZXRH
ZW9sb2NhdGlvblBlcm1pc3Npb24iLCBzZXRHZW9sb2NhdGlvblBlcm1pc3Npb25DYWxsYmFjaywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB9LAorICAgICAgICB7ICJzZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzIiwg
c2V0SGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAg
ICAgIHsgInNldEljb25EYXRhYmFzZUVuYWJsZWQiLCBzZXRJY29uRGF0YWJhc2VFbmFibGVkQ2Fs
bGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJs
ZWQiLCBzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZENhbGxiYWNrLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisg
ICAgICAgIHsgInNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25kZXIiLCBzZXRNYWluRnJhbWVJc0Zp
cnN0UmVzcG9uZGVyQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic2V0TWluaW11bVRpbWVy
SW50ZXJ2YWwiLCBzZXRNaW5pbXVtVGltZXJJbnRlcnZhbENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAg
ICAgIHsgInNldE1vY2tEZXZpY2VPcmllbnRhdGlvbiIsIHNldE1vY2tEZXZpY2VPcmllbnRhdGlv
bkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRy
aWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgInNldE1vY2tHZW9sb2NhdGlvbkVycm9yIiwg
c2V0TW9ja0dlb2xvY2F0aW9uRXJyb3JDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJzZXRN
b2NrR2VvbG9jYXRpb25Qb3NpdGlvbiIsIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uQ2FsbGJh
Y2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURv
bnREZWxldGUgfSwKKyAgICAgICAgeyAiYWRkTW9ja1NwZWVjaElucHV0UmVzdWx0IiwgYWRkTW9j
a1NwZWVjaElucHV0UmVzdWx0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkg
fCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic2V0TW9ja1Nw
ZWVjaElucHV0RHVtcFJlY3QiLCBzZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVjdENhbGxiYWNrLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIH0sCisgICAgICAgIHsgInNldE5ld1dpbmRvd3NDb3B5QmFja0ZvcndhcmRMaXN0Iiwgc2V0
TmV3V2luZG93c0NvcHlCYWNrRm9yd2FyZExpc3RDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7
ICJzZXRQYWdlVmlzaWJpbGl0eSIsIHNldFBhZ2VWaXNpYmlsaXR5Q2FsbGJhY2ssIGtKU1Byb3Bl
cnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwK
KyAgICAgICAgeyAic2V0UE9TSVhMb2NhbGUiLCBzZXRQT1NJWExvY2FsZUNhbGxiYWNrLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRl
IH0sCisgICAgICAgIHsgInNldFBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldExvY2F0aW9uIiwgc2V0
UGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0TG9jYXRpb25DYWxsYmFjaywga0pTUHJvcGVydHlBdHRy
aWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAg
ICB7ICJzZXRQb3B1cEJsb2NraW5nRW5hYmxlZCIsIHNldFBvcHVwQmxvY2tpbmdFbmFibGVkQ2Fs
bGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic2V0UGx1Z2luc0VuYWJsZWQiLCBzZXRQbHVnaW5z
RW5hYmxlZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgInNldFByaW50aW5nIiwgc2V0UHJp
bnRpbmdDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJzZXRQcml2YXRlQnJvd3NpbmdFbmFi
bGVkIiwgc2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAg
IHsgInNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQiLCBzZXRTZWxlY3RUcmFpbGlu
Z1doaXRlc3BhY2VFbmFibGVkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkg
fCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic2V0U2VyaWFs
aXplSFRUUExvYWRzIiwgc2V0U2VyaWFsaXplSFRUUExvYWRzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5
QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAg
ICAgICAgeyAic2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkIiwgc2V0U21hcnRJbnNlcnREZWxl
dGVFbmFibGVkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic2V0U3BhdGlhbE5hdmlnYXRp
b25FbmFibGVkIiwgc2V0U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkQ2FsbGJhY2ssIGtKU1Byb3Bl
cnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwK
KyAgICAgICAgeyAic2V0U3RvcFByb3Zpc2lvbmFsRnJhbWVMb2FkcyIsIHNldFN0b3BQcm92aXNp
b25hbEZyYW1lTG9hZHNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtK
U1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJzZXRUYWJLZXlDeWNs
ZXNUaHJvdWdoRWxlbWVudHMiLCBzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHNDYWxsYmFj
aywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9u
dERlbGV0ZSB9LAorICAgICAgICB7ICJzZXRVc2VEYXNoYm9hcmRDb21wYXRpYmlsaXR5TW9kZSIs
IHNldFVzZURhc2hib2FyZENvbXBhdGliaWxpdHlNb2RlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAg
ICAgeyAic2V0VXNlclN0eWxlU2hlZXRFbmFibGVkIiwgc2V0VXNlclN0eWxlU2hlZXRFbmFibGVk
Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbiIs
IHNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb25DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVS
ZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJz
ZXRWYWx1ZUZvclVzZXIiLCBzZXRWYWx1ZUZvclVzZXJDYWxsYmFjaywga0pTUHJvcGVydHlBdHRy
aWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAg
ICB7ICJzZXRWaWV3TW9kZU1lZGlhRmVhdHVyZSIsIHNldFZpZXdNb2RlTWVkaWFGZWF0dXJlQ2Fs
bGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic2V0V2ViVmlld0VkaXRhYmxlIiwgc2V0V2ViVmll
d0VkaXRhYmxlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic2V0V2lsbFNlbmRSZXF1ZXN0
Q2xlYXJIZWFkZXIiLCBzZXRXaWxsU2VuZFJlcXVlc3RDbGVhckhlYWRlckNhbGxiYWNrLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRl
IH0sCisgICAgICAgIHsgInNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsIiwgc2V0V2lsbFNl
bmRSZXF1ZXN0UmV0dXJuc051bGxDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJzZXRXaWxs
U2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3QiLCBzZXRXaWxsU2VuZFJlcXVlc3RSZXR1
cm5zTnVsbE9uUmVkaXJlY3RDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJzZXRXaW5kb3dJ
c0tleSIsIHNldFdpbmRvd0lzS2V5Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9u
bHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic2V0SmF2
YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZCIsIHNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9h
cmRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJzZXRYU1NBdWRpdG9yRW5hYmxlZCIsIHNl
dFhTU0F1ZGl0b3JFbmFibGVkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkg
fCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic2V0QXN5bmNo
cm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQiLCBzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5n
RW5hYmxlZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgInNob3dXZWJJbnNwZWN0b3IiLCBz
aG93V2ViSW5zcGVjdG9yQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic2ltdWxhdGVEZXNr
dG9wTm90aWZpY2F0aW9uQ2xpY2siLCBzaW11bGF0ZURlc2t0b3BOb3RpZmljYXRpb25DbGlja0Nh
bGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1
dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgInRlc3RPbnNjcmVlbiIsIHRlc3RPbnNjcmVlbkNh
bGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1
dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgInRlc3RSZXBhaW50IiwgdGVzdFJlcGFpbnRDYWxs
YmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRl
RG9udERlbGV0ZSB9LAorICAgICAgICB7ICJ3YWl0Rm9yUG9saWN5RGVsZWdhdGUiLCB3YWl0Rm9y
UG9saWN5RGVsZWdhdGVDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtK
U1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJ3YWl0VW50aWxEb25l
Iiwgd2FpdFVudGlsRG9uZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgIndpbmRvd0NvdW50
Iiwgd2luZG93Q291bnRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtK
U1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJhZGRPcmlnaW5BY2Nl
c3NXaGl0ZWxpc3RFbnRyeSIsIGFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5Q2FsbGJhY2ss
IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUgfSwKKyAgICAgICAgeyAic2V0U2Nyb2xsYmFyUG9saWN5Iiwgc2V0U2Nyb2xsYmFyUG9s
aWN5Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAiYXV0aGVudGljYXRlU2Vzc2lvbiIsIGF1
dGhlbnRpY2F0ZVNlc3Npb25DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJkZWxldGVBbGxM
b2NhbFN0b3JhZ2UiLCBkZWxldGVBbGxMb2NhbFN0b3JhZ2VDYWxsYmFjaywga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAg
ICAgICB7ICJzeW5jTG9jYWxTdG9yYWdlIiwgc3luY0xvY2FsU3RvcmFnZUNhbGxiYWNrLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRl
IH0sICAgICAgICAgICAgICAgIAorICAgICAgICB7ICJvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3Rp
ZmljYXRpb25zIiwgb2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9uc0NhbGxiYWNrLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIH0sICAgICAgICAKKyAgICAgICAgeyAiZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luIiwg
ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAi
bG9jYWxTdG9yYWdlRGlza1VzYWdlRm9yT3JpZ2luIiwgbG9jYWxTdG9yYWdlRGlza1VzYWdlRm9y
T3JpZ2luQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAib3JpZ2luc1dpdGhMb2NhbFN0b3Jh
Z2UiLCBvcmlnaW5zV2l0aExvY2FsU3RvcmFnZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsg
InNldFNob3VsZFBhaW50QnJva2VuSW1hZ2UiLCBzZXRTaG91bGRQYWludEJyb2tlbkltYWdlQ2Fs
bGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic2V0VGV4dERpcmVjdGlvbiIsIHNldFRleHREaXJl
Y3Rpb25DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJzZXRTaG91bGRTdGF5T25QYWdlQWZ0
ZXJIYW5kbGluZ0JlZm9yZVVubG9hZCIsIHNldFNob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5n
QmVmb3JlVW5sb2FkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAiYWRkQ2hyb21lSW5wdXRG
aWVsZCIsIGFkZENocm9tZUlucHV0RmllbGRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVS
ZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJy
ZW1vdmVDaHJvbWVJbnB1dEZpZWxkIiwgcmVtb3ZlQ2hyb21lSW5wdXRGaWVsZENhbGxiYWNrLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIH0sCisgICAgICAgIHsgImZvY3VzV2ViVmlldyIsIGZvY3VzV2ViVmlld0NhbGxiYWNrLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIH0sCisgICAgICAgIHsgInNldEJhY2tpbmdTY2FsZUZhY3RvciIsIHNldEJhY2tpbmdTY2Fs
ZUZhY3RvckNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgInByZWNpc2VUaW1lIiwgcHJlY2lz
ZVRpbWVDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJzZXRIYXNDdXN0b21GdWxsU2NyZWVu
QmVoYXZpb3IiLCBzZXRIYXNDdXN0b21GdWxsU2NyZWVuQmVoYXZpb3JDYWxsYmFjaywga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9
LAorICAgICAgICB7ICJzZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwiLCBzZXRTdG9yYWdl
RGF0YWJhc2VJZGxlSW50ZXJ2YWxDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7IDAsIDAsIDAg
fQorICAgIH07CisKKyAgICByZXR1cm4gc3RhdGljRnVuY3Rpb25zOworfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxvYWRIVE1MU3RyaW5nKEpTU3RyaW5nUmVmIGNvbnRlbnQs
IEpTU3RyaW5nUmVmIGJhc2VVUkwpCit7CisgICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+cXVldWUo
bmV3IExvYWRIVE1MU3RyaW5nSXRlbShjb250ZW50LCBiYXNlVVJMKSk7Cit9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVlTG9hZEFsdGVybmF0ZUhUTUxTdHJpbmcoSlNTdHJpbmdS
ZWYgY29udGVudCwgSlNTdHJpbmdSZWYgYmFzZVVSTCwgSlNTdHJpbmdSZWYgdW5yZWFjaGFibGVV
UkwpCit7CisgICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+cXVldWUobmV3IExvYWRIVE1MU3RyaW5n
SXRlbShjb250ZW50LCBiYXNlVVJMLCB1bnJlYWNoYWJsZVVSTCkpOworfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpxdWV1ZUJhY2tOYXZpZ2F0aW9uKGludCBob3dGYXJCYWNrKQorewor
ICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBCYWNrSXRlbShob3dGYXJCYWNrKSk7
Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVlRm9yd2FyZE5hdmlnYXRpb24o
aW50IGhvd0ZhckZvcndhcmQpCit7CisgICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+cXVldWUobmV3
IEZvcndhcmRJdGVtKGhvd0ZhckZvcndhcmQpKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6cXVldWVMb2FkaW5nU2NyaXB0KEpTU3RyaW5nUmVmIHNjcmlwdCkKK3sKKyAgICBXb3Jr
UXVldWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcgTG9hZGluZ1NjcmlwdEl0ZW0oc2NyaXB0KSk7Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVlTm9uTG9hZGluZ1NjcmlwdChKU1N0
cmluZ1JlZiBzY3JpcHQpCit7CisgICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+cXVldWUobmV3IE5v
bkxvYWRpbmdTY3JpcHRJdGVtKHNjcmlwdCkpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpxdWV1ZVJlbG9hZCgpCit7CisgICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+cXVldWUobmV3
IFJlbG9hZEl0ZW0pOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpncmFudERlc2t0
b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uKEpTU3RyaW5nUmVmIG9yaWdpbikKK3sKKyAgICBtX2Rl
c2t0b3BOb3RpZmljYXRpb25BbGxvd2VkT3JpZ2lucy5wdXNoX2JhY2soSlNTdHJpbmdSZXRhaW4o
b3JpZ2luKSk7Cit9CisKK2Jvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNoZWNrRGVza3RvcE5v
dGlmaWNhdGlvblBlcm1pc3Npb24oSlNTdHJpbmdSZWYgb3JpZ2luKQoreworICAgIHN0ZDo6dmVj
dG9yPEpTU3RyaW5nUmVmPjo6aXRlcmF0b3IgaTsKKyAgICBmb3IgKGkgPSBtX2Rlc2t0b3BOb3Rp
ZmljYXRpb25BbGxvd2VkT3JpZ2lucy5iZWdpbigpOworICAgICAgICAgaSAhPSBtX2Rlc2t0b3BO
b3RpZmljYXRpb25BbGxvd2VkT3JpZ2lucy5lbmQoKTsKKyAgICAgICAgICsraSkgeworICAgICAg
ICBpZiAoSlNTdHJpbmdJc0VxdWFsKCppLCBvcmlnaW4pKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6aWdub3JlRGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0cygpCit7Cisg
ICAgbV9hcmVEZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzSWdub3JlZCA9IGZh
bHNlOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjp3YWl0VG9EdW1wV2F0Y2hkb2dU
aW1lckZpcmVkKCkKK3sKKyAgICBjb25zdCBjaGFyKiBtZXNzYWdlID0gIkZBSUw6IFRpbWVkIG91
dCB3YWl0aW5nIGZvciBub3RpZnlEb25lIHRvIGJlIGNhbGxlZFxuIjsKKyAgICBmcHJpbnRmKHN0
ZGVyciwgIiVzIiwgbWVzc2FnZSk7CisgICAgZnByaW50ZihzdGRvdXQsICIlcyIsIG1lc3NhZ2Up
OworICAgIG5vdGlmeURvbmUoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29tbW9uKGJvb2wgYWxsb3cpCit7CisgICAgbV9pc0dlb2xv
Y2F0aW9uUGVybWlzc2lvblNldCA9IHRydWU7CisgICAgbV9nZW9sb2NhdGlvblBlcm1pc3Npb24g
PSBhbGxvdzsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UE9TSVhMb2NhbGUo
SlNTdHJpbmdSZWYgbG9jYWxlKQoreworICAgIGNoYXIgbG9jYWxlQnVmWzMyXTsKKyAgICBKU1N0
cmluZ0dldFVURjhDU3RyaW5nKGxvY2FsZSwgbG9jYWxlQnVmLCBzaXplb2YobG9jYWxlQnVmKSk7
CisgICAgc2V0bG9jYWxlKExDX0FMTCwgbG9jYWxlQnVmKTsKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6YWRkVVJMVG9SZWRpcmVjdChzdGQ6OnN0cmluZyBvcmlnaW4sIHN0ZDo6c3Ry
aW5nIGRlc3RpbmF0aW9uKQoreworICAgIG1fVVJMc1RvUmVkaXJlY3Rbb3JpZ2luXSA9IGRlc3Rp
bmF0aW9uOworfQorCitjb25zdCBzdGQ6OnN0cmluZyYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJl
ZGlyZWN0aW9uRGVzdGluYXRpb25Gb3JVUkwoc3RkOjpzdHJpbmcgb3JpZ2luKQoreworICAgIHJl
dHVybiBtX1VSTHNUb1JlZGlyZWN0W29yaWdpbl07Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldFNob3VsZFBhaW50QnJva2VuSW1hZ2UoYm9vbCBzaG91bGRQYWludEJyb2tlbklt
YWdlKQoreworICAgIG1fc2hvdWxkUGFpbnRCcm9rZW5JbWFnZSA9IHNob3VsZFBhaW50QnJva2Vu
SW1hZ2U7Cit9CisKK2NvbnN0IHVuc2lnbmVkIExheW91dFRlc3RDb250cm9sbGVyOjptYXhWaWV3
V2lkdGggPSA4MDA7Citjb25zdCB1bnNpZ25lZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWF4Vmll
d0hlaWdodCA9IDYwMDsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuY3BwCShyZXZp
c2lvbiAxMjUzMzUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlRlc3RSdW5uZXIu
aCIKIAogI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgogI2luY2x1ZGUgIldvcmtRdWV1ZUl0ZW0uaCIK
SW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmgJKHJldmlzaW9uIDEyNTMzNSkJKGZyb20g
VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaDoxMjUzMzUpCisrKyBU
b29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0NDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisgCisjaWZuZGVmIExheW91dFRlc3RDb250cm9sbGVyX2gK
KyNkZWZpbmUgTGF5b3V0VGVzdENvbnRyb2xsZXJfaAorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSlNPYmplY3RSZWYuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5o
PgorI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxzZXQ+CisjaW5jbHVkZSA8c3RyaW5nPgorI2lu
Y2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisKK2NsYXNzIExheW91dFRlc3RDb250cm9sbGVyIDogcHVibGljIFJl
ZkNvdW50ZWQ8TGF5b3V0VGVzdENvbnRyb2xsZXI+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxMYXlvdXRUZXN0Q29udHJvbGxlcj4gY3JlYXRlKGNvbnN0IHN0ZDo6c3RyaW5nJiB0
ZXN0UGF0aE9yVVJMLCBjb25zdCBzdGQ6OnN0cmluZyYgZXhwZWN0ZWRQaXhlbEhhc2gpOworICAg
IH5MYXlvdXRUZXN0Q29udHJvbGxlcigpOworCisgICAgdm9pZCBtYWtlV2luZG93T2JqZWN0KEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbik7CisKKyAgICB2b2lkIGFkZERpc2FsbG93ZWRVUkwoSlNTdHJpbmdSZWYgdXJs
KTsKKyAgICB2b2lkIGFkZFVSTFRvUmVkaXJlY3Qoc3RkOjpzdHJpbmcgb3JpZ2luLCBzdGQ6OnN0
cmluZyBkZXN0aW5hdGlvbik7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHJlZGlyZWN0aW9uRGVz
dGluYXRpb25Gb3JVUkwoc3RkOjpzdHJpbmcpOworICAgIHZvaWQgY2xlYXJBbGxBcHBsaWNhdGlv
bkNhY2hlcygpOworICAgIHZvaWQgY2xlYXJBbGxEYXRhYmFzZXMoKTsKKyAgICB2b2lkIGNsZWFy
QXBwbGljYXRpb25DYWNoZUZvck9yaWdpbihKU1N0cmluZ1JlZiBuYW1lKTsKKyAgICB2b2lkIGNs
ZWFyQmFja0ZvcndhcmRMaXN0KCk7CisgICAgdm9pZCBjbGVhclBlcnNpc3RlbnRVc2VyU3R5bGVT
aGVldCgpOworICAgIGJvb2wgY2FsbFNob3VsZENsb3NlT25XZWJWaWV3KCk7CisgICAgSlNTdHJp
bmdSZWYgY29weURlY29kZWRIb3N0TmFtZShKU1N0cmluZ1JlZiBuYW1lKTsKKyAgICBKU1N0cmlu
Z1JlZiBjb3B5RW5jb2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVmIG5hbWUpOworICAgIHZvaWQgZGVs
aXZlcldlYkludGVudChKU1N0cmluZ1JlZiBhY3Rpb24sIEpTU3RyaW5nUmVmIHR5cGUsIEpTU3Ry
aW5nUmVmIGRhdGEpOworICAgIHZvaWQgZGlzYWJsZUltYWdlTG9hZGluZygpOworICAgIHZvaWQg
ZGlzcGF0Y2hQZW5kaW5nTG9hZFJlcXVlc3RzKCk7CisgICAgdm9pZCBkaXNwbGF5KCk7CisgICAg
dm9pZCBkaXNwbGF5SW52YWxpZGF0ZWRSZWdpb24oKTsKKyAgICB2b2lkIGV4ZWNDb21tYW5kKEpT
U3RyaW5nUmVmIG5hbWUsIEpTU3RyaW5nUmVmIHZhbHVlKTsKKyAgICBib29sIGZpbmRTdHJpbmco
SlNDb250ZXh0UmVmLCBKU1N0cmluZ1JlZiwgSlNPYmplY3RSZWYgb3B0aW9uc0FycmF5KTsKKyAg
ICB2b2lkIGdvQmFjaygpOworICAgIEpTVmFsdWVSZWYgb3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNh
Y2hlKEpTQ29udGV4dFJlZik7CisgICAgbG9uZyBsb25nIGFwcGxpY2F0aW9uQ2FjaGVEaXNrVXNh
Z2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgbmFtZSk7CisgICAgYm9vbCBpc0NvbW1hbmRFbmFibGVk
KEpTU3RyaW5nUmVmIG5hbWUpOworICAgIHZvaWQga2VlcFdlYkhpc3RvcnkoKTsKKyAgICBKU1Zh
bHVlUmVmIGNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhKU0NvbnRleHRSZWYsIEpT
VmFsdWVSZWYpOworICAgIHZvaWQgbm90aWZ5RG9uZSgpOworICAgIGludCBudW1iZXJPZlBhZ2Vz
KGZsb2F0IHBhZ2VXaWR0aEluUGl4ZWxzLCBmbG9hdCBwYWdlSGVpZ2h0SW5QaXhlbHMpOworICAg
IGludCBudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cygpOworICAg
IHZvaWQgb3ZlcnJpZGVQcmVmZXJlbmNlKEpTU3RyaW5nUmVmIGtleSwgSlNTdHJpbmdSZWYgdmFs
dWUpOworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBwYWdlUHJvcGVydHkoY29uc3QgY2hh
ciogcHJvcGVydHlOYW1lLCBpbnQgcGFnZU51bWJlcikgY29uc3Q7CisgICAgSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IHBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKGludCBwYWdlTnVtYmVyLCBp
bnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBtYXJnaW5Ub3AsIGludCBtYXJnaW5SaWdodCwgaW50
IG1hcmdpbkJvdHRvbSwgaW50IG1hcmdpbkxlZnQpIGNvbnN0OworICAgIEpTU3RyaW5nUmVmIHBh
dGhUb0xvY2FsUmVzb3VyY2UoSlNDb250ZXh0UmVmLCBKU1N0cmluZ1JlZiB1cmwpOworICAgIHZv
aWQgcXVldWVCYWNrTmF2aWdhdGlvbihpbnQgaG93RmFyQmFja3dhcmQpOworICAgIHZvaWQgcXVl
dWVGb3J3YXJkTmF2aWdhdGlvbihpbnQgaG93RmFyRm9yd2FyZCk7CisgICAgdm9pZCBxdWV1ZUxv
YWQoSlNTdHJpbmdSZWYgdXJsLCBKU1N0cmluZ1JlZiB0YXJnZXQpOworICAgIHZvaWQgcXVldWVM
b2FkSFRNTFN0cmluZyhKU1N0cmluZ1JlZiBjb250ZW50LCBKU1N0cmluZ1JlZiBiYXNlVVJMKTsK
KyAgICB2b2lkIHF1ZXVlTG9hZEFsdGVybmF0ZUhUTUxTdHJpbmcoSlNTdHJpbmdSZWYgY29udGVu
dCwgSlNTdHJpbmdSZWYgYmFzZVVSTCwgSlNTdHJpbmdSZWYgdW5yZWFjaGFibGVVUkwpOworICAg
IHZvaWQgcXVldWVMb2FkaW5nU2NyaXB0KEpTU3RyaW5nUmVmIHNjcmlwdCk7CisgICAgdm9pZCBx
dWV1ZU5vbkxvYWRpbmdTY3JpcHQoSlNTdHJpbmdSZWYgc2NyaXB0KTsKKyAgICB2b2lkIHF1ZXVl
UmVsb2FkKCk7CisgICAgdm9pZCByZW1vdmVBbGxWaXNpdGVkTGlua3MoKTsKKyAgICB2b2lkIHNl
bmRXZWJJbnRlbnRSZXNwb25zZShKU1N0cmluZ1JlZiByZXNwb25zZSk7CisgICAgdm9pZCBzZXRB
Y2NlcHRzRWRpdGluZyhib29sIGFjY2VwdHNFZGl0aW5nKTsKKyAgICB2b2lkIHNldEFsbG93VW5p
dmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wpOworICAgIHZvaWQgc2V0QWxsb3dGaWxlQWNj
ZXNzRnJvbUZpbGVVUkxzKGJvb2wpOworICAgIHZvaWQgc2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSh1
bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpOworICAgIHZvaWQgc2V0QXBwbGljYXRpb25DYWNoZU9y
aWdpblF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSk7CisgICAgdm9pZCBzZXRBdXRob3JB
bmRVc2VyU3R5bGVzRW5hYmxlZChib29sKTsKKyAgICB2b2lkIHNldEF1dG9maWxsZWQoSlNDb250
ZXh0UmVmLCBKU1ZhbHVlUmVmIG5vZGVPYmplY3QsIGJvb2wgYXV0b2ZpbGxlZCk7CisgICAgdm9p
ZCBzZXRDYWNoZU1vZGVsKGludCk7CisgICAgdm9pZCBzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShi
b29sIHNldERlbGVnYXRlLCBib29sIHBlcm1pc3NpdmUpOworICAgIHZvaWQgc2V0RGF0YWJhc2VR
dW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpOworICAgIHZvaWQgc2V0RG9tYWluUmVsYXhh
dGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShib29sIGZvcmJpZGRlbiwgSlNTdHJpbmdSZWYgc2No
ZW1lKTsKKyAgICB2b2lkIHNldERlZmVyc0xvYWRpbmcoYm9vbCk7CisgICAgdm9pZCBzZXRJY29u
RGF0YWJhc2VFbmFibGVkKGJvb2wgaWNvbkRhdGFiYXNlRW5hYmxlZCk7CisgICAgdm9pZCBzZXRK
YXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKGJvb2wgZmxhZyk7CisgICAgdm9pZCBzZXRBdXRv
bWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZChib29sIGZsYWcpOworICAgIHZvaWQgc2V0TWFpbkZy
YW1lSXNGaXJzdFJlc3BvbmRlcihib29sIGZsYWcpOworICAgIHZvaWQgc2V0TW9ja0RldmljZU9y
aWVudGF0aW9uKGJvb2wgY2FuUHJvdmlkZUFscGhhLCBkb3VibGUgYWxwaGEsIGJvb2wgY2FuUHJv
dmlkZUJldGEsIGRvdWJsZSBiZXRhLCBib29sIGNhblByb3ZpZGVHYW1tYSwgZG91YmxlIGdhbW1h
KTsKKyAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvbkVycm9yKGludCBjb2RlLCBKU1N0cmluZ1Jl
ZiBtZXNzYWdlKTsKKyAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBs
YXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5KTsKKyAgICB2b2lkIGFk
ZE1vY2tTcGVlY2hJbnB1dFJlc3VsdChKU1N0cmluZ1JlZiByZXN1bHQsIGRvdWJsZSBjb25maWRl
bmNlLCBKU1N0cmluZ1JlZiBsYW5ndWFnZSk7CisgICAgdm9pZCBzZXRNb2NrU3BlZWNoSW5wdXRE
dW1wUmVjdChib29sIGZsYWcpOworICAgIHZvaWQgc2V0UGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0
TG9jYXRpb24oSlNTdHJpbmdSZWYgcGF0aCk7CisgICAgdm9pZCBzZXRQbHVnaW5zRW5hYmxlZChi
b29sIGZsYWcpOworICAgIHZvaWQgc2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQoYm9vbCBmbGFnKTsK
KyAgICB2b2lkIHNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoYm9vbCBmbGFnKTsKKyAgICB2b2lk
IHNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoYm9vbCBmbGFnKTsKKyAgICB2b2lk
IHNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChib29sIGZsYWcpOworICAgIHZvaWQgc2V0VGFi
S2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKGJvb2wgY3ljbGVzKTsKKyAgICB2b2lkIHNldFVzZURh
c2hib2FyZENvbXBhdGliaWxpdHlNb2RlKGJvb2wgZmxhZyk7CisgICAgdm9pZCBzZXRVc2VyU3R5
bGVTaGVldEVuYWJsZWQoYm9vbCBmbGFnKTsKKyAgICB2b2lkIHNldFVzZXJTdHlsZVNoZWV0TG9j
YXRpb24oSlNTdHJpbmdSZWYgcGF0aCk7CisgICAgdm9pZCBzZXRWYWx1ZUZvclVzZXIoSlNDb250
ZXh0UmVmLCBKU1ZhbHVlUmVmIG5vZGVPYmplY3QsIEpTU3RyaW5nUmVmIHZhbHVlKTsKKyAgICB2
b2lkIHNldFZpZXdNb2RlTWVkaWFGZWF0dXJlKEpTU3RyaW5nUmVmIG1vZGUpOworICAgIHZvaWQg
c2V0WFNTQXVkaXRvckVuYWJsZWQoYm9vbCBmbGFnKTsKKyAgICB2b2lkIHNldEZyYW1lRmxhdHRl
bmluZ0VuYWJsZWQoYm9vbCBlbmFibGUpOworICAgIHZvaWQgc2V0U3BhdGlhbE5hdmlnYXRpb25F
bmFibGVkKGJvb2wgZW5hYmxlKTsKKyAgICB2b2lkIHNldFNjcm9sbGJhclBvbGljeShKU1N0cmlu
Z1JlZiBvcmllbnRhdGlvbiwgSlNTdHJpbmdSZWYgcG9saWN5KTsKKyAgICB2b2lkIHN0YXJ0U3Bl
ZWNoSW5wdXQoSlNDb250ZXh0UmVmIGlucHV0RWxlbWVudCk7CisgICAgdm9pZCBzZXRQYWdlVmlz
aWJpbGl0eShjb25zdCBjaGFyKik7CisgICAgdm9pZCByZXNldFBhZ2VWaXNpYmlsaXR5KCk7CisK
KyAgICB2b2lkIHdhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgpOworICAgIHNpemVfdCB3ZWJIaXN0b3J5
SXRlbUNvdW50KCk7CisgICAgdW5zaWduZWQgd29ya2VyVGhyZWFkQ291bnQoKSBjb25zdDsKKyAg
ICBpbnQgd2luZG93Q291bnQoKTsKKyAgICAKKyNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JN
KEdUSykgfHwgUExBVEZPUk0oV0lOKQorICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBwbGF0
Zm9ybU5hbWUoKSBjb25zdDsKKyNlbmRpZgorCisgICAgdm9pZCBncmFudERlc2t0b3BOb3RpZmlj
YXRpb25QZXJtaXNzaW9uKEpTU3RyaW5nUmVmIG9yaWdpbik7CisgICAgYm9vbCBjaGVja0Rlc2t0
b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uKEpTU3RyaW5nUmVmIG9yaWdpbik7CisgICAgdm9pZCBp
Z25vcmVEZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKCk7CisgICAgYm9vbCBh
cmVEZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzSWdub3JlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fYXJlRGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0c0lnbm9yZWQ7
IH0KKyAgICB2b2lkIHNpbXVsYXRlRGVza3RvcE5vdGlmaWNhdGlvbkNsaWNrKEpTU3RyaW5nUmVm
IHRpdGxlKTsKKworICAgIGJvb2wgZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0
aElkKEpTU3RyaW5nUmVmIGlkKTsKKworICAgIGJvb2wgZHVtcEFzQXVkaW8oKSBjb25zdCB7IHJl
dHVybiBtX2R1bXBBc0F1ZGlvOyB9CisgICAgdm9pZCBzZXREdW1wQXNBdWRpbyhib29sIGR1bXBB
c0F1ZGlvKSB7IG1fZHVtcEFzQXVkaW8gPSBkdW1wQXNBdWRpbzsgfQorICAgIAorICAgIGJvb2wg
ZHVtcEFzUERGKCkgY29uc3QgeyByZXR1cm4gbV9kdW1wQXNQREY7IH0KKyAgICB2b2lkIHNldER1
bXBBc1BERihib29sIGR1bXBBc1BERikgeyBtX2R1bXBBc1BERiA9IGR1bXBBc1BERjsgfQorCisg
ICAgYm9vbCBkdW1wQXNUZXh0KCkgY29uc3QgeyByZXR1cm4gbV9kdW1wQXNUZXh0OyB9CisgICAg
dm9pZCBzZXREdW1wQXNUZXh0KGJvb2wgZHVtcEFzVGV4dCkgeyBtX2R1bXBBc1RleHQgPSBkdW1w
QXNUZXh0OyB9CisKKyAgICBib29sIGdlbmVyYXRlUGl4ZWxSZXN1bHRzKCkgY29uc3QgeyByZXR1
cm4gbV9nZW5lcmF0ZVBpeGVsUmVzdWx0czsgfQorICAgIHZvaWQgc2V0R2VuZXJhdGVQaXhlbFJl
c3VsdHMoYm9vbCBnZW5lcmF0ZVBpeGVsUmVzdWx0cykgeyBtX2dlbmVyYXRlUGl4ZWxSZXN1bHRz
ID0gZ2VuZXJhdGVQaXhlbFJlc3VsdHM7IH0KKworICAgIGJvb2wgZGlzYWxsb3dJbmNyZWFzZUZv
ckFwcGxpY2F0aW9uQ2FjaGVRdW90YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzYWxsb3dJbmNyZWFz
ZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90YTsgfQorICAgIHZvaWQgc2V0RGlzYWxsb3dJbmNyZWFz
ZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90YShib29sIGRpc2FsbG93SW5jcmVhc2UpIHsgbV9kaXNh
bGxvd0luY3JlYXNlRm9yQXBwbGljYXRpb25DYWNoZVF1b3RhID0gZGlzYWxsb3dJbmNyZWFzZTsg
fQorCisgICAgYm9vbCBkdW1wQXBwbGljYXRpb25DYWNoZURlbGVnYXRlQ2FsbGJhY2tzKCkgY29u
c3QgeyByZXR1cm4gbV9kdW1wQXBwbGljYXRpb25DYWNoZURlbGVnYXRlQ2FsbGJhY2tzOyB9Cisg
ICAgdm9pZCBzZXREdW1wQXBwbGljYXRpb25DYWNoZURlbGVnYXRlQ2FsbGJhY2tzKGJvb2wgZHVt
cENhbGxiYWNrcykgeyBtX2R1bXBBcHBsaWNhdGlvbkNhY2hlRGVsZWdhdGVDYWxsYmFja3MgPSBk
dW1wQ2FsbGJhY2tzOyB9CisKKyAgICBib29sIGR1bXBCYWNrRm9yd2FyZExpc3QoKSBjb25zdCB7
IHJldHVybiBtX2R1bXBCYWNrRm9yd2FyZExpc3Q7IH0KKyAgICB2b2lkIHNldER1bXBCYWNrRm9y
d2FyZExpc3QoYm9vbCBkdW1wQmFja0ZvcndhcmRMaXN0KSB7IG1fZHVtcEJhY2tGb3J3YXJkTGlz
dCA9IGR1bXBCYWNrRm9yd2FyZExpc3Q7IH0KKworICAgIGJvb2wgZHVtcENoaWxkRnJhbWVTY3Jv
bGxQb3NpdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2R1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRp
b25zOyB9CisgICAgdm9pZCBzZXREdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9ucyhib29sIGR1
bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zKSB7IG1fZHVtcENoaWxkRnJhbWVTY3JvbGxQb3Np
dGlvbnMgPSBkdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9uczsgfQorCisgICAgYm9vbCBkdW1w
Q2hpbGRGcmFtZXNBc1RleHQoKSBjb25zdCB7IHJldHVybiBtX2R1bXBDaGlsZEZyYW1lc0FzVGV4
dDsgfQorICAgIHZvaWQgc2V0RHVtcENoaWxkRnJhbWVzQXNUZXh0KGJvb2wgZHVtcENoaWxkRnJh
bWVzQXNUZXh0KSB7IG1fZHVtcENoaWxkRnJhbWVzQXNUZXh0ID0gZHVtcENoaWxkRnJhbWVzQXNU
ZXh0OyB9CisKKyAgICBib29sIGR1bXBEYXRhYmFzZUNhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJu
IG1fZHVtcERhdGFiYXNlQ2FsbGJhY2tzOyB9CisgICAgdm9pZCBzZXREdW1wRGF0YWJhc2VDYWxs
YmFja3MoYm9vbCBkdW1wRGF0YWJhc2VDYWxsYmFja3MpIHsgbV9kdW1wRGF0YWJhc2VDYWxsYmFj
a3MgPSBkdW1wRGF0YWJhc2VDYWxsYmFja3M7IH0KKworICAgIGJvb2wgZHVtcERPTUFzV2ViQXJj
aGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcERPTUFzV2ViQXJjaGl2ZTsgfQorICAgIHZvaWQg
c2V0RHVtcERPTUFzV2ViQXJjaGl2ZShib29sIGR1bXBET01Bc1dlYkFyY2hpdmUpIHsgbV9kdW1w
RE9NQXNXZWJBcmNoaXZlID0gZHVtcERPTUFzV2ViQXJjaGl2ZTsgfQorCisgICAgYm9vbCBkdW1w
RWRpdGluZ0NhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcEVkaXRpbmdDYWxsYmFja3M7
IH0KKyAgICB2b2lkIHNldER1bXBFZGl0aW5nQ2FsbGJhY2tzKGJvb2wgZHVtcEVkaXRpbmdDYWxs
YmFja3MpIHsgbV9kdW1wRWRpdGluZ0NhbGxiYWNrcyA9IGR1bXBFZGl0aW5nQ2FsbGJhY2tzOyB9
CisKKyAgICBib29sIGR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBtX2R1
bXBGcmFtZUxvYWRDYWxsYmFja3M7IH0KKyAgICB2b2lkIHNldER1bXBGcmFtZUxvYWRDYWxsYmFj
a3MoYm9vbCBkdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKSB7IG1fZHVtcEZyYW1lTG9hZENhbGxiYWNr
cyA9IGR1bXBGcmFtZUxvYWRDYWxsYmFja3M7IH0KKworICAgIGJvb2wgZHVtcFByb2dyZXNzRmlu
aXNoZWRDYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcFByb2dyZXNzRmluaXNoZWRDYWxs
YmFjazsgfQorICAgIHZvaWQgc2V0RHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjayhib29sIGR1
bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2spIHsgbV9kdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxi
YWNrID0gZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjazsgfQorICAgIAorICAgIGJvb2wgZHVt
cFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBtX2R1bXBV
c2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzOyB9CisgICAgdm9pZCBzZXREdW1wVXNlckdl
c3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrcyhib29sIGR1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2Fk
Q2FsbGJhY2tzKSB7IG1fZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MgPSBkdW1w
VXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrczsgfSAgICAKKworICAgIGJvb2wgZHVtcEhp
c3RvcnlEZWxlZ2F0ZUNhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcEhpc3RvcnlEZWxl
Z2F0ZUNhbGxiYWNrczsgfQorICAgIHZvaWQgc2V0RHVtcEhpc3RvcnlEZWxlZ2F0ZUNhbGxiYWNr
cyhib29sIGR1bXBIaXN0b3J5RGVsZWdhdGVDYWxsYmFja3MpIHsgbV9kdW1wSGlzdG9yeURlbGVn
YXRlQ2FsbGJhY2tzID0gZHVtcEhpc3RvcnlEZWxlZ2F0ZUNhbGxiYWNrczsgfQorICAgIAorICAg
IGJvb2wgZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcFJl
c291cmNlTG9hZENhbGxiYWNrczsgfQorICAgIHZvaWQgc2V0RHVtcFJlc291cmNlTG9hZENhbGxi
YWNrcyhib29sIGR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MpIHsgbV9kdW1wUmVzb3VyY2VMb2Fk
Q2FsbGJhY2tzID0gZHVtcFJlc291cmNlTG9hZENhbGxiYWNrczsgfQorICAgIAorICAgIGJvb2wg
ZHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXMoKSBjb25zdCB7IHJldHVybiBtX2R1bXBSZXNv
dXJjZVJlc3BvbnNlTUlNRVR5cGVzOyB9CisgICAgdm9pZCBzZXREdW1wUmVzb3VyY2VSZXNwb25z
ZU1JTUVUeXBlcyhib29sIGR1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzKSB7IG1fZHVtcFJl
c291cmNlUmVzcG9uc2VNSU1FVHlwZXMgPSBkdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlczsg
fQorCisgICAgYm9vbCBkdW1wU2VsZWN0aW9uUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcFNl
bGVjdGlvblJlY3Q7IH0KKyAgICB2b2lkIHNldER1bXBTZWxlY3Rpb25SZWN0KGJvb2wgZHVtcFNl
bGVjdGlvblJlY3QpIHsgbV9kdW1wU2VsZWN0aW9uUmVjdCA9IGR1bXBTZWxlY3Rpb25SZWN0OyB9
CisKKyAgICBib29sIGR1bXBTb3VyY2VBc1dlYkFyY2hpdmUoKSBjb25zdCB7IHJldHVybiBtX2R1
bXBTb3VyY2VBc1dlYkFyY2hpdmU7IH0KKyAgICB2b2lkIHNldER1bXBTb3VyY2VBc1dlYkFyY2hp
dmUoYm9vbCBkdW1wU291cmNlQXNXZWJBcmNoaXZlKSB7IG1fZHVtcFNvdXJjZUFzV2ViQXJjaGl2
ZSA9IGR1bXBTb3VyY2VBc1dlYkFyY2hpdmU7IH0KKworICAgIGJvb2wgZHVtcFN0YXR1c0NhbGxi
YWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcFN0YXR1c0NhbGxiYWNrczsgfQorICAgIHZvaWQg
c2V0RHVtcFN0YXR1c0NhbGxiYWNrcyhib29sIGR1bXBTdGF0dXNDYWxsYmFja3MpIHsgbV9kdW1w
U3RhdHVzQ2FsbGJhY2tzID0gZHVtcFN0YXR1c0NhbGxiYWNrczsgfQorCisgICAgYm9vbCBkdW1w
VGl0bGVDaGFuZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9kdW1wVGl0bGVDaGFuZ2VzOyB9CisgICAg
dm9pZCBzZXREdW1wVGl0bGVDaGFuZ2VzKGJvb2wgZHVtcFRpdGxlQ2hhbmdlcykgeyBtX2R1bXBU
aXRsZUNoYW5nZXMgPSBkdW1wVGl0bGVDaGFuZ2VzOyB9CisKKyAgICBib29sIGR1bXBJY29uQ2hh
bmdlcygpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcEljb25DaGFuZ2VzOyB9CisgICAgdm9pZCBzZXRE
dW1wSWNvbkNoYW5nZXMoYm9vbCBkdW1wSWNvbkNoYW5nZXMpIHsgbV9kdW1wSWNvbkNoYW5nZXMg
PSBkdW1wSWNvbkNoYW5nZXM7IH0KKworICAgIGJvb2wgZHVtcFZpc2l0ZWRMaW5rc0NhbGxiYWNr
KCkgY29uc3QgeyByZXR1cm4gbV9kdW1wVmlzaXRlZExpbmtzQ2FsbGJhY2s7IH0KKyAgICB2b2lk
IHNldER1bXBWaXNpdGVkTGlua3NDYWxsYmFjayhib29sIGR1bXBWaXNpdGVkTGlua3NDYWxsYmFj
aykgeyBtX2R1bXBWaXNpdGVkTGlua3NDYWxsYmFjayA9IGR1bXBWaXNpdGVkTGlua3NDYWxsYmFj
azsgfQorICAgIAorICAgIGJvb2wgZHVtcFdpbGxDYWNoZVJlc3BvbnNlKCkgY29uc3QgeyByZXR1
cm4gbV9kdW1wV2lsbENhY2hlUmVzcG9uc2U7IH0KKyAgICB2b2lkIHNldER1bXBXaWxsQ2FjaGVS
ZXNwb25zZShib29sIGR1bXBXaWxsQ2FjaGVSZXNwb25zZSkgeyBtX2R1bXBXaWxsQ2FjaGVSZXNw
b25zZSA9IGR1bXBXaWxsQ2FjaGVSZXNwb25zZTsgfQorICAgIAorICAgIGJvb2wgY2FsbENsb3Nl
T25XZWJWaWV3cygpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbENsb3NlT25XZWJWaWV3czsgfQorICAg
IHZvaWQgc2V0Q2FsbENsb3NlT25XZWJWaWV3cyhib29sIGNhbGxDbG9zZU9uV2ViVmlld3MpIHsg
bV9jYWxsQ2xvc2VPbldlYlZpZXdzID0gY2FsbENsb3NlT25XZWJWaWV3czsgfQorCisgICAgYm9v
bCBjYW5PcGVuV2luZG93cygpIGNvbnN0IHsgcmV0dXJuIG1fY2FuT3BlbldpbmRvd3M7IH0KKyAg
ICB2b2lkIHNldENhbk9wZW5XaW5kb3dzKGJvb2wgY2FuT3BlbldpbmRvd3MpIHsgbV9jYW5PcGVu
V2luZG93cyA9IGNhbk9wZW5XaW5kb3dzOyB9CisKKyAgICBib29sIGNsb3NlUmVtYWluaW5nV2lu
ZG93c1doZW5Db21wbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2xvc2VSZW1haW5pbmdXaW5kb3dz
V2hlbkNvbXBsZXRlOyB9CisgICAgdm9pZCBzZXRDbG9zZVJlbWFpbmluZ1dpbmRvd3NXaGVuQ29t
cGxldGUoYm9vbCBjbG9zZVJlbWFpbmluZ1dpbmRvd3NXaGVuQ29tcGxldGUpIHsgbV9jbG9zZVJl
bWFpbmluZ1dpbmRvd3NXaGVuQ29tcGxldGUgPSBjbG9zZVJlbWFpbmluZ1dpbmRvd3NXaGVuQ29t
cGxldGU7IH0KKyAgICAKKyAgICBib29sIG5ld1dpbmRvd3NDb3B5QmFja0ZvcndhcmRMaXN0KCkg
Y29uc3QgeyByZXR1cm4gbV9uZXdXaW5kb3dzQ29weUJhY2tGb3J3YXJkTGlzdDsgfQorICAgIHZv
aWQgc2V0TmV3V2luZG93c0NvcHlCYWNrRm9yd2FyZExpc3QoYm9vbCBuZXdXaW5kb3dzQ29weUJh
Y2tGb3J3YXJkTGlzdCkgeyBtX25ld1dpbmRvd3NDb3B5QmFja0ZvcndhcmRMaXN0ID0gbmV3V2lu
ZG93c0NvcHlCYWNrRm9yd2FyZExpc3Q7IH0KKyAgICAKKyAgICBib29sIHN0b3BQcm92aXNpb25h
bEZyYW1lTG9hZHMoKSBjb25zdCB7IHJldHVybiBtX3N0b3BQcm92aXNpb25hbEZyYW1lTG9hZHM7
IH0KKyAgICB2b2lkIHNldFN0b3BQcm92aXNpb25hbEZyYW1lTG9hZHMoYm9vbCBzdG9wUHJvdmlz
aW9uYWxGcmFtZUxvYWRzKSB7IG1fc3RvcFByb3Zpc2lvbmFsRnJhbWVMb2FkcyA9IHN0b3BQcm92
aXNpb25hbEZyYW1lTG9hZHM7IH0KKworICAgIGJvb2wgdGVzdE9uc2NyZWVuKCkgY29uc3QgeyBy
ZXR1cm4gbV90ZXN0T25zY3JlZW47IH0KKyAgICB2b2lkIHNldFRlc3RPbnNjcmVlbihib29sIHRl
c3RPbnNjcmVlbikgeyBtX3Rlc3RPbnNjcmVlbiA9IHRlc3RPbnNjcmVlbjsgfQorCisgICAgYm9v
bCB0ZXN0UmVwYWludCgpIGNvbnN0IHsgcmV0dXJuIG1fdGVzdFJlcGFpbnQ7IH0KKyAgICB2b2lk
IHNldFRlc3RSZXBhaW50KGJvb2wgdGVzdFJlcGFpbnQpIHsgbV90ZXN0UmVwYWludCA9IHRlc3RS
ZXBhaW50OyB9CisKKyAgICBib29sIHRlc3RSZXBhaW50U3dlZXBIb3Jpem9udGFsbHkoKSBjb25z
dCB7IHJldHVybiBtX3Rlc3RSZXBhaW50U3dlZXBIb3Jpem9udGFsbHk7IH0KKyAgICB2b2lkIHNl
dFRlc3RSZXBhaW50U3dlZXBIb3Jpem9udGFsbHkoYm9vbCB0ZXN0UmVwYWludFN3ZWVwSG9yaXpv
bnRhbGx5KSB7IG1fdGVzdFJlcGFpbnRTd2VlcEhvcml6b250YWxseSA9IHRlc3RSZXBhaW50U3dl
ZXBIb3Jpem9udGFsbHk7IH0KKworICAgIGJvb2wgd2FpdFRvRHVtcCgpIGNvbnN0IHsgcmV0dXJu
IG1fd2FpdFRvRHVtcDsgfQorICAgIHZvaWQgc2V0V2FpdFRvRHVtcChib29sIHdhaXRUb0R1bXAp
OworICAgIHZvaWQgd2FpdFRvRHVtcFdhdGNoZG9nVGltZXJGaXJlZCgpOworCisgICAgY29uc3Qg
c3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiB3aWxsU2VuZFJlcXVlc3RDbGVhckhlYWRlcnMoKSBjb25z
dCB7IHJldHVybiBtX3dpbGxTZW5kUmVxdWVzdENsZWFySGVhZGVyczsgfQorICAgIHZvaWQgc2V0
V2lsbFNlbmRSZXF1ZXN0Q2xlYXJIZWFkZXIoc3RkOjpzdHJpbmcgaGVhZGVyKSB7IG1fd2lsbFNl
bmRSZXF1ZXN0Q2xlYXJIZWFkZXJzLmluc2VydChoZWFkZXIpOyB9CisKKyAgICBib29sIHdpbGxT
ZW5kUmVxdWVzdFJldHVybnNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV93aWxsU2VuZFJlcXVlc3RS
ZXR1cm5zTnVsbDsgfQorICAgIHZvaWQgc2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwoYm9v
bCByZXR1cm5zTnVsbCkgeyBtX3dpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsID0gcmV0dXJuc051
bGw7IH0KKworICAgIGJvb2wgd2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV93aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3Q7IH0K
KyAgICB2b2lkIHNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVjdChib29sIHJl
dHVybnNOdWxsKSB7IG1fd2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0ID0gcmV0
dXJuc051bGw7IH0KKworICAgIGJvb2wgd2luZG93SXNLZXkoKSBjb25zdCB7IHJldHVybiBtX3dp
bmRvd0lzS2V5OyB9CisgICAgdm9pZCBzZXRXaW5kb3dJc0tleShib29sIHdpbmRvd0lzS2V5KTsK
KworICAgIGJvb2wgYWx3YXlzQWNjZXB0Q29va2llcygpIGNvbnN0IHsgcmV0dXJuIG1fYWx3YXlz
QWNjZXB0Q29va2llczsgfQorICAgIHZvaWQgc2V0QWx3YXlzQWNjZXB0Q29va2llcyhib29sIGFs
d2F5c0FjY2VwdENvb2tpZXMpOworICAgIAorICAgIGJvb2wgaGFuZGxlc0F1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlcygpIGNvbnN0IHsgcmV0dXJuIG1faGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlczsgfQorICAgIHZvaWQgc2V0SGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyhib29s
IGhhbmRsZXNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMpIHsgbV9oYW5kbGVzQXV0aGVudGljYXRp
b25DaGFsbGVuZ2VzID0gaGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlczsgfQorICAgIAor
ICAgIGJvb2wgaXNQcmludGluZygpIGNvbnN0IHsgcmV0dXJuIG1faXNQcmludGluZzsgfQorICAg
IHZvaWQgc2V0SXNQcmludGluZyhib29sIGlzUHJpbnRpbmcpIHsgbV9pc1ByaW50aW5nID0gaXNQ
cmludGluZzsgfQorCisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGF1dGhlbnRpY2F0aW9uVXNlcm5h
bWUoKSBjb25zdCB7IHJldHVybiBtX2F1dGhlbnRpY2F0aW9uVXNlcm5hbWU7IH0KKyAgICB2b2lk
IHNldEF1dGhlbnRpY2F0aW9uVXNlcm5hbWUoc3RkOjpzdHJpbmcgdXNlcm5hbWUpIHsgbV9hdXRo
ZW50aWNhdGlvblVzZXJuYW1lID0gdXNlcm5hbWU7IH0KKyAgICAKKyAgICBjb25zdCBzdGQ6OnN0
cmluZyYgYXV0aGVudGljYXRpb25QYXNzd29yZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXV0aGVudGlj
YXRpb25QYXNzd29yZDsgfQorICAgIHZvaWQgc2V0QXV0aGVudGljYXRpb25QYXNzd29yZChzdGQ6
OnN0cmluZyBwYXNzd29yZCkgeyBtX2F1dGhlbnRpY2F0aW9uUGFzc3dvcmQgPSBwYXNzd29yZDsg
fQorCisgICAgYm9vbCBnbG9iYWxGbGFnKCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxGbGFnOyB9
CisgICAgdm9pZCBzZXRHbG9iYWxGbGFnKGJvb2wgZ2xvYmFsRmxhZykgeyBtX2dsb2JhbEZsYWcg
PSBnbG9iYWxGbGFnOyB9CisgICAgCisgICAgYm9vbCBkZWZlck1haW5SZXNvdXJjZURhdGFMb2Fk
KCkgY29uc3QgeyByZXR1cm4gbV9kZWZlck1haW5SZXNvdXJjZURhdGFMb2FkOyB9CisgICAgdm9p
ZCBzZXREZWZlck1haW5SZXNvdXJjZURhdGFMb2FkKGJvb2wgZmxhZykgeyBtX2RlZmVyTWFpblJl
c291cmNlRGF0YUxvYWQgPSBmbGFnOyB9CisKKyAgICBib29sIHVzZURlZmVycmVkRnJhbWVMb2Fk
aW5nKCkgY29uc3QgeyByZXR1cm4gbV91c2VEZWZlcnJlZEZyYW1lTG9hZGluZzsgfQorICAgIHZv
aWQgc2V0VXNlRGVmZXJyZWRGcmFtZUxvYWRpbmcoYm9vbCBmbGFnKSB7IG1fdXNlRGVmZXJyZWRG
cmFtZUxvYWRpbmcgPSBmbGFnOyB9CisKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgdGVzdFBhdGhP
clVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fdGVzdFBhdGhPclVSTDsgfQorICAgIGNvbnN0IHN0ZDo6
c3RyaW5nJiBleHBlY3RlZFBpeGVsSGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwZWN0ZWRQaXhl
bEhhc2g7IH0KKworICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBlbmNvZGVkQXVkaW9EYXRhKCkgY29u
c3QgeyByZXR1cm4gbV9lbmNvZGVkQXVkaW9EYXRhOyB9CisgICAgdm9pZCBzZXRFbmNvZGVkQXVk
aW9EYXRhKGNvbnN0IHN0ZDo6c3RyaW5nJiBlbmNvZGVkQXVkaW9EYXRhKSB7IG1fZW5jb2RlZEF1
ZGlvRGF0YSA9IGVuY29kZWRBdWRpb0RhdGE7IH0KKyAgICAKKyAgICBib29sIHBhdXNlQW5pbWF0
aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIGFuaW1hdGlvbk5hbWUsIGRvdWJs
ZSB0aW1lLCBKU1N0cmluZ1JlZiBlbGVtZW50SWQpOworICAgIGJvb2wgcGF1c2VUcmFuc2l0aW9u
QXRUaW1lT25FbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgZG91YmxlIHRp
bWUsIEpTU3RyaW5nUmVmIGVsZW1lbnRJZCk7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZBY3RpdmVB
bmltYXRpb25zKCkgY29uc3Q7CisKKyAgICB2b2lkIGFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVu
dHJ5KEpTU3RyaW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Qcm90
b2NvbCwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRpb25T
dWJkb21haW5zKTsKKyAgICB2b2lkIHJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KEpT
U3RyaW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Qcm90b2NvbCwg
SlNTdHJpbmdSZWYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21h
aW5zKTsKKworICAgIHZvaWQgYWRkVXNlclNjcmlwdChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wg
cnVuQXRTdGFydCwgYm9vbCBhbGxGcmFtZXMpOworICAgIHZvaWQgYWRkVXNlclN0eWxlU2hlZXQo
SlNTdHJpbmdSZWYgc291cmNlLCBib29sIGFsbEZyYW1lcyk7CisKKyAgICB2b2lkIHNldEdlb2xv
Y2F0aW9uUGVybWlzc2lvbihib29sIGFsbG93KTsKKyAgICBib29sIGlzR2VvbG9jYXRpb25QZXJt
aXNzaW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9pc0dlb2xvY2F0aW9uUGVybWlzc2lvblNldDsg
fQorICAgIGJvb2wgZ2VvbG9jYXRpb25QZXJtaXNzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9nZW9s
b2NhdGlvblBlcm1pc3Npb247IH0KKworICAgIHZvaWQgc2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxl
ZChib29sKTsKKyAgICB2b2lkIHNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJv
b2wpOworICAgIHZvaWQgc2hvd1dlYkluc3BlY3RvcigpOworICAgIHZvaWQgY2xvc2VXZWJJbnNw
ZWN0b3IoKTsKKyAgICB2b2lkIGV2YWx1YXRlSW5XZWJJbnNwZWN0b3IobG9uZyBjYWxsSWQsIEpT
U3RyaW5nUmVmIHNjcmlwdCk7CisgICAgdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3Js
ZCh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVm
IHNjcmlwdCk7CisgICAgdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVy
blZhbHVlKHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJp
bmdSZWYgc2NyaXB0KTsKKworICAgIGJvb2wgc2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdC
ZWZvcmVVbmxvYWQoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRs
aW5nQmVmb3JlVW5sb2FkOyB9CisgICAgdm9pZCBzZXRTaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5k
bGluZ0JlZm9yZVVubG9hZChib29sIHNob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3Jl
VW5sb2FkKSB7IG1fc2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQgPSBz
aG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZDsgfQorCisgICAgdm9pZCBh
ZGRDaHJvbWVJbnB1dEZpZWxkKCk7CisgICAgdm9pZCByZW1vdmVDaHJvbWVJbnB1dEZpZWxkKCk7
CisgICAgdm9pZCBmb2N1c1dlYlZpZXcoKTsKKworICAgIHZvaWQgc2V0QmFja2luZ1NjYWxlRmFj
dG9yKGRvdWJsZSk7CisKKyAgICB2b2lkIHNldFBPU0lYTG9jYWxlKEpTU3RyaW5nUmVmIGxvY2Fs
ZSk7CisKKyAgICB2b2lkIHNldFdlYlZpZXdFZGl0YWJsZShib29sKTsKKworICAgIHZvaWQgYWJv
cnRNb2RhbCgpOworCisgICAgc3RhdGljIHZvaWQgc2V0U2VyaWFsaXplSFRUUExvYWRzKGJvb2wg
c2VyaWFsaXplKTsKKworICAgIC8vIFRoZSBmb2xsb3dpbmcgQVBJIHRlc3QgZnVuY3Rpb25zIHNo
b3VsZCBwcm9iYWJseSBiZSBtb3ZlZCB0byBwbGF0Zm9ybS1zcGVjaWZpYyAKKyAgICAvLyB1bml0
IHRlc3RzIG91dHNpZGUgb2YgRFJUIG9uY2UgdGhleSBleGlzdC4KKyAgICB2b2lkIGFwaVRlc3RO
ZXdXaW5kb3dEYXRhTG9hZEJhc2VVUkwoSlNTdHJpbmdSZWYgdXRmOERhdGEsIEpTU3RyaW5nUmVm
IGJhc2VVUkwpOworICAgIHZvaWQgYXBpVGVzdEdvVG9DdXJyZW50QmFja0ZvcndhcmRJdGVtKCk7
CisKKyAgICAvLyBTaW11bGF0ZSBhIHJlcXVlc3QgYW4gZW1iZWRkaW5nIGFwcGxpY2F0aW9uIGNv
dWxkIG1ha2UsIHBvcHVsYXRpbmcgcGVyLXNlc3Npb24gY3JlZGVudGlhbCBzdG9yYWdlLgorICAg
IHZvaWQgYXV0aGVudGljYXRlU2Vzc2lvbihKU1N0cmluZ1JlZiB1cmwsIEpTU3RyaW5nUmVmIHVz
ZXJuYW1lLCBKU1N0cmluZ1JlZiBwYXNzd29yZCk7CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gbGF5ZXJUcmVlQXNUZXh0KCkgY29uc3Q7CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gbWFya2VyVGV4dEZvckxpc3RJdGVtKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVl
UmVmIG5vZGVPYmplY3QpIGNvbnN0OworCisgICAgSlNWYWx1ZVJlZiBvcmlnaW5zV2l0aExvY2Fs
U3RvcmFnZShKU0NvbnRleHRSZWYpOworICAgIHZvaWQgZGVsZXRlQWxsTG9jYWxTdG9yYWdlKCk7
CisgICAgdm9pZCBkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgb3JpZ2lu
SWRlbnRpZmllcik7CisgICAgbG9uZyBsb25nIGxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdp
bihKU1N0cmluZ1JlZiBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIG9ic2VydmVTdG9yYWdl
VHJhY2tlck5vdGlmaWNhdGlvbnModW5zaWduZWQgbnVtYmVyKTsKKyAgICB2b2lkIHN5bmNMb2Nh
bFN0b3JhZ2UoKTsKKworICAgIHZvaWQgc2V0U2hvdWxkUGFpbnRCcm9rZW5JbWFnZShib29sKTsK
KyAgICBib29sIHNob3VsZFBhaW50QnJva2VuSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX3Nob3Vs
ZFBhaW50QnJva2VuSW1hZ2U7IH0KKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhWaWV3
V2lkdGg7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFZpZXdIZWlnaHQ7CisKKyAgICB2
b2lkIHNldE1pbmltdW1UaW1lckludGVydmFsKGRvdWJsZSk7CisKKyAgICB2b2lkIHNldFRleHRE
aXJlY3Rpb24oSlNTdHJpbmdSZWYpOworICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0aXRsZVRleHRE
aXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3RpdGxlVGV4dERpcmVjdGlvbjsgfQorICAgIHZv
aWQgc2V0VGl0bGVUZXh0RGlyZWN0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBkaXJlY3Rpb24pIHsg
bV90aXRsZVRleHREaXJlY3Rpb24gPSBkaXJlY3Rpb247IH0KKworICAgIC8vIEN1c3RvbSBmdWxs
IHNjcmVlbiBiZWhhdmlvci4KKyAgICB2b2lkIHNldEhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlv
cihib29sIHZhbHVlKSB7IG1fY3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yID0gdmFsdWU7IH0KKyAg
ICBib29sIGhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvcigpIGNvbnN0IHsgcmV0dXJuIG1fY3Vz
dG9tRnVsbFNjcmVlbkJlaGF2aW9yOyB9CisKKyAgICB2b2lkIHNldFN0b3JhZ2VEYXRhYmFzZUlk
bGVJbnRlcnZhbChkb3VibGUpOworCitwcml2YXRlOgorICAgIExheW91dFRlc3RDb250cm9sbGVy
KGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXN0UGF0aE9yVVJMLCBjb25zdCBzdGQ6OnN0cmluZyYgZXhw
ZWN0ZWRQaXhlbEhhc2gpOworCisgICAgdm9pZCBzZXRHZW9sb2NhdGlvblBlcm1pc3Npb25Db21t
b24oYm9vbCBhbGxvdyk7CisKKyAgICBib29sIG1fZGlzYWxsb3dJbmNyZWFzZUZvckFwcGxpY2F0
aW9uQ2FjaGVRdW90YTsKKyAgICBib29sIG1fZHVtcEFwcGxpY2F0aW9uQ2FjaGVEZWxlZ2F0ZUNh
bGxiYWNrczsKKyAgICBib29sIG1fZHVtcEFzQXVkaW87CisgICAgYm9vbCBtX2R1bXBBc1BERjsK
KyAgICBib29sIG1fZHVtcEFzVGV4dDsKKyAgICBib29sIG1fZHVtcEJhY2tGb3J3YXJkTGlzdDsK
KyAgICBib29sIG1fZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnM7CisgICAgYm9vbCBtX2R1
bXBDaGlsZEZyYW1lc0FzVGV4dDsKKyAgICBib29sIG1fZHVtcERPTUFzV2ViQXJjaGl2ZTsKKyAg
ICBib29sIG1fZHVtcERhdGFiYXNlQ2FsbGJhY2tzOworICAgIGJvb2wgbV9kdW1wRWRpdGluZ0Nh
bGxiYWNrczsKKyAgICBib29sIG1fZHVtcEZyYW1lTG9hZENhbGxiYWNrczsKKyAgICBib29sIG1f
ZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjazsKKyAgICBib29sIG1fZHVtcFVzZXJHZXN0dXJl
SW5GcmFtZUxvYWRDYWxsYmFja3M7CisgICAgYm9vbCBtX2R1bXBIaXN0b3J5RGVsZWdhdGVDYWxs
YmFja3M7CisgICAgYm9vbCBtX2R1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3M7CisgICAgYm9vbCBt
X2R1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzOworICAgIGJvb2wgbV9kdW1wU2VsZWN0aW9u
UmVjdDsKKyAgICBib29sIG1fZHVtcFNvdXJjZUFzV2ViQXJjaGl2ZTsKKyAgICBib29sIG1fZHVt
cFN0YXR1c0NhbGxiYWNrczsKKyAgICBib29sIG1fZHVtcFRpdGxlQ2hhbmdlczsKKyAgICBib29s
IG1fZHVtcEljb25DaGFuZ2VzOworICAgIGJvb2wgbV9kdW1wVmlzaXRlZExpbmtzQ2FsbGJhY2s7
CisgICAgYm9vbCBtX2R1bXBXaWxsQ2FjaGVSZXNwb25zZTsKKyAgICBib29sIG1fZ2VuZXJhdGVQ
aXhlbFJlc3VsdHM7CisgICAgYm9vbCBtX2NhbGxDbG9zZU9uV2ViVmlld3M7CisgICAgYm9vbCBt
X2Nhbk9wZW5XaW5kb3dzOworICAgIGJvb2wgbV9jbG9zZVJlbWFpbmluZ1dpbmRvd3NXaGVuQ29t
cGxldGU7CisgICAgYm9vbCBtX25ld1dpbmRvd3NDb3B5QmFja0ZvcndhcmRMaXN0OworICAgIGJv
b2wgbV9zdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzOworICAgIGJvb2wgbV90ZXN0T25zY3JlZW47
CisgICAgYm9vbCBtX3Rlc3RSZXBhaW50OworICAgIGJvb2wgbV90ZXN0UmVwYWludFN3ZWVwSG9y
aXpvbnRhbGx5OworICAgIGJvb2wgbV93YWl0VG9EdW1wOyAvLyBUcnVlIGlmIHdhaXRVbnRpbERv
bmUoKSBoYXMgYmVlbiBjYWxsZWQsIGJ1dCBub3RpZnlEb25lKCkgaGFzIG5vdCB5ZXQgYmVlbiBj
YWxsZWQuCisgICAgYm9vbCBtX3dpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsOworICAgIGJvb2wg
bV93aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3Q7CisgICAgYm9vbCBtX3dpbmRv
d0lzS2V5OworICAgIGJvb2wgbV9hbHdheXNBY2NlcHRDb29raWVzOworICAgIGJvb2wgbV9nbG9i
YWxGbGFnOworICAgIGJvb2wgbV9pc0dlb2xvY2F0aW9uUGVybWlzc2lvblNldDsKKyAgICBib29s
IG1fZ2VvbG9jYXRpb25QZXJtaXNzaW9uOworICAgIGJvb2wgbV9oYW5kbGVzQXV0aGVudGljYXRp
b25DaGFsbGVuZ2VzOworICAgIGJvb2wgbV9pc1ByaW50aW5nOworICAgIGJvb2wgbV9kZWZlck1h
aW5SZXNvdXJjZURhdGFMb2FkOworICAgIGJvb2wgbV91c2VEZWZlcnJlZEZyYW1lTG9hZGluZzsK
KyAgICBib29sIG1fc2hvdWxkUGFpbnRCcm9rZW5JbWFnZTsKKyAgICBib29sIG1fc2hvdWxkU3Rh
eU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQ7CisgICAgYm9vbCBtX2FyZURlc2t0b3BO
b3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdHNJZ25vcmVkOworICAgIGJvb2wgbV9jdXN0b21G
dWxsU2NyZWVuQmVoYXZpb3I7CisKKyAgICBzdGQ6OnN0cmluZyBtX2F1dGhlbnRpY2F0aW9uVXNl
cm5hbWU7CisgICAgc3RkOjpzdHJpbmcgbV9hdXRoZW50aWNhdGlvblBhc3N3b3JkOyAKKyAgICBz
dGQ6OnN0cmluZyBtX3Rlc3RQYXRoT3JVUkw7CisgICAgc3RkOjpzdHJpbmcgbV9leHBlY3RlZFBp
eGVsSGFzaDsgICAgLy8gZW1wdHkgc3RyaW5nIGlmIG5vIGhhc2gKKyAgICBzdGQ6OnN0cmluZyBt
X3RpdGxlVGV4dERpcmVjdGlvbjsKKworICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBtX3dpbGxT
ZW5kUmVxdWVzdENsZWFySGVhZGVyczsKKyAgICAKKyAgICAvLyBiYXNlNjQgZW5jb2RlZCBXQVYg
YXVkaW8gZGF0YSBpcyBzdG9yZWQgaGVyZS4KKyAgICBzdGQ6OnN0cmluZyBtX2VuY29kZWRBdWRp
b0RhdGE7CisgICAgCisgICAgLy8gb3JpZ2lucyB3aGljaCBoYXZlIGJlZW4gZ3JhbnRlZCBkZXNr
dG9wIG5vdGlmaWNhdGlvbiBhY2Nlc3MKKyAgICBzdGQ6OnZlY3RvcjxKU1N0cmluZ1JlZj4gbV9k
ZXNrdG9wTm90aWZpY2F0aW9uQWxsb3dlZE9yaWdpbnM7CisKKyAgICBzdGQ6Om1hcDxzdGQ6OnN0
cmluZywgc3RkOjpzdHJpbmc+IG1fVVJMc1RvUmVkaXJlY3Q7CisgICAgCisgICAgc3RhdGljIEpT
Q2xhc3NSZWYgZ2V0SlNDbGFzcygpOworICAgIHN0YXRpYyBKU1N0YXRpY1ZhbHVlKiBzdGF0aWNW
YWx1ZXMoKTsKKyAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiogc3RhdGljRnVuY3Rpb25zKCk7
Cit9OworCisjZW5kaWYgLy8gTGF5b3V0VGVzdENvbnRyb2xsZXJfaApJbmRleDogVG9vbHMvRHVt
cFJlbmRlclRyZWUvVGVzdFJ1bm5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJU
cmVlL1Rlc3RSdW5uZXIuaAkocmV2aXNpb24gMTI1MzM1KQorKysgVG9vbHMvRHVtcFJlbmRlclRy
ZWUvVGVzdFJ1bm5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw4IEBACiAgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAgCi0jaWZuZGVmIExheW91dFRlc3RDb250cm9sbGVyX2gKLSNkZWZpbmUgTGF5
b3V0VGVzdENvbnRyb2xsZXJfaAorI2lmbmRlZiBUZXN0UnVubmVyX2gKKyNkZWZpbmUgVGVzdFJ1
bm5lcl9oCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oPgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+CkBAIC00Myw3ICs0Myw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXlvdXRUZXN0Q29udHJvbGxlcj4gY3JlYXRlKGNv
bnN0IHN0ZDo6c3RyaW5nJiB0ZXN0UGF0aE9yVVJMLCBjb25zdCBzdGQ6OnN0cmluZyYgZXhwZWN0
ZWRQaXhlbEhhc2gpOwogICAgIH5MYXlvdXRUZXN0Q29udHJvbGxlcigpOwogCi0gICAgdm9pZCBt
YWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dP
YmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgdm9pZCBtYWtlV2luZG93T2JqZWN0
KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pOwogCiAgICAgdm9pZCBhZGREaXNhbGxvd2VkVVJMKEpTU3RyaW5nUmVmIHVybCk7CiAg
ICAgdm9pZCBhZGRVUkxUb1JlZGlyZWN0KHN0ZDo6c3RyaW5nIG9yaWdpbiwgc3RkOjpzdHJpbmcg
ZGVzdGluYXRpb24pOwpAQCAtODYsMTEgKzg2LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHF1ZXVl
UmVsb2FkKCk7CiAgICAgdm9pZCByZW1vdmVBbGxWaXNpdGVkTGlua3MoKTsKICAgICB2b2lkIHNl
bmRXZWJJbnRlbnRSZXNwb25zZShKU1N0cmluZ1JlZiByZXNwb25zZSk7Ci0gICAgdm9pZCBzZXRB
Y2NlcHRzRWRpdGluZyhib29sIGFjY2VwdHNFZGl0aW5nKTsKKyAgICB2b2lkIHNldEFjY2VwdHNF
ZGl0aW5nKGJvb2wpOwogICAgIHZvaWQgc2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVS
THMoYm9vbCk7CiAgICAgdm9pZCBzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMoYm9vbCk7
CiAgICAgdm9pZCBzZXRBcHBDYWNoZU1heGltdW1TaXplKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90
YSk7Ci0gICAgdm9pZCBzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEodW5zaWduZWQgbG9u
ZyBsb25nIHF1b3RhKTsKKyAgICB2b2lkIHNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSh1
bnNpZ25lZCBsb25nIGxvbmcpOwogICAgIHZvaWQgc2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJs
ZWQoYm9vbCk7CiAgICAgdm9pZCBzZXRBdXRvZmlsbGVkKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJl
ZiBub2RlT2JqZWN0LCBib29sIGF1dG9maWxsZWQpOwogICAgIHZvaWQgc2V0Q2FjaGVNb2RlbChp
bnQpOwpAQCAtOTgsNyArOTgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXREYXRhYmFzZVF1b3Rh
KHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSk7CiAgICAgdm9pZCBzZXREb21haW5SZWxheGF0aW9u
Rm9yYmlkZGVuRm9yVVJMU2NoZW1lKGJvb2wgZm9yYmlkZGVuLCBKU1N0cmluZ1JlZiBzY2hlbWUp
OwogICAgIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhib29sKTsKLSAgICB2b2lkIHNldEljb25EYXRh
YmFzZUVuYWJsZWQoYm9vbCBpY29uRGF0YWJhc2VFbmFibGVkKTsKKyAgICB2b2lkIHNldEljb25E
YXRhYmFzZUVuYWJsZWQoYm9vbCk7CiAgICAgdm9pZCBzZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xp
cGJvYXJkKGJvb2wgZmxhZyk7CiAgICAgdm9pZCBzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5h
YmxlZChib29sIGZsYWcpOwogICAgIHZvaWQgc2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlcihi
b29sIGZsYWcpOwpAQCAtMTA4LDIwICsxMDgsMjAgQEAgcHVibGljOgogICAgIHZvaWQgYWRkTW9j
a1NwZWVjaElucHV0UmVzdWx0KEpTU3RyaW5nUmVmIHJlc3VsdCwgZG91YmxlIGNvbmZpZGVuY2Us
IEpTU3RyaW5nUmVmIGxhbmd1YWdlKTsKICAgICB2b2lkIHNldE1vY2tTcGVlY2hJbnB1dER1bXBS
ZWN0KGJvb2wgZmxhZyk7CiAgICAgdm9pZCBzZXRQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXRMb2Nh
dGlvbihKU1N0cmluZ1JlZiBwYXRoKTsKLSAgICB2b2lkIHNldFBsdWdpbnNFbmFibGVkKGJvb2wg
ZmxhZyk7Ci0gICAgdm9pZCBzZXRQb3B1cEJsb2NraW5nRW5hYmxlZChib29sIGZsYWcpOwotICAg
IHZvaWQgc2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChib29sIGZsYWcpOwotICAgIHZvaWQgc2V0
U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChib29sIGZsYWcpOwotICAgIHZvaWQgc2V0
U21hcnRJbnNlcnREZWxldGVFbmFibGVkKGJvb2wgZmxhZyk7Ci0gICAgdm9pZCBzZXRUYWJLZXlD
eWNsZXNUaHJvdWdoRWxlbWVudHMoYm9vbCBjeWNsZXMpOworICAgIHZvaWQgc2V0UGx1Z2luc0Vu
YWJsZWQoYm9vbCk7CisgICAgdm9pZCBzZXRQb3B1cEJsb2NraW5nRW5hYmxlZChib29sKTsKKyAg
ICB2b2lkIHNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoYm9vbCk7CisgICAgdm9pZCBzZXRTZWxl
Y3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKGJvb2wpOworICAgIHZvaWQgc2V0U21hcnRJbnNl
cnREZWxldGVFbmFibGVkKGJvb2wpOworICAgIHZvaWQgc2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVs
ZW1lbnRzKGJvb2wpOwogICAgIHZvaWQgc2V0VXNlRGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUo
Ym9vbCBmbGFnKTsKICAgICB2b2lkIHNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZChib29sIGZsYWcp
OwogICAgIHZvaWQgc2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihKU1N0cmluZ1JlZiBwYXRoKTsK
ICAgICB2b2lkIHNldFZhbHVlRm9yVXNlcihKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYgbm9kZU9i
amVjdCwgSlNTdHJpbmdSZWYgdmFsdWUpOwotICAgIHZvaWQgc2V0Vmlld01vZGVNZWRpYUZlYXR1
cmUoSlNTdHJpbmdSZWYgbW9kZSk7CisgICAgdm9pZCBzZXRWaWV3TW9kZU1lZGlhRmVhdHVyZShK
U1N0cmluZ1JlZik7CiAgICAgdm9pZCBzZXRYU1NBdWRpdG9yRW5hYmxlZChib29sIGZsYWcpOwot
ICAgIHZvaWQgc2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZChib29sIGVuYWJsZSk7Ci0gICAgdm9p
ZCBzZXRTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoYm9vbCBlbmFibGUpOworICAgIHZvaWQgc2V0
RnJhbWVGbGF0dGVuaW5nRW5hYmxlZChib29sKTsKKyAgICB2b2lkIHNldFNwYXRpYWxOYXZpZ2F0
aW9uRW5hYmxlZChib29sKTsKICAgICB2b2lkIHNldFNjcm9sbGJhclBvbGljeShKU1N0cmluZ1Jl
ZiBvcmllbnRhdGlvbiwgSlNTdHJpbmdSZWYgcG9saWN5KTsKICAgICB2b2lkIHN0YXJ0U3BlZWNo
SW5wdXQoSlNDb250ZXh0UmVmIGlucHV0RWxlbWVudCk7CiAgICAgdm9pZCBzZXRQYWdlVmlzaWJp
bGl0eShjb25zdCBjaGFyKik7CkBAIC0yNDQsNyArMjQ0LDcgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0VGVzdFJlcGFpbnRTd2VlcEhvcml6b250YWxseShib29sIHRlc3RSZXBhaW50U3dlZXBIb3Jp
em9udGFsbHkpIHsgbV90ZXN0UmVwYWludFN3ZWVwSG9yaXpvbnRhbGx5ID0gdGVzdFJlcGFpbnRT
d2VlcEhvcml6b250YWxseTsgfQogCiAgICAgYm9vbCB3YWl0VG9EdW1wKCkgY29uc3QgeyByZXR1
cm4gbV93YWl0VG9EdW1wOyB9Ci0gICAgdm9pZCBzZXRXYWl0VG9EdW1wKGJvb2wgd2FpdFRvRHVt
cCk7CisgICAgdm9pZCBzZXRXYWl0VG9EdW1wKGJvb2wpOwogICAgIHZvaWQgd2FpdFRvRHVtcFdh
dGNoZG9nVGltZXJGaXJlZCgpOwogCiAgICAgY29uc3Qgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiB3
aWxsU2VuZFJlcXVlc3RDbGVhckhlYWRlcnMoKSBjb25zdCB7IHJldHVybiBtX3dpbGxTZW5kUmVx
dWVzdENsZWFySGVhZGVyczsgfQpAQCAtMjU3LDEwICsyNTcsMTAgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0KGJvb2wgcmV0dXJuc051
bGwpIHsgbV93aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3QgPSByZXR1cm5zTnVs
bDsgfQogCiAgICAgYm9vbCB3aW5kb3dJc0tleSgpIGNvbnN0IHsgcmV0dXJuIG1fd2luZG93SXNL
ZXk7IH0KLSAgICB2b2lkIHNldFdpbmRvd0lzS2V5KGJvb2wgd2luZG93SXNLZXkpOworICAgIHZv
aWQgc2V0V2luZG93SXNLZXkoYm9vbCk7CiAKICAgICBib29sIGFsd2F5c0FjY2VwdENvb2tpZXMo
KSBjb25zdCB7IHJldHVybiBtX2Fsd2F5c0FjY2VwdENvb2tpZXM7IH0KLSAgICB2b2lkIHNldEFs
d2F5c0FjY2VwdENvb2tpZXMoYm9vbCBhbHdheXNBY2NlcHRDb29raWVzKTsKKyAgICB2b2lkIHNl
dEFsd2F5c0FjY2VwdENvb2tpZXMoYm9vbCk7CiAgICAgCiAgICAgYm9vbCBoYW5kbGVzQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9oYW5kbGVzQXV0aGVudGljYXRp
b25DaGFsbGVuZ2VzOyB9CiAgICAgdm9pZCBzZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVu
Z2VzKGJvb2wgaGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcykgeyBtX2hhbmRsZXNBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZXMgPSBoYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzOyB9
CkBAIC0zMjAsMTMgKzMyMCwxMyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldEJhY2tpbmdTY2Fs
ZUZhY3Rvcihkb3VibGUpOwogCi0gICAgdm9pZCBzZXRQT1NJWExvY2FsZShKU1N0cmluZ1JlZiBs
b2NhbGUpOworICAgIHZvaWQgc2V0UE9TSVhMb2NhbGUoSlNTdHJpbmdSZWYpOwogCiAgICAgdm9p
ZCBzZXRXZWJWaWV3RWRpdGFibGUoYm9vbCk7CiAKICAgICB2b2lkIGFib3J0TW9kYWwoKTsKIAot
ICAgIHN0YXRpYyB2b2lkIHNldFNlcmlhbGl6ZUhUVFBMb2Fkcyhib29sIHNlcmlhbGl6ZSk7Cisg
ICAgc3RhdGljIHZvaWQgc2V0U2VyaWFsaXplSFRUUExvYWRzKGJvb2wpOwogCiAgICAgLy8gVGhl
IGZvbGxvd2luZyBBUEkgdGVzdCBmdW5jdGlvbnMgc2hvdWxkIHByb2JhYmx5IGJlIG1vdmVkIHRv
IHBsYXRmb3JtLXNwZWNpZmljIAogICAgIC8vIHVuaXQgdGVzdHMgb3V0c2lkZSBvZiBEUlQgb25j
ZSB0aGV5IGV4aXN0LgpAQCAtMzM4LDcgKzMzOCw3IEBAIHB1YmxpYzoKIAogICAgIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBsYXllclRyZWVBc1RleHQoKSBjb25zdDsKIAotICAgIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBtYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTVmFsdWVSZWYgbm9kZU9iamVjdCkgY29uc3Q7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IG1hcmtlclRleHRGb3JMaXN0SXRlbShKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYgbm9k
ZU9iamVjdCkgY29uc3Q7CiAKICAgICBKU1ZhbHVlUmVmIG9yaWdpbnNXaXRoTG9jYWxTdG9yYWdl
KEpTQ29udGV4dFJlZik7CiAgICAgdm9pZCBkZWxldGVBbGxMb2NhbFN0b3JhZ2UoKTsKQEAgLTQy
Myw3ICs0MjMsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6c3RyaW5nIG1fYXV0aGVudGljYXRpb25V
c2VybmFtZTsKICAgICBzdGQ6OnN0cmluZyBtX2F1dGhlbnRpY2F0aW9uUGFzc3dvcmQ7IAogICAg
IHN0ZDo6c3RyaW5nIG1fdGVzdFBhdGhPclVSTDsKLSAgICBzdGQ6OnN0cmluZyBtX2V4cGVjdGVk
UGl4ZWxIYXNoOyAgICAvLyBlbXB0eSBzdHJpbmcgaWYgbm8gaGFzaAorICAgIHN0ZDo6c3RyaW5n
IG1fZXhwZWN0ZWRQaXhlbEhhc2g7IC8vIGVtcHR5IHN0cmluZyBpZiBubyBoYXNoCiAgICAgc3Rk
OjpzdHJpbmcgbV90aXRsZVRleHREaXJlY3Rpb247CiAKICAgICBzdGQ6OnNldDxzdGQ6OnN0cmlu
Zz4gbV93aWxsU2VuZFJlcXVlc3RDbGVhckhlYWRlcnM7CkluZGV4OiBUb29scy9EdW1wUmVuZGVy
VHJlZS93c2NyaXB0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dzY3JpcHQJ
KHJldmlzaW9uIDEyNTMzNSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dzY3JpcHQJKHdvcmtp
bmcgY29weSkKQEAgLTQxLDEwICs0MSwxMCBAQCBpbmNsdWRlX3BhdGhzID0gWwogICAgICAgICAg
ICAgICAgIF0KIHNvdXJjZXMgPSBbCiAgICAgICAgICAgICAnRHVtcFJlbmRlclRyZWVDb21tb24u
Y3BwJywKLSAgICAgICAgICAgICdMYXlvdXRUZXN0Q29udHJvbGxlci5jcHAnLAorICAgICAgICAg
ICAgJ1Rlc3RSdW5uZXIuY3BwJywKICAgICAgICAgICAgICdXb3JrUXVldWUuY3BwJywKICAgICAg
ICAgICAgICd3eC9EdW1wUmVuZGVyVHJlZVd4LmNwcCcsCi0gICAgICAgICAgICAnd3gvTGF5b3V0
VGVzdENvbnRyb2xsZXJXeC5jcHAnLAorICAgICAgICAgICAgJ3d4L1Rlc3RSdW5uZXJXeC5jcHAn
LAogICAgICAgICAgICAgJ3d4L1dvcmtRdWV1ZUl0ZW1XeC5jcHAnCiAgICAgICAgICAgXQogCklu
ZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJU
cmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEyNTMzNSkKKysrIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTEwNSw4ICsxMDUsOCBAQAogCQlBRTgyNTlGMzA4RDIyNDYzMDAw
NTA3QUIgLyogQ2FyYm9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEFFODI1N0VGMDhEMjIzODkwMDA1MDdBQiAvKiBDYXJib24uZnJh
bWV3b3JrICovOyB9OwogCQlBRTgyNTlGNDA4RDIyNDYzMDAwNTA3QUIgLyogQ2FyYm9uLmZyYW1l
d29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFF
ODI1N0VGMDhEMjIzODkwMDA1MDdBQiAvKiBDYXJib24uZnJhbWV3b3JrICovOyB9OwogCQlCNUE3
NTJBMjA4QUY1RDFGMDAxMzhFNDUgLyogUXVhcnR6Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3Jr
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNUE3NTJBMTA4QUY1RDFGMDAx
MzhFNDUgLyogUXVhcnR6Q29yZS5mcmFtZXdvcmsgKi87IH07Ci0JCUJDMDEzMURBMEM5NzcyMDEw
MDg3MzE3RCAvKiBMYXlvdXRUZXN0Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAxMzFEODBDOTc3MjAxMDA4NzMxN0QgLyogTGF5
b3V0VGVzdENvbnRyb2xsZXIuY3BwICovOyB9OwotCQlCQzAxMzFEQjBDOTc3MjAxMDA4NzMxN0Qg
LyogTGF5b3V0VGVzdENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDMDEzMUQ5MEM5NzcyMDEwMDg3MzE3RCAvKiBMYXlvdXRUZXN0Q29u
dHJvbGxlci5oICovOyB9OworCQlCQzAxMzFEQTBDOTc3MjAxMDA4NzMxN0QgLyogVGVzdFJ1bm5l
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAx
MzFEODBDOTc3MjAxMDA4NzMxN0QgLyogVGVzdFJ1bm5lci5jcHAgKi87IH07CisJCUJDMDEzMURC
MEM5NzcyMDEwMDg3MzE3RCAvKiBUZXN0UnVubmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAxMzFEOTBDOTc3MjAxMDA4NzMxN0QgLyogVGVzdFJ1
bm5lci5oICovOyB9OwogCQlCQzBFMjRFMDBFMkQ5NDUxMDAxQjZCQzIgLyogQWNjZXNzaWJpbGl0
eVVJRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkMwRTI0REUwRTJEOTQ1MTAwMUI2QkMyIC8qIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaCAq
LzsgfTsKIAkJQkMwRTI0RTEwRTJEOTQ1MTAwMUI2QkMyIC8qIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMw
RTI0REYwRTJEOTQ1MTAwMUI2QkMyIC8qIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwICovOyB9
OwogCQlCQzBFMjYxNTBFMkRBNEM2MDAxQjZCQzIgLyogQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1h
Yy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMEUy
NjE0MEUyREE0QzYwMDFCNkJDMiAvKiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tICovOyB9
OwpAQCAtMTE2LDcgKzExNiw3IEBACiAJCUJDOUQ5MDI1MEM5NzQ3MkUwMDk5QTRBMyAvKiBXb3Jr
UXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
OUQ5MDIyMEM5NzQ3MkUwMDk5QTRBMyAvKiBXb3JrUXVldWUuaCAqLzsgfTsKIAkJQkM5RDkwMjYw
Qzk3NDcyRTAwOTlBNEEzIC8qIFdvcmtRdWV1ZUl0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDOUQ5MDIzMEM5NzQ3MkUwMDk5QTRBMyAvKiBXb3Jr
UXVldWVJdGVtLmggKi87IH07CiAJCUJDQTE4QjIzMEM5QjAxNEIwMDExNDM2OSAvKiBHQ0NvbnRy
b2xsZXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQ0ExOEIyMTBDOUIwMTRCMDAxMTQzNjkgLyogR0NDb250cm9sbGVyTWFjLm1tICovOyB9Owot
CQlCQ0ExOEIyNDBDOUIwMTRCMDAxMTQzNjkgLyogTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ExOEIyMjBD
OUIwMTRCMDAxMTQzNjkgLyogTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0gKi87IH07CisJCUJD
QTE4QjI0MEM5QjAxNEIwMDExNDM2OSAvKiBUZXN0UnVubmVyTWFjLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNBMThCMjIwQzlCMDE0QjAwMTE0MzY5
IC8qIFRlc3RSdW5uZXJNYWMubW0gKi87IH07CiAJCUJDQTE4QjI2MEM5QjAxNUMwMDExNDM2OSAv
KiBXb3JrUXVldWVJdGVtTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkNBMThCMjUwQzlCMDE1QzAwMTE0MzY5IC8qIFdvcmtRdWV1ZUl0ZW1NYWMu
bW0gKi87IH07CiAJCUJDQTE4QjMxMEM5QjAxQjQwMDExNDM2OSAvKiBPYmpDQ29udHJvbGxlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNBMThCMkYw
QzlCMDFCNDAwMTE0MzY5IC8qIE9iakNDb250cm9sbGVyLmggKi87IH07CiAJCUJDQTE4QjMyMEM5
QjAxQjQwMDExNDM2OSAvKiBPYmpDQ29udHJvbGxlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNBMThCMzAwQzlCMDFCNDAwMTE0MzY5IC8qIE9iakND
b250cm9sbGVyLm0gKi87IH07CkBAIC0zMDgsOCArMzA4LDggQEAKIAkJQUU4MjU3RUYwOEQyMjM4
OTAwMDUwN0FCIC8qIENhcmJvbi5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IENhcmJvbi5m
cmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9DYXJib24uZnJhbWV3
b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OwogCQlCNUE3NTI2NzA4QUY0QTRBMDAx
MzhFNDUgLyogSW1hZ2VEaWZmICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0
RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9
IDA7IHBhdGggPSBJbWFnZURpZmY7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07
CiAJCUI1QTc1MkExMDhBRjVEMUYwMDEzOEU0NSAvKiBRdWFydHpDb3JlLmZyYW1ld29yayAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJh
bWV3b3JrOyBuYW1lID0gUXVhcnR6Q29yZS5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJh
cnkvRnJhbWV3b3Jrcy9RdWFydHpDb3JlLmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1
dGU+IjsgfTsKLQkJQkMwMTMxRDgwQzk3NzIwMTAwODczMTdEIC8qIExheW91dFRlc3RDb250cm9s
bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXlvdXRUZXN0
Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDMDEzMUQ5MEM5
NzcyMDEwMDg3MzE3RCAvKiBMYXlvdXRUZXN0Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0VGVzdENvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQkMwMTMxRDgwQzk3NzIwMTAwODczMTdEIC8qIFRlc3RSdW5uZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRlc3RSdW5uZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzAxMzFEOTBDOTc3MjAxMDA4NzMxN0QgLyog
VGVzdFJ1bm5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVzdFJ1bm5l
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzBFMjRERTBFMkQ5NDUxMDAxQjZC
QzIgLyogQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUJDMEUyNERGMEUyRDk0NTEwMDFCNkJDMiAvKiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzBFMjYxNDBFMkRB
NEM2MDAxQjZCQzIgLyogQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW07
IHBhdGggPSBtYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTMyMCw3ICszMjAsNyBAQAogCQlCQzlEOTAyMjBDOTc0NzJFMDA5OUE0
QTMgLyogV29ya1F1ZXVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXb3Jr
UXVldWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM5RDkwMjMwQzk3NDcyRTAw
OTlBNEEzIC8qIFdvcmtRdWV1ZUl0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdvcmtRdWV1ZUl0ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNBMThC
MjEwQzlCMDE0QjAwMTE0MzY5IC8qIEdDQ29udHJvbGxlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBHQ0NvbnRyb2xsZXJNYWMubW07IHBhdGggPSBtYWMv
R0NDb250cm9sbGVyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQ0ExOEIy
MjBDOUIwMTRCMDAxMTQzNjkgLyogTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IG5hbWUgPSBMYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbTsgcGF0aCA9IG1hYy9MYXlv
dXRUZXN0Q29udHJvbGxlck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNB
MThCMjIwQzlCMDE0QjAwMTE0MzY5IC8qIFRlc3RSdW5uZXJNYWMubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IG5hbWUgPSBUZXN0UnVubmVyTWFjLm1tOyBwYXRoID0gbWFjL1Rlc3RSdW5uZXJNYWMubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQTE4QjI1MEM5QjAxNUMwMDExNDM2OSAvKiBX
b3JrUXVldWVJdGVtTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFt
ZSA9IFdvcmtRdWV1ZUl0ZW1NYWMubW07IHBhdGggPSBtYWMvV29ya1F1ZXVlSXRlbU1hYy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNBMThCMkYwQzlCMDFCNDAwMTE0MzY5IC8q
IE9iakNDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBPYmpD
Q29udHJvbGxlci5oOyBwYXRoID0gbWFjL09iakNDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUJDQTE4QjMwMEM5QjAxQjQwMDExNDM2OSAvKiBPYmpDQ29udHJvbGxl
ci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBuYW1lID0gT2JqQ0NvbnRyb2xsZXIu
bTsgcGF0aCA9IG1hYy9PYmpDQ29udHJvbGxlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNDk4LDkgKzQ5OCw5IEBACiAJCQkJQkNGNkM2NEYwQzk4RTlDMDAwQUMwNjNFIC8qIEdD
Q29udHJvbGxlci5jcHAgKi8sCiAJCQkJMTQ3NzBGRTAwQTIyQURGNzAwOTM0MkVFIC8qIEdDQ29u
dHJvbGxlci5oICovLAogCQkJCUJDQTE4QjIxMEM5QjAxNEIwMDExNDM2OSAvKiBHQ0NvbnRyb2xs
ZXJNYWMubW0gKi8sCi0JCQkJQkMwMTMxRDgwQzk3NzIwMTAwODczMTdEIC8qIExheW91dFRlc3RD
b250cm9sbGVyLmNwcCAqLywKLQkJCQlCQzAxMzFEOTBDOTc3MjAxMDA4NzMxN0QgLyogTGF5b3V0
VGVzdENvbnRyb2xsZXIuaCAqLywKLQkJCQlCQ0ExOEIyMjBDOUIwMTRCMDAxMTQzNjkgLyogTGF5
b3V0VGVzdENvbnRyb2xsZXJNYWMubW0gKi8sCisJCQkJQkMwMTMxRDgwQzk3NzIwMTAwODczMTdE
IC8qIFRlc3RSdW5uZXIuY3BwICovLAorCQkJCUJDMDEzMUQ5MEM5NzcyMDEwMDg3MzE3RCAvKiBU
ZXN0UnVubmVyLmggKi8sCisJCQkJQkNBMThCMjIwQzlCMDE0QjAwMTE0MzY5IC8qIFRlc3RSdW5u
ZXJNYWMubW0gKi8sCiAJCQkJRTFCNzgwODUxMUFGMTY0MzAwN0UxQkMyIC8qIE1vY2tHZW9sb2Nh
dGlvblByb3ZpZGVyLmggKi8sCiAJCQkJRTFCNzgwODcxMUFGMTY2OTAwN0UxQkMyIC8qIE1vY2tH
ZW9sb2NhdGlvblByb3ZpZGVyLm1tICovLAogCQkJCUJDQTE4QjZEMEM5QjA4REIwMDExNDM2OSAv
KiBOYXZpZ2F0aW9uQ29udHJvbGxlci5oICovLApAQCAtNzEzLDcgKzcxMyw3IEBACiAJCQkJQkNB
MThCNjMwQzlCMDhDMjAwMTE0MzY5IC8qIEZyYW1lTG9hZERlbGVnYXRlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxNDc3MEZFMjBBMjJBREY3MDA5MzQyRUUgLyogR0NDb250cm9sbGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzQ3NDEyQTBEMDM4QTRDMDA3MkIwMDYgLyogSmF2YVNjcmlwdFRocmVh
ZGluZy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkMwMTMxREIwQzk3NzIwMTAwODczMTdEIC8qIExh
eW91dFRlc3RDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQzAxMzFEQjBDOTc3MjAx
MDA4NzMxN0QgLyogVGVzdFJ1bm5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBMThCNzEwQzlC
MDhEQjAwMTE0MzY5IC8qIE5hdmlnYXRpb25Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQ0ExOEIzMTBDOUIwMUI0MDAxMTQzNjkgLyogT2JqQ0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDQTE4QjdEMEM5QjA4RjEwMDExNDM2OSAvKiBPYmpDUGx1Z2luLmggaW4gSGVh
ZGVycyAqLywKQEAgLTkzOSw4ICs5MzksOCBAQAogCQkJCUJDRjZDNjUwMEM5OEU5QzAwMEFDMDYz
RSAvKiBHQ0NvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBMThCMjMwQzlCMDE0
QjAwMTE0MzY5IC8qIEdDQ29udHJvbGxlck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDNDc0
MTQxMEQwMzhBNTcwMDcyQjAwNiAvKiBKYXZhU2NyaXB0VGhyZWFkaW5nUHRocmVhZHMuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJQkMwMTMxREEwQzk3NzIwMTAwODczMTdEIC8qIExheW91dFRlc3RD
b250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUJDQTE4QjI0MEM5QjAxNEIwMDExNDM2
OSAvKiBMYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUJDMDEz
MURBMEM5NzcyMDEwMDg3MzE3RCAvKiBUZXN0UnVubmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUJDQTE4QjI0MEM5QjAxNEIwMDExNDM2OSAvKiBUZXN0UnVubmVyTWFjLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkNBMThCNzIwQzlCMDhEQjAwMTE0MzY5IC8qIE5hdmlnYXRpb25Db250cm9sbGVy
Lm0gaW4gU291cmNlcyAqLywKIAkJCQlCQ0ExOEIzMjBDOUIwMUI0MDAxMTQzNjkgLyogT2JqQ0Nv
bnRyb2xsZXIubSBpbiBTb3VyY2VzICovLAogCQkJCUJDQTE4QjdFMEM5QjA4RjEwMDExNDM2OSAv
KiBPYmpDUGx1Z2luLm0gaW4gU291cmNlcyAqLywKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVl
L2JsYWNrYmVycnkvRHVtcFJlbmRlclRyZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2JsYWNrYmVycnkvRHVtcFJlbmRlclRyZWUuY3BwCShyZXZpc2lvbiAxMjUzMzUp
CisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L0R1bXBSZW5kZXJUcmVlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNiBAQAogI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgi
CiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1
ZGUgIkxheW91dFRlc3RDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
ICNpbmNsdWRlICJPd25BcnJheVB0ci5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKQEAgLTUzLDYgKzUy
LDcgQEAKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlP
cmlnaW4uaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlRlc3RSdW5uZXIuaCIK
ICNpbmNsdWRlICJUZXh0QWZmaW5pdHkuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUg
IlZlY3Rvci5oIgpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvYmxhY2tiZXJyeS9MYXlvdXRU
ZXN0Q29udHJvbGxlckJsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL2JsYWNrYmVycnkvTGF5b3V0VGVzdENvbnRyb2xsZXJCbGFja0JlcnJ5LmNwcAkocmV2
aXNpb24gMTI1MzM1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvYmxhY2tiZXJyeS9MYXlvdXRU
ZXN0Q29udHJvbGxlckJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg0OCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDEyIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgot
Ci0jaW5jbHVkZSAiQ1N0cmluZy5oIgotI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgotI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKLSNpbmNsdWRl
ICJEb2N1bWVudE1hcmtlci5oIgotI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCi0jaW5jbHVk
ZSAiRHVtcFJlbmRlclRyZWVCbGFja0JlcnJ5LmgiCi0jaW5jbHVkZSAiRHVtcFJlbmRlclRyZWVT
dXBwb3J0LmgiCi0jaW5jbHVkZSAiRWRpdGluZ0JlaGF2aW9yVHlwZXMuaCIKLSNpbmNsdWRlICJF
ZGl0b3JDbGllbnRCbGFja0JlcnJ5LmgiCi0jaW5jbHVkZSAiRWxlbWVudC5oIgotI2luY2x1ZGUg
IkZyYW1lLmgiCi0jaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgotI2luY2x1ZGUgIkpTRWxl
bWVudC5oIgotI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgot
I2luY2x1ZGUgIk93bkFycmF5UHRyLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlJl
bmRlclRyZWVBc1RleHQuaCIKLSNpbmNsdWRlICJTY2hlbWVSZWdpc3RyeS5oIgotI2luY2x1ZGUg
IlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlQb2xpY3kuaCIKLSNpbmNsdWRl
ICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlVudXNlZFBhcmFtLmgiCi0jaW5jbHVkZSAiV29ya1F1
ZXVlLmgiCi0jaW5jbHVkZSAiV29ya1F1ZXVlSXRlbS5oIgotI2luY2x1ZGUgIldvcmtlclRocmVh
ZC5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQVBJQ2FzdC5oPgotI2luY2x1ZGUgPFNo
YXJlZFBvaW50ZXIuaD4KLSNpbmNsdWRlIDxXZWJQYWdlLmg+Ci0jaW5jbHVkZSA8V2ViU2V0dGlu
Z3MuaD4KLQotdXNpbmcgV2ViQ29yZTo6dG9FbGVtZW50OwotdXNpbmcgV2ViQ29yZTo6dG9KUzsK
LQotTGF5b3V0VGVzdENvbnRyb2xsZXI6On5MYXlvdXRUZXN0Q29udHJvbGxlcigpCi17Ci19Ci0K
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZERpc2FsbG93ZWRVUkwoSlNTdHJpbmdSZWYg
dXJsKQotewotICAgIFVOVVNFRF9QQVJBTSh1cmwpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQWxsRGF0YWJhc2VzKCkKLXsKLSNp
ZiBFTkFCTEUoREFUQUJBU0UpCi0gICAgV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0cmFja2Vy
KCkuZGVsZXRlQWxsRGF0YWJhc2VzKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6Y2xlYXJCYWNrRm9yd2FyZExpc3QoKQotewotICAgIEJsYWNrQmVycnk6OldlYktp
dDo6RHVtcFJlbmRlclRyZWU6OmN1cnJlbnRJbnN0YW5jZSgpLT5wYWdlKCktPmNsZWFyQmFja0Zv
cndhcmRMaXN0KHRydWUpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhclBl
cnNpc3RlbnRVc2VyU3R5bGVTaGVldCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
SlNTdHJpbmdSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvcHlEZWNvZGVkSG9zdE5hbWUoSlNT
dHJpbmdSZWYgbmFtZSkKLXsKLSAgICBVTlVTRURfUEFSQU0obmFtZSk7Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotSlNTdHJpbmdSZWYgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmNvcHlFbmNvZGVkSG9zdE5hbWUoSlNTdHJpbmdSZWYgbmFtZSkKLXsKLSAgICBVTlVT
RURfUEFSQU0obmFtZSk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0K
LQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzcGF0Y2hQZW5kaW5nTG9hZFJlcXVlc3Rz
KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpkaXNwbGF5KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1zdGF0aWMgU3Ry
aW5nIGpzU3RyaW5nUmVmVG9XZWJDb3JlU3RyaW5nKEpTU3RyaW5nUmVmIHN0cikKLXsKLSAgICBz
aXplX3Qgc3RyQXJyU2l6ZSA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShzdHIp
OwotICAgIE93bkFycmF5UHRyPGNoYXI+IHN0ckFyciA9IGFkb3B0QXJyYXlQdHIobmV3IGNoYXJb
c3RyQXJyU2l6ZV0pOwotICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmcoc3RyLCBzdHJBcnIuZ2V0
KCksIHN0ckFyclNpemUpOwotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHN0ckFyci5nZXQo
KSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV4ZWNDb21tYW5kKEpTU3RyaW5n
UmVmIG5hbWUsIEpTU3RyaW5nUmVmIHZhbHVlKQotewotICAgIGlmICghbWFpbkZyYW1lKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmcgbmFtZVN0ciA9IGpzU3RyaW5nUmVmVG9XZWJDb3Jl
U3RyaW5nKG5hbWUpOwotICAgIFN0cmluZyB2YWx1ZVN0ciA9IGpzU3RyaW5nUmVmVG9XZWJDb3Jl
U3RyaW5nKHZhbHVlKTsKLQotICAgIG1haW5GcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQobmFtZVN0
cikuZXhlY3V0ZSh2YWx1ZVN0cik7Ci19Ci0KLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6Omlz
Q29tbWFuZEVuYWJsZWQoSlNTdHJpbmdSZWYgbmFtZSkKLXsKLSAgICBpZiAoIW1haW5GcmFtZSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU3RyaW5nIG5hbWVTdHIgPSBqc1N0cmluZ1Jl
ZlRvV2ViQ29yZVN0cmluZyhuYW1lKTsKLQotICAgIHJldHVybiBtYWluRnJhbWUtPmVkaXRvcigp
LT5jb21tYW5kKG5hbWVTdHIpLmlzRW5hYmxlZCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjprZWVwV2ViSGlzdG9yeSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bm90aWZ5RG9uZSgpCi17Ci0gICAgaWYgKG1fd2Fp
dFRvRHVtcCAmJiAoIXRvcExvYWRpbmdGcmFtZSB8fCBCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBS
ZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2UoKS0+bG9hZEZpbmlzaGVkKCkpICYmICFXb3JrUXVl
dWU6OnNoYXJlZCgpLT5jb3VudCgpKQotICAgICAgICBkdW1wKCk7Ci0KLSAgICBtX3dhaXRUb0R1
bXAgPSBmYWxzZTsKLSAgICB3YWl0Rm9yUG9saWN5ID0gZmFsc2U7Ci19Ci0KLUpTU3RyaW5nUmVm
IExheW91dFRlc3RDb250cm9sbGVyOjpwYXRoVG9Mb2NhbFJlc291cmNlKEpTQ29udGV4dFJlZiwg
SlNTdHJpbmdSZWYgdXJsKQotewotICAgIHJldHVybiBKU1N0cmluZ1JldGFpbih1cmwpOwotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxvYWQoSlNTdHJpbmdSZWYgdXJsLCBK
U1N0cmluZ1JlZiB0YXJnZXQpCi17Ci0gICAgc2l6ZV90IHVybEFyclNpemUgPSBKU1N0cmluZ0dl
dE1heGltdW1VVEY4Q1N0cmluZ1NpemUodXJsKTsKLSAgICBPd25BcnJheVB0cjxjaGFyPiB1cmxB
cnIgPSBhZG9wdEFycmF5UHRyKG5ldyBjaGFyW3VybEFyclNpemVdKTsKLSAgICBKU1N0cmluZ0dl
dFVURjhDU3RyaW5nKHVybCwgdXJsQXJyLmdldCgpLCB1cmxBcnJTaXplKTsKLQotICAgIFdlYkNv
cmU6OktVUkwgYmFzZSA9IG1haW5GcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnJl
c3BvbnNlKCkudXJsKCk7Ci0gICAgV2ViQ29yZTo6S1VSTCBhYnNvbHV0ZShiYXNlLCB1cmxBcnIu
Z2V0KCkpOwotCi0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGFic29sdXRlVVJMKEFkb3B0
LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhhYnNvbHV0ZS5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpKSk7Ci0gICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+cXVldWUobmV3IExvYWRJdGVtKGFi
c29sdXRlVVJMLmdldCgpLCB0YXJnZXQpKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0QWNjZXB0c0VkaXRpbmcoYm9vbCBhY2NlcHRzRWRpdGluZykKLXsKLSAgICBCbGFja0Jl
cnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2UoKS0+c2V0QWNjZXB0
c0VkaXRpbmcoYWNjZXB0c0VkaXRpbmcpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRBcHBDYWNoZU1heGltdW1TaXplKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSkKLXsKLSAg
ICBVTlVTRURfUEFSQU0ocXVvdGEpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKGJvb2wg
ZW5hYmxlKQotewotICAgIG1haW5GcmFtZS0+cGFnZSgpLT5zZXR0aW5ncygpLT5zZXRBdXRob3JB
bmRVc2VyU3R5bGVzRW5hYmxlZChlbmFibGUpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRDYWNoZU1vZGVsKGludCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShib29sIHNl
dERlbGVnYXRlLCBib29sIHBlcm1pc3NpdmUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNldERlbGVn
YXRlKTsKLSAgICBVTlVTRURfUEFSQU0ocGVybWlzc2l2ZSk7Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBcHBsaWNhdGlvbkNhY2hl
Rm9yT3JpZ2luKE9wYXF1ZUpTU3RyaW5nKikKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRv
IHN1cHBvcnQgZGVsZXRpbmcgYWxsIGFwcGxpY2F0aW9uIGNhY2hlcyBmb3IgYW4gb3JpZ2luLgot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWxvbmcgbG9uZyBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6bG9jYWxTdG9yYWdlRGlza1VzYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmKQotewotICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdG8gc3VwcG9ydCBnZXR0aW5nIGRpc2sgdXNhZ2UgaW4gYnl0ZXMg
Zm9yIGFuIG9yaWdpbi4KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQot
Ci1KU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aEFwcGxpY2F0aW9u
Q2FjaGUoSlNDb250ZXh0UmVmIGNvbnRleHQpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0
byBnZXQgb3JpZ2lucyB0aGF0IGNvbnRhaW4gYXBwbGljYXRpb24gY2FjaGVzLgotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwot
fQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREYXRhYmFzZVF1b3RhKHVuc2lnbmVk
IGxvbmcgbG9uZyBxdW90YSkKLXsKLSAgICBpZiAoIW1haW5GcmFtZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuc2V0UXVvdGEobWFp
bkZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCBxdW90YSk7Ci19Ci0KLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxT
Y2hlbWUoYm9vbCBmb3JiaWRkZW4sIEpTU3RyaW5nUmVmIHNjaGVtZSkKLXsKLSAgICBXZWJDb3Jl
OjpTY2hlbWVSZWdpc3RyeTo6c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVt
ZShmb3JiaWRkZW4sIGpzU3RyaW5nUmVmVG9XZWJDb3JlU3RyaW5nKHNjaGVtZSkpOwotfQotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKGJvb2wgaWNv
bkRhdGFiYXNlRW5hYmxlZCkKLXsKLSAgICBVTlVTRURfUEFSQU0oaWNvbkRhdGFiYXNlRW5hYmxl
ZCk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlcihib29sIGZsYWcpCi17Ci0gICAgVU5VU0VE
X1BBUkFNKGZsYWcpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldExvY2F0aW9uKEpTU3RyaW5n
UmVmIHBhdGgpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHBhdGgpOwotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBvcHVwQmxvY2tpbmdFbmFi
bGVkKGJvb2wgZmxhZykKLXsKLSAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVl
OjpjdXJyZW50SW5zdGFuY2UoKS0+cGFnZSgpLT5zZXR0aW5ncygpLT5zZXRKYXZhU2NyaXB0T3Bl
bldpbmRvd3NBdXRvbWF0aWNhbGx5KCFmbGFnKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChib29sIGZsYWcpCi17Ci0gICAgVU5VU0VE
X1BBUkFNKGZsYWcpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFhTU0F1ZGl0b3JFbmFibGVkKGJvb2wgZmxhZykKLXsKLSAgICBCbGFj
a0JlcnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2UoKS0+cGFnZSgp
LT5zZXR0aW5ncygpLT5zZXRYU1NBdWRpdG9yRW5hYmxlZChmbGFnKTsKLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChib29s
IGZsYWcpCi17Ci0gICAgQmxhY2tCZXJyeTo6V2ViS2l0OjpEdW1wUmVuZGVyVHJlZTo6Y3VycmVu
dEluc3RhbmNlKCktPnNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoZmxhZyk7Ci19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxl
ZChib29sIGZsYWcpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGZsYWcpOwotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRhYktleUN5Y2xlc1Ro
cm91Z2hFbGVtZW50cyhib29sIGN5Y2xlcykKLXsKLSAgICBpZiAoIW1haW5GcmFtZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbWFpbkZyYW1lLT5wYWdlKCktPnNldFRhYktleUN5Y2xlc1Rocm91
Z2hFbGVtZW50cyhjeWNsZXMpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRV
c2VEYXNoYm9hcmRDb21wYXRpYmlsaXR5TW9kZShib29sIGZsYWcpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGZsYWcpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZChib29sIGZsYWcpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGZsYWcpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oSlNTdHJpbmdSZWYgcGF0
aCkKLXsKLSAgICBTdHJpbmcgcGF0aFN0ciA9IGpzU3RyaW5nUmVmVG9XZWJDb3JlU3RyaW5nKHBh
dGgpOwotICAgIEJsYWNrQmVycnk6OldlYktpdDo6RHVtcFJlbmRlclRyZWU6OmN1cnJlbnRJbnN0
YW5jZSgpLT5wYWdlKCktPnNldHRpbmdzKCktPnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24ocGF0
aFN0ci51dGY4KCkuZGF0YSgpKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2Fp
dEZvclBvbGljeURlbGVnYXRlKCkKLXsKLSAgICBzZXRXYWl0VG9EdW1wKHRydWUpOwotICAgIHdh
aXRGb3JQb2xpY3kgPSB0cnVlOwotfQotCi1zaXplX3QgTGF5b3V0VGVzdENvbnRyb2xsZXI6Ondl
Ykhpc3RvcnlJdGVtQ291bnQoKQotewotICAgIFNoYXJlZEFycmF5PEJsYWNrQmVycnk6OldlYktp
dDo6V2ViUGFnZTo6QmFja0ZvcndhcmRFbnRyeT4gYmFja0ZvcndhcmRMaXN0OwotICAgIEJsYWNr
QmVycnk6OldlYktpdDo6RHVtcFJlbmRlclRyZWU6OmN1cnJlbnRJbnN0YW5jZSgpLT5wYWdlKCkt
PmdldEJhY2tGb3J3YXJkTGlzdChiYWNrRm9yd2FyZExpc3QpOwotICAgIHJldHVybiBiYWNrRm9y
d2FyZExpc3QubGVuZ3RoKCk7Ci19Ci0KLWludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2luZG93
Q291bnQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWJv
b2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVu
dFdpdGhJZChKU1N0cmluZ1JlZiBpZCkKLXsKLSAgICBVTlVTRURfUEFSQU0oaWQpOwotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1KU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhZ2VQcm9wZXJ0eShjb25zdCBjaGFyKiBw
cm9wZXJ0eU5hbWUsIGludCBwYWdlTnVtYmVyKSBjb25zdAotewotICAgIFVOVVNFRF9QQVJBTShw
cm9wZXJ0eU5hbWUpOwotICAgIFVOVVNFRF9QQVJBTShwYWdlTnVtYmVyKTsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRXYWl0VG9EdW1wKGJvb2wgd2FpdFRvRHVtcCkKLXsKLSAgICAvLyBDaGFuZ2UgZnJvbSAz
MHMgdG8gMzVzIGJlY2F1c2Ugc29tZSB0ZXN0IGNhc2VzIGluIG11bHRpcGFydCBuZWVkIDMwIHNl
Y29uZHMsCi0gICAgLy8gcmVmZXIgdG8gaHR0cC90ZXN0cy9tdWx0aXBhcnQvcmVzb3VyY2VzL211
bHRpcGFydC13YWl0LWJlZm9yZS1ib3VuZGFyeS5waHAgcGxlYXNlLgotICAgIHN0YXRpYyBjb25z
dCBkb3VibGUga1dhaXRUb0R1bXBXYXRjaGRvZ0ludGVydmFsID0gMzUuMDsKLSAgICBtX3dhaXRU
b0R1bXAgPSB3YWl0VG9EdW1wOwotICAgIGlmIChtX3dhaXRUb0R1bXApCi0gICAgICAgIEJsYWNr
QmVycnk6OldlYktpdDo6RHVtcFJlbmRlclRyZWU6OmN1cnJlbnRJbnN0YW5jZSgpLT5zZXRXYWl0
VG9EdW1wV2F0Y2hkb2coa1dhaXRUb0R1bXBXYXRjaGRvZ0ludGVydmFsKTsKLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2luZG93SXNLZXkoYm9vbCB3aW5kb3dJc0tleSkKLXsK
LSAgICBtX3dpbmRvd0lzS2V5ID0gd2luZG93SXNLZXk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF1c2VBbmltYXRpb25BdFRpbWVPbkVs
ZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWUsIEpTU3Ry
aW5nUmVmIGVsZW1lbnRJZCkKLXsKLSAgICBpZiAoIW1haW5GcmFtZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgaW50IG5hbWVMZW4gPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmlu
Z1NpemUoYW5pbWF0aW9uTmFtZSk7Ci0gICAgaW50IGlkTGVuID0gSlNTdHJpbmdHZXRNYXhpbXVt
VVRGOENTdHJpbmdTaXplKGVsZW1lbnRJZCk7Ci0gICAgT3duQXJyYXlQdHI8Y2hhcj4gbmFtZSA9
IGFkb3B0QXJyYXlQdHIobmV3IGNoYXJbbmFtZUxlbl0pOwotICAgIE93bkFycmF5UHRyPGNoYXI+
IGVJZCA9IGFkb3B0QXJyYXlQdHIobmV3IGNoYXJbaWRMZW5dKTsKLQotICAgIEpTU3RyaW5nR2V0
VVRGOENTdHJpbmcoYW5pbWF0aW9uTmFtZSwgbmFtZS5nZXQoKSwgbmFtZUxlbik7Ci0gICAgSlNT
dHJpbmdHZXRVVEY4Q1N0cmluZyhlbGVtZW50SWQsIGVJZC5nZXQoKSwgaWRMZW4pOwotCi0gICAg
V2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlciogYW5pbWF0aW9uQ29udHJvbGxlciA9IG1haW5G
cmFtZS0+YW5pbWF0aW9uKCk7Ci0gICAgaWYgKCFhbmltYXRpb25Db250cm9sbGVyKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBXZWJDb3JlOjpOb2RlKiBub2RlID0gbWFpbkZyYW1lLT5k
b2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZChlSWQuZ2V0KCkpOwotICAgIGlmICghbm9kZSB8fCAh
bm9kZS0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGFu
aW1hdGlvbkNvbnRyb2xsZXItPnBhdXNlQW5pbWF0aW9uQXRUaW1lKG5vZGUtPnJlbmRlcmVyKCks
IG5hbWUuZ2V0KCksIHRpbWUpOwotfQotCi1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVz
ZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgcHJvcGVydHlOYW1l
LCBkb3VibGUgdGltZSwgSlNTdHJpbmdSZWYgZWxlbWVudElkKQotewotICAgIGlmICghbWFpbkZy
YW1lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpbnQgbmFtZUxlbiA9IEpTU3RyaW5n
R2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShwcm9wZXJ0eU5hbWUpOwotICAgIGludCBpZExlbiA9
IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShlbGVtZW50SWQpOwotICAgIE93bkFy
cmF5UHRyPGNoYXI+IG5hbWUgPSBhZG9wdEFycmF5UHRyKG5ldyBjaGFyW25hbWVMZW5dKTsKLSAg
ICBPd25BcnJheVB0cjxjaGFyPiBlSWQgPSBhZG9wdEFycmF5UHRyKG5ldyBjaGFyW2lkTGVuXSk7
Ci0KLSAgICBKU1N0cmluZ0dldFVURjhDU3RyaW5nKHByb3BlcnR5TmFtZSwgbmFtZS5nZXQoKSwg
bmFtZUxlbik7Ci0gICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhlbGVtZW50SWQsIGVJZC5nZXQo
KSwgaWRMZW4pOwotCi0gICAgV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlciogYW5pbWF0aW9u
Q29udHJvbGxlciA9IG1haW5GcmFtZS0+YW5pbWF0aW9uKCk7Ci0gICAgaWYgKCFhbmltYXRpb25D
b250cm9sbGVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBXZWJDb3JlOjpOb2RlKiBu
b2RlID0gbWFpbkZyYW1lLT5kb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZChlSWQuZ2V0KCkpOwot
ICAgIGlmICghbm9kZSB8fCAhbm9kZS0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgcmV0dXJuIGFuaW1hdGlvbkNvbnRyb2xsZXItPnBhdXNlVHJhbnNpdGlvbkF0VGlt
ZShub2RlLT5yZW5kZXJlcigpLCBuYW1lLmdldCgpLCB0aW1lKTsKLX0KLQotdW5zaWduZWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFtYWluRnJhbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFdlYkNvcmU6
OkFuaW1hdGlvbkNvbnRyb2xsZXIqIGFuaW1hdGlvbkNvbnRyb2xsZXIgPSBtYWluRnJhbWUtPmFu
aW1hdGlvbigpOwotICAgIGlmICghYW5pbWF0aW9uQ29udHJvbGxlcikKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgcmV0dXJuIGFuaW1hdGlvbkNvbnRyb2xsZXItPm51bWJlck9mQWN0aXZl
QW5pbWF0aW9ucyhtYWluRnJhbWUtPmRvY3VtZW50KCkpOwotfQotCi11bnNpZ25lZCBpbnQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OndvcmtlclRocmVhZENvdW50KCkgY29uc3QKLXsKLSNpZiBFTkFC
TEVfV09SS0VSUwotICAgIHJldHVybiBXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVh
ZENvdW50KCk7Ci0jZWxzZQotICAgIHJldHVybiAwOwotI2VuZGlmCi19Ci0KLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnJlbW92ZUFsbFZpc2l0ZWRMaW5rcygpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzYWJsZUltYWdlTG9h
ZGluZygpCi17Ci0gICAgQmxhY2tCZXJyeTo6V2ViS2l0OjpEdW1wUmVuZGVyVHJlZTo6Y3VycmVu
dEluc3RhbmNlKCktPnBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNh
bGx5KGZhbHNlKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3ZlcnJpZGVQcmVm
ZXJlbmNlKEpTU3RyaW5nUmVmIGtleSwgSlNTdHJpbmdSZWYgdmFsdWUpCi17Ci0gICAgaWYgKCFt
YWluRnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0cmluZyBrZXlTdHIgPSBqc1N0cmlu
Z1JlZlRvV2ViQ29yZVN0cmluZyhrZXkpOwotICAgIFN0cmluZyB2YWx1ZVN0ciA9IGpzU3RyaW5n
UmVmVG9XZWJDb3JlU3RyaW5nKHZhbHVlKTsKLQotICAgIGlmIChrZXlTdHIgPT0gIldlYktpdFVz
ZXNQYWdlQ2FjaGVQcmVmZXJlbmNlS2V5IikKLSAgICAgICAgQmxhY2tCZXJyeTo6V2ViS2l0OjpE
dW1wUmVuZGVyVHJlZTo6Y3VycmVudEluc3RhbmNlKCktPnBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0
TWF4aW11bVBhZ2VzSW5DYWNoZSgxKTsKLSAgICBlbHNlIGlmIChrZXlTdHIgPT0gIldlYktpdFVz
ZVByZUhUTUw1UGFyc2VyUXVpcmtzIikKLSAgICAgICAgbWFpbkZyYW1lLT5wYWdlKCktPnNldHRp
bmdzKCktPnNldFVzZVByZUhUTUw1UGFyc2VyUXVpcmtzKHRydWUpOwotICAgIGVsc2UgaWYgKGtl
eVN0ciA9PSAiV2ViS2l0VGFiVG9MaW5rc1ByZWZlcmVuY2VLZXkiKQotICAgICAgICBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnQ6OnNldExpbmtzSW5jbHVkZWRJbkZvY3VzQ2hhaW4odmFsdWVTdHIgPT0g
InRydWUiIHx8IHZhbHVlU3RyID09ICIxIik7Ci0gICAgZWxzZSBpZiAoa2V5U3RyID09ICJXZWJL
aXRIeXBlcmxpbmtBdWRpdGluZ0VuYWJsZWQiKQotICAgICAgICBtYWluRnJhbWUtPnBhZ2UoKS0+
c2V0dGluZ3MoKS0+c2V0SHlwZXJsaW5rQXVkaXRpbmdFbmFibGVkKHZhbHVlU3RyID09ICJ0cnVl
IiB8fCB2YWx1ZVN0ciA9PSAiMSIpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRBbHdheXNBY2NlcHRDb29raWVzKGJvb2wgYWx3YXlzQWNjZXB0Q29va2llcykKLXsKLSAgICBV
TlVTRURfUEFSQU0oYWx3YXlzQWNjZXB0Q29va2llcyk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRp
b24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3kpCi17
Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0OjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihC
bGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2UoKS0+cGFn
ZSgpLCBsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhY2N1cmFjeSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2NhdGlvbkVycm9yKGludCBjb2RlLCBKU1N0cmluZ1Jl
ZiBtZXNzYWdlKQotewotICAgIFN0cmluZyBtZXNzYWdlU3RyID0ganNTdHJpbmdSZWZUb1dlYkNv
cmVTdHJpbmcobWVzc2FnZSk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0OjpzZXRNb2NrR2Vv
bG9jYXRpb25FcnJvcihCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVlOjpjdXJyZW50
SW5zdGFuY2UoKS0+cGFnZSgpLCBjb2RlLCBtZXNzYWdlU3RyKTsKLX0KLQotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2hvd1dlYkluc3BlY3RvcigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xvc2VXZWJJbnNwZWN0b3IoKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IobG9uZyBjYWxsSWQsIEpTU3RyaW5nUmVmIHNjcmlwdCkK
LXsKLSAgICBVTlVTRURfUEFSQU0oY2FsbElkKTsKLSAgICBVTlVTRURfUEFSQU0oc2NyaXB0KTsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpl
dmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKHVuc2lnbmVkIHdvcmxk
SUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0KQotewotICAg
IFVOVVNFRF9QQVJBTSh3b3JsZElEKTsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsK
LSAgICBVTlVTRURfUEFSQU0oc2NyaXB0KTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCh1
bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNj
cmlwdCkKLXsKLSAgICBVTlVTRURfUEFSQU0od29ybGRJRCk7Ci0gICAgVU5VU0VEX1BBUkFNKGds
b2JhbE9iamVjdCk7Ci0gICAgVU5VU0VEX1BBUkFNKHNjcmlwdCk7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkVXNlclNjcmlwdChKU1N0
cmluZ1JlZiBzb3VyY2UsIGJvb2wgcnVuQXRTdGFydCwgYm9vbCBhbGxGcmFtZXMpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKHNvdXJjZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHJ1bkF0U3RhcnQpOwotICAg
IFVOVVNFRF9QQVJBTShhbGxGcmFtZXMpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJTdHlsZVNoZWV0KEpTU3RyaW5nUmVmLCBi
b29sKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLUpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMoaW50
LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSBjb25zdAotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVt
YmVyT2ZQYWdlcyhmbG9hdCwgZmxvYXQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gLTE7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNjcm9sbGJhclBv
bGljeShKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2ViVmlld0VkaXRhYmxlKGJvb2wp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6YXV0aGVudGljYXRlU2Vzc2lvbihKU1N0cmluZ1JlZiB1cmwsIEpTU3RyaW5nUmVmIHVzZXJu
YW1lLCBKU1N0cmluZ1JlZiBwYXNzd29yZCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjpjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcoKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkKGJvb2wgZW5hYmxl
KQotewotICAgIEJsYWNrQmVycnk6OldlYktpdDo6RHVtcFJlbmRlclRyZWU6OmN1cnJlbnRJbnN0
YW5jZSgpLT5wYWdlKCktPnNldHRpbmdzKCktPnNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoZW5h
YmxlKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U3BhdGlhbE5hdmlnYXRp
b25FbmFibGVkKGJvb2wgZW5hYmxlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KEpT
U3RyaW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Qcm90b2NvbCwg
SlNTdHJpbmdSZWYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21h
aW5zKQotewotICAgIFdlYkNvcmU6OlNlY3VyaXR5UG9saWN5OjphZGRPcmlnaW5BY2Nlc3NXaGl0
ZWxpc3RFbnRyeSgqV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcoanNT
dHJpbmdSZWZUb1dlYkNvcmVTdHJpbmcoc291cmNlT3JpZ2luKSksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzU3RyaW5nUmVmVG9XZWJDb3JlU3Ry
aW5nKGRlc3RpbmF0aW9uUHJvdG9jb2wpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqc1N0cmluZ1JlZlRvV2ViQ29yZVN0cmluZyhkZXN0aW5hdGlv
bkhvc3QpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KEpTU3RyaW5nUmVmIHNvdXJj
ZU9yaWdpbiwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Qcm90b2NvbCwgSlNTdHJpbmdSZWYgZGVz
dGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKQotewotICAgIFdl
YkNvcmU6OlNlY3VyaXR5UG9saWN5OjpyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSgq
V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcoanNTdHJpbmdSZWZUb1dl
YkNvcmVTdHJpbmcoc291cmNlT3JpZ2luKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpzU3RyaW5nUmVmVG9XZWJDb3JlU3RyaW5nKGRlc3Rp
bmF0aW9uUHJvdG9jb2wpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqc1N0cmluZ1JlZlRvV2ViQ29yZVN0cmluZyhkZXN0aW5hdGlvbkhvc3Qp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
bGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhib29sIGVuYWJsZWQpCi17Ci0gICAg
aWYgKCFtYWluRnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1haW5GcmFtZS0+cGFnZSgp
LT5zZXR0aW5ncygpLT5zZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMoZW5hYmxlZCk7Ci19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJv
bUZpbGVVUkxzKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBpZiAoIW1haW5GcmFtZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbWFpbkZyYW1lLT5wYWdlKCktPnNldHRpbmdzKCktPnNldEFsbG93VW5p
dmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGVuYWJsZWQpOwotfQotCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjphcGlUZXN0TmV3V2luZG93RGF0YUxvYWRCYXNlVVJMKEpTU3RyaW5nUmVmIHV0
ZjhEYXRhLCBKU1N0cmluZ1JlZiBiYXNlVVJMKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFwaVRlc3RHb1RvQ3VycmVudEJhY2tGb3J3
YXJkSXRlbSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChib29sIGZsYWcpCi17
Ci0gICAgQmxhY2tCZXJyeTo6V2ViS2l0OjpEdW1wUmVuZGVyVHJlZTo6Y3VycmVudEluc3RhbmNl
KCktPnBhZ2UoKS0+c2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChmbGFnKTsKLX0KLQot
SlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zp
c2l0ZWRJbmZvKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQotewotICAg
IHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnQ6OmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNp
dGVkSW5mbyhjb250ZXh0LCB2YWx1ZSk7Ci19Ci0KLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6bGF5ZXJUcmVlQXNUZXh0KCkgY29uc3QKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1KU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6Om1hcmtlclRleHRGb3JMaXN0SXRlbShKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBub2RlT2JqZWN0KSBjb25zdAotewotICAgIFdlYkNvcmU6
OkVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQodG9KUyh0b0pTKGNvbnRleHQpLCBub2RlT2Jq
ZWN0KSk7Ci0gICAgaWYgKCFlbGVtZW50KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBtYXJrZXJUZXh0KEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZyhXZWJDb3JlOjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oZWxlbWVudCkudXRmOCgp
LmRhdGEoKSkpOwotICAgIHJldHVybiBtYXJrZXJUZXh0OwotfQotCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRQbHVnaW5zRW5hYmxlZChib29sIGZsYWcpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWJvcnRNb2RhbCgpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
Y2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXBwbGljYXRpb25DYWNoZU9yaWdpblF1
b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24o
Ym9vbCBjYW5Qcm92aWRlQWxwaGEsIGRvdWJsZSBhbHBoYSwgYm9vbCBjYW5Qcm92aWRlQmV0YSwg
ZG91YmxlIGJldGEsIGJvb2wgY2FuUHJvdmlkZUdhbW1hLCBkb3VibGUgZ2FtbWEpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkTW9j
a1NwZWVjaElucHV0UmVzdWx0KEpTU3RyaW5nUmVmIHJlc3VsdCwgZG91YmxlIGNvbmZpZGVuY2Us
IEpTU3RyaW5nUmVmIGxhbmd1YWdlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sIGFs
bG93KQotewotICAgIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbihhbGxvdyk7Ci0gICAg
RHVtcFJlbmRlclRyZWVTdXBwb3J0OjpzZXRNb2NrR2VvbG9jYXRpb25QZXJtaXNzaW9uKEJsYWNr
QmVycnk6OldlYktpdDo6RHVtcFJlbmRlclRyZWU6OmN1cnJlbnRJbnN0YW5jZSgpLT5wYWdlKCks
IGFsbG93KTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Vmlld01vZGVNZWRp
YUZlYXR1cmUoY29uc3QgSlNTdHJpbmdSZWYgbW9kZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTZXJpYWxpemVIVFRQTG9hZHMo
Ym9vbCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IGlmIG5lZWRlZCBmb3IgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNzU4LgotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1pbmltdW1UaW1lckludGVy
dmFsKGRvdWJsZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRUZXh0RGlyZWN0aW9uKEpTU3RyaW5nUmVmKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmdvQmFjaygpCi17
Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudCB0byBlbmFibGUgbG9hZGVyL25hdmlnYXRpb24td2hp
bGUtZGVmZXJyaW5nLWxvYWRzLmh0bWwKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wpCi17Ci0gICAgLy8g
RklYTUU6IGltcGxlbWVudCB0byBlbmFibGUgbG9hZGVyL25hdmlnYXRpb24td2hpbGUtZGVmZXJy
aW5nLWxvYWRzLmh0bWwKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1KU1ZhbHVlUmVmIExh
eW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZShKU0NvbnRleHRSZWYg
Y29udGV4dCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b2Jz
ZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyh1bnNpZ25lZCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzeW5jTG9jYWxTdG9y
YWdlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFzeW5jaHJvbm91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkKGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0b2ZpbGxlZChKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNWYWx1ZVJlZiBub2RlT2JqZWN0LCBib29sIGF1dG9maWxsZWQpCi17Ci0gICAgSlNDOjpFeGVj
U3RhdGUqIGV4ZWMgPSB0b0pTKGNvbnRleHQpOwotICAgIFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1l
bnQgPSB0b0VsZW1lbnQodG9KUyhleGVjLCBub2RlT2JqZWN0KSk7Ci0gICAgaWYgKCFlbGVtZW50
KQotICAgICAgICByZXR1cm47Ci0gICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaW5wdXRF
bGVtZW50ID0gZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKLSAgICBpZiAoIWlucHV0RWxlbWVu
dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW5wdXRFbGVtZW50LT5zZXRBdXRvZmlsbGVkKGF1
dG9maWxsZWQpOwotfQotCi1pbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGVuZGlu
Z0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKCkKLXsKLSAgICByZXR1cm4gRHVtcFJlbmRl
clRyZWVTdXBwb3J0OjpudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0
cyhCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2UoKS0+
cGFnZSgpKTsKLX0KLQotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZmluZFN0cmluZyhKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNTdHJpbmdSZWYgdGFyZ2V0LCBKU09iamVjdFJlZiBvcHRpb25z
QXJyYXkpCi17Ci0gICAgV2ViQ29yZTo6RmluZE9wdGlvbnMgb3B0aW9ucyA9IDA7Ci0KLSAgICBT
dHJpbmcgbmFtZVN0ciA9IGpzU3RyaW5nUmVmVG9XZWJDb3JlU3RyaW5nKHRhcmdldCk7Ci0KLSAg
ICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gbGVuZ3RoUHJvcGVydHlOYW1lKEFkb3B0LCBKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgIHNpemVfdCBsZW5ndGgg
PSAwOwotICAgIGlmIChvcHRpb25zQXJyYXkpIHsKLSAgICAgICAgSlNWYWx1ZVJlZiBsZW5ndGhW
YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgb3B0aW9uc0FycmF5LCBsZW5ndGhQ
cm9wZXJ0eU5hbWUuZ2V0KCksIDApOwotICAgICAgICBpZiAoIUpTVmFsdWVJc051bWJlcihjb250
ZXh0LCBsZW5ndGhWYWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGxl
bmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxlbmd0
aFZhbHVlLCAwKSk7Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkgewotICAgICAgICBKU1ZhbHVlUmVmIHZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0
SW5kZXgoY29udGV4dCwgb3B0aW9uc0FycmF5LCBpLCAwKTsKLSAgICAgICAgaWYgKCFKU1ZhbHVl
SXNTdHJpbmcoY29udGV4dCwgdmFsdWUpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG9wdGlvbk5hbWUoQWRvcHQsIEpTVmFsdWVUb1N0
cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIDApKTsKLQotICAgICAgICBpZiAoSlNTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhvcHRpb25OYW1lLmdldCgpLCAiQ2FzZUluc2Vuc2l0aXZlIikpCi0g
ICAgICAgICAgICBvcHRpb25zIHw9IFdlYkNvcmU6OkNhc2VJbnNlbnNpdGl2ZTsKLSAgICAgICAg
ZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRpb25OYW1lLmdldCgpLCAi
QXRXb3JkU3RhcnRzIikpCi0gICAgICAgICAgICBvcHRpb25zIHw9IFdlYkNvcmU6OkF0V29yZFN0
YXJ0czsKLSAgICAgICAgZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRp
b25OYW1lLmdldCgpLCAiVHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQiKSkKLSAgICAgICAg
ICAgIG9wdGlvbnMgfD0gV2ViQ29yZTo6VHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQ7Ci0g
ICAgICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9uTmFtZS5n
ZXQoKSwgIkJhY2t3YXJkcyIpKQotICAgICAgICAgICAgb3B0aW9ucyB8PSBXZWJDb3JlOjpCYWNr
d2FyZHM7Ci0gICAgICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0
aW9uTmFtZS5nZXQoKSwgIldyYXBBcm91bmQiKSkKLSAgICAgICAgICAgIG9wdGlvbnMgfD0gV2Vi
Q29yZTo6V3JhcEFyb3VuZDsKLSAgICAgICAgZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhvcHRpb25OYW1lLmdldCgpLCAiU3RhcnRJblNlbGVjdGlvbiIpKQotICAgICAgICAg
ICAgb3B0aW9ucyB8PSBXZWJDb3JlOjpTdGFydEluU2VsZWN0aW9uOwotICAgIH0KLQotICAgIC8v
IE91ciBsYXlvdXQgdGVzdHMgYXNzdW1lIGZpbmQgd2lsbCB3cmFwIGFuZCBoaWdobGlnaHQgYWxs
IG1hdGNoZXMuCi0gICAgcmV0dXJuIEJsYWNrQmVycnk6OldlYktpdDo6RHVtcFJlbmRlclRyZWU6
OmN1cnJlbnRJbnN0YW5jZSgpLT5wYWdlKCktPmZpbmROZXh0U3RyaW5nKG5hbWVTdHIudXRmOCgp
LmRhdGEoKSwKLSAgICAgICAgIShvcHRpb25zICYgV2ViQ29yZTo6QmFja3dhcmRzKSwgIShvcHRp
b25zICYgV2ViQ29yZTo6Q2FzZUluc2Vuc2l0aXZlKSwgdHJ1ZSAvKiB3cmFwICovLCB0cnVlIC8q
IGhpZ2hsaWdodEFsbE1hdGNoZXMgKi8pOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgVVJMKQotewotICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQuCi19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFZh
bHVlRm9yVXNlcihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBub2RlT2JqZWN0LCBK
U1N0cmluZ1JlZiB2YWx1ZSkKLXsKLSAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY29u
dGV4dCk7Ci0gICAgV2ViQ29yZTo6RWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudCh0b0pTKGV4
ZWMsIG5vZGVPYmplY3QpKTsKLSAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLSAg
ICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBlbGVtZW50LT50b0lu
cHV0RWxlbWVudCgpOwotICAgIGlmICghaW5wdXRFbGVtZW50KQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpbnB1dEVsZW1lbnQtPnNldFZhbHVlRm9yVXNlcihqc1N0cmluZ1JlZlRvV2ViQ29yZVN0
cmluZyh2YWx1ZSkpOwotfQotCi1sb25nIGxvbmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFwcGxp
Y2F0aW9uQ2FjaGVEaXNrVXNhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgb3JpZ2luKQotewotICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gc3VwcG9ydCBnZXR0aW5nIGRpc2sgdXNhZ2UgYnkgYWxs
IGFwcGxpY2F0aW9uIGNhY2hlcyBmb3IgYW4gb3JpZ2luLgotICAgIHJldHVybiAwOwotfQotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRDaHJvbWVJbnB1dEZpZWxkKCkKLXsKLX0KLQot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCgpCi17Ci19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmZvY3VzV2ViVmlldygpCi17Ci19Ci0KLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEJhY2tpbmdTY2FsZUZhY3Rvcihkb3VibGUpCi17
Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tTcGVlY2hJbnB1dER1bXBS
ZWN0KGJvb2wpCi17Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNpbXVsYXRlRGVz
a3RvcE5vdGlmaWNhdGlvbkNsaWNrKEpTU3RyaW5nUmVmIHRpdGxlKQotewotfQotCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpyZXNldFBhZ2VWaXNpYmlsaXR5KCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQYWdlVmlzaWJp
bGl0eShjb25zdCBjaGFyKikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZChib29s
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNlbmRXZWJJbnRlbnRSZXNwb25zZShKU1N0cmluZ1JlZikKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxpdmVyV2ViSW50ZW50
KEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvVGVzdFJ1
bm5lckJsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Js
YWNrYmVycnkvVGVzdFJ1bm5lckJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxMjUzMzUpCShmcm9t
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvTGF5b3V0VGVzdENvbnRyb2xsZXJCbGFj
a0JlcnJ5LmNwcDoxMjUzMzUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L1Rl
c3RSdW5uZXJCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg0OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKKworI2lu
Y2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKKyNpbmNsdWRl
ICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRG9j
dW1lbnRNYXJrZXIuaCIKKyNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgorI2luY2x1ZGUgIkR1
bXBSZW5kZXJUcmVlQmxhY2tCZXJyeS5oIgorI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlU3VwcG9y
dC5oIgorI2luY2x1ZGUgIkVkaXRpbmdCZWhhdmlvclR5cGVzLmgiCisjaW5jbHVkZSAiRWRpdG9y
Q2xpZW50QmxhY2tCZXJyeS5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJGcmFt
ZS5oIgorI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJKU0VsZW1lbnQu
aCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNs
dWRlICJPd25BcnJheVB0ci5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJU
cmVlQXNUZXh0LmgiCisjaW5jbHVkZSAiU2NoZW1lUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJTZWN1
cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlNlY3VyaXR5UG9saWN5LmgiCisjaW5jbHVkZSAiU2V0
dGluZ3MuaCIKKyNpbmNsdWRlICJVbnVzZWRQYXJhbS5oIgorI2luY2x1ZGUgIldvcmtRdWV1ZS5o
IgorI2luY2x1ZGUgIldvcmtRdWV1ZUl0ZW0uaCIKKyNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIK
KworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0FQSUNhc3QuaD4KKyNpbmNsdWRlIDxTaGFyZWRQ
b2ludGVyLmg+CisjaW5jbHVkZSA8V2ViUGFnZS5oPgorI2luY2x1ZGUgPFdlYlNldHRpbmdzLmg+
CisKK3VzaW5nIFdlYkNvcmU6OnRvRWxlbWVudDsKK3VzaW5nIFdlYkNvcmU6OnRvSlM7CisKK0xh
eW91dFRlc3RDb250cm9sbGVyOjp+TGF5b3V0VGVzdENvbnRyb2xsZXIoKQoreworfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjphZGREaXNhbGxvd2VkVVJMKEpTU3RyaW5nUmVmIHVybCkK
K3sKKyAgICBVTlVTRURfUEFSQU0odXJsKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbERhdGFiYXNlcygpCit7CisjaWYgRU5B
QkxFKERBVEFCQVNFKQorICAgIFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmRl
bGV0ZUFsbERhdGFiYXNlcygpOworI2VuZGlmCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmNsZWFyQmFja0ZvcndhcmRMaXN0KCkKK3sKKyAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1
bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2UoKS0+cGFnZSgpLT5jbGVhckJhY2tGb3J3YXJk
TGlzdCh0cnVlKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJQZXJzaXN0
ZW50VXNlclN0eWxlU2hlZXQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0pTU3Ry
aW5nUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpjb3B5RGVjb2RlZEhvc3ROYW1lKEpTU3RyaW5n
UmVmIG5hbWUpCit7CisgICAgVU5VU0VEX1BBUkFNKG5hbWUpOworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK0pTU3RyaW5nUmVmIExheW91dFRlc3RDb250cm9sbGVy
Ojpjb3B5RW5jb2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVmIG5hbWUpCit7CisgICAgVU5VU0VEX1BB
UkFNKG5hbWUpOworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc3BhdGNoUGVuZGluZ0xvYWRSZXF1ZXN0cygpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
ZGlzcGxheSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworc3RhdGljIFN0cmluZyBq
c1N0cmluZ1JlZlRvV2ViQ29yZVN0cmluZyhKU1N0cmluZ1JlZiBzdHIpCit7CisgICAgc2l6ZV90
IHN0ckFyclNpemUgPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoc3RyKTsKKyAg
ICBPd25BcnJheVB0cjxjaGFyPiBzdHJBcnIgPSBhZG9wdEFycmF5UHRyKG5ldyBjaGFyW3N0ckFy
clNpemVdKTsKKyAgICBKU1N0cmluZ0dldFVURjhDU3RyaW5nKHN0ciwgc3RyQXJyLmdldCgpLCBz
dHJBcnJTaXplKTsKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChzdHJBcnIuZ2V0KCkpOwor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpleGVjQ29tbWFuZChKU1N0cmluZ1JlZiBu
YW1lLCBKU1N0cmluZ1JlZiB2YWx1ZSkKK3sKKyAgICBpZiAoIW1haW5GcmFtZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgU3RyaW5nIG5hbWVTdHIgPSBqc1N0cmluZ1JlZlRvV2ViQ29yZVN0cmlu
ZyhuYW1lKTsKKyAgICBTdHJpbmcgdmFsdWVTdHIgPSBqc1N0cmluZ1JlZlRvV2ViQ29yZVN0cmlu
Zyh2YWx1ZSk7CisKKyAgICBtYWluRnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKG5hbWVTdHIpLmV4
ZWN1dGUodmFsdWVTdHIpOworfQorCitib29sIExheW91dFRlc3RDb250cm9sbGVyOjppc0NvbW1h
bmRFbmFibGVkKEpTU3RyaW5nUmVmIG5hbWUpCit7CisgICAgaWYgKCFtYWluRnJhbWUpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIFN0cmluZyBuYW1lU3RyID0ganNTdHJpbmdSZWZUb1dl
YkNvcmVTdHJpbmcobmFtZSk7CisKKyAgICByZXR1cm4gbWFpbkZyYW1lLT5lZGl0b3IoKS0+Y29t
bWFuZChuYW1lU3RyKS5pc0VuYWJsZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6a2VlcFdlYkhpc3RvcnkoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6Om5vdGlmeURvbmUoKQoreworICAgIGlmIChtX3dhaXRUb0R1
bXAgJiYgKCF0b3BMb2FkaW5nRnJhbWUgfHwgQmxhY2tCZXJyeTo6V2ViS2l0OjpEdW1wUmVuZGVy
VHJlZTo6Y3VycmVudEluc3RhbmNlKCktPmxvYWRGaW5pc2hlZCgpKSAmJiAhV29ya1F1ZXVlOjpz
aGFyZWQoKS0+Y291bnQoKSkKKyAgICAgICAgZHVtcCgpOworCisgICAgbV93YWl0VG9EdW1wID0g
ZmFsc2U7CisgICAgd2FpdEZvclBvbGljeSA9IGZhbHNlOworfQorCitKU1N0cmluZ1JlZiBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6cGF0aFRvTG9jYWxSZXNvdXJjZShKU0NvbnRleHRSZWYsIEpTU3Ry
aW5nUmVmIHVybCkKK3sKKyAgICByZXR1cm4gSlNTdHJpbmdSZXRhaW4odXJsKTsKK30KKwordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVMb2FkKEpTU3RyaW5nUmVmIHVybCwgSlNTdHJp
bmdSZWYgdGFyZ2V0KQoreworICAgIHNpemVfdCB1cmxBcnJTaXplID0gSlNTdHJpbmdHZXRNYXhp
bXVtVVRGOENTdHJpbmdTaXplKHVybCk7CisgICAgT3duQXJyYXlQdHI8Y2hhcj4gdXJsQXJyID0g
YWRvcHRBcnJheVB0cihuZXcgY2hhclt1cmxBcnJTaXplXSk7CisgICAgSlNTdHJpbmdHZXRVVEY4
Q1N0cmluZyh1cmwsIHVybEFyci5nZXQoKSwgdXJsQXJyU2l6ZSk7CisKKyAgICBXZWJDb3JlOjpL
VVJMIGJhc2UgPSBtYWluRnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5yZXNwb25z
ZSgpLnVybCgpOworICAgIFdlYkNvcmU6OktVUkwgYWJzb2x1dGUoYmFzZSwgdXJsQXJyLmdldCgp
KTsKKworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBhYnNvbHV0ZVVSTChBZG9wdCwgSlNT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYWJzb2x1dGUuc3RyaW5nKCkudXRmOCgpLmRhdGEo
KSkpOworICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBMb2FkSXRlbShhYnNvbHV0
ZVVSTC5nZXQoKSwgdGFyZ2V0KSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dEFjY2VwdHNFZGl0aW5nKGJvb2wgYWNjZXB0c0VkaXRpbmcpCit7CisgICAgQmxhY2tCZXJyeTo6
V2ViS2l0OjpEdW1wUmVuZGVyVHJlZTo6Y3VycmVudEluc3RhbmNlKCktPnNldEFjY2VwdHNFZGl0
aW5nKGFjY2VwdHNFZGl0aW5nKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
QXBwQ2FjaGVNYXhpbXVtU2l6ZSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCit7CisgICAgVU5V
U0VEX1BBUkFNKHF1b3RhKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChib29sIGVuYWJs
ZSkKK3sKKyAgICBtYWluRnJhbWUtPnBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0QXV0aG9yQW5kVXNl
clN0eWxlc0VuYWJsZWQoZW5hYmxlKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0Q2FjaGVNb2RlbChpbnQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoYm9vbCBzZXREZWxl
Z2F0ZSwgYm9vbCBwZXJtaXNzaXZlKQoreworICAgIFVOVVNFRF9QQVJBTShzZXREZWxlZ2F0ZSk7
CisgICAgVU5VU0VEX1BBUkFNKHBlcm1pc3NpdmUpOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9y
aWdpbihPcGFxdWVKU1N0cmluZyopCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBzdXBw
b3J0IGRlbGV0aW5nIGFsbCBhcHBsaWNhdGlvbiBjYWNoZXMgZm9yIGFuIG9yaWdpbi4KKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCitsb25nIGxvbmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6Omxv
Y2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbihKU1N0cmluZ1JlZikKK3sKKyAgICAvLyBGSVhN
RTogSW1wbGVtZW50IHRvIHN1cHBvcnQgZ2V0dGluZyBkaXNrIHVzYWdlIGluIGJ5dGVzIGZvciBh
biBvcmlnaW4uCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworSlNW
YWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hl
KEpTQ29udGV4dFJlZiBjb250ZXh0KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gZ2V0
IG9yaWdpbnMgdGhhdCBjb250YWluIGFwcGxpY2F0aW9uIGNhY2hlcy4KKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKwor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGF0YWJhc2VRdW90YSh1bnNpZ25lZCBsb25n
IGxvbmcgcXVvdGEpCit7CisgICAgaWYgKCFtYWluRnJhbWUpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnNldFF1b3RhKG1haW5GcmFt
ZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSwgcXVvdGEpOworfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1l
KGJvb2wgZm9yYmlkZGVuLCBKU1N0cmluZ1JlZiBzY2hlbWUpCit7CisgICAgV2ViQ29yZTo6U2No
ZW1lUmVnaXN0cnk6OnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoZm9y
YmlkZGVuLCBqc1N0cmluZ1JlZlRvV2ViQ29yZVN0cmluZyhzY2hlbWUpKTsKK30KKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SWNvbkRhdGFiYXNlRW5hYmxlZChib29sIGljb25EYXRh
YmFzZUVuYWJsZWQpCit7CisgICAgVU5VU0VEX1BBUkFNKGljb25EYXRhYmFzZUVuYWJsZWQpOwor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dE1haW5GcmFtZUlzRmlyc3RSZXNwb25kZXIoYm9vbCBmbGFnKQoreworICAgIFVOVVNFRF9QQVJB
TShmbGFnKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXRMb2NhdGlvbihKU1N0cmluZ1JlZiBw
YXRoKQoreworICAgIFVOVVNFRF9QQVJBTShwYXRoKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQb3B1cEJsb2NraW5nRW5hYmxlZChi
b29sIGZsYWcpCit7CisgICAgQmxhY2tCZXJyeTo6V2ViS2l0OjpEdW1wUmVuZGVyVHJlZTo6Y3Vy
cmVudEluc3RhbmNlKCktPnBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0SmF2YVNjcmlwdE9wZW5XaW5k
b3dzQXV0b21hdGljYWxseSghZmxhZyk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoYm9vbCBmbGFnKQoreworICAgIFVOVVNFRF9QQVJB
TShmbGFnKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZChib29sIGZsYWcpCit7CisgICAgQmxhY2tCZXJy
eTo6V2ViS2l0OjpEdW1wUmVuZGVyVHJlZTo6Y3VycmVudEluc3RhbmNlKCktPnBhZ2UoKS0+c2V0
dGluZ3MoKS0+c2V0WFNTQXVkaXRvckVuYWJsZWQoZmxhZyk7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoYm9vbCBmbGFn
KQoreworICAgIEJsYWNrQmVycnk6OldlYktpdDo6RHVtcFJlbmRlclRyZWU6OmN1cnJlbnRJbnN0
YW5jZSgpLT5zZXRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKGZsYWcpOworfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQoYm9v
bCBmbGFnKQoreworICAgIFVOVVNFRF9QQVJBTShmbGFnKTsKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRUYWJLZXlDeWNsZXNUaHJvdWdo
RWxlbWVudHMoYm9vbCBjeWNsZXMpCit7CisgICAgaWYgKCFtYWluRnJhbWUpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1haW5GcmFtZS0+cGFnZSgpLT5zZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxl
bWVudHMoY3ljbGVzKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlRGFz
aGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUoYm9vbCBmbGFnKQoreworICAgIFVOVVNFRF9QQVJBTShm
bGFnKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoYm9vbCBmbGFnKQoreworICAgIFVOVVNFRF9Q
QVJBTShmbGFnKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKEpTU3RyaW5nUmVmIHBhdGgpCit7
CisgICAgU3RyaW5nIHBhdGhTdHIgPSBqc1N0cmluZ1JlZlRvV2ViQ29yZVN0cmluZyhwYXRoKTsK
KyAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2Uo
KS0+cGFnZSgpLT5zZXR0aW5ncygpLT5zZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKHBhdGhTdHIu
dXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndhaXRGb3JQ
b2xpY3lEZWxlZ2F0ZSgpCit7CisgICAgc2V0V2FpdFRvRHVtcCh0cnVlKTsKKyAgICB3YWl0Rm9y
UG9saWN5ID0gdHJ1ZTsKK30KKworc2l6ZV90IExheW91dFRlc3RDb250cm9sbGVyOjp3ZWJIaXN0
b3J5SXRlbUNvdW50KCkKK3sKKyAgICBTaGFyZWRBcnJheTxCbGFja0JlcnJ5OjpXZWJLaXQ6Oldl
YlBhZ2U6OkJhY2tGb3J3YXJkRW50cnk+IGJhY2tGb3J3YXJkTGlzdDsKKyAgICBCbGFja0JlcnJ5
OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2UoKS0+cGFnZSgpLT5nZXRC
YWNrRm9yd2FyZExpc3QoYmFja0ZvcndhcmRMaXN0KTsKKyAgICByZXR1cm4gYmFja0ZvcndhcmRM
aXN0Lmxlbmd0aCgpOworfQorCitpbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndpbmRvd0NvdW50
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitib29sIExh
eW91dFRlc3RDb250cm9sbGVyOjplbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRo
SWQoSlNTdHJpbmdSZWYgaWQpCit7CisgICAgVU5VU0VEX1BBUkFNKGlkKTsKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpwYWdlUHJvcGVydHkoY29uc3QgY2hhciogcHJvcGVy
dHlOYW1lLCBpbnQgcGFnZU51bWJlcikgY29uc3QKK3sKKyAgICBVTlVTRURfUEFSQU0ocHJvcGVy
dHlOYW1lKTsKKyAgICBVTlVTRURfUEFSQU0ocGFnZU51bWJlcik7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
V2FpdFRvRHVtcChib29sIHdhaXRUb0R1bXApCit7CisgICAgLy8gQ2hhbmdlIGZyb20gMzBzIHRv
IDM1cyBiZWNhdXNlIHNvbWUgdGVzdCBjYXNlcyBpbiBtdWx0aXBhcnQgbmVlZCAzMCBzZWNvbmRz
LAorICAgIC8vIHJlZmVyIHRvIGh0dHAvdGVzdHMvbXVsdGlwYXJ0L3Jlc291cmNlcy9tdWx0aXBh
cnQtd2FpdC1iZWZvcmUtYm91bmRhcnkucGhwIHBsZWFzZS4KKyAgICBzdGF0aWMgY29uc3QgZG91
YmxlIGtXYWl0VG9EdW1wV2F0Y2hkb2dJbnRlcnZhbCA9IDM1LjA7CisgICAgbV93YWl0VG9EdW1w
ID0gd2FpdFRvRHVtcDsKKyAgICBpZiAobV93YWl0VG9EdW1wKQorICAgICAgICBCbGFja0JlcnJ5
OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2UoKS0+c2V0V2FpdFRvRHVt
cFdhdGNoZG9nKGtXYWl0VG9EdW1wV2F0Y2hkb2dJbnRlcnZhbCk7Cit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFdpbmRvd0lzS2V5KGJvb2wgd2luZG93SXNLZXkpCit7CisgICAg
bV93aW5kb3dJc0tleSA9IHdpbmRvd0lzS2V5OworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K2Jvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50
V2l0aElkKEpTU3RyaW5nUmVmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lLCBKU1N0cmluZ1Jl
ZiBlbGVtZW50SWQpCit7CisgICAgaWYgKCFtYWluRnJhbWUpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGludCBuYW1lTGVuID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXpl
KGFuaW1hdGlvbk5hbWUpOworICAgIGludCBpZExlbiA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhD
U3RyaW5nU2l6ZShlbGVtZW50SWQpOworICAgIE93bkFycmF5UHRyPGNoYXI+IG5hbWUgPSBhZG9w
dEFycmF5UHRyKG5ldyBjaGFyW25hbWVMZW5dKTsKKyAgICBPd25BcnJheVB0cjxjaGFyPiBlSWQg
PSBhZG9wdEFycmF5UHRyKG5ldyBjaGFyW2lkTGVuXSk7CisKKyAgICBKU1N0cmluZ0dldFVURjhD
U3RyaW5nKGFuaW1hdGlvbk5hbWUsIG5hbWUuZ2V0KCksIG5hbWVMZW4pOworICAgIEpTU3RyaW5n
R2V0VVRGOENTdHJpbmcoZWxlbWVudElkLCBlSWQuZ2V0KCksIGlkTGVuKTsKKworICAgIFdlYkNv
cmU6OkFuaW1hdGlvbkNvbnRyb2xsZXIqIGFuaW1hdGlvbkNvbnRyb2xsZXIgPSBtYWluRnJhbWUt
PmFuaW1hdGlvbigpOworICAgIGlmICghYW5pbWF0aW9uQ29udHJvbGxlcikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgV2ViQ29yZTo6Tm9kZSogbm9kZSA9IG1haW5GcmFtZS0+ZG9jdW1l
bnQoKS0+Z2V0RWxlbWVudEJ5SWQoZUlkLmdldCgpKTsKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUt
PnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBhbmltYXRp
b25Db250cm9sbGVyLT5wYXVzZUFuaW1hdGlvbkF0VGltZShub2RlLT5yZW5kZXJlcigpLCBuYW1l
LmdldCgpLCB0aW1lKTsKK30KKworYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF1c2VUcmFu
c2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgZG91
YmxlIHRpbWUsIEpTU3RyaW5nUmVmIGVsZW1lbnRJZCkKK3sKKyAgICBpZiAoIW1haW5GcmFtZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaW50IG5hbWVMZW4gPSBKU1N0cmluZ0dldE1h
eGltdW1VVEY4Q1N0cmluZ1NpemUocHJvcGVydHlOYW1lKTsKKyAgICBpbnQgaWRMZW4gPSBKU1N0
cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoZWxlbWVudElkKTsKKyAgICBPd25BcnJheVB0
cjxjaGFyPiBuYW1lID0gYWRvcHRBcnJheVB0cihuZXcgY2hhcltuYW1lTGVuXSk7CisgICAgT3du
QXJyYXlQdHI8Y2hhcj4gZUlkID0gYWRvcHRBcnJheVB0cihuZXcgY2hhcltpZExlbl0pOworCisg
ICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhwcm9wZXJ0eU5hbWUsIG5hbWUuZ2V0KCksIG5hbWVM
ZW4pOworICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmcoZWxlbWVudElkLCBlSWQuZ2V0KCksIGlk
TGVuKTsKKworICAgIFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXIqIGFuaW1hdGlvbkNvbnRy
b2xsZXIgPSBtYWluRnJhbWUtPmFuaW1hdGlvbigpOworICAgIGlmICghYW5pbWF0aW9uQ29udHJv
bGxlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgV2ViQ29yZTo6Tm9kZSogbm9kZSA9
IG1haW5GcmFtZS0+ZG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQoZUlkLmdldCgpKTsKKyAgICBp
ZiAoIW5vZGUgfHwgIW5vZGUtPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHJldHVybiBhbmltYXRpb25Db250cm9sbGVyLT5wYXVzZVRyYW5zaXRpb25BdFRpbWUobm9k
ZS0+cmVuZGVyZXIoKSwgbmFtZS5nZXQoKSwgdGltZSk7Cit9CisKK3Vuc2lnbmVkIExheW91dFRl
c3RDb250cm9sbGVyOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBjb25zdAoreworICAgIGlm
ICghbWFpbkZyYW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBXZWJDb3JlOjpBbmlt
YXRpb25Db250cm9sbGVyKiBhbmltYXRpb25Db250cm9sbGVyID0gbWFpbkZyYW1lLT5hbmltYXRp
b24oKTsKKyAgICBpZiAoIWFuaW1hdGlvbkNvbnRyb2xsZXIpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHJldHVybiBhbmltYXRpb25Db250cm9sbGVyLT5udW1iZXJPZkFjdGl2ZUFuaW1h
dGlvbnMobWFpbkZyYW1lLT5kb2N1bWVudCgpKTsKK30KKwordW5zaWduZWQgaW50IExheW91dFRl
c3RDb250cm9sbGVyOjp3b3JrZXJUaHJlYWRDb3VudCgpIGNvbnN0Cit7CisjaWYgRU5BQkxFX1dP
UktFUlMKKyAgICByZXR1cm4gV2ViQ29yZTo6V29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWRDb3Vu
dCgpOworI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpyZW1vdmVBbGxWaXNpdGVkTGlua3MoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc2FibGVJbWFnZUxvYWRpbmco
KQoreworICAgIEJsYWNrQmVycnk6OldlYktpdDo6RHVtcFJlbmRlclRyZWU6OmN1cnJlbnRJbnN0
YW5jZSgpLT5wYWdlKCktPnNldHRpbmdzKCktPnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseShm
YWxzZSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om92ZXJyaWRlUHJlZmVyZW5j
ZShKU1N0cmluZ1JlZiBrZXksIEpTU3RyaW5nUmVmIHZhbHVlKQoreworICAgIGlmICghbWFpbkZy
YW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcga2V5U3RyID0ganNTdHJpbmdSZWZU
b1dlYkNvcmVTdHJpbmcoa2V5KTsKKyAgICBTdHJpbmcgdmFsdWVTdHIgPSBqc1N0cmluZ1JlZlRv
V2ViQ29yZVN0cmluZyh2YWx1ZSk7CisKKyAgICBpZiAoa2V5U3RyID09ICJXZWJLaXRVc2VzUGFn
ZUNhY2hlUHJlZmVyZW5jZUtleSIpCisgICAgICAgIEJsYWNrQmVycnk6OldlYktpdDo6RHVtcFJl
bmRlclRyZWU6OmN1cnJlbnRJbnN0YW5jZSgpLT5wYWdlKCktPnNldHRpbmdzKCktPnNldE1heGlt
dW1QYWdlc0luQ2FjaGUoMSk7CisgICAgZWxzZSBpZiAoa2V5U3RyID09ICJXZWJLaXRVc2VQcmVI
VE1MNVBhcnNlclF1aXJrcyIpCisgICAgICAgIG1haW5GcmFtZS0+cGFnZSgpLT5zZXR0aW5ncygp
LT5zZXRVc2VQcmVIVE1MNVBhcnNlclF1aXJrcyh0cnVlKTsKKyAgICBlbHNlIGlmIChrZXlTdHIg
PT0gIldlYktpdFRhYlRvTGlua3NQcmVmZXJlbmNlS2V5IikKKyAgICAgICAgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0OjpzZXRMaW5rc0luY2x1ZGVkSW5Gb2N1c0NoYWluKHZhbHVlU3RyID09ICJ0cnVl
IiB8fCB2YWx1ZVN0ciA9PSAiMSIpOworICAgIGVsc2UgaWYgKGtleVN0ciA9PSAiV2ViS2l0SHlw
ZXJsaW5rQXVkaXRpbmdFbmFibGVkIikKKyAgICAgICAgbWFpbkZyYW1lLT5wYWdlKCktPnNldHRp
bmdzKCktPnNldEh5cGVybGlua0F1ZGl0aW5nRW5hYmxlZCh2YWx1ZVN0ciA9PSAidHJ1ZSIgfHwg
dmFsdWVTdHIgPT0gIjEiKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWx3
YXlzQWNjZXB0Q29va2llcyhib29sIGFsd2F5c0FjY2VwdENvb2tpZXMpCit7CisgICAgVU5VU0VE
X1BBUkFNKGFsd2F5c0FjY2VwdENvb2tpZXMpOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRv
dWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5KQoreworICAg
IER1bXBSZW5kZXJUcmVlU3VwcG9ydDo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oQmxhY2tC
ZXJyeTo6V2ViS2l0OjpEdW1wUmVuZGVyVHJlZTo6Y3VycmVudEluc3RhbmNlKCktPnBhZ2UoKSwg
bGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3kpOworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25FcnJvcihpbnQgY29kZSwgSlNTdHJpbmdSZWYgbWVz
c2FnZSkKK3sKKyAgICBTdHJpbmcgbWVzc2FnZVN0ciA9IGpzU3RyaW5nUmVmVG9XZWJDb3JlU3Ry
aW5nKG1lc3NhZ2UpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydDo6c2V0TW9ja0dlb2xvY2F0
aW9uRXJyb3IoQmxhY2tCZXJyeTo6V2ViS2l0OjpEdW1wUmVuZGVyVHJlZTo6Y3VycmVudEluc3Rh
bmNlKCktPnBhZ2UoKSwgY29kZSwgbWVzc2FnZVN0cik7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNob3dXZWJJbnNwZWN0b3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsb3NlV2ViSW5zcGVjdG9yKCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFs
dWF0ZUluV2ViSW5zcGVjdG9yKGxvbmcgY2FsbElkLCBKU1N0cmluZ1JlZiBzY3JpcHQpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGNhbGxJZCk7CisgICAgVU5VU0VEX1BBUkFNKHNjcmlwdCk7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVh
dGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSh1bnNpZ25lZCB3b3JsZElELCBK
U09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkKK3sKKyAgICBVTlVT
RURfUEFSQU0od29ybGRJRCk7CisgICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7CisgICAg
VU5VU0VEX1BBUkFNKHNjcmlwdCk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQodW5zaWdu
ZWQgd29ybGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQp
Cit7CisgICAgVU5VU0VEX1BBUkFNKHdvcmxkSUQpOworICAgIFVOVVNFRF9QQVJBTShnbG9iYWxP
YmplY3QpOworICAgIFVOVVNFRF9QQVJBTShzY3JpcHQpOworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHQoSlNTdHJpbmdS
ZWYgc291cmNlLCBib29sIHJ1bkF0U3RhcnQsIGJvb2wgYWxsRnJhbWVzKQoreworICAgIFVOVVNF
RF9QQVJBTShzb3VyY2UpOworICAgIFVOVVNFRF9QQVJBTShydW5BdFN0YXJ0KTsKKyAgICBVTlVT
RURfUEFSQU0oYWxsRnJhbWVzKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldChKU1N0cmluZ1JlZiwgYm9vbCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKGludCwgaW50
LCBpbnQsIGludCwgaW50LCBpbnQsIGludCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiAwOworfQorCitpbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9m
UGFnZXMoZmxvYXQsIGZsb2F0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IC0xOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTY3JvbGxiYXJQb2xpY3ko
SlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdlYlZpZXdFZGl0YWJsZShib29sKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmF1
dGhlbnRpY2F0ZVNlc3Npb24oSlNTdHJpbmdSZWYgdXJsLCBKU1N0cmluZ1JlZiB1c2VybmFtZSwg
SlNTdHJpbmdSZWYgcGFzc3dvcmQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9v
bCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2FsbFNob3VsZENsb3NlT25XZWJWaWV3KCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZChib29sIGVuYWJsZSkKK3sK
KyAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2Uo
KS0+cGFnZSgpLT5zZXR0aW5ncygpLT5zZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkKGVuYWJsZSk7
Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNwYXRpYWxOYXZpZ2F0aW9uRW5h
YmxlZChib29sIGVuYWJsZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShKU1N0cmlu
Z1JlZiBzb3VyY2VPcmlnaW4sIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9uUHJvdG9jb2wsIEpTU3Ry
aW5nUmVmIGRlc3RpbmF0aW9uSG9zdCwgYm9vbCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucykK
K3sKKyAgICBXZWJDb3JlOjpTZWN1cml0eVBvbGljeTo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0
RW50cnkoKldlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKGpzU3RyaW5n
UmVmVG9XZWJDb3JlU3RyaW5nKHNvdXJjZU9yaWdpbikpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc1N0cmluZ1JlZlRvV2ViQ29yZVN0cmluZyhk
ZXN0aW5hdGlvblByb3RvY29sKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAganNTdHJpbmdSZWZUb1dlYkNvcmVTdHJpbmcoZGVzdGluYXRpb25Ib3N0
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxs
b3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShKU1N0cmluZ1JlZiBzb3VyY2VPcmln
aW4sIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9uUHJvdG9jb2wsIEpTU3RyaW5nUmVmIGRlc3RpbmF0
aW9uSG9zdCwgYm9vbCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucykKK3sKKyAgICBXZWJDb3Jl
OjpTZWN1cml0eVBvbGljeTo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoKldlYkNv
cmU6OlNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKGpzU3RyaW5nUmVmVG9XZWJDb3Jl
U3RyaW5nKHNvdXJjZU9yaWdpbikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqc1N0cmluZ1JlZlRvV2ViQ29yZVN0cmluZyhkZXN0aW5hdGlv
blByb3RvY29sKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAganNTdHJpbmdSZWZUb1dlYkNvcmVTdHJpbmcoZGVzdGluYXRpb25Ib3N0KSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dE
ZXN0aW5hdGlvblN1YmRvbWFpbnMpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMoYm9vbCBlbmFibGVkKQoreworICAgIGlmICgh
bWFpbkZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBtYWluRnJhbWUtPnBhZ2UoKS0+c2V0
dGluZ3MoKS0+c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKGVuYWJsZWQpOworfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxl
VVJMcyhib29sIGVuYWJsZWQpCit7CisgICAgaWYgKCFtYWluRnJhbWUpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1haW5GcmFtZS0+cGFnZSgpLT5zZXR0aW5ncygpLT5zZXRBbGxvd1VuaXZlcnNh
bEFjY2Vzc0Zyb21GaWxlVVJMcyhlbmFibGVkKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6YXBpVGVzdE5ld1dpbmRvd0RhdGFMb2FkQmFzZVVSTChKU1N0cmluZ1JlZiB1dGY4RGF0
YSwgSlNTdHJpbmdSZWYgYmFzZVVSTCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphcGlUZXN0R29Ub0N1cnJlbnRCYWNrRm9yd2FyZEl0
ZW0oKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQoYm9vbCBmbGFnKQoreworICAg
IEJsYWNrQmVycnk6OldlYktpdDo6RHVtcFJlbmRlclRyZWU6OmN1cnJlbnRJbnN0YW5jZSgpLT5w
YWdlKCktPnNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQoZmxhZyk7Cit9CisKK0pTVmFs
dWVSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVk
SW5mbyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0Ojpjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZElu
Zm8oY29udGV4dCwgdmFsdWUpOworfQorCitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmxheWVyVHJlZUFzVGV4dCgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExh
eW91dFRlc3RDb250cm9sbGVyOjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTVmFsdWVSZWYgbm9kZU9iamVjdCkgY29uc3QKK3sKKyAgICBXZWJDb3JlOjpFbGVt
ZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KHRvSlModG9KUyhjb250ZXh0KSwgbm9kZU9iamVjdCkp
OworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gbWFya2VyVGV4dChBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoV2ViQ29yZTo6bWFya2VyVGV4dEZvckxpc3RJdGVtKGVsZW1lbnQpLnV0ZjgoKS5kYXRh
KCkpKTsKKyAgICByZXR1cm4gbWFya2VyVGV4dDsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0UGx1Z2luc0VuYWJsZWQoYm9vbCBmbGFnKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFib3J0TW9kYWwoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFy
QWxsQXBwbGljYXRpb25DYWNoZXMoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSh1
bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0RldmljZU9yaWVudGF0aW9uKGJvb2wg
Y2FuUHJvdmlkZUFscGhhLCBkb3VibGUgYWxwaGEsIGJvb2wgY2FuUHJvdmlkZUJldGEsIGRvdWJs
ZSBiZXRhLCBib29sIGNhblByb3ZpZGVHYW1tYSwgZG91YmxlIGdhbW1hKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE1vY2tTcGVl
Y2hJbnB1dFJlc3VsdChKU1N0cmluZ1JlZiByZXN1bHQsIGRvdWJsZSBjb25maWRlbmNlLCBKU1N0
cmluZ1JlZiBsYW5ndWFnZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCBhbGxvdykK
K3sKKyAgICBzZXRHZW9sb2NhdGlvblBlcm1pc3Npb25Db21tb24oYWxsb3cpOworICAgIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydDo6c2V0TW9ja0dlb2xvY2F0aW9uUGVybWlzc2lvbihCbGFja0JlcnJ5
OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2UoKS0+cGFnZSgpLCBhbGxv
dyk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFZpZXdNb2RlTWVkaWFGZWF0
dXJlKGNvbnN0IEpTU3RyaW5nUmVmIG1vZGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2VyaWFsaXplSFRUUExvYWRzKGJvb2wp
Cit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBpZiBuZWVkZWQgZm9yIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDc1OC4KKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChk
b3VibGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0VGV4dERpcmVjdGlvbihKU1N0cmluZ1JlZikKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpnb0JhY2soKQoreworICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQgdG8gZW5hYmxlIGxvYWRlci9uYXZpZ2F0aW9uLXdoaWxlLWRl
ZmVycmluZy1sb2Fkcy5odG1sCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0RGVmZXJzTG9hZGluZyhib29sKQoreworICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQgdG8gZW5hYmxlIGxvYWRlci9uYXZpZ2F0aW9uLXdoaWxlLWRlZmVycmluZy1s
b2Fkcy5odG1sCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworSlNWYWx1ZVJlZiBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoSlNDb250ZXh0UmVmIGNvbnRl
eHQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9ic2VydmVT
dG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnModW5zaWduZWQpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3luY0xvY2FsU3RvcmFnZSgp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZGVsZXRlQWxsTG9jYWxTdG9yYWdlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5n
RW5hYmxlZChib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldEF1dG9maWxsZWQoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFs
dWVSZWYgbm9kZU9iamVjdCwgYm9vbCBhdXRvZmlsbGVkKQoreworICAgIEpTQzo6RXhlY1N0YXRl
KiBleGVjID0gdG9KUyhjb250ZXh0KTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBlbGVtZW50ID0g
dG9FbGVtZW50KHRvSlMoZXhlYywgbm9kZU9iamVjdCkpOworICAgIGlmICghZWxlbWVudCkKKyAg
ICAgICAgcmV0dXJuOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVu
dCA9IGVsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7CisgICAgaWYgKCFpbnB1dEVsZW1lbnQpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlucHV0RWxlbWVudC0+c2V0QXV0b2ZpbGxlZChhdXRvZmls
bGVkKTsKK30KKworaW50IExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZlBlbmRpbmdHZW9s
b2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cygpCit7CisgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVl
U3VwcG9ydDo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoQmxh
Y2tCZXJyeTo6V2ViS2l0OjpEdW1wUmVuZGVyVHJlZTo6Y3VycmVudEluc3RhbmNlKCktPnBhZ2Uo
KSk7Cit9CisKK2Jvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmZpbmRTdHJpbmcoSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTU3RyaW5nUmVmIHRhcmdldCwgSlNPYmplY3RSZWYgb3B0aW9uc0FycmF5
KQoreworICAgIFdlYkNvcmU6OkZpbmRPcHRpb25zIG9wdGlvbnMgPSAwOworCisgICAgU3RyaW5n
IG5hbWVTdHIgPSBqc1N0cmluZ1JlZlRvV2ViQ29yZVN0cmluZyh0YXJnZXQpOworCisgICAgSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGxlbmd0aFByb3BlcnR5TmFtZShBZG9wdCwgSlNTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKKyAgICBzaXplX3QgbGVuZ3RoID0gMDsK
KyAgICBpZiAob3B0aW9uc0FycmF5KSB7CisgICAgICAgIEpTVmFsdWVSZWYgbGVuZ3RoVmFsdWUg
PSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIG9wdGlvbnNBcnJheSwgbGVuZ3RoUHJvcGVy
dHlOYW1lLmdldCgpLCAwKTsKKyAgICAgICAgaWYgKCFKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwg
bGVuZ3RoVmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBsZW5ndGgg
PSBzdGF0aWNfY2FzdDxzaXplX3Q+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1
ZSwgMCkpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4
KGNvbnRleHQsIG9wdGlvbnNBcnJheSwgaSwgMCk7CisgICAgICAgIGlmICghSlNWYWx1ZUlzU3Ry
aW5nKGNvbnRleHQsIHZhbHVlKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBvcHRpb25OYW1lKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdD
b3B5KGNvbnRleHQsIHZhbHVlLCAwKSk7CisKKyAgICAgICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcob3B0aW9uTmFtZS5nZXQoKSwgIkNhc2VJbnNlbnNpdGl2ZSIpKQorICAgICAg
ICAgICAgb3B0aW9ucyB8PSBXZWJDb3JlOjpDYXNlSW5zZW5zaXRpdmU7CisgICAgICAgIGVsc2Ug
aWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9uTmFtZS5nZXQoKSwgIkF0V29y
ZFN0YXJ0cyIpKQorICAgICAgICAgICAgb3B0aW9ucyB8PSBXZWJDb3JlOjpBdFdvcmRTdGFydHM7
CisgICAgICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9uTmFt
ZS5nZXQoKSwgIlRyZWF0TWVkaWFsQ2FwaXRhbEFzV29yZFN0YXJ0IikpCisgICAgICAgICAgICBv
cHRpb25zIHw9IFdlYkNvcmU6OlRyZWF0TWVkaWFsQ2FwaXRhbEFzV29yZFN0YXJ0OworICAgICAg
ICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG9wdGlvbk5hbWUuZ2V0KCks
ICJCYWNrd2FyZHMiKSkKKyAgICAgICAgICAgIG9wdGlvbnMgfD0gV2ViQ29yZTo6QmFja3dhcmRz
OworICAgICAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG9wdGlvbk5h
bWUuZ2V0KCksICJXcmFwQXJvdW5kIikpCisgICAgICAgICAgICBvcHRpb25zIHw9IFdlYkNvcmU6
OldyYXBBcm91bmQ7CisgICAgICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcob3B0aW9uTmFtZS5nZXQoKSwgIlN0YXJ0SW5TZWxlY3Rpb24iKSkKKyAgICAgICAgICAgIG9w
dGlvbnMgfD0gV2ViQ29yZTo6U3RhcnRJblNlbGVjdGlvbjsKKyAgICB9CisKKyAgICAvLyBPdXIg
bGF5b3V0IHRlc3RzIGFzc3VtZSBmaW5kIHdpbGwgd3JhcCBhbmQgaGlnaGxpZ2h0IGFsbCBtYXRj
aGVzLgorICAgIHJldHVybiBCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVlOjpjdXJy
ZW50SW5zdGFuY2UoKS0+cGFnZSgpLT5maW5kTmV4dFN0cmluZyhuYW1lU3RyLnV0ZjgoKS5kYXRh
KCksCisgICAgICAgICEob3B0aW9ucyAmIFdlYkNvcmU6OkJhY2t3YXJkcyksICEob3B0aW9ucyAm
IFdlYkNvcmU6OkNhc2VJbnNlbnNpdGl2ZSksIHRydWUgLyogd3JhcCAqLywgdHJ1ZSAvKiBoaWdo
bGlnaHRBbGxNYXRjaGVzICovKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVs
ZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIFVSTCkKK3sKKyAgICAvLyBGSVhN
RTogSW1wbGVtZW50LgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRWYWx1ZUZv
clVzZXIoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgbm9kZU9iamVjdCwgSlNTdHJp
bmdSZWYgdmFsdWUpCit7CisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGNvbnRleHQp
OworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQodG9KUyhleGVjLCBu
b2RlT2JqZWN0KSk7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm47CisgICAgV2Vi
Q29yZTo6SFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gZWxlbWVudC0+dG9JbnB1dEVs
ZW1lbnQoKTsKKyAgICBpZiAoIWlucHV0RWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aW5wdXRFbGVtZW50LT5zZXRWYWx1ZUZvclVzZXIoanNTdHJpbmdSZWZUb1dlYkNvcmVTdHJpbmco
dmFsdWUpKTsKK30KKworbG9uZyBsb25nIExheW91dFRlc3RDb250cm9sbGVyOjphcHBsaWNhdGlv
bkNhY2hlRGlza1VzYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIG9yaWdpbikKK3sKKyAgICAvLyBG
SVhNRTogSW1wbGVtZW50IHRvIHN1cHBvcnQgZ2V0dGluZyBkaXNrIHVzYWdlIGJ5IGFsbCBhcHBs
aWNhdGlvbiBjYWNoZXMgZm9yIGFuIG9yaWdpbi4KKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkQ2hyb21lSW5wdXRGaWVsZCgpCit7Cit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92ZUNocm9tZUlucHV0RmllbGQoKQoreworfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpmb2N1c1dlYlZpZXcoKQoreworfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRCYWNraW5nU2NhbGVGYWN0b3IoZG91YmxlKQoreworfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVjdChi
b29sKQoreworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzaW11bGF0ZURlc2t0b3BO
b3RpZmljYXRpb25DbGljayhKU1N0cmluZ1JlZiB0aXRsZSkKK3sKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6cmVzZXRQYWdlVmlzaWJpbGl0eSgpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UGFnZVZpc2liaWxpdHko
Y29uc3QgY2hhciopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoYm9vbCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZW5kV2ViSW50ZW50UmVzcG9uc2UoSlNTdHJpbmdSZWYpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsaXZlcldlYkludGVudChKU1N0
cmluZ1JlZiwgSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L1Rlc3RSdW5uZXJC
bGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2Jl
cnJ5L1Rlc3RSdW5uZXJCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTI1MzM1KQorKysgVG9vbHMv
RHVtcFJlbmRlclRyZWUvYmxhY2tiZXJyeS9UZXN0UnVubmVyQmxhY2tCZXJyeS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE3LDcgKzE3LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJUZXN0UnVubmVyLmgi
CiAKICNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCklu
ZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlRUZXN0UnVubmVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlRUZXN0UnVubmVyLmNw
cAkocmV2aXNpb24gMTI1MzM1KQkoZnJvbSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9M
YXlvdXRUZXN0Q29udHJvbGxlci5jcHA6MTI1MzM1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vRFJUVGVzdFJ1bm5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMzUw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF3ZWwgSGFqZGFuIChwaGFqZGFuLmpyQGNo
cm9taXVtLm9yZykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTGF5b3V0VGVzdENvbnRyb2xs
ZXIuaCIKKworI2luY2x1ZGUgIkRSVERldlRvb2xzQWdlbnQuaCIKKyNpbmNsdWRlICJNb2NrV2Vi
U3BlZWNoSW5wdXRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiTW9ja1dlYlNwZWVjaFJlY29nbml6
ZXIuaCIKKyNpbmNsdWRlICJUZXN0U2hlbGwuaCIKKyNpbmNsdWRlICJXZWJBbmltYXRpb25Db250
cm9sbGVyLmgiCisjaW5jbHVkZSAiV2ViQmluZGluZ3MuaCIKKyNpbmNsdWRlICJXZWJDb25zb2xl
TWVzc2FnZS5oIgorI2luY2x1ZGUgIldlYkRldmljZU9yaWVudGF0aW9uLmgiCisjaW5jbHVkZSAi
V2ViRGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrLmgiCisjaW5jbHVkZSAiV2ViRG9jdW1lbnQu
aCIKKyNpbmNsdWRlICJXZWJFbGVtZW50LmgiCisjaW5jbHVkZSAiV2ViRmluZE9wdGlvbnMuaCIK
KyNpbmNsdWRlICJXZWJGcmFtZS5oIgorI2luY2x1ZGUgIldlYkdlb2xvY2F0aW9uQ2xpZW50TW9j
ay5oIgorI2luY2x1ZGUgIldlYklEQkZhY3RvcnkuaCIKKyNpbmNsdWRlICJXZWJJbnB1dEVsZW1l
bnQuaCIKKyNpbmNsdWRlICJXZWJJbnRlbnQuaCIKKyNpbmNsdWRlICJXZWJJbnRlbnRSZXF1ZXN0
LmgiCisjaW5jbHVkZSAiV2ViS2l0LmgiCisjaW5jbHVkZSAiV2ViTm90aWZpY2F0aW9uUHJlc2Vu
dGVyLmgiCisjaW5jbHVkZSAiV2ViUGVybWlzc2lvbnMuaCIKKyNpbmNsdWRlICJXZWJQcmludFBh
cmFtcy5oIgorI2luY2x1ZGUgIldlYlNjcmlwdFNvdXJjZS5oIgorI2luY2x1ZGUgIldlYlNlY3Vy
aXR5UG9saWN5LmgiCisjaW5jbHVkZSAiV2ViU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJXZWJTdXJy
b3VuZGluZ1RleHQuaCIKKyNpbmNsdWRlICJXZWJWaWV3LmgiCisjaW5jbHVkZSAiV2ViVmlld0hv
c3QuaCIKKyNpbmNsdWRlICJXZWJXb3JrZXJJbmZvLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2Vi
RGF0YS5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgor
I2luY2x1ZGUgInBsYXRmb3JtL1dlYlNpemUuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJVUkwu
aCIKKyNpbmNsdWRlICJ2OC9pbmNsdWRlL3Y4LmgiCisjaW5jbHVkZSAid2Via2l0L3N1cHBvcnQv
d2Via2l0X3N1cHBvcnQuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8Y2N0eXBl
PgorI2luY2x1ZGUgPGNsb2NhbGU+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxsaW1p
dHM+CisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworI2lmIE9TKExJTlVYKSB8fCBPUyhBTkRS
T0lEKQorI2luY2x1ZGUgImxpbnV4L1dlYkZvbnRSZW5kZXJpbmcuaCIKKyNlbmRpZgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cit1c2luZyBuYW1l
c3BhY2Ugc3RkOworCitjbGFzcyBFbXB0eVdlYkRlbGl2ZXJlZEludGVudENsaWVudCA6IHB1Ymxp
YyBXZWJLaXQ6OldlYkRlbGl2ZXJlZEludGVudENsaWVudCB7CitwdWJsaWM6CisgICAgRW1wdHlX
ZWJEZWxpdmVyZWRJbnRlbnRDbGllbnQoKSB7IH0KKyAgICB+RW1wdHlXZWJEZWxpdmVyZWRJbnRl
bnRDbGllbnQoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBwb3N0UmVzdWx0KGNvbnN0IFdlYlNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZSYgZGF0YSkgY29uc3QgeyB9CisgICAgdmlydHVhbCB2b2lkIHBv
c3RGYWlsdXJlKGNvbnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYgZGF0YSkgY29uc3QgeyB9
CisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKSB7IH0KK307CisKK0xheW91dFRlc3RDb250cm9s
bGVyOjpMYXlvdXRUZXN0Q29udHJvbGxlcihUZXN0U2hlbGwqIHNoZWxsKQorICAgIDogbV9zaGVs
bChzaGVsbCkKKyAgICAsIG1fY2xvc2VSZW1haW5pbmdXaW5kb3dzKGZhbHNlKQorICAgICwgbV9k
ZWZlck1haW5SZXNvdXJjZURhdGFMb2FkKGZhbHNlKQorICAgICwgbV9zaG93RGVidWdMYXllclRy
ZWUoZmFsc2UpCisgICAgLCBtX3dvcmtRdWV1ZSh0aGlzKQorICAgICwgbV9pbnRlbnRDbGllbnQo
YWRvcHRQdHIobmV3IEVtcHR5V2ViRGVsaXZlcmVkSW50ZW50Q2xpZW50KSkKKyAgICAsIG1fc2hv
dWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQoZmFsc2UpCit7CisKKyAgICAv
LyBJbml0aWFsaXplIHRoZSBtYXAgdGhhdCBhc3NvY2lhdGVzIG1ldGhvZHMgb2YgdGhpcyBjbGFz
cyB3aXRoIHRoZSBuYW1lcworICAgIC8vIHRoZXkgd2lsbCB1c2Ugd2hlbiBjYWxsZWQgYnkgSmF2
YVNjcmlwdC4gVGhlIGFjdHVhbCBiaW5kaW5nIG9mIHRob3NlCisgICAgLy8gbmFtZXMgdG8gdGhl
aXIgbWV0aG9kcyB3aWxsIGJlIGRvbmUgYnkgY2FsbGluZyBiaW5kVG9KYXZhU2NyaXB0KCkgKGRl
ZmluZWQKKyAgICAvLyBieSBDcHBCb3VuZENsYXNzLCB0aGUgcGFyZW50IHRvIExheW91dFRlc3RD
b250cm9sbGVyKS4KKyAgICBiaW5kTWV0aG9kKCJhZGRGaWxlVG9QYXN0ZWJvYXJkT25EcmFnIiwg
JkxheW91dFRlc3RDb250cm9sbGVyOjphZGRGaWxlVG9QYXN0ZWJvYXJkT25EcmFnKTsKKyNpZiBF
TkFCTEUoSU5QVVRfU1BFRUNIKQorICAgIGJpbmRNZXRob2QoImFkZE1vY2tTcGVlY2hJbnB1dFJl
c3VsdCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkTW9ja1NwZWVjaElucHV0UmVzdWx0KTsK
KyAgICBiaW5kTWV0aG9kKCJzZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVjdCIsICZMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0TW9ja1NwZWVjaElucHV0RHVtcFJlY3QpOworI2VuZGlmCisjaWYgRU5B
QkxFKFNDUklQVEVEX1NQRUVDSCkKKyAgICBiaW5kTWV0aG9kKCJhZGRNb2NrU3BlZWNoUmVjb2du
aXRpb25SZXN1bHQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE1vY2tTcGVlY2hSZWNvZ25p
dGlvblJlc3VsdCk7CisgICAgYmluZE1ldGhvZCgic2V0TW9ja1NwZWVjaFJlY29nbml0aW9uRXJy
b3IiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tTcGVlY2hSZWNvZ25pdGlvbkVycm9y
KTsKKyAgICBiaW5kTWV0aG9kKCJ3YXNNb2NrU3BlZWNoUmVjb2duaXRpb25BYm9ydGVkIiwgJkxh
eW91dFRlc3RDb250cm9sbGVyOjp3YXNNb2NrU3BlZWNoUmVjb2duaXRpb25BYm9ydGVkKTsKKyNl
bmRpZgorICAgIGJpbmRNZXRob2QoImFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5IiwgJkxh
eW91dFRlc3RDb250cm9sbGVyOjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSk7CisgICAg
YmluZE1ldGhvZCgiYWRkVXNlclNjcmlwdCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkVXNl
clNjcmlwdCk7CisgICAgYmluZE1ldGhvZCgiYWRkVXNlclN0eWxlU2hlZXQiLCAmTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmFkZFVzZXJTdHlsZVNoZWV0KTsKKyAgICBiaW5kTWV0aG9kKCJjbGVhckFs
bERhdGFiYXNlcyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxEYXRhYmFzZXMpOwor
ICAgIGJpbmRNZXRob2QoImNsb3NlV2ViSW5zcGVjdG9yIiwgJkxheW91dFRlc3RDb250cm9sbGVy
OjpjbG9zZVdlYkluc3BlY3Rvcik7CisjaWYgRU5BQkxFKFBPSU5URVJfTE9DSykKKyAgICBiaW5k
TWV0aG9kKCJkaWRMb3NlUG9pbnRlckxvY2siLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpZExv
c2VQb2ludGVyTG9jayk7CisjZW5kaWYKKyAgICBiaW5kTWV0aG9kKCJkaXNhYmxlQXV0b1Jlc2l6
ZU1vZGUiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc2FibGVBdXRvUmVzaXplTW9kZSk7Cisg
ICAgYmluZE1ldGhvZCgiZGlzYWJsZUltYWdlTG9hZGluZyIsICZMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZGlzYWJsZUltYWdlTG9hZGluZyk7CisgICAgYmluZE1ldGhvZCgiZGlzcGxheSIsICZMYXlv
dXRUZXN0Q29udHJvbGxlcjo6ZGlzcGxheSk7CisgICAgYmluZE1ldGhvZCgiZGlzcGxheUludmFs
aWRhdGVkUmVnaW9uIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpkaXNwbGF5SW52YWxpZGF0ZWRS
ZWdpb24pOworICAgIGJpbmRNZXRob2QoImR1bXBBc1RleHQiLCAmTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmR1bXBBc1RleHQpOworICAgIGJpbmRNZXRob2QoImR1bXBCYWNrRm9yd2FyZExpc3QiLCAm
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBCYWNrRm9yd2FyZExpc3QpOworICAgIGJpbmRNZXRo
b2QoImR1bXBDaGlsZEZyYW1lc0FzVGV4dCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcENo
aWxkRnJhbWVzQXNUZXh0KTsKKyAgICBiaW5kTWV0aG9kKCJkdW1wQ2hpbGRGcmFtZVNjcm9sbFBv
c2l0aW9ucyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcENoaWxkRnJhbWVTY3JvbGxQb3Np
dGlvbnMpOworICAgIGJpbmRNZXRob2QoImR1bXBEYXRhYmFzZUNhbGxiYWNrcyIsICZMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6ZHVtcERhdGFiYXNlQ2FsbGJhY2tzKTsKKyAgICBiaW5kTWV0aG9kKCJk
dW1wRWRpdGluZ0NhbGxiYWNrcyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcEVkaXRpbmdD
YWxsYmFja3MpOworICAgIGJpbmRNZXRob2QoImR1bXBGcmFtZUxvYWRDYWxsYmFja3MiLCAmTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBGcmFtZUxvYWRDYWxsYmFja3MpOworICAgIGJpbmRNZXRo
b2QoImR1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2siLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmR1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2spOworICAgIGJpbmRNZXRob2QoImR1bXBVc2Vy
R2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpkdW1w
VXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrcyk7CisgICAgYmluZE1ldGhvZCgiZHVtcFJl
c291cmNlTG9hZENhbGxiYWNrcyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcFJlc291cmNl
TG9hZENhbGxiYWNrcyk7CisgICAgYmluZE1ldGhvZCgiZHVtcFJlc291cmNlUmVzcG9uc2VNSU1F
VHlwZXMiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5
cGVzKTsKKyAgICBiaW5kTWV0aG9kKCJkdW1wU2VsZWN0aW9uUmVjdCIsICZMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6ZHVtcFNlbGVjdGlvblJlY3QpOworICAgIGJpbmRNZXRob2QoImR1bXBTdGF0dXND
YWxsYmFja3MiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBXaW5kb3dTdGF0dXNDaGFuZ2Vz
KTsKKyAgICBiaW5kTWV0aG9kKCJkdW1wVGl0bGVDaGFuZ2VzIiwgJkxheW91dFRlc3RDb250cm9s
bGVyOjpkdW1wVGl0bGVDaGFuZ2VzKTsKKyAgICBiaW5kTWV0aG9kKCJkdW1wUGVybWlzc2lvbkNs
aWVudENhbGxiYWNrcyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcFBlcm1pc3Npb25DbGll
bnRDYWxsYmFja3MpOworICAgIGJpbmRNZXRob2QoImR1bXBDcmVhdGVWaWV3IiwgJkxheW91dFRl
c3RDb250cm9sbGVyOjpkdW1wQ3JlYXRlVmlldyk7CisgICAgYmluZE1ldGhvZCgiZWxlbWVudERv
ZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpl
bGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQpOworICAgIGJpbmRNZXRob2Qo
ImVuYWJsZUF1dG9SZXNpemVNb2RlIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjplbmFibGVBdXRv
UmVzaXplTW9kZSk7CisgICAgYmluZE1ldGhvZCgiZXZhbHVhdGVJbldlYkluc3BlY3RvciIsICZM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcik7CisgICAgYmluZE1l
dGhvZCgiZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQiLCAmTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKTsKKyAgICBiaW5kTWV0aG9kKCJldmFs
dWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlIiwgJkxheW91dFRlc3RDb250
cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKTsKKyAg
ICBiaW5kTWV0aG9kKCJzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4iLCAmTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbik7CisgICAgYmluZE1l
dGhvZCgiZXhlY0NvbW1hbmQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV4ZWNDb21tYW5kKTsK
KyAgICBiaW5kTWV0aG9kKCJmb3JjZVJlZFNlbGVjdGlvbkNvbG9ycyIsICZMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6Zm9yY2VSZWRTZWxlY3Rpb25Db2xvcnMpOworI2lmIEVOQUJMRShOT1RJRklDQVRJ
T05TKQorICAgIGJpbmRNZXRob2QoImdyYW50RGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb24i
LCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmdyYW50RGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Np
b24pOworI2VuZGlmCisgICAgYmluZE1ldGhvZCgiZmluZFN0cmluZyIsICZMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6ZmluZFN0cmluZyk7CisgICAgYmluZE1ldGhvZCgiaXNDb21tYW5kRW5hYmxlZCIs
ICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6aXNDb21tYW5kRW5hYmxlZCk7CisgICAgYmluZE1ldGhv
ZCgiaGFzQ3VzdG9tUGFnZVNpemVTdHlsZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6aGFzQ3Vz
dG9tUGFnZVNpemVTdHlsZSk7CisgICAgYmluZE1ldGhvZCgibGF5ZXJUcmVlQXNUZXh0IiwgJkxh
eW91dFRlc3RDb250cm9sbGVyOjpsYXllclRyZWVBc1RleHQpOworICAgIGJpbmRNZXRob2QoImxv
c2VDb21wb3NpdG9yQ29udGV4dCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6bG9zZUNvbXBvc2l0
b3JDb250ZXh0KTsKKyAgICBiaW5kTWV0aG9kKCJtYXJrZXJUZXh0Rm9yTGlzdEl0ZW0iLCAmTGF5
b3V0VGVzdENvbnRyb2xsZXI6Om1hcmtlclRleHRGb3JMaXN0SXRlbSk7CisgICAgYmluZE1ldGhv
ZCgibm90aWZ5RG9uZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6bm90aWZ5RG9uZSk7CisgICAg
YmluZE1ldGhvZCgibnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zIiwgJkxheW91dFRlc3RDb250cm9s
bGVyOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMpOworICAgIGJpbmRNZXRob2QoIm51bWJlck9m
UGFnZXMiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGFnZXMpOworICAgIGJpbmRN
ZXRob2QoIm51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzIiwgJkxh
eW91dFRlc3RDb250cm9sbGVyOjogbnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9u
UmVxdWVzdHMpOworICAgIGJpbmRNZXRob2QoIm9iakNJZGVudGl0eUlzRXF1YWwiLCAmTGF5b3V0
VGVzdENvbnRyb2xsZXI6Om9iakNJZGVudGl0eUlzRXF1YWwpOworICAgIGJpbmRNZXRob2QoIm92
ZXJyaWRlUHJlZmVyZW5jZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3ZlcnJpZGVQcmVmZXJl
bmNlKTsKKyAgICBiaW5kTWV0aG9kKCJwYWdlUHJvcGVydHkiLCAmTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnBhZ2VQcm9wZXJ0eSk7CisgICAgYmluZE1ldGhvZCgicGFnZVNpemVBbmRNYXJnaW5zSW5Q
aXhlbHMiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxz
KTsKKyAgICBiaW5kTWV0aG9kKCJwYXRoVG9Mb2NhbFJlc291cmNlIiwgJkxheW91dFRlc3RDb250
cm9sbGVyOjpwYXRoVG9Mb2NhbFJlc291cmNlKTsKKyAgICBiaW5kTWV0aG9kKCJwYXVzZUFuaW1h
dGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF1c2VB
bmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQpOworICAgIGJpbmRNZXRob2QoInBhdXNlVHJh
bnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF1
c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKTsKKyAgICBiaW5kTWV0aG9kKCJxdWV1
ZUJhY2tOYXZpZ2F0aW9uIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUJhY2tOYXZpZ2F0
aW9uKTsKKyAgICBiaW5kTWV0aG9kKCJxdWV1ZUZvcndhcmROYXZpZ2F0aW9uIiwgJkxheW91dFRl
c3RDb250cm9sbGVyOjpxdWV1ZUZvcndhcmROYXZpZ2F0aW9uKTsKKyAgICBiaW5kTWV0aG9kKCJx
dWV1ZUxvYWRpbmdTY3JpcHQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVlTG9hZGluZ1Nj
cmlwdCk7CisgICAgYmluZE1ldGhvZCgicXVldWVMb2FkIiwgJkxheW91dFRlc3RDb250cm9sbGVy
OjpxdWV1ZUxvYWQpOworICAgIGJpbmRNZXRob2QoInF1ZXVlTG9hZEhUTUxTdHJpbmciLCAmTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVlTG9hZEhUTUxTdHJpbmcpOworICAgIGJpbmRNZXRob2Qo
InF1ZXVlTm9uTG9hZGluZ1NjcmlwdCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVOb25M
b2FkaW5nU2NyaXB0KTsKKyAgICBiaW5kTWV0aG9kKCJxdWV1ZVJlbG9hZCIsICZMYXlvdXRUZXN0
Q29udHJvbGxlcjo6cXVldWVSZWxvYWQpOworICAgIGJpbmRNZXRob2QoInJlbW92ZU9yaWdpbkFj
Y2Vzc1doaXRlbGlzdEVudHJ5IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpyZW1vdmVPcmlnaW5B
Y2Nlc3NXaGl0ZWxpc3RFbnRyeSk7CisgICAgYmluZE1ldGhvZCgicmVwYWludFN3ZWVwSG9yaXpv
bnRhbGx5IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpyZXBhaW50U3dlZXBIb3Jpem9udGFsbHkp
OworICAgIGJpbmRNZXRob2QoInJlc2V0UGFnZVZpc2liaWxpdHkiLCAmTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnJlc2V0UGFnZVZpc2liaWxpdHkpOworICAgIGJpbmRNZXRob2QoInNldEFjY2VwdHNF
ZGl0aW5nIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRBY2NlcHRzRWRpdGluZyk7CisgICAg
YmluZE1ldGhvZCgic2V0QWxsb3dEaXNwbGF5T2ZJbnNlY3VyZUNvbnRlbnQiLCAmTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldEFsbG93RGlzcGxheU9mSW5zZWN1cmVDb250ZW50KTsKKyAgICBiaW5k
TWV0aG9kKCJzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMiLCAmTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyk7CisgICAgYmluZE1ldGhvZCgi
c2V0QWxsb3dSdW5uaW5nT2ZJbnNlY3VyZUNvbnRlbnQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldEFsbG93UnVubmluZ09mSW5zZWN1cmVDb250ZW50KTsKKyAgICBiaW5kTWV0aG9kKCJzZXRB
bGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMpOworICAgIGJpbmRNZXRob2QoInNl
dEFsd2F5c0FjY2VwdENvb2tpZXMiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsd2F5c0Fj
Y2VwdENvb2tpZXMpOworICAgIGJpbmRNZXRob2QoInNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFi
bGVkIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxl
ZCk7CisgICAgYmluZE1ldGhvZCgic2V0QXV0b2ZpbGxlZCIsICZMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0QXV0b2ZpbGxlZCk7CisgICAgYmluZE1ldGhvZCgic2V0Q2FuT3BlbldpbmRvd3MiLCAm
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldENhbk9wZW5XaW5kb3dzKTsKKyAgICBiaW5kTWV0aG9k
KCJzZXRDbG9zZVJlbWFpbmluZ1dpbmRvd3NXaGVuQ29tcGxldGUiLCAmTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldENsb3NlUmVtYWluaW5nV2luZG93c1doZW5Db21wbGV0ZSk7CisgICAgYmluZE1l
dGhvZCgic2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dEN1c3RvbVBvbGljeURlbGVnYXRlKTsKKyAgICBiaW5kTWV0aG9kKCJzZXREYXRhYmFzZVF1b3Rh
IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXREYXRhYmFzZVF1b3RhKTsKKyAgICBiaW5kTWV0
aG9kKCJzZXREZWZlck1haW5SZXNvdXJjZURhdGFMb2FkIiwgJkxheW91dFRlc3RDb250cm9sbGVy
OjpzZXREZWZlck1haW5SZXNvdXJjZURhdGFMb2FkKTsKKyAgICBiaW5kTWV0aG9kKCJzZXREb21h
aW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lIiwgJkxheW91dFRlc3RDb250cm9sbGVy
OjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKTsKKyAgICBiaW5kTWV0
aG9kKCJzZXRBdWRpb0RhdGEiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1ZGlvRGF0YSk7
CisgICAgYmluZE1ldGhvZCgic2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uIiwgJkxheW91dFRlc3RD
b250cm9sbGVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24pOworICAgIGJpbmRNZXRob2QoInNl
dEljb25EYXRhYmFzZUVuYWJsZWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEljb25EYXRh
YmFzZUVuYWJsZWQpOworICAgIGJpbmRNZXRob2QoInNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlw
Ym9hcmQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlw
Ym9hcmQpOworICAgIGJpbmRNZXRob2QoInNldE1pbmltdW1UaW1lckludGVydmFsIiwgJkxheW91
dFRlc3RDb250cm9sbGVyOjpzZXRNaW5pbXVtVGltZXJJbnRlcnZhbCk7CisgICAgYmluZE1ldGhv
ZCgic2V0TW9ja0RldmljZU9yaWVudGF0aW9uIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRN
b2NrRGV2aWNlT3JpZW50YXRpb24pOworICAgIGJpbmRNZXRob2QoInNldE1vY2tHZW9sb2NhdGlv
bkVycm9yIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25FcnJvcik7
CisgICAgYmluZE1ldGhvZCgic2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24iLCAmTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKTsKKyAgICBiaW5kTWV0aG9k
KCJzZXRQYWdlVmlzaWJpbGl0eSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UGFnZVZpc2li
aWxpdHkpOworICAgIGJpbmRNZXRob2QoInNldFBsdWdpbnNFbmFibGVkIiwgJkxheW91dFRlc3RD
b250cm9sbGVyOjpzZXRQbHVnaW5zRW5hYmxlZCk7CisjaWYgRU5BQkxFKFBPSU5URVJfTE9DSykK
KyAgICBiaW5kTWV0aG9kKCJzZXRQb2ludGVyTG9ja1dpbGxGYWlsQXN5bmNocm9ub3VzbHkiLCAm
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBvaW50ZXJMb2NrV2lsbEZhaWxBc3luY2hyb25vdXNs
eSk7CisgICAgYmluZE1ldGhvZCgic2V0UG9pbnRlckxvY2tXaWxsRmFpbFN5bmNocm9ub3VzbHki
LCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBvaW50ZXJMb2NrV2lsbEZhaWxTeW5jaHJvbm91
c2x5KTsKKyNlbmRpZgorICAgIGJpbmRNZXRob2QoInNldFBvcHVwQmxvY2tpbmdFbmFibGVkIiwg
JkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRQb3B1cEJsb2NraW5nRW5hYmxlZCk7CisgICAgYmlu
ZE1ldGhvZCgic2V0UE9TSVhMb2NhbGUiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBPU0lY
TG9jYWxlKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRQcmludGluZyIsICZMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0UHJpbnRpbmcpOworICAgIGJpbmRNZXRob2QoInNldFNjcm9sbGJhclBvbGljeSIs
ICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2Nyb2xsYmFyUG9saWN5KTsKKyAgICBiaW5kTWV0
aG9kKCJzZXRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkIiwgJkxheW91dFRlc3RDb250
cm9sbGVyOjpzZXRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKTsKKyAgICBiaW5kTWV0
aG9kKCJzZXRUZXh0U3VicGl4ZWxQb3NpdGlvbmluZyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0VGV4dFN1YnBpeGVsUG9zaXRpb25pbmcpOworICAgIGJpbmRNZXRob2QoInNldEJhY2tpbmdT
Y2FsZUZhY3RvciIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QmFja2luZ1NjYWxlRmFjdG9y
KTsKKyAgICBiaW5kTWV0aG9kKCJzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQiLCAmTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCk7CisgICAgYmluZE1l
dGhvZCgic2V0U3RvcFByb3Zpc2lvbmFsRnJhbWVMb2FkcyIsICZMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0U3RvcFByb3Zpc2lvbmFsRnJhbWVMb2Fkcyk7CisgICAgYmluZE1ldGhvZCgic2V0VGFi
S2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRUYWJL
ZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMpOworICAgIGJpbmRNZXRob2QoInNldFVzZXJTdHlsZVNo
ZWV0RW5hYmxlZCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlclN0eWxlU2hlZXRFbmFi
bGVkKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uIiwgJkxheW91
dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKTsKKyAgICBiaW5kTWV0
aG9kKCJzZXRWYWx1ZUZvclVzZXIiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFZhbHVlRm9y
VXNlcik7CisgICAgYmluZE1ldGhvZCgic2V0V2lsbFNlbmRSZXF1ZXN0Q2xlYXJIZWFkZXIiLCAm
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdpbGxTZW5kUmVxdWVzdENsZWFySGVhZGVyKTsKKyAg
ICBiaW5kTWV0aG9kKCJzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbCIsICZMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwpOworICAgIGJpbmRNZXRo
b2QoInNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVjdCIsICZMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0KTsKKyAg
ICBiaW5kTWV0aG9kKCJzZXRXaW5kb3dJc0tleSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
V2luZG93SXNLZXkpOworICAgIGJpbmRNZXRob2QoInNldFhTU0F1ZGl0b3JFbmFibGVkIiwgJkxh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZCk7CisgICAgYmluZE1ldGhv
ZCgic2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQiLCAmTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKTsKKyAgICBiaW5kTWV0
aG9kKCJzaG93V2ViSW5zcGVjdG9yIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzaG93V2ViSW5z
cGVjdG9yKTsKKyNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKKyAgICBiaW5kTWV0aG9kKCJzaW11
bGF0ZURlc2t0b3BOb3RpZmljYXRpb25DbGljayIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2lt
dWxhdGVEZXNrdG9wTm90aWZpY2F0aW9uQ2xpY2spOworI2VuZGlmCisgICAgYmluZE1ldGhvZCgi
c3RhcnRTcGVlY2hJbnB1dCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhcnRTcGVlY2hJbnB1
dCk7CisgICAgYmluZE1ldGhvZCgidGVzdFJlcGFpbnQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnRlc3RSZXBhaW50KTsKKyAgICBiaW5kTWV0aG9kKCJ3YWl0Rm9yUG9saWN5RGVsZWdhdGUiLCAm
TGF5b3V0VGVzdENvbnRyb2xsZXI6OndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSk7CisgICAgYmluZE1l
dGhvZCgid2FpdFVudGlsRG9uZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2FpdFVudGlsRG9u
ZSk7CisgICAgYmluZE1ldGhvZCgid2luZG93Q291bnQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6
OndpbmRvd0NvdW50KTsKKyAgICBiaW5kTWV0aG9kKCJzZXRUZXh0RGlyZWN0aW9uIiwgJkxheW91
dFRlc3RDb250cm9sbGVyOjpzZXRUZXh0RGlyZWN0aW9uKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRJ
bWFnZXNBbGxvd2VkIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRJbWFnZXNBbGxvd2VkKTsK
KyAgICBiaW5kTWV0aG9kKCJzZXRTY3JpcHRzQWxsb3dlZCIsICZMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0U2NyaXB0c0FsbG93ZWQpOworICAgIGJpbmRNZXRob2QoInNldFN0b3JhZ2VBbGxvd2Vk
IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRTdG9yYWdlQWxsb3dlZCk7CisgICAgYmluZE1l
dGhvZCgic2V0UGx1Z2luc0FsbG93ZWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBsdWdp
bnNBbGxvd2VkKTsKKworICAgIC8vIFRoZSBmb2xsb3dpbmcgYXJlIHN0dWJzLgorICAgIGJpbmRN
ZXRob2QoImFib3J0TW9kYWwiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFib3J0TW9kYWwpOwor
ICAgIGJpbmRNZXRob2QoImFjY2Vzc1N0b3JlZFdlYlNjcmlwdE9iamVjdCIsICZMYXlvdXRUZXN0
Q29udHJvbGxlcjo6YWNjZXNzU3RvcmVkV2ViU2NyaXB0T2JqZWN0KTsKKyAgICBiaW5kTWV0aG9k
KCJhZGREaXNhbGxvd2VkVVJMIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjphZGREaXNhbGxvd2Vk
VVJMKTsKKyAgICBiaW5kTWV0aG9kKCJhcHBsaWNhdGlvbkNhY2hlRGlza1VzYWdlRm9yT3JpZ2lu
IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjphcHBsaWNhdGlvbkNhY2hlRGlza1VzYWdlRm9yT3Jp
Z2luKTsKKyAgICBiaW5kTWV0aG9kKCJjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXciLCAmTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmNhbGxTaG91bGRDbG9zZU9uV2ViVmlldyk7CisgICAgYmluZE1ldGhv
ZCgiY2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xl
YXJBbGxBcHBsaWNhdGlvbkNhY2hlcyk7CisgICAgYmluZE1ldGhvZCgiY2xlYXJBcHBsaWNhdGlv
bkNhY2hlRm9yT3JpZ2luIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFwcGxpY2F0aW9u
Q2FjaGVGb3JPcmlnaW4pOworICAgIGJpbmRNZXRob2QoImNsZWFyQmFja0ZvcndhcmRMaXN0Iiwg
JkxheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckJhY2tGb3J3YXJkTGlzdCk7CisgICAgYmluZE1l
dGhvZCgiZHVtcEFzV2ViQXJjaGl2ZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcEFzV2Vi
QXJjaGl2ZSk7CisgICAgYmluZE1ldGhvZCgia2VlcFdlYkhpc3RvcnkiLCAmTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmtlZXBXZWJIaXN0b3J5KTsKKyAgICBiaW5kTWV0aG9kKCJvYmpDQ2xhc3NOYW1l
T2YiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9iakNDbGFzc05hbWVPZik7CisgICAgYmluZE1l
dGhvZCgic2V0QXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhIiwgJkxheW91dFRlc3RDb250cm9s
bGVyOjpzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEpOworICAgIGJpbmRNZXRob2QoInNl
dENhbGxDbG9zZU9uV2ViVmlld3MiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldENhbGxDbG9z
ZU9uV2ViVmlld3MpOworICAgIGJpbmRNZXRob2QoInNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25k
ZXIiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25kZXIp
OworICAgIGJpbmRNZXRob2QoInNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQiLCAmTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQpOworICAgIGJpbmRNZXRob2Qo
InNldFVzZURhc2hib2FyZENvbXBhdGliaWxpdHlNb2RlIiwgJkxheW91dFRlc3RDb250cm9sbGVy
OjpzZXRVc2VEYXNoYm9hcmRDb21wYXRpYmlsaXR5TW9kZSk7CisgICAgYmluZE1ldGhvZCgic3Rv
cmVXZWJTY3JpcHRPYmplY3QiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0b3JlV2ViU2NyaXB0
T2JqZWN0KTsKKyAgICBiaW5kTWV0aG9kKCJkZWxldGVBbGxMb2NhbFN0b3JhZ2UiLCAmTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUFsbExvY2FsU3RvcmFnZSk7CisgICAgYmluZE1ldGhvZCgi
bG9jYWxTdG9yYWdlRGlza1VzYWdlRm9yT3JpZ2luIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjps
b2NhbFN0b3JhZ2VEaXNrVXNhZ2VGb3JPcmlnaW4pOworICAgIGJpbmRNZXRob2QoIm9yaWdpbnNX
aXRoTG9jYWxTdG9yYWdlIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aExvY2Fs
U3RvcmFnZSk7CisgICAgYmluZE1ldGhvZCgiZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luIiwg
JkxheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4pOworICAg
IGJpbmRNZXRob2QoIm9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMiLCAmTGF5b3V0
VGVzdENvbnRyb2xsZXI6Om9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMpOworICAg
IGJpbmRNZXRob2QoInN5bmNMb2NhbFN0b3JhZ2UiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN5
bmNMb2NhbFN0b3JhZ2UpOworICAgIGJpbmRNZXRob2QoInNldFNob3VsZFN0YXlPblBhZ2VBZnRl
ckhhbmRsaW5nQmVmb3JlVW5sb2FkIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRTaG91bGRT
dGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZCk7CisgICAgYmluZE1ldGhvZCgiZW5h
YmxlRml4ZWRMYXlvdXRNb2RlIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjplbmFibGVGaXhlZExh
eW91dE1vZGUpOworICAgIGJpbmRNZXRob2QoInNldEZpeGVkTGF5b3V0U2l6ZSIsICZMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0Rml4ZWRMYXlvdXRTaXplKTsKKyAgICBiaW5kTWV0aG9kKCJzZWxl
Y3Rpb25Bc01hcmt1cCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2VsZWN0aW9uQXNNYXJrdXAp
OworICAgIGJpbmRNZXRob2QoInNldEhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvciIsICZMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0SGFzQ3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yKTsKKyAgICBi
aW5kTWV0aG9kKCJ0ZXh0U3Vycm91bmRpbmdOb2RlIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjp0
ZXh0U3Vycm91bmRpbmdOb2RlKTsKKworICAgIC8vIFRoZSBmYWxsYmFjayBtZXRob2QgaXMgY2Fs
bGVkIHdoZW4gYW4gdW5rbm93biBtZXRob2QgaXMgaW52b2tlZC4KKyAgICBiaW5kRmFsbGJhY2tN
ZXRob2QoJkxheW91dFRlc3RDb250cm9sbGVyOjpmYWxsYmFja01ldGhvZCk7CisKKyAgICAvLyBT
aGFyZWQgcHJvcGVydGllcy4KKyAgICAvLyBnbG9iYWxGbGFnIGlzIHVzZWQgYnkgYSBudW1iZXIg
b2YgbGF5b3V0IHRlc3RzIGluCisgICAgLy8gTGF5b3V0VGVzdHNcaHR0cFx0ZXN0c1xzZWN1cml0
eVxkYXRhVVJMLgorICAgIGJpbmRQcm9wZXJ0eSgiZ2xvYmFsRmxhZyIsICZtX2dsb2JhbEZsYWcp
OworICAgIC8vIHdlYkhpc3RvcnlJdGVtQ291bnQgaXMgdXNlZCBieSB0ZXN0cyBpbiBMYXlvdXRU
ZXN0c1xodHRwXHRlc3RzXGhpc3RvcnkKKyAgICBiaW5kUHJvcGVydHkoIndlYkhpc3RvcnlJdGVt
Q291bnQiLCAmbV93ZWJIaXN0b3J5SXRlbUNvdW50KTsKKyAgICBiaW5kUHJvcGVydHkoInRpdGxl
VGV4dERpcmVjdGlvbiIsICZtX3RpdGxlVGV4dERpcmVjdGlvbik7CisgICAgYmluZFByb3BlcnR5
KCJwbGF0Zm9ybU5hbWUiLCAmbV9wbGF0Zm9ybU5hbWUpOworICAgIGJpbmRQcm9wZXJ0eSgiaW50
ZXJjZXB0UG9zdE1lc3NhZ2UiLCAmbV9pbnRlcmNlcHRQb3N0TWVzc2FnZSk7CisgICAgYmluZFBy
b3BlcnR5KCJ3b3JrZXJUaHJlYWRDb3VudCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6d29ya2Vy
VGhyZWFkQ291bnQpOworICAgIGJpbmRNZXRob2QoInNlbmRXZWJJbnRlbnRSZXNwb25zZSIsICZM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2VuZFdlYkludGVudFJlc3BvbnNlKTsKKyAgICBiaW5kTWV0
aG9kKCJkZWxpdmVyV2ViSW50ZW50IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpkZWxpdmVyV2Vi
SW50ZW50KTsKK30KKworTGF5b3V0VGVzdENvbnRyb2xsZXI6On5MYXlvdXRUZXN0Q29udHJvbGxl
cigpCit7Cit9CisKK0xheW91dFRlc3RDb250cm9sbGVyOjpXb3JrUXVldWU6On5Xb3JrUXVldWUo
KQoreworICAgIHJlc2V0KCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OldvcmtR
dWV1ZTo6cHJvY2Vzc1dvcmtTb29uKCkKK3sKKyAgICBpZiAobV9jb250cm9sbGVyLT5tX3NoZWxs
LT53ZWJWaWV3SG9zdCgpLT50b3BMb2FkaW5nRnJhbWUoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKCFtX3F1ZXVlLmlzRW1wdHkoKSkgeworICAgICAgICAvLyBXZSBkZWxheSBwcm9jZXNz
aW5nIHF1ZXVlZCB3b3JrIHRvIGF2b2lkIHJlY3Vyc2lvbiBwcm9ibGVtcy4KKyAgICAgICAgcG9z
dFRhc2sobmV3IFdvcmtRdWV1ZVRhc2sodGhpcykpOworICAgIH0gZWxzZSBpZiAoIW1fY29udHJv
bGxlci0+bV93YWl0VW50aWxEb25lKQorICAgICAgICBtX2NvbnRyb2xsZXItPm1fc2hlbGwtPnRl
c3RGaW5pc2hlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpXb3JrUXVldWU6
OnByb2Nlc3NXb3JrKCkKK3sKKyAgICBUZXN0U2hlbGwqIHNoZWxsID0gbV9jb250cm9sbGVyLT5t
X3NoZWxsOworICAgIC8vIFF1aXQgZG9pbmcgd29yayBvbmNlIGEgbG9hZCBpcyBpbiBwcm9ncmVz
cy4KKyAgICB3aGlsZSAoIW1fcXVldWUuaXNFbXB0eSgpKSB7CisgICAgICAgIGJvb2wgc3RhcnRl
ZExvYWQgPSBtX3F1ZXVlLmZpcnN0KCktPnJ1bihzaGVsbCk7CisgICAgICAgIGRlbGV0ZSBtX3F1
ZXVlLnRha2VGaXJzdCgpOworICAgICAgICBpZiAoc3RhcnRlZExvYWQpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX2NvbnRyb2xsZXItPm1fd2FpdFVudGlsRG9uZSAm
JiAhc2hlbGwtPndlYlZpZXdIb3N0KCktPnRvcExvYWRpbmdGcmFtZSgpKQorICAgICAgICBzaGVs
bC0+dGVzdEZpbmlzaGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OldvcmtR
dWV1ZTo6cmVzZXQoKQoreworICAgIG1fZnJvemVuID0gZmFsc2U7CisgICAgd2hpbGUgKCFtX3F1
ZXVlLmlzRW1wdHkoKSkKKyAgICAgICAgZGVsZXRlIG1fcXVldWUudGFrZUZpcnN0KCk7Cit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OldvcmtRdWV1ZTo6YWRkV29yayhXb3JrSXRlbSog
d29yaykKK3sKKyAgICBpZiAobV9mcm96ZW4pIHsKKyAgICAgICAgZGVsZXRlIHdvcms7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgbV9xdWV1ZS5hcHBlbmQod29yayk7Cit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBBc1RleHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBtX2R1bXBBc1RleHQgPSB0cnVl
OworICAgIG1fZ2VuZXJhdGVQaXhlbFJlc3VsdHMgPSBmYWxzZTsKKworICAgIC8vIE9wdGlvbmFs
IHBhcmFtYXRlciwgZGVzY3JpYmluZyB3aGV0aGVyIGl0J3MgYWxsb3dlZCB0byBkdW1wIHBpeGVs
IHJlc3VsdHMgaW4gZHVtcEFzVGV4dCBtb2RlLgorICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4g
MCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkpCisgICAgICAgIG1fZ2VuZXJhdGVQaXhlbFJlc3Vs
dHMgPSBhcmd1bWVudHNbMF0udmFsdWUuYm9vbFZhbHVlOworCisgICAgcmVzdWx0LT5zZXROdWxs
KCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBEYXRhYmFzZUNhbGxiYWNr
cyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgLy8g
RG8gbm90aGluZzsgd2UgZG9uJ3QgdXNlIHRoaXMgZmxhZyBhbnl3aGVyZSBmb3Igbm93CisgICAg
cmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBF
ZGl0aW5nQ2FsbGJhY2tzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKK3sKKyAgICBtX2R1bXBFZGl0aW5nQ2FsbGJhY2tzID0gdHJ1ZTsKKyAgICByZXN1bHQtPnNl
dE51bGwoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcEJhY2tGb3J3YXJk
TGlzdChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAg
bV9kdW1wQmFja0ZvcndhcmRMaXN0ID0gdHJ1ZTsKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30K
Kwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcEZyYW1lTG9hZENhbGxiYWNrcyhjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgbV9kdW1wRnJh
bWVMb2FkQ2FsbGJhY2tzID0gdHJ1ZTsKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjayhjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgbV9kdW1wUHJv
Z3Jlc3NGaW5pc2hlZENhbGxiYWNrID0gdHJ1ZTsKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30K
Kwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRD
YWxsYmFja3MoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQorewor
ICAgIG1fZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MgPSB0cnVlOworICAgIHJl
c3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wUmVz
b3VyY2VMb2FkQ2FsbGJhY2tzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJl
c3VsdCkKK3sKKyAgICBtX2R1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MgPSB0cnVlOworICAgIHJl
c3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wUmVz
b3VyY2VSZXNwb25zZU1JTUVUeXBlcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
KiByZXN1bHQpCit7CisgICAgbV9kdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcyA9IHRydWU7
CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmR1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBtX2R1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25z
ID0gdHJ1ZTsKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6ZHVtcENoaWxkRnJhbWVzQXNUZXh0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBtX2R1bXBDaGlsZEZyYW1lc0FzVGV4dCA9IHRydWU7
CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmR1bXBXaW5kb3dTdGF0dXNDaGFuZ2VzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqIHJlc3VsdCkKK3sKKyAgICBtX2R1bXBXaW5kb3dTdGF0dXNDaGFuZ2VzID0gdHJ1ZTsKKyAg
ICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVt
cFRpdGxlQ2hhbmdlcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQp
Cit7CisgICAgbV9kdW1wVGl0bGVDaGFuZ2VzID0gdHJ1ZTsKKyAgICByZXN1bHQtPnNldE51bGwo
KTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcFBlcm1pc3Npb25DbGllbnRD
YWxsYmFja3MoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQorewor
ICAgIG1fZHVtcFBlcm1pc3Npb25DbGllbnRDYWxsYmFja3MgPSB0cnVlOworICAgIHJlc3VsdC0+
c2V0TnVsbCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wQ3JlYXRlVmll
dyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgbV9k
dW1wQ3JlYXRlVmlldyA9IHRydWU7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFjY2VwdHNFZGl0aW5nKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaWYgKGFyZ3VtZW50
cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkKKyAgICAgICAgbV9hY2NlcHRz
RWRpdGluZyA9IGFyZ3VtZW50c1swXS52YWx1ZS5ib29sVmFsdWU7CisgICAgcmVzdWx0LT5zZXRO
dWxsKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndhaXRVbnRpbERvbmUoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIGlmICghd2Vi
a2l0X3N1cHBvcnQ6OkJlaW5nRGVidWdnZWQoKSkKKyAgICAgICAgcG9zdERlbGF5ZWRUYXNrKG5l
dyBOb3RpZnlEb25lVGltZWRPdXRUYXNrKHRoaXMpLCBtX3NoZWxsLT5sYXlvdXRUZXN0VGltZW91
dCgpKTsKKyAgICBtX3dhaXRVbnRpbERvbmUgPSB0cnVlOworICAgIHJlc3VsdC0+c2V0TnVsbCgp
OworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpub3RpZnlEb25lKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICAvLyBUZXN0IGRpZG4ndCB0
aW1lb3V0LiBLaWxsIHRoZSB0aW1lb3V0IHRpbWVyLgorICAgIG1fdGFza0xpc3QucmV2b2tlQWxs
KCk7CisKKyAgICBjb21wbGV0ZU5vdGlmeURvbmUoZmFsc2UpOworICAgIHJlc3VsdC0+c2V0TnVs
bCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjb21wbGV0ZU5vdGlmeURvbmUo
Ym9vbCBpc1RpbWVvdXQpCit7CisgICAgaWYgKG1fd2FpdFVudGlsRG9uZSAmJiAhbV9zaGVsbC0+
d2ViVmlld0hvc3QoKS0+dG9wTG9hZGluZ0ZyYW1lKCkgJiYgbV93b3JrUXVldWUuaXNFbXB0eSgp
KSB7CisgICAgICAgIGlmIChpc1RpbWVvdXQpCisgICAgICAgICAgICBtX3NoZWxsLT50ZXN0VGlt
ZWRPdXQoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9zaGVsbC0+dGVzdEZpbmlzaGVk
KCk7CisgICAgfQorICAgIG1fd2FpdFVudGlsRG9uZSA9IGZhbHNlOworfQorCitjbGFzcyBXb3Jr
SXRlbUJhY2tGb3J3YXJkIDogcHVibGljIExheW91dFRlc3RDb250cm9sbGVyOjpXb3JrSXRlbSB7
CitwdWJsaWM6CisgICAgV29ya0l0ZW1CYWNrRm9yd2FyZChpbnQgZGlzdGFuY2UpIDogbV9kaXN0
YW5jZShkaXN0YW5jZSkgeyB9CisgICAgYm9vbCBydW4oVGVzdFNoZWxsKiBzaGVsbCkKKyAgICB7
CisgICAgICAgIHNoZWxsLT5nb1RvT2Zmc2V0KG1fZGlzdGFuY2UpOworICAgICAgICByZXR1cm4g
dHJ1ZTsgLy8gRklYTUU6IERpZCBpdCByZWFsbHkgc3RhcnQgYSBuYXZpZ2F0aW9uPworICAgIH0K
KworcHJpdmF0ZToKKyAgICBpbnQgbV9kaXN0YW5jZTsKK307CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnF1ZXVlQmFja05hdmlnYXRpb24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1
bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+
IDAgJiYgYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkpCisgICAgICAgIG1fd29ya1F1ZXVlLmFkZFdv
cmsobmV3IFdvcmtJdGVtQmFja0ZvcndhcmQoLWFyZ3VtZW50c1swXS50b0ludDMyKCkpKTsKKyAg
ICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVl
dWVGb3J3YXJkTmF2aWdhdGlvbihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VmFyaWFudCogcmVzdWx0KQoreworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1
bWVudHNbMF0uaXNOdW1iZXIoKSkKKyAgICAgICAgbV93b3JrUXVldWUuYWRkV29yayhuZXcgV29y
a0l0ZW1CYWNrRm9yd2FyZChhcmd1bWVudHNbMF0udG9JbnQzMigpKSk7CisgICAgcmVzdWx0LT5z
ZXROdWxsKCk7Cit9CisKK2NsYXNzIFdvcmtJdGVtUmVsb2FkIDogcHVibGljIExheW91dFRlc3RD
b250cm9sbGVyOjpXb3JrSXRlbSB7CitwdWJsaWM6CisgICAgYm9vbCBydW4oVGVzdFNoZWxsKiBz
aGVsbCkKKyAgICB7CisgICAgICAgIHNoZWxsLT5yZWxvYWQoKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorfTsKKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVSZWxvYWQo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIG1fd29y
a1F1ZXVlLmFkZFdvcmsobmV3IFdvcmtJdGVtUmVsb2FkKTsKKyAgICByZXN1bHQtPnNldE51bGwo
KTsKK30KKworY2xhc3MgV29ya0l0ZW1Mb2FkaW5nU2NyaXB0IDogcHVibGljIExheW91dFRlc3RD
b250cm9sbGVyOjpXb3JrSXRlbSB7CitwdWJsaWM6CisgICAgV29ya0l0ZW1Mb2FkaW5nU2NyaXB0
KGNvbnN0IHN0cmluZyYgc2NyaXB0KSA6IG1fc2NyaXB0KHNjcmlwdCkgeyB9CisgICAgYm9vbCBy
dW4oVGVzdFNoZWxsKiBzaGVsbCkKKyAgICB7CisgICAgICAgIHNoZWxsLT53ZWJWaWV3KCktPm1h
aW5GcmFtZSgpLT5leGVjdXRlU2NyaXB0KFdlYlNjcmlwdFNvdXJjZShXZWJTdHJpbmc6OmZyb21V
VEY4KG1fc2NyaXB0KSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gRklYTUU6IERpZCBpdCBy
ZWFsbHkgc3RhcnQgYSBuYXZpZ2F0aW9uPworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdHJpbmcg
bV9zY3JpcHQ7Cit9OworCitjbGFzcyBXb3JrSXRlbU5vbkxvYWRpbmdTY3JpcHQgOiBwdWJsaWMg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OldvcmtJdGVtIHsKK3B1YmxpYzoKKyAgICBXb3JrSXRlbU5v
bkxvYWRpbmdTY3JpcHQoY29uc3Qgc3RyaW5nJiBzY3JpcHQpIDogbV9zY3JpcHQoc2NyaXB0KSB7
IH0KKyAgICBib29sIHJ1bihUZXN0U2hlbGwqIHNoZWxsKQorICAgIHsKKyAgICAgICAgc2hlbGwt
PndlYlZpZXcoKS0+bWFpbkZyYW1lKCktPmV4ZWN1dGVTY3JpcHQoV2ViU2NyaXB0U291cmNlKFdl
YlN0cmluZzo6ZnJvbVVURjgobV9zY3JpcHQpKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgc3RyaW5nIG1fc2NyaXB0OworfTsKKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6cXVldWVMb2FkaW5nU2NyaXB0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaWYgKGFyZ3VtZW50cy5zaXpl
KCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc1N0cmluZygpKQorICAgICAgICBtX3dvcmtRdWV1ZS5h
ZGRXb3JrKG5ldyBXb3JrSXRlbUxvYWRpbmdTY3JpcHQoYXJndW1lbnRzWzBdLnRvU3RyaW5nKCkp
KTsKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6cXVldWVOb25Mb2FkaW5nU2NyaXB0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRz
LCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYm
IGFyZ3VtZW50c1swXS5pc1N0cmluZygpKQorICAgICAgICBtX3dvcmtRdWV1ZS5hZGRXb3JrKG5l
dyBXb3JrSXRlbU5vbkxvYWRpbmdTY3JpcHQoYXJndW1lbnRzWzBdLnRvU3RyaW5nKCkpKTsKKyAg
ICByZXN1bHQtPnNldE51bGwoKTsKK30KKworY2xhc3MgV29ya0l0ZW1Mb2FkIDogcHVibGljIExh
eW91dFRlc3RDb250cm9sbGVyOjpXb3JrSXRlbSB7CitwdWJsaWM6CisgICAgV29ya0l0ZW1Mb2Fk
KGNvbnN0IFdlYlVSTCYgdXJsLCBjb25zdCBXZWJTdHJpbmcmIHRhcmdldCkKKyAgICAgICAgOiBt
X3VybCh1cmwpCisgICAgICAgICwgbV90YXJnZXQodGFyZ2V0KSB7IH0KKyAgICBib29sIHJ1bihU
ZXN0U2hlbGwqIHNoZWxsKQorICAgIHsKKyAgICAgICAgc2hlbGwtPndlYlZpZXdIb3N0KCktPmxv
YWRVUkxGb3JGcmFtZShtX3VybCwgbV90YXJnZXQpOworICAgICAgICByZXR1cm4gdHJ1ZTsgLy8g
RklYTUU6IERpZCBpdCByZWFsbHkgc3RhcnQgYSBuYXZpZ2F0aW9uPworICAgIH0KKworcHJpdmF0
ZToKKyAgICBXZWJVUkwgbV91cmw7CisgICAgV2ViU3RyaW5nIG1fdGFyZ2V0OworfTsKKwordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVMb2FkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaWYgKGFyZ3VtZW50cy5zaXpl
KCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc1N0cmluZygpKSB7CisgICAgICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgV2ViVVJMOjpyZXNvbHZlKCkgYW5kIGF2b2lkIEdVUkwuCisgICAgICAgIEdVUkwg
Y3VycmVudFVSTCA9IG1fc2hlbGwtPndlYlZpZXcoKS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCku
dXJsKCk7CisgICAgICAgIEdVUkwgZnVsbFVSTCA9IGN1cnJlbnRVUkwuUmVzb2x2ZShhcmd1bWVu
dHNbMF0udG9TdHJpbmcoKSk7CisKKyAgICAgICAgc3RyaW5nIHRhcmdldCA9ICIiOworICAgICAg
ICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDEgJiYgYXJndW1lbnRzWzFdLmlzU3RyaW5nKCkpCisg
ICAgICAgICAgICB0YXJnZXQgPSBhcmd1bWVudHNbMV0udG9TdHJpbmcoKTsKKworICAgICAgICBt
X3dvcmtRdWV1ZS5hZGRXb3JrKG5ldyBXb3JrSXRlbUxvYWQoZnVsbFVSTCwgV2ViU3RyaW5nOjpm
cm9tVVRGOCh0YXJnZXQpKSk7CisgICAgfQorICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCitj
bGFzcyBXb3JrSXRlbUxvYWRIVE1MU3RyaW5nIDogcHVibGljIExheW91dFRlc3RDb250cm9sbGVy
OjpXb3JrSXRlbSAgeworcHVibGljOgorICAgIFdvcmtJdGVtTG9hZEhUTUxTdHJpbmcoY29uc3Qg
c3RkOjpzdHJpbmcmIGh0bWwsIGNvbnN0IFdlYlVSTCYgYmFzZVVSTCkKKyAgICAgICAgOiBtX2h0
bWwoaHRtbCkKKyAgICAgICAgLCBtX2Jhc2VVUkwoYmFzZVVSTCkgeyB9CisgICAgV29ya0l0ZW1M
b2FkSFRNTFN0cmluZyhjb25zdCBzdGQ6OnN0cmluZyYgaHRtbCwgY29uc3QgV2ViVVJMJiBiYXNl
VVJMLCBjb25zdCBXZWJVUkwmIHVucmVhY2hhYmxlVVJMKQorICAgICAgICA6IG1faHRtbChodG1s
KQorICAgICAgICAsIG1fYmFzZVVSTChiYXNlVVJMKQorICAgICAgICAsIG1fdW5yZWFjaGFibGVV
UkwodW5yZWFjaGFibGVVUkwpIHsgfQorICAgIGJvb2wgcnVuKFRlc3RTaGVsbCogc2hlbGwpCisg
ICAgeworICAgICAgICBzaGVsbC0+d2ViVmlldygpLT5tYWluRnJhbWUoKS0+bG9hZEhUTUxTdHJp
bmcoCisgICAgICAgICAgICBXZWJLaXQ6OldlYkRhdGEobV9odG1sLmRhdGEoKSwgbV9odG1sLmxl
bmd0aCgpKSwgbV9iYXNlVVJMLCBtX3VucmVhY2hhYmxlVVJMKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0ZDo6c3RyaW5nIG1faHRtbDsKKyAgICBXZWJV
UkwgbV9iYXNlVVJMOworICAgIFdlYlVSTCBtX3VucmVhY2hhYmxlVVJMOworfTsKKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVMb2FkSFRNTFN0cmluZyhjb25zdCBDcHBBcmd1bWVu
dExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIGlmIChhcmd1bWVu
dHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkgeworICAgICAgICBzdHJp
bmcgaHRtbCA9IGFyZ3VtZW50c1swXS50b1N0cmluZygpOworICAgICAgICBXZWJVUkwgYmFzZVVS
TChHVVJMKCIiKSk7CisgICAgICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMSAmJiBhcmd1bWVu
dHNbMV0uaXNTdHJpbmcoKSkKKyAgICAgICAgICAgIGJhc2VVUkwgPSBXZWJVUkwoR1VSTChhcmd1
bWVudHNbMV0udG9TdHJpbmcoKSkpOworICAgICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDIg
JiYgYXJndW1lbnRzWzJdLmlzU3RyaW5nKCkpCisgICAgICAgICAgICBtX3dvcmtRdWV1ZS5hZGRX
b3JrKG5ldyBXb3JrSXRlbUxvYWRIVE1MU3RyaW5nKGh0bWwsIGJhc2VVUkwsIFdlYlVSTChHVVJM
KGFyZ3VtZW50c1syXS50b1N0cmluZygpKSkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
bV93b3JrUXVldWUuYWRkV29yayhuZXcgV29ya0l0ZW1Mb2FkSFRNTFN0cmluZyhodG1sLCBiYXNl
VVJMKSk7CisgICAgfQorICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpvYmpDSWRlbnRpdHlJc0VxdWFsKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaWYgKGFyZ3VtZW50cy5zaXpl
KCkgPCAyKSB7CisgICAgICAgIC8vIFRoaXMgaXMgdGhlIGJlc3Qgd2UgY2FuIGRvIHRvIHJldHVy
biBhbiBlcnJvci4KKyAgICAgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgcmVzdWx0LT5zZXQoYXJndW1lbnRzWzBdLmlzRXF1YWwoYXJndW1lbnRzWzFd
KSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlc2V0KCkKK3sKKyAgICBpZiAo
bV9zaGVsbCkgeworICAgICAgICBtX3NoZWxsLT53ZWJWaWV3KCktPnNldFpvb21MZXZlbChmYWxz
ZSwgMCk7CisgICAgICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+c2V0VGFiS2V5Q3ljbGVzVGhyb3Vn
aEVsZW1lbnRzKHRydWUpOworI2lmICFPUyhEQVJXSU4pICYmICFPUyhXSU5ET1dTKSAvLyBBY3R1
YWxseSwgVE9PTEtJVF9HVEsKKyAgICAgICAgLy8gKENvbnN0YW50cyBjb3BpZWQgYmVjYXVzZSB3
ZSBjYW4ndCBkZXBlbmQgb24gdGhlIGhlYWRlciB0aGF0IGRlZmluZWQKKyAgICAgICAgLy8gdGhl
bSBmcm9tIHRoaXMgZmlsZS4pCisgICAgICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+c2V0U2VsZWN0
aW9uQ29sb3JzKDB4ZmYxZTkwZmYsIDB4ZmYwMDAwMDAsIDB4ZmZjOGM4YzgsIDB4ZmYzMjMyMzIp
OworI2VuZGlmCisgICAgICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+cmVtb3ZlQWxsVXNlckNvbnRl
bnQoKTsKKyAgICAgICAgV2ViS2l0OjpXZWJTaXplIGVtcHR5OworICAgICAgICBtX3NoZWxsLT53
ZWJWaWV3KCktPmRpc2FibGVBdXRvUmVzaXplTW9kZSgpOworICAgICAgICBtX3NoZWxsLT53ZWJW
aWV3KCktPnNldERldmljZVNjYWxlRmFjdG9yKDEpOworICAgIH0KKyAgICBtX2R1bXBBc1RleHQg
PSBmYWxzZTsKKyAgICBtX2R1bXBBc0F1ZGlvID0gZmFsc2U7CisgICAgbV9kdW1wQ3JlYXRlVmll
dyA9IGZhbHNlOworICAgIG1fZHVtcEVkaXRpbmdDYWxsYmFja3MgPSBmYWxzZTsKKyAgICBtX2R1
bXBGcmFtZUxvYWRDYWxsYmFja3MgPSBmYWxzZTsKKyAgICBtX2R1bXBQcm9ncmVzc0ZpbmlzaGVk
Q2FsbGJhY2sgPSBmYWxzZTsKKyAgICBtX2R1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJh
Y2tzID0gZmFsc2U7CisgICAgbV9kdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzID0gZmFsc2U7Cisg
ICAgbV9kdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcyA9IGZhbHNlOworICAgIG1fZHVtcEJh
Y2tGb3J3YXJkTGlzdCA9IGZhbHNlOworICAgIG1fZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlv
bnMgPSBmYWxzZTsKKyAgICBtX2R1bXBDaGlsZEZyYW1lc0FzVGV4dCA9IGZhbHNlOworICAgIG1f
ZHVtcFdpbmRvd1N0YXR1c0NoYW5nZXMgPSBmYWxzZTsKKyAgICBtX2R1bXBTZWxlY3Rpb25SZWN0
ID0gZmFsc2U7CisgICAgbV9kdW1wVGl0bGVDaGFuZ2VzID0gZmFsc2U7CisgICAgbV9kdW1wUGVy
bWlzc2lvbkNsaWVudENhbGxiYWNrcyA9IGZhbHNlOworICAgIG1fZ2VuZXJhdGVQaXhlbFJlc3Vs
dHMgPSB0cnVlOworICAgIG1fYWNjZXB0c0VkaXRpbmcgPSB0cnVlOworICAgIG1fd2FpdFVudGls
RG9uZSA9IGZhbHNlOworICAgIG1fY2FuT3BlbldpbmRvd3MgPSBmYWxzZTsKKyAgICBtX3Rlc3RS
ZXBhaW50ID0gZmFsc2U7CisgICAgbV9zd2VlcEhvcml6b250YWxseSA9IGZhbHNlOworICAgIG1f
c2hvdWxkQWRkRmlsZVRvUGFzdGVib2FyZCA9IGZhbHNlOworICAgIG1fc3RvcFByb3Zpc2lvbmFs
RnJhbWVMb2FkcyA9IGZhbHNlOworICAgIG1fZGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZCA9IHRy
dWU7CisgICAgbV9nbG9iYWxGbGFnLnNldChmYWxzZSk7CisgICAgbV93ZWJIaXN0b3J5SXRlbUNv
dW50LnNldCgwKTsKKyAgICBtX3RpdGxlVGV4dERpcmVjdGlvbi5zZXQoImx0ciIpOworICAgIG1f
cGxhdGZvcm1OYW1lLnNldCgiY2hyb21pdW0iKTsKKyAgICBtX2ludGVyY2VwdFBvc3RNZXNzYWdl
LnNldChmYWxzZSk7CisgICAgbV91c2VyU3R5bGVTaGVldExvY2F0aW9uID0gV2ViVVJMKCk7Cisg
ICAgbV9pc1ByaW50aW5nID0gZmFsc2U7CisKKyAgICB3ZWJraXRfc3VwcG9ydDo6U2V0QWNjZXB0
QWxsQ29va2llcyhmYWxzZSk7CisgICAgV2ViU2VjdXJpdHlQb2xpY3k6OnJlc2V0T3JpZ2luQWNj
ZXNzV2hpdGVsaXN0cygpOworCisgICAgLy8gUmVzZXQgdGhlIGRlZmF1bHQgcXVvdGEgZm9yIGVh
Y2ggb3JpZ2luIHRvIDVNQgorICAgIHdlYmtpdF9zdXBwb3J0OjpTZXREYXRhYmFzZVF1b3RhKDUg
KiAxMDI0ICogMTAyNCk7CisKKyAgICBzZXRsb2NhbGUoTENfQUxMLCAiIik7CisKKyAgICBpZiAo
bV9jbG9zZVJlbWFpbmluZ1dpbmRvd3MpCisgICAgICAgIG1fc2hlbGwtPmNsb3NlUmVtYWluaW5n
V2luZG93cygpOworICAgIGVsc2UKKyAgICAgICAgbV9jbG9zZVJlbWFpbmluZ1dpbmRvd3MgPSB0
cnVlOworICAgIG1fd29ya1F1ZXVlLnJlc2V0KCk7CisgICAgbV90YXNrTGlzdC5yZXZva2VBbGwo
KTsKKyAgICBtX3Nob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkID0gZmFs
c2U7CisgICAgbV9oYXNDdXN0b21GdWxsU2NyZWVuQmVoYXZpb3IgPSBmYWxzZTsKKyNpZiBPUyhM
SU5VWCkgfHwgT1MoQU5EUk9JRCkKKyAgICBXZWJGb250UmVuZGVyaW5nOjpzZXRTdWJwaXhlbFBv
c2l0aW9uaW5nKGZhbHNlKTsKKyNlbmRpZgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
Ojpsb2NhdGlvbkNoYW5nZURvbmUoKQoreworICAgIG1fd2ViSGlzdG9yeUl0ZW1Db3VudC5zZXQo
bV9zaGVsbC0+bmF2aWdhdGlvbkVudHJ5Q291bnQoKSk7CisKKyAgICAvLyBObyBtb3JlIG5ldyB3
b3JrIGFmdGVyIHRoZSBmaXJzdCBjb21wbGV0ZSBsb2FkLgorICAgIG1fd29ya1F1ZXVlLnNldEZy
b3plbih0cnVlKTsKKworICAgIGlmICghbV93YWl0VW50aWxEb25lKQorICAgICAgICBtX3dvcmtR
dWV1ZS5wcm9jZXNzV29ya1Nvb24oKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
cG9saWN5RGVsZWdhdGVEb25lKCkKK3sKKyAgICBBU1NFUlQobV93YWl0VW50aWxEb25lKTsKKyAg
ICBtX3NoZWxsLT50ZXN0RmluaXNoZWQoKTsKKyAgICBtX3dhaXRVbnRpbERvbmUgPSBmYWxzZTsK
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q2FuT3BlbldpbmRvd3MoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIG1fY2FuT3Blbldp
bmRvd3MgPSB0cnVlOworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJn
dW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQorICAgICAgICBtX3No
ZWxsLT53ZWJWaWV3KCktPnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhhcmd1bWVudHNb
MF0udG9Cb29sZWFuKCkpOworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjp3aW5kb3dDb3VudChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXQoc3RhdGljX2Nhc3Q8aW50PihtX3No
ZWxsLT53aW5kb3dDb3VudCgpKSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dENsb3NlUmVtYWluaW5nV2luZG93c1doZW5Db21wbGV0ZShjb25zdCBDcHBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIGlmIChhcmd1bWVudHMuc2l6
ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkpCisgICAgICAgIG1fY2xvc2VSZW1haW5p
bmdXaW5kb3dzID0gYXJndW1lbnRzWzBdLnZhbHVlLmJvb2xWYWx1ZTsKKyAgICByZXN1bHQtPnNl
dE51bGwoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWx3YXlzQWNjZXB0
Q29va2llcyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVz
dWx0KQoreworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCkKKyAgICAgICAgd2Via2l0X3N1
cHBvcnQ6OlNldEFjY2VwdEFsbENvb2tpZXMoY3BwVmFyaWFudFRvQm9vbChhcmd1bWVudHNbMF0p
KTsKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJndW1lbnRz
LnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQorICAgICAgICBtX3NoZWxsLT53
ZWJWaWV3KCktPnNldHRpbmdzKCktPnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
KGNwcFZhcmlhbnRUb0Jvb2woYXJndW1lbnRzWzBdKSk7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7
Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNob3dXZWJJbnNwZWN0b3IoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIG1fc2hlbGwtPnNo
b3dEZXZUb29scygpOworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpjbG9zZVdlYkluc3BlY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3MsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBtX3NoZWxsLT5jbG9zZURldlRvb2xzKCk7
CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFdpbmRvd0lzS2V5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJp
YW50KiByZXN1bHQpCit7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50
c1swXS5pc0Jvb2woKSkKKyAgICAgICAgbV9zaGVsbC0+c2V0Rm9jdXMobV9zaGVsbC0+d2ViVmll
dygpLCBhcmd1bWVudHNbMF0udmFsdWUuYm9vbFZhbHVlKTsKKyAgICByZXN1bHQtPnNldE51bGwo
KTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlclN0eWxlU2hlZXRFbmFi
bGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQp
Cit7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2wo
KSkgeworICAgICAgICBtX3NoZWxsLT5wcmVmZXJlbmNlcygpLT51c2VyU3R5bGVTaGVldExvY2F0
aW9uID0gYXJndW1lbnRzWzBdLnZhbHVlLmJvb2xWYWx1ZSA/IG1fdXNlclN0eWxlU2hlZXRMb2Nh
dGlvbiA6IFdlYlVSTCgpOworICAgICAgICBtX3NoZWxsLT5hcHBseVByZWZlcmVuY2VzKCk7Cisg
ICAgfQorICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
dW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkg
PiAwICYmIGFyZ3VtZW50c1swXS5pc1N0cmluZygpKSB7CisgICAgICAgIG1fdXNlclN0eWxlU2hl
ZXRMb2NhdGlvbiA9IHdlYmtpdF9zdXBwb3J0OjpMb2NhbEZpbGVUb0RhdGFVUkwoCisgICAgICAg
ICAgICB3ZWJraXRfc3VwcG9ydDo6UmV3cml0ZUxheW91dFRlc3RzVVJMKGFyZ3VtZW50c1swXS50
b1N0cmluZygpKSk7CisgICAgICAgIG1fc2hlbGwtPnByZWZlcmVuY2VzKCktPnVzZXJTdHlsZVNo
ZWV0TG9jYXRpb24gPSBtX3VzZXJTdHlsZVNoZWV0TG9jYXRpb247CisgICAgICAgIG1fc2hlbGwt
PmFwcGx5UHJlZmVyZW5jZXMoKTsKKyAgICB9CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVk
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7
CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkg
eworICAgICAgICBtX3NoZWxsLT5wcmVmZXJlbmNlcygpLT5hdXRob3JBbmRVc2VyU3R5bGVzRW5h
YmxlZCA9IGFyZ3VtZW50c1swXS52YWx1ZS5ib29sVmFsdWU7CisgICAgICAgIG1fc2hlbGwtPmFw
cGx5UHJlZmVyZW5jZXMoKTsKKyAgICB9CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV4ZWNDb21tYW5kKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxs
KCk7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPD0gMCB8fCAhYXJndW1lbnRzWzBdLmlzU3Ry
aW5nKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHN0ZDo6c3RyaW5nIGNvbW1hbmQgPSBhcmd1
bWVudHNbMF0udG9TdHJpbmcoKTsKKyAgICBzdGQ6OnN0cmluZyB2YWx1ZSgiIik7CisgICAgLy8g
SWdub3JlIHRoZSBzZWNvbmQgcGFyYW1ldGVyICh3aGljaCBpcyB1c2VySW50ZXJmYWNlKQorICAg
IC8vIHNpbmNlIHRoaXMgY29tbWFuZCBlbXVsYXRlcyBhIG1hbnVhbCBhY3Rpb24uCisgICAgaWYg
KGFyZ3VtZW50cy5zaXplKCkgPj0gMyAmJiBhcmd1bWVudHNbMl0uaXNTdHJpbmcoKSkKKyAgICAg
ICAgdmFsdWUgPSBhcmd1bWVudHNbMl0udG9TdHJpbmcoKTsKKworICAgIC8vIE5vdGU6IHdlYmtp
dCdzIHZlcnNpb24gZG9lcyBub3QgcmV0dXJuIHRoZSBib29sZWFuLCBzbyBuZWl0aGVyIGRvIHdl
LgorICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+Zm9jdXNlZEZyYW1lKCktPmV4ZWN1dGVDb21tYW5k
KFdlYlN0cmluZzo6ZnJvbVVURjgoY29tbWFuZCksIFdlYlN0cmluZzo6ZnJvbVVURjgodmFsdWUp
KTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6aXNDb21tYW5kRW5hYmxlZChjb25z
dCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAg
IGlmIChhcmd1bWVudHMuc2l6ZSgpIDw9IDAgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpKSB7
CisgICAgICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgc3RkOjpzdHJpbmcgY29tbWFuZCA9IGFyZ3VtZW50c1swXS50b1N0cmluZygpOworICAgIGJv
b2wgcnYgPSBtX3NoZWxsLT53ZWJWaWV3KCktPmZvY3VzZWRGcmFtZSgpLT5pc0NvbW1hbmRFbmFi
bGVkKFdlYlN0cmluZzo6ZnJvbVVURjgoY29tbWFuZCkpOworICAgIHJlc3VsdC0+c2V0KHJ2KTsK
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sK
KyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKSB7
CisgICAgICAgIGJvb2wgYmxvY2tQb3B1cHMgPSBhcmd1bWVudHNbMF0udG9Cb29sZWFuKCk7Cisg
ICAgICAgIG1fc2hlbGwtPnByZWZlcmVuY2VzKCktPmphdmFTY3JpcHRDYW5PcGVuV2luZG93c0F1
dG9tYXRpY2FsbHkgPSAhYmxvY2tQb3B1cHM7CisgICAgICAgIG1fc2hlbGwtPmFwcGx5UHJlZmVy
ZW5jZXMoKTsKKyAgICB9CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldEltYWdlc0FsbG93ZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJndW1lbnRzLnNpemUo
KSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQorICAgICAgICBtX3NoZWxsLT53ZWJQZXJt
aXNzaW9ucygpLT5zZXRJbWFnZXNBbGxvd2VkKGFyZ3VtZW50c1swXS50b0Jvb2xlYW4oKSk7Cisg
ICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dFNjcmlwdHNBbGxvd2VkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJp
YW50KiByZXN1bHQpCit7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50
c1swXS5pc0Jvb2woKSkKKyAgICAgICAgbV9zaGVsbC0+d2ViUGVybWlzc2lvbnMoKS0+c2V0U2Ny
aXB0c0FsbG93ZWQoYXJndW1lbnRzWzBdLnRvQm9vbGVhbigpKTsKKyAgICByZXN1bHQtPnNldE51
bGwoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U3RvcmFnZUFsbG93ZWQo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sK
KyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQor
ICAgICAgICBtX3NoZWxsLT53ZWJQZXJtaXNzaW9ucygpLT5zZXRTdG9yYWdlQWxsb3dlZChhcmd1
bWVudHNbMF0udG9Cb29sZWFuKCkpOworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQbHVnaW5zQWxsb3dlZChjb25zdCBDcHBBcmd1bWVu
dExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIGlmIChhcmd1bWVu
dHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkpCisgICAgICAgIG1fc2hlbGwt
PndlYlBlcm1pc3Npb25zKCktPnNldFBsdWdpbnNBbGxvd2VkKGFyZ3VtZW50c1swXS50b0Jvb2xl
YW4oKSk7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldFVzZURhc2hib2FyZENvbXBhdGliaWxpdHlNb2RlKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICAvLyBXZSBoYXZlIG5vIG5lZWQgdG8g
c3VwcG9ydCBEYXNoYm9hcmQgQ29tcGF0aWJpbGl0eSBNb2RlIChtYWMtb25seSkKKyAgICByZXN1
bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxB
cHBsaWNhdGlvbkNhY2hlcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1
bHQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBzdXBwb3J0IGFwcGxpY2F0aW9uIGNh
Y2hlIHF1b3Rhcy4KKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6Y2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHRvIHN1cHBvcnQgZGVsZXRpbmcgYWxsIGFwcGxpY2F0aW9uIGNhY2hlIGZvciBhbiBvcmlnaW4u
CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBzdXBwb3J0
IGFwcGxpY2F0aW9uIGNhY2hlIHF1b3Rhcy4KKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICAvLyBGSVhN
RTogSW1wbGVtZW50IHRvIHN1cHBvcnQgZ2V0dGluZyBvcmlnaW5zIHRoYXQgaGF2ZSBhcHBsaWNh
dGlvbiBjYWNoZXMuCisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmFwcGxpY2F0aW9uQ2FjaGVEaXNrVXNhZ2VGb3JPcmlnaW4oY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgdG8gc3VwcG9ydCBnZXR0aW5nIGRpc2sgdXNhZ2UgYnkgYWxsIGFwcGxpY2F0aW9uIGNh
Y2hlIGZvciBhbiBvcmlnaW4uCisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldFNjcm9sbGJhclBvbGljeShjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudC4KKyAg
ICAvLyBDdXJyZW50bHkgb25seSBoYXMgYSBub24tbnVsbCBpbXBsZW1lbnRhdGlvbiBvbiBRVC4K
KyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMs
IENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYg
YXJndW1lbnRzWzBdLmlzQm9vbCgpKSB7CisgICAgICAgIGJvb2wgZW5hYmxlID0gYXJndW1lbnRz
WzBdLnZhbHVlLmJvb2xWYWx1ZTsKKyAgICAgICAgYm9vbCBwZXJtaXNzaXZlID0gZmFsc2U7Cisg
ICAgICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMSAmJiBhcmd1bWVudHNbMV0uaXNCb29sKCkp
CisgICAgICAgICAgICBwZXJtaXNzaXZlID0gYXJndW1lbnRzWzFdLnZhbHVlLmJvb2xWYWx1ZTsK
KyAgICAgICAgbV9zaGVsbC0+d2ViVmlld0hvc3QoKS0+c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUo
ZW5hYmxlLCBwZXJtaXNzaXZlKTsKKyAgICB9CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndhaXRGb3JQb2xpY3lEZWxlZ2F0ZShjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgbV9zaGVsbC0+d2Vi
Vmlld0hvc3QoKS0+d2FpdEZvclBvbGljeURlbGVnYXRlKCk7CisgICAgbV93YWl0VW50aWxEb25l
ID0gdHJ1ZTsKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0V2lsbFNlbmRSZXF1ZXN0Q2xlYXJIZWFkZXIoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJndW1lbnRz
LnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgc3RyaW5n
IGhlYWRlciA9IGFyZ3VtZW50c1swXS50b1N0cmluZygpOworICAgICAgICBpZiAoIWhlYWRlci5l
bXB0eSgpKQorICAgICAgICAgICAgbV9zaGVsbC0+d2ViVmlld0hvc3QoKS0+YWRkQ2xlYXJIZWFk
ZXIoU3RyaW5nOjpmcm9tVVRGOChoZWFkZXIuY19zdHIoKSkpOworICAgIH0KKyAgICByZXN1bHQt
PnNldE51bGwoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2lsbFNlbmRS
ZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1l
bnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAw
ICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkKKyAgICAgICAgbV9zaGVsbC0+d2ViVmlld0hvc3Qo
KS0+c2V0QmxvY2tSZWRpcmVjdHMoYXJndW1lbnRzWzBdLnZhbHVlLmJvb2xWYWx1ZSk7CisgICAg
cmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdp
bGxTZW5kUmVxdWVzdFJldHVybnNOdWxsKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRz
LCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYm
IGFyZ3VtZW50c1swXS5pc0Jvb2woKSkKKyAgICAgICAgbV9zaGVsbC0+d2ViVmlld0hvc3QoKS0+
c2V0UmVxdWVzdFJldHVybk51bGwoYXJndW1lbnRzWzBdLnZhbHVlLmJvb2xWYWx1ZSk7CisgICAg
cmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdGhU
b0xvY2FsUmVzb3VyY2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlh
bnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICBpZiAoYXJndW1lbnRz
LnNpemUoKSA8PSAwIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgc3RyaW5nIHVybCA9IGFyZ3VtZW50c1swXS50b1N0cmluZygpOworI2lmIE9TKFdJ
TkRPV1MpCisgICAgaWYgKCF1cmwuZmluZCgiL3RtcC8iKSkgeworICAgICAgICAvLyBXZSB3YW50
IGEgdGVtcCBmaWxlLgorICAgICAgICBjb25zdCB1bnNpZ25lZCB0ZW1wUHJlZml4TGVuZ3RoID0g
NTsKKyAgICAgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBNQVhfUEFUSDsKKyAgICAgICAgT3duQXJy
YXlQdHI8V0NIQVI+IHRlbXBQYXRoID0gYWRvcHRBcnJheVB0cihuZXcgV0NIQVJbYnVmZmVyU2l6
ZV0pOworICAgICAgICBEV09SRCB0ZW1wTGVuZ3RoID0gOjpHZXRUZW1wUGF0aFcoYnVmZmVyU2l6
ZSwgdGVtcFBhdGguZ2V0KCkpOworICAgICAgICBpZiAodGVtcExlbmd0aCArIHVybC5sZW5ndGgo
KSAtIHRlbXBQcmVmaXhMZW5ndGggKyAxID4gYnVmZmVyU2l6ZSkgeworICAgICAgICAgICAgYnVm
ZmVyU2l6ZSA9IHRlbXBMZW5ndGggKyB1cmwubGVuZ3RoKCkgLSB0ZW1wUHJlZml4TGVuZ3RoICsg
MTsKKyAgICAgICAgICAgIHRlbXBQYXRoID0gYWRvcHRBcnJheVB0cihuZXcgV0NIQVJbYnVmZmVy
U2l6ZV0pOworICAgICAgICAgICAgdGVtcExlbmd0aCA9IEdldFRlbXBQYXRoVyhidWZmZXJTaXpl
LCB0ZW1wUGF0aC5nZXQoKSk7CisgICAgICAgICAgICBBU1NFUlQodGVtcExlbmd0aCA8IGJ1ZmZl
clNpemUpOworICAgICAgICB9CisgICAgICAgIHN0cmluZyByZXN1bHRQYXRoKFdlYlN0cmluZyh0
ZW1wUGF0aC5nZXQoKSwgdGVtcExlbmd0aCkudXRmOCgpKTsKKyAgICAgICAgcmVzdWx0UGF0aC5h
cHBlbmQodXJsLnN1YnN0cih0ZW1wUHJlZml4TGVuZ3RoKSk7CisgICAgICAgIHJlc3VsdC0+c2V0
KHJlc3VsdFBhdGgpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICAvLyBT
b21lIGxheW91dCB0ZXN0cyB1c2UgZmlsZTovLy8vIHdoaWNoIHdlIHJlc29sdmUgYXMgYSBVTkMg
cGF0aC4gTm9ybWFsaXplCisgICAgLy8gdGhlbSB0byBqdXN0IGZpbGU6Ly8vLgorICAgIHN0cmlu
ZyBsb3dlclVybCA9IHVybDsKKyAgICB0cmFuc2Zvcm0obG93ZXJVcmwuYmVnaW4oKSwgbG93ZXJV
cmwuZW5kKCksIGxvd2VyVXJsLmJlZ2luKCksIDo6dG9sb3dlcik7CisgICAgd2hpbGUgKCFsb3dl
clVybC5maW5kKCJmaWxlOi8vLy8iKSkgeworICAgICAgICB1cmwgPSB1cmwuc3Vic3RyKDAsIDgp
ICsgdXJsLnN1YnN0cig5KTsKKyAgICAgICAgbG93ZXJVcmwgPSBsb3dlclVybC5zdWJzdHIoMCwg
OCkgKyBsb3dlclVybC5zdWJzdHIoOSk7CisgICAgfQorICAgIHJlc3VsdC0+c2V0KHdlYmtpdF9z
dXBwb3J0OjpSZXdyaXRlTGF5b3V0VGVzdHNVUkwodXJsKS5zcGVjKCkpOworfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjphZGRGaWxlVG9QYXN0ZWJvYXJkT25EcmFnKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwo
KTsKKyAgICBtX3Nob3VsZEFkZEZpbGVUb1Bhc3RlYm9hcmQgPSB0cnVlOworfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRTdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51
bGwoKTsKKyAgICBtX3N0b3BQcm92aXNpb25hbEZyYW1lTG9hZHMgPSB0cnVlOworfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBp
ZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQorICAgICAg
ICBtX3NoZWxsLT53ZWJWaWV3SG9zdCgpLT5zZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQoYXJn
dW1lbnRzWzBdLnZhbHVlLmJvb2xWYWx1ZSk7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVu
YWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKK3sKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9v
bCgpKQorICAgICAgICBtX3NoZWxsLT53ZWJWaWV3SG9zdCgpLT5zZXRTZWxlY3RUcmFpbGluZ1do
aXRlc3BhY2VFbmFibGVkKGFyZ3VtZW50c1swXS52YWx1ZS5ib29sVmFsdWUpOworICAgIHJlc3Vs
dC0+c2V0TnVsbCgpOworfQorCitib29sIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZUFuaW1h
dGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChjb25zdCBXZWJTdHJpbmcmIGFuaW1hdGlvbk5hbWUs
IGRvdWJsZSB0aW1lLCBjb25zdCBXZWJTdHJpbmcmIGVsZW1lbnRJZCkKK3sKKyAgICBXZWJGcmFt
ZSogd2ViRnJhbWUgPSBtX3NoZWxsLT53ZWJWaWV3KCktPm1haW5GcmFtZSgpOworICAgIGlmICgh
d2ViRnJhbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFdlYkFuaW1hdGlvbkNvbnRy
b2xsZXIqIGNvbnRyb2xsZXIgPSB3ZWJGcmFtZS0+YW5pbWF0aW9uQ29udHJvbGxlcigpOworICAg
IGlmICghY29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgV2ViRWxlbWVu
dCBlbGVtZW50ID0gd2ViRnJhbWUtPmRvY3VtZW50KCkuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElk
KTsKKyAgICBpZiAoZWxlbWVudC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiBjb250cm9sbGVyLT5wYXVzZUFuaW1hdGlvbkF0VGltZShlbGVtZW50LCBhbmltYXRp
b25OYW1lLCB0aW1lKTsKK30KKworYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF1c2VUcmFu
c2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKGNvbnN0IFdlYlN0cmluZyYgcHJvcGVydHlOYW1l
LCBkb3VibGUgdGltZSwgY29uc3QgV2ViU3RyaW5nJiBlbGVtZW50SWQpCit7CisgICAgV2ViRnJh
bWUqIHdlYkZyYW1lID0gbV9zaGVsbC0+d2ViVmlldygpLT5tYWluRnJhbWUoKTsKKyAgICBpZiAo
IXdlYkZyYW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBXZWJBbmltYXRpb25Db250
cm9sbGVyKiBjb250cm9sbGVyID0gd2ViRnJhbWUtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKKyAg
ICBpZiAoIWNvbnRyb2xsZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFdlYkVsZW1l
bnQgZWxlbWVudCA9IHdlYkZyYW1lLT5kb2N1bWVudCgpLmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJ
ZCk7CisgICAgaWYgKGVsZW1lbnQuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gY29udHJvbGxlci0+cGF1c2VUcmFuc2l0aW9uQXRUaW1lKGVsZW1lbnQsIHByb3Bl
cnR5TmFtZSwgdGltZSk7Cit9CisKK2Jvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmVsZW1lbnRE
b2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZChjb25zdCBXZWJTdHJpbmcmIGVsZW1lbnRJ
ZCkKK3sKKyAgICBXZWJGcmFtZSogd2ViRnJhbWUgPSBtX3NoZWxsLT53ZWJWaWV3KCktPm1haW5G
cmFtZSgpOworICAgIGlmICghd2ViRnJhbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IFdlYkVsZW1lbnQgZWxlbWVudCA9IHdlYkZyYW1lLT5kb2N1bWVudCgpLmdldEVsZW1lbnRCeUlk
KGVsZW1lbnRJZCk7CisgICAgaWYgKGVsZW1lbnQuaXNOdWxsKCkgfHwgIWVsZW1lbnQuaGFzVGFn
TmFtZSgiaW5wdXQiKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgV2ViSW5wdXRFbGVt
ZW50IGlucHV0RWxlbWVudCA9IGVsZW1lbnQudG88V2ViSW5wdXRFbGVtZW50PigpOworICAgIHJl
dHVybiBpbnB1dEVsZW1lbnQuYXV0b0NvbXBsZXRlKCk7Cit9CisKK2ludCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkKK3sKKyAgICBXZWJGcmFtZSogd2Vi
RnJhbWUgPSBtX3NoZWxsLT53ZWJWaWV3KCktPm1haW5GcmFtZSgpOworICAgIGlmICghd2ViRnJh
bWUpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIFdlYkFuaW1hdGlvbkNvbnRyb2xsZXIqIGNv
bnRyb2xsZXIgPSB3ZWJGcmFtZS0+YW5pbWF0aW9uQ29udHJvbGxlcigpOworICAgIGlmICghY29u
dHJvbGxlcikKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmV0dXJuIGNvbnRyb2xsZXItPm51
bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChjb25zdCBDcHBBcmd1bWVudExp
c3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0KGZh
bHNlKTsKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDIgJiYgYXJndW1lbnRzWzBdLmlzU3Ry
aW5nKCkgJiYgYXJndW1lbnRzWzFdLmlzTnVtYmVyKCkgJiYgYXJndW1lbnRzWzJdLmlzU3RyaW5n
KCkpIHsKKyAgICAgICAgV2ViU3RyaW5nIGFuaW1hdGlvbk5hbWUgPSBjcHBWYXJpYW50VG9XZWJT
dHJpbmcoYXJndW1lbnRzWzBdKTsKKyAgICAgICAgZG91YmxlIHRpbWUgPSBhcmd1bWVudHNbMV0u
dG9Eb3VibGUoKTsKKyAgICAgICAgV2ViU3RyaW5nIGVsZW1lbnRJZCA9IGNwcFZhcmlhbnRUb1dl
YlN0cmluZyhhcmd1bWVudHNbMl0pOworICAgICAgICByZXN1bHQtPnNldChwYXVzZUFuaW1hdGlv
bkF0VGltZU9uRWxlbWVudFdpdGhJZChhbmltYXRpb25OYW1lLCB0aW1lLCBlbGVtZW50SWQpKTsK
KyAgICB9Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlVHJhbnNpdGlvbkF0
VGltZU9uRWxlbWVudFdpdGhJZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0KGZhbHNlKTsKKyAgICBpZiAoYXJn
dW1lbnRzLnNpemUoKSA+IDIgJiYgYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkgJiYgYXJndW1lbnRz
WzFdLmlzTnVtYmVyKCkgJiYgYXJndW1lbnRzWzJdLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgV2Vi
U3RyaW5nIHByb3BlcnR5TmFtZSA9IGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMF0p
OworICAgICAgICBkb3VibGUgdGltZSA9IGFyZ3VtZW50c1sxXS50b0RvdWJsZSgpOworICAgICAg
ICBXZWJTdHJpbmcgZWxlbWVudElkID0gY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1sy
XSk7CisgICAgICAgIHJlc3VsdC0+c2V0KHBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdp
dGhJZChwcm9wZXJ0eU5hbWUsIHRpbWUsIGVsZW1lbnRJZCkpOworICAgIH0KK30KKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0
aElkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQp
Cit7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgIT0gMSB8fCAhYXJndW1lbnRzWzBdLmlzU3Ry
aW5nKCkpIHsKKyAgICAgICAgcmVzdWx0LT5zZXQoZmFsc2UpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIFdlYlN0cmluZyBlbGVtZW50SWQgPSBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJn
dW1lbnRzWzBdKTsKKyAgICByZXN1bHQtPnNldChlbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVs
ZW1lbnRXaXRoSWQoZWxlbWVudElkKSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmVuYWJsZUF1dG9SZXNpemVNb2RlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgIT0gNCkgewor
ICAgICAgICByZXN1bHQtPnNldChmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
aW50IG1pbldpZHRoID0gY3BwVmFyaWFudFRvSW50MzIoYXJndW1lbnRzWzBdKTsKKyAgICBpbnQg
bWluSGVpZ2h0ID0gY3BwVmFyaWFudFRvSW50MzIoYXJndW1lbnRzWzFdKTsKKyAgICBXZWJLaXQ6
OldlYlNpemUgbWluU2l6ZShtaW5XaWR0aCwgbWluSGVpZ2h0KTsKKworICAgIGludCBtYXhXaWR0
aCA9IGNwcFZhcmlhbnRUb0ludDMyKGFyZ3VtZW50c1syXSk7CisgICAgaW50IG1heEhlaWdodCA9
IGNwcFZhcmlhbnRUb0ludDMyKGFyZ3VtZW50c1szXSk7CisgICAgV2ViS2l0OjpXZWJTaXplIG1h
eFNpemUobWF4V2lkdGgsIG1heEhlaWdodCk7CisKKyAgICBtX3NoZWxsLT53ZWJWaWV3KCktPmVu
YWJsZUF1dG9SZXNpemVNb2RlKG1pblNpemUsIG1heFNpemUpOworICAgIHJlc3VsdC0+c2V0KHRy
dWUpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNhYmxlQXV0b1Jlc2l6ZU1v
ZGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkK
K3sKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPTIpIHsKKyAgICAgICAgcmVzdWx0LT5zZXQo
ZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGludCBuZXdXaWR0aCA9IGNwcFZh
cmlhbnRUb0ludDMyKGFyZ3VtZW50c1swXSk7CisgICAgaW50IG5ld0hlaWdodCA9IGNwcFZhcmlh
bnRUb0ludDMyKGFyZ3VtZW50c1sxXSk7CisgICAgV2ViS2l0OjpXZWJTaXplIG5ld1NpemUobmV3
V2lkdGgsIG5ld0hlaWdodCk7CisKKyAgICBtX3NoZWxsLT53ZWJWaWV3SG9zdCgpLT5zZXRXaW5k
b3dSZWN0KFdlYlJlY3QoMCwgMCwgbmV3U2l6ZS53aWR0aCwgbmV3U2l6ZS5oZWlnaHQpKTsKKyAg
ICBtX3NoZWxsLT53ZWJWaWV3KCktPmRpc2FibGVBdXRvUmVzaXplTW9kZSgpOworICAgIG1fc2hl
bGwtPndlYlZpZXcoKS0+cmVzaXplKG5ld1NpemUpOworICAgIHJlc3VsdC0+c2V0KHRydWUpOwor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3Vs
dC0+c2V0KG51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpKTsKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZGlzYWJsZUltYWdlTG9hZGluZyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgbV9zaGVsbC0+cHJlZmVyZW5jZXMoKS0+bG9hZHNJ
bWFnZXNBdXRvbWF0aWNhbGx5ID0gZmFsc2U7CisgICAgbV9zaGVsbC0+YXBwbHlQcmVmZXJlbmNl
cygpOworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqIHJlc3VsdCkKK3sKKyAgICAvLyBXZSBkb24ndCB1c2UgdGhlIFdlYktpdCBpY29uIGRh
dGFiYXNlLgorICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0KG1fc2hlbGwtPndlYlZpZXco
KS0+ZGlzcGF0Y2hCZWZvcmVVbmxvYWRFdmVudCgpKTsKK30KKworI2lmIEVOQUJMRShOT1RJRklD
QVRJT05TKQordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Z3JhbnREZXNrdG9wTm90aWZpY2F0
aW9uUGVybWlzc2lvbihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFu
dCogcmVzdWx0KQoreworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDEgfHwgIWFyZ3VtZW50
c1swXS5pc1N0cmluZygpKSB7CisgICAgICAgIHJlc3VsdC0+c2V0KGZhbHNlKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykgfHwgRU5BQkxFKExFR0FD
WV9OT1RJRklDQVRJT05TKQorICAgIG1fc2hlbGwtPm5vdGlmaWNhdGlvblByZXNlbnRlcigpLT5n
cmFudFBlcm1pc3Npb24oY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1swXSkpOworI2Vu
ZGlmCisgICAgcmVzdWx0LT5zZXQodHJ1ZSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNpbXVsYXRlRGVza3RvcE5vdGlmaWNhdGlvbkNsaWNrKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaWYgKGFyZ3VtZW50cy5z
aXplKCkgIT0gMSB8fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgcmVzdWx0
LT5zZXQoZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorI2lmIEVOQUJMRShOT1RJRklD
QVRJT05TKSB8fCBFTkFCTEUoTEVHQUNZX05PVElGSUNBVElPTlMpCisgICAgaWYgKG1fc2hlbGwt
Pm5vdGlmaWNhdGlvblByZXNlbnRlcigpLT5zaW11bGF0ZUNsaWNrKGNwcFZhcmlhbnRUb1dlYlN0
cmluZyhhcmd1bWVudHNbMF0pKSkKKyAgICAgICAgcmVzdWx0LT5zZXQodHJ1ZSk7CisgICAgZWxz
ZQorI2VuZGlmCisgICAgICAgIHJlc3VsdC0+c2V0KGZhbHNlKTsKK30KKyNlbmRpZgorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJM
U2NoZW1lKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCit7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgIT0gMiB8fCAhYXJndW1lbnRzWzBdLmlz
Qm9vbCgpIHx8ICFhcmd1bWVudHNbMV0uaXNTdHJpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IG1fc2hlbGwtPndlYlZpZXcoKS0+c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbihjcHBWYXJp
YW50VG9Cb29sKGFyZ3VtZW50c1swXSksIGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNb
MV0pKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGVmZXJNYWluUmVzb3Vy
Y2VEYXRhTG9hZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCog
cmVzdWx0KQoreworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID09IDEpCisgICAgICAgIG1fZGVm
ZXJNYWluUmVzb3VyY2VEYXRhTG9hZCA9IGNwcFZhcmlhbnRUb0Jvb2woYXJndW1lbnRzWzBdKTsK
K30KKworLy8KKy8vIFVuaW1wbGVtZW50ZWQgc3R1YnMKKy8vCisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmR1bXBBc1dlYkFyY2hpdmUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlcihj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQorewor
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpk
dW1wU2VsZWN0aW9uUmVjdChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFy
aWFudCogcmVzdWx0KQoreworICAgIG1fZHVtcFNlbGVjdGlvblJlY3QgPSB0cnVlOworICAgIHJl
c3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNwbGF5
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7
CisgICAgV2ViVmlld0hvc3QqIGhvc3QgPSBtX3NoZWxsLT53ZWJWaWV3SG9zdCgpOworICAgIGNv
bnN0IFdlYktpdDo6V2ViU2l6ZSYgc2l6ZSA9IG1fc2hlbGwtPndlYlZpZXcoKS0+c2l6ZSgpOwor
ICAgIFdlYlJlY3QgcmVjdCgwLCAwLCBzaXplLndpZHRoLCBzaXplLmhlaWdodCk7CisgICAgaG9z
dC0+dXBkYXRlUGFpbnRSZWN0KHJlY3QpOworICAgIGhvc3QtPnBhaW50SW52YWxpZGF0ZWRSZWdp
b24oKTsKKyAgICBob3N0LT5kaXNwbGF5UmVwYWludE1hc2soKTsKKyAgICByZXN1bHQtPnNldE51
bGwoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzcGxheUludmFsaWRhdGVk
UmVnaW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCit7CisgICAgV2ViVmlld0hvc3QqIGhvc3QgPSBtX3NoZWxsLT53ZWJWaWV3SG9zdCgpOwor
ICAgIGhvc3QtPnBhaW50SW52YWxpZGF0ZWRSZWdpb24oKTsKKyAgICBob3N0LT5kaXNwbGF5UmVw
YWludE1hc2soKTsKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6dGVzdFJlcGFpbnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCogcmVzdWx0KQoreworICAgIG1fdGVzdFJlcGFpbnQgPSB0cnVlOworICAgIHJlc3VsdC0+c2V0
TnVsbCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZXBhaW50U3dlZXBIb3Jp
em9udGFsbHkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQorewor
ICAgIG1fc3dlZXBIb3Jpem9udGFsbHkgPSB0cnVlOworICAgIHJlc3VsdC0+c2V0TnVsbCgpOwor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckJhY2tGb3J3YXJkTGlzdChjb25z
dCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAg
IHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjprZWVw
V2ViSGlzdG9yeShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgIENwcFZhcmlhbnQq
IHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c3RvcmVXZWJTY3JpcHRPYmplY3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsK
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWNjZXNzU3RvcmVkV2ViU2NyaXB0T2Jq
ZWN0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQp
Cit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6Om9iakNDbGFzc05hbWVPZihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjphZGREaXNhbGxvd2VkVVJMKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxs
KCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldENhbGxDbG9zZU9uV2ViVmll
d3MoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkK
K3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3Vt
ZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJv
YXJkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQp
Cit7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2wo
KSkgeworICAgICAgICBtX3NoZWxsLT5wcmVmZXJlbmNlcygpLT5qYXZhU2NyaXB0Q2FuQWNjZXNz
Q2xpcGJvYXJkID0gYXJndW1lbnRzWzBdLnZhbHVlLmJvb2xWYWx1ZTsKKyAgICAgICAgbV9zaGVs
bC0+YXBwbHlQcmVmZXJlbmNlcygpOworICAgIH0KKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30K
Kwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0WFNTQXVkaXRvckVuYWJsZWQoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBp
ZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKSB7CisgICAg
ICAgIG1fc2hlbGwtPnByZWZlcmVuY2VzKCktPlhTU0F1ZGl0b3JFbmFibGVkID0gYXJndW1lbnRz
WzBdLnZhbHVlLmJvb2xWYWx1ZTsKKyAgICAgICAgbV9zaGVsbC0+YXBwbHlQcmVmZXJlbmNlcygp
OworICAgIH0KKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZShjb25z
dCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAg
IHY4OjpIYW5kbGVTY29wZSBzY29wZTsKKyAgICBXZWJWZWN0b3I8djg6OkxvY2FsPHY4OjpWYWx1
ZT4gPiB2YWx1ZXM7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPj0gMiAmJiBhcmd1bWVudHNb
MF0uaXNOdW1iZXIoKSAmJiBhcmd1bWVudHNbMV0uaXNTdHJpbmcoKSkgeworICAgICAgICBXZWJT
Y3JpcHRTb3VyY2Ugc291cmNlKGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMV0pKTsK
KyAgICAgICAgLy8gVGhpcyByZWxpZXMgb24gdGhlIGlmcmFtZSBmb2N1c2luZyBpdHNlbGYgd2hl
biBpdCBsb2Fkcy4gVGhpcyBpcyBhIGJpdAorICAgICAgICAvLyBza2V0Y2h5LCBidXQgaXQgc2Vl
bXMgdG8gYmUgd2hhdCBvdGhlciB0ZXN0cyBkby4KKyAgICAgICAgbV9zaGVsbC0+d2ViVmlldygp
LT5mb2N1c2VkRnJhbWUoKS0+ZXhlY3V0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChhcmd1bWVudHNb
MF0udG9JbnQzMigpLCAmc291cmNlLCAxLCAxLCAmdmFsdWVzKTsKKyAgICB9CisgICAgcmVzdWx0
LT5zZXROdWxsKCk7CisgICAgLy8gU2luY2Ugb25seSBvbmUgc2NyaXB0IHdhcyBhZGRlZCwgb25s
eSBvbmUgcmVzdWx0IGlzIGV4cGVjdGVkCisgICAgaWYgKHZhbHVlcy5zaXplKCkgPT0gMSAmJiAh
dmFsdWVzWzBdLklzRW1wdHkoKSkgeworICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBzY3Jp
cHRWYWx1ZSA9IHZhbHVlc1swXTsKKyAgICAgICAgLy8gRklYTUU6IFRoZXJlIGFyZSBtYW55IG1v
cmUgdHlwZXMgdGhhdCBjYW4gYmUgaGFuZGxlZC4KKyAgICAgICAgaWYgKHNjcmlwdFZhbHVlLT5J
c1N0cmluZygpKSB7CisgICAgICAgICAgICB2ODo6U3RyaW5nOjpBc2NpaVZhbHVlIGFzY2lpVjgo
c2NyaXB0VmFsdWUpOworICAgICAgICAgICAgcmVzdWx0LT5zZXQoc3RkOjpzdHJpbmcoKmFzY2lp
VjgpKTsKKyAgICAgICAgfSBlbHNlIGlmIChzY3JpcHRWYWx1ZS0+SXNCb29sZWFuKCkpCisgICAg
ICAgICAgICByZXN1bHQtPnNldChzY3JpcHRWYWx1ZS0+VG9Cb29sZWFuKCktPlZhbHVlKCkpOwor
ICAgICAgICBlbHNlIGlmIChzY3JpcHRWYWx1ZS0+SXNOdW1iZXIoKSkgeworICAgICAgICAgICAg
aWYgKHNjcmlwdFZhbHVlLT5Jc0ludDMyKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LT5zZXQo
c2NyaXB0VmFsdWUtPlRvSW50MzIoKS0+VmFsdWUoKSk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgcmVzdWx0LT5zZXQoc2NyaXB0VmFsdWUtPlRvTnVtYmVyKCktPlZhbHVlKCkp
OworICAgICAgICB9IGVsc2UgaWYgKHNjcmlwdFZhbHVlLT5Jc051bGwoKSkKKyAgICAgICAgICAg
ICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgfQorfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChjb25zdCBDcHBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIGlmIChhcmd1bWVudHMuc2l6
ZSgpID49IDIgJiYgYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkgJiYgYXJndW1lbnRzWzFdLmlzU3Ry
aW5nKCkpIHsKKyAgICAgICAgV2ViU2NyaXB0U291cmNlIHNvdXJjZShjcHBWYXJpYW50VG9XZWJT
dHJpbmcoYXJndW1lbnRzWzFdKSk7CisgICAgICAgIC8vIFRoaXMgcmVsaWVzIG9uIHRoZSBpZnJh
bWUgZm9jdXNpbmcgaXRzZWxmIHdoZW4gaXQgbG9hZHMuIFRoaXMgaXMgYSBiaXQKKyAgICAgICAg
Ly8gc2tldGNoeSwgYnV0IGl0IHNlZW1zIHRvIGJlIHdoYXQgb3RoZXIgdGVzdHMgZG8uCisgICAg
ICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+Zm9jdXNlZEZyYW1lKCktPmV4ZWN1dGVTY3JpcHRJbklz
b2xhdGVkV29ybGQoYXJndW1lbnRzWzBdLnRvSW50MzIoKSwgJnNvdXJjZSwgMSwgMSk7CisgICAg
fQorICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsK
KworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDIgfHwgIWFyZ3VtZW50c1swXS5pc051bWJl
cigpIHx8ICFhcmd1bWVudHNbMV0uaXNTdHJpbmcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9zaGVsbC0+d2ViVmlldygpLT5mb2N1c2VkRnJhbWUoKS0+c2V0SXNvbGF0ZWRXb3JsZFNlY3Vy
aXR5T3JpZ2luKAorICAgICAgICBhcmd1bWVudHNbMF0udG9JbnQzMigpLAorICAgICAgICBXZWJT
ZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJn
dW1lbnRzWzFdKSkpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbGxvd1Vu
aXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50
cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAm
JiBhcmd1bWVudHNbMF0uaXNCb29sKCkpIHsKKyAgICAgICAgbV9zaGVsbC0+cHJlZmVyZW5jZXMo
KS0+YWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMgPSBhcmd1bWVudHNbMF0udmFsdWUu
Ym9vbFZhbHVlOworICAgICAgICBtX3NoZWxsLT5hcHBseVByZWZlcmVuY2VzKCk7CisgICAgfQor
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRBbGxvd0Rpc3BsYXlPZkluc2VjdXJlQ29udGVudChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgp
ID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkpCisgICAgICAgIG1fc2hlbGwtPndlYlBlcm1p
c3Npb25zKCktPnNldERpc3BsYXlpbmdJbnNlY3VyZUNvbnRlbnRBbGxvd2VkKGFyZ3VtZW50c1sw
XS50b0Jvb2xlYW4oKSk7CisKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaWYg
KGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkgeworICAgICAg
ICBtX3NoZWxsLT5wcmVmZXJlbmNlcygpLT5hbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMgPSBh
cmd1bWVudHNbMF0udmFsdWUuYm9vbFZhbHVlOworICAgICAgICBtX3NoZWxsLT5hcHBseVByZWZl
cmVuY2VzKCk7CisgICAgfQorICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRBbGxvd1J1bm5pbmdPZkluc2VjdXJlQ29udGVudChjb25zdCBD
cHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIGlm
IChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkpCisgICAgICAg
IG1fc2hlbGwtPndlYlBlcm1pc3Npb25zKCktPnNldFJ1bm5pbmdJbnNlY3VyZUNvbnRlbnRBbGxv
d2VkKGFyZ3VtZW50c1swXS52YWx1ZS5ib29sVmFsdWUpOworCisgICAgcmVzdWx0LT5zZXROdWxs
KCk7Cit9CisKKy8vIE5lZWQgdGhlc2UgY29udmVyc2lvbnMgYmVjYXVzZSB0aGUgZm9ybWF0IG9m
IHRoZSB2YWx1ZSBmb3IgYm9vbGVhbnMKKy8vIG1heSB2YXJ5IC0gZm9yIGV4YW1wbGUsIG9uIG1h
YyAiMSIgYW5kICIwIiBhcmUgdXNlZCBmb3IgYm9vbGVhbi4KK2Jvb2wgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmNwcFZhcmlhbnRUb0Jvb2woY29uc3QgQ3BwVmFyaWFudCYgdmFsdWUpCit7CisgICAg
aWYgKHZhbHVlLmlzQm9vbCgpKQorICAgICAgICByZXR1cm4gdmFsdWUudG9Cb29sZWFuKCk7Cisg
ICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpCisgICAgICAgIHJldHVybiB2YWx1ZS50b0ludDMyKCk7
CisgICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgc3RyaW5nIHZhbHVlU3RyaW5n
ID0gdmFsdWUudG9TdHJpbmcoKTsKKyAgICAgICAgaWYgKHZhbHVlU3RyaW5nID09ICJ0cnVlIiB8
fCB2YWx1ZVN0cmluZyA9PSAiMSIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
aWYgKHZhbHVlU3RyaW5nID09ICJmYWxzZSIgfHwgdmFsdWVTdHJpbmcgPT0gIjAiKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBsb2dFcnJvclRvQ29uc29sZSgiSW52YWxp
ZCB2YWx1ZS4gRXhwZWN0ZWQgYm9vbGVhbiB2YWx1ZS4iKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2ludDMyX3QgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNwcFZhcmlhbnRUb0ludDMyKGNvbnN0
IENwcFZhcmlhbnQmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQorICAgICAg
ICByZXR1cm4gdmFsdWUudG9JbnQzMigpOworICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7Cisg
ICAgICAgIHN0cmluZyBzdHJpbmdTb3VyY2UgPSB2YWx1ZS50b1N0cmluZygpOworICAgICAgICBj
b25zdCBjaGFyKiBzb3VyY2UgPSBzdHJpbmdTb3VyY2UuZGF0YSgpOworICAgICAgICBjaGFyKiBl
bmQ7CisgICAgICAgIGxvbmcgbnVtYmVyID0gc3RydG9sKHNvdXJjZSwgJmVuZCwgMTApOworICAg
ICAgICBpZiAoZW5kID09IHNvdXJjZSArIHN0cmluZ1NvdXJjZS5sZW5ndGgoKSAmJiBudW1iZXIg
Pj0gbnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpICYmIG51bWJlciA8PSBudW1lcmljX2xp
bWl0czxpbnQzMl90Pjo6bWF4KCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50
MzJfdD4obnVtYmVyKTsKKyAgICB9CisgICAgbG9nRXJyb3JUb0NvbnNvbGUoIkludmFsaWQgdmFs
dWUgZm9yIHByZWZlcmVuY2UuIEV4cGVjdGVkIGludGVnZXIgdmFsdWUuIik7CisgICAgcmV0dXJu
IDA7Cit9CisKK1dlYlN0cmluZyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y3BwVmFyaWFudFRvV2Vi
U3RyaW5nKGNvbnN0IENwcFZhcmlhbnQmIHZhbHVlKQoreworICAgIGlmICghdmFsdWUuaXNTdHJp
bmcoKSkgeworICAgICAgICBsb2dFcnJvclRvQ29uc29sZSgiSW52YWxpZCB2YWx1ZSBmb3IgcHJl
ZmVyZW5jZS4gRXhwZWN0ZWQgc3RyaW5nIHZhbHVlLiIpOworICAgICAgICByZXR1cm4gV2ViU3Ry
aW5nKCk7CisgICAgfQorICAgIHJldHVybiBXZWJTdHJpbmc6OmZyb21VVEY4KHZhbHVlLnRvU3Ry
aW5nKCkpOworfQorCitWZWN0b3I8V2ViU3RyaW5nPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y3Bw
VmFyaWFudFRvV2ViU3RyaW5nQXJyYXkoY29uc3QgQ3BwVmFyaWFudCYgdmFsdWUpCit7CisgICAg
aWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgIGxvZ0Vycm9yVG9Db25zb2xlKCJJbnZh
bGlkIHZhbHVlIGZvciBwcmVmZXJlbmNlLiBFeHBlY3RlZCBvYmplY3QgdmFsdWUuIik7CisgICAg
ICAgIHJldHVybiBWZWN0b3I8V2ViU3RyaW5nPigpOworICAgIH0KKyAgICBWZWN0b3I8V2ViU3Ry
aW5nPiByZXN1bHRWZWN0b3I7CisgICAgVmVjdG9yPHN0cmluZz4gc3RyaW5nVmVjdG9yID0gdmFs
dWUudG9TdHJpbmdWZWN0b3IoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cmluZ1Zl
Y3Rvci5zaXplKCk7ICsraSkKKyAgICAgICAgcmVzdWx0VmVjdG9yLmFwcGVuZChXZWJTdHJpbmc6
OmZyb21VVEY4KHN0cmluZ1ZlY3RvcltpXS5jX3N0cigpKSk7CisgICAgcmV0dXJuIHJlc3VsdFZl
Y3RvcjsKK30KKworLy8gU2V0cyBtYXAgYmFzZWQgb24gc2NyaXB0Rm9udFBhaXJzLCBhIGNvbGxh
cHNlZCB2ZWN0b3Igb2YgcGFpcnMgb2YgSVNPIDE1OTI0CisvLyBmb3VyLWxldHRlciBzY3JpcHQg
Y29kZSBhbmQgZm9udCBzdWNoIGFzOgorLy8geyAiQXJhYiIsICJNeSBBcmFiaWMgRm9udCIsICJH
cmVrIiwgIk15IEdyZWVrIEZvbnQiIH0KK3N0YXRpYyB2b2lkIHNldEZvbnRNYXAoV2ViUHJlZmVy
ZW5jZXM6OlNjcmlwdEZvbnRGYW1pbHlNYXAmIG1hcCwgY29uc3QgVmVjdG9yPFdlYlN0cmluZz4m
IHNjcmlwdEZvbnRQYWlycykKK3sKKyAgICBtYXAuY2xlYXIoKTsKKyAgICBzaXplX3QgaSA9IDA7
CisgICAgd2hpbGUgKGkgKyAxIDwgc2NyaXB0Rm9udFBhaXJzLnNpemUoKSkgeworICAgICAgICBj
b25zdCBXZWJTdHJpbmcmIHNjcmlwdCA9IHNjcmlwdEZvbnRQYWlyc1tpKytdOworICAgICAgICBj
b25zdCBXZWJTdHJpbmcmIGZvbnQgPSBzY3JpcHRGb250UGFpcnNbaSsrXTsKKworICAgICAgICBp
bnQzMl90IGNvZGUgPSB1X2dldFByb3BlcnR5VmFsdWVFbnVtKFVDSEFSX1NDUklQVCwgc2NyaXB0
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBpZiAoY29kZSA+PSAwICYmIGNvZGUgPCBVU0NSSVBU
X0NPREVfTElNSVQpCisgICAgICAgICAgICBtYXAuc2V0KHN0YXRpY19jYXN0PGludD4oY29kZSks
IGZvbnQpOworICAgIH0KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3ZlcnJpZGVQ
cmVmZXJlbmNlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgaWYgKGFyZ3VtZW50cy5zaXpl
KCkgIT0gMiB8fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHN0cmluZyBrZXkgPSBhcmd1bWVudHNbMF0udG9TdHJpbmcoKTsKKyAgICBDcHBWYXJpYW50
IHZhbHVlID0gYXJndW1lbnRzWzFdOworICAgIFdlYlByZWZlcmVuY2VzKiBwcmVmcyA9IG1fc2hl
bGwtPnByZWZlcmVuY2VzKCk7CisgICAgaWYgKGtleSA9PSAiV2ViS2l0U3RhbmRhcmRGb250IikK
KyAgICAgICAgcHJlZnMtPnN0YW5kYXJkRm9udEZhbWlseSA9IGNwcFZhcmlhbnRUb1dlYlN0cmlu
Zyh2YWx1ZSk7CisgICAgZWxzZSBpZiAoa2V5ID09ICJXZWJLaXRGaXhlZEZvbnQiKQorICAgICAg
ICBwcmVmcy0+Zml4ZWRGb250RmFtaWx5ID0gY3BwVmFyaWFudFRvV2ViU3RyaW5nKHZhbHVlKTsK
KyAgICBlbHNlIGlmIChrZXkgPT0gIldlYktpdFNlcmlmRm9udCIpCisgICAgICAgIHByZWZzLT5z
ZXJpZkZvbnRGYW1pbHkgPSBjcHBWYXJpYW50VG9XZWJTdHJpbmcodmFsdWUpOworICAgIGVsc2Ug
aWYgKGtleSA9PSAiV2ViS2l0U2Fuc1NlcmlmRm9udCIpCisgICAgICAgIHByZWZzLT5zYW5zU2Vy
aWZGb250RmFtaWx5ID0gY3BwVmFyaWFudFRvV2ViU3RyaW5nKHZhbHVlKTsKKyAgICBlbHNlIGlm
IChrZXkgPT0gIldlYktpdEN1cnNpdmVGb250IikKKyAgICAgICAgcHJlZnMtPmN1cnNpdmVGb250
RmFtaWx5ID0gY3BwVmFyaWFudFRvV2ViU3RyaW5nKHZhbHVlKTsKKyAgICBlbHNlIGlmIChrZXkg
PT0gIldlYktpdEZhbnRhc3lGb250IikKKyAgICAgICAgcHJlZnMtPmZhbnRhc3lGb250RmFtaWx5
ID0gY3BwVmFyaWFudFRvV2ViU3RyaW5nKHZhbHVlKTsKKyAgICBlbHNlIGlmIChrZXkgPT0gIldl
YktpdFN0YW5kYXJkRm9udE1hcCIpCisgICAgICAgIHNldEZvbnRNYXAocHJlZnMtPnN0YW5kYXJk
Rm9udE1hcCwgY3BwVmFyaWFudFRvV2ViU3RyaW5nQXJyYXkodmFsdWUpKTsKKyAgICBlbHNlIGlm
IChrZXkgPT0gIldlYktpdEZpeGVkRm9udE1hcCIpCisgICAgICAgIHNldEZvbnRNYXAocHJlZnMt
PmZpeGVkRm9udE1hcCwgY3BwVmFyaWFudFRvV2ViU3RyaW5nQXJyYXkodmFsdWUpKTsKKyAgICBl
bHNlIGlmIChrZXkgPT0gIldlYktpdFNlcmlmRm9udE1hcCIpCisgICAgICAgIHNldEZvbnRNYXAo
cHJlZnMtPnNlcmlmRm9udE1hcCwgY3BwVmFyaWFudFRvV2ViU3RyaW5nQXJyYXkodmFsdWUpKTsK
KyAgICBlbHNlIGlmIChrZXkgPT0gIldlYktpdFNhbnNTZXJpZkZvbnRNYXAiKQorICAgICAgICBz
ZXRGb250TWFwKHByZWZzLT5zYW5zU2VyaWZGb250TWFwLCBjcHBWYXJpYW50VG9XZWJTdHJpbmdB
cnJheSh2YWx1ZSkpOworICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0Q3Vyc2l2ZUZvbnRNYXAi
KQorICAgICAgICBzZXRGb250TWFwKHByZWZzLT5jdXJzaXZlRm9udE1hcCwgY3BwVmFyaWFudFRv
V2ViU3RyaW5nQXJyYXkodmFsdWUpKTsKKyAgICBlbHNlIGlmIChrZXkgPT0gIldlYktpdEZhbnRh
c3lGb250TWFwIikKKyAgICAgICAgc2V0Rm9udE1hcChwcmVmcy0+ZmFudGFzeUZvbnRNYXAsIGNw
cFZhcmlhbnRUb1dlYlN0cmluZ0FycmF5KHZhbHVlKSk7CisgICAgZWxzZSBpZiAoa2V5ID09ICJX
ZWJLaXREZWZhdWx0Rm9udFNpemUiKQorICAgICAgICBwcmVmcy0+ZGVmYXVsdEZvbnRTaXplID0g
Y3BwVmFyaWFudFRvSW50MzIodmFsdWUpOworICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0RGVm
YXVsdEZpeGVkRm9udFNpemUiKQorICAgICAgICBwcmVmcy0+ZGVmYXVsdEZpeGVkRm9udFNpemUg
PSBjcHBWYXJpYW50VG9JbnQzMih2YWx1ZSk7CisgICAgZWxzZSBpZiAoa2V5ID09ICJXZWJLaXRN
aW5pbXVtRm9udFNpemUiKQorICAgICAgICBwcmVmcy0+bWluaW11bUZvbnRTaXplID0gY3BwVmFy
aWFudFRvSW50MzIodmFsdWUpOworICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0TWluaW11bUxv
Z2ljYWxGb250U2l6ZSIpCisgICAgICAgIHByZWZzLT5taW5pbXVtTG9naWNhbEZvbnRTaXplID0g
Y3BwVmFyaWFudFRvSW50MzIodmFsdWUpOworICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0RGVm
YXVsdFRleHRFbmNvZGluZ05hbWUiKQorICAgICAgICBwcmVmcy0+ZGVmYXVsdFRleHRFbmNvZGlu
Z05hbWUgPSBjcHBWYXJpYW50VG9XZWJTdHJpbmcodmFsdWUpOworICAgIGVsc2UgaWYgKGtleSA9
PSAiV2ViS2l0SmF2YVNjcmlwdEVuYWJsZWQiKQorICAgICAgICBwcmVmcy0+amF2YVNjcmlwdEVu
YWJsZWQgPSBjcHBWYXJpYW50VG9Cb29sKHZhbHVlKTsKKyAgICBlbHNlIGlmIChrZXkgPT0gIldl
YktpdFdlYlNlY3VyaXR5RW5hYmxlZCIpCisgICAgICAgIHByZWZzLT53ZWJTZWN1cml0eUVuYWJs
ZWQgPSBjcHBWYXJpYW50VG9Cb29sKHZhbHVlKTsKKyAgICBlbHNlIGlmIChrZXkgPT0gIldlYktp
dEphdmFTY3JpcHRDYW5PcGVuV2luZG93c0F1dG9tYXRpY2FsbHkiKQorICAgICAgICBwcmVmcy0+
amF2YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0b21hdGljYWxseSA9IGNwcFZhcmlhbnRUb0Jvb2wo
dmFsdWUpOworICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0RGlzcGxheUltYWdlc0tleSIpCisg
ICAgICAgIHByZWZzLT5sb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkgPSBjcHBWYXJpYW50VG9Cb29s
KHZhbHVlKTsKKyAgICBlbHNlIGlmIChrZXkgPT0gIldlYktpdFBsdWdpbnNFbmFibGVkIikKKyAg
ICAgICAgcHJlZnMtPnBsdWdpbnNFbmFibGVkID0gY3BwVmFyaWFudFRvQm9vbCh2YWx1ZSk7Cisg
ICAgZWxzZSBpZiAoa2V5ID09ICJXZWJLaXRET01QYXN0ZUFsbG93ZWRQcmVmZXJlbmNlS2V5IikK
KyAgICAgICAgcHJlZnMtPkRPTVBhc3RlQWxsb3dlZCA9IGNwcFZhcmlhbnRUb0Jvb2wodmFsdWUp
OworICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZFByZWZl
cmVuY2VLZXkiKQorICAgICAgICBwcmVmcy0+ZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCA9IGNwcFZh
cmlhbnRUb0Jvb2wodmFsdWUpOworICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0U2hyaW5rc1N0
YW5kYWxvbmVJbWFnZXNUb0ZpdCIpCisgICAgICAgIHByZWZzLT5zaHJpbmtzU3RhbmRhbG9uZUlt
YWdlc1RvRml0ID0gY3BwVmFyaWFudFRvQm9vbCh2YWx1ZSk7CisgICAgZWxzZSBpZiAoa2V5ID09
ICJXZWJLaXRUZXh0QXJlYXNBcmVSZXNpemFibGUiKQorICAgICAgICBwcmVmcy0+dGV4dEFyZWFz
QXJlUmVzaXphYmxlID0gY3BwVmFyaWFudFRvQm9vbCh2YWx1ZSk7CisgICAgZWxzZSBpZiAoa2V5
ID09ICJXZWJLaXRKYXZhRW5hYmxlZCIpCisgICAgICAgIHByZWZzLT5qYXZhRW5hYmxlZCA9IGNw
cFZhcmlhbnRUb0Jvb2wodmFsdWUpOworICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0VXNlc1Bh
Z2VDYWNoZVByZWZlcmVuY2VLZXkiKQorICAgICAgICBwcmVmcy0+dXNlc1BhZ2VDYWNoZSA9IGNw
cFZhcmlhbnRUb0Jvb2wodmFsdWUpOworICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0UGFnZUNh
Y2hlU3VwcG9ydHNQbHVnaW5zUHJlZmVyZW5jZUtleSIpCisgICAgICAgIHByZWZzLT5wYWdlQ2Fj
aGVTdXBwb3J0c1BsdWdpbnMgPSBjcHBWYXJpYW50VG9Cb29sKHZhbHVlKTsKKyAgICBlbHNlIGlm
IChrZXkgPT0gIldlYktpdEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQiKQorICAgICAgICBw
cmVmcy0+amF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZCA9IGNwcFZhcmlhbnRUb0Jvb2wodmFs
dWUpOworICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0WFNTQXVkaXRvckVuYWJsZWQiKQorICAg
ICAgICBwcmVmcy0+WFNTQXVkaXRvckVuYWJsZWQgPSBjcHBWYXJpYW50VG9Cb29sKHZhbHVlKTsK
KyAgICBlbHNlIGlmIChrZXkgPT0gIldlYktpdExvY2FsU3RvcmFnZUVuYWJsZWRQcmVmZXJlbmNl
S2V5IikKKyAgICAgICAgcHJlZnMtPmxvY2FsU3RvcmFnZUVuYWJsZWQgPSBjcHBWYXJpYW50VG9C
b29sKHZhbHVlKTsKKyAgICBlbHNlIGlmIChrZXkgPT0gIldlYktpdE9mZmxpbmVXZWJBcHBsaWNh
dGlvbkNhY2hlRW5hYmxlZCIpCisgICAgICAgIHByZWZzLT5vZmZsaW5lV2ViQXBwbGljYXRpb25D
YWNoZUVuYWJsZWQgPSBjcHBWYXJpYW50VG9Cb29sKHZhbHVlKTsKKyAgICBlbHNlIGlmIChrZXkg
PT0gIldlYktpdFRhYlRvTGlua3NQcmVmZXJlbmNlS2V5IikKKyAgICAgICAgcHJlZnMtPnRhYnNU
b0xpbmtzID0gY3BwVmFyaWFudFRvQm9vbCh2YWx1ZSk7CisgICAgZWxzZSBpZiAoa2V5ID09ICJX
ZWJLaXRXZWJHTEVuYWJsZWQiKQorICAgICAgICBwcmVmcy0+ZXhwZXJpbWVudGFsV2ViR0xFbmFi
bGVkID0gY3BwVmFyaWFudFRvQm9vbCh2YWx1ZSk7CisgICAgZWxzZSBpZiAoa2V5ID09ICJXZWJL
aXRDU1NSZWdpb25zRW5hYmxlZCIpCisgICAgICAgIHByZWZzLT5leHBlcmltZW50YWxDU1NSZWdp
b25zRW5hYmxlZCA9IGNwcFZhcmlhbnRUb0Jvb2wodmFsdWUpOworICAgIGVsc2UgaWYgKGtleSA9
PSAiV2ViS2l0Q1NTR3JpZExheW91dEVuYWJsZWQiKQorICAgICAgICBwcmVmcy0+ZXhwZXJpbWVu
dGFsQ1NTR3JpZExheW91dEVuYWJsZWQgPSBjcHBWYXJpYW50VG9Cb29sKHZhbHVlKTsKKyAgICBl
bHNlIGlmIChrZXkgPT0gIldlYktpdEh5cGVybGlua0F1ZGl0aW5nRW5hYmxlZCIpCisgICAgICAg
IHByZWZzLT5oeXBlcmxpbmtBdWRpdGluZ0VuYWJsZWQgPSBjcHBWYXJpYW50VG9Cb29sKHZhbHVl
KTsKKyAgICBlbHNlIGlmIChrZXkgPT0gIldlYktpdEVuYWJsZUNhcmV0QnJvd3NpbmciKQorICAg
ICAgICBwcmVmcy0+Y2FyZXRCcm93c2luZ0VuYWJsZWQgPSBjcHBWYXJpYW50VG9Cb29sKHZhbHVl
KTsKKyAgICBlbHNlIGlmIChrZXkgPT0gIldlYktpdEFsbG93RGlzcGxheWluZ0luc2VjdXJlQ29u
dGVudCIpCisgICAgICAgIHByZWZzLT5hbGxvd0Rpc3BsYXlPZkluc2VjdXJlQ29udGVudCA9IGNw
cFZhcmlhbnRUb0Jvb2wodmFsdWUpOworICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0QWxsb3dS
dW5uaW5nSW5zZWN1cmVDb250ZW50IikKKyAgICAgICAgcHJlZnMtPmFsbG93UnVubmluZ09mSW5z
ZWN1cmVDb250ZW50ID0gY3BwVmFyaWFudFRvQm9vbCh2YWx1ZSk7CisgICAgZWxzZSBpZiAoa2V5
ID09ICJXZWJLaXRDU1NDdXN0b21GaWx0ZXJFbmFibGVkIikKKyAgICAgICAgcHJlZnMtPmNzc0N1
c3RvbUZpbHRlckVuYWJsZWQgPSBjcHBWYXJpYW50VG9Cb29sKHZhbHVlKTsKKyAgICBlbHNlIGlm
IChrZXkgPT0gIldlYktpdFdlYkF1ZGlvRW5hYmxlZCIpIHsKKyAgICAgICAgQVNTRVJUKGNwcFZh
cmlhbnRUb0Jvb2wodmFsdWUpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdHJpbmcgbWVzc2Fn
ZSgiSW52YWxpZCBuYW1lIGZvciBwcmVmZXJlbmNlOiAiKTsKKyAgICAgICAgbWVzc2FnZS5hcHBl
bmQoa2V5KTsKKyAgICAgICAgbG9nRXJyb3JUb0NvbnNvbGUobWVzc2FnZSk7CisgICAgfQorICAg
IG1fc2hlbGwtPmFwcGx5UHJlZmVyZW5jZXMoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6ZmFsbGJhY2tNZXRob2QoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCog
cmVzdWx0KQoreworICAgIHByaW50ZigiQ09OU09MRSBNRVNTQUdFOiBKYXZhU2NyaXB0IEVSUk9S
OiB1bmtub3duIG1ldGhvZCBjYWxsZWQgb24gTGF5b3V0VGVzdENvbnRyb2xsZXJcbiIpOworICAg
IHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRP
cmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50
cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworCisgICAg
aWYgKGFyZ3VtZW50cy5zaXplKCkgIT0gNCB8fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkgfHwg
IWFyZ3VtZW50c1sxXS5pc1N0cmluZygpCisgICAgICAgIHx8ICFhcmd1bWVudHNbMl0uaXNTdHJp
bmcoKSB8fCAhYXJndW1lbnRzWzNdLmlzQm9vbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBX
ZWJLaXQ6OldlYlVSTCB1cmwoR1VSTChhcmd1bWVudHNbMF0udG9TdHJpbmcoKSkpOworICAgIGlm
ICghdXJsLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViU2VjdXJpdHlQb2xp
Y3k6OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KAorICAgICAgICB1cmwsCisgICAgICAg
IGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMV0pLAorICAgICAgICBjcHBWYXJpYW50
VG9XZWJTdHJpbmcoYXJndW1lbnRzWzJdKSwKKyAgICAgICAgYXJndW1lbnRzWzNdLnRvQm9vbGVh
bigpKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlT3JpZ2luQWNjZXNz
V2hpdGVsaXN0RW50cnkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlh
bnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKKworICAgIGlmIChhcmd1bWVu
dHMuc2l6ZSgpICE9IDQgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpIHx8ICFhcmd1bWVudHNb
MV0uaXNTdHJpbmcoKQorICAgICAgICB8fCAhYXJndW1lbnRzWzJdLmlzU3RyaW5nKCkgfHwgIWFy
Z3VtZW50c1szXS5pc0Jvb2woKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViS2l0OjpXZWJV
UkwgdXJsKEdVUkwoYXJndW1lbnRzWzBdLnRvU3RyaW5nKCkpKTsKKyAgICBpZiAoIXVybC5pc1Zh
bGlkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYlNlY3VyaXR5UG9saWN5OjpyZW1vdmVP
cmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSgKKyAgICAgICAgdXJsLAorICAgICAgICBjcHBWYXJp
YW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzFdKSwKKyAgICAgICAgY3BwVmFyaWFudFRvV2ViU3Ry
aW5nKGFyZ3VtZW50c1syXSksCisgICAgICAgIGFyZ3VtZW50c1szXS50b0Jvb2xlYW4oKSk7Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQWxsRGF0YWJhc2VzKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVz
dWx0LT5zZXROdWxsKCk7CisgICAgd2Via2l0X3N1cHBvcnQ6OkNsZWFyQWxsRGF0YWJhc2VzKCk7
Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERhdGFiYXNlUXVvdGEoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBy
ZXN1bHQtPnNldE51bGwoKTsKKyAgICBpZiAoKGFyZ3VtZW50cy5zaXplKCkgPj0gMSkgJiYgYXJn
dW1lbnRzWzBdLmlzTnVtYmVyKCkpCisgICAgICAgIHdlYmtpdF9zdXBwb3J0OjpTZXREYXRhYmFz
ZVF1b3RhKGFyZ3VtZW50c1swXS50b0ludDMyKCkpOworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRQT1NJWExvY2FsZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywg
Q3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIGlmIChh
cmd1bWVudHMuc2l6ZSgpID09IDEgJiYgYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpCisgICAgICAg
IHNldGxvY2FsZShMQ19BTEwsIGFyZ3VtZW50c1swXS50b1N0cmluZygpLmNfc3RyKCkpOworfQor
CisvLyBQYXJzZSBhIHNpbmdsZSBhcmd1bWVudC4gVGhlIG1ldGhvZCByZXR1cm5zIHRydWUgaWYg
dGhlcmUgaXMgYW4gYXJndW1lbnQgdGhhdAorLy8gaXMgYSBudW1iZXIgb3IgaWYgdGhlcmUgaXMg
bm8gYXJndW1lbnQgYXQgYWxsLiBJdCByZXR1cm5zIGZhbHNlIG9ubHkgaWYgdGhlcmUKKy8vIGlz
IHNvbWUgYXJndW1lbnQgdGhhdCBpcyBub3QgYSBudW1iZXIuIFRoZSB2YWx1ZSBwYXJhbWV0ZXIg
aXMgZmlsbGVkIHdpdGggdGhlCisvLyBwYXJzZWQgbnVtYmVyLCBvciBnaXZlbiB0aGUgZGVmYXVs
dCBpZiB0aGVyZSBpcyBubyBhcmd1bWVudC4KK3N0YXRpYyBib29sIHBhcnNlQ3BwQXJndW1lbnRJ
bnQzMihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgaW50IGFyZ0luZGV4LCBpbnQq
IHZhbHVlLCBpbnQgZGVmYXVsdFZhbHVlKQoreworICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+KGFy
Z3VtZW50cy5zaXplKCkpID4gYXJnSW5kZXgpIHsKKyAgICAgICAgaWYgKCFhcmd1bWVudHNbYXJn
SW5kZXhdLmlzTnVtYmVyKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICp2
YWx1ZSA9IGFyZ3VtZW50c1thcmdJbmRleF0udG9JbnQzMigpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgKnZhbHVlID0gZGVmYXVsdFZhbHVlOworICAgIHJldHVybiB0cnVlOwor
fQorCitzdGF0aWMgYm9vbCBwYXJzZVBhZ2VTaXplUGFyYW1ldGVycyhjb25zdCBDcHBBcmd1bWVu
dExpc3QmIGFyZ3VtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBhcmdPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHBh
Z2VXaWR0aEluUGl4ZWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
KiBwYWdlSGVpZ2h0SW5QaXhlbHMpCit7CisgICAgLy8gV2ViS2l0IGlzIHVzaW5nIHRoZSB3aW5k
b3cgd2lkdGgvaGVpZ2h0IG9mIER1bXBSZW5kZXJUcmVlIGFzIHRoZQorICAgIC8vIGRlZmF1bHQg
dmFsdWUgb2YgdGhlIHBhZ2Ugc2l6ZS4KKyAgICAvLyBGSVhNRTogc2hhcmUgdGhlIGRlZmF1bHQg
dmFsdWVzIHdpdGggb3RoZXIgcG9ydHMuCisgICAgaW50IGFyZ0NvdW50ID0gc3RhdGljX2Nhc3Q8
aW50Pihhcmd1bWVudHMuc2l6ZSgpKSAtIGFyZ09mZnNldDsKKyAgICBpZiAoYXJnQ291bnQgJiYg
YXJnQ291bnQgIT0gMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghcGFyc2VDcHBB
cmd1bWVudEludDMyKGFyZ3VtZW50cywgYXJnT2Zmc2V0LCBwYWdlV2lkdGhJblBpeGVscywgODAw
KQorICAgICAgICB8fCAhcGFyc2VDcHBBcmd1bWVudEludDMyKGFyZ3VtZW50cywgYXJnT2Zmc2V0
ICsgMSwgcGFnZUhlaWdodEluUGl4ZWxzLCA2MDApKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIHBhcnNlUGFnZU51bWJlcihjb25zdCBD
cHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgaW50IGFyZ09mZnNldCwgaW50KiBwYWdlTnVtYmVy
KQoreworICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+KGFyZ3VtZW50cy5zaXplKCkpID4gYXJnT2Zm
c2V0ICsgMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghcGFyc2VDcHBBcmd1bWVu
dEludDMyKGFyZ3VtZW50cywgYXJnT2Zmc2V0LCBwYWdlTnVtYmVyLCAwKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBwYXJzZVBhZ2VO
dW1iZXJTaXplTWFyZ2lucyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgaW50IGFy
Z09mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogcGFn
ZU51bWJlciwgaW50KiB3aWR0aCwgaW50KiBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQqIG1hcmdpblRvcCwgaW50KiBtYXJnaW5SaWdodCwgaW50KiBt
YXJnaW5Cb3R0b20sIGludCogbWFyZ2luTGVmdCkKK3sKKyAgICBpbnQgYXJnQ291bnQgPSBzdGF0
aWNfY2FzdDxpbnQ+KGFyZ3VtZW50cy5zaXplKCkpIC0gYXJnT2Zmc2V0OworICAgIGlmIChhcmdD
b3VudCAmJiBhcmdDb3VudCAhPSA3KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFw
YXJzZUNwcEFyZ3VtZW50SW50MzIoYXJndW1lbnRzLCBhcmdPZmZzZXQsIHBhZ2VOdW1iZXIsIDAp
CisgICAgICAgIHx8ICFwYXJzZUNwcEFyZ3VtZW50SW50MzIoYXJndW1lbnRzLCBhcmdPZmZzZXQg
KyAxLCB3aWR0aCwgMCkKKyAgICAgICAgfHwgIXBhcnNlQ3BwQXJndW1lbnRJbnQzMihhcmd1bWVu
dHMsIGFyZ09mZnNldCArIDIsIGhlaWdodCwgMCkKKyAgICAgICAgfHwgIXBhcnNlQ3BwQXJndW1l
bnRJbnQzMihhcmd1bWVudHMsIGFyZ09mZnNldCArIDMsIG1hcmdpblRvcCwgMCkKKyAgICAgICAg
fHwgIXBhcnNlQ3BwQXJndW1lbnRJbnQzMihhcmd1bWVudHMsIGFyZ09mZnNldCArIDQsIG1hcmdp
blJpZ2h0LCAwKQorICAgICAgICB8fCAhcGFyc2VDcHBBcmd1bWVudEludDMyKGFyZ3VtZW50cywg
YXJnT2Zmc2V0ICsgNSwgbWFyZ2luQm90dG9tLCAwKQorICAgICAgICB8fCAhcGFyc2VDcHBBcmd1
bWVudEludDMyKGFyZ3VtZW50cywgYXJnT2Zmc2V0ICsgNiwgbWFyZ2luTGVmdCwgMCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0UHJpbnRpbmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMs
IENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBzZXRJc1ByaW50aW5nKHRydWUpOworICAgIHJl
c3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpwYWdlU2l6
ZUFuZE1hcmdpbnNJblBpeGVscyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0KCIiKTsKKyAgICBpbnQgcGFnZU51
bWJlciA9IDA7CisgICAgaW50IHdpZHRoID0gMDsKKyAgICBpbnQgaGVpZ2h0ID0gMDsKKyAgICBp
bnQgbWFyZ2luVG9wID0gMDsKKyAgICBpbnQgbWFyZ2luUmlnaHQgPSAwOworICAgIGludCBtYXJn
aW5Cb3R0b20gPSAwOworICAgIGludCBtYXJnaW5MZWZ0ID0gMDsKKyAgICBpZiAoIXBhcnNlUGFn
ZU51bWJlclNpemVNYXJnaW5zKGFyZ3VtZW50cywgMCwgJnBhZ2VOdW1iZXIsICZ3aWR0aCwgJmhl
aWdodCwgJm1hcmdpblRvcCwgJm1hcmdpblJpZ2h0LCAmbWFyZ2luQm90dG9tLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1hcmdpbkxlZnQpKQorICAgICAgICByZXR1cm47
CisKKyAgICBXZWJGcmFtZSogZnJhbWUgPSBtX3NoZWxsLT53ZWJWaWV3KCktPm1haW5GcmFtZSgp
OworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICBXZWJTaXplIHBhZ2VTaXpl
KHdpZHRoLCBoZWlnaHQpOworICAgIGZyYW1lLT5wYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVscyhw
YWdlTnVtYmVyLCBwYWdlU2l6ZSwgbWFyZ2luVG9wLCBtYXJnaW5SaWdodCwgbWFyZ2luQm90dG9t
LCBtYXJnaW5MZWZ0KTsKKyAgICBzdHJpbmdzdHJlYW0gcmVzdWx0U3RyaW5nOworICAgIHJlc3Vs
dFN0cmluZyA8PCAiKCIgPDwgcGFnZVNpemUud2lkdGggPDwgIiwgIiA8PCBwYWdlU2l6ZS5oZWln
aHQgPDwgIikgIiA8PCBtYXJnaW5Ub3AgPDwgIiAiIDw8IG1hcmdpblJpZ2h0IDw8ICIgIgorICAg
ICAgICAgICAgICAgICA8PCBtYXJnaW5Cb3R0b20gPDwgIiAiIDw8IG1hcmdpbkxlZnQ7CisgICAg
cmVzdWx0LT5zZXQocmVzdWx0U3RyaW5nLnN0cigpKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6aGFzQ3VzdG9tUGFnZVNpemVTdHlsZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0KGZhbHNlKTsK
KyAgICBpbnQgcGFnZUluZGV4ID0gMDsKKyAgICBpZiAoIXBhcnNlUGFnZU51bWJlcihhcmd1bWVu
dHMsIDAsICZwYWdlSW5kZXgpKQorICAgICAgICByZXR1cm47CisgICAgV2ViRnJhbWUqIGZyYW1l
ID0gbV9zaGVsbC0+d2ViVmlldygpLT5tYWluRnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAg
ICAgICByZXR1cm47CisgICAgcmVzdWx0LT5zZXQoZnJhbWUtPmhhc0N1c3RvbVBhZ2VTaXplU3R5
bGUocGFnZUluZGV4KSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhZ2VQcm9w
ZXJ0eShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0
KQoreworICAgIHJlc3VsdC0+c2V0KCIiKTsKKyAgICBpbnQgcGFnZU51bWJlciA9IDA7CisgICAg
aWYgKCFwYXJzZVBhZ2VOdW1iZXIoYXJndW1lbnRzLCAxLCAmcGFnZU51bWJlcikpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAoIWFyZ3VtZW50c1swXS5pc1N0cmluZygpKQorICAgICAgICByZXR1
cm47CisgICAgV2ViRnJhbWUqIGZyYW1lID0gbV9zaGVsbC0+d2ViVmlldygpLT5tYWluRnJhbWUo
KTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgV2ViU2l6ZSBwYWdlU2l6
ZSg4MDAsIDgwMCk7CisgICAgZnJhbWUtPnByaW50QmVnaW4ocGFnZVNpemUpOworICAgIHJlc3Vs
dC0+c2V0KGZyYW1lLT5wYWdlUHJvcGVydHkoY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50
c1swXSksIHBhZ2VOdW1iZXIpLnV0ZjgoKSk7CisgICAgZnJhbWUtPnByaW50RW5kKCk7Cit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGFnZXMoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNl
dE51bGwoKTsKKyAgICBpbnQgcGFnZVdpZHRoSW5QaXhlbHMgPSAwOworICAgIGludCBwYWdlSGVp
Z2h0SW5QaXhlbHMgPSAwOworICAgIGlmICghcGFyc2VQYWdlU2l6ZVBhcmFtZXRlcnMoYXJndW1l
bnRzLCAwLCAmcGFnZVdpZHRoSW5QaXhlbHMsICZwYWdlSGVpZ2h0SW5QaXhlbHMpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBXZWJGcmFtZSogZnJhbWUgPSBtX3NoZWxsLT53ZWJWaWV3KCktPm1h
aW5GcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICBXZWJQcmlu
dFBhcmFtcyBwcmludFBhcmFtcyhXZWJTaXplKHBhZ2VXaWR0aEluUGl4ZWxzLCBwYWdlSGVpZ2h0
SW5QaXhlbHMpKTsKKyAgICBpbnQgbnVtYmVyT2ZQYWdlcyA9IGZyYW1lLT5wcmludEJlZ2luKHBy
aW50UGFyYW1zKTsKKyAgICBmcmFtZS0+cHJpbnRFbmQoKTsKKyAgICByZXN1bHQtPnNldChudW1i
ZXJPZlBhZ2VzKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQZW5k
aW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsK
KyAgICBWZWN0b3I8V2ViVmlld0hvc3QqPiB3aW5kb3dMaXN0ID0gbV9zaGVsbC0+d2luZG93TGlz
dCgpOworICAgIGludCBudW1iZXJPZlJlcXVlc3RzID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHdpbmRvd0xpc3Quc2l6ZSgpOyBpKyspCisgICAgICAgIG51bWJlck9mUmVxdWVzdHMg
Kz0gd2luZG93TGlzdFtpXS0+Z2VvbG9jYXRpb25DbGllbnRNb2NrKCktPm51bWJlck9mUGVuZGlu
Z1Blcm1pc3Npb25SZXF1ZXN0cygpOworICAgIHJlc3VsdC0+c2V0KG51bWJlck9mUmVxdWVzdHMp
OworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpsb2dFcnJvclRvQ29uc29sZShjb25z
dCBzdGQ6OnN0cmluZyYgdGV4dCkKK3sKKyAgICBtX3NoZWxsLT53ZWJWaWV3SG9zdCgpLT5kaWRB
ZGRNZXNzYWdlVG9Db25zb2xlKAorICAgICAgICBXZWJDb25zb2xlTWVzc2FnZShXZWJDb25zb2xl
TWVzc2FnZTo6TGV2ZWxFcnJvciwgV2ViU3RyaW5nOjpmcm9tVVRGOCh0ZXh0KSksCisgICAgICAg
IFdlYlN0cmluZygpLCAwKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVh
dGVJbldlYkluc3BlY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFy
aWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIGlmIChhcmd1bWVu
dHMuc2l6ZSgpIDwgMiB8fCAhYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1sx
XS5pc1N0cmluZygpKQorICAgICAgICByZXR1cm47CisgICAgbV9zaGVsbC0+ZHJ0RGV2VG9vbHNB
Z2VudCgpLT5ldmFsdWF0ZUluV2ViSW5zcGVjdG9yKGFyZ3VtZW50c1swXS50b0ludDMyKCksIGFy
Z3VtZW50c1sxXS50b1N0cmluZygpKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
Zm9yY2VSZWRTZWxlY3Rpb25Db2xvcnMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMs
IENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICBtX3No
ZWxsLT53ZWJWaWV3KCktPnNldFNlbGVjdGlvbkNvbG9ycygweGZmZWUwMDAwLCAweGZmMDBlZTAw
LCAweGZmMDAwMDAwLCAweGZmYzBjMGMwKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6YWRkVXNlclNjcmlwdChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFy
aWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIGlmIChhcmd1bWVu
dHMuc2l6ZSgpIDwgMyB8fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkgfHwgIWFyZ3VtZW50c1sx
XS5pc0Jvb2woKSB8fCAhYXJndW1lbnRzWzJdLmlzQm9vbCgpKQorICAgICAgICByZXR1cm47Cisg
ICAgV2ViVmlldzo6YWRkVXNlclNjcmlwdCgKKyAgICAgICAgY3BwVmFyaWFudFRvV2ViU3RyaW5n
KGFyZ3VtZW50c1swXSksIFdlYlZlY3RvcjxXZWJTdHJpbmc+KCksCisgICAgICAgIGFyZ3VtZW50
c1sxXS50b0Jvb2xlYW4oKSA/IFdlYlZpZXc6OlVzZXJTY3JpcHRJbmplY3RBdERvY3VtZW50U3Rh
cnQgOiBXZWJWaWV3OjpVc2VyU2NyaXB0SW5qZWN0QXREb2N1bWVudEVuZCwKKyAgICAgICAgYXJn
dW1lbnRzWzJdLnRvQm9vbGVhbigpID8gV2ViVmlldzo6VXNlckNvbnRlbnRJbmplY3RJbkFsbEZy
YW1lcyA6IFdlYlZpZXc6OlVzZXJDb250ZW50SW5qZWN0SW5Ub3BGcmFtZU9ubHkpOworfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldChjb25zdCBDcHBBcmd1
bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+
c2V0TnVsbCgpOworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMiB8fCAhYXJndW1lbnRzWzBd
LmlzU3RyaW5nKCkgfHwgIWFyZ3VtZW50c1sxXS5pc0Jvb2woKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIFdlYlZpZXc6OmFkZFVzZXJTdHlsZVNoZWV0KAorICAgICAgICBjcHBWYXJpYW50VG9XZWJT
dHJpbmcoYXJndW1lbnRzWzBdKSwgV2ViVmVjdG9yPFdlYlN0cmluZz4oKSwKKyAgICAgICAgYXJn
dW1lbnRzWzFdLnRvQm9vbGVhbigpID8gV2ViVmlldzo6VXNlckNvbnRlbnRJbmplY3RJbkFsbEZy
YW1lcyA6IFdlYlZpZXc6OlVzZXJDb250ZW50SW5qZWN0SW5Ub3BGcmFtZU9ubHksCisgICAgICAg
IC8vIENocm9taXVtIGRlZmF1bHRzIHRvIEluamVjdEluU3Vic2VxdWVudERvY3VtZW50cywgYnV0
IGZvciBjb21wYXRpYmlsaXR5CisgICAgICAgIC8vIHdpdGggdGhlIG90aGVyIHBvcnRzJyBEUlRz
LCB3ZSB1c2UgVXNlclN0eWxlSW5qZWN0SW5FeGlzdGluZ0RvY3VtZW50cy4KKyAgICAgICAgV2Vi
Vmlldzo6VXNlclN0eWxlSW5qZWN0SW5FeGlzdGluZ0RvY3VtZW50cyk7Cit9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tEZXZpY2VPcmllbnRhdGlvbihjb25zdCBDcHBBcmd1
bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+
c2V0TnVsbCgpOworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgNiB8fCAhYXJndW1lbnRzWzBd
LmlzQm9vbCgpIHx8ICFhcmd1bWVudHNbMV0uaXNOdW1iZXIoKSB8fCAhYXJndW1lbnRzWzJdLmlz
Qm9vbCgpIHx8ICFhcmd1bWVudHNbM10uaXNOdW1iZXIoKSB8fCAhYXJndW1lbnRzWzRdLmlzQm9v
bCgpIHx8ICFhcmd1bWVudHNbNV0uaXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
V2ViRGV2aWNlT3JpZW50YXRpb24gb3JpZW50YXRpb247CisgICAgb3JpZW50YXRpb24uc2V0TnVs
bChmYWxzZSk7CisgICAgaWYgKGFyZ3VtZW50c1swXS50b0Jvb2xlYW4oKSkKKyAgICAgICAgb3Jp
ZW50YXRpb24uc2V0QWxwaGEoYXJndW1lbnRzWzFdLnRvRG91YmxlKCkpOworICAgIGlmIChhcmd1
bWVudHNbMl0udG9Cb29sZWFuKCkpCisgICAgICAgIG9yaWVudGF0aW9uLnNldEJldGEoYXJndW1l
bnRzWzNdLnRvRG91YmxlKCkpOworICAgIGlmIChhcmd1bWVudHNbNF0udG9Cb29sZWFuKCkpCisg
ICAgICAgIG9yaWVudGF0aW9uLnNldEdhbW1hKGFyZ3VtZW50c1s1XS50b0RvdWJsZSgpKTsKKwor
ICAgIC8vIE5vdGUgdGhhdCB3ZSBvbmx5IGNhbGwgc2V0T3JpZW50YXRpb24gb24gdGhlIG1haW4g
cGFnZSdzIG1vY2sgc2luY2UgdGhpcyBpcyBhbGwgdGhhdCB0aGUKKyAgICAvLyB0ZXN0cyByZXF1
aXJlLiBJZiBuZWNlc3NhcnksIHdlIGNvdWxkIGdldCBhIGxpc3Qgb2YgV2ViVmlld0hvc3RzIGZy
b20gdGhlIFRlc3RTaGVsbCBhbmQKKyAgICAvLyBjYWxsIHNldE9yaWVudGF0aW9uIG9uIGVhY2gg
RGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrLgorICAgIG1fc2hlbGwtPndlYlZpZXdIb3N0KCkt
PmRldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jaygpLT5zZXRPcmllbnRhdGlvbihvcmllbnRhdGlv
bik7Cit9CisKKy8vIEZJWE1FOiBGb3IgZ3JlYXRlciB0ZXN0IGZsZXhpYmlsaXR5LCB3ZSBzaG91
bGQgYmUgYWJsZSB0byBzZXQgZWFjaCBwYWdlJ3MgZ2VvbG9jYXRpb24gbW9jayBpbmRpdmlkdWFs
bHkuCisvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTIzNjgKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihjb25zdCBD
cHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJl
c3VsdC0+c2V0TnVsbCgpOworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMSB8fCAhYXJndW1l
bnRzWzBdLmlzQm9vbCgpKQorICAgICAgICByZXR1cm47CisgICAgVmVjdG9yPFdlYlZpZXdIb3N0
Kj4gd2luZG93TGlzdCA9IG1fc2hlbGwtPndpbmRvd0xpc3QoKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHdpbmRvd0xpc3Quc2l6ZSgpOyBpKyspCisgICAgICAgIHdpbmRvd0xpc3RbaV0t
Pmdlb2xvY2F0aW9uQ2xpZW50TW9jaygpLT5zZXRQZXJtaXNzaW9uKGFyZ3VtZW50c1swXS50b0Jv
b2xlYW4oKSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2Nh
dGlvblBvc2l0aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50
KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgaWYgKGFyZ3VtZW50cy5z
aXplKCkgPCAzIHx8ICFhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSB8fCAhYXJndW1lbnRzWzFdLmlz
TnVtYmVyKCkgfHwgIWFyZ3VtZW50c1syXS5pc051bWJlcigpKQorICAgICAgICByZXR1cm47Cisg
ICAgVmVjdG9yPFdlYlZpZXdIb3N0Kj4gd2luZG93TGlzdCA9IG1fc2hlbGwtPndpbmRvd0xpc3Qo
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdpbmRvd0xpc3Quc2l6ZSgpOyBpKyspCisg
ICAgICAgIHdpbmRvd0xpc3RbaV0tPmdlb2xvY2F0aW9uQ2xpZW50TW9jaygpLT5zZXRQb3NpdGlv
bihhcmd1bWVudHNbMF0udG9Eb3VibGUoKSwgYXJndW1lbnRzWzFdLnRvRG91YmxlKCksIGFyZ3Vt
ZW50c1syXS50b0RvdWJsZSgpKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
TW9ja0dlb2xvY2F0aW9uRXJyb3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICBpZiAoYXJn
dW1lbnRzLnNpemUoKSA8IDIgfHwgIWFyZ3VtZW50c1swXS5pc051bWJlcigpIHx8ICFhcmd1bWVu
dHNbMV0uaXNTdHJpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFZlY3RvcjxXZWJWaWV3SG9z
dCo+IHdpbmRvd0xpc3QgPSBtX3NoZWxsLT53aW5kb3dMaXN0KCk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCB3aW5kb3dMaXN0LnNpemUoKTsgaSsrKQorICAgICAgICB3aW5kb3dMaXN0W2ld
LT5nZW9sb2NhdGlvbkNsaWVudE1vY2soKS0+c2V0RXJyb3IoYXJndW1lbnRzWzBdLnRvSW50MzIo
KSwgY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1sxXSkpOworfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjphYm9ydE1vZGFsKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1l
bnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisK
KyNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRk
TW9ja1NwZWVjaElucHV0UmVzdWx0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgaWYgKGFy
Z3VtZW50cy5zaXplKCkgPCAzIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSB8fCAhYXJndW1l
bnRzWzFdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1syXS5pc1N0cmluZygpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlciogY29udHJvbGxl
ciA9IG1fc2hlbGwtPndlYlZpZXdIb3N0KCktPnNwZWVjaElucHV0Q29udHJvbGxlck1vY2soKSkK
KyAgICAgICAgY29udHJvbGxlci0+YWRkTW9ja1JlY29nbml0aW9uUmVzdWx0KGNwcFZhcmlhbnRU
b1dlYlN0cmluZyhhcmd1bWVudHNbMF0pLCBhcmd1bWVudHNbMV0udG9Eb3VibGUoKSwgY3BwVmFy
aWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1syXSkpOworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVjdChjb25zdCBDcHBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgp
OworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMSB8fCAhYXJndW1lbnRzWzBdLmlzQm9vbCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxl
ciogY29udHJvbGxlciA9IG1fc2hlbGwtPndlYlZpZXdIb3N0KCktPnNwZWVjaElucHV0Q29udHJv
bGxlck1vY2soKSkKKyAgICAgICAgY29udHJvbGxlci0+c2V0RHVtcFJlY3QoYXJndW1lbnRzWzBd
LnZhbHVlLmJvb2xWYWx1ZSk7Cit9CisjZW5kaWYKKworI2lmIEVOQUJMRShTQ1JJUFRFRF9TUEVF
Q0gpCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRNb2NrU3BlZWNoUmVjb2duaXRpb25S
ZXN1bHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8
IDIgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpIHx8ICFhcmd1bWVudHNbMV0uaXNOdW1iZXIo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyKiBy
ZWNvZ25pemVyID0gbV9zaGVsbC0+d2ViVmlld0hvc3QoKS0+bW9ja1NwZWVjaFJlY29nbml6ZXIo
KSkKKyAgICAgICAgcmVjb2duaXplci0+YWRkTW9ja1Jlc3VsdChjcHBWYXJpYW50VG9XZWJTdHJp
bmcoYXJndW1lbnRzWzBdKSwgYXJndW1lbnRzWzFdLnRvRG91YmxlKCkpOworfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrU3BlZWNoUmVjb2duaXRpb25FcnJvcihjb25zdCBD
cHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJl
c3VsdC0+c2V0TnVsbCgpOworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMiB8fCAhYXJndW1l
bnRzWzBdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1sxXS5pc1N0cmluZygpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIqIHJlY29nbml6ZXIgPSBt
X3NoZWxsLT53ZWJWaWV3SG9zdCgpLT5tb2NrU3BlZWNoUmVjb2duaXplcigpKQorICAgICAgICBy
ZWNvZ25pemVyLT5zZXRFcnJvcihhcmd1bWVudHNbMF0udG9JbnQzMigpLCBjcHBWYXJpYW50VG9X
ZWJTdHJpbmcoYXJndW1lbnRzWzFdKSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
Ondhc01vY2tTcGVlY2hSZWNvZ25pdGlvbkFib3J0ZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0KGZhbHNlKTsKKyAgICBpZiAo
TW9ja1dlYlNwZWVjaFJlY29nbml6ZXIqIHJlY29nbml6ZXIgPSBtX3NoZWxsLT53ZWJWaWV3SG9z
dCgpLT5tb2NrU3BlZWNoUmVjb2duaXplcigpKQorICAgICAgICByZXN1bHQtPnNldChyZWNvZ25p
emVyLT53YXNBYm9ydGVkKCkpOworfQorI2VuZGlmCisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnN0YXJ0U3BlZWNoSW5wdXQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICBpZiAoYXJn
dW1lbnRzLnNpemUoKSAhPSAxKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJFbGVtZW50IGVs
ZW1lbnQ7CisgICAgaWYgKCFXZWJCaW5kaW5nczo6Z2V0RWxlbWVudChhcmd1bWVudHNbMF0udmFs
dWUub2JqZWN0VmFsdWUsICZlbGVtZW50KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViSW5w
dXRFbGVtZW50KiBpbnB1dCA9IHRvV2ViSW5wdXRFbGVtZW50KCZlbGVtZW50KTsKKyAgICBpZiAo
IWlucHV0KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWlucHV0LT5pc1NwZWVjaElucHV0
RW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnB1dC0+c3RhcnRTcGVlY2hJbnB1
dCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpsYXllclRyZWVBc1RleHQoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiBhcmdzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVz
dWx0LT5zZXQobV9zaGVsbC0+d2ViVmlldygpLT5tYWluRnJhbWUoKS0+bGF5ZXJUcmVlQXNUZXh0
KG1fc2hvd0RlYnVnTGF5ZXJUcmVlKS51dGY4KCkpOworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpsb3NlQ29tcG9zaXRvckNvbnRleHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmdz
LCBDcHBWYXJpYW50KikKK3sKKyAgICBpbnQgbnVtVGltZXM7CisgICAgaWYgKGFyZ3Muc2l6ZSgp
ID09IDEgfHwgIWFyZ3NbMF0uaXNOdW1iZXIoKSkKKyAgICAgICAgbnVtVGltZXMgPSAxOworICAg
IGVsc2UKKyAgICAgICAgbnVtVGltZXMgPSBhcmdzWzBdLnRvSW50MzIoKTsKKyAgICBtX3NoZWxs
LT53ZWJWaWV3KCktPmxvc2VDb21wb3NpdG9yQ29udGV4dChudW1UaW1lcyk7Cit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6Om1hcmtlclRleHRGb3JMaXN0SXRlbShjb25zdCBDcHBBcmd1
bWVudExpc3QmIGFyZ3MsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBXZWJFbGVtZW50IGVs
ZW1lbnQ7CisgICAgaWYgKCFXZWJCaW5kaW5nczo6Z2V0RWxlbWVudChhcmdzWzBdLnZhbHVlLm9i
amVjdFZhbHVlLCAmZWxlbWVudCkpCisgICAgICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIGVs
c2UKKyAgICAgICAgcmVzdWx0LT5zZXQoZWxlbWVudC5kb2N1bWVudCgpLmZyYW1lKCktPm1hcmtl
clRleHRGb3JMaXN0SXRlbShlbGVtZW50KS51dGY4KCkpOworfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpmaW5kU3RyaW5nKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAxIHx8ICFh
cmd1bWVudHNbMF0uaXNTdHJpbmcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViRmluZE9w
dGlvbnMgZmluZE9wdGlvbnM7CisgICAgYm9vbCB3cmFwQXJvdW5kID0gZmFsc2U7CisgICAgaWYg
KGFyZ3VtZW50cy5zaXplKCkgPj0gMikgeworICAgICAgICBWZWN0b3I8c3RkOjpzdHJpbmc+IG9w
dGlvbnNBcnJheSA9IGFyZ3VtZW50c1sxXS50b1N0cmluZ1ZlY3RvcigpOworICAgICAgICBmaW5k
T3B0aW9ucy5tYXRjaENhc2UgPSB0cnVlOworCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgb3B0aW9uc0FycmF5LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBzdGQ6OnN0
cmluZyYgb3B0aW9uID0gb3B0aW9uc0FycmF5W2ldOworICAgICAgICAgICAgLy8gRklYTUU6IFN1
cHBvcnQgYWxsIHRoZSBvcHRpb25zLCBzbyB3ZSBjYW4gcnVuIGZpbmRTdHJpbmcuaHRtbCB0b28u
CisgICAgICAgICAgICBpZiAob3B0aW9uID09ICJDYXNlSW5zZW5zaXRpdmUiKQorICAgICAgICAg
ICAgICAgIGZpbmRPcHRpb25zLm1hdGNoQ2FzZSA9IGZhbHNlOworICAgICAgICAgICAgZWxzZSBp
ZiAob3B0aW9uID09ICJCYWNrd2FyZHMiKQorICAgICAgICAgICAgICAgIGZpbmRPcHRpb25zLmZv
cndhcmQgPSBmYWxzZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG9wdGlvbiA9PSAiV3JhcEFyb3Vu
ZCIpCisgICAgICAgICAgICAgICAgd3JhcEFyb3VuZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBXZWJGcmFtZSogZnJhbWUgPSBtX3NoZWxsLT53ZWJWaWV3KCktPm1haW5GcmFtZSgp
OworICAgIGNvbnN0IGJvb2wgZmluZFJlc3VsdCA9IGZyYW1lLT5maW5kKDAsIGNwcFZhcmlhbnRU
b1dlYlN0cmluZyhhcmd1bWVudHNbMF0pLCBmaW5kT3B0aW9ucywgd3JhcEFyb3VuZCwgMCk7Cisg
ICAgcmVzdWx0LT5zZXQoZmluZFJlc3VsdCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldE1pbmltdW1UaW1lckludGVydmFsKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1l
bnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAg
aWYgKGFyZ3VtZW50cy5zaXplKCkgPCAxIHx8ICFhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+c2V0dGluZ3MoKS0+c2V0TWlu
aW11bVRpbWVySW50ZXJ2YWwoYXJndW1lbnRzWzBdLnRvRG91YmxlKCkpOworfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRBdXRvZmlsbGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7
CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgIT0gMiB8fCAhYXJndW1lbnRzWzFdLmlzQm9vbCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJFbGVtZW50IGVsZW1lbnQ7CisgICAgaWYgKCFX
ZWJCaW5kaW5nczo6Z2V0RWxlbWVudChhcmd1bWVudHNbMF0udmFsdWUub2JqZWN0VmFsdWUsICZl
bGVtZW50KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViSW5wdXRFbGVtZW50KiBpbnB1dCA9
IHRvV2ViSW5wdXRFbGVtZW50KCZlbGVtZW50KTsKKyAgICBpZiAoIWlucHV0KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpbnB1dC0+c2V0QXV0b2ZpbGxlZChhcmd1bWVudHNbMV0udmFsdWUuYm9v
bFZhbHVlKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VmFsdWVGb3JVc2Vy
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7
CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgIT0gMikK
KyAgICAgICAgcmV0dXJuOworCisgICAgV2ViRWxlbWVudCBlbGVtZW50OworICAgIGlmICghV2Vi
QmluZGluZ3M6OmdldEVsZW1lbnQoYXJndW1lbnRzWzBdLnZhbHVlLm9iamVjdFZhbHVlLCAmZWxl
bWVudCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYklucHV0RWxlbWVudCogaW5wdXQgPSB0
b1dlYklucHV0RWxlbWVudCgmZWxlbWVudCk7CisgICAgaWYgKCFpbnB1dCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaW5wdXQtPnNldFZhbHVlKGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVu
dHNbMV0pLCB0cnVlKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlQWxs
TG9jYWxTdG9yYWdlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50
KikKK3sKKyAgICAvLyBOb3QgSW1wbGVtZW50ZWQKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6bG9jYWxTdG9yYWdlRGlza1VzYWdlRm9yT3JpZ2luKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KikKK3sKKyAgICAvLyBOb3QgSW1wbGVtZW50ZWQKK30K
Kwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqKQoreworICAgIC8vIE5v
dCBJbXBsZW1lbnRlZAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVMb2Nh
bFN0b3JhZ2VGb3JPcmlnaW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZh
cmlhbnQqKQoreworICAgIC8vIE5vdCBJbXBsZW1lbnRlZAorfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKQoreworICAgIC8vIE5vdCBJbXBsZW1lbnRlZAorfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzeW5jTG9jYWxTdG9yYWdlKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKQoreworICAgIC8vIE5vdCBJbXBsZW1lbnRlZAorfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5k
bGluZ0JlZm9yZVVubG9hZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFy
aWFudCogcmVzdWx0KQoreworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID09IDEgJiYgYXJndW1l
bnRzWzBdLmlzQm9vbCgpKQorICAgICAgICBtX3Nob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5n
QmVmb3JlVW5sb2FkID0gYXJndW1lbnRzWzBdLnRvQm9vbGVhbigpOworCisgICAgcmVzdWx0LT5z
ZXROdWxsKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmVuYWJsZUZpeGVkTGF5
b3V0TW9kZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVz
dWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgp
IDwgIDEgfHwgIWFyZ3VtZW50c1swXS5pc0Jvb2woKSkKKyAgICAgICAgcmV0dXJuOworICAgIGJv
b2wgZW5hYmxlRml4ZWRMYXlvdXQgPSBhcmd1bWVudHNbMF0udG9Cb29sZWFuKCk7CisgICAgbV9z
aGVsbC0+d2ViVmlldygpLT5lbmFibGVGaXhlZExheW91dE1vZGUoZW5hYmxlRml4ZWRMYXlvdXQp
OworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRGaXhlZExheW91dFNpemUoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAg
ICByZXN1bHQtPnNldE51bGwoKTsKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8ICAyIHx8ICFh
cmd1bWVudHNbMF0uaXNOdW1iZXIoKSB8fCAhYXJndW1lbnRzWzFdLmlzTnVtYmVyKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBpbnQgd2lkdGggPSBhcmd1bWVudHNbMF0udG9JbnQzMigpOworICAg
IGludCBoZWlnaHQgPSBhcmd1bWVudHNbMV0udG9JbnQzMigpOworICAgIG1fc2hlbGwtPndlYlZp
ZXcoKS0+c2V0Rml4ZWRMYXlvdXRTaXplKFdlYlNpemUod2lkdGgsIGhlaWdodCkpOworfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZWxlY3Rpb25Bc01hcmt1cChjb25zdCBDcHBBcmd1
bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+
c2V0KG1fc2hlbGwtPndlYlZpZXcoKS0+bWFpbkZyYW1lKCktPnNlbGVjdGlvbkFzTWFya3VwKCku
dXRmOCgpKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d29ya2VyVGhyZWFkQ291
bnQoQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0KHN0YXRpY19jYXN0PGlu
dD4oV2ViV29ya2VySW5mbzo6ZGVkaWNhdGVkV29ya2VyQ291bnQoKSkpOworfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZW5kV2ViSW50ZW50UmVzcG9uc2UoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICB2ODo6SGFuZGxl
U2NvcGUgc2NvcGU7CisgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjdHggPSBtX3NoZWxsLT53
ZWJWaWV3KCktPm1haW5GcmFtZSgpLT5tYWluV29ybGRTY3JpcHRDb250ZXh0KCk7CisgICAgcmVz
dWx0LT5zZXQobV9zaGVsbC0+d2ViVmlldygpLT5tYWluRnJhbWUoKS0+c2VsZWN0aW9uQXNNYXJr
dXAoKS51dGY4KCkpOworICAgIHY4OjpDb250ZXh0OjpTY29wZSBjc2NvcGUoY3R4KTsKKworICAg
IFdlYktpdDo6V2ViSW50ZW50UmVxdWVzdCogcmVxdWVzdCA9IG1fc2hlbGwtPndlYlZpZXdIb3N0
KCktPmN1cnJlbnRJbnRlbnRSZXF1ZXN0KCk7CisgICAgaWYgKHJlcXVlc3QtPmlzTnVsbCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA9PSAxKSB7CisgICAg
ICAgIFdlYktpdDo6V2ViQ1N0cmluZyByZXBseSA9IGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1
bWVudHNbMF0pLnV0ZjgoKTsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4dmFsdWUg
PSB2ODo6U3RyaW5nOjpOZXcocmVwbHkuZGF0YSgpLCByZXBseS5sZW5ndGgoKSk7CisgICAgICAg
IHJlcXVlc3QtPnBvc3RSZXN1bHQoV2ViS2l0OjpXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnNl
cmlhbGl6ZSh2OHZhbHVlKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHY4dmFsdWUgPSB2ODo6U3RyaW5nOjpOZXcoIkVSUk9SIik7CisgICAgICAgIHJlcXVl
c3QtPnBvc3RGYWlsdXJlKFdlYktpdDo6V2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpzZXJpYWxp
emUodjh2YWx1ZSkpOworICAgIH0KKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsaXZlcldlYkludGVudChjb25zdCBDcHBBcmd1bWVudExp
c3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIGlmIChhcmd1bWVudHMu
c2l6ZSgpIDwgIDMpCisgICAgICAgIHJldHVybjsKKworICAgIHY4OjpIYW5kbGVTY29wZSBzY29w
ZTsKKyAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGN0eCA9IG1fc2hlbGwtPndlYlZpZXcoKS0+
bWFpbkZyYW1lKCktPm1haW5Xb3JsZFNjcmlwdENvbnRleHQoKTsKKyAgICByZXN1bHQtPnNldCht
X3NoZWxsLT53ZWJWaWV3KCktPm1haW5GcmFtZSgpLT5zZWxlY3Rpb25Bc01hcmt1cCgpLnV0Zjgo
KSk7CisgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNzY29wZShjdHgpOworCisgICAgV2ViU3RyaW5n
IGFjdGlvbiA9IGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMF0pOworICAgIFdlYlN0
cmluZyB0eXBlID0gY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1sxXSk7CisgICAgV2Vi
S2l0OjpXZWJDU3RyaW5nIGRhdGEgPSBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzJd
KS51dGY4KCk7CisgICAgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlIHNlcmlhbGl6ZWREYXRhID0g
V2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpzZXJpYWxpemUoCisgICAgICAgIHY4OjpTdHJpbmc6
Ok5ldyhkYXRhLmRhdGEoKSwgZGF0YS5sZW5ndGgoKSkpOworCisgICAgV2ViSW50ZW50IGludGVu
dCA9IFdlYkludGVudDo6Y3JlYXRlKGFjdGlvbiwgdHlwZSwgc2VyaWFsaXplZERhdGEudG9TdHJp
bmcoKSwgV2ViVmVjdG9yPFdlYlN0cmluZz4oKSwgV2ViVmVjdG9yPFdlYlN0cmluZz4oKSk7CisK
KyAgICBtX3NoZWxsLT53ZWJWaWV3KCktPm1haW5GcmFtZSgpLT5kZWxpdmVySW50ZW50KGludGVu
dCwgMCwgbV9pbnRlbnRDbGllbnQuZ2V0KCkpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRUZXh0U3VicGl4ZWxQb3NpdGlvbmluZyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworI2lmIE9TKExJTlVYKSB8fCBPUyhBTkRS
T0lEKQorICAgIC8vIFNpbmNlIEZvbnRDb25maWcgZG9lc24ndCBwcm92aWRlIGEgdmFyaWFibGUg
dG8gY29udHJvbCBzdWJwaXhlbCBwb3NpdGlvbmluZywgd2UnbGwgZmFsbCBiYWNrCisgICAgLy8g
dG8gc2V0dGluZyBpdCBnbG9iYWxseSBmb3IgYWxsIGZvbnRzLgorICAgIGlmIChhcmd1bWVudHMu
c2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkpCisgICAgICAgIFdlYkZvbnRSZW5k
ZXJpbmc6OnNldFN1YnBpeGVsUG9zaXRpb25pbmcoYXJndW1lbnRzWzBdLnZhbHVlLmJvb2xWYWx1
ZSk7CisjZW5kaWYKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKworY2xhc3MgSW52b2tlQ2Fs
bGJhY2tUYXNrIDogcHVibGljIE1ldGhvZFRhc2s8TGF5b3V0VGVzdENvbnRyb2xsZXI+IHsKK3B1
YmxpYzoKKyAgICBJbnZva2VDYWxsYmFja1Rhc2soTGF5b3V0VGVzdENvbnRyb2xsZXIqIG9iamVj
dCwgUGFzc093bkFycmF5UHRyPENwcFZhcmlhbnQ+IGNhbGxiYWNrQXJndW1lbnRzLCB1aW50MzJf
dCBudW1iZXJPZkFyZ3VtZW50cykKKyAgICAgICAgOiBNZXRob2RUYXNrPExheW91dFRlc3RDb250
cm9sbGVyPihvYmplY3QpCisgICAgICAgICwgbV9jYWxsYmFja0FyZ3VtZW50cyhjYWxsYmFja0Fy
Z3VtZW50cykKKyAgICAgICAgLCBtX251bWJlck9mQXJndW1lbnRzKG51bWJlck9mQXJndW1lbnRz
KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcnVuSWZWYWxpZCgpCisgICAgewor
ICAgICAgICBDcHBWYXJpYW50IGludm9rZVJlc3VsdDsKKyAgICAgICAgbV9jYWxsYmFja0FyZ3Vt
ZW50c1swXS5pbnZva2VEZWZhdWx0KG1fY2FsbGJhY2tBcmd1bWVudHMuZ2V0KCksIG1fbnVtYmVy
T2ZBcmd1bWVudHMsIGludm9rZVJlc3VsdCk7CisgICAgfQorCitwcml2YXRlOgorICAgIE93bkFy
cmF5UHRyPENwcFZhcmlhbnQ+IG1fY2FsbGJhY2tBcmd1bWVudHM7CisgICAgdWludDMyX3QgbV9u
dW1iZXJPZkFyZ3VtZW50czsKK307CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEJh
Y2tpbmdTY2FsZUZhY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFy
aWFudCogcmVzdWx0KQoreworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMiB8fCAhYXJndW1l
bnRzWzBdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1sxXS5pc09iamVjdCgpKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgZmxvYXQgdmFsdWUgPSBhcmd1bWVudHNbMF0udmFsdWUuZG91Ymxl
VmFsdWU7CisgICAgbV9zaGVsbC0+d2ViVmlldygpLT5zZXREZXZpY2VTY2FsZUZhY3Rvcih2YWx1
ZSk7CisKKyAgICBPd25BcnJheVB0cjxDcHBWYXJpYW50PiBjYWxsYmFja0FyZ3VtZW50cyA9IGFk
b3B0QXJyYXlQdHIobmV3IENwcFZhcmlhbnRbMV0pOworICAgIGNhbGxiYWNrQXJndW1lbnRzWzBd
LnNldChhcmd1bWVudHNbMV0pOworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIHBvc3RUYXNr
KG5ldyBJbnZva2VDYWxsYmFja1Rhc2sodGhpcywgY2FsbGJhY2tBcmd1bWVudHMucmVsZWFzZSgp
LCAxKSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBsdWdpbnNFbmFibGVk
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7
CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkg
eworICAgICAgICBtX3NoZWxsLT5wcmVmZXJlbmNlcygpLT5wbHVnaW5zRW5hYmxlZCA9IGFyZ3Vt
ZW50c1swXS50b0Jvb2xlYW4oKTsKKyAgICAgICAgbV9zaGVsbC0+YXBwbHlQcmVmZXJlbmNlcygp
OworICAgIH0KKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6cmVzZXRQYWdlVmlzaWJpbGl0eShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3Vt
ZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+c2V0
VmlzaWJpbGl0eVN0YXRlKFdlYlBhZ2VWaXNpYmlsaXR5U3RhdGVWaXNpYmxlLCB0cnVlKTsKK30K
Kwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UGFnZVZpc2liaWxpdHkoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAo
YXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpIHsKKyAgICAg
ICAgc3RyaW5nIG5ld1Zpc2liaWxpdHkgPSBhcmd1bWVudHNbMF0udG9TdHJpbmcoKTsKKyAgICAg
ICAgaWYgKG5ld1Zpc2liaWxpdHkgPT0gInZpc2libGUiKQorICAgICAgICAgICAgbV9zaGVsbC0+
d2ViVmlldygpLT5zZXRWaXNpYmlsaXR5U3RhdGUoV2ViUGFnZVZpc2liaWxpdHlTdGF0ZVZpc2li
bGUsIGZhbHNlKTsKKyAgICAgICAgZWxzZSBpZiAobmV3VmlzaWJpbGl0eSA9PSAiaGlkZGVuIikK
KyAgICAgICAgICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+c2V0VmlzaWJpbGl0eVN0YXRlKFdlYlBh
Z2VWaXNpYmlsaXR5U3RhdGVIaWRkZW4sIGZhbHNlKTsKKyAgICAgICAgZWxzZSBpZiAobmV3Vmlz
aWJpbGl0eSA9PSAicHJlcmVuZGVyIikKKyAgICAgICAgICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+
c2V0VmlzaWJpbGl0eVN0YXRlKFdlYlBhZ2VWaXNpYmlsaXR5U3RhdGVQcmVyZW5kZXIsIGZhbHNl
KTsKKyAgICAgICAgZWxzZSBpZiAobmV3VmlzaWJpbGl0eSA9PSAicHJldmlldyIpCisgICAgICAg
ICAgICBtX3NoZWxsLT53ZWJWaWV3KCktPnNldFZpc2liaWxpdHlTdGF0ZShXZWJQYWdlVmlzaWJp
bGl0eVN0YXRlUHJldmlldywgZmFsc2UpOworICAgIH0KK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoYm9vbCkKK3sKKyAgICAv
LyBOb3QgSW1wbGVtZW50ZWQKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VGV4
dERpcmVjdGlvbihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCog
cmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIGlmIChhcmd1bWVudHMuc2l6
ZSgpICE9IDEgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpKQorICAgICAgICByZXR1cm47CisK
KyAgICAvLyBNYXAgYSBkaXJlY3Rpb24gbmFtZSB0byBhIFdlYlRleHREaXJlY3Rpb24gdmFsdWUu
CisgICAgc3RkOjpzdHJpbmcgZGlyZWN0aW9uTmFtZSA9IGFyZ3VtZW50c1swXS50b1N0cmluZygp
OworICAgIFdlYktpdDo6V2ViVGV4dERpcmVjdGlvbiBkaXJlY3Rpb247CisgICAgaWYgKGRpcmVj
dGlvbk5hbWUgPT0gImF1dG8iKQorICAgICAgICBkaXJlY3Rpb24gPSBXZWJLaXQ6OldlYlRleHRE
aXJlY3Rpb25EZWZhdWx0OworICAgIGVsc2UgaWYgKGRpcmVjdGlvbk5hbWUgPT0gInJ0bCIpCisg
ICAgICAgIGRpcmVjdGlvbiA9IFdlYktpdDo6V2ViVGV4dERpcmVjdGlvblJpZ2h0VG9MZWZ0Owor
ICAgIGVsc2UgaWYgKGRpcmVjdGlvbk5hbWUgPT0gImx0ciIpCisgICAgICAgIGRpcmVjdGlvbiA9
IFdlYktpdDo6V2ViVGV4dERpcmVjdGlvbkxlZnRUb1JpZ2h0OworICAgIGVsc2UKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9zaGVsbC0+d2ViVmlldygpLT5zZXRUZXh0RGlyZWN0aW9uKGRpcmVj
dGlvbik7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1ZGlvRGF0YShjb25z
dCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAg
IHJlc3VsdC0+c2V0TnVsbCgpOworCisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAxIHx8ICFh
cmd1bWVudHNbMF0uaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQ2hlY2sg
dGhhdCBwYXNzZWQtaW4gb2JqZWN0IGlzLCBpbiBmYWN0LCBhbiBBcnJheUJ1ZmZlclZpZXcuCisg
ICAgTlBPYmplY3QqIG5wb2JqZWN0ID0gTlBWQVJJQU5UX1RPX09CSkVDVChhcmd1bWVudHNbMF0p
OworICAgIGlmICghbnBvYmplY3QpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIVdlYkJpbmRp
bmdzOjpnZXRBcnJheUJ1ZmZlclZpZXcobnBvYmplY3QsICZtX2F1ZGlvRGF0YSkpCisgICAgICAg
IHJldHVybjsKKworICAgIHNldFNob3VsZER1bXBBc0F1ZGlvKHRydWUpOworfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRIYXNDdXN0b21GdWxsU2NyZWVuQmVoYXZpb3IoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBy
ZXN1bHQtPnNldE51bGwoKTsKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8ICAxIHx8ICFhcmd1
bWVudHNbMF0uaXNCb29sKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2hhc0N1c3RvbUZ1bGxT
Y3JlZW5CZWhhdmlvciA9IGFyZ3VtZW50c1swXS50b0Jvb2xlYW4oKTsKK30KKworI2lmIEVOQUJM
RShQT0lOVEVSX0xPQ0spCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaWRMb3NlUG9pbnRl
ckxvY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAg
IG1fc2hlbGwtPndlYlZpZXdIb3N0KCktPmRpZExvc2VQb2ludGVyTG9jaygpOworICAgIHJlc3Vs
dC0+c2V0TnVsbCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQb2ludGVy
TG9ja1dpbGxGYWlsQXN5bmNocm9ub3VzbHkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCogcmVzdWx0KQoreworICAgIG1fc2hlbGwtPndlYlZpZXdIb3N0KCktPnNldFBvaW50ZXJM
b2NrV2lsbEZhaWxBc3luY2hyb25vdXNseSgpOworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQb2ludGVyTG9ja1dpbGxGYWlsU3luY2hy
b25vdXNseShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7Cisg
ICAgbV9zaGVsbC0+d2ViVmlld0hvc3QoKS0+c2V0UG9pbnRlckxvY2tXaWxsRmFpbFN5bmNocm9u
b3VzbHkoKTsKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKyNlbmRpZgorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjp0ZXh0U3Vycm91bmRpbmdOb2RlKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxs
KCk7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCA0IHx8ICFhcmd1bWVudHNbMF0uaXNPYmpl
Y3QoKSB8fCAhYXJndW1lbnRzWzFdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1syXS5pc051bWJl
cigpIHx8ICFhcmd1bWVudHNbM10uaXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
V2ViTm9kZSBub2RlOworICAgIGlmICghV2ViQmluZGluZ3M6OmdldE5vZGUoYXJndW1lbnRzWzBd
LnZhbHVlLm9iamVjdFZhbHVlLCAmbm9kZSkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChu
b2RlLmlzTnVsbCgpIHx8ICFub2RlLmlzVGV4dE5vZGUoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgV2ViUG9pbnQgcG9pbnQoYXJndW1lbnRzWzFdLnRvSW50MzIoKSwgYXJndW1lbnRzWzJdLnRv
SW50MzIoKSk7CisgICAgdW5zaWduZWQgbWF4TGVuZ3RoID0gYXJndW1lbnRzWzNdLnRvSW50MzIo
KTsKKworICAgIFdlYlN1cnJvdW5kaW5nVGV4dCBzdXJyb3VuZGluZ1RleHQ7CisgICAgc3Vycm91
bmRpbmdUZXh0LmluaXRpYWxpemUobm9kZSwgcG9pbnQsIG1heExlbmd0aCk7CisgICAgaWYgKHN1
cnJvdW5kaW5nVGV4dC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVzdWx0LT5z
ZXQoc3Vycm91bmRpbmdUZXh0LnRleHRDb250ZW50KCkudXRmOCgpKTsKK30KSW5kZXg6IFRvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVFRlc3RSdW5uZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVFRlc3RSdW5uZXIuY3BwCShyZXZpc2lv
biAxMjUzMzUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlRUZXN0UnVubmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogICovCiAKICNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIkRS
VFRlc3RSdW5uZXIuaCIKIAogI2luY2x1ZGUgIkRSVERldlRvb2xzQWdlbnQuaCIKICNpbmNsdWRl
ICJNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmgiCkluZGV4OiBUb29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9EUlRUZXN0UnVubmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vRFJUVGVzdFJ1bm5lci5oCShyZXZpc2lvbiAxMjUzMzUpCShmcm9t
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmg6MTI1
MzM1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRFJUVGVzdFJ1bm5lci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
UGF3ZWwgSGFqZGFuIChwaGFqZGFuLmpyQGNocm9taXVtLm9yZykKKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICBMYXlvdXRUZXN0Q29udHJv
bGxlciBjbGFzczoKKyAgQm91bmQgdG8gYSBKYXZhU2NyaXB0IHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlciBvYmplY3QgdXNpbmcgdGhlCisgIENwcEJvdW5kQ2xhc3M6OmJpbmRUb0phdmFzY3Jp
cHQoKSwgdGhpcyBhbGxvd3MgbGF5b3V0IHRlc3RzIHRoYXQgYXJlIHJ1biBpbgorICB0aGUgdGVz
dF9zaGVsbCAob3IsIGluIHByaW5jaXBsZSwgYW55IHdlYiBwYWdlIGxvYWRlZCBpbnRvIGEgY2xp
ZW50IGFwcCBidWlsdAorICB3aXRoIHRoaXMgY2xhc3MpIHRvIGNvbnRyb2wgdmFyaW91cyBhc3Bl
Y3RzIG9mIGhvdyB0aGUgdGVzdHMgYXJlIHJ1biBhbmQgd2hhdAorICBzb3J0IG9mIG91dHB1dCB0
aGV5IHByb2R1Y2UuCisqLworCisjaWZuZGVmIExheW91dFRlc3RDb250cm9sbGVyX2gKKyNkZWZp
bmUgTGF5b3V0VGVzdENvbnRyb2xsZXJfaAorCisjaW5jbHVkZSAiVGVzdFJ1bm5lci5oIgorCitj
bGFzcyBUZXN0U2hlbGw7CisKK2NsYXNzIExheW91dFRlc3RDb250cm9sbGVyIDogcHVibGljIFRl
c3RSdW5uZXIgeworcHVibGljOgorICAgIC8vIEJ1aWxkcyB0aGUgcHJvcGVydHkgYW5kIG1ldGhv
ZCBsaXN0cyBuZWVkZWQgdG8gYmluZCB0aGlzIGNsYXNzIHRvIGEgSlMKKyAgICAvLyBvYmplY3Qu
CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIoVGVzdFNoZWxsKik7CisKKyAgICB+TGF5b3V0VGVz
dENvbnRyb2xsZXIoKTsKKworICAgIC8vIFRoaXMgZnVuY3Rpb24gc2V0cyBhIGZsYWcgdGhhdCB0
ZWxscyB0aGUgdGVzdF9zaGVsbCB0byBkdW1wIHBhZ2VzIGFzCisgICAgLy8gcGxhaW4gdGV4dCwg
cmF0aGVyIHRoYW4gYXMgYSB0ZXh0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSByZW5kZXJlcidzIHN0
YXRlLgorICAgIC8vIEl0IHRha2VzIGFuIG9wdGlvbmFsIGFyZ3VtZW50LCB3aGV0aGVyIHRvIGR1
bXAgcGl4ZWxzIHJlc3VsdHMgb3Igbm90LgorICAgIHZvaWQgZHVtcEFzVGV4dChjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIHNob3Vs
ZCBzZXQgYSBmbGFnIHRoYXQgdGVsbHMgdGhlIHRlc3Rfc2hlbGwgdG8gcHJpbnQgYSBsaW5lCisg
ICAgLy8gb2YgZGVzY3JpcHRpdmUgdGV4dCBmb3IgZWFjaCBkYXRhYmFzZSBjb21tYW5kLiBJdCBz
aG91bGQgdGFrZSBubworICAgIC8vIGFyZ3VtZW50cywgYW5kIGlnbm9yZSBhbnkgdGhhdCBtYXkg
YmUgcHJlc2VudC4gSG93ZXZlciwgYXQgdGhlIG1vbWVudCwgd2UKKyAgICAvLyBkb24ndCBoYXZl
IGFueSBEQiBmdW5jdGlvbiB0aGF0IHByaW50cyBtZXNzYWdlcywgc28gZm9yIG5vdyB0aGlzIGZ1
bmN0aW9uCisgICAgLy8gZG9lc24ndCBkbyBhbnl0aGluZy4KKyAgICB2b2lkIGR1bXBEYXRhYmFz
ZUNhbGxiYWNrcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICAv
LyBUaGlzIGZ1bmN0aW9uIHNldHMgYSBmbGFnIHRoYXQgdGVsbHMgdGhlIHRlc3Rfc2hlbGwgdG8g
cHJpbnQgYSBsaW5lIG9mCisgICAgLy8gZGVzY3JpcHRpdmUgdGV4dCBmb3IgZWFjaCBlZGl0aW5n
IGNvbW1hbmQuIEl0IHRha2VzIG5vIGFyZ3VtZW50cywgYW5kCisgICAgLy8gaWdub3JlcyBhbnkg
dGhhdCBtYXkgYmUgcHJlc2VudC4KKyAgICB2b2lkIGR1bXBFZGl0aW5nQ2FsbGJhY2tzKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIFRoaXMgZnVuY3Rpb24g
c2V0cyBhIGZsYWcgdGhhdCB0ZWxscyB0aGUgdGVzdF9zaGVsbCB0byBwcmludCBhIGxpbmUgb2YK
KyAgICAvLyBkZXNjcmlwdGl2ZSB0ZXh0IGZvciBlYWNoIGZyYW1lIGxvYWQgY2FsbGJhY2suIEl0
IHRha2VzIG5vIGFyZ3VtZW50cywgYW5kCisgICAgLy8gaWdub3JlcyBhbnkgdGhhdCBtYXkgYmUg
cHJlc2VudC4KKyAgICB2b2lkIGR1bXBGcmFtZUxvYWRDYWxsYmFja3MoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gVGhpcyBmdW5jdGlvbiBzZXRzIGEgZmxh
ZyB0aGF0IHRlbGxzIHRoZSB0ZXN0X3NoZWxsIHRvIHByaW50IGEgbGluZSBvZgorICAgIC8vIGRl
c2NyaXB0aXZlIHRleHQgZm9yIHRoZSBwcm9ncmVzcyBmaW5pc2hlZCBjYWxsYmFjay4gSXQgdGFr
ZXMgbm8KKyAgICAvLyBhcmd1bWVudHMsIGFuZCBpZ25vcmVzIGFueSB0aGF0IG1heSBiZSBwcmVz
ZW50LgorICAgIHZvaWQgZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjayhjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIHNldHMgYSBm
bGFnIHRoYXQgdGVsbHMgdGhlIHRlc3Rfc2hlbGwgdG8gcHJpbnQgYSBsaW5lIG9mCisgICAgLy8g
dXNlciBnZXN0dXJlIHN0YXR1cyB0ZXh0IGZvciBzb21lIGZyYW1lIGxvYWQgY2FsbGJhY2tzLiBJ
dCB0YWtlcyBubworICAgIC8vIGFyZ3VtZW50cywgYW5kIGlnbm9yZXMgYW55IHRoYXQgbWF5IGJl
IHByZXNlbnQuCisgICAgdm9pZCBkdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrcyhj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICAvLyBUaGlzIGZ1bmN0
aW9uIHNldHMgYSBmbGFnIHRoYXQgdGVsbHMgdGhlIHRlc3Rfc2hlbGwgdG8gcHJpbnQgb3V0IGEg
dGV4dAorICAgIC8vIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBiYWNrL2ZvcndhcmQgbGlzdC4gSXQg
aWdub3JlcyBhbGwgYXJndW1lbnRzLgorICAgIHZvaWQgZHVtcEJhY2tGb3J3YXJkTGlzdChjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICAvLyBUaGlzIGZ1bmN0aW9u
IHNldHMgYSBmbGFnIHRoYXQgdGVsbHMgdGhlIHRlc3Rfc2hlbGwgdG8gcHJpbnQgb3V0IHRoZQor
ICAgIC8vIHNjcm9sbCBvZmZzZXRzIG9mIHRoZSBjaGlsZCBmcmFtZXMuIEl0IGlnbm9yZXMgYWxs
LgorICAgIHZvaWQgZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnMoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gVGhpcyBmdW5jdGlvbiBzZXRzIGEgZmxh
ZyB0aGF0IHRlbGxzIHRoZSB0ZXN0X3NoZWxsIHRvIHJlY3Vyc2l2ZWx5CisgICAgLy8gZHVtcCBh
bGwgZnJhbWVzIGFzIHBsYWluIHRleHQgaWYgdGhlIGR1bXBBc1RleHQgZmxhZyBpcyBzZXQuCisg
ICAgLy8gSXQgdGFrZXMgbm8gYXJndW1lbnRzLCBhbmQgaWdub3JlcyBhbnkgdGhhdCBtYXkgYmUg
cHJlc2VudC4KKyAgICB2b2lkIGR1bXBDaGlsZEZyYW1lc0FzVGV4dChjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgCisgICAgLy8gVGhpcyBmdW5jdGlvbiBzZXRzIGEg
ZmxhZyB0aGF0IHRlbGxzIHRoZSB0ZXN0X3NoZWxsIHRvIGR1bXAgYSBkZXNjcmlwdGl2ZQorICAg
IC8vIGxpbmUgZm9yIGVhY2ggcmVzb3VyY2UgbG9hZCBjYWxsYmFjay4gSXQgdGFrZXMgbm8gYXJn
dW1lbnRzLCBhbmQgaWdub3JlcworICAgIC8vIGFueSB0aGF0IG1heSBiZSBwcmVzZW50LgorICAg
IHZvaWQgZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7ICAgIAorICAgIAorICAgIC8vIFRoaXMgZnVuY3Rpb24gc2V0cyBhIGZsYWcg
dGhhdCB0ZWxscyB0aGUgdGVzdF9zaGVsbCB0byBkdW1wIHRoZSBNSU1FIHR5cGUKKyAgICAvLyBm
b3IgZWFjaCByZXNvdXJjZSB0aGF0IHdhcyBsb2FkZWQuIEl0IHRha2VzIG5vIGFyZ3VtZW50cywg
YW5kIGlnbm9yZXMgYW55CisgICAgLy8gdGhhdCBtYXkgYmUgcHJlc2VudC4KKyAgICB2b2lkIGR1
bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKKworICAgIC8vIFRoaXMgZnVuY3Rpb24gc2V0cyBhIGZsYWcgdGhhdCB0ZWxscyB0
aGUgdGVzdF9zaGVsbCB0byBkdW1wIGFsbCBjYWxscworICAgIC8vIHRvIHdpbmRvdy5zdGF0dXMo
KS4KKyAgICAvLyBJdCB0YWtlcyBubyBhcmd1bWVudHMsIGFuZCBpZ25vcmVzIGFueSB0aGF0IG1h
eSBiZSBwcmVzZW50LgorICAgIHZvaWQgZHVtcFdpbmRvd1N0YXR1c0NoYW5nZXMoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gVGhpcyBmdW5jdGlvbiBzZXRz
IGEgZmxhZyB0aGF0IHRlbGxzIHRoZSB0ZXN0X3NoZWxsIHRvIGR1bXAgYWxsIGNhbGxzIHRvCisg
ICAgLy8gV2ViVmlld0NsaWVudDo6Y3JlYXRlVmlldygpLgorICAgIC8vIEl0IHRha2VzIG5vIGFy
Z3VtZW50cywgYW5kIGlnbm9yZXMgYW55IHRoYXQgbWF5IGJlIHByZXNlbnQuCisgICAgdm9pZCBk
dW1wQ3JlYXRlVmlldyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAg
ICAvLyBXaGVuIGNhbGxlZCB3aXRoIGEgYm9vbGVhbiBhcmd1bWVudCwgdGhpcyBzZXRzIGEgZmxh
ZyB0aGF0IGNvbnRyb2xzCisgICAgLy8gd2hldGhlciBjb250ZW50LWVkaXRhYmxlIGVsZW1lbnRz
IGFjY2VwdCBlZGl0aW5nIGZvY3VzIHdoZW4gYW4gZWRpdGluZworICAgIC8vIGF0dGVtcHQgaXMg
bWFkZS4gSXQgaWdub3JlcyBhbnkgYWRkaXRpb25hbCBhcmd1bWVudHMuCisgICAgdm9pZCBzZXRB
Y2NlcHRzRWRpdGluZyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAg
ICAvLyBGdW5jdGlvbnMgZm9yIGRlYWxpbmcgd2l0aCB3aW5kb3dzLiBCeSBkZWZhdWx0IHdlIGJs
b2NrIGFsbCBuZXcgd2luZG93cy4KKyAgICB2b2lkIHdpbmRvd0NvdW50KGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHNldENhbk9wZW5XaW5kb3dzKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHNldENsb3NlUmVtYWlu
aW5nV2luZG93c1doZW5Db21wbGV0ZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7CisKKyAgICAvLyBCeSBkZWZhdWx0LCB0ZXN0cyBlbmQgd2hlbiBwYWdlIGxvYWQgaXMgY29t
cGxldGUuIFRoZXNlIG1ldGhvZHMgYXJlIHVzZWQKKyAgICAvLyB0byBkZWxheSB0aGUgY29tcGxl
dGlvbiBvZiB0aGUgdGVzdCB1bnRpbCBub3RpZnlEb25lIGlzIGNhbGxlZC4KKyAgICB2b2lkIHdh
aXRVbnRpbERvbmUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZv
aWQgbm90aWZ5RG9uZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAg
ICAvLyBNZXRob2RzIGZvciBhZGRpbmcgYWN0aW9ucyB0byB0aGUgd29yayBxdWV1ZS4gVXNlZCBp
biBjb25qdW5jdGlvbiB3aXRoCisgICAgLy8gd2FpdFVudGlsRG9uZS9ub3RpZnlEb25lIGFib3Zl
LgorICAgIHZvaWQgcXVldWVCYWNrTmF2aWdhdGlvbihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7CisgICAgdm9pZCBxdWV1ZUZvcndhcmROYXZpZ2F0aW9uKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHF1ZXVlUmVsb2FkKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHF1ZXVlTG9hZGluZ1Njcmlw
dChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBxdWV1ZU5v
bkxvYWRpbmdTY3JpcHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAg
IHZvaWQgcXVldWVMb2FkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAg
ICB2b2lkIHF1ZXVlTG9hZEhUTUxTdHJpbmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCopOworCisgICAgLy8gQWx0aG91Z2ggdGhpcyBpcyBuYW1lZCAib2JqQyIgdG8gbWF0Y2gg
dGhlIE1hYyB2ZXJzaW9uLCBpdCBhY3R1YWxseSB0ZXN0cworICAgIC8vIHRoZSBpZGVudGl0eSBv
ZiBpdHMgdHdvIGFyZ3VtZW50cyBpbiBDKysuCisgICAgdm9pZCBvYmpDSWRlbnRpdHlJc0VxdWFs
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIENoYW5nZXMg
dGhlIGNvb2tpZSBwb2xpY3kgZnJvbSB0aGUgZGVmYXVsdCB0byBhbGxvdyBhbGwgY29va2llcy4K
KyAgICB2b2lkIHNldEFsd2F5c0FjY2VwdENvb2tpZXMoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCopOworCisgICAgLy8gQ2hhbmdlcyBhc3luY2hyb25vdXMgc3BlbGxjaGVja2lu
ZyBmbGFnIG9uIHRoZSBzZXR0aW5ncy4KKyAgICB2b2lkIHNldEFzeW5jaHJvbm91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAg
IC8vIFNob3dzIERldlRvb2xzIHdpbmRvdy4KKyAgICB2b2lkIHNob3dXZWJJbnNwZWN0b3IoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgY2xvc2VXZWJJbnNw
ZWN0b3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gR2l2
ZXMgZm9jdXMgdG8gdGhlIHdpbmRvdy4KKyAgICB2b2lkIHNldFdpbmRvd0lzS2V5KGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIE1ldGhvZCB0aGF0IGNvbnRy
b2xzIHdoZXRoZXIgcHJlc3NpbmcgVGFiIGtleSBjeWNsZXMgdGhyb3VnaCBwYWdlIGVsZW1lbnRz
CisgICAgLy8gb3IgaW5zZXJ0cyBhICdcdCcgY2hhciBpbiB0ZXh0IGFyZWEKKyAgICB2b2lkIHNl
dFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50Kik7CisKKyAgICAvLyBQYXNzZXMgdGhyb3VnaCB0byBXZWJQcmVmZXJlbmNlcyB3aGlj
aCBhbGxvd3MgdGhlIHVzZXIgdG8gaGF2ZSBhIGN1c3RvbQorICAgIC8vIHN0eWxlIHNoZWV0Lgor
ICAgIHZvaWQgc2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gUGFzc2VzIHRoaXMgcHJl
ZmVyZW5jZSB0aHJvdWdoIHRvIFdlYlNldHRpbmdzLgorICAgIHZvaWQgc2V0QXV0aG9yQW5kVXNl
clN0eWxlc0VuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisg
ICAgLy8gUHV0cyBXZWJraXQgaW4gImRhc2hib2FyZCBjb21wYXRpYmlsaXR5IG1vZGUiLCB3aGlj
aCBpcyB1c2VkIGluIG9ic2N1cmUKKyAgICAvLyBNYWMtb25seSBjaXJjdW1zdGFuY2VzLiBJdCdz
IG5vdCByZWFsbHkgbmVjZXNzYXJ5LCBhbmQgd2lsbCBtb3N0IGxpa2VseQorICAgIC8vIG5ldmVy
IGJlIHVzZWQgYnkgQ2hyb21lLCBidXQgc29tZSBsYXlvdXQgdGVzdHMgZGVwZW5kIG9uIGl0cyBw
cmVzZW5jZS4KKyAgICB2b2lkIHNldFVzZURhc2hib2FyZENvbXBhdGliaWxpdHlNb2RlKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIHZvaWQgc2V0U2Nyb2xsYmFy
UG9saWN5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIENh
dXNlcyBuYXZpZ2F0aW9uIGFjdGlvbnMganVzdCBwcmludG91dCB0aGUgaW50ZW5kZWQgbmF2aWdh
dGlvbiBpbnN0ZWFkCisgICAgLy8gb2YgdGFraW5nIHlvdSB0byB0aGUgcGFnZS4gVGhpcyBpcyB1
c2VkIGZvciBjYXNlcyBsaWtlIG1haWx0bywgd2hlcmUgeW91CisgICAgLy8gZG9uJ3QgYWN0dWFs
bHkgd2FudCB0byBvcGVuIHRoZSBtYWlsIHByb2dyYW0uCisgICAgdm9pZCBzZXRDdXN0b21Qb2xp
Y3lEZWxlZ2F0ZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICAv
LyBEZWxheXMgY29tcGxldGlvbiBvZiB0aGUgdGVzdCB1bnRpbCB0aGUgcG9saWN5IGRlbGVnYXRl
IHJ1bnMuCisgICAgdm9pZCB3YWl0Rm9yUG9saWN5RGVsZWdhdGUoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gQ2F1c2VzIFdpbGxTZW5kUmVxdWVzdCB0byBj
bGVhciBjZXJ0YWluIGhlYWRlcnMuCisgICAgdm9pZCBzZXRXaWxsU2VuZFJlcXVlc3RDbGVhckhl
YWRlcihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICAvLyBDYXVz
ZXMgV2lsbFNlbmRSZXF1ZXN0IHRvIGJsb2NrIHJlZGlyZWN0cy4KKyAgICB2b2lkIHNldFdpbGxT
ZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVjdChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7CisKKyAgICAvLyBDYXVzZXMgV2lsbFNlbmRSZXF1ZXN0IHRvIHJldHVybiBh
biBlbXB0eSByZXF1ZXN0LgorICAgIHZvaWQgc2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gQ29udmVydHMg
YSBVUkwgc3RhcnRpbmcgd2l0aCBmaWxlOi8vL3RtcC8gdG8gdGhlIGxvY2FsIG1hcHBpbmcuCisg
ICAgdm9pZCBwYXRoVG9Mb2NhbFJlc291cmNlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKKworICAgIC8vIFNldHMgYSBib29sIHN1Y2ggdGhhdCB3aGVuIGEgZHJhZyBpcyBz
dGFydGVkLCB3ZSBmaWxsIHRoZSBkcmFnIGNsaXBib2FyZAorICAgIC8vIHdpdGggYSBmYWtlIGZp
bGUgb2JqZWN0LgorICAgIHZvaWQgYWRkRmlsZVRvUGFzdGVib2FyZE9uRHJhZyhjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICAvLyBFeGVjdXRlcyBhbiBpbnRlcm5h
bCBjb21tYW5kIChzdXBlcnNldCBvZiBkb2N1bWVudC5leGVjQ29tbWFuZCgpIGNvbW1hbmRzKS4K
KyAgICB2b2lkIGV4ZWNDb21tYW5kKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
KTsKKworICAgIC8vIENoZWNrcyBpZiBhbiBpbnRlcm5hbCBjb21tYW5kIGlzIGN1cnJlbnRseSBh
dmFpbGFibGUuCisgICAgdm9pZCBpc0NvbW1hbmRFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIFNldCB0aGUgV2ViUHJlZmVyZW5jZSB0aGF0IGNv
bnRyb2xzIHdlYmtpdCdzIHBvcHVwIGJsb2NraW5nLgorICAgIHZvaWQgc2V0UG9wdXBCbG9ja2lu
Z0VuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8g
SWYgdHJ1ZSwgY2F1c2VzIHByb3Zpc2lvbmFsIGZyYW1lIGxvYWRzIHRvIGJlIHN0b3BwZWQgZm9y
IHRoZSByZW1haW5kZXIgb2YKKyAgICAvLyB0aGUgdGVzdC4KKyAgICB2b2lkIHNldFN0b3BQcm92
aXNpb25hbEZyYW1lTG9hZHMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwor
CisgICAgLy8gRW5hYmxlIG9yIGRpc2FibGUgc21hcnQgaW5zZXJ0L2RlbGV0ZS4gVGhpcyBpcyBl
bmFibGVkIGJ5IGRlZmF1bHQuCisgICAgdm9pZCBzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gRW5hYmxlIG9y
IGRpc2FibGUgdHJhaWxpbmcgd2hpdGVzcGFjZSBzZWxlY3Rpb24gb24gZG91YmxlIGNsaWNrLgor
ICAgIHZvaWQgc2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICB2b2lkIHBhdXNlQW5pbWF0aW9uQXRUaW1l
T25FbGVtZW50V2l0aElkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAg
ICB2b2lkIHBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBlbGVtZW50RG9lc0F1dG9Db21wbGV0
ZUZvckVsZW1lbnRXaXRoSWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwor
ICAgIHZvaWQgZW5hYmxlQXV0b1Jlc2l6ZU1vZGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOworICAgIHZvaWQgZGlzYWJsZUF1dG9SZXNpemVNb2RlKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIG51bWJlck9mQWN0aXZlQW5pbWF0aW9u
cyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBkaXNhYmxl
SW1hZ2VMb2FkaW5nKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2
b2lkIHNldEljb25EYXRhYmFzZUVuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCopOworICAgIHZvaWQgZHVtcFNlbGVjdGlvblJlY3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOworCisjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCisgICAgLy8gR3Jh
bnRzIHBlcm1pc3Npb24gZm9yIGRlc2t0b3Agbm90aWZpY2F0aW9ucyB0byBhbiBvcmlnaW4KKyAg
ICB2b2lkIGdyYW50RGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb24oY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIC8vIFNpbXVsYXRlcyBhIGNsaWNrIG9uIGEgZGVz
a3RvcCBub3RpZmljYXRpb24uCisgICAgdm9pZCBzaW11bGF0ZURlc2t0b3BOb3RpZmljYXRpb25D
bGljayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisjZW5kaWYKKworICAg
IHZvaWQgc2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBzZXREZWZlck1haW5SZXNvdXJj
ZURhdGFMb2FkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8v
IERlYWxzIHdpdGggV2ViIEF1ZGlvIFdBViBmaWxlIGRhdGEuCisgICAgdm9pZCBzZXRBdWRpb0Rh
dGEoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIGNvbnN0IFdlYktp
dDo6V2ViQXJyYXlCdWZmZXJWaWV3JiBhdWRpb0RhdGEoKSBjb25zdCB7IHJldHVybiBtX2F1ZGlv
RGF0YTsgfSAKKworICAgIC8vIFRoZSBmb2xsb3dpbmcgYXJlIG9ubHkgc3R1YnMuCisgICAgLy8g
RklYTUU6IEltcGxlbWVudCBhbnkgb2YgdGhlc2UgdGhhdCBhcmUgbmVlZGVkIHRvIHBhc3MgdGhl
IGxheW91dCB0ZXN0cy4KKyAgICB2b2lkIGR1bXBBc1dlYkFyY2hpdmUoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgZHVtcFRpdGxlQ2hhbmdlcyhjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBzZXRNYWluRnJhbWVJc0Zp
cnN0UmVzcG9uZGVyKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2
b2lkIGRpc3BsYXkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZv
aWQgZGlzcGxheUludmFsaWRhdGVkUmVnaW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKKyAgICB2b2lkIHRlc3RSZXBhaW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKKyAgICB2b2lkIHJlcGFpbnRTd2VlcEhvcml6b250YWxseShjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBjbGVhckJhY2tGb3J3YXJkTGlz
dChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBrZWVwV2Vi
SGlzdG9yeShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBz
dG9yZVdlYlNjcmlwdE9iamVjdChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
CisgICAgdm9pZCBhY2Nlc3NTdG9yZWRXZWJTY3JpcHRPYmplY3QoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgb2JqQ0NsYXNzTmFtZU9mKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGFkZERpc2FsbG93ZWRVUkwoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgY2FsbFNob3VsZENs
b3NlT25XZWJWaWV3KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2
b2lkIHNldENhbGxDbG9zZU9uV2ViVmlld3MoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCopOworICAgIHZvaWQgc2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICB2b2lkIHNldEphdmFTY3JpcHRDYW5BY2Nl
c3NDbGlwYm9hcmQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZv
aWQgc2V0WFNTQXVkaXRvckVuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOworICAgIHZvaWQgb3ZlcnJpZGVQcmVmZXJlbmNlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVV
UkxzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHNldEFs
bG93RGlzcGxheU9mSW5zZWN1cmVDb250ZW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKKyAgICB2b2lkIHNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBzZXRBbGxvd1J1bm5pbmdP
Zkluc2VjdXJlQ29udGVudChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisK
KyAgICB2b2lkIGV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgZXZhbHVhdGVTY3Jp
cHRJbklzb2xhdGVkV29ybGQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwor
ICAgIHZvaWQgc2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIFRoZSBmYWxsYmFjayBtZXRob2QgaXMgY2Fs
bGVkIHdoZW4gYSBub25leGlzdGVudCBtZXRob2QgaXMgY2FsbGVkIG9uCisgICAgLy8gdGhlIGxh
eW91dCB0ZXN0IGNvbnRyb2xsZXIgb2JqZWN0LgorICAgIC8vIEl0IGlzIHVzZWZ1bGwgdG8gY2F0
Y2ggdHlwb3MgaW4gdGhlIEphdmFTY3JpcHQgY29kZSAoYSBmZXcgbGF5b3V0IHRlc3RzCisgICAg
Ly8gZG8gaGF2ZSB0eXBvcyBpbiB0aGVtKSBhbmQgaXQgYWxsb3dzIHRoZSBzY3JpcHQgdG8gY29u
dGludWUgcnVubmluZyBpbgorICAgIC8vIHRoYXQgY2FzZSAoYXMgdGhlIE1hYyBkb2VzKS4KKyAg
ICB2b2lkIGZhbGxiYWNrTWV0aG9kKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
KTsKKworICAgIC8vIEFsbG93cyBsYXlvdXQgdGVzdHMgdG8gbWFuYWdlIG9yaWdpbnMnIHdoaXRl
bGlzdGluZy4KKyAgICB2b2lkIGFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHJlbW92ZU9yaWdpbkFjY2Vz
c1doaXRlbGlzdEVudHJ5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKwor
ICAgIC8vIENsZWFycyBhbGwgYXBwbGljYXRpb24gY2FjaGVzLgorICAgIHZvaWQgY2xlYXJBbGxB
cHBsaWNhdGlvbkNhY2hlcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Cisg
ICAgLy8gQ2xlYXJzIGFuIGFwcGxpY2F0aW9uIGNhY2hlIGZvciBhbiBvcmlnaW4uCisgICAgdm9p
ZCBjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCopOworICAgIC8vIFJldHVybnMgb3JpZ2lucyB0aGF0IGhhdmUgYXBwbGljYXRp
b24gY2FjaGVzLgorICAgIHZvaWQgb3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICAvLyBTZXRzIHRoZSBhcHBsaWNhdGlv
biBjYWNoZSBxdW90YSBmb3IgdGhlIGxvY2FsaG9zdCBvcmlnaW4uCisgICAgdm9pZCBzZXRBcHBs
aWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOworICAgIC8vIFJldHVybnMgZGlzayB1c2FnZSBieSBhbGwgYXBwbGljYXRpb24gY2FjaGVz
IGZvciBhbiBvcmlnaW4uCisgICAgdm9pZCBhcHBsaWNhdGlvbkNhY2hlRGlza1VzYWdlRm9yT3Jp
Z2luKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIENsZWFy
cyBhbGwgZGF0YWJhc2VzLgorICAgIHZvaWQgY2xlYXJBbGxEYXRhYmFzZXMoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIC8vIFNldHMgdGhlIGRlZmF1bHQgcXVvdGEg
Zm9yIGFsbCBvcmlnaW5zCisgICAgdm9pZCBzZXREYXRhYmFzZVF1b3RhKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIENhbGxzIHNldGxvY2FsZShMQ19BTEws
IC4uLikgZm9yIGEgc3BlY2lmaWVkIGxvY2FsZS4KKyAgICAvLyBSZXNldHMgYmV0d2VlbiB0ZXN0
cy4KKyAgICB2b2lkIHNldFBPU0lYTG9jYWxlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKKworICAgIC8vIENhdXNlcyBsYXlvdXQgdG8gaGFwcGVuIGFzIGlmIHRhcmdldHRl
ZCB0byBwcmludGVkIHBhZ2VzLgorICAgIHZvaWQgc2V0UHJpbnRpbmcoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gR2V0cyB0aGUgcGFnZSBzaXplIGFuZCBt
YXJnaW5zIGZvciBhIHByaW50ZWQgcGFnZS4KKyAgICB2b2lkIHBhZ2VTaXplQW5kTWFyZ2luc0lu
UGl4ZWxzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIFJl
dHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCBwYWdlIGJveCBoYXMgY3VzdG9tIHBhZ2Ugc2l6ZSBz
dHlsZSBmb3IKKyAgICAvLyBwcmludGluZy4KKyAgICB2b2lkIGhhc0N1c3RvbVBhZ2VTaXplU3R5
bGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gR2V0cyB0
aGUgcGFnZS1yZWxhdGVkIHByb3BlcnR5IGZvciBwcmludGVkIGNvbnRlbnQKKyAgICB2b2lkIHBh
Z2VQcm9wZXJ0eShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICAv
LyBHZXRzIHRoZSBudW1iZXIgb2YgcGFnZXMgdG8gYmUgcHJpbnRlZC4KKyAgICB2b2lkIG51bWJl
ck9mUGFnZXMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8g
R2V0cyB0aGUgbnVtYmVyIG9mIGdlb2xvY2F0aW9uIHBlcm1pc3Npb25zIHJlcXVlc3RzIHBlbmRp
bmcuCisgICAgdm9pZCBudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0
cyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICAvLyBBbGxvd3Mg
bGF5b3V0IHRlc3RzIHRvIGV4ZWMgc2NyaXB0cyBhdCBXZWJJbnNwZWN0b3Igc2lkZS4KKyAgICB2
b2lkIGV2YWx1YXRlSW5XZWJJbnNwZWN0b3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCopOworCisgICAgLy8gRm9yY2VzIHRoZSBzZWxlY3Rpb24gY29sb3JzIGZvciB0ZXN0aW5n
IHVuZGVyIExpbnV4LgorICAgIHZvaWQgZm9yY2VSZWRTZWxlY3Rpb25Db2xvcnMoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gQWRkcyBhIHVzZXIgc2NyaXB0
IG9yIHVzZXIgc3R5bGUgc2hlZXQgdG8gYmUgaW5qZWN0ZWQgaW50byBuZXcgZG9jdW1lbnRzLgor
ICAgIHZvaWQgYWRkVXNlclNjcmlwdChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7CisgICAgdm9pZCBhZGRVc2VyU3R5bGVTaGVldChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7CisKKyAgICAvLyBEZXZpY2VPcmllbnRhdGlvbiByZWxhdGVkIGZ1bmN0aW9u
cworICAgIHZvaWQgc2V0TW9ja0RldmljZU9yaWVudGF0aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIEdlb2xvY2F0aW9uIHJlbGF0ZWQgZnVuY3Rpb25z
LgorICAgIHZvaWQgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHNldE1vY2tHZW9s
b2NhdGlvbkVycm9yKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAg
IC8vIEVtcHR5IHN0dWIgbWV0aG9kIHRvIGtlZXAgcGFyaXR5IHdpdGggb2JqZWN0IG1vZGVsIGV4
cG9zZWQgYnkgZ2xvYmFsIExheW91dFRlc3RDb250cm9sbGVyLgorICAgIHZvaWQgYWJvcnRNb2Rh
bChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICAvLyBTcGVlY2gg
aW5wdXQgcmVsYXRlZCBmdW5jdGlvbnMuCisjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKKyAgICB2
b2lkIGFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50Kik7CisgICAgdm9pZCBzZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVjdChjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisjZW5kaWYKKyNpZiBFTkFCTEUoU0NSSVBURURf
U1BFRUNIKQorICAgIHZvaWQgYWRkTW9ja1NwZWVjaFJlY29nbml0aW9uUmVzdWx0KGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHNldE1vY2tTcGVlY2hSZWNv
Z25pdGlvbkVycm9yKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2
b2lkIHdhc01vY2tTcGVlY2hSZWNvZ25pdGlvbkFib3J0ZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOworI2VuZGlmCisgICAgdm9pZCBzdGFydFNwZWVjaElucHV0KGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIHZvaWQgbGF5ZXJUcmVlQXNU
ZXh0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJncywgQ3BwVmFyaWFudCogcmVzdWx0KTsKKwor
ICAgIHZvaWQgbG9zZUNvbXBvc2l0b3JDb250ZXh0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
cywgQ3BwVmFyaWFudCogcmVzdWx0KTsKKworICAgIHZvaWQgbWFya2VyVGV4dEZvckxpc3RJdGVt
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGZpbmRTdHJp
bmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgdm9pZCBzZXRN
aW5pbXVtVGltZXJJbnRlcnZhbChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
CisKKyAgICAvLyBFeHBlY3RzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBiZSBhbiBpbnB1dCBlbGVt
ZW50IGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIGEgYm9vbGVhbi4KKyAgICAvLyBGb3J3
YXJkcyB0aGUgc2V0QXV0b2ZpbGxlZCgpIGNhbGwgdG8gdGhlIGVsZW1lbnQuCisgICAgdm9pZCBz
ZXRBdXRvZmlsbGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAg
IC8vIEV4cGVjdHMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGFuIGlucHV0IGVsZW1lbnQgYW5k
IHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYmUgYSBzdHJpbmcgdmFsdWUuCisgICAgLy8gRm9yd2Fy
ZHMgdGhlIHNldFZhbHVlRm9yVXNlcigpIGNhbGwgdG8gdGhlIGVsZW1lbnQuCisgICAgdm9pZCBz
ZXRWYWx1ZUZvclVzZXIoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisg
ICAgLy8gTG9jYWxTdG9yYWdlIG9yaWdpbi1yZWxhdGVkCisgICAgdm9pZCBkZWxldGVBbGxMb2Nh
bFN0b3JhZ2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQg
b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOworICAgIHZvaWQgZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGxvY2FsU3RvcmFnZURpc2tVc2FnZUZv
ck9yaWdpbihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBv
YnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHN5bmNMb2NhbFN0b3JhZ2UoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gV2ViUGVybWlzc2lvbkNsaWVudCByZWxh
dGVkLgorICAgIHZvaWQgc2V0SW1hZ2VzQWxsb3dlZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7CisgICAgdm9pZCBzZXRTY3JpcHRzQWxsb3dlZChjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBzZXRTdG9yYWdlQWxsb3dlZChjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBzZXRQbHVnaW5zQWxsb3dl
ZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBkdW1wUGVy
bWlzc2lvbkNsaWVudENhbGxiYWNrcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7CisKKyAgICAvLyBFbmFibGUgb3IgZGlzYWJsZSBwbHVnaW5zLgorICAgIHZvaWQgc2V0UGx1
Z2luc0VuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAg
Ly8gU3dpdGNoIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBwYWdlLgorICAgIHZvaWQgc2V0UGFnZVZp
c2liaWxpdHkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQg
cmVzZXRQYWdlVmlzaWJpbGl0eShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
CisKKyAgICAvLyBDaGFuZ2VzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGZvY3VzZWQgZWxlbWVudC4K
KyAgICB2b2lkIHNldFRleHREaXJlY3Rpb24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCopOworCisgICAgdm9pZCBzZXRTaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9y
ZVVubG9hZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICB2b2lk
IGVuYWJsZUZpeGVkTGF5b3V0TW9kZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7CisgICAgdm9pZCBzZXRGaXhlZExheW91dFNpemUoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCopOworCisgICAgdm9pZCBzZWxlY3Rpb25Bc01hcmt1cChjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICAvLyBTd2l0Y2ggdGhlIGxpbmsgZGV0ZWN0
aW9uLgorICAgIHZvaWQgc2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoYm9vbCk7CisK
KyNpZiBFTkFCTEUoUE9JTlRFUl9MT0NLKQorICAgIHZvaWQgZGlkTG9zZVBvaW50ZXJMb2NrKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHNldFBvaW50ZXJM
b2NrV2lsbEZhaWxTeW5jaHJvbm91c2x5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKKyAgICB2b2lkIHNldFBvaW50ZXJMb2NrV2lsbEZhaWxBc3luY2hyb25vdXNseShjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisjZW5kaWYKKworICAgIHZvaWQgd29y
a2VyVGhyZWFkQ291bnQoQ3BwVmFyaWFudCopOworCisgICAgLy8gRXhwZWN0cyBvbmUgc3RyaW5n
IGFyZ3VtZW50IGZvciBzZW5kaW5nIHN1Y2Nlc3NmdWwgcmVzdWx0LCB6ZXJvCisgICAgLy8gYXJn
dW1lbnRzIGZvciBzZW5kaW5nIGEgZmFpbHVyZSByZXN1bHQuCisgICAgdm9pZCBzZW5kV2ViSW50
ZW50UmVzcG9uc2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAg
Ly8gQ2F1c2UgdGhlIHdlYiBpbnRlbnQgdG8gYmUgZGVsaXZlcmVkIHRvIHRoaXMgY29udGV4dC4K
KyAgICB2b2lkIGRlbGl2ZXJXZWJJbnRlbnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCopOworCisgICAgLy8gRW5hYmxlcyBvciBkaXNhYmxlcyBzdWJwaXhlbCBwb3NpdGlvbmlu
ZyAoaS5lLiBmcmFjdGlvbmFsIFggcG9zaXRpb25zIGZvcgorICAgIC8vIGdseXBocykgaW4gdGV4
dCByZW5kZXJpbmcgb24gTGludXguIFNpbmNlIHRoaXMgbWV0aG9kIGNoYW5nZXMgZ2xvYmFsCisg
ICAgLy8gc2V0dGluZ3MsIHRlc3RzIHRoYXQgY2FsbCBpdCBtdXN0IHVzZSB0aGVpciBvd24gY3Vz
dG9tIGZvbnQgZmFtaWx5IGZvcgorICAgIC8vIGFsbCB0ZXh0IHRoYXQgdGhleSByZW5kZXIuIElm
IG5vdCwgYW4gYWxyZWFkeS1jYWNoZWQgc3R5bGUgd2lsbCBiZSB1c2VkLAorICAgIC8vIHJlc3Vs
dGluZyBpbiB0aGUgY2hhbmdlZCBzZXR0aW5nIGJlaW5nIGlnbm9yZWQuCisgICAgdm9pZCBzZXRU
ZXh0U3VicGl4ZWxQb3NpdGlvbmluZyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7CisKKyAgICAvLyBVc2VkIHRvIHNldCB0aGUgZGV2aWNlIHNjYWxlIGZhY3Rvci4KKyAgICB2
b2lkIHNldEJhY2tpbmdTY2FsZUZhY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50Kik7CisKKyAgICAvLyBSZXRyaWV2ZXMgdGhlIHRleHQgc3Vycm91bmRpbmcgYSBwb3NpdGlv
biBpbiBhIHRleHQgbm9kZS4KKyAgICAvLyBFeHBlY3RzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBi
ZSBhIHRleHQgbm9kZSwgdGhlIHNlY29uZCBhbmQgdGhpcmQgdG8gYmUKKyAgICAvLyBwb2ludCBj
b29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUgbm9kZSBhbmQgdGhlIGZvdXJ0aCB0aGUgbWF4aW11
bSB0ZXh0CisgICAgLy8gbGVuZ3RoIHRvIHJldHJpZXZlLgorICAgIHZvaWQgdGV4dFN1cnJvdW5k
aW5nTm9kZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKK3B1YmxpYzoK
KyAgICAvLyBUaGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIG5vdCBleHBvc2VkIHRvIEphdmFTY3Jp
cHQuCisgICAgdm9pZCBzZXRXb3JrUXVldWVGcm96ZW4oYm9vbCBmcm96ZW4pIHsgbV93b3JrUXVl
dWUuc2V0RnJvemVuKGZyb3plbik7IH0KKworICAgIGJvb2wgc2hvdWxkRHVtcEFzQXVkaW8oKSBj
b25zdCB7IHJldHVybiBtX2R1bXBBc0F1ZGlvOyB9IAorICAgIHZvaWQgc2V0U2hvdWxkRHVtcEFz
QXVkaW8oYm9vbCBkdW1wQXNBdWRpbykgeyBtX2R1bXBBc0F1ZGlvID0gZHVtcEFzQXVkaW87IH0g
CisgICAgYm9vbCBzaG91bGREdW1wQXNUZXh0KCkgeyByZXR1cm4gbV9kdW1wQXNUZXh0OyB9Cisg
ICAgdm9pZCBzZXRTaG91bGREdW1wQXNUZXh0KGJvb2wgdmFsdWUpIHsgbV9kdW1wQXNUZXh0ID0g
dmFsdWU7IH0KKyAgICBib29sIHNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkgeyByZXR1cm4g
bV9kdW1wRWRpdGluZ0NhbGxiYWNrczsgfQorICAgIGJvb2wgc2hvdWxkRHVtcEZyYW1lTG9hZENh
bGxiYWNrcygpIHsgcmV0dXJuIG1fZHVtcEZyYW1lTG9hZENhbGxiYWNrczsgfQorICAgIHZvaWQg
c2V0U2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcyhib29sIHZhbHVlKSB7IG1fZHVtcEZyYW1l
TG9hZENhbGxiYWNrcyA9IHZhbHVlOyB9CisgICAgYm9vbCBzaG91bGREdW1wUHJvZ3Jlc3NGaW5p
c2hlZENhbGxiYWNrKCkgeyByZXR1cm4gbV9kdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrOyB9
CisgICAgdm9pZCBzZXRTaG91bGREdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrKGJvb2wgdmFs
dWUpIHsgbV9kdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrID0gdmFsdWU7IH0KKyAgICBib29s
IHNob3VsZER1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzKCkgeyByZXR1cm4gbV9k
dW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrczsgfQorICAgIHZvaWQgc2V0U2hvdWxk
RHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MoYm9vbCB2YWx1ZSkgeyBtX2R1bXBV
c2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzID0gdmFsdWU7IH0KKyAgICBib29sIHNob3Vs
ZER1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSB7cmV0dXJuIG1fZHVtcFJlc291cmNlTG9hZENh
bGxiYWNrczsgfQorICAgIHZvaWQgc2V0U2hvdWxkRHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlw
ZXMoYm9vbCB2YWx1ZSkgeyBtX2R1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzID0gdmFsdWU7
IH0KKyAgICBib29sIHNob3VsZER1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzKCkge3JldHVy
biBtX2R1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzOyB9CisgICAgYm9vbCBzaG91bGREdW1w
U3RhdHVzQ2FsbGJhY2tzKCkgeyByZXR1cm4gbV9kdW1wV2luZG93U3RhdHVzQ2hhbmdlczsgfQor
ICAgIGJvb2wgc2hvdWxkRHVtcFNlbGVjdGlvblJlY3QoKSB7IHJldHVybiBtX2R1bXBTZWxlY3Rp
b25SZWN0OyB9CisgICAgYm9vbCBzaG91bGREdW1wQmFja0ZvcndhcmRMaXN0KCkgeyByZXR1cm4g
bV9kdW1wQmFja0ZvcndhcmRMaXN0OyB9CisgICAgYm9vbCBzaG91bGREdW1wVGl0bGVDaGFuZ2Vz
KCkgeyByZXR1cm4gbV9kdW1wVGl0bGVDaGFuZ2VzOyB9CisgICAgYm9vbCBzaG91bGREdW1wUGVy
bWlzc2lvbkNsaWVudENhbGxiYWNrcygpIHsgcmV0dXJuIG1fZHVtcFBlcm1pc3Npb25DbGllbnRD
YWxsYmFja3M7IH0KKyAgICBib29sIHNob3VsZER1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25z
KCkgeyByZXR1cm4gbV9kdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9uczsgfQorICAgIGJvb2wg
c2hvdWxkRHVtcENoaWxkRnJhbWVzQXNUZXh0KCkgeyByZXR1cm4gbV9kdW1wQ2hpbGRGcmFtZXNB
c1RleHQ7IH0KKyAgICBib29sIHNob3VsZEdlbmVyYXRlUGl4ZWxSZXN1bHRzKCkgeyByZXR1cm4g
bV9nZW5lcmF0ZVBpeGVsUmVzdWx0czsgfQorICAgIHZvaWQgc2V0U2hvdWxkR2VuZXJhdGVQaXhl
bFJlc3VsdHMoYm9vbCB2YWx1ZSkgeyBtX2dlbmVyYXRlUGl4ZWxSZXN1bHRzID0gdmFsdWU7IH0K
KyAgICBib29sIHNob3VsZER1bXBDcmVhdGVWaWV3KCkgeyByZXR1cm4gbV9kdW1wQ3JlYXRlVmll
dzsgfQorICAgIGJvb2wgYWNjZXB0c0VkaXRpbmcoKSB7IHJldHVybiBtX2FjY2VwdHNFZGl0aW5n
OyB9CisgICAgYm9vbCBjYW5PcGVuV2luZG93cygpIHsgcmV0dXJuIG1fY2FuT3BlbldpbmRvd3M7
IH0KKyAgICBib29sIHNob3VsZEFkZEZpbGVUb1Bhc3RlYm9hcmQoKSB7IHJldHVybiBtX3Nob3Vs
ZEFkZEZpbGVUb1Bhc3RlYm9hcmQ7IH0KKyAgICBib29sIHN0b3BQcm92aXNpb25hbEZyYW1lTG9h
ZHMoKSB7IHJldHVybiBtX3N0b3BQcm92aXNpb25hbEZyYW1lTG9hZHM7IH0KKyAgICBib29sIGRl
ZmVyTWFpblJlc291cmNlRGF0YUxvYWQoKSB7IHJldHVybiBtX2RlZmVyTWFpblJlc291cmNlRGF0
YUxvYWQ7IH0KKyAgICB2b2lkIHNldFNob3dEZWJ1Z0xheWVyVHJlZShib29sIHZhbHVlKSB7IG1f
c2hvd0RlYnVnTGF5ZXJUcmVlID0gdmFsdWU7IH0KKyAgICB2b2lkIHNldFRpdGxlVGV4dERpcmVj
dGlvbihXZWJLaXQ6OldlYlRleHREaXJlY3Rpb24gZGlyKQorICAgIHsKKyAgICAgICAgbV90aXRs
ZVRleHREaXJlY3Rpb24uc2V0KGRpciA9PSBXZWJLaXQ6OldlYlRleHREaXJlY3Rpb25MZWZ0VG9S
aWdodCA/ICJsdHIiIDogInJ0bCIpOworICAgIH0KKworICAgIGJvb2wgc2hvdWxkSW50ZXJjZXB0
UG9zdE1lc3NhZ2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW50ZXJjZXB0UG9zdE1lc3Nh
Z2UuaXNCb29sKCkgJiYgbV9pbnRlcmNlcHRQb3N0TWVzc2FnZS50b0Jvb2xlYW4oKTsKKyAgICB9
CisKKyAgICB2b2lkIHNldElzUHJpbnRpbmcoYm9vbCB2YWx1ZSkgeyBtX2lzUHJpbnRpbmcgPSB2
YWx1ZTsgfQorICAgIGJvb2wgaXNQcmludGluZygpIHsgcmV0dXJuIG1faXNQcmludGluZzsgfQor
CisgICAgYm9vbCB0ZXN0UmVwYWludCgpIGNvbnN0IHsgcmV0dXJuIG1fdGVzdFJlcGFpbnQ7IH0K
KyAgICBib29sIHN3ZWVwSG9yaXpvbnRhbGx5KCkgY29uc3QgeyByZXR1cm4gbV9zd2VlcEhvcml6
b250YWxseTsgfQorCisgICAgdm9pZCBzZXRIYXNDdXN0b21GdWxsU2NyZWVuQmVoYXZpb3IoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIGJvb2wgaGFzQ3VzdG9tRnVs
bFNjcmVlbkJlaGF2aW9yKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDdXN0b21GdWxsU2NyZWVuQmVo
YXZpb3I7IH0KKworICAgIC8vIENhbGxlZCBieSB0aGUgd2VidmlldyBkZWxlZ2F0ZSB3aGVuIHRo
ZSB0b3BsZXZlbCBmcmFtZSBsb2FkIGlzIGRvbmUuCisgICAgdm9pZCBsb2NhdGlvbkNoYW5nZURv
bmUoKTsKKworICAgIC8vIENhbGxlZCBieSB0aGUgd2VidmlldyBkZWxlZ2F0ZSB3aGVuIHRoZSBw
b2xpY3kgZGVsZWdhdGUgcnVucyBpZiB0aGUKKyAgICAvLyB3YWl0Rm9yUG9saWN5RGVsZWdhdGUg
d2FzIGNhbGxlZC4KKyAgICB2b2lkIHBvbGljeURlbGVnYXRlRG9uZSgpOworCisgICAgLy8gUmVp
bml0aWFsaXplcyBhbGwgc3RhdGljIHZhbHVlcy4gVGhlIHJlc2V0KCkgbWV0aG9kIHNob3VsZCBi
ZSBjYWxsZWQKKyAgICAvLyBiZWZvcmUgdGhlIHN0YXJ0IG9mIGVhY2ggdGVzdCAoY3VycmVudGx5
IGZyb20gVGVzdFNoZWxsOjpydW5GaWxlVGVzdCkuCisgICAgdm9pZCByZXNldCgpOworCisgICAg
Ly8gQSBzaW5nbGUgaXRlbSBpbiB0aGUgd29yayBxdWV1ZS4KKyAgICBjbGFzcyBXb3JrSXRlbSB7
CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5Xb3JrSXRlbSgpIHsgfQorCisgICAgICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHN0YXJ0ZWQgYSBsb2FkLgorICAgICAgICB2aXJ0dWFs
IGJvb2wgcnVuKFRlc3RTaGVsbCopID0gMDsKKyAgICB9OworCisgICAgVGFza0xpc3QqIHRhc2tM
aXN0KCkgeyByZXR1cm4gJm1fdGFza0xpc3Q7IH0KKworICAgIGJvb2wgc2hvdWxkU3RheU9uUGFn
ZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFN0YXlP
blBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkOyB9CisKK3ByaXZhdGU6CisgICAgZnJpZW5k
IGNsYXNzIFdvcmtJdGVtOworICAgIGZyaWVuZCBjbGFzcyBXb3JrUXVldWU7CisKKyAgICAvLyBI
ZWxwZXIgY2xhc3MgZm9yIG1hbmFnaW5nIGV2ZW50cyBxdWV1ZWQgYnkgbWV0aG9kcyBsaWtlIHF1
ZXVlTG9hZCBvcgorICAgIC8vIHF1ZXVlU2NyaXB0LgorICAgIGNsYXNzIFdvcmtRdWV1ZSB7Cisg
ICAgcHVibGljOgorICAgICAgICBXb3JrUXVldWUoTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRy
b2xsZXIpIDogbV9mcm96ZW4oZmFsc2UpLCBtX2NvbnRyb2xsZXIoY29udHJvbGxlcikgeyB9Cisg
ICAgICAgIHZpcnR1YWwgfldvcmtRdWV1ZSgpOworICAgICAgICB2b2lkIHByb2Nlc3NXb3JrU29v
bigpOworCisgICAgICAgIC8vIFJlc2V0IHRoZSBzdGF0ZSBvZiB0aGUgY2xhc3MgYmV0d2VlbiB0
ZXN0cy4KKyAgICAgICAgdm9pZCByZXNldCgpOworCisgICAgICAgIHZvaWQgYWRkV29yayhXb3Jr
SXRlbSopOworCisgICAgICAgIHZvaWQgc2V0RnJvemVuKGJvb2wgZnJvemVuKSB7IG1fZnJvemVu
ID0gZnJvemVuOyB9CisgICAgICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJuIG1fcXVldWUuaXNF
bXB0eSgpOyB9CisgICAgICAgIFRhc2tMaXN0KiB0YXNrTGlzdCgpIHsgcmV0dXJuICZtX3Rhc2tM
aXN0OyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIHByb2Nlc3NXb3JrKCk7CisgICAg
ICAgIGNsYXNzIFdvcmtRdWV1ZVRhc2s6IHB1YmxpYyBNZXRob2RUYXNrPFdvcmtRdWV1ZT4gewor
ICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBXb3JrUXVldWVUYXNrKFdvcmtRdWV1ZSogb2Jq
ZWN0KTogTWV0aG9kVGFzazxXb3JrUXVldWU+KG9iamVjdCkgeyB9CisgICAgICAgICAgICB2aXJ0
dWFsIHZvaWQgcnVuSWZWYWxpZCgpIHsgbV9vYmplY3QtPnByb2Nlc3NXb3JrKCk7IH0KKyAgICAg
ICAgfTsKKworICAgICAgICBUYXNrTGlzdCBtX3Rhc2tMaXN0OworICAgICAgICBEZXF1ZTxXb3Jr
SXRlbSo+IG1fcXVldWU7CisgICAgICAgIGJvb2wgbV9mcm96ZW47CisgICAgICAgIExheW91dFRl
c3RDb250cm9sbGVyKiBtX2NvbnRyb2xsZXI7CisgICAgfTsKKworICAgIC8vIFN1cHBvcnQgZm9y
IG92ZXJyaWRlUHJlZmVyZW5jZS4KKyAgICBib29sIGNwcFZhcmlhbnRUb0Jvb2woY29uc3QgQ3Bw
VmFyaWFudCYpOworICAgIGludDMyX3QgY3BwVmFyaWFudFRvSW50MzIoY29uc3QgQ3BwVmFyaWFu
dCYpOworICAgIFdlYktpdDo6V2ViU3RyaW5nIGNwcFZhcmlhbnRUb1dlYlN0cmluZyhjb25zdCBD
cHBWYXJpYW50Jik7CisgICAgVmVjdG9yPFdlYktpdDo6V2ViU3RyaW5nPiBjcHBWYXJpYW50VG9X
ZWJTdHJpbmdBcnJheShjb25zdCBDcHBWYXJpYW50Jik7CisKKyAgICB2b2lkIGxvZ0Vycm9yVG9D
b25zb2xlKGNvbnN0IHN0ZDo6c3RyaW5nJik7CisgICAgdm9pZCBjb21wbGV0ZU5vdGlmeURvbmUo
Ym9vbCBpc1RpbWVvdXQpOworICAgIGNsYXNzIE5vdGlmeURvbmVUaW1lZE91dFRhc2s6IHB1Ymxp
YyBNZXRob2RUYXNrPExheW91dFRlc3RDb250cm9sbGVyPiB7CisgICAgcHVibGljOgorICAgICAg
ICBOb3RpZnlEb25lVGltZWRPdXRUYXNrKExheW91dFRlc3RDb250cm9sbGVyKiBvYmplY3QpOiBN
ZXRob2RUYXNrPExheW91dFRlc3RDb250cm9sbGVyPihvYmplY3QpIHsgfQorICAgICAgICB2aXJ0
dWFsIHZvaWQgcnVuSWZWYWxpZCgpIHsgbV9vYmplY3QtPmNvbXBsZXRlTm90aWZ5RG9uZSh0cnVl
KTsgfQorICAgIH07CisKKworICAgIGJvb2wgcGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRX
aXRoSWQoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1l
LCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgZWxlbWVudElkKTsKKyAgICBib29sIHBhdXNlVHJh
bnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgcHJv
cGVydHlOYW1lLCBkb3VibGUgdGltZSwgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGVsZW1lbnRJ
ZCk7CisgICAgYm9vbCBlbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQoY29u
c3QgV2ViS2l0OjpXZWJTdHJpbmcmKTsKKyAgICBpbnQgbnVtYmVyT2ZBY3RpdmVBbmltYXRpb25z
KCk7CisKKyAgICAvLyBVc2VkIGZvciB0ZXN0IHRpbWVvdXRzLgorICAgIFRhc2tMaXN0IG1fdGFz
a0xpc3Q7CisKKyAgICAvLyBOb24tb3duaW5nIHBvaW50ZXIuIFRoZSBMYXlvdXRUZXN0Q29udHJv
bGxlciBpcyBvd25lZCBieSB0aGUgaG9zdC4KKyAgICBUZXN0U2hlbGwqIG1fc2hlbGw7CisKKyAg
ICAvLyBJZiB0cnVlLCB0aGUgdGVzdF9zaGVsbCB3aWxsIHByb2R1Y2UgYSBwbGFpbiB0ZXh0IGR1
bXAgcmF0aGVyIHRoYW4gYQorICAgIC8vIHRleHQgcmVwcmVzZW50YXRpb24gb2YgdGhlIHJlbmRl
cmVyLgorICAgIGJvb2wgbV9kdW1wQXNUZXh0OworCisgICAgLy8gSWYgdHJ1ZSwgdGhlIHRlc3Rf
c2hlbGwgd2lsbCBvdXRwdXQgYSBiYXNlNjQgZW5jb2RlZCBXQVZFIGZpbGUuCisgICAgYm9vbCBt
X2R1bXBBc0F1ZGlvOworCisgICAgLy8gSWYgdHJ1ZSwgdGhlIHRlc3Rfc2hlbGwgd2lsbCB3cml0
ZSBhIGRlc2NyaXB0aXZlIGxpbmUgZm9yIGVhY2ggZWRpdGluZworICAgIC8vIGNvbW1hbmQuCisg
ICAgYm9vbCBtX2R1bXBFZGl0aW5nQ2FsbGJhY2tzOworCisgICAgLy8gSWYgdHJ1ZSwgdGhlIHRl
c3Rfc2hlbGwgd2lsbCBkcmF3IHRoZSBib3VuZHMgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHJl
Y3QKKyAgICAvLyB0YWtpbmcgcG9zc2libGUgdHJhbnNmb3JtcyBvZiB0aGUgc2VsZWN0aW9uIHJl
Y3QgaW50byBhY2NvdW50LgorICAgIGJvb2wgbV9kdW1wU2VsZWN0aW9uUmVjdDsKKworICAgIC8v
IElmIHRydWUsIHRoZSB0ZXN0X3NoZWxsIHdpbGwgb3V0cHV0IGEgZGVzY3JpcHRpdmUgbGluZSBm
b3IgZWFjaCBmcmFtZQorICAgIC8vIGxvYWQgY2FsbGJhY2suCisgICAgYm9vbCBtX2R1bXBGcmFt
ZUxvYWRDYWxsYmFja3M7CisKKyAgICAvLyBJZiB0cnVlLCB0aGUgdGVzdF9zaGVsbCB3aWxsIG91
dHB1dCBhIGRlc2NyaXB0aXZlIGxpbmUgZm9yIHRoZSBwcm9ncmVzcworICAgIC8vIGZpbmlzaGVk
IGNhbGxiYWNrLgorICAgIGJvb2wgbV9kdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrOworCisg
ICAgLy8gSWYgdHJ1ZSwgdGhlIHRlc3Rfc2hlbGwgd2lsbCBvdXRwdXQgYSBsaW5lIG9mIHRoZSB1
c2VyIGdlc3R1cmUgc3RhdHVzCisgICAgLy8gdGV4dCBmb3Igc29tZSBmcmFtZSBsb2FkIGNhbGxi
YWNrcy4KKyAgICBib29sIG1fZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3M7CisK
KyAgICAvLyBJZiB0cnVlLCB0aGUgdGVzdF9zaGVsbCB3aWxsIG91dHB1dCBhIGRlc2NyaXB0aXZl
IGxpbmUgZm9yIGVhY2ggcmVzb3VyY2UKKyAgICAvLyBsb2FkIGNhbGxiYWNrLgorICAgIGJvb2wg
bV9kdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzOworICAgIAorICAgIC8vIElmIHRydWUsIHRoZSB0
ZXN0X3NoZWxsIHdpbGwgb3V0cHV0IHRoZSBNSU1FIHR5cGUgZm9yIGVhY2ggcmVzb3VyY2UgdGhh
dCAKKyAgICAvLyB3YXMgbG9hZGVkLgorICAgIGJvb2wgbV9kdW1wUmVzb3VyY2VSZXNwb25zZU1J
TUVUeXBlczsKKworICAgIC8vIElmIHRydWUsIHRoZSB0ZXN0X3NoZWxsIHdpbGwgcHJvZHVjZSBh
IGR1bXAgb2YgdGhlIGJhY2sgZm9yd2FyZCBsaXN0IGFzCisgICAgLy8gd2VsbC4KKyAgICBib29s
IG1fZHVtcEJhY2tGb3J3YXJkTGlzdDsKKworICAgIC8vIElmIHRydWUsIHRoZSB0ZXN0X3NoZWxs
IHdpbGwgcHJpbnQgb3V0IHRoZSBjaGlsZCBmcmFtZSBzY3JvbGwgb2Zmc2V0cyBhcworICAgIC8v
IHdlbGwuCisgICAgYm9vbCBtX2R1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zOworCisgICAg
Ly8gSWYgdHJ1ZSBhbmQgaWYgZHVtcF9hc190ZXh0XyBpcyB0cnVlLCB0aGUgdGVzdF9zaGVsbCB3
aWxsIHJlY3Vyc2l2ZWx5CisgICAgLy8gZHVtcCBhbGwgZnJhbWVzIGFzIHBsYWluIHRleHQuCisg
ICAgYm9vbCBtX2R1bXBDaGlsZEZyYW1lc0FzVGV4dDsKKworICAgIC8vIElmIHRydWUsIHRoZSB0
ZXN0X3NoZWxsIHdpbGwgZHVtcCBhbGwgY2hhbmdlcyB0byB3aW5kb3cuc3RhdHVzLgorICAgIGJv
b2wgbV9kdW1wV2luZG93U3RhdHVzQ2hhbmdlczsKKworICAgIC8vIElmIHRydWUsIG91dHB1dCBh
IG1lc3NhZ2Ugd2hlbiB0aGUgcGFnZSB0aXRsZSBpcyBjaGFuZ2VkLgorICAgIGJvb2wgbV9kdW1w
VGl0bGVDaGFuZ2VzOworCisgICAgLy8gSWYgdHJ1ZSwgb3V0cHV0IGEgZGVzY3JpcHRpdmUgbGlu
ZSBlYWNoIHRpbWUgYSBwZXJtaXNzaW9uIGNsaWVudAorICAgIC8vIGNhbGxiYWNrIGlzIGludm9r
ZWQuIEN1cnJlbnRseSBvbmx5IGltcGxlbWVudGVkIGZvciBhbGxvd0ltYWdlLgorICAgIGJvb2wg
bV9kdW1wUGVybWlzc2lvbkNsaWVudENhbGxiYWNrczsKKworICAgIC8vIElmIHRydWUsIHRoZSB0
ZXN0X3NoZWxsIHdpbGwgZ2VuZXJhdGUgcGl4ZWwgcmVzdWx0cyBpbiBkdW1wQXNUZXh0IG1vZGUK
KyAgICBib29sIG1fZ2VuZXJhdGVQaXhlbFJlc3VsdHM7CisKKyAgICAvLyBJZiB0cnVlLCBvdXRw
dXQgYSBkZXNjcmlwdGl2ZSBsaW5lIGVhY2ggdGltZSBXZWJWaWV3Q2xpZW50OjpjcmVhdGVWaWV3
CisgICAgLy8gaXMgaW52b2tlZC4KKyAgICBib29sIG1fZHVtcENyZWF0ZVZpZXc7CisKKyAgICAv
LyBJZiB0cnVlLCB0aGUgZWxlbWVudCB3aWxsIGJlIHRyZWF0ZWQgYXMgZWRpdGFibGUuIFRoaXMg
dmFsdWUgaXMgcmV0dXJuZWQKKyAgICAvLyBmcm9tIHZhcmlvdXMgZWRpdGluZyBjYWxsYmFja3Mg
dGhhdCBhcmUgY2FsbGVkIGp1c3QgYmVmb3JlIGVkaXQgb3BlcmF0aW9ucworICAgIC8vIGFyZSBh
bGxvd2VkLgorICAgIGJvb2wgbV9hY2NlcHRzRWRpdGluZzsKKworICAgIC8vIElmIHRydWUsIG5l
dyB3aW5kb3dzIGNhbiBiZSBvcGVuZWQgdmlhIGphdmFzY3JpcHQgb3IgYnkgcGx1Z2lucy4gQnkK
KyAgICAvLyBkZWZhdWx0LCBzZXQgdG8gZmFsc2UgYW5kIGNhbiBiZSB0b2dnbGVkIHRvIHRydWUg
dXNpbmcKKyAgICAvLyBzZXRDYW5PcGVuV2luZG93cygpLgorICAgIGJvb2wgbV9jYW5PcGVuV2lu
ZG93czsKKworICAgIC8vIFdoZW4gcmVzZXQgaXMgY2FsbGVkLCBnbyB0aHJvdWdoIGFuZCBjbG9z
ZSBhbGwgYnV0IHRoZSBtYWluIHRlc3Qgc2hlbGwKKyAgICAvLyB3aW5kb3cuIEJ5IGRlZmF1bHQs
IHNldCB0byB0cnVlIGJ1dCB0b2dnbGVkIHRvIGZhbHNlIHVzaW5nCisgICAgLy8gc2V0Q2xvc2VS
ZW1haW5pbmdXaW5kb3dzV2hlbkNvbXBsZXRlKCkuCisgICAgYm9vbCBtX2Nsb3NlUmVtYWluaW5n
V2luZG93czsKKworICAgIC8vIElmIHRydWUsIHBpeGVsIGR1bXAgd2lsbCBiZSBwcm9kdWNlZCBh
cyBhIHNlcmllcyBvZiAxcHgtdGFsbCwgdmlldy13aWRlCisgICAgLy8gaW5kaXZpZHVhbCBwYWlu
dHMgb3ZlciB0aGUgaGVpZ2h0IG9mIHRoZSB2aWV3LgorICAgIGJvb2wgbV90ZXN0UmVwYWludDsK
KyAgICAvLyBJZiB0cnVlIGFuZCB0ZXN0X3JlcGFpbnRfIGlzIHRydWUgYXMgd2VsbCwgcGl4ZWwg
ZHVtcCB3aWxsIGJlIHByb2R1Y2VkIGFzCisgICAgLy8gYSBzZXJpZXMgb2YgMXB4LXdpZGUsIHZp
ZXctdGFsbCBwYWludHMgYWNyb3NzIHRoZSB3aWR0aCBvZiB0aGUgdmlldy4KKyAgICBib29sIG1f
c3dlZXBIb3Jpem9udGFsbHk7CisKKyAgICAvLyBJZiB0cnVlIGFuZCBhIGRyYWcgc3RhcnRzLCBh
ZGRzIGEgZmlsZSB0byB0aGUgZHJhZyZkcm9wIGNsaXBib2FyZC4KKyAgICBib29sIG1fc2hvdWxk
QWRkRmlsZVRvUGFzdGVib2FyZDsKKworICAgIC8vIElmIHRydWUsIHN0b3BzIHByb3Zpc2lvbmFs
IGZyYW1lIGxvYWRzIGR1cmluZyB0aGUKKyAgICAvLyBEaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZv
ckZyYW1lIGNhbGxiYWNrLgorICAgIGJvb2wgbV9zdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzOwor
CisgICAgLy8gSWYgdHJ1ZSwgZG9uJ3QgZHVtcCBvdXRwdXQgdW50aWwgbm90aWZ5RG9uZSBpcyBj
YWxsZWQuCisgICAgYm9vbCBtX3dhaXRVbnRpbERvbmU7CisKKyAgICAvLyBJZiBmYWxzZSwgYWxs
IG5ldyByZXF1ZXN0cyB3aWxsIG5vdCBkZWZlciB0aGUgbWFpbiByZXNvdXJjZSBkYXRhIGxvYWQu
CisgICAgYm9vbCBtX2RlZmVyTWFpblJlc291cmNlRGF0YUxvYWQ7CisKKyAgICAvLyBJZiB0cnVl
LCB3ZSB3aWxsIHNob3cgZXh0ZW5kZWQgaW5mb3JtYXRpb24gaW4gdGhlIGdyYXBoaWNzIGxheWVy
IHRyZWUuCisgICAgYm9vbCBtX3Nob3dEZWJ1Z0xheWVyVHJlZTsKKworICAgIC8vIElmIHRydWUs
IGxheW91dCBpcyB0byB0YXJnZXQgcHJpbnRlZCBwYWdlcy4KKyAgICBib29sIG1faXNQcmludGlu
ZzsKKworICAgIFdvcmtRdWV1ZSBtX3dvcmtRdWV1ZTsKKworICAgIENwcFZhcmlhbnQgbV9nbG9i
YWxGbGFnOworCisgICAgLy8gQm91bmQgdmFyaWFibGUgY291bnRpbmcgdGhlIG51bWJlciBvZiB0
b3AgVVJMcyB2aXNpdGVkLgorICAgIENwcFZhcmlhbnQgbV93ZWJIaXN0b3J5SXRlbUNvdW50Owor
CisgICAgLy8gQm91bmQgdmFyaWFibGUgdHJhY2tpbmcgdGhlIGRpcmVjdGlvbmFsaXR5IG9mIHRo
ZSA8dGl0bGU+IHRhZy4KKyAgICBDcHBWYXJpYW50IG1fdGl0bGVUZXh0RGlyZWN0aW9uOworCisg
ICAgLy8gQm91bmQgdmFyaWFibGUgdG8gcmV0dXJuIHRoZSBuYW1lIG9mIHRoaXMgcGxhdGZvcm0g
KGNocm9taXVtKS4KKyAgICBDcHBWYXJpYW50IG1fcGxhdGZvcm1OYW1lOworCisgICAgLy8gQm91
bmQgdmFyaWFibGUgdG8gc2V0IHdoZXRoZXIgcG9zdE1lc3NhZ2VzIHNob3VsZCBiZSBpbnRlcmNl
cHRlZCBvciBub3QKKyAgICBDcHBWYXJpYW50IG1faW50ZXJjZXB0UG9zdE1lc3NhZ2U7CisKKyAg
ICBXZWJLaXQ6OldlYlVSTCBtX3VzZXJTdHlsZVNoZWV0TG9jYXRpb247CisKKyAgICAvLyBXQVYg
YXVkaW8gZGF0YSBpcyBzdG9yZWQgaGVyZS4KKyAgICBXZWJLaXQ6OldlYkFycmF5QnVmZmVyVmll
dyBtX2F1ZGlvRGF0YTsKKworICAgIC8vIE1vY2sgb2JqZWN0IGZvciB0ZXN0aW5nIGRlbGl2ZXJp
bmcgd2ViIGludGVudHMuCisgICAgT3duUHRyPFdlYktpdDo6V2ViRGVsaXZlcmVkSW50ZW50Q2xp
ZW50PiBtX2ludGVudENsaWVudDsKKworICAgIGJvb2wgbV9zaG91bGRTdGF5T25QYWdlQWZ0ZXJI
YW5kbGluZ0JlZm9yZVVubG9hZDsKKworICAgIC8vIElmIHRydWUsIGNhbGxzIHRvIFdlYlZpZXdI
b3N0OjplbnRlci9leGl0RnVsbFNjcmVlbk5vdyB3aWxsIG5vdCByZXN1bHQgaW4gCisgICAgLy8g
Y2FsbHMgdG8gRG9jdW1lbnQ6OndpbGwvZGlkL0VudGVyL0V4aXRGdWxsU2NyZWVuLgorICAgIGJv
b2wgbV9oYXNDdXN0b21GdWxsU2NyZWVuQmVoYXZpb3I7Cit9OworCisjZW5kaWYgLy8gTGF5b3V0
VGVzdENvbnRyb2xsZXJfaApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRFJU
VGVzdFJ1bm5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L0RSVFRlc3RSdW5uZXIuaAkocmV2aXNpb24gMTI1MzM1KQorKysgVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vRFJUVGVzdFJ1bm5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMCArMzgs
MTAgQEAKICAgc29ydCBvZiBvdXRwdXQgdGhleSBwcm9kdWNlLgogKi8KIAotI2lmbmRlZiBMYXlv
dXRUZXN0Q29udHJvbGxlcl9oCi0jZGVmaW5lIExheW91dFRlc3RDb250cm9sbGVyX2gKKyNpZm5k
ZWYgRFJUVGVzdFJ1bm5lcl9oCisjZGVmaW5lIERSVFRlc3RSdW5uZXJfaAogCi0jaW5jbHVkZSAi
VGVzdFJ1bm5lci5oIgorI2luY2x1ZGUgIlRlc3RSdW5uZXIvVGVzdFJ1bm5lci5oIgogCiBjbGFz
cyBUZXN0U2hlbGw7CiAKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91
dFRlc3RDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDEyNTMzNSkKKysrIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSwyMzUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBQ
YXdlbCBIYWpkYW4gKHBoYWpkYW4uanJAY2hyb21pdW0ub3JnKQotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgotCi0jaW5jbHVkZSAiRFJURGV2VG9vbHNB
Z2VudC5oIgotI2luY2x1ZGUgIk1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuaCIKLSNpbmNs
dWRlICJNb2NrV2ViU3BlZWNoUmVjb2duaXplci5oIgotI2luY2x1ZGUgIlRlc3RTaGVsbC5oIgot
I2luY2x1ZGUgIldlYkFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJXZWJCaW5kaW5n
cy5oIgotI2luY2x1ZGUgIldlYkNvbnNvbGVNZXNzYWdlLmgiCi0jaW5jbHVkZSAiV2ViRGV2aWNl
T3JpZW50YXRpb24uaCIKLSNpbmNsdWRlICJXZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2su
aCIKLSNpbmNsdWRlICJXZWJEb2N1bWVudC5oIgotI2luY2x1ZGUgIldlYkVsZW1lbnQuaCIKLSNp
bmNsdWRlICJXZWJGaW5kT3B0aW9ucy5oIgotI2luY2x1ZGUgIldlYkZyYW1lLmgiCi0jaW5jbHVk
ZSAiV2ViR2VvbG9jYXRpb25DbGllbnRNb2NrLmgiCi0jaW5jbHVkZSAiV2ViSURCRmFjdG9yeS5o
IgotI2luY2x1ZGUgIldlYklucHV0RWxlbWVudC5oIgotI2luY2x1ZGUgIldlYkludGVudC5oIgot
I2luY2x1ZGUgIldlYkludGVudFJlcXVlc3QuaCIKLSNpbmNsdWRlICJXZWJLaXQuaCIKLSNpbmNs
dWRlICJXZWJOb3RpZmljYXRpb25QcmVzZW50ZXIuaCIKLSNpbmNsdWRlICJXZWJQZXJtaXNzaW9u
cy5oIgotI2luY2x1ZGUgIldlYlByaW50UGFyYW1zLmgiCi0jaW5jbHVkZSAiV2ViU2NyaXB0U291
cmNlLmgiCi0jaW5jbHVkZSAiV2ViU2VjdXJpdHlQb2xpY3kuaCIKLSNpbmNsdWRlICJXZWJTZXR0
aW5ncy5oIgotI2luY2x1ZGUgIldlYlN1cnJvdW5kaW5nVGV4dC5oIgotI2luY2x1ZGUgIldlYlZp
ZXcuaCIKLSNpbmNsdWRlICJXZWJWaWV3SG9zdC5oIgotI2luY2x1ZGUgIldlYldvcmtlckluZm8u
aCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJEYXRhLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2Vi
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViU2l6ZS5oIgot
I2luY2x1ZGUgInBsYXRmb3JtL1dlYlVSTC5oIgotI2luY2x1ZGUgInY4L2luY2x1ZGUvdjguaCIK
LSNpbmNsdWRlICJ3ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oIgotI2luY2x1ZGUgPGFs
Z29yaXRobT4KLSNpbmNsdWRlIDxjY3R5cGU+Ci0jaW5jbHVkZSA8Y2xvY2FsZT4KLSNpbmNsdWRl
IDxjc3RkbGliPgotI2luY2x1ZGUgPGxpbWl0cz4KLSNpbmNsdWRlIDxzc3RyZWFtPgotI2luY2x1
ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgot
Ci0jaWYgT1MoTElOVVgpIHx8IE9TKEFORFJPSUQpCi0jaW5jbHVkZSAibGludXgvV2ViRm9udFJl
bmRlcmluZy5oIgotI2VuZGlmCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotdXNpbmcgbmFt
ZXNwYWNlIFdlYktpdDsKLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLWNsYXNzIEVtcHR5V2ViRGVs
aXZlcmVkSW50ZW50Q2xpZW50IDogcHVibGljIFdlYktpdDo6V2ViRGVsaXZlcmVkSW50ZW50Q2xp
ZW50IHsKLXB1YmxpYzoKLSAgICBFbXB0eVdlYkRlbGl2ZXJlZEludGVudENsaWVudCgpIHsgfQot
ICAgIH5FbXB0eVdlYkRlbGl2ZXJlZEludGVudENsaWVudCgpIHsgfQotCi0gICAgdmlydHVhbCB2
b2lkIHBvc3RSZXN1bHQoY29uc3QgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlJiBkYXRhKSBjb25z
dCB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcG9zdEZhaWx1cmUoY29uc3QgV2ViU2VyaWFsaXplZFNj
cmlwdFZhbHVlJiBkYXRhKSBjb25zdCB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpIHsg
fQotfTsKLQotTGF5b3V0VGVzdENvbnRyb2xsZXI6OkxheW91dFRlc3RDb250cm9sbGVyKFRlc3RT
aGVsbCogc2hlbGwpCi0gICAgOiBtX3NoZWxsKHNoZWxsKQotICAgICwgbV9jbG9zZVJlbWFpbmlu
Z1dpbmRvd3MoZmFsc2UpCi0gICAgLCBtX2RlZmVyTWFpblJlc291cmNlRGF0YUxvYWQoZmFsc2Up
Ci0gICAgLCBtX3Nob3dEZWJ1Z0xheWVyVHJlZShmYWxzZSkKLSAgICAsIG1fd29ya1F1ZXVlKHRo
aXMpCi0gICAgLCBtX2ludGVudENsaWVudChhZG9wdFB0cihuZXcgRW1wdHlXZWJEZWxpdmVyZWRJ
bnRlbnRDbGllbnQpKQotICAgICwgbV9zaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9y
ZVVubG9hZChmYWxzZSkKLXsKLQotICAgIC8vIEluaXRpYWxpemUgdGhlIG1hcCB0aGF0IGFzc29j
aWF0ZXMgbWV0aG9kcyBvZiB0aGlzIGNsYXNzIHdpdGggdGhlIG5hbWVzCi0gICAgLy8gdGhleSB3
aWxsIHVzZSB3aGVuIGNhbGxlZCBieSBKYXZhU2NyaXB0LiBUaGUgYWN0dWFsIGJpbmRpbmcgb2Yg
dGhvc2UKLSAgICAvLyBuYW1lcyB0byB0aGVpciBtZXRob2RzIHdpbGwgYmUgZG9uZSBieSBjYWxs
aW5nIGJpbmRUb0phdmFTY3JpcHQoKSAoZGVmaW5lZAotICAgIC8vIGJ5IENwcEJvdW5kQ2xhc3Ms
IHRoZSBwYXJlbnQgdG8gTGF5b3V0VGVzdENvbnRyb2xsZXIpLgotICAgIGJpbmRNZXRob2QoImFk
ZEZpbGVUb1Bhc3RlYm9hcmRPbkRyYWciLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZEZpbGVU
b1Bhc3RlYm9hcmRPbkRyYWcpOwotI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCi0gICAgYmluZE1l
dGhvZCgiYWRkTW9ja1NwZWVjaElucHV0UmVzdWx0IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjph
ZGRNb2NrU3BlZWNoSW5wdXRSZXN1bHQpOwotICAgIGJpbmRNZXRob2QoInNldE1vY2tTcGVlY2hJ
bnB1dER1bXBSZWN0IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrU3BlZWNoSW5wdXRE
dW1wUmVjdCk7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoU0NSSVBURURfU1BFRUNIKQotICAgIGJpbmRN
ZXRob2QoImFkZE1vY2tTcGVlY2hSZWNvZ25pdGlvblJlc3VsdCIsICZMYXlvdXRUZXN0Q29udHJv
bGxlcjo6YWRkTW9ja1NwZWVjaFJlY29nbml0aW9uUmVzdWx0KTsKLSAgICBiaW5kTWV0aG9kKCJz
ZXRNb2NrU3BlZWNoUmVjb2duaXRpb25FcnJvciIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
TW9ja1NwZWVjaFJlY29nbml0aW9uRXJyb3IpOwotICAgIGJpbmRNZXRob2QoIndhc01vY2tTcGVl
Y2hSZWNvZ25pdGlvbkFib3J0ZWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6Ondhc01vY2tTcGVl
Y2hSZWNvZ25pdGlvbkFib3J0ZWQpOwotI2VuZGlmCi0gICAgYmluZE1ldGhvZCgiYWRkT3JpZ2lu
QWNjZXNzV2hpdGVsaXN0RW50cnkiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE9yaWdpbkFj
Y2Vzc1doaXRlbGlzdEVudHJ5KTsKLSAgICBiaW5kTWV0aG9kKCJhZGRVc2VyU2NyaXB0IiwgJkxh
eW91dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0KTsKLSAgICBiaW5kTWV0aG9kKCJhZGRV
c2VyU3R5bGVTaGVldCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkVXNlclN0eWxlU2hlZXQp
OwotICAgIGJpbmRNZXRob2QoImNsZWFyQWxsRGF0YWJhc2VzIiwgJkxheW91dFRlc3RDb250cm9s
bGVyOjpjbGVhckFsbERhdGFiYXNlcyk7Ci0gICAgYmluZE1ldGhvZCgiY2xvc2VXZWJJbnNwZWN0
b3IiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsb3NlV2ViSW5zcGVjdG9yKTsKLSNpZiBFTkFC
TEUoUE9JTlRFUl9MT0NLKQotICAgIGJpbmRNZXRob2QoImRpZExvc2VQb2ludGVyTG9jayIsICZM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlkTG9zZVBvaW50ZXJMb2NrKTsKLSNlbmRpZgotICAgIGJp
bmRNZXRob2QoImRpc2FibGVBdXRvUmVzaXplTW9kZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6
ZGlzYWJsZUF1dG9SZXNpemVNb2RlKTsKLSAgICBiaW5kTWV0aG9kKCJkaXNhYmxlSW1hZ2VMb2Fk
aW5nIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpkaXNhYmxlSW1hZ2VMb2FkaW5nKTsKLSAgICBi
aW5kTWV0aG9kKCJkaXNwbGF5IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpkaXNwbGF5KTsKLSAg
ICBiaW5kTWV0aG9kKCJkaXNwbGF5SW52YWxpZGF0ZWRSZWdpb24iLCAmTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmRpc3BsYXlJbnZhbGlkYXRlZFJlZ2lvbik7Ci0gICAgYmluZE1ldGhvZCgiZHVtcEFz
VGV4dCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcEFzVGV4dCk7Ci0gICAgYmluZE1ldGhv
ZCgiZHVtcEJhY2tGb3J3YXJkTGlzdCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcEJhY2tG
b3J3YXJkTGlzdCk7Ci0gICAgYmluZE1ldGhvZCgiZHVtcENoaWxkRnJhbWVzQXNUZXh0IiwgJkxh
eW91dFRlc3RDb250cm9sbGVyOjpkdW1wQ2hpbGRGcmFtZXNBc1RleHQpOwotICAgIGJpbmRNZXRo
b2QoImR1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zIiwgJkxheW91dFRlc3RDb250cm9sbGVy
OjpkdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9ucyk7Ci0gICAgYmluZE1ldGhvZCgiZHVtcERh
dGFiYXNlQ2FsbGJhY2tzIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpkdW1wRGF0YWJhc2VDYWxs
YmFja3MpOwotICAgIGJpbmRNZXRob2QoImR1bXBFZGl0aW5nQ2FsbGJhY2tzIiwgJkxheW91dFRl
c3RDb250cm9sbGVyOjpkdW1wRWRpdGluZ0NhbGxiYWNrcyk7Ci0gICAgYmluZE1ldGhvZCgiZHVt
cEZyYW1lTG9hZENhbGxiYWNrcyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcEZyYW1lTG9h
ZENhbGxiYWNrcyk7Ci0gICAgYmluZE1ldGhvZCgiZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFj
ayIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjayk7
Ci0gICAgYmluZE1ldGhvZCgiZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MiLCAm
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tz
KTsKLSAgICBiaW5kTWV0aG9kKCJkdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzIiwgJkxheW91dFRl
c3RDb250cm9sbGVyOjpkdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKTsKLSAgICBiaW5kTWV0aG9k
KCJkdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6
ZHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXMpOwotICAgIGJpbmRNZXRob2QoImR1bXBTZWxl
Y3Rpb25SZWN0IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpkdW1wU2VsZWN0aW9uUmVjdCk7Ci0g
ICAgYmluZE1ldGhvZCgiZHVtcFN0YXR1c0NhbGxiYWNrcyIsICZMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZHVtcFdpbmRvd1N0YXR1c0NoYW5nZXMpOwotICAgIGJpbmRNZXRob2QoImR1bXBUaXRsZUNo
YW5nZXMiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBUaXRsZUNoYW5nZXMpOwotICAgIGJp
bmRNZXRob2QoImR1bXBQZXJtaXNzaW9uQ2xpZW50Q2FsbGJhY2tzIiwgJkxheW91dFRlc3RDb250
cm9sbGVyOjpkdW1wUGVybWlzc2lvbkNsaWVudENhbGxiYWNrcyk7Ci0gICAgYmluZE1ldGhvZCgi
ZHVtcENyZWF0ZVZpZXciLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBDcmVhdGVWaWV3KTsK
LSAgICBiaW5kTWV0aG9kKCJlbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQi
LCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVu
dFdpdGhJZCk7Ci0gICAgYmluZE1ldGhvZCgiZW5hYmxlQXV0b1Jlc2l6ZU1vZGUiLCAmTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmVuYWJsZUF1dG9SZXNpemVNb2RlKTsKLSAgICBiaW5kTWV0aG9kKCJl
dmFsdWF0ZUluV2ViSW5zcGVjdG9yIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZUlu
V2ViSW5zcGVjdG9yKTsKLSAgICBiaW5kTWV0aG9kKCJldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRX
b3JsZCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29y
bGQpOwotICAgIGJpbmRNZXRob2QoImV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0
dXJuVmFsdWUiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRl
ZFdvcmxkQW5kUmV0dXJuVmFsdWUpOwotICAgIGJpbmRNZXRob2QoInNldElzb2xhdGVkV29ybGRT
ZWN1cml0eU9yaWdpbiIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SXNvbGF0ZWRXb3JsZFNl
Y3VyaXR5T3JpZ2luKTsKLSAgICBiaW5kTWV0aG9kKCJleGVjQ29tbWFuZCIsICZMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZXhlY0NvbW1hbmQpOwotICAgIGJpbmRNZXRob2QoImZvcmNlUmVkU2VsZWN0
aW9uQ29sb3JzIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpmb3JjZVJlZFNlbGVjdGlvbkNvbG9y
cyk7Ci0jaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCi0gICAgYmluZE1ldGhvZCgiZ3JhbnREZXNr
dG9wTm90aWZpY2F0aW9uUGVybWlzc2lvbiIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6Z3JhbnRE
ZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvbik7Ci0jZW5kaWYKLSAgICBiaW5kTWV0aG9kKCJm
aW5kU3RyaW5nIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpmaW5kU3RyaW5nKTsKLSAgICBiaW5k
TWV0aG9kKCJpc0NvbW1hbmRFbmFibGVkIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjppc0NvbW1h
bmRFbmFibGVkKTsKLSAgICBiaW5kTWV0aG9kKCJoYXNDdXN0b21QYWdlU2l6ZVN0eWxlIiwgJkxh
eW91dFRlc3RDb250cm9sbGVyOjpoYXNDdXN0b21QYWdlU2l6ZVN0eWxlKTsKLSAgICBiaW5kTWV0
aG9kKCJsYXllclRyZWVBc1RleHQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmxheWVyVHJlZUFz
VGV4dCk7Ci0gICAgYmluZE1ldGhvZCgibG9zZUNvbXBvc2l0b3JDb250ZXh0IiwgJkxheW91dFRl
c3RDb250cm9sbGVyOjpsb3NlQ29tcG9zaXRvckNvbnRleHQpOwotICAgIGJpbmRNZXRob2QoIm1h
cmtlclRleHRGb3JMaXN0SXRlbSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWFya2VyVGV4dEZv
ckxpc3RJdGVtKTsKLSAgICBiaW5kTWV0aG9kKCJub3RpZnlEb25lIiwgJkxheW91dFRlc3RDb250
cm9sbGVyOjpub3RpZnlEb25lKTsKLSAgICBiaW5kTWV0aG9kKCJudW1iZXJPZkFjdGl2ZUFuaW1h
dGlvbnMiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyk7
Ci0gICAgYmluZE1ldGhvZCgibnVtYmVyT2ZQYWdlcyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6
bnVtYmVyT2ZQYWdlcyk7Ci0gICAgYmluZE1ldGhvZCgibnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRp
b25QZXJtaXNzaW9uUmVxdWVzdHMiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OiBudW1iZXJPZlBl
bmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cyk7Ci0gICAgYmluZE1ldGhvZCgib2Jq
Q0lkZW50aXR5SXNFcXVhbCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6b2JqQ0lkZW50aXR5SXNF
cXVhbCk7Ci0gICAgYmluZE1ldGhvZCgib3ZlcnJpZGVQcmVmZXJlbmNlIiwgJkxheW91dFRlc3RD
b250cm9sbGVyOjpvdmVycmlkZVByZWZlcmVuY2UpOwotICAgIGJpbmRNZXRob2QoInBhZ2VQcm9w
ZXJ0eSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVByb3BlcnR5KTsKLSAgICBiaW5kTWV0
aG9kKCJwYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVscyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6
cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMpOwotICAgIGJpbmRNZXRob2QoInBhdGhUb0xvY2Fs
UmVzb3VyY2UiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdGhUb0xvY2FsUmVzb3VyY2UpOwot
ICAgIGJpbmRNZXRob2QoInBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkIiwgJkxh
eW91dFRlc3RDb250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZCk7
Ci0gICAgYmluZE1ldGhvZCgicGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkIiwg
JkxheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRo
SWQpOwotICAgIGJpbmRNZXRob2QoInF1ZXVlQmFja05hdmlnYXRpb24iLCAmTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnF1ZXVlQmFja05hdmlnYXRpb24pOwotICAgIGJpbmRNZXRob2QoInF1ZXVlRm9y
d2FyZE5hdmlnYXRpb24iLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVlRm9yd2FyZE5hdmln
YXRpb24pOwotICAgIGJpbmRNZXRob2QoInF1ZXVlTG9hZGluZ1NjcmlwdCIsICZMYXlvdXRUZXN0
Q29udHJvbGxlcjo6cXVldWVMb2FkaW5nU2NyaXB0KTsKLSAgICBiaW5kTWV0aG9kKCJxdWV1ZUxv
YWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVlTG9hZCk7Ci0gICAgYmluZE1ldGhvZCgi
cXVldWVMb2FkSFRNTFN0cmluZyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVMb2FkSFRN
TFN0cmluZyk7Ci0gICAgYmluZE1ldGhvZCgicXVldWVOb25Mb2FkaW5nU2NyaXB0IiwgJkxheW91
dFRlc3RDb250cm9sbGVyOjpxdWV1ZU5vbkxvYWRpbmdTY3JpcHQpOwotICAgIGJpbmRNZXRob2Qo
InF1ZXVlUmVsb2FkIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZVJlbG9hZCk7Ci0gICAg
YmluZE1ldGhvZCgicmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkiLCAmTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KTsKLSAgICBiaW5k
TWV0aG9kKCJyZXBhaW50U3dlZXBIb3Jpem9udGFsbHkiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnJlcGFpbnRTd2VlcEhvcml6b250YWxseSk7Ci0gICAgYmluZE1ldGhvZCgicmVzZXRQYWdlVmlz
aWJpbGl0eSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVzZXRQYWdlVmlzaWJpbGl0eSk7Ci0g
ICAgYmluZE1ldGhvZCgic2V0QWNjZXB0c0VkaXRpbmciLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldEFjY2VwdHNFZGl0aW5nKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRBbGxvd0Rpc3BsYXlPZklu
c2VjdXJlQ29udGVudCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dEaXNwbGF5T2ZJ
bnNlY3VyZUNvbnRlbnQpOwotICAgIGJpbmRNZXRob2QoInNldEFsbG93RmlsZUFjY2Vzc0Zyb21G
aWxlVVJMcyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZp
bGVVUkxzKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRBbGxvd1J1bm5pbmdPZkluc2VjdXJlQ29udGVu
dCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dSdW5uaW5nT2ZJbnNlY3VyZUNvbnRl
bnQpOwotICAgIGJpbmRNZXRob2QoInNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxz
IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxl
VVJMcyk7Ci0gICAgYmluZE1ldGhvZCgic2V0QWx3YXlzQWNjZXB0Q29va2llcyIsICZMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0QWx3YXlzQWNjZXB0Q29va2llcyk7Ci0gICAgYmluZE1ldGhvZCgi
c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRBdXRvZmls
bGVkIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRBdXRvZmlsbGVkKTsKLSAgICBiaW5kTWV0
aG9kKCJzZXRDYW5PcGVuV2luZG93cyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q2FuT3Bl
bldpbmRvd3MpOwotICAgIGJpbmRNZXRob2QoInNldENsb3NlUmVtYWluaW5nV2luZG93c1doZW5D
b21wbGV0ZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q2xvc2VSZW1haW5pbmdXaW5kb3dz
V2hlbkNvbXBsZXRlKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZSIs
ICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUpOwotICAgIGJp
bmRNZXRob2QoInNldERhdGFiYXNlUXVvdGEiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERh
dGFiYXNlUXVvdGEpOwotICAgIGJpbmRNZXRob2QoInNldERlZmVyTWFpblJlc291cmNlRGF0YUxv
YWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERlZmVyTWFpblJlc291cmNlRGF0YUxvYWQp
OwotICAgIGJpbmRNZXRob2QoInNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hl
bWUiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5G
b3JVUkxTY2hlbWUpOwotICAgIGJpbmRNZXRob2QoInNldEF1ZGlvRGF0YSIsICZMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0QXVkaW9EYXRhKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRHZW9sb2NhdGlv
blBlcm1pc3Npb24iLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlz
c2lvbik7Ci0gICAgYmluZE1ldGhvZCgic2V0SWNvbkRhdGFiYXNlRW5hYmxlZCIsICZMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0SWNvbkRhdGFiYXNlRW5hYmxlZCk7Ci0gICAgYmluZE1ldGhvZCgi
c2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZCk7Ci0gICAgYmluZE1ldGhvZCgic2V0TWlu
aW11bVRpbWVySW50ZXJ2YWwiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1pbmltdW1UaW1l
ckludGVydmFsKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24iLCAm
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tEZXZpY2VPcmllbnRhdGlvbik7Ci0gICAgYmlu
ZE1ldGhvZCgic2V0TW9ja0dlb2xvY2F0aW9uRXJyb3IiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldE1vY2tHZW9sb2NhdGlvbkVycm9yKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRNb2NrR2VvbG9j
YXRpb25Qb3NpdGlvbiIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9u
UG9zaXRpb24pOwotICAgIGJpbmRNZXRob2QoInNldFBhZ2VWaXNpYmlsaXR5IiwgJkxheW91dFRl
c3RDb250cm9sbGVyOjpzZXRQYWdlVmlzaWJpbGl0eSk7Ci0gICAgYmluZE1ldGhvZCgic2V0UGx1
Z2luc0VuYWJsZWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBsdWdpbnNFbmFibGVkKTsK
LSNpZiBFTkFCTEUoUE9JTlRFUl9MT0NLKQotICAgIGJpbmRNZXRob2QoInNldFBvaW50ZXJMb2Nr
V2lsbEZhaWxBc3luY2hyb25vdXNseSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UG9pbnRl
ckxvY2tXaWxsRmFpbEFzeW5jaHJvbm91c2x5KTsKLSAgICBiaW5kTWV0aG9kKCJzZXRQb2ludGVy
TG9ja1dpbGxGYWlsU3luY2hyb25vdXNseSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UG9p
bnRlckxvY2tXaWxsRmFpbFN5bmNocm9ub3VzbHkpOwotI2VuZGlmCi0gICAgYmluZE1ldGhvZCgi
c2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBvcHVw
QmxvY2tpbmdFbmFibGVkKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRQT1NJWExvY2FsZSIsICZMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0UE9TSVhMb2NhbGUpOwotICAgIGJpbmRNZXRob2QoInNldFBy
aW50aW5nIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRQcmludGluZyk7Ci0gICAgYmluZE1l
dGhvZCgic2V0U2Nyb2xsYmFyUG9saWN5IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRTY3Jv
bGxiYXJQb2xpY3kpOwotICAgIGJpbmRNZXRob2QoInNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFj
ZUVuYWJsZWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNlbGVjdFRyYWlsaW5nV2hpdGVz
cGFjZUVuYWJsZWQpOwotICAgIGJpbmRNZXRob2QoInNldFRleHRTdWJwaXhlbFBvc2l0aW9uaW5n
IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRUZXh0U3VicGl4ZWxQb3NpdGlvbmluZyk7Ci0g
ICAgYmluZE1ldGhvZCgic2V0QmFja2luZ1NjYWxlRmFjdG9yIiwgJkxheW91dFRlc3RDb250cm9s
bGVyOjpzZXRCYWNraW5nU2NhbGVGYWN0b3IpOwotICAgIGJpbmRNZXRob2QoInNldFNtYXJ0SW5z
ZXJ0RGVsZXRlRW5hYmxlZCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U21hcnRJbnNlcnRE
ZWxldGVFbmFibGVkKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRTdG9wUHJvdmlzaW9uYWxGcmFtZUxv
YWRzIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRTdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRz
KTsKLSAgICBiaW5kTWV0aG9kKCJzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMiLCAmTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyk7Ci0gICAg
YmluZE1ldGhvZCgic2V0VXNlclN0eWxlU2hlZXRFbmFibGVkIiwgJkxheW91dFRlc3RDb250cm9s
bGVyOjpzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQpOwotICAgIGJpbmRNZXRob2QoInNldFVzZXJT
dHlsZVNoZWV0TG9jYXRpb24iLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZXJTdHlsZVNo
ZWV0TG9jYXRpb24pOwotICAgIGJpbmRNZXRob2QoInNldFZhbHVlRm9yVXNlciIsICZMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0VmFsdWVGb3JVc2VyKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRXaWxs
U2VuZFJlcXVlc3RDbGVhckhlYWRlciIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2lsbFNl
bmRSZXF1ZXN0Q2xlYXJIZWFkZXIpOwotICAgIGJpbmRNZXRob2QoInNldFdpbGxTZW5kUmVxdWVz
dFJldHVybnNOdWxsIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRXaWxsU2VuZFJlcXVlc3RS
ZXR1cm5zTnVsbCk7Ci0gICAgYmluZE1ldGhvZCgic2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051
bGxPblJlZGlyZWN0IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRXaWxsU2VuZFJlcXVlc3RS
ZXR1cm5zTnVsbE9uUmVkaXJlY3QpOwotICAgIGJpbmRNZXRob2QoInNldFdpbmRvd0lzS2V5Iiwg
JkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRXaW5kb3dJc0tleSk7Ci0gICAgYmluZE1ldGhvZCgi
c2V0WFNTQXVkaXRvckVuYWJsZWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFhTU0F1ZGl0
b3JFbmFibGVkKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5n
RW5hYmxlZCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXN5bmNocm9ub3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQpOwotICAgIGJpbmRNZXRob2QoInNob3dXZWJJbnNwZWN0b3IiLCAmTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNob3dXZWJJbnNwZWN0b3IpOwotI2lmIEVOQUJMRShOT1RJRklDQVRJ
T05TKQotICAgIGJpbmRNZXRob2QoInNpbXVsYXRlRGVza3RvcE5vdGlmaWNhdGlvbkNsaWNrIiwg
JkxheW91dFRlc3RDb250cm9sbGVyOjpzaW11bGF0ZURlc2t0b3BOb3RpZmljYXRpb25DbGljayk7
Ci0jZW5kaWYKLSAgICBiaW5kTWV0aG9kKCJzdGFydFNwZWVjaElucHV0IiwgJkxheW91dFRlc3RD
b250cm9sbGVyOjpzdGFydFNwZWVjaElucHV0KTsKLSAgICBiaW5kTWV0aG9kKCJ0ZXN0UmVwYWlu
dCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6dGVzdFJlcGFpbnQpOwotICAgIGJpbmRNZXRob2Qo
IndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2FpdEZvclBv
bGljeURlbGVnYXRlKTsKLSAgICBiaW5kTWV0aG9kKCJ3YWl0VW50aWxEb25lIiwgJkxheW91dFRl
c3RDb250cm9sbGVyOjp3YWl0VW50aWxEb25lKTsKLSAgICBiaW5kTWV0aG9kKCJ3aW5kb3dDb3Vu
dCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2luZG93Q291bnQpOwotICAgIGJpbmRNZXRob2Qo
InNldFRleHREaXJlY3Rpb24iLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRleHREaXJlY3Rp
b24pOwotICAgIGJpbmRNZXRob2QoInNldEltYWdlc0FsbG93ZWQiLCAmTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldEltYWdlc0FsbG93ZWQpOwotICAgIGJpbmRNZXRob2QoInNldFNjcmlwdHNBbGxv
d2VkIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRTY3JpcHRzQWxsb3dlZCk7Ci0gICAgYmlu
ZE1ldGhvZCgic2V0U3RvcmFnZUFsbG93ZWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFN0
b3JhZ2VBbGxvd2VkKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRQbHVnaW5zQWxsb3dlZCIsICZMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0UGx1Z2luc0FsbG93ZWQpOwotCi0gICAgLy8gVGhlIGZvbGxv
d2luZyBhcmUgc3R1YnMuCi0gICAgYmluZE1ldGhvZCgiYWJvcnRNb2RhbCIsICZMYXlvdXRUZXN0
Q29udHJvbGxlcjo6YWJvcnRNb2RhbCk7Ci0gICAgYmluZE1ldGhvZCgiYWNjZXNzU3RvcmVkV2Vi
U2NyaXB0T2JqZWN0IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjphY2Nlc3NTdG9yZWRXZWJTY3Jp
cHRPYmplY3QpOwotICAgIGJpbmRNZXRob2QoImFkZERpc2FsbG93ZWRVUkwiLCAmTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmFkZERpc2FsbG93ZWRVUkwpOwotICAgIGJpbmRNZXRob2QoImFwcGxpY2F0
aW9uQ2FjaGVEaXNrVXNhZ2VGb3JPcmlnaW4iLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFwcGxp
Y2F0aW9uQ2FjaGVEaXNrVXNhZ2VGb3JPcmlnaW4pOwotICAgIGJpbmRNZXRob2QoImNhbGxTaG91
bGRDbG9zZU9uV2ViVmlldyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2FsbFNob3VsZENsb3Nl
T25XZWJWaWV3KTsKLSAgICBiaW5kTWV0aG9kKCJjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzIiwg
JkxheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKTsKLSAgICBi
aW5kTWV0aG9kKCJjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4iLCAmTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbik7Ci0gICAgYmluZE1ldGhv
ZCgiY2xlYXJCYWNrRm9yd2FyZExpc3QiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQmFj
a0ZvcndhcmRMaXN0KTsKLSAgICBiaW5kTWV0aG9kKCJkdW1wQXNXZWJBcmNoaXZlIiwgJkxheW91
dFRlc3RDb250cm9sbGVyOjpkdW1wQXNXZWJBcmNoaXZlKTsKLSAgICBiaW5kTWV0aG9kKCJrZWVw
V2ViSGlzdG9yeSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6a2VlcFdlYkhpc3RvcnkpOwotICAg
IGJpbmRNZXRob2QoIm9iakNDbGFzc05hbWVPZiIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6b2Jq
Q0NsYXNzTmFtZU9mKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2lu
UXVvdGEiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5R
dW90YSk7Ci0gICAgYmluZE1ldGhvZCgic2V0Q2FsbENsb3NlT25XZWJWaWV3cyIsICZMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0Q2FsbENsb3NlT25XZWJWaWV3cyk7Ci0gICAgYmluZE1ldGhvZCgi
c2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlciIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlcik7Ci0gICAgYmluZE1ldGhvZCgic2V0UHJpdmF0ZUJy
b3dzaW5nRW5hYmxlZCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UHJpdmF0ZUJyb3dzaW5n
RW5hYmxlZCk7Ci0gICAgYmluZE1ldGhvZCgic2V0VXNlRGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1v
ZGUiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZURhc2hib2FyZENvbXBhdGliaWxpdHlN
b2RlKTsKLSAgICBiaW5kTWV0aG9kKCJzdG9yZVdlYlNjcmlwdE9iamVjdCIsICZMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c3RvcmVXZWJTY3JpcHRPYmplY3QpOwotICAgIGJpbmRNZXRob2QoImRlbGV0
ZUFsbExvY2FsU3RvcmFnZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlQWxsTG9jYWxT
dG9yYWdlKTsKLSAgICBiaW5kTWV0aG9kKCJsb2NhbFN0b3JhZ2VEaXNrVXNhZ2VGb3JPcmlnaW4i
LCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbik7
Ci0gICAgYmluZE1ldGhvZCgib3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UiLCAmTGF5b3V0VGVzdENv
bnRyb2xsZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKTsKLSAgICBiaW5kTWV0aG9kKCJkZWxl
dGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4iLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUxv
Y2FsU3RvcmFnZUZvck9yaWdpbik7Ci0gICAgYmluZE1ldGhvZCgib2JzZXJ2ZVN0b3JhZ2VUcmFj
a2VyTm90aWZpY2F0aW9ucyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6b2JzZXJ2ZVN0b3JhZ2VU
cmFja2VyTm90aWZpY2F0aW9ucyk7Ci0gICAgYmluZE1ldGhvZCgic3luY0xvY2FsU3RvcmFnZSIs
ICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3luY0xvY2FsU3RvcmFnZSk7Ci0gICAgYmluZE1ldGhv
ZCgic2V0U2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQiLCAmTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFNob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5s
b2FkKTsKLSAgICBiaW5kTWV0aG9kKCJlbmFibGVGaXhlZExheW91dE1vZGUiLCAmTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmVuYWJsZUZpeGVkTGF5b3V0TW9kZSk7Ci0gICAgYmluZE1ldGhvZCgic2V0
Rml4ZWRMYXlvdXRTaXplIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRGaXhlZExheW91dFNp
emUpOwotICAgIGJpbmRNZXRob2QoInNlbGVjdGlvbkFzTWFya3VwIiwgJkxheW91dFRlc3RDb250
cm9sbGVyOjpzZWxlY3Rpb25Bc01hcmt1cCk7Ci0gICAgYmluZE1ldGhvZCgic2V0SGFzQ3VzdG9t
RnVsbFNjcmVlbkJlaGF2aW9yIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRIYXNDdXN0b21G
dWxsU2NyZWVuQmVoYXZpb3IpOwotICAgIGJpbmRNZXRob2QoInRleHRTdXJyb3VuZGluZ05vZGUi
LCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnRleHRTdXJyb3VuZGluZ05vZGUpOwotCi0gICAgLy8g
VGhlIGZhbGxiYWNrIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBhbiB1bmtub3duIG1ldGhvZCBpcyBp
bnZva2VkLgotICAgIGJpbmRGYWxsYmFja01ldGhvZCgmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmZh
bGxiYWNrTWV0aG9kKTsKLQotICAgIC8vIFNoYXJlZCBwcm9wZXJ0aWVzLgotICAgIC8vIGdsb2Jh
bEZsYWcgaXMgdXNlZCBieSBhIG51bWJlciBvZiBsYXlvdXQgdGVzdHMgaW4KLSAgICAvLyBMYXlv
dXRUZXN0c1xodHRwXHRlc3RzXHNlY3VyaXR5XGRhdGFVUkwuCi0gICAgYmluZFByb3BlcnR5KCJn
bG9iYWxGbGFnIiwgJm1fZ2xvYmFsRmxhZyk7Ci0gICAgLy8gd2ViSGlzdG9yeUl0ZW1Db3VudCBp
cyB1c2VkIGJ5IHRlc3RzIGluIExheW91dFRlc3RzXGh0dHBcdGVzdHNcaGlzdG9yeQotICAgIGJp
bmRQcm9wZXJ0eSgid2ViSGlzdG9yeUl0ZW1Db3VudCIsICZtX3dlYkhpc3RvcnlJdGVtQ291bnQp
OwotICAgIGJpbmRQcm9wZXJ0eSgidGl0bGVUZXh0RGlyZWN0aW9uIiwgJm1fdGl0bGVUZXh0RGly
ZWN0aW9uKTsKLSAgICBiaW5kUHJvcGVydHkoInBsYXRmb3JtTmFtZSIsICZtX3BsYXRmb3JtTmFt
ZSk7Ci0gICAgYmluZFByb3BlcnR5KCJpbnRlcmNlcHRQb3N0TWVzc2FnZSIsICZtX2ludGVyY2Vw
dFBvc3RNZXNzYWdlKTsKLSAgICBiaW5kUHJvcGVydHkoIndvcmtlclRocmVhZENvdW50IiwgJkxh
eW91dFRlc3RDb250cm9sbGVyOjp3b3JrZXJUaHJlYWRDb3VudCk7Ci0gICAgYmluZE1ldGhvZCgi
c2VuZFdlYkludGVudFJlc3BvbnNlIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZW5kV2ViSW50
ZW50UmVzcG9uc2UpOwotICAgIGJpbmRNZXRob2QoImRlbGl2ZXJXZWJJbnRlbnQiLCAmTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmRlbGl2ZXJXZWJJbnRlbnQpOwotfQotCi1MYXlvdXRUZXN0Q29udHJv
bGxlcjo6fkxheW91dFRlc3RDb250cm9sbGVyKCkKLXsKLX0KLQotTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OldvcmtRdWV1ZTo6fldvcmtRdWV1ZSgpCi17Ci0gICAgcmVzZXQoKTsKLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6V29ya1F1ZXVlOjpwcm9jZXNzV29ya1Nvb24oKQotewotICAg
IGlmIChtX2NvbnRyb2xsZXItPm1fc2hlbGwtPndlYlZpZXdIb3N0KCktPnRvcExvYWRpbmdGcmFt
ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fcXVldWUuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIC8vIFdlIGRlbGF5IHByb2Nlc3NpbmcgcXVldWVkIHdvcmsgdG8gYXZvaWQgcmVjdXJz
aW9uIHByb2JsZW1zLgotICAgICAgICBwb3N0VGFzayhuZXcgV29ya1F1ZXVlVGFzayh0aGlzKSk7
Ci0gICAgfSBlbHNlIGlmICghbV9jb250cm9sbGVyLT5tX3dhaXRVbnRpbERvbmUpCi0gICAgICAg
IG1fY29udHJvbGxlci0+bV9zaGVsbC0+dGVzdEZpbmlzaGVkKCk7Ci19Ci0KLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OldvcmtRdWV1ZTo6cHJvY2Vzc1dvcmsoKQotewotICAgIFRlc3RTaGVs
bCogc2hlbGwgPSBtX2NvbnRyb2xsZXItPm1fc2hlbGw7Ci0gICAgLy8gUXVpdCBkb2luZyB3b3Jr
IG9uY2UgYSBsb2FkIGlzIGluIHByb2dyZXNzLgotICAgIHdoaWxlICghbV9xdWV1ZS5pc0VtcHR5
KCkpIHsKLSAgICAgICAgYm9vbCBzdGFydGVkTG9hZCA9IG1fcXVldWUuZmlyc3QoKS0+cnVuKHNo
ZWxsKTsKLSAgICAgICAgZGVsZXRlIG1fcXVldWUudGFrZUZpcnN0KCk7Ci0gICAgICAgIGlmIChz
dGFydGVkTG9hZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fY29u
dHJvbGxlci0+bV93YWl0VW50aWxEb25lICYmICFzaGVsbC0+d2ViVmlld0hvc3QoKS0+dG9wTG9h
ZGluZ0ZyYW1lKCkpCi0gICAgICAgIHNoZWxsLT50ZXN0RmluaXNoZWQoKTsKLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6V29ya1F1ZXVlOjpyZXNldCgpCi17Ci0gICAgbV9mcm96ZW4g
PSBmYWxzZTsKLSAgICB3aGlsZSAoIW1fcXVldWUuaXNFbXB0eSgpKQotICAgICAgICBkZWxldGUg
bV9xdWV1ZS50YWtlRmlyc3QoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6V29y
a1F1ZXVlOjphZGRXb3JrKFdvcmtJdGVtKiB3b3JrKQotewotICAgIGlmIChtX2Zyb3plbikgewot
ICAgICAgICBkZWxldGUgd29yazsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX3F1ZXVl
LmFwcGVuZCh3b3JrKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcEFzVGV4
dChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQot
ewotICAgIG1fZHVtcEFzVGV4dCA9IHRydWU7Ci0gICAgbV9nZW5lcmF0ZVBpeGVsUmVzdWx0cyA9
IGZhbHNlOwotCi0gICAgLy8gT3B0aW9uYWwgcGFyYW1hdGVyLCBkZXNjcmliaW5nIHdoZXRoZXIg
aXQncyBhbGxvd2VkIHRvIGR1bXAgcGl4ZWwgcmVzdWx0cyBpbiBkdW1wQXNUZXh0IG1vZGUuCi0g
ICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkKLSAg
ICAgICAgbV9nZW5lcmF0ZVBpeGVsUmVzdWx0cyA9IGFyZ3VtZW50c1swXS52YWx1ZS5ib29sVmFs
dWU7Ci0KLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6ZHVtcERhdGFiYXNlQ2FsbGJhY2tzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqIHJlc3VsdCkKLXsKLSAgICAvLyBEbyBub3RoaW5nOyB3ZSBkb24ndCB1c2UgdGhpcyBm
bGFnIGFueXdoZXJlIGZvciBub3cKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcEVkaXRpbmdDYWxsYmFja3MoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIG1fZHVtcEVkaXRpbmdDYWxsYmFj
a3MgPSB0cnVlOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpkdW1wQmFja0ZvcndhcmRMaXN0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBtX2R1bXBCYWNrRm9yd2FyZExpc3QgPSB0cnVlOwot
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpk
dW1wRnJhbWVMb2FkQ2FsbGJhY2tzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
IHJlc3VsdCkKLXsKLSAgICBtX2R1bXBGcmFtZUxvYWRDYWxsYmFja3MgPSB0cnVlOwotICAgIHJl
c3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wUHJv
Z3Jlc3NGaW5pc2hlZENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
IHJlc3VsdCkKLXsKLSAgICBtX2R1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2sgPSB0cnVlOwot
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpk
dW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrcyhjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgbV9kdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9h
ZENhbGxiYWNrcyA9IHRydWU7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIG1fZHVtcFJlc291cmNlTG9h
ZENhbGxiYWNrcyA9IHRydWU7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBtX2R1bXBSZXNvdXJj
ZVJlc3BvbnNlTUlNRVR5cGVzID0gdHJ1ZTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnMo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIG1fZHVt
cENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnMgPSB0cnVlOwotICAgIHJlc3VsdC0+c2V0TnVsbCgp
OwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wQ2hpbGRGcmFtZXNBc1RleHQo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIG1fZHVt
cENoaWxkRnJhbWVzQXNUZXh0ID0gdHJ1ZTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcFdpbmRvd1N0YXR1c0NoYW5nZXMoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIG1fZHVtcFdpbmRv
d1N0YXR1c0NoYW5nZXMgPSB0cnVlOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wVGl0bGVDaGFuZ2VzKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBtX2R1bXBUaXRsZUNoYW5nZXMgPSB0
cnVlOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpkdW1wUGVybWlzc2lvbkNsaWVudENhbGxiYWNrcyhjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgbV9kdW1wUGVybWlzc2lvbkNsaWVudENhbGxi
YWNrcyA9IHRydWU7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmR1bXBDcmVhdGVWaWV3KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqIHJlc3VsdCkKLXsKLSAgICBtX2R1bXBDcmVhdGVWaWV3ID0gdHJ1ZTsKLSAgICByZXN1
bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWNjZXB0
c0VkaXRpbmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJl
c3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlz
Qm9vbCgpKQotICAgICAgICBtX2FjY2VwdHNFZGl0aW5nID0gYXJndW1lbnRzWzBdLnZhbHVlLmJv
b2xWYWx1ZTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6d2FpdFVudGlsRG9uZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
KiByZXN1bHQpCi17Ci0gICAgaWYgKCF3ZWJraXRfc3VwcG9ydDo6QmVpbmdEZWJ1Z2dlZCgpKQot
ICAgICAgICBwb3N0RGVsYXllZFRhc2sobmV3IE5vdGlmeURvbmVUaW1lZE91dFRhc2sodGhpcyks
IG1fc2hlbGwtPmxheW91dFRlc3RUaW1lb3V0KCkpOwotICAgIG1fd2FpdFVudGlsRG9uZSA9IHRy
dWU7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6Om5vdGlmeURvbmUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0
KQotewotICAgIC8vIFRlc3QgZGlkbid0IHRpbWVvdXQuIEtpbGwgdGhlIHRpbWVvdXQgdGltZXIu
Ci0gICAgbV90YXNrTGlzdC5yZXZva2VBbGwoKTsKLQotICAgIGNvbXBsZXRlTm90aWZ5RG9uZShm
YWxzZSk7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmNvbXBsZXRlTm90aWZ5RG9uZShib29sIGlzVGltZW91dCkKLXsKLSAgICBpZiAobV93
YWl0VW50aWxEb25lICYmICFtX3NoZWxsLT53ZWJWaWV3SG9zdCgpLT50b3BMb2FkaW5nRnJhbWUo
KSAmJiBtX3dvcmtRdWV1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKGlzVGltZW91dCkKLSAg
ICAgICAgICAgIG1fc2hlbGwtPnRlc3RUaW1lZE91dCgpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBtX3NoZWxsLT50ZXN0RmluaXNoZWQoKTsKLSAgICB9Ci0gICAgbV93YWl0VW50aWxEb25l
ID0gZmFsc2U7Ci19Ci0KLWNsYXNzIFdvcmtJdGVtQmFja0ZvcndhcmQgOiBwdWJsaWMgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OldvcmtJdGVtIHsKLXB1YmxpYzoKLSAgICBXb3JrSXRlbUJhY2tGb3J3
YXJkKGludCBkaXN0YW5jZSkgOiBtX2Rpc3RhbmNlKGRpc3RhbmNlKSB7IH0KLSAgICBib29sIHJ1
bihUZXN0U2hlbGwqIHNoZWxsKQotICAgIHsKLSAgICAgICAgc2hlbGwtPmdvVG9PZmZzZXQobV9k
aXN0YW5jZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOyAvLyBGSVhNRTogRGlkIGl0IHJlYWxseSBz
dGFydCBhIG5hdmlnYXRpb24/Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGludCBtX2Rpc3RhbmNl
OwotfTsKLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVCYWNrTmF2aWdhdGlvbihj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewot
ICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSkK
LSAgICAgICAgbV93b3JrUXVldWUuYWRkV29yayhuZXcgV29ya0l0ZW1CYWNrRm9yd2FyZCgtYXJn
dW1lbnRzWzBdLnRvSW50MzIoKSkpOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUZvcndhcmROYXZpZ2F0aW9uKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFy
Z3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc051bWJlcigpKQotICAgICAgICBt
X3dvcmtRdWV1ZS5hZGRXb3JrKG5ldyBXb3JrSXRlbUJhY2tGb3J3YXJkKGFyZ3VtZW50c1swXS50
b0ludDMyKCkpKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotY2xhc3MgV29ya0l0ZW1S
ZWxvYWQgOiBwdWJsaWMgTGF5b3V0VGVzdENvbnRyb2xsZXI6OldvcmtJdGVtIHsKLXB1YmxpYzoK
LSAgICBib29sIHJ1bihUZXN0U2hlbGwqIHNoZWxsKQotICAgIHsKLSAgICAgICAgc2hlbGwtPnJl
bG9hZCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci19OwotCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpxdWV1ZVJlbG9hZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50KiByZXN1bHQpCi17Ci0gICAgbV93b3JrUXVldWUuYWRkV29yayhuZXcgV29ya0l0ZW1SZWxv
YWQpOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi1jbGFzcyBXb3JrSXRlbUxvYWRpbmdT
Y3JpcHQgOiBwdWJsaWMgTGF5b3V0VGVzdENvbnRyb2xsZXI6OldvcmtJdGVtIHsKLXB1YmxpYzoK
LSAgICBXb3JrSXRlbUxvYWRpbmdTY3JpcHQoY29uc3Qgc3RyaW5nJiBzY3JpcHQpIDogbV9zY3Jp
cHQoc2NyaXB0KSB7IH0KLSAgICBib29sIHJ1bihUZXN0U2hlbGwqIHNoZWxsKQotICAgIHsKLSAg
ICAgICAgc2hlbGwtPndlYlZpZXcoKS0+bWFpbkZyYW1lKCktPmV4ZWN1dGVTY3JpcHQoV2ViU2Ny
aXB0U291cmNlKFdlYlN0cmluZzo6ZnJvbVVURjgobV9zY3JpcHQpKSk7Ci0gICAgICAgIHJldHVy
biB0cnVlOyAvLyBGSVhNRTogRGlkIGl0IHJlYWxseSBzdGFydCBhIG5hdmlnYXRpb24/Ci0gICAg
fQotCi1wcml2YXRlOgotICAgIHN0cmluZyBtX3NjcmlwdDsKLX07Ci0KLWNsYXNzIFdvcmtJdGVt
Tm9uTG9hZGluZ1NjcmlwdCA6IHB1YmxpYyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6V29ya0l0ZW0g
ewotcHVibGljOgotICAgIFdvcmtJdGVtTm9uTG9hZGluZ1NjcmlwdChjb25zdCBzdHJpbmcmIHNj
cmlwdCkgOiBtX3NjcmlwdChzY3JpcHQpIHsgfQotICAgIGJvb2wgcnVuKFRlc3RTaGVsbCogc2hl
bGwpCi0gICAgewotICAgICAgICBzaGVsbC0+d2ViVmlldygpLT5tYWluRnJhbWUoKS0+ZXhlY3V0
ZVNjcmlwdChXZWJTY3JpcHRTb3VyY2UoV2ViU3RyaW5nOjpmcm9tVVRGOChtX3NjcmlwdCkpKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBzdHJpbmcgbV9z
Y3JpcHQ7Ci19OwotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxvYWRpbmdTY3Jp
cHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkK
LXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzU3RyaW5n
KCkpCi0gICAgICAgIG1fd29ya1F1ZXVlLmFkZFdvcmsobmV3IFdvcmtJdGVtTG9hZGluZ1Njcmlw
dChhcmd1bWVudHNbMF0udG9TdHJpbmcoKSkpOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZU5vbkxvYWRpbmdTY3JpcHQoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBp
ZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpCi0gICAg
ICAgIG1fd29ya1F1ZXVlLmFkZFdvcmsobmV3IFdvcmtJdGVtTm9uTG9hZGluZ1NjcmlwdChhcmd1
bWVudHNbMF0udG9TdHJpbmcoKSkpOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi1jbGFz
cyBXb3JrSXRlbUxvYWQgOiBwdWJsaWMgTGF5b3V0VGVzdENvbnRyb2xsZXI6OldvcmtJdGVtIHsK
LXB1YmxpYzoKLSAgICBXb3JrSXRlbUxvYWQoY29uc3QgV2ViVVJMJiB1cmwsIGNvbnN0IFdlYlN0
cmluZyYgdGFyZ2V0KQotICAgICAgICA6IG1fdXJsKHVybCkKLSAgICAgICAgLCBtX3RhcmdldCh0
YXJnZXQpIHsgfQotICAgIGJvb2wgcnVuKFRlc3RTaGVsbCogc2hlbGwpCi0gICAgewotICAgICAg
ICBzaGVsbC0+d2ViVmlld0hvc3QoKS0+bG9hZFVSTEZvckZyYW1lKG1fdXJsLCBtX3RhcmdldCk7
Ci0gICAgICAgIHJldHVybiB0cnVlOyAvLyBGSVhNRTogRGlkIGl0IHJlYWxseSBzdGFydCBhIG5h
dmlnYXRpb24/Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFdlYlVSTCBtX3VybDsKLSAgICBXZWJT
dHJpbmcgbV90YXJnZXQ7Ci19OwotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxv
YWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkK
LXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzU3RyaW5n
KCkpIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBXZWJVUkw6OnJlc29sdmUoKSBhbmQg
YXZvaWQgR1VSTC4KLSAgICAgICAgR1VSTCBjdXJyZW50VVJMID0gbV9zaGVsbC0+d2ViVmlldygp
LT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKS51cmwoKTsKLSAgICAgICAgR1VSTCBmdWxsVVJMID0g
Y3VycmVudFVSTC5SZXNvbHZlKGFyZ3VtZW50c1swXS50b1N0cmluZygpKTsKLQotICAgICAgICBz
dHJpbmcgdGFyZ2V0ID0gIiI7Ci0gICAgICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMSAmJiBh
cmd1bWVudHNbMV0uaXNTdHJpbmcoKSkKLSAgICAgICAgICAgIHRhcmdldCA9IGFyZ3VtZW50c1sx
XS50b1N0cmluZygpOwotCi0gICAgICAgIG1fd29ya1F1ZXVlLmFkZFdvcmsobmV3IFdvcmtJdGVt
TG9hZChmdWxsVVJMLCBXZWJTdHJpbmc6OmZyb21VVEY4KHRhcmdldCkpKTsKLSAgICB9Ci0gICAg
cmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLWNsYXNzIFdvcmtJdGVtTG9hZEhUTUxTdHJpbmcgOiBw
dWJsaWMgTGF5b3V0VGVzdENvbnRyb2xsZXI6OldvcmtJdGVtICB7Ci1wdWJsaWM6Ci0gICAgV29y
a0l0ZW1Mb2FkSFRNTFN0cmluZyhjb25zdCBzdGQ6OnN0cmluZyYgaHRtbCwgY29uc3QgV2ViVVJM
JiBiYXNlVVJMKQotICAgICAgICA6IG1faHRtbChodG1sKQotICAgICAgICAsIG1fYmFzZVVSTChi
YXNlVVJMKSB7IH0KLSAgICBXb3JrSXRlbUxvYWRIVE1MU3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5n
JiBodG1sLCBjb25zdCBXZWJVUkwmIGJhc2VVUkwsIGNvbnN0IFdlYlVSTCYgdW5yZWFjaGFibGVV
UkwpCi0gICAgICAgIDogbV9odG1sKGh0bWwpCi0gICAgICAgICwgbV9iYXNlVVJMKGJhc2VVUkwp
Ci0gICAgICAgICwgbV91bnJlYWNoYWJsZVVSTCh1bnJlYWNoYWJsZVVSTCkgeyB9Ci0gICAgYm9v
bCBydW4oVGVzdFNoZWxsKiBzaGVsbCkKLSAgICB7Ci0gICAgICAgIHNoZWxsLT53ZWJWaWV3KCkt
Pm1haW5GcmFtZSgpLT5sb2FkSFRNTFN0cmluZygKLSAgICAgICAgICAgIFdlYktpdDo6V2ViRGF0
YShtX2h0bWwuZGF0YSgpLCBtX2h0bWwubGVuZ3RoKCkpLCBtX2Jhc2VVUkwsIG1fdW5yZWFjaGFi
bGVVUkwpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3Rk
OjpzdHJpbmcgbV9odG1sOwotICAgIFdlYlVSTCBtX2Jhc2VVUkw7Ci0gICAgV2ViVVJMIG1fdW5y
ZWFjaGFibGVVUkw7Ci19OwotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxvYWRI
VE1MU3RyaW5nKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5p
c1N0cmluZygpKSB7Ci0gICAgICAgIHN0cmluZyBodG1sID0gYXJndW1lbnRzWzBdLnRvU3RyaW5n
KCk7Ci0gICAgICAgIFdlYlVSTCBiYXNlVVJMKEdVUkwoIiIpKTsKLSAgICAgICAgaWYgKGFyZ3Vt
ZW50cy5zaXplKCkgPiAxICYmIGFyZ3VtZW50c1sxXS5pc1N0cmluZygpKQotICAgICAgICAgICAg
YmFzZVVSTCA9IFdlYlVSTChHVVJMKGFyZ3VtZW50c1sxXS50b1N0cmluZygpKSk7Ci0gICAgICAg
IGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMiAmJiBhcmd1bWVudHNbMl0uaXNTdHJpbmcoKSkKLSAg
ICAgICAgICAgIG1fd29ya1F1ZXVlLmFkZFdvcmsobmV3IFdvcmtJdGVtTG9hZEhUTUxTdHJpbmco
aHRtbCwgYmFzZVVSTCwgV2ViVVJMKEdVUkwoYXJndW1lbnRzWzJdLnRvU3RyaW5nKCkpKSkpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3dvcmtRdWV1ZS5hZGRXb3JrKG5ldyBXb3JrSXRl
bUxvYWRIVE1MU3RyaW5nKGh0bWwsIGJhc2VVUkwpKTsKLSAgICB9Ci0gICAgcmVzdWx0LT5zZXRO
dWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9iakNJZGVudGl0eUlzRXF1
YWwoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkK
LXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDIpIHsKLSAgICAgICAgLy8gVGhpcyBpcyB0
aGUgYmVzdCB3ZSBjYW4gZG8gdG8gcmV0dXJuIGFuIGVycm9yLgotICAgICAgICByZXN1bHQtPnNl
dE51bGwoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICByZXN1bHQtPnNldChhcmd1bWVu
dHNbMF0uaXNFcXVhbChhcmd1bWVudHNbMV0pKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6cmVzZXQoKQotewotICAgIGlmIChtX3NoZWxsKSB7Ci0gICAgICAgIG1fc2hlbGwtPndl
YlZpZXcoKS0+c2V0Wm9vbUxldmVsKGZhbHNlLCAwKTsKLSAgICAgICAgbV9zaGVsbC0+d2ViVmll
dygpLT5zZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHModHJ1ZSk7Ci0jaWYgIU9TKERBUldJ
TikgJiYgIU9TKFdJTkRPV1MpIC8vIEFjdHVhbGx5LCBUT09MS0lUX0dUSwotICAgICAgICAvLyAo
Q29uc3RhbnRzIGNvcGllZCBiZWNhdXNlIHdlIGNhbid0IGRlcGVuZCBvbiB0aGUgaGVhZGVyIHRo
YXQgZGVmaW5lZAotICAgICAgICAvLyB0aGVtIGZyb20gdGhpcyBmaWxlLikKLSAgICAgICAgbV9z
aGVsbC0+d2ViVmlldygpLT5zZXRTZWxlY3Rpb25Db2xvcnMoMHhmZjFlOTBmZiwgMHhmZjAwMDAw
MCwgMHhmZmM4YzhjOCwgMHhmZjMyMzIzMik7Ci0jZW5kaWYKLSAgICAgICAgbV9zaGVsbC0+d2Vi
VmlldygpLT5yZW1vdmVBbGxVc2VyQ29udGVudCgpOwotICAgICAgICBXZWJLaXQ6OldlYlNpemUg
ZW1wdHk7Ci0gICAgICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+ZGlzYWJsZUF1dG9SZXNpemVNb2Rl
KCk7Ci0gICAgICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+c2V0RGV2aWNlU2NhbGVGYWN0b3IoMSk7
Ci0gICAgfQotICAgIG1fZHVtcEFzVGV4dCA9IGZhbHNlOwotICAgIG1fZHVtcEFzQXVkaW8gPSBm
YWxzZTsKLSAgICBtX2R1bXBDcmVhdGVWaWV3ID0gZmFsc2U7Ci0gICAgbV9kdW1wRWRpdGluZ0Nh
bGxiYWNrcyA9IGZhbHNlOwotICAgIG1fZHVtcEZyYW1lTG9hZENhbGxiYWNrcyA9IGZhbHNlOwot
ICAgIG1fZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjayA9IGZhbHNlOwotICAgIG1fZHVtcFVz
ZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MgPSBmYWxzZTsKLSAgICBtX2R1bXBSZXNvdXJj
ZUxvYWRDYWxsYmFja3MgPSBmYWxzZTsKLSAgICBtX2R1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5
cGVzID0gZmFsc2U7Ci0gICAgbV9kdW1wQmFja0ZvcndhcmRMaXN0ID0gZmFsc2U7Ci0gICAgbV9k
dW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9ucyA9IGZhbHNlOwotICAgIG1fZHVtcENoaWxkRnJh
bWVzQXNUZXh0ID0gZmFsc2U7Ci0gICAgbV9kdW1wV2luZG93U3RhdHVzQ2hhbmdlcyA9IGZhbHNl
OwotICAgIG1fZHVtcFNlbGVjdGlvblJlY3QgPSBmYWxzZTsKLSAgICBtX2R1bXBUaXRsZUNoYW5n
ZXMgPSBmYWxzZTsKLSAgICBtX2R1bXBQZXJtaXNzaW9uQ2xpZW50Q2FsbGJhY2tzID0gZmFsc2U7
Ci0gICAgbV9nZW5lcmF0ZVBpeGVsUmVzdWx0cyA9IHRydWU7Ci0gICAgbV9hY2NlcHRzRWRpdGlu
ZyA9IHRydWU7Ci0gICAgbV93YWl0VW50aWxEb25lID0gZmFsc2U7Ci0gICAgbV9jYW5PcGVuV2lu
ZG93cyA9IGZhbHNlOwotICAgIG1fdGVzdFJlcGFpbnQgPSBmYWxzZTsKLSAgICBtX3N3ZWVwSG9y
aXpvbnRhbGx5ID0gZmFsc2U7Ci0gICAgbV9zaG91bGRBZGRGaWxlVG9QYXN0ZWJvYXJkID0gZmFs
c2U7Ci0gICAgbV9zdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzID0gZmFsc2U7Ci0gICAgbV9kZWZl
ck1haW5SZXNvdXJjZURhdGFMb2FkID0gdHJ1ZTsKLSAgICBtX2dsb2JhbEZsYWcuc2V0KGZhbHNl
KTsKLSAgICBtX3dlYkhpc3RvcnlJdGVtQ291bnQuc2V0KDApOwotICAgIG1fdGl0bGVUZXh0RGly
ZWN0aW9uLnNldCgibHRyIik7Ci0gICAgbV9wbGF0Zm9ybU5hbWUuc2V0KCJjaHJvbWl1bSIpOwot
ICAgIG1faW50ZXJjZXB0UG9zdE1lc3NhZ2Uuc2V0KGZhbHNlKTsKLSAgICBtX3VzZXJTdHlsZVNo
ZWV0TG9jYXRpb24gPSBXZWJVUkwoKTsKLSAgICBtX2lzUHJpbnRpbmcgPSBmYWxzZTsKLQotICAg
IHdlYmtpdF9zdXBwb3J0OjpTZXRBY2NlcHRBbGxDb29raWVzKGZhbHNlKTsKLSAgICBXZWJTZWN1
cml0eVBvbGljeTo6cmVzZXRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RzKCk7Ci0KLSAgICAvLyBSZXNl
dCB0aGUgZGVmYXVsdCBxdW90YSBmb3IgZWFjaCBvcmlnaW4gdG8gNU1CCi0gICAgd2Via2l0X3N1
cHBvcnQ6OlNldERhdGFiYXNlUXVvdGEoNSAqIDEwMjQgKiAxMDI0KTsKLQotICAgIHNldGxvY2Fs
ZShMQ19BTEwsICIiKTsKLQotICAgIGlmIChtX2Nsb3NlUmVtYWluaW5nV2luZG93cykKLSAgICAg
ICAgbV9zaGVsbC0+Y2xvc2VSZW1haW5pbmdXaW5kb3dzKCk7Ci0gICAgZWxzZQotICAgICAgICBt
X2Nsb3NlUmVtYWluaW5nV2luZG93cyA9IHRydWU7Ci0gICAgbV93b3JrUXVldWUucmVzZXQoKTsK
LSAgICBtX3Rhc2tMaXN0LnJldm9rZUFsbCgpOwotICAgIG1fc2hvdWxkU3RheU9uUGFnZUFmdGVy
SGFuZGxpbmdCZWZvcmVVbmxvYWQgPSBmYWxzZTsKLSAgICBtX2hhc0N1c3RvbUZ1bGxTY3JlZW5C
ZWhhdmlvciA9IGZhbHNlOwotI2lmIE9TKExJTlVYKSB8fCBPUyhBTkRST0lEKQotICAgIFdlYkZv
bnRSZW5kZXJpbmc6OnNldFN1YnBpeGVsUG9zaXRpb25pbmcoZmFsc2UpOwotI2VuZGlmCi19Ci0K
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmxvY2F0aW9uQ2hhbmdlRG9uZSgpCi17Ci0gICAg
bV93ZWJIaXN0b3J5SXRlbUNvdW50LnNldChtX3NoZWxsLT5uYXZpZ2F0aW9uRW50cnlDb3VudCgp
KTsKLQotICAgIC8vIE5vIG1vcmUgbmV3IHdvcmsgYWZ0ZXIgdGhlIGZpcnN0IGNvbXBsZXRlIGxv
YWQuCi0gICAgbV93b3JrUXVldWUuc2V0RnJvemVuKHRydWUpOwotCi0gICAgaWYgKCFtX3dhaXRV
bnRpbERvbmUpCi0gICAgICAgIG1fd29ya1F1ZXVlLnByb2Nlc3NXb3JrU29vbigpOwotfQotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpwb2xpY3lEZWxlZ2F0ZURvbmUoKQotewotICAgIEFT
U0VSVChtX3dhaXRVbnRpbERvbmUpOwotICAgIG1fc2hlbGwtPnRlc3RGaW5pc2hlZCgpOwotICAg
IG1fd2FpdFVudGlsRG9uZSA9IGZhbHNlOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRDYW5PcGVuV2luZG93cyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCi17Ci0gICAgbV9jYW5PcGVuV2luZG93cyA9IHRydWU7Ci0gICAgcmVzdWx0LT5zZXRO
dWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRhYktleUN5Y2xlc1Ro
cm91Z2hFbGVtZW50cyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFu
dCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNb
MF0uaXNCb29sKCkpCi0gICAgICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+c2V0VGFiS2V5Q3ljbGVz
VGhyb3VnaEVsZW1lbnRzKGFyZ3VtZW50c1swXS50b0Jvb2xlYW4oKSk7Ci0gICAgcmVzdWx0LT5z
ZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndpbmRvd0NvdW50KGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQt
PnNldChzdGF0aWNfY2FzdDxpbnQ+KG1fc2hlbGwtPndpbmRvd0NvdW50KCkpKTsKLX0KLQotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q2xvc2VSZW1haW5pbmdXaW5kb3dzV2hlbkNvbXBs
ZXRlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQp
Ci17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2wo
KSkKLSAgICAgICAgbV9jbG9zZVJlbWFpbmluZ1dpbmRvd3MgPSBhcmd1bWVudHNbMF0udmFsdWUu
Ym9vbFZhbHVlOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRBbHdheXNBY2NlcHRDb29raWVzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXpl
KCkgPiAwKQotICAgICAgICB3ZWJraXRfc3VwcG9ydDo6U2V0QWNjZXB0QWxsQ29va2llcyhjcHBW
YXJpYW50VG9Cb29sKGFyZ3VtZW50c1swXSkpOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5n
RW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVz
dWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNC
b29sKCkpCi0gICAgICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+c2V0dGluZ3MoKS0+c2V0QXN5bmNo
cm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoY3BwVmFyaWFudFRvQm9vbChhcmd1bWVudHNbMF0p
KTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2hvd1dlYkluc3BlY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCi17Ci0gICAgbV9zaGVsbC0+c2hvd0RldlRvb2xzKCk7Ci0gICAgcmVzdWx0LT5zZXRO
dWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsb3NlV2ViSW5zcGVjdG9y
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJncywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAg
IG1fc2hlbGwtPmNsb3NlRGV2VG9vbHMoKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2luZG93SXNLZXkoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1l
bnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQotICAgICAgICBtX3NoZWxs
LT5zZXRGb2N1cyhtX3NoZWxsLT53ZWJWaWV3KCksIGFyZ3VtZW50c1swXS52YWx1ZS5ib29sVmFs
dWUpOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1
bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+
IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKSB7Ci0gICAgICAgIG1fc2hlbGwtPnByZWZlcmVu
Y2VzKCktPnVzZXJTdHlsZVNoZWV0TG9jYXRpb24gPSBhcmd1bWVudHNbMF0udmFsdWUuYm9vbFZh
bHVlID8gbV91c2VyU3R5bGVTaGVldExvY2F0aW9uIDogV2ViVVJMKCk7Ci0gICAgICAgIG1fc2hl
bGwtPmFwcGx5UHJlZmVyZW5jZXMoKTsKLSAgICB9Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24o
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsK
LSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkp
IHsKLSAgICAgICAgbV91c2VyU3R5bGVTaGVldExvY2F0aW9uID0gd2Via2l0X3N1cHBvcnQ6Okxv
Y2FsRmlsZVRvRGF0YVVSTCgKLSAgICAgICAgICAgIHdlYmtpdF9zdXBwb3J0OjpSZXdyaXRlTGF5
b3V0VGVzdHNVUkwoYXJndW1lbnRzWzBdLnRvU3RyaW5nKCkpKTsKLSAgICAgICAgbV9zaGVsbC0+
cHJlZmVyZW5jZXMoKS0+dXNlclN0eWxlU2hlZXRMb2NhdGlvbiA9IG1fdXNlclN0eWxlU2hlZXRM
b2NhdGlvbjsKLSAgICAgICAgbV9zaGVsbC0+YXBwbHlQcmVmZXJlbmNlcygpOwotICAgIH0KLSAg
ICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAg
JiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKSB7Ci0gICAgICAgIG1fc2hlbGwtPnByZWZlcmVuY2Vz
KCktPmF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkID0gYXJndW1lbnRzWzBdLnZhbHVlLmJvb2xW
YWx1ZTsKLSAgICAgICAgbV9zaGVsbC0+YXBwbHlQcmVmZXJlbmNlcygpOwotICAgIH0KLSAgICBy
ZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXhlY0Nv
bW1hbmQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8
PSAwIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
c3RkOjpzdHJpbmcgY29tbWFuZCA9IGFyZ3VtZW50c1swXS50b1N0cmluZygpOwotICAgIHN0ZDo6
c3RyaW5nIHZhbHVlKCIiKTsKLSAgICAvLyBJZ25vcmUgdGhlIHNlY29uZCBwYXJhbWV0ZXIgKHdo
aWNoIGlzIHVzZXJJbnRlcmZhY2UpCi0gICAgLy8gc2luY2UgdGhpcyBjb21tYW5kIGVtdWxhdGVz
IGEgbWFudWFsIGFjdGlvbi4KLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+PSAzICYmIGFyZ3Vt
ZW50c1syXS5pc1N0cmluZygpKQotICAgICAgICB2YWx1ZSA9IGFyZ3VtZW50c1syXS50b1N0cmlu
ZygpOwotCi0gICAgLy8gTm90ZTogd2Via2l0J3MgdmVyc2lvbiBkb2VzIG5vdCByZXR1cm4gdGhl
IGJvb2xlYW4sIHNvIG5laXRoZXIgZG8gd2UuCi0gICAgbV9zaGVsbC0+d2ViVmlldygpLT5mb2N1
c2VkRnJhbWUoKS0+ZXhlY3V0ZUNvbW1hbmQoV2ViU3RyaW5nOjpmcm9tVVRGOChjb21tYW5kKSwg
V2ViU3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSkpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjppc0NvbW1hbmRFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPD0gMCB8fCAh
YXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzdGQ6OnN0cmluZyBjb21tYW5kID0gYXJndW1l
bnRzWzBdLnRvU3RyaW5nKCk7Ci0gICAgYm9vbCBydiA9IG1fc2hlbGwtPndlYlZpZXcoKS0+Zm9j
dXNlZEZyYW1lKCktPmlzQ29tbWFuZEVuYWJsZWQoV2ViU3RyaW5nOjpmcm9tVVRGOChjb21tYW5k
KSk7Ci0gICAgcmVzdWx0LT5zZXQocnYpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRQb3B1cEJsb2NraW5nRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50
cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAm
JiBhcmd1bWVudHNbMF0uaXNCb29sKCkpIHsKLSAgICAgICAgYm9vbCBibG9ja1BvcHVwcyA9IGFy
Z3VtZW50c1swXS50b0Jvb2xlYW4oKTsKLSAgICAgICAgbV9zaGVsbC0+cHJlZmVyZW5jZXMoKS0+
amF2YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0b21hdGljYWxseSA9ICFibG9ja1BvcHVwczsKLSAg
ICAgICAgbV9zaGVsbC0+YXBwbHlQcmVmZXJlbmNlcygpOwotICAgIH0KLSAgICByZXN1bHQtPnNl
dE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SW1hZ2VzQWxsb3dl
ZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQot
ewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkp
Ci0gICAgICAgIG1fc2hlbGwtPndlYlBlcm1pc3Npb25zKCktPnNldEltYWdlc0FsbG93ZWQoYXJn
dW1lbnRzWzBdLnRvQm9vbGVhbigpKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2NyaXB0c0FsbG93ZWQoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1l
bnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQotICAgICAgICBtX3NoZWxs
LT53ZWJQZXJtaXNzaW9ucygpLT5zZXRTY3JpcHRzQWxsb3dlZChhcmd1bWVudHNbMF0udG9Cb29s
ZWFuKCkpOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRTdG9yYWdlQWxsb3dlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50
cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAm
JiBhcmd1bWVudHNbMF0uaXNCb29sKCkpCi0gICAgICAgIG1fc2hlbGwtPndlYlBlcm1pc3Npb25z
KCktPnNldFN0b3JhZ2VBbGxvd2VkKGFyZ3VtZW50c1swXS50b0Jvb2xlYW4oKSk7Ci0gICAgcmVz
dWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBsdWdp
bnNBbGxvd2VkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5p
c0Jvb2woKSkKLSAgICAgICAgbV9zaGVsbC0+d2ViUGVybWlzc2lvbnMoKS0+c2V0UGx1Z2luc0Fs
bG93ZWQoYXJndW1lbnRzWzBdLnRvQm9vbGVhbigpKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsK
LX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlRGFzaGJvYXJkQ29tcGF0aWJp
bGl0eU1vZGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewot
ICAgIC8vIFdlIGhhdmUgbm8gbmVlZCB0byBzdXBwb3J0IERhc2hib2FyZCBDb21wYXRpYmlsaXR5
IE1vZGUgKG1hYy1vbmx5KQotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHRvIHN1cHBvcnQgYXBwbGljYXRpb24gY2FjaGUgcXVvdGFzLgotICAgIHJlc3VsdC0+c2V0TnVs
bCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFwcGxpY2F0aW9uQ2Fj
aGVGb3JPcmlnaW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQot
ewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gc3VwcG9ydCBkZWxldGluZyBhbGwgYXBwbGlj
YXRpb24gY2FjaGUgZm9yIGFuIG9yaWdpbi4KLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3Rh
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICAvLyBG
SVhNRTogSW1wbGVtZW50IHRvIHN1cHBvcnQgYXBwbGljYXRpb24gY2FjaGUgcXVvdGFzLgotICAg
IHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvcmln
aW5zV2l0aEFwcGxpY2F0aW9uQ2FjaGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCogcmVzdWx0KQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gc3VwcG9ydCBnZXR0aW5n
IG9yaWdpbnMgdGhhdCBoYXZlIGFwcGxpY2F0aW9uIGNhY2hlcy4KLSAgICByZXN1bHQtPnNldE51
bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YXBwbGljYXRpb25DYWNoZURp
c2tVc2FnZUZvck9yaWdpbihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1
bHQpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBzdXBwb3J0IGdldHRpbmcgZGlzayB1
c2FnZSBieSBhbGwgYXBwbGljYXRpb24gY2FjaGUgZm9yIGFuIG9yaWdpbi4KLSAgICByZXN1bHQt
PnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2Nyb2xsYmFy
UG9saWN5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAg
ICAvLyBGSVhNRTogaW1wbGVtZW50LgotICAgIC8vIEN1cnJlbnRseSBvbmx5IGhhcyBhIG5vbi1u
dWxsIGltcGxlbWVudGF0aW9uIG9uIFFULgotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShjb25zdCBD
cHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlm
IChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkpIHsKLSAgICAg
ICAgYm9vbCBlbmFibGUgPSBhcmd1bWVudHNbMF0udmFsdWUuYm9vbFZhbHVlOwotICAgICAgICBi
b29sIHBlcm1pc3NpdmUgPSBmYWxzZTsKLSAgICAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAx
ICYmIGFyZ3VtZW50c1sxXS5pc0Jvb2woKSkKLSAgICAgICAgICAgIHBlcm1pc3NpdmUgPSBhcmd1
bWVudHNbMV0udmFsdWUuYm9vbFZhbHVlOwotICAgICAgICBtX3NoZWxsLT53ZWJWaWV3SG9zdCgp
LT5zZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShlbmFibGUsIHBlcm1pc3NpdmUpOwotICAgIH0KLSAg
ICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2Fp
dEZvclBvbGljeURlbGVnYXRlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJl
c3VsdCkKLXsKLSAgICBtX3NoZWxsLT53ZWJWaWV3SG9zdCgpLT53YWl0Rm9yUG9saWN5RGVsZWdh
dGUoKTsKLSAgICBtX3dhaXRVbnRpbERvbmUgPSB0cnVlOwotICAgIHJlc3VsdC0+c2V0TnVsbCgp
OwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXaWxsU2VuZFJlcXVlc3RDbGVh
ckhlYWRlcihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVz
dWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNT
dHJpbmcoKSkgewotICAgICAgICBzdHJpbmcgaGVhZGVyID0gYXJndW1lbnRzWzBdLnRvU3RyaW5n
KCk7Ci0gICAgICAgIGlmICghaGVhZGVyLmVtcHR5KCkpCi0gICAgICAgICAgICBtX3NoZWxsLT53
ZWJWaWV3SG9zdCgpLT5hZGRDbGVhckhlYWRlcihTdHJpbmc6OmZyb21VVEY4KGhlYWRlci5jX3N0
cigpKSk7Ci0gICAgfQotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3QoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAg
ICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQotICAg
ICAgICBtX3NoZWxsLT53ZWJWaWV3SG9zdCgpLT5zZXRCbG9ja1JlZGlyZWN0cyhhcmd1bWVudHNb
MF0udmFsdWUuYm9vbFZhbHVlKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBp
ZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQotICAgICAg
ICBtX3NoZWxsLT53ZWJWaWV3SG9zdCgpLT5zZXRSZXF1ZXN0UmV0dXJuTnVsbChhcmd1bWVudHNb
MF0udmFsdWUuYm9vbFZhbHVlKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6cGF0aFRvTG9jYWxSZXNvdXJjZShjb25zdCBDcHBBcmd1bWVu
dExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0
TnVsbCgpOwotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDw9IDAgfHwgIWFyZ3VtZW50c1swXS5p
c1N0cmluZygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdHJpbmcgdXJsID0gYXJndW1lbnRz
WzBdLnRvU3RyaW5nKCk7Ci0jaWYgT1MoV0lORE9XUykKLSAgICBpZiAoIXVybC5maW5kKCIvdG1w
LyIpKSB7Ci0gICAgICAgIC8vIFdlIHdhbnQgYSB0ZW1wIGZpbGUuCi0gICAgICAgIGNvbnN0IHVu
c2lnbmVkIHRlbXBQcmVmaXhMZW5ndGggPSA1OwotICAgICAgICBzaXplX3QgYnVmZmVyU2l6ZSA9
IE1BWF9QQVRIOwotICAgICAgICBPd25BcnJheVB0cjxXQ0hBUj4gdGVtcFBhdGggPSBhZG9wdEFy
cmF5UHRyKG5ldyBXQ0hBUltidWZmZXJTaXplXSk7Ci0gICAgICAgIERXT1JEIHRlbXBMZW5ndGgg
PSA6OkdldFRlbXBQYXRoVyhidWZmZXJTaXplLCB0ZW1wUGF0aC5nZXQoKSk7Ci0gICAgICAgIGlm
ICh0ZW1wTGVuZ3RoICsgdXJsLmxlbmd0aCgpIC0gdGVtcFByZWZpeExlbmd0aCArIDEgPiBidWZm
ZXJTaXplKSB7Ci0gICAgICAgICAgICBidWZmZXJTaXplID0gdGVtcExlbmd0aCArIHVybC5sZW5n
dGgoKSAtIHRlbXBQcmVmaXhMZW5ndGggKyAxOwotICAgICAgICAgICAgdGVtcFBhdGggPSBhZG9w
dEFycmF5UHRyKG5ldyBXQ0hBUltidWZmZXJTaXplXSk7Ci0gICAgICAgICAgICB0ZW1wTGVuZ3Ro
ID0gR2V0VGVtcFBhdGhXKGJ1ZmZlclNpemUsIHRlbXBQYXRoLmdldCgpKTsKLSAgICAgICAgICAg
IEFTU0VSVCh0ZW1wTGVuZ3RoIDwgYnVmZmVyU2l6ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgc3Ry
aW5nIHJlc3VsdFBhdGgoV2ViU3RyaW5nKHRlbXBQYXRoLmdldCgpLCB0ZW1wTGVuZ3RoKS51dGY4
KCkpOwotICAgICAgICByZXN1bHRQYXRoLmFwcGVuZCh1cmwuc3Vic3RyKHRlbXBQcmVmaXhMZW5n
dGgpKTsKLSAgICAgICAgcmVzdWx0LT5zZXQocmVzdWx0UGF0aCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0jZW5kaWYKLQotICAgIC8vIFNvbWUgbGF5b3V0IHRlc3RzIHVzZSBmaWxlOi8vLy8g
d2hpY2ggd2UgcmVzb2x2ZSBhcyBhIFVOQyBwYXRoLiBOb3JtYWxpemUKLSAgICAvLyB0aGVtIHRv
IGp1c3QgZmlsZTovLy8uCi0gICAgc3RyaW5nIGxvd2VyVXJsID0gdXJsOwotICAgIHRyYW5zZm9y
bShsb3dlclVybC5iZWdpbigpLCBsb3dlclVybC5lbmQoKSwgbG93ZXJVcmwuYmVnaW4oKSwgOjp0
b2xvd2VyKTsKLSAgICB3aGlsZSAoIWxvd2VyVXJsLmZpbmQoImZpbGU6Ly8vLyIpKSB7Ci0gICAg
ICAgIHVybCA9IHVybC5zdWJzdHIoMCwgOCkgKyB1cmwuc3Vic3RyKDkpOwotICAgICAgICBsb3dl
clVybCA9IGxvd2VyVXJsLnN1YnN0cigwLCA4KSArIGxvd2VyVXJsLnN1YnN0cig5KTsKLSAgICB9
Ci0gICAgcmVzdWx0LT5zZXQod2Via2l0X3N1cHBvcnQ6OlJld3JpdGVMYXlvdXRUZXN0c1VSTCh1
cmwpLnNwZWMoKSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZEZpbGVUb1Bh
c3RlYm9hcmRPbkRyYWcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0
KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIG1fc2hvdWxkQWRkRmlsZVRvUGFzdGVi
b2FyZCA9IHRydWU7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFN0b3BQcm92
aXNpb25hbEZyYW1lTG9hZHMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVz
dWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIG1fc3RvcFByb3Zpc2lvbmFsRnJh
bWVMb2FkcyA9IHRydWU7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNtYXJ0
SW5zZXJ0RGVsZXRlRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1
bWVudHNbMF0uaXNCb29sKCkpCi0gICAgICAgIG1fc2hlbGwtPndlYlZpZXdIb3N0KCktPnNldFNt
YXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChhcmd1bWVudHNbMF0udmFsdWUuYm9vbFZhbHVlKTsKLSAg
ICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgp
ID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkpCi0gICAgICAgIG1fc2hlbGwtPndlYlZpZXdI
b3N0KCktPnNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoYXJndW1lbnRzWzBdLnZh
bHVlLmJvb2xWYWx1ZSk7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLWJvb2wgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKGNvbnN0
IFdlYlN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWUsIGNvbnN0IFdlYlN0cmluZyYg
ZWxlbWVudElkKQotewotICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IG1fc2hlbGwtPndlYlZpZXco
KS0+bWFpbkZyYW1lKCk7Ci0gICAgaWYgKCF3ZWJGcmFtZSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgV2ViQW5pbWF0aW9uQ29udHJvbGxlciogY29udHJvbGxlciA9IHdlYkZyYW1lLT5h
bmltYXRpb25Db250cm9sbGVyKCk7Ci0gICAgaWYgKCFjb250cm9sbGVyKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBXZWJFbGVtZW50IGVsZW1lbnQgPSB3ZWJGcmFtZS0+ZG9jdW1lbnQo
KS5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQpOwotICAgIGlmIChlbGVtZW50LmlzTnVsbCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXItPnBhdXNlQW5pbWF0
aW9uQXRUaW1lKGVsZW1lbnQsIGFuaW1hdGlvbk5hbWUsIHRpbWUpOwotfQotCi1ib29sIExheW91
dFRlc3RDb250cm9sbGVyOjpwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoY29u
c3QgV2ViU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSB0aW1lLCBjb25zdCBXZWJTdHJpbmcm
IGVsZW1lbnRJZCkKLXsKLSAgICBXZWJGcmFtZSogd2ViRnJhbWUgPSBtX3NoZWxsLT53ZWJWaWV3
KCktPm1haW5GcmFtZSgpOwotICAgIGlmICghd2ViRnJhbWUpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIFdlYkFuaW1hdGlvbkNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSB3ZWJGcmFtZS0+
YW5pbWF0aW9uQ29udHJvbGxlcigpOwotICAgIGlmICghY29udHJvbGxlcikKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgV2ViRWxlbWVudCBlbGVtZW50ID0gd2ViRnJhbWUtPmRvY3VtZW50
KCkuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTsKLSAgICBpZiAoZWxlbWVudC5pc051bGwoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBjb250cm9sbGVyLT5wYXVzZVRyYW5z
aXRpb25BdFRpbWUoZWxlbWVudCwgcHJvcGVydHlOYW1lLCB0aW1lKTsKLX0KLQotYm9vbCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElk
KGNvbnN0IFdlYlN0cmluZyYgZWxlbWVudElkKQotewotICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9
IG1fc2hlbGwtPndlYlZpZXcoKS0+bWFpbkZyYW1lKCk7Ci0gICAgaWYgKCF3ZWJGcmFtZSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgV2ViRWxlbWVudCBlbGVtZW50ID0gd2ViRnJhbWUt
PmRvY3VtZW50KCkuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTsKLSAgICBpZiAoZWxlbWVudC5p
c051bGwoKSB8fCAhZWxlbWVudC5oYXNUYWdOYW1lKCJpbnB1dCIpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBXZWJJbnB1dEVsZW1lbnQgaW5wdXRFbGVtZW50ID0gZWxlbWVudC50bzxX
ZWJJbnB1dEVsZW1lbnQ+KCk7Ci0gICAgcmV0dXJuIGlucHV0RWxlbWVudC5hdXRvQ29tcGxldGUo
KTsKLX0KLQotaW50IExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlv
bnMoKQotewotICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IG1fc2hlbGwtPndlYlZpZXcoKS0+bWFp
bkZyYW1lKCk7Ci0gICAgaWYgKCF3ZWJGcmFtZSkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAg
V2ViQW5pbWF0aW9uQ29udHJvbGxlciogY29udHJvbGxlciA9IHdlYkZyYW1lLT5hbmltYXRpb25D
b250cm9sbGVyKCk7Ci0gICAgaWYgKCFjb250cm9sbGVyKQotICAgICAgICByZXR1cm4gLTE7Ci0K
LSAgICByZXR1cm4gY29udHJvbGxlci0+bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCk7Ci19Ci0K
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50
V2l0aElkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoZmFsc2UpOwotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgp
ID4gMiAmJiBhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSAmJiBhcmd1bWVudHNbMV0uaXNOdW1iZXIo
KSAmJiBhcmd1bWVudHNbMl0uaXNTdHJpbmcoKSkgewotICAgICAgICBXZWJTdHJpbmcgYW5pbWF0
aW9uTmFtZSA9IGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMF0pOwotICAgICAgICBk
b3VibGUgdGltZSA9IGFyZ3VtZW50c1sxXS50b0RvdWJsZSgpOwotICAgICAgICBXZWJTdHJpbmcg
ZWxlbWVudElkID0gY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1syXSk7Ci0gICAgICAg
IHJlc3VsdC0+c2V0KHBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKGFuaW1hdGlv
bk5hbWUsIHRpbWUsIGVsZW1lbnRJZCkpOwotICAgIH0KLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0
LT5zZXQoZmFsc2UpOwotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMiAmJiBhcmd1bWVudHNb
MF0uaXNTdHJpbmcoKSAmJiBhcmd1bWVudHNbMV0uaXNOdW1iZXIoKSAmJiBhcmd1bWVudHNbMl0u
aXNTdHJpbmcoKSkgewotICAgICAgICBXZWJTdHJpbmcgcHJvcGVydHlOYW1lID0gY3BwVmFyaWFu
dFRvV2ViU3RyaW5nKGFyZ3VtZW50c1swXSk7Ci0gICAgICAgIGRvdWJsZSB0aW1lID0gYXJndW1l
bnRzWzFdLnRvRG91YmxlKCk7Ci0gICAgICAgIFdlYlN0cmluZyBlbGVtZW50SWQgPSBjcHBWYXJp
YW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzJdKTsKLSAgICAgICAgcmVzdWx0LT5zZXQocGF1c2VU
cmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKHByb3BlcnR5TmFtZSwgdGltZSwgZWxlbWVu
dElkKSk7Ci0gICAgfQotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjplbGVtZW50RG9l
c0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1
bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAh
PSAxIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkgewotICAgICAgICByZXN1bHQtPnNldChm
YWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgV2ViU3RyaW5nIGVsZW1lbnRJZCA9
IGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMF0pOwotICAgIHJlc3VsdC0+c2V0KGVs
ZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZChlbGVtZW50SWQpKTsKLX0KLQot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZW5hYmxlQXV0b1Jlc2l6ZU1vZGUoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAo
YXJndW1lbnRzLnNpemUoKSAhPSA0KSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0KGZhbHNlKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpbnQgbWluV2lkdGggPSBjcHBWYXJpYW50VG9JbnQz
Mihhcmd1bWVudHNbMF0pOwotICAgIGludCBtaW5IZWlnaHQgPSBjcHBWYXJpYW50VG9JbnQzMihh
cmd1bWVudHNbMV0pOwotICAgIFdlYktpdDo6V2ViU2l6ZSBtaW5TaXplKG1pbldpZHRoLCBtaW5I
ZWlnaHQpOwotCi0gICAgaW50IG1heFdpZHRoID0gY3BwVmFyaWFudFRvSW50MzIoYXJndW1lbnRz
WzJdKTsKLSAgICBpbnQgbWF4SGVpZ2h0ID0gY3BwVmFyaWFudFRvSW50MzIoYXJndW1lbnRzWzNd
KTsKLSAgICBXZWJLaXQ6OldlYlNpemUgbWF4U2l6ZShtYXhXaWR0aCwgbWF4SGVpZ2h0KTsKLQot
ICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+ZW5hYmxlQXV0b1Jlc2l6ZU1vZGUobWluU2l6ZSwgbWF4
U2l6ZSk7Ci0gICAgcmVzdWx0LT5zZXQodHJ1ZSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmRpc2FibGVBdXRvUmVzaXplTW9kZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3Vt
ZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9
MikgewotICAgICAgICByZXN1bHQtPnNldChmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgaW50IG5ld1dpZHRoID0gY3BwVmFyaWFudFRvSW50MzIoYXJndW1lbnRzWzBdKTsKLSAg
ICBpbnQgbmV3SGVpZ2h0ID0gY3BwVmFyaWFudFRvSW50MzIoYXJndW1lbnRzWzFdKTsKLSAgICBX
ZWJLaXQ6OldlYlNpemUgbmV3U2l6ZShuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKLQotICAgIG1fc2hl
bGwtPndlYlZpZXdIb3N0KCktPnNldFdpbmRvd1JlY3QoV2ViUmVjdCgwLCAwLCBuZXdTaXplLndp
ZHRoLCBuZXdTaXplLmhlaWdodCkpOwotICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+ZGlzYWJsZUF1
dG9SZXNpemVNb2RlKCk7Ci0gICAgbV9zaGVsbC0+d2ViVmlldygpLT5yZXNpemUobmV3U2l6ZSk7
Ci0gICAgcmVzdWx0LT5zZXQodHJ1ZSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQobnVtYmVyT2ZBY3RpdmVBbmltYXRpb25z
KCkpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNhYmxlSW1hZ2VMb2FkaW5n
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBtX3No
ZWxsLT5wcmVmZXJlbmNlcygpLT5sb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkgPSBmYWxzZTsKLSAg
ICBtX3NoZWxsLT5hcHBseVByZWZlcmVuY2VzKCk7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEljb25EYXRhYmFzZUVuYWJsZWQoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIC8vIFdlIGRv
bid0IHVzZSB0aGUgV2ViS2l0IGljb24gZGF0YWJhc2UuCi0gICAgcmVzdWx0LT5zZXROdWxsKCk7
Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNhbGxTaG91bGRDbG9zZU9uV2ViVmll
dyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVz
dWx0LT5zZXQobV9zaGVsbC0+d2ViVmlldygpLT5kaXNwYXRjaEJlZm9yZVVubG9hZEV2ZW50KCkp
OwotfQotCi0jaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpncmFudERlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50
cy5zaXplKCkgIT0gMSB8fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgcmVz
dWx0LT5zZXQoZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2lmIEVOQUJMRShOT1RJ
RklDQVRJT05TKSB8fCBFTkFCTEUoTEVHQUNZX05PVElGSUNBVElPTlMpCi0gICAgbV9zaGVsbC0+
bm90aWZpY2F0aW9uUHJlc2VudGVyKCktPmdyYW50UGVybWlzc2lvbihjcHBWYXJpYW50VG9XZWJT
dHJpbmcoYXJndW1lbnRzWzBdKSk7Ci0jZW5kaWYKLSAgICByZXN1bHQtPnNldCh0cnVlKTsKLX0K
LQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2ltdWxhdGVEZXNrdG9wTm90aWZpY2F0aW9u
Q2xpY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSAxIHx8ICFhcmd1bWVudHNbMF0uaXNT
dHJpbmcoKSkgewotICAgICAgICByZXN1bHQtPnNldChmYWxzZSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0jaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpIHx8IEVOQUJMRShMRUdBQ1lfTk9USUZJ
Q0FUSU9OUykKLSAgICBpZiAobV9zaGVsbC0+bm90aWZpY2F0aW9uUHJlc2VudGVyKCktPnNpbXVs
YXRlQ2xpY2soY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1swXSkpKQotICAgICAgICBy
ZXN1bHQtPnNldCh0cnVlKTsKLSAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgcmVzdWx0LT5zZXQo
ZmFsc2UpOwotfQotI2VuZGlmCi0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERvbWFp
blJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUo
KSAhPSAyIHx8ICFhcmd1bWVudHNbMF0uaXNCb29sKCkgfHwgIWFyZ3VtZW50c1sxXS5pc1N0cmlu
ZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zaGVsbC0+d2ViVmlldygpLT5zZXREb21haW5S
ZWxheGF0aW9uRm9yYmlkZGVuKGNwcFZhcmlhbnRUb0Jvb2woYXJndW1lbnRzWzBdKSwgY3BwVmFy
aWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1sxXSkpOwotfQotCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXREZWZlck1haW5SZXNvdXJjZURhdGFMb2FkKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5z
aXplKCkgPT0gMSkKLSAgICAgICAgbV9kZWZlck1haW5SZXNvdXJjZURhdGFMb2FkID0gY3BwVmFy
aWFudFRvQm9vbChhcmd1bWVudHNbMF0pOwotfQotCi0vLwotLy8gVW5pbXBsZW1lbnRlZCBzdHVi
cwotLy8KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcEFzV2ViQXJjaGl2ZShjb25z
dCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAg
IHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRN
YWluRnJhbWVJc0ZpcnN0UmVzcG9uZGVyKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRz
LCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBTZWxlY3Rpb25SZWN0KGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgbV9kdW1wU2Vs
ZWN0aW9uUmVjdCA9IHRydWU7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmRpc3BsYXkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBXZWJWaWV3SG9zdCogaG9zdCA9IG1fc2hl
bGwtPndlYlZpZXdIb3N0KCk7Ci0gICAgY29uc3QgV2ViS2l0OjpXZWJTaXplJiBzaXplID0gbV9z
aGVsbC0+d2ViVmlldygpLT5zaXplKCk7Ci0gICAgV2ViUmVjdCByZWN0KDAsIDAsIHNpemUud2lk
dGgsIHNpemUuaGVpZ2h0KTsKLSAgICBob3N0LT51cGRhdGVQYWludFJlY3QocmVjdCk7Ci0gICAg
aG9zdC0+cGFpbnRJbnZhbGlkYXRlZFJlZ2lvbigpOwotICAgIGhvc3QtPmRpc3BsYXlSZXBhaW50
TWFzaygpOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpkaXNwbGF5SW52YWxpZGF0ZWRSZWdpb24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBXZWJWaWV3SG9zdCogaG9zdCA9
IG1fc2hlbGwtPndlYlZpZXdIb3N0KCk7Ci0gICAgaG9zdC0+cGFpbnRJbnZhbGlkYXRlZFJlZ2lv
bigpOwotICAgIGhvc3QtPmRpc3BsYXlSZXBhaW50TWFzaygpOwotICAgIHJlc3VsdC0+c2V0TnVs
bCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjp0ZXN0UmVwYWludChjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgbV90ZXN0UmVwYWlu
dCA9IHRydWU7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnJlcGFpbnRTd2VlcEhvcml6b250YWxseShjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgbV9zd2VlcEhvcml6b250YWxseSA9IHRydWU7
Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmNsZWFyQmFja0ZvcndhcmRMaXN0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmtlZXBXZWJIaXN0b3J5KGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCAgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVs
bCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzdG9yZVdlYlNjcmlwdE9iamVj
dChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQot
ewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjphY2Nlc3NTdG9yZWRXZWJTY3JpcHRPYmplY3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1
bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0K
LQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b2JqQ0NsYXNzTmFtZU9mKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0
LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZERpc2FsbG93
ZWRVUkwoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0Q2FsbENsb3NlT25XZWJWaWV3cyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3Vt
ZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0g
ICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1
bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+
IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKSB7Ci0gICAgICAgIG1fc2hlbGwtPnByZWZlcmVu
Y2VzKCktPmphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQgPSBhcmd1bWVudHNbMF0udmFsdWUu
Ym9vbFZhbHVlOwotICAgICAgICBtX3NoZWxsLT5hcHBseVByZWZlcmVuY2VzKCk7Ci0gICAgfQot
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRYU1NBdWRpdG9yRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1
bWVudHNbMF0uaXNCb29sKCkpIHsKLSAgICAgICAgbV9zaGVsbC0+cHJlZmVyZW5jZXMoKS0+WFNT
QXVkaXRvckVuYWJsZWQgPSBhcmd1bWVudHNbMF0udmFsdWUuYm9vbFZhbHVlOwotICAgICAgICBt
X3NoZWxsLT5hcHBseVByZWZlcmVuY2VzKCk7Ci0gICAgfQotICAgIHJlc3VsdC0+c2V0TnVsbCgp
OwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0
ZWRXb3JsZEFuZFJldHVyblZhbHVlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwotICAgIFdl
YlZlY3Rvcjx2ODo6TG9jYWw8djg6OlZhbHVlPiA+IHZhbHVlczsKLSAgICBpZiAoYXJndW1lbnRz
LnNpemUoKSA+PSAyICYmIGFyZ3VtZW50c1swXS5pc051bWJlcigpICYmIGFyZ3VtZW50c1sxXS5p
c1N0cmluZygpKSB7Ci0gICAgICAgIFdlYlNjcmlwdFNvdXJjZSBzb3VyY2UoY3BwVmFyaWFudFRv
V2ViU3RyaW5nKGFyZ3VtZW50c1sxXSkpOwotICAgICAgICAvLyBUaGlzIHJlbGllcyBvbiB0aGUg
aWZyYW1lIGZvY3VzaW5nIGl0c2VsZiB3aGVuIGl0IGxvYWRzLiBUaGlzIGlzIGEgYml0Ci0gICAg
ICAgIC8vIHNrZXRjaHksIGJ1dCBpdCBzZWVtcyB0byBiZSB3aGF0IG90aGVyIHRlc3RzIGRvLgot
ICAgICAgICBtX3NoZWxsLT53ZWJWaWV3KCktPmZvY3VzZWRGcmFtZSgpLT5leGVjdXRlU2NyaXB0
SW5Jc29sYXRlZFdvcmxkKGFyZ3VtZW50c1swXS50b0ludDMyKCksICZzb3VyY2UsIDEsIDEsICZ2
YWx1ZXMpOwotICAgIH0KLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICAvLyBTaW5jZSBvbmx5
IG9uZSBzY3JpcHQgd2FzIGFkZGVkLCBvbmx5IG9uZSByZXN1bHQgaXMgZXhwZWN0ZWQKLSAgICBp
ZiAodmFsdWVzLnNpemUoKSA9PSAxICYmICF2YWx1ZXNbMF0uSXNFbXB0eSgpKSB7Ci0gICAgICAg
IHY4OjpMb2NhbDx2ODo6VmFsdWU+IHNjcmlwdFZhbHVlID0gdmFsdWVzWzBdOwotICAgICAgICAv
LyBGSVhNRTogVGhlcmUgYXJlIG1hbnkgbW9yZSB0eXBlcyB0aGF0IGNhbiBiZSBoYW5kbGVkLgot
ICAgICAgICBpZiAoc2NyaXB0VmFsdWUtPklzU3RyaW5nKCkpIHsKLSAgICAgICAgICAgIHY4OjpT
dHJpbmc6OkFzY2lpVmFsdWUgYXNjaWlWOChzY3JpcHRWYWx1ZSk7Ci0gICAgICAgICAgICByZXN1
bHQtPnNldChzdGQ6OnN0cmluZygqYXNjaWlWOCkpOwotICAgICAgICB9IGVsc2UgaWYgKHNjcmlw
dFZhbHVlLT5Jc0Jvb2xlYW4oKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0KHNjcmlwdFZhbHVl
LT5Ub0Jvb2xlYW4oKS0+VmFsdWUoKSk7Ci0gICAgICAgIGVsc2UgaWYgKHNjcmlwdFZhbHVlLT5J
c051bWJlcigpKSB7Ci0gICAgICAgICAgICBpZiAoc2NyaXB0VmFsdWUtPklzSW50MzIoKSkKLSAg
ICAgICAgICAgICAgICByZXN1bHQtPnNldChzY3JpcHRWYWx1ZS0+VG9JbnQzMigpLT5WYWx1ZSgp
KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQtPnNldChzY3JpcHRW
YWx1ZS0+VG9OdW1iZXIoKS0+VmFsdWUoKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc2NyaXB0VmFs
dWUtPklzTnVsbCgpKQotICAgICAgICAgICAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICB9Ci19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdv
cmxkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQp
Ci17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPj0gMiAmJiBhcmd1bWVudHNbMF0uaXNOdW1i
ZXIoKSAmJiBhcmd1bWVudHNbMV0uaXNTdHJpbmcoKSkgewotICAgICAgICBXZWJTY3JpcHRTb3Vy
Y2Ugc291cmNlKGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMV0pKTsKLSAgICAgICAg
Ly8gVGhpcyByZWxpZXMgb24gdGhlIGlmcmFtZSBmb2N1c2luZyBpdHNlbGYgd2hlbiBpdCBsb2Fk
cy4gVGhpcyBpcyBhIGJpdAotICAgICAgICAvLyBza2V0Y2h5LCBidXQgaXQgc2VlbXMgdG8gYmUg
d2hhdCBvdGhlciB0ZXN0cyBkby4KLSAgICAgICAgbV9zaGVsbC0+d2ViVmlldygpLT5mb2N1c2Vk
RnJhbWUoKS0+ZXhlY3V0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChhcmd1bWVudHNbMF0udG9JbnQz
MigpLCAmc291cmNlLCAxLCAxKTsKLSAgICB9Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0K
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdp
bihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQot
ewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotCi0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgIT0g
MiB8fCAhYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1sxXS5pc1N0cmluZygp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3NoZWxsLT53ZWJWaWV3KCktPmZvY3VzZWRGcmFt
ZSgpLT5zZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oCi0gICAgICAgIGFyZ3VtZW50c1sw
XS50b0ludDMyKCksCi0gICAgICAgIFdlYlNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5n
KGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMV0pKSk7Ci19Ci0KLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAg
aWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkgewotICAg
ICAgICBtX3NoZWxsLT5wcmVmZXJlbmNlcygpLT5hbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxl
VVJMcyA9IGFyZ3VtZW50c1swXS52YWx1ZS5ib29sVmFsdWU7Ci0gICAgICAgIG1fc2hlbGwtPmFw
cGx5UHJlZmVyZW5jZXMoKTsKLSAgICB9Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93RGlzcGxheU9mSW5zZWN1cmVDb250ZW50
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17
Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkK
LSAgICAgICAgbV9zaGVsbC0+d2ViUGVybWlzc2lvbnMoKS0+c2V0RGlzcGxheWluZ0luc2VjdXJl
Q29udGVudEFsbG93ZWQoYXJndW1lbnRzWzBdLnRvQm9vbGVhbigpKTsKLQotICAgIHJlc3VsdC0+
c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbGxvd0ZpbGVB
Y2Nlc3NGcm9tRmlsZVVSTHMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZh
cmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1l
bnRzWzBdLmlzQm9vbCgpKSB7Ci0gICAgICAgIG1fc2hlbGwtPnByZWZlcmVuY2VzKCktPmFsbG93
RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyA9IGFyZ3VtZW50c1swXS52YWx1ZS5ib29sVmFsdWU7Ci0g
ICAgICAgIG1fc2hlbGwtPmFwcGx5UHJlZmVyZW5jZXMoKTsKLSAgICB9Ci0gICAgcmVzdWx0LT5z
ZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93UnVubmlu
Z09mSW5zZWN1cmVDb250ZW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBW
YXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3Vt
ZW50c1swXS5pc0Jvb2woKSkKLSAgICAgICAgbV9zaGVsbC0+d2ViUGVybWlzc2lvbnMoKS0+c2V0
UnVubmluZ0luc2VjdXJlQ29udGVudEFsbG93ZWQoYXJndW1lbnRzWzBdLnZhbHVlLmJvb2xWYWx1
ZSk7Ci0KLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotLy8gTmVlZCB0aGVzZSBjb252ZXJz
aW9ucyBiZWNhdXNlIHRoZSBmb3JtYXQgb2YgdGhlIHZhbHVlIGZvciBib29sZWFucwotLy8gbWF5
IHZhcnkgLSBmb3IgZXhhbXBsZSwgb24gbWFjICIxIiBhbmQgIjAiIGFyZSB1c2VkIGZvciBib29s
ZWFuLgotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y3BwVmFyaWFudFRvQm9vbChjb25zdCBD
cHBWYXJpYW50JiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUuaXNCb29sKCkpCi0gICAgICAgIHJl
dHVybiB2YWx1ZS50b0Jvb2xlYW4oKTsKLSAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKLSAgICAg
ICAgcmV0dXJuIHZhbHVlLnRvSW50MzIoKTsKLSAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkgewot
ICAgICAgICBzdHJpbmcgdmFsdWVTdHJpbmcgPSB2YWx1ZS50b1N0cmluZygpOwotICAgICAgICBp
ZiAodmFsdWVTdHJpbmcgPT0gInRydWUiIHx8IHZhbHVlU3RyaW5nID09ICIxIikKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAodmFsdWVTdHJpbmcgPT0gImZhbHNlIiB8fCB2
YWx1ZVN0cmluZyA9PSAiMCIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IGxvZ0Vycm9yVG9Db25zb2xlKCJJbnZhbGlkIHZhbHVlLiBFeHBlY3RlZCBib29sZWFuIHZhbHVl
LiIpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotaW50MzJfdCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6Y3BwVmFyaWFudFRvSW50MzIoY29uc3QgQ3BwVmFyaWFudCYgdmFsdWUpCi17Ci0gICAgaWYg
KHZhbHVlLmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS50b0ludDMyKCk7Ci0gICAg
aWYgKHZhbHVlLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgc3RyaW5nIHN0cmluZ1NvdXJjZSA9IHZh
bHVlLnRvU3RyaW5nKCk7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHNvdXJjZSA9IHN0cmluZ1NvdXJj
ZS5kYXRhKCk7Ci0gICAgICAgIGNoYXIqIGVuZDsKLSAgICAgICAgbG9uZyBudW1iZXIgPSBzdHJ0
b2woc291cmNlLCAmZW5kLCAxMCk7Ci0gICAgICAgIGlmIChlbmQgPT0gc291cmNlICsgc3RyaW5n
U291cmNlLmxlbmd0aCgpICYmIG51bWJlciA+PSBudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWlu
KCkgJiYgbnVtYmVyIDw9IG51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkKLSAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90PihudW1iZXIpOwotICAgIH0KLSAgICBsb2dF
cnJvclRvQ29uc29sZSgiSW52YWxpZCB2YWx1ZSBmb3IgcHJlZmVyZW5jZS4gRXhwZWN0ZWQgaW50
ZWdlciB2YWx1ZS4iKTsKLSAgICByZXR1cm4gMDsKLX0KLQotV2ViU3RyaW5nIExheW91dFRlc3RD
b250cm9sbGVyOjpjcHBWYXJpYW50VG9XZWJTdHJpbmcoY29uc3QgQ3BwVmFyaWFudCYgdmFsdWUp
Ci17Ci0gICAgaWYgKCF2YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIGxvZ0Vycm9yVG9Db25z
b2xlKCJJbnZhbGlkIHZhbHVlIGZvciBwcmVmZXJlbmNlLiBFeHBlY3RlZCBzdHJpbmcgdmFsdWUu
Iik7Ci0gICAgICAgIHJldHVybiBXZWJTdHJpbmcoKTsKLSAgICB9Ci0gICAgcmV0dXJuIFdlYlN0
cmluZzo6ZnJvbVVURjgodmFsdWUudG9TdHJpbmcoKSk7Ci19Ci0KLVZlY3RvcjxXZWJTdHJpbmc+
IExheW91dFRlc3RDb250cm9sbGVyOjpjcHBWYXJpYW50VG9XZWJTdHJpbmdBcnJheShjb25zdCBD
cHBWYXJpYW50JiB2YWx1ZSkKLXsKLSAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAg
ICAgbG9nRXJyb3JUb0NvbnNvbGUoIkludmFsaWQgdmFsdWUgZm9yIHByZWZlcmVuY2UuIEV4cGVj
dGVkIG9iamVjdCB2YWx1ZS4iKTsKLSAgICAgICAgcmV0dXJuIFZlY3RvcjxXZWJTdHJpbmc+KCk7
Ci0gICAgfQotICAgIFZlY3RvcjxXZWJTdHJpbmc+IHJlc3VsdFZlY3RvcjsKLSAgICBWZWN0b3I8
c3RyaW5nPiBzdHJpbmdWZWN0b3IgPSB2YWx1ZS50b1N0cmluZ1ZlY3RvcigpOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc3RyaW5nVmVjdG9yLnNpemUoKTsgKytpKQotICAgICAgICByZXN1
bHRWZWN0b3IuYXBwZW5kKFdlYlN0cmluZzo6ZnJvbVVURjgoc3RyaW5nVmVjdG9yW2ldLmNfc3Ry
KCkpKTsKLSAgICByZXR1cm4gcmVzdWx0VmVjdG9yOwotfQotCi0vLyBTZXRzIG1hcCBiYXNlZCBv
biBzY3JpcHRGb250UGFpcnMsIGEgY29sbGFwc2VkIHZlY3RvciBvZiBwYWlycyBvZiBJU08gMTU5
MjQKLS8vIGZvdXItbGV0dGVyIHNjcmlwdCBjb2RlIGFuZCBmb250IHN1Y2ggYXM6Ci0vLyB7ICJB
cmFiIiwgIk15IEFyYWJpYyBGb250IiwgIkdyZWsiLCAiTXkgR3JlZWsgRm9udCIgfQotc3RhdGlj
IHZvaWQgc2V0Rm9udE1hcChXZWJQcmVmZXJlbmNlczo6U2NyaXB0Rm9udEZhbWlseU1hcCYgbWFw
LCBjb25zdCBWZWN0b3I8V2ViU3RyaW5nPiYgc2NyaXB0Rm9udFBhaXJzKQotewotICAgIG1hcC5j
bGVhcigpOwotICAgIHNpemVfdCBpID0gMDsKLSAgICB3aGlsZSAoaSArIDEgPCBzY3JpcHRGb250
UGFpcnMuc2l6ZSgpKSB7Ci0gICAgICAgIGNvbnN0IFdlYlN0cmluZyYgc2NyaXB0ID0gc2NyaXB0
Rm9udFBhaXJzW2krK107Ci0gICAgICAgIGNvbnN0IFdlYlN0cmluZyYgZm9udCA9IHNjcmlwdEZv
bnRQYWlyc1tpKytdOwotCi0gICAgICAgIGludDMyX3QgY29kZSA9IHVfZ2V0UHJvcGVydHlWYWx1
ZUVudW0oVUNIQVJfU0NSSVBULCBzY3JpcHQudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIGlmIChj
b2RlID49IDAgJiYgY29kZSA8IFVTQ1JJUFRfQ09ERV9MSU1JVCkKLSAgICAgICAgICAgIG1hcC5z
ZXQoc3RhdGljX2Nhc3Q8aW50Pihjb2RlKSwgZm9udCk7Ci0gICAgfQotfQotCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpvdmVycmlkZVByZWZlcmVuY2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwo
KTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSAyIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJp
bmcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3RyaW5nIGtleSA9IGFyZ3VtZW50c1swXS50
b1N0cmluZygpOwotICAgIENwcFZhcmlhbnQgdmFsdWUgPSBhcmd1bWVudHNbMV07Ci0gICAgV2Vi
UHJlZmVyZW5jZXMqIHByZWZzID0gbV9zaGVsbC0+cHJlZmVyZW5jZXMoKTsKLSAgICBpZiAoa2V5
ID09ICJXZWJLaXRTdGFuZGFyZEZvbnQiKQotICAgICAgICBwcmVmcy0+c3RhbmRhcmRGb250RmFt
aWx5ID0gY3BwVmFyaWFudFRvV2ViU3RyaW5nKHZhbHVlKTsKLSAgICBlbHNlIGlmIChrZXkgPT0g
IldlYktpdEZpeGVkRm9udCIpCi0gICAgICAgIHByZWZzLT5maXhlZEZvbnRGYW1pbHkgPSBjcHBW
YXJpYW50VG9XZWJTdHJpbmcodmFsdWUpOwotICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0U2Vy
aWZGb250IikKLSAgICAgICAgcHJlZnMtPnNlcmlmRm9udEZhbWlseSA9IGNwcFZhcmlhbnRUb1dl
YlN0cmluZyh2YWx1ZSk7Ci0gICAgZWxzZSBpZiAoa2V5ID09ICJXZWJLaXRTYW5zU2VyaWZGb250
IikKLSAgICAgICAgcHJlZnMtPnNhbnNTZXJpZkZvbnRGYW1pbHkgPSBjcHBWYXJpYW50VG9XZWJT
dHJpbmcodmFsdWUpOwotICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0Q3Vyc2l2ZUZvbnQiKQot
ICAgICAgICBwcmVmcy0+Y3Vyc2l2ZUZvbnRGYW1pbHkgPSBjcHBWYXJpYW50VG9XZWJTdHJpbmco
dmFsdWUpOwotICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0RmFudGFzeUZvbnQiKQotICAgICAg
ICBwcmVmcy0+ZmFudGFzeUZvbnRGYW1pbHkgPSBjcHBWYXJpYW50VG9XZWJTdHJpbmcodmFsdWUp
OwotICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0U3RhbmRhcmRGb250TWFwIikKLSAgICAgICAg
c2V0Rm9udE1hcChwcmVmcy0+c3RhbmRhcmRGb250TWFwLCBjcHBWYXJpYW50VG9XZWJTdHJpbmdB
cnJheSh2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0Rml4ZWRGb250TWFwIikK
LSAgICAgICAgc2V0Rm9udE1hcChwcmVmcy0+Zml4ZWRGb250TWFwLCBjcHBWYXJpYW50VG9XZWJT
dHJpbmdBcnJheSh2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0U2VyaWZGb250
TWFwIikKLSAgICAgICAgc2V0Rm9udE1hcChwcmVmcy0+c2VyaWZGb250TWFwLCBjcHBWYXJpYW50
VG9XZWJTdHJpbmdBcnJheSh2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0U2Fu
c1NlcmlmRm9udE1hcCIpCi0gICAgICAgIHNldEZvbnRNYXAocHJlZnMtPnNhbnNTZXJpZkZvbnRN
YXAsIGNwcFZhcmlhbnRUb1dlYlN0cmluZ0FycmF5KHZhbHVlKSk7Ci0gICAgZWxzZSBpZiAoa2V5
ID09ICJXZWJLaXRDdXJzaXZlRm9udE1hcCIpCi0gICAgICAgIHNldEZvbnRNYXAocHJlZnMtPmN1
cnNpdmVGb250TWFwLCBjcHBWYXJpYW50VG9XZWJTdHJpbmdBcnJheSh2YWx1ZSkpOwotICAgIGVs
c2UgaWYgKGtleSA9PSAiV2ViS2l0RmFudGFzeUZvbnRNYXAiKQotICAgICAgICBzZXRGb250TWFw
KHByZWZzLT5mYW50YXN5Rm9udE1hcCwgY3BwVmFyaWFudFRvV2ViU3RyaW5nQXJyYXkodmFsdWUp
KTsKLSAgICBlbHNlIGlmIChrZXkgPT0gIldlYktpdERlZmF1bHRGb250U2l6ZSIpCi0gICAgICAg
IHByZWZzLT5kZWZhdWx0Rm9udFNpemUgPSBjcHBWYXJpYW50VG9JbnQzMih2YWx1ZSk7Ci0gICAg
ZWxzZSBpZiAoa2V5ID09ICJXZWJLaXREZWZhdWx0Rml4ZWRGb250U2l6ZSIpCi0gICAgICAgIHBy
ZWZzLT5kZWZhdWx0Rml4ZWRGb250U2l6ZSA9IGNwcFZhcmlhbnRUb0ludDMyKHZhbHVlKTsKLSAg
ICBlbHNlIGlmIChrZXkgPT0gIldlYktpdE1pbmltdW1Gb250U2l6ZSIpCi0gICAgICAgIHByZWZz
LT5taW5pbXVtRm9udFNpemUgPSBjcHBWYXJpYW50VG9JbnQzMih2YWx1ZSk7Ci0gICAgZWxzZSBp
ZiAoa2V5ID09ICJXZWJLaXRNaW5pbXVtTG9naWNhbEZvbnRTaXplIikKLSAgICAgICAgcHJlZnMt
Pm1pbmltdW1Mb2dpY2FsRm9udFNpemUgPSBjcHBWYXJpYW50VG9JbnQzMih2YWx1ZSk7Ci0gICAg
ZWxzZSBpZiAoa2V5ID09ICJXZWJLaXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZSIpCi0gICAgICAg
IHByZWZzLT5kZWZhdWx0VGV4dEVuY29kaW5nTmFtZSA9IGNwcFZhcmlhbnRUb1dlYlN0cmluZyh2
YWx1ZSk7Ci0gICAgZWxzZSBpZiAoa2V5ID09ICJXZWJLaXRKYXZhU2NyaXB0RW5hYmxlZCIpCi0g
ICAgICAgIHByZWZzLT5qYXZhU2NyaXB0RW5hYmxlZCA9IGNwcFZhcmlhbnRUb0Jvb2wodmFsdWUp
OwotICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0V2ViU2VjdXJpdHlFbmFibGVkIikKLSAgICAg
ICAgcHJlZnMtPndlYlNlY3VyaXR5RW5hYmxlZCA9IGNwcFZhcmlhbnRUb0Jvb2wodmFsdWUpOwot
ICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0SmF2YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0b21h
dGljYWxseSIpCi0gICAgICAgIHByZWZzLT5qYXZhU2NyaXB0Q2FuT3BlbldpbmRvd3NBdXRvbWF0
aWNhbGx5ID0gY3BwVmFyaWFudFRvQm9vbCh2YWx1ZSk7Ci0gICAgZWxzZSBpZiAoa2V5ID09ICJX
ZWJLaXREaXNwbGF5SW1hZ2VzS2V5IikKLSAgICAgICAgcHJlZnMtPmxvYWRzSW1hZ2VzQXV0b21h
dGljYWxseSA9IGNwcFZhcmlhbnRUb0Jvb2wodmFsdWUpOwotICAgIGVsc2UgaWYgKGtleSA9PSAi
V2ViS2l0UGx1Z2luc0VuYWJsZWQiKQotICAgICAgICBwcmVmcy0+cGx1Z2luc0VuYWJsZWQgPSBj
cHBWYXJpYW50VG9Cb29sKHZhbHVlKTsKLSAgICBlbHNlIGlmIChrZXkgPT0gIldlYktpdERPTVBh
c3RlQWxsb3dlZFByZWZlcmVuY2VLZXkiKQotICAgICAgICBwcmVmcy0+RE9NUGFzdGVBbGxvd2Vk
ID0gY3BwVmFyaWFudFRvQm9vbCh2YWx1ZSk7Ci0gICAgZWxzZSBpZiAoa2V5ID09ICJXZWJLaXRE
ZXZlbG9wZXJFeHRyYXNFbmFibGVkUHJlZmVyZW5jZUtleSIpCi0gICAgICAgIHByZWZzLT5kZXZl
bG9wZXJFeHRyYXNFbmFibGVkID0gY3BwVmFyaWFudFRvQm9vbCh2YWx1ZSk7Ci0gICAgZWxzZSBp
ZiAoa2V5ID09ICJXZWJLaXRTaHJpbmtzU3RhbmRhbG9uZUltYWdlc1RvRml0IikKLSAgICAgICAg
cHJlZnMtPnNocmlua3NTdGFuZGFsb25lSW1hZ2VzVG9GaXQgPSBjcHBWYXJpYW50VG9Cb29sKHZh
bHVlKTsKLSAgICBlbHNlIGlmIChrZXkgPT0gIldlYktpdFRleHRBcmVhc0FyZVJlc2l6YWJsZSIp
Ci0gICAgICAgIHByZWZzLT50ZXh0QXJlYXNBcmVSZXNpemFibGUgPSBjcHBWYXJpYW50VG9Cb29s
KHZhbHVlKTsKLSAgICBlbHNlIGlmIChrZXkgPT0gIldlYktpdEphdmFFbmFibGVkIikKLSAgICAg
ICAgcHJlZnMtPmphdmFFbmFibGVkID0gY3BwVmFyaWFudFRvQm9vbCh2YWx1ZSk7Ci0gICAgZWxz
ZSBpZiAoa2V5ID09ICJXZWJLaXRVc2VzUGFnZUNhY2hlUHJlZmVyZW5jZUtleSIpCi0gICAgICAg
IHByZWZzLT51c2VzUGFnZUNhY2hlID0gY3BwVmFyaWFudFRvQm9vbCh2YWx1ZSk7Ci0gICAgZWxz
ZSBpZiAoa2V5ID09ICJXZWJLaXRQYWdlQ2FjaGVTdXBwb3J0c1BsdWdpbnNQcmVmZXJlbmNlS2V5
IikKLSAgICAgICAgcHJlZnMtPnBhZ2VDYWNoZVN1cHBvcnRzUGx1Z2lucyA9IGNwcFZhcmlhbnRU
b0Jvb2wodmFsdWUpOwotICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0SmF2YVNjcmlwdENhbkFj
Y2Vzc0NsaXBib2FyZCIpCi0gICAgICAgIHByZWZzLT5qYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJv
YXJkID0gY3BwVmFyaWFudFRvQm9vbCh2YWx1ZSk7Ci0gICAgZWxzZSBpZiAoa2V5ID09ICJXZWJL
aXRYU1NBdWRpdG9yRW5hYmxlZCIpCi0gICAgICAgIHByZWZzLT5YU1NBdWRpdG9yRW5hYmxlZCA9
IGNwcFZhcmlhbnRUb0Jvb2wodmFsdWUpOwotICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0TG9j
YWxTdG9yYWdlRW5hYmxlZFByZWZlcmVuY2VLZXkiKQotICAgICAgICBwcmVmcy0+bG9jYWxTdG9y
YWdlRW5hYmxlZCA9IGNwcFZhcmlhbnRUb0Jvb2wodmFsdWUpOwotICAgIGVsc2UgaWYgKGtleSA9
PSAiV2ViS2l0T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkIikKLSAgICAgICAgcHJl
ZnMtPm9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCA9IGNwcFZhcmlhbnRUb0Jvb2wo
dmFsdWUpOwotICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0VGFiVG9MaW5rc1ByZWZlcmVuY2VL
ZXkiKQotICAgICAgICBwcmVmcy0+dGFic1RvTGlua3MgPSBjcHBWYXJpYW50VG9Cb29sKHZhbHVl
KTsKLSAgICBlbHNlIGlmIChrZXkgPT0gIldlYktpdFdlYkdMRW5hYmxlZCIpCi0gICAgICAgIHBy
ZWZzLT5leHBlcmltZW50YWxXZWJHTEVuYWJsZWQgPSBjcHBWYXJpYW50VG9Cb29sKHZhbHVlKTsK
LSAgICBlbHNlIGlmIChrZXkgPT0gIldlYktpdENTU1JlZ2lvbnNFbmFibGVkIikKLSAgICAgICAg
cHJlZnMtPmV4cGVyaW1lbnRhbENTU1JlZ2lvbnNFbmFibGVkID0gY3BwVmFyaWFudFRvQm9vbCh2
YWx1ZSk7Ci0gICAgZWxzZSBpZiAoa2V5ID09ICJXZWJLaXRDU1NHcmlkTGF5b3V0RW5hYmxlZCIp
Ci0gICAgICAgIHByZWZzLT5leHBlcmltZW50YWxDU1NHcmlkTGF5b3V0RW5hYmxlZCA9IGNwcFZh
cmlhbnRUb0Jvb2wodmFsdWUpOwotICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0SHlwZXJsaW5r
QXVkaXRpbmdFbmFibGVkIikKLSAgICAgICAgcHJlZnMtPmh5cGVybGlua0F1ZGl0aW5nRW5hYmxl
ZCA9IGNwcFZhcmlhbnRUb0Jvb2wodmFsdWUpOwotICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0
RW5hYmxlQ2FyZXRCcm93c2luZyIpCi0gICAgICAgIHByZWZzLT5jYXJldEJyb3dzaW5nRW5hYmxl
ZCA9IGNwcFZhcmlhbnRUb0Jvb2wodmFsdWUpOwotICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0
QWxsb3dEaXNwbGF5aW5nSW5zZWN1cmVDb250ZW50IikKLSAgICAgICAgcHJlZnMtPmFsbG93RGlz
cGxheU9mSW5zZWN1cmVDb250ZW50ID0gY3BwVmFyaWFudFRvQm9vbCh2YWx1ZSk7Ci0gICAgZWxz
ZSBpZiAoa2V5ID09ICJXZWJLaXRBbGxvd1J1bm5pbmdJbnNlY3VyZUNvbnRlbnQiKQotICAgICAg
ICBwcmVmcy0+YWxsb3dSdW5uaW5nT2ZJbnNlY3VyZUNvbnRlbnQgPSBjcHBWYXJpYW50VG9Cb29s
KHZhbHVlKTsKLSAgICBlbHNlIGlmIChrZXkgPT0gIldlYktpdENTU0N1c3RvbUZpbHRlckVuYWJs
ZWQiKQotICAgICAgICBwcmVmcy0+Y3NzQ3VzdG9tRmlsdGVyRW5hYmxlZCA9IGNwcFZhcmlhbnRU
b0Jvb2wodmFsdWUpOwotICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0V2ViQXVkaW9FbmFibGVk
IikgewotICAgICAgICBBU1NFUlQoY3BwVmFyaWFudFRvQm9vbCh2YWx1ZSkpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIHN0cmluZyBtZXNzYWdlKCJJbnZhbGlkIG5hbWUgZm9yIHByZWZlcmVuY2U6
ICIpOwotICAgICAgICBtZXNzYWdlLmFwcGVuZChrZXkpOwotICAgICAgICBsb2dFcnJvclRvQ29u
c29sZShtZXNzYWdlKTsKLSAgICB9Ci0gICAgbV9zaGVsbC0+YXBwbHlQcmVmZXJlbmNlcygpOwot
fQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpmYWxsYmFja01ldGhvZChjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcHJpbnRmKCJDT05TT0xF
IE1FU1NBR0U6IEphdmFTY3JpcHQgRVJST1I6IHVua25vd24gbWV0aG9kIGNhbGxlZCBvbiBMYXlv
dXRUZXN0Q29udHJvbGxlclxuIik7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAg
cmVzdWx0LT5zZXROdWxsKCk7Ci0KLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSA0IHx8ICFh
cmd1bWVudHNbMF0uaXNTdHJpbmcoKSB8fCAhYXJndW1lbnRzWzFdLmlzU3RyaW5nKCkKLSAgICAg
ICAgfHwgIWFyZ3VtZW50c1syXS5pc1N0cmluZygpIHx8ICFhcmd1bWVudHNbM10uaXNCb29sKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFdlYktpdDo6V2ViVVJMIHVybChHVVJMKGFyZ3VtZW50
c1swXS50b1N0cmluZygpKSk7Ci0gICAgaWYgKCF1cmwuaXNWYWxpZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBXZWJTZWN1cml0eVBvbGljeTo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50
cnkoCi0gICAgICAgIHVybCwKLSAgICAgICAgY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50
c1sxXSksCi0gICAgICAgIGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMl0pLAotICAg
ICAgICBhcmd1bWVudHNbM10udG9Cb29sZWFuKCkpOwotfQotCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShjb25zdCBDcHBBcmd1bWVu
dExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0
TnVsbCgpOwotCi0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgIT0gNCB8fCAhYXJndW1lbnRzWzBd
LmlzU3RyaW5nKCkgfHwgIWFyZ3VtZW50c1sxXS5pc1N0cmluZygpCi0gICAgICAgIHx8ICFhcmd1
bWVudHNbMl0uaXNTdHJpbmcoKSB8fCAhYXJndW1lbnRzWzNdLmlzQm9vbCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBXZWJLaXQ6OldlYlVSTCB1cmwoR1VSTChhcmd1bWVudHNbMF0udG9TdHJp
bmcoKSkpOwotICAgIGlmICghdXJsLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
V2ViU2VjdXJpdHlQb2xpY3k6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KAotICAg
ICAgICB1cmwsCi0gICAgICAgIGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMV0pLAot
ICAgICAgICBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzJdKSwKLSAgICAgICAgYXJn
dW1lbnRzWzNdLnRvQm9vbGVhbigpKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
Y2xlYXJBbGxEYXRhYmFzZXMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZh
cmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICB3ZWJraXRfc3Vw
cG9ydDo6Q2xlYXJBbGxEYXRhYmFzZXMoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0RGF0YWJhc2VRdW90YShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIGlmICgoYXJn
dW1lbnRzLnNpemUoKSA+PSAxKSAmJiBhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSkKLSAgICAgICAg
d2Via2l0X3N1cHBvcnQ6OlNldERhdGFiYXNlUXVvdGEoYXJndW1lbnRzWzBdLnRvSW50MzIoKSk7
Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBPU0lYTG9jYWxlKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVz
dWx0LT5zZXROdWxsKCk7Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPT0gMSAmJiBhcmd1bWVu
dHNbMF0uaXNTdHJpbmcoKSkKLSAgICAgICAgc2V0bG9jYWxlKExDX0FMTCwgYXJndW1lbnRzWzBd
LnRvU3RyaW5nKCkuY19zdHIoKSk7Ci19Ci0KLS8vIFBhcnNlIGEgc2luZ2xlIGFyZ3VtZW50LiBU
aGUgbWV0aG9kIHJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBhbiBhcmd1bWVudCB0aGF0Ci0vLyBp
cyBhIG51bWJlciBvciBpZiB0aGVyZSBpcyBubyBhcmd1bWVudCBhdCBhbGwuIEl0IHJldHVybnMg
ZmFsc2Ugb25seSBpZiB0aGVyZQotLy8gaXMgc29tZSBhcmd1bWVudCB0aGF0IGlzIG5vdCBhIG51
bWJlci4gVGhlIHZhbHVlIHBhcmFtZXRlciBpcyBmaWxsZWQgd2l0aCB0aGUKLS8vIHBhcnNlZCBu
dW1iZXIsIG9yIGdpdmVuIHRoZSBkZWZhdWx0IGlmIHRoZXJlIGlzIG5vIGFyZ3VtZW50Lgotc3Rh
dGljIGJvb2wgcGFyc2VDcHBBcmd1bWVudEludDMyKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
dW1lbnRzLCBpbnQgYXJnSW5kZXgsIGludCogdmFsdWUsIGludCBkZWZhdWx0VmFsdWUpCi17Ci0g
ICAgaWYgKHN0YXRpY19jYXN0PGludD4oYXJndW1lbnRzLnNpemUoKSkgPiBhcmdJbmRleCkgewot
ICAgICAgICBpZiAoIWFyZ3VtZW50c1thcmdJbmRleF0uaXNOdW1iZXIoKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgKnZhbHVlID0gYXJndW1lbnRzW2FyZ0luZGV4XS50b0lu
dDMyKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAqdmFsdWUgPSBkZWZhdWx0
VmFsdWU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIHBhcnNlUGFnZVNpemVQ
YXJhbWV0ZXJzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFyZ09mZnNldCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCogcGFnZVdpZHRoSW5QaXhlbHMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHBhZ2VIZWlnaHRJblBpeGVscykKLXsKLSAgICAv
LyBXZWJLaXQgaXMgdXNpbmcgdGhlIHdpbmRvdyB3aWR0aC9oZWlnaHQgb2YgRHVtcFJlbmRlclRy
ZWUgYXMgdGhlCi0gICAgLy8gZGVmYXVsdCB2YWx1ZSBvZiB0aGUgcGFnZSBzaXplLgotICAgIC8v
IEZJWE1FOiBzaGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMgd2l0aCBvdGhlciBwb3J0cy4KLSAgICBp
bnQgYXJnQ291bnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGFyZ3VtZW50cy5zaXplKCkpIC0gYXJnT2Zm
c2V0OwotICAgIGlmIChhcmdDb3VudCAmJiBhcmdDb3VudCAhPSAyKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKCFwYXJzZUNwcEFyZ3VtZW50SW50MzIoYXJndW1lbnRzLCBhcmdPZmZz
ZXQsIHBhZ2VXaWR0aEluUGl4ZWxzLCA4MDApCi0gICAgICAgIHx8ICFwYXJzZUNwcEFyZ3VtZW50
SW50MzIoYXJndW1lbnRzLCBhcmdPZmZzZXQgKyAxLCBwYWdlSGVpZ2h0SW5QaXhlbHMsIDYwMCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJv
b2wgcGFyc2VQYWdlTnVtYmVyKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBpbnQg
YXJnT2Zmc2V0LCBpbnQqIHBhZ2VOdW1iZXIpCi17Ci0gICAgaWYgKHN0YXRpY19jYXN0PGludD4o
YXJndW1lbnRzLnNpemUoKSkgPiBhcmdPZmZzZXQgKyAxKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKCFwYXJzZUNwcEFyZ3VtZW50SW50MzIoYXJndW1lbnRzLCBhcmdPZmZzZXQsIHBh
Z2VOdW1iZXIsIDApKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXN0YXRpYyBib29sIHBhcnNlUGFnZU51bWJlclNpemVNYXJnaW5zKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBpbnQgYXJnT2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50KiBwYWdlTnVtYmVyLCBpbnQqIHdpZHRoLCBpbnQqIGhlaWdo
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogbWFyZ2luVG9w
LCBpbnQqIG1hcmdpblJpZ2h0LCBpbnQqIG1hcmdpbkJvdHRvbSwgaW50KiBtYXJnaW5MZWZ0KQot
ewotICAgIGludCBhcmdDb3VudCA9IHN0YXRpY19jYXN0PGludD4oYXJndW1lbnRzLnNpemUoKSkg
LSBhcmdPZmZzZXQ7Ci0gICAgaWYgKGFyZ0NvdW50ICYmIGFyZ0NvdW50ICE9IDcpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXBhcnNlQ3BwQXJndW1lbnRJbnQzMihhcmd1bWVudHMs
IGFyZ09mZnNldCwgcGFnZU51bWJlciwgMCkKLSAgICAgICAgfHwgIXBhcnNlQ3BwQXJndW1lbnRJ
bnQzMihhcmd1bWVudHMsIGFyZ09mZnNldCArIDEsIHdpZHRoLCAwKQotICAgICAgICB8fCAhcGFy
c2VDcHBBcmd1bWVudEludDMyKGFyZ3VtZW50cywgYXJnT2Zmc2V0ICsgMiwgaGVpZ2h0LCAwKQot
ICAgICAgICB8fCAhcGFyc2VDcHBBcmd1bWVudEludDMyKGFyZ3VtZW50cywgYXJnT2Zmc2V0ICsg
MywgbWFyZ2luVG9wLCAwKQotICAgICAgICB8fCAhcGFyc2VDcHBBcmd1bWVudEludDMyKGFyZ3Vt
ZW50cywgYXJnT2Zmc2V0ICsgNCwgbWFyZ2luUmlnaHQsIDApCi0gICAgICAgIHx8ICFwYXJzZUNw
cEFyZ3VtZW50SW50MzIoYXJndW1lbnRzLCBhcmdPZmZzZXQgKyA1LCBtYXJnaW5Cb3R0b20sIDAp
Ci0gICAgICAgIHx8ICFwYXJzZUNwcEFyZ3VtZW50SW50MzIoYXJndW1lbnRzLCBhcmdPZmZzZXQg
KyA2LCBtYXJnaW5MZWZ0LCAwKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0
cnVlOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQcmludGluZyhjb25zdCBD
cHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHNl
dElzUHJpbnRpbmcodHJ1ZSk7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0
LT5zZXQoIiIpOwotICAgIGludCBwYWdlTnVtYmVyID0gMDsKLSAgICBpbnQgd2lkdGggPSAwOwot
ICAgIGludCBoZWlnaHQgPSAwOwotICAgIGludCBtYXJnaW5Ub3AgPSAwOwotICAgIGludCBtYXJn
aW5SaWdodCA9IDA7Ci0gICAgaW50IG1hcmdpbkJvdHRvbSA9IDA7Ci0gICAgaW50IG1hcmdpbkxl
ZnQgPSAwOwotICAgIGlmICghcGFyc2VQYWdlTnVtYmVyU2l6ZU1hcmdpbnMoYXJndW1lbnRzLCAw
LCAmcGFnZU51bWJlciwgJndpZHRoLCAmaGVpZ2h0LCAmbWFyZ2luVG9wLCAmbWFyZ2luUmlnaHQs
ICZtYXJnaW5Cb3R0b20sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbWFy
Z2luTGVmdCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYkZyYW1lKiBmcmFtZSA9IG1fc2hl
bGwtPndlYlZpZXcoKS0+bWFpbkZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0
dXJuOwotICAgIFdlYlNpemUgcGFnZVNpemUod2lkdGgsIGhlaWdodCk7Ci0gICAgZnJhbWUtPnBh
Z2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKHBhZ2VOdW1iZXIsIHBhZ2VTaXplLCBtYXJnaW5Ub3As
IG1hcmdpblJpZ2h0LCBtYXJnaW5Cb3R0b20sIG1hcmdpbkxlZnQpOwotICAgIHN0cmluZ3N0cmVh
bSByZXN1bHRTdHJpbmc7Ci0gICAgcmVzdWx0U3RyaW5nIDw8ICIoIiA8PCBwYWdlU2l6ZS53aWR0
aCA8PCAiLCAiIDw8IHBhZ2VTaXplLmhlaWdodCA8PCAiKSAiIDw8IG1hcmdpblRvcCA8PCAiICIg
PDwgbWFyZ2luUmlnaHQgPDwgIiAiCi0gICAgICAgICAgICAgICAgIDw8IG1hcmdpbkJvdHRvbSA8
PCAiICIgPDwgbWFyZ2luTGVmdDsKLSAgICByZXN1bHQtPnNldChyZXN1bHRTdHJpbmcuc3RyKCkp
OwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpoYXNDdXN0b21QYWdlU2l6ZVN0eWxl
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17
Ci0gICAgcmVzdWx0LT5zZXQoZmFsc2UpOwotICAgIGludCBwYWdlSW5kZXggPSAwOwotICAgIGlm
ICghcGFyc2VQYWdlTnVtYmVyKGFyZ3VtZW50cywgMCwgJnBhZ2VJbmRleCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBXZWJGcmFtZSogZnJhbWUgPSBtX3NoZWxsLT53ZWJWaWV3KCktPm1haW5GcmFt
ZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKLSAgICByZXN1bHQtPnNldChm
cmFtZS0+aGFzQ3VzdG9tUGFnZVNpemVTdHlsZShwYWdlSW5kZXgpKTsKLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6cGFnZVByb3BlcnR5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
dW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoIiIpOwotICAg
IGludCBwYWdlTnVtYmVyID0gMDsKLSAgICBpZiAoIXBhcnNlUGFnZU51bWJlcihhcmd1bWVudHMs
IDEsICZwYWdlTnVtYmVyKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghYXJndW1lbnRzWzBd
LmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBXZWJGcmFtZSogZnJhbWUgPSBtX3No
ZWxsLT53ZWJWaWV3KCktPm1haW5GcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJl
dHVybjsKLSAgICBXZWJTaXplIHBhZ2VTaXplKDgwMCwgODAwKTsKLSAgICBmcmFtZS0+cHJpbnRC
ZWdpbihwYWdlU2l6ZSk7Ci0gICAgcmVzdWx0LT5zZXQoZnJhbWUtPnBhZ2VQcm9wZXJ0eShjcHBW
YXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzBdKSwgcGFnZU51bWJlcikudXRmOCgpKTsKLSAg
ICBmcmFtZS0+cHJpbnRFbmQoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVt
YmVyT2ZQYWdlcyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCog
cmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIGludCBwYWdlV2lkdGhJblBp
eGVscyA9IDA7Ci0gICAgaW50IHBhZ2VIZWlnaHRJblBpeGVscyA9IDA7Ci0gICAgaWYgKCFwYXJz
ZVBhZ2VTaXplUGFyYW1ldGVycyhhcmd1bWVudHMsIDAsICZwYWdlV2lkdGhJblBpeGVscywgJnBh
Z2VIZWlnaHRJblBpeGVscykpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYkZyYW1lKiBmcmFt
ZSA9IG1fc2hlbGwtPndlYlZpZXcoKS0+bWFpbkZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIFdlYlByaW50UGFyYW1zIHByaW50UGFyYW1zKFdlYlNpemUocGFn
ZVdpZHRoSW5QaXhlbHMsIHBhZ2VIZWlnaHRJblBpeGVscykpOwotICAgIGludCBudW1iZXJPZlBh
Z2VzID0gZnJhbWUtPnByaW50QmVnaW4ocHJpbnRQYXJhbXMpOwotICAgIGZyYW1lLT5wcmludEVu
ZCgpOwotICAgIHJlc3VsdC0+c2V0KG51bWJlck9mUGFnZXMpOwotfQotCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0
cyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQot
ewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIFZlY3RvcjxXZWJWaWV3SG9zdCo+IHdpbmRv
d0xpc3QgPSBtX3NoZWxsLT53aW5kb3dMaXN0KCk7Ci0gICAgaW50IG51bWJlck9mUmVxdWVzdHMg
PSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2luZG93TGlzdC5zaXplKCk7IGkrKykK
LSAgICAgICAgbnVtYmVyT2ZSZXF1ZXN0cyArPSB3aW5kb3dMaXN0W2ldLT5nZW9sb2NhdGlvbkNs
aWVudE1vY2soKS0+bnVtYmVyT2ZQZW5kaW5nUGVybWlzc2lvblJlcXVlc3RzKCk7Ci0gICAgcmVz
dWx0LT5zZXQobnVtYmVyT2ZSZXF1ZXN0cyk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmxvZ0Vycm9yVG9Db25zb2xlKGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KQotewotICAgIG1f
c2hlbGwtPndlYlZpZXdIb3N0KCktPmRpZEFkZE1lc3NhZ2VUb0NvbnNvbGUoCi0gICAgICAgIFdl
YkNvbnNvbGVNZXNzYWdlKFdlYkNvbnNvbGVNZXNzYWdlOjpMZXZlbEVycm9yLCBXZWJTdHJpbmc6
OmZyb21VVEY4KHRleHQpKSwKLSAgICAgICAgV2ViU3RyaW5nKCksIDApOwotfQotCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZUluV2ViSW5zcGVjdG9yKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5z
ZXROdWxsKCk7Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAyIHx8ICFhcmd1bWVudHNbMF0u
aXNOdW1iZXIoKSB8fCAhYXJndW1lbnRzWzFdLmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBtX3NoZWxsLT5kcnREZXZUb29sc0FnZW50KCktPmV2YWx1YXRlSW5XZWJJbnNwZWN0b3Io
YXJndW1lbnRzWzBdLnRvSW50MzIoKSwgYXJndW1lbnRzWzFdLnRvU3RyaW5nKCkpOwotfQotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpmb3JjZVJlZFNlbGVjdGlvbkNvbG9ycyhjb25zdCBD
cHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJl
c3VsdC0+c2V0TnVsbCgpOwotICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+c2V0U2VsZWN0aW9uQ29s
b3JzKDB4ZmZlZTAwMDAsIDB4ZmYwMGVlMDAsIDB4ZmYwMDAwMDAsIDB4ZmZjMGMwYzApOwotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0KGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5z
ZXROdWxsKCk7Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAzIHx8ICFhcmd1bWVudHNbMF0u
aXNTdHJpbmcoKSB8fCAhYXJndW1lbnRzWzFdLmlzQm9vbCgpIHx8ICFhcmd1bWVudHNbMl0uaXNC
b29sKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBXZWJWaWV3OjphZGRVc2VyU2NyaXB0KAotICAg
ICAgICBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzBdKSwgV2ViVmVjdG9yPFdlYlN0
cmluZz4oKSwKLSAgICAgICAgYXJndW1lbnRzWzFdLnRvQm9vbGVhbigpID8gV2ViVmlldzo6VXNl
clNjcmlwdEluamVjdEF0RG9jdW1lbnRTdGFydCA6IFdlYlZpZXc6OlVzZXJTY3JpcHRJbmplY3RB
dERvY3VtZW50RW5kLAotICAgICAgICBhcmd1bWVudHNbMl0udG9Cb29sZWFuKCkgPyBXZWJWaWV3
OjpVc2VyQ29udGVudEluamVjdEluQWxsRnJhbWVzIDogV2ViVmlldzo6VXNlckNvbnRlbnRJbmpl
Y3RJblRvcEZyYW1lT25seSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVz
ZXJTdHlsZVNoZWV0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50
KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgaWYgKGFyZ3VtZW50cy5z
aXplKCkgPCAyIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSB8fCAhYXJndW1lbnRzWzFdLmlz
Qm9vbCgpKQotICAgICAgICByZXR1cm47Ci0gICAgV2ViVmlldzo6YWRkVXNlclN0eWxlU2hlZXQo
Ci0gICAgICAgIGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMF0pLCBXZWJWZWN0b3I8
V2ViU3RyaW5nPigpLAotICAgICAgICBhcmd1bWVudHNbMV0udG9Cb29sZWFuKCkgPyBXZWJWaWV3
OjpVc2VyQ29udGVudEluamVjdEluQWxsRnJhbWVzIDogV2ViVmlldzo6VXNlckNvbnRlbnRJbmpl
Y3RJblRvcEZyYW1lT25seSwKLSAgICAgICAgLy8gQ2hyb21pdW0gZGVmYXVsdHMgdG8gSW5qZWN0
SW5TdWJzZXF1ZW50RG9jdW1lbnRzLCBidXQgZm9yIGNvbXBhdGliaWxpdHkKLSAgICAgICAgLy8g
d2l0aCB0aGUgb3RoZXIgcG9ydHMnIERSVHMsIHdlIHVzZSBVc2VyU3R5bGVJbmplY3RJbkV4aXN0
aW5nRG9jdW1lbnRzLgotICAgICAgICBXZWJWaWV3OjpVc2VyU3R5bGVJbmplY3RJbkV4aXN0aW5n
RG9jdW1lbnRzKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0Rldmlj
ZU9yaWVudGF0aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50
KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgaWYgKGFyZ3VtZW50cy5z
aXplKCkgPCA2IHx8ICFhcmd1bWVudHNbMF0uaXNCb29sKCkgfHwgIWFyZ3VtZW50c1sxXS5pc051
bWJlcigpIHx8ICFhcmd1bWVudHNbMl0uaXNCb29sKCkgfHwgIWFyZ3VtZW50c1szXS5pc051bWJl
cigpIHx8ICFhcmd1bWVudHNbNF0uaXNCb29sKCkgfHwgIWFyZ3VtZW50c1s1XS5pc051bWJlcigp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJEZXZpY2VPcmllbnRhdGlvbiBvcmllbnRhdGlv
bjsKLSAgICBvcmllbnRhdGlvbi5zZXROdWxsKGZhbHNlKTsKLSAgICBpZiAoYXJndW1lbnRzWzBd
LnRvQm9vbGVhbigpKQotICAgICAgICBvcmllbnRhdGlvbi5zZXRBbHBoYShhcmd1bWVudHNbMV0u
dG9Eb3VibGUoKSk7Ci0gICAgaWYgKGFyZ3VtZW50c1syXS50b0Jvb2xlYW4oKSkKLSAgICAgICAg
b3JpZW50YXRpb24uc2V0QmV0YShhcmd1bWVudHNbM10udG9Eb3VibGUoKSk7Ci0gICAgaWYgKGFy
Z3VtZW50c1s0XS50b0Jvb2xlYW4oKSkKLSAgICAgICAgb3JpZW50YXRpb24uc2V0R2FtbWEoYXJn
dW1lbnRzWzVdLnRvRG91YmxlKCkpOwotCi0gICAgLy8gTm90ZSB0aGF0IHdlIG9ubHkgY2FsbCBz
ZXRPcmllbnRhdGlvbiBvbiB0aGUgbWFpbiBwYWdlJ3MgbW9jayBzaW5jZSB0aGlzIGlzIGFsbCB0
aGF0IHRoZQotICAgIC8vIHRlc3RzIHJlcXVpcmUuIElmIG5lY2Vzc2FyeSwgd2UgY291bGQgZ2V0
IGEgbGlzdCBvZiBXZWJWaWV3SG9zdHMgZnJvbSB0aGUgVGVzdFNoZWxsIGFuZAotICAgIC8vIGNh
bGwgc2V0T3JpZW50YXRpb24gb24gZWFjaCBEZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2suCi0g
ICAgbV9zaGVsbC0+d2ViVmlld0hvc3QoKS0+ZGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrKCkt
PnNldE9yaWVudGF0aW9uKG9yaWVudGF0aW9uKTsKLX0KLQotLy8gRklYTUU6IEZvciBncmVhdGVy
IHRlc3QgZmxleGliaWxpdHksIHdlIHNob3VsZCBiZSBhYmxlIHRvIHNldCBlYWNoIHBhZ2UncyBn
ZW9sb2NhdGlvbiBtb2NrIGluZGl2aWR1YWxseS4KLS8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD01MjM2OAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0R2Vv
bG9jYXRpb25QZXJtaXNzaW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBW
YXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgaWYgKGFyZ3Vt
ZW50cy5zaXplKCkgPCAxIHx8ICFhcmd1bWVudHNbMF0uaXNCb29sKCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBWZWN0b3I8V2ViVmlld0hvc3QqPiB3aW5kb3dMaXN0ID0gbV9zaGVsbC0+d2luZG93
TGlzdCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2luZG93TGlzdC5zaXplKCk7IGkr
KykKLSAgICAgICAgd2luZG93TGlzdFtpXS0+Z2VvbG9jYXRpb25DbGllbnRNb2NrKCktPnNldFBl
cm1pc3Npb24oYXJndW1lbnRzWzBdLnRvQm9vbGVhbigpKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51
bGwoKTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDMgfHwgIWFyZ3VtZW50c1swXS5pc051
bWJlcigpIHx8ICFhcmd1bWVudHNbMV0uaXNOdW1iZXIoKSB8fCAhYXJndW1lbnRzWzJdLmlzTnVt
YmVyKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBWZWN0b3I8V2ViVmlld0hvc3QqPiB3aW5kb3dM
aXN0ID0gbV9zaGVsbC0+d2luZG93TGlzdCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
d2luZG93TGlzdC5zaXplKCk7IGkrKykKLSAgICAgICAgd2luZG93TGlzdFtpXS0+Z2VvbG9jYXRp
b25DbGllbnRNb2NrKCktPnNldFBvc2l0aW9uKGFyZ3VtZW50c1swXS50b0RvdWJsZSgpLCBhcmd1
bWVudHNbMV0udG9Eb3VibGUoKSwgYXJndW1lbnRzWzJdLnRvRG91YmxlKCkpOwotfQotCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25FcnJvcihjb25zdCBDcHBB
cmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3Vs
dC0+c2V0TnVsbCgpOwotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMiB8fCAhYXJndW1lbnRz
WzBdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1sxXS5pc1N0cmluZygpKQotICAgICAgICByZXR1
cm47Ci0gICAgVmVjdG9yPFdlYlZpZXdIb3N0Kj4gd2luZG93TGlzdCA9IG1fc2hlbGwtPndpbmRv
d0xpc3QoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdpbmRvd0xpc3Quc2l6ZSgpOyBp
KyspCi0gICAgICAgIHdpbmRvd0xpc3RbaV0tPmdlb2xvY2F0aW9uQ2xpZW50TW9jaygpLT5zZXRF
cnJvcihhcmd1bWVudHNbMF0udG9JbnQzMigpLCBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1l
bnRzWzFdKSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFib3J0TW9kYWwoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAg
ICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjphZGRNb2NrU3BlZWNoSW5wdXRSZXN1bHQoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1
bHQtPnNldE51bGwoKTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDMgfHwgIWFyZ3VtZW50
c1swXS5pc1N0cmluZygpIHx8ICFhcmd1bWVudHNbMV0uaXNOdW1iZXIoKSB8fCAhYXJndW1lbnRz
WzJdLmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChNb2NrV2ViU3BlZWNo
SW5wdXRDb250cm9sbGVyKiBjb250cm9sbGVyID0gbV9zaGVsbC0+d2ViVmlld0hvc3QoKS0+c3Bl
ZWNoSW5wdXRDb250cm9sbGVyTW9jaygpKQotICAgICAgICBjb250cm9sbGVyLT5hZGRNb2NrUmVj
b2duaXRpb25SZXN1bHQoY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1swXSksIGFyZ3Vt
ZW50c1sxXS50b0RvdWJsZSgpLCBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzJdKSk7
Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tTcGVlY2hJbnB1dER1bXBS
ZWN0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQp
Ci17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAx
IHx8ICFhcmd1bWVudHNbMF0uaXNCb29sKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChN
b2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyKiBjb250cm9sbGVyID0gbV9zaGVsbC0+d2ViVmll
d0hvc3QoKS0+c3BlZWNoSW5wdXRDb250cm9sbGVyTW9jaygpKQotICAgICAgICBjb250cm9sbGVy
LT5zZXREdW1wUmVjdChhcmd1bWVudHNbMF0udmFsdWUuYm9vbFZhbHVlKTsKLX0KLSNlbmRpZgot
Ci0jaWYgRU5BQkxFKFNDUklQVEVEX1NQRUVDSCkKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmFkZE1vY2tTcGVlY2hSZWNvZ25pdGlvblJlc3VsdChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwot
ICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMiB8fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkg
fHwgIWFyZ3VtZW50c1sxXS5pc051bWJlcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
TW9ja1dlYlNwZWVjaFJlY29nbml6ZXIqIHJlY29nbml6ZXIgPSBtX3NoZWxsLT53ZWJWaWV3SG9z
dCgpLT5tb2NrU3BlZWNoUmVjb2duaXplcigpKQotICAgICAgICByZWNvZ25pemVyLT5hZGRNb2Nr
UmVzdWx0KGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMF0pLCBhcmd1bWVudHNbMV0u
dG9Eb3VibGUoKSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tTcGVl
Y2hSZWNvZ25pdGlvbkVycm9yKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBW
YXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgaWYgKGFyZ3Vt
ZW50cy5zaXplKCkgPCAyIHx8ICFhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSB8fCAhYXJndW1lbnRz
WzFdLmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChNb2NrV2ViU3BlZWNo
UmVjb2duaXplciogcmVjb2duaXplciA9IG1fc2hlbGwtPndlYlZpZXdIb3N0KCktPm1vY2tTcGVl
Y2hSZWNvZ25pemVyKCkpCi0gICAgICAgIHJlY29nbml6ZXItPnNldEVycm9yKGFyZ3VtZW50c1sw
XS50b0ludDMyKCksIGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMV0pKTsKLX0KLQot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2FzTW9ja1NwZWVjaFJlY29nbml0aW9uQWJvcnRl
ZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVz
dWx0LT5zZXQoZmFsc2UpOwotICAgIGlmIChNb2NrV2ViU3BlZWNoUmVjb2duaXplciogcmVjb2du
aXplciA9IG1fc2hlbGwtPndlYlZpZXdIb3N0KCktPm1vY2tTcGVlY2hSZWNvZ25pemVyKCkpCi0g
ICAgICAgIHJlc3VsdC0+c2V0KHJlY29nbml6ZXItPndhc0Fib3J0ZWQoKSk7Ci19Ci0jZW5kaWYK
LQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhcnRTcGVlY2hJbnB1dChjb25zdCBDcHBB
cmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3Vs
dC0+c2V0TnVsbCgpOwotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDEpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFdlYkVsZW1lbnQgZWxlbWVudDsKLSAgICBpZiAoIVdlYkJpbmRpbmdzOjpn
ZXRFbGVtZW50KGFyZ3VtZW50c1swXS52YWx1ZS5vYmplY3RWYWx1ZSwgJmVsZW1lbnQpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBXZWJJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9XZWJJbnB1dEVs
ZW1lbnQoJmVsZW1lbnQpOwotICAgIGlmICghaW5wdXQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmICghaW5wdXQtPmlzU3BlZWNoSW5wdXRFbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlucHV0LT5zdGFydFNwZWVjaElucHV0KCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmxheWVyVHJlZUFzVGV4dChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3MsIENwcFZh
cmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChtX3NoZWxsLT53ZWJWaWV3KCktPm1h
aW5GcmFtZSgpLT5sYXllclRyZWVBc1RleHQobV9zaG93RGVidWdMYXllclRyZWUpLnV0ZjgoKSk7
Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Omxvc2VDb21wb3NpdG9yQ29udGV4dChj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3MsIENwcFZhcmlhbnQqKQotewotICAgIGludCBudW1U
aW1lczsKLSAgICBpZiAoYXJncy5zaXplKCkgPT0gMSB8fCAhYXJnc1swXS5pc051bWJlcigpKQot
ICAgICAgICBudW1UaW1lcyA9IDE7Ci0gICAgZWxzZQotICAgICAgICBudW1UaW1lcyA9IGFyZ3Nb
MF0udG9JbnQzMigpOwotICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+bG9zZUNvbXBvc2l0b3JDb250
ZXh0KG51bVRpbWVzKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWFya2VyVGV4
dEZvckxpc3RJdGVtKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJncywgQ3BwVmFyaWFudCogcmVz
dWx0KQotewotICAgIFdlYkVsZW1lbnQgZWxlbWVudDsKLSAgICBpZiAoIVdlYkJpbmRpbmdzOjpn
ZXRFbGVtZW50KGFyZ3NbMF0udmFsdWUub2JqZWN0VmFsdWUsICZlbGVtZW50KSkKLSAgICAgICAg
cmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgZWxzZQotICAgICAgICByZXN1bHQtPnNldChlbGVtZW50
LmRvY3VtZW50KCkuZnJhbWUoKS0+bWFya2VyVGV4dEZvckxpc3RJdGVtKGVsZW1lbnQpLnV0Zjgo
KSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmZpbmRTdHJpbmcoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAo
YXJndW1lbnRzLnNpemUoKSA8IDEgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBXZWJGaW5kT3B0aW9ucyBmaW5kT3B0aW9uczsKLSAgICBib29sIHdy
YXBBcm91bmQgPSBmYWxzZTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+PSAyKSB7Ci0gICAg
ICAgIFZlY3RvcjxzdGQ6OnN0cmluZz4gb3B0aW9uc0FycmF5ID0gYXJndW1lbnRzWzFdLnRvU3Ry
aW5nVmVjdG9yKCk7Ci0gICAgICAgIGZpbmRPcHRpb25zLm1hdGNoQ2FzZSA9IHRydWU7Ci0KLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcHRpb25zQXJyYXkuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBvcHRpb24gPSBvcHRpb25zQXJyYXlbaV07
Ci0gICAgICAgICAgICAvLyBGSVhNRTogU3VwcG9ydCBhbGwgdGhlIG9wdGlvbnMsIHNvIHdlIGNh
biBydW4gZmluZFN0cmluZy5odG1sIHRvby4KLSAgICAgICAgICAgIGlmIChvcHRpb24gPT0gIkNh
c2VJbnNlbnNpdGl2ZSIpCi0gICAgICAgICAgICAgICAgZmluZE9wdGlvbnMubWF0Y2hDYXNlID0g
ZmFsc2U7Ci0gICAgICAgICAgICBlbHNlIGlmIChvcHRpb24gPT0gIkJhY2t3YXJkcyIpCi0gICAg
ICAgICAgICAgICAgZmluZE9wdGlvbnMuZm9yd2FyZCA9IGZhbHNlOwotICAgICAgICAgICAgZWxz
ZSBpZiAob3B0aW9uID09ICJXcmFwQXJvdW5kIikKLSAgICAgICAgICAgICAgICB3cmFwQXJvdW5k
ID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFdlYkZyYW1lKiBmcmFtZSA9IG1fc2hl
bGwtPndlYlZpZXcoKS0+bWFpbkZyYW1lKCk7Ci0gICAgY29uc3QgYm9vbCBmaW5kUmVzdWx0ID0g
ZnJhbWUtPmZpbmQoMCwgY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1swXSksIGZpbmRP
cHRpb25zLCB3cmFwQXJvdW5kLCAwKTsKLSAgICByZXN1bHQtPnNldChmaW5kUmVzdWx0KTsKLX0K
LQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAg
ICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDEgfHwgIWFy
Z3VtZW50c1swXS5pc051bWJlcigpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zaGVsbC0+d2Vi
VmlldygpLT5zZXR0aW5ncygpLT5zZXRNaW5pbXVtVGltZXJJbnRlcnZhbChhcmd1bWVudHNbMF0u
dG9Eb3VibGUoKSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dG9maWxs
ZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkK
LXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSAy
IHx8ICFhcmd1bWVudHNbMV0uaXNCb29sKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYkVs
ZW1lbnQgZWxlbWVudDsKLSAgICBpZiAoIVdlYkJpbmRpbmdzOjpnZXRFbGVtZW50KGFyZ3VtZW50
c1swXS52YWx1ZS5vYmplY3RWYWx1ZSwgJmVsZW1lbnQpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBXZWJJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9XZWJJbnB1dEVsZW1lbnQoJmVsZW1lbnQpOwot
ICAgIGlmICghaW5wdXQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlucHV0LT5zZXRBdXRvZmls
bGVkKGFyZ3VtZW50c1sxXS52YWx1ZS5ib29sVmFsdWUpOwotfQotCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRWYWx1ZUZvclVzZXIoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBp
ZiAoYXJndW1lbnRzLnNpemUoKSAhPSAyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJFbGVt
ZW50IGVsZW1lbnQ7Ci0gICAgaWYgKCFXZWJCaW5kaW5nczo6Z2V0RWxlbWVudChhcmd1bWVudHNb
MF0udmFsdWUub2JqZWN0VmFsdWUsICZlbGVtZW50KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
V2ViSW5wdXRFbGVtZW50KiBpbnB1dCA9IHRvV2ViSW5wdXRFbGVtZW50KCZlbGVtZW50KTsKLSAg
ICBpZiAoIWlucHV0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnB1dC0+c2V0VmFsdWUoY3Bw
VmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1sxXSksIHRydWUpOwotfQotCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqKQotewotICAgIC8vIE5vdCBJbXBsZW1lbnRlZAot
fQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpsb2NhbFN0b3JhZ2VEaXNrVXNhZ2VGb3JP
cmlnaW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqKQotewot
ICAgIC8vIE5vdCBJbXBsZW1lbnRlZAotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpv
cmlnaW5zV2l0aExvY2FsU3RvcmFnZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywg
Q3BwVmFyaWFudCopCi17Ci0gICAgLy8gTm90IEltcGxlbWVudGVkCi19Ci0KLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbihjb25zdCBDcHBBcmd1
bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCopCi17Ci0gICAgLy8gTm90IEltcGxlbWVu
dGVkCi19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9ic2VydmVTdG9yYWdlVHJhY2tl
ck5vdGlmaWNhdGlvbnMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopCi17Ci0g
ICAgLy8gTm90IEltcGxlbWVudGVkCi19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN5
bmNMb2NhbFN0b3JhZ2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopCi17Ci0g
ICAgLy8gTm90IEltcGxlbWVudGVkCi19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dFNob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3Vt
ZW50cy5zaXplKCkgPT0gMSAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkpCi0gICAgICAgIG1fc2hv
dWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQgPSBhcmd1bWVudHNbMF0udG9C
b29sZWFuKCk7Ci0KLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZW5hYmxlRml4ZWRMYXlvdXRNb2RlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7
Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAgMSB8fCAhYXJndW1lbnRzWzBdLmlzQm9vbCgp
KQotICAgICAgICByZXR1cm47Ci0gICAgYm9vbCBlbmFibGVGaXhlZExheW91dCA9IGFyZ3VtZW50
c1swXS50b0Jvb2xlYW4oKTsKLSAgICBtX3NoZWxsLT53ZWJWaWV3KCktPmVuYWJsZUZpeGVkTGF5
b3V0TW9kZShlbmFibGVGaXhlZExheW91dCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldEZpeGVkTGF5b3V0U2l6ZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywg
Q3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIGlmIChh
cmd1bWVudHMuc2l6ZSgpIDwgIDIgfHwgIWFyZ3VtZW50c1swXS5pc051bWJlcigpIHx8ICFhcmd1
bWVudHNbMV0uaXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGludCB3aWR0aCA9IGFy
Z3VtZW50c1swXS50b0ludDMyKCk7Ci0gICAgaW50IGhlaWdodCA9IGFyZ3VtZW50c1sxXS50b0lu
dDMyKCk7Ci0gICAgbV9zaGVsbC0+d2ViVmlldygpLT5zZXRGaXhlZExheW91dFNpemUoV2ViU2l6
ZSh3aWR0aCwgaGVpZ2h0KSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNlbGVj
dGlvbkFzTWFya3VwKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50
KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQobV9zaGVsbC0+d2ViVmlldygpLT5tYWluRnJh
bWUoKS0+c2VsZWN0aW9uQXNNYXJrdXAoKS51dGY4KCkpOwotfQotCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjp3b3JrZXJUaHJlYWRDb3VudChDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAg
cmVzdWx0LT5zZXQoc3RhdGljX2Nhc3Q8aW50PihXZWJXb3JrZXJJbmZvOjpkZWRpY2F0ZWRXb3Jr
ZXJDb3VudCgpKSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNlbmRXZWJJbnRl
bnRSZXNwb25zZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCog
cmVzdWx0KQotewotICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKLSAgICB2ODo6TG9jYWw8djg6
OkNvbnRleHQ+IGN0eCA9IG1fc2hlbGwtPndlYlZpZXcoKS0+bWFpbkZyYW1lKCktPm1haW5Xb3Js
ZFNjcmlwdENvbnRleHQoKTsKLSAgICByZXN1bHQtPnNldChtX3NoZWxsLT53ZWJWaWV3KCktPm1h
aW5GcmFtZSgpLT5zZWxlY3Rpb25Bc01hcmt1cCgpLnV0ZjgoKSk7Ci0gICAgdjg6OkNvbnRleHQ6
OlNjb3BlIGNzY29wZShjdHgpOwotCi0gICAgV2ViS2l0OjpXZWJJbnRlbnRSZXF1ZXN0KiByZXF1
ZXN0ID0gbV9zaGVsbC0+d2ViVmlld0hvc3QoKS0+Y3VycmVudEludGVudFJlcXVlc3QoKTsKLSAg
ICBpZiAocmVxdWVzdC0+aXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhcmd1
bWVudHMuc2l6ZSgpID09IDEpIHsKLSAgICAgICAgV2ViS2l0OjpXZWJDU3RyaW5nIHJlcGx5ID0g
Y3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1swXSkudXRmOCgpOwotICAgICAgICB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdjh2YWx1ZSA9IHY4OjpTdHJpbmc6Ok5ldyhyZXBseS5kYXRhKCks
IHJlcGx5Lmxlbmd0aCgpKTsKLSAgICAgICAgcmVxdWVzdC0+cG9zdFJlc3VsdChXZWJLaXQ6Oldl
YlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6c2VyaWFsaXplKHY4dmFsdWUpKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjh2YWx1ZSA9IHY4OjpTdHJpbmc6Ok5l
dygiRVJST1IiKTsKLSAgICAgICAgcmVxdWVzdC0+cG9zdEZhaWx1cmUoV2ViS2l0OjpXZWJTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OnNlcmlhbGl6ZSh2OHZhbHVlKSk7Ci0gICAgfQotICAgIHJlc3Vs
dC0+c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxpdmVyV2Vi
SW50ZW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAgMykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwotICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4g
Y3R4ID0gbV9zaGVsbC0+d2ViVmlldygpLT5tYWluRnJhbWUoKS0+bWFpbldvcmxkU2NyaXB0Q29u
dGV4dCgpOwotICAgIHJlc3VsdC0+c2V0KG1fc2hlbGwtPndlYlZpZXcoKS0+bWFpbkZyYW1lKCkt
PnNlbGVjdGlvbkFzTWFya3VwKCkudXRmOCgpKTsKLSAgICB2ODo6Q29udGV4dDo6U2NvcGUgY3Nj
b3BlKGN0eCk7Ci0KLSAgICBXZWJTdHJpbmcgYWN0aW9uID0gY3BwVmFyaWFudFRvV2ViU3RyaW5n
KGFyZ3VtZW50c1swXSk7Ci0gICAgV2ViU3RyaW5nIHR5cGUgPSBjcHBWYXJpYW50VG9XZWJTdHJp
bmcoYXJndW1lbnRzWzFdKTsKLSAgICBXZWJLaXQ6OldlYkNTdHJpbmcgZGF0YSA9IGNwcFZhcmlh
bnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMl0pLnV0ZjgoKTsKLSAgICBXZWJTZXJpYWxpemVkU2Ny
aXB0VmFsdWUgc2VyaWFsaXplZERhdGEgPSBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnNlcmlh
bGl6ZSgKLSAgICAgICAgdjg6OlN0cmluZzo6TmV3KGRhdGEuZGF0YSgpLCBkYXRhLmxlbmd0aCgp
KSk7Ci0KLSAgICBXZWJJbnRlbnQgaW50ZW50ID0gV2ViSW50ZW50OjpjcmVhdGUoYWN0aW9uLCB0
eXBlLCBzZXJpYWxpemVkRGF0YS50b1N0cmluZygpLCBXZWJWZWN0b3I8V2ViU3RyaW5nPigpLCBX
ZWJWZWN0b3I8V2ViU3RyaW5nPigpKTsKLQotICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+bWFpbkZy
YW1lKCktPmRlbGl2ZXJJbnRlbnQoaW50ZW50LCAwLCBtX2ludGVudENsaWVudC5nZXQoKSk7Ci19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRleHRTdWJwaXhlbFBvc2l0aW9uaW5n
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17
Ci0jaWYgT1MoTElOVVgpIHx8IE9TKEFORFJPSUQpCi0gICAgLy8gU2luY2UgRm9udENvbmZpZyBk
b2Vzbid0IHByb3ZpZGUgYSB2YXJpYWJsZSB0byBjb250cm9sIHN1YnBpeGVsIHBvc2l0aW9uaW5n
LCB3ZSdsbCBmYWxsIGJhY2sKLSAgICAvLyB0byBzZXR0aW5nIGl0IGdsb2JhbGx5IGZvciBhbGwg
Zm9udHMuCi0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jv
b2woKSkKLSAgICAgICAgV2ViRm9udFJlbmRlcmluZzo6c2V0U3VicGl4ZWxQb3NpdGlvbmluZyhh
cmd1bWVudHNbMF0udmFsdWUuYm9vbFZhbHVlKTsKLSNlbmRpZgotICAgIHJlc3VsdC0+c2V0TnVs
bCgpOwotfQotCi1jbGFzcyBJbnZva2VDYWxsYmFja1Rhc2sgOiBwdWJsaWMgTWV0aG9kVGFzazxM
YXlvdXRUZXN0Q29udHJvbGxlcj4gewotcHVibGljOgotICAgIEludm9rZUNhbGxiYWNrVGFzayhM
YXlvdXRUZXN0Q29udHJvbGxlciogb2JqZWN0LCBQYXNzT3duQXJyYXlQdHI8Q3BwVmFyaWFudD4g
Y2FsbGJhY2tBcmd1bWVudHMsIHVpbnQzMl90IG51bWJlck9mQXJndW1lbnRzKQotICAgICAgICA6
IE1ldGhvZFRhc2s8TGF5b3V0VGVzdENvbnRyb2xsZXI+KG9iamVjdCkKLSAgICAgICAgLCBtX2Nh
bGxiYWNrQXJndW1lbnRzKGNhbGxiYWNrQXJndW1lbnRzKQotICAgICAgICAsIG1fbnVtYmVyT2ZB
cmd1bWVudHMobnVtYmVyT2ZBcmd1bWVudHMpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwg
dm9pZCBydW5JZlZhbGlkKCkKLSAgICB7Ci0gICAgICAgIENwcFZhcmlhbnQgaW52b2tlUmVzdWx0
OwotICAgICAgICBtX2NhbGxiYWNrQXJndW1lbnRzWzBdLmludm9rZURlZmF1bHQobV9jYWxsYmFj
a0FyZ3VtZW50cy5nZXQoKSwgbV9udW1iZXJPZkFyZ3VtZW50cywgaW52b2tlUmVzdWx0KTsKLSAg
ICB9Ci0KLXByaXZhdGU6Ci0gICAgT3duQXJyYXlQdHI8Q3BwVmFyaWFudD4gbV9jYWxsYmFja0Fy
Z3VtZW50czsKLSAgICB1aW50MzJfdCBtX251bWJlck9mQXJndW1lbnRzOwotfTsKLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QmFja2luZ1NjYWxlRmFjdG9yKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3Vt
ZW50cy5zaXplKCkgPCAyIHx8ICFhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSB8fCAhYXJndW1lbnRz
WzFdLmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBmbG9hdCB2YWx1ZSA9
IGFyZ3VtZW50c1swXS52YWx1ZS5kb3VibGVWYWx1ZTsKLSAgICBtX3NoZWxsLT53ZWJWaWV3KCkt
PnNldERldmljZVNjYWxlRmFjdG9yKHZhbHVlKTsKLQotICAgIE93bkFycmF5UHRyPENwcFZhcmlh
bnQ+IGNhbGxiYWNrQXJndW1lbnRzID0gYWRvcHRBcnJheVB0cihuZXcgQ3BwVmFyaWFudFsxXSk7
Ci0gICAgY2FsbGJhY2tBcmd1bWVudHNbMF0uc2V0KGFyZ3VtZW50c1sxXSk7Ci0gICAgcmVzdWx0
LT5zZXROdWxsKCk7Ci0gICAgcG9zdFRhc2sobmV3IEludm9rZUNhbGxiYWNrVGFzayh0aGlzLCBj
YWxsYmFja0FyZ3VtZW50cy5yZWxlYXNlKCksIDEpKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0UGx1Z2luc0VuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAg
JiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKSB7Ci0gICAgICAgIG1fc2hlbGwtPnByZWZlcmVuY2Vz
KCktPnBsdWdpbnNFbmFibGVkID0gYXJndW1lbnRzWzBdLnRvQm9vbGVhbigpOwotICAgICAgICBt
X3NoZWxsLT5hcHBseVByZWZlcmVuY2VzKCk7Ci0gICAgfQotICAgIHJlc3VsdC0+c2V0TnVsbCgp
OwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZXNldFBhZ2VWaXNpYmlsaXR5KGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0g
ICAgbV9zaGVsbC0+d2ViVmlldygpLT5zZXRWaXNpYmlsaXR5U3RhdGUoV2ViUGFnZVZpc2liaWxp
dHlTdGF0ZVZpc2libGUsIHRydWUpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRQYWdlVmlzaWJpbGl0eShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFy
aWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVu
dHNbMF0uaXNTdHJpbmcoKSkgewotICAgICAgICBzdHJpbmcgbmV3VmlzaWJpbGl0eSA9IGFyZ3Vt
ZW50c1swXS50b1N0cmluZygpOwotICAgICAgICBpZiAobmV3VmlzaWJpbGl0eSA9PSAidmlzaWJs
ZSIpCi0gICAgICAgICAgICBtX3NoZWxsLT53ZWJWaWV3KCktPnNldFZpc2liaWxpdHlTdGF0ZShX
ZWJQYWdlVmlzaWJpbGl0eVN0YXRlVmlzaWJsZSwgZmFsc2UpOwotICAgICAgICBlbHNlIGlmIChu
ZXdWaXNpYmlsaXR5ID09ICJoaWRkZW4iKQotICAgICAgICAgICAgbV9zaGVsbC0+d2ViVmlldygp
LT5zZXRWaXNpYmlsaXR5U3RhdGUoV2ViUGFnZVZpc2liaWxpdHlTdGF0ZUhpZGRlbiwgZmFsc2Up
OwotICAgICAgICBlbHNlIGlmIChuZXdWaXNpYmlsaXR5ID09ICJwcmVyZW5kZXIiKQotICAgICAg
ICAgICAgbV9zaGVsbC0+d2ViVmlldygpLT5zZXRWaXNpYmlsaXR5U3RhdGUoV2ViUGFnZVZpc2li
aWxpdHlTdGF0ZVByZXJlbmRlciwgZmFsc2UpOwotICAgICAgICBlbHNlIGlmIChuZXdWaXNpYmls
aXR5ID09ICJwcmV2aWV3IikKLSAgICAgICAgICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+c2V0Vmlz
aWJpbGl0eVN0YXRlKFdlYlBhZ2VWaXNpYmlsaXR5U3RhdGVQcmV2aWV3LCBmYWxzZSk7Ci0gICAg
fQotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0
aW9uRW5hYmxlZChib29sKQotewotICAgIC8vIE5vdCBJbXBsZW1lbnRlZAotfQotCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRUZXh0RGlyZWN0aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxs
KCk7Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgIT0gMSB8fCAhYXJndW1lbnRzWzBdLmlzU3Ry
aW5nKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE1hcCBhIGRpcmVjdGlvbiBuYW1lIHRv
IGEgV2ViVGV4dERpcmVjdGlvbiB2YWx1ZS4KLSAgICBzdGQ6OnN0cmluZyBkaXJlY3Rpb25OYW1l
ID0gYXJndW1lbnRzWzBdLnRvU3RyaW5nKCk7Ci0gICAgV2ViS2l0OjpXZWJUZXh0RGlyZWN0aW9u
IGRpcmVjdGlvbjsKLSAgICBpZiAoZGlyZWN0aW9uTmFtZSA9PSAiYXV0byIpCi0gICAgICAgIGRp
cmVjdGlvbiA9IFdlYktpdDo6V2ViVGV4dERpcmVjdGlvbkRlZmF1bHQ7Ci0gICAgZWxzZSBpZiAo
ZGlyZWN0aW9uTmFtZSA9PSAicnRsIikKLSAgICAgICAgZGlyZWN0aW9uID0gV2ViS2l0OjpXZWJU
ZXh0RGlyZWN0aW9uUmlnaHRUb0xlZnQ7Ci0gICAgZWxzZSBpZiAoZGlyZWN0aW9uTmFtZSA9PSAi
bHRyIikKLSAgICAgICAgZGlyZWN0aW9uID0gV2ViS2l0OjpXZWJUZXh0RGlyZWN0aW9uTGVmdFRv
UmlnaHQ7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3NoZWxsLT53ZWJWaWV3
KCktPnNldFRleHREaXJlY3Rpb24oZGlyZWN0aW9uKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0QXVkaW9EYXRhKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0KLSAgICBpZiAo
YXJndW1lbnRzLnNpemUoKSA8IDEgfHwgIWFyZ3VtZW50c1swXS5pc09iamVjdCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBDaGVjayB0aGF0IHBhc3NlZC1pbiBvYmplY3QgaXMsIGluIGZh
Y3QsIGFuIEFycmF5QnVmZmVyVmlldy4KLSAgICBOUE9iamVjdCogbnBvYmplY3QgPSBOUFZBUklB
TlRfVE9fT0JKRUNUKGFyZ3VtZW50c1swXSk7Ci0gICAgaWYgKCFucG9iamVjdCkKLSAgICAgICAg
cmV0dXJuOwotICAgIGlmICghV2ViQmluZGluZ3M6OmdldEFycmF5QnVmZmVyVmlldyhucG9iamVj
dCwgJm1fYXVkaW9EYXRhKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2V0U2hvdWxkRHVtcEFz
QXVkaW8odHJ1ZSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEhhc0N1c3Rv
bUZ1bGxTY3JlZW5CZWhhdmlvcihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIGlmIChhcmd1
bWVudHMuc2l6ZSgpIDwgIDEgfHwgIWFyZ3VtZW50c1swXS5pc0Jvb2woKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIG1faGFzQ3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yID0gYXJndW1lbnRzWzBdLnRv
Qm9vbGVhbigpOwotfQotCi0jaWYgRU5BQkxFKFBPSU5URVJfTE9DSykKLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmRpZExvc2VQb2ludGVyTG9jayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgbV9zaGVsbC0+d2ViVmlld0hvc3QoKS0+ZGlkTG9z
ZVBvaW50ZXJMb2NrKCk7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFBvaW50ZXJMb2NrV2lsbEZhaWxBc3luY2hyb25vdXNseShjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgbV9zaGVsbC0+
d2ViVmlld0hvc3QoKS0+c2V0UG9pbnRlckxvY2tXaWxsRmFpbEFzeW5jaHJvbm91c2x5KCk7Ci0g
ICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dFBvaW50ZXJMb2NrV2lsbEZhaWxTeW5jaHJvbm91c2x5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBtX3NoZWxsLT53ZWJWaWV3SG9zdCgpLT5zZXRQ
b2ludGVyTG9ja1dpbGxGYWlsU3luY2hyb25vdXNseSgpOwotICAgIHJlc3VsdC0+c2V0TnVsbCgp
OwotfQotI2VuZGlmCi0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnRleHRTdXJyb3VuZGlu
Z05vZGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8
IDQgfHwgIWFyZ3VtZW50c1swXS5pc09iamVjdCgpIHx8ICFhcmd1bWVudHNbMV0uaXNOdW1iZXIo
KSB8fCAhYXJndW1lbnRzWzJdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1szXS5pc051bWJlcigp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJOb2RlIG5vZGU7Ci0gICAgaWYgKCFXZWJCaW5k
aW5nczo6Z2V0Tm9kZShhcmd1bWVudHNbMF0udmFsdWUub2JqZWN0VmFsdWUsICZub2RlKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG5vZGUuaXNOdWxsKCkgfHwgIW5vZGUuaXNUZXh0Tm9k
ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJQb2ludCBwb2ludChhcmd1bWVudHNbMV0u
dG9JbnQzMigpLCBhcmd1bWVudHNbMl0udG9JbnQzMigpKTsKLSAgICB1bnNpZ25lZCBtYXhMZW5n
dGggPSBhcmd1bWVudHNbM10udG9JbnQzMigpOwotCi0gICAgV2ViU3Vycm91bmRpbmdUZXh0IHN1
cnJvdW5kaW5nVGV4dDsKLSAgICBzdXJyb3VuZGluZ1RleHQuaW5pdGlhbGl6ZShub2RlLCBwb2lu
dCwgbWF4TGVuZ3RoKTsKLSAgICBpZiAoc3Vycm91bmRpbmdUZXh0LmlzTnVsbCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICByZXN1bHQtPnNldChzdXJyb3VuZGluZ1RleHQudGV4dENvbnRlbnQo
KS51dGY4KCkpOwotfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0
VGVzdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCShyZXZpc2lvbiAxMjUzMzUpCisrKyBUb29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDcyMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF3ZWwgSGFq
ZGFuIChwaGFqZGFuLmpyQGNocm9taXVtLm9yZykKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKgotICBMYXlvdXRUZXN0Q29udHJvbGxlciBjbGFz
czoKLSAgQm91bmQgdG8gYSBKYXZhU2NyaXB0IHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlciBv
YmplY3QgdXNpbmcgdGhlCi0gIENwcEJvdW5kQ2xhc3M6OmJpbmRUb0phdmFzY3JpcHQoKSwgdGhp
cyBhbGxvd3MgbGF5b3V0IHRlc3RzIHRoYXQgYXJlIHJ1biBpbgotICB0aGUgdGVzdF9zaGVsbCAo
b3IsIGluIHByaW5jaXBsZSwgYW55IHdlYiBwYWdlIGxvYWRlZCBpbnRvIGEgY2xpZW50IGFwcCBi
dWlsdAotICB3aXRoIHRoaXMgY2xhc3MpIHRvIGNvbnRyb2wgdmFyaW91cyBhc3BlY3RzIG9mIGhv
dyB0aGUgdGVzdHMgYXJlIHJ1biBhbmQgd2hhdAotICBzb3J0IG9mIG91dHB1dCB0aGV5IHByb2R1
Y2UuCi0qLwotCi0jaWZuZGVmIExheW91dFRlc3RDb250cm9sbGVyX2gKLSNkZWZpbmUgTGF5b3V0
VGVzdENvbnRyb2xsZXJfaAotCi0jaW5jbHVkZSAiVGVzdFJ1bm5lci5oIgotCi1jbGFzcyBUZXN0
U2hlbGw7Ci0KLWNsYXNzIExheW91dFRlc3RDb250cm9sbGVyIDogcHVibGljIFRlc3RSdW5uZXIg
ewotcHVibGljOgotICAgIC8vIEJ1aWxkcyB0aGUgcHJvcGVydHkgYW5kIG1ldGhvZCBsaXN0cyBu
ZWVkZWQgdG8gYmluZCB0aGlzIGNsYXNzIHRvIGEgSlMKLSAgICAvLyBvYmplY3QuCi0gICAgTGF5
b3V0VGVzdENvbnRyb2xsZXIoVGVzdFNoZWxsKik7Ci0KLSAgICB+TGF5b3V0VGVzdENvbnRyb2xs
ZXIoKTsKLQotICAgIC8vIFRoaXMgZnVuY3Rpb24gc2V0cyBhIGZsYWcgdGhhdCB0ZWxscyB0aGUg
dGVzdF9zaGVsbCB0byBkdW1wIHBhZ2VzIGFzCi0gICAgLy8gcGxhaW4gdGV4dCwgcmF0aGVyIHRo
YW4gYXMgYSB0ZXh0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSByZW5kZXJlcidzIHN0YXRlLgotICAg
IC8vIEl0IHRha2VzIGFuIG9wdGlvbmFsIGFyZ3VtZW50LCB3aGV0aGVyIHRvIGR1bXAgcGl4ZWxz
IHJlc3VsdHMgb3Igbm90LgotICAgIHZvaWQgZHVtcEFzVGV4dChjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBUaGlzIGZ1bmN0aW9uIHNob3VsZCBzZXQgYSBm
bGFnIHRoYXQgdGVsbHMgdGhlIHRlc3Rfc2hlbGwgdG8gcHJpbnQgYSBsaW5lCi0gICAgLy8gb2Yg
ZGVzY3JpcHRpdmUgdGV4dCBmb3IgZWFjaCBkYXRhYmFzZSBjb21tYW5kLiBJdCBzaG91bGQgdGFr
ZSBubwotICAgIC8vIGFyZ3VtZW50cywgYW5kIGlnbm9yZSBhbnkgdGhhdCBtYXkgYmUgcHJlc2Vu
dC4gSG93ZXZlciwgYXQgdGhlIG1vbWVudCwgd2UKLSAgICAvLyBkb24ndCBoYXZlIGFueSBEQiBm
dW5jdGlvbiB0aGF0IHByaW50cyBtZXNzYWdlcywgc28gZm9yIG5vdyB0aGlzIGZ1bmN0aW9uCi0g
ICAgLy8gZG9lc24ndCBkbyBhbnl0aGluZy4KLSAgICB2b2lkIGR1bXBEYXRhYmFzZUNhbGxiYWNr
cyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBUaGlzIGZ1
bmN0aW9uIHNldHMgYSBmbGFnIHRoYXQgdGVsbHMgdGhlIHRlc3Rfc2hlbGwgdG8gcHJpbnQgYSBs
aW5lIG9mCi0gICAgLy8gZGVzY3JpcHRpdmUgdGV4dCBmb3IgZWFjaCBlZGl0aW5nIGNvbW1hbmQu
IEl0IHRha2VzIG5vIGFyZ3VtZW50cywgYW5kCi0gICAgLy8gaWdub3JlcyBhbnkgdGhhdCBtYXkg
YmUgcHJlc2VudC4KLSAgICB2b2lkIGR1bXBFZGl0aW5nQ2FsbGJhY2tzKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIFRoaXMgZnVuY3Rpb24gc2V0cyBhIGZs
YWcgdGhhdCB0ZWxscyB0aGUgdGVzdF9zaGVsbCB0byBwcmludCBhIGxpbmUgb2YKLSAgICAvLyBk
ZXNjcmlwdGl2ZSB0ZXh0IGZvciBlYWNoIGZyYW1lIGxvYWQgY2FsbGJhY2suIEl0IHRha2VzIG5v
IGFyZ3VtZW50cywgYW5kCi0gICAgLy8gaWdub3JlcyBhbnkgdGhhdCBtYXkgYmUgcHJlc2VudC4K
LSAgICB2b2lkIGR1bXBGcmFtZUxvYWRDYWxsYmFja3MoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCopOwotCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBzZXRzIGEgZmxhZyB0aGF0IHRl
bGxzIHRoZSB0ZXN0X3NoZWxsIHRvIHByaW50IGEgbGluZSBvZgotICAgIC8vIGRlc2NyaXB0aXZl
IHRleHQgZm9yIHRoZSBwcm9ncmVzcyBmaW5pc2hlZCBjYWxsYmFjay4gSXQgdGFrZXMgbm8KLSAg
ICAvLyBhcmd1bWVudHMsIGFuZCBpZ25vcmVzIGFueSB0aGF0IG1heSBiZSBwcmVzZW50LgotICAg
IHZvaWQgZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBUaGlzIGZ1bmN0aW9uIHNldHMgYSBmbGFnIHRoYXQg
dGVsbHMgdGhlIHRlc3Rfc2hlbGwgdG8gcHJpbnQgYSBsaW5lIG9mCi0gICAgLy8gdXNlciBnZXN0
dXJlIHN0YXR1cyB0ZXh0IGZvciBzb21lIGZyYW1lIGxvYWQgY2FsbGJhY2tzLiBJdCB0YWtlcyBu
bwotICAgIC8vIGFyZ3VtZW50cywgYW5kIGlnbm9yZXMgYW55IHRoYXQgbWF5IGJlIHByZXNlbnQu
Ci0gICAgdm9pZCBkdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrcyhjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBUaGlzIGZ1bmN0aW9uIHNldHMg
YSBmbGFnIHRoYXQgdGVsbHMgdGhlIHRlc3Rfc2hlbGwgdG8gcHJpbnQgb3V0IGEgdGV4dAotICAg
IC8vIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBiYWNrL2ZvcndhcmQgbGlzdC4gSXQgaWdub3JlcyBh
bGwgYXJndW1lbnRzLgotICAgIHZvaWQgZHVtcEJhY2tGb3J3YXJkTGlzdChjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBUaGlzIGZ1bmN0aW9uIHNldHMgYSBm
bGFnIHRoYXQgdGVsbHMgdGhlIHRlc3Rfc2hlbGwgdG8gcHJpbnQgb3V0IHRoZQotICAgIC8vIHNj
cm9sbCBvZmZzZXRzIG9mIHRoZSBjaGlsZCBmcmFtZXMuIEl0IGlnbm9yZXMgYWxsLgotICAgIHZv
aWQgZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnMoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCopOwotCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBzZXRzIGEgZmxhZyB0aGF0IHRl
bGxzIHRoZSB0ZXN0X3NoZWxsIHRvIHJlY3Vyc2l2ZWx5Ci0gICAgLy8gZHVtcCBhbGwgZnJhbWVz
IGFzIHBsYWluIHRleHQgaWYgdGhlIGR1bXBBc1RleHQgZmxhZyBpcyBzZXQuCi0gICAgLy8gSXQg
dGFrZXMgbm8gYXJndW1lbnRzLCBhbmQgaWdub3JlcyBhbnkgdGhhdCBtYXkgYmUgcHJlc2VudC4K
LSAgICB2b2lkIGR1bXBDaGlsZEZyYW1lc0FzVGV4dChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7Ci0gICAgCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBzZXRzIGEgZmxhZyB0aGF0
IHRlbGxzIHRoZSB0ZXN0X3NoZWxsIHRvIGR1bXAgYSBkZXNjcmlwdGl2ZQotICAgIC8vIGxpbmUg
Zm9yIGVhY2ggcmVzb3VyY2UgbG9hZCBjYWxsYmFjay4gSXQgdGFrZXMgbm8gYXJndW1lbnRzLCBh
bmQgaWdub3JlcwotICAgIC8vIGFueSB0aGF0IG1heSBiZSBwcmVzZW50LgotICAgIHZvaWQgZHVt
cFJlc291cmNlTG9hZENhbGxiYWNrcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7ICAgIAotICAgIAotICAgIC8vIFRoaXMgZnVuY3Rpb24gc2V0cyBhIGZsYWcgdGhhdCB0ZWxs
cyB0aGUgdGVzdF9zaGVsbCB0byBkdW1wIHRoZSBNSU1FIHR5cGUKLSAgICAvLyBmb3IgZWFjaCBy
ZXNvdXJjZSB0aGF0IHdhcyBsb2FkZWQuIEl0IHRha2VzIG5vIGFyZ3VtZW50cywgYW5kIGlnbm9y
ZXMgYW55Ci0gICAgLy8gdGhhdCBtYXkgYmUgcHJlc2VudC4KLSAgICB2b2lkIGR1bXBSZXNvdXJj
ZVJlc3BvbnNlTUlNRVR5cGVzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
LQotICAgIC8vIFRoaXMgZnVuY3Rpb24gc2V0cyBhIGZsYWcgdGhhdCB0ZWxscyB0aGUgdGVzdF9z
aGVsbCB0byBkdW1wIGFsbCBjYWxscwotICAgIC8vIHRvIHdpbmRvdy5zdGF0dXMoKS4KLSAgICAv
LyBJdCB0YWtlcyBubyBhcmd1bWVudHMsIGFuZCBpZ25vcmVzIGFueSB0aGF0IG1heSBiZSBwcmVz
ZW50LgotICAgIHZvaWQgZHVtcFdpbmRvd1N0YXR1c0NoYW5nZXMoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBzZXRzIGEgZmxhZyB0
aGF0IHRlbGxzIHRoZSB0ZXN0X3NoZWxsIHRvIGR1bXAgYWxsIGNhbGxzIHRvCi0gICAgLy8gV2Vi
Vmlld0NsaWVudDo6Y3JlYXRlVmlldygpLgotICAgIC8vIEl0IHRha2VzIG5vIGFyZ3VtZW50cywg
YW5kIGlnbm9yZXMgYW55IHRoYXQgbWF5IGJlIHByZXNlbnQuCi0gICAgdm9pZCBkdW1wQ3JlYXRl
Vmlldyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBXaGVu
IGNhbGxlZCB3aXRoIGEgYm9vbGVhbiBhcmd1bWVudCwgdGhpcyBzZXRzIGEgZmxhZyB0aGF0IGNv
bnRyb2xzCi0gICAgLy8gd2hldGhlciBjb250ZW50LWVkaXRhYmxlIGVsZW1lbnRzIGFjY2VwdCBl
ZGl0aW5nIGZvY3VzIHdoZW4gYW4gZWRpdGluZwotICAgIC8vIGF0dGVtcHQgaXMgbWFkZS4gSXQg
aWdub3JlcyBhbnkgYWRkaXRpb25hbCBhcmd1bWVudHMuCi0gICAgdm9pZCBzZXRBY2NlcHRzRWRp
dGluZyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBGdW5j
dGlvbnMgZm9yIGRlYWxpbmcgd2l0aCB3aW5kb3dzLiBCeSBkZWZhdWx0IHdlIGJsb2NrIGFsbCBu
ZXcgd2luZG93cy4KLSAgICB2b2lkIHdpbmRvd0NvdW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHNldENhbk9wZW5XaW5kb3dzKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHNldENsb3NlUmVtYWluaW5nV2luZG93
c1doZW5Db21wbGV0ZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAg
ICAvLyBCeSBkZWZhdWx0LCB0ZXN0cyBlbmQgd2hlbiBwYWdlIGxvYWQgaXMgY29tcGxldGUuIFRo
ZXNlIG1ldGhvZHMgYXJlIHVzZWQKLSAgICAvLyB0byBkZWxheSB0aGUgY29tcGxldGlvbiBvZiB0
aGUgdGVzdCB1bnRpbCBub3RpZnlEb25lIGlzIGNhbGxlZC4KLSAgICB2b2lkIHdhaXRVbnRpbERv
bmUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgbm90aWZ5
RG9uZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBNZXRo
b2RzIGZvciBhZGRpbmcgYWN0aW9ucyB0byB0aGUgd29yayBxdWV1ZS4gVXNlZCBpbiBjb25qdW5j
dGlvbiB3aXRoCi0gICAgLy8gd2FpdFVudGlsRG9uZS9ub3RpZnlEb25lIGFib3ZlLgotICAgIHZv
aWQgcXVldWVCYWNrTmF2aWdhdGlvbihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7Ci0gICAgdm9pZCBxdWV1ZUZvcndhcmROYXZpZ2F0aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHF1ZXVlUmVsb2FkKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHF1ZXVlTG9hZGluZ1NjcmlwdChjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBxdWV1ZU5vbkxvYWRpbmdT
Y3JpcHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgcXVl
dWVMb2FkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHF1
ZXVlTG9hZEhUTUxTdHJpbmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwot
Ci0gICAgLy8gQWx0aG91Z2ggdGhpcyBpcyBuYW1lZCAib2JqQyIgdG8gbWF0Y2ggdGhlIE1hYyB2
ZXJzaW9uLCBpdCBhY3R1YWxseSB0ZXN0cwotICAgIC8vIHRoZSBpZGVudGl0eSBvZiBpdHMgdHdv
IGFyZ3VtZW50cyBpbiBDKysuCi0gICAgdm9pZCBvYmpDSWRlbnRpdHlJc0VxdWFsKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIENoYW5nZXMgdGhlIGNvb2tp
ZSBwb2xpY3kgZnJvbSB0aGUgZGVmYXVsdCB0byBhbGxvdyBhbGwgY29va2llcy4KLSAgICB2b2lk
IHNldEFsd2F5c0FjY2VwdENvb2tpZXMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOwotCi0gICAgLy8gQ2hhbmdlcyBhc3luY2hyb25vdXMgc3BlbGxjaGVja2luZyBmbGFnIG9u
IHRoZSBzZXR0aW5ncy4KLSAgICB2b2lkIHNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIFNob3dz
IERldlRvb2xzIHdpbmRvdy4KLSAgICB2b2lkIHNob3dXZWJJbnNwZWN0b3IoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgY2xvc2VXZWJJbnNwZWN0b3IoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gR2l2ZXMgZm9jdXMg
dG8gdGhlIHdpbmRvdy4KLSAgICB2b2lkIHNldFdpbmRvd0lzS2V5KGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIE1ldGhvZCB0aGF0IGNvbnRyb2xzIHdoZXRo
ZXIgcHJlc3NpbmcgVGFiIGtleSBjeWNsZXMgdGhyb3VnaCBwYWdlIGVsZW1lbnRzCi0gICAgLy8g
b3IgaW5zZXJ0cyBhICdcdCcgY2hhciBpbiB0ZXh0IGFyZWEKLSAgICB2b2lkIHNldFRhYktleUN5
Y2xlc1Rocm91Z2hFbGVtZW50cyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
Ci0KLSAgICAvLyBQYXNzZXMgdGhyb3VnaCB0byBXZWJQcmVmZXJlbmNlcyB3aGljaCBhbGxvd3Mg
dGhlIHVzZXIgdG8gaGF2ZSBhIGN1c3RvbQotICAgIC8vIHN0eWxlIHNoZWV0LgotICAgIHZvaWQg
c2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKLSAgICB2b2lkIHNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gUGFzc2VzIHRoaXMgcHJlZmVyZW5jZSB0
aHJvdWdoIHRvIFdlYlNldHRpbmdzLgotICAgIHZvaWQgc2V0QXV0aG9yQW5kVXNlclN0eWxlc0Vu
YWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gUHV0
cyBXZWJraXQgaW4gImRhc2hib2FyZCBjb21wYXRpYmlsaXR5IG1vZGUiLCB3aGljaCBpcyB1c2Vk
IGluIG9ic2N1cmUKLSAgICAvLyBNYWMtb25seSBjaXJjdW1zdGFuY2VzLiBJdCdzIG5vdCByZWFs
bHkgbmVjZXNzYXJ5LCBhbmQgd2lsbCBtb3N0IGxpa2VseQotICAgIC8vIG5ldmVyIGJlIHVzZWQg
YnkgQ2hyb21lLCBidXQgc29tZSBsYXlvdXQgdGVzdHMgZGVwZW5kIG9uIGl0cyBwcmVzZW5jZS4K
LSAgICB2b2lkIHNldFVzZURhc2hib2FyZENvbXBhdGliaWxpdHlNb2RlKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIHZvaWQgc2V0U2Nyb2xsYmFyUG9saWN5KGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIENhdXNlcyBuYXZp
Z2F0aW9uIGFjdGlvbnMganVzdCBwcmludG91dCB0aGUgaW50ZW5kZWQgbmF2aWdhdGlvbiBpbnN0
ZWFkCi0gICAgLy8gb2YgdGFraW5nIHlvdSB0byB0aGUgcGFnZS4gVGhpcyBpcyB1c2VkIGZvciBj
YXNlcyBsaWtlIG1haWx0bywgd2hlcmUgeW91Ci0gICAgLy8gZG9uJ3QgYWN0dWFsbHkgd2FudCB0
byBvcGVuIHRoZSBtYWlsIHByb2dyYW0uCi0gICAgdm9pZCBzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0
ZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBEZWxheXMg
Y29tcGxldGlvbiBvZiB0aGUgdGVzdCB1bnRpbCB0aGUgcG9saWN5IGRlbGVnYXRlIHJ1bnMuCi0g
ICAgdm9pZCB3YWl0Rm9yUG9saWN5RGVsZWdhdGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOwotCi0gICAgLy8gQ2F1c2VzIFdpbGxTZW5kUmVxdWVzdCB0byBjbGVhciBjZXJ0
YWluIGhlYWRlcnMuCi0gICAgdm9pZCBzZXRXaWxsU2VuZFJlcXVlc3RDbGVhckhlYWRlcihjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBDYXVzZXMgV2lsbFNl
bmRSZXF1ZXN0IHRvIGJsb2NrIHJlZGlyZWN0cy4KLSAgICB2b2lkIHNldFdpbGxTZW5kUmVxdWVz
dFJldHVybnNOdWxsT25SZWRpcmVjdChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7Ci0KLSAgICAvLyBDYXVzZXMgV2lsbFNlbmRSZXF1ZXN0IHRvIHJldHVybiBhbiBlbXB0eSBy
ZXF1ZXN0LgotICAgIHZvaWQgc2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gQ29udmVydHMgYSBVUkwgc3Rh
cnRpbmcgd2l0aCBmaWxlOi8vL3RtcC8gdG8gdGhlIGxvY2FsIG1hcHBpbmcuCi0gICAgdm9pZCBw
YXRoVG9Mb2NhbFJlc291cmNlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
LQotICAgIC8vIFNldHMgYSBib29sIHN1Y2ggdGhhdCB3aGVuIGEgZHJhZyBpcyBzdGFydGVkLCB3
ZSBmaWxsIHRoZSBkcmFnIGNsaXBib2FyZAotICAgIC8vIHdpdGggYSBmYWtlIGZpbGUgb2JqZWN0
LgotICAgIHZvaWQgYWRkRmlsZVRvUGFzdGVib2FyZE9uRHJhZyhjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBFeGVjdXRlcyBhbiBpbnRlcm5hbCBjb21tYW5k
IChzdXBlcnNldCBvZiBkb2N1bWVudC5leGVjQ29tbWFuZCgpIGNvbW1hbmRzKS4KLSAgICB2b2lk
IGV4ZWNDb21tYW5kKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAg
IC8vIENoZWNrcyBpZiBhbiBpbnRlcm5hbCBjb21tYW5kIGlzIGN1cnJlbnRseSBhdmFpbGFibGUu
Ci0gICAgdm9pZCBpc0NvbW1hbmRFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKLQotICAgIC8vIFNldCB0aGUgV2ViUHJlZmVyZW5jZSB0aGF0IGNvbnRyb2xzIHdl
YmtpdCdzIHBvcHVwIGJsb2NraW5nLgotICAgIHZvaWQgc2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gSWYgdHJ1ZSwg
Y2F1c2VzIHByb3Zpc2lvbmFsIGZyYW1lIGxvYWRzIHRvIGJlIHN0b3BwZWQgZm9yIHRoZSByZW1h
aW5kZXIgb2YKLSAgICAvLyB0aGUgdGVzdC4KLSAgICB2b2lkIHNldFN0b3BQcm92aXNpb25hbEZy
YW1lTG9hZHMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8g
RW5hYmxlIG9yIGRpc2FibGUgc21hcnQgaW5zZXJ0L2RlbGV0ZS4gVGhpcyBpcyBlbmFibGVkIGJ5
IGRlZmF1bHQuCi0gICAgdm9pZCBzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gRW5hYmxlIG9yIGRpc2FibGUg
dHJhaWxpbmcgd2hpdGVzcGFjZSBzZWxlY3Rpb24gb24gZG91YmxlIGNsaWNrLgotICAgIHZvaWQg
c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7Ci0KLSAgICB2b2lkIHBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50
V2l0aElkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHBh
dXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBlbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1l
bnRXaXRoSWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQg
ZW5hYmxlQXV0b1Jlc2l6ZU1vZGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCop
OwotICAgIHZvaWQgZGlzYWJsZUF1dG9SZXNpemVNb2RlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIG51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBkaXNhYmxlSW1hZ2VMb2Fk
aW5nKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHNldElj
b25EYXRhYmFzZUVuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwot
ICAgIHZvaWQgZHVtcFNlbGVjdGlvblJlY3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCopOwotCi0jaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCi0gICAgLy8gR3JhbnRzIHBlcm1p
c3Npb24gZm9yIGRlc2t0b3Agbm90aWZpY2F0aW9ucyB0byBhbiBvcmlnaW4KLSAgICB2b2lkIGdy
YW50RGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb24oY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCopOwotICAgIC8vIFNpbXVsYXRlcyBhIGNsaWNrIG9uIGEgZGVza3RvcCBub3Rp
ZmljYXRpb24uCi0gICAgdm9pZCBzaW11bGF0ZURlc2t0b3BOb3RpZmljYXRpb25DbGljayhjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0jZW5kaWYKLQotICAgIHZvaWQgc2V0
RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzZXREZWZlck1haW5SZXNvdXJjZURhdGFMb2Fk
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIERlYWxzIHdp
dGggV2ViIEF1ZGlvIFdBViBmaWxlIGRhdGEuCi0gICAgdm9pZCBzZXRBdWRpb0RhdGEoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIGNvbnN0IFdlYktpdDo6V2ViQXJy
YXlCdWZmZXJWaWV3JiBhdWRpb0RhdGEoKSBjb25zdCB7IHJldHVybiBtX2F1ZGlvRGF0YTsgfSAK
LQotICAgIC8vIFRoZSBmb2xsb3dpbmcgYXJlIG9ubHkgc3R1YnMuCi0gICAgLy8gRklYTUU6IElt
cGxlbWVudCBhbnkgb2YgdGhlc2UgdGhhdCBhcmUgbmVlZGVkIHRvIHBhc3MgdGhlIGxheW91dCB0
ZXN0cy4KLSAgICB2b2lkIGR1bXBBc1dlYkFyY2hpdmUoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCopOwotICAgIHZvaWQgZHVtcFRpdGxlQ2hhbmdlcyhjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzZXRNYWluRnJhbWVJc0ZpcnN0UmVzcG9u
ZGVyKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGRpc3Bs
YXkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgZGlzcGxh
eUludmFsaWRhdGVkUmVnaW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
LSAgICB2b2lkIHRlc3RSZXBhaW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
KTsKLSAgICB2b2lkIHJlcGFpbnRTd2VlcEhvcml6b250YWxseShjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBjbGVhckJhY2tGb3J3YXJkTGlzdChjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBrZWVwV2ViSGlzdG9yeShj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzdG9yZVdlYlNj
cmlwdE9iamVjdChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9p
ZCBhY2Nlc3NTdG9yZWRXZWJTY3JpcHRPYmplY3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOwotICAgIHZvaWQgb2JqQ0NsYXNzTmFtZU9mKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGFkZERpc2FsbG93ZWRVUkwoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgY2FsbFNob3VsZENsb3NlT25XZWJW
aWV3KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHNldENh
bGxDbG9zZU9uV2ViVmlld3MoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwot
ICAgIHZvaWQgc2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7Ci0KLSAgICB2b2lkIHNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9h
cmQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgc2V0WFNT
QXVkaXRvckVuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAg
IHZvaWQgb3ZlcnJpZGVQcmVmZXJlbmNlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKLSAgICB2b2lkIHNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHNldEFsbG93RGlzcGxh
eU9mSW5zZWN1cmVDb250ZW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
LSAgICB2b2lkIHNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzZXRBbGxvd1J1bm5pbmdPZkluc2VjdXJl
Q29udGVudChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICB2b2lk
IGV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgZXZhbHVhdGVTY3JpcHRJbklzb2xh
dGVkV29ybGQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQg
c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKLQotICAgIC8vIFRoZSBmYWxsYmFjayBtZXRob2QgaXMgY2FsbGVkIHdoZW4g
YSBub25leGlzdGVudCBtZXRob2QgaXMgY2FsbGVkIG9uCi0gICAgLy8gdGhlIGxheW91dCB0ZXN0
IGNvbnRyb2xsZXIgb2JqZWN0LgotICAgIC8vIEl0IGlzIHVzZWZ1bGwgdG8gY2F0Y2ggdHlwb3Mg
aW4gdGhlIEphdmFTY3JpcHQgY29kZSAoYSBmZXcgbGF5b3V0IHRlc3RzCi0gICAgLy8gZG8gaGF2
ZSB0eXBvcyBpbiB0aGVtKSBhbmQgaXQgYWxsb3dzIHRoZSBzY3JpcHQgdG8gY29udGludWUgcnVu
bmluZyBpbgotICAgIC8vIHRoYXQgY2FzZSAoYXMgdGhlIE1hYyBkb2VzKS4KLSAgICB2b2lkIGZh
bGxiYWNrTWV0aG9kKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAg
IC8vIEFsbG93cyBsYXlvdXQgdGVzdHMgdG8gbWFuYWdlIG9yaWdpbnMnIHdoaXRlbGlzdGluZy4K
LSAgICB2b2lkIGFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlz
dEVudHJ5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIENs
ZWFycyBhbGwgYXBwbGljYXRpb24gY2FjaGVzLgotICAgIHZvaWQgY2xlYXJBbGxBcHBsaWNhdGlv
bkNhY2hlcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgLy8gQ2xl
YXJzIGFuIGFwcGxpY2F0aW9uIGNhY2hlIGZvciBhbiBvcmlnaW4uCi0gICAgdm9pZCBjbGVhckFw
cGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOwotICAgIC8vIFJldHVybnMgb3JpZ2lucyB0aGF0IGhhdmUgYXBwbGljYXRpb24gY2FjaGVz
LgotICAgIHZvaWQgb3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICAvLyBTZXRzIHRoZSBhcHBsaWNhdGlvbiBjYWNoZSBx
dW90YSBmb3IgdGhlIGxvY2FsaG9zdCBvcmlnaW4uCi0gICAgdm9pZCBzZXRBcHBsaWNhdGlvbkNh
Y2hlT3JpZ2luUXVvdGEoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAg
IC8vIFJldHVybnMgZGlzayB1c2FnZSBieSBhbGwgYXBwbGljYXRpb24gY2FjaGVzIGZvciBhbiBv
cmlnaW4uCi0gICAgdm9pZCBhcHBsaWNhdGlvbkNhY2hlRGlza1VzYWdlRm9yT3JpZ2luKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIENsZWFycyBhbGwgZGF0
YWJhc2VzLgotICAgIHZvaWQgY2xlYXJBbGxEYXRhYmFzZXMoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOwotICAgIC8vIFNldHMgdGhlIGRlZmF1bHQgcXVvdGEgZm9yIGFsbCBv
cmlnaW5zCi0gICAgdm9pZCBzZXREYXRhYmFzZVF1b3RhKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKLQotICAgIC8vIENhbGxzIHNldGxvY2FsZShMQ19BTEwsIC4uLikgZm9y
IGEgc3BlY2lmaWVkIGxvY2FsZS4KLSAgICAvLyBSZXNldHMgYmV0d2VlbiB0ZXN0cy4KLSAgICB2
b2lkIHNldFBPU0lYTG9jYWxlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
LQotICAgIC8vIENhdXNlcyBsYXlvdXQgdG8gaGFwcGVuIGFzIGlmIHRhcmdldHRlZCB0byBwcmlu
dGVkIHBhZ2VzLgotICAgIHZvaWQgc2V0UHJpbnRpbmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCopOwotCi0gICAgLy8gR2V0cyB0aGUgcGFnZSBzaXplIGFuZCBtYXJnaW5zIGZv
ciBhIHByaW50ZWQgcGFnZS4KLSAgICB2b2lkIHBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIFJldHVybnMgdHJ1
ZSBpZiB0aGUgY3VycmVudCBwYWdlIGJveCBoYXMgY3VzdG9tIHBhZ2Ugc2l6ZSBzdHlsZSBmb3IK
LSAgICAvLyBwcmludGluZy4KLSAgICB2b2lkIGhhc0N1c3RvbVBhZ2VTaXplU3R5bGUoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gR2V0cyB0aGUgcGFnZS1y
ZWxhdGVkIHByb3BlcnR5IGZvciBwcmludGVkIGNvbnRlbnQKLSAgICB2b2lkIHBhZ2VQcm9wZXJ0
eShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBHZXRzIHRo
ZSBudW1iZXIgb2YgcGFnZXMgdG8gYmUgcHJpbnRlZC4KLSAgICB2b2lkIG51bWJlck9mUGFnZXMo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gR2V0cyB0aGUg
bnVtYmVyIG9mIGdlb2xvY2F0aW9uIHBlcm1pc3Npb25zIHJlcXVlc3RzIHBlbmRpbmcuCi0gICAg
dm9pZCBudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cyhjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBBbGxvd3MgbGF5b3V0IHRl
c3RzIHRvIGV4ZWMgc2NyaXB0cyBhdCBXZWJJbnNwZWN0b3Igc2lkZS4KLSAgICB2b2lkIGV2YWx1
YXRlSW5XZWJJbnNwZWN0b3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwot
Ci0gICAgLy8gRm9yY2VzIHRoZSBzZWxlY3Rpb24gY29sb3JzIGZvciB0ZXN0aW5nIHVuZGVyIExp
bnV4LgotICAgIHZvaWQgZm9yY2VSZWRTZWxlY3Rpb25Db2xvcnMoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gQWRkcyBhIHVzZXIgc2NyaXB0IG9yIHVzZXIg
c3R5bGUgc2hlZXQgdG8gYmUgaW5qZWN0ZWQgaW50byBuZXcgZG9jdW1lbnRzLgotICAgIHZvaWQg
YWRkVXNlclNjcmlwdChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAg
dm9pZCBhZGRVc2VyU3R5bGVTaGVldChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7Ci0KLSAgICAvLyBEZXZpY2VPcmllbnRhdGlvbiByZWxhdGVkIGZ1bmN0aW9ucwotICAgIHZv
aWQgc2V0TW9ja0RldmljZU9yaWVudGF0aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKLQotICAgIC8vIEdlb2xvY2F0aW9uIHJlbGF0ZWQgZnVuY3Rpb25zLgotICAgIHZv
aWQgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKLSAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvbkVy
cm9yKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIEVtcHR5
IHN0dWIgbWV0aG9kIHRvIGtlZXAgcGFyaXR5IHdpdGggb2JqZWN0IG1vZGVsIGV4cG9zZWQgYnkg
Z2xvYmFsIExheW91dFRlc3RDb250cm9sbGVyLgotICAgIHZvaWQgYWJvcnRNb2RhbChjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBTcGVlY2ggaW5wdXQgcmVs
YXRlZCBmdW5jdGlvbnMuCi0jaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKLSAgICB2b2lkIGFkZE1v
Y2tTcGVlY2hJbnB1dFJlc3VsdChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
Ci0gICAgdm9pZCBzZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVjdChjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50Kik7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoU0NSSVBURURfU1BFRUNIKQot
ICAgIHZvaWQgYWRkTW9ja1NwZWVjaFJlY29nbml0aW9uUmVzdWx0KGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHNldE1vY2tTcGVlY2hSZWNvZ25pdGlvbkVy
cm9yKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHdhc01v
Y2tTcGVlY2hSZWNvZ25pdGlvbkFib3J0ZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCopOwotI2VuZGlmCi0gICAgdm9pZCBzdGFydFNwZWVjaElucHV0KGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIHZvaWQgbGF5ZXJUcmVlQXNUZXh0KGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYgYXJncywgQ3BwVmFyaWFudCogcmVzdWx0KTsKLQotICAgIHZvaWQg
bG9zZUNvbXBvc2l0b3JDb250ZXh0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJncywgQ3BwVmFy
aWFudCogcmVzdWx0KTsKLQotICAgIHZvaWQgbWFya2VyVGV4dEZvckxpc3RJdGVtKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGZpbmRTdHJpbmcoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgdm9pZCBzZXRNaW5pbXVtVGlt
ZXJJbnRlcnZhbChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAv
LyBFeHBlY3RzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBiZSBhbiBpbnB1dCBlbGVtZW50IGFuZCB0
aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIGEgYm9vbGVhbi4KLSAgICAvLyBGb3J3YXJkcyB0aGUg
c2V0QXV0b2ZpbGxlZCgpIGNhbGwgdG8gdGhlIGVsZW1lbnQuCi0gICAgdm9pZCBzZXRBdXRvZmls
bGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIEV4cGVj
dHMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGFuIGlucHV0IGVsZW1lbnQgYW5kIHRoZSBzZWNv
bmQgYXJndW1lbnQgdG8gYmUgYSBzdHJpbmcgdmFsdWUuCi0gICAgLy8gRm9yd2FyZHMgdGhlIHNl
dFZhbHVlRm9yVXNlcigpIGNhbGwgdG8gdGhlIGVsZW1lbnQuCi0gICAgdm9pZCBzZXRWYWx1ZUZv
clVzZXIoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gTG9j
YWxTdG9yYWdlIG9yaWdpbi1yZWxhdGVkCi0gICAgdm9pZCBkZWxldGVBbGxMb2NhbFN0b3JhZ2Uo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgb3JpZ2luc1dp
dGhMb2NhbFN0b3JhZ2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAg
IHZvaWQgZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbihj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBvYnNlcnZlU3Rv
cmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKLSAgICB2b2lkIHN5bmNMb2NhbFN0b3JhZ2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCopOwotCi0gICAgLy8gV2ViUGVybWlzc2lvbkNsaWVudCByZWxhdGVkLgotICAg
IHZvaWQgc2V0SW1hZ2VzQWxsb3dlZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7Ci0gICAgdm9pZCBzZXRTY3JpcHRzQWxsb3dlZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzZXRTdG9yYWdlQWxsb3dlZChjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzZXRQbHVnaW5zQWxsb3dlZChjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBkdW1wUGVybWlzc2lvbkNs
aWVudENhbGxiYWNrcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAg
ICAvLyBFbmFibGUgb3IgZGlzYWJsZSBwbHVnaW5zLgotICAgIHZvaWQgc2V0UGx1Z2luc0VuYWJs
ZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gU3dpdGNo
IHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBwYWdlLgotICAgIHZvaWQgc2V0UGFnZVZpc2liaWxpdHko
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgcmVzZXRQYWdl
VmlzaWJpbGl0eShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAv
LyBDaGFuZ2VzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGZvY3VzZWQgZWxlbWVudC4KLSAgICB2b2lk
IHNldFRleHREaXJlY3Rpb24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwot
Ci0gICAgdm9pZCBzZXRTaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZChj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICB2b2lkIGVuYWJsZUZp
eGVkTGF5b3V0TW9kZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAg
dm9pZCBzZXRGaXhlZExheW91dFNpemUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOwotCi0gICAgdm9pZCBzZWxlY3Rpb25Bc01hcmt1cChjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBTd2l0Y2ggdGhlIGxpbmsgZGV0ZWN0aW9uLgotICAg
IHZvaWQgc2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoYm9vbCk7Ci0KLSNpZiBFTkFC
TEUoUE9JTlRFUl9MT0NLKQotICAgIHZvaWQgZGlkTG9zZVBvaW50ZXJMb2NrKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHNldFBvaW50ZXJMb2NrV2lsbEZh
aWxTeW5jaHJvbm91c2x5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAg
ICB2b2lkIHNldFBvaW50ZXJMb2NrV2lsbEZhaWxBc3luY2hyb25vdXNseShjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0jZW5kaWYKLQotICAgIHZvaWQgd29ya2VyVGhyZWFk
Q291bnQoQ3BwVmFyaWFudCopOwotCi0gICAgLy8gRXhwZWN0cyBvbmUgc3RyaW5nIGFyZ3VtZW50
IGZvciBzZW5kaW5nIHN1Y2Nlc3NmdWwgcmVzdWx0LCB6ZXJvCi0gICAgLy8gYXJndW1lbnRzIGZv
ciBzZW5kaW5nIGEgZmFpbHVyZSByZXN1bHQuCi0gICAgdm9pZCBzZW5kV2ViSW50ZW50UmVzcG9u
c2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gQ2F1c2Ug
dGhlIHdlYiBpbnRlbnQgdG8gYmUgZGVsaXZlcmVkIHRvIHRoaXMgY29udGV4dC4KLSAgICB2b2lk
IGRlbGl2ZXJXZWJJbnRlbnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwot
Ci0gICAgLy8gRW5hYmxlcyBvciBkaXNhYmxlcyBzdWJwaXhlbCBwb3NpdGlvbmluZyAoaS5lLiBm
cmFjdGlvbmFsIFggcG9zaXRpb25zIGZvcgotICAgIC8vIGdseXBocykgaW4gdGV4dCByZW5kZXJp
bmcgb24gTGludXguIFNpbmNlIHRoaXMgbWV0aG9kIGNoYW5nZXMgZ2xvYmFsCi0gICAgLy8gc2V0
dGluZ3MsIHRlc3RzIHRoYXQgY2FsbCBpdCBtdXN0IHVzZSB0aGVpciBvd24gY3VzdG9tIGZvbnQg
ZmFtaWx5IGZvcgotICAgIC8vIGFsbCB0ZXh0IHRoYXQgdGhleSByZW5kZXIuIElmIG5vdCwgYW4g
YWxyZWFkeS1jYWNoZWQgc3R5bGUgd2lsbCBiZSB1c2VkLAotICAgIC8vIHJlc3VsdGluZyBpbiB0
aGUgY2hhbmdlZCBzZXR0aW5nIGJlaW5nIGlnbm9yZWQuCi0gICAgdm9pZCBzZXRUZXh0U3VicGl4
ZWxQb3NpdGlvbmluZyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAg
ICAvLyBVc2VkIHRvIHNldCB0aGUgZGV2aWNlIHNjYWxlIGZhY3Rvci4KLSAgICB2b2lkIHNldEJh
Y2tpbmdTY2FsZUZhY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0K
LSAgICAvLyBSZXRyaWV2ZXMgdGhlIHRleHQgc3Vycm91bmRpbmcgYSBwb3NpdGlvbiBpbiBhIHRl
eHQgbm9kZS4KLSAgICAvLyBFeHBlY3RzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBiZSBhIHRleHQg
bm9kZSwgdGhlIHNlY29uZCBhbmQgdGhpcmQgdG8gYmUKLSAgICAvLyBwb2ludCBjb29yZGluYXRl
cyByZWxhdGl2ZSB0byB0aGUgbm9kZSBhbmQgdGhlIGZvdXJ0aCB0aGUgbWF4aW11bSB0ZXh0Ci0g
ICAgLy8gbGVuZ3RoIHRvIHJldHJpZXZlLgotICAgIHZvaWQgdGV4dFN1cnJvdW5kaW5nTm9kZShj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLXB1YmxpYzoKLSAgICAvLyBU
aGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIG5vdCBleHBvc2VkIHRvIEphdmFTY3JpcHQuCi0gICAg
dm9pZCBzZXRXb3JrUXVldWVGcm96ZW4oYm9vbCBmcm96ZW4pIHsgbV93b3JrUXVldWUuc2V0RnJv
emVuKGZyb3plbik7IH0KLQotICAgIGJvb2wgc2hvdWxkRHVtcEFzQXVkaW8oKSBjb25zdCB7IHJl
dHVybiBtX2R1bXBBc0F1ZGlvOyB9IAotICAgIHZvaWQgc2V0U2hvdWxkRHVtcEFzQXVkaW8oYm9v
bCBkdW1wQXNBdWRpbykgeyBtX2R1bXBBc0F1ZGlvID0gZHVtcEFzQXVkaW87IH0gCi0gICAgYm9v
bCBzaG91bGREdW1wQXNUZXh0KCkgeyByZXR1cm4gbV9kdW1wQXNUZXh0OyB9Ci0gICAgdm9pZCBz
ZXRTaG91bGREdW1wQXNUZXh0KGJvb2wgdmFsdWUpIHsgbV9kdW1wQXNUZXh0ID0gdmFsdWU7IH0K
LSAgICBib29sIHNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkgeyByZXR1cm4gbV9kdW1wRWRp
dGluZ0NhbGxiYWNrczsgfQotICAgIGJvb2wgc2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygp
IHsgcmV0dXJuIG1fZHVtcEZyYW1lTG9hZENhbGxiYWNrczsgfQotICAgIHZvaWQgc2V0U2hvdWxk
RHVtcEZyYW1lTG9hZENhbGxiYWNrcyhib29sIHZhbHVlKSB7IG1fZHVtcEZyYW1lTG9hZENhbGxi
YWNrcyA9IHZhbHVlOyB9Ci0gICAgYm9vbCBzaG91bGREdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxi
YWNrKCkgeyByZXR1cm4gbV9kdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrOyB9Ci0gICAgdm9p
ZCBzZXRTaG91bGREdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrKGJvb2wgdmFsdWUpIHsgbV9k
dW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrID0gdmFsdWU7IH0KLSAgICBib29sIHNob3VsZER1
bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzKCkgeyByZXR1cm4gbV9kdW1wVXNlckdl
c3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrczsgfQotICAgIHZvaWQgc2V0U2hvdWxkRHVtcFVzZXJH
ZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MoYm9vbCB2YWx1ZSkgeyBtX2R1bXBVc2VyR2VzdHVy
ZUluRnJhbWVMb2FkQ2FsbGJhY2tzID0gdmFsdWU7IH0KLSAgICBib29sIHNob3VsZER1bXBSZXNv
dXJjZUxvYWRDYWxsYmFja3MoKSB7cmV0dXJuIG1fZHVtcFJlc291cmNlTG9hZENhbGxiYWNrczsg
fQotICAgIHZvaWQgc2V0U2hvdWxkRHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXMoYm9vbCB2
YWx1ZSkgeyBtX2R1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzID0gdmFsdWU7IH0KLSAgICBi
b29sIHNob3VsZER1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzKCkge3JldHVybiBtX2R1bXBS
ZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzOyB9Ci0gICAgYm9vbCBzaG91bGREdW1wU3RhdHVzQ2Fs
bGJhY2tzKCkgeyByZXR1cm4gbV9kdW1wV2luZG93U3RhdHVzQ2hhbmdlczsgfQotICAgIGJvb2wg
c2hvdWxkRHVtcFNlbGVjdGlvblJlY3QoKSB7IHJldHVybiBtX2R1bXBTZWxlY3Rpb25SZWN0OyB9
Ci0gICAgYm9vbCBzaG91bGREdW1wQmFja0ZvcndhcmRMaXN0KCkgeyByZXR1cm4gbV9kdW1wQmFj
a0ZvcndhcmRMaXN0OyB9Ci0gICAgYm9vbCBzaG91bGREdW1wVGl0bGVDaGFuZ2VzKCkgeyByZXR1
cm4gbV9kdW1wVGl0bGVDaGFuZ2VzOyB9Ci0gICAgYm9vbCBzaG91bGREdW1wUGVybWlzc2lvbkNs
aWVudENhbGxiYWNrcygpIHsgcmV0dXJuIG1fZHVtcFBlcm1pc3Npb25DbGllbnRDYWxsYmFja3M7
IH0KLSAgICBib29sIHNob3VsZER1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zKCkgeyByZXR1
cm4gbV9kdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9uczsgfQotICAgIGJvb2wgc2hvdWxkRHVt
cENoaWxkRnJhbWVzQXNUZXh0KCkgeyByZXR1cm4gbV9kdW1wQ2hpbGRGcmFtZXNBc1RleHQ7IH0K
LSAgICBib29sIHNob3VsZEdlbmVyYXRlUGl4ZWxSZXN1bHRzKCkgeyByZXR1cm4gbV9nZW5lcmF0
ZVBpeGVsUmVzdWx0czsgfQotICAgIHZvaWQgc2V0U2hvdWxkR2VuZXJhdGVQaXhlbFJlc3VsdHMo
Ym9vbCB2YWx1ZSkgeyBtX2dlbmVyYXRlUGl4ZWxSZXN1bHRzID0gdmFsdWU7IH0KLSAgICBib29s
IHNob3VsZER1bXBDcmVhdGVWaWV3KCkgeyByZXR1cm4gbV9kdW1wQ3JlYXRlVmlldzsgfQotICAg
IGJvb2wgYWNjZXB0c0VkaXRpbmcoKSB7IHJldHVybiBtX2FjY2VwdHNFZGl0aW5nOyB9Ci0gICAg
Ym9vbCBjYW5PcGVuV2luZG93cygpIHsgcmV0dXJuIG1fY2FuT3BlbldpbmRvd3M7IH0KLSAgICBi
b29sIHNob3VsZEFkZEZpbGVUb1Bhc3RlYm9hcmQoKSB7IHJldHVybiBtX3Nob3VsZEFkZEZpbGVU
b1Bhc3RlYm9hcmQ7IH0KLSAgICBib29sIHN0b3BQcm92aXNpb25hbEZyYW1lTG9hZHMoKSB7IHJl
dHVybiBtX3N0b3BQcm92aXNpb25hbEZyYW1lTG9hZHM7IH0KLSAgICBib29sIGRlZmVyTWFpblJl
c291cmNlRGF0YUxvYWQoKSB7IHJldHVybiBtX2RlZmVyTWFpblJlc291cmNlRGF0YUxvYWQ7IH0K
LSAgICB2b2lkIHNldFNob3dEZWJ1Z0xheWVyVHJlZShib29sIHZhbHVlKSB7IG1fc2hvd0RlYnVn
TGF5ZXJUcmVlID0gdmFsdWU7IH0KLSAgICB2b2lkIHNldFRpdGxlVGV4dERpcmVjdGlvbihXZWJL
aXQ6OldlYlRleHREaXJlY3Rpb24gZGlyKQotICAgIHsKLSAgICAgICAgbV90aXRsZVRleHREaXJl
Y3Rpb24uc2V0KGRpciA9PSBXZWJLaXQ6OldlYlRleHREaXJlY3Rpb25MZWZ0VG9SaWdodCA/ICJs
dHIiIDogInJ0bCIpOwotICAgIH0KLQotICAgIGJvb2wgc2hvdWxkSW50ZXJjZXB0UG9zdE1lc3Nh
Z2UoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW50ZXJjZXB0UG9zdE1lc3NhZ2UuaXNCb29s
KCkgJiYgbV9pbnRlcmNlcHRQb3N0TWVzc2FnZS50b0Jvb2xlYW4oKTsKLSAgICB9Ci0KLSAgICB2
b2lkIHNldElzUHJpbnRpbmcoYm9vbCB2YWx1ZSkgeyBtX2lzUHJpbnRpbmcgPSB2YWx1ZTsgfQot
ICAgIGJvb2wgaXNQcmludGluZygpIHsgcmV0dXJuIG1faXNQcmludGluZzsgfQotCi0gICAgYm9v
bCB0ZXN0UmVwYWludCgpIGNvbnN0IHsgcmV0dXJuIG1fdGVzdFJlcGFpbnQ7IH0KLSAgICBib29s
IHN3ZWVwSG9yaXpvbnRhbGx5KCkgY29uc3QgeyByZXR1cm4gbV9zd2VlcEhvcml6b250YWxseTsg
fQotCi0gICAgdm9pZCBzZXRIYXNDdXN0b21GdWxsU2NyZWVuQmVoYXZpb3IoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIGJvb2wgaGFzQ3VzdG9tRnVsbFNjcmVlbkJl
aGF2aW9yKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDdXN0b21GdWxsU2NyZWVuQmVoYXZpb3I7IH0K
LQotICAgIC8vIENhbGxlZCBieSB0aGUgd2VidmlldyBkZWxlZ2F0ZSB3aGVuIHRoZSB0b3BsZXZl
bCBmcmFtZSBsb2FkIGlzIGRvbmUuCi0gICAgdm9pZCBsb2NhdGlvbkNoYW5nZURvbmUoKTsKLQot
ICAgIC8vIENhbGxlZCBieSB0aGUgd2VidmlldyBkZWxlZ2F0ZSB3aGVuIHRoZSBwb2xpY3kgZGVs
ZWdhdGUgcnVucyBpZiB0aGUKLSAgICAvLyB3YWl0Rm9yUG9saWN5RGVsZWdhdGUgd2FzIGNhbGxl
ZC4KLSAgICB2b2lkIHBvbGljeURlbGVnYXRlRG9uZSgpOwotCi0gICAgLy8gUmVpbml0aWFsaXpl
cyBhbGwgc3RhdGljIHZhbHVlcy4gVGhlIHJlc2V0KCkgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQK
LSAgICAvLyBiZWZvcmUgdGhlIHN0YXJ0IG9mIGVhY2ggdGVzdCAoY3VycmVudGx5IGZyb20gVGVz
dFNoZWxsOjpydW5GaWxlVGVzdCkuCi0gICAgdm9pZCByZXNldCgpOwotCi0gICAgLy8gQSBzaW5n
bGUgaXRlbSBpbiB0aGUgd29yayBxdWV1ZS4KLSAgICBjbGFzcyBXb3JrSXRlbSB7Ci0gICAgcHVi
bGljOgotICAgICAgICB2aXJ0dWFsIH5Xb3JrSXRlbSgpIHsgfQotCi0gICAgICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGlzIHN0YXJ0ZWQgYSBsb2FkLgotICAgICAgICB2aXJ0dWFsIGJvb2wgcnVu
KFRlc3RTaGVsbCopID0gMDsKLSAgICB9OwotCi0gICAgVGFza0xpc3QqIHRhc2tMaXN0KCkgeyBy
ZXR1cm4gJm1fdGFza0xpc3Q7IH0KLQotICAgIGJvb2wgc2hvdWxkU3RheU9uUGFnZUFmdGVySGFu
ZGxpbmdCZWZvcmVVbmxvYWQoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFN0YXlPblBhZ2VBZnRl
ckhhbmRsaW5nQmVmb3JlVW5sb2FkOyB9Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIFdv
cmtJdGVtOwotICAgIGZyaWVuZCBjbGFzcyBXb3JrUXVldWU7Ci0KLSAgICAvLyBIZWxwZXIgY2xh
c3MgZm9yIG1hbmFnaW5nIGV2ZW50cyBxdWV1ZWQgYnkgbWV0aG9kcyBsaWtlIHF1ZXVlTG9hZCBv
cgotICAgIC8vIHF1ZXVlU2NyaXB0LgotICAgIGNsYXNzIFdvcmtRdWV1ZSB7Ci0gICAgcHVibGlj
OgotICAgICAgICBXb3JrUXVldWUoTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIpIDog
bV9mcm96ZW4oZmFsc2UpLCBtX2NvbnRyb2xsZXIoY29udHJvbGxlcikgeyB9Ci0gICAgICAgIHZp
cnR1YWwgfldvcmtRdWV1ZSgpOwotICAgICAgICB2b2lkIHByb2Nlc3NXb3JrU29vbigpOwotCi0g
ICAgICAgIC8vIFJlc2V0IHRoZSBzdGF0ZSBvZiB0aGUgY2xhc3MgYmV0d2VlbiB0ZXN0cy4KLSAg
ICAgICAgdm9pZCByZXNldCgpOwotCi0gICAgICAgIHZvaWQgYWRkV29yayhXb3JrSXRlbSopOwot
Ci0gICAgICAgIHZvaWQgc2V0RnJvemVuKGJvb2wgZnJvemVuKSB7IG1fZnJvemVuID0gZnJvemVu
OyB9Ci0gICAgICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJuIG1fcXVldWUuaXNFbXB0eSgpOyB9
Ci0gICAgICAgIFRhc2tMaXN0KiB0YXNrTGlzdCgpIHsgcmV0dXJuICZtX3Rhc2tMaXN0OyB9Ci0K
LSAgICBwcml2YXRlOgotICAgICAgICB2b2lkIHByb2Nlc3NXb3JrKCk7Ci0gICAgICAgIGNsYXNz
IFdvcmtRdWV1ZVRhc2s6IHB1YmxpYyBNZXRob2RUYXNrPFdvcmtRdWV1ZT4gewotICAgICAgICBw
dWJsaWM6Ci0gICAgICAgICAgICBXb3JrUXVldWVUYXNrKFdvcmtRdWV1ZSogb2JqZWN0KTogTWV0
aG9kVGFzazxXb3JrUXVldWU+KG9iamVjdCkgeyB9Ci0gICAgICAgICAgICB2aXJ0dWFsIHZvaWQg
cnVuSWZWYWxpZCgpIHsgbV9vYmplY3QtPnByb2Nlc3NXb3JrKCk7IH0KLSAgICAgICAgfTsKLQot
ICAgICAgICBUYXNrTGlzdCBtX3Rhc2tMaXN0OwotICAgICAgICBEZXF1ZTxXb3JrSXRlbSo+IG1f
cXVldWU7Ci0gICAgICAgIGJvb2wgbV9mcm96ZW47Ci0gICAgICAgIExheW91dFRlc3RDb250cm9s
bGVyKiBtX2NvbnRyb2xsZXI7Ci0gICAgfTsKLQotICAgIC8vIFN1cHBvcnQgZm9yIG92ZXJyaWRl
UHJlZmVyZW5jZS4KLSAgICBib29sIGNwcFZhcmlhbnRUb0Jvb2woY29uc3QgQ3BwVmFyaWFudCYp
OwotICAgIGludDMyX3QgY3BwVmFyaWFudFRvSW50MzIoY29uc3QgQ3BwVmFyaWFudCYpOwotICAg
IFdlYktpdDo6V2ViU3RyaW5nIGNwcFZhcmlhbnRUb1dlYlN0cmluZyhjb25zdCBDcHBWYXJpYW50
Jik7Ci0gICAgVmVjdG9yPFdlYktpdDo6V2ViU3RyaW5nPiBjcHBWYXJpYW50VG9XZWJTdHJpbmdB
cnJheShjb25zdCBDcHBWYXJpYW50Jik7Ci0KLSAgICB2b2lkIGxvZ0Vycm9yVG9Db25zb2xlKGNv
bnN0IHN0ZDo6c3RyaW5nJik7Ci0gICAgdm9pZCBjb21wbGV0ZU5vdGlmeURvbmUoYm9vbCBpc1Rp
bWVvdXQpOwotICAgIGNsYXNzIE5vdGlmeURvbmVUaW1lZE91dFRhc2s6IHB1YmxpYyBNZXRob2RU
YXNrPExheW91dFRlc3RDb250cm9sbGVyPiB7Ci0gICAgcHVibGljOgotICAgICAgICBOb3RpZnlE
b25lVGltZWRPdXRUYXNrKExheW91dFRlc3RDb250cm9sbGVyKiBvYmplY3QpOiBNZXRob2RUYXNr
PExheW91dFRlc3RDb250cm9sbGVyPihvYmplY3QpIHsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQg
cnVuSWZWYWxpZCgpIHsgbV9vYmplY3QtPmNvbXBsZXRlTm90aWZ5RG9uZSh0cnVlKTsgfQotICAg
IH07Ci0KLQotICAgIGJvb2wgcGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoY29u
c3QgV2ViS2l0OjpXZWJTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lLCBjb25zdCBX
ZWJLaXQ6OldlYlN0cmluZyYgZWxlbWVudElkKTsKLSAgICBib29sIHBhdXNlVHJhbnNpdGlvbkF0
VGltZU9uRWxlbWVudFdpdGhJZChjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgcHJvcGVydHlOYW1l
LCBkb3VibGUgdGltZSwgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGVsZW1lbnRJZCk7Ci0gICAg
Ym9vbCBlbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQoY29uc3QgV2ViS2l0
OjpXZWJTdHJpbmcmKTsKLSAgICBpbnQgbnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCk7Ci0KLSAg
ICAvLyBVc2VkIGZvciB0ZXN0IHRpbWVvdXRzLgotICAgIFRhc2tMaXN0IG1fdGFza0xpc3Q7Ci0K
LSAgICAvLyBOb24tb3duaW5nIHBvaW50ZXIuIFRoZSBMYXlvdXRUZXN0Q29udHJvbGxlciBpcyBv
d25lZCBieSB0aGUgaG9zdC4KLSAgICBUZXN0U2hlbGwqIG1fc2hlbGw7Ci0KLSAgICAvLyBJZiB0
cnVlLCB0aGUgdGVzdF9zaGVsbCB3aWxsIHByb2R1Y2UgYSBwbGFpbiB0ZXh0IGR1bXAgcmF0aGVy
IHRoYW4gYQotICAgIC8vIHRleHQgcmVwcmVzZW50YXRpb24gb2YgdGhlIHJlbmRlcmVyLgotICAg
IGJvb2wgbV9kdW1wQXNUZXh0OwotCi0gICAgLy8gSWYgdHJ1ZSwgdGhlIHRlc3Rfc2hlbGwgd2ls
bCBvdXRwdXQgYSBiYXNlNjQgZW5jb2RlZCBXQVZFIGZpbGUuCi0gICAgYm9vbCBtX2R1bXBBc0F1
ZGlvOwotCi0gICAgLy8gSWYgdHJ1ZSwgdGhlIHRlc3Rfc2hlbGwgd2lsbCB3cml0ZSBhIGRlc2Ny
aXB0aXZlIGxpbmUgZm9yIGVhY2ggZWRpdGluZwotICAgIC8vIGNvbW1hbmQuCi0gICAgYm9vbCBt
X2R1bXBFZGl0aW5nQ2FsbGJhY2tzOwotCi0gICAgLy8gSWYgdHJ1ZSwgdGhlIHRlc3Rfc2hlbGwg
d2lsbCBkcmF3IHRoZSBib3VuZHMgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHJlY3QKLSAgICAv
LyB0YWtpbmcgcG9zc2libGUgdHJhbnNmb3JtcyBvZiB0aGUgc2VsZWN0aW9uIHJlY3QgaW50byBh
Y2NvdW50LgotICAgIGJvb2wgbV9kdW1wU2VsZWN0aW9uUmVjdDsKLQotICAgIC8vIElmIHRydWUs
IHRoZSB0ZXN0X3NoZWxsIHdpbGwgb3V0cHV0IGEgZGVzY3JpcHRpdmUgbGluZSBmb3IgZWFjaCBm
cmFtZQotICAgIC8vIGxvYWQgY2FsbGJhY2suCi0gICAgYm9vbCBtX2R1bXBGcmFtZUxvYWRDYWxs
YmFja3M7Ci0KLSAgICAvLyBJZiB0cnVlLCB0aGUgdGVzdF9zaGVsbCB3aWxsIG91dHB1dCBhIGRl
c2NyaXB0aXZlIGxpbmUgZm9yIHRoZSBwcm9ncmVzcwotICAgIC8vIGZpbmlzaGVkIGNhbGxiYWNr
LgotICAgIGJvb2wgbV9kdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrOwotCi0gICAgLy8gSWYg
dHJ1ZSwgdGhlIHRlc3Rfc2hlbGwgd2lsbCBvdXRwdXQgYSBsaW5lIG9mIHRoZSB1c2VyIGdlc3R1
cmUgc3RhdHVzCi0gICAgLy8gdGV4dCBmb3Igc29tZSBmcmFtZSBsb2FkIGNhbGxiYWNrcy4KLSAg
ICBib29sIG1fZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3M7Ci0KLSAgICAvLyBJ
ZiB0cnVlLCB0aGUgdGVzdF9zaGVsbCB3aWxsIG91dHB1dCBhIGRlc2NyaXB0aXZlIGxpbmUgZm9y
IGVhY2ggcmVzb3VyY2UKLSAgICAvLyBsb2FkIGNhbGxiYWNrLgotICAgIGJvb2wgbV9kdW1wUmVz
b3VyY2VMb2FkQ2FsbGJhY2tzOwotICAgIAotICAgIC8vIElmIHRydWUsIHRoZSB0ZXN0X3NoZWxs
IHdpbGwgb3V0cHV0IHRoZSBNSU1FIHR5cGUgZm9yIGVhY2ggcmVzb3VyY2UgdGhhdCAKLSAgICAv
LyB3YXMgbG9hZGVkLgotICAgIGJvb2wgbV9kdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlczsK
LQotICAgIC8vIElmIHRydWUsIHRoZSB0ZXN0X3NoZWxsIHdpbGwgcHJvZHVjZSBhIGR1bXAgb2Yg
dGhlIGJhY2sgZm9yd2FyZCBsaXN0IGFzCi0gICAgLy8gd2VsbC4KLSAgICBib29sIG1fZHVtcEJh
Y2tGb3J3YXJkTGlzdDsKLQotICAgIC8vIElmIHRydWUsIHRoZSB0ZXN0X3NoZWxsIHdpbGwgcHJp
bnQgb3V0IHRoZSBjaGlsZCBmcmFtZSBzY3JvbGwgb2Zmc2V0cyBhcwotICAgIC8vIHdlbGwuCi0g
ICAgYm9vbCBtX2R1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zOwotCi0gICAgLy8gSWYgdHJ1
ZSBhbmQgaWYgZHVtcF9hc190ZXh0XyBpcyB0cnVlLCB0aGUgdGVzdF9zaGVsbCB3aWxsIHJlY3Vy
c2l2ZWx5Ci0gICAgLy8gZHVtcCBhbGwgZnJhbWVzIGFzIHBsYWluIHRleHQuCi0gICAgYm9vbCBt
X2R1bXBDaGlsZEZyYW1lc0FzVGV4dDsKLQotICAgIC8vIElmIHRydWUsIHRoZSB0ZXN0X3NoZWxs
IHdpbGwgZHVtcCBhbGwgY2hhbmdlcyB0byB3aW5kb3cuc3RhdHVzLgotICAgIGJvb2wgbV9kdW1w
V2luZG93U3RhdHVzQ2hhbmdlczsKLQotICAgIC8vIElmIHRydWUsIG91dHB1dCBhIG1lc3NhZ2Ug
d2hlbiB0aGUgcGFnZSB0aXRsZSBpcyBjaGFuZ2VkLgotICAgIGJvb2wgbV9kdW1wVGl0bGVDaGFu
Z2VzOwotCi0gICAgLy8gSWYgdHJ1ZSwgb3V0cHV0IGEgZGVzY3JpcHRpdmUgbGluZSBlYWNoIHRp
bWUgYSBwZXJtaXNzaW9uIGNsaWVudAotICAgIC8vIGNhbGxiYWNrIGlzIGludm9rZWQuIEN1cnJl
bnRseSBvbmx5IGltcGxlbWVudGVkIGZvciBhbGxvd0ltYWdlLgotICAgIGJvb2wgbV9kdW1wUGVy
bWlzc2lvbkNsaWVudENhbGxiYWNrczsKLQotICAgIC8vIElmIHRydWUsIHRoZSB0ZXN0X3NoZWxs
IHdpbGwgZ2VuZXJhdGUgcGl4ZWwgcmVzdWx0cyBpbiBkdW1wQXNUZXh0IG1vZGUKLSAgICBib29s
IG1fZ2VuZXJhdGVQaXhlbFJlc3VsdHM7Ci0KLSAgICAvLyBJZiB0cnVlLCBvdXRwdXQgYSBkZXNj
cmlwdGl2ZSBsaW5lIGVhY2ggdGltZSBXZWJWaWV3Q2xpZW50OjpjcmVhdGVWaWV3Ci0gICAgLy8g
aXMgaW52b2tlZC4KLSAgICBib29sIG1fZHVtcENyZWF0ZVZpZXc7Ci0KLSAgICAvLyBJZiB0cnVl
LCB0aGUgZWxlbWVudCB3aWxsIGJlIHRyZWF0ZWQgYXMgZWRpdGFibGUuIFRoaXMgdmFsdWUgaXMg
cmV0dXJuZWQKLSAgICAvLyBmcm9tIHZhcmlvdXMgZWRpdGluZyBjYWxsYmFja3MgdGhhdCBhcmUg
Y2FsbGVkIGp1c3QgYmVmb3JlIGVkaXQgb3BlcmF0aW9ucwotICAgIC8vIGFyZSBhbGxvd2VkLgot
ICAgIGJvb2wgbV9hY2NlcHRzRWRpdGluZzsKLQotICAgIC8vIElmIHRydWUsIG5ldyB3aW5kb3dz
IGNhbiBiZSBvcGVuZWQgdmlhIGphdmFzY3JpcHQgb3IgYnkgcGx1Z2lucy4gQnkKLSAgICAvLyBk
ZWZhdWx0LCBzZXQgdG8gZmFsc2UgYW5kIGNhbiBiZSB0b2dnbGVkIHRvIHRydWUgdXNpbmcKLSAg
ICAvLyBzZXRDYW5PcGVuV2luZG93cygpLgotICAgIGJvb2wgbV9jYW5PcGVuV2luZG93czsKLQot
ICAgIC8vIFdoZW4gcmVzZXQgaXMgY2FsbGVkLCBnbyB0aHJvdWdoIGFuZCBjbG9zZSBhbGwgYnV0
IHRoZSBtYWluIHRlc3Qgc2hlbGwKLSAgICAvLyB3aW5kb3cuIEJ5IGRlZmF1bHQsIHNldCB0byB0
cnVlIGJ1dCB0b2dnbGVkIHRvIGZhbHNlIHVzaW5nCi0gICAgLy8gc2V0Q2xvc2VSZW1haW5pbmdX
aW5kb3dzV2hlbkNvbXBsZXRlKCkuCi0gICAgYm9vbCBtX2Nsb3NlUmVtYWluaW5nV2luZG93czsK
LQotICAgIC8vIElmIHRydWUsIHBpeGVsIGR1bXAgd2lsbCBiZSBwcm9kdWNlZCBhcyBhIHNlcmll
cyBvZiAxcHgtdGFsbCwgdmlldy13aWRlCi0gICAgLy8gaW5kaXZpZHVhbCBwYWludHMgb3ZlciB0
aGUgaGVpZ2h0IG9mIHRoZSB2aWV3LgotICAgIGJvb2wgbV90ZXN0UmVwYWludDsKLSAgICAvLyBJ
ZiB0cnVlIGFuZCB0ZXN0X3JlcGFpbnRfIGlzIHRydWUgYXMgd2VsbCwgcGl4ZWwgZHVtcCB3aWxs
IGJlIHByb2R1Y2VkIGFzCi0gICAgLy8gYSBzZXJpZXMgb2YgMXB4LXdpZGUsIHZpZXctdGFsbCBw
YWludHMgYWNyb3NzIHRoZSB3aWR0aCBvZiB0aGUgdmlldy4KLSAgICBib29sIG1fc3dlZXBIb3Jp
em9udGFsbHk7Ci0KLSAgICAvLyBJZiB0cnVlIGFuZCBhIGRyYWcgc3RhcnRzLCBhZGRzIGEgZmls
ZSB0byB0aGUgZHJhZyZkcm9wIGNsaXBib2FyZC4KLSAgICBib29sIG1fc2hvdWxkQWRkRmlsZVRv
UGFzdGVib2FyZDsKLQotICAgIC8vIElmIHRydWUsIHN0b3BzIHByb3Zpc2lvbmFsIGZyYW1lIGxv
YWRzIGR1cmluZyB0aGUKLSAgICAvLyBEaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lIGNh
bGxiYWNrLgotICAgIGJvb2wgbV9zdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzOwotCi0gICAgLy8g
SWYgdHJ1ZSwgZG9uJ3QgZHVtcCBvdXRwdXQgdW50aWwgbm90aWZ5RG9uZSBpcyBjYWxsZWQuCi0g
ICAgYm9vbCBtX3dhaXRVbnRpbERvbmU7Ci0KLSAgICAvLyBJZiBmYWxzZSwgYWxsIG5ldyByZXF1
ZXN0cyB3aWxsIG5vdCBkZWZlciB0aGUgbWFpbiByZXNvdXJjZSBkYXRhIGxvYWQuCi0gICAgYm9v
bCBtX2RlZmVyTWFpblJlc291cmNlRGF0YUxvYWQ7Ci0KLSAgICAvLyBJZiB0cnVlLCB3ZSB3aWxs
IHNob3cgZXh0ZW5kZWQgaW5mb3JtYXRpb24gaW4gdGhlIGdyYXBoaWNzIGxheWVyIHRyZWUuCi0g
ICAgYm9vbCBtX3Nob3dEZWJ1Z0xheWVyVHJlZTsKLQotICAgIC8vIElmIHRydWUsIGxheW91dCBp
cyB0byB0YXJnZXQgcHJpbnRlZCBwYWdlcy4KLSAgICBib29sIG1faXNQcmludGluZzsKLQotICAg
IFdvcmtRdWV1ZSBtX3dvcmtRdWV1ZTsKLQotICAgIENwcFZhcmlhbnQgbV9nbG9iYWxGbGFnOwot
Ci0gICAgLy8gQm91bmQgdmFyaWFibGUgY291bnRpbmcgdGhlIG51bWJlciBvZiB0b3AgVVJMcyB2
aXNpdGVkLgotICAgIENwcFZhcmlhbnQgbV93ZWJIaXN0b3J5SXRlbUNvdW50OwotCi0gICAgLy8g
Qm91bmQgdmFyaWFibGUgdHJhY2tpbmcgdGhlIGRpcmVjdGlvbmFsaXR5IG9mIHRoZSA8dGl0bGU+
IHRhZy4KLSAgICBDcHBWYXJpYW50IG1fdGl0bGVUZXh0RGlyZWN0aW9uOwotCi0gICAgLy8gQm91
bmQgdmFyaWFibGUgdG8gcmV0dXJuIHRoZSBuYW1lIG9mIHRoaXMgcGxhdGZvcm0gKGNocm9taXVt
KS4KLSAgICBDcHBWYXJpYW50IG1fcGxhdGZvcm1OYW1lOwotCi0gICAgLy8gQm91bmQgdmFyaWFi
bGUgdG8gc2V0IHdoZXRoZXIgcG9zdE1lc3NhZ2VzIHNob3VsZCBiZSBpbnRlcmNlcHRlZCBvciBu
b3QKLSAgICBDcHBWYXJpYW50IG1faW50ZXJjZXB0UG9zdE1lc3NhZ2U7Ci0KLSAgICBXZWJLaXQ6
OldlYlVSTCBtX3VzZXJTdHlsZVNoZWV0TG9jYXRpb247Ci0KLSAgICAvLyBXQVYgYXVkaW8gZGF0
YSBpcyBzdG9yZWQgaGVyZS4KLSAgICBXZWJLaXQ6OldlYkFycmF5QnVmZmVyVmlldyBtX2F1ZGlv
RGF0YTsKLQotICAgIC8vIE1vY2sgb2JqZWN0IGZvciB0ZXN0aW5nIGRlbGl2ZXJpbmcgd2ViIGlu
dGVudHMuCi0gICAgT3duUHRyPFdlYktpdDo6V2ViRGVsaXZlcmVkSW50ZW50Q2xpZW50PiBtX2lu
dGVudENsaWVudDsKLQotICAgIGJvb2wgbV9zaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0Jl
Zm9yZVVubG9hZDsKLQotICAgIC8vIElmIHRydWUsIGNhbGxzIHRvIFdlYlZpZXdIb3N0OjplbnRl
ci9leGl0RnVsbFNjcmVlbk5vdyB3aWxsIG5vdCByZXN1bHQgaW4gCi0gICAgLy8gY2FsbHMgdG8g
RG9jdW1lbnQ6OndpbGwvZGlkL0VudGVyL0V4aXRGdWxsU2NyZWVuLgotICAgIGJvb2wgbV9oYXND
dXN0b21GdWxsU2NyZWVuQmVoYXZpb3I7Ci19OwotCi0jZW5kaWYgLy8gTGF5b3V0VGVzdENvbnRy
b2xsZXJfaApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwu
Y3BwCShyZXZpc2lvbiAxMjUzMzUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0U2hlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw5ICszMyw4IEBACiAKICNpbmNsdWRl
ICJEUlREZXZUb29sc0FnZW50LmgiCiAjaW5jbHVkZSAiRFJURGV2VG9vbHNDbGllbnQuaCIKLSNp
bmNsdWRlICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIk1vY2tXZWJQcmVyZW5k
ZXJpbmdTdXBwb3J0LmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViQXJyYXlCdWZmZXJWaWV3Lmgi
CisjaW5jbHVkZSAiVGVzdFJ1bm5lci9UZXN0UnVubmVyLmgiCiAjaW5jbHVkZSAiV2ViQ29tcG9z
aXRvci5oIgogI2luY2x1ZGUgIldlYkRhdGFTb3VyY2UuaCIKICNpbmNsdWRlICJXZWJEb2N1bWVu
dC5oIgpAQCAtNDQsMjAgKzQzLDIxIEBACiAjaW5jbHVkZSAiV2ViSGlzdG9yeUl0ZW0uaCIKICNp
bmNsdWRlICJXZWJJREJGYWN0b3J5LmgiCiAjaW5jbHVkZSAiV2ViVGVzdGluZ1N1cHBvcnQuaCIK
LSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJUaHJlYWQuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKLSNp
bmNsdWRlICJwbGF0Zm9ybS9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIKICNpbmNsdWRlICJXZWJQ
ZXJtaXNzaW9ucy5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dlYlBvaW50LmgiCiAjaW5jbHVkZSAi
V2ViUnVudGltZUZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiV2ViU2NyaXB0Q29udHJvbGxlci5oIgog
I2luY2x1ZGUgIldlYlNldHRpbmdzLmgiCisjaW5jbHVkZSAiV2ViVmlldy5oIgorI2luY2x1ZGUg
IldlYlZpZXdIb3N0LmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViQXJyYXlCdWZmZXJWaWV3Lmgi
CisjaW5jbHVkZSAicGxhdGZvcm0vV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgiCisjaW5jbHVkZSAi
cGxhdGZvcm0vV2ViUG9pbnQuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJTaXplLmgiCiAjaW5j
bHVkZSAicGxhdGZvcm0vV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViVGhyZWFk
LmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViVVJMUmVxdWVzdC5oIgogI2luY2x1ZGUgInBsYXRm
b3JtL1dlYlVSTFJlc3BvbnNlLmgiCi0jaW5jbHVkZSAiV2ViVmlldy5oIgotI2luY2x1ZGUgIldl
YlZpZXdIb3N0LmgiCiAjaW5jbHVkZSAic2tpYS9leHQvcGxhdGZvcm1fY2FudmFzLmgiCiAjaW5j
bHVkZSAid2Via2l0L3N1cHBvcnQvd2Via2l0X3N1cHBvcnQuaCIKICNpbmNsdWRlICJ3ZWJraXQv
c3VwcG9ydC93ZWJraXRfc3VwcG9ydF9nZnguaCIKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RTaGVsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RTaGVsbC5oCShyZXZpc2lvbiAxMjUzMzUpCisrKyBUb29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIs
OCBAQAogI2RlZmluZSBUZXN0U2hlbGxfaAogCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkRSVFRlc3RSdW5uZXIuaCIKICNpbmNsdWRlICJH
YW1lcGFkQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9sbGVyLmgiCiAj
aW5jbHVkZSAiTm90aWZpY2F0aW9uUHJlc2VudGVyLmgiCiAjaW5jbHVkZSAiVGVzdEV2ZW50UHJp
bnRlci5oIgogI2luY2x1ZGUgIlRlc3RJbnRlcmZhY2VzLmgiCkluZGV4OiBUb29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9XZWJQZXJtaXNzaW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUGVybWlzc2lvbnMuY3BwCShyZXZpc2lvbiAxMjUz
MzUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQZXJtaXNzaW9ucy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJXZWJQZXJtaXNzaW9ucy5oIgogCi0jaW5jbHVkZSAiTGF5b3V0VGVzdENvbnRyb2xs
ZXIuaCIKKyNpbmNsdWRlICJEUlRUZXN0UnVubmVyLmgiCiAjaW5jbHVkZSAiVGVzdFNoZWxsLmgi
CiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViQ1N0cmluZy5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dl
YlVSTC5oIgpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdI
b3N0LmNwcAkocmV2aXNpb24gMTI1MzM1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vV2ViVmlld0hvc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4ICszMSw4IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViVmlld0hvc3QuaCIKIAorI2luY2x1ZGUgIkRS
VFRlc3RSdW5uZXIuaCIKICNpbmNsdWRlICJFdmVudFNlbmRlci5oIgotI2luY2x1ZGUgIkxheW91
dFRlc3RDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiTW9ja0dyYW1tYXJDaGVjay5oIgogI2luY2x1
ZGUgIk1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJNb2NrV2ViU3Bl
ZWNoUmVjb2duaXplci5oIgpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0NNYWtlTGlz
dHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9DTWFrZUxpc3Rz
LnR4dAkocmV2aXNpb24gMTI1MzM1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0NNYWtl
TGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQCBTRVQoRHVtcFJlbmRlclRy
ZWVfU09VUkNFUwogICAgICR7VE9PTFNfRElSfS9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJl
ZUNvbW1vbi5jcHAKICAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRlclRyZWUvQ3ljbGljUmVkdW5k
YW5jeUNoZWNrLmNwcAogICAgICR7VE9PTFNfRElSfS9EdW1wUmVuZGVyVHJlZS9HQ0NvbnRyb2xs
ZXIuY3BwCi0gICAgJHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9s
bGVyLmNwcAorICAgICR7VE9PTFNfRElSfS9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmNwcAog
ICAgICR7VE9PTFNfRElSfS9EdW1wUmVuZGVyVHJlZS9QaXhlbER1bXBTdXBwb3J0LmNwcAogICAg
ICR7VE9PTFNfRElSfS9EdW1wUmVuZGVyVHJlZS9Xb3JrUXVldWUuY3BwCiAgICAgJHtUT09MU19E
SVJ9L0R1bXBSZW5kZXJUcmVlL2NhaXJvL1BpeGVsRHVtcFN1cHBvcnRDYWlyby5jcHAKQEAgLTE1
LDcgKzE1LDcgQEAgU0VUKER1bXBSZW5kZXJUcmVlX1NPVVJDRVMKICAgICAke1RPT0xTX0RJUn0v
RHVtcFJlbmRlclRyZWUvZWZsL0ZvbnRNYW5hZ2VtZW50LmNwcAogICAgICR7VE9PTFNfRElSfS9E
dW1wUmVuZGVyVHJlZS9lZmwvR0NDb250cm9sbGVyRWZsLmNwcAogICAgICR7VE9PTFNfRElSfS9E
dW1wUmVuZGVyVHJlZS9lZmwvSlNTdHJpbmdVdGlscy5jcHAKLSAgICAke1RPT0xTX0RJUn0vRHVt
cFJlbmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVyRWZsLmNwcAorICAgICR7VE9PTFNf
RElSfS9EdW1wUmVuZGVyVHJlZS9lZmwvVGVzdFJ1bm5lckVmbC5jcHAKICAgICAke1RPT0xTX0RJ
Un0vRHVtcFJlbmRlclRyZWUvZWZsL1BpeGVsRHVtcFN1cHBvcnRFZmwuY3BwCiAgICAgJHtUT09M
U19ESVJ9L0R1bXBSZW5kZXJUcmVlL2VmbC9UZXh0SW5wdXRDb250cm9sbGVyLmNwcAogICAgICR7
VE9PTFNfRElSfS9EdW1wUmVuZGVyVHJlZS9lZmwvV29ya1F1ZXVlSXRlbUVmbC5jcHAKSW5kZXg6
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlLmNwcAkocmV2aXNpb24g
MTI1MzM1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzEsOSArMzEsOSBAQAogI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVl
Vmlldy5oIgogI2luY2x1ZGUgIkV2ZW50U2VuZGVyLmgiCiAjaW5jbHVkZSAiRm9udE1hbmFnZW1l
bnQuaCIKLSNpbmNsdWRlICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGl4ZWxEdW1wU3VwcG9ydC5oIgorI2luY2x1ZGUgIlRl
c3RSdW5uZXIuaCIKICNpbmNsdWRlICJXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBv
cnRFZmwuaCIKICNpbmNsdWRlICJXZWJDb3JlVGVzdFN1cHBvcnQuaCIKICNpbmNsdWRlICJXb3Jr
UXVldWUuaCIKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZUNo
cm9tZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5k
ZXJUcmVlQ2hyb21lLmNwcAkocmV2aXNpb24gMTI1MzM1KQorKysgVG9vbHMvRHVtcFJlbmRlclRy
ZWUvZWZsL0R1bXBSZW5kZXJUcmVlQ2hyb21lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsOCAr
MzQsOCBAQAogI2luY2x1ZGUgIkV2ZW50U2VuZGVyLmgiCiAjaW5jbHVkZSAiR0NDb250cm9sbGVy
LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJUZXN0UnVubmVyLmgiCiAj
aW5jbHVkZSAiVGV4dElucHV0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIldlYkNvcmVTdXBwb3J0
L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5oIgogI2luY2x1ZGUgIldlYkNvcmVUZXN0U3VwcG9y
dC5oIgpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlVmlldy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVl
Vmlldy5jcHAJKHJldmlzaW9uIDEyNTMzNSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9E
dW1wUmVuZGVyVHJlZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAj
aW5jbHVkZSAiRHVtcFJlbmRlclRyZWUuaCIKICNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZUNocm9t
ZS5oIgogI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlRWZsLmgiCi0jaW5jbHVkZSAiTGF5b3V0VGVz
dENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJUZXN0UnVubmVyLmgiCiAjaW5jbHVkZSA8RVdlYktp
dC5oPgogI2luY2x1ZGUgPEVjb3JlLmg+CiAjaW5jbHVkZSA8RWluYS5oPgpJbmRleDogVG9vbHMv
RHVtcFJlbmRlclRyZWUvZWZsL0VkaXRpbmdDYWxsYmFja3MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9FZGl0aW5nQ2FsbGJhY2tzLmNwcAkocmV2aXNpb24gMTI1
MzM1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0VkaXRpbmdDYWxsYmFja3MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMywxMCArMzMsMTAgQEAKICNpbmNsdWRlICJEdW1wUmVuZGVyVHJl
ZS5oIgogI2luY2x1ZGUgIkVkaXRvckNsaWVudEVmbC5oIgogI2luY2x1ZGUgIkVkaXRvckluc2Vy
dEFjdGlvbi5oIgotI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAi
Tm9kZS5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5o
IgorI2luY2x1ZGUgIlRlc3RSdW5uZXIuaCIKICNpbmNsdWRlICJUZXh0QWZmaW5pdHkuaCIKICNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJF
ZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9MYXlvdXRUZXN0
Q29udHJvbGxlckVmbC5jcHAJKHJldmlzaW9uIDEyNTMzNSkKKysrIFRvb2xzL0R1bXBSZW5kZXJU
cmVlL2VmbC9MYXlvdXRUZXN0Q29udHJvbGxlckVmbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
OTI3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdl
YmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAwOSBKYW4gTWljaGFlbCBBbG9uem8gPGptYWxvbnpvQGdtYWlsLmNvbT4KLSAqIENv
cHlyaWdodCAoQykgMjAwOSwyMDExIENvbGxhYm9yYSBMdGQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgSm9vbmUgSHVyIDxqb29uZUBrbGRwLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBQcm9G
VVNJT04gRW1iZWRkZWQgU3lzdGVtcwotICogQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxl
Y3Ryb25pY3MKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgotCi0jaW5jbHVk
ZSAiRHVtcFJlbmRlclRyZWUuaCIKLSNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZUNocm9tZS5oIgot
I2luY2x1ZGUgIkpTU3RyaW5nVXRpbHMuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgot
I2luY2x1ZGUgIldlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5oIgotI2lu
Y2x1ZGUgIldvcmtRdWV1ZS5oIgotI2luY2x1ZGUgIldvcmtRdWV1ZUl0ZW0uaCIKLSNpbmNsdWRl
ICJld2tfcHJpdmF0ZS5oIgotI2luY2x1ZGUgPEVXZWJLaXQuaD4KLSNpbmNsdWRlIDxFY29yZV9G
aWxlLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L09wYXF1ZUpTU3RyaW5nLmg+Ci0jaW5jbHVkZSA8S1VSTC5oPgotI2luY2x1ZGUgPGVkaXRpbmcv
RmluZE9wdGlvbnMuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgotCi0vLyBTYW1lIGFzIE1hYyBjYWNoZSBtb2RlbCBlbnVtIGluIFNvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMuaC4KLWVudW0gewotICAgIFdlYkNhY2hl
TW9kZWxEb2N1bWVudFZpZXdlciA9IDAsCi0gICAgV2ViQ2FjaGVNb2RlbERvY3VtZW50QnJvd3Nl
ciA9IDEsCi0gICAgV2ViQ2FjaGVNb2RlbFByaW1hcnlXZWJCcm93c2VyID0gMgotfTsKLQotTGF5
b3V0VGVzdENvbnRyb2xsZXI6On5MYXlvdXRUZXN0Q29udHJvbGxlcigpCi17Ci19Ci0KLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZERpc2FsbG93ZWRVUkwoSlNTdHJpbmdSZWYpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xl
YXJCYWNrRm9yd2FyZExpc3QoKQotewotICAgIEV3a19IaXN0b3J5KiBoaXN0b3J5ID0gZXdrX3Zp
ZXdfaGlzdG9yeV9nZXQoYnJvd3Nlci0+bWFpblZpZXcoKSk7Ci0gICAgaWYgKCFoaXN0b3J5KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBFd2tfSGlzdG9yeV9JdGVtKiBpdGVtID0gZXdrX2hpc3Rv
cnlfaGlzdG9yeV9pdGVtX2N1cnJlbnRfZ2V0KGhpc3RvcnkpOwotICAgIGV3a19oaXN0b3J5X2Ns
ZWFyKGhpc3RvcnkpOwotICAgIGV3a19oaXN0b3J5X2hpc3RvcnlfaXRlbV9hZGQoaGlzdG9yeSwg
aXRlbSk7Ci0gICAgZXdrX2hpc3RvcnlfaGlzdG9yeV9pdGVtX3NldChoaXN0b3J5LCBpdGVtKTsK
LSAgICBld2tfaGlzdG9yeV9pdGVtX2ZyZWUoaXRlbSk7Ci19Ci0KLUpTU3RyaW5nUmVmIExheW91
dFRlc3RDb250cm9sbGVyOjpjb3B5RGVjb2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVmKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUpTU3RyaW5nUmVmIExheW91
dFRlc3RDb250cm9sbGVyOjpjb3B5RW5jb2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVmKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmRpc3BhdGNoUGVuZGluZ0xvYWRSZXF1ZXN0cygpCi17Ci0gICAgLy8gRklYTUU6
IEltcGxlbWVudCBmb3IgdGVzdGluZyBmaXggZm9yIDY3Mjc0OTUKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNwbGF5KCkKLXsKLSAgICBk
aXNwbGF5V2ViVmlldygpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjprZWVwV2Vi
SGlzdG9yeSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotSlNWYWx1ZVJlZiBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQotewotICAgIHJldHVybiBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRFZmw6OmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhjb250
ZXh0LCB2YWx1ZSk7Ci19Ci0KLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6bGF5ZXJUcmVlQXNUZXh0KCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4oQWRvcHQsIEpTU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCIiKSk7Ci19Ci0KLWludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
bnVtYmVyT2ZQYWdlcyhmbG9hdCBwYWdlV2lkdGgsIGZsb2F0IHBhZ2VIZWlnaHQpCi17Ci0gICAg
cmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6bnVtYmVyT2ZQYWdlcyhicm93c2VyLT5t
YWluRnJhbWUoKSwgcGFnZVdpZHRoLCBwYWdlSGVpZ2h0KTsKLX0KLQotSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpwYWdlUHJvcGVydHkoY29uc3QgY2hhciog
cHJvcGVydHlOYW1lLCBpbnQgcGFnZU51bWJlcikgY29uc3QKLXsKLSAgICBjb25zdCBTdHJpbmcg
cHJvcGVydHkgPSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnBhZ2VQcm9wZXJ0eShicm93c2Vy
LT5tYWluRnJhbWUoKSwgcHJvcGVydHlOYW1lLCBwYWdlTnVtYmVyKTsKLSAgICBpZiAocHJvcGVy
dHkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBwcm9wZXJ0eVZhbHVlKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
Zyhwcm9wZXJ0eS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgcmV0dXJuIHByb3BlcnR5VmFsdWU7Ci19
Ci0KLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVNp
emVBbmRNYXJnaW5zSW5QaXhlbHMoaW50IHBhZ2VOdW1iZXIsIGludCB3aWR0aCwgaW50IGhlaWdo
dCwgaW50IG1hcmdpblRvcCwgaW50IG1hcmdpblJpZ2h0LCBpbnQgbWFyZ2luQm90dG9tLCBpbnQg
bWFyZ2luTGVmdCkgY29uc3QKLXsKLSAgICBTdHJpbmcgcGFnZVNpemVBbmRNYXJnaW5zID0gRHVt
cFJlbmRlclRyZWVTdXBwb3J0RWZsOjpwYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVscyhicm93c2Vy
LT5tYWluRnJhbWUoKSwgcGFnZU51bWJlciwgd2lkdGgsIGhlaWdodCwgbWFyZ2luVG9wLCBtYXJn
aW5SaWdodCwgbWFyZ2luQm90dG9tLCBtYXJnaW5MZWZ0KTsKLQotICAgIGlmIChwYWdlU2l6ZUFu
ZE1hcmdpbnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiByZXR1cm5WYWx1ZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcocGFnZVNpemVBbmRNYXJnaW5zLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICByZXR1cm4gcmV0
dXJuVmFsdWU7Ci19Ci0KLXNpemVfdCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2ViSGlzdG9yeUl0
ZW1Db3VudCgpCi17Ci0gICAgY29uc3QgRXdrX0hpc3RvcnkqIGhpc3RvcnkgPSBld2tfdmlld19o
aXN0b3J5X2dldChicm93c2VyLT5tYWluVmlldygpKTsKLSAgICBpZiAoIWhpc3RvcnkpCi0gICAg
ICAgIHJldHVybiAtMTsKLQotICAgIHJldHVybiBld2tfaGlzdG9yeV9iYWNrX2xpc3RfbGVuZ3Ro
KGhpc3RvcnkpICsgZXdrX2hpc3RvcnlfZm9yd2FyZF9saXN0X2xlbmd0aChoaXN0b3J5KTsKLX0K
LQotdW5zaWduZWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndvcmtlclRocmVhZENvdW50KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjp3b3JrZXJUaHJlYWRD
b3VudCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpub3RpZnlEb25lKCkKLXsK
LSAgICBpZiAobV93YWl0VG9EdW1wICYmICF0b3BMb2FkaW5nRnJhbWUgJiYgIVdvcmtRdWV1ZTo6
c2hhcmVkKCktPmNvdW50KCkpCi0gICAgICAgIGR1bXAoKTsKLSAgICBtX3dhaXRUb0R1bXAgPSBm
YWxzZTsKLSAgICB3YWl0Rm9yUG9saWN5ID0gZmFsc2U7Ci19Ci0KLUpTU3RyaW5nUmVmIExheW91
dFRlc3RDb250cm9sbGVyOjpwYXRoVG9Mb2NhbFJlc291cmNlKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU1N0cmluZ1JlZiB1cmwpCi17Ci0gICAgU3RyaW5nIHJlcXVlc3RlZFVybCh1cmwtPmNoYXJh
Y3RlcnMoKSwgdXJsLT5sZW5ndGgoKSk7Ci0gICAgU3RyaW5nIHJlc291cmNlUm9vdDsKLSAgICBT
dHJpbmcgcmVxdWVzdGVkUm9vdDsKLQotICAgIGlmIChyZXF1ZXN0ZWRVcmwuZmluZCgiTGF5b3V0
VGVzdHMiKSAhPSBub3RGb3VuZCkgewotICAgICAgICAvLyBJZiB0aGUgVVJMIGNvbnRhaW5zIExh
eW91dFRlc3RzIHdlIG5lZWQgdG8gcmVtYXAgdGhhdCB0bwotICAgICAgICAvLyBMT0NBTF9SRVNP
VVJDRV9ST09UIHdoaWNoIGlzIHRoZSBwYXRoIG9mIHRoZSBMYXlvdXRUZXN0cyBkaXJlY3RvcnkK
LSAgICAgICAgLy8gd2l0aGluIHRoZSBXZWJLaXQgc291cmNlIHRyZWUuCi0gICAgICAgIHJlcXVl
c3RlZFJvb3QgPSAiL3RtcC9MYXlvdXRUZXN0cyI7Ci0gICAgICAgIHJlc291cmNlUm9vdCA9IGdl
dGVudigiTE9DQUxfUkVTT1VSQ0VfUk9PVCIpOwotICAgIH0gZWxzZSBpZiAocmVxdWVzdGVkVXJs
LmZpbmQoInRtcCIpICE9IG5vdEZvdW5kKSB7Ci0gICAgICAgIC8vIElmIHRoZSBVUkwgaXMgYSBj
aGlsZCBvZiAvdG1wIHdlIG5lZWQgdG8gY29udmVydCBpdCB0byBiZSBhIGNoaWxkCi0gICAgICAg
IC8vIERVTVBSRU5ERVJUUkVFX1RFTVAgcmVwbGFjZSB0bXAgd2l0aCBEVU1QUkVOREVSVFJFRV9U
RU1QCi0gICAgICAgIHJlcXVlc3RlZFJvb3QgPSAiL3RtcCI7Ci0gICAgICAgIHJlc291cmNlUm9v
dCA9IGdldGVudigiRFVNUFJFTkRFUlRSRUVfVEVNUCIpOwotICAgIH0KLQotICAgIHNpemVfdCBp
bmRleE9mUm9vdFN0YXJ0ID0gcmVxdWVzdGVkVXJsLnJldmVyc2VGaW5kKHJlcXVlc3RlZFJvb3Qp
OwotICAgIHNpemVfdCBpbmRleE9mU2VwYXJhdG9yQWZ0ZXJSb290ID0gaW5kZXhPZlJvb3RTdGFy
dCArIHJlcXVlc3RlZFJvb3QubGVuZ3RoKCk7Ci0gICAgU3RyaW5nIGZ1bGxQYXRoVG9VcmwgPSAi
ZmlsZTovLyIgKyByZXNvdXJjZVJvb3QgKyByZXF1ZXN0ZWRVcmwuc3Vic3RyaW5nKGluZGV4T2ZT
ZXBhcmF0b3JBZnRlclJvb3QpOwotCi0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKGZ1bGxQYXRoVG9VcmwudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnF1ZXVlTG9hZChKU1N0cmluZ1JlZiB1cmwsIEpTU3RyaW5nUmVmIHRhcmdl
dCkKLXsKLSAgICBXZWJDb3JlOjpLVVJMIGJhc2VVUkwoV2ViQ29yZTo6S1VSTCgpLCBTdHJpbmc6
OmZyb21VVEY4KGV3a19mcmFtZV91cmlfZ2V0KGJyb3dzZXItPm1haW5GcmFtZSgpKSkpOwotICAg
IFdlYkNvcmU6OktVUkwgYWJzb2x1dGVVUkwoYmFzZVVSTCwgV1RGOjpTdHJpbmcodXJsLT51c3Ry
aW5nKCkuaW1wbCgpKSk7Ci0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4ganNBYnNvbHV0
ZVVSTCgKLSAgICAgICAgQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGFic29s
dXRlVVJMLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpKTsKLQotICAgIFdvcmtRdWV1ZTo6c2hhcmVk
KCktPnF1ZXVlKG5ldyBMb2FkSXRlbShqc0Fic29sdXRlVVJMLmdldCgpLCB0YXJnZXQpKTsKLX0K
LQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWNjZXB0c0VkaXRpbmcoYm9vbCBhY2Nl
cHRzRWRpdGluZykKLXsKLSAgICBld2tfdmlld19lZGl0YWJsZV9zZXQoYnJvd3Nlci0+bWFpblZp
ZXcoKSwgYWNjZXB0c0VkaXRpbmcpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRBbHdheXNBY2NlcHRDb29raWVzKGJvb2wgYWx3YXlzQWNjZXB0Q29va2llcykKLXsKLSAgICBl
d2tfY29va2llc19wb2xpY3lfc2V0KGFsd2F5c0FjY2VwdENvb2tpZXMgPyBFV0tfQ09PS0lFX0pB
Ul9BQ0NFUFRfQUxXQVlTIDogRVdLX0NPT0tJRV9KQVJfQUNDRVBUX05FVkVSKTsKLX0KLQotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoYm9vbCBlbmFi
bGVkLCBib29sIHBlcm1pc3NpdmUpCi17Ci0gICAgcG9saWN5RGVsZWdhdGVFbmFibGVkID0gZW5h
YmxlZDsKLSAgICBwb2xpY3lEZWxlZ2F0ZVBlcm1pc3NpdmUgPSBwZXJtaXNzaXZlOwotfQotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjp3YWl0Rm9yUG9saWN5RGVsZWdhdGUoKQotewotICAg
IHNldEN1c3RvbVBvbGljeURlbGVnYXRlKHRydWUsIGZhbHNlKTsKLSAgICB3YWl0Rm9yUG9saWN5
ID0gdHJ1ZTsKLSAgICBzZXRXYWl0VG9EdW1wKHRydWUpOwotfQotCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRTY3JvbGxiYXJQb2xpY3koSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KEpTU3RyaW5nUmVmIHNvdXJjZU9yaWdpbiwg
SlNTdHJpbmdSZWYgcHJvdG9jb2wsIEpTU3RyaW5nUmVmIGhvc3QsIGJvb2wgaW5jbHVkZVN1YmRv
bWFpbnMpCi17Ci0gICAgV2ViQ29yZTo6S1VSTCBrdXJsOwotICAgIGt1cmwuc2V0UHJvdG9jb2wo
U3RyaW5nKHByb3RvY29sLT5jaGFyYWN0ZXJzKCksIHByb3RvY29sLT5sZW5ndGgoKSkpOwotICAg
IGt1cmwuc2V0SG9zdChTdHJpbmcoaG9zdC0+Y2hhcmFjdGVycygpLCBob3N0LT5sZW5ndGgoKSkp
OwotCi0gICAgZXdrX3NlY3VyaXR5X3BvbGljeV93aGl0ZWxpc3Rfb3JpZ2luX2FkZChzb3VyY2VP
cmlnaW4tPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBrdXJsLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCksIGluY2x1ZGVTdWJkb21haW5zKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoSlNTdHJpbmdSZWYgc291cmNlT3JpZ2lu
LCBKU1N0cmluZ1JlZiBwcm90b2NvbCwgSlNTdHJpbmdSZWYgaG9zdCwgYm9vbCBpbmNsdWRlU3Vi
ZG9tYWlucykKLXsKLSAgICBXZWJDb3JlOjpLVVJMIGt1cmw7Ci0gICAga3VybC5zZXRQcm90b2Nv
bChTdHJpbmcocHJvdG9jb2wtPmNoYXJhY3RlcnMoKSwgcHJvdG9jb2wtPmxlbmd0aCgpKSk7Ci0g
ICAga3VybC5zZXRIb3N0KFN0cmluZyhob3N0LT5jaGFyYWN0ZXJzKCksIGhvc3QtPmxlbmd0aCgp
KSk7Ci0KLSAgICBld2tfc2VjdXJpdHlfcG9saWN5X3doaXRlbGlzdF9vcmlnaW5fZGVsKHNvdXJj
ZU9yaWdpbi0+dXN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGt1cmwuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSwgaW5jbHVkZVN1YmRvbWFpbnMpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRNYWluRnJhbWVJc0ZpcnN0UmVzcG9uZGVyKGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VGFiS2V5Q3ljbGVzVGhy
b3VnaEVsZW1lbnRzKGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlRGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUoYm9v
bCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1zdGF0aWMgQ1N0cmluZyBnVXNlclN0
eWxlU2hlZXQ7Ci1zdGF0aWMgYm9vbCBnVXNlclN0eWxlU2hlZXRFbmFibGVkID0gdHJ1ZTsKLQot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKGJvb2wg
ZmxhZykKLXsKLSAgICBnVXNlclN0eWxlU2hlZXRFbmFibGVkID0gZmxhZzsKLSAgICBld2tfdmll
d19zZXR0aW5nX3VzZXJfc3R5bGVzaGVldF9zZXQoYnJvd3Nlci0+bWFpblZpZXcoKSwgZmxhZyA/
IGdVc2VyU3R5bGVTaGVldC5kYXRhKCkgOiAwKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihKU1N0cmluZ1JlZiBwYXRoKQotewotICAg
IGdVc2VyU3R5bGVTaGVldCA9IHBhdGgtPnVzdHJpbmcoKS51dGY4KCk7Ci0KLSAgICBpZiAoZ1Vz
ZXJTdHlsZVNoZWV0RW5hYmxlZCkKLSAgICAgICAgc2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKHRy
dWUpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRWYWx1ZUZvclVzZXIoSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgbm9kZU9iamVjdCwgSlNTdHJpbmdSZWYgdmFs
dWUpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpzZXRWYWx1ZUZvclVzZXIoY29u
dGV4dCwgbm9kZU9iamVjdCwgV1RGOjpTdHJpbmcodmFsdWUtPnVzdHJpbmcoKS5pbXBsKCkpKTsK
LX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Vmlld01vZGVNZWRpYUZlYXR1cmUo
SlNTdHJpbmdSZWYgbW9kZSkKLXsKLSAgICBFdmFzX09iamVjdCogdmlldyA9IGJyb3dzZXItPm1h
aW5WaWV3KCk7Ci0gICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZXF1
YWxzKG1vZGUsICJ3aW5kb3dlZCIpKQotICAgICAgICBld2tfdmlld19tb2RlX3NldCh2aWV3LCBF
V0tfVklFV19NT0RFX1dJTkRPV0VEKTsKLSAgICBlbHNlIGlmIChlcXVhbHMobW9kZSwgImZsb2F0
aW5nIikpCi0gICAgICAgIGV3a192aWV3X21vZGVfc2V0KHZpZXcsIEVXS19WSUVXX01PREVfRkxP
QVRJTkcpOwotICAgIGVsc2UgaWYgKGVxdWFscyhtb2RlLCAiZnVsbHNjcmVlbiIpKQotICAgICAg
ICBld2tfdmlld19tb2RlX3NldCh2aWV3LCBFV0tfVklFV19NT0RFX0ZVTExTQ1JFRU4pOwotICAg
IGVsc2UgaWYgKGVxdWFscyhtb2RlLCAibWF4aW1pemVkIikpCi0gICAgICAgIGV3a192aWV3X21v
ZGVfc2V0KHZpZXcsIEVXS19WSUVXX01PREVfTUFYSU1JWkVEKTsKLSAgICBlbHNlIGlmIChlcXVh
bHMobW9kZSwgIm1pbmltaXplZCIpKQotICAgICAgICBld2tfdmlld19tb2RlX3NldCh2aWV3LCBF
V0tfVklFV19NT0RFX01JTklNSVpFRCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFdpbmRvd0lzS2V5KGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkKGJvb2wg
ZmxhZykKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnNldFNtYXJ0SW5zZXJ0RGVs
ZXRlRW5hYmxlZChicm93c2VyLT5tYWluVmlldygpLCBmbGFnKTsKLX0KLQotc3RhdGljIEVpbmFf
Qm9vbCB3YWl0VG9EdW1wV2F0Y2hkb2dGaXJlZCh2b2lkKikKLXsKLSAgICB3YWl0VG9EdW1wV2F0
Y2hkb2cgPSAwOwotICAgIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+d2FpdFRvRHVtcFdhdGNoZG9n
VGltZXJGaXJlZCgpOwotICAgIHJldHVybiBFQ09SRV9DQUxMQkFDS19DQU5DRUw7Ci19Ci0KLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdhaXRUb0R1bXAoYm9vbCB3YWl0VW50aWxEb25l
KQotewotICAgIHN0YXRpYyBjb25zdCBkb3VibGUgdGltZW91dFNlY29uZHMgPSAzMDsKLQotICAg
IG1fd2FpdFRvRHVtcCA9IHdhaXRVbnRpbERvbmU7Ci0gICAgaWYgKG1fd2FpdFRvRHVtcCAmJiAh
d2FpdFRvRHVtcFdhdGNoZG9nKQotICAgICAgICB3YWl0VG9EdW1wV2F0Y2hkb2cgPSBlY29yZV90
aW1lcl9hZGQodGltZW91dFNlY29uZHMsIHdhaXRUb0R1bXBXYXRjaGRvZ0ZpcmVkLCAwKTsKLX0K
LQotaW50IExheW91dFRlc3RDb250cm9sbGVyOjp3aW5kb3dDb3VudCgpCi17Ci0gICAgcmV0dXJu
IGJyb3dzZXItPmV4dHJhVmlld3MoKS5zaXplKCkgKyAxOyAvLyArIDEgZm9yIHRoZSBtYWluIHZp
ZXcuCi19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFByaXZhdGVCcm93c2luZ0Vu
YWJsZWQoYm9vbCBmbGFnKQotewotICAgIGV3a192aWV3X3NldHRpbmdfcHJpdmF0ZV9icm93c2lu
Z19zZXQoYnJvd3Nlci0+bWFpblZpZXcoKSwgZmxhZyk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQoYm9vbCBmbGFnKQotewot
ICAgIGV3a192aWV3X3NldHRpbmdfc2NyaXB0c19jYW5fYWNjZXNzX2NsaXBib2FyZF9zZXQoYnJv
d3Nlci0+bWFpblZpZXcoKSwgZmxhZyk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFhTU0F1ZGl0b3JFbmFibGVkKGJvb2wgZmxhZykKLXsKLSAgICBld2tfdmlld19zZXR0aW5n
X2VuYWJsZV94c3NfYXVkaXRvcl9zZXQoYnJvd3Nlci0+bWFpblZpZXcoKSwgZmxhZyk7Ci19Ci0K
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoYm9v
bCBmbGFnKQotewotICAgIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2ZyYW1lX2ZsYXR0ZW5pbmdf
c2V0KGJyb3dzZXItPm1haW5WaWV3KCksIGZsYWcpOwotfQotCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoYm9vbCBmbGFnKQotewotICAgIGV3
a192aWV3X3NldHRpbmdfc3BhdGlhbF9uYXZpZ2F0aW9uX3NldChicm93c2VyLT5tYWluVmlldygp
LCBmbGFnKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dVbml2ZXJz
YWxBY2Nlc3NGcm9tRmlsZVVSTHMoYm9vbCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVS
THMoYm9vbCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChib29sIGZsYWcpCi17Ci0g
ICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxl
ZChicm93c2VyLT5tYWluVmlldygpLCBmbGFnKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0QXV0b2ZpbGxlZChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBub2Rl
T2JqZWN0LCBib29sIGF1dG9maWxsZWQpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZs
OjpzZXRBdXRvZmlsbGVkKGNvbnRleHQsIG5vZGVPYmplY3QsIGF1dG9maWxsZWQpOwotfQotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNhYmxlSW1hZ2VMb2FkaW5nKCkKLXsKLSAgICBl
d2tfdmlld19zZXR0aW5nX2F1dG9fbG9hZF9pbWFnZXNfc2V0KGJyb3dzZXItPm1haW5WaWV3KCks
IEVJTkFfRkFMU0UpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrRGV2
aWNlT3JpZW50YXRpb24oYm9vbCwgZG91YmxlLCBib29sLCBkb3VibGUsIGJvb2wsIGRvdWJsZSkK
LXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBEZXZpY2VPcmllbnRhdGlvbiBsYXlvdXQg
dGVzdHMuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zMDMzNS4KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUsIGRvdWJsZSwgZG91Ymxl
KQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIEdlb2xvY2F0aW9uIGxheW91dCB0ZXN0
cy4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4
MjY0LgotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldE1vY2tHZW9sb2NhdGlvbkVycm9yKGludCwgSlNTdHJpbmdSZWYpCi17Ci0gICAgLy8g
RklYTUU6IEltcGxlbWVudCBmb3IgR2VvbG9jYXRpb24gbGF5b3V0IHRlc3RzLgotICAgIC8vIFNl
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgyNjQuCi0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0R2VvbG9j
YXRpb25QZXJtaXNzaW9uKGJvb2wgYWxsb3cpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBm
b3IgR2VvbG9jYXRpb24gbGF5b3V0IHRlc3RzLgotICAgIHNldEdlb2xvY2F0aW9uUGVybWlzc2lv
bkNvbW1vbihhbGxvdyk7Ci19Ci0KLWludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQ
ZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoKQotewotICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgZm9yIEdlb2xvY2F0aW9uIGxheW91dCB0ZXN0cy4KLSAgICByZXR1cm4gLTE7Ci19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdChK
U1N0cmluZ1JlZiwgZG91YmxlLCBKU1N0cmluZ1JlZikKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IGZvciBzcGVlY2ggaW5wdXQgbGF5b3V0IHRlc3RzLgotICAgIC8vIFNlZSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCi0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja1NwZWVjaElucHV0RHVt
cFJlY3QoYm9vbCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBzcGVlY2ggaW5wdXQg
bGF5b3V0IHRlc3RzLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Mzk0ODUuCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c3RhcnRTcGVlY2hJbnB1dChKU0NvbnRleHRSZWYgaW5wdXRFbGVtZW50
KQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIHNwZWVjaCBpbnB1dCBsYXlvdXQgdGVz
dHMuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
OTQ4NS4KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBld2tfc2V0
dGluZ3NfaWNvbl9kYXRhYmFzZV9wYXRoX3NldCgwKTsKLQotICAgIGlmICghZW5hYmxlZCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5nIGRhdGFiYXNlUGF0aDsKLSAgICBjb25zdCBjaGFy
KiB0ZW1wRGlyID0gZ2V0ZW52KCJUTVBESVIiKTsKLQotICAgIGlmICh0ZW1wRGlyKQotICAgICAg
ICBkYXRhYmFzZVBhdGggPSBTdHJpbmc6OmZyb21VVEY4KHRlbXBEaXIpOwotICAgIGVsc2UgaWYg
KHRlbXBEaXIgPSBnZXRlbnYoIlRFTVAiKSkKLSAgICAgICAgZGF0YWJhc2VQYXRoID0gU3RyaW5n
Ojpmcm9tVVRGOCh0ZW1wRGlyKTsKLSAgICBlbHNlCi0gICAgICAgIGRhdGFiYXNlUGF0aCA9IFN0
cmluZzo6ZnJvbVVURjgoIi90bXAiKTsKLQotICAgIGRhdGFiYXNlUGF0aC5hcHBlbmQoIi9EdW1w
UmVuZGVyVHJlZS9JY29uRGF0YWJhc2UiKTsKLQotICAgIGlmIChlY29yZV9maWxlX21rcGF0aChk
YXRhYmFzZVBhdGgudXRmOCgpLmRhdGEoKSkpCi0gICAgICAgIGV3a19zZXR0aW5nc19pY29uX2Rh
dGFiYXNlX3BhdGhfc2V0KGRhdGFiYXNlUGF0aC51dGY4KCkuZGF0YSgpKTsKLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChi
b29sIGZsYWcpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpzZXRTZWxlY3RUcmFp
bGluZ1doaXRlc3BhY2VFbmFibGVkKGJyb3dzZXItPm1haW5WaWV3KCksIGZsYWcpOwotfQotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQb3B1cEJsb2NraW5nRW5hYmxlZChib29sIGZs
YWcpCi17Ci0gICAgZXdrX3ZpZXdfc2V0dGluZ19zY3JpcHRzX2Nhbl9vcGVuX3dpbmRvd3Nfc2V0
KGJyb3dzZXItPm1haW5WaWV3KCksICFmbGFnKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0UGx1Z2luc0VuYWJsZWQoYm9vbCBmbGFnKQotewotICAgIGV3a192aWV3X3NldHRp
bmdfZW5hYmxlX3BsdWdpbnNfc2V0KGJyb3dzZXItPm1haW5WaWV3KCksIGZsYWcpOwotfQotCi1i
b29sIExheW91dFRlc3RDb250cm9sbGVyOjplbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1l
bnRXaXRoSWQoSlNTdHJpbmdSZWYgaWQpCi17Ci0gICAgY29uc3QgU3RyaW5nIGVsZW1lbnRJZChp
ZC0+dXN0cmluZygpLmltcGwoKSk7Ci0gICAgY29uc3QgRXZhc19PYmplY3QqIG1haW5GcmFtZSA9
IGJyb3dzZXItPm1haW5GcmFtZSgpOwotICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRF
Zmw6OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZChtYWluRnJhbWUsIGVs
ZW1lbnRJZCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV4ZWNDb21tYW5kKEpT
U3RyaW5nUmVmIG5hbWUsIEpTU3RyaW5nUmVmIHZhbHVlKQotewotICAgIER1bXBSZW5kZXJUcmVl
U3VwcG9ydEVmbDo6ZXhlY3V0ZUNvcmVDb21tYW5kQnlOYW1lKGJyb3dzZXItPm1haW5WaWV3KCks
IG5hbWUtPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpLCB2YWx1ZS0+dXN0cmluZygpLnV0ZjgoKS5k
YXRhKCkpOwotfQotCi1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjpmaW5kU3RyaW5nKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU1N0cmluZ1JlZiB0YXJnZXQsIEpTT2JqZWN0UmVmIG9wdGlvbnNB
cnJheSkKLXsKLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gbGVuZ3RoUHJvcGVydHlOYW1l
KEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgIEpT
VmFsdWVSZWYgbGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIG9wdGlv
bnNBcnJheSwgbGVuZ3RoUHJvcGVydHlOYW1lLmdldCgpLCAwKTsKLSAgICBpZiAoIUpTVmFsdWVJ
c051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIFdlYkNvcmU6OkZpbmRPcHRpb25zIG9wdGlvbnMgPSAwOwotCi0gICAgY29uc3Qgc2l6ZV90
IGxlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxl
bmd0aFZhbHVlLCAwKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
ewotICAgICAgICBKU1ZhbHVlUmVmIHZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgo
Y29udGV4dCwgb3B0aW9uc0FycmF5LCBpLCAwKTsKLSAgICAgICAgaWYgKCFKU1ZhbHVlSXNTdHJp
bmcoY29udGV4dCwgdmFsdWUpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG9wdGlvbk5hbWUoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0Nv
cHkoY29udGV4dCwgdmFsdWUsIDApKTsKLQotICAgICAgICBpZiAoZXF1YWxzKG9wdGlvbk5hbWUs
ICJDYXNlSW5zZW5zaXRpdmUiKSkKLSAgICAgICAgICAgIG9wdGlvbnMgfD0gV2ViQ29yZTo6Q2Fz
ZUluc2Vuc2l0aXZlOwotICAgICAgICBlbHNlIGlmIChlcXVhbHMob3B0aW9uTmFtZSwgIkF0V29y
ZFN0YXJ0cyIpKQotICAgICAgICAgICAgb3B0aW9ucyB8PSBXZWJDb3JlOjpBdFdvcmRTdGFydHM7
Ci0gICAgICAgIGVsc2UgaWYgKGVxdWFscyhvcHRpb25OYW1lLCAiVHJlYXRNZWRpYWxDYXBpdGFs
QXNXb3JkU3RhcnQiKSkKLSAgICAgICAgICAgIG9wdGlvbnMgfD0gV2ViQ29yZTo6VHJlYXRNZWRp
YWxDYXBpdGFsQXNXb3JkU3RhcnQ7Ci0gICAgICAgIGVsc2UgaWYgKGVxdWFscyhvcHRpb25OYW1l
LCAiQmFja3dhcmRzIikpCi0gICAgICAgICAgICBvcHRpb25zIHw9IFdlYkNvcmU6OkJhY2t3YXJk
czsKLSAgICAgICAgZWxzZSBpZiAoZXF1YWxzKG9wdGlvbk5hbWUsICJXcmFwQXJvdW5kIikpCi0g
ICAgICAgICAgICBvcHRpb25zIHw9IFdlYkNvcmU6OldyYXBBcm91bmQ7Ci0gICAgICAgIGVsc2Ug
aWYgKGVxdWFscyhvcHRpb25OYW1lLCAiU3RhcnRJblNlbGVjdGlvbiIpKQotICAgICAgICAgICAg
b3B0aW9ucyB8PSBXZWJDb3JlOjpTdGFydEluU2VsZWN0aW9uOwotICAgIH0KLQotICAgIHJldHVy
biBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmZpbmRTdHJpbmcoYnJvd3Nlci0+bWFpblZpZXco
KSwgV1RGOjpTdHJpbmcodGFyZ2V0LT51c3RyaW5nKCkuaW1wbCgpKSwgb3B0aW9ucyk7Ci19Ci0K
LWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmlzQ29tbWFuZEVuYWJsZWQoSlNTdHJpbmdSZWYg
bmFtZSkKLXsKLSAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjppc0NvbW1hbmRF
bmFibGVkKGJyb3dzZXItPm1haW5WaWV3KCksIG5hbWUtPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q2FjaGVNb2RlbChpbnQgY2Fj
aGVNb2RlbCkKLXsKLSAgICB1bnNpZ25lZCBpbnQgY2FjaGVUb3RhbENhcGFjaXR5OwotICAgIHVu
c2lnbmVkIGludCBjYWNoZU1pbkRlYWRDYXBhY2l0eTsKLSAgICB1bnNpZ25lZCBpbnQgY2FjaGVN
YXhEZWFkQ2FwYWNpdHk7Ci0gICAgZG91YmxlIGRlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2
YWw7Ci0gICAgdW5zaWduZWQgaW50IHBhZ2VDYWNoZUNhcGFjaXR5OwotCi0gICAgLy8gVGhlc2Ug
Y29uc3RhbnRzIGFyZSBkZXJpdmVkIGZyb20gdGhlIE1hYyBjYWNoZSBtb2RlbCBlbnVtIGluIFNv
dXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMuaC4KLSAgICBzd2l0Y2ggKGNh
Y2hlTW9kZWwpIHsKLSAgICBjYXNlIFdlYkNhY2hlTW9kZWxEb2N1bWVudFZpZXdlcjoKLSAgICAg
ICAgcGFnZUNhY2hlQ2FwYWNpdHkgPSAwOwotICAgICAgICBjYWNoZVRvdGFsQ2FwYWNpdHkgPSAw
OwotICAgICAgICBjYWNoZU1pbkRlYWRDYXBhY2l0eSA9IDA7Ci0gICAgICAgIGNhY2hlTWF4RGVh
ZENhcGFjaXR5ID0gMDsKLSAgICAgICAgZGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbCA9
IDA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2ViQ2FjaGVNb2RlbERvY3VtZW50QnJvd3Nl
cjoKLSAgICAgICAgcGFnZUNhY2hlQ2FwYWNpdHkgPSAyOwotICAgICAgICBjYWNoZVRvdGFsQ2Fw
YWNpdHkgPSAxNiAqIDEwMjQgKiAxMDI0OwotICAgICAgICBjYWNoZU1pbkRlYWRDYXBhY2l0eSA9
IGNhY2hlVG90YWxDYXBhY2l0eSAvIDg7Ci0gICAgICAgIGNhY2hlTWF4RGVhZENhcGFjaXR5ID0g
Y2FjaGVUb3RhbENhcGFjaXR5IC8gNDsKLSAgICAgICAgZGVhZERlY29kZWREYXRhRGVsZXRpb25J
bnRlcnZhbCA9IDA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2ViQ2FjaGVNb2RlbFByaW1h
cnlXZWJCcm93c2VyOgotICAgICAgICBwYWdlQ2FjaGVDYXBhY2l0eSA9IDM7Ci0gICAgICAgIGNh
Y2hlVG90YWxDYXBhY2l0eSA9IDMyICogMTAyNCAqIDEwMjQ7Ci0gICAgICAgIGNhY2hlTWluRGVh
ZENhcGFjaXR5ID0gY2FjaGVUb3RhbENhcGFjaXR5IC8gNDsKLSAgICAgICAgY2FjaGVNYXhEZWFk
Q2FwYWNpdHkgPSBjYWNoZVRvdGFsQ2FwYWNpdHkgLyAyOwotICAgICAgICBkZWFkRGVjb2RlZERh
dGFEZWxldGlvbkludGVydmFsID0gNjA7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIGZwcmludGYoc3RkZXJyLCAidHJ5aW5nIHRvIHNldCBhbiBpbnZhbGlkIHZhbHVlICVk
IGZvciB0aGUgQ2FjaGUgbW9kZWwuIiwgY2FjaGVNb2RlbCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBld2tfc2V0dGluZ3Nfb2JqZWN0X2NhY2hlX2NhcGFjaXR5X3NldChjYWNoZU1p
bkRlYWRDYXBhY2l0eSwgY2FjaGVNYXhEZWFkQ2FwYWNpdHksIGNhY2hlVG90YWxDYXBhY2l0eSk7
Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpzZXREZWFkRGVjb2RlZERhdGFEZWxldGlv
bkludGVydmFsKGRlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwpOwotICAgIGV3a19zZXR0
aW5nc19wYWdlX2NhY2hlX2NhcGFjaXR5X3NldChwYWdlQ2FjaGVDYXBhY2l0eSk7Ci19Ci0KLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldExvY2F0
aW9uKEpTU3RyaW5nUmVmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyUGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0KCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVh
ckFsbEFwcGxpY2F0aW9uQ2FjaGVzKCkKLXsKLSAgICBld2tfc2V0dGluZ3NfYXBwbGljYXRpb25f
Y2FjaGVfY2xlYXIoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXBwbGlj
YXRpb25DYWNoZU9yaWdpblF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSkKLXsKLSAgICBF
d2tfU2VjdXJpdHlfT3JpZ2luKiBvcmlnaW4gPSBld2tfZnJhbWVfc2VjdXJpdHlfb3JpZ2luX2dl
dChicm93c2VyLT5tYWluRnJhbWUoKSk7Ci0gICAgZXdrX3NlY3VyaXR5X29yaWdpbl9hcHBsaWNh
dGlvbl9jYWNoZV9xdW90YV9zZXQob3JpZ2luLCBxdW90YSk7Ci0gICAgZXdrX3NlY3VyaXR5X29y
aWdpbl9mcmVlKG9yaWdpbik7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFy
QXBwbGljYXRpb25DYWNoZUZvck9yaWdpbihPcGFxdWVKU1N0cmluZyogdXJsKQotewotICAgIEV3
a19TZWN1cml0eV9PcmlnaW4qIG9yaWdpbiA9IGV3a19zZWN1cml0eV9vcmlnaW5fbmV3X2Zyb21f
c3RyaW5nKHVybC0+dXN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGV3a19zZWN1cml0eV9v
cmlnaW5fYXBwbGljYXRpb25fY2FjaGVfY2xlYXIob3JpZ2luKTsKLSAgICBld2tfc2VjdXJpdHlf
b3JpZ2luX2ZyZWUob3JpZ2luKTsKLX0KLQotbG9uZyBsb25nIExheW91dFRlc3RDb250cm9sbGVy
Ojpsb2NhbFN0b3JhZ2VEaXNrVXNhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYpCi17Ci0gICAgLy8g
RklYTUU6IEltcGxlbWVudCB0byBzdXBwb3J0IGdldHRpbmcgZGlzayB1c2FnZSBpbiBieXRlcyBm
b3IgYW4gb3JpZ2luLgotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LUpTVmFsdWVSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoQXBwbGljYXRpb25D
YWNoZShKU0NvbnRleHRSZWYgY29udGV4dCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRv
IGdldCBvcmlnaW5zIHRoYXQgY29udGFpbiBhcHBsaWNhdGlvbiBjYWNoZXMuCi0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19
Ci0KLWxvbmcgbG9uZyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YXBwbGljYXRpb25DYWNoZURpc2tV
c2FnZUZvck9yaWdpbihKU1N0cmluZ1JlZikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiAwOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbERhdGFi
YXNlcygpCi17Ci0gICAgZXdrX3dlYl9kYXRhYmFzZV9yZW1vdmVfYWxsKCk7Ci19Ci0KLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERhdGFiYXNlUXVvdGEodW5zaWduZWQgbG9uZyBsb25n
IHF1b3RhKQotewotICAgIEV3a19TZWN1cml0eV9PcmlnaW4qIG9yaWdpbiA9IGV3a19mcmFtZV9z
ZWN1cml0eV9vcmlnaW5fZ2V0KGJyb3dzZXItPm1haW5GcmFtZSgpKTsKLSAgICBld2tfc2VjdXJp
dHlfb3JpZ2luX3dlYl9kYXRhYmFzZV9xdW90YV9zZXQob3JpZ2luLCBxdW90YSk7Ci0gICAgZXdr
X3NlY3VyaXR5X29yaWdpbl9mcmVlKG9yaWdpbik7Ci19Ci0KLUpTVmFsdWVSZWYgTGF5b3V0VGVz
dENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKEpTQ29udGV4dFJlZiBjb250ZXh0
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVBbGxM
b2NhbFN0b3JhZ2UoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbihKU1N0cmluZ1JlZikK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKHVuc2lnbmVkKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN5bmNMb2Nh
bFN0b3JhZ2UoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoYm9v
bCBmb3JiaWRkZW4sIEpTU3RyaW5nUmVmIHNjaGVtZSkKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRFZmw6OnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoZm9yYmlk
ZGVuLCBXVEY6OlN0cmluZyhzY2hlbWUtPnVzdHJpbmcoKS5pbXBsKCkpKTsKLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6Z29CYWNrKCkKLXsKLSAgICBld2tfZnJhbWVfYmFjayhicm93
c2VyLT5tYWluRnJhbWUoKSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERl
ZmVyc0xvYWRpbmcoYm9vbCBkZWZlcnMpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZs
OjpzZXREZWZlcnNMb2FkaW5nKGJyb3dzZXItPm1haW5WaWV3KCksIGRlZmVycyk7Ci19Ci0KLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFwcENhY2hlTWF4aW11bVNpemUodW5zaWduZWQg
bG9uZyBsb25nIHNpemUpCi17Ci0gICAgZXdrX3NldHRpbmdzX2FwcGxpY2F0aW9uX2NhY2hlX21h
eF9xdW90YV9zZXQoc2l6ZSk7Ci19Ci0KLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNl
QW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIGFuaW1hdGlvbk5hbWUs
IGRvdWJsZSB0aW1lLCBKU1N0cmluZ1JlZiBlbGVtZW50SWQpCi17Ci0gICAgcmV0dXJuIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydEVmbDo6cGF1c2VBbmltYXRpb24oYnJvd3Nlci0+bWFpbkZyYW1lKCks
IGFuaW1hdGlvbk5hbWUtPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBlbGVtZW50SWQtPnVzdHJp
bmcoKS51dGY4KCkuZGF0YSgpLCB0aW1lKTsKLX0KLQotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIHByb3Bl
cnR5TmFtZSwgZG91YmxlIHRpbWUsIEpTU3RyaW5nUmVmIGVsZW1lbnRJZCkKLXsKLSAgICByZXR1
cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpwYXVzZVRyYW5zaXRpb24oYnJvd3Nlci0+bWFp
bkZyYW1lKCksIHByb3BlcnR5TmFtZS0+dXN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGVsZW1lbnRJ
ZC0+dXN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHRpbWUpOwotfQotCi11bnNpZ25lZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjphY3RpdmVBbmltYXRpb25zQ291bnQoYnJv
d3Nlci0+bWFpbkZyYW1lKCkpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgdG9Cb29sKEpTU3Ry
aW5nUmVmIHZhbHVlKQotewotICAgIHJldHVybiBlcXVhbHModmFsdWUsICJ0cnVlIikgfHwgZXF1
YWxzKHZhbHVlLCAiMSIpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCB0b0ludChKU1N0cmluZ1Jl
ZiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gYXRvaSh2YWx1ZS0+dXN0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvdmVycmlkZVByZWZlcmVuY2Uo
SlNTdHJpbmdSZWYga2V5LCBKU1N0cmluZ1JlZiB2YWx1ZSkKLXsKLSAgICBpZiAoZXF1YWxzKGtl
eSwgIldlYktpdEphdmFTY3JpcHRFbmFibGVkIikpCi0gICAgICAgIGV3a192aWV3X3NldHRpbmdf
ZW5hYmxlX3NjcmlwdHNfc2V0KGJyb3dzZXItPm1haW5WaWV3KCksIHRvQm9vbCh2YWx1ZSkpOwot
ICAgIGVsc2UgaWYgKGVxdWFscyhrZXksICJXZWJLaXREZWZhdWx0Rm9udFNpemUiKSkKLSAgICAg
ICAgZXdrX3ZpZXdfc2V0dGluZ19mb250X2RlZmF1bHRfc2l6ZV9zZXQoYnJvd3Nlci0+bWFpblZp
ZXcoKSwgdG9JbnQodmFsdWUpKTsKLSAgICBlbHNlIGlmIChlcXVhbHMoa2V5LCAiV2ViS2l0TWlu
aW11bUZvbnRTaXplIikpCi0gICAgICAgIGV3a192aWV3X3NldHRpbmdfZm9udF9taW5pbXVtX3Np
emVfc2V0KGJyb3dzZXItPm1haW5WaWV3KCksIHRvSW50KHZhbHVlKSk7Ci0gICAgZWxzZSBpZiAo
ZXF1YWxzKGtleSwgIldlYktpdFBsdWdpbnNFbmFibGVkIikpCi0gICAgICAgIGV3a192aWV3X3Nl
dHRpbmdfZW5hYmxlX3BsdWdpbnNfc2V0KGJyb3dzZXItPm1haW5WaWV3KCksIHRvQm9vbCh2YWx1
ZSkpOwotICAgIGVsc2UgaWYgKGVxdWFscyhrZXksICJXZWJLaXRXZWJHTEVuYWJsZWQiKSkKLSAg
ICAgICAgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfd2ViZ2xfc2V0KGJyb3dzZXItPm1haW5WaWV3
KCksIHRvQm9vbCh2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGVxdWFscyhrZXksICJXZWJLaXRFbmFi
bGVDYXJldEJyb3dzaW5nIikpCi0gICAgICAgIGV3a192aWV3X3NldHRpbmdfY2FyZXRfYnJvd3Np
bmdfc2V0KGJyb3dzZXItPm1haW5WaWV3KCksIHRvQm9vbCh2YWx1ZSkpOwotICAgIGVsc2UgaWYg
KGVxdWFscyhrZXksICJXZWJLaXRVc2VzUGFnZUNhY2hlUHJlZmVyZW5jZUtleSIpKQotICAgICAg
ICBld2tfdmlld19zZXR0aW5nX3BhZ2VfY2FjaGVfc2V0KGJyb3dzZXItPm1haW5WaWV3KCksIHRv
Qm9vbCh2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGVxdWFscyhrZXksICJXZWJLaXRIeXBlcmxpbmtB
dWRpdGluZ0VuYWJsZWQiKSkKLSAgICAgICAgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfaHlwZXJs
aW5rX2F1ZGl0aW5nX3NldChicm93c2VyLT5tYWluVmlldygpLCB0b0Jvb2wodmFsdWUpKTsKLSAg
ICBlbHNlIGlmIChlcXVhbHMoa2V5LCAiV2ViS2l0VGFiVG9MaW5rc1ByZWZlcmVuY2VLZXkiKSkK
LSAgICAgICAgZXdrX3ZpZXdfc2V0dGluZ19pbmNsdWRlX2xpbmtzX2luX2ZvY3VzX2NoYWluX3Nl
dChicm93c2VyLT5tYWluVmlldygpLCB0b0Jvb2wodmFsdWUpKTsKLSAgICBlbHNlIGlmIChlcXVh
bHMoa2V5LCAiV2ViS2l0T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkIikpCi0gICAg
ICAgIGV3a192aWV3X3NldHRpbmdfYXBwbGljYXRpb25fY2FjaGVfc2V0KGJyb3dzZXItPm1haW5W
aWV3KCksIHRvQm9vbCh2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGVxdWFscyhrZXksICJXZWJLaXRM
b2FkU2l0ZUljb25zS2V5IikpCi0gICAgICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c2V0
TG9hZHNTaXRlSWNvbnNJZ25vcmluZ0ltYWdlTG9hZGluZ1NldHRpbmcoYnJvd3Nlci0+bWFpblZp
ZXcoKSwgdG9Cb29sKHZhbHVlKSk7Ci0gICAgZWxzZSBpZiAoZXF1YWxzKGtleSwgIldlYktpdENT
U0dyaWRMYXlvdXRFbmFibGVkIikpCi0gICAgICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6
c2V0Q1NTR3JpZExheW91dEVuYWJsZWQoYnJvd3Nlci0+bWFpblZpZXcoKSwgdG9Cb29sKHZhbHVl
KSk7Ci0gICAgZWxzZSBpZiAoZXF1YWxzKGtleSwgIldlYktpdFdlYkF1ZGlvRW5hYmxlZCIpKQot
ICAgICAgICBld2tfdmlld19zZXR0aW5nX3dlYl9hdWRpb19zZXQoYnJvd3Nlci0+bWFpblZpZXco
KSwgdG9Cb29sKHZhbHVlKSk7Ci0gICAgZWxzZQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkxh
eW91dFRlc3RDb250cm9sbGVyOjpvdmVycmlkZVByZWZlcmVuY2UgdHJpZWQgdG8gb3ZlcnJpZGUg
dW5rbm93biBwcmVmZXJlbmNlICclcycuXG4iLCB2YWx1ZS0+dXN0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0KEpTU3Ry
aW5nUmVmIHNvdXJjZSwgYm9vbCBydW5BdFN0YXJ0LCBib29sIGFsbEZyYW1lcykKLXsKLSAgICBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmFkZFVzZXJTY3JpcHQoYnJvd3Nlci0+bWFpblZpZXco
KSwgU3RyaW5nKHNvdXJjZS0+dXN0cmluZygpLmltcGwoKSksIHJ1bkF0U3RhcnQsIGFsbEZyYW1l
cyk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJTdHlsZVNoZWV0KEpT
U3RyaW5nUmVmIHNvdXJjZSwgYm9vbCBhbGxGcmFtZXMpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVT
dXBwb3J0RWZsOjphZGRVc2VyU3R5bGVTaGVldChicm93c2VyLT5tYWluVmlldygpLCBXVEY6OlN0
cmluZyhzb3VyY2UtPnVzdHJpbmcoKS5pbXBsKCkpLCBhbGxGcmFtZXMpOwotfQotCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKGJvb2wgZW5hYmxl
ZCkKLXsKLSAgICBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9kZXZlbG9wZXJfZXh0cmFzX3NldChi
cm93c2VyLT5tYWluVmlldygpLCBlbmFibGVkKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzaG93V2Vi
SW5zcGVjdG9yKCkKLXsKLSAgICBld2tfdmlld193ZWJfaW5zcGVjdG9yX3Nob3coYnJvd3Nlci0+
bWFpblZpZXcoKSk7Ci0gICAgYnJvd3Nlci0+d2FpdEluc3BlY3RvckxvYWRGaW5pc2hlZCgpOwot
fQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbG9zZVdlYkluc3BlY3RvcigpCi17Ci0g
ICAgZXdrX3ZpZXdfd2ViX2luc3BlY3Rvcl9jbG9zZShicm93c2VyLT5tYWluVmlldygpKTsKLX0K
LQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcihsb25n
IGNhbGxJZCwgSlNTdHJpbmdSZWYgc2NyaXB0KQotewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9y
dEVmbDo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcihicm93c2VyLT5tYWluVmlldygpLCBjYWxsSWQs
IFN0cmluZyhzY3JpcHQtPnVzdHJpbmcoKS5pbXBsKCkpKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSh1
bnNpZ25lZCwgSlNPYmplY3RSZWYsIEpTU3RyaW5nUmVmKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29s
YXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNT
dHJpbmdSZWYgc2NyaXB0KQotewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6ZXZhbHVh
dGVTY3JpcHRJbklzb2xhdGVkV29ybGQoYnJvd3Nlci0+bWFpbkZyYW1lKCksIHdvcmxkSUQsIGds
b2JhbE9iamVjdCwgU3RyaW5nKHNjcmlwdC0+dXN0cmluZygpLmltcGwoKSkpOwotfQotCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpyZW1vdmVBbGxWaXNpdGVkTGlua3MoKQotewotICAgIEV3
a19IaXN0b3J5KiBoaXN0b3J5ID0gZXdrX3ZpZXdfaGlzdG9yeV9nZXQoYnJvd3Nlci0+bWFpblZp
ZXcoKSk7Ci0gICAgaWYgKCFoaXN0b3J5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBld2tfaGlz
dG9yeV9jbGVhcihoaXN0b3J5KTsKLX0KLQotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2Fs
bFNob3VsZENsb3NlT25XZWJWaWV3KCkKLXsKLSAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBw
b3J0RWZsOjpjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcoYnJvd3Nlci0+bWFpbkZyYW1lKCkpOwot
fQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphcGlUZXN0TmV3V2luZG93RGF0YUxvYWRC
YXNlVVJMKEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphcGlUZXN0R29Ub0N1cnJlbnRCYWNr
Rm9yd2FyZEl0ZW0oKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFdlYlZpZXdFZGl0YWJsZShib29sKQotewotICAgIGV3a19mcmFt
ZV9lZGl0YWJsZV9zZXQoYnJvd3Nlci0+bWFpbkZyYW1lKCksIEVJTkFfVFJVRSk7Ci19Ci0KLUpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWFya2VyVGV4dEZv
ckxpc3RJdGVtKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIG5vZGVPYmplY3QpIGNv
bnN0Ci17Ci0gICAgU3RyaW5nIG1hcmtlclRleHRDaGFyID0gRHVtcFJlbmRlclRyZWVTdXBwb3J0
RWZsOjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oY29udGV4dCwgbm9kZU9iamVjdCk7Ci0gICAgaWYg
KG1hcmtlclRleHRDaGFyLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gbWFya2VyVGV4dChBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcobWFya2VyVGV4dENoYXIudXRmOCgpLmRhdGEoKSkpOwotICAgIHJldHVybiBt
YXJrZXJUZXh0OwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphdXRoZW50aWNhdGVT
ZXNzaW9uKEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWJvcnRNb2Rh
bCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0U2VyaWFsaXplSFRUUExvYWRzKGJvb2wgc2VyaWFsaXplKQotewotICAgIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydEVmbDo6c2V0U2VyaWFsaXplSFRUUExvYWRzKHNlcmlhbGl6ZSk7Ci19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1pbmltdW1UaW1lckludGVydmFsKGRv
dWJsZSBtaW5pbXVtVGltZXJJbnRlcnZhbCkKLXsKLSAgICBld2tfdmlld19zZXR0aW5nX21pbmlt
dW1fdGltZXJfaW50ZXJ2YWxfc2V0KGJyb3dzZXItPm1haW5WaWV3KCksIG1pbmltdW1UaW1lcklu
dGVydmFsKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VGV4dERpcmVjdGlv
bihKU1N0cmluZ1JlZiBkaXJlY3Rpb24pCi17Ci0gICAgRXdrX1RleHRfRGlyZWN0aW9uIGV3a0Rp
cmVjdGlvbjsKLSAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhkaXJlY3Rpb24s
ICJhdXRvIikpCi0gICAgICAgIGV3a0RpcmVjdGlvbiA9IEVXS19URVhUX0RJUkVDVElPTl9ERUZB
VUxUOwotICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoZGlyZWN0aW9u
LCAicnRsIikpCi0gICAgICAgIGV3a0RpcmVjdGlvbiA9IEVXS19URVhUX0RJUkVDVElPTl9SSUdI
VF9UT19MRUZUOwotICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoZGly
ZWN0aW9uLCAibHRyIikpCi0gICAgICAgIGV3a0RpcmVjdGlvbiA9IEVXS19URVhUX0RJUkVDVElP
Tl9MRUZUX1RPX1JJR0hUOwotICAgIGVsc2UgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkxh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRUZXh0RGlyZWN0aW9uIGNhbGxlZCB3aXRoIHVua25vd24g
ZGlyZWN0aW9uOiAnJXMnLlxuIiwgZGlyZWN0aW9uLT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBld2tfdmlld190ZXh0X2RpcmVjdGlvbl9z
ZXQoYnJvd3Nlci0+bWFpblZpZXcoKSwgZXdrRGlyZWN0aW9uKTsKLX0KLQotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6YWRkQ2hyb21lSW5wdXRGaWVsZCgpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlQ2hyb21lSW5wdXRG
aWVsZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6Zm9jdXNXZWJWaWV3KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRCYWNraW5nU2NhbGVGYWN0b3IoZG91YmxlKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNpbXVsYXRlRGVza3RvcE5vdGlmaWNhdGlvbkNsaWNrKEpTU3RyaW5nUmVmIHRpdGxlKQotewot
fQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZXNldFBhZ2VWaXNpYmlsaXR5KCkKLXsK
LSAgICBld2tfdmlld192aXNpYmlsaXR5X3N0YXRlX3NldChicm93c2VyLT5tYWluVmlldygpLCBF
V0tfUEFHRV9WSVNJQklMSVRZX1NUQVRFX1ZJU0lCTEUsIHRydWUpOwotfQotCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRQYWdlVmlzaWJpbGl0eShjb25zdCBjaGFyKiB2aXNpYmlsaXR5
KQotewotICAgIFN0cmluZyBuZXdWaXNpYmlsaXR5KHZpc2liaWxpdHkpOwotICAgIGlmIChuZXdW
aXNpYmlsaXR5ID09ICJ2aXNpYmxlIikKLSAgICAgICAgZXdrX3ZpZXdfdmlzaWJpbGl0eV9zdGF0
ZV9zZXQoYnJvd3Nlci0+bWFpblZpZXcoKSwgRVdLX1BBR0VfVklTSUJJTElUWV9TVEFURV9WSVNJ
QkxFLCBmYWxzZSk7Ci0gICAgZWxzZSBpZiAobmV3VmlzaWJpbGl0eSA9PSAiaGlkZGVuIikKLSAg
ICAgICAgZXdrX3ZpZXdfdmlzaWJpbGl0eV9zdGF0ZV9zZXQoYnJvd3Nlci0+bWFpblZpZXcoKSwg
RVdLX1BBR0VfVklTSUJJTElUWV9TVEFURV9ISURERU4sIGZhbHNlKTsKLSAgICBlbHNlIGlmIChu
ZXdWaXNpYmlsaXR5ID09ICJwcmVyZW5kZXIiKQotICAgICAgICBld2tfdmlld192aXNpYmlsaXR5
X3N0YXRlX3NldChicm93c2VyLT5tYWluVmlldygpLCBFV0tfUEFHRV9WSVNJQklMSVRZX1NUQVRF
X1BSRVJFTkRFUiwgZmFsc2UpOwotICAgIGVsc2UgaWYgKG5ld1Zpc2liaWxpdHkgPT0gInByZXZp
ZXciKQotICAgICAgICBld2tfdmlld192aXNpYmlsaXR5X3N0YXRlX3NldChicm93c2VyLT5tYWlu
VmlldygpLCBFV0tfUEFHRV9WSVNJQklMSVRZX1NUQVRFX1BSRVZJRVcsIGZhbHNlKTsKLX0KLQot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJs
ZWQoYm9vbCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZW5kV2ViSW50ZW50UmVzcG9uc2UoSlNTdHJpbmdSZWYgcmVzcG9uc2UpCi17
Ci0gICAgRXdrX0ludGVudF9SZXF1ZXN0KiByZXF1ZXN0ID0gYnJvd3Nlci0+Y3VycmVudEludGVu
dFJlcXVlc3QoKTsKLSAgICBpZiAoIXJlcXVlc3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIER1
bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c2VuZFdlYkludGVudFJlc3BvbnNlKHJlcXVlc3QsIHJl
c3BvbnNlKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsaXZlcldlYkludGVu
dChKU1N0cmluZ1JlZiBhY3Rpb24sIEpTU3RyaW5nUmVmIHR5cGUsIEpTU3RyaW5nUmVmIGRhdGEp
Ci17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpkZWxpdmVyV2ViSW50ZW50KGJyb3dz
ZXItPm1haW5GcmFtZSgpLCBhY3Rpb24sIHR5cGUsIGRhdGEpOwotfQotCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwoZG91YmxlKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9lZmwv
VGVzdFJ1bm5lckVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZs
L1Rlc3RSdW5uZXJFZmwuY3BwCShyZXZpc2lvbiAxMjUzMzUpCShmcm9tIFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL2VmbC9MYXlvdXRUZXN0Q29udHJvbGxlckVmbC5jcHA6MTI1MzM1KQorKysgVG9vbHMv
RHVtcFJlbmRlclRyZWUvZWZsL1Rlc3RSdW5uZXJFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsOTI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgSmFuIE1pY2hhZWwgQWxvbnpvIDxqbWFsb256b0BnbWFpbC5jb20+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDksMjAxMSBDb2xsYWJvcmEgTHRkLgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEpvb25lIEh1ciA8am9vbmVAa2xkcC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUHJv
RlVTSU9OIEVtYmVkZGVkIFN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVs
ZWN0cm9uaWNzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKKworI2luY2x1
ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCisjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWVDaHJvbWUuaCIK
KyNpbmNsdWRlICJKU1N0cmluZ1V0aWxzLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
KyNpbmNsdWRlICJXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuaCIKKyNp
bmNsdWRlICJXb3JrUXVldWUuaCIKKyNpbmNsdWRlICJXb3JrUXVldWVJdGVtLmgiCisjaW5jbHVk
ZSAiZXdrX3ByaXZhdGUuaCIKKyNpbmNsdWRlIDxFV2ViS2l0Lmg+CisjaW5jbHVkZSA8RWNvcmVf
RmlsZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+CisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9PcGFxdWVKU1N0cmluZy5oPgorI2luY2x1ZGUgPEtVUkwuaD4KKyNpbmNsdWRlIDxlZGl0aW5n
L0ZpbmRPcHRpb25zLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKworLy8gU2FtZSBhcyBNYWMgY2FjaGUgbW9kZWwgZW51bSBpbiBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLmguCitlbnVtIHsKKyAgICBXZWJDYWNo
ZU1vZGVsRG9jdW1lbnRWaWV3ZXIgPSAwLAorICAgIFdlYkNhY2hlTW9kZWxEb2N1bWVudEJyb3dz
ZXIgPSAxLAorICAgIFdlYkNhY2hlTW9kZWxQcmltYXJ5V2ViQnJvd3NlciA9IDIKK307CisKK0xh
eW91dFRlc3RDb250cm9sbGVyOjp+TGF5b3V0VGVzdENvbnRyb2xsZXIoKQoreworfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjphZGREaXNhbGxvd2VkVVJMKEpTU3RyaW5nUmVmKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNs
ZWFyQmFja0ZvcndhcmRMaXN0KCkKK3sKKyAgICBFd2tfSGlzdG9yeSogaGlzdG9yeSA9IGV3a192
aWV3X2hpc3RvcnlfZ2V0KGJyb3dzZXItPm1haW5WaWV3KCkpOworICAgIGlmICghaGlzdG9yeSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgRXdrX0hpc3RvcnlfSXRlbSogaXRlbSA9IGV3a19oaXN0
b3J5X2hpc3RvcnlfaXRlbV9jdXJyZW50X2dldChoaXN0b3J5KTsKKyAgICBld2tfaGlzdG9yeV9j
bGVhcihoaXN0b3J5KTsKKyAgICBld2tfaGlzdG9yeV9oaXN0b3J5X2l0ZW1fYWRkKGhpc3Rvcnks
IGl0ZW0pOworICAgIGV3a19oaXN0b3J5X2hpc3RvcnlfaXRlbV9zZXQoaGlzdG9yeSwgaXRlbSk7
CisgICAgZXdrX2hpc3RvcnlfaXRlbV9mcmVlKGl0ZW0pOworfQorCitKU1N0cmluZ1JlZiBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6Y29weURlY29kZWRIb3N0TmFtZShKU1N0cmluZ1JlZikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitKU1N0cmluZ1JlZiBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6Y29weUVuY29kZWRIb3N0TmFtZShKU1N0cmluZ1JlZikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpkaXNwYXRjaFBlbmRpbmdMb2FkUmVxdWVzdHMoKQoreworICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgZm9yIHRlc3RpbmcgZml4IGZvciA2NzI3NDk1CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzcGxheSgpCit7CisgICAg
ZGlzcGxheVdlYlZpZXcoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6a2VlcFdl
Ykhpc3RvcnkoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0pTVmFsdWVSZWYgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gRHVtcFJl
bmRlclRyZWVTdXBwb3J0RWZsOjpjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oY29u
dGV4dCwgdmFsdWUpOworfQorCitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmxheWVyVHJlZUFzVGV4dCgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+KEFkb3B0LCBKU1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOworfQorCitpbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
Om51bWJlck9mUGFnZXMoZmxvYXQgcGFnZVdpZHRoLCBmbG9hdCBwYWdlSGVpZ2h0KQoreworICAg
IHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6Om51bWJlck9mUGFnZXMoYnJvd3Nlci0+
bWFpbkZyYW1lKCksIHBhZ2VXaWR0aCwgcGFnZUhlaWdodCk7Cit9CisKK0pTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVByb3BlcnR5KGNvbnN0IGNoYXIq
IHByb3BlcnR5TmFtZSwgaW50IHBhZ2VOdW1iZXIpIGNvbnN0Cit7CisgICAgY29uc3QgU3RyaW5n
IHByb3BlcnR5ID0gRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpwYWdlUHJvcGVydHkoYnJvd3Nl
ci0+bWFpbkZyYW1lKCksIHByb3BlcnR5TmFtZSwgcGFnZU51bWJlcik7CisgICAgaWYgKHByb3Bl
cnR5LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gcHJvcGVydHlWYWx1ZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcocHJvcGVydHkudXRmOCgpLmRhdGEoKSkpOworICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlOwor
fQorCitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhZ2VT
aXplQW5kTWFyZ2luc0luUGl4ZWxzKGludCBwYWdlTnVtYmVyLCBpbnQgd2lkdGgsIGludCBoZWln
aHQsIGludCBtYXJnaW5Ub3AsIGludCBtYXJnaW5SaWdodCwgaW50IG1hcmdpbkJvdHRvbSwgaW50
IG1hcmdpbkxlZnQpIGNvbnN0Cit7CisgICAgU3RyaW5nIHBhZ2VTaXplQW5kTWFyZ2lucyA9IER1
bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMoYnJvd3Nl
ci0+bWFpbkZyYW1lKCksIHBhZ2VOdW1iZXIsIHdpZHRoLCBoZWlnaHQsIG1hcmdpblRvcCwgbWFy
Z2luUmlnaHQsIG1hcmdpbkJvdHRvbSwgbWFyZ2luTGVmdCk7CisKKyAgICBpZiAocGFnZVNpemVB
bmRNYXJnaW5zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gcmV0dXJuVmFsdWUoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKHBhZ2VTaXplQW5kTWFyZ2lucy51dGY4KCkuZGF0YSgpKSk7CisgICAgcmV0dXJuIHJl
dHVyblZhbHVlOworfQorCitzaXplX3QgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndlYkhpc3RvcnlJ
dGVtQ291bnQoKQoreworICAgIGNvbnN0IEV3a19IaXN0b3J5KiBoaXN0b3J5ID0gZXdrX3ZpZXdf
aGlzdG9yeV9nZXQoYnJvd3Nlci0+bWFpblZpZXcoKSk7CisgICAgaWYgKCFoaXN0b3J5KQorICAg
ICAgICByZXR1cm4gLTE7CisKKyAgICByZXR1cm4gZXdrX2hpc3RvcnlfYmFja19saXN0X2xlbmd0
aChoaXN0b3J5KSArIGV3a19oaXN0b3J5X2ZvcndhcmRfbGlzdF9sZW5ndGgoaGlzdG9yeSk7Cit9
CisKK3Vuc2lnbmVkIExheW91dFRlc3RDb250cm9sbGVyOjp3b3JrZXJUaHJlYWRDb3VudCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6d29ya2VyVGhyZWFk
Q291bnQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bm90aWZ5RG9uZSgpCit7
CisgICAgaWYgKG1fd2FpdFRvRHVtcCAmJiAhdG9wTG9hZGluZ0ZyYW1lICYmICFXb3JrUXVldWU6
OnNoYXJlZCgpLT5jb3VudCgpKQorICAgICAgICBkdW1wKCk7CisgICAgbV93YWl0VG9EdW1wID0g
ZmFsc2U7CisgICAgd2FpdEZvclBvbGljeSA9IGZhbHNlOworfQorCitKU1N0cmluZ1JlZiBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6cGF0aFRvTG9jYWxSZXNvdXJjZShKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNTdHJpbmdSZWYgdXJsKQoreworICAgIFN0cmluZyByZXF1ZXN0ZWRVcmwodXJsLT5jaGFy
YWN0ZXJzKCksIHVybC0+bGVuZ3RoKCkpOworICAgIFN0cmluZyByZXNvdXJjZVJvb3Q7CisgICAg
U3RyaW5nIHJlcXVlc3RlZFJvb3Q7CisKKyAgICBpZiAocmVxdWVzdGVkVXJsLmZpbmQoIkxheW91
dFRlc3RzIikgIT0gbm90Rm91bmQpIHsKKyAgICAgICAgLy8gSWYgdGhlIFVSTCBjb250YWlucyBM
YXlvdXRUZXN0cyB3ZSBuZWVkIHRvIHJlbWFwIHRoYXQgdG8KKyAgICAgICAgLy8gTE9DQUxfUkVT
T1VSQ0VfUk9PVCB3aGljaCBpcyB0aGUgcGF0aCBvZiB0aGUgTGF5b3V0VGVzdHMgZGlyZWN0b3J5
CisgICAgICAgIC8vIHdpdGhpbiB0aGUgV2ViS2l0IHNvdXJjZSB0cmVlLgorICAgICAgICByZXF1
ZXN0ZWRSb290ID0gIi90bXAvTGF5b3V0VGVzdHMiOworICAgICAgICByZXNvdXJjZVJvb3QgPSBn
ZXRlbnYoIkxPQ0FMX1JFU09VUkNFX1JPT1QiKTsKKyAgICB9IGVsc2UgaWYgKHJlcXVlc3RlZFVy
bC5maW5kKCJ0bXAiKSAhPSBub3RGb3VuZCkgeworICAgICAgICAvLyBJZiB0aGUgVVJMIGlzIGEg
Y2hpbGQgb2YgL3RtcCB3ZSBuZWVkIHRvIGNvbnZlcnQgaXQgdG8gYmUgYSBjaGlsZAorICAgICAg
ICAvLyBEVU1QUkVOREVSVFJFRV9URU1QIHJlcGxhY2UgdG1wIHdpdGggRFVNUFJFTkRFUlRSRUVf
VEVNUAorICAgICAgICByZXF1ZXN0ZWRSb290ID0gIi90bXAiOworICAgICAgICByZXNvdXJjZVJv
b3QgPSBnZXRlbnYoIkRVTVBSRU5ERVJUUkVFX1RFTVAiKTsKKyAgICB9CisKKyAgICBzaXplX3Qg
aW5kZXhPZlJvb3RTdGFydCA9IHJlcXVlc3RlZFVybC5yZXZlcnNlRmluZChyZXF1ZXN0ZWRSb290
KTsKKyAgICBzaXplX3QgaW5kZXhPZlNlcGFyYXRvckFmdGVyUm9vdCA9IGluZGV4T2ZSb290U3Rh
cnQgKyByZXF1ZXN0ZWRSb290Lmxlbmd0aCgpOworICAgIFN0cmluZyBmdWxsUGF0aFRvVXJsID0g
ImZpbGU6Ly8iICsgcmVzb3VyY2VSb290ICsgcmVxdWVzdGVkVXJsLnN1YnN0cmluZyhpbmRleE9m
U2VwYXJhdG9yQWZ0ZXJSb290KTsKKworICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZyhmdWxsUGF0aFRvVXJsLnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpxdWV1ZUxvYWQoSlNTdHJpbmdSZWYgdXJsLCBKU1N0cmluZ1JlZiB0YXJn
ZXQpCit7CisgICAgV2ViQ29yZTo6S1VSTCBiYXNlVVJMKFdlYkNvcmU6OktVUkwoKSwgU3RyaW5n
Ojpmcm9tVVRGOChld2tfZnJhbWVfdXJpX2dldChicm93c2VyLT5tYWluRnJhbWUoKSkpKTsKKyAg
ICBXZWJDb3JlOjpLVVJMIGFic29sdXRlVVJMKGJhc2VVUkwsIFdURjo6U3RyaW5nKHVybC0+dXN0
cmluZygpLmltcGwoKSkpOworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGpzQWJzb2x1
dGVVUkwoCisgICAgICAgIEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhhYnNv
bHV0ZVVSTC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7CisKKyAgICBXb3JrUXVldWU6OnNoYXJl
ZCgpLT5xdWV1ZShuZXcgTG9hZEl0ZW0oanNBYnNvbHV0ZVVSTC5nZXQoKSwgdGFyZ2V0KSk7Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFjY2VwdHNFZGl0aW5nKGJvb2wgYWNj
ZXB0c0VkaXRpbmcpCit7CisgICAgZXdrX3ZpZXdfZWRpdGFibGVfc2V0KGJyb3dzZXItPm1haW5W
aWV3KCksIGFjY2VwdHNFZGl0aW5nKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0QWx3YXlzQWNjZXB0Q29va2llcyhib29sIGFsd2F5c0FjY2VwdENvb2tpZXMpCit7CisgICAg
ZXdrX2Nvb2tpZXNfcG9saWN5X3NldChhbHdheXNBY2NlcHRDb29raWVzID8gRVdLX0NPT0tJRV9K
QVJfQUNDRVBUX0FMV0FZUyA6IEVXS19DT09LSUVfSkFSX0FDQ0VQVF9ORVZFUik7Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGJvb2wgZW5h
YmxlZCwgYm9vbCBwZXJtaXNzaXZlKQoreworICAgIHBvbGljeURlbGVnYXRlRW5hYmxlZCA9IGVu
YWJsZWQ7CisgICAgcG9saWN5RGVsZWdhdGVQZXJtaXNzaXZlID0gcGVybWlzc2l2ZTsKK30KKwor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2FpdEZvclBvbGljeURlbGVnYXRlKCkKK3sKKyAg
ICBzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZSh0cnVlLCBmYWxzZSk7CisgICAgd2FpdEZvclBvbGlj
eSA9IHRydWU7CisgICAgc2V0V2FpdFRvRHVtcCh0cnVlKTsKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0U2Nyb2xsYmFyUG9saWN5KEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShKU1N0cmluZ1JlZiBzb3VyY2VPcmlnaW4s
IEpTU3RyaW5nUmVmIHByb3RvY29sLCBKU1N0cmluZ1JlZiBob3N0LCBib29sIGluY2x1ZGVTdWJk
b21haW5zKQoreworICAgIFdlYkNvcmU6OktVUkwga3VybDsKKyAgICBrdXJsLnNldFByb3RvY29s
KFN0cmluZyhwcm90b2NvbC0+Y2hhcmFjdGVycygpLCBwcm90b2NvbC0+bGVuZ3RoKCkpKTsKKyAg
ICBrdXJsLnNldEhvc3QoU3RyaW5nKGhvc3QtPmNoYXJhY3RlcnMoKSwgaG9zdC0+bGVuZ3RoKCkp
KTsKKworICAgIGV3a19zZWN1cml0eV9wb2xpY3lfd2hpdGVsaXN0X29yaWdpbl9hZGQoc291cmNl
T3JpZ2luLT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwga3VybC5zdHJpbmcoKS51dGY4KCkuZGF0
YSgpLCBpbmNsdWRlU3ViZG9tYWlucyk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KEpTU3RyaW5nUmVmIHNvdXJjZU9yaWdp
biwgSlNTdHJpbmdSZWYgcHJvdG9jb2wsIEpTU3RyaW5nUmVmIGhvc3QsIGJvb2wgaW5jbHVkZVN1
YmRvbWFpbnMpCit7CisgICAgV2ViQ29yZTo6S1VSTCBrdXJsOworICAgIGt1cmwuc2V0UHJvdG9j
b2woU3RyaW5nKHByb3RvY29sLT5jaGFyYWN0ZXJzKCksIHByb3RvY29sLT5sZW5ndGgoKSkpOwor
ICAgIGt1cmwuc2V0SG9zdChTdHJpbmcoaG9zdC0+Y2hhcmFjdGVycygpLCBob3N0LT5sZW5ndGgo
KSkpOworCisgICAgZXdrX3NlY3VyaXR5X3BvbGljeV93aGl0ZWxpc3Rfb3JpZ2luX2RlbChzb3Vy
Y2VPcmlnaW4tPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBrdXJsLnN0cmluZygpLnV0ZjgoKS5k
YXRhKCksIGluY2x1ZGVTdWJkb21haW5zKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlcihib29sKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRhYktleUN5Y2xlc1Ro
cm91Z2hFbGVtZW50cyhib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZURhc2hib2FyZENvbXBhdGliaWxpdHlNb2RlKGJv
b2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworc3RhdGljIENTdHJpbmcgZ1VzZXJT
dHlsZVNoZWV0Oworc3RhdGljIGJvb2wgZ1VzZXJTdHlsZVNoZWV0RW5hYmxlZCA9IHRydWU7CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZChib29s
IGZsYWcpCit7CisgICAgZ1VzZXJTdHlsZVNoZWV0RW5hYmxlZCA9IGZsYWc7CisgICAgZXdrX3Zp
ZXdfc2V0dGluZ191c2VyX3N0eWxlc2hlZXRfc2V0KGJyb3dzZXItPm1haW5WaWV3KCksIGZsYWcg
PyBnVXNlclN0eWxlU2hlZXQuZGF0YSgpIDogMCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oSlNTdHJpbmdSZWYgcGF0aCkKK3sKKyAg
ICBnVXNlclN0eWxlU2hlZXQgPSBwYXRoLT51c3RyaW5nKCkudXRmOCgpOworCisgICAgaWYgKGdV
c2VyU3R5bGVTaGVldEVuYWJsZWQpCisgICAgICAgIHNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZCh0
cnVlKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VmFsdWVGb3JVc2VyKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIG5vZGVPYmplY3QsIEpTU3RyaW5nUmVmIHZh
bHVlKQoreworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c2V0VmFsdWVGb3JVc2VyKGNv
bnRleHQsIG5vZGVPYmplY3QsIFdURjo6U3RyaW5nKHZhbHVlLT51c3RyaW5nKCkuaW1wbCgpKSk7
Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFZpZXdNb2RlTWVkaWFGZWF0dXJl
KEpTU3RyaW5nUmVmIG1vZGUpCit7CisgICAgRXZhc19PYmplY3QqIHZpZXcgPSBicm93c2VyLT5t
YWluVmlldygpOworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGVx
dWFscyhtb2RlLCAid2luZG93ZWQiKSkKKyAgICAgICAgZXdrX3ZpZXdfbW9kZV9zZXQodmlldywg
RVdLX1ZJRVdfTU9ERV9XSU5ET1dFRCk7CisgICAgZWxzZSBpZiAoZXF1YWxzKG1vZGUsICJmbG9h
dGluZyIpKQorICAgICAgICBld2tfdmlld19tb2RlX3NldCh2aWV3LCBFV0tfVklFV19NT0RFX0ZM
T0FUSU5HKTsKKyAgICBlbHNlIGlmIChlcXVhbHMobW9kZSwgImZ1bGxzY3JlZW4iKSkKKyAgICAg
ICAgZXdrX3ZpZXdfbW9kZV9zZXQodmlldywgRVdLX1ZJRVdfTU9ERV9GVUxMU0NSRUVOKTsKKyAg
ICBlbHNlIGlmIChlcXVhbHMobW9kZSwgIm1heGltaXplZCIpKQorICAgICAgICBld2tfdmlld19t
b2RlX3NldCh2aWV3LCBFV0tfVklFV19NT0RFX01BWElNSVpFRCk7CisgICAgZWxzZSBpZiAoZXF1
YWxzKG1vZGUsICJtaW5pbWl6ZWQiKSkKKyAgICAgICAgZXdrX3ZpZXdfbW9kZV9zZXQodmlldywg
RVdLX1ZJRVdfTU9ERV9NSU5JTUlaRUQpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRXaW5kb3dJc0tleShib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChib29s
IGZsYWcpCit7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpzZXRTbWFydEluc2VydERl
bGV0ZUVuYWJsZWQoYnJvd3Nlci0+bWFpblZpZXcoKSwgZmxhZyk7Cit9CisKK3N0YXRpYyBFaW5h
X0Jvb2wgd2FpdFRvRHVtcFdhdGNoZG9nRmlyZWQodm9pZCopCit7CisgICAgd2FpdFRvRHVtcFdh
dGNoZG9nID0gMDsKKyAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXItPndhaXRUb0R1bXBXYXRjaGRv
Z1RpbWVyRmlyZWQoKTsKKyAgICByZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VMOworfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXYWl0VG9EdW1wKGJvb2wgd2FpdFVudGlsRG9u
ZSkKK3sKKyAgICBzdGF0aWMgY29uc3QgZG91YmxlIHRpbWVvdXRTZWNvbmRzID0gMzA7CisKKyAg
ICBtX3dhaXRUb0R1bXAgPSB3YWl0VW50aWxEb25lOworICAgIGlmIChtX3dhaXRUb0R1bXAgJiYg
IXdhaXRUb0R1bXBXYXRjaGRvZykKKyAgICAgICAgd2FpdFRvRHVtcFdhdGNoZG9nID0gZWNvcmVf
dGltZXJfYWRkKHRpbWVvdXRTZWNvbmRzLCB3YWl0VG9EdW1wV2F0Y2hkb2dGaXJlZCwgMCk7Cit9
CisKK2ludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2luZG93Q291bnQoKQoreworICAgIHJldHVy
biBicm93c2VyLT5leHRyYVZpZXdzKCkuc2l6ZSgpICsgMTsgLy8gKyAxIGZvciB0aGUgbWFpbiB2
aWV3LgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQcml2YXRlQnJvd3NpbmdF
bmFibGVkKGJvb2wgZmxhZykKK3sKKyAgICBld2tfdmlld19zZXR0aW5nX3ByaXZhdGVfYnJvd3Np
bmdfc2V0KGJyb3dzZXItPm1haW5WaWV3KCksIGZsYWcpOworfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKGJvb2wgZmxhZykKK3sK
KyAgICBld2tfdmlld19zZXR0aW5nX3NjcmlwdHNfY2FuX2FjY2Vzc19jbGlwYm9hcmRfc2V0KGJy
b3dzZXItPm1haW5WaWV3KCksIGZsYWcpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRYU1NBdWRpdG9yRW5hYmxlZChib29sIGZsYWcpCit7CisgICAgZXdrX3ZpZXdfc2V0dGlu
Z19lbmFibGVfeHNzX2F1ZGl0b3Jfc2V0KGJyb3dzZXItPm1haW5WaWV3KCksIGZsYWcpOworfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkKGJv
b2wgZmxhZykKK3sKKyAgICBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9mcmFtZV9mbGF0dGVuaW5n
X3NldChicm93c2VyLT5tYWluVmlldygpLCBmbGFnKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGJvb2wgZmxhZykKK3sKKyAgICBl
d2tfdmlld19zZXR0aW5nX3NwYXRpYWxfbmF2aWdhdGlvbl9zZXQoYnJvd3Nlci0+bWFpblZpZXco
KSwgZmxhZyk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93VW5pdmVy
c2FsQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVV
UkxzKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoYm9vbCBmbGFnKQorewor
ICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJs
ZWQoYnJvd3Nlci0+bWFpblZpZXcoKSwgZmxhZyk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldEF1dG9maWxsZWQoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgbm9k
ZU9iamVjdCwgYm9vbCBhdXRvZmlsbGVkKQoreworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVm
bDo6c2V0QXV0b2ZpbGxlZChjb250ZXh0LCBub2RlT2JqZWN0LCBhdXRvZmlsbGVkKTsKK30KKwor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzYWJsZUltYWdlTG9hZGluZygpCit7CisgICAg
ZXdrX3ZpZXdfc2V0dGluZ19hdXRvX2xvYWRfaW1hZ2VzX3NldChicm93c2VyLT5tYWluVmlldygp
LCBFSU5BX0ZBTFNFKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0Rl
dmljZU9yaWVudGF0aW9uKGJvb2wsIGRvdWJsZSwgYm9vbCwgZG91YmxlLCBib29sLCBkb3VibGUp
Cit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgRGV2aWNlT3JpZW50YXRpb24gbGF5b3V0
IHRlc3RzLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzAzMzUuCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlLCBkb3VibGUsIGRvdWJs
ZSkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBHZW9sb2NhdGlvbiBsYXlvdXQgdGVz
dHMuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
ODI2NC4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRNb2NrR2VvbG9jYXRpb25FcnJvcihpbnQsIEpTU3RyaW5nUmVmKQoreworICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgZm9yIEdlb2xvY2F0aW9uIGxheW91dCB0ZXN0cy4KKyAgICAvLyBT
ZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MjY0LgorICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEdlb2xv
Y2F0aW9uUGVybWlzc2lvbihib29sIGFsbG93KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
Zm9yIEdlb2xvY2F0aW9uIGxheW91dCB0ZXN0cy4KKyAgICBzZXRHZW9sb2NhdGlvblBlcm1pc3Np
b25Db21tb24oYWxsb3cpOworfQorCitpbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9m
UGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKCkKK3sKKyAgICAvLyBGSVhNRTog
SW1wbGVtZW50IGZvciBHZW9sb2NhdGlvbiBsYXlvdXQgdGVzdHMuCisgICAgcmV0dXJuIC0xOwor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRNb2NrU3BlZWNoSW5wdXRSZXN1bHQo
SlNTdHJpbmdSZWYsIGRvdWJsZSwgSlNTdHJpbmdSZWYpCit7CisgICAgLy8gRklYTUU6IEltcGxl
bWVudCBmb3Igc3BlZWNoIGlucHV0IGxheW91dCB0ZXN0cy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgorICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tTcGVlY2hJbnB1dER1
bXBSZWN0KGJvb2wpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Igc3BlZWNoIGlucHV0
IGxheW91dCB0ZXN0cy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTM5NDg1LgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnN0YXJ0U3BlZWNoSW5wdXQoSlNDb250ZXh0UmVmIGlucHV0RWxlbWVu
dCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBzcGVlY2ggaW5wdXQgbGF5b3V0IHRl
c3RzLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Mzk0ODUuCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0SWNvbkRhdGFiYXNlRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgZXdrX3Nl
dHRpbmdzX2ljb25fZGF0YWJhc2VfcGF0aF9zZXQoMCk7CisKKyAgICBpZiAoIWVuYWJsZWQpCisg
ICAgICAgIHJldHVybjsKKworICAgIFN0cmluZyBkYXRhYmFzZVBhdGg7CisgICAgY29uc3QgY2hh
ciogdGVtcERpciA9IGdldGVudigiVE1QRElSIik7CisKKyAgICBpZiAodGVtcERpcikKKyAgICAg
ICAgZGF0YWJhc2VQYXRoID0gU3RyaW5nOjpmcm9tVVRGOCh0ZW1wRGlyKTsKKyAgICBlbHNlIGlm
ICh0ZW1wRGlyID0gZ2V0ZW52KCJURU1QIikpCisgICAgICAgIGRhdGFiYXNlUGF0aCA9IFN0cmlu
Zzo6ZnJvbVVURjgodGVtcERpcik7CisgICAgZWxzZQorICAgICAgICBkYXRhYmFzZVBhdGggPSBT
dHJpbmc6OmZyb21VVEY4KCIvdG1wIik7CisKKyAgICBkYXRhYmFzZVBhdGguYXBwZW5kKCIvRHVt
cFJlbmRlclRyZWUvSWNvbkRhdGFiYXNlIik7CisKKyAgICBpZiAoZWNvcmVfZmlsZV9ta3BhdGgo
ZGF0YWJhc2VQYXRoLnV0ZjgoKS5kYXRhKCkpKQorICAgICAgICBld2tfc2V0dGluZ3NfaWNvbl9k
YXRhYmFzZV9wYXRoX3NldChkYXRhYmFzZVBhdGgudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQo
Ym9vbCBmbGFnKQoreworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c2V0U2VsZWN0VHJh
aWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChicm93c2VyLT5tYWluVmlldygpLCBmbGFnKTsKK30KKwor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQoYm9vbCBm
bGFnKQoreworICAgIGV3a192aWV3X3NldHRpbmdfc2NyaXB0c19jYW5fb3Blbl93aW5kb3dzX3Nl
dChicm93c2VyLT5tYWluVmlldygpLCAhZmxhZyk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldFBsdWdpbnNFbmFibGVkKGJvb2wgZmxhZykKK3sKKyAgICBld2tfdmlld19zZXR0
aW5nX2VuYWJsZV9wbHVnaW5zX3NldChicm93c2VyLT5tYWluVmlldygpLCBmbGFnKTsKK30KKwor
Ym9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVt
ZW50V2l0aElkKEpTU3RyaW5nUmVmIGlkKQoreworICAgIGNvbnN0IFN0cmluZyBlbGVtZW50SWQo
aWQtPnVzdHJpbmcoKS5pbXBsKCkpOworICAgIGNvbnN0IEV2YXNfT2JqZWN0KiBtYWluRnJhbWUg
PSBicm93c2VyLT5tYWluRnJhbWUoKTsKKyAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0
RWZsOjplbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQobWFpbkZyYW1lLCBl
bGVtZW50SWQpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpleGVjQ29tbWFuZChK
U1N0cmluZ1JlZiBuYW1lLCBKU1N0cmluZ1JlZiB2YWx1ZSkKK3sKKyAgICBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRFZmw6OmV4ZWN1dGVDb3JlQ29tbWFuZEJ5TmFtZShicm93c2VyLT5tYWluVmlldygp
LCBuYW1lLT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdmFsdWUtPnVzdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKK30KKworYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZmluZFN0cmluZyhKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNTdHJpbmdSZWYgdGFyZ2V0LCBKU09iamVjdFJlZiBvcHRpb25z
QXJyYXkpCit7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGxlbmd0aFByb3BlcnR5TmFt
ZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKKyAgICBK
U1ZhbHVlUmVmIGxlbmd0aFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBvcHRp
b25zQXJyYXksIGxlbmd0aFByb3BlcnR5TmFtZS5nZXQoKSwgMCk7CisgICAgaWYgKCFKU1ZhbHVl
SXNOdW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBXZWJDb3JlOjpGaW5kT3B0aW9ucyBvcHRpb25zID0gMDsKKworICAgIGNvbnN0IHNpemVf
dCBsZW5ndGggPSBzdGF0aWNfY2FzdDxzaXplX3Q+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBs
ZW5ndGhWYWx1ZSwgMCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4
KGNvbnRleHQsIG9wdGlvbnNBcnJheSwgaSwgMCk7CisgICAgICAgIGlmICghSlNWYWx1ZUlzU3Ry
aW5nKGNvbnRleHQsIHZhbHVlKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBvcHRpb25OYW1lKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdD
b3B5KGNvbnRleHQsIHZhbHVlLCAwKSk7CisKKyAgICAgICAgaWYgKGVxdWFscyhvcHRpb25OYW1l
LCAiQ2FzZUluc2Vuc2l0aXZlIikpCisgICAgICAgICAgICBvcHRpb25zIHw9IFdlYkNvcmU6OkNh
c2VJbnNlbnNpdGl2ZTsKKyAgICAgICAgZWxzZSBpZiAoZXF1YWxzKG9wdGlvbk5hbWUsICJBdFdv
cmRTdGFydHMiKSkKKyAgICAgICAgICAgIG9wdGlvbnMgfD0gV2ViQ29yZTo6QXRXb3JkU3RhcnRz
OworICAgICAgICBlbHNlIGlmIChlcXVhbHMob3B0aW9uTmFtZSwgIlRyZWF0TWVkaWFsQ2FwaXRh
bEFzV29yZFN0YXJ0IikpCisgICAgICAgICAgICBvcHRpb25zIHw9IFdlYkNvcmU6OlRyZWF0TWVk
aWFsQ2FwaXRhbEFzV29yZFN0YXJ0OworICAgICAgICBlbHNlIGlmIChlcXVhbHMob3B0aW9uTmFt
ZSwgIkJhY2t3YXJkcyIpKQorICAgICAgICAgICAgb3B0aW9ucyB8PSBXZWJDb3JlOjpCYWNrd2Fy
ZHM7CisgICAgICAgIGVsc2UgaWYgKGVxdWFscyhvcHRpb25OYW1lLCAiV3JhcEFyb3VuZCIpKQor
ICAgICAgICAgICAgb3B0aW9ucyB8PSBXZWJDb3JlOjpXcmFwQXJvdW5kOworICAgICAgICBlbHNl
IGlmIChlcXVhbHMob3B0aW9uTmFtZSwgIlN0YXJ0SW5TZWxlY3Rpb24iKSkKKyAgICAgICAgICAg
IG9wdGlvbnMgfD0gV2ViQ29yZTo6U3RhcnRJblNlbGVjdGlvbjsKKyAgICB9CisKKyAgICByZXR1
cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpmaW5kU3RyaW5nKGJyb3dzZXItPm1haW5WaWV3
KCksIFdURjo6U3RyaW5nKHRhcmdldC0+dXN0cmluZygpLmltcGwoKSksIG9wdGlvbnMpOworfQor
Citib29sIExheW91dFRlc3RDb250cm9sbGVyOjppc0NvbW1hbmRFbmFibGVkKEpTU3RyaW5nUmVm
IG5hbWUpCit7CisgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6aXNDb21tYW5k
RW5hYmxlZChicm93c2VyLT5tYWluVmlldygpLCBuYW1lLT51c3RyaW5nKCkudXRmOCgpLmRhdGEo
KSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldENhY2hlTW9kZWwoaW50IGNh
Y2hlTW9kZWwpCit7CisgICAgdW5zaWduZWQgaW50IGNhY2hlVG90YWxDYXBhY2l0eTsKKyAgICB1
bnNpZ25lZCBpbnQgY2FjaGVNaW5EZWFkQ2FwYWNpdHk7CisgICAgdW5zaWduZWQgaW50IGNhY2hl
TWF4RGVhZENhcGFjaXR5OworICAgIGRvdWJsZSBkZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVy
dmFsOworICAgIHVuc2lnbmVkIGludCBwYWdlQ2FjaGVDYXBhY2l0eTsKKworICAgIC8vIFRoZXNl
IGNvbnN0YW50cyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBNYWMgY2FjaGUgbW9kZWwgZW51bSBpbiBT
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLmguCisgICAgc3dpdGNoIChj
YWNoZU1vZGVsKSB7CisgICAgY2FzZSBXZWJDYWNoZU1vZGVsRG9jdW1lbnRWaWV3ZXI6CisgICAg
ICAgIHBhZ2VDYWNoZUNhcGFjaXR5ID0gMDsKKyAgICAgICAgY2FjaGVUb3RhbENhcGFjaXR5ID0g
MDsKKyAgICAgICAgY2FjaGVNaW5EZWFkQ2FwYWNpdHkgPSAwOworICAgICAgICBjYWNoZU1heERl
YWRDYXBhY2l0eSA9IDA7CisgICAgICAgIGRlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwg
PSAwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYkNhY2hlTW9kZWxEb2N1bWVudEJyb3dz
ZXI6CisgICAgICAgIHBhZ2VDYWNoZUNhcGFjaXR5ID0gMjsKKyAgICAgICAgY2FjaGVUb3RhbENh
cGFjaXR5ID0gMTYgKiAxMDI0ICogMTAyNDsKKyAgICAgICAgY2FjaGVNaW5EZWFkQ2FwYWNpdHkg
PSBjYWNoZVRvdGFsQ2FwYWNpdHkgLyA4OworICAgICAgICBjYWNoZU1heERlYWRDYXBhY2l0eSA9
IGNhY2hlVG90YWxDYXBhY2l0eSAvIDQ7CisgICAgICAgIGRlYWREZWNvZGVkRGF0YURlbGV0aW9u
SW50ZXJ2YWwgPSAwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYkNhY2hlTW9kZWxQcmlt
YXJ5V2ViQnJvd3NlcjoKKyAgICAgICAgcGFnZUNhY2hlQ2FwYWNpdHkgPSAzOworICAgICAgICBj
YWNoZVRvdGFsQ2FwYWNpdHkgPSAzMiAqIDEwMjQgKiAxMDI0OworICAgICAgICBjYWNoZU1pbkRl
YWRDYXBhY2l0eSA9IGNhY2hlVG90YWxDYXBhY2l0eSAvIDQ7CisgICAgICAgIGNhY2hlTWF4RGVh
ZENhcGFjaXR5ID0gY2FjaGVUb3RhbENhcGFjaXR5IC8gMjsKKyAgICAgICAgZGVhZERlY29kZWRE
YXRhRGVsZXRpb25JbnRlcnZhbCA9IDYwOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInRyeWluZyB0byBzZXQgYW4gaW52YWxpZCB2YWx1ZSAl
ZCBmb3IgdGhlIENhY2hlIG1vZGVsLiIsIGNhY2hlTW9kZWwpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgZXdrX3NldHRpbmdzX29iamVjdF9jYWNoZV9jYXBhY2l0eV9zZXQoY2FjaGVN
aW5EZWFkQ2FwYWNpdHksIGNhY2hlTWF4RGVhZENhcGFjaXR5LCBjYWNoZVRvdGFsQ2FwYWNpdHkp
OworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c2V0RGVhZERlY29kZWREYXRhRGVsZXRp
b25JbnRlcnZhbChkZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsKTsKKyAgICBld2tfc2V0
dGluZ3NfcGFnZV9jYWNoZV9jYXBhY2l0eV9zZXQocGFnZUNhY2hlQ2FwYWNpdHkpOworfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXRMb2Nh
dGlvbihKU1N0cmluZ1JlZikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpjbGVhclBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldCgpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xl
YXJBbGxBcHBsaWNhdGlvbkNhY2hlcygpCit7CisgICAgZXdrX3NldHRpbmdzX2FwcGxpY2F0aW9u
X2NhY2hlX2NsZWFyKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFwcGxp
Y2F0aW9uQ2FjaGVPcmlnaW5RdW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCit7CisgICAg
RXdrX1NlY3VyaXR5X09yaWdpbiogb3JpZ2luID0gZXdrX2ZyYW1lX3NlY3VyaXR5X29yaWdpbl9n
ZXQoYnJvd3Nlci0+bWFpbkZyYW1lKCkpOworICAgIGV3a19zZWN1cml0eV9vcmlnaW5fYXBwbGlj
YXRpb25fY2FjaGVfcXVvdGFfc2V0KG9yaWdpbiwgcXVvdGEpOworICAgIGV3a19zZWN1cml0eV9v
cmlnaW5fZnJlZShvcmlnaW4pOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVh
ckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4oT3BhcXVlSlNTdHJpbmcqIHVybCkKK3sKKyAgICBF
d2tfU2VjdXJpdHlfT3JpZ2luKiBvcmlnaW4gPSBld2tfc2VjdXJpdHlfb3JpZ2luX25ld19mcm9t
X3N0cmluZyh1cmwtPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBld2tfc2VjdXJpdHlf
b3JpZ2luX2FwcGxpY2F0aW9uX2NhY2hlX2NsZWFyKG9yaWdpbik7CisgICAgZXdrX3NlY3VyaXR5
X29yaWdpbl9mcmVlKG9yaWdpbik7Cit9CisKK2xvbmcgbG9uZyBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6bG9jYWxTdG9yYWdlRGlza1VzYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmKQoreworICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdG8gc3VwcG9ydCBnZXR0aW5nIGRpc2sgdXNhZ2UgaW4gYnl0ZXMg
Zm9yIGFuIG9yaWdpbi4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQor
CitKU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aEFwcGxpY2F0aW9u
Q2FjaGUoSlNDb250ZXh0UmVmIGNvbnRleHQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0
byBnZXQgb3JpZ2lucyB0aGF0IGNvbnRhaW4gYXBwbGljYXRpb24gY2FjaGVzLgorICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwor
fQorCitsb25nIGxvbmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFwcGxpY2F0aW9uQ2FjaGVEaXNr
VXNhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gMDsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxEYXRh
YmFzZXMoKQoreworICAgIGV3a193ZWJfZGF0YWJhc2VfcmVtb3ZlX2FsbCgpOworfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXREYXRhYmFzZVF1b3RhKHVuc2lnbmVkIGxvbmcgbG9u
ZyBxdW90YSkKK3sKKyAgICBFd2tfU2VjdXJpdHlfT3JpZ2luKiBvcmlnaW4gPSBld2tfZnJhbWVf
c2VjdXJpdHlfb3JpZ2luX2dldChicm93c2VyLT5tYWluRnJhbWUoKSk7CisgICAgZXdrX3NlY3Vy
aXR5X29yaWdpbl93ZWJfZGF0YWJhc2VfcXVvdGFfc2V0KG9yaWdpbiwgcXVvdGEpOworICAgIGV3
a19zZWN1cml0eV9vcmlnaW5fZnJlZShvcmlnaW4pOworfQorCitKU1ZhbHVlUmVmIExheW91dFRl
c3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZShKU0NvbnRleHRSZWYgY29udGV4
dCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlQWxs
TG9jYWxTdG9yYWdlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyh1bnNpZ25lZCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzeW5jTG9j
YWxTdG9yYWdlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGJv
b2wgZm9yYmlkZGVuLCBKU1N0cmluZ1JlZiBzY2hlbWUpCit7CisgICAgRHVtcFJlbmRlclRyZWVT
dXBwb3J0RWZsOjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGZvcmJp
ZGRlbiwgV1RGOjpTdHJpbmcoc2NoZW1lLT51c3RyaW5nKCkuaW1wbCgpKSk7Cit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmdvQmFjaygpCit7CisgICAgZXdrX2ZyYW1lX2JhY2soYnJv
d3Nlci0+bWFpbkZyYW1lKCkpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRE
ZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQoreworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVm
bDo6c2V0RGVmZXJzTG9hZGluZyhicm93c2VyLT5tYWluVmlldygpLCBkZWZlcnMpOworfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBcHBDYWNoZU1heGltdW1TaXplKHVuc2lnbmVk
IGxvbmcgbG9uZyBzaXplKQoreworICAgIGV3a19zZXR0aW5nc19hcHBsaWNhdGlvbl9jYWNoZV9t
YXhfcXVvdGFfc2V0KHNpemUpOworfQorCitib29sIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVz
ZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBhbmltYXRpb25OYW1l
LCBkb3VibGUgdGltZSwgSlNTdHJpbmdSZWYgZWxlbWVudElkKQoreworICAgIHJldHVybiBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRFZmw6OnBhdXNlQW5pbWF0aW9uKGJyb3dzZXItPm1haW5GcmFtZSgp
LCBhbmltYXRpb25OYW1lLT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgZWxlbWVudElkLT51c3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSwgdGltZSk7Cit9CisKK2Jvb2wgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBwcm9w
ZXJ0eU5hbWUsIGRvdWJsZSB0aW1lLCBKU1N0cmluZ1JlZiBlbGVtZW50SWQpCit7CisgICAgcmV0
dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6cGF1c2VUcmFuc2l0aW9uKGJyb3dzZXItPm1h
aW5GcmFtZSgpLCBwcm9wZXJ0eU5hbWUtPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBlbGVtZW50
SWQtPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpLCB0aW1lKTsKK30KKwordW5zaWduZWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6YWN0aXZlQW5pbWF0aW9uc0NvdW50KGJy
b3dzZXItPm1haW5GcmFtZSgpKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHRvQm9vbChKU1N0
cmluZ1JlZiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gZXF1YWxzKHZhbHVlLCAidHJ1ZSIpIHx8IGVx
dWFscyh2YWx1ZSwgIjEiKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdG9JbnQoSlNTdHJpbmdS
ZWYgdmFsdWUpCit7CisgICAgcmV0dXJuIGF0b2kodmFsdWUtPnVzdHJpbmcoKS51dGY4KCkuZGF0
YSgpKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3ZlcnJpZGVQcmVmZXJlbmNl
KEpTU3RyaW5nUmVmIGtleSwgSlNTdHJpbmdSZWYgdmFsdWUpCit7CisgICAgaWYgKGVxdWFscyhr
ZXksICJXZWJLaXRKYXZhU2NyaXB0RW5hYmxlZCIpKQorICAgICAgICBld2tfdmlld19zZXR0aW5n
X2VuYWJsZV9zY3JpcHRzX3NldChicm93c2VyLT5tYWluVmlldygpLCB0b0Jvb2wodmFsdWUpKTsK
KyAgICBlbHNlIGlmIChlcXVhbHMoa2V5LCAiV2ViS2l0RGVmYXVsdEZvbnRTaXplIikpCisgICAg
ICAgIGV3a192aWV3X3NldHRpbmdfZm9udF9kZWZhdWx0X3NpemVfc2V0KGJyb3dzZXItPm1haW5W
aWV3KCksIHRvSW50KHZhbHVlKSk7CisgICAgZWxzZSBpZiAoZXF1YWxzKGtleSwgIldlYktpdE1p
bmltdW1Gb250U2l6ZSIpKQorICAgICAgICBld2tfdmlld19zZXR0aW5nX2ZvbnRfbWluaW11bV9z
aXplX3NldChicm93c2VyLT5tYWluVmlldygpLCB0b0ludCh2YWx1ZSkpOworICAgIGVsc2UgaWYg
KGVxdWFscyhrZXksICJXZWJLaXRQbHVnaW5zRW5hYmxlZCIpKQorICAgICAgICBld2tfdmlld19z
ZXR0aW5nX2VuYWJsZV9wbHVnaW5zX3NldChicm93c2VyLT5tYWluVmlldygpLCB0b0Jvb2wodmFs
dWUpKTsKKyAgICBlbHNlIGlmIChlcXVhbHMoa2V5LCAiV2ViS2l0V2ViR0xFbmFibGVkIikpCisg
ICAgICAgIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX3dlYmdsX3NldChicm93c2VyLT5tYWluVmll
dygpLCB0b0Jvb2wodmFsdWUpKTsKKyAgICBlbHNlIGlmIChlcXVhbHMoa2V5LCAiV2ViS2l0RW5h
YmxlQ2FyZXRCcm93c2luZyIpKQorICAgICAgICBld2tfdmlld19zZXR0aW5nX2NhcmV0X2Jyb3dz
aW5nX3NldChicm93c2VyLT5tYWluVmlldygpLCB0b0Jvb2wodmFsdWUpKTsKKyAgICBlbHNlIGlm
IChlcXVhbHMoa2V5LCAiV2ViS2l0VXNlc1BhZ2VDYWNoZVByZWZlcmVuY2VLZXkiKSkKKyAgICAg
ICAgZXdrX3ZpZXdfc2V0dGluZ19wYWdlX2NhY2hlX3NldChicm93c2VyLT5tYWluVmlldygpLCB0
b0Jvb2wodmFsdWUpKTsKKyAgICBlbHNlIGlmIChlcXVhbHMoa2V5LCAiV2ViS2l0SHlwZXJsaW5r
QXVkaXRpbmdFbmFibGVkIikpCisgICAgICAgIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2h5cGVy
bGlua19hdWRpdGluZ19zZXQoYnJvd3Nlci0+bWFpblZpZXcoKSwgdG9Cb29sKHZhbHVlKSk7Cisg
ICAgZWxzZSBpZiAoZXF1YWxzKGtleSwgIldlYktpdFRhYlRvTGlua3NQcmVmZXJlbmNlS2V5Iikp
CisgICAgICAgIGV3a192aWV3X3NldHRpbmdfaW5jbHVkZV9saW5rc19pbl9mb2N1c19jaGFpbl9z
ZXQoYnJvd3Nlci0+bWFpblZpZXcoKSwgdG9Cb29sKHZhbHVlKSk7CisgICAgZWxzZSBpZiAoZXF1
YWxzKGtleSwgIldlYktpdE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCIpKQorICAg
ICAgICBld2tfdmlld19zZXR0aW5nX2FwcGxpY2F0aW9uX2NhY2hlX3NldChicm93c2VyLT5tYWlu
VmlldygpLCB0b0Jvb2wodmFsdWUpKTsKKyAgICBlbHNlIGlmIChlcXVhbHMoa2V5LCAiV2ViS2l0
TG9hZFNpdGVJY29uc0tleSIpKQorICAgICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnNl
dExvYWRzU2l0ZUljb25zSWdub3JpbmdJbWFnZUxvYWRpbmdTZXR0aW5nKGJyb3dzZXItPm1haW5W
aWV3KCksIHRvQm9vbCh2YWx1ZSkpOworICAgIGVsc2UgaWYgKGVxdWFscyhrZXksICJXZWJLaXRD
U1NHcmlkTGF5b3V0RW5hYmxlZCIpKQorICAgICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6
OnNldENTU0dyaWRMYXlvdXRFbmFibGVkKGJyb3dzZXItPm1haW5WaWV3KCksIHRvQm9vbCh2YWx1
ZSkpOworICAgIGVsc2UgaWYgKGVxdWFscyhrZXksICJXZWJLaXRXZWJBdWRpb0VuYWJsZWQiKSkK
KyAgICAgICAgZXdrX3ZpZXdfc2V0dGluZ193ZWJfYXVkaW9fc2V0KGJyb3dzZXItPm1haW5WaWV3
KCksIHRvQm9vbCh2YWx1ZSkpOworICAgIGVsc2UKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJM
YXlvdXRUZXN0Q29udHJvbGxlcjo6b3ZlcnJpZGVQcmVmZXJlbmNlIHRyaWVkIHRvIG92ZXJyaWRl
IHVua25vd24gcHJlZmVyZW5jZSAnJXMnLlxuIiwgdmFsdWUtPnVzdHJpbmcoKS51dGY4KCkuZGF0
YSgpKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkVXNlclNjcmlwdChKU1N0
cmluZ1JlZiBzb3VyY2UsIGJvb2wgcnVuQXRTdGFydCwgYm9vbCBhbGxGcmFtZXMpCit7CisgICAg
RHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjphZGRVc2VyU2NyaXB0KGJyb3dzZXItPm1haW5WaWV3
KCksIFN0cmluZyhzb3VyY2UtPnVzdHJpbmcoKS5pbXBsKCkpLCBydW5BdFN0YXJ0LCBhbGxGcmFt
ZXMpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldChK
U1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgYWxsRnJhbWVzKQoreworICAgIER1bXBSZW5kZXJUcmVl
U3VwcG9ydEVmbDo6YWRkVXNlclN0eWxlU2hlZXQoYnJvd3Nlci0+bWFpblZpZXcoKSwgV1RGOjpT
dHJpbmcoc291cmNlLT51c3RyaW5nKCkuaW1wbCgpKSwgYWxsRnJhbWVzKTsKK30KKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChib29sIGVuYWJs
ZWQpCit7CisgICAgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfZGV2ZWxvcGVyX2V4dHJhc19zZXQo
YnJvd3Nlci0+bWFpblZpZXcoKSwgZW5hYmxlZCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2hvd1dl
Ykluc3BlY3RvcigpCit7CisgICAgZXdrX3ZpZXdfd2ViX2luc3BlY3Rvcl9zaG93KGJyb3dzZXIt
Pm1haW5WaWV3KCkpOworICAgIGJyb3dzZXItPndhaXRJbnNwZWN0b3JMb2FkRmluaXNoZWQoKTsK
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xvc2VXZWJJbnNwZWN0b3IoKQorewor
ICAgIGV3a192aWV3X3dlYl9pbnNwZWN0b3JfY2xvc2UoYnJvd3Nlci0+bWFpblZpZXcoKSk7Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IobG9u
ZyBjYWxsSWQsIEpTU3RyaW5nUmVmIHNjcmlwdCkKK3sKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRFZmw6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IoYnJvd3Nlci0+bWFpblZpZXcoKSwgY2FsbElk
LCBTdHJpbmcoc2NyaXB0LT51c3RyaW5nKCkuaW1wbCgpKSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUo
dW5zaWduZWQsIEpTT2JqZWN0UmVmLCBKU1N0cmluZ1JlZikKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNv
bGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpT
U3RyaW5nUmVmIHNjcmlwdCkKK3sKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmV2YWx1
YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKGJyb3dzZXItPm1haW5GcmFtZSgpLCB3b3JsZElELCBn
bG9iYWxPYmplY3QsIFN0cmluZyhzY3JpcHQtPnVzdHJpbmcoKS5pbXBsKCkpKTsKK30KKwordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCkKK3sKKyAgICBF
d2tfSGlzdG9yeSogaGlzdG9yeSA9IGV3a192aWV3X2hpc3RvcnlfZ2V0KGJyb3dzZXItPm1haW5W
aWV3KCkpOworICAgIGlmICghaGlzdG9yeSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZXdrX2hp
c3RvcnlfY2xlYXIoaGlzdG9yeSk7Cit9CisKK2Jvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNh
bGxTaG91bGRDbG9zZU9uV2ViVmlldygpCit7CisgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydEVmbDo6Y2FsbFNob3VsZENsb3NlT25XZWJWaWV3KGJyb3dzZXItPm1haW5GcmFtZSgpKTsK
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YXBpVGVzdE5ld1dpbmRvd0RhdGFMb2Fk
QmFzZVVSTChKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YXBpVGVzdEdvVG9DdXJyZW50QmFj
a0ZvcndhcmRJdGVtKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRXZWJWaWV3RWRpdGFibGUoYm9vbCkKK3sKKyAgICBld2tfZnJh
bWVfZWRpdGFibGVfc2V0KGJyb3dzZXItPm1haW5GcmFtZSgpLCBFSU5BX1RSVUUpOworfQorCitK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6Om1hcmtlclRleHRG
b3JMaXN0SXRlbShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBub2RlT2JqZWN0KSBj
b25zdAoreworICAgIFN0cmluZyBtYXJrZXJUZXh0Q2hhciA9IER1bXBSZW5kZXJUcmVlU3VwcG9y
dEVmbDo6bWFya2VyVGV4dEZvckxpc3RJdGVtKGNvbnRleHQsIG5vZGVPYmplY3QpOworICAgIGlm
IChtYXJrZXJUZXh0Q2hhci5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG1hcmtlclRleHQoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKG1hcmtlclRleHRDaGFyLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICByZXR1cm4g
bWFya2VyVGV4dDsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YXV0aGVudGljYXRl
U2Vzc2lvbihKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFib3J0TW9k
YWwoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldFNlcmlhbGl6ZUhUVFBMb2Fkcyhib29sIHNlcmlhbGl6ZSkKK3sKKyAgICBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRFZmw6OnNldFNlcmlhbGl6ZUhUVFBMb2FkcyhzZXJpYWxpemUpOwor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChk
b3VibGUgbWluaW11bVRpbWVySW50ZXJ2YWwpCit7CisgICAgZXdrX3ZpZXdfc2V0dGluZ19taW5p
bXVtX3RpbWVyX2ludGVydmFsX3NldChicm93c2VyLT5tYWluVmlldygpLCBtaW5pbXVtVGltZXJJ
bnRlcnZhbCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRleHREaXJlY3Rp
b24oSlNTdHJpbmdSZWYgZGlyZWN0aW9uKQoreworICAgIEV3a19UZXh0X0RpcmVjdGlvbiBld2tE
aXJlY3Rpb247CisgICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoZGlyZWN0aW9u
LCAiYXV0byIpKQorICAgICAgICBld2tEaXJlY3Rpb24gPSBFV0tfVEVYVF9ESVJFQ1RJT05fREVG
QVVMVDsKKyAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGRpcmVjdGlv
biwgInJ0bCIpKQorICAgICAgICBld2tEaXJlY3Rpb24gPSBFV0tfVEVYVF9ESVJFQ1RJT05fUklH
SFRfVE9fTEVGVDsKKyAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGRp
cmVjdGlvbiwgImx0ciIpKQorICAgICAgICBld2tEaXJlY3Rpb24gPSBFV0tfVEVYVF9ESVJFQ1RJ
T05fTEVGVF9UT19SSUdIVDsKKyAgICBlbHNlIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VGV4dERpcmVjdGlvbiBjYWxsZWQgd2l0aCB1bmtub3du
IGRpcmVjdGlvbjogJyVzJy5cbiIsIGRpcmVjdGlvbi0+dXN0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZXdrX3ZpZXdfdGV4dF9kaXJlY3Rpb25f
c2V0KGJyb3dzZXItPm1haW5WaWV3KCksIGV3a0RpcmVjdGlvbik7Cit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmFkZENocm9tZUlucHV0RmllbGQoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92ZUNocm9tZUlucHV0
RmllbGQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmZvY3VzV2ViVmlldygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QmFja2luZ1NjYWxlRmFjdG9yKGRvdWJsZSkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzaW11bGF0ZURlc2t0b3BOb3RpZmljYXRpb25DbGljayhKU1N0cmluZ1JlZiB0aXRsZSkKK3sK
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVzZXRQYWdlVmlzaWJpbGl0eSgpCit7
CisgICAgZXdrX3ZpZXdfdmlzaWJpbGl0eV9zdGF0ZV9zZXQoYnJvd3Nlci0+bWFpblZpZXcoKSwg
RVdLX1BBR0VfVklTSUJJTElUWV9TVEFURV9WSVNJQkxFLCB0cnVlKTsKK30KKwordm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0UGFnZVZpc2liaWxpdHkoY29uc3QgY2hhciogdmlzaWJpbGl0
eSkKK3sKKyAgICBTdHJpbmcgbmV3VmlzaWJpbGl0eSh2aXNpYmlsaXR5KTsKKyAgICBpZiAobmV3
VmlzaWJpbGl0eSA9PSAidmlzaWJsZSIpCisgICAgICAgIGV3a192aWV3X3Zpc2liaWxpdHlfc3Rh
dGVfc2V0KGJyb3dzZXItPm1haW5WaWV3KCksIEVXS19QQUdFX1ZJU0lCSUxJVFlfU1RBVEVfVklT
SUJMRSwgZmFsc2UpOworICAgIGVsc2UgaWYgKG5ld1Zpc2liaWxpdHkgPT0gImhpZGRlbiIpCisg
ICAgICAgIGV3a192aWV3X3Zpc2liaWxpdHlfc3RhdGVfc2V0KGJyb3dzZXItPm1haW5WaWV3KCks
IEVXS19QQUdFX1ZJU0lCSUxJVFlfU1RBVEVfSElEREVOLCBmYWxzZSk7CisgICAgZWxzZSBpZiAo
bmV3VmlzaWJpbGl0eSA9PSAicHJlcmVuZGVyIikKKyAgICAgICAgZXdrX3ZpZXdfdmlzaWJpbGl0
eV9zdGF0ZV9zZXQoYnJvd3Nlci0+bWFpblZpZXcoKSwgRVdLX1BBR0VfVklTSUJJTElUWV9TVEFU
RV9QUkVSRU5ERVIsIGZhbHNlKTsKKyAgICBlbHNlIGlmIChuZXdWaXNpYmlsaXR5ID09ICJwcmV2
aWV3IikKKyAgICAgICAgZXdrX3ZpZXdfdmlzaWJpbGl0eV9zdGF0ZV9zZXQoYnJvd3Nlci0+bWFp
blZpZXcoKSwgRVdLX1BBR0VfVklTSUJJTElUWV9TVEFURV9QUkVWSUVXLCBmYWxzZSk7Cit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFi
bGVkKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2VuZFdlYkludGVudFJlc3BvbnNlKEpTU3RyaW5nUmVmIHJlc3BvbnNlKQor
eworICAgIEV3a19JbnRlbnRfUmVxdWVzdCogcmVxdWVzdCA9IGJyb3dzZXItPmN1cnJlbnRJbnRl
bnRSZXF1ZXN0KCk7CisgICAgaWYgKCFyZXF1ZXN0KQorICAgICAgICByZXR1cm47CisKKyAgICBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnNlbmRXZWJJbnRlbnRSZXNwb25zZShyZXF1ZXN0LCBy
ZXNwb25zZSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGl2ZXJXZWJJbnRl
bnQoSlNTdHJpbmdSZWYgYWN0aW9uLCBKU1N0cmluZ1JlZiB0eXBlLCBKU1N0cmluZ1JlZiBkYXRh
KQoreworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6ZGVsaXZlcldlYkludGVudChicm93
c2VyLT5tYWluRnJhbWUoKSwgYWN0aW9uLCB0eXBlLCBkYXRhKTsKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0U3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsKGRvdWJsZSkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZs
L1Rlc3RSdW5uZXJFZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Vm
bC9UZXN0UnVubmVyRWZsLmNwcAkocmV2aXNpb24gMTI1MzM1KQorKysgVG9vbHMvRHVtcFJlbmRl
clRyZWUvZWZsL1Rlc3RSdW5uZXJFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3
IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkxheW91dFRlc3RDb250
cm9sbGVyLmgiCisjaW5jbHVkZSAiVGVzdFJ1bm5lci5oIgogCiAjaW5jbHVkZSAiRHVtcFJlbmRl
clRyZWUuaCIKICNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZUNocm9tZS5oIgpJbmRleDogVG9vbHMv
RHVtcFJlbmRlclRyZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3BwCShyZXZpc2lvbiAxMjUzMzUp
CisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw5ICszNiw5IEBACiAjaW5jbHVkZSAiRWRpdGluZ0NhbGxiYWNrcy5oIgog
I2luY2x1ZGUgIkV2ZW50U2VuZGVyLmgiCiAjaW5jbHVkZSAiR0NDb250cm9sbGVyLmgiCi0jaW5j
bHVkZSAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJQaXhlbER1bXBTdXBwb3J0
LmgiCiAjaW5jbHVkZSAiU2VsZlNjcm9sbGluZ1dlYktpdFdlYlZpZXcuaCIKKyNpbmNsdWRlICJU
ZXN0UnVubmVyLmgiCiAjaW5jbHVkZSAiVGV4dElucHV0Q29udHJvbGxlci5oIgogI2luY2x1ZGUg
IldlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oIgogI2luY2x1ZGUgIldl
YkNvcmVUZXN0U3VwcG9ydC5oIgpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0VkaXRp
bmdDYWxsYmFja3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9F
ZGl0aW5nQ2FsbGJhY2tzLmNwcAkocmV2aXNpb24gMTI1MzM1KQorKysgVG9vbHMvRHVtcFJlbmRl
clRyZWUvZ3RrL0VkaXRpbmdDYWxsYmFja3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICsz
MCw3IEBACiAjaW5jbHVkZSAiRWRpdGluZ0NhbGxiYWNrcy5oIgogCiAjaW5jbHVkZSAiRHVtcFJl
bmRlclRyZWUuaCIKLSNpbmNsdWRlICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgorI2luY2x1ZGUg
IlRlc3RSdW5uZXIuaCIKICNpbmNsdWRlIDxndGsvZ3RrLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dl
YmtpdC5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KSW5kZXg6IFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcAko
cmV2aXNpb24gMTI1MzM1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RD
b250cm9sbGVyR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDAyICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKiBDb3B5
cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gTWlj
aGFlbCBBbG9uem8gPGptYWxvbnpvQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwOSwy
MDExIENvbGxhYm9yYSBMdGQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSm9vbmUgSHVyIDxqb29u
ZUBrbGRwLm9yZz4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTGF5b3V0VGVzdENvbnRy
b2xsZXIuaCIKLQotI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCi0jaW5jbHVkZSAiV2ViQ29y
ZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmgiCi0jaW5jbHVkZSAiV29ya1F1ZXVl
LmgiCi0jaW5jbHVkZSAiV29ya1F1ZXVlSXRlbS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4K
LSNpbmNsdWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPGlvc3RyZWFtPgotI2luY2x1ZGUgPHNzdHJl
YW0+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8bGli
c291cC9zb3VwLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgotI2luY2x1ZGUgPHd0Zi9n
b2JqZWN0L0dPd25QdHIuaD4KLQotZXh0ZXJuICJDIiB7Ci12b2lkIHdlYmtpdF93ZWJfaW5zcGVj
dG9yX2V4ZWN1dGVfc2NyaXB0KFdlYktpdFdlYkluc3BlY3RvciogaW5zcGVjdG9yLCBsb25nIGNh
bGxJZCwgY29uc3QgZ2NoYXIqIHNjcmlwdCk7Ci19Ci0KLUxheW91dFRlc3RDb250cm9sbGVyOjp+
TGF5b3V0VGVzdENvbnRyb2xsZXIoKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkRGlzYWxsb3dlZFVSTChKU1N0cmluZ1JlZiB1
cmwpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpjbGVhckJhY2tGb3J3YXJkTGlzdCgpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogd2Vi
VmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7Ci0gICAgV2Vi
S2l0V2ViQmFja0ZvcndhcmRMaXN0KiBsaXN0ID0gd2Via2l0X3dlYl92aWV3X2dldF9iYWNrX2Zv
cndhcmRfbGlzdCh3ZWJWaWV3KTsKLSAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogaXRlbSA9IHdl
YmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbShsaXN0KTsKLSAgICBn
X29iamVjdF9yZWYoaXRlbSk7Ci0KLSAgICAvLyBXZSBjbGVhciB0aGUgaGlzdG9yeSBieSBzZXR0
aW5nIHRoZSBiYWNrL2ZvcndhcmQgbGlzdCdzIGNhcGFjaXR5IHRvIDAKLSAgICAvLyB0aGVuIHJl
c3RvcmluZyBpdCBiYWNrIGFuZCBhZGRpbmcgYmFjayB0aGUgY3VycmVudCBpdGVtLgotICAgIGdp
bnQgbGltaXQgPSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9saW1pdChsaXN0KTsK
LSAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X3NldF9saW1pdChsaXN0LCAwKTsKLSAg
ICB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X3NldF9saW1pdChsaXN0LCBsaW1pdCk7Ci0g
ICAgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRlbShsaXN0LCBpdGVtKTsKLSAg
ICB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dvX3RvX2l0ZW0obGlzdCwgaXRlbSk7Ci0g
ICAgZ19vYmplY3RfdW5yZWYoaXRlbSk7Ci19Ci0KLUpTU3RyaW5nUmVmIExheW91dFRlc3RDb250
cm9sbGVyOjpjb3B5RGVjb2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVmIG5hbWUpCi17Ci0gICAgLy8g
RklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiAwOwotfQotCi1KU1N0cmluZ1JlZiBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6Y29weUVuY29kZWRIb3N0TmFtZShKU1N0cmluZ1JlZiBuYW1lKQotewot
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6ZGlzcGF0Y2hQZW5kaW5nTG9hZFJlcXVlc3RzKCkKLXsKLSAgICAvLyBG
SVhNRTogSW1wbGVtZW50IGZvciB0ZXN0aW5nIGZpeCBmb3IgNjcyNzQ5NQotfQotCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpkaXNwbGF5KCkKLXsKLSAgICBkaXNwbGF5V2ViVmlldygpOwot
fQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjprZWVwV2ViSGlzdG9yeSgpCi17Ci0gICAg
Ly8gRklYTUU6IGltcGxlbWVudAotfQotCi1KU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9sbGVy
Ojpjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTVmFsdWVSZWYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0
azo6Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKGNvbnRleHQsIHZhbHVlKTsKLX0K
LQotSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpsYXllclRy
ZWVBc1RleHQoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gc3RyaW5nKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiIikpOwotICAgIHJldHVybiBzdHJpbmc7Ci19Ci0KLWludCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6bnVtYmVyT2ZQYWdlcyhmbG9hdCBwYWdlV2lkdGgsIGZsb2F0IHBhZ2VIZWlnaHQpCi17
Ci0gICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6bnVtYmVyT2ZQYWdlc0ZvckZy
YW1lKG1haW5GcmFtZSwgcGFnZVdpZHRoLCBwYWdlSGVpZ2h0KTsKLX0KLQotSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpwYWdlUHJvcGVydHkoY29uc3QgY2hh
ciogcHJvcGVydHlOYW1lLCBpbnQgcGFnZU51bWJlcikgY29uc3QKLXsKLSAgICBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gcHJvcGVydHlWYWx1ZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpwYWdlUHJvcGVydHkobWFpbkZyYW1l
LCBwcm9wZXJ0eU5hbWUsIHBhZ2VOdW1iZXIpLmRhdGEoKSkpOwotICAgIHJldHVybiBwcm9wZXJ0
eVZhbHVlOwotfQotCi1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKGludCBwYWdlTnVtYmVyLCBpbnQgd2lkdGgs
IGludCBoZWlnaHQsIGludCBtYXJnaW5Ub3AsIGludCBtYXJnaW5SaWdodCwgaW50IG1hcmdpbkJv
dHRvbSwgaW50IG1hcmdpbkxlZnQpIGNvbnN0Ci17Ci0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IHByb3BlcnR5VmFsdWUoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKER1
bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMobWFpbkZy
YW1lLCBwYWdlTnVtYmVyLCB3aWR0aCwgaGVpZ2h0LCBtYXJnaW5Ub3AsIG1hcmdpblJpZ2h0LCBt
YXJnaW5Cb3R0b20sIG1hcmdpbkxlZnQpLmRhdGEoKSkpOwotICAgIHJldHVybiBwcm9wZXJ0eVZh
bHVlOwotfQotCi1zaXplX3QgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndlYkhpc3RvcnlJdGVtQ291
bnQoKQotewotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dl
dF93ZWJfdmlldyhtYWluRnJhbWUpOwotICAgIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogbGlz
dCA9IHdlYmtpdF93ZWJfdmlld19nZXRfYmFja19mb3J3YXJkX2xpc3Qod2ViVmlldyk7Ci0KLSAg
ICBpZiAoIWxpc3QpCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIC8vIFdlIGRvIG5vdCBhZGQg
dGhlIGN1cnJlbnQgcGFnZSB0byB0aGUgdG90YWwgY291bnQgYXMgaXQncyBub3QKLSAgICAvLyBj
b25zaWRlcmVkIGluIERSVCB0ZXN0cwotICAgIHJldHVybiB3ZWJraXRfd2ViX2JhY2tfZm9yd2Fy
ZF9saXN0X2dldF9iYWNrX2xlbmd0aChsaXN0KSArCi0gICAgICAgICAgICB3ZWJraXRfd2ViX2Jh
Y2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xlbmd0aChsaXN0KTsKLX0KLQotdW5zaWduZWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OndvcmtlclRocmVhZENvdW50KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjp3b3JrZXJUaHJlYWRDb3VudCgpOwotfQot
Ci1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBsYXRmb3Jt
TmFtZSgpIGNvbnN0Ci17Ci0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHBsYXRmb3JtTmFt
ZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImd0ayIpKTsKLSAgICByZXR1
cm4gcGxhdGZvcm1OYW1lOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpub3RpZnlE
b25lKCkKLXsKLSAgICBpZiAobV93YWl0VG9EdW1wICYmICF0b3BMb2FkaW5nRnJhbWUgJiYgIVdv
cmtRdWV1ZTo6c2hhcmVkKCktPmNvdW50KCkpCi0gICAgICAgIGR1bXAoKTsKLSAgICBtX3dhaXRU
b0R1bXAgPSBmYWxzZTsKLSAgICB3YWl0Rm9yUG9saWN5ID0gZmFsc2U7Ci19Ci0KLUpTU3RyaW5n
UmVmIExheW91dFRlc3RDb250cm9sbGVyOjpwYXRoVG9Mb2NhbFJlc291cmNlKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU1N0cmluZ1JlZiB1cmwpCi17Ci0gICAgR093blB0cjxjaGFyPiB1cmxDU3Ry
aW5nKEpTU3RyaW5nQ29weVVURjhDU3RyaW5nKHVybCkpOwotICAgIGlmICghZ19zdHJfaGFzX3By
ZWZpeCh1cmxDU3RyaW5nLmdldCgpLCAiZmlsZTovLy90bXAvTGF5b3V0VGVzdHMvIikpCi0gICAg
ICAgIHJldHVybiBKU1N0cmluZ1JldGFpbih1cmwpOwotCi0gICAgY29uc3QgY2hhciogbGF5b3V0
VGVzdHNTdWZmaXggPSB1cmxDU3RyaW5nLmdldCgpICsgc3RybGVuKCJmaWxlOi8vL3RtcC8iKTsK
LSAgICBHT3duUHRyPGNoYXI+IHRlc3RQYXRoKGdfYnVpbGRfZmlsZW5hbWUoZ2V0VG9wTGV2ZWxQ
YXRoKCkuZGF0YSgpLCBsYXlvdXRUZXN0c1N1ZmZpeCwgTlVMTCkpOwotICAgIEdPd25QdHI8Y2hh
cj4gdGVzdFVSSShnX2ZpbGVuYW1lX3RvX3VyaSh0ZXN0UGF0aC5nZXQoKSwgMCwgMCkpOwotICAg
IHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyh0ZXN0VVJJLmdldCgpKTsKLX0K
LQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVMb2FkKEpTU3RyaW5nUmVmIHVybCwg
SlNTdHJpbmdSZWYgdGFyZ2V0KQotewotICAgIGdjaGFyKiByZWxhdGl2ZVVSTCA9IEpTU3RyaW5n
Q29weVVURjhDU3RyaW5nKHVybCk7Ci0gICAgU291cFVSSSogYmFzZVVSSSA9IHNvdXBfdXJpX25l
dyh3ZWJraXRfd2ViX2ZyYW1lX2dldF91cmkobWFpbkZyYW1lKSk7Ci0KLSAgICBTb3VwVVJJKiBh
YnNvbHV0ZVVSSSA9IHNvdXBfdXJpX25ld193aXRoX2Jhc2UoYmFzZVVSSSwgcmVsYXRpdmVVUkwp
OwotICAgIHNvdXBfdXJpX2ZyZWUoYmFzZVVSSSk7Ci0gICAgZ19mcmVlKHJlbGF0aXZlVVJMKTsK
LQotICAgIGdjaGFyKiBhYnNvbHV0ZUNTdHJpbmc7Ci0gICAgaWYgKGFic29sdXRlVVJJKSB7Ci0g
ICAgICAgIGFic29sdXRlQ1N0cmluZyA9IHNvdXBfdXJpX3RvX3N0cmluZyhhYnNvbHV0ZVVSSSwg
RkFMU0UpOwotICAgICAgICBzb3VwX3VyaV9mcmVlKGFic29sdXRlVVJJKTsKLSAgICB9IGVsc2UK
LSAgICAgICAgYWJzb2x1dGVDU3RyaW5nID0gSlNTdHJpbmdDb3B5VVRGOENTdHJpbmcodXJsKTsK
LQotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBhYnNvbHV0ZVVSTChBZG9wdCwgSlNTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYWJzb2x1dGVDU3RyaW5nKSk7Ci0gICAgZ19mcmVlKGFi
c29sdXRlQ1N0cmluZyk7Ci0KLSAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcgTG9h
ZEl0ZW0oYWJzb2x1dGVVUkwuZ2V0KCksIHRhcmdldCkpOwotfQotCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRBY2NlcHRzRWRpdGluZyhib29sIGFjY2VwdHNFZGl0aW5nKQotewotICAg
IFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyht
YWluRnJhbWUpOwotICAgIHdlYmtpdF93ZWJfdmlld19zZXRfZWRpdGFibGUod2ViVmlldywgYWNj
ZXB0c0VkaXRpbmcpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbHdheXNB
Y2NlcHRDb29raWVzKGJvb2wgYWx3YXlzQWNjZXB0Q29va2llcykKLXsKLSAgICBTb3VwU2Vzc2lv
biogc2Vzc2lvbiA9IHdlYmtpdF9nZXRfZGVmYXVsdF9zZXNzaW9uKCk7Ci0gICAgU291cENvb2tp
ZUphciogamFyID0gcmVpbnRlcnByZXRfY2FzdDxTb3VwQ29va2llSmFyKj4oc291cF9zZXNzaW9u
X2dldF9mZWF0dXJlKHNlc3Npb24sIFNPVVBfVFlQRV9DT09LSUVfSkFSKSk7Ci0KLSAgICAvKiBJ
ZiB0aGUgamFyIHdhcyBub3QgY3JlYXRlZCAtIHdlIGNyZWF0ZSBpdCBvbiBkZW1hbmQsIGkuZSwg
anVzdAotICAgICAgIGluIGNhc2Ugd2UgaGF2ZSBIVFRQIHJlcXVlc3RzIC0gdGhlbiB3ZSBtdXN0
IGNyZWF0ZSBpdCBoZXJlIGluCi0gICAgICAgb3JkZXIgdG8gc2V0IHRoZSBwcm9wZXIgYWNjZXB0
IHBvbGljeSAqLwotICAgIGlmICghamFyKSB7Ci0gICAgICAgIGphciA9IHNvdXBfY29va2llX2ph
cl9uZXcoKTsKLSAgICAgICAgc291cF9zZXNzaW9uX2FkZF9mZWF0dXJlKHNlc3Npb24sIFNPVVBf
U0VTU0lPTl9GRUFUVVJFKGphcikpOwotICAgICAgICBnX29iamVjdF91bnJlZihqYXIpOwotICAg
IH0KLQotICAgIFNvdXBDb29raWVKYXJBY2NlcHRQb2xpY3kgcG9saWN5OwotCi0gICAgaWYgKGFs
d2F5c0FjY2VwdENvb2tpZXMpCi0gICAgICAgIHBvbGljeSA9IFNPVVBfQ09PS0lFX0pBUl9BQ0NF
UFRfQUxXQVlTOwotICAgIGVsc2UKLSAgICAgICAgcG9saWN5ID0gU09VUF9DT09LSUVfSkFSX0FD
Q0VQVF9OT19USElSRF9QQVJUWTsKLQotICAgIGdfb2JqZWN0X3NldChHX09CSkVDVChqYXIpLCBT
T1VQX0NPT0tJRV9KQVJfQUNDRVBUX1BPTElDWSwgcG9saWN5LCBOVUxMKTsKLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoYm9vbCBzZXREZWxl
Z2F0ZSwgYm9vbCBwZXJtaXNzaXZlKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2FpdEZvclBvbGljeURlbGVnYXRlKCkKLXsKLSAg
ICB3YWl0Rm9yUG9saWN5ID0gdHJ1ZTsKLSAgICBzZXRXYWl0VG9EdW1wKHRydWUpOwotfQotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTY3JvbGxiYXJQb2xpY3koSlNTdHJpbmdSZWYg
b3JpZW50YXRpb24sIEpTU3RyaW5nUmVmIHBvbGljeSkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVt
ZW50Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE9yaWdpbkFjY2Vzc1doaXRl
bGlzdEVudHJ5KEpTU3RyaW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgcHJvdG9jb2ws
IEpTU3RyaW5nUmVmIGhvc3QsIGJvb2wgaW5jbHVkZVN1YmRvbWFpbnMpCi17Ci0gICAgZ2NoYXIq
IHNvdXJjZU9yaWdpbkdDaGFyID0gSlNTdHJpbmdDb3B5VVRGOENTdHJpbmcoc291cmNlT3JpZ2lu
KTsKLSAgICBnY2hhciogcHJvdG9jb2xHQ2hhciA9IEpTU3RyaW5nQ29weVVURjhDU3RyaW5nKHBy
b3RvY29sKTsKLSAgICBnY2hhciogaG9zdEdDaGFyID0gSlNTdHJpbmdDb3B5VVRGOENTdHJpbmco
aG9zdCk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjp3aGl0ZUxpc3RBY2Nlc3NGcm9t
T3JpZ2luKHNvdXJjZU9yaWdpbkdDaGFyLCBwcm90b2NvbEdDaGFyLCBob3N0R0NoYXIsIGluY2x1
ZGVTdWJkb21haW5zKTsKLSAgICBnX2ZyZWUoc291cmNlT3JpZ2luR0NoYXIpOwotICAgIGdfZnJl
ZShwcm90b2NvbEdDaGFyKTsKLSAgICBnX2ZyZWUoaG9zdEdDaGFyKTsKLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoSlNTdHJp
bmdSZWYgc291cmNlT3JpZ2luLCBKU1N0cmluZ1JlZiBwcm90b2NvbCwgSlNTdHJpbmdSZWYgaG9z
dCwgYm9vbCBpbmNsdWRlU3ViZG9tYWlucykKLXsKLSAgICBHT3duUHRyPGdjaGFyPiBzb3VyY2VP
cmlnaW5HQ2hhcihKU1N0cmluZ0NvcHlVVEY4Q1N0cmluZyhzb3VyY2VPcmlnaW4pKTsKLSAgICBH
T3duUHRyPGdjaGFyPiBwcm90b2NvbEdDaGFyKEpTU3RyaW5nQ29weVVURjhDU3RyaW5nKHByb3Rv
Y29sKSk7Ci0gICAgR093blB0cjxnY2hhcj4gaG9zdEdDaGFyKEpTU3RyaW5nQ29weVVURjhDU3Ry
aW5nKGhvc3QpKTsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnJlbW92ZVdoaXRlTGlz
dEFjY2Vzc0Zyb21PcmlnaW4oc291cmNlT3JpZ2luR0NoYXIuZ2V0KCksIHByb3RvY29sR0NoYXIu
Z2V0KCksIGhvc3RHQ2hhci5nZXQoKSwgaW5jbHVkZVN1YmRvbWFpbnMpOwotfQotCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRNYWluRnJhbWVJc0ZpcnN0UmVzcG9uZGVyKGJvb2wgZmxh
ZykKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhib29sIGN5Y2xlcykKLXsKLSAg
ICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXco
bWFpbkZyYW1lKTsKLSAgICBXZWJLaXRXZWJTZXR0aW5ncyogc2V0dGluZ3MgPSB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcpOwotICAgIGdfb2JqZWN0X3NldChHX09CSkVDVChz
ZXR0aW5ncyksICJ0YWIta2V5LWN5Y2xlcy10aHJvdWdoLWVsZW1lbnRzIiwgY3ljbGVzLCBOVUxM
KTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlRGFzaGJvYXJkQ29tcGF0
aWJpbGl0eU1vZGUoYm9vbCBmbGFnKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQot
c3RhdGljIGdjaGFyKiB1c2VyU3R5bGVTaGVldCA9IE5VTEw7Ci1zdGF0aWMgZ2Jvb2xlYW4gdXNl
clN0eWxlU2hlZXRFbmFibGVkID0gVFJVRTsKLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKGJvb2wgZmxhZykKLXsKLSAgICB1c2VyU3R5bGVTaGVl
dEVuYWJsZWQgPSBmbGFnOwotCi0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IHdlYmtpdF93
ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7Ci0gICAgV2ViS2l0V2ViU2V0dGluZ3Mq
IHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3KTsKLSAgICBp
ZiAoZmxhZyAmJiB1c2VyU3R5bGVTaGVldCkKLSAgICAgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNU
KHNldHRpbmdzKSwgInVzZXItc3R5bGVzaGVldC11cmkiLCB1c2VyU3R5bGVTaGVldCwgTlVMTCk7
Ci0gICAgZWxzZQotICAgICAgICBnX29iamVjdF9zZXQoR19PQkpFQ1Qoc2V0dGluZ3MpLCAidXNl
ci1zdHlsZXNoZWV0LXVyaSIsICIiLCBOVUxMKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihKU1N0cmluZ1JlZiBwYXRoKQotewotICAg
IGdfZnJlZSh1c2VyU3R5bGVTaGVldCk7Ci0gICAgdXNlclN0eWxlU2hlZXQgPSBKU1N0cmluZ0Nv
cHlVVEY4Q1N0cmluZyhwYXRoKTsKLSAgICBpZiAodXNlclN0eWxlU2hlZXRFbmFibGVkKQotICAg
ICAgICBzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQodHJ1ZSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFZhbHVlRm9yVXNlcihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1
ZVJlZiBub2RlT2JqZWN0LCBKU1N0cmluZ1JlZiB2YWx1ZSkKLXsKLSAgICBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRHdGs6OnNldFZhbHVlRm9yVXNlcihjb250ZXh0LCBub2RlT2JqZWN0LCB2YWx1ZSk7
Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFZpZXdNb2RlTWVkaWFGZWF0dXJl
KEpTU3RyaW5nUmVmIG1vZGUpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtpdF93
ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7Ci0gICAgQVNTRVJUKHZpZXcpOwotCi0g
ICAgY2hhciogdmlld01vZGUgPSBKU1N0cmluZ0NvcHlVVEY4Q1N0cmluZyhtb2RlKTsKLQotICAg
IGlmICghZ19zdHJjbXAwKHZpZXdNb2RlLCAid2luZG93ZWQiKSkKLSAgICAgICAgd2Via2l0X3dl
Yl92aWV3X3NldF92aWV3X21vZGUodmlldywgV0VCS0lUX1dFQl9WSUVXX1ZJRVdfTU9ERV9XSU5E
T1dFRCk7Ci0gICAgZWxzZSBpZiAoIWdfc3RyY21wMCh2aWV3TW9kZSwgImZsb2F0aW5nIikpCi0g
ICAgICAgIHdlYmtpdF93ZWJfdmlld19zZXRfdmlld19tb2RlKHZpZXcsIFdFQktJVF9XRUJfVklF
V19WSUVXX01PREVfRkxPQVRJTkcpOwotICAgIGVsc2UgaWYgKCFnX3N0cmNtcDAodmlld01vZGUs
ICJmdWxsc2NyZWVuIikpCi0gICAgICAgIHdlYmtpdF93ZWJfdmlld19zZXRfdmlld19tb2RlKHZp
ZXcsIFdFQktJVF9XRUJfVklFV19WSUVXX01PREVfRlVMTFNDUkVFTik7Ci0gICAgZWxzZSBpZiAo
IWdfc3RyY21wMCh2aWV3TW9kZSwgIm1heGltaXplZCIpKQotICAgICAgICB3ZWJraXRfd2ViX3Zp
ZXdfc2V0X3ZpZXdfbW9kZSh2aWV3LCBXRUJLSVRfV0VCX1ZJRVdfVklFV19NT0RFX01BWElNSVpF
RCk7Ci0gICAgZWxzZSBpZiAoIWdfc3RyY21wMCh2aWV3TW9kZSwgIm1pbmltaXplZCIpKQotICAg
ICAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3ZpZXdfbW9kZSh2aWV3LCBXRUJLSVRfV0VCX1ZJRVdf
VklFV19NT0RFX01JTklNSVpFRCk7Ci0KLSAgICBnX2ZyZWUodmlld01vZGUpOwotfQotCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXaW5kb3dJc0tleShib29sIHdpbmRvd0lzS2V5KQot
ewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkKGJvb2wgZmxhZykKLXsKLSAgICBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRHdGs6OnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCh3ZWJraXRfd2Vi
X2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpLCBmbGFnKTsKLX0KLQotc3RhdGljIGdib29s
ZWFuIHdhaXRUb0R1bXBXYXRjaGRvZ0ZpcmVkKHZvaWQqKQotewotICAgIHNldFdhaXRUb0R1bXBX
YXRjaGRvZygwKTsKLSAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXItPndhaXRUb0R1bXBXYXRjaGRv
Z1RpbWVyRmlyZWQoKTsKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldFdhaXRUb0R1bXAoYm9vbCB3YWl0VW50aWxEb25lKQotewotICAgIHN0YXRp
YyBjb25zdCBpbnQgdGltZW91dFNlY29uZHMgPSAzMDsKLQotICAgIG1fd2FpdFRvRHVtcCA9IHdh
aXRVbnRpbERvbmU7Ci0gICAgaWYgKG1fd2FpdFRvRHVtcCAmJiBzaG91bGRTZXRXYWl0VG9EdW1w
V2F0Y2hkb2coKSkKLSAgICAgICAgc2V0V2FpdFRvRHVtcFdhdGNoZG9nKGdfdGltZW91dF9hZGRf
c2Vjb25kcyh0aW1lb3V0U2Vjb25kcywgd2FpdFRvRHVtcFdhdGNoZG9nRmlyZWQsIDApKTsKLX0K
LQotaW50IExheW91dFRlc3RDb250cm9sbGVyOjp3aW5kb3dDb3VudCgpCi17Ci0gICAgLy8gKzEg
LT4gaW5jbHVkaW5nIHRoZSBtYWluIHZpZXcKLSAgICByZXR1cm4gZ19zbGlzdF9sZW5ndGgod2Vi
Vmlld0xpc3QpICsgMTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UHJpdmF0
ZUJyb3dzaW5nRW5hYmxlZChib29sIGZsYWcpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9
IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7Ci0gICAgQVNTRVJUKHZp
ZXcpOwotCi0gICAgV2ViS2l0V2ViU2V0dGluZ3MqIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3
X2dldF9zZXR0aW5ncyh2aWV3KTsKLSAgICBnX29iamVjdF9zZXQoR19PQkpFQ1Qoc2V0dGluZ3Mp
LCAiZW5hYmxlLXByaXZhdGUtYnJvd3NpbmciLCBmbGFnLCBOVUxMKTsKLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChib29sIGZs
YWcpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dl
Yl92aWV3KG1haW5GcmFtZSk7Ci0gICAgQVNTRVJUKHZpZXcpOwotCi0gICAgV2ViS2l0V2ViU2V0
dGluZ3MqIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh2aWV3KTsKLSAg
ICBnX29iamVjdF9zZXQoR19PQkpFQ1Qoc2V0dGluZ3MpLCAiamF2YXNjcmlwdC1jYW4tYWNjZXNz
LWNsaXBib2FyZCIsIGZsYWcsIE5VTEwpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRYU1NBdWRpdG9yRW5hYmxlZChib29sIGZsYWcpCi17Ci0gICAgV2ViS2l0V2ViVmlldyog
dmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7Ci0gICAgQVNT
RVJUKHZpZXcpOwotCi0gICAgV2ViS2l0V2ViU2V0dGluZ3MqIHNldHRpbmdzID0gd2Via2l0X3dl
Yl92aWV3X2dldF9zZXR0aW5ncyh2aWV3KTsKLSAgICBnX29iamVjdF9zZXQoR19PQkpFQ1Qoc2V0
dGluZ3MpLCAiZW5hYmxlLXhzcy1hdWRpdG9yIiwgZmxhZywgTlVMTCk7Ci19Ci0KLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoYm9vbCBmbGFnKQot
ewotICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmll
dyhtYWluRnJhbWUpOwotICAgIEFTU0VSVCh2aWV3KTsKLQotICAgIFdlYktpdFdlYlNldHRpbmdz
KiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Modmlldyk7Ci0gICAgZ19v
YmplY3Rfc2V0KEdfT0JKRUNUKHNldHRpbmdzKSwgImVuYWJsZS1mcmFtZS1mbGF0dGVuaW5nIiwg
ZmxhZywgTlVMTCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNwYXRpYWxO
YXZpZ2F0aW9uRW5hYmxlZChib29sIGZsYWcpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9
IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7Ci0gICAgQVNTRVJUKHZp
ZXcpOwotCi0gICAgV2ViS2l0V2ViU2V0dGluZ3MqIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3
X2dldF9zZXR0aW5ncyh2aWV3KTsKLSAgICBnX29iamVjdF9zZXQoR19PQkpFQ1Qoc2V0dGluZ3Mp
LCAiZW5hYmxlLXNwYXRpYWwtbmF2aWdhdGlvbiIsIGZsYWcsIE5VTEwpOwotfQotCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyhi
b29sIGZsYWcpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtpdF93ZWJfZnJhbWVf
Z2V0X3dlYl92aWV3KG1haW5GcmFtZSk7Ci0gICAgQVNTRVJUKHZpZXcpOwotCi0gICAgV2ViS2l0
V2ViU2V0dGluZ3MqIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh2aWV3
KTsKLSAgICBnX29iamVjdF9zZXQoR19PQkpFQ1Qoc2V0dGluZ3MpLCAiZW5hYmxlLXVuaXZlcnNh
bC1hY2Nlc3MtZnJvbS1maWxlLXVyaXMiLCBmbGFnLCBOVUxMKTsKLX0KLQotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wgZmxhZykK
LXsKLSAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3Zp
ZXcobWFpbkZyYW1lKTsKLSAgICBBU1NFUlQodmlldyk7Ci0KLSAgICBXZWJLaXRXZWJTZXR0aW5n
cyogc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHZpZXcpOwotICAgIGdf
b2JqZWN0X3NldChHX09CSkVDVChzZXR0aW5ncyksICJlbmFibGUtZmlsZS1hY2Nlc3MtZnJvbS1m
aWxlLXVyaXMiLCBmbGFnLCBOVUxMKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoYm9vbCBmbGFnKQotewotICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0b2ZpbGxl
ZChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBub2RlT2JqZWN0LCBib29sIGlzQXV0
b2ZpbGxlZCkKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNldEF1dG9maWxsZWQo
Y29udGV4dCwgbm9kZU9iamVjdCwgaXNBdXRvZmlsbGVkKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZGlzYWJsZUltYWdlTG9hZGluZygpCi17Ci0gICAgV2ViS2l0V2ViVmlldyog
dmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7Ci0gICAgQVNT
RVJUKHZpZXcpOwotCi0gICAgV2ViS2l0V2ViU2V0dGluZ3MqIHNldHRpbmdzID0gd2Via2l0X3dl
Yl92aWV3X2dldF9zZXR0aW5ncyh2aWV3KTsKLSAgICBnX29iamVjdF9zZXQoR19PQkpFQ1Qoc2V0
dGluZ3MpLCAiYXV0by1sb2FkLWltYWdlcyIsIEZBTFNFLCBOVUxMKTsKLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0RldmljZU9yaWVudGF0aW9uKGJvb2wgY2FuUHJvdmlk
ZUFscGhhLCBkb3VibGUgYWxwaGEsIGJvb2wgY2FuUHJvdmlkZUJldGEsIGRvdWJsZSBiZXRhLCBi
b29sIGNhblByb3ZpZGVHYW1tYSwgZG91YmxlIGdhbW1hKQotewotICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgZm9yIERldmljZU9yaWVudGF0aW9uIGxheW91dCB0ZXN0cy4KLSAgICAvLyBTZWUgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwMzM1LgotfQotCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0
aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSkKLXsKLSAgICBXZWJLaXRX
ZWJWaWV3KiB2aWV3ID0gV0VCS0lUX1dFQl9WSUVXKGdfc2xpc3RfbnRoX2RhdGEod2ViVmlld0xp
c3QsIDApKTsKLSAgICBpZiAoIXZpZXcpCi0gICAgICAgIHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1l
X2dldF93ZWJfdmlldyhtYWluRnJhbWUpOwotICAgIEFTU0VSVCh2aWV3KTsKLQotICAgIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24odmlldywgbGF0
aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3kpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRNb2NrR2VvbG9jYXRpb25FcnJvcihpbnQgY29kZSwgSlNTdHJpbmdSZWYgbWVzc2Fn
ZSkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gV0VCS0lUX1dFQl9WSUVXKGdfc2xpc3Rf
bnRoX2RhdGEod2ViVmlld0xpc3QsIDApKTsKLSAgICBpZiAoIXZpZXcpCi0gICAgICAgIHZpZXcg
PSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOwotICAgIEFTU0VSVCh2
aWV3KTsKLQotICAgIEdPd25QdHI8Z2NoYXI+IGNNZXNzYWdlKEpTU3RyaW5nQ29weVVURjhDU3Ry
aW5nKG1lc3NhZ2UpKTsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNldE1vY2tHZW9s
b2NhdGlvbkVycm9yKHZpZXcsIGNvZGUsIGNNZXNzYWdlLmdldCgpKTsKLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wgYWxsb3cpCi17
Ci0gICAgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29tbW9uKGFsbG93KTsKLSAgICBXZWJLaXRX
ZWJWaWV3KiB2aWV3ID0gV0VCS0lUX1dFQl9WSUVXKGdfc2xpc3RfbnRoX2RhdGEod2ViVmlld0xp
c3QsIDApKTsKLSAgICBpZiAoIXZpZXcpCi0gICAgICAgIHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1l
X2dldF93ZWJfdmlldyhtYWluRnJhbWUpOwotICAgIEFTU0VSVCh2aWV3KTsKLQotICAgIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0TW9ja0dlb2xvY2F0aW9uUGVybWlzc2lvbih2aWV3LCBh
bGxvdyk7Ci19Ci0KLWludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQZW5kaW5nR2Vv
bG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoKQotewotICAgIFdlYktpdFdlYlZpZXcqIHZpZXcg
PSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOwotICAgIGlmICghdmll
dykKLSAgICAgICAgdmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFt
ZSk7Ci0gICAgQVNTRVJUKHZpZXcpOwotCi0gICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9y
dEd0azo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHModmlldyk7
Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE1vY2tTcGVlY2hJbnB1dFJlc3Vs
dChKU1N0cmluZ1JlZiByZXN1bHQsIGRvdWJsZSBjb25maWRlbmNlLCBKU1N0cmluZ1JlZiBsYW5n
dWFnZSkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBzcGVlY2ggaW5wdXQgbGF5b3V0
IHRlc3RzLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Mzk0ODUuCi19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tTcGVlY2hJ
bnB1dER1bXBSZWN0KGJvb2wgZmxhZykKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBz
cGVlY2ggaW5wdXQgbGF5b3V0IHRlc3RzLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCi19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnN0YXJ0U3BlZWNoSW5wdXQoSlNDb250ZXh0UmVmIGlucHV0RWxlbWVudCkKLXsKLSAgICAv
LyBGSVhNRTogSW1wbGVtZW50IGZvciBzcGVlY2ggaW5wdXQgbGF5b3V0IHRlc3RzLgotICAgIC8v
IFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCi19Ci0K
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEljb25EYXRhYmFzZUVuYWJsZWQoYm9vbCBl
bmFibGVkKQotewotICAgIFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfZ2V0
X2ljb25fZGF0YWJhc2UoKTsKLSAgICBpZiAoZW5hYmxlZCkgewotICAgICAgICBHT3duUHRyPGdj
aGFyPiBpY29uRGF0YWJhc2VQYXRoKGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfdG1wX2RpcigpLCAi
RHVtcFJlbmRlclRyZWUiLCAiaWNvbmRhdGFiYXNlIiwgTlVMTCkpOwotICAgICAgICB3ZWJraXRf
aWNvbl9kYXRhYmFzZV9zZXRfcGF0aChkYXRhYmFzZSwgaWNvbkRhdGFiYXNlUGF0aC5nZXQoKSk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoKGRhdGFi
YXNlLCAwKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2VsZWN0VHJhaWxp
bmdXaGl0ZXNwYWNlRW5hYmxlZChib29sIGZsYWcpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBw
b3J0R3RrOjpzZXRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKGZsYWcpOwotfQotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQb3B1cEJsb2NraW5nRW5hYmxlZChib29sIGZs
YWcpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dl
Yl92aWV3KG1haW5GcmFtZSk7Ci0gICAgQVNTRVJUKHZpZXcpOwotCi0gICAgV2ViS2l0V2ViU2V0
dGluZ3MqIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh2aWV3KTsKLSAg
ICBnX29iamVjdF9zZXQoR19PQkpFQ1Qoc2V0dGluZ3MpLCAiamF2YXNjcmlwdC1jYW4tb3Blbi13
aW5kb3dzLWF1dG9tYXRpY2FsbHkiLCAhZmxhZywgTlVMTCk7Ci0KLX0KLQotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0UGx1Z2luc0VuYWJsZWQoYm9vbCBmbGFnKQotewotICAgIFdlYktp
dFdlYlZpZXcqIHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUp
OwotICAgIEFTU0VSVCh2aWV3KTsKLQotICAgIFdlYktpdFdlYlNldHRpbmdzKiBzZXR0aW5ncyA9
IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Modmlldyk7Ci0gICAgZ19vYmplY3Rfc2V0KEdf
T0JKRUNUKHNldHRpbmdzKSwgImVuYWJsZS1wbHVnaW5zIiwgZmxhZywgTlVMTCk7Ci19Ci0KLWJv
b2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVu
dFdpdGhJZChKU1N0cmluZ1JlZiBpZCkgCi17Ci0gICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydEd0azo6ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkKG1haW5GcmFt
ZSwgaWQpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpleGVjQ29tbWFuZChKU1N0
cmluZ1JlZiBuYW1lLCBKU1N0cmluZ1JlZiB2YWx1ZSkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB2
aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKLSAgICBBU1NF
UlQodmlldyk7Ci0KLSAgICBnY2hhciogY05hbWUgPSBKU1N0cmluZ0NvcHlVVEY4Q1N0cmluZyhu
YW1lKTsKLSAgICBnY2hhciogY1ZhbHVlID0gSlNTdHJpbmdDb3B5VVRGOENTdHJpbmcodmFsdWUp
OwotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6ZXhlY3V0ZUNvcmVDb21tYW5kQnlOYW1l
KHZpZXcsIGNOYW1lLCBjVmFsdWUpOwotICAgIGdfZnJlZShjTmFtZSk7Ci0gICAgZ19mcmVlKGNW
YWx1ZSk7Ci19Ci0KLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmZpbmRTdHJpbmcoSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTU3RyaW5nUmVmIHRhcmdldCwgSlNPYmplY3RSZWYgb3B0aW9uc0Fy
cmF5KQotewotICAgIFdlYktpdEZpbmRPcHRpb25zIGZpbmRPcHRpb25zID0gMDsKLSAgICBXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZy
YW1lKTsKLSAgICBBU1NFUlQod2ViVmlldyk7Ci0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gbGVuZ3RoUHJvcGVydHlOYW1lKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygibGVuZ3RoIikpOwotICAgIEpTVmFsdWVSZWYgbGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFBy
b3BlcnR5KGNvbnRleHQsIG9wdGlvbnNBcnJheSwgbGVuZ3RoUHJvcGVydHlOYW1lLmdldCgpLCAw
KTsgCi0gICAgaWYgKCFKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHT3duUHRyPGdjaGFyPiB0YXJnZXRTdHJpbmcoSlNT
dHJpbmdDb3B5VVRGOENTdHJpbmcodGFyZ2V0KSk7Ci0KLSAgICBzaXplX3QgbGVuZ3RoID0gc3Rh
dGljX2Nhc3Q8c2l6ZV90PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUsIDAp
KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIEpT
VmFsdWVSZWYgdmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBvcHRp
b25zQXJyYXksIGksIDApOyAKLSAgICAgICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwg
dmFsdWUpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgCi0gICAgICAgIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBvcHRpb25OYW1lKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRl
eHQsIHZhbHVlLCAwKSk7Ci0KLSAgICAgICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcob3B0aW9uTmFtZS5nZXQoKSwgIkNhc2VJbnNlbnNpdGl2ZSIpKQotICAgICAgICAgICAgZmlu
ZE9wdGlvbnMgfD0gV2ViS2l0OjpXZWJGaW5kT3B0aW9uc0Nhc2VJbnNlbnNpdGl2ZTsKLSAgICAg
ICAgZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRpb25OYW1lLmdldCgp
LCAiQXRXb3JkU3RhcnRzIikpCi0gICAgICAgICAgICBmaW5kT3B0aW9ucyB8PSBXZWJLaXQ6Oldl
YkZpbmRPcHRpb25zQXRXb3JkU3RhcnRzOwotICAgICAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG9wdGlvbk5hbWUuZ2V0KCksICJUcmVhdE1lZGlhbENhcGl0YWxBc1dv
cmRTdGFydCIpKQotICAgICAgICAgICAgZmluZE9wdGlvbnMgfD0gV2ViS2l0OjpXZWJGaW5kT3B0
aW9uc1RyZWF0TWVkaWFsQ2FwaXRhbEFzV29yZFN0YXJ0OwotICAgICAgICBlbHNlIGlmIChKU1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG9wdGlvbk5hbWUuZ2V0KCksICJCYWNrd2FyZHMiKSkK
LSAgICAgICAgICAgIGZpbmRPcHRpb25zIHw9IFdlYktpdDo6V2ViRmluZE9wdGlvbnNCYWNrd2Fy
ZHM7Ci0gICAgICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9u
TmFtZS5nZXQoKSwgIldyYXBBcm91bmQiKSkKLSAgICAgICAgICAgIGZpbmRPcHRpb25zIHw9IFdl
YktpdDo6V2ViRmluZE9wdGlvbnNXcmFwQXJvdW5kOwotICAgICAgICBlbHNlIGlmIChKU1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG9wdGlvbk5hbWUuZ2V0KCksICJTdGFydEluU2VsZWN0aW9u
IikpCi0gICAgICAgICAgICBmaW5kT3B0aW9ucyB8PSBXZWJLaXQ6OldlYkZpbmRPcHRpb25zU3Rh
cnRJblNlbGVjdGlvbjsKLSAgICB9ICAgCi0KLSAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBw
b3J0R3RrOjpmaW5kU3RyaW5nKHdlYlZpZXcsIHRhcmdldFN0cmluZy5nZXQoKSwgZmluZE9wdGlv
bnMpOyAKLX0KLQotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6aXNDb21tYW5kRW5hYmxlZChK
U1N0cmluZ1JlZiBuYW1lKQotewotICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSB3ZWJraXRfd2Vi
X2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOwotICAgIEFTU0VSVCh2aWV3KTsKLQotICAg
IGdjaGFyKiBjTmFtZSA9IEpTU3RyaW5nQ29weVVURjhDU3RyaW5nKG5hbWUpOwotICAgIGJvb2wg
cmVzdWx0ID0gRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjppc0NvbW1hbmRFbmFibGVkKHZpZXcs
IGNOYW1lKTsKLSAgICBnX2ZyZWUoY05hbWUpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldENhY2hlTW9kZWwoaW50IGNhY2hlTW9kZWwpCi17
Ci0gICAgLy8gVGhlc2UgY29uc3RhbnRzIGFyZSBkZXJpdmVkIGZyb20gdGhlIE1hYyBjYWNoZSBt
b2RlbCBlbnVtIGluIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMuaC4K
LSAgICBzd2l0Y2ggKGNhY2hlTW9kZWwpIHsKLSAgICBjYXNlIDA6Ci0gICAgICAgIHdlYmtpdF9z
ZXRfY2FjaGVfbW9kZWwoV0VCS0lUX0NBQ0hFX01PREVMX0RPQ1VNRU5UX1ZJRVdFUik7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgMToKLSAgICAgICAgd2Via2l0X3NldF9jYWNoZV9tb2RlbChX
RUJLSVRfQ0FDSEVfTU9ERUxfRE9DVU1FTlRfQlJPV1NFUik7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgMjoKLSAgICAgICAgd2Via2l0X3NldF9jYWNoZV9tb2RlbChXRUJLSVRfQ0FDSEVfTU9E
RUxfV0VCX0JST1dTRVIpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldFBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldExvY2F0aW9uKEpTU3RyaW5nUmVmIGpzVVJM
KQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6Y2xlYXJQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXQoKQotewotICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxBcHBsaWNh
dGlvbkNhY2hlcygpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBzdXBwb3J0IGFwcGxp
Y2F0aW9uIGNhY2hlIHF1b3Rhcy4KLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
QXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSkKLXsK
LSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIHN1cHBvcnQgYXBwbGljYXRpb24gY2FjaGUgcXVv
dGFzLgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFwcGxpY2F0aW9uQ2Fj
aGVGb3JPcmlnaW4oT3BhcXVlSlNTdHJpbmcqKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dG8gc3VwcG9ydCBkZWxldGluZyBhbGwgYXBwbGljYXRpb24gY2FjaGVzIGZvciBhbiBvcmlnaW4u
Ci19Ci0KLWxvbmcgbG9uZyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bG9jYWxTdG9yYWdlRGlza1Vz
YWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIG9yaWdpbklkZW50aWZpZXIpCi17Ci0gICAgLy8gRklY
TUU6IEltcGxlbWVudCB0byBzdXBwb3J0IGdldHRpbmcgZGlzayB1c2FnZSBpbiBieXRlcyBmb3Ig
YW4gb3JpZ2luLgotICAgIHJldHVybiAwOwotfQotCi1KU1ZhbHVlUmVmIExheW91dFRlc3RDb250
cm9sbGVyOjpvcmlnaW5zV2l0aEFwcGxpY2F0aW9uQ2FjaGUoSlNDb250ZXh0UmVmIGNvbnRleHQp
Ci17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBnZXQgb3JpZ2lucyB0aGF0IGNvbnRhaW4g
YXBwbGljYXRpb24gY2FjaGVzLgotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKLX0KLQotbG9uZyBsb25nIExheW91dFRlc3RDb250cm9sbGVyOjphcHBsaWNhdGlvbkNh
Y2hlRGlza1VzYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIG5hbWUpCi17Ci0gICAgLy8gRklYTUU6
IGltcGxlbWVudAotICAgIHJldHVybiAwOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpjbGVhckFsbERhdGFiYXNlcygpCi17Ci0gICAgd2Via2l0X3JlbW92ZV9hbGxfd2ViX2RhdGFi
YXNlcygpOwotfQotIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGF0YWJhc2VRdW90
YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCi17Ci0gICAgV2ViS2l0U2VjdXJpdHlPcmlnaW4q
IG9yaWdpbiA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3NlY3VyaXR5X29yaWdpbihtYWluRnJhbWUp
OwotICAgIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fc2V0X3dlYl9kYXRhYmFzZV9xdW90YShvcmln
aW4sIHF1b3RhKTsKLX0KLQotSlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2lu
c1dpdGhMb2NhbFN0b3JhZ2UoSlNDb250ZXh0UmVmIGNvbnRleHQpCi17Ci0gICAgLy8gRklYTUU6
IGltcGxlbWVudAotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0K
LQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlQWxsTG9jYWxTdG9yYWdlKCkKLXsK
LSAgICAgICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgb3JpZ2luSWRlbnRp
ZmllcikKLXsKLSAgICAgICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKHVuc2lnbmVk
IG51bWJlcikKLXsKLSAgICAgICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzeW5jTG9jYWxTdG9yYWdlKCkKLXsKLSAgICAvLyBGSVhNRTogaW1w
bGVtZW50Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERvbWFpblJlbGF4YXRp
b25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoYm9vbCBmb3JiaWRkZW4sIEpTU3RyaW5nUmVmIHNjaGVt
ZSkKLXsKLSAgICBHT3duUHRyPGdjaGFyPiB1cmxTY2hlbWUoSlNTdHJpbmdDb3B5VVRGOENTdHJp
bmcoc2NoZW1lKSk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXREb21haW5SZWxh
eGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGZvcmJpZGRlbiwgdXJsU2NoZW1lLmdldCgpKTsK
LX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Z29CYWNrKCkKLXsKLSAgICBXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1l
KTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfZ29fYmFjayh3ZWJWaWV3KTsKLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKLXsKLSAgICBX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFp
bkZyYW1lKTsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNldERlZmVyc0xvYWRpbmco
d2ViVmlldywgZGVmZXJzKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXBw
Q2FjaGVNYXhpbXVtU2l6ZSh1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSkKLXsKLSAgICB3ZWJraXRf
YXBwbGljYXRpb25fY2FjaGVfc2V0X21heGltdW1fc2l6ZShzaXplKTsKLX0KLQotYm9vbCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6cGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoSlNT
dHJpbmdSZWYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWUsIEpTU3RyaW5nUmVmIGVsZW1lbnRJ
ZCkKLXsgICAgCi0gICAgZ2NoYXIqIG5hbWUgPSBKU1N0cmluZ0NvcHlVVEY4Q1N0cmluZyhhbmlt
YXRpb25OYW1lKTsKLSAgICBnY2hhciogZWxlbWVudCA9IEpTU3RyaW5nQ29weVVURjhDU3RyaW5n
KGVsZW1lbnRJZCk7Ci0gICAgYm9vbCByZXR1cm5WYWx1ZSA9IER1bXBSZW5kZXJUcmVlU3VwcG9y
dEd0azo6cGF1c2VBbmltYXRpb24obWFpbkZyYW1lLCBuYW1lLCB0aW1lLCBlbGVtZW50KTsKLSAg
ICBnX2ZyZWUobmFtZSk7Ci0gICAgZ19mcmVlKGVsZW1lbnQpOwotICAgIHJldHVybiByZXR1cm5W
YWx1ZTsKLX0KLQotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF1c2VUcmFuc2l0aW9uQXRU
aW1lT25FbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgZG91YmxlIHRpbWUs
IEpTU3RyaW5nUmVmIGVsZW1lbnRJZCkKLXsgICAgCi0gICAgZ2NoYXIqIG5hbWUgPSBKU1N0cmlu
Z0NvcHlVVEY4Q1N0cmluZyhwcm9wZXJ0eU5hbWUpOwotICAgIGdjaGFyKiBlbGVtZW50ID0gSlNT
dHJpbmdDb3B5VVRGOENTdHJpbmcoZWxlbWVudElkKTsKLSAgICBib29sIHJldHVyblZhbHVlID0g
RHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpwYXVzZVRyYW5zaXRpb24obWFpbkZyYW1lLCBuYW1l
LCB0aW1lLCBlbGVtZW50KTsKLSAgICBnX2ZyZWUobmFtZSk7Ci0gICAgZ19mcmVlKGVsZW1lbnQp
OwotICAgIHJldHVybiByZXR1cm5WYWx1ZTsKLX0KLQotdW5zaWduZWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIER1
bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKG1haW5GcmFt
ZSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBib29sZWFuRnJvbVZhbHVlKGdjaGFyKiB2YWx1ZSkK
LXsKLSAgICByZXR1cm4gIWdfYXNjaWlfc3RyY2FzZWNtcCh2YWx1ZSwgInRydWUiKSB8fCAhZ19h
c2NpaV9zdHJjYXNlY21wKHZhbHVlLCAiMSIpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpvdmVycmlkZVByZWZlcmVuY2UoSlNTdHJpbmdSZWYga2V5LCBKU1N0cmluZ1JlZiB2YWx1
ZSkKLXsKLSAgICBHT3duUHRyPGdjaGFyPiBvcmlnaW5hbE5hbWUoSlNTdHJpbmdDb3B5VVRGOENT
dHJpbmcoa2V5KSk7Ci0gICAgR093blB0cjxnY2hhcj4gdmFsdWVBc1N0cmluZyhKU1N0cmluZ0Nv
cHlVVEY4Q1N0cmluZyh2YWx1ZSkpOwotCi0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtp
dF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7Ci0gICAgQVNTRVJUKHZpZXcpOwot
Ci0gICAgLy8gVGhpcyB0cmFuc2Zvcm1hdGlvbiBjb3VsZCBiZSBoYW5kbGVkIGJ5IGEgaGFzaCB0
YWJsZSAoYW5kIGl0IG9uY2Ugd2FzKSwgYnV0Ci0gICAgLy8gaGF2aW5nIGl0IHByb21pbmVudCwg
bWFrZXMgaXQgZWFzaWVyIGZvciBwZW9wbGUgZnJvbSBvdGhlciBwb3J0cyB0byBrZWVwIHRoZQot
ICAgIC8vIGxpc3QgdXAgdG8gZGF0ZS4KLSAgICBjb25zdCBnY2hhciogcHJvcGVydHlOYW1lID0g
MDsKLSAgICBpZiAoZ19zdHJfZXF1YWwob3JpZ2luYWxOYW1lLmdldCgpLCAiV2ViS2l0SmF2YVNj
cmlwdEVuYWJsZWQiKSkKLSAgICAgICAgcHJvcGVydHlOYW1lID0gImVuYWJsZS1zY3JpcHRzIjsK
LSAgICBlbHNlIGlmIChnX3N0cl9lcXVhbChvcmlnaW5hbE5hbWUuZ2V0KCksICJXZWJLaXREZWZh
dWx0Rm9udFNpemUiKSkKLSAgICAgICAgcHJvcGVydHlOYW1lID0gImRlZmF1bHQtZm9udC1zaXpl
IjsKLSAgICBlbHNlIGlmIChnX3N0cl9lcXVhbChvcmlnaW5hbE5hbWUuZ2V0KCksICJXZWJLaXRF
bmFibGVDYXJldEJyb3dzaW5nIikpCi0gICAgICAgIHByb3BlcnR5TmFtZSA9ICJlbmFibGUtY2Fy
ZXQtYnJvd3NpbmciOwotICAgIGVsc2UgaWYgKGdfc3RyX2VxdWFsKG9yaWdpbmFsTmFtZS5nZXQo
KSwgIldlYktpdFVzZXNQYWdlQ2FjaGVQcmVmZXJlbmNlS2V5IikpCi0gICAgICAgIHByb3BlcnR5
TmFtZSA9ICJlbmFibGUtcGFnZS1jYWNoZSI7Ci0gICAgZWxzZSBpZiAoZ19zdHJfZXF1YWwob3Jp
Z2luYWxOYW1lLmdldCgpLCAiV2ViS2l0UGx1Z2luc0VuYWJsZWQiKSkKLSAgICAgICAgcHJvcGVy
dHlOYW1lID0gImVuYWJsZS1wbHVnaW5zIjsKLSAgICBlbHNlIGlmIChnX3N0cl9lcXVhbChvcmln
aW5hbE5hbWUuZ2V0KCksICJXZWJLaXRIeXBlcmxpbmtBdWRpdGluZ0VuYWJsZWQiKSkKLSAgICAg
ICAgcHJvcGVydHlOYW1lID0gImVuYWJsZS1oeXBlcmxpbmstYXVkaXRpbmciOwotICAgIGVsc2Ug
aWYgKGdfc3RyX2VxdWFsKG9yaWdpbmFsTmFtZS5nZXQoKSwgIldlYktpdFdlYkdMRW5hYmxlZCIp
KQotICAgICAgICBwcm9wZXJ0eU5hbWUgPSAiZW5hYmxlLXdlYmdsIjsKLSAgICBlbHNlIGlmIChn
X3N0cl9lcXVhbChvcmlnaW5hbE5hbWUuZ2V0KCksICJXZWJLaXRXZWJBdWRpb0VuYWJsZWQiKSkK
LSAgICAgICAgcHJvcGVydHlOYW1lID0gImVuYWJsZS13ZWJhdWRpbyI7Ci0gICAgZWxzZSBpZiAo
Z19zdHJfZXF1YWwob3JpZ2luYWxOYW1lLmdldCgpLCAiV2ViS2l0VGFiVG9MaW5rc1ByZWZlcmVu
Y2VLZXkiKSkgewotICAgICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNldExpbmtzSW5j
bHVkZWRJbkZvY3VzQ2hhaW4oYm9vbGVhbkZyb21WYWx1ZSh2YWx1ZUFzU3RyaW5nLmdldCgpKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKG9yaWdpbmFsTmFt
ZS5nZXQoKSwgIldlYktpdFBhZ2VDYWNoZVN1cHBvcnRzUGx1Z2luc1ByZWZlcmVuY2VLZXkiKSkg
ewotICAgICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNldFBhZ2VDYWNoZVN1cHBvcnRz
UGx1Z2lucyh3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpLCBib29sZWFu
RnJvbVZhbHVlKHZhbHVlQXNTdHJpbmcuZ2V0KCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0g
ZWxzZSBpZiAoZ19zdHJfZXF1YWwob3JpZ2luYWxOYW1lLmdldCgpLCAiV2ViS2l0Q1NTR3JpZExh
eW91dEVuYWJsZWQiKSkgewotICAgICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNldENT
U0dyaWRMYXlvdXRFbmFibGVkKHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFt
ZSksIGJvb2xlYW5Gcm9tVmFsdWUodmFsdWVBc1N0cmluZy5nZXQoKSkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChvcmlnaW5hbE5hbWUuZ2V0KCksICJXZWJL
aXRDU1NSZWdpb25zRW5hYmxlZCIpKSB7Ci0gICAgICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0
azo6c2V0Q1NTUmVnaW9uc0VuYWJsZWQod2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFp
bkZyYW1lKSwgYm9vbGVhbkZyb21WYWx1ZSh2YWx1ZUFzU3RyaW5nLmdldCgpKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9IGVsc2UgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkxheW91dFRl
c3RDb250cm9sbGVyOjpvdmVycmlkZVByZWZlcmVuY2UgdHJpZWQgdG8gb3ZlcnJpZGUgIgotICAg
ICAgICAgICAgICAgICJ1bmtub3duIHByZWZlcmVuY2UgJyVzJy5cbiIsIG9yaWdpbmFsTmFtZS5n
ZXQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBXZWJLaXRXZWJTZXR0aW5ncyog
c2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHZpZXcpOwotICAgIEdQYXJh
bVNwZWMqIHBzcGVjID0gZ19vYmplY3RfY2xhc3NfZmluZF9wcm9wZXJ0eShHX09CSkVDVF9DTEFT
UygKLSAgICAgICAgV0VCS0lUX1dFQl9TRVRUSU5HU19HRVRfQ0xBU1Moc2V0dGluZ3MpKSwgcHJv
cGVydHlOYW1lKTsKLSAgICBHVmFsdWUgY3VycmVudFByb3BlcnR5VmFsdWUgPSB7IDAsIHsgeyAw
IH0gfSB9OwotICAgIGdfdmFsdWVfaW5pdCgmY3VycmVudFByb3BlcnR5VmFsdWUsIHBzcGVjLT52
YWx1ZV90eXBlKTsKLQotICAgIGlmIChHX1ZBTFVFX0hPTERTX1NUUklORygmY3VycmVudFByb3Bl
cnR5VmFsdWUpKQotICAgICAgICBnX29iamVjdF9zZXQoc2V0dGluZ3MsIHByb3BlcnR5TmFtZSwg
dmFsdWVBc1N0cmluZy5nZXQoKSwgTlVMTCk7Ci0gICAgZWxzZSBpZiAoR19WQUxVRV9IT0xEU19C
T09MRUFOKCZjdXJyZW50UHJvcGVydHlWYWx1ZSkpCi0gICAgICAgIGdfb2JqZWN0X3NldChHX09C
SkVDVChzZXR0aW5ncyksIHByb3BlcnR5TmFtZSwgYm9vbGVhbkZyb21WYWx1ZSh2YWx1ZUFzU3Ry
aW5nLmdldCgpKSwgTlVMTCk7Ci0gICAgZWxzZSBpZiAoR19WQUxVRV9IT0xEU19JTlQoJmN1cnJl
bnRQcm9wZXJ0eVZhbHVlKSkKLSAgICAgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHNldHRpbmdz
KSwgcHJvcGVydHlOYW1lLCBhdG9pKHZhbHVlQXNTdHJpbmcuZ2V0KCkpLCBOVUxMKTsKLSAgICBl
bHNlIGlmIChHX1ZBTFVFX0hPTERTX0ZMT0FUKCZjdXJyZW50UHJvcGVydHlWYWx1ZSkpIHsKLSAg
ICAgICAgZ2Zsb2F0IG5ld1ZhbHVlID0gZ19hc2NpaV9zdHJ0b2QodmFsdWVBc1N0cmluZy5nZXQo
KSwgMCk7Ci0gICAgICAgIGdfb2JqZWN0X3NldChHX09CSkVDVChzZXR0aW5ncyksIHByb3BlcnR5
TmFtZSwgbmV3VmFsdWUsIE5VTEwpOwotICAgIH0gZWxzZQotICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIkxheW91dFRlc3RDb250cm9sbGVyOjpvdmVycmlkZVByZWZlcmVuY2UgZmFpbGVkIHRvIG92
ZXJyaWRlICIKLSAgICAgICAgICAgICAgICAicHJlZmVyZW5jZSAnJXMnLlxuIiwgb3JpZ2luYWxO
YW1lLmdldCgpKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkVXNlclNjcmlw
dChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgcnVuQXRTdGFydCwgYm9vbCBhbGxGcmFtZXMpCi17
Ci0gICAgcHJpbnRmKCJMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkVXNlclNjcmlwdCBub3QgaW1w
bGVtZW50ZWQuXG4iKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkVXNlclN0
eWxlU2hlZXQoSlNTdHJpbmdSZWYgc291cmNlLCBib29sIGFsbEZyYW1lcykKLXsKLSAgICBHT3du
UHRyPGdjaGFyPiBzb3VyY2VDb2RlKEpTU3RyaW5nQ29weVVURjhDU3RyaW5nKHNvdXJjZSkpOwot
ICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6YWRkVXNlclN0eWxlU2hlZXQobWFpbkZyYW1l
LCBzb3VyY2VDb2RlLmdldCgpLCBhbGxGcmFtZXMpOwotICAgIC8vIEZJWE1FOiBuZWVkcyBtb3Jl
IGludmVzdGlnYXRpb24gd2h5IHVzZXJzY3JpcHRzL3VzZXItc3R5bGUtdG9wLWZyYW1lLW9ubHku
aHRtbCBmYWlscyB3aGVuIGFsbEZyYW1lcyBpcyBmYWxzZS4KLQotfQotCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKLXsK
LSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3Zp
ZXcobWFpbkZyYW1lKTsKLSAgICBXZWJLaXRXZWJTZXR0aW5ncyogd2ViU2V0dGluZ3MgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcpOwotCi0gICAgZ19vYmplY3Rfc2V0KHdl
YlNldHRpbmdzLCAiZW5hYmxlLWRldmVsb3Blci1leHRyYXMiLCBlbmFibGVkLCBOVUxMKTsKLX0K
LQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWQoYm9vbCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi19Ci0KLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNob3dXZWJJbnNwZWN0b3IoKQotewotICAgIFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJh
bWUpOwotICAgIFdlYktpdFdlYkluc3BlY3RvciogaW5zcGVjdG9yID0gd2Via2l0X3dlYl92aWV3
X2dldF9pbnNwZWN0b3Iod2ViVmlldyk7Ci0KLSAgICB3ZWJraXRfd2ViX2luc3BlY3Rvcl9zaG93
KGluc3BlY3Rvcik7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsb3NlV2ViSW5z
cGVjdG9yKCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl9mcmFt
ZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKLSAgICBXZWJLaXRXZWJJbnNwZWN0b3IqIGluc3Bl
Y3RvciA9IHdlYmtpdF93ZWJfdmlld19nZXRfaW5zcGVjdG9yKHdlYlZpZXcpOwotCi0gICAgd2Vi
a2l0X3dlYl9pbnNwZWN0b3JfY2xvc2UoaW5zcGVjdG9yKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcihsb25nIGNhbGxJZCwgSlNTdHJpbmdS
ZWYgc2NyaXB0KQotewotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJraXRfd2ViX2Zy
YW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOwotICAgIFdlYktpdFdlYkluc3BlY3RvciogaW5z
cGVjdG9yID0gd2Via2l0X3dlYl92aWV3X2dldF9pbnNwZWN0b3Iod2ViVmlldyk7Ci0gICAgY2hh
ciogc2NyaXB0U3RyaW5nID0gSlNTdHJpbmdDb3B5VVRGOENTdHJpbmcoc2NyaXB0KTsKLQotICAg
IHdlYmtpdF93ZWJfaW5zcGVjdG9yX2V4ZWN1dGVfc2NyaXB0KGluc3BlY3RvciwgY2FsbElkLCBz
Y3JpcHRTdHJpbmcpOwotICAgIGdfZnJlZShzY3JpcHRTdHJpbmcpOwotfQotCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZh
bHVlKHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdS
ZWYgc2NyaXB0KQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQodW5zaWdu
ZWQgd29ybGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQp
Ci17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgotfQotCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpyZW1vdmVBbGxWaXNpdGVkTGlua3MoKQotewotICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgdGhpcy4KLX0KLQotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2FsbFNob3VsZENs
b3NlT25XZWJWaWV3KCkKLXsKLSAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpz
aG91bGRDbG9zZShtYWluRnJhbWUpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjph
cGlUZXN0TmV3V2luZG93RGF0YUxvYWRCYXNlVVJMKEpTU3RyaW5nUmVmIHV0ZjhEYXRhLCBKU1N0
cmluZ1JlZiBiYXNlVVJMKQotewotCi19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFw
aVRlc3RHb1RvQ3VycmVudEJhY2tGb3J3YXJkSXRlbSgpCi17Ci0KLX0KLQotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0V2ViVmlld0VkaXRhYmxlKGJvb2wpCi17Ci19Ci0KLUpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWFya2VyVGV4dEZvckxpc3RJ
dGVtKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIG5vZGVPYmplY3QpIGNvbnN0Ci17
Ci0gICAgQ1N0cmluZyBtYXJrZXJUZXh0R0NoYXIgPSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6
Om1hcmtlclRleHRGb3JMaXN0SXRlbShtYWluRnJhbWUsIGNvbnRleHQsIG5vZGVPYmplY3QpOwot
ICAgIGlmIChtYXJrZXJUZXh0R0NoYXIuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG1hcmtlclRleHQoQWRvcHQsIEpTU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKG1hcmtlclRleHRHQ2hhci5kYXRhKCkpKTsKLSAgICByZXR1cm4g
bWFya2VyVGV4dDsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YXV0aGVudGljYXRl
U2Vzc2lvbihKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmKQotewotfQotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphYm9ydE1vZGFsKCkKLXsKLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0U2VyaWFsaXplSFRUUExvYWRzKGJvb2wgc2VyaWFsaXplKQot
ewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0U2VyaWFsaXplSFRUUExvYWRzKHNl
cmlhbGl6ZSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1pbmltdW1UaW1l
ckludGVydmFsKGRvdWJsZSBtaW5pbXVtVGltZXJJbnRlcnZhbCkKLXsKLSAgICBXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsK
LSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNldE1pbmltdW1UaW1lckludGVydmFsKHdl
YlZpZXcsIG1pbmltdW1UaW1lckludGVydmFsKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0VGV4dERpcmVjdGlvbihKU1N0cmluZ1JlZiBkaXJlY3Rpb24pCi17Ci0gICAgLy8g
RklYTUU6IEltcGxlbWVudC4KLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkQ2hy
b21lSW5wdXRGaWVsZCgpCi17Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92
ZUNocm9tZUlucHV0RmllbGQoKQotewotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpm
b2N1c1dlYlZpZXcoKQotewotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRCYWNr
aW5nU2NhbGVGYWN0b3IoZG91YmxlKQotewotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzaW11bGF0ZURlc2t0b3BOb3RpZmljYXRpb25DbGljayhKU1N0cmluZ1JlZiB0aXRsZSkKLXsK
LX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVzZXRQYWdlVmlzaWJpbGl0eSgpCi17
Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgotfQotCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRQYWdlVmlzaWJpbGl0eShjb25zdCBjaGFyKikKLXsKLSAgICAvLyBGSVhNRTog
SW1wbGVtZW50IHRoaXMuCi19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dG9t
YXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKGJvb2wpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGlzLgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZW5kV2ViSW50ZW50UmVz
cG9uc2UoSlNTdHJpbmdSZWYpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxpdmVyV2ViSW50ZW50KEpTU3RyaW5nUmVm
LCBKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0
aGlzLgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTdG9yYWdlRGF0YWJhc2VJ
ZGxlSW50ZXJ2YWwoZG91YmxlKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KLX0K
SW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9UZXN0UnVubmVyR3RrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvVGVzdFJ1bm5lckd0ay5jcHAJKHJldmlz
aW9uIDEyNTMzNSkJKGZyb20gVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250
cm9sbGVyR3RrLmNwcDoxMjUzMzUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvVGVzdFJ1
bm5lckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDAyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA4IE51YW50aSBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIE1pY2hhZWwg
QWxvbnpvIDxqbWFsb256b0BnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDksMjAxMSBD
b2xsYWJvcmEgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEpvb25lIEh1ciA8am9vbmVAa2xk
cC5vcmc+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9sbGVy
LmgiCisKKyNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgorI2luY2x1ZGUgIldlYkNvcmVTdXBw
b3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oIgorI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgor
I2luY2x1ZGUgIldvcmtRdWV1ZUl0ZW0uaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1Jl
dGFpblB0ci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CisjaW5j
bHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDxpb3N0cmVhbT4KKyNpbmNsdWRlIDxzc3RyZWFtPgor
I2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGxpYnNvdXAv
c291cC5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVj
dC9HT3duUHRyLmg+CisKK2V4dGVybiAiQyIgewordm9pZCB3ZWJraXRfd2ViX2luc3BlY3Rvcl9l
eGVjdXRlX3NjcmlwdChXZWJLaXRXZWJJbnNwZWN0b3IqIGluc3BlY3RvciwgbG9uZyBjYWxsSWQs
IGNvbnN0IGdjaGFyKiBzY3JpcHQpOworfQorCitMYXlvdXRUZXN0Q29udHJvbGxlcjo6fkxheW91
dFRlc3RDb250cm9sbGVyKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZERpc2FsbG93ZWRVUkwoSlNTdHJpbmdSZWYgdXJsKQor
eworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6Y2xlYXJCYWNrRm9yd2FyZExpc3QoKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcg
PSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOworICAgIFdlYktpdFdl
YkJhY2tGb3J3YXJkTGlzdCogbGlzdCA9IHdlYmtpdF93ZWJfdmlld19nZXRfYmFja19mb3J3YXJk
X2xpc3Qod2ViVmlldyk7CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGl0ZW0gPSB3ZWJraXRf
d2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0obGlzdCk7CisgICAgZ19vYmpl
Y3RfcmVmKGl0ZW0pOworCisgICAgLy8gV2UgY2xlYXIgdGhlIGhpc3RvcnkgYnkgc2V0dGluZyB0
aGUgYmFjay9mb3J3YXJkIGxpc3QncyBjYXBhY2l0eSB0byAwCisgICAgLy8gdGhlbiByZXN0b3Jp
bmcgaXQgYmFjayBhbmQgYWRkaW5nIGJhY2sgdGhlIGN1cnJlbnQgaXRlbS4KKyAgICBnaW50IGxp
bWl0ID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbGltaXQobGlzdCk7CisgICAg
d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9zZXRfbGltaXQobGlzdCwgMCk7CisgICAgd2Vi
a2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9zZXRfbGltaXQobGlzdCwgbGltaXQpOworICAgIHdl
YmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRkX2l0ZW0obGlzdCwgaXRlbSk7CisgICAgd2Vi
a2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nb190b19pdGVtKGxpc3QsIGl0ZW0pOworICAgIGdf
b2JqZWN0X3VucmVmKGl0ZW0pOworfQorCitKU1N0cmluZ1JlZiBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6Y29weURlY29kZWRIb3N0TmFtZShKU1N0cmluZ1JlZiBuYW1lKQoreworICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKKyAgICByZXR1cm4gMDsKK30KKworSlNTdHJpbmdSZWYgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmNvcHlFbmNvZGVkSG9zdE5hbWUoSlNTdHJpbmdSZWYgbmFtZSkKK3sKKyAgICAv
LyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmRpc3BhdGNoUGVuZGluZ0xvYWRSZXF1ZXN0cygpCit7CisgICAgLy8gRklYTUU6
IEltcGxlbWVudCBmb3IgdGVzdGluZyBmaXggZm9yIDY3Mjc0OTUKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6ZGlzcGxheSgpCit7CisgICAgZGlzcGxheVdlYlZpZXcoKTsKK30KKwor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6a2VlcFdlYkhpc3RvcnkoKQoreworICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQKK30KKworSlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29t
cHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1Zh
bHVlUmVmIHZhbHVlKQoreworICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmNv
bXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhjb250ZXh0LCB2YWx1ZSk7Cit9CisKK0pT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bGF5ZXJUcmVlQXNU
ZXh0KCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IHN0cmluZyhBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IiIpKTsKKyAgICByZXR1cm4gc3RyaW5nOworfQorCitpbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
Om51bWJlck9mUGFnZXMoZmxvYXQgcGFnZVdpZHRoLCBmbG9hdCBwYWdlSGVpZ2h0KQoreworICAg
IHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6Om51bWJlck9mUGFnZXNGb3JGcmFtZSht
YWluRnJhbWUsIHBhZ2VXaWR0aCwgcGFnZUhlaWdodCk7Cit9CisKK0pTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVByb3BlcnR5KGNvbnN0IGNoYXIqIHBy
b3BlcnR5TmFtZSwgaW50IHBhZ2VOdW1iZXIpIGNvbnN0Cit7CisgICAgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IHByb3BlcnR5VmFsdWUoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6cGFnZVByb3BlcnR5KG1haW5GcmFtZSwgcHJv
cGVydHlOYW1lLCBwYWdlTnVtYmVyKS5kYXRhKCkpKTsKKyAgICByZXR1cm4gcHJvcGVydHlWYWx1
ZTsKK30KKworSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpw
YWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVscyhpbnQgcGFnZU51bWJlciwgaW50IHdpZHRoLCBpbnQg
aGVpZ2h0LCBpbnQgbWFyZ2luVG9wLCBpbnQgbWFyZ2luUmlnaHQsIGludCBtYXJnaW5Cb3R0b20s
IGludCBtYXJnaW5MZWZ0KSBjb25zdAoreworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBw
cm9wZXJ0eVZhbHVlKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRHdGs6OnBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKG1haW5GcmFtZSwg
cGFnZU51bWJlciwgd2lkdGgsIGhlaWdodCwgbWFyZ2luVG9wLCBtYXJnaW5SaWdodCwgbWFyZ2lu
Qm90dG9tLCBtYXJnaW5MZWZ0KS5kYXRhKCkpKTsKKyAgICByZXR1cm4gcHJvcGVydHlWYWx1ZTsK
K30KKworc2l6ZV90IExheW91dFRlc3RDb250cm9sbGVyOjp3ZWJIaXN0b3J5SXRlbUNvdW50KCkK
K3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2Vi
X3ZpZXcobWFpbkZyYW1lKTsKKyAgICBXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIGxpc3QgPSB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0KHdlYlZpZXcpOworCisgICAgaWYg
KCFsaXN0KQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICAvLyBXZSBkbyBub3QgYWRkIHRoZSBj
dXJyZW50IHBhZ2UgdG8gdGhlIHRvdGFsIGNvdW50IGFzIGl0J3Mgbm90CisgICAgLy8gY29uc2lk
ZXJlZCBpbiBEUlQgdGVzdHMKKyAgICByZXR1cm4gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfYmFja19sZW5ndGgobGlzdCkgKworICAgICAgICAgICAgd2Via2l0X3dlYl9iYWNrX2Zv
cndhcmRfbGlzdF9nZXRfZm9yd2FyZF9sZW5ndGgobGlzdCk7Cit9CisKK3Vuc2lnbmVkIExheW91
dFRlc3RDb250cm9sbGVyOjp3b3JrZXJUaHJlYWRDb3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6d29ya2VyVGhyZWFkQ291bnQoKTsKK30KKworSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybU5hbWUo
KSBjb25zdAoreworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBwbGF0Zm9ybU5hbWUoQWRv
cHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJndGsiKSk7CisgICAgcmV0dXJuIHBs
YXRmb3JtTmFtZTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bm90aWZ5RG9uZSgp
Cit7CisgICAgaWYgKG1fd2FpdFRvRHVtcCAmJiAhdG9wTG9hZGluZ0ZyYW1lICYmICFXb3JrUXVl
dWU6OnNoYXJlZCgpLT5jb3VudCgpKQorICAgICAgICBkdW1wKCk7CisgICAgbV93YWl0VG9EdW1w
ID0gZmFsc2U7CisgICAgd2FpdEZvclBvbGljeSA9IGZhbHNlOworfQorCitKU1N0cmluZ1JlZiBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6cGF0aFRvTG9jYWxSZXNvdXJjZShKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNTdHJpbmdSZWYgdXJsKQoreworICAgIEdPd25QdHI8Y2hhcj4gdXJsQ1N0cmluZyhK
U1N0cmluZ0NvcHlVVEY4Q1N0cmluZyh1cmwpKTsKKyAgICBpZiAoIWdfc3RyX2hhc19wcmVmaXgo
dXJsQ1N0cmluZy5nZXQoKSwgImZpbGU6Ly8vdG1wL0xheW91dFRlc3RzLyIpKQorICAgICAgICBy
ZXR1cm4gSlNTdHJpbmdSZXRhaW4odXJsKTsKKworICAgIGNvbnN0IGNoYXIqIGxheW91dFRlc3Rz
U3VmZml4ID0gdXJsQ1N0cmluZy5nZXQoKSArIHN0cmxlbigiZmlsZTovLy90bXAvIik7CisgICAg
R093blB0cjxjaGFyPiB0ZXN0UGF0aChnX2J1aWxkX2ZpbGVuYW1lKGdldFRvcExldmVsUGF0aCgp
LmRhdGEoKSwgbGF5b3V0VGVzdHNTdWZmaXgsIE5VTEwpKTsKKyAgICBHT3duUHRyPGNoYXI+IHRl
c3RVUkkoZ19maWxlbmFtZV90b191cmkodGVzdFBhdGguZ2V0KCksIDAsIDApKTsKKyAgICByZXR1
cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcodGVzdFVSSS5nZXQoKSk7Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVlTG9hZChKU1N0cmluZ1JlZiB1cmwsIEpTU3Ry
aW5nUmVmIHRhcmdldCkKK3sKKyAgICBnY2hhciogcmVsYXRpdmVVUkwgPSBKU1N0cmluZ0NvcHlV
VEY4Q1N0cmluZyh1cmwpOworICAgIFNvdXBVUkkqIGJhc2VVUkkgPSBzb3VwX3VyaV9uZXcod2Vi
a2l0X3dlYl9mcmFtZV9nZXRfdXJpKG1haW5GcmFtZSkpOworCisgICAgU291cFVSSSogYWJzb2x1
dGVVUkkgPSBzb3VwX3VyaV9uZXdfd2l0aF9iYXNlKGJhc2VVUkksIHJlbGF0aXZlVVJMKTsKKyAg
ICBzb3VwX3VyaV9mcmVlKGJhc2VVUkkpOworICAgIGdfZnJlZShyZWxhdGl2ZVVSTCk7CisKKyAg
ICBnY2hhciogYWJzb2x1dGVDU3RyaW5nOworICAgIGlmIChhYnNvbHV0ZVVSSSkgeworICAgICAg
ICBhYnNvbHV0ZUNTdHJpbmcgPSBzb3VwX3VyaV90b19zdHJpbmcoYWJzb2x1dGVVUkksIEZBTFNF
KTsKKyAgICAgICAgc291cF91cmlfZnJlZShhYnNvbHV0ZVVSSSk7CisgICAgfSBlbHNlCisgICAg
ICAgIGFic29sdXRlQ1N0cmluZyA9IEpTU3RyaW5nQ29weVVURjhDU3RyaW5nKHVybCk7CisKKyAg
ICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gYWJzb2x1dGVVUkwoQWRvcHQsIEpTU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKGFic29sdXRlQ1N0cmluZykpOworICAgIGdfZnJlZShhYnNvbHV0
ZUNTdHJpbmcpOworCisgICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+cXVldWUobmV3IExvYWRJdGVt
KGFic29sdXRlVVJMLmdldCgpLCB0YXJnZXQpKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0QWNjZXB0c0VkaXRpbmcoYm9vbCBhY2NlcHRzRWRpdGluZykKK3sKKyAgICBXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZy
YW1lKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X2VkaXRhYmxlKHdlYlZpZXcsIGFjY2VwdHNF
ZGl0aW5nKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWx3YXlzQWNjZXB0
Q29va2llcyhib29sIGFsd2F5c0FjY2VwdENvb2tpZXMpCit7CisgICAgU291cFNlc3Npb24qIHNl
c3Npb24gPSB3ZWJraXRfZ2V0X2RlZmF1bHRfc2Vzc2lvbigpOworICAgIFNvdXBDb29raWVKYXIq
IGphciA9IHJlaW50ZXJwcmV0X2Nhc3Q8U291cENvb2tpZUphcio+KHNvdXBfc2Vzc2lvbl9nZXRf
ZmVhdHVyZShzZXNzaW9uLCBTT1VQX1RZUEVfQ09PS0lFX0pBUikpOworCisgICAgLyogSWYgdGhl
IGphciB3YXMgbm90IGNyZWF0ZWQgLSB3ZSBjcmVhdGUgaXQgb24gZGVtYW5kLCBpLmUsIGp1c3QK
KyAgICAgICBpbiBjYXNlIHdlIGhhdmUgSFRUUCByZXF1ZXN0cyAtIHRoZW4gd2UgbXVzdCBjcmVh
dGUgaXQgaGVyZSBpbgorICAgICAgIG9yZGVyIHRvIHNldCB0aGUgcHJvcGVyIGFjY2VwdCBwb2xp
Y3kgKi8KKyAgICBpZiAoIWphcikgeworICAgICAgICBqYXIgPSBzb3VwX2Nvb2tpZV9qYXJfbmV3
KCk7CisgICAgICAgIHNvdXBfc2Vzc2lvbl9hZGRfZmVhdHVyZShzZXNzaW9uLCBTT1VQX1NFU1NJ
T05fRkVBVFVSRShqYXIpKTsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYoamFyKTsKKyAgICB9CisK
KyAgICBTb3VwQ29va2llSmFyQWNjZXB0UG9saWN5IHBvbGljeTsKKworICAgIGlmIChhbHdheXNB
Y2NlcHRDb29raWVzKQorICAgICAgICBwb2xpY3kgPSBTT1VQX0NPT0tJRV9KQVJfQUNDRVBUX0FM
V0FZUzsKKyAgICBlbHNlCisgICAgICAgIHBvbGljeSA9IFNPVVBfQ09PS0lFX0pBUl9BQ0NFUFRf
Tk9fVEhJUkRfUEFSVFk7CisKKyAgICBnX29iamVjdF9zZXQoR19PQkpFQ1QoamFyKSwgU09VUF9D
T09LSUVfSkFSX0FDQ0VQVF9QT0xJQ1ksIHBvbGljeSwgTlVMTCk7Cit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGJvb2wgc2V0RGVsZWdhdGUs
IGJvb2wgcGVybWlzc2l2ZSkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgpCit7CisgICAgd2Fp
dEZvclBvbGljeSA9IHRydWU7CisgICAgc2V0V2FpdFRvRHVtcCh0cnVlKTsKK30KKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2Nyb2xsYmFyUG9saWN5KEpTU3RyaW5nUmVmIG9yaWVu
dGF0aW9uLCBKU1N0cmluZ1JlZiBwb2xpY3kpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RF
bnRyeShKU1N0cmluZ1JlZiBzb3VyY2VPcmlnaW4sIEpTU3RyaW5nUmVmIHByb3RvY29sLCBKU1N0
cmluZ1JlZiBob3N0LCBib29sIGluY2x1ZGVTdWJkb21haW5zKQoreworICAgIGdjaGFyKiBzb3Vy
Y2VPcmlnaW5HQ2hhciA9IEpTU3RyaW5nQ29weVVURjhDU3RyaW5nKHNvdXJjZU9yaWdpbik7Cisg
ICAgZ2NoYXIqIHByb3RvY29sR0NoYXIgPSBKU1N0cmluZ0NvcHlVVEY4Q1N0cmluZyhwcm90b2Nv
bCk7CisgICAgZ2NoYXIqIGhvc3RHQ2hhciA9IEpTU3RyaW5nQ29weVVURjhDU3RyaW5nKGhvc3Qp
OworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6d2hpdGVMaXN0QWNjZXNzRnJvbU9yaWdp
bihzb3VyY2VPcmlnaW5HQ2hhciwgcHJvdG9jb2xHQ2hhciwgaG9zdEdDaGFyLCBpbmNsdWRlU3Vi
ZG9tYWlucyk7CisgICAgZ19mcmVlKHNvdXJjZU9yaWdpbkdDaGFyKTsKKyAgICBnX2ZyZWUocHJv
dG9jb2xHQ2hhcik7CisgICAgZ19mcmVlKGhvc3RHQ2hhcik7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KEpTU3RyaW5nUmVm
IHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgcHJvdG9jb2wsIEpTU3RyaW5nUmVmIGhvc3QsIGJv
b2wgaW5jbHVkZVN1YmRvbWFpbnMpCit7CisgICAgR093blB0cjxnY2hhcj4gc291cmNlT3JpZ2lu
R0NoYXIoSlNTdHJpbmdDb3B5VVRGOENTdHJpbmcoc291cmNlT3JpZ2luKSk7CisgICAgR093blB0
cjxnY2hhcj4gcHJvdG9jb2xHQ2hhcihKU1N0cmluZ0NvcHlVVEY4Q1N0cmluZyhwcm90b2NvbCkp
OworICAgIEdPd25QdHI8Z2NoYXI+IGhvc3RHQ2hhcihKU1N0cmluZ0NvcHlVVEY4Q1N0cmluZyho
b3N0KSk7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpyZW1vdmVXaGl0ZUxpc3RBY2Nl
c3NGcm9tT3JpZ2luKHNvdXJjZU9yaWdpbkdDaGFyLmdldCgpLCBwcm90b2NvbEdDaGFyLmdldCgp
LCBob3N0R0NoYXIuZ2V0KCksIGluY2x1ZGVTdWJkb21haW5zKTsKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlcihib29sIGZsYWcpCit7
CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoYm9vbCBjeWNsZXMpCit7CisgICAgV2Vi
S2l0V2ViVmlldyogd2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5G
cmFtZSk7CisgICAgV2ViS2l0V2ViU2V0dGluZ3MqIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3
X2dldF9zZXR0aW5ncyh3ZWJWaWV3KTsKKyAgICBnX29iamVjdF9zZXQoR19PQkpFQ1Qoc2V0dGlu
Z3MpLCAidGFiLWtleS1jeWNsZXMtdGhyb3VnaC1lbGVtZW50cyIsIGN5Y2xlcywgTlVMTCk7Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZURhc2hib2FyZENvbXBhdGliaWxp
dHlNb2RlKGJvb2wgZmxhZykKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3N0YXRp
YyBnY2hhciogdXNlclN0eWxlU2hlZXQgPSBOVUxMOworc3RhdGljIGdib29sZWFuIHVzZXJTdHls
ZVNoZWV0RW5hYmxlZCA9IFRSVUU7CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVz
ZXJTdHlsZVNoZWV0RW5hYmxlZChib29sIGZsYWcpCit7CisgICAgdXNlclN0eWxlU2hlZXRFbmFi
bGVkID0gZmxhZzsKKworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJraXRfd2ViX2Zy
YW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOworICAgIFdlYktpdFdlYlNldHRpbmdzKiBzZXR0
aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldyk7CisgICAgaWYgKGZs
YWcgJiYgdXNlclN0eWxlU2hlZXQpCisgICAgICAgIGdfb2JqZWN0X3NldChHX09CSkVDVChzZXR0
aW5ncyksICJ1c2VyLXN0eWxlc2hlZXQtdXJpIiwgdXNlclN0eWxlU2hlZXQsIE5VTEwpOworICAg
IGVsc2UKKyAgICAgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHNldHRpbmdzKSwgInVzZXItc3R5
bGVzaGVldC11cmkiLCAiIiwgTlVMTCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oSlNTdHJpbmdSZWYgcGF0aCkKK3sKKyAgICBnX2Zy
ZWUodXNlclN0eWxlU2hlZXQpOworICAgIHVzZXJTdHlsZVNoZWV0ID0gSlNTdHJpbmdDb3B5VVRG
OENTdHJpbmcocGF0aCk7CisgICAgaWYgKHVzZXJTdHlsZVNoZWV0RW5hYmxlZCkKKyAgICAgICAg
c2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKHRydWUpOworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRWYWx1ZUZvclVzZXIoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYg
bm9kZU9iamVjdCwgSlNTdHJpbmdSZWYgdmFsdWUpCit7CisgICAgRHVtcFJlbmRlclRyZWVTdXBw
b3J0R3RrOjpzZXRWYWx1ZUZvclVzZXIoY29udGV4dCwgbm9kZU9iamVjdCwgdmFsdWUpOworfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRWaWV3TW9kZU1lZGlhRmVhdHVyZShKU1N0
cmluZ1JlZiBtb2RlKQoreworICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSB3ZWJraXRfd2ViX2Zy
YW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOworICAgIEFTU0VSVCh2aWV3KTsKKworICAgIGNo
YXIqIHZpZXdNb2RlID0gSlNTdHJpbmdDb3B5VVRGOENTdHJpbmcobW9kZSk7CisKKyAgICBpZiAo
IWdfc3RyY21wMCh2aWV3TW9kZSwgIndpbmRvd2VkIikpCisgICAgICAgIHdlYmtpdF93ZWJfdmll
d19zZXRfdmlld19tb2RlKHZpZXcsIFdFQktJVF9XRUJfVklFV19WSUVXX01PREVfV0lORE9XRUQp
OworICAgIGVsc2UgaWYgKCFnX3N0cmNtcDAodmlld01vZGUsICJmbG9hdGluZyIpKQorICAgICAg
ICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3ZpZXdfbW9kZSh2aWV3LCBXRUJLSVRfV0VCX1ZJRVdfVklF
V19NT0RFX0ZMT0FUSU5HKTsKKyAgICBlbHNlIGlmICghZ19zdHJjbXAwKHZpZXdNb2RlLCAiZnVs
bHNjcmVlbiIpKQorICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3ZpZXdfbW9kZSh2aWV3LCBX
RUJLSVRfV0VCX1ZJRVdfVklFV19NT0RFX0ZVTExTQ1JFRU4pOworICAgIGVsc2UgaWYgKCFnX3N0
cmNtcDAodmlld01vZGUsICJtYXhpbWl6ZWQiKSkKKyAgICAgICAgd2Via2l0X3dlYl92aWV3X3Nl
dF92aWV3X21vZGUodmlldywgV0VCS0lUX1dFQl9WSUVXX1ZJRVdfTU9ERV9NQVhJTUlaRUQpOwor
ICAgIGVsc2UgaWYgKCFnX3N0cmNtcDAodmlld01vZGUsICJtaW5pbWl6ZWQiKSkKKyAgICAgICAg
d2Via2l0X3dlYl92aWV3X3NldF92aWV3X21vZGUodmlldywgV0VCS0lUX1dFQl9WSUVXX1ZJRVdf
TU9ERV9NSU5JTUlaRUQpOworCisgICAgZ19mcmVlKHZpZXdNb2RlKTsKK30KKwordm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0V2luZG93SXNLZXkoYm9vbCB3aW5kb3dJc0tleSkKK3sKKyAg
ICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChib29sIGZsYWcpCit7CisgICAgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0R3RrOjpzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQod2Via2l0X3dlYl9mcmFt
ZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKSwgZmxhZyk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3
YWl0VG9EdW1wV2F0Y2hkb2dGaXJlZCh2b2lkKikKK3sKKyAgICBzZXRXYWl0VG9EdW1wV2F0Y2hk
b2coMCk7CisgICAgZ0xheW91dFRlc3RDb250cm9sbGVyLT53YWl0VG9EdW1wV2F0Y2hkb2dUaW1l
ckZpcmVkKCk7CisgICAgcmV0dXJuIEZBTFNFOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRXYWl0VG9EdW1wKGJvb2wgd2FpdFVudGlsRG9uZSkKK3sKKyAgICBzdGF0aWMgY29u
c3QgaW50IHRpbWVvdXRTZWNvbmRzID0gMzA7CisKKyAgICBtX3dhaXRUb0R1bXAgPSB3YWl0VW50
aWxEb25lOworICAgIGlmIChtX3dhaXRUb0R1bXAgJiYgc2hvdWxkU2V0V2FpdFRvRHVtcFdhdGNo
ZG9nKCkpCisgICAgICAgIHNldFdhaXRUb0R1bXBXYXRjaGRvZyhnX3RpbWVvdXRfYWRkX3NlY29u
ZHModGltZW91dFNlY29uZHMsIHdhaXRUb0R1bXBXYXRjaGRvZ0ZpcmVkLCAwKSk7Cit9CisKK2lu
dCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2luZG93Q291bnQoKQoreworICAgIC8vICsxIC0+IGlu
Y2x1ZGluZyB0aGUgbWFpbiB2aWV3CisgICAgcmV0dXJuIGdfc2xpc3RfbGVuZ3RoKHdlYlZpZXdM
aXN0KSArIDE7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFByaXZhdGVCcm93
c2luZ0VuYWJsZWQoYm9vbCBmbGFnKQoreworICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSB3ZWJr
aXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOworICAgIEFTU0VSVCh2aWV3KTsK
KworICAgIFdlYktpdFdlYlNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRf
c2V0dGluZ3Modmlldyk7CisgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHNldHRpbmdzKSwgImVu
YWJsZS1wcml2YXRlLWJyb3dzaW5nIiwgZmxhZywgTlVMTCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQoYm9vbCBmbGFnKQor
eworICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmll
dyhtYWluRnJhbWUpOworICAgIEFTU0VSVCh2aWV3KTsKKworICAgIFdlYktpdFdlYlNldHRpbmdz
KiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Modmlldyk7CisgICAgZ19v
YmplY3Rfc2V0KEdfT0JKRUNUKHNldHRpbmdzKSwgImphdmFzY3JpcHQtY2FuLWFjY2Vzcy1jbGlw
Ym9hcmQiLCBmbGFnLCBOVUxMKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
WFNTQXVkaXRvckVuYWJsZWQoYm9vbCBmbGFnKQoreworICAgIFdlYktpdFdlYlZpZXcqIHZpZXcg
PSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOworICAgIEFTU0VSVCh2
aWV3KTsKKworICAgIFdlYktpdFdlYlNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmll
d19nZXRfc2V0dGluZ3Modmlldyk7CisgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHNldHRpbmdz
KSwgImVuYWJsZS14c3MtYXVkaXRvciIsIGZsYWcsIE5VTEwpOworfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkKGJvb2wgZmxhZykKK3sKKyAg
ICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFp
bkZyYW1lKTsKKyAgICBBU1NFUlQodmlldyk7CisKKyAgICBXZWJLaXRXZWJTZXR0aW5ncyogc2V0
dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHZpZXcpOworICAgIGdfb2JqZWN0
X3NldChHX09CSkVDVChzZXR0aW5ncyksICJlbmFibGUtZnJhbWUtZmxhdHRlbmluZyIsIGZsYWcs
IE5VTEwpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTcGF0aWFsTmF2aWdh
dGlvbkVuYWJsZWQoYm9vbCBmbGFnKQoreworICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSB3ZWJr
aXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOworICAgIEFTU0VSVCh2aWV3KTsK
KworICAgIFdlYktpdFdlYlNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRf
c2V0dGluZ3Modmlldyk7CisgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHNldHRpbmdzKSwgImVu
YWJsZS1zcGF0aWFsLW5hdmlnYXRpb24iLCBmbGFnLCBOVUxMKTsKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMoYm9vbCBm
bGFnKQoreworICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93
ZWJfdmlldyhtYWluRnJhbWUpOworICAgIEFTU0VSVCh2aWV3KTsKKworICAgIFdlYktpdFdlYlNl
dHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Modmlldyk7Cisg
ICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHNldHRpbmdzKSwgImVuYWJsZS11bml2ZXJzYWwtYWNj
ZXNzLWZyb20tZmlsZS11cmlzIiwgZmxhZywgTlVMTCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhib29sIGZsYWcpCit7Cisg
ICAgV2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1h
aW5GcmFtZSk7CisgICAgQVNTRVJUKHZpZXcpOworCisgICAgV2ViS2l0V2ViU2V0dGluZ3MqIHNl
dHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh2aWV3KTsKKyAgICBnX29iamVj
dF9zZXQoR19PQkpFQ1Qoc2V0dGluZ3MpLCAiZW5hYmxlLWZpbGUtYWNjZXNzLWZyb20tZmlsZS11
cmlzIiwgZmxhZywgTlVMTCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1
dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKGJvb2wgZmxhZykKK3sKKyAgICAvLyBGSVhNRTogaW1w
bGVtZW50Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dG9maWxsZWQoSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgbm9kZU9iamVjdCwgYm9vbCBpc0F1dG9maWxs
ZWQpCit7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRBdXRvZmlsbGVkKGNvbnRl
eHQsIG5vZGVPYmplY3QsIGlzQXV0b2ZpbGxlZCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmRpc2FibGVJbWFnZUxvYWRpbmcoKQoreworICAgIFdlYktpdFdlYlZpZXcqIHZpZXcg
PSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOworICAgIEFTU0VSVCh2
aWV3KTsKKworICAgIFdlYktpdFdlYlNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmll
d19nZXRfc2V0dGluZ3Modmlldyk7CisgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHNldHRpbmdz
KSwgImF1dG8tbG9hZC1pbWFnZXMiLCBGQUxTRSwgTlVMTCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldE1vY2tEZXZpY2VPcmllbnRhdGlvbihib29sIGNhblByb3ZpZGVBbHBo
YSwgZG91YmxlIGFscGhhLCBib29sIGNhblByb3ZpZGVCZXRhLCBkb3VibGUgYmV0YSwgYm9vbCBj
YW5Qcm92aWRlR2FtbWEsIGRvdWJsZSBnYW1tYSkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50
IGZvciBEZXZpY2VPcmllbnRhdGlvbiBsYXlvdXQgdGVzdHMuCisgICAgLy8gU2VlIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDMzNS4KK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRl
LCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3kpCit7CisgICAgV2ViS2l0V2ViVmll
dyogdmlldyA9IFdFQktJVF9XRUJfVklFVyhnX3NsaXN0X250aF9kYXRhKHdlYlZpZXdMaXN0LCAw
KSk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICB2aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRf
d2ViX3ZpZXcobWFpbkZyYW1lKTsKKyAgICBBU1NFUlQodmlldyk7CisKKyAgICBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRHdGs6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKHZpZXcsIGxhdGl0dWRl
LCBsb25naXR1ZGUsIGFjY3VyYWN5KTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0TW9ja0dlb2xvY2F0aW9uRXJyb3IoaW50IGNvZGUsIEpTU3RyaW5nUmVmIG1lc3NhZ2UpCit7
CisgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyhnX3NsaXN0X250aF9k
YXRhKHdlYlZpZXdMaXN0LCAwKSk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICB2aWV3ID0gd2Vi
a2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKKyAgICBBU1NFUlQodmlldyk7
CisKKyAgICBHT3duUHRyPGdjaGFyPiBjTWVzc2FnZShKU1N0cmluZ0NvcHlVVEY4Q1N0cmluZyht
ZXNzYWdlKSk7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRNb2NrR2VvbG9jYXRp
b25FcnJvcih2aWV3LCBjb2RlLCBjTWVzc2FnZS5nZXQoKSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sIGFsbG93KQoreworICAg
IHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbihhbGxvdyk7CisgICAgV2ViS2l0V2ViVmll
dyogdmlldyA9IFdFQktJVF9XRUJfVklFVyhnX3NsaXN0X250aF9kYXRhKHdlYlZpZXdMaXN0LCAw
KSk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICB2aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRf
d2ViX3ZpZXcobWFpbkZyYW1lKTsKKyAgICBBU1NFUlQodmlldyk7CisKKyAgICBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRHdGs6OnNldE1vY2tHZW9sb2NhdGlvblBlcm1pc3Npb24odmlldywgYWxsb3cp
OworfQorCitpbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGVuZGluZ0dlb2xvY2F0
aW9uUGVybWlzc2lvblJlcXVlc3RzKCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gd2Vi
a2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKKyAgICBpZiAoIXZpZXcpCisg
ICAgICAgIHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOwor
ICAgIEFTU0VSVCh2aWV3KTsKKworICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6
Om51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKHZpZXcpOworfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRNb2NrU3BlZWNoSW5wdXRSZXN1bHQoSlNT
dHJpbmdSZWYgcmVzdWx0LCBkb3VibGUgY29uZmlkZW5jZSwgSlNTdHJpbmdSZWYgbGFuZ3VhZ2Up
Cit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Igc3BlZWNoIGlucHV0IGxheW91dCB0ZXN0
cy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5
NDg1LgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrU3BlZWNoSW5wdXRE
dW1wUmVjdChib29sIGZsYWcpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Igc3BlZWNo
IGlucHV0IGxheW91dCB0ZXN0cy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTM5NDg1LgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
dGFydFNwZWVjaElucHV0KEpTQ29udGV4dFJlZiBpbnB1dEVsZW1lbnQpCit7CisgICAgLy8gRklY
TUU6IEltcGxlbWVudCBmb3Igc3BlZWNoIGlucHV0IGxheW91dCB0ZXN0cy4KKyAgICAvLyBTZWUg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgorfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKGJvb2wgZW5hYmxl
ZCkKK3sKKyAgICBXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X2dldF9pY29u
X2RhdGFiYXNlKCk7CisgICAgaWYgKGVuYWJsZWQpIHsKKyAgICAgICAgR093blB0cjxnY2hhcj4g
aWNvbkRhdGFiYXNlUGF0aChnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3RtcF9kaXIoKSwgIkR1bXBS
ZW5kZXJUcmVlIiwgImljb25kYXRhYmFzZSIsIE5VTEwpKTsKKyAgICAgICAgd2Via2l0X2ljb25f
ZGF0YWJhc2Vfc2V0X3BhdGgoZGF0YWJhc2UsIGljb25EYXRhYmFzZVBhdGguZ2V0KCkpOworICAg
IH0gZWxzZQorICAgICAgICB3ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRfcGF0aChkYXRhYmFzZSwg
MCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNlbGVjdFRyYWlsaW5nV2hp
dGVzcGFjZUVuYWJsZWQoYm9vbCBmbGFnKQoreworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0
azo6c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChmbGFnKTsKK30KKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQoYm9vbCBmbGFnKQor
eworICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmll
dyhtYWluRnJhbWUpOworICAgIEFTU0VSVCh2aWV3KTsKKworICAgIFdlYktpdFdlYlNldHRpbmdz
KiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Modmlldyk7CisgICAgZ19v
YmplY3Rfc2V0KEdfT0JKRUNUKHNldHRpbmdzKSwgImphdmFzY3JpcHQtY2FuLW9wZW4td2luZG93
cy1hdXRvbWF0aWNhbGx5IiwgIWZsYWcsIE5VTEwpOworCit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldFBsdWdpbnNFbmFibGVkKGJvb2wgZmxhZykKK3sKKyAgICBXZWJLaXRXZWJW
aWV3KiB2aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKKyAg
ICBBU1NFUlQodmlldyk7CisKKyAgICBXZWJLaXRXZWJTZXR0aW5ncyogc2V0dGluZ3MgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHZpZXcpOworICAgIGdfb2JqZWN0X3NldChHX09CSkVD
VChzZXR0aW5ncyksICJlbmFibGUtcGx1Z2lucyIsIGZsYWcsIE5VTEwpOworfQorCitib29sIExh
eW91dFRlc3RDb250cm9sbGVyOjplbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRo
SWQoSlNTdHJpbmdSZWYgaWQpIAoreworICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRH
dGs6OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZChtYWluRnJhbWUsIGlk
KTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXhlY0NvbW1hbmQoSlNTdHJpbmdS
ZWYgbmFtZSwgSlNTdHJpbmdSZWYgdmFsdWUpCit7CisgICAgV2ViS2l0V2ViVmlldyogdmlldyA9
IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7CisgICAgQVNTRVJUKHZp
ZXcpOworCisgICAgZ2NoYXIqIGNOYW1lID0gSlNTdHJpbmdDb3B5VVRGOENTdHJpbmcobmFtZSk7
CisgICAgZ2NoYXIqIGNWYWx1ZSA9IEpTU3RyaW5nQ29weVVURjhDU3RyaW5nKHZhbHVlKTsKKyAg
ICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmV4ZWN1dGVDb3JlQ29tbWFuZEJ5TmFtZSh2aWV3
LCBjTmFtZSwgY1ZhbHVlKTsKKyAgICBnX2ZyZWUoY05hbWUpOworICAgIGdfZnJlZShjVmFsdWUp
OworfQorCitib29sIExheW91dFRlc3RDb250cm9sbGVyOjpmaW5kU3RyaW5nKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU1N0cmluZ1JlZiB0YXJnZXQsIEpTT2JqZWN0UmVmIG9wdGlvbnNBcnJheSkK
K3sKKyAgICBXZWJLaXRGaW5kT3B0aW9ucyBmaW5kT3B0aW9ucyA9IDA7CisgICAgV2ViS2l0V2Vi
Vmlldyogd2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7
CisgICAgQVNTRVJUKHdlYlZpZXcpOworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGxl
bmd0aFByb3BlcnR5TmFtZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxl
bmd0aCIpKTsKKyAgICBKU1ZhbHVlUmVmIGxlbmd0aFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0
eShjb250ZXh0LCBvcHRpb25zQXJyYXksIGxlbmd0aFByb3BlcnR5TmFtZS5nZXQoKSwgMCk7IAor
ICAgIGlmICghSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgR093blB0cjxnY2hhcj4gdGFyZ2V0U3RyaW5nKEpTU3RyaW5n
Q29weVVURjhDU3RyaW5nKHRhcmdldCkpOworCisgICAgc2l6ZV90IGxlbmd0aCA9IHN0YXRpY19j
YXN0PHNpemVfdD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlLCAwKSk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBKU1ZhbHVl
UmVmIHZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgb3B0aW9uc0Fy
cmF5LCBpLCAwKTsgCisgICAgICAgIGlmICghSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHZhbHVl
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgIAorICAgICAgICBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gb3B0aW9uTmFtZShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCB2
YWx1ZSwgMCkpOworCisgICAgICAgIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG9w
dGlvbk5hbWUuZ2V0KCksICJDYXNlSW5zZW5zaXRpdmUiKSkKKyAgICAgICAgICAgIGZpbmRPcHRp
b25zIHw9IFdlYktpdDo6V2ViRmluZE9wdGlvbnNDYXNlSW5zZW5zaXRpdmU7CisgICAgICAgIGVs
c2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9uTmFtZS5nZXQoKSwgIkF0
V29yZFN0YXJ0cyIpKQorICAgICAgICAgICAgZmluZE9wdGlvbnMgfD0gV2ViS2l0OjpXZWJGaW5k
T3B0aW9uc0F0V29yZFN0YXJ0czsKKyAgICAgICAgZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhvcHRpb25OYW1lLmdldCgpLCAiVHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3Rh
cnQiKSkKKyAgICAgICAgICAgIGZpbmRPcHRpb25zIHw9IFdlYktpdDo6V2ViRmluZE9wdGlvbnNU
cmVhdE1lZGlhbENhcGl0YWxBc1dvcmRTdGFydDsKKyAgICAgICAgZWxzZSBpZiAoSlNTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRpb25OYW1lLmdldCgpLCAiQmFja3dhcmRzIikpCisgICAg
ICAgICAgICBmaW5kT3B0aW9ucyB8PSBXZWJLaXQ6OldlYkZpbmRPcHRpb25zQmFja3dhcmRzOwor
ICAgICAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG9wdGlvbk5hbWUu
Z2V0KCksICJXcmFwQXJvdW5kIikpCisgICAgICAgICAgICBmaW5kT3B0aW9ucyB8PSBXZWJLaXQ6
OldlYkZpbmRPcHRpb25zV3JhcEFyb3VuZDsKKyAgICAgICAgZWxzZSBpZiAoSlNTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhvcHRpb25OYW1lLmdldCgpLCAiU3RhcnRJblNlbGVjdGlvbiIpKQor
ICAgICAgICAgICAgZmluZE9wdGlvbnMgfD0gV2ViS2l0OjpXZWJGaW5kT3B0aW9uc1N0YXJ0SW5T
ZWxlY3Rpb247CisgICAgfSAgIAorCisgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0
azo6ZmluZFN0cmluZyh3ZWJWaWV3LCB0YXJnZXRTdHJpbmcuZ2V0KCksIGZpbmRPcHRpb25zKTsg
Cit9CisKK2Jvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmlzQ29tbWFuZEVuYWJsZWQoSlNTdHJp
bmdSZWYgbmFtZSkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gd2Via2l0X3dlYl9mcmFt
ZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKKyAgICBBU1NFUlQodmlldyk7CisKKyAgICBnY2hh
ciogY05hbWUgPSBKU1N0cmluZ0NvcHlVVEY4Q1N0cmluZyhuYW1lKTsKKyAgICBib29sIHJlc3Vs
dCA9IER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6aXNDb21tYW5kRW5hYmxlZCh2aWV3LCBjTmFt
ZSk7CisgICAgZ19mcmVlKGNOYW1lKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRDYWNoZU1vZGVsKGludCBjYWNoZU1vZGVsKQoreworICAg
IC8vIFRoZXNlIGNvbnN0YW50cyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBNYWMgY2FjaGUgbW9kZWwg
ZW51bSBpbiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLmguCisgICAg
c3dpdGNoIChjYWNoZU1vZGVsKSB7CisgICAgY2FzZSAwOgorICAgICAgICB3ZWJraXRfc2V0X2Nh
Y2hlX21vZGVsKFdFQktJVF9DQUNIRV9NT0RFTF9ET0NVTUVOVF9WSUVXRVIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIDE6CisgICAgICAgIHdlYmtpdF9zZXRfY2FjaGVfbW9kZWwoV0VCS0lU
X0NBQ0hFX01PREVMX0RPQ1VNRU5UX0JST1dTRVIpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IDI6CisgICAgICAgIHdlYmtpdF9zZXRfY2FjaGVfbW9kZWwoV0VCS0lUX0NBQ0hFX01PREVMX1dF
Ql9CUk9XU0VSKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXRMb2NhdGlvbihKU1N0cmluZ1JlZiBqc1VSTCkKK3sK
KyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmNsZWFyUGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0KCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVt
ZW50Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQWxsQXBwbGljYXRpb25D
YWNoZXMoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gc3VwcG9ydCBhcHBsaWNhdGlv
biBjYWNoZSBxdW90YXMuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFwcGxp
Y2F0aW9uQ2FjaGVPcmlnaW5RdW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCit7CisgICAg
Ly8gRklYTUU6IEltcGxlbWVudCB0byBzdXBwb3J0IGFwcGxpY2F0aW9uIGNhY2hlIHF1b3Rhcy4K
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9y
T3JpZ2luKE9wYXF1ZUpTU3RyaW5nKikKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIHN1
cHBvcnQgZGVsZXRpbmcgYWxsIGFwcGxpY2F0aW9uIGNhY2hlcyBmb3IgYW4gb3JpZ2luLgorfQor
Citsb25nIGxvbmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmxvY2FsU3RvcmFnZURpc2tVc2FnZUZv
ck9yaWdpbihKU1N0cmluZ1JlZiBvcmlnaW5JZGVudGlmaWVyKQoreworICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdG8gc3VwcG9ydCBnZXR0aW5nIGRpc2sgdXNhZ2UgaW4gYnl0ZXMgZm9yIGFuIG9y
aWdpbi4KKyAgICByZXR1cm4gMDsKK30KKworSlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6b3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKEpTQ29udGV4dFJlZiBjb250ZXh0KQorewor
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gZ2V0IG9yaWdpbnMgdGhhdCBjb250YWluIGFwcGxp
Y2F0aW9uIGNhY2hlcy4KKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
Cit9CisKK2xvbmcgbG9uZyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YXBwbGljYXRpb25DYWNoZURp
c2tVc2FnZUZvck9yaWdpbihKU1N0cmluZ1JlZiBuYW1lKQoreworICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xl
YXJBbGxEYXRhYmFzZXMoKQoreworICAgIHdlYmtpdF9yZW1vdmVfYWxsX3dlYl9kYXRhYmFzZXMo
KTsKK30KKyAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERhdGFiYXNlUXVvdGEodW5z
aWduZWQgbG9uZyBsb25nIHF1b3RhKQoreworICAgIFdlYktpdFNlY3VyaXR5T3JpZ2luKiBvcmln
aW4gPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9zZWN1cml0eV9vcmlnaW4obWFpbkZyYW1lKTsKKyAg
ICB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX3NldF93ZWJfZGF0YWJhc2VfcXVvdGEob3JpZ2luLCBx
dW90YSk7Cit9CisKK0pTVmFsdWVSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRo
TG9jYWxTdG9yYWdlKEpTQ29udGV4dFJlZiBjb250ZXh0KQoreworICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUFsbExvY2FsU3RvcmFnZSgpCit7CisgICAg
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIG9yaWdpbklkZW50aWZpZXIp
Cit7CisgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyh1bnNpZ25lZCBudW1i
ZXIpCit7CisgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c3luY0xvY2FsU3RvcmFnZSgpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVu
dAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREb21haW5SZWxheGF0aW9uRm9y
YmlkZGVuRm9yVVJMU2NoZW1lKGJvb2wgZm9yYmlkZGVuLCBKU1N0cmluZ1JlZiBzY2hlbWUpCit7
CisgICAgR093blB0cjxnY2hhcj4gdXJsU2NoZW1lKEpTU3RyaW5nQ29weVVURjhDU3RyaW5nKHNj
aGVtZSkpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0RG9tYWluUmVsYXhhdGlv
bkZvcmJpZGRlbkZvclVSTFNjaGVtZShmb3JiaWRkZW4sIHVybFNjaGVtZS5nZXQoKSk7Cit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmdvQmFjaygpCit7CisgICAgV2ViS2l0V2ViVmll
dyogd2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7Cisg
ICAgd2Via2l0X3dlYl92aWV3X2dvX2JhY2sod2ViVmlldyk7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldERlZmVyc0xvYWRpbmcoYm9vbCBkZWZlcnMpCit7CisgICAgV2ViS2l0
V2ViVmlldyogd2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFt
ZSk7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXREZWZlcnNMb2FkaW5nKHdlYlZp
ZXcsIGRlZmVycyk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFwcENhY2hl
TWF4aW11bVNpemUodW5zaWduZWQgbG9uZyBsb25nIHNpemUpCit7CisgICAgd2Via2l0X2FwcGxp
Y2F0aW9uX2NhY2hlX3NldF9tYXhpbXVtX3NpemUoc2l6ZSk7Cit9CisKK2Jvb2wgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKEpTU3RyaW5n
UmVmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lLCBKU1N0cmluZ1JlZiBlbGVtZW50SWQpCit7
ICAgIAorICAgIGdjaGFyKiBuYW1lID0gSlNTdHJpbmdDb3B5VVRGOENTdHJpbmcoYW5pbWF0aW9u
TmFtZSk7CisgICAgZ2NoYXIqIGVsZW1lbnQgPSBKU1N0cmluZ0NvcHlVVEY4Q1N0cmluZyhlbGVt
ZW50SWQpOworICAgIGJvb2wgcmV0dXJuVmFsdWUgPSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6
OnBhdXNlQW5pbWF0aW9uKG1haW5GcmFtZSwgbmFtZSwgdGltZSwgZWxlbWVudCk7CisgICAgZ19m
cmVlKG5hbWUpOworICAgIGdfZnJlZShlbGVtZW50KTsKKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7
Cit9CisKK2Jvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9u
RWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSB0aW1lLCBKU1N0
cmluZ1JlZiBlbGVtZW50SWQpCit7ICAgIAorICAgIGdjaGFyKiBuYW1lID0gSlNTdHJpbmdDb3B5
VVRGOENTdHJpbmcocHJvcGVydHlOYW1lKTsKKyAgICBnY2hhciogZWxlbWVudCA9IEpTU3RyaW5n
Q29weVVURjhDU3RyaW5nKGVsZW1lbnRJZCk7CisgICAgYm9vbCByZXR1cm5WYWx1ZSA9IER1bXBS
ZW5kZXJUcmVlU3VwcG9ydEd0azo6cGF1c2VUcmFuc2l0aW9uKG1haW5GcmFtZSwgbmFtZSwgdGlt
ZSwgZWxlbWVudCk7CisgICAgZ19mcmVlKG5hbWUpOworICAgIGdfZnJlZShlbGVtZW50KTsKKyAg
ICByZXR1cm4gcmV0dXJuVmFsdWU7Cit9CisKK3Vuc2lnbmVkIExheW91dFRlc3RDb250cm9sbGVy
OjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBjb25zdAoreworICAgIHJldHVybiBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRHdGs6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhtYWluRnJhbWUpOwor
fQorCitzdGF0aWMgZ2Jvb2xlYW4gYm9vbGVhbkZyb21WYWx1ZShnY2hhciogdmFsdWUpCit7Cisg
ICAgcmV0dXJuICFnX2FzY2lpX3N0cmNhc2VjbXAodmFsdWUsICJ0cnVlIikgfHwgIWdfYXNjaWlf
c3RyY2FzZWNtcCh2YWx1ZSwgIjEiKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
b3ZlcnJpZGVQcmVmZXJlbmNlKEpTU3RyaW5nUmVmIGtleSwgSlNTdHJpbmdSZWYgdmFsdWUpCit7
CisgICAgR093blB0cjxnY2hhcj4gb3JpZ2luYWxOYW1lKEpTU3RyaW5nQ29weVVURjhDU3RyaW5n
KGtleSkpOworICAgIEdPd25QdHI8Z2NoYXI+IHZhbHVlQXNTdHJpbmcoSlNTdHJpbmdDb3B5VVRG
OENTdHJpbmcodmFsdWUpKTsKKworICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSB3ZWJraXRfd2Vi
X2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOworICAgIEFTU0VSVCh2aWV3KTsKKworICAg
IC8vIFRoaXMgdHJhbnNmb3JtYXRpb24gY291bGQgYmUgaGFuZGxlZCBieSBhIGhhc2ggdGFibGUg
KGFuZCBpdCBvbmNlIHdhcyksIGJ1dAorICAgIC8vIGhhdmluZyBpdCBwcm9taW5lbnQsIG1ha2Vz
IGl0IGVhc2llciBmb3IgcGVvcGxlIGZyb20gb3RoZXIgcG9ydHMgdG8ga2VlcCB0aGUKKyAgICAv
LyBsaXN0IHVwIHRvIGRhdGUuCisgICAgY29uc3QgZ2NoYXIqIHByb3BlcnR5TmFtZSA9IDA7Cisg
ICAgaWYgKGdfc3RyX2VxdWFsKG9yaWdpbmFsTmFtZS5nZXQoKSwgIldlYktpdEphdmFTY3JpcHRF
bmFibGVkIikpCisgICAgICAgIHByb3BlcnR5TmFtZSA9ICJlbmFibGUtc2NyaXB0cyI7CisgICAg
ZWxzZSBpZiAoZ19zdHJfZXF1YWwob3JpZ2luYWxOYW1lLmdldCgpLCAiV2ViS2l0RGVmYXVsdEZv
bnRTaXplIikpCisgICAgICAgIHByb3BlcnR5TmFtZSA9ICJkZWZhdWx0LWZvbnQtc2l6ZSI7Cisg
ICAgZWxzZSBpZiAoZ19zdHJfZXF1YWwob3JpZ2luYWxOYW1lLmdldCgpLCAiV2ViS2l0RW5hYmxl
Q2FyZXRCcm93c2luZyIpKQorICAgICAgICBwcm9wZXJ0eU5hbWUgPSAiZW5hYmxlLWNhcmV0LWJy
b3dzaW5nIjsKKyAgICBlbHNlIGlmIChnX3N0cl9lcXVhbChvcmlnaW5hbE5hbWUuZ2V0KCksICJX
ZWJLaXRVc2VzUGFnZUNhY2hlUHJlZmVyZW5jZUtleSIpKQorICAgICAgICBwcm9wZXJ0eU5hbWUg
PSAiZW5hYmxlLXBhZ2UtY2FjaGUiOworICAgIGVsc2UgaWYgKGdfc3RyX2VxdWFsKG9yaWdpbmFs
TmFtZS5nZXQoKSwgIldlYktpdFBsdWdpbnNFbmFibGVkIikpCisgICAgICAgIHByb3BlcnR5TmFt
ZSA9ICJlbmFibGUtcGx1Z2lucyI7CisgICAgZWxzZSBpZiAoZ19zdHJfZXF1YWwob3JpZ2luYWxO
YW1lLmdldCgpLCAiV2ViS2l0SHlwZXJsaW5rQXVkaXRpbmdFbmFibGVkIikpCisgICAgICAgIHBy
b3BlcnR5TmFtZSA9ICJlbmFibGUtaHlwZXJsaW5rLWF1ZGl0aW5nIjsKKyAgICBlbHNlIGlmIChn
X3N0cl9lcXVhbChvcmlnaW5hbE5hbWUuZ2V0KCksICJXZWJLaXRXZWJHTEVuYWJsZWQiKSkKKyAg
ICAgICAgcHJvcGVydHlOYW1lID0gImVuYWJsZS13ZWJnbCI7CisgICAgZWxzZSBpZiAoZ19zdHJf
ZXF1YWwob3JpZ2luYWxOYW1lLmdldCgpLCAiV2ViS2l0V2ViQXVkaW9FbmFibGVkIikpCisgICAg
ICAgIHByb3BlcnR5TmFtZSA9ICJlbmFibGUtd2ViYXVkaW8iOworICAgIGVsc2UgaWYgKGdfc3Ry
X2VxdWFsKG9yaWdpbmFsTmFtZS5nZXQoKSwgIldlYktpdFRhYlRvTGlua3NQcmVmZXJlbmNlS2V5
IikpIHsKKyAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRMaW5rc0luY2x1ZGVk
SW5Gb2N1c0NoYWluKGJvb2xlYW5Gcm9tVmFsdWUodmFsdWVBc1N0cmluZy5nZXQoKSkpOworICAg
ICAgICByZXR1cm47CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChvcmlnaW5hbE5hbWUuZ2V0
KCksICJXZWJLaXRQYWdlQ2FjaGVTdXBwb3J0c1BsdWdpbnNQcmVmZXJlbmNlS2V5IikpIHsKKyAg
ICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRQYWdlQ2FjaGVTdXBwb3J0c1BsdWdp
bnMod2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKSwgYm9vbGVhbkZyb21W
YWx1ZSh2YWx1ZUFzU3RyaW5nLmdldCgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2Ug
aWYgKGdfc3RyX2VxdWFsKG9yaWdpbmFsTmFtZS5nZXQoKSwgIldlYktpdENTU0dyaWRMYXlvdXRF
bmFibGVkIikpIHsKKyAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRDU1NHcmlk
TGF5b3V0RW5hYmxlZCh3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpLCBi
b29sZWFuRnJvbVZhbHVlKHZhbHVlQXNTdHJpbmcuZ2V0KCkpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwob3JpZ2luYWxOYW1lLmdldCgpLCAiV2ViS2l0Q1NT
UmVnaW9uc0VuYWJsZWQiKSkgeworICAgICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNl
dENTU1JlZ2lvbnNFbmFibGVkKHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFt
ZSksIGJvb2xlYW5Gcm9tVmFsdWUodmFsdWVBc1N0cmluZy5nZXQoKSkpOworICAgICAgICByZXR1
cm47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6b3ZlcnJpZGVQcmVmZXJlbmNlIHRyaWVkIHRvIG92ZXJyaWRlICIKKyAgICAgICAg
ICAgICAgICAidW5rbm93biBwcmVmZXJlbmNlICclcycuXG4iLCBvcmlnaW5hbE5hbWUuZ2V0KCkp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgV2ViS2l0V2ViU2V0dGluZ3MqIHNldHRp
bmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh2aWV3KTsKKyAgICBHUGFyYW1TcGVj
KiBwc3BlYyA9IGdfb2JqZWN0X2NsYXNzX2ZpbmRfcHJvcGVydHkoR19PQkpFQ1RfQ0xBU1MoCisg
ICAgICAgIFdFQktJVF9XRUJfU0VUVElOR1NfR0VUX0NMQVNTKHNldHRpbmdzKSksIHByb3BlcnR5
TmFtZSk7CisgICAgR1ZhbHVlIGN1cnJlbnRQcm9wZXJ0eVZhbHVlID0geyAwLCB7IHsgMCB9IH0g
fTsKKyAgICBnX3ZhbHVlX2luaXQoJmN1cnJlbnRQcm9wZXJ0eVZhbHVlLCBwc3BlYy0+dmFsdWVf
dHlwZSk7CisKKyAgICBpZiAoR19WQUxVRV9IT0xEU19TVFJJTkcoJmN1cnJlbnRQcm9wZXJ0eVZh
bHVlKSkKKyAgICAgICAgZ19vYmplY3Rfc2V0KHNldHRpbmdzLCBwcm9wZXJ0eU5hbWUsIHZhbHVl
QXNTdHJpbmcuZ2V0KCksIE5VTEwpOworICAgIGVsc2UgaWYgKEdfVkFMVUVfSE9MRFNfQk9PTEVB
TigmY3VycmVudFByb3BlcnR5VmFsdWUpKQorICAgICAgICBnX29iamVjdF9zZXQoR19PQkpFQ1Qo
c2V0dGluZ3MpLCBwcm9wZXJ0eU5hbWUsIGJvb2xlYW5Gcm9tVmFsdWUodmFsdWVBc1N0cmluZy5n
ZXQoKSksIE5VTEwpOworICAgIGVsc2UgaWYgKEdfVkFMVUVfSE9MRFNfSU5UKCZjdXJyZW50UHJv
cGVydHlWYWx1ZSkpCisgICAgICAgIGdfb2JqZWN0X3NldChHX09CSkVDVChzZXR0aW5ncyksIHBy
b3BlcnR5TmFtZSwgYXRvaSh2YWx1ZUFzU3RyaW5nLmdldCgpKSwgTlVMTCk7CisgICAgZWxzZSBp
ZiAoR19WQUxVRV9IT0xEU19GTE9BVCgmY3VycmVudFByb3BlcnR5VmFsdWUpKSB7CisgICAgICAg
IGdmbG9hdCBuZXdWYWx1ZSA9IGdfYXNjaWlfc3RydG9kKHZhbHVlQXNTdHJpbmcuZ2V0KCksIDAp
OworICAgICAgICBnX29iamVjdF9zZXQoR19PQkpFQ1Qoc2V0dGluZ3MpLCBwcm9wZXJ0eU5hbWUs
IG5ld1ZhbHVlLCBOVUxMKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJM
YXlvdXRUZXN0Q29udHJvbGxlcjo6b3ZlcnJpZGVQcmVmZXJlbmNlIGZhaWxlZCB0byBvdmVycmlk
ZSAiCisgICAgICAgICAgICAgICAgInByZWZlcmVuY2UgJyVzJy5cbiIsIG9yaWdpbmFsTmFtZS5n
ZXQoKSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHQoSlNT
dHJpbmdSZWYgc291cmNlLCBib29sIHJ1bkF0U3RhcnQsIGJvb2wgYWxsRnJhbWVzKQoreworICAg
IHByaW50ZigiTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHQgbm90IGltcGxlbWVu
dGVkLlxuIik7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJTdHlsZVNo
ZWV0KEpTU3RyaW5nUmVmIHNvdXJjZSwgYm9vbCBhbGxGcmFtZXMpCit7CisgICAgR093blB0cjxn
Y2hhcj4gc291cmNlQ29kZShKU1N0cmluZ0NvcHlVVEY4Q1N0cmluZyhzb3VyY2UpKTsKKyAgICBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmFkZFVzZXJTdHlsZVNoZWV0KG1haW5GcmFtZSwgc291
cmNlQ29kZS5nZXQoKSwgYWxsRnJhbWVzKTsKKyAgICAvLyBGSVhNRTogbmVlZHMgbW9yZSBpbnZl
c3RpZ2F0aW9uIHdoeSB1c2Vyc2NyaXB0cy91c2VyLXN0eWxlLXRvcC1mcmFtZS1vbmx5Lmh0bWwg
ZmFpbHMgd2hlbiBhbGxGcmFtZXMgaXMgZmFsc2UuCisKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAg
V2ViS2l0V2ViVmlldyogd2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1h
aW5GcmFtZSk7CisgICAgV2ViS2l0V2ViU2V0dGluZ3MqIHdlYlNldHRpbmdzID0gd2Via2l0X3dl
Yl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3KTsKKworICAgIGdfb2JqZWN0X3NldCh3ZWJTZXR0
aW5ncywgImVuYWJsZS1kZXZlbG9wZXItZXh0cmFzIiwgZW5hYmxlZCwgTlVMTCk7Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKGJvb2wpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzaG93V2ViSW5zcGVjdG9yKCkKK3sKKyAgICBXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsK
KyAgICBXZWJLaXRXZWJJbnNwZWN0b3IqIGluc3BlY3RvciA9IHdlYmtpdF93ZWJfdmlld19nZXRf
aW5zcGVjdG9yKHdlYlZpZXcpOworCisgICAgd2Via2l0X3dlYl9pbnNwZWN0b3Jfc2hvdyhpbnNw
ZWN0b3IpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbG9zZVdlYkluc3BlY3Rv
cigpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0
X3dlYl92aWV3KG1haW5GcmFtZSk7CisgICAgV2ViS2l0V2ViSW5zcGVjdG9yKiBpbnNwZWN0b3Ig
PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2luc3BlY3Rvcih3ZWJWaWV3KTsKKworICAgIHdlYmtpdF93
ZWJfaW5zcGVjdG9yX2Nsb3NlKGluc3BlY3Rvcik7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IobG9uZyBjYWxsSWQsIEpTU3RyaW5nUmVmIHNj
cmlwdCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl9mcmFtZV9n
ZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKKyAgICBXZWJLaXRXZWJJbnNwZWN0b3IqIGluc3BlY3Rv
ciA9IHdlYmtpdF93ZWJfdmlld19nZXRfaW5zcGVjdG9yKHdlYlZpZXcpOworICAgIGNoYXIqIHNj
cmlwdFN0cmluZyA9IEpTU3RyaW5nQ29weVVURjhDU3RyaW5nKHNjcmlwdCk7CisKKyAgICB3ZWJr
aXRfd2ViX2luc3BlY3Rvcl9leGVjdXRlX3NjcmlwdChpbnNwZWN0b3IsIGNhbGxJZCwgc2NyaXB0
U3RyaW5nKTsKKyAgICBnX2ZyZWUoc2NyaXB0U3RyaW5nKTsKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSh1
bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNj
cmlwdCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdv
cmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0KQorewor
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHRoaXMuCit9CisKK2Jvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNhbGxTaG91bGRDbG9zZU9u
V2ViVmlldygpCit7CisgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2hvdWxk
Q2xvc2UobWFpbkZyYW1lKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YXBpVGVz
dE5ld1dpbmRvd0RhdGFMb2FkQmFzZVVSTChKU1N0cmluZ1JlZiB1dGY4RGF0YSwgSlNTdHJpbmdS
ZWYgYmFzZVVSTCkKK3sKKworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphcGlUZXN0
R29Ub0N1cnJlbnRCYWNrRm9yd2FyZEl0ZW0oKQoreworCit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldFdlYlZpZXdFZGl0YWJsZShib29sKQoreworfQorCitKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6Om1hcmtlclRleHRGb3JMaXN0SXRlbShK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBub2RlT2JqZWN0KSBjb25zdAoreworICAg
IENTdHJpbmcgbWFya2VyVGV4dEdDaGFyID0gRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjptYXJr
ZXJUZXh0Rm9yTGlzdEl0ZW0obWFpbkZyYW1lLCBjb250ZXh0LCBub2RlT2JqZWN0KTsKKyAgICBp
ZiAobWFya2VyVGV4dEdDaGFyLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBtYXJrZXJUZXh0KEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZyhtYXJrZXJUZXh0R0NoYXIuZGF0YSgpKSk7CisgICAgcmV0dXJuIG1hcmtl
clRleHQ7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmF1dGhlbnRpY2F0ZVNlc3Np
b24oSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZikKK3sKK30KKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6YWJvcnRNb2RhbCgpCit7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFNlcmlhbGl6ZUhUVFBMb2Fkcyhib29sIHNlcmlhbGl6ZSkKK3sKKyAg
ICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNldFNlcmlhbGl6ZUhUVFBMb2FkcyhzZXJpYWxp
emUpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNaW5pbXVtVGltZXJJbnRl
cnZhbChkb3VibGUgbWluaW11bVRpbWVySW50ZXJ2YWwpCit7CisgICAgV2ViS2l0V2ViVmlldyog
d2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7CisgICAg
RHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRNaW5pbXVtVGltZXJJbnRlcnZhbCh3ZWJWaWV3
LCBtaW5pbXVtVGltZXJJbnRlcnZhbCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFRleHREaXJlY3Rpb24oSlNTdHJpbmdSZWYgZGlyZWN0aW9uKQoreworICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZENocm9tZUlu
cHV0RmllbGQoKQoreworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZW1vdmVDaHJv
bWVJbnB1dEZpZWxkKCkKK3sKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Zm9jdXNX
ZWJWaWV3KCkKK3sKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QmFja2luZ1Nj
YWxlRmFjdG9yKGRvdWJsZSkKK3sKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2lt
dWxhdGVEZXNrdG9wTm90aWZpY2F0aW9uQ2xpY2soSlNTdHJpbmdSZWYgdGl0bGUpCit7Cit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlc2V0UGFnZVZpc2liaWxpdHkoKQoreworICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0UGFnZVZpc2liaWxpdHkoY29uc3QgY2hhciopCit7CisgICAgLy8gRklYTUU6IEltcGxl
bWVudCB0aGlzLgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBdXRvbWF0aWNM
aW5rRGV0ZWN0aW9uRW5hYmxlZChib29sKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhp
cy4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2VuZFdlYkludGVudFJlc3BvbnNl
KEpTU3RyaW5nUmVmKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KK30KKwordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsaXZlcldlYkludGVudChKU1N0cmluZ1JlZiwgSlNT
dHJpbmdSZWYsIEpTU3RyaW5nUmVmKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4K
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U3RvcmFnZURhdGFiYXNlSWRsZUlu
dGVydmFsKGRvdWJsZSkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCit9CkluZGV4
OiBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvVGVzdFJ1bm5lckd0ay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL1Rlc3RSdW5uZXJHdGsuY3BwCShyZXZpc2lvbiAx
MjUzMzUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvVGVzdFJ1bm5lckd0ay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJUZXN0UnVubmVy
LmgiCiAKICNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgogI2luY2x1ZGUgIldlYkNvcmVTdXBw
b3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oIgpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRy
ZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJU
cmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQkocmV2aXNpb24gMTI1MzM1KQorKysgVG9vbHMvRHVt
cFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3
ICs0MCw3IEBACiAjaW1wb3J0ICJGcmFtZUxvYWREZWxlZ2F0ZS5oIgogI2ltcG9ydCAiSGlzdG9y
eURlbGVnYXRlLmgiCiAjaW1wb3J0ICJKYXZhU2NyaXB0VGhyZWFkaW5nLmgiCi0jaW1wb3J0ICJM
YXlvdXRUZXN0Q29udHJvbGxlci5oIgorI2ltcG9ydCAiVGVzdFJ1bm5lci5oIgogI2ltcG9ydCAi
TW9ja0dlb2xvY2F0aW9uUHJvdmlkZXIuaCIKICNpbXBvcnQgIk5hdmlnYXRpb25Db250cm9sbGVy
LmgiCiAjaW1wb3J0ICJPYmpDUGx1Z2luLmgiCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9t
YWMvRHVtcFJlbmRlclRyZWVXaW5kb3cubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlV2luZG93Lm1tCShyZXZpc2lvbiAxMjUzMzUpCisrKyBU
b29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWVXaW5kb3cubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDcgKzM0LDcgQEAKICNpbXBvcnQgIkR1bXBSZW5kZXJUcmVlLmgiCiAKIC8v
IEZJWE1FOiBUaGlzIGZpbGUgaXMgT2JqQysrIG9ubHkgYmVjYXVzZSBvZiB0aGlzIGluY2x1ZGUu
IDooCi0jaW1wb3J0ICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgorI2ltcG9ydCAiVGVzdFJ1bm5l
ci5oIgogI2ltcG9ydCA8V2ViS2l0L1dlYlZpZXdQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQv
V2ViVHlwZXNJbnRlcm5hbC5oPgogCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRWRp
dGluZ0RlbGVnYXRlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9F
ZGl0aW5nRGVsZWdhdGUubW0JKHJldmlzaW9uIDEyNTMzNSkKKysrIFRvb2xzL0R1bXBSZW5kZXJU
cmVlL21hYy9FZGl0aW5nRGVsZWdhdGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcg
QEAKICNpbXBvcnQgIkVkaXRpbmdEZWxlZ2F0ZS5oIgogCiAjaW1wb3J0ICJEdW1wUmVuZGVyVHJl
ZS5oIgotI2ltcG9ydCAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKKyNpbXBvcnQgIlRlc3RSdW5u
ZXIuaCIKICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KIAogQGludGVyZmFjZSBET01Ob2RlIChk
dW1wUGF0aCkKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9GcmFtZUxvYWREZWxlZ2F0
ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRnJhbWVMb2FkRGVs
ZWdhdGUubW0JKHJldmlzaW9uIDEyNTMzNSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9G
cmFtZUxvYWREZWxlZ2F0ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogI2lt
cG9ydCAiRXZlbnRTZW5kaW5nQ29udHJvbGxlci5oIgogI2ltcG9ydCAiRm91bmRhdGlvbi9OU05v
dGlmaWNhdGlvbi5oIgogI2ltcG9ydCAiR0NDb250cm9sbGVyLmgiCi0jaW1wb3J0ICJMYXlvdXRU
ZXN0Q29udHJvbGxlci5oIgorI2ltcG9ydCAiVGVzdFJ1bm5lci5oIgogI2ltcG9ydCAiTmF2aWdh
dGlvbkNvbnRyb2xsZXIuaCIKICNpbXBvcnQgIk9iakNDb250cm9sbGVyLmgiCiAjaW1wb3J0ICJP
YmpDUGx1Z2luLmgiCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvSGlzdG9yeURlbGVn
YXRlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9IaXN0b3J5RGVs
ZWdhdGUubW0JKHJldmlzaW9uIDEyNTMzNSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9I
aXN0b3J5RGVsZWdhdGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbXBv
cnQgIkhpc3RvcnlEZWxlZ2F0ZS5oIgogCiAjaW1wb3J0ICJEdW1wUmVuZGVyVHJlZS5oIgotI2lt
cG9ydCAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKKyNpbXBvcnQgIlRlc3RSdW5uZXIuaCIKIAog
I2ltcG9ydCA8V2ViS2l0L1dlYk5hdmlnYXRpb25EYXRhLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2Vi
Vmlldy5oPgpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9s
bGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRU
ZXN0Q29udHJvbGxlck1hYy5tbQkocmV2aXNpb24gMTI1MzM1KQorKysgVG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDExODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhl
IG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0
ICJEdW1wUmVuZGVyVHJlZS5oIgotI2ltcG9ydCAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKLQot
I2ltcG9ydCAiRWRpdGluZ0RlbGVnYXRlLmgiCi0jaW1wb3J0ICJNb2NrR2VvbG9jYXRpb25Qcm92
aWRlci5oIgotI2ltcG9ydCAiUG9saWN5RGVsZWdhdGUuaCIKLSNpbXBvcnQgIlN0b3JhZ2VUcmFj
a2VyRGVsZWdhdGUuaCIKLSNpbXBvcnQgIlVJRGVsZWdhdGUuaCIKLSNpbXBvcnQgIldvcmtRdWV1
ZS5oIgotI2ltcG9ydCAiV29ya1F1ZXVlSXRlbS5oIgotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3Vu
ZGF0aW9uLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5oPgotI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0pTU3RyaW5nUmVmQ0YuaD4KLSNpbXBvcnQgPFdlYktpdC9ET01Eb2N1bWVudC5oPgotI2ltcG9y
dCA8V2ViS2l0L0RPTUVsZW1lbnQuaD4KLSNpbXBvcnQgPFdlYktpdC9XZWJBcHBsaWNhdGlvbkNh
Y2hlLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV2ViQmFja0ZvcndhcmRMaXN0Lmg+Ci0jaW1wb3J0IDxX
ZWJLaXQvV2ViQ29yZVN0YXRpc3RpY3MuaD4KLSNpbXBvcnQgPFdlYktpdC9XZWJET01PcGVyYXRp
b25zUHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dlYkRhdGFTb3VyY2UuaD4KLSNpbXBvcnQg
PFdlYktpdC9XZWJEYXRhYmFzZU1hbmFnZXJQcml2YXRlLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV2Vi
RGV2aWNlT3JpZW50YXRpb24uaD4KLSNpbXBvcnQgPFdlYktpdC9XZWJEZXZpY2VPcmllbnRhdGlv
blByb3ZpZGVyTW9jay5oPgotI2ltcG9ydCA8V2ViS2l0L1dlYkZyYW1lLmg+Ci0jaW1wb3J0IDxX
ZWJLaXQvV2ViRnJhbWVWaWV3UHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dlYkdlb2xvY2F0
aW9uUG9zaXRpb24uaD4KLSNpbXBvcnQgPFdlYktpdC9XZWJIVE1MUmVwcmVzZW50YXRpb24uaD4K
LSNpbXBvcnQgPFdlYktpdC9XZWJIVE1MVmlld1ByaXZhdGUuaD4KLSNpbXBvcnQgPFdlYktpdC9X
ZWJIaXN0b3J5Lmg+Ci0jaW1wb3J0IDxXZWJLaXQvV2ViSGlzdG9yeVByaXZhdGUuaD4KLSNpbXBv
cnQgPFdlYktpdC9XZWJJY29uRGF0YWJhc2VQcml2YXRlLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV2Vi
SW5zcGVjdG9yUHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dlYk5TVVJMRXh0cmFzLmg+Ci0j
aW1wb3J0IDxXZWJLaXQvV2ViS2l0RXJyb3JzLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV2ViUHJlZmVy
ZW5jZXMuaD4KLSNpbXBvcnQgPFdlYktpdC9XZWJQcmVmZXJlbmNlc1ByaXZhdGUuaD4KLSNpbXBv
cnQgPFdlYktpdC9XZWJRdW90YU1hbmFnZXIuaD4KLSNpbXBvcnQgPFdlYktpdC9XZWJTY3JpcHRX
b3JsZC5oPgotI2ltcG9ydCA8V2ViS2l0L1dlYlNlY3VyaXR5T3JpZ2luUHJpdmF0ZS5oPgotI2lt
cG9ydCA8V2ViS2l0L1dlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0
L1dlYlR5cGVzSW50ZXJuYWwuaD4KLSNpbXBvcnQgPFdlYktpdC9XZWJWaWV3Lmg+Ci0jaW1wb3J0
IDxXZWJLaXQvV2ViVmlld1ByaXZhdGUuaD4KLSNpbXBvcnQgPFdlYktpdC9XZWJXb3JrZXJzUHJp
dmF0ZS5oPgotI2ltcG9ydCA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0jaW1wb3J0IDx3dGYvSGFzaE1h
cC5oPgotI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgotCi1AaW50ZXJmYWNlIENvbW1hbmRWYWxp
ZGF0aW9uVGFyZ2V0IDogTlNPYmplY3QgPE5TVmFsaWRhdGVkVXNlckludGVyZmFjZUl0ZW0+Ci17
Ci0gICAgU0VMIF9hY3Rpb247Ci19Ci0tIChpZClpbml0V2l0aEFjdGlvbjooU0VMKWFjdGlvbjsK
LUBlbmQKLQotQGltcGxlbWVudGF0aW9uIENvbW1hbmRWYWxpZGF0aW9uVGFyZ2V0Ci0KLS0gKGlk
KWluaXRXaXRoQWN0aW9uOihTRUwpYWN0aW9uCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsK
LSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBfYWN0aW9uID0gYWN0
aW9uOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChTRUwpYWN0aW9uCi17Ci0gICAgcmV0dXJu
IF9hY3Rpb247Ci19Ci0KLS0gKE5TSW50ZWdlcil0YWcKLXsKLSAgICByZXR1cm4gMDsKLX0KLQot
QGVuZAotCi1MYXlvdXRUZXN0Q29udHJvbGxlcjo6fkxheW91dFRlc3RDb250cm9sbGVyKCkKLXsK
LX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkRGlzYWxsb3dlZFVSTChKU1N0cmlu
Z1JlZiB1cmwpCi17Ci0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1cmxDRihBZG9wdENGLCBK
U1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB1cmwpKTsKLQotICAgIGlm
ICghZGlzYWxsb3dlZFVSTHMpCi0gICAgICAgIGRpc2FsbG93ZWRVUkxzID0gQ0ZTZXRDcmVhdGVN
dXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsIE5VTEwpOwotCi0gICAgLy8gQ2Fub25pY2Fs
aXplIHRoZSBVUkwKLSAgICBOU1VSTFJlcXVlc3QgKnJlcXVlc3QgPSBbTlNVUkxSZXF1ZXN0IHJl
cXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOihOU1N0cmluZyAqKXVybENGLmdldCgp
XV07Ci0gICAgcmVxdWVzdCA9IFtOU1VSTFByb3RvY29sIGNhbm9uaWNhbFJlcXVlc3RGb3JSZXF1
ZXN0OnJlcXVlc3RdOwotCi0gICAgQ0ZTZXRBZGRWYWx1ZShkaXNhbGxvd2VkVVJMcywgW3JlcXVl
c3QgVVJMXSk7Ci19Ci0KLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNhbGxTaG91bGRDbG9z
ZU9uV2ViVmlldygpCi17Ci0gICAgcmV0dXJuIFtbbWFpbkZyYW1lIHdlYlZpZXddIHNob3VsZENs
b3NlXTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxBcHBsaWNhdGlv
bkNhY2hlcygpCi17Ci0gICAgW1dlYkFwcGxpY2F0aW9uQ2FjaGUgZGVsZXRlQWxsQXBwbGljYXRp
b25DYWNoZXNdOwotfQotCi1sb25nIGxvbmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFwcGxpY2F0
aW9uQ2FjaGVEaXNrVXNhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgdXJsKQotewotICAgIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gdXJsQ0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgdXJsKSk7Ci0gICAgV2ViU2VjdXJpdHlPcmlnaW4gKm9yaWdpbiA9
IFtbV2ViU2VjdXJpdHlPcmlnaW4gYWxsb2NdIGluaXRXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3Ry
aW5nOihOU1N0cmluZyAqKXVybENGLmdldCgpXV07Ci0gICAgbG9uZyBsb25nIHVzYWdlID0gW1dl
YkFwcGxpY2F0aW9uQ2FjaGUgZGlza1VzYWdlRm9yT3JpZ2luOm9yaWdpbl07Ci0gICAgW29yaWdp
biByZWxlYXNlXTsKLSAgICByZXR1cm4gdXNhZ2U7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnN5bmNMb2NhbFN0b3JhZ2UoKQotewotICAgIFtbV2ViU3RvcmFnZU1hbmFnZXIgc2hh
cmVkV2ViU3RvcmFnZU1hbmFnZXJdIHN5bmNMb2NhbFN0b3JhZ2VdOwotfQotCi1sb25nIGxvbmcg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbihKU1N0
cmluZ1JlZiB1cmwpCi17Ci0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1cmxDRihBZG9wdENG
LCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB1cmwpKTsKLSAgICBX
ZWJTZWN1cml0eU9yaWdpbiAqb3JpZ2luID0gW1tXZWJTZWN1cml0eU9yaWdpbiBhbGxvY10gaW5p
dFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6KE5TU3RyaW5nICopdXJsQ0YuZ2V0KCldXTsK
LSAgICBsb25nIGxvbmcgdXNhZ2UgPSBbW1dlYlN0b3JhZ2VNYW5hZ2VyIHNoYXJlZFdlYlN0b3Jh
Z2VNYW5hZ2VyXSBkaXNrVXNhZ2VGb3JPcmlnaW46b3JpZ2luXTsKLSAgICBbb3JpZ2luIHJlbGVh
c2VdOwotICAgIHJldHVybiB1c2FnZTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyh1bnNpZ25lZCBudW1iZXIpCi17Ci0g
ICAgW3N0b3JhZ2VEZWxlZ2F0ZSBsb2dOb3RpZmljYXRpb25zOm51bWJlciBjb250cm9sbGVyOnRo
aXNdOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFwcGxpY2F0aW9uQ2Fj
aGVGb3JPcmlnaW4oSlNTdHJpbmdSZWYgdXJsKQotewotICAgIFJldGFpblB0cjxDRlN0cmluZ1Jl
Zj4gdXJsQ0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgdXJsKSk7Ci0KLSAgICBXZWJTZWN1cml0eU9yaWdpbiAqb3JpZ2luID0gW1tXZWJTZWN1cml0
eU9yaWdpbiBhbGxvY10gaW5pdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6KE5TU3RyaW5n
ICopdXJsQ0YuZ2V0KCldXTsKLSAgICBbV2ViQXBwbGljYXRpb25DYWNoZSBkZWxldGVDYWNoZUZv
ck9yaWdpbjpvcmlnaW5dOwotICAgIFtvcmlnaW4gcmVsZWFzZV07Ci19Ci0KLUpTVmFsdWVSZWYg
b3JpZ2luc0FycmF5VG9KUyhKU0NvbnRleHRSZWYgY29udGV4dCwgTlNBcnJheSAqb3JpZ2lucykK
LXsKLSAgICBOU1VJbnRlZ2VyIGNvdW50ID0gW29yaWdpbnMgY291bnRdOwotCi0gICAgSlNWYWx1
ZVJlZiBqc09yaWdpbnNBcnJheVtjb3VudF07Ci0gICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBp
IDwgY291bnQ7IGkrKykgewotICAgICAgICBOU1N0cmluZyAqb3JpZ2luID0gW1tvcmlnaW5zIG9i
amVjdEF0SW5kZXg6aV0gZGF0YWJhc2VJZGVudGlmaWVyXTsKLSAgICAgICAgSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IG9yaWdpbkpTKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygo
Q0ZTdHJpbmdSZWYpb3JpZ2luKSk7Ci0gICAgICAgIGpzT3JpZ2luc0FycmF5W2ldID0gSlNWYWx1
ZU1ha2VTdHJpbmcoY29udGV4dCwgb3JpZ2luSlMuZ2V0KCkpOwotICAgIH0KLQotICAgIHJldHVy
biBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCBjb3VudCwganNPcmlnaW5zQXJyYXksIE5VTEwp
OwotfQotCi1KU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aEFwcGxp
Y2F0aW9uQ2FjaGUoSlNDb250ZXh0UmVmIGNvbnRleHQpCi17Ci0gICAgcmV0dXJuIG9yaWdpbnNB
cnJheVRvSlMoY29udGV4dCwgW1dlYkFwcGxpY2F0aW9uQ2FjaGUgb3JpZ2luc1dpdGhDYWNoZV0p
OwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbERhdGFiYXNlcygpCi17
Ci0gICAgW1tXZWJEYXRhYmFzZU1hbmFnZXIgc2hhcmVkV2ViRGF0YWJhc2VNYW5hZ2VyXSBkZWxl
dGVBbGxEYXRhYmFzZXNdOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVB
bGxMb2NhbFN0b3JhZ2UoKQotewotICAgIFtbV2ViU3RvcmFnZU1hbmFnZXIgc2hhcmVkV2ViU3Rv
cmFnZU1hbmFnZXJdIGRlbGV0ZUFsbE9yaWdpbnNdOwotfQotCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwoZG91YmxlIGludGVydmFsKQot
ewotICAgIFtXZWJTdG9yYWdlTWFuYWdlciBzZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWw6
aW50ZXJ2YWxdOwotfQotCi1KU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5z
V2l0aExvY2FsU3RvcmFnZShKU0NvbnRleHRSZWYgY29udGV4dCkKLXsKLSAgICByZXR1cm4gb3Jp
Z2luc0FycmF5VG9KUyhjb250ZXh0LCBbW1dlYlN0b3JhZ2VNYW5hZ2VyIHNoYXJlZFdlYlN0b3Jh
Z2VNYW5hZ2VyXSBvcmlnaW5zXSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRl
bGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbihKU1N0cmluZ1JlZiBVUkwpCi17Ci0gICAgUmV0YWlu
UHRyPENGU3RyaW5nUmVmPiB1cmxDRihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBVUkwpKTsKLSAgICAKLSAgICBXZWJTZWN1cml0eU9yaWdpbiAqb3Jp
Z2luID0gW1tXZWJTZWN1cml0eU9yaWdpbiBhbGxvY10gaW5pdFdpdGhVUkw6W05TVVJMIFVSTFdp
dGhTdHJpbmc6KE5TU3RyaW5nICopdXJsQ0YuZ2V0KCldXTsKLSAgICBbW1dlYlN0b3JhZ2VNYW5h
Z2VyIHNoYXJlZFdlYlN0b3JhZ2VNYW5hZ2VyXSBkZWxldGVPcmlnaW46b3JpZ2luXTsKLSAgICBb
b3JpZ2luIHJlbGVhc2VdOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckJh
Y2tGb3J3YXJkTGlzdCgpCi17Ci0gICAgV2ViQmFja0ZvcndhcmRMaXN0ICpiYWNrRm9yd2FyZExp
c3QgPSBbW21haW5GcmFtZSB3ZWJWaWV3XSBiYWNrRm9yd2FyZExpc3RdOwotICAgIFdlYkhpc3Rv
cnlJdGVtICppdGVtID0gW1tiYWNrRm9yd2FyZExpc3QgY3VycmVudEl0ZW1dIHJldGFpbl07Ci0K
LSAgICAvLyBXZSBjbGVhciB0aGUgaGlzdG9yeSBieSBzZXR0aW5nIHRoZSBiYWNrL2ZvcndhcmQg
bGlzdCdzIGNhcGFjaXR5IHRvIDAKLSAgICAvLyB0aGVuIHJlc3RvcmluZyBpdCBiYWNrIGFuZCBh
ZGRpbmcgYmFjayB0aGUgY3VycmVudCBpdGVtLgotICAgIGludCBjYXBhY2l0eSA9IFtiYWNrRm9y
d2FyZExpc3QgY2FwYWNpdHldOwotICAgIFtiYWNrRm9yd2FyZExpc3Qgc2V0Q2FwYWNpdHk6MF07
Ci0gICAgW2JhY2tGb3J3YXJkTGlzdCBzZXRDYXBhY2l0eTpjYXBhY2l0eV07Ci0gICAgW2JhY2tG
b3J3YXJkTGlzdCBhZGRJdGVtOml0ZW1dOwotICAgIFtiYWNrRm9yd2FyZExpc3QgZ29Ub0l0ZW06
aXRlbV07Ci0gICAgW2l0ZW0gcmVsZWFzZV07Ci19Ci0KLUpTU3RyaW5nUmVmIExheW91dFRlc3RD
b250cm9sbGVyOjpjb3B5RGVjb2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVmIG5hbWUpCi17Ci0gICAg
UmV0YWluUHRyPENGU3RyaW5nUmVmPiBuYW1lQ0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJp
bmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgbmFtZSkpOwotICAgIE5TU3RyaW5nICpuYW1lTlMgPSAo
TlNTdHJpbmcgKiluYW1lQ0YuZ2V0KCk7Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENG
U3RyaW5nKChDRlN0cmluZ1JlZilbbmFtZU5TIF93ZWJfZGVjb2RlSG9zdE5hbWVdKTsKLX0KLQot
SlNTdHJpbmdSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvcHlFbmNvZGVkSG9zdE5hbWUoSlNT
dHJpbmdSZWYgbmFtZSkKLXsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IG5hbWVDRihBZG9w
dENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBuYW1lKSk7Ci0g
ICAgTlNTdHJpbmcgKm5hbWVOUyA9IChOU1N0cmluZyAqKW5hbWVDRi5nZXQoKTsKLSAgICByZXR1
cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKVtuYW1lTlMgX3dlYl9l
bmNvZGVIb3N0TmFtZV0pOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNwbGF5
KCkKLXsKLSAgICBkaXNwbGF5V2ViVmlldygpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjprZWVwV2ViSGlzdG9yeSgpCi17Ci0gICAgaWYgKCFbV2ViSGlzdG9yeSBvcHRpb25hbFNo
YXJlZEhpc3RvcnldKSB7Ci0gICAgICAgIFdlYkhpc3RvcnkgKmhpc3RvcnkgPSBbW1dlYkhpc3Rv
cnkgYWxsb2NdIGluaXRdOwotICAgICAgICBbV2ViSGlzdG9yeSBzZXRPcHRpb25hbFNoYXJlZEhp
c3Rvcnk6aGlzdG9yeV07Ci0gICAgICAgIFtoaXN0b3J5IHJlbGVhc2VdOwotICAgIH0KLX0KLQot
SlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zp
c2l0ZWRJbmZvKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQoteyAgIAot
ICAgIHJldHVybiBbW21haW5GcmFtZSB3ZWJWaWV3XSBfY29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zp
c2l0ZWRJbmZvOmNvbnRleHQgZm9yRWxlbWVudDp2YWx1ZV07Ci19Ci0KLUpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bGF5ZXJUcmVlQXNUZXh0KCkgY29uc3QK
LXsKLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc3RyaW5nKEFkb3B0LCBKU1N0cmluZ0Ny
ZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpW21haW5GcmFtZSBfbGF5ZXJUcmVlQXNUZXh0
XSkpOwotICAgIHJldHVybiBzdHJpbmc7Ci19Ci0KLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6bWFya2VyVGV4dEZvckxpc3RJdGVtKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU1ZhbHVlUmVmIG5vZGVPYmplY3QpIGNvbnN0Ci17Ci0gICAgRE9NRWxlbWVudCAq
ZWxlbWVudCA9IFtET01FbGVtZW50IF9ET01FbGVtZW50RnJvbUpTQ29udGV4dDpjb250ZXh0IHZh
bHVlOm5vZGVPYmplY3RdOwotICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPigpOwotCi0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG1h
cmtlclRleHQoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKChDRlN0cmluZ1JlZilb
ZWxlbWVudCBfbWFya2VyVGV4dEZvckxpc3RJdGVtXSkpOwotICAgIHJldHVybiBtYXJrZXJUZXh0
OwotfQotCi1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBh
Z2VQcm9wZXJ0eShjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIGludCBwYWdlTnVtYmVyKSBjb25z
dAotewotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBwcm9wZXJ0eVZhbHVlKEFkb3B0LCBK
U1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpW21haW5GcmFtZSBwYWdlUHJv
cGVydHk6cHJvcGVydHlOYW1lOnBhZ2VOdW1iZXJdKSk7Ci0gICAgcmV0dXJuIHByb3BlcnR5VmFs
dWU7Ci19Ci0KLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMoaW50IHBhZ2VOdW1iZXIsIGludCB3aWR0aCwgaW50
IGhlaWdodCwgaW50IG1hcmdpblRvcCwgaW50IG1hcmdpblJpZ2h0LCBpbnQgbWFyZ2luQm90dG9t
LCBpbnQgbWFyZ2luTGVmdCkgY29uc3QKLXsKLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
cHJvcGVydHlWYWx1ZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5n
UmVmKVttYWluRnJhbWUgcGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHM6cGFnZU51bWJlcjp3aWR0
aDpoZWlnaHQ6bWFyZ2luVG9wOm1hcmdpblJpZ2h0Om1hcmdpbkJvdHRvbTptYXJnaW5MZWZ0XSkp
OwotICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlOwotfQotCi1pbnQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6Om51bWJlck9mUGFnZXMoZmxvYXQgcGFnZVdpZHRoSW5QaXhlbHMsIGZsb2F0IHBhZ2VIZWln
aHRJblBpeGVscykKLXsKLSAgICByZXR1cm4gW21haW5GcmFtZSBudW1iZXJPZlBhZ2VzOnBhZ2VX
aWR0aEluUGl4ZWxzOnBhZ2VIZWlnaHRJblBpeGVsc107Ci19Ci0KLWludCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoKQot
ewotICAgIHJldHVybiBbW1ttYWluRnJhbWUgd2ViVmlld10gVUlEZWxlZ2F0ZV0gbnVtYmVyT2ZQ
ZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHNdOwotfQotCi1zaXplX3QgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OndlYkhpc3RvcnlJdGVtQ291bnQoKQotewotICAgIHJldHVybiBbW1tX
ZWJIaXN0b3J5IG9wdGlvbmFsU2hhcmVkSGlzdG9yeV0gYWxsSXRlbXNdIGNvdW50XTsKLX0KLQot
dW5zaWduZWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndvcmtlclRocmVhZENvdW50KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gW1dlYldvcmtlcnNQcml2YXRlIHdvcmtlclRocmVhZENvdW50XTsKLX0K
LQotSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpwbGF0Zm9y
bU5hbWUoKSBjb25zdAotewotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBwbGF0Zm9ybU5h
bWUoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJtYWMiKSk7Ci0gICAgcmV0
dXJuIHBsYXRmb3JtTmFtZTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bm90aWZ5
RG9uZSgpCi17Ci0gICAgaWYgKG1fd2FpdFRvRHVtcCAmJiAhdG9wTG9hZGluZ0ZyYW1lICYmICFX
b3JrUXVldWU6OnNoYXJlZCgpLT5jb3VudCgpKQotICAgICAgICBkdW1wKCk7Ci0gICAgbV93YWl0
VG9EdW1wID0gZmFsc2U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RkOjpzdHJpbmcgc3RyaW5nRnJv
bUpTU3RyaW5nKEpTU3RyaW5nUmVmIGpzU3RyaW5nKQotewotICAgIHNpemVfdCBtYXhCdWZmZXJT
aXplID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKGpzU3RyaW5nKTsKLSAgICBj
aGFyKiB1dGY4QnVmZmVyID0gbmV3IGNoYXJbbWF4QnVmZmVyU2l6ZV07Ci0gICAgc2l6ZV90IGJ5
dGVzV3JpdHRlblRvVVRGOEJ1ZmZlciA9IEpTU3RyaW5nR2V0VVRGOENTdHJpbmcoanNTdHJpbmcs
IHV0ZjhCdWZmZXIsIG1heEJ1ZmZlclNpemUpOwotICAgIHN0ZDo6c3RyaW5nIHN0ZFN0cmluZyh1
dGY4QnVmZmVyLCBieXRlc1dyaXR0ZW5Ub1VURjhCdWZmZXIgLSAxKTsgLy8gYnl0ZXNXcml0dGVu
VG9VVEY4QnVmZmVyIGluY2x1ZGVzIGEgdHJhaWxpbmcgXDAgd2hpY2ggc3RkOjpzdHJpbmcgZG9l
c24ndCBuZWVkLgotICAgIGRlbGV0ZVtdIHV0ZjhCdWZmZXI7Ci0gICAgcmV0dXJuIHN0ZFN0cmlu
ZzsKLX0KLQotc3RhdGljIGlubGluZSBzaXplX3QgaW5kZXhPZlNlcGFyYXRvckFmdGVyRGlyZWN0
b3J5TmFtZShjb25zdCBzdGQ6OnN0cmluZyYgZGlyZWN0b3J5TmFtZSwgY29uc3Qgc3RkOjpzdHJp
bmcmIGZ1bGxQYXRoKQotewotICAgIHN0ZDo6c3RyaW5nIHNlYXJjaEtleSA9ICIvIiArIGRpcmVj
dG9yeU5hbWUgKyAiLyI7Ci0gICAgc2l6ZV90IGluZGV4T2ZTZWFyY2hLZXlTdGFydCA9IGZ1bGxQ
YXRoLnJmaW5kKHNlYXJjaEtleSk7Ci0gICAgaWYgKGluZGV4T2ZTZWFyY2hLZXlTdGFydCA9PSBz
dGQ6OnN0cmluZzo6bnBvcykgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIC8vIENhbGxlcnMgZXhwZWN0IHRoZSByZXR1cm4gdmFs
dWUgbm90IHRvIGVuZCBpbiAiLyIsIHNvIHNlYXJjaEtleS5sZW5ndGgoKSAtIDEuCi0gICAgcmV0
dXJuIGluZGV4T2ZTZWFyY2hLZXlTdGFydCArIHNlYXJjaEtleS5sZW5ndGgoKSAtIDE7Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgc3RkOjpzdHJpbmcgcmVzb3VyY2VSb290QWJzb2x1dGVQYXRoKGNvbnN0
IHN0ZDo6c3RyaW5nJiB0ZXN0UGF0aE9yVVJMLCBjb25zdCBzdGQ6OnN0cmluZyYgZXhwZWN0ZWRS
b290TmFtZSkKLXsKLSAgICBjaGFyKiBsb2NhbFJlc291cmNlUm9vdEVudiA9IGdldGVudigiTE9D
QUxfUkVTT1VSQ0VfUk9PVCIpOwotICAgIGlmIChsb2NhbFJlc291cmNlUm9vdEVudikKLSAgICAg
ICAgcmV0dXJuIHN0ZDo6c3RyaW5nKGxvY2FsUmVzb3VyY2VSb290RW52KTsKLQotICAgIC8vIFRo
aXMgZmFsbGJhY2sgYXBwcm9hY2ggd29ya3MgZm9yIG5vbi1odHRwIHRlc3RzIGFuZCBpcyB1c2Vm
dWwKLSAgICAvLyBpbiB0aGUgY2FzZSB3aGVuIHdlJ3JlIHJ1bm5pbmcgRFJUIGRpcmVjdGx5IGZy
b20gdGhlIGNvbW1hbmQgbGluZS4KLSAgICByZXR1cm4gdGVzdFBhdGhPclVSTC5zdWJzdHIoMCwg
aW5kZXhPZlNlcGFyYXRvckFmdGVyRGlyZWN0b3J5TmFtZShleHBlY3RlZFJvb3ROYW1lLCB0ZXN0
UGF0aE9yVVJMKSk7Ci19Ci0KLUpTU3RyaW5nUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpwYXRo
VG9Mb2NhbFJlc291cmNlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1N0cmluZ1JlZiBsb2NhbFJl
c291cmNlSlNTdHJpbmcpCi17Ci0gICAgLy8gVGhlIHBhc3NlZCBpbiBwYXRoIHdpbGwgYmUgYW4g
YWJzb2x1dGUgcGF0aCB0byB0aGUgcmVzb3VyY2Ugc3RhcnRpbmcKLSAgICAvLyB3aXRoICIvdG1w
IiBvciAiL3RtcC9MYXlvdXRUZXN0cyIsIG9wdGlvbmFsbHkgc3RhcnRpbmcgd2l0aCB0aGUgZXhw
bGljaXQgZmlsZTovLyBwcm90b2NvbC4KLSAgICAvLyAvdG1wIG1hcHMgdG8gRFVNUFJFTkRFUlRS
RUVfVEVNUCwgYW5kIC90bXAvTGF5b3V0VGVzdHMgbWFwcyB0byBMT0NBTF9SRVNPVVJDRV9ST09U
LgotICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgc2hvdWxkIHdvcmsgb24gYWxsICpuaXggcGxhdGZv
cm1zIGFuZCBjYW4gYmUgbW92ZWQgaW50byBMYXlvdXRUZXN0Q29udHJvbGxlci5jcHAuCi0gICAg
c3RkOjpzdHJpbmcgZXhwZWN0ZWRSb290TmFtZTsKLSAgICBzdGQ6OnN0cmluZyBhYnNvbHV0ZVBh
dGhUb1Jlc291cmNlUm9vdDsKLSAgICBzdGQ6OnN0cmluZyBsb2NhbFJlc291cmNlU3RyaW5nID0g
c3RyaW5nRnJvbUpTU3RyaW5nKGxvY2FsUmVzb3VyY2VKU1N0cmluZyk7Ci0KLSAgICBpZiAobG9j
YWxSZXNvdXJjZVN0cmluZy5maW5kKCJMYXlvdXRUZXN0cyIpICE9IHN0ZDo6c3RyaW5nOjpucG9z
KSB7Ci0gICAgICAgIGV4cGVjdGVkUm9vdE5hbWUgPSAiTGF5b3V0VGVzdHMiOwotICAgICAgICBh
YnNvbHV0ZVBhdGhUb1Jlc291cmNlUm9vdCA9IHJlc291cmNlUm9vdEFic29sdXRlUGF0aChtX3Rl
c3RQYXRoT3JVUkwsIGV4cGVjdGVkUm9vdE5hbWUpOwotICAgIH0gZWxzZSBpZiAobG9jYWxSZXNv
dXJjZVN0cmluZy5maW5kKCJ0bXAiKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgICAgICBl
eHBlY3RlZFJvb3ROYW1lID0gInRtcCI7Ci0gICAgICAgIGFic29sdXRlUGF0aFRvUmVzb3VyY2VS
b290ID0gZ2V0ZW52KCJEVU1QUkVOREVSVFJFRV9URU1QIik7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIHBhdGhUb0xvY2FsUmVzb3VyY2Ugd2FzIHBhc3Nl
ZCBhIHBhdGggaXQgZG9lc24ndCBrbm93IGhvdyB0byBtYXAuCi0gICAgfQotICAgIEFTU0VSVCgh
YWJzb2x1dGVQYXRoVG9SZXNvdXJjZVJvb3QuZW1wdHkoKSk7Ci0gICAgc2l6ZV90IGluZGV4T2ZT
ZXBhcmF0b3JBZnRlclJvb3ROYW1lID0gaW5kZXhPZlNlcGFyYXRvckFmdGVyRGlyZWN0b3J5TmFt
ZShleHBlY3RlZFJvb3ROYW1lLCBsb2NhbFJlc291cmNlU3RyaW5nKTsKLSAgICBzdGQ6OnN0cmlu
ZyBhYnNvbHV0ZVBhdGhUb0xvY2FsUmVzb3VyY2UgPSBhYnNvbHV0ZVBhdGhUb1Jlc291cmNlUm9v
dCArIGxvY2FsUmVzb3VyY2VTdHJpbmcuc3Vic3RyKGluZGV4T2ZTZXBhcmF0b3JBZnRlclJvb3RO
YW1lKTsKLQotICAgIC8vIE5vdGU6IEl0J3MgaW1wb3J0YW50IHRoYXQgd2Uga2VlcCB0aGUgZmls
ZTovLyBvciBodHRwIHRlc3RzIHdpbGwgZ2V0IGNvbmZ1c2VkLgotICAgIGlmIChsb2NhbFJlc291
cmNlU3RyaW5nLmZpbmQoImZpbGU6Ly8iKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgICAg
ICBBU1NFUlQoYWJzb2x1dGVQYXRoVG9Mb2NhbFJlc291cmNlWzBdID09ICcvJyk7Ci0gICAgICAg
IGFic29sdXRlUGF0aFRvTG9jYWxSZXNvdXJjZSA9IHN0ZDo6c3RyaW5nKCJmaWxlOi8vIikgKyBh
YnNvbHV0ZVBhdGhUb0xvY2FsUmVzb3VyY2U7Ci0gICAgfQotICAgIHJldHVybiBKU1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZyhhYnNvbHV0ZVBhdGhUb0xvY2FsUmVzb3VyY2UuY19zdHIoKSk7
Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVlTG9hZChKU1N0cmluZ1JlZiB1
cmwsIEpTU3RyaW5nUmVmIHRhcmdldCkKLXsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHVy
bENGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHVy
bCkpOwotICAgIE5TU3RyaW5nICp1cmxOUyA9IChOU1N0cmluZyAqKXVybENGLmdldCgpOwotCi0g
ICAgTlNVUkwgKm5zdXJsID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6dXJsTlMgcmVsYXRpdmVUb1VS
TDpbW1ttYWluRnJhbWUgZGF0YVNvdXJjZV0gcmVzcG9uc2VdIFVSTF1dOwotICAgIE5TU3RyaW5n
ICpuc3VybFN0cmluZyA9IFtuc3VybCBhYnNvbHV0ZVN0cmluZ107Ci0KLSAgICBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gYWJzb2x1dGVVUkwoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKFtuc3VybFN0cmluZyBVVEY4U3RyaW5nXSkpOwotICAgIFdvcmtRdWV1ZTo6c2hhcmVk
KCktPnF1ZXVlKG5ldyBMb2FkSXRlbShhYnNvbHV0ZVVSTC5nZXQoKSwgdGFyZ2V0KSk7Ci19Ci0K
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFjY2VwdHNFZGl0aW5nKGJvb2wgbmV3QWNj
ZXB0c0VkaXRpbmcpCi17Ci0gICAgWyhFZGl0aW5nRGVsZWdhdGUgKilbW21haW5GcmFtZSB3ZWJW
aWV3XSBlZGl0aW5nRGVsZWdhdGVdIHNldEFjY2VwdHNFZGl0aW5nOm5ld0FjY2VwdHNFZGl0aW5n
XTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWx3YXlzQWNjZXB0Q29va2ll
cyhib29sIGFsd2F5c0FjY2VwdENvb2tpZXMpCi17Ci0gICAgaWYgKGFsd2F5c0FjY2VwdENvb2tp
ZXMgPT0gbV9hbHdheXNBY2NlcHRDb29raWVzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2Fs
d2F5c0FjY2VwdENvb2tpZXMgPSBhbHdheXNBY2NlcHRDb29raWVzOwotICAgIE5TSFRUUENvb2tp
ZUFjY2VwdFBvbGljeSBjb29raWVBY2NlcHRQb2xpY3kgPSBhbHdheXNBY2NlcHRDb29raWVzID8g
TlNIVFRQQ29va2llQWNjZXB0UG9saWN5QWx3YXlzIDogTlNIVFRQQ29va2llQWNjZXB0UG9saWN5
T25seUZyb21NYWluRG9jdW1lbnREb21haW47Ci0gICAgW1dlYlByZWZlcmVuY2VzIF9zZXRDdXJy
ZW50TmV0d29ya0xvYWRlclNlc3Npb25Db29raWVBY2NlcHRQb2xpY3k6Y29va2llQWNjZXB0UG9s
aWN5XTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXBwQ2FjaGVNYXhpbXVt
U2l6ZSh1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSkKLXsKLSAgICBbV2ViQXBwbGljYXRpb25DYWNo
ZSBzZXRNYXhpbXVtU2l6ZTpzaXplXTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0QXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSkK
LXsKLSAgICBXZWJTZWN1cml0eU9yaWdpbiAqb3JpZ2luID0gW1tXZWJTZWN1cml0eU9yaWdpbiBh
bGxvY10gaW5pdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4x
OjgwMDAiXV07Ci0gICAgW1tvcmlnaW4gYXBwbGljYXRpb25DYWNoZVF1b3RhTWFuYWdlcl0gc2V0
UXVvdGE6cXVvdGFdOwotICAgIFtvcmlnaW4gcmVsZWFzZV07Ci19Ci0KLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKGJvb2wgZmxhZykKLXsK
LSAgICBbW1ttYWluRnJhbWUgd2ViVmlld10gcHJlZmVyZW5jZXNdIHNldEF1dGhvckFuZFVzZXJT
dHlsZXNFbmFibGVkOmZsYWddOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRB
dXRvZmlsbGVkKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIG5vZGVPYmplY3QsIGJv
b2wgYXV0b2ZpbGxlZCkKLXsKLSAgICBET01FbGVtZW50ICplbGVtZW50ID0gW0RPTUVsZW1lbnQg
X0RPTUVsZW1lbnRGcm9tSlNDb250ZXh0OmNvbnRleHQgdmFsdWU6bm9kZU9iamVjdF07Ci0gICAg
aWYgKCFlbGVtZW50IHx8ICFbZWxlbWVudCBpc0tpbmRPZkNsYXNzOltET01IVE1MSW5wdXRFbGVt
ZW50IGNsYXNzXV0pCi0gICAgICAgIHJldHVybjsKLQotICAgIFsoRE9NSFRNTElucHV0RWxlbWVu
dCAqKWVsZW1lbnQgX3NldEF1dG9maWxsZWQ6YXV0b2ZpbGxlZF07Ci19Ci0KLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGJvb2wgc2V0RGVsZWdhdGUs
IGJvb2wgcGVybWlzc2l2ZSkKLXsKLSAgICBpZiAoc2V0RGVsZWdhdGUpIHsKLSAgICAgICAgW3Bv
bGljeURlbGVnYXRlIHNldFBlcm1pc3NpdmU6cGVybWlzc2l2ZV07Ci0gICAgICAgIFtbbWFpbkZy
YW1lIHdlYlZpZXddIHNldFBvbGljeURlbGVnYXRlOnBvbGljeURlbGVnYXRlXTsKLSAgICB9IGVs
c2UKLSAgICAgICAgW1ttYWluRnJhbWUgd2ViVmlld10gc2V0UG9saWN5RGVsZWdhdGU6bmlsXTsK
LX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGF0YWJhc2VRdW90YSh1bnNpZ25l
ZCBsb25nIGxvbmcgcXVvdGEpCi17ICAgIAotICAgIFdlYlNlY3VyaXR5T3JpZ2luICpvcmlnaW4g
PSBbW1dlYlNlY3VyaXR5T3JpZ2luIGFsbG9jXSBpbml0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0
cmluZzpAImZpbGU6Ly8vIl1dOwotICAgIFtbb3JpZ2luIGRhdGFiYXNlUXVvdGFNYW5hZ2VyXSBz
ZXRRdW90YTpxdW90YV07Ci0gICAgW29yaWdpbiByZWxlYXNlXTsKLX0KLQotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6Z29CYWNrKCkKLXsKLSAgICBbW21haW5GcmFtZSB3ZWJWaWV3XSBnb0Jh
Y2tdOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREZWZlcnNMb2FkaW5nKGJv
b2wgZGVmZXJzKQotewotICAgIFtbbWFpbkZyYW1lIHdlYlZpZXddIHNldERlZmVyc0NhbGxiYWNr
czpkZWZlcnNdOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREb21haW5SZWxh
eGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGJvb2wgZm9yYmlkZGVuLCBKU1N0cmluZ1JlZiBz
Y2hlbWUpCi17Ci0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBzY2hlbWVDRlN0cmluZyhBZG9w
dENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBzY2hlbWUpKTsK
LSAgICBbV2ViVmlldyBfc2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbjpmb3JiaWRkZW4gZm9y
VVJMU2NoZW1lOihOU1N0cmluZyAqKXNjaGVtZUNGU3RyaW5nLmdldCgpXTsKLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0RldmljZU9yaWVudGF0aW9uKGJvb2wgY2FuUHJv
dmlkZUFscGhhLCBkb3VibGUgYWxwaGEsIGJvb2wgY2FuUHJvdmlkZUJldGEsIGRvdWJsZSBiZXRh
LCBib29sIGNhblByb3ZpZGVHYW1tYSwgZG91YmxlIGdhbW1hKQotewotICAgIC8vIER1bXBSZW5k
ZXJUcmVlIGNvbmZpZ3VyZWQgdGhlIFdlYlZpZXcgdG8gdXNlIFdlYkRldmljZU9yaWVudGF0aW9u
UHJvdmlkZXJNb2NrLgotICAgIGlkPFdlYkRldmljZU9yaWVudGF0aW9uUHJvdmlkZXI+IHByb3Zp
ZGVyID0gW1ttYWluRnJhbWUgd2ViVmlld10gX2RldmljZU9yaWVudGF0aW9uUHJvdmlkZXJdOwot
ICAgIFdlYkRldmljZU9yaWVudGF0aW9uUHJvdmlkZXJNb2NrICptb2NrUHJvdmlkZXIgPSBzdGF0
aWNfY2FzdDxXZWJEZXZpY2VPcmllbnRhdGlvblByb3ZpZGVyTW9jayo+KHByb3ZpZGVyKTsKLSAg
ICBXZWJEZXZpY2VPcmllbnRhdGlvbiAqb3JpZW50YXRpb24gPSBbW1dlYkRldmljZU9yaWVudGF0
aW9uIGFsbG9jXSBpbml0V2l0aENhblByb3ZpZGVBbHBoYTpjYW5Qcm92aWRlQWxwaGEgYWxwaGE6
YWxwaGEgY2FuUHJvdmlkZUJldGE6Y2FuUHJvdmlkZUJldGEgYmV0YTpiZXRhIGNhblByb3ZpZGVH
YW1tYTpjYW5Qcm92aWRlR2FtbWEgZ2FtbWE6Z2FtbWFdOwotICAgIFttb2NrUHJvdmlkZXIgc2V0
T3JpZW50YXRpb246b3JpZW50YXRpb25dOwotICAgIFtvcmllbnRhdGlvbiByZWxlYXNlXTsKLX0K
LQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24o
ZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3kpCi17Ci0g
ICAgV2ViR2VvbG9jYXRpb25Qb3NpdGlvbiAqcG9zaXRpb24gPSBbW1dlYkdlb2xvY2F0aW9uUG9z
aXRpb24gYWxsb2NdIGluaXRXaXRoVGltZXN0YW1wOmN1cnJlbnRUaW1lKCkgbGF0aXR1ZGU6bGF0
aXR1ZGUgbG9uZ2l0dWRlOmxvbmdpdHVkZSBhY2N1cmFjeTphY2N1cmFjeV07Ci0gICAgW1tNb2Nr
R2VvbG9jYXRpb25Qcm92aWRlciBzaGFyZWRdIHNldFBvc2l0aW9uOnBvc2l0aW9uXTsKLSAgICBb
cG9zaXRpb24gcmVsZWFzZV07Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1v
Y2tHZW9sb2NhdGlvbkVycm9yKGludCBjb2RlLCBKU1N0cmluZ1JlZiBtZXNzYWdlKQotewotICAg
IFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbWVzc2FnZUNGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNG
U3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIG1lc3NhZ2UpKTsKLSAgICBOU1N0cmluZyAqbWVz
c2FnZU5TID0gKE5TU3RyaW5nICopbWVzc2FnZUNGLmdldCgpOwotICAgIE5TRXJyb3IgKmVycm9y
ID0gW05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOldlYktpdEVycm9yRG9tYWluIGNvZGU6Y29kZSB1
c2VySW5mbzpbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0Om1lc3NhZ2VOUyBmb3JL
ZXk6TlNMb2NhbGl6ZWREZXNjcmlwdGlvbktleV1dOwotICAgIFtbTW9ja0dlb2xvY2F0aW9uUHJv
dmlkZXIgc2hhcmVkXSBzZXRFcnJvcjplcnJvcl07Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sIGFsbG93KQotewotICAgIHNldEdl
b2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbihhbGxvdyk7Ci0gICAgW1tbbWFpbkZyYW1lIHdlYlZp
ZXddIFVJRGVsZWdhdGVdIGRpZFNldE1vY2tHZW9sb2NhdGlvblBlcm1pc3Npb25dOwotfQotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRNb2NrU3BlZWNoSW5wdXRSZXN1bHQoSlNTdHJp
bmdSZWYgcmVzdWx0LCBkb3VibGUgY29uZmlkZW5jZSwgSlNTdHJpbmdSZWYgbGFuZ3VhZ2UpCi17
Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Igc3BlZWNoIGlucHV0IGxheW91dCB0ZXN0cy4K
LSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1
LgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrU3BlZWNoSW5wdXREdW1w
UmVjdChib29sIGZsYWcpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Igc3BlZWNoIGlu
cHV0IGxheW91dCB0ZXN0cy4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTM5NDg1LgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzdGFy
dFNwZWVjaElucHV0KEpTQ29udGV4dFJlZiBpbnB1dEVsZW1lbnQpCi17Ci0gICAgLy8gRklYTUU6
IEltcGxlbWVudCBmb3Igc3BlZWNoIGlucHV0IGxheW91dCB0ZXN0cy4KLSAgICAvLyBTZWUgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgotfQotCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKGJvb2wgaWNvbkRhdGFi
YXNlRW5hYmxlZCkKLXsKLSAgICAvLyBGSVhNRTogV29ya2Fyb3VuZCA8cmRhcjovL3Byb2JsZW0v
NjQ4MDEwOD4KLSAgICBzdGF0aWMgV2ViSWNvbkRhdGFiYXNlICpzaGFyZWRXZWJJY29uRGF0YWJh
c2UgPSBOVUxMOwotICAgIGlmICghc2hhcmVkV2ViSWNvbkRhdGFiYXNlKSB7Ci0gICAgICAgIGlm
ICghaWNvbkRhdGFiYXNlRW5hYmxlZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc2hh
cmVkV2ViSWNvbkRhdGFiYXNlID0gW1dlYkljb25EYXRhYmFzZSBzaGFyZWRJY29uRGF0YWJhc2Vd
OwotICAgICAgICBpZiAoW3NoYXJlZFdlYkljb25EYXRhYmFzZSBpc0VuYWJsZWRdID09IGljb25E
YXRhYmFzZUVuYWJsZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIFtzaGFyZWRX
ZWJJY29uRGF0YWJhc2Ugc2V0RW5hYmxlZDppY29uRGF0YWJhc2VFbmFibGVkXTsKLX0KLQotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlcihib29s
IGZsYWcpCi17Ci0gICAgTlNWaWV3ICpkb2N1bWVudFZpZXcgPSBbW21haW5GcmFtZSBmcmFtZVZp
ZXddIGRvY3VtZW50Vmlld107Ci0gICAgCi0gICAgTlNSZXNwb25kZXIgKmZpcnN0UmVzcG9uZGVy
ID0gZmxhZyA/IGRvY3VtZW50VmlldyA6IG5pbDsKLSAgICBbW1ttYWluRnJhbWUgd2ViVmlld10g
d2luZG93XSBtYWtlRmlyc3RSZXNwb25kZXI6Zmlyc3RSZXNwb25kZXJdOwotfQotCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKGJvb2wgcHJpdmF0
ZUJyb3dzaW5nRW5hYmxlZCkKLXsKLSAgICBbW1ttYWluRnJhbWUgd2ViVmlld10gcHJlZmVyZW5j
ZXNdIHNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQ6cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZF07Ci19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFhTU0F1ZGl0b3JFbmFibGVkKGJvb2wg
ZW5hYmxlZCkKLXsKLSAgICBbW1ttYWluRnJhbWUgd2ViVmlld10gcHJlZmVyZW5jZXNdIHNldFhT
U0F1ZGl0b3JFbmFibGVkOmVuYWJsZWRdOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBbW1ttYWlu
RnJhbWUgd2ViVmlld10gcHJlZmVyZW5jZXNdIHNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQ6ZW5h
YmxlZF07Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNwYXRpYWxOYXZpZ2F0
aW9uRW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgW1tbbWFpbkZyYW1lIHdlYlZpZXddIHBy
ZWZlcmVuY2VzXSBzZXRTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQ6ZW5hYmxlZF07Ci19Ci0KLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVV
UkxzKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBbW1ttYWluRnJhbWUgd2ViVmlld10gcHJlZmVyZW5j
ZXNdIHNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzOmVuYWJsZWRdOwotfQotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMo
Ym9vbCBlbmFibGVkKQotewotICAgIFtbW21haW5GcmFtZSB3ZWJWaWV3XSBwcmVmZXJlbmNlc10g
c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzOmVuYWJsZWRdOwotfQotCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRQb3B1cEJsb2NraW5nRW5hYmxlZChib29sIHBvcHVwQmxvY2tp
bmdFbmFibGVkKQotewotICAgIFtbW21haW5GcmFtZSB3ZWJWaWV3XSBwcmVmZXJlbmNlc10gc2V0
SmF2YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0b21hdGljYWxseTohcG9wdXBCbG9ja2luZ0VuYWJs
ZWRdOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQbHVnaW5zRW5hYmxlZChi
b29sIHBsdWdpbnNFbmFibGVkKQotewotICAgIFtbW21haW5GcmFtZSB3ZWJWaWV3XSBwcmVmZXJl
bmNlc10gc2V0UGx1Z0luc0VuYWJsZWQ6cGx1Z2luc0VuYWJsZWRdOwotfQotCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKGJvb2wgZW5h
YmxlZCkKLXsKLSAgICBbW1ttYWluRnJhbWUgd2ViVmlld10gcHJlZmVyZW5jZXNdIHNldEphdmFT
Y3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQ6ZW5hYmxlZF07Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKGJvb2wgZW5hYmxlZCkK
LXsKLSAgICBbW21haW5GcmFtZSB3ZWJWaWV3XSBzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5h
YmxlZDplbmFibGVkXTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VGFiS2V5
Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKGJvb2wgY3ljbGVzKQotewotICAgIFtbbWFpbkZyYW1lIHdl
YlZpZXddIHNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50czpjeWNsZXNdOwotfQotCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VEYXNoYm9hcmRDb21wYXRpYmlsaXR5TW9kZShi
b29sIGZsYWcpCi17Ci0gICAgW1ttYWluRnJhbWUgd2ViVmlld10gX3NldERhc2hib2FyZEJlaGF2
aW9yOldlYkRhc2hib2FyZEJlaGF2aW9yVXNlQmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSB0bzpm
bGFnXTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlclN0eWxlU2hlZXRF
bmFibGVkKGJvb2wgZmxhZykKLXsKLSAgICBbW1dlYlByZWZlcmVuY2VzIHN0YW5kYXJkUHJlZmVy
ZW5jZXNdIHNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZDpmbGFnXTsKLX0KLQotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihKU1N0cmluZ1JlZiBwYXRo
KQotewotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gcGF0aENGKEFkb3B0Q0YsIEpTU3RyaW5n
Q29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHBhdGgpKTsKLSAgICBOU1VSTCAqdXJs
ID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6KE5TU3RyaW5nICopcGF0aENGLmdldCgpXTsKLSAgICBb
W1dlYlByZWZlcmVuY2VzIHN0YW5kYXJkUHJlZmVyZW5jZXNdIHNldFVzZXJTdHlsZVNoZWV0TG9j
YXRpb246dXJsXTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VmFsdWVGb3JV
c2VyKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIG5vZGVPYmplY3QsIEpTU3RyaW5n
UmVmIHZhbHVlKQotewotICAgIERPTUVsZW1lbnQgKmVsZW1lbnQgPSBbRE9NRWxlbWVudCBfRE9N
RWxlbWVudEZyb21KU0NvbnRleHQ6Y29udGV4dCB2YWx1ZTpub2RlT2JqZWN0XTsKLSAgICBpZiAo
IWVsZW1lbnQgfHwgIVtlbGVtZW50IGlzS2luZE9mQ2xhc3M6W0RPTUhUTUxJbnB1dEVsZW1lbnQg
Y2xhc3NdXSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB2
YWx1ZUNGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQs
IHZhbHVlKSk7Ci0gICAgWyhET01IVE1MSW5wdXRFbGVtZW50ICopZWxlbWVudCBfc2V0VmFsdWVG
b3JVc2VyOihOU1N0cmluZyAqKXZhbHVlQ0YuZ2V0KCldOwotfQotCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRWaWV3TW9kZU1lZGlhRmVhdHVyZShKU1N0cmluZ1JlZiBtb2RlKQotewot
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
ZGlzYWJsZUltYWdlTG9hZGluZygpCi17Ci0gICAgW1tXZWJQcmVmZXJlbmNlcyBzdGFuZGFyZFBy
ZWZlcmVuY2VzXSBzZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHk6Tk9dOwotfQotCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpkaXNwYXRjaFBlbmRpbmdMb2FkUmVxdWVzdHMoKQotewotICAg
IFtbbWFpbkZyYW1lIHdlYlZpZXddIF9kaXNwYXRjaFBlbmRpbmdMb2FkUmVxdWVzdHNdOwotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvdmVycmlkZVByZWZlcmVuY2UoSlNTdHJpbmdS
ZWYga2V5LCBKU1N0cmluZ1JlZiB2YWx1ZSkKLXsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
IGtleUNGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQs
IGtleSkpOwotICAgIE5TU3RyaW5nICprZXlOUyA9IChOU1N0cmluZyAqKWtleUNGLmdldCgpOwot
Ci0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB2YWx1ZUNGKEFkb3B0Q0YsIEpTU3RyaW5nQ29w
eUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHZhbHVlKSk7Ci0gICAgTlNTdHJpbmcgKnZh
bHVlTlMgPSAoTlNTdHJpbmcgKil2YWx1ZUNGLmdldCgpOwotCi0gICAgW1tXZWJQcmVmZXJlbmNl
cyBzdGFuZGFyZFByZWZlcmVuY2VzXSBfc2V0UHJlZmVyZW5jZUZvclRlc3RXaXRoVmFsdWU6dmFs
dWVOUyBmb3JLZXk6a2V5TlNdOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZW1v
dmVBbGxWaXNpdGVkTGlua3MoKQotewotICAgIFtXZWJIaXN0b3J5IF9yZW1vdmVBbGxWaXNpdGVk
TGlua3NdOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQZXJzaXN0ZW50VXNl
clN0eWxlU2hlZXRMb2NhdGlvbihKU1N0cmluZ1JlZiBqc1VSTCkKLXsKLSAgICBSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+IHVybFN0cmluZyhBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZygwLCBq
c1VSTCkpOwotICAgIDo6c2V0UGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0TG9jYXRpb24odXJsU3Ry
aW5nLmdldCgpKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJQZXJzaXN0
ZW50VXNlclN0eWxlU2hlZXQoKQotewotICAgIDo6c2V0UGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0
TG9jYXRpb24oMCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdpbmRvd0lz
S2V5KGJvb2wgd2luZG93SXNLZXkpCi17Ci0gICAgbV93aW5kb3dJc0tleSA9IHdpbmRvd0lzS2V5
OwotICAgIFtbbWFpbkZyYW1lIHdlYlZpZXddIF91cGRhdGVBY3RpdmVTdGF0ZV07Ci19Ci0KLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChib29s
IGZsYWcpCi17Ci0gICAgW1ttYWluRnJhbWUgd2ViVmlld10gc2V0U21hcnRJbnNlcnREZWxldGVF
bmFibGVkOmZsYWddOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTZWxlY3RU
cmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKGJvb2wgZmxhZykKLXsKLSAgICBbW21haW5GcmFtZSB3
ZWJWaWV3XSBzZXRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkOmZsYWddOwotfQotCi1z
dGF0aWMgY29uc3QgQ0ZUaW1lSW50ZXJ2YWwgd2FpdFRvRHVtcFdhdGNoZG9nSW50ZXJ2YWwgPSAz
MC4wOwotCi1zdGF0aWMgdm9pZCB3YWl0VW50aWxEb25lV2F0Y2hkb2dGaXJlZChDRlJ1bkxvb3BU
aW1lclJlZiB0aW1lciwgdm9pZCogaW5mbykKLXsKLSAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXIt
PndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0V2FpdFRvRHVtcChib29sIHdhaXRVbnRpbERvbmUpCi17Ci0gICAgbV93YWl0
VG9EdW1wID0gd2FpdFVudGlsRG9uZTsKLSAgICBpZiAobV93YWl0VG9EdW1wICYmIHNob3VsZFNl
dFdhaXRUb0R1bXBXYXRjaGRvZygpKQotICAgICAgICBzZXRXYWl0VG9EdW1wV2F0Y2hkb2coQ0ZS
dW5Mb29wVGltZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgQ0ZBYnNvbHV0ZVRpbWVHZXRD
dXJyZW50KCkgKyB3YWl0VG9EdW1wV2F0Y2hkb2dJbnRlcnZhbCwgMCwgMCwgMCwgd2FpdFVudGls
RG9uZVdhdGNoZG9nRmlyZWQsIE5VTEwpKTsKLX0KLQotaW50IExheW91dFRlc3RDb250cm9sbGVy
Ojp3aW5kb3dDb3VudCgpCi17Ci0gICAgcmV0dXJuIENGQXJyYXlHZXRDb3VudChvcGVuV2luZG93
c1JlZik7Ci19Ci0KLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmVsZW1lbnREb2VzQXV0b0Nv
bXBsZXRlRm9yRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBqc1N0cmluZykKLXsKLSAgICBSZXRh
aW5QdHI8Q0ZTdHJpbmdSZWY+IGlkQ0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NG
QWxsb2NhdG9yRGVmYXVsdCwganNTdHJpbmcpKTsKLSAgICBOU1N0cmluZyAqaWROUyA9IChOU1N0
cmluZyAqKWlkQ0YuZ2V0KCk7Ci0gICAgCi0gICAgRE9NRWxlbWVudCAqZWxlbWVudCA9IFtbbWFp
bkZyYW1lIERPTURvY3VtZW50XSBnZXRFbGVtZW50QnlJZDppZE5TXTsKLSAgICBpZCByZXAgPSBb
W21haW5GcmFtZSBkYXRhU291cmNlXSByZXByZXNlbnRhdGlvbl07Ci0gICAgCi0gICAgaWYgKFty
ZXAgY2xhc3NdID09IFtXZWJIVE1MUmVwcmVzZW50YXRpb24gY2xhc3NdKQotICAgICAgICByZXR1
cm4gWyhXZWJIVE1MUmVwcmVzZW50YXRpb24gKilyZXAgZWxlbWVudERvZXNBdXRvQ29tcGxldGU6
ZWxlbWVudF07Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmV4ZWNDb21tYW5kKEpTU3RyaW5nUmVmIG5hbWUsIEpTU3RyaW5nUmVmIHZhbHVlKQot
ewotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbmFtZUNGKEFkb3B0Q0YsIEpTU3RyaW5nQ29w
eUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIG5hbWUpKTsKLSAgICBOU1N0cmluZyAqbmFt
ZU5TID0gKE5TU3RyaW5nICopbmFtZUNGLmdldCgpOwotCi0gICAgUmV0YWluUHRyPENGU3RyaW5n
UmVmPiB2YWx1ZUNGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIHZhbHVlKSk7Ci0gICAgTlNTdHJpbmcgKnZhbHVlTlMgPSAoTlNTdHJpbmcgKil2YWx1
ZUNGLmdldCgpOwotCi0gICAgW1ttYWluRnJhbWUgd2ViVmlld10gX2V4ZWN1dGVDb3JlQ29tbWFu
ZEJ5TmFtZTpuYW1lTlMgdmFsdWU6dmFsdWVOU107Ci19Ci0KLWJvb2wgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmZpbmRTdHJpbmcoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTU3RyaW5nUmVmIHRhcmdl
dCwgSlNPYmplY3RSZWYgb3B0aW9uc0FycmF5KQotewotICAgIFdlYkZpbmRPcHRpb25zIG9wdGlv
bnMgPSAwOwotCi0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGxlbmd0aFByb3BlcnR5TmFt
ZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICBK
U1ZhbHVlUmVmIGxlbmd0aFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBvcHRp
b25zQXJyYXksIGxlbmd0aFByb3BlcnR5TmFtZS5nZXQoKSwgMCk7Ci0gICAgaWYgKCFKU1ZhbHVl
SXNOdW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHRhcmdldENGU3RyaW5nKEFkb3B0Q0YsIEpTU3Ry
aW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHRhcmdldCkpOwotCi0gICAgc2l6
ZV90IGxlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQs
IGxlbmd0aFZhbHVlLCAwKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsr
aSkgewotICAgICAgICBKU1ZhbHVlUmVmIHZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5k
ZXgoY29udGV4dCwgb3B0aW9uc0FycmF5LCBpLCAwKTsKLSAgICAgICAgaWYgKCFKU1ZhbHVlSXNT
dHJpbmcoY29udGV4dCwgdmFsdWUpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG9wdGlvbk5hbWUoQWRvcHQsIEpTVmFsdWVUb1N0cmlu
Z0NvcHkoY29udGV4dCwgdmFsdWUsIDApKTsKLQotICAgICAgICBpZiAoSlNTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhvcHRpb25OYW1lLmdldCgpLCAiQ2FzZUluc2Vuc2l0aXZlIikpCi0gICAg
ICAgICAgICBvcHRpb25zIHw9IFdlYkZpbmRPcHRpb25zQ2FzZUluc2Vuc2l0aXZlOwotICAgICAg
ICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG9wdGlvbk5hbWUuZ2V0KCks
ICJBdFdvcmRTdGFydHMiKSkKLSAgICAgICAgICAgIG9wdGlvbnMgfD0gV2ViRmluZE9wdGlvbnNB
dFdvcmRTdGFydHM7Ci0gICAgICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcob3B0aW9uTmFtZS5nZXQoKSwgIlRyZWF0TWVkaWFsQ2FwaXRhbEFzV29yZFN0YXJ0IikpCi0g
ICAgICAgICAgICBvcHRpb25zIHw9IFdlYkZpbmRPcHRpb25zVHJlYXRNZWRpYWxDYXBpdGFsQXNX
b3JkU3RhcnQ7Ci0gICAgICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
b3B0aW9uTmFtZS5nZXQoKSwgIkJhY2t3YXJkcyIpKQotICAgICAgICAgICAgb3B0aW9ucyB8PSBX
ZWJGaW5kT3B0aW9uc0JhY2t3YXJkczsKLSAgICAgICAgZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhvcHRpb25OYW1lLmdldCgpLCAiV3JhcEFyb3VuZCIpKQotICAgICAgICAg
ICAgb3B0aW9ucyB8PSBXZWJGaW5kT3B0aW9uc1dyYXBBcm91bmQ7Ci0gICAgICAgIGVsc2UgaWYg
KEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9uTmFtZS5nZXQoKSwgIlN0YXJ0SW5T
ZWxlY3Rpb24iKSkKLSAgICAgICAgICAgIG9wdGlvbnMgfD0gV2ViRmluZE9wdGlvbnNTdGFydElu
U2VsZWN0aW9uOwotICAgIH0KLQotICAgIHJldHVybiBbW21haW5GcmFtZSB3ZWJWaWV3XSBmaW5k
U3RyaW5nOihOU1N0cmluZyAqKXRhcmdldENGU3RyaW5nLmdldCgpIG9wdGlvbnM6b3B0aW9uc107
Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldENhY2hlTW9kZWwoaW50IGNhY2hl
TW9kZWwpCi17Ci0gICAgW1tXZWJQcmVmZXJlbmNlcyBzdGFuZGFyZFByZWZlcmVuY2VzXSBzZXRD
YWNoZU1vZGVsOmNhY2hlTW9kZWxdOwotfQotCi1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjpp
c0NvbW1hbmRFbmFibGVkKEpTU3RyaW5nUmVmIG5hbWUpCi17Ci0gICAgUmV0YWluUHRyPENGU3Ry
aW5nUmVmPiBuYW1lQ0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgbmFtZSkpOwotICAgIE5TU3RyaW5nICpuYW1lTlMgPSAoTlNTdHJpbmcgKiluYW1l
Q0YuZ2V0KCk7Ci0KLSAgICAvLyBBY2NlcHQgY29tbWFuZCBzdHJpbmdzIHdpdGggY2FwaXRhbCBs
ZXR0ZXJzIGZvciBmaXJzdCBsZXR0ZXIgd2l0aG91dCB0cmFpbGluZyBjb2xvbi4KLSAgICBpZiAo
IVtuYW1lTlMgaGFzU3VmZml4OkAiOiJdICYmIFtuYW1lTlMgbGVuZ3RoXSkgewotICAgICAgICBu
YW1lTlMgPSBbW1tbbmFtZU5TIHN1YnN0cmluZ1RvSW5kZXg6MV0gbG93ZXJjYXNlU3RyaW5nXQot
ICAgICAgICAgICAgc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6W25hbWVOUyBzdWJzdHJpbmdGcm9t
SW5kZXg6MV1dCi0gICAgICAgICAgICBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIjoiXTsKLSAg
ICB9Ci0KLSAgICBTRUwgc2VsZWN0b3IgPSBOU1NlbGVjdG9yRnJvbVN0cmluZyhuYW1lTlMpOwot
ICAgIFJldGFpblB0cjxDb21tYW5kVmFsaWRhdGlvblRhcmdldD4gdGFyZ2V0KEFkb3B0TlMsIFtb
Q29tbWFuZFZhbGlkYXRpb25UYXJnZXQgYWxsb2NdIGluaXRXaXRoQWN0aW9uOnNlbGVjdG9yXSk7
Ci0gICAgaWQgdmFsaWRhdG9yID0gW05TQXBwIHRhcmdldEZvckFjdGlvbjpzZWxlY3RvciB0bzpb
bWFpbkZyYW1lIHdlYlZpZXddIGZyb206dGFyZ2V0LmdldCgpXTsKLSAgICBpZiAoIXZhbGlkYXRv
cikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghW3ZhbGlkYXRvciByZXNwb25kc1Rv
U2VsZWN0b3I6c2VsZWN0b3JdKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFbdmFs
aWRhdG9yIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IodmFsaWRhdGVVc2VySW50ZXJmYWNl
SXRlbTopXSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIFt2YWxpZGF0b3IgdmFs
aWRhdGVVc2VySW50ZXJmYWNlSXRlbTp0YXJnZXQuZ2V0KCldOwotfQotCi1ib29sIExheW91dFRl
c3RDb250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChKU1N0cmlu
Z1JlZiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZSwgSlNTdHJpbmdSZWYgZWxlbWVudElkKQot
ewotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gaWRDRihBZG9wdENGLCBKU1N0cmluZ0NvcHlD
RlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBlbGVtZW50SWQpKTsKLSAgICBOU1N0cmluZyAq
aWROUyA9IChOU1N0cmluZyAqKWlkQ0YuZ2V0KCk7Ci0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVm
PiBuYW1lQ0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgYW5pbWF0aW9uTmFtZSkpOwotICAgIE5TU3RyaW5nICpuYW1lTlMgPSAoTlNTdHJpbmcgKilu
YW1lQ0YuZ2V0KCk7Ci0gICAgCi0gICAgcmV0dXJuIFttYWluRnJhbWUgX3BhdXNlQW5pbWF0aW9u
Om5hbWVOUyBvbk5vZGU6W1ttYWluRnJhbWUgRE9NRG9jdW1lbnRdIGdldEVsZW1lbnRCeUlkOmlk
TlNdIGF0VGltZTp0aW1lXTsKLX0KLQotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF1c2VU
cmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwg
ZG91YmxlIHRpbWUsIEpTU3RyaW5nUmVmIGVsZW1lbnRJZCkKLXsKLSAgICBSZXRhaW5QdHI8Q0ZT
dHJpbmdSZWY+IGlkQ0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgZWxlbWVudElkKSk7Ci0gICAgTlNTdHJpbmcgKmlkTlMgPSAoTlNTdHJpbmcgKilp
ZENGLmdldCgpOwotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbmFtZUNGKEFkb3B0Q0YsIEpT
U3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHByb3BlcnR5TmFtZSkpOwot
ICAgIE5TU3RyaW5nICpuYW1lTlMgPSAoTlNTdHJpbmcgKiluYW1lQ0YuZ2V0KCk7Ci0gICAgCi0g
ICAgcmV0dXJuIFttYWluRnJhbWUgX3BhdXNlVHJhbnNpdGlvbk9mUHJvcGVydHk6bmFtZU5TIG9u
Tm9kZTpbW21haW5GcmFtZSBET01Eb2N1bWVudF0gZ2V0RWxlbWVudEJ5SWQ6aWROU10gYXRUaW1l
OnRpbWVdOwotfQotCi11bnNpZ25lZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZBY3Rp
dmVBbmltYXRpb25zKCkgY29uc3QKLXsKLSAgICByZXR1cm4gW21haW5GcmFtZSBfbnVtYmVyT2ZB
Y3RpdmVBbmltYXRpb25zXTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2FpdEZv
clBvbGljeURlbGVnYXRlKCkKLXsKLSAgICBzZXRXYWl0VG9EdW1wKHRydWUpOwotICAgIFtwb2xp
Y3lEZWxlZ2F0ZSBzZXRDb250cm9sbGVyVG9Ob3RpZnlEb25lOnRoaXNdOwotICAgIFtbbWFpbkZy
YW1lIHdlYlZpZXddIHNldFBvbGljeURlbGVnYXRlOnBvbGljeURlbGVnYXRlXTsKLX0KLQotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoSlNT
dHJpbmdSZWYgc291cmNlT3JpZ2luLCBKU1N0cmluZ1JlZiBkZXN0aW5hdGlvblByb3RvY29sLCBK
U1N0cmluZ1JlZiBkZXN0aW5hdGlvbkhvc3QsIGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFp
bnMpCi17Ci0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBzb3VyY2VPcmlnaW5DRihBZG9wdENG
LCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBzb3VyY2VPcmlnaW4p
KTsKLSAgICBOU1N0cmluZyAqc291cmNlT3JpZ2luTlMgPSAoTlNTdHJpbmcgKilzb3VyY2VPcmln
aW5DRi5nZXQoKTsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHByb3RvY29sQ0YoQWRvcHRD
RiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZGVzdGluYXRpb25Q
cm90b2NvbCkpOwotICAgIE5TU3RyaW5nICpkZXN0aW5hdGlvblByb3RvY29sTlMgPSAoTlNTdHJp
bmcgKilwcm90b2NvbENGLmdldCgpOwotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gaG9zdENG
KEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIGRlc3Rp
bmF0aW9uSG9zdCkpOwotICAgIE5TU3RyaW5nICpkZXN0aW5hdGlvbkhvc3ROUyA9IChOU1N0cmlu
ZyAqKWhvc3RDRi5nZXQoKTsKLSAgICBbV2ViVmlldyBfYWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0
RW50cnlXaXRoU291cmNlT3JpZ2luOnNvdXJjZU9yaWdpbk5TIGRlc3RpbmF0aW9uUHJvdG9jb2w6
ZGVzdGluYXRpb25Qcm90b2NvbE5TIGRlc3RpbmF0aW9uSG9zdDpkZXN0aW5hdGlvbkhvc3ROUyBh
bGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWluczphbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWluc107Ci19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlz
dEVudHJ5KEpTU3RyaW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Q
cm90b2NvbCwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRp
b25TdWJkb21haW5zKQotewotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gc291cmNlT3JpZ2lu
Q0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgc291
cmNlT3JpZ2luKSk7Ci0gICAgTlNTdHJpbmcgKnNvdXJjZU9yaWdpbk5TID0gKE5TU3RyaW5nICop
c291cmNlT3JpZ2luQ0YuZ2V0KCk7Ci0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBwcm90b2Nv
bENGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIGRl
c3RpbmF0aW9uUHJvdG9jb2wpKTsKLSAgICBOU1N0cmluZyAqZGVzdGluYXRpb25Qcm90b2NvbE5T
ID0gKE5TU3RyaW5nICopcHJvdG9jb2xDRi5nZXQoKTsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdS
ZWY+IGhvc3RDRihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCBkZXN0aW5hdGlvbkhvc3QpKTsKLSAgICBOU1N0cmluZyAqZGVzdGluYXRpb25Ib3N0TlMg
PSAoTlNTdHJpbmcgKilob3N0Q0YuZ2V0KCk7Ci0gICAgW1dlYlZpZXcgX3JlbW92ZU9yaWdpbkFj
Y2Vzc1doaXRlbGlzdEVudHJ5V2l0aFNvdXJjZU9yaWdpbjpzb3VyY2VPcmlnaW5OUyBkZXN0aW5h
dGlvblByb3RvY29sOmRlc3RpbmF0aW9uUHJvdG9jb2xOUyBkZXN0aW5hdGlvbkhvc3Q6ZGVzdGlu
YXRpb25Ib3N0TlMgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnM6YWxsb3dEZXN0aW5hdGlvblN1
YmRvbWFpbnNdOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTY3JvbGxiYXJQ
b2xpY3koSlNTdHJpbmdSZWYgb3JpZW50YXRpb24sIEpTU3RyaW5nUmVmIHBvbGljeSkKLXsKLSAg
ICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFk
ZFVzZXJTY3JpcHQoSlNTdHJpbmdSZWYgc291cmNlLCBib29sIHJ1bkF0U3RhcnQsIGJvb2wgYWxs
RnJhbWVzKQotewotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gc291cmNlQ0YoQWRvcHRDRiwg
SlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgc291cmNlKSk7Ci0gICAg
TlNTdHJpbmcgKnNvdXJjZU5TID0gKE5TU3RyaW5nICopc291cmNlQ0YuZ2V0KCk7Ci0gICAgW1dl
YlZpZXcgX2FkZFVzZXJTY3JpcHRUb0dyb3VwOkAib3JnLndlYmtpdC5EdW1wUmVuZGVyVHJlZSIg
d29ybGQ6W1dlYlNjcmlwdFdvcmxkIHdvcmxkXSBzb3VyY2U6c291cmNlTlMgdXJsOm5pbCB3aGl0
ZWxpc3Q6bmlsIGJsYWNrbGlzdDpuaWwgaW5qZWN0aW9uVGltZToocnVuQXRTdGFydCA/IFdlYklu
amVjdEF0RG9jdW1lbnRTdGFydCA6IFdlYkluamVjdEF0RG9jdW1lbnRFbmQpIGluamVjdGVkRnJh
bWVzOihhbGxGcmFtZXMgPyBXZWJJbmplY3RJbkFsbEZyYW1lcyA6IFdlYkluamVjdEluVG9wRnJh
bWVPbmx5KV07Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJTdHlsZVNo
ZWV0KEpTU3RyaW5nUmVmIHNvdXJjZSwgYm9vbCBhbGxGcmFtZXMpCi17Ci0gICAgUmV0YWluUHRy
PENGU3RyaW5nUmVmPiBzb3VyY2VDRihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBzb3VyY2UpKTsKLSAgICBOU1N0cmluZyAqc291cmNlTlMgPSAoTlNT
dHJpbmcgKilzb3VyY2VDRi5nZXQoKTsKLSAgICBbV2ViVmlldyBfYWRkVXNlclN0eWxlU2hlZXRU
b0dyb3VwOkAib3JnLndlYmtpdC5EdW1wUmVuZGVyVHJlZSIgd29ybGQ6W1dlYlNjcmlwdFdvcmxk
IHdvcmxkXSBzb3VyY2U6c291cmNlTlMgdXJsOm5pbCB3aGl0ZWxpc3Q6bmlsIGJsYWNrbGlzdDpu
aWwgaW5qZWN0ZWRGcmFtZXM6KGFsbEZyYW1lcyA/IFdlYkluamVjdEluQWxsRnJhbWVzIDogV2Vi
SW5qZWN0SW5Ub3BGcmFtZU9ubHkpXTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgW1tbbWFpbkZy
YW1lIHdlYlZpZXddIHByZWZlcmVuY2VzXSBzZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkOmVuYWJs
ZWRdOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBc3luY2hyb25vdXNTcGVs
bENoZWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgW1tbbWFpbkZyYW1lIHdlYlZp
ZXddIHByZWZlcmVuY2VzXSBzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZDplbmFi
bGVkXTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2hvd1dlYkluc3BlY3Rvcigp
Ci17Ci0gICAgW1tbbWFpbkZyYW1lIHdlYlZpZXddIGluc3BlY3Rvcl0gc2hvdzpuaWxdOwotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbG9zZVdlYkluc3BlY3RvcigpCi17Ci0gICAg
W1tbbWFpbkZyYW1lIHdlYlZpZXddIGluc3BlY3Rvcl0gY2xvc2U6bmlsXTsKLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcihsb25nIGNhbGxJZCwg
SlNTdHJpbmdSZWYgc2NyaXB0KQotewotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gc2NyaXB0
Q0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgc2Ny
aXB0KSk7Ci0gICAgTlNTdHJpbmcgKnNjcmlwdE5TID0gKE5TU3RyaW5nICopc2NyaXB0Q0YuZ2V0
KCk7Ci0gICAgW1tbbWFpbkZyYW1lIHdlYlZpZXddIGluc3BlY3Rvcl0gZXZhbHVhdGVJbkZyb250
ZW5kOm5pbCBjYWxsSWQ6Y2FsbElkIHNjcmlwdDpzY3JpcHROU107Ci19Ci0KLXR5cGVkZWYgSGFz
aE1hcDx1bnNpZ25lZCwgUmV0YWluUHRyPFdlYlNjcmlwdFdvcmxkPiA+IFdvcmxkTWFwOwotc3Rh
dGljIFdvcmxkTWFwJiB3b3JsZE1hcCgpCi17Ci0gICAgc3RhdGljIFdvcmxkTWFwJiBtYXAgPSAq
bmV3IFdvcmxkTWFwOwotICAgIHJldHVybiBtYXA7Ci19Ci0KLXVuc2lnbmVkIHdvcmxkSURGb3JX
b3JsZChXZWJTY3JpcHRXb3JsZCAqd29ybGQpCi17Ci0gICAgV29ybGRNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IHdvcmxkTWFwKCkuZW5kKCk7Ci0gICAgZm9yIChXb3JsZE1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSB3b3JsZE1hcCgpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICBpZiAoaXQtPnNlY29uZCA9PSB3b3JsZCkKLSAgICAgICAgICAgIHJldHVybiBpdC0+Zmlyc3Q7
Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUodW5zaWduZWQgd29y
bGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCi17Ci0g
ICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBKU09i
amVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkKLXsKLSAgICBSZXRhaW5Q
dHI8Q0ZTdHJpbmdSZWY+IHNjcmlwdENGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtD
RkFsbG9jYXRvckRlZmF1bHQsIHNjcmlwdCkpOwotICAgIE5TU3RyaW5nICpzY3JpcHROUyA9IChO
U1N0cmluZyAqKXNjcmlwdENGLmdldCgpOwotCi0gICAgLy8gQSB3b3JsZElEIG9mIDAgYWx3YXlz
IGNvcnJlc3BvbmRzIHRvIGEgbmV3IHdvcmxkLiBBbnkgb3RoZXIgd29ybGRJRCBjb3JyZXNwb25k
cyB0byBhIHdvcmxkCi0gICAgLy8gdGhhdCBpcyBjcmVhdGVkIG9uY2UgYW5kIGNhY2hlZCBmb3Jl
dmVyLgotICAgIFdlYlNjcmlwdFdvcmxkICp3b3JsZDsKLSAgICBpZiAoIXdvcmxkSUQpCi0gICAg
ICAgIHdvcmxkID0gW1dlYlNjcmlwdFdvcmxkIHdvcmxkXTsKLSAgICBlbHNlIHsKLSAgICAgICAg
UmV0YWluUHRyPFdlYlNjcmlwdFdvcmxkPiYgd29ybGRTbG90ID0gd29ybGRNYXAoKS5hZGQod29y
bGRJRCwgMCkuaXRlcmF0b3ItPnNlY29uZDsKLSAgICAgICAgaWYgKCF3b3JsZFNsb3QpCi0gICAg
ICAgICAgICB3b3JsZFNsb3QuYWRvcHROUyhbW1dlYlNjcmlwdFdvcmxkIGFsbG9jXSBpbml0XSk7
Ci0gICAgICAgIHdvcmxkID0gd29ybGRTbG90LmdldCgpOwotICAgIH0KLQotICAgIFttYWluRnJh
bWUgX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOnNjcmlwdE5TIHdpdGhH
bG9iYWxPYmplY3Q6Z2xvYmFsT2JqZWN0IGluU2NyaXB0V29ybGQ6d29ybGRdOwotfQotCi1AaW50
ZXJmYWNlIEFQSVRlc3REZWxlZ2F0ZSA6IE5TT2JqZWN0Ci17Ci0gICAgYm9vbCogbV9jb25kaXRp
b247Ci19Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBBUElUZXN0RGVsZWdhdGUKLQotLSAoaWQp
aW5pdFdpdGhDb21wbGV0aW9uQ29uZGl0aW9uOihib29sKiljb25kaXRpb24KLXsKLSAgICBbc3Vw
ZXIgaW5pdF07Ci0gICAgQVNTRVJUKGNvbmRpdGlvbik7Ci0gICAgbV9jb25kaXRpb24gPSBjb25k
aXRpb247Ci0gICAgKm1fY29uZGl0aW9uID0gZmFsc2U7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0K
LS0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXNlbmRlciBkaWRGYWlsTG9hZFdpdGhFcnJvcjoo
TlNFcnJvciAqKWVycm9yIGZvckZyYW1lOihXZWJGcmFtZSAqKWZyYW1lCi17Ci0gICAgcHJpbnRm
KCJBUEkgVGVzdCBsb2FkIGZhaWxlZFxuIik7Ci0gICAgKm1fY29uZGl0aW9uID0gdHJ1ZTsKLX0K
LQotLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIGRpZEZhaWxQcm92aXNpb25hbExv
YWRXaXRoRXJyb3I6KE5TRXJyb3IgKillcnJvciBmb3JGcmFtZTooV2ViRnJhbWUgKilmcmFtZQot
ewotICAgIHByaW50ZigiQVBJIFRlc3QgbG9hZCBmYWlsZWQgcHJvdmlzaW9uYWxcbiIpOwotICAg
ICptX2NvbmRpdGlvbiA9IHRydWU7Ci19Ci0KLS0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXNl
bmRlciBkaWRGaW5pc2hMb2FkRm9yRnJhbWU6KFdlYkZyYW1lICopZnJhbWUKLXsKLSAgICBwcmlu
dGYoIkFQSSBUZXN0IGxvYWQgc3VjY2VlZGVkXG4iKTsKLSAgICAqbV9jb25kaXRpb24gPSB0cnVl
OwotfQotCi1AZW5kCi0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFwaVRlc3ROZXdXaW5k
b3dEYXRhTG9hZEJhc2VVUkwoSlNTdHJpbmdSZWYgdXRmOERhdGEsIEpTU3RyaW5nUmVmIGJhc2VV
UkwpCi17Ci0gICAgTlNBdXRvcmVsZWFzZVBvb2wgKnBvb2wgPSBbW05TQXV0b3JlbGVhc2VQb29s
IGFsbG9jXSBpbml0XTsKLQotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdXRmOERhdGFDRihB
ZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB1dGY4RGF0
YSkpOwotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gYmFzZVVSTENGKEFkb3B0Q0YsIEpTU3Ry
aW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIGJhc2VVUkwpKTsKLSAgICAKLSAg
ICBXZWJWaWV3ICp3ZWJWaWV3ID0gW1tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TWmVy
b1JlY3QgZnJhbWVOYW1lOkAiIiBncm91cE5hbWU6QCIiXTsKLQotICAgIGJvb2wgZG9uZSA9IGZh
bHNlOwotICAgIEFQSVRlc3REZWxlZ2F0ZSAqZGVsZWdhdGUgPSBbW0FQSVRlc3REZWxlZ2F0ZSBh
bGxvY10gaW5pdFdpdGhDb21wbGV0aW9uQ29uZGl0aW9uOiZkb25lXTsKLSAgICBbd2ViVmlldyBz
ZXRGcmFtZUxvYWREZWxlZ2F0ZTpkZWxlZ2F0ZV07Ci0KLSAgICBbW3dlYlZpZXcgbWFpbkZyYW1l
XSBsb2FkRGF0YTpbKE5TU3RyaW5nICopdXRmOERhdGFDRi5nZXQoKSBkYXRhVXNpbmdFbmNvZGlu
ZzpOU1VURjhTdHJpbmdFbmNvZGluZ10gTUlNRVR5cGU6QCJ0ZXh0L2h0bWwiIHRleHRFbmNvZGlu
Z05hbWU6QCJ1dGYtOCIgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzooTlNTdHJpbmcgKili
YXNlVVJMQ0YuZ2V0KCldXTsKLSAgICAKLSAgICB3aGlsZSAoIWRvbmUpIHsKLSAgICAgICAgTlNB
dXRvcmVsZWFzZVBvb2wgKnBvb2wgPSBbW05TQXV0b3JlbGVhc2VQb29sIGFsbG9jXSBpbml0XTsK
LSAgICAgICAgW1tOU1J1bkxvb3AgY3VycmVudFJ1bkxvb3BdIHJ1bk1vZGU6TlNEZWZhdWx0UnVu
TG9vcE1vZGUgYmVmb3JlRGF0ZTpbTlNEYXRlIGRpc3RhbnRQYXN0XV07Ci0gICAgICAgIFtwb29s
IHJlbGVhc2VdOwotICAgIH0KLSAgICAgICAgCi0gICAgW3dlYlZpZXcgY2xvc2VdOwotICAgIFt3
ZWJWaWV3IHJlbGVhc2VdOwotICAgIFtkZWxlZ2F0ZSByZWxlYXNlXTsKLSAgICBbcG9vbCByZWxl
YXNlXTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YXBpVGVzdEdvVG9DdXJyZW50
QmFja0ZvcndhcmRJdGVtKCkKLXsKLSAgICBXZWJWaWV3ICp2aWV3ID0gW21haW5GcmFtZSB3ZWJW
aWV3XTsKLSAgICBbdmlldyBnb1RvQmFja0ZvcndhcmRJdGVtOltbdmlldyBiYWNrRm9yd2FyZExp
c3RdIGN1cnJlbnRJdGVtXV07Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdl
YlZpZXdFZGl0YWJsZShib29sIGVkaXRhYmxlKQotewotICAgIFdlYlZpZXcgKnZpZXcgPSBbbWFp
bkZyYW1lIHdlYlZpZXddOwotICAgIFt2aWV3IHNldEVkaXRhYmxlOmVkaXRhYmxlXTsKLX0KLQot
c3RhdGljIE5TU3RyaW5nICpTeW5jaHJvbm91c0xvYWRlclJ1bkxvb3BNb2RlID0gQCJEdW1wUmVu
ZGVyVHJlZVN5bmNocm9ub3VzTG9hZGVyUnVuTG9vcE1vZGUiOwotCi0jaWYgX19NQUNfT1NfWF9W
RVJTSU9OX01JTl9SRVFVSVJFRCA8PSAxMDYwCi1AcHJvdG9jb2wgTlNVUkxDb25uZWN0aW9uRGVs
ZWdhdGUgPE5TT2JqZWN0PgotQGVuZAotI2VuZGlmCi0KLUBpbnRlcmZhY2UgU3luY2hyb25vdXNM
b2FkZXIgOiBOU09iamVjdCA8TlNVUkxDb25uZWN0aW9uRGVsZWdhdGU+Ci17Ci0gICAgTlNTdHJp
bmcgKm1fdXNlcm5hbWU7Ci0gICAgTlNTdHJpbmcgKm1fcGFzc3dvcmQ7Ci0gICAgQk9PTCBtX2lz
RG9uZTsKLX0KLSsgKHZvaWQpbWFrZVJlcXVlc3Q6KE5TVVJMUmVxdWVzdCAqKXJlcXVlc3Qgd2l0
aFVzZXJuYW1lOihOU1N0cmluZyAqKXVzZXJuYW1lIHBhc3N3b3JkOihOU1N0cmluZyAqKXBhc3N3
b3JkOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gU3luY2hyb25vdXNMb2FkZXIgOiBOU09iamVj
dAotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW21fdXNlcm5hbWUgcmVsZWFzZV07Ci0gICAgW21f
cGFzc3dvcmQgcmVsZWFzZV07Ci0KLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKEJPT0wp
Y29ubmVjdGlvblNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlOihOU1VSTENvbm5lY3Rpb24gKilj
b25uZWN0aW9uCi17Ci0gICAgcmV0dXJuIFlFUzsKLX0KLQotLSAodm9pZCljb25uZWN0aW9uOihO
U1VSTENvbm5lY3Rpb24gKiljb25uZWN0aW9uIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZTooTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAqKWNoYWxsZW5nZQotewotICAgIGlm
IChbY2hhbGxlbmdlIHByZXZpb3VzRmFpbHVyZUNvdW50XSA9PSAwKSB7Ci0gICAgICAgIFJldGFp
blB0cjxOU1VSTENyZWRlbnRpYWw+IGNyZWRlbnRpYWwoQWRvcHROUywgW1tOU1VSTENyZWRlbnRp
YWwgYWxsb2NdICBpbml0V2l0aFVzZXI6bV91c2VybmFtZSBwYXNzd29yZDptX3Bhc3N3b3JkIHBl
cnNpc3RlbmNlOk5TVVJMQ3JlZGVudGlhbFBlcnNpc3RlbmNlRm9yU2Vzc2lvbl0pOwotICAgICAg
ICBbW2NoYWxsZW5nZSBzZW5kZXJdIHVzZUNyZWRlbnRpYWw6Y3JlZGVudGlhbC5nZXQoKSBmb3JB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZTpjaGFsbGVuZ2VdOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIFtbY2hhbGxlbmdlIHNlbmRlcl0gY2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6
Y2hhbGxlbmdlXTsKLX0KLQotLSAodm9pZCljb25uZWN0aW9uOihOU1VSTENvbm5lY3Rpb24gKilj
b25uZWN0aW9uIGRpZEZhaWxXaXRoRXJyb3I6KE5TRXJyb3IgKillcnJvcgotewotICAgIHByaW50
ZigiU3luY2hyb25vdXNMb2FkZXIgZmFpbGVkOiAlc1xuIiwgW1tlcnJvciBkZXNjcmlwdGlvbl0g
VVRGOFN0cmluZ10pOwotICAgIG1faXNEb25lID0gWUVTOwotfQotCi0tICh2b2lkKWNvbm5lY3Rp
b25EaWRGaW5pc2hMb2FkaW5nOihOU1VSTENvbm5lY3Rpb24gKiljb25uZWN0aW9uCi17Ci0gICAg
bV9pc0RvbmUgPSBZRVM7Ci19Ci0KLSsgKHZvaWQpbWFrZVJlcXVlc3Q6KE5TVVJMUmVxdWVzdCAq
KXJlcXVlc3Qgd2l0aFVzZXJuYW1lOihOU1N0cmluZyAqKXVzZXJuYW1lIHBhc3N3b3JkOihOU1N0
cmluZyAqKXBhc3N3b3JkCi17Ci0gICAgQVNTRVJUKCFbW3JlcXVlc3QgVVJMXSB1c2VyXSk7Ci0g
ICAgQVNTRVJUKCFbW3JlcXVlc3QgVVJMXSBwYXNzd29yZF0pOwotCi0gICAgU3luY2hyb25vdXNM
b2FkZXIgKmRlbGVnYXRlID0gW1tTeW5jaHJvbm91c0xvYWRlciBhbGxvY10gaW5pdF07Ci0gICAg
ZGVsZWdhdGUtPm1fdXNlcm5hbWUgPSBbdXNlcm5hbWUgY29weV07Ci0gICAgZGVsZWdhdGUtPm1f
cGFzc3dvcmQgPSBbcGFzc3dvcmQgY29weV07Ci0KLSAgICBOU1VSTENvbm5lY3Rpb24gKmNvbm5l
Y3Rpb24gPSBbW05TVVJMQ29ubmVjdGlvbiBhbGxvY10gaW5pdFdpdGhSZXF1ZXN0OnJlcXVlc3Qg
ZGVsZWdhdGU6ZGVsZWdhdGUgc3RhcnRJbW1lZGlhdGVseTpOT107Ci0gICAgW2Nvbm5lY3Rpb24g
c2NoZWR1bGVJblJ1bkxvb3A6W05TUnVuTG9vcCBjdXJyZW50UnVuTG9vcF0gZm9yTW9kZTpTeW5j
aHJvbm91c0xvYWRlclJ1bkxvb3BNb2RlXTsKLSAgICBbY29ubmVjdGlvbiBzdGFydF07Ci0gICAg
Ci0gICAgd2hpbGUgKCFkZWxlZ2F0ZS0+bV9pc0RvbmUpCi0gICAgICAgIFtbTlNSdW5Mb29wIGN1
cnJlbnRSdW5Mb29wXSBydW5Nb2RlOlN5bmNocm9ub3VzTG9hZGVyUnVuTG9vcE1vZGUgYmVmb3Jl
RGF0ZTpbTlNEYXRlIGRpc3RhbnRGdXR1cmVdXTsKLQotICAgIFtjb25uZWN0aW9uIGNhbmNlbF07
Ci0gICAgCi0gICAgW2Nvbm5lY3Rpb24gcmVsZWFzZV07Ci0gICAgW2RlbGVnYXRlIHJlbGVhc2Vd
OwotfQotCi1AZW5kCi0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmF1dGhlbnRpY2F0ZVNl
c3Npb24oSlNTdHJpbmdSZWYgdXJsLCBKU1N0cmluZ1JlZiB1c2VybmFtZSwgSlNTdHJpbmdSZWYg
cGFzc3dvcmQpCi17Ci0gICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS83ODgwNjk5Pi4KLSNpZiBf
X01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwNjAKLSAgICBSZXRhaW5QdHI8Q0ZT
dHJpbmdSZWY+IHVybFN0cmluZ0NGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFs
bG9jYXRvckRlZmF1bHQsIHVybCkpOwotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdXNlcm5h
bWVDRihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB1
c2VybmFtZSkpOwotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gcGFzc3dvcmRDRihBZG9wdENG
LCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBwYXNzd29yZCkpOwot
Ci0gICAgUmV0YWluUHRyPE5TVVJMUmVxdWVzdD4gcmVxdWVzdChBZG9wdE5TLCBbW05TVVJMUmVx
dWVzdCBhbGxvY10gaW5pdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6KE5TU3RyaW5nICop
dXJsU3RyaW5nQ0YuZ2V0KCldXSk7Ci0KLSAgICBbU3luY2hyb25vdXNMb2FkZXIgbWFrZVJlcXVl
c3Q6cmVxdWVzdC5nZXQoKSB3aXRoVXNlcm5hbWU6KE5TU3RyaW5nICopdXNlcm5hbWVDRi5nZXQo
KSBwYXNzd29yZDooTlNTdHJpbmcgKilwYXNzd29yZENGLmdldCgpXTsKLSNlbmRpZgotfQotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphYm9ydE1vZGFsKCkKLXsKLSAgICBbTlNBcHAgYWJv
cnRNb2RhbF07Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNlcmlhbGl6ZUhU
VFBMb2Fkcyhib29sIHNlcmlhbGl6ZSkKLXsKLSAgICBbV2ViVmlldyBfc2V0TG9hZFJlc291cmNl
c1NlcmlhbGx5OnNlcmlhbGl6ZV07Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dE1pbmltdW1UaW1lckludGVydmFsKGRvdWJsZSBtaW5pbXVtVGltZXJJbnRlcnZhbCkKLXsKLSAg
ICBbW21haW5GcmFtZSB3ZWJWaWV3XSBfc2V0TWluaW11bVRpbWVySW50ZXJ2YWw6bWluaW11bVRp
bWVySW50ZXJ2YWxdOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRUZXh0RGly
ZWN0aW9uKEpTU3RyaW5nUmVmIGRpcmVjdGlvbk5hbWUpCi17Ci0jaWYgX19NQUNfT1NfWF9WRVJT
SU9OX01JTl9SRVFVSVJFRCA+PSAxMDYwCi0gICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcoZGlyZWN0aW9uTmFtZSwgImx0ciIpKQotICAgICAgICBbW21haW5GcmFtZSB3ZWJWaWV3
XSBtYWtlQmFzZVdyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodDowXTsKLSAgICBlbHNlIGlmIChK
U1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGRpcmVjdGlvbk5hbWUsICJydGwiKSkKLSAgICAg
ICAgW1ttYWluRnJhbWUgd2ViVmlld10gbWFrZUJhc2VXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xl
ZnQ6MF07Ci0gICAgZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgot
fQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRDaHJvbWVJbnB1dEZpZWxkKCkKLXsK
LSAgICBOU1RleHRGaWVsZCAqdGV4dEZpZWxkID0gW1tOU1RleHRGaWVsZCBhbGxvY10gaW5pdFdp
dGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDEwMCwgMjApXTsKLSAgICB0ZXh0RmllbGQudGFnID0g
MTsKLSAgICBbW1tbbWFpbkZyYW1lIHdlYlZpZXddIHdpbmRvd10gY29udGVudFZpZXddIGFkZFN1
YnZpZXc6dGV4dEZpZWxkXTsKLSAgICBbdGV4dEZpZWxkIHJlbGVhc2VdOwotICAgIAotICAgIFt0
ZXh0RmllbGQgc2V0TmV4dEtleVZpZXc6W21haW5GcmFtZSB3ZWJWaWV3XV07Ci0gICAgW1ttYWlu
RnJhbWUgd2ViVmlld10gc2V0TmV4dEtleVZpZXc6dGV4dEZpZWxkXTsKLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCgpCi17Ci0gICAgTlNWaWV3
KiB0ZXh0RmllbGQgPSBbW1tbbWFpbkZyYW1lIHdlYlZpZXddIHdpbmRvd10gY29udGVudFZpZXdd
IHZpZXdXaXRoVGFnOjFdOwotICAgIGlmICh0ZXh0RmllbGQpIHsKLSAgICAgICAgW3RleHRGaWVs
ZCByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKLSAgICAgICAgZm9jdXNXZWJWaWV3KCk7Ci0gICAgfQot
fQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpmb2N1c1dlYlZpZXcoKQotewotICAgIFtb
W21haW5GcmFtZSB3ZWJWaWV3XSB3aW5kb3ddIG1ha2VGaXJzdFJlc3BvbmRlcjpbbWFpbkZyYW1l
IHdlYlZpZXddXTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QmFja2luZ1Nj
YWxlRmFjdG9yKGRvdWJsZSBiYWNraW5nU2NhbGVGYWN0b3IpCi17Ci0gICAgW1ttYWluRnJhbWUg
d2ViVmlld10gX3NldEN1c3RvbUJhY2tpbmdTY2FsZUZhY3RvcjpiYWNraW5nU2NhbGVGYWN0b3Jd
OwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzaW11bGF0ZURlc2t0b3BOb3RpZmlj
YXRpb25DbGljayhKU1N0cmluZ1JlZiB0aXRsZSkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50
LgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZXNldFBhZ2VWaXNpYmlsaXR5KCkK
LXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50LgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRQYWdlVmlzaWJpbGl0eShjb25zdCBjaGFyKikKLXsKLSAgICAvLyBGSVhNRTogSW1w
bGVtZW50LgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZW5kV2ViSW50ZW50UmVz
cG9uc2UoSlNTdHJpbmdSZWYpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudC4KLX0KLQotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsaXZlcldlYkludGVudChKU1N0cmluZ1JlZiwgSlNT
dHJpbmdSZWYsIEpTU3RyaW5nUmVmKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCi19Cklu
ZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvUGl4ZWxEdW1wU3VwcG9ydE1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvUGl4ZWxEdW1wU3VwcG9ydE1hYy5t
bQkocmV2aXNpb24gMTI1MzM1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1BpeGVsRHVt
cFN1cHBvcnRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRl
ICJQaXhlbER1bXBTdXBwb3J0Q0cuaCIKIAogI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiIAot
I2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiVGVzdFJ1bm5lci5o
IgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0JpdG1hcENvbnRleHQuaD4KICNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KSW5kZXg6IFRvb2xzL0R1
bXBSZW5kZXJUcmVlL21hYy9Qb2xpY3lEZWxlZ2F0ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9E
dW1wUmVuZGVyVHJlZS9tYWMvUG9saWN5RGVsZWdhdGUubW0JKHJldmlzaW9uIDEyNTMzNSkKKysr
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9Qb2xpY3lEZWxlZ2F0ZS5tbQkod29ya2luZyBjb3B5
KQpAQCAtMzAsNyArMzAsNyBAQAogI2ltcG9ydCAiUG9saWN5RGVsZWdhdGUuaCIKIAogI2ltcG9y
dCAiRHVtcFJlbmRlclRyZWUuaCIKLSNpbXBvcnQgIkxheW91dFRlc3RDb250cm9sbGVyLmgiCisj
aW1wb3J0ICJUZXN0UnVubmVyLmgiCiAjaW1wb3J0IDxXZWJLaXQvRE9NRWxlbWVudC5oPgogI2lt
cG9ydCA8V2ViS2l0L1dlYkZyYW1lLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViUG9saWN5RGVsZWdh
dGUuaD4KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9SZXNvdXJjZUxvYWREZWxlZ2F0
ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvUmVzb3VyY2VMb2Fk
RGVsZWdhdGUubW0JKHJldmlzaW9uIDEyNTMzNSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21h
Yy9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBA
QAogI2ltcG9ydCAiUmVzb3VyY2VMb2FkRGVsZWdhdGUuaCIKIAogI2ltcG9ydCAiRHVtcFJlbmRl
clRyZWUuaCIKLSNpbXBvcnQgIkxheW91dFRlc3RDb250cm9sbGVyLmgiCisjaW1wb3J0ICJUZXN0
UnVubmVyLmgiCiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV2Vi
VHlwZXNJbnRlcm5hbC5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYkRhdGFTb3VyY2VQcml2YXRlLmg+
CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQkocmV2aXNp
b24gMTI1MzM1KQkoZnJvbSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRy
b2xsZXJNYWMubW06MTI1MzM1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5u
ZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTg5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
CisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkR1bXBSZW5kZXJUcmVlLmgiCisjaW1wb3J0
ICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgorCisjaW1wb3J0ICJFZGl0aW5nRGVsZWdhdGUuaCIK
KyNpbXBvcnQgIk1vY2tHZW9sb2NhdGlvblByb3ZpZGVyLmgiCisjaW1wb3J0ICJQb2xpY3lEZWxl
Z2F0ZS5oIgorI2ltcG9ydCAiU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5oIgorI2ltcG9ydCAiVUlE
ZWxlZ2F0ZS5oIgorI2ltcG9ydCAiV29ya1F1ZXVlLmgiCisjaW1wb3J0ICJXb3JrUXVldWVJdGVt
LmgiCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKyNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0pTUmV0YWluUHRyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1Jl
Zi5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZDRi5oPgorI2ltcG9ydCA8
V2ViS2l0L0RPTURvY3VtZW50Lmg+CisjaW1wb3J0IDxXZWJLaXQvRE9NRWxlbWVudC5oPgorI2lt
cG9ydCA8V2ViS2l0L1dlYkFwcGxpY2F0aW9uQ2FjaGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJC
YWNrRm9yd2FyZExpc3QuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJDb3JlU3RhdGlzdGljcy5oPgor
I2ltcG9ydCA8V2ViS2l0L1dlYkRPTU9wZXJhdGlvbnNQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJL
aXQvV2ViRGF0YVNvdXJjZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dlYkRhdGFiYXNlTWFuYWdlclBy
aXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJEZXZpY2VPcmllbnRhdGlvbi5oPgorI2ltcG9y
dCA8V2ViS2l0L1dlYkRldmljZU9yaWVudGF0aW9uUHJvdmlkZXJNb2NrLmg+CisjaW1wb3J0IDxX
ZWJLaXQvV2ViRnJhbWUuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJGcmFtZVZpZXdQcml2YXRlLmg+
CisjaW1wb3J0IDxXZWJLaXQvV2ViR2VvbG9jYXRpb25Qb3NpdGlvbi5oPgorI2ltcG9ydCA8V2Vi
S2l0L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5oPgorI2ltcG9ydCA8V2ViS2l0L1dlYkhUTUxWaWV3
UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dlYkhpc3RvcnkuaD4KKyNpbXBvcnQgPFdlYktp
dC9XZWJIaXN0b3J5UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dlYkljb25EYXRhYmFzZVBy
aXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJJbnNwZWN0b3JQcml2YXRlLmg+CisjaW1wb3J0
IDxXZWJLaXQvV2ViTlNVUkxFeHRyYXMuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJLaXRFcnJvcnMu
aD4KKyNpbXBvcnQgPFdlYktpdC9XZWJQcmVmZXJlbmNlcy5oPgorI2ltcG9ydCA8V2ViS2l0L1dl
YlByZWZlcmVuY2VzUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dlYlF1b3RhTWFuYWdlci5o
PgorI2ltcG9ydCA8V2ViS2l0L1dlYlNjcmlwdFdvcmxkLmg+CisjaW1wb3J0IDxXZWJLaXQvV2Vi
U2VjdXJpdHlPcmlnaW5Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV2ViU3RvcmFnZU1hbmFn
ZXJQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV2ViVHlwZXNJbnRlcm5hbC5oPgorI2ltcG9y
dCA8V2ViS2l0L1dlYlZpZXcuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJWaWV3UHJpdmF0ZS5oPgor
I2ltcG9ydCA8V2ViS2l0L1dlYldvcmtlcnNQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQ3VycmVu
dFRpbWUuaD4KKyNpbXBvcnQgPHd0Zi9IYXNoTWFwLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRy
Lmg+CisKK0BpbnRlcmZhY2UgQ29tbWFuZFZhbGlkYXRpb25UYXJnZXQgOiBOU09iamVjdCA8TlNW
YWxpZGF0ZWRVc2VySW50ZXJmYWNlSXRlbT4KK3sKKyAgICBTRUwgX2FjdGlvbjsKK30KKy0gKGlk
KWluaXRXaXRoQWN0aW9uOihTRUwpYWN0aW9uOworQGVuZAorCitAaW1wbGVtZW50YXRpb24gQ29t
bWFuZFZhbGlkYXRpb25UYXJnZXQKKworLSAoaWQpaW5pdFdpdGhBY3Rpb246KFNFTClhY3Rpb24K
K3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0
dXJuIG5pbDsKKworICAgIF9hY3Rpb24gPSBhY3Rpb247CisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKFNFTClhY3Rpb24KK3sKKyAgICByZXR1cm4gX2FjdGlvbjsKK30KKworLSAoTlNJbnRlZ2Vy
KXRhZworeworICAgIHJldHVybiAwOworfQorCitAZW5kCisKK0xheW91dFRlc3RDb250cm9sbGVy
Ojp+TGF5b3V0VGVzdENvbnRyb2xsZXIoKQoreworfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjphZGREaXNhbGxvd2VkVVJMKEpTU3RyaW5nUmVmIHVybCkKK3sKKyAgICBSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+IHVybENGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9j
YXRvckRlZmF1bHQsIHVybCkpOworCisgICAgaWYgKCFkaXNhbGxvd2VkVVJMcykKKyAgICAgICAg
ZGlzYWxsb3dlZFVSTHMgPSBDRlNldENyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
MCwgTlVMTCk7CisKKyAgICAvLyBDYW5vbmljYWxpemUgdGhlIFVSTAorICAgIE5TVVJMUmVxdWVz
dCAqcmVxdWVzdCA9IFtOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhT
dHJpbmc6KE5TU3RyaW5nICopdXJsQ0YuZ2V0KCldXTsKKyAgICByZXF1ZXN0ID0gW05TVVJMUHJv
dG9jb2wgY2Fub25pY2FsUmVxdWVzdEZvclJlcXVlc3Q6cmVxdWVzdF07CisKKyAgICBDRlNldEFk
ZFZhbHVlKGRpc2FsbG93ZWRVUkxzLCBbcmVxdWVzdCBVUkxdKTsKK30KKworYm9vbCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6Y2FsbFNob3VsZENsb3NlT25XZWJWaWV3KCkKK3sKKyAgICByZXR1cm4g
W1ttYWluRnJhbWUgd2ViVmlld10gc2hvdWxkQ2xvc2VdOworfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKCkKK3sKKyAgICBbV2ViQXBwbGlj
YXRpb25DYWNoZSBkZWxldGVBbGxBcHBsaWNhdGlvbkNhY2hlc107Cit9CisKK2xvbmcgbG9uZyBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6YXBwbGljYXRpb25DYWNoZURpc2tVc2FnZUZvck9yaWdpbihK
U1N0cmluZ1JlZiB1cmwpCit7CisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1cmxDRihBZG9w
dENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB1cmwpKTsKKyAg
ICBXZWJTZWN1cml0eU9yaWdpbiAqb3JpZ2luID0gW1tXZWJTZWN1cml0eU9yaWdpbiBhbGxvY10g
aW5pdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6KE5TU3RyaW5nICopdXJsQ0YuZ2V0KCld
XTsKKyAgICBsb25nIGxvbmcgdXNhZ2UgPSBbV2ViQXBwbGljYXRpb25DYWNoZSBkaXNrVXNhZ2VG
b3JPcmlnaW46b3JpZ2luXTsKKyAgICBbb3JpZ2luIHJlbGVhc2VdOworICAgIHJldHVybiB1c2Fn
ZTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3luY0xvY2FsU3RvcmFnZSgpCit7
CisgICAgW1tXZWJTdG9yYWdlTWFuYWdlciBzaGFyZWRXZWJTdG9yYWdlTWFuYWdlcl0gc3luY0xv
Y2FsU3RvcmFnZV07Cit9CisKK2xvbmcgbG9uZyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bG9jYWxT
dG9yYWdlRGlza1VzYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIHVybCkKK3sKKyAgICBSZXRhaW5Q
dHI8Q0ZTdHJpbmdSZWY+IHVybENGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFs
bG9jYXRvckRlZmF1bHQsIHVybCkpOworICAgIFdlYlNlY3VyaXR5T3JpZ2luICpvcmlnaW4gPSBb
W1dlYlNlY3VyaXR5T3JpZ2luIGFsbG9jXSBpbml0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmlu
ZzooTlNTdHJpbmcgKil1cmxDRi5nZXQoKV1dOworICAgIGxvbmcgbG9uZyB1c2FnZSA9IFtbV2Vi
U3RvcmFnZU1hbmFnZXIgc2hhcmVkV2ViU3RvcmFnZU1hbmFnZXJdIGRpc2tVc2FnZUZvck9yaWdp
bjpvcmlnaW5dOworICAgIFtvcmlnaW4gcmVsZWFzZV07CisgICAgcmV0dXJuIHVzYWdlOworfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmlj
YXRpb25zKHVuc2lnbmVkIG51bWJlcikKK3sKKyAgICBbc3RvcmFnZURlbGVnYXRlIGxvZ05vdGlm
aWNhdGlvbnM6bnVtYmVyIGNvbnRyb2xsZXI6dGhpc107Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbihKU1N0cmluZ1JlZiB1cmwp
Cit7CisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1cmxDRihBZG9wdENGLCBKU1N0cmluZ0Nv
cHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB1cmwpKTsKKworICAgIFdlYlNlY3VyaXR5
T3JpZ2luICpvcmlnaW4gPSBbW1dlYlNlY3VyaXR5T3JpZ2luIGFsbG9jXSBpbml0V2l0aFVSTDpb
TlNVUkwgVVJMV2l0aFN0cmluZzooTlNTdHJpbmcgKil1cmxDRi5nZXQoKV1dOworICAgIFtXZWJB
cHBsaWNhdGlvbkNhY2hlIGRlbGV0ZUNhY2hlRm9yT3JpZ2luOm9yaWdpbl07CisgICAgW29yaWdp
biByZWxlYXNlXTsKK30KKworSlNWYWx1ZVJlZiBvcmlnaW5zQXJyYXlUb0pTKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBOU0FycmF5ICpvcmlnaW5zKQoreworICAgIE5TVUludGVnZXIgY291bnQgPSBb
b3JpZ2lucyBjb3VudF07CisKKyAgICBKU1ZhbHVlUmVmIGpzT3JpZ2luc0FycmF5W2NvdW50XTsK
KyAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgIE5T
U3RyaW5nICpvcmlnaW4gPSBbW29yaWdpbnMgb2JqZWN0QXRJbmRleDppXSBkYXRhYmFzZUlkZW50
aWZpZXJdOworICAgICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gb3JpZ2luSlMoQWRvcHQs
IEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKChDRlN0cmluZ1JlZilvcmlnaW4pKTsKKyAgICAg
ICAganNPcmlnaW5zQXJyYXlbaV0gPSBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBvcmlnaW5K
Uy5nZXQoKSk7CisgICAgfQorCisgICAgcmV0dXJuIEpTT2JqZWN0TWFrZUFycmF5KGNvbnRleHQs
IGNvdW50LCBqc09yaWdpbnNBcnJheSwgTlVMTCk7Cit9CisKK0pTVmFsdWVSZWYgTGF5b3V0VGVz
dENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoQXBwbGljYXRpb25DYWNoZShKU0NvbnRleHRSZWYgY29u
dGV4dCkKK3sKKyAgICByZXR1cm4gb3JpZ2luc0FycmF5VG9KUyhjb250ZXh0LCBbV2ViQXBwbGlj
YXRpb25DYWNoZSBvcmlnaW5zV2l0aENhY2hlXSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmNsZWFyQWxsRGF0YWJhc2VzKCkKK3sKKyAgICBbW1dlYkRhdGFiYXNlTWFuYWdlciBz
aGFyZWRXZWJEYXRhYmFzZU1hbmFnZXJdIGRlbGV0ZUFsbERhdGFiYXNlc107Cit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUFsbExvY2FsU3RvcmFnZSgpCit7CisgICAgW1tX
ZWJTdG9yYWdlTWFuYWdlciBzaGFyZWRXZWJTdG9yYWdlTWFuYWdlcl0gZGVsZXRlQWxsT3JpZ2lu
c107Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFN0b3JhZ2VEYXRhYmFzZUlk
bGVJbnRlcnZhbChkb3VibGUgaW50ZXJ2YWwpCit7CisgICAgW1dlYlN0b3JhZ2VNYW5hZ2VyIHNl
dFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbDppbnRlcnZhbF07Cit9CisKK0pTVmFsdWVSZWYg
TGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKEpTQ29udGV4dFJl
ZiBjb250ZXh0KQoreworICAgIHJldHVybiBvcmlnaW5zQXJyYXlUb0pTKGNvbnRleHQsIFtbV2Vi
U3RvcmFnZU1hbmFnZXIgc2hhcmVkV2ViU3RvcmFnZU1hbmFnZXJdIG9yaWdpbnNdKTsKK30KKwor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKEpT
U3RyaW5nUmVmIFVSTCkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHVybENGKEFkb3B0
Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIFVSTCkpOworICAg
IAorICAgIFdlYlNlY3VyaXR5T3JpZ2luICpvcmlnaW4gPSBbW1dlYlNlY3VyaXR5T3JpZ2luIGFs
bG9jXSBpbml0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzooTlNTdHJpbmcgKil1cmxDRi5n
ZXQoKV1dOworICAgIFtbV2ViU3RvcmFnZU1hbmFnZXIgc2hhcmVkV2ViU3RvcmFnZU1hbmFnZXJd
IGRlbGV0ZU9yaWdpbjpvcmlnaW5dOworICAgIFtvcmlnaW4gcmVsZWFzZV07Cit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQmFja0ZvcndhcmRMaXN0KCkKK3sKKyAgICBXZWJC
YWNrRm9yd2FyZExpc3QgKmJhY2tGb3J3YXJkTGlzdCA9IFtbbWFpbkZyYW1lIHdlYlZpZXddIGJh
Y2tGb3J3YXJkTGlzdF07CisgICAgV2ViSGlzdG9yeUl0ZW0gKml0ZW0gPSBbW2JhY2tGb3J3YXJk
TGlzdCBjdXJyZW50SXRlbV0gcmV0YWluXTsKKworICAgIC8vIFdlIGNsZWFyIHRoZSBoaXN0b3J5
IGJ5IHNldHRpbmcgdGhlIGJhY2svZm9yd2FyZCBsaXN0J3MgY2FwYWNpdHkgdG8gMAorICAgIC8v
IHRoZW4gcmVzdG9yaW5nIGl0IGJhY2sgYW5kIGFkZGluZyBiYWNrIHRoZSBjdXJyZW50IGl0ZW0u
CisgICAgaW50IGNhcGFjaXR5ID0gW2JhY2tGb3J3YXJkTGlzdCBjYXBhY2l0eV07CisgICAgW2Jh
Y2tGb3J3YXJkTGlzdCBzZXRDYXBhY2l0eTowXTsKKyAgICBbYmFja0ZvcndhcmRMaXN0IHNldENh
cGFjaXR5OmNhcGFjaXR5XTsKKyAgICBbYmFja0ZvcndhcmRMaXN0IGFkZEl0ZW06aXRlbV07Cisg
ICAgW2JhY2tGb3J3YXJkTGlzdCBnb1RvSXRlbTppdGVtXTsKKyAgICBbaXRlbSByZWxlYXNlXTsK
K30KKworSlNTdHJpbmdSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvcHlEZWNvZGVkSG9zdE5h
bWUoSlNTdHJpbmdSZWYgbmFtZSkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IG5hbWVD
RihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBuYW1l
KSk7CisgICAgTlNTdHJpbmcgKm5hbWVOUyA9IChOU1N0cmluZyAqKW5hbWVDRi5nZXQoKTsKKyAg
ICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKVtuYW1lTlMg
X3dlYl9kZWNvZGVIb3N0TmFtZV0pOworfQorCitKU1N0cmluZ1JlZiBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6Y29weUVuY29kZWRIb3N0TmFtZShKU1N0cmluZ1JlZiBuYW1lKQoreworICAgIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gbmFtZUNGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtD
RkFsbG9jYXRvckRlZmF1bHQsIG5hbWUpKTsKKyAgICBOU1N0cmluZyAqbmFtZU5TID0gKE5TU3Ry
aW5nICopbmFtZUNGLmdldCgpOworICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmlu
ZygoQ0ZTdHJpbmdSZWYpW25hbWVOUyBfd2ViX2VuY29kZUhvc3ROYW1lXSk7Cit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc3BsYXkoKQoreworICAgIGRpc3BsYXlXZWJWaWV3KCk7
Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmtlZXBXZWJIaXN0b3J5KCkKK3sKKyAg
ICBpZiAoIVtXZWJIaXN0b3J5IG9wdGlvbmFsU2hhcmVkSGlzdG9yeV0pIHsKKyAgICAgICAgV2Vi
SGlzdG9yeSAqaGlzdG9yeSA9IFtbV2ViSGlzdG9yeSBhbGxvY10gaW5pdF07CisgICAgICAgIFtX
ZWJIaXN0b3J5IHNldE9wdGlvbmFsU2hhcmVkSGlzdG9yeTpoaXN0b3J5XTsKKyAgICAgICAgW2hp
c3RvcnkgcmVsZWFzZV07CisgICAgfQorfQorCitKU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9s
bGVyOjpjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTVmFsdWVSZWYgdmFsdWUpCit7ICAgCisgICAgcmV0dXJuIFtbbWFpbkZyYW1lIHdlYlZp
ZXddIF9jb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm86Y29udGV4dCBmb3JFbGVtZW50
OnZhbHVlXTsKK30KKworSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9s
bGVyOjpsYXllclRyZWVBc1RleHQoKSBjb25zdAoreworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBzdHJpbmcoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKChDRlN0cmluZ1Jl
ZilbbWFpbkZyYW1lIF9sYXllclRyZWVBc1RleHRdKSk7CisgICAgcmV0dXJuIHN0cmluZzsKK30K
KworSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjptYXJrZXJU
ZXh0Rm9yTGlzdEl0ZW0oSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgbm9kZU9iamVj
dCkgY29uc3QKK3sKKyAgICBET01FbGVtZW50ICplbGVtZW50ID0gW0RPTUVsZW1lbnQgX0RPTUVs
ZW1lbnRGcm9tSlNDb250ZXh0OmNvbnRleHQgdmFsdWU6bm9kZU9iamVjdF07CisgICAgaWYgKCFl
bGVtZW50KQorICAgICAgICByZXR1cm4gSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+KCk7CisKKyAg
ICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gbWFya2VyVGV4dChBZG9wdCwgSlNTdHJpbmdDcmVh
dGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKVtlbGVtZW50IF9tYXJrZXJUZXh0Rm9yTGlzdEl0
ZW1dKSk7CisgICAgcmV0dXJuIG1hcmtlclRleHQ7Cit9CisKK0pTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVByb3BlcnR5KGNvbnN0IGNoYXIqIHByb3Bl
cnR5TmFtZSwgaW50IHBhZ2VOdW1iZXIpIGNvbnN0Cit7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IHByb3BlcnR5VmFsdWUoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKChD
RlN0cmluZ1JlZilbbWFpbkZyYW1lIHBhZ2VQcm9wZXJ0eTpwcm9wZXJ0eU5hbWU6cGFnZU51bWJl
cl0pKTsKKyAgICByZXR1cm4gcHJvcGVydHlWYWx1ZTsKK30KKworSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpwYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVscyhp
bnQgcGFnZU51bWJlciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbWFyZ2luVG9wLCBpbnQg
bWFyZ2luUmlnaHQsIGludCBtYXJnaW5Cb3R0b20sIGludCBtYXJnaW5MZWZ0KSBjb25zdAorewor
ICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBwcm9wZXJ0eVZhbHVlKEFkb3B0LCBKU1N0cmlu
Z0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpW21haW5GcmFtZSBwYWdlU2l6ZUFuZE1h
cmdpbnNJblBpeGVsczpwYWdlTnVtYmVyOndpZHRoOmhlaWdodDptYXJnaW5Ub3A6bWFyZ2luUmln
aHQ6bWFyZ2luQm90dG9tOm1hcmdpbkxlZnRdKSk7CisgICAgcmV0dXJuIHByb3BlcnR5VmFsdWU7
Cit9CisKK2ludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQYWdlcyhmbG9hdCBwYWdl
V2lkdGhJblBpeGVscywgZmxvYXQgcGFnZUhlaWdodEluUGl4ZWxzKQoreworICAgIHJldHVybiBb
bWFpbkZyYW1lIG51bWJlck9mUGFnZXM6cGFnZVdpZHRoSW5QaXhlbHM6cGFnZUhlaWdodEluUGl4
ZWxzXTsKK30KKworaW50IExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZlBlbmRpbmdHZW9s
b2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cygpCit7CisgICAgcmV0dXJuIFtbW21haW5GcmFtZSB3
ZWJWaWV3XSBVSURlbGVnYXRlXSBudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0c107Cit9CisKK3NpemVfdCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2ViSGlzdG9yeUl0
ZW1Db3VudCgpCit7CisgICAgcmV0dXJuIFtbW1dlYkhpc3Rvcnkgb3B0aW9uYWxTaGFyZWRIaXN0
b3J5XSBhbGxJdGVtc10gY291bnRdOworfQorCit1bnNpZ25lZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6d29ya2VyVGhyZWFkQ291bnQoKSBjb25zdAoreworICAgIHJldHVybiBbV2ViV29ya2Vyc1By
aXZhdGUgd29ya2VyVGhyZWFkQ291bnRdOworfQorCitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtTmFtZSgpIGNvbnN0Cit7CisgICAgSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IHBsYXRmb3JtTmFtZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIm1hYyIpKTsKKyAgICByZXR1cm4gcGxhdGZvcm1OYW1lOworfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpub3RpZnlEb25lKCkKK3sKKyAgICBpZiAobV93YWl0VG9E
dW1wICYmICF0b3BMb2FkaW5nRnJhbWUgJiYgIVdvcmtRdWV1ZTo6c2hhcmVkKCktPmNvdW50KCkp
CisgICAgICAgIGR1bXAoKTsKKyAgICBtX3dhaXRUb0R1bXAgPSBmYWxzZTsKK30KKworc3RhdGlj
IGlubGluZSBzdGQ6OnN0cmluZyBzdHJpbmdGcm9tSlNTdHJpbmcoSlNTdHJpbmdSZWYganNTdHJp
bmcpCit7CisgICAgc2l6ZV90IG1heEJ1ZmZlclNpemUgPSBKU1N0cmluZ0dldE1heGltdW1VVEY4
Q1N0cmluZ1NpemUoanNTdHJpbmcpOworICAgIGNoYXIqIHV0ZjhCdWZmZXIgPSBuZXcgY2hhcltt
YXhCdWZmZXJTaXplXTsKKyAgICBzaXplX3QgYnl0ZXNXcml0dGVuVG9VVEY4QnVmZmVyID0gSlNT
dHJpbmdHZXRVVEY4Q1N0cmluZyhqc1N0cmluZywgdXRmOEJ1ZmZlciwgbWF4QnVmZmVyU2l6ZSk7
CisgICAgc3RkOjpzdHJpbmcgc3RkU3RyaW5nKHV0ZjhCdWZmZXIsIGJ5dGVzV3JpdHRlblRvVVRG
OEJ1ZmZlciAtIDEpOyAvLyBieXRlc1dyaXR0ZW5Ub1VURjhCdWZmZXIgaW5jbHVkZXMgYSB0cmFp
bGluZyBcMCB3aGljaCBzdGQ6OnN0cmluZyBkb2Vzbid0IG5lZWQuCisgICAgZGVsZXRlW10gdXRm
OEJ1ZmZlcjsKKyAgICByZXR1cm4gc3RkU3RyaW5nOworfQorCitzdGF0aWMgaW5saW5lIHNpemVf
dCBpbmRleE9mU2VwYXJhdG9yQWZ0ZXJEaXJlY3RvcnlOYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBk
aXJlY3RvcnlOYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYgZnVsbFBhdGgpCit7CisgICAgc3RkOjpz
dHJpbmcgc2VhcmNoS2V5ID0gIi8iICsgZGlyZWN0b3J5TmFtZSArICIvIjsKKyAgICBzaXplX3Qg
aW5kZXhPZlNlYXJjaEtleVN0YXJ0ID0gZnVsbFBhdGgucmZpbmQoc2VhcmNoS2V5KTsKKyAgICBp
ZiAoaW5kZXhPZlNlYXJjaEtleVN0YXJ0ID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgLy8g
Q2FsbGVycyBleHBlY3QgdGhlIHJldHVybiB2YWx1ZSBub3QgdG8gZW5kIGluICIvIiwgc28gc2Vh
cmNoS2V5Lmxlbmd0aCgpIC0gMS4KKyAgICByZXR1cm4gaW5kZXhPZlNlYXJjaEtleVN0YXJ0ICsg
c2VhcmNoS2V5Lmxlbmd0aCgpIC0gMTsKK30KKworc3RhdGljIGlubGluZSBzdGQ6OnN0cmluZyBy
ZXNvdXJjZVJvb3RBYnNvbHV0ZVBhdGgoY29uc3Qgc3RkOjpzdHJpbmcmIHRlc3RQYXRoT3JVUkws
IGNvbnN0IHN0ZDo6c3RyaW5nJiBleHBlY3RlZFJvb3ROYW1lKQoreworICAgIGNoYXIqIGxvY2Fs
UmVzb3VyY2VSb290RW52ID0gZ2V0ZW52KCJMT0NBTF9SRVNPVVJDRV9ST09UIik7CisgICAgaWYg
KGxvY2FsUmVzb3VyY2VSb290RW52KQorICAgICAgICByZXR1cm4gc3RkOjpzdHJpbmcobG9jYWxS
ZXNvdXJjZVJvb3RFbnYpOworCisgICAgLy8gVGhpcyBmYWxsYmFjayBhcHByb2FjaCB3b3JrcyBm
b3Igbm9uLWh0dHAgdGVzdHMgYW5kIGlzIHVzZWZ1bAorICAgIC8vIGluIHRoZSBjYXNlIHdoZW4g
d2UncmUgcnVubmluZyBEUlQgZGlyZWN0bHkgZnJvbSB0aGUgY29tbWFuZCBsaW5lLgorICAgIHJl
dHVybiB0ZXN0UGF0aE9yVVJMLnN1YnN0cigwLCBpbmRleE9mU2VwYXJhdG9yQWZ0ZXJEaXJlY3Rv
cnlOYW1lKGV4cGVjdGVkUm9vdE5hbWUsIHRlc3RQYXRoT3JVUkwpKTsKK30KKworSlNTdHJpbmdS
ZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdGhUb0xvY2FsUmVzb3VyY2UoSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTU3RyaW5nUmVmIGxvY2FsUmVzb3VyY2VKU1N0cmluZykKK3sKKyAgICAvLyBU
aGUgcGFzc2VkIGluIHBhdGggd2lsbCBiZSBhbiBhYnNvbHV0ZSBwYXRoIHRvIHRoZSByZXNvdXJj
ZSBzdGFydGluZworICAgIC8vIHdpdGggIi90bXAiIG9yICIvdG1wL0xheW91dFRlc3RzIiwgb3B0
aW9uYWxseSBzdGFydGluZyB3aXRoIHRoZSBleHBsaWNpdCBmaWxlOi8vIHByb3RvY29sLgorICAg
IC8vIC90bXAgbWFwcyB0byBEVU1QUkVOREVSVFJFRV9URU1QLCBhbmQgL3RtcC9MYXlvdXRUZXN0
cyBtYXBzIHRvIExPQ0FMX1JFU09VUkNFX1JPT1QuCisgICAgLy8gRklYTUU6IFRoaXMgY29kZSBz
aG91bGQgd29yayBvbiBhbGwgKm5peCBwbGF0Zm9ybXMgYW5kIGNhbiBiZSBtb3ZlZCBpbnRvIExh
eW91dFRlc3RDb250cm9sbGVyLmNwcC4KKyAgICBzdGQ6OnN0cmluZyBleHBlY3RlZFJvb3ROYW1l
OworICAgIHN0ZDo6c3RyaW5nIGFic29sdXRlUGF0aFRvUmVzb3VyY2VSb290OworICAgIHN0ZDo6
c3RyaW5nIGxvY2FsUmVzb3VyY2VTdHJpbmcgPSBzdHJpbmdGcm9tSlNTdHJpbmcobG9jYWxSZXNv
dXJjZUpTU3RyaW5nKTsKKworICAgIGlmIChsb2NhbFJlc291cmNlU3RyaW5nLmZpbmQoIkxheW91
dFRlc3RzIikgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICAgICAgZXhwZWN0ZWRSb290TmFt
ZSA9ICJMYXlvdXRUZXN0cyI7CisgICAgICAgIGFic29sdXRlUGF0aFRvUmVzb3VyY2VSb290ID0g
cmVzb3VyY2VSb290QWJzb2x1dGVQYXRoKG1fdGVzdFBhdGhPclVSTCwgZXhwZWN0ZWRSb290TmFt
ZSk7CisgICAgfSBlbHNlIGlmIChsb2NhbFJlc291cmNlU3RyaW5nLmZpbmQoInRtcCIpICE9IHN0
ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgICAgIGV4cGVjdGVkUm9vdE5hbWUgPSAidG1wIjsKKyAg
ICAgICAgYWJzb2x1dGVQYXRoVG9SZXNvdXJjZVJvb3QgPSBnZXRlbnYoIkRVTVBSRU5ERVJUUkVF
X1RFTVAiKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8g
cGF0aFRvTG9jYWxSZXNvdXJjZSB3YXMgcGFzc2VkIGEgcGF0aCBpdCBkb2Vzbid0IGtub3cgaG93
IHRvIG1hcC4KKyAgICB9CisgICAgQVNTRVJUKCFhYnNvbHV0ZVBhdGhUb1Jlc291cmNlUm9vdC5l
bXB0eSgpKTsKKyAgICBzaXplX3QgaW5kZXhPZlNlcGFyYXRvckFmdGVyUm9vdE5hbWUgPSBpbmRl
eE9mU2VwYXJhdG9yQWZ0ZXJEaXJlY3RvcnlOYW1lKGV4cGVjdGVkUm9vdE5hbWUsIGxvY2FsUmVz
b3VyY2VTdHJpbmcpOworICAgIHN0ZDo6c3RyaW5nIGFic29sdXRlUGF0aFRvTG9jYWxSZXNvdXJj
ZSA9IGFic29sdXRlUGF0aFRvUmVzb3VyY2VSb290ICsgbG9jYWxSZXNvdXJjZVN0cmluZy5zdWJz
dHIoaW5kZXhPZlNlcGFyYXRvckFmdGVyUm9vdE5hbWUpOworCisgICAgLy8gTm90ZTogSXQncyBp
bXBvcnRhbnQgdGhhdCB3ZSBrZWVwIHRoZSBmaWxlOi8vIG9yIGh0dHAgdGVzdHMgd2lsbCBnZXQg
Y29uZnVzZWQuCisgICAgaWYgKGxvY2FsUmVzb3VyY2VTdHJpbmcuZmluZCgiZmlsZTovLyIpICE9
IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgICAgIEFTU0VSVChhYnNvbHV0ZVBhdGhUb0xvY2Fs
UmVzb3VyY2VbMF0gPT0gJy8nKTsKKyAgICAgICAgYWJzb2x1dGVQYXRoVG9Mb2NhbFJlc291cmNl
ID0gc3RkOjpzdHJpbmcoImZpbGU6Ly8iKSArIGFic29sdXRlUGF0aFRvTG9jYWxSZXNvdXJjZTsK
KyAgICB9CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGFic29sdXRl
UGF0aFRvTG9jYWxSZXNvdXJjZS5jX3N0cigpKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6cXVldWVMb2FkKEpTU3RyaW5nUmVmIHVybCwgSlNTdHJpbmdSZWYgdGFyZ2V0KQorewor
ICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdXJsQ0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZT
dHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgdXJsKSk7CisgICAgTlNTdHJpbmcgKnVybE5TID0g
KE5TU3RyaW5nICopdXJsQ0YuZ2V0KCk7CisKKyAgICBOU1VSTCAqbnN1cmwgPSBbTlNVUkwgVVJM
V2l0aFN0cmluZzp1cmxOUyByZWxhdGl2ZVRvVVJMOltbW21haW5GcmFtZSBkYXRhU291cmNlXSBy
ZXNwb25zZV0gVVJMXV07CisgICAgTlNTdHJpbmcgKm5zdXJsU3RyaW5nID0gW25zdXJsIGFic29s
dXRlU3RyaW5nXTsKKworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBhYnNvbHV0ZVVSTChB
ZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoW25zdXJsU3RyaW5nIFVURjhTdHJp
bmddKSk7CisgICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+cXVldWUobmV3IExvYWRJdGVtKGFic29s
dXRlVVJMLmdldCgpLCB0YXJnZXQpKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0QWNjZXB0c0VkaXRpbmcoYm9vbCBuZXdBY2NlcHRzRWRpdGluZykKK3sKKyAgICBbKEVkaXRp
bmdEZWxlZ2F0ZSAqKVtbbWFpbkZyYW1lIHdlYlZpZXddIGVkaXRpbmdEZWxlZ2F0ZV0gc2V0QWNj
ZXB0c0VkaXRpbmc6bmV3QWNjZXB0c0VkaXRpbmddOworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRBbHdheXNBY2NlcHRDb29raWVzKGJvb2wgYWx3YXlzQWNjZXB0Q29va2llcykK
K3sKKyAgICBpZiAoYWx3YXlzQWNjZXB0Q29va2llcyA9PSBtX2Fsd2F5c0FjY2VwdENvb2tpZXMp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fYWx3YXlzQWNjZXB0Q29va2llcyA9IGFsd2F5c0Fj
Y2VwdENvb2tpZXM7CisgICAgTlNIVFRQQ29va2llQWNjZXB0UG9saWN5IGNvb2tpZUFjY2VwdFBv
bGljeSA9IGFsd2F5c0FjY2VwdENvb2tpZXMgPyBOU0hUVFBDb29raWVBY2NlcHRQb2xpY3lBbHdh
eXMgOiBOU0hUVFBDb29raWVBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbjsK
KyAgICBbV2ViUHJlZmVyZW5jZXMgX3NldEN1cnJlbnROZXR3b3JrTG9hZGVyU2Vzc2lvbkNvb2tp
ZUFjY2VwdFBvbGljeTpjb29raWVBY2NlcHRQb2xpY3ldOworfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRBcHBDYWNoZU1heGltdW1TaXplKHVuc2lnbmVkIGxvbmcgbG9uZyBzaXpl
KQoreworICAgIFtXZWJBcHBsaWNhdGlvbkNhY2hlIHNldE1heGltdW1TaXplOnNpemVdOworfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVv
dGEodW5zaWduZWQgbG9uZyBsb25nIHF1b3RhKQoreworICAgIFdlYlNlY3VyaXR5T3JpZ2luICpv
cmlnaW4gPSBbW1dlYlNlY3VyaXR5T3JpZ2luIGFsbG9jXSBpbml0V2l0aFVSTDpbTlNVUkwgVVJM
V2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjE6ODAwMCJdXTsKKyAgICBbW29yaWdpbiBhcHBs
aWNhdGlvbkNhY2hlUXVvdGFNYW5hZ2VyXSBzZXRRdW90YTpxdW90YV07CisgICAgW29yaWdpbiBy
ZWxlYXNlXTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0aG9yQW5kVXNl
clN0eWxlc0VuYWJsZWQoYm9vbCBmbGFnKQoreworICAgIFtbW21haW5GcmFtZSB3ZWJWaWV3XSBw
cmVmZXJlbmNlc10gc2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQ6ZmxhZ107Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dG9maWxsZWQoSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTVmFsdWVSZWYgbm9kZU9iamVjdCwgYm9vbCBhdXRvZmlsbGVkKQoreworICAgIERPTUVs
ZW1lbnQgKmVsZW1lbnQgPSBbRE9NRWxlbWVudCBfRE9NRWxlbWVudEZyb21KU0NvbnRleHQ6Y29u
dGV4dCB2YWx1ZTpub2RlT2JqZWN0XTsKKyAgICBpZiAoIWVsZW1lbnQgfHwgIVtlbGVtZW50IGlz
S2luZE9mQ2xhc3M6W0RPTUhUTUxJbnB1dEVsZW1lbnQgY2xhc3NdXSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgWyhET01IVE1MSW5wdXRFbGVtZW50ICopZWxlbWVudCBfc2V0QXV0b2ZpbGxlZDph
dXRvZmlsbGVkXTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q3VzdG9tUG9s
aWN5RGVsZWdhdGUoYm9vbCBzZXREZWxlZ2F0ZSwgYm9vbCBwZXJtaXNzaXZlKQoreworICAgIGlm
IChzZXREZWxlZ2F0ZSkgeworICAgICAgICBbcG9saWN5RGVsZWdhdGUgc2V0UGVybWlzc2l2ZTpw
ZXJtaXNzaXZlXTsKKyAgICAgICAgW1ttYWluRnJhbWUgd2ViVmlld10gc2V0UG9saWN5RGVsZWdh
dGU6cG9saWN5RGVsZWdhdGVdOworICAgIH0gZWxzZQorICAgICAgICBbW21haW5GcmFtZSB3ZWJW
aWV3XSBzZXRQb2xpY3lEZWxlZ2F0ZTpuaWxdOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXREYXRhYmFzZVF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSkKK3sgICAgCisg
ICAgV2ViU2VjdXJpdHlPcmlnaW4gKm9yaWdpbiA9IFtbV2ViU2VjdXJpdHlPcmlnaW4gYWxsb2Nd
IGluaXRXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiZmlsZTovLy8iXV07CisgICAgW1tv
cmlnaW4gZGF0YWJhc2VRdW90YU1hbmFnZXJdIHNldFF1b3RhOnF1b3RhXTsKKyAgICBbb3JpZ2lu
IHJlbGVhc2VdOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpnb0JhY2soKQorewor
ICAgIFtbbWFpbkZyYW1lIHdlYlZpZXddIGdvQmFja107Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldERlZmVyc0xvYWRpbmcoYm9vbCBkZWZlcnMpCit7CisgICAgW1ttYWluRnJh
bWUgd2ViVmlld10gc2V0RGVmZXJzQ2FsbGJhY2tzOmRlZmVyc107Cit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUo
Ym9vbCBmb3JiaWRkZW4sIEpTU3RyaW5nUmVmIHNjaGVtZSkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZT
dHJpbmdSZWY+IHNjaGVtZUNGU3RyaW5nKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtD
RkFsbG9jYXRvckRlZmF1bHQsIHNjaGVtZSkpOworICAgIFtXZWJWaWV3IF9zZXREb21haW5SZWxh
eGF0aW9uRm9yYmlkZGVuOmZvcmJpZGRlbiBmb3JVUkxTY2hlbWU6KE5TU3RyaW5nICopc2NoZW1l
Q0ZTdHJpbmcuZ2V0KCldOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2Nr
RGV2aWNlT3JpZW50YXRpb24oYm9vbCBjYW5Qcm92aWRlQWxwaGEsIGRvdWJsZSBhbHBoYSwgYm9v
bCBjYW5Qcm92aWRlQmV0YSwgZG91YmxlIGJldGEsIGJvb2wgY2FuUHJvdmlkZUdhbW1hLCBkb3Vi
bGUgZ2FtbWEpCit7CisgICAgLy8gRHVtcFJlbmRlclRyZWUgY29uZmlndXJlZCB0aGUgV2ViVmll
dyB0byB1c2UgV2ViRGV2aWNlT3JpZW50YXRpb25Qcm92aWRlck1vY2suCisgICAgaWQ8V2ViRGV2
aWNlT3JpZW50YXRpb25Qcm92aWRlcj4gcHJvdmlkZXIgPSBbW21haW5GcmFtZSB3ZWJWaWV3XSBf
ZGV2aWNlT3JpZW50YXRpb25Qcm92aWRlcl07CisgICAgV2ViRGV2aWNlT3JpZW50YXRpb25Qcm92
aWRlck1vY2sgKm1vY2tQcm92aWRlciA9IHN0YXRpY19jYXN0PFdlYkRldmljZU9yaWVudGF0aW9u
UHJvdmlkZXJNb2NrKj4ocHJvdmlkZXIpOworICAgIFdlYkRldmljZU9yaWVudGF0aW9uICpvcmll
bnRhdGlvbiA9IFtbV2ViRGV2aWNlT3JpZW50YXRpb24gYWxsb2NdIGluaXRXaXRoQ2FuUHJvdmlk
ZUFscGhhOmNhblByb3ZpZGVBbHBoYSBhbHBoYTphbHBoYSBjYW5Qcm92aWRlQmV0YTpjYW5Qcm92
aWRlQmV0YSBiZXRhOmJldGEgY2FuUHJvdmlkZUdhbW1hOmNhblByb3ZpZGVHYW1tYSBnYW1tYTpn
YW1tYV07CisgICAgW21vY2tQcm92aWRlciBzZXRPcmllbnRhdGlvbjpvcmllbnRhdGlvbl07Cisg
ICAgW29yaWVudGF0aW9uIHJlbGVhc2VdOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25n
aXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSkKK3sKKyAgICBXZWJHZW9sb2NhdGlvblBvc2l0aW9uICpw
b3NpdGlvbiA9IFtbV2ViR2VvbG9jYXRpb25Qb3NpdGlvbiBhbGxvY10gaW5pdFdpdGhUaW1lc3Rh
bXA6Y3VycmVudFRpbWUoKSBsYXRpdHVkZTpsYXRpdHVkZSBsb25naXR1ZGU6bG9uZ2l0dWRlIGFj
Y3VyYWN5OmFjY3VyYWN5XTsKKyAgICBbW01vY2tHZW9sb2NhdGlvblByb3ZpZGVyIHNoYXJlZF0g
c2V0UG9zaXRpb246cG9zaXRpb25dOworICAgIFtwb3NpdGlvbiByZWxlYXNlXTsKK30KKwordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uRXJyb3IoaW50IGNvZGUs
IEpTU3RyaW5nUmVmIG1lc3NhZ2UpCit7CisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBtZXNz
YWdlQ0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
bWVzc2FnZSkpOworICAgIE5TU3RyaW5nICptZXNzYWdlTlMgPSAoTlNTdHJpbmcgKiltZXNzYWdl
Q0YuZ2V0KCk7CisgICAgTlNFcnJvciAqZXJyb3IgPSBbTlNFcnJvciBlcnJvcldpdGhEb21haW46
V2ViS2l0RXJyb3JEb21haW4gY29kZTpjb2RlIHVzZXJJbmZvOltOU0RpY3Rpb25hcnkgZGljdGlv
bmFyeVdpdGhPYmplY3Q6bWVzc2FnZU5TIGZvcktleTpOU0xvY2FsaXplZERlc2NyaXB0aW9uS2V5
XV07CisgICAgW1tNb2NrR2VvbG9jYXRpb25Qcm92aWRlciBzaGFyZWRdIHNldEVycm9yOmVycm9y
XTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNz
aW9uKGJvb2wgYWxsb3cpCit7CisgICAgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29tbW9uKGFs
bG93KTsKKyAgICBbW1ttYWluRnJhbWUgd2ViVmlld10gVUlEZWxlZ2F0ZV0gZGlkU2V0TW9ja0dl
b2xvY2F0aW9uUGVybWlzc2lvbl07Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFk
ZE1vY2tTcGVlY2hJbnB1dFJlc3VsdChKU1N0cmluZ1JlZiByZXN1bHQsIGRvdWJsZSBjb25maWRl
bmNlLCBKU1N0cmluZ1JlZiBsYW5ndWFnZSkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZv
ciBzcGVlY2ggaW5wdXQgbGF5b3V0IHRlc3RzLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldE1vY2tTcGVlY2hJbnB1dER1bXBSZWN0KGJvb2wgZmxhZykKK3sKKyAgICAvLyBG
SVhNRTogSW1wbGVtZW50IGZvciBzcGVlY2ggaW5wdXQgbGF5b3V0IHRlc3RzLgorICAgIC8vIFNl
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXJ0U3BlZWNoSW5wdXQoSlNDb250ZXh0UmVmIGlu
cHV0RWxlbWVudCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBzcGVlY2ggaW5wdXQg
bGF5b3V0IHRlc3RzLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Mzk0ODUuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEljb25E
YXRhYmFzZUVuYWJsZWQoYm9vbCBpY29uRGF0YWJhc2VFbmFibGVkKQoreworICAgIC8vIEZJWE1F
OiBXb3JrYXJvdW5kIDxyZGFyOi8vcHJvYmxlbS82NDgwMTA4PgorICAgIHN0YXRpYyBXZWJJY29u
RGF0YWJhc2UgKnNoYXJlZFdlYkljb25EYXRhYmFzZSA9IE5VTEw7CisgICAgaWYgKCFzaGFyZWRX
ZWJJY29uRGF0YWJhc2UpIHsKKyAgICAgICAgaWYgKCFpY29uRGF0YWJhc2VFbmFibGVkKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBzaGFyZWRXZWJJY29uRGF0YWJhc2UgPSBbV2ViSWNv
bkRhdGFiYXNlIHNoYXJlZEljb25EYXRhYmFzZV07CisgICAgICAgIGlmIChbc2hhcmVkV2ViSWNv
bkRhdGFiYXNlIGlzRW5hYmxlZF0gPT0gaWNvbkRhdGFiYXNlRW5hYmxlZCkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgW3NoYXJlZFdlYkljb25EYXRhYmFzZSBzZXRFbmFibGVkOmlj
b25EYXRhYmFzZUVuYWJsZWRdOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRN
YWluRnJhbWVJc0ZpcnN0UmVzcG9uZGVyKGJvb2wgZmxhZykKK3sKKyAgICBOU1ZpZXcgKmRvY3Vt
ZW50VmlldyA9IFtbbWFpbkZyYW1lIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XTsKKyAgICAKKyAg
ICBOU1Jlc3BvbmRlciAqZmlyc3RSZXNwb25kZXIgPSBmbGFnID8gZG9jdW1lbnRWaWV3IDogbmls
OworICAgIFtbW21haW5GcmFtZSB3ZWJWaWV3XSB3aW5kb3ddIG1ha2VGaXJzdFJlc3BvbmRlcjpm
aXJzdFJlc3BvbmRlcl07Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFByaXZh
dGVCcm93c2luZ0VuYWJsZWQoYm9vbCBwcml2YXRlQnJvd3NpbmdFbmFibGVkKQoreworICAgIFtb
W21haW5GcmFtZSB3ZWJWaWV3XSBwcmVmZXJlbmNlc10gc2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxl
ZDpwcml2YXRlQnJvd3NpbmdFbmFibGVkXTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0WFNTQXVkaXRvckVuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIFtbW21haW5GcmFt
ZSB3ZWJWaWV3XSBwcmVmZXJlbmNlc10gc2V0WFNTQXVkaXRvckVuYWJsZWQ6ZW5hYmxlZF07Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQo
Ym9vbCBlbmFibGVkKQoreworICAgIFtbW21haW5GcmFtZSB3ZWJWaWV3XSBwcmVmZXJlbmNlc10g
c2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZDplbmFibGVkXTsKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sK
KyAgICBbW1ttYWluRnJhbWUgd2ViVmlld10gcHJlZmVyZW5jZXNdIHNldFNwYXRpYWxOYXZpZ2F0
aW9uRW5hYmxlZDplbmFibGVkXTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMoYm9vbCBlbmFibGVkKQoreworICAgIFtb
W21haW5GcmFtZSB3ZWJWaWV3XSBwcmVmZXJlbmNlc10gc2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NG
cm9tRmlsZVVSTHM6ZW5hYmxlZF07Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhib29sIGVuYWJsZWQpCit7CisgICAgW1tbbWFp
bkZyYW1lIHdlYlZpZXddIHByZWZlcmVuY2VzXSBzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVS
THM6ZW5hYmxlZF07Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBvcHVwQmxv
Y2tpbmdFbmFibGVkKGJvb2wgcG9wdXBCbG9ja2luZ0VuYWJsZWQpCit7CisgICAgW1tbbWFpbkZy
YW1lIHdlYlZpZXddIHByZWZlcmVuY2VzXSBzZXRKYXZhU2NyaXB0Q2FuT3BlbldpbmRvd3NBdXRv
bWF0aWNhbGx5OiFwb3B1cEJsb2NraW5nRW5hYmxlZF07Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldFBsdWdpbnNFbmFibGVkKGJvb2wgcGx1Z2luc0VuYWJsZWQpCit7CisgICAg
W1tbbWFpbkZyYW1lIHdlYlZpZXddIHByZWZlcmVuY2VzXSBzZXRQbHVnSW5zRW5hYmxlZDpwbHVn
aW5zRW5hYmxlZF07Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEphdmFTY3Jp
cHRDYW5BY2Nlc3NDbGlwYm9hcmQoYm9vbCBlbmFibGVkKQoreworICAgIFtbW21haW5GcmFtZSB3
ZWJWaWV3XSBwcmVmZXJlbmNlc10gc2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZDplbmFi
bGVkXTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0b21hdGljTGlua0Rl
dGVjdGlvbkVuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIFtbbWFpbkZyYW1lIHdlYlZpZXdd
IHNldEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkOmVuYWJsZWRdOworfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoYm9vbCBj
eWNsZXMpCit7CisgICAgW1ttYWluRnJhbWUgd2ViVmlld10gc2V0VGFiS2V5Q3ljbGVzVGhyb3Vn
aEVsZW1lbnRzOmN5Y2xlc107Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVz
ZURhc2hib2FyZENvbXBhdGliaWxpdHlNb2RlKGJvb2wgZmxhZykKK3sKKyAgICBbW21haW5GcmFt
ZSB3ZWJWaWV3XSBfc2V0RGFzaGJvYXJkQmVoYXZpb3I6V2ViRGFzaGJvYXJkQmVoYXZpb3JVc2VC
YWNrd2FyZENvbXBhdGliaWxpdHlNb2RlIHRvOmZsYWddOworfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoYm9vbCBmbGFnKQoreworICAgIFtb
V2ViUHJlZmVyZW5jZXMgc3RhbmRhcmRQcmVmZXJlbmNlc10gc2V0VXNlclN0eWxlU2hlZXRFbmFi
bGVkOmZsYWddOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5bGVT
aGVldExvY2F0aW9uKEpTU3RyaW5nUmVmIHBhdGgpCit7CisgICAgUmV0YWluUHRyPENGU3RyaW5n
UmVmPiBwYXRoQ0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVm
YXVsdCwgcGF0aCkpOworICAgIE5TVVJMICp1cmwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzooTlNT
dHJpbmcgKilwYXRoQ0YuZ2V0KCldOworICAgIFtbV2ViUHJlZmVyZW5jZXMgc3RhbmRhcmRQcmVm
ZXJlbmNlc10gc2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbjp1cmxdOworfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRWYWx1ZUZvclVzZXIoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
VmFsdWVSZWYgbm9kZU9iamVjdCwgSlNTdHJpbmdSZWYgdmFsdWUpCit7CisgICAgRE9NRWxlbWVu
dCAqZWxlbWVudCA9IFtET01FbGVtZW50IF9ET01FbGVtZW50RnJvbUpTQ29udGV4dDpjb250ZXh0
IHZhbHVlOm5vZGVPYmplY3RdOworICAgIGlmICghZWxlbWVudCB8fCAhW2VsZW1lbnQgaXNLaW5k
T2ZDbGFzczpbRE9NSFRNTElucHV0RWxlbWVudCBjbGFzc11dKQorICAgICAgICByZXR1cm47CisK
KyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHZhbHVlQ0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5
Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgdmFsdWUpKTsKKyAgICBbKERPTUhUTUxJbnB1
dEVsZW1lbnQgKillbGVtZW50IF9zZXRWYWx1ZUZvclVzZXI6KE5TU3RyaW5nICopdmFsdWVDRi5n
ZXQoKV07Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFZpZXdNb2RlTWVkaWFG
ZWF0dXJlKEpTU3RyaW5nUmVmIG1vZGUpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNhYmxlSW1hZ2VMb2FkaW5nKCkKK3sKKyAg
ICBbW1dlYlByZWZlcmVuY2VzIHN0YW5kYXJkUHJlZmVyZW5jZXNdIHNldExvYWRzSW1hZ2VzQXV0
b21hdGljYWxseTpOT107Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc3BhdGNo
UGVuZGluZ0xvYWRSZXF1ZXN0cygpCit7CisgICAgW1ttYWluRnJhbWUgd2ViVmlld10gX2Rpc3Bh
dGNoUGVuZGluZ0xvYWRSZXF1ZXN0c107Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
Om92ZXJyaWRlUHJlZmVyZW5jZShKU1N0cmluZ1JlZiBrZXksIEpTU3RyaW5nUmVmIHZhbHVlKQor
eworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4ga2V5Q0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5
Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwga2V5KSk7CisgICAgTlNTdHJpbmcgKmtleU5T
ID0gKE5TU3RyaW5nICopa2V5Q0YuZ2V0KCk7CisKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
IHZhbHVlQ0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgdmFsdWUpKTsKKyAgICBOU1N0cmluZyAqdmFsdWVOUyA9IChOU1N0cmluZyAqKXZhbHVlQ0Yu
Z2V0KCk7CisKKyAgICBbW1dlYlByZWZlcmVuY2VzIHN0YW5kYXJkUHJlZmVyZW5jZXNdIF9zZXRQ
cmVmZXJlbmNlRm9yVGVzdFdpdGhWYWx1ZTp2YWx1ZU5TIGZvcktleTprZXlOU107Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92ZUFsbFZpc2l0ZWRMaW5rcygpCit7CisgICAg
W1dlYkhpc3RvcnkgX3JlbW92ZUFsbFZpc2l0ZWRMaW5rc107Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldExvY2F0aW9uKEpTU3RyaW5n
UmVmIGpzVVJMKQoreworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdXJsU3RyaW5nKEFkb3B0
Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKDAsIGpzVVJMKSk7CisgICAgOjpzZXRQZXJzaXN0ZW50
VXNlclN0eWxlU2hlZXRMb2NhdGlvbih1cmxTdHJpbmcuZ2V0KCkpOworfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpjbGVhclBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldCgpCit7CisgICAg
OjpzZXRQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXRMb2NhdGlvbigwKTsKK30KKwordm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0V2luZG93SXNLZXkoYm9vbCB3aW5kb3dJc0tleSkKK3sKKyAg
ICBtX3dpbmRvd0lzS2V5ID0gd2luZG93SXNLZXk7CisgICAgW1ttYWluRnJhbWUgd2ViVmlld10g
X3VwZGF0ZUFjdGl2ZVN0YXRlXTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
U21hcnRJbnNlcnREZWxldGVFbmFibGVkKGJvb2wgZmxhZykKK3sKKyAgICBbW21haW5GcmFtZSB3
ZWJWaWV3XSBzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQ6ZmxhZ107Cit9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoYm9v
bCBmbGFnKQoreworICAgIFtbbWFpbkZyYW1lIHdlYlZpZXddIHNldFNlbGVjdFRyYWlsaW5nV2hp
dGVzcGFjZUVuYWJsZWQ6ZmxhZ107Cit9CisKK3N0YXRpYyBjb25zdCBDRlRpbWVJbnRlcnZhbCB3
YWl0VG9EdW1wV2F0Y2hkb2dJbnRlcnZhbCA9IDMwLjA7CisKK3N0YXRpYyB2b2lkIHdhaXRVbnRp
bERvbmVXYXRjaGRvZ0ZpcmVkKENGUnVuTG9vcFRpbWVyUmVmIHRpbWVyLCB2b2lkKiBpbmZvKQor
eworICAgIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+d2FpdFRvRHVtcFdhdGNoZG9nVGltZXJGaXJl
ZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXYWl0VG9EdW1wKGJvb2wg
d2FpdFVudGlsRG9uZSkKK3sKKyAgICBtX3dhaXRUb0R1bXAgPSB3YWl0VW50aWxEb25lOworICAg
IGlmIChtX3dhaXRUb0R1bXAgJiYgc2hvdWxkU2V0V2FpdFRvRHVtcFdhdGNoZG9nKCkpCisgICAg
ICAgIHNldFdhaXRUb0R1bXBXYXRjaGRvZyhDRlJ1bkxvb3BUaW1lckNyZWF0ZShrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSArIHdhaXRUb0R1bXBXYXRjaGRv
Z0ludGVydmFsLCAwLCAwLCAwLCB3YWl0VW50aWxEb25lV2F0Y2hkb2dGaXJlZCwgTlVMTCkpOwor
fQorCitpbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndpbmRvd0NvdW50KCkKK3sKKyAgICByZXR1
cm4gQ0ZBcnJheUdldENvdW50KG9wZW5XaW5kb3dzUmVmKTsKK30KKworYm9vbCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkKEpTU3Ry
aW5nUmVmIGpzU3RyaW5nKQoreworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gaWRDRihBZG9w
dENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBqc1N0cmluZykp
OworICAgIE5TU3RyaW5nICppZE5TID0gKE5TU3RyaW5nICopaWRDRi5nZXQoKTsKKyAgICAKKyAg
ICBET01FbGVtZW50ICplbGVtZW50ID0gW1ttYWluRnJhbWUgRE9NRG9jdW1lbnRdIGdldEVsZW1l
bnRCeUlkOmlkTlNdOworICAgIGlkIHJlcCA9IFtbbWFpbkZyYW1lIGRhdGFTb3VyY2VdIHJlcHJl
c2VudGF0aW9uXTsKKyAgICAKKyAgICBpZiAoW3JlcCBjbGFzc10gPT0gW1dlYkhUTUxSZXByZXNl
bnRhdGlvbiBjbGFzc10pCisgICAgICAgIHJldHVybiBbKFdlYkhUTUxSZXByZXNlbnRhdGlvbiAq
KXJlcCBlbGVtZW50RG9lc0F1dG9Db21wbGV0ZTplbGVtZW50XTsKKworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXhlY0NvbW1hbmQoSlNTdHJpbmdS
ZWYgbmFtZSwgSlNTdHJpbmdSZWYgdmFsdWUpCit7CisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVm
PiBuYW1lQ0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgbmFtZSkpOworICAgIE5TU3RyaW5nICpuYW1lTlMgPSAoTlNTdHJpbmcgKiluYW1lQ0YuZ2V0
KCk7CisKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHZhbHVlQ0YoQWRvcHRDRiwgSlNTdHJp
bmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgdmFsdWUpKTsKKyAgICBOU1N0cmlu
ZyAqdmFsdWVOUyA9IChOU1N0cmluZyAqKXZhbHVlQ0YuZ2V0KCk7CisKKyAgICBbW21haW5GcmFt
ZSB3ZWJWaWV3XSBfZXhlY3V0ZUNvcmVDb21tYW5kQnlOYW1lOm5hbWVOUyB2YWx1ZTp2YWx1ZU5T
XTsKK30KKworYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZmluZFN0cmluZyhKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNTdHJpbmdSZWYgdGFyZ2V0LCBKU09iamVjdFJlZiBvcHRpb25zQXJyYXkp
Cit7CisgICAgV2ViRmluZE9wdGlvbnMgb3B0aW9ucyA9IDA7CisKKyAgICBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gbGVuZ3RoUHJvcGVydHlOYW1lKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygibGVuZ3RoIikpOworICAgIEpTVmFsdWVSZWYgbGVuZ3RoVmFsdWUgPSBKU09i
amVjdEdldFByb3BlcnR5KGNvbnRleHQsIG9wdGlvbnNBcnJheSwgbGVuZ3RoUHJvcGVydHlOYW1l
LmdldCgpLCAwKTsKKyAgICBpZiAoIUpTVmFsdWVJc051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1
ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4g
dGFyZ2V0Q0ZTdHJpbmcoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgdGFyZ2V0KSk7CisKKyAgICBzaXplX3QgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8c2l6
ZV90PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUsIDApKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIEpTVmFsdWVSZWYgdmFs
dWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBvcHRpb25zQXJyYXksIGks
IDApOworICAgICAgICBpZiAoIUpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gb3B0
aW9uTmFtZShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCB2YWx1ZSwgMCkpOwor
CisgICAgICAgIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG9wdGlvbk5hbWUuZ2V0
KCksICJDYXNlSW5zZW5zaXRpdmUiKSkKKyAgICAgICAgICAgIG9wdGlvbnMgfD0gV2ViRmluZE9w
dGlvbnNDYXNlSW5zZW5zaXRpdmU7CisgICAgICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcob3B0aW9uTmFtZS5nZXQoKSwgIkF0V29yZFN0YXJ0cyIpKQorICAgICAgICAg
ICAgb3B0aW9ucyB8PSBXZWJGaW5kT3B0aW9uc0F0V29yZFN0YXJ0czsKKyAgICAgICAgZWxzZSBp
ZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRpb25OYW1lLmdldCgpLCAiVHJlYXRN
ZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQiKSkKKyAgICAgICAgICAgIG9wdGlvbnMgfD0gV2ViRmlu
ZE9wdGlvbnNUcmVhdE1lZGlhbENhcGl0YWxBc1dvcmRTdGFydDsKKyAgICAgICAgZWxzZSBpZiAo
SlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRpb25OYW1lLmdldCgpLCAiQmFja3dhcmRz
IikpCisgICAgICAgICAgICBvcHRpb25zIHw9IFdlYkZpbmRPcHRpb25zQmFja3dhcmRzOworICAg
ICAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG9wdGlvbk5hbWUuZ2V0
KCksICJXcmFwQXJvdW5kIikpCisgICAgICAgICAgICBvcHRpb25zIHw9IFdlYkZpbmRPcHRpb25z
V3JhcEFyb3VuZDsKKyAgICAgICAgZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhvcHRpb25OYW1lLmdldCgpLCAiU3RhcnRJblNlbGVjdGlvbiIpKQorICAgICAgICAgICAgb3B0
aW9ucyB8PSBXZWJGaW5kT3B0aW9uc1N0YXJ0SW5TZWxlY3Rpb247CisgICAgfQorCisgICAgcmV0
dXJuIFtbbWFpbkZyYW1lIHdlYlZpZXddIGZpbmRTdHJpbmc6KE5TU3RyaW5nICopdGFyZ2V0Q0ZT
dHJpbmcuZ2V0KCkgb3B0aW9uczpvcHRpb25zXTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0Q2FjaGVNb2RlbChpbnQgY2FjaGVNb2RlbCkKK3sKKyAgICBbW1dlYlByZWZlcmVu
Y2VzIHN0YW5kYXJkUHJlZmVyZW5jZXNdIHNldENhY2hlTW9kZWw6Y2FjaGVNb2RlbF07Cit9CisK
K2Jvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmlzQ29tbWFuZEVuYWJsZWQoSlNTdHJpbmdSZWYg
bmFtZSkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IG5hbWVDRihBZG9wdENGLCBKU1N0
cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBuYW1lKSk7CisgICAgTlNTdHJp
bmcgKm5hbWVOUyA9IChOU1N0cmluZyAqKW5hbWVDRi5nZXQoKTsKKworICAgIC8vIEFjY2VwdCBj
b21tYW5kIHN0cmluZ3Mgd2l0aCBjYXBpdGFsIGxldHRlcnMgZm9yIGZpcnN0IGxldHRlciB3aXRo
b3V0IHRyYWlsaW5nIGNvbG9uLgorICAgIGlmICghW25hbWVOUyBoYXNTdWZmaXg6QCI6Il0gJiYg
W25hbWVOUyBsZW5ndGhdKSB7CisgICAgICAgIG5hbWVOUyA9IFtbW1tuYW1lTlMgc3Vic3RyaW5n
VG9JbmRleDoxXSBsb3dlcmNhc2VTdHJpbmddCisgICAgICAgICAgICBzdHJpbmdCeUFwcGVuZGlu
Z1N0cmluZzpbbmFtZU5TIHN1YnN0cmluZ0Zyb21JbmRleDoxXV0KKyAgICAgICAgICAgIHN0cmlu
Z0J5QXBwZW5kaW5nU3RyaW5nOkAiOiJdOworICAgIH0KKworICAgIFNFTCBzZWxlY3RvciA9IE5T
U2VsZWN0b3JGcm9tU3RyaW5nKG5hbWVOUyk7CisgICAgUmV0YWluUHRyPENvbW1hbmRWYWxpZGF0
aW9uVGFyZ2V0PiB0YXJnZXQoQWRvcHROUywgW1tDb21tYW5kVmFsaWRhdGlvblRhcmdldCBhbGxv
Y10gaW5pdFdpdGhBY3Rpb246c2VsZWN0b3JdKTsKKyAgICBpZCB2YWxpZGF0b3IgPSBbTlNBcHAg
dGFyZ2V0Rm9yQWN0aW9uOnNlbGVjdG9yIHRvOlttYWluRnJhbWUgd2ViVmlld10gZnJvbTp0YXJn
ZXQuZ2V0KCldOworICAgIGlmICghdmFsaWRhdG9yKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKCFbdmFsaWRhdG9yIHJlc3BvbmRzVG9TZWxlY3RvcjpzZWxlY3Rvcl0pCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoIVt2YWxpZGF0b3IgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3Rvcih2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtOildKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gW3ZhbGlkYXRvciB2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtOnRhcmdl
dC5nZXQoKV07Cit9CisKK2Jvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlQW5pbWF0aW9u
QXRUaW1lT25FbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0
aW1lLCBKU1N0cmluZ1JlZiBlbGVtZW50SWQpCit7CisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVm
PiBpZENGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQs
IGVsZW1lbnRJZCkpOworICAgIE5TU3RyaW5nICppZE5TID0gKE5TU3RyaW5nICopaWRDRi5nZXQo
KTsKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IG5hbWVDRihBZG9wdENGLCBKU1N0cmluZ0Nv
cHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBhbmltYXRpb25OYW1lKSk7CisgICAgTlNT
dHJpbmcgKm5hbWVOUyA9IChOU1N0cmluZyAqKW5hbWVDRi5nZXQoKTsKKyAgICAKKyAgICByZXR1
cm4gW21haW5GcmFtZSBfcGF1c2VBbmltYXRpb246bmFtZU5TIG9uTm9kZTpbW21haW5GcmFtZSBE
T01Eb2N1bWVudF0gZ2V0RWxlbWVudEJ5SWQ6aWROU10gYXRUaW1lOnRpbWVdOworfQorCitib29s
IExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRo
SWQoSlNTdHJpbmdSZWYgcHJvcGVydHlOYW1lLCBkb3VibGUgdGltZSwgSlNTdHJpbmdSZWYgZWxl
bWVudElkKQoreworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gaWRDRihBZG9wdENGLCBKU1N0
cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBlbGVtZW50SWQpKTsKKyAgICBO
U1N0cmluZyAqaWROUyA9IChOU1N0cmluZyAqKWlkQ0YuZ2V0KCk7CisgICAgUmV0YWluUHRyPENG
U3RyaW5nUmVmPiBuYW1lQ0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgcHJvcGVydHlOYW1lKSk7CisgICAgTlNTdHJpbmcgKm5hbWVOUyA9IChOU1N0
cmluZyAqKW5hbWVDRi5nZXQoKTsKKyAgICAKKyAgICByZXR1cm4gW21haW5GcmFtZSBfcGF1c2VU
cmFuc2l0aW9uT2ZQcm9wZXJ0eTpuYW1lTlMgb25Ob2RlOltbbWFpbkZyYW1lIERPTURvY3VtZW50
XSBnZXRFbGVtZW50QnlJZDppZE5TXSBhdFRpbWU6dGltZV07Cit9CisKK3Vuc2lnbmVkIExheW91
dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBjb25zdAoreworICAg
IHJldHVybiBbbWFpbkZyYW1lIF9udW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnNdOworfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjp3YWl0Rm9yUG9saWN5RGVsZWdhdGUoKQoreworICAgIHNl
dFdhaXRUb0R1bXAodHJ1ZSk7CisgICAgW3BvbGljeURlbGVnYXRlIHNldENvbnRyb2xsZXJUb05v
dGlmeURvbmU6dGhpc107CisgICAgW1ttYWluRnJhbWUgd2ViVmlld10gc2V0UG9saWN5RGVsZWdh
dGU6cG9saWN5RGVsZWdhdGVdOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRP
cmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShKU1N0cmluZ1JlZiBzb3VyY2VPcmlnaW4sIEpTU3Ry
aW5nUmVmIGRlc3RpbmF0aW9uUHJvdG9jb2wsIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9uSG9zdCwg
Ym9vbCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucykKK3sKKyAgICBSZXRhaW5QdHI8Q0ZTdHJp
bmdSZWY+IHNvdXJjZU9yaWdpbkNGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFs
bG9jYXRvckRlZmF1bHQsIHNvdXJjZU9yaWdpbikpOworICAgIE5TU3RyaW5nICpzb3VyY2VPcmln
aW5OUyA9IChOU1N0cmluZyAqKXNvdXJjZU9yaWdpbkNGLmdldCgpOworICAgIFJldGFpblB0cjxD
RlN0cmluZ1JlZj4gcHJvdG9jb2xDRihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBkZXN0aW5hdGlvblByb3RvY29sKSk7CisgICAgTlNTdHJpbmcgKmRl
c3RpbmF0aW9uUHJvdG9jb2xOUyA9IChOU1N0cmluZyAqKXByb3RvY29sQ0YuZ2V0KCk7CisgICAg
UmV0YWluUHRyPENGU3RyaW5nUmVmPiBob3N0Q0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJp
bmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZGVzdGluYXRpb25Ib3N0KSk7CisgICAgTlNTdHJpbmcg
KmRlc3RpbmF0aW9uSG9zdE5TID0gKE5TU3RyaW5nICopaG9zdENGLmdldCgpOworICAgIFtXZWJW
aWV3IF9hZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeVdpdGhTb3VyY2VPcmlnaW46c291cmNl
T3JpZ2luTlMgZGVzdGluYXRpb25Qcm90b2NvbDpkZXN0aW5hdGlvblByb3RvY29sTlMgZGVzdGlu
YXRpb25Ib3N0OmRlc3RpbmF0aW9uSG9zdE5TIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zOmFs
bG93RGVzdGluYXRpb25TdWJkb21haW5zXTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoSlNTdHJpbmdSZWYgc291cmNlT3Jp
Z2luLCBKU1N0cmluZ1JlZiBkZXN0aW5hdGlvblByb3RvY29sLCBKU1N0cmluZ1JlZiBkZXN0aW5h
dGlvbkhvc3QsIGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpCit7CisgICAgUmV0YWlu
UHRyPENGU3RyaW5nUmVmPiBzb3VyY2VPcmlnaW5DRihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0
cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBzb3VyY2VPcmlnaW4pKTsKKyAgICBOU1N0cmluZyAq
c291cmNlT3JpZ2luTlMgPSAoTlNTdHJpbmcgKilzb3VyY2VPcmlnaW5DRi5nZXQoKTsKKyAgICBS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHByb3RvY29sQ0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZT
dHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZGVzdGluYXRpb25Qcm90b2NvbCkpOworICAgIE5T
U3RyaW5nICpkZXN0aW5hdGlvblByb3RvY29sTlMgPSAoTlNTdHJpbmcgKilwcm90b2NvbENGLmdl
dCgpOworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gaG9zdENGKEFkb3B0Q0YsIEpTU3RyaW5n
Q29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIGRlc3RpbmF0aW9uSG9zdCkpOworICAg
IE5TU3RyaW5nICpkZXN0aW5hdGlvbkhvc3ROUyA9IChOU1N0cmluZyAqKWhvc3RDRi5nZXQoKTsK
KyAgICBbV2ViVmlldyBfcmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnlXaXRoU291cmNl
T3JpZ2luOnNvdXJjZU9yaWdpbk5TIGRlc3RpbmF0aW9uUHJvdG9jb2w6ZGVzdGluYXRpb25Qcm90
b2NvbE5TIGRlc3RpbmF0aW9uSG9zdDpkZXN0aW5hdGlvbkhvc3ROUyBhbGxvd0Rlc3RpbmF0aW9u
U3ViZG9tYWluczphbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWluc107Cit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFNjcm9sbGJhclBvbGljeShKU1N0cmluZ1JlZiBvcmllbnRhdGlv
biwgSlNTdHJpbmdSZWYgcG9saWN5KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkVXNlclNjcmlwdChKU1N0cmluZ1JlZiBzb3Vy
Y2UsIGJvb2wgcnVuQXRTdGFydCwgYm9vbCBhbGxGcmFtZXMpCit7CisgICAgUmV0YWluUHRyPENG
U3RyaW5nUmVmPiBzb3VyY2VDRihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCBzb3VyY2UpKTsKKyAgICBOU1N0cmluZyAqc291cmNlTlMgPSAoTlNTdHJp
bmcgKilzb3VyY2VDRi5nZXQoKTsKKyAgICBbV2ViVmlldyBfYWRkVXNlclNjcmlwdFRvR3JvdXA6
QCJvcmcud2Via2l0LkR1bXBSZW5kZXJUcmVlIiB3b3JsZDpbV2ViU2NyaXB0V29ybGQgd29ybGRd
IHNvdXJjZTpzb3VyY2VOUyB1cmw6bmlsIHdoaXRlbGlzdDpuaWwgYmxhY2tsaXN0Om5pbCBpbmpl
Y3Rpb25UaW1lOihydW5BdFN0YXJ0ID8gV2ViSW5qZWN0QXREb2N1bWVudFN0YXJ0IDogV2ViSW5q
ZWN0QXREb2N1bWVudEVuZCkgaW5qZWN0ZWRGcmFtZXM6KGFsbEZyYW1lcyA/IFdlYkluamVjdElu
QWxsRnJhbWVzIDogV2ViSW5qZWN0SW5Ub3BGcmFtZU9ubHkpXTsKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6YWRkVXNlclN0eWxlU2hlZXQoSlNTdHJpbmdSZWYgc291cmNlLCBib29s
IGFsbEZyYW1lcykKK3sKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHNvdXJjZUNGKEFkb3B0
Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHNvdXJjZSkpOwor
ICAgIE5TU3RyaW5nICpzb3VyY2VOUyA9IChOU1N0cmluZyAqKXNvdXJjZUNGLmdldCgpOworICAg
IFtXZWJWaWV3IF9hZGRVc2VyU3R5bGVTaGVldFRvR3JvdXA6QCJvcmcud2Via2l0LkR1bXBSZW5k
ZXJUcmVlIiB3b3JsZDpbV2ViU2NyaXB0V29ybGQgd29ybGRdIHNvdXJjZTpzb3VyY2VOUyB1cmw6
bmlsIHdoaXRlbGlzdDpuaWwgYmxhY2tsaXN0Om5pbCBpbmplY3RlZEZyYW1lczooYWxsRnJhbWVz
ID8gV2ViSW5qZWN0SW5BbGxGcmFtZXMgOiBXZWJJbmplY3RJblRvcEZyYW1lT25seSldOworfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKGJv
b2wgZW5hYmxlZCkKK3sKKyAgICBbW1ttYWluRnJhbWUgd2ViVmlld10gcHJlZmVyZW5jZXNdIHNl
dERldmVsb3BlckV4dHJhc0VuYWJsZWQ6ZW5hYmxlZF07Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxl
ZCkKK3sKKyAgICBbW1ttYWluRnJhbWUgd2ViVmlld10gcHJlZmVyZW5jZXNdIHNldEFzeW5jaHJv
bm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkOmVuYWJsZWRdOworfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzaG93V2ViSW5zcGVjdG9yKCkKK3sKKyAgICBbW1ttYWluRnJhbWUgd2ViVmll
d10gaW5zcGVjdG9yXSBzaG93Om5pbF07Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmNsb3NlV2ViSW5zcGVjdG9yKCkKK3sKKyAgICBbW1ttYWluRnJhbWUgd2ViVmlld10gaW5zcGVj
dG9yXSBjbG9zZTpuaWxdOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0
ZUluV2ViSW5zcGVjdG9yKGxvbmcgY2FsbElkLCBKU1N0cmluZ1JlZiBzY3JpcHQpCit7CisgICAg
UmV0YWluUHRyPENGU3RyaW5nUmVmPiBzY3JpcHRDRihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0
cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBzY3JpcHQpKTsKKyAgICBOU1N0cmluZyAqc2NyaXB0
TlMgPSAoTlNTdHJpbmcgKilzY3JpcHRDRi5nZXQoKTsKKyAgICBbW1ttYWluRnJhbWUgd2ViVmll
d10gaW5zcGVjdG9yXSBldmFsdWF0ZUluRnJvbnRlbmQ6bmlsIGNhbGxJZDpjYWxsSWQgc2NyaXB0
OnNjcmlwdE5TXTsKK30KKwordHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkLCBSZXRhaW5QdHI8V2Vi
U2NyaXB0V29ybGQ+ID4gV29ybGRNYXA7CitzdGF0aWMgV29ybGRNYXAmIHdvcmxkTWFwKCkKK3sK
KyAgICBzdGF0aWMgV29ybGRNYXAmIG1hcCA9ICpuZXcgV29ybGRNYXA7CisgICAgcmV0dXJuIG1h
cDsKK30KKwordW5zaWduZWQgd29ybGRJREZvcldvcmxkKFdlYlNjcmlwdFdvcmxkICp3b3JsZCkK
K3sKKyAgICBXb3JsZE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gd29ybGRNYXAoKS5lbmQoKTsK
KyAgICBmb3IgKFdvcmxkTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHdvcmxkTWFwKCkuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmIChpdC0+c2Vjb25kID09IHdvcmxkKQor
ICAgICAgICAgICAgcmV0dXJuIGl0LT5maXJzdDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30K
Kwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29y
bGRBbmRSZXR1cm5WYWx1ZSh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmpl
Y3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMu
Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRl
ZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJp
bmdSZWYgc2NyaXB0KQoreworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gc2NyaXB0Q0YoQWRv
cHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgc2NyaXB0KSk7
CisgICAgTlNTdHJpbmcgKnNjcmlwdE5TID0gKE5TU3RyaW5nICopc2NyaXB0Q0YuZ2V0KCk7CisK
KyAgICAvLyBBIHdvcmxkSUQgb2YgMCBhbHdheXMgY29ycmVzcG9uZHMgdG8gYSBuZXcgd29ybGQu
IEFueSBvdGhlciB3b3JsZElEIGNvcnJlc3BvbmRzIHRvIGEgd29ybGQKKyAgICAvLyB0aGF0IGlz
IGNyZWF0ZWQgb25jZSBhbmQgY2FjaGVkIGZvcmV2ZXIuCisgICAgV2ViU2NyaXB0V29ybGQgKndv
cmxkOworICAgIGlmICghd29ybGRJRCkKKyAgICAgICAgd29ybGQgPSBbV2ViU2NyaXB0V29ybGQg
d29ybGRdOworICAgIGVsc2UgeworICAgICAgICBSZXRhaW5QdHI8V2ViU2NyaXB0V29ybGQ+JiB3
b3JsZFNsb3QgPSB3b3JsZE1hcCgpLmFkZCh3b3JsZElELCAwKS5pdGVyYXRvci0+c2Vjb25kOwor
ICAgICAgICBpZiAoIXdvcmxkU2xvdCkKKyAgICAgICAgICAgIHdvcmxkU2xvdC5hZG9wdE5TKFtb
V2ViU2NyaXB0V29ybGQgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgd29ybGQgPSB3b3JsZFNsb3Qu
Z2V0KCk7CisgICAgfQorCisgICAgW21haW5GcmFtZSBfc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNj
cmlwdEZyb21TdHJpbmc6c2NyaXB0TlMgd2l0aEdsb2JhbE9iamVjdDpnbG9iYWxPYmplY3QgaW5T
Y3JpcHRXb3JsZDp3b3JsZF07Cit9CisKK0BpbnRlcmZhY2UgQVBJVGVzdERlbGVnYXRlIDogTlNP
YmplY3QKK3sKKyAgICBib29sKiBtX2NvbmRpdGlvbjsKK30KK0BlbmQKKworQGltcGxlbWVudGF0
aW9uIEFQSVRlc3REZWxlZ2F0ZQorCistIChpZClpbml0V2l0aENvbXBsZXRpb25Db25kaXRpb246
KGJvb2wqKWNvbmRpdGlvbgoreworICAgIFtzdXBlciBpbml0XTsKKyAgICBBU1NFUlQoY29uZGl0
aW9uKTsKKyAgICBtX2NvbmRpdGlvbiA9IGNvbmRpdGlvbjsKKyAgICAqbV9jb25kaXRpb24gPSBm
YWxzZTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICop
c2VuZGVyIGRpZEZhaWxMb2FkV2l0aEVycm9yOihOU0Vycm9yICopZXJyb3IgZm9yRnJhbWU6KFdl
YkZyYW1lICopZnJhbWUKK3sKKyAgICBwcmludGYoIkFQSSBUZXN0IGxvYWQgZmFpbGVkXG4iKTsK
KyAgICAqbV9jb25kaXRpb24gPSB0cnVlOworfQorCistICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcg
KilzZW5kZXIgZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvcjooTlNFcnJvciAqKWVycm9y
IGZvckZyYW1lOihXZWJGcmFtZSAqKWZyYW1lCit7CisgICAgcHJpbnRmKCJBUEkgVGVzdCBsb2Fk
IGZhaWxlZCBwcm92aXNpb25hbFxuIik7CisgICAgKm1fY29uZGl0aW9uID0gdHJ1ZTsKK30KKwor
LSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIGRpZEZpbmlzaExvYWRGb3JGcmFtZToo
V2ViRnJhbWUgKilmcmFtZQoreworICAgIHByaW50ZigiQVBJIFRlc3QgbG9hZCBzdWNjZWVkZWRc
biIpOworICAgICptX2NvbmRpdGlvbiA9IHRydWU7Cit9CisKK0BlbmQKKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6YXBpVGVzdE5ld1dpbmRvd0RhdGFMb2FkQmFzZVVSTChKU1N0cmluZ1Jl
ZiB1dGY4RGF0YSwgSlNTdHJpbmdSZWYgYmFzZVVSTCkKK3sKKyAgICBOU0F1dG9yZWxlYXNlUG9v
bCAqcG9vbCA9IFtbTlNBdXRvcmVsZWFzZVBvb2wgYWxsb2NdIGluaXRdOworCisgICAgUmV0YWlu
UHRyPENGU3RyaW5nUmVmPiB1dGY4RGF0YUNGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5n
KGtDRkFsbG9jYXRvckRlZmF1bHQsIHV0ZjhEYXRhKSk7CisgICAgUmV0YWluUHRyPENGU3RyaW5n
UmVmPiBiYXNlVVJMQ0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgYmFzZVVSTCkpOworICAgIAorICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbW1dlYlZp
ZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNaZXJvUmVjdCBmcmFtZU5hbWU6QCIiIGdyb3VwTmFt
ZTpAIiJdOworCisgICAgYm9vbCBkb25lID0gZmFsc2U7CisgICAgQVBJVGVzdERlbGVnYXRlICpk
ZWxlZ2F0ZSA9IFtbQVBJVGVzdERlbGVnYXRlIGFsbG9jXSBpbml0V2l0aENvbXBsZXRpb25Db25k
aXRpb246JmRvbmVdOworICAgIFt3ZWJWaWV3IHNldEZyYW1lTG9hZERlbGVnYXRlOmRlbGVnYXRl
XTsKKworICAgIFtbd2ViVmlldyBtYWluRnJhbWVdIGxvYWREYXRhOlsoTlNTdHJpbmcgKil1dGY4
RGF0YUNGLmdldCgpIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSBNSU1F
VHlwZTpAInRleHQvaHRtbCIgdGV4dEVuY29kaW5nTmFtZTpAInV0Zi04IiBiYXNlVVJMOltOU1VS
TCBVUkxXaXRoU3RyaW5nOihOU1N0cmluZyAqKWJhc2VVUkxDRi5nZXQoKV1dOworICAgIAorICAg
IHdoaWxlICghZG9uZSkgeworICAgICAgICBOU0F1dG9yZWxlYXNlUG9vbCAqcG9vbCA9IFtbTlNB
dXRvcmVsZWFzZVBvb2wgYWxsb2NdIGluaXRdOworICAgICAgICBbW05TUnVuTG9vcCBjdXJyZW50
UnVuTG9vcF0gcnVuTW9kZTpOU0RlZmF1bHRSdW5Mb29wTW9kZSBiZWZvcmVEYXRlOltOU0RhdGUg
ZGlzdGFudFBhc3RdXTsKKyAgICAgICAgW3Bvb2wgcmVsZWFzZV07CisgICAgfQorICAgICAgICAK
KyAgICBbd2ViVmlldyBjbG9zZV07CisgICAgW3dlYlZpZXcgcmVsZWFzZV07CisgICAgW2RlbGVn
YXRlIHJlbGVhc2VdOworICAgIFtwb29sIHJlbGVhc2VdOworfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjphcGlUZXN0R29Ub0N1cnJlbnRCYWNrRm9yd2FyZEl0ZW0oKQoreworICAgIFdl
YlZpZXcgKnZpZXcgPSBbbWFpbkZyYW1lIHdlYlZpZXddOworICAgIFt2aWV3IGdvVG9CYWNrRm9y
d2FyZEl0ZW06W1t2aWV3IGJhY2tGb3J3YXJkTGlzdF0gY3VycmVudEl0ZW1dXTsKK30KKwordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2ViVmlld0VkaXRhYmxlKGJvb2wgZWRpdGFibGUp
Cit7CisgICAgV2ViVmlldyAqdmlldyA9IFttYWluRnJhbWUgd2ViVmlld107CisgICAgW3ZpZXcg
c2V0RWRpdGFibGU6ZWRpdGFibGVdOworfQorCitzdGF0aWMgTlNTdHJpbmcgKlN5bmNocm9ub3Vz
TG9hZGVyUnVuTG9vcE1vZGUgPSBAIkR1bXBSZW5kZXJUcmVlU3luY2hyb25vdXNMb2FkZXJSdW5M
b29wTW9kZSI7CisKKyNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDw9IDEwNjAK
K0Bwcm90b2NvbCBOU1VSTENvbm5lY3Rpb25EZWxlZ2F0ZSA8TlNPYmplY3Q+CitAZW5kCisjZW5k
aWYKKworQGludGVyZmFjZSBTeW5jaHJvbm91c0xvYWRlciA6IE5TT2JqZWN0IDxOU1VSTENvbm5l
Y3Rpb25EZWxlZ2F0ZT4KK3sKKyAgICBOU1N0cmluZyAqbV91c2VybmFtZTsKKyAgICBOU1N0cmlu
ZyAqbV9wYXNzd29yZDsKKyAgICBCT09MIG1faXNEb25lOworfQorKyAodm9pZCltYWtlUmVxdWVz
dDooTlNVUkxSZXF1ZXN0ICopcmVxdWVzdCB3aXRoVXNlcm5hbWU6KE5TU3RyaW5nICopdXNlcm5h
bWUgcGFzc3dvcmQ6KE5TU3RyaW5nICopcGFzc3dvcmQ7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlv
biBTeW5jaHJvbm91c0xvYWRlciA6IE5TT2JqZWN0CistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBb
bV91c2VybmFtZSByZWxlYXNlXTsKKyAgICBbbV9wYXNzd29yZCByZWxlYXNlXTsKKworICAgIFtz
dXBlciBkZWFsbG9jXTsKK30KKworLSAoQk9PTCljb25uZWN0aW9uU2hvdWxkVXNlQ3JlZGVudGlh
bFN0b3JhZ2U6KE5TVVJMQ29ubmVjdGlvbiAqKWNvbm5lY3Rpb24KK3sKKyAgICByZXR1cm4gWUVT
OworfQorCistICh2b2lkKWNvbm5lY3Rpb246KE5TVVJMQ29ubmVjdGlvbiAqKWNvbm5lY3Rpb24g
ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOihOU1VSTEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlICopY2hhbGxlbmdlCit7CisgICAgaWYgKFtjaGFsbGVuZ2UgcHJldmlvdXNGYWlsdXJl
Q291bnRdID09IDApIHsKKyAgICAgICAgUmV0YWluUHRyPE5TVVJMQ3JlZGVudGlhbD4gY3JlZGVu
dGlhbChBZG9wdE5TLCBbW05TVVJMQ3JlZGVudGlhbCBhbGxvY10gIGluaXRXaXRoVXNlcjptX3Vz
ZXJuYW1lIHBhc3N3b3JkOm1fcGFzc3dvcmQgcGVyc2lzdGVuY2U6TlNVUkxDcmVkZW50aWFsUGVy
c2lzdGVuY2VGb3JTZXNzaW9uXSk7CisgICAgICAgIFtbY2hhbGxlbmdlIHNlbmRlcl0gdXNlQ3Jl
ZGVudGlhbDpjcmVkZW50aWFsLmdldCgpIGZvckF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOmNoYWxs
ZW5nZV07CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgW1tjaGFsbGVuZ2Ugc2VuZGVyXSBj
YW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTpjaGFsbGVuZ2VdOworfQorCistICh2b2lkKWNv
bm5lY3Rpb246KE5TVVJMQ29ubmVjdGlvbiAqKWNvbm5lY3Rpb24gZGlkRmFpbFdpdGhFcnJvcjoo
TlNFcnJvciAqKWVycm9yCit7CisgICAgcHJpbnRmKCJTeW5jaHJvbm91c0xvYWRlciBmYWlsZWQ6
ICVzXG4iLCBbW2Vycm9yIGRlc2NyaXB0aW9uXSBVVEY4U3RyaW5nXSk7CisgICAgbV9pc0RvbmUg
PSBZRVM7Cit9CisKKy0gKHZvaWQpY29ubmVjdGlvbkRpZEZpbmlzaExvYWRpbmc6KE5TVVJMQ29u
bmVjdGlvbiAqKWNvbm5lY3Rpb24KK3sKKyAgICBtX2lzRG9uZSA9IFlFUzsKK30KKworKyAodm9p
ZCltYWtlUmVxdWVzdDooTlNVUkxSZXF1ZXN0ICopcmVxdWVzdCB3aXRoVXNlcm5hbWU6KE5TU3Ry
aW5nICopdXNlcm5hbWUgcGFzc3dvcmQ6KE5TU3RyaW5nICopcGFzc3dvcmQKK3sKKyAgICBBU1NF
UlQoIVtbcmVxdWVzdCBVUkxdIHVzZXJdKTsKKyAgICBBU1NFUlQoIVtbcmVxdWVzdCBVUkxdIHBh
c3N3b3JkXSk7CisKKyAgICBTeW5jaHJvbm91c0xvYWRlciAqZGVsZWdhdGUgPSBbW1N5bmNocm9u
b3VzTG9hZGVyIGFsbG9jXSBpbml0XTsKKyAgICBkZWxlZ2F0ZS0+bV91c2VybmFtZSA9IFt1c2Vy
bmFtZSBjb3B5XTsKKyAgICBkZWxlZ2F0ZS0+bV9wYXNzd29yZCA9IFtwYXNzd29yZCBjb3B5XTsK
KworICAgIE5TVVJMQ29ubmVjdGlvbiAqY29ubmVjdGlvbiA9IFtbTlNVUkxDb25uZWN0aW9uIGFs
bG9jXSBpbml0V2l0aFJlcXVlc3Q6cmVxdWVzdCBkZWxlZ2F0ZTpkZWxlZ2F0ZSBzdGFydEltbWVk
aWF0ZWx5Ok5PXTsKKyAgICBbY29ubmVjdGlvbiBzY2hlZHVsZUluUnVuTG9vcDpbTlNSdW5Mb29w
IGN1cnJlbnRSdW5Mb29wXSBmb3JNb2RlOlN5bmNocm9ub3VzTG9hZGVyUnVuTG9vcE1vZGVdOwor
ICAgIFtjb25uZWN0aW9uIHN0YXJ0XTsKKyAgICAKKyAgICB3aGlsZSAoIWRlbGVnYXRlLT5tX2lz
RG9uZSkKKyAgICAgICAgW1tOU1J1bkxvb3AgY3VycmVudFJ1bkxvb3BdIHJ1bk1vZGU6U3luY2hy
b25vdXNMb2FkZXJSdW5Mb29wTW9kZSBiZWZvcmVEYXRlOltOU0RhdGUgZGlzdGFudEZ1dHVyZV1d
OworCisgICAgW2Nvbm5lY3Rpb24gY2FuY2VsXTsKKyAgICAKKyAgICBbY29ubmVjdGlvbiByZWxl
YXNlXTsKKyAgICBbZGVsZWdhdGUgcmVsZWFzZV07Cit9CisKK0BlbmQKKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6YXV0aGVudGljYXRlU2Vzc2lvbihKU1N0cmluZ1JlZiB1cmwsIEpTU3Ry
aW5nUmVmIHVzZXJuYW1lLCBKU1N0cmluZ1JlZiBwYXNzd29yZCkKK3sKKyAgICAvLyBTZWUgPHJk
YXI6Ly9wcm9ibGVtLzc4ODA2OTk+LgorI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlS
RUQgPj0gMTA2MAorICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdXJsU3RyaW5nQ0YoQWRvcHRD
RiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgdXJsKSk7CisgICAg
UmV0YWluUHRyPENGU3RyaW5nUmVmPiB1c2VybmFtZUNGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNG
U3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHVzZXJuYW1lKSk7CisgICAgUmV0YWluUHRyPENG
U3RyaW5nUmVmPiBwYXNzd29yZENGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFs
bG9jYXRvckRlZmF1bHQsIHBhc3N3b3JkKSk7CisKKyAgICBSZXRhaW5QdHI8TlNVUkxSZXF1ZXN0
PiByZXF1ZXN0KEFkb3B0TlMsIFtbTlNVUkxSZXF1ZXN0IGFsbG9jXSBpbml0V2l0aFVSTDpbTlNV
UkwgVVJMV2l0aFN0cmluZzooTlNTdHJpbmcgKil1cmxTdHJpbmdDRi5nZXQoKV1dKTsKKworICAg
IFtTeW5jaHJvbm91c0xvYWRlciBtYWtlUmVxdWVzdDpyZXF1ZXN0LmdldCgpIHdpdGhVc2VybmFt
ZTooTlNTdHJpbmcgKil1c2VybmFtZUNGLmdldCgpIHBhc3N3b3JkOihOU1N0cmluZyAqKXBhc3N3
b3JkQ0YuZ2V0KCldOworI2VuZGlmCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFi
b3J0TW9kYWwoKQoreworICAgIFtOU0FwcCBhYm9ydE1vZGFsXTsKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0U2VyaWFsaXplSFRUUExvYWRzKGJvb2wgc2VyaWFsaXplKQorewor
ICAgIFtXZWJWaWV3IF9zZXRMb2FkUmVzb3VyY2VzU2VyaWFsbHk6c2VyaWFsaXplXTsKK30KKwor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwoZG91Ymxl
IG1pbmltdW1UaW1lckludGVydmFsKQoreworICAgIFtbbWFpbkZyYW1lIHdlYlZpZXddIF9zZXRN
aW5pbXVtVGltZXJJbnRlcnZhbDptaW5pbXVtVGltZXJJbnRlcnZhbF07Cit9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldFRleHREaXJlY3Rpb24oSlNTdHJpbmdSZWYgZGlyZWN0aW9u
TmFtZSkKK3sKKyNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwNjAKKyAg
ICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhkaXJlY3Rpb25OYW1lLCAibHRyIikp
CisgICAgICAgIFtbbWFpbkZyYW1lIHdlYlZpZXddIG1ha2VCYXNlV3JpdGluZ0RpcmVjdGlvbkxl
ZnRUb1JpZ2h0OjBdOworICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
ZGlyZWN0aW9uTmFtZSwgInJ0bCIpKQorICAgICAgICBbW21haW5GcmFtZSB3ZWJWaWV3XSBtYWtl
QmFzZVdyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDowXTsKKyAgICBlbHNlCisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmFkZENocm9tZUlucHV0RmllbGQoKQoreworICAgIE5TVGV4dEZpZWxkICp0ZXh0RmllbGQg
PSBbW05TVGV4dEZpZWxkIGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgMTAw
LCAyMCldOworICAgIHRleHRGaWVsZC50YWcgPSAxOworICAgIFtbW1ttYWluRnJhbWUgd2ViVmll
d10gd2luZG93XSBjb250ZW50Vmlld10gYWRkU3Vidmlldzp0ZXh0RmllbGRdOworICAgIFt0ZXh0
RmllbGQgcmVsZWFzZV07CisgICAgCisgICAgW3RleHRGaWVsZCBzZXROZXh0S2V5VmlldzpbbWFp
bkZyYW1lIHdlYlZpZXddXTsKKyAgICBbW21haW5GcmFtZSB3ZWJWaWV3XSBzZXROZXh0S2V5Vmll
dzp0ZXh0RmllbGRdOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZW1vdmVDaHJv
bWVJbnB1dEZpZWxkKCkKK3sKKyAgICBOU1ZpZXcqIHRleHRGaWVsZCA9IFtbW1ttYWluRnJhbWUg
d2ViVmlld10gd2luZG93XSBjb250ZW50Vmlld10gdmlld1dpdGhUYWc6MV07CisgICAgaWYgKHRl
eHRGaWVsZCkgeworICAgICAgICBbdGV4dEZpZWxkIHJlbW92ZUZyb21TdXBlcnZpZXddOworICAg
ICAgICBmb2N1c1dlYlZpZXcoKTsKKyAgICB9Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmZvY3VzV2ViVmlldygpCit7CisgICAgW1tbbWFpbkZyYW1lIHdlYlZpZXddIHdpbmRvd10g
bWFrZUZpcnN0UmVzcG9uZGVyOlttYWluRnJhbWUgd2ViVmlld11dOworfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRCYWNraW5nU2NhbGVGYWN0b3IoZG91YmxlIGJhY2tpbmdTY2Fs
ZUZhY3RvcikKK3sKKyAgICBbW21haW5GcmFtZSB3ZWJWaWV3XSBfc2V0Q3VzdG9tQmFja2luZ1Nj
YWxlRmFjdG9yOmJhY2tpbmdTY2FsZUZhY3Rvcl07Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNpbXVsYXRlRGVza3RvcE5vdGlmaWNhdGlvbkNsaWNrKEpTU3RyaW5nUmVmIHRpdGxl
KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnJlc2V0UGFnZVZpc2liaWxpdHkoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQu
Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBhZ2VWaXNpYmlsaXR5KGNvbnN0
IGNoYXIqKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNlbmRXZWJJbnRlbnRSZXNwb25zZShKU1N0cmluZ1JlZikKK3sKKyAgICAv
LyBGSVhNRTogSW1wbGVtZW50LgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxp
dmVyV2ViSW50ZW50KEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYpCit7Cisg
ICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21h
Yy9UZXN0UnVubmVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21h
Yy9UZXN0UnVubmVyTWFjLm1tCShyZXZpc2lvbiAxMjUzMzUpCisrKyBUb29scy9EdW1wUmVuZGVy
VHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBA
QAogCiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIkR1bXBSZW5kZXJUcmVlLmgiCi0jaW1w
b3J0ICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgorI2ltcG9ydCAiVGVzdFJ1bm5lci5oIgogCiAj
aW1wb3J0ICJFZGl0aW5nRGVsZWdhdGUuaCIKICNpbXBvcnQgIk1vY2tHZW9sb2NhdGlvblByb3Zp
ZGVyLmgiCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVUlEZWxlZ2F0ZS5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVUlEZWxlZ2F0ZS5tbQkocmV2aXNp
b24gMTI1MzM1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1VJRGVsZWdhdGUubW0JKHdv
cmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbXBvcnQgIkR1bXBSZW5kZXJUcmVlLmgi
CiAjaW1wb3J0ICJEdW1wUmVuZGVyVHJlZURyYWdnaW5nSW5mby5oIgogI2ltcG9ydCAiRXZlbnRT
ZW5kaW5nQ29udHJvbGxlci5oIgotI2ltcG9ydCAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKKyNp
bXBvcnQgIlRlc3RSdW5uZXIuaCIKICNpbXBvcnQgPFdlYktpdC9XZWJBcHBsaWNhdGlvbkNhY2hl
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViRnJhbWVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQv
V2ViSFRNTFZpZXdQcml2YXRlLmg+CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1w
UmVuZGVyVHJlZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVt
cFJlbmRlclRyZWUucHJvCShyZXZpc2lvbiAxMjUzMzUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJl
ZS9xdC9EdW1wUmVuZGVyVHJlZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAg
SEVBREVSUyArPSBcCiAgICAgRXZlbnRTZW5kZXJRdC5oIFwKICAgICBUZXh0SW5wdXRDb250cm9s
bGVyUXQuaCBcCiAgICAgV29ya1F1ZXVlSXRlbVF0LmggXAotICAgIExheW91dFRlc3RDb250cm9s
bGVyUXQuaCBcCisgICAgVGVzdFJ1bm5lclF0LmggXAogICAgIEdDQ29udHJvbGxlclF0LmggXAog
ICAgIFF0SW5pdGlhbGl6ZVRlc3RGb250cy5oIFwKICAgICB0ZXN0cGx1Z2luLmgKQEAgLTQyLDcg
KzQyLDcgQEAgU09VUkNFUyArPSBcCiAgICAgRXZlbnRTZW5kZXJRdC5jcHAgXAogICAgIFRleHRJ
bnB1dENvbnRyb2xsZXJRdC5jcHAgXAogICAgIFdvcmtRdWV1ZUl0ZW1RdC5jcHAgXAotICAgIExh
eW91dFRlc3RDb250cm9sbGVyUXQuY3BwIFwKKyAgICBUZXN0UnVubmVyUXQuY3BwIFwKICAgICBH
Q0NvbnRyb2xsZXJRdC5jcHAgXAogICAgIFF0SW5pdGlhbGl6ZVRlc3RGb250cy5jcHAgXAogICAg
IHRlc3RwbHVnaW4uY3BwIFwKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5k
ZXJUcmVlUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBS
ZW5kZXJUcmVlUXQuY3BwCShyZXZpc2lvbiAxMjUzMzUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJl
ZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBA
QAogI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmgiCiAjaW5jbHVkZSAiRXZlbnRT
ZW5kZXJRdC5oIgogI2luY2x1ZGUgIkdDQ29udHJvbGxlclF0LmgiCi0jaW5jbHVkZSAiTGF5b3V0
VGVzdENvbnRyb2xsZXJRdC5oIgorI2luY2x1ZGUgIlRlc3RSdW5uZXJRdC5oIgogI2luY2x1ZGUg
IlRleHRJbnB1dENvbnRyb2xsZXJRdC5oIgogI2luY2x1ZGUgIlF0SW5pdGlhbGl6ZVRlc3RGb250
cy5oIgogI2luY2x1ZGUgInRlc3RwbHVnaW4uaCIKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVl
L3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCShyZXZpc2lvbiAxMjUzMzUp
CisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw5ODggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqIENvcHly
aWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNv
bS8KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENv
bXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9sbGVyUXQuaCIK
LSNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5oIgotCi0jaW5jbHVkZSAiRHVtcFJl
bmRlclRyZWVRdC5oIgotI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgotI2luY2x1ZGUgIldvcmtRdWV1
ZUl0ZW1RdC5oIgotI2luY2x1ZGUgPFFDb3JlQXBwbGljYXRpb24+Ci0jaW5jbHVkZSA8UURpcj4K
LSNpbmNsdWRlIDxRTG9jYWxlPgotI2luY2x1ZGUgPHF3ZWJzZXR0aW5ncy5oPgotCi1MYXlvdXRU
ZXN0Q29udHJvbGxlcjo6TGF5b3V0VGVzdENvbnRyb2xsZXIoV2ViQ29yZTo6RHVtcFJlbmRlclRy
ZWUqIGRydCkKLSAgICA6IFFPYmplY3QoKQotICAgICwgbV9kcnQoZHJ0KQotICAgICwgbV9zaG91
bGRUaW1lb3V0KHRydWUpCi0gICAgLCBtX3RpbWVvdXQoMzAwMDApCi17Ci0gICAgcmVzZXQoKTsK
LSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVtcE5vdGlmaWNhdGlvbih0cnVlKTsKLX0K
LQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVzZXQoKQotewotICAgIG1faGFzRHVtcGVk
ID0gZmFsc2U7Ci0gICAgbV9sb2FkRmluaXNoZWQgPSBmYWxzZTsKLSAgICBtX3RleHREdW1wID0g
ZmFsc2U7Ci0gICAgbV9kdW1wQmFja0ZvcndhcmRMaXN0ID0gZmFsc2U7Ci0gICAgbV9kdW1wQ2hp
bGRyZW5Bc1RleHQgPSBmYWxzZTsKLSAgICBtX2R1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25z
ID0gZmFsc2U7Ci0gICAgbV9jYW5PcGVuV2luZG93cyA9IGZhbHNlOwotICAgIG1fd2FpdEZvckRv
bmUgPSBmYWxzZTsKLSAgICBtX2Rpc2FsbG93SW5jcmVhc2VGb3JBcHBsaWNhdGlvbkNhY2hlUXVv
dGEgPSBmYWxzZTsKLSAgICBtX2R1bXBUaXRsZUNoYW5nZXMgPSBmYWxzZTsKLSAgICBtX2R1bXBE
YXRhYmFzZUNhbGxiYWNrcyA9IGZhbHNlOwotICAgIG1fZHVtcEFwcGxpY2F0aW9uQ2FjaGVEZWxl
Z2F0ZUNhbGxiYWNrcyA9IGZhbHNlOwotICAgIG1fZHVtcFN0YXR1c0NhbGxiYWNrcyA9IGZhbHNl
OwotICAgIG1fdGltZW91dFRpbWVyLnN0b3AoKTsKLSAgICBtX3RvcExvYWRpbmdGcmFtZSA9IDA7
Ci0gICAgbV93YWl0Rm9yUG9saWN5ID0gZmFsc2U7Ci0gICAgbV9oYW5kbGVFcnJvclBhZ2VzID0g
ZmFsc2U7Ci0gICAgbV93ZWJIaXN0b3J5ID0gMDsKLSAgICBtX2dsb2JhbEZsYWcgPSBmYWxzZTsK
LSAgICBtX3VzZXJTdHlsZVNoZWV0RW5hYmxlZCA9IGZhbHNlOwotICAgIG1fZGVza3RvcE5vdGlm
aWNhdGlvbkFsbG93ZWRPcmlnaW5zLmNsZWFyKCk7Ci0gICAgbV9pZ25vcmVEZXNrdG9wTm90aWZp
Y2F0aW9uID0gZmFsc2U7Ci0gICAgbV9pc0dlb2xvY2F0aW9uUGVybWlzc2lvblNldCA9IGZhbHNl
OwotICAgIG1faXNQcmludGluZyA9IGZhbHNlOwotICAgIG1fZ2VvbG9jYXRpb25QZXJtaXNzaW9u
ID0gZmFsc2U7Ci0KLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVtcEVkaXRpbmdDYWxs
YmFja3MoZmFsc2UpOwotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wRnJhbWVMb2Fk
ZXIoZmFsc2UpOwotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wUHJvZ3Jlc3NGaW5p
c2hlZENhbGxiYWNrKGZhbHNlKTsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVtcFVz
ZXJHZXN0dXJlSW5GcmFtZUxvYWRlcihmYWxzZSk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQ6OmR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoZmFsc2UpOwotICAgIER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0OjpkdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcyhmYWxzZSk7Ci0gICAgRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBXaWxsQ2FjaGVSZXNwb25zZUNhbGxiYWNrcyhmYWxz
ZSk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldERlZmVyTWFpblJlc291cmNlRGF0
YUxvYWQodHJ1ZSk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldFdpbGxTZW5kUmVx
dWVzdFJldHVybnNOdWxsT25SZWRpcmVjdChmYWxzZSk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBw
b3J0UXQ6OnNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsKGZhbHNlKTsKLSAgICBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6c2V0V2lsbFNlbmRSZXF1ZXN0Q2xlYXJIZWFkZXJzKFFTdHJpbmdM
aXN0KCkpOwotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpjbGVhclNjcmlwdFdvcmxkcygp
OwotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShm
YWxzZSwgZmFsc2UpOwotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wSGlzdG9yeUNh
bGxiYWNrcyhmYWxzZSk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBWaXNpdGVk
TGlua3NDYWxsYmFja3MoZmFsc2UpOwotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpyZXNl
dEdlb2xvY2F0aW9uTW9jayhtX2RydC0+d2ViUGFnZSgpKTsKLSAgICBzZXRJY29uRGF0YWJhc2VF
bmFibGVkKGZhbHNlKTsKLSAgICBjbGVhckFsbERhdGFiYXNlcygpOwotICAgIC8vIFRoZSBkZWZh
dWx0IHN0YXRlIGZvciBEUlQgaXMgdG8gYmxvY2sgdGhpcmQtcGFydHkgY29va2llcywgbWltaWNp
bmcgdGhlIE1hYyBwb3J0Ci0gICAgc2V0QWx3YXlzQWNjZXB0Q29va2llcyhmYWxzZSk7Ci0gICAg
ZW1pdCBoaWRlUGFnZSgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpwcm9jZXNz
V29yaygpCi17Ci0gICAgLy8gcURlYnVnKCkgPDwgIj4+PnByb2Nlc3NXb3JrIjsKLQotICAgIC8v
IGlmIHdlIGRpZG4ndCBzdGFydCBhIG5ldyBsb2FkLCB0aGVuIHdlIGZpbmlzaGVkIGFsbCB0aGUg
Y29tbWFuZHMsIHNvIHdlJ3JlIHJlYWR5IHRvIGR1bXAgc3RhdGUKLSAgICBpZiAoV29ya1F1ZXVl
OjpzaGFyZWQoKS0+cHJvY2Vzc1dvcmsoKSAmJiAhc2hvdWxkV2FpdFVudGlsRG9uZSgpKSB7Ci0g
ICAgICAgIGVtaXQgZG9uZSgpOwotICAgICAgICBtX2hhc0R1bXBlZCA9IHRydWU7Ci0gICAgfQot
fQotCi0vLyBDYWxsZWQgb24gbG9hZEZpbmlzaGVkIG9uIFdlYlBhZ2UKLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6Om1heWJlRHVtcChib29sIC8qc3VjY2VzcyovKQotewotCi0gICAgLy8gVGhp
cyBjYW4gaGFwcGVuIG9uIGFueSBvZiB0aGUgaHR0cC90ZXN0cy9zZWN1cml0eS93aW5kb3ctZXZl
bnRzLSouaHRtbCB0ZXN0cywgd2hlcmUgdGhlIHRlc3Qgb3BlbnMKLSAgICAvLyBhIG5ldyB3aW5k
b3csIGNhbGxzIHRoZSB1bmxvYWQgYW5kIGxvYWQgZXZlbnQgaGFuZGxlcnMgb24gdGhlIHdpbmRv
dydzIHBhZ2UsIGFuZCB0aGVuIGltbWVkaWF0ZWx5Ci0gICAgLy8gaXNzdWVzIGEgbm90aWZ5RG9u
ZS4gTmVlZHMgaW52ZXN0aWdhdGlvbi4KLSAgICBpZiAoIW1fdG9wTG9hZGluZ0ZyYW1lKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBJdCBpcyBwb3NzaWJsZSB0aGF0IHdlIGdldCBjYWxsZWQg
Ynkgd2luZG93cyBjcmVhdGVkIGZyb20gdGhlIG1haW4gcGFnZSB0aGF0IGhhdmUgZmluaXNoZWQK
LSAgICAvLyBsb2FkaW5nLCBzbyB3ZSBkb24ndCBBU1NFUlQgaGVyZS4gQXQgdGhlIG1vbWVudCB3
ZSBkbyBub3QgZ2F0aGVyIHJlc3VsdHMgZnJvbSBzdWNoIHdpbmRvd3MsCi0gICAgLy8gYnV0IG1h
eSBuZWVkIHRvIGluIGZ1dHVyZS4KLSAgICBpZiAoc2VuZGVyKCkgIT0gbV90b3BMb2FkaW5nRnJh
bWUtPnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9sb2FkRmluaXNoZWQgPSB0cnVl
OwotICAgIC8vIGFzIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgb24gbG9hZEZpbmlzaGVkLCB0aGUg
dGVzdCBtaWdodAotICAgIC8vIGFscmVhZHkgaGF2ZSBkdW1wZWQgYW5kIHRodXMgbm8gbG9uZ2Vy
IGJlIGFjdGl2ZSwgdGh1cwotICAgIC8vIGJhaWwgb3V0IGhlcmUuCi0gICAgaWYgKG1faGFzRHVt
cGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5zZXRGcm96
ZW4odHJ1ZSk7IC8vIGZpcnN0IGNvbXBsZXRlIGxvYWQgZnJlZXplcyB0aGUgcXVldWUgZm9yIHRo
ZSByZXN0IG9mIHRoaXMgdGVzdAotICAgIGlmIChXb3JrUXVldWU6OnNoYXJlZCgpLT5jb3VudCgp
KQotICAgICAgICBRVGltZXI6OnNpbmdsZVNob3QoMCwgdGhpcywgU0xPVChwcm9jZXNzV29yaygp
KSk7Ci0gICAgZWxzZSBpZiAoIXNob3VsZFdhaXRVbnRpbERvbmUoKSkgewotICAgICAgICBlbWl0
IGRvbmUoKTsKLSAgICAgICAgbV9oYXNEdW1wZWQgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6d2FpdFVudGlsRG9uZSgpCi17Ci0gICAgLy9xRGVidWcoKSA8
PCAiPj4+PndhaXRGb3JEb25lIjsKLSAgICBtX3dhaXRGb3JEb25lID0gdHJ1ZTsKLQotICAgIGlm
ICghbV9zaG91bGRUaW1lb3V0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3RpbWVvdXRUaW1l
ci5zdGFydChtX3RpbWVvdXQsIHRoaXMpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRWaWV3TW9kZU1lZGlhRmVhdHVyZShjb25zdCBRU3RyaW5nJiBtb2RlKQotewotICAgIG1f
ZHJ0LT53ZWJQYWdlKCktPnNldFByb3BlcnR5KCJfcV92aWV3TW9kZSIsIG1vZGUpOwotfQotCi1p
bnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndlYkhpc3RvcnlJdGVtQ291bnQoKQotewotICAgIGlm
ICghbV93ZWJIaXN0b3J5KQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICAvLyBTdWJ0cmFjdCBv
bmUgaGVyZSBhcyBvdXIgUVdlYkhpc3Rvcnk6OmNvdW50KCkgaW5jbHVkZXMgdGhlIGFjdHVhbCBw
YWdlLAotICAgIC8vIHdoaWNoIGlzIG5vdCBjb25zaWRlcmVkIGluIHRoZSBEUlQgdGVzdHMuCi0g
ICAgcmV0dXJuIG1fd2ViSGlzdG9yeS0+Y291bnQoKSAtIDE7Ci19Ci0KLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmtlZXBXZWJIaXN0b3J5KCkKLXsKLSAgICBtX3dlYkhpc3RvcnkgPSBtX2Ry
dC0+d2ViUGFnZSgpLT5oaXN0b3J5KCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
Om5vdGlmeURvbmUoKQotewotICAgIHFEZWJ1ZygpIDw8ICI+Pj4+bm90aWZ5RG9uZSI7Ci0KLSAg
ICBpZiAobV9zaG91bGRUaW1lb3V0ICYmICFtX3RpbWVvdXRUaW1lci5pc0FjdGl2ZSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX3RpbWVvdXRUaW1lci5zdG9wKCk7Ci0gICAgbV93YWl0Rm9y
RG9uZSA9IGZhbHNlOwotCi0gICAgLy8gSWYgdGhlIHBhZ2UgaGFzIG5vdCBmaW5pc2hlZCBsb2Fk
aW5nIChpLmUuIGxvYWRGaW5pc2hlZCgpIGhhcyBub3QgYmVlbiBlbWl0dGVkKSB0aGVuCi0gICAg
Ly8gY29udGVudCBjcmVhdGVkIGJ5IHRoZSBsaWtlcyBvZiBkb2N1bWVudC53cml0ZSgpIEpTIG1l
dGhvZHMgd2lsbCBub3QgYmUgYXZhaWxhYmxlIHlldC4KLSAgICAvLyBXaGVuIHRoZSBwYWdlIGhh
cyBmaW5pc2hlZCBsb2FkaW5nLCBtYXliZUR1bXAgYWJvdmUgd2lsbCBkdW1wIHRoZSByZXN1bHRz
IG5vdyB0aGF0IHdlIGhhdmUKLSAgICAvLyBqdXN0IHNldCBzaG91bGRXYWl0VW50aWxEb25lIHRv
IGZhbHNlLgotICAgIGlmICghbV9sb2FkRmluaXNoZWQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGVtaXQgZG9uZSgpOwotCi0gICAgLy8gRklYTUU6IGludmVzdGlnYXRlIHdoeSBhbHdheXMgcmVz
ZXR0aW5nIHRoZXNlIHJlc3VsdCBpbiB0aW1lb3V0cwotICAgIG1faGFzRHVtcGVkID0gdHJ1ZTsK
LSAgICBtX3dhaXRGb3JQb2xpY3kgPSBmYWxzZTsKLX0KLQotaW50IExheW91dFRlc3RDb250cm9s
bGVyOjp3aW5kb3dDb3VudCgpCi17Ci0gICAgcmV0dXJuIG1fZHJ0LT53aW5kb3dDb3VudCgpOwot
fQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpncmFudERlc2t0b3BOb3RpZmljYXRpb25Q
ZXJtaXNzaW9uKGNvbnN0IFFTdHJpbmcmIG9yaWdpbikKLXsKLSAgICBRV2ViRnJhbWUqIGZyYW1l
ID0gbV9kcnQtPndlYlBhZ2UoKS0+bWFpbkZyYW1lKCk7Ci0gICAgbV9kcnQtPndlYlBhZ2UoKS0+
c2V0RmVhdHVyZVBlcm1pc3Npb24oZnJhbWUsIFFXZWJQYWdlOjpOb3RpZmljYXRpb25zLCBRV2Vi
UGFnZTo6UGVybWlzc2lvbkdyYW50ZWRCeVVzZXIpOwotICAgIG1fZGVza3RvcE5vdGlmaWNhdGlv
bkFsbG93ZWRPcmlnaW5zLmFwcGVuZChvcmlnaW4pOwotfQotCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjppZ25vcmVEZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKCkKLXsK
LSAgICBtX2lnbm9yZURlc2t0b3BOb3RpZmljYXRpb24gPSB0cnVlOwotfQotCi1ib29sIExheW91
dFRlc3RDb250cm9sbGVyOjpjaGVja0Rlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uKGNvbnN0
IFFTdHJpbmcmIG9yaWdpbikKLXsKLSAgICByZXR1cm4gIW1faWdub3JlRGVza3RvcE5vdGlmaWNh
dGlvbiAmJiBtX2Rlc2t0b3BOb3RpZmljYXRpb25BbGxvd2VkT3JpZ2lucy5jb250YWlucyhvcmln
aW4pOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzaW11bGF0ZURlc2t0b3BOb3Rp
ZmljYXRpb25DbGljayhjb25zdCBRU3RyaW5nJiB0aXRsZSkKLXsKLSAgICBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRRdDo6c2ltdWxhdGVEZXNrdG9wTm90aWZpY2F0aW9uQ2xpY2sodGl0bGUpOwotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNwbGF5KCkKLXsKLSAgICBlbWl0IHNob3dQ
YWdlKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc3BsYXlJbnZhbGlkYXRl
ZFJlZ2lvbigpCi17Ci0gICAgZGlzcGxheSgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpjbGVhckJhY2tGb3J3YXJkTGlzdCgpCi17Ci0gICAgbV9kcnQtPndlYlBhZ2UoKS0+aGlz
dG9yeSgpLT5jbGVhcigpOwotfQotCi1RU3RyaW5nIExheW91dFRlc3RDb250cm9sbGVyOjpwYXRo
VG9Mb2NhbFJlc291cmNlKGNvbnN0IFFTdHJpbmcmIHVybCkKLXsKLSAgICBRU3RyaW5nIGxvY2Fs
VG1wVXJsKFFMYXRpbjFTdHJpbmcoImZpbGU6Ly8vdG1wL0xheW91dFRlc3RzIikpOwotCi0gICAg
Ly8gVHJhbnNsYXRlIGEgcmVxdWVzdCBmb3IgL3RtcC9MYXlvdXRUZXN0cyB0byB0aGUgcmVwb3Np
dG9yeSBMYXlvdXRUZXN0cyBkaXJlY3RvcnkuCi0gICAgLy8gRG8gbm90IHJlbHkgb24gYSBzeW1s
aW5rIHRvIGJlIGNyZWF0ZWQgdmlhIHRoZSB0ZXN0IHJ1bm5lciwgd2hpY2ggd2lsbCBub3Qgd29y
ayBvbiBXaW5kb3dzLgotICAgIGlmICh1cmwuc3RhcnRzV2l0aChsb2NhbFRtcFVybCkpIHsKLSAg
ICAgICAgLy8gRHVtcFJlbmRlclRyZWUgbGl2ZXMgaW4gV2ViS2l0L1dlYktpdEJ1aWxkLzxidWls
ZF9tb2RlPi9iaW4uCi0gICAgICAgIC8vIFRyYW5zbGF0ZSBmcm9tIFdlYktpdC9XZWJLaXRCdWls
ZC9SZWxlYXNlL2JpbiA9PiBXZWJLaXQvTGF5b3V0VGVzdHMuCi0gICAgICAgIFFGaWxlSW5mbyBs
YXlvdXRUZXN0c1Jvb3QoUUNvcmVBcHBsaWNhdGlvbjo6YXBwbGljYXRpb25EaXJQYXRoKCkgKyBR
TGF0aW4xU3RyaW5nKCIvLi4vLi4vLi4vTGF5b3V0VGVzdHMvIikpOwotICAgICAgICBpZiAobGF5
b3V0VGVzdHNSb290LmV4aXN0cygpKQotICAgICAgICAgICAgcmV0dXJuIFFMYXRpbjFTdHJpbmco
ImZpbGU6Ly8iKSArIGxheW91dFRlc3RzUm9vdC5hYnNvbHV0ZVBhdGgoKSArIHVybC5taWQobG9j
YWxUbXBVcmwubGVuZ3RoKCkpOwotICAgIH0KLQotICAgIHJldHVybiB1cmw7Ci19Ci0KLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkKLXsKLSAgICBxRGVi
dWcoKSA8PCAiPj4+ZHVtcEVkaXRpbmdDYWxsYmFja3MiOwotICAgIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0OjpkdW1wRWRpdGluZ0NhbGxiYWNrcyh0cnVlKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpCi17Ci0gICAgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OmR1bXBGcmFtZUxvYWRlcih0cnVlKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjaygpCi17Ci0gICAgRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2sodHJ1ZSk7Ci19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2Fk
Q2FsbGJhY2tzKCkKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVtcFVzZXJHZXN0
dXJlSW5GcmFtZUxvYWRlcih0cnVlKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
ZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQ6OmR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3ModHJ1ZSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmR1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzKCkKLXsKLSAgICBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXModHJ1ZSk7
Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBXaWxsQ2FjaGVSZXNwb25zZSgp
Ci17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBXaWxsQ2FjaGVSZXNwb25zZUNh
bGxiYWNrcyh0cnVlKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcEhpc3Rv
cnlDYWxsYmFja3MoKQotewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wSGlzdG9y
eUNhbGxiYWNrcyh0cnVlKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2ls
bFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0KGJvb2wgZW5hYmxlZCkKLXsKLSAgICBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJl
ZGlyZWN0KGVuYWJsZWQpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXaWxs
U2VuZFJlcXVlc3RSZXR1cm5zTnVsbChib29sIGVuYWJsZWQpCi17Ci0gICAgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OnNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsKGVuYWJsZWQpOwotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXaWxsU2VuZFJlcXVlc3RDbGVhckhlYWRl
cihjb25zdCBRU3RyaW5nTGlzdCYgaGVhZGVycykKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6c2V0V2lsbFNlbmRSZXF1ZXN0Q2xlYXJIZWFkZXJzKGhlYWRlcnMpOwotfQotCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXREZWZlck1haW5SZXNvdXJjZURhdGFMb2FkKGJvb2wg
ZGVmZXIpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldERlZmVyTWFpblJlc291
cmNlRGF0YUxvYWQoZGVmZXIpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1
ZUJhY2tOYXZpZ2F0aW9uKGludCBob3dGYXJCYWNrd2FyZCkKLXsKLSAgICAvL3FEZWJ1ZygpIDw8
ICI+Pj5xdWV1ZUJhY2tOYXZpZ2F0aW9uIiA8PCBob3dGYXJCYWNrd2FyZDsKLSAgICBmb3IgKGlu
dCBpID0gMDsgaSAhPSBob3dGYXJCYWNrd2FyZDsgKytpKQotICAgICAgICBXb3JrUXVldWU6OnNo
YXJlZCgpLT5xdWV1ZShuZXcgQmFja0l0ZW0oMSwgbV9kcnQtPndlYlBhZ2UoKSkpOwotfQotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUZvcndhcmROYXZpZ2F0aW9uKGludCBob3dG
YXJGb3J3YXJkKQotewotICAgIC8vcURlYnVnKCkgPDwgIj4+PnF1ZXVlRm9yd2FyZE5hdmlnYXRp
b24iIDw8IGhvd0ZhckZvcndhcmQ7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgIT0gaG93RmFyRm9y
d2FyZDsgKytpKQotICAgICAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcgRm9yd2Fy
ZEl0ZW0oMSwgbV9kcnQtPndlYlBhZ2UoKSkpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpxdWV1ZUxvYWQoY29uc3QgUVN0cmluZyYgdXJsLCBjb25zdCBRU3RyaW5nJiB0YXJnZXQp
Ci17Ci0gICAgLy9xRGVidWcoKSA8PCAiPj4+cXVldWVMb2FkIiA8PCB1cmwgPDwgdGFyZ2V0Owot
ICAgIFFVcmwgbWFpblJlc291cmNlVXJsID0gbV9kcnQtPndlYlBhZ2UoKS0+bWFpbkZyYW1lKCkt
PnVybCgpOwotICAgIFFTdHJpbmcgYWJzb2x1dGVVcmwgPSBtYWluUmVzb3VyY2VVcmwucmVzb2x2
ZWQoUVVybCh1cmwpKS50b0VuY29kZWQoKTsKLSAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1
ZShuZXcgTG9hZEl0ZW0oYWJzb2x1dGVVcmwsIHRhcmdldCwgbV9kcnQtPndlYlBhZ2UoKSkpOwot
fQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxvYWRIVE1MU3RyaW5nKGNvbnN0
IFFTdHJpbmcmIGNvbnRlbnQsIGNvbnN0IFFTdHJpbmcmIGJhc2VVUkwsIGNvbnN0IFFTdHJpbmcm
IGZhaWxpbmdVUkwpCi17Ci0gICAgaWYgKGZhaWxpbmdVUkwuaXNFbXB0eSgpKQotICAgICAgICBX
b3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcgTG9hZEhUTUxTdHJpbmdJdGVtKGNvbnRlbnQs
IGJhc2VVUkwsIG1fZHJ0LT53ZWJQYWdlKCkpKTsKLSAgICBlbHNlCi0gICAgICAgIFdvcmtRdWV1
ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBMb2FkQWx0ZXJuYXRlSFRNTFN0cmluZ0l0ZW0oY29udGVu
dCwgYmFzZVVSTCwgZmFpbGluZ1VSTCwgbV9kcnQtPndlYlBhZ2UoKSkpOwotfQotCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZVJlbG9hZCgpCi17Ci0gICAgLy9xRGVidWcoKSA8PCAi
Pj4+cXVldWVSZWxvYWQiOwotICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBSZWxv
YWRJdGVtKG1fZHJ0LT53ZWJQYWdlKCkpKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6cXVldWVMb2FkaW5nU2NyaXB0KGNvbnN0IFFTdHJpbmcmIHNjcmlwdCkKLXsKLSAgICAvL3FE
ZWJ1ZygpIDw8ICI+Pj5xdWV1ZUxvYWRpbmdTY3JpcHQiIDw8IHNjcmlwdDsKLSAgICBXb3JrUXVl
dWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcgTG9hZGluZ1NjcmlwdEl0ZW0oc2NyaXB0LCBtX2RydC0+
d2ViUGFnZSgpKSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVlTm9uTG9h
ZGluZ1NjcmlwdChjb25zdCBRU3RyaW5nJiBzY3JpcHQpCi17Ci0gICAgLy9xRGVidWcoKSA8PCAi
Pj4+cXVldWVOb25Mb2FkaW5nU2NyaXB0IiA8PCBzY3JpcHQ7Ci0gICAgV29ya1F1ZXVlOjpzaGFy
ZWQoKS0+cXVldWUobmV3IE5vbkxvYWRpbmdTY3JpcHRJdGVtKHNjcmlwdCwgbV9kcnQtPndlYlBh
Z2UoKSkpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpwcm92aXNpb25hbExvYWQo
KQotewotICAgIFFXZWJGcmFtZSogZnJhbWUgPSBxb2JqZWN0X2Nhc3Q8UVdlYkZyYW1lKj4oc2Vu
ZGVyKCkpOwotICAgIGlmICghbV90b3BMb2FkaW5nRnJhbWUgJiYgIW1faGFzRHVtcGVkKQotICAg
ICAgICBtX3RvcExvYWRpbmdGcmFtZSA9IGZyYW1lOwotfQotCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjp0aW1lckV2ZW50KFFUaW1lckV2ZW50ICpldikKLXsKLSAgICBpZiAoZXYtPnRpbWVy
SWQoKSA9PSBtX3RpbWVvdXRUaW1lci50aW1lcklkKCkpIHsKLSAgICAgICAgY29uc3QgY2hhciog
bWVzc2FnZSA9ICJGQUlMOiBUaW1lZCBvdXQgd2FpdGluZyBmb3Igbm90aWZ5RG9uZSB0byBiZSBj
YWxsZWRcbiI7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMiLCBtZXNzYWdlKTsKLSAgICAg
ICAgZnByaW50ZihzdGRvdXQsICIlcyIsIG1lc3NhZ2UpOwotICAgICAgICBub3RpZnlEb25lKCk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIFFPYmplY3Q6OnRpbWVyRXZlbnQoZXYpOwotfQotCi1RU3Ry
aW5nIExheW91dFRlc3RDb250cm9sbGVyOjplbmNvZGVIb3N0TmFtZShjb25zdCBRU3RyaW5nJiBo
b3N0KQotewotICAgIFFTdHJpbmcgZW5jb2RlZCA9IFFTdHJpbmc6OmZyb21MYXRpbjEoUVVybDo6
dG9BY2UoaG9zdCArIFFMYXRpbjFTdHJpbmcoIi5ubyIpKSk7Ci0gICAgZW5jb2RlZC50cnVuY2F0
ZShlbmNvZGVkLmxlbmd0aCgpIC0gMyk7IC8vIHN0cmlwIC5ubwotICAgIHJldHVybiBlbmNvZGVk
OwotfQotCi1RU3RyaW5nIExheW91dFRlc3RDb250cm9sbGVyOjpkZWNvZGVIb3N0TmFtZShjb25z
dCBRU3RyaW5nJiBob3N0KQotewotICAgIFFTdHJpbmcgZGVjb2RlZCA9IFFVcmw6OmZyb21BY2Uo
aG9zdC50b0xhdGluMSgpICsgUUJ5dGVBcnJheSgiLm5vIikpOwotICAgIGRlY29kZWQudHJ1bmNh
dGUoZGVjb2RlZC5sZW5ndGgoKSAtIDMpOwotICAgIHJldHVybiBkZWNvZGVkOwotfQotCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNZWRpYVR5cGUoY29uc3QgUVN0cmluZyYgdHlwZSkK
LXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0TWVkaWFUeXBlKG1fZHJ0LT53ZWJQ
YWdlKCktPm1haW5GcmFtZSgpLCB0eXBlKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6Y2xvc2VXZWJJbnNwZWN0b3IoKQotewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3
ZWJJbnNwZWN0b3JDbG9zZShtX2RydC0+d2ViUGFnZSgpKTsKLSAgICBtX2RydC0+d2ViUGFnZSgp
LT5zZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpEZXZlbG9wZXJFeHRyYXNF
bmFibGVkLCBmYWxzZSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERldmVs
b3BlckV4dHJhc0VuYWJsZWQoYm9vbCBlbmFibGVkKQotewotICAgIG1fZHJ0LT53ZWJQYWdlKCkt
PnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkRldmVsb3BlckV4dHJhc0Vu
YWJsZWQsIGVuYWJsZWQpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBc3lu
Y2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sKQotewotICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgdGhpcy4KLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2hvd1dlYkluc3Bl
Y3RvcigpCi17Ci0gICAgbV9kcnQtPndlYlBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0QXR0cmlidXRl
KFFXZWJTZXR0aW5nczo6RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCwgdHJ1ZSk7Ci0gICAgRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQ6OndlYkluc3BlY3RvclNob3cobV9kcnQtPndlYlBhZ2UoKSk7Ci19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IobG9u
ZyBjYWxsSWQsIGNvbnN0IFFTdHJpbmcmIHNjcmlwdCkKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6d2ViSW5zcGVjdG9yRXhlY3V0ZVNjcmlwdChtX2RydC0+d2ViUGFnZSgpLCBjYWxs
SWQsIHNjcmlwdCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEZyYW1lRmxh
dHRlbmluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQotewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9y
dFF0OjpzZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkKG1fZHJ0LT53ZWJQYWdlKCksIGVuYWJsZWQp
OwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrU2Nyb2xsYmFyc0VuYWJs
ZWQoYm9vbCBlbmFibGVkKQotewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNb2Nr
U2Nyb2xsYmFyc0VuYWJsZWQobV9kcnQtPndlYlBhZ2UoKSwgZW5hYmxlZCk7Ci19Ci0KLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmdvQmFjaygpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBw
b3J0UXQ6OmdvQmFjayhtX2RydC0+d2ViUGFnZSgpKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0RGVmZXJzTG9hZGluZyhib29sIGZsYWcpCi17Ci0gICAgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OnNldERlZmVyc0xvYWRpbmcobV9kcnQtPndlYlBhZ2UoKSwgZmxhZyk7Ci19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJv
bUZpbGVVUkxzKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBtX2RydC0+d2ViUGFnZSgpLT5zZXR0aW5n
cygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpMb2NhbENvbnRlbnRDYW5BY2Nlc3NSZW1v
dGVVcmxzLCBlbmFibGVkKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWxs
b3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBtX2RydC0+d2Vi
UGFnZSgpLT5zZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpMb2NhbENvbnRl
bnRDYW5BY2Nlc3NGaWxlVXJscywgZW5hYmxlZCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldEFwcENhY2hlTWF4aW11bVNpemUodW5zaWduZWQgbG9uZyBsb25nIHF1b3RhKQot
ewotICAgIG1fZHJ0LT53ZWJQYWdlKCktPnNldHRpbmdzKCktPnNldE9mZmxpbmVXZWJBcHBsaWNh
dGlvbkNhY2hlUXVvdGEocXVvdGEpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRBdXRvZmlsbGVkKGNvbnN0IFFXZWJFbGVtZW50JiBlbGVtZW50LCBib29sIGlzQXV0b2ZpbGxl
ZCkKLXsKLSAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldEF1dG9maWxsZWQo
ZWxlbWVudCwgaXNBdXRvZmlsbGVkKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0VmFsdWVGb3JVc2VyKGNvbnN0IFFXZWJFbGVtZW50JiBlbGVtZW50LCBjb25zdCBRU3RyaW5n
JiB2YWx1ZSkKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0VmFsdWVGb3JVc2Vy
KGVsZW1lbnQsIHZhbHVlKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Rml4
ZWRDb250ZW50c1NpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotICAgIG1fdG9wTG9hZGlu
Z0ZyYW1lLT5wYWdlKCktPnNldFByZWZlcnJlZENvbnRlbnRzU2l6ZShRU2l6ZSh3aWR0aCwgaGVp
Z2h0KSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFByaXZhdGVCcm93c2lu
Z0VuYWJsZWQoYm9vbCBlbmFibGUpCi17Ci0gICAgbV9kcnQtPndlYlBhZ2UoKS0+c2V0dGluZ3Mo
KS0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCwgZW5h
YmxlKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U3BhdGlhbE5hdmlnYXRp
b25FbmFibGVkKGJvb2wgZW5hYmxlKQotewotICAgIG1fZHJ0LT53ZWJQYWdlKCktPnNldHRpbmdz
KCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OlNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZCwg
ZW5hYmxlKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UG9wdXBCbG9ja2lu
Z0VuYWJsZWQoYm9vbCBlbmFibGUpCi17Ci0gICAgbV9kcnQtPndlYlBhZ2UoKS0+c2V0dGluZ3Mo
KS0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6SmF2YXNjcmlwdENhbk9wZW5XaW5kb3dzLCAh
ZW5hYmxlKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UGx1Z2luc0VuYWJs
ZWQoYm9vbCBmbGFnKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQKLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0UE9TSVhMb2NhbGUoY29uc3QgUVN0cmluZyYgbG9jYWxlKQot
ewotICAgIFFMb2NhbGUgcWxvY2FsZShsb2NhbGUpOwotICAgIFFMb2NhbGU6OnNldERlZmF1bHQo
cWxvY2FsZSk7Ci19IAotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXaW5kb3dJc0tl
eShib29sIGlzS2V5KQotewotICAgIG1fZHJ0LT5zd2l0Y2hGb2N1cyhpc0tleSk7Ci19Ci0KLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25kZXIoYm9v
bCBpc0ZpcnN0KQotewotICAgIC8vRklYTUU6IG9ubHkgbmVlZCB0aGlzIGZvciB0aGUgbW9tZW50
OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI5OTAKLX0KLQotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChi
b29sIGVuYWJsZSkKLXsKLSAgICBtX2RydC0+d2ViUGFnZSgpLT5zZXR0aW5ncygpLT5zZXRBdHRy
aWJ1dGUoUVdlYlNldHRpbmdzOjpKYXZhc2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkLCBlbmFibGUp
OwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZChi
b29sIGVuYWJsZSkKLXsKLSAgICAvLyBTZXQgWFNTQXVkaXRpbmdFbmFibGVkIGdsb2JhbGx5IHNv
IHRoYXQgd2luZG93cyBjcmVhdGVkIGJ5IHRoZSB0ZXN0IGluaGVyaXQgaXQgdG9vLgotICAgIC8v
IHJlc2V0U2V0dGluZ3MoKSB3aWxsIGNhbGwgdGhpcyB0byByZXNldCB0aGUgcGFnZSBhbmQgZ2xv
YmFsIHNldHRpbmcgdG8gZmFsc2UgYWdhaW4uCi0gICAgLy8gTmVlZGVkIGJ5IGh0dHAvdGVzdHMv
c2VjdXJpdHkveHNzQXVkaXRvci9saW5rLW9wZW5zLW5ldy13aW5kb3cuaHRtbAotICAgIFFXZWJT
ZXR0aW5ncyogZ2xvYmFsU2V0dGluZ3MgPSBRV2ViU2V0dGluZ3M6Omdsb2JhbFNldHRpbmdzKCk7
Ci0gICAgZ2xvYmFsU2V0dGluZ3MtPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OlhTU0F1ZGl0
aW5nRW5hYmxlZCwgZW5hYmxlKTsKLSAgICBtX2RydC0+d2ViUGFnZSgpLT5zZXR0aW5ncygpLT5z
ZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpYU1NBdWRpdGluZ0VuYWJsZWQsIGVuYWJsZSk7Ci19
Ci0KLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVt
ZW50V2l0aElkKGNvbnN0IFFTdHJpbmcmIGFuaW1hdGlvbk5hbWUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdGlt
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFFTdHJpbmcmIGVsZW1lbnRJZCkKLXsKLSAgICBRV2ViRnJhbWUqIGZy
YW1lID0gbV9kcnQtPndlYlBhZ2UoKS0+bWFpbkZyYW1lKCk7Ci0gICAgUV9BU1NFUlQoZnJhbWUp
OwotICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cGF1c2VBbmltYXRpb24oZnJh
bWUsIGFuaW1hdGlvbk5hbWUsIHRpbWUsIGVsZW1lbnRJZCk7Ci19Ci0KLWJvb2wgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChjb25zdCBR
U3RyaW5nJiBwcm9wZXJ0eU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHRpbWUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
UVN0cmluZyYgZWxlbWVudElkKQotewotICAgIFFXZWJGcmFtZSogZnJhbWUgPSBtX2RydC0+d2Vi
UGFnZSgpLT5tYWluRnJhbWUoKTsKLSAgICBRX0FTU0VSVChmcmFtZSk7Ci0gICAgcmV0dXJuIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpwYXVzZVRyYW5zaXRpb25PZlByb3BlcnR5KGZyYW1lLCBw
cm9wZXJ0eU5hbWUsIHRpbWUsIGVsZW1lbnRJZCk7Ci19Ci0KLXVuc2lnbmVkIExheW91dFRlc3RD
b250cm9sbGVyOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBjb25zdAotewotICAgIFFXZWJG
cmFtZSogZnJhbWUgPSBtX2RydC0+d2ViUGFnZSgpLT5tYWluRnJhbWUoKTsKLSAgICBRX0FTU0VS
VChmcmFtZSk7Ci0gICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpudW1iZXJPZkFj
dGl2ZUFuaW1hdGlvbnMoZnJhbWUpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpk
aXNhYmxlSW1hZ2VMb2FkaW5nKCkKLXsKLSAgICBtX2RydC0+d2ViUGFnZSgpLT5zZXR0aW5ncygp
LT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpBdXRvTG9hZEltYWdlcywgZmFsc2UpOwotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNwYXRjaFBlbmRpbmdMb2FkUmVxdWVzdHMo
KQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIHRlc3RpbmcgZml4IGZvciA2NzI3NDk1
Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQWxsQXBwbGljYXRpb25DYWNo
ZXMoKQotewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpjbGVhckFsbEFwcGxpY2F0aW9u
Q2FjaGVzKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQXBwbGljYXRp
b25DYWNoZUZvck9yaWdpbihjb25zdCBRU3RyaW5nJiB1cmwpCi17Ci0gICAgLy8gRklYTUU6IElt
cGxlbWVudCB0byBzdXBwb3J0IGRlbGV0aW5nIGFsbCBhcHBsaWNhdGlvbiBjYWNoZXMgZm9yIGFu
IG9yaWdpbi4KLX0KLQotbG9uZyBsb25nIExheW91dFRlc3RDb250cm9sbGVyOjpsb2NhbFN0b3Jh
Z2VEaXNrVXNhZ2VGb3JPcmlnaW4oY29uc3QgUVN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKLXsK
LSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIHN1cHBvcnQgZ2V0dGluZyBkaXNrIHVzYWdlIGlu
IGJ5dGVzIGZvciBhbiBvcmlnaW4uCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSh1bnNpZ25lZCBsb25n
IGxvbmcgcXVvdGEpCi17Ci0gICAgaWYgKCFtX3RvcExvYWRpbmdGcmFtZSkKLSAgICAgICAgcmV0
dXJuOwotICAgIG1fdG9wTG9hZGluZ0ZyYW1lLT5zZWN1cml0eU9yaWdpbigpLnNldEFwcGxpY2F0
aW9uQ2FjaGVRdW90YShxdW90YSk7Ci19Ci0KLWxvbmcgbG9uZyBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6YXBwbGljYXRpb25DYWNoZURpc2tVc2FnZUZvck9yaWdpbihjb25zdCBRU3RyaW5nJiBvcmln
aW4pCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBzdXBwb3J0IGdldHRpbmcgZGlzayB1
c2FnZSBieSBhbGwgYXBwbGljYXRpb24gY2FjaGVzIGZvciBhbiBvcmlnaW4uCi0gICAgcmV0dXJu
IDA7Ci19Ci0KLVFTdHJpbmdMaXN0IExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aEFw
cGxpY2F0aW9uQ2FjaGUoKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gZ2V0IG9yaWdp
bnMgdGhhdCBoYXZlIGFwcGxpY2F0aW9uIGNhY2hlcy4KLSAgICByZXR1cm4gUVN0cmluZ0xpc3Qo
KTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q2FjaGVNb2RlbChpbnQgbW9k
ZWwpCi17Ci0gICAgLy8gcXdlYnNldHRpbmcgZG9lc24ndCBoYXZlIG1hdGNoZWQgc2V0dGluZyB5
ZXQgOgotICAgIC8vIFdFQktJVF9DQUNIRV9NT0RFTF9ET0NVTUVOVF9WSUVXRVIKLSAgICAvLyBX
RUJLSVRfQ0FDSEVfTU9ERUxfRE9DVU1FTlRfQlJPV1NFUgotICAgIC8vIFdFQktJVF9DQUNIRV9N
T0RFTF9XRUJfQlJPV1NFUgotCi0gICAgLy8gRklYTUU6IEltcGxlbWVudC4KLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGF0YWJhc2VRdW90YShpbnQgc2l6ZSkKLXsKLSAgICBp
ZiAoIW1fdG9wTG9hZGluZ0ZyYW1lKQotICAgICAgICByZXR1cm47Ci0gICAgbV90b3BMb2FkaW5n
RnJhbWUtPnNlY3VyaXR5T3JpZ2luKCkuc2V0RGF0YWJhc2VRdW90YShzaXplKTsKLX0KLQotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxEYXRhYmFzZXMoKQotewotICAgIFFXZWJE
YXRhYmFzZTo6cmVtb3ZlQWxsRGF0YWJhc2VzKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IFFTdHJpbmcmIHNvdXJj
ZU9yaWdpbiwgY29uc3QgUVN0cmluZyYgZGVzdGluYXRpb25Qcm90b2NvbCwgY29uc3QgUVN0cmlu
ZyYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKQotewot
ICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3aGl0ZUxpc3RBY2Nlc3NGcm9tT3JpZ2luKHNv
dXJjZU9yaWdpbiwgZGVzdGluYXRpb25Qcm90b2NvbCwgZGVzdGluYXRpb25Ib3N0LCBhbGxvd0Rl
c3RpbmF0aW9uU3ViZG9tYWlucyk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJl
bW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IFFTdHJpbmcmIHNvdXJjZU9yaWdp
biwgY29uc3QgUVN0cmluZyYgZGVzdGluYXRpb25Qcm90b2NvbCwgY29uc3QgUVN0cmluZyYgZGVz
dGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKQotewotICAgIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpyZW1vdmVXaGl0ZUxpc3RBY2Nlc3NGcm9tT3JpZ2luKHNv
dXJjZU9yaWdpbiwgZGVzdGluYXRpb25Qcm90b2NvbCwgZGVzdGluYXRpb25Ib3N0LCBhbGxvd0Rl
c3RpbmF0aW9uU3ViZG9tYWlucyk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dEN1c3RvbVBvbGljeURlbGVnYXRlKGJvb2wgZW5hYmxlZCwgYm9vbCBwZXJtaXNzaXZlKQotewot
ICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShlbmFi
bGVkLCBwZXJtaXNzaXZlKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2FpdEZv
clBvbGljeURlbGVnYXRlKCkKLXsKLSAgICBzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZSh0cnVlKTsK
LSAgICBtX3dhaXRGb3JQb2xpY3kgPSB0cnVlOwotICAgIHdhaXRVbnRpbERvbmUoKTsKLX0KLQot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3ZlcnJpZGVQcmVmZXJlbmNlKGNvbnN0IFFTdHJp
bmcmIG5hbWUsIGNvbnN0IFFWYXJpYW50JiB2YWx1ZSkKLXsKLSAgICBRV2ViU2V0dGluZ3MqIHNl
dHRpbmdzID0gbV90b3BMb2FkaW5nRnJhbWUtPnBhZ2UoKS0+c2V0dGluZ3MoKTsKLQotICAgIGlm
IChuYW1lID09ICJXZWJLaXRKYXZhU2NyaXB0RW5hYmxlZCIpCi0gICAgICAgIHNldHRpbmdzLT5z
ZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpKYXZhc2NyaXB0RW5hYmxlZCwgdmFsdWUudG9Cb29s
KCkpOwotICAgIGVsc2UgaWYgKG5hbWUgPT0gIldlYktpdFRhYlRvTGlua3NQcmVmZXJlbmNlS2V5
IikKLSAgICAgICAgc2V0dGluZ3MtPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkxpbmtzSW5j
bHVkZWRJbkZvY3VzQ2hhaW4sIHZhbHVlLnRvQm9vbCgpKTsKLSAgICBlbHNlIGlmIChuYW1lID09
ICJXZWJLaXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQiKQotICAgICAgICBzZXR0
aW5ncy0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2Fj
aGVFbmFibGVkLCB2YWx1ZS50b0Jvb2woKSk7Ci0gICAgZWxzZSBpZiAobmFtZSA9PSAiV2ViS2l0
RGVmYXVsdEZvbnRTaXplIikKLSAgICAgICAgc2V0dGluZ3MtPnNldEZvbnRTaXplKFFXZWJTZXR0
aW5nczo6RGVmYXVsdEZvbnRTaXplLCB2YWx1ZS50b0ludCgpKTsKLSAgICBlbHNlIGlmIChuYW1l
ID09ICJXZWJLaXRVc2VzUGFnZUNhY2hlUHJlZmVyZW5jZUtleSIpCi0gICAgICAgIFFXZWJTZXR0
aW5nczo6c2V0TWF4aW11bVBhZ2VzSW5DYWNoZSh2YWx1ZS50b0ludCgpKTsKLSAgICBlbHNlIGlm
IChuYW1lID09ICJXZWJLaXRFbmFibGVDYXJldEJyb3dzaW5nIikKLSAgICAgICAgc2V0Q2FyZXRC
cm93c2luZ0VuYWJsZWQodmFsdWUudG9Cb29sKCkpOwotICAgIGVsc2UgaWYgKG5hbWUgPT0gIldl
YktpdFBsdWdpbnNFbmFibGVkIikKLSAgICAgICAgc2V0dGluZ3MtPnNldEF0dHJpYnV0ZShRV2Vi
U2V0dGluZ3M6OlBsdWdpbnNFbmFibGVkLCB2YWx1ZS50b0Jvb2woKSk7Ci0gICAgZWxzZSBpZiAo
bmFtZSA9PSAiV2ViS2l0V2ViR0xFbmFibGVkIikKLSAgICAgICAgc2V0dGluZ3MtPnNldEF0dHJp
YnV0ZShRV2ViU2V0dGluZ3M6OldlYkdMRW5hYmxlZCwgdmFsdWUudG9Cb29sKCkpOwotICAgIGVs
c2UgaWYgKG5hbWUgPT0gIldlYktpdENTU1JlZ2lvbnNFbmFibGVkIikKLSAgICAgICAgc2V0dGlu
Z3MtPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkNTU1JlZ2lvbnNFbmFibGVkLCB2YWx1ZS50
b0Jvb2woKSk7Ci0gICAgZWxzZSBpZiAobmFtZSA9PSAiV2ViS2l0Q1NTR3JpZExheW91dEVuYWJs
ZWQiKQotICAgICAgICBzZXR0aW5ncy0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6Q1NTR3Jp
ZExheW91dEVuYWJsZWQsIHZhbHVlLnRvQm9vbCgpKTsKLSAgICBlbHNlIGlmIChuYW1lID09ICJX
ZWJLaXRIeXBlcmxpbmtBdWRpdGluZ0VuYWJsZWQiKQotICAgICAgICBzZXR0aW5ncy0+c2V0QXR0
cmlidXRlKFFXZWJTZXR0aW5nczo6SHlwZXJsaW5rQXVkaXRpbmdFbmFibGVkLCB2YWx1ZS50b0Jv
b2woKSk7Ci0gICAgZWxzZSBpZiAobmFtZSA9PSAiV2ViS2l0QWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0VuYWJsZWQiKQotICAgICAgICBzZXR0aW5ncy0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQsIHZhbHVlLnRvQm9vbCgpKTsKLSAgICBlbHNl
Ci0gICAgICAgIHByaW50ZigiRVJST1I6IExheW91dFRlc3RDb250cm9sbGVyOjpvdmVycmlkZVBy
ZWZlcmVuY2UoKSBkb2VzIG5vdCBzdXBwb3J0IHRoZSAnJXMnIHByZWZlcmVuY2VcbiIsCi0gICAg
ICAgICAgICBuYW1lLnRvTGF0aW4xKCkuZGF0YSgpKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihjb25zdCBRU3RyaW5nJiB1cmwpCi17
Ci0gICAgUUJ5dGVBcnJheSB1cmxEYXRhID0gcGF0aFRvTG9jYWxSZXNvdXJjZSh1cmwpLnRvTGF0
aW4xKCk7Ci0gICAgbV91c2VyU3R5bGVTaGVldExvY2F0aW9uID0gUVVybDo6ZnJvbUVuY29kZWQo
dXJsRGF0YSwgUVVybDo6U3RyaWN0TW9kZSk7Ci0KLSAgICBpZiAobV91c2VyU3R5bGVTaGVldEVu
YWJsZWQpCi0gICAgICAgIHNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZCh0cnVlKTsKLX0KLQotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q2FyZXRCcm93c2luZ0VuYWJsZWQoYm9vbCB2YWx1
ZSkKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0Q2FyZXRCcm93c2luZ0VuYWJs
ZWQobV9kcnQtPndlYlBhZ2UoKSwgdmFsdWUpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChib29sIHZhbHVlKQotewotICAgIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChtX2Ry
dC0+d2ViUGFnZSgpLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dFVzZXJTdHlsZVNoZWV0RW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgbV91c2VyU3R5bGVT
aGVldEVuYWJsZWQgPSBlbmFibGVkOwotCi0gICAgaWYgKGVuYWJsZWQpCi0gICAgICAgIG1fZHJ0
LT53ZWJQYWdlKCktPnNldHRpbmdzKCktPnNldFVzZXJTdHlsZVNoZWV0VXJsKG1fdXNlclN0eWxl
U2hlZXRMb2NhdGlvbik7Ci0gICAgZWxzZQotICAgICAgICBtX2RydC0+d2ViUGFnZSgpLT5zZXR0
aW5ncygpLT5zZXRVc2VyU3R5bGVTaGVldFVybChRVXJsKCkpOwotfQotCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGJv
b2wgZm9yYmlkZGVuLCBjb25zdCBRU3RyaW5nJiBzY2hlbWUpCi17Ci0gICAgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoZm9y
YmlkZGVuLCBzY2hlbWUpOwotfQotCi1pbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndvcmtlclRo
cmVhZENvdW50KCkKLXsKLSAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6Ondvcmtl
clRocmVhZENvdW50KCk7Ci19Ci0KLWludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQ
YWdlcyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KQotewotICAgIHJldHVybiBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRRdDo6bnVtYmVyT2ZQYWdlcyhtX2RydC0+d2ViUGFnZSgpLT5tYWluRnJhbWUo
KSwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNhbGxT
aG91bGRDbG9zZU9uV2ViVmlldygpCi17Ci0gICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9y
dFF0OjpzaG91bGRDbG9zZShtX2RydC0+d2ViUGFnZSgpLT5tYWluRnJhbWUoKSk7Ci19Ci0KLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNjcm9sbGJhclBvbGljeShjb25zdCBRU3RyaW5n
JiBvcmllbnRhdGlvbiwgY29uc3QgUVN0cmluZyYgcG9saWN5KQotewotICAgIFF0OjpPcmllbnRh
dGlvbiBvOwotICAgIFF0OjpTY3JvbGxCYXJQb2xpY3kgcDsKLQotICAgIGlmIChvcmllbnRhdGlv
biA9PSAidmVydGljYWwiKQotICAgICAgICBvID0gUXQ6OlZlcnRpY2FsOwotICAgIGVsc2UgaWYg
KG9yaWVudGF0aW9uID09ICJob3Jpem9udGFsIikKLSAgICAgICAgbyA9IFF0OjpIb3Jpem9udGFs
OwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHBvbGljeSA9PSAib24iKQot
ICAgICAgICBwID0gUXQ6OlNjcm9sbEJhckFsd2F5c09uOwotICAgIGVsc2UgaWYgKHBvbGljeSA9
PSAiYXV0byIpCi0gICAgICAgIHAgPSBRdDo6U2Nyb2xsQmFyQXNOZWVkZWQ7Ci0gICAgZWxzZSBp
ZiAocG9saWN5ID09ICJvZmYiKQotICAgICAgICBwID0gUXQ6OlNjcm9sbEJhckFsd2F5c09mZjsK
LSAgICBlbHNlCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZHJ0LT53ZWJQYWdlKCktPm1haW5G
cmFtZSgpLT5zZXRTY3JvbGxCYXJQb2xpY3kobywgcCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChib29sIGVuYWJsZSkKLXsKLSAg
ICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkKG1f
ZHJ0LT53ZWJQYWdlKCksIGVuYWJsZSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoYm9vbCBlbmFibGUpCi17Ci0gICAg
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJs
ZWQobV9kcnQtPndlYlBhZ2UoKSwgZW5hYmxlKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6ZXhlY0NvbW1hbmQoY29uc3QgUVN0cmluZyYgbmFtZSwgY29uc3QgUVN0cmluZyYgdmFs
dWUpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmV4ZWN1dGVDb3JlQ29tbWFuZEJ5
TmFtZShtX2RydC0+d2ViUGFnZSgpLCBuYW1lLCB2YWx1ZSk7Ci19Ci0KLWJvb2wgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmlzQ29tbWFuZEVuYWJsZWQoY29uc3QgUVN0cmluZyYgbmFtZSkgY29uc3QK
LXsKLSAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmlzQ29tbWFuZEVuYWJsZWQo
bV9kcnQtPndlYlBhZ2UoKSwgbmFtZSk7Ci19Ci0KLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmZpbmRTdHJpbmcoY29uc3QgUVN0cmluZyYgc3RyaW5nLCBjb25zdCBRU3RyaW5nTGlzdCYgb3B0
aW9uQXJyYXkpCi17Ci0gICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpmaW5kU3Ry
aW5nKG1fZHJ0LT53ZWJQYWdlKCksIHN0cmluZywgb3B0aW9uQXJyYXkpOwotfQotCi1RU3RyaW5n
IExheW91dFRlc3RDb250cm9sbGVyOjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oY29uc3QgUVdlYkVs
ZW1lbnQmIGxpc3RJdGVtKQotewotICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6
bWFya2VyVGV4dEZvckxpc3RJdGVtKGxpc3RJdGVtKTsKLX0KLQotUVZhcmlhbnRNYXAgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhjb25zdCBR
V2ViRWxlbWVudCYgZWxlbWVudCkgY29uc3QKLXsKLSAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQ6OmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhlbGVtZW50KTsKLX0K
LQotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JF
bGVtZW50V2l0aElkKGNvbnN0IFFTdHJpbmcmIGVsZW1lbnRJZCkKLXsKLSAgICByZXR1cm4gRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdp
dGhJZChtX2RydC0+d2ViUGFnZSgpLT5tYWluRnJhbWUoKSwgZWxlbWVudElkKTsKLX0KLQotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YXV0aGVudGljYXRlU2Vzc2lvbihjb25zdCBRU3RyaW5n
JiwgY29uc3QgUVN0cmluZyYsIGNvbnN0IFFTdHJpbmcmKQotewotICAgIC8vIEZJWE1FOiBJZiB0
aGVyZSBpcyBhIGNvbmNlcHQgcGVyLXNlc3Npb24gKHBlci1wcm9jZXNzKSBjcmVkZW50aWFsIHN0
b3JhZ2UsIHRoZSBjcmVkZW50aWFscyBzaG91bGQgYmUgYWRkZWQgdG8gaXQgZm9yIGxhdGVyIHVz
ZS4KLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SWNvbkRhdGFiYXNlRW5hYmxl
ZChib29sIGVuYWJsZSkKLXsKLSAgICBpZiAoZW5hYmxlICYmICFtX2RydC0+cGVyc2lzdGVudFN0
b3JhZ2VQYXRoKCkuaXNFbXB0eSgpKQotICAgICAgICBRV2ViU2V0dGluZ3M6OnNldEljb25EYXRh
YmFzZVBhdGgobV9kcnQtPnBlcnNpc3RlbnRTdG9yYWdlUGF0aCgpKTsKLSAgICBlbHNlCi0gICAg
ICAgIFFXZWJTZXR0aW5nczo6c2V0SWNvbkRhdGFiYXNlUGF0aChRU3RyaW5nKCkpOwotfQotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24oYm9vbCBj
YW5Qcm92aWRlQWxwaGEsIGRvdWJsZSBhbHBoYSwgYm9vbCBjYW5Qcm92aWRlQmV0YSwgZG91Ymxl
IGJldGEsIGJvb2wgY2FuUHJvdmlkZUdhbW1hLCBkb3VibGUgZ2FtbWEpCi17Ci0gICAgUUxpc3Q8
V2ViQ29yZTo6V2ViUGFnZSo+IHBhZ2VzID0gbV9kcnQtPmdldEFsbFBhZ2VzKCk7Ci0gICAgZm9y
ZWFjaCAoV2ViQ29yZTo6V2ViUGFnZSogcGFnZSwgcGFnZXMpCi0gICAgICAgIER1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0OjpzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24ocGFnZSwgY2FuUHJvdmlkZUFs
cGhhLCBhbHBoYSwgY2FuUHJvdmlkZUJldGEsIGJldGEsIGNhblByb3ZpZGVHYW1tYSwgZ2FtbWEp
OwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Np
b24oYm9vbCBhbGxvdykKLXsKLSAgICBzZXRHZW9sb2NhdGlvblBlcm1pc3Npb25Db21tb24oYWxs
b3cpOwotICAgIFFMaXN0PFdlYkNvcmU6OldlYlBhZ2UqPiBwYWdlcyA9IG1fZHJ0LT5nZXRBbGxQ
YWdlcygpOwotICAgIGZvcmVhY2ggKFdlYkNvcmU6OldlYlBhZ2UqIHBhZ2UsIHBhZ2VzKQotICAg
ICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0TW9ja0dlb2xvY2F0aW9uUGVybWlzc2lv
bihwYWdlLCBhbGxvdyk7Ci19Ci0KLWludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQ
ZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoKQotewotICAgIGludCBwZW5kaW5n
UGVybWlzc2lvbkNvdW50ID0gMDsKLSAgICBRTGlzdDxXZWJDb3JlOjpXZWJQYWdlKj4gcGFnZXMg
PSBtX2RydC0+Z2V0QWxsUGFnZXMoKTsKLSAgICBmb3JlYWNoIChXZWJDb3JlOjpXZWJQYWdlKiBw
YWdlLCBwYWdlcykKLSAgICAgICAgcGVuZGluZ1Blcm1pc3Npb25Db3VudCArPSBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRRdDo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVz
dHMocGFnZSk7Ci0KLSAgICByZXR1cm4gcGVuZGluZ1Blcm1pc3Npb25Db3VudDsKLX0KLQotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29tbW9uKGJv
b2wgYWxsb3cpCi17Ci0gICAgIG1faXNHZW9sb2NhdGlvblBlcm1pc3Npb25TZXQgPSB0cnVlOwot
ICAgICBtX2dlb2xvY2F0aW9uUGVybWlzc2lvbiA9IGFsbG93OwotfQotCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25FcnJvcihpbnQgY29kZSwgY29uc3QgUVN0
cmluZyYgbWVzc2FnZSkKLXsKLSAgICBRTGlzdDxXZWJDb3JlOjpXZWJQYWdlKj4gcGFnZXMgPSBt
X2RydC0+Z2V0QWxsUGFnZXMoKTsKLSAgICBmb3JlYWNoIChXZWJDb3JlOjpXZWJQYWdlKiBwYWdl
LCBwYWdlcykKLSAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE1vY2tHZW9sb2Nh
dGlvbkVycm9yKHBhZ2UsIGNvZGUsIG1lc3NhZ2UpOwotfQotCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJs
ZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSkKLXsKLSAgICBRTGlzdDxXZWJDb3JlOjpXZWJQ
YWdlKj4gcGFnZXMgPSBtX2RydC0+Z2V0QWxsUGFnZXMoKTsKLSAgICBmb3JlYWNoIChXZWJDb3Jl
OjpXZWJQYWdlKiBwYWdlLCBwYWdlcykKLSAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6
OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKHBhZ2UsIGxhdGl0dWRlLCBsb25naXR1ZGUsIGFj
Y3VyYWN5KTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkTW9ja1NwZWVjaElu
cHV0UmVzdWx0KGNvbnN0IFFTdHJpbmcmIHJlc3VsdCwgZG91YmxlIGNvbmZpZGVuY2UsIGNvbnN0
IFFTdHJpbmcmIGxhbmd1YWdlKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIHNwZWVj
aCBpbnB1dCBsYXlvdXQgdGVzdHMuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4KLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0TW9ja1NwZWVjaElucHV0RHVtcFJlY3QoYm9vbCBmbGFnKQotewotICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgZm9yIHNwZWVjaCBpbnB1dCBsYXlvdXQgdGVzdHMuCi0gICAgLy8gU2VlIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4KLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c3RhcnRTcGVlY2hJbnB1dChjb25zdCBRU3RyaW5nJiBpbnB1dEVs
ZW1lbnQpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Igc3BlZWNoIGlucHV0IGxheW91
dCB0ZXN0cy4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM5NDg1LgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlw
dEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKGludCB3b3JsZElELCBjb25zdCBRU3RyaW5n
JiBzY3JpcHQpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudC4KLX0KLQotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQoaW50IHdvcmxkSUQs
IGNvbnN0IFFTdHJpbmcmIHNjcmlwdCkKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6
ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQobV9kcnQtPndlYlBhZ2UoKS0+bWFpbkZyYW1l
KCksIHdvcmxkSUQsIHNjcmlwdCk7Ci19Ci0KLVFTdHJpbmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKGludCBwYWdlSW5kZXgsIGludCB3aWR0aCwgaW50
IGhlaWdodCwgaW50IG1hcmdpblRvcCwgaW50IG1hcmdpblJpZ2h0LCBpbnQgbWFyZ2luQm90dG9t
LCBpbnQgbWFyZ2luTGVmdCkKLXsKLSAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6
OnBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKG1fZHJ0LT53ZWJQYWdlKCktPm1haW5GcmFtZSgp
LCBwYWdlSW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LCBtYXJnaW5Ub3AsIG1hcmdpblJpZ2h0
LCBtYXJnaW5Cb3R0b20sIG1hcmdpbkxlZnQpOwotfQotCi1RU3RyaW5nIExheW91dFRlc3RDb250
cm9sbGVyOjpwYWdlUHJvcGVydHkoY29uc3QgUVN0cmluZyYgcHJvcGVydHlOYW1lLCBpbnQgcGFn
ZU51bWJlcikKLXsKLSAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnBhZ2VQcm9w
ZXJ0eShtX2RydC0+d2ViUGFnZSgpLT5tYWluRnJhbWUoKSwgcHJvcGVydHlOYW1lLCBwYWdlTnVt
YmVyKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkVXNlclN0eWxlU2hlZXQo
Y29uc3QgUVN0cmluZyYgc291cmNlQ29kZSkKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dDo6YWRkVXNlclN0eWxlU2hlZXQobV9kcnQtPndlYlBhZ2UoKSwgc291cmNlQ29kZSk7Ci19Ci0K
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92ZUFsbFZpc2l0ZWRMaW5rcygpCi17Ci0g
ICAgUVdlYkhpc3RvcnkqIGhpc3RvcnkgPSBtX2RydC0+d2ViUGFnZSgpLT5oaXN0b3J5KCk7Ci0g
ICAgaGlzdG9yeS0+Y2xlYXIoKTsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVtcFZp
c2l0ZWRMaW5rc0NhbGxiYWNrcyh0cnVlKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6YWRkVVJMVG9SZWRpcmVjdChjb25zdCBRU3RyaW5nJiBvcmlnaW4sIGNvbnN0IFFTdHJpbmcm
IGRlc3RpbmF0aW9uKQotewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjphZGRVUkxUb1Jl
ZGlyZWN0KG9yaWdpbiwgZGVzdGluYXRpb24pOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChkb3VibGUgbWluaW11bVRpbWVySW50ZXJ2YWwp
Ci17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE1pbmltdW1UaW1lckludGVydmFs
KG1fZHJ0LT53ZWJQYWdlKCksIG1pbmltdW1UaW1lckludGVydmFsKTsKLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoKQotewotICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQuCi19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUFs
bExvY2FsU3RvcmFnZSgpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudC4KLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKGNvbnN0IFFT
dHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudC4KLX0K
LQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZp
Y2F0aW9ucyh1bnNpZ25lZCBudW1iZXIpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudC4KLX0K
LQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3luY0xvY2FsU3RvcmFnZSgpCi17Ci0gICAg
Ly8gRklYTUU6IEltcGxlbWVudC4KLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVz
ZXRQYWdlVmlzaWJpbGl0eSgpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQYWdlVmlzaWJpbGl0eShjb25zdCBjaGFy
KikKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi19Ci0KLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKGJvb2wpCi17Ci0g
ICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgotfQotCi1RU3RyaW5nIExheW91dFRlc3RDb250
cm9sbGVyOjpsYXllclRyZWVBc1RleHQoKQotewotICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6bGF5ZXJUcmVlQXNUZXh0KG1fZHJ0LT53ZWJQYWdlKCktPm1haW5GcmFtZSgpKTsK
LX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VGV4dERpcmVjdGlvbihjb25zdCBR
U3RyaW5nJiBkaXJlY3Rpb25OYW1lKQotewotICAgIGlmIChkaXJlY3Rpb25OYW1lID09ICJhdXRv
IikKLSAgICAgICAgbV9kcnQtPndlYlBhZ2UoKS0+dHJpZ2dlckFjdGlvbihRV2ViUGFnZTo6U2V0
VGV4dERpcmVjdGlvbkRlZmF1bHQpOwotICAgIGVsc2UgaWYgKGRpcmVjdGlvbk5hbWUgPT0gInJ0
bCIpCi0gICAgICAgIG1fZHJ0LT53ZWJQYWdlKCktPnRyaWdnZXJBY3Rpb24oUVdlYlBhZ2U6OlNl
dFRleHREaXJlY3Rpb25SaWdodFRvTGVmdCk7Ci0gICAgZWxzZSBpZiAoZGlyZWN0aW9uTmFtZSA9
PSAibHRyIikKLSAgICAgICAgbV9kcnQtPndlYlBhZ2UoKS0+dHJpZ2dlckFjdGlvbihRV2ViUGFn
ZTo6U2V0VGV4dERpcmVjdGlvbkxlZnRUb1JpZ2h0KTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0QWx3YXlzQWNjZXB0Q29va2llcyhib29sIGFjY2VwdCkKLXsKLSAgICBRV2Vi
U2V0dGluZ3MqIGdsb2JhbFNldHRpbmdzID0gUVdlYlNldHRpbmdzOjpnbG9iYWxTZXR0aW5ncygp
OwotICAgIGlmIChhY2NlcHQpCi0gICAgICAgIGdsb2JhbFNldHRpbmdzLT5zZXRUaGlyZFBhcnR5
Q29va2llUG9saWN5KFFXZWJTZXR0aW5nczo6QWx3YXlzQWxsb3dUaGlyZFBhcnR5Q29va2llcyk7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIFRoaXMgbWF0Y2hlcyB0aGUgU2FmYXJpIHRoaXJkLXBh
cnR5IGNvb2tpZSBibG9ja2luZyBwb2xpY3kgdGVzdGVkIGluIHRoaXJkLXBhcnR5LWNvb2tpZS1y
ZWxheGluZy5odG1sCi0gICAgICAgIGdsb2JhbFNldHRpbmdzLT5zZXRUaGlyZFBhcnR5Q29va2ll
UG9saWN5KFFXZWJTZXR0aW5nczo6QWxsb3dUaGlyZFBhcnR5V2l0aEV4aXN0aW5nQ29va2llcyk7
Ci0gICAgfQotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbHdheXNCbG9ja0Nv
b2tpZXMoYm9vbCBibG9jaykKLXsKLSAgICBRV2ViU2V0dGluZ3MqIGdsb2JhbFNldHRpbmdzID0g
UVdlYlNldHRpbmdzOjpnbG9iYWxTZXR0aW5ncygpOwotICAgIGlmIChibG9jaykKLSAgICAgICAg
Z2xvYmFsU2V0dGluZ3MtPnNldFRoaXJkUGFydHlDb29raWVQb2xpY3koUVdlYlNldHRpbmdzOjpB
bHdheXNCbG9ja1RoaXJkUGFydHlDb29raWVzKTsKLSAgICBlbHNlCi0gICAgICAgIGdsb2JhbFNl
dHRpbmdzLT5zZXRUaGlyZFBhcnR5Q29va2llUG9saWN5KFFXZWJTZXR0aW5nczo6QWx3YXlzQWxs
b3dUaGlyZFBhcnR5Q29va2llcyk7Ci19Ci0KLWNvbnN0IHVuc2lnbmVkIExheW91dFRlc3RDb250
cm9sbGVyOjptYXhWaWV3V2lkdGggPSA4MDA7Ci1jb25zdCB1bnNpZ25lZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6bWF4Vmlld0hlaWdodCA9IDYwMDsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVl
L3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVu
ZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmgJKHJldmlzaW9uIDEyNTMzNSkKKysr
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzMjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqIENvcHlyaWdodCAo
QykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVy
LCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZu
ZGVmIExheW91dFRlc3RDb250cm9sbGVyUXRfaAotI2RlZmluZSBMYXlvdXRUZXN0Q29udHJvbGxl
clF0X2gKLQotI2luY2x1ZGUgPFFCYXNpY1RpbWVyPgotI2luY2x1ZGUgPFFPYmplY3Q+Ci0jaW5j
bHVkZSA8UVNpemU+Ci0jaW5jbHVkZSA8UVN0cmluZz4KLSNpbmNsdWRlIDxRdERlYnVnPgotI2lu
Y2x1ZGUgPFFUaW1lcj4KLSNpbmNsdWRlIDxRVGltZXJFdmVudD4KLSNpbmNsdWRlIDxRVmFyaWFu
dD4KLQotI2luY2x1ZGUgPHF3ZWJkYXRhYmFzZS5oPgotI2luY2x1ZGUgPHF3ZWJlbGVtZW50Lmg+
Ci0jaW5jbHVkZSA8cXdlYmZyYW1lLmg+Ci0jaW5jbHVkZSA8cXdlYmhpc3RvcnkuaD4KLSNpbmNs
dWRlIDxxd2VicGFnZS5oPgotI2luY2x1ZGUgPHF3ZWJzZWN1cml0eW9yaWdpbi5oPgotCi1jbGFz
cyBRV2ViRnJhbWU7Ci1jbGFzcyBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDsKLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLSAgICBjbGFzcyBEdW1wUmVuZGVyVHJlZTsKLX0KLWNsYXNzIExheW91dFRlc3RD
b250cm9sbGVyIDogcHVibGljIFFPYmplY3QgewotICAgIFFfT0JKRUNUCi0gICAgUV9QUk9QRVJU
WShpbnQgd2ViSGlzdG9yeUl0ZW1Db3VudCBSRUFEIHdlYkhpc3RvcnlJdGVtQ291bnQpCi0gICAg
UV9QUk9QRVJUWShpbnQgd29ya2VyVGhyZWFkQ291bnQgUkVBRCB3b3JrZXJUaHJlYWRDb3VudCkK
LSAgICBRX1BST1BFUlRZKGJvb2wgZ2xvYmFsRmxhZyBSRUFEIGdsb2JhbEZsYWcgV1JJVEUgc2V0
R2xvYmFsRmxhZykKLXB1YmxpYzoKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlcihXZWJDb3JlOjpE
dW1wUmVuZGVyVHJlZSogZHJ0KTsKLQotICAgIGJvb2wgc2hvdWxkRGlzYWxsb3dJbmNyZWFzZUZv
ckFwcGxpY2F0aW9uQ2FjaGVRdW90YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzYWxsb3dJbmNyZWFz
ZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90YTsgfQotICAgIGJvb2wgc2hvdWxkRHVtcEFzVGV4dCgp
IGNvbnN0IHsgcmV0dXJuIG1fdGV4dER1bXA7IH0KLSAgICBib29sIHNob3VsZER1bXBCYWNrRm9y
d2FyZExpc3QoKSBjb25zdCB7IHJldHVybiBtX2R1bXBCYWNrRm9yd2FyZExpc3Q7IH0KLSAgICBi
b29sIHNob3VsZER1bXBDaGlsZHJlbkFzVGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcENoaWxk
cmVuQXNUZXh0OyB9Ci0gICAgYm9vbCBzaG91bGREdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9u
cygpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnM7IH0KLSAg
ICBib29sIHNob3VsZER1bXBEYXRhYmFzZUNhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fZHVt
cERhdGFiYXNlQ2FsbGJhY2tzOyB9Ci0gICAgYm9vbCBzaG91bGREdW1wQXBwbGljYXRpb25DYWNo
ZURlbGVnYXRlQ2FsbGJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9kdW1wQXBwbGljYXRpb25DYWNo
ZURlbGVnYXRlQ2FsbGJhY2tzOyB9Ci0gICAgYm9vbCBzaG91bGREdW1wU3RhdHVzQ2FsbGJhY2tz
KCkgY29uc3QgeyByZXR1cm4gbV9kdW1wU3RhdHVzQ2FsbGJhY2tzOyB9Ci0gICAgYm9vbCBzaG91
bGRXYWl0VW50aWxEb25lKCkgY29uc3QgeyByZXR1cm4gbV93YWl0Rm9yRG9uZTsgfQotICAgIGJv
b2wgc2hvdWxkSGFuZGxlRXJyb3JQYWdlcygpIGNvbnN0IHsgcmV0dXJuIG1faGFuZGxlRXJyb3JQ
YWdlczsgfQotICAgIGJvb2wgY2FuT3BlbldpbmRvd3MoKSBjb25zdCB7IHJldHVybiBtX2Nhbk9w
ZW5XaW5kb3dzOyB9Ci0gICAgYm9vbCBzaG91bGREdW1wVGl0bGVDaGFuZ2VzKCkgY29uc3QgeyBy
ZXR1cm4gbV9kdW1wVGl0bGVDaGFuZ2VzOyB9Ci0gICAgYm9vbCB3YWl0Rm9yUG9saWN5KCkgY29u
c3QgeyByZXR1cm4gbV93YWl0Rm9yUG9saWN5OyB9Ci0gICAgYm9vbCBpZ25vcmVSZXFlc3RGb3JQ
ZXJtaXNzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9pZ25vcmVEZXNrdG9wTm90aWZpY2F0aW9uOyB9
Ci0gICAgYm9vbCBpc1ByaW50aW5nKCkgeyByZXR1cm4gbV9pc1ByaW50aW5nOyB9Ci0KLSAgICB2
b2lkIHJlc2V0KCk7Ci0KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1heFZpZXdXaWR0
aDsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1heFZpZXdIZWlnaHQ7Ci0KLSAgICB2
b2lkIHNldFRpbWVvdXQoaW50IHRpbWVvdXQpIHsgbV90aW1lb3V0ID0gdGltZW91dDsgfQotICAg
IHZvaWQgc2V0U2hvdWxkVGltZW91dChib29sIGZsYWcpIHsgbV9zaG91bGRUaW1lb3V0ID0gZmxh
ZzsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCB0aW1lckV2ZW50KFFUaW1lckV2ZW50Kik7Ci0K
LXNpZ25hbHM6Ci0gICAgdm9pZCBkb25lKCk7Ci0KLSAgICB2b2lkIHNob3dQYWdlKCk7Ci0gICAg
dm9pZCBoaWRlUGFnZSgpOwotICAgIHZvaWQgZ2VvbG9jYXRpb25QZXJtaXNzaW9uU2V0KCk7Ci0K
LXB1YmxpYyBzbG90czoKLSAgICB2b2lkIG1heWJlRHVtcChib29sIG9rKTsKLSAgICB2b2lkIGRp
c2FsbG93SW5jcmVhc2VGb3JBcHBsaWNhdGlvbkNhY2hlUXVvdGEoKSB7IG1fZGlzYWxsb3dJbmNy
ZWFzZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90YSA9IHRydWU7IH0KLSAgICB2b2lkIGR1bXBBc1Rl
eHQoKSB7IG1fdGV4dER1bXAgPSB0cnVlOyB9Ci0gICAgdm9pZCBkdW1wQ2hpbGRGcmFtZXNBc1Rl
eHQoKSB7IG1fZHVtcENoaWxkcmVuQXNUZXh0ID0gdHJ1ZTsgfQotICAgIHZvaWQgZHVtcENoaWxk
RnJhbWVTY3JvbGxQb3NpdGlvbnMoKSB7IG1fZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnMg
PSB0cnVlOyB9Ci0gICAgdm9pZCBkdW1wRGF0YWJhc2VDYWxsYmFja3MoKSB7IG1fZHVtcERhdGFi
YXNlQ2FsbGJhY2tzID0gdHJ1ZTsgfQotICAgIHZvaWQgZHVtcEFwcGxpY2F0aW9uQ2FjaGVEZWxl
Z2F0ZUNhbGxiYWNrcygpIHsgbV9kdW1wQXBwbGljYXRpb25DYWNoZURlbGVnYXRlQ2FsbGJhY2tz
ID0gdHJ1ZTsgfQotICAgIHZvaWQgZHVtcFN0YXR1c0NhbGxiYWNrcygpIHsgbV9kdW1wU3RhdHVz
Q2FsbGJhY2tzID0gdHJ1ZTsgfQotICAgIHZvaWQgc2V0Q2FuT3BlbldpbmRvd3MoKSB7IG1fY2Fu
T3BlbldpbmRvd3MgPSB0cnVlOyB9Ci0gICAgdm9pZCBzZXRQcmludGluZygpIHsgbV9pc1ByaW50
aW5nID0gdHJ1ZTsgfQotICAgIHZvaWQgd2FpdFVudGlsRG9uZSgpOwotICAgIGludCB3ZWJIaXN0
b3J5SXRlbUNvdW50KCk7Ci0gICAgdm9pZCBrZWVwV2ViSGlzdG9yeSgpOwotICAgIHZvaWQgbm90
aWZ5RG9uZSgpOwotICAgIHZvaWQgZHVtcEJhY2tGb3J3YXJkTGlzdCgpIHsgbV9kdW1wQmFja0Zv
cndhcmRMaXN0ID0gdHJ1ZTsgfQotICAgIGJvb2wgZ2xvYmFsRmxhZygpIGNvbnN0IHsgcmV0dXJu
IG1fZ2xvYmFsRmxhZzsgfQotICAgIHZvaWQgc2V0R2xvYmFsRmxhZyhib29sIGZsYWcpIHsgbV9n
bG9iYWxGbGFnID0gZmxhZzsgfQotICAgIHZvaWQgaGFuZGxlRXJyb3JQYWdlcygpIHsgbV9oYW5k
bGVFcnJvclBhZ2VzID0gdHJ1ZTsgfQotICAgIHZvaWQgZHVtcEVkaXRpbmdDYWxsYmFja3MoKTsK
LSAgICB2b2lkIGR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKTsKLSAgICB2b2lkIGR1bXBQcm9ncmVz
c0ZpbmlzaGVkQ2FsbGJhY2soKTsKLSAgICB2b2lkIGR1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2Fk
Q2FsbGJhY2tzKCk7Ci0gICAgdm9pZCBkdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCk7Ci0gICAg
dm9pZCBkdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcygpOwotICAgIHZvaWQgZHVtcFdpbGxD
YWNoZVJlc3BvbnNlKCk7Ci0gICAgdm9pZCBkdW1wSGlzdG9yeUNhbGxiYWNrcygpOwotICAgIHZv
aWQgc2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0KGJvb2wgZW5hYmxlZCk7
Ci0gICAgdm9pZCBzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbChib29sIGVuYWJsZWQpOwot
ICAgIHZvaWQgc2V0V2lsbFNlbmRSZXF1ZXN0Q2xlYXJIZWFkZXIoY29uc3QgUVN0cmluZ0xpc3Qm
IGhlYWRlcnMpOwotICAgIHZvaWQgcXVldWVCYWNrTmF2aWdhdGlvbihpbnQgaG93RmFyQmFja3dh
cmQpOwotICAgIHZvaWQgcXVldWVGb3J3YXJkTmF2aWdhdGlvbihpbnQgaG93RmFyRm9yd2FyZCk7
Ci0gICAgdm9pZCBxdWV1ZUxvYWQoY29uc3QgUVN0cmluZyYgdXJsLCBjb25zdCBRU3RyaW5nJiB0
YXJnZXQgPSBRU3RyaW5nKCkpOwotICAgIHZvaWQgcXVldWVMb2FkSFRNTFN0cmluZyhjb25zdCBR
U3RyaW5nJiBjb250ZW50LCBjb25zdCBRU3RyaW5nJiBiYXNlVVJMID0gUVN0cmluZygpLCBjb25z
dCBRU3RyaW5nJiBmYWlsaW5nVVJMID0gUVN0cmluZygpKTsKLSAgICB2b2lkIHF1ZXVlUmVsb2Fk
KCk7Ci0gICAgdm9pZCBxdWV1ZUxvYWRpbmdTY3JpcHQoY29uc3QgUVN0cmluZyYgc2NyaXB0KTsK
LSAgICB2b2lkIHF1ZXVlTm9uTG9hZGluZ1NjcmlwdChjb25zdCBRU3RyaW5nJiBzY3JpcHQpOwot
ICAgIHZvaWQgcHJvdmlzaW9uYWxMb2FkKCk7Ci0gICAgdm9pZCBzZXRDbG9zZVJlbWFpbmluZ1dp
bmRvd3NXaGVuQ29tcGxldGUoYm9vbCA9IGZhbHNlKSB7fQotICAgIGludCB3aW5kb3dDb3VudCgp
OwotICAgIHZvaWQgZ3JhbnREZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvbihjb25zdCBRU3Ry
aW5nJiBvcmlnaW4pOwotICAgIHZvaWQgaWdub3JlRGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Np
b25SZXF1ZXN0cygpOwotICAgIGJvb2wgY2hlY2tEZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lv
bihjb25zdCBRU3RyaW5nJiBvcmlnaW4pOwotICAgIHZvaWQgc2ltdWxhdGVEZXNrdG9wTm90aWZp
Y2F0aW9uQ2xpY2soY29uc3QgUVN0cmluZyYgdGl0bGUpOwotICAgIHZvaWQgZGlzcGxheSgpOwot
ICAgIHZvaWQgZGlzcGxheUludmFsaWRhdGVkUmVnaW9uKCk7Ci0gICAgdm9pZCBjbGVhckJhY2tG
b3J3YXJkTGlzdCgpOwotICAgIFFTdHJpbmcgcGF0aFRvTG9jYWxSZXNvdXJjZShjb25zdCBRU3Ry
aW5nJiB1cmwpOwotICAgIHZvaWQgZHVtcFRpdGxlQ2hhbmdlcygpIHsgbV9kdW1wVGl0bGVDaGFu
Z2VzID0gdHJ1ZTsgfQotICAgIFFTdHJpbmcgZW5jb2RlSG9zdE5hbWUoY29uc3QgUVN0cmluZyYg
aG9zdCk7Ci0gICAgUVN0cmluZyBkZWNvZGVIb3N0TmFtZShjb25zdCBRU3RyaW5nJiBob3N0KTsK
LSAgICB2b2lkIGR1bXBTZWxlY3Rpb25SZWN0KCkgY29uc3Qge30KLSAgICB2b2lkIHNldERldmVs
b3BlckV4dHJhc0VuYWJsZWQoYm9vbCk7Ci0gICAgdm9pZCBzZXRBc3luY2hyb25vdXNTcGVsbENo
ZWNraW5nRW5hYmxlZChib29sKTsKLSAgICB2b2lkIHNob3dXZWJJbnNwZWN0b3IoKTsKLSAgICB2
b2lkIGNsb3NlV2ViSW5zcGVjdG9yKCk7Ci0gICAgdm9pZCBldmFsdWF0ZUluV2ViSW5zcGVjdG9y
KGxvbmcgY2FsbElkLCBjb25zdCBRU3RyaW5nJiBzY3JpcHQpOwotICAgIHZvaWQgcmVtb3ZlQWxs
VmlzaXRlZExpbmtzKCk7Ci0gICAgdm9pZCBzZXRNZWRpYVR5cGUoY29uc3QgUVN0cmluZyYgdHlw
ZSk7Ci0gICAgdm9pZCBzZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkKGJvb2wgZW5hYmxlKTsKLSAg
ICB2b2lkIHNldE1vY2tTY3JvbGxiYXJzRW5hYmxlZChib29sIGVuYWJsZSk7Ci0gICAgdm9pZCBz
ZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyhib29sIGVuYWJsZSk7Ci0gICAgdm9p
ZCBzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMoYm9vbCBlbmFibGUpOwotICAgIHZvaWQg
c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpOwotICAgIHZv
aWQgc2V0QXV0b2ZpbGxlZChjb25zdCBRV2ViRWxlbWVudCYsIGJvb2wgZW5hYmxlKTsKLSAgICB2
b2lkIHNldFZhbHVlRm9yVXNlcihjb25zdCBRV2ViRWxlbWVudCYsIGNvbnN0IFFTdHJpbmcmIHZh
bHVlKTsKLSAgICB2b2lkIHNldEZpeGVkQ29udGVudHNTaXplKGludCB3aWR0aCwgaW50IGhlaWdo
dCk7Ci0gICAgdm9pZCBzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKGJvb2wgZW5hYmxlKTsKLSAg
ICB2b2lkIHNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChib29sIGVuYWJsZWQpOwotICAgIHZv
aWQgc2V0UGx1Z2luc0VuYWJsZWQoYm9vbCBmbGFnKTsKLSAgICB2b2lkIHNldFBvcHVwQmxvY2tp
bmdFbmFibGVkKGJvb2wgZW5hYmxlKTsKLSAgICB2b2lkIHNldFBPU0lYTG9jYWxlKGNvbnN0IFFT
dHJpbmcmIGxvY2FsZSk7Ci0gICAgdm9pZCByZXNldExvYWRGaW5pc2hlZCgpIHsgbV9sb2FkRmlu
aXNoZWQgPSBmYWxzZTsgfQotICAgIHZvaWQgc2V0V2luZG93SXNLZXkoYm9vbCBpc0tleSk7Ci0g
ICAgdm9pZCBzZXRNYWluRnJhbWVJc0ZpcnN0UmVzcG9uZGVyKGJvb2wgaXNGaXJzdCk7Ci0gICAg
dm9pZCBzZXREZWZlck1haW5SZXNvdXJjZURhdGFMb2FkKGJvb2wpOwotICAgIHZvaWQgc2V0SmF2
YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChib29sIGVuYWJsZSk7Ci0gICAgdm9pZCBzZXRYU1NB
dWRpdG9yRW5hYmxlZChib29sIGVuYWJsZSk7Ci0gICAgdm9pZCBzZXRDYXJldEJyb3dzaW5nRW5h
YmxlZChib29sIGVuYWJsZSk7Ci0gICAgdm9pZCBzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxl
ZChib29sKTsKLSAgICB2b2lkIHNldFZpZXdNb2RlTWVkaWFGZWF0dXJlKGNvbnN0IFFTdHJpbmcm
IG1vZGUpOwotICAgIHZvaWQgc2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkKGJvb2wgZW5hYmxl
KTsKLSAgICB2b2lkIHNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoYm9vbCBlbmFi
bGUpOwotICAgIHZvaWQgZXhlY0NvbW1hbmQoY29uc3QgUVN0cmluZyYgbmFtZSwgY29uc3QgUVN0
cmluZyYgdmFsdWUgPSBRU3RyaW5nKCkpOwotICAgIGJvb2wgaXNDb21tYW5kRW5hYmxlZChjb25z
dCBRU3RyaW5nJiBuYW1lKSBjb25zdDsKLSAgICBib29sIGZpbmRTdHJpbmcoY29uc3QgUVN0cmlu
ZyYgc3RyaW5nLCBjb25zdCBRU3RyaW5nTGlzdCYgb3B0aW9uQXJyYXkpOwotCi0gICAgYm9vbCBw
YXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChjb25zdCBRU3RyaW5nJiBhbmltYXRp
b25OYW1lLCBkb3VibGUgdGltZSwgY29uc3QgUVN0cmluZyYgZWxlbWVudElkKTsKLSAgICBib29s
IHBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChjb25zdCBRU3RyaW5nJiBwcm9w
ZXJ0eU5hbWUsIGRvdWJsZSB0aW1lLCBjb25zdCBRU3RyaW5nJiBlbGVtZW50SWQpOwotICAgIGJv
b2wgZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkKGNvbnN0IFFTdHJpbmcm
IGVsZW1lbnRJZCk7Ci0KLSAgICB1bnNpZ25lZCBudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBj
b25zdDsKLQotICAgIHZvaWQgYWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgUVN0
cmluZyYgc291cmNlT3JpZ2luLCBjb25zdCBRU3RyaW5nJiBkZXN0aW5hdGlvblByb3RvY29sLCBj
b25zdCBRU3RyaW5nJiBkZXN0aW5hdGlvbkhvc3QsIGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1YmRv
bWFpbnMpOwotICAgIHZvaWQgcmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3Qg
UVN0cmluZyYgc291cmNlT3JpZ2luLCBjb25zdCBRU3RyaW5nJiBkZXN0aW5hdGlvblByb3RvY29s
LCBjb25zdCBRU3RyaW5nJiBkZXN0aW5hdGlvbkhvc3QsIGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1
YmRvbWFpbnMpOwotCi0gICAgdm9pZCBkaXNwYXRjaFBlbmRpbmdMb2FkUmVxdWVzdHMoKTsKLSAg
ICB2b2lkIGRpc2FibGVJbWFnZUxvYWRpbmcoKTsKLQotICAgIHZvaWQgY2xlYXJBbGxBcHBsaWNh
dGlvbkNhY2hlcygpOwotICAgIHZvaWQgY2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luKGNv
bnN0IFFTdHJpbmcmIHVybCk7Ci0gICAgdm9pZCBzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVv
dGEodW5zaWduZWQgbG9uZyBsb25nIHF1b3RhKTsKLSAgICBRU3RyaW5nTGlzdCBvcmlnaW5zV2l0
aEFwcGxpY2F0aW9uQ2FjaGUoKTsKLSAgICBsb25nIGxvbmcgYXBwbGljYXRpb25DYWNoZURpc2tV
c2FnZUZvck9yaWdpbihjb25zdCBRU3RyaW5nJik7IAotICAgIHZvaWQgc2V0Q2FjaGVNb2RlbChp
bnQpOwotCi0gICAgdm9pZCBzZXREYXRhYmFzZVF1b3RhKGludCBzaXplKTsKLSAgICB2b2lkIGNs
ZWFyQWxsRGF0YWJhc2VzKCk7Ci0gICAgdm9pZCBzZXRJY29uRGF0YWJhc2VFbmFibGVkKGJvb2wg
ZW5hYmxlKTsKLQotICAgIHZvaWQgc2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoYm9vbCBlbmFibGVk
LCBib29sIHBlcm1pc3NpdmUgPSBmYWxzZSk7Ci0gICAgdm9pZCB3YWl0Rm9yUG9saWN5RGVsZWdh
dGUoKTsKLQotICAgIHZvaWQgb3ZlcnJpZGVQcmVmZXJlbmNlKGNvbnN0IFFTdHJpbmcmIG5hbWUs
IGNvbnN0IFFWYXJpYW50JiB2YWx1ZSk7Ci0gICAgdm9pZCBzZXRVc2VyU3R5bGVTaGVldExvY2F0
aW9uKGNvbnN0IFFTdHJpbmcmIHVybCk7Ci0gICAgdm9pZCBzZXRVc2VyU3R5bGVTaGVldEVuYWJs
ZWQoYm9vbCBlbmFibGVkKTsKLSAgICB2b2lkIHNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5G
b3JVUkxTY2hlbWUoYm9vbCBmb3JiaWRkZW4sIGNvbnN0IFFTdHJpbmcmIHNjaGVtZSk7Ci0gICAg
aW50IHdvcmtlclRocmVhZENvdW50KCk7Ci0gICAgaW50IG51bWJlck9mUGFnZXMoZmxvYXQgd2lk
dGggPSBtYXhWaWV3V2lkdGgsIGZsb2F0IGhlaWdodCA9IG1heFZpZXdIZWlnaHQpOwotICAgIGJv
b2wgY2FsbFNob3VsZENsb3NlT25XZWJWaWV3KCk7Ci0gICAgLy8gRm9yIG5vdywgdGhpcyBpcyBh
IG5vLW9wLiBUaGlzIG1heSBjaGFuZ2UgZGVwZW5kaW5nIG9uIG91dGNvbWUgb2YKLSAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzMzMzMKLSAgICB2b2lkIHNl
dENhbGxDbG9zZU9uV2ViVmlld3MoKSB7fQotICAgIC8vIFRoaXMgaXMgYSBuby1vcCAtIGl0IGFs
bG93cyB1cyB0byBwYXNzCi0gICAgLy8gcGx1Z2lucy9nZXQtdXJsLXRoYXQtdGhlLXJlc291cmNl
LWxvYWQtZGVsZWdhdGUtd2lsbC1kaXNhbGxvdy5odG1sCi0gICAgLy8gd2hpY2ggaXMgYSBNYWMt
c3BlY2lmaWMgdGVzdC4KLSAgICB2b2lkIGFkZERpc2FsbG93ZWRVUkwoY29uc3QgUVN0cmluZyYp
IHt9Ci0KLSAgICB2b2lkIHNldE1vY2tEZXZpY2VPcmllbnRhdGlvbihib29sIGNhblByb3ZpZGVB
bHBoYSwgZG91YmxlIGFscGhhLCBib29sIGNhblByb3ZpZGVCZXRhLCBkb3VibGUgYmV0YSwgYm9v
bCBjYW5Qcm92aWRlR2FtbWEsIGRvdWJsZSBnYW1tYSk7Ci0KLSAgICB2b2lkIHNldE1vY2tHZW9s
b2NhdGlvbkVycm9yKGludCBjb2RlLCBjb25zdCBRU3RyaW5nJiBtZXNzYWdlKTsKLSAgICB2b2lk
IHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdp
dHVkZSwgZG91YmxlIGFjY3VyYWN5KTsKLSAgICB2b2lkIHNldEdlb2xvY2F0aW9uUGVybWlzc2lv
bihib29sIGFsbG93KTsKLSAgICBpbnQgbnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNz
aW9uUmVxdWVzdHMoKTsKLSAgICBib29sIGlzR2VvbG9jYXRpb25QZXJtaXNzaW9uU2V0KCkgY29u
c3QgeyByZXR1cm4gbV9pc0dlb2xvY2F0aW9uUGVybWlzc2lvblNldDsgfQotICAgIGJvb2wgZ2Vv
bG9jYXRpb25QZXJtaXNzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9nZW9sb2NhdGlvblBlcm1pc3Np
b247IH0KLQotICAgIHZvaWQgYWRkTW9ja1NwZWVjaElucHV0UmVzdWx0KGNvbnN0IFFTdHJpbmcm
IHJlc3VsdCwgZG91YmxlIGNvbmZpZGVuY2UsIGNvbnN0IFFTdHJpbmcmIGxhbmd1YWdlKTsKLSAg
ICB2b2lkIHNldE1vY2tTcGVlY2hJbnB1dER1bXBSZWN0KGJvb2wgZmxhZyk7Ci0gICAgdm9pZCBz
dGFydFNwZWVjaElucHV0KGNvbnN0IFFTdHJpbmcmIGlucHV0RWxlbWVudCk7Ci0KLSAgICB2b2lk
IHNldFBhZ2VWaXNpYmlsaXR5KGNvbnN0IGNoYXIqKTsKLSAgICB2b2lkIHJlc2V0UGFnZVZpc2li
aWxpdHkoKTsKLQotICAgIHZvaWQgc2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoYm9v
bCk7Ci0KLSAgICAvLyBFbXB0eSBzdHViIG1ldGhvZCB0byBrZWVwIHBhcml0eSB3aXRoIG9iamVj
dCBtb2RlbCBleHBvc2VkIGJ5IGdsb2JhbCBMYXlvdXRUZXN0Q29udHJvbGxlci4KLSAgICB2b2lk
IGFib3J0TW9kYWwoKSB7fQotCi0gICAgdm9pZCBhZGRVUkxUb1JlZGlyZWN0KGNvbnN0IFFTdHJp
bmcmIG9yaWdpbiwgY29uc3QgUVN0cmluZyYgZGVzdGluYXRpb24pOwotCi0gICAgLyoKLSAgICAg
ICAgUG9saWN5IHZhbHVlczogJ29uJywgJ2F1dG8nIG9yICdvZmYnLgotICAgICAgICBPcmllbnRh
dGlvbiB2YWx1ZXM6ICd2ZXJ0aWNhbCcgb3IgJ2hvcml6b250YWwnLgotICAgICovCi0gICAgdm9p
ZCBzZXRTY3JvbGxiYXJQb2xpY3koY29uc3QgUVN0cmluZyYgb3JpZW50YXRpb24sIGNvbnN0IFFT
dHJpbmcmIHBvbGljeSk7Ci0KLSAgICBRU3RyaW5nIG1hcmtlclRleHRGb3JMaXN0SXRlbShjb25z
dCBRV2ViRWxlbWVudCYgbGlzdEl0ZW0pOwotICAgIFFWYXJpYW50TWFwIGNvbXB1dGVkU3R5bGVJ
bmNsdWRpbmdWaXNpdGVkSW5mbyhjb25zdCBRV2ViRWxlbWVudCYgZWxlbWVudCkgY29uc3Q7Ci0K
LSAgICAvLyBTaW11bGF0ZSBhIHJlcXVlc3QgYW4gZW1iZWRkaW5nIGFwcGxpY2F0aW9uIGNvdWxk
IG1ha2UsIHBvcHVsYXRpbmcgcGVyLXNlc3Npb24gY3JlZGVudGlhbCBzdG9yYWdlLgotICAgIHZv
aWQgYXV0aGVudGljYXRlU2Vzc2lvbihjb25zdCBRU3RyaW5nJiB1cmwsIGNvbnN0IFFTdHJpbmcm
IHVzZXJuYW1lLCBjb25zdCBRU3RyaW5nJiBwYXNzd29yZCk7Ci0KLSAgICB2b2lkIGV2YWx1YXRl
U2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUoaW50IHdvcmxkSUQsIGNvbnN0IFFT
dHJpbmcmIHNjcmlwdCk7Ci0gICAgdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChp
bnQgd29ybGRJRCwgY29uc3QgUVN0cmluZyYgc2NyaXB0KTsKLSAgICBRU3RyaW5nIHBhZ2VTaXpl
QW5kTWFyZ2luc0luUGl4ZWxzKGludCBwYWdlSW5kZXgsIGludCB3aWR0aCwgaW50IGhlaWdodCwg
aW50IG1hcmdpblRvcCwgaW50IG1hcmdpblJpZ2h0LCBpbnQgbWFyZ2luQm90dG9tLCBpbnQgbWFy
Z2luTGVmdCk7Ci0gICAgUVN0cmluZyBwYWdlUHJvcGVydHkoY29uc3QgUVN0cmluZyYgcHJvcGVy
dHlOYW1lLCBpbnQgcGFnZU51bWJlcik7Ci0gICAgdm9pZCBhZGRVc2VyU3R5bGVTaGVldChjb25z
dCBRU3RyaW5nJiBzb3VyY2VDb2RlKTsKLQotICAgIHZvaWQgc2V0TWluaW11bVRpbWVySW50ZXJ2
YWwoZG91YmxlKTsKLSAgICAKLSAgICB2b2lkIG9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKCk7Ci0g
ICAgdm9pZCBkZWxldGVBbGxMb2NhbFN0b3JhZ2UoKTsKLSAgICB2b2lkIGRlbGV0ZUxvY2FsU3Rv
cmFnZUZvck9yaWdpbihjb25zdCBRU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKTsKLSAgICBsb25n
IGxvbmcgbG9jYWxTdG9yYWdlRGlza1VzYWdlRm9yT3JpZ2luKGNvbnN0IFFTdHJpbmcmIG9yaWdp
bklkZW50aWZpZXIpOwotICAgIHZvaWQgb2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9u
cyh1bnNpZ25lZCBudW1iZXIpOwotICAgIHZvaWQgc3luY0xvY2FsU3RvcmFnZSgpOwotICAgIFFT
dHJpbmcgbGF5ZXJUcmVlQXNUZXh0KCk7Ci0gICAgdm9pZCBzZXRUZXh0RGlyZWN0aW9uKGNvbnN0
IFFTdHJpbmcmIGRpcmVjdGlvbk5hbWUpOwotICAgIHZvaWQgZ29CYWNrKCk7Ci0gICAgdm9pZCBz
ZXREZWZlcnNMb2FkaW5nKGJvb2wpOwotICAgIHZvaWQgc2V0QWx3YXlzQWNjZXB0Q29va2llcyhi
b29sKTsKLSAgICB2b2lkIHNldEFsd2F5c0Jsb2NrQ29va2llcyhib29sKTsKLQotcHJpdmF0ZSBz
bG90czoKLSAgICB2b2lkIHByb2Nlc3NXb3JrKCk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBzZXRH
ZW9sb2NhdGlvblBlcm1pc3Npb25Db21tb24oYm9vbCBhbGxvdyk7Ci0KLXByaXZhdGU6Ci0gICAg
Ym9vbCBtX2hhc0R1bXBlZDsKLSAgICBib29sIG1fdGV4dER1bXA7Ci0gICAgYm9vbCBtX2Rpc2Fs
bG93SW5jcmVhc2VGb3JBcHBsaWNhdGlvbkNhY2hlUXVvdGE7Ci0gICAgYm9vbCBtX2R1bXBCYWNr
Rm9yd2FyZExpc3Q7Ci0gICAgYm9vbCBtX2R1bXBDaGlsZHJlbkFzVGV4dDsKLSAgICBib29sIG1f
ZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnM7Ci0gICAgYm9vbCBtX2Nhbk9wZW5XaW5kb3dz
OwotICAgIGJvb2wgbV93YWl0Rm9yRG9uZTsKLSAgICBib29sIG1fZHVtcFRpdGxlQ2hhbmdlczsK
LSAgICBib29sIG1fZHVtcERhdGFiYXNlQ2FsbGJhY2tzOwotICAgIGJvb2wgbV9kdW1wQXBwbGlj
YXRpb25DYWNoZURlbGVnYXRlQ2FsbGJhY2tzOwotICAgIGJvb2wgbV9kdW1wU3RhdHVzQ2FsbGJh
Y2tzOwotICAgIGJvb2wgbV93YWl0Rm9yUG9saWN5OwotICAgIGJvb2wgbV9oYW5kbGVFcnJvclBh
Z2VzOwotICAgIGJvb2wgbV9sb2FkRmluaXNoZWQ7Ci0gICAgYm9vbCBtX2dsb2JhbEZsYWc7Ci0g
ICAgYm9vbCBtX3VzZXJTdHlsZVNoZWV0RW5hYmxlZDsKLSAgICBib29sIG1faXNHZW9sb2NhdGlv
blBlcm1pc3Npb25TZXQ7Ci0gICAgYm9vbCBtX2lzUHJpbnRpbmc7Ci0gICAgYm9vbCBtX2dlb2xv
Y2F0aW9uUGVybWlzc2lvbjsKLQotICAgIFFVcmwgbV91c2VyU3R5bGVTaGVldExvY2F0aW9uOwot
ICAgIFFCYXNpY1RpbWVyIG1fdGltZW91dFRpbWVyOwotICAgIFFXZWJGcmFtZSogbV90b3BMb2Fk
aW5nRnJhbWU7Ci0gICAgV2ViQ29yZTo6RHVtcFJlbmRlclRyZWUqIG1fZHJ0OwotICAgIFFXZWJI
aXN0b3J5KiBtX3dlYkhpc3Rvcnk7Ci0gICAgUVN0cmluZ0xpc3QgbV9kZXNrdG9wTm90aWZpY2F0
aW9uQWxsb3dlZE9yaWdpbnM7Ci0gICAgYm9vbCBtX2lnbm9yZURlc2t0b3BOb3RpZmljYXRpb247
Ci0KLSAgICBib29sIG1fc2hvdWxkVGltZW91dDsKLSAgICBpbnQgbV90aW1lb3V0OwotfTsKLQot
I2VuZGlmIC8vIExheW91dFRlc3RDb250cm9sbGVyUXRfaApJbmRleDogVG9vbHMvRHVtcFJlbmRl
clRyZWUvcXQvVGVzdFJ1bm5lclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVy
VHJlZS9xdC9UZXN0UnVubmVyUXQuY3BwCShyZXZpc2lvbiAxMjUzMzUpCShmcm9tIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwOjEyNTMzNSkKKysrIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL3F0L1Rlc3RSdW5uZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw5ODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9y
Y2ggTW9iaWxlIEluYy4gaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJMYXlvdXRUZXN0Q29udHJvbGxlclF0LmgiCisjaW5jbHVkZSAiRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQuaCIKKworI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlUXQuaCIKKyNp
bmNsdWRlICJXb3JrUXVldWUuaCIKKyNpbmNsdWRlICJXb3JrUXVldWVJdGVtUXQuaCIKKyNpbmNs
dWRlIDxRQ29yZUFwcGxpY2F0aW9uPgorI2luY2x1ZGUgPFFEaXI+CisjaW5jbHVkZSA8UUxvY2Fs
ZT4KKyNpbmNsdWRlIDxxd2Vic2V0dGluZ3MuaD4KKworTGF5b3V0VGVzdENvbnRyb2xsZXI6Okxh
eW91dFRlc3RDb250cm9sbGVyKFdlYkNvcmU6OkR1bXBSZW5kZXJUcmVlKiBkcnQpCisgICAgOiBR
T2JqZWN0KCkKKyAgICAsIG1fZHJ0KGRydCkKKyAgICAsIG1fc2hvdWxkVGltZW91dCh0cnVlKQor
ICAgICwgbV90aW1lb3V0KDMwMDAwKQoreworICAgIHJlc2V0KCk7CisgICAgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OmR1bXBOb3RpZmljYXRpb24odHJ1ZSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnJlc2V0KCkKK3sKKyAgICBtX2hhc0R1bXBlZCA9IGZhbHNlOworICAgIG1f
bG9hZEZpbmlzaGVkID0gZmFsc2U7CisgICAgbV90ZXh0RHVtcCA9IGZhbHNlOworICAgIG1fZHVt
cEJhY2tGb3J3YXJkTGlzdCA9IGZhbHNlOworICAgIG1fZHVtcENoaWxkcmVuQXNUZXh0ID0gZmFs
c2U7CisgICAgbV9kdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9ucyA9IGZhbHNlOworICAgIG1f
Y2FuT3BlbldpbmRvd3MgPSBmYWxzZTsKKyAgICBtX3dhaXRGb3JEb25lID0gZmFsc2U7CisgICAg
bV9kaXNhbGxvd0luY3JlYXNlRm9yQXBwbGljYXRpb25DYWNoZVF1b3RhID0gZmFsc2U7CisgICAg
bV9kdW1wVGl0bGVDaGFuZ2VzID0gZmFsc2U7CisgICAgbV9kdW1wRGF0YWJhc2VDYWxsYmFja3Mg
PSBmYWxzZTsKKyAgICBtX2R1bXBBcHBsaWNhdGlvbkNhY2hlRGVsZWdhdGVDYWxsYmFja3MgPSBm
YWxzZTsKKyAgICBtX2R1bXBTdGF0dXNDYWxsYmFja3MgPSBmYWxzZTsKKyAgICBtX3RpbWVvdXRU
aW1lci5zdG9wKCk7CisgICAgbV90b3BMb2FkaW5nRnJhbWUgPSAwOworICAgIG1fd2FpdEZvclBv
bGljeSA9IGZhbHNlOworICAgIG1faGFuZGxlRXJyb3JQYWdlcyA9IGZhbHNlOworICAgIG1fd2Vi
SGlzdG9yeSA9IDA7CisgICAgbV9nbG9iYWxGbGFnID0gZmFsc2U7CisgICAgbV91c2VyU3R5bGVT
aGVldEVuYWJsZWQgPSBmYWxzZTsKKyAgICBtX2Rlc2t0b3BOb3RpZmljYXRpb25BbGxvd2VkT3Jp
Z2lucy5jbGVhcigpOworICAgIG1faWdub3JlRGVza3RvcE5vdGlmaWNhdGlvbiA9IGZhbHNlOwor
ICAgIG1faXNHZW9sb2NhdGlvblBlcm1pc3Npb25TZXQgPSBmYWxzZTsKKyAgICBtX2lzUHJpbnRp
bmcgPSBmYWxzZTsKKyAgICBtX2dlb2xvY2F0aW9uUGVybWlzc2lvbiA9IGZhbHNlOworCisgICAg
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBFZGl0aW5nQ2FsbGJhY2tzKGZhbHNlKTsKKyAg
ICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVtcEZyYW1lTG9hZGVyKGZhbHNlKTsKKyAgICBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjayhmYWxz
ZSk7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBVc2VyR2VzdHVyZUluRnJhbWVM
b2FkZXIoZmFsc2UpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wUmVzb3VyY2VM
b2FkQ2FsbGJhY2tzKGZhbHNlKTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVtcFJl
c291cmNlUmVzcG9uc2VNSU1FVHlwZXMoZmFsc2UpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9y
dFF0OjpkdW1wV2lsbENhY2hlUmVzcG9uc2VDYWxsYmFja3MoZmFsc2UpOworICAgIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OjpzZXREZWZlck1haW5SZXNvdXJjZURhdGFMb2FkKHRydWUpOworICAg
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9u
UmVkaXJlY3QoZmFsc2UpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRXaWxsU2Vu
ZFJlcXVlc3RSZXR1cm5zTnVsbChmYWxzZSk7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6
OnNldFdpbGxTZW5kUmVxdWVzdENsZWFySGVhZGVycyhRU3RyaW5nTGlzdCgpKTsKKyAgICBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6Y2xlYXJTY3JpcHRXb3JsZHMoKTsKKyAgICBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRRdDo6c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoZmFsc2UsIGZhbHNlKTsKKyAg
ICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVtcEhpc3RvcnlDYWxsYmFja3MoZmFsc2UpOwor
ICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wVmlzaXRlZExpbmtzQ2FsbGJhY2tzKGZh
bHNlKTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cmVzZXRHZW9sb2NhdGlvbk1vY2so
bV9kcnQtPndlYlBhZ2UoKSk7CisgICAgc2V0SWNvbkRhdGFiYXNlRW5hYmxlZChmYWxzZSk7Cisg
ICAgY2xlYXJBbGxEYXRhYmFzZXMoKTsKKyAgICAvLyBUaGUgZGVmYXVsdCBzdGF0ZSBmb3IgRFJU
IGlzIHRvIGJsb2NrIHRoaXJkLXBhcnR5IGNvb2tpZXMsIG1pbWljaW5nIHRoZSBNYWMgcG9ydAor
ICAgIHNldEFsd2F5c0FjY2VwdENvb2tpZXMoZmFsc2UpOworICAgIGVtaXQgaGlkZVBhZ2UoKTsK
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cHJvY2Vzc1dvcmsoKQoreworICAgIC8v
IHFEZWJ1ZygpIDw8ICI+Pj5wcm9jZXNzV29yayI7CisKKyAgICAvLyBpZiB3ZSBkaWRuJ3Qgc3Rh
cnQgYSBuZXcgbG9hZCwgdGhlbiB3ZSBmaW5pc2hlZCBhbGwgdGhlIGNvbW1hbmRzLCBzbyB3ZSdy
ZSByZWFkeSB0byBkdW1wIHN0YXRlCisgICAgaWYgKFdvcmtRdWV1ZTo6c2hhcmVkKCktPnByb2Nl
c3NXb3JrKCkgJiYgIXNob3VsZFdhaXRVbnRpbERvbmUoKSkgeworICAgICAgICBlbWl0IGRvbmUo
KTsKKyAgICAgICAgbV9oYXNEdW1wZWQgPSB0cnVlOworICAgIH0KK30KKworLy8gQ2FsbGVkIG9u
IGxvYWRGaW5pc2hlZCBvbiBXZWJQYWdlCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjptYXli
ZUR1bXAoYm9vbCAvKnN1Y2Nlc3MqLykKK3sKKworICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBvbiBh
bnkgb2YgdGhlIGh0dHAvdGVzdHMvc2VjdXJpdHkvd2luZG93LWV2ZW50cy0qLmh0bWwgdGVzdHMs
IHdoZXJlIHRoZSB0ZXN0IG9wZW5zCisgICAgLy8gYSBuZXcgd2luZG93LCBjYWxscyB0aGUgdW5s
b2FkIGFuZCBsb2FkIGV2ZW50IGhhbmRsZXJzIG9uIHRoZSB3aW5kb3cncyBwYWdlLCBhbmQgdGhl
biBpbW1lZGlhdGVseQorICAgIC8vIGlzc3VlcyBhIG5vdGlmeURvbmUuIE5lZWRzIGludmVzdGln
YXRpb24uCisgICAgaWYgKCFtX3RvcExvYWRpbmdGcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gSXQgaXMgcG9zc2libGUgdGhhdCB3ZSBnZXQgY2FsbGVkIGJ5IHdpbmRvd3MgY3JlYXRl
ZCBmcm9tIHRoZSBtYWluIHBhZ2UgdGhhdCBoYXZlIGZpbmlzaGVkCisgICAgLy8gbG9hZGluZywg
c28gd2UgZG9uJ3QgQVNTRVJUIGhlcmUuIEF0IHRoZSBtb21lbnQgd2UgZG8gbm90IGdhdGhlciBy
ZXN1bHRzIGZyb20gc3VjaCB3aW5kb3dzLAorICAgIC8vIGJ1dCBtYXkgbmVlZCB0byBpbiBmdXR1
cmUuCisgICAgaWYgKHNlbmRlcigpICE9IG1fdG9wTG9hZGluZ0ZyYW1lLT5wYWdlKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fbG9hZEZpbmlzaGVkID0gdHJ1ZTsKKyAgICAvLyBhcyB0aGUg
ZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGxvYWRGaW5pc2hlZCwgdGhlIHRlc3QgbWlnaHQKKyAgICAv
LyBhbHJlYWR5IGhhdmUgZHVtcGVkIGFuZCB0aHVzIG5vIGxvbmdlciBiZSBhY3RpdmUsIHRodXMK
KyAgICAvLyBiYWlsIG91dCBoZXJlLgorICAgIGlmIChtX2hhc0R1bXBlZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+c2V0RnJvemVuKHRydWUpOyAvLyBmaXJz
dCBjb21wbGV0ZSBsb2FkIGZyZWV6ZXMgdGhlIHF1ZXVlIGZvciB0aGUgcmVzdCBvZiB0aGlzIHRl
c3QKKyAgICBpZiAoV29ya1F1ZXVlOjpzaGFyZWQoKS0+Y291bnQoKSkKKyAgICAgICAgUVRpbWVy
OjpzaW5nbGVTaG90KDAsIHRoaXMsIFNMT1QocHJvY2Vzc1dvcmsoKSkpOworICAgIGVsc2UgaWYg
KCFzaG91bGRXYWl0VW50aWxEb25lKCkpIHsKKyAgICAgICAgZW1pdCBkb25lKCk7CisgICAgICAg
IG1faGFzRHVtcGVkID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OndhaXRVbnRpbERvbmUoKQoreworICAgIC8vcURlYnVnKCkgPDwgIj4+Pj53YWl0Rm9yRG9u
ZSI7CisgICAgbV93YWl0Rm9yRG9uZSA9IHRydWU7CisKKyAgICBpZiAoIW1fc2hvdWxkVGltZW91
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90aW1lb3V0VGltZXIuc3RhcnQobV90aW1lb3V0
LCB0aGlzKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Vmlld01vZGVNZWRp
YUZlYXR1cmUoY29uc3QgUVN0cmluZyYgbW9kZSkKK3sKKyAgICBtX2RydC0+d2ViUGFnZSgpLT5z
ZXRQcm9wZXJ0eSgiX3Ffdmlld01vZGUiLCBtb2RlKTsKK30KKworaW50IExheW91dFRlc3RDb250
cm9sbGVyOjp3ZWJIaXN0b3J5SXRlbUNvdW50KCkKK3sKKyAgICBpZiAoIW1fd2ViSGlzdG9yeSkK
KyAgICAgICAgcmV0dXJuIC0xOworCisgICAgLy8gU3VidHJhY3Qgb25lIGhlcmUgYXMgb3VyIFFX
ZWJIaXN0b3J5Ojpjb3VudCgpIGluY2x1ZGVzIHRoZSBhY3R1YWwgcGFnZSwKKyAgICAvLyB3aGlj
aCBpcyBub3QgY29uc2lkZXJlZCBpbiB0aGUgRFJUIHRlc3RzLgorICAgIHJldHVybiBtX3dlYkhp
c3RvcnktPmNvdW50KCkgLSAxOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjprZWVw
V2ViSGlzdG9yeSgpCit7CisgICAgbV93ZWJIaXN0b3J5ID0gbV9kcnQtPndlYlBhZ2UoKS0+aGlz
dG9yeSgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpub3RpZnlEb25lKCkKK3sK
KyAgICBxRGVidWcoKSA8PCAiPj4+Pm5vdGlmeURvbmUiOworCisgICAgaWYgKG1fc2hvdWxkVGlt
ZW91dCAmJiAhbV90aW1lb3V0VGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV90aW1lb3V0VGltZXIuc3RvcCgpOworICAgIG1fd2FpdEZvckRvbmUgPSBmYWxzZTsKKwor
ICAgIC8vIElmIHRoZSBwYWdlIGhhcyBub3QgZmluaXNoZWQgbG9hZGluZyAoaS5lLiBsb2FkRmlu
aXNoZWQoKSBoYXMgbm90IGJlZW4gZW1pdHRlZCkgdGhlbgorICAgIC8vIGNvbnRlbnQgY3JlYXRl
ZCBieSB0aGUgbGlrZXMgb2YgZG9jdW1lbnQud3JpdGUoKSBKUyBtZXRob2RzIHdpbGwgbm90IGJl
IGF2YWlsYWJsZSB5ZXQuCisgICAgLy8gV2hlbiB0aGUgcGFnZSBoYXMgZmluaXNoZWQgbG9hZGlu
ZywgbWF5YmVEdW1wIGFib3ZlIHdpbGwgZHVtcCB0aGUgcmVzdWx0cyBub3cgdGhhdCB3ZSBoYXZl
CisgICAgLy8ganVzdCBzZXQgc2hvdWxkV2FpdFVudGlsRG9uZSB0byBmYWxzZS4KKyAgICBpZiAo
IW1fbG9hZEZpbmlzaGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBlbWl0IGRvbmUoKTsKKwor
ICAgIC8vIEZJWE1FOiBpbnZlc3RpZ2F0ZSB3aHkgYWx3YXlzIHJlc2V0dGluZyB0aGVzZSByZXN1
bHQgaW4gdGltZW91dHMKKyAgICBtX2hhc0R1bXBlZCA9IHRydWU7CisgICAgbV93YWl0Rm9yUG9s
aWN5ID0gZmFsc2U7Cit9CisKK2ludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2luZG93Q291bnQo
KQoreworICAgIHJldHVybiBtX2RydC0+d2luZG93Q291bnQoKTsKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6Z3JhbnREZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvbihjb25zdCBR
U3RyaW5nJiBvcmlnaW4pCit7CisgICAgUVdlYkZyYW1lKiBmcmFtZSA9IG1fZHJ0LT53ZWJQYWdl
KCktPm1haW5GcmFtZSgpOworICAgIG1fZHJ0LT53ZWJQYWdlKCktPnNldEZlYXR1cmVQZXJtaXNz
aW9uKGZyYW1lLCBRV2ViUGFnZTo6Tm90aWZpY2F0aW9ucywgUVdlYlBhZ2U6OlBlcm1pc3Npb25H
cmFudGVkQnlVc2VyKTsKKyAgICBtX2Rlc2t0b3BOb3RpZmljYXRpb25BbGxvd2VkT3JpZ2lucy5h
cHBlbmQob3JpZ2luKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6aWdub3JlRGVz
a3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0cygpCit7CisgICAgbV9pZ25vcmVEZXNr
dG9wTm90aWZpY2F0aW9uID0gdHJ1ZTsKK30KKworYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
Y2hlY2tEZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvbihjb25zdCBRU3RyaW5nJiBvcmlnaW4p
Cit7CisgICAgcmV0dXJuICFtX2lnbm9yZURlc2t0b3BOb3RpZmljYXRpb24gJiYgbV9kZXNrdG9w
Tm90aWZpY2F0aW9uQWxsb3dlZE9yaWdpbnMuY29udGFpbnMob3JpZ2luKTsKK30KKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2ltdWxhdGVEZXNrdG9wTm90aWZpY2F0aW9uQ2xpY2soY29u
c3QgUVN0cmluZyYgdGl0bGUpCit7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNpbXVs
YXRlRGVza3RvcE5vdGlmaWNhdGlvbkNsaWNrKHRpdGxlKTsKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZGlzcGxheSgpCit7CisgICAgZW1pdCBzaG93UGFnZSgpOworfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpkaXNwbGF5SW52YWxpZGF0ZWRSZWdpb24oKQoreworICAg
IGRpc3BsYXkoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJCYWNrRm9y
d2FyZExpc3QoKQoreworICAgIG1fZHJ0LT53ZWJQYWdlKCktPmhpc3RvcnkoKS0+Y2xlYXIoKTsK
K30KKworUVN0cmluZyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF0aFRvTG9jYWxSZXNvdXJjZShj
b25zdCBRU3RyaW5nJiB1cmwpCit7CisgICAgUVN0cmluZyBsb2NhbFRtcFVybChRTGF0aW4xU3Ry
aW5nKCJmaWxlOi8vL3RtcC9MYXlvdXRUZXN0cyIpKTsKKworICAgIC8vIFRyYW5zbGF0ZSBhIHJl
cXVlc3QgZm9yIC90bXAvTGF5b3V0VGVzdHMgdG8gdGhlIHJlcG9zaXRvcnkgTGF5b3V0VGVzdHMg
ZGlyZWN0b3J5LgorICAgIC8vIERvIG5vdCByZWx5IG9uIGEgc3ltbGluayB0byBiZSBjcmVhdGVk
IHZpYSB0aGUgdGVzdCBydW5uZXIsIHdoaWNoIHdpbGwgbm90IHdvcmsgb24gV2luZG93cy4KKyAg
ICBpZiAodXJsLnN0YXJ0c1dpdGgobG9jYWxUbXBVcmwpKSB7CisgICAgICAgIC8vIER1bXBSZW5k
ZXJUcmVlIGxpdmVzIGluIFdlYktpdC9XZWJLaXRCdWlsZC88YnVpbGRfbW9kZT4vYmluLgorICAg
ICAgICAvLyBUcmFuc2xhdGUgZnJvbSBXZWJLaXQvV2ViS2l0QnVpbGQvUmVsZWFzZS9iaW4gPT4g
V2ViS2l0L0xheW91dFRlc3RzLgorICAgICAgICBRRmlsZUluZm8gbGF5b3V0VGVzdHNSb290KFFD
b3JlQXBwbGljYXRpb246OmFwcGxpY2F0aW9uRGlyUGF0aCgpICsgUUxhdGluMVN0cmluZygiLy4u
Ly4uLy4uL0xheW91dFRlc3RzLyIpKTsKKyAgICAgICAgaWYgKGxheW91dFRlc3RzUm9vdC5leGlz
dHMoKSkKKyAgICAgICAgICAgIHJldHVybiBRTGF0aW4xU3RyaW5nKCJmaWxlOi8vIikgKyBsYXlv
dXRUZXN0c1Jvb3QuYWJzb2x1dGVQYXRoKCkgKyB1cmwubWlkKGxvY2FsVG1wVXJsLmxlbmd0aCgp
KTsKKyAgICB9CisKKyAgICByZXR1cm4gdXJsOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpkdW1wRWRpdGluZ0NhbGxiYWNrcygpCit7CisgICAgcURlYnVnKCkgPDwgIj4+PmR1bXBF
ZGl0aW5nQ2FsbGJhY2tzIjsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVtcEVkaXRp
bmdDYWxsYmFja3ModHJ1ZSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBG
cmFtZUxvYWRDYWxsYmFja3MoKQoreworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1w
RnJhbWVMb2FkZXIodHJ1ZSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBQ
cm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2soKQoreworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
OjpkdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrKHRydWUpOworfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpkdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrcygpCit7Cisg
ICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkZXIo
dHJ1ZSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBSZXNvdXJjZUxvYWRD
YWxsYmFja3MoKQoreworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wUmVzb3VyY2VM
b2FkQ2FsbGJhY2tzKHRydWUpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkdW1w
UmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcygpCit7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQ6OmR1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzKHRydWUpOworfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpkdW1wV2lsbENhY2hlUmVzcG9uc2UoKQoreworICAgIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OjpkdW1wV2lsbENhY2hlUmVzcG9uc2VDYWxsYmFja3ModHJ1ZSk7Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBIaXN0b3J5Q2FsbGJhY2tzKCkKK3sK
KyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVtcEhpc3RvcnlDYWxsYmFja3ModHJ1ZSk7
Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdpbGxTZW5kUmVxdWVzdFJldHVy
bnNOdWxsT25SZWRpcmVjdChib29sIGVuYWJsZWQpCit7CisgICAgRHVtcFJlbmRlclRyZWVTdXBw
b3J0UXQ6OnNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVjdChlbmFibGVkKTsK
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJu
c051bGwoYm9vbCBlbmFibGVkKQoreworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRX
aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbChlbmFibGVkKTsKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0V2lsbFNlbmRSZXF1ZXN0Q2xlYXJIZWFkZXIoY29uc3QgUVN0cmluZ0xp
c3QmIGhlYWRlcnMpCit7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldFdpbGxTZW5k
UmVxdWVzdENsZWFySGVhZGVycyhoZWFkZXJzKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0RGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZChib29sIGRlZmVyKQoreworICAgIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXREZWZlck1haW5SZXNvdXJjZURhdGFMb2FkKGRlZmVy
KTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVCYWNrTmF2aWdhdGlvbihp
bnQgaG93RmFyQmFja3dhcmQpCit7CisgICAgLy9xRGVidWcoKSA8PCAiPj4+cXVldWVCYWNrTmF2
aWdhdGlvbiIgPDwgaG93RmFyQmFja3dhcmQ7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgIT0gaG93
RmFyQmFja3dhcmQ7ICsraSkKKyAgICAgICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+cXVldWUobmV3
IEJhY2tJdGVtKDEsIG1fZHJ0LT53ZWJQYWdlKCkpKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6cXVldWVGb3J3YXJkTmF2aWdhdGlvbihpbnQgaG93RmFyRm9yd2FyZCkKK3sKKyAg
ICAvL3FEZWJ1ZygpIDw8ICI+Pj5xdWV1ZUZvcndhcmROYXZpZ2F0aW9uIiA8PCBob3dGYXJGb3J3
YXJkOworICAgIGZvciAoaW50IGkgPSAwOyBpICE9IGhvd0ZhckZvcndhcmQ7ICsraSkKKyAgICAg
ICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+cXVldWUobmV3IEZvcndhcmRJdGVtKDEsIG1fZHJ0LT53
ZWJQYWdlKCkpKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVMb2FkKGNv
bnN0IFFTdHJpbmcmIHVybCwgY29uc3QgUVN0cmluZyYgdGFyZ2V0KQoreworICAgIC8vcURlYnVn
KCkgPDwgIj4+PnF1ZXVlTG9hZCIgPDwgdXJsIDw8IHRhcmdldDsKKyAgICBRVXJsIG1haW5SZXNv
dXJjZVVybCA9IG1fZHJ0LT53ZWJQYWdlKCktPm1haW5GcmFtZSgpLT51cmwoKTsKKyAgICBRU3Ry
aW5nIGFic29sdXRlVXJsID0gbWFpblJlc291cmNlVXJsLnJlc29sdmVkKFFVcmwodXJsKSkudG9F
bmNvZGVkKCk7CisgICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+cXVldWUobmV3IExvYWRJdGVtKGFi
c29sdXRlVXJsLCB0YXJnZXQsIG1fZHJ0LT53ZWJQYWdlKCkpKTsKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6cXVldWVMb2FkSFRNTFN0cmluZyhjb25zdCBRU3RyaW5nJiBjb250ZW50
LCBjb25zdCBRU3RyaW5nJiBiYXNlVVJMLCBjb25zdCBRU3RyaW5nJiBmYWlsaW5nVVJMKQorewor
ICAgIGlmIChmYWlsaW5nVVJMLmlzRW1wdHkoKSkKKyAgICAgICAgV29ya1F1ZXVlOjpzaGFyZWQo
KS0+cXVldWUobmV3IExvYWRIVE1MU3RyaW5nSXRlbShjb250ZW50LCBiYXNlVVJMLCBtX2RydC0+
d2ViUGFnZSgpKSk7CisgICAgZWxzZQorICAgICAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1
ZShuZXcgTG9hZEFsdGVybmF0ZUhUTUxTdHJpbmdJdGVtKGNvbnRlbnQsIGJhc2VVUkwsIGZhaWxp
bmdVUkwsIG1fZHJ0LT53ZWJQYWdlKCkpKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6cXVldWVSZWxvYWQoKQoreworICAgIC8vcURlYnVnKCkgPDwgIj4+PnF1ZXVlUmVsb2FkIjsK
KyAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcgUmVsb2FkSXRlbShtX2RydC0+d2Vi
UGFnZSgpKSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVlTG9hZGluZ1Nj
cmlwdChjb25zdCBRU3RyaW5nJiBzY3JpcHQpCit7CisgICAgLy9xRGVidWcoKSA8PCAiPj4+cXVl
dWVMb2FkaW5nU2NyaXB0IiA8PCBzY3JpcHQ7CisgICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+cXVl
dWUobmV3IExvYWRpbmdTY3JpcHRJdGVtKHNjcmlwdCwgbV9kcnQtPndlYlBhZ2UoKSkpOworfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZU5vbkxvYWRpbmdTY3JpcHQoY29uc3Qg
UVN0cmluZyYgc2NyaXB0KQoreworICAgIC8vcURlYnVnKCkgPDwgIj4+PnF1ZXVlTm9uTG9hZGlu
Z1NjcmlwdCIgPDwgc2NyaXB0OworICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBO
b25Mb2FkaW5nU2NyaXB0SXRlbShzY3JpcHQsIG1fZHJ0LT53ZWJQYWdlKCkpKTsKK30KKwordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cHJvdmlzaW9uYWxMb2FkKCkKK3sKKyAgICBRV2ViRnJh
bWUqIGZyYW1lID0gcW9iamVjdF9jYXN0PFFXZWJGcmFtZSo+KHNlbmRlcigpKTsKKyAgICBpZiAo
IW1fdG9wTG9hZGluZ0ZyYW1lICYmICFtX2hhc0R1bXBlZCkKKyAgICAgICAgbV90b3BMb2FkaW5n
RnJhbWUgPSBmcmFtZTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6dGltZXJFdmVu
dChRVGltZXJFdmVudCAqZXYpCit7CisgICAgaWYgKGV2LT50aW1lcklkKCkgPT0gbV90aW1lb3V0
VGltZXIudGltZXJJZCgpKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIG1lc3NhZ2UgPSAiRkFJTDog
VGltZWQgb3V0IHdhaXRpbmcgZm9yIG5vdGlmeURvbmUgdG8gYmUgY2FsbGVkXG4iOworICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIiVzIiwgbWVzc2FnZSk7CisgICAgICAgIGZwcmludGYoc3Rkb3V0
LCAiJXMiLCBtZXNzYWdlKTsKKyAgICAgICAgbm90aWZ5RG9uZSgpOworICAgIH0gZWxzZQorICAg
ICAgICBRT2JqZWN0Ojp0aW1lckV2ZW50KGV2KTsKK30KKworUVN0cmluZyBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6ZW5jb2RlSG9zdE5hbWUoY29uc3QgUVN0cmluZyYgaG9zdCkKK3sKKyAgICBRU3Ry
aW5nIGVuY29kZWQgPSBRU3RyaW5nOjpmcm9tTGF0aW4xKFFVcmw6OnRvQWNlKGhvc3QgKyBRTGF0
aW4xU3RyaW5nKCIubm8iKSkpOworICAgIGVuY29kZWQudHJ1bmNhdGUoZW5jb2RlZC5sZW5ndGgo
KSAtIDMpOyAvLyBzdHJpcCAubm8KKyAgICByZXR1cm4gZW5jb2RlZDsKK30KKworUVN0cmluZyBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVjb2RlSG9zdE5hbWUoY29uc3QgUVN0cmluZyYgaG9zdCkK
K3sKKyAgICBRU3RyaW5nIGRlY29kZWQgPSBRVXJsOjpmcm9tQWNlKGhvc3QudG9MYXRpbjEoKSAr
IFFCeXRlQXJyYXkoIi5ubyIpKTsKKyAgICBkZWNvZGVkLnRydW5jYXRlKGRlY29kZWQubGVuZ3Ro
KCkgLSAzKTsKKyAgICByZXR1cm4gZGVjb2RlZDsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0TWVkaWFUeXBlKGNvbnN0IFFTdHJpbmcmIHR5cGUpCit7CisgICAgRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OnNldE1lZGlhVHlwZShtX2RydC0+d2ViUGFnZSgpLT5tYWluRnJhbWUo
KSwgdHlwZSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsb3NlV2ViSW5zcGVj
dG9yKCkKK3sKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6d2ViSW5zcGVjdG9yQ2xvc2Uo
bV9kcnQtPndlYlBhZ2UoKSk7CisgICAgbV9kcnQtPndlYlBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0
QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCwgZmFsc2UpOwor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREZXZlbG9wZXJFeHRyYXNFbmFibGVk
KGJvb2wgZW5hYmxlZCkKK3sKKyAgICBtX2RydC0+d2ViUGFnZSgpLT5zZXR0aW5ncygpLT5zZXRB
dHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpEZXZlbG9wZXJFeHRyYXNFbmFibGVkLCBlbmFibGVkKTsK
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXN5bmNocm9ub3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQoYm9vbCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNob3dXZWJJbnNwZWN0b3IoKQoreworICAgIG1f
ZHJ0LT53ZWJQYWdlKCktPnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkRl
dmVsb3BlckV4dHJhc0VuYWJsZWQsIHRydWUpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
Ojp3ZWJJbnNwZWN0b3JTaG93KG1fZHJ0LT53ZWJQYWdlKCkpOworfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpldmFsdWF0ZUluV2ViSW5zcGVjdG9yKGxvbmcgY2FsbElkLCBjb25zdCBR
U3RyaW5nJiBzY3JpcHQpCit7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OndlYkluc3Bl
Y3RvckV4ZWN1dGVTY3JpcHQobV9kcnQtPndlYlBhZ2UoKSwgY2FsbElkLCBzY3JpcHQpOworfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkKGJv
b2wgZW5hYmxlZCkKK3sKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0RnJhbWVGbGF0
dGVuaW5nRW5hYmxlZChtX2RydC0+d2ViUGFnZSgpLCBlbmFibGVkKTsKK30KKwordm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja1Njcm9sbGJhcnNFbmFibGVkKGJvb2wgZW5hYmxlZCkK
K3sKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0TW9ja1Njcm9sbGJhcnNFbmFibGVk
KG1fZHJ0LT53ZWJQYWdlKCksIGVuYWJsZWQpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpnb0JhY2soKQoreworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpnb0JhY2sobV9k
cnQtPndlYlBhZ2UoKSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERlZmVy
c0xvYWRpbmcoYm9vbCBmbGFnKQoreworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRE
ZWZlcnNMb2FkaW5nKG1fZHJ0LT53ZWJQYWdlKCksIGZsYWcpOworfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyhib29sIGVu
YWJsZWQpCit7CisgICAgbV9kcnQtPndlYlBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0QXR0cmlidXRl
KFFXZWJTZXR0aW5nczo6TG9jYWxDb250ZW50Q2FuQWNjZXNzUmVtb3RlVXJscywgZW5hYmxlZCk7
Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93RmlsZUFjY2Vzc0Zyb21G
aWxlVVJMcyhib29sIGVuYWJsZWQpCit7CisgICAgbV9kcnQtPndlYlBhZ2UoKS0+c2V0dGluZ3Mo
KS0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6TG9jYWxDb250ZW50Q2FuQWNjZXNzRmlsZVVy
bHMsIGVuYWJsZWQpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBcHBDYWNo
ZU1heGltdW1TaXplKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSkKK3sKKyAgICBtX2RydC0+d2Vi
UGFnZSgpLT5zZXR0aW5ncygpLT5zZXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZVF1b3RhKHF1
b3RhKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0b2ZpbGxlZChjb25z
dCBRV2ViRWxlbWVudCYgZWxlbWVudCwgYm9vbCBpc0F1dG9maWxsZWQpCit7CisgICAgcmV0dXJu
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRBdXRvZmlsbGVkKGVsZW1lbnQsIGlzQXV0b2Zp
bGxlZCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFZhbHVlRm9yVXNlcihj
b25zdCBRV2ViRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUVN0cmluZyYgdmFsdWUpCit7CisgICAg
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldFZhbHVlRm9yVXNlcihlbGVtZW50LCB2YWx1ZSk7
Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEZpeGVkQ29udGVudHNTaXplKGlu
dCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBtX3RvcExvYWRpbmdGcmFtZS0+cGFnZSgpLT5z
ZXRQcmVmZXJyZWRDb250ZW50c1NpemUoUVNpemUod2lkdGgsIGhlaWdodCkpOworfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKGJvb2wgZW5h
YmxlKQoreworICAgIG1fZHJ0LT53ZWJQYWdlKCktPnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShR
V2ViU2V0dGluZ3M6OlByaXZhdGVCcm93c2luZ0VuYWJsZWQsIGVuYWJsZSk7Cit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChib29sIGVu
YWJsZSkKK3sKKyAgICBtX2RydC0+d2ViUGFnZSgpLT5zZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUo
UVdlYlNldHRpbmdzOjpTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQsIGVuYWJsZSk7Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBvcHVwQmxvY2tpbmdFbmFibGVkKGJvb2wgZW5h
YmxlKQoreworICAgIG1fZHJ0LT53ZWJQYWdlKCktPnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShR
V2ViU2V0dGluZ3M6OkphdmFzY3JpcHRDYW5PcGVuV2luZG93cywgIWVuYWJsZSk7Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBsdWdpbnNFbmFibGVkKGJvb2wgZmxhZykKK3sK
KyAgICAvLyBGSVhNRTogSW1wbGVtZW50Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFBPU0lYTG9jYWxlKGNvbnN0IFFTdHJpbmcmIGxvY2FsZSkKK3sKKyAgICBRTG9jYWxlIHFs
b2NhbGUobG9jYWxlKTsKKyAgICBRTG9jYWxlOjpzZXREZWZhdWx0KHFsb2NhbGUpOworfSAKKwor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2luZG93SXNLZXkoYm9vbCBpc0tleSkKK3sK
KyAgICBtX2RydC0+c3dpdGNoRm9jdXMoaXNLZXkpOworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRNYWluRnJhbWVJc0ZpcnN0UmVzcG9uZGVyKGJvb2wgaXNGaXJzdCkKK3sKKyAg
ICAvL0ZJWE1FOiBvbmx5IG5lZWQgdGhpcyBmb3IgdGhlIG1vbWVudDogaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyOTkwCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQoYm9vbCBlbmFibGUpCit7Cisg
ICAgbV9kcnQtPndlYlBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5n
czo6SmF2YXNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZCwgZW5hYmxlKTsKK30KKwordm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0WFNTQXVkaXRvckVuYWJsZWQoYm9vbCBlbmFibGUpCit7Cisg
ICAgLy8gU2V0IFhTU0F1ZGl0aW5nRW5hYmxlZCBnbG9iYWxseSBzbyB0aGF0IHdpbmRvd3MgY3Jl
YXRlZCBieSB0aGUgdGVzdCBpbmhlcml0IGl0IHRvby4KKyAgICAvLyByZXNldFNldHRpbmdzKCkg
d2lsbCBjYWxsIHRoaXMgdG8gcmVzZXQgdGhlIHBhZ2UgYW5kIGdsb2JhbCBzZXR0aW5nIHRvIGZh
bHNlIGFnYWluLgorICAgIC8vIE5lZWRlZCBieSBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0
b3IvbGluay1vcGVucy1uZXctd2luZG93Lmh0bWwKKyAgICBRV2ViU2V0dGluZ3MqIGdsb2JhbFNl
dHRpbmdzID0gUVdlYlNldHRpbmdzOjpnbG9iYWxTZXR0aW5ncygpOworICAgIGdsb2JhbFNldHRp
bmdzLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpYU1NBdWRpdGluZ0VuYWJsZWQsIGVuYWJs
ZSk7CisgICAgbV9kcnQtPndlYlBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0QXR0cmlidXRlKFFXZWJT
ZXR0aW5nczo6WFNTQXVkaXRpbmdFbmFibGVkLCBlbmFibGUpOworfQorCitib29sIExheW91dFRl
c3RDb250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChjb25zdCBR
U3RyaW5nJiBhbmltYXRpb25OYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHRpbWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBR
U3RyaW5nJiBlbGVtZW50SWQpCit7CisgICAgUVdlYkZyYW1lKiBmcmFtZSA9IG1fZHJ0LT53ZWJQ
YWdlKCktPm1haW5GcmFtZSgpOworICAgIFFfQVNTRVJUKGZyYW1lKTsKKyAgICByZXR1cm4gRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OnBhdXNlQW5pbWF0aW9uKGZyYW1lLCBhbmltYXRpb25OYW1l
LCB0aW1lLCBlbGVtZW50SWQpOworfQorCitib29sIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVz
ZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoY29uc3QgUVN0cmluZyYgcHJvcGVydHlO
YW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRvdWJsZSB0aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcmIGVsZW1lbnRJ
ZCkKK3sKKyAgICBRV2ViRnJhbWUqIGZyYW1lID0gbV9kcnQtPndlYlBhZ2UoKS0+bWFpbkZyYW1l
KCk7CisgICAgUV9BU1NFUlQoZnJhbWUpOworICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6cGF1c2VUcmFuc2l0aW9uT2ZQcm9wZXJ0eShmcmFtZSwgcHJvcGVydHlOYW1lLCB0aW1l
LCBlbGVtZW50SWQpOworfQorCit1bnNpZ25lZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVy
T2ZBY3RpdmVBbmltYXRpb25zKCkgY29uc3QKK3sKKyAgICBRV2ViRnJhbWUqIGZyYW1lID0gbV9k
cnQtPndlYlBhZ2UoKS0+bWFpbkZyYW1lKCk7CisgICAgUV9BU1NFUlQoZnJhbWUpOworICAgIHJl
dHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKGZy
YW1lKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzYWJsZUltYWdlTG9hZGlu
ZygpCit7CisgICAgbV9kcnQtPndlYlBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0QXR0cmlidXRlKFFX
ZWJTZXR0aW5nczo6QXV0b0xvYWRJbWFnZXMsIGZhbHNlKTsKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZGlzcGF0Y2hQZW5kaW5nTG9hZFJlcXVlc3RzKCkKK3sKKyAgICAvLyBGSVhN
RTogSW1wbGVtZW50IGZvciB0ZXN0aW5nIGZpeCBmb3IgNjcyNzQ5NQorfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKCkKK3sKKyAgICBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6Y2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcygpOworfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4o
Y29uc3QgUVN0cmluZyYgdXJsKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gc3VwcG9y
dCBkZWxldGluZyBhbGwgYXBwbGljYXRpb24gY2FjaGVzIGZvciBhbiBvcmlnaW4uCit9CisKK2xv
bmcgbG9uZyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bG9jYWxTdG9yYWdlRGlza1VzYWdlRm9yT3Jp
Z2luKGNvbnN0IFFTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCit7CisgICAgLy8gRklYTUU6IElt
cGxlbWVudCB0byBzdXBwb3J0IGdldHRpbmcgZGlzayB1c2FnZSBpbiBieXRlcyBmb3IgYW4gb3Jp
Z2luLgorICAgIHJldHVybiAwOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRB
cHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEodW5zaWduZWQgbG9uZyBsb25nIHF1b3RhKQorewor
ICAgIGlmICghbV90b3BMb2FkaW5nRnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICBtX3RvcExv
YWRpbmdGcmFtZS0+c2VjdXJpdHlPcmlnaW4oKS5zZXRBcHBsaWNhdGlvbkNhY2hlUXVvdGEocXVv
dGEpOworfQorCitsb25nIGxvbmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFwcGxpY2F0aW9uQ2Fj
aGVEaXNrVXNhZ2VGb3JPcmlnaW4oY29uc3QgUVN0cmluZyYgb3JpZ2luKQoreworICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgdG8gc3VwcG9ydCBnZXR0aW5nIGRpc2sgdXNhZ2UgYnkgYWxsIGFwcGxp
Y2F0aW9uIGNhY2hlcyBmb3IgYW4gb3JpZ2luLgorICAgIHJldHVybiAwOworfQorCitRU3RyaW5n
TGlzdCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKCkK
K3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIGdldCBvcmlnaW5zIHRoYXQgaGF2ZSBhcHBs
aWNhdGlvbiBjYWNoZXMuCisgICAgcmV0dXJuIFFTdHJpbmdMaXN0KCk7Cit9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldENhY2hlTW9kZWwoaW50IG1vZGVsKQoreworICAgIC8vIHF3
ZWJzZXR0aW5nIGRvZXNuJ3QgaGF2ZSBtYXRjaGVkIHNldHRpbmcgeWV0IDoKKyAgICAvLyBXRUJL
SVRfQ0FDSEVfTU9ERUxfRE9DVU1FTlRfVklFV0VSCisgICAgLy8gV0VCS0lUX0NBQ0hFX01PREVM
X0RPQ1VNRU5UX0JST1dTRVIKKyAgICAvLyBXRUJLSVRfQ0FDSEVfTU9ERUxfV0VCX0JST1dTRVIK
KworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldERhdGFiYXNlUXVvdGEoaW50IHNpemUpCit7CisgICAgaWYgKCFtX3RvcExvYWRpbmdG
cmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fdG9wTG9hZGluZ0ZyYW1lLT5zZWN1cml0eU9y
aWdpbigpLnNldERhdGFiYXNlUXVvdGEoc2l6ZSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmNsZWFyQWxsRGF0YWJhc2VzKCkKK3sKKyAgICBRV2ViRGF0YWJhc2U6OnJlbW92ZUFs
bERhdGFiYXNlcygpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRPcmlnaW5B
Y2Nlc3NXaGl0ZWxpc3RFbnRyeShjb25zdCBRU3RyaW5nJiBzb3VyY2VPcmlnaW4sIGNvbnN0IFFT
dHJpbmcmIGRlc3RpbmF0aW9uUHJvdG9jb2wsIGNvbnN0IFFTdHJpbmcmIGRlc3RpbmF0aW9uSG9z
dCwgYm9vbCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucykKK3sKKyAgICBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRRdDo6d2hpdGVMaXN0QWNjZXNzRnJvbU9yaWdpbihzb3VyY2VPcmlnaW4sIGRlc3Rp
bmF0aW9uUHJvdG9jb2wsIGRlc3RpbmF0aW9uSG9zdCwgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFp
bnMpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZW1vdmVPcmlnaW5BY2Nlc3NX
aGl0ZWxpc3RFbnRyeShjb25zdCBRU3RyaW5nJiBzb3VyY2VPcmlnaW4sIGNvbnN0IFFTdHJpbmcm
IGRlc3RpbmF0aW9uUHJvdG9jb2wsIGNvbnN0IFFTdHJpbmcmIGRlc3RpbmF0aW9uSG9zdCwgYm9v
bCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucykKK3sKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6cmVtb3ZlV2hpdGVMaXN0QWNjZXNzRnJvbU9yaWdpbihzb3VyY2VPcmlnaW4sIGRlc3Rp
bmF0aW9uUHJvdG9jb2wsIGRlc3RpbmF0aW9uSG9zdCwgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFp
bnMpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRDdXN0b21Qb2xpY3lEZWxl
Z2F0ZShib29sIGVuYWJsZWQsIGJvb2wgcGVybWlzc2l2ZSkKK3sKKyAgICBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRRdDo6c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoZW5hYmxlZCwgcGVybWlzc2l2ZSk7
Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgp
Cit7CisgICAgc2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUodHJ1ZSk7CisgICAgbV93YWl0Rm9yUG9s
aWN5ID0gdHJ1ZTsKKyAgICB3YWl0VW50aWxEb25lKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6Om92ZXJyaWRlUHJlZmVyZW5jZShjb25zdCBRU3RyaW5nJiBuYW1lLCBjb25zdCBR
VmFyaWFudCYgdmFsdWUpCit7CisgICAgUVdlYlNldHRpbmdzKiBzZXR0aW5ncyA9IG1fdG9wTG9h
ZGluZ0ZyYW1lLT5wYWdlKCktPnNldHRpbmdzKCk7CisKKyAgICBpZiAobmFtZSA9PSAiV2ViS2l0
SmF2YVNjcmlwdEVuYWJsZWQiKQorICAgICAgICBzZXR0aW5ncy0+c2V0QXR0cmlidXRlKFFXZWJT
ZXR0aW5nczo6SmF2YXNjcmlwdEVuYWJsZWQsIHZhbHVlLnRvQm9vbCgpKTsKKyAgICBlbHNlIGlm
IChuYW1lID09ICJXZWJLaXRUYWJUb0xpbmtzUHJlZmVyZW5jZUtleSIpCisgICAgICAgIHNldHRp
bmdzLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpMaW5rc0luY2x1ZGVkSW5Gb2N1c0NoYWlu
LCB2YWx1ZS50b0Jvb2woKSk7CisgICAgZWxzZSBpZiAobmFtZSA9PSAiV2ViS2l0T2ZmbGluZVdl
YkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkIikKKyAgICAgICAgc2V0dGluZ3MtPnNldEF0dHJpYnV0
ZShRV2ViU2V0dGluZ3M6Ok9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCwgdmFsdWUu
dG9Cb29sKCkpOworICAgIGVsc2UgaWYgKG5hbWUgPT0gIldlYktpdERlZmF1bHRGb250U2l6ZSIp
CisgICAgICAgIHNldHRpbmdzLT5zZXRGb250U2l6ZShRV2ViU2V0dGluZ3M6OkRlZmF1bHRGb250
U2l6ZSwgdmFsdWUudG9JbnQoKSk7CisgICAgZWxzZSBpZiAobmFtZSA9PSAiV2ViS2l0VXNlc1Bh
Z2VDYWNoZVByZWZlcmVuY2VLZXkiKQorICAgICAgICBRV2ViU2V0dGluZ3M6OnNldE1heGltdW1Q
YWdlc0luQ2FjaGUodmFsdWUudG9JbnQoKSk7CisgICAgZWxzZSBpZiAobmFtZSA9PSAiV2ViS2l0
RW5hYmxlQ2FyZXRCcm93c2luZyIpCisgICAgICAgIHNldENhcmV0QnJvd3NpbmdFbmFibGVkKHZh
bHVlLnRvQm9vbCgpKTsKKyAgICBlbHNlIGlmIChuYW1lID09ICJXZWJLaXRQbHVnaW5zRW5hYmxl
ZCIpCisgICAgICAgIHNldHRpbmdzLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpQbHVnaW5z
RW5hYmxlZCwgdmFsdWUudG9Cb29sKCkpOworICAgIGVsc2UgaWYgKG5hbWUgPT0gIldlYktpdFdl
YkdMRW5hYmxlZCIpCisgICAgICAgIHNldHRpbmdzLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdz
OjpXZWJHTEVuYWJsZWQsIHZhbHVlLnRvQm9vbCgpKTsKKyAgICBlbHNlIGlmIChuYW1lID09ICJX
ZWJLaXRDU1NSZWdpb25zRW5hYmxlZCIpCisgICAgICAgIHNldHRpbmdzLT5zZXRBdHRyaWJ1dGUo
UVdlYlNldHRpbmdzOjpDU1NSZWdpb25zRW5hYmxlZCwgdmFsdWUudG9Cb29sKCkpOworICAgIGVs
c2UgaWYgKG5hbWUgPT0gIldlYktpdENTU0dyaWRMYXlvdXRFbmFibGVkIikKKyAgICAgICAgc2V0
dGluZ3MtPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkNTU0dyaWRMYXlvdXRFbmFibGVkLCB2
YWx1ZS50b0Jvb2woKSk7CisgICAgZWxzZSBpZiAobmFtZSA9PSAiV2ViS2l0SHlwZXJsaW5rQXVk
aXRpbmdFbmFibGVkIikKKyAgICAgICAgc2V0dGluZ3MtPnNldEF0dHJpYnV0ZShRV2ViU2V0dGlu
Z3M6Okh5cGVybGlua0F1ZGl0aW5nRW5hYmxlZCwgdmFsdWUudG9Cb29sKCkpOworICAgIGVsc2Ug
aWYgKG5hbWUgPT0gIldlYktpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkIikKKyAgICAg
ICAgc2V0dGluZ3MtPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdFbmFibGVkLCB2YWx1ZS50b0Jvb2woKSk7CisgICAgZWxzZQorICAgICAgICBwcmludGYo
IkVSUk9SOiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCkgZG9lcyBu
b3Qgc3VwcG9ydCB0aGUgJyVzJyBwcmVmZXJlbmNlXG4iLAorICAgICAgICAgICAgbmFtZS50b0xh
dGluMSgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZXJT
dHlsZVNoZWV0TG9jYXRpb24oY29uc3QgUVN0cmluZyYgdXJsKQoreworICAgIFFCeXRlQXJyYXkg
dXJsRGF0YSA9IHBhdGhUb0xvY2FsUmVzb3VyY2UodXJsKS50b0xhdGluMSgpOworICAgIG1fdXNl
clN0eWxlU2hlZXRMb2NhdGlvbiA9IFFVcmw6OmZyb21FbmNvZGVkKHVybERhdGEsIFFVcmw6OlN0
cmljdE1vZGUpOworCisgICAgaWYgKG1fdXNlclN0eWxlU2hlZXRFbmFibGVkKQorICAgICAgICBz
ZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQodHJ1ZSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldENhcmV0QnJvd3NpbmdFbmFibGVkKGJvb2wgdmFsdWUpCit7CisgICAgRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQ6OnNldENhcmV0QnJvd3NpbmdFbmFibGVkKG1fZHJ0LT53ZWJQYWdl
KCksIHZhbHVlKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0aG9yQW5k
VXNlclN0eWxlc0VuYWJsZWQoYm9vbCB2YWx1ZSkKK3sKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQobV9kcnQtPndlYlBhZ2UoKSwgdmFs
dWUpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5bGVTaGVldEVu
YWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIG1fdXNlclN0eWxlU2hlZXRFbmFibGVkID0gZW5h
YmxlZDsKKworICAgIGlmIChlbmFibGVkKQorICAgICAgICBtX2RydC0+d2ViUGFnZSgpLT5zZXR0
aW5ncygpLT5zZXRVc2VyU3R5bGVTaGVldFVybChtX3VzZXJTdHlsZVNoZWV0TG9jYXRpb24pOwor
ICAgIGVsc2UKKyAgICAgICAgbV9kcnQtPndlYlBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0VXNlclN0
eWxlU2hlZXRVcmwoUVVybCgpKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShib29sIGZvcmJpZGRlbiwgY29u
c3QgUVN0cmluZyYgc2NoZW1lKQoreworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRE
b21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGZvcmJpZGRlbiwgc2NoZW1lKTsK
K30KKworaW50IExheW91dFRlc3RDb250cm9sbGVyOjp3b3JrZXJUaHJlYWRDb3VudCgpCit7Cisg
ICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3b3JrZXJUaHJlYWRDb3VudCgpOwor
fQorCitpbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGFnZXMoZmxvYXQgd2lkdGgs
IGZsb2F0IGhlaWdodCkKK3sKKyAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6Om51
bWJlck9mUGFnZXMobV9kcnQtPndlYlBhZ2UoKS0+bWFpbkZyYW1lKCksIHdpZHRoLCBoZWlnaHQp
OworfQorCitib29sIExheW91dFRlc3RDb250cm9sbGVyOjpjYWxsU2hvdWxkQ2xvc2VPbldlYlZp
ZXcoKQoreworICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2hvdWxkQ2xvc2Uo
bV9kcnQtPndlYlBhZ2UoKS0+bWFpbkZyYW1lKCkpOworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRTY3JvbGxiYXJQb2xpY3koY29uc3QgUVN0cmluZyYgb3JpZW50YXRpb24sIGNv
bnN0IFFTdHJpbmcmIHBvbGljeSkKK3sKKyAgICBRdDo6T3JpZW50YXRpb24gbzsKKyAgICBRdDo6
U2Nyb2xsQmFyUG9saWN5IHA7CisKKyAgICBpZiAob3JpZW50YXRpb24gPT0gInZlcnRpY2FsIikK
KyAgICAgICAgbyA9IFF0OjpWZXJ0aWNhbDsKKyAgICBlbHNlIGlmIChvcmllbnRhdGlvbiA9PSAi
aG9yaXpvbnRhbCIpCisgICAgICAgIG8gPSBRdDo6SG9yaXpvbnRhbDsKKyAgICBlbHNlCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChwb2xpY3kgPT0gIm9uIikKKyAgICAgICAgcCA9IFF0OjpT
Y3JvbGxCYXJBbHdheXNPbjsKKyAgICBlbHNlIGlmIChwb2xpY3kgPT0gImF1dG8iKQorICAgICAg
ICBwID0gUXQ6OlNjcm9sbEJhckFzTmVlZGVkOworICAgIGVsc2UgaWYgKHBvbGljeSA9PSAib2Zm
IikKKyAgICAgICAgcCA9IFF0OjpTY3JvbGxCYXJBbHdheXNPZmY7CisgICAgZWxzZQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX2RydC0+d2ViUGFnZSgpLT5tYWluRnJhbWUoKS0+c2V0U2Nyb2xs
QmFyUG9saWN5KG8sIHApOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTbWFy
dEluc2VydERlbGV0ZUVuYWJsZWQoYm9vbCBlbmFibGUpCit7CisgICAgRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQ6OnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChtX2RydC0+d2ViUGFnZSgpLCBl
bmFibGUpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTZWxlY3RUcmFpbGlu
Z1doaXRlc3BhY2VFbmFibGVkKGJvb2wgZW5hYmxlKQoreworICAgIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0OjpzZXRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKG1fZHJ0LT53ZWJQYWdl
KCksIGVuYWJsZSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV4ZWNDb21tYW5k
KGNvbnN0IFFTdHJpbmcmIG5hbWUsIGNvbnN0IFFTdHJpbmcmIHZhbHVlKQoreworICAgIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0OjpleGVjdXRlQ29yZUNvbW1hbmRCeU5hbWUobV9kcnQtPndlYlBh
Z2UoKSwgbmFtZSwgdmFsdWUpOworfQorCitib29sIExheW91dFRlc3RDb250cm9sbGVyOjppc0Nv
bW1hbmRFbmFibGVkKGNvbnN0IFFTdHJpbmcmIG5hbWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojppc0NvbW1hbmRFbmFibGVkKG1fZHJ0LT53ZWJQYWdlKCks
IG5hbWUpOworfQorCitib29sIExheW91dFRlc3RDb250cm9sbGVyOjpmaW5kU3RyaW5nKGNvbnN0
IFFTdHJpbmcmIHN0cmluZywgY29uc3QgUVN0cmluZ0xpc3QmIG9wdGlvbkFycmF5KQoreworICAg
IHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZmluZFN0cmluZyhtX2RydC0+d2ViUGFn
ZSgpLCBzdHJpbmcsIG9wdGlvbkFycmF5KTsKK30KKworUVN0cmluZyBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6bWFya2VyVGV4dEZvckxpc3RJdGVtKGNvbnN0IFFXZWJFbGVtZW50JiBsaXN0SXRlbSkK
K3sKKyAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6Om1hcmtlclRleHRGb3JMaXN0
SXRlbShsaXN0SXRlbSk7Cit9CisKK1FWYXJpYW50TWFwIExheW91dFRlc3RDb250cm9sbGVyOjpj
b21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oY29uc3QgUVdlYkVsZW1lbnQmIGVsZW1l
bnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpjb21wdXRl
ZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oZWxlbWVudCk7Cit9CisKK2Jvb2wgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZChjb25z
dCBRU3RyaW5nJiBlbGVtZW50SWQpCit7CisgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9y
dFF0OjplbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQobV9kcnQtPndlYlBh
Z2UoKS0+bWFpbkZyYW1lKCksIGVsZW1lbnRJZCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmF1dGhlbnRpY2F0ZVNlc3Npb24oY29uc3QgUVN0cmluZyYsIGNvbnN0IFFTdHJpbmcm
LCBjb25zdCBRU3RyaW5nJikKK3sKKyAgICAvLyBGSVhNRTogSWYgdGhlcmUgaXMgYSBjb25jZXB0
IHBlci1zZXNzaW9uIChwZXItcHJvY2VzcykgY3JlZGVudGlhbCBzdG9yYWdlLCB0aGUgY3JlZGVu
dGlhbHMgc2hvdWxkIGJlIGFkZGVkIHRvIGl0IGZvciBsYXRlciB1c2UuCit9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldEljb25EYXRhYmFzZUVuYWJsZWQoYm9vbCBlbmFibGUpCit7
CisgICAgaWYgKGVuYWJsZSAmJiAhbV9kcnQtPnBlcnNpc3RlbnRTdG9yYWdlUGF0aCgpLmlzRW1w
dHkoKSkKKyAgICAgICAgUVdlYlNldHRpbmdzOjpzZXRJY29uRGF0YWJhc2VQYXRoKG1fZHJ0LT5w
ZXJzaXN0ZW50U3RvcmFnZVBhdGgoKSk7CisgICAgZWxzZQorICAgICAgICBRV2ViU2V0dGluZ3M6
OnNldEljb25EYXRhYmFzZVBhdGgoUVN0cmluZygpKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0TW9ja0RldmljZU9yaWVudGF0aW9uKGJvb2wgY2FuUHJvdmlkZUFscGhhLCBk
b3VibGUgYWxwaGEsIGJvb2wgY2FuUHJvdmlkZUJldGEsIGRvdWJsZSBiZXRhLCBib29sIGNhblBy
b3ZpZGVHYW1tYSwgZG91YmxlIGdhbW1hKQoreworICAgIFFMaXN0PFdlYkNvcmU6OldlYlBhZ2Uq
PiBwYWdlcyA9IG1fZHJ0LT5nZXRBbGxQYWdlcygpOworICAgIGZvcmVhY2ggKFdlYkNvcmU6Oldl
YlBhZ2UqIHBhZ2UsIHBhZ2VzKQorICAgICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0
TW9ja0RldmljZU9yaWVudGF0aW9uKHBhZ2UsIGNhblByb3ZpZGVBbHBoYSwgYWxwaGEsIGNhblBy
b3ZpZGVCZXRhLCBiZXRhLCBjYW5Qcm92aWRlR2FtbWEsIGdhbW1hKTsKK30KKwordm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wgYWxsb3cpCit7
CisgICAgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29tbW9uKGFsbG93KTsKKyAgICBRTGlzdDxX
ZWJDb3JlOjpXZWJQYWdlKj4gcGFnZXMgPSBtX2RydC0+Z2V0QWxsUGFnZXMoKTsKKyAgICBmb3Jl
YWNoIChXZWJDb3JlOjpXZWJQYWdlKiBwYWdlLCBwYWdlcykKKyAgICAgICAgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OnNldE1vY2tHZW9sb2NhdGlvblBlcm1pc3Npb24ocGFnZSwgYWxsb3cpOwor
fQorCitpbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9u
UGVybWlzc2lvblJlcXVlc3RzKCkKK3sKKyAgICBpbnQgcGVuZGluZ1Blcm1pc3Npb25Db3VudCA9
IDA7CisgICAgUUxpc3Q8V2ViQ29yZTo6V2ViUGFnZSo+IHBhZ2VzID0gbV9kcnQtPmdldEFsbFBh
Z2VzKCk7CisgICAgZm9yZWFjaCAoV2ViQ29yZTo6V2ViUGFnZSogcGFnZSwgcGFnZXMpCisgICAg
ICAgIHBlbmRpbmdQZXJtaXNzaW9uQ291bnQgKz0gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6Om51
bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKHBhZ2UpOworCisgICAg
cmV0dXJuIHBlbmRpbmdQZXJtaXNzaW9uQ291bnQ7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbihib29sIGFsbG93KQoreworICAg
ICBtX2lzR2VvbG9jYXRpb25QZXJtaXNzaW9uU2V0ID0gdHJ1ZTsKKyAgICAgbV9nZW9sb2NhdGlv
blBlcm1pc3Npb24gPSBhbGxvdzsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
TW9ja0dlb2xvY2F0aW9uRXJyb3IoaW50IGNvZGUsIGNvbnN0IFFTdHJpbmcmIG1lc3NhZ2UpCit7
CisgICAgUUxpc3Q8V2ViQ29yZTo6V2ViUGFnZSo+IHBhZ2VzID0gbV9kcnQtPmdldEFsbFBhZ2Vz
KCk7CisgICAgZm9yZWFjaCAoV2ViQ29yZTo6V2ViUGFnZSogcGFnZSwgcGFnZXMpCisgICAgICAg
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNb2NrR2VvbG9jYXRpb25FcnJvcihwYWdlLCBj
b2RlLCBtZXNzYWdlKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dl
b2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3Vi
bGUgYWNjdXJhY3kpCit7CisgICAgUUxpc3Q8V2ViQ29yZTo6V2ViUGFnZSo+IHBhZ2VzID0gbV9k
cnQtPmdldEFsbFBhZ2VzKCk7CisgICAgZm9yZWFjaCAoV2ViQ29yZTo6V2ViUGFnZSogcGFnZSwg
cGFnZXMpCisgICAgICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNb2NrR2VvbG9jYXRp
b25Qb3NpdGlvbihwYWdlLCBsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhY2N1cmFjeSk7Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdChjb25zdCBR
U3RyaW5nJiByZXN1bHQsIGRvdWJsZSBjb25maWRlbmNlLCBjb25zdCBRU3RyaW5nJiBsYW5ndWFn
ZSkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBzcGVlY2ggaW5wdXQgbGF5b3V0IHRl
c3RzLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Mzk0ODUuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tTcGVlY2hJbnB1
dER1bXBSZWN0KGJvb2wgZmxhZykKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBzcGVl
Y2ggaW5wdXQgbGF5b3V0IHRlc3RzLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnN0YXJ0U3BlZWNoSW5wdXQoY29uc3QgUVN0cmluZyYgaW5wdXRFbGVtZW50KQoreworICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgZm9yIHNwZWVjaCBpbnB1dCBsYXlvdXQgdGVzdHMuCisgICAgLy8g
U2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4KK30KKwor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRB
bmRSZXR1cm5WYWx1ZShpbnQgd29ybGRJRCwgY29uc3QgUVN0cmluZyYgc2NyaXB0KQoreworICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2
YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKGludCB3b3JsZElELCBjb25zdCBRU3RyaW5nJiBz
Y3JpcHQpCit7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmV2YWx1YXRlU2NyaXB0SW5J
c29sYXRlZFdvcmxkKG1fZHJ0LT53ZWJQYWdlKCktPm1haW5GcmFtZSgpLCB3b3JsZElELCBzY3Jp
cHQpOworfQorCitRU3RyaW5nIExheW91dFRlc3RDb250cm9sbGVyOjpwYWdlU2l6ZUFuZE1hcmdp
bnNJblBpeGVscyhpbnQgcGFnZUluZGV4LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBtYXJn
aW5Ub3AsIGludCBtYXJnaW5SaWdodCwgaW50IG1hcmdpbkJvdHRvbSwgaW50IG1hcmdpbkxlZnQp
Cit7CisgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpwYWdlU2l6ZUFuZE1hcmdp
bnNJblBpeGVscyhtX2RydC0+d2ViUGFnZSgpLT5tYWluRnJhbWUoKSwgcGFnZUluZGV4LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd2lkdGgsIGhlaWdodCwgbWFyZ2luVG9wLCBtYXJnaW5SaWdodCwgbWFyZ2luQm90dG9tLCBt
YXJnaW5MZWZ0KTsKK30KKworUVN0cmluZyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVByb3Bl
cnR5KGNvbnN0IFFTdHJpbmcmIHByb3BlcnR5TmFtZSwgaW50IHBhZ2VOdW1iZXIpCit7CisgICAg
cmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpwYWdlUHJvcGVydHkobV9kcnQtPndlYlBh
Z2UoKS0+bWFpbkZyYW1lKCksIHByb3BlcnR5TmFtZSwgcGFnZU51bWJlcik7Cit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJTdHlsZVNoZWV0KGNvbnN0IFFTdHJpbmcmIHNv
dXJjZUNvZGUpCit7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmFkZFVzZXJTdHlsZVNo
ZWV0KG1fZHJ0LT53ZWJQYWdlKCksIHNvdXJjZUNvZGUpOworfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpyZW1vdmVBbGxWaXNpdGVkTGlua3MoKQoreworICAgIFFXZWJIaXN0b3J5KiBo
aXN0b3J5ID0gbV9kcnQtPndlYlBhZ2UoKS0+aGlzdG9yeSgpOworICAgIGhpc3RvcnktPmNsZWFy
KCk7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBWaXNpdGVkTGlua3NDYWxsYmFj
a3ModHJ1ZSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVSTFRvUmVkaXJl
Y3QoY29uc3QgUVN0cmluZyYgb3JpZ2luLCBjb25zdCBRU3RyaW5nJiBkZXN0aW5hdGlvbikKK3sK
KyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6YWRkVVJMVG9SZWRpcmVjdChvcmlnaW4sIGRl
c3RpbmF0aW9uKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TWluaW11bVRp
bWVySW50ZXJ2YWwoZG91YmxlIG1pbmltdW1UaW1lckludGVydmFsKQoreworICAgIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OjpzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChtX2RydC0+d2ViUGFnZSgp
LCBtaW5pbXVtVGltZXJJbnRlcnZhbCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50Lgor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UoKQor
eworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbihjb25zdCBRU3RyaW5nJiBvcmlnaW5JZGVu
dGlmaWVyKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6Om9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnModW5zaWduZWQg
bnVtYmVyKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnN5bmNMb2NhbFN0b3JhZ2UoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlc2V0UGFnZVZpc2liaWxpdHko
KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0UGFnZVZpc2liaWxpdHkoY29uc3QgY2hhciopCit7CisgICAgLy8gRklY
TUU6IEltcGxlbWVudCB0aGlzLgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRB
dXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZChib29sKQoreworICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgdGhpcy4KK30KKworUVN0cmluZyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bGF5ZXJUcmVl
QXNUZXh0KCkKK3sKKyAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmxheWVyVHJl
ZUFzVGV4dChtX2RydC0+d2ViUGFnZSgpLT5tYWluRnJhbWUoKSk7Cit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFRleHREaXJlY3Rpb24oY29uc3QgUVN0cmluZyYgZGlyZWN0aW9u
TmFtZSkKK3sKKyAgICBpZiAoZGlyZWN0aW9uTmFtZSA9PSAiYXV0byIpCisgICAgICAgIG1fZHJ0
LT53ZWJQYWdlKCktPnRyaWdnZXJBY3Rpb24oUVdlYlBhZ2U6OlNldFRleHREaXJlY3Rpb25EZWZh
dWx0KTsKKyAgICBlbHNlIGlmIChkaXJlY3Rpb25OYW1lID09ICJydGwiKQorICAgICAgICBtX2Ry
dC0+d2ViUGFnZSgpLT50cmlnZ2VyQWN0aW9uKFFXZWJQYWdlOjpTZXRUZXh0RGlyZWN0aW9uUmln
aHRUb0xlZnQpOworICAgIGVsc2UgaWYgKGRpcmVjdGlvbk5hbWUgPT0gImx0ciIpCisgICAgICAg
IG1fZHJ0LT53ZWJQYWdlKCktPnRyaWdnZXJBY3Rpb24oUVdlYlBhZ2U6OlNldFRleHREaXJlY3Rp
b25MZWZ0VG9SaWdodCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsd2F5
c0FjY2VwdENvb2tpZXMoYm9vbCBhY2NlcHQpCit7CisgICAgUVdlYlNldHRpbmdzKiBnbG9iYWxT
ZXR0aW5ncyA9IFFXZWJTZXR0aW5nczo6Z2xvYmFsU2V0dGluZ3MoKTsKKyAgICBpZiAoYWNjZXB0
KQorICAgICAgICBnbG9iYWxTZXR0aW5ncy0+c2V0VGhpcmRQYXJ0eUNvb2tpZVBvbGljeShRV2Vi
U2V0dGluZ3M6OkFsd2F5c0FsbG93VGhpcmRQYXJ0eUNvb2tpZXMpOworICAgIGVsc2UgeworICAg
ICAgICAvLyBUaGlzIG1hdGNoZXMgdGhlIFNhZmFyaSB0aGlyZC1wYXJ0eSBjb29raWUgYmxvY2tp
bmcgcG9saWN5IHRlc3RlZCBpbiB0aGlyZC1wYXJ0eS1jb29raWUtcmVsYXhpbmcuaHRtbAorICAg
ICAgICBnbG9iYWxTZXR0aW5ncy0+c2V0VGhpcmRQYXJ0eUNvb2tpZVBvbGljeShRV2ViU2V0dGlu
Z3M6OkFsbG93VGhpcmRQYXJ0eVdpdGhFeGlzdGluZ0Nvb2tpZXMpOworICAgIH0KK30KKwordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWx3YXlzQmxvY2tDb29raWVzKGJvb2wgYmxvY2sp
Cit7CisgICAgUVdlYlNldHRpbmdzKiBnbG9iYWxTZXR0aW5ncyA9IFFXZWJTZXR0aW5nczo6Z2xv
YmFsU2V0dGluZ3MoKTsKKyAgICBpZiAoYmxvY2spCisgICAgICAgIGdsb2JhbFNldHRpbmdzLT5z
ZXRUaGlyZFBhcnR5Q29va2llUG9saWN5KFFXZWJTZXR0aW5nczo6QWx3YXlzQmxvY2tUaGlyZFBh
cnR5Q29va2llcyk7CisgICAgZWxzZQorICAgICAgICBnbG9iYWxTZXR0aW5ncy0+c2V0VGhpcmRQ
YXJ0eUNvb2tpZVBvbGljeShRV2ViU2V0dGluZ3M6OkFsd2F5c0FsbG93VGhpcmRQYXJ0eUNvb2tp
ZXMpOworfQorCitjb25zdCB1bnNpZ25lZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWF4Vmlld1dp
ZHRoID0gODAwOworY29uc3QgdW5zaWduZWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om1heFZpZXdI
ZWlnaHQgPSA2MDA7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9UZXN0UnVubmVyUXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L1Rlc3RSdW5uZXJRdC5j
cHAJKHJldmlzaW9uIDEyNTMzNSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L1Rlc3RSdW5u
ZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEwICsyNywxMCBAQAogICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9sbGVy
UXQuaCIKLSNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5oIgorI2luY2x1ZGUgIlRl
c3RSdW5uZXJRdC5oIgogCiAjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWVRdC5oIgorI2luY2x1ZGUg
IkR1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmgiCiAjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCiAjaW5j
bHVkZSAiV29ya1F1ZXVlSXRlbVF0LmgiCiAjaW5jbHVkZSA8UUNvcmVBcHBsaWNhdGlvbj4KSW5k
ZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L1Rlc3RSdW5uZXJRdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L1Rlc3RSdW5uZXJRdC5oCShyZXZpc2lvbiAxMjUzMzUp
CShmcm9tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaDox
MjUzMzUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9UZXN0UnVubmVyUXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDMyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAo
QykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVy
LCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIExheW91dFRlc3RDb250cm9sbGVyUXRfaAorI2RlZmluZSBMYXlvdXRUZXN0Q29udHJvbGxl
clF0X2gKKworI2luY2x1ZGUgPFFCYXNpY1RpbWVyPgorI2luY2x1ZGUgPFFPYmplY3Q+CisjaW5j
bHVkZSA8UVNpemU+CisjaW5jbHVkZSA8UVN0cmluZz4KKyNpbmNsdWRlIDxRdERlYnVnPgorI2lu
Y2x1ZGUgPFFUaW1lcj4KKyNpbmNsdWRlIDxRVGltZXJFdmVudD4KKyNpbmNsdWRlIDxRVmFyaWFu
dD4KKworI2luY2x1ZGUgPHF3ZWJkYXRhYmFzZS5oPgorI2luY2x1ZGUgPHF3ZWJlbGVtZW50Lmg+
CisjaW5jbHVkZSA8cXdlYmZyYW1lLmg+CisjaW5jbHVkZSA8cXdlYmhpc3RvcnkuaD4KKyNpbmNs
dWRlIDxxd2VicGFnZS5oPgorI2luY2x1ZGUgPHF3ZWJzZWN1cml0eW9yaWdpbi5oPgorCitjbGFz
cyBRV2ViRnJhbWU7CitjbGFzcyBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDsKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKyAgICBjbGFzcyBEdW1wUmVuZGVyVHJlZTsKK30KK2NsYXNzIExheW91dFRlc3RD
b250cm9sbGVyIDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCisgICAgUV9QUk9QRVJU
WShpbnQgd2ViSGlzdG9yeUl0ZW1Db3VudCBSRUFEIHdlYkhpc3RvcnlJdGVtQ291bnQpCisgICAg
UV9QUk9QRVJUWShpbnQgd29ya2VyVGhyZWFkQ291bnQgUkVBRCB3b3JrZXJUaHJlYWRDb3VudCkK
KyAgICBRX1BST1BFUlRZKGJvb2wgZ2xvYmFsRmxhZyBSRUFEIGdsb2JhbEZsYWcgV1JJVEUgc2V0
R2xvYmFsRmxhZykKK3B1YmxpYzoKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlcihXZWJDb3JlOjpE
dW1wUmVuZGVyVHJlZSogZHJ0KTsKKworICAgIGJvb2wgc2hvdWxkRGlzYWxsb3dJbmNyZWFzZUZv
ckFwcGxpY2F0aW9uQ2FjaGVRdW90YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzYWxsb3dJbmNyZWFz
ZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90YTsgfQorICAgIGJvb2wgc2hvdWxkRHVtcEFzVGV4dCgp
IGNvbnN0IHsgcmV0dXJuIG1fdGV4dER1bXA7IH0KKyAgICBib29sIHNob3VsZER1bXBCYWNrRm9y
d2FyZExpc3QoKSBjb25zdCB7IHJldHVybiBtX2R1bXBCYWNrRm9yd2FyZExpc3Q7IH0KKyAgICBi
b29sIHNob3VsZER1bXBDaGlsZHJlbkFzVGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcENoaWxk
cmVuQXNUZXh0OyB9CisgICAgYm9vbCBzaG91bGREdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9u
cygpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnM7IH0KKyAg
ICBib29sIHNob3VsZER1bXBEYXRhYmFzZUNhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fZHVt
cERhdGFiYXNlQ2FsbGJhY2tzOyB9CisgICAgYm9vbCBzaG91bGREdW1wQXBwbGljYXRpb25DYWNo
ZURlbGVnYXRlQ2FsbGJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9kdW1wQXBwbGljYXRpb25DYWNo
ZURlbGVnYXRlQ2FsbGJhY2tzOyB9CisgICAgYm9vbCBzaG91bGREdW1wU3RhdHVzQ2FsbGJhY2tz
KCkgY29uc3QgeyByZXR1cm4gbV9kdW1wU3RhdHVzQ2FsbGJhY2tzOyB9CisgICAgYm9vbCBzaG91
bGRXYWl0VW50aWxEb25lKCkgY29uc3QgeyByZXR1cm4gbV93YWl0Rm9yRG9uZTsgfQorICAgIGJv
b2wgc2hvdWxkSGFuZGxlRXJyb3JQYWdlcygpIGNvbnN0IHsgcmV0dXJuIG1faGFuZGxlRXJyb3JQ
YWdlczsgfQorICAgIGJvb2wgY2FuT3BlbldpbmRvd3MoKSBjb25zdCB7IHJldHVybiBtX2Nhbk9w
ZW5XaW5kb3dzOyB9CisgICAgYm9vbCBzaG91bGREdW1wVGl0bGVDaGFuZ2VzKCkgY29uc3QgeyBy
ZXR1cm4gbV9kdW1wVGl0bGVDaGFuZ2VzOyB9CisgICAgYm9vbCB3YWl0Rm9yUG9saWN5KCkgY29u
c3QgeyByZXR1cm4gbV93YWl0Rm9yUG9saWN5OyB9CisgICAgYm9vbCBpZ25vcmVSZXFlc3RGb3JQ
ZXJtaXNzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9pZ25vcmVEZXNrdG9wTm90aWZpY2F0aW9uOyB9
CisgICAgYm9vbCBpc1ByaW50aW5nKCkgeyByZXR1cm4gbV9pc1ByaW50aW5nOyB9CisKKyAgICB2
b2lkIHJlc2V0KCk7CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1heFZpZXdXaWR0
aDsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1heFZpZXdIZWlnaHQ7CisKKyAgICB2
b2lkIHNldFRpbWVvdXQoaW50IHRpbWVvdXQpIHsgbV90aW1lb3V0ID0gdGltZW91dDsgfQorICAg
IHZvaWQgc2V0U2hvdWxkVGltZW91dChib29sIGZsYWcpIHsgbV9zaG91bGRUaW1lb3V0ID0gZmxh
ZzsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCB0aW1lckV2ZW50KFFUaW1lckV2ZW50Kik7CisK
K3NpZ25hbHM6CisgICAgdm9pZCBkb25lKCk7CisKKyAgICB2b2lkIHNob3dQYWdlKCk7CisgICAg
dm9pZCBoaWRlUGFnZSgpOworICAgIHZvaWQgZ2VvbG9jYXRpb25QZXJtaXNzaW9uU2V0KCk7CisK
K3B1YmxpYyBzbG90czoKKyAgICB2b2lkIG1heWJlRHVtcChib29sIG9rKTsKKyAgICB2b2lkIGRp
c2FsbG93SW5jcmVhc2VGb3JBcHBsaWNhdGlvbkNhY2hlUXVvdGEoKSB7IG1fZGlzYWxsb3dJbmNy
ZWFzZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90YSA9IHRydWU7IH0KKyAgICB2b2lkIGR1bXBBc1Rl
eHQoKSB7IG1fdGV4dER1bXAgPSB0cnVlOyB9CisgICAgdm9pZCBkdW1wQ2hpbGRGcmFtZXNBc1Rl
eHQoKSB7IG1fZHVtcENoaWxkcmVuQXNUZXh0ID0gdHJ1ZTsgfQorICAgIHZvaWQgZHVtcENoaWxk
RnJhbWVTY3JvbGxQb3NpdGlvbnMoKSB7IG1fZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnMg
PSB0cnVlOyB9CisgICAgdm9pZCBkdW1wRGF0YWJhc2VDYWxsYmFja3MoKSB7IG1fZHVtcERhdGFi
YXNlQ2FsbGJhY2tzID0gdHJ1ZTsgfQorICAgIHZvaWQgZHVtcEFwcGxpY2F0aW9uQ2FjaGVEZWxl
Z2F0ZUNhbGxiYWNrcygpIHsgbV9kdW1wQXBwbGljYXRpb25DYWNoZURlbGVnYXRlQ2FsbGJhY2tz
ID0gdHJ1ZTsgfQorICAgIHZvaWQgZHVtcFN0YXR1c0NhbGxiYWNrcygpIHsgbV9kdW1wU3RhdHVz
Q2FsbGJhY2tzID0gdHJ1ZTsgfQorICAgIHZvaWQgc2V0Q2FuT3BlbldpbmRvd3MoKSB7IG1fY2Fu
T3BlbldpbmRvd3MgPSB0cnVlOyB9CisgICAgdm9pZCBzZXRQcmludGluZygpIHsgbV9pc1ByaW50
aW5nID0gdHJ1ZTsgfQorICAgIHZvaWQgd2FpdFVudGlsRG9uZSgpOworICAgIGludCB3ZWJIaXN0
b3J5SXRlbUNvdW50KCk7CisgICAgdm9pZCBrZWVwV2ViSGlzdG9yeSgpOworICAgIHZvaWQgbm90
aWZ5RG9uZSgpOworICAgIHZvaWQgZHVtcEJhY2tGb3J3YXJkTGlzdCgpIHsgbV9kdW1wQmFja0Zv
cndhcmRMaXN0ID0gdHJ1ZTsgfQorICAgIGJvb2wgZ2xvYmFsRmxhZygpIGNvbnN0IHsgcmV0dXJu
IG1fZ2xvYmFsRmxhZzsgfQorICAgIHZvaWQgc2V0R2xvYmFsRmxhZyhib29sIGZsYWcpIHsgbV9n
bG9iYWxGbGFnID0gZmxhZzsgfQorICAgIHZvaWQgaGFuZGxlRXJyb3JQYWdlcygpIHsgbV9oYW5k
bGVFcnJvclBhZ2VzID0gdHJ1ZTsgfQorICAgIHZvaWQgZHVtcEVkaXRpbmdDYWxsYmFja3MoKTsK
KyAgICB2b2lkIGR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKTsKKyAgICB2b2lkIGR1bXBQcm9ncmVz
c0ZpbmlzaGVkQ2FsbGJhY2soKTsKKyAgICB2b2lkIGR1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2Fk
Q2FsbGJhY2tzKCk7CisgICAgdm9pZCBkdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCk7CisgICAg
dm9pZCBkdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcygpOworICAgIHZvaWQgZHVtcFdpbGxD
YWNoZVJlc3BvbnNlKCk7CisgICAgdm9pZCBkdW1wSGlzdG9yeUNhbGxiYWNrcygpOworICAgIHZv
aWQgc2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0KGJvb2wgZW5hYmxlZCk7
CisgICAgdm9pZCBzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbChib29sIGVuYWJsZWQpOwor
ICAgIHZvaWQgc2V0V2lsbFNlbmRSZXF1ZXN0Q2xlYXJIZWFkZXIoY29uc3QgUVN0cmluZ0xpc3Qm
IGhlYWRlcnMpOworICAgIHZvaWQgcXVldWVCYWNrTmF2aWdhdGlvbihpbnQgaG93RmFyQmFja3dh
cmQpOworICAgIHZvaWQgcXVldWVGb3J3YXJkTmF2aWdhdGlvbihpbnQgaG93RmFyRm9yd2FyZCk7
CisgICAgdm9pZCBxdWV1ZUxvYWQoY29uc3QgUVN0cmluZyYgdXJsLCBjb25zdCBRU3RyaW5nJiB0
YXJnZXQgPSBRU3RyaW5nKCkpOworICAgIHZvaWQgcXVldWVMb2FkSFRNTFN0cmluZyhjb25zdCBR
U3RyaW5nJiBjb250ZW50LCBjb25zdCBRU3RyaW5nJiBiYXNlVVJMID0gUVN0cmluZygpLCBjb25z
dCBRU3RyaW5nJiBmYWlsaW5nVVJMID0gUVN0cmluZygpKTsKKyAgICB2b2lkIHF1ZXVlUmVsb2Fk
KCk7CisgICAgdm9pZCBxdWV1ZUxvYWRpbmdTY3JpcHQoY29uc3QgUVN0cmluZyYgc2NyaXB0KTsK
KyAgICB2b2lkIHF1ZXVlTm9uTG9hZGluZ1NjcmlwdChjb25zdCBRU3RyaW5nJiBzY3JpcHQpOwor
ICAgIHZvaWQgcHJvdmlzaW9uYWxMb2FkKCk7CisgICAgdm9pZCBzZXRDbG9zZVJlbWFpbmluZ1dp
bmRvd3NXaGVuQ29tcGxldGUoYm9vbCA9IGZhbHNlKSB7fQorICAgIGludCB3aW5kb3dDb3VudCgp
OworICAgIHZvaWQgZ3JhbnREZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvbihjb25zdCBRU3Ry
aW5nJiBvcmlnaW4pOworICAgIHZvaWQgaWdub3JlRGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Np
b25SZXF1ZXN0cygpOworICAgIGJvb2wgY2hlY2tEZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lv
bihjb25zdCBRU3RyaW5nJiBvcmlnaW4pOworICAgIHZvaWQgc2ltdWxhdGVEZXNrdG9wTm90aWZp
Y2F0aW9uQ2xpY2soY29uc3QgUVN0cmluZyYgdGl0bGUpOworICAgIHZvaWQgZGlzcGxheSgpOwor
ICAgIHZvaWQgZGlzcGxheUludmFsaWRhdGVkUmVnaW9uKCk7CisgICAgdm9pZCBjbGVhckJhY2tG
b3J3YXJkTGlzdCgpOworICAgIFFTdHJpbmcgcGF0aFRvTG9jYWxSZXNvdXJjZShjb25zdCBRU3Ry
aW5nJiB1cmwpOworICAgIHZvaWQgZHVtcFRpdGxlQ2hhbmdlcygpIHsgbV9kdW1wVGl0bGVDaGFu
Z2VzID0gdHJ1ZTsgfQorICAgIFFTdHJpbmcgZW5jb2RlSG9zdE5hbWUoY29uc3QgUVN0cmluZyYg
aG9zdCk7CisgICAgUVN0cmluZyBkZWNvZGVIb3N0TmFtZShjb25zdCBRU3RyaW5nJiBob3N0KTsK
KyAgICB2b2lkIGR1bXBTZWxlY3Rpb25SZWN0KCkgY29uc3Qge30KKyAgICB2b2lkIHNldERldmVs
b3BlckV4dHJhc0VuYWJsZWQoYm9vbCk7CisgICAgdm9pZCBzZXRBc3luY2hyb25vdXNTcGVsbENo
ZWNraW5nRW5hYmxlZChib29sKTsKKyAgICB2b2lkIHNob3dXZWJJbnNwZWN0b3IoKTsKKyAgICB2
b2lkIGNsb3NlV2ViSW5zcGVjdG9yKCk7CisgICAgdm9pZCBldmFsdWF0ZUluV2ViSW5zcGVjdG9y
KGxvbmcgY2FsbElkLCBjb25zdCBRU3RyaW5nJiBzY3JpcHQpOworICAgIHZvaWQgcmVtb3ZlQWxs
VmlzaXRlZExpbmtzKCk7CisgICAgdm9pZCBzZXRNZWRpYVR5cGUoY29uc3QgUVN0cmluZyYgdHlw
ZSk7CisgICAgdm9pZCBzZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkKGJvb2wgZW5hYmxlKTsKKyAg
ICB2b2lkIHNldE1vY2tTY3JvbGxiYXJzRW5hYmxlZChib29sIGVuYWJsZSk7CisgICAgdm9pZCBz
ZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyhib29sIGVuYWJsZSk7CisgICAgdm9p
ZCBzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMoYm9vbCBlbmFibGUpOworICAgIHZvaWQg
c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpOworICAgIHZv
aWQgc2V0QXV0b2ZpbGxlZChjb25zdCBRV2ViRWxlbWVudCYsIGJvb2wgZW5hYmxlKTsKKyAgICB2
b2lkIHNldFZhbHVlRm9yVXNlcihjb25zdCBRV2ViRWxlbWVudCYsIGNvbnN0IFFTdHJpbmcmIHZh
bHVlKTsKKyAgICB2b2lkIHNldEZpeGVkQ29udGVudHNTaXplKGludCB3aWR0aCwgaW50IGhlaWdo
dCk7CisgICAgdm9pZCBzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKGJvb2wgZW5hYmxlKTsKKyAg
ICB2b2lkIHNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChib29sIGVuYWJsZWQpOworICAgIHZv
aWQgc2V0UGx1Z2luc0VuYWJsZWQoYm9vbCBmbGFnKTsKKyAgICB2b2lkIHNldFBvcHVwQmxvY2tp
bmdFbmFibGVkKGJvb2wgZW5hYmxlKTsKKyAgICB2b2lkIHNldFBPU0lYTG9jYWxlKGNvbnN0IFFT
dHJpbmcmIGxvY2FsZSk7CisgICAgdm9pZCByZXNldExvYWRGaW5pc2hlZCgpIHsgbV9sb2FkRmlu
aXNoZWQgPSBmYWxzZTsgfQorICAgIHZvaWQgc2V0V2luZG93SXNLZXkoYm9vbCBpc0tleSk7Cisg
ICAgdm9pZCBzZXRNYWluRnJhbWVJc0ZpcnN0UmVzcG9uZGVyKGJvb2wgaXNGaXJzdCk7CisgICAg
dm9pZCBzZXREZWZlck1haW5SZXNvdXJjZURhdGFMb2FkKGJvb2wpOworICAgIHZvaWQgc2V0SmF2
YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChib29sIGVuYWJsZSk7CisgICAgdm9pZCBzZXRYU1NB
dWRpdG9yRW5hYmxlZChib29sIGVuYWJsZSk7CisgICAgdm9pZCBzZXRDYXJldEJyb3dzaW5nRW5h
YmxlZChib29sIGVuYWJsZSk7CisgICAgdm9pZCBzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxl
ZChib29sKTsKKyAgICB2b2lkIHNldFZpZXdNb2RlTWVkaWFGZWF0dXJlKGNvbnN0IFFTdHJpbmcm
IG1vZGUpOworICAgIHZvaWQgc2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkKGJvb2wgZW5hYmxl
KTsKKyAgICB2b2lkIHNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoYm9vbCBlbmFi
bGUpOworICAgIHZvaWQgZXhlY0NvbW1hbmQoY29uc3QgUVN0cmluZyYgbmFtZSwgY29uc3QgUVN0
cmluZyYgdmFsdWUgPSBRU3RyaW5nKCkpOworICAgIGJvb2wgaXNDb21tYW5kRW5hYmxlZChjb25z
dCBRU3RyaW5nJiBuYW1lKSBjb25zdDsKKyAgICBib29sIGZpbmRTdHJpbmcoY29uc3QgUVN0cmlu
ZyYgc3RyaW5nLCBjb25zdCBRU3RyaW5nTGlzdCYgb3B0aW9uQXJyYXkpOworCisgICAgYm9vbCBw
YXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChjb25zdCBRU3RyaW5nJiBhbmltYXRp
b25OYW1lLCBkb3VibGUgdGltZSwgY29uc3QgUVN0cmluZyYgZWxlbWVudElkKTsKKyAgICBib29s
IHBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChjb25zdCBRU3RyaW5nJiBwcm9w
ZXJ0eU5hbWUsIGRvdWJsZSB0aW1lLCBjb25zdCBRU3RyaW5nJiBlbGVtZW50SWQpOworICAgIGJv
b2wgZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkKGNvbnN0IFFTdHJpbmcm
IGVsZW1lbnRJZCk7CisKKyAgICB1bnNpZ25lZCBudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBj
b25zdDsKKworICAgIHZvaWQgYWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgUVN0
cmluZyYgc291cmNlT3JpZ2luLCBjb25zdCBRU3RyaW5nJiBkZXN0aW5hdGlvblByb3RvY29sLCBj
b25zdCBRU3RyaW5nJiBkZXN0aW5hdGlvbkhvc3QsIGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1YmRv
bWFpbnMpOworICAgIHZvaWQgcmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3Qg
UVN0cmluZyYgc291cmNlT3JpZ2luLCBjb25zdCBRU3RyaW5nJiBkZXN0aW5hdGlvblByb3RvY29s
LCBjb25zdCBRU3RyaW5nJiBkZXN0aW5hdGlvbkhvc3QsIGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1
YmRvbWFpbnMpOworCisgICAgdm9pZCBkaXNwYXRjaFBlbmRpbmdMb2FkUmVxdWVzdHMoKTsKKyAg
ICB2b2lkIGRpc2FibGVJbWFnZUxvYWRpbmcoKTsKKworICAgIHZvaWQgY2xlYXJBbGxBcHBsaWNh
dGlvbkNhY2hlcygpOworICAgIHZvaWQgY2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luKGNv
bnN0IFFTdHJpbmcmIHVybCk7CisgICAgdm9pZCBzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVv
dGEodW5zaWduZWQgbG9uZyBsb25nIHF1b3RhKTsKKyAgICBRU3RyaW5nTGlzdCBvcmlnaW5zV2l0
aEFwcGxpY2F0aW9uQ2FjaGUoKTsKKyAgICBsb25nIGxvbmcgYXBwbGljYXRpb25DYWNoZURpc2tV
c2FnZUZvck9yaWdpbihjb25zdCBRU3RyaW5nJik7IAorICAgIHZvaWQgc2V0Q2FjaGVNb2RlbChp
bnQpOworCisgICAgdm9pZCBzZXREYXRhYmFzZVF1b3RhKGludCBzaXplKTsKKyAgICB2b2lkIGNs
ZWFyQWxsRGF0YWJhc2VzKCk7CisgICAgdm9pZCBzZXRJY29uRGF0YWJhc2VFbmFibGVkKGJvb2wg
ZW5hYmxlKTsKKworICAgIHZvaWQgc2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoYm9vbCBlbmFibGVk
LCBib29sIHBlcm1pc3NpdmUgPSBmYWxzZSk7CisgICAgdm9pZCB3YWl0Rm9yUG9saWN5RGVsZWdh
dGUoKTsKKworICAgIHZvaWQgb3ZlcnJpZGVQcmVmZXJlbmNlKGNvbnN0IFFTdHJpbmcmIG5hbWUs
IGNvbnN0IFFWYXJpYW50JiB2YWx1ZSk7CisgICAgdm9pZCBzZXRVc2VyU3R5bGVTaGVldExvY2F0
aW9uKGNvbnN0IFFTdHJpbmcmIHVybCk7CisgICAgdm9pZCBzZXRVc2VyU3R5bGVTaGVldEVuYWJs
ZWQoYm9vbCBlbmFibGVkKTsKKyAgICB2b2lkIHNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5G
b3JVUkxTY2hlbWUoYm9vbCBmb3JiaWRkZW4sIGNvbnN0IFFTdHJpbmcmIHNjaGVtZSk7CisgICAg
aW50IHdvcmtlclRocmVhZENvdW50KCk7CisgICAgaW50IG51bWJlck9mUGFnZXMoZmxvYXQgd2lk
dGggPSBtYXhWaWV3V2lkdGgsIGZsb2F0IGhlaWdodCA9IG1heFZpZXdIZWlnaHQpOworICAgIGJv
b2wgY2FsbFNob3VsZENsb3NlT25XZWJWaWV3KCk7CisgICAgLy8gRm9yIG5vdywgdGhpcyBpcyBh
IG5vLW9wLiBUaGlzIG1heSBjaGFuZ2UgZGVwZW5kaW5nIG9uIG91dGNvbWUgb2YKKyAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzMzMzMKKyAgICB2b2lkIHNl
dENhbGxDbG9zZU9uV2ViVmlld3MoKSB7fQorICAgIC8vIFRoaXMgaXMgYSBuby1vcCAtIGl0IGFs
bG93cyB1cyB0byBwYXNzCisgICAgLy8gcGx1Z2lucy9nZXQtdXJsLXRoYXQtdGhlLXJlc291cmNl
LWxvYWQtZGVsZWdhdGUtd2lsbC1kaXNhbGxvdy5odG1sCisgICAgLy8gd2hpY2ggaXMgYSBNYWMt
c3BlY2lmaWMgdGVzdC4KKyAgICB2b2lkIGFkZERpc2FsbG93ZWRVUkwoY29uc3QgUVN0cmluZyYp
IHt9CisKKyAgICB2b2lkIHNldE1vY2tEZXZpY2VPcmllbnRhdGlvbihib29sIGNhblByb3ZpZGVB
bHBoYSwgZG91YmxlIGFscGhhLCBib29sIGNhblByb3ZpZGVCZXRhLCBkb3VibGUgYmV0YSwgYm9v
bCBjYW5Qcm92aWRlR2FtbWEsIGRvdWJsZSBnYW1tYSk7CisKKyAgICB2b2lkIHNldE1vY2tHZW9s
b2NhdGlvbkVycm9yKGludCBjb2RlLCBjb25zdCBRU3RyaW5nJiBtZXNzYWdlKTsKKyAgICB2b2lk
IHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdp
dHVkZSwgZG91YmxlIGFjY3VyYWN5KTsKKyAgICB2b2lkIHNldEdlb2xvY2F0aW9uUGVybWlzc2lv
bihib29sIGFsbG93KTsKKyAgICBpbnQgbnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNz
aW9uUmVxdWVzdHMoKTsKKyAgICBib29sIGlzR2VvbG9jYXRpb25QZXJtaXNzaW9uU2V0KCkgY29u
c3QgeyByZXR1cm4gbV9pc0dlb2xvY2F0aW9uUGVybWlzc2lvblNldDsgfQorICAgIGJvb2wgZ2Vv
bG9jYXRpb25QZXJtaXNzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9nZW9sb2NhdGlvblBlcm1pc3Np
b247IH0KKworICAgIHZvaWQgYWRkTW9ja1NwZWVjaElucHV0UmVzdWx0KGNvbnN0IFFTdHJpbmcm
IHJlc3VsdCwgZG91YmxlIGNvbmZpZGVuY2UsIGNvbnN0IFFTdHJpbmcmIGxhbmd1YWdlKTsKKyAg
ICB2b2lkIHNldE1vY2tTcGVlY2hJbnB1dER1bXBSZWN0KGJvb2wgZmxhZyk7CisgICAgdm9pZCBz
dGFydFNwZWVjaElucHV0KGNvbnN0IFFTdHJpbmcmIGlucHV0RWxlbWVudCk7CisKKyAgICB2b2lk
IHNldFBhZ2VWaXNpYmlsaXR5KGNvbnN0IGNoYXIqKTsKKyAgICB2b2lkIHJlc2V0UGFnZVZpc2li
aWxpdHkoKTsKKworICAgIHZvaWQgc2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoYm9v
bCk7CisKKyAgICAvLyBFbXB0eSBzdHViIG1ldGhvZCB0byBrZWVwIHBhcml0eSB3aXRoIG9iamVj
dCBtb2RlbCBleHBvc2VkIGJ5IGdsb2JhbCBMYXlvdXRUZXN0Q29udHJvbGxlci4KKyAgICB2b2lk
IGFib3J0TW9kYWwoKSB7fQorCisgICAgdm9pZCBhZGRVUkxUb1JlZGlyZWN0KGNvbnN0IFFTdHJp
bmcmIG9yaWdpbiwgY29uc3QgUVN0cmluZyYgZGVzdGluYXRpb24pOworCisgICAgLyoKKyAgICAg
ICAgUG9saWN5IHZhbHVlczogJ29uJywgJ2F1dG8nIG9yICdvZmYnLgorICAgICAgICBPcmllbnRh
dGlvbiB2YWx1ZXM6ICd2ZXJ0aWNhbCcgb3IgJ2hvcml6b250YWwnLgorICAgICovCisgICAgdm9p
ZCBzZXRTY3JvbGxiYXJQb2xpY3koY29uc3QgUVN0cmluZyYgb3JpZW50YXRpb24sIGNvbnN0IFFT
dHJpbmcmIHBvbGljeSk7CisKKyAgICBRU3RyaW5nIG1hcmtlclRleHRGb3JMaXN0SXRlbShjb25z
dCBRV2ViRWxlbWVudCYgbGlzdEl0ZW0pOworICAgIFFWYXJpYW50TWFwIGNvbXB1dGVkU3R5bGVJ
bmNsdWRpbmdWaXNpdGVkSW5mbyhjb25zdCBRV2ViRWxlbWVudCYgZWxlbWVudCkgY29uc3Q7CisK
KyAgICAvLyBTaW11bGF0ZSBhIHJlcXVlc3QgYW4gZW1iZWRkaW5nIGFwcGxpY2F0aW9uIGNvdWxk
IG1ha2UsIHBvcHVsYXRpbmcgcGVyLXNlc3Npb24gY3JlZGVudGlhbCBzdG9yYWdlLgorICAgIHZv
aWQgYXV0aGVudGljYXRlU2Vzc2lvbihjb25zdCBRU3RyaW5nJiB1cmwsIGNvbnN0IFFTdHJpbmcm
IHVzZXJuYW1lLCBjb25zdCBRU3RyaW5nJiBwYXNzd29yZCk7CisKKyAgICB2b2lkIGV2YWx1YXRl
U2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUoaW50IHdvcmxkSUQsIGNvbnN0IFFT
dHJpbmcmIHNjcmlwdCk7CisgICAgdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChp
bnQgd29ybGRJRCwgY29uc3QgUVN0cmluZyYgc2NyaXB0KTsKKyAgICBRU3RyaW5nIHBhZ2VTaXpl
QW5kTWFyZ2luc0luUGl4ZWxzKGludCBwYWdlSW5kZXgsIGludCB3aWR0aCwgaW50IGhlaWdodCwg
aW50IG1hcmdpblRvcCwgaW50IG1hcmdpblJpZ2h0LCBpbnQgbWFyZ2luQm90dG9tLCBpbnQgbWFy
Z2luTGVmdCk7CisgICAgUVN0cmluZyBwYWdlUHJvcGVydHkoY29uc3QgUVN0cmluZyYgcHJvcGVy
dHlOYW1lLCBpbnQgcGFnZU51bWJlcik7CisgICAgdm9pZCBhZGRVc2VyU3R5bGVTaGVldChjb25z
dCBRU3RyaW5nJiBzb3VyY2VDb2RlKTsKKworICAgIHZvaWQgc2V0TWluaW11bVRpbWVySW50ZXJ2
YWwoZG91YmxlKTsKKyAgICAKKyAgICB2b2lkIG9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKCk7Cisg
ICAgdm9pZCBkZWxldGVBbGxMb2NhbFN0b3JhZ2UoKTsKKyAgICB2b2lkIGRlbGV0ZUxvY2FsU3Rv
cmFnZUZvck9yaWdpbihjb25zdCBRU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICBsb25n
IGxvbmcgbG9jYWxTdG9yYWdlRGlza1VzYWdlRm9yT3JpZ2luKGNvbnN0IFFTdHJpbmcmIG9yaWdp
bklkZW50aWZpZXIpOworICAgIHZvaWQgb2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9u
cyh1bnNpZ25lZCBudW1iZXIpOworICAgIHZvaWQgc3luY0xvY2FsU3RvcmFnZSgpOworICAgIFFT
dHJpbmcgbGF5ZXJUcmVlQXNUZXh0KCk7CisgICAgdm9pZCBzZXRUZXh0RGlyZWN0aW9uKGNvbnN0
IFFTdHJpbmcmIGRpcmVjdGlvbk5hbWUpOworICAgIHZvaWQgZ29CYWNrKCk7CisgICAgdm9pZCBz
ZXREZWZlcnNMb2FkaW5nKGJvb2wpOworICAgIHZvaWQgc2V0QWx3YXlzQWNjZXB0Q29va2llcyhi
b29sKTsKKyAgICB2b2lkIHNldEFsd2F5c0Jsb2NrQ29va2llcyhib29sKTsKKworcHJpdmF0ZSBz
bG90czoKKyAgICB2b2lkIHByb2Nlc3NXb3JrKCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBzZXRH
ZW9sb2NhdGlvblBlcm1pc3Npb25Db21tb24oYm9vbCBhbGxvdyk7CisKK3ByaXZhdGU6CisgICAg
Ym9vbCBtX2hhc0R1bXBlZDsKKyAgICBib29sIG1fdGV4dER1bXA7CisgICAgYm9vbCBtX2Rpc2Fs
bG93SW5jcmVhc2VGb3JBcHBsaWNhdGlvbkNhY2hlUXVvdGE7CisgICAgYm9vbCBtX2R1bXBCYWNr
Rm9yd2FyZExpc3Q7CisgICAgYm9vbCBtX2R1bXBDaGlsZHJlbkFzVGV4dDsKKyAgICBib29sIG1f
ZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnM7CisgICAgYm9vbCBtX2Nhbk9wZW5XaW5kb3dz
OworICAgIGJvb2wgbV93YWl0Rm9yRG9uZTsKKyAgICBib29sIG1fZHVtcFRpdGxlQ2hhbmdlczsK
KyAgICBib29sIG1fZHVtcERhdGFiYXNlQ2FsbGJhY2tzOworICAgIGJvb2wgbV9kdW1wQXBwbGlj
YXRpb25DYWNoZURlbGVnYXRlQ2FsbGJhY2tzOworICAgIGJvb2wgbV9kdW1wU3RhdHVzQ2FsbGJh
Y2tzOworICAgIGJvb2wgbV93YWl0Rm9yUG9saWN5OworICAgIGJvb2wgbV9oYW5kbGVFcnJvclBh
Z2VzOworICAgIGJvb2wgbV9sb2FkRmluaXNoZWQ7CisgICAgYm9vbCBtX2dsb2JhbEZsYWc7Cisg
ICAgYm9vbCBtX3VzZXJTdHlsZVNoZWV0RW5hYmxlZDsKKyAgICBib29sIG1faXNHZW9sb2NhdGlv
blBlcm1pc3Npb25TZXQ7CisgICAgYm9vbCBtX2lzUHJpbnRpbmc7CisgICAgYm9vbCBtX2dlb2xv
Y2F0aW9uUGVybWlzc2lvbjsKKworICAgIFFVcmwgbV91c2VyU3R5bGVTaGVldExvY2F0aW9uOwor
ICAgIFFCYXNpY1RpbWVyIG1fdGltZW91dFRpbWVyOworICAgIFFXZWJGcmFtZSogbV90b3BMb2Fk
aW5nRnJhbWU7CisgICAgV2ViQ29yZTo6RHVtcFJlbmRlclRyZWUqIG1fZHJ0OworICAgIFFXZWJI
aXN0b3J5KiBtX3dlYkhpc3Rvcnk7CisgICAgUVN0cmluZ0xpc3QgbV9kZXNrdG9wTm90aWZpY2F0
aW9uQWxsb3dlZE9yaWdpbnM7CisgICAgYm9vbCBtX2lnbm9yZURlc2t0b3BOb3RpZmljYXRpb247
CisKKyAgICBib29sIG1fc2hvdWxkVGltZW91dDsKKyAgICBpbnQgbV90aW1lb3V0OworfTsKKwor
I2VuZGlmIC8vIExheW91dFRlc3RDb250cm9sbGVyUXRfaApJbmRleDogVG9vbHMvRHVtcFJlbmRl
clRyZWUvcXQvVGVzdFJ1bm5lclF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRy
ZWUvcXQvVGVzdFJ1bm5lclF0LmgJKHJldmlzaW9uIDEyNTMzNSkKKysrIFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL3F0L1Rlc3RSdW5uZXJRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxNyArMjcsMTcg
QEAKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBMYXlvdXRUZXN0Q29udHJvbGxlclF0X2gK
LSNkZWZpbmUgTGF5b3V0VGVzdENvbnRyb2xsZXJRdF9oCisjaWZuZGVmIFRlc3RSdW5uZXJRdF9o
CisjZGVmaW5lIFRlc3RSdW5uZXJRdF9oCiAKICNpbmNsdWRlIDxRQmFzaWNUaW1lcj4KICNpbmNs
dWRlIDxRT2JqZWN0PgogI2luY2x1ZGUgPFFTaXplPgogI2luY2x1ZGUgPFFTdHJpbmc+Ci0jaW5j
bHVkZSA8UXREZWJ1Zz4KICNpbmNsdWRlIDxRVGltZXI+CiAjaW5jbHVkZSA8UVRpbWVyRXZlbnQ+
CiAjaW5jbHVkZSA8UVZhcmlhbnQ+CisjaW5jbHVkZSA8UXREZWJ1Zz4KIAogI2luY2x1ZGUgPHF3
ZWJkYXRhYmFzZS5oPgogI2luY2x1ZGUgPHF3ZWJlbGVtZW50Lmg+CkBAIC00OSwxNSArNDksMTYg
QEAKIGNsYXNzIFFXZWJGcmFtZTsKIGNsYXNzIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OwogbmFt
ZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIER1bXBSZW5kZXJUcmVlOworY2xhc3MgRHVtcFJl
bmRlclRyZWU7CiB9CisKIGNsYXNzIExheW91dFRlc3RDb250cm9sbGVyIDogcHVibGljIFFPYmpl
Y3QgewogICAgIFFfT0JKRUNUCiAgICAgUV9QUk9QRVJUWShpbnQgd2ViSGlzdG9yeUl0ZW1Db3Vu
dCBSRUFEIHdlYkhpc3RvcnlJdGVtQ291bnQpCiAgICAgUV9QUk9QRVJUWShpbnQgd29ya2VyVGhy
ZWFkQ291bnQgUkVBRCB3b3JrZXJUaHJlYWRDb3VudCkKICAgICBRX1BST1BFUlRZKGJvb2wgZ2xv
YmFsRmxhZyBSRUFEIGdsb2JhbEZsYWcgV1JJVEUgc2V0R2xvYmFsRmxhZykKIHB1YmxpYzoKLSAg
ICBMYXlvdXRUZXN0Q29udHJvbGxlcihXZWJDb3JlOjpEdW1wUmVuZGVyVHJlZSogZHJ0KTsKKyAg
ICBMYXlvdXRUZXN0Q29udHJvbGxlcihXZWJDb3JlOjpEdW1wUmVuZGVyVHJlZSopOwogCiAgICAg
Ym9vbCBzaG91bGREaXNhbGxvd0luY3JlYXNlRm9yQXBwbGljYXRpb25DYWNoZVF1b3RhKCkgY29u
c3QgeyByZXR1cm4gbV9kaXNhbGxvd0luY3JlYXNlRm9yQXBwbGljYXRpb25DYWNoZVF1b3RhOyB9
CiAgICAgYm9vbCBzaG91bGREdW1wQXNUZXh0KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0RHVtcDsg
fQpAQCAtMTMxLDcgKzEzMiw3IEBAIHB1YmxpYyBzbG90czoKICAgICB2b2lkIHF1ZXVlTG9hZGlu
Z1NjcmlwdChjb25zdCBRU3RyaW5nJiBzY3JpcHQpOwogICAgIHZvaWQgcXVldWVOb25Mb2FkaW5n
U2NyaXB0KGNvbnN0IFFTdHJpbmcmIHNjcmlwdCk7CiAgICAgdm9pZCBwcm92aXNpb25hbExvYWQo
KTsKLSAgICB2b2lkIHNldENsb3NlUmVtYWluaW5nV2luZG93c1doZW5Db21wbGV0ZShib29sID0g
ZmFsc2UpIHt9CisgICAgdm9pZCBzZXRDbG9zZVJlbWFpbmluZ1dpbmRvd3NXaGVuQ29tcGxldGUo
Ym9vbCA9IGZhbHNlKSB7IH0KICAgICBpbnQgd2luZG93Q291bnQoKTsKICAgICB2b2lkIGdyYW50
RGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb24oY29uc3QgUVN0cmluZyYgb3JpZ2luKTsKICAg
ICB2b2lkIGlnbm9yZURlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoKTsKQEAg
LTE0NCw0MSArMTQ1LDQxIEBAIHB1YmxpYyBzbG90czoKICAgICB2b2lkIGR1bXBUaXRsZUNoYW5n
ZXMoKSB7IG1fZHVtcFRpdGxlQ2hhbmdlcyA9IHRydWU7IH0KICAgICBRU3RyaW5nIGVuY29kZUhv
c3ROYW1lKGNvbnN0IFFTdHJpbmcmIGhvc3QpOwogICAgIFFTdHJpbmcgZGVjb2RlSG9zdE5hbWUo
Y29uc3QgUVN0cmluZyYgaG9zdCk7Ci0gICAgdm9pZCBkdW1wU2VsZWN0aW9uUmVjdCgpIGNvbnN0
IHt9CisgICAgdm9pZCBkdW1wU2VsZWN0aW9uUmVjdCgpIGNvbnN0IHsgfQogICAgIHZvaWQgc2V0
RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChib29sKTsKICAgICB2b2lkIHNldEFzeW5jaHJvbm91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wpOwogICAgIHZvaWQgc2hvd1dlYkluc3BlY3RvcigpOwog
ICAgIHZvaWQgY2xvc2VXZWJJbnNwZWN0b3IoKTsKICAgICB2b2lkIGV2YWx1YXRlSW5XZWJJbnNw
ZWN0b3IobG9uZyBjYWxsSWQsIGNvbnN0IFFTdHJpbmcmIHNjcmlwdCk7CiAgICAgdm9pZCByZW1v
dmVBbGxWaXNpdGVkTGlua3MoKTsKLSAgICB2b2lkIHNldE1lZGlhVHlwZShjb25zdCBRU3RyaW5n
JiB0eXBlKTsKLSAgICB2b2lkIHNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoYm9vbCBlbmFibGUp
OwotICAgIHZvaWQgc2V0TW9ja1Njcm9sbGJhcnNFbmFibGVkKGJvb2wgZW5hYmxlKTsKKyAgICB2
b2lkIHNldE1lZGlhVHlwZShjb25zdCBRU3RyaW5nJik7CisgICAgdm9pZCBzZXRGcmFtZUZsYXR0
ZW5pbmdFbmFibGVkKGJvb2wpOworICAgIHZvaWQgc2V0TW9ja1Njcm9sbGJhcnNFbmFibGVkKGJv
b2wpOwogICAgIHZvaWQgc2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMoYm9vbCBl
bmFibGUpOwogICAgIHZvaWQgc2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wgZW5h
YmxlKTsKICAgICB2b2lkIHNldEFwcENhY2hlTWF4aW11bVNpemUodW5zaWduZWQgbG9uZyBsb25n
IHF1b3RhKTsKICAgICB2b2lkIHNldEF1dG9maWxsZWQoY29uc3QgUVdlYkVsZW1lbnQmLCBib29s
IGVuYWJsZSk7CiAgICAgdm9pZCBzZXRWYWx1ZUZvclVzZXIoY29uc3QgUVdlYkVsZW1lbnQmLCBj
b25zdCBRU3RyaW5nJiB2YWx1ZSk7CiAgICAgdm9pZCBzZXRGaXhlZENvbnRlbnRzU2l6ZShpbnQg
d2lkdGgsIGludCBoZWlnaHQpOwotICAgIHZvaWQgc2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChi
b29sIGVuYWJsZSk7Ci0gICAgdm9pZCBzZXRTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoYm9vbCBl
bmFibGVkKTsKKyAgICB2b2lkIHNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoYm9vbCk7CisgICAg
dm9pZCBzZXRTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoYm9vbCk7CiAgICAgdm9pZCBzZXRQbHVn
aW5zRW5hYmxlZChib29sIGZsYWcpOwotICAgIHZvaWQgc2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQo
Ym9vbCBlbmFibGUpOworICAgIHZvaWQgc2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQoYm9vbCk7CiAg
ICAgdm9pZCBzZXRQT1NJWExvY2FsZShjb25zdCBRU3RyaW5nJiBsb2NhbGUpOwogICAgIHZvaWQg
cmVzZXRMb2FkRmluaXNoZWQoKSB7IG1fbG9hZEZpbmlzaGVkID0gZmFsc2U7IH0KLSAgICB2b2lk
IHNldFdpbmRvd0lzS2V5KGJvb2wgaXNLZXkpOwotICAgIHZvaWQgc2V0TWFpbkZyYW1lSXNGaXJz
dFJlc3BvbmRlcihib29sIGlzRmlyc3QpOworICAgIHZvaWQgc2V0V2luZG93SXNLZXkoYm9vbCk7
CisgICAgdm9pZCBzZXRNYWluRnJhbWVJc0ZpcnN0UmVzcG9uZGVyKGJvb2wpOwogICAgIHZvaWQg
c2V0RGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZChib29sKTsKICAgICB2b2lkIHNldEphdmFTY3Jp
cHRDYW5BY2Nlc3NDbGlwYm9hcmQoYm9vbCBlbmFibGUpOwotICAgIHZvaWQgc2V0WFNTQXVkaXRv
ckVuYWJsZWQoYm9vbCBlbmFibGUpOwotICAgIHZvaWQgc2V0Q2FyZXRCcm93c2luZ0VuYWJsZWQo
Ym9vbCBlbmFibGUpOworICAgIHZvaWQgc2V0WFNTQXVkaXRvckVuYWJsZWQoYm9vbCk7CisgICAg
dm9pZCBzZXRDYXJldEJyb3dzaW5nRW5hYmxlZChib29sKTsKICAgICB2b2lkIHNldEF1dGhvckFu
ZFVzZXJTdHlsZXNFbmFibGVkKGJvb2wpOwogICAgIHZvaWQgc2V0Vmlld01vZGVNZWRpYUZlYXR1
cmUoY29uc3QgUVN0cmluZyYgbW9kZSk7Ci0gICAgdm9pZCBzZXRTbWFydEluc2VydERlbGV0ZUVu
YWJsZWQoYm9vbCBlbmFibGUpOwotICAgIHZvaWQgc2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNl
RW5hYmxlZChib29sIGVuYWJsZSk7CisgICAgdm9pZCBzZXRTbWFydEluc2VydERlbGV0ZUVuYWJs
ZWQoYm9vbCk7CisgICAgdm9pZCBzZXRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKGJv
b2wpOwogICAgIHZvaWQgZXhlY0NvbW1hbmQoY29uc3QgUVN0cmluZyYgbmFtZSwgY29uc3QgUVN0
cmluZyYgdmFsdWUgPSBRU3RyaW5nKCkpOwogICAgIGJvb2wgaXNDb21tYW5kRW5hYmxlZChjb25z
dCBRU3RyaW5nJiBuYW1lKSBjb25zdDsKLSAgICBib29sIGZpbmRTdHJpbmcoY29uc3QgUVN0cmlu
ZyYgc3RyaW5nLCBjb25zdCBRU3RyaW5nTGlzdCYgb3B0aW9uQXJyYXkpOworICAgIGJvb2wgZmlu
ZFN0cmluZyhjb25zdCBRU3RyaW5nJiwgY29uc3QgUVN0cmluZ0xpc3QmIG9wdGlvbkFycmF5KTsK
IAogICAgIGJvb2wgcGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoY29uc3QgUVN0
cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWUsIGNvbnN0IFFTdHJpbmcmIGVsZW1lbnRJ
ZCk7CiAgICAgYm9vbCBwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoY29uc3Qg
UVN0cmluZyYgcHJvcGVydHlOYW1lLCBkb3VibGUgdGltZSwgY29uc3QgUVN0cmluZyYgZWxlbWVu
dElkKTsKQEAgLTE5NCwzMiArMTk1LDMyIEBAIHB1YmxpYyBzbG90czoKIAogICAgIHZvaWQgY2xl
YXJBbGxBcHBsaWNhdGlvbkNhY2hlcygpOwogICAgIHZvaWQgY2xlYXJBcHBsaWNhdGlvbkNhY2hl
Rm9yT3JpZ2luKGNvbnN0IFFTdHJpbmcmIHVybCk7Ci0gICAgdm9pZCBzZXRBcHBsaWNhdGlvbkNh
Y2hlT3JpZ2luUXVvdGEodW5zaWduZWQgbG9uZyBsb25nIHF1b3RhKTsKKyAgICB2b2lkIHNldEFw
cGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSh1bnNpZ25lZCBsb25nIGxvbmcpOwogICAgIFFTdHJp
bmdMaXN0IG9yaWdpbnNXaXRoQXBwbGljYXRpb25DYWNoZSgpOwogICAgIGxvbmcgbG9uZyBhcHBs
aWNhdGlvbkNhY2hlRGlza1VzYWdlRm9yT3JpZ2luKGNvbnN0IFFTdHJpbmcmKTsgCiAgICAgdm9p
ZCBzZXRDYWNoZU1vZGVsKGludCk7CiAKICAgICB2b2lkIHNldERhdGFiYXNlUXVvdGEoaW50IHNp
emUpOwogICAgIHZvaWQgY2xlYXJBbGxEYXRhYmFzZXMoKTsKLSAgICB2b2lkIHNldEljb25EYXRh
YmFzZUVuYWJsZWQoYm9vbCBlbmFibGUpOworICAgIHZvaWQgc2V0SWNvbkRhdGFiYXNlRW5hYmxl
ZChib29sKTsKIAogICAgIHZvaWQgc2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoYm9vbCBlbmFibGVk
LCBib29sIHBlcm1pc3NpdmUgPSBmYWxzZSk7CiAgICAgdm9pZCB3YWl0Rm9yUG9saWN5RGVsZWdh
dGUoKTsKIAogICAgIHZvaWQgb3ZlcnJpZGVQcmVmZXJlbmNlKGNvbnN0IFFTdHJpbmcmIG5hbWUs
IGNvbnN0IFFWYXJpYW50JiB2YWx1ZSk7CiAgICAgdm9pZCBzZXRVc2VyU3R5bGVTaGVldExvY2F0
aW9uKGNvbnN0IFFTdHJpbmcmIHVybCk7Ci0gICAgdm9pZCBzZXRVc2VyU3R5bGVTaGVldEVuYWJs
ZWQoYm9vbCBlbmFibGVkKTsKKyAgICB2b2lkIHNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZChib29s
KTsKICAgICB2b2lkIHNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoYm9v
bCBmb3JiaWRkZW4sIGNvbnN0IFFTdHJpbmcmIHNjaGVtZSk7CiAgICAgaW50IHdvcmtlclRocmVh
ZENvdW50KCk7CiAgICAgaW50IG51bWJlck9mUGFnZXMoZmxvYXQgd2lkdGggPSBtYXhWaWV3V2lk
dGgsIGZsb2F0IGhlaWdodCA9IG1heFZpZXdIZWlnaHQpOwogICAgIGJvb2wgY2FsbFNob3VsZENs
b3NlT25XZWJWaWV3KCk7CiAgICAgLy8gRm9yIG5vdywgdGhpcyBpcyBhIG5vLW9wLiBUaGlzIG1h
eSBjaGFuZ2UgZGVwZW5kaW5nIG9uIG91dGNvbWUgb2YKICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzMzMzMKLSAgICB2b2lkIHNldENhbGxDbG9zZU9uV2Vi
Vmlld3MoKSB7fQorICAgIHZvaWQgc2V0Q2FsbENsb3NlT25XZWJWaWV3cygpIHsgfQogICAgIC8v
IFRoaXMgaXMgYSBuby1vcCAtIGl0IGFsbG93cyB1cyB0byBwYXNzCiAgICAgLy8gcGx1Z2lucy9n
ZXQtdXJsLXRoYXQtdGhlLXJlc291cmNlLWxvYWQtZGVsZWdhdGUtd2lsbC1kaXNhbGxvdy5odG1s
CiAgICAgLy8gd2hpY2ggaXMgYSBNYWMtc3BlY2lmaWMgdGVzdC4KLSAgICB2b2lkIGFkZERpc2Fs
bG93ZWRVUkwoY29uc3QgUVN0cmluZyYpIHt9CisgICAgdm9pZCBhZGREaXNhbGxvd2VkVVJMKGNv
bnN0IFFTdHJpbmcmKSB7IH0KIAogICAgIHZvaWQgc2V0TW9ja0RldmljZU9yaWVudGF0aW9uKGJv
b2wgY2FuUHJvdmlkZUFscGhhLCBkb3VibGUgYWxwaGEsIGJvb2wgY2FuUHJvdmlkZUJldGEsIGRv
dWJsZSBiZXRhLCBib29sIGNhblByb3ZpZGVHYW1tYSwgZG91YmxlIGdhbW1hKTsKIApAQCAtMjQw
LDcgKzI0MSw3IEBAIHB1YmxpYyBzbG90czoKICAgICB2b2lkIHNldEF1dG9tYXRpY0xpbmtEZXRl
Y3Rpb25FbmFibGVkKGJvb2wpOwogCiAgICAgLy8gRW1wdHkgc3R1YiBtZXRob2QgdG8ga2VlcCBw
YXJpdHkgd2l0aCBvYmplY3QgbW9kZWwgZXhwb3NlZCBieSBnbG9iYWwgTGF5b3V0VGVzdENvbnRy
b2xsZXIuCi0gICAgdm9pZCBhYm9ydE1vZGFsKCkge30KKyAgICB2b2lkIGFib3J0TW9kYWwoKSB7
IH0KIAogICAgIHZvaWQgYWRkVVJMVG9SZWRpcmVjdChjb25zdCBRU3RyaW5nJiBvcmlnaW4sIGNv
bnN0IFFTdHJpbmcmIGRlc3RpbmF0aW9uKTsKIApAQCAtMjUxLDcgKzI1Miw3IEBAIHB1YmxpYyBz
bG90czoKICAgICB2b2lkIHNldFNjcm9sbGJhclBvbGljeShjb25zdCBRU3RyaW5nJiBvcmllbnRh
dGlvbiwgY29uc3QgUVN0cmluZyYgcG9saWN5KTsKIAogICAgIFFTdHJpbmcgbWFya2VyVGV4dEZv
ckxpc3RJdGVtKGNvbnN0IFFXZWJFbGVtZW50JiBsaXN0SXRlbSk7Ci0gICAgUVZhcmlhbnRNYXAg
Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKGNvbnN0IFFXZWJFbGVtZW50JiBlbGVt
ZW50KSBjb25zdDsKKyAgICBRVmFyaWFudE1hcCBjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRl
ZEluZm8oY29uc3QgUVdlYkVsZW1lbnQmKSBjb25zdDsKIAogICAgIC8vIFNpbXVsYXRlIGEgcmVx
dWVzdCBhbiBlbWJlZGRpbmcgYXBwbGljYXRpb24gY291bGQgbWFrZSwgcG9wdWxhdGluZyBwZXIt
c2Vzc2lvbiBjcmVkZW50aWFsIHN0b3JhZ2UuCiAgICAgdm9pZCBhdXRoZW50aWNhdGVTZXNzaW9u
KGNvbnN0IFFTdHJpbmcmIHVybCwgY29uc3QgUVN0cmluZyYgdXNlcm5hbWUsIGNvbnN0IFFTdHJp
bmcmIHBhc3N3b3JkKTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREZXNrdG9w
Tm90aWZpY2F0aW9uUHJlc2VudGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVy
VHJlZS93aW4vRFJURGVza3RvcE5vdGlmaWNhdGlvblByZXNlbnRlci5jcHAJKHJldmlzaW9uIDEy
NTMzNSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREZXNrdG9wTm90aWZpY2F0aW9u
UHJlc2VudGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUg
IkRSVERlc2t0b3BOb3RpZmljYXRpb25QcmVzZW50ZXIuaCIKIAogI2luY2x1ZGUgIkR1bXBSZW5k
ZXJUcmVlLmgiCi0jaW5jbHVkZSAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJU
ZXN0UnVubmVyLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZkJTVFIuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL05vdGlmaWNhdGlvbkNsaWVudC5oPgpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L0R1bXBSZW5kZXJUcmVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93
aW4vRHVtcFJlbmRlclRyZWUuY3BwCShyZXZpc2lvbiAxMjUzMzUpCisrKyBUb29scy9EdW1wUmVu
ZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMCAr
MzIsMTAgQEAKICNpbmNsdWRlICJFZGl0aW5nRGVsZWdhdGUuaCIKICNpbmNsdWRlICJGcmFtZUxv
YWREZWxlZ2F0ZS5oIgogI2luY2x1ZGUgIkhpc3RvcnlEZWxlZ2F0ZS5oIgotI2luY2x1ZGUgIkxh
eW91dFRlc3RDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiUGl4ZWxEdW1wU3VwcG9ydC5oIgogI2lu
Y2x1ZGUgIlBvbGljeURlbGVnYXRlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkRGVsZWdhdGUu
aCIKKyNpbmNsdWRlICJUZXN0UnVubmVyLmgiCiAjaW5jbHVkZSAiVUlEZWxlZ2F0ZS5oIgogI2lu
Y2x1ZGUgIldlYkNvcmVUZXN0U3VwcG9ydC5oIgogI2luY2x1ZGUgIldvcmtRdWV1ZUl0ZW0uaCIK
SW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS52Y3Byb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLnZjcHJv
agkocmV2aXNpb24gMTI1MzM1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5k
ZXJUcmVlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNDM4LDE1ICs0MzgsMTUgQEAKIAkJCQk+
CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cTGF5b3V0VGVzdENv
bnRyb2xsZXIuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5cVGVzdFJ1bm5lci5jcHAiCiAJCQkJ
PgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXExheW91dFRlc3RD
b250cm9sbGVyLmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxUZXN0UnVubmVyLmgiCiAJCQkJPgog
CQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cTGF5b3V0VGVzdENvbnRy
b2xsZXJXaW4uY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLlxUZXN0UnVubmVyV2luLmNwcCIKIAkJ
CQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L0VkaXRpbmdEZWxlZ2F0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUv
d2luL0VkaXRpbmdEZWxlZ2F0ZS5jcHAJKHJldmlzaW9uIDEyNTMzNSkKKysrIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL3dpbi9FZGl0aW5nRGVsZWdhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3
ICszMCw3IEBACiAjaW5jbHVkZSAiRWRpdGluZ0RlbGVnYXRlLmgiCiAKICNpbmNsdWRlICJEdW1w
UmVuZGVyVHJlZS5oIgotI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9sbGVyLmgiCisjaW5jbHVk
ZSAiVGVzdFJ1bm5lci5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ09NUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KSW5kZXg6IFRvb2xz
L0R1bXBSZW5kZXJUcmVlL3dpbi9GcmFtZUxvYWREZWxlZ2F0ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0ZyYW1lTG9hZERlbGVnYXRlLmNwcAkocmV2aXNpb24g
MTI1MzM1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0ZyYW1lTG9hZERlbGVnYXRlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIkR1bXBSZW5kZXJU
cmVlLmgiCiAjaW5jbHVkZSAiRXZlbnRTZW5kZXIuaCIKICNpbmNsdWRlICJHQ0NvbnRyb2xsZXIu
aCIKLSNpbmNsdWRlICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlRlc3RSdW5u
ZXIuaCIKICNpbmNsdWRlICJUZXh0SW5wdXRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV2ViQ29y
ZVRlc3RTdXBwb3J0LmgiCiAjaW5jbHVkZSAiV29ya1F1ZXVlSXRlbS5oIgpJbmRleDogVG9vbHMv
RHVtcFJlbmRlclRyZWUvd2luL0hpc3RvcnlEZWxlZ2F0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvRHVtcFJlbmRlclRyZWUvd2luL0hpc3RvcnlEZWxlZ2F0ZS5jcHAJKHJldmlzaW9uIDEyNTMz
NSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9IaXN0b3J5RGVsZWdhdGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5o
IgogI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlV2luLmgiCi0jaW5jbHVkZSAiTGF5b3V0VGVzdENv
bnRyb2xsZXIuaCIKKyNpbmNsdWRlICJUZXN0UnVubmVyLmgiCiAjaW5jbHVkZSA8c3RyaW5nPgog
I2luY2x1ZGUgPFdlYktpdC9XZWJLaXQuaD4KIApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUv
d2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1w
UmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCShyZXZpc2lvbiAxMjUz
MzUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE0NzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
LSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9sbGVy
LmgiCi0KLSNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgotI2luY2x1ZGUgIkVkaXRpbmdEZWxl
Z2F0ZS5oIgotI2luY2x1ZGUgIlBvbGljeURlbGVnYXRlLmgiCi0jaW5jbHVkZSAiV29ya1F1ZXVl
LmgiCi0jaW5jbHVkZSAiV29ya1F1ZXVlSXRlbS5oIgotI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9u
L0NvcmVGb3VuZGF0aW9uLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIu
aD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZkJTVFIuaD4KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvQ09N
UHRyLmg+Ci0jaW5jbHVkZSA8V2ViS2l0L1dlYktpdC5oPgotI2luY2x1ZGUgPFdlYktpdC9XZWJL
aXRDT01BUEkuaD4KLSNpbmNsdWRlIDxjb211dGlsLmg+Ci0jaW5jbHVkZSA8c2hsd2FwaS5oPgot
I2luY2x1ZGUgPHNobGd1aWQuaD4KLSNpbmNsdWRlIDxzaG9iamlkbC5oPgotI2luY2x1ZGUgPHN0
cmluZz4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9QbGF0Zm9y
bS5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
Ci0KLXVzaW5nIHN0ZDo6c3RyaW5nOwotdXNpbmcgc3RkOjp3c3RyaW5nOwotCi1zdGF0aWMgYm9v
bCByZXNvbHZlQ3lnd2luUGF0aChjb25zdCB3c3RyaW5nJiBjeWd3aW5QYXRoLCB3c3RyaW5nJiB3
aW5kb3dzUGF0aCk7Ci0KLUxheW91dFRlc3RDb250cm9sbGVyOjp+TGF5b3V0VGVzdENvbnRyb2xs
ZXIoKQotewotICAgIENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsKLSAgICBpZiAoRkFJTEVEKGZy
YW1lLT53ZWJWaWV3KCZ3ZWJWaWV3KSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIHJlc2V0
IHdlYnZpZXctcmVsYXRlZCBzdGF0ZXMgYmFjayB0byBkZWZhdWx0IHZhbHVlcyBpbiBwcmVwYXJh
dGlvbiBmb3IgbmV4dCB0ZXN0Ci0KLSAgICBDT01QdHI8SVdlYlZpZXdQcml2YXRlPiB2aWV3UHJp
dmF0ZTsKLSAgICBpZiAoU1VDQ0VFREVEKHdlYlZpZXctPlF1ZXJ5SW50ZXJmYWNlKCZ2aWV3UHJp
dmF0ZSkpKQotICAgICAgICB2aWV3UHJpdmF0ZS0+c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1l
bnRzKFRSVUUpOwotCi0gICAgQ09NUHRyPElXZWJWaWV3RWRpdGluZz4gdmlld0VkaXRpbmc7Ci0g
ICAgaWYgKEZBSUxFRCh3ZWJWaWV3LT5RdWVyeUludGVyZmFjZSgmdmlld0VkaXRpbmcpKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIENPTVB0cjxJV2ViRWRpdGluZ0RlbGVnYXRlPiBkZWxlZ2F0ZTsK
LSAgICBpZiAoRkFJTEVEKHZpZXdFZGl0aW5nLT5lZGl0aW5nRGVsZWdhdGUoJmRlbGVnYXRlKSkp
Ci0gICAgICAgIHJldHVybjsKLSAgICBDT01QdHI8RWRpdGluZ0RlbGVnYXRlPiBlZGl0aW5nRGVs
ZWdhdGUoUXVlcnksIHZpZXdFZGl0aW5nLmdldCgpKTsKLSAgICBpZiAoZWRpdGluZ0RlbGVnYXRl
KQotICAgICAgICBlZGl0aW5nRGVsZWdhdGUtPnNldEFjY2VwdHNFZGl0aW5nKFRSVUUpOwotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGREaXNhbGxvd2VkVVJMKEpTU3RyaW5nUmVm
IHVybCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IQotfQotCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpjbGVhckJhY2tGb3J3YXJkTGlzdCgpCi17Ci0gICAgQ09NUHRyPElXZWJWaWV3
PiB3ZWJWaWV3OwotICAgIGlmIChGQUlMRUQoZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgQ09NUHRyPElXZWJCYWNrRm9yd2FyZExpc3Q+IGJhY2tGb3J3
YXJkTGlzdDsKLSAgICBpZiAoRkFJTEVEKHdlYlZpZXctPmJhY2tGb3J3YXJkTGlzdCgmYmFja0Zv
cndhcmRMaXN0KSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENPTVB0cjxJV2ViSGlzdG9yeUl0
ZW0+IGl0ZW07Ci0gICAgaWYgKEZBSUxFRChiYWNrRm9yd2FyZExpc3QtPmN1cnJlbnRJdGVtKCZp
dGVtKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFdlIGNsZWFyIHRoZSBoaXN0b3J5IGJ5
IHNldHRpbmcgdGhlIGJhY2svZm9yd2FyZCBsaXN0J3MgY2FwYWNpdHkgdG8gMAotICAgIC8vIHRo
ZW4gcmVzdG9yaW5nIGl0IGJhY2sgYW5kIGFkZGluZyBiYWNrIHRoZSBjdXJyZW50IGl0ZW0uCi0g
ICAgaW50IGNhcGFjaXR5OwotICAgIGlmIChGQUlMRUQoYmFja0ZvcndhcmRMaXN0LT5jYXBhY2l0
eSgmY2FwYWNpdHkpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYmFja0ZvcndhcmRMaXN0LT5z
ZXRDYXBhY2l0eSgwKTsKLSAgICBiYWNrRm9yd2FyZExpc3QtPnNldENhcGFjaXR5KGNhcGFjaXR5
KTsKLSAgICBiYWNrRm9yd2FyZExpc3QtPmFkZEl0ZW0oaXRlbS5nZXQoKSk7Ci0gICAgYmFja0Zv
cndhcmRMaXN0LT5nb1RvSXRlbShpdGVtLmdldCgpKTsKLX0KLQotYm9vbCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6Y2FsbFNob3VsZENsb3NlT25XZWJWaWV3KCkKLXsKLSAgICBDT01QdHI8SVdlYlZp
ZXc+IHdlYlZpZXc7Ci0gICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmlldykpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDT01QdHI8SVdlYlZpZXdQcml2YXRlPiB2aWV3
UHJpdmF0ZTsKLSAgICBpZiAoRkFJTEVEKHdlYlZpZXctPlF1ZXJ5SW50ZXJmYWNlKCZ2aWV3UHJp
dmF0ZSkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBCT09MIHJlc3VsdDsKLSAgICB2
aWV3UHJpdmF0ZS0+c2hvdWxkQ2xvc2UoJnJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotSlNTdHJpbmdSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvcHlEZWNvZGVkSG9zdE5hbWUo
SlNTdHJpbmdSZWYgbmFtZSkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IQotICAgIHJldHVy
biAwOwotfQotCi1KU1N0cmluZ1JlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29weUVuY29kZWRI
b3N0TmFtZShKU1N0cmluZ1JlZiBuYW1lKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQhCi0g
ICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc2FibGVJbWFn
ZUxvYWRpbmcoKQotewotICAgIENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsKLSAgICBpZiAoRkFJ
TEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3KSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBDT01QdHI8SVdlYlByZWZlcmVuY2VzPiBwcmVmZXJlbmNlczsKLSAgICBpZiAoRkFJTEVEKHdl
YlZpZXctPnByZWZlcmVuY2VzKCZwcmVmZXJlbmNlcykpKQotICAgICAgICByZXR1cm47Ci0gICAg
Ci0gICAgcHJlZmVyZW5jZXMtPnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseShGQUxTRSk7Ci19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc3BhdGNoUGVuZGluZ0xvYWRSZXF1ZXN0
cygpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgdGVzdGluZyBmaXggZm9yIDY3Mjc0
OTUKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzcGxheSgpCi17Ci0gICAgZGlz
cGxheVdlYlZpZXcoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6a2VlcFdlYkhp
c3RvcnkoKQotewotICAgIENPTVB0cjxJV2ViSGlzdG9yeT4gaGlzdG9yeTsKLSAgICBpZiAoRkFJ
TEVEKFdlYktpdENyZWF0ZUluc3RhbmNlKENMU0lEX1dlYkhpc3RvcnksIDAsIF9fdXVpZG9mKGhp
c3RvcnkpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmhpc3RvcnkpKSkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIENPTVB0cjxJV2ViSGlzdG9yeT4gc2hhcmVkSGlzdG9yeTsKLSAgICBpZiAo
RkFJTEVEKFdlYktpdENyZWF0ZUluc3RhbmNlKENMU0lEX1dlYkhpc3RvcnksIDAsIF9fdXVpZG9m
KHNoYXJlZEhpc3RvcnkpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJnNoYXJlZEhpc3Rvcnkp
KSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGhpc3RvcnktPnNldE9wdGlvbmFsU2hhcmVkSGlz
dG9yeShzaGFyZWRIaXN0b3J5LmdldCgpKTsKLX0KLQotSlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhp
cy4KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLUpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bGF5ZXJUcmVlQXNUZXh0
KCkgY29uc3QKLXsKLSAgICBDT01QdHI8SVdlYkZyYW1lUHJpdmF0ZT4gZnJhbWVQcml2YXRlKFF1
ZXJ5LCBmcmFtZSk7Ci0gICAgaWYgKCFmcmFtZVByaXZhdGUpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIEJTVFIgdGV4dEJTVFIgPSAwOwotICAgIEhSRVNVTFQgaHIgPSBmcmFtZVByaXZh
dGUtPmxheWVyVHJlZUFzVGV4dCgmdGV4dEJTVFIpOwotCi0gICAgd3N0cmluZyB0ZXh0KHRleHRC
U1RSLCBTeXNTdHJpbmdMZW4odGV4dEJTVFIpKTsKLSAgICBTeXNGcmVlU3RyaW5nKHRleHRCU1RS
KTsKLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gdGV4dFZhbHVlSlMoQWRvcHQsIEpTU3Ry
aW5nQ3JlYXRlV2l0aENoYXJhY3RlcnModGV4dC5kYXRhKCksIHRleHQubGVuZ3RoKCkpKTsKLSAg
ICByZXR1cm4gdGV4dFZhbHVlSlM7Ci19Ci0KLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6bWFya2VyVGV4dEZvckxpc3RJdGVtKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU1ZhbHVlUmVmIG5vZGVPYmplY3QpIGNvbnN0Ci17Ci0gICAgQ09NUHRyPElXZWJWaWV3
PiB3ZWJWaWV3OwotICAgIGlmIChGQUlMRUQoZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBDT01QdHI8SVdlYlZpZXdQcml2YXRlPiB3ZWJWaWV3UHJp
dmF0ZShRdWVyeSwgd2ViVmlldyk7Ci0gICAgaWYgKCF3ZWJWaWV3UHJpdmF0ZSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICBDT01QdHI8SURPTUVsZW1lbnQ+IGVsZW1lbnQ7Ci0gICAgaWYgKEZB
SUxFRCh3ZWJWaWV3UHJpdmF0ZS0+ZWxlbWVudEZyb21KUyhjb250ZXh0LCBub2RlT2JqZWN0LCAm
ZWxlbWVudCkpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIENPTVB0cjxJRE9NRWxlbWVudFBy
aXZhdGU+IGVsZW1lbnRQcml2YXRlKFF1ZXJ5LCBlbGVtZW50KTsKLSAgICBpZiAoIWVsZW1lbnRQ
cml2YXRlKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEJTVFIgdGV4dEJTVFIgPSAwOwotICAg
IGlmIChGQUlMRUQoZWxlbWVudFByaXZhdGUtPm1hcmtlclRleHRGb3JMaXN0SXRlbSgmdGV4dEJT
VFIpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
bWFya2VyVGV4dChBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoQlNUUih0ZXh0QlNUUikpOwotICAg
IFN5c0ZyZWVTdHJpbmcodGV4dEJTVFIpOwotICAgIHJldHVybiBtYXJrZXJUZXh0OwotfQotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjp3YWl0Rm9yUG9saWN5RGVsZWdhdGUoKQotewotICAg
IENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsKLSAgICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3
KCZ3ZWJWaWV3KSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNldFdhaXRUb0R1bXAodHJ1ZSk7
Ci0gICAgcG9saWN5RGVsZWdhdGUtPnNldENvbnRyb2xsZXJUb05vdGlmeURvbmUodGhpcyk7Ci0g
ICAgd2ViVmlldy0+c2V0UG9saWN5RGVsZWdhdGUocG9saWN5RGVsZWdhdGUpOwotfQotCi1zaXpl
X3QgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndlYkhpc3RvcnlJdGVtQ291bnQoKQotewotICAgIENP
TVB0cjxJV2ViSGlzdG9yeT4gaGlzdG9yeTsKLSAgICBpZiAoRkFJTEVEKFdlYktpdENyZWF0ZUlu
c3RhbmNlKENMU0lEX1dlYkhpc3RvcnksIDAsIF9fdXVpZG9mKGhpc3RvcnkpLCByZWludGVycHJl
dF9jYXN0PHZvaWQqKj4oJmhpc3RvcnkpKSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgQ09N
UHRyPElXZWJIaXN0b3J5PiBzaGFyZWRIaXN0b3J5OwotICAgIGlmIChGQUlMRUQoaGlzdG9yeS0+
b3B0aW9uYWxTaGFyZWRIaXN0b3J5KCZzaGFyZWRIaXN0b3J5KSkgfHwgIXNoYXJlZEhpc3Rvcnkp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgQ09NUHRyPElXZWJIaXN0b3J5UHJpdmF0ZT4gc2hh
cmVkSGlzdG9yeVByaXZhdGU7Ci0gICAgaWYgKEZBSUxFRChzaGFyZWRIaXN0b3J5LT5RdWVyeUlu
dGVyZmFjZSgmc2hhcmVkSGlzdG9yeVByaXZhdGUpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICBpbnQgY291bnQ7Ci0gICAgaWYgKEZBSUxFRChzaGFyZWRIaXN0b3J5UHJpdmF0ZS0+YWxsSXRl
bXMoJmNvdW50LCAwKSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGNvdW50Owot
fQotCi11bnNpZ25lZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d29ya2VyVGhyZWFkQ291bnQoKSBj
b25zdAotewotICAgIENPTVB0cjxJV2ViV29ya2Vyc1ByaXZhdGU+IHdvcmtlcnM7Ci0gICAgaWYg
KEZBSUxFRChXZWJLaXRDcmVhdGVJbnN0YW5jZShDTFNJRF9XZWJXb3JrZXJzUHJpdmF0ZSwgMCwg
X191dWlkb2Yod29ya2VycyksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmd29ya2VycykpKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgdW5zaWduZWQgY291bnQ7Ci0gICAgaWYgKEZBSUxFRCh3
b3JrZXJzLT53b3JrZXJUaHJlYWRDb3VudCgmY291bnQpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgcmV0dXJuIGNvdW50OwotfQotCi1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnBsYXRmb3JtTmFtZSgpIGNvbnN0Ci17Ci0gICAgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IHBsYXRmb3JtTmFtZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIndpbiIpKTsKLSAgICByZXR1cm4gcGxhdGZvcm1OYW1lOwotfQotCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpub3RpZnlEb25lKCkKLXsKLSAgICAvLyBTYW1lIGFzIG9uIG1hYy4gIFRo
aXMgY2FuIGJlIHNoYXJlZC4KLSAgICBpZiAobV93YWl0VG9EdW1wICYmICF0b3BMb2FkaW5nRnJh
bWUgJiYgIVdvcmtRdWV1ZTo6c2hhcmVkKCktPmNvdW50KCkpCi0gICAgICAgIGR1bXAoKTsKLSAg
ICBtX3dhaXRUb0R1bXAgPSBmYWxzZTsKLX0KLQotSlNTdHJpbmdSZWYgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnBhdGhUb0xvY2FsUmVzb3VyY2UoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTU3RyaW5n
UmVmIHVybCkKLXsKLSAgICB3c3RyaW5nIGlucHV0KEpTU3RyaW5nR2V0Q2hhcmFjdGVyc1B0cih1
cmwpLCBKU1N0cmluZ0dldExlbmd0aCh1cmwpKTsKLQotICAgIHdzdHJpbmcgbG9jYWxQYXRoOwot
ICAgIGlmICghcmVzb2x2ZUN5Z3dpblBhdGgoaW5wdXQsIGxvY2FsUGF0aCkpIHsKLSAgICAgICAg
cHJpbnRmKCJFUlJPUjogRmFpbGVkIHRvIHJlc29sdmUgQ3lnd2luIHBhdGggJVNcbiIsIGlucHV0
LmNfc3RyKCkpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gSlNTdHJp
bmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhsb2NhbFBhdGguY19zdHIoKSwgbG9jYWxQYXRoLmxlbmd0
aCgpKTsKLX0KLQotc3RhdGljIHdzdHJpbmcganNTdHJpbmdSZWZUb1dTdHJpbmcoSlNTdHJpbmdS
ZWYganNTdHIpCi17Ci0gICAgc2l6ZV90IGxlbmd0aCA9IEpTU3RyaW5nR2V0TGVuZ3RoKGpzU3Ry
KTsKLSAgICBWZWN0b3I8V0NIQVI+IGJ1ZmZlcihsZW5ndGggKyAxKTsKLSAgICBtZW1jcHkoYnVm
ZmVyLmRhdGEoKSwgSlNTdHJpbmdHZXRDaGFyYWN0ZXJzUHRyKGpzU3RyKSwgbGVuZ3RoICogc2l6
ZW9mKFdDSEFSKSk7Ci0gICAgYnVmZmVyW2xlbmd0aF0gPSAnXDAnOwotCi0gICAgcmV0dXJuIGJ1
ZmZlci5kYXRhKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVlTG9hZChK
U1N0cmluZ1JlZiB1cmwsIEpTU3RyaW5nUmVmIHRhcmdldCkKLXsKLSAgICBDT01QdHI8SVdlYkRh
dGFTb3VyY2U+IGRhdGFTb3VyY2U7Ci0gICAgaWYgKEZBSUxFRChmcmFtZS0+ZGF0YVNvdXJjZSgm
ZGF0YVNvdXJjZSkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDT01QdHI8SVdlYlVSTFJlc3Bv
bnNlPiByZXNwb25zZTsKLSAgICBpZiAoRkFJTEVEKGRhdGFTb3VyY2UtPnJlc3BvbnNlKCZyZXNw
b25zZSkpIHx8ICFyZXNwb25zZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQlNUUiByZXNwb25z
ZVVSTEJTVFI7Ci0gICAgaWYgKEZBSUxFRChyZXNwb25zZS0+VVJMKCZyZXNwb25zZVVSTEJTVFIp
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIHdzdHJpbmcgcmVzcG9uc2VVUkwocmVzcG9uc2VVUkxC
U1RSLCBTeXNTdHJpbmdMZW4ocmVzcG9uc2VVUkxCU1RSKSk7Ci0gICAgU3lzRnJlZVN0cmluZyhy
ZXNwb25zZVVSTEJTVFIpOwotCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBkbyByZWFsIHJlbGF0
aXZlIFVSTCByZXNvbHV0aW9uIGhlcmUuCi0gICAgaW50IGxhc3RTbGFzaCA9IHJlc3BvbnNlVVJM
LnJmaW5kKCcvJyk7Ci0gICAgaWYgKGxhc3RTbGFzaCAhPSAtMSkKLSAgICAgICAgcmVzcG9uc2VV
UkwgPSByZXNwb25zZVVSTC5zdWJzdHIoMCwgbGFzdFNsYXNoKTsKLQotICAgIHdzdHJpbmcgd1VS
TCA9IGpzU3RyaW5nUmVmVG9XU3RyaW5nKHVybCk7Ci0gICAgd3N0cmluZyB3QWJzb2x1dGVVUkwg
PSByZXNwb25zZVVSTCArIFRFWFQoIi8iKSArIHdVUkw7Ci0gICAgSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IGpzQWJzb2x1dGVVUkwoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMo
d0Fic29sdXRlVVJMLmRhdGEoKSwgd0Fic29sdXRlVVJMLmxlbmd0aCgpKSk7Ci0KLSAgICBXb3Jr
UXVldWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcgTG9hZEl0ZW0oanNBYnNvbHV0ZVVSTC5nZXQoKSwg
dGFyZ2V0KSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFjY2VwdHNFZGl0
aW5nKGJvb2wgYWNjZXB0c0VkaXRpbmcpCi17Ci0gICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3
OwotICAgIGlmIChGQUlMRUQoZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQ09NUHRyPElXZWJWaWV3RWRpdGluZz4gdmlld0VkaXRpbmc7Ci0gICAgaWYg
KEZBSUxFRCh3ZWJWaWV3LT5RdWVyeUludGVyZmFjZSgmdmlld0VkaXRpbmcpKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgQ09NUHRyPElXZWJFZGl0aW5nRGVsZWdhdGU+IGRlbGVnYXRlOwotICAg
IGlmIChGQUlMRUQodmlld0VkaXRpbmctPmVkaXRpbmdEZWxlZ2F0ZSgmZGVsZWdhdGUpKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgRWRpdGluZ0RlbGVnYXRlKiBlZGl0aW5nRGVsZWdhdGUgPSAo
RWRpdGluZ0RlbGVnYXRlKikoSVdlYkVkaXRpbmdEZWxlZ2F0ZSopZGVsZWdhdGUuZ2V0KCk7Ci0g
ICAgZWRpdGluZ0RlbGVnYXRlLT5zZXRBY2NlcHRzRWRpdGluZyhhY2NlcHRzRWRpdGluZyk7Ci19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsd2F5c0FjY2VwdENvb2tpZXMoYm9v
bCBhbHdheXNBY2NlcHRDb29raWVzKQotewotICAgIGlmIChhbHdheXNBY2NlcHRDb29raWVzID09
IG1fYWx3YXlzQWNjZXB0Q29va2llcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCE6OnNl
dEFsd2F5c0FjY2VwdENvb2tpZXMoYWx3YXlzQWNjZXB0Q29va2llcykpCi0gICAgICAgIHJldHVy
bjsKLSAgICBtX2Fsd2F5c0FjY2VwdENvb2tpZXMgPSBhbHdheXNBY2NlcHRDb29raWVzOwotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxl
ZChib29sIGZsYWcpCi17Ci0gICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OwotICAgIGlmIChG
QUlMRUQoZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Q09NUHRyPElXZWJQcmVmZXJlbmNlcz4gcHJlZmVyZW5jZXM7Ci0gICAgaWYgKEZBSUxFRCh3ZWJW
aWV3LT5wcmVmZXJlbmNlcygmcHJlZmVyZW5jZXMpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Q09NUHRyPElXZWJQcmVmZXJlbmNlc1ByaXZhdGU+IHByZWZzUHJpdmF0ZShRdWVyeSwgcHJlZmVy
ZW5jZXMpOwotICAgIGlmICghcHJlZnNQcml2YXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBw
cmVmc1ByaXZhdGUtPnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKGZsYWcpOwotfQotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBdXRvZmlsbGVkKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU1ZhbHVlUmVmIG5vZGVPYmplY3QsIGJvb2wgYXV0b2ZpbGxlZCkKLXsKLSAgICBDT01Q
dHI8SVdlYlZpZXc+IHdlYlZpZXc7Ci0gICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2Vi
VmlldykpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDT01QdHI8SVdlYlZpZXdQcml2YXRlPiB3
ZWJWaWV3UHJpdmF0ZShRdWVyeSwgd2ViVmlldyk7Ci0gICAgaWYgKCF3ZWJWaWV3UHJpdmF0ZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQ09NUHRyPElET01FbGVtZW50PiBlbGVtZW50OwotICAg
IGlmIChGQUlMRUQod2ViVmlld1ByaXZhdGUtPmVsZW1lbnRGcm9tSlMoY29udGV4dCwgbm9kZU9i
amVjdCwgJmVsZW1lbnQpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ09NUHRyPElGb3Jtc0F1
dG9GaWxsVHJhbnNpdGlvbj4gYXV0b2ZpbGxFbGVtZW50KFF1ZXJ5LCBlbGVtZW50KTsKLSAgICBp
ZiAoIWF1dG9maWxsRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0b2ZpbGxFbGVt
ZW50LT5zZXRBdXRvZmlsbGVkKGF1dG9maWxsZWQpOwotfQotCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShib29sIHNldERlbGVnYXRlLCBib29sIHBl
cm1pc3NpdmUpCi17Ci0gICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OwotICAgIGlmIChGQUlM
RUQoZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KHNldERlbGVnYXRlKSB7Ci0gICAgICAgIHBvbGljeURlbGVnYXRlLT5zZXRQZXJtaXNzaXZlKHBl
cm1pc3NpdmUpOwotICAgICAgICB3ZWJWaWV3LT5zZXRQb2xpY3lEZWxlZ2F0ZShwb2xpY3lEZWxl
Z2F0ZSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHdlYlZpZXctPnNldFBvbGljeURlbGVnYXRlKDAp
OwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrRGV2aWNlT3JpZW50YXRp
b24oYm9vbCBjYW5Qcm92aWRlQWxwaGEsIGRvdWJsZSBhbHBoYSwgYm9vbCBjYW5Qcm92aWRlQmV0
YSwgZG91YmxlIGJldGEsIGJvb2wgY2FuUHJvdmlkZUdhbW1hLCBkb3VibGUgZ2FtbWEpCi17Ci0g
ICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgRGV2aWNlT3JpZW50YXRpb24gbGF5b3V0IHRlc3Rz
LgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzAz
MzUuCi19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2NhdGlvblBv
c2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5
KQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIEdlb2xvY2F0aW9uIGxheW91dCB0ZXN0
cy4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4
MjY0LgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25F
cnJvcihpbnQgY29kZSwgSlNTdHJpbmdSZWYgbWVzc2FnZSkKLXsKLSAgICAvLyBGSVhNRTogSW1w
bGVtZW50IGZvciBHZW9sb2NhdGlvbiBsYXlvdXQgdGVzdHMuCi0gICAgLy8gU2VlIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODI2NC4KLX0KLQotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wgYWxsb3cpCi17Ci0g
ICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgR2VvbG9jYXRpb24gbGF5b3V0IHRlc3RzLgotICAg
IHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbihhbGxvdyk7Ci19Ci0KLWludCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVz
dHMoKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIEdlb2xvY2F0aW9uIGxheW91dCB0
ZXN0cy4KLSAgICByZXR1cm4gLTE7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFk
ZE1vY2tTcGVlY2hJbnB1dFJlc3VsdChKU1N0cmluZ1JlZiByZXN1bHQsIGRvdWJsZSBjb25maWRl
bmNlLCBKU1N0cmluZ1JlZiBsYW5ndWFnZSkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZv
ciBzcGVlY2ggaW5wdXQgbGF5b3V0IHRlc3RzLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCi19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldE1vY2tTcGVlY2hJbnB1dER1bXBSZWN0KGJvb2wgZmxhZykKLXsKLSAgICAvLyBG
SVhNRTogSW1wbGVtZW50IGZvciBzcGVlY2ggaW5wdXQgbGF5b3V0IHRlc3RzLgotICAgIC8vIFNl
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCi19Ci0KLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXJ0U3BlZWNoSW5wdXQoSlNDb250ZXh0UmVmIGlu
cHV0RWxlbWVudCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBzcGVlY2ggaW5wdXQg
bGF5b3V0IHRlc3RzLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Mzk0ODUuCi19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEljb25E
YXRhYmFzZUVuYWJsZWQoYm9vbCBpY29uRGF0YWJhc2VFbmFibGVkKQotewotICAgIC8vIFNlZSBh
bHNvIDxyZGFyOi8vcHJvYmxlbS82NDgwMTA4PgotICAgIENPTVB0cjxJV2ViSWNvbkRhdGFiYXNl
PiBpY29uRGF0YWJhc2U7Ci0gICAgQ09NUHRyPElXZWJJY29uRGF0YWJhc2U+IHRtcEljb25EYXRh
YmFzZTsKLSAgICBpZiAoRkFJTEVEKFdlYktpdENyZWF0ZUluc3RhbmNlKENMU0lEX1dlYkljb25E
YXRhYmFzZSwgMCwgSUlEX0lXZWJJY29uRGF0YWJhc2UsICh2b2lkKiopJnRtcEljb25EYXRhYmFz
ZSkpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKEZBSUxFRCh0bXBJY29uRGF0YWJhc2UtPnNo
YXJlZEljb25EYXRhYmFzZSgmaWNvbkRhdGFiYXNlKSkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGljb25EYXRhYmFzZS0+c2V0RW5hYmxlZChpY29uRGF0YWJhc2VFbmFibGVkKTsKLX0KLQotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlcihib29s
IGZsYWcpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCEKLX0KLQotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChib29sIHByaXZhdGVCcm93c2lu
Z0VuYWJsZWQpCi17Ci0gICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OwotICAgIGlmIChGQUlM
RUQoZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ09N
UHRyPElXZWJQcmVmZXJlbmNlcz4gcHJlZmVyZW5jZXM7Ci0gICAgaWYgKEZBSUxFRCh3ZWJWaWV3
LT5wcmVmZXJlbmNlcygmcHJlZmVyZW5jZXMpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcHJl
ZmVyZW5jZXMtPnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQocHJpdmF0ZUJyb3dzaW5nRW5hYmxl
ZCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFhTU0F1ZGl0b3JFbmFibGVk
KGJvb2wgZW5hYmxlZCkKLXsKLSAgICBDT01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7Ci0gICAgaWYg
KEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmlldykpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBDT01QdHI8SVdlYlByZWZlcmVuY2VzPiBwcmVmZXJlbmNlczsKLSAgICBpZiAoRkFJTEVEKHdl
YlZpZXctPnByZWZlcmVuY2VzKCZwcmVmZXJlbmNlcykpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBDT01QdHI8SVdlYlByZWZlcmVuY2VzUHJpdmF0ZT4gcHJlZnNQcml2YXRlKFF1ZXJ5LCBwcmVm
ZXJlbmNlcyk7Ci0gICAgaWYgKCFwcmVmc1ByaXZhdGUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHByZWZzUHJpdmF0ZS0+c2V0WFNTQXVkaXRvckVuYWJsZWQoZW5hYmxlZCk7Ci19Ci0KLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoYm9vbCBlbmFi
bGVkKQotewotICAgIENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsKLSAgICBpZiAoRkFJTEVEKGZy
YW1lLT53ZWJWaWV3KCZ3ZWJWaWV3KSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENPTVB0cjxJ
V2ViUHJlZmVyZW5jZXM+IHByZWZlcmVuY2VzOwotICAgIGlmIChGQUlMRUQod2ViVmlldy0+cHJl
ZmVyZW5jZXMoJnByZWZlcmVuY2VzKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENPTVB0cjxJ
V2ViUHJlZmVyZW5jZXNQcml2YXRlPiBwcmVmc1ByaXZhdGUoUXVlcnksIHByZWZlcmVuY2VzKTsK
LSAgICBpZiAoIXByZWZzUHJpdmF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcHJlZnNQcml2
YXRlLT5zZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkKGVuYWJsZWQpOwotfQotCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoYm9vbCBlbmFibGVk
KQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIFNwYXRpYWxOYXZpZ2F0aW9uIGxheW91
dCB0ZXN0cy4KLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dVbml2ZXJz
YWxBY2Nlc3NGcm9tRmlsZVVSTHMoYm9vbCBlbmFibGVkKQotewotICAgIENPTVB0cjxJV2ViVmll
dz4gd2ViVmlldzsKLSAgICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3KSkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIENPTVB0cjxJV2ViUHJlZmVyZW5jZXM+IHByZWZlcmVuY2Vz
OwotICAgIGlmIChGQUlMRUQod2ViVmlldy0+cHJlZmVyZW5jZXMoJnByZWZlcmVuY2VzKSkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIENPTVB0cjxJV2ViUHJlZmVyZW5jZXNQcml2YXRlPiBwcmVm
c1ByaXZhdGUoUXVlcnksIHByZWZlcmVuY2VzKTsKLSAgICBpZiAoIXByZWZzUHJpdmF0ZSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgcHJlZnNQcml2YXRlLT5zZXRBbGxvd1VuaXZlcnNhbEFjY2Vz
c0Zyb21GaWxlVVJMcyhlbmFibGVkKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBDT01Q
dHI8SVdlYlZpZXc+IHdlYlZpZXc7Ci0gICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2Vi
VmlldykpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDT01QdHI8SVdlYlByZWZlcmVuY2VzPiBw
cmVmZXJlbmNlczsKLSAgICBpZiAoRkFJTEVEKHdlYlZpZXctPnByZWZlcmVuY2VzKCZwcmVmZXJl
bmNlcykpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDT01QdHI8SVdlYlByZWZlcmVuY2VzUHJp
dmF0ZT4gcHJlZnNQcml2YXRlKFF1ZXJ5LCBwcmVmZXJlbmNlcyk7Ci0gICAgaWYgKCFwcmVmc1By
aXZhdGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIHByZWZzUHJpdmF0ZS0+c2V0QWxsb3dGaWxl
QWNjZXNzRnJvbUZpbGVVUkxzKGVuYWJsZWQpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRQb3B1cEJsb2NraW5nRW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgQ09NUHRy
PElXZWJWaWV3PiB3ZWJWaWV3OwotICAgIGlmIChGQUlMRUQoZnJhbWUtPndlYlZpZXcoJndlYlZp
ZXcpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ09NUHRyPElXZWJQcmVmZXJlbmNlcz4gcHJl
ZmVyZW5jZXM7Ci0gICAgaWYgKEZBSUxFRCh3ZWJWaWV3LT5wcmVmZXJlbmNlcygmcHJlZmVyZW5j
ZXMpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcHJlZmVyZW5jZXMtPnNldEphdmFTY3JpcHRD
YW5PcGVuV2luZG93c0F1dG9tYXRpY2FsbHkoIWVuYWJsZWQpOwotfQotCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRQbHVnaW5zRW5hYmxlZChib29sIGZsYWcpCi17Ci0gICAgLy8gRklY
TUU6IEltcGxlbWVudAotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRKYXZhU2Ny
aXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBDT01QdHI8SVdlYlZp
ZXc+IHdlYlZpZXc7Ci0gICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmlldykpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBDT01QdHI8SVdlYlByZWZlcmVuY2VzPiBwcmVmZXJlbmNl
czsKLSAgICBpZiAoRkFJTEVEKHdlYlZpZXctPnByZWZlcmVuY2VzKCZwcmVmZXJlbmNlcykpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBDT01QdHI8SVdlYlByZWZlcmVuY2VzUHJpdmF0ZT4gcHJl
ZnNQcml2YXRlKFF1ZXJ5LCBwcmVmZXJlbmNlcyk7Ci0gICAgaWYgKCFwcmVmc1ByaXZhdGUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHByZWZzUHJpdmF0ZS0+c2V0SmF2YVNjcmlwdENhbkFjY2Vz
c0NsaXBib2FyZChlbmFibGVkKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKGJvb2wgc2hvdWxkQ3ljbGUpCi17Ci0gICAgQ09N
UHRyPElXZWJWaWV3PiB3ZWJWaWV3OwotICAgIGlmIChGQUlMRUQoZnJhbWUtPndlYlZpZXcoJndl
YlZpZXcpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ09NUHRyPElXZWJWaWV3UHJpdmF0ZT4g
dmlld1ByaXZhdGU7Ci0gICAgaWYgKEZBSUxFRCh3ZWJWaWV3LT5RdWVyeUludGVyZmFjZSgmdmll
d1ByaXZhdGUpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdmlld1ByaXZhdGUtPnNldFRhYktl
eUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhzaG91bGRDeWNsZSA/IFRSVUUgOiBGQUxTRSk7Ci19Ci0K
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZURhc2hib2FyZENvbXBhdGliaWxpdHlN
b2RlKGJvb2wgZmxhZykKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IQotfQotCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoYm9vbCBmbGFnKQot
ewotICAgIENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsKLSAgICBpZiAoRkFJTEVEKGZyYW1lLT53
ZWJWaWV3KCZ3ZWJWaWV3KSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENPTVB0cjxJV2ViUHJl
ZmVyZW5jZXM+IHByZWZlcmVuY2VzOwotICAgIGlmIChGQUlMRUQod2ViVmlldy0+cHJlZmVyZW5j
ZXMoJnByZWZlcmVuY2VzKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgcHJlZmVyZW5jZXMtPnNl
dFVzZXJTdHlsZVNoZWV0RW5hYmxlZChmbGFnKTsKLX0KLQotYm9vbCBhcHBlbmRDb21wb25lbnRU
b1BhdGgod3N0cmluZyYgcGF0aCwgY29uc3Qgd3N0cmluZyYgY29tcG9uZW50KQotewotICAgIFdD
SEFSIGJ1ZmZlcltNQVhfUEFUSF07Ci0KLSAgICBpZiAocGF0aC5zaXplKCkgKyAxID4gTUFYX1BB
VEgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1lbWNweShidWZmZXIsIHBhdGguZGF0
YSgpLCBwYXRoLnNpemUoKSAqIHNpemVvZihXQ0hBUikpOwotICAgIGJ1ZmZlcltwYXRoLnNpemUo
KV0gPSAnXDAnOwotCi0gICAgaWYgKCFQYXRoQXBwZW5kVyhidWZmZXIsIGNvbXBvbmVudC5jX3N0
cigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcGF0aCA9IHdzdHJpbmcoYnVmZmVy
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgZm9sbG93U2hvcnRjdXRzKHdz
dHJpbmcmIHBhdGgpCi17Ci0gICAgaWYgKFBhdGhGaWxlRXhpc3RzKHBhdGguY19zdHIoKSkpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gRG8gd2UgaGF2ZSBhIHNob3J0Y3V0PwotICAg
IHdzdHJpbmcgbGlua1BhdGggPSBwYXRoOwotICAgIGxpbmtQYXRoLmFwcGVuZChURVhUKCIubG5r
IikpOwotICAgIGlmICghUGF0aEZpbGVFeGlzdHMobGlua1BhdGguY19zdHIoKSkpCi0gICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICAvLyBXZSBoYXZlIGEgc2hvcnRjdXQsIGZpbmQgaXRzIHRhcmdl
dC4KLSAgICBDT01QdHI8SVNoZWxsTGluaz4gc2hvcnRjdXQoQ3JlYXRlLCBDTFNJRF9TaGVsbExp
bmspOwotICAgIGlmICghc2hvcnRjdXQpCi0gICAgICAgcmV0dXJuIGZhbHNlOwotICAgIENPTVB0
cjxJUGVyc2lzdEZpbGU+IHBlcnNpc3RGaWxlKFF1ZXJ5LCBzaG9ydGN1dCk7Ci0gICAgaWYgKCFz
aG9ydGN1dCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChGQUlMRUQocGVyc2lzdEZp
bGUtPkxvYWQobGlua1BhdGguY19zdHIoKSwgU1RHTV9SRUFEKSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAoRkFJTEVEKHNob3J0Y3V0LT5SZXNvbHZlKDAsIDApKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIFdDSEFSIHRhcmdldFBhdGhbTUFYX1BBVEhdOwotICAgIERXT1JE
IHRhcmdldFBhdGhMZW4gPSBfY291bnRvZih0YXJnZXRQYXRoKTsKLSAgICBpZiAoRkFJTEVEKHNo
b3J0Y3V0LT5HZXRQYXRoKHRhcmdldFBhdGgsIHRhcmdldFBhdGhMZW4sIDAsIDApKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghUGF0aEZpbGVFeGlzdHModGFyZ2V0UGF0aCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBVc2UgdGhlIHRhcmdldCBwYXRoIGFzIHRoZSBy
ZXN1bHQgcGF0aCBpbnN0ZWFkLgotICAgIHBhdGggPSB3c3RyaW5nKHRhcmdldFBhdGgpOwotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIHJlc29sdmVDeWd3aW5QYXRoKGNvbnN0
IHdzdHJpbmcmIGN5Z3dpblBhdGgsIHdzdHJpbmcmIHdpbmRvd3NQYXRoKQotewotICAgIHdzdHJp
bmcgZmlsZVByb3RvY29sID0gTCJmaWxlOi8vIjsKLSAgICBib29sIGlzRmlsZVByb3RvY29sID0g
Y3lnd2luUGF0aC5maW5kKGZpbGVQcm90b2NvbCkgIT0gc3RyaW5nOjpucG9zOwotICAgIGlmIChj
eWd3aW5QYXRoW2lzRmlsZVByb3RvY29sID8gNyA6IDBdICE9ICcvJykgIC8vIGVuc3VyZSBwYXRo
IGlzIGFic29sdXRlCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEdldCB0aGUgUm9v
dCBwYXRoLgotICAgIFdDSEFSIHJvb3RQYXRoW01BWF9QQVRIXTsKLSAgICBEV09SRCByb290UGF0
aFNpemUgPSBfY291bnRvZihyb290UGF0aCk7Ci0gICAgRFdPUkQga2V5VHlwZTsKLSAgICBEV09S
RCByZXN1bHQgPSA6OlNIR2V0VmFsdWVXKEhLRVlfTE9DQUxfTUFDSElORSwgVEVYVCgiU09GVFdB
UkVcXEN5Z251cyBTb2x1dGlvbnNcXEN5Z3dpblxcbW91bnRzIHYyXFwvIiksIFRFWFQoIm5hdGl2
ZSIpLCAma2V5VHlwZSwgJnJvb3RQYXRoLCAmcm9vdFBhdGhTaXplKTsKLQotICAgIGlmIChyZXN1
bHQgIT0gRVJST1JfU1VDQ0VTUyB8fCBrZXlUeXBlICE9IFJFR19TWikgewotICAgICAgICAvLyBD
eWd3aW4gMS43IGRvZXNuJ3Qgc3RvcmUgQ3lnd2luJ3Mgcm9vdCBhcyBhIG1vdW50IHBvaW50IGFu
eW1vcmUsIGJlY2F1c2UgbW91bnQgcG9pbnRzIGFyZSBub3cgc3RvcmVkIGluIC9ldGMvZnN0YWIu
Ci0gICAgICAgIC8vIEhvd2V2ZXIsIC9ldGMvZnN0YWIgZG9lc24ndCBjb250YWluIGFueSBpbmZv
cm1hdGlvbiBhYm91dCB3aGVyZSAvIGlzIGxvY2F0ZWQgYXMgYSBXaW5kb3dzIHBhdGgsIHNvIHdl
IG5lZWQgdG8gdXNlIEN5Z3dpbidzCi0gICAgICAgIC8vIG5ldyByZWdpc3RyeSBrZXkgdGhhdCBo
YXMgdGhlIHJvb3QuCi0gICAgICAgIHJlc3VsdCA9IDo6U0hHZXRWYWx1ZVcoSEtFWV9MT0NBTF9N
QUNISU5FLCBURVhUKCJTT0ZUV0FSRVxcQ3lnd2luXFxzZXR1cCIpLCBURVhUKCJyb290ZGlyIiks
ICZrZXlUeXBlLCAmcm9vdFBhdGgsICZyb290UGF0aFNpemUpOwotICAgICAgICBpZiAocmVzdWx0
ICE9IEVSUk9SX1NVQ0NFU1MgfHwga2V5VHlwZSAhPSBSRUdfU1opCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgd2luZG93c1BhdGggPSB3c3RyaW5nKHJvb3RQYXRoLCBy
b290UGF0aFNpemUpOwotCi0gICAgaW50IG9sZFBvcyA9IGlzRmlsZVByb3RvY29sID8gOCA6IDE7
Ci0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAgaW50IG5ld1BvcyA9IGN5Z3dpblBhdGguZmluZCgn
LycsIG9sZFBvcyk7Ci0KLSAgICAgICAgaWYgKG5ld1BvcyA9PSAtMSkgewotICAgICAgICAgICAg
d3N0cmluZyBwYXRoQ29tcG9uZW50ID0gY3lnd2luUGF0aC5zdWJzdHIob2xkUG9zKTsKLQotICAg
ICAgICAgICAgaWYgKCFhcHBlbmRDb21wb25lbnRUb1BhdGgod2luZG93c1BhdGgsIHBhdGhDb21w
b25lbnQpKQotICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBpZiAo
IWZvbGxvd1Nob3J0Y3V0cyh3aW5kb3dzUGF0aCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHdzdHJpbmcg
cGF0aENvbXBvbmVudCA9IGN5Z3dpblBhdGguc3Vic3RyKG9sZFBvcywgbmV3UG9zIC0gb2xkUG9z
KTsKLSAgICAgICAgaWYgKCFhcHBlbmRDb21wb25lbnRUb1BhdGgod2luZG93c1BhdGgsIHBhdGhD
b21wb25lbnQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmICghZm9s
bG93U2hvcnRjdXRzKHdpbmRvd3NQYXRoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgICAgICBvbGRQb3MgPSBuZXdQb3MgKyAxOwotICAgIH0KLQotICAgIGlmIChpc0ZpbGVQcm90
b2NvbCkKLSAgICAgICAgd2luZG93c1BhdGggPSBmaWxlUHJvdG9jb2wgKyB3aW5kb3dzUGF0aDsK
LQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRV
c2VyU3R5bGVTaGVldExvY2F0aW9uKEpTU3RyaW5nUmVmIGpzVVJMKQotewotICAgIENPTVB0cjxJ
V2ViVmlldz4gd2ViVmlldzsKLSAgICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3
KSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENPTVB0cjxJV2ViUHJlZmVyZW5jZXM+IHByZWZl
cmVuY2VzOwotICAgIGlmIChGQUlMRUQod2ViVmlldy0+cHJlZmVyZW5jZXMoJnByZWZlcmVuY2Vz
KSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdXJsU3Ry
aW5nKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKDAsIGpzVVJMKSk7Ci0gICAgUmV0YWlu
UHRyPENGVVJMUmVmPiB1cmwoQWRvcHRDRiwgQ0ZVUkxDcmVhdGVXaXRoU3RyaW5nKDAsIHVybFN0
cmluZy5nZXQoKSwgMCkpOwotICAgIGlmICghdXJsKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBOb3cgY29weSB0aGUgZmlsZSBzeXN0ZW0gcGF0aCwgUE9TSVggc3R5bGUuCi0gICAgUmV0YWlu
UHRyPENGU3RyaW5nUmVmPiBwYXRoQ0YoQWRvcHRDRiwgQ0ZVUkxDb3B5RmlsZVN5c3RlbVBhdGgo
dXJsLmdldCgpLCBrQ0ZVUkxQT1NJWFBhdGhTdHlsZSkpOwotICAgIGlmICghcGF0aENGKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICB3c3RyaW5nIHBhdGggPSBjZlN0cmluZ1JlZlRvV1N0cmluZyhw
YXRoQ0YuZ2V0KCkpOwotCi0gICAgd3N0cmluZyByZXN1bHRQYXRoOwotICAgIGlmICghcmVzb2x2
ZUN5Z3dpblBhdGgocGF0aCwgcmVzdWx0UGF0aCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8v
IFRoZSBwYXRoIGhhcyBiZWVuIHJlc29sdmVkLCBub3cgY29udmVydCBpdCBiYWNrIHRvIGEgQ0ZV
UkwuCi0gICAgaW50IHJlc3VsdCA9IFdpZGVDaGFyVG9NdWx0aUJ5dGUoQ1BfVVRGOCwgMCwgcmVz
dWx0UGF0aC5jX3N0cigpLCByZXN1bHRQYXRoLnNpemUoKSArIDEsIDAsIDAsIDAsIDApOwotICAg
IFZlY3RvcjxjaGFyPiB1dGY4VmVjdG9yKHJlc3VsdCk7Ci0gICAgcmVzdWx0ID0gV2lkZUNoYXJU
b011bHRpQnl0ZShDUF9VVEY4LCAwLCByZXN1bHRQYXRoLmNfc3RyKCksIHJlc3VsdFBhdGguc2l6
ZSgpICsgMSwgdXRmOFZlY3Rvci5kYXRhKCksIHJlc3VsdCwgMCwgMCk7Ci0gICAgaWYgKCFyZXN1
bHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVybCA9IENGVVJMQ3JlYXRlRnJvbUZpbGVTeXN0
ZW1SZXByZXNlbnRhdGlvbigwLCAoY29uc3QgVUludDgqKXV0ZjhWZWN0b3IuZGF0YSgpLCB1dGY4
VmVjdG9yLnNpemUoKSAtIDEsIGZhbHNlKTsKLSAgICBpZiAoIXVybCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgcmVzdWx0UGF0aCA9IGNmU3RyaW5nUmVmVG9XU3RyaW5nKENGVVJMR2V0U3RyaW5n
KHVybC5nZXQoKSkpOwotCi0gICAgQlNUUiByZXN1bHRQYXRoQlNUUiA9IFN5c0FsbG9jU3RyaW5n
TGVuKHJlc3VsdFBhdGguZGF0YSgpLCByZXN1bHRQYXRoLnNpemUoKSk7Ci0gICAgcHJlZmVyZW5j
ZXMtPnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24ocmVzdWx0UGF0aEJTVFIpOwotICAgIFN5c0Zy
ZWVTdHJpbmcocmVzdWx0UGF0aEJTVFIpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRWYWx1ZUZvclVzZXIoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgZWxlbWVu
dCwgSlNTdHJpbmdSZWYgdmFsdWUpCi17Ci0gICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3Owot
ICAgIGlmIChGQUlMRUQoZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgQ09NUHRyPElXZWJWaWV3UHJpdmF0ZT4gd2ViVmlld1ByaXZhdGUoUXVlcnksIHdl
YlZpZXcpOwotICAgIGlmICghd2ViVmlld1ByaXZhdGUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IENPTVB0cjxJRE9NRWxlbWVudD4gZG9tRWxlbWVudDsKLSAgICBpZiAoRkFJTEVEKHdlYlZpZXdQ
cml2YXRlLT5lbGVtZW50RnJvbUpTKGNvbnRleHQsIGVsZW1lbnQsICZkb21FbGVtZW50KSkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIENPTVB0cjxJRE9NSFRNTElucHV0RWxlbWVudD4gZG9tSW5w
dXRFbGVtZW50OwotICAgIGlmIChGQUlMRUQoZG9tRWxlbWVudC0+UXVlcnlJbnRlcmZhY2UoSUlE
X0lET01IVE1MSW5wdXRFbGVtZW50LCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmRvbUlucHV0
RWxlbWVudCkpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgX2JzdHJfdCB2YWx1ZUJTVFIoSlNT
dHJpbmdDb3B5QlNUUih2YWx1ZSksIGZhbHNlKTsKLQotICAgIGRvbUlucHV0RWxlbWVudC0+c2V0
VmFsdWVGb3JVc2VyKHZhbHVlQlNUUik7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFZpZXdNb2RlTWVkaWFGZWF0dXJlKEpTU3RyaW5nUmVmIG1vZGUpCi17Ci0gICAgLy8gRklY
TUU6IGltcGxlbWVudAotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQZXJzaXN0
ZW50VXNlclN0eWxlU2hlZXRMb2NhdGlvbihKU1N0cmluZ1JlZiBqc1VSTCkKLXsKLSAgICBSZXRh
aW5QdHI8Q0ZTdHJpbmdSZWY+IHVybFN0cmluZyhBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmlu
ZygwLCBqc1VSTCkpOwotICAgIDo6c2V0UGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0TG9jYXRpb24o
dXJsU3RyaW5nLmdldCgpKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJQ
ZXJzaXN0ZW50VXNlclN0eWxlU2hlZXQoKQotewotICAgIDo6c2V0UGVyc2lzdGVudFVzZXJTdHls
ZVNoZWV0TG9jYXRpb24oMCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdp
bmRvd0lzS2V5KGJvb2wgZmxhZykKLXsKLSAgICBDT01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7Ci0g
ICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmlldykpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBDT01QdHI8SVdlYlZpZXdQcml2YXRlPiB2aWV3UHJpdmF0ZTsKLSAgICBpZiAoRkFJ
TEVEKHdlYlZpZXctPlF1ZXJ5SW50ZXJmYWNlKCZ2aWV3UHJpdmF0ZSkpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBIV05EIHdlYlZpZXdXaW5kb3c7Ci0gICAgaWYgKEZBSUxFRCh2aWV3UHJpdmF0
ZS0+dmlld1dpbmRvdygoT0xFX0hBTkRMRSopJndlYlZpZXdXaW5kb3cpKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgOjpTZW5kTWVzc2FnZSh3ZWJWaWV3V2luZG93LCBmbGFnID8gV01fU0VURk9D
VVMgOiBXTV9LSUxMRk9DVVMsIChXUEFSQU0pOjpHZXREZXNrdG9wV2luZG93KCksIDApOwotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQo
Ym9vbCBmbGFnKQotewotICAgIENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsKLSAgICBpZiAoRkFJ
TEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3KSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENP
TVB0cjxJV2ViVmlld0VkaXRpbmc+IHZpZXdFZGl0aW5nOwotICAgIGlmIChGQUlMRUQod2ViVmll
dy0+UXVlcnlJbnRlcmZhY2UoJnZpZXdFZGl0aW5nKSkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHZpZXdFZGl0aW5nLT5zZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQoZmxhZyA/IFRSVUUgOiBG
QUxTRSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNlbGVjdFRyYWlsaW5n
V2hpdGVzcGFjZUVuYWJsZWQoYm9vbCBmbGFnKQotewotICAgIENPTVB0cjxJV2ViVmlldz4gd2Vi
VmlldzsKLSAgICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3KSkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIENPTVB0cjxJV2ViVmlld0VkaXRpbmc+IHZpZXdFZGl0aW5nOwotICAg
IGlmIChGQUlMRUQod2ViVmlldy0+UXVlcnlJbnRlcmZhY2UoJnZpZXdFZGl0aW5nKSkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIHZpZXdFZGl0aW5nLT5zZXRTZWxlY3RUcmFpbGluZ1doaXRlc3Bh
Y2VFbmFibGVkKGZsYWcgPyBUUlVFIDogRkFMU0UpOwotfQotCi1zdGF0aWMgY29uc3QgQ0ZUaW1l
SW50ZXJ2YWwgd2FpdFRvRHVtcFdhdGNoZG9nSW50ZXJ2YWwgPSAzMC4wOwotCi1zdGF0aWMgdm9p
ZCBDQUxMQkFDSyB3YWl0VW50aWxEb25lV2F0Y2hkb2dGaXJlZChIV05ELCBVSU5ULCBVSU5UX1BU
UiwgRFdPUkQpCi17Ci0gICAgZ0xheW91dFRlc3RDb250cm9sbGVyLT53YWl0VG9EdW1wV2F0Y2hk
b2dUaW1lckZpcmVkKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdhaXRU
b0R1bXAoYm9vbCB3YWl0VW50aWxEb25lKQotewotICAgIG1fd2FpdFRvRHVtcCA9IHdhaXRVbnRp
bERvbmU7Ci0gICAgaWYgKG1fd2FpdFRvRHVtcCAmJiAhd2FpdFRvRHVtcFdhdGNoZG9nKQotICAg
ICAgICB3YWl0VG9EdW1wV2F0Y2hkb2cgPSBTZXRUaW1lcigwLCAwLCB3YWl0VG9EdW1wV2F0Y2hk
b2dJbnRlcnZhbCAqIDEwMDAsIHdhaXRVbnRpbERvbmVXYXRjaGRvZ0ZpcmVkKTsKLX0KLQotaW50
IExheW91dFRlc3RDb250cm9sbGVyOjp3aW5kb3dDb3VudCgpCi17Ci0gICAgcmV0dXJuIG9wZW5X
aW5kb3dzKCkuc2l6ZSgpOwotfQotCi1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjplbGVtZW50
RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgaWQpCi17Ci0gICAg
Q09NUHRyPElET01Eb2N1bWVudD4gZG9jdW1lbnQ7Ci0gICAgaWYgKEZBSUxFRChmcmFtZS0+RE9N
RG9jdW1lbnQoJmRvY3VtZW50KSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHdzdHJp
bmcgaWRXc3RyaW5nID0ganNTdHJpbmdSZWZUb1dTdHJpbmcoaWQpOwotICAgIEJTVFIgaWRCU1RS
ID0gU3lzQWxsb2NTdHJpbmdMZW4oKE9MRUNIQVIqKWlkV3N0cmluZy5jX3N0cigpLCBpZFdzdHJp
bmcubGVuZ3RoKCkpOwotICAgIENPTVB0cjxJRE9NRWxlbWVudD4gZWxlbWVudDsKLSAgICBIUkVT
VUxUIHJlc3VsdCA9IGRvY3VtZW50LT5nZXRFbGVtZW50QnlJZChpZEJTVFIsICZlbGVtZW50KTsK
LSAgICBTeXNGcmVlU3RyaW5nKGlkQlNUUik7Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENPTVB0cjxJV2ViRnJhbWVQcml2YXRlPiBmcmFt
ZVByaXZhdGUoUXVlcnksIGZyYW1lKTsKLSAgICBpZiAoIWZyYW1lUHJpdmF0ZSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgQk9PTCBhdXRvQ29tcGxldGVzOwotICAgIGlmIChGQUlMRUQo
ZnJhbWVQcml2YXRlLT5lbGVtZW50RG9lc0F1dG9Db21wbGV0ZShlbGVtZW50LmdldCgpLCAmYXV0
b0NvbXBsZXRlcykpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gYXV0b0Nv
bXBsZXRlczsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXhlY0NvbW1hbmQoSlNT
dHJpbmdSZWYgbmFtZSwgSlNTdHJpbmdSZWYgdmFsdWUpCi17Ci0gICAgd3N0cmluZyB3TmFtZSA9
IGpzU3RyaW5nUmVmVG9XU3RyaW5nKG5hbWUpOwotICAgIHdzdHJpbmcgd1ZhbHVlID0ganNTdHJp
bmdSZWZUb1dTdHJpbmcodmFsdWUpOwotCi0gICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3Owot
ICAgIGlmIChGQUlMRUQoZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgQ09NUHRyPElXZWJWaWV3UHJpdmF0ZT4gdmlld1ByaXZhdGU7Ci0gICAgaWYgKEZB
SUxFRCh3ZWJWaWV3LT5RdWVyeUludGVyZmFjZSgmdmlld1ByaXZhdGUpKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQlNUUiBuYW1lQlNUUiA9IFN5c0FsbG9jU3RyaW5nTGVuKChPTEVDSEFSKil3
TmFtZS5jX3N0cigpLCB3TmFtZS5sZW5ndGgoKSk7Ci0gICAgQlNUUiB2YWx1ZUJTVFIgPSBTeXNB
bGxvY1N0cmluZ0xlbigoT0xFQ0hBUiopd1ZhbHVlLmNfc3RyKCksIHdWYWx1ZS5sZW5ndGgoKSk7
Ci0gICAgdmlld1ByaXZhdGUtPmV4ZWN1dGVDb3JlQ29tbWFuZEJ5TmFtZShuYW1lQlNUUiwgdmFs
dWVCU1RSKTsKLQotICAgIFN5c0ZyZWVTdHJpbmcobmFtZUJTVFIpOwotICAgIFN5c0ZyZWVTdHJp
bmcodmFsdWVCU1RSKTsKLX0KLQotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZmluZFN0cmlu
ZyhKU0NvbnRleHRSZWYgLyogY29udGV4dCAqLywgSlNTdHJpbmdSZWYgLyogdGFyZ2V0ICovLCBK
U09iamVjdFJlZiAvKiBvcHRpb25zQXJyYXkgKi8pCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVu
dAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
Q2FjaGVNb2RlbChpbnQpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudAotfQotCi1ib29sIExh
eW91dFRlc3RDb250cm9sbGVyOjppc0NvbW1hbmRFbmFibGVkKEpTU3RyaW5nUmVmIC8qbmFtZSov
KQotewotICAgIHByaW50ZigiRVJST1I6IExheW91dFRlc3RDb250cm9sbGVyOjppc0NvbW1hbmRF
bmFibGVkKCkgbm90IGltcGxlbWVudGVkXG4iKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQWxsQXBwbGljYXRpb25DYWNoZXMoKQotewot
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gc3VwcG9ydCBhcHBsaWNhdGlvbiBjYWNoZSBxdW90
YXMuCi19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQXBwbGljYXRpb25DYWNo
ZUZvck9yaWdpbihKU1N0cmluZ1JlZiBvcmlnaW4pCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0byBzdXBwb3J0IGRlbGV0aW5nIGFsbCBhcHBsaWNhdGlvbiBjYWNoZSBmb3IgYW4gb3JpZ2lu
LgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBcHBsaWNhdGlvbkNhY2hlT3Jp
Z2luUXVvdGEodW5zaWduZWQgbG9uZyBsb25nIHF1b3RhKQotewotICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgdG8gc3VwcG9ydCBhcHBsaWNhdGlvbiBjYWNoZSBxdW90YXMuCi19Ci0KLUpTVmFsdWVS
ZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoQXBwbGljYXRpb25DYWNoZShKU0Nv
bnRleHRSZWYgY29udGV4dCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIGdldCBvcmln
aW5zIHRoYXQgaGF2ZSBhcHBsaWNhdGlvbiBjYWNoZXMuCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1sb25nIGxvbmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmFwcGxpY2F0aW9uQ2FjaGVEaXNrVXNhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgbmFtZSkKLXsK
LSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIGdldCBkaXNrIHVzYWdlIGJ5IGFsbCBhcHBsaWNh
dGlvbiBjYWNoZXMgZm9yIGFuIG9yaWdpbi4KLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxEYXRhYmFzZXMoKQotewotICAgIENPTVB0cjxJV2Vi
RGF0YWJhc2VNYW5hZ2VyPiBkYXRhYmFzZU1hbmFnZXI7Ci0gICAgQ09NUHRyPElXZWJEYXRhYmFz
ZU1hbmFnZXI+IHRtcERhdGFiYXNlTWFuYWdlcjsKLSAgICBpZiAoRkFJTEVEKFdlYktpdENyZWF0
ZUluc3RhbmNlKENMU0lEX1dlYkRhdGFiYXNlTWFuYWdlciwgMCwgSUlEX0lXZWJEYXRhYmFzZU1h
bmFnZXIsICh2b2lkKiopJnRtcERhdGFiYXNlTWFuYWdlcikpKQotICAgICAgICByZXR1cm47Ci0g
ICAgaWYgKEZBSUxFRCh0bXBEYXRhYmFzZU1hbmFnZXItPnNoYXJlZFdlYkRhdGFiYXNlTWFuYWdl
cigmZGF0YWJhc2VNYW5hZ2VyKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRhdGFiYXNlTWFu
YWdlci0+ZGVsZXRlQWxsRGF0YWJhc2VzKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6Om92ZXJyaWRlUHJlZmVyZW5jZShKU1N0cmluZ1JlZiBrZXksIEpTU3RyaW5nUmVmIHZhbHVl
KQotewotICAgIENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsKLSAgICBpZiAoRkFJTEVEKGZyYW1l
LT53ZWJWaWV3KCZ3ZWJWaWV3KSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENPTVB0cjxJV2Vi
UHJlZmVyZW5jZXM+IHByZWZlcmVuY2VzOwotICAgIGlmIChGQUlMRUQod2ViVmlldy0+cHJlZmVy
ZW5jZXMoJnByZWZlcmVuY2VzKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENPTVB0cjxJV2Vi
UHJlZmVyZW5jZXNQcml2YXRlPiBwcmVmc1ByaXZhdGUoUXVlcnksIHByZWZlcmVuY2VzKTsKLSAg
ICBpZiAoIXByZWZzUHJpdmF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQlNUUiBrZXlCU1RS
ID0gSlNTdHJpbmdDb3B5QlNUUihrZXkpOwotICAgIEJTVFIgdmFsdWVCU1RSID0gSlNTdHJpbmdD
b3B5QlNUUih2YWx1ZSk7Ci0gICAgcHJlZnNQcml2YXRlLT5zZXRQcmVmZXJlbmNlRm9yVGVzdChr
ZXlCU1RSLCB2YWx1ZUJTVFIpOwotICAgIFN5c0ZyZWVTdHJpbmcoa2V5QlNUUik7Ci0gICAgU3lz
RnJlZVN0cmluZyh2YWx1ZUJTVFIpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXREYXRhYmFzZVF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSkKLXsKLSAgICBDT01QdHI8
SVdlYkRhdGFiYXNlTWFuYWdlcj4gZGF0YWJhc2VNYW5hZ2VyOwotICAgIENPTVB0cjxJV2ViRGF0
YWJhc2VNYW5hZ2VyPiB0bXBEYXRhYmFzZU1hbmFnZXI7Ci0KLSAgICBpZiAoRkFJTEVEKFdlYktp
dENyZWF0ZUluc3RhbmNlKENMU0lEX1dlYkRhdGFiYXNlTWFuYWdlciwgMCwgSUlEX0lXZWJEYXRh
YmFzZU1hbmFnZXIsICh2b2lkKiopJnRtcERhdGFiYXNlTWFuYWdlcikpKQotICAgICAgICByZXR1
cm47Ci0gICAgaWYgKEZBSUxFRCh0bXBEYXRhYmFzZU1hbmFnZXItPnNoYXJlZFdlYkRhdGFiYXNl
TWFuYWdlcigmZGF0YWJhc2VNYW5hZ2VyKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRhdGFi
YXNlTWFuYWdlci0+c2V0UXVvdGEoVEVYVCgiZmlsZTovLy8iKSwgcXVvdGEpOwotfQotCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpnb0JhY2soKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQgdG8gZW5hYmxlIGxvYWRlci9uYXZpZ2F0aW9uLXdoaWxlLWRlZmVycmluZy1sb2Fkcy5odG1s
Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERlZmVyc0xvYWRpbmcoYm9vbCkK
LXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRvIGVuYWJsZSBsb2FkZXIvbmF2aWdhdGlvbi13
aGlsZS1kZWZlcnJpbmctbG9hZHMuaHRtbAotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGJvb2wgZm9yYmlkZGVu
LCBKU1N0cmluZ1JlZiBzY2hlbWUpCi17Ci0gICAgQ09NUHRyPElXZWJWaWV3UHJpdmF0ZT4gd2Vi
VmlldzsKLSAgICBpZiAoRkFJTEVEKFdlYktpdENyZWF0ZUluc3RhbmNlKF9fdXVpZG9mKFdlYlZp
ZXcpLCAwLCBfX3V1aWRvZih3ZWJWaWV3KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZ3ZWJW
aWV3KSkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBCU1RSIHNjaGVtZUJTVFIgPSBKU1N0cmlu
Z0NvcHlCU1RSKHNjaGVtZSk7Ci0gICAgd2ViVmlldy0+c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJp
ZGRlbkZvclVSTFNjaGVtZShmb3JiaWRkZW4sIHNjaGVtZUJTVFIpOwotICAgIFN5c0ZyZWVTdHJp
bmcoc2NoZW1lQlNUUik7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFwcENh
Y2hlTWF4aW11bVNpemUodW5zaWduZWQgbG9uZyBsb25nIHNpemUpCi17Ci0gICAgcHJpbnRmKCJF
UlJPUjogTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFwcENhY2hlTWF4aW11bVNpemUoKSBub3Qg
aW1wbGVtZW50ZWRcbiIpOwotfQotCi1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZUFu
aW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBhbmltYXRpb25OYW1lLCBk
b3VibGUgdGltZSwgSlNTdHJpbmdSZWYgZWxlbWVudElkKQotewotICAgIENPTVB0cjxJRE9NRG9j
dW1lbnQ+IGRvY3VtZW50OwotICAgIGlmIChGQUlMRUQoZnJhbWUtPkRPTURvY3VtZW50KCZkb2N1
bWVudCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBCU1RSIGlkQlNUUiA9IEpTU3Ry
aW5nQ29weUJTVFIoZWxlbWVudElkKTsKLSAgICBDT01QdHI8SURPTUVsZW1lbnQ+IGVsZW1lbnQ7
Ci0gICAgSFJFU1VMVCBociA9IGRvY3VtZW50LT5nZXRFbGVtZW50QnlJZChpZEJTVFIsICZlbGVt
ZW50KTsKLSAgICBTeXNGcmVlU3RyaW5nKGlkQlNUUik7Ci0gICAgaWYgKEZBSUxFRChocikpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENPTVB0cjxJV2ViRnJhbWVQcml2YXRlPiBmcmFt
ZVByaXZhdGUoUXVlcnksIGZyYW1lKTsKLSAgICBpZiAoIWZyYW1lUHJpdmF0ZSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgQlNUUiBuYW1lQlNUUiA9IEpTU3RyaW5nQ29weUJTVFIoYW5p
bWF0aW9uTmFtZSk7Ci0gICAgQk9PTCB3YXNSdW5uaW5nID0gRkFMU0U7Ci0gICAgaHIgPSBmcmFt
ZVByaXZhdGUtPnBhdXNlQW5pbWF0aW9uKG5hbWVCU1RSLCBlbGVtZW50LmdldCgpLCB0aW1lLCAm
d2FzUnVubmluZyk7Ci0gICAgU3lzRnJlZVN0cmluZyhuYW1lQlNUUik7Ci0KLSAgICByZXR1cm4g
U1VDQ0VFREVEKGhyKSAmJiB3YXNSdW5uaW5nOwotfQotCi1ib29sIExheW91dFRlc3RDb250cm9s
bGVyOjpwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgcHJv
cGVydHlOYW1lLCBkb3VibGUgdGltZSwgSlNTdHJpbmdSZWYgZWxlbWVudElkKQotewotICAgIENP
TVB0cjxJRE9NRG9jdW1lbnQ+IGRvY3VtZW50OwotICAgIGlmIChGQUlMRUQoZnJhbWUtPkRPTURv
Y3VtZW50KCZkb2N1bWVudCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBCU1RSIGlk
QlNUUiA9IEpTU3RyaW5nQ29weUJTVFIoZWxlbWVudElkKTsKLSAgICBDT01QdHI8SURPTUVsZW1l
bnQ+IGVsZW1lbnQ7Ci0gICAgSFJFU1VMVCBociA9IGRvY3VtZW50LT5nZXRFbGVtZW50QnlJZChp
ZEJTVFIsICZlbGVtZW50KTsKLSAgICBTeXNGcmVlU3RyaW5nKGlkQlNUUik7Ci0gICAgaWYgKEZB
SUxFRChocikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENPTVB0cjxJV2ViRnJhbWVQ
cml2YXRlPiBmcmFtZVByaXZhdGUoUXVlcnksIGZyYW1lKTsKLSAgICBpZiAoIWZyYW1lUHJpdmF0
ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQlNUUiBuYW1lQlNUUiA9IEpTU3RyaW5n
Q29weUJTVFIocHJvcGVydHlOYW1lKTsKLSAgICBCT09MIHdhc1J1bm5pbmcgPSBGQUxTRTsKLSAg
ICBociA9IGZyYW1lUHJpdmF0ZS0+cGF1c2VUcmFuc2l0aW9uKG5hbWVCU1RSLCBlbGVtZW50Lmdl
dCgpLCB0aW1lLCAmd2FzUnVubmluZyk7Ci0gICAgU3lzRnJlZVN0cmluZyhuYW1lQlNUUik7Ci0K
LSAgICByZXR1cm4gU1VDQ0VFREVEKGhyKSAmJiB3YXNSdW5uaW5nOwotfQotCi11bnNpZ25lZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkgY29uc3QKLXsK
LSAgICBDT01QdHI8SVdlYkZyYW1lUHJpdmF0ZT4gZnJhbWVQcml2YXRlKFF1ZXJ5LCBmcmFtZSk7
Ci0gICAgaWYgKCFmcmFtZVByaXZhdGUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgVUlOVCBu
dW1iZXIgPSAwOwotICAgIGlmIChGQUlMRUQoZnJhbWVQcml2YXRlLT5udW1iZXJPZkFjdGl2ZUFu
aW1hdGlvbnMoJm51bWJlcikpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBudW1i
ZXI7Ci19Ci0KLXN0YXRpYyBfYnN0cl90IGJzdHJUKEpTU3RyaW5nUmVmIGpzU3RyaW5nKQotewot
ICAgIC8vIFRoZSBmYWxzZSBwYXJhbWV0ZXIgdGVsbHMgdGhlIF9ic3RyX3QgY29uc3RydWN0b3Ig
dG8gYWRvcHQgdGhlIEJTVFIgd2UgcGFzcyBpdC4KLSAgICByZXR1cm4gX2JzdHJfdChKU1N0cmlu
Z0NvcHlCU1RSKGpzU3RyaW5nKSwgZmFsc2UpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShKU1N0cmluZ1JlZiBzb3VyY2VPcmln
aW4sIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9uUHJvdG9jb2wsIEpTU3RyaW5nUmVmIGRlc3RpbmF0
aW9uSG9zdCwgYm9vbCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucykKLXsKLSAgICBDT01QdHI8
SVdlYlZpZXdQcml2YXRlPiB3ZWJWaWV3OwotICAgIGlmIChGQUlMRUQoV2ViS2l0Q3JlYXRlSW5z
dGFuY2UoX191dWlkb2YoV2ViVmlldyksIDAsIF9fdXVpZG9mKHdlYlZpZXcpLCByZWludGVycHJl
dF9jYXN0PHZvaWQqKj4oJndlYlZpZXcpKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHdlYlZp
ZXctPmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGJzdHJUKHNvdXJjZU9yaWdpbikuR2V0
QlNUUigpLCBic3RyVChkZXN0aW5hdGlvblByb3RvY29sKS5HZXRCU1RSKCksIGJzdHJUKGRlc3Rp
bmF0aW9uSG9zdCkuR2V0QlNUUigpLCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyk7Ci19Ci0K
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVu
dHJ5KEpTU3RyaW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Qcm90
b2NvbCwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRpb25T
dWJkb21haW5zKQotewotICAgIENPTVB0cjxJV2ViVmlld1ByaXZhdGU+IHdlYlZpZXc7Ci0gICAg
aWYgKEZBSUxFRChXZWJLaXRDcmVhdGVJbnN0YW5jZShfX3V1aWRvZihXZWJWaWV3KSwgMCwgX191
dWlkb2Yod2ViVmlldyksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmd2ViVmlldykpKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgd2ViVmlldy0+cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0
RW50cnkoYnN0clQoc291cmNlT3JpZ2luKS5HZXRCU1RSKCksIGJzdHJUKGRlc3RpbmF0aW9uUHJv
dG9jb2wpLkdldEJTVFIoKSwgYnN0clQoZGVzdGluYXRpb25Ib3N0KS5HZXRCU1RSKCksIGFsbG93
RGVzdGluYXRpb25TdWJkb21haW5zKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0U2Nyb2xsYmFyUG9saWN5KEpTU3RyaW5nUmVmIG9yaWVudGF0aW9uLCBKU1N0cmluZ1JlZiBw
b2xpY3kpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjphZGRVc2VyU2NyaXB0KEpTU3RyaW5nUmVmIHNvdXJjZSwgYm9vbCBydW5BdFN0
YXJ0LCBib29sIGFsbEZyYW1lcykKLXsKLSAgICBDT01QdHI8SVdlYlZpZXdQcml2YXRlPiB3ZWJW
aWV3OwotICAgIGlmIChGQUlMRUQoV2ViS2l0Q3JlYXRlSW5zdGFuY2UoX191dWlkb2YoV2ViVmll
dyksIDAsIF9fdXVpZG9mKHdlYlZpZXcpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJndlYlZp
ZXcpKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENPTVB0cjxJV2ViU2NyaXB0V29ybGQ+IHdv
cmxkOwotICAgIGlmIChGQUlMRUQoV2ViS2l0Q3JlYXRlSW5zdGFuY2UoX191dWlkb2YoV2ViU2Ny
aXB0V29ybGQpLCAwLCBfX3V1aWRvZih3b3JsZCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigm
d29ybGQpKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHdlYlZpZXctPmFkZFVzZXJTY3JpcHRU
b0dyb3VwKF9ic3RyX3QoTCJvcmcud2Via2l0LkR1bXBSZW5kZXJUcmVlIikuR2V0QlNUUigpLCB3
b3JsZC5nZXQoKSwgYnN0clQoc291cmNlKS5HZXRCU1RSKCksIDAsIDAsIDAsIDAsIDAsIHJ1bkF0
U3RhcnQgPyBXZWJJbmplY3RBdERvY3VtZW50U3RhcnQgOiBXZWJJbmplY3RBdERvY3VtZW50RW5k
KTsKLX0KLQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldChK
U1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgYWxsRnJhbWVzKQotewotICAgIENPTVB0cjxJV2ViVmll
d1ByaXZhdGU+IHdlYlZpZXc7Ci0gICAgaWYgKEZBSUxFRChXZWJLaXRDcmVhdGVJbnN0YW5jZShf
X3V1aWRvZihXZWJWaWV3KSwgMCwgX191dWlkb2Yod2ViVmlldyksIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCoqPigmd2ViVmlldykpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ09NUHRyPElXZWJT
Y3JpcHRXb3JsZD4gd29ybGQ7Ci0gICAgaWYgKEZBSUxFRChXZWJLaXRDcmVhdGVJbnN0YW5jZShf
X3V1aWRvZihXZWJTY3JpcHRXb3JsZCksIDAsIF9fdXVpZG9mKHdvcmxkKSwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKio+KCZ3b3JsZCkpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgd2ViVmlldy0+
YWRkVXNlclN0eWxlU2hlZXRUb0dyb3VwKF9ic3RyX3QoTCJvcmcud2Via2l0LkR1bXBSZW5kZXJU
cmVlIikuR2V0QlNUUigpLCB3b3JsZC5nZXQoKSwgYnN0clQoc291cmNlKS5HZXRCU1RSKCksIDAs
IDAsIDAsIDAsIDApOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREZXZlbG9w
ZXJFeHRyYXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBDT01QdHI8SVdlYlZpZXc+IHdl
YlZpZXc7Ci0gICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmlldykpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBDT01QdHI8SVdlYlByZWZlcmVuY2VzPiBwcmVmZXJlbmNlczsKLSAg
ICBpZiAoRkFJTEVEKHdlYlZpZXctPnByZWZlcmVuY2VzKCZwcmVmZXJlbmNlcykpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBDT01QdHI8SVdlYlByZWZlcmVuY2VzUHJpdmF0ZT4gcHJlZnNQcml2
YXRlKFF1ZXJ5LCBwcmVmZXJlbmNlcyk7Ci0gICAgaWYgKCFwcmVmc1ByaXZhdGUpCi0gICAgICAg
IHJldHVybjsKLQotICAgIHByZWZzUHJpdmF0ZS0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChl
bmFibGVkKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXN5bmNocm9ub3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRo
aXMuCi19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNob3dXZWJJbnNwZWN0b3IoKQot
ewotICAgIENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsKLSAgICBpZiAoRkFJTEVEKGZyYW1lLT53
ZWJWaWV3KCZ3ZWJWaWV3KSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENPTVB0cjxJV2ViVmll
d1ByaXZhdGU+IHZpZXdQcml2YXRlKFF1ZXJ5LCB3ZWJWaWV3KTsKLSAgICBpZiAoIXZpZXdQcml2
YXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDT01QdHI8SVdlYkluc3BlY3Rvcj4gaW5zcGVj
dG9yOwotICAgIGlmIChTVUNDRUVERUQodmlld1ByaXZhdGUtPmluc3BlY3RvcigmaW5zcGVjdG9y
KSkpCi0gICAgICAgIGluc3BlY3Rvci0+c2hvdygpOwotfQotCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpjbG9zZVdlYkluc3BlY3RvcigpCi17Ci0gICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJW
aWV3OwotICAgIGlmIChGQUlMRUQoZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgQ09NUHRyPElXZWJWaWV3UHJpdmF0ZT4gdmlld1ByaXZhdGUoUXVlcnks
IHdlYlZpZXcpOwotICAgIGlmICghdmlld1ByaXZhdGUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IENPTVB0cjxJV2ViSW5zcGVjdG9yPiBpbnNwZWN0b3I7Ci0gICAgaWYgKEZBSUxFRCh2aWV3UHJp
dmF0ZS0+aW5zcGVjdG9yKCZpbnNwZWN0b3IpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW5z
cGVjdG9yLT5jbG9zZSgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0
ZUluV2ViSW5zcGVjdG9yKGxvbmcgY2FsbElkLCBKU1N0cmluZ1JlZiBzY3JpcHQpCi17Ci0gICAg
Q09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OwotICAgIGlmIChGQUlMRUQoZnJhbWUtPndlYlZpZXco
JndlYlZpZXcpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ09NUHRyPElXZWJWaWV3UHJpdmF0
ZT4gdmlld1ByaXZhdGUoUXVlcnksIHdlYlZpZXcpOwotICAgIGlmICghdmlld1ByaXZhdGUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIENPTVB0cjxJV2ViSW5zcGVjdG9yPiBpbnNwZWN0b3I7Ci0g
ICAgaWYgKEZBSUxFRCh2aWV3UHJpdmF0ZS0+aW5zcGVjdG9yKCZpbnNwZWN0b3IpKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgQ09NUHRyPElXZWJJbnNwZWN0b3JQcml2YXRlPiBpbnNwZWN0b3JQ
cml2YXRlKFF1ZXJ5LCBpbnNwZWN0b3IpOwotICAgIGlmICghaW5zcGVjdG9yUHJpdmF0ZSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaW5zcGVjdG9yUHJpdmF0ZS0+ZXZhbHVhdGVJbkZyb250ZW5k
KGNhbGxJZCwgYnN0clQoc2NyaXB0KS5HZXRCU1RSKCkpOwotfQotCi10eXBlZGVmIEhhc2hNYXA8
dW5zaWduZWQsIENPTVB0cjxJV2ViU2NyaXB0V29ybGQ+ID4gV29ybGRNYXA7Ci1zdGF0aWMgV29y
bGRNYXAmIHdvcmxkTWFwKCkKLXsKLSAgICBzdGF0aWMgV29ybGRNYXAmIG1hcCA9ICpuZXcgV29y
bGRNYXA7Ci0gICAgcmV0dXJuIG1hcDsKLX0KLQotdW5zaWduZWQgd29ybGRJREZvcldvcmxkKElX
ZWJTY3JpcHRXb3JsZCogd29ybGQpCi17Ci0gICAgV29ybGRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IHdvcmxkTWFwKCkuZW5kKCk7Ci0gICAgZm9yIChXb3JsZE1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSB3b3JsZE1hcCgpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAo
aXQtPnNlY29uZCA9PSB3b3JsZCkKLSAgICAgICAgICAgIHJldHVybiBpdC0+Zmlyc3Q7Ci0gICAg
fQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1
YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUodW5zaWduZWQgd29ybGRJRCwg
SlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCi17Ci0gICAgLy8g
RklYTUU6IEltcGxlbWVudCB0aGlzLgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpl
dmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJl
ZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkKLXsKLSAgICBDT01QdHI8SVdlYkZy
YW1lUHJpdmF0ZT4gZnJhbWVQcml2YXRlKFF1ZXJ5LCBmcmFtZSk7Ci0gICAgaWYgKCFmcmFtZVBy
aXZhdGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEEgd29ybGRJRCBvZiAwIGFsd2F5cyBj
b3JyZXNwb25kcyB0byBhIG5ldyB3b3JsZC4gQW55IG90aGVyIHdvcmxkSUQgY29ycmVzcG9uZHMg
dG8gYSB3b3JsZAotICAgIC8vIHRoYXQgaXMgY3JlYXRlZCBvbmNlIGFuZCBjYWNoZWQgZm9yZXZl
ci4KLSAgICBDT01QdHI8SVdlYlNjcmlwdFdvcmxkPiB3b3JsZDsKLSAgICBpZiAoIXdvcmxkSUQp
IHsKLSAgICAgICAgaWYgKEZBSUxFRChXZWJLaXRDcmVhdGVJbnN0YW5jZShfX3V1aWRvZihXZWJT
Y3JpcHRXb3JsZCksIDAsIF9fdXVpZG9mKHdvcmxkKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+
KCZ3b3JsZCkpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgewotICAgICAgICBD
T01QdHI8SVdlYlNjcmlwdFdvcmxkPiYgd29ybGRTbG90ID0gd29ybGRNYXAoKS5hZGQod29ybGRJ
RCwgMCkuaXRlcmF0b3ItPnNlY29uZDsKLSAgICAgICAgaWYgKCF3b3JsZFNsb3QgJiYgRkFJTEVE
KFdlYktpdENyZWF0ZUluc3RhbmNlKF9fdXVpZG9mKFdlYlNjcmlwdFdvcmxkKSwgMCwgX191dWlk
b2Yod29ybGRTbG90KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZ3b3JsZFNsb3QpKSkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHdvcmxkID0gd29ybGRTbG90OwotICAgIH0KLQot
ICAgIEJTVFIgcmVzdWx0OwotICAgIGlmIChGQUlMRUQoZnJhbWVQcml2YXRlLT5zdHJpbmdCeUV2
YWx1YXRpbmdKYXZhU2NyaXB0SW5TY3JpcHRXb3JsZCh3b3JsZC5nZXQoKSwgZ2xvYmFsT2JqZWN0
LCBic3RyVChzY3JpcHQpLkdldEJTVFIoKSwgJnJlc3VsdCkpKQotICAgICAgICByZXR1cm47Ci0g
ICAgU3lzRnJlZVN0cmluZyhyZXN1bHQpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpyZW1vdmVBbGxWaXNpdGVkTGlua3MoKQotewotICAgIENPTVB0cjxJV2ViSGlzdG9yeT4gaGlz
dG9yeTsKLSAgICBpZiAoRkFJTEVEKFdlYktpdENyZWF0ZUluc3RhbmNlKENMU0lEX1dlYkhpc3Rv
cnksIDAsIF9fdXVpZG9mKGhpc3RvcnkpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmhpc3Rv
cnkpKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENPTVB0cjxJV2ViSGlzdG9yeT4gc2hhcmVk
SGlzdG9yeTsKLSAgICBpZiAoRkFJTEVEKGhpc3RvcnktPm9wdGlvbmFsU2hhcmVkSGlzdG9yeSgm
c2hhcmVkSGlzdG9yeSkpIHx8ICFzaGFyZWRIaXN0b3J5KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBDT01QdHI8SVdlYkhpc3RvcnlQcml2YXRlPiBzaGFyZWRIaXN0b3J5UHJpdmF0ZTsKLSAgICBp
ZiAoRkFJTEVEKHNoYXJlZEhpc3RvcnktPlF1ZXJ5SW50ZXJmYWNlKCZzaGFyZWRIaXN0b3J5UHJp
dmF0ZSkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzaGFyZWRIaXN0b3J5UHJpdmF0ZS0+cmVt
b3ZlQWxsVmlzaXRlZExpbmtzKCk7Ci19Ci0KLWludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVt
YmVyT2ZQYWdlcyhmbG9hdCBwYWdlV2lkdGhJblBpeGVscywgZmxvYXQgcGFnZUhlaWdodEluUGl4
ZWxzKQotewotICAgIENPTVB0cjxJV2ViRnJhbWVQcml2YXRlPiBmcmFtZVByaXZhdGUoUXVlcnks
IGZyYW1lKTsKLSAgICBpZiAoIWZyYW1lUHJpdmF0ZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICBpbnQgcGFnZU51bWJlciA9IC0xOwotICAgIGlmIChGQUlMRUQoZnJhbWVQcml2YXRlLT5udW1i
ZXJPZlBhZ2VzKHBhZ2VXaWR0aEluUGl4ZWxzLCBwYWdlSGVpZ2h0SW5QaXhlbHMsICZwYWdlTnVt
YmVyKSkpCi0gICAgICAgIHBhZ2VOdW1iZXIgPSAtMTsKLSAgICByZXR1cm4gcGFnZU51bWJlcjsK
LX0KLQotSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpwYWdl
UHJvcGVydHkoY29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBpbnQgcGFnZU51bWJlcikgY29uc3QK
LXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi0gICAgcmV0dXJuIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPigpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphcGlUZXN0
TmV3V2luZG93RGF0YUxvYWRCYXNlVVJMKEpTU3RyaW5nUmVmIHV0ZjhEYXRhLCBKU1N0cmluZ1Jl
ZiBiYXNlVVJMKQotewotCi19Ci0KLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMoaW50IHBhZ2VOdW1iZXIsIGlu
dCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG1hcmdpblRvcCwgaW50IG1hcmdpblJpZ2h0LCBpbnQg
bWFyZ2luQm90dG9tLCBpbnQgbWFyZ2luTGVmdCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogaW1w
bGVtZW50Ci0gICAgcmV0dXJuIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPigpOwotfQotCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjphcGlUZXN0R29Ub0N1cnJlbnRCYWNrRm9yd2FyZEl0ZW0o
KQotewotICAgIENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsKLSAgICBpZiAoRkFJTEVEKGZyYW1l
LT53ZWJWaWV3KCZ3ZWJWaWV3KSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENPTVB0cjxJV2Vi
QmFja0ZvcndhcmRMaXN0PiBiYWNrRm9yd2FyZExpc3Q7Ci0gICAgaWYgKEZBSUxFRCh3ZWJWaWV3
LT5iYWNrRm9yd2FyZExpc3QoJmJhY2tGb3J3YXJkTGlzdCkpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBDT01QdHI8SVdlYkhpc3RvcnlJdGVtPiBpdGVtOwotICAgIGlmIChGQUlMRUQoYmFja0Zv
cndhcmRMaXN0LT5jdXJyZW50SXRlbSgmaXRlbSkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBC
T09MIHN1Y2Nlc3M7Ci0gICAgd2ViVmlldy0+Z29Ub0JhY2tGb3J3YXJkSXRlbShpdGVtLmdldCgp
LCAmc3VjY2Vzcyk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdlYlZpZXdF
ZGl0YWJsZShib29sKQotewotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphdXRoZW50
aWNhdGVTZXNzaW9uKEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYpCi17Ci19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFib3J0TW9kYWwoKQotewotfQotCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTZXJpYWxpemVIVFRQTG9hZHMoYm9vbCkKLXsKLSAg
ICAvLyBGSVhNRTogSW1wbGVtZW50LgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
eW5jTG9jYWxTdG9yYWdlKCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50LgotfQotCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25z
KHVuc2lnbmVkIG51bWJlcikKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50LgotfQotCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UoKQotewotICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQuCi19Ci0KLUpTVmFsdWVSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6
Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKEpTQ29udGV4dFJlZiBjb250ZXh0KQotewotICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQuCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOwotfQotCi1sb25nIGxvbmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmxvY2FsU3RvcmFnZURp
c2tVc2FnZUZvck9yaWdpbihKU1N0cmluZ1JlZiBvcmlnaW5JZGVudGlmaWVyKQotewotICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdG8gc3VwcG9ydCBnZXR0aW5nIGxvY2FsIHN0b3JhZ2UgZGlzayB1
c2FnZSBmb3IgYW4gb3JpZ2luLgotICAgIHJldHVybiAwOwotfQotCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgVVJMKQot
ewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCi19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldE1pbmltdW1UaW1lckludGVydmFsKGRvdWJsZSBtaW5pbXVtVGltZXJJbnRlcnZhbCkK
LXsKLSAgICBDT01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7Ci0gICAgaWYgKEZBSUxFRChmcmFtZS0+
d2ViVmlldygmd2ViVmlldykpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDT01QdHI8SVdlYlZp
ZXdQcml2YXRlPiB2aWV3UHJpdmF0ZShRdWVyeSwgd2ViVmlldyk7Ci0gICAgaWYgKCF2aWV3UHJp
dmF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdmlld1ByaXZhdGUtPnNldE1pbmltdW1UaW1l
ckludGVydmFsKG1pbmltdW1UaW1lckludGVydmFsKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0VGV4dERpcmVjdGlvbihKU1N0cmluZ1JlZiBkaXJlY3Rpb24pCi17Ci0gICAg
Q09NUHRyPElXZWJGcmFtZVByaXZhdGU+IGZyYW1lUHJpdmF0ZShRdWVyeSwgZnJhbWUpOwotICAg
IGlmICghZnJhbWVQcml2YXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmcmFtZVByaXZhdGUt
PnNldFRleHREaXJlY3Rpb24oYnN0clQoZGlyZWN0aW9uKS5HZXRCU1RSKCkpOwotfQotCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjphZGRDaHJvbWVJbnB1dEZpZWxkKCkKLXsKLX0KLQotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCgpCi17Ci19Ci0K
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmZvY3VzV2ViVmlldygpCi17Ci19Ci0KLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEJhY2tpbmdTY2FsZUZhY3Rvcihkb3VibGUpCi17Ci19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNpbXVsYXRlRGVza3RvcE5vdGlmaWNhdGlv
bkNsaWNrKEpTU3RyaW5nUmVmIHRpdGxlKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCi19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlc2V0UGFnZVZpc2liaWxpdHkoKQotewot
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0UGFnZVZpc2liaWxpdHkoY29uc3QgY2hhciopCi17Ci0gICAgLy8gRklYTUU6IElt
cGxlbWVudCB0aGlzLgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBdXRvbWF0
aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZChib29sKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dGhpcy4KLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2VuZFdlYkludGVudFJlc3Bv
bnNlKEpTU3RyaW5nUmVmKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KLX0KLQot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsaXZlcldlYkludGVudChKU1N0cmluZ1JlZiwg
SlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhp
cy4KLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U3RvcmFnZURhdGFiYXNlSWRs
ZUludGVydmFsKGRvdWJsZSkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi19Cklu
ZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vUG9saWN5RGVsZWdhdGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9Qb2xpY3lEZWxlZ2F0ZS5jcHAJKHJldmlz
aW9uIDEyNTMzNSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9Qb2xpY3lEZWxlZ2F0ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJQb2xpY3lEZWxl
Z2F0ZS5oIgogCiAjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWUuaCIKLSNpbmNsdWRlICJMYXlvdXRU
ZXN0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlRlc3RSdW5uZXIuaCIKICNpbmNsdWRlIDxzdHJp
bmc+CiAKIHVzaW5nIHN0ZDo6d3N0cmluZzsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dp
bi9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRl
clRyZWUvd2luL1Jlc291cmNlTG9hZERlbGVnYXRlLmNwcAkocmV2aXNpb24gMTI1MzM1KQorKysg
VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Jlc291cmNlTG9hZERlbGVnYXRlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgIlJlc291cmNlTG9hZERlbGVnYXRl
LmgiCiAKICNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgotI2luY2x1ZGUgIkxheW91dFRlc3RD
b250cm9sbGVyLmgiCisjaW5jbHVkZSAiVGVzdFJ1bm5lci5oIgogI2luY2x1ZGUgPFdlYktpdC9X
ZWJLaXRDT01BUEkuaD4KICNpbmNsdWRlIDxjb211dGlsLmg+CiAjaW5jbHVkZSA8c3N0cmVhbT4K
SW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9UZXN0UnVubmVyV2luLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vVGVzdFJ1bm5lcldpbi5jcHAJKHJldmlz
aW9uIDEyNTMzNSkJKGZyb20gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250
cm9sbGVyV2luLmNwcDoxMjUzMzUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vVGVzdFJ1
bm5lcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDcwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTGF5b3V0VGVzdENv
bnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCisjaW5jbHVkZSAiRWRp
dGluZ0RlbGVnYXRlLmgiCisjaW5jbHVkZSAiUG9saWN5RGVsZWdhdGUuaCIKKyNpbmNsdWRlICJX
b3JrUXVldWUuaCIKKyNpbmNsdWRlICJXb3JrUXVldWVJdGVtLmgiCisjaW5jbHVkZSA8Q29yZUZv
dW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1Jl
dGFpblB0ci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmQlNUUi5oPgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9DT01QdHIuaD4KKyNpbmNsdWRlIDxXZWJLaXQvV2ViS2l0Lmg+CisjaW5jbHVkZSA8V2Vi
S2l0L1dlYktpdENPTUFQSS5oPgorI2luY2x1ZGUgPGNvbXV0aWwuaD4KKyNpbmNsdWRlIDxzaGx3
YXBpLmg+CisjaW5jbHVkZSA8c2hsZ3VpZC5oPgorI2luY2x1ZGUgPHNob2JqaWRsLmg+CisjaW5j
bHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKwordXNpbmcgc3RkOjpzdHJpbmc7Cit1c2luZyBzdGQ6OndzdHJpbmc7CisKK3N0
YXRpYyBib29sIHJlc29sdmVDeWd3aW5QYXRoKGNvbnN0IHdzdHJpbmcmIGN5Z3dpblBhdGgsIHdz
dHJpbmcmIHdpbmRvd3NQYXRoKTsKKworTGF5b3V0VGVzdENvbnRyb2xsZXI6On5MYXlvdXRUZXN0
Q29udHJvbGxlcigpCit7CisgICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OworICAgIGlmIChG
QUlMRUQoZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gcmVzZXQgd2Vidmlldy1yZWxhdGVkIHN0YXRlcyBiYWNrIHRvIGRlZmF1bHQgdmFsdWVzIGlu
IHByZXBhcmF0aW9uIGZvciBuZXh0IHRlc3QKKworICAgIENPTVB0cjxJV2ViVmlld1ByaXZhdGU+
IHZpZXdQcml2YXRlOworICAgIGlmIChTVUNDRUVERUQod2ViVmlldy0+UXVlcnlJbnRlcmZhY2Uo
JnZpZXdQcml2YXRlKSkpCisgICAgICAgIHZpZXdQcml2YXRlLT5zZXRUYWJLZXlDeWNsZXNUaHJv
dWdoRWxlbWVudHMoVFJVRSk7CisKKyAgICBDT01QdHI8SVdlYlZpZXdFZGl0aW5nPiB2aWV3RWRp
dGluZzsKKyAgICBpZiAoRkFJTEVEKHdlYlZpZXctPlF1ZXJ5SW50ZXJmYWNlKCZ2aWV3RWRpdGlu
ZykpKQorICAgICAgICByZXR1cm47CisgICAgQ09NUHRyPElXZWJFZGl0aW5nRGVsZWdhdGU+IGRl
bGVnYXRlOworICAgIGlmIChGQUlMRUQodmlld0VkaXRpbmctPmVkaXRpbmdEZWxlZ2F0ZSgmZGVs
ZWdhdGUpKSkKKyAgICAgICAgcmV0dXJuOworICAgIENPTVB0cjxFZGl0aW5nRGVsZWdhdGU+IGVk
aXRpbmdEZWxlZ2F0ZShRdWVyeSwgdmlld0VkaXRpbmcuZ2V0KCkpOworICAgIGlmIChlZGl0aW5n
RGVsZWdhdGUpCisgICAgICAgIGVkaXRpbmdEZWxlZ2F0ZS0+c2V0QWNjZXB0c0VkaXRpbmcoVFJV
RSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZERpc2FsbG93ZWRVUkwoSlNT
dHJpbmdSZWYgdXJsKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQhCit9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQmFja0ZvcndhcmRMaXN0KCkKK3sKKyAgICBDT01QdHI8
SVdlYlZpZXc+IHdlYlZpZXc7CisgICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmll
dykpKQorICAgICAgICByZXR1cm47CisKKyAgICBDT01QdHI8SVdlYkJhY2tGb3J3YXJkTGlzdD4g
YmFja0ZvcndhcmRMaXN0OworICAgIGlmIChGQUlMRUQod2ViVmlldy0+YmFja0ZvcndhcmRMaXN0
KCZiYWNrRm9yd2FyZExpc3QpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ09NUHRyPElXZWJI
aXN0b3J5SXRlbT4gaXRlbTsKKyAgICBpZiAoRkFJTEVEKGJhY2tGb3J3YXJkTGlzdC0+Y3VycmVu
dEl0ZW0oJml0ZW0pKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2UgY2xlYXIgdGhlIGhp
c3RvcnkgYnkgc2V0dGluZyB0aGUgYmFjay9mb3J3YXJkIGxpc3QncyBjYXBhY2l0eSB0byAwCisg
ICAgLy8gdGhlbiByZXN0b3JpbmcgaXQgYmFjayBhbmQgYWRkaW5nIGJhY2sgdGhlIGN1cnJlbnQg
aXRlbS4KKyAgICBpbnQgY2FwYWNpdHk7CisgICAgaWYgKEZBSUxFRChiYWNrRm9yd2FyZExpc3Qt
PmNhcGFjaXR5KCZjYXBhY2l0eSkpKQorICAgICAgICByZXR1cm47CisKKyAgICBiYWNrRm9yd2Fy
ZExpc3QtPnNldENhcGFjaXR5KDApOworICAgIGJhY2tGb3J3YXJkTGlzdC0+c2V0Q2FwYWNpdHko
Y2FwYWNpdHkpOworICAgIGJhY2tGb3J3YXJkTGlzdC0+YWRkSXRlbShpdGVtLmdldCgpKTsKKyAg
ICBiYWNrRm9yd2FyZExpc3QtPmdvVG9JdGVtKGl0ZW0uZ2V0KCkpOworfQorCitib29sIExheW91
dFRlc3RDb250cm9sbGVyOjpjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcoKQoreworICAgIENPTVB0
cjxJV2ViVmlldz4gd2ViVmlldzsKKyAgICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJW
aWV3KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENPTVB0cjxJV2ViVmlld1ByaXZh
dGU+IHZpZXdQcml2YXRlOworICAgIGlmIChGQUlMRUQod2ViVmlldy0+UXVlcnlJbnRlcmZhY2Uo
JnZpZXdQcml2YXRlKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEJPT0wgcmVzdWx0
OworICAgIHZpZXdQcml2YXRlLT5zaG91bGRDbG9zZSgmcmVzdWx0KTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitKU1N0cmluZ1JlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29weURlY29kZWRI
b3N0TmFtZShKU1N0cmluZ1JlZiBuYW1lKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQhCisg
ICAgcmV0dXJuIDA7Cit9CisKK0pTU3RyaW5nUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpjb3B5
RW5jb2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVmIG5hbWUpCit7CisgICAgLy8gRklYTUU6IEltcGxl
bWVudCEKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlz
YWJsZUltYWdlTG9hZGluZygpCit7CisgICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OworICAg
IGlmIChGQUlMRUQoZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIENPTVB0cjxJV2ViUHJlZmVyZW5jZXM+IHByZWZlcmVuY2VzOworICAgIGlmIChG
QUlMRUQod2ViVmlldy0+cHJlZmVyZW5jZXMoJnByZWZlcmVuY2VzKSkpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBwcmVmZXJlbmNlcy0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KEZB
TFNFKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzcGF0Y2hQZW5kaW5nTG9h
ZFJlcXVlc3RzKCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciB0ZXN0aW5nIGZpeCBm
b3IgNjcyNzQ5NQorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNwbGF5KCkKK3sK
KyAgICBkaXNwbGF5V2ViVmlldygpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpr
ZWVwV2ViSGlzdG9yeSgpCit7CisgICAgQ09NUHRyPElXZWJIaXN0b3J5PiBoaXN0b3J5OworICAg
IGlmIChGQUlMRUQoV2ViS2l0Q3JlYXRlSW5zdGFuY2UoQ0xTSURfV2ViSGlzdG9yeSwgMCwgX191
dWlkb2YoaGlzdG9yeSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmaGlzdG9yeSkpKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgQ09NUHRyPElXZWJIaXN0b3J5PiBzaGFyZWRIaXN0b3J5Owor
ICAgIGlmIChGQUlMRUQoV2ViS2l0Q3JlYXRlSW5zdGFuY2UoQ0xTSURfV2ViSGlzdG9yeSwgMCwg
X191dWlkb2Yoc2hhcmVkSGlzdG9yeSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmc2hhcmVk
SGlzdG9yeSkpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaGlzdG9yeS0+c2V0T3B0aW9uYWxT
aGFyZWRIaXN0b3J5KHNoYXJlZEhpc3RvcnkuZ2V0KCkpOworfQorCitKU1ZhbHVlUmVmIExheW91
dFRlc3RDb250cm9sbGVyOjpjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgLy8gRklYTUU6IEltcGxl
bWVudCB0aGlzLgorICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30K
KworSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpsYXllclRy
ZWVBc1RleHQoKSBjb25zdAoreworICAgIENPTVB0cjxJV2ViRnJhbWVQcml2YXRlPiBmcmFtZVBy
aXZhdGUoUXVlcnksIGZyYW1lKTsKKyAgICBpZiAoIWZyYW1lUHJpdmF0ZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgQlNUUiB0ZXh0QlNUUiA9IDA7CisgICAgSFJFU1VMVCBociA9IGZy
YW1lUHJpdmF0ZS0+bGF5ZXJUcmVlQXNUZXh0KCZ0ZXh0QlNUUik7CisKKyAgICB3c3RyaW5nIHRl
eHQodGV4dEJTVFIsIFN5c1N0cmluZ0xlbih0ZXh0QlNUUikpOworICAgIFN5c0ZyZWVTdHJpbmco
dGV4dEJTVFIpOworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB0ZXh0VmFsdWVKUyhBZG9w
dCwgSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyh0ZXh0LmRhdGEoKSwgdGV4dC5sZW5ndGgo
KSkpOworICAgIHJldHVybiB0ZXh0VmFsdWVKUzsKK30KKworSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IExheW91dFRlc3RDb250cm9sbGVyOjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgbm9kZU9iamVjdCkgY29uc3QKK3sKKyAgICBDT01QdHI8
SVdlYlZpZXc+IHdlYlZpZXc7CisgICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmll
dykpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIENPTVB0cjxJV2ViVmlld1ByaXZhdGU+IHdl
YlZpZXdQcml2YXRlKFF1ZXJ5LCB3ZWJWaWV3KTsKKyAgICBpZiAoIXdlYlZpZXdQcml2YXRlKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIENPTVB0cjxJRE9NRWxlbWVudD4gZWxlbWVudDsKKyAg
ICBpZiAoRkFJTEVEKHdlYlZpZXdQcml2YXRlLT5lbGVtZW50RnJvbUpTKGNvbnRleHQsIG5vZGVP
YmplY3QsICZlbGVtZW50KSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgQ09NUHRyPElET01F
bGVtZW50UHJpdmF0ZT4gZWxlbWVudFByaXZhdGUoUXVlcnksIGVsZW1lbnQpOworICAgIGlmICgh
ZWxlbWVudFByaXZhdGUpCisgICAgICAgIHJldHVybiAwOworCisgICAgQlNUUiB0ZXh0QlNUUiA9
IDA7CisgICAgaWYgKEZBSUxFRChlbGVtZW50UHJpdmF0ZS0+bWFya2VyVGV4dEZvckxpc3RJdGVt
KCZ0ZXh0QlNUUikpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBtYXJrZXJUZXh0KEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhCU1RSKHRleHRCU1RS
KSk7CisgICAgU3lzRnJlZVN0cmluZyh0ZXh0QlNUUik7CisgICAgcmV0dXJuIG1hcmtlclRleHQ7
Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgp
Cit7CisgICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OworICAgIGlmIChGQUlMRUQoZnJhbWUt
PndlYlZpZXcoJndlYlZpZXcpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0V2FpdFRvRHVt
cCh0cnVlKTsKKyAgICBwb2xpY3lEZWxlZ2F0ZS0+c2V0Q29udHJvbGxlclRvTm90aWZ5RG9uZSh0
aGlzKTsKKyAgICB3ZWJWaWV3LT5zZXRQb2xpY3lEZWxlZ2F0ZShwb2xpY3lEZWxlZ2F0ZSk7Cit9
CisKK3NpemVfdCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2ViSGlzdG9yeUl0ZW1Db3VudCgpCit7
CisgICAgQ09NUHRyPElXZWJIaXN0b3J5PiBoaXN0b3J5OworICAgIGlmIChGQUlMRUQoV2ViS2l0
Q3JlYXRlSW5zdGFuY2UoQ0xTSURfV2ViSGlzdG9yeSwgMCwgX191dWlkb2YoaGlzdG9yeSksIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmaGlzdG9yeSkpKSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBDT01QdHI8SVdlYkhpc3Rvcnk+IHNoYXJlZEhpc3Rvcnk7CisgICAgaWYgKEZBSUxFRCho
aXN0b3J5LT5vcHRpb25hbFNoYXJlZEhpc3RvcnkoJnNoYXJlZEhpc3RvcnkpKSB8fCAhc2hhcmVk
SGlzdG9yeSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBDT01QdHI8SVdlYkhpc3RvcnlQcml2
YXRlPiBzaGFyZWRIaXN0b3J5UHJpdmF0ZTsKKyAgICBpZiAoRkFJTEVEKHNoYXJlZEhpc3Rvcnkt
PlF1ZXJ5SW50ZXJmYWNlKCZzaGFyZWRIaXN0b3J5UHJpdmF0ZSkpKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIGludCBjb3VudDsKKyAgICBpZiAoRkFJTEVEKHNoYXJlZEhpc3RvcnlQcml2YXRl
LT5hbGxJdGVtcygmY291bnQsIDApKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4g
Y291bnQ7Cit9CisKK3Vuc2lnbmVkIExheW91dFRlc3RDb250cm9sbGVyOjp3b3JrZXJUaHJlYWRD
b3VudCgpIGNvbnN0Cit7CisgICAgQ09NUHRyPElXZWJXb3JrZXJzUHJpdmF0ZT4gd29ya2VyczsK
KyAgICBpZiAoRkFJTEVEKFdlYktpdENyZWF0ZUluc3RhbmNlKENMU0lEX1dlYldvcmtlcnNQcml2
YXRlLCAwLCBfX3V1aWRvZih3b3JrZXJzKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZ3b3Jr
ZXJzKSkpKQorICAgICAgICByZXR1cm4gMDsKKyAgICB1bnNpZ25lZCBjb3VudDsKKyAgICBpZiAo
RkFJTEVEKHdvcmtlcnMtPndvcmtlclRocmVhZENvdW50KCZjb3VudCkpKQorICAgICAgICByZXR1
cm4gMDsKKyAgICByZXR1cm4gY291bnQ7Cit9CisKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1OYW1lKCkgY29uc3QKK3sKKyAgICBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gcGxhdGZvcm1OYW1lKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygid2luIikpOworICAgIHJldHVybiBwbGF0Zm9ybU5hbWU7Cit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6Om5vdGlmeURvbmUoKQoreworICAgIC8vIFNhbWUgYXMgb24g
bWFjLiAgVGhpcyBjYW4gYmUgc2hhcmVkLgorICAgIGlmIChtX3dhaXRUb0R1bXAgJiYgIXRvcExv
YWRpbmdGcmFtZSAmJiAhV29ya1F1ZXVlOjpzaGFyZWQoKS0+Y291bnQoKSkKKyAgICAgICAgZHVt
cCgpOworICAgIG1fd2FpdFRvRHVtcCA9IGZhbHNlOworfQorCitKU1N0cmluZ1JlZiBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6cGF0aFRvTG9jYWxSZXNvdXJjZShKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNTdHJpbmdSZWYgdXJsKQoreworICAgIHdzdHJpbmcgaW5wdXQoSlNTdHJpbmdHZXRDaGFyYWN0
ZXJzUHRyKHVybCksIEpTU3RyaW5nR2V0TGVuZ3RoKHVybCkpOworCisgICAgd3N0cmluZyBsb2Nh
bFBhdGg7CisgICAgaWYgKCFyZXNvbHZlQ3lnd2luUGF0aChpbnB1dCwgbG9jYWxQYXRoKSkgewor
ICAgICAgICBwcmludGYoIkVSUk9SOiBGYWlsZWQgdG8gcmVzb2x2ZSBDeWd3aW4gcGF0aCAlU1xu
IiwgaW5wdXQuY19zdHIoKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVy
biBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKGxvY2FsUGF0aC5jX3N0cigpLCBsb2NhbFBh
dGgubGVuZ3RoKCkpOworfQorCitzdGF0aWMgd3N0cmluZyBqc1N0cmluZ1JlZlRvV1N0cmluZyhK
U1N0cmluZ1JlZiBqc1N0cikKK3sKKyAgICBzaXplX3QgbGVuZ3RoID0gSlNTdHJpbmdHZXRMZW5n
dGgoanNTdHIpOworICAgIFZlY3RvcjxXQ0hBUj4gYnVmZmVyKGxlbmd0aCArIDEpOworICAgIG1l
bWNweShidWZmZXIuZGF0YSgpLCBKU1N0cmluZ0dldENoYXJhY3RlcnNQdHIoanNTdHIpLCBsZW5n
dGggKiBzaXplb2YoV0NIQVIpKTsKKyAgICBidWZmZXJbbGVuZ3RoXSA9ICdcMCc7CisKKyAgICBy
ZXR1cm4gYnVmZmVyLmRhdGEoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVl
dWVMb2FkKEpTU3RyaW5nUmVmIHVybCwgSlNTdHJpbmdSZWYgdGFyZ2V0KQoreworICAgIENPTVB0
cjxJV2ViRGF0YVNvdXJjZT4gZGF0YVNvdXJjZTsKKyAgICBpZiAoRkFJTEVEKGZyYW1lLT5kYXRh
U291cmNlKCZkYXRhU291cmNlKSkpCisgICAgICAgIHJldHVybjsKKworICAgIENPTVB0cjxJV2Vi
VVJMUmVzcG9uc2U+IHJlc3BvbnNlOworICAgIGlmIChGQUlMRUQoZGF0YVNvdXJjZS0+cmVzcG9u
c2UoJnJlc3BvbnNlKSkgfHwgIXJlc3BvbnNlKQorICAgICAgICByZXR1cm47CisKKyAgICBCU1RS
IHJlc3BvbnNlVVJMQlNUUjsKKyAgICBpZiAoRkFJTEVEKHJlc3BvbnNlLT5VUkwoJnJlc3BvbnNl
VVJMQlNUUikpKQorICAgICAgICByZXR1cm47CisgICAgd3N0cmluZyByZXNwb25zZVVSTChyZXNw
b25zZVVSTEJTVFIsIFN5c1N0cmluZ0xlbihyZXNwb25zZVVSTEJTVFIpKTsKKyAgICBTeXNGcmVl
U3RyaW5nKHJlc3BvbnNlVVJMQlNUUik7CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGRvIHJl
YWwgcmVsYXRpdmUgVVJMIHJlc29sdXRpb24gaGVyZS4KKyAgICBpbnQgbGFzdFNsYXNoID0gcmVz
cG9uc2VVUkwucmZpbmQoJy8nKTsKKyAgICBpZiAobGFzdFNsYXNoICE9IC0xKQorICAgICAgICBy
ZXNwb25zZVVSTCA9IHJlc3BvbnNlVVJMLnN1YnN0cigwLCBsYXN0U2xhc2gpOworCisgICAgd3N0
cmluZyB3VVJMID0ganNTdHJpbmdSZWZUb1dTdHJpbmcodXJsKTsKKyAgICB3c3RyaW5nIHdBYnNv
bHV0ZVVSTCA9IHJlc3BvbnNlVVJMICsgVEVYVCgiLyIpICsgd1VSTDsKKyAgICBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4ganNBYnNvbHV0ZVVSTChBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoQ2hh
cmFjdGVycyh3QWJzb2x1dGVVUkwuZGF0YSgpLCB3QWJzb2x1dGVVUkwubGVuZ3RoKCkpKTsKKwor
ICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBMb2FkSXRlbShqc0Fic29sdXRlVVJM
LmdldCgpLCB0YXJnZXQpKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWNj
ZXB0c0VkaXRpbmcoYm9vbCBhY2NlcHRzRWRpdGluZykKK3sKKyAgICBDT01QdHI8SVdlYlZpZXc+
IHdlYlZpZXc7CisgICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmlldykpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBDT01QdHI8SVdlYlZpZXdFZGl0aW5nPiB2aWV3RWRpdGluZzsK
KyAgICBpZiAoRkFJTEVEKHdlYlZpZXctPlF1ZXJ5SW50ZXJmYWNlKCZ2aWV3RWRpdGluZykpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBDT01QdHI8SVdlYkVkaXRpbmdEZWxlZ2F0ZT4gZGVsZWdh
dGU7CisgICAgaWYgKEZBSUxFRCh2aWV3RWRpdGluZy0+ZWRpdGluZ0RlbGVnYXRlKCZkZWxlZ2F0
ZSkpKQorICAgICAgICByZXR1cm47CisKKyAgICBFZGl0aW5nRGVsZWdhdGUqIGVkaXRpbmdEZWxl
Z2F0ZSA9IChFZGl0aW5nRGVsZWdhdGUqKShJV2ViRWRpdGluZ0RlbGVnYXRlKilkZWxlZ2F0ZS5n
ZXQoKTsKKyAgICBlZGl0aW5nRGVsZWdhdGUtPnNldEFjY2VwdHNFZGl0aW5nKGFjY2VwdHNFZGl0
aW5nKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWx3YXlzQWNjZXB0Q29v
a2llcyhib29sIGFsd2F5c0FjY2VwdENvb2tpZXMpCit7CisgICAgaWYgKGFsd2F5c0FjY2VwdENv
b2tpZXMgPT0gbV9hbHdheXNBY2NlcHRDb29raWVzKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoITo6c2V0QWx3YXlzQWNjZXB0Q29va2llcyhhbHdheXNBY2NlcHRDb29raWVzKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIG1fYWx3YXlzQWNjZXB0Q29va2llcyA9IGFsd2F5c0FjY2VwdENvb2tp
ZXM7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dGhvckFuZFVzZXJTdHls
ZXNFbmFibGVkKGJvb2wgZmxhZykKK3sKKyAgICBDT01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7Cisg
ICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmlldykpKQorICAgICAgICByZXR1cm47
CisKKyAgICBDT01QdHI8SVdlYlByZWZlcmVuY2VzPiBwcmVmZXJlbmNlczsKKyAgICBpZiAoRkFJ
TEVEKHdlYlZpZXctPnByZWZlcmVuY2VzKCZwcmVmZXJlbmNlcykpKQorICAgICAgICByZXR1cm47
CisKKyAgICBDT01QdHI8SVdlYlByZWZlcmVuY2VzUHJpdmF0ZT4gcHJlZnNQcml2YXRlKFF1ZXJ5
LCBwcmVmZXJlbmNlcyk7CisgICAgaWYgKCFwcmVmc1ByaXZhdGUpCisgICAgICAgIHJldHVybjsK
KworICAgIHByZWZzUHJpdmF0ZS0+c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoZmxhZyk7
Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dG9maWxsZWQoSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgbm9kZU9iamVjdCwgYm9vbCBhdXRvZmlsbGVkKQorewor
ICAgIENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsKKyAgICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJW
aWV3KCZ3ZWJWaWV3KSkpCisgICAgICAgIHJldHVybjsKKworICAgIENPTVB0cjxJV2ViVmlld1By
aXZhdGU+IHdlYlZpZXdQcml2YXRlKFF1ZXJ5LCB3ZWJWaWV3KTsKKyAgICBpZiAoIXdlYlZpZXdQ
cml2YXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBDT01QdHI8SURPTUVsZW1lbnQ+IGVsZW1l
bnQ7CisgICAgaWYgKEZBSUxFRCh3ZWJWaWV3UHJpdmF0ZS0+ZWxlbWVudEZyb21KUyhjb250ZXh0
LCBub2RlT2JqZWN0LCAmZWxlbWVudCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBDT01QdHI8
SUZvcm1zQXV0b0ZpbGxUcmFuc2l0aW9uPiBhdXRvZmlsbEVsZW1lbnQoUXVlcnksIGVsZW1lbnQp
OworICAgIGlmICghYXV0b2ZpbGxFbGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRv
ZmlsbEVsZW1lbnQtPnNldEF1dG9maWxsZWQoYXV0b2ZpbGxlZCk7Cit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGJvb2wgc2V0RGVsZWdhdGUs
IGJvb2wgcGVybWlzc2l2ZSkKK3sKKyAgICBDT01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7CisgICAg
aWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmlldykpKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoc2V0RGVsZWdhdGUpIHsKKyAgICAgICAgcG9saWN5RGVsZWdhdGUtPnNldFBlcm1p
c3NpdmUocGVybWlzc2l2ZSk7CisgICAgICAgIHdlYlZpZXctPnNldFBvbGljeURlbGVnYXRlKHBv
bGljeURlbGVnYXRlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgd2ViVmlldy0+c2V0UG9saWN5RGVs
ZWdhdGUoMCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tEZXZpY2VP
cmllbnRhdGlvbihib29sIGNhblByb3ZpZGVBbHBoYSwgZG91YmxlIGFscGhhLCBib29sIGNhblBy
b3ZpZGVCZXRhLCBkb3VibGUgYmV0YSwgYm9vbCBjYW5Qcm92aWRlR2FtbWEsIGRvdWJsZSBnYW1t
YSkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBEZXZpY2VPcmllbnRhdGlvbiBsYXlv
dXQgdGVzdHMuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zMDMzNS4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xv
Y2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUg
YWNjdXJhY3kpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgR2VvbG9jYXRpb24gbGF5
b3V0IHRlc3RzLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjgyNjQuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9s
b2NhdGlvbkVycm9yKGludCBjb2RlLCBKU1N0cmluZ1JlZiBtZXNzYWdlKQoreworICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgZm9yIEdlb2xvY2F0aW9uIGxheW91dCB0ZXN0cy4KKyAgICAvLyBTZWUg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MjY0LgorfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCBhbGxv
dykKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBHZW9sb2NhdGlvbiBsYXlvdXQgdGVz
dHMuCisgICAgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29tbW9uKGFsbG93KTsKK30KKworaW50
IExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Np
b25SZXF1ZXN0cygpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgR2VvbG9jYXRpb24g
bGF5b3V0IHRlc3RzLgorICAgIHJldHVybiAtMTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6YWRkTW9ja1NwZWVjaElucHV0UmVzdWx0KEpTU3RyaW5nUmVmIHJlc3VsdCwgZG91Ymxl
IGNvbmZpZGVuY2UsIEpTU3RyaW5nUmVmIGxhbmd1YWdlKQoreworICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgZm9yIHNwZWVjaCBpbnB1dCBsYXlvdXQgdGVzdHMuCisgICAgLy8gU2VlIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4KK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0TW9ja1NwZWVjaElucHV0RHVtcFJlY3QoYm9vbCBmbGFnKQorewor
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIHNwZWVjaCBpbnB1dCBsYXlvdXQgdGVzdHMuCisg
ICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4K
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhcnRTcGVlY2hJbnB1dChKU0NvbnRl
eHRSZWYgaW5wdXRFbGVtZW50KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIHNwZWVj
aCBpbnB1dCBsYXlvdXQgdGVzdHMuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0SWNvbkRhdGFiYXNlRW5hYmxlZChib29sIGljb25EYXRhYmFzZUVuYWJsZWQpCit7CisgICAg
Ly8gU2VlIGFsc28gPHJkYXI6Ly9wcm9ibGVtLzY0ODAxMDg+CisgICAgQ09NUHRyPElXZWJJY29u
RGF0YWJhc2U+IGljb25EYXRhYmFzZTsKKyAgICBDT01QdHI8SVdlYkljb25EYXRhYmFzZT4gdG1w
SWNvbkRhdGFiYXNlOworICAgIGlmIChGQUlMRUQoV2ViS2l0Q3JlYXRlSW5zdGFuY2UoQ0xTSURf
V2ViSWNvbkRhdGFiYXNlLCAwLCBJSURfSVdlYkljb25EYXRhYmFzZSwgKHZvaWQqKikmdG1wSWNv
bkRhdGFiYXNlKSkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoRkFJTEVEKHRtcEljb25EYXRh
YmFzZS0+c2hhcmVkSWNvbkRhdGFiYXNlKCZpY29uRGF0YWJhc2UpKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWNvbkRhdGFiYXNlLT5zZXRFbmFibGVkKGljb25EYXRhYmFzZUVuYWJsZWQpOwor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNYWluRnJhbWVJc0ZpcnN0UmVzcG9u
ZGVyKGJvb2wgZmxhZykKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IQorfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKGJvb2wgcHJpdmF0
ZUJyb3dzaW5nRW5hYmxlZCkKK3sKKyAgICBDT01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7CisgICAg
aWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmlldykpKQorICAgICAgICByZXR1cm47CisK
KyAgICBDT01QdHI8SVdlYlByZWZlcmVuY2VzPiBwcmVmZXJlbmNlczsKKyAgICBpZiAoRkFJTEVE
KHdlYlZpZXctPnByZWZlcmVuY2VzKCZwcmVmZXJlbmNlcykpKQorICAgICAgICByZXR1cm47CisK
KyAgICBwcmVmZXJlbmNlcy0+c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChwcml2YXRlQnJvd3Np
bmdFbmFibGVkKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0WFNTQXVkaXRv
ckVuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsK
KyAgICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3KSkpCisgICAgICAgIHJldHVy
bjsKKworICAgIENPTVB0cjxJV2ViUHJlZmVyZW5jZXM+IHByZWZlcmVuY2VzOworICAgIGlmIChG
QUlMRUQod2ViVmlldy0+cHJlZmVyZW5jZXMoJnByZWZlcmVuY2VzKSkpCisgICAgICAgIHJldHVy
bjsKKworICAgIENPTVB0cjxJV2ViUHJlZmVyZW5jZXNQcml2YXRlPiBwcmVmc1ByaXZhdGUoUXVl
cnksIHByZWZlcmVuY2VzKTsKKyAgICBpZiAoIXByZWZzUHJpdmF0ZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgcHJlZnNQcml2YXRlLT5zZXRYU1NBdWRpdG9yRW5hYmxlZChlbmFibGVkKTsKK30K
Kwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZChi
b29sIGVuYWJsZWQpCit7CisgICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OworICAgIGlmIChG
QUlMRUQoZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Q09NUHRyPElXZWJQcmVmZXJlbmNlcz4gcHJlZmVyZW5jZXM7CisgICAgaWYgKEZBSUxFRCh3ZWJW
aWV3LT5wcmVmZXJlbmNlcygmcHJlZmVyZW5jZXMpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Q09NUHRyPElXZWJQcmVmZXJlbmNlc1ByaXZhdGU+IHByZWZzUHJpdmF0ZShRdWVyeSwgcHJlZmVy
ZW5jZXMpOworICAgIGlmICghcHJlZnNQcml2YXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBw
cmVmc1ByaXZhdGUtPnNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoZW5hYmxlZCk7Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChib29s
IGVuYWJsZWQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgU3BhdGlhbE5hdmlnYXRp
b24gbGF5b3V0IHRlc3RzLgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbGxv
d1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyhib29sIGVuYWJsZWQpCit7CisgICAgQ09NUHRy
PElXZWJWaWV3PiB3ZWJWaWV3OworICAgIGlmIChGQUlMRUQoZnJhbWUtPndlYlZpZXcoJndlYlZp
ZXcpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ09NUHRyPElXZWJQcmVmZXJlbmNlcz4gcHJl
ZmVyZW5jZXM7CisgICAgaWYgKEZBSUxFRCh3ZWJWaWV3LT5wcmVmZXJlbmNlcygmcHJlZmVyZW5j
ZXMpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ09NUHRyPElXZWJQcmVmZXJlbmNlc1ByaXZh
dGU+IHByZWZzUHJpdmF0ZShRdWVyeSwgcHJlZmVyZW5jZXMpOworICAgIGlmICghcHJlZnNQcml2
YXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBwcmVmc1ByaXZhdGUtPnNldEFsbG93VW5pdmVy
c2FsQWNjZXNzRnJvbUZpbGVVUkxzKGVuYWJsZWQpOworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMoYm9vbCBlbmFibGVkKQorewor
ICAgIENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsKKyAgICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJW
aWV3KCZ3ZWJWaWV3KSkpCisgICAgICAgIHJldHVybjsKKworICAgIENPTVB0cjxJV2ViUHJlZmVy
ZW5jZXM+IHByZWZlcmVuY2VzOworICAgIGlmIChGQUlMRUQod2ViVmlldy0+cHJlZmVyZW5jZXMo
JnByZWZlcmVuY2VzKSkpCisgICAgICAgIHJldHVybjsKKworICAgIENPTVB0cjxJV2ViUHJlZmVy
ZW5jZXNQcml2YXRlPiBwcmVmc1ByaXZhdGUoUXVlcnksIHByZWZlcmVuY2VzKTsKKyAgICBpZiAo
IXByZWZzUHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJlZnNQcml2YXRlLT5zZXRB
bGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMoZW5hYmxlZCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFBvcHVwQmxvY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAg
ICBDT01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7CisgICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmll
dygmd2ViVmlldykpKQorICAgICAgICByZXR1cm47CisKKyAgICBDT01QdHI8SVdlYlByZWZlcmVu
Y2VzPiBwcmVmZXJlbmNlczsKKyAgICBpZiAoRkFJTEVEKHdlYlZpZXctPnByZWZlcmVuY2VzKCZw
cmVmZXJlbmNlcykpKQorICAgICAgICByZXR1cm47CisKKyAgICBwcmVmZXJlbmNlcy0+c2V0SmF2
YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0b21hdGljYWxseSghZW5hYmxlZCk7Cit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBsdWdpbnNFbmFibGVkKGJvb2wgZmxhZykKK3sKKyAg
ICAvLyBGSVhNRTogSW1wbGVtZW50Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQoYm9vbCBlbmFibGVkKQoreworICAgIENPTVB0
cjxJV2ViVmlldz4gd2ViVmlldzsKKyAgICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJW
aWV3KSkpCisgICAgICAgIHJldHVybjsKKworICAgIENPTVB0cjxJV2ViUHJlZmVyZW5jZXM+IHBy
ZWZlcmVuY2VzOworICAgIGlmIChGQUlMRUQod2ViVmlldy0+cHJlZmVyZW5jZXMoJnByZWZlcmVu
Y2VzKSkpCisgICAgICAgIHJldHVybjsKKworICAgIENPTVB0cjxJV2ViUHJlZmVyZW5jZXNQcml2
YXRlPiBwcmVmc1ByaXZhdGUoUXVlcnksIHByZWZlcmVuY2VzKTsKKyAgICBpZiAoIXByZWZzUHJp
dmF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJlZnNQcml2YXRlLT5zZXRKYXZhU2NyaXB0
Q2FuQWNjZXNzQ2xpcGJvYXJkKGVuYWJsZWQpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoYm9vbCBzaG91bGRDeWNsZSkKK3sK
KyAgICBDT01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7CisgICAgaWYgKEZBSUxFRChmcmFtZS0+d2Vi
Vmlldygmd2ViVmlldykpKQorICAgICAgICByZXR1cm47CisKKyAgICBDT01QdHI8SVdlYlZpZXdQ
cml2YXRlPiB2aWV3UHJpdmF0ZTsKKyAgICBpZiAoRkFJTEVEKHdlYlZpZXctPlF1ZXJ5SW50ZXJm
YWNlKCZ2aWV3UHJpdmF0ZSkpKQorICAgICAgICByZXR1cm47CisKKyAgICB2aWV3UHJpdmF0ZS0+
c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKHNob3VsZEN5Y2xlID8gVFJVRSA6IEZBTFNF
KTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlRGFzaGJvYXJkQ29tcGF0
aWJpbGl0eU1vZGUoYm9vbCBmbGFnKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQhCit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZChib29s
IGZsYWcpCit7CisgICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OworICAgIGlmIChGQUlMRUQo
ZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ09NUHRy
PElXZWJQcmVmZXJlbmNlcz4gcHJlZmVyZW5jZXM7CisgICAgaWYgKEZBSUxFRCh3ZWJWaWV3LT5w
cmVmZXJlbmNlcygmcHJlZmVyZW5jZXMpKSkKKyAgICAgICAgcmV0dXJuOworCisgICBwcmVmZXJl
bmNlcy0+c2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKGZsYWcpOworfQorCitib29sIGFwcGVuZENv
bXBvbmVudFRvUGF0aCh3c3RyaW5nJiBwYXRoLCBjb25zdCB3c3RyaW5nJiBjb21wb25lbnQpCit7
CisgICAgV0NIQVIgYnVmZmVyW01BWF9QQVRIXTsKKworICAgIGlmIChwYXRoLnNpemUoKSArIDEg
PiBNQVhfUEFUSCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbWVtY3B5KGJ1ZmZlciwg
cGF0aC5kYXRhKCksIHBhdGguc2l6ZSgpICogc2l6ZW9mKFdDSEFSKSk7CisgICAgYnVmZmVyW3Bh
dGguc2l6ZSgpXSA9ICdcMCc7CisKKyAgICBpZiAoIVBhdGhBcHBlbmRXKGJ1ZmZlciwgY29tcG9u
ZW50LmNfc3RyKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBwYXRoID0gd3N0cmlu
ZyhidWZmZXIpOworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBmb2xsb3dTaG9y
dGN1dHMod3N0cmluZyYgcGF0aCkKK3sKKyAgICBpZiAoUGF0aEZpbGVFeGlzdHMocGF0aC5jX3N0
cigpKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBEbyB3ZSBoYXZlIGEgc2hvcnRj
dXQ/CisgICAgd3N0cmluZyBsaW5rUGF0aCA9IHBhdGg7CisgICAgbGlua1BhdGguYXBwZW5kKFRF
WFQoIi5sbmsiKSk7CisgICAgaWYgKCFQYXRoRmlsZUV4aXN0cyhsaW5rUGF0aC5jX3N0cigpKSkK
KyAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIFdlIGhhdmUgYSBzaG9ydGN1dCwgZmluZCBp
dHMgdGFyZ2V0LgorICAgIENPTVB0cjxJU2hlbGxMaW5rPiBzaG9ydGN1dChDcmVhdGUsIENMU0lE
X1NoZWxsTGluayk7CisgICAgaWYgKCFzaG9ydGN1dCkKKyAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgQ09NUHRyPElQZXJzaXN0RmlsZT4gcGVyc2lzdEZpbGUoUXVlcnksIHNob3J0Y3V0KTsKKyAg
ICBpZiAoIXNob3J0Y3V0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKEZBSUxFRChw
ZXJzaXN0RmlsZS0+TG9hZChsaW5rUGF0aC5jX3N0cigpLCBTVEdNX1JFQUQpKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmIChGQUlMRUQoc2hvcnRjdXQtPlJlc29sdmUoMCwgMCkpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV0NIQVIgdGFyZ2V0UGF0aFtNQVhfUEFUSF07Cisg
ICAgRFdPUkQgdGFyZ2V0UGF0aExlbiA9IF9jb3VudG9mKHRhcmdldFBhdGgpOworICAgIGlmIChG
QUlMRUQoc2hvcnRjdXQtPkdldFBhdGgodGFyZ2V0UGF0aCwgdGFyZ2V0UGF0aExlbiwgMCwgMCkp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFQYXRoRmlsZUV4aXN0cyh0YXJnZXRQ
YXRoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vIFVzZSB0aGUgdGFyZ2V0IHBhdGgg
YXMgdGhlIHJlc3VsdCBwYXRoIGluc3RlYWQuCisgICAgcGF0aCA9IHdzdHJpbmcodGFyZ2V0UGF0
aCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgcmVzb2x2ZUN5Z3dpblBh
dGgoY29uc3Qgd3N0cmluZyYgY3lnd2luUGF0aCwgd3N0cmluZyYgd2luZG93c1BhdGgpCit7Cisg
ICAgd3N0cmluZyBmaWxlUHJvdG9jb2wgPSBMImZpbGU6Ly8iOworICAgIGJvb2wgaXNGaWxlUHJv
dG9jb2wgPSBjeWd3aW5QYXRoLmZpbmQoZmlsZVByb3RvY29sKSAhPSBzdHJpbmc6Om5wb3M7Cisg
ICAgaWYgKGN5Z3dpblBhdGhbaXNGaWxlUHJvdG9jb2wgPyA3IDogMF0gIT0gJy8nKSAgLy8gZW5z
dXJlIHBhdGggaXMgYWJzb2x1dGUKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gR2V0
IHRoZSBSb290IHBhdGguCisgICAgV0NIQVIgcm9vdFBhdGhbTUFYX1BBVEhdOworICAgIERXT1JE
IHJvb3RQYXRoU2l6ZSA9IF9jb3VudG9mKHJvb3RQYXRoKTsKKyAgICBEV09SRCBrZXlUeXBlOwor
ICAgIERXT1JEIHJlc3VsdCA9IDo6U0hHZXRWYWx1ZVcoSEtFWV9MT0NBTF9NQUNISU5FLCBURVhU
KCJTT0ZUV0FSRVxcQ3lnbnVzIFNvbHV0aW9uc1xcQ3lnd2luXFxtb3VudHMgdjJcXC8iKSwgVEVY
VCgibmF0aXZlIiksICZrZXlUeXBlLCAmcm9vdFBhdGgsICZyb290UGF0aFNpemUpOworCisgICAg
aWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTIHx8IGtleVR5cGUgIT0gUkVHX1NaKSB7CisgICAg
ICAgIC8vIEN5Z3dpbiAxLjcgZG9lc24ndCBzdG9yZSBDeWd3aW4ncyByb290IGFzIGEgbW91bnQg
cG9pbnQgYW55bW9yZSwgYmVjYXVzZSBtb3VudCBwb2ludHMgYXJlIG5vdyBzdG9yZWQgaW4gL2V0
Yy9mc3RhYi4KKyAgICAgICAgLy8gSG93ZXZlciwgL2V0Yy9mc3RhYiBkb2Vzbid0IGNvbnRhaW4g
YW55IGluZm9ybWF0aW9uIGFib3V0IHdoZXJlIC8gaXMgbG9jYXRlZCBhcyBhIFdpbmRvd3MgcGF0
aCwgc28gd2UgbmVlZCB0byB1c2UgQ3lnd2luJ3MKKyAgICAgICAgLy8gbmV3IHJlZ2lzdHJ5IGtl
eSB0aGF0IGhhcyB0aGUgcm9vdC4KKyAgICAgICAgcmVzdWx0ID0gOjpTSEdldFZhbHVlVyhIS0VZ
X0xPQ0FMX01BQ0hJTkUsIFRFWFQoIlNPRlRXQVJFXFxDeWd3aW5cXHNldHVwIiksIFRFWFQoInJv
b3RkaXIiKSwgJmtleVR5cGUsICZyb290UGF0aCwgJnJvb3RQYXRoU2l6ZSk7CisgICAgICAgIGlm
IChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUyB8fCBrZXlUeXBlICE9IFJFR19TWikKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB3aW5kb3dzUGF0aCA9IHdzdHJpbmcocm9v
dFBhdGgsIHJvb3RQYXRoU2l6ZSk7CisKKyAgICBpbnQgb2xkUG9zID0gaXNGaWxlUHJvdG9jb2wg
PyA4IDogMTsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBpbnQgbmV3UG9zID0gY3lnd2luUGF0
aC5maW5kKCcvJywgb2xkUG9zKTsKKworICAgICAgICBpZiAobmV3UG9zID09IC0xKSB7CisgICAg
ICAgICAgICB3c3RyaW5nIHBhdGhDb21wb25lbnQgPSBjeWd3aW5QYXRoLnN1YnN0cihvbGRQb3Mp
OworCisgICAgICAgICAgICBpZiAoIWFwcGVuZENvbXBvbmVudFRvUGF0aCh3aW5kb3dzUGF0aCwg
cGF0aENvbXBvbmVudCkpCisgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
ICAgIGlmICghZm9sbG93U2hvcnRjdXRzKHdpbmRvd3NQYXRoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
d3N0cmluZyBwYXRoQ29tcG9uZW50ID0gY3lnd2luUGF0aC5zdWJzdHIob2xkUG9zLCBuZXdQb3Mg
LSBvbGRQb3MpOworICAgICAgICBpZiAoIWFwcGVuZENvbXBvbmVudFRvUGF0aCh3aW5kb3dzUGF0
aCwgcGF0aENvbXBvbmVudCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
aWYgKCFmb2xsb3dTaG9ydGN1dHMod2luZG93c1BhdGgpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIG9sZFBvcyA9IG5ld1BvcyArIDE7CisgICAgfQorCisgICAgaWYgKGlz
RmlsZVByb3RvY29sKQorICAgICAgICB3aW5kb3dzUGF0aCA9IGZpbGVQcm90b2NvbCArIHdpbmRv
d3NQYXRoOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oSlNTdHJpbmdSZWYganNVUkwpCit7CisgICAg
Q09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OworICAgIGlmIChGQUlMRUQoZnJhbWUtPndlYlZpZXco
JndlYlZpZXcpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ09NUHRyPElXZWJQcmVmZXJlbmNl
cz4gcHJlZmVyZW5jZXM7CisgICAgaWYgKEZBSUxFRCh3ZWJWaWV3LT5wcmVmZXJlbmNlcygmcHJl
ZmVyZW5jZXMpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVm
PiB1cmxTdHJpbmcoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoMCwganNVUkwpKTsKKyAg
ICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybChBZG9wdENGLCBDRlVSTENyZWF0ZVdpdGhTdHJpbmco
MCwgdXJsU3RyaW5nLmdldCgpLCAwKSk7CisgICAgaWYgKCF1cmwpCisgICAgICAgIHJldHVybjsK
KworICAgIC8vIE5vdyBjb3B5IHRoZSBmaWxlIHN5c3RlbSBwYXRoLCBQT1NJWCBzdHlsZS4KKyAg
ICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHBhdGhDRihBZG9wdENGLCBDRlVSTENvcHlGaWxlU3lz
dGVtUGF0aCh1cmwuZ2V0KCksIGtDRlVSTFBPU0lYUGF0aFN0eWxlKSk7CisgICAgaWYgKCFwYXRo
Q0YpCisgICAgICAgIHJldHVybjsKKworICAgIHdzdHJpbmcgcGF0aCA9IGNmU3RyaW5nUmVmVG9X
U3RyaW5nKHBhdGhDRi5nZXQoKSk7CisKKyAgICB3c3RyaW5nIHJlc3VsdFBhdGg7CisgICAgaWYg
KCFyZXNvbHZlQ3lnd2luUGF0aChwYXRoLCByZXN1bHRQYXRoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gVGhlIHBhdGggaGFzIGJlZW4gcmVzb2x2ZWQsIG5vdyBjb252ZXJ0IGl0IGJhY2sg
dG8gYSBDRlVSTC4KKyAgICBpbnQgcmVzdWx0ID0gV2lkZUNoYXJUb011bHRpQnl0ZShDUF9VVEY4
LCAwLCByZXN1bHRQYXRoLmNfc3RyKCksIHJlc3VsdFBhdGguc2l6ZSgpICsgMSwgMCwgMCwgMCwg
MCk7CisgICAgVmVjdG9yPGNoYXI+IHV0ZjhWZWN0b3IocmVzdWx0KTsKKyAgICByZXN1bHQgPSBX
aWRlQ2hhclRvTXVsdGlCeXRlKENQX1VURjgsIDAsIHJlc3VsdFBhdGguY19zdHIoKSwgcmVzdWx0
UGF0aC5zaXplKCkgKyAxLCB1dGY4VmVjdG9yLmRhdGEoKSwgcmVzdWx0LCAwLCAwKTsKKyAgICBp
ZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgdXJsID0gQ0ZVUkxDcmVhdGVGcm9t
RmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKDAsIChjb25zdCBVSW50OCopdXRmOFZlY3Rvci5kYXRh
KCksIHV0ZjhWZWN0b3Iuc2l6ZSgpIC0gMSwgZmFsc2UpOworICAgIGlmICghdXJsKQorICAgICAg
ICByZXR1cm47CisKKyAgICByZXN1bHRQYXRoID0gY2ZTdHJpbmdSZWZUb1dTdHJpbmcoQ0ZVUkxH
ZXRTdHJpbmcodXJsLmdldCgpKSk7CisKKyAgICBCU1RSIHJlc3VsdFBhdGhCU1RSID0gU3lzQWxs
b2NTdHJpbmdMZW4ocmVzdWx0UGF0aC5kYXRhKCksIHJlc3VsdFBhdGguc2l6ZSgpKTsKKyAgICBw
cmVmZXJlbmNlcy0+c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihyZXN1bHRQYXRoQlNUUik7Cisg
ICAgU3lzRnJlZVN0cmluZyhyZXN1bHRQYXRoQlNUUik7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldFZhbHVlRm9yVXNlcihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJl
ZiBlbGVtZW50LCBKU1N0cmluZ1JlZiB2YWx1ZSkKK3sKKyAgICBDT01QdHI8SVdlYlZpZXc+IHdl
YlZpZXc7CisgICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmlldykpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBDT01QdHI8SVdlYlZpZXdQcml2YXRlPiB3ZWJWaWV3UHJpdmF0ZShR
dWVyeSwgd2ViVmlldyk7CisgICAgaWYgKCF3ZWJWaWV3UHJpdmF0ZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgQ09NUHRyPElET01FbGVtZW50PiBkb21FbGVtZW50OworICAgIGlmIChGQUlMRUQo
d2ViVmlld1ByaXZhdGUtPmVsZW1lbnRGcm9tSlMoY29udGV4dCwgZWxlbWVudCwgJmRvbUVsZW1l
bnQpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ09NUHRyPElET01IVE1MSW5wdXRFbGVtZW50
PiBkb21JbnB1dEVsZW1lbnQ7CisgICAgaWYgKEZBSUxFRChkb21FbGVtZW50LT5RdWVyeUludGVy
ZmFjZShJSURfSURPTUhUTUxJbnB1dEVsZW1lbnQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigm
ZG9tSW5wdXRFbGVtZW50KSkpKQorICAgICAgICByZXR1cm47CisKKyAgICBfYnN0cl90IHZhbHVl
QlNUUihKU1N0cmluZ0NvcHlCU1RSKHZhbHVlKSwgZmFsc2UpOworCisgICAgZG9tSW5wdXRFbGVt
ZW50LT5zZXRWYWx1ZUZvclVzZXIodmFsdWVCU1RSKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0Vmlld01vZGVNZWRpYUZlYXR1cmUoSlNTdHJpbmdSZWYgbW9kZSkKK3sKKyAg
ICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dFBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldExvY2F0aW9uKEpTU3RyaW5nUmVmIGpzVVJMKQorewor
ICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdXJsU3RyaW5nKEFkb3B0Q0YsIEpTU3RyaW5nQ29w
eUNGU3RyaW5nKDAsIGpzVVJMKSk7CisgICAgOjpzZXRQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXRM
b2NhdGlvbih1cmxTdHJpbmcuZ2V0KCkpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpjbGVhclBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldCgpCit7CisgICAgOjpzZXRQZXJzaXN0ZW50
VXNlclN0eWxlU2hlZXRMb2NhdGlvbigwKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0V2luZG93SXNLZXkoYm9vbCBmbGFnKQoreworICAgIENPTVB0cjxJV2ViVmlldz4gd2Vi
VmlldzsKKyAgICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3KSkpCisgICAgICAg
IHJldHVybjsKKworICAgIENPTVB0cjxJV2ViVmlld1ByaXZhdGU+IHZpZXdQcml2YXRlOworICAg
IGlmIChGQUlMRUQod2ViVmlldy0+UXVlcnlJbnRlcmZhY2UoJnZpZXdQcml2YXRlKSkpCisgICAg
ICAgIHJldHVybjsKKworICAgIEhXTkQgd2ViVmlld1dpbmRvdzsKKyAgICBpZiAoRkFJTEVEKHZp
ZXdQcml2YXRlLT52aWV3V2luZG93KChPTEVfSEFORExFKikmd2ViVmlld1dpbmRvdykpKQorICAg
ICAgICByZXR1cm47CisKKyAgICA6OlNlbmRNZXNzYWdlKHdlYlZpZXdXaW5kb3csIGZsYWcgPyBX
TV9TRVRGT0NVUyA6IFdNX0tJTExGT0NVUywgKFdQQVJBTSk6OkdldERlc2t0b3BXaW5kb3coKSwg
MCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNtYXJ0SW5zZXJ0RGVsZXRl
RW5hYmxlZChib29sIGZsYWcpCit7CisgICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OworICAg
IGlmIChGQUlMRUQoZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgQ09NUHRyPElXZWJWaWV3RWRpdGluZz4gdmlld0VkaXRpbmc7CisgICAgaWYgKEZBSUxF
RCh3ZWJWaWV3LT5RdWVyeUludGVyZmFjZSgmdmlld0VkaXRpbmcpKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgdmlld0VkaXRpbmctPnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChmbGFnID8g
VFJVRSA6IEZBTFNFKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2VsZWN0
VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChib29sIGZsYWcpCit7CisgICAgQ09NUHRyPElXZWJW
aWV3PiB3ZWJWaWV3OworICAgIGlmIChGQUlMRUQoZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgQ09NUHRyPElXZWJWaWV3RWRpdGluZz4gdmlld0VkaXRp
bmc7CisgICAgaWYgKEZBSUxFRCh3ZWJWaWV3LT5RdWVyeUludGVyZmFjZSgmdmlld0VkaXRpbmcp
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdmlld0VkaXRpbmctPnNldFNlbGVjdFRyYWlsaW5n
V2hpdGVzcGFjZUVuYWJsZWQoZmxhZyA/IFRSVUUgOiBGQUxTRSk7Cit9CisKK3N0YXRpYyBjb25z
dCBDRlRpbWVJbnRlcnZhbCB3YWl0VG9EdW1wV2F0Y2hkb2dJbnRlcnZhbCA9IDMwLjA7CisKK3N0
YXRpYyB2b2lkIENBTExCQUNLIHdhaXRVbnRpbERvbmVXYXRjaGRvZ0ZpcmVkKEhXTkQsIFVJTlQs
IFVJTlRfUFRSLCBEV09SRCkKK3sKKyAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXItPndhaXRUb0R1
bXBXYXRjaGRvZ1RpbWVyRmlyZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0V2FpdFRvRHVtcChib29sIHdhaXRVbnRpbERvbmUpCit7CisgICAgbV93YWl0VG9EdW1wID0g
d2FpdFVudGlsRG9uZTsKKyAgICBpZiAobV93YWl0VG9EdW1wICYmICF3YWl0VG9EdW1wV2F0Y2hk
b2cpCisgICAgICAgIHdhaXRUb0R1bXBXYXRjaGRvZyA9IFNldFRpbWVyKDAsIDAsIHdhaXRUb0R1
bXBXYXRjaGRvZ0ludGVydmFsICogMTAwMCwgd2FpdFVudGlsRG9uZVdhdGNoZG9nRmlyZWQpOwor
fQorCitpbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndpbmRvd0NvdW50KCkKK3sKKyAgICByZXR1
cm4gb3BlbldpbmRvd3MoKS5zaXplKCk7Cit9CisKK2Jvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBpZCkK
K3sKKyAgICBDT01QdHI8SURPTURvY3VtZW50PiBkb2N1bWVudDsKKyAgICBpZiAoRkFJTEVEKGZy
YW1lLT5ET01Eb2N1bWVudCgmZG9jdW1lbnQpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgd3N0cmluZyBpZFdzdHJpbmcgPSBqc1N0cmluZ1JlZlRvV1N0cmluZyhpZCk7CisgICAgQlNU
UiBpZEJTVFIgPSBTeXNBbGxvY1N0cmluZ0xlbigoT0xFQ0hBUiopaWRXc3RyaW5nLmNfc3RyKCks
IGlkV3N0cmluZy5sZW5ndGgoKSk7CisgICAgQ09NUHRyPElET01FbGVtZW50PiBlbGVtZW50Owor
ICAgIEhSRVNVTFQgcmVzdWx0ID0gZG9jdW1lbnQtPmdldEVsZW1lbnRCeUlkKGlkQlNUUiwgJmVs
ZW1lbnQpOworICAgIFN5c0ZyZWVTdHJpbmcoaWRCU1RSKTsKKworICAgIGlmIChGQUlMRUQocmVz
dWx0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQ09NUHRyPElXZWJGcmFtZVByaXZh
dGU+IGZyYW1lUHJpdmF0ZShRdWVyeSwgZnJhbWUpOworICAgIGlmICghZnJhbWVQcml2YXRlKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBCT09MIGF1dG9Db21wbGV0ZXM7CisgICAgaWYg
KEZBSUxFRChmcmFtZVByaXZhdGUtPmVsZW1lbnREb2VzQXV0b0NvbXBsZXRlKGVsZW1lbnQuZ2V0
KCksICZhdXRvQ29tcGxldGVzKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVy
biBhdXRvQ29tcGxldGVzOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpleGVjQ29t
bWFuZChKU1N0cmluZ1JlZiBuYW1lLCBKU1N0cmluZ1JlZiB2YWx1ZSkKK3sKKyAgICB3c3RyaW5n
IHdOYW1lID0ganNTdHJpbmdSZWZUb1dTdHJpbmcobmFtZSk7CisgICAgd3N0cmluZyB3VmFsdWUg
PSBqc1N0cmluZ1JlZlRvV1N0cmluZyh2YWx1ZSk7CisKKyAgICBDT01QdHI8SVdlYlZpZXc+IHdl
YlZpZXc7CisgICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmlldykpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBDT01QdHI8SVdlYlZpZXdQcml2YXRlPiB2aWV3UHJpdmF0ZTsKKyAg
ICBpZiAoRkFJTEVEKHdlYlZpZXctPlF1ZXJ5SW50ZXJmYWNlKCZ2aWV3UHJpdmF0ZSkpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBCU1RSIG5hbWVCU1RSID0gU3lzQWxsb2NTdHJpbmdMZW4oKE9M
RUNIQVIqKXdOYW1lLmNfc3RyKCksIHdOYW1lLmxlbmd0aCgpKTsKKyAgICBCU1RSIHZhbHVlQlNU
UiA9IFN5c0FsbG9jU3RyaW5nTGVuKChPTEVDSEFSKil3VmFsdWUuY19zdHIoKSwgd1ZhbHVlLmxl
bmd0aCgpKTsKKyAgICB2aWV3UHJpdmF0ZS0+ZXhlY3V0ZUNvcmVDb21tYW5kQnlOYW1lKG5hbWVC
U1RSLCB2YWx1ZUJTVFIpOworCisgICAgU3lzRnJlZVN0cmluZyhuYW1lQlNUUik7CisgICAgU3lz
RnJlZVN0cmluZyh2YWx1ZUJTVFIpOworfQorCitib29sIExheW91dFRlc3RDb250cm9sbGVyOjpm
aW5kU3RyaW5nKEpTQ29udGV4dFJlZiAvKiBjb250ZXh0ICovLCBKU1N0cmluZ1JlZiAvKiB0YXJn
ZXQgKi8sIEpTT2JqZWN0UmVmIC8qIG9wdGlvbnNBcnJheSAqLykKK3sKKyAgICAvLyBGSVhNRTog
SW1wbGVtZW50CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRDYWNoZU1vZGVsKGludCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50Cit9CisK
K2Jvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmlzQ29tbWFuZEVuYWJsZWQoSlNTdHJpbmdSZWYg
LypuYW1lKi8pCit7CisgICAgcHJpbnRmKCJFUlJPUjogTGF5b3V0VGVzdENvbnRyb2xsZXI6Omlz
Q29tbWFuZEVuYWJsZWQoKSBub3QgaW1wbGVtZW50ZWRcbiIpOworICAgIHJldHVybiBmYWxzZTsK
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hl
cygpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBzdXBwb3J0IGFwcGxpY2F0aW9uIGNh
Y2hlIHF1b3Rhcy4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBcHBsaWNh
dGlvbkNhY2hlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIG9yaWdpbikKK3sKKyAgICAvLyBGSVhNRTog
SW1wbGVtZW50IHRvIHN1cHBvcnQgZGVsZXRpbmcgYWxsIGFwcGxpY2F0aW9uIGNhY2hlIGZvciBh
biBvcmlnaW4uCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFwcGxpY2F0aW9u
Q2FjaGVPcmlnaW5RdW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCit7CisgICAgLy8gRklY
TUU6IEltcGxlbWVudCB0byBzdXBwb3J0IGFwcGxpY2F0aW9uIGNhY2hlIHF1b3Rhcy4KK30KKwor
SlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNh
Y2hlKEpTQ29udGV4dFJlZiBjb250ZXh0KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8g
Z2V0IG9yaWdpbnMgdGhhdCBoYXZlIGFwcGxpY2F0aW9uIGNhY2hlcy4KKyAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK2xvbmcgbG9uZyBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6YXBwbGljYXRpb25DYWNoZURpc2tVc2FnZUZvck9yaWdpbihKU1N0cmluZ1JlZiBu
YW1lKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gZ2V0IGRpc2sgdXNhZ2UgYnkgYWxs
IGFwcGxpY2F0aW9uIGNhY2hlcyBmb3IgYW4gb3JpZ2luLgorICAgIHJldHVybiAwOworfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbERhdGFiYXNlcygpCit7CisgICAgQ09N
UHRyPElXZWJEYXRhYmFzZU1hbmFnZXI+IGRhdGFiYXNlTWFuYWdlcjsKKyAgICBDT01QdHI8SVdl
YkRhdGFiYXNlTWFuYWdlcj4gdG1wRGF0YWJhc2VNYW5hZ2VyOworICAgIGlmIChGQUlMRUQoV2Vi
S2l0Q3JlYXRlSW5zdGFuY2UoQ0xTSURfV2ViRGF0YWJhc2VNYW5hZ2VyLCAwLCBJSURfSVdlYkRh
dGFiYXNlTWFuYWdlciwgKHZvaWQqKikmdG1wRGF0YWJhc2VNYW5hZ2VyKSkpCisgICAgICAgIHJl
dHVybjsKKyAgICBpZiAoRkFJTEVEKHRtcERhdGFiYXNlTWFuYWdlci0+c2hhcmVkV2ViRGF0YWJh
c2VNYW5hZ2VyKCZkYXRhYmFzZU1hbmFnZXIpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZGF0
YWJhc2VNYW5hZ2VyLT5kZWxldGVBbGxEYXRhYmFzZXMoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6b3ZlcnJpZGVQcmVmZXJlbmNlKEpTU3RyaW5nUmVmIGtleSwgSlNTdHJpbmdS
ZWYgdmFsdWUpCit7CisgICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OworICAgIGlmIChGQUlM
RUQoZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ09N
UHRyPElXZWJQcmVmZXJlbmNlcz4gcHJlZmVyZW5jZXM7CisgICAgaWYgKEZBSUxFRCh3ZWJWaWV3
LT5wcmVmZXJlbmNlcygmcHJlZmVyZW5jZXMpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ09N
UHRyPElXZWJQcmVmZXJlbmNlc1ByaXZhdGU+IHByZWZzUHJpdmF0ZShRdWVyeSwgcHJlZmVyZW5j
ZXMpOworICAgIGlmICghcHJlZnNQcml2YXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBCU1RS
IGtleUJTVFIgPSBKU1N0cmluZ0NvcHlCU1RSKGtleSk7CisgICAgQlNUUiB2YWx1ZUJTVFIgPSBK
U1N0cmluZ0NvcHlCU1RSKHZhbHVlKTsKKyAgICBwcmVmc1ByaXZhdGUtPnNldFByZWZlcmVuY2VG
b3JUZXN0KGtleUJTVFIsIHZhbHVlQlNUUik7CisgICAgU3lzRnJlZVN0cmluZyhrZXlCU1RSKTsK
KyAgICBTeXNGcmVlU3RyaW5nKHZhbHVlQlNUUik7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldERhdGFiYXNlUXVvdGEodW5zaWduZWQgbG9uZyBsb25nIHF1b3RhKQoreworICAg
IENPTVB0cjxJV2ViRGF0YWJhc2VNYW5hZ2VyPiBkYXRhYmFzZU1hbmFnZXI7CisgICAgQ09NUHRy
PElXZWJEYXRhYmFzZU1hbmFnZXI+IHRtcERhdGFiYXNlTWFuYWdlcjsKKworICAgIGlmIChGQUlM
RUQoV2ViS2l0Q3JlYXRlSW5zdGFuY2UoQ0xTSURfV2ViRGF0YWJhc2VNYW5hZ2VyLCAwLCBJSURf
SVdlYkRhdGFiYXNlTWFuYWdlciwgKHZvaWQqKikmdG1wRGF0YWJhc2VNYW5hZ2VyKSkpCisgICAg
ICAgIHJldHVybjsKKyAgICBpZiAoRkFJTEVEKHRtcERhdGFiYXNlTWFuYWdlci0+c2hhcmVkV2Vi
RGF0YWJhc2VNYW5hZ2VyKCZkYXRhYmFzZU1hbmFnZXIpKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZGF0YWJhc2VNYW5hZ2VyLT5zZXRRdW90YShURVhUKCJmaWxlOi8vLyIpLCBxdW90YSk7Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmdvQmFjaygpCit7CisgICAgLy8gRklYTUU6
IGltcGxlbWVudCB0byBlbmFibGUgbG9hZGVyL25hdmlnYXRpb24td2hpbGUtZGVmZXJyaW5nLWxv
YWRzLmh0bWwKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGVmZXJzTG9hZGlu
Zyhib29sKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdG8gZW5hYmxlIGxvYWRlci9uYXZp
Z2F0aW9uLXdoaWxlLWRlZmVycmluZy1sb2Fkcy5odG1sCit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoYm9vbCBm
b3JiaWRkZW4sIEpTU3RyaW5nUmVmIHNjaGVtZSkKK3sKKyAgICBDT01QdHI8SVdlYlZpZXdQcml2
YXRlPiB3ZWJWaWV3OworICAgIGlmIChGQUlMRUQoV2ViS2l0Q3JlYXRlSW5zdGFuY2UoX191dWlk
b2YoV2ViVmlldyksIDAsIF9fdXVpZG9mKHdlYlZpZXcpLCByZWludGVycHJldF9jYXN0PHZvaWQq
Kj4oJndlYlZpZXcpKSkpCisgICAgICAgIHJldHVybjsKKworICAgIEJTVFIgc2NoZW1lQlNUUiA9
IEpTU3RyaW5nQ29weUJTVFIoc2NoZW1lKTsKKyAgICB3ZWJWaWV3LT5zZXREb21haW5SZWxheGF0
aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGZvcmJpZGRlbiwgc2NoZW1lQlNUUik7CisgICAgU3lz
RnJlZVN0cmluZyhzY2hlbWVCU1RSKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSh1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSkKK3sKKyAgICBw
cmludGYoIkVSUk9SOiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXBwQ2FjaGVNYXhpbXVtU2l6
ZSgpIG5vdCBpbXBsZW1lbnRlZFxuIik7Cit9CisKK2Jvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIGFuaW1hdGlv
bk5hbWUsIGRvdWJsZSB0aW1lLCBKU1N0cmluZ1JlZiBlbGVtZW50SWQpCit7CisgICAgQ09NUHRy
PElET01Eb2N1bWVudD4gZG9jdW1lbnQ7CisgICAgaWYgKEZBSUxFRChmcmFtZS0+RE9NRG9jdW1l
bnQoJmRvY3VtZW50KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEJTVFIgaWRCU1RS
ID0gSlNTdHJpbmdDb3B5QlNUUihlbGVtZW50SWQpOworICAgIENPTVB0cjxJRE9NRWxlbWVudD4g
ZWxlbWVudDsKKyAgICBIUkVTVUxUIGhyID0gZG9jdW1lbnQtPmdldEVsZW1lbnRCeUlkKGlkQlNU
UiwgJmVsZW1lbnQpOworICAgIFN5c0ZyZWVTdHJpbmcoaWRCU1RSKTsKKyAgICBpZiAoRkFJTEVE
KGhyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQ09NUHRyPElXZWJGcmFtZVByaXZh
dGU+IGZyYW1lUHJpdmF0ZShRdWVyeSwgZnJhbWUpOworICAgIGlmICghZnJhbWVQcml2YXRlKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBCU1RSIG5hbWVCU1RSID0gSlNTdHJpbmdDb3B5
QlNUUihhbmltYXRpb25OYW1lKTsKKyAgICBCT09MIHdhc1J1bm5pbmcgPSBGQUxTRTsKKyAgICBo
ciA9IGZyYW1lUHJpdmF0ZS0+cGF1c2VBbmltYXRpb24obmFtZUJTVFIsIGVsZW1lbnQuZ2V0KCks
IHRpbWUsICZ3YXNSdW5uaW5nKTsKKyAgICBTeXNGcmVlU3RyaW5nKG5hbWVCU1RSKTsKKworICAg
IHJldHVybiBTVUNDRUVERUQoaHIpICYmIHdhc1J1bm5pbmc7Cit9CisKK2Jvb2wgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChKU1N0cmlu
Z1JlZiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSB0aW1lLCBKU1N0cmluZ1JlZiBlbGVtZW50SWQpCit7
CisgICAgQ09NUHRyPElET01Eb2N1bWVudD4gZG9jdW1lbnQ7CisgICAgaWYgKEZBSUxFRChmcmFt
ZS0+RE9NRG9jdW1lbnQoJmRvY3VtZW50KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IEJTVFIgaWRCU1RSID0gSlNTdHJpbmdDb3B5QlNUUihlbGVtZW50SWQpOworICAgIENPTVB0cjxJ
RE9NRWxlbWVudD4gZWxlbWVudDsKKyAgICBIUkVTVUxUIGhyID0gZG9jdW1lbnQtPmdldEVsZW1l
bnRCeUlkKGlkQlNUUiwgJmVsZW1lbnQpOworICAgIFN5c0ZyZWVTdHJpbmcoaWRCU1RSKTsKKyAg
ICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQ09NUHRyPElX
ZWJGcmFtZVByaXZhdGU+IGZyYW1lUHJpdmF0ZShRdWVyeSwgZnJhbWUpOworICAgIGlmICghZnJh
bWVQcml2YXRlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBCU1RSIG5hbWVCU1RSID0g
SlNTdHJpbmdDb3B5QlNUUihwcm9wZXJ0eU5hbWUpOworICAgIEJPT0wgd2FzUnVubmluZyA9IEZB
TFNFOworICAgIGhyID0gZnJhbWVQcml2YXRlLT5wYXVzZVRyYW5zaXRpb24obmFtZUJTVFIsIGVs
ZW1lbnQuZ2V0KCksIHRpbWUsICZ3YXNSdW5uaW5nKTsKKyAgICBTeXNGcmVlU3RyaW5nKG5hbWVC
U1RSKTsKKworICAgIHJldHVybiBTVUNDRUVERUQoaHIpICYmIHdhc1J1bm5pbmc7Cit9CisKK3Vu
c2lnbmVkIExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBj
b25zdAoreworICAgIENPTVB0cjxJV2ViRnJhbWVQcml2YXRlPiBmcmFtZVByaXZhdGUoUXVlcnks
IGZyYW1lKTsKKyAgICBpZiAoIWZyYW1lUHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBVSU5UIG51bWJlciA9IDA7CisgICAgaWYgKEZBSUxFRChmcmFtZVByaXZhdGUtPm51bWJlck9m
QWN0aXZlQW5pbWF0aW9ucygmbnVtYmVyKSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0
dXJuIG51bWJlcjsKK30KKworc3RhdGljIF9ic3RyX3QgYnN0clQoSlNTdHJpbmdSZWYganNTdHJp
bmcpCit7CisgICAgLy8gVGhlIGZhbHNlIHBhcmFtZXRlciB0ZWxscyB0aGUgX2JzdHJfdCBjb25z
dHJ1Y3RvciB0byBhZG9wdCB0aGUgQlNUUiB3ZSBwYXNzIGl0LgorICAgIHJldHVybiBfYnN0cl90
KEpTU3RyaW5nQ29weUJTVFIoanNTdHJpbmcpLCBmYWxzZSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KEpTU3RyaW5nUmVmIHNv
dXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Qcm90b2NvbCwgSlNTdHJpbmdSZWYg
ZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKQoreworICAg
IENPTVB0cjxJV2ViVmlld1ByaXZhdGU+IHdlYlZpZXc7CisgICAgaWYgKEZBSUxFRChXZWJLaXRD
cmVhdGVJbnN0YW5jZShfX3V1aWRvZihXZWJWaWV3KSwgMCwgX191dWlkb2Yod2ViVmlldyksIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmd2ViVmlldykpKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgd2ViVmlldy0+YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoYnN0clQoc291cmNlT3Jp
Z2luKS5HZXRCU1RSKCksIGJzdHJUKGRlc3RpbmF0aW9uUHJvdG9jb2wpLkdldEJTVFIoKSwgYnN0
clQoZGVzdGluYXRpb25Ib3N0KS5HZXRCU1RSKCksIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5z
KTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hp
dGVsaXN0RW50cnkoSlNTdHJpbmdSZWYgc291cmNlT3JpZ2luLCBKU1N0cmluZ1JlZiBkZXN0aW5h
dGlvblByb3RvY29sLCBKU1N0cmluZ1JlZiBkZXN0aW5hdGlvbkhvc3QsIGJvb2wgYWxsb3dEZXN0
aW5hdGlvblN1YmRvbWFpbnMpCit7CisgICAgQ09NUHRyPElXZWJWaWV3UHJpdmF0ZT4gd2ViVmll
dzsKKyAgICBpZiAoRkFJTEVEKFdlYktpdENyZWF0ZUluc3RhbmNlKF9fdXVpZG9mKFdlYlZpZXcp
LCAwLCBfX3V1aWRvZih3ZWJWaWV3KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZ3ZWJWaWV3
KSkpKQorICAgICAgICByZXR1cm47CisKKyAgICB3ZWJWaWV3LT5yZW1vdmVPcmlnaW5BY2Nlc3NX
aGl0ZWxpc3RFbnRyeShic3RyVChzb3VyY2VPcmlnaW4pLkdldEJTVFIoKSwgYnN0clQoZGVzdGlu
YXRpb25Qcm90b2NvbCkuR2V0QlNUUigpLCBic3RyVChkZXN0aW5hdGlvbkhvc3QpLkdldEJTVFIo
KSwgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpOworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRTY3JvbGxiYXJQb2xpY3koSlNTdHJpbmdSZWYgb3JpZW50YXRpb24sIEpTU3Ry
aW5nUmVmIHBvbGljeSkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHQoSlNTdHJpbmdSZWYgc291cmNlLCBib29s
IHJ1bkF0U3RhcnQsIGJvb2wgYWxsRnJhbWVzKQoreworICAgIENPTVB0cjxJV2ViVmlld1ByaXZh
dGU+IHdlYlZpZXc7CisgICAgaWYgKEZBSUxFRChXZWJLaXRDcmVhdGVJbnN0YW5jZShfX3V1aWRv
ZihXZWJWaWV3KSwgMCwgX191dWlkb2Yod2ViVmlldyksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoq
Pigmd2ViVmlldykpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ09NUHRyPElXZWJTY3JpcHRX
b3JsZD4gd29ybGQ7CisgICAgaWYgKEZBSUxFRChXZWJLaXRDcmVhdGVJbnN0YW5jZShfX3V1aWRv
ZihXZWJTY3JpcHRXb3JsZCksIDAsIF9fdXVpZG9mKHdvcmxkKSwgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKio+KCZ3b3JsZCkpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgd2ViVmlldy0+YWRkVXNl
clNjcmlwdFRvR3JvdXAoX2JzdHJfdChMIm9yZy53ZWJraXQuRHVtcFJlbmRlclRyZWUiKS5HZXRC
U1RSKCksIHdvcmxkLmdldCgpLCBic3RyVChzb3VyY2UpLkdldEJTVFIoKSwgMCwgMCwgMCwgMCwg
MCwgcnVuQXRTdGFydCA/IFdlYkluamVjdEF0RG9jdW1lbnRTdGFydCA6IFdlYkluamVjdEF0RG9j
dW1lbnRFbmQpOworfQorCisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJTdHls
ZVNoZWV0KEpTU3RyaW5nUmVmIHNvdXJjZSwgYm9vbCBhbGxGcmFtZXMpCit7CisgICAgQ09NUHRy
PElXZWJWaWV3UHJpdmF0ZT4gd2ViVmlldzsKKyAgICBpZiAoRkFJTEVEKFdlYktpdENyZWF0ZUlu
c3RhbmNlKF9fdXVpZG9mKFdlYlZpZXcpLCAwLCBfX3V1aWRvZih3ZWJWaWV3KSwgcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKio+KCZ3ZWJWaWV3KSkpKQorICAgICAgICByZXR1cm47CisKKyAgICBDT01Q
dHI8SVdlYlNjcmlwdFdvcmxkPiB3b3JsZDsKKyAgICBpZiAoRkFJTEVEKFdlYktpdENyZWF0ZUlu
c3RhbmNlKF9fdXVpZG9mKFdlYlNjcmlwdFdvcmxkKSwgMCwgX191dWlkb2Yod29ybGQpLCByZWlu
dGVycHJldF9jYXN0PHZvaWQqKj4oJndvcmxkKSkpKQorICAgICAgICByZXR1cm47CisKKyAgICB3
ZWJWaWV3LT5hZGRVc2VyU3R5bGVTaGVldFRvR3JvdXAoX2JzdHJfdChMIm9yZy53ZWJraXQuRHVt
cFJlbmRlclRyZWUiKS5HZXRCU1RSKCksIHdvcmxkLmdldCgpLCBic3RyVChzb3VyY2UpLkdldEJT
VFIoKSwgMCwgMCwgMCwgMCwgMCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dERldmVsb3BlckV4dHJhc0VuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIENPTVB0cjxJV2Vi
Vmlldz4gd2ViVmlldzsKKyAgICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3KSkp
CisgICAgICAgIHJldHVybjsKKworICAgIENPTVB0cjxJV2ViUHJlZmVyZW5jZXM+IHByZWZlcmVu
Y2VzOworICAgIGlmIChGQUlMRUQod2ViVmlldy0+cHJlZmVyZW5jZXMoJnByZWZlcmVuY2VzKSkp
CisgICAgICAgIHJldHVybjsKKworICAgIENPTVB0cjxJV2ViUHJlZmVyZW5jZXNQcml2YXRlPiBw
cmVmc1ByaXZhdGUoUXVlcnksIHByZWZlcmVuY2VzKTsKKyAgICBpZiAoIXByZWZzUHJpdmF0ZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgcHJlZnNQcml2YXRlLT5zZXREZXZlbG9wZXJFeHRyYXNF
bmFibGVkKGVuYWJsZWQpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBc3lu
Y2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sKQoreworICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgdGhpcy4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2hvd1dlYkluc3Bl
Y3RvcigpCit7CisgICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OworICAgIGlmIChGQUlMRUQo
ZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ09NUHRy
PElXZWJWaWV3UHJpdmF0ZT4gdmlld1ByaXZhdGUoUXVlcnksIHdlYlZpZXcpOworICAgIGlmICgh
dmlld1ByaXZhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIENPTVB0cjxJV2ViSW5zcGVjdG9y
PiBpbnNwZWN0b3I7CisgICAgaWYgKFNVQ0NFRURFRCh2aWV3UHJpdmF0ZS0+aW5zcGVjdG9yKCZp
bnNwZWN0b3IpKSkKKyAgICAgICAgaW5zcGVjdG9yLT5zaG93KCk7Cit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmNsb3NlV2ViSW5zcGVjdG9yKCkKK3sKKyAgICBDT01QdHI8SVdlYlZp
ZXc+IHdlYlZpZXc7CisgICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmlldykpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBDT01QdHI8SVdlYlZpZXdQcml2YXRlPiB2aWV3UHJpdmF0
ZShRdWVyeSwgd2ViVmlldyk7CisgICAgaWYgKCF2aWV3UHJpdmF0ZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgQ09NUHRyPElXZWJJbnNwZWN0b3I+IGluc3BlY3RvcjsKKyAgICBpZiAoRkFJTEVE
KHZpZXdQcml2YXRlLT5pbnNwZWN0b3IoJmluc3BlY3RvcikpKQorICAgICAgICByZXR1cm47CisK
KyAgICBpbnNwZWN0b3ItPmNsb3NlKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IobG9uZyBjYWxsSWQsIEpTU3RyaW5nUmVmIHNjcmlwdCkK
K3sKKyAgICBDT01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7CisgICAgaWYgKEZBSUxFRChmcmFtZS0+
d2ViVmlldygmd2ViVmlldykpKQorICAgICAgICByZXR1cm47CisKKyAgICBDT01QdHI8SVdlYlZp
ZXdQcml2YXRlPiB2aWV3UHJpdmF0ZShRdWVyeSwgd2ViVmlldyk7CisgICAgaWYgKCF2aWV3UHJp
dmF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ09NUHRyPElXZWJJbnNwZWN0b3I+IGluc3Bl
Y3RvcjsKKyAgICBpZiAoRkFJTEVEKHZpZXdQcml2YXRlLT5pbnNwZWN0b3IoJmluc3BlY3Rvcikp
KQorICAgICAgICByZXR1cm47CisKKyAgICBDT01QdHI8SVdlYkluc3BlY3RvclByaXZhdGU+IGlu
c3BlY3RvclByaXZhdGUoUXVlcnksIGluc3BlY3Rvcik7CisgICAgaWYgKCFpbnNwZWN0b3JQcml2
YXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnNwZWN0b3JQcml2YXRlLT5ldmFsdWF0ZUlu
RnJvbnRlbmQoY2FsbElkLCBic3RyVChzY3JpcHQpLkdldEJTVFIoKSk7Cit9CisKK3R5cGVkZWYg
SGFzaE1hcDx1bnNpZ25lZCwgQ09NUHRyPElXZWJTY3JpcHRXb3JsZD4gPiBXb3JsZE1hcDsKK3N0
YXRpYyBXb3JsZE1hcCYgd29ybGRNYXAoKQoreworICAgIHN0YXRpYyBXb3JsZE1hcCYgbWFwID0g
Km5ldyBXb3JsZE1hcDsKKyAgICByZXR1cm4gbWFwOworfQorCit1bnNpZ25lZCB3b3JsZElERm9y
V29ybGQoSVdlYlNjcmlwdFdvcmxkKiB3b3JsZCkKK3sKKyAgICBXb3JsZE1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gd29ybGRNYXAoKS5lbmQoKTsKKyAgICBmb3IgKFdvcmxkTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IHdvcmxkTWFwKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAg
ICAgIGlmIChpdC0+c2Vjb25kID09IHdvcmxkKQorICAgICAgICAgICAgcmV0dXJuIGl0LT5maXJz
dDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSh1bnNpZ25lZCB3
b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkKK3sK
KyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIEpT
T2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0KQoreworICAgIENPTVB0
cjxJV2ViRnJhbWVQcml2YXRlPiBmcmFtZVByaXZhdGUoUXVlcnksIGZyYW1lKTsKKyAgICBpZiAo
IWZyYW1lUHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQSB3b3JsZElEIG9mIDAg
YWx3YXlzIGNvcnJlc3BvbmRzIHRvIGEgbmV3IHdvcmxkLiBBbnkgb3RoZXIgd29ybGRJRCBjb3Jy
ZXNwb25kcyB0byBhIHdvcmxkCisgICAgLy8gdGhhdCBpcyBjcmVhdGVkIG9uY2UgYW5kIGNhY2hl
ZCBmb3JldmVyLgorICAgIENPTVB0cjxJV2ViU2NyaXB0V29ybGQ+IHdvcmxkOworICAgIGlmICgh
d29ybGRJRCkgeworICAgICAgICBpZiAoRkFJTEVEKFdlYktpdENyZWF0ZUluc3RhbmNlKF9fdXVp
ZG9mKFdlYlNjcmlwdFdvcmxkKSwgMCwgX191dWlkb2Yod29ybGQpLCByZWludGVycHJldF9jYXN0
PHZvaWQqKj4oJndvcmxkKSkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIENPTVB0cjxJV2ViU2NyaXB0V29ybGQ+JiB3b3JsZFNsb3QgPSB3b3JsZE1hcCgpLmFk
ZCh3b3JsZElELCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICBpZiAoIXdvcmxkU2xvdCAm
JiBGQUlMRUQoV2ViS2l0Q3JlYXRlSW5zdGFuY2UoX191dWlkb2YoV2ViU2NyaXB0V29ybGQpLCAw
LCBfX3V1aWRvZih3b3JsZFNsb3QpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJndvcmxkU2xv
dCkpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgd29ybGQgPSB3b3JsZFNsb3Q7Cisg
ICAgfQorCisgICAgQlNUUiByZXN1bHQ7CisgICAgaWYgKEZBSUxFRChmcmFtZVByaXZhdGUtPnN0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRJblNjcmlwdFdvcmxkKHdvcmxkLmdldCgpLCBnbG9i
YWxPYmplY3QsIGJzdHJUKHNjcmlwdCkuR2V0QlNUUigpLCAmcmVzdWx0KSkpCisgICAgICAgIHJl
dHVybjsKKyAgICBTeXNGcmVlU3RyaW5nKHJlc3VsdCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnJlbW92ZUFsbFZpc2l0ZWRMaW5rcygpCit7CisgICAgQ09NUHRyPElXZWJIaXN0
b3J5PiBoaXN0b3J5OworICAgIGlmIChGQUlMRUQoV2ViS2l0Q3JlYXRlSW5zdGFuY2UoQ0xTSURf
V2ViSGlzdG9yeSwgMCwgX191dWlkb2YoaGlzdG9yeSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoq
PigmaGlzdG9yeSkpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ09NUHRyPElXZWJIaXN0b3J5
PiBzaGFyZWRIaXN0b3J5OworICAgIGlmIChGQUlMRUQoaGlzdG9yeS0+b3B0aW9uYWxTaGFyZWRI
aXN0b3J5KCZzaGFyZWRIaXN0b3J5KSkgfHwgIXNoYXJlZEhpc3RvcnkpCisgICAgICAgIHJldHVy
bjsKKworICAgIENPTVB0cjxJV2ViSGlzdG9yeVByaXZhdGU+IHNoYXJlZEhpc3RvcnlQcml2YXRl
OworICAgIGlmIChGQUlMRUQoc2hhcmVkSGlzdG9yeS0+UXVlcnlJbnRlcmZhY2UoJnNoYXJlZEhp
c3RvcnlQcml2YXRlKSkpCisgICAgICAgIHJldHVybjsKKworICAgIHNoYXJlZEhpc3RvcnlQcml2
YXRlLT5yZW1vdmVBbGxWaXNpdGVkTGlua3MoKTsKK30KKworaW50IExheW91dFRlc3RDb250cm9s
bGVyOjpudW1iZXJPZlBhZ2VzKGZsb2F0IHBhZ2VXaWR0aEluUGl4ZWxzLCBmbG9hdCBwYWdlSGVp
Z2h0SW5QaXhlbHMpCit7CisgICAgQ09NUHRyPElXZWJGcmFtZVByaXZhdGU+IGZyYW1lUHJpdmF0
ZShRdWVyeSwgZnJhbWUpOworICAgIGlmICghZnJhbWVQcml2YXRlKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIGludCBwYWdlTnVtYmVyID0gLTE7CisgICAgaWYgKEZBSUxFRChmcmFtZVByaXZh
dGUtPm51bWJlck9mUGFnZXMocGFnZVdpZHRoSW5QaXhlbHMsIHBhZ2VIZWlnaHRJblBpeGVscywg
JnBhZ2VOdW1iZXIpKSkKKyAgICAgICAgcGFnZU51bWJlciA9IC0xOworICAgIHJldHVybiBwYWdl
TnVtYmVyOworfQorCitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnBhZ2VQcm9wZXJ0eShjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIGludCBwYWdlTnVtYmVy
KSBjb25zdAoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICByZXR1cm4gSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+KCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmFwaVRlc3ROZXdXaW5kb3dEYXRhTG9hZEJhc2VVUkwoSlNTdHJpbmdSZWYgdXRmOERhdGEsIEpT
U3RyaW5nUmVmIGJhc2VVUkwpCit7CisKK30KKworSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExh
eW91dFRlc3RDb250cm9sbGVyOjpwYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVscyhpbnQgcGFnZU51
bWJlciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbWFyZ2luVG9wLCBpbnQgbWFyZ2luUmln
aHQsIGludCBtYXJnaW5Cb3R0b20sIGludCBtYXJnaW5MZWZ0KSBjb25zdAoreworICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+KCk7Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFwaVRlc3RHb1RvQ3VycmVudEJhY2tGb3J3
YXJkSXRlbSgpCit7CisgICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OworICAgIGlmIChGQUlM
RUQoZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ09N
UHRyPElXZWJCYWNrRm9yd2FyZExpc3Q+IGJhY2tGb3J3YXJkTGlzdDsKKyAgICBpZiAoRkFJTEVE
KHdlYlZpZXctPmJhY2tGb3J3YXJkTGlzdCgmYmFja0ZvcndhcmRMaXN0KSkpCisgICAgICAgIHJl
dHVybjsKKworICAgIENPTVB0cjxJV2ViSGlzdG9yeUl0ZW0+IGl0ZW07CisgICAgaWYgKEZBSUxF
RChiYWNrRm9yd2FyZExpc3QtPmN1cnJlbnRJdGVtKCZpdGVtKSkpCisgICAgICAgIHJldHVybjsK
KworICAgIEJPT0wgc3VjY2VzczsKKyAgICB3ZWJWaWV3LT5nb1RvQmFja0ZvcndhcmRJdGVtKGl0
ZW0uZ2V0KCksICZzdWNjZXNzKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
V2ViVmlld0VkaXRhYmxlKGJvb2wpCit7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmF1dGhlbnRpY2F0ZVNlc3Npb24oSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmLCBKU1N0cmluZ1Jl
ZikKK3sKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWJvcnRNb2RhbCgpCit7Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNlcmlhbGl6ZUhUVFBMb2Fkcyhib29s
KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnN5bmNMb2NhbFN0b3JhZ2UoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlm
aWNhdGlvbnModW5zaWduZWQgbnVtYmVyKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUFsbExvY2FsU3RvcmFnZSgpCit7
CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30KKworSlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoSlNDb250ZXh0UmVmIGNvbnRleHQpCit7
CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7Cit9CisKK2xvbmcgbG9uZyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bG9jYWxT
dG9yYWdlRGlza1VzYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIG9yaWdpbklkZW50aWZpZXIpCit7
CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBzdXBwb3J0IGdldHRpbmcgbG9jYWwgc3RvcmFn
ZSBkaXNrIHVzYWdlIGZvciBhbiBvcmlnaW4uCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbihKU1N0cmluZ1Jl
ZiBVUkwpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwoZG91YmxlIG1pbmltdW1UaW1lcklu
dGVydmFsKQoreworICAgIENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsKKyAgICBpZiAoRkFJTEVE
KGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3KSkpCisgICAgICAgIHJldHVybjsKKworICAgIENPTVB0
cjxJV2ViVmlld1ByaXZhdGU+IHZpZXdQcml2YXRlKFF1ZXJ5LCB3ZWJWaWV3KTsKKyAgICBpZiAo
IXZpZXdQcml2YXRlKQorICAgICAgICByZXR1cm47CisKKyAgICB2aWV3UHJpdmF0ZS0+c2V0TWlu
aW11bVRpbWVySW50ZXJ2YWwobWluaW11bVRpbWVySW50ZXJ2YWwpOworfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRUZXh0RGlyZWN0aW9uKEpTU3RyaW5nUmVmIGRpcmVjdGlvbikK
K3sKKyAgICBDT01QdHI8SVdlYkZyYW1lUHJpdmF0ZT4gZnJhbWVQcml2YXRlKFF1ZXJ5LCBmcmFt
ZSk7CisgICAgaWYgKCFmcmFtZVByaXZhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGZyYW1l
UHJpdmF0ZS0+c2V0VGV4dERpcmVjdGlvbihic3RyVChkaXJlY3Rpb24pLkdldEJTVFIoKSk7Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZENocm9tZUlucHV0RmllbGQoKQorewor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZW1vdmVDaHJvbWVJbnB1dEZpZWxkKCkK
K3sKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Zm9jdXNXZWJWaWV3KCkKK3sKK30K
Kwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QmFja2luZ1NjYWxlRmFjdG9yKGRvdWJs
ZSkKK3sKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2ltdWxhdGVEZXNrdG9wTm90
aWZpY2F0aW9uQ2xpY2soSlNTdHJpbmdSZWYgdGl0bGUpCit7CisgICAgLy8gRklYTUU6IEltcGxl
bWVudC4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVzZXRQYWdlVmlzaWJpbGl0
eSgpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRQYWdlVmlzaWJpbGl0eShjb25zdCBjaGFyKikKK3sKKyAgICAvLyBG
SVhNRTogSW1wbGVtZW50IHRoaXMuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKGJvb2wpCit7CisgICAgLy8gRklYTUU6IElt
cGxlbWVudCB0aGlzLgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZW5kV2ViSW50
ZW50UmVzcG9uc2UoSlNTdHJpbmdSZWYpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlz
LgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxpdmVyV2ViSW50ZW50KEpTU3Ry
aW5nUmVmLCBKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYpCit7CisgICAgLy8gRklYTUU6IEltcGxl
bWVudCB0aGlzLgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTdG9yYWdlRGF0
YWJhc2VJZGxlSW50ZXJ2YWwoZG91YmxlKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhp
cy4KK30KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9UZXN0UnVubmVyV2luLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vVGVzdFJ1bm5lcldpbi5jcHAJ
KHJldmlzaW9uIDEyNTMzNSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9UZXN0UnVubmVy
V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogICovCiAKICNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgorI2luY2x1ZGUg
IlRlc3RSdW5uZXIuaCIKIAogI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCiAjaW5jbHVkZSAi
RWRpdGluZ0RlbGVnYXRlLmgiCkBAIC00Miw4ICs0Miw4IEBACiAjaW5jbHVkZSA8V2ViS2l0L1dl
YktpdC5oPgogI2luY2x1ZGUgPFdlYktpdC9XZWJLaXRDT01BUEkuaD4KICNpbmNsdWRlIDxjb211
dGlsLmg+Ci0jaW5jbHVkZSA8c2hsd2FwaS5oPgogI2luY2x1ZGUgPHNobGd1aWQuaD4KKyNpbmNs
dWRlIDxzaGx3YXBpLmg+CiAjaW5jbHVkZSA8c2hvYmppZGwuaD4KICNpbmNsdWRlIDxzdHJpbmc+
CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KQEAgLTYyMyw3ICs2MjMsNyBAQCB2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5bGVTCiAgICAgaWYgKEZBSUxFRCh3ZWJWaWV3
LT5wcmVmZXJlbmNlcygmcHJlZmVyZW5jZXMpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICBwcmVm
ZXJlbmNlcy0+c2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKGZsYWcpOworICAgIHByZWZlcmVuY2Vz
LT5zZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoZmxhZyk7CiB9CiAKIGJvb2wgYXBwZW5kQ29tcG9u
ZW50VG9QYXRoKHdzdHJpbmcmIHBhdGgsIGNvbnN0IHdzdHJpbmcmIGNvbXBvbmVudCkKQEAgLTY4
MSw3ICs2ODEsNyBAQCBzdGF0aWMgYm9vbCByZXNvbHZlQ3lnd2luUGF0aChjb25zdCB3c3RyCiB7
CiAgICAgd3N0cmluZyBmaWxlUHJvdG9jb2wgPSBMImZpbGU6Ly8iOwogICAgIGJvb2wgaXNGaWxl
UHJvdG9jb2wgPSBjeWd3aW5QYXRoLmZpbmQoZmlsZVByb3RvY29sKSAhPSBzdHJpbmc6Om5wb3M7
Ci0gICAgaWYgKGN5Z3dpblBhdGhbaXNGaWxlUHJvdG9jb2wgPyA3IDogMF0gIT0gJy8nKSAgLy8g
ZW5zdXJlIHBhdGggaXMgYWJzb2x1dGUKKyAgICBpZiAoY3lnd2luUGF0aFtpc0ZpbGVQcm90b2Nv
bCA/IDcgOiAwXSAhPSAnLycpIC8vIGVuc3VyZSBwYXRoIGlzIGFic29sdXRlCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIC8vIEdldCB0aGUgUm9vdCBwYXRoLgpJbmRleDogVG9vbHMvRHVt
cFJlbmRlclRyZWUvd2luL1VJRGVsZWdhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL3dpbi9VSURlbGVnYXRlLmNwcAkocmV2aXNpb24gMTI1MzM1KQorKysgVG9vbHMv
RHVtcFJlbmRlclRyZWUvd2luL1VJRGVsZWdhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw5
ICszMiw4IEBACiAjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWUuaCIKICNpbmNsdWRlICJEcmFnZ2lu
Z0luZm8uaCIKICNpbmNsdWRlICJFdmVudFNlbmRlci5oIgotI2luY2x1ZGUgIkxheW91dFRlc3RD
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRFJURGVza3RvcE5vdGlmaWNhdGlvblByZXNlbnRlci5o
IgotCisjaW5jbHVkZSAiVGVzdFJ1bm5lci5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ09NUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvRHVtcFJlbmRlclRyZWVXeC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvRHVtcFJlbmRlclRyZWVXeC5jcHAJ
KHJldmlzaW9uIDEyNTMzNSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0R1bXBSZW5kZXJU
cmVlV3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWUuaCIKIAotI2luY2x1ZGUgIkxheW91dFRl
c3RDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiVGVzdFJ1bm5lci5oIgogI2luY2x1ZGUgIldvcmtR
dWV1ZS5oIgogI2luY2x1ZGUgIldvcmtRdWV1ZUl0ZW0uaCIKIApJbmRleDogVG9vbHMvRHVtcFJl
bmRlclRyZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHAJKHJldmlzaW9u
IDEyNTMzNSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250cm9sbGVy
V3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA4IEtldmluIE9sbGl2aWVyIDxrZXZpbm9AdGhlb2xsaXZpZXJzLmNvbT4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKLQotI2luY2x1
ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCi0jaW5jbHVkZSAiV29ya1F1ZXVlLmgiCi0jaW5jbHVkZSAi
V29ya1F1ZXVlSXRlbS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KLQotI2luY2x1ZGUgPHN0
ZGlvLmg+Ci0KLQotCi1MYXlvdXRUZXN0Q29udHJvbGxlcjo6fkxheW91dFRlc3RDb250cm9sbGVy
KCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmFkZERpc2FsbG93ZWRVUkwoSlNTdHJpbmdSZWYgdXJsKQotewotICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJCYWNrRm9y
d2FyZExpc3QoKQotewotfQotCi1KU1N0cmluZ1JlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29w
eURlY29kZWRIb3N0TmFtZShKU1N0cmluZ1JlZiBuYW1lKQotewotICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKLSAgICByZXR1cm4gMDsKLX0KLQotSlNTdHJpbmdSZWYgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmNvcHlFbmNvZGVkSG9zdE5hbWUoSlNTdHJpbmdSZWYgbmFtZSkKLXsKLSAgICAvLyBGSVhN
RTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmRpc3BhdGNoUGVuZGluZ0xvYWRSZXF1ZXN0cygpCi17Ci0gICAgLy8gRklYTUU6IEltcGxl
bWVudCBmb3IgdGVzdGluZyBmaXggZm9yIDY3Mjc0OTUKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6ZGlzcGxheSgpCi17Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Omtl
ZXBXZWJIaXN0b3J5KCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6Om5vdGlmeURvbmUoKQotewotICAgIGlmIChtX3dhaXRUb0R1bXAg
JiYgIVdvcmtRdWV1ZTo6c2hhcmVkKCktPmNvdW50KCkpCi0gICAgICAgIG5vdGlmeURvbmVGaXJl
ZCgpOwotICAgIG1fd2FpdFRvRHVtcCA9IGZhbHNlOwotfQotCi1KU1N0cmluZ1JlZiBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6cGF0aFRvTG9jYWxSZXNvdXJjZShKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNTdHJpbmdSZWYgdXJsKQotewotICAgIC8vIEZ1bmN0aW9uIGludHJvZHVjZWQgaW4gcjI4Njkw
LiBUaGlzIG1heSBuZWVkIHNwZWNpYWwtY2FzaW5nIG9uIFdpbmRvd3MuCi0gICAgcmV0dXJuIEpT
U3RyaW5nUmV0YWluKHVybCk7IC8vIERvIG5vdGhpbmcgb24gVW5peC4KLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6cXVldWVMb2FkKEpTU3RyaW5nUmVmIHVybCwgSlNTdHJpbmdSZWYg
dGFyZ2V0KQotewotICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIHJlc29sdmUgcmVsYXRpdmUgVVJM
cyBoZXJlCi0gICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+cXVldWUobmV3IExvYWRJdGVtKHVybCwg
dGFyZ2V0KSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFjY2VwdHNFZGl0
aW5nKGJvb2wgYWNjZXB0c0VkaXRpbmcpCi17Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldEFsd2F5c0FjY2VwdENvb2tpZXMoYm9vbCBhbHdheXNBY2NlcHRDb29raWVzKQotewot
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyAoYW5kIHJlc3RvcmUgdGhlIGRlZmF1bHQgdmFs
dWUgYmVmb3JlIHJ1bm5pbmcgZWFjaCB0ZXN0IGluIER1bXBSZW5kZXJUcmVlLmNwcCkuCi19Ci0K
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGJvb2ws
IGJvb2wpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRNYWluRnJhbWVJc0ZpcnN0UmVzcG9uZGVyKGJvb2wgZmxhZykKLXsKLSAg
ICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhib29sIGN5Y2xlcykKLXsKLSAgICAvLyBGSVhN
RTogaW1wbGVtZW50Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZURhc2hi
b2FyZENvbXBhdGliaWxpdHlNb2RlKGJvb2wgZmxhZykKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVt
ZW50Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZXJTdHlsZVNoZWV0RW5h
YmxlZChib29sIGZsYWcpCi17Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVz
ZXJTdHlsZVNoZWV0TG9jYXRpb24oSlNTdHJpbmdSZWYgcGF0aCkKLXsKLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0VmFsdWVGb3JVc2VyKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U1ZhbHVlUmVmIGVsZW1lbnQsIEpTU3RyaW5nUmVmIHZhbHVlKQotewotICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Vmlld01vZGVNZWRp
YUZlYXR1cmUoSlNTdHJpbmdSZWYgbW9kZSkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdpbmRvd0lzS2V5KGJvb2wgd2luZG93
SXNLZXkpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQoYm9vbCBmbGFnKQotewotICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
V2FpdFRvRHVtcChib29sIHdhaXRVbnRpbERvbmUpCi17Ci0gICAgc3RhdGljIGNvbnN0IGludCB0
aW1lb3V0U2Vjb25kcyA9IDEwOwotCi0gICAgbV93YWl0VG9EdW1wID0gd2FpdFVudGlsRG9uZTsK
LX0KLQotaW50IExheW91dFRlc3RDb250cm9sbGVyOjp3aW5kb3dDb3VudCgpCi17Ci0gICAgLy8g
RklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiAxOwotfQotCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5h
YmxlZCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQoYm9vbCBlbmFibGVkKQot
ewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0WFNTQXVkaXRvckVuYWJsZWQoYm9vbCBlbmFibGVkKQotewotICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RnJhbWVGbGF0dGVu
aW5nRW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21G
aWxlVVJMcyhib29sIGVuYWJsZWQpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMo
Ym9vbCBlbmFibGVkKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoYm9vbCBmbGFn
KQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0QXV0b2ZpbGxlZChKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYgZWxlbWVudCwgYm9v
bCBpc0F1dG9maWxsZWQpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRQb3B1cEJsb2NraW5nRW5hYmxlZChib29sIHBvcHVwQmxv
Y2tpbmdFbmFibGVkKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0UGx1Z2luc0VuYWJsZWQoYm9vbCBmbGFnKQotewotICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQKLX0KLQotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZWxlbWVu
dERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIGlkKSAKLXsKLSAg
ICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpleGVjQ29tbWFuZChKU1N0cmluZ1JlZiBuYW1lLCBKU1N0cmluZ1Jl
ZiB2YWx1ZSkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldExvY2F0aW9uKEpTU3RyaW5n
UmVmIGpzVVJMKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6Y2xlYXJQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXQoKQotewotICAgIC8v
IEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJB
bGxBcHBsaWNhdGlvbkNhY2hlcygpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBzdXBw
b3J0IGFwcGxpY2F0aW9uIGNhY2hlIHF1b3Rhcy4KLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6Y2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIHVybCkKLXsK
LSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIHN1cHBvcnQgZGVsZXRpbmcgYWxsIGFwcGxpY2F0
aW9uIGNhY2hlIGZvciBhbiBvcmlnaW4uCi19Ci0KLWxvbmcgbG9uZyBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6bG9jYWxTdG9yYWdlRGlza1VzYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIG9yaWdpbklk
ZW50aWZpZXIpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBzdXBwb3J0IGdldHRpbmcg
ZGlzayB1c2FnZSBpbiBieXRlcyBmb3IgYW4gb3JpZ2luLgotICAgIHJldHVybiAwOwotfQotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEo
dW5zaWduZWQgbG9uZyBsb25nIHF1b3RhKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8g
c3VwcG9ydCBhcHBsaWNhdGlvbiBjYWNoZSBxdW90YXMuCi19Ci0KLWxvbmcgbG9uZyBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6YXBwbGljYXRpb25DYWNoZURpc2tVc2FnZUZvck9yaWdpbihKU1N0cmlu
Z1JlZiBvcmlnaW4pCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBzdXBwb3J0IGdldHRp
bmcgZGlzayB1c2FnZSBieSBhbGwgYXBwbGljYXRpb24gY2FjaGVzIGZvciBhbiBvcmlnaW4uCi0g
ICAgcmV0dXJuIDA7Ci19Ci0KLQotSlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3Jp
Z2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKEpTQ29udGV4dFJlZiBjb250ZXh0KQotewotICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdG8gZ2V0IG9yaWdpbnMgdGhhdCBoYXZlIGFwcGxpY2F0aW9uIGNh
Y2hlcy4KLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xl
YXJBbGxEYXRhYmFzZXMoKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLSAKLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERhdGFiYXNlUXVvdGEodW5zaWduZWQgbG9uZyBsb25n
IHF1b3RhKQoteyAgICAKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmdvQmFjaygpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudCB0byBl
bmFibGUgbG9hZGVyL25hdmlnYXRpb24td2hpbGUtZGVmZXJyaW5nLWxvYWRzLmh0bWwKLX0KLQot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGVmZXJzTG9hZGluZyhib29sKQotewotICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQgdG8gZW5hYmxlIGxvYWRlci9uYXZpZ2F0aW9uLXdoaWxlLWRl
ZmVycmluZy1sb2Fkcy5odG1sCi19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERv
bWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoYm9vbCwgSlNTdHJpbmdSZWYpCi17
Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRBcHBDYWNoZU1heGltdW1TaXplKHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKQotewotICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdW5zaWduZWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IGltcGxl
bWVudAotICAgIHJldHVybiAwOwotfQotCi11bnNpZ25lZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
d29ya2VyVGhyZWFkQ291bnQoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAg
ICByZXR1cm4gMDsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2VsZWN0VHJh
aWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChib29sIGZsYWcpCi17Ci0gICAgLy8gRklYTUU6IGltcGxl
bWVudAotfQotCi1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZVRyYW5zaXRpb25BdFRp
bWVPbkVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgcHJvcGVydHlOYW1lLCBkb3VibGUgdGltZSwg
SlNTdHJpbmdSZWYgZWxlbWVudElkKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tEZXZp
Y2VPcmllbnRhdGlvbihib29sIGNhblByb3ZpZGVBbHBoYSwgZG91YmxlIGFscGhhLCBib29sIGNh
blByb3ZpZGVCZXRhLCBkb3VibGUgYmV0YSwgYm9vbCBjYW5Qcm92aWRlR2FtbWEsIGRvdWJsZSBn
YW1tYSkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBEZXZpY2VPcmllbnRhdGlvbiBs
YXlvdXQgdGVzdHMuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zMDMzNS4KLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dl
b2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3Vi
bGUgYWNjdXJhY3kpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgR2VvbG9jYXRpb24g
bGF5b3V0IHRlc3RzLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjgyNjQuCi19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tH
ZW9sb2NhdGlvbkVycm9yKGludCBjb2RlLCBKU1N0cmluZ1JlZiBtZXNzYWdlKQotewotICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgZm9yIEdlb2xvY2F0aW9uIGxheW91dCB0ZXN0cy4KLSAgICAvLyBT
ZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MjY0LgotfQotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCBh
bGxvdykKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBHZW9sb2NhdGlvbiBsYXlvdXQg
dGVzdHMuCi0gICAgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29tbW9uKGFsbG93KTsKLX0KLQot
aW50IExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1p
c3Npb25SZXF1ZXN0cygpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgR2VvbG9jYXRp
b24gbGF5b3V0IHRlc3RzLgotICAgIHJldHVybiAtMTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6YWRkTW9ja1NwZWVjaElucHV0UmVzdWx0KEpTU3RyaW5nUmVmIHJlc3VsdCwgZG91
YmxlIGNvbmZpZGVuY2UsIEpTU3RyaW5nUmVmIGxhbmd1YWdlKQotewotICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgZm9yIHNwZWVjaCBpbnB1dCBsYXlvdXQgdGVzdHMuCi0gICAgLy8gU2VlIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4KLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja1NwZWVjaElucHV0RHVtcFJlY3QoYm9vbCBmbGFnKQot
ewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIHNwZWVjaCBpbnB1dCBsYXlvdXQgdGVzdHMu
Ci0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTQ4
NS4KLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhcnRTcGVlY2hJbnB1dChKU0Nv
bnRleHRSZWYgaW5wdXRFbGVtZW50KQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIHNw
ZWVjaCBpbnB1dCBsYXlvdXQgdGVzdHMuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4KLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0SWNvbkRhdGFiYXNlRW5hYmxlZChib29sIGljb25EYXRhYmFzZUVuYWJsZWQpCi17Ci0g
ICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotCi1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjpw
YXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBhbmltYXRpb25O
YW1lLCBkb3VibGUgdGltZSwgSlNTdHJpbmdSZWYgZWxlbWVudElkKQotewotICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldENhY2hlTW9kZWwoaW50KQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0K
LQotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6aXNDb21tYW5kRW5hYmxlZChKU1N0cmluZ1Jl
ZiAvKm5hbWUqLykKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1zaXplX3QgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndlYkhpc3RvcnlJdGVtQ291bnQo
KQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6d2FpdEZvclBvbGljeURlbGVnYXRlKCkKLXsKLSAgICAvLyBG
SVhNRTogSW1wbGVtZW50IHRoaXMuCi19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om92
ZXJyaWRlUHJlZmVyZW5jZShKU1N0cmluZ1JlZiAvKiBrZXkgKi8sIEpTU3RyaW5nUmVmIC8qIHZh
bHVlICovKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6YWRkVXNlclNjcmlwdChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgcnVuQXRT
dGFydCwgYm9vbCBhbGxGcmFtZXMpCi17Ci0gICAgcHJpbnRmKCJMYXlvdXRUZXN0Q29udHJvbGxl
cjo6YWRkVXNlclNjcmlwdCBub3QgaW1wbGVtZW50ZWQuXG4iKTsKLX0KLQotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6YWRkVXNlclN0eWxlU2hlZXQoSlNTdHJpbmdSZWYgc291cmNlLCBib29s
IGFsbEZyYW1lcykKLXsKLSAgICBwcmludGYoIkxheW91dFRlc3RDb250cm9sbGVyOjphZGRVc2Vy
U3R5bGVTaGVldCBub3QgaW1wbGVtZW50ZWQuXG4iKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2hvd1dlYkluc3BlY3RvcigpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0
aGlzLgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbG9zZVdlYkluc3BlY3Rvcigp
Ci17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgotfQotCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpldmFsdWF0ZUluV2ViSW5zcGVjdG9yKGxvbmcgY2FsbElkLCBKU1N0cmluZ1Jl
ZiBzY3JpcHQpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgotfQotCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpyZW1vdmVBbGxWaXNpdGVkTGlua3MoKQotewotICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgdGhpcy4KLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZh
bHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSh1bnNpZ25lZCB3b3JsZElE
LCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkKLXsKLQotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3Js
ZCh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVm
IHNjcmlwdCkKLXsKLQotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNhYmxlSW1h
Z2VMb2FkaW5nKCkKLXsKLQotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRPcmln
aW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShKU1N0cmluZ1JlZiBzb3VyY2VPcmlnaW4sIEpTU3RyaW5n
UmVmIGRlc3RpbmF0aW9uUHJvdG9jb2wsIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9uSG9zdCwgYm9v
bCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucykKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50
Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRl
bGlzdEVudHJ5KEpTU3RyaW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgZGVzdGluYXRp
b25Qcm90b2NvbCwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGlu
YXRpb25TdWJkb21haW5zKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2Nyb2xsYmFyUG9saWN5KEpTU3RyaW5nUmVmIG9yaWVu
dGF0aW9uLCBKU1N0cmluZ1JlZiBwb2xpY3kpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAot
fQotCi1pbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGFnZXMoZmxvYXQsIGZsb2F0
KQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gLTE7Ci19Ci0KLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmFwaVRlc3ROZXdXaW5kb3dEYXRhTG9hZEJhc2VVUkwoSlNT
dHJpbmdSZWYgdXRmOERhdGEsIEpTU3RyaW5nUmVmIGJhc2VVUkwpCi17Ci0KLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6YXBpVGVzdEdvVG9DdXJyZW50QmFja0ZvcndhcmRJdGVtKCkK
LXsKLQotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTcGF0aWFsTmF2aWdhdGlv
bkVuYWJsZWQoYm9vbCkKLXsKLQotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRX
ZWJWaWV3RWRpdGFibGUoYm9vbCkKLXsKLX0KLQotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
Y2FsbFNob3VsZENsb3NlT25XZWJWaWV3KCkKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bGF5ZXJUcmVlQXNU
ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IExheW91dFRlc3RDb250cm9sbGVyOjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgbm9kZU9iamVjdCkgY29uc3QKLXsKLSAgICByZXR1cm4g
MDsKLX0KLQotSlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29tcHV0ZWRTdHlsZUlu
Y2x1ZGluZ1Zpc2l0ZWRJbmZvKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZikKLXsKLSAgICByZXR1
cm4gMDsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YXV0aGVudGljYXRlU2Vzc2lv
bihKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmKQotewotfQotCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjphYm9ydE1vZGFsKCkKLXsKLX0KLQotSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpwYWdlUHJvcGVydHkoY29uc3QgY2hhciog
cHJvcGVydHlOYW1lLCBpbnQgcGFnZU51bWJlcikgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogSW1w
bGVtZW50Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMoaW50IHBhZ2VOdW1i
ZXIsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG1hcmdpblRvcCwgaW50IG1hcmdpblJpZ2h0
LCBpbnQgbWFyZ2luQm90dG9tLCBpbnQgbWFyZ2luTGVmdCkgY29uc3QKLXsKLSAgICAvLyBGSVhN
RTogSW1wbGVtZW50Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wpCi17Ci0gICAgLy8g
RklYTUU6IEltcGxlbWVudCB0aGlzLgotfQotCi1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjpm
aW5kU3RyaW5nKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1N0cmluZ1JlZiB0YXJnZXQsIEpTT2Jq
ZWN0UmVmIG9wdGlvbnNBcnJheSkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTZXJpYWxpemVI
VFRQTG9hZHMoYm9vbCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50LgotfQotCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChkb3VibGUgaW50ZXJ2
YWwpIHsKLQotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzeW5jTG9jYWxTdG9yYWdl
KCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50LgotfQotCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKHVuc2lnbmVkIG51bWJl
cikKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50LgotfQotCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UoKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQuCi19Ci0KLUpTVmFsdWVSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoTG9j
YWxTdG9yYWdlKEpTQ29udGV4dFJlZiBjb250ZXh0KQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQuCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0
ZUxvY2FsU3RvcmFnZUZvck9yaWdpbihKU1N0cmluZ1JlZiBVUkwpCi17Ci0gICAgLy8gRklYTUU6
IEltcGxlbWVudC4KLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VGV4dERpcmVj
dGlvbihKU1N0cmluZ1JlZiBkaXJlY3Rpb24pCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudC4K
LX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkQ2hyb21lSW5wdXRGaWVsZCgpCi17
Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92ZUNocm9tZUlucHV0RmllbGQo
KQotewotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpmb2N1c1dlYlZpZXcoKQotewot
fQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRCYWNraW5nU2NhbGVGYWN0b3IoZG91
YmxlKQotewotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzaW11bGF0ZURlc2t0b3BO
b3RpZmljYXRpb25DbGljayhKU1N0cmluZ1JlZiB0aXRsZSkKLXsKLSAgICAvLyBGSVhNRTogSW1w
bGVtZW50LgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZXNldFBhZ2VWaXNpYmls
aXR5KCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi19Ci0KLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFBhZ2VWaXNpYmlsaXR5KGNvbnN0IGNoYXIqKQotewotICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoYm9vbCkKLXsKLSAgICAvLyBGSVhNRTog
SW1wbGVtZW50IHRoaXMuCi19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNlbmRXZWJJ
bnRlbnRSZXNwb25zZShKU1N0cmluZ1JlZikKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRo
aXMuCi19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGl2ZXJXZWJJbnRlbnQoSlNT
dHJpbmdSZWYsIEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZikKLXsKLSAgICAvLyBGSVhNRTogSW1w
bGVtZW50IHRoaXMuCi19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFN0b3JhZ2VE
YXRhYmFzZUlkbGVJbnRlcnZhbChkb3VibGUpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0
aGlzLgotfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvVGVzdFJ1bm5lcld4LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93eC9UZXN0UnVubmVyV3guY3BwCShy
ZXZpc2lvbiAxMjUzMzUpCShmcm9tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RD
b250cm9sbGVyV3guY3BwOjEyNTMzNSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L1Rlc3RS
dW5uZXJXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NDAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggS2V2aW4gT2xsaXZpZXIgPGtldmlub0B0aGVvbGxpdmllcnMuY29tPgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgorCisj
aW5jbHVkZSAiRHVtcFJlbmRlclRyZWUuaCIKKyNpbmNsdWRlICJXb3JrUXVldWUuaCIKKyNpbmNs
dWRlICJXb3JrUXVldWVJdGVtLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5Q
dHIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgorCisjaW5jbHVk
ZSA8c3RkaW8uaD4KKworCisKK0xheW91dFRlc3RDb250cm9sbGVyOjp+TGF5b3V0VGVzdENvbnRy
b2xsZXIoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6YWRkRGlzYWxsb3dlZFVSTChKU1N0cmluZ1JlZiB1cmwpCit7CisgICAgLy8g
RklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckJh
Y2tGb3J3YXJkTGlzdCgpCit7Cit9CisKK0pTU3RyaW5nUmVmIExheW91dFRlc3RDb250cm9sbGVy
Ojpjb3B5RGVjb2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVmIG5hbWUpCit7CisgICAgLy8gRklYTUU6
IGltcGxlbWVudAorICAgIHJldHVybiAwOworfQorCitKU1N0cmluZ1JlZiBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6Y29weUVuY29kZWRIb3N0TmFtZShKU1N0cmluZ1JlZiBuYW1lKQoreworICAgIC8v
IEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6ZGlzcGF0Y2hQZW5kaW5nTG9hZFJlcXVlc3RzKCkKK3sKKyAgICAvLyBGSVhNRTog
SW1wbGVtZW50IGZvciB0ZXN0aW5nIGZpeCBmb3IgNjcyNzQ5NQorfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpkaXNwbGF5KCkKK3sKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6a2VlcFdlYkhpc3RvcnkoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bm90aWZ5RG9uZSgpCit7CisgICAgaWYgKG1fd2FpdFRv
RHVtcCAmJiAhV29ya1F1ZXVlOjpzaGFyZWQoKS0+Y291bnQoKSkKKyAgICAgICAgbm90aWZ5RG9u
ZUZpcmVkKCk7CisgICAgbV93YWl0VG9EdW1wID0gZmFsc2U7Cit9CisKK0pTU3RyaW5nUmVmIExh
eW91dFRlc3RDb250cm9sbGVyOjpwYXRoVG9Mb2NhbFJlc291cmNlKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU1N0cmluZ1JlZiB1cmwpCit7CisgICAgLy8gRnVuY3Rpb24gaW50cm9kdWNlZCBpbiBy
Mjg2OTAuIFRoaXMgbWF5IG5lZWQgc3BlY2lhbC1jYXNpbmcgb24gV2luZG93cy4KKyAgICByZXR1
cm4gSlNTdHJpbmdSZXRhaW4odXJsKTsgLy8gRG8gbm90aGluZyBvbiBVbml4LgorfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxvYWQoSlNTdHJpbmdSZWYgdXJsLCBKU1N0cmlu
Z1JlZiB0YXJnZXQpCit7CisgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gcmVzb2x2ZSByZWxhdGl2
ZSBVUkxzIGhlcmUKKyAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcgTG9hZEl0ZW0o
dXJsLCB0YXJnZXQpKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWNjZXB0
c0VkaXRpbmcoYm9vbCBhY2NlcHRzRWRpdGluZykKK3sKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0QWx3YXlzQWNjZXB0Q29va2llcyhib29sIGFsd2F5c0FjY2VwdENvb2tpZXMp
Cit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIChhbmQgcmVzdG9yZSB0aGUgZGVmYXVs
dCB2YWx1ZSBiZWZvcmUgcnVubmluZyBlYWNoIHRlc3QgaW4gRHVtcFJlbmRlclRyZWUuY3BwKS4K
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUo
Ym9vbCwgYm9vbCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25kZXIoYm9vbCBmbGFnKQor
eworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKGJvb2wgY3ljbGVzKQoreworICAgIC8v
IEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNl
RGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUoYm9vbCBmbGFnKQoreworICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlclN0eWxlU2hl
ZXRFbmFibGVkKGJvb2wgZmxhZykKK3sKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihKU1N0cmluZ1JlZiBwYXRoKQoreworfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRWYWx1ZUZvclVzZXIoSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTVmFsdWVSZWYgZWxlbWVudCwgSlNTdHJpbmdSZWYgdmFsdWUpCit7CisgICAgLy8gRklY
TUU6IGltcGxlbWVudAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRWaWV3TW9k
ZU1lZGlhRmVhdHVyZShKU1N0cmluZ1JlZiBtb2RlKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2luZG93SXNLZXkoYm9vbCB3
aW5kb3dJc0tleSkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChib29sIGZsYWcpCit7
CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRXYWl0VG9EdW1wKGJvb2wgd2FpdFVudGlsRG9uZSkKK3sKKyAgICBzdGF0aWMgY29uc3Qg
aW50IHRpbWVvdXRTZWNvbmRzID0gMTA7CisKKyAgICBtX3dhaXRUb0R1bXAgPSB3YWl0VW50aWxE
b25lOworfQorCitpbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndpbmRvd0NvdW50KCkKK3sKKyAg
ICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIDE7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoYm9vbCBwcml2YXRlQnJvd3Np
bmdFbmFibGVkKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChib29sIGVuYWJs
ZWQpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgLy8gRklY
TUU6IGltcGxlbWVudAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRGcmFtZUZs
YXR0ZW5pbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50
Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93VW5pdmVyc2FsQWNjZXNz
RnJvbUZpbGVVUkxzKGJvb2wgZW5hYmxlZCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxl
VVJMcyhib29sIGVuYWJsZWQpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChib29s
IGZsYWcpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRBdXRvZmlsbGVkKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZiBlbGVtZW50
LCBib29sIGlzQXV0b2ZpbGxlZCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBvcHVwQmxvY2tpbmdFbmFibGVkKGJvb2wgcG9w
dXBCbG9ja2luZ0VuYWJsZWQpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQbHVnaW5zRW5hYmxlZChib29sIGZsYWcpCit7Cisg
ICAgLy8gRklYTUU6IEltcGxlbWVudAorfQorCitib29sIExheW91dFRlc3RDb250cm9sbGVyOjpl
bGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgaWQpIAor
eworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmV4ZWNDb21tYW5kKEpTU3RyaW5nUmVmIG5hbWUsIEpTU3Ry
aW5nUmVmIHZhbHVlKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0UGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oSlNT
dHJpbmdSZWYganNVUkwpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpjbGVhclBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldCgpCit7Cisg
ICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpj
bGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRv
IHN1cHBvcnQgYXBwbGljYXRpb24gY2FjaGUgcXVvdGFzLgorfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4oSlNTdHJpbmdSZWYgdXJs
KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gc3VwcG9ydCBkZWxldGluZyBhbGwgYXBw
bGljYXRpb24gY2FjaGUgZm9yIGFuIG9yaWdpbi4KK30KKworbG9uZyBsb25nIExheW91dFRlc3RD
b250cm9sbGVyOjpsb2NhbFN0b3JhZ2VEaXNrVXNhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgb3Jp
Z2luSWRlbnRpZmllcikKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIHN1cHBvcnQgZ2V0
dGluZyBkaXNrIHVzYWdlIGluIGJ5dGVzIGZvciBhbiBvcmlnaW4uCisgICAgcmV0dXJuIDA7Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5R
dW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0byBzdXBwb3J0IGFwcGxpY2F0aW9uIGNhY2hlIHF1b3Rhcy4KK30KKworbG9uZyBsb25nIExh
eW91dFRlc3RDb250cm9sbGVyOjphcHBsaWNhdGlvbkNhY2hlRGlza1VzYWdlRm9yT3JpZ2luKEpT
U3RyaW5nUmVmIG9yaWdpbikKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIHN1cHBvcnQg
Z2V0dGluZyBkaXNrIHVzYWdlIGJ5IGFsbCBhcHBsaWNhdGlvbiBjYWNoZXMgZm9yIGFuIG9yaWdp
bi4KKyAgICByZXR1cm4gMDsKK30KKworCitKU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9sbGVy
OjpvcmlnaW5zV2l0aEFwcGxpY2F0aW9uQ2FjaGUoSlNDb250ZXh0UmVmIGNvbnRleHQpCit7Cisg
ICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBnZXQgb3JpZ2lucyB0aGF0IGhhdmUgYXBwbGljYXRp
b24gY2FjaGVzLgorICAgIHJldHVybiAwOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpjbGVhckFsbERhdGFiYXNlcygpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorIAor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGF0YWJhc2VRdW90YSh1bnNpZ25lZCBsb25n
IGxvbmcgcXVvdGEpCit7ICAgIAorICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6Z29CYWNrKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50
IHRvIGVuYWJsZSBsb2FkZXIvbmF2aWdhdGlvbi13aGlsZS1kZWZlcnJpbmctbG9hZHMuaHRtbAor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wpCit7
CisgICAgLy8gRklYTUU6IGltcGxlbWVudCB0byBlbmFibGUgbG9hZGVyL25hdmlnYXRpb24td2hp
bGUtZGVmZXJyaW5nLWxvYWRzLmh0bWwKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShib29sLCBKU1N0cmluZ1Jl
ZikKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldEFwcENhY2hlTWF4aW11bVNpemUodW5zaWduZWQgbG9uZyBsb25nIHNpemUpCit7
CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit1bnNpZ25lZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTog
aW1wbGVtZW50CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIExheW91dFRlc3RDb250cm9s
bGVyOjp3b3JrZXJUaHJlYWRDb3VudCgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IGltcGxlbWVu
dAorICAgIHJldHVybiAwOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTZWxl
Y3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKGJvb2wgZmxhZykKK3sKKyAgICAvLyBGSVhNRTog
aW1wbGVtZW50Cit9CisKK2Jvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlVHJhbnNpdGlv
bkF0VGltZU9uRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSB0
aW1lLCBKU1N0cmluZ1JlZiBlbGVtZW50SWQpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9j
a0RldmljZU9yaWVudGF0aW9uKGJvb2wgY2FuUHJvdmlkZUFscGhhLCBkb3VibGUgYWxwaGEsIGJv
b2wgY2FuUHJvdmlkZUJldGEsIGRvdWJsZSBiZXRhLCBib29sIGNhblByb3ZpZGVHYW1tYSwgZG91
YmxlIGdhbW1hKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIERldmljZU9yaWVudGF0
aW9uIGxheW91dCB0ZXN0cy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTMwMzM1LgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRN
b2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUs
IGRvdWJsZSBhY2N1cmFjeSkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBHZW9sb2Nh
dGlvbiBsYXlvdXQgdGVzdHMuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yODI2NC4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
TW9ja0dlb2xvY2F0aW9uRXJyb3IoaW50IGNvZGUsIEpTU3RyaW5nUmVmIG1lc3NhZ2UpCit7Cisg
ICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgR2VvbG9jYXRpb24gbGF5b3V0IHRlc3RzLgorICAg
IC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgyNjQuCit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihi
b29sIGFsbG93KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIEdlb2xvY2F0aW9uIGxh
eW91dCB0ZXN0cy4KKyAgICBzZXRHZW9sb2NhdGlvblBlcm1pc3Npb25Db21tb24oYWxsb3cpOwor
fQorCitpbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9u
UGVybWlzc2lvblJlcXVlc3RzKCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBHZW9s
b2NhdGlvbiBsYXlvdXQgdGVzdHMuCisgICAgcmV0dXJuIC0xOworfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjphZGRNb2NrU3BlZWNoSW5wdXRSZXN1bHQoSlNTdHJpbmdSZWYgcmVzdWx0
LCBkb3VibGUgY29uZmlkZW5jZSwgSlNTdHJpbmdSZWYgbGFuZ3VhZ2UpCit7CisgICAgLy8gRklY
TUU6IEltcGxlbWVudCBmb3Igc3BlZWNoIGlucHV0IGxheW91dCB0ZXN0cy4KKyAgICAvLyBTZWUg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgorfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVjdChib29sIGZs
YWcpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Igc3BlZWNoIGlucHV0IGxheW91dCB0
ZXN0cy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTM5NDg1LgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzdGFydFNwZWVjaElucHV0
KEpTQ29udGV4dFJlZiBpbnB1dEVsZW1lbnQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBm
b3Igc3BlZWNoIGlucHV0IGxheW91dCB0ZXN0cy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgorfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKGJvb2wgaWNvbkRhdGFiYXNlRW5hYmxlZCkK
K3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK2Jvb2wgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIGFuaW1h
dGlvbk5hbWUsIGRvdWJsZSB0aW1lLCBKU1N0cmluZ1JlZiBlbGVtZW50SWQpCit7CisgICAgLy8g
RklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0Q2FjaGVNb2RlbChpbnQpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVu
dAorfQorCitib29sIExheW91dFRlc3RDb250cm9sbGVyOjppc0NvbW1hbmRFbmFibGVkKEpTU3Ry
aW5nUmVmIC8qbmFtZSovKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3NpemVfdCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2ViSGlzdG9yeUl0ZW1D
b3VudCgpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiAwOworfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjp3YWl0Rm9yUG9saWN5RGVsZWdhdGUoKQoreworICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6b3ZlcnJpZGVQcmVmZXJlbmNlKEpTU3RyaW5nUmVmIC8qIGtleSAqLywgSlNTdHJpbmdSZWYg
LyogdmFsdWUgKi8pCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0KEpTU3RyaW5nUmVmIHNvdXJjZSwgYm9vbCBy
dW5BdFN0YXJ0LCBib29sIGFsbEZyYW1lcykKK3sKKyAgICBwcmludGYoIkxheW91dFRlc3RDb250
cm9sbGVyOjphZGRVc2VyU2NyaXB0IG5vdCBpbXBsZW1lbnRlZC5cbiIpOworfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldChKU1N0cmluZ1JlZiBzb3VyY2Us
IGJvb2wgYWxsRnJhbWVzKQoreworICAgIHByaW50ZigiTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFk
ZFVzZXJTdHlsZVNoZWV0IG5vdCBpbXBsZW1lbnRlZC5cbiIpOworfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzaG93V2ViSW5zcGVjdG9yKCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHRoaXMuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsb3NlV2ViSW5zcGVj
dG9yKCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IobG9uZyBjYWxsSWQsIEpTU3Ry
aW5nUmVmIHNjcmlwdCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92ZUFsbFZpc2l0ZWRMaW5rcygpCit7CisgICAg
Ly8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKHVuc2lnbmVkIHdv
cmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0KQorewor
Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRl
ZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJp
bmdSZWYgc2NyaXB0KQoreworCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc2Fi
bGVJbWFnZUxvYWRpbmcoKQoreworCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFk
ZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KEpTU3RyaW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNT
dHJpbmdSZWYgZGVzdGluYXRpb25Qcm90b2NvbCwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Ib3N0
LCBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKQoreworICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlT3JpZ2luQWNjZXNz
V2hpdGVsaXN0RW50cnkoSlNTdHJpbmdSZWYgc291cmNlT3JpZ2luLCBKU1N0cmluZ1JlZiBkZXN0
aW5hdGlvblByb3RvY29sLCBKU1N0cmluZ1JlZiBkZXN0aW5hdGlvbkhvc3QsIGJvb2wgYWxsb3dE
ZXN0aW5hdGlvblN1YmRvbWFpbnMpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTY3JvbGxiYXJQb2xpY3koSlNTdHJpbmdSZWYg
b3JpZW50YXRpb24sIEpTU3RyaW5nUmVmIHBvbGljeSkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVt
ZW50Cit9CisKK2ludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQYWdlcyhmbG9hdCwg
ZmxvYXQpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiAtMTsKK30KKwor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YXBpVGVzdE5ld1dpbmRvd0RhdGFMb2FkQmFzZVVS
TChKU1N0cmluZ1JlZiB1dGY4RGF0YSwgSlNTdHJpbmdSZWYgYmFzZVVSTCkKK3sKKworfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphcGlUZXN0R29Ub0N1cnJlbnRCYWNrRm9yd2FyZEl0
ZW0oKQoreworCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNwYXRpYWxOYXZp
Z2F0aW9uRW5hYmxlZChib29sKQoreworCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFdlYlZpZXdFZGl0YWJsZShib29sKQoreworfQorCitib29sIExheW91dFRlc3RDb250cm9s
bGVyOjpjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcoKQoreworICAgIHJldHVybiBmYWxzZTsKK30K
KworSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpsYXllclRy
ZWVBc1RleHQoKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCitKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6Om1hcmtlclRleHRGb3JMaXN0SXRlbShKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBub2RlT2JqZWN0KSBjb25zdAoreworICAgIHJl
dHVybiAwOworfQorCitKU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpjb21wdXRlZFN0
eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmKQoreworICAg
IHJldHVybiAwOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphdXRoZW50aWNhdGVT
ZXNzaW9uKEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYpCit7Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFib3J0TW9kYWwoKQoreworfQorCitKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhZ2VQcm9wZXJ0eShjb25zdCBj
aGFyKiBwcm9wZXJ0eU5hbWUsIGludCBwYWdlTnVtYmVyKSBjb25zdAoreworICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQKKyAgICByZXR1cm4gMDsKK30KKworSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IExheW91dFRlc3RDb250cm9sbGVyOjpwYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVscyhpbnQgcGFn
ZU51bWJlciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbWFyZ2luVG9wLCBpbnQgbWFyZ2lu
UmlnaHQsIGludCBtYXJnaW5Cb3R0b20sIGludCBtYXJnaW5MZWZ0KSBjb25zdAoreworICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCkKK3sKKyAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCit9CisKK2Jvb2wgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmZpbmRTdHJpbmcoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTU3RyaW5nUmVmIHRhcmdldCwg
SlNPYmplY3RSZWYgb3B0aW9uc0FycmF5KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNlcmlh
bGl6ZUhUVFBMb2Fkcyhib29sKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1pbmltdW1UaW1lckludGVydmFsKGRvdWJsZSBp
bnRlcnZhbCkgeworCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN5bmNMb2NhbFN0
b3JhZ2UoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6Om9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnModW5zaWduZWQg
bnVtYmVyKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmRlbGV0ZUFsbExvY2FsU3RvcmFnZSgpCit7CisgICAgLy8gRklYTUU6IElt
cGxlbWVudC4KK30KKworSlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dp
dGhMb2NhbFN0b3JhZ2UoSlNDb250ZXh0UmVmIGNvbnRleHQpCit7CisgICAgLy8gRklYTUU6IElt
cGxlbWVudC4KKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIFVSTCkKK3sKKyAgICAvLyBG
SVhNRTogSW1wbGVtZW50LgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRUZXh0
RGlyZWN0aW9uKEpTU3RyaW5nUmVmIGRpcmVjdGlvbikKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVt
ZW50LgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRDaHJvbWVJbnB1dEZpZWxk
KCkKK3sKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlQ2hyb21lSW5wdXRG
aWVsZCgpCit7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmZvY3VzV2ViVmlldygp
Cit7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEJhY2tpbmdTY2FsZUZhY3Rv
cihkb3VibGUpCit7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNpbXVsYXRlRGVz
a3RvcE5vdGlmaWNhdGlvbkNsaWNrKEpTU3RyaW5nUmVmIHRpdGxlKQoreworICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlc2V0UGFnZVZp
c2liaWxpdHkoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KK30KKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UGFnZVZpc2liaWxpdHkoY29uc3QgY2hhciopCit7Cisg
ICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZChib29sKQoreworICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgdGhpcy4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2Vu
ZFdlYkludGVudFJlc3BvbnNlKEpTU3RyaW5nUmVmKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgdGhpcy4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsaXZlcldlYkludGVu
dChKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmKQoreworICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgdGhpcy4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U3Rv
cmFnZURhdGFiYXNlSWRsZUludGVydmFsKGRvdWJsZSkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHRoaXMuCit9CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93eC9UZXN0UnVubmVyV3gu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L1Rlc3RSdW5uZXJXeC5j
cHAJKHJldmlzaW9uIDEyNTMzNSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L1Rlc3RSdW5u
ZXJXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICAqLwogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRl
ICJUZXN0UnVubmVyLmgiCiAKICNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgogI2luY2x1ZGUg
IldvcmtRdWV1ZS5oIgo=
</data>
<flag name="review"
          id="168145"
          type_id="1"
          status="+"
          setter="tony"
    />
          </attachment>
      

    </bug>

</bugzilla>