<?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>247826</bug_id>
          
          <creation_ts>2022-11-11 15:03:18 -0800</creation_ts>
          <short_desc>Serialization differences with &quot;columns&quot; with one or more `auto` value</short_desc>
          <delta_ts>2022-11-14 19:25:17 -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>CSS</component>
          <version>Safari Technology Preview</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=247745</see_also>
    
    <see_also>https://github.com/web-platform-tests/wpt/pull/36948</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>BrowserCompat, InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ahmad Saleem">ahmad.saleem792</reporter>
          <assigned_to name="Tim Nguyen (:ntim)">ntim</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>emilio</cc>
    
    <cc>karlcow</cc>
    
    <cc>ntim</cc>
    
    <cc>obrufau</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1911908</commentid>
    <comment_count>0</comment_count>
    <who name="Ahmad Saleem">ahmad.saleem792</who>
    <bug_when>2022-11-11 15:03:18 -0800</bug_when>
    <thetext>Hi Team,

While going through Bug 103597 and trying to see &quot;column-count: auto&quot; support, I came across following Blink Commit:

Blink Commit - https://src.chromium.org/viewvc/blink?view=revision&amp;revision=155047

I took the test case from above commit and changed it into &quot;JSFiddle&quot; below:

Link - https://jsfiddle.net/2jhw4k5x/show

It seems that we fail following tests compared to Chrome Canary 109:

FAIL element.style.WebkitColumns should be auto auto. Was auto.
FAIL element.style.WebkitColumns should be auto auto. Was auto.
FAIL element.style.WebkitColumns should be auto auto. Was auto.
FAIL element.style.WebkitColumns should be auto 7. Was 7.
FAIL element.style.WebkitColumns should be 7em auto. Was 7em.

Rather than opening old bug, I just thought to create a separate to track this issue. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1912029</commentid>
    <comment_count>1</comment_count>
    <who name="Tim Nguyen (:ntim)">ntim</who>
    <bug_when>2022-11-12 14:27:47 -0800</bug_when>
    <thetext>This was already fixed in https://commits.webkit.org/182834@main

The remaining cases you reported are about serialization differences, what we do is correct given the guideline is always to use the shortest form.

auto auto -&gt; auto
auto 7 -&gt; 7
7em auto -&gt; 7em.

Seems reasonable IMO as I don&apos;t see a case where this could cause ambiguity, but we can always adjust.

Firefox seems to be like Chrome and always serializes both for the shorthand: https://jsfiddle.net/3nd4w5qh/show

Oriol, Emilio, wdyt?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1912039</commentid>
    <comment_count>2</comment_count>
    <who name="Oriol Brufau">obrufau</who>
    <bug_when>2022-11-12 16:16:07 -0800</bug_when>
    <thetext>Yes I would say that omitting optional values seems more correct.

https://drafts.csswg.org/cssom/#serialize-a-css-value
&gt; If component values can be omitted or replaced with a shorter representation without changing the meaning of the value, omit/replace them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1912059</commentid>
    <comment_count>3</comment_count>
      <attachid>463505</attachid>
    <who name="Tim Nguyen (:ntim)">ntim</who>
    <bug_when>2022-11-12 23:48:13 -0800</bug_when>
    <thetext>Created attachment 463505
Testcase from chromium</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1912060</commentid>
    <comment_count>4</comment_count>
    <who name="Tim Nguyen (:ntim)">ntim</who>
    <bug_when>2022-11-12 23:56:33 -0800</bug_when>
    <thetext>https://github.com/web-platform-tests/wpt/blob/a6e9e432ca/css/css-multicol/parsing/columns-valid.html should probably be extended to cover everything in the testcase.

Also I notice WebKit is inconsistent on omitting explicit or implicit `auto`.

Probably makes sense to omit in both case?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1912071</commentid>
    <comment_count>5</comment_count>
    <who name="Oriol Brufau">obrufau</who>
    <bug_when>2022-11-13 01:34:34 -0800</bug_when>
    <thetext>I think WebKit should just remove the notion of implicit values.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1912073</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-11-13 01:56:59 -0800</bug_when>
    <thetext>&lt;rdar://problem/102287297&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1912074</commentid>
    <comment_count>7</comment_count>
    <who name="Tim Nguyen (:ntim)">ntim</who>
    <bug_when>2022-11-13 02:06:28 -0800</bug_when>
    <thetext>Pull request: https://github.com/WebKit/WebKit/pull/6441</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1912100</commentid>
    <comment_count>8</comment_count>
    <who name="Emilio Cobos Álvarez (:emilio)">emilio</who>
    <bug_when>2022-11-13 12:50:45 -0800</bug_when>
    <thetext>Yeah agreed omitting redundant values is more correct, in Gecko this is what causes the behavior: https://searchfox.org/mozilla-central/rev/219df29d0fb5d8928ae41bba4a605046de411cf0/servo/components/style/properties/shorthands/column.mako.rs#11

I&apos;d be happy to change to follow suit here if you file a bug :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1912101</commentid>
    <comment_count>9</comment_count>
    <who name="Ahmad Saleem">ahmad.saleem792</who>
    <bug_when>2022-11-13 12:54:52 -0800</bug_when>
    <thetext>(In reply to Emilio Cobos Álvarez (:emilio) from comment #8)
&gt; Yeah agreed omitting redundant values is more correct, in Gecko this is what
&gt; causes the behavior:
&gt; https://searchfox.org/mozilla-central/rev/
&gt; 219df29d0fb5d8928ae41bba4a605046de411cf0/servo/components/style/properties/
&gt; shorthands/column.mako.rs#11
&gt; 
&gt; I&apos;d be happy to change to follow suit here if you file a bug :)

https://bugzilla.mozilla.org/show_bug.cgi?id=1800394</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1912152</commentid>
    <comment_count>10</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-11-13 20:00:11 -0800</bug_when>
    <thetext>Committed 256625@main (492c75edf7c7): &lt;https://commits.webkit.org/256625@main&gt;

Reviewed commits have been landed. Closing PR #6441 and removing active labels.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>463505</attachid>
            <date>2022-11-12 23:48:13 -0800</date>
            <delta_ts>2022-11-12 23:48:24 -0800</delta_ts>
            <desc>Testcase from chromium</desc>
            <filename>file_247826.html</filename>
            <type>text/html</type>
            <size>32311</size>
            <attacher name="Tim Nguyen (:ntim)">ntim</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+DQo8aHRtbD4NCiAgPGhlYWQ+DQogICAgPHRpdGxlPidjb2x1bW5zJyBw
cm9wZXJ0eSB3aXRoICdhdXRvJyBhbmQgc29tZXRoaW5nIGVsc2U8L3RpdGxlPg0KICAgIDxzY3Jp
cHQ+DQogICAgaWYgKHNlbGYudGVzdFJ1bm5lcikgew0KCS8vIHN2Zy9keW5hbWljLXVwZGF0ZXMg
dGVzdHMgc2V0IGVuYWJsZVBpeGVsVGVzdGluZz10cnVlLCBhcyB3ZSB3YW50IHRvIGR1bXAgdGV4
dCArIHBpeGVsIHJlc3VsdHMNCiAgICBpZiAoc2VsZi5lbmFibGVQaXhlbFRlc3RpbmcpDQogICAg
ICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dFdpdGhQaXhlbFJlc3VsdHMoKTsNCiAgICBlbHNlDQog
ICAgICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOw0KfQ0KDQp2YXIgZGVzY3JpcHRpb24sIGRl
YnVnLCBkaWRGYWlsU29tZVRlc3RzLCBzdWNjZXNzZnVsbHlQYXJzZWQ7DQoNCmRpZEZhaWxTb21l
VGVzdHMgPSBmYWxzZTsNCg0KdmFyIGV4cGVjdGluZ0Vycm9yOyAvLyBzZXQgYnkgc2hvdWxkSGF2
ZUVycm9yKCkNCnZhciBleHBlY3RlZEVycm9yTWVzc2FnZTsgLy8gc2V0IGJ5IG9uZXJyb3Igd2hl
biBleHBlY3RpbmdFcnJvciBpcyB0cnVlDQp2YXIgdW5leHBlY3RlZEVycm9yTWVzc2FnZTsgLy8g
c2V0IGJ5IG9uZXJyb3Igd2hlbiBleHBlY3RpbmdFcnJvciBpcyBub3QgdHJ1ZQ0KDQooZnVuY3Rp
b24oKSB7DQoNCiAgICBmdW5jdGlvbiBjcmVhdGVIVE1MRWxlbWVudCh0YWdOYW1lKQ0KICAgIHsN
CiAgICAgICAgLy8gRklYTUU6IEluIGFuIFhNTCBkb2N1bWVudCwgZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgpIGNyZWF0ZXMgYW4gZWxlbWVudCB3aXRoIGEgbnVsbCBuYW1lc3BhY2UgVVJJLg0KICAg
ICAgICAvLyBTbywgd2UgbmVlZCB1c2UgZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCkgdG8gZXhw
bGljaXRseSBjcmVhdGUgYW4gZWxlbWVudCB3aXRoIHRoZSBzcGVjaWZpZWQNCiAgICAgICAgLy8g
dGFnIG5hbWUgaW4gdGhlIEhUTUwgbmFtZXNwYWNlLiBXZSBjYW4gcmVtb3ZlIHRoaXMgZnVuY3Rp
b24gYW5kIHVzZSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCkNCiAgICAgICAgLy8gZGlyZWN0bHkg
b25jZSB3ZSBmaXggPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzEw
NzQ+Lg0KICAgICAgICBpZiAoZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKQ0KICAgICAgICAgICAg
cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94
aHRtbCIsIHRhZ05hbWUpOw0KICAgICAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0
YWdOYW1lKTsNCiAgICB9DQoNCiAgICB2YXIgcm9vdEVsZW1lbnQgPSBudWxsOw0KICAgIGZ1bmN0
aW9uIGVuc3VyZVJvb3RFbGVtZW50KCkNCiAgICB7DQogICAgICAgIGlmICghcm9vdEVsZW1lbnQg
fHwgIXJvb3RFbGVtZW50LmlzQ29ubmVjdGVkKSB7DQogICAgICAgICAgICByb290RWxlbWVudCA9
IGRvY3VtZW50LmJvZHkgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Ow0KICAgICAgICAgICAg
aWYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkkgPT0gJ2h0dHA6Ly93d3cu
dzMub3JnLzIwMDAvc3ZnJykgew0KICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBNYWtlIHRoZSB0
ZXN0IGhhcm5lc3MgdXNlIFNWRyBlbGVtZW50cyBuYWl2ZWx5Lg0KICAgICAgICAgICAgICAgIHZh
ciBmb3JlaWduT2JqZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3Lncz
Lm9yZy8yMDAwL3N2ZycsICdmb3JlaWduT2JqZWN0Jyk7DQogICAgICAgICAgICAgICAgZm9yZWln
bk9iamVjdC5zZXRBdHRyaWJ1dGUoJ3gnLCAnMHB4Jyk7DQogICAgICAgICAgICAgICAgZm9yZWln
bk9iamVjdC5zZXRBdHRyaWJ1dGUoJ3knLCAnMHB4Jyk7DQogICAgICAgICAgICAgICAgZm9yZWln
bk9iamVjdC5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgJzEwMCUnKTsNCiAgICAgICAgICAgICAgICBm
b3JlaWduT2JqZWN0LnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgJzEwMCUnKTsNCiAgICAgICAgICAg
ICAgICBmb3JlaWduT2JqZWN0LnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAncGFkZGluZzogMTBweDsg
YmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpJyk7DQogICAgICAgICAg
ICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKGZvcmVpZ25PYmplY3Qp
Ow0KICAgICAgICAgICAgICAgIHJvb3RFbGVtZW50ID0gZm9yZWlnbk9iamVjdDsNCiAgICAgICAg
ICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gcm9vdEVsZW1lbnQ7DQogICAgfQ0KDQog
ICAgbW92ZUZvcmVpZ25PYmplY3RUb1RvcElmTmVlZGVkID0gZnVuY3Rpb24gKCkgew0KICAgICAg
ICBpZiAocm9vdEVsZW1lbnQgJiYgcm9vdEVsZW1lbnQubG9jYWxOYW1lID09ICdmb3JlaWduT2Jq
ZWN0JykNCiAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZChy
b290RWxlbWVudCk7DQogICAgfQ0KDQogICAgZ2V0T3JDcmVhdGUgPSBmdW5jdGlvbiBnZXRPckNy
ZWF0ZShpZCwgdGFnTmFtZSkNCiAgICB7DQogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoaWQpOw0KICAgICAgICBpZiAoZWxlbWVudCkNCiAgICAgICAgICAgIHJl
dHVybiBlbGVtZW50Ow0KDQogICAgICAgIGVsZW1lbnQgPSBjcmVhdGVIVE1MRWxlbWVudCh0YWdO
YW1lKTsNCiAgICAgICAgZWxlbWVudC5pZCA9IGlkOw0KICAgICAgICB2YXIgcmVmTm9kZTsNCiAg
ICAgICAgdmFyIHBhcmVudCA9IGVuc3VyZVJvb3RFbGVtZW50KCk7DQoNCiAgICAgICAgaWYgKGlk
ID09ICJkZXNjcmlwdGlvbiIpDQogICAgICAgICAgICByZWZOb2RlID0gZ2V0T3JDcmVhdGUoImNv
bnNvbGUiLCAiZGl2Iik7DQogICAgICAgIGVsc2UNCiAgICAgICAgICAgIHJlZk5vZGUgPSBwYXJl
bnQuZmlyc3RDaGlsZDsNCg0KICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGVsZW1lbnQsIHJl
Zk5vZGUpOw0KICAgICAgICByZXR1cm4gZWxlbWVudDsNCiAgICB9DQoNCiAgICBkZXNjcmlwdGlv
biA9IGZ1bmN0aW9uIGRlc2NyaXB0aW9uKG1zZywgcXVpZXQpDQogICAgew0KICAgICAgICAvLyBG
b3IgTVNJRSA2IGNvbXBhdGliaWxpdHkNCiAgICAgICAgdmFyIHNwYW4gPSBjcmVhdGVIVE1MRWxl
bWVudCgic3BhbiIpOw0KICAgICAgICBpZiAocXVpZXQpDQogICAgICAgICAgICBzcGFuLmlubmVy
SFRNTCA9ICc8cD4nICsgbXNnICsgJzwvcD48cD5PbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgbm8g
IjxzcGFuIGNsYXNzPSJmYWlsIj5GQUlMPC9zcGFuPiIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICI8
c3BhbiBjbGFzcz0icGFzcyI+VEVTVCBDT01QTEVURTwvc3Bhbj4iLjwvcD4nOw0KICAgICAgICBl
bHNlDQogICAgICAgICAgICBzcGFuLmlubmVySFRNTCA9ICc8cD4nICsgbXNnICsgJzwvcD48cD5P
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIjxzcGFuIGNsYXNzPSJwYXNzIj5Q
QVNTPC9zcGFuPiIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICI8c3BhbiBjbGFzcz0icGFzcyI+VEVT
VCBDT01QTEVURTwvc3Bhbj4iLjwvcD4nOw0KDQogICAgICAgIHZhciBkZXNjcmlwdGlvbiA9IGdl
dE9yQ3JlYXRlKCJkZXNjcmlwdGlvbiIsICJwIik7DQogICAgICAgIGlmIChkZXNjcmlwdGlvbi5m
aXJzdENoaWxkKQ0KICAgICAgICAgICAgZGVzY3JpcHRpb24ucmVwbGFjZUNoaWxkKHNwYW4sIGRl
c2NyaXB0aW9uLmZpcnN0Q2hpbGQpOw0KICAgICAgICBlbHNlDQogICAgICAgICAgICBkZXNjcmlw
dGlvbi5hcHBlbmRDaGlsZChzcGFuKTsNCiAgICB9Ow0KDQogICAgZGVidWcgPSBmdW5jdGlvbiBk
ZWJ1Zyhtc2cpDQogICAgew0KICAgICAgICB2YXIgc3BhbiA9IGNyZWF0ZUhUTUxFbGVtZW50KCJz
cGFuIik7DQogICAgICAgIHNwYW4uaW5uZXJIVE1MID0gbXNnICsgJzxiciAvPic7DQogICAgICAg
IGdldE9yQ3JlYXRlKCJjb25zb2xlIiwgImRpdiIpLmFwcGVuZENoaWxkKHNwYW4pOw0KICAgIH07
DQoNCiAgICB2YXIgY3NzID0NCiAgICAgICAgIi5wYXNzIHsiICsNCiAgICAgICAgICAgICJmb250
LXdlaWdodDogYm9sZDsiICsNCiAgICAgICAgICAgICJjb2xvcjogZ3JlZW47IiArDQogICAgICAg
ICJ9IiArDQogICAgICAgICIuZmFpbCB7IiArDQogICAgICAgICAgICAiZm9udC13ZWlnaHQ6IGJv
bGQ7IiArDQogICAgICAgICAgICAiY29sb3I6IHJlZDsiICsNCiAgICAgICAgIn0iICsNCiAgICAg
ICAgIiNjb25zb2xlIHsiICsNCiAgICAgICAgICAgICJ3aGl0ZS1zcGFjZTogcHJlLXdyYXA7IiAr
DQogICAgICAgICAgICAiZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsiICsNCiAgICAgICAgIn0iOw0K
DQogICAgZnVuY3Rpb24gaW5zZXJ0U3R5bGVTaGVldCgpDQogICAgew0KICAgICAgICB2YXIgc3R5
bGVFbGVtZW50ID0gY3JlYXRlSFRNTEVsZW1lbnQoInN0eWxlIik7DQogICAgICAgIHN0eWxlRWxl
bWVudC50ZXh0Q29udGVudCA9IGNzczsNCiAgICAgICAgKGRvY3VtZW50LmhlYWQgfHwgZW5zdXJl
Um9vdEVsZW1lbnQoKSkuYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KTsNCiAgICB9DQoNCiAgICBm
dW5jdGlvbiBoYW5kbGVUZXN0RmluaXNoZWQoKQ0KICAgIHsNCiAgICAgICAgLy8gRklYTUU6IEdl
dCByaWQgb2YgdGhpcyBib29sZWFuLg0KICAgICAgICB3YXNQb3N0VGVzdFNjcmlwdFBhcnNlZCA9
IHRydWU7DQogICAgICAgIGlmICh3aW5kb3cuanNUZXN0SXNBc3luYykgew0KICAgICAgICAgICAg
aWYgKHdpbmRvdy50ZXN0UnVubmVyKQ0KICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIud2FpdFVu
dGlsRG9uZSgpOw0KICAgICAgICAgICAgaWYgKHdpbmRvdy53YXNGaW5pc2hKU1Rlc3RDYWxsZWQp
DQogICAgICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7DQogICAgICAgIH0gZWxzZQ0KICAgICAg
ICAgICAgZmluaXNoSlNUZXN0KCk7DQogICAgfQ0KDQogICAgaWYgKCFpc1dvcmtlcigpKSB7DQog
ICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZnVuY3Rp
b24oKSB7DQogICAgICAgICAgICAvLyBDYWxsIHdhaXRVbnRpbERvbmUoKSBhcyBlYXJseSBhcyBw
b3NzaWJsZSBvdGhlcndpc2Ugc29tZSB0ZXN0cyBtYXkgY29tcGxldGUgYmVmb3JlDQogICAgICAg
ICAgICAvLyB0aGUgbG9hZCBldmVudCBoYXMgZmlyZWQuDQogICAgICAgICAgICBpZiAod2luZG93
LmpzVGVzdElzQXN5bmMgJiYgd2luZG93LnRlc3RSdW5uZXIpDQogICAgICAgICAgICAgICAgdGVz
dFJ1bm5lci53YWl0VW50aWxEb25lKCk7DQoNCiAgICAgICAgICAgIC8vIFNvbWUgdGVzdHMgc2V0
IGpzVGVzdElzQXN5bmMgaW4gbG9hZCBldmVudCBoYW5kbGVyLiBBZGRpbmcgdGhlIGxpc3RlbmVy
IGxhdGUNCiAgICAgICAgICAgIC8vIG1ha2VzIGhhbmRsZVRlc3RGaW5pc2hlZCgpIHJ1biBhZnRl
ciB0aGUgdGVzdCBoYW5kbGVzIGxvYWQgZXZlbnRzLg0KICAgICAgICAgICAgd2luZG93LmFkZEV2
ZW50TGlzdGVuZXIoImxvYWQiLCBoYW5kbGVUZXN0RmluaXNoZWQsIGZhbHNlKTsNCiAgICAgICAg
fSwgZmFsc2UpOw0KICAgICAgICBpbnNlcnRTdHlsZVNoZWV0KCk7DQogICAgfQ0KDQogICAgaWYg
KCFzZWxmLmlzT25FcnJvclRlc3QpIHsNCiAgICAgICAgc2VsZi5vbmVycm9yID0gZnVuY3Rpb24o
bWVzc2FnZSkNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKHNlbGYuZXhwZWN0aW5nRXJyb3Ip
IHsNCiAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkRXJyb3JNZXNzYWdlID0gbWVzc2FnZTsN
CiAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGluZ0Vycm9yID0gZmFsc2U7DQogICAgICAgICAg
ICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgc2VsZi51bmV4cGVjdGVk
RXJyb3JNZXNzYWdlID0gbWVzc2FnZTsNCiAgICAgICAgICAgIGlmIChzZWxmLmpzVGVzdElzQXN5
bmMpIHsNCiAgICAgICAgICAgICAgICBzZWxmLnRlc3RGYWlsZWQoIlVuZXhwZWN0ZWQgZXJyb3I6
ICIgKyBtZXNzYWdlKTsNCiAgICAgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsNCiAgICAgICAg
ICAgIH0NCiAgICAgICAgfTsNCiAgICB9DQp9KSgpOw0KDQpmdW5jdGlvbiBpc1dvcmtlcigpDQp7
DQogICAgLy8gSXQncyBjb25jZWl2YWJsZSB0aGF0IHNvbWVvbmUgd291bGQgc3R1YiBvdXQgJ2Rv
Y3VtZW50JyBpbiBhIHdvcmtlciBzbw0KICAgIC8vIGFsc28gY2hlY2sgZm9yIGNoaWxkTm9kZXMs
IGFuIGFyYml0cmFyeSBET00tcmVsYXRlZCBvYmplY3QgdGhhdCBpcw0KICAgIC8vIG1lYW5pbmds
ZXNzIGluIGEgV29ya2VyQ29udGV4dC4NCiAgICByZXR1cm4gKHR5cGVvZiBkb2N1bWVudCA9PT0g
J3VuZGVmaW5lZCcgfHwgdHlwZW9mIGRvY3VtZW50LmNoaWxkTm9kZXMgPT09ICd1bmRlZmluZWQn
KSAmJiAhIXNlbGYuaW1wb3J0U2NyaXB0czsNCn0NCg0KZnVuY3Rpb24gZGVzY3JpcHRpb25RdWll
dChtc2cpIHsgZGVzY3JpcHRpb24obXNnLCB0cnVlKTsgfQ0KDQpmdW5jdGlvbiBlc2NhcGVIVE1M
KHRleHQpDQp7DQogICAgcmV0dXJuIHRleHQucmVwbGFjZSgvJi9nLCAiJmFtcDsiKS5yZXBsYWNl
KC88L2csICImbHQ7IikucmVwbGFjZSgvXDAvZywgIlxcMCIpOw0KfQ0KDQpmdW5jdGlvbiB0ZXN0
UGFzc2VkKG1zZykNCnsNCiAgICBkZWJ1ZygnPHNwYW4+PHNwYW4gY2xhc3M9InBhc3MiPlBBU1M8
L3NwYW4+ICcgKyBlc2NhcGVIVE1MKG1zZykgKyAnPC9zcGFuPicpOw0KfQ0KDQpmdW5jdGlvbiB0
ZXN0RmFpbGVkKG1zZykNCnsNCiAgICBkaWRGYWlsU29tZVRlc3RzID0gdHJ1ZTsNCiAgICBkZWJ1
ZygnPHNwYW4+PHNwYW4gY2xhc3M9ImZhaWwiPkZBSUw8L3NwYW4+ICcgKyBlc2NhcGVIVE1MKG1z
ZykgKyAnPC9zcGFuPicpOw0KfQ0KDQpmdW5jdGlvbiBhcmVBcnJheXNFcXVhbChhLCBiKQ0Kew0K
ICAgIHRyeSB7DQogICAgICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpDQogICAgICAgICAg
ICByZXR1cm4gZmFsc2U7DQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkr
KykNCiAgICAgICAgICAgIGlmIChhW2ldICE9PSBiW2ldKQ0KICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsNCiAgICB9IGNhdGNoIChleCkgew0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAg
fQ0KICAgIHJldHVybiB0cnVlOw0KfQ0KDQpmdW5jdGlvbiBpc01pbnVzWmVybyhuKQ0Kew0KICAg
IC8vIHRoZSBvbmx5IHdheSB0byB0ZWxsIDAgZnJvbSAtMCBpbiBKUyBpcyB0aGUgZmFjdCB0aGF0
IDEvLTAgaXMNCiAgICAvLyAtSW5maW5pdHkgaW5zdGVhZCBvZiBJbmZpbml0eQ0KICAgIHJldHVy
biBuID09PSAwICYmIDEvbiA8IDA7DQp9DQoNCmZ1bmN0aW9uIGlzTmV3U1ZHVGVhck9mZlR5cGUo
dikNCnsNCiAgICByZXR1cm4gWydbb2JqZWN0IFNWR0xlbmd0aF0nLCAnW29iamVjdCBTVkdMZW5n
dGhMaXN0XScsICdbb2JqZWN0IFNWR1BvaW50XScsICdbb2JqZWN0IFNWR1BvaW50TGlzdF0nLCAn
W29iamVjdCBTVkdOdW1iZXJdJ10uaW5kZXhPZigiIit2KSAhPSAtMTsNCn0NCg0KZnVuY3Rpb24g
aXNSZXN1bHRDb3JyZWN0KGFjdHVhbCwgZXhwZWN0ZWQpDQp7DQogICAgaWYgKGV4cGVjdGVkID09
PSAwKQ0KICAgICAgICByZXR1cm4gYWN0dWFsID09PSBleHBlY3RlZCAmJiAoMS9hY3R1YWwpID09
PSAoMS9leHBlY3RlZCk7DQogICAgaWYgKGFjdHVhbCA9PT0gZXhwZWN0ZWQpDQogICAgICAgIHJl
dHVybiB0cnVlOw0KICAgIC8vIGh0dHA6Ly9jcmJ1Zy5jb20vMzA4ODE4IDogVGhlIG5ldyBpbXBs
ZW1lbnRhdGlvbiBvZiBTVkdMaXN0UHJvcGVydGllcyBkbyBub3QgbmVjZXNzYXJ5IHJldHVybiB0
aGUgc2FtZSB3cmFwcGVyIG9iamVjdCwgc28gPT09IG9wZXJhdG9yIHdvdWxkIG5vdCB3b3JrLiBX
ZSBjb21wYXJlIGZvciB0aGVpciBzdHJpbmcgcmVwcmVzZW50YXRpb24gaW5zdGVhZC4NCiAgICBp
ZiAoaXNOZXdTVkdUZWFyT2ZmVHlwZShleHBlY3RlZCkgJiYgdHlwZW9mKGV4cGVjdGVkKSA9PSB0
eXBlb2YoYWN0dWFsKSAmJiBhY3R1YWwudmFsdWVBc1N0cmluZyA9PSBleHBlY3RlZC52YWx1ZUFz
U3RyaW5nKQ0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICBpZiAodHlwZW9mKGV4cGVjdGVkKSA9
PSAibnVtYmVyIiAmJiBpc05hTihleHBlY3RlZCkpDQogICAgICAgIHJldHVybiB0eXBlb2YoYWN0
dWFsKSA9PSAibnVtYmVyIiAmJiBpc05hTihhY3R1YWwpOw0KICAgIGlmIChleHBlY3RlZCAmJiAo
T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGV4cGVjdGVkKSA9PSBPYmplY3QucHJvdG90
eXBlLnRvU3RyaW5nLmNhbGwoW10pKSkNCiAgICAgICAgcmV0dXJuIGFyZUFycmF5c0VxdWFsKGFj
dHVhbCwgZXhwZWN0ZWQpOw0KICAgIHJldHVybiBmYWxzZTsNCn0NCg0KZnVuY3Rpb24gc3RyaW5n
aWZ5KHYpDQp7DQogICAgaWYgKGlzTmV3U1ZHVGVhck9mZlR5cGUodikpDQogICAgICAgIHJldHVy
biB2LnZhbHVlQXNTdHJpbmc7DQogICAgaWYgKHYgPT09IDAgJiYgMS92IDwgMCkNCiAgICAgICAg
cmV0dXJuICItMCI7DQogICAgZWxzZSByZXR1cm4gIiIgKyB2Ow0KfQ0KDQpmdW5jdGlvbiBldmFs
QW5kTG9nKF9hLCBfcXVpZXQpDQp7DQogIGlmICh0eXBlb2YgX2EgIT0gInN0cmluZyIpDQogICAg
ZGVidWcoIldBUk46IHRyeUFuZExvZygpIGV4cGVjdHMgYSBzdHJpbmcgYXJndW1lbnQiKTsNCg0K
ICAvLyBMb2cgZmlyc3QgaW4gY2FzZSB0aGluZ3MgZ28gaG9ycmlibHkgd3Jvbmcgb3IgdGhpcyBj
YXVzZXMgYSBzeW5jIGV2ZW50Lg0KICBpZiAoIV9xdWlldCkNCiAgICBkZWJ1ZyhfYSk7DQoNCiAg
dmFyIF9hdjsNCiAgdHJ5IHsNCiAgICAgX2F2ID0gZXZhbChfYSk7DQogIH0gY2F0Y2ggKGUpIHsN
CiAgICB0ZXN0RmFpbGVkKF9hICsgIiB0aHJldyBleGNlcHRpb24gIiArIGUpOw0KICB9DQogIHJl
dHVybiBfYXY7DQp9DQoNCmZ1bmN0aW9uIHNob3VsZEJlKF9hLCBfYiwgX3F1aWV0KQ0Kew0KICAg
IGlmICgodHlwZW9mIF9hICE9ICJmdW5jdGlvbiIgJiYgdHlwZW9mIF9hICE9ICJzdHJpbmciKSB8
fCAodHlwZW9mIF9iICE9ICJmdW5jdGlvbiIgJiYgdHlwZW9mIF9iICE9ICJzdHJpbmciKSkNCiAg
ICAgICAgZGVidWcoIldBUk46IHNob3VsZEJlKCkgZXhwZWN0cyBmdW5jdGlvbiBvciBzdHJpbmcg
YXJndW1lbnRzIik7DQogICAgdmFyIF9leGNlcHRpb247DQogICAgdmFyIF9hdjsNCiAgICB0cnkg
ew0KICAgICAgICBfYXYgPSAodHlwZW9mIF9hID09ICJmdW5jdGlvbiIgPyBfYSgpIDogZXZhbChf
YSkpOw0KICAgIH0gY2F0Y2ggKGUpIHsNCiAgICAgICAgX2V4Y2VwdGlvbiA9IGU7DQogICAgfQ0K
ICAgIHZhciBfYnYgPSAodHlwZW9mIF9iID09ICJmdW5jdGlvbiIgPyBfYigpIDogZXZhbChfYikp
Ow0KDQogICAgaWYgKF9leGNlcHRpb24pDQogICAgICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3Vs
ZCBiZSAiICsgc3RyaW5naWZ5KF9idikgKyAiLiBUaHJldyBleGNlcHRpb24gIiArIF9leGNlcHRp
b24pOw0KICAgIGVsc2UgaWYgKGlzUmVzdWx0Q29ycmVjdChfYXYsIF9idikpIHsNCiAgICAgICAg
aWYgKCFfcXVpZXQpIHsNCiAgICAgICAgICAgIHRlc3RQYXNzZWQoX2EgKyAiIGlzICIgKyAodHlw
ZW9mIF9iID09ICJmdW5jdGlvbiIgPyBfYnYgOiBfYikpOw0KICAgICAgICB9DQogICAgfSBlbHNl
IGlmICh0eXBlb2YoX2F2KSA9PSB0eXBlb2YoX2J2KSkNCiAgICAgICAgdGVzdEZhaWxlZChfYSAr
ICIgc2hvdWxkIGJlICIgKyBzdHJpbmdpZnkoX2J2KSArICIuIFdhcyAiICsgc3RyaW5naWZ5KF9h
dikgKyAiLiIpOw0KICAgIGVsc2UNCiAgICAgICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIGJl
ICIgKyBzdHJpbmdpZnkoX2J2KSArICIgKG9mIHR5cGUgIiArIHR5cGVvZiBfYnYgKyAiKS4gV2Fz
ICIgKyBfYXYgKyAiIChvZiB0eXBlICIgKyB0eXBlb2YgX2F2ICsgIikuIik7DQp9DQoNCmZ1bmN0
aW9uIHNob3VsZEJlT25lT2ZWYWx1ZXMoX2EsIF92YWx1ZXMpDQp7DQogICAgaWYgKCh0eXBlb2Yg
X2EgIT0gImZ1bmN0aW9uIiAmJiB0eXBlb2YgX2EgIT0gInN0cmluZyIpKQ0KICAgICAgICBkZWJ1
ZygiV0FSTjogc2hvdWxkQmVPbmVPZlZhbHVlcygpIGV4cGVjdHMgdGhlIGZpcnN0IGFyZ3VtZW50
IHRvIGJlIGEgZnVuY3Rpb24gb3IgYSBzdHJpbmciKTsNCiAgICBpZiAoIUFycmF5LmlzQXJyYXko
X3ZhbHVlcykpIHsNCiAgICAgICAgdGVzdEZhaWxlZCgiVGhlIHNlY29uZCBhcmd1bWVudCB0byBz
aG91bGRCZU9uZU9mVmFsdWVzKCkgbXVzdCBiZSBhbiBhcnJheSBvZiB2YWx1ZXMiKTsNCiAgICAg
ICAgcmV0dXJuOw0KICAgIH0NCg0KICAgIHZhciBfZXhjZXB0aW9uOw0KICAgIHZhciBfYXY7DQog
ICAgdHJ5IHsNCiAgICAgICAgX2F2ID0gKHR5cGVvZiBfYSA9PSAiZnVuY3Rpb24iID8gX2EoKSA6
IGV2YWwoX2EpKTsNCiAgICB9IGNhdGNoIChlKSB7DQogICAgICAgIF9leGNlcHRpb24gPSBlOw0K
ICAgIH0NCg0KICAgIHZhciBzdHJpbmdpZmllZFZhbHVlcyA9ICcnOw0KICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgX3ZhbHVlcy5sZW5ndGg7ICsraSkgew0KICAgICAgICBpZiAoaSkgew0KICAgICAg
ICAgICAgaWYgKGkgKyAxID09IF92YWx1ZXMubGVuZ3RoKQ0KICAgICAgICAgICAgICAgIHN0cmlu
Z2lmaWVkVmFsdWVzICs9ICcsIGFuZCAnOw0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAg
ICAgIHN0cmluZ2lmaWVkVmFsdWVzICs9ICcsJw0KICAgICAgICB9DQogICAgICAgIHN0cmluZ2lm
aWVkVmFsdWVzICs9ICJgIiArIHN0cmluZ2lmeShfdmFsdWVzW2ldKSArICJgIjsNCiAgICB9DQog
ICAgaWYgKF9leGNlcHRpb24pDQogICAgICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBiZSBv
bmUgb2YgIiArIHN0cmluZ2lmaWVkVmFsdWVzICsgIi4gVGhyZXcgZXhjZXB0aW9uICIgKyBfZXhj
ZXB0aW9uKTsNCiAgICBlbHNlIHsNCiAgICAgICAgdmFyIG1hdGNoZWRWYWx1ZSA9IF92YWx1ZXMu
ZmluZChmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIGlzUmVzdWx0Q29ycmVjdChfYXYsIHZhbHVl
KTsgfSk7DQogICAgICAgIGlmIChtYXRjaGVkVmFsdWUgIT09IHVuZGVmaW5lZCkgew0KICAgICAg
ICAgICAgdGVzdFBhc3NlZChfYSArICIgaXMgb25lIG9mICIgKyBzdHJpbmdpZmllZFZhbHVlcyk7
DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91bGQg
YmUgb25lIG9mICIgKyBzdHJpbmdpZmllZFZhbHVlcyArICIuIFdhcyAiICsgc3RyaW5naWZ5KF9h
dikgKyAiLiIpOw0KICAgICAgICB9DQogICAgfQ0KfQ0KDQovLyBFeGVjdXRlIGNvbmRpdGlvbiBl
dmVyeSA1IG1pbGxpc2Vjb25kcyB1bnRpbCBpdCBzdWNjZWVkcy4NCmZ1bmN0aW9uIF93YWl0Rm9y
Q29uZGl0aW9uKGNvbmRpdGlvbiwgY29tcGxldGlvbkhhbmRsZXIpDQp7DQogIGlmIChjb25kaXRp
b24oKSkNCiAgICBjb21wbGV0aW9uSGFuZGxlcigpOw0KICBlbHNlDQogICAgc2V0VGltZW91dChf
d2FpdEZvckNvbmRpdGlvbiwgNSwgY29uZGl0aW9uLCBjb21wbGV0aW9uSGFuZGxlcik7DQp9DQoN
CmZ1bmN0aW9uIHNob3VsZEJlY29tZUVxdWFsKF9hLCBfYiwgY29tcGxldGlvbkhhbmRsZXIpDQp7
DQogIGlmICh0eXBlb2YgX2EgIT0gInN0cmluZyIgfHwgdHlwZW9mIF9iICE9ICJzdHJpbmciKQ0K
ICAgIGRlYnVnKCJXQVJOOiBzaG91bGRCZWNvbWVFcXVhbCgpIGV4cGVjdHMgc3RyaW5nIGFyZ3Vt
ZW50cyIpOw0KDQogIGZ1bmN0aW9uIGNvbmRpdGlvbigpIHsNCiAgICB2YXIgZXhjZXB0aW9uOw0K
ICAgIHZhciBfYXY7DQogICAgdHJ5IHsNCiAgICAgIF9hdiA9IGV2YWwoX2EpOw0KICAgIH0gY2F0
Y2ggKGUpIHsNCiAgICAgIGV4Y2VwdGlvbiA9IGU7DQogICAgfQ0KICAgIHZhciBfYnYgPSBldmFs
KF9iKTsNCiAgICBpZiAoZXhjZXB0aW9uKQ0KICAgICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxk
IGJlY29tZSAiICsgX2J2ICsgIi4gVGhyZXcgZXhjZXB0aW9uICIgKyBleGNlcHRpb24pOw0KICAg
IGlmIChpc1Jlc3VsdENvcnJlY3QoX2F2LCBfYnYpKSB7DQogICAgICB0ZXN0UGFzc2VkKF9hICsg
IiBiZWNhbWUgIiArIF9iKTsNCiAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCiAgICByZXR1cm4g
ZmFsc2U7DQogIH0NCg0KICBpZiAoIWNvbXBsZXRpb25IYW5kbGVyKQ0KICAgIHJldHVybiBuZXcg
UHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQoX3dhaXRGb3JDb25kaXRpb24sIDAsIGNvbmRp
dGlvbiwgcmVzb2x2ZSkpOw0KDQogIHNldFRpbWVvdXQoX3dhaXRGb3JDb25kaXRpb24sIDAsIGNv
bmRpdGlvbiwgY29tcGxldGlvbkhhbmRsZXIpOw0KfQ0KDQpmdW5jdGlvbiBzaG91bGRCZWNvbWVF
cXVhbFRvU3RyaW5nKHZhbHVlLCByZWZlcmVuY2UsIGNvbXBsZXRpb25IYW5kbGVyKQ0Kew0KICBp
ZiAodHlwZW9mIHZhbHVlICE9PSAic3RyaW5nIiB8fCB0eXBlb2YgcmVmZXJlbmNlICE9PSAic3Ry
aW5nIikNCiAgICBkZWJ1ZygiV0FSTjogc2hvdWxkQmVjb21lRXF1YWxUb1N0cmluZygpIGV4cGVj
dHMgc3RyaW5nIGFyZ3VtZW50cyIpOw0KICB2YXIgdW5ldmFsZWRTdHJpbmcgPSBKU09OLnN0cmlu
Z2lmeShyZWZlcmVuY2UpOw0KICBzaG91bGRCZWNvbWVFcXVhbCh2YWx1ZSwgdW5ldmFsZWRTdHJp
bmcsIGNvbXBsZXRpb25IYW5kbGVyKTsNCn0NCg0KZnVuY3Rpb24gc2hvdWxkQmVUeXBlKF9hLCBf
dHlwZSkgew0KICB2YXIgX2V4Y2VwdGlvbjsNCiAgdmFyIF9hdjsNCiAgdHJ5IHsNCiAgICBfYXYg
PSBldmFsKF9hKTsNCiAgfSBjYXRjaCAoZSkgew0KICAgIF9leGNlcHRpb24gPSBlOw0KICB9DQoN
CiAgdmFyIF90eXBldiA9IGV2YWwoX3R5cGUpOw0KICBpZiAoX2F2IGluc3RhbmNlb2YgX3R5cGV2
KSB7DQogICAgdGVzdFBhc3NlZChfYSArICIgaXMgYW4gaW5zdGFuY2Ugb2YgIiArIF90eXBlKTsN
CiAgfSBlbHNlIHsNCiAgICB0ZXN0RmFpbGVkKF9hICsgIiBpcyBub3QgYW4gaW5zdGFuY2Ugb2Yg
IiArIF90eXBlKTsNCiAgfQ0KfQ0KDQovLyBWYXJpYW50IG9mIHNob3VsZEJlKCktLWNvbmZpcm1z
IHRoYXQgcmVzdWx0IG9mIGV2YWwoX3RvX2V2YWwpIGlzIHdpdGhpbg0KLy8gbnVtZXJpYyBfdG9s
ZXJhbmNlIG9mIG51bWVyaWMgX3RhcmdldC4NCmZ1bmN0aW9uIHNob3VsZEJlQ2xvc2VUbyhfdG9f
ZXZhbCwgX3RhcmdldCwgX3RvbGVyYW5jZSwgX3F1aWV0KQ0Kew0KICBpZiAodHlwZW9mIF90b19l
dmFsICE9ICJzdHJpbmciKSB7DQogICAgdGVzdEZhaWxlZCgic2hvdWxkQmVDbG9zZVRvKCkgcmVx
dWlyZXMgc3RyaW5nIGFyZ3VtZW50IF90b19ldmFsLiB3YXMgdHlwZSAiICsgdHlwZW9mIF90b19l
dmFsKTsNCiAgICByZXR1cm47DQogIH0NCiAgaWYgKHR5cGVvZiBfdGFyZ2V0ICE9ICJudW1iZXIi
KSB7DQogICAgdGVzdEZhaWxlZCgic2hvdWxkQmVDbG9zZVRvKCkgcmVxdWlyZXMgbnVtZXJpYyBh
cmd1bWVudCBfdGFyZ2V0LiB3YXMgdHlwZSAiICsgdHlwZW9mIF90YXJnZXQpOw0KICAgIHJldHVy
bjsNCiAgfQ0KICBpZiAodHlwZW9mIF90b2xlcmFuY2UgIT0gIm51bWJlciIpIHsNCiAgICB0ZXN0
RmFpbGVkKCJzaG91bGRCZUNsb3NlVG8oKSByZXF1aXJlcyBudW1lcmljIGFyZ3VtZW50IF90b2xl
cmFuY2UuIHdhcyB0eXBlICIgKyB0eXBlb2YgX3RvbGVyYW5jZSk7DQogICAgcmV0dXJuOw0KICB9
DQoNCiAgdmFyIF9yZXN1bHQ7DQogIHRyeSB7DQogICAgIF9yZXN1bHQgPSBldmFsKF90b19ldmFs
KTsNCiAgfSBjYXRjaCAoZSkgew0KICAgIHRlc3RGYWlsZWQoX3RvX2V2YWwgKyAiIHNob3VsZCBi
ZSB3aXRoaW4gIiArIF90b2xlcmFuY2UgKyAiIG9mICINCiAgICAgICAgICAgICAgICsgX3Rhcmdl
dCArICIuIFRocmV3IGV4Y2VwdGlvbiAiICsgZSk7DQogICAgcmV0dXJuOw0KICB9DQoNCiAgaWYg
KHR5cGVvZihfcmVzdWx0KSAhPSB0eXBlb2YoX3RhcmdldCkpIHsNCiAgICB0ZXN0RmFpbGVkKF90
b19ldmFsICsgIiBzaG91bGQgYmUgb2YgdHlwZSAiICsgdHlwZW9mIF90YXJnZXQNCiAgICAgICAg
ICAgICAgICsgIiBidXQgd2FzIG9mIHR5cGUgIiArIHR5cGVvZiBfcmVzdWx0KTsNCiAgfSBlbHNl
IGlmIChNYXRoLmFicyhfcmVzdWx0IC0gX3RhcmdldCkgPD0gX3RvbGVyYW5jZSkgew0KICAgIGlm
ICghX3F1aWV0KSB7DQogICAgICAgIHRlc3RQYXNzZWQoX3RvX2V2YWwgKyAiIGlzIHdpdGhpbiAi
ICsgX3RvbGVyYW5jZSArICIgb2YgIiArIF90YXJnZXQpOw0KICAgIH0NCiAgfSBlbHNlIHsNCiAg
ICB0ZXN0RmFpbGVkKF90b19ldmFsICsgIiBzaG91bGQgYmUgd2l0aGluICIgKyBfdG9sZXJhbmNl
ICsgIiBvZiAiICsgX3RhcmdldA0KICAgICAgICAgICAgICAgKyAiLiBXYXMgIiArIF9yZXN1bHQg
KyAiLiIpOw0KICB9DQp9DQoNCmZ1bmN0aW9uIHNob3VsZE5vdEJlKF9hLCBfYiwgX3F1aWV0KQ0K
ew0KICAgIGlmICgodHlwZW9mIF9hICE9ICJmdW5jdGlvbiIgJiYgdHlwZW9mIF9hICE9ICJzdHJp
bmciKSB8fCAodHlwZW9mIF9iICE9ICJmdW5jdGlvbiIgJiYgdHlwZW9mIF9iICE9ICJzdHJpbmci
KSkNCiAgICAgICAgZGVidWcoIldBUk46IHNob3VsZE5vdEJlKCkgZXhwZWN0cyBmdW5jdGlvbiBv
ciBzdHJpbmcgYXJndW1lbnRzIik7DQogICAgdmFyIF9leGNlcHRpb247DQogICAgdmFyIF9hdjsN
CiAgICB0cnkgew0KICAgICAgICBfYXYgPSAodHlwZW9mIF9hID09ICJmdW5jdGlvbiIgPyBfYSgp
IDogZXZhbChfYSkpOw0KICAgIH0gY2F0Y2ggKGUpIHsNCiAgICAgICAgX2V4Y2VwdGlvbiA9IGU7
DQogICAgfQ0KICAgIHZhciBfYnYgPSAodHlwZW9mIF9iID09ICJmdW5jdGlvbiIgPyBfYigpIDog
ZXZhbChfYikpOw0KDQogICAgaWYgKF9leGNlcHRpb24pDQogICAgICAgIHRlc3RGYWlsZWQoX2Eg
KyAiIHNob3VsZCBub3QgYmUgIiArIF9idiArICIuIFRocmV3IGV4Y2VwdGlvbiAiICsgX2V4Y2Vw
dGlvbik7DQogICAgZWxzZSBpZiAoIWlzUmVzdWx0Q29ycmVjdChfYXYsIF9idikpIHsNCiAgICAg
ICAgaWYgKCFfcXVpZXQpIHsNCiAgICAgICAgICAgIHRlc3RQYXNzZWQoX2EgKyAiIGlzIG5vdCAi
ICsgKHR5cGVvZiBfYiA9PSAiZnVuY3Rpb24iID8gX2J2IDogX2IpKTsNCiAgICAgICAgfQ0KICAg
IH0gZWxzZQ0KICAgICAgICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91bGQgbm90IGJlICIgKyBfYnYg
KyAiLiIpOw0KfQ0KDQpmdW5jdGlvbiBzaG91bGRCZWNvbWVEaWZmZXJlbnQoX2EsIF9iLCBjb21w
bGV0aW9uSGFuZGxlcikNCnsNCiAgaWYgKHR5cGVvZiBfYSAhPSAic3RyaW5nIiB8fCB0eXBlb2Yg
X2IgIT0gInN0cmluZyIpDQogICAgZGVidWcoIldBUk46IHNob3VsZEJlY29tZURpZmZlcmVudCgp
IGV4cGVjdHMgc3RyaW5nIGFyZ3VtZW50cyIpOw0KDQogIGZ1bmN0aW9uIGNvbmRpdGlvbigpIHsN
CiAgICB2YXIgZXhjZXB0aW9uOw0KICAgIHZhciBfYXY7DQogICAgdHJ5IHsNCiAgICAgIF9hdiA9
IGV2YWwoX2EpOw0KICAgIH0gY2F0Y2ggKGUpIHsNCiAgICAgIGV4Y2VwdGlvbiA9IGU7DQogICAg
fQ0KICAgIHZhciBfYnYgPSBldmFsKF9iKTsNCiAgICBpZiAoZXhjZXB0aW9uKQ0KICAgICAgdGVz
dEZhaWxlZChfYSArICIgc2hvdWxkIGJlY2FtZSBub3QgZXF1YWwgdG8gIiArIF9idiArICIuIFRo
cmV3IGV4Y2VwdGlvbiAiICsgZXhjZXB0aW9uKTsNCiAgICBpZiAoIWlzUmVzdWx0Q29ycmVjdChf
YXYsIF9idikpIHsNCiAgICAgIHRlc3RQYXNzZWQoX2EgKyAiIGJlY2FtZSBkaWZmZXJlbnQgZnJv
bSAiICsgX2IpOw0KICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KICAgIHJldHVybiBmYWxzZTsN
CiAgfQ0KDQogIGlmICghY29tcGxldGlvbkhhbmRsZXIpDQogICAgcmV0dXJuIG5ldyBQcm9taXNl
KHJlc29sdmUgPT4gc2V0VGltZW91dChfd2FpdEZvckNvbmRpdGlvbiwgMCwgY29uZGl0aW9uLCBy
ZXNvbHZlKSk7DQoNCiAgc2V0VGltZW91dChfd2FpdEZvckNvbmRpdGlvbiwgMCwgY29uZGl0aW9u
LCBjb21wbGV0aW9uSGFuZGxlcik7DQp9DQoNCmZ1bmN0aW9uIHNob3VsZEJlVHJ1ZShhLCBxdWll
dCkgeyBzaG91bGRCZShhLCAidHJ1ZSIsIHF1aWV0KTsgfQ0KZnVuY3Rpb24gc2hvdWxkQmVUcnVl
UXVpZXQoYSkgeyBzaG91bGRCZShhLCAidHJ1ZSIsIHRydWUpOyB9DQpmdW5jdGlvbiBzaG91bGRC
ZUZhbHNlKGEsIHF1aWV0KSB7IHNob3VsZEJlKGEsICJmYWxzZSIsIHF1aWV0KTsgfQ0KZnVuY3Rp
b24gc2hvdWxkQmVOYU4oYSwgcXVpZXQpIHsgc2hvdWxkQmUoYSwgIk5hTiIsIHF1aWV0KTsgfQ0K
ZnVuY3Rpb24gc2hvdWxkQmVOdWxsKGEsIHF1aWV0KSB7IHNob3VsZEJlKGEsICJudWxsIiwgcXVp
ZXQpOyB9DQpmdW5jdGlvbiBzaG91bGRCZVplcm8oYSwgcXVpZXQpIHsgc2hvdWxkQmUoYSwgIjAi
LCBxdWlldCk7IH0NCg0KZnVuY3Rpb24gc2hvdWxkQmVFcXVhbFRvU3RyaW5nKGEsIGIpDQp7DQog
IGlmICh0eXBlb2YgYSAhPT0gInN0cmluZyIgfHwgdHlwZW9mIGIgIT09ICJzdHJpbmciKQ0KICAg
IGRlYnVnKCJXQVJOOiBzaG91bGRCZUVxdWFsVG9TdHJpbmcoKSBleHBlY3RzIHN0cmluZyBhcmd1
bWVudHMiKTsNCiAgdmFyIHVuZXZhbGVkU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoYik7DQogIHNo
b3VsZEJlKGEsIHVuZXZhbGVkU3RyaW5nKTsNCn0NCg0KZnVuY3Rpb24gc2hvdWxkQmVFcXVhbFRv
TnVtYmVyKGEsIGIpDQp7DQogIGlmICh0eXBlb2YgYSAhPT0gInN0cmluZyIgfHwgdHlwZW9mIGIg
IT09ICJudW1iZXIiKQ0KICAgIGRlYnVnKCJXQVJOOiBzaG91bGRCZUVxdWFsVG9OdW1iZXIoKSBl
eHBlY3RzIGEgc3RyaW5nIGFuZCBhIG51bWJlciBhcmd1bWVudHMiKTsNCiAgdmFyIHVuZXZhbGVk
U3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoYik7DQogIHNob3VsZEJlKGEsIHVuZXZhbGVkU3RyaW5n
KTsNCn0NCg0KZnVuY3Rpb24gc2hvdWxkQmVFbXB0eVN0cmluZyhhKSB7IHNob3VsZEJlRXF1YWxU
b1N0cmluZyhhLCAiIik7IH0NCg0KZnVuY3Rpb24gc2hvdWxkRXZhbHVhdGVUbyhhY3R1YWwsIGV4
cGVjdGVkKSB7DQogIC8vIEEgZ2VuZXJhbC1wdXJwb3NlIGNvbXBhcmF0b3IuICAnYWN0dWFsJyBz
aG91bGQgYmUgYSBzdHJpbmcgdG8gYmUNCiAgLy8gZXZhbHVhdGVkLCBhcyBmb3Igc2hvdWxkQmUo
KS4gJ2V4cGVjdGVkJyBtYXkgYmUgYW55IHR5cGUgYW5kIHdpbGwgYmUNCiAgLy8gdXNlZCB3aXRo
b3V0IGJlaW5nIGV2YWwnZWQuDQogIGlmIChleHBlY3RlZCA9PSBudWxsKSB7DQogICAgLy8gRG8g
dGhpcyBiZWZvcmUgdGhlIG9iamVjdCB0ZXN0LCBzaW5jZSBudWxsIGlzIG9mIHR5cGUgJ29iamVj
dCcuDQogICAgc2hvdWxkQmVOdWxsKGFjdHVhbCk7DQogIH0gZWxzZSBpZiAodHlwZW9mIGV4cGVj
dGVkID09ICJ1bmRlZmluZWQiKSB7DQogICAgc2hvdWxkQmVVbmRlZmluZWQoYWN0dWFsKTsNCiAg
fSBlbHNlIGlmICh0eXBlb2YgZXhwZWN0ZWQgPT0gImZ1bmN0aW9uIikgew0KICAgIC8vIEFsbCB0
aGlzIGZ1c3MgaXMgdG8gYXZvaWQgdGhlIHN0cmluZy1hcmcgd2FybmluZyBmcm9tIHNob3VsZEJl
KCkuDQogICAgdHJ5IHsNCiAgICAgIHZhciBhY3R1YWxWYWx1ZSA9IGV2YWwoYWN0dWFsKTsNCiAg
ICB9IGNhdGNoIChlKSB7DQogICAgICB0ZXN0RmFpbGVkKCJFdmFsdWF0aW5nICIgKyBhY3R1YWwg
KyAiOiBUaHJldyBleGNlcHRpb24gIiArIGUpOw0KICAgICAgcmV0dXJuOw0KICAgIH0NCiAgICBz
aG91bGRCZSgiJyIgKyBhY3R1YWxWYWx1ZS50b1N0cmluZygpLnJlcGxhY2UoL1xuL2csICIiKSAr
ICInIiwNCiAgICAgICAgICAgICAiJyIgKyBleHBlY3RlZC50b1N0cmluZygpLnJlcGxhY2UoL1xu
L2csICIiKSArICInIik7DQogIH0gZWxzZSBpZiAodHlwZW9mIGV4cGVjdGVkID09ICJvYmplY3Qi
KSB7DQogICAgc2hvdWxkQmVUcnVlKGFjdHVhbCArICIgPT0gJyIgKyBleHBlY3RlZCArICInIik7
DQogIH0gZWxzZSBpZiAodHlwZW9mIGV4cGVjdGVkID09ICJzdHJpbmciKSB7DQogICAgc2hvdWxk
QmUoYWN0dWFsLCBleHBlY3RlZCk7DQogIH0gZWxzZSBpZiAodHlwZW9mIGV4cGVjdGVkID09ICJi
b29sZWFuIikgew0KICAgIHNob3VsZEJlKCJ0eXBlb2YgIiArIGFjdHVhbCwgIidib29sZWFuJyIp
Ow0KICAgIGlmIChleHBlY3RlZCkNCiAgICAgIHNob3VsZEJlVHJ1ZShhY3R1YWwpOw0KICAgIGVs
c2UNCiAgICAgIHNob3VsZEJlRmFsc2UoYWN0dWFsKTsNCiAgfSBlbHNlIGlmICh0eXBlb2YgZXhw
ZWN0ZWQgPT0gIm51bWJlciIpIHsNCiAgICBzaG91bGRCZShhY3R1YWwsIHN0cmluZ2lmeShleHBl
Y3RlZCkpOw0KICB9IGVsc2Ugew0KICAgIGRlYnVnKGV4cGVjdGVkICsgIiBpcyB1bmtub3duIHR5
cGUgIiArIHR5cGVvZiBleHBlY3RlZCk7DQogICAgc2hvdWxkQmVUcnVlKGFjdHVhbCwgIiciICAr
ZXhwZWN0ZWQudG9TdHJpbmcoKSArICInIik7DQogIH0NCn0NCg0KZnVuY3Rpb24gc2hvdWxkQmVO
b25aZXJvKF9hKQ0Kew0KICB2YXIgX2V4Y2VwdGlvbjsNCiAgdmFyIF9hdjsNCiAgdHJ5IHsNCiAg
ICAgX2F2ID0gZXZhbChfYSk7DQogIH0gY2F0Y2ggKGUpIHsNCiAgICAgX2V4Y2VwdGlvbiA9IGU7
DQogIH0NCg0KICBpZiAoX2V4Y2VwdGlvbikNCiAgICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91bGQg
YmUgbm9uLXplcm8uIFRocmV3IGV4Y2VwdGlvbiAiICsgX2V4Y2VwdGlvbik7DQogIGVsc2UgaWYg
KF9hdiAhPSAwKQ0KICAgIHRlc3RQYXNzZWQoX2EgKyAiIGlzIG5vbi16ZXJvLiIpOw0KICBlbHNl
DQogICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIGJlIG5vbi16ZXJvLiBXYXMgIiArIF9hdik7
DQp9DQoNCmZ1bmN0aW9uIHNob3VsZEJlTm9uTnVsbChfYSkNCnsNCiAgdmFyIF9leGNlcHRpb247
DQogIHZhciBfYXY7DQogIHRyeSB7DQogICAgIF9hdiA9IGV2YWwoX2EpOw0KICB9IGNhdGNoIChl
KSB7DQogICAgIF9leGNlcHRpb24gPSBlOw0KICB9DQoNCiAgaWYgKF9leGNlcHRpb24pDQogICAg
dGVzdEZhaWxlZChfYSArICIgc2hvdWxkIGJlIG5vbi1udWxsLiBUaHJldyBleGNlcHRpb24gIiAr
IF9leGNlcHRpb24pOw0KICBlbHNlIGlmIChfYXYgIT0gbnVsbCkNCiAgICB0ZXN0UGFzc2VkKF9h
ICsgIiBpcyBub24tbnVsbC4iKTsNCiAgZWxzZQ0KICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3Vs
ZCBiZSBub24tbnVsbC4gV2FzICIgKyBfYXYpOw0KfQ0KDQpmdW5jdGlvbiBzaG91bGRCZVVuZGVm
aW5lZChfYSkNCnsNCiAgdmFyIF9leGNlcHRpb247DQogIHZhciBfYXY7DQogIHRyeSB7DQogICAg
IF9hdiA9IGV2YWwoX2EpOw0KICB9IGNhdGNoIChlKSB7DQogICAgICBfZXhjZXB0aW9uID0gZTsN
CiAgfQ0KDQogIGlmIChfZXhjZXB0aW9uKQ0KICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBi
ZSB1bmRlZmluZWQuIFRocmV3IGV4Y2VwdGlvbiAiICsgX2V4Y2VwdGlvbik7DQogIGVsc2UgaWYg
KHR5cGVvZiBfYXYgPT0gInVuZGVmaW5lZCIpDQogICAgdGVzdFBhc3NlZChfYSArICIgaXMgdW5k
ZWZpbmVkLiIpOw0KICBlbHNlDQogICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIGJlIHVuZGVm
aW5lZC4gV2FzICIgKyBfYXYpOw0KfQ0KDQpmdW5jdGlvbiBzaG91bGRCZURlZmluZWQoX2EpDQp7
DQogIHZhciBfZXhjZXB0aW9uOw0KICB2YXIgX2F2Ow0KICB0cnkgew0KICAgICBfYXYgPSBldmFs
KF9hKTsNCiAgfSBjYXRjaCAoZSkgew0KICAgICBfZXhjZXB0aW9uID0gZTsNCiAgfQ0KDQogIGlm
IChfZXhjZXB0aW9uKQ0KICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBiZSBkZWZpbmVkLiBU
aHJldyBleGNlcHRpb24gIiArIF9leGNlcHRpb24pOw0KICBlbHNlIGlmIChfYXYgIT09IHVuZGVm
aW5lZCkNCiAgICB0ZXN0UGFzc2VkKF9hICsgIiBpcyBkZWZpbmVkLiIpOw0KICBlbHNlDQogICAg
dGVzdEZhaWxlZChfYSArICIgc2hvdWxkIGJlIGRlZmluZWQuIFdhcyAiICsgX2F2KTsNCn0NCg0K
ZnVuY3Rpb24gc2hvdWxkQmVHcmVhdGVyVGhhbk9yRXF1YWwoX2EsIF9iKSB7DQogICAgaWYgKHR5
cGVvZiBfYSAhPSAic3RyaW5nIiB8fCB0eXBlb2YgX2IgIT0gInN0cmluZyIpDQogICAgICAgIGRl
YnVnKCJXQVJOOiBzaG91bGRCZUdyZWF0ZXJUaGFuT3JFcXVhbCBleHBlY3RzIHN0cmluZyBhcmd1
bWVudHMiKTsNCg0KICAgIHZhciBfZXhjZXB0aW9uOw0KICAgIHZhciBfYXY7DQogICAgdHJ5IHsN
CiAgICAgICAgX2F2ID0gZXZhbChfYSk7DQogICAgfSBjYXRjaCAoZSkgew0KICAgICAgICBfZXhj
ZXB0aW9uID0gZTsNCiAgICB9DQogICAgdmFyIF9idiA9IGV2YWwoX2IpOw0KDQogICAgaWYgKF9l
eGNlcHRpb24pDQogICAgICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBiZSA+PSAiICsgX2Ig
KyAiLiBUaHJldyBleGNlcHRpb24gIiArIF9leGNlcHRpb24pOw0KICAgIGVsc2UgaWYgKHR5cGVv
ZiBfYXYgPT0gInVuZGVmaW5lZCIgfHwgX2F2IDwgX2J2KQ0KICAgICAgICB0ZXN0RmFpbGVkKF9h
ICsgIiBzaG91bGQgYmUgPj0gIiArIF9iICsgIi4gV2FzICIgKyBfYXYgKyAiIChvZiB0eXBlICIg
KyB0eXBlb2YgX2F2ICsgIikuIik7DQogICAgZWxzZQ0KICAgICAgICB0ZXN0UGFzc2VkKF9hICsg
IiBpcyA+PSAiICsgX2IpOw0KfQ0KDQpmdW5jdGlvbiBzaG91bGRCZUxlc3NUaGFuT3JFcXVhbChf
YSwgX2IpIHsNCiAgICBpZiAodHlwZW9mIF9hICE9ICJzdHJpbmciIHx8IHR5cGVvZiBfYiAhPSAi
c3RyaW5nIikNCiAgICAgICAgZGVidWcoIldBUk46IHNob3VsZEJlTGVzc1RoYW5PckVxdWFsIGV4
cGVjdHMgc3RyaW5nIGFyZ3VtZW50cyIpOw0KDQogICAgdmFyIF9leGNlcHRpb247DQogICAgdmFy
IF9hdjsNCiAgICB0cnkgew0KICAgICAgICBfYXYgPSBldmFsKF9hKTsNCiAgICB9IGNhdGNoIChl
KSB7DQogICAgICAgIF9leGNlcHRpb24gPSBlOw0KICAgIH0NCiAgICB2YXIgX2J2ID0gZXZhbChf
Yik7DQoNCiAgICBpZiAoX2V4Y2VwdGlvbikNCiAgICAgICAgdGVzdEZhaWxlZChfYSArICIgc2hv
dWxkIGJlIDw9ICIgKyBfYiArICIuIFRocmV3IGV4Y2VwdGlvbiAiICsgX2V4Y2VwdGlvbik7DQog
ICAgZWxzZSBpZiAodHlwZW9mIF9hdiA9PSAidW5kZWZpbmVkIiB8fCBfYXYgPiBfYnYpDQogICAg
ICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBiZSA8PSAiICsgX2IgKyAiLiBXYXMgIiArIF9h
diArICIgKG9mIHR5cGUgIiArIHR5cGVvZiBfYXYgKyAiKS4iKTsNCiAgICBlbHNlDQogICAgICAg
IHRlc3RQYXNzZWQoX2EgKyAiIGlzIDw9ICIgKyBfYik7DQp9DQoNCmZ1bmN0aW9uIGV4cGVjdFRy
dWUodiwgbXNnKSB7DQogIGlmICh2KSB7DQogICAgdGVzdFBhc3NlZChtc2cpOw0KICB9IGVsc2Ug
ew0KICAgIHRlc3RGYWlsZWQobXNnKTsNCiAgfQ0KfQ0KDQpmdW5jdGlvbiBzaG91bGROb3RUaHJv
dyhfYSwgX21lc3NhZ2UpIHsNCiAgICB0cnkgew0KICAgICAgICB0eXBlb2YgX2EgPT0gImZ1bmN0
aW9uIiA/IF9hKCkgOiBldmFsKF9hKTsNCiAgICAgICAgdGVzdFBhc3NlZCgoX21lc3NhZ2UgPyBf
bWVzc2FnZSA6IF9hKSArICIgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uIik7DQogICAgfSBjYXRj
aCAoZSkgew0KICAgICAgICB0ZXN0RmFpbGVkKChfbWVzc2FnZSA/IF9tZXNzYWdlIDogX2EpICsg
IiBzaG91bGQgbm90IHRocm93IGV4Y2VwdGlvbi4gVGhyZXcgZXhjZXB0aW9uICIgKyBlICsgIi4i
KTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIHNob3VsZFRocm93KF9hLCBfZSwgX21lc3NhZ2UpDQp7
DQogICAgdmFyIF9leGNlcHRpb247DQogICAgdmFyIF9hdjsNCiAgICB0cnkgew0KICAgICAgICBf
YXYgPSB0eXBlb2YgX2EgPT0gImZ1bmN0aW9uIiA/IF9hKCkgOiBldmFsKF9hKTsNCiAgICB9IGNh
dGNoIChlKSB7DQogICAgICAgIF9leGNlcHRpb24gPSBlOw0KICAgIH0NCg0KICAgIHZhciBfZXY7
DQogICAgaWYgKF9lKQ0KICAgICAgICBfZXYgPSBldmFsKF9lKTsNCg0KICAgIGlmIChfZXhjZXB0
aW9uKSB7DQogICAgICAgIGlmICh0eXBlb2YgX2UgPT0gInVuZGVmaW5lZCIgfHwgX2V4Y2VwdGlv
biA9PSBfZXYpDQogICAgICAgICAgICB0ZXN0UGFzc2VkKChfbWVzc2FnZSA/IF9tZXNzYWdlIDog
X2EpICsgIiB0aHJldyBleGNlcHRpb24gIiArIF9leGNlcHRpb24gKyAiLiIpOw0KICAgICAgICBl
bHNlDQogICAgICAgICAgICB0ZXN0RmFpbGVkKChfbWVzc2FnZSA/IF9tZXNzYWdlIDogX2EpICsg
IiBzaG91bGQgdGhyb3cgIiArICh0eXBlb2YgX2UgPT0gInVuZGVmaW5lZCIgPyAiYW4gZXhjZXB0
aW9uIiA6IF9ldikgKyAiLiBUaHJldyBleGNlcHRpb24gIiArIF9leGNlcHRpb24gKyAiLiIpOw0K
ICAgIH0gZWxzZSBpZiAodHlwZW9mIF9hdiA9PSAidW5kZWZpbmVkIikNCiAgICAgICAgdGVzdEZh
aWxlZCgoX21lc3NhZ2UgPyBfbWVzc2FnZSA6IF9hKSArICIgc2hvdWxkIHRocm93ICIgKyAodHlw
ZW9mIF9lID09ICJ1bmRlZmluZWQiID8gImFuIGV4Y2VwdGlvbiIgOiBfZXYpICsgIi4gV2FzIHVu
ZGVmaW5lZC4iKTsNCiAgICBlbHNlDQogICAgICAgIHRlc3RGYWlsZWQoKF9tZXNzYWdlID8gX21l
c3NhZ2UgOiBfYSkgKyAiIHNob3VsZCB0aHJvdyAiICsgKHR5cGVvZiBfZSA9PSAidW5kZWZpbmVk
IiA/ICJhbiBleGNlcHRpb24iIDogX2V2KSArICIuIFdhcyAiICsgX2F2ICsgIi4iKTsNCn0NCg0K
ZnVuY3Rpb24gc2hvdWxkQmVOb3coYSwgZGVsdGEpDQp7DQogICAgLy8gUmlnaHQgbm93LCBWOCBh
bmQgQ2hyb21pdW0gLyBCbGluayB1c2UgdHdvIGRpZmZlcmVudCBjbG9jaw0KICAgIC8vIGltcGxl
bWVudGF0aW9ucy4gT24gV2luZG93cywgdGhlIGltcGxlbWVudGF0aW9ucyBhcmUgbm9uLXRyaXZp
YWwgYW5kIGNhbg0KICAgIC8vIGJlIHNsaWdodGx5IG91dCBvZiBzeW5jLiBUaGUgZGVsdGEgaXMg
aW50ZW5kZWQgdG8gY29tcGVuc2F0ZSBmb3IgdGhhdC4NCiAgICAvLw0KICAgIC8vIEZJWE1FOiBy
ZWNvbnNpZGVyIHRoaXMgd2hlbiB0aGUgVjggYW5kIEJsaW5rIGNsb2NrcyBnZXQgdW5pZmllZCwg
c2VlIGh0dHA6Ly9jcmJ1Zy5jb20vMzI0MTEwDQogICAgaWYgKGRlbHRhID09PSB1bmRlZmluZWQp
DQogICAgICAgIGRlbHRhID0gMTAwMDsNCg0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDsg
KytpKSB7DQogICAgICAgIHZhciBzdGFydERhdGUgPSBEYXRlLm5vdygpOw0KICAgICAgICB2YXIg
YXYgPSBldmFsKGEpOw0KICAgICAgICB2YXIgZGF0ZSA9IGF2LnZhbHVlT2YoKTsNCiAgICAgICAg
dmFyIGVuZERhdGUgPSBEYXRlLm5vdygpOw0KDQogICAgICAgIC8vIE9uIHNvbWUgb2NjYXNpb25z
IHN1Y2ggYXMgTlRQIHVwZGF0ZXMsIHRoZSBjdXJyZW50IHRpbWUgY2FuIGdvDQogICAgICAgIC8v
IGJhY2t3YXJkcy4gVGhpcyBzaG91bGQgb25seSBoYXBwZW4gcmFyZWx5LCBzbyB3ZSBjYW4gZ2V0
IGF3YXkgd2l0aA0KICAgICAgICAvLyByZXRyeWluZyB0aGUgdGVzdCBhIGZldyB0aW1lcyBpZiB3
ZSBkZXRlY3QgdGhlIHRpbWUgZ29pbmcgYmFja3dhcmRzLg0KICAgICAgICBpZiAoc3RhcnREYXRl
ID4gZW5kRGF0ZSkNCiAgICAgICAgICAgIGNvbnRpbnVlOw0KDQogICAgICAgIGlmICh0eXBlb2Yg
ZGF0ZSAhPT0gIm51bWJlciIpIHsNCiAgICAgICAgICAgIHRlc3RGYWlsZWQoYSArICIgaXMgbm90
IGEgbnVtYmVyIG9yIGEgRGF0ZS4gR290ICIgKyBhdik7DQogICAgICAgICAgICByZXR1cm47DQog
ICAgICAgIH0NCiAgICAgICAgaWYgKGRhdGUgPCBzdGFydERhdGUgLSBkZWx0YSkgew0KICAgICAg
ICAgICAgdGVzdEZhaWxlZChhICsgIiBpcyBub3QgdGhlIGN1cmVudCB0aW1lLiBHb3QgIiArIGF2
ICsgIiB3aGljaCBpcyAiICsgKHN0YXJ0RGF0ZSAtIGRhdGUpIC8gMTAwMCArICIgc2Vjb25kcyBp
biB0aGUgcGFzdC4iKTsNCiAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgfQ0KICAgICAgICBp
ZiAoZGF0ZSA+IGVuZERhdGUgKyBkZWx0YSkgew0KICAgICAgICAgICAgdGVzdEZhaWxlZChhICsg
IiBpcyBub3QgdGhlIGN1cnJlbnQgdGltZS4gR290ICIgKyBhdiArICIgd2hpY2ggaXMgIiArIChk
YXRlIC0gZW5kRGF0ZSkgLyAxMDAwICsgIiBzZWNvbmRzIGluIHRoZSBmdXR1cmUuIik7DQogICAg
ICAgICAgICByZXR1cm47DQogICAgICAgIH0NCg0KICAgICAgICB0ZXN0UGFzc2VkKGEgKyAiIGlz
IGVxdWl2YWxlbnQgdG8gRGF0ZS5ub3coKS4iKTsNCiAgICAgICAgcmV0dXJuOw0KICAgIH0NCiAg
ICB0ZXN0RmFpbGVkKGEgKyAiIGNhbm5vdCBiZSB0ZXN0ZWQgYWdhaW5zdCB0aGUgY3VycmVudCB0
aW1lLiBUaGUgY2xvY2sgaXMgZ29pbmcgYmFja3dhcmRzIHRvbyBvZnRlbi4iKTsNCn0NCg0KZnVu
Y3Rpb24gZXhwZWN0RXJyb3IoKQ0Kew0KICAgIGlmIChleHBlY3RpbmdFcnJvcikgew0KICAgICAg
ICB0ZXN0RmFpbGVkKCJzaG91bGRIYXZlRXJyb3IoKSBjYWxsZWQgdHdpY2UgYmVmb3JlIGFuIGVy
cm9yIG9jY3VycmVkISIpOw0KICAgIH0NCiAgICBleHBlY3RpbmdFcnJvciA9IHRydWU7DQp9DQoN
CmZ1bmN0aW9uIHNob3VsZFJlamVjdChfYSwgX21lc3NhZ2UpDQp7DQogICAgcmV0dXJuIHNob3Vs
ZFJlamVjdFdpdGhFcnJvck5hbWUoX2EsIHVuZGVmaW5lZCwgX21lc3NhZ2UpOw0KfQ0KDQpmdW5j
dGlvbiBzaG91bGRSZWplY3RXaXRoRXJyb3JOYW1lKF9hLCBfbmFtZSwgX21lc3NhZ2UpDQp7DQog
ICAgdmFyIF9leGNlcHRpb247DQogICAgdmFyIF9hdjsNCiAgICB0cnkgew0KICAgICAgICBfYXYg
PSB0eXBlb2YgX2EgPT0gImZ1bmN0aW9uIiA/IF9hKCkgOiBldmFsKF9hKTsNCiAgICB9IGNhdGNo
IChlKSB7DQogICAgICAgIHRlc3RGYWlsZWQoKF9tZXNzYWdlID8gX21lc3NhZ2UgOiBfYSkgKyAi
IHNob3VsZCBub3QgdGhyb3cgZXhjZXB0aW9uLiBUaHJldyBleGNlcHRpb24gIiArIGUgKyAiLiIp
Ow0KICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7DQogICAgfQ0KDQogICAgcmV0dXJu
IF9hdi50aGVuKGZ1bmN0aW9uKHJlc3VsdCkgew0KICAgICAgICB0ZXN0RmFpbGVkKChfbWVzc2Fn
ZSA/IF9tZXNzYWdlIDogX2EpICsgIiBzaG91bGQgcmVqZWN0IHByb21pc2UuIFJlc29sdmVkIHdp
dGggIiArIHJlc3VsdCArICIuIik7DQogICAgfSwgZnVuY3Rpb24oZXJyb3IpIHsNCiAgICAgICAg
aWYgKF9uYW1lID09PSB1bmRlZmluZWQpIHsNCiAgICAgICAgICAgIHRlc3RQYXNzZWQoKF9tZXNz
YWdlID8gX21lc3NhZ2UgOiBfYSkgKyAiIHJlamVjdGVkIHByb21pc2UuIik7DQogICAgICAgIH0g
ZWxzZSBpZiAoZXJyb3JbJ25hbWUnXSA9PT0gX25hbWUpIHsNCiAgICAgICAgICAgIC8vIEZJWE1F
OiBSZW1vdmUgdGhlIGV4dHJhIHNwYWNlIGFuZCAnLicgKERPTUV4Y2VwdGlvbiBkZXNjcmlwdGlv
bnMgYWxyZWFkeSBlbmQgd2l0aCBwZXJpb2RzKSB0aGVuIHJlYmFzZSB0ZXN0cy4NCiAgICAgICAg
ICAgIHRlc3RQYXNzZWQoKF9tZXNzYWdlID8gX21lc3NhZ2UgOiBfYSkgKyAiIHJlamVjdGVkIHBy
b21pc2UgIHdpdGggIiArIGVycm9yICsgIi4iKTsNCiAgICAgICAgfSBlbHNlDQogICAgICAgICAg
ICB0ZXN0RmFpbGVkKChfbWVzc2FnZSA/IF9tZXNzYWdlIDogX2EpICsgIiBzaG91bGQgcmVqZWN0
IHByb21pc2Ugd2l0aCAiICsgX25hbWUgKyAiLiBSZWplY3RlZCB3aXRoICIgKyBlcnJvclsnbmFt
ZSddICsgIiBpbnN0ZWFkLiIpOw0KICAgIH0pOw0KfQ0KDQpmdW5jdGlvbiBzaG91bGRUaHJvd0Vy
cm9yTmFtZShfYSwgX25hbWUpDQp7DQogICAgdmFyIF9leGNlcHRpb247DQogICAgdHJ5IHsNCiAg
ICAgICAgdHlwZW9mIF9hID09ICJmdW5jdGlvbiIgPyBfYSgpIDogZXZhbChfYSk7DQogICAgfSBj
YXRjaCAoZSkgew0KICAgICAgICBfZXhjZXB0aW9uID0gZTsNCiAgICB9DQoNCiAgICBpZiAoX2V4
Y2VwdGlvbikgew0KICAgICAgICBpZiAoX2V4Y2VwdGlvbi5uYW1lID09IF9uYW1lKQ0KICAgICAg
ICAgICAgdGVzdFBhc3NlZChfYSArICIgdGhyZXcgZXhjZXB0aW9uICIgKyBfZXhjZXB0aW9uICsg
Ii4iKTsNCiAgICAgICAgZWxzZQ0KICAgICAgICAgICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxk
IHRocm93IGEgIiArIF9uYW1lICsgIi4gVGhyZXcgYSAiICsgX2V4Y2VwdGlvbi5uYW1lICsgIi4i
KTsNCiAgICB9IGVsc2UNCiAgICAgICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIHRocm93IGEg
IiArIF9uYW1lICsgIi4gRGlkIG5vdCB0aHJvdy4iKTsNCn0NCg0KZnVuY3Rpb24gc2hvdWxkSGF2
ZUhhZEVycm9yKG1lc3NhZ2UpDQp7DQogICAgaWYgKGV4cGVjdGluZ0Vycm9yKSB7DQogICAgICAg
IHRlc3RGYWlsZWQoIk5vIGVycm9yIHRocm93biBiZXR3ZWVuIGV4cGVjdEVycm9yKCkgYW5kIHNo
b3VsZEhhdmVIYWRFcnJvcigpIik7DQogICAgICAgIHJldHVybjsNCiAgICB9DQoNCiAgICBpZiAo
ZXhwZWN0ZWRFcnJvck1lc3NhZ2UpIHsNCiAgICAgICAgaWYgKCFtZXNzYWdlKQ0KICAgICAgICAg
ICAgdGVzdFBhc3NlZCgiR290IGV4cGVjdGVkIGVycm9yIik7DQogICAgICAgIGVsc2UgaWYgKGV4
cGVjdGVkRXJyb3JNZXNzYWdlLmluZGV4T2YobWVzc2FnZSkgIT09IC0xKQ0KICAgICAgICAgICAg
dGVzdFBhc3NlZCgiR290IGV4cGVjdGVkIGVycm9yOiAnIiArIG1lc3NhZ2UgKyAiJyIpOw0KICAg
ICAgICBlbHNlDQogICAgICAgICAgICB0ZXN0RmFpbGVkKCJVbmV4cGVjdGVkIGVycm9yICciICsg
bWVzc2FnZSArICInIik7DQogICAgICAgIGV4cGVjdGVkRXJyb3JNZXNzYWdlID0gdW5kZWZpbmVk
Ow0KICAgICAgICByZXR1cm47DQogICAgfQ0KDQogICAgdGVzdEZhaWxlZCgiZXhwZWN0RXJyb3Io
KSBub3QgY2FsbGVkIGJlZm9yZSBzaG91bGRIYXZlSGFkRXJyb3IoKSIpOw0KfQ0KDQpmdW5jdGlv
biBnYygpIHsNCiAgICBpZiAodHlwZW9mIEdDQ29udHJvbGxlciAhPT0gInVuZGVmaW5lZCIpDQog
ICAgICAgIEdDQ29udHJvbGxlci5jb2xsZWN0KCk7DQogICAgZWxzZSB7DQogICAgICAgIHZhciBn
Y1JlYyA9IGZ1bmN0aW9uIChuKSB7DQogICAgICAgICAgICBpZiAobiA8IDEpDQogICAgICAgICAg
ICAgICAgcmV0dXJuIHt9Ow0KICAgICAgICAgICAgdmFyIHRlbXAgPSB7aTogImFiIiArIGkgKyAo
aSAvIDEwMDAwMCl9Ow0KICAgICAgICAgICAgdGVtcCArPSAiZm9vIjsNCiAgICAgICAgICAgIGdj
UmVjKG4tMSk7DQogICAgICAgIH07DQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDsg
aSsrKQ0KICAgICAgICAgICAgZ2NSZWMoMTApOw0KICAgIH0NCn0NCg0KZnVuY3Rpb24gbWlub3JH
QygpIHsNCiAgICBpZiAodHlwZW9mIEdDQ29udHJvbGxlciAhPT0gInVuZGVmaW5lZCIpDQogICAg
ICAgIEdDQ29udHJvbGxlci5taW5vckNvbGxlY3QoKTsNCiAgICBlbHNlDQogICAgICAgIHRlc3RG
YWlsZWQoIk1pbm9yIEdDIGlzIGF2YWlsYWJsZSBvbmx5IHdoZW4geW91IGVuYWJsZSB0aGUgLS1l
eHBvc2UtZ2Mgb3B0aW9uIGluIFY4LiIpOw0KfQ0KDQpmdW5jdGlvbiBpc1N1Y2Nlc3NmdWxseVBh
cnNlZCgpDQp7DQogICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIGFuZCBvbmx5IHJlcG9ydCB1bmV4
cGVjdGVkIHN5bnRheCBlcnJvcnMuDQogICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gIXVuZXhwZWN0
ZWRFcnJvck1lc3NhZ2U7DQogICAgc2hvdWxkQmVUcnVlKCJzdWNjZXNzZnVsbHlQYXJzZWQiKTsN
CiAgICBpZiAoZGlkRmFpbFNvbWVUZXN0cykNCiAgICAgICAgZGVidWcoIlNvbWUgdGVzdHMgZmFp
bGVkLiIpOw0KICAgIGRlYnVnKCc8YnIgLz48c3BhbiBjbGFzcz0icGFzcyI+VEVTVCBDT01QTEVU
RTwvc3Bhbj4nKTsNCn0NCg0KLy8gSXQncyBwb3NzaWJsZSBmb3IgYW4gYXN5bmMgdGVzdCB0byBj
YWxsIGZpbmlzaEpTVGVzdCgpIGJlZm9yZSBqcy10ZXN0LXBvc3QuanMNCi8vIGhhcyBiZWVuIHBh
cnNlZC4NCmZ1bmN0aW9uIGZpbmlzaEpTVGVzdCgpDQp7DQogICAgd2FzRmluaXNoSlNUZXN0Q2Fs
bGVkID0gdHJ1ZTsNCiAgICBpZiAoIXNlbGYud2FzUG9zdFRlc3RTY3JpcHRQYXJzZWQpDQogICAg
ICAgIHJldHVybjsNCiAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOw0KICAgIG1vdmVGb3JlaWdu
T2JqZWN0VG9Ub3BJZk5lZWRlZCgpOw0KICAgIGlmIChzZWxmLmpzVGVzdElzQXN5bmMgJiYgc2Vs
Zi50ZXN0UnVubmVyKQ0KICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsNCn0NCg0KZnVu
Y3Rpb24gYXJlT2JqZWN0c0VxdWFsKGEsIGIpIHsNCglmb3IgKHZhciBwcm9wZXJ0eSBpbiBhKSB7
DQoJCWlmICghYi5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpDQoJCQlyZXR1cm4gZmFsc2U7DQoN
CgkJc3dpdGNoICh0eXBlb2YgKGFbcHJvcGVydHldKSkgew0KCQljYXNlICdmdW5jdGlvbic6DQoJ
CQlpZiAodHlwZW9mIGJbcHJvcGVydHldID09ICd1bmRlZmluZWQnIHx8IGFbcHJvcGVydHldLnRv
U3RyaW5nKCkgIT0gYltwcm9wZXJ0eV0udG9TdHJpbmcoKSkNCgkJCQlyZXR1cm4gZmFsc2U7DQoJ
CQlicmVhazsNCgkJY2FzZSAnb2JqZWN0JzoNCgkJCWlmICghYXJlT2JqZWN0c0VxdWFsKGEsIGIp
KQ0KCQkJCXJldHVybiBmYWxzZTsNCgkJCWJyZWFrOw0KCQlkZWZhdWx0Og0KCQkJaWYgKGFbcHJv
cGVydHldICE9IGJbcHJvcGVydHldKQ0KCQkJCXJldHVybiBmYWxzZTsNCgkJfQ0KCX0NCiANCglm
b3IgKHZhciBwcm9wZXJ0eSBpbiBiKSB7DQoJCWlmICghYS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0
eSkpDQoJCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCQ0KCXJldHVybiB0cnVlOw0KfTsNCg0KZnVuY3Rp
b24gc3RhcnRXb3JrZXIodGVzdFNjcmlwdFVSTCkNCnsNCiAgICBzZWxmLmpzVGVzdElzQXN5bmMg
PSB0cnVlOw0KICAgIGRlYnVnKCdTdGFydGluZyB3b3JrZXI6ICcgKyB0ZXN0U2NyaXB0VVJMKTsN
CiAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlcih0ZXN0U2NyaXB0VVJMKTsNCiAgICB3b3JrZXIu
b25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpDQogICAgew0KICAgICAgICB2YXIgd29ya2VyUHJl
Zml4ID0gIltXb3JrZXJdICI7DQogICAgICAgIGlmIChldmVudC5kYXRhLmxlbmd0aCA8IDUgfHwg
ZXZlbnQuZGF0YS5jaGFyQXQoNCkgIT0gJzonKSB7DQogICAgICAgICAgZGVidWcod29ya2VyUHJl
Zml4ICsgZXZlbnQuZGF0YSk7DQogICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQogICAgICAg
IHZhciBjb2RlID0gZXZlbnQuZGF0YS5zdWJzdHJpbmcoMCwgNCk7DQogICAgICAgIHZhciBwYXls
b2FkID0gd29ya2VyUHJlZml4ICsgZXZlbnQuZGF0YS5zdWJzdHJpbmcoNSk7DQogICAgICAgIGlm
IChjb2RlID09ICJQQVNTIikNCiAgICAgICAgICAgIHRlc3RQYXNzZWQocGF5bG9hZCk7DQogICAg
ICAgIGVsc2UgaWYgKGNvZGUgPT0gIkZBSUwiKQ0KICAgICAgICAgICAgdGVzdEZhaWxlZChwYXls
b2FkKTsNCiAgICAgICAgZWxzZSBpZiAoY29kZSA9PSAiREVTQyIpDQogICAgICAgICAgICBkZXNj
cmlwdGlvbihwYXlsb2FkKTsNCiAgICAgICAgZWxzZSBpZiAoY29kZSA9PSAiRE9ORSIpDQogICAg
ICAgICAgICBmaW5pc2hKU1Rlc3QoKTsNCiAgICAgICAgZWxzZQ0KICAgICAgICAgICAgZGVidWco
d29ya2VyUHJlZml4ICsgZXZlbnQuZGF0YSk7DQogICAgfTsNCg0KICAgIHdvcmtlci5vbmVycm9y
ID0gZnVuY3Rpb24oZXZlbnQpDQogICAgew0KICAgICAgICBkZWJ1ZygnR290IGVycm9yIGZyb20g
d29ya2VyOiAnICsgZXZlbnQubWVzc2FnZSk7DQogICAgICAgIGZpbmlzaEpTVGVzdCgpOw0KICAg
IH07DQoNCiAgICByZXR1cm4gd29ya2VyOw0KfQ0KDQppZiAoaXNXb3JrZXIoKSkgew0KICAgIHZh
ciB3b3JrZXJQb3J0ID0gc2VsZjsNCiAgICBkZXNjcmlwdGlvbiA9IGZ1bmN0aW9uKG1zZywgcXVp
ZXQpIHsNCiAgICAgICAgd29ya2VyUG9ydC5wb3N0TWVzc2FnZSgnREVTQzonICsgbXNnKTsNCiAg
ICB9Ow0KICAgIHRlc3RGYWlsZWQgPSBmdW5jdGlvbihtc2cpIHsNCiAgICAgICAgd29ya2VyUG9y
dC5wb3N0TWVzc2FnZSgnRkFJTDonICsgbXNnKTsNCiAgICB9Ow0KICAgIHRlc3RQYXNzZWQgPSBm
dW5jdGlvbihtc2cpIHsNCiAgICAgICAgd29ya2VyUG9ydC5wb3N0TWVzc2FnZSgnUEFTUzonICsg
bXNnKTsNCiAgICB9Ow0KICAgIGZpbmlzaEpTVGVzdCA9IGZ1bmN0aW9uKCkgew0KICAgICAgICB3
b3JrZXJQb3J0LnBvc3RNZXNzYWdlKCdET05FOicpOw0KICAgIH07DQogICAgZGVidWcgPSBmdW5j
dGlvbihtc2cpIHsNCiAgICAgICAgd29ya2VyUG9ydC5wb3N0TWVzc2FnZShtc2cpOw0KICAgIH07
DQp9DQoNCmZ1bmN0aW9uIGRvd25ncmFkZVJlZmVycmVyQ2FsbGJhY2socG9saWN5LCBob3N0KSB7
DQogICAgbGV0IHNjcmlwdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQi
KTsNCiAgICBzY3JpcHRFbGVtZW50LnNyYyA9ICJodHRwOi8vIi5jb25jYXQoaG9zdCwgIjo4MDAw
L3JlZmVycmVyLXBvbGljeS9yZXNvdXJjZXMvc2NyaXB0LnB5Iik7DQogICAgc2NyaXB0RWxlbWVu
dC5yZWZlcnJlclBvbGljeSA9IHBvbGljeTsNCiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxk
KHNjcmlwdEVsZW1lbnQpOw0KfQ0KICAgIDwvc2NyaXB0Pg0KICAgIDxzY3JpcHQ+DQogICAgICBk
ZXNjcmlwdGlvbigiVGVzdCB0aGUgYmVoYXZpb3Igd2hlbiAnYXV0bycgaXMgcGFydCBvZiB0aGUg
J2NvbHVtbnMnIHByb3BlcnR5IHZhbHVlLiBTZWUgaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1t
dWx0aWNvbC8jY29sdW1ucyIpOw0KICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQ0KICAgICAg
ICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsNCg0KICAgICAgZnVuY3Rpb24gcnVuVGVzdHMoKSB7
DQogICAgICAgICAgdmFyIHRlc3RzID0gW1siY29sdW1uczphdXRvIDM7IiwgImF1dG8iLCAiMyIs
ICJhdXRvIDMiXSwNCiAgICAgICAgICAgICAgICAgICAgICAgWyJjb2x1bW5zOmF1dG8gMTBlbTsi
LCAiMTBlbSIsICJhdXRvIiwgIjEwZW0gYXV0byJdLA0KICAgICAgICAgICAgICAgICAgICAgICBb
ImNvbHVtbnM6MyBhdXRvOyIsICJhdXRvIiwgIjMiLCAiYXV0byAzIl0sDQogICAgICAgICAgICAg
ICAgICAgICAgIFsiY29sdW1uczoxMGVtIGF1dG87IiwgIjEwZW0iLCAiYXV0byIsICIxMGVtIGF1
dG8iXSwNCiAgICAgICAgICAgICAgICAgICAgICAgWyJjb2x1bW5zOjcgN2VtOyBjb2x1bW5zOmF1
dG8gYXV0byBhdXRvOyIsICI3ZW0iLCAiNyIsICI3ZW0gNyJdLA0KICAgICAgICAgICAgICAgICAg
ICAgICBbImNvbHVtbnM6NyA3ZW07IGNvbHVtbnM6MTBlbSBhdXRvIGF1dG87IiwgIjdlbSIsICI3
IiwgIjdlbSA3Il0sDQogICAgICAgICAgICAgICAgICAgICAgIFsiY29sdW1uczo3IDdlbTsgY29s
dW1uczphdXRvOyIsICJhdXRvIiwgImF1dG8iLCAiYXV0byBhdXRvIl0sDQogICAgICAgICAgICAg
ICAgICAgICAgIFsiY29sdW1uczo3IDdlbTsgY29sdW1uczphdXRvIGF1dG87IiwgICJhdXRvIiwg
ImF1dG8iLCAiYXV0byBhdXRvIl0sDQogICAgICAgICAgICAgICAgICAgICAgIFsiY29sdW1uczph
dXRvOyBjb2x1bW5zOmluaXRpYWw7IiwgImluaXRpYWwiLCAiaW5pdGlhbCIsICJpbml0aWFsIl0s
DQogICAgICAgICAgICAgICAgICAgICAgIFsiY29sdW1uczphdXRvOyBjb2x1bW5zOmluaXRpYWwg
aW5pdGlhbDsiLCAiYXV0byIsICJhdXRvIiwgImF1dG8gYXV0byJdLA0KICAgICAgICAgICAgICAg
ICAgICAgICBbImNvbHVtbnM6YXV0bzsgY29sdW1uczppbmhlcml0OyIsICJpbmhlcml0IiwgImlu
aGVyaXQiLCAiaW5oZXJpdCJdLA0KICAgICAgICAgICAgICAgICAgICAgICBbImNvbHVtbnM6YXV0
bzsgY29sdW1uczppbmhlcml0IGluaGVyaXQ7IiwgImF1dG8iLCAiYXV0byIsICJhdXRvIGF1dG8i
XSwNCiAgICAgICAgICAgICAgICAgICAgICAgWyJjb2x1bW5zOjc7IiwgImF1dG8iLCAiNyIsICJh
dXRvIDciXSwNCiAgICAgICAgICAgICAgICAgICAgICAgWyJjb2x1bW5zOjdlbTsiLCAiN2VtIiwg
ImF1dG8iLCAiN2VtIGF1dG8iXV07DQoNCiAgICAgICAgICB0ZXN0cy5mb3JFYWNoKGZ1bmN0aW9u
KHRlc3QpIHsNCiAgICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5jc3NUZXh0ID0gdGVzdFswXTsN
CiAgICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJlbGVtZW50LnN0eWxlLmNvbHVt
bldpZHRoIiwgdGVzdFsxXSk7DQogICAgICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygi
ZWxlbWVudC5zdHlsZS5jb2x1bW5Db3VudCIsIHRlc3RbMl0pOw0KICAgICAgICAgICAgICBzaG91
bGRCZUVxdWFsVG9TdHJpbmcoImVsZW1lbnQuc3R5bGUuY29sdW1ucyIsIHRlc3RbM10pOw0KICAg
ICAgICAgIH0pOw0KICAgICAgfQ0KICAgIDwvc2NyaXB0Pg0KICA8L2hlYWQ+DQogIDxib2R5Pg0K
ICAgICAgPGRpdiBpZD0iZWxlbWVudCI+PC9kaXY+DQogICAgICA8c2NyaXB0Pg0KICAgICAgICAg
IHJ1blRlc3RzKCk7DQogICAgICA8L3NjcmlwdD4NCiAgPC9ib2R5Pg0KPC9odG1sPg==
</data>

          </attachment>
      

    </bug>

</bugzilla>