<?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>126284</bug_id>
          
          <creation_ts>2013-12-30 00:36:57 -0800</creation_ts>
          <short_desc>[GTK] Split WebKit2APITests/TestWebKitWebView</short_desc>
          <delta_ts>2014-01-02 05:36:00 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>brian.holt</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gustavo</cc>
    
    <cc>mrobinson</cc>
    
    <cc>pnormand</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>963288</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-12-30 00:36:57 -0800</bug_when>
    <thetext>WebKitWebView test is too big already making more difficult to handle timeouts and skipped tests. It could be split by moving UIClient and auth tests to their own files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963289</commentid>
    <comment_count>1</comment_count>
      <attachid>220100</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-12-30 00:41:05 -0800</bug_when>
    <thetext>Created attachment 220100
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963290</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-12-30 00:43:13 -0800</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963292</commentid>
    <comment_count>3</comment_count>
      <attachid>220100</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2013-12-30 01:21:36 -0800</bug_when>
    <thetext>Comment on attachment 220100
Patch

Nice!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963295</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-12-30 01:54:43 -0800</bug_when>
    <thetext>Committed r161138: &lt;http://trac.webkit.org/changeset/161138&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963740</commentid>
    <comment_count>5</comment_count>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2014-01-02 05:36:00 -0800</bug_when>
    <thetext>*** Bug 120202 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220100</attachid>
            <date>2013-12-30 00:41:05 -0800</date>
            <delta_ts>2013-12-30 01:21:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-web-view-test-split.diff</filename>
            <type>text/plain</type>
            <size>96402</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBmOGNmOWM0Li45ODcyYWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIg
QEAKKzIwMTMtMTItMzAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIFNwbGl0IFdlYktpdDJBUElUZXN0cy9UZXN0V2ViS2l0V2ViVmll
dworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI2Mjg0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViS2l0
V2ViVmlldyB0ZXN0IGlzIHRvbyBiaWcgYWxyZWFkeSBtYWtpbmcgbW9yZSBkaWZmaWN1bHQgdG8K
KyAgICAgICAgaGFuZGxlIHRpbWVvdXRzIGFuZCBza2lwcGVkIHRlc3RzLiBTcGxpdCBpdCBpbiAz
IGJ5IG1vdmluZworICAgICAgICBVSUNsaWVudCBhbmQgYXV0aCB0ZXN0cyB0byB0aGVpciBvd24g
ZmlsZXMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5h
bToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0QXV0aGVudGljYXRpb24u
Y3BwOiBBZGRlZC4KKyAgICAgICAgKHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25SZXF1ZXN0KToK
KyAgICAgICAgKHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25DYW5jZWwpOgorICAgICAgICAodGVz
dFdlYlZpZXdBdXRoZW50aWNhdGlvbkxvYWRDYW5jZWxsZWQpOgorICAgICAgICAodGVzdFdlYlZp
ZXdBdXRoZW50aWNhdGlvbkZhaWx1cmUpOgorICAgICAgICAodGVzdFdlYlZpZXdBdXRoZW50aWNh
dGlvbk5vQ3JlZGVudGlhbCk6CisgICAgICAgICh0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uU3Rv
cmFnZSk6CisgICAgICAgICh0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uU3VjY2Vzcyk6CisgICAg
ICAgIChzZXJ2ZXJDYWxsYmFjayk6CisgICAgICAgIChiZWZvcmVBbGwpOgorICAgICAgICAoYWZ0
ZXJBbGwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RVSUNsaWVudC5j
cHA6IEFkZGVkLgorICAgICAgICAodGVzdFdlYlZpZXdDcmVhdGVSZWFkeUNsb3NlKToKKyAgICAg
ICAgKGNoZWNrTWltZVR5cGVGb3JGaWx0ZXIpOgorICAgICAgICAodGVzdFdlYlZpZXdBbGxvd01v
ZGFsRGlhbG9ncyk6CisgICAgICAgICh0ZXN0V2ViVmlld0Rpc2FsbG93TW9kYWxEaWFsb2dzKToK
KyAgICAgICAgKHRlc3RXZWJWaWV3SmF2YVNjcmlwdERpYWxvZ3MpOgorICAgICAgICAodGVzdFdl
YlZpZXdXaW5kb3dQcm9wZXJ0aWVzKToKKyAgICAgICAgKHRlc3RXZWJWaWV3TW91c2VUYXJnZXQp
OgorICAgICAgICAodGVzdFdlYlZpZXdQZXJtaXNzaW9uUmVxdWVzdHMpOgorICAgICAgICAodGVz
dFdlYlZpZXdGaWxlQ2hvb3NlclJlcXVlc3QpOgorICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAg
ICAgKGFmdGVyQWxsKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2Vi
S2l0V2ViVmlldy5jcHA6CisgICAgICAgIChiZWZvcmVBbGwpOgorICAgICAgICAoYWZ0ZXJBbGwp
OgorCiAyMDEzLTEyLTI3ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNv
bT4KIAogICAgICAgICBDcmFzaCB3aGVuIHN0YXJ0aW5nIGEgZG93bmxvYWQgYmVmb3JlIHRoZSBu
ZXR3b3JrIHByb2Nlc3MgaGFzIGJlZW4gbGF1bmNoZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KaW5kZXggZTAwOGFkMC4u
OTg3NzFiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvR05VbWFrZWZpbGUuYW0KQEAgLTIsNiArMiw3IEBAIGlmIEVOQUJMRV9XRUJLSVQyCiAK
IFRFU1RfUFJPR1MgKz0gXAogCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9JbnNwZWN0b3JUZXN0
U2VydmVyIFwKKwlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdEF1dGhlbnRpY2F0aW9uIFwK
IAlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdEJhY2tGb3J3YXJkTGlzdCBcCiAJUHJvZ3Jh
bXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RDb250ZXh0TWVudSBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQ
SVRlc3RzL1Rlc3RDb29raWVNYW5hZ2VyIFwKQEAgLTE0LDYgKzE1LDcgQEAgVEVTVF9QUk9HUyAr
PSBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RQcmludGluZyBcCiAJUHJvZ3JhbXMv
V2ViS2l0MkFQSVRlc3RzL1Rlc3RSZXNvdXJjZXMgXAogCVByb2dyYW1zL1dlYktpdDJBUElUZXN0
cy9UZXN0U1NMIFwKKwlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFVJQ2xpZW50IFwKIAlQ
cm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYkV4dGVuc2lvbnMgXAogCVByb2dyYW1zL1dl
YktpdDJBUElUZXN0cy9UZXN0V2ViS2l0VmVyc2lvbiBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRl
c3RzL1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2UgXApAQCAtMzEwLDQgKzMxMiwxNiBAQCBQcm9n
cmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdEZyYW1lX0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3Rz
X2NwcGZsYWdzKQogUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RGcmFtZV9MREFERCA9ICQo
d2Via2l0Ml90ZXN0c19sZGFkZCkKIFByb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0RnJhbWVf
TERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQogCitQcm9ncmFtc19XZWJLaXQyQVBJ
VGVzdHNfVGVzdEF1dGhlbnRpY2F0aW9uX1NPVVJDRVMgPSBcCisgICAgICAgIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RBdXRoZW50aWNhdGlvbi5jcHAKK1Byb2dy
YW1zX1dlYktpdDJBUElUZXN0c19UZXN0QXV0aGVudGljYXRpb25fQ1BQRkxBR1MgPSAkKHdlYmtp
dDJfdGVzdHNfY3BwZmxhZ3MpCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdEF1dGhlbnRp
Y2F0aW9uX0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfV2ViS2l0MkFQ
SVRlc3RzX1Rlc3RBdXRoZW50aWNhdGlvbl9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxh
Z3MpCisKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0VUlDbGllbnRfU09VUkNFUyA9IFwK
KyAgICAgICAgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFVJQ2xp
ZW50LmNwcAorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RVSUNsaWVudF9DUFBGTEFHUyA9
ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0
VUlDbGllbnRfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19XZWJLaXQy
QVBJVGVzdHNfVGVzdFVJQ2xpZW50X0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykK
KwogZW5kaWYgIyBFTkFCTEVfV0VCS0lUMgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdEF1dGhlbnRpY2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RBdXRoZW50aWNhdGlvbi5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRlNDIyNQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RBdXRoZW50aWNhdGlv
bi5jcHAKQEAgLTAsMCArMSwyODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlh
IFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMb2FkVHJhY2tpbmdUZXN0Lmgi
CisjaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5oIgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dS
ZWZQdHIuaD4KKworc3RhdGljIFdlYktpdFRlc3RTZXJ2ZXIqIGtTZXJ2ZXI7CisKK2NsYXNzIEF1
dGhlbnRpY2F0aW9uVGVzdDogcHVibGljIExvYWRUcmFja2luZ1Rlc3QgeworcHVibGljOgorICAg
IE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQXV0aGVudGljYXRpb25UZXN0KTsKKworICAgIEF1dGhl
bnRpY2F0aW9uVGVzdCgpCisgICAgeworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmll
dywgImF1dGhlbnRpY2F0ZSIsIEdfQ0FMTEJBQ0socnVuQXV0aGVudGljYXRpb25DYWxsYmFjayks
IHRoaXMpOworICAgIH0KKworICAgIH5BdXRoZW50aWNhdGlvblRlc3QoKQorICAgIHsKKyAgICAg
ICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fd2ViVmlldywgR19TSUdO
QUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CisgICAgfQorCisgICAgc3RhdGljIGlu
dCBhdXRoZW50aWNhdGlvblJldHJpZXM7CisgICAgc3RhdGljIGJvb2wgYXV0aGVudGljYXRpb25D
YW5jZWxsZWRSZWNlaXZlZDsKKworICAgIHZvaWQgbG9hZFVSSShjb25zdCBjaGFyKiB1cmkpCisg
ICAgeworICAgICAgICAvLyBSZXNldCB0aGUgcmV0cnkgY291bnQgb2YgdGhlIGZha2Ugc2VydmVy
IHdoZW4gYSBwYWdlIGlzIGxvYWRlZC4KKyAgICAgICAgYXV0aGVudGljYXRpb25SZXRyaWVzID0g
MDsKKyAgICAgICAgYXV0aGVudGljYXRpb25DYW5jZWxsZWRSZWNlaXZlZCA9IGZhbHNlOworICAg
ICAgICBMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkVVJJKHVyaSk7CisgICAgfQorCisgICAgc3RhdGlj
IGdib29sZWFuIHJ1bkF1dGhlbnRpY2F0aW9uQ2FsbGJhY2soV2ViS2l0V2ViVmlldyosIFdlYktp
dEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCwgQXV0aGVudGljYXRpb25UZXN0KiB0ZXN0
KQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChyZXF1ZXN0LCAiY2FuY2VsbGVkIiwg
R19DQUxMQkFDSyhhdXRoZW50aWNhdGlvbkNhbmNlbGxlZENhbGxiYWNrKSwgdGVzdCk7CisgICAg
ICAgIHRlc3QtPnJ1bkF1dGhlbnRpY2F0aW9uKHJlcXVlc3QpOworICAgICAgICByZXR1cm4gVFJV
RTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBhdXRoZW50aWNhdGlvbkNhbmNlbGxlZENhbGxi
YWNrKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCosIEF1dGhlbnRpY2F0aW9uVGVzdCopCisg
ICAgeworICAgICAgICBhdXRoZW50aWNhdGlvbkNhbmNlbGxlZFJlY2VpdmVkID0gdHJ1ZTsKKyAg
ICB9CisKKyAgICB2b2lkIHJ1bkF1dGhlbnRpY2F0aW9uKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVx
dWVzdCogcmVxdWVzdCkKKyAgICB7CisgICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5U
ZXN0RmluaXNoZXMoR19PQkpFQ1QocmVxdWVzdCkpOworICAgICAgICBtX2F1dGhlbnRpY2F0aW9u
UmVxdWVzdCA9IHJlcXVlc3Q7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7
CisgICAgfQorCisgICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiB3YWl0Rm9yQXV0aGVu
dGljYXRpb25SZXF1ZXN0KCkKKyAgICB7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5M
b29wKTsKKyAgICAgICAgcmV0dXJuIG1fYXV0aGVudGljYXRpb25SZXF1ZXN0LmdldCgpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBHUmVmUHRyPFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdD4g
bV9hdXRoZW50aWNhdGlvblJlcXVlc3Q7Cit9OworCitpbnQgQXV0aGVudGljYXRpb25UZXN0Ojph
dXRoZW50aWNhdGlvblJldHJpZXMgPSAwOworYm9vbCBBdXRoZW50aWNhdGlvblRlc3Q6OmF1dGhl
bnRpY2F0aW9uQ2FuY2VsbGVkUmVjZWl2ZWQgPSBmYWxzZTsKKworc3RhdGljIGNvbnN0IGNoYXIg
YXV0aFRlc3RVc2VybmFtZVtdID0gInVzZXJuYW1lIjsKK3N0YXRpYyBjb25zdCBjaGFyIGF1dGhU
ZXN0UGFzc3dvcmRbXSA9ICJwYXNzd29yZCI7CitzdGF0aWMgY29uc3QgY2hhciBhdXRoRXhwZWN0
ZWRTdWNjZXNzVGl0bGVbXSA9ICJXZWJLaXQyR3RrKyBBdXRoZW50aWNhdGlvbiB0ZXN0IjsKK3N0
YXRpYyBjb25zdCBjaGFyIGF1dGhFeHBlY3RlZEZhaWx1cmVUaXRsZVtdID0gIjQwMSBBdXRob3Jp
emF0aW9uIFJlcXVpcmVkIjsKK3N0YXRpYyBjb25zdCBjaGFyIGF1dGhFeHBlY3RlZEF1dGhvcml6
YXRpb25bXSA9ICJCYXNpYyBkWE5sY201aGJXVTZjR0Z6YzNkdmNtUT0iOyAvLyBCYXNlNjQgZW5j
b2Rpbmcgb2YgInVzZXJuYW1lOnBhc3N3b3JkIi4KK3N0YXRpYyBjb25zdCBjaGFyIGF1dGhTdWNj
ZXNzSFRNTFN0cmluZ1tdID0KKyAgICAiPGh0bWw+IgorICAgICI8aGVhZD48dGl0bGU+V2ViS2l0
Mkd0aysgQXV0aGVudGljYXRpb24gdGVzdDwvdGl0bGU+PC9oZWFkPiIKKyAgICAiPGJvZHk+PC9i
b2R5PjwvaHRtbD4iOworc3RhdGljIGNvbnN0IGNoYXIgYXV0aEZhaWx1cmVIVE1MU3RyaW5nW10g
PQorICAgICI8aHRtbD4iCisgICAgIjxoZWFkPjx0aXRsZT40MDEgQXV0aG9yaXphdGlvbiBSZXF1
aXJlZDwvdGl0bGU+PC9oZWFkPiIKKyAgICAiPGJvZHk+PC9ib2R5PjwvaHRtbD4iOworCitzdGF0
aWMgdm9pZCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uUmVxdWVzdChBdXRoZW50aWNhdGlvblRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gVGVzdCBhdXRoZW50aWNhdGlvbiBy
ZXF1ZXN0IGdldHRlcnMgbWF0Y2ggc291cCBhdXRoZW50aWNhdGlvbiBoZWFkZXIuCisgICAgdGVz
dC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYXV0aC10ZXN0Lmh0bWwiKS5kYXRh
KCkpOworICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCA9IHRlc3QtPndh
aXRGb3JBdXRoZW50aWNhdGlvblJlcXVlc3QoKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X2hvc3QocmVxdWVzdCksID09LCBzb3VwX3VyaV9n
ZXRfaG9zdChrU2VydmVyLT5iYXNlVVJJKCkpKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtp
dF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9wb3J0KHJlcXVlc3QpLCA9PSwgc291cF91cmlf
Z2V0X3BvcnQoa1NlcnZlci0+YmFzZVVSSSgpKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtp
dF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9yZWFsbShyZXF1ZXN0KSwgPT0sICJteSByZWFs
bSIpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9zY2hl
bWUocmVxdWVzdCkgPT0gV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9IVFRQX0JBU0lDKTsK
KyAgICBnX2Fzc2VydCghd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfaXNfZm9yX3Byb3h5
KHJlcXVlc3QpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3Rf
aXNfcmV0cnkocmVxdWVzdCkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0F1dGhlbnRp
Y2F0aW9uQ2FuY2VsKEF1dGhlbnRpY2F0aW9uVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sK
KyAgICAvLyBUZXN0IGNhbmNlbC4KKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZv
clBhdGgoIi9hdXRoLXRlc3QuaHRtbCIpLmRhdGEoKSk7CisgICAgV2ViS2l0QXV0aGVudGljYXRp
b25SZXF1ZXN0KiByZXF1ZXN0ID0gdGVzdC0+d2FpdEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgp
OworICAgIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2NhbmNlbChyZXF1ZXN0KTsKKyAg
ICAvLyBTZXJ2ZXIgZG9lc24ndCBhc2sgZm9yIG5ldyBjcmVkZW50aWFscy4KKyAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xv
YWRFdmVudHMuc2l6ZSgpLCA9PSwgMyk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9h
ZEV2ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQp
OworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMV0sID09LCBMb2FkVHJh
Y2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRGYWlsZWQpOworICAgIGdfYXNzZXJ0X2NtcGludCh0
ZXN0LT5tX2xvYWRFdmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQp
OworCisgICAgZ19hc3NlcnRfZXJyb3IodGVzdC0+bV9lcnJvci5nZXQoKSwgV0VCS0lUX05FVFdP
UktfRVJST1IsIFdFQktJVF9ORVRXT1JLX0VSUk9SX0NBTkNFTExFRCk7Cit9CisKK3N0YXRpYyB2
b2lkIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25Mb2FkQ2FuY2VsbGVkKEF1dGhlbnRpY2F0aW9u
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXIt
PmdldFVSSUZvclBhdGgoIi9hdXRoLXRlc3QuaHRtbCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2Fp
dEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpOworICAgIHdlYmtpdF93ZWJfdmlld19zdG9wX2xv
YWRpbmcodGVzdC0+bV93ZWJWaWV3KTsKKyAgICAvLyBFeHBlY3QgZW1wdHkgcGFnZS4KKyAgICB0
ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5hdXRoZW50
aWNhdGlvbkNhbmNlbGxlZFJlY2VpdmVkKTsKKworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5t
X2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMyk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1f
bG9hZEV2ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0
ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMV0sID09LCBMb2Fk
VHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRGYWlsZWQpOworICAgIGdfYXNzZXJ0X2NtcGlu
dCh0ZXN0LT5tX2xvYWRFdmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNo
ZWQpOworCisgICAgZ19hc3NlcnRfZXJyb3IodGVzdC0+bV9lcnJvci5nZXQoKSwgV0VCS0lUX05F
VFdPUktfRVJST1IsIFdFQktJVF9ORVRXT1JLX0VSUk9SX0NBTkNFTExFRCk7Cit9CisKK3N0YXRp
YyB2b2lkIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25GYWlsdXJlKEF1dGhlbnRpY2F0aW9uVGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICAvLyBUZXN0IGF1dGhlbnRpY2F0aW9uIGZh
aWx1cmVzLgorICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2F1dGgt
dGVzdC5odG1sIikuZGF0YSgpKTsKKyAgICBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJl
cXVlc3QgPSB0ZXN0LT53YWl0Rm9yQXV0aGVudGljYXRpb25SZXF1ZXN0KCk7CisgICAgZ19hc3Nl
cnQoIXdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2lzX3JldHJ5KHJlcXVlc3QpKTsKKyAg
ICBXZWJLaXRDcmVkZW50aWFsKiBjcmVkZW50aWFsID0gd2Via2l0X2NyZWRlbnRpYWxfbmV3KGF1
dGhUZXN0VXNlcm5hbWUsICJ3cm9uZ3Bhc3N3b3JkIiwgV0VCS0lUX0NSRURFTlRJQUxfUEVSU0lT
VEVOQ0VfTk9ORSk7CisgICAgd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfYXV0aGVudGlj
YXRlKHJlcXVlc3QsIGNyZWRlbnRpYWwpOworICAgIHdlYmtpdF9jcmVkZW50aWFsX2ZyZWUoY3Jl
ZGVudGlhbCk7CisgICAgLy8gRXhwZWN0IGEgc2Vjb25kIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3Qu
CisgICAgcmVxdWVzdCA9IHRlc3QtPndhaXRGb3JBdXRoZW50aWNhdGlvblJlcXVlc3QoKTsKKyAg
ICBnX2Fzc2VydCh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9pc19yZXRyeShyZXF1ZXN0
KSk7CisgICAgLy8gVGVzdCBzZWNvbmQgZmFpbHVyZS4KKyAgICBjcmVkZW50aWFsID0gd2Via2l0
X2NyZWRlbnRpYWxfbmV3KGF1dGhUZXN0VXNlcm5hbWUsICJ3cm9uZ3Bhc3N3b3JkMiIsIFdFQktJ
VF9DUkVERU5USUFMX1BFUlNJU1RFTkNFX05PTkUpOworICAgIHdlYmtpdF9hdXRoZW50aWNhdGlv
bl9yZXF1ZXN0X2F1dGhlbnRpY2F0ZShyZXF1ZXN0LCBjcmVkZW50aWFsKTsKKyAgICB3ZWJraXRf
Y3JlZGVudGlhbF9mcmVlKGNyZWRlbnRpYWwpOworICAgIC8vIEV4cGVjdCBhdXRoZW50aWNhdGlv
biBmYWlsZWQgcGFnZS4KKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAg
IGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMyk7CisgICAg
Z19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rl
c3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5t
X2xvYWRFdmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkQ29tbWl0dGVkKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5n
VGVzdDo6TG9hZEZpbmlzaGVkKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3
X2dldF90aXRsZSh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgYXV0aEV4cGVjdGVkRmFpbHVyZVRpdGxl
KTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvbk5vQ3JlZGVudGlh
bChBdXRoZW50aWNhdGlvblRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gVGVz
dCBjb250aW51ZSB3aXRob3V0IGNyZWRlbnRpYWxzLgorICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZl
ci0+Z2V0VVJJRm9yUGF0aCgiL2F1dGgtdGVzdC5odG1sIikuZGF0YSgpKTsKKyAgICBXZWJLaXRB
dXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QgPSB0ZXN0LT53YWl0Rm9yQXV0aGVudGljYXRp
b25SZXF1ZXN0KCk7CisgICAgd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfYXV0aGVudGlj
YXRlKHJlcXVlc3QsIDApOworICAgIC8vIFNlcnZlciBkb2Vzbid0IGFzayBmb3IgbmV3IGNyZWRl
bnRpYWxzLgorICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgZ19hc3Nl
cnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50cy5zaXplKCksID09LCAzKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJv
dmlzaW9uYWxMb2FkU3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2
ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRDb21taXR0ZWQpOworICAgIGdfYXNz
ZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpM
b2FkRmluaXNoZWQpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3Rp
dGxlKHRlc3QtPm1fd2ViVmlldyksID09LCBhdXRoRXhwZWN0ZWRGYWlsdXJlVGl0bGUpOworfQor
CitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uU3RvcmFnZShBdXRoZW50aWNh
dGlvblRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gRW5hYmxlIHByaXZhdGUg
YnJvd3NpbmcgYmVmb3JlIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgdG8gdGVzdCB0aGF0IGNyZWRl
bnRpYWxzIGNhbid0IGJlIHNhdmVkLgorICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX3By
aXZhdGVfYnJvd3Npbmcod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZp
ZXcpLCBUUlVFKTsKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9h
dXRoLXRlc3QuaHRtbCIpLmRhdGEoKSk7CisgICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0
KiByZXF1ZXN0ID0gdGVzdC0+d2FpdEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpOworICAgIGdf
YXNzZXJ0KCF3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcHJvcG9zZWRfY3JlZGVu
dGlhbChyZXF1ZXN0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1
ZXN0X2Nhbl9zYXZlX2NyZWRlbnRpYWxzKHJlcXVlc3QpKTsKKworICAgIC8vIElmIFdlYktpdCBo
YXMgYmVlbiBjb21waWxlZCB3aXRoIGxpYnNlY3JldCwgYW5kIHByaXZhdGUgYnJvd3NpbmcgaXMg
ZGlzYWJsZWQKKyAgICAvLyB0aGVuIGNoZWNrIHRoYXQgY3JlZGVudGlhbHMgY2FuIGJlIHNhdmVk
LgorI2lmIEVOQUJMRShDUkVERU5USUFMX1NUT1JBR0UpCisgICAgd2Via2l0X3NldHRpbmdzX3Nl
dF9lbmFibGVfcHJpdmF0ZV9icm93c2luZyh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRl
c3QtPm1fd2ViVmlldyksIEZBTFNFKTsKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi9hdXRoLXRlc3QuaHRtbCIpLmRhdGEoKSk7CisgICAgcmVxdWVzdCA9IHRlc3Qt
PndhaXRGb3JBdXRoZW50aWNhdGlvblJlcXVlc3QoKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2F1
dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3Byb3Bvc2VkX2NyZWRlbnRpYWwocmVxdWVzdCkpOwor
ICAgIGdfYXNzZXJ0KHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2Nhbl9zYXZlX2NyZWRl
bnRpYWxzKHJlcXVlc3QpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0F1
dGhlbnRpY2F0aW9uU3VjY2VzcyhBdXRoZW50aWNhdGlvblRlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCit7CisgICAgLy8gVGVzdCBjb3JyZWN0IGF1dGhlbnRpY2F0aW9uLgorICAgIHRlc3QtPmxv
YWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2F1dGgtdGVzdC5odG1sIikuZGF0YSgpKTsK
KyAgICBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QgPSB0ZXN0LT53YWl0Rm9y
QXV0aGVudGljYXRpb25SZXF1ZXN0KCk7CisgICAgV2ViS2l0Q3JlZGVudGlhbCogY3JlZGVudGlh
bCA9IHdlYmtpdF9jcmVkZW50aWFsX25ldyhhdXRoVGVzdFVzZXJuYW1lLCBhdXRoVGVzdFBhc3N3
b3JkLCBXRUJLSVRfQ1JFREVOVElBTF9QRVJTSVNURU5DRV9GT1JfU0VTU0lPTik7CisgICAgd2Vi
a2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfYXV0aGVudGljYXRlKHJlcXVlc3QsIGNyZWRlbnRp
YWwpOworICAgIHdlYmtpdF9jcmVkZW50aWFsX2ZyZWUoY3JlZGVudGlhbCk7CisgICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9s
b2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xv
YWRFdmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVk
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRy
YWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1f
bG9hZEV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7CisgICAg
Z19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdGl0bGUodGVzdC0+bV93ZWJWaWV3
KSwgPT0sIGF1dGhFeHBlY3RlZFN1Y2Nlc3NUaXRsZSk7CisKKyAgICAvLyBUZXN0IGxvYWRpbmcg
dGhlIHNhbWUgKGF1dGhvcml6ZWQpIHBhZ2UgYWdhaW4uCisgICAgdGVzdC0+bG9hZFVSSShrU2Vy
dmVyLT5nZXRVUklGb3JQYXRoKCIvYXV0aC10ZXN0Lmh0bWwiKS5kYXRhKCkpOworICAgIC8vIFRo
ZXJlIGlzIG5vIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZS4KKyAgICB0ZXN0LT53YWl0VW50aWxM
b2FkRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMu
c2l6ZSgpLCA9PSwgMyk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1sw
XSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOworICAgIGdf
YXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0
OjpMb2FkQ29tbWl0dGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRz
WzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X3dlYl92aWV3X2dldF90aXRsZSh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgYXV0
aEV4cGVjdGVkU3VjY2Vzc1RpdGxlKTsKK30KKworc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2so
U291cFNlcnZlciosIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFz
aFRhYmxlKiwgU291cENsaWVudENvbnRleHQqLCB2b2lkKikKK3sKKyAgICBpZiAobWVzc2FnZS0+
bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0
YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKCFzdHJjbXAocGF0aCwgIi9hdXRoLXRlc3QuaHRtbCIpKSB7
CisgICAgICAgIGNvbnN0IGNoYXIqIGF1dGhvcml6YXRpb24gPSBzb3VwX21lc3NhZ2VfaGVhZGVy
c19nZXRfb25lKG1lc3NhZ2UtPnJlcXVlc3RfaGVhZGVycywgIkF1dGhvcml6YXRpb24iKTsKKyAg
ICAgICAgLy8gUmVxdWlyZSBhdXRoZW50aWNhdGlvbi4KKyAgICAgICAgaWYgKCFnX3N0cmNtcDAo
YXV0aG9yaXphdGlvbiwgYXV0aEV4cGVjdGVkQXV0aG9yaXphdGlvbikpIHsKKyAgICAgICAgICAg
IC8vIFN1Y2Nlc3NmdWwgYXV0aGVudGljYXRpb24uCisgICAgICAgICAgICBzb3VwX21lc3NhZ2Vf
c2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7CisgICAgICAgICAgICBzb3VwX21l
c3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RB
VElDLCBhdXRoU3VjY2Vzc0hUTUxTdHJpbmcsIHN0cmxlbihhdXRoU3VjY2Vzc0hUTUxTdHJpbmcp
KTsKKyAgICAgICAgICAgIEF1dGhlbnRpY2F0aW9uVGVzdDo6YXV0aGVudGljYXRpb25SZXRyaWVz
ID0gMDsKKyAgICAgICAgfSBlbHNlIGlmICgrK0F1dGhlbnRpY2F0aW9uVGVzdDo6YXV0aGVudGlj
YXRpb25SZXRyaWVzIDwgMykgeworICAgICAgICAgICAgLy8gTm8gb3IgaW52YWxpZCBhdXRob3Jp
emF0aW9uIGhlYWRlciBwcm92aWRlZCBieSB0aGUgY2xpZW50LCByZXF1ZXN0IGF1dGhlbnRpY2F0
aW9uIHR3aWNlIHRoZW4gZmFpbC4KKyAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVz
KG1lc3NhZ2UsIFNPVVBfU1RBVFVTX1VOQVVUSE9SSVpFRCk7CisgICAgICAgICAgICBzb3VwX21l
c3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIldXVy1BdXRo
ZW50aWNhdGUiLCAiQmFzaWMgcmVhbG09XCJteSByZWFsbVwiIik7CisgICAgICAgICAgICAvLyBJ
bmNsdWRlIGEgZmFpbHVyZSBtZXNzYWdlIGluIGNhc2UgdGhlIHVzZXIgYXR0ZW1wdHMgdG8gcHJv
Y2VlZCB3aXRob3V0IGF1dGhlbnRpY2F0aW9uLgorICAgICAgICAgICAgc291cF9tZXNzYWdlX2Jv
ZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgYXV0
aEZhaWx1cmVIVE1MU3RyaW5nLCBzdHJsZW4oYXV0aEZhaWx1cmVIVE1MU3RyaW5nKSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBBdXRoZW50aWNhdGlvbiBub3Qgc3VjY2Vzc2Z1
bCwgZGlzcGxheSBhICI0MDEgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCIgcGFnZS4KKyAgICAgICAg
ICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKyAg
ICAgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5
LCBTT1VQX01FTU9SWV9TVEFUSUMsIGF1dGhGYWlsdXJlSFRNTFN0cmluZywgc3RybGVuKGF1dGhG
YWlsdXJlSFRNTFN0cmluZykpOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIHNvdXBf
bWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7CisKKyAg
ICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKK30K
Kwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIGtTZXJ2ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZl
cigpOworICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7CisKKyAgICBBdXRoZW50aWNh
dGlvblRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJhdXRoZW50aWNhdGlvbi1yZXF1ZXN0Iiwg
dGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvblJlcXVlc3QpOworICAgIEF1dGhlbnRpY2F0aW9uVGVz
dDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImF1dGhlbnRpY2F0aW9uLWNhbmNlbCIsIHRlc3RXZWJW
aWV3QXV0aGVudGljYXRpb25DYW5jZWwpOworICAgIEF1dGhlbnRpY2F0aW9uVGVzdDo6YWRkKCJX
ZWJLaXRXZWJWaWV3IiwgImF1dGhlbnRpY2F0aW9uLWxvYWQtY2FuY2VsbGVkIiwgdGVzdFdlYlZp
ZXdBdXRoZW50aWNhdGlvbkxvYWRDYW5jZWxsZWQpOworICAgIEF1dGhlbnRpY2F0aW9uVGVzdDo6
YWRkKCJXZWJLaXRXZWJWaWV3IiwgImF1dGhlbnRpY2F0aW9uLWZhaWx1cmUiLCB0ZXN0V2ViVmll
d0F1dGhlbnRpY2F0aW9uRmFpbHVyZSk7CisgICAgQXV0aGVudGljYXRpb25UZXN0OjphZGQoIldl
YktpdFdlYlZpZXciLCAiYXV0aGVudGljYXRpb24tbm8tY3JlZGVudGlhbCIsIHRlc3RXZWJWaWV3
QXV0aGVudGljYXRpb25Ob0NyZWRlbnRpYWwpOworICAgIEF1dGhlbnRpY2F0aW9uVGVzdDo6YWRk
KCJXZWJLaXRXZWJWaWV3IiwgImF1dGhlbnRpY2F0aW9uLXN0b3JhZ2UiLCB0ZXN0V2ViVmlld0F1
dGhlbnRpY2F0aW9uU3RvcmFnZSk7CisgICAgLy8gVGVzdGluZyBhdXRoZW50aWNhdGlvbiBzdWNj
ZXNzIG11c3QgYmUgZG9uZSBsYXN0IGJlY2F1c2UgbGlic291cCB3aWxsIG5ldmVyIGZpcmUKKyAg
ICAvLyB0aGUgYXV0aGVudGljYXRlIHNpZ25hbCBhZ2FpbiBvbmNlIGF1dGhlbnRpY2F0aW9uIGlz
IHN1Y2Nlc3NmdWwuCisgICAgQXV0aGVudGljYXRpb25UZXN0OjphZGQoIldlYktpdFdlYlZpZXci
LCAiYXV0aGVudGljYXRpb24tc3VjY2VzcyIsIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25TdWNj
ZXNzKTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7CisgICAgZGVsZXRlIGtTZXJ2ZXI7Cit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0VUlD
bGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFVJ
Q2xpZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzMwZDZkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
VGVzdFVJQ2xpZW50LmNwcApAQCAtMCwwICsxLDY3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
LDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlZpZXdU
ZXN0LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9H
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCitzdGF0aWMgY29u
c3QgY2hhcioga0FsZXJ0RGlhbG9nTWVzc2FnZSA9ICJXZWJLaXRHVEsrIGFsZXJ0IGRpYWxvZyBt
ZXNzYWdlIjsKK3N0YXRpYyBjb25zdCBjaGFyKiBrQ29uZmlybURpYWxvZ01lc3NhZ2UgPSAiV2Vi
S2l0R1RLKyBjb25maXJtIGRpYWxvZyBtZXNzYWdlIjsKK3N0YXRpYyBjb25zdCBjaGFyKiBrUHJv
bXB0RGlhbG9nTWVzc2FnZSA9ICJXZWJLaXRHVEsrIHByb21wdCBkaWFsb2cgbWVzc2FnZSI7Citz
dGF0aWMgY29uc3QgY2hhcioga1Byb21wdERpYWxvZ1JldHVybmVkVGV4dCA9ICJXZWJLaXRHVEsr
IHByb21wdCBkaWFsb2cgcmV0dXJuZWQgdGV4dCI7CisKK2NsYXNzIFVJQ2xpZW50VGVzdDogcHVi
bGljIFdlYlZpZXdUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFVJ
Q2xpZW50VGVzdCk7CisKKyAgICBlbnVtIFdlYlZpZXdFdmVudHMgeworICAgICAgICBDcmVhdGUs
CisgICAgICAgIFJlYWR5VG9TaG93LAorICAgICAgICBSdW5Bc01vZGFsLAorICAgICAgICBDbG9z
ZQorICAgIH07CisKKyAgICBjbGFzcyBXaW5kb3dQcm9wZXJ0aWVzIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIFdpbmRvd1Byb3BlcnRpZXMoKQorICAgICAgICAgICAgOiBtX2lzTnVsbCh0cnVlKQor
ICAgICAgICAgICAgLCBtX3Rvb2xiYXJWaXNpYmxlKHRydWUpCisgICAgICAgICAgICAsIG1fc3Rh
dHVzYmFyVmlzaWJsZSh0cnVlKQorICAgICAgICAgICAgLCBtX3Njcm9sbGJhcnNWaXNpYmxlKHRy
dWUpCisgICAgICAgICAgICAsIG1fbWVudWJhclZpc2libGUodHJ1ZSkKKyAgICAgICAgICAgICwg
bV9sb2NhdGlvbmJhclZpc2libGUodHJ1ZSkKKyAgICAgICAgICAgICwgbV9yZXNpemFibGUodHJ1
ZSkKKyAgICAgICAgICAgICwgbV9mdWxsc2NyZWVuKGZhbHNlKQorICAgICAgICB7CisgICAgICAg
ICAgICBtZW1zZXQoJm1fZ2VvbWV0cnksIDAsIHNpemVvZihHZGtSZWN0YW5nbGUpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIFdpbmRvd1Byb3BlcnRpZXMoV2ViS2l0V2luZG93UHJvcGVydGllcyog
d2luZG93UHJvcGVydGllcykKKyAgICAgICAgICAgIDogbV9pc051bGwoZmFsc2UpCisgICAgICAg
ICAgICAsIG1fdG9vbGJhclZpc2libGUod2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF90b29s
YmFyX3Zpc2libGUod2luZG93UHJvcGVydGllcykpCisgICAgICAgICAgICAsIG1fc3RhdHVzYmFy
VmlzaWJsZSh3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3N0YXR1c2Jhcl92aXNpYmxlKHdp
bmRvd1Byb3BlcnRpZXMpKQorICAgICAgICAgICAgLCBtX3Njcm9sbGJhcnNWaXNpYmxlKHdlYmtp
dF93aW5kb3dfcHJvcGVydGllc19nZXRfc2Nyb2xsYmFyc192aXNpYmxlKHdpbmRvd1Byb3BlcnRp
ZXMpKQorICAgICAgICAgICAgLCBtX21lbnViYXJWaXNpYmxlKHdlYmtpdF93aW5kb3dfcHJvcGVy
dGllc19nZXRfbWVudWJhcl92aXNpYmxlKHdpbmRvd1Byb3BlcnRpZXMpKQorICAgICAgICAgICAg
LCBtX2xvY2F0aW9uYmFyVmlzaWJsZSh3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X2xvY2F0
aW9uYmFyX3Zpc2libGUod2luZG93UHJvcGVydGllcykpCisgICAgICAgICAgICAsIG1fcmVzaXph
YmxlKHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfcmVzaXphYmxlKHdpbmRvd1Byb3BlcnRp
ZXMpKQorICAgICAgICAgICAgLCBtX2Z1bGxzY3JlZW4od2Via2l0X3dpbmRvd19wcm9wZXJ0aWVz
X2dldF9mdWxsc2NyZWVuKHdpbmRvd1Byb3BlcnRpZXMpKQorICAgICAgICB7CisgICAgICAgICAg
ICB3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X2dlb21ldHJ5KHdpbmRvd1Byb3BlcnRpZXMs
ICZtX2dlb21ldHJ5KTsKKyAgICAgICAgfQorCisgICAgICAgIFdpbmRvd1Byb3BlcnRpZXMoR2Rr
UmVjdGFuZ2xlKiBnZW9tZXRyeSwgYm9vbCB0b29sYmFyVmlzaWJsZSwgYm9vbCBzdGF0dXNiYXJW
aXNpYmxlLCBib29sIHNjcm9sbGJhcnNWaXNpYmxlLCBib29sIG1lbnViYXJWaXNpYmxlLCBib29s
IGxvY2F0aW9uYmFyVmlzaWJsZSwgYm9vbCByZXNpemFibGUsIGJvb2wgZnVsbHNjcmVlbikKKyAg
ICAgICAgICAgIDogbV9pc051bGwoZmFsc2UpCisgICAgICAgICAgICAsIG1fZ2VvbWV0cnkoKmdl
b21ldHJ5KQorICAgICAgICAgICAgLCBtX3Rvb2xiYXJWaXNpYmxlKHRvb2xiYXJWaXNpYmxlKQor
ICAgICAgICAgICAgLCBtX3N0YXR1c2JhclZpc2libGUoc3RhdHVzYmFyVmlzaWJsZSkKKyAgICAg
ICAgICAgICwgbV9zY3JvbGxiYXJzVmlzaWJsZShzY3JvbGxiYXJzVmlzaWJsZSkKKyAgICAgICAg
ICAgICwgbV9tZW51YmFyVmlzaWJsZShtZW51YmFyVmlzaWJsZSkKKyAgICAgICAgICAgICwgbV9s
b2NhdGlvbmJhclZpc2libGUobG9jYXRpb25iYXJWaXNpYmxlKQorICAgICAgICAgICAgLCBtX3Jl
c2l6YWJsZShyZXNpemFibGUpCisgICAgICAgICAgICAsIG1fZnVsbHNjcmVlbihmdWxsc2NyZWVu
KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsg
cmV0dXJuIG1faXNOdWxsOyB9CisKKyAgICAgICAgdm9pZCBhc3NlcnRFcXVhbChjb25zdCBXaW5k
b3dQcm9wZXJ0aWVzJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgZ19hc3Nl
cnRfY21waW50KG1fZ2VvbWV0cnkueCwgPT0sIG90aGVyLm1fZ2VvbWV0cnkueCk7CisgICAgICAg
ICAgICBnX2Fzc2VydF9jbXBpbnQobV9nZW9tZXRyeS55LCA9PSwgb3RoZXIubV9nZW9tZXRyeS55
KTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGludChtX2dlb21ldHJ5LndpZHRoLCA9PSwgb3Ro
ZXIubV9nZW9tZXRyeS53aWR0aCk7CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQobV9nZW9t
ZXRyeS5oZWlnaHQsID09LCBvdGhlci5tX2dlb21ldHJ5LmhlaWdodCk7CisgICAgICAgICAgICBn
X2Fzc2VydF9jbXBpbnQoc3RhdGljX2Nhc3Q8aW50PihtX3Rvb2xiYXJWaXNpYmxlKSwgPT0sIHN0
YXRpY19jYXN0PGludD4ob3RoZXIubV90b29sYmFyVmlzaWJsZSkpOworICAgICAgICAgICAgZ19h
c3NlcnRfY21waW50KHN0YXRpY19jYXN0PGludD4obV9zdGF0dXNiYXJWaXNpYmxlKSwgPT0sIHN0
YXRpY19jYXN0PGludD4ob3RoZXIubV9zdGF0dXNiYXJWaXNpYmxlKSk7CisgICAgICAgICAgICBn
X2Fzc2VydF9jbXBpbnQoc3RhdGljX2Nhc3Q8aW50PihtX3Njcm9sbGJhcnNWaXNpYmxlKSwgPT0s
IHN0YXRpY19jYXN0PGludD4ob3RoZXIubV9zY3JvbGxiYXJzVmlzaWJsZSkpOworICAgICAgICAg
ICAgZ19hc3NlcnRfY21waW50KHN0YXRpY19jYXN0PGludD4obV9tZW51YmFyVmlzaWJsZSksID09
LCBzdGF0aWNfY2FzdDxpbnQ+KG90aGVyLm1fbWVudWJhclZpc2libGUpKTsKKyAgICAgICAgICAg
IGdfYXNzZXJ0X2NtcGludChzdGF0aWNfY2FzdDxpbnQ+KG1fbG9jYXRpb25iYXJWaXNpYmxlKSwg
PT0sIHN0YXRpY19jYXN0PGludD4ob3RoZXIubV9sb2NhdGlvbmJhclZpc2libGUpKTsKKyAgICAg
ICAgICAgIGdfYXNzZXJ0X2NtcGludChzdGF0aWNfY2FzdDxpbnQ+KG1fcmVzaXphYmxlKSwgPT0s
IHN0YXRpY19jYXN0PGludD4ob3RoZXIubV9yZXNpemFibGUpKTsKKyAgICAgICAgICAgIGdfYXNz
ZXJ0X2NtcGludChzdGF0aWNfY2FzdDxpbnQ+KG1fZnVsbHNjcmVlbiksID09LCBzdGF0aWNfY2Fz
dDxpbnQ+KG90aGVyLm1fZnVsbHNjcmVlbikpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgor
ICAgICAgICBib29sIG1faXNOdWxsOworCisgICAgICAgIEdka1JlY3RhbmdsZSBtX2dlb21ldHJ5
OworCisgICAgICAgIGJvb2wgbV90b29sYmFyVmlzaWJsZTsKKyAgICAgICAgYm9vbCBtX3N0YXR1
c2JhclZpc2libGU7CisgICAgICAgIGJvb2wgbV9zY3JvbGxiYXJzVmlzaWJsZTsKKyAgICAgICAg
Ym9vbCBtX21lbnViYXJWaXNpYmxlOworICAgICAgICBib29sIG1fbG9jYXRpb25iYXJWaXNpYmxl
OworCisgICAgICAgIGJvb2wgbV9yZXNpemFibGU7CisgICAgICAgIGJvb2wgbV9mdWxsc2NyZWVu
OworICAgIH07CisKKyAgICBzdGF0aWMgdm9pZCB3aW5kb3dQcm9wZXJ0aWVzTm90aWZ5Q2FsbGJh
Y2soR09iamVjdCosIEdQYXJhbVNwZWMqIHBhcmFtU3BlYywgVUlDbGllbnRUZXN0KiB0ZXN0KQor
ICAgIHsKKyAgICAgICAgdGVzdC0+bV93aW5kb3dQcm9wZXJ0aWVzQ2hhbmdlZC5hZGQoZ19wYXJh
bV9zcGVjX2dldF9uYW1lKHBhcmFtU3BlYykpOworICAgIH0KKworICAgIHN0YXRpYyBHdGtXaWRn
ZXQqIHZpZXdDcmVhdGVDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBVSUNsaWVudFRl
c3QqIHRlc3QpCisgICAgeworICAgICAgICByZXR1cm4gdGVzdC0+dmlld0NyZWF0ZSh3ZWJWaWV3
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCB2aWV3UmVhZHlUb1Nob3dDYWxsYmFjayhXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3LCBVSUNsaWVudFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0
ZXN0LT52aWV3UmVhZHlUb1Nob3cod2ViVmlldyk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQg
dmlld0Nsb3NlQ2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgVUlDbGllbnRUZXN0KiB0
ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+dmlld0Nsb3NlKHdlYlZpZXcpOworICAgIH0KKwor
ICAgIHZvaWQgc2NyaXB0QWxlcnQoV2ViS2l0U2NyaXB0RGlhbG9nKiBkaWFsb2cpCisgICAgewor
ICAgICAgICBzd2l0Y2ggKG1fc2NyaXB0RGlhbG9nVHlwZSkgeworICAgICAgICBjYXNlIFdFQktJ
VF9TQ1JJUFRfRElBTE9HX0FMRVJUOgorICAgICAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtp
dF9zY3JpcHRfZGlhbG9nX2dldF9tZXNzYWdlKGRpYWxvZyksID09LCBrQWxlcnREaWFsb2dNZXNz
YWdlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdFQktJVF9TQ1JJUFRfRElB
TE9HX0NPTkZJUk06CisgICAgICAgICAgICBnX2Fzc2VydChtX3NjcmlwdERpYWxvZ0NvbmZpcm1l
ZCk7CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NjcmlwdF9kaWFsb2dfZ2V0
X21lc3NhZ2UoZGlhbG9nKSwgPT0sICJjb25maXJtZWQiKTsKKworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgV0VCS0lUX1NDUklQVF9ESUFMT0dfUFJPTVBUOgorICAgICAgICAgICAg
Z19hc3NlcnRfY21wc3RyKHdlYmtpdF9zY3JpcHRfZGlhbG9nX2dldF9tZXNzYWdlKGRpYWxvZyks
ID09LCBrUHJvbXB0RGlhbG9nUmV0dXJuZWRUZXh0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsKKyAgICB9CisK
KyAgICB2b2lkIHNjcmlwdENvbmZpcm0oV2ViS2l0U2NyaXB0RGlhbG9nKiBkaWFsb2cpCisgICAg
eworICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NjcmlwdF9kaWFsb2dfZ2V0X21lc3Nh
Z2UoZGlhbG9nKSwgPT0sIGtDb25maXJtRGlhbG9nTWVzc2FnZSk7CisgICAgICAgIG1fc2NyaXB0
RGlhbG9nQ29uZmlybWVkID0gIW1fc2NyaXB0RGlhbG9nQ29uZmlybWVkOworICAgICAgICB3ZWJr
aXRfc2NyaXB0X2RpYWxvZ19jb25maXJtX3NldF9jb25maXJtZWQoZGlhbG9nLCBtX3NjcmlwdERp
YWxvZ0NvbmZpcm1lZCk7CisgICAgfQorCisgICAgdm9pZCBzY3JpcHRQcm9tcHQoV2ViS2l0U2Ny
aXB0RGlhbG9nKiBkaWFsb2cpCisgICAgeworICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X3NjcmlwdF9kaWFsb2dfZ2V0X21lc3NhZ2UoZGlhbG9nKSwgPT0sIGtQcm9tcHREaWFsb2dNZXNz
YWdlKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zY3JpcHRfZGlhbG9nX3Byb21w
dF9nZXRfZGVmYXVsdF90ZXh0KGRpYWxvZyksID09LCAiZGVmYXVsdCIpOworICAgICAgICB3ZWJr
aXRfc2NyaXB0X2RpYWxvZ19wcm9tcHRfc2V0X3RleHQoZGlhbG9nLCBrUHJvbXB0RGlhbG9nUmV0
dXJuZWRUZXh0KTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gc2NyaXB0RGlhbG9nKFdl
YktpdFdlYlZpZXcqLCBXZWJLaXRTY3JpcHREaWFsb2cqIGRpYWxvZywgVUlDbGllbnRUZXN0KiB0
ZXN0KQorICAgIHsKKyAgICAgICAgc3dpdGNoICh3ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRfZGlh
bG9nX3R5cGUoZGlhbG9nKSkgeworICAgICAgICBjYXNlIFdFQktJVF9TQ1JJUFRfRElBTE9HX0FM
RVJUOgorICAgICAgICAgICAgdGVzdC0+c2NyaXB0QWxlcnQoZGlhbG9nKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFdFQktJVF9TQ1JJUFRfRElBTE9HX0NPTkZJUk06CisgICAg
ICAgICAgICB0ZXN0LT5zY3JpcHRDb25maXJtKGRpYWxvZyk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBXRUJLSVRfU0NSSVBUX0RJQUxPR19QUk9NUFQ6CisgICAgICAgICAgICB0
ZXN0LT5zY3JpcHRQcm9tcHQoZGlhbG9nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgbW91c2VU
YXJnZXRDaGFuZ2VkKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRIaXRUZXN0UmVzdWx0KiBoaXRUZXN0
UmVzdWx0LCBndWludCBtb2RpZmllcnMsIFVJQ2xpZW50VGVzdCogdGVzdCkKKyAgICB7CisgICAg
ICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ISVRfVEVTVF9SRVNVTFQoaGl0VGVzdFJlc3VsdCkpOwor
ICAgICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JK
RUNUKGhpdFRlc3RSZXN1bHQpKTsKKworICAgICAgICB0ZXN0LT5tX21vdXNlVGFyZ2V0SGl0VGVz
dFJlc3VsdCA9IGhpdFRlc3RSZXN1bHQ7CisgICAgICAgIHRlc3QtPm1fbW91c2VUYXJnZXRNb2Rp
ZmllcnMgPSBtb2RpZmllcnM7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWlu
TG9vcCk7CisgICAgfQorCisgICAgc3RhdGljIGdib29sZWFuIHBlcm1pc3Npb25SZXF1ZXN0ZWQo
V2ViS2l0V2ViVmlldyosIFdlYktpdFBlcm1pc3Npb25SZXF1ZXN0KiByZXF1ZXN0LCBVSUNsaWVu
dFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfUEVSTUlTU0lP
Tl9SRVFVRVNUKHJlcXVlc3QpKTsKKyAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVk
V2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChyZXF1ZXN0KSk7CisKKyAgICAgICAgaWYgKHRlc3Qt
Pm1fYWxsb3dQZXJtaXNzaW9uUmVxdWVzdHMpCisgICAgICAgICAgICB3ZWJraXRfcGVybWlzc2lv
bl9yZXF1ZXN0X2FsbG93KHJlcXVlc3QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB3ZWJr
aXRfcGVybWlzc2lvbl9yZXF1ZXN0X2RlbnkocmVxdWVzdCk7CisKKyAgICAgICAgcmV0dXJuIFRS
VUU7CisgICAgfQorCisgICAgVUlDbGllbnRUZXN0KCkKKyAgICAgICAgOiBtX3NjcmlwdERpYWxv
Z1R5cGUoV0VCS0lUX1NDUklQVF9ESUFMT0dfQUxFUlQpCisgICAgICAgICwgbV9zY3JpcHREaWFs
b2dDb25maXJtZWQodHJ1ZSkKKyAgICAgICAgLCBtX2FsbG93UGVybWlzc2lvblJlcXVlc3RzKGZh
bHNlKQorICAgICAgICAsIG1fbW91c2VUYXJnZXRNb2RpZmllcnMoMCkKKyAgICB7CisgICAgICAg
IHdlYmtpdF9zZXR0aW5nc19zZXRfamF2YXNjcmlwdF9jYW5fb3Blbl93aW5kb3dzX2F1dG9tYXRp
Y2FsbHkod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyhtX3dlYlZpZXcpLCBUUlVFKTsKKyAg
ICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJjcmVhdGUiLCBHX0NBTExCQUNLKHZp
ZXdDcmVhdGVDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2Vi
VmlldywgInNjcmlwdC1kaWFsb2ciLCBHX0NBTExCQUNLKHNjcmlwdERpYWxvZyksIHRoaXMpOwor
ICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgIm1vdXNlLXRhcmdldC1jaGFuZ2Vk
IiwgR19DQUxMQkFDSyhtb3VzZVRhcmdldENoYW5nZWQpLCB0aGlzKTsKKyAgICAgICAgZ19zaWdu
YWxfY29ubmVjdChtX3dlYlZpZXcsICJwZXJtaXNzaW9uLXJlcXVlc3QiLCBHX0NBTExCQUNLKHBl
cm1pc3Npb25SZXF1ZXN0ZWQpLCB0aGlzKTsKKyAgICB9CisKKyAgICB+VUlDbGllbnRUZXN0KCkK
KyAgICB7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3dl
YlZpZXcsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOworICAgIH0KKwor
ICAgIHZvaWQgd2FpdFVudGlsTWFpbkxvb3BGaW5pc2hlcygpCisgICAgeworICAgICAgICBnX21h
aW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgfQorCisgICAgdm9pZCBzZXRFeHBlY3RlZFdp
bmRvd1Byb3BlcnRpZXMoY29uc3QgV2luZG93UHJvcGVydGllcyYgd2luZG93UHJvcGVydGllcykK
KyAgICB7CisgICAgICAgIG1fd2luZG93UHJvcGVydGllcyA9IHdpbmRvd1Byb3BlcnRpZXM7Cisg
ICAgfQorCisgICAgV2ViS2l0SGl0VGVzdFJlc3VsdCogbW92ZU1vdXNlQW5kV2FpdFVudGlsTW91
c2VUYXJnZXRDaGFuZ2VkKGludCB4LCBpbnQgeSwgdW5zaWduZWQgbW91c2VNb2RpZmllcnMgPSAw
KQorICAgIHsKKyAgICAgICAgbW91c2VNb3ZlVG8oeCwgeSwgbW91c2VNb2RpZmllcnMpOworICAg
ICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgICAgIHJldHVybiBtX21vdXNl
VGFyZ2V0SGl0VGVzdFJlc3VsdC5nZXQoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIEd0a1dpZGdl
dCogdmlld0NyZWF0ZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQorICAgIHsKKyAgICAgICAgZ19h
c3NlcnQod2ViVmlldyA9PSBtX3dlYlZpZXcpOworCisgICAgICAgIEd0a1dpZGdldCogbmV3V2Vi
VmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXdfd2l0aF9jb250ZXh0KHdlYmtpdF93ZWJfdmlld19n
ZXRfY29udGV4dCh3ZWJWaWV3KSk7CisgICAgICAgIGdfb2JqZWN0X3JlZl9zaW5rKG5ld1dlYlZp
ZXcpOworCisgICAgICAgIG1fd2ViVmlld0V2ZW50cy5hcHBlbmQoQ3JlYXRlKTsKKworICAgICAg
ICBXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzKiB3aW5kb3dQcm9wZXJ0aWVzID0gd2Via2l0X3dlYl92
aWV3X2dldF93aW5kb3dfcHJvcGVydGllcyhXRUJLSVRfV0VCX1ZJRVcobmV3V2ViVmlldykpOwor
ICAgICAgICBnX2Fzc2VydCh3aW5kb3dQcm9wZXJ0aWVzKTsKKyAgICAgICAgYXNzZXJ0T2JqZWN0
SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVCh3aW5kb3dQcm9wZXJ0aWVzKSk7Cisg
ICAgICAgIG1fd2luZG93UHJvcGVydGllc0NoYW5nZWQuY2xlYXIoKTsKKworICAgICAgICBnX3Np
Z25hbF9jb25uZWN0KHdpbmRvd1Byb3BlcnRpZXMsICJub3RpZnkiLCBHX0NBTExCQUNLKHdpbmRv
d1Byb3BlcnRpZXNOb3RpZnlDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9jb25u
ZWN0KG5ld1dlYlZpZXcsICJyZWFkeS10by1zaG93IiwgR19DQUxMQkFDSyh2aWV3UmVhZHlUb1No
b3dDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG5ld1dlYlZpZXcs
ICJjbG9zZSIsIEdfQ0FMTEJBQ0sodmlld0Nsb3NlQ2FsbGJhY2spLCB0aGlzKTsKKworICAgICAg
ICByZXR1cm4gbmV3V2ViVmlldzsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlld1JlYWR5
VG9TaG93KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCisgICAgeworICAgICAgICBnX2Fzc2VydCh3
ZWJWaWV3ICE9IG1fd2ViVmlldyk7CisKKyAgICAgICAgV2ViS2l0V2luZG93UHJvcGVydGllcyog
d2luZG93UHJvcGVydGllcyA9IHdlYmtpdF93ZWJfdmlld19nZXRfd2luZG93X3Byb3BlcnRpZXMo
d2ViVmlldyk7CisgICAgICAgIGdfYXNzZXJ0KHdpbmRvd1Byb3BlcnRpZXMpOworICAgICAgICBp
ZiAoIW1fd2luZG93UHJvcGVydGllcy5pc051bGwoKSkKKyAgICAgICAgICAgIFdpbmRvd1Byb3Bl
cnRpZXMod2luZG93UHJvcGVydGllcykuYXNzZXJ0RXF1YWwobV93aW5kb3dQcm9wZXJ0aWVzKTsK
KworICAgICAgICBtX3dlYlZpZXdFdmVudHMuYXBwZW5kKFJlYWR5VG9TaG93KTsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgdmlld0Nsb3NlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCisgICAg
eworICAgICAgICBnX2Fzc2VydCh3ZWJWaWV3ICE9IG1fd2ViVmlldyk7CisKKyAgICAgICAgbV93
ZWJWaWV3RXZlbnRzLmFwcGVuZChDbG9zZSk7CisgICAgICAgIGdfb2JqZWN0X3VucmVmKHdlYlZp
ZXcpOworCisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7CisgICAgfQorCisg
ICAgVmVjdG9yPFdlYlZpZXdFdmVudHM+IG1fd2ViVmlld0V2ZW50czsKKyAgICBXZWJLaXRTY3Jp
cHREaWFsb2dUeXBlIG1fc2NyaXB0RGlhbG9nVHlwZTsKKyAgICBib29sIG1fc2NyaXB0RGlhbG9n
Q29uZmlybWVkOworICAgIGJvb2wgbV9hbGxvd1Blcm1pc3Npb25SZXF1ZXN0czsKKyAgICBXaW5k
b3dQcm9wZXJ0aWVzIG1fd2luZG93UHJvcGVydGllczsKKyAgICBIYXNoU2V0PFdURjo6U3RyaW5n
PiBtX3dpbmRvd1Byb3BlcnRpZXNDaGFuZ2VkOworICAgIEdSZWZQdHI8V2ViS2l0SGl0VGVzdFJl
c3VsdD4gbV9tb3VzZVRhcmdldEhpdFRlc3RSZXN1bHQ7CisgICAgdW5zaWduZWQgbV9tb3VzZVRh
cmdldE1vZGlmaWVyczsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3Q3JlYXRlUmVhZHlD
bG9zZShVSUNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9h
ZEh0bWwoIjxodG1sPjxib2R5IG9uTG9hZD1cIndpbmRvdy5vcGVuKCkuY2xvc2UoKTtcIj48L2h0
bWw+IiwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTWFpbkxvb3BGaW5pc2hlcygpOworCisgICAg
VmVjdG9yPFVJQ2xpZW50VGVzdDo6V2ViVmlld0V2ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fd2Vi
Vmlld0V2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDMpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBVSUNsaWVudFRlc3Q6OkNyZWF0ZSk7
CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIFVJQ2xpZW50VGVzdDo6UmVhZHlU
b1Nob3cpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBVSUNsaWVudFRlc3Q6
OkNsb3NlKTsKK30KKworc3RhdGljIGdib29sZWFuIGNoZWNrTWltZVR5cGVGb3JGaWx0ZXIoR3Rr
RmlsZUZpbHRlciogZmlsdGVyLCBjb25zdCBnY2hhciogbWltZVR5cGUpCit7CisgICAgR3RrRmls
ZUZpbHRlckluZm8gZmlsdGVySW5mbzsKKyAgICBmaWx0ZXJJbmZvLmNvbnRhaW5zID0gR1RLX0ZJ
TEVfRklMVEVSX01JTUVfVFlQRTsKKyAgICBmaWx0ZXJJbmZvLm1pbWVfdHlwZSA9IG1pbWVUeXBl
OworICAgIHJldHVybiBndGtfZmlsZV9maWx0ZXJfZmlsdGVyKGZpbHRlciwgJmZpbHRlckluZm8p
OworfQorCitjbGFzcyBNb2RhbERpYWxvZ3NUZXN0OiBwdWJsaWMgVUlDbGllbnRUZXN0IHsKK3B1
YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKE1vZGFsRGlhbG9nc1Rlc3QpOworCisg
ICAgc3RhdGljIHZvaWQgZGlhbG9nUnVuQXNNb2RhbENhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcsIE1vZGFsRGlhbG9nc1Rlc3QqIHRlc3QpCisgICAgeworICAgICAgICBnX2Fzc2VydCh3
ZWJWaWV3ICE9IHRlc3QtPm1fd2ViVmlldyk7CisgICAgICAgIHRlc3QtPm1fd2ViVmlld0V2ZW50
cy5hcHBlbmQoUnVuQXNNb2RhbCk7CisgICAgfQorCisgICAgR3RrV2lkZ2V0KiB2aWV3Q3JlYXRl
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCisgICAgeworICAgICAgICBnX2Fzc2VydCh3ZWJWaWV3
ID09IG1fd2ViVmlldyk7CisKKyAgICAgICAgR3RrV2lkZ2V0KiBuZXdXZWJWaWV3ID0gVUlDbGll
bnRUZXN0Ojp2aWV3Q3JlYXRlKHdlYlZpZXcpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG5l
d1dlYlZpZXcsICJydW4tYXMtbW9kYWwiLCBHX0NBTExCQUNLKGRpYWxvZ1J1bkFzTW9kYWxDYWxs
YmFjayksIHRoaXMpOworICAgICAgICByZXR1cm4gbmV3V2ViVmlldzsKKyAgICB9CisKKyAgICB2
b2lkIHZpZXdSZWFkeVRvU2hvdyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQorICAgIHsKKyAgICAg
ICAgZ19hc3NlcnQod2ViVmlldyAhPSBtX3dlYlZpZXcpOworICAgICAgICBtX3dlYlZpZXdFdmVu
dHMuYXBwZW5kKFJlYWR5VG9TaG93KTsKKyAgICB9Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0V2Vi
Vmlld0FsbG93TW9kYWxEaWFsb2dzKE1vZGFsRGlhbG9nc1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCit7CisgICAgV2ViS2l0U2V0dGluZ3MqIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dl
dF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZpZXcpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfYWxs
b3dfbW9kYWxfZGlhbG9ncyhzZXR0aW5ncywgVFJVRSk7CisKKyAgICB0ZXN0LT5sb2FkSHRtbCgi
PGh0bWw+PGJvZHkgb25sb2FkPVwid2luZG93LnNob3dNb2RhbERpYWxvZygnZGF0YTp0ZXh0L2h0
bWwsPGh0bWw+PGJvZHkvPjxzY3JpcHQ+d2luZG93LmNsb3NlKCk7PC9zY3JpcHQ+PC9odG1sPicp
XCI+PC9ib2R5PjwvaHRtbD4iLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxNYWluTG9vcEZpbmlz
aGVzKCk7CisKKyAgICBWZWN0b3I8VUlDbGllbnRUZXN0OjpXZWJWaWV3RXZlbnRzPiYgZXZlbnRz
ID0gdGVzdC0+bV93ZWJWaWV3RXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6
ZSgpLCA9PSwgNCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIFVJQ2xpZW50
VGVzdDo6Q3JlYXRlKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgVUlDbGll
bnRUZXN0OjpSZWFkeVRvU2hvdyk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0s
IFVJQ2xpZW50VGVzdDo6UnVuQXNNb2RhbCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sz
XSwgPT0sIFVJQ2xpZW50VGVzdDo6Q2xvc2UpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmll
d0Rpc2FsbG93TW9kYWxEaWFsb2dzKE1vZGFsRGlhbG9nc1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCit7CisgICAgV2ViS2l0U2V0dGluZ3MqIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dl
dF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZpZXcpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfYWxs
b3dfbW9kYWxfZGlhbG9ncyhzZXR0aW5ncywgRkFMU0UpOworCisgICAgdGVzdC0+bG9hZEh0bWwo
IjxodG1sPjxib2R5IG9ubG9hZD1cIndpbmRvdy5zaG93TW9kYWxEaWFsb2coJ2RhdGE6dGV4dC9o
dG1sLDxodG1sPjxib2R5Lz48c2NyaXB0PndpbmRvdy5jbG9zZSgpOzwvc2NyaXB0PjwvaHRtbD4n
KVwiPjwvYm9keT48L2h0bWw+IiwgMCk7CisgICAgLy8gV2UgbmVlZCB0byB1c2UgYSB0aW1lb3V0
IGhlcmUgYmVjYXVzZSB0aGUgdmlld0Nsb3NlKCkgZnVuY3Rpb24KKyAgICAvLyB3b24ndCBldmVy
IGJlIGNhbGxlZCBhcyB0aGUgZGlhbG9nIHdvbid0IGJlIGNyZWF0ZWQuCisgICAgdGVzdC0+d2Fp
dCgxKTsKKworICAgIFZlY3RvcjxVSUNsaWVudFRlc3Q6OldlYlZpZXdFdmVudHM+JiBldmVudHMg
PSB0ZXN0LT5tX3dlYlZpZXdFdmVudHM7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXpl
KCksID09LCAwKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdKYXZhU2NyaXB0RGlhbG9n
cyhVSUNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RhdGljIGNvbnN0
IGNoYXIqIGh0bWxPbkxvYWRGb3JtYXQgPSAiPGh0bWw+PGJvZHkgb25Mb2FkPVwiJXNcIj48L2Jv
ZHk+PC9odG1sPiI7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGpzQWxlcnRGb3JtYXQgPSAiYWxl
cnQoJyVzJykiOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBqc0NvbmZpcm1Gb3JtYXQgPSAiZG8g
eyBjb25maXJtZWQgPSBjb25maXJtKCclcycpOyB9IHdoaWxlICghY29uZmlybWVkKTsgYWxlcnQo
J2NvbmZpcm1lZCcpOyI7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGpzUHJvbXB0Rm9ybWF0ID0g
ImFsZXJ0KHByb21wdCgnJXMnLCAnZGVmYXVsdCcpKTsiOworCisgICAgdGVzdC0+bV9zY3JpcHRE
aWFsb2dUeXBlID0gV0VCS0lUX1NDUklQVF9ESUFMT0dfQUxFUlQ7CisgICAgR093blB0cjxjaGFy
PiBhbGVydERpYWxvZ01lc3NhZ2UoZ19zdHJkdXBfcHJpbnRmKGpzQWxlcnRGb3JtYXQsIGtBbGVy
dERpYWxvZ01lc3NhZ2UpKTsKKyAgICBHT3duUHRyPGNoYXI+IGFsZXJ0SFRNTChnX3N0cmR1cF9w
cmludGYoaHRtbE9uTG9hZEZvcm1hdCwgYWxlcnREaWFsb2dNZXNzYWdlLmdldCgpKSk7CisgICAg
dGVzdC0+bG9hZEh0bWwoYWxlcnRIVE1MLmdldCgpLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxN
YWluTG9vcEZpbmlzaGVzKCk7CisKKyAgICB0ZXN0LT5tX3NjcmlwdERpYWxvZ1R5cGUgPSBXRUJL
SVRfU0NSSVBUX0RJQUxPR19DT05GSVJNOworICAgIEdPd25QdHI8Y2hhcj4gY29uZmlybURpYWxv
Z01lc3NhZ2UoZ19zdHJkdXBfcHJpbnRmKGpzQ29uZmlybUZvcm1hdCwga0NvbmZpcm1EaWFsb2dN
ZXNzYWdlKSk7CisgICAgR093blB0cjxjaGFyPiBjb25maXJtSFRNTChnX3N0cmR1cF9wcmludGYo
aHRtbE9uTG9hZEZvcm1hdCwgY29uZmlybURpYWxvZ01lc3NhZ2UuZ2V0KCkpKTsKKyAgICB0ZXN0
LT5sb2FkSHRtbChjb25maXJtSFRNTC5nZXQoKSwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTWFp
bkxvb3BGaW5pc2hlcygpOworCisgICAgdGVzdC0+bV9zY3JpcHREaWFsb2dUeXBlID0gV0VCS0lU
X1NDUklQVF9ESUFMT0dfUFJPTVBUOworICAgIEdPd25QdHI8Y2hhcj4gcHJvbXB0RGlhbG9nTWVz
c2FnZShnX3N0cmR1cF9wcmludGYoanNQcm9tcHRGb3JtYXQsIGtQcm9tcHREaWFsb2dNZXNzYWdl
KSk7CisgICAgR093blB0cjxjaGFyPiBwcm9tcHRIVE1MKGdfc3RyZHVwX3ByaW50ZihodG1sT25M
b2FkRm9ybWF0LCBwcm9tcHREaWFsb2dNZXNzYWdlLmdldCgpKSk7CisgICAgdGVzdC0+bG9hZEh0
bWwocHJvbXB0SFRNTC5nZXQoKSwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTWFpbkxvb3BGaW5p
c2hlcygpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1dpbmRvd1Byb3BlcnRpZXMoVUlD
bGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFy
KiB3aW5kb3dQcm9ycGVydGllc1N0cmluZyA9ICJsZWZ0PTEwMCx0b3A9MTUwLHdpZHRoPTQwMCxo
ZWlnaHQ9NDAwLGxvY2F0aW9uPW5vLG1lbnViYXI9bm8sc3RhdHVzPW5vLHRvb2xiYXI9bm8sc2Ny
b2xsYmFycz1ubyI7CisgICAgR2RrUmVjdGFuZ2xlIGdlb21ldHJ5ID0geyAxMDAsIDE1MCwgNDAw
LCA0MDAgfTsKKyAgICB0ZXN0LT5zZXRFeHBlY3RlZFdpbmRvd1Byb3BlcnRpZXMoVUlDbGllbnRU
ZXN0OjpXaW5kb3dQcm9wZXJ0aWVzKCZnZW9tZXRyeSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFs
c2UsIGZhbHNlLCB0cnVlLCBmYWxzZSkpOworCisgICAgR093blB0cjxjaGFyPiBodG1sU3RyaW5n
KGdfc3RyZHVwX3ByaW50ZigiPGh0bWw+PGJvZHkgb25Mb2FkPVwid2luZG93Lm9wZW4oJycsICcn
LCAnJXMnKS5jbG9zZSgpO1wiPjwvYm9keT48L2h0bWw+Iiwgd2luZG93UHJvcnBlcnRpZXNTdHJp
bmcpKTsKKyAgICB0ZXN0LT5sb2FkSHRtbChodG1sU3RyaW5nLmdldCgpLCAwKTsKKyAgICB0ZXN0
LT53YWl0VW50aWxNYWluTG9vcEZpbmlzaGVzKCk7CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciog
cHJvcGVydGllc0NoYW5nZWRbXSA9IHsKKyAgICAgICAgImdlb21ldHJ5IiwgImxvY2F0aW9uYmFy
LXZpc2libGUiLCAibWVudWJhci12aXNpYmxlIiwgInN0YXR1c2Jhci12aXNpYmxlIiwgInRvb2xi
YXItdmlzaWJsZSIsICJzY3JvbGxiYXJzLXZpc2libGUiCisgICAgfTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyhwcm9wZXJ0aWVzQ2hhbmdlZCk7ICsraSkKKyAgICAg
ICAgZ19hc3NlcnQodGVzdC0+bV93aW5kb3dQcm9wZXJ0aWVzQ2hhbmdlZC5jb250YWlucyhwcm9w
ZXJ0aWVzQ2hhbmdlZFtpXSkpOworCisgICAgVmVjdG9yPFVJQ2xpZW50VGVzdDo6V2ViVmlld0V2
ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fd2ViVmlld0V2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoZXZlbnRzLnNpemUoKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0s
ID09LCBVSUNsaWVudFRlc3Q6OkNyZWF0ZSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sx
XSwgPT0sIFVJQ2xpZW50VGVzdDo6UmVhZHlUb1Nob3cpOworICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHNbMl0sID09LCBVSUNsaWVudFRlc3Q6OkNsb3NlKTsKK30KKworc3RhdGljIHZvaWQgdGVz
dFdlYlZpZXdNb3VzZVRhcmdldChVSUNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7
CisgICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKEdUS19XSU5ET1dfVE9Q
TEVWRUwpOworCisgICAgY29uc3QgY2hhciogbGlua3NIb3ZlcmVkSFRNTCA9CisgICAgICAgICI8
aHRtbD48Ym9keT4iCisgICAgICAgICIgPGEgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0
OjE7IHRvcDoxJyBocmVmPSdodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcnIHRpdGxlPSdXZWJLaXRH
VEsrIFRpdGxlJz5XZWJLaXRHVEsrIFdlYnNpdGU8L2E+IgorICAgICAgICAiIDxpbWcgc3R5bGU9
J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDoxMCcgc3JjPScweGRlYWRiZWVmJyB3aWR0
aD01IGhlaWdodD01PjwvaW1nPiIKKyAgICAgICAgIiA8YSBzdHlsZT0ncG9zaXRpb246YWJzb2x1
dGU7IGxlZnQ6MTsgdG9wOjIwJyBocmVmPSdodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcvbG9nbycg
dGl0bGU9J1dlYktpdEdUSysgTG9nbyc+PGltZyBzcmM9JzB4ZGVhZGJlZWYnIHdpZHRoPTUgaGVp
Z2h0PTU+PC9pbWc+PC9hPiIKKyAgICAgICAgIiA8aW5wdXQgc3R5bGU9J3Bvc2l0aW9uOmFic29s
dXRlOyBsZWZ0OjE7IHRvcDozMCcgc2l6ZT0nMTAnPjwvaW5wdXQ+IgorICAgICAgICAiIDxkaXYg
c3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDo1MDsgd2lkdGg6MzA7IGhlaWdo
dDozMDsgb3ZlcmZsb3c6c2Nyb2xsJz4mbmJzcDs8L2Rpdj4iCisgICAgICAgICIgPHZpZGVvIHN0
eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MTAwJyB3aWR0aD0nMzAwJyBoZWln
aHQ9JzMwMCcgY29udHJvbHM9J2NvbnRyb2xzJyBwcmVsb2FkPSdub25lJz48c291cmNlIHNyYz0n
bW92aWUub2dnJyB0eXBlPSd2aWRlby9vZ2cnIC8+PC92aWRlbz4iCisgICAgICAgICI8L2JvZHk+
PC9odG1sPiI7CisKKyAgICB0ZXN0LT5sb2FkSHRtbChsaW5rc0hvdmVyZWRIVE1MLCAiZmlsZTov
Ly8iKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIC8vIE1vdmUg
b3ZlciBsaW5rLgorICAgIFdlYktpdEhpdFRlc3RSZXN1bHQqIGhpdFRlc3RSZXN1bHQgPSB0ZXN0
LT5tb3ZlTW91c2VBbmRXYWl0VW50aWxNb3VzZVRhcmdldENoYW5nZWQoMSwgMSk7CisgICAgZ19h
c3NlcnQod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3Vs
dCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1h
Z2UoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0
X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRf
aGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOworICAg
IGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9saW5rX3VyaShoaXRU
ZXN0UmVzdWx0KSwgPT0sICJodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcvIik7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfdGl0bGUoaGl0VGVzdFJl
c3VsdCksID09LCAiV2ViS2l0R1RLKyBUaXRsZSIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJr
aXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9saW5rX2xhYmVsKGhpdFRlc3RSZXN1bHQpLCA9PSwgIldl
YktpdEdUSysgV2Vic2l0ZSIpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX21vdXNlVGFyZ2V0TW9k
aWZpZXJzKTsKKworICAgIC8vIE1vdmUgb3V0IG9mIHRoZSBsaW5rLgorICAgIGhpdFRlc3RSZXN1
bHQgPSB0ZXN0LT5tb3ZlTW91c2VBbmRXYWl0VW50aWxNb3VzZVRhcmdldENoYW5nZWQoMCwgMCk7
CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhp
dFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250
ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90
ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2Vy
dCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1
bHQpKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+bV9tb3VzZVRhcmdldE1vZGlmaWVycyk7CisKKyAg
ICAvLyBNb3ZlIG92ZXIgaW1hZ2Ugd2l0aCBHREtfQ09OVFJPTF9NQVNLLgorICAgIGhpdFRlc3RS
ZXN1bHQgPSB0ZXN0LT5tb3ZlTW91c2VBbmRXYWl0VW50aWxNb3VzZVRhcmdldENoYW5nZWQoMSwg
MTAsIEdES19DT05UUk9MX01BU0spOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVz
dWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQod2Via2l0
X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBn
X2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RS
ZXN1bHQpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lz
X2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0
X3Jlc3VsdF9jb250ZXh0X2lzX3Njcm9sbGJhcihoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2ltYWdlX3VyaShoaXRUZXN0UmVz
dWx0KSwgPT0sICJmaWxlOi8vLzB4ZGVhZGJlZWYiKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX21v
dXNlVGFyZ2V0TW9kaWZpZXJzICYgR0RLX0NPTlRST0xfTUFTSyk7CisKKyAgICAvLyBNb3ZlIG92
ZXIgaW1hZ2UgbGluay4KKyAgICBoaXRUZXN0UmVzdWx0ID0gdGVzdC0+bW92ZU1vdXNlQW5kV2Fp
dFVudGlsTW91c2VUYXJnZXRDaGFuZ2VkKDEsIDIwKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfaGl0
X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3Nl
cnQod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQp
KTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlh
KGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9j
b250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0
X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX3Njcm9sbGJhcihoaXRUZXN0UmVzdWx0KSk7Cisg
ICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfdXJpKGhp
dFRlc3RSZXN1bHQpLCA9PSwgImh0dHA6Ly93d3cud2Via2l0Z3RrLm9yZy9sb2dvIik7CisgICAg
Z19hc3NlcnRfY21wc3RyKHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2ltYWdlX3VyaShoaXRU
ZXN0UmVzdWx0KSwgPT0sICJmaWxlOi8vLzB4ZGVhZGJlZWYiKTsKKyAgICBnX2Fzc2VydF9jbXBz
dHIod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfbGlua190aXRsZShoaXRUZXN0UmVzdWx0KSwg
PT0sICJXZWJLaXRHVEsrIExvZ28iKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jl
c3VsdF9nZXRfbGlua19sYWJlbChoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXRlc3Qt
Pm1fbW91c2VUYXJnZXRNb2RpZmllcnMpOworCisgICAgLy8gTW92ZSBvdmVyIG1lZGlhLgorICAg
IGhpdFRlc3RSZXN1bHQgPSB0ZXN0LT5tb3ZlTW91c2VBbmRXYWl0VW50aWxNb3VzZVRhcmdldENo
YW5nZWQoMSwgMTAwKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250
ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rl
c3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0
KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7
CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJs
ZShoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRf
Y29udGV4dF9pc19zY3JvbGxiYXIoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0X2NtcHN0
cih3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9tZWRpYV91cmkoaGl0VGVzdFJlc3VsdCksID09
LCAiZmlsZTovLy9tb3ZpZS5vZ2ciKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+bV9tb3VzZVRhcmdl
dE1vZGlmaWVycyk7CisKKyAgICAvLyBNb3ZlciBvdmVyIGlucHV0LgorICAgIGhpdFRlc3RSZXN1
bHQgPSB0ZXN0LT5tb3ZlTW91c2VBbmRXYWl0VW50aWxNb3VzZVRhcmdldENoYW5nZWQoNSwgMzUp
OworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayho
aXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29u
dGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRf
dGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3Nl
cnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19zY3JvbGxiYXIoaGl0VGVzdFJl
c3VsdCkpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19l
ZGl0YWJsZShoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXRlc3QtPm1fbW91c2VUYXJn
ZXRNb2RpZmllcnMpOworCisgICAgLy8gTW92ZSBvdmVyIHNjcm9sbGJhci4KKyAgICBoaXRUZXN0
UmVzdWx0ID0gdGVzdC0+bW92ZU1vdXNlQW5kV2FpdFVudGlsTW91c2VUYXJnZXRDaGFuZ2VkKDUs
IDc1KTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xp
bmsoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0
X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRf
aGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkpOworICAgIGdf
YXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVz
dFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9p
c19zY3JvbGxiYXIoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX21vdXNl
VGFyZ2V0TW9kaWZpZXJzKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdQZXJtaXNzaW9u
UmVxdWVzdHMoVUlDbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIC8vIFNv
bWUgdmVyc2lvbnMgb2YgZ2VvY2x1ZSBnaXZlIGEgcnVudGltZSB3YXJuaW5nIGJlY2F1c2UgaXQg
dHJpZXMKKyAgICAvLyB0byByZWdpc3RlciB0aGUgZXJyb3IgcXVhcmsgdHdpY2UuIFNlZSBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk4NTguCisgICAgLy8gTWFrZSB3
YXJuaW5ncyBub24tZmF0YWwgZm9yIHRoaXMgdGVzdCB0byBtYWtlIGl0IHBhc3MuCisgICAgdGVz
dC0+cmVtb3ZlTG9nRmF0YWxGbGFnKEdfTE9HX0xFVkVMX1dBUk5JTkcpOworICAgIHRlc3QtPnNo
b3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBn
ZW9sb2NhdGlvblJlcXVlc3RIVE1MID0KKyAgICAgICAgIjxodG1sPiIKKyAgICAgICAgIiAgPHNj
cmlwdD4iCisgICAgICAgICIgIGZ1bmN0aW9uIHJ1blRlc3QoKSIKKyAgICAgICAgIiAgeyIKKyAg
ICAgICAgIiAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGZ1bmN0
aW9uKHApIHsgZG9jdW1lbnQudGl0bGUgPSBcIk9LXCIgfSwiCisgICAgICAgICIgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihlKSB7IGRvY3VtZW50
LnRpdGxlID0gZS5jb2RlIH0pOyIKKyAgICAgICAgIiAgfSIKKyAgICAgICAgIiAgPC9zY3JpcHQ+
IgorICAgICAgICAiICA8Ym9keSBvbmxvYWQ9J3J1blRlc3QoKTsnPjwvYm9keT4iCisgICAgICAg
ICI8L2h0bWw+IjsKKworICAgIC8vIFRlc3QgZGVueWluZyBhIHBlcm1pc3Npb24gcmVxdWVzdC4K
KyAgICB0ZXN0LT5tX2FsbG93UGVybWlzc2lvblJlcXVlc3RzID0gZmFsc2U7CisgICAgdGVzdC0+
bG9hZEh0bWwoZ2VvbG9jYXRpb25SZXF1ZXN0SFRNTCwgMCk7CisgICAgdGVzdC0+d2FpdFVudGls
VGl0bGVDaGFuZ2VkKCk7CisKKyAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIEdlb2xvY2F0aW9uIEFQ
SSBzcGVjaWZpY2F0aW9uLCAnMScgaXMgdGhlCisgICAgLy8gZXJyb3IgY29kZSByZXR1cm5lZCBm
b3IgdGhlIFBFUk1JU1NJT05fREVOSUVEIGVycm9yLgorICAgIC8vIGh0dHA6Ly9kZXYudzMub3Jn
L2dlby9hcGkvc3BlYy1zb3VyY2UuaHRtbCNwb3NpdGlvbl9lcnJvcl9pbnRlcmZhY2UKKyAgICBj
b25zdCBnY2hhciogcmVzdWx0ID0gd2Via2l0X3dlYl92aWV3X2dldF90aXRsZSh0ZXN0LT5tX3dl
YlZpZXcpOworICAgIGdfYXNzZXJ0X2NtcHN0cihyZXN1bHQsID09LCAiMSIpOworCisgICAgLy8g
VGVzdCBhbGxvd2luZyBhIHBlcm1pc3Npb24gcmVxdWVzdC4KKyAgICB0ZXN0LT5tX2FsbG93UGVy
bWlzc2lvblJlcXVlc3RzID0gdHJ1ZTsKKyAgICB0ZXN0LT5sb2FkSHRtbChnZW9sb2NhdGlvblJl
cXVlc3RIVE1MLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxUaXRsZUNoYW5nZWQoKTsKKworICAg
IC8vIENoZWNrIHRoYXQgd2UgZGlkIG5vdCBnZXQgdGhlIFBFUk1JU1NJT05fREVOSUVEIGVycm9y
IG5vdy4KKyAgICByZXN1bHQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKHRlc3QtPm1fd2Vi
Vmlldyk7CisgICAgZ19hc3NlcnRfY21wc3RyKHJlc3VsdCwgIT0sICIxIik7CisgICAgdGVzdC0+
YWRkTG9nRmF0YWxGbGFnKEdfTE9HX0xFVkVMX1dBUk5JTkcpOworfQorCitjbGFzcyBGaWxlQ2hv
b3NlclRlc3Q6IHB1YmxpYyBVSUNsaWVudFRlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9U
RVNUX0ZJWFRVUkUoRmlsZUNob29zZXJUZXN0KTsKKworICAgIEZpbGVDaG9vc2VyVGVzdCgpCisg
ICAgeworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgInJ1bi1maWxlLWNob29z
ZXIiLCBHX0NBTExCQUNLKHJ1bkZpbGVDaG9vc2VyQ2FsbGJhY2spLCB0aGlzKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgZ2Jvb2xlYW4gcnVuRmlsZUNob29zZXJDYWxsYmFjayhXZWJLaXRXZWJWaWV3
KiwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0LCBGaWxlQ2hvb3NlclRlc3QqIHRl
c3QpCisgICAgeworICAgICAgICB0ZXN0LT5ydW5GaWxlQ2hvb3NlcihyZXF1ZXN0KTsKKyAgICAg
ICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgdm9pZCBydW5GaWxlQ2hvb3NlcihXZWJLaXRG
aWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCisgICAgeworICAgICAgICBhc3NlcnRPYmplY3RJ
c0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHJlcXVlc3QpKTsKKyAgICAgICAgbV9m
aWxlQ2hvb3NlclJlcXVlc3QgPSByZXF1ZXN0OworICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1f
bWFpbkxvb3ApOworICAgIH0KKworICAgIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogY2xpY2tN
b3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QoaW50IHgsIGludCB5KQorICAg
IHsKKyAgICAgICAgY2xpY2tNb3VzZUJ1dHRvbih4LCB5KTsKKyAgICAgICAgZ19tYWluX2xvb3Bf
cnVuKG1fbWFpbkxvb3ApOworICAgICAgICByZXR1cm4gbV9maWxlQ2hvb3NlclJlcXVlc3QuZ2V0
KCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEdSZWZQdHI8V2ViS2l0RmlsZUNob29zZXJSZXF1
ZXN0PiBtX2ZpbGVDaG9vc2VyUmVxdWVzdDsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3
RmlsZUNob29zZXJSZXF1ZXN0KEZpbGVDaG9vc2VyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikK
K3sKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKKyAgICBzdGF0
aWMgY29uc3QgY2hhciogZmlsZUNob29zZXJIVE1MRm9ybWF0ID0gIjxodG1sPjxib2R5PjxpbnB1
dCBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO21hcmdpbjowO3BhZGRpbmc6
MCcgdHlwZT0nZmlsZScgJXMvPjwvYm9keT48L2h0bWw+IjsKKworICAgIC8vIE11bHRpcGxlIHNl
bGVjdGlvbnMgbm90IGFsbG93ZWQsIG5vIE1JTUUgZmlsdGVyaW5nLgorICAgIEdPd25QdHI8Y2hh
cj4gc2ltcGxlRmlsZVVwbG9hZEhUTUwoZ19zdHJkdXBfcHJpbnRmKGZpbGVDaG9vc2VySFRNTEZv
cm1hdCwgIiIpKTsKKyAgICB0ZXN0LT5sb2FkSHRtbChzaW1wbGVGaWxlVXBsb2FkSFRNTC5nZXQo
KSwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgV2ViS2l0Rmls
ZUNob29zZXJSZXF1ZXN0KiBmaWxlQ2hvb3NlclJlcXVlc3QgPSB0ZXN0LT5jbGlja01vdXNlQnV0
dG9uQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdCg1LCA1KTsKKyAgICBnX2Fzc2VydCghd2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RfbXVsdGlwbGUoZmlsZUNob29zZXJS
ZXF1ZXN0KSk7CisKKyAgICBjb25zdCBnY2hhciogY29uc3QqIG1pbWVUeXBlcyA9IHdlYmtpdF9m
aWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyhmaWxlQ2hvb3NlclJlcXVlc3QpOwor
ICAgIGdfYXNzZXJ0KCFtaW1lVHlwZXMpOworICAgIEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciA9IHdl
YmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIoZmlsZUNob29z
ZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghZmlsdGVyKTsKKyAgICBjb25zdCBnY2hhciogY29u
c3QqIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVj
dGVkX2ZpbGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIXNlbGVjdGVkRmls
ZXMpOworICAgIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWwoZmlsZUNob29zZXJS
ZXF1ZXN0KTsKKworICAgIC8vIE11bHRpcGxlIHNlbGVjdGlvbnMgYWxsb3dlZCwgbm8gTUlNRSBm
aWx0ZXJpbmcsIHNvbWUgcHJlLXNlbGVjdGVkIGZpbGVzLgorICAgIEdPd25QdHI8Y2hhcj4gbXVs
dGlwbGVTZWxlY3Rpb25GaWxlVXBsb2FkSFRNTChnX3N0cmR1cF9wcmludGYoZmlsZUNob29zZXJI
VE1MRm9ybWF0LCAibXVsdGlwbGUiKSk7CisgICAgdGVzdC0+bG9hZEh0bWwobXVsdGlwbGVTZWxl
Y3Rpb25GaWxlVXBsb2FkSFRNTC5nZXQoKSwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZp
bmlzaGVkKCk7CisgICAgZmlsZUNob29zZXJSZXF1ZXN0ID0gdGVzdC0+Y2xpY2tNb3VzZUJ1dHRv
bkFuZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QoNSwgNSk7CisgICAgZ19hc3NlcnQod2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RfbXVsdGlwbGUoZmlsZUNob29zZXJSZXF1
ZXN0KSk7CisKKyAgICBtaW1lVHlwZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0
X21pbWVfdHlwZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghbWltZVR5cGVz
KTsKKyAgICBmaWx0ZXIgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlw
ZXNfZmlsdGVyKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIWZpbHRlcik7Cisg
ICAgc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0
ZWRfZmlsZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxl
cyk7CisKKyAgICAvLyBTZWxlY3Qgc29tZSBmaWxlcy4KKyAgICBjb25zdCBnY2hhciogZmlsZXNU
b1NlbGVjdFs0XSA9IHsgIi9mb28iLCAiL2Zvby9iYXIiLCAiL2Zvby9iYXIvYmF6IiwgMCB9Owor
ICAgIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXMoZmlsZUNob29zZXJS
ZXF1ZXN0LCBmaWxlc1RvU2VsZWN0KTsKKworICAgIC8vIENoZWNrIHRoZSBmaWxlcyB0aGF0IGhh
dmUgYmVlbiBqdXN0IHNlbGVjdGVkLgorICAgIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9j
aG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7Cisg
ICAgZ19hc3NlcnQoc2VsZWN0ZWRGaWxlcyk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVk
RmlsZXNbMF0sID09LCAiL2ZvbyIpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVz
WzFdLCA9PSwgIi9mb28vYmFyIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNb
Ml0sID09LCAiL2Zvby9iYXIvYmF6Iik7CisgICAgZ19hc3NlcnQoIXNlbGVjdGVkRmlsZXNbM10p
OworCisgICAgLy8gUGVyZm9ybSBhbm90aGVyIHJlcXVlc3QgdG8gY2hlY2sgaWYgdGhlIGxpc3Qg
b2YgZmlsZXMgc2VsZWN0ZWQKKyAgICAvLyBpbiB0aGUgcHJldmlvdXMgc3RlcCBhcHBlYXJzIG5v
dyBhcyBwYXJ0IG9mIHRoZSBuZXcgcmVxdWVzdC4KKyAgICBmaWxlQ2hvb3NlclJlcXVlc3QgPSB0
ZXN0LT5jbGlja01vdXNlQnV0dG9uQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdCg1LCA1KTsK
KyAgICBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxl
Y3RlZF9maWxlcyhmaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0KHNlbGVjdGVkRmls
ZXMpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzBdLCA9PSwgIi9mb28iKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1sxXSwgPT0sICIvZm9vL2JhciIpOwor
ICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzJdLCA9PSwgIi9mb28vYmFyL2JheiIp
OworICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzWzNdKTsKKyAgICB3ZWJraXRfZmlsZV9jaG9v
c2VyX3JlcXVlc3RfY2FuY2VsKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisKKyAgICAvLyBNdWx0aXBs
ZSBzZWxlY3Rpb25zIG5vdCBhbGxvd2VkLCBvbmx5IGFjY2VwdCBpbWFnZXMsIGF1ZGlvIGFuZCB2
aWRlbyBmaWxlcy4uCisgICAgR093blB0cjxjaGFyPiBtaW1lRmlsdGVyZWRGaWxlVXBsb2FkSFRN
TChnX3N0cmR1cF9wcmludGYoZmlsZUNob29zZXJIVE1MRm9ybWF0LCAiYWNjZXB0PSdhdWRpby8q
LHZpZGVvLyosaW1hZ2UvKiciKSk7CisgICAgdGVzdC0+bG9hZEh0bWwobWltZUZpbHRlcmVkRmls
ZVVwbG9hZEhUTUwuZ2V0KCksIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgp
OworICAgIGZpbGVDaG9vc2VyUmVxdWVzdCA9IHRlc3QtPmNsaWNrTW91c2VCdXR0b25BbmRXYWl0
Rm9yRmlsZUNob29zZXJSZXF1ZXN0KDUsIDUpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfZmlsZV9j
aG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBsZShmaWxlQ2hvb3NlclJlcXVlc3QpKTsK
KworICAgIG1pbWVUeXBlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90
eXBlcyhmaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0KG1pbWVUeXBlcyk7CisgICAg
Z19hc3NlcnRfY21wc3RyKG1pbWVUeXBlc1swXSwgPT0sICJhdWRpby8qIik7CisgICAgZ19hc3Nl
cnRfY21wc3RyKG1pbWVUeXBlc1sxXSwgPT0sICJ2aWRlby8qIik7CisgICAgZ19hc3NlcnRfY21w
c3RyKG1pbWVUeXBlc1syXSwgPT0sICJpbWFnZS8qIik7CisgICAgZ19hc3NlcnQoIW1pbWVUeXBl
c1szXSk7CisKKyAgICBmaWx0ZXIgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21p
bWVfdHlwZXNfZmlsdGVyKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoR1RLX0lT
X0ZJTEVfRklMVEVSKGZpbHRlcikpOworICAgIGdfYXNzZXJ0KGNoZWNrTWltZVR5cGVGb3JGaWx0
ZXIoZmlsdGVyLCAiYXVkaW8vKiIpKTsKKyAgICBnX2Fzc2VydChjaGVja01pbWVUeXBlRm9yRmls
dGVyKGZpbHRlciwgInZpZGVvLyoiKSk7CisgICAgZ19hc3NlcnQoY2hlY2tNaW1lVHlwZUZvckZp
bHRlcihmaWx0ZXIsICJpbWFnZS8qIikpOworCisgICAgc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9m
aWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMoZmlsZUNob29zZXJSZXF1ZXN0
KTsKKyAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlcyk7CisgICAgd2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2NhbmNlbChmaWxlQ2hvb3NlclJlcXVlc3QpOworfQorCit2b2lkIGJlZm9yZUFs
bCgpCit7CisgICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiY3JlYXRlLXJl
YWR5LWNsb3NlIiwgdGVzdFdlYlZpZXdDcmVhdGVSZWFkeUNsb3NlKTsKKyAgICBNb2RhbERpYWxv
Z3NUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiYWxsb3ctbW9kYWwtZGlhbG9ncyIsIHRlc3RX
ZWJWaWV3QWxsb3dNb2RhbERpYWxvZ3MpOworICAgIE1vZGFsRGlhbG9nc1Rlc3Q6OmFkZCgiV2Vi
S2l0V2ViVmlldyIsICJkaXNhbGxvdy1tb2RhbC1kaWFsb2dzIiwgdGVzdFdlYlZpZXdEaXNhbGxv
d01vZGFsRGlhbG9ncyk7CisgICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAi
amF2YXNjcmlwdC1kaWFsb2dzIiwgdGVzdFdlYlZpZXdKYXZhU2NyaXB0RGlhbG9ncyk7CisgICAg
VUlDbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAid2luZG93LXByb3BlcnRpZXMiLCB0
ZXN0V2ViVmlld1dpbmRvd1Byb3BlcnRpZXMpOworICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJL
aXRXZWJWaWV3IiwgIm1vdXNlLXRhcmdldCIsIHRlc3RXZWJWaWV3TW91c2VUYXJnZXQpOworICAg
IFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInBlcm1pc3Npb24tcmVxdWVzdHMi
LCB0ZXN0V2ViVmlld1Blcm1pc3Npb25SZXF1ZXN0cyk7CisgICAgRmlsZUNob29zZXJUZXN0Ojph
ZGQoIldlYktpdFdlYlZpZXciLCAiZmlsZS1jaG9vc2VyLXJlcXVlc3QiLCB0ZXN0V2ViVmlld0Zp
bGVDaG9vc2VyUmVxdWVzdCk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZp
ZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktp
dFdlYlZpZXcuY3BwCmluZGV4IDdhNTMxMDQuLmQ3MGIwYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmll
dy5jcHAKQEAgLTE4LDE3ICsxOCwxMSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJMb2FkVHJhY2tpbmdUZXN0LmgiCi0jaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5o
IgogI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNT
dHJpbmdSZWYuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVlUmVmLmg+CiAjaW5j
bHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUg
PHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+
Ci0KLXN0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBrU2VydmVyOwogCiBzdGF0aWMgdm9pZCB0ZXN0
V2ViVmlld0RlZmF1bHRDb250ZXh0KFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQog
ewpAQCAtNzUsNTMxICs2OSw2IEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3U2V0dGluZ3MoV2Vi
Vmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgZ19hc3NlcnQod2Via2l0X3NldHRp
bmdzX2dldF9lbmFibGVfamF2YXNjcmlwdChzZXR0aW5ncykpOwogfQogCi1zdGF0aWMgY29uc3Qg
Y2hhcioga0FsZXJ0RGlhbG9nTWVzc2FnZSA9ICJXZWJLaXRHVEsrIGFsZXJ0IGRpYWxvZyBtZXNz
YWdlIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBrQ29uZmlybURpYWxvZ01lc3NhZ2UgPSAiV2ViS2l0
R1RLKyBjb25maXJtIGRpYWxvZyBtZXNzYWdlIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBrUHJvbXB0
RGlhbG9nTWVzc2FnZSA9ICJXZWJLaXRHVEsrIHByb21wdCBkaWFsb2cgbWVzc2FnZSI7Ci1zdGF0
aWMgY29uc3QgY2hhcioga1Byb21wdERpYWxvZ1JldHVybmVkVGV4dCA9ICJXZWJLaXRHVEsrIHBy
b21wdCBkaWFsb2cgcmV0dXJuZWQgdGV4dCI7Ci0KLWNsYXNzIFVJQ2xpZW50VGVzdDogcHVibGlj
IFdlYlZpZXdUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFVJQ2xp
ZW50VGVzdCk7Ci0KLSAgICBlbnVtIFdlYlZpZXdFdmVudHMgewotICAgICAgICBDcmVhdGUsCi0g
ICAgICAgIFJlYWR5VG9TaG93LAotICAgICAgICBSdW5Bc01vZGFsLAotICAgICAgICBDbG9zZQot
ICAgIH07Ci0KLSAgICBjbGFzcyBXaW5kb3dQcm9wZXJ0aWVzIHsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIFdpbmRvd1Byb3BlcnRpZXMoKQotICAgICAgICAgICAgOiBtX2lzTnVsbCh0cnVlKQotICAg
ICAgICAgICAgLCBtX3Rvb2xiYXJWaXNpYmxlKHRydWUpCi0gICAgICAgICAgICAsIG1fc3RhdHVz
YmFyVmlzaWJsZSh0cnVlKQotICAgICAgICAgICAgLCBtX3Njcm9sbGJhcnNWaXNpYmxlKHRydWUp
Ci0gICAgICAgICAgICAsIG1fbWVudWJhclZpc2libGUodHJ1ZSkKLSAgICAgICAgICAgICwgbV9s
b2NhdGlvbmJhclZpc2libGUodHJ1ZSkKLSAgICAgICAgICAgICwgbV9yZXNpemFibGUodHJ1ZSkK
LSAgICAgICAgICAgICwgbV9mdWxsc2NyZWVuKGZhbHNlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBtZW1zZXQoJm1fZ2VvbWV0cnksIDAsIHNpemVvZihHZGtSZWN0YW5nbGUpKTsKLSAgICAgICAg
fQotCi0gICAgICAgIFdpbmRvd1Byb3BlcnRpZXMoV2ViS2l0V2luZG93UHJvcGVydGllcyogd2lu
ZG93UHJvcGVydGllcykKLSAgICAgICAgICAgIDogbV9pc051bGwoZmFsc2UpCi0gICAgICAgICAg
ICAsIG1fdG9vbGJhclZpc2libGUod2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF90b29sYmFy
X3Zpc2libGUod2luZG93UHJvcGVydGllcykpCi0gICAgICAgICAgICAsIG1fc3RhdHVzYmFyVmlz
aWJsZSh3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3N0YXR1c2Jhcl92aXNpYmxlKHdpbmRv
d1Byb3BlcnRpZXMpKQotICAgICAgICAgICAgLCBtX3Njcm9sbGJhcnNWaXNpYmxlKHdlYmtpdF93
aW5kb3dfcHJvcGVydGllc19nZXRfc2Nyb2xsYmFyc192aXNpYmxlKHdpbmRvd1Byb3BlcnRpZXMp
KQotICAgICAgICAgICAgLCBtX21lbnViYXJWaXNpYmxlKHdlYmtpdF93aW5kb3dfcHJvcGVydGll
c19nZXRfbWVudWJhcl92aXNpYmxlKHdpbmRvd1Byb3BlcnRpZXMpKQotICAgICAgICAgICAgLCBt
X2xvY2F0aW9uYmFyVmlzaWJsZSh3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X2xvY2F0aW9u
YmFyX3Zpc2libGUod2luZG93UHJvcGVydGllcykpCi0gICAgICAgICAgICAsIG1fcmVzaXphYmxl
KHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfcmVzaXphYmxlKHdpbmRvd1Byb3BlcnRpZXMp
KQotICAgICAgICAgICAgLCBtX2Z1bGxzY3JlZW4od2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dl
dF9mdWxsc2NyZWVuKHdpbmRvd1Byb3BlcnRpZXMpKQotICAgICAgICB7Ci0gICAgICAgICAgICB3
ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X2dlb21ldHJ5KHdpbmRvd1Byb3BlcnRpZXMsICZt
X2dlb21ldHJ5KTsKLSAgICAgICAgfQotCi0gICAgICAgIFdpbmRvd1Byb3BlcnRpZXMoR2RrUmVj
dGFuZ2xlKiBnZW9tZXRyeSwgYm9vbCB0b29sYmFyVmlzaWJsZSwgYm9vbCBzdGF0dXNiYXJWaXNp
YmxlLCBib29sIHNjcm9sbGJhcnNWaXNpYmxlLCBib29sIG1lbnViYXJWaXNpYmxlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgbG9jYXRpb25iYXJWaXNpYmxlLCBib29sIHJlc2l6YWJs
ZSwgYm9vbCBmdWxsc2NyZWVuKQotICAgICAgICAgICAgOiBtX2lzTnVsbChmYWxzZSkKLSAgICAg
ICAgICAgICwgbV9nZW9tZXRyeSgqZ2VvbWV0cnkpCi0gICAgICAgICAgICAsIG1fdG9vbGJhclZp
c2libGUodG9vbGJhclZpc2libGUpCi0gICAgICAgICAgICAsIG1fc3RhdHVzYmFyVmlzaWJsZShz
dGF0dXNiYXJWaXNpYmxlKQotICAgICAgICAgICAgLCBtX3Njcm9sbGJhcnNWaXNpYmxlKHNjcm9s
bGJhcnNWaXNpYmxlKQotICAgICAgICAgICAgLCBtX21lbnViYXJWaXNpYmxlKG1lbnViYXJWaXNp
YmxlKQotICAgICAgICAgICAgLCBtX2xvY2F0aW9uYmFyVmlzaWJsZShsb2NhdGlvbmJhclZpc2li
bGUpCi0gICAgICAgICAgICAsIG1fcmVzaXphYmxlKHJlc2l6YWJsZSkKLSAgICAgICAgICAgICwg
bV9mdWxsc2NyZWVuKGZ1bGxzY3JlZW4pCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAg
IGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9pc051bGw7IH0KLQotICAgICAgICB2b2lk
IGFzc2VydEVxdWFsKGNvbnN0IFdpbmRvd1Byb3BlcnRpZXMmIG90aGVyKSBjb25zdAotICAgICAg
ICB7Ci0gICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQobV9nZW9tZXRyeS54LCA9PSwgb3RoZXIu
bV9nZW9tZXRyeS54KTsKLSAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGludChtX2dlb21ldHJ5Lnks
ID09LCBvdGhlci5tX2dlb21ldHJ5LnkpOwotICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KG1f
Z2VvbWV0cnkud2lkdGgsID09LCBvdGhlci5tX2dlb21ldHJ5LndpZHRoKTsKLSAgICAgICAgICAg
IGdfYXNzZXJ0X2NtcGludChtX2dlb21ldHJ5LmhlaWdodCwgPT0sIG90aGVyLm1fZ2VvbWV0cnku
aGVpZ2h0KTsKLSAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGludChzdGF0aWNfY2FzdDxpbnQ+KG1f
dG9vbGJhclZpc2libGUpLCA9PSwgc3RhdGljX2Nhc3Q8aW50PihvdGhlci5tX3Rvb2xiYXJWaXNp
YmxlKSk7Ci0gICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQoc3RhdGljX2Nhc3Q8aW50PihtX3N0
YXR1c2JhclZpc2libGUpLCA9PSwgc3RhdGljX2Nhc3Q8aW50PihvdGhlci5tX3N0YXR1c2JhclZp
c2libGUpKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGludChzdGF0aWNfY2FzdDxpbnQ+KG1f
c2Nyb2xsYmFyc1Zpc2libGUpLCA9PSwgc3RhdGljX2Nhc3Q8aW50PihvdGhlci5tX3Njcm9sbGJh
cnNWaXNpYmxlKSk7Ci0gICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQoc3RhdGljX2Nhc3Q8aW50
PihtX21lbnViYXJWaXNpYmxlKSwgPT0sIHN0YXRpY19jYXN0PGludD4ob3RoZXIubV9tZW51YmFy
VmlzaWJsZSkpOwotICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KHN0YXRpY19jYXN0PGludD4o
bV9sb2NhdGlvbmJhclZpc2libGUpLCA9PSwgc3RhdGljX2Nhc3Q8aW50PihvdGhlci5tX2xvY2F0
aW9uYmFyVmlzaWJsZSkpOwotICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KHN0YXRpY19jYXN0
PGludD4obV9yZXNpemFibGUpLCA9PSwgc3RhdGljX2Nhc3Q8aW50PihvdGhlci5tX3Jlc2l6YWJs
ZSkpOwotICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KHN0YXRpY19jYXN0PGludD4obV9mdWxs
c2NyZWVuKSwgPT0sIHN0YXRpY19jYXN0PGludD4ob3RoZXIubV9mdWxsc2NyZWVuKSk7Ci0gICAg
ICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGJvb2wgbV9pc051bGw7Ci0KLSAgICAgICAg
R2RrUmVjdGFuZ2xlIG1fZ2VvbWV0cnk7Ci0KLSAgICAgICAgYm9vbCBtX3Rvb2xiYXJWaXNpYmxl
OwotICAgICAgICBib29sIG1fc3RhdHVzYmFyVmlzaWJsZTsKLSAgICAgICAgYm9vbCBtX3Njcm9s
bGJhcnNWaXNpYmxlOwotICAgICAgICBib29sIG1fbWVudWJhclZpc2libGU7Ci0gICAgICAgIGJv
b2wgbV9sb2NhdGlvbmJhclZpc2libGU7Ci0KLSAgICAgICAgYm9vbCBtX3Jlc2l6YWJsZTsKLSAg
ICAgICAgYm9vbCBtX2Z1bGxzY3JlZW47Ci0gICAgfTsKLQotICAgIHN0YXRpYyB2b2lkIHdpbmRv
d1Byb3BlcnRpZXNOb3RpZnlDYWxsYmFjayhHT2JqZWN0KiwgR1BhcmFtU3BlYyogcGFyYW1TcGVj
LCBVSUNsaWVudFRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICB0ZXN0LT5tX3dpbmRvd1Byb3Bl
cnRpZXNDaGFuZ2VkLmFkZChnX3BhcmFtX3NwZWNfZ2V0X25hbWUocGFyYW1TcGVjKSk7Ci0gICAg
fQotCi0gICAgc3RhdGljIEd0a1dpZGdldCogdmlld0NyZWF0ZUNhbGxiYWNrKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcsIFVJQ2xpZW50VGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0
ZXN0LT52aWV3Q3JlYXRlKHdlYlZpZXcpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHZpZXdS
ZWFkeVRvU2hvd0NhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFVJQ2xpZW50VGVzdCog
dGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPnZpZXdSZWFkeVRvU2hvdyh3ZWJWaWV3KTsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgdm9pZCB2aWV3Q2xvc2VDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3LCBVSUNsaWVudFRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICB0ZXN0LT52aWV3Q2xv
c2Uod2ViVmlldyk7Ci0gICAgfQotCi0gICAgdm9pZCBzY3JpcHRBbGVydChXZWJLaXRTY3JpcHRE
aWFsb2cqIGRpYWxvZykKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobV9zY3JpcHREaWFsb2dUeXBl
KSB7Ci0gICAgICAgIGNhc2UgV0VCS0lUX1NDUklQVF9ESUFMT0dfQUxFUlQ6Ci0gICAgICAgICAg
ICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NjcmlwdF9kaWFsb2dfZ2V0X21lc3NhZ2UoZGlhbG9n
KSwgPT0sIGtBbGVydERpYWxvZ01lc3NhZ2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgV0VCS0lUX1NDUklQVF9ESUFMT0dfQ09ORklSTToKLSAgICAgICAgICAgIGdfYXNzZXJ0
KG1fc2NyaXB0RGlhbG9nQ29uZmlybWVkKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3
ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRfbWVzc2FnZShkaWFsb2cpLCA9PSwgImNvbmZpcm1lZCIp
OwotCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXRUJLSVRfU0NSSVBUX0RJQUxP
R19QUk9NUFQ6Ci0gICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NjcmlwdF9kaWFs
b2dfZ2V0X21lc3NhZ2UoZGlhbG9nKSwgPT0sIGtQcm9tcHREaWFsb2dSZXR1cm5lZFRleHQpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBnX21haW5fbG9vcF9xdWl0
KG1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIHZvaWQgc2NyaXB0Q29uZmlybShXZWJLaXRTY3Jp
cHREaWFsb2cqIGRpYWxvZykKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRf
c2NyaXB0X2RpYWxvZ19nZXRfbWVzc2FnZShkaWFsb2cpLCA9PSwga0NvbmZpcm1EaWFsb2dNZXNz
YWdlKTsKLSAgICAgICAgbV9zY3JpcHREaWFsb2dDb25maXJtZWQgPSAhbV9zY3JpcHREaWFsb2dD
b25maXJtZWQ7Ci0gICAgICAgIHdlYmtpdF9zY3JpcHRfZGlhbG9nX2NvbmZpcm1fc2V0X2NvbmZp
cm1lZChkaWFsb2csIG1fc2NyaXB0RGlhbG9nQ29uZmlybWVkKTsKLSAgICB9Ci0KLSAgICB2b2lk
IHNjcmlwdFByb21wdChXZWJLaXRTY3JpcHREaWFsb2cqIGRpYWxvZykKLSAgICB7Ci0gICAgICAg
IGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRfbWVzc2FnZShkaWFsb2cp
LCA9PSwga1Byb21wdERpYWxvZ01lc3NhZ2UpOwotICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X3NjcmlwdF9kaWFsb2dfcHJvbXB0X2dldF9kZWZhdWx0X3RleHQoZGlhbG9nKSwgPT0sICJk
ZWZhdWx0Iik7Ci0gICAgICAgIHdlYmtpdF9zY3JpcHRfZGlhbG9nX3Byb21wdF9zZXRfdGV4dChk
aWFsb2csIGtQcm9tcHREaWFsb2dSZXR1cm5lZFRleHQpOwotICAgIH0KLQotICAgIHN0YXRpYyBn
Ym9vbGVhbiBzY3JpcHREaWFsb2coV2ViS2l0V2ViVmlldyosIFdlYktpdFNjcmlwdERpYWxvZyog
ZGlhbG9nLCBVSUNsaWVudFRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHdlYmtp
dF9zY3JpcHRfZGlhbG9nX2dldF9kaWFsb2dfdHlwZShkaWFsb2cpKSB7Ci0gICAgICAgIGNhc2Ug
V0VCS0lUX1NDUklQVF9ESUFMT0dfQUxFUlQ6Ci0gICAgICAgICAgICB0ZXN0LT5zY3JpcHRBbGVy
dChkaWFsb2cpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV0VCS0lUX1NDUklQ
VF9ESUFMT0dfQ09ORklSTToKLSAgICAgICAgICAgIHRlc3QtPnNjcmlwdENvbmZpcm0oZGlhbG9n
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdFQktJVF9TQ1JJUFRfRElBTE9H
X1BST01QVDoKLSAgICAgICAgICAgIHRlc3QtPnNjcmlwdFByb21wdChkaWFsb2cpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgdm9pZCBtb3VzZVRhcmdldENoYW5nZWQoV2ViS2l0V2ViVmlldyosIFdlYktp
dEhpdFRlc3RSZXN1bHQqIGhpdFRlc3RSZXN1bHQsIGd1aW50IG1vZGlmaWVycywgVUlDbGllbnRU
ZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0hJVF9URVNUX1JF
U1VMVChoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRl
ZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QoaGl0VGVzdFJlc3VsdCkpOwotCi0gICAgICAgIHRl
c3QtPm1fbW91c2VUYXJnZXRIaXRUZXN0UmVzdWx0ID0gaGl0VGVzdFJlc3VsdDsKLSAgICAgICAg
dGVzdC0+bV9tb3VzZVRhcmdldE1vZGlmaWVycyA9IG1vZGlmaWVyczsKLSAgICAgICAgZ19tYWlu
X2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZ2Jvb2xl
YW4gcGVybWlzc2lvblJlcXVlc3RlZChXZWJLaXRXZWJWaWV3KiwgV2ViS2l0UGVybWlzc2lvblJl
cXVlc3QqIHJlcXVlc3QsIFVJQ2xpZW50VGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIGdfYXNz
ZXJ0KFdFQktJVF9JU19QRVJNSVNTSU9OX1JFUVVFU1QocmVxdWVzdCkpOwotICAgICAgICB0ZXN0
LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHJlcXVlc3Qp
KTsKLQotICAgICAgICBpZiAodGVzdC0+bV9hbGxvd1Blcm1pc3Npb25SZXF1ZXN0cykKLSAgICAg
ICAgICAgIHdlYmtpdF9wZXJtaXNzaW9uX3JlcXVlc3RfYWxsb3cocmVxdWVzdCk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHdlYmtpdF9wZXJtaXNzaW9uX3JlcXVlc3RfZGVueShyZXF1ZXN0
KTsKLQotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0KLSAgICBVSUNsaWVudFRlc3QoKQot
ICAgICAgICA6IG1fc2NyaXB0RGlhbG9nVHlwZShXRUJLSVRfU0NSSVBUX0RJQUxPR19BTEVSVCkK
LSAgICAgICAgLCBtX3NjcmlwdERpYWxvZ0NvbmZpcm1lZCh0cnVlKQotICAgICAgICAsIG1fYWxs
b3dQZXJtaXNzaW9uUmVxdWVzdHMoZmFsc2UpCi0gICAgICAgICwgbV9tb3VzZVRhcmdldE1vZGlm
aWVycygwKQotICAgIHsKLSAgICAgICAgd2Via2l0X3NldHRpbmdzX3NldF9qYXZhc2NyaXB0X2Nh
bl9vcGVuX3dpbmRvd3NfYXV0b21hdGljYWxseSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdz
KG1fd2ViVmlldyksIFRSVUUpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywg
ImNyZWF0ZSIsIEdfQ0FMTEJBQ0sodmlld0NyZWF0ZUNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAg
IGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAic2NyaXB0LWRpYWxvZyIsIEdfQ0FMTEJBQ0so
c2NyaXB0RGlhbG9nKSwgdGhpcyk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3
LCAibW91c2UtdGFyZ2V0LWNoYW5nZWQiLCBHX0NBTExCQUNLKG1vdXNlVGFyZ2V0Q2hhbmdlZCks
IHRoaXMpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgInBlcm1pc3Npb24t
cmVxdWVzdCIsIEdfQ0FMTEJBQ0socGVybWlzc2lvblJlcXVlc3RlZCksIHRoaXMpOwotICAgIH0K
LQotICAgIH5VSUNsaWVudFRlc3QoKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNf
ZGlzY29ubmVjdF9tYXRjaGVkKG1fd2ViVmlldywgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwg
MCwgMCwgdGhpcyk7Ci0gICAgfQotCi0gICAgdm9pZCB3YWl0VW50aWxNYWluTG9vcEZpbmlzaGVz
KCkKLSAgICB7Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICB9Ci0K
LSAgICB2b2lkIHNldEV4cGVjdGVkV2luZG93UHJvcGVydGllcyhjb25zdCBXaW5kb3dQcm9wZXJ0
aWVzJiB3aW5kb3dQcm9wZXJ0aWVzKQotICAgIHsKLSAgICAgICAgbV93aW5kb3dQcm9wZXJ0aWVz
ID0gd2luZG93UHJvcGVydGllczsKLSAgICB9Ci0KLSAgICBXZWJLaXRIaXRUZXN0UmVzdWx0KiBt
b3ZlTW91c2VBbmRXYWl0VW50aWxNb3VzZVRhcmdldENoYW5nZWQoaW50IHgsIGludCB5LCB1bnNp
Z25lZCBpbnQgbW91c2VNb2RpZmllcnMgPSAwKQotICAgIHsKLSAgICAgICAgbW91c2VNb3ZlVG8o
eCwgeSwgbW91c2VNb2RpZmllcnMpOwotICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9v
cCk7Ci0gICAgICAgIHJldHVybiBtX21vdXNlVGFyZ2V0SGl0VGVzdFJlc3VsdC5nZXQoKTsKLSAg
ICB9Ci0KLSAgICB2aXJ0dWFsIEd0a1dpZGdldCogdmlld0NyZWF0ZShXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3KQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQod2ViVmlldyA9PSBtX3dlYlZpZXcpOwot
Ci0gICAgICAgIEd0a1dpZGdldCogbmV3V2ViVmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXdfd2l0
aF9jb250ZXh0KHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dCh3ZWJWaWV3KSk7Ci0gICAgICAg
IGdfb2JqZWN0X3JlZl9zaW5rKG5ld1dlYlZpZXcpOwotCi0gICAgICAgIG1fd2ViVmlld0V2ZW50
cy5hcHBlbmQoQ3JlYXRlKTsKLQotICAgICAgICBXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzKiB3aW5k
b3dQcm9wZXJ0aWVzID0gd2Via2l0X3dlYl92aWV3X2dldF93aW5kb3dfcHJvcGVydGllcyhXRUJL
SVRfV0VCX1ZJRVcobmV3V2ViVmlldykpOwotICAgICAgICBnX2Fzc2VydCh3aW5kb3dQcm9wZXJ0
aWVzKTsKLSAgICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09C
SkVDVCh3aW5kb3dQcm9wZXJ0aWVzKSk7Ci0gICAgICAgIG1fd2luZG93UHJvcGVydGllc0NoYW5n
ZWQuY2xlYXIoKTsKLQotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHdpbmRvd1Byb3BlcnRpZXMs
ICJub3RpZnkiLCBHX0NBTExCQUNLKHdpbmRvd1Byb3BlcnRpZXNOb3RpZnlDYWxsYmFjayksIHRo
aXMpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG5ld1dlYlZpZXcsICJyZWFkeS10by1zaG93
IiwgR19DQUxMQkFDSyh2aWV3UmVhZHlUb1Nob3dDYWxsYmFjayksIHRoaXMpOwotICAgICAgICBn
X3NpZ25hbF9jb25uZWN0KG5ld1dlYlZpZXcsICJjbG9zZSIsIEdfQ0FMTEJBQ0sodmlld0Nsb3Nl
Q2FsbGJhY2spLCB0aGlzKTsKLQotICAgICAgICByZXR1cm4gbmV3V2ViVmlldzsKLSAgICB9Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgdmlld1JlYWR5VG9TaG93KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcp
Ci0gICAgewotICAgICAgICBnX2Fzc2VydCh3ZWJWaWV3ICE9IG1fd2ViVmlldyk7Ci0KLSAgICAg
ICAgV2ViS2l0V2luZG93UHJvcGVydGllcyogd2luZG93UHJvcGVydGllcyA9IHdlYmtpdF93ZWJf
dmlld19nZXRfd2luZG93X3Byb3BlcnRpZXMod2ViVmlldyk7Ci0gICAgICAgIGdfYXNzZXJ0KHdp
bmRvd1Byb3BlcnRpZXMpOwotICAgICAgICBpZiAoIW1fd2luZG93UHJvcGVydGllcy5pc051bGwo
KSkKLSAgICAgICAgICAgIFdpbmRvd1Byb3BlcnRpZXMod2luZG93UHJvcGVydGllcykuYXNzZXJ0
RXF1YWwobV93aW5kb3dQcm9wZXJ0aWVzKTsKLQotICAgICAgICBtX3dlYlZpZXdFdmVudHMuYXBw
ZW5kKFJlYWR5VG9TaG93KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlld0Nsb3NlKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcpCi0gICAgewotICAgICAgICBnX2Fzc2VydCh3ZWJWaWV3ICE9
IG1fd2ViVmlldyk7Ci0KLSAgICAgICAgbV93ZWJWaWV3RXZlbnRzLmFwcGVuZChDbG9zZSk7Ci0g
ICAgICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwotCi0gICAgICAgIGdfbWFpbl9sb29wX3F1
aXQobV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgVmVjdG9yPFdlYlZpZXdFdmVudHM+IG1fd2Vi
Vmlld0V2ZW50czsKLSAgICBXZWJLaXRTY3JpcHREaWFsb2dUeXBlIG1fc2NyaXB0RGlhbG9nVHlw
ZTsKLSAgICBib29sIG1fc2NyaXB0RGlhbG9nQ29uZmlybWVkOwotICAgIGJvb2wgbV9hbGxvd1Bl
cm1pc3Npb25SZXF1ZXN0czsKLSAgICBXaW5kb3dQcm9wZXJ0aWVzIG1fd2luZG93UHJvcGVydGll
czsKLSAgICBIYXNoU2V0PFdURjo6U3RyaW5nPiBtX3dpbmRvd1Byb3BlcnRpZXNDaGFuZ2VkOwot
ICAgIEdSZWZQdHI8V2ViS2l0SGl0VGVzdFJlc3VsdD4gbV9tb3VzZVRhcmdldEhpdFRlc3RSZXN1
bHQ7Ci0gICAgdW5zaWduZWQgaW50IG1fbW91c2VUYXJnZXRNb2RpZmllcnM7Ci19OwotCi1zdGF0
aWMgdm9pZCB0ZXN0V2ViVmlld0NyZWF0ZVJlYWR5Q2xvc2UoVUlDbGllbnRUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keSBvbkxvYWQ9
XCJ3aW5kb3cub3BlbigpLmNsb3NlKCk7XCI+PC9odG1sPiIsIDApOwotICAgIHRlc3QtPndhaXRV
bnRpbE1haW5Mb29wRmluaXNoZXMoKTsKLQotICAgIFZlY3RvcjxVSUNsaWVudFRlc3Q6OldlYlZp
ZXdFdmVudHM+JiBldmVudHMgPSB0ZXN0LT5tX3dlYlZpZXdFdmVudHM7Ci0gICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50cy5zaXplKCksID09LCAzKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
WzBdLCA9PSwgVUlDbGllbnRUZXN0OjpDcmVhdGUpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHNbMV0sID09LCBVSUNsaWVudFRlc3Q6OlJlYWR5VG9TaG93KTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQoZXZlbnRzWzJdLCA9PSwgVUlDbGllbnRUZXN0OjpDbG9zZSk7Ci19Ci0KLXN0YXRpYyBnYm9v
bGVhbiBjaGVja01pbWVUeXBlRm9yRmlsdGVyKEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciwgY29uc3Qg
Z2NoYXIqIG1pbWVUeXBlKQotewotICAgIEd0a0ZpbGVGaWx0ZXJJbmZvIGZpbHRlckluZm87Ci0g
ICAgZmlsdGVySW5mby5jb250YWlucyA9IEdUS19GSUxFX0ZJTFRFUl9NSU1FX1RZUEU7Ci0gICAg
ZmlsdGVySW5mby5taW1lX3R5cGUgPSBtaW1lVHlwZTsKLSAgICByZXR1cm4gZ3RrX2ZpbGVfZmls
dGVyX2ZpbHRlcihmaWx0ZXIsICZmaWx0ZXJJbmZvKTsKLX0KLQotY2xhc3MgTW9kYWxEaWFsb2dz
VGVzdDogcHVibGljIFVJQ2xpZW50VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1Rf
RklYVFVSRShNb2RhbERpYWxvZ3NUZXN0KTsKLQotICAgIHN0YXRpYyB2b2lkIGRpYWxvZ1J1bkFz
TW9kYWxDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBNb2RhbERpYWxvZ3NUZXN0KiB0
ZXN0KQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQod2ViVmlldyAhPSB0ZXN0LT5tX3dlYlZpZXcp
OwotICAgICAgICB0ZXN0LT5tX3dlYlZpZXdFdmVudHMuYXBwZW5kKFJ1bkFzTW9kYWwpOwotICAg
IH0KLQotICAgIEd0a1dpZGdldCogdmlld0NyZWF0ZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQot
ICAgIHsKLSAgICAgICAgZ19hc3NlcnQod2ViVmlldyA9PSBtX3dlYlZpZXcpOwotCi0gICAgICAg
IEd0a1dpZGdldCogbmV3V2ViVmlldyA9IFVJQ2xpZW50VGVzdDo6dmlld0NyZWF0ZSh3ZWJWaWV3
KTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChuZXdXZWJWaWV3LCAicnVuLWFzLW1vZGFsIiwg
R19DQUxMQkFDSyhkaWFsb2dSdW5Bc01vZGFsQ2FsbGJhY2spLCB0aGlzKTsKLSAgICAgICAgcmV0
dXJuIG5ld1dlYlZpZXc7Ci0gICAgfQotCi0gICAgdm9pZCB2aWV3UmVhZHlUb1Nob3coV2ViS2l0
V2ViVmlldyogd2ViVmlldykKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYlZpZXcgIT0gbV93
ZWJWaWV3KTsKLSAgICAgICAgbV93ZWJWaWV3RXZlbnRzLmFwcGVuZChSZWFkeVRvU2hvdyk7Ci0g
ICAgfQotfTsKLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdBbGxvd01vZGFsRGlhbG9ncyhNb2Rh
bERpYWxvZ3NUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIFdlYktpdFNldHRpbmdz
KiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3
KTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2FsbG93X21vZGFsX2RpYWxvZ3Moc2V0dGluZ3Ms
IFRSVUUpOwotCi0gICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5IG9ubG9hZD1cIndpbmRv
dy5zaG93TW9kYWxEaWFsb2coJ2RhdGE6dGV4dC9odG1sLDxodG1sPjxib2R5Lz48c2NyaXB0Pndp
bmRvdy5jbG9zZSgpOzwvc2NyaXB0PjwvaHRtbD4nKVwiPjwvYm9keT48L2h0bWw+IiwgMCk7Ci0g
ICAgdGVzdC0+d2FpdFVudGlsTWFpbkxvb3BGaW5pc2hlcygpOwotCi0gICAgVmVjdG9yPFVJQ2xp
ZW50VGVzdDo6V2ViVmlld0V2ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fd2ViVmlld0V2ZW50czsK
LSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDQpOwotICAgIGdfYXNzZXJ0
X2NtcGludChldmVudHNbMF0sID09LCBVSUNsaWVudFRlc3Q6OkNyZWF0ZSk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KGV2ZW50c1sxXSwgPT0sIFVJQ2xpZW50VGVzdDo6UmVhZHlUb1Nob3cpOwotICAg
IGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBVSUNsaWVudFRlc3Q6OlJ1bkFzTW9kYWwp
OwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09LCBVSUNsaWVudFRlc3Q6OkNsb3Nl
KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdEaXNhbGxvd01vZGFsRGlhbG9ncyhNb2Rh
bERpYWxvZ3NUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIFdlYktpdFNldHRpbmdz
KiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3
KTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2FsbG93X21vZGFsX2RpYWxvZ3Moc2V0dGluZ3Ms
IEZBTFNFKTsKLQotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keSBvbmxvYWQ9XCJ3aW5k
b3cuc2hvd01vZGFsRGlhbG9nKCdkYXRhOnRleHQvaHRtbCw8aHRtbD48Ym9keS8+PHNjcmlwdD53
aW5kb3cuY2xvc2UoKTs8L3NjcmlwdD48L2h0bWw+JylcIj48L2JvZHk+PC9odG1sPiIsIDApOwot
ICAgIC8vIFdlIG5lZWQgdG8gdXNlIGEgdGltZW91dCBoZXJlIGJlY2F1c2UgdGhlIHZpZXdDbG9z
ZSgpIGZ1bmN0aW9uCi0gICAgLy8gd29uJ3QgZXZlciBiZSBjYWxsZWQgYXMgdGhlIGRpYWxvZyB3
b24ndCBiZSBjcmVhdGVkLgotICAgIHRlc3QtPndhaXQoMSk7Ci0KLSAgICBWZWN0b3I8VUlDbGll
bnRUZXN0OjpXZWJWaWV3RXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV93ZWJWaWV3RXZlbnRzOwot
ICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMCk7Ci19Ci0KLXN0YXRpYyB2
b2lkIHRlc3RXZWJWaWV3SmF2YVNjcmlwdERpYWxvZ3MoVUlDbGllbnRUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQotewotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBodG1sT25Mb2FkRm9ybWF0ID0g
IjxodG1sPjxib2R5IG9uTG9hZD1cIiVzXCI+PC9ib2R5PjwvaHRtbD4iOwotICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBqc0FsZXJ0Rm9ybWF0ID0gImFsZXJ0KCclcycpIjsKLSAgICBzdGF0aWMgY29u
c3QgY2hhcioganNDb25maXJtRm9ybWF0ID0gImRvIHsgY29uZmlybWVkID0gY29uZmlybSgnJXMn
KTsgfSB3aGlsZSAoIWNvbmZpcm1lZCk7IGFsZXJ0KCdjb25maXJtZWQnKTsiOwotICAgIHN0YXRp
YyBjb25zdCBjaGFyKiBqc1Byb21wdEZvcm1hdCA9ICJhbGVydChwcm9tcHQoJyVzJywgJ2RlZmF1
bHQnKSk7IjsKLQotICAgIHRlc3QtPm1fc2NyaXB0RGlhbG9nVHlwZSA9IFdFQktJVF9TQ1JJUFRf
RElBTE9HX0FMRVJUOwotICAgIEdPd25QdHI8Y2hhcj4gYWxlcnREaWFsb2dNZXNzYWdlKGdfc3Ry
ZHVwX3ByaW50Zihqc0FsZXJ0Rm9ybWF0LCBrQWxlcnREaWFsb2dNZXNzYWdlKSk7Ci0gICAgR093
blB0cjxjaGFyPiBhbGVydEhUTUwoZ19zdHJkdXBfcHJpbnRmKGh0bWxPbkxvYWRGb3JtYXQsIGFs
ZXJ0RGlhbG9nTWVzc2FnZS5nZXQoKSkpOwotICAgIHRlc3QtPmxvYWRIdG1sKGFsZXJ0SFRNTC5n
ZXQoKSwgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTWFpbkxvb3BGaW5pc2hlcygpOwotCi0gICAg
dGVzdC0+bV9zY3JpcHREaWFsb2dUeXBlID0gV0VCS0lUX1NDUklQVF9ESUFMT0dfQ09ORklSTTsK
LSAgICBHT3duUHRyPGNoYXI+IGNvbmZpcm1EaWFsb2dNZXNzYWdlKGdfc3RyZHVwX3ByaW50Zihq
c0NvbmZpcm1Gb3JtYXQsIGtDb25maXJtRGlhbG9nTWVzc2FnZSkpOwotICAgIEdPd25QdHI8Y2hh
cj4gY29uZmlybUhUTUwoZ19zdHJkdXBfcHJpbnRmKGh0bWxPbkxvYWRGb3JtYXQsIGNvbmZpcm1E
aWFsb2dNZXNzYWdlLmdldCgpKSk7Ci0gICAgdGVzdC0+bG9hZEh0bWwoY29uZmlybUhUTUwuZ2V0
KCksIDApOwotICAgIHRlc3QtPndhaXRVbnRpbE1haW5Mb29wRmluaXNoZXMoKTsKLQotICAgIHRl
c3QtPm1fc2NyaXB0RGlhbG9nVHlwZSA9IFdFQktJVF9TQ1JJUFRfRElBTE9HX1BST01QVDsKLSAg
ICBHT3duUHRyPGNoYXI+IHByb21wdERpYWxvZ01lc3NhZ2UoZ19zdHJkdXBfcHJpbnRmKGpzUHJv
bXB0Rm9ybWF0LCBrUHJvbXB0RGlhbG9nTWVzc2FnZSkpOwotICAgIEdPd25QdHI8Y2hhcj4gcHJv
bXB0SFRNTChnX3N0cmR1cF9wcmludGYoaHRtbE9uTG9hZEZvcm1hdCwgcHJvbXB0RGlhbG9nTWVz
c2FnZS5nZXQoKSkpOwotICAgIHRlc3QtPmxvYWRIdG1sKHByb21wdEhUTUwuZ2V0KCksIDApOwot
ICAgIHRlc3QtPndhaXRVbnRpbE1haW5Mb29wRmluaXNoZXMoKTsKLX0KLQotc3RhdGljIHZvaWQg
dGVzdFdlYlZpZXdXaW5kb3dQcm9wZXJ0aWVzKFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogd2luZG93UHJvcnBlcnRpZXNTdHJpbmcg
PSAibGVmdD0xMDAsdG9wPTE1MCx3aWR0aD00MDAsaGVpZ2h0PTQwMCxsb2NhdGlvbj1ubyxtZW51
YmFyPW5vLHN0YXR1cz1ubyx0b29sYmFyPW5vLHNjcm9sbGJhcnM9bm8iOwotICAgIEdka1JlY3Rh
bmdsZSBnZW9tZXRyeSA9IHsgMTAwLCAxNTAsIDQwMCwgNDAwIH07Ci0gICAgdGVzdC0+c2V0RXhw
ZWN0ZWRXaW5kb3dQcm9wZXJ0aWVzKFVJQ2xpZW50VGVzdDo6V2luZG93UHJvcGVydGllcygmZ2Vv
bWV0cnksIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpKTsK
LQotICAgIEdPd25QdHI8Y2hhcj4gaHRtbFN0cmluZyhnX3N0cmR1cF9wcmludGYoIjxodG1sPjxi
b2R5IG9uTG9hZD1cIndpbmRvdy5vcGVuKCcnLCAnJywgJyVzJykuY2xvc2UoKTtcIj48L2JvZHk+
PC9odG1sPiIsIHdpbmRvd1Byb3JwZXJ0aWVzU3RyaW5nKSk7Ci0gICAgdGVzdC0+bG9hZEh0bWwo
aHRtbFN0cmluZy5nZXQoKSwgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTWFpbkxvb3BGaW5pc2hl
cygpOwotCi0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHByb3BlcnRpZXNDaGFuZ2VkW10gPSB7Ci0g
ICAgICAgICJnZW9tZXRyeSIsICJsb2NhdGlvbmJhci12aXNpYmxlIiwgIm1lbnViYXItdmlzaWJs
ZSIsICJzdGF0dXNiYXItdmlzaWJsZSIsICJ0b29sYmFyLXZpc2libGUiLCAic2Nyb2xsYmFycy12
aXNpYmxlIgotICAgIH07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMo
cHJvcGVydGllc0NoYW5nZWQpOyArK2kpCi0gICAgICAgIGdfYXNzZXJ0KHRlc3QtPm1fd2luZG93
UHJvcGVydGllc0NoYW5nZWQuY29udGFpbnMocHJvcGVydGllc0NoYW5nZWRbaV0pKTsKLQotICAg
IFZlY3RvcjxVSUNsaWVudFRlc3Q6OldlYlZpZXdFdmVudHM+JiBldmVudHMgPSB0ZXN0LT5tX3dl
YlZpZXdFdmVudHM7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAzKTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgVUlDbGllbnRUZXN0OjpDcmVhdGUp
OwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBVSUNsaWVudFRlc3Q6OlJlYWR5
VG9TaG93KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgVUlDbGllbnRUZXN0
OjpDbG9zZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3TW91c2VUYXJnZXQoVUlDbGll
bnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPnNob3dJbldpbmRvd0Fu
ZFdhaXRVbnRpbE1hcHBlZChHVEtfV0lORE9XX1RPUExFVkVMKTsKLQotICAgIGNvbnN0IGNoYXIq
IGxpbmtzSG92ZXJlZEhUTUwgPQotICAgICAgICAiPGh0bWw+PGJvZHk+IgotICAgICAgICAiIDxh
IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MScgaHJlZj0naHR0cDovL3d3
dy53ZWJraXRndGsub3JnJyB0aXRsZT0nV2ViS2l0R1RLKyBUaXRsZSc+V2ViS2l0R1RLKyBXZWJz
aXRlPC9hPiIKLSAgICAgICAgIiA8aW1nIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDox
OyB0b3A6MTAnIHNyYz0nMHhkZWFkYmVlZicgd2lkdGg9NSBoZWlnaHQ9NT48L2ltZz4iCi0gICAg
ICAgICIgPGEgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDoyMCcgaHJlZj0n
aHR0cDovL3d3dy53ZWJraXRndGsub3JnL2xvZ28nIHRpdGxlPSdXZWJLaXRHVEsrIExvZ28nPjxp
bWcgc3JjPScweGRlYWRiZWVmJyB3aWR0aD01IGhlaWdodD01PjwvaW1nPjwvYT4iCi0gICAgICAg
ICIgPGlucHV0IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MzAnIHNpemU9
JzEwJz48L2lucHV0PiIKLSAgICAgICAgIiA8ZGl2IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsg
bGVmdDoxOyB0b3A6NTA7IHdpZHRoOjMwOyBoZWlnaHQ6MzA7IG92ZXJmbG93OnNjcm9sbCc+Jm5i
c3A7PC9kaXY+IgotICAgICAgICAiIDx2aWRlbyBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxl
ZnQ6MTsgdG9wOjEwMCcgd2lkdGg9JzMwMCcgaGVpZ2h0PSczMDAnIGNvbnRyb2xzPSdjb250cm9s
cycgcHJlbG9hZD0nbm9uZSc+PHNvdXJjZSBzcmM9J21vdmllLm9nZycgdHlwZT0ndmlkZW8vb2dn
JyAvPjwvdmlkZW8+IgotICAgICAgICAiPC9ib2R5PjwvaHRtbD4iOwotCi0gICAgdGVzdC0+bG9h
ZEh0bWwobGlua3NIb3ZlcmVkSFRNTCwgImZpbGU6Ly8vIik7Ci0gICAgdGVzdC0+d2FpdFVudGls
TG9hZEZpbmlzaGVkKCk7Ci0KLSAgICAvLyBNb3ZlIG92ZXIgbGluay4KLSAgICBXZWJLaXRIaXRU
ZXN0UmVzdWx0KiBoaXRUZXN0UmVzdWx0ID0gdGVzdC0+bW92ZU1vdXNlQW5kV2FpdFVudGlsTW91
c2VUYXJnZXRDaGFuZ2VkKDEsIDEpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1
bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0
X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBn
X2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RS
ZXN1bHQpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lz
X2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2hp
dF90ZXN0X3Jlc3VsdF9nZXRfbGlua191cmkoaGl0VGVzdFJlc3VsdCksID09LCAiaHR0cDovL3d3
dy53ZWJraXRndGsub3JnLyIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfaGl0X3Rlc3Rf
cmVzdWx0X2dldF9saW5rX3RpdGxlKGhpdFRlc3RSZXN1bHQpLCA9PSwgIldlYktpdEdUSysgVGl0
bGUiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfbGlu
a19sYWJlbChoaXRUZXN0UmVzdWx0KSwgPT0sICJXZWJLaXRHVEsrIFdlYnNpdGUiKTsKLSAgICBn
X2Fzc2VydCghdGVzdC0+bV9tb3VzZVRhcmdldE1vZGlmaWVycyk7Ci0KLSAgICAvLyBNb3ZlIG91
dCBvZiB0aGUgbGluay4KLSAgICBoaXRUZXN0UmVzdWx0ID0gdGVzdC0+bW92ZU1vdXNlQW5kV2Fp
dFVudGlsTW91c2VUYXJnZXRDaGFuZ2VkKDAsIDApOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0
X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3Nl
cnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0
KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRp
YShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRf
Y29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXRlc3Qt
Pm1fbW91c2VUYXJnZXRNb2RpZmllcnMpOwotCi0gICAgLy8gTW92ZSBvdmVyIGltYWdlIHdpdGgg
R0RLX0NPTlRST0xfTUFTSy4KLSAgICBoaXRUZXN0UmVzdWx0ID0gdGVzdC0+bW92ZU1vdXNlQW5k
V2FpdFVudGlsTW91c2VUYXJnZXRDaGFuZ2VkKDEsIDEwLCBHREtfQ09OVFJPTF9NQVNLKTsKLSAg
ICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVz
dFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9p
c19pbWFnZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9y
ZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdl
YmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVzdWx0KSk7
Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19zY3JvbGxi
YXIoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfaGl0X3Rlc3Rf
cmVzdWx0X2dldF9pbWFnZV91cmkoaGl0VGVzdFJlc3VsdCksID09LCAiZmlsZTovLy8weGRlYWRi
ZWVmIik7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9tb3VzZVRhcmdldE1vZGlmaWVycyAmIEdES19D
T05UUk9MX01BU0spOwotCi0gICAgLy8gTW92ZSBvdmVyIGltYWdlIGxpbmsuCi0gICAgaGl0VGVz
dFJlc3VsdCA9IHRlc3QtPm1vdmVNb3VzZUFuZFdhaXRVbnRpbE1vdXNlVGFyZ2V0Q2hhbmdlZCgx
LCAyMCk7Ci0gICAgZ19hc3NlcnQod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xp
bmsoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRf
Y29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9o
aXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19h
c3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0
UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9p
c19zY3JvbGxiYXIoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRf
aGl0X3Rlc3RfcmVzdWx0X2dldF9saW5rX3VyaShoaXRUZXN0UmVzdWx0KSwgPT0sICJodHRwOi8v
d3d3LndlYmtpdGd0ay5vcmcvbG9nbyIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfaGl0
X3Rlc3RfcmVzdWx0X2dldF9pbWFnZV91cmkoaGl0VGVzdFJlc3VsdCksID09LCAiZmlsZTovLy8w
eGRlYWRiZWVmIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRf
Z2V0X2xpbmtfdGl0bGUoaGl0VGVzdFJlc3VsdCksID09LCAiV2ViS2l0R1RLKyBMb2dvIik7Ci0g
ICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfbGFiZWwoaGl0VGVz
dFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX21vdXNlVGFyZ2V0TW9kaWZpZXJzKTsK
LQotICAgIC8vIE1vdmUgb3ZlciBtZWRpYS4KLSAgICBoaXRUZXN0UmVzdWx0ID0gdGVzdC0+bW92
ZU1vdXNlQW5kV2FpdFVudGlsTW91c2VUYXJnZXRDaGFuZ2VkKDEsIDEwMCk7Ci0gICAgZ19hc3Nl
cnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQp
KTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdl
KGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2Nv
bnRleHRfaXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0
X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdf
YXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfc2Nyb2xsYmFyKGhpdFRl
c3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9n
ZXRfbWVkaWFfdXJpKGhpdFRlc3RSZXN1bHQpLCA9PSwgImZpbGU6Ly8vbW92aWUub2dnIik7Ci0g
ICAgZ19hc3NlcnQoIXRlc3QtPm1fbW91c2VUYXJnZXRNb2RpZmllcnMpOwotCi0gICAgLy8gTW92
ZXIgb3ZlciBpbnB1dC4KLSAgICBoaXRUZXN0UmVzdWx0ID0gdGVzdC0+bW92ZU1vdXNlQW5kV2Fp
dFVudGlsTW91c2VUYXJnZXRDaGFuZ2VkKDUsIDM1KTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2hp
dF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3Vs
dCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVk
aWEoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0
X2NvbnRleHRfaXNfc2Nyb2xsYmFyKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCh3ZWJr
aXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOwot
ICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX21vdXNlVGFyZ2V0TW9kaWZpZXJzKTsKLQotICAgIC8vIE1v
dmUgb3ZlciBzY3JvbGxiYXIuCi0gICAgaGl0VGVzdFJlc3VsdCA9IHRlc3QtPm1vdmVNb3VzZUFu
ZFdhaXRVbnRpbE1vdXNlVGFyZ2V0Q2hhbmdlZCg1LCA3NSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtp
dF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBn
X2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RS
ZXN1bHQpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lz
X21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jl
c3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCh3
ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfc2Nyb2xsYmFyKGhpdFRlc3RSZXN1bHQp
KTsKLSAgICBnX2Fzc2VydCghdGVzdC0+bV9tb3VzZVRhcmdldE1vZGlmaWVycyk7Ci19Ci0KLXN0
YXRpYyB2b2lkIHRlc3RXZWJWaWV3UGVybWlzc2lvblJlcXVlc3RzKFVJQ2xpZW50VGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICAvLyBTb21lIHZlcnNpb25zIG9mIGdlb2NsdWUgZ2l2
ZSBhIHJ1bnRpbWUgd2FybmluZyBiZWNhdXNlIGl0IHRyaWVzCi0gICAgLy8gdG8gcmVnaXN0ZXIg
dGhlIGVycm9yIHF1YXJrIHR3aWNlLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTg5ODU4LgotICAgIC8vIE1ha2Ugd2FybmluZ3Mgbm9uLWZhdGFsIGZvciB0aGlz
IHRlc3QgdG8gbWFrZSBpdCBwYXNzLgotICAgIHRlc3QtPnJlbW92ZUxvZ0ZhdGFsRmxhZyhHX0xP
R19MRVZFTF9XQVJOSU5HKTsKLSAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBw
ZWQoKTsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogZ2VvbG9jYXRpb25SZXF1ZXN0SFRNTCA9Ci0g
ICAgICAgICI8aHRtbD4iCi0gICAgICAgICIgIDxzY3JpcHQ+IgotICAgICAgICAiICBmdW5jdGlv
biBydW5UZXN0KCkiCi0gICAgICAgICIgIHsiCi0gICAgICAgICIgICAgbmF2aWdhdG9yLmdlb2xv
Y2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihmdW5jdGlvbihwKSB7IGRvY3VtZW50LnRpdGxlID0g
XCJPS1wiIH0sIgotICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZnVuY3Rpb24oZSkgeyBkb2N1bWVudC50aXRsZSA9IGUuY29kZSB9KTsiCi0gICAg
ICAgICIgIH0iCi0gICAgICAgICIgIDwvc2NyaXB0PiIKLSAgICAgICAgIiAgPGJvZHkgb25sb2Fk
PSdydW5UZXN0KCk7Jz48L2JvZHk+IgotICAgICAgICAiPC9odG1sPiI7Ci0KLSAgICAvLyBUZXN0
IGRlbnlpbmcgYSBwZXJtaXNzaW9uIHJlcXVlc3QuCi0gICAgdGVzdC0+bV9hbGxvd1Blcm1pc3Np
b25SZXF1ZXN0cyA9IGZhbHNlOwotICAgIHRlc3QtPmxvYWRIdG1sKGdlb2xvY2F0aW9uUmVxdWVz
dEhUTUwsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbFRpdGxlQ2hhbmdlZCgpOwotCi0gICAgLy8g
QWNjb3JkaW5nIHRvIHRoZSBHZW9sb2NhdGlvbiBBUEkgc3BlY2lmaWNhdGlvbiwgJzEnIGlzIHRo
ZQotICAgIC8vIGVycm9yIGNvZGUgcmV0dXJuZWQgZm9yIHRoZSBQRVJNSVNTSU9OX0RFTklFRCBl
cnJvci4KLSAgICAvLyBodHRwOi8vZGV2LnczLm9yZy9nZW8vYXBpL3NwZWMtc291cmNlLmh0bWwj
cG9zaXRpb25fZXJyb3JfaW50ZXJmYWNlCi0gICAgY29uc3QgZ2NoYXIqIHJlc3VsdCA9IHdlYmtp
dF93ZWJfdmlld19nZXRfdGl0bGUodGVzdC0+bV93ZWJWaWV3KTsKLSAgICBnX2Fzc2VydF9jbXBz
dHIocmVzdWx0LCA9PSwgIjEiKTsKLQotICAgIC8vIFRlc3QgYWxsb3dpbmcgYSBwZXJtaXNzaW9u
IHJlcXVlc3QuCi0gICAgdGVzdC0+bV9hbGxvd1Blcm1pc3Npb25SZXF1ZXN0cyA9IHRydWU7Ci0g
ICAgdGVzdC0+bG9hZEh0bWwoZ2VvbG9jYXRpb25SZXF1ZXN0SFRNTCwgMCk7Ci0gICAgdGVzdC0+
d2FpdFVudGlsVGl0bGVDaGFuZ2VkKCk7Ci0KLSAgICAvLyBDaGVjayB0aGF0IHdlIGRpZCBub3Qg
Z2V0IHRoZSBQRVJNSVNTSU9OX0RFTklFRCBlcnJvciBub3cuCi0gICAgcmVzdWx0ID0gd2Via2l0
X3dlYl92aWV3X2dldF90aXRsZSh0ZXN0LT5tX3dlYlZpZXcpOwotICAgIGdfYXNzZXJ0X2NtcHN0
cihyZXN1bHQsICE9LCAiMSIpOwotICAgIHRlc3QtPmFkZExvZ0ZhdGFsRmxhZyhHX0xPR19MRVZF
TF9XQVJOSU5HKTsKLX0KLQogc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdab29tTGV2ZWwoV2ViVmll
d1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiB7CiAgICAgZ19hc3NlcnRfY21wZmxvYXQod2Vi
a2l0X3dlYl92aWV3X2dldF96b29tX2xldmVsKHRlc3QtPm1fd2ViVmlldyksID09LCAxKTsKQEAg
LTY4MiwxMjEgKzE1MSw2IEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3UnVuSmF2YVNjcmlwdChX
ZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICBnX2Fzc2VydF9lcnJvcihlcnJv
ci5nZXQoKSwgV0VCS0lUX0pBVkFTQ1JJUFRfRVJST1IsIFdFQktJVF9KQVZBU0NSSVBUX0VSUk9S
X1NDUklQVF9GQUlMRUQpOwogfQogCi1jbGFzcyBGaWxlQ2hvb3NlclRlc3Q6IHB1YmxpYyBVSUNs
aWVudFRlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoRmlsZUNob29z
ZXJUZXN0KTsKLQotICAgIEZpbGVDaG9vc2VyVGVzdCgpCi0gICAgewotICAgICAgICBnX3NpZ25h
bF9jb25uZWN0KG1fd2ViVmlldywgInJ1bi1maWxlLWNob29zZXIiLCBHX0NBTExCQUNLKHJ1bkZp
bGVDaG9vc2VyQ2FsbGJhY2spLCB0aGlzKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4g
cnVuRmlsZUNob29zZXJDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiwgV2ViS2l0RmlsZUNob29zZXJS
ZXF1ZXN0KiByZXF1ZXN0LCBGaWxlQ2hvb3NlclRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICB0
ZXN0LT5ydW5GaWxlQ2hvb3NlcihyZXF1ZXN0KTsKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAg
fQotCi0gICAgdm9pZCBydW5GaWxlQ2hvb3NlcihXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJl
cXVlc3QpCi0gICAgewotICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlz
aGVzKEdfT0JKRUNUKHJlcXVlc3QpKTsKLSAgICAgICAgbV9maWxlQ2hvb3NlclJlcXVlc3QgPSBy
ZXF1ZXN0OwotICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOwotICAgIH0KLQot
ICAgIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogY2xpY2tNb3VzZUJ1dHRvbkFuZFdhaXRGb3JG
aWxlQ2hvb3NlclJlcXVlc3QoaW50IHgsIGludCB5KQotICAgIHsKLSAgICAgICAgY2xpY2tNb3Vz
ZUJ1dHRvbih4LCB5KTsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAg
ICAgICByZXR1cm4gbV9maWxlQ2hvb3NlclJlcXVlc3QuZ2V0KCk7Ci0gICAgfQotCi1wcml2YXRl
OgotICAgIEdSZWZQdHI8V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0PiBtX2ZpbGVDaG9vc2VyUmVx
dWVzdDsKLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RmlsZUNob29zZXJSZXF1ZXN0KEZp
bGVDaG9vc2VyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5zaG93SW5X
aW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogZmlsZUNo
b29zZXJIVE1MRm9ybWF0ID0gIjxodG1sPjxib2R5PjxpbnB1dCBzdHlsZT0ncG9zaXRpb246YWJz
b2x1dGU7bGVmdDowO3RvcDowO21hcmdpbjowO3BhZGRpbmc6MCcgdHlwZT0nZmlsZScgJXMvPjwv
Ym9keT48L2h0bWw+IjsKLQotICAgIC8vIE11bHRpcGxlIHNlbGVjdGlvbnMgbm90IGFsbG93ZWQs
IG5vIE1JTUUgZmlsdGVyaW5nLgotICAgIEdPd25QdHI8Y2hhcj4gc2ltcGxlRmlsZVVwbG9hZEhU
TUwoZ19zdHJkdXBfcHJpbnRmKGZpbGVDaG9vc2VySFRNTEZvcm1hdCwgIiIpKTsKLSAgICB0ZXN0
LT5sb2FkSHRtbChzaW1wbGVGaWxlVXBsb2FkSFRNTC5nZXQoKSwgMCk7Ci0gICAgdGVzdC0+d2Fp
dFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiBmaWxl
Q2hvb3NlclJlcXVlc3QgPSB0ZXN0LT5jbGlja01vdXNlQnV0dG9uQW5kV2FpdEZvckZpbGVDaG9v
c2VyUmVxdWVzdCg1LCA1KTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1
ZXN0X2dldF9zZWxlY3RfbXVsdGlwbGUoZmlsZUNob29zZXJSZXF1ZXN0KSk7Ci0KLSAgICBjb25z
dCBnY2hhciogY29uc3QqIG1pbWVUeXBlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9n
ZXRfbWltZV90eXBlcyhmaWxlQ2hvb3NlclJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KCFtaW1lVHlw
ZXMpOwotICAgIEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVx
dWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIoZmlsZUNob29zZXJSZXF1ZXN0KTsKLSAgICBnX2Fz
c2VydCghZmlsdGVyKTsKLSAgICBjb25zdCBnY2hhciogY29uc3QqIHNlbGVjdGVkRmlsZXMgPSB3
ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKGZpbGVDaG9vc2Vy
UmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQoIXNlbGVjdGVkRmlsZXMpOwotICAgIHdlYmtpdF9maWxl
X2Nob29zZXJfcmVxdWVzdF9jYW5jZWwoZmlsZUNob29zZXJSZXF1ZXN0KTsKLQotICAgIC8vIE11
bHRpcGxlIHNlbGVjdGlvbnMgYWxsb3dlZCwgbm8gTUlNRSBmaWx0ZXJpbmcsIHNvbWUgcHJlLXNl
bGVjdGVkIGZpbGVzLgotICAgIEdPd25QdHI8Y2hhcj4gbXVsdGlwbGVTZWxlY3Rpb25GaWxlVXBs
b2FkSFRNTChnX3N0cmR1cF9wcmludGYoZmlsZUNob29zZXJIVE1MRm9ybWF0LCAibXVsdGlwbGUi
KSk7Ci0gICAgdGVzdC0+bG9hZEh0bWwobXVsdGlwbGVTZWxlY3Rpb25GaWxlVXBsb2FkSFRNTC5n
ZXQoKSwgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgZmlsZUNo
b29zZXJSZXF1ZXN0ID0gdGVzdC0+Y2xpY2tNb3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3Nl
clJlcXVlc3QoNSwgNSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2dldF9zZWxlY3RfbXVsdGlwbGUoZmlsZUNob29zZXJSZXF1ZXN0KSk7Ci0KLSAgICBtaW1lVHlw
ZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMoZmlsZUNob29z
ZXJSZXF1ZXN0KTsKLSAgICBnX2Fzc2VydCghbWltZVR5cGVzKTsKLSAgICBmaWx0ZXIgPSB3ZWJr
aXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKGZpbGVDaG9vc2Vy
UmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQoIWZpbHRlcik7Ci0gICAgc2VsZWN0ZWRGaWxlcyA9IHdl
YmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMoZmlsZUNob29zZXJS
ZXF1ZXN0KTsKLSAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlcyk7Ci0KLSAgICAvLyBTZWxlY3Qg
c29tZSBmaWxlcy4KLSAgICBjb25zdCBnY2hhciogZmlsZXNUb1NlbGVjdFs0XSA9IHsgIi9mb28i
LCAiL2Zvby9iYXIiLCAiL2Zvby9iYXIvYmF6IiwgMCB9OwotICAgIHdlYmtpdF9maWxlX2Nob29z
ZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXMoZmlsZUNob29zZXJSZXF1ZXN0LCBmaWxlc1RvU2VsZWN0
KTsKLQotICAgIC8vIENoZWNrIHRoZSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBqdXN0IHNlbGVjdGVk
LgotICAgIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3Nl
bGVjdGVkX2ZpbGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQoc2VsZWN0ZWRG
aWxlcyk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMF0sID09LCAiL2ZvbyIp
OwotICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzFdLCA9PSwgIi9mb28vYmFyIik7
Ci0gICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMl0sID09LCAiL2Zvby9iYXIvYmF6
Iik7Ci0gICAgZ19hc3NlcnQoIXNlbGVjdGVkRmlsZXNbM10pOwotCi0gICAgLy8gUGVyZm9ybSBh
bm90aGVyIHJlcXVlc3QgdG8gY2hlY2sgaWYgdGhlIGxpc3Qgb2YgZmlsZXMgc2VsZWN0ZWQKLSAg
ICAvLyBpbiB0aGUgcHJldmlvdXMgc3RlcCBhcHBlYXJzIG5vdyBhcyBwYXJ0IG9mIHRoZSBuZXcg
cmVxdWVzdC4KLSAgICBmaWxlQ2hvb3NlclJlcXVlc3QgPSB0ZXN0LT5jbGlja01vdXNlQnV0dG9u
QW5kV2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdCg1LCA1KTsKLSAgICBzZWxlY3RlZEZpbGVzID0g
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhmaWxlQ2hvb3Nl
clJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KHNlbGVjdGVkRmlsZXMpOwotICAgIGdfYXNzZXJ0X2Nt
cHN0cihzZWxlY3RlZEZpbGVzWzBdLCA9PSwgIi9mb28iKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIo
c2VsZWN0ZWRGaWxlc1sxXSwgPT0sICIvZm9vL2JhciIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihz
ZWxlY3RlZEZpbGVzWzJdLCA9PSwgIi9mb28vYmFyL2JheiIpOwotICAgIGdfYXNzZXJ0KCFzZWxl
Y3RlZEZpbGVzWzNdKTsKLSAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2VsKGZp
bGVDaG9vc2VyUmVxdWVzdCk7Ci0KLSAgICAvLyBNdWx0aXBsZSBzZWxlY3Rpb25zIG5vdCBhbGxv
d2VkLCBvbmx5IGFjY2VwdCBpbWFnZXMsIGF1ZGlvIGFuZCB2aWRlbyBmaWxlcy4uCi0gICAgR093
blB0cjxjaGFyPiBtaW1lRmlsdGVyZWRGaWxlVXBsb2FkSFRNTChnX3N0cmR1cF9wcmludGYoZmls
ZUNob29zZXJIVE1MRm9ybWF0LCAiYWNjZXB0PSdhdWRpby8qLHZpZGVvLyosaW1hZ2UvKiciKSk7
Ci0gICAgdGVzdC0+bG9hZEh0bWwobWltZUZpbHRlcmVkRmlsZVVwbG9hZEhUTUwuZ2V0KCksIDAp
OwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGZpbGVDaG9vc2VyUmVx
dWVzdCA9IHRlc3QtPmNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0
KDUsIDUpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3Nl
bGVjdF9tdWx0aXBsZShmaWxlQ2hvb3NlclJlcXVlc3QpKTsKLQotICAgIG1pbWVUeXBlcyA9IHdl
YmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyhmaWxlQ2hvb3NlclJlcXVl
c3QpOwotICAgIGdfYXNzZXJ0KG1pbWVUeXBlcyk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKG1pbWVU
eXBlc1swXSwgPT0sICJhdWRpby8qIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKG1pbWVUeXBlc1sx
XSwgPT0sICJ2aWRlby8qIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKG1pbWVUeXBlc1syXSwgPT0s
ICJpbWFnZS8qIik7Ci0gICAgZ19hc3NlcnQoIW1pbWVUeXBlc1szXSk7Ci0KLSAgICBmaWx0ZXIg
PSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKGZpbGVD
aG9vc2VyUmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQoR1RLX0lTX0ZJTEVfRklMVEVSKGZpbHRlcikp
OwotICAgIGdfYXNzZXJ0KGNoZWNrTWltZVR5cGVGb3JGaWx0ZXIoZmlsdGVyLCAiYXVkaW8vKiIp
KTsKLSAgICBnX2Fzc2VydChjaGVja01pbWVUeXBlRm9yRmlsdGVyKGZpbHRlciwgInZpZGVvLyoi
KSk7Ci0gICAgZ19hc3NlcnQoY2hlY2tNaW1lVHlwZUZvckZpbHRlcihmaWx0ZXIsICJpbWFnZS8q
IikpOwotCi0gICAgc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9n
ZXRfc2VsZWN0ZWRfZmlsZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKLSAgICBnX2Fzc2VydCghc2Vs
ZWN0ZWRGaWxlcyk7Ci0gICAgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbChmaWxl
Q2hvb3NlclJlcXVlc3QpOwotfQotCiBjbGFzcyBGdWxsU2NyZWVuQ2xpZW50VGVzdDogcHVibGlj
IFdlYlZpZXdUZXN0IHsKIHB1YmxpYzoKICAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKEZ1bGxT
Y3JlZW5DbGllbnRUZXN0KTsKQEAgLTEyMzMsMjY0ICs1ODcsMTMgQEAgc3RhdGljIHZvaWQgdGVz
dFdlYlZpZXdTbmFwc2hvdChTbmFwc2hvdFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQogICAgIGdfYXNzZXJ0KHRlc3QtPmdldFNuYXBzaG90QW5kQ2FuY2VsKCkpOwogfQogCi1jbGFz
cyBBdXRoZW50aWNhdGlvblRlc3Q6IHB1YmxpYyBMb2FkVHJhY2tpbmdUZXN0IHsKLXB1YmxpYzoK
LSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKEF1dGhlbnRpY2F0aW9uVGVzdCk7Ci0KLSAgICBB
dXRoZW50aWNhdGlvblRlc3QoKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dl
YlZpZXcsICJhdXRoZW50aWNhdGUiLCBHX0NBTExCQUNLKHJ1bkF1dGhlbnRpY2F0aW9uQ2FsbGJh
Y2spLCB0aGlzKTsKLSAgICB9Ci0KLSAgICB+QXV0aGVudGljYXRpb25UZXN0KCkKLSAgICB7Ci0g
ICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3dlYlZpZXcsIEdf
U0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOwotICAgIH0KLQotICAgIHN0YXRp
YyBpbnQgYXV0aGVudGljYXRpb25SZXRyaWVzOwotICAgIHN0YXRpYyBib29sIGF1dGhlbnRpY2F0
aW9uQ2FuY2VsbGVkUmVjZWl2ZWQ7Ci0KLSAgICB2b2lkIGxvYWRVUkkoY29uc3QgY2hhciogdXJp
KQotICAgIHsKLSAgICAgICAgLy8gUmVzZXQgdGhlIHJldHJ5IGNvdW50IG9mIHRoZSBmYWtlIHNl
cnZlciB3aGVuIGEgcGFnZSBpcyBsb2FkZWQuCi0gICAgICAgIGF1dGhlbnRpY2F0aW9uUmV0cmll
cyA9IDA7Ci0gICAgICAgIGF1dGhlbnRpY2F0aW9uQ2FuY2VsbGVkUmVjZWl2ZWQgPSBmYWxzZTsK
LSAgICAgICAgTG9hZFRyYWNraW5nVGVzdDo6bG9hZFVSSSh1cmkpOwotICAgIH0KLQotICAgIHN0
YXRpYyBnYm9vbGVhbiBydW5BdXRoZW50aWNhdGlvbkNhbGxiYWNrKFdlYktpdFdlYlZpZXcqLCBX
ZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QsIEF1dGhlbnRpY2F0aW9uVGVzdCog
dGVzdCkKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QocmVxdWVzdCwgImNhbmNlbGxl
ZCIsIEdfQ0FMTEJBQ0soYXV0aGVudGljYXRpb25DYW5jZWxsZWRDYWxsYmFjayksIHRlc3QpOwot
ICAgICAgICB0ZXN0LT5ydW5BdXRoZW50aWNhdGlvbihyZXF1ZXN0KTsKLSAgICAgICAgcmV0dXJu
IFRSVUU7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgYXV0aGVudGljYXRpb25DYW5jZWxsZWRD
YWxsYmFjayhXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqLCBBdXRoZW50aWNhdGlvblRlc3Qq
KQotICAgIHsKLSAgICAgICAgYXV0aGVudGljYXRpb25DYW5jZWxsZWRSZWNlaXZlZCA9IHRydWU7
Ci0gICAgfQotCi0gICAgdm9pZCBydW5BdXRoZW50aWNhdGlvbihXZWJLaXRBdXRoZW50aWNhdGlv
blJlcXVlc3QqIHJlcXVlc3QpCi0gICAgewotICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRX
aGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHJlcXVlc3QpKTsKLSAgICAgICAgbV9hdXRoZW50aWNh
dGlvblJlcXVlc3QgPSByZXF1ZXN0OwotICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxv
b3ApOwotICAgIH0KLQotICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogd2FpdEZvckF1
dGhlbnRpY2F0aW9uUmVxdWVzdCgpCi0gICAgewotICAgICAgICBnX21haW5fbG9vcF9ydW4obV9t
YWluTG9vcCk7Ci0gICAgICAgIHJldHVybiBtX2F1dGhlbnRpY2F0aW9uUmVxdWVzdC5nZXQoKTsK
LSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgR1JlZlB0cjxXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVl
c3Q+IG1fYXV0aGVudGljYXRpb25SZXF1ZXN0OwotfTsKLQotaW50IEF1dGhlbnRpY2F0aW9uVGVz
dDo6YXV0aGVudGljYXRpb25SZXRyaWVzID0gMDsKLWJvb2wgQXV0aGVudGljYXRpb25UZXN0Ojph
dXRoZW50aWNhdGlvbkNhbmNlbGxlZFJlY2VpdmVkID0gZmFsc2U7Ci0KLXN0YXRpYyBjb25zdCBj
aGFyIGF1dGhUZXN0VXNlcm5hbWVbXSA9ICJ1c2VybmFtZSI7Ci1zdGF0aWMgY29uc3QgY2hhciBh
dXRoVGVzdFBhc3N3b3JkW10gPSAicGFzc3dvcmQiOwotc3RhdGljIGNvbnN0IGNoYXIgYXV0aEV4
cGVjdGVkU3VjY2Vzc1RpdGxlW10gPSAiV2ViS2l0Mkd0aysgQXV0aGVudGljYXRpb24gdGVzdCI7
Ci1zdGF0aWMgY29uc3QgY2hhciBhdXRoRXhwZWN0ZWRGYWlsdXJlVGl0bGVbXSA9ICI0MDEgQXV0
aG9yaXphdGlvbiBSZXF1aXJlZCI7Ci1zdGF0aWMgY29uc3QgY2hhciBhdXRoRXhwZWN0ZWRBdXRo
b3JpemF0aW9uW10gPSAiQmFzaWMgZFhObGNtNWhiV1U2Y0dGemMzZHZjbVE9IjsgLy8gQmFzZTY0
IGVuY29kaW5nIG9mICJ1c2VybmFtZTpwYXNzd29yZCIuCi1zdGF0aWMgY29uc3QgY2hhciBhdXRo
U3VjY2Vzc0hUTUxTdHJpbmdbXSA9Ci0gICAgIjxodG1sPiIKLSAgICAiPGhlYWQ+PHRpdGxlPldl
YktpdDJHdGsrIEF1dGhlbnRpY2F0aW9uIHRlc3Q8L3RpdGxlPjwvaGVhZD4iCi0gICAgIjxib2R5
PjwvYm9keT48L2h0bWw+IjsKLXN0YXRpYyBjb25zdCBjaGFyIGF1dGhGYWlsdXJlSFRNTFN0cmlu
Z1tdID0KLSAgICAiPGh0bWw+IgotICAgICI8aGVhZD48dGl0bGU+NDAxIEF1dGhvcml6YXRpb24g
UmVxdWlyZWQ8L3RpdGxlPjwvaGVhZD4iCi0gICAgIjxib2R5PjwvYm9keT48L2h0bWw+IjsKLQot
c3RhdGljIHZvaWQgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvblJlcXVlc3QoQXV0aGVudGljYXRp
b25UZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIC8vIFRlc3QgYXV0aGVudGljYXRp
b24gcmVxdWVzdCBnZXR0ZXJzIG1hdGNoIHNvdXAgYXV0aGVudGljYXRpb24gaGVhZGVyLgotICAg
IHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2F1dGgtdGVzdC5odG1sIiku
ZGF0YSgpKTsKLSAgICBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QgPSB0ZXN0
LT53YWl0Rm9yQXV0aGVudGljYXRpb25SZXF1ZXN0KCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdl
YmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9ob3N0KHJlcXVlc3QpLCA9PSwgc291cF91
cmlfZ2V0X2hvc3Qoa1NlcnZlci0+YmFzZVVSSSgpKSk7Ci0gICAgZ19hc3NlcnRfY21wdWludCh3
ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcG9ydChyZXF1ZXN0KSwgPT0sIHNvdXBf
dXJpX2dldF9wb3J0KGtTZXJ2ZXItPmJhc2VVUkkoKSkpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3
ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcmVhbG0ocmVxdWVzdCksID09LCAibXkg
cmVhbG0iKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRf
c2NoZW1lKHJlcXVlc3QpID09IFdFQktJVF9BVVRIRU5USUNBVElPTl9TQ0hFTUVfSFRUUF9CQVNJ
Qyk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2lzX2Zvcl9w
cm94eShyZXF1ZXN0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1
ZXN0X2lzX3JldHJ5KHJlcXVlc3QpKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdBdXRo
ZW50aWNhdGlvbkNhbmNlbChBdXRoZW50aWNhdGlvblRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
Ci17Ci0gICAgLy8gVGVzdCBjYW5jZWwuCi0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRV
UklGb3JQYXRoKCIvYXV0aC10ZXN0Lmh0bWwiKS5kYXRhKCkpOwotICAgIFdlYktpdEF1dGhlbnRp
Y2F0aW9uUmVxdWVzdCogcmVxdWVzdCA9IHRlc3QtPndhaXRGb3JBdXRoZW50aWNhdGlvblJlcXVl
c3QoKTsKLSAgICB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5jZWwocmVxdWVzdCk7
Ci0gICAgLy8gU2VydmVyIGRvZXNuJ3QgYXNrIGZvciBuZXcgY3JlZGVudGlhbHMuCi0gICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+
bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5t
X2xvYWRFdmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFy
dGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9h
ZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkRmFpbGVkKTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQodGVzdC0+bV9sb2FkRXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlz
aGVkKTsKLQotICAgIGdfYXNzZXJ0X2Vycm9yKHRlc3QtPm1fZXJyb3IuZ2V0KCksIFdFQktJVF9O
RVRXT1JLX0VSUk9SLCBXRUJLSVRfTkVUV09SS19FUlJPUl9DQU5DRUxMRUQpOwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uTG9hZENhbmNlbGxlZChBdXRoZW50aWNh
dGlvblRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+bG9hZFVSSShrU2Vy
dmVyLT5nZXRVUklGb3JQYXRoKCIvYXV0aC10ZXN0Lmh0bWwiKS5kYXRhKCkpOwotICAgIHRlc3Qt
PndhaXRGb3JBdXRoZW50aWNhdGlvblJlcXVlc3QoKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfc3Rv
cF9sb2FkaW5nKHRlc3QtPm1fd2ViVmlldyk7Ci0gICAgLy8gRXhwZWN0IGVtcHR5IHBhZ2UuCi0g
ICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgZ19hc3NlcnQodGVzdC0+YXV0
aGVudGljYXRpb25DYW5jZWxsZWRSZWNlaXZlZCk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQodGVz
dC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0
LT5tX2xvYWRFdmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRT
dGFydGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwg
TG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkRmFpbGVkKTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZp
bmlzaGVkKTsKLQotICAgIGdfYXNzZXJ0X2Vycm9yKHRlc3QtPm1fZXJyb3IuZ2V0KCksIFdFQktJ
VF9ORVRXT1JLX0VSUk9SLCBXRUJLSVRfTkVUV09SS19FUlJPUl9DQU5DRUxMRUQpOwotfQotCi1z
dGF0aWMgdm9pZCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uRmFpbHVyZShBdXRoZW50aWNhdGlv
blRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgLy8gVGVzdCBhdXRoZW50aWNhdGlv
biBmYWlsdXJlcy4KLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9h
dXRoLXRlc3QuaHRtbCIpLmRhdGEoKSk7Ci0gICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0
KiByZXF1ZXN0ID0gdGVzdC0+d2FpdEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpOwotICAgIGdf
YXNzZXJ0KCF3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9pc19yZXRyeShyZXF1ZXN0KSk7
Ci0gICAgV2ViS2l0Q3JlZGVudGlhbCogY3JlZGVudGlhbCA9IHdlYmtpdF9jcmVkZW50aWFsX25l
dyhhdXRoVGVzdFVzZXJuYW1lLCAid3JvbmdwYXNzd29yZCIsIFdFQktJVF9DUkVERU5USUFMX1BF
UlNJU1RFTkNFX05PTkUpOwotICAgIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2F1dGhl
bnRpY2F0ZShyZXF1ZXN0LCBjcmVkZW50aWFsKTsKLSAgICB3ZWJraXRfY3JlZGVudGlhbF9mcmVl
KGNyZWRlbnRpYWwpOwotICAgIC8vIEV4cGVjdCBhIHNlY29uZCBhdXRoZW50aWNhdGlvbiByZXF1
ZXN0LgotICAgIHJlcXVlc3QgPSB0ZXN0LT53YWl0Rm9yQXV0aGVudGljYXRpb25SZXF1ZXN0KCk7
Ci0gICAgZ19hc3NlcnQod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfaXNfcmV0cnkocmVx
dWVzdCkpOwotICAgIC8vIFRlc3Qgc2Vjb25kIGZhaWx1cmUuCi0gICAgY3JlZGVudGlhbCA9IHdl
YmtpdF9jcmVkZW50aWFsX25ldyhhdXRoVGVzdFVzZXJuYW1lLCAid3JvbmdwYXNzd29yZDIiLCBX
RUJLSVRfQ1JFREVOVElBTF9QRVJTSVNURU5DRV9OT05FKTsKLSAgICB3ZWJraXRfYXV0aGVudGlj
YXRpb25fcmVxdWVzdF9hdXRoZW50aWNhdGUocmVxdWVzdCwgY3JlZGVudGlhbCk7Ci0gICAgd2Vi
a2l0X2NyZWRlbnRpYWxfZnJlZShjcmVkZW50aWFsKTsKLSAgICAvLyBFeHBlY3QgYXV0aGVudGlj
YXRpb24gZmFpbGVkIHBhZ2UuCi0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0K
LSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOwot
ICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMF0sID09LCBMb2FkVHJhY2tp
bmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVz
dC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7
Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1syXSwgPT0sIExvYWRUcmFj
a2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJf
dmlld19nZXRfdGl0bGUodGVzdC0+bV93ZWJWaWV3KSwgPT0sIGF1dGhFeHBlY3RlZEZhaWx1cmVU
aXRsZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25Ob0NyZWRl
bnRpYWwoQXV0aGVudGljYXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIC8v
IFRlc3QgY29udGludWUgd2l0aG91dCBjcmVkZW50aWFscy4KLSAgICB0ZXN0LT5sb2FkVVJJKGtT
ZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9hdXRoLXRlc3QuaHRtbCIpLmRhdGEoKSk7Ci0gICAgV2Vi
S2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0ID0gdGVzdC0+d2FpdEZvckF1dGhlbnRp
Y2F0aW9uUmVxdWVzdCgpOwotICAgIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2F1dGhl
bnRpY2F0ZShyZXF1ZXN0LCAwKTsKLSAgICAvLyBTZXJ2ZXIgZG9lc24ndCBhc2sgZm9yIG5ldyBj
cmVkZW50aWFscy4KLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIGdf
YXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMyk7Ci0gICAgZ19h
c3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6
OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xv
YWRFdmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkQ29tbWl0dGVkKTsKLSAgICBn
X2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVz
dDo6TG9hZEZpbmlzaGVkKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dl
dF90aXRsZSh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgYXV0aEV4cGVjdGVkRmFpbHVyZVRpdGxlKTsK
LX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvblN0b3JhZ2UoQXV0aGVu
dGljYXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIC8vIEVuYWJsZSBwcml2
YXRlIGJyb3dzaW5nIGJlZm9yZSBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IHRvIHRlc3QgdGhhdCBj
cmVkZW50aWFscyBjYW4ndCBiZSBzYXZlZC4KLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJs
ZV9wcml2YXRlX2Jyb3dzaW5nKHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3ModGVzdC0+bV93
ZWJWaWV3KSwgVFJVRSk7Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRo
KCIvYXV0aC10ZXN0Lmh0bWwiKS5kYXRhKCkpOwotICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVx
dWVzdCogcmVxdWVzdCA9IHRlc3QtPndhaXRGb3JBdXRoZW50aWNhdGlvblJlcXVlc3QoKTsKLSAg
ICBnX2Fzc2VydCghd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3Byb3Bvc2VkX2Ny
ZWRlbnRpYWwocmVxdWVzdCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfYXV0aGVudGljYXRpb25f
cmVxdWVzdF9jYW5fc2F2ZV9jcmVkZW50aWFscyhyZXF1ZXN0KSk7Ci0KLSAgICAvLyBJZiBXZWJL
aXQgaGFzIGJlZW4gY29tcGlsZWQgd2l0aCBsaWJzZWNyZXQsIGFuZCBwcml2YXRlIGJyb3dzaW5n
IGlzIGRpc2FibGVkCi0gICAgLy8gdGhlbiBjaGVjayB0aGF0IGNyZWRlbnRpYWxzIGNhbiBiZSBz
YXZlZC4KLSNpZiBFTkFCTEUoQ1JFREVOVElBTF9TVE9SQUdFKQotICAgIHdlYmtpdF9zZXR0aW5n
c19zZXRfZW5hYmxlX3ByaXZhdGVfYnJvd3Npbmcod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5n
cyh0ZXN0LT5tX3dlYlZpZXcpLCBGQUxTRSk7Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5n
ZXRVUklGb3JQYXRoKCIvYXV0aC10ZXN0Lmh0bWwiKS5kYXRhKCkpOwotICAgIHJlcXVlc3QgPSB0
ZXN0LT53YWl0Rm9yQXV0aGVudGljYXRpb25SZXF1ZXN0KCk7Ci0gICAgZ19hc3NlcnQoIXdlYmtp
dF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9wcm9wb3NlZF9jcmVkZW50aWFsKHJlcXVlc3Qp
KTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5fc2F2ZV9j
cmVkZW50aWFscyhyZXF1ZXN0KSk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZp
ZXdBdXRoZW50aWNhdGlvblN1Y2Nlc3MoQXV0aGVudGljYXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rw
b2ludGVyKQotewotICAgIC8vIFRlc3QgY29ycmVjdCBhdXRoZW50aWNhdGlvbi4KLSAgICB0ZXN0
LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9hdXRoLXRlc3QuaHRtbCIpLmRhdGEo
KSk7Ci0gICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0ID0gdGVzdC0+d2Fp
dEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpOwotICAgIFdlYktpdENyZWRlbnRpYWwqIGNyZWRl
bnRpYWwgPSB3ZWJraXRfY3JlZGVudGlhbF9uZXcoYXV0aFRlc3RVc2VybmFtZSwgYXV0aFRlc3RQ
YXNzd29yZCwgV0VCS0lUX0NSRURFTlRJQUxfUEVSU0lTVEVOQ0VfRk9SX1NFU1NJT04pOwotICAg
IHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2F1dGhlbnRpY2F0ZShyZXF1ZXN0LCBjcmVk
ZW50aWFsKTsKLSAgICB3ZWJraXRfY3JlZGVudGlhbF9mcmVlKGNyZWRlbnRpYWwpOwotICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnRfY21waW50KHRlc3Qt
Pm1fbG9hZEV2ZW50cy5zaXplKCksID09LCAzKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+
bV9sb2FkRXZlbnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3Rh
cnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1sxXSwgPT0sIExv
YWRUcmFja2luZ1Rlc3Q6OkxvYWRDb21taXR0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0
LT5tX2xvYWRFdmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOwot
ICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKHRlc3QtPm1fd2Vi
VmlldyksID09LCBhdXRoRXhwZWN0ZWRTdWNjZXNzVGl0bGUpOwotCi0gICAgLy8gVGVzdCBsb2Fk
aW5nIHRoZSBzYW1lIChhdXRob3JpemVkKSBwYWdlIGFnYWluLgotICAgIHRlc3QtPmxvYWRVUkko
a1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2F1dGgtdGVzdC5odG1sIikuZGF0YSgpKTsKLSAgICAv
LyBUaGVyZSBpcyBubyBhdXRoZW50aWNhdGlvbiBjaGFsbGVuZ2UuCi0gICAgdGVzdC0+d2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZl
bnRzLnNpemUoKSwgPT0sIDMpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVu
dHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5n
VGVzdDo6TG9hZENvbW1pdHRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2
ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7Ci0gICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdGl0bGUodGVzdC0+bV93ZWJWaWV3KSwgPT0s
IGF1dGhFeHBlY3RlZFN1Y2Nlc3NUaXRsZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNlcnZlckNhbGxi
YWNrKFNvdXBTZXJ2ZXIqLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwg
R0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0Kiwgdm9pZCopCi17Ci0gICAgaWYgKG1lc3Nh
Z2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX3Nl
dF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmICghc3RyY21wKHBhdGgsICIvYXV0aC10ZXN0Lmh0bWwi
KSkgewotICAgICAgICBjb25zdCBjaGFyKiBhdXRob3JpemF0aW9uID0gc291cF9tZXNzYWdlX2hl
YWRlcnNfZ2V0X29uZShtZXNzYWdlLT5yZXF1ZXN0X2hlYWRlcnMsICJBdXRob3JpemF0aW9uIik7
Ci0gICAgICAgIC8vIFJlcXVpcmUgYXV0aGVudGljYXRpb24uCi0gICAgICAgIGlmICghZ19zdHJj
bXAwKGF1dGhvcml6YXRpb24sIGF1dGhFeHBlY3RlZEF1dGhvcml6YXRpb24pKSB7Ci0gICAgICAg
ICAgICAvLyBTdWNjZXNzZnVsIGF1dGhlbnRpY2F0aW9uLgotICAgICAgICAgICAgc291cF9tZXNz
YWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOwotICAgICAgICAgICAgc291
cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZ
X1NUQVRJQywgYXV0aFN1Y2Nlc3NIVE1MU3RyaW5nLCBzdHJsZW4oYXV0aFN1Y2Nlc3NIVE1MU3Ry
aW5nKSk7Ci0gICAgICAgICAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmF1dGhlbnRpY2F0aW9uUmV0
cmllcyA9IDA7Ci0gICAgICAgIH0gZWxzZSBpZiAoKytBdXRoZW50aWNhdGlvblRlc3Q6OmF1dGhl
bnRpY2F0aW9uUmV0cmllcyA8IDMpIHsKLSAgICAgICAgICAgIC8vIE5vIG9yIGludmFsaWQgYXV0
aG9yaXphdGlvbiBoZWFkZXIgcHJvdmlkZWQgYnkgdGhlIGNsaWVudCwgcmVxdWVzdCBhdXRoZW50
aWNhdGlvbiB0d2ljZSB0aGVuIGZhaWwuCi0gICAgICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0
YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19VTkFVVEhPUklaRUQpOwotICAgICAgICAgICAgc291
cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJXV1ct
QXV0aGVudGljYXRlIiwgIkJhc2ljIHJlYWxtPVwibXkgcmVhbG1cIiIpOwotICAgICAgICAgICAg
Ly8gSW5jbHVkZSBhIGZhaWx1cmUgbWVzc2FnZSBpbiBjYXNlIHRoZSB1c2VyIGF0dGVtcHRzIHRv
IHByb2NlZWQgd2l0aG91dCBhdXRoZW50aWNhdGlvbi4KLSAgICAgICAgICAgIHNvdXBfbWVzc2Fn
ZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMs
IGF1dGhGYWlsdXJlSFRNTFN0cmluZywgc3RybGVuKGF1dGhGYWlsdXJlSFRNTFN0cmluZykpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gQXV0aGVudGljYXRpb24gbm90IHN1Y2Nl
c3NmdWwsIGRpc3BsYXkgYSAiNDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQiIHBhZ2UuCi0gICAg
ICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7
Ci0gICAgICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2Vf
Ym9keSwgU09VUF9NRU1PUllfU1RBVElDLCBhdXRoRmFpbHVyZUhUTUxTdHJpbmcsIHN0cmxlbihh
dXRoRmFpbHVyZUhUTUxTdHJpbmcpKTsKLSAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAgICBz
b3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfRk9VTkQpOwot
Ci0gICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7
Ci19Ci0KIHZvaWQgYmVmb3JlQWxsKCkKIHsKLSAgICBrU2VydmVyID0gbmV3IFdlYktpdFRlc3RT
ZXJ2ZXIoKTsKLSAgICBrU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOwotCiAgICAgV2ViVmll
d1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJkZWZhdWx0LWNvbnRleHQiLCB0ZXN0V2ViVmll
d0RlZmF1bHRDb250ZXh0KTsKICAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3Iiwg
ImN1c3RvbS1jaGFyc2V0IiwgdGVzdFdlYlZpZXdDdXN0b21DaGFyc2V0KTsKICAgICBXZWJWaWV3
VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInNldHRpbmdzIiwgdGVzdFdlYlZpZXdTZXR0aW5n
cyk7Ci0gICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiY3JlYXRlLXJlYWR5
LWNsb3NlIiwgdGVzdFdlYlZpZXdDcmVhdGVSZWFkeUNsb3NlKTsKLSAgICBNb2RhbERpYWxvZ3NU
ZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiYWxsb3ctbW9kYWwtZGlhbG9ncyIsIHRlc3RXZWJW
aWV3QWxsb3dNb2RhbERpYWxvZ3MpOwotICAgIE1vZGFsRGlhbG9nc1Rlc3Q6OmFkZCgiV2ViS2l0
V2ViVmlldyIsICJkaXNhbGxvdy1tb2RhbC1kaWFsb2dzIiwgdGVzdFdlYlZpZXdEaXNhbGxvd01v
ZGFsRGlhbG9ncyk7Ci0gICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiamF2
YXNjcmlwdC1kaWFsb2dzIiwgdGVzdFdlYlZpZXdKYXZhU2NyaXB0RGlhbG9ncyk7Ci0gICAgVUlD
bGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAid2luZG93LXByb3BlcnRpZXMiLCB0ZXN0
V2ViVmlld1dpbmRvd1Byb3BlcnRpZXMpOwotICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRX
ZWJWaWV3IiwgIm1vdXNlLXRhcmdldCIsIHRlc3RXZWJWaWV3TW91c2VUYXJnZXQpOwotICAgIFVJ
Q2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInBlcm1pc3Npb24tcmVxdWVzdHMiLCB0
ZXN0V2ViVmlld1Blcm1pc3Npb25SZXF1ZXN0cyk7CiAgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2Vi
S2l0V2ViVmlldyIsICJ6b29tLWxldmVsIiwgdGVzdFdlYlZpZXdab29tTGV2ZWwpOwogICAgIFdl
YlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAicnVuLWphdmFzY3JpcHQiLCB0ZXN0V2Vi
Vmlld1J1bkphdmFTY3JpcHQpOwotICAgIEZpbGVDaG9vc2VyVGVzdDo6YWRkKCJXZWJLaXRXZWJW
aWV3IiwgImZpbGUtY2hvb3Nlci1yZXF1ZXN0IiwgdGVzdFdlYlZpZXdGaWxlQ2hvb3NlclJlcXVl
c3QpOwogICAgIEZ1bGxTY3JlZW5DbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiZnVs
bHNjcmVlbiIsIHRlc3RXZWJWaWV3RnVsbFNjcmVlbik7CiAgICAgV2ViVmlld1Rlc3Q6OmFkZCgi
V2ViS2l0V2ViVmlldyIsICJjYW4tc2hvdy1taW1lLXR5cGUiLCB0ZXN0V2ViVmlld0NhblNob3dN
SU1FVHlwZSk7CiAgICAgRm9ybUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJzdWJt
aXQtZm9ybSIsIHRlc3RXZWJWaWV3U3VibWl0Rm9ybSk7CkBAIC0xNDk4LDE4ICs2MDEsOCBAQCB2
b2lkIGJlZm9yZUFsbCgpCiAgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJ2
aWV3LW1vZGUiLCB0ZXN0V2ViVmlld01vZGUpOwogICAgIFNuYXBzaG90V2ViVmlld1Rlc3Q6OmFk
ZCgiV2ViS2l0V2ViVmlldyIsICJzbmFwc2hvdCIsIHRlc3RXZWJWaWV3U25hcHNob3QpOwogICAg
IFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAicGFnZS12aXNpYmlsaXR5IiwgdGVz
dFdlYlZpZXdQYWdlVmlzaWJpbGl0eSk7Ci0gICAgQXV0aGVudGljYXRpb25UZXN0OjphZGQoIldl
YktpdFdlYlZpZXciLCAiYXV0aGVudGljYXRpb24tcmVxdWVzdCIsIHRlc3RXZWJWaWV3QXV0aGVu
dGljYXRpb25SZXF1ZXN0KTsKLSAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmFkZCgiV2ViS2l0V2Vi
VmlldyIsICJhdXRoZW50aWNhdGlvbi1jYW5jZWwiLCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9u
Q2FuY2VsKTsKLSAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJh
dXRoZW50aWNhdGlvbi1sb2FkLWNhbmNlbGxlZCIsIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25M
b2FkQ2FuY2VsbGVkKTsKLSAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmFkZCgiV2ViS2l0V2ViVmll
dyIsICJhdXRoZW50aWNhdGlvbi1mYWlsdXJlIiwgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvbkZh
aWx1cmUpOwotICAgIEF1dGhlbnRpY2F0aW9uVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImF1
dGhlbnRpY2F0aW9uLW5vLWNyZWRlbnRpYWwiLCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uTm9D
cmVkZW50aWFsKTsKLSAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIs
ICJhdXRoZW50aWNhdGlvbi1zdG9yYWdlIiwgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvblN0b3Jh
Z2UpOwotICAgIC8vIFRlc3RpbmcgYXV0aGVudGljYXRpb24gc3VjY2VzcyBtdXN0IGJlIGRvbmUg
bGFzdCBiZWNhdXNlIGxpYnNvdXAgd2lsbCBuZXZlciBmaXJlCi0gICAgLy8gdGhlIGF1dGhlbnRp
Y2F0ZSBzaWduYWwgYWdhaW4gb25jZSBhdXRoZW50aWNhdGlvbiBpcyBzdWNjZXNzZnVsLgotICAg
IEF1dGhlbnRpY2F0aW9uVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImF1dGhlbnRpY2F0aW9u
LXN1Y2Nlc3MiLCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uU3VjY2Vzcyk7CiB9CiAKIHZvaWQg
YWZ0ZXJBbGwoKQogewotICAgIGRlbGV0ZSBrU2VydmVyOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMv
Q2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDE0NDI5MzkuLmEyZTllNjUgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NiBAQAorMjAxMy0xMi0zMCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5j
b20+CisKKyAgICAgICAgW0dUS10gU3BsaXQgV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRXZWJW
aWV3CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjYy
ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTa2lw
IG9ubHkgV2ViS2l0V2ViVmlldy9tb3VzZS10YXJnZXQgYW5kIGFsbCBUZXN0QXV0aGVudGljYXRp
b24KKyAgICAgICAgdGVzdHMgdGhhdCBhcmUgdGltaW5nIG91dCB3aGVuIHJ1bm5pbmcgdW5kZXIg
eHZmYi4KKworICAgICAgICAqIFNjcmlwdHMvcnVuLWd0ay10ZXN0czoKKyAgICAgICAgKFRlc3RS
dW5uZXIpOgorCiAyMDEzLTEyLTI5ICBNaWNoYcWCIFBha3XFgmEgdmVsIFJ1dGthICA8bS5wYWt1
bGFAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0VGTF1bV0syXSBEaXNhYmxlIGdlb2xvY2F0aW9u
IEFQSSB0ZXN0CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3J1bi1ndGstdGVzdHMgYi9Ub29s
cy9TY3JpcHRzL3J1bi1ndGstdGVzdHMKaW5kZXggOTdiYjExOTVkLi5kOGUxNTZiIDEwMDc1NQot
LS0gYS9Ub29scy9TY3JpcHRzL3J1bi1ndGstdGVzdHMKKysrIGIvVG9vbHMvU2NyaXB0cy9ydW4t
Z3RrLXRlc3RzCkBAIC02Nyw3ICs2Nyw4IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgIFNr
aXBwZWRUZXN0KCJ1bml0dGVzdHMvdGVzdHdlYnJlc291cmNlIiwgIi93ZWJraXQvd2VicmVzb3Vy
Y2Uvc3ViX3Jlc291cmNlX2xvYWRpbmciLCAiVGVzdCBmYWlscyBpbiBHVEsgTGludXggNjQtYml0
IFJlbGVhc2UgYm90IiwgODIzMzApLAogICAgICAgICBTa2lwcGVkVGVzdCgidW5pdHRlc3RzL3Rl
c3R3ZWJ2aWV3IiwgIi93ZWJraXQvd2Vidmlldy9pY29uLXVyaSIsICJUZXN0IHRpbWVzIG91dCBp
biBHVEsgTGludXggNjQtYml0IFJlbGVhc2UgYm90IiwgODIzMjgpLAogICAgICAgICBTa2lwcGVk
VGVzdCgiV2ViS2l0MkFQSVRlc3RzL1Rlc3RSZXNvdXJjZXMiLCAiL3dlYmtpdDIvV2ViS2l0V2Vi
Vmlldy9yZXNvdXJjZXMiLCAiVGVzdCBpcyBmbGFreSBpbiBHVEsgTGludXggMzItYml0IFJlbGVh
c2UgYm90IiwgODI4NjgpLAotICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0MkFQSVRlc3RzL1Rl
c3RXZWJLaXRXZWJWaWV3IiwgU2tpcHBlZFRlc3QuRU5USVJFX1NVSVRFLCAiVGVzdCB0aW1lcyBv
dXQgYWZ0ZXIgcjE1MDg5MCIsIDExNzY4OSksCisgICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQy
QVBJVGVzdHMvVGVzdFVJQ2xpZW50IiwgIi93ZWJraXQyL1dlYktpdFdlYlZpZXcvbW91c2UtdGFy
Z2V0IiwgIlRlc3QgdGltZXMgb3V0IGFmdGVyIHIxNTA4OTAiLCAxMTc2ODkpLAorICAgICAgICBT
a2lwcGVkVGVzdCgiV2ViS2l0MkFQSVRlc3RzL1Rlc3RBdXRoZW50aWNhdGlvbiIsIFNraXBwZWRU
ZXN0LkVOVElSRV9TVUlURSwgIlRlc3QgdGltZXMgb3V0IGFmdGVyIHIxNTA4OTAiLCAxMTc2ODkp
LAogICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0MkFQSVRlc3RzL1Rlc3RDb250ZXh0TWVudSIs
IFNraXBwZWRUZXN0LkVOVElSRV9TVUlURSwgIlRlc3QgdGltZXMgb3V0IGFmdGVyIHIxNTA4OTAi
LCAxMTc2ODkpLAogICAgICAgICBTa2lwcGVkVGVzdCgiVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
MiIsICJXZWJLaXQyLk1vdXNlTW92ZUFmdGVyQ3Jhc2giLCAiVGVzdCBpcyBmbGFreSIsIDg1MDY2
KSwKICAgICAgICAgU2tpcHBlZFRlc3QoIlRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdDIiLCAiV2Vi
S2l0Mi5OZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXMiLCAiVGVzdCBpcyBm
bGFreSIsIDg1MDY2KSwK
</data>
<flag name="review"
          id="243773"
          type_id="1"
          status="+"
          setter="pnormand"
    />
          </attachment>
      

    </bug>

</bugzilla>