<?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>234539</bug_id>
          
          <creation_ts>2021-12-20 17:40:44 -0800</creation_ts>
          <short_desc>Expand the set of objects we take JSArray::fastSlice() path for</short_desc>
          <delta_ts>2022-01-07 17:53:31 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=234990</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Shvayka">ashvayka</reporter>
          <assigned_to name="Alexey Shvayka">ashvayka</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1825824</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-12-20 17:40:44 -0800</bug_when>
    <thetext>Expand the set of objects we take JSArray::fastSlice() path for</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825825</commentid>
    <comment_count>1</comment_count>
      <attachid>447669</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-12-20 17:42:00 -0800</bug_when>
    <thetext>Created attachment 447669
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825826</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-12-20 17:42:31 -0800</bug_when>
    <thetext>(In reply to Alexey Shvayka from comment #1)
&gt; Created attachment 447669 [details]
&gt; Patch

--outer 50:

                                            r287094                    patch

array-slice-call-cloned-arguments      103.0680+-0.1483     ^     42.6947+-0.1334        ^ definitely 2.4141x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825827</commentid>
    <comment_count>3</comment_count>
      <attachid>447670</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-12-20 17:44:11 -0800</bug_when>
    <thetext>Created attachment 447670
Patch for running Speedometer2/EmberJS-Debug-TodoMVC locally

Speedometer2/EmberJS-Debug-TodoMVC score
===
r287094: 62.99 pt
  patch: 63.33 pt (0.5% better)

Arithmetic mean of 6 runs of `Tools/Scripts/run-perf-tests --repeat=4 --test-runner-count=6 PerformanceTests/Speedometer --no-build --release --no-show-results` with &quot;emberjs-debug-todomvc-tests.patch&quot; applied.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825846</commentid>
    <comment_count>4</comment_count>
      <attachid>447669</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-12-20 18:37:33 -0800</bug_when>
    <thetext>Comment on attachment 447669
Patch

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

&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:1080
&gt; +    if (LIKELY(speciesResult.first == SpeciesConstructResult::FastPath)) {

Why do we not need to check length==toLength any more?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825847</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-12-20 18:42:06 -0800</bug_when>
    <thetext>(In reply to Saam Barati from comment #4)
&gt; Comment on attachment 447669 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=447669&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:1080
&gt; &gt; +    if (LIKELY(speciesResult.first == SpeciesConstructResult::FastPath)) {
&gt; 
&gt; Why do we not need to check length==toLength any more?

We are not very interested if &quot;length&quot; has changed, yet we still do need to ensure we don&apos;t read OOB. This is now done via `if (startIndex + count &gt; source-&gt;butterfly()-&gt;vectorLength())`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826101</commentid>
    <comment_count>6</comment_count>
      <attachid>447749</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-12-21 13:51:41 -0800</bug_when>
    <thetext>Created attachment 447749
Patch

Get source structure after ensureWritable() to fix ASSERT failure and explicitly downcast |count| to fix &apos;watch&apos; build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826342</commentid>
    <comment_count>7</comment_count>
      <attachid>447749</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-12-22 10:48:57 -0800</bug_when>
    <thetext>Comment on attachment 447749
Patch

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

r=me, nice.

&gt; JSTests/microbenchmarks/array-slice-call-cloned-arguments.js:14
&gt; +})();

Can we also have a test which performs,

array.slice(0, number-exceeding-length-of-array)

&gt; Source/JavaScriptCore/runtime/JSArray.cpp:732
&gt; +    source-&gt;ensureWritable(vm);

I think, in a subsequent patch, it is nice if we can avoid making the input as non-CoW since we can create a slice of array from CoW array.
Can we have FIXME with bugzilla URL here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1827001</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-12-27 17:41:15 -0800</bug_when>
    <thetext>&lt;rdar://problem/86946541&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829146</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2022-01-07 17:01:02 -0800</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #7)
&gt; r=me, nice.

Thank you for review!

&gt; Can we also have a test which performs,
&gt; 
&gt; array.slice(0, number-exceeding-length-of-array)

Added: JSTests/stress/array-slice-beyond-length.js (first test).
However, start / end exceeding length of array is handled by argumentClampedIndexFromStartOrEnd(), so no crash if

    if (startIndex + count &gt; source-&gt;butterfly()-&gt;vectorLength())
        return nullptr;

is removed.

I expected the test, added in r175420, to crash if &quot;length&quot; check is removed, no luck either. However, JSTests/test262/test/built-ins/Array/prototype/splice/S15.4.4.12_A3_T1.js did start failing / crashing, so I ported it for slice(): please see the second test in JSTests/stress/array-slice-beyond-length.js.

&gt; &gt; Source/JavaScriptCore/runtime/JSArray.cpp:732
&gt; &gt; +    source-&gt;ensureWritable(vm);
&gt; 
&gt; I think, in a subsequent patch, it is nice if we can avoid making the input
&gt; as non-CoW since we can create a slice of array from CoW array.
&gt; Can we have FIXME with bugzilla URL here?

Added: https://bugs.webkit.org/show_bug.cgi?id=234990.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829147</commentid>
    <comment_count>10</comment_count>
      <attachid>448648</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2022-01-07 17:01:19 -0800</bug_when>
    <thetext>Created attachment 448648
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829161</commentid>
    <comment_count>11</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-01-07 17:53:28 -0800</bug_when>
    <thetext>Committed r287800 (245853@main): &lt;https://commits.webkit.org/245853@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 448648.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447669</attachid>
            <date>2021-12-20 17:42:00 -0800</date>
            <delta_ts>2021-12-21 13:51:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234539-20211221014158.patch</filename>
            <type>text/plain</type>
            <size>9300</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyODcyOTIpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDIxLTEyLTIwICBBbGV4ZXkgU2h2YXlrYSAgPGFzaHZheWthQGFw
cGxlLmNvbT4KKworICAgICAgICBFeHBhbmQgdGhlIHNldCBvZiBvYmplY3RzIHdlIHRha2UgSlNB
cnJheTo6ZmFzdFNsaWNlKCkgcGF0aCBmb3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIzNDUzOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL2FycmF5LXNsaWNlLWNhbGwtY2xv
bmVkLWFyZ3VtZW50cy5qczogQWRkZWQuCisgICAgICAgICogc3RyZXNzL2FycmF5LXNsaWNlLWxl
bmd0aC1sb29rdXAuanM6IEFkZGVkLgorCiAyMDIxLTEyLTE5ICBSb3NzIEtpcnNsaW5nICA8cm9z
cy5raXJzbGluZ0Bzb255LmNvbT4KIAogICAgICAgICBbSlNDXSBPcFBvdyBzaG91bGQgaGF2ZSBh
ICJzbWFsbCBpbnQgZXhwb25lbnQiIGZhc3QgcGF0aCBhdCBsb3dlciB0aWVycwpJbmRleDogSlNU
ZXN0cy9taWNyb2JlbmNobWFya3MvYXJyYXktc2xpY2UtY2FsbC1jbG9uZWQtYXJndW1lbnRzLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2FycmF5LXNsaWNlLWNhbGwt
Y2xvbmVkLWFyZ3VtZW50cy5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL21pY3JvYmVuY2ht
YXJrcy9hcnJheS1zbGljZS1jYWxsLWNsb25lZC1hcmd1bWVudHMuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxNCBAQAorKGZ1bmN0aW9uKCkgeworICAgICJ1c2Ugc3RyaWN0IjsKKyAgICB2
YXIgVEVTVF9MRU5HVEggPSAxMDsKKworICAgIHZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5z
bGljZTsKKyAgICB2YXIgY2xvbmVkQXJndW1lbnRzID0gKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJn
dW1lbnRzOyB9KS5hcHBseShudWxsLCBuZXcgQXJyYXkoVEVTVF9MRU5HVEgpLmZpbGwoMSkpOwor
CisgICAgdmFyIHNsaWNlZEFycmF5OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU2OyBpKysp
CisgICAgICAgIHNsaWNlZEFycmF5ID0gc2xpY2UuY2FsbChjbG9uZWRBcmd1bWVudHMpOworCisg
ICAgaWYgKHNsaWNlZEFycmF5Lmxlbmd0aCAhPT0gVEVTVF9MRU5HVEgpCisgICAgICAgIHRocm93
IG5ldyBFcnJvcigiQmFkIGFzc2VydGlvbiEiKTsKK30pKCk7CkluZGV4OiBKU1Rlc3RzL3N0cmVz
cy9hcnJheS1zbGljZS1sZW5ndGgtbG9va3VwLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3Ry
ZXNzL2FycmF5LXNsaWNlLWxlbmd0aC1sb29rdXAuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0
cy9zdHJlc3MvYXJyYXktc2xpY2UtbGVuZ3RoLWxvb2t1cC5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDIzIEBACitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVkKSB7CisgICAg
aWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihgQmFkIHZh
bHVlOiAke2FjdHVhbH0hYCk7Cit9CisKKyhmdW5jdGlvbiBzb3VyY2VJc0ZpbmFsT2JqZWN0KCkg
eworICAgIHZhciBsZW5ndGhMb29rdXBzID0gMDsKKyAgICB2YXIgc291cmNlT2JqID0geworICAg
ICAgICAwOiAwLCAxOiAxLCAyOiAyLAorICAgICAgICBnZXQgbGVuZ3RoKCkgeworICAgICAgICAg
ICAgbGVuZ3RoTG9va3VwcysrOworICAgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgIH0sCisg
ICAgfTsKKworICAgIHZhciBzbGljZWRBcnJheTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFl
NjsgaSsrKSB7CisgICAgICAgIHNsaWNlZEFycmF5ID0gW10uc2xpY2UuY2FsbChzb3VyY2VPYmop
OworICAgIH0KKworICAgIHNob3VsZEJlKHNsaWNlZEFycmF5Lmxlbmd0aCwgMyk7CisgICAgc2hv
dWxkQmUobGVuZ3RoTG9va3VwcywgMWU2KTsKK30pKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDI4NzA5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0MCBAQAorMjAyMS0xMi0yMCAgQWxleGV5IFNo
dmF5a2EgIDxhc2h2YXlrYUBhcHBsZS5jb20+CisKKyAgICAgICAgRXhwYW5kIHRoZSBzZXQgb2Yg
b2JqZWN0cyB3ZSB0YWtlIEpTQXJyYXk6OmZhc3RTbGljZSgpIHBhdGggZm9yCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ1MzkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHksIEFycmF5LnBy
b3RvdHlwZSdzIHNsaWNlKCkgLyBzcGxpY2UoKSBtZXRob2RzIHRha2UgYSBmYXN0IHBhdGggb25s
eSBmb3IKKyAgICAgICAgSlNBcnJheSBzb3VyY2Ugb2JqZWN0cy4gV2l0aCB0aGlzIGNoYW5nZSwg
Z2NTYWZlTWVtY3B5LWJhc2VkIHBhdGggaXMgdGFrZW4gZm9yIGFueQorICAgICAgICBvYmplY3Qg
d2l0aCBvcmRpbmFyeSBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KCkgbWV0aG9kLCB3aGljaCBz
cGVlZHMgdXAgdGhlIGNvbW1vbgorICAgICAgICBjYXNlIG9mIGBbXS5zbGljZS5jYWxsKGFyZ3Vt
ZW50cylgIGJ5IDE0MCUgKGluIHN0cmljdCBtb2RlIG9ubHksIHNlZSBDbG9uZWRBcmd1bWVudHMp
LgorCisgICAgICAgIEFsc28sIG9uY2UgaXMgaHR0cHM6Ly93ZWJraXQub3JnL2IvMjM0NTM4IHJl
c29sdmVkLCBjYWxsaW5nIEFycmF5LnByb3RvdHlwZS5zbGljZSgpCisgICAgICAgIG9uIGEgc3Rh
dGljIE5vZGVMaXN0LCB3aGljaCBpcyBhIGNvbW1vbiBpZGlvbSB0byBhY3F1aXJlIG1hcCgpIC8g
ZmlsdGVyKCkgbWV0aG9kcywKKyAgICAgICAgd2lsbCBiZWNvbWUgZmFzdGVyIGFzIHdlbGwuCisK
KyAgICAgICAgVGhpcyBwYXRjaCB3YXMgdGhvcm91Z2hseSBldmFsdWF0ZWQgdG8gYmUgc3BlYy1w
ZXJmZWN0IGFuZCBtZW1vcnktc2FmZToKKworICAgICAgICAgICogaW5kZXhpbmcgbW9kZSBjaGVj
ayBhbmQgaG9sZXNNdXN0Rm9yd2FyZFRvUHJvdG90eXBlKCkgZ3VhcmFudGVlIHRoYXQgdGhlcmUK
KyAgICAgICAgICAgIGFyZSBubyBvYnNlcnZhYmxlIHVzZXJsYW5kIGNvZGUgdG8gYmUgaW52b2tl
ZDsKKyAgICAgICAgICAqIGZhc3RTbGljZSgpIHNpZ25hdHVyZSBpcyB1cGdyYWRlZCB0byB1aW50
NjRfdCBzbyBgbnVsbHB0cmAgaXMgcmV0dXJuZWQgaW4gY2FzZQorICAgICAgICAgICAgb2YgbGFy
Z2UgImxlbmd0aCIsIHJlc3VsdGluZyBpbiBhIFJhbmdlRXJyb3IgYmVpbmcgdGhyb3duIG9uIHRo
ZSBzbG93IHBhdGg7CisgICAgICAgICAgKiB0byBoYW5kbGUgdGhlIGNhc2Ugb2Ygc291cmNlIGFy
cmF5IGJlaW5nIHNocmlua2VkIGFmdGVyICJsZW5ndGgiIGxvb2t1cCAoc2VlIHIxNzU0MjApLAor
ICAgICAgICAgICAgT09CIHJlYWQgY2hlY2sgaXMgbW92ZWQgdG8gSlNBcnJheTo6ZmFzdFNsaWNl
KCkgYW5kIHJlZmluZWQgdG8gcmVseSBvbiB2ZWN0b3JMZW5ndGgoKQorICAgICAgICAgICAgc28g
dGhlIGRvdWJsZSAibGVuZ3RoIiBsb29rdXAgaXMgYXZvaWRlZCAoYWRkZWQgYSB0ZXN0IGZvciB0
aGlzKS4KKworICAgICAgICBBbGwgdGhpcyAoYW5kIG1vcmUpIGlzIHdlbGwgY292ZXJlZCBieSB0
aGUgdGVzdDI2MiBzdWl0ZS4KKworICAgICAgICBUaGlzIGNoYW5nZSBpbXByb3ZlcyBTcGVlZG9t
ZXRlcjIvRW1iZXJKUy1EZWJ1Zy1Ub2RvTVZDIHNjb3JlIGJ5IDAuNSU6IGFsdGhvdWdoIHRoZSB0
ZXN0CisgICAgICAgIGlzIHNsb3cgb24gaXRzIG93biwgYFtdLnNsaWNlLmNhbGwoYXJndW1lbnRz
KWAgaXMgcGVyZm9ybWVkIH41NmsgdGltZXMgcGVyIHJ1bi4KKworICAgICAgICAqIHJ1bnRpbWUv
QXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJ
T04pOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OmZhc3RTbGljZSk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5Lmg6CisKIDIwMjEtMTIt
MTQgIFJvc3MgS2lyc2xpbmcgIDxyb3NzLmtpcnNsaW5nQHNvbnkuY29tPgogCiAgICAgICAgIFtK
U0NdIE9wSW5zdGFuY2VvZkN1c3RvbSBzaG91bGQgYmUgaW4gQ29tbW9uU2xvd1BhdGhzCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3Bw
CShyZXZpc2lvbiAyODcwOTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJh
eVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNzcsMTAgKzEwNzcsOCBAQCBKU0Nf
REVGSU5FX0hPU1RfRlVOQ1RJT04oYXJyYXlQcm90b0Z1bmNTCiAgICAgaWYgKFVOTElLRUxZKHNw
ZWNpZXNSZXN1bHQuZmlyc3QgPT0gU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RXhjZXB0aW9uKSkK
ICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGJvb2wgb2tUb0RvRmFzdFBhdGggPSBzcGVjaWVz
UmVzdWx0LmZpcnN0ID09IFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkZhc3RQYXRoICYmIGlzSlNB
cnJheSh0aGlzT2JqKSAmJiBsZW5ndGggPT0gdG9MZW5ndGgoZ2xvYmFsT2JqZWN0LCB0aGlzT2Jq
KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgIGlmIChMSUtFTFko
b2tUb0RvRmFzdFBhdGgpKSB7Ci0gICAgICAgIGlmIChKU0FycmF5KiByZXN1bHQgPSBhc0FycmF5
KHRoaXNPYmopLT5mYXN0U2xpY2UoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
YmVnaW4pLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZW5kIC0gYmVnaW4pKSkKKyAgICBpZiAoTElL
RUxZKHNwZWNpZXNSZXN1bHQuZmlyc3QgPT0gU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RmFzdFBh
dGgpKSB7CisgICAgICAgIGlmIChKU0FycmF5KiByZXN1bHQgPSBKU0FycmF5OjpmYXN0U2xpY2Uo
Z2xvYmFsT2JqZWN0LCB0aGlzT2JqLCBiZWdpbiwgZW5kIC0gYmVnaW4pKQogICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0KIApAQCAtMTE3MywxMCArMTE3
MSw4IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihhcnJheVByb3RvRnVuY1MKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTT2JqZWN0KiBy
ZXN1bHQgPSBudWxscHRyOwotICAgIGJvb2wgb2tUb0RvRmFzdFBhdGggPSBzcGVjaWVzUmVzdWx0
LmZpcnN0ID09IFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkZhc3RQYXRoICYmIGlzSlNBcnJheSh0
aGlzT2JqKSAmJiBsZW5ndGggPT0gdG9MZW5ndGgoZ2xvYmFsT2JqZWN0LCB0aGlzT2JqKTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBpZiAo
TElLRUxZKG9rVG9Eb0Zhc3RQYXRoKSkKLSAgICAgICAgcmVzdWx0ID0gYXNBcnJheSh0aGlzT2Jq
KS0+ZmFzdFNsaWNlKGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFjdHVhbFN0
YXJ0KSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFjdHVhbERlbGV0ZUNvdW50KSk7CisgICAgaWYg
KExJS0VMWShzcGVjaWVzUmVzdWx0LmZpcnN0ID09IFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkZh
c3RQYXRoKSkKKyAgICAgICAgcmVzdWx0ID0gSlNBcnJheTo6ZmFzdFNsaWNlKGdsb2JhbE9iamVj
dCwgdGhpc09iaiwgYWN0dWFsU3RhcnQsIGFjdHVhbERlbGV0ZUNvdW50KTsKIAogICAgIGlmICgh
cmVzdWx0KSB7CiAgICAgICAgIGlmIChzcGVjaWVzUmVzdWx0LmZpcnN0ID09IFNwZWNpZXNDb25z
dHJ1Y3RSZXN1bHQ6OkNyZWF0ZWRPYmplY3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMjg3MDk0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyNSwxOCArNzI1
LDI1IEBAIE5FVkVSX0lOTElORSB2b2lkIEpTQXJyYXk6OnB1c2goSlNHbG9iYWwKICAgICBwdXNo
SW5saW5lKGdsb2JhbE9iamVjdCwgdmFsdWUpOwogfQogCi1KU0FycmF5KiBKU0FycmF5OjpmYXN0
U2xpY2UoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgc3RhcnRJbmRleCwg
dW5zaWduZWQgY291bnQpCitKU0FycmF5KiBKU0FycmF5OjpmYXN0U2xpY2UoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIHNvdXJjZSwgdWludDY0X3Qgc3RhcnRJbmRleCwg
dWludDY0X3QgY291bnQpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogCi0g
ICAgZW5zdXJlV3JpdGFibGUodm0pOworICAgIFN0cnVjdHVyZSogc291cmNlU3RydWN0dXJlID0g
c291cmNlLT5zdHJ1Y3R1cmUodm0pOworICAgIGlmIChzb3VyY2VTdHJ1Y3R1cmUtPnR5cGVJbmZv
KCkuaW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90
WmVybygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHNvdXJjZS0+ZW5zdXJlV3Jp
dGFibGUodm0pOwogCi0gICAgYXV0byBhcnJheVR5cGUgPSBpbmRleGluZ01vZGUoKTsKKyAgICBh
dXRvIGFycmF5VHlwZSA9IHNvdXJjZS0+aW5kZXhpbmdNb2RlKCkgfCBJc0FycmF5OwogICAgIHN3
aXRjaCAoYXJyYXlUeXBlKSB7CiAgICAgY2FzZSBBcnJheVdpdGhEb3VibGU6CiAgICAgY2FzZSBB
cnJheVdpdGhJbnQzMjoKICAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6IHsKLSAgICAgICAg
aWYgKGNvdW50ID49IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggfHwgc3RydWN0dXJlKHZtKS0+aG9s
ZXNNdXN0Rm9yd2FyZFRvUHJvdG90eXBlKHZtLCB0aGlzKSkKKyAgICAgICAgaWYgKGNvdW50ID49
IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggfHwgc291cmNlU3RydWN0dXJlLT5ob2xlc011c3RGb3J3
YXJkVG9Qcm90b3R5cGUodm0sIHNvdXJjZSkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgICAgICBpZiAoc3RhcnRJbmRleCArIGNvdW50ID4gc291cmNlLT5idXR0ZXJmbHkoKS0+
dmVjdG9yTGVuZ3RoKCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICBT
dHJ1Y3R1cmUqIHJlc3VsdFN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVG
b3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKGFycmF5VHlwZSk7CkBAIC03NTEsOSArNzU4
LDkgQEAgSlNBcnJheSogSlNBcnJheTo6ZmFzdFNsaWNlKEpTR2xvYmFsT2JqZQogCiAgICAgICAg
IGF1dG8mIHJlc3VsdEJ1dHRlcmZseSA9ICpyZXN1bHRBcnJheS0+YnV0dGVyZmx5KCk7CiAgICAg
ICAgIGlmIChhcnJheVR5cGUgPT0gQXJyYXlXaXRoRG91YmxlKQotICAgICAgICAgICAgZ2NTYWZl
TWVtY3B5KHJlc3VsdEJ1dHRlcmZseS5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpLCBidXR0ZXJm
bHkoKS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSArIHN0YXJ0SW5kZXgsIHNpemVvZihKU1Zh
bHVlKSAqIGNvdW50KTsKKyAgICAgICAgICAgIGdjU2FmZU1lbWNweShyZXN1bHRCdXR0ZXJmbHku
Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSwgc291cmNlLT5idXR0ZXJmbHkoKS0+Y29udGlndW91
c0RvdWJsZSgpLmRhdGEoKSArIHN0YXJ0SW5kZXgsIHNpemVvZihKU1ZhbHVlKSAqIGNvdW50KTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgZ2NTYWZlTWVtY3B5KHJlc3VsdEJ1dHRlcmZseS5j
b250aWd1b3VzKCkuZGF0YSgpLCBidXR0ZXJmbHkoKS0+Y29udGlndW91cygpLmRhdGEoKSArIHN0
YXJ0SW5kZXgsIHNpemVvZihKU1ZhbHVlKSAqIGNvdW50KTsKKyAgICAgICAgICAgIGdjU2FmZU1l
bWNweShyZXN1bHRCdXR0ZXJmbHkuY29udGlndW91cygpLmRhdGEoKSwgc291cmNlLT5idXR0ZXJm
bHkoKS0+Y29udGlndW91cygpLmRhdGEoKSArIHN0YXJ0SW5kZXgsIHNpemVvZihKU1ZhbHVlKSAq
IGNvdW50KTsKIAogICAgICAgICBBU1NFUlQocmVzdWx0QnV0dGVyZmx5LnB1YmxpY0xlbmd0aCgp
ID09IGNvdW50KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdEFycmF5OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gMjg3MDk0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQs
NyArMTA0LDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHVzaChKU0ds
b2JhbE9iamVjdCosIEpTVmFsdWUpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgcG9w
KEpTR2xvYmFsT2JqZWN0Kik7CiAKLSAgICBKU0FycmF5KiBmYXN0U2xpY2UoSlNHbG9iYWxPYmpl
Y3QqLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCk7CisgICAgc3RhdGljIEpT
QXJyYXkqIGZhc3RTbGljZShKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiBzb3VyY2UsIHVpbnQ2
NF90IHN0YXJ0SW5kZXgsIHVpbnQ2NF90IGNvdW50KTsKIAogICAgIGJvb2wgY2FuRmFzdENvcHko
Vk0mLCBKU0FycmF5KiBvdGhlckFycmF5KTsKICAgICBib29sIGNhbkRvRmFzdEluZGV4ZWRBY2Nl
c3MoVk0mKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447670</attachid>
            <date>2021-12-20 17:44:11 -0800</date>
            <delta_ts>2021-12-21 13:51:36 -0800</delta_ts>
            <desc>Patch for running Speedometer2/EmberJS-Debug-TodoMVC locally</desc>
            <filename>emberjs-debug-todomvc-tests.patch</filename>
            <type>text/plain</type>
            <size>24696</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rlc3RzLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rlc3Rz
LmpzCShyZXZpc2lvbiAyODcwOTQpCisrKyBQZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90ZXN0cy5qcwkod29ya2luZyBjb3B5KQpAQCAtMTEsMTkwICsxMSwxMCBAQAogICAg
IGVsZW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7CiB9CiAKLVN1aXRlcy5wdXNoKHsKLSAgICBu
YW1lOiAnVmFuaWxsYUpTLVRvZG9NVkMnLAotICAgIHVybDogJ3RvZG9tdmMvdmFuaWxsYS1leGFt
cGxlcy92YW5pbGxhanMvaW5kZXguaHRtbCcsCi0gICAgcHJlcGFyZTogZnVuY3Rpb24gKHJ1bm5l
ciwgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7Ci0gICAgICAgIHJldHVybiBydW5u
ZXIud2FpdEZvckVsZW1lbnQoJy5uZXctdG9kbycpLnRoZW4oZnVuY3Rpb24gKGVsZW1lbnQpIHsK
LSAgICAgICAgICAgIGVsZW1lbnQuZm9jdXMoKTsKLSAgICAgICAgICAgIHJldHVybiBlbGVtZW50
OwotICAgICAgICB9KTsKLSAgICB9LAotICAgIHRlc3RzOiBbCi0gICAgICAgIG5ldyBCZW5jaG1h
cmtUZXN0U3RlcCgnQWRkaW5nJyArIG51bWJlck9mSXRlbXNUb0FkZCArICdJdGVtcycsIGZ1bmN0
aW9uIChuZXdUb2RvLCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpIHsKLSAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZJdGVtc1RvQWRkOyBpKyspIHsKLSAgICAg
ICAgICAgICAgICBuZXdUb2RvLnZhbHVlID0gJ1NvbWV0aGluZyB0byBkbyAnICsgaTsKLSAgICAg
ICAgICAgICAgICBuZXdUb2RvLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdjaGFuZ2UnKSk7Ci0g
ICAgICAgICAgICAgICAgdHJpZ2dlckVudGVyKG5ld1RvZG8sICdrZXlwcmVzcycpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9KSwKLSAgICAgICAgbmV3IEJlbmNobWFya1Rlc3RTdGVwKCdDb21w
bGV0aW5nQWxsSXRlbXMnLCBmdW5jdGlvbiAobmV3VG9kbywgY29udGVudFdpbmRvdywgY29udGVu
dERvY3VtZW50KSB7Ci0gICAgICAgICAgICB2YXIgY2hlY2tib3hlcyA9IGNvbnRlbnREb2N1bWVu
dC5xdWVyeVNlbGVjdG9yQWxsKCcudG9nZ2xlJyk7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGNoZWNrYm94ZXMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgY2hlY2tib3hl
c1tpXS5jbGljaygpOwotICAgICAgICB9KSwKLSAgICAgICAgbmV3IEJlbmNobWFya1Rlc3RTdGVw
KCdEZWxldGluZ0FsbEl0ZW1zJywgZnVuY3Rpb24gKG5ld1RvZG8sIGNvbnRlbnRXaW5kb3csIGNv
bnRlbnREb2N1bWVudCkgewotICAgICAgICAgICAgdmFyIGRlbGV0ZUJ1dHRvbnMgPSBjb250ZW50
RG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmRlc3Ryb3knKTsKLSAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgZGVsZXRlQnV0dG9ucy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAg
ICBkZWxldGVCdXR0b25zW2ldLmNsaWNrKCk7Ci0gICAgICAgIH0pLAotICAgIF0KLX0pOworZm9y
ICh2YXIgaiA9IDA7IGogPCAxMDsgaisrKSB7CiAKIFN1aXRlcy5wdXNoKHsKLSAgICBuYW1lOiAn
VmFuaWxsYS1FUzIwMTUtVG9kb01WQycsCi0gICAgdXJsOiAndG9kb212Yy92YW5pbGxhLWV4YW1w
bGVzL2VzMjAxNS9pbmRleC5odG1sJywKLSAgICBwcmVwYXJlOiBmdW5jdGlvbiAocnVubmVyLCBj
b250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpIHsKLSAgICAgICAgcmV0dXJuIHJ1bm5lci53
YWl0Rm9yRWxlbWVudCgnLm5ldy10b2RvJykudGhlbihmdW5jdGlvbiAoZWxlbWVudCkgewotICAg
ICAgICAgICAgZWxlbWVudC5mb2N1cygpOwotICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0g
ICAgICAgIH0pOwotICAgIH0sCi0gICAgdGVzdHM6IFsKLSAgICAgICAgbmV3IEJlbmNobWFya1Rl
c3RTdGVwKCdBZGRpbmcnICsgbnVtYmVyT2ZJdGVtc1RvQWRkICsgJ0l0ZW1zJywgZnVuY3Rpb24g
KG5ld1RvZG8sIGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkgewotICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkl0ZW1zVG9BZGQ7IGkrKykgewotICAgICAgICAg
ICAgICAgIG5ld1RvZG8udmFsdWUgPSAnU29tZXRoaW5nIHRvIGRvICcgKyBpOwotICAgICAgICAg
ICAgICAgIG5ld1RvZG8uZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2NoYW5nZScpKTsKLSAgICAg
ICAgICAgICAgICB0cmlnZ2VyRW50ZXIobmV3VG9kbywgJ2tleXByZXNzJyk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0pLAotICAgICAgICBuZXcgQmVuY2htYXJrVGVzdFN0ZXAoJ0NvbXBsZXRp
bmdBbGxJdGVtcycsIGZ1bmN0aW9uIChwYXJhbXMsIGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1
bWVudCkgewotICAgICAgICAgICAgdmFyIGNoZWNrYm94ZXMgPSBjb250ZW50RG9jdW1lbnQucXVl
cnlTZWxlY3RvckFsbCgnLnRvZ2dsZScpOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBjaGVja2JveGVzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICAgIGNoZWNrYm94ZXNbaV0u
Y2xpY2soKTsKLSAgICAgICAgfSksCi0gICAgICAgIG5ldyBCZW5jaG1hcmtUZXN0U3RlcCgnRGVs
ZXRpbmdJdGVtcycsIGZ1bmN0aW9uIChwYXJhbXMsIGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1
bWVudCkgewotICAgICAgICAgICAgdmFyIGRlbGV0ZUJ1dHRvbnMgPSBjb250ZW50RG9jdW1lbnQu
cXVlcnlTZWxlY3RvckFsbCgnLmRlc3Ryb3knKTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgZGVsZXRlQnV0dG9ucy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICBkZWxldGVC
dXR0b25zW2ldLmNsaWNrKCk7Ci0gICAgICAgIH0pLAotICAgIF0KLX0pOwotCi1TdWl0ZXMucHVz
aCh7Ci0gICAgbmFtZTogJ1ZhbmlsbGEtRVMyMDE1LUJhYmVsLVdlYnBhY2stVG9kb01WQycsCi0g
ICAgdXJsOiAndG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL2Rp
c3QvaW5kZXguaHRtbCcsCi0gICAgcHJlcGFyZTogZnVuY3Rpb24gKHJ1bm5lciwgY29udGVudFdp
bmRvdywgY29udGVudERvY3VtZW50KSB7Ci0gICAgICAgIHJldHVybiBydW5uZXIud2FpdEZvckVs
ZW1lbnQoJy5uZXctdG9kbycpLnRoZW4oZnVuY3Rpb24gKGVsZW1lbnQpIHsKLSAgICAgICAgICAg
IGVsZW1lbnQuZm9jdXMoKTsKLSAgICAgICAgICAgIHJldHVybiBlbGVtZW50OwotICAgICAgICB9
KTsKLSAgICB9LAotICAgIHRlc3RzOiBbCi0gICAgICAgIG5ldyBCZW5jaG1hcmtUZXN0U3RlcCgn
QWRkaW5nJyArIG51bWJlck9mSXRlbXNUb0FkZCArICdJdGVtcycsIGZ1bmN0aW9uIChuZXdUb2Rv
LCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpIHsKLSAgICAgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgbnVtYmVyT2ZJdGVtc1RvQWRkOyBpKyspIHsKLSAgICAgICAgICAgICAgICBu
ZXdUb2RvLnZhbHVlID0gJ1NvbWV0aGluZyB0byBkbyAnICsgaTsKLSAgICAgICAgICAgICAgICBu
ZXdUb2RvLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdjaGFuZ2UnKSk7Ci0gICAgICAgICAgICAg
ICAgdHJpZ2dlckVudGVyKG5ld1RvZG8sICdrZXlwcmVzcycpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9KSwKLSAgICAgICAgbmV3IEJlbmNobWFya1Rlc3RTdGVwKCdDb21wbGV0aW5nQWxsSXRl
bXMnLCBmdW5jdGlvbiAocGFyYW1zLCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpIHsK
LSAgICAgICAgICAgIHZhciBjaGVja2JveGVzID0gY29udGVudERvY3VtZW50LnF1ZXJ5U2VsZWN0
b3JBbGwoJy50b2dnbGUnKTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hlY2ti
b3hlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICBjaGVja2JveGVzW2ldLmNsaWNrKCk7
Ci0gICAgICAgIH0pLAotICAgICAgICBuZXcgQmVuY2htYXJrVGVzdFN0ZXAoJ0RlbGV0aW5nSXRl
bXMnLCBmdW5jdGlvbiAocGFyYW1zLCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpIHsK
LSAgICAgICAgICAgIHZhciBkZWxldGVCdXR0b25zID0gY29udGVudERvY3VtZW50LnF1ZXJ5U2Vs
ZWN0b3JBbGwoJy5kZXN0cm95Jyk7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRl
bGV0ZUJ1dHRvbnMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgZGVsZXRlQnV0dG9uc1tp
XS5jbGljaygpOwotICAgICAgICB9KSwKLSAgICBdCi19KTsKLQotU3VpdGVzLnB1c2goewotICAg
IG5hbWU6ICdSZWFjdC1Ub2RvTVZDJywKLSAgICB1cmw6ICd0b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9yZWFjdC9pbmRleC5odG1sJywKLSAgICBwcmVwYXJlOiBmdW5jdGlvbiAocnVubmVy
LCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpIHsKLSAgICAgICAgY29udGVudFdpbmRv
dy5hcHAuVXRpbHMuc3RvcmUgPSBmdW5jdGlvbiAoKSB7fQotICAgICAgICByZXR1cm4gcnVubmVy
LndhaXRGb3JFbGVtZW50KCcubmV3LXRvZG8nKS50aGVuKGZ1bmN0aW9uIChlbGVtZW50KSB7Ci0g
ICAgICAgICAgICBlbGVtZW50LmZvY3VzKCk7Ci0gICAgICAgICAgICByZXR1cm4gZWxlbWVudDsK
LSAgICAgICAgfSk7Ci0gICAgfSwKLSAgICB0ZXN0czogWwotICAgICAgICBuZXcgQmVuY2htYXJr
VGVzdFN0ZXAoJ0FkZGluZycgKyBudW1iZXJPZkl0ZW1zVG9BZGQgKyAnSXRlbXMnLCBmdW5jdGlv
biAobmV3VG9kbywgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7Ci0gICAgICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mSXRlbXNUb0FkZDsgaSsrKSB7Ci0gICAgICAg
ICAgICAgICAgbmV3VG9kby52YWx1ZSA9ICdTb21ldGhpbmcgdG8gZG8gJyArIGk7Ci0gICAgICAg
ICAgICAgICAgbmV3VG9kby5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnaW5wdXQnLCB7Ci0gICAg
ICAgICAgICAgICAgICBidWJibGVzOiB0cnVlLAotICAgICAgICAgICAgICAgICAgY2FuY2VsYWJs
ZTogdHJ1ZQotICAgICAgICAgICAgICAgIH0pKTsKLSAgICAgICAgICAgICAgICB0cmlnZ2VyRW50
ZXIobmV3VG9kbywgJ2tleWRvd24nKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSksCi0gICAg
ICAgIG5ldyBCZW5jaG1hcmtUZXN0U3RlcCgnQ29tcGxldGluZ0FsbEl0ZW1zJywgZnVuY3Rpb24g
KG5ld1RvZG8sIGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkgewotICAgICAgICAgICAg
dmFyIGNoZWNrYm94ZXMgPSBjb250ZW50RG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnRvZ2ds
ZScpOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGVja2JveGVzLmxlbmd0aDsg
aSsrKQotICAgICAgICAgICAgICAgIGNoZWNrYm94ZXNbaV0uY2xpY2soKTsKLSAgICAgICAgfSks
Ci0gICAgICAgIG5ldyBCZW5jaG1hcmtUZXN0U3RlcCgnRGVsZXRpbmdBbGxJdGVtcycsIGZ1bmN0
aW9uIChuZXdUb2RvLCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpIHsKLSAgICAgICAg
ICAgIHZhciBkZWxldGVCdXR0b25zID0gY29udGVudERvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwo
Jy5kZXN0cm95Jyk7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGV0ZUJ1dHRv
bnMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgZGVsZXRlQnV0dG9uc1tpXS5jbGljaygp
OwotICAgICAgICB9KSwKLSAgICBdCi19KTsKLQotU3VpdGVzLnB1c2goewotICAgIG5hbWU6ICdS
ZWFjdC1SZWR1eC1Ub2RvTVZDJywKLSAgICB1cmw6ICd0b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9yZWFjdC1yZWR1eC9kaXN0L2luZGV4Lmh0bWwnLAotICAgIHByZXBhcmU6IGZ1bmN0aW9u
IChydW5uZXIsIGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkgewotICAgICAgICByZXR1
cm4gcnVubmVyLndhaXRGb3JFbGVtZW50KCcubmV3LXRvZG8nKS50aGVuKGZ1bmN0aW9uIChlbGVt
ZW50KSB7Ci0gICAgICAgICAgICBlbGVtZW50LmZvY3VzKCk7Ci0gICAgICAgICAgICByZXR1cm4g
ZWxlbWVudDsKLSAgICAgICAgfSk7Ci0gICAgfSwKLSAgICB0ZXN0czogWwotICAgICAgICBuZXcg
QmVuY2htYXJrVGVzdFN0ZXAoJ0FkZGluZycgKyBudW1iZXJPZkl0ZW1zVG9BZGQgKyAnSXRlbXMn
LCBmdW5jdGlvbiAobmV3VG9kbywgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7Ci0g
ICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mSXRlbXNUb0FkZDsgaSsrKSB7
Ci0gICAgICAgICAgICAgICAgbmV3VG9kby52YWx1ZSA9ICdTb21ldGhpbmcgdG8gZG8gJyArIGk7
Ci0gICAgICAgICAgICAgICAgdHJpZ2dlckVudGVyKG5ld1RvZG8sICdrZXlkb3duJyk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0pLAotICAgICAgICBuZXcgQmVuY2htYXJrVGVzdFN0ZXAoJ0Nv
bXBsZXRpbmdBbGxJdGVtcycsIGZ1bmN0aW9uIChwYXJhbXMsIGNvbnRlbnRXaW5kb3csIGNvbnRl
bnREb2N1bWVudCkgewotICAgICAgICAgICAgdmFyIGNoZWNrYm94ZXMgPSBjb250ZW50RG9jdW1l
bnQucXVlcnlTZWxlY3RvckFsbCgnLnRvZ2dsZScpOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBjaGVja2JveGVzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICAgIGNoZWNrYm94
ZXNbaV0uY2xpY2soKTsKLSAgICAgICAgfSksCi0gICAgICAgIG5ldyBCZW5jaG1hcmtUZXN0U3Rl
cCgnRGVsZXRpbmdJdGVtcycsIGZ1bmN0aW9uIChwYXJhbXMsIGNvbnRlbnRXaW5kb3csIGNvbnRl
bnREb2N1bWVudCkgewotICAgICAgICAgICAgdmFyIGRlbGV0ZUJ1dHRvbnMgPSBjb250ZW50RG9j
dW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmRlc3Ryb3knKTsKLSAgICAgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgZGVsZXRlQnV0dG9ucy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICBk
ZWxldGVCdXR0b25zW2ldLmNsaWNrKCk7Ci0gICAgICAgIH0pLAotICAgIF0KLX0pOwotCi1TdWl0
ZXMucHVzaCh7Ci0gICAgbmFtZTogJ0VtYmVySlMtVG9kb01WQycsCi0gICAgdXJsOiAndG9kb212
Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9kaXN0L2luZGV4Lmh0bWwnLAotICAgIHBy
ZXBhcmU6IGZ1bmN0aW9uIChydW5uZXIsIGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkg
ewotICAgICAgICByZXR1cm4gcnVubmVyLndhaXRGb3JFbGVtZW50KCcjbmV3LXRvZG8nKS50aGVu
KGZ1bmN0aW9uIChlbGVtZW50KSB7Ci0gICAgICAgICAgICBlbGVtZW50LmZvY3VzKCk7Ci0gICAg
ICAgICAgICByZXR1cm4gZWxlbWVudDsKLSAgICAgICAgfSk7Ci0gICAgfSwKLSAgICB0ZXN0czog
WwotICAgICAgICBuZXcgQmVuY2htYXJrVGVzdFN0ZXAoJ0FkZGluZycgKyBudW1iZXJPZkl0ZW1z
VG9BZGQgKyAnSXRlbXMnLCBmdW5jdGlvbiAobmV3VG9kbywgY29udGVudFdpbmRvdywgY29udGVu
dERvY3VtZW50KSB7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mSXRl
bXNUb0FkZDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgbmV3VG9kby52YWx1ZSA9ICdTb21ldGhp
bmcgdG8gZG8gJyArIGk7Ci0gICAgICAgICAgICAgICAgdHJpZ2dlckVudGVyKG5ld1RvZG8sICdr
ZXlkb3duJyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pLAotICAgICAgICBuZXcgQmVuY2ht
YXJrVGVzdFN0ZXAoJ0NvbXBsZXRpbmdBbGxJdGVtcycsIGZ1bmN0aW9uIChwYXJhbXMsIGNvbnRl
bnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkgewotICAgICAgICAgICAgdmFyIGNoZWNrYm94ZXMg
PSBjb250ZW50RG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnRvZ2dsZScpOwotICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGVja2JveGVzLmxlbmd0aDsgaSsrKQotICAgICAgICAg
ICAgICAgIGNoZWNrYm94ZXNbaV0uY2xpY2soKTsKLSAgICAgICAgfSksCi0gICAgICAgIG5ldyBC
ZW5jaG1hcmtUZXN0U3RlcCgnRGVsZXRpbmdJdGVtcycsIGZ1bmN0aW9uIChwYXJhbXMsIGNvbnRl
bnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkgewotICAgICAgICAgICAgdmFyIGRlbGV0ZUJ1dHRv
bnMgPSBjb250ZW50RG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmRlc3Ryb3knKTsKLSAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsZXRlQnV0dG9ucy5sZW5ndGg7IGkrKykKLSAg
ICAgICAgICAgICAgICBkZWxldGVCdXR0b25zW2ldLmNsaWNrKCk7Ci0gICAgICAgIH0pLAotICAg
IF0KLX0pOwotCi1TdWl0ZXMucHVzaCh7Ci0gICAgbmFtZTogJ0VtYmVySlMtRGVidWctVG9kb01W
QycsCisgICAgbmFtZTogJ0VtYmVySlMtRGVidWctVG9kb01WQyAnICsgaiwKICAgICB1cmw6ICd0
b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzLWRlYnVnL2luZGV4Lmh0bWwnLAog
ICAgIHByZXBhcmU6IGZ1bmN0aW9uIChydW5uZXIsIGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1
bWVudCkgewogICAgICAgICByZXR1cm4gcnVubmVyLndhaXRGb3JFbGVtZW50KCcjbmV3LXRvZG8n
KS50aGVuKGZ1bmN0aW9uIChlbGVtZW50KSB7CkBAIC0yMjIsMzU5ICs0Miw0IEBACiAgICAgXQog
fSk7CiAKLVN1aXRlcy5wdXNoKHsKLSAgICBuYW1lOiAnQmFja2JvbmVKUy1Ub2RvTVZDJywKLSAg
ICB1cmw6ICd0b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9pbmRleC5odG1s
JywKLSAgICBwcmVwYXJlOiBmdW5jdGlvbiAocnVubmVyLCBjb250ZW50V2luZG93LCBjb250ZW50
RG9jdW1lbnQpIHsKLSAgICBjb250ZW50V2luZG93LkJhY2tib25lLnN5bmMgPSBmdW5jdGlvbiAo
KSB7fQotICAgICAgICByZXR1cm4gcnVubmVyLndhaXRGb3JFbGVtZW50KCcjYXBwSXNSZWFkeScp
LnRoZW4oZnVuY3Rpb24gKGVsZW1lbnQpIHsKLSAgICAgICAgICAgIHZhciBuZXdUb2RvID0gY29u
dGVudERvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5uZXctdG9kbycpOwotICAgICAgICAgICAgbmV3
VG9kby5mb2N1cygpOwotICAgICAgICAgICAgcmV0dXJuIG5ld1RvZG87Ci0gICAgICAgIH0pOwot
ICAgIH0sCi0gICAgdGVzdHM6IFsKLSAgICAgICAgbmV3IEJlbmNobWFya1Rlc3RTdGVwKCdBZGRp
bmcnICsgbnVtYmVyT2ZJdGVtc1RvQWRkICsgJ0l0ZW1zJywgZnVuY3Rpb24gKG5ld1RvZG8sIGNv
bnRlbnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkgewotICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBudW1iZXJPZkl0ZW1zVG9BZGQ7IGkrKykgewotICAgICAgICAgICAgICAgIG5ld1Rv
ZG8udmFsdWUgPSAnU29tZXRoaW5nIHRvIGRvICcgKyBpOwotICAgICAgICAgICAgICAgIHRyaWdn
ZXJFbnRlcihuZXdUb2RvLCAna2V5cHJlc3MnKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSks
Ci0gICAgICAgIG5ldyBCZW5jaG1hcmtUZXN0U3RlcCgnQ29tcGxldGluZ0FsbEl0ZW1zJywgZnVu
Y3Rpb24gKG5ld1RvZG8sIGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkgewotICAgICAg
ICAgICAgdmFyIGNoZWNrYm94ZXMgPSBjb250ZW50RG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgn
LnRvZ2dsZScpOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkl0ZW1z
VG9BZGQ7IGkrKykKLSAgICAgICAgICAgICAgICBjaGVja2JveGVzW2ldLmNsaWNrKCk7Ci0gICAg
ICAgIH0pLAotICAgICAgICBuZXcgQmVuY2htYXJrVGVzdFN0ZXAoJ0RlbGV0aW5nQWxsSXRlbXMn
LCBmdW5jdGlvbiAobmV3VG9kbywgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7Ci0g
ICAgICAgICAgICB2YXIgZGVsZXRlQnV0dG9ucyA9IGNvbnRlbnREb2N1bWVudC5xdWVyeVNlbGVj
dG9yQWxsKCcuZGVzdHJveScpOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1i
ZXJPZkl0ZW1zVG9BZGQ7IGkrKykKLSAgICAgICAgICAgICAgICBkZWxldGVCdXR0b25zW2ldLmNs
aWNrKCk7Ci0gICAgICAgIH0pLAotICAgIF0KLX0pOwotCi1TdWl0ZXMucHVzaCh7Ci0gICAgbmFt
ZTogJ0FuZ3VsYXJKUy1Ub2RvTVZDJywKLSAgICB1cmw6ICd0b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9hbmd1bGFyanMvaW5kZXguaHRtbCcsCi0gICAgcHJlcGFyZTogZnVuY3Rpb24gKHJ1
bm5lciwgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7Ci0gICAgICAgIHJldHVybiBy
dW5uZXIud2FpdEZvckVsZW1lbnQoJyNuZXctdG9kbycpLnRoZW4oZnVuY3Rpb24gKGVsZW1lbnQp
IHsKLSAgICAgICAgICAgIGVsZW1lbnQuZm9jdXMoKTsKLSAgICAgICAgICAgIHJldHVybiBlbGVt
ZW50OwotICAgICAgICB9KTsKLSAgICB9LAotICAgIHRlc3RzOiBbCi0gICAgICAgIG5ldyBCZW5j
aG1hcmtUZXN0U3RlcCgnQWRkaW5nJyArIG51bWJlck9mSXRlbXNUb0FkZCArICdJdGVtcycsIGZ1
bmN0aW9uIChuZXdUb2RvLCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpIHsKLSAgICAg
ICAgICAgIHZhciBzdWJtaXRFdmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpOwot
ICAgICAgICAgICAgc3VibWl0RXZlbnQuaW5pdEV2ZW50KCdzdWJtaXQnLCB0cnVlLCB0cnVlKTsK
LSAgICAgICAgICAgIHZhciBpbnB1dEV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50
Jyk7Ci0gICAgICAgICAgICBpbnB1dEV2ZW50LmluaXRFdmVudCgnaW5wdXQnLCB0cnVlLCB0cnVl
KTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZJdGVtc1RvQWRkOyBp
KyspIHsKLSAgICAgICAgICAgICAgICBuZXdUb2RvLnZhbHVlID0gJ1NvbWV0aGluZyB0byBkbyAn
ICsgaTsKLSAgICAgICAgICAgICAgICBuZXdUb2RvLmRpc3BhdGNoRXZlbnQoaW5wdXRFdmVudCk7
Ci0gICAgICAgICAgICAgICAgbmV3VG9kby5mb3JtLmRpc3BhdGNoRXZlbnQoc3VibWl0RXZlbnQp
OwotICAgICAgICAgICAgfQotICAgICAgICB9KSwKLSAgICAgICAgbmV3IEJlbmNobWFya1Rlc3RT
dGVwKCdDb21wbGV0aW5nQWxsSXRlbXMnLCBmdW5jdGlvbiAobmV3VG9kbywgY29udGVudFdpbmRv
dywgY29udGVudERvY3VtZW50KSB7Ci0gICAgICAgICAgICB2YXIgY2hlY2tib3hlcyA9IGNvbnRl
bnREb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudG9nZ2xlJyk7Ci0gICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGNoZWNrYm94ZXMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAg
Y2hlY2tib3hlc1tpXS5jbGljaygpOwotICAgICAgICB9KSwKLSAgICAgICAgbmV3IEJlbmNobWFy
a1Rlc3RTdGVwKCdEZWxldGluZ0FsbEl0ZW1zJywgZnVuY3Rpb24gKG5ld1RvZG8sIGNvbnRlbnRX
aW5kb3csIGNvbnRlbnREb2N1bWVudCkgewotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBudW1iZXJPZkl0ZW1zVG9BZGQ7IGkrKykKLSAgICAgICAgICAgICAgICBjb250ZW50RG9jdW1l
bnQucXVlcnlTZWxlY3RvcignLmRlc3Ryb3knKS5jbGljaygpOwotICAgICAgICB9KSwKLSAgICBd
Ci19KTsKLQotU3VpdGVzLnB1c2goewotICAgIG5hbWU6ICdBbmd1bGFyMi1UeXBlU2NyaXB0LVRv
ZG9NVkMnLAotICAgIHVybDogJ3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXIv
ZGlzdC9pbmRleC5odG1sJywKLSAgICBwcmVwYXJlOiBmdW5jdGlvbiAocnVubmVyLCBjb250ZW50
V2luZG93LCBjb250ZW50RG9jdW1lbnQpIHsKLSAgICAgICAgcmV0dXJuIHJ1bm5lci53YWl0Rm9y
RWxlbWVudCgnLm5ldy10b2RvJykudGhlbihmdW5jdGlvbiAoZWxlbWVudCkgewotICAgICAgICAg
ICAgZWxlbWVudC5mb2N1cygpOwotICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0gICAgICAg
IH0pOwotICAgIH0sCi0gICAgdGVzdHM6IFsKLSAgICAgICAgbmV3IEJlbmNobWFya1Rlc3RTdGVw
KCdBZGRpbmcnICsgbnVtYmVyT2ZJdGVtc1RvQWRkICsgJ0l0ZW1zJywgZnVuY3Rpb24gKG5ld1Rv
ZG8sIGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkgewotICAgICAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBudW1iZXJPZkl0ZW1zVG9BZGQ7IGkrKykgewotICAgICAgICAgICAgICAg
IG5ld1RvZG8udmFsdWUgPSAnU29tZXRoaW5nIHRvIGRvICcgKyBpOwotICAgICAgICAgICAgICAg
IG5ld1RvZG8uZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2lucHV0JywgewotICAgICAgICAgICAg
ICAgICAgYnViYmxlczogdHJ1ZSwKLSAgICAgICAgICAgICAgICAgIGNhbmNlbGFibGU6IHRydWUK
LSAgICAgICAgICAgICAgICB9KSk7Ci0gICAgICAgICAgICAgICAgdHJpZ2dlckVudGVyKG5ld1Rv
ZG8sICdrZXl1cCcpOwotICAgICAgICAgICAgfQotICAgICAgICB9KSwKLSAgICAgICAgbmV3IEJl
bmNobWFya1Rlc3RTdGVwKCdDb21wbGV0aW5nQWxsSXRlbXMnLCBmdW5jdGlvbiAocGFyYW1zLCBj
b250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpIHsKLSAgICAgICAgICAgIHZhciBjaGVja2Jv
eGVzID0gY29udGVudERvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50b2dnbGUnKTsKLSAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hlY2tib3hlcy5sZW5ndGg7IGkrKykKLSAgICAg
ICAgICAgICAgICBjaGVja2JveGVzW2ldLmNsaWNrKCk7Ci0gICAgICAgIH0pLAotICAgICAgICBu
ZXcgQmVuY2htYXJrVGVzdFN0ZXAoJ0RlbGV0aW5nSXRlbXMnLCBmdW5jdGlvbiAocGFyYW1zLCBj
b250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpIHsKLSAgICAgICAgICAgIHZhciBkZWxldGVC
dXR0b25zID0gY29udGVudERvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5kZXN0cm95Jyk7Ci0g
ICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGV0ZUJ1dHRvbnMubGVuZ3RoOyBpKysp
Ci0gICAgICAgICAgICAgICAgZGVsZXRlQnV0dG9uc1tpXS5jbGljaygpOwotICAgICAgICB9KSwK
LSAgICBdCi19KTsKLQotU3VpdGVzLnB1c2goewotICAgIG5hbWU6ICdWdWVKUy1Ub2RvTVZDJywK
LSAgICB1cmw6ICd0b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy92dWVqcy1jbGkvZGlzdC9p
bmRleC5odG1sJywKLSAgICBwcmVwYXJlOiBmdW5jdGlvbiAocnVubmVyLCBjb250ZW50V2luZG93
LCBjb250ZW50RG9jdW1lbnQpIHsKLSAgICAgICAgcmV0dXJuIHJ1bm5lci53YWl0Rm9yRWxlbWVu
dCgnLm5ldy10b2RvJykudGhlbihmdW5jdGlvbiAoZWxlbWVudCkgewotICAgICAgICAgICAgZWxl
bWVudC5mb2N1cygpOwotICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0gICAgICAgIH0pOwot
ICAgIH0sCi0gICAgdGVzdHM6IFsKLSAgICAgICAgbmV3IEJlbmNobWFya1Rlc3RTdGVwKCdBZGRp
bmcnICsgbnVtYmVyT2ZJdGVtc1RvQWRkICsgJ0l0ZW1zJywgZnVuY3Rpb24gKG5ld1RvZG8sIGNv
bnRlbnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkgewotICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBudW1iZXJPZkl0ZW1zVG9BZGQ7IGkrKykgewotICAgICAgICAgICAgICAgIG5ld1Rv
ZG8udmFsdWUgPSAnU29tZXRoaW5nIHRvIGRvICcgKyBpOwotICAgICAgICAgICAgICAgIG5ld1Rv
ZG8uZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2lucHV0JywgewotICAgICAgICAgICAgICAgICAg
YnViYmxlczogdHJ1ZSwKLSAgICAgICAgICAgICAgICAgIGNhbmNlbGFibGU6IHRydWUKLSAgICAg
ICAgICAgICAgICB9KSk7Ci0gICAgICAgICAgICAgICAgdHJpZ2dlckVudGVyKG5ld1RvZG8sICdr
ZXl1cCcpOwotICAgICAgICAgICAgfQotICAgICAgICB9KSwKLSAgICAgICAgbmV3IEJlbmNobWFy
a1Rlc3RTdGVwKCdDb21wbGV0aW5nQWxsSXRlbXMnLCBmdW5jdGlvbiAobmV3VG9kbywgY29udGVu
dFdpbmRvdywgY29udGVudERvY3VtZW50KSB7Ci0gICAgICAgICAgICB2YXIgY2hlY2tib3hlcyA9
IGNvbnRlbnREb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudG9nZ2xlJyk7Ci0gICAgICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGNoZWNrYm94ZXMubGVuZ3RoOyBpKyspCi0gICAgICAgICAg
ICAgICAgY2hlY2tib3hlc1tpXS5jbGljaygpOwotICAgICAgICB9KSwKLSAgICAgICAgbmV3IEJl
bmNobWFya1Rlc3RTdGVwKCdEZWxldGluZ0FsbEl0ZW1zJywgZnVuY3Rpb24gKG5ld1RvZG8sIGNv
bnRlbnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkgewotICAgICAgICAgICAgdmFyIGRlbGV0ZUJ1
dHRvbnMgPSBjb250ZW50RG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmRlc3Ryb3knKTsKLSAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsZXRlQnV0dG9ucy5sZW5ndGg7IGkrKykK
LSAgICAgICAgICAgICAgICBkZWxldGVCdXR0b25zW2ldLmNsaWNrKCk7Ci0gICAgICAgIH0pLAot
ICAgIF0KLX0pOwotCi1TdWl0ZXMucHVzaCh7Ci0gICAgbmFtZTogJ2pRdWVyeS1Ub2RvTVZDJywK
LSAgICB1cmw6ICd0b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9qcXVlcnkvaW5kZXguaHRt
bCcsCi0gICAgcHJlcGFyZTogZnVuY3Rpb24gKHJ1bm5lciwgY29udGVudFdpbmRvdywgY29udGVu
dERvY3VtZW50KSB7Ci0gICAgICAgIHJldHVybiBydW5uZXIud2FpdEZvckVsZW1lbnQoJyNhcHBJ
c1JlYWR5JykudGhlbihmdW5jdGlvbiAoZWxlbWVudCkgewotICAgICAgICAgICAgdmFyIG5ld1Rv
ZG8gPSBjb250ZW50RG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25ldy10b2RvJyk7Ci0gICAgICAg
ICAgICBuZXdUb2RvLmZvY3VzKCk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3VG9kbzsKLSAgICAg
ICAgfSk7Ci0gICAgfSwKLSAgICB0ZXN0czogWwotICAgICAgICBuZXcgQmVuY2htYXJrVGVzdFN0
ZXAoJ0FkZGluZycgKyBudW1iZXJPZkl0ZW1zVG9BZGQgKyAnSXRlbXMnLCBmdW5jdGlvbiAobmV3
VG9kbywgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7Ci0gICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IG51bWJlck9mSXRlbXNUb0FkZDsgaSsrKSB7Ci0gICAgICAgICAgICAg
ICAgbmV3VG9kby52YWx1ZSA9ICdTb21ldGhpbmcgdG8gZG8gJyArIGk7Ci0gICAgICAgICAgICAg
ICAgdHJpZ2dlckVudGVyKG5ld1RvZG8sICdrZXl1cCcpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9KSwKLSAgICAgICAgbmV3IEJlbmNobWFya1Rlc3RTdGVwKCdDb21wbGV0aW5nQWxsSXRlbXMn
LCBmdW5jdGlvbiAobmV3VG9kbywgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7Ci0g
ICAgICAgICAgICB2YXIgY2hlY2tib3hlcyA9IGNvbnRlbnREb2N1bWVudC5nZXRFbGVtZW50c0J5
Q2xhc3NOYW1lKCd0b2dnbGUnKTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hl
Y2tib3hlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICBjaGVja2JveGVzW2ldLmNsaWNr
KCk7Ci0gICAgICAgIH0pLAotICAgICAgICBuZXcgQmVuY2htYXJrVGVzdFN0ZXAoJ0RlbGV0aW5n
QWxsSXRlbXMnLCBmdW5jdGlvbiAobmV3VG9kbywgY29udGVudFdpbmRvdywgY29udGVudERvY3Vt
ZW50KSB7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mSXRlbXNUb0Fk
ZDsgaSsrKQotICAgICAgICAgICAgICAgIGNvbnRlbnREb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcu
ZGVzdHJveScpLmNsaWNrKCk7Ci0gICAgICAgIH0pLAotICAgIF0KLX0pCi0KLVN1aXRlcy5wdXNo
KHsKLSAgICBuYW1lOiAnUHJlYWN0LVRvZG9NVkMnLAotICAgIHVybDogJ3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL3ByZWFjdC9kaXN0L2luZGV4Lmh0bWwnLAotICAgIHByZXBhcmU6IGZ1
bmN0aW9uIChydW5uZXIsIGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkgewotICAgICAg
ICByZXR1cm4gcnVubmVyLndhaXRGb3JFbGVtZW50KCcubmV3LXRvZG8nKS50aGVuKGZ1bmN0aW9u
IChlbGVtZW50KSB7Ci0gICAgICAgICAgICBlbGVtZW50LmZvY3VzKCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gZWxlbWVudDsKLSAgICAgICAgfSk7Ci0gICAgfSwKLSAgICB0ZXN0czogWwotICAgICAg
ICBuZXcgQmVuY2htYXJrVGVzdFN0ZXAoJ0FkZGluZycgKyBudW1iZXJPZkl0ZW1zVG9BZGQgKyAn
SXRlbXMnLCBmdW5jdGlvbiAobmV3VG9kbywgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50
KSB7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mSXRlbXNUb0FkZDsg
aSsrKSB7Ci0gICAgICAgICAgICAgICAgbmV3VG9kby52YWx1ZSA9ICdTb21ldGhpbmcgdG8gZG8g
JyArIGk7Ci0gICAgICAgICAgICAgICAgdHJpZ2dlckVudGVyKG5ld1RvZG8sICdrZXlkb3duJyk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pLAotICAgICAgICBuZXcgQmVuY2htYXJrVGVzdFN0
ZXAoJ0NvbXBsZXRpbmdBbGxJdGVtcycsIGZ1bmN0aW9uIChwYXJhbXMsIGNvbnRlbnRXaW5kb3cs
IGNvbnRlbnREb2N1bWVudCkgewotICAgICAgICAgICAgdmFyIGNoZWNrYm94ZXMgPSBjb250ZW50
RG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnRvZ2dsZScpOwotICAgICAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBjaGVja2JveGVzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICAgIGNo
ZWNrYm94ZXNbaV0uY2xpY2soKTsKLSAgICAgICAgfSksCi0gICAgICAgIG5ldyBCZW5jaG1hcmtU
ZXN0U3RlcCgnRGVsZXRpbmdJdGVtcycsIGZ1bmN0aW9uIChwYXJhbXMsIGNvbnRlbnRXaW5kb3cs
IGNvbnRlbnREb2N1bWVudCkgewotICAgICAgICAgICAgdmFyIGRlbGV0ZUJ1dHRvbnMgPSBjb250
ZW50RG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmRlc3Ryb3knKTsKLSAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgZGVsZXRlQnV0dG9ucy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAg
ICAgICBkZWxldGVCdXR0b25zW2ldLmNsaWNrKCk7Ci0gICAgICAgIH0pLAotICAgIF0KLX0pOwot
Ci1TdWl0ZXMucHVzaCh7Ci0gICAgbmFtZTogJ0luZmVybm8tVG9kb01WQycsCi0gICAgdXJsOiAn
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvaW5mZXJuby9pbmRleC5odG1sJywKLSAgICBw
cmVwYXJlOiBmdW5jdGlvbiAocnVubmVyLCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQp
IHsKLSAgICAgICAgcmV0dXJuIHJ1bm5lci53YWl0Rm9yRWxlbWVudCgnLm5ldy10b2RvJykudGhl
bihmdW5jdGlvbiAoZWxlbWVudCkgewotICAgICAgICAgICAgZWxlbWVudC5mb2N1cygpOwotICAg
ICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0gICAgICAgIH0pOwotICAgIH0sCi0gICAgdGVzdHM6
IFsKLSAgICAgICAgbmV3IEJlbmNobWFya1Rlc3RTdGVwKCdBZGRpbmcnICsgbnVtYmVyT2ZJdGVt
c1RvQWRkICsgJ0l0ZW1zJywgZnVuY3Rpb24gKG5ld1RvZG8sIGNvbnRlbnRXaW5kb3csIGNvbnRl
bnREb2N1bWVudCkgewotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkl0
ZW1zVG9BZGQ7IGkrKykgewotICAgICAgICAgICAgICAgIG5ld1RvZG8udmFsdWUgPSAnU29tZXRo
aW5nIHRvIGRvICcgKyBpOwotICAgICAgICAgICAgICAgIG5ld1RvZG8uZGlzcGF0Y2hFdmVudChu
ZXcgRXZlbnQoJ2NoYW5nZScsIHsKLSAgICAgICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCi0g
ICAgICAgICAgICAgICAgICBjYW5jZWxhYmxlOiB0cnVlCi0gICAgICAgICAgICAgICAgfSkpOwot
ICAgICAgICAgICAgICAgIHRyaWdnZXJFbnRlcihuZXdUb2RvLCAna2V5ZG93bicpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9KSwKLSAgICAgICAgbmV3IEJlbmNobWFya1Rlc3RTdGVwKCdDb21w
bGV0aW5nQWxsSXRlbXMnLCBmdW5jdGlvbiAocGFyYW1zLCBjb250ZW50V2luZG93LCBjb250ZW50
RG9jdW1lbnQpIHsKLSAgICAgICAgICAgIHZhciBjaGVja2JveGVzID0gY29udGVudERvY3VtZW50
LnF1ZXJ5U2VsZWN0b3JBbGwoJy50b2dnbGUnKTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgY2hlY2tib3hlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICBjaGVja2JveGVz
W2ldLmNsaWNrKCk7Ci0gICAgICAgIH0pLAotICAgICAgICBuZXcgQmVuY2htYXJrVGVzdFN0ZXAo
J0RlbGV0aW5nSXRlbXMnLCBmdW5jdGlvbiAocGFyYW1zLCBjb250ZW50V2luZG93LCBjb250ZW50
RG9jdW1lbnQpIHsKLSAgICAgICAgICAgIHZhciBkZWxldGVCdXR0b25zID0gY29udGVudERvY3Vt
ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5kZXN0cm95Jyk7Ci0gICAgICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IG51bWJlck9mSXRlbXNUb0FkZDsgaSsrKQotICAgICAgICAgICAgICAgIGNvbnRl
bnREb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZGVzdHJveScpLmNsaWNrKCk7Ci0gICAgICAgIH0p
LAotICAgIF0KLX0pOwotCi1mdW5jdGlvbiBwcm9jZXNzRWxtV29ya1F1ZXVlKGNvbnRlbnRXaW5k
b3cpCi17Ci0gICAgY29udGVudFdpbmRvdy5lbG1Xb3JrKCk7Ci0gICAgdmFyIGNhbGxiYWNrcyA9
IGNvbnRlbnRXaW5kb3cuckFGQ2FsbGJhY2tMaXN0OwotICAgIHZhciBpID0gMDsKLSAgICB3aGls
ZSAoaSA8IGNhbGxiYWNrcy5sZW5ndGgpIHsKLSAgICAgICAgY2FsbGJhY2tzW2ldKCk7Ci0gICAg
ICAgIGkrKzsKLSAgICB9Ci0gICAgY29udGVudFdpbmRvdy5yQUZDYWxsYmFja0xpc3QgPSBbXTsK
IH0KLQotU3VpdGVzLnB1c2goewotICAgIG5hbWU6ICdFbG0tVG9kb01WQycsCi0gICAgdXJsOiAn
dG9kb212Yy9mdW5jdGlvbmFsLXByb2ctZXhhbXBsZXMvZWxtL2luZGV4Lmh0bWwnLAotICAgIHBy
ZXBhcmU6IGZ1bmN0aW9uIChydW5uZXIsIGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkg
ewotICAgICAgICByZXR1cm4gcnVubmVyLndhaXRGb3JFbGVtZW50KCcubmV3LXRvZG8nKS50aGVu
KGZ1bmN0aW9uIChlbGVtZW50KSB7Ci0gICAgICAgICAgICBlbGVtZW50LmZvY3VzKCk7Ci0gICAg
ICAgICAgICByZXR1cm4gZWxlbWVudDsKLSAgICAgICAgfSk7Ci0gICAgfSwKLSAgICB0ZXN0czog
WwotICAgICAgICBuZXcgQmVuY2htYXJrVGVzdFN0ZXAoJ0FkZGluZycgKyBudW1iZXJPZkl0ZW1z
VG9BZGQgKyAnSXRlbXMnLCBmdW5jdGlvbiAobmV3VG9kbywgY29udGVudFdpbmRvdywgY29udGVu
dERvY3VtZW50KSB7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mSXRl
bXNUb0FkZDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgbmV3VG9kby52YWx1ZSA9ICdTb21ldGhp
bmcgdG8gZG8gJyArIGk7Ci0gICAgICAgICAgICAgICAgbmV3VG9kby5kaXNwYXRjaEV2ZW50KG5l
dyBFdmVudCgnaW5wdXQnLCB7Ci0gICAgICAgICAgICAgICAgICBidWJibGVzOiB0cnVlLAotICAg
ICAgICAgICAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZQotICAgICAgICAgICAgICAgIH0pKTsKLSAg
ICAgICAgICAgICAgICBwcm9jZXNzRWxtV29ya1F1ZXVlKGNvbnRlbnRXaW5kb3cpOwotICAgICAg
ICAgICAgICAgIHRyaWdnZXJFbnRlcihuZXdUb2RvLCAna2V5ZG93bicpOwotICAgICAgICAgICAg
ICAgIHByb2Nlc3NFbG1Xb3JrUXVldWUoY29udGVudFdpbmRvdyk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0pLAotICAgICAgICBuZXcgQmVuY2htYXJrVGVzdFN0ZXAoJ0NvbXBsZXRpbmdBbGxJ
dGVtcycsIGZ1bmN0aW9uIChwYXJhbXMsIGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkg
ewotICAgICAgICAgICAgdmFyIGNoZWNrYm94ZXMgPSBjb250ZW50RG9jdW1lbnQucXVlcnlTZWxl
Y3RvckFsbCgnLnRvZ2dsZScpOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGVj
a2JveGVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgY2hlY2tib3hlc1tpXS5jbGlj
aygpOwotICAgICAgICAgICAgICAgIHByb2Nlc3NFbG1Xb3JrUXVldWUoY29udGVudFdpbmRvdyk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pLAotICAgICAgICBuZXcgQmVuY2htYXJrVGVzdFN0
ZXAoJ0RlbGV0aW5nSXRlbXMnLCBmdW5jdGlvbiAocGFyYW1zLCBjb250ZW50V2luZG93LCBjb250
ZW50RG9jdW1lbnQpIHsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZJ
dGVtc1RvQWRkOyBpKyspIHsKLSAgICAgICAgICAgICAgICBjb250ZW50RG9jdW1lbnQucXVlcnlT
ZWxlY3RvcignLmRlc3Ryb3knKS5jbGljaygpOwotICAgICAgICAgICAgICAgIHByb2Nlc3NFbG1X
b3JrUXVldWUoY29udGVudFdpbmRvdyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pLAotICAg
IF0KLX0pOwotCi1TdWl0ZXMucHVzaCh7Ci0gICAgbmFtZTogJ0ZsaWdodC1Ub2RvTVZDJywKLSAg
ICB1cmw6ICd0b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9pbmRleC5o
dG1sJywKLSAgICBwcmVwYXJlOiBmdW5jdGlvbiAocnVubmVyLCBjb250ZW50V2luZG93LCBjb250
ZW50RG9jdW1lbnQpIHsKLSAgICAgICAgcmV0dXJuIHJ1bm5lci53YWl0Rm9yRWxlbWVudCgnI2Fw
cElzUmVhZHknKS50aGVuKGZ1bmN0aW9uIChlbGVtZW50KSB7Ci0gICAgICAgICAgICB2YXIgbmV3
VG9kbyA9IGNvbnRlbnREb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbmV3LXRvZG8nKTsKLSAgICAg
ICAgICAgIG5ld1RvZG8uZm9jdXMoKTsKLSAgICAgICAgICAgIHJldHVybiBuZXdUb2RvOwotICAg
ICAgICB9KTsKLSAgICB9LAotICAgIHRlc3RzOiBbCi0gICAgICAgIG5ldyBCZW5jaG1hcmtUZXN0
U3RlcCgnQWRkaW5nJyArIG51bWJlck9mSXRlbXNUb0FkZCArICdJdGVtcycsIGZ1bmN0aW9uIChu
ZXdUb2RvLCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpIHsKLSAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZJdGVtc1RvQWRkOyBpKyspIHsKLSAgICAgICAgICAg
ICAgICBuZXdUb2RvLnZhbHVlID0gJ1NvbWV0aGluZyB0byBkbyAnICsgaTsKLSAgICAgICAgICAg
ICAgICB0cmlnZ2VyRW50ZXIobmV3VG9kbywgJ2tleWRvd24nKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSksCi0gICAgICAgIG5ldyBCZW5jaG1hcmtUZXN0U3RlcCgnQ29tcGxldGluZ0FsbEl0
ZW1zJywgZnVuY3Rpb24gKHBhcmFtcywgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7
Ci0gICAgICAgICAgICB2YXIgY2hlY2tib3hlcyA9IGNvbnRlbnREb2N1bWVudC5xdWVyeVNlbGVj
dG9yQWxsKCcudG9nZ2xlJyk7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoZWNr
Ym94ZXMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgY2hlY2tib3hlc1tpXS5jbGljaygp
OwotICAgICAgICB9KSwKLSAgICAgICAgbmV3IEJlbmNobWFya1Rlc3RTdGVwKCdEZWxldGluZ0l0
ZW1zJywgZnVuY3Rpb24gKHBhcmFtcywgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7
Ci0gICAgICAgICAgICB2YXIgZGVsZXRlQnV0dG9ucyA9IGNvbnRlbnREb2N1bWVudC5xdWVyeVNl
bGVjdG9yQWxsKCcuZGVzdHJveScpOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBk
ZWxldGVCdXR0b25zLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICAgIGRlbGV0ZUJ1dHRvbnNb
aV0uY2xpY2soKTsKLSAgICAgICAgfSksCi0gICAgXQotfSk7Ci0KLXZhciBhY3Rpb25Db3VudCA9
IDUwOwotU3VpdGVzLnB1c2goewotICAgIGRpc2FibGVkOiB0cnVlLAotICAgIG5hbWU6ICdGbGln
aHRKUy1NYWlsQ2xpZW50JywKLSAgICB1cmw6ICdmbGlnaHRqcy1leGFtcGxlLWFwcC9pbmRleC5o
dG1sJywKLSAgICBwcmVwYXJlOiBmdW5jdGlvbiAocnVubmVyLCBjb250ZW50V2luZG93LCBjb250
ZW50RG9jdW1lbnQpIHsKLSAgICAgICAgcmV0dXJuIHJ1bm5lci53YWl0Rm9yRWxlbWVudCgnLnNw
YW44JykudGhlbihmdW5jdGlvbiAoZWxlbWVudCkgewotICAgICAgICAgICAgZWxlbWVudC5mb2N1
cygpOwotICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0gICAgICAgIH0pOwotICAgIH0sCi0g
ICAgdGVzdHM6IFsKLSAgICAgICAgbmV3IEJlbmNobWFya1Rlc3RTdGVwKCdPcGVuaW5nVGFicycg
KyBhY3Rpb25Db3VudCArICdUaW1lcycsIGZ1bmN0aW9uIChuZXdUb2RvLCBjb250ZW50V2luZG93
LCBjb250ZW50RG9jdW1lbnQpIHsKLSAgICAgICAgICAgIGNvbnRlbnREb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnaW5ib3gnKS5jbGljaygpOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBhY3Rpb25Db3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgY29udGVudERvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdsYXRlcicpLmNsaWNrKCk7Ci0gICAgICAgICAgICAgICAgY29udGVudERv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZW50JykuY2xpY2soKTsKLSAgICAgICAgICAgICAgICBj
b250ZW50RG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RyYXNoJykuY2xpY2soKTsKLSAgICAgICAg
ICAgICAgICBjb250ZW50RG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luYm94JykuY2xpY2soKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfSksCi0gICAgICAgIG5ldyBCZW5jaG1hcmtUZXN0U3Rl
cCgnTW92aW5nRW1haWxzJyArIGFjdGlvbkNvdW50ICsgJ1RpbWVzJywgZnVuY3Rpb24gKG5ld1Rv
ZG8sIGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkgewotICAgICAgICAgICAgY29udGVu
dERvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbmJveCcpLmNsaWNrKCk7Ci0gICAgICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGFjdGlvbkNvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICBj
b250ZW50RG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haWxfMjEzOScpLmNsaWNrKCk7Ci0gICAg
ICAgICAgICAgICAgY29udGVudERvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb3ZlX21haWwnKS5j
bGljaygpOwotICAgICAgICAgICAgICAgIGNvbnRlbnREb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcj
bW92ZV90b19zZWxlY3RvciAjbGF0ZXInKS5jbGljaygpOwotICAgICAgICAgICAgICAgIGNvbnRl
bnREb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGF0ZXInKS5jbGljaygpOwotICAgICAgICAgICAg
ICAgIGNvbnRlbnREb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbF8yMTM5JykuY2xpY2soKTsK
LSAgICAgICAgICAgICAgICBjb250ZW50RG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vdmVfbWFp
bCcpLmNsaWNrKCk7Ci0gICAgICAgICAgICAgICAgY29udGVudERvY3VtZW50LnF1ZXJ5U2VsZWN0
b3IoJyNtb3ZlX3RvX3NlbGVjdG9yICN0cmFzaCcpLmNsaWNrKCk7Ci0gICAgICAgICAgICAgICAg
Y29udGVudERvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0cmFzaCcpLmNsaWNrKCk7Ci0gICAgICAg
ICAgICAgICAgY29udGVudERvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWlsXzIxMzknKS5jbGlj
aygpOwotICAgICAgICAgICAgICAgIGNvbnRlbnREb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW92
ZV9tYWlsJykuY2xpY2soKTsKLSAgICAgICAgICAgICAgICBjb250ZW50RG9jdW1lbnQucXVlcnlT
ZWxlY3RvcignI21vdmVfdG9fc2VsZWN0b3IgI2luYm94JykuY2xpY2soKTsKLSAgICAgICAgICAg
ICAgICBjb250ZW50RG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luYm94JykuY2xpY2soKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSksCi0gICAgICAgIG5ldyBCZW5jaG1hcmtUZXN0U3RlcCgn
U2VuZGluZycgKyBhY3Rpb25Db3VudCArICdOZXdFbWFpbHMnLCBmdW5jdGlvbiAobmV3VG9kbywg
Y29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7Ci0gICAgICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGFjdGlvbkNvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICBjb250ZW50RG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25ld19tYWlsJykuY2xpY2soKTsKLSAgICAgICAgICAgICAg
ICBjb250ZW50RG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlY2lwaWVudF9zZWxlY3QnKS5zZWxl
Y3RlZEluZGV4ID0gMTsKLSAgICAgICAgICAgICAgICB2YXIgc3ViamVjdCA9IGNvbnRlbnREb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnY29tcG9zZV9zdWJqZWN0Jyk7Ci0gICAgICAgICAgICAgICAg
dmFyIG1lc3NhZ2UgPSBjb250ZW50RG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbXBvc2VfbWVz
c2FnZScpOwotICAgICAgICAgICAgICAgIHN1YmplY3QuZm9jdXMoKTsKLSAgICAgICAgICAgICAg
ICBjb250ZW50V2luZG93LiQoc3ViamVjdCkudHJpZ2dlcigna2V5ZG93bicpOwotICAgICAgICAg
ICAgICAgIGNvbnRlbnRXaW5kb3cuJChzdWJqZWN0KS50ZXh0KCdIZWxsbycpOwotICAgICAgICAg
ICAgICAgIG1lc3NhZ2UuZm9jdXMoKTsKLSAgICAgICAgICAgICAgICBjb250ZW50V2luZG93LiQo
bWVzc2FnZSkudHJpZ2dlcigna2V5ZG93bicpOwotICAgICAgICAgICAgICAgIGNvbnRlbnRXaW5k
b3cuJChtZXNzYWdlKS50ZXh0KCdIZWxsbyxcblxuVGhpcyBpcyBhIHRlc3QgbWVzc2FnZS5cblxu
LSBXZWJLaXR0ZW4nKTsKLSAgICAgICAgICAgICAgICBjb250ZW50RG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ3NlbmRfY29tcG9zZWQnKS5jbGljaygpOwotICAgICAgICAgICAgfQotICAgICAgICB9
KSwKLSAgICBdCi19KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447749</attachid>
            <date>2021-12-21 13:51:41 -0800</date>
            <delta_ts>2022-01-07 17:01:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234539-20211221215139.patch</filename>
            <type>text/plain</type>
            <size>9775</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyODczMjYpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDIxLTEyLTIxICBBbGV4ZXkgU2h2YXlrYSAgPGFzaHZheWthQGFw
cGxlLmNvbT4KKworICAgICAgICBFeHBhbmQgdGhlIHNldCBvZiBvYmplY3RzIHdlIHRha2UgSlNB
cnJheTo6ZmFzdFNsaWNlKCkgcGF0aCBmb3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIzNDUzOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL2FycmF5LXNsaWNlLWNhbGwtY2xv
bmVkLWFyZ3VtZW50cy5qczogQWRkZWQuCisgICAgICAgICogc3RyZXNzL2FycmF5LXNsaWNlLWxl
bmd0aC1sb29rdXAuanM6IEFkZGVkLgorCiAyMDIxLTEyLTE5ICBSb3NzIEtpcnNsaW5nICA8cm9z
cy5raXJzbGluZ0Bzb255LmNvbT4KIAogICAgICAgICBbSlNDXSBPcFBvdyBzaG91bGQgaGF2ZSBh
ICJzbWFsbCBpbnQgZXhwb25lbnQiIGZhc3QgcGF0aCBhdCBsb3dlciB0aWVycwpJbmRleDogSlNU
ZXN0cy9taWNyb2JlbmNobWFya3MvYXJyYXktc2xpY2UtY2FsbC1jbG9uZWQtYXJndW1lbnRzLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2FycmF5LXNsaWNlLWNhbGwt
Y2xvbmVkLWFyZ3VtZW50cy5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL21pY3JvYmVuY2ht
YXJrcy9hcnJheS1zbGljZS1jYWxsLWNsb25lZC1hcmd1bWVudHMuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxNCBAQAorKGZ1bmN0aW9uKCkgeworICAgICJ1c2Ugc3RyaWN0IjsKKyAgICB2
YXIgVEVTVF9MRU5HVEggPSAxMDsKKworICAgIHZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5z
bGljZTsKKyAgICB2YXIgY2xvbmVkQXJndW1lbnRzID0gKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJn
dW1lbnRzOyB9KS5hcHBseShudWxsLCBuZXcgQXJyYXkoVEVTVF9MRU5HVEgpLmZpbGwoMSkpOwor
CisgICAgdmFyIHNsaWNlZEFycmF5OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU2OyBpKysp
CisgICAgICAgIHNsaWNlZEFycmF5ID0gc2xpY2UuY2FsbChjbG9uZWRBcmd1bWVudHMpOworCisg
ICAgaWYgKHNsaWNlZEFycmF5Lmxlbmd0aCAhPT0gVEVTVF9MRU5HVEgpCisgICAgICAgIHRocm93
IG5ldyBFcnJvcigiQmFkIGFzc2VydGlvbiEiKTsKK30pKCk7CkluZGV4OiBKU1Rlc3RzL3N0cmVz
cy9hcnJheS1zbGljZS1sZW5ndGgtbG9va3VwLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3Ry
ZXNzL2FycmF5LXNsaWNlLWxlbmd0aC1sb29rdXAuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0
cy9zdHJlc3MvYXJyYXktc2xpY2UtbGVuZ3RoLWxvb2t1cC5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDIzIEBACitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVkKSB7CisgICAg
aWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihgQmFkIHZh
bHVlOiAke2FjdHVhbH0hYCk7Cit9CisKKyhmdW5jdGlvbiBzb3VyY2VJc0ZpbmFsT2JqZWN0KCkg
eworICAgIHZhciBsZW5ndGhMb29rdXBzID0gMDsKKyAgICB2YXIgc291cmNlT2JqID0geworICAg
ICAgICAwOiAwLCAxOiAxLCAyOiAyLAorICAgICAgICBnZXQgbGVuZ3RoKCkgeworICAgICAgICAg
ICAgbGVuZ3RoTG9va3VwcysrOworICAgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgIH0sCisg
ICAgfTsKKworICAgIHZhciBzbGljZWRBcnJheTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFl
NjsgaSsrKSB7CisgICAgICAgIHNsaWNlZEFycmF5ID0gW10uc2xpY2UuY2FsbChzb3VyY2VPYmop
OworICAgIH0KKworICAgIHNob3VsZEJlKHNsaWNlZEFycmF5Lmxlbmd0aCwgMyk7CisgICAgc2hv
dWxkQmUobGVuZ3RoTG9va3VwcywgMWU2KTsKK30pKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDI4NzMyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0MCBAQAorMjAyMS0xMi0yMSAgQWxleGV5IFNo
dmF5a2EgIDxhc2h2YXlrYUBhcHBsZS5jb20+CisKKyAgICAgICAgRXhwYW5kIHRoZSBzZXQgb2Yg
b2JqZWN0cyB3ZSB0YWtlIEpTQXJyYXk6OmZhc3RTbGljZSgpIHBhdGggZm9yCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ1MzkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHksIEFycmF5LnBy
b3RvdHlwZSdzIHNsaWNlKCkgLyBzcGxpY2UoKSBtZXRob2RzIHRha2UgYSBmYXN0IHBhdGggb25s
eSBmb3IKKyAgICAgICAgSlNBcnJheSBzb3VyY2Ugb2JqZWN0cy4gV2l0aCB0aGlzIGNoYW5nZSwg
Z2NTYWZlTWVtY3B5LWJhc2VkIHBhdGggaXMgdGFrZW4gZm9yIGFueQorICAgICAgICBvYmplY3Qg
d2l0aCBvcmRpbmFyeSBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KCkgbWV0aG9kLCB3aGljaCBz
cGVlZHMgdXAgdGhlIGNvbW1vbgorICAgICAgICBjYXNlIG9mIGBbXS5zbGljZS5jYWxsKGFyZ3Vt
ZW50cylgIGJ5IDE0MCUgKGluIHN0cmljdCBtb2RlIG9ubHksIHNlZSBDbG9uZWRBcmd1bWVudHMp
LgorCisgICAgICAgIEFsc28sIG9uY2UgaXMgaHR0cHM6Ly93ZWJraXQub3JnL2IvMjM0NTM4IHJl
c29sdmVkLCBjYWxsaW5nIEFycmF5LnByb3RvdHlwZS5zbGljZSgpCisgICAgICAgIG9uIGEgc3Rh
dGljIE5vZGVMaXN0LCB3aGljaCBpcyBhIGNvbW1vbiBpZGlvbSB0byBhY3F1aXJlIG1hcCgpIC8g
ZmlsdGVyKCkgbWV0aG9kcywKKyAgICAgICAgd2lsbCBiZWNvbWUgZmFzdGVyIGFzIHdlbGwuCisK
KyAgICAgICAgVGhpcyBwYXRjaCB3YXMgdGhvcm91Z2hseSBldmFsdWF0ZWQgdG8gYmUgc3BlYy1w
ZXJmZWN0IGFuZCBtZW1vcnktc2FmZToKKworICAgICAgICAgIC0gaW5kZXhpbmcgbW9kZSBjaGVj
ayBhbmQgaG9sZXNNdXN0Rm9yd2FyZFRvUHJvdG90eXBlKCkgZ3VhcmFudGVlIHRoYXQgdGhlcmUK
KyAgICAgICAgICAgIGFyZSBubyBvYnNlcnZhYmxlIHVzZXJsYW5kIGNvZGUgdG8gYmUgaW52b2tl
ZDsKKyAgICAgICAgICAtIGZhc3RTbGljZSgpIHNpZ25hdHVyZSBpcyB1cGdyYWRlZCB0byB1aW50
NjRfdCBzbyBgbnVsbHB0cmAgaXMgcmV0dXJuZWQgaW4gY2FzZQorICAgICAgICAgICAgb2YgbGFy
Z2UgImxlbmd0aCIsIHJlc3VsdGluZyBpbiBhIFJhbmdlRXJyb3IgYmVpbmcgdGhyb3duIG9uIHRo
ZSBzbG93IHBhdGg7CisgICAgICAgICAgLSB0byBoYW5kbGUgdGhlIGNhc2Ugb2Ygc291cmNlIGFy
cmF5IGJlaW5nIHNocmlua2VkIGFmdGVyICJsZW5ndGgiIGxvb2t1cCAoc2VlIHIxNzU0MjApLAor
ICAgICAgICAgICAgT09CIHJlYWQgY2hlY2sgaXMgbW92ZWQgdG8gSlNBcnJheTo6ZmFzdFNsaWNl
KCkgYW5kIHJlZmluZWQgdG8gcmVseSBvbiB2ZWN0b3JMZW5ndGgoKQorICAgICAgICAgICAgc28g
dGhlIGRvdWJsZSAibGVuZ3RoIiBsb29rdXAgaXMgYXZvaWRlZCAoYWRkZWQgYSB0ZXN0IGZvciB0
aGlzKS4KKworICAgICAgICBBbGwgdGhpcyAoYW5kIG1vcmUpIGlzIHdlbGwgY292ZXJlZCBieSB0
aGUgdGVzdDI2MiBzdWl0ZS4KKworICAgICAgICBUaGlzIGNoYW5nZSBpbXByb3ZlcyBTcGVlZG9t
ZXRlcjIvRW1iZXJKUy1EZWJ1Zy1Ub2RvTVZDIHNjb3JlIGJ5IDAuNSU6IGFsdGhvdWdoIHRoZSB0
ZXN0CisgICAgICAgIGlzIHNsb3cgb24gaXRzIG93biwgYFtdLnNsaWNlLmNhbGwoYXJndW1lbnRz
KWAgaXMgcGVyZm9ybWVkIH41NmsgdGltZXMgcGVyIHJ1bi4KKworICAgICAgICAqIHJ1bnRpbWUv
QXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJ
T04pOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OmZhc3RTbGljZSk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5Lmg6CisKIDIwMjEtMTIt
MjEgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFtSSVND
VjY0XSBBZGQgb3IgZW5hYmxlIG1pc3NpbmcgQ1BVKFJJU0NWNjQpIGNvZGVwYXRocyBpbiBiYXNl
bGluZSBKSVQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90
eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJh
eVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDI4NzMyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4MywxMCAr
MTA4Myw4IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihhcnJheVByb3RvRnVuY1MKICAgICBp
ZiAoVU5MSUtFTFkoc3BlY2llc1Jlc3VsdC5maXJzdCA9PSBTcGVjaWVzQ29uc3RydWN0UmVzdWx0
OjpFeGNlcHRpb24pKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYm9vbCBva1RvRG9GYXN0
UGF0aCA9IHNwZWNpZXNSZXN1bHQuZmlyc3QgPT0gU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RmFz
dFBhdGggJiYgaXNKU0FycmF5KHRoaXNPYmopICYmIGxlbmd0aCA9PSB0b0xlbmd0aChnbG9iYWxP
YmplY3QsIHRoaXNPYmopOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0g
ICAgaWYgKExJS0VMWShva1RvRG9GYXN0UGF0aCkpIHsKLSAgICAgICAgaWYgKEpTQXJyYXkqIHJl
c3VsdCA9IGFzQXJyYXkodGhpc09iaiktPmZhc3RTbGljZShnbG9iYWxPYmplY3QsIHN0YXRpY19j
YXN0PHVpbnQzMl90PihiZWdpbiksIHN0YXRpY19jYXN0PHVpbnQzMl90PihlbmQgLSBiZWdpbikp
KQorICAgIGlmIChMSUtFTFkoc3BlY2llc1Jlc3VsdC5maXJzdCA9PSBTcGVjaWVzQ29uc3RydWN0
UmVzdWx0OjpGYXN0UGF0aCkpIHsKKyAgICAgICAgaWYgKEpTQXJyYXkqIHJlc3VsdCA9IEpTQXJy
YXk6OmZhc3RTbGljZShnbG9iYWxPYmplY3QsIHRoaXNPYmosIGJlZ2luLCBlbmQgLSBiZWdpbikp
CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiAgICAgfQogCkBA
IC0xMTc5LDEwICsxMTc3LDggQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGFycmF5UHJvdG9G
dW5jUwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAg
ICAgSlNPYmplY3QqIHJlc3VsdCA9IG51bGxwdHI7Ci0gICAgYm9vbCBva1RvRG9GYXN0UGF0aCA9
IHNwZWNpZXNSZXN1bHQuZmlyc3QgPT0gU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RmFzdFBhdGgg
JiYgaXNKU0FycmF5KHRoaXNPYmopICYmIGxlbmd0aCA9PSB0b0xlbmd0aChnbG9iYWxPYmplY3Qs
IHRoaXNPYmopOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwotICAgIGlmIChMSUtFTFkob2tUb0RvRmFzdFBhdGgpKQotICAgICAgICByZXN1bHQgPSBh
c0FycmF5KHRoaXNPYmopLT5mYXN0U2xpY2UoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1aW50
MzJfdD4oYWN0dWFsU3RhcnQpLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYWN0dWFsRGVsZXRlQ291
bnQpKTsKKyAgICBpZiAoTElLRUxZKHNwZWNpZXNSZXN1bHQuZmlyc3QgPT0gU3BlY2llc0NvbnN0
cnVjdFJlc3VsdDo6RmFzdFBhdGgpKQorICAgICAgICByZXN1bHQgPSBKU0FycmF5OjpmYXN0U2xp
Y2UoZ2xvYmFsT2JqZWN0LCB0aGlzT2JqLCBhY3R1YWxTdGFydCwgYWN0dWFsRGVsZXRlQ291bnQp
OwogCiAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAgaWYgKHNwZWNpZXNSZXN1bHQuZmlyc3Qg
PT0gU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6Q3JlYXRlZE9iamVjdCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAyODczMjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzI1LDE4ICs3MjUsMjUgQEAgTkVWRVJfSU5MSU5FIHZvaWQgSlNBcnJheTo6cHVzaChKU0ds
b2JhbAogICAgIHB1c2hJbmxpbmUoZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiB9CiAKLUpTQXJyYXkq
IEpTQXJyYXk6OmZhc3RTbGljZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25l
ZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCkKK0pTQXJyYXkqIEpTQXJyYXk6OmZhc3RTbGlj
ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogc291cmNlLCB1aW50NjRf
dCBzdGFydEluZGV4LCB1aW50NjRfdCBjb3VudCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CiAKLSAgICBlbnN1cmVXcml0YWJsZSh2bSk7CisgICAgc291cmNlLT5lbnN1cmVX
cml0YWJsZSh2bSk7CiAKLSAgICBhdXRvIGFycmF5VHlwZSA9IGluZGV4aW5nTW9kZSgpOworICAg
IGF1dG8gYXJyYXlUeXBlID0gc291cmNlLT5pbmRleGluZ01vZGUoKSB8IElzQXJyYXk7CiAgICAg
c3dpdGNoIChhcnJheVR5cGUpIHsKICAgICBjYXNlIEFycmF5V2l0aERvdWJsZToKICAgICBjYXNl
IEFycmF5V2l0aEludDMyOgogICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czogewotICAgICAg
ICBpZiAoY291bnQgPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCB8fCBzdHJ1Y3R1cmUodm0pLT5o
b2xlc011c3RGb3J3YXJkVG9Qcm90b3R5cGUodm0sIHRoaXMpKQorICAgICAgICBTdHJ1Y3R1cmUq
IHNvdXJjZVN0cnVjdHVyZSA9IHNvdXJjZS0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAgaWYgKHNv
dXJjZVN0cnVjdHVyZS0+dHlwZUluZm8oKS5pbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgICAgICBpZiAoY291bnQgPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCB8fCBzb3Vy
Y2VTdHJ1Y3R1cmUtPmhvbGVzTXVzdEZvcndhcmRUb1Byb3RvdHlwZSh2bSwgc291cmNlKSkKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGlmIChzdGFydEluZGV4ICsgY291
bnQgPiBzb3VyY2UtPmJ1dHRlcmZseSgpLT52ZWN0b3JMZW5ndGgoKSkKICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCiAgICAgICAgIFN0cnVjdHVyZSogcmVzdWx0U3RydWN0dXJlID0gZ2xv
YmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24o
YXJyYXlUeXBlKTsKQEAgLTc0NSwxNSArNzUyLDE1IEBAIEpTQXJyYXkqIEpTQXJyYXk6OmZhc3RT
bGljZShKU0dsb2JhbE9iamUKIAogICAgICAgICBBU1NFUlQoIWdsb2JhbE9iamVjdC0+aXNIYXZp
bmdBQmFkVGltZSgpKTsKICAgICAgICAgT2JqZWN0SW5pdGlhbGl6YXRpb25TY29wZSBzY29wZSh2
bSk7Ci0gICAgICAgIEpTQXJyYXkqIHJlc3VsdEFycmF5ID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5p
bml0aWFsaXplZFJlc3RyaWN0ZWQoc2NvcGUsIHJlc3VsdFN0cnVjdHVyZSwgY291bnQpOworICAg
ICAgICBKU0FycmF5KiByZXN1bHRBcnJheSA9IEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6
ZWRSZXN0cmljdGVkKHNjb3BlLCByZXN1bHRTdHJ1Y3R1cmUsIHN0YXRpY19jYXN0PHVpbnQzMl90
Pihjb3VudCkpOwogICAgICAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdEFycmF5KSkKICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgIGF1dG8mIHJlc3VsdEJ1dHRlcmZseSA9ICpy
ZXN1bHRBcnJheS0+YnV0dGVyZmx5KCk7CiAgICAgICAgIGlmIChhcnJheVR5cGUgPT0gQXJyYXlX
aXRoRG91YmxlKQotICAgICAgICAgICAgZ2NTYWZlTWVtY3B5KHJlc3VsdEJ1dHRlcmZseS5jb250
aWd1b3VzRG91YmxlKCkuZGF0YSgpLCBidXR0ZXJmbHkoKS0+Y29udGlndW91c0RvdWJsZSgpLmRh
dGEoKSArIHN0YXJ0SW5kZXgsIHNpemVvZihKU1ZhbHVlKSAqIGNvdW50KTsKKyAgICAgICAgICAg
IGdjU2FmZU1lbWNweShyZXN1bHRCdXR0ZXJmbHkuY29udGlndW91c0RvdWJsZSgpLmRhdGEoKSwg
c291cmNlLT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSArIHN0YXJ0SW5k
ZXgsIHNpemVvZihKU1ZhbHVlKSAqIHN0YXRpY19jYXN0PHVpbnQzMl90Pihjb3VudCkpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBnY1NhZmVNZW1jcHkocmVzdWx0QnV0dGVyZmx5LmNvbnRp
Z3VvdXMoKS5kYXRhKCksIGJ1dHRlcmZseSgpLT5jb250aWd1b3VzKCkuZGF0YSgpICsgc3RhcnRJ
bmRleCwgc2l6ZW9mKEpTVmFsdWUpICogY291bnQpOworICAgICAgICAgICAgZ2NTYWZlTWVtY3B5
KHJlc3VsdEJ1dHRlcmZseS5jb250aWd1b3VzKCkuZGF0YSgpLCBzb3VyY2UtPmJ1dHRlcmZseSgp
LT5jb250aWd1b3VzKCkuZGF0YSgpICsgc3RhcnRJbmRleCwgc2l6ZW9mKEpTVmFsdWUpICogc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KGNvdW50KSk7CiAKICAgICAgICAgQVNTRVJUKHJlc3VsdEJ1dHRl
cmZseS5wdWJsaWNMZW5ndGgoKSA9PSBjb3VudCk7CiAgICAgICAgIHJldHVybiByZXN1bHRBcnJh
eTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9u
IDI4NzMyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29y
a2luZyBjb3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIHB1c2goSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKICAgICBKU19FWFBPUlRf
UFJJVkFURSBKU1ZhbHVlIHBvcChKU0dsb2JhbE9iamVjdCopOwogCi0gICAgSlNBcnJheSogZmFz
dFNsaWNlKEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291
bnQpOworICAgIHN0YXRpYyBKU0FycmF5KiBmYXN0U2xpY2UoSlNHbG9iYWxPYmplY3QqLCBKU09i
amVjdCogc291cmNlLCB1aW50NjRfdCBzdGFydEluZGV4LCB1aW50NjRfdCBjb3VudCk7CiAKICAg
ICBib29sIGNhbkZhc3RDb3B5KFZNJiwgSlNBcnJheSogb3RoZXJBcnJheSk7CiAgICAgYm9vbCBj
YW5Eb0Zhc3RJbmRleGVkQWNjZXNzKFZNJik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448648</attachid>
            <date>2022-01-07 17:01:19 -0800</date>
            <delta_ts>2022-01-07 17:53:29 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-234539-20220108010118.patch</filename>
            <type>text/plain</type>
            <size>11031</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyODc3NzYpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDIyLTAxLTA3ICBBbGV4ZXkgU2h2YXlrYSAgPGFzaHZheWthQGFw
cGxlLmNvbT4KKworICAgICAgICBFeHBhbmQgdGhlIHNldCBvZiBvYmplY3RzIHdlIHRha2UgSlNB
cnJheTo6ZmFzdFNsaWNlKCkgcGF0aCBmb3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIzNDUzOQorCisgICAgICAgIFJldmlld2VkIGJ5IFl1c3VrZSBT
dXp1a2kuCisKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvYXJyYXktc2xpY2UtY2FsbC1jbG9u
ZWQtYXJndW1lbnRzLmpzOiBBZGRlZC4KKyAgICAgICAgKiBzdHJlc3MvYXJyYXktc2xpY2UtYmV5
b25kLWxlbmd0aC5qczogQWRkZWQuCisgICAgICAgICogc3RyZXNzL2FycmF5LXNsaWNlLWxlbmd0
aC1sb29rdXAuanM6IEFkZGVkLgorCiAyMDIyLTAxLTA2ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlA
YXBwbGUuY29tPgogCiAgICAgICAgIHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyBuZWVk
cyB0byBoYW5kbGUgdHVwbGVzCkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9hcnJheS1z
bGljZS1jYWxsLWNsb25lZC1hcmd1bWVudHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9taWNy
b2JlbmNobWFya3MvYXJyYXktc2xpY2UtY2FsbC1jbG9uZWQtYXJndW1lbnRzLmpzCShub25leGlz
dGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2FycmF5LXNsaWNlLWNhbGwtY2xvbmVk
LWFyZ3VtZW50cy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0IEBACisoZnVuY3Rpb24o
KSB7CisgICAgInVzZSBzdHJpY3QiOworICAgIHZhciBURVNUX0xFTkdUSCA9IDEwOworCisgICAg
dmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlOworICAgIHZhciBjbG9uZWRBcmd1bWVu
dHMgPSAoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0pLmFwcGx5KG51bGwsIG5ldyBB
cnJheShURVNUX0xFTkdUSCkuZmlsbCgxKSk7CisKKyAgICB2YXIgc2xpY2VkQXJyYXk7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCAxZTY7IGkrKykKKyAgICAgICAgc2xpY2VkQXJyYXkgPSBzbGlj
ZS5jYWxsKGNsb25lZEFyZ3VtZW50cyk7CisKKyAgICBpZiAoc2xpY2VkQXJyYXkubGVuZ3RoICE9
PSBURVNUX0xFTkdUSCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgYXNzZXJ0aW9uISIp
OworfSkoKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2FycmF5LXNsaWNlLWJleW9uZC1sZW5ndGgu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvYXJyYXktc2xpY2UtYmV5b25kLWxlbmd0
aC5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9hcnJheS1zbGljZS1iZXlvbmQt
bGVuZ3RoLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzAgQEAKK2Z1bmN0aW9uIHNob3Vs
ZEJlKGFjdHVhbCwgZXhwZWN0ZWQpIHsKKyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKGBCYWQgdmFsdWU6ICR7YWN0dWFsfSFgKTsKK30KKworKGZ1
bmN0aW9uIHNvdXJjZUlzSlNBcnJheSgpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwXzAw
MDsgaSsrKSB7CisgICAgICAgIHZhciBzb3VyY2VPYmogPSBbMCwgMSwgMl07CisgICAgICAgIHZh
ciBzbGljZWRBcnIgPSBzb3VyY2VPYmouc2xpY2UoMCwgMTAwMCk7CisKKyAgICAgICAgc2hvdWxk
QmUoc2xpY2VkQXJyLmxlbmd0aCwgMyk7CisgICAgICAgIHNob3VsZEJlKHNsaWNlZEFyci5qb2lu
KCksICIwLDEsMiIpOworICAgIH0KK30pKCk7CisKK2NvbnN0IE1BWF9BUlJBWV9MRU5HVEggPSAy
ICoqIDMyIC0gMTsKKworKGZ1bmN0aW9uIHNvdXJjZUlzRmluYWxPYmplY3QoKSB7CisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCAxMF8wMDA7IGkrKykgeworICAgICAgICB2YXIgc291cmNlT2JqID0g
e307CisgICAgICAgIHNvdXJjZU9ialswXSA9ICJ4IjsKKyAgICAgICAgc291cmNlT2JqW01BWF9B
UlJBWV9MRU5HVEhdID0gInkiOworICAgICAgICBzb3VyY2VPYmoubGVuZ3RoID0gTUFYX0FSUkFZ
X0xFTkdUSCArIDE7CisgICAgICAgIHNvdXJjZU9iai5zbGljZSA9IEFycmF5LnByb3RvdHlwZS5z
bGljZTsKKyAgICAgICAgdmFyIHNsaWNlZEFyciA9IHNvdXJjZU9iai5zbGljZShNQVhfQVJSQVlf
TEVOR1RILCBNQVhfQVJSQVlfTEVOR1RIICsgMik7CisKKyAgICAgICAgc2hvdWxkQmUoc2xpY2Vk
QXJyLmxlbmd0aCwgMSk7CisgICAgICAgIHNob3VsZEJlKHNsaWNlZEFyclswXSwgInkiKTsKKyAg
ICB9Cit9KSgpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvYXJyYXktc2xpY2UtbGVuZ3RoLWxvb2t1
cC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9hcnJheS1zbGljZS1sZW5ndGgtbG9v
a3VwLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL2FycmF5LXNsaWNlLWxlbmd0
aC1sb29rdXAuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMyBAQAorZnVuY3Rpb24gc2hv
dWxkQmUoYWN0dWFsLCBleHBlY3RlZCkgeworICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQor
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCB2YWx1ZTogJHthY3R1YWx9IWApOworfQorCiso
ZnVuY3Rpb24gc291cmNlSXNGaW5hbE9iamVjdCgpIHsKKyAgICB2YXIgbGVuZ3RoTG9va3VwcyA9
IDA7CisgICAgdmFyIHNvdXJjZU9iaiA9IHsKKyAgICAgICAgMDogMCwgMTogMSwgMjogMiwKKyAg
ICAgICAgZ2V0IGxlbmd0aCgpIHsKKyAgICAgICAgICAgIGxlbmd0aExvb2t1cHMrKzsKKyAgICAg
ICAgICAgIHJldHVybiAzOworICAgICAgICB9LAorICAgIH07CisKKyAgICB2YXIgc2xpY2VkQXJy
OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU2OyBpKyspIHsKKyAgICAgICAgc2xpY2VkQXJy
ID0gW10uc2xpY2UuY2FsbChzb3VyY2VPYmopOworICAgIH0KKworICAgIHNob3VsZEJlKHNsaWNl
ZEFyci5sZW5ndGgsIDMpOworICAgIHNob3VsZEJlKGxlbmd0aExvb2t1cHMsIDFlNik7Cit9KSgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyODc3NzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDAg
QEAKKzIwMjItMDEtMDcgIEFsZXhleSBTaHZheWthICA8YXNodmF5a2FAYXBwbGUuY29tPgorCisg
ICAgICAgIEV4cGFuZCB0aGUgc2V0IG9mIG9iamVjdHMgd2UgdGFrZSBKU0FycmF5OjpmYXN0U2xp
Y2UoKSBwYXRoIGZvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM0NTM5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1enVraS4KKworICAg
ICAgICBDdXJyZW50bHksIEFycmF5LnByb3RvdHlwZSdzIHNsaWNlKCkgLyBzcGxpY2UoKSBtZXRo
b2RzIHRha2UgYSBmYXN0IHBhdGggb25seSBmb3IKKyAgICAgICAgSlNBcnJheSBzb3VyY2Ugb2Jq
ZWN0cy4gV2l0aCB0aGlzIGNoYW5nZSwgZ2NTYWZlTWVtY3B5LWJhc2VkIHBhdGggaXMgdGFrZW4g
Zm9yIGFueQorICAgICAgICBvYmplY3Qgd2l0aCBvcmRpbmFyeSBnZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4KCkgbWV0aG9kLCB3aGljaCBzcGVlZHMgdXAgdGhlIGNvbW1vbgorICAgICAgICBjYXNl
IG9mIGBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cylgIGJ5IDE0MCUgKGluIHN0cmljdCBtb2RlIG9u
bHksIHNlZSBDbG9uZWRBcmd1bWVudHMpLgorCisgICAgICAgIEFsc28sIG9uY2UgaXMgaHR0cHM6
Ly93ZWJraXQub3JnL2IvMjM0NTM4IHJlc29sdmVkLCBjYWxsaW5nIEFycmF5LnByb3RvdHlwZS5z
bGljZSgpCisgICAgICAgIG9uIGEgc3RhdGljIE5vZGVMaXN0LCB3aGljaCBpcyBhIGNvbW1vbiBp
ZGlvbSB0byBhY3F1aXJlIG1hcCgpIC8gZmlsdGVyKCkgbWV0aG9kcywKKyAgICAgICAgd2lsbCBi
ZWNvbWUgZmFzdGVyIGFzIHdlbGwuCisKKyAgICAgICAgVGhpcyBwYXRjaCB3YXMgdGhvcm91Z2hs
eSBldmFsdWF0ZWQgdG8gYmUgc3BlYy1wZXJmZWN0IGFuZCBtZW1vcnktc2FmZToKKworICAgICAg
ICAgIC0gaW5kZXhpbmcgbW9kZSBjaGVjayBhbmQgaG9sZXNNdXN0Rm9yd2FyZFRvUHJvdG90eXBl
KCkgZ3VhcmFudGVlIHRoYXQgdGhlcmUKKyAgICAgICAgICAgIGFyZSBubyBvYnNlcnZhYmxlIHVz
ZXJsYW5kIGNvZGUgdG8gYmUgaW52b2tlZDsKKyAgICAgICAgICAtIGZhc3RTbGljZSgpIHNpZ25h
dHVyZSBpcyB1cGdyYWRlZCB0byB1aW50NjRfdCBzbyBgbnVsbHB0cmAgaXMgcmV0dXJuZWQgaW4g
Y2FzZQorICAgICAgICAgICAgb2YgbGFyZ2UgImxlbmd0aCIsIHJlc3VsdGluZyBpbiBhIFJhbmdl
RXJyb3IgYmVpbmcgdGhyb3duIG9uIHRoZSBzbG93IHBhdGg7CisgICAgICAgICAgLSB0byBoYW5k
bGUgdGhlIGNhc2Ugb2Ygc291cmNlIGFycmF5IGJlaW5nIHNocmlua2VkIGFmdGVyICJsZW5ndGgi
IGxvb2t1cCAoc2VlIHIxNzU0MjApLAorICAgICAgICAgICAgT09CIHJlYWQgY2hlY2sgaXMgbW92
ZWQgdG8gSlNBcnJheTo6ZmFzdFNsaWNlKCkgYW5kIHJlZmluZWQgdG8gcmVseSBvbiB2ZWN0b3JM
ZW5ndGgoKQorICAgICAgICAgICAgc28gdGhlIGRvdWJsZSAibGVuZ3RoIiBsb29rdXAgaXMgYXZv
aWRlZCAoYWRkZWQgYSB0ZXN0IGZvciB0aGlzKS4KKworICAgICAgICBBbGwgdGhpcyAoYW5kIG1v
cmUpIGlzIHdlbGwgY292ZXJlZCBieSB0aGUgdGVzdDI2MiBzdWl0ZS4KKworICAgICAgICBUaGlz
IGNoYW5nZSBpbXByb3ZlcyBTcGVlZG9tZXRlcjIvRW1iZXJKUy1EZWJ1Zy1Ub2RvTVZDIHNjb3Jl
IGJ5IDAuNSU6IGFsdGhvdWdoIHRoZSB0ZXN0CisgICAgICAgIGlzIHNsb3cgb24gaXRzIG93biwg
YFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKWAgaXMgcGVyZm9ybWVkIH41NmsgdGltZXMgcGVyIHJ1
bi4KKworICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlND
OjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5j
cHA6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmZhc3RTbGljZSk6CisgICAgICAgICogcnVudGlt
ZS9KU0FycmF5Lmg6CisKIDIwMjItMDEtMDcgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5z
ZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI4NzY5OC4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlw
ZS5jcHAJKHJldmlzaW9uIDI4Nzc3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzOSwxMCArMTEzOSw4IEBA
IEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihhcnJheVByb3RvRnVuY1MKICAgICBpZiAoVU5MSUtF
TFkoc3BlY2llc1Jlc3VsdC5maXJzdCA9PSBTcGVjaWVzQ29uc3RydWN0UmVzdWx0OjpFeGNlcHRp
b24pKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYm9vbCBva1RvRG9GYXN0UGF0aCA9IHNw
ZWNpZXNSZXN1bHQuZmlyc3QgPT0gU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RmFzdFBhdGggJiYg
aXNKU0FycmF5KHRoaXNPYmopICYmIGxlbmd0aCA9PSB0b0xlbmd0aChnbG9iYWxPYmplY3QsIHRo
aXNPYmopOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgaWYgKExJ
S0VMWShva1RvRG9GYXN0UGF0aCkpIHsKLSAgICAgICAgaWYgKEpTQXJyYXkqIHJlc3VsdCA9IGFz
QXJyYXkodGhpc09iaiktPmZhc3RTbGljZShnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PHVpbnQz
Ml90PihiZWdpbiksIHN0YXRpY19jYXN0PHVpbnQzMl90PihlbmQgLSBiZWdpbikpKQorICAgIGlm
IChMSUtFTFkoc3BlY2llc1Jlc3VsdC5maXJzdCA9PSBTcGVjaWVzQ29uc3RydWN0UmVzdWx0OjpG
YXN0UGF0aCkpIHsKKyAgICAgICAgaWYgKEpTQXJyYXkqIHJlc3VsdCA9IEpTQXJyYXk6OmZhc3RT
bGljZShnbG9iYWxPYmplY3QsIHRoaXNPYmosIGJlZ2luLCBlbmQgLSBiZWdpbikpCiAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiAgICAgfQogCkBAIC0xMjM1LDEw
ICsxMjMzLDggQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGFycmF5UHJvdG9GdW5jUwogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNPYmpl
Y3QqIHJlc3VsdCA9IG51bGxwdHI7Ci0gICAgYm9vbCBva1RvRG9GYXN0UGF0aCA9IHNwZWNpZXNS
ZXN1bHQuZmlyc3QgPT0gU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RmFzdFBhdGggJiYgaXNKU0Fy
cmF5KHRoaXNPYmopICYmIGxlbmd0aCA9PSB0b0xlbmd0aChnbG9iYWxPYmplY3QsIHRoaXNPYmop
OwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAg
IGlmIChMSUtFTFkob2tUb0RvRmFzdFBhdGgpKQotICAgICAgICByZXN1bHQgPSBhc0FycmF5KHRo
aXNPYmopLT5mYXN0U2xpY2UoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYWN0
dWFsU3RhcnQpLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYWN0dWFsRGVsZXRlQ291bnQpKTsKKyAg
ICBpZiAoTElLRUxZKHNwZWNpZXNSZXN1bHQuZmlyc3QgPT0gU3BlY2llc0NvbnN0cnVjdFJlc3Vs
dDo6RmFzdFBhdGgpKQorICAgICAgICByZXN1bHQgPSBKU0FycmF5OjpmYXN0U2xpY2UoZ2xvYmFs
T2JqZWN0LCB0aGlzT2JqLCBhY3R1YWxTdGFydCwgYWN0dWFsRGVsZXRlQ291bnQpOwogCiAgICAg
aWYgKCFyZXN1bHQpIHsKICAgICAgICAgaWYgKHNwZWNpZXNSZXN1bHQuZmlyc3QgPT0gU3BlY2ll
c0NvbnN0cnVjdFJlc3VsdDo6Q3JlYXRlZE9iamVjdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAyODc3NzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzI1LDE4
ICs3MjUsMjcgQEAgTkVWRVJfSU5MSU5FIHZvaWQgSlNBcnJheTo6cHVzaChKU0dsb2JhbAogICAg
IHB1c2hJbmxpbmUoZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiB9CiAKLUpTQXJyYXkqIEpTQXJyYXk6
OmZhc3RTbGljZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBzdGFydElu
ZGV4LCB1bnNpZ25lZCBjb3VudCkKK0pTQXJyYXkqIEpTQXJyYXk6OmZhc3RTbGljZShKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogc291cmNlLCB1aW50NjRfdCBzdGFydElu
ZGV4LCB1aW50NjRfdCBjb3VudCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAKLSAgICBlbnN1cmVXcml0YWJsZSh2bSk7CisgICAgLy8gRklYTUU6IEF2b2lkIGNvbnZlcnRp
bmcgdGhlIHNvdXJjZSBmcm9tIENvVyBzaW5jZSB3ZSBhcmVuJ3QgbW9kaWZ5aW5nIGl0LgorICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ5OTAKKyAgICBz
b3VyY2UtPmVuc3VyZVdyaXRhYmxlKHZtKTsKKworICAgIFN0cnVjdHVyZSogc291cmNlU3RydWN0
dXJlID0gc291cmNlLT5zdHJ1Y3R1cmUodm0pOworICAgIGlmIChzb3VyY2VTdHJ1Y3R1cmUtPnR5
cGVJbmZvKCkuaW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0
aElzTm90WmVybygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gYXJyYXlU
eXBlID0gaW5kZXhpbmdNb2RlKCk7CisgICAgYXV0byBhcnJheVR5cGUgPSBzb3VyY2UtPmluZGV4
aW5nTW9kZSgpIHwgSXNBcnJheTsKICAgICBzd2l0Y2ggKGFycmF5VHlwZSkgewogICAgIGNhc2Ug
QXJyYXlXaXRoRG91YmxlOgogICAgIGNhc2UgQXJyYXlXaXRoSW50MzI6CiAgICAgY2FzZSBBcnJh
eVdpdGhDb250aWd1b3VzOiB7Ci0gICAgICAgIGlmIChjb3VudCA+PSBNSU5fU1BBUlNFX0FSUkFZ
X0lOREVYIHx8IHN0cnVjdHVyZSh2bSktPmhvbGVzTXVzdEZvcndhcmRUb1Byb3RvdHlwZSh2bSwg
dGhpcykpCisgICAgICAgIGlmIChjb3VudCA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIHx8IHNv
dXJjZVN0cnVjdHVyZS0+aG9sZXNNdXN0Rm9yd2FyZFRvUHJvdG90eXBlKHZtLCBzb3VyY2UpKQor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgaWYgKHN0YXJ0SW5kZXggKyBj
b3VudCA+IHNvdXJjZS0+YnV0dGVyZmx5KCktPnZlY3Rvckxlbmd0aCgpKQogICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgU3RydWN0dXJlKiByZXN1bHRTdHJ1Y3R1cmUgPSBn
bG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlv
bihhcnJheVR5cGUpOwpAQCAtNzQ1LDE1ICs3NTQsMTUgQEAgSlNBcnJheSogSlNBcnJheTo6ZmFz
dFNsaWNlKEpTR2xvYmFsT2JqZQogCiAgICAgICAgIEFTU0VSVCghZ2xvYmFsT2JqZWN0LT5pc0hh
dmluZ0FCYWRUaW1lKCkpOwogICAgICAgICBPYmplY3RJbml0aWFsaXphdGlvblNjb3BlIHNjb3Bl
KHZtKTsKLSAgICAgICAgSlNBcnJheSogcmVzdWx0QXJyYXkgPSBKU0FycmF5Ojp0cnlDcmVhdGVV
bmluaXRpYWxpemVkUmVzdHJpY3RlZChzY29wZSwgcmVzdWx0U3RydWN0dXJlLCBjb3VudCk7Cisg
ICAgICAgIEpTQXJyYXkqIHJlc3VsdEFycmF5ID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFs
aXplZFJlc3RyaWN0ZWQoc2NvcGUsIHJlc3VsdFN0cnVjdHVyZSwgc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KGNvdW50KSk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghcmVzdWx0QXJyYXkpKQogICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgYXV0byYgcmVzdWx0QnV0dGVyZmx5ID0g
KnJlc3VsdEFycmF5LT5idXR0ZXJmbHkoKTsKICAgICAgICAgaWYgKGFycmF5VHlwZSA9PSBBcnJh
eVdpdGhEb3VibGUpCi0gICAgICAgICAgICBnY1NhZmVNZW1jcHkocmVzdWx0QnV0dGVyZmx5LmNv
bnRpZ3VvdXNEb3VibGUoKS5kYXRhKCksIGJ1dHRlcmZseSgpLT5jb250aWd1b3VzRG91YmxlKCku
ZGF0YSgpICsgc3RhcnRJbmRleCwgc2l6ZW9mKEpTVmFsdWUpICogY291bnQpOworICAgICAgICAg
ICAgZ2NTYWZlTWVtY3B5KHJlc3VsdEJ1dHRlcmZseS5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgp
LCBzb3VyY2UtPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpICsgc3RhcnRJ
bmRleCwgc2l6ZW9mKEpTVmFsdWUpICogc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGNvdW50KSk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGdjU2FmZU1lbWNweShyZXN1bHRCdXR0ZXJmbHkuY29u
dGlndW91cygpLmRhdGEoKSwgYnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKS5kYXRhKCkgKyBzdGFy
dEluZGV4LCBzaXplb2YoSlNWYWx1ZSkgKiBjb3VudCk7CisgICAgICAgICAgICBnY1NhZmVNZW1j
cHkocmVzdWx0QnV0dGVyZmx5LmNvbnRpZ3VvdXMoKS5kYXRhKCksIHNvdXJjZS0+YnV0dGVyZmx5
KCktPmNvbnRpZ3VvdXMoKS5kYXRhKCkgKyBzdGFydEluZGV4LCBzaXplb2YoSlNWYWx1ZSkgKiBz
dGF0aWNfY2FzdDx1aW50MzJfdD4oY291bnQpKTsKIAogICAgICAgICBBU1NFUlQocmVzdWx0QnV0
dGVyZmx5LnB1YmxpY0xlbmd0aCgpID09IGNvdW50KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdEFy
cmF5OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNp
b24gMjg3Nzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgcHVzaChKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogICAgIEpTX0VYUE9S
VF9QUklWQVRFIEpTVmFsdWUgcG9wKEpTR2xvYmFsT2JqZWN0Kik7CiAKLSAgICBKU0FycmF5KiBm
YXN0U2xpY2UoSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBj
b3VudCk7CisgICAgc3RhdGljIEpTQXJyYXkqIGZhc3RTbGljZShKU0dsb2JhbE9iamVjdCosIEpT
T2JqZWN0KiBzb3VyY2UsIHVpbnQ2NF90IHN0YXJ0SW5kZXgsIHVpbnQ2NF90IGNvdW50KTsKIAog
ICAgIGJvb2wgY2FuRmFzdENvcHkoVk0mLCBKU0FycmF5KiBvdGhlckFycmF5KTsKICAgICBib29s
IGNhbkRvRmFzdEluZGV4ZWRBY2Nlc3MoVk0mKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>