<?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>181191</bug_id>
          
          <creation_ts>2017-12-29 18:16:49 -0800</creation_ts>
          <short_desc>Highpass Biquads use old formulas</short_desc>
          <delta_ts>2020-08-14 17:49:28 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Audio</component>
          <version>Safari Technology Preview</version>
          <rep_platform>All</rep_platform>
          <op_sys>macOS 10.13</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=215381</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="Ricci Adams">webkit.org</reporter>
          <assigned_to name="Lauro Moura">lmoura</assigned_to>
          <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>julien.isorce</cc>
    
    <cc>lmoura</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1384972</commentid>
    <comment_count>0</comment_count>
    <who name="Ricci Adams">webkit.org</who>
    <bug_when>2017-12-29 18:16:49 -0800</bug_when>
    <thetext>The WebAudio spec for biquad filters was updated in April 2016 to use the Audio Cookbook formulas.

Safari and WebKit are still using the old formulas.

See these URLs for more info:
https://github.com/WebAudio/web-audio-api/issues/771
https://www.chromestatus.com/feature/5687523284090880
https://github.com/GoogleChromeLabs/web-audio-samples/wiki/Detection-of-lowpass-BiquadFilter-implementation
https://rtoy.github.io/webaudio-hacks/more/biquad/biquad-lowpass-q.html?usedB=true</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1384989</commentid>
    <comment_count>1</comment_count>
    <who name="Ricci Adams">webkit.org</who>
    <bug_when>2017-12-30 17:24:04 -0800</bug_when>
    <thetext>Note: The relevant commit to Blink is https://codereview.chromium.org/1885723003</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679800</commentid>
    <comment_count>2</comment_count>
      <attachid>406470</attachid>
    <who name="Lauro Moura">lmoura</who>
    <bug_when>2020-08-12 13:26:46 -0700</bug_when>
    <thetext>Created attachment 406470
Patch

Patch based on lowpass changes from r265517. Also updated the biquad tests to use the same tolerance as the WPT ones.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679801</commentid>
    <comment_count>3</comment_count>
    <who name="Lauro Moura">lmoura</who>
    <bug_when>2020-08-12 13:29:41 -0700</bug_when>
    <thetext>(In reply to Lauro Moura from comment #2)
&gt; Created attachment 406470 [details]
&gt; Patch
&gt; 
&gt; Patch based on lowpass changes from r265517. Also updated the biquad tests
&gt; to use the same tolerance as the WPT ones.

This patch updates the glib baseline to be all passes, but probably we&apos;ll be able to update the main one instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679803</commentid>
    <comment_count>4</comment_count>
      <attachid>406470</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-08-12 13:33:52 -0700</bug_when>
    <thetext>Comment on attachment 406470
Patch

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

&gt; Source/WebCore/ChangeLog:3
&gt; +        Lowpass and Highpass Biquads use old formulas

Please fix title now that this patch is only about the HighPass filter.

&gt; Source/WebCore/platform/audio/Biquad.cpp:244
&gt; +        double alpha = sin(theta) / (2 * resonance);

Please use float for all these variables like in r265517.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679805</commentid>
    <comment_count>5</comment_count>
      <attachid>406470</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-12 13:34:40 -0700</bug_when>
    <thetext>Comment on attachment 406470
Patch

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

&gt; LayoutTests/webaudio/biquad-allpass.html:33
&gt; +        threshold: 3.9337e-8,

Why are these threshold values so precise; this doesn’t seem to enhance the tests? How about changing maxAllowedError to 1e-7 in biquad-testing.js for all the tests instead of adding all of these special values?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679820</commentid>
    <comment_count>6</comment_count>
    <who name="Lauro Moura">lmoura</who>
    <bug_when>2020-08-12 14:18:32 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #4)
&gt; Comment on attachment 406470 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=406470&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:3
&gt; &gt; +        Lowpass and Highpass Biquads use old formulas
&gt; 
&gt; Please fix title now that this patch is only about the HighPass filter.

Right.

&gt; 
&gt; &gt; Source/WebCore/platform/audio/Biquad.cpp:244
&gt; &gt; +        double alpha = sin(theta) / (2 * resonance);
&gt; 
&gt; Please use float for all these variables like in r265517.

But isn&apos;t the lowpass one also using doubles? Should I change it too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679822</commentid>
    <comment_count>7</comment_count>
    <who name="Lauro Moura">lmoura</who>
    <bug_when>2020-08-12 14:24:47 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #5)
&gt; Comment on attachment 406470 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=406470&amp;action=review
&gt; 
&gt; &gt; LayoutTests/webaudio/biquad-allpass.html:33
&gt; &gt; +        threshold: 3.9337e-8,
&gt; 
&gt; Why are these threshold values so precise; this doesn’t seem to enhance the
&gt; tests? How about changing maxAllowedError to 1e-7 in biquad-testing.js for
&gt; all the tests instead of adding all of these special values?

They were introduced in this chromium change as initial thresholds after updating the formula to both filters to address some corner cases, although not much detail why so precise for the filters other than highpass and lowpass. Keeping them at least has the benefit of reducing the differences to the WPT tests.

https://codereview.chromium.org/1885723003</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679826</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-12 14:28:21 -0700</bug_when>
    <thetext>Seems like a poor quality decision in the Chromium project. I would not replicate it here just because they did it.

You mention WPT tests: What is the relationship between WPT tests and these non-WPT tests?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679827</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-08-12 14:30:42 -0700</bug_when>
    <thetext>(In reply to Lauro Moura from comment #6)
&gt; (In reply to Chris Dumez from comment #4)
&gt; &gt; Comment on attachment 406470 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=406470&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/ChangeLog:3
&gt; &gt; &gt; +        Lowpass and Highpass Biquads use old formulas
&gt; &gt; 
&gt; &gt; Please fix title now that this patch is only about the HighPass filter.
&gt; 
&gt; Right.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/audio/Biquad.cpp:244
&gt; &gt; &gt; +        double alpha = sin(theta) / (2 * resonance);
&gt; &gt; 
&gt; &gt; Please use float for all these variables like in r265517.
&gt; 
&gt; But isn&apos;t the lowpass one also using doubles? Should I change it too?

Oh, never mind this comment. I made 2 changes on the same day and am confusing the two. We are indeed using double in the lowpass filter here so let&apos;s be consistent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679856</commentid>
    <comment_count>10</comment_count>
    <who name="Lauro Moura">lmoura</who>
    <bug_when>2020-08-12 15:43:28 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #8)
&gt; Seems like a poor quality decision in the Chromium project. I would not
&gt; replicate it here just because they did it.
&gt; 
&gt; You mention WPT tests: What is the relationship between WPT tests and these
&gt; non-WPT tests?

These biquads tests are basically the same in our webaudio and WPT, changing only the harness around the tests (including this custom threshold).

Originally ours used 5.9e-8, &quot;experimentally determined&quot; (r106621/bug71413). And indeed in this original bug, Chris Rogers already raised concerns about maintenance issues with different thresholds.

I&apos;m not really up to webaudio details, but while 1.e-7 would work for most (realistic?) cases, it could hide differences between these two highpass versions (they differed by ~2e-8).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679864</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-12 16:07:24 -0700</bug_when>
    <thetext>(In reply to Lauro Moura from comment #10)
&gt; These biquads tests are basically the same in our webaudio and WPT, changing
&gt; only the harness around the tests (including this custom threshold).

If so, then why do we need the webaudio tests? Let&apos;s just rely on the WPT ones.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679908</commentid>
    <comment_count>12</comment_count>
      <attachid>406492</attachid>
    <who name="Lauro Moura">lmoura</who>
    <bug_when>2020-08-12 20:34:03 -0700</bug_when>
    <thetext>Created attachment 406492
Updated patch removing old tests

Patch updated by removing old webaudio/biquad tests and rebaselining imported WPT ones.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679918</commentid>
    <comment_count>13</comment_count>
      <attachid>406492</attachid>
    <who name="Lauro Moura">lmoura</who>
    <bug_when>2020-08-12 21:36:16 -0700</bug_when>
    <thetext>Comment on attachment 406492
Updated patch removing old tests

The pending bubbles failures are not related to biquad, so cq+&apos;ing.

Thanks for the review, Darin and Chris.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679919</commentid>
    <comment_count>14</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-08-12 21:39:06 -0700</bug_when>
    <thetext>Committed r265599: &lt;https://trac.webkit.org/changeset/265599&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 406492.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679920</commentid>
    <comment_count>15</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-08-12 21:40:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/66959686&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680543</commentid>
    <comment_count>16</comment_count>
      <attachid>406492</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-14 17:49:28 -0700</bug_when>
    <thetext>Comment on attachment 406492
Updated patch removing old tests

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

&gt; Source/WebCore/platform/audio/Biquad.cpp:249
&gt; +        double b1 = -(2 * beta);

Why is this written like this ...

&gt; Source/WebCore/platform/audio/Biquad.cpp:253
&gt; +        double a1 = -2 * cosw;

... but this is written like this?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406470</attachid>
            <date>2020-08-12 13:26:46 -0700</date>
            <delta_ts>2020-08-12 20:33:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-181191-20200812172644.patch</filename>
            <type>text/plain</type>
            <size>14222</size>
            <attacher name="Lauro Moura">lmoura</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1NTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjJjOWYyNDA1MmU4Mjdi
OTA1ZjMyNmUzNGJiZjE2MzU4YzNlNGVhNy4uOWM5OTY2ZGMyMWZjZTBiNjRhMGIyMGI0Y2EzZjQ2
MGYwNTg0Yjk4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDIwLTA4LTEyICBMYXVy
byBNb3VyYSAgPGxtb3VyYUBpZ2FsaWEuY29tPgorCisgICAgICAgIExvd3Bhc3MgYW5kIEhpZ2hw
YXNzIEJpcXVhZHMgdXNlIG9sZCBmb3JtdWxhcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgxMTkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgTGlrZSByMjY1NTE3LCBidXQgZm9yIHRoZSBoaWdocGFzcyBm
aWx0ZXIuCisKKyAgICAgICAgU3BlYzogaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmF1ZGlvLyNk
b20tYmlxdWFkZmlsdGVydHlwZS1oaWdocGFzcworCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3Rp
bmcgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9CaXF1YWQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QmlxdWFkOjpzZXRIaWdocGFzc1BhcmFtcyk6CisKIDIwMjAtMDgtMTIgIFdl
bnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgQnJva2VuIGZv
cm1hdHRpbmcgaW4gcHJpY2UgdGFibGUgb24geWFuZGV4LnJ1IGFmdGVyIHRyYW5zbGF0aW5nIHRv
IEVuZ2xpc2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0JpcXVh
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1YWQuY3BwCmluZGV4IGRi
ZTk1NzY1ZmE0N2RlNmUwMDNmZDFmMGQwMmRjZDFmMjJlZGRjZDAuLjE2ODZiNTZhNzY0NzVhN2Q2
MzA1YmI5MDgwMWZlZGVhOTQyYTk1NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL0JpcXVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
QmlxdWFkLmNwcApAQCAtMjM4LDIyICsyMzgsMjIgQEAgdm9pZCBCaXF1YWQ6OnNldEhpZ2hwYXNz
UGFyYW1zKGRvdWJsZSBjdXRvZmYsIGRvdWJsZSByZXNvbmFuY2UpCiAgICAgfSBlbHNlIGlmIChj
dXRvZmYgPiAwKSB7CiAgICAgICAgIC8vIENvbXB1dGUgYmlxdWFkIGNvZWZmaWNpZW50cyBmb3Ig
aGlnaHBhc3MgZmlsdGVyCiAgICAgICAgIHJlc29uYW5jZSA9IHN0ZDo6bWF4KDAuMCwgcmVzb25h
bmNlKTsgLy8gY2FuJ3QgZ28gbmVnYXRpdmUKLSAgICAgICAgZG91YmxlIGcgPSBwb3coMTAuMCwg
MC4wNSAqIHJlc29uYW5jZSk7Ci0gICAgICAgIGRvdWJsZSBkID0gc3FydCgoNCAtIHNxcnQoMTYg
LSAxNiAvIChnICogZykpKSAvIDIpOworICAgICAgICByZXNvbmFuY2UgPSBwb3coMTAuMCwgMC4w
NSAqIHJlc29uYW5jZSk7CiAKICAgICAgICAgZG91YmxlIHRoZXRhID0gcGlEb3VibGUgKiBjdXRv
ZmY7Ci0gICAgICAgIGRvdWJsZSBzbiA9IDAuNSAqIGQgKiBzaW4odGhldGEpOwotICAgICAgICBk
b3VibGUgYmV0YSA9IDAuNSAqICgxIC0gc24pIC8gKDEgKyBzbik7Ci0gICAgICAgIGRvdWJsZSBn
YW1tYSA9ICgwLjUgKyBiZXRhKSAqIGNvcyh0aGV0YSk7Ci0gICAgICAgIGRvdWJsZSBhbHBoYSA9
IDAuMjUgKiAoMC41ICsgYmV0YSArIGdhbW1hKTsKLQotICAgICAgICBkb3VibGUgYjAgPSAyICog
YWxwaGE7Ci0gICAgICAgIGRvdWJsZSBiMSA9IDIgKiAtMiAqIGFscGhhOwotICAgICAgICBkb3Vi
bGUgYjIgPSAyICogYWxwaGE7Ci0gICAgICAgIGRvdWJsZSBhMSA9IDIgKiAtZ2FtbWE7Ci0gICAg
ICAgIGRvdWJsZSBhMiA9IDIgKiBiZXRhOwotCi0gICAgICAgIHNldE5vcm1hbGl6ZWRDb2VmZmlj
aWVudHMoYjAsIGIxLCBiMiwgMSwgYTEsIGEyKTsKKyAgICAgICAgZG91YmxlIGFscGhhID0gc2lu
KHRoZXRhKSAvICgyICogcmVzb25hbmNlKTsKKyAgICAgICAgZG91YmxlIGNvc3cgPSBjb3ModGhl
dGEpOworICAgICAgICBkb3VibGUgYmV0YSA9ICgxICsgY29zdykgLyAyOworCisgICAgICAgIGRv
dWJsZSBiMCA9IGJldGE7CisgICAgICAgIGRvdWJsZSBiMSA9IC0oMiAqIGJldGEpOworICAgICAg
ICBkb3VibGUgYjIgPSBiZXRhOworCisgICAgICAgIGRvdWJsZSBhMCA9IDEgKyBhbHBoYTsKKyAg
ICAgICAgZG91YmxlIGExID0gLTIgKiBjb3N3OworICAgICAgICBkb3VibGUgYTIgPSAxIC0gYWxw
aGE7CisKKyAgICAgICAgc2V0Tm9ybWFsaXplZENvZWZmaWNpZW50cyhiMCwgYjEsIGIyLCBhMCwg
YTEsIGEyKTsKICAgICB9IGVsc2UgewogICAgICAgLy8gV2hlbiBjdXRvZmYgaXMgemVybywgd2Ug
bmVlZCB0byBiZSBjYXJlZnVsIGJlY2F1c2UgdGhlIGFib3ZlCiAgICAgICAvLyBnaXZlcyBhIHF1
YWRyYXRpYyBkaXZpZGVkIGJ5IHRoZSBzYW1lIHF1YWRyYXRpYywgd2l0aCBwb2xlcwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4
IDFhOTM1MGFiMjU0N2I1YTcyNDMwZDk0ZDVlMGE3ZDkyOGMzNjA1ZTguLjA2ODk5MWUwY2NlYTRi
ZGQ1ZTZjZWQ2OTBmYzNiYzg3ODE5M2NhMGMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNiBAQAorMjAyMC0w
OC0xMiAgTGF1cm8gTW91cmEgIDxsbW91cmFAaWdhbGlhLmNvbT4KKworICAgICAgICBMb3dwYXNz
IGFuZCBIaWdocGFzcyBCaXF1YWRzIHVzZSBvbGQgZm9ybXVsYXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MTE5MQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEdhcmRlbmluZyByMjY1NTE3IChsb3dwYXNz
KSBzaG93ZWQgb3VyIHRlc3QgZmFpbGluZyBmb3IgR1N0cmVhbWVyIGR1ZQorICAgICAgICB0byBh
IGRpZmZlcmVudCB0aHJlc2hvbGQgdGhhbiB1c2VkIGJ5IHRoZSBpbXBvcnRlZCBXUFQgYmlxdWFk
IHRlc3RzLgorICAgICAgICBVcGRhdGluZyB0aGVtIHRvIHVzZSB0aGUgc2FtZSB0b2xlcmFuY2Ug
YXMgdGhlIFdQVCBvbmVzIHRoZW4gY2F1c2VkCisgICAgICAgIHRoZSBoaWdocGFzcyBmaWx0ZXIg
dG8gZmFpbCwgYXMgaXQgd2FzIHN0aWxsIHVzaW5nIHRoZSBtZXRob2QgbGlrZSB0aGUKKyAgICAg
ICAgb25lIHdhcyByZXBsYWNlZCBmb3IgdGhlIGxvd3Bhc3MuCisKKyAgICAgICAgSGlnaHBhc3Mg
c3BlYzoKKyAgICAgICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmF1ZGlvLyNkb20tYmlxdWFk
ZmlsdGVydHlwZS1oaWdocGFzcworCisgICAgICAgICoKKyAgICAgICAgcGxhdGZvcm0vZ2xpYi9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYmF1ZGlvL3RoZS1hdWRpby1hcGkvdGhl
LWJpcXVhZGZpbHRlcm5vZGUtaW50ZXJmYWNlL2JpcXVhZC1oaWdocGFzcy1leHBlY3RlZC50eHQ6
CisgICAgICAgIFVwZGF0ZSBiYXNlbGluZSB3aXRoIG5ldyBwYXNzLgorICAgICAgICAqIHdlYmF1
ZGlvL2JpcXVhZC1hbGxwYXNzLmh0bWw6IFVzZSBXUFQgdGhyZXNob2xkLgorICAgICAgICAqIHdl
YmF1ZGlvL2JpcXVhZC1iYW5kcGFzcy5odG1sOiBVc2UgV1BUIHRocmVzaG9sZC4KKyAgICAgICAg
KiB3ZWJhdWRpby9iaXF1YWQtaGlnaHBhc3MuaHRtbDogVXNlIFdQVCB0aHJlc2hvbGQuCisgICAg
ICAgICogd2ViYXVkaW8vYmlxdWFkLWhpZ2hzaGVsZi5odG1sOiBVc2UgV1BUIHRocmVzaG9sZC4K
KyAgICAgICAgKiB3ZWJhdWRpby9iaXF1YWQtbG93cGFzcy5odG1sOiBVc2UgV1BUIHRocmVzaG9s
ZC4KKyAgICAgICAgKiB3ZWJhdWRpby9iaXF1YWQtbG93c2hlbGYuaHRtbDogVXNlIFdQVCB0aHJl
c2hvbGQuCisgICAgICAgICogd2ViYXVkaW8vYmlxdWFkLW5vdGNoLmh0bWw6IFVzZSBXUFQgdGhy
ZXNob2xkLgorICAgICAgICAqIHdlYmF1ZGlvL2JpcXVhZC1wZWFraW5nLmh0bWw6IFVzZSBXUFQg
dGhyZXNob2xkLgorICAgICAgICAqIHdlYmF1ZGlvL3Jlc291cmNlcy9iaXF1YWQtdGVzdGluZy5q
czogV3JhcCBmaWx0ZXJQYXJhbWV0ZXJzCisgICAgICAgIGFsb25nc2lkZSBhIHRocmVzaG9sZCBw
YXJhbWV0ZXIuCisgICAgICAgIChjcmVhdGVIaWdocGFzc0ZpbHRlcik6IFVwZGF0ZSBmb3JtdWxh
cyB0byBtYXRjaCB0aGUgbmF0aXZlIG9uZXMuCisgICAgICAgIChjcmVhdGVUZXN0QW5kUnVuKTog
Rm9yd2FyZCB0aGUgdGVzdCBwYXJhbWV0ZXJzLgorICAgICAgICAoY2hlY2tGaWx0ZXJSZXNwb25z
ZSk6IFVwZGF0ZSBlcnJvciB0aHJlc2hvbGQgaWYgcHJlc2VudC4KKwogMjAyMC0wOC0xMiAgTGF1
cm8gTW91cmEgIDxsbW91cmFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXVtXUEVdIFJlYmFz
ZWxpbmUgYWZ0ZXIgbmV3IG9mZnNjcmVlbmNhbnZhcyBwcm9ncmVzcwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dl
YmF1ZGlvL3RoZS1hdWRpby1hcGkvdGhlLWJpcXVhZGZpbHRlcm5vZGUtaW50ZXJmYWNlL2JpcXVh
ZC1oaWdocGFzcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2ViYXVkaW8vdGhlLWF1ZGlvLWFwaS90aGUtYmlx
dWFkZmlsdGVybm9kZS1pbnRlcmZhY2UvYmlxdWFkLWhpZ2hwYXNzLWV4cGVjdGVkLnR4dAppbmRl
eCBlZjllMjIzMzM1M2I1NzVmYTY5NDE3N2Q4NjExZTY1YTNlNDJmNjgzLi5mOTVkYTUyOWI0YmU3
YjVjOWZhOGMxOGYyM2RhZTE5ZTYyNTkzZThhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9nbGliL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2ViYXVkaW8vdGhlLWF1
ZGlvLWFwaS90aGUtYmlxdWFkZmlsdGVybm9kZS1pbnRlcmZhY2UvYmlxdWFkLWhpZ2hwYXNzLWV4
cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvd2ViYXVkaW8vdGhlLWF1ZGlvLWFwaS90aGUtYmlxdWFkZmlsdGVy
bm9kZS1pbnRlcmZhY2UvYmlxdWFkLWhpZ2hwYXNzLWV4cGVjdGVkLnR4dApAQCAtNSw3ICs1LDcg
QEAgUEFTUyBBdWRpdCByZXBvcnQKIFBBU1MgPiBbdGVzdF0gQmlxdWFkIGhpZ2hwYXNzIGZpbHRl
ciAKIFBBU1MgICBOdW1iZXIgb2YgZmlsdGVycyB0ZXN0ZWQgaXMgZXF1YWwgdG8gMy4gCiBQQVNT
ICAgTnVtYmVyIG9mIG5vbi1maW5pdGUgdmFsdWVzIGluIHRoZSByZW5kZXJlZCBvdXRwdXQgaXMg
ZXF1YWwgdG8gMC4gCi1GQUlMIFggTWF4IGVycm9yIGluIEhpZ2hwYXNzIGZpbHRlciByZXNwb25z
ZSBpcyBub3QgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDEuNTQ4N2UtOC4gR290IDAuMDQ4MTU2NDU1
NzQ0MTQ5MTIuIGFzc2VydF90cnVlOiBleHBlY3RlZCB0cnVlIGdvdCBmYWxzZQotRkFJTCA8IFt0
ZXN0XSAxIG91dCBvZiAzIGFzc2VydGlvbnMgd2VyZSBmYWlsZWQuIGFzc2VydF90cnVlOiBleHBl
Y3RlZCB0cnVlIGdvdCBmYWxzZQotRkFJTCAjIEFVRElUIFRBU0sgUlVOTkVSIEZJTklTSEVEOiAx
IG91dCBvZiAxIHRhc2tzIHdlcmUgZmFpbGVkLiBhc3NlcnRfdHJ1ZTogZXhwZWN0ZWQgdHJ1ZSBn
b3QgZmFsc2UKK1BBU1MgICBNYXggZXJyb3IgaW4gSGlnaHBhc3MgZmlsdGVyIHJlc3BvbnNlIGlz
IGxlc3MgdGhhbiBvciBlcXVhbCB0byAxLjU0ODdlLTguIAorUEFTUyA8IFt0ZXN0XSBBbGwgYXNz
ZXJ0aW9ucyBwYXNzZWQuICh0b3RhbCAzIGFzc2VydGlvbnMpIAorUEFTUyAjIEFVRElUIFRBU0sg
UlVOTkVSIEZJTklTSEVEOiAxIHRhc2tzIHJhbiBzdWNjZXNzZnVsbHkuIAogCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtYWxscGFzcy5odG1sIGIvTGF5b3V0VGVzdHMv
d2ViYXVkaW8vYmlxdWFkLWFsbHBhc3MuaHRtbAppbmRleCAzZjQ4NTM5ZjQwOWZiNDBlZDE3MjYx
Yjk2YWU4MGJhNDg2MmI0YzcxLi43ZGZjNTUxYmNmNzg0NmE0YmM3OTcxOTg2ZGZjYzc4NDQyNjc4
ZmVkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtYWxscGFzcy5odG1s
CisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1hbGxwYXNzLmh0bWwKQEAgLTI5LDcg
KzI5LDEwIEBAIGZ1bmN0aW9uIHJ1blRlc3QoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAge2N1dG9mZiA6IC41LCAgIHEgOiAgMCwgZ2FpbiA6IDEgfSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7Y3V0b2ZmIDogMC4yNSwgcSA6IDEwLCBnYWluIDogMSB9LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXTsKLSAgICBjcmVhdGVUZXN0QW5kUnVuKGNvbnRleHQsICJhbGxw
YXNzIiwgZmlsdGVyUGFyYW1ldGVycyk7CisgICAgY3JlYXRlVGVzdEFuZFJ1bihjb250ZXh0LCAi
YWxscGFzcyIsIHsKKyAgICAgICAgdGhyZXNob2xkOiAzLjkzMzdlLTgsCisgICAgICAgIGZpbHRl
clBhcmFtZXRlcnM6IGZpbHRlclBhcmFtZXRlcnMKKyAgICB9KTsKIH0KIAogcnVuVGVzdCgpOwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWJhbmRwYXNzLmh0bWwgYi9M
YXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtYmFuZHBhc3MuaHRtbAppbmRleCA2M2ZmNWRjNmNi
NmFlNGU1NzE2YjkyNjNjNGNiY2ViMzE3ODYyMTFiLi40NGE3NDNiM2I2NWVjMmU2NzRiZWZkZTBl
NDA4NmIwMmNiNmViODQ4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQt
YmFuZHBhc3MuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtYmFuZHBhc3Mu
aHRtbApAQCAtMzEsNyArMzEsMTAgQEAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7Y3V0b2ZmIDogMC4yNSwgcSA6IDEsIGdhaW4gOiAxIH0sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBdOwogCi0gICAgY3JlYXRlVGVzdEFuZFJ1bihjb250ZXh0
LCAiYmFuZHBhc3MiLCBmaWx0ZXJQYXJhbWV0ZXJzKTsKKyAgICBjcmVhdGVUZXN0QW5kUnVuKGNv
bnRleHQsICJiYW5kcGFzcyIsIHsKKyAgICAgICAgdGhyZXNob2xkOiAyLjI1MDFlLTgsCisgICAg
ICAgIGZpbHRlclBhcmFtZXRlcnM6IGZpbHRlclBhcmFtZXRlcnMKKyAgICB9KTsKIH0KIAogcnVu
VGVzdCgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWhpZ2hwYXNz
Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtaGlnaHBhc3MuaHRtbAppbmRleCBm
NDYwZTM4Njk2NDUzZDM0ZWY4MzgyYmQ4OGY0ZWQxOWEwMGJlY2IyLi5iZDFmYTQ5ZjcyMjlhYzk5
OGY4YmFjYTZmNzhkMjM3OGRkODNlNGMzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhdWRp
by9iaXF1YWQtaGlnaHBhc3MuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQt
aGlnaHBhc3MuaHRtbApAQCAtMzAsNyArMzAsMTAgQEAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3V0b2ZmIDogMC4yNSwgcSA6IDEsIGdhaW4gOiAx
IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdOwogCi0gICAgY3JlYXRlVGVzdEFuZFJ1
bihjb250ZXh0LCAiaGlnaHBhc3MiLCBmaWx0ZXJQYXJhbWV0ZXJzKTsKKyAgICBjcmVhdGVUZXN0
QW5kUnVuKGNvbnRleHQsICJoaWdocGFzcyIsIHsKKyAgICAgICAgdGhyZXNob2xkOiAxLjU0ODdl
LTgsCisgICAgICAgIGZpbHRlclBhcmFtZXRlcnM6IGZpbHRlclBhcmFtZXRlcnMKKyAgICB9KTsK
IH0KIAogcnVuVGVzdCgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFk
LWhpZ2hzaGVsZi5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWhpZ2hzaGVsZi5o
dG1sCmluZGV4IDQxOTQ0MjA3YTk4ZGRlOTdkYzU3ZWM0YTBlODRkNDlmNGM0NDVhNTYuLmRiN2Mx
YzU5NGY4ZTg5OTY4OGMzZDUwNjFlZjBhZWMzOTUzOWRkZTggMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3dlYmF1ZGlvL2JpcXVhZC1oaWdoc2hlbGYuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJh
dWRpby9iaXF1YWQtaGlnaHNoZWxmLmh0bWwKQEAgLTMwLDcgKzMwLDEwIEBAIGZ1bmN0aW9uIHJ1
blRlc3QoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2N1dG9mZiA6IDAuMjUsIHEg
OiAxMCwgZ2FpbiA6IDEwIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdOwogCi0gICAg
Y3JlYXRlVGVzdEFuZFJ1bihjb250ZXh0LCAiaGlnaHNoZWxmIiwgZmlsdGVyUGFyYW1ldGVycyk7
CisgICAgY3JlYXRlVGVzdEFuZFJ1bihjb250ZXh0LCAiaGlnaHNoZWxmIiwgeworICAgICAgICB0
aHJlc2hvbGQ6IDYuMjU3N2UtOCwKKyAgICAgICAgZmlsdGVyUGFyYW1ldGVyczogZmlsdGVyUGFy
YW1ldGVycworICAgIH0pOwogfQogCiBydW5UZXN0KCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy93ZWJhdWRpby9iaXF1YWQtbG93cGFzcy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlx
dWFkLWxvd3Bhc3MuaHRtbAppbmRleCA0NDE1OTZiNWYwYzQ4OWJlZGQzNGQ2NTc4ZjJiNTRiZmM3
ZDlhZmY4Li4xZDMxN2MwZmJiNTFlYjM4Y2RmNDEwNzNjZTI3NjYwMDM0ZjI4NWZmIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtbG93cGFzcy5odG1sCisrKyBiL0xheW91
dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1sb3dwYXNzLmh0bWwKQEAgLTMzLDcgKzMzLDEwIEBAIGZ1
bmN0aW9uIHJ1blRlc3QoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2N1dG9mZiA6
IDAuMjUsIHEgOiAxLCBnYWluIDogMSwgZGV0dW5lIDogMTAwIH0sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAge2N1dG9mZiA6IDAuMDEsIHEgOiAxLCBnYWluIDogMSwgZGV0dW5lIDogLTIw
MCB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgXTsKLSAgICBjcmVhdGVUZXN0QW5kUnVu
KGNvbnRleHQsICJsb3dwYXNzIiwgZmlsdGVyUGFyYW1ldGVycyk7CisgICAgY3JlYXRlVGVzdEFu
ZFJ1bihjb250ZXh0LCAibG93cGFzcyIsIHsKKyAgICAgICAgdGhyZXNob2xkOiA5Ljc4NjllLTgs
CisgICAgICAgIGZpbHRlclBhcmFtZXRlcnM6IGZpbHRlclBhcmFtZXRlcnMKKyAgICB9KTsKIH0K
IAogcnVuVGVzdCgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWxv
d3NoZWxmLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtbG93c2hlbGYuaHRtbApp
bmRleCBiODNmMjM5MmVmYWVjNGNiMWEwNWZmYWI2NDAxZDUxZTMyNTgyN2Y4Li5kNmUxYjliMTYx
MzlhOTAxNjg4YzFmZmJiZGUzYzc2NGVjZGQ4MTYzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93
ZWJhdWRpby9iaXF1YWQtbG93c2hlbGYuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9i
aXF1YWQtbG93c2hlbGYuaHRtbApAQCAtMzAsNyArMzAsMTAgQEAgZnVuY3Rpb24gcnVuVGVzdCgp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3V0b2ZmIDogMC4yNSwgcSA6IDEwLCBn
YWluIDogMTAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07CiAKLSAgICBjcmVhdGVU
ZXN0QW5kUnVuKGNvbnRleHQsICJsb3dzaGVsZiIsIGZpbHRlclBhcmFtZXRlcnMpOworICAgIGNy
ZWF0ZVRlc3RBbmRSdW4oY29udGV4dCwgImxvd3NoZWxmIiwgeworICAgICAgICB0aHJlc2hvbGQ6
IDMuODM0OWUtOCwKKyAgICAgICAgZmlsdGVyUGFyYW1ldGVyczogZmlsdGVyUGFyYW1ldGVycwor
ICAgIH0pOwogfQogCiBydW5UZXN0KCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRp
by9iaXF1YWQtbm90Y2guaHRtbCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1ub3RjaC5o
dG1sCmluZGV4IGQ1OGU2MTQ2YmQwMWRjZTY5YjBjMWQwODg2MjBmMzZjYzY2ZTU4OWIuLjc3NjY5
NDFmNjFjYjU5MjIwZjlhZmY2Yzk5MDg5YTY3YWE0OWFlYTAgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3dlYmF1ZGlvL2JpcXVhZC1ub3RjaC5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlv
L2JpcXVhZC1ub3RjaC5odG1sCkBAIC0zMCw3ICszMCwxMCBAQCBmdW5jdGlvbiBydW5UZXN0KCkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjdXRvZmYgOiAwLjI1LCBxIDogMTAsIGdh
aW4gOiAxIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdOwogCi0gICAgY3JlYXRlVGVz
dEFuZFJ1bihjb250ZXh0LCAibm90Y2giLCBmaWx0ZXJQYXJhbWV0ZXJzKTsKKyAgICBjcmVhdGVU
ZXN0QW5kUnVuKGNvbnRleHQsICJub3RjaCIsIHsKKyAgICAgICAgdGhyZXNob2xkOiAxLjk2Njll
LTgsCisgICAgICAgIGZpbHRlclBhcmFtZXRlcnM6IGZpbHRlclBhcmFtZXRlcnMKKyAgICB9KTsK
IH0KIAogcnVuVGVzdCgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFk
LXBlYWtpbmcuaHRtbCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1wZWFraW5nLmh0bWwK
aW5kZXggYzFmMDAzNTA2ODQ4ZmE3ZGE2YWYwYzk0ZTk4OGRkODQwMjhjMTIzMi4uZWZmMzU0MGYy
MmU2MTQ4NTNmNWVkNDMyYzYxOWM1YjNhNGE1ZTEyZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
d2ViYXVkaW8vYmlxdWFkLXBlYWtpbmcuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9i
aXF1YWQtcGVha2luZy5odG1sCkBAIC0zMSw3ICszMSwxMCBAQCBmdW5jdGlvbiBydW5UZXN0KCkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjdXRvZmYgOiAwLjI1LCBxIDogMTAsIGdh
aW4gOiAxMCB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgXTsKIAotICAgIGNyZWF0ZVRl
c3RBbmRSdW4oY29udGV4dCwgInBlYWtpbmciLCBmaWx0ZXJQYXJhbWV0ZXJzKTsKKyAgICBjcmVh
dGVUZXN0QW5kUnVuKGNvbnRleHQsICJwZWFraW5nIiwgeworICAgICAgICB0aHJlc2hvbGQ6IDUu
ODIzNGUtOCwKKyAgICAgICAgZmlsdGVyUGFyYW1ldGVyczogZmlsdGVyUGFyYW1ldGVycworICAg
IH0pOwogfQogCiBydW5UZXN0KCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9y
ZXNvdXJjZXMvYmlxdWFkLXRlc3RpbmcuanMgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJj
ZXMvYmlxdWFkLXRlc3RpbmcuanMKaW5kZXggNjE0ZWMxZTQ1YTQxNzY0MjllZjVlYTFjN2Y0M2U4
YjQ2NmMyZDExNy4uMmUzYzRmMzgwYTRhZjk3YzViNTU3NzJiOWQ2MDhmYWUwYmU4MDdmOSAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2JpcXVhZC10ZXN0aW5nLmpz
CisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9iaXF1YWQtdGVzdGluZy5qcwpA
QCAtOTAsMTkgKzkwLDIwIEBAIGZ1bmN0aW9uIGNyZWF0ZUhpZ2hwYXNzRmlsdGVyKGZyZXEsIHEs
IGdhaW4pIHsKICAgICAgICAgYTEgPSAwOwogICAgICAgICBhMiA9IDA7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgdmFyIGcgPSBNYXRoLnBvdygxMCwgcSAvIDIwKTsKLSAgICAgICAgdmFyIGQgPSBN
YXRoLnNxcnQoKDQgLSBNYXRoLnNxcnQoMTYgLSAxNiAvIChnICogZykpKSAvIDIpOworICAgICAg
ICB2YXIgcmVzb25hbmNlID0gTWF0aC5wb3coMTAsIHEgLyAyMCk7CiAgICAgICAgIHZhciB0aGV0
YSA9IE1hdGguUEkgKiBmcmVxOwotICAgICAgICB2YXIgc24gPSBkICogTWF0aC5zaW4odGhldGEp
IC8gMjsKLSAgICAgICAgdmFyIGJldGEgPSAwLjUgKiAoMSAtIHNuKSAvICgxICsgc24pOwotICAg
ICAgICB2YXIgZ2FtbWEgPSAoMC41ICsgYmV0YSkgKiBNYXRoLmNvcyh0aGV0YSk7Ci0gICAgICAg
IHZhciBhbHBoYSA9IDAuMjUgKiAoMC41ICsgYmV0YSArIGdhbW1hKTsKLQotICAgICAgICBiMCA9
IDIgKiBhbHBoYTsKLSAgICAgICAgYjEgPSAtNCAqIGFscGhhOwotICAgICAgICBiMiA9IDIgKiBh
bHBoYTsKLSAgICAgICAgYTEgPSAyICogKC1nYW1tYSk7Ci0gICAgICAgIGEyID0gMiAqIGJldGE7
CisgICAgICAgIHZhciBhbHBoYSA9IE1hdGguc2luKHRoZXRhKSAvICgyICogcmVzb25hbmNlKTsK
KyAgICAgICAgdmFyIGNvc3cgPSBNYXRoLmNvcyh0aGV0YSk7CisgICAgICAgIHZhciBiZXRhID0g
KDEgKyBjb3N3KSAvIDI7CisKKyAgICAgICAgYjAgPSBiZXRhOworICAgICAgICBiMSA9IC0yICog
YmV0YTsKKyAgICAgICAgYjIgPSBiZXRhOworCisgICAgICAgIGEwID0gMSArIGFscGhhOworICAg
ICAgICBhMSA9IC0yICogY29zdzsKKyAgICAgICAgYTIgPSAxIC0gYWxwaGE7CisgICAgICAgIHJl
dHVybiBub3JtYWxpemVGaWx0ZXJDb2VmZmljaWVudHMoYjAsIGIxLCBiMiwgYTAsIGExLCBhMik7
CiAgICAgfQogCiAgICAgcmV0dXJuIHtiMCA6IGIwLCBiMSA6IGIxLCBiMiA6IGIyLCBhMSA6IGEx
LCBhMiA6IGEyfTsKQEAgLTQwNSw3ICs0MDYsNyBAQCBmdW5jdGlvbiBjcmVhdGVJbXB1bHNlQnVm
ZmVyKGNvbnRleHQsIGxlbmd0aCkgewogfQogCiAKLWZ1bmN0aW9uIGNyZWF0ZVRlc3RBbmRSdW4o
Y29udGV4dCwgZmlsdGVyVHlwZSwgZmlsdGVyUGFyYW1ldGVycykgeworZnVuY3Rpb24gY3JlYXRl
VGVzdEFuZFJ1bihjb250ZXh0LCBmaWx0ZXJUeXBlLCB0ZXN0UGFyYW1ldGVycykgewogICAgIC8v
IFRvIHRlc3QgdGhlIGZpbHRlcnMsIHdlIGFwcGx5IGEgc2lnbmFsIChhbiBpbXB1bHNlKSB0byBl
YWNoIG9mCiAgICAgLy8gdGhlIHNwZWNpZmllZCBmaWx0ZXJzLCB3aXRoIGVhY2ggc2lnbmFsIHN0
YXJ0aW5nIGF0IGEgZGlmZmVyZW50CiAgICAgLy8gdGltZS4gIFRoZSBvdXRwdXQgb2YgdGhlIGZp
bHRlcnMgaXMgc3VtbWVkIHRvZ2V0aGVyIGF0IHRoZQpAQCAtNDE0LDcgKzQxNSw4IEBAIGZ1bmN0
aW9uIGNyZWF0ZVRlc3RBbmRSdW4oY29udGV4dCwgZmlsdGVyVHlwZSwgZmlsdGVyUGFyYW1ldGVy
cykgewogICAgIC8vIG11c3QgYmUgbGFyZ2UgZW5vdWdoIGZvciB0aGUgb3V0cHV0IG9mIGVhY2gg
ZmlsdGVyIHRvIGhhdmUKICAgICAvLyBkZWNheWVkIHRvIHplcm8gd2l0aCB0aW1lU3RlcCBzZWNv
bmRzLiAgVGhhdCB3YXkgdGhlIGZpbHRlcgogICAgIC8vIG91dHB1dHMgZG9uJ3QgaW50ZXJmZXJl
IHdpdGggZWFjaCBvdGhlci4KLSAgICAKKworICAgIGxldCBmaWx0ZXJQYXJhbWV0ZXJzID0gdGVz
dFBhcmFtZXRlcnMuZmlsdGVyUGFyYW1ldGVyczsKICAgICBuRmlsdGVycyA9IE1hdGgubWluKGZp
bHRlclBhcmFtZXRlcnMubGVuZ3RoLCBtYXhGaWx0ZXJzKTsKIAogICAgIHNpZ25hbCA9IG5ldyBB
cnJheShuRmlsdGVycyk7CkBAIC00NDAsNyArNDQyLDcgQEAgZnVuY3Rpb24gY3JlYXRlVGVzdEFu
ZFJ1bihjb250ZXh0LCBmaWx0ZXJUeXBlLCBmaWx0ZXJQYXJhbWV0ZXJzKSB7CiAgICAgICAgIHNp
Z25hbFtrXS5zdGFydCh0aW1lU3RlcCAqIGspOwogICAgIH0KIAotICAgIGNvbnRleHQub25jb21w
bGV0ZSA9IGNoZWNrRmlsdGVyUmVzcG9uc2UoZmlsdGVyVHlwZSwgZmlsdGVyUGFyYW1ldGVycyk7
CisgICAgY29udGV4dC5vbmNvbXBsZXRlID0gY2hlY2tGaWx0ZXJSZXNwb25zZShmaWx0ZXJUeXBl
LCB0ZXN0UGFyYW1ldGVycyk7CiAgICAgY29udGV4dC5zdGFydFJlbmRlcmluZygpOwogfQogCkBA
IC00ODAsOCArNDgyLDEwIEBAIGZ1bmN0aW9uIGdlbmVyYXRlUmVmZXJlbmNlKGZpbHRlclR5cGUs
IGZpbHRlclBhcmFtZXRlcnMpIHsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1mdW5jdGlvbiBj
aGVja0ZpbHRlclJlc3BvbnNlKGZpbHRlclR5cGUsIGZpbHRlclBhcmFtZXRlcnMpIHsKK2Z1bmN0
aW9uIGNoZWNrRmlsdGVyUmVzcG9uc2UoZmlsdGVyVHlwZSwgdGVzdFBhcmFtZXRlcnMpIHsKICAg
ICByZXR1cm4gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgbGV0IGZpbHRlclBhcmFtZXRlcnMg
PSB0ZXN0UGFyYW1ldGVycy5maWx0ZXJQYXJhbWV0ZXJzOworICAgICAgICBsZXQgbWF4QWxsb3dl
ZEVycm9yID0gdGVzdFBhcmFtZXRlcnMudGhyZXNob2xkOwogICAgICAgICByZW5kZXJlZEJ1ZmZl
ciA9IGV2ZW50LnJlbmRlcmVkQnVmZmVyOwogICAgICAgICByZW5kZXJlZERhdGEgPSByZW5kZXJl
ZEJ1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406492</attachid>
            <date>2020-08-12 20:34:03 -0700</date>
            <delta_ts>2020-08-12 21:39:07 -0700</delta_ts>
            <desc>Updated patch removing old tests</desc>
            <filename>bug-181191-20200813003401.patch</filename>
            <type>text/plain</type>
            <size>57415</size>
            <attacher name="Lauro Moura">lmoura</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1NTk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjM5MjhkNDNlZWYxYTRl
ODNmNzdkMzczYjViZjczOWY1NTdlNjE3Ni4uOGFlZWQzNjU0YTE4MTFkODFhMWY2YjlmZmYzZjZk
MmI4OTE3ZWIxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDIwLTA4LTEyICBMYXVy
byBNb3VyYSAgPGxtb3VyYUBpZ2FsaWEuY29tPgorCisgICAgICAgIEhpZ2hwYXNzIEJpcXVhZHMg
dXNlIG9sZCBmb3JtdWxhcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTgxMTkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTGlrZSByMjY1NTE3LCBidXQgZm9yIHRoZSBoaWdocGFzcyBmaWx0ZXIuCisKKyAg
ICAgICAgU3BlYzogaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmF1ZGlvLyNkb20tYmlxdWFkZmls
dGVydHlwZS1oaWdocGFzcworCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMKKwor
ICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0JpcXVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpC
aXF1YWQ6OnNldEhpZ2hwYXNzUGFyYW1zKToKKwogMjAyMC0wOC0xMiAgRGVhbiBKYWNrc29uICA8
ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgRmlyc3Qgc2VhcmNoIG9uIEdvb2dsZSBNYXBzIHNo
b3dzIGJsYWNrIGJhciBhdCB0b3Agb2YgbWFwIGFuZCBibGFuayBzdHJpcHMgdGhyb3VnaCB0aGUg
bWlkZGxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1YWQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQmlxdWFkLmNwcAppbmRleCBkYmU5
NTc2NWZhNDdkZTZlMDAzZmQxZjBkMDJkY2QxZjIyZWRkY2QwLi4xNjg2YjU2YTc2NDc1YTdkNjMw
NWJiOTA4MDFmZWRlYTk0MmE5NTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9CaXF1YWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0Jp
cXVhZC5jcHAKQEAgLTIzOCwyMiArMjM4LDIyIEBAIHZvaWQgQmlxdWFkOjpzZXRIaWdocGFzc1Bh
cmFtcyhkb3VibGUgY3V0b2ZmLCBkb3VibGUgcmVzb25hbmNlKQogICAgIH0gZWxzZSBpZiAoY3V0
b2ZmID4gMCkgewogICAgICAgICAvLyBDb21wdXRlIGJpcXVhZCBjb2VmZmljaWVudHMgZm9yIGhp
Z2hwYXNzIGZpbHRlcgogICAgICAgICByZXNvbmFuY2UgPSBzdGQ6Om1heCgwLjAsIHJlc29uYW5j
ZSk7IC8vIGNhbid0IGdvIG5lZ2F0aXZlCi0gICAgICAgIGRvdWJsZSBnID0gcG93KDEwLjAsIDAu
MDUgKiByZXNvbmFuY2UpOwotICAgICAgICBkb3VibGUgZCA9IHNxcnQoKDQgLSBzcXJ0KDE2IC0g
MTYgLyAoZyAqIGcpKSkgLyAyKTsKKyAgICAgICAgcmVzb25hbmNlID0gcG93KDEwLjAsIDAuMDUg
KiByZXNvbmFuY2UpOwogCiAgICAgICAgIGRvdWJsZSB0aGV0YSA9IHBpRG91YmxlICogY3V0b2Zm
OwotICAgICAgICBkb3VibGUgc24gPSAwLjUgKiBkICogc2luKHRoZXRhKTsKLSAgICAgICAgZG91
YmxlIGJldGEgPSAwLjUgKiAoMSAtIHNuKSAvICgxICsgc24pOwotICAgICAgICBkb3VibGUgZ2Ft
bWEgPSAoMC41ICsgYmV0YSkgKiBjb3ModGhldGEpOwotICAgICAgICBkb3VibGUgYWxwaGEgPSAw
LjI1ICogKDAuNSArIGJldGEgKyBnYW1tYSk7Ci0KLSAgICAgICAgZG91YmxlIGIwID0gMiAqIGFs
cGhhOwotICAgICAgICBkb3VibGUgYjEgPSAyICogLTIgKiBhbHBoYTsKLSAgICAgICAgZG91Ymxl
IGIyID0gMiAqIGFscGhhOwotICAgICAgICBkb3VibGUgYTEgPSAyICogLWdhbW1hOwotICAgICAg
ICBkb3VibGUgYTIgPSAyICogYmV0YTsKLQotICAgICAgICBzZXROb3JtYWxpemVkQ29lZmZpY2ll
bnRzKGIwLCBiMSwgYjIsIDEsIGExLCBhMik7CisgICAgICAgIGRvdWJsZSBhbHBoYSA9IHNpbih0
aGV0YSkgLyAoMiAqIHJlc29uYW5jZSk7CisgICAgICAgIGRvdWJsZSBjb3N3ID0gY29zKHRoZXRh
KTsKKyAgICAgICAgZG91YmxlIGJldGEgPSAoMSArIGNvc3cpIC8gMjsKKworICAgICAgICBkb3Vi
bGUgYjAgPSBiZXRhOworICAgICAgICBkb3VibGUgYjEgPSAtKDIgKiBiZXRhKTsKKyAgICAgICAg
ZG91YmxlIGIyID0gYmV0YTsKKworICAgICAgICBkb3VibGUgYTAgPSAxICsgYWxwaGE7CisgICAg
ICAgIGRvdWJsZSBhMSA9IC0yICogY29zdzsKKyAgICAgICAgZG91YmxlIGEyID0gMSAtIGFscGhh
OworCisgICAgICAgIHNldE5vcm1hbGl6ZWRDb2VmZmljaWVudHMoYjAsIGIxLCBiMiwgYTAsIGEx
LCBhMik7CiAgICAgfSBlbHNlIHsKICAgICAgIC8vIFdoZW4gY3V0b2ZmIGlzIHplcm8sIHdlIG5l
ZWQgdG8gYmUgY2FyZWZ1bCBiZWNhdXNlIHRoZSBhYm92ZQogICAgICAgLy8gZ2l2ZXMgYSBxdWFk
cmF0aWMgZGl2aWRlZCBieSB0aGUgc2FtZSBxdWFkcmF0aWMsIHdpdGggcG9sZXMKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA2
N2JhZTE5NzM4NDQzYTU4NmUzNmNjNzVmNjNlYWMzZDhmZjZkNWE1Li4wNmEwNTdhZDEzMjM5M2I4
Yzc1ZDg2ZWU3ODUxMzdiOGY2YzJhYzYyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIwMjAtMDgt
MTIgIExhdXJvIE1vdXJhICA8bG1vdXJhQGlnYWxpYS5jb20+CisKKyAgICAgICAgSGlnaHBhc3Mg
QmlxdWFkcyB1c2Ugb2xkIGZvcm11bGFzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xODExOTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBHYXJkZW5pbmcgcjI2NTUxNyAobG93cGFzcykgc2hvd2VkIG91ciB0
ZXN0IGZhaWxpbmcgZm9yIEdTdHJlYW1lciBkdWUKKyAgICAgICAgdG8gYSBkaWZmZXJlbnQgdGhy
ZXNob2xkIHRoYW4gdXNlZCBieSB0aGUgaW1wb3J0ZWQgV1BUIGJpcXVhZCB0ZXN0cy4KKworICAg
ICAgICBBcyB0aGV5IHRlc3QgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSwgcmVtb3ZlIHRoZSBvbGQg
d2ViYXVkaW8vYmlxdWFkCisgICAgICAgIHRlc3RzIGFuZCBrZWVwIHVzaW5nIHRoZSBpbXBvcnRl
ZCBXUFQgb25lcyB3aXRoIHRoZSBkZXRhaWxlZAorICAgICAgICB0aHJlc2hvbGRzLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ2xpYi9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYmF1
ZGlvL3RoZS1hdWRpby1hcGkvdGhlLWJpcXVhZGZpbHRlcm5vZGUtaW50ZXJmYWNlL2JpcXVhZC1o
aWdocGFzcy1leHBlY3RlZC50eHQ6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjLXdr
Mi9UZXN0RXhwZWN0YXRpb25zOiBSZW1vdmVkIGV4cGVjdGF0aW9uIHJlZ2FyZGluZworICAgICAg
ICBkZWxldGVkIGZpbGUuCisgICAgICAgICogd2ViYXVkaW8vYmlxdWFkLWFsbHBhc3MtZXhwZWN0
ZWQudHh0OiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL2JpcXVhZC1hbGxwYXNzLmh0bWw6
IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vYmlxdWFkLWJhbmRwYXNzLWV4cGVjdGVkLnR4
dDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9iaXF1YWQtYmFuZHBhc3MuaHRtbDogUmVt
b3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9iaXF1YWQtZ2V0RnJlcXVlbmN5UmVzcG9uc2UtZXhw
ZWN0ZWQudHh0OiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL2JpcXVhZC1nZXRGcmVxdWVu
Y3lSZXNwb25zZS5odG1sOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL2JpcXVhZC1oaWdo
cGFzcy1leHBlY3RlZC50eHQ6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vYmlxdWFkLWhp
Z2hwYXNzLmh0bWw6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vYmlxdWFkLWhpZ2hzaGVs
Zi1leHBlY3RlZC50eHQ6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vYmlxdWFkLWhpZ2hz
aGVsZi5odG1sOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL2JpcXVhZC1sb3dwYXNzLWV4
cGVjdGVkLnR4dDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9iaXF1YWQtbG93cGFzcy5o
dG1sOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL2JpcXVhZC1sb3dzaGVsZi1leHBlY3Rl
ZC50eHQ6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vYmlxdWFkLWxvd3NoZWxmLmh0bWw6
IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vYmlxdWFkLW5vdGNoLWV4cGVjdGVkLnR4dDog
UmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9iaXF1YWQtbm90Y2guaHRtbDogUmVtb3ZlZC4K
KyAgICAgICAgKiB3ZWJhdWRpby9iaXF1YWQtcGVha2luZy1leHBlY3RlZC50eHQ6IFJlbW92ZWQu
CisgICAgICAgICogd2ViYXVkaW8vYmlxdWFkLXBlYWtpbmcuaHRtbDogUmVtb3ZlZC4KKyAgICAg
ICAgKiB3ZWJhdWRpby9iaXF1YWRmaWx0ZXJub2RlLWJhc2ljLWV4cGVjdGVkLnR4dDogUmVtb3Zl
ZC4KKyAgICAgICAgKiB3ZWJhdWRpby9iaXF1YWRmaWx0ZXJub2RlLWJhc2ljLmh0bWw6IFJlbW92
ZWQuCisgICAgICAgICogd2ViYXVkaW8vcmVzb3VyY2VzL2JpcXVhZC10ZXN0aW5nLmpzOiBSZW1v
dmVkLgorCiAyMDIwLTA4LTEyICBMYXVybyBNb3VyYSAgPGxtb3VyYUBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFtHVEtdW1dQRV0gR2FyZGVuaW5nIHNvbWUgbW9yZSBmYWlsdXJlcy4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2MvQ2hhbmdlTG9nCmluZGV4IGIxNzRjMWFmZDkwZmRiMWQ0NDdiNmI0ZGVmM2JiNzA2
YzZkY2NiMmEuLjZkOTIzZWFiNzI0MjkzMDQzZGE4NzI4ZTc2NGI0ZGM1NTdhMWVmNDkgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIwLTA4LTEyICBM
YXVybyBNb3VyYSAgPGxtb3VyYUBpZ2FsaWEuY29tPgorCisgICAgICAgIEhpZ2hwYXNzIEJpcXVh
ZHMgdXNlIG9sZCBmb3JtdWxhcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTgxMTkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKgorICAgICAgICB3ZWItcGxhdGZvcm0tdGVzdHMvd2ViYXVkaW8vdGhlLWF1
ZGlvLWFwaS90aGUtYmlxdWFkZmlsdGVybm9kZS1pbnRlcmZhY2UvYmlxdWFkLWhpZ2hwYXNzLWV4
cGVjdGVkLnR4dDoKKyAgICAgICAgUmViYXNlbGluZWQKKwogMjAyMC0wOC0xMiAgWW91ZW5uIEZh
YmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVmcmVzaCBXcml0YWJsZVN0cmVh
bSB1cCB0byBzcGVjCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3dlYmF1ZGlvL3RoZS1hdWRpby1hcGkvdGhlLWJpcXVhZGZpbHRlcm5vZGUt
aW50ZXJmYWNlL2JpcXVhZC1oaWdocGFzcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYmF1ZGlvL3RoZS1hdWRpby1hcGkvdGhlLWJp
cXVhZGZpbHRlcm5vZGUtaW50ZXJmYWNlL2JpcXVhZC1oaWdocGFzcy1leHBlY3RlZC50eHQKaW5k
ZXggZTVmNTY1NWQ3YzBlMzBmNWQ0MjlkOWMwZDBkMjk4MWNjZmI5NDQ4Mi4uZjk1ZGE1MjliNGJl
N2I1YzlmYThjMThmMjNkYWUxOWU2MjU5M2U4YSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJhdWRpby90aGUtYXVkaW8tYXBpL3RoZS1i
aXF1YWRmaWx0ZXJub2RlLWludGVyZmFjZS9iaXF1YWQtaGlnaHBhc3MtZXhwZWN0ZWQudHh0Cisr
KyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2ViYXVkaW8v
dGhlLWF1ZGlvLWFwaS90aGUtYmlxdWFkZmlsdGVybm9kZS1pbnRlcmZhY2UvYmlxdWFkLWhpZ2hw
YXNzLWV4cGVjdGVkLnR4dApAQCAtNSw3ICs1LDcgQEAgUEFTUyBBdWRpdCByZXBvcnQKIFBBU1Mg
PiBbdGVzdF0gQmlxdWFkIGhpZ2hwYXNzIGZpbHRlciAKIFBBU1MgICBOdW1iZXIgb2YgZmlsdGVy
cyB0ZXN0ZWQgaXMgZXF1YWwgdG8gMy4gCiBQQVNTICAgTnVtYmVyIG9mIG5vbi1maW5pdGUgdmFs
dWVzIGluIHRoZSByZW5kZXJlZCBvdXRwdXQgaXMgZXF1YWwgdG8gMC4gCi1GQUlMIFggTWF4IGVy
cm9yIGluIEhpZ2hwYXNzIGZpbHRlciByZXNwb25zZSBpcyBub3QgbGVzcyB0aGFuIG9yIGVxdWFs
IHRvIDEuNTQ4N2UtOC4gR290IDAuMDQ4MTU2NDI1OTQxODI2NzMuIGFzc2VydF90cnVlOiBleHBl
Y3RlZCB0cnVlIGdvdCBmYWxzZQotRkFJTCA8IFt0ZXN0XSAxIG91dCBvZiAzIGFzc2VydGlvbnMg
d2VyZSBmYWlsZWQuIGFzc2VydF90cnVlOiBleHBlY3RlZCB0cnVlIGdvdCBmYWxzZQotRkFJTCAj
IEFVRElUIFRBU0sgUlVOTkVSIEZJTklTSEVEOiAxIG91dCBvZiAxIHRhc2tzIHdlcmUgZmFpbGVk
LiBhc3NlcnRfdHJ1ZTogZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UKK1BBU1MgICBNYXggZXJyb3Ig
aW4gSGlnaHBhc3MgZmlsdGVyIHJlc3BvbnNlIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAxLjU0
ODdlLTguIAorUEFTUyA8IFt0ZXN0XSBBbGwgYXNzZXJ0aW9ucyBwYXNzZWQuICh0b3RhbCAzIGFz
c2VydGlvbnMpIAorUEFTUyAjIEFVRElUIFRBU0sgUlVOTkVSIEZJTklTSEVEOiAxIHRhc2tzIHJh
biBzdWNjZXNzZnVsbHkuIAogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGli
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2ViYXVkaW8vdGhlLWF1ZGlvLWFwaS90
aGUtYmlxdWFkZmlsdGVybm9kZS1pbnRlcmZhY2UvYmlxdWFkLWhpZ2hwYXNzLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy93ZWJhdWRpby90aGUtYXVkaW8tYXBpL3RoZS1iaXF1YWRmaWx0ZXJub2RlLWludGVyZmFj
ZS9iaXF1YWQtaGlnaHBhc3MtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBlZjllMjIzMzM1M2I1NzVmYTY5NDE3N2Q4NjExZTY1YTNlNDJmNjgzLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2dsaWIvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJhdWRpby90aGUtYXVkaW8t
YXBpL3RoZS1iaXF1YWRmaWx0ZXJub2RlLWludGVyZmFjZS9iaXF1YWQtaGlnaHBhc3MtZXhwZWN0
ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotCi1QQVNTICMgQVVESVQgVEFT
SyBSVU5ORVIgU1RBUlRFRC4gCi1QQVNTIEV4ZWN1dGluZyAidGVzdCIgCi1QQVNTIEF1ZGl0IHJl
cG9ydCAKLVBBU1MgPiBbdGVzdF0gQmlxdWFkIGhpZ2hwYXNzIGZpbHRlciAKLVBBU1MgICBOdW1i
ZXIgb2YgZmlsdGVycyB0ZXN0ZWQgaXMgZXF1YWwgdG8gMy4gCi1QQVNTICAgTnVtYmVyIG9mIG5v
bi1maW5pdGUgdmFsdWVzIGluIHRoZSByZW5kZXJlZCBvdXRwdXQgaXMgZXF1YWwgdG8gMC4gCi1G
QUlMIFggTWF4IGVycm9yIGluIEhpZ2hwYXNzIGZpbHRlciByZXNwb25zZSBpcyBub3QgbGVzcyB0
aGFuIG9yIGVxdWFsIHRvIDEuNTQ4N2UtOC4gR290IDAuMDQ4MTU2NDU1NzQ0MTQ5MTIuIGFzc2Vy
dF90cnVlOiBleHBlY3RlZCB0cnVlIGdvdCBmYWxzZQotRkFJTCA8IFt0ZXN0XSAxIG91dCBvZiAz
IGFzc2VydGlvbnMgd2VyZSBmYWlsZWQuIGFzc2VydF90cnVlOiBleHBlY3RlZCB0cnVlIGdvdCBm
YWxzZQotRkFJTCAjIEFVRElUIFRBU0sgUlVOTkVSIEZJTklTSEVEOiAxIG91dCBvZiAxIHRhc2tz
IHdlcmUgZmFpbGVkLiBhc3NlcnRfdHJ1ZTogZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UKLQpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMi9UZXN0RXhwZWN0YXRpb25zIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMi9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDE0Y2Fm
ZTVlM2Q0YTU2NWE2ZjZhMmM0NDUxNjRmYWFlNGE1ZmZiOGQuLmJmMmIyYTE0MGRlZmFlZWVmOGU5
M2FmZTM5M2Q1NTQxYzY0YjkwZjUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy13azIvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sy
L1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTEwNTYsOCArMTA1Niw2IEBAIHdlYmtpdC5vcmcvYi8yMTMy
MTIgWyBNb2phdmUgUmVsZWFzZSBdIHdlYmdsLzIuMC4wL2NvbmZvcm1hbmNlMi90ZXh0dXJlcy9j
YW52YXNfCiAKIHdlYmtpdC5vcmcvYi8yMTMyOTIgWyBDYXRhbGluYSBSZWxlYXNlIF0gaHR0cC90
ZXN0cy9JbmRleGVkREIvc3RvcmFnZS1saW1pdC0xLmh0dHBzLmh0bWwgWyBQYXNzIEZhaWx1cmUg
XQogCi13ZWJraXQub3JnL2IvMjEzMzc1IFsgRGVidWcgXSB3ZWJhdWRpby9iaXF1YWQtYmFuZHBh
c3MuaHRtbCBbIFBhc3MgQ3Jhc2ggXQotCiB3ZWJraXQub3JnL2IvMjEzNDYxIGZhc3QvbWVkaWFz
dHJlYW0vbWVkaWFzdHJlYW10cmFjay12aWRlby1mcmFtZVJhdGUtY2xvbmUtaW5jcmVhc2luZy5o
dG1sIFsgUGFzcyBGYWlsdXJlIF0KIAogd2Via2l0Lm9yZy9iLzIxMzU1MyBodHRwL3Rlc3RzL3Jl
c291cmNlTG9hZFN0YXRpc3RpY3MvZ3JhbmRmYXRoZXJpbmctZGF0YWJhc2UuaHRtbCBbIFBhc3Mg
VGltZW91dCBdCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtYWxscGFz
cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtYWxscGFzcy1leHBl
Y3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyOTYxMzJmMmRjNjNkYmY4
MTNmZjRjNTRlYjc3ZTZkMTUwYWRlNjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWFsbHBhc3MtZXhwZWN0
ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotVGVzdHMgQmlxdWFkIGFsbHBh
c3MgZmlsdGVyLgotCi1PbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCi0KLVBBU1MgUmVuZGVyZWQg
b3V0cHV0IGRpZCBub3QgaGF2ZSBpbmZpbml0aWVzIG9yIE5hTnMuCi1QQVNTIEFsbHBhc3MgZmls
dGVyIHJlc3BvbnNlIGlzIGNvcnJlY3QuCi1QQVNTIFRlc3Qgc2lnbmFsIHdhcyBjb3JyZWN0bHkg
ZmlsdGVyZWQuCi1QQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCi0KLVRFU1QgQ09NUExF
VEUKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWFsbHBhc3MuaHRt
bCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1hbGxwYXNzLmh0bWwKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDNmNDg1MzlmNDA5ZmI0MGVkMTcyNjFiOTZhZTgwYmE0ODYyYjRj
NzEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0
VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWFsbHBhc3MuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM5
ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotCi08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9
InJlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9y
ZXNvdXJjZXMvanMtdGVzdC5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Jp
cXVhZC10ZXN0aW5nLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLQotPGJvZHk+Ci0KLTxkaXYgaWQ9
ImRlc2NyaXB0aW9uIj48L2Rpdj4KLTxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgotCi08c2NyaXB0
PgotZGVzY3JpcHRpb24oIlRlc3RzIEJpcXVhZCBhbGxwYXNzIGZpbHRlci4iKTsKLQotZnVuY3Rp
b24gcnVuVGVzdCgpIHsKLSAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7Ci0gICAgICAg
IAotICAgIC8vIENyZWF0ZSBvZmZsaW5lIGF1ZGlvIGNvbnRleHQuCi0gICAgdmFyIGNvbnRleHQg
PSBuZXcgd2Via2l0T2ZmbGluZUF1ZGlvQ29udGV4dCgyLCBzYW1wbGVSYXRlICogcmVuZGVyTGVu
Z3RoU2Vjb25kcywgc2FtcGxlUmF0ZSk7Ci0KLSAgICAvLyBEdW1teSBmaWx0ZXIgdG8gZ2V0IGZp
bHRlciB0eXBlIGNvbnN0YW50Ci0gICAgdmFyIGYgPSBjb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRl
cigpOwotCi0gICAgdmFyIGZpbHRlclBhcmFtZXRlcnMgPSBbe2N1dG9mZiA6IDAsICAgIHEgOiAx
MCwgZ2FpbiA6IDEgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3V0b2ZmIDogMSwg
ICAgcSA6IDEwLCBnYWluIDogMSB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjdXRv
ZmYgOiAuNSwgICBxIDogIDAsIGdhaW4gOiAxIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAge2N1dG9mZiA6IDAuMjUsIHEgOiAxMCwgZ2FpbiA6IDEgfSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF07Ci0gICAgY3JlYXRlVGVzdEFuZFJ1bihjb250ZXh0LCAiYWxscGFzcyIsIGZp
bHRlclBhcmFtZXRlcnMpOwotfQotCi1ydW5UZXN0KCk7Ci0KLTwvc2NyaXB0PgotPC9ib2R5Pgot
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWJhbmRwYXNz
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1iYW5kcGFzcy1leHBl
Y3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiYjk3ZDRhYmVlOTcwNmEw
ODZiZWQ0ODdmZWI0NjZmNWM0YjlkOGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWJhbmRwYXNzLWV4cGVj
dGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLVRlc3RzIEJpcXVhZCBiYW5k
cGFzcyBmaWx0ZXIuCi0KLU9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KLQotUEFTUyBSZW5kZXJl
ZCBvdXRwdXQgZGlkIG5vdCBoYXZlIGluZmluaXRpZXMgb3IgTmFOcy4KLVBBU1MgQmFuZHBhc3Mg
ZmlsdGVyIHJlc3BvbnNlIGlzIGNvcnJlY3QuCi1QQVNTIFRlc3Qgc2lnbmFsIHdhcyBjb3JyZWN0
bHkgZmlsdGVyZWQuCi1QQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCi0KLVRFU1QgQ09N
UExFVEUKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWJhbmRwYXNz
Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtYmFuZHBhc3MuaHRtbApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNmZjVkYzZjYjZhZTRlNTcxNmI5MjYzYzRjYmNlYjMx
Nzg2MjExYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9M
YXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtYmFuZHBhc3MuaHRtbAorKysgL2Rldi9udWxsCkBA
IC0xLDQxICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotCi08aHRtbD4KLTxoZWFkPgotPHNjcmlw
dCBzcmM9InJlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3Jj
PSIuLi9yZXNvdXJjZXMvanMtdGVzdC5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0icmVzb3Vy
Y2VzL2JpcXVhZC10ZXN0aW5nLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLQotPGJvZHk+Ci0KLTxk
aXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KLTxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgotCi08
c2NyaXB0PgotZGVzY3JpcHRpb24oIlRlc3RzIEJpcXVhZCBiYW5kcGFzcyBmaWx0ZXIuIik7Ci0K
LWZ1bmN0aW9uIHJ1blRlc3QoKSB7Ci0gICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOwot
ICAgICAgICAKLSAgICAvLyBDcmVhdGUgb2ZmbGluZSBhdWRpbyBjb250ZXh0LgotICAgIHZhciBj
b250ZXh0ID0gbmV3IHdlYmtpdE9mZmxpbmVBdWRpb0NvbnRleHQoMiwgc2FtcGxlUmF0ZSAqIHJl
bmRlckxlbmd0aFNlY29uZHMsIHNhbXBsZVJhdGUpOwotCi0gICAgLy8gRHVtbXkgZmlsdGVyIHRv
IGdldCBmaWx0ZXIgdHlwZSBjb25zdGFudAotICAgIHZhciBmID0gY29udGV4dC5jcmVhdGVCaXF1
YWRGaWx0ZXIoKTsKLQotICAgIC8vIFRoZSBmaWx0ZXJzIHdlIHdhbnQgdG8gdGVzdC4KLSAgICB2
YXIgZmlsdGVyUGFyYW1ldGVycyA9IFt7Y3V0b2ZmIDogMCwgICAgcSA6IDAsIGdhaW4gOiAxIH0s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAge2N1dG9mZiA6IDEsICAgIHEgOiAwLCBnYWlu
IDogMSB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjdXRvZmYgOiAwLjUsICBxIDog
MCwgZ2FpbiA6IDEgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3V0b2ZmIDogMC4y
NSwgcSA6IDEsIGdhaW4gOiAxIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBdOwotCi0g
ICAgY3JlYXRlVGVzdEFuZFJ1bihjb250ZXh0LCAiYmFuZHBhc3MiLCBmaWx0ZXJQYXJhbWV0ZXJz
KTsKLX0KLQotcnVuVGVzdCgpOwotCi08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1nZXRGcmVxdWVuY3lSZXNwb25zZS1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtZ2V0RnJlcXVlbmN5UmVz
cG9uc2UtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWU3MzI2
YzVjNjNhMzA2YTBjMDY2YjM0M2UxZmE0NzI1NmRmOTBhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1nZXRG
cmVxdWVuY3lSZXNwb25zZS1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCww
IEBACi1UZXN0IEJpcXVhZCBnZXRGcmVxdWVuY3lSZXNwb25zZSgpIGZ1bmN0aW9uYWxpdHkuCi0K
LU9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KLQotUEFTUyBNYWduaXR1ZGUgcmVzcG9uc2Ugd2l0
aGluIGFjY2VwdGFibGUgdGhyZXNob2xkLgotUEFTUyBQaGFzZSByZXNwb25zZSB3aXRoaW4gYWNj
ZXB0YWJsZSB0aHJlc2hvbGQuCi1QQVNTIEZyZXF1ZW5jeSByZXNwb25zZSB3YXMgY29ycmVjdC4K
LVBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKLQotVEVTVCBDT01QTEVURQotCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtZ2V0RnJlcXVlbmN5UmVzcG9uc2Uu
aHRtbCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1nZXRGcmVxdWVuY3lSZXNwb25zZS5o
dG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDI4ZjY0ZGRiZGYzZTlhZTc3N2Q1
MWIxZTdiZjk4MWFkMmJjZDBhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1nZXRGcmVxdWVuY3lSZXNwb25z
ZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzA2ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBV
QkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08
aGVhZD4KLTxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcyI+PC9zY3JpcHQ+
Ci08c2NyaXB0IHNyYz0icmVzb3VyY2VzL2JpcXVhZC10ZXN0aW5nLmpzIj48L3NjcmlwdD4KLTxz
Y3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci0K
LTxib2R5PgotPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgotPGRpdiBpZD0iY29uc29sZSI+
PC9kaXY+Ci0KLTxzY3JpcHQ+Ci1kZXNjcmlwdGlvbigiVGVzdCBCaXF1YWQgZ2V0RnJlcXVlbmN5
UmVzcG9uc2UoKSBmdW5jdGlvbmFsaXR5LiIpOwotCi0vLyBUZXN0IHRoZSBmcmVxdWVuY3kgcmVz
cG9uc2Ugb2YgYSBiaXF1YWQgZmlsdGVyLiAgV2UgY29tcHV0ZSB0aGUgZnJlcXVlbmN5IHJlc3Bv
bnNlIGZvciBhIHNpbXBsZQotLy8gcGVha2luZyBiaXF1YWQgZmlsdGVyIGFuZCBjb21wYXJlIGl0
IHdpdGggdGhlIGV4cGVjdGVkIGZyZXF1ZW5jeSByZXNwb25zZS4gIFRoZSBhY3R1YWwgZmlsdGVy
Ci0vLyB1c2VkIGRvZXNuJ3QgbWF0dGVyIHNpbmNlIHdlJ3JlIHRlc3RpbmcgZ2V0RnJlcXVlbmN5
UmVzcG9uc2UgYW5kIG5vdCB0aGUgYWN0dWFsIGZpbHRlciBvdXRwdXQuCi0vLyBUaGUgZmlsdGVy
cyBhcmUgZXh0ZW5zaXZlbHkgdGVzdGVkIGluIG90aGVyIGJpcXVhZCB0ZXN0cy4KLQotdmFyIGNv
bnRleHQ7Ci0KLS8vIFRoZSBiaXF1YWQgZmlsdGVyIG5vZGUuCi12YXIgZmlsdGVyOwotCi0vLyBU
aGUgbWFnbml0dWRlIHJlc3BvbnNlIG9mIHRoZSBiaXF1YWQgZmlsdGVyLgotdmFyIG1hZ1Jlc3Bv
bnNlOwotCi0vLyBUaGUgcGhhc2UgcmVzcG9uc2Ugb2YgdGhlIGJpcXVhZCBmaWx0ZXIuCi12YXIg
cGhhc2VSZXNwb25zZTsKLQotLy8gTnVtYmVyIG9mIGZyZXF1ZW5jeSBzYW1wbGVzIHRvIHRha2Uu
Ci12YXIgbnVtYmVyT2ZGcmVxdWVuY2llcyA9IDEwMDA7Ci0KLS8vIFRoZSBmaWx0ZXIgcGFyYW1l
dGVycy4KLXZhciBmaWx0ZXJDdXRvZmYgPSAxMDAwOyAvLyBIei4KLXZhciBmaWx0ZXJRID0gMTsK
LXZhciBmaWx0ZXJHYWluID0gNTsgLy8gRGVjaWJlbHMuCi0KLS8vIFRoZSBtYXhpbXVtIGFsbG93
ZWQgZXJyb3IgaW4gdGhlIG1hZ25pdHVkZSByZXNwb25zZS4KLXZhciBtYXhBbGxvd2VkTWFnRXJy
b3IgPSA1LjdlLTc7Ci0KLS8vIFRoZSBtYXhpbXVtIGFsbG93ZWQgZXJyb3IgaW4gdGhlIHBoYXNl
IHJlc3BvbnNlLgotdmFyIG1heEFsbG93ZWRQaGFzZUVycm9yID0gNC43ZS04OwotCi0vLyBUaGUg
bWFnbml0dWRlcyBhbmQgcGhhc2VzIG9mIHRoZSByZWZlcmVuY2UgZnJlcXVlbmN5IHJlc3BvbnNl
LgotdmFyIG1hZ1Jlc3BvbnNlOwotdmFyIHBoYXNlUmVzcG9uc2U7Ci0gICAgICAKLS8vIFRoZSBt
YWduaXR1ZGVzIGFuZCBwaGFzZXMgb2YgdGhlIHJlZmVyZW5jZSBmcmVxdWVuY3kgcmVzcG9uc2Uu
Ci12YXIgZXhwZWN0ZWRNYWduaXR1ZGVzOwotdmFyIGV4cGVjdGVkUGhhc2VzOwotCi0vLyBDb252
ZXJ0IGZyZXF1ZW5jeSBpbiBIeiB0byBhIG5vcm1hbGl6ZWQgZnJlcXVlbmN5IGJldHdlZW4gMCB0
byAxIHdpdGggMSBjb3JyZXNwb25kaW5nIHRvIHRoZQotLy8gTnlxdWlzdCBmcmVxdWVuY3kuCi1m
dW5jdGlvbiBub3JtYWxpemVkRnJlcXVlbmN5KGZyZXFIeiwgc2FtcGxlUmF0ZSkKLXsKLSAgICB2
YXIgbnlxdWlzdCA9IHNhbXBsZVJhdGUgLyAyOwotICAgIHJldHVybiBmcmVxSHogLyBueXF1aXN0
OwotfQotCi0vLyBHZXQgdGhlIGZpbHRlciByZXNwb25zZSBhdCBhIChub3JtYWxpemVkKSBmcmVx
dWVuY3kgfGZ8IGZvciB0aGUgZmlsdGVyIHdpdGggY29lZmZpY2llbnRzIHxjb2VmfC4KLWZ1bmN0
aW9uIGdldFJlc3BvbnNlQXQoY29lZiwgZikKLXsKLSAgICB2YXIgYjAgPSBjb2VmLmIwOwotICAg
IHZhciBiMSA9IGNvZWYuYjE7Ci0gICAgdmFyIGIyID0gY29lZi5iMjsKLSAgICB2YXIgYTEgPSBj
b2VmLmExOwotICAgIHZhciBhMiA9IGNvZWYuYTI7Ci0KLSAgICAvLyBIKHopID0gKGIwICsgYjEg
LyB6ICsgYjIgLyB6XjIpIC8gKDEgKyBhMSAvIHogKyBhMiAvIHpeMikKLSAgICAvLwotICAgIC8v
IENvbXB1dGUgSChleHAoaSAqIHBpICogZikpLiAgTm8gbmF0aXZlIGNvbXBsZXggbnVtYmVycyBp
biBqYXZhc2NyaXB0LCBzbyBicmVhayBIKGV4cChpICogcGkgKiAvLyBmKSkKLSAgICAvLyBpbiB0
byB0aGUgcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnRzIG9mIHRoZSBudW1lcmF0b3IgYW5kIGRlbm9t
aW5hdG9yLiAgTGV0IG9tZWdhID0gcGkgKiBmLgotICAgIC8vIFRoZW4gdGhlIG51bWVyYXRvciBp
cwotICAgIC8vCi0gICAgLy8gYjAgKyBiMSAqIGNvcyhvbWVnYSkgKyBiMiAqIGNvcygyICogb21l
Z2EpIC0gaSAqIChiMSAqIHNpbihvbWVnYSkgKyBiMiAqIHNpbigyICogb21lZ2EpKQotICAgIC8v
Ci0gICAgLy8gYW5kIHRoZSBkZW5vbWluYXRvciBpcwotICAgIC8vCi0gICAgLy8gMSArIGExICog
Y29zKG9tZWdhKSArIGEyICogY29zKDIgKiBvbWVnYSkgLSBpICogKGExICogc2luKG9tZWdhKSAr
IGEyICogc2luKDIgKiBvbWVnYSkpCi0gICAgLy8KLSAgICAvLyBDb21wdXRlIHRoZSBtYWduaXR1
ZGUgYW5kIHBoYXNlIGZyb20gdGhlIHJlYWwgYW5kIGltYWdpbmFyeSBwYXJ0cy4KLQotICAgIHZh
ciBvbWVnYSA9IE1hdGguUEkgKiBmOwotICAgIHZhciBudW1lcmF0b3JSZWFsID0gYjAgKyBiMSAq
IE1hdGguY29zKG9tZWdhKSArIGIyICogTWF0aC5jb3MoMiAqIG9tZWdhKTsKLSAgICB2YXIgbnVt
ZXJhdG9ySW1hZyA9IC0oYjEgKiBNYXRoLnNpbihvbWVnYSkgKyBiMiAqIE1hdGguc2luKDIgKiBv
bWVnYSkpOwotICAgIHZhciBkZW5vbWluYXRvclJlYWwgPSAxICsgYTEgKiBNYXRoLmNvcyhvbWVn
YSkgKyBhMiAqIE1hdGguY29zKDIgKiBvbWVnYSk7Ci0gICAgdmFyIGRlbm9taW5hdG9ySW1hZyA9
IC0oYTEgKiBNYXRoLnNpbihvbWVnYSkgKyBhMiAqIE1hdGguc2luKDIgKiBvbWVnYSkpOwotCi0g
ICAgdmFyIG1hZ25pdHVkZSA9IE1hdGguc3FydCgobnVtZXJhdG9yUmVhbCAqIG51bWVyYXRvclJl
YWwgKyBudW1lcmF0b3JJbWFnICogbnVtZXJhdG9ySW1hZykKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8gKGRlbm9taW5hdG9yUmVhbCAqIGRlbm9taW5hdG9yUmVhbCArIGRlbm9taW5h
dG9ySW1hZyAqIGRlbm9taW5hdG9ySW1hZykpOwotICAgIHZhciBwaGFzZSA9IE1hdGguYXRhbjIo
bnVtZXJhdG9ySW1hZywgbnVtZXJhdG9yUmVhbCkgLSBNYXRoLmF0YW4yKGRlbm9taW5hdG9ySW1h
ZywgZGVub21pbmF0b3JSZWFsKTsKLSAgICAKLSAgICBpZiAocGhhc2UgPj0gTWF0aC5QSSkgewot
ICAgICAgICBwaGFzZSAtPSAyICogTWF0aC5QSTsKLSAgICB9IGVsc2UgaWYgKHBoYXNlIDw9IC1N
YXRoLlBJKSB7Ci0gICAgICAgIHBoYXNlICs9IDIgKiBNYXRoLlBJOwotICAgIH0KLSAgIAotICAg
IHJldHVybiB7bWFnbml0dWRlIDogbWFnbml0dWRlLCBwaGFzZSA6IHBoYXNlfTsgCi19Ci0KLS8v
IENvbXB1dGUgdGhlIHJlZmVyZW5jZSBmcmVxdWVuY3kgcmVzcG9uc2UgZm9yIHRoZSBiaXF1YWQg
ZmlsdGVyIHxmaWx0ZXJ8IGF0IHRoZSBmcmVxdWVuY3kgc2FtcGxlcwotLy8gZ2l2ZW4gYnkgfGZy
ZXF1ZW5jaWVzfC4KLWZ1bmN0aW9uIGZyZXF1ZW5jeVJlc3BvbnNlUmVmZXJlbmNlKGZpbHRlciwg
ZnJlcXVlbmNpZXMpCi17Ci0gICAgdmFyIHNhbXBsZVJhdGUgPSBmaWx0ZXIuY29udGV4dC5zYW1w
bGVSYXRlOwotICAgIHZhciBub3JtYWxpemVkRnJlcSA9IG5vcm1hbGl6ZWRGcmVxdWVuY3koZmls
dGVyLmZyZXF1ZW5jeS52YWx1ZSwgc2FtcGxlUmF0ZSk7Ci0gICAgdmFyIGZpbHRlckNvZWZmaWNp
ZW50cyA9IGNyZWF0ZUZpbHRlcihmaWx0ZXIudHlwZSwgbm9ybWFsaXplZEZyZXEsIGZpbHRlci5R
LnZhbHVlLCBmaWx0ZXIuZ2Fpbi52YWx1ZSk7Ci0KLSAgICB2YXIgbWFnbml0dWRlcyA9IFtdOwot
ICAgIHZhciBwaGFzZXMgPSBbXTsKLQotICAgIGZvciAodmFyIGsgPSAwOyBrIDwgZnJlcXVlbmNp
ZXMubGVuZ3RoOyArK2spIHsKLSAgICAgICAgdmFyIHJlc3BvbnNlID0gZ2V0UmVzcG9uc2VBdChm
aWx0ZXJDb2VmZmljaWVudHMsIG5vcm1hbGl6ZWRGcmVxdWVuY3koZnJlcXVlbmNpZXNba10sIHNh
bXBsZVJhdGUpKTsKLSAgICAgICAgbWFnbml0dWRlcy5wdXNoKHJlc3BvbnNlLm1hZ25pdHVkZSk7
Ci0gICAgICAgIHBoYXNlcy5wdXNoKHJlc3BvbnNlLnBoYXNlKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4ge21hZ25pdHVkZXMgOiBtYWduaXR1ZGVzLCBwaGFzZXMgOiBwaGFzZXN9OwotfQotCi0vLyBD
b21wdXRlIGEgc2V0IG9mIGxpbmVhcmx5IHNwYWNlZCBmcmVxdWVuY2llcy4KLWZ1bmN0aW9uIGNy
ZWF0ZUZyZXF1ZW5jaWVzKG5GcmVxdWVuY2llcywgc2FtcGxlUmF0ZSkKLXsKLSAgICB2YXIgZnJl
cXVlbmNpZXMgPSBuZXcgRmxvYXQzMkFycmF5KG5GcmVxdWVuY2llcyk7Ci0gICAgdmFyIG55cXVp
c3QgPSBzYW1wbGVSYXRlIC8gMjsKLSAgICB2YXIgZnJlcURlbHRhID0gbnlxdWlzdCAvIG5GcmVx
dWVuY2llczsKLQotICAgIGZvciAodmFyIGsgPSAwOyBrIDwgbkZyZXF1ZW5jaWVzOyArK2spIHsK
LSAgICAgICAgZnJlcXVlbmNpZXNba10gPSBrICogZnJlcURlbHRhOwotICAgIH0KLQotICAgIHJl
dHVybiBmcmVxdWVuY2llczsKLX0KLQotZnVuY3Rpb24gbGluZWFyVG9EZWNpYmVscyh4KQotewot
ICAgIGlmICh4KSB7Ci0gICAgICAgIHJldHVybiAyMCAqIE1hdGgubG9nKHgpIC8gTWF0aC5MTjEw
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiAtMTAwMDsKLSAgICB9Ci19Ci0KLS8vIExv
b2sgdGhyb3VnaCB0aGUgYXJyYXkgYW5kIGZpbmQgYW55IE5hTiBvciBpbmZpbml0eS4gUmV0dXJu
cyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IG9jY3VyZW5jZSBvcgotLy8gLTEgaWYgbm9uZS4KLWZ1
bmN0aW9uIGZpbmRCYWROdW1iZXIoc2lnbmFsKQotewotICAgIGZvciAodmFyIGsgPSAwOyBrIDwg
c2lnbmFsLmxlbmd0aDsgKytrKSB7Ci0gICAgICAgIGlmICghaXNWYWxpZE51bWJlcihzaWduYWxb
a10pKSB7Ci0gICAgICAgICAgIHJldHVybiBrOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVy
biAtMTsKLX0KLQotLy8gQ29tcHV0ZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgZGlmZmVyZW5jZSBi
ZXR3ZWVuIHBoYXNlIGFuZ2xlcywgdGFraW5nIGludG8gYWNjb3VudCB0aGUgd3JhcHBpbmcKLS8v
IG9mIHBoYXNlcy4KLWZ1bmN0aW9uIGFic29sdXRlUGhhc2VEaWZmZXJlbmNlKHgsIHkpCi17Ci0g
ICAgdmFyIGRpZmYgPSBNYXRoLmFicyh4IC0geSk7Ci0gICAgCi0gICAgaWYgKGRpZmYgPiBNYXRo
LlBJKSB7Ci0gICAgICAgIGRpZmYgPSAyICogTWF0aC5QSSAtIGRpZmY7Ci0gICAgfQotICAgIHJl
dHVybiBkaWZmOwotfQotCi0vLyBDb21wYXJlIHRoZSBmcmVxdWVuY3kgcmVzcG9uc2Ugd2l0aCBv
dXIgZXhwZWN0ZWQgcmVzcG9uc2UuCi1mdW5jdGlvbiBjb21wYXJlUmVzcG9uc2VzKGZpbHRlciwg
ZnJlcXVlbmNpZXMsIG1hZ1Jlc3BvbnNlLCBwaGFzZVJlc3BvbnNlKQotewotICAgIHZhciBleHBl
Y3RlZFJlc3BvbnNlID0gZnJlcXVlbmN5UmVzcG9uc2VSZWZlcmVuY2UoZmlsdGVyLCBmcmVxdWVu
Y2llcyk7Ci0KLSAgICBleHBlY3RlZE1hZ25pdHVkZXMgPSBleHBlY3RlZFJlc3BvbnNlLm1hZ25p
dHVkZXM7Ci0gICAgZXhwZWN0ZWRQaGFzZXMgPSBleHBlY3RlZFJlc3BvbnNlLnBoYXNlczsKLQot
ICAgIHZhciBuID0gbWFnUmVzcG9uc2UubGVuZ3RoOwotICAgIHZhciBzdWNjZXNzID0gdHJ1ZTsK
LSAgICB2YXIgYmFkUmVzcG9uc2UgPSBmYWxzZTsKLQotICAgIHZhciBtYXhNYWdFcnJvciA9IC0x
OwotICAgIHZhciBtYXhNYWdFcnJvckluZGV4ID0gLTE7Ci0KLSAgICB2YXIgazsKLSAgICB2YXIg
aGFzQmFkTnVtYmVyOwotCi0gICAgaGFzQmFkTnVtYmVyID0gZmluZEJhZE51bWJlcihtYWdSZXNw
b25zZSk7Ci0gICAgaWYgKGhhc0JhZE51bWJlciA+PSAwKSB7Ci0gICAgICAgIHRlc3RGYWlsZWQo
Ik1hZ25pdHVkZSByZXNwb25zZSBoYXMgTmFOIG9yIGluZmluaXR5IGF0ICIgKyBoYXNCYWROdW1i
ZXIpOwotICAgICAgICBzdWNjZXNzID0gZmFsc2U7Ci0gICAgICAgIGJhZFJlc3BvbnNlID0gdHJ1
ZTsKLSAgICB9Ci0KLSAgICBoYXNCYWROdW1iZXIgPSBmaW5kQmFkTnVtYmVyKHBoYXNlUmVzcG9u
c2UpOwotICAgIGlmIChoYXNCYWROdW1iZXIgPj0gMCkgewotICAgICAgICB0ZXN0RmFpbGVkKCJQ
aGFzZSByZXNwb25zZSBoYXMgTmFOIG9yIGluZmluaXR5IGF0ICIgKyBoYXNCYWROdW1iZXIpOwot
ICAgICAgICBzdWNjZXNzID0gZmFsc2U7Ci0gICAgICAgIGJhZFJlc3BvbnNlID0gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICAvLyBUaGVzZSBhcmVuJ3QgdGVzdGluZyB0aGUgaW1wbGVtZW50YXRpb24gaXRz
ZWxmLiAgSW5zdGVhZCwgdGhlc2UgYXJlIHNhbml0eSBjaGVja3Mgb24gdGhlCi0gICAgLy8gcmVm
ZXJlbmNlLiAgRmFpbHVyZSBoZXJlIGRvZXMgbm90IGltcGx5IGFuIGVycm9yIGluIHRoZSBpbXBs
ZW1lbnRhdGlvbi4KLSAgICBoYXNCYWROdW1iZXIgPSBmaW5kQmFkTnVtYmVyKGV4cGVjdGVkTWFn
bml0dWRlcyk7Ci0gICAgaWYgKGhhc0JhZE51bWJlciA+PSAwKSB7Ci0gICAgICAgIHRlc3RGYWls
ZWQoIkV4cGVjdGVkIG1hZ25pdHVkZSByZXNwb25zZSBoYXMgTmFOIG9yIGluZmluaXR5IGF0ICIg
KyBoYXNCYWROdW1iZXIpOwotICAgICAgICBzdWNjZXNzID0gZmFsc2U7Ci0gICAgICAgIGJhZFJl
c3BvbnNlID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBoYXNCYWROdW1iZXIgPSBmaW5kQmFkTnVtYmVy
KGV4cGVjdGVkUGhhc2VzKTsKLSAgICBpZiAoaGFzQmFkTnVtYmVyID49IDApIHsKLSAgICAgICAg
dGVzdEZhaWxlZCgiRXhwZWN0ZWQgcGhhc2UgcmVzcG9uc2UgaGFzIE5hTiBvciBpbmZpbml0eSBh
dCAiICsgaGFzQmFkTnVtYmVyKTsKLSAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwotICAgICAgICBi
YWRSZXNwb25zZSA9IHRydWU7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgZm91bmQgYSBOYU4gb3Ig
aW5maW5pdHksIHRoZSBmb2xsb3dpbmcgdGVzdHMgYXJlbid0IHZlcnkgaGVscGZ1bCwgZXNwZWNp
YWxseSBmb3IgTmFOLgotICAgIC8vIFdlIHJ1biB0aGVtIGFueXdheSwgYWZ0ZXIgcHJpbnRpbmcg
YSB3YXJuaW5nIG1lc3NhZ2UuCi0KLSAgICBpZiAoYmFkUmVzcG9uc2UpIHsKLSAgICAgICAgdGVz
dEZhaWxlZCgiTmFOIG9yIGluZmluaXR5IGluIHRoZSBhY3R1YWwgb3IgZXhwZWN0ZWQgcmVzdWx0
cyBtYWtlcyB0aGUgZm9sbG93aW5nIHRlc3QgcmVzdWx0cyBzdXNwZWN0LiIpOwotICAgICAgICBz
dWNjZXNzID0gZmFsc2U7Ci0gICAgfQotCi0gICAgZm9yIChrID0gMDsgayA8IG47ICsraykgewot
ICAgICAgICB2YXIgZXJyb3IgPSBNYXRoLmFicyhsaW5lYXJUb0RlY2liZWxzKG1hZ1Jlc3BvbnNl
W2tdKSAtIGxpbmVhclRvRGVjaWJlbHMoZXhwZWN0ZWRNYWduaXR1ZGVzW2tdKSk7Ci0gICAgICAg
IGlmIChlcnJvciA+IG1heE1hZ0Vycm9yKSB7Ci0gICAgICAgICAgICBtYXhNYWdFcnJvciA9IGVy
cm9yOwotICAgICAgICAgICAgbWF4TWFnRXJyb3JJbmRleCA9IGs7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBpZiAobWF4TWFnRXJyb3IgPiBtYXhBbGxvd2VkTWFnRXJyb3IpIHsKLSAgICAgICAg
dmFyIG1lc3NhZ2UgPSAiTWFnbml0dWRlIGVycm9yICgiICsgbWF4TWFnRXJyb3IgKyAiIGRCKSI7
Ci0gICAgICAgIG1lc3NhZ2UgKz0gIiBleGNlZWRlZCB0aHJlc2hvbGQgYXQgIiArIGZyZXF1ZW5j
aWVzW21heE1hZ0Vycm9ySW5kZXhdOwotICAgICAgICBtZXNzYWdlICs9ICIgSHouICBBY3R1YWw6
ICIgKyBsaW5lYXJUb0RlY2liZWxzKG1hZ1Jlc3BvbnNlW21heE1hZ0Vycm9ySW5kZXhdKTsKLSAg
ICAgICAgbWVzc2FnZSArPSAiIGRCLCBleHBlY3RlZDogIiArIGxpbmVhclRvRGVjaWJlbHMoZXhw
ZWN0ZWRNYWduaXR1ZGVzW21heE1hZ0Vycm9ySW5kZXhdKSArICIgZEIuIjsKLSAgICAgICAgdGVz
dEZhaWxlZChtZXNzYWdlKTsKLSAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIHRlc3RQYXNzZWQoIk1hZ25pdHVkZSByZXNwb25zZSB3aXRoaW4gYWNjZXB0YWJs
ZSB0aHJlc2hvbGQuIik7Ci0gICAgfQotCi0gICAgdmFyIG1heFBoYXNlRXJyb3IgPSAtMTsKLSAg
ICB2YXIgbWF4UGhhc2VFcnJvckluZGV4ID0gLTE7Ci0KLSAgICBmb3IgKGsgPSAwOyBrIDwgbjsg
KytrKSB7Ci0gICAgICAgIHZhciBlcnJvciA9IGFic29sdXRlUGhhc2VEaWZmZXJlbmNlKHBoYXNl
UmVzcG9uc2Vba10sIGV4cGVjdGVkUGhhc2VzW2tdKTsKLSAgICAgICAgaWYgKGVycm9yID4gbWF4
UGhhc2VFcnJvcikgewotICAgICAgICAgICAgbWF4UGhhc2VFcnJvciA9IGVycm9yOwotICAgICAg
ICAgICAgbWF4UGhhc2VFcnJvckluZGV4ID0gazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlm
IChtYXhQaGFzZUVycm9yID4gbWF4QWxsb3dlZFBoYXNlRXJyb3IpIHsKLSAgICAgICAgdmFyIG1l
c3NhZ2UgPSAiUGhhc2UgZXJyb3IgKHJhZGlhbnMpICgiICsgbWF4UGhhc2VFcnJvcjsKLSAgICAg
ICAgbWVzc2FnZSArPSAiKSBleGNlZWRlZCB0aHJlc2hvbGQgYXQgIiArIGZyZXF1ZW5jaWVzW21h
eFBoYXNlRXJyb3JJbmRleF07Ci0gICAgICAgIG1lc3NhZ2UgKz0gIiBIei4gIEFjdHVhbDogIiAr
IHBoYXNlUmVzcG9uc2VbbWF4UGhhc2VFcnJvckluZGV4XTsKLSAgICAgICAgbWVzc2FnZSArPSAi
IGV4cGVjdGVkOiAiICsgZXhwZWN0ZWRQaGFzZXNbbWF4UGhhc2VFcnJvckluZGV4XTsKLSAgICAg
ICAgdGVzdEZhaWxlZChtZXNzYWdlKTsKLSAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHRlc3RQYXNzZWQoIlBoYXNlIHJlc3BvbnNlIHdpdGhpbiBhY2NlcHRh
YmxlIHRocmVzaG9sZC4iKTsKLSAgICB9Ci0KLQotICAgIHJldHVybiBzdWNjZXNzOwotfQotCi1m
dW5jdGlvbiBydW5UZXN0KCkKLXsKLSAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7Ci0K
LSAgICBjb250ZXh0ID0gbmV3IHdlYmtpdEF1ZGlvQ29udGV4dCgpOwotICAgIAotICAgIGZpbHRl
ciA9IGNvbnRleHQuY3JlYXRlQmlxdWFkRmlsdGVyKCk7Ci0KLSAgICAvLyBBcmJpdHJhcmlseSB0
ZXN0IGEgcGVha2luZyBmaWx0ZXIsIGJ1dCBhbnkga2luZCBvZiBmaWx0ZXIgY2FuIGJlIHRlc3Rl
ZC4KLSAgICBmaWx0ZXIudHlwZSA9ICJwZWFraW5nIjsKLSAgICBmaWx0ZXIuZnJlcXVlbmN5LnZh
bHVlID0gZmlsdGVyQ3V0b2ZmOwotICAgIGZpbHRlci5RLnZhbHVlID0gZmlsdGVyUTsKLSAgICBm
aWx0ZXIuZ2Fpbi52YWx1ZSA9IGZpbHRlckdhaW47Ci0KLSAgICB2YXIgZnJlcXVlbmNpZXMgPSBj
cmVhdGVGcmVxdWVuY2llcyhudW1iZXJPZkZyZXF1ZW5jaWVzLCBjb250ZXh0LnNhbXBsZVJhdGUp
OwotICAgIG1hZ1Jlc3BvbnNlID0gbmV3IEZsb2F0MzJBcnJheShudW1iZXJPZkZyZXF1ZW5jaWVz
KTsKLSAgICBwaGFzZVJlc3BvbnNlID0gbmV3IEZsb2F0MzJBcnJheShudW1iZXJPZkZyZXF1ZW5j
aWVzKTsKLQotICAgIGZpbHRlci5nZXRGcmVxdWVuY3lSZXNwb25zZShmcmVxdWVuY2llcywgbWFn
UmVzcG9uc2UsIHBoYXNlUmVzcG9uc2UpOwotICAgIHZhciBzdWNjZXNzID0gY29tcGFyZVJlc3Bv
bnNlcyhmaWx0ZXIsIGZyZXF1ZW5jaWVzLCBtYWdSZXNwb25zZSwgcGhhc2VSZXNwb25zZSk7Ci0K
LSAgICBpZiAoc3VjY2VzcykgewotICAgICAgICB0ZXN0UGFzc2VkKCJGcmVxdWVuY3kgcmVzcG9u
c2Ugd2FzIGNvcnJlY3QuIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdGVzdEZhaWxlZCgiRnJl
cXVlbmN5IHJlc3BvbnNlIHdhcyBpbmNvcnJlY3QuIik7Ci0gICAgfQotCi0gICAgZmluaXNoSlNU
ZXN0KCk7Ci19Ci0KLXJ1blRlc3QoKTsKLQotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtaGlnaHBhc3MtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWhpZ2hwYXNzLWV4cGVjdGVkLnR4dApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNlNmZiNTgyY2Q2OGVmODNiNWVjMzY0ZGM3
MWEwYjBiNzIyMDRmZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtaGlnaHBhc3MtZXhwZWN0ZWQudHh0Cisr
KyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotVGVzdHMgQmlxdWFkIGhpZ2hwYXNzIGZpbHRl
ci4KLQotT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgotCi1QQVNTIFJlbmRlcmVkIG91dHB1dCBk
aWQgbm90IGhhdmUgaW5maW5pdGllcyBvciBOYU5zLgotUEFTUyBIaWdocGFzcyBmaWx0ZXIgcmVz
cG9uc2UgaXMgY29ycmVjdC4KLVBBU1MgVGVzdCBzaWduYWwgd2FzIGNvcnJlY3RseSBmaWx0ZXJl
ZC4KLVBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKLQotVEVTVCBDT01QTEVURQotCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtaGlnaHBhc3MuaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1oaWdocGFzcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBmNDYwZTM4Njk2NDUzZDM0ZWY4MzgyYmQ4OGY0ZWQxOWEwMGJlY2IyLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3Rz
L3dlYmF1ZGlvL2JpcXVhZC1oaWdocGFzcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAs
MCBAQAotPCFET0NUWVBFIGh0bWw+Ci0KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0icmVz
b3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291
cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYmlxdWFk
LXRlc3RpbmcuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotCi08Ym9keT4KLQotPGRpdiBpZD0iZGVz
Y3JpcHRpb24iPjwvZGl2PgotPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Ci0KLTxzY3JpcHQ+Ci1k
ZXNjcmlwdGlvbigiVGVzdHMgQmlxdWFkIGhpZ2hwYXNzIGZpbHRlci4iKTsKLQotZnVuY3Rpb24g
cnVuVGVzdCgpIHsKLSAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7Ci0gICAgICAgIAot
ICAgIC8vIENyZWF0ZSBvZmZsaW5lIGF1ZGlvIGNvbnRleHQuCi0gICAgdmFyIGNvbnRleHQgPSBu
ZXcgd2Via2l0T2ZmbGluZUF1ZGlvQ29udGV4dCgyLCBzYW1wbGVSYXRlICogcmVuZGVyTGVuZ3Ro
U2Vjb25kcywgc2FtcGxlUmF0ZSk7Ci0KLSAgICAvLyBEdW1teSBmaWx0ZXIgdG8gZ2V0IGZpbHRl
ciB0eXBlIGNvbnN0YW50Ci0gICAgdmFyIGYgPSBjb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigp
OwotCi0gICAgLy8gVGhlIGZpbHRlcnMgd2Ugd2FudCB0byB0ZXN0LgotICAgIHZhciBmaWx0ZXJQ
YXJhbWV0ZXJzID0gW3tjdXRvZmYgOiAwLCAgICBxIDogMSwgZ2FpbiA6IDEgfSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7Y3V0b2ZmIDogMSwgICAgcSA6IDEsIGdhaW4gOiAxIH0sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAge2N1dG9mZiA6IDAuMjUsIHEgOiAxLCBnYWluIDog
MSB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgXTsKLQotICAgIGNyZWF0ZVRlc3RBbmRS
dW4oY29udGV4dCwgImhpZ2hwYXNzIiwgZmlsdGVyUGFyYW1ldGVycyk7Ci19Ci0KLXJ1blRlc3Qo
KTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViYXVkaW8vYmlxdWFkLWhpZ2hzaGVsZi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJh
dWRpby9iaXF1YWQtaGlnaHNoZWxmLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNGU4NjM0MzU5N2RiMDI1ZWZhMjg3NTkzYzJmYTlhNjJkM2UxMjhhMi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJh
dWRpby9iaXF1YWQtaGlnaHNoZWxmLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDEx
ICswLDAgQEAKLVRlc3RzIEJpcXVhZCBoaWdoc2hlbGYgZmlsdGVyLgotCi1PbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVT
VCBDT01QTEVURSIuCi0KLVBBU1MgUmVuZGVyZWQgb3V0cHV0IGRpZCBub3QgaGF2ZSBpbmZpbml0
aWVzIG9yIE5hTnMuCi1QQVNTIEhpZ2hzaGVsZiBmaWx0ZXIgcmVzcG9uc2UgaXMgY29ycmVjdC4K
LVBBU1MgVGVzdCBzaWduYWwgd2FzIGNvcnJlY3RseSBmaWx0ZXJlZC4KLVBBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKLQotVEVTVCBDT01QTEVURQotCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy93ZWJhdWRpby9iaXF1YWQtaGlnaHNoZWxmLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhdWRp
by9iaXF1YWQtaGlnaHNoZWxmLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQx
OTQ0MjA3YTk4ZGRlOTdkYzU3ZWM0YTBlODRkNDlmNGM0NDVhNTYuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFk
LWhpZ2hzaGVsZi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPCFET0NUWVBF
IGh0bWw+Ci0KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0icmVzb3VyY2VzL2F1ZGlvLXRl
c3RpbmcuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0Lmpz
Ij48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYmlxdWFkLXRlc3RpbmcuanMiPjwv
c2NyaXB0PgotPC9oZWFkPgotCi08Ym9keT4KLQotPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2
PgotPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Ci0KLTxzY3JpcHQ+Ci1kZXNjcmlwdGlvbigiVGVz
dHMgQmlxdWFkIGhpZ2hzaGVsZiBmaWx0ZXIuIik7Ci0KLWZ1bmN0aW9uIHJ1blRlc3QoKSB7Ci0g
ICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOwotICAgICAgICAKLSAgICAvLyBDcmVhdGUg
b2ZmbGluZSBhdWRpbyBjb250ZXh0LgotICAgIHZhciBjb250ZXh0ID0gbmV3IHdlYmtpdE9mZmxp
bmVBdWRpb0NvbnRleHQoMiwgc2FtcGxlUmF0ZSAqIHJlbmRlckxlbmd0aFNlY29uZHMsIHNhbXBs
ZVJhdGUpOwotCi0gICAgLy8gRHVtbXkgZmlsdGVyIHRvIGdldCBmaWx0ZXIgdHlwZSBjb25zdGFu
dAotICAgIHZhciBmID0gY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTsKLQotICAgIC8vIFRo
ZSBmaWx0ZXJzIHdlIHdhbnQgdG8gdGVzdC4KLSAgICB2YXIgZmlsdGVyUGFyYW1ldGVycyA9IFt7
Y3V0b2ZmIDogMCwgICAgcSA6IDEwLCBnYWluIDogMTAgfSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7Y3V0b2ZmIDogMSwgICAgcSA6IDEwLCBnYWluIDogMTAgfSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7Y3V0b2ZmIDogMC4yNSwgcSA6IDEwLCBnYWluIDogMTAgfSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF07Ci0KLSAgICBjcmVhdGVUZXN0QW5kUnVuKGNvbnRl
eHQsICJoaWdoc2hlbGYiLCBmaWx0ZXJQYXJhbWV0ZXJzKTsKLX0KLQotcnVuVGVzdCgpOwotCi08
L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1
ZGlvL2JpcXVhZC1sb3dwYXNzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2Jp
cXVhZC1sb3dwYXNzLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ODZiZjAxMzBjOGFlZWJkMTYwNTI4OTJjOWM0MDkwYTZhYzczZDRiZi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1
YWQtbG93cGFzcy1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi1U
ZXN0cyBCaXF1YWQgbG93cGFzcyBmaWx0ZXIuCi0KLU9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
LQotUEFTUyBSZW5kZXJlZCBvdXRwdXQgZGlkIG5vdCBoYXZlIGluZmluaXRpZXMgb3IgTmFOcy4K
LVBBU1MgTG93cGFzcyBmaWx0ZXIgcmVzcG9uc2UgaXMgY29ycmVjdC4KLVBBU1MgVGVzdCBzaWdu
YWwgd2FzIGNvcnJlY3RseSBmaWx0ZXJlZC4KLVBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKLQotVEVTVCBDT01QTEVURQotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9i
aXF1YWQtbG93cGFzcy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWxvd3Bhc3Mu
aHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQxNTk2YjVmMGM0ODliZWRkMzRk
NjU3OGYyYjU0YmZjN2Q5YWZmOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtbG93cGFzcy5odG1sCisrKyAv
ZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci0KLTxodG1sPgotPGhl
YWQ+Ci08c2NyaXB0IHNyYz0icmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMiPjwvc2NyaXB0Pgot
PHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQg
c3JjPSJyZXNvdXJjZXMvYmlxdWFkLXRlc3RpbmcuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotCi08
Ym9keT4KLQotPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgotPGRpdiBpZD0iY29uc29sZSI+
PC9kaXY+Ci0KLTxzY3JpcHQ+Ci1kZXNjcmlwdGlvbigiVGVzdHMgQmlxdWFkIGxvd3Bhc3MgZmls
dGVyLiIpOwotCi13aW5kb3cuT2ZmbGluZUF1ZGlvQ29udGV4dCA9IHdpbmRvdy5PZmZsaW5lQXVk
aW9Db250ZXh0IHx8IHdpbmRvdy53ZWJraXRPZmZsaW5lQXVkaW9Db250ZXh0OwotCi1mdW5jdGlv
biBydW5UZXN0KCkgewotICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKLSAgICAgICAg
Ci0gICAgLy8gQ3JlYXRlIG9mZmxpbmUgYXVkaW8gY29udGV4dC4KLSAgICB2YXIgY29udGV4dCA9
IG5ldyBPZmZsaW5lQXVkaW9Db250ZXh0KDIsIHNhbXBsZVJhdGUgKiByZW5kZXJMZW5ndGhTZWNv
bmRzLCBzYW1wbGVSYXRlKTsKLQotICAgIC8vIER1bW15IGZpbHRlciB0byBnZXQgZmlsdGVyIHR5
cGUgY29uc3RhbnQKLSAgICB2YXIgZiA9IGNvbnRleHQuY3JlYXRlQmlxdWFkRmlsdGVyKCk7Ci0K
LSAgICAvLyBUaGUgZmlsdGVycyB3ZSB3YW50IHRvIHRlc3QuCi0gICAgdmFyIGZpbHRlclBhcmFt
ZXRlcnMgPSBbe2N1dG9mZiA6IDAsICAgIHEgOiAxLCBnYWluIDogMSB9LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHtjdXRvZmYgOiAxLCAgICBxIDogMSwgZ2FpbiA6IDEgfSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7Y3V0b2ZmIDogMC4yNSwgcSA6IDEsIGdhaW4gOiAxIH0s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAge2N1dG9mZiA6IDAuMjUsIHEgOiAxLCBnYWlu
IDogMSwgZGV0dW5lIDogMTAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAge2N1dG9m
ZiA6IDAuMDEsIHEgOiAxLCBnYWluIDogMSwgZGV0dW5lIDogLTIwMCB9LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXTsKLSAgICBjcmVhdGVUZXN0QW5kUnVuKGNvbnRleHQsICJsb3dwYXNz
IiwgZmlsdGVyUGFyYW1ldGVycyk7Ci19Ci0KLXJ1blRlc3QoKTsKLQotPC9zY3JpcHQ+Ci08L2Jv
ZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtbG93
c2hlbGYtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWxvd3NoZWxm
LWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmNTAwMmZmZTE3
NjkzMjU2NTljM2I2ZDdjNWY0ZmVhOGI1Y2ZmYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtbG93c2hlbGYt
ZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotVGVzdHMgQmlxdWFk
IGxvd3NoZWxmIGZpbHRlci4KLQotT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgotCi1QQVNTIFJl
bmRlcmVkIG91dHB1dCBkaWQgbm90IGhhdmUgaW5maW5pdGllcyBvciBOYU5zLgotUEFTUyBMb3dz
aGVsZiBmaWx0ZXIgcmVzcG9uc2UgaXMgY29ycmVjdC4KLVBBU1MgVGVzdCBzaWduYWwgd2FzIGNv
cnJlY3RseSBmaWx0ZXJlZC4KLVBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKLQotVEVT
VCBDT01QTEVURQotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtbG93
c2hlbGYuaHRtbCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1sb3dzaGVsZi5odG1sCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODNmMjM5MmVmYWVjNGNiMWEwNWZmYWI2NDAx
ZDUxZTMyNTgyN2Y4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1sb3dzaGVsZi5odG1sCisrKyAvZGV2L251
bGwKQEAgLTEsNDAgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci0KLTxodG1sPgotPGhlYWQ+Ci08
c2NyaXB0IHNyYz0icmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMiPjwvc2NyaXB0PgotPHNjcmlw
dCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJy
ZXNvdXJjZXMvYmlxdWFkLXRlc3RpbmcuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotCi08Ym9keT4K
LQotPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgotPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+
Ci0KLTxzY3JpcHQ+Ci1kZXNjcmlwdGlvbigiVGVzdHMgQmlxdWFkIGxvd3NoZWxmIGZpbHRlci4i
KTsKLQotZnVuY3Rpb24gcnVuVGVzdCgpIHsKLSAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRy
dWU7Ci0gICAgICAgIAotICAgIC8vIENyZWF0ZSBvZmZsaW5lIGF1ZGlvIGNvbnRleHQuCi0gICAg
dmFyIGNvbnRleHQgPSBuZXcgd2Via2l0T2ZmbGluZUF1ZGlvQ29udGV4dCgyLCBzYW1wbGVSYXRl
ICogcmVuZGVyTGVuZ3RoU2Vjb25kcywgc2FtcGxlUmF0ZSk7Ci0KLSAgICAvLyBEdW1teSBmaWx0
ZXIgdG8gZ2V0IGZpbHRlciB0eXBlIGNvbnN0YW50Ci0gICAgdmFyIGYgPSBjb250ZXh0LmNyZWF0
ZUJpcXVhZEZpbHRlcigpOwotCi0gICAgLy8gVGhlIGZpbHRlcnMgd2Ugd2FudCB0byB0ZXN0Lgot
ICAgIHZhciBmaWx0ZXJQYXJhbWV0ZXJzID0gW3tjdXRvZmYgOiAwLCAgICBxIDogMTAsIGdhaW4g
OiAxMCB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjdXRvZmYgOiAxLCAgICBxIDog
MTAsIGdhaW4gOiAxMCB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjdXRvZmYgOiAw
LjI1LCBxIDogMTAsIGdhaW4gOiAxMCB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgXTsK
LQotICAgIGNyZWF0ZVRlc3RBbmRSdW4oY29udGV4dCwgImxvd3NoZWxmIiwgZmlsdGVyUGFyYW1l
dGVycyk7Ci19Ci0KLXJ1blRlc3QoKTsKLQotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtbm90Y2gtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLW5vdGNoLWV4cGVjdGVkLnR4dApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGY0NjM1YThkYzNhNzMyMTFmOGRhNjFkNzI4Y2E4MWZk
MDAxYTcyNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9M
YXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtbm90Y2gtZXhwZWN0ZWQudHh0CisrKyAvZGV2L251
bGwKQEAgLTEsMTEgKzAsMCBAQAotVGVzdHMgQmlxdWFkIG5vdGNoIGZpbHRlci4KLQotT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUiLgotCi1QQVNTIFJlbmRlcmVkIG91dHB1dCBkaWQgbm90IGhhdmUg
aW5maW5pdGllcyBvciBOYU5zLgotUEFTUyBOb3RjaCBmaWx0ZXIgcmVzcG9uc2UgaXMgY29ycmVj
dC4KLVBBU1MgVGVzdCBzaWduYWwgd2FzIGNvcnJlY3RseSBmaWx0ZXJlZC4KLVBBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKLQotVEVTVCBDT01QTEVURQotCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtbm90Y2guaHRtbCBiL0xheW91dFRlc3RzL3dlYmF1ZGlv
L2JpcXVhZC1ub3RjaC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNThlNjE0
NmJkMDFkY2U2OWIwYzFkMDg4NjIwZjM2Y2M2NmU1ODliLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1ub3Rj
aC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci0K
LTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0icmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMi
Pjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LmpzIj48L3Njcmlw
dD4KLTxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYmlxdWFkLXRlc3RpbmcuanMiPjwvc2NyaXB0Pgot
PC9oZWFkPgotCi08Ym9keT4KLQotPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgotPGRpdiBp
ZD0iY29uc29sZSI+PC9kaXY+Ci0KLTxzY3JpcHQ+Ci1kZXNjcmlwdGlvbigiVGVzdHMgQmlxdWFk
IG5vdGNoIGZpbHRlci4iKTsKLQotZnVuY3Rpb24gcnVuVGVzdCgpIHsKLSAgICB3aW5kb3cuanNU
ZXN0SXNBc3luYyA9IHRydWU7Ci0gICAgICAgIAotICAgIC8vIENyZWF0ZSBvZmZsaW5lIGF1ZGlv
IGNvbnRleHQuCi0gICAgdmFyIGNvbnRleHQgPSBuZXcgd2Via2l0T2ZmbGluZUF1ZGlvQ29udGV4
dCgyLCBzYW1wbGVSYXRlICogcmVuZGVyTGVuZ3RoU2Vjb25kcywgc2FtcGxlUmF0ZSk7Ci0KLSAg
ICAvLyBEdW1teSBmaWx0ZXIgdG8gZ2V0IGZpbHRlciB0eXBlIGNvbnN0YW50Ci0gICAgdmFyIGYg
PSBjb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpOwotCi0gICAgdmFyIGZpbHRlclBhcmFtZXRl
cnMgPSBbe2N1dG9mZiA6IDAsICAgIHEgOiAxMCwgZ2FpbiA6IDEgfSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7Y3V0b2ZmIDogMSwgICAgcSA6IDEwLCBnYWluIDogMSB9LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHtjdXRvZmYgOiAuNSwgICBxIDogIDAsIGdhaW4gOiAxIH0s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAge2N1dG9mZiA6IDAuMjUsIHEgOiAxMCwgZ2Fp
biA6IDEgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIF07Ci0KLSAgICBjcmVhdGVUZXN0
QW5kUnVuKGNvbnRleHQsICJub3RjaCIsIGZpbHRlclBhcmFtZXRlcnMpOwotfQotCi1ydW5UZXN0
KCk7Ci0KLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViYXVkaW8vYmlxdWFkLXBlYWtpbmctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2Vi
YXVkaW8vYmlxdWFkLXBlYWtpbmctZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA0ZTgzNjI3MWZkOGI5ZjEwNjZhMGY1YWJmMGVkOTM5Mzc0NzgyZDY1Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmF1
ZGlvL2JpcXVhZC1wZWFraW5nLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDExICsw
LDAgQEAKLVRlc3RzIEJpcXVhZCBwZWFraW5nIGZpbHRlci4KLQotT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgotCi1QQVNTIFJlbmRlcmVkIG91dHB1dCBkaWQgbm90IGhhdmUgaW5maW5pdGllcyBv
ciBOYU5zLgotUEFTUyBQZWFraW5nIGZpbHRlciByZXNwb25zZSBpcyBjb3JyZWN0LgotUEFTUyBU
ZXN0IHNpZ25hbCB3YXMgY29ycmVjdGx5IGZpbHRlcmVkLgotUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQotCi1URVNUIENPTVBMRVRFCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dl
YmF1ZGlvL2JpcXVhZC1wZWFraW5nLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQt
cGVha2luZy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWYwMDM1MDY4NDhm
YTdkYTZhZjBjOTRlOTg4ZGQ4NDAyOGMxMjMyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1wZWFraW5nLmh0
bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLQotPGh0
bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcyI+PC9z
Y3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QuanMiPjwvc2NyaXB0Pgot
PHNjcmlwdCBzcmM9InJlc291cmNlcy9iaXF1YWQtdGVzdGluZy5qcyI+PC9zY3JpcHQ+Ci08L2hl
YWQ+Ci0KLTxib2R5PgotCi08ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Ci08ZGl2IGlkPSJj
b25zb2xlIj48L2Rpdj4KLQotPHNjcmlwdD4KLWRlc2NyaXB0aW9uKCJUZXN0cyBCaXF1YWQgcGVh
a2luZyBmaWx0ZXIuIik7Ci0KLWZ1bmN0aW9uIHJ1blRlc3QoKSB7Ci0gICAgd2luZG93LmpzVGVz
dElzQXN5bmMgPSB0cnVlOwotICAgICAgICAKLSAgICAvLyBDcmVhdGUgb2ZmbGluZSBhdWRpbyBj
b250ZXh0LgotICAgIHZhciBjb250ZXh0ID0gbmV3IHdlYmtpdE9mZmxpbmVBdWRpb0NvbnRleHQo
Miwgc2FtcGxlUmF0ZSAqIHJlbmRlckxlbmd0aFNlY29uZHMsIHNhbXBsZVJhdGUpOwotCi0gICAg
Ly8gRHVtbXkgZmlsdGVyIHRvIGdldCBmaWx0ZXIgdHlwZSBjb25zdGFudAotICAgIHZhciBmID0g
Y29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTsKLQotICAgIC8vIFRoZSBmaWx0ZXJzIHdlIHdh
bnQgdG8gdGVzdC4KLSAgICB2YXIgZmlsdGVyUGFyYW1ldGVycyA9IFt7Y3V0b2ZmIDogMCwgICAg
cSA6IDEwLCBnYWluIDogMTAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3V0b2Zm
IDogMSwgICAgcSA6IDEwLCBnYWluIDogMTAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7Y3V0b2ZmIDogLjUsICAgcSA6ICAwLCBnYWluIDogMTAgfSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7Y3V0b2ZmIDogMC4yNSwgcSA6IDEwLCBnYWluIDogMTAgfSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF07Ci0KLSAgICBjcmVhdGVUZXN0QW5kUnVuKGNvbnRleHQsICJw
ZWFraW5nIiwgZmlsdGVyUGFyYW1ldGVycyk7Ci19Ci0KLXJ1blRlc3QoKTsKLQotPC9zY3JpcHQ+
Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1
YWRmaWx0ZXJub2RlLWJhc2ljLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2Jp
cXVhZGZpbHRlcm5vZGUtYmFzaWMtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA0OWRlZDdiNTE4MDMwODA3ZjRkOTk0NjhiYjRiOWZjOGUwYzhiMTIyLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmF1
ZGlvL2JpcXVhZGZpbHRlcm5vZGUtYmFzaWMtZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAg
LTEsMjQgKzAsMCBAQAotQmFzaWMgdGVzdHMgZm9yIEJpcXVhZEZpbHRlck5vZGUuCi0KLU9uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFIi4KLQotUEFTUyBCaXF1YWRGaWx0ZXJOb2RlIGhhcyBvbmUgaW5w
dXQuCi1QQVNTIEJpcXVhZEZpbHRlck5vZGUgaGFzIG9uZSBvdXRwdXQuCi1QQVNTIEJpcXVhZCBm
aWx0ZXIgZGVmYXVsdHMgdG8gbG93LXBhc3MgZmlsdGVyLgotUEFTUyBUaGUgZGVmYXVsdCB2YWx1
ZSBvZiBmcmVxdWVuY3kgaXMgMzUwLgotUEFTUyBUaGUgZGVmYXVsdCB2YWx1ZSBvZiBRIGlzIDEu
Ci1QQVNTIFRoZSBkZWZhdWx0IHZhbHVlIG9mIGdhaW4gaXMgMC4KLVBBU1MgQmlxdWFkIGZpbHRl
ciB0eXBlICdsb3dwYXNzJyBpcyBzZXR0YWJsZS4KLVBBU1MgQmlxdWFkIGZpbHRlciB0eXBlICdo
aWdocGFzcycgaXMgc2V0dGFibGUuCi1QQVNTIEJpcXVhZCBmaWx0ZXIgdHlwZSAnYmFuZHBhc3Mn
IGlzIHNldHRhYmxlLgotUEFTUyBCaXF1YWQgZmlsdGVyIHR5cGUgJ2xvd3NoZWxmJyBpcyBzZXR0
YWJsZS4KLVBBU1MgQmlxdWFkIGZpbHRlciB0eXBlICdoaWdoc2hlbGYnIGlzIHNldHRhYmxlLgot
UEFTUyBCaXF1YWQgZmlsdGVyIHR5cGUgJ3BlYWtpbmcnIGlzIHNldHRhYmxlLgotUEFTUyBCaXF1
YWQgZmlsdGVyIHR5cGUgJ25vdGNoJyBpcyBzZXR0YWJsZS4KLVBBU1MgQmlxdWFkIGZpbHRlciB0
eXBlICdhbGxwYXNzJyBpcyBzZXR0YWJsZS4KLVBBU1MgU2V0dGluZyAudHlwZSB0byBpbGxlZ2Fs
IHN0cmluZyB2YWx1ZSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbi4KLVBBU1MgU2V0dGluZyAu
dHlwZSB0byBpbGxlZ2FsIHR5cGUgZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRpb24uCi1QQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCi0KLVRFU1QgQ09NUExFVEUKLQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkZmlsdGVybm9kZS1iYXNpYy5odG1sIGIvTGF5b3V0
VGVzdHMvd2ViYXVkaW8vYmlxdWFkZmlsdGVybm9kZS1iYXNpYy5odG1sCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBhNWUzNmMzYmIyNGRiZjQzMjIyZWZhNjkxMDc4MDA2YmIyY2MwYWE2
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRl
c3RzL3dlYmF1ZGlvL2JpcXVhZGZpbHRlcm5vZGUtYmFzaWMuaHRtbAorKysgL2Rldi9udWxsCkBA
IC0xLDg2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQg
c3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0icmVz
b3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotCi08Ym9keT4KLTxk
aXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KLTxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgotCi08
c2NyaXB0PgotZGVzY3JpcHRpb24oIkJhc2ljIHRlc3RzIGZvciBCaXF1YWRGaWx0ZXJOb2RlLiIp
OwotCi12YXIgY29udGV4dCA9IDA7Ci0KLWZ1bmN0aW9uIHJ1blRlc3QoKSB7Ci0gICAgY29udGV4
dCA9IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQoKTsKLSAgICB2YXIgZmlsdGVyID0gY29udGV4dC5j
cmVhdGVCaXF1YWRGaWx0ZXIoKTsKLSAgIAotICAgIGlmIChmaWx0ZXIubnVtYmVyT2ZJbnB1dHMg
PT09IDEpIAotICAgICAgICB0ZXN0UGFzc2VkKCJCaXF1YWRGaWx0ZXJOb2RlIGhhcyBvbmUgaW5w
dXQuIik7Ci0gICAgZWxzZQotICAgICAgICB0ZXN0RmFpbGVkKCJCaXF1YWRGaWx0ZXJOb2RlIHNo
b3VsZCBoYXZlIG9uZSBpbnB1dC4iKTsKLSAgICAKLSAgICBpZiAoZmlsdGVyLm51bWJlck9mT3V0
cHV0cyA9PT0gMSkgCi0gICAgICAgIHRlc3RQYXNzZWQoIkJpcXVhZEZpbHRlck5vZGUgaGFzIG9u
ZSBvdXRwdXQuIik7Ci0gICAgZWxzZQotICAgICAgICB0ZXN0RmFpbGVkKCJCaXF1YWRGaWx0ZXJO
b2RlIHNob3VsZCBoYXZlIG9uZSBvdXRwdXQuIik7Ci0gICAgCi0gICAgaWYgKGZpbHRlci50eXBl
ID09PSAibG93cGFzcyIpCi0gICAgICAgIHRlc3RQYXNzZWQoIkJpcXVhZCBmaWx0ZXIgZGVmYXVs
dHMgdG8gbG93LXBhc3MgZmlsdGVyLiIpOwotICAgIGVsc2UKLSAgICAgICAgdGVzdEZhaWxlZCgi
QmlxdWFkIGZpbHRlciBzaG91bGQgZGVmYXVsdCB0byBsb3ctcGFzcyBmaWx0ZXIuIik7Ci0gICAg
Ci0gICAgaWYgKGZpbHRlci5mcmVxdWVuY3kudmFsdWUgPT09IDM1MCkKLSAgICAgICAgdGVzdFBh
c3NlZCgiVGhlIGRlZmF1bHQgdmFsdWUgb2YgZnJlcXVlbmN5IGlzIDM1MC4iKTsKLSAgICBlbHNl
Ci0gICAgICAgIHRlc3RGYWlsZWQoIlRoZSBkZWZhdWx0IHZhbHVlIG9mIGZyZXF1ZW5jeSBzaG91
bGQgYmUgMzUwLiIpOwotICAgIAotICAgIGlmIChmaWx0ZXIuUS52YWx1ZSA9PT0gMSkKLSAgICAg
ICAgdGVzdFBhc3NlZCgiVGhlIGRlZmF1bHQgdmFsdWUgb2YgUSBpcyAxLiIpOwotICAgIGVsc2UK
LSAgICAgICAgdGVzdEZhaWxlZCgiVGhlIGRlZmF1bHQgdmFsdWUgb2YgUSBzaG91bGQgYmUgMS4i
KTsKLSAgICAKLSAgICBpZiAoZmlsdGVyLmdhaW4udmFsdWUgPT09IDApCi0gICAgICAgIHRlc3RQ
YXNzZWQoIlRoZSBkZWZhdWx0IHZhbHVlIG9mIGdhaW4gaXMgMC4iKTsKLSAgICBlbHNlCi0gICAg
ICAgIHRlc3RGYWlsZWQoIlRoZSBkZWZhdWx0IHZhbHVlIG9mIGdhaW4gc2hvdWxkIGJlIDAuIik7
Ci0KLSAgICAvLyBDaGVjayB0aGF0IGFsbCBsZWdhbCBmaWx0ZXIgdHlwZXMgY2FuIGJlIHNldC4K
LSAgICB2YXIgZmlsdGVyVHlwZUFycmF5ID0gW3t0eXBlOiAibG93cGFzcyJ9LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAge3R5cGU6ICJoaWdocGFzcyJ9LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAge3R5cGU6ICJiYW5kcGFzcyJ9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
e3R5cGU6ICJsb3dzaGVsZiJ9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6ICJo
aWdoc2hlbGYifSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0eXBlOiAicGVha2luZyJ9
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6ICJub3RjaCJ9LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAge3R5cGU6ICJhbGxwYXNzIn1dOwotCi0gICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBmaWx0ZXJUeXBlQXJyYXkubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdHJ5IHsKLSAg
ICAgICAgICAgIGZpbHRlci50eXBlID0gZmlsdGVyVHlwZUFycmF5W2ldLnR5cGU7Ci0gICAgICAg
ICAgICBpZiAoZmlsdGVyLnR5cGUgPT09IGZpbHRlclR5cGVBcnJheVtpXS50eXBlKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSAiQmlxdWFkIGZpbHRlciB0eXBlICciICsgZmlsdGVy
VHlwZUFycmF5W2ldLnR5cGUgKyAiJyBpcyBzZXR0YWJsZS4iOwotICAgICAgICAgICAgICAgIHRl
c3RQYXNzZWQobWVzc2FnZSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IHZhciBtZXNzYWdlID0gIkJpcXVhZCBmaWx0ZXIgdHlwZSAnIiArIGZpbHRlclR5cGVBcnJheVtp
XS50eXBlICsgIicgd2FzIG5vdCBjb3JyZWN0bHkgc2V0LiI7Ci0gICAgICAgICAgICAgICAgdGVz
dEZhaWxlZChtZXNzYWdlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBjYXRjaChlKSB7Ci0g
ICAgICAgICAgICB2YXIgbWVzc2FnZSA9ICJCaXF1YWQgZmlsdGVyIHR5cGUgIiArIGkgKyAiIHNo
b3VsZCBub3QgdGhyb3cgZXhjZXB0aW9uLiI7Ci0gICAgICAgICAgICB0ZXN0RmFpbGVkKG1lc3Nh
Z2UpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgdGhhdCB3ZSBkb24ndCB0aHJv
dyBhbiBleGNlcHRpb24gZm9yIGlsbGVnYWwgLnR5cGUgdmFsdWVzIGFzIHBlciBXZWJJREwuCi0g
ICAgc2hvdWxkTm90VGhyb3dFeGNlcHRpb24oZnVuY3Rpb24oKSB7IGZpbHRlci50eXBlID0gInh5
ejEyMzQ5amZrc2QiOyB9LCAiU2V0dGluZyAudHlwZSB0byBpbGxlZ2FsIHN0cmluZyB2YWx1ZSIp
OwotICAgIHNob3VsZE5vdFRocm93RXhjZXB0aW9uKGZ1bmN0aW9uKCkgeyBmaWx0ZXIudHlwZSA9
IG5ldyBGbG9hdDMyQXJyYXkoMSk7IH0sICJTZXR0aW5nIC50eXBlIHRvIGlsbGVnYWwgdHlwZSIp
OwotfQotCi1ydW5UZXN0KCk7Ci0KLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2JpcXVhZC10ZXN0aW5nLmpzIGIv
TGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2JpcXVhZC10ZXN0aW5nLmpzCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTRlYzFlNDVhNDE3NjQyOWVmNWVhMWM3ZjQzZThiNDY2
YzJkMTE3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xh
eW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9iaXF1YWQtdGVzdGluZy5qcworKysgL2Rldi9u
dWxsCkBAIC0xLDU0NCArMCwwIEBACi0vLyBHbG9iYWxzLCB0byBtYWtlIHRlc3RpbmcgYW5kIGRl
YnVnZ2luZyBlYXNpZXIuCi12YXIgY29udGV4dDsKLXZhciBmaWx0ZXI7Ci12YXIgc2lnbmFsOwot
dmFyIHJlbmRlcmVkQnVmZmVyOwotdmFyIHJlbmRlcmVkRGF0YTsKLQotdmFyIHNhbXBsZVJhdGUg
PSA0NDEwMC4wOwotdmFyIHB1bHNlTGVuZ3RoRnJhbWVzID0gLjEgKiBzYW1wbGVSYXRlOwotCi0v
LyBNYXhpbXVtIGFsbG93ZWQgZXJyb3IgZm9yIHRoZSB0ZXN0IHRvIHN1Y2NlZWQuICBFeHBlcmlt
ZW50YWxseSBkZXRlcm1pbmVkLiAKLXZhciBtYXhBbGxvd2VkRXJyb3IgPSA1LjllLTg7Ci0KLS8v
IFRoaXMgbXVzdCBiZSBsYXJnZSBlbm91Z2ggc28gdGhhdCB0aGUgZmlsdGVyZWQgcmVzdWx0IGlz
Ci0vLyBlc3NlbnRpYWxseSB6ZXJvLiAgU2VlIGNvbW1lbnRzIGZvciBjcmVhdGVUZXN0QW5kUnVu
LgotdmFyIHRpbWVTdGVwID0gLjE7Ci0KLS8vIE1heGltdW0gbnVtYmVyIG9mIGZpbHRlcnMgd2Ug
Y2FuIHByb2Nlc3MgKG1vc3RseSBmb3Igc2V0dGluZyB0aGUKLS8vIHJlbmRlciBsZW5ndGggY29y
cmVjdGx5LikKLXZhciBtYXhGaWx0ZXJzID0gNTsKLQotLy8gSG93IGxvbmcgdG8gcmVuZGVyLiAg
TXVzdCBiZSBsb25nIGVub3VnaCBmb3IgYWxsIG9mIHRoZSBmaWx0ZXJzIHdlCi0vLyB3YW50IHRv
IHRlc3QuCi12YXIgcmVuZGVyTGVuZ3RoU2Vjb25kcyA9IHRpbWVTdGVwICogKG1heEZpbHRlcnMg
KyAxKSA7Ci0KLXZhciByZW5kZXJMZW5ndGhTYW1wbGVzID0gTWF0aC5yb3VuZChyZW5kZXJMZW5n
dGhTZWNvbmRzICogc2FtcGxlUmF0ZSk7Ci0KLS8vIE51bWJlciBvZiBmaWx0ZXJzIHRoYXQgd2ls
bCBiZSBwcm9jZXNzZWQuCi12YXIgbkZpbHRlcnM7Ci0KLS8vIEEgYmlxdWFkIGZpbHRlciBoYXMg
YSB6LXRyYW5zZm9ybSBvZgotLy8gSCh6KSA9IChiMCArIGIxIC8geiArIGIyIC8gel4yKSAvICgx
ICsgYTEgLyB6ICsgYTIgLyB6XjIpCi0vLwotLy8gVGhlIGZvcm11bGFzIGZvciB0aGUgdmFyaW91
cyBmaWx0ZXJzIHdlcmUgdGFrZW4gZnJvbQotLy8gaHR0cDovL3d3dy5tdXNpY2RzcC5vcmcvZmls
ZXMvQXVkaW8tRVEtQ29va2Jvb2sudHh0LgotCi0KLS8vIExvd3Bhc3MgZmlsdGVyLgotZnVuY3Rp
b24gY3JlYXRlTG93cGFzc0ZpbHRlcihmcmVxLCBxLCBnYWluKSB7Ci0gICAgdmFyIGIwOwotICAg
IHZhciBiMTsKLSAgICB2YXIgYjI7Ci0gICAgdmFyIGExOwotICAgIHZhciBhMjsKLQotICAgIGlm
IChmcmVxID09IDEpIHsKLSAgICAgICAgLy8gVGhlIGZvcm11bGEgYmVsb3cgd29ya3MsIGV4Y2Vw
dCBmb3Igcm91bmRvZmYuICBXaGVuIGZyZXEgPSAxLAotICAgICAgICAvLyB0aGUgZmlsdGVyIGlz
IGp1c3QgYSB3aXJlLCBzbyBoYXJkd2lyZSB0aGUgY29lZmZpY2llbnRzLgotICAgICAgICByZXR1
cm4ge2IwOiAxLCBiMTogMCwgYjI6IDAsIGExOiAwLCBhMjogMH07Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgdmFyIHJlc29uYW5jZSA9IE1hdGgucG93KDEwLCBxIC8gMjApOwotICAgICAgICB2YXIg
dGhldGEgPSBNYXRoLlBJICogZnJlcTsKLSAgICAgICAgdmFyIGFscGhhID0gTWF0aC5zaW4odGhl
dGEpIC8gKDIgKiByZXNvbmFuY2UpOwotICAgICAgICB2YXIgY29zdyA9IE1hdGguY29zKHRoZXRh
KTsKLSAgICAgICAgdmFyIGJldGEgPSAoMSAtIGNvc3cpIC8gMjsKLQotICAgICAgICBiMCA9IGJl
dGE7Ci0gICAgICAgIGIxID0gMiAqIGJldGE7Ci0gICAgICAgIGIyID0gYmV0YTsKLQotICAgICAg
ICBhMCA9IDEgKyBhbHBoYTsKLSAgICAgICAgYTEgPSAtMiAqIGNvc3c7Ci0gICAgICAgIGEyID0g
MSAtIGFscGhhOwotCi0gICAgICAgIHJldHVybiBub3JtYWxpemVGaWx0ZXJDb2VmZmljaWVudHMo
YjAsIGIxLCBiMiwgYTAsIGExLCBhMik7Ci0gICAgfQotfQotCi1mdW5jdGlvbiBjcmVhdGVIaWdo
cGFzc0ZpbHRlcihmcmVxLCBxLCBnYWluKSB7Ci0gICAgdmFyIGIwOwotICAgIHZhciBiMTsKLSAg
ICB2YXIgYjI7Ci0gICAgdmFyIGExOwotICAgIHZhciBhMjsKLQotICAgIGlmIChmcmVxID09IDEp
IHsKLSAgICAgICAgLy8gVGhlIGZpbHRlciBpcyAwCi0gICAgICAgIGIwID0gMDsKLSAgICAgICAg
YjEgPSAwOwotICAgICAgICBiMiA9IDA7Ci0gICAgICAgIGExID0gMDsKLSAgICAgICAgYTIgPSAw
OwotICAgIH0gZWxzZSBpZiAoZnJlcSA9PSAwKSB7Ci0gICAgICAgIC8vIFRoZSBmaWx0ZXIgaXMg
MS4gIENvbXB1dGF0aW9uIG9mIGNvZWZmaWNpZW50cyBiZWxvdyBpcyBvaywgYnV0Ci0gICAgICAg
IC8vIHRoZXJlJ3MgYSBwb2xlIGF0IDEgYW5kIGEgemVybyBhdCAxLCBzbyByb3VuZC1vZmYgY291
bGQgbWFrZQotICAgICAgICAvLyB0aGUgZmlsdGVyIHVuc3RhYmxlLgotICAgICAgICBiMCA9IDE7
Ci0gICAgICAgIGIxID0gMDsKLSAgICAgICAgYjIgPSAwOwotICAgICAgICBhMSA9IDA7Ci0gICAg
ICAgIGEyID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgICB2YXIgZyA9IE1hdGgucG93KDEwLCBx
IC8gMjApOwotICAgICAgICB2YXIgZCA9IE1hdGguc3FydCgoNCAtIE1hdGguc3FydCgxNiAtIDE2
IC8gKGcgKiBnKSkpIC8gMik7Ci0gICAgICAgIHZhciB0aGV0YSA9IE1hdGguUEkgKiBmcmVxOwot
ICAgICAgICB2YXIgc24gPSBkICogTWF0aC5zaW4odGhldGEpIC8gMjsKLSAgICAgICAgdmFyIGJl
dGEgPSAwLjUgKiAoMSAtIHNuKSAvICgxICsgc24pOwotICAgICAgICB2YXIgZ2FtbWEgPSAoMC41
ICsgYmV0YSkgKiBNYXRoLmNvcyh0aGV0YSk7Ci0gICAgICAgIHZhciBhbHBoYSA9IDAuMjUgKiAo
MC41ICsgYmV0YSArIGdhbW1hKTsKLQotICAgICAgICBiMCA9IDIgKiBhbHBoYTsKLSAgICAgICAg
YjEgPSAtNCAqIGFscGhhOwotICAgICAgICBiMiA9IDIgKiBhbHBoYTsKLSAgICAgICAgYTEgPSAy
ICogKC1nYW1tYSk7Ci0gICAgICAgIGEyID0gMiAqIGJldGE7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHtiMCA6IGIwLCBiMSA6IGIxLCBiMiA6IGIyLCBhMSA6IGExLCBhMiA6IGEyfTsKLX0KLQotZnVu
Y3Rpb24gbm9ybWFsaXplRmlsdGVyQ29lZmZpY2llbnRzKGIwLCBiMSwgYjIsIGEwLCBhMSwgYTIp
IHsKLSAgICB2YXIgc2NhbGUgPSAxIC8gYTA7Ci0KLSAgICByZXR1cm4ge2IwIDogYjAgKiBzY2Fs
ZSwKLSAgICAgICAgICAgIGIxIDogYjEgKiBzY2FsZSwKLSAgICAgICAgICAgIGIyIDogYjIgKiBz
Y2FsZSwKLSAgICAgICAgICAgIGExIDogYTEgKiBzY2FsZSwKLSAgICAgICAgICAgIGEyIDogYTIg
KiBzY2FsZX07Ci19Ci0KLWZ1bmN0aW9uIGNyZWF0ZUJhbmRwYXNzRmlsdGVyKGZyZXEsIHEsIGdh
aW4pIHsKLSAgICB2YXIgYjA7Ci0gICAgdmFyIGIxOwotICAgIHZhciBiMjsKLSAgICB2YXIgYTA7
Ci0gICAgdmFyIGExOwotICAgIHZhciBhMjsKLSAgICB2YXIgY29lZjsKLQotICAgIGlmIChmcmVx
ID4gMCAmJiBmcmVxIDwgMSkgewotICAgICAgICB2YXIgdzAgPSBNYXRoLlBJICogZnJlcTsKLSAg
ICAgICAgaWYgKHEgPiAwKSB7Ci0gICAgICAgICAgICB2YXIgYWxwaGEgPSBNYXRoLnNpbih3MCkg
LyAoMiAqIHEpOwotICAgICAgICAgICAgdmFyIGsgPSBNYXRoLmNvcyh3MCk7Ci0KLSAgICAgICAg
ICAgIGIwID0gYWxwaGE7Ci0gICAgICAgICAgICBiMSA9IDA7Ci0gICAgICAgICAgICBiMiA9IC1h
bHBoYTsKLSAgICAgICAgICAgIGEwID0gMSArIGFscGhhOwotICAgICAgICAgICAgYTEgPSAtMiAq
IGs7Ci0gICAgICAgICAgICBhMiA9IDEgLSBhbHBoYTsKLQotICAgICAgICAgICAgY29lZiA9IG5v
cm1hbGl6ZUZpbHRlckNvZWZmaWNpZW50cyhiMCwgYjEsIGIyLCBhMCwgYTEsIGEyKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIHEgPSAwLCBhbmQgZnJlcXVlbmN5IGlzIG5vdCAw
IG9yIDEuICBUaGUgYWJvdmUgZm9ybXVsYSBoYXMgYQotICAgICAgICAgICAgLy8gZGl2aWRlIGJ5
IHplcm8gcHJvYmxlbS4gIFRoZSBsaW1pdCBvZiB0aGUgei10cmFuc2Zvcm0gYXMgcQotICAgICAg
ICAgICAgLy8gYXBwcm9hY2hlcyAwIGlzIDEsIHNvIHNldCB0aGUgZmlsdGVyIHRoYXQgd2F5Lgot
ICAgICAgICAgICAgY29lZiA9IHtiMCA6IDEsIGIxIDogMCwgYjIgOiAwLCBhMSA6IDAsIGEyIDog
MH07Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICAvLyBXaGVuIGZyZXEgPSAwIG9y
IDEsIHRoZSB6LXRyYW5zZm9ybSBpcyBpZGVudGljYWxseSAwLAotICAgICAgICAvLyBpbmRlcGVu
ZGVudCBvZiBxLgotICAgICAgICBjb2VmID0ge2IwIDogMCwgYjEgOiAwLCBiMiA6IDAsIGExIDog
MCwgYTIgOiAwfQotICAgIH0KLSAgCi0gICAgcmV0dXJuIGNvZWY7Ci19Ci0KLWZ1bmN0aW9uIGNy
ZWF0ZUxvd1NoZWxmRmlsdGVyKGZyZXEsIHEsIGdhaW4pIHsKLSAgICAvLyBxIG5vdCB1c2VkCi0g
ICAgdmFyIGIwOwotICAgIHZhciBiMTsKLSAgICB2YXIgYjI7Ci0gICAgdmFyIGEwOwotICAgIHZh
ciBhMTsKLSAgICB2YXIgYTI7Ci0gICAgdmFyIGNvZWY7Ci0gIAotICAgIHZhciBTID0gMTsKLSAg
ICB2YXIgQSA9IE1hdGgucG93KDEwLCBnYWluIC8gNDApOwotCi0gICAgaWYgKGZyZXEgPT0gMSkg
ewotICAgICAgICAvLyBUaGUgZmlsdGVyIGlzIGp1c3QgYSBjb25zdGFudCBnYWluCi0gICAgICAg
IGNvZWYgPSB7YjAgOiBBICogQSwgYjEgOiAwLCBiMiA6IDAsIGExIDogMCwgYTIgOiAwfTsgIAot
ICAgIH0gZWxzZSBpZiAoZnJlcSA9PSAwKSB7Ci0gICAgICAgIC8vIFRoZSBmaWx0ZXIgaXMgMQot
ICAgICAgICBjb2VmID0ge2IwIDogMSwgYjEgOiAwLCBiMiA6IDAsIGExIDogMCwgYTIgOiAwfTsg
IAotICAgIH0gZWxzZSB7Ci0gICAgICAgIHZhciB3MCA9IE1hdGguUEkgKiBmcmVxOwotICAgICAg
ICB2YXIgYWxwaGEgPSAxIC8gMiAqIE1hdGguc2luKHcwKSAqIE1hdGguc3FydCgoQSArIDEgLyBB
KSAqICgxIC8gUyAtIDEpICsgMik7Ci0gICAgICAgIHZhciBrID0gTWF0aC5jb3ModzApOwotICAg
ICAgICB2YXIgazIgPSAyICogTWF0aC5zcXJ0KEEpICogYWxwaGE7Ci0gICAgICAgIHZhciBBcDEg
PSBBICsgMTsKLSAgICAgICAgdmFyIEFtMSA9IEEgLSAxOwotCi0gICAgICAgIGIwID0gQSAqIChB
cDEgLSBBbTEgKiBrICsgazIpOwotICAgICAgICBiMSA9IDIgKiBBICogKEFtMSAtIEFwMSAqIGsp
OwotICAgICAgICBiMiA9IEEgKiAoQXAxIC0gQW0xICogayAtIGsyKTsKLSAgICAgICAgYTAgPSBB
cDEgKyBBbTEgKiBrICsgazI7Ci0gICAgICAgIGExID0gLTIgKiAoQW0xICsgQXAxICogayk7Ci0g
ICAgICAgIGEyID0gQXAxICsgQW0xICogayAtIGsyOwotICAgICAgICBjb2VmID0gbm9ybWFsaXpl
RmlsdGVyQ29lZmZpY2llbnRzKGIwLCBiMSwgYjIsIGEwLCBhMSwgYTIpOwotICAgIH0KLQotICAg
IHJldHVybiBjb2VmOwotfQotCi1mdW5jdGlvbiBjcmVhdGVIaWdoU2hlbGZGaWx0ZXIoZnJlcSwg
cSwgZ2FpbikgewotICAgIC8vIHEgbm90IHVzZWQKLSAgICB2YXIgYjA7Ci0gICAgdmFyIGIxOwot
ICAgIHZhciBiMjsKLSAgICB2YXIgYTA7Ci0gICAgdmFyIGExOwotICAgIHZhciBhMjsKLSAgICB2
YXIgY29lZjsKLQotICAgIHZhciBBID0gTWF0aC5wb3coMTAsIGdhaW4gLyA0MCk7Ci0KLSAgICBp
ZiAoZnJlcSA9PSAxKSB7Ci0gICAgICAgIC8vIFdoZW4gZnJlcSA9IDEsIHRoZSB6LXRyYW5zZm9y
bSBpcyAxCi0gICAgICAgIGNvZWYgPSB7YjAgOiAxLCBiMSA6IDAsIGIyIDogMCwgYTEgOiAwLCBh
MiA6IDB9OwotICAgIH0gZWxzZSBpZiAoZnJlcSA+IDApIHsKLSAgICAgICAgdmFyIHcwID0gTWF0
aC5QSSAqIGZyZXE7Ci0gICAgICAgIHZhciBTID0gMTsKLSAgICAgICAgdmFyIGFscGhhID0gMC41
ICogTWF0aC5zaW4odzApICogTWF0aC5zcXJ0KChBICsgMSAvIEEpICogKDEgLyBTIC0gMSkgKyAy
KTsKLSAgICAgICAgdmFyIGsgPSBNYXRoLmNvcyh3MCk7Ci0gICAgICAgIHZhciBrMiA9IDIgKiBN
YXRoLnNxcnQoQSkgKiBhbHBoYTsKLSAgICAgICAgdmFyIEFwMSA9IEEgKyAxOwotICAgICAgICB2
YXIgQW0xID0gQSAtIDE7Ci0KLSAgICAgICAgYjAgPSBBICogKEFwMSArIEFtMSAqIGsgKyBrMik7
Ci0gICAgICAgIGIxID0gLTIgKiBBICogKEFtMSArIEFwMSAqIGspOwotICAgICAgICBiMiA9IEEg
KiAoQXAxICsgQW0xICogayAtIGsyKTsKLSAgICAgICAgYTAgPSBBcDEgLSBBbTEgKiBrICsgazI7
Ci0gICAgICAgIGExID0gMiAqIChBbTEgLSBBcDEqayk7Ci0gICAgICAgIGEyID0gQXAxIC0gQW0x
ICogay1rMjsKLQotICAgICAgICBjb2VmID0gbm9ybWFsaXplRmlsdGVyQ29lZmZpY2llbnRzKGIw
LCBiMSwgYjIsIGEwLCBhMSwgYTIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFdoZW4gZnJl
cSA9IDAsIHRoZSBmaWx0ZXIgaXMganVzdCBhIGdhaW4KLSAgICAgICAgY29lZiA9IHtiMCA6IEEg
KiBBLCBiMSA6IDAsIGIyIDogMCwgYTEgOiAwLCBhMiA6IDB9OwotICAgIH0KLQotICAgIHJldHVy
biBjb2VmOwotfQotCi1mdW5jdGlvbiBjcmVhdGVQZWFraW5nRmlsdGVyKGZyZXEsIHEsIGdhaW4p
IHsKLSAgICB2YXIgYjA7Ci0gICAgdmFyIGIxOwotICAgIHZhciBiMjsKLSAgICB2YXIgYTA7Ci0g
ICAgdmFyIGExOwotICAgIHZhciBhMjsKLSAgICB2YXIgY29lZjsKLQotICAgIHZhciBBID0gTWF0
aC5wb3coMTAsIGdhaW4gLyA0MCk7Ci0KLSAgICBpZiAoZnJlcSA+IDAgJiYgZnJlcSA8IDEpIHsK
LSAgICAgICAgaWYgKHEgPiAwKSB7Ci0gICAgICAgICAgICB2YXIgdzAgPSBNYXRoLlBJICogZnJl
cTsKLSAgICAgICAgICAgIHZhciBhbHBoYSA9IE1hdGguc2luKHcwKSAvICgyICogcSk7Ci0gICAg
ICAgICAgICB2YXIgayA9IE1hdGguY29zKHcwKTsKLQotICAgICAgICAgICAgYjAgPSAxICsgYWxw
aGEgKiBBOwotICAgICAgICAgICAgYjEgPSAtMiAqIGs7Ci0gICAgICAgICAgICBiMiA9IDEgLSBh
bHBoYSAqIEE7Ci0gICAgICAgICAgICBhMCA9IDEgKyBhbHBoYSAvIEE7Ci0gICAgICAgICAgICBh
MSA9IC0yICogazsKLSAgICAgICAgICAgIGEyID0gMSAtIGFscGhhIC8gQTsKLSAgCi0gICAgICAg
ICAgICBjb2VmID0gbm9ybWFsaXplRmlsdGVyQ29lZmZpY2llbnRzKGIwLCBiMSwgYjIsIGEwLCBh
MSwgYTIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gcSA9IDAsIHdlIGhhdmUg
YSBkaXZpZGUgYnkgemVybyBwcm9ibGVtIGluIHRoZSBmb3JtdWxhcwotICAgICAgICAgICAgLy8g
YWJvdmUuICBCdXQgaWYgd2UgbG9vayBhdCB0aGUgei10cmFuc2Zvcm0sIHdlIHNlZSB0aGF0IHRo
ZQotICAgICAgICAgICAgLy8gbGltaXQgYXMgcSBhcHByb2FjaGVzIDAgaXMgQV4yLgotICAgICAg
ICAgICAgY29lZiA9IHtiMCA6IEEgKiBBLCBiMSA6IDAsIGIyIDogMCwgYTEgOiAwLCBhMiA6IDB9
OwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gZnJlcSA9IDAgb3IgMSwgdGhl
IHotdHJhbnNmb3JtIGlzIDEKLSAgICAgICAgY29lZiA9IHtiMCA6IDEsIGIxIDogMCwgYjIgOiAw
LCBhMSA6IDAsIGEyIDogMH07Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvZWY7Ci19Ci0KLWZ1bmN0
aW9uIGNyZWF0ZU5vdGNoRmlsdGVyKGZyZXEsIHEsIGdhaW4pIHsKLSAgICB2YXIgYjA7Ci0gICAg
dmFyIGIxOwotICAgIHZhciBiMjsKLSAgICB2YXIgYTA7Ci0gICAgdmFyIGExOwotICAgIHZhciBh
MjsKLSAgICB2YXIgY29lZjsKLQotICAgIGlmIChmcmVxID4gMCAmJiBmcmVxIDwgMSkgewotICAg
ICAgICBpZiAocSA+IDApIHsKLSAgICAgICAgICAgIHZhciB3MCA9IE1hdGguUEkgKiBmcmVxOwot
ICAgICAgICAgICAgdmFyIGFscGhhID0gTWF0aC5zaW4odzApIC8gKDIgKiBxKTsKLSAgICAgICAg
ICAgIHZhciBrID0gTWF0aC5jb3ModzApOwotCi0gICAgICAgICAgICBiMCA9IDE7Ci0gICAgICAg
ICAgICBiMSA9IC0yICogazsKLSAgICAgICAgICAgIGIyID0gMTsKLSAgICAgICAgICAgIGEwID0g
MSArIGFscGhhOwotICAgICAgICAgICAgYTEgPSAtMiAqIGs7Ci0gICAgICAgICAgICBhMiA9IDEg
LSBhbHBoYTsKLSAgICAgICAgICAgIGNvZWYgPSBub3JtYWxpemVGaWx0ZXJDb2VmZmljaWVudHMo
YjAsIGIxLCBiMiwgYTAsIGExLCBhMik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAv
LyBXaGVuIHEgPSAwLCB3ZSBnZXQgYSBkaXZpZGUgYnkgemVybyBhYm92ZS4gIFRoZSBsaW1pdCBv
ZiB0aGUKLSAgICAgICAgICAgIC8vIHotdHJhbnNmb3JtIGFzIHEgYXBwcm9hY2hlcyAwIGlzIDAs
IHNvIHNldCB0aGUgY29lZmZpY2llbnRzCi0gICAgICAgICAgICAvLyBhcHByb3ByaWF0ZWx5Lgot
ICAgICAgICAgICAgY29lZiA9IHtiMCA6IDAsIGIxIDogMCwgYjIgOiAwLCBhMSA6IDAsIGEyIDog
MH07Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICAvLyBXaGVuIGZyZXEgPSAwIG9y
IDEsIHRoZSB6LXRyYW5zZm9ybSBpcyAxCi0gICAgICAgIGNvZWYgPSB7YjAgOiAxLCBiMSA6IDAs
IGIyIDogMCwgYTEgOiAwLCBhMiA6IDB9OwotICAgIH0KLQotICAgIHJldHVybiBjb2VmOwotfQot
Ci1mdW5jdGlvbiBjcmVhdGVBbGxwYXNzRmlsdGVyKGZyZXEsIHEsIGdhaW4pIHsKLSAgICB2YXIg
YjA7Ci0gICAgdmFyIGIxOwotICAgIHZhciBiMjsKLSAgICB2YXIgYTA7Ci0gICAgdmFyIGExOwot
ICAgIHZhciBhMjsKLSAgICB2YXIgY29lZjsKLQotICAgIGlmIChmcmVxID4gMCAmJiBmcmVxIDwg
MSkgewotICAgICAgICBpZiAocSA+IDApIHsKLSAgICAgICAgICAgIHZhciB3MCA9IE1hdGguUEkg
KiBmcmVxOwotICAgICAgICAgICAgdmFyIGFscGhhID0gTWF0aC5zaW4odzApIC8gKDIgKiBxKTsK
LSAgICAgICAgICAgIHZhciBrID0gTWF0aC5jb3ModzApOwotCi0gICAgICAgICAgICBiMCA9IDEg
LSBhbHBoYTsKLSAgICAgICAgICAgIGIxID0gLTIgKiBrOwotICAgICAgICAgICAgYjIgPSAxICsg
YWxwaGE7Ci0gICAgICAgICAgICBhMCA9IDEgKyBhbHBoYTsKLSAgICAgICAgICAgIGExID0gLTIg
KiBrOwotICAgICAgICAgICAgYTIgPSAxIC0gYWxwaGE7Ci0gICAgICAgICAgICBjb2VmID0gbm9y
bWFsaXplRmlsdGVyQ29lZmZpY2llbnRzKGIwLCBiMSwgYjIsIGEwLCBhMSwgYTIpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgLy8gcSA9IDAKLSAgICAgICAgICAgIGNvZWYgPSB7YjAg
OiAtMSwgYjEgOiAwLCBiMiA6IDAsIGExIDogMCwgYTIgOiAwfTsKLSAgICAgICAgfQotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGNvZWYgPSB7YjAgOiAxLCBiMSA6IDAsIGIyIDogMCwgYTEgOiAwLCBh
MiA6IDB9OwotICAgIH0KLQotICAgIHJldHVybiBjb2VmOwotfQotCi0vLyBBcnJheSBvZiBmdW5j
dGlvbnMgdG8gY29tcHV0ZSB0aGUgZmlsdGVyIGNvZWZmaWNpZW50cy4gIFRoaXMgbXVzdAotLy8g
YmUgYXJyYW5lZCBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgZmlsdGVyIHR5cGVzIGluIHRoZSBp
ZGwgZmlsZS4KLXZhciBmaWx0ZXJDcmVhdG9yRnVuY3Rpb24gPSB7Imxvd3Bhc3MiOiBjcmVhdGVM
b3dwYXNzRmlsdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGlnaHBhc3MiOiBj
cmVhdGVIaWdocGFzc0ZpbHRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhbmRw
YXNzIjogY3JlYXRlQmFuZHBhc3NGaWx0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJsb3dzaGVsZiI6IGNyZWF0ZUxvd1NoZWxmRmlsdGVyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiaGlnaHNoZWxmIjogY3JlYXRlSGlnaFNoZWxmRmlsdGVyLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAicGVha2luZyI6IGNyZWF0ZVBlYWtpbmdGaWx0ZXIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJub3RjaCI6IGNyZWF0ZU5vdGNoRmlsdGVyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiYWxscGFzcyI6IGNyZWF0ZUFsbHBhc3NGaWx0ZXJ9Owot
Ci12YXIgZmlsdGVyVHlwZU5hbWUgPSB7Imxvd3Bhc3MiOiAiTG93cGFzcyBmaWx0ZXIiLAotICAg
ICAgICAgICAgICAgICAgICAgICJoaWdocGFzcyI6ICJIaWdocGFzcyBmaWx0ZXIiLAotICAgICAg
ICAgICAgICAgICAgICAgICJiYW5kcGFzcyI6ICJCYW5kcGFzcyBmaWx0ZXIiLAotICAgICAgICAg
ICAgICAgICAgICAgICJsb3dzaGVsZiI6ICJMb3dzaGVsZiBmaWx0ZXIiLAotICAgICAgICAgICAg
ICAgICAgICAgICJoaWdoc2hlbGYiOiAiSGlnaHNoZWxmIGZpbHRlciIsCi0gICAgICAgICAgICAg
ICAgICAgICAgInBlYWtpbmciOiAiUGVha2luZyBmaWx0ZXIiLAotICAgICAgICAgICAgICAgICAg
ICAgICJub3RjaCI6ICJOb3RjaCBmaWx0ZXIiLAotICAgICAgICAgICAgICAgICAgICAgICJhbGxw
YXNzIjogIkFsbHBhc3MgZmlsdGVyIn07Ci0KLWZ1bmN0aW9uIGNyZWF0ZUZpbHRlcihmaWx0ZXJU
eXBlLCBmcmVxLCBxLCBnYWluKSB7Ci0gICAgcmV0dXJuIGZpbHRlckNyZWF0b3JGdW5jdGlvbltm
aWx0ZXJUeXBlXShmcmVxLCBxLCBnYWluKTsKLX0KLQotZnVuY3Rpb24gZmlsdGVyRGF0YShmaWx0
ZXJDb2VmLCBzaWduYWwsIGxlbikgewotICAgIHZhciB5ID0gbmV3IEFycmF5KGxlbik7Ci0gICAg
dmFyIGIwID0gZmlsdGVyQ29lZi5iMDsKLSAgICB2YXIgYjEgPSBmaWx0ZXJDb2VmLmIxOwotICAg
IHZhciBiMiA9IGZpbHRlckNvZWYuYjI7Ci0gICAgdmFyIGExID0gZmlsdGVyQ29lZi5hMTsKLSAg
ICB2YXIgYTIgPSBmaWx0ZXJDb2VmLmEyOwotCi0gICAgLy8gUHJpbWUgdGhlIHB1bXAuIChBc3N1
bWVzIHRoZSBzaWduYWwgaGFzIGxlbmd0aCA+PSAyISkKLSAgICB5WzBdID0gYjAgKiBzaWduYWxb
MF07Ci0gICAgeVsxXSA9IGIwICogc2lnbmFsWzFdICsgYjEgKiBzaWduYWxbMF0gLSBhMSAqIHlb
MF07Ci0KLSAgICAvLyBGaWx0ZXIgYWxsIG9mIHRoZSBzaWduYWwgdGhhdCB3ZSBoYXZlLgotICAg
IGZvciAodmFyIGsgPSAyOyBrIDwgTWF0aC5taW4oc2lnbmFsLmxlbmd0aCwgbGVuKTsgKytrKSB7
Ci0gICAgICAgIHlba10gPSBiMCAqIHNpZ25hbFtrXSArIGIxICogc2lnbmFsW2stMV0gKyBiMiAq
IHNpZ25hbFtrLTJdIC0gYTEgKiB5W2stMV0gLSBhMiAqIHlbay0yXTsKLSAgICB9Ci0KLSAgICAv
LyBJZiB3ZSBuZWVkIHRvIGZpbHRlciBtb3JlLCBidXQgZG9uJ3QgaGF2ZSBhbnkgc2lnbmFsIGxl
ZnQsCi0gICAgLy8gYXNzdW1lIHRoZSBzaWduYWwgaXMgemVyby4KLSAgICBmb3IgKHZhciBrID0g
c2lnbmFsLmxlbmd0aDsgayA8IGxlbjsgKytrKSB7Ci0gICAgICAgIHlba10gPSAtIGExICogeVtr
LTFdIC0gYTIgKiB5W2stMl07Ci0gICAgfQotCi0gICAgcmV0dXJuIHk7Ci19Ci0KLWZ1bmN0aW9u
IGNyZWF0ZUltcHVsc2VCdWZmZXIoY29udGV4dCwgbGVuZ3RoKSB7Ci0gICAgdmFyIGltcHVsc2Ug
PSBjb250ZXh0LmNyZWF0ZUJ1ZmZlcigxLCBsZW5ndGgsIGNvbnRleHQuc2FtcGxlUmF0ZSk7Ci0g
ICAgdmFyIGRhdGEgPSBpbXB1bHNlLmdldENoYW5uZWxEYXRhKDApOwotICAgIGZvciAodmFyIGsg
PSAxOyBrIDwgZGF0YS5sZW5ndGg7ICsraykgewotICAgICAgICBkYXRhW2tdID0gMDsKLSAgICB9
Ci0gICAgZGF0YVswXSA9IDE7Ci0KLSAgICByZXR1cm4gaW1wdWxzZTsKLX0KLQotCi1mdW5jdGlv
biBjcmVhdGVUZXN0QW5kUnVuKGNvbnRleHQsIGZpbHRlclR5cGUsIGZpbHRlclBhcmFtZXRlcnMp
IHsKLSAgICAvLyBUbyB0ZXN0IHRoZSBmaWx0ZXJzLCB3ZSBhcHBseSBhIHNpZ25hbCAoYW4gaW1w
dWxzZSkgdG8gZWFjaCBvZgotICAgIC8vIHRoZSBzcGVjaWZpZWQgZmlsdGVycywgd2l0aCBlYWNo
IHNpZ25hbCBzdGFydGluZyBhdCBhIGRpZmZlcmVudAotICAgIC8vIHRpbWUuICBUaGUgb3V0cHV0
IG9mIHRoZSBmaWx0ZXJzIGlzIHN1bW1lZCB0b2dldGhlciBhdCB0aGUKLSAgICAvLyBvdXRwdXQu
ICBUaHVzIGZvciBmaWx0ZXIgaywgdGhlIHNpZ25hbCBpbnB1dCB0byB0aGUgZmlsdGVyCi0gICAg
Ly8gc3RhcnRzIGF0IHRpbWUgayAqIHRpbWVTdGVwLiAgRm9yIHRoaXMgdG8gd29yayB3ZWxsLCB0
aW1lU3RlcAotICAgIC8vIG11c3QgYmUgbGFyZ2UgZW5vdWdoIGZvciB0aGUgb3V0cHV0IG9mIGVh
Y2ggZmlsdGVyIHRvIGhhdmUKLSAgICAvLyBkZWNheWVkIHRvIHplcm8gd2l0aCB0aW1lU3RlcCBz
ZWNvbmRzLiAgVGhhdCB3YXkgdGhlIGZpbHRlcgotICAgIC8vIG91dHB1dHMgZG9uJ3QgaW50ZXJm
ZXJlIHdpdGggZWFjaCBvdGhlci4KLSAgICAKLSAgICBuRmlsdGVycyA9IE1hdGgubWluKGZpbHRl
clBhcmFtZXRlcnMubGVuZ3RoLCBtYXhGaWx0ZXJzKTsKLQotICAgIHNpZ25hbCA9IG5ldyBBcnJh
eShuRmlsdGVycyk7Ci0gICAgZmlsdGVyID0gbmV3IEFycmF5KG5GaWx0ZXJzKTsKLQotICAgIGlt
cHVsc2UgPSBjcmVhdGVJbXB1bHNlQnVmZmVyKGNvbnRleHQsIHB1bHNlTGVuZ3RoRnJhbWVzKTsK
LQotICAgIC8vIENyZWF0ZSBhbGwgb2YgdGhlIHNpZ25hbCBzb3VyY2VzIGFuZCBmaWx0ZXJzIHRo
YXQgd2UgbmVlZC4KLSAgICBmb3IgKHZhciBrID0gMDsgayA8IG5GaWx0ZXJzOyArK2spIHsKLSAg
ICAgICAgc2lnbmFsW2tdID0gY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTsKLSAgICAgICAg
c2lnbmFsW2tdLmJ1ZmZlciA9IGltcHVsc2U7Ci0KLSAgICAgICAgZmlsdGVyW2tdID0gY29udGV4
dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTsKLSAgICAgICAgZmlsdGVyW2tdLnR5cGUgPSBmaWx0ZXJU
eXBlOwotICAgICAgICBmaWx0ZXJba10uZnJlcXVlbmN5LnZhbHVlID0gY29udGV4dC5zYW1wbGVS
YXRlIC8gMiAqIGZpbHRlclBhcmFtZXRlcnNba10uY3V0b2ZmOwotICAgICAgICBmaWx0ZXJba10u
ZGV0dW5lLnZhbHVlID0gKGZpbHRlclBhcmFtZXRlcnNba10uZGV0dW5lID09PSB1bmRlZmluZWQp
ID8gMCA6IGZpbHRlclBhcmFtZXRlcnNba10uZGV0dW5lOwotICAgICAgICBmaWx0ZXJba10uUS52
YWx1ZSA9IGZpbHRlclBhcmFtZXRlcnNba10ucTsKLSAgICAgICAgZmlsdGVyW2tdLmdhaW4udmFs
dWUgPSBmaWx0ZXJQYXJhbWV0ZXJzW2tdLmdhaW47Ci0KLSAgICAgICAgc2lnbmFsW2tdLmNvbm5l
Y3QoZmlsdGVyW2tdKTsKLSAgICAgICAgZmlsdGVyW2tdLmNvbm5lY3QoY29udGV4dC5kZXN0aW5h
dGlvbik7Ci0KLSAgICAgICAgc2lnbmFsW2tdLnN0YXJ0KHRpbWVTdGVwICogayk7Ci0gICAgfQot
Ci0gICAgY29udGV4dC5vbmNvbXBsZXRlID0gY2hlY2tGaWx0ZXJSZXNwb25zZShmaWx0ZXJUeXBl
LCBmaWx0ZXJQYXJhbWV0ZXJzKTsKLSAgICBjb250ZXh0LnN0YXJ0UmVuZGVyaW5nKCk7Ci19Ci0K
LWZ1bmN0aW9uIGFkZFNpZ25hbChkZXN0LCBzcmMsIGRlc3RPZmZzZXQpIHsKLSAgICAvLyBBZGQg
c3JjIHRvIGRlc3QgYXQgdGhlIGdpdmVuIGRlc3Qgb2Zmc2V0LgotICAgIGZvciAodmFyIGsgPSBk
ZXN0T2Zmc2V0LCBqID0gMDsgayA8IGRlc3QubGVuZ3RoLCBqIDwgc3JjLmxlbmd0aDsgKytrLCAr
K2opIHsKLSAgICAgICAgZGVzdFtrXSArPSBzcmNbal07Ci0gICAgfQotfQotCi1mdW5jdGlvbiBn
ZW5lcmF0ZVJlZmVyZW5jZShmaWx0ZXJUeXBlLCBmaWx0ZXJQYXJhbWV0ZXJzKSB7Ci0gICAgdmFy
IHJlc3VsdCA9IG5ldyBBcnJheShyZW5kZXJMZW5ndGhTYW1wbGVzKTsKLSAgICB2YXIgZGF0YSA9
IG5ldyBBcnJheShyZW5kZXJMZW5ndGhTYW1wbGVzKTsKLSAgICAvLyBJbml0aWFsaXplIHRoZSBy
ZXN1bHQgYXJyYXkgYW5kIGRhdGEuCi0gICAgZm9yICh2YXIgayA9IDA7IGsgPCByZXN1bHQubGVu
Z3RoOyArK2spIHsKLSAgICAgICAgcmVzdWx0W2tdID0gMDsKLSAgICAgICAgZGF0YVtrXSA9IDA7
Ci0gICAgfQotICAgIC8vIE1ha2UgZGF0YSBhbiBpbXB1bHNlLgotICAgIGRhdGFbMF0gPSAxOwot
ICAgIAotICAgIGZvciAodmFyIGsgPSAwOyBrIDwgbkZpbHRlcnM7ICsraykgewotICAgICAgICAv
LyBGaWx0ZXIgYW4gaW1wdWxzZQotICAgICAgICB2YXIgZGV0dW5lID0gKGZpbHRlclBhcmFtZXRl
cnNba10uZGV0dW5lID09PSB1bmRlZmluZWQpID8gMCA6IGZpbHRlclBhcmFtZXRlcnNba10uZGV0
dW5lOwotICAgICAgICB2YXIgZnJlcXVlbmN5ID0gZmlsdGVyUGFyYW1ldGVyc1trXS5jdXRvZmYg
KiBNYXRoLnBvdygyLCBkZXR1bmUgLyAxMjAwKTsgLy8gQXBwbHkgZGV0dW5lLCBjb252ZXJ0aW5n
IGZyb20gQ2VudHMuCi0gICAgICAgIAotICAgICAgICB2YXIgZmlsdGVyQ29lZiA9IGNyZWF0ZUZp
bHRlcihmaWx0ZXJUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
cmVxdWVuY3ksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclBh
cmFtZXRlcnNba10ucSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmls
dGVyUGFyYW1ldGVyc1trXS5nYWluKTsKLSAgICAgICAgdmFyIHkgPSBmaWx0ZXJEYXRhKGZpbHRl
ckNvZWYsIGRhdGEsIHJlbmRlckxlbmd0aFNhbXBsZXMpOwotCi0gICAgICAgIC8vIEFjY3VtdWxh
dGUgdGhpcyBmaWx0ZXJlZCBkYXRhIGludG8gdGhlIGZpbmFsIG91dHB1dCBhdCB0aGUgZGVzaXJl
ZCBvZmZzZXQuCi0gICAgICAgIGFkZFNpZ25hbChyZXN1bHQsIHksIHRpbWVUb1NhbXBsZUZyYW1l
KHRpbWVTdGVwICogaywgc2FtcGxlUmF0ZSkpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLWZ1bmN0aW9uIGNoZWNrRmlsdGVyUmVzcG9uc2UoZmlsdGVyVHlwZSwgZmlsdGVyUGFy
YW1ldGVycykgewotICAgIHJldHVybiBmdW5jdGlvbihldmVudCkgewotICAgICAgICByZW5kZXJl
ZEJ1ZmZlciA9IGV2ZW50LnJlbmRlcmVkQnVmZmVyOwotICAgICAgICByZW5kZXJlZERhdGEgPSBy
ZW5kZXJlZEJ1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTsKLQotICAgICAgICByZWZlcmVuY2UgPSBn
ZW5lcmF0ZVJlZmVyZW5jZShmaWx0ZXJUeXBlLCBmaWx0ZXJQYXJhbWV0ZXJzKTsKLSAgICAgICAg
Ci0gICAgICAgIHZhciBsZW4gPSBNYXRoLm1pbihyZW5kZXJlZERhdGEubGVuZ3RoLCByZWZlcmVu
Y2UubGVuZ3RoKTsKLQotICAgICAgICB2YXIgc3VjY2VzcyA9IHRydWU7Ci0KLSAgICAgICAgLy8g
TWF4aW11bSBlcnJvciBiZXR3ZWVuIHJlbmRlcmVkIGRhdGEgYW5kIGV4cGVjdGVkIGRhdGEKLSAg
ICAgICAgdmFyIG1heEVycm9yID0gMDsKLQotICAgICAgICAvLyBTYW1wbGUgb2Zmc2V0IHdoZXJl
IHRoZSBtYXhpbXVtIGVycm9yIG9jY3VycmVkLgotICAgICAgICB2YXIgbWF4UG9zaXRpb24gPSAw
OwotCi0gICAgICAgIC8vIE51bWJlciBvZiBpbmZpbml0aWVzIG9yIE5hTnMgdGhhdCBvY2N1cnJl
ZCBpbiB0aGUgcmVuZGVyZWQgZGF0YS4KLSAgICAgICAgdmFyIGludmFsaWROdW1iZXJDb3VudCA9
IDA7Ci0KLSAgICAgICAgaWYgKG5GaWx0ZXJzICE9IGZpbHRlclBhcmFtZXRlcnMubGVuZ3RoKSB7
Ci0gICAgICAgICAgICB0ZXN0RmFpbGVkKCJUZXN0IHdhbnRlZCAiICsgZmlsdGVyUGFyYW1ldGVy
cy5sZW5ndGggKyAiIGZpbHRlcnMgYnV0IG9ubHkgIiArIG1heEZpbHRlcnMgKyAiIGFsbG93ZWQu
Iik7Ci0gICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBDb21wYXJlIHRoZSByZW5kZXJlZCBzaWduYWwgd2l0aCBvdXIgcmVmZXJlbmNlLCBrZWVwaW5n
Ci0gICAgICAgIC8vIHRyYWNrIG9mIHRoZSBtYXhpbXVtIGRpZmZlcmVuY2UgKGFuZCB0aGUgb2Zm
c2V0IG9mIHRoZSBtYXgKLSAgICAgICAgLy8gZGlmZmVyZW5jZS4pICBDaGVjayBmb3IgYmFkIG51
bWJlcnMgaW4gdGhlIHJlbmRlcmVkIG91dHB1dAotICAgICAgICAvLyB0b28uICBUaGVyZSBzaG91
bGRuJ3QgYmUgYW55LgotICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGxlbjsgKytrKSB7Ci0g
ICAgICAgICAgICB2YXIgZXJyID0gTWF0aC5hYnMocmVuZGVyZWREYXRhW2tdIC0gcmVmZXJlbmNl
W2tdKTsKLSAgICAgICAgICAgIGlmIChlcnIgPiBtYXhFcnJvcikgewotICAgICAgICAgICAgICAg
IG1heEVycm9yID0gZXJyOwotICAgICAgICAgICAgICAgIG1heFBvc2l0aW9uID0gazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGlmICghaXNWYWxpZE51bWJlcihyZW5kZXJlZERhdGFba10p
KSB7Ci0gICAgICAgICAgICAgICAgKytpbnZhbGlkTnVtYmVyQ291bnQ7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaW52YWxpZE51bWJlckNvdW50ID4gMCkgewotICAg
ICAgICAgICAgdGVzdEZhaWxlZCgiUmVuZGVyZWQgb3V0cHV0IGhhcyAiICsgaW52YWxpZE51bWJl
ckNvdW50ICsgIiBpbmZpbml0aWVzIG9yIE5hTnMuIik7Ci0gICAgICAgICAgICBzdWNjZXNzID0g
ZmFsc2U7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0ZXN0UGFzc2VkKCJSZW5kZXJl
ZCBvdXRwdXQgZGlkIG5vdCBoYXZlIGluZmluaXRpZXMgb3IgTmFOcy4iKTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgaWYgKG1heEVycm9yIDw9IG1heEFsbG93ZWRFcnJvcikgewotICAg
ICAgICAgICAgdGVzdFBhc3NlZChmaWx0ZXJUeXBlTmFtZVtmaWx0ZXJUeXBlXSArICIgcmVzcG9u
c2UgaXMgY29ycmVjdC4iKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRlc3RGYWls
ZWQoZmlsdGVyVHlwZU5hbWVbZmlsdGVyVHlwZV0gKyAiIHJlc3BvbnNlIGlzIGluY29ycmVjdC4g
IE1heCBlcnIgPSAiICsgbWF4RXJyb3IgKyAiIGF0ICIgKyBtYXhQb3NpdGlvbiArICIuICBUaHJl
c2hvbGQgPSAiICsgbWF4QWxsb3dlZEVycm9yKTsKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxz
ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKLSAgICAgICAg
ICAgIHRlc3RQYXNzZWQoIlRlc3Qgc2lnbmFsIHdhcyBjb3JyZWN0bHkgZmlsdGVyZWQuIik7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0ZXN0RmFpbGVkKCJUZXN0IHNpZ25hbCB3YXMg
bm90IGNvcnJlY3RseSBmaWx0ZXJlZC4iKTsKLSAgICAgICAgfQotICAgICAgICBmaW5pc2hKU1Rl
c3QoKTsKLSAgICB9Ci19Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>