<?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>51612</bug_id>
          
          <creation_ts>2010-12-25 14:45:45 -0800</creation_ts>
          <short_desc>Add XML parser benchmark</short_desc>
          <delta_ts>2010-12-31 12:29:08 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>51611</dependson>
          <blocked>50516</blocked>
    
    <blocked>50517</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Patrick R. Gansterer">paroga</reporter>
          <assigned_to name="Patrick R. Gansterer">paroga</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>slewis</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>326835</commentid>
    <comment_count>0</comment_count>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2010-12-25 14:45:45 -0800</bug_when>
    <thetext>see patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326836</commentid>
    <comment_count>1</comment_count>
      <attachid>77444</attachid>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2010-12-25 14:52:06 -0800</bug_when>
    <thetext>Created attachment 77444
Patch

I&apos;ll commit manually to do a svn cp from html-parser.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326909</commentid>
    <comment_count>2</comment_count>
      <attachid>77444</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-26 13:26:25 -0800</bug_when>
    <thetext>Comment on attachment 77444
Patch

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

&gt; WebCore/benchmarks/parser/xml-parser.html:69
&gt; +function computeMedian(values) {
&gt; +    values.sort(function(a, b) { return a - b; });
&gt; +    var len = values.length;
&gt; +    if (len % 2)
&gt; +        return values[(len-1)/2];
&gt; +    return (values[len/2-1] + values[len/2]) / 2;
&gt; +}
&gt; +
&gt; +function computeMin(values) {
&gt; +    var min = values.length ? values[0] : 0;
&gt; +    for (var i = 1; i &lt; values.length; i++) {
&gt; +        if (min &gt; values[i])
&gt; +            min = values[i];
&gt; +    }
&gt; +    return min;
&gt; +}
&gt; +
&gt; +function computeStdev(values) {
&gt; +    var average = computeAverage(values);
&gt; +    var sumOfSquaredDeviations = 0;
&gt; +    for (var i = 0; i &lt; values.length; ++i) {
&gt; +        var deviation = values[i] - average;
&gt; +        sumOfSquaredDeviations += deviation * deviation;
&gt; +    }
&gt; +    return Math.sqrt(sumOfSquaredDeviations / values.length);
&gt; +}

Lets share all thsi stuff in a new .js file.  No need to copy/paste here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326927</commentid>
    <comment_count>3</comment_count>
      <attachid>77463</attachid>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2010-12-26 14:36:31 -0800</bug_when>
    <thetext>Created attachment 77463
Patch

(In reply to comment #2)
&gt; Lets share all thsi stuff in a new .js file.  No need to copy/paste here.
thx for the tip</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328128</commentid>
    <comment_count>4</comment_count>
      <attachid>77463</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-12-31 01:37:53 -0800</bug_when>
    <thetext>Comment on attachment 77463
Patch

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

Thanks.  I&apos;ll land this manually before moving these files to the new PerformanceTests folder.

&gt; WebCore/benchmarks/parser/resources/runner.js:95
&gt; +function start(rC, rF) {
&gt; +    runCount = rC;
&gt; +    runFunction = rF;
&gt; +
&gt; +    log(&quot;Running &quot; + runCount + &quot; times&quot;);
&gt; +    run();
&gt; +}

rC and rF are pretty short variable names.  Generally, we prefer to use real english words rather than abbreviations.  I&apos;ll tweak this during landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328131</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-12-31 01:47:08 -0800</bug_when>
    <thetext>Your patch is also incorrectly based.  Please create patches either with svn-create-patch or with webkit-patch to ensure they are properly based.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328134</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-12-31 02:02:01 -0800</bug_when>
    <thetext>Committed r74824: &lt;http://trac.webkit.org/changeset/74824&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328143</commentid>
    <comment_count>7</comment_count>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2010-12-31 02:54:33 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Your patch is also incorrectly based.
??? What is wrong?

&gt; Please create patches either with svn-create-patch or with webkit-patch to ensure they are properly based.
I normally use git diff and it works without problems and in this case I used svn-create-patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328211</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-12-31 12:29:08 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #5)
&gt; &gt; Your patch is also incorrectly based.
&gt; ??? What is wrong?

Hum...  Maybe the moves confused svn-apply?  I had to edit the patch manually to get it to apply.

&gt; &gt; Please create patches either with svn-create-patch or with webkit-patch to ensure they are properly based.
&gt; I normally use git diff and it works without problems and in this case I used svn-create-patch.

Interesting.  The patch has a strange mix of forward and backward slashes.  Maybe that was the problem?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77444</attachid>
            <date>2010-12-25 14:52:06 -0800</date>
            <delta_ts>2010-12-26 14:36:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51612.patch</filename>
            <type>text/plain</type>
            <size>3292</size>
            <attacher name="Patrick R. Gansterer">paroga</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjE3Nzc3YS4uM2I1ZjM0NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMC0xMi0yNSAgUGF0cmljayBHYW5z
dGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgWE1MIHBhcnNlciBiZW5jaG1hcmsKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxNjEyCisKKyAgICAgICAgKiBi
ZW5jaG1hcmtzL3BhcnNlci94bWwtcGFyc2VyLmh0bWw6IEFkZGVkLgorCiAyMDEwLTEyLTI0ICBE
YW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWxl
eGV5IFByb3NrdXJ5YWtvdi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmVuY2htYXJrcy9wYXJzZXIv
eG1sLXBhcnNlci5odG1sIGIvV2ViQ29yZS9iZW5jaG1hcmtzL3BhcnNlci94bWwtcGFyc2VyLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFiZjliMwotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvYmVuY2htYXJrcy9wYXJzZXIveG1sLXBhcnNlci5odG1sCkBAIC0w
LDAgKzEsMTAyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxib2R5PgorPHByZSBpZD0ibG9nIj48L3By
ZT4KKzxzY3JpcHQ+CitmdW5jdGlvbiBsb2codGV4dCkgeworICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJsb2ciKS5pbm5lclRleHQgKz0gdGV4dCArICJcbiI7CisgICAgd2luZG93LnNjcm9s
bFRvKGRvY3VtZW50LmJvZHkuaGVpZ2h0KTsKK30KKwordmFyIGRvbVBhcnNlciA9IG5ldyBET01Q
YXJzZXIoKTsKK3ZhciB4bWxBcnJheSA9IFtdOworCit4bWxBcnJheS5wdXNoKCc8cm9vdD4nKTsK
K2ZvciAodmFyIGkgPSAwOyBpIDwgMHg3RkZGOyArK2kpCisgICAgeG1sQXJyYXkucHVzaCgnPGl0
ZW0gYXR0cmlidXRlMT0idmFsdWUxIiBhdHRyaWJ1dGUyPSJ2YWx1ZTIiIGF0dHJpYnV0ZTM9InZh
bHVlMyIgYXR0cmlidXRlND0idmFsdWU0IiBhdHRyaWJ1dGU1PSJ2YWx1ZTUiIC8+Jyk7Cit4bWxB
cnJheS5wdXNoKCc8L3Jvb3Q+JykKK3ZhciB4bWxEYXRhID0geG1sQXJyYXkuam9pbignJyk7CisK
KworZnVuY3Rpb24gcGFyc2UoeG1sKSB7CisgICAgZG9tUGFyc2VyLnBhcnNlRnJvbVN0cmluZyh4
bWwsICJ0ZXh0L3htbCIpOworfQorCit2YXIgcnVuQ291bnQgPSAyMDsKK3ZhciBjb21wbGV0ZWRS
dW5zID0gLTE7IC8vIERpc2NhcmQgdGhlIGFueSBydW5zIDwgMC4KK3ZhciB0aW1lcyA9IFtdOwor
CitmdW5jdGlvbiBjb21wdXRlQXZlcmFnZSh2YWx1ZXMpIHsKKyAgICB2YXIgc3VtID0gMDsKKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykKKyAgICAgICAgc3VtICs9
IHZhbHVlc1tpXTsKKyAgICByZXR1cm4gc3VtIC8gdmFsdWVzLmxlbmd0aDsKK30KKworZnVuY3Rp
b24gY29tcHV0ZU1heCh2YWx1ZXMpIHsKKyAgICB2YXIgbWF4ID0gdmFsdWVzLmxlbmd0aCA/IHZh
bHVlc1swXSA6IDA7CisgICAgZm9yICh2YXIgaSA9IDE7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgaWYgKG1heCA8IHZhbHVlc1tpXSkKKyAgICAgICAgICAgIG1heCA9IHZhbHVl
c1tpXTsKKyAgICB9CisgICAgcmV0dXJuIG1heDsKK30KKworZnVuY3Rpb24gY29tcHV0ZU1lZGlh
bih2YWx1ZXMpIHsKKyAgICB2YWx1ZXMuc29ydChmdW5jdGlvbihhLCBiKSB7IHJldHVybiBhIC0g
YjsgfSk7CisgICAgdmFyIGxlbiA9IHZhbHVlcy5sZW5ndGg7CisgICAgaWYgKGxlbiAlIDIpCisg
ICAgICAgIHJldHVybiB2YWx1ZXNbKGxlbi0xKS8yXTsKKyAgICByZXR1cm4gKHZhbHVlc1tsZW4v
Mi0xXSArIHZhbHVlc1tsZW4vMl0pIC8gMjsKK30KKworZnVuY3Rpb24gY29tcHV0ZU1pbih2YWx1
ZXMpIHsKKyAgICB2YXIgbWluID0gdmFsdWVzLmxlbmd0aCA/IHZhbHVlc1swXSA6IDA7CisgICAg
Zm9yICh2YXIgaSA9IDE7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKG1p
biA+IHZhbHVlc1tpXSkKKyAgICAgICAgICAgIG1pbiA9IHZhbHVlc1tpXTsKKyAgICB9CisgICAg
cmV0dXJuIG1pbjsKK30KKworZnVuY3Rpb24gY29tcHV0ZVN0ZGV2KHZhbHVlcykgeworICAgIHZh
ciBhdmVyYWdlID0gY29tcHV0ZUF2ZXJhZ2UodmFsdWVzKTsKKyAgICB2YXIgc3VtT2ZTcXVhcmVk
RGV2aWF0aW9ucyA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyAr
K2kpIHsKKyAgICAgICAgdmFyIGRldmlhdGlvbiA9IHZhbHVlc1tpXSAtIGF2ZXJhZ2U7CisgICAg
ICAgIHN1bU9mU3F1YXJlZERldmlhdGlvbnMgKz0gZGV2aWF0aW9uICogZGV2aWF0aW9uOworICAg
IH0KKyAgICByZXR1cm4gTWF0aC5zcXJ0KHN1bU9mU3F1YXJlZERldmlhdGlvbnMgLyB2YWx1ZXMu
bGVuZ3RoKTsKK30KKworZnVuY3Rpb24gbG9nU3RhdGlzdGljcyh0aW1lcykgeworICAgIGxvZygi
Iik7CisgICAgbG9nKCJhdmcgIiArIGNvbXB1dGVBdmVyYWdlKHRpbWVzKSk7CisgICAgbG9nKCJt
ZWRpYW4gIiArIGNvbXB1dGVNZWRpYW4odGltZXMpKTsKKyAgICBsb2coInN0ZGV2ICIgKyBjb21w
dXRlU3RkZXYodGltZXMpKTsKKyAgICBsb2coIm1pbiAiICsgY29tcHV0ZU1pbih0aW1lcykpOwor
ICAgIGxvZygibWF4ICIgKyBjb21wdXRlTWF4KHRpbWVzKSk7Cit9CisKK2Z1bmN0aW9uIHJ1bigp
IHsKKyAgICB2YXIgc3RhcnQgPSBuZXcgRGF0ZSgpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
MTA7ICsraSkKKyAgICAgICAgcGFyc2UoeG1sRGF0YSk7CisgICAgdmFyIHRpbWUgPSBuZXcgRGF0
ZSgpIC0gc3RhcnQ7CisgICAgY29tcGxldGVkUnVucysrOworICAgIGlmIChjb21wbGV0ZWRSdW5z
IDw9IDApIHsKKyAgICAgICAgbG9nKCJJZ25vcmluZyB3YXJtLXVwIHJ1biAoIiArIHRpbWUgKyAi
KSIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRpbWVzLnB1c2godGltZSk7CisgICAgICAgIGxv
Zyh0aW1lKTsKKyAgICB9CisgICAgaWYgKGNvbXBsZXRlZFJ1bnMgPCBydW5Db3VudCkgeworICAg
ICAgICB3aW5kb3cuc2V0VGltZW91dChydW4sIDApOworICAgIH0gZWxzZSB7CisgICAgICAgIGxv
Z1N0YXRpc3RpY3ModGltZXMpOworICAgIH0KK30KKworbG9nKCJSdW5uaW5nICIgKyBydW5Db3Vu
dCArICIgdGltZXMiKTsKK3J1bigpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cg==
</data>
<flag name="review"
          id="68580"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77463</attachid>
            <date>2010-12-26 14:36:31 -0800</date>
            <delta_ts>2010-12-31 01:37:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51612.patch</filename>
            <type>text/plain</type>
            <size>15243</size>
            <attacher name="Patrick R. Gansterer">paroga</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NDY3MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMTAtMTItMjYgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIFhNTCBwYXJzZXIgYmVuY2htYXJrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01MTYxMgorCisgICAgICAgIE1vdmUgdGhlIEphdmFTY3JpcHQg
Y29kZSBvZiBodG1sIHBhcnNlciBpbnRvIGEgc2VwYXJhdGUgZmlsZSB0byBzaGFyZSBpdCB3aXRo
IHhtbCBwYXJzZXIuCisKKyAgICAgICAgKiBiZW5jaG1hcmtzL3BhcnNlci9odG1sLXBhcnNlci5o
dG1sOgorICAgICAgICAqIGJlbmNobWFya3MvcGFyc2VyL3Jlc291cmNlcy9ydW5uZXIuanM6IENv
cGllZCBmcm9tIFdlYkNvcmUvYmVuY2htYXJrcy9wYXJzZXIvaHRtbC1wYXJzZXIuaHRtbC4KKyAg
ICAgICAgKHJ1bkZ1bmN0aW9uKToKKyAgICAgICAgKHJ1bik6CisgICAgICAgIChzdGFydCk6Cisg
ICAgICAgICogYmVuY2htYXJrcy9wYXJzZXIveG1sLXBhcnNlci5odG1sOiBDb3BpZWQgZnJvbSBX
ZWJDb3JlL2JlbmNobWFya3MvcGFyc2VyL2h0bWwtcGFyc2VyLmh0bWwuCisKIDIwMTAtMTItMjYg
IFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBXZWJDb3JlL2JlbmNobWFya3MvcGFyc2VyL2h0bWwt
cGFyc2VyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iZW5jaG1hcmtzL3BhcnNlci9odG1s
LXBhcnNlci5odG1sCShyZXZpc2lvbiA3NDY3MSkKKysrIFdlYkNvcmUvYmVuY2htYXJrcy9wYXJz
ZXIvaHRtbC1wYXJzZXIuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDggKzEsMTkgQEAKIDwh
RE9DVFlQRSBodG1sPgogPGJvZHk+CiA8cHJlIGlkPSJsb2ciPjwvcHJlPgorPHNjcmlwdCBzcmM9
InJlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdD4KLWZ1bmN0aW9uIGxvZyh0
ZXh0KSB7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvZyIpLmlubmVyVGV4dCArPSB0
ZXh0ICsgIlxuIjsKLSAgICB3aW5kb3cuc2Nyb2xsVG8oZG9jdW1lbnQuYm9keS5oZWlnaHQpOwot
fQotCi1mdW5jdGlvbiBsb2FkRmlsZShwYXRoKSB7Ci0gICAgdmFyIHhociA9IG5ldyBYTUxIdHRw
UmVxdWVzdCgpOwotICAgIHhoci5vcGVuKCJHRVQiLCBwYXRoLCBmYWxzZSk7Ci0gICAgeGhyLnNl
bmQobnVsbCk7Ci0gICAgcmV0dXJuIHhoci5yZXNwb25zZVRleHQ7Ci19Ci0KIHZhciBzcGVjID0g
bG9hZEZpbGUoInJlc291cmNlcy9odG1sNS5odG1sIik7CiAKLWZ1bmN0aW9uIHBhcnNlKGh0bWwp
IHsKK3N0YXJ0KDIwLCBmdW5jdGlvbigpIHsKICAgICB2YXIgaWZyYW1lID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiaWZyYW1lIik7CiAgICAgaWZyYW1lLnNyYyA9ICJhYm91dDpibGFuayI7CiAg
ICAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gICAgZG9jdW1lbnQuYm9keS5hcHBl
bmRDaGlsZChpZnJhbWUpCisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpOwog
ICAgIGlmcmFtZS5jb250ZW50RG9jdW1lbnQub3BlbigpOwotICAgIGlmcmFtZS5jb250ZW50RG9j
dW1lbnQud3JpdGUoaHRtbCk7CisgICAgaWZyYW1lLmNvbnRlbnREb2N1bWVudC53cml0ZShzcGVj
KTsKICAgICBpZnJhbWUuY29udGVudERvY3VtZW50LmNsb3NlKCk7Ci0gICAgZG9jdW1lbnQuYm9k
eS5yZW1vdmVDaGlsZChpZnJhbWUpCi19Ci0KLXZhciBydW5Db3VudCA9IDIwOwotdmFyIGNvbXBs
ZXRlZFJ1bnMgPSAtMTsgLy8gRGlzY2FyZCB0aGUgYW55IHJ1bnMgPCAwLgotdmFyIHRpbWVzID0g
W107Ci0KLWZ1bmN0aW9uIGNvbXB1dGVBdmVyYWdlKHZhbHVlcykgewotICAgIHZhciBzdW0gPSAw
OwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKQotICAgICAgICBz
dW0gKz0gdmFsdWVzW2ldOwotICAgIHJldHVybiBzdW0gLyB2YWx1ZXMubGVuZ3RoOwotfQotCi1m
dW5jdGlvbiBjb21wdXRlTWF4KHZhbHVlcykgewotICAgIHZhciBtYXggPSB2YWx1ZXMubGVuZ3Ro
ID8gdmFsdWVzWzBdIDogMDsKLSAgICBmb3IgKHZhciBpID0gMTsgaSA8IHZhbHVlcy5sZW5ndGg7
IGkrKykgewotICAgICAgICBpZiAobWF4IDwgdmFsdWVzW2ldKQotICAgICAgICAgICAgbWF4ID0g
dmFsdWVzW2ldOwotICAgIH0KLSAgICByZXR1cm4gbWF4OwotfQotCi1mdW5jdGlvbiBjb21wdXRl
TWVkaWFuKHZhbHVlcykgewotICAgIHZhbHVlcy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsgcmV0dXJu
IGEgLSBiOyB9KTsKLSAgICB2YXIgbGVuID0gdmFsdWVzLmxlbmd0aDsKLSAgICBpZiAobGVuICUg
MikKLSAgICAgICAgcmV0dXJuIHZhbHVlc1sobGVuLTEpLzJdOwotICAgIHJldHVybiAodmFsdWVz
W2xlbi8yLTFdICsgdmFsdWVzW2xlbi8yXSkgLyAyOwotfQotCi1mdW5jdGlvbiBjb21wdXRlTWlu
KHZhbHVlcykgewotICAgIHZhciBtaW4gPSB2YWx1ZXMubGVuZ3RoID8gdmFsdWVzWzBdIDogMDsK
LSAgICBmb3IgKHZhciBpID0gMTsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewotICAgICAgICBp
ZiAobWluID4gdmFsdWVzW2ldKQotICAgICAgICAgICAgbWluID0gdmFsdWVzW2ldOwotICAgIH0K
LSAgICByZXR1cm4gbWluOwotfQotCi1mdW5jdGlvbiBjb21wdXRlU3RkZXYodmFsdWVzKSB7Ci0g
ICAgdmFyIGF2ZXJhZ2UgPSBjb21wdXRlQXZlcmFnZSh2YWx1ZXMpOwotICAgIHZhciBzdW1PZlNx
dWFyZWREZXZpYXRpb25zID0gMDsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5n
dGg7ICsraSkgewotICAgICAgICB2YXIgZGV2aWF0aW9uID0gdmFsdWVzW2ldIC0gYXZlcmFnZTsK
LSAgICAgICAgc3VtT2ZTcXVhcmVkRGV2aWF0aW9ucyArPSBkZXZpYXRpb24gKiBkZXZpYXRpb247
Ci0gICAgfQotICAgIHJldHVybiBNYXRoLnNxcnQoc3VtT2ZTcXVhcmVkRGV2aWF0aW9ucyAvIHZh
bHVlcy5sZW5ndGgpOwotfQotCi1mdW5jdGlvbiBsb2dTdGF0aXN0aWNzKHRpbWVzKSB7Ci0gICAg
bG9nKCIiKTsKLSAgICBsb2coImF2ZyAiICsgY29tcHV0ZUF2ZXJhZ2UodGltZXMpKTsKLSAgICBs
b2coIm1lZGlhbiAiICsgY29tcHV0ZU1lZGlhbih0aW1lcykpOwotICAgIGxvZygic3RkZXYgIiAr
IGNvbXB1dGVTdGRldih0aW1lcykpOwotICAgIGxvZygibWluICIgKyBjb21wdXRlTWluKHRpbWVz
KSk7Ci0gICAgbG9nKCJtYXggIiArIGNvbXB1dGVNYXgodGltZXMpKTsKLX0KLQotZnVuY3Rpb24g
cnVuKCkgewotICAgIHZhciBzdGFydCA9IG5ldyBEYXRlKCk7Ci0gICAgZm9yICh2YXIgaSA9IDA7
IGkgPCAxMDsgKytpKQotICAgICAgICBwYXJzZShzcGVjKTsKLSAgICB2YXIgdGltZSA9IG5ldyBE
YXRlKCkgLSBzdGFydDsKLSAgICBjb21wbGV0ZWRSdW5zKys7Ci0gICAgaWYgKGNvbXBsZXRlZFJ1
bnMgPD0gMCkgewotICAgICAgICBsb2coIklnbm9yaW5nIHdhcm0tdXAgcnVuICgiICsgdGltZSAr
ICIpIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdGltZXMucHVzaCh0aW1lKTsKLSAgICAgICAg
bG9nKHRpbWUpOwotICAgIH0KLSAgICBpZiAoY29tcGxldGVkUnVucyA8IHJ1bkNvdW50KSB7Ci0g
ICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KHJ1biwgMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
bG9nU3RhdGlzdGljcyh0aW1lcyk7Ci0gICAgfQotfQotCi1sb2coIlJ1bm5pbmcgIiArIHJ1bkNv
dW50ICsgIiB0aW1lcyIpOwotcnVuKCk7CisgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChp
ZnJhbWUpOworfSk7CiA8L3NjcmlwdD4KIDwvYm9keT4KSW5kZXg6IFdlYkNvcmVcYmVuY2htYXJr
c1xwYXJzZXJccmVzb3VyY2VzXHJ1bm5lci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlXGJlbmNo
bWFya3NccGFyc2VyXHJlc291cmNlc1xydW5uZXIuanMJKHJldmlzaW9uIDc0NjcxKQkoZnJvbSBX
ZWJDb3JlL2JlbmNobWFya3MvcGFyc2VyL2h0bWwtcGFyc2VyLmh0bWw6NzQ2NzEpCisrKyBXZWJD
b3JlXGJlbmNobWFya3NccGFyc2VyXHJlc291cmNlc1xydW5uZXIuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMDggQEAKKzwhRE9DVFlQRSBodG1sPgorPGJvZHk+Cis8cHJlIGlkPSJsb2ci
PjwvcHJlPgorPHNjcmlwdD4KK2Z1bmN0aW9uIGxvZyh0ZXh0KSB7CisgICAgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImxvZyIpLmlubmVyVGV4dCArPSB0ZXh0ICsgIlxuIjsKKyAgICB3aW5kb3cu
c2Nyb2xsVG8oZG9jdW1lbnQuYm9keS5oZWlnaHQpOworfQorCitmdW5jdGlvbiBsb2FkRmlsZShw
YXRoKSB7CisgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgIHhoci5vcGVu
KCJHRVQiLCBwYXRoLCBmYWxzZSk7CisgICAgeGhyLnNlbmQobnVsbCk7CisgICAgcmV0dXJuIHho
ci5yZXNwb25zZVRleHQ7Cit9CisKK3ZhciBzcGVjID0gbG9hZEZpbGUoInJlc291cmNlcy9odG1s
NS5odG1sIik7CisKK2Z1bmN0aW9uIHBhcnNlKGh0bWwpIHsKKyAgICB2YXIgaWZyYW1lID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7CisgICAgaWZyYW1lLnNyYyA9ICJhYm91dDpi
bGFuayI7CisgICAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgICAgZG9jdW1lbnQu
Ym9keS5hcHBlbmRDaGlsZChpZnJhbWUpCisgICAgaWZyYW1lLmNvbnRlbnREb2N1bWVudC5vcGVu
KCk7CisgICAgaWZyYW1lLmNvbnRlbnREb2N1bWVudC53cml0ZShodG1sKTsKKyAgICBpZnJhbWUu
Y29udGVudERvY3VtZW50LmNsb3NlKCk7CisgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChp
ZnJhbWUpCit9CisKK3ZhciBydW5Db3VudCA9IDIwOwordmFyIGNvbXBsZXRlZFJ1bnMgPSAtMTsg
Ly8gRGlzY2FyZCB0aGUgYW55IHJ1bnMgPCAwLgordmFyIHRpbWVzID0gW107CisKK2Z1bmN0aW9u
IGNvbXB1dGVBdmVyYWdlKHZhbHVlcykgeworICAgIHZhciBzdW0gPSAwOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKQorICAgICAgICBzdW0gKz0gdmFsdWVzW2ld
OworICAgIHJldHVybiBzdW0gLyB2YWx1ZXMubGVuZ3RoOworfQorCitmdW5jdGlvbiBjb21wdXRl
TWF4KHZhbHVlcykgeworICAgIHZhciBtYXggPSB2YWx1ZXMubGVuZ3RoID8gdmFsdWVzWzBdIDog
MDsKKyAgICBmb3IgKHZhciBpID0gMTsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgeworICAgICAg
ICBpZiAobWF4IDwgdmFsdWVzW2ldKQorICAgICAgICAgICAgbWF4ID0gdmFsdWVzW2ldOworICAg
IH0KKyAgICByZXR1cm4gbWF4OworfQorCitmdW5jdGlvbiBjb21wdXRlTWVkaWFuKHZhbHVlcykg
eworICAgIHZhbHVlcy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsgcmV0dXJuIGEgLSBiOyB9KTsKKyAg
ICB2YXIgbGVuID0gdmFsdWVzLmxlbmd0aDsKKyAgICBpZiAobGVuICUgMikKKyAgICAgICAgcmV0
dXJuIHZhbHVlc1sobGVuLTEpLzJdOworICAgIHJldHVybiAodmFsdWVzW2xlbi8yLTFdICsgdmFs
dWVzW2xlbi8yXSkgLyAyOworfQorCitmdW5jdGlvbiBjb21wdXRlTWluKHZhbHVlcykgeworICAg
IHZhciBtaW4gPSB2YWx1ZXMubGVuZ3RoID8gdmFsdWVzWzBdIDogMDsKKyAgICBmb3IgKHZhciBp
ID0gMTsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgeworICAgICAgICBpZiAobWluID4gdmFsdWVz
W2ldKQorICAgICAgICAgICAgbWluID0gdmFsdWVzW2ldOworICAgIH0KKyAgICByZXR1cm4gbWlu
OworfQorCitmdW5jdGlvbiBjb21wdXRlU3RkZXYodmFsdWVzKSB7CisgICAgdmFyIGF2ZXJhZ2Ug
PSBjb21wdXRlQXZlcmFnZSh2YWx1ZXMpOworICAgIHZhciBzdW1PZlNxdWFyZWREZXZpYXRpb25z
ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7ICsraSkgeworICAg
ICAgICB2YXIgZGV2aWF0aW9uID0gdmFsdWVzW2ldIC0gYXZlcmFnZTsKKyAgICAgICAgc3VtT2ZT
cXVhcmVkRGV2aWF0aW9ucyArPSBkZXZpYXRpb24gKiBkZXZpYXRpb247CisgICAgfQorICAgIHJl
dHVybiBNYXRoLnNxcnQoc3VtT2ZTcXVhcmVkRGV2aWF0aW9ucyAvIHZhbHVlcy5sZW5ndGgpOwor
fQorCitmdW5jdGlvbiBsb2dTdGF0aXN0aWNzKHRpbWVzKSB7CisgICAgbG9nKCIiKTsKKyAgICBs
b2coImF2ZyAiICsgY29tcHV0ZUF2ZXJhZ2UodGltZXMpKTsKKyAgICBsb2coIm1lZGlhbiAiICsg
Y29tcHV0ZU1lZGlhbih0aW1lcykpOworICAgIGxvZygic3RkZXYgIiArIGNvbXB1dGVTdGRldih0
aW1lcykpOworICAgIGxvZygibWluICIgKyBjb21wdXRlTWluKHRpbWVzKSk7CisgICAgbG9nKCJt
YXggIiArIGNvbXB1dGVNYXgodGltZXMpKTsKK30KKworZnVuY3Rpb24gcnVuKCkgeworICAgIHZh
ciBzdGFydCA9IG5ldyBEYXRlKCk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgKytpKQor
ICAgICAgICBwYXJzZShzcGVjKTsKKyAgICB2YXIgdGltZSA9IG5ldyBEYXRlKCkgLSBzdGFydDsK
KyAgICBjb21wbGV0ZWRSdW5zKys7CisgICAgaWYgKGNvbXBsZXRlZFJ1bnMgPD0gMCkgeworICAg
ICAgICBsb2coIklnbm9yaW5nIHdhcm0tdXAgcnVuICgiICsgdGltZSArICIpIik7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgdGltZXMucHVzaCh0aW1lKTsKKyAgICAgICAgbG9nKHRpbWUpOworICAg
IH0KKyAgICBpZiAoY29tcGxldGVkUnVucyA8IHJ1bkNvdW50KSB7CisgICAgICAgIHdpbmRvdy5z
ZXRUaW1lb3V0KHJ1biwgMCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbG9nU3RhdGlzdGljcyh0
aW1lcyk7CisgICAgfQorfQorCitsb2coIlJ1bm5pbmcgIiArIHJ1bkNvdW50ICsgIiB0aW1lcyIp
OworcnVuKCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KSW5kZXg6IFdlYkNvcmUvYmVuY2htYXJrcy9w
YXJzZXIvcmVzb3VyY2VzL3J1bm5lci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JlbmNobWFy
a3MvcGFyc2VyL3Jlc291cmNlcy9ydW5uZXIuanMJKHJldmlzaW9uIDc0NjcxKQorKysgV2ViQ29y
ZS9iZW5jaG1hcmtzL3BhcnNlci9yZXNvdXJjZXMvcnVubmVyLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDcgKzEsMyBAQAotPCFET0NUWVBFIGh0bWw+Ci08Ym9keT4KLTxwcmUgaWQ9ImxvZyI+PC9w
cmU+Ci08c2NyaXB0PgogZnVuY3Rpb24gbG9nKHRleHQpIHsKICAgICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgibG9nIikuaW5uZXJUZXh0ICs9IHRleHQgKyAiXG4iOwogICAgIHdpbmRvdy5zY3Jv
bGxUbyhkb2N1bWVudC5ib2R5LmhlaWdodCk7CkBAIC0xNCwyMCArMTAsOCBAQCBmdW5jdGlvbiBs
b2FkRmlsZShwYXRoKSB7CiAgICAgcmV0dXJuIHhoci5yZXNwb25zZVRleHQ7CiB9CiAKLXZhciBz
cGVjID0gbG9hZEZpbGUoInJlc291cmNlcy9odG1sNS5odG1sIik7Ci0KLWZ1bmN0aW9uIHBhcnNl
KGh0bWwpIHsKLSAgICB2YXIgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1l
Iik7Ci0gICAgaWZyYW1lLnNyYyA9ICJhYm91dDpibGFuayI7Ci0gICAgaWZyYW1lLnN0eWxlLmRp
c3BsYXkgPSAibm9uZSI7Ci0gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpCi0g
ICAgaWZyYW1lLmNvbnRlbnREb2N1bWVudC5vcGVuKCk7Ci0gICAgaWZyYW1lLmNvbnRlbnREb2N1
bWVudC53cml0ZShodG1sKTsKLSAgICBpZnJhbWUuY29udGVudERvY3VtZW50LmNsb3NlKCk7Ci0g
ICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChpZnJhbWUpCi19Ci0KLXZhciBydW5Db3VudCA9
IDIwOwordmFyIHJ1bkNvdW50ID0gLTE7Cit2YXIgcnVuRnVuY3Rpb24gPSBmdW5jdGlvbigpIHt9
OwogdmFyIGNvbXBsZXRlZFJ1bnMgPSAtMTsgLy8gRGlzY2FyZCB0aGUgYW55IHJ1bnMgPCAwLgog
dmFyIHRpbWVzID0gW107CiAKQEAgLTg2LDcgKzcwLDcgQEAgZnVuY3Rpb24gbG9nU3RhdGlzdGlj
cyh0aW1lcykgewogZnVuY3Rpb24gcnVuKCkgewogICAgIHZhciBzdGFydCA9IG5ldyBEYXRlKCk7
CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgKytpKQotICAgICAgICBwYXJzZShzcGVjKTsK
KyAgICAgICAgcnVuRnVuY3Rpb24oKTsKICAgICB2YXIgdGltZSA9IG5ldyBEYXRlKCkgLSBzdGFy
dDsKICAgICBjb21wbGV0ZWRSdW5zKys7CiAgICAgaWYgKGNvbXBsZXRlZFJ1bnMgPD0gMCkgewpA
QCAtMTAyLDcgKzg2LDEwIEBAIGZ1bmN0aW9uIHJ1bigpIHsKICAgICB9CiB9CiAKLWxvZygiUnVu
bmluZyAiICsgcnVuQ291bnQgKyAiIHRpbWVzIik7Ci1ydW4oKTsKLTwvc2NyaXB0PgotPC9ib2R5
PgorZnVuY3Rpb24gc3RhcnQockMsIHJGKSB7CisgICAgcnVuQ291bnQgPSByQzsKKyAgICBydW5G
dW5jdGlvbiA9IHJGOworCisgICAgbG9nKCJSdW5uaW5nICIgKyBydW5Db3VudCArICIgdGltZXMi
KTsKKyAgICBydW4oKTsKK30KSW5kZXg6IFdlYkNvcmVcYmVuY2htYXJrc1xwYXJzZXJceG1sLXBh
cnNlci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmVcYmVuY2htYXJrc1xwYXJzZXJceG1sLXBh
cnNlci5odG1sCShyZXZpc2lvbiA3NDY3MSkJKGZyb20gV2ViQ29yZS9iZW5jaG1hcmtzL3BhcnNl
ci9odG1sLXBhcnNlci5odG1sOjc0NjcxKQorKysgV2ViQ29yZVxiZW5jaG1hcmtzXHBhcnNlclx4
bWwtcGFyc2VyLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDggQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGJvZHk+Cis8cHJlIGlkPSJsb2ciPjwvcHJlPgorPHNjcmlwdD4KK2Z1bmN0aW9u
IGxvZyh0ZXh0KSB7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvZyIpLmlubmVyVGV4
dCArPSB0ZXh0ICsgIlxuIjsKKyAgICB3aW5kb3cuc2Nyb2xsVG8oZG9jdW1lbnQuYm9keS5oZWln
aHQpOworfQorCitmdW5jdGlvbiBsb2FkRmlsZShwYXRoKSB7CisgICAgdmFyIHhociA9IG5ldyBY
TUxIdHRwUmVxdWVzdCgpOworICAgIHhoci5vcGVuKCJHRVQiLCBwYXRoLCBmYWxzZSk7CisgICAg
eGhyLnNlbmQobnVsbCk7CisgICAgcmV0dXJuIHhoci5yZXNwb25zZVRleHQ7Cit9CisKK3ZhciBz
cGVjID0gbG9hZEZpbGUoInJlc291cmNlcy9odG1sNS5odG1sIik7CisKK2Z1bmN0aW9uIHBhcnNl
KGh0bWwpIHsKKyAgICB2YXIgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1l
Iik7CisgICAgaWZyYW1lLnNyYyA9ICJhYm91dDpibGFuayI7CisgICAgaWZyYW1lLnN0eWxlLmRp
c3BsYXkgPSAibm9uZSI7CisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpCisg
ICAgaWZyYW1lLmNvbnRlbnREb2N1bWVudC5vcGVuKCk7CisgICAgaWZyYW1lLmNvbnRlbnREb2N1
bWVudC53cml0ZShodG1sKTsKKyAgICBpZnJhbWUuY29udGVudERvY3VtZW50LmNsb3NlKCk7Cisg
ICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChpZnJhbWUpCit9CisKK3ZhciBydW5Db3VudCA9
IDIwOwordmFyIGNvbXBsZXRlZFJ1bnMgPSAtMTsgLy8gRGlzY2FyZCB0aGUgYW55IHJ1bnMgPCAw
LgordmFyIHRpbWVzID0gW107CisKK2Z1bmN0aW9uIGNvbXB1dGVBdmVyYWdlKHZhbHVlcykgewor
ICAgIHZhciBzdW0gPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsg
aSsrKQorICAgICAgICBzdW0gKz0gdmFsdWVzW2ldOworICAgIHJldHVybiBzdW0gLyB2YWx1ZXMu
bGVuZ3RoOworfQorCitmdW5jdGlvbiBjb21wdXRlTWF4KHZhbHVlcykgeworICAgIHZhciBtYXgg
PSB2YWx1ZXMubGVuZ3RoID8gdmFsdWVzWzBdIDogMDsKKyAgICBmb3IgKHZhciBpID0gMTsgaSA8
IHZhbHVlcy5sZW5ndGg7IGkrKykgeworICAgICAgICBpZiAobWF4IDwgdmFsdWVzW2ldKQorICAg
ICAgICAgICAgbWF4ID0gdmFsdWVzW2ldOworICAgIH0KKyAgICByZXR1cm4gbWF4OworfQorCitm
dW5jdGlvbiBjb21wdXRlTWVkaWFuKHZhbHVlcykgeworICAgIHZhbHVlcy5zb3J0KGZ1bmN0aW9u
KGEsIGIpIHsgcmV0dXJuIGEgLSBiOyB9KTsKKyAgICB2YXIgbGVuID0gdmFsdWVzLmxlbmd0aDsK
KyAgICBpZiAobGVuICUgMikKKyAgICAgICAgcmV0dXJuIHZhbHVlc1sobGVuLTEpLzJdOworICAg
IHJldHVybiAodmFsdWVzW2xlbi8yLTFdICsgdmFsdWVzW2xlbi8yXSkgLyAyOworfQorCitmdW5j
dGlvbiBjb21wdXRlTWluKHZhbHVlcykgeworICAgIHZhciBtaW4gPSB2YWx1ZXMubGVuZ3RoID8g
dmFsdWVzWzBdIDogMDsKKyAgICBmb3IgKHZhciBpID0gMTsgaSA8IHZhbHVlcy5sZW5ndGg7IGkr
KykgeworICAgICAgICBpZiAobWluID4gdmFsdWVzW2ldKQorICAgICAgICAgICAgbWluID0gdmFs
dWVzW2ldOworICAgIH0KKyAgICByZXR1cm4gbWluOworfQorCitmdW5jdGlvbiBjb21wdXRlU3Rk
ZXYodmFsdWVzKSB7CisgICAgdmFyIGF2ZXJhZ2UgPSBjb21wdXRlQXZlcmFnZSh2YWx1ZXMpOwor
ICAgIHZhciBzdW1PZlNxdWFyZWREZXZpYXRpb25zID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHZhbHVlcy5sZW5ndGg7ICsraSkgeworICAgICAgICB2YXIgZGV2aWF0aW9uID0gdmFsdWVz
W2ldIC0gYXZlcmFnZTsKKyAgICAgICAgc3VtT2ZTcXVhcmVkRGV2aWF0aW9ucyArPSBkZXZpYXRp
b24gKiBkZXZpYXRpb247CisgICAgfQorICAgIHJldHVybiBNYXRoLnNxcnQoc3VtT2ZTcXVhcmVk
RGV2aWF0aW9ucyAvIHZhbHVlcy5sZW5ndGgpOworfQorCitmdW5jdGlvbiBsb2dTdGF0aXN0aWNz
KHRpbWVzKSB7CisgICAgbG9nKCIiKTsKKyAgICBsb2coImF2ZyAiICsgY29tcHV0ZUF2ZXJhZ2Uo
dGltZXMpKTsKKyAgICBsb2coIm1lZGlhbiAiICsgY29tcHV0ZU1lZGlhbih0aW1lcykpOworICAg
IGxvZygic3RkZXYgIiArIGNvbXB1dGVTdGRldih0aW1lcykpOworICAgIGxvZygibWluICIgKyBj
b21wdXRlTWluKHRpbWVzKSk7CisgICAgbG9nKCJtYXggIiArIGNvbXB1dGVNYXgodGltZXMpKTsK
K30KKworZnVuY3Rpb24gcnVuKCkgeworICAgIHZhciBzdGFydCA9IG5ldyBEYXRlKCk7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgKytpKQorICAgICAgICBwYXJzZShzcGVjKTsKKyAgICB2
YXIgdGltZSA9IG5ldyBEYXRlKCkgLSBzdGFydDsKKyAgICBjb21wbGV0ZWRSdW5zKys7CisgICAg
aWYgKGNvbXBsZXRlZFJ1bnMgPD0gMCkgeworICAgICAgICBsb2coIklnbm9yaW5nIHdhcm0tdXAg
cnVuICgiICsgdGltZSArICIpIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGltZXMucHVzaCh0
aW1lKTsKKyAgICAgICAgbG9nKHRpbWUpOworICAgIH0KKyAgICBpZiAoY29tcGxldGVkUnVucyA8
IHJ1bkNvdW50KSB7CisgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KHJ1biwgMCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgbG9nU3RhdGlzdGljcyh0aW1lcyk7CisgICAgfQorfQorCitsb2coIlJ1
bm5pbmcgIiArIHJ1bkNvdW50ICsgIiB0aW1lcyIpOworcnVuKCk7Cis8L3NjcmlwdD4KKzwvYm9k
eT4KSW5kZXg6IFdlYkNvcmUvYmVuY2htYXJrcy9wYXJzZXIveG1sLXBhcnNlci5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmVuY2htYXJrcy9wYXJzZXIveG1sLXBhcnNlci5odG1sCShyZXZp
c2lvbiA3NDY3MSkKKysrIFdlYkNvcmUvYmVuY2htYXJrcy9wYXJzZXIveG1sLXBhcnNlci5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwOCArMSwyMCBAQAogPCFET0NUWVBFIGh0bWw+CiA8Ym9k
eT4KIDxwcmUgaWQ9ImxvZyI+PC9wcmU+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3J1bm5lci5q
cyI+PC9zY3JpcHQ+CiA8c2NyaXB0PgotZnVuY3Rpb24gbG9nKHRleHQpIHsKLSAgICBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgibG9nIikuaW5uZXJUZXh0ICs9IHRleHQgKyAiXG4iOwotICAgIHdp
bmRvdy5zY3JvbGxUbyhkb2N1bWVudC5ib2R5LmhlaWdodCk7Ci19Cit2YXIgZG9tUGFyc2VyID0g
bmV3IERPTVBhcnNlcigpOwordmFyIHhtbEFycmF5ID0gW107CiAKLWZ1bmN0aW9uIGxvYWRGaWxl
KHBhdGgpIHsKLSAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7Ci0gICAgeGhyLm9w
ZW4oIkdFVCIsIHBhdGgsIGZhbHNlKTsKLSAgICB4aHIuc2VuZChudWxsKTsKLSAgICByZXR1cm4g
eGhyLnJlc3BvbnNlVGV4dDsKLX0KK3htbEFycmF5LnB1c2goJzxyb290PicpOworZm9yICh2YXIg
aSA9IDA7IGkgPCAweDdGRkY7ICsraSkKKyAgICB4bWxBcnJheS5wdXNoKCc8aXRlbSBhdHRyaWJ1
dGUxPSJ2YWx1ZTEiIGF0dHJpYnV0ZTI9InZhbHVlMiIgYXR0cmlidXRlMz0idmFsdWUzIiBhdHRy
aWJ1dGU0PSJ2YWx1ZTQiIGF0dHJpYnV0ZTU9InZhbHVlNSIgLz4nKTsKK3htbEFycmF5LnB1c2go
Jzwvcm9vdD4nKQordmFyIHhtbERhdGEgPSB4bWxBcnJheS5qb2luKCcnKTsKIAotdmFyIHNwZWMg
PSBsb2FkRmlsZSgicmVzb3VyY2VzL2h0bWw1Lmh0bWwiKTsKIAotZnVuY3Rpb24gcGFyc2UoaHRt
bCkgewotICAgIHZhciBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsK
LSAgICBpZnJhbWUuc3JjID0gImFib3V0OmJsYW5rIjsKLSAgICBpZnJhbWUuc3R5bGUuZGlzcGxh
eSA9ICJub25lIjsKLSAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZSkKLSAgICBp
ZnJhbWUuY29udGVudERvY3VtZW50Lm9wZW4oKTsKLSAgICBpZnJhbWUuY29udGVudERvY3VtZW50
LndyaXRlKGh0bWwpOwotICAgIGlmcmFtZS5jb250ZW50RG9jdW1lbnQuY2xvc2UoKTsKLSAgICBk
b2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGlmcmFtZSkKLX0KLQotdmFyIHJ1bkNvdW50ID0gMjA7
Ci12YXIgY29tcGxldGVkUnVucyA9IC0xOyAvLyBEaXNjYXJkIHRoZSBhbnkgcnVucyA8IDAuCi12
YXIgdGltZXMgPSBbXTsKLQotZnVuY3Rpb24gY29tcHV0ZUF2ZXJhZ2UodmFsdWVzKSB7Ci0gICAg
dmFyIHN1bSA9IDA7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKysp
Ci0gICAgICAgIHN1bSArPSB2YWx1ZXNbaV07Ci0gICAgcmV0dXJuIHN1bSAvIHZhbHVlcy5sZW5n
dGg7Ci19Ci0KLWZ1bmN0aW9uIGNvbXB1dGVNYXgodmFsdWVzKSB7Ci0gICAgdmFyIG1heCA9IHZh
bHVlcy5sZW5ndGggPyB2YWx1ZXNbMF0gOiAwOwotICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdmFs
dWVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGlmIChtYXggPCB2YWx1ZXNbaV0pCi0gICAgICAg
ICAgICBtYXggPSB2YWx1ZXNbaV07Ci0gICAgfQotICAgIHJldHVybiBtYXg7Ci19Ci0KLWZ1bmN0
aW9uIGNvbXB1dGVNZWRpYW4odmFsdWVzKSB7Ci0gICAgdmFsdWVzLnNvcnQoZnVuY3Rpb24oYSwg
YikgeyByZXR1cm4gYSAtIGI7IH0pOwotICAgIHZhciBsZW4gPSB2YWx1ZXMubGVuZ3RoOwotICAg
IGlmIChsZW4gJSAyKQotICAgICAgICByZXR1cm4gdmFsdWVzWyhsZW4tMSkvMl07Ci0gICAgcmV0
dXJuICh2YWx1ZXNbbGVuLzItMV0gKyB2YWx1ZXNbbGVuLzJdKSAvIDI7Ci19Ci0KLWZ1bmN0aW9u
IGNvbXB1dGVNaW4odmFsdWVzKSB7Ci0gICAgdmFyIG1pbiA9IHZhbHVlcy5sZW5ndGggPyB2YWx1
ZXNbMF0gOiAwOwotICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7
Ci0gICAgICAgIGlmIChtaW4gPiB2YWx1ZXNbaV0pCi0gICAgICAgICAgICBtaW4gPSB2YWx1ZXNb
aV07Ci0gICAgfQotICAgIHJldHVybiBtaW47Ci19Ci0KLWZ1bmN0aW9uIGNvbXB1dGVTdGRldih2
YWx1ZXMpIHsKLSAgICB2YXIgYXZlcmFnZSA9IGNvbXB1dGVBdmVyYWdlKHZhbHVlcyk7Ci0gICAg
dmFyIHN1bU9mU3F1YXJlZERldmlhdGlvbnMgPSAwOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
dmFsdWVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIHZhciBkZXZpYXRpb24gPSB2YWx1ZXNbaV0g
LSBhdmVyYWdlOwotICAgICAgICBzdW1PZlNxdWFyZWREZXZpYXRpb25zICs9IGRldmlhdGlvbiAq
IGRldmlhdGlvbjsKLSAgICB9Ci0gICAgcmV0dXJuIE1hdGguc3FydChzdW1PZlNxdWFyZWREZXZp
YXRpb25zIC8gdmFsdWVzLmxlbmd0aCk7Ci19Ci0KLWZ1bmN0aW9uIGxvZ1N0YXRpc3RpY3ModGlt
ZXMpIHsKLSAgICBsb2coIiIpOwotICAgIGxvZygiYXZnICIgKyBjb21wdXRlQXZlcmFnZSh0aW1l
cykpOwotICAgIGxvZygibWVkaWFuICIgKyBjb21wdXRlTWVkaWFuKHRpbWVzKSk7Ci0gICAgbG9n
KCJzdGRldiAiICsgY29tcHV0ZVN0ZGV2KHRpbWVzKSk7Ci0gICAgbG9nKCJtaW4gIiArIGNvbXB1
dGVNaW4odGltZXMpKTsKLSAgICBsb2coIm1heCAiICsgY29tcHV0ZU1heCh0aW1lcykpOwotfQot
Ci1mdW5jdGlvbiBydW4oKSB7Ci0gICAgdmFyIHN0YXJ0ID0gbmV3IERhdGUoKTsKLSAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IDEwOyArK2kpCi0gICAgICAgIHBhcnNlKHNwZWMpOwotICAgIHZhciB0
aW1lID0gbmV3IERhdGUoKSAtIHN0YXJ0OwotICAgIGNvbXBsZXRlZFJ1bnMrKzsKLSAgICBpZiAo
Y29tcGxldGVkUnVucyA8PSAwKSB7Ci0gICAgICAgIGxvZygiSWdub3Jpbmcgd2FybS11cCBydW4g
KCIgKyB0aW1lICsgIikiKTsKLSAgICB9IGVsc2UgewotICAgICAgICB0aW1lcy5wdXNoKHRpbWUp
OwotICAgICAgICBsb2codGltZSk7Ci0gICAgfQotICAgIGlmIChjb21wbGV0ZWRSdW5zIDwgcnVu
Q291bnQpIHsKLSAgICAgICAgd2luZG93LnNldFRpbWVvdXQocnVuLCAwKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBsb2dTdGF0aXN0aWNzKHRpbWVzKTsKLSAgICB9Ci19Ci0KLWxvZygiUnVubmlu
ZyAiICsgcnVuQ291bnQgKyAiIHRpbWVzIik7Ci1ydW4oKTsKK3N0YXJ0KDIwLCBmdW5jdGlvbigp
IHsKKyAgICBkb21QYXJzZXIucGFyc2VGcm9tU3RyaW5nKHhtbERhdGEsICJ0ZXh0L3htbCIpOwor
fSk7CiA8L3NjcmlwdD4KIDwvYm9keT4K
</data>
<flag name="review"
          id="68596"
          type_id="1"
          status="+"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="68597"
          type_id="3"
          status="-"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>