<?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>44363</bug_id>
          
          <creation_ts>2010-08-20 14:46:45 -0700</creation_ts>
          <short_desc>Add tests for FileWriter</short_desc>
          <delta_ts>2011-03-11 17:13:22 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>44358</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric U.">ericu</reporter>
          <assigned_to name="Eric U.">ericu</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>kinuko</cc>
    
    <cc>michaeln</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>267435</commentid>
    <comment_count>0</comment_count>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-08-20 14:46:45 -0700</bug_when>
    <thetext>Add layout tests for the FileWriter DOM object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320451</commentid>
    <comment_count>1</comment_count>
      <attachid>76269</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-12-10 15:28:07 -0800</bug_when>
    <thetext>Created attachment 76269
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350847</commentid>
    <comment_count>2</comment_count>
      <attachid>76269</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-02-14 13:26:00 -0800</bug_when>
    <thetext>Comment on attachment 76269
Patch

Rejecting attachment 76269 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=eseidel-cq-sf&apos;, &apos;ap...&quot; exit_code: 2

Last 500 characters of output:
esystem/workers/file-writer-events.html
patching file LayoutTests/fast/filesystem/workers/file-writer-gc-blob-expected.html
patching file LayoutTests/fast/filesystem/workers/file-writer-gc-blob.html
patching file LayoutTests/fast/filesystem/workers/file-writer-write-overlapped-expected.html
patching file LayoutTests/fast/filesystem/workers/file-writer-write-overlapped.html

Failed to run &quot;[u&apos;/Projects/CommitQueue/Tools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;David Levin&apos;, u&apos;--force&apos;]&quot; exit_code: 1

Full output: http://queues.webkit.org/results/7909691</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350921</commentid>
    <comment_count>3</comment_count>
    <who name="Eric U.">ericu</who>
    <bug_when>2011-02-14 15:11:57 -0800</bug_when>
    <thetext>The CQ&apos;s output actually doesn&apos;t show any indication of what the problem might be.  I&apos;m going to upload an updated patch [svn update, fix up changelog, re-upload] and see how that goes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350942</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-02-14 15:45:29 -0800</bug_when>
    <thetext>Yes, unfortunately that&apos;s true for when svn-apply fais.  That regressed many months ago and we never fixed it. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351510</commentid>
    <comment_count>5</comment_count>
      <attachid>82511</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2011-02-15 13:00:22 -0800</bug_when>
    <thetext>Created attachment 82511
Second try--same patch, but removed one potential conflict that had already been checked in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351549</commentid>
    <comment_count>6</comment_count>
      <attachid>82511</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-02-15 13:56:00 -0800</bug_when>
    <thetext>Comment on attachment 82511
Second try--same patch, but removed one potential conflict that had already been checked in.

Rejecting attachment 82511 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=eseidel-cq-sf&apos;, &apos;ap...&quot; exit_code: 2

Last 500 characters of output:
.
Processing patch 82511 from bug 44363.
Failed to run &quot;[u&apos;/Projects/CommitQueue/Tools/Scripts/svn-apply&apos;, u&apos;--force&apos;]&quot; exit_code: 2

Parsed 18 diffs from patch file(s).
cp: fast/filesystem/file-writer-gc-blob.html: No such file or directory
Failed to copy fast/filesystem/file-writer-gc-blob.html fast/filesystem/resources/file-writer-gc-blob.js. at /Projects/CommitQueue/Tools/Scripts/svn-apply line 427.

Failed to run &quot;[u&apos;/Projects/CommitQueue/Tools/Scripts/svn-apply&apos;, u&apos;--force&apos;]&quot; exit_code: 2

Full output: http://queues.webkit.org/results/7910992</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351632</commentid>
    <comment_count>7</comment_count>
      <attachid>82531</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2011-02-15 15:07:10 -0800</bug_when>
    <thetext>Created attachment 82531
Try #3--corrected malformed patch, caused by svn-create-patch not grokking cp+modify.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351649</commentid>
    <comment_count>8</comment_count>
      <attachid>82531</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-02-15 15:25:55 -0800</bug_when>
    <thetext>Comment on attachment 82531
Try #3--corrected malformed patch, caused by svn-create-patch not grokking cp+modify.

Rejecting attachment 82531 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=cr-jail-8&apos;, &apos;apply-...&quot; exit_code: 2

Last 500 characters of output:
ile LayoutTests/fast/filesystem/workers/file-writer-events.html
patching file LayoutTests/fast/filesystem/workers/file-writer-gc-blob-expected.html
patching file LayoutTests/fast/filesystem/workers/file-writer-gc-blob.html
patching file LayoutTests/fast/filesystem/workers/file-writer-write-overlapped-expected.html
patching file LayoutTests/fast/filesystem/workers/file-writer-write-overlapped.html

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--force&apos;]&quot; exit_code: 1

Full output: http://queues.webkit.org/results/7918054</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366384</commentid>
    <comment_count>9</comment_count>
    <who name="Eric U.">ericu</who>
    <bug_when>2011-03-11 15:46:39 -0800</bug_when>
    <thetext>Manually committed r80896: http://trac.webkit.org/changeset/80896.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366442</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-11 17:13:22 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/80904 might have broken Chromium Win Release</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76269</attachid>
            <date>2010-12-10 15:28:07 -0800</date>
            <delta_ts>2011-02-15 13:00:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-44363-20101210152806.patch</filename>
            <type>text/plain</type>
            <size>30475</size>
            <attacher name="Eric U.">ericu</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDczODA5KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTAtMTItMTAgIEVyaWMgVWhyaGFuZSAgPGVy
aWN1QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGQgdGVzdHMgZm9yIEZpbGVXcml0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0MzYzCisKKyAgICAgICAgRml4IHNtYWxsIGJ1
Z3MgaW4gdGhlIHV0aWxpdHkgZnVuY3Rpb25zIGFuZCBhZGQgc2V0RmlsZUNvbnRlbnRzKCkuCisg
ICAgICAgICogZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci11dGlscy5qczoK
KworICAgICAgICBQb3J0IHRoZSBHQyBCbG9iIHRlc3Qgb3ZlciB0byB0aGUgbmV3IEZpbGVXcml0
ZXIgdXRpbGl0aWVzLgorICAgICAgICAqIGZhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1nYy1i
bG9iLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vZmlsZS13cml0ZXIt
Z2MtYmxvYi5odG1sOgorICAgICAgICAqIGZhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13
cml0ZXItZ2MtYmxvYi5qczogQ29waWVkIGZyb20gTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVt
L2ZpbGUtd3JpdGVyLWdjLWJsb2IuaHRtbC4KKworICAgICAgICBBZGQgdGVzdHMgZm9yIHByb2dy
ZXNzIGV2ZW50cyBhbmQgb3ZlcmxhcHBpbmcgd3JpdGVzIFt2aWEgc2Vla10uCisgICAgICAgICog
ZmFzdC9maWxlc3lzdGVtL2ZpbGUtd3JpdGVyLWV2ZW50cy1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1ldmVudHMuaHRtbDogQWRkZWQu
CisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1ldmVudHMu
anM6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci13cml0ZS1v
dmVybGFwcGVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9maWxlc3lzdGVt
L2ZpbGUtd3JpdGVyLXdyaXRlLW92ZXJsYXBwZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFz
dC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci13cml0ZS1vdmVybGFwcGVkLmpzOiBB
ZGRlZC4KKworICAgICAgICBXb3JrZXIgdmVyc2lvbnMgb2YgdGhlIGFib3ZlIHRlc3RzLgorICAg
ICAgICAqIGZhc3QvZmlsZXN5c3RlbS93b3JrZXJzL2ZpbGUtd3JpdGVyLWV2ZW50cy1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZmlsZXN5c3RlbS93b3JrZXJzL2ZpbGUtd3Jp
dGVyLWV2ZW50cy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vd29ya2Vy
cy9maWxlLXdyaXRlci1nYy1ibG9iLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvZmlsZXN5c3RlbS93b3JrZXJzL2ZpbGUtd3JpdGVyLWdjLWJsb2IuaHRtbDogQWRkZWQuCisg
ICAgICAgICogZmFzdC9maWxlc3lzdGVtL3dvcmtlcnMvZmlsZS13cml0ZXItd3JpdGUtb3Zlcmxh
cHBlZC1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vd29y
a2Vycy9maWxlLXdyaXRlci13cml0ZS1vdmVybGFwcGVkLmh0bWw6IEFkZGVkLgorCiAyMDEwLTEy
LTEwICBFbWlsIEVrbHVuZCAgPGVhZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgQWRhbSBCYXJ0aC4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLXdy
aXRlci1ldmVudHMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
ZmlsZXN5c3RlbS9maWxlLXdyaXRlci1ldmVudHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZpbGUtd3JpdGVyLWV2ZW50cy1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKK1Rlc3QgdGhhdCBGaWxlV3JpdGVy
IHByb2R1Y2VzIHByb3BlciBwcm9ncmVzcyBldmVudHMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxs
IHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBM
RVRFIi4KKworc3RhcnRpbmcgdGVzdAorUEFTUyBTYXcgYWxsIHRoZSByaWdodCBldmVudHMuCitQ
QVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZpbGUtd3JpdGVyLWV2ZW50cy5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1ldmVudHMu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLXdy
aXRlci1ldmVudHMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNiBAQAorPCFET0NUWVBF
IEhUTUw+Cis8aHRtbD4KKyA8aGVhZD4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9
Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+CisgICAgPHRpdGxlPkZpbGUgV3Jp
dGVyIEV2ZW50czwvdGl0bGU+CisgICAgPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10
ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9maWxlLXdy
aXRlci11dGlscy5qcyI+PC9zY3JpcHQ+CisgPC9oZWFkPgorIDxib2R5PgorICAgIDxkaXYgaWQ9
ImRlc2NyaXB0aW9uIj48L2Rpdj4KKyAgICA8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKyAgICA8
c2NyaXB0IHNyYz0icmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWV2ZW50cy5qcyI+PC9zY3JpcHQ+Cisg
ICAgPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
PgorIDwvYm9keT4KKzwvaHRtbD4KKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVt
L2ZpbGUtd3JpdGVyLWdjLWJsb2ItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1nYy1ibG9iLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gNzM0ODQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS13cml0ZXIt
Z2MtYmxvYi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSwxMCBAQAorVGVz
dCB0aGF0IGEgYmxvYiB3b24ndCBnZXQgZ2FyYmFnZS1jb2xsZWN0ZWQgd2hpbGUgYmVpbmcgd3Jp
dHRlbiBvdXQgYnkgYSBGaWxlV3JpdGVyLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBz
ZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisK
IHN0YXJ0aW5nIHRlc3QKIFBBU1MgU3VjY2Vzc2Z1bGx5IHdyb3RlIGJsb2IuCiBQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9maWxlc3lzdGVtL2ZpbGUtd3JpdGVyLWdjLWJsb2IuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS13cml0ZXItZ2MtYmxvYi5odG1sCShy
ZXZpc2lvbiA3MzQ4NCkKKysrIExheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRl
ci1nYy1ibG9iLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAyICsxLDE1IEBACiA8IURPQ1RZ
UEUgSFRNTD4KIDxodG1sPgotPGhlYWQ+Ci08dGl0bGU+RmlsZSBXcml0ZXIgdGVzdDwvdGl0bGU+
Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0
eWxlLmNzcyI+Ci08c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48
L3NjcmlwdD4KLTxzY3JpcHQ+Ci0gICAgdmFyIGZpbGVFbnRyeTsKLQotICAgIGZ1bmN0aW9uIGNs
ZWFuVXAoKSB7Ci0gICAgICB2YXIgbmVlZFRvQ2FsbEZpbmlzaCA9IHRydWU7Ci0gICAgICB0cnkg
ewotICAgICAgICBpZiAoZmlsZUVudHJ5KSB7Ci0gICAgICAgICAgZmlsZUVudHJ5LnJlbW92ZShm
aW5pc2hKU1Rlc3QsIGZpbmlzaEpTVGVzdCk7Ci0gICAgICAgICAgbmVlZFRvQ2FsbEZpbmlzaCA9
IGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9IGNhdGNoIChleCkgewotICAgICAgfQotICAgICAg
aWYgKG5lZWRUb0NhbGxGaW5pc2gpIHsKLSAgICAgICAgZmluaXNoSlNUZXN0KCk7Ci0gICAgICB9
Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc3RyaW5naWZ5T2JqKG8pIHsKLSAgICAgICAgcyA9ICIi
OwotICAgICAgICBpZiAobykKLSAgICAgICAgICAgIGZvciAoaW5kZXggaW4gbykgewotICAgICAg
ICAgICAgICAgIHMgKz0gaW5kZXggKyAiOiAiICsgb1tpbmRleF0gKyAiXG4iOwotICAgICAgICAg
ICAgfQotICAgICAgICByZXR1cm4gczsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBvbkVycm9yKGUp
IHsKLSAgICAgICAgZGVidWcoIkNhdWdodCBhbiBlcnJvci4iKTsKLSAgICAgICAgaWYgKGUgJiYg
ZS5jb2RlKSB7ICAvLyBFYWNoIEZpbGVFcnJvciBoYXMgYSBjb2RlLgotICAgICAgICAgIGRlYnVn
KCJFcnJvciBjb2RlOiAiICsgZS5jb2RlKTsKLSAgICAgICAgfQotICAgICAgICB0ZXN0RmFpbGVk
KHN0cmluZ2lmeU9iaihlKSk7Ci0gICAgICAgIGNsZWFuVXAoKTsKLSAgICB9Ci0KLSAgICBmdW5j
dGlvbiBvblN1Y2Nlc3MoKSB7Ci0gICAgICAgIHRlc3RQYXNzZWQoIlN1Y2Nlc3NmdWxseSB3cm90
ZSBibG9iLiIpOwotICAgICAgICBjbGVhblVwKCk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gdGVu
WEJsb2IoYmxvYikgewotICAgICAgICB2YXIgYmIgPSBuZXcgQmxvYkJ1aWxkZXIoKTsKLSAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgKytpKSB7Ci0gICAgICAgICAgICBiYi5hcHBlbmQo
YmxvYik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGJiLmdldEJsb2IoKTsKLSAgICB9Ci0K
LSAgICBmdW5jdGlvbiBzdGFydFdyaXRlKHdyaXRlcikgewotICAgICAgICAvLyBMZXQncyBtYWtl
IGl0IGFib3V0IGEgbWVnYWJ5dGUuCi0gICAgICAgIHZhciBiYiA9IG5ldyBCbG9iQnVpbGRlcigp
OwotICAgICAgICBiYi5hcHBlbmQoImxvcmVtIGlwc3VtIik7Ci0gICAgICAgIHZhciBibG9iID0g
dGVuWEJsb2IoYmIuZ2V0QmxvYigpKTsKLSAgICAgICAgYmxvYiA9IHRlblhCbG9iKGJiLmdldEJs
b2IoKSk7Ci0gICAgICAgIGJsb2IgPSB0ZW5YQmxvYihiYi5nZXRCbG9iKCkpOwotICAgICAgICBi
bG9iID0gdGVuWEJsb2IoYmIuZ2V0QmxvYigpKTsKLSAgICAgICAgYmxvYiA9IHRlblhCbG9iKGJi
LmdldEJsb2IoKSk7Ci0gICAgICAgIHdyaXRlci5vbmVycm9yID0gb25FcnJvcjsKLSAgICAgICAg
d3JpdGVyLm9ud3JpdGVlbmQgPSBvblN1Y2Nlc3M7Ci0gICAgICAgIHdyaXRlci53cml0ZShibG9i
KTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiB1c2VGaWxlV3JpdGVyKHdyaXRlcikgewotICAgICAg
ICBzdGFydFdyaXRlKHdyaXRlcik7Ci0gICAgICAgIGdjKCk7Ci0gICAgfQotCi0gICAgZnVuY3Rp
b24gZmlsZUNhbGxiYWNrKGYpIHsKLSAgICAgICAgZmlsZUVudHJ5ID0gZjsKLSAgICAgICAgZmls
ZUVudHJ5LmNyZWF0ZVdyaXRlcih1c2VGaWxlV3JpdGVyLCBvbkVycm9yKTsKLSAgICB9Ci0KLSAg
ICBmdW5jdGlvbiBydW5UZXN0KCkgewotICAgICAgICBkZWJ1Zygic3RhcnRpbmcgdGVzdCIpOwot
ICAgICAgICBpZiAod2luZG93LnJlcXVlc3RGaWxlU3lzdGVtKSB7Ci0gICAgICAgICAgICByZXF1
ZXN0RmlsZVN5c3RlbSgwLCAxMDI0KjEwMjQsCi0gICAgICAgICAgICAgICAgZnVuY3Rpb24oZnMp
IHsKLSAgICAgICAgICAgICAgICAgICAgZnMucm9vdC5nZXRGaWxlKCJ0ZXN0LnR4dCIsIHtjcmVh
dGU6dHJ1ZX0sIGZpbGVDYWxsYmFjaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG9uRXJyb3IpOwotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgb25FcnJv
cik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkZWJ1ZygiVGhpcyB0ZXN0IHJlcXVp
cmVzIEZpbGVTeXN0ZW0gQVBJIHN1cHBvcnQuIik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgd2lu
ZG93LnN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Ci0gICAgd2luZG93LmpzVGVzdElzQXN5bmMg
PSB0cnVlOwotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+Cisg
PGhlYWQ+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMv
anMtdGVzdC1zdHlsZS5jc3MiPgorICAgIDx0aXRsZT5GaWxlIFdyaXRlciBHQyBCbG9iPC90aXRs
ZT4KKyAgICA8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKyAgICA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2ZpbGUtd3JpdGVyLXV0aWxzLmpzIj48
L3NjcmlwdD4KKyA8L2hlYWQ+CisgPGJvZHk+CiAgICAgPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwv
ZGl2PgogICAgIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorICAgIDxzY3JpcHQgc3JjPSJyZXNv
dXJjZXMvZmlsZS13cml0ZXItZ2MtYmxvYi5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9
Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgotPC9ib2R5PgorIDwv
Ym9keT4KIDwvaHRtbD4KLQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZpbGUt
d3JpdGVyLXdyaXRlLW92ZXJsYXBwZWQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci13cml0ZS1vdmVybGFwcGVkLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxl
LXdyaXRlci13cml0ZS1vdmVybGFwcGVkLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMyBAQAorVGVzdCB1c2luZyBGaWxlV3JpdGVyLnNlZWsgdG8gd3JpdGUgb3ZlcmxhcHBp
bmcgZXhpc3RpbmcgZGF0YSBpbiBhIGZpbGUuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
Kworc3RhcnRpbmcgdGVzdAorUEFTUyBOZWdhdGl2ZSBzZWVrIHZhbGlkYXRlZC4KK1BBU1MgUG9z
aXRpdmUgc2VlayB2YWxpZGF0ZWQuCitQQVNTIE5vbmV4dGVuZGluZyB3cml0ZSB2YWxpZGF0ZWQu
CitQQVNTIEFsbCB3cml0ZXMgdmVyaWZpZWQuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVt
L2ZpbGUtd3JpdGVyLXdyaXRlLW92ZXJsYXBwZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS13cml0ZXItd3JpdGUtb3ZlcmxhcHBlZC5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZpbGUtd3JpdGVyLXdy
aXRlLW92ZXJsYXBwZWQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNSBAQAorPCFET0NU
WVBFIEhUTUw+Cis8aHRtbD4KKyA8aGVhZD4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhy
ZWY9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+CisgICAgPHRpdGxlPkZpbGUg
V3JpdGVyIFdyaXRlIE92ZXJsYXBwZWQ8L3RpdGxlPgorICAgIDxzY3JpcHQgc3JjPSIuLi9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXNv
dXJjZXMvZmlsZS13cml0ZXItdXRpbHMuanMiPjwvc2NyaXB0PgorIDwvaGVhZD4KKyA8Ym9keT4K
KyAgICA8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+CisgICAgPGRpdiBpZD0iY29uc29sZSI+
PC9kaXY+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9maWxlLXdyaXRlci13cml0ZS1vdmVy
bGFwcGVkLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CisgPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1ldmVudHMuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdy
aXRlci1ldmVudHMuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0
ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWV2ZW50cy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMDIgQEAKK2lmICh0aGlzLmltcG9ydFNjcmlwdHMpIHsKKyAgICBpbXBvcnRTY3JpcHRzKCdm
cy13b3JrZXItY29tbW9uLmpzJyk7CisgICAgaW1wb3J0U2NyaXB0cygnZmlsZS13cml0ZXItdXRp
bHMuanMnKTsKK30KKworZGVzY3JpcHRpb24oIlRlc3QgdGhhdCBGaWxlV3JpdGVyIHByb2R1Y2Vz
IHByb3BlciBwcm9ncmVzcyBldmVudHMuIik7CisKK3ZhciBmaWxlRW50cnk7Cit2YXIgc2F3V3Jp
dGVTdGFydDsKK3ZhciBzYXdXcml0ZTsKK3ZhciBzYXdXcml0ZUVuZDsKK3ZhciBzYXdQcm9ncmVz
czsKK3ZhciB3cml0ZXI7Cit2YXIgbGFzdFByb2dyZXNzID0gMDsKK3ZhciB0b0JlV3JpdHRlbjsK
KworZnVuY3Rpb24gdGVuWEJsb2IoYmxvYikgeworICAgIHZhciBiYiA9IG5ldyBCbG9iQnVpbGRl
cigpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTA7ICsraSkgeworICAgICAgICBiYi5hcHBl
bmQoYmxvYik7CisgICAgfQorICAgIHJldHVybiBiYi5nZXRCbG9iKCk7Cit9CisKK2Z1bmN0aW9u
IG9uV3JpdGVTdGFydChlKSB7CisgICAgYXNzZXJ0KHdyaXRlcik7CisgICAgYXNzZXJ0KHdyaXRl
ci5yZWFkeVN0YXRlID09IHdyaXRlci5XUklUSU5HKTsKKyAgICBhc3NlcnQoZS50eXBlID09ICJ3
cml0ZXN0YXJ0Iik7CisgICAgYXNzZXJ0KCFzYXdXcml0ZVN0YXJ0KTsKKyAgICBhc3NlcnQoIXNh
d1Byb2dyZXNzKTsKKyAgICBhc3NlcnQoIXNhd1dyaXRlKTsKKyAgICBhc3NlcnQoIXNhd1dyaXRl
RW5kKTsKKyAgICBhc3NlcnQoIWUubG9hZGVkKTsKKyAgICBhc3NlcnQoZS50b3RhbCA9PSB0b0Jl
V3JpdHRlbik7CisgICAgc2F3V3JpdGVTdGFydCA9IHRydWU7Cit9CisKK2Z1bmN0aW9uIG9uUHJv
Z3Jlc3MoZSkgeworICAgIGFzc2VydCh3cml0ZXIucmVhZHlTdGF0ZSA9PSB3cml0ZXIuV1JJVElO
Ryk7CisgICAgYXNzZXJ0KHNhd1dyaXRlU3RhcnQpOworICAgIGFzc2VydCghc2F3V3JpdGUpOwor
ICAgIGFzc2VydCghc2F3V3JpdGVFbmQpOworICAgIGFzc2VydChlLnR5cGUgPT0gInByb2dyZXNz
Iik7CisgICAgYXNzZXJ0KGUubG9hZGVkIDw9IGUudG90YWwpOworICAgIGFzc2VydChsYXN0UHJv
Z3Jlc3MgPCBlLmxvYWRlZCk7CisgICAgYXNzZXJ0KGUudG90YWwgPT0gdG9CZVdyaXR0ZW4pOwor
ICAgIGxhc3RQcm9ncmVzcyA9IGUubG9hZGVkOworICAgIHNhd1Byb2dyZXNzID0gdHJ1ZTsKK30K
KworZnVuY3Rpb24gb25Xcml0ZShlKSB7CisgICAgYXNzZXJ0KHdyaXRlci5yZWFkeVN0YXRlID09
IHdyaXRlci5XUklUSU5HKTsKKyAgICBhc3NlcnQoc2F3V3JpdGVTdGFydCk7CisgICAgYXNzZXJ0
KHNhd1Byb2dyZXNzKTsKKyAgICBhc3NlcnQobGFzdFByb2dyZXNzID09IGUudG90YWwpOworICAg
IGFzc2VydCghc2F3V3JpdGUpOworICAgIGFzc2VydCghc2F3V3JpdGVFbmQpOworICAgIGFzc2Vy
dChlLnR5cGUgPT0gIndyaXRlIik7CisgICAgYXNzZXJ0KGUubG9hZGVkID09IGUudG90YWwpOwor
ICAgIGFzc2VydChlLnRvdGFsID09IHRvQmVXcml0dGVuKTsKKyAgICBzYXdXcml0ZSA9IHRydWU7
Cit9CisKK2Z1bmN0aW9uIG9uV3JpdGVFbmQoZSkgeworICAgIGFzc2VydCh3cml0ZXIucmVhZHlT
dGF0ZSA9PSB3cml0ZXIuRE9ORSk7CisgICAgYXNzZXJ0KHNhd1dyaXRlU3RhcnQpOworICAgIGFz
c2VydChzYXdQcm9ncmVzcyk7CisgICAgYXNzZXJ0KHNhd1dyaXRlKTsKKyAgICBhc3NlcnQoIXNh
d1dyaXRlRW5kKTsKKyAgICBhc3NlcnQoZS50eXBlID09ICJ3cml0ZWVuZCIpOworICAgIGFzc2Vy
dChlLmxvYWRlZCA9PSBlLnRvdGFsKTsKKyAgICBhc3NlcnQoZS50b3RhbCA9PSB0b0JlV3JpdHRl
bik7CisgICAgc2F3V3JpdGVFbmQgPSB0cnVlOworICAgIHRlc3RQYXNzZWQoIlNhdyBhbGwgdGhl
IHJpZ2h0IGV2ZW50cy4iKTsKKyAgICBjbGVhblVwKCk7Cit9CisKK2Z1bmN0aW9uIHN0YXJ0V3Jp
dGUoZmlsZVdyaXRlcikgeworICAgIC8vIExldCdzIG1ha2UgaXQgYWJvdXQgYSBtZWdhYnl0ZS4K
KyAgICB2YXIgYmIgPSBuZXcgQmxvYkJ1aWxkZXIoKTsKKyAgICBiYi5hcHBlbmQoImxvcmVtIGlw
c3VtIik7CisgICAgdmFyIGJsb2IgPSB0ZW5YQmxvYihiYi5nZXRCbG9iKCkpOworICAgIGJsb2Ig
PSB0ZW5YQmxvYihibG9iKTsKKyAgICBibG9iID0gdGVuWEJsb2IoYmxvYik7CisgICAgYmxvYiA9
IHRlblhCbG9iKGJsb2IpOworICAgIGJsb2IgPSB0ZW5YQmxvYihibG9iKTsKKyAgICB0b0JlV3Jp
dHRlbiA9IGJsb2Iuc2l6ZTsKKyAgICB3cml0ZXIgPSBmaWxlV3JpdGVyOworICAgIGZpbGVXcml0
ZXIub25lcnJvciA9IG9uRXJyb3I7CisgICAgZmlsZVdyaXRlci5vbndyaXRlc3RhcnQgPSBvbldy
aXRlU3RhcnQ7CisgICAgZmlsZVdyaXRlci5vbnByb2dyZXNzID0gb25Qcm9ncmVzczsKKyAgICBm
aWxlV3JpdGVyLm9ud3JpdGUgPSBvbldyaXRlOworICAgIGZpbGVXcml0ZXIub253cml0ZWVuZCA9
IG9uV3JpdGVFbmQ7CisgICAgZmlsZVdyaXRlci53cml0ZShibG9iKTsKK30KKworZnVuY3Rpb24g
cnVuVGVzdCh1bnVzZWRGaWxlRW50cnksIGZpbGVXcml0ZXIpIHsKKyAgICBzdGFydFdyaXRlKGZp
bGVXcml0ZXIpOworfQordmFyIGpzVGVzdElzQXN5bmMgPSB0cnVlOworc2V0dXBBbmRSdW5UZXN0
KDIqMTAyNCoxMDI0LCAnZmlsZS13cml0ZXItZ2MtYmxvYicsIHJ1blRlc3QpOwordmFyIHN1Y2Nl
c3NmdWxseVBhcnNlZCA9IHRydWU7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0v
cmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWdjLWJsb2IuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1nYy1ibG9iLmpzCShyZXZp
c2lvbiA3MzQ4NCkJKGZyb20gTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZpbGUtd3JpdGVy
LWdjLWJsb2IuaHRtbDo3MzQ4NCkKKysrIExheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNv
dXJjZXMvZmlsZS13cml0ZXItZ2MtYmxvYi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEw
MiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPkZpbGUgV3JpdGVy
IHRlc3Q8L3RpdGxlPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10
ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorICAgIHZhciBmaWxlRW50cnk7CisKKyAg
ICBmdW5jdGlvbiBjbGVhblVwKCkgeworICAgICAgdmFyIG5lZWRUb0NhbGxGaW5pc2ggPSB0cnVl
OworICAgICAgdHJ5IHsKKyAgICAgICAgaWYgKGZpbGVFbnRyeSkgeworICAgICAgICAgIGZpbGVF
bnRyeS5yZW1vdmUoZmluaXNoSlNUZXN0LCBmaW5pc2hKU1Rlc3QpOworICAgICAgICAgIG5lZWRU
b0NhbGxGaW5pc2ggPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgfSBjYXRjaCAoZXgpIHsKKyAg
ICAgIH0KKyAgICAgIGlmIChuZWVkVG9DYWxsRmluaXNoKSB7CisgICAgICAgIGZpbmlzaEpTVGVz
dCgpOworICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIHN0cmluZ2lmeU9iaihvKSB7Cisg
ICAgICAgIHMgPSAiIjsKKyAgICAgICAgaWYgKG8pCisgICAgICAgICAgICBmb3IgKGluZGV4IGlu
IG8pIHsKKyAgICAgICAgICAgICAgICBzICs9IGluZGV4ICsgIjogIiArIG9baW5kZXhdICsgIlxu
IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHM7CisgICAgfQorCisgICAgZnVuY3Rp
b24gb25FcnJvcihlKSB7CisgICAgICAgIGRlYnVnKCJDYXVnaHQgYW4gZXJyb3IuIik7CisgICAg
ICAgIGlmIChlICYmIGUuY29kZSkgeyAgLy8gRWFjaCBGaWxlRXJyb3IgaGFzIGEgY29kZS4KKyAg
ICAgICAgICBkZWJ1ZygiRXJyb3IgY29kZTogIiArIGUuY29kZSk7CisgICAgICAgIH0KKyAgICAg
ICAgdGVzdEZhaWxlZChzdHJpbmdpZnlPYmooZSkpOworICAgICAgICBjbGVhblVwKCk7CisgICAg
fQorCisgICAgZnVuY3Rpb24gb25TdWNjZXNzKCkgeworICAgICAgICB0ZXN0UGFzc2VkKCJTdWNj
ZXNzZnVsbHkgd3JvdGUgYmxvYi4iKTsKKyAgICAgICAgY2xlYW5VcCgpOworICAgIH0KKworICAg
IGZ1bmN0aW9uIHRlblhCbG9iKGJsb2IpIHsKKyAgICAgICAgdmFyIGJiID0gbmV3IEJsb2JCdWls
ZGVyKCk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTA7ICsraSkgeworICAgICAgICAg
ICAgYmIuYXBwZW5kKGJsb2IpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBiYi5nZXRCbG9i
KCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gc3RhcnRXcml0ZSh3cml0ZXIpIHsKKyAgICAgICAg
Ly8gTGV0J3MgbWFrZSBpdCBhYm91dCBhIG1lZ2FieXRlLgorICAgICAgICB2YXIgYmIgPSBuZXcg
QmxvYkJ1aWxkZXIoKTsKKyAgICAgICAgYmIuYXBwZW5kKCJsb3JlbSBpcHN1bSIpOworICAgICAg
ICB2YXIgYmxvYiA9IHRlblhCbG9iKGJiLmdldEJsb2IoKSk7CisgICAgICAgIGJsb2IgPSB0ZW5Y
QmxvYihiYi5nZXRCbG9iKCkpOworICAgICAgICBibG9iID0gdGVuWEJsb2IoYmIuZ2V0QmxvYigp
KTsKKyAgICAgICAgYmxvYiA9IHRlblhCbG9iKGJiLmdldEJsb2IoKSk7CisgICAgICAgIGJsb2Ig
PSB0ZW5YQmxvYihiYi5nZXRCbG9iKCkpOworICAgICAgICB3cml0ZXIub25lcnJvciA9IG9uRXJy
b3I7CisgICAgICAgIHdyaXRlci5vbndyaXRlZW5kID0gb25TdWNjZXNzOworICAgICAgICB3cml0
ZXIud3JpdGUoYmxvYik7CisgICAgfQorCisgICAgZnVuY3Rpb24gdXNlRmlsZVdyaXRlcih3cml0
ZXIpIHsKKyAgICAgICAgc3RhcnRXcml0ZSh3cml0ZXIpOworICAgICAgICBnYygpOworICAgIH0K
KworICAgIGZ1bmN0aW9uIGZpbGVDYWxsYmFjayhmKSB7CisgICAgICAgIGZpbGVFbnRyeSA9IGY7
CisgICAgICAgIGZpbGVFbnRyeS5jcmVhdGVXcml0ZXIodXNlRmlsZVdyaXRlciwgb25FcnJvcik7
CisgICAgfQorCisgICAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICAgICAgZGVidWcoInN0YXJ0
aW5nIHRlc3QiKTsKKyAgICAgICAgaWYgKHdpbmRvdy5yZXF1ZXN0RmlsZVN5c3RlbSkgeworICAg
ICAgICAgICAgcmVxdWVzdEZpbGVTeXN0ZW0oMCwgMTAyNCoxMDI0LAorICAgICAgICAgICAgICAg
IGZ1bmN0aW9uKGZzKSB7CisgICAgICAgICAgICAgICAgICAgIGZzLnJvb3QuZ2V0RmlsZSgidGVz
dC50eHQiLCB7Y3JlYXRlOnRydWV9LCBmaWxlQ2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvbkVycm9yKTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAg
ICAgICAgIG9uRXJyb3IpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVidWcoIlRo
aXMgdGVzdCByZXF1aXJlcyBGaWxlU3lzdGVtIEFQSSBzdXBwb3J0LiIpOworICAgICAgICB9Cisg
ICAgfQorICAgIHdpbmRvdy5zdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworICAgIHdpbmRvdy5q
c1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJy
dW5UZXN0KCkiPgorICAgIDxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKyAgICA8ZGl2IGlk
PSJjb25zb2xlIj48L2Rpdj4KKyAgICA8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CisKSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItZ2MtYmxvYi5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3Jp
dGVyLWdjLWJsb2IuanMJKHJldmlzaW9uIDczNDg0KQorKysgTGF5b3V0VGVzdHMvZmFzdC9maWxl
c3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1nYy1ibG9iLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDEwMiArMSw1OSBAQAotPCFET0NUWVBFIEhUTUw+Ci08aHRtbD4KLTxoZWFkPgotPHRpdGxl
PkZpbGUgV3JpdGVyIHRlc3Q8L3RpdGxlPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIu
Li9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgotPHNjcmlwdCBzcmM9Ii4uL2pzL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0PgotICAgIHZhciBmaWxl
RW50cnk7Ci0KLSAgICBmdW5jdGlvbiBjbGVhblVwKCkgewotICAgICAgdmFyIG5lZWRUb0NhbGxG
aW5pc2ggPSB0cnVlOwotICAgICAgdHJ5IHsKLSAgICAgICAgaWYgKGZpbGVFbnRyeSkgewotICAg
ICAgICAgIGZpbGVFbnRyeS5yZW1vdmUoZmluaXNoSlNUZXN0LCBmaW5pc2hKU1Rlc3QpOwotICAg
ICAgICAgIG5lZWRUb0NhbGxGaW5pc2ggPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAgfSBjYXRj
aCAoZXgpIHsKLSAgICAgIH0KLSAgICAgIGlmIChuZWVkVG9DYWxsRmluaXNoKSB7Ci0gICAgICAg
IGZpbmlzaEpTVGVzdCgpOwotICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0aW9uIHN0cmluZ2lm
eU9iaihvKSB7Ci0gICAgICAgIHMgPSAiIjsKLSAgICAgICAgaWYgKG8pCi0gICAgICAgICAgICBm
b3IgKGluZGV4IGluIG8pIHsKLSAgICAgICAgICAgICAgICBzICs9IGluZGV4ICsgIjogIiArIG9b
aW5kZXhdICsgIlxuIjsKK2lmICh0aGlzLmltcG9ydFNjcmlwdHMpIHsKKyAgICBpbXBvcnRTY3Jp
cHRzKCdmcy13b3JrZXItY29tbW9uLmpzJyk7CisgICAgaW1wb3J0U2NyaXB0cygnZmlsZS13cml0
ZXItdXRpbHMuanMnKTsKKyAgICBmdW5jdGlvbiBnYygpIHsKKyAgICAgICAgaWYgKHR5cGVvZiBH
Q0NvbnRyb2xsZXIgIT09ICJ1bmRlZmluZWQiKQorICAgICAgICAgICAgR0NDb250cm9sbGVyLmNv
bGxlY3QoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBmdW5jdGlvbiBnY1JlYyhuKSB7
CisgICAgICAgICAgICAgICAgaWYgKG4gPCAxKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
e307CisgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSB7aTogImFiIiArIGkgKyAoaSAvIDEwMDAw
MCl9OworICAgICAgICAgICAgICAgIHRlbXAgKz0gImZvbyI7CisgICAgICAgICAgICAgICAgZ2NS
ZWMobi0xKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHM7Ci0gICAgfQotCi0gICAg
ZnVuY3Rpb24gb25FcnJvcihlKSB7Ci0gICAgICAgIGRlYnVnKCJDYXVnaHQgYW4gZXJyb3IuIik7
Ci0gICAgICAgIGlmIChlICYmIGUuY29kZSkgeyAgLy8gRWFjaCBGaWxlRXJyb3IgaGFzIGEgY29k
ZS4KLSAgICAgICAgICBkZWJ1ZygiRXJyb3IgY29kZTogIiArIGUuY29kZSk7Ci0gICAgICAgIH0K
LSAgICAgICAgdGVzdEZhaWxlZChzdHJpbmdpZnlPYmooZSkpOwotICAgICAgICBjbGVhblVwKCk7
Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gb25TdWNjZXNzKCkgewotICAgICAgICB0ZXN0UGFzc2Vk
KCJTdWNjZXNzZnVsbHkgd3JvdGUgYmxvYi4iKTsKLSAgICAgICAgY2xlYW5VcCgpOwotICAgIH0K
LQotICAgIGZ1bmN0aW9uIHRlblhCbG9iKGJsb2IpIHsKLSAgICAgICAgdmFyIGJiID0gbmV3IEJs
b2JCdWlsZGVyKCk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTA7ICsraSkgewotICAg
ICAgICAgICAgYmIuYXBwZW5kKGJsb2IpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCAxMDAwOyBpKyspCisgICAgICAgICAgICAgICAgZ2NSZWMoMTApCiAgICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIGJiLmdldEJsb2IoKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBzdGFydFdyaXRl
KHdyaXRlcikgewotICAgICAgICAvLyBMZXQncyBtYWtlIGl0IGFib3V0IGEgbWVnYWJ5dGUuCi0g
ICAgICAgIHZhciBiYiA9IG5ldyBCbG9iQnVpbGRlcigpOwotICAgICAgICBiYi5hcHBlbmQoImxv
cmVtIGlwc3VtIik7Ci0gICAgICAgIHZhciBibG9iID0gdGVuWEJsb2IoYmIuZ2V0QmxvYigpKTsK
LSAgICAgICAgYmxvYiA9IHRlblhCbG9iKGJiLmdldEJsb2IoKSk7Ci0gICAgICAgIGJsb2IgPSB0
ZW5YQmxvYihiYi5nZXRCbG9iKCkpOwotICAgICAgICBibG9iID0gdGVuWEJsb2IoYmIuZ2V0Qmxv
YigpKTsKLSAgICAgICAgYmxvYiA9IHRlblhCbG9iKGJiLmdldEJsb2IoKSk7Ci0gICAgICAgIHdy
aXRlci5vbmVycm9yID0gb25FcnJvcjsKLSAgICAgICAgd3JpdGVyLm9ud3JpdGVlbmQgPSBvblN1
Y2Nlc3M7Ci0gICAgICAgIHdyaXRlci53cml0ZShibG9iKTsKICAgICB9CiAKLSAgICBmdW5jdGlv
biB1c2VGaWxlV3JpdGVyKHdyaXRlcikgewotICAgICAgICBzdGFydFdyaXRlKHdyaXRlcik7Ci0g
ICAgICAgIGdjKCk7Ci0gICAgfQorfQogCi0gICAgZnVuY3Rpb24gZmlsZUNhbGxiYWNrKGYpIHsK
LSAgICAgICAgZmlsZUVudHJ5ID0gZjsKLSAgICAgICAgZmlsZUVudHJ5LmNyZWF0ZVdyaXRlcih1
c2VGaWxlV3JpdGVyLCBvbkVycm9yKTsKLSAgICB9CitkZXNjcmlwdGlvbigiVGVzdCB0aGF0IGEg
YmxvYiB3b24ndCBnZXQgZ2FyYmFnZS1jb2xsZWN0ZWQgd2hpbGUgYmVpbmcgd3JpdHRlbiBvdXQg
YnkgYSBGaWxlV3JpdGVyLiIpOwogCi0gICAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKLSAgICAgICAg
ZGVidWcoInN0YXJ0aW5nIHRlc3QiKTsKLSAgICAgICAgaWYgKHdpbmRvdy5yZXF1ZXN0RmlsZVN5
c3RlbSkgewotICAgICAgICAgICAgcmVxdWVzdEZpbGVTeXN0ZW0oMCwgMTAyNCoxMDI0LAotICAg
ICAgICAgICAgICAgIGZ1bmN0aW9uKGZzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZzLnJvb3Qu
Z2V0RmlsZSgidGVzdC50eHQiLCB7Y3JlYXRlOnRydWV9LCBmaWxlQ2FsbGJhY2ssCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkVycm9yKTsKLSAgICAgICAgICAgICAgICB9
LAotICAgICAgICAgICAgICAgIG9uRXJyb3IpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgZGVidWcoIlRoaXMgdGVzdCByZXF1aXJlcyBGaWxlU3lzdGVtIEFQSSBzdXBwb3J0LiIpOwot
ICAgICAgICB9Ci0gICAgfQotICAgIHdpbmRvdy5zdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwot
ICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKLTwvc2NyaXB0PgotPC9oZWFkPgotPGJv
ZHkgb25sb2FkPSJydW5UZXN0KCkiPgotICAgIDxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4K
LSAgICA8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KLSAgICA8c2NyaXB0IHNyYz0iLi4vanMvcmVz
b3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+Cit2YXIg
ZmlsZUVudHJ5OwogCitmdW5jdGlvbiBvblRlc3RTdWNjZXNzKCkgeworICAgIHRlc3RQYXNzZWQo
IlN1Y2Nlc3NmdWxseSB3cm90ZSBibG9iLiIpOworICAgIGNsZWFuVXAoKTsKK30KKworZnVuY3Rp
b24gdGVuWEJsb2IoYmxvYikgeworICAgIHZhciBiYiA9IG5ldyBCbG9iQnVpbGRlcigpOworICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgMTA7ICsraSkgeworICAgICAgICBiYi5hcHBlbmQoYmxvYik7
CisgICAgfQorICAgIHJldHVybiBiYi5nZXRCbG9iKCk7Cit9CisKK2Z1bmN0aW9uIHN0YXJ0V3Jp
dGUod3JpdGVyKSB7CisgICAgLy8gTGV0J3MgbWFrZSBpdCBhYm91dCBhIG1lZ2FieXRlLgorICAg
IHZhciBiYiA9IG5ldyBCbG9iQnVpbGRlcigpOworICAgIGJiLmFwcGVuZCgibG9yZW0gaXBzdW0i
KTsKKyAgICB2YXIgYmxvYiA9IHRlblhCbG9iKGJiLmdldEJsb2IoKSk7CisgICAgYmxvYiA9IHRl
blhCbG9iKGJsb2IpOworICAgIGJsb2IgPSB0ZW5YQmxvYihibG9iKTsKKyAgICBibG9iID0gdGVu
WEJsb2IoYmxvYik7CisgICAgYmxvYiA9IHRlblhCbG9iKGJsb2IpOworICAgIHdyaXRlci5vbmVy
cm9yID0gb25FcnJvcjsKKyAgICB3cml0ZXIub253cml0ZWVuZCA9IG9uVGVzdFN1Y2Nlc3M7Cisg
ICAgd3JpdGVyLndyaXRlKGJsb2IpOworfQorCitmdW5jdGlvbiBydW5UZXN0KHVudXNlZEZpbGVF
bnRyeSwgZmlsZVdyaXRlcikgeworICAgIHN0YXJ0V3JpdGUoZmlsZVdyaXRlcik7CisgICAgZ2Mo
KTsKK30KK3ZhciBqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK3NldHVwQW5kUnVuVGVzdCgyKjEwMjQq
MTAyNCwgJ2ZpbGUtd3JpdGVyLWdjLWJsb2InLCBydW5UZXN0KTsKK3ZhciBzdWNjZXNzZnVsbHlQ
YXJzZWQgPSB0cnVlOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNl
cy9maWxlLXdyaXRlci11dGlscy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Zp
bGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLXV0aWxzLmpzCShyZXZpc2lvbiA3MzQ4NCkK
KysrIExheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItdXRp
bHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTI0LDEyICsyNCwxNCBAQCB2YXIgZmlsZUVudHJ5Rm9y
Q2xlYW51cDsgIC8vIFNldCBhcyBzb29uCiAKIGZ1bmN0aW9uIGNsZWFuVXAoKQogewotICAgIHRy
eSB7Ci0gICAgICAgIGlmIChmaWxlRW50cnlGb3JDbGVhbnVwKQorICAgIGlmIChmaWxlRW50cnlG
b3JDbGVhbnVwKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBmaWxlRW50cnlGb3JDbGVh
bnVwLnJlbW92ZShmaW5pc2hKU1Rlc3QsIGZpbmlzaEpTVGVzdCk7Ci0gICAgfSBjYXRjaCAoZXgp
IHsKLSAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0gY2F0Y2ggKGV4KSB7CisgICAgICAgIH0KICAgICB9CisgICAgZmluaXNoSlNUZXN0KCk7CiB9
CiAKIC8vIEdlbmVyaWMgZnVuY3Rpb24gdGhhdCBnZXRzIGEgRmlsZSBmcm9tIGEgRmlsZUVudHJ5
IGFuZCBjYWxscyBhIGN1c3RvbSB2ZXJpZmljYXRpb24gZnVuY3Rpb24gb24gaXQuCkBAIC05OCwx
NiArMTAwLDIxIEBAIGZ1bmN0aW9uIHZlcmlmeUJ5dGVSYW5nZUFzU3RyaW5nKGZpbGVFbnQKIC8v
IENyZWF0ZXMgYSBmaWxlIGNhbGxlZCBmaWxlTmFtZSBpbiBmaWxlU3lzdGVtJ3Mgcm9vdCBkaXJl
Y3RvcnksIHRydW5jYXRlcyBpdCB0byB6ZXJvIGxlbmd0aCBqdXN0IGluIGNhc2UsIGFuZCBjYWxs
cyBvblN1Y2Nlc3MsIHBhc3NpbmcgaXQgYSBGaWxlRW50cnkgYW5kIEZpbGVXcml0ZXIgZm9yIHRo
ZSBuZXcgZmlsZS4KIGZ1bmN0aW9uIGNyZWF0ZUVtcHR5RmlsZShmaWxlU3lzdGVtLCBmaWxlTmFt
ZSwgb25TdWNjZXNzKQogewotICAgIGZ1bmN0aW9uIGdldFN1Y2Nlc3NGdW5jKGZpbGVFbnRyeSwg
ZmlsZVdyaXRlcikgeworICAgIGZ1bmN0aW9uIGdldFN1Y2Nlc3NGdW5jKGZpbGVFbnRyeSkgewor
ICAgICAgICAvLyBDcmVhdGUgYSBmcmVzaCBGaWxlV3JpdGVyIGhlcmUsIHJhdGhlciB0aGFuIHBh
c3MgaW4gdGhlIHVzZWQgb25lLgorICAgICAgICAvLyBUaGlzIHdheSB3ZSBkb24ndCBhY2NpZGVu
dGFsbHkgbGVhdmUgb3VyIGV2ZW50IGhhbmRsZXJzIGF0dGFjaGVkLgogICAgICAgICByZXR1cm4g
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBvblN1Y2Nlc3MoZmlsZUVudHJ5LCBmaWxlV3JpdGVy
KTsKKyAgICAgICAgICAgIGZpbGVFbnRyeS5jcmVhdGVXcml0ZXIoZnVuY3Rpb24oZncpIHsKKyAg
ICAgICAgICAgICAgICBvblN1Y2Nlc3MoZmlsZUVudHJ5LCBmdyk7CisgICAgICAgICAgICB9LCBv
bkVycm9yKTsKICAgICAgICAgfQogICAgIH0KICAgICBmdW5jdGlvbiBnZXRGaWxlV3JpdGVyQ2Fs
bGJhY2soZmlsZUVudHJ5KSB7CiAgICAgICAgIHJldHVybiBmdW5jdGlvbihmaWxlV3JpdGVyKSB7
Ci0gICAgICAgICAgICB2YXIgc3VjY2Vzc0Z1bmMgPSBnZXRTdWNjZXNzRnVuYyhmaWxlRW50cnks
IGZpbGVXcml0ZXIpOworICAgICAgICAgICAgdmFyIHN1Y2Nlc3NGdW5jID0gZ2V0U3VjY2Vzc0Z1
bmMoZmlsZUVudHJ5KTsKICAgICAgICAgICAgIGZpbGVXcml0ZXIub25FcnJvciA9IG9uRXJyb3I7
Ci0gICAgICAgICAgICBmaWxlV3JpdGVyLm9ud3JpdGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBvbndyaXRlLCBidXQgdGhlIHNwZWMgYW5kIGNv
ZGUgbmVlZCB0byBiZSBjaGFuZ2VkIHRvIGFsbG93IHRoYXQuICBTZWUgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwODQ2LgorICAgICAgICAgICAgZmlsZVdyaXRlci5v
bndyaXRlZW5kID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgdmVyaWZ5RmlsZUxlbmd0
aChmaWxlRW50cnksIDAsIHN1Y2Nlc3NGdW5jKTsKICAgICAgICAgICAgIH07CiAgICAgICAgICAg
ICBmaWxlV3JpdGVyLnRydW5jYXRlKDApOwpAQCAtMTI5LDExICsxMzYsMjYgQEAgZnVuY3Rpb24g
d3JpdGVTdHJpbmcoZmlsZUVudHJ5LCBmaWxlV3JpdAogICAgIHZhciBibG9iID0gYmIuZ2V0Qmxv
YigpOwogICAgIGZpbGVXcml0ZXIuc2VlayhvZmZzZXQpOwogICAgIGZpbGVXcml0ZXIud3JpdGUo
YmxvYik7Ci0gICAgZmlsZVdyaXRlci5vbndyaXRlID0gZnVuY3Rpb24oKSB7CisgICAgZmlsZVdy
aXRlci5vbmVycm9yID0gb25FcnJvcjsKKyAgICBpZiAob2Zmc2V0IDwgMCkKKyAgICAgICAgb2Zm
c2V0ICs9IGZpbGVXcml0ZXIubGVuZ3RoOworICAgIGFzc2VydChvZmZzZXQgPj0gMCk7CisgICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIG9ud3JpdGUsIGJ1dCB0aGUgc3BlYyBhbmQgY29kZSBu
ZWVkIHRvIGJlIGNoYW5nZWQgdG8gYWxsb3cgdGhhdC4gIFNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA4NDYuCisgICAgZmlsZVdyaXRlci5vbndyaXRlZW5kID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIGZpbGVXcml0ZXIub253cml0ZWVuZCA9IG51bGw7CiAgICAg
ICAgIHZlcmlmeUJ5dGVSYW5nZUFzU3RyaW5nKGZpbGVFbnRyeSwgb2Zmc2V0LCBkYXRhLCBvblN1
Y2Nlc3MpOwogICAgIH07CiB9CiAKK2Z1bmN0aW9uIHNldEZpbGVDb250ZW50cyhmaWxlRW50cnks
IGZpbGVXcml0ZXIsIGNvbnRlbnRzLCBvblN1Y2Nlc3MpIHsKKyAgICBmaWxlV3JpdGVyLm9uZXJy
b3IgPSBvbkVycm9yOworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBvbndyaXRlLCBidXQg
dGhlIHNwZWMgYW5kIGNvZGUgbmVlZCB0byBiZSBjaGFuZ2VkIHRvIGFsbG93IHRoYXQuICBTZWUg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwODQ2LgorICAgIGZpbGVX
cml0ZXIub253cml0ZWVuZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB3cml0ZVN0cmluZyhmaWxl
RW50cnksIGZpbGVXcml0ZXIsIDAsIGNvbnRlbnRzLCBvblN1Y2Nlc3MpOworICAgIH07CisgICAg
ZmlsZVdyaXRlci50cnVuY2F0ZSgwKTsKK30KKwogZnVuY3Rpb24gc2V0dXBBbmRSdW5UZXN0KHNp
emUsIHRlc3ROYW1lLCB0ZXN0RnVuYykKIHsKICAgICBpZiAoIXJlcXVlc3RGaWxlU3lzdGVtKSB7
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVy
LXdyaXRlLW92ZXJsYXBwZWQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9maWxl
c3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci13cml0ZS1vdmVybGFwcGVkLmpzCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRl
ci13cml0ZS1vdmVybGFwcGVkLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDczIEBACitpZiAo
dGhpcy5pbXBvcnRTY3JpcHRzKSB7CisgICAgaW1wb3J0U2NyaXB0cygnZnMtd29ya2VyLWNvbW1v
bi5qcycpOworICAgIGltcG9ydFNjcmlwdHMoJ2ZpbGUtd3JpdGVyLXV0aWxzLmpzJyk7Cit9CisK
K2Rlc2NyaXB0aW9uKCJUZXN0IHVzaW5nIEZpbGVXcml0ZXIuc2VlayB0byB3cml0ZSBvdmVybGFw
cGluZyBleGlzdGluZyBkYXRhIGluIGEgZmlsZS4iKTsKKwordmFyIGZpbGVFbnRyeTsKK3ZhciBm
aWxlV3JpdGVyOwordmFyIHRlc3REYXRhID0gIkxvcmVtIGlwc3VtIjsKK3ZhciBzZWVrQmFja3dh
cmRPZmZzZXQgPSAtNDsKK3ZhciBzZWVrRm9yd2FyZE9mZnNldCA9IDQ7CisKK2Z1bmN0aW9uIG9u
VGVzdFN1Y2NlZWRlZCgpCit7CisgICAgdGVzdFBhc3NlZCgiQWxsIHdyaXRlcyB2ZXJpZmllZC4i
KTsKKyAgICBjbGVhblVwKCk7Cit9CisKK2Z1bmN0aW9uIHZhbGlkYXRlTm9uZXh0ZW5kaW5nV3Jp
dGVFbmQoKSB7CisgICAgdmVyaWZ5Qnl0ZVJhbmdlQXNTdHJpbmcoZmlsZUVudHJ5LCB0ZXN0RGF0
YS5sZW5ndGggKyBzZWVrRm9yd2FyZE9mZnNldCwgdGVzdERhdGEuc2xpY2Uoc2Vla0ZvcndhcmRP
ZmZzZXQpLCBvblRlc3RTdWNjZWVkZWQpOworfQorCitmdW5jdGlvbiB2YWxpZGF0ZU5vbmV4dGVu
ZGluZ1dyaXRlU3RhcnQoKSB7CisgICAgdGVzdFBhc3NlZCgiTm9uZXh0ZW5kaW5nIHdyaXRlIHZh
bGlkYXRlZC4iKTsKKyAgICBhc3NlcnQoZmlsZVdyaXRlci5sZW5ndGggPT0gdGVzdERhdGEubGVu
Z3RoICogMik7CisgICAgdmVyaWZ5Qnl0ZVJhbmdlQXNTdHJpbmcoZmlsZUVudHJ5LCAwLCB0ZXN0
RGF0YS5zbGljZSgwLCBzZWVrRm9yd2FyZE9mZnNldCksIHZhbGlkYXRlTm9uZXh0ZW5kaW5nV3Jp
dGVFbmQpOworfQorCitmdW5jdGlvbiB0ZXN0Tm9uZXh0ZW5kaW5nV3JpdGUoKSB7CisgICAgd3Jp
dGVTdHJpbmcoZmlsZUVudHJ5LCBmaWxlV3JpdGVyLCBzZWVrRm9yd2FyZE9mZnNldCwgdGVzdERh
dGEsIHZhbGlkYXRlTm9uZXh0ZW5kaW5nV3JpdGVTdGFydCk7Cit9CisKK2Z1bmN0aW9uIHNldHVw
Tm9uZXh0ZW5kaW5nV3JpdGUoKSB7CisgICAgdGVzdFBhc3NlZCgiUG9zaXRpdmUgc2VlayB2YWxp
ZGF0ZWQuIik7CisgICAgc2V0RmlsZUNvbnRlbnRzKGZpbGVFbnRyeSwgZmlsZVdyaXRlciwgdGVz
dERhdGEgKyB0ZXN0RGF0YSwgdGVzdE5vbmV4dGVuZGluZ1dyaXRlKTsKK30KKworZnVuY3Rpb24g
dmFsaWRhdGVTZWVrRm9yd2FyZCgpIHsKKyAgICBhc3NlcnQoZmlsZVdyaXRlci5sZW5ndGggPT0g
dGVzdERhdGEubGVuZ3RoICsgc2Vla0ZvcndhcmRPZmZzZXQpOworICAgIHZlcmlmeUJ5dGVSYW5n
ZUFzU3RyaW5nKGZpbGVFbnRyeSwgMCwgdGVzdERhdGEuc2xpY2UoMCwgc2Vla0ZvcndhcmRPZmZz
ZXQpLCBzZXR1cE5vbmV4dGVuZGluZ1dyaXRlKTsKK30KKworZnVuY3Rpb24gdGVzdFNlZWtGb3J3
YXJkKCkgeworICAgIHdyaXRlU3RyaW5nKGZpbGVFbnRyeSwgZmlsZVdyaXRlciwgc2Vla0Zvcndh
cmRPZmZzZXQsIHRlc3REYXRhLCB2YWxpZGF0ZVNlZWtGb3J3YXJkKTsKK30KKworZnVuY3Rpb24g
c2V0dXBTZWVrRm9yd2FyZCgpIHsKKyAgICB0ZXN0UGFzc2VkKCJOZWdhdGl2ZSBzZWVrIHZhbGlk
YXRlZC4iKTsKKyAgICBzZXRGaWxlQ29udGVudHMoZmlsZUVudHJ5LCBmaWxlV3JpdGVyLCB0ZXN0
RGF0YSwgdGVzdFNlZWtGb3J3YXJkKTsKK30KKworZnVuY3Rpb24gdmFsaWRhdGVTZWVrQmFja3dh
cmQoKSB7CisgICAgYXNzZXJ0KGZpbGVXcml0ZXIubGVuZ3RoID09IDIgKiB0ZXN0RGF0YS5sZW5n
dGggKyBzZWVrQmFja3dhcmRPZmZzZXQpOworICAgIHZlcmlmeUJ5dGVSYW5nZUFzU3RyaW5nKGZp
bGVFbnRyeSwgMCwgdGVzdERhdGEuc2xpY2UoMCwgdGVzdERhdGEubGVuZ3RoICsgc2Vla0JhY2t3
YXJkT2Zmc2V0KSwgc2V0dXBTZWVrRm9yd2FyZCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RTZWVrQmFj
a3dhcmQoKSB7CisgICAgd3JpdGVTdHJpbmcoZmlsZUVudHJ5LCBmaWxlV3JpdGVyLCBzZWVrQmFj
a3dhcmRPZmZzZXQsIHRlc3REYXRhLCB2YWxpZGF0ZVNlZWtCYWNrd2FyZCk7Cit9CisKKy8vIEVh
Y2ggdGVzdCBoYXMgMyBwaGFzZXM6IHNldHVwLCBleGVjdXRpb24sIGFuZCB2YWxpZGF0aW9uLiAg
SW4gdGhlIHNldHVwIHBoYXNlLCB3ZSBtYWtlIHN1cmUgdGhhdCB0aGVyZSdzIGEgRmlsZVdyaXRl
ciBwb2ludGluZyBhdCBhIGZpbGUgd2l0aCBhcHByb3ByaWF0ZQorLy8gZGF0YSBmb3IgdGhlIHRl
c3Qgd2Ugd2FudCB0byBydW4uICBJbiB0aGUgZXhlY3V0aW9uIHBoYXNlLCB3ZSBkbyBhIHNlZWsg
YW5kIGEgd3JpdGUsIGFuZCB0aGUgdXRpbGl0eSBmdW5jdGlvbiB0aGF0IGRvZXMgdGhvc2UgYWxz
byB2YWxpZGF0ZXMgdGhhdCB0aGUgZGF0YQorLy8gYWN0dWFsbHkgZ290IHdyaXR0ZW4uICBTbyBp
biB0aGUgdmFsaWRhdGlvbiBwaGFzZSwgd2Ugb25seSBoYXZlIHRvIGNoZWNrIHRoYXQgdGhlIHJl
c3Qgb2YgdGhlIGZpbGUgZGlkbid0IGdldCBjb3JydXB0ZWQgd2hpbGUgd2Ugd2VyZSB3cml0aW5n
IG91ciBiaXQuCitmdW5jdGlvbiBydW5UZXN0KGZpbGVFbnRyeUluLCBmaWxlV3JpdGVySW4pIHsK
KyAgICBmaWxlRW50cnkgPSBmaWxlRW50cnlJbjsKKyAgICBmaWxlV3JpdGVyID0gZmlsZVdyaXRl
ckluOworICAgIHNldEZpbGVDb250ZW50cyhmaWxlRW50cnksIGZpbGVXcml0ZXIsIHRlc3REYXRh
LCB0ZXN0U2Vla0JhY2t3YXJkKTsKK30KKwordmFyIGpzVGVzdElzQXN5bmMgPSB0cnVlOworc2V0
dXBBbmRSdW5UZXN0KDEwMjQsICdmaWxlLXdyaXRlci10cnVuY2F0ZS1leHRlbmQnLCBydW5UZXN0
KTsKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9maWxlc3lzdGVtL3dvcmtlcnMvZmlsZS13cml0ZXItZXZlbnRzLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vd29ya2Vycy9maWxlLXdyaXRl
ci1ldmVudHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9m
aWxlc3lzdGVtL3dvcmtlcnMvZmlsZS13cml0ZXItZXZlbnRzLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMSBAQAorW1dvcmtlcl0gVGVzdCB0aGF0IEZpbGVXcml0ZXIgcHJv
ZHVjZXMgcHJvcGVyIHByb2dyZXNzIGV2ZW50cy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgorCitTdGFydGluZyB3b3JrZXI6IC4uL3Jlc291cmNlcy9maWxlLXdyaXRlci1ldmVudHMuanMK
K1tXb3JrZXJdIHN0YXJ0aW5nIHRlc3QKK1BBU1MgW1dvcmtlcl0gU2F3IGFsbCB0aGUgcmlnaHQg
ZXZlbnRzLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS93b3JrZXJzL2ZpbGUtd3JpdGVy
LWV2ZW50cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS93
b3JrZXJzL2ZpbGUtd3JpdGVyLWV2ZW50cy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC9maWxlc3lzdGVtL3dvcmtlcnMvZmlsZS13cml0ZXItZXZlbnRzLmh0bWwJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMjEgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+CisgPGhlYWQ+
CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMt
dGVzdC1zdHlsZS5jc3MiPgorICAgIDx0aXRsZT5GaWxlIFdyaXRlciBFdmVudHMgV29ya2VyPC90
aXRsZT4KKyAgICA8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2ZzLXdvcmtlci10ZXN0
LXV0aWwuanMiPjwvc2NyaXB0PgorIDwvaGVhZD4KKyA8Ym9keT4KKyAgICA8ZGl2IGlkPSJkZXNj
cmlwdGlvbiI+PC9kaXY+CisgICAgPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisgICAgPHNjcmlw
dD4KKyAgICAgICAgc3RhcnRXb3JrZXIoIi4uL3Jlc291cmNlcy9maWxlLXdyaXRlci1ldmVudHMu
anMiKTsKKyAgICAgICAgd2luZG93LnN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisgICAgPC9z
Y3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qu
anMiPjwvc2NyaXB0PgorIDwvYm9keT4KKzwvaHRtbD4KKworCisKSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvZmlsZXN5c3RlbS93b3JrZXJzL2ZpbGUtd3JpdGVyLWdjLWJsb2ItZXhwZWN0ZWQuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vd29ya2Vycy9maWxl
LXdyaXRlci1nYy1ibG9iLWV4cGVjdGVkLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9mYXN0L2ZpbGVzeXN0ZW0vd29ya2Vycy9maWxlLXdyaXRlci1nYy1ibG9iLWV4cGVjdGVkLmh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKK1tXb3JrZXJdIFRlc3QgdGhhdCBhIGJs
b2Igd29uJ3QgZ2V0IGdhcmJhZ2UtY29sbGVjdGVkIHdoaWxlIGJlaW5nIHdyaXR0ZW4gb3V0IGJ5
IGEgRmlsZVdyaXRlci4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitTdGFydGluZyB3
b3JrZXI6IC4uL3Jlc291cmNlcy9maWxlLXdyaXRlci1nYy1ibG9iLmpzCitbV29ya2VyXSBzdGFy
dGluZyB0ZXN0CitQQVNTIFtXb3JrZXJdIFN1Y2Nlc3NmdWxseSB3cm90ZSBibG9iLgorUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS93b3JrZXJzL2ZpbGUtd3JpdGVyLWdjLWJsb2IuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vd29ya2Vycy9maWxlLXdy
aXRlci1nYy1ibG9iLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVz
eXN0ZW0vd29ya2Vycy9maWxlLXdyaXRlci1nYy1ibG9iLmh0bWwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMjEgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+CisgPGhlYWQ+CisgICAgPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5j
c3MiPgorICAgIDx0aXRsZT5GaWxlIFdyaXRlciBHQyBCbG9iIFdvcmtlcjwvdGl0bGU+CisgICAg
PHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
CisgICAgPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9mcy13b3JrZXItdGVzdC11dGlsLmpzIj48
L3NjcmlwdD4KKyA8L2hlYWQ+CisgPGJvZHk+CisgICAgPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwv
ZGl2PgorICAgIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorICAgIDxzY3JpcHQ+CisgICAgICAg
IHN0YXJ0V29ya2VyKCIuLi9yZXNvdXJjZXMvZmlsZS13cml0ZXItZ2MtYmxvYi5qcyIpOworICAg
ICAgICB3aW5kb3cuc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICA8L3NjcmlwdD4KKyAg
ICA8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3Jp
cHQ+CisgPC9ib2R5PgorPC9odG1sPgorCisKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9maWxl
c3lzdGVtL3dvcmtlcnMvZmlsZS13cml0ZXItd3JpdGUtb3ZlcmxhcHBlZC1leHBlY3RlZC5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS93b3JrZXJzL2ZpbGUt
d3JpdGVyLXdyaXRlLW92ZXJsYXBwZWQtZXhwZWN0ZWQuaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS93b3JrZXJzL2ZpbGUtd3JpdGVyLXdyaXRlLW92ZXJs
YXBwZWQtZXhwZWN0ZWQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNCBAQAorW1dvcmtl
cl0gVGVzdCB1c2luZyBGaWxlV3JpdGVyLnNlZWsgdG8gd3JpdGUgb3ZlcmxhcHBpbmcgZXhpc3Rp
bmcgZGF0YSBpbiBhIGZpbGUuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBv
ZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworU3RhcnRp
bmcgd29ya2VyOiAuLi9yZXNvdXJjZXMvZmlsZS13cml0ZXItd3JpdGUtb3ZlcmxhcHBlZC5qcwor
W1dvcmtlcl0gc3RhcnRpbmcgdGVzdAorUEFTUyBbV29ya2VyXSBOZWdhdGl2ZSBzZWVrIHZhbGlk
YXRlZC4KK1BBU1MgW1dvcmtlcl0gUG9zaXRpdmUgc2VlayB2YWxpZGF0ZWQuCitQQVNTIFtXb3Jr
ZXJdIE5vbmV4dGVuZGluZyB3cml0ZSB2YWxpZGF0ZWQuCitQQVNTIFtXb3JrZXJdIEFsbCB3cml0
ZXMgdmVyaWZpZWQuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3dvcmtlcnMvZmlsZS13
cml0ZXItd3JpdGUtb3ZlcmxhcHBlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvZmlsZXN5c3RlbS93b3JrZXJzL2ZpbGUtd3JpdGVyLXdyaXRlLW92ZXJsYXBwZWQuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS93b3JrZXJzL2ZpbGUt
d3JpdGVyLXdyaXRlLW92ZXJsYXBwZWQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMSBA
QAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKyA8aGVhZD4KKyAgICA8bGluayByZWw9InN0eWxl
c2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+CisgICAg
PHRpdGxlPkZpbGUgV3JpdGVyIFdyaXRlIE92ZXJsYXBwZWQgV29ya2VyPC90aXRsZT4KKyAgICA8
c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KyAgICA8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2ZzLXdvcmtlci10ZXN0LXV0aWwuanMiPjwv
c2NyaXB0PgorIDwvaGVhZD4KKyA8Ym9keT4KKyAgICA8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9k
aXY+CisgICAgPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisgICAgPHNjcmlwdD4KKyAgICAgICAg
c3RhcnRXb3JrZXIoIi4uL3Jlc291cmNlcy9maWxlLXdyaXRlci13cml0ZS1vdmVybGFwcGVkLmpz
Iik7CisgICAgICAgIHdpbmRvdy5zdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworICAgIDwvc2Ny
aXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0Lmpz
Ij48L3NjcmlwdD4KKyA8L2JvZHk+Cis8L2h0bWw+CisKKworCg==
</data>
<flag name="review"
          id="67188"
          type_id="1"
          status="+"
          setter="levin"
    />
    <flag name="commit-queue"
          id="67189"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82511</attachid>
            <date>2011-02-15 13:00:22 -0800</date>
            <delta_ts>2011-02-15 15:07:10 -0800</delta_ts>
            <desc>Second try--same patch, but removed one potential conflict that had already been checked in.</desc>
            <filename>filewritertests.patch</filename>
            <type>text/plain</type>
            <size>27277</size>
            <attacher name="Eric U.">ericu</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDc4NTE1KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTAtMi0xNCAgRXJpYyBVaHJoYW5lICA8ZXJp
Y3VAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExldmluLgorCisg
ICAgICAgIEFkZCB0ZXN0cyBmb3IgRmlsZVdyaXRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQzNjMKKworICAgICAgICBGaXggc21hbGwgYnVncyBp
biB0aGUgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIGFkZCBzZXRGaWxlQ29udGVudHMoKS4KKyAgICAg
ICAgKiBmYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLXV0aWxzLmpzOgorCisg
ICAgICAgIFBvcnQgdGhlIEdDIEJsb2IgdGVzdCBvdmVyIHRvIHRoZSBuZXcgRmlsZVdyaXRlciB1
dGlsaXRpZXMuCisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL2ZpbGUtd3JpdGVyLWdjLWJsb2It
ZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1nYy1i
bG9iLmh0bWw6CisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRl
ci1nYy1ibG9iLmpzOiBDb3BpZWQgZnJvbSBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmls
ZS13cml0ZXItZ2MtYmxvYi5odG1sLgorCisgICAgICAgIEFkZCB0ZXN0cyBmb3IgcHJvZ3Jlc3Mg
ZXZlbnRzIGFuZCBvdmVybGFwcGluZyB3cml0ZXMgW3ZpYSBzZWVrXS4KKyAgICAgICAgKiBmYXN0
L2ZpbGVzeXN0ZW0vZmlsZS13cml0ZXItZXZlbnRzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9maWxlc3lzdGVtL2ZpbGUtd3JpdGVyLWV2ZW50cy5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWV2ZW50cy5qczog
QWRkZWQuCisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL2ZpbGUtd3JpdGVyLXdyaXRlLW92ZXJs
YXBwZWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vZmls
ZS13cml0ZXItd3JpdGUtb3ZlcmxhcHBlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zp
bGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLXdyaXRlLW92ZXJsYXBwZWQuanM6IEFkZGVk
LgorCisgICAgICAgIFdvcmtlciB2ZXJzaW9ucyBvZiB0aGUgYWJvdmUgdGVzdHMuCisgICAgICAg
ICogZmFzdC9maWxlc3lzdGVtL3dvcmtlcnMvZmlsZS13cml0ZXItZXZlbnRzLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL3dvcmtlcnMvZmlsZS13cml0ZXIt
ZXZlbnRzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZmlsZXN5c3RlbS93b3JrZXJzL2Zp
bGUtd3JpdGVyLWdjLWJsb2ItZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9m
aWxlc3lzdGVtL3dvcmtlcnMvZmlsZS13cml0ZXItZ2MtYmxvYi5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2ZpbGVzeXN0ZW0vd29ya2Vycy9maWxlLXdyaXRlci13cml0ZS1vdmVybGFwcGVk
LWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZmlsZXN5c3RlbS93b3JrZXJz
L2ZpbGUtd3JpdGVyLXdyaXRlLW92ZXJsYXBwZWQuaHRtbDogQWRkZWQuCisKIDIwMTEtMDItMTQg
IExldmkgV2VpbnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IEFsZXhleSBQcm9za3VyeWFrb3YuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0
ZW0vZmlsZS13cml0ZXItZXZlbnRzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS13cml0ZXItZXZlbnRzLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1ldmVu
dHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitUZXN0IHRoYXQg
RmlsZVdyaXRlciBwcm9kdWNlcyBwcm9wZXIgcHJvZ3Jlc3MgZXZlbnRzLgorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKK3N0YXJ0aW5nIHRlc3QKK1BBU1MgU2F3IGFsbCB0aGUgcmlnaHQg
ZXZlbnRzLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1ldmVudHMu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS13cml0
ZXItZXZlbnRzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0
ZW0vZmlsZS13cml0ZXItZXZlbnRzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTYgQEAK
KzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+CisgPGhlYWQ+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorICAgIDx0aXRs
ZT5GaWxlIFdyaXRlciBFdmVudHM8L3RpdGxlPgorICAgIDxzY3JpcHQgc3JjPSIuLi9qcy9yZXNv
dXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJj
ZXMvZmlsZS13cml0ZXItdXRpbHMuanMiPjwvc2NyaXB0PgorIDwvaGVhZD4KKyA8Ym9keT4KKyAg
ICA8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+CisgICAgPGRpdiBpZD0iY29uc29sZSI+PC9k
aXY+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9maWxlLXdyaXRlci1ldmVudHMuanMiPjwv
c2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0Lmpz
Ij48L3NjcmlwdD4KKyA8L2JvZHk+Cis8L2h0bWw+CisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
ZmlsZXN5c3RlbS9maWxlLXdyaXRlci1nYy1ibG9iLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS13cml0ZXItZ2MtYmxvYi1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDc4NTE1KQorKysgTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2Zp
bGUtd3JpdGVyLWdjLWJsb2ItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
MTAgQEAKK1Rlc3QgdGhhdCBhIGJsb2Igd29uJ3QgZ2V0IGdhcmJhZ2UtY29sbGVjdGVkIHdoaWxl
IGJlaW5nIHdyaXR0ZW4gb3V0IGJ5IGEgRmlsZVdyaXRlci4KKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCiBzdGFydGluZyB0ZXN0CiBQQVNTIFN1Y2Nlc3NmdWxseSB3cm90ZSBibG9iLgog
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCisKSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1nYy1ibG9iLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZpbGUtd3JpdGVyLWdjLWJs
b2IuaHRtbAkocmV2aXNpb24gNzg1MTUpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0v
ZmlsZS13cml0ZXItZ2MtYmxvYi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwMiArMSwxNSBA
QAogPCFET0NUWVBFIEhUTUw+CiA8aHRtbD4KLTxoZWFkPgotPHRpdGxlPkZpbGUgV3JpdGVyIHRl
c3Q8L3RpdGxlPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMv
anMtdGVzdC1zdHlsZS5jc3MiPgotPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0PgotICAgIHZhciBmaWxlRW50cnk7Ci0KLSAgICBm
dW5jdGlvbiBjbGVhblVwKCkgewotICAgICAgdmFyIG5lZWRUb0NhbGxGaW5pc2ggPSB0cnVlOwot
ICAgICAgdHJ5IHsKLSAgICAgICAgaWYgKGZpbGVFbnRyeSkgewotICAgICAgICAgIGZpbGVFbnRy
eS5yZW1vdmUoZmluaXNoSlNUZXN0LCBmaW5pc2hKU1Rlc3QpOwotICAgICAgICAgIG5lZWRUb0Nh
bGxGaW5pc2ggPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAgfSBjYXRjaCAoZXgpIHsKLSAgICAg
IH0KLSAgICAgIGlmIChuZWVkVG9DYWxsRmluaXNoKSB7Ci0gICAgICAgIGZpbmlzaEpTVGVzdCgp
OwotICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0aW9uIHN0cmluZ2lmeU9iaihvKSB7Ci0gICAg
ICAgIHMgPSAiIjsKLSAgICAgICAgaWYgKG8pCi0gICAgICAgICAgICBmb3IgKGluZGV4IGluIG8p
IHsKLSAgICAgICAgICAgICAgICBzICs9IGluZGV4ICsgIjogIiArIG9baW5kZXhdICsgIlxuIjsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHM7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24g
b25FcnJvcihlKSB7Ci0gICAgICAgIGRlYnVnKCJDYXVnaHQgYW4gZXJyb3IuIik7Ci0gICAgICAg
IGlmIChlICYmIGUuY29kZSkgeyAgLy8gRWFjaCBGaWxlRXJyb3IgaGFzIGEgY29kZS4KLSAgICAg
ICAgICBkZWJ1ZygiRXJyb3IgY29kZTogIiArIGUuY29kZSk7Ci0gICAgICAgIH0KLSAgICAgICAg
dGVzdEZhaWxlZChzdHJpbmdpZnlPYmooZSkpOwotICAgICAgICBjbGVhblVwKCk7Ci0gICAgfQot
Ci0gICAgZnVuY3Rpb24gb25TdWNjZXNzKCkgewotICAgICAgICB0ZXN0UGFzc2VkKCJTdWNjZXNz
ZnVsbHkgd3JvdGUgYmxvYi4iKTsKLSAgICAgICAgY2xlYW5VcCgpOwotICAgIH0KLQotICAgIGZ1
bmN0aW9uIHRlblhCbG9iKGJsb2IpIHsKLSAgICAgICAgdmFyIGJiID0gbmV3IEJsb2JCdWlsZGVy
KCk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTA7ICsraSkgewotICAgICAgICAgICAg
YmIuYXBwZW5kKGJsb2IpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBiYi5nZXRCbG9iKCk7
Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc3RhcnRXcml0ZSh3cml0ZXIpIHsKLSAgICAgICAgLy8g
TGV0J3MgbWFrZSBpdCBhYm91dCBhIG1lZ2FieXRlLgotICAgICAgICB2YXIgYmIgPSBuZXcgQmxv
YkJ1aWxkZXIoKTsKLSAgICAgICAgYmIuYXBwZW5kKCJsb3JlbSBpcHN1bSIpOwotICAgICAgICB2
YXIgYmxvYiA9IHRlblhCbG9iKGJiLmdldEJsb2IoKSk7Ci0gICAgICAgIGJsb2IgPSB0ZW5YQmxv
YihiYi5nZXRCbG9iKCkpOwotICAgICAgICBibG9iID0gdGVuWEJsb2IoYmIuZ2V0QmxvYigpKTsK
LSAgICAgICAgYmxvYiA9IHRlblhCbG9iKGJiLmdldEJsb2IoKSk7Ci0gICAgICAgIGJsb2IgPSB0
ZW5YQmxvYihiYi5nZXRCbG9iKCkpOwotICAgICAgICB3cml0ZXIub25lcnJvciA9IG9uRXJyb3I7
Ci0gICAgICAgIHdyaXRlci5vbndyaXRlZW5kID0gb25TdWNjZXNzOwotICAgICAgICB3cml0ZXIu
d3JpdGUoYmxvYik7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gdXNlRmlsZVdyaXRlcih3cml0ZXIp
IHsKLSAgICAgICAgc3RhcnRXcml0ZSh3cml0ZXIpOwotICAgICAgICBnYygpOwotICAgIH0KLQot
ICAgIGZ1bmN0aW9uIGZpbGVDYWxsYmFjayhmKSB7Ci0gICAgICAgIGZpbGVFbnRyeSA9IGY7Ci0g
ICAgICAgIGZpbGVFbnRyeS5jcmVhdGVXcml0ZXIodXNlRmlsZVdyaXRlciwgb25FcnJvcik7Ci0g
ICAgfQotCi0gICAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKLSAgICAgICAgZGVidWcoInN0YXJ0aW5n
IHRlc3QiKTsKLSAgICAgICAgaWYgKHdpbmRvdy5yZXF1ZXN0RmlsZVN5c3RlbSkgewotICAgICAg
ICAgICAgcmVxdWVzdEZpbGVTeXN0ZW0oMCwgMTAyNCoxMDI0LAotICAgICAgICAgICAgICAgIGZ1
bmN0aW9uKGZzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZzLnJvb3QuZ2V0RmlsZSgidGVzdC50
eHQiLCB7Y3JlYXRlOnRydWV9LCBmaWxlQ2FsbGJhY2ssCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvbkVycm9yKTsKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAg
ICAgIG9uRXJyb3IpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGVidWcoIlRoaXMg
dGVzdCByZXF1aXJlcyBGaWxlU3lzdGVtIEFQSSBzdXBwb3J0LiIpOwotICAgICAgICB9Ci0gICAg
fQotICAgIHdpbmRvdy5zdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwotICAgIHdpbmRvdy5qc1Rl
c3RJc0FzeW5jID0gdHJ1ZTsKLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgb25sb2FkPSJydW5U
ZXN0KCkiPgorIDxoZWFkPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMv
cmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKyAgICA8dGl0bGU+RmlsZSBXcml0ZXIgR0Mg
QmxvYjwvdGl0bGU+CisgICAgPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9maWxlLXdyaXRlci11
dGlscy5qcyI+PC9zY3JpcHQ+CisgPC9oZWFkPgorIDxib2R5PgogICAgIDxkaXYgaWQ9ImRlc2Ny
aXB0aW9uIj48L2Rpdj4KICAgICA8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKyAgICA8c2NyaXB0
IHNyYz0icmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWdjLWJsb2IuanMiPjwvc2NyaXB0PgogICAgIDxz
Y3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KLTwv
Ym9keT4KKyA8L2JvZHk+CiA8L2h0bWw+Ci0KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZmlsZXN5
c3RlbS9maWxlLXdyaXRlci13cml0ZS1vdmVybGFwcGVkLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS13cml0ZXItd3JpdGUtb3Zlcmxh
cHBlZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVz
eXN0ZW0vZmlsZS13cml0ZXItd3JpdGUtb3ZlcmxhcHBlZC1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTMgQEAKK1Rlc3QgdXNpbmcgRmlsZVdyaXRlci5zZWVrIHRvIHdyaXRl
IG92ZXJsYXBwaW5nIGV4aXN0aW5nIGRhdGEgaW4gYSBmaWxlLgorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKK3N0YXJ0aW5nIHRlc3QKK1BBU1MgTmVnYXRpdmUgc2VlayB2YWxpZGF0ZWQu
CitQQVNTIFBvc2l0aXZlIHNlZWsgdmFsaWRhdGVkLgorUEFTUyBOb25leHRlbmRpbmcgd3JpdGUg
dmFsaWRhdGVkLgorUEFTUyBBbGwgd3JpdGVzIHZlcmlmaWVkLgorUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
ZmlsZXN5c3RlbS9maWxlLXdyaXRlci13cml0ZS1vdmVybGFwcGVkLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZpbGUtd3JpdGVyLXdyaXRlLW92ZXJsYXBw
ZWQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxl
LXdyaXRlci13cml0ZS1vdmVybGFwcGVkLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUg
QEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+CisgPGhlYWQ+CisgICAgPGxpbmsgcmVsPSJzdHls
ZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorICAgIDx0
aXRsZT5GaWxlIFdyaXRlciBXcml0ZSBPdmVybGFwcGVkPC90aXRsZT4KKyAgICA8c2NyaXB0IHNy
Yz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0
IHNyYz0icmVzb3VyY2VzL2ZpbGUtd3JpdGVyLXV0aWxzLmpzIj48L3NjcmlwdD4KKyA8L2hlYWQ+
CisgPGJvZHk+CisgICAgPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorICAgIDxkaXYgaWQ9
ImNvbnNvbGUiPjwvZGl2PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZmlsZS13cml0ZXIt
d3JpdGUtb3ZlcmxhcHBlZC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uL2pzL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorIDwvYm9keT4KKzwvaHRtbD4KSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItZXZl
bnRzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJj
ZXMvZmlsZS13cml0ZXItZXZlbnRzLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1ldmVudHMuanMJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTAyIEBACitpZiAodGhpcy5pbXBvcnRTY3JpcHRzKSB7CisgICAgaW1wb3J0
U2NyaXB0cygnZnMtd29ya2VyLWNvbW1vbi5qcycpOworICAgIGltcG9ydFNjcmlwdHMoJ2ZpbGUt
d3JpdGVyLXV0aWxzLmpzJyk7Cit9CisKK2Rlc2NyaXB0aW9uKCJUZXN0IHRoYXQgRmlsZVdyaXRl
ciBwcm9kdWNlcyBwcm9wZXIgcHJvZ3Jlc3MgZXZlbnRzLiIpOworCit2YXIgZmlsZUVudHJ5Owor
dmFyIHNhd1dyaXRlU3RhcnQ7Cit2YXIgc2F3V3JpdGU7Cit2YXIgc2F3V3JpdGVFbmQ7Cit2YXIg
c2F3UHJvZ3Jlc3M7Cit2YXIgd3JpdGVyOwordmFyIGxhc3RQcm9ncmVzcyA9IDA7Cit2YXIgdG9C
ZVdyaXR0ZW47CisKK2Z1bmN0aW9uIHRlblhCbG9iKGJsb2IpIHsKKyAgICB2YXIgYmIgPSBuZXcg
QmxvYkJ1aWxkZXIoKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwOyArK2kpIHsKKyAgICAg
ICAgYmIuYXBwZW5kKGJsb2IpOworICAgIH0KKyAgICByZXR1cm4gYmIuZ2V0QmxvYigpOworfQor
CitmdW5jdGlvbiBvbldyaXRlU3RhcnQoZSkgeworICAgIGFzc2VydCh3cml0ZXIpOworICAgIGFz
c2VydCh3cml0ZXIucmVhZHlTdGF0ZSA9PSB3cml0ZXIuV1JJVElORyk7CisgICAgYXNzZXJ0KGUu
dHlwZSA9PSAid3JpdGVzdGFydCIpOworICAgIGFzc2VydCghc2F3V3JpdGVTdGFydCk7CisgICAg
YXNzZXJ0KCFzYXdQcm9ncmVzcyk7CisgICAgYXNzZXJ0KCFzYXdXcml0ZSk7CisgICAgYXNzZXJ0
KCFzYXdXcml0ZUVuZCk7CisgICAgYXNzZXJ0KCFlLmxvYWRlZCk7CisgICAgYXNzZXJ0KGUudG90
YWwgPT0gdG9CZVdyaXR0ZW4pOworICAgIHNhd1dyaXRlU3RhcnQgPSB0cnVlOworfQorCitmdW5j
dGlvbiBvblByb2dyZXNzKGUpIHsKKyAgICBhc3NlcnQod3JpdGVyLnJlYWR5U3RhdGUgPT0gd3Jp
dGVyLldSSVRJTkcpOworICAgIGFzc2VydChzYXdXcml0ZVN0YXJ0KTsKKyAgICBhc3NlcnQoIXNh
d1dyaXRlKTsKKyAgICBhc3NlcnQoIXNhd1dyaXRlRW5kKTsKKyAgICBhc3NlcnQoZS50eXBlID09
ICJwcm9ncmVzcyIpOworICAgIGFzc2VydChlLmxvYWRlZCA8PSBlLnRvdGFsKTsKKyAgICBhc3Nl
cnQobGFzdFByb2dyZXNzIDwgZS5sb2FkZWQpOworICAgIGFzc2VydChlLnRvdGFsID09IHRvQmVX
cml0dGVuKTsKKyAgICBsYXN0UHJvZ3Jlc3MgPSBlLmxvYWRlZDsKKyAgICBzYXdQcm9ncmVzcyA9
IHRydWU7Cit9CisKK2Z1bmN0aW9uIG9uV3JpdGUoZSkgeworICAgIGFzc2VydCh3cml0ZXIucmVh
ZHlTdGF0ZSA9PSB3cml0ZXIuV1JJVElORyk7CisgICAgYXNzZXJ0KHNhd1dyaXRlU3RhcnQpOwor
ICAgIGFzc2VydChzYXdQcm9ncmVzcyk7CisgICAgYXNzZXJ0KGxhc3RQcm9ncmVzcyA9PSBlLnRv
dGFsKTsKKyAgICBhc3NlcnQoIXNhd1dyaXRlKTsKKyAgICBhc3NlcnQoIXNhd1dyaXRlRW5kKTsK
KyAgICBhc3NlcnQoZS50eXBlID09ICJ3cml0ZSIpOworICAgIGFzc2VydChlLmxvYWRlZCA9PSBl
LnRvdGFsKTsKKyAgICBhc3NlcnQoZS50b3RhbCA9PSB0b0JlV3JpdHRlbik7CisgICAgc2F3V3Jp
dGUgPSB0cnVlOworfQorCitmdW5jdGlvbiBvbldyaXRlRW5kKGUpIHsKKyAgICBhc3NlcnQod3Jp
dGVyLnJlYWR5U3RhdGUgPT0gd3JpdGVyLkRPTkUpOworICAgIGFzc2VydChzYXdXcml0ZVN0YXJ0
KTsKKyAgICBhc3NlcnQoc2F3UHJvZ3Jlc3MpOworICAgIGFzc2VydChzYXdXcml0ZSk7CisgICAg
YXNzZXJ0KCFzYXdXcml0ZUVuZCk7CisgICAgYXNzZXJ0KGUudHlwZSA9PSAid3JpdGVlbmQiKTsK
KyAgICBhc3NlcnQoZS5sb2FkZWQgPT0gZS50b3RhbCk7CisgICAgYXNzZXJ0KGUudG90YWwgPT0g
dG9CZVdyaXR0ZW4pOworICAgIHNhd1dyaXRlRW5kID0gdHJ1ZTsKKyAgICB0ZXN0UGFzc2VkKCJT
YXcgYWxsIHRoZSByaWdodCBldmVudHMuIik7CisgICAgY2xlYW5VcCgpOworfQorCitmdW5jdGlv
biBzdGFydFdyaXRlKGZpbGVXcml0ZXIpIHsKKyAgICAvLyBMZXQncyBtYWtlIGl0IGFib3V0IGEg
bWVnYWJ5dGUuCisgICAgdmFyIGJiID0gbmV3IEJsb2JCdWlsZGVyKCk7CisgICAgYmIuYXBwZW5k
KCJsb3JlbSBpcHN1bSIpOworICAgIHZhciBibG9iID0gdGVuWEJsb2IoYmIuZ2V0QmxvYigpKTsK
KyAgICBibG9iID0gdGVuWEJsb2IoYmxvYik7CisgICAgYmxvYiA9IHRlblhCbG9iKGJsb2IpOwor
ICAgIGJsb2IgPSB0ZW5YQmxvYihibG9iKTsKKyAgICBibG9iID0gdGVuWEJsb2IoYmxvYik7Cisg
ICAgdG9CZVdyaXR0ZW4gPSBibG9iLnNpemU7CisgICAgd3JpdGVyID0gZmlsZVdyaXRlcjsKKyAg
ICBmaWxlV3JpdGVyLm9uZXJyb3IgPSBvbkVycm9yOworICAgIGZpbGVXcml0ZXIub253cml0ZXN0
YXJ0ID0gb25Xcml0ZVN0YXJ0OworICAgIGZpbGVXcml0ZXIub25wcm9ncmVzcyA9IG9uUHJvZ3Jl
c3M7CisgICAgZmlsZVdyaXRlci5vbndyaXRlID0gb25Xcml0ZTsKKyAgICBmaWxlV3JpdGVyLm9u
d3JpdGVlbmQgPSBvbldyaXRlRW5kOworICAgIGZpbGVXcml0ZXIud3JpdGUoYmxvYik7Cit9CisK
K2Z1bmN0aW9uIHJ1blRlc3QodW51c2VkRmlsZUVudHJ5LCBmaWxlV3JpdGVyKSB7CisgICAgc3Rh
cnRXcml0ZShmaWxlV3JpdGVyKTsKK30KK3ZhciBqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK3NldHVw
QW5kUnVuVGVzdCgyKjEwMjQqMTAyNCwgJ2ZpbGUtd3JpdGVyLWdjLWJsb2InLCBydW5UZXN0KTsK
K3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpJbmRleDogZmFzdC9maWxlc3lzdGVtL3Jl
c291cmNlcy9maWxlLXdyaXRlci1nYy1ibG9iLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGZhc3QvZmlsZXN5
c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItZ2MtYmxvYi5qcwkocmV2aXNpb24gNzM0ODQpCShm
cm9tIGZhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1nYy1ibG9iLmh0bWw6NzM0ODQpCisrKyBm
YXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWdjLWJsb2IuanMJKHdvcmtpbmcg
Y29weSkKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13
cml0ZXItZ2MtYmxvYi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0
ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWdjLWJsb2IuanMJKHJldmlzaW9uIDczNDg0KQorKysg
TGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1nYy1ibG9i
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwMiArMSw1OSBAQAotPCFET0NUWVBFIEhUTUw+Ci08
aHRtbD4KLTxoZWFkPgotPHRpdGxlPkZpbGUgV3JpdGVyIHRlc3Q8L3RpdGxlPgotPGxpbmsgcmVs
PSJzdHlsZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgot
PHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Ci08
c2NyaXB0PgotICAgIHZhciBmaWxlRW50cnk7Ci0KLSAgICBmdW5jdGlvbiBjbGVhblVwKCkgewot
ICAgICAgdmFyIG5lZWRUb0NhbGxGaW5pc2ggPSB0cnVlOwotICAgICAgdHJ5IHsKLSAgICAgICAg
aWYgKGZpbGVFbnRyeSkgewotICAgICAgICAgIGZpbGVFbnRyeS5yZW1vdmUoZmluaXNoSlNUZXN0
LCBmaW5pc2hKU1Rlc3QpOwotICAgICAgICAgIG5lZWRUb0NhbGxGaW5pc2ggPSBmYWxzZTsKLSAg
ICAgICAgfQotICAgICAgfSBjYXRjaCAoZXgpIHsKLSAgICAgIH0KLSAgICAgIGlmIChuZWVkVG9D
YWxsRmluaXNoKSB7Ci0gICAgICAgIGZpbmlzaEpTVGVzdCgpOwotICAgICAgfQotICAgIH0KLQot
ICAgIGZ1bmN0aW9uIHN0cmluZ2lmeU9iaihvKSB7Ci0gICAgICAgIHMgPSAiIjsKLSAgICAgICAg
aWYgKG8pCi0gICAgICAgICAgICBmb3IgKGluZGV4IGluIG8pIHsKLSAgICAgICAgICAgICAgICBz
ICs9IGluZGV4ICsgIjogIiArIG9baW5kZXhdICsgIlxuIjsKK2lmICh0aGlzLmltcG9ydFNjcmlw
dHMpIHsKKyAgICBpbXBvcnRTY3JpcHRzKCdmcy13b3JrZXItY29tbW9uLmpzJyk7CisgICAgaW1w
b3J0U2NyaXB0cygnZmlsZS13cml0ZXItdXRpbHMuanMnKTsKKyAgICBmdW5jdGlvbiBnYygpIHsK
KyAgICAgICAgaWYgKHR5cGVvZiBHQ0NvbnRyb2xsZXIgIT09ICJ1bmRlZmluZWQiKQorICAgICAg
ICAgICAgR0NDb250cm9sbGVyLmNvbGxlY3QoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBmdW5jdGlvbiBnY1JlYyhuKSB7CisgICAgICAgICAgICAgICAgaWYgKG4gPCAxKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4ge307CisgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSB7aTog
ImFiIiArIGkgKyAoaSAvIDEwMDAwMCl9OworICAgICAgICAgICAgICAgIHRlbXAgKz0gImZvbyI7
CisgICAgICAgICAgICAgICAgZ2NSZWMobi0xKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIHM7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gb25FcnJvcihlKSB7Ci0gICAgICAgIGRlYnVn
KCJDYXVnaHQgYW4gZXJyb3IuIik7Ci0gICAgICAgIGlmIChlICYmIGUuY29kZSkgeyAgLy8gRWFj
aCBGaWxlRXJyb3IgaGFzIGEgY29kZS4KLSAgICAgICAgICBkZWJ1ZygiRXJyb3IgY29kZTogIiAr
IGUuY29kZSk7Ci0gICAgICAgIH0KLSAgICAgICAgdGVzdEZhaWxlZChzdHJpbmdpZnlPYmooZSkp
OwotICAgICAgICBjbGVhblVwKCk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gb25TdWNjZXNzKCkg
ewotICAgICAgICB0ZXN0UGFzc2VkKCJTdWNjZXNzZnVsbHkgd3JvdGUgYmxvYi4iKTsKLSAgICAg
ICAgY2xlYW5VcCgpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHRlblhCbG9iKGJsb2IpIHsKLSAg
ICAgICAgdmFyIGJiID0gbmV3IEJsb2JCdWlsZGVyKCk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgMTA7ICsraSkgewotICAgICAgICAgICAgYmIuYXBwZW5kKGJsb2IpOworICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwOyBpKyspCisgICAgICAgICAgICAgICAgZ2NSZWMo
MTApCiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGJiLmdldEJsb2IoKTsKLSAgICB9Ci0KLSAg
ICBmdW5jdGlvbiBzdGFydFdyaXRlKHdyaXRlcikgewotICAgICAgICAvLyBMZXQncyBtYWtlIGl0
IGFib3V0IGEgbWVnYWJ5dGUuCi0gICAgICAgIHZhciBiYiA9IG5ldyBCbG9iQnVpbGRlcigpOwot
ICAgICAgICBiYi5hcHBlbmQoImxvcmVtIGlwc3VtIik7Ci0gICAgICAgIHZhciBibG9iID0gdGVu
WEJsb2IoYmIuZ2V0QmxvYigpKTsKLSAgICAgICAgYmxvYiA9IHRlblhCbG9iKGJiLmdldEJsb2Io
KSk7Ci0gICAgICAgIGJsb2IgPSB0ZW5YQmxvYihiYi5nZXRCbG9iKCkpOwotICAgICAgICBibG9i
ID0gdGVuWEJsb2IoYmIuZ2V0QmxvYigpKTsKLSAgICAgICAgYmxvYiA9IHRlblhCbG9iKGJiLmdl
dEJsb2IoKSk7Ci0gICAgICAgIHdyaXRlci5vbmVycm9yID0gb25FcnJvcjsKLSAgICAgICAgd3Jp
dGVyLm9ud3JpdGVlbmQgPSBvblN1Y2Nlc3M7Ci0gICAgICAgIHdyaXRlci53cml0ZShibG9iKTsK
ICAgICB9CiAKLSAgICBmdW5jdGlvbiB1c2VGaWxlV3JpdGVyKHdyaXRlcikgewotICAgICAgICBz
dGFydFdyaXRlKHdyaXRlcik7Ci0gICAgICAgIGdjKCk7Ci0gICAgfQorfQogCi0gICAgZnVuY3Rp
b24gZmlsZUNhbGxiYWNrKGYpIHsKLSAgICAgICAgZmlsZUVudHJ5ID0gZjsKLSAgICAgICAgZmls
ZUVudHJ5LmNyZWF0ZVdyaXRlcih1c2VGaWxlV3JpdGVyLCBvbkVycm9yKTsKLSAgICB9CitkZXNj
cmlwdGlvbigiVGVzdCB0aGF0IGEgYmxvYiB3b24ndCBnZXQgZ2FyYmFnZS1jb2xsZWN0ZWQgd2hp
bGUgYmVpbmcgd3JpdHRlbiBvdXQgYnkgYSBGaWxlV3JpdGVyLiIpOwogCi0gICAgZnVuY3Rpb24g
cnVuVGVzdCgpIHsKLSAgICAgICAgZGVidWcoInN0YXJ0aW5nIHRlc3QiKTsKLSAgICAgICAgaWYg
KHdpbmRvdy5yZXF1ZXN0RmlsZVN5c3RlbSkgewotICAgICAgICAgICAgcmVxdWVzdEZpbGVTeXN0
ZW0oMCwgMTAyNCoxMDI0LAotICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGZzKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGZzLnJvb3QuZ2V0RmlsZSgidGVzdC50eHQiLCB7Y3JlYXRlOnRydWV9LCBm
aWxlQ2FsbGJhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkVycm9y
KTsKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIG9uRXJyb3IpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgZGVidWcoIlRoaXMgdGVzdCByZXF1aXJlcyBGaWxlU3lz
dGVtIEFQSSBzdXBwb3J0LiIpOwotICAgICAgICB9Ci0gICAgfQotICAgIHdpbmRvdy5zdWNjZXNz
ZnVsbHlQYXJzZWQgPSB0cnVlOwotICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKLTwv
c2NyaXB0PgotPC9oZWFkPgotPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgotICAgIDxkaXYgaWQ9
ImRlc2NyaXB0aW9uIj48L2Rpdj4KLSAgICA8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KLSAgICA8
c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Ci08
L2JvZHk+Ci08L2h0bWw+Cit2YXIgZmlsZUVudHJ5OwogCitmdW5jdGlvbiBvblRlc3RTdWNjZXNz
KCkgeworICAgIHRlc3RQYXNzZWQoIlN1Y2Nlc3NmdWxseSB3cm90ZSBibG9iLiIpOworICAgIGNs
ZWFuVXAoKTsKK30KKworZnVuY3Rpb24gdGVuWEJsb2IoYmxvYikgeworICAgIHZhciBiYiA9IG5l
dyBCbG9iQnVpbGRlcigpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTA7ICsraSkgeworICAg
ICAgICBiYi5hcHBlbmQoYmxvYik7CisgICAgfQorICAgIHJldHVybiBiYi5nZXRCbG9iKCk7Cit9
CisKK2Z1bmN0aW9uIHN0YXJ0V3JpdGUod3JpdGVyKSB7CisgICAgLy8gTGV0J3MgbWFrZSBpdCBh
Ym91dCBhIG1lZ2FieXRlLgorICAgIHZhciBiYiA9IG5ldyBCbG9iQnVpbGRlcigpOworICAgIGJi
LmFwcGVuZCgibG9yZW0gaXBzdW0iKTsKKyAgICB2YXIgYmxvYiA9IHRlblhCbG9iKGJiLmdldEJs
b2IoKSk7CisgICAgYmxvYiA9IHRlblhCbG9iKGJsb2IpOworICAgIGJsb2IgPSB0ZW5YQmxvYihi
bG9iKTsKKyAgICBibG9iID0gdGVuWEJsb2IoYmxvYik7CisgICAgYmxvYiA9IHRlblhCbG9iKGJs
b2IpOworICAgIHdyaXRlci5vbmVycm9yID0gb25FcnJvcjsKKyAgICB3cml0ZXIub253cml0ZWVu
ZCA9IG9uVGVzdFN1Y2Nlc3M7CisgICAgd3JpdGVyLndyaXRlKGJsb2IpOworfQorCitmdW5jdGlv
biBydW5UZXN0KHVudXNlZEZpbGVFbnRyeSwgZmlsZVdyaXRlcikgeworICAgIHN0YXJ0V3JpdGUo
ZmlsZVdyaXRlcik7CisgICAgZ2MoKTsKK30KK3ZhciBqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK3Nl
dHVwQW5kUnVuVGVzdCgyKjEwMjQqMTAyNCwgJ2ZpbGUtd3JpdGVyLWdjLWJsb2InLCBydW5UZXN0
KTsKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci11dGlscy5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLXV0aWxz
LmpzCShyZXZpc2lvbiA3ODUxNSkKKysrIExheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNv
dXJjZXMvZmlsZS13cml0ZXItdXRpbHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTEwMywxNiArMTAz
LDIxIEBAIGZ1bmN0aW9uIHZlcmlmeUJ5dGVSYW5nZUFzU3RyaW5nKGZpbGVFbnQKIC8vIENyZWF0
ZXMgYSBmaWxlIGNhbGxlZCBmaWxlTmFtZSBpbiBmaWxlU3lzdGVtJ3Mgcm9vdCBkaXJlY3Rvcnks
IHRydW5jYXRlcyBpdCB0byB6ZXJvIGxlbmd0aCBqdXN0IGluIGNhc2UsIGFuZCBjYWxscyBvblN1
Y2Nlc3MsIHBhc3NpbmcgaXQgYSBGaWxlRW50cnkgYW5kIEZpbGVXcml0ZXIgZm9yIHRoZSBuZXcg
ZmlsZS4KIGZ1bmN0aW9uIGNyZWF0ZUVtcHR5RmlsZShmaWxlU3lzdGVtLCBmaWxlTmFtZSwgb25T
dWNjZXNzKQogewotICAgIGZ1bmN0aW9uIGdldFN1Y2Nlc3NGdW5jKGZpbGVFbnRyeSwgZmlsZVdy
aXRlcikgeworICAgIGZ1bmN0aW9uIGdldFN1Y2Nlc3NGdW5jKGZpbGVFbnRyeSkgeworICAgICAg
ICAvLyBDcmVhdGUgYSBmcmVzaCBGaWxlV3JpdGVyIGhlcmUsIHJhdGhlciB0aGFuIHBhc3MgaW4g
dGhlIHVzZWQgb25lLgorICAgICAgICAvLyBUaGlzIHdheSB3ZSBkb24ndCBhY2NpZGVudGFsbHkg
bGVhdmUgb3VyIGV2ZW50IGhhbmRsZXJzIGF0dGFjaGVkLgogICAgICAgICByZXR1cm4gZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICBvblN1Y2Nlc3MoZmlsZUVudHJ5LCBmaWxlV3JpdGVyKTsKKyAg
ICAgICAgICAgIGZpbGVFbnRyeS5jcmVhdGVXcml0ZXIoZnVuY3Rpb24oZncpIHsKKyAgICAgICAg
ICAgICAgICBvblN1Y2Nlc3MoZmlsZUVudHJ5LCBmdyk7CisgICAgICAgICAgICB9LCBvbkVycm9y
KTsKICAgICAgICAgfQogICAgIH0KICAgICBmdW5jdGlvbiBnZXRGaWxlV3JpdGVyQ2FsbGJhY2so
ZmlsZUVudHJ5KSB7CiAgICAgICAgIHJldHVybiBmdW5jdGlvbihmaWxlV3JpdGVyKSB7Ci0gICAg
ICAgICAgICB2YXIgc3VjY2Vzc0Z1bmMgPSBnZXRTdWNjZXNzRnVuYyhmaWxlRW50cnksIGZpbGVX
cml0ZXIpOworICAgICAgICAgICAgdmFyIHN1Y2Nlc3NGdW5jID0gZ2V0U3VjY2Vzc0Z1bmMoZmls
ZUVudHJ5KTsKICAgICAgICAgICAgIGZpbGVXcml0ZXIub25FcnJvciA9IG9uRXJyb3I7Ci0gICAg
ICAgICAgICBmaWxlV3JpdGVyLm9ud3JpdGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCBiZSBvbndyaXRlLCBidXQgdGhlIHNwZWMgYW5kIGNvZGUgbmVl
ZCB0byBiZSBjaGFuZ2VkIHRvIGFsbG93IHRoYXQuICBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTUwODQ2LgorICAgICAgICAgICAgZmlsZVdyaXRlci5vbndyaXRl
ZW5kID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgdmVyaWZ5RmlsZUxlbmd0aChmaWxl
RW50cnksIDAsIHN1Y2Nlc3NGdW5jKTsKICAgICAgICAgICAgIH07CiAgICAgICAgICAgICBmaWxl
V3JpdGVyLnRydW5jYXRlKDApOwpAQCAtMTM0LDExICsxMzksMjYgQEAgZnVuY3Rpb24gd3JpdGVT
dHJpbmcoZmlsZUVudHJ5LCBmaWxlV3JpdAogICAgIHZhciBibG9iID0gYmIuZ2V0QmxvYigpOwog
ICAgIGZpbGVXcml0ZXIuc2VlayhvZmZzZXQpOwogICAgIGZpbGVXcml0ZXIud3JpdGUoYmxvYik7
Ci0gICAgZmlsZVdyaXRlci5vbndyaXRlID0gZnVuY3Rpb24oKSB7CisgICAgZmlsZVdyaXRlci5v
bmVycm9yID0gb25FcnJvcjsKKyAgICBpZiAob2Zmc2V0IDwgMCkKKyAgICAgICAgb2Zmc2V0ICs9
IGZpbGVXcml0ZXIubGVuZ3RoOworICAgIGFzc2VydChvZmZzZXQgPj0gMCk7CisgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIGJlIG9ud3JpdGUsIGJ1dCB0aGUgc3BlYyBhbmQgY29kZSBuZWVkIHRv
IGJlIGNoYW5nZWQgdG8gYWxsb3cgdGhhdC4gIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTA4NDYuCisgICAgZmlsZVdyaXRlci5vbndyaXRlZW5kID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIGZpbGVXcml0ZXIub253cml0ZWVuZCA9IG51bGw7CiAgICAgICAgIHZl
cmlmeUJ5dGVSYW5nZUFzU3RyaW5nKGZpbGVFbnRyeSwgb2Zmc2V0LCBkYXRhLCBvblN1Y2Nlc3Mp
OwogICAgIH07CiB9CiAKK2Z1bmN0aW9uIHNldEZpbGVDb250ZW50cyhmaWxlRW50cnksIGZpbGVX
cml0ZXIsIGNvbnRlbnRzLCBvblN1Y2Nlc3MpIHsKKyAgICBmaWxlV3JpdGVyLm9uZXJyb3IgPSBv
bkVycm9yOworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBvbndyaXRlLCBidXQgdGhlIHNw
ZWMgYW5kIGNvZGUgbmVlZCB0byBiZSBjaGFuZ2VkIHRvIGFsbG93IHRoYXQuICBTZWUgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwODQ2LgorICAgIGZpbGVXcml0ZXIu
b253cml0ZWVuZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB3cml0ZVN0cmluZyhmaWxlRW50cnks
IGZpbGVXcml0ZXIsIDAsIGNvbnRlbnRzLCBvblN1Y2Nlc3MpOworICAgIH07CisgICAgZmlsZVdy
aXRlci50cnVuY2F0ZSgwKTsKK30KKwogZnVuY3Rpb24gc2V0dXBBbmRSdW5UZXN0KHNpemUsIHRl
c3ROYW1lLCB0ZXN0RnVuYykKIHsKICAgICBpZiAoIXJlcXVlc3RGaWxlU3lzdGVtKSB7CkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLXdyaXRl
LW92ZXJsYXBwZWQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVt
L3Jlc291cmNlcy9maWxlLXdyaXRlci13cml0ZS1vdmVybGFwcGVkLmpzCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci13cml0
ZS1vdmVybGFwcGVkLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDczIEBACitpZiAodGhpcy5p
bXBvcnRTY3JpcHRzKSB7CisgICAgaW1wb3J0U2NyaXB0cygnZnMtd29ya2VyLWNvbW1vbi5qcycp
OworICAgIGltcG9ydFNjcmlwdHMoJ2ZpbGUtd3JpdGVyLXV0aWxzLmpzJyk7Cit9CisKK2Rlc2Ny
aXB0aW9uKCJUZXN0IHVzaW5nIEZpbGVXcml0ZXIuc2VlayB0byB3cml0ZSBvdmVybGFwcGluZyBl
eGlzdGluZyBkYXRhIGluIGEgZmlsZS4iKTsKKwordmFyIGZpbGVFbnRyeTsKK3ZhciBmaWxlV3Jp
dGVyOwordmFyIHRlc3REYXRhID0gIkxvcmVtIGlwc3VtIjsKK3ZhciBzZWVrQmFja3dhcmRPZmZz
ZXQgPSAtNDsKK3ZhciBzZWVrRm9yd2FyZE9mZnNldCA9IDQ7CisKK2Z1bmN0aW9uIG9uVGVzdFN1
Y2NlZWRlZCgpCit7CisgICAgdGVzdFBhc3NlZCgiQWxsIHdyaXRlcyB2ZXJpZmllZC4iKTsKKyAg
ICBjbGVhblVwKCk7Cit9CisKK2Z1bmN0aW9uIHZhbGlkYXRlTm9uZXh0ZW5kaW5nV3JpdGVFbmQo
KSB7CisgICAgdmVyaWZ5Qnl0ZVJhbmdlQXNTdHJpbmcoZmlsZUVudHJ5LCB0ZXN0RGF0YS5sZW5n
dGggKyBzZWVrRm9yd2FyZE9mZnNldCwgdGVzdERhdGEuc2xpY2Uoc2Vla0ZvcndhcmRPZmZzZXQp
LCBvblRlc3RTdWNjZWVkZWQpOworfQorCitmdW5jdGlvbiB2YWxpZGF0ZU5vbmV4dGVuZGluZ1dy
aXRlU3RhcnQoKSB7CisgICAgdGVzdFBhc3NlZCgiTm9uZXh0ZW5kaW5nIHdyaXRlIHZhbGlkYXRl
ZC4iKTsKKyAgICBhc3NlcnQoZmlsZVdyaXRlci5sZW5ndGggPT0gdGVzdERhdGEubGVuZ3RoICog
Mik7CisgICAgdmVyaWZ5Qnl0ZVJhbmdlQXNTdHJpbmcoZmlsZUVudHJ5LCAwLCB0ZXN0RGF0YS5z
bGljZSgwLCBzZWVrRm9yd2FyZE9mZnNldCksIHZhbGlkYXRlTm9uZXh0ZW5kaW5nV3JpdGVFbmQp
OworfQorCitmdW5jdGlvbiB0ZXN0Tm9uZXh0ZW5kaW5nV3JpdGUoKSB7CisgICAgd3JpdGVTdHJp
bmcoZmlsZUVudHJ5LCBmaWxlV3JpdGVyLCBzZWVrRm9yd2FyZE9mZnNldCwgdGVzdERhdGEsIHZh
bGlkYXRlTm9uZXh0ZW5kaW5nV3JpdGVTdGFydCk7Cit9CisKK2Z1bmN0aW9uIHNldHVwTm9uZXh0
ZW5kaW5nV3JpdGUoKSB7CisgICAgdGVzdFBhc3NlZCgiUG9zaXRpdmUgc2VlayB2YWxpZGF0ZWQu
Iik7CisgICAgc2V0RmlsZUNvbnRlbnRzKGZpbGVFbnRyeSwgZmlsZVdyaXRlciwgdGVzdERhdGEg
KyB0ZXN0RGF0YSwgdGVzdE5vbmV4dGVuZGluZ1dyaXRlKTsKK30KKworZnVuY3Rpb24gdmFsaWRh
dGVTZWVrRm9yd2FyZCgpIHsKKyAgICBhc3NlcnQoZmlsZVdyaXRlci5sZW5ndGggPT0gdGVzdERh
dGEubGVuZ3RoICsgc2Vla0ZvcndhcmRPZmZzZXQpOworICAgIHZlcmlmeUJ5dGVSYW5nZUFzU3Ry
aW5nKGZpbGVFbnRyeSwgMCwgdGVzdERhdGEuc2xpY2UoMCwgc2Vla0ZvcndhcmRPZmZzZXQpLCBz
ZXR1cE5vbmV4dGVuZGluZ1dyaXRlKTsKK30KKworZnVuY3Rpb24gdGVzdFNlZWtGb3J3YXJkKCkg
eworICAgIHdyaXRlU3RyaW5nKGZpbGVFbnRyeSwgZmlsZVdyaXRlciwgc2Vla0ZvcndhcmRPZmZz
ZXQsIHRlc3REYXRhLCB2YWxpZGF0ZVNlZWtGb3J3YXJkKTsKK30KKworZnVuY3Rpb24gc2V0dXBT
ZWVrRm9yd2FyZCgpIHsKKyAgICB0ZXN0UGFzc2VkKCJOZWdhdGl2ZSBzZWVrIHZhbGlkYXRlZC4i
KTsKKyAgICBzZXRGaWxlQ29udGVudHMoZmlsZUVudHJ5LCBmaWxlV3JpdGVyLCB0ZXN0RGF0YSwg
dGVzdFNlZWtGb3J3YXJkKTsKK30KKworZnVuY3Rpb24gdmFsaWRhdGVTZWVrQmFja3dhcmQoKSB7
CisgICAgYXNzZXJ0KGZpbGVXcml0ZXIubGVuZ3RoID09IDIgKiB0ZXN0RGF0YS5sZW5ndGggKyBz
ZWVrQmFja3dhcmRPZmZzZXQpOworICAgIHZlcmlmeUJ5dGVSYW5nZUFzU3RyaW5nKGZpbGVFbnRy
eSwgMCwgdGVzdERhdGEuc2xpY2UoMCwgdGVzdERhdGEubGVuZ3RoICsgc2Vla0JhY2t3YXJkT2Zm
c2V0KSwgc2V0dXBTZWVrRm9yd2FyZCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RTZWVrQmFja3dhcmQo
KSB7CisgICAgd3JpdGVTdHJpbmcoZmlsZUVudHJ5LCBmaWxlV3JpdGVyLCBzZWVrQmFja3dhcmRP
ZmZzZXQsIHRlc3REYXRhLCB2YWxpZGF0ZVNlZWtCYWNrd2FyZCk7Cit9CisKKy8vIEVhY2ggdGVz
dCBoYXMgMyBwaGFzZXM6IHNldHVwLCBleGVjdXRpb24sIGFuZCB2YWxpZGF0aW9uLiAgSW4gdGhl
IHNldHVwIHBoYXNlLCB3ZSBtYWtlIHN1cmUgdGhhdCB0aGVyZSdzIGEgRmlsZVdyaXRlciBwb2lu
dGluZyBhdCBhIGZpbGUgd2l0aCBhcHByb3ByaWF0ZQorLy8gZGF0YSBmb3IgdGhlIHRlc3Qgd2Ug
d2FudCB0byBydW4uICBJbiB0aGUgZXhlY3V0aW9uIHBoYXNlLCB3ZSBkbyBhIHNlZWsgYW5kIGEg
d3JpdGUsIGFuZCB0aGUgdXRpbGl0eSBmdW5jdGlvbiB0aGF0IGRvZXMgdGhvc2UgYWxzbyB2YWxp
ZGF0ZXMgdGhhdCB0aGUgZGF0YQorLy8gYWN0dWFsbHkgZ290IHdyaXR0ZW4uICBTbyBpbiB0aGUg
dmFsaWRhdGlvbiBwaGFzZSwgd2Ugb25seSBoYXZlIHRvIGNoZWNrIHRoYXQgdGhlIHJlc3Qgb2Yg
dGhlIGZpbGUgZGlkbid0IGdldCBjb3JydXB0ZWQgd2hpbGUgd2Ugd2VyZSB3cml0aW5nIG91ciBi
aXQuCitmdW5jdGlvbiBydW5UZXN0KGZpbGVFbnRyeUluLCBmaWxlV3JpdGVySW4pIHsKKyAgICBm
aWxlRW50cnkgPSBmaWxlRW50cnlJbjsKKyAgICBmaWxlV3JpdGVyID0gZmlsZVdyaXRlckluOwor
ICAgIHNldEZpbGVDb250ZW50cyhmaWxlRW50cnksIGZpbGVXcml0ZXIsIHRlc3REYXRhLCB0ZXN0
U2Vla0JhY2t3YXJkKTsKK30KKwordmFyIGpzVGVzdElzQXN5bmMgPSB0cnVlOworc2V0dXBBbmRS
dW5UZXN0KDEwMjQsICdmaWxlLXdyaXRlci10cnVuY2F0ZS1leHRlbmQnLCBydW5UZXN0KTsKK3Zh
ciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9maWxl
c3lzdGVtL3dvcmtlcnMvZmlsZS13cml0ZXItZXZlbnRzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vd29ya2Vycy9maWxlLXdyaXRlci1ldmVu
dHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lz
dGVtL3dvcmtlcnMvZmlsZS13cml0ZXItZXZlbnRzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMSBAQAorW1dvcmtlcl0gVGVzdCB0aGF0IEZpbGVXcml0ZXIgcHJvZHVjZXMg
cHJvcGVyIHByb2dyZXNzIGV2ZW50cy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2Vy
aWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitT
dGFydGluZyB3b3JrZXI6IC4uL3Jlc291cmNlcy9maWxlLXdyaXRlci1ldmVudHMuanMKK1tXb3Jr
ZXJdIHN0YXJ0aW5nIHRlc3QKK1BBU1MgW1dvcmtlcl0gU2F3IGFsbCB0aGUgcmlnaHQgZXZlbnRz
LgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS93b3JrZXJzL2ZpbGUtd3JpdGVyLWV2ZW50
cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS93b3JrZXJz
L2ZpbGUtd3JpdGVyLWV2ZW50cy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC9maWxlc3lzdGVtL3dvcmtlcnMvZmlsZS13cml0ZXItZXZlbnRzLmh0bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMjEgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+CisgPGhlYWQ+CisgICAg
PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1z
dHlsZS5jc3MiPgorICAgIDx0aXRsZT5GaWxlIFdyaXRlciBFdmVudHMgV29ya2VyPC90aXRsZT4K
KyAgICA8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2ZzLXdvcmtlci10ZXN0LXV0aWwu
anMiPjwvc2NyaXB0PgorIDwvaGVhZD4KKyA8Ym9keT4KKyAgICA8ZGl2IGlkPSJkZXNjcmlwdGlv
biI+PC9kaXY+CisgICAgPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisgICAgPHNjcmlwdD4KKyAg
ICAgICAgc3RhcnRXb3JrZXIoIi4uL3Jlc291cmNlcy9maWxlLXdyaXRlci1ldmVudHMuanMiKTsK
KyAgICAgICAgd2luZG93LnN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisgICAgPC9zY3JpcHQ+
CisgICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwv
c2NyaXB0PgorIDwvYm9keT4KKzwvaHRtbD4KKworCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
ZmlsZXN5c3RlbS93b3JrZXJzL2ZpbGUtd3JpdGVyLWdjLWJsb2ItZXhwZWN0ZWQuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vd29ya2Vycy9maWxlLXdyaXRl
ci1nYy1ibG9iLWV4cGVjdGVkLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L2ZpbGVzeXN0ZW0vd29ya2Vycy9maWxlLXdyaXRlci1nYy1ibG9iLWV4cGVjdGVkLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKK1tXb3JrZXJdIFRlc3QgdGhhdCBhIGJsb2Igd29u
J3QgZ2V0IGdhcmJhZ2UtY29sbGVjdGVkIHdoaWxlIGJlaW5nIHdyaXR0ZW4gb3V0IGJ5IGEgRmls
ZVdyaXRlci4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitTdGFydGluZyB3b3JrZXI6
IC4uL3Jlc291cmNlcy9maWxlLXdyaXRlci1nYy1ibG9iLmpzCitbV29ya2VyXSBzdGFydGluZyB0
ZXN0CitQQVNTIFtXb3JrZXJdIFN1Y2Nlc3NmdWxseSB3cm90ZSBibG9iLgorUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvZmlsZXN5c3RlbS93b3JrZXJzL2ZpbGUtd3JpdGVyLWdjLWJsb2IuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vd29ya2Vycy9maWxlLXdyaXRlci1n
Yy1ibG9iLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0v
d29ya2Vycy9maWxlLXdyaXRlci1nYy1ibG9iLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MjEgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+CisgPGhlYWQ+CisgICAgPGxpbmsgcmVsPSJz
dHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgor
ICAgIDx0aXRsZT5GaWxlIFdyaXRlciBHQyBCbG9iIFdvcmtlcjwvdGl0bGU+CisgICAgPHNjcmlw
dCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisgICAg
PHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9mcy13b3JrZXItdGVzdC11dGlsLmpzIj48L3Njcmlw
dD4KKyA8L2hlYWQ+CisgPGJvZHk+CisgICAgPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2Pgor
ICAgIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorICAgIDxzY3JpcHQ+CisgICAgICAgIHN0YXJ0
V29ya2VyKCIuLi9yZXNvdXJjZXMvZmlsZS13cml0ZXItZ2MtYmxvYi5qcyIpOworICAgICAgICB3
aW5kb3cuc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICA8L3NjcmlwdD4KKyAgICA8c2Ny
aXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cisg
PC9ib2R5PgorPC9odG1sPgorCisKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVt
L3dvcmtlcnMvZmlsZS13cml0ZXItd3JpdGUtb3ZlcmxhcHBlZC1leHBlY3RlZC5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS93b3JrZXJzL2ZpbGUtd3JpdGVy
LXdyaXRlLW92ZXJsYXBwZWQtZXhwZWN0ZWQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2Zhc3QvZmlsZXN5c3RlbS93b3JrZXJzL2ZpbGUtd3JpdGVyLXdyaXRlLW92ZXJsYXBwZWQt
ZXhwZWN0ZWQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNCBAQAorW1dvcmtlcl0gVGVz
dCB1c2luZyBGaWxlV3JpdGVyLnNlZWsgdG8gd3JpdGUgb3ZlcmxhcHBpbmcgZXhpc3RpbmcgZGF0
YSBpbiBhIGZpbGUuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworU3RhcnRpbmcgd29y
a2VyOiAuLi9yZXNvdXJjZXMvZmlsZS13cml0ZXItd3JpdGUtb3ZlcmxhcHBlZC5qcworW1dvcmtl
cl0gc3RhcnRpbmcgdGVzdAorUEFTUyBbV29ya2VyXSBOZWdhdGl2ZSBzZWVrIHZhbGlkYXRlZC4K
K1BBU1MgW1dvcmtlcl0gUG9zaXRpdmUgc2VlayB2YWxpZGF0ZWQuCitQQVNTIFtXb3JrZXJdIE5v
bmV4dGVuZGluZyB3cml0ZSB2YWxpZGF0ZWQuCitQQVNTIFtXb3JrZXJdIEFsbCB3cml0ZXMgdmVy
aWZpZWQuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUK
KwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3dvcmtlcnMvZmlsZS13cml0ZXIt
d3JpdGUtb3ZlcmxhcHBlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZmls
ZXN5c3RlbS93b3JrZXJzL2ZpbGUtd3JpdGVyLXdyaXRlLW92ZXJsYXBwZWQuaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS93b3JrZXJzL2ZpbGUtd3JpdGVy
LXdyaXRlLW92ZXJsYXBwZWQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMSBAQAorPCFE
T0NUWVBFIEhUTUw+Cis8aHRtbD4KKyA8aGVhZD4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQi
IGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+CisgICAgPHRpdGxl
PkZpbGUgV3JpdGVyIFdyaXRlIE92ZXJsYXBwZWQgV29ya2VyPC90aXRsZT4KKyAgICA8c2NyaXB0
IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKyAgICA8
c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2ZzLXdvcmtlci10ZXN0LXV0aWwuanMiPjwvc2NyaXB0
PgorIDwvaGVhZD4KKyA8Ym9keT4KKyAgICA8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cisg
ICAgPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisgICAgPHNjcmlwdD4KKyAgICAgICAgc3RhcnRX
b3JrZXIoIi4uL3Jlc291cmNlcy9maWxlLXdyaXRlci13cml0ZS1vdmVybGFwcGVkLmpzIik7Cisg
ICAgICAgIHdpbmRvdy5zdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworICAgIDwvc2NyaXB0Pgor
ICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Nj
cmlwdD4KKyA8L2JvZHk+Cis8L2h0bWw+CisKKworCg==
</data>
<flag name="commit-queue"
          id="74183"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82531</attachid>
            <date>2011-02-15 15:07:10 -0800</date>
            <delta_ts>2011-02-15 15:25:55 -0800</delta_ts>
            <desc>Try #3--corrected malformed patch, caused by svn-create-patch not grokking cp+modify.</desc>
            <filename>filewritertests.patch</filename>
            <type>text/plain</type>
            <size>26961</size>
            <attacher name="Eric U.">ericu</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDc4NTE1KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTAtMi0xNCAgRXJpYyBVaHJoYW5lICA8ZXJp
Y3VAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExldmluLgorCisg
ICAgICAgIEFkZCB0ZXN0cyBmb3IgRmlsZVdyaXRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQzNjMKKworICAgICAgICBGaXggc21hbGwgYnVncyBp
biB0aGUgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIGFkZCBzZXRGaWxlQ29udGVudHMoKS4KKyAgICAg
ICAgKiBmYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLXV0aWxzLmpzOgorCisg
ICAgICAgIFBvcnQgdGhlIEdDIEJsb2IgdGVzdCBvdmVyIHRvIHRoZSBuZXcgRmlsZVdyaXRlciB1
dGlsaXRpZXMuCisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL2ZpbGUtd3JpdGVyLWdjLWJsb2It
ZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1nYy1i
bG9iLmh0bWw6CisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRl
ci1nYy1ibG9iLmpzOiBDb3BpZWQgZnJvbSBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmls
ZS13cml0ZXItZ2MtYmxvYi5odG1sLgorCisgICAgICAgIEFkZCB0ZXN0cyBmb3IgcHJvZ3Jlc3Mg
ZXZlbnRzIGFuZCBvdmVybGFwcGluZyB3cml0ZXMgW3ZpYSBzZWVrXS4KKyAgICAgICAgKiBmYXN0
L2ZpbGVzeXN0ZW0vZmlsZS13cml0ZXItZXZlbnRzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9maWxlc3lzdGVtL2ZpbGUtd3JpdGVyLWV2ZW50cy5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWV2ZW50cy5qczog
QWRkZWQuCisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL2ZpbGUtd3JpdGVyLXdyaXRlLW92ZXJs
YXBwZWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vZmls
ZS13cml0ZXItd3JpdGUtb3ZlcmxhcHBlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zp
bGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLXdyaXRlLW92ZXJsYXBwZWQuanM6IEFkZGVk
LgorCisgICAgICAgIFdvcmtlciB2ZXJzaW9ucyBvZiB0aGUgYWJvdmUgdGVzdHMuCisgICAgICAg
ICogZmFzdC9maWxlc3lzdGVtL3dvcmtlcnMvZmlsZS13cml0ZXItZXZlbnRzLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL3dvcmtlcnMvZmlsZS13cml0ZXIt
ZXZlbnRzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZmlsZXN5c3RlbS93b3JrZXJzL2Zp
bGUtd3JpdGVyLWdjLWJsb2ItZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9m
aWxlc3lzdGVtL3dvcmtlcnMvZmlsZS13cml0ZXItZ2MtYmxvYi5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2ZpbGVzeXN0ZW0vd29ya2Vycy9maWxlLXdyaXRlci13cml0ZS1vdmVybGFwcGVk
LWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZmlsZXN5c3RlbS93b3JrZXJz
L2ZpbGUtd3JpdGVyLXdyaXRlLW92ZXJsYXBwZWQuaHRtbDogQWRkZWQuCisKIDIwMTEtMDItMTQg
IExldmkgV2VpbnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IEFsZXhleSBQcm9za3VyeWFrb3YuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0
ZW0vZmlsZS13cml0ZXItZXZlbnRzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS13cml0ZXItZXZlbnRzLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1ldmVu
dHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitUZXN0IHRoYXQg
RmlsZVdyaXRlciBwcm9kdWNlcyBwcm9wZXIgcHJvZ3Jlc3MgZXZlbnRzLgorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKK3N0YXJ0aW5nIHRlc3QKK1BBU1MgU2F3IGFsbCB0aGUgcmlnaHQg
ZXZlbnRzLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1ldmVudHMu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS13cml0
ZXItZXZlbnRzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0
ZW0vZmlsZS13cml0ZXItZXZlbnRzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTYgQEAK
KzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+CisgPGhlYWQ+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorICAgIDx0aXRs
ZT5GaWxlIFdyaXRlciBFdmVudHM8L3RpdGxlPgorICAgIDxzY3JpcHQgc3JjPSIuLi9qcy9yZXNv
dXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJj
ZXMvZmlsZS13cml0ZXItdXRpbHMuanMiPjwvc2NyaXB0PgorIDwvaGVhZD4KKyA8Ym9keT4KKyAg
ICA8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+CisgICAgPGRpdiBpZD0iY29uc29sZSI+PC9k
aXY+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9maWxlLXdyaXRlci1ldmVudHMuanMiPjwv
c2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0Lmpz
Ij48L3NjcmlwdD4KKyA8L2JvZHk+Cis8L2h0bWw+CisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
ZmlsZXN5c3RlbS9maWxlLXdyaXRlci1nYy1ibG9iLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS13cml0ZXItZ2MtYmxvYi1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDc4NTE1KQorKysgTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2Zp
bGUtd3JpdGVyLWdjLWJsb2ItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
MTAgQEAKK1Rlc3QgdGhhdCBhIGJsb2Igd29uJ3QgZ2V0IGdhcmJhZ2UtY29sbGVjdGVkIHdoaWxl
IGJlaW5nIHdyaXR0ZW4gb3V0IGJ5IGEgRmlsZVdyaXRlci4KKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCiBzdGFydGluZyB0ZXN0CiBQQVNTIFN1Y2Nlc3NmdWxseSB3cm90ZSBibG9iLgog
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCisKSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1nYy1ibG9iLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZpbGUtd3JpdGVyLWdjLWJs
b2IuaHRtbAkocmV2aXNpb24gNzg1MTUpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0v
ZmlsZS13cml0ZXItZ2MtYmxvYi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwMiArMSwxNSBA
QAogPCFET0NUWVBFIEhUTUw+CiA8aHRtbD4KLTxoZWFkPgotPHRpdGxlPkZpbGUgV3JpdGVyIHRl
c3Q8L3RpdGxlPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMv
anMtdGVzdC1zdHlsZS5jc3MiPgotPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0PgotICAgIHZhciBmaWxlRW50cnk7Ci0KLSAgICBm
dW5jdGlvbiBjbGVhblVwKCkgewotICAgICAgdmFyIG5lZWRUb0NhbGxGaW5pc2ggPSB0cnVlOwot
ICAgICAgdHJ5IHsKLSAgICAgICAgaWYgKGZpbGVFbnRyeSkgewotICAgICAgICAgIGZpbGVFbnRy
eS5yZW1vdmUoZmluaXNoSlNUZXN0LCBmaW5pc2hKU1Rlc3QpOwotICAgICAgICAgIG5lZWRUb0Nh
bGxGaW5pc2ggPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAgfSBjYXRjaCAoZXgpIHsKLSAgICAg
IH0KLSAgICAgIGlmIChuZWVkVG9DYWxsRmluaXNoKSB7Ci0gICAgICAgIGZpbmlzaEpTVGVzdCgp
OwotICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0aW9uIHN0cmluZ2lmeU9iaihvKSB7Ci0gICAg
ICAgIHMgPSAiIjsKLSAgICAgICAgaWYgKG8pCi0gICAgICAgICAgICBmb3IgKGluZGV4IGluIG8p
IHsKLSAgICAgICAgICAgICAgICBzICs9IGluZGV4ICsgIjogIiArIG9baW5kZXhdICsgIlxuIjsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHM7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24g
b25FcnJvcihlKSB7Ci0gICAgICAgIGRlYnVnKCJDYXVnaHQgYW4gZXJyb3IuIik7Ci0gICAgICAg
IGlmIChlICYmIGUuY29kZSkgeyAgLy8gRWFjaCBGaWxlRXJyb3IgaGFzIGEgY29kZS4KLSAgICAg
ICAgICBkZWJ1ZygiRXJyb3IgY29kZTogIiArIGUuY29kZSk7Ci0gICAgICAgIH0KLSAgICAgICAg
dGVzdEZhaWxlZChzdHJpbmdpZnlPYmooZSkpOwotICAgICAgICBjbGVhblVwKCk7Ci0gICAgfQot
Ci0gICAgZnVuY3Rpb24gb25TdWNjZXNzKCkgewotICAgICAgICB0ZXN0UGFzc2VkKCJTdWNjZXNz
ZnVsbHkgd3JvdGUgYmxvYi4iKTsKLSAgICAgICAgY2xlYW5VcCgpOwotICAgIH0KLQotICAgIGZ1
bmN0aW9uIHRlblhCbG9iKGJsb2IpIHsKLSAgICAgICAgdmFyIGJiID0gbmV3IEJsb2JCdWlsZGVy
KCk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTA7ICsraSkgewotICAgICAgICAgICAg
YmIuYXBwZW5kKGJsb2IpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBiYi5nZXRCbG9iKCk7
Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc3RhcnRXcml0ZSh3cml0ZXIpIHsKLSAgICAgICAgLy8g
TGV0J3MgbWFrZSBpdCBhYm91dCBhIG1lZ2FieXRlLgotICAgICAgICB2YXIgYmIgPSBuZXcgQmxv
YkJ1aWxkZXIoKTsKLSAgICAgICAgYmIuYXBwZW5kKCJsb3JlbSBpcHN1bSIpOwotICAgICAgICB2
YXIgYmxvYiA9IHRlblhCbG9iKGJiLmdldEJsb2IoKSk7Ci0gICAgICAgIGJsb2IgPSB0ZW5YQmxv
YihiYi5nZXRCbG9iKCkpOwotICAgICAgICBibG9iID0gdGVuWEJsb2IoYmIuZ2V0QmxvYigpKTsK
LSAgICAgICAgYmxvYiA9IHRlblhCbG9iKGJiLmdldEJsb2IoKSk7Ci0gICAgICAgIGJsb2IgPSB0
ZW5YQmxvYihiYi5nZXRCbG9iKCkpOwotICAgICAgICB3cml0ZXIub25lcnJvciA9IG9uRXJyb3I7
Ci0gICAgICAgIHdyaXRlci5vbndyaXRlZW5kID0gb25TdWNjZXNzOwotICAgICAgICB3cml0ZXIu
d3JpdGUoYmxvYik7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gdXNlRmlsZVdyaXRlcih3cml0ZXIp
IHsKLSAgICAgICAgc3RhcnRXcml0ZSh3cml0ZXIpOwotICAgICAgICBnYygpOwotICAgIH0KLQot
ICAgIGZ1bmN0aW9uIGZpbGVDYWxsYmFjayhmKSB7Ci0gICAgICAgIGZpbGVFbnRyeSA9IGY7Ci0g
ICAgICAgIGZpbGVFbnRyeS5jcmVhdGVXcml0ZXIodXNlRmlsZVdyaXRlciwgb25FcnJvcik7Ci0g
ICAgfQotCi0gICAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKLSAgICAgICAgZGVidWcoInN0YXJ0aW5n
IHRlc3QiKTsKLSAgICAgICAgaWYgKHdpbmRvdy5yZXF1ZXN0RmlsZVN5c3RlbSkgewotICAgICAg
ICAgICAgcmVxdWVzdEZpbGVTeXN0ZW0oMCwgMTAyNCoxMDI0LAotICAgICAgICAgICAgICAgIGZ1
bmN0aW9uKGZzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZzLnJvb3QuZ2V0RmlsZSgidGVzdC50
eHQiLCB7Y3JlYXRlOnRydWV9LCBmaWxlQ2FsbGJhY2ssCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvbkVycm9yKTsKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAg
ICAgIG9uRXJyb3IpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGVidWcoIlRoaXMg
dGVzdCByZXF1aXJlcyBGaWxlU3lzdGVtIEFQSSBzdXBwb3J0LiIpOwotICAgICAgICB9Ci0gICAg
fQotICAgIHdpbmRvdy5zdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwotICAgIHdpbmRvdy5qc1Rl
c3RJc0FzeW5jID0gdHJ1ZTsKLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgb25sb2FkPSJydW5U
ZXN0KCkiPgorIDxoZWFkPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMv
cmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKyAgICA8dGl0bGU+RmlsZSBXcml0ZXIgR0Mg
QmxvYjwvdGl0bGU+CisgICAgPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9maWxlLXdyaXRlci11
dGlscy5qcyI+PC9zY3JpcHQ+CisgPC9oZWFkPgorIDxib2R5PgogICAgIDxkaXYgaWQ9ImRlc2Ny
aXB0aW9uIj48L2Rpdj4KICAgICA8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKyAgICA8c2NyaXB0
IHNyYz0icmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWdjLWJsb2IuanMiPjwvc2NyaXB0PgogICAgIDxz
Y3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KLTwv
Ym9keT4KKyA8L2JvZHk+CiA8L2h0bWw+Ci0KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZmlsZXN5
c3RlbS9maWxlLXdyaXRlci13cml0ZS1vdmVybGFwcGVkLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS13cml0ZXItd3JpdGUtb3Zlcmxh
cHBlZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVz
eXN0ZW0vZmlsZS13cml0ZXItd3JpdGUtb3ZlcmxhcHBlZC1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTMgQEAKK1Rlc3QgdXNpbmcgRmlsZVdyaXRlci5zZWVrIHRvIHdyaXRl
IG92ZXJsYXBwaW5nIGV4aXN0aW5nIGRhdGEgaW4gYSBmaWxlLgorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKK3N0YXJ0aW5nIHRlc3QKK1BBU1MgTmVnYXRpdmUgc2VlayB2YWxpZGF0ZWQu
CitQQVNTIFBvc2l0aXZlIHNlZWsgdmFsaWRhdGVkLgorUEFTUyBOb25leHRlbmRpbmcgd3JpdGUg
dmFsaWRhdGVkLgorUEFTUyBBbGwgd3JpdGVzIHZlcmlmaWVkLgorUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
ZmlsZXN5c3RlbS9maWxlLXdyaXRlci13cml0ZS1vdmVybGFwcGVkLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZpbGUtd3JpdGVyLXdyaXRlLW92ZXJsYXBw
ZWQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxl
LXdyaXRlci13cml0ZS1vdmVybGFwcGVkLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUg
QEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+CisgPGhlYWQ+CisgICAgPGxpbmsgcmVsPSJzdHls
ZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorICAgIDx0
aXRsZT5GaWxlIFdyaXRlciBXcml0ZSBPdmVybGFwcGVkPC90aXRsZT4KKyAgICA8c2NyaXB0IHNy
Yz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0
IHNyYz0icmVzb3VyY2VzL2ZpbGUtd3JpdGVyLXV0aWxzLmpzIj48L3NjcmlwdD4KKyA8L2hlYWQ+
CisgPGJvZHk+CisgICAgPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorICAgIDxkaXYgaWQ9
ImNvbnNvbGUiPjwvZGl2PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZmlsZS13cml0ZXIt
d3JpdGUtb3ZlcmxhcHBlZC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uL2pzL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorIDwvYm9keT4KKzwvaHRtbD4KSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItZXZl
bnRzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJj
ZXMvZmlsZS13cml0ZXItZXZlbnRzLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1ldmVudHMuanMJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTAyIEBACitpZiAodGhpcy5pbXBvcnRTY3JpcHRzKSB7CisgICAgaW1wb3J0
U2NyaXB0cygnZnMtd29ya2VyLWNvbW1vbi5qcycpOworICAgIGltcG9ydFNjcmlwdHMoJ2ZpbGUt
d3JpdGVyLXV0aWxzLmpzJyk7Cit9CisKK2Rlc2NyaXB0aW9uKCJUZXN0IHRoYXQgRmlsZVdyaXRl
ciBwcm9kdWNlcyBwcm9wZXIgcHJvZ3Jlc3MgZXZlbnRzLiIpOworCit2YXIgZmlsZUVudHJ5Owor
dmFyIHNhd1dyaXRlU3RhcnQ7Cit2YXIgc2F3V3JpdGU7Cit2YXIgc2F3V3JpdGVFbmQ7Cit2YXIg
c2F3UHJvZ3Jlc3M7Cit2YXIgd3JpdGVyOwordmFyIGxhc3RQcm9ncmVzcyA9IDA7Cit2YXIgdG9C
ZVdyaXR0ZW47CisKK2Z1bmN0aW9uIHRlblhCbG9iKGJsb2IpIHsKKyAgICB2YXIgYmIgPSBuZXcg
QmxvYkJ1aWxkZXIoKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwOyArK2kpIHsKKyAgICAg
ICAgYmIuYXBwZW5kKGJsb2IpOworICAgIH0KKyAgICByZXR1cm4gYmIuZ2V0QmxvYigpOworfQor
CitmdW5jdGlvbiBvbldyaXRlU3RhcnQoZSkgeworICAgIGFzc2VydCh3cml0ZXIpOworICAgIGFz
c2VydCh3cml0ZXIucmVhZHlTdGF0ZSA9PSB3cml0ZXIuV1JJVElORyk7CisgICAgYXNzZXJ0KGUu
dHlwZSA9PSAid3JpdGVzdGFydCIpOworICAgIGFzc2VydCghc2F3V3JpdGVTdGFydCk7CisgICAg
YXNzZXJ0KCFzYXdQcm9ncmVzcyk7CisgICAgYXNzZXJ0KCFzYXdXcml0ZSk7CisgICAgYXNzZXJ0
KCFzYXdXcml0ZUVuZCk7CisgICAgYXNzZXJ0KCFlLmxvYWRlZCk7CisgICAgYXNzZXJ0KGUudG90
YWwgPT0gdG9CZVdyaXR0ZW4pOworICAgIHNhd1dyaXRlU3RhcnQgPSB0cnVlOworfQorCitmdW5j
dGlvbiBvblByb2dyZXNzKGUpIHsKKyAgICBhc3NlcnQod3JpdGVyLnJlYWR5U3RhdGUgPT0gd3Jp
dGVyLldSSVRJTkcpOworICAgIGFzc2VydChzYXdXcml0ZVN0YXJ0KTsKKyAgICBhc3NlcnQoIXNh
d1dyaXRlKTsKKyAgICBhc3NlcnQoIXNhd1dyaXRlRW5kKTsKKyAgICBhc3NlcnQoZS50eXBlID09
ICJwcm9ncmVzcyIpOworICAgIGFzc2VydChlLmxvYWRlZCA8PSBlLnRvdGFsKTsKKyAgICBhc3Nl
cnQobGFzdFByb2dyZXNzIDwgZS5sb2FkZWQpOworICAgIGFzc2VydChlLnRvdGFsID09IHRvQmVX
cml0dGVuKTsKKyAgICBsYXN0UHJvZ3Jlc3MgPSBlLmxvYWRlZDsKKyAgICBzYXdQcm9ncmVzcyA9
IHRydWU7Cit9CisKK2Z1bmN0aW9uIG9uV3JpdGUoZSkgeworICAgIGFzc2VydCh3cml0ZXIucmVh
ZHlTdGF0ZSA9PSB3cml0ZXIuV1JJVElORyk7CisgICAgYXNzZXJ0KHNhd1dyaXRlU3RhcnQpOwor
ICAgIGFzc2VydChzYXdQcm9ncmVzcyk7CisgICAgYXNzZXJ0KGxhc3RQcm9ncmVzcyA9PSBlLnRv
dGFsKTsKKyAgICBhc3NlcnQoIXNhd1dyaXRlKTsKKyAgICBhc3NlcnQoIXNhd1dyaXRlRW5kKTsK
KyAgICBhc3NlcnQoZS50eXBlID09ICJ3cml0ZSIpOworICAgIGFzc2VydChlLmxvYWRlZCA9PSBl
LnRvdGFsKTsKKyAgICBhc3NlcnQoZS50b3RhbCA9PSB0b0JlV3JpdHRlbik7CisgICAgc2F3V3Jp
dGUgPSB0cnVlOworfQorCitmdW5jdGlvbiBvbldyaXRlRW5kKGUpIHsKKyAgICBhc3NlcnQod3Jp
dGVyLnJlYWR5U3RhdGUgPT0gd3JpdGVyLkRPTkUpOworICAgIGFzc2VydChzYXdXcml0ZVN0YXJ0
KTsKKyAgICBhc3NlcnQoc2F3UHJvZ3Jlc3MpOworICAgIGFzc2VydChzYXdXcml0ZSk7CisgICAg
YXNzZXJ0KCFzYXdXcml0ZUVuZCk7CisgICAgYXNzZXJ0KGUudHlwZSA9PSAid3JpdGVlbmQiKTsK
KyAgICBhc3NlcnQoZS5sb2FkZWQgPT0gZS50b3RhbCk7CisgICAgYXNzZXJ0KGUudG90YWwgPT0g
dG9CZVdyaXR0ZW4pOworICAgIHNhd1dyaXRlRW5kID0gdHJ1ZTsKKyAgICB0ZXN0UGFzc2VkKCJT
YXcgYWxsIHRoZSByaWdodCBldmVudHMuIik7CisgICAgY2xlYW5VcCgpOworfQorCitmdW5jdGlv
biBzdGFydFdyaXRlKGZpbGVXcml0ZXIpIHsKKyAgICAvLyBMZXQncyBtYWtlIGl0IGFib3V0IGEg
bWVnYWJ5dGUuCisgICAgdmFyIGJiID0gbmV3IEJsb2JCdWlsZGVyKCk7CisgICAgYmIuYXBwZW5k
KCJsb3JlbSBpcHN1bSIpOworICAgIHZhciBibG9iID0gdGVuWEJsb2IoYmIuZ2V0QmxvYigpKTsK
KyAgICBibG9iID0gdGVuWEJsb2IoYmxvYik7CisgICAgYmxvYiA9IHRlblhCbG9iKGJsb2IpOwor
ICAgIGJsb2IgPSB0ZW5YQmxvYihibG9iKTsKKyAgICBibG9iID0gdGVuWEJsb2IoYmxvYik7Cisg
ICAgdG9CZVdyaXR0ZW4gPSBibG9iLnNpemU7CisgICAgd3JpdGVyID0gZmlsZVdyaXRlcjsKKyAg
ICBmaWxlV3JpdGVyLm9uZXJyb3IgPSBvbkVycm9yOworICAgIGZpbGVXcml0ZXIub253cml0ZXN0
YXJ0ID0gb25Xcml0ZVN0YXJ0OworICAgIGZpbGVXcml0ZXIub25wcm9ncmVzcyA9IG9uUHJvZ3Jl
c3M7CisgICAgZmlsZVdyaXRlci5vbndyaXRlID0gb25Xcml0ZTsKKyAgICBmaWxlV3JpdGVyLm9u
d3JpdGVlbmQgPSBvbldyaXRlRW5kOworICAgIGZpbGVXcml0ZXIud3JpdGUoYmxvYik7Cit9CisK
K2Z1bmN0aW9uIHJ1blRlc3QodW51c2VkRmlsZUVudHJ5LCBmaWxlV3JpdGVyKSB7CisgICAgc3Rh
cnRXcml0ZShmaWxlV3JpdGVyKTsKK30KK3ZhciBqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK3NldHVw
QW5kUnVuVGVzdCgyKjEwMjQqMTAyNCwgJ2ZpbGUtd3JpdGVyLWdjLWJsb2InLCBydW5UZXN0KTsK
K3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9m
aWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1nYy1ibG9iLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItZ2MtYmxv
Yi5qcwkocmV2aXNpb24gNzM0ODQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVz
b3VyY2VzL2ZpbGUtd3JpdGVyLWdjLWJsb2IuanMJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAyICsx
LDU5IEBACi08IURPQ1RZUEUgSFRNTD4KLTxodG1sPgotPGhlYWQ+Ci08dGl0bGU+RmlsZSBXcml0
ZXIgdGVzdDwvdGl0bGU+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2pzL3Jlc291
cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Ci08c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci0gICAgdmFyIGZpbGVFbnRyeTsKLQot
ICAgIGZ1bmN0aW9uIGNsZWFuVXAoKSB7Ci0gICAgICB2YXIgbmVlZFRvQ2FsbEZpbmlzaCA9IHRy
dWU7Ci0gICAgICB0cnkgewotICAgICAgICBpZiAoZmlsZUVudHJ5KSB7Ci0gICAgICAgICAgZmls
ZUVudHJ5LnJlbW92ZShmaW5pc2hKU1Rlc3QsIGZpbmlzaEpTVGVzdCk7Ci0gICAgICAgICAgbmVl
ZFRvQ2FsbEZpbmlzaCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9IGNhdGNoIChleCkgewot
ICAgICAgfQotICAgICAgaWYgKG5lZWRUb0NhbGxGaW5pc2gpIHsKLSAgICAgICAgZmluaXNoSlNU
ZXN0KCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc3RyaW5naWZ5T2JqKG8pIHsK
LSAgICAgICAgcyA9ICIiOwotICAgICAgICBpZiAobykKLSAgICAgICAgICAgIGZvciAoaW5kZXgg
aW4gbykgewotICAgICAgICAgICAgICAgIHMgKz0gaW5kZXggKyAiOiAiICsgb1tpbmRleF0gKyAi
XG4iOworaWYgKHRoaXMuaW1wb3J0U2NyaXB0cykgeworICAgIGltcG9ydFNjcmlwdHMoJ2ZzLXdv
cmtlci1jb21tb24uanMnKTsKKyAgICBpbXBvcnRTY3JpcHRzKCdmaWxlLXdyaXRlci11dGlscy5q
cycpOworICAgIGZ1bmN0aW9uIGdjKCkgeworICAgICAgICBpZiAodHlwZW9mIEdDQ29udHJvbGxl
ciAhPT0gInVuZGVmaW5lZCIpCisgICAgICAgICAgICBHQ0NvbnRyb2xsZXIuY29sbGVjdCgpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZ1bmN0aW9uIGdjUmVjKG4pIHsKKyAgICAgICAg
ICAgICAgICBpZiAobiA8IDEpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7fTsKKyAgICAg
ICAgICAgICAgICB2YXIgdGVtcCA9IHtpOiAiYWIiICsgaSArIChpIC8gMTAwMDAwKX07CisgICAg
ICAgICAgICAgICAgdGVtcCArPSAiZm9vIjsKKyAgICAgICAgICAgICAgICBnY1JlYyhuLTEpOwog
ICAgICAgICAgICAgfQotICAgICAgICByZXR1cm4gczsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBv
bkVycm9yKGUpIHsKLSAgICAgICAgZGVidWcoIkNhdWdodCBhbiBlcnJvci4iKTsKLSAgICAgICAg
aWYgKGUgJiYgZS5jb2RlKSB7ICAvLyBFYWNoIEZpbGVFcnJvciBoYXMgYSBjb2RlLgotICAgICAg
ICAgIGRlYnVnKCJFcnJvciBjb2RlOiAiICsgZS5jb2RlKTsKLSAgICAgICAgfQotICAgICAgICB0
ZXN0RmFpbGVkKHN0cmluZ2lmeU9iaihlKSk7Ci0gICAgICAgIGNsZWFuVXAoKTsKLSAgICB9Ci0K
LSAgICBmdW5jdGlvbiBvblN1Y2Nlc3MoKSB7Ci0gICAgICAgIHRlc3RQYXNzZWQoIlN1Y2Nlc3Nm
dWxseSB3cm90ZSBibG9iLiIpOwotICAgICAgICBjbGVhblVwKCk7Ci0gICAgfQotCi0gICAgZnVu
Y3Rpb24gdGVuWEJsb2IoYmxvYikgewotICAgICAgICB2YXIgYmIgPSBuZXcgQmxvYkJ1aWxkZXIo
KTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgKytpKSB7Ci0gICAgICAgICAgICBi
Yi5hcHBlbmQoYmxvYik7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7IGkr
KykKKyAgICAgICAgICAgICAgICBnY1JlYygxMCkKICAgICAgICAgfQotICAgICAgICByZXR1cm4g
YmIuZ2V0QmxvYigpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHN0YXJ0V3JpdGUod3JpdGVyKSB7
Ci0gICAgICAgIC8vIExldCdzIG1ha2UgaXQgYWJvdXQgYSBtZWdhYnl0ZS4KLSAgICAgICAgdmFy
IGJiID0gbmV3IEJsb2JCdWlsZGVyKCk7Ci0gICAgICAgIGJiLmFwcGVuZCgibG9yZW0gaXBzdW0i
KTsKLSAgICAgICAgdmFyIGJsb2IgPSB0ZW5YQmxvYihiYi5nZXRCbG9iKCkpOwotICAgICAgICBi
bG9iID0gdGVuWEJsb2IoYmIuZ2V0QmxvYigpKTsKLSAgICAgICAgYmxvYiA9IHRlblhCbG9iKGJi
LmdldEJsb2IoKSk7Ci0gICAgICAgIGJsb2IgPSB0ZW5YQmxvYihiYi5nZXRCbG9iKCkpOwotICAg
ICAgICBibG9iID0gdGVuWEJsb2IoYmIuZ2V0QmxvYigpKTsKLSAgICAgICAgd3JpdGVyLm9uZXJy
b3IgPSBvbkVycm9yOwotICAgICAgICB3cml0ZXIub253cml0ZWVuZCA9IG9uU3VjY2VzczsKLSAg
ICAgICAgd3JpdGVyLndyaXRlKGJsb2IpOwogICAgIH0KIAotICAgIGZ1bmN0aW9uIHVzZUZpbGVX
cml0ZXIod3JpdGVyKSB7Ci0gICAgICAgIHN0YXJ0V3JpdGUod3JpdGVyKTsKLSAgICAgICAgZ2Mo
KTsKLSAgICB9Cit9CiAKLSAgICBmdW5jdGlvbiBmaWxlQ2FsbGJhY2soZikgewotICAgICAgICBm
aWxlRW50cnkgPSBmOwotICAgICAgICBmaWxlRW50cnkuY3JlYXRlV3JpdGVyKHVzZUZpbGVXcml0
ZXIsIG9uRXJyb3IpOwotICAgIH0KK2Rlc2NyaXB0aW9uKCJUZXN0IHRoYXQgYSBibG9iIHdvbid0
IGdldCBnYXJiYWdlLWNvbGxlY3RlZCB3aGlsZSBiZWluZyB3cml0dGVuIG91dCBieSBhIEZpbGVX
cml0ZXIuIik7CiAKLSAgICBmdW5jdGlvbiBydW5UZXN0KCkgewotICAgICAgICBkZWJ1Zygic3Rh
cnRpbmcgdGVzdCIpOwotICAgICAgICBpZiAod2luZG93LnJlcXVlc3RGaWxlU3lzdGVtKSB7Ci0g
ICAgICAgICAgICByZXF1ZXN0RmlsZVN5c3RlbSgwLCAxMDI0KjEwMjQsCi0gICAgICAgICAgICAg
ICAgZnVuY3Rpb24oZnMpIHsKLSAgICAgICAgICAgICAgICAgICAgZnMucm9vdC5nZXRGaWxlKCJ0
ZXN0LnR4dCIsIHtjcmVhdGU6dHJ1ZX0sIGZpbGVDYWxsYmFjaywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9uRXJyb3IpOwotICAgICAgICAgICAgICAgIH0sCi0gICAgICAg
ICAgICAgICAgb25FcnJvcik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkZWJ1Zygi
VGhpcyB0ZXN0IHJlcXVpcmVzIEZpbGVTeXN0ZW0gQVBJIHN1cHBvcnQuIik7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgd2luZG93LnN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Ci0gICAgd2luZG93
LmpzVGVzdElzQXN5bmMgPSB0cnVlOwotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBvbmxvYWQ9
InJ1blRlc3QoKSI+Ci0gICAgPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgotICAgIDxkaXYg
aWQ9ImNvbnNvbGUiPjwvZGl2PgotICAgIDxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KK3ZhciBmaWxlRW50cnk7
CiAKK2Z1bmN0aW9uIG9uVGVzdFN1Y2Nlc3MoKSB7CisgICAgdGVzdFBhc3NlZCgiU3VjY2Vzc2Z1
bGx5IHdyb3RlIGJsb2IuIik7CisgICAgY2xlYW5VcCgpOworfQorCitmdW5jdGlvbiB0ZW5YQmxv
YihibG9iKSB7CisgICAgdmFyIGJiID0gbmV3IEJsb2JCdWlsZGVyKCk7CisgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCAxMDsgKytpKSB7CisgICAgICAgIGJiLmFwcGVuZChibG9iKTsKKyAgICB9Cisg
ICAgcmV0dXJuIGJiLmdldEJsb2IoKTsKK30KKworZnVuY3Rpb24gc3RhcnRXcml0ZSh3cml0ZXIp
IHsKKyAgICAvLyBMZXQncyBtYWtlIGl0IGFib3V0IGEgbWVnYWJ5dGUuCisgICAgdmFyIGJiID0g
bmV3IEJsb2JCdWlsZGVyKCk7CisgICAgYmIuYXBwZW5kKCJsb3JlbSBpcHN1bSIpOworICAgIHZh
ciBibG9iID0gdGVuWEJsb2IoYmIuZ2V0QmxvYigpKTsKKyAgICBibG9iID0gdGVuWEJsb2IoYmxv
Yik7CisgICAgYmxvYiA9IHRlblhCbG9iKGJsb2IpOworICAgIGJsb2IgPSB0ZW5YQmxvYihibG9i
KTsKKyAgICBibG9iID0gdGVuWEJsb2IoYmxvYik7CisgICAgd3JpdGVyLm9uZXJyb3IgPSBvbkVy
cm9yOworICAgIHdyaXRlci5vbndyaXRlZW5kID0gb25UZXN0U3VjY2VzczsKKyAgICB3cml0ZXIu
d3JpdGUoYmxvYik7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QodW51c2VkRmlsZUVudHJ5LCBmaWxl
V3JpdGVyKSB7CisgICAgc3RhcnRXcml0ZShmaWxlV3JpdGVyKTsKKyAgICBnYygpOworfQordmFy
IGpzVGVzdElzQXN5bmMgPSB0cnVlOworc2V0dXBBbmRSdW5UZXN0KDIqMTAyNCoxMDI0LCAnZmls
ZS13cml0ZXItZ2MtYmxvYicsIHJ1blRlc3QpOwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRy
dWU7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3Jp
dGVyLXV0aWxzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9y
ZXNvdXJjZXMvZmlsZS13cml0ZXItdXRpbHMuanMJKHJldmlzaW9uIDc4NTE1KQorKysgTGF5b3V0
VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci11dGlscy5qcwkod29y
a2luZyBjb3B5KQpAQCAtMTAzLDE2ICsxMDMsMjEgQEAgZnVuY3Rpb24gdmVyaWZ5Qnl0ZVJhbmdl
QXNTdHJpbmcoZmlsZUVudAogLy8gQ3JlYXRlcyBhIGZpbGUgY2FsbGVkIGZpbGVOYW1lIGluIGZp
bGVTeXN0ZW0ncyByb290IGRpcmVjdG9yeSwgdHJ1bmNhdGVzIGl0IHRvIHplcm8gbGVuZ3RoIGp1
c3QgaW4gY2FzZSwgYW5kIGNhbGxzIG9uU3VjY2VzcywgcGFzc2luZyBpdCBhIEZpbGVFbnRyeSBh
bmQgRmlsZVdyaXRlciBmb3IgdGhlIG5ldyBmaWxlLgogZnVuY3Rpb24gY3JlYXRlRW1wdHlGaWxl
KGZpbGVTeXN0ZW0sIGZpbGVOYW1lLCBvblN1Y2Nlc3MpCiB7Ci0gICAgZnVuY3Rpb24gZ2V0U3Vj
Y2Vzc0Z1bmMoZmlsZUVudHJ5LCBmaWxlV3JpdGVyKSB7CisgICAgZnVuY3Rpb24gZ2V0U3VjY2Vz
c0Z1bmMoZmlsZUVudHJ5KSB7CisgICAgICAgIC8vIENyZWF0ZSBhIGZyZXNoIEZpbGVXcml0ZXIg
aGVyZSwgcmF0aGVyIHRoYW4gcGFzcyBpbiB0aGUgdXNlZCBvbmUuCisgICAgICAgIC8vIFRoaXMg
d2F5IHdlIGRvbid0IGFjY2lkZW50YWxseSBsZWF2ZSBvdXIgZXZlbnQgaGFuZGxlcnMgYXR0YWNo
ZWQuCiAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIG9uU3VjY2Vzcyhm
aWxlRW50cnksIGZpbGVXcml0ZXIpOworICAgICAgICAgICAgZmlsZUVudHJ5LmNyZWF0ZVdyaXRl
cihmdW5jdGlvbihmdykgeworICAgICAgICAgICAgICAgIG9uU3VjY2VzcyhmaWxlRW50cnksIGZ3
KTsKKyAgICAgICAgICAgIH0sIG9uRXJyb3IpOwogICAgICAgICB9CiAgICAgfQogICAgIGZ1bmN0
aW9uIGdldEZpbGVXcml0ZXJDYWxsYmFjayhmaWxlRW50cnkpIHsKICAgICAgICAgcmV0dXJuIGZ1
bmN0aW9uKGZpbGVXcml0ZXIpIHsKLSAgICAgICAgICAgIHZhciBzdWNjZXNzRnVuYyA9IGdldFN1
Y2Nlc3NGdW5jKGZpbGVFbnRyeSwgZmlsZVdyaXRlcik7CisgICAgICAgICAgICB2YXIgc3VjY2Vz
c0Z1bmMgPSBnZXRTdWNjZXNzRnVuYyhmaWxlRW50cnkpOwogICAgICAgICAgICAgZmlsZVdyaXRl
ci5vbkVycm9yID0gb25FcnJvcjsKLSAgICAgICAgICAgIGZpbGVXcml0ZXIub253cml0ZSA9IGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIG9ud3JpdGUs
IGJ1dCB0aGUgc3BlYyBhbmQgY29kZSBuZWVkIHRvIGJlIGNoYW5nZWQgdG8gYWxsb3cgdGhhdC4g
IFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA4NDYuCisgICAg
ICAgICAgICBmaWxlV3JpdGVyLm9ud3JpdGVlbmQgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAg
ICAgICB2ZXJpZnlGaWxlTGVuZ3RoKGZpbGVFbnRyeSwgMCwgc3VjY2Vzc0Z1bmMpOwogICAgICAg
ICAgICAgfTsKICAgICAgICAgICAgIGZpbGVXcml0ZXIudHJ1bmNhdGUoMCk7CkBAIC0xMzQsMTEg
KzEzOSwyNiBAQCBmdW5jdGlvbiB3cml0ZVN0cmluZyhmaWxlRW50cnksIGZpbGVXcml0CiAgICAg
dmFyIGJsb2IgPSBiYi5nZXRCbG9iKCk7CiAgICAgZmlsZVdyaXRlci5zZWVrKG9mZnNldCk7CiAg
ICAgZmlsZVdyaXRlci53cml0ZShibG9iKTsKLSAgICBmaWxlV3JpdGVyLm9ud3JpdGUgPSBmdW5j
dGlvbigpIHsKKyAgICBmaWxlV3JpdGVyLm9uZXJyb3IgPSBvbkVycm9yOworICAgIGlmIChvZmZz
ZXQgPCAwKQorICAgICAgICBvZmZzZXQgKz0gZmlsZVdyaXRlci5sZW5ndGg7CisgICAgYXNzZXJ0
KG9mZnNldCA+PSAwKTsKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgb253cml0ZSwgYnV0
IHRoZSBzcGVjIGFuZCBjb2RlIG5lZWQgdG8gYmUgY2hhbmdlZCB0byBhbGxvdyB0aGF0LiAgU2Vl
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDg0Ni4KKyAgICBmaWxl
V3JpdGVyLm9ud3JpdGVlbmQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgZmlsZVdyaXRlci5vbndy
aXRlZW5kID0gbnVsbDsKICAgICAgICAgdmVyaWZ5Qnl0ZVJhbmdlQXNTdHJpbmcoZmlsZUVudHJ5
LCBvZmZzZXQsIGRhdGEsIG9uU3VjY2Vzcyk7CiAgICAgfTsKIH0KIAorZnVuY3Rpb24gc2V0Rmls
ZUNvbnRlbnRzKGZpbGVFbnRyeSwgZmlsZVdyaXRlciwgY29udGVudHMsIG9uU3VjY2Vzcykgewor
ICAgIGZpbGVXcml0ZXIub25lcnJvciA9IG9uRXJyb3I7CisgICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIGJlIG9ud3JpdGUsIGJ1dCB0aGUgc3BlYyBhbmQgY29kZSBuZWVkIHRvIGJlIGNoYW5nZWQg
dG8gYWxsb3cgdGhhdC4gIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTA4NDYuCisgICAgZmlsZVdyaXRlci5vbndyaXRlZW5kID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHdyaXRlU3RyaW5nKGZpbGVFbnRyeSwgZmlsZVdyaXRlciwgMCwgY29udGVudHMsIG9uU3Vj
Y2Vzcyk7CisgICAgfTsKKyAgICBmaWxlV3JpdGVyLnRydW5jYXRlKDApOworfQorCiBmdW5jdGlv
biBzZXR1cEFuZFJ1blRlc3Qoc2l6ZSwgdGVzdE5hbWUsIHRlc3RGdW5jKQogewogICAgIGlmICgh
cmVxdWVzdEZpbGVTeXN0ZW0pIHsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9y
ZXNvdXJjZXMvZmlsZS13cml0ZXItd3JpdGUtb3ZlcmxhcHBlZC5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLXdyaXRlLW92
ZXJsYXBwZWQuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0v
cmVzb3VyY2VzL2ZpbGUtd3JpdGVyLXdyaXRlLW92ZXJsYXBwZWQuanMJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNzMgQEAKK2lmICh0aGlzLmltcG9ydFNjcmlwdHMpIHsKKyAgICBpbXBvcnRTY3Jp
cHRzKCdmcy13b3JrZXItY29tbW9uLmpzJyk7CisgICAgaW1wb3J0U2NyaXB0cygnZmlsZS13cml0
ZXItdXRpbHMuanMnKTsKK30KKworZGVzY3JpcHRpb24oIlRlc3QgdXNpbmcgRmlsZVdyaXRlci5z
ZWVrIHRvIHdyaXRlIG92ZXJsYXBwaW5nIGV4aXN0aW5nIGRhdGEgaW4gYSBmaWxlLiIpOworCit2
YXIgZmlsZUVudHJ5OwordmFyIGZpbGVXcml0ZXI7Cit2YXIgdGVzdERhdGEgPSAiTG9yZW0gaXBz
dW0iOwordmFyIHNlZWtCYWNrd2FyZE9mZnNldCA9IC00OwordmFyIHNlZWtGb3J3YXJkT2Zmc2V0
ID0gNDsKKworZnVuY3Rpb24gb25UZXN0U3VjY2VlZGVkKCkKK3sKKyAgICB0ZXN0UGFzc2VkKCJB
bGwgd3JpdGVzIHZlcmlmaWVkLiIpOworICAgIGNsZWFuVXAoKTsKK30KKworZnVuY3Rpb24gdmFs
aWRhdGVOb25leHRlbmRpbmdXcml0ZUVuZCgpIHsKKyAgICB2ZXJpZnlCeXRlUmFuZ2VBc1N0cmlu
ZyhmaWxlRW50cnksIHRlc3REYXRhLmxlbmd0aCArIHNlZWtGb3J3YXJkT2Zmc2V0LCB0ZXN0RGF0
YS5zbGljZShzZWVrRm9yd2FyZE9mZnNldCksIG9uVGVzdFN1Y2NlZWRlZCk7Cit9CisKK2Z1bmN0
aW9uIHZhbGlkYXRlTm9uZXh0ZW5kaW5nV3JpdGVTdGFydCgpIHsKKyAgICB0ZXN0UGFzc2VkKCJO
b25leHRlbmRpbmcgd3JpdGUgdmFsaWRhdGVkLiIpOworICAgIGFzc2VydChmaWxlV3JpdGVyLmxl
bmd0aCA9PSB0ZXN0RGF0YS5sZW5ndGggKiAyKTsKKyAgICB2ZXJpZnlCeXRlUmFuZ2VBc1N0cmlu
ZyhmaWxlRW50cnksIDAsIHRlc3REYXRhLnNsaWNlKDAsIHNlZWtGb3J3YXJkT2Zmc2V0KSwgdmFs
aWRhdGVOb25leHRlbmRpbmdXcml0ZUVuZCk7Cit9CisKK2Z1bmN0aW9uIHRlc3ROb25leHRlbmRp
bmdXcml0ZSgpIHsKKyAgICB3cml0ZVN0cmluZyhmaWxlRW50cnksIGZpbGVXcml0ZXIsIHNlZWtG
b3J3YXJkT2Zmc2V0LCB0ZXN0RGF0YSwgdmFsaWRhdGVOb25leHRlbmRpbmdXcml0ZVN0YXJ0KTsK
K30KKworZnVuY3Rpb24gc2V0dXBOb25leHRlbmRpbmdXcml0ZSgpIHsKKyAgICB0ZXN0UGFzc2Vk
KCJQb3NpdGl2ZSBzZWVrIHZhbGlkYXRlZC4iKTsKKyAgICBzZXRGaWxlQ29udGVudHMoZmlsZUVu
dHJ5LCBmaWxlV3JpdGVyLCB0ZXN0RGF0YSArIHRlc3REYXRhLCB0ZXN0Tm9uZXh0ZW5kaW5nV3Jp
dGUpOworfQorCitmdW5jdGlvbiB2YWxpZGF0ZVNlZWtGb3J3YXJkKCkgeworICAgIGFzc2VydChm
aWxlV3JpdGVyLmxlbmd0aCA9PSB0ZXN0RGF0YS5sZW5ndGggKyBzZWVrRm9yd2FyZE9mZnNldCk7
CisgICAgdmVyaWZ5Qnl0ZVJhbmdlQXNTdHJpbmcoZmlsZUVudHJ5LCAwLCB0ZXN0RGF0YS5zbGlj
ZSgwLCBzZWVrRm9yd2FyZE9mZnNldCksIHNldHVwTm9uZXh0ZW5kaW5nV3JpdGUpOworfQorCitm
dW5jdGlvbiB0ZXN0U2Vla0ZvcndhcmQoKSB7CisgICAgd3JpdGVTdHJpbmcoZmlsZUVudHJ5LCBm
aWxlV3JpdGVyLCBzZWVrRm9yd2FyZE9mZnNldCwgdGVzdERhdGEsIHZhbGlkYXRlU2Vla0Zvcndh
cmQpOworfQorCitmdW5jdGlvbiBzZXR1cFNlZWtGb3J3YXJkKCkgeworICAgIHRlc3RQYXNzZWQo
Ik5lZ2F0aXZlIHNlZWsgdmFsaWRhdGVkLiIpOworICAgIHNldEZpbGVDb250ZW50cyhmaWxlRW50
cnksIGZpbGVXcml0ZXIsIHRlc3REYXRhLCB0ZXN0U2Vla0ZvcndhcmQpOworfQorCitmdW5jdGlv
biB2YWxpZGF0ZVNlZWtCYWNrd2FyZCgpIHsKKyAgICBhc3NlcnQoZmlsZVdyaXRlci5sZW5ndGgg
PT0gMiAqIHRlc3REYXRhLmxlbmd0aCArIHNlZWtCYWNrd2FyZE9mZnNldCk7CisgICAgdmVyaWZ5
Qnl0ZVJhbmdlQXNTdHJpbmcoZmlsZUVudHJ5LCAwLCB0ZXN0RGF0YS5zbGljZSgwLCB0ZXN0RGF0
YS5sZW5ndGggKyBzZWVrQmFja3dhcmRPZmZzZXQpLCBzZXR1cFNlZWtGb3J3YXJkKTsKK30KKwor
ZnVuY3Rpb24gdGVzdFNlZWtCYWNrd2FyZCgpIHsKKyAgICB3cml0ZVN0cmluZyhmaWxlRW50cnks
IGZpbGVXcml0ZXIsIHNlZWtCYWNrd2FyZE9mZnNldCwgdGVzdERhdGEsIHZhbGlkYXRlU2Vla0Jh
Y2t3YXJkKTsKK30KKworLy8gRWFjaCB0ZXN0IGhhcyAzIHBoYXNlczogc2V0dXAsIGV4ZWN1dGlv
biwgYW5kIHZhbGlkYXRpb24uICBJbiB0aGUgc2V0dXAgcGhhc2UsIHdlIG1ha2Ugc3VyZSB0aGF0
IHRoZXJlJ3MgYSBGaWxlV3JpdGVyIHBvaW50aW5nIGF0IGEgZmlsZSB3aXRoIGFwcHJvcHJpYXRl
CisvLyBkYXRhIGZvciB0aGUgdGVzdCB3ZSB3YW50IHRvIHJ1bi4gIEluIHRoZSBleGVjdXRpb24g
cGhhc2UsIHdlIGRvIGEgc2VlayBhbmQgYSB3cml0ZSwgYW5kIHRoZSB1dGlsaXR5IGZ1bmN0aW9u
IHRoYXQgZG9lcyB0aG9zZSBhbHNvIHZhbGlkYXRlcyB0aGF0IHRoZSBkYXRhCisvLyBhY3R1YWxs
eSBnb3Qgd3JpdHRlbi4gIFNvIGluIHRoZSB2YWxpZGF0aW9uIHBoYXNlLCB3ZSBvbmx5IGhhdmUg
dG8gY2hlY2sgdGhhdCB0aGUgcmVzdCBvZiB0aGUgZmlsZSBkaWRuJ3QgZ2V0IGNvcnJ1cHRlZCB3
aGlsZSB3ZSB3ZXJlIHdyaXRpbmcgb3VyIGJpdC4KK2Z1bmN0aW9uIHJ1blRlc3QoZmlsZUVudHJ5
SW4sIGZpbGVXcml0ZXJJbikgeworICAgIGZpbGVFbnRyeSA9IGZpbGVFbnRyeUluOworICAgIGZp
bGVXcml0ZXIgPSBmaWxlV3JpdGVySW47CisgICAgc2V0RmlsZUNvbnRlbnRzKGZpbGVFbnRyeSwg
ZmlsZVdyaXRlciwgdGVzdERhdGEsIHRlc3RTZWVrQmFja3dhcmQpOworfQorCit2YXIganNUZXN0
SXNBc3luYyA9IHRydWU7CitzZXR1cEFuZFJ1blRlc3QoMTAyNCwgJ2ZpbGUtd3JpdGVyLXRydW5j
YXRlLWV4dGVuZCcsIHJ1blRlc3QpOwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vd29ya2Vycy9maWxlLXdyaXRlci1ldmVu
dHMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3Rl
bS93b3JrZXJzL2ZpbGUtd3JpdGVyLWV2ZW50cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vd29ya2Vycy9maWxlLXdyaXRlci1ldmVudHMt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACitbV29ya2VyXSBUZXN0
IHRoYXQgRmlsZVdyaXRlciBwcm9kdWNlcyBwcm9wZXIgcHJvZ3Jlc3MgZXZlbnRzLgorCitPbiBz
dWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dl
ZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1N0YXJ0aW5nIHdvcmtlcjogLi4vcmVzb3VyY2VzL2Zp
bGUtd3JpdGVyLWV2ZW50cy5qcworW1dvcmtlcl0gc3RhcnRpbmcgdGVzdAorUEFTUyBbV29ya2Vy
XSBTYXcgYWxsIHRoZSByaWdodCBldmVudHMuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVt
L3dvcmtlcnMvZmlsZS13cml0ZXItZXZlbnRzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9maWxlc3lzdGVtL3dvcmtlcnMvZmlsZS13cml0ZXItZXZlbnRzLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vd29ya2Vycy9maWxlLXdyaXRl
ci1ldmVudHMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMSBAQAorPCFET0NUWVBFIEhU
TUw+Cis8aHRtbD4KKyA8aGVhZD4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4u
Ly4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+CisgICAgPHRpdGxlPkZpbGUgV3Jp
dGVyIEV2ZW50cyBXb3JrZXI8L3RpdGxlPgorICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNv
dXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi9yZXNv
dXJjZXMvZnMtd29ya2VyLXRlc3QtdXRpbC5qcyI+PC9zY3JpcHQ+CisgPC9oZWFkPgorIDxib2R5
PgorICAgIDxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKyAgICA8ZGl2IGlkPSJjb25zb2xl
Ij48L2Rpdj4KKyAgICA8c2NyaXB0PgorICAgICAgICBzdGFydFdvcmtlcigiLi4vcmVzb3VyY2Vz
L2ZpbGUtd3JpdGVyLWV2ZW50cy5qcyIpOworICAgICAgICB3aW5kb3cuc3VjY2Vzc2Z1bGx5UGFy
c2VkID0gdHJ1ZTsKKyAgICA8L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVz
b3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CisgPC9ib2R5PgorPC9odG1sPgorCisK
KwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3dvcmtlcnMvZmlsZS13cml0ZXIt
Z2MtYmxvYi1leHBlY3RlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZmls
ZXN5c3RlbS93b3JrZXJzL2ZpbGUtd3JpdGVyLWdjLWJsb2ItZXhwZWN0ZWQuaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS93b3JrZXJzL2ZpbGUtd3JpdGVy
LWdjLWJsb2ItZXhwZWN0ZWQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorW1dv
cmtlcl0gVGVzdCB0aGF0IGEgYmxvYiB3b24ndCBnZXQgZ2FyYmFnZS1jb2xsZWN0ZWQgd2hpbGUg
YmVpbmcgd3JpdHRlbiBvdXQgYnkgYSBGaWxlV3JpdGVyLgorCitPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCisKK1N0YXJ0aW5nIHdvcmtlcjogLi4vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWdjLWJs
b2IuanMKK1tXb3JrZXJdIHN0YXJ0aW5nIHRlc3QKK1BBU1MgW1dvcmtlcl0gU3VjY2Vzc2Z1bGx5
IHdyb3RlIGJsb2IuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3dvcmtlcnMvZmlsZS13
cml0ZXItZ2MtYmxvYi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZmlsZXN5
c3RlbS93b3JrZXJzL2ZpbGUtd3JpdGVyLWdjLWJsb2IuaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS93b3JrZXJzL2ZpbGUtd3JpdGVyLWdjLWJsb2IuaHRt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4K
KyA8aGVhZD4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291
cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+CisgICAgPHRpdGxlPkZpbGUgV3JpdGVyIEdDIEJsb2Ig
V29ya2VyPC90aXRsZT4KKyAgICA8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2ZzLXdv
cmtlci10ZXN0LXV0aWwuanMiPjwvc2NyaXB0PgorIDwvaGVhZD4KKyA8Ym9keT4KKyAgICA8ZGl2
IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+CisgICAgPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cisg
ICAgPHNjcmlwdD4KKyAgICAgICAgc3RhcnRXb3JrZXIoIi4uL3Jlc291cmNlcy9maWxlLXdyaXRl
ci1nYy1ibG9iLmpzIik7CisgICAgICAgIHdpbmRvdy5zdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVl
OworICAgIDwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKyA8L2JvZHk+Cis8L2h0bWw+CisKKworCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vd29ya2Vycy9maWxlLXdyaXRlci13cml0ZS1vdmVy
bGFwcGVkLWV4cGVjdGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9maWxl
c3lzdGVtL3dvcmtlcnMvZmlsZS13cml0ZXItd3JpdGUtb3ZlcmxhcHBlZC1leHBlY3RlZC5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3dvcmtlcnMvZmls
ZS13cml0ZXItd3JpdGUtb3ZlcmxhcHBlZC1leHBlY3RlZC5odG1sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDE0IEBACitbV29ya2VyXSBUZXN0IHVzaW5nIEZpbGVXcml0ZXIuc2VlayB0byB3cml0
ZSBvdmVybGFwcGluZyBleGlzdGluZyBkYXRhIGluIGEgZmlsZS4KKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCitTdGFydGluZyB3b3JrZXI6IC4uL3Jlc291cmNlcy9maWxlLXdyaXRlci13
cml0ZS1vdmVybGFwcGVkLmpzCitbV29ya2VyXSBzdGFydGluZyB0ZXN0CitQQVNTIFtXb3JrZXJd
IE5lZ2F0aXZlIHNlZWsgdmFsaWRhdGVkLgorUEFTUyBbV29ya2VyXSBQb3NpdGl2ZSBzZWVrIHZh
bGlkYXRlZC4KK1BBU1MgW1dvcmtlcl0gTm9uZXh0ZW5kaW5nIHdyaXRlIHZhbGlkYXRlZC4KK1BB
U1MgW1dvcmtlcl0gQWxsIHdyaXRlcyB2ZXJpZmllZC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVz
eXN0ZW0vd29ya2Vycy9maWxlLXdyaXRlci13cml0ZS1vdmVybGFwcGVkLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3dvcmtlcnMvZmlsZS13cml0ZXItd3Jp
dGUtb3ZlcmxhcHBlZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9maWxl
c3lzdGVtL3dvcmtlcnMvZmlsZS13cml0ZXItd3JpdGUtb3ZlcmxhcHBlZC5odG1sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDIxIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorIDxoZWFkPgor
ICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRl
c3Qtc3R5bGUuY3NzIj4KKyAgICA8dGl0bGU+RmlsZSBXcml0ZXIgV3JpdGUgT3ZlcmxhcHBlZCBX
b3JrZXI8L3RpdGxlPgorICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvZnMtd29y
a2VyLXRlc3QtdXRpbC5qcyI+PC9zY3JpcHQ+CisgPC9oZWFkPgorIDxib2R5PgorICAgIDxkaXYg
aWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKyAgICA8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKyAg
ICA8c2NyaXB0PgorICAgICAgICBzdGFydFdvcmtlcigiLi4vcmVzb3VyY2VzL2ZpbGUtd3JpdGVy
LXdyaXRlLW92ZXJsYXBwZWQuanMiKTsKKyAgICAgICAgd2luZG93LnN1Y2Nlc3NmdWxseVBhcnNl
ZCA9IHRydWU7CisgICAgPC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291
cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorIDwvYm9keT4KKzwvaHRtbD4KKworCisK
</data>
<flag name="commit-queue"
          id="74207"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>