<?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>59168</bug_id>
          
          <creation_ts>2011-04-21 20:06:25 -0700</creation_ts>
          <short_desc>LayoutTestResults should know how to handle NRWT json files</short_desc>
          <delta_ts>2011-04-22 13:24:46 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          <cc>abarth</cc>
    
    <cc>dpranke</cc>
    
    <cc>ojan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>390563</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-04-21 20:06:25 -0700</bug_when>
    <thetext>LayoutTestResults should know how to handle NRWT json files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390567</commentid>
    <comment_count>1</comment_count>
      <attachid>90657</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-04-21 20:14:50 -0700</bug_when>
    <thetext>Created attachment 90657
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390598</commentid>
    <comment_count>2</comment_count>
      <attachid>90657</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-21 21:11:06 -0700</bug_when>
    <thetext>Comment on attachment 90657
Patch

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

&gt; Tools/Scripts/webkitpy/common/net/layouttestresults.py:32
&gt; +from webkitpy.common.net.resultsjsonparser import ResultsJSONParser

This doesn&apos;t really belong in net, right?

&gt; Tools/Scripts/webkitpy/common/net/resultsjsonparser.py:39
&gt; +# FIXME: common should never import from new-run-webkit-tests, one of these files needs to move.
&gt; +from webkitpy.layout_tests.layout_package import json_results_generator, test_expectations, test_results, test_failures

Right.  This file belongs in layout_package.

&gt; Tools/Scripts/webkitpy/common/net/resultsjsonparser_unittest.py:35
&gt; +from webkitpy.thirdparty.BeautifulSoup import BeautifulSoup

I don&apos;t think you need this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390808</commentid>
    <comment_count>3</comment_count>
      <attachid>90657</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-22 09:07:59 -0700</bug_when>
    <thetext>Comment on attachment 90657
Patch

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

&gt; Tools/Scripts/webkitpy/common/net/resultsjsonparser.py:82
&gt; +        elif actual == test_expectations.MISSING:
&gt; +            return [test_failures.FailureMissingResult(), test_failures.FailureMissingImageHash(), test_failures.FailureMissingImage()]

This is an AND or an OR?

&gt; Tools/Scripts/webkitpy/common/net/resultsjsonparser.py:107
&gt; +        return itertools.ifilter(lambda a: a, non_passing_results)

I don&apos;t understand what ifilter does.  Can we just use normal filter?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390820</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-04-22 09:21:42 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 90657 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=90657&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/common/net/layouttestresults.py:32
&gt; &gt; +from webkitpy.common.net.resultsjsonparser import ResultsJSONParser
&gt; 
&gt; This doesn&apos;t really belong in net, right?

Nope.  But we&apos;d have to move LayoutTestResults to layout_tests and although that makes sense on the surface, layout_tests is currently the NRWT tool.  I think we should do that in a separate patch.

&gt; &gt; Tools/Scripts/webkitpy/common/net/resultsjsonparser_unittest.py:35
&gt; &gt; +from webkitpy.thirdparty.BeautifulSoup import BeautifulSoup
&gt; 
&gt; I don&apos;t think you need this.

Good catch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390821</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-04-22 09:22:45 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 90657 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=90657&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/common/net/resultsjsonparser.py:82
&gt; &gt; +        elif actual == test_expectations.MISSING:
&gt; &gt; +            return [test_failures.FailureMissingResult(), test_failures.FailureMissingImageHash(), test_failures.FailureMissingImage()]
&gt; 
&gt; This is an AND or an OR?

AND.  the current unexpected_results.json format is &quot;lossy&quot; with regards to the TestFailures data type.

&gt; &gt; Tools/Scripts/webkitpy/common/net/resultsjsonparser.py:107
&gt; &gt; +        return itertools.ifilter(lambda a: a, non_passing_results)
&gt; 
&gt; I don&apos;t understand what ifilter does.  Can we just use normal filter?

Yup, will change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390822</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-04-22 09:25:22 -0700</bug_when>
    <thetext>Committed r84633: &lt;http://trac.webkit.org/changeset/84633&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390823</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-04-22 09:26:01 -0700</bug_when>
    <thetext>Ojan, Dirk:   I landed this just now to unblock Adam&apos;s work on making the EWS/commit-queue work with NRWT.  But I would still very much like both of your comments on this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391003</commentid>
    <comment_count>8</comment_count>
      <attachid>90657</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-04-22 13:24:46 -0700</bug_when>
    <thetext>Comment on attachment 90657
Patch

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

Looks good to me.

&gt; Tools/Scripts/webkitpy/common/net/resultsjsonparser.py:51
&gt; +        return self._result_dict.get(&apos;time_ms&apos;)

FWIW, I shortly plan to remove time_ms from full_results.json and put it in a times_ms.json file instead. We can discuss whether that makes sense on that bug though.

&gt; Tools/Scripts/webkitpy/common/net/resultsjsonparser.py:74
&gt; +            return [test_failures.FailureImageHashMismatch(), test_failures.FailureTextMismatch()]

This should have a FIXME to make the test_expectations types 1:1 with TestFailures data type and to make the JSON non-lossy.

&gt;&gt;&gt; Tools/Scripts/webkitpy/common/net/resultsjsonparser.py:82
&gt;&gt;&gt; +            return [test_failures.FailureMissingResult(), test_failures.FailureMissingImageHash(), test_failures.FailureMissingImage()]
&gt;&gt; 
&gt;&gt; This is an AND or an OR?
&gt; 
&gt; AND.  the current unexpected_results.json format is &quot;lossy&quot; with regards to the TestFailures data type.

Ditto re: FIXME</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90657</attachid>
            <date>2011-04-21 20:14:50 -0700</date>
            <delta_ts>2011-04-22 13:24:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-59168-20110421201448.patch</filename>
            <type>text/plain</type>
            <size>20369</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODQ1NDIKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhZjc5NDEwODUxMDU0NTRlYWVmMmQxYTE2MWU2Zjg2Mzll
ZTExNzU3Li5lNTU0NTE0MzEwNzcxYzdkNTdkOGRiZTVhYjgyYjEyODllZTc5OGM5IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMg
QEAKKzIwMTEtMDQtMjEgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIExheW91dFRlc3RSZXN1bHRz
IHNob3VsZCBrbm93IGhvdyB0byBoYW5kbGUgTlJXVCBqc29uIGZpbGVzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01OTE2OAorCisgICAgICAgIExheW91
dFRlc3RSZXN1bHRzIHdhcyBvcmlnaW5hbGx5IGNyZWF0ZWQgdG8gYmUgYSBwYXJhbGxlbAorICAg
ICAgICB0byBleGlzdGluZyBOUldUIGFyY2hpdGVjdHVyZSBmb3IgZGVhbGluZyB3aXRoIHJlc3Vs
dHMgZmlsZXMuCisgICAgICAgIEJ1dCB0aGVuIGl0IHR1cm5zIG91dCB0aGF0IE5SV1QgaGFzIG5v
IHN1Y2ggYXJjaGl0ZWN0dXJlLiA6KAorICAgICAgICBTbyB0aGlzIHBhdGNoIHdyaXRlcyB0aGUg
bmVjZXNzYXJ5IGNvZGUgdG8gaGFuZGxlIHJlYWRpbmcKKyAgICAgICAgZnVsbF9yZXN1bHRzLmpz
b24gYW5kIHVuZXhwZWN0ZWRfcmVzdWx0cy5qc29uIGZpbGVzIGZyb20KKyAgICAgICAgTlJXVCBs
YXlvdXQtdGVzdC1yZXN1bHRzIGRpcmVjdG9yaWVzLgorCisgICAgICAgIExheW91dFRlc3RSZXN1
bHRzIGhhcyB0aHVzIG1vcnBoZWQgZnJvbSBiZWluZyBPUldULW9ubHkgdG8KKyAgICAgICAgc3Vw
cG9ydGluZyBib3RoIE9SV1QgYW5kIE5SV1QuICBJdCdzIHBvc3NpYmxlIGF0IHNvbWUgZnV0dXJl
CisgICAgICAgIHBvaW50IHRoYXQgb3RoZXIgcGllY2VzIG9mIHRoZSBOUldUIGFyY2hpdGVjdHVy
ZSB3aWxsIGxlYXJuCisgICAgICAgIGhvdyB0byByZWFkIEpTT04gZmlsZXMgaW4gd2hpY2ggY2Fz
ZSB0aGlzIGNhbiBnbyBhd2F5LgorCisgICAgICAgIFRoaXMgaXMgYWxsIGRvbmUgZm9yIG1ha2lu
ZyBpdCBwb3NzaWJsZSBmb3IgdGhlIGNvbW1pdC1xdWV1ZQorICAgICAgICB0byBydW4gdGhlIHRl
c3RzIHVzaW5nIE5XUlQgYW5kIGJlIGFibGUgdG8gdW5kZXJzdGFuZCB0aGUgcmVzdWx0cworICAg
ICAgICAoZm9yIGZsYWt5IHRlc3QgcmVwb3J0aW5nLCBldGMuKQorCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9jb21tb24vbmV0L2xheW91dHRlc3RyZXN1bHRzLnB5OgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9sYXlvdXR0ZXN0cmVzdWx0c191bml0dGVzdC5weToK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9q
c29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZXhwZWN0YXRpb25zLnB5OgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9yZXN1bHRzanNvbnBhcnNlci5weTogQWRkZWQu
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L3Jlc3VsdHNqc29ucGFyc2Vy
X3VuaXR0ZXN0LnB5OiBBZGRlZC4KKwogMjAxMS0wNC0yMSAgTWFydGluIFJvYmluc29uICA8bXJv
Ymluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gRFJUOiBpbXBsZW1lbnQgZXZlbnRT
ZW5kZXIuc2NhbGVQYWdlQnkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL25ldC9sYXlvdXR0ZXN0cmVzdWx0cy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL25ldC9sYXlvdXR0ZXN0cmVzdWx0cy5weQppbmRleCBhMGU4YWU0N2Q5M2MyMmI0M2ZiNDA1
ZmVhOWQwNmU2M2M3MjVhNGRiLi40YTVlYTQyMGM4NDM3YWQ3MDUzZGVlZGUwMDY2ZjM5NTI4M2U3
N2IyIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvbGF5b3V0
dGVzdHJlc3VsdHMucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2xh
eW91dHRlc3RyZXN1bHRzLnB5CkBAIC0yOSw2ICsyOSw3IEBACiAjIEEgbW9kdWxlIGZvciBwYXJz
aW5nIHJlc3VsdHMuaHRtbCBmaWxlcyBnZW5lcmF0ZWQgYnkgb2xkLXJ1bi13ZWJraXQtdGVzdHMK
ICMgVGhpcyBjbGFzcyBpcyBvbmUgYmlnIGhhY2sgYW5kIG9ubHkgbmVlZHMgdG8gZXhpc3QgdW50
aWwgd2UgdHJhbnNpdGlvbiB0byBuZXctcnVuLXdlYmtpdC10ZXN0cy4KIAorZnJvbSB3ZWJraXRw
eS5jb21tb24ubmV0LnJlc3VsdHNqc29ucGFyc2VyIGltcG9ydCBSZXN1bHRzSlNPTlBhcnNlcgog
ZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmRlcHJlY2F0ZWRfbG9nZ2luZyBpbXBvcnQgbG9n
CiBmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHkuQmVhdXRpZnVsU291cCBpbXBvcnQgQmVhdXRpZnVs
U291cCwgU291cFN0cmFpbmVyCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFj
a2FnZSBpbXBvcnQgdGVzdF9yZXN1bHRzCkBAIC00MSw5ICs0Miw3IEBAIGRlZiBwYXRoX2Zvcl9s
YXlvdXRfdGVzdCh0ZXN0X25hbWUpOgogICAgIHJldHVybiAiTGF5b3V0VGVzdHMvJXMiICUgdGVz
dF9uYW1lCiAKIAotIyBGSVhNRTogVGhpcyBzaG91bGQgYmUgdW5pZmllZCB3aXRoIGFsbCB0aGUg
bGF5b3V0IHRlc3QgcmVzdWx0cyBjb2RlIGluIHRoZSBsYXlvdXRfdGVzdHMgcGFja2FnZQotIyBU
aGlzIGRvZXNuJ3QgYmVsb25nIGluIGNvbW1vbi5uZXQsIGJ1dCB3ZSBkb24ndCBoYXZlIGEgYmV0
dGVyIHBsYWNlIGZvciBpdCB5ZXQuCi1jbGFzcyBMYXlvdXRUZXN0UmVzdWx0cyhvYmplY3QpOgor
Y2xhc3MgT1JXVFJlc3VsdHNIVE1MUGFyc2VyKG9iamVjdCk6CiAgICAgIiIiVGhpcyBjbGFzcyBr
bm93cyBob3cgdG8gcGFyc2Ugb2xkLXJ1bi13ZWJraXQtdGVzdHMgcmVzdWx0cy5odG1sIGZpbGVz
LiIiIgogCiAgICAgc3RkZXJyX2tleSA9IHUnVGVzdHMgdGhhdCBoYWQgc3RkZXJyIG91dHB1dDon
CkBAIC0xMTksMTUgKzExOCwyNCBAQCBjbGFzcyBMYXlvdXRUZXN0UmVzdWx0cyhvYmplY3QpOgog
ICAgICAgICByZXR1cm4gW2Nscy5fdGVzdF9yZXN1bHRfZnJvbV9yb3cocm93LCB0YWJsZV90aXRs
ZSkgZm9yIHJvdyBpbiB0YWJsZS5maW5kQWxsKCJ0ciIpXQogCiAgICAgQGNsYXNzbWV0aG9kCi0g
ICAgZGVmIF9wYXJzZV9yZXN1bHRzX2h0bWwoY2xzLCBwYWdlKToKKyAgICBkZWYgcGFyc2VfcmVz
dWx0c19odG1sKGNscywgcGFnZSk6CiAgICAgICAgIHRhYmxlcyA9IEJlYXV0aWZ1bFNvdXAocGFn
ZSkuZmluZEFsbCgidGFibGUiKQogICAgICAgICByZXR1cm4gc3VtKFtjbHMuX3BhcnNlX3Jlc3Vs
dHNfdGFibGUodGFibGUpIGZvciB0YWJsZSBpbiB0YWJsZXNdLCBbXSkKIAorCisjIEZJWE1FOiBU
aGlzIHNob3VsZCBiZSB1bmlmaWVkIHdpdGggUmVzdWx0c1N1bW1hcnkgb3Igb3RoZXIgTlJXVCBs
YXlvdXQgdGVzdHMgY29kZQorIyBpbiB0aGUgbGF5b3V0X3Rlc3RzIHBhY2thZ2UuCisjIFRoaXMg
ZG9lc24ndCBiZWxvbmcgaW4gY29tbW9uLm5ldCwgYnV0IHdlIGRvbid0IGhhdmUgYSBiZXR0ZXIg
cGxhY2UgZm9yIGl0IHlldC4KK2NsYXNzIExheW91dFRlc3RSZXN1bHRzKG9iamVjdCk6CiAgICAg
QGNsYXNzbWV0aG9kCiAgICAgZGVmIHJlc3VsdHNfZnJvbV9zdHJpbmcoY2xzLCBzdHJpbmcpOgog
ICAgICAgICBpZiBub3Qgc3RyaW5nOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAg
dGVzdF9yZXN1bHRzID0gY2xzLl9wYXJzZV9yZXN1bHRzX2h0bWwoc3RyaW5nKQorICAgICAgICAj
IEZvciBub3cgd2UgdHJ5IHRvIHBhcnNlIGZpcnN0IGFzIGpzb24sIHRoZW4gYXMgcmVzdWx0cy5o
dG1sCisgICAgICAgICMgZXZlbnR1YWxseSB3ZSB3aWxsIHJlbW92ZSB0aGUgaHRtbCBmYWxsYmFj
ayBzdXBwb3J0LgorICAgICAgICB0ZXN0X3Jlc3VsdHMgPSBSZXN1bHRzSlNPTlBhcnNlci5wYXJz
ZV9yZXN1bHRzX2pzb24oc3RyaW5nKQorICAgICAgICBpZiBub3QgdGVzdF9yZXN1bHRzOgorICAg
ICAgICAgICAgdGVzdF9yZXN1bHRzID0gT1JXVFJlc3VsdHNIVE1MUGFyc2VyLnBhcnNlX3Jlc3Vs
dHNfaHRtbChzdHJpbmcpCiAgICAgICAgIGlmIG5vdCB0ZXN0X3Jlc3VsdHM6CiAgICAgICAgICAg
ICByZXR1cm4gTm9uZQogICAgICAgICByZXR1cm4gY2xzKHRlc3RfcmVzdWx0cykKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9sYXlvdXR0ZXN0cmVzdWx0c191
bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9sYXlvdXR0ZXN0
cmVzdWx0c191bml0dGVzdC5weQppbmRleCBkMjVhZDAyZTI3YWZjMjViYTRmYzhlMmRiNDU1OWI2
NzkzMjBkZGNjLi41NTQzNjc0ODk0ZmVhM2U2YWQ0NTc2MmU5OGY5Y2NjZmVjNjFkNzYxIDEwMDY0
NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvbGF5b3V0dGVzdHJlc3Vs
dHNfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2xh
eW91dHRlc3RyZXN1bHRzX3VuaXR0ZXN0LnB5CkBAIC0yOCwxNCArMjgsMTQgQEAKIAogaW1wb3J0
IHVuaXR0ZXN0CiAKLWZyb20gd2Via2l0cHkuY29tbW9uLm5ldC5sYXlvdXR0ZXN0cmVzdWx0cyBp
bXBvcnQgTGF5b3V0VGVzdFJlc3VsdHMKK2Zyb20gd2Via2l0cHkuY29tbW9uLm5ldC5sYXlvdXR0
ZXN0cmVzdWx0cyBpbXBvcnQgTGF5b3V0VGVzdFJlc3VsdHMsIE9SV1RSZXN1bHRzSFRNTFBhcnNl
cgogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLm91dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1
dENhcHR1cmUKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9y
dCB0ZXN0X3Jlc3VsdHMKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdl
IGltcG9ydCB0ZXN0X2ZhaWx1cmVzCiBmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHkuQmVhdXRpZnVs
U291cCBpbXBvcnQgQmVhdXRpZnVsU291cAogCiAKLWNsYXNzIExheW91dFRlc3RSZXN1bHRzVGVz
dCh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBPUldUUmVzdWx0c0hUTUxQYXJzZXJUZXN0KHVu
aXR0ZXN0LlRlc3RDYXNlKToKICAgICBfZXhhbXBsZV9yZXN1bHRzX2h0bWwgPSAiIiIKIDxodG1s
PgogPGhlYWQ+CkBAIC02MSwzNCArNjEsMzggQEAgY2xhc3MgTGF5b3V0VGVzdFJlc3VsdHNUZXN0
KHVuaXR0ZXN0LlRlc3RDYXNlKToKIDwvaHRtbD4KICIiIgogCi0gICAgZGVmIHRlc3Rfc2V0X2Zh
aWx1cmVfbGltaXRfY291bnQoc2VsZik6Ci0gICAgICAgIHJlc3VsdHMgPSBMYXlvdXRUZXN0UmVz
dWx0cyhbXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzdWx0cy5mYWlsdXJlX2xpbWl0
X2NvdW50KCksIE5vbmUpCi0gICAgICAgIHJlc3VsdHMuc2V0X2ZhaWx1cmVfbGltaXRfY291bnQo
MTApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc3VsdHMuZmFpbHVyZV9saW1pdF9jb3Vu
dCgpLCAxMCkKLQogICAgIGRlZiB0ZXN0X3BhcnNlX2xheW91dF90ZXN0X3Jlc3VsdHMoc2VsZik6
CiAgICAgICAgIGZhaWx1cmVzID0gW3Rlc3RfZmFpbHVyZXMuRmFpbHVyZU1pc3NpbmdSZXN1bHQo
KSwgdGVzdF9mYWlsdXJlcy5GYWlsdXJlTWlzc2luZ0ltYWdlSGFzaCgpLCB0ZXN0X2ZhaWx1cmVz
LkZhaWx1cmVNaXNzaW5nSW1hZ2UoKV0KICAgICAgICAgdGVzdG5hbWUgPSAnZmFzdC9yZXBhaW50
L25vLWNhcmV0LXJlcGFpbnQtaW4tbm9uLWNvbnRlbnQtZWRpdGFibGUtZWxlbWVudC5odG1sJwog
ICAgICAgICBleHBlY3RlZF9yZXN1bHRzID0gW3Rlc3RfcmVzdWx0cy5UZXN0UmVzdWx0KHRlc3Ru
YW1lLCBmYWlsdXJlcyldCiAKLSAgICAgICAgcmVzdWx0cyA9IExheW91dFRlc3RSZXN1bHRzLl9w
YXJzZV9yZXN1bHRzX2h0bWwoc2VsZi5fZXhhbXBsZV9yZXN1bHRzX2h0bWwpCisgICAgICAgIHJl
c3VsdHMgPSBPUldUUmVzdWx0c0hUTUxQYXJzZXIucGFyc2VfcmVzdWx0c19odG1sKHNlbGYuX2V4
YW1wbGVfcmVzdWx0c19odG1sKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX3Jl
c3VsdHMsIHJlc3VsdHMpCiAKLSAgICBkZWYgdGVzdF9yZXN1bHRzX2Zyb21fc3RyaW5nKHNlbGYp
OgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKExheW91dFRlc3RSZXN1bHRzLnJlc3VsdHNfZnJv
bV9zdHJpbmcoTm9uZSksIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTGF5b3V0VGVz
dFJlc3VsdHMucmVzdWx0c19mcm9tX3N0cmluZygiIiksIE5vbmUpCi0gICAgICAgIHJlc3VsdHMg
PSBMYXlvdXRUZXN0UmVzdWx0cy5yZXN1bHRzX2Zyb21fc3RyaW5nKHNlbGYuX2V4YW1wbGVfcmVz
dWx0c19odG1sKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHRzLmZhaWxpbmdf
dGVzdHMoKSksIDApCiAKICAgICBkZWYgdGVzdF9mYWlsdXJlc19mcm9tX2ZhaWxfcm93KHNlbGYp
OgogICAgICAgICByb3cgPSBCZWF1dGlmdWxTb3VwKCI8dHI+PHRkPjxhPnRlc3QuaG1sPC9hPjwv
dGQ+PHRkPjxhPmV4cGVjdGVkIGltYWdlPC9hPjwvdGQ+PHRkPjxhPjI1JTwvYT48L3RkPjwvdHI+
IikKICAgICAgICAgdGVzdF9uYW1lID0gdW5pY29kZShyb3cuZmluZCgiYSIpLnN0cmluZykKICAg
ICAgICAgIyBFdmVuIGlmIHRoZSBjYWxsZXIgaGFzIGFscmVhZHkgZm91bmQgdGhlIHRlc3QgbmFt
ZSwgZmluZEFsbCBpbnNpZGUgX2ZhaWx1cmVzX2Zyb21fZmFpbF9yb3cgd2lsbCBzZWUgaXQgYWdh
aW4uCi0gICAgICAgIGZhaWx1cmVzID0gT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNl
bGYsIExheW91dFRlc3RSZXN1bHRzLl9mYWlsdXJlc19mcm9tX2ZhaWxfcm93LCBbcm93XSkKKyAg
ICAgICAgZmFpbHVyZXMgPSBPdXRwdXRDYXB0dXJlKCkuYXNzZXJ0X291dHB1dHMoc2VsZiwgT1JX
VFJlc3VsdHNIVE1MUGFyc2VyLl9mYWlsdXJlc19mcm9tX2ZhaWxfcm93LCBbcm93XSkKICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZmFpbHVyZXMpLCAxKQogICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHR5cGUoc29ydGVkKGZhaWx1cmVzKVswXSksIHRlc3RfZmFpbHVyZXMuRmFpbHVyZUlt
YWdlSGFzaE1pc21hdGNoKQogCiAgICAgICAgIHJvdyA9IEJlYXV0aWZ1bFNvdXAoIjx0cj48dGQ+
PGE+dGVzdC5obWw8L2E+PGE+Zm9vPC9hPjwvdGQ+PC90cj4iKQogICAgICAgICBleHBlY3RlZF9z
dGRlcnIgPSAiVW5oYW5kbGVkIGxpbmsgdGV4dCBpbiByZXN1bHRzLmh0bWwgcGFyc2luZzogZm9v
LiAgUGxlYXNlIGZpbGUgYSBidWcgYWdhaW5zdCB3ZWJraXRweS5cbiIKLSAgICAgICAgT3V0cHV0
Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsIExheW91dFRlc3RSZXN1bHRzLl9mYWlsdXJl
c19mcm9tX2ZhaWxfcm93LCBbcm93XSwgZXhwZWN0ZWRfc3RkZXJyPWV4cGVjdGVkX3N0ZGVycikK
KyAgICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsIE9SV1RSZXN1bHRz
SFRNTFBhcnNlci5fZmFpbHVyZXNfZnJvbV9mYWlsX3JvdywgW3Jvd10sIGV4cGVjdGVkX3N0ZGVy
cj1leHBlY3RlZF9zdGRlcnIpCisKKworY2xhc3MgTGF5b3V0VGVzdFJlc3VsdHNUZXN0KHVuaXR0
ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3NldF9mYWlsdXJlX2xpbWl0X2NvdW50KHNl
bGYpOgorICAgICAgICByZXN1bHRzID0gTGF5b3V0VGVzdFJlc3VsdHMoW10pCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKHJlc3VsdHMuZmFpbHVyZV9saW1pdF9jb3VudCgpLCBOb25lKQorICAg
ICAgICByZXN1bHRzLnNldF9mYWlsdXJlX2xpbWl0X2NvdW50KDEwKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFscyhyZXN1bHRzLmZhaWx1cmVfbGltaXRfY291bnQoKSwgMTApCisKKyAgICBkZWYg
dGVzdF9yZXN1bHRzX2Zyb21fc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KExheW91dFRlc3RSZXN1bHRzLnJlc3VsdHNfZnJvbV9zdHJpbmcoTm9uZSksIE5vbmUpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoTGF5b3V0VGVzdFJlc3VsdHMucmVzdWx0c19mcm9tX3N0cmlu
ZygiIiksIE5vbmUpCisgICAgICAgIHJlc3VsdHMgPSBMYXlvdXRUZXN0UmVzdWx0cy5yZXN1bHRz
X2Zyb21fc3RyaW5nKE9SV1RSZXN1bHRzSFRNTFBhcnNlclRlc3QuX2V4YW1wbGVfcmVzdWx0c19o
dG1sKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHRzLmZhaWxpbmdfdGVzdHMo
KSksIDApCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvcmVz
dWx0c2pzb25wYXJzZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvcmVz
dWx0c2pzb25wYXJzZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGE0YWRlMDkzOWNhNDQzMzE0OWFkYzUzNDky
OTYzM2JhN2Y0MzMxZAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL25ldC9yZXN1bHRzanNvbnBhcnNlci5weQpAQCAtMCwwICsxLDEwNyBAQAorIyBDb3B5
cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCisKK3RyeToKKyAgICBpbXBvcnQganNvbgorZXhjZXB0IEltcG9ydEVycm9y
OgorICAgICMgcHl0aG9uIDIuNSBjb21wYXRpYmlsaXR5CisgICAgaW1wb3J0IHdlYmtpdHB5LnRo
aXJkcGFydHkuc2ltcGxlanNvbiBhcyBqc29uCisKK2ltcG9ydCBpdGVydG9vbHMKKworIyBGSVhN
RTogY29tbW9uIHNob3VsZCBuZXZlciBpbXBvcnQgZnJvbSBuZXctcnVuLXdlYmtpdC10ZXN0cywg
b25lIG9mIHRoZXNlIGZpbGVzIG5lZWRzIHRvIG1vdmUuCitmcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQganNvbl9yZXN1bHRzX2dlbmVyYXRvciwgdGVzdF9l
eHBlY3RhdGlvbnMsIHRlc3RfcmVzdWx0cywgdGVzdF9mYWlsdXJlcworCisKKyMgV3JhcHBlciBh
cm91bmQgdGhlIGRpY3Rpb25hcmllcyByZXR1cm5lZCBmcm9tIHRoZSBqc29uLgorIyBFdmVudHVh
bGx5IHRoZSAuanNvbiBzaG91bGQganVzdCBzZXJpYWxpemUgdGhlIFRlc3RGYWlsdXJlIG9iamVj
dHMKKyMgZGlyZWN0bHkgYW5kIHdlIHdvbid0IG5lZWQgdGhpcy4KK2NsYXNzIEpTT05UZXN0UmVz
dWx0KG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RfbmFtZSwgcmVzdWx0X2Rp
Y3QpOgorICAgICAgICBzZWxmLl90ZXN0X25hbWUgPSB0ZXN0X25hbWUKKyAgICAgICAgc2VsZi5f
cmVzdWx0X2RpY3QgPSByZXN1bHRfZGljdAorCisgICAgZGVmIHRlc3RfcnVudGltZShzZWxmKToK
KyAgICAgICAgcmV0dXJuIHNlbGYuX3Jlc3VsdF9kaWN0LmdldCgndGltZV9tcycpCisKKyAgICBk
ZWYgZGlkX3Bhc3Moc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9hY3R1YWxfYXNfZXhwZWN0
YXRpb24oKSA9PSB0ZXN0X2V4cGVjdGF0aW9ucy5QQVNTCisKKyAgICBkZWYgX2FjdHVhbF9hc19l
eHBlY3RhdGlvbihzZWxmKToKKyAgICAgICAgYWN0dWFsX3Jlc3VsdCA9IHNlbGYuX3Jlc3VsdF9k
aWN0WydhY3R1YWwnXQorICAgICAgICAjIFRoZXJlIHNob3VsZCBhbHdheXMgYmUgb25seSBvbmUg
ZXhwZWN0YXRpb24gZm9yIGFjdHVhbAorICAgICAgICBhc3NlcnQoJyAnIG5vdCBpbiBhY3R1YWxf
cmVzdWx0KQorICAgICAgICByZXR1cm4gdGVzdF9leHBlY3RhdGlvbnMuVGVzdEV4cGVjdGF0aW9u
cy5leHBlY3RhdGlvbl9mcm9tX3N0cmluZyhhY3R1YWxfcmVzdWx0KQorCisgICAgZGVmIF9mYWls
dXJlcyhzZWxmKToKKyAgICAgICAgYWN0dWFsID0gc2VsZi5fYWN0dWFsX2FzX2V4cGVjdGF0aW9u
KCkKKyAgICAgICAgIyBGSVhNRTogVGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlIGEgZnVsbCBsaXN0
IG9mIGFsbCBwb3NzaWJsZSB2YWx1ZXMgb2YKKyAgICAgICAgIyAnYWN0dWFsJyBhbnl3aGVyZS4g
IEhvd2V2ZXIgSlNPTkxheW91dFJlc3VsdHNHZW5lcmF0b3IuRkFJTFVSRV9UT19DSEFSCisgICAg
ICAgICMgaXMgYSB1c2VmdWwgcmVmZXJlbmNlIGFzIHRoYXQncyBmb3IgIm9sZCIgc3R5bGUgcmVz
dWx0cy5qc29uIGZpbGVzCisgICAgICAgIGlmIGFjdHVhbCA9PSB0ZXN0X2V4cGVjdGF0aW9ucy5Q
QVNTOgorICAgICAgICAgICAgcmV0dXJuIFtdCisgICAgICAgIGVsaWYgYWN0dWFsID09IHRlc3Rf
ZXhwZWN0YXRpb25zLlRFWFQ6CisgICAgICAgICAgICByZXR1cm4gW3Rlc3RfZmFpbHVyZXMuRmFp
bHVyZVRleHRNaXNtYXRjaCgpXQorICAgICAgICBlbGlmIGFjdHVhbCA9PSB0ZXN0X2V4cGVjdGF0
aW9ucy5JTUFHRToKKyAgICAgICAgICAgIHJldHVybiBbdGVzdF9mYWlsdXJlcy5GYWlsdXJlSW1h
Z2VIYXNoTWlzbWF0Y2goKV0KKyAgICAgICAgZWxpZiBhY3R1YWwgPT0gdGVzdF9leHBlY3RhdGlv
bnMuSU1BR0VfUExVU19URVhUOgorICAgICAgICAgICAgcmV0dXJuIFt0ZXN0X2ZhaWx1cmVzLkZh
aWx1cmVJbWFnZUhhc2hNaXNtYXRjaCgpLCB0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVUZXh0TWlzbWF0
Y2goKV0KKyAgICAgICAgZWxpZiBhY3R1YWwgPT0gdGVzdF9leHBlY3RhdGlvbnMuQVVESU86Cisg
ICAgICAgICAgICByZXR1cm4gW3Rlc3RfZmFpbHVyZXMuRmFpbHVyZUF1ZGlvTWlzbWF0Y2goKV0K
KyAgICAgICAgZWxpZiBhY3R1YWwgPT0gdGVzdF9leHBlY3RhdGlvbnMuVElNRU9VVDoKKyAgICAg
ICAgICAgIHJldHVybiBbdGVzdF9mYWlsdXJlcy5GYWlsdXJlVGltZW91dCgpXQorICAgICAgICBl
bGlmIGFjdHVhbCA9PSB0ZXN0X2V4cGVjdGF0aW9ucy5DUkFTSDoKKyAgICAgICAgICAgIHJldHVy
biBbdGVzdF9mYWlsdXJlcy5GYWlsdXJlQ3Jhc2goKV0KKyAgICAgICAgZWxpZiBhY3R1YWwgPT0g
dGVzdF9leHBlY3RhdGlvbnMuTUlTU0lORzoKKyAgICAgICAgICAgIHJldHVybiBbdGVzdF9mYWls
dXJlcy5GYWlsdXJlTWlzc2luZ1Jlc3VsdCgpLCB0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVNaXNzaW5n
SW1hZ2VIYXNoKCksIHRlc3RfZmFpbHVyZXMuRmFpbHVyZU1pc3NpbmdJbWFnZSgpXQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgbG9nKCJGYWlsZWQgdG8gaGFuZGxlOiAlcyIgJSBzZWxmLl9y
ZXN1bHRfZGljdFsnYWN0dWFsJ10pCisgICAgICAgICAgICByZXR1cm4gW10KKworICAgIGRlZiB0
ZXN0X3Jlc3VsdChzZWxmKToKKyAgICAgICAgcmV0dXJuIHRlc3RfcmVzdWx0cy5UZXN0UmVzdWx0
KHNlbGYuX3Rlc3RfbmFtZSwgc2VsZi5fZmFpbHVyZXMoKSwgdGVzdF9ydW5fdGltZT1zZWxmLnRl
c3RfcnVudGltZSgpKQorCisKK2NsYXNzIFJlc3VsdHNKU09OUGFyc2VyKG9iamVjdCk6CisgICAg
IiIiUGFyc2UgdW5leHBlY3RlZF9yZXN1bHRzLmpzb24gZmlsZXMgZnJvbSBuZXctcnVuLXdlYmtp
dC10ZXN0cworICAgIFRoaXMgd2lsbCBub3QgcGFyc2UgdGhlIG9sZCByZXN1bHRzLmpzb24gZm9y
bWF0LiIiIgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHBhcnNlX3Jlc3VsdHNfanNvbihj
bHMsIGpzb25fc3RyaW5nKToKKyAgICAgICAgaWYgbm90IGpzb25fcmVzdWx0c19nZW5lcmF0b3Iu
aGFzX2pzb25fd3JhcHBlcihqc29uX3N0cmluZyk6CisgICAgICAgICAgICByZXR1cm4gTm9uZQor
CisgICAgICAgIGNvbnRlbnRfc3RyaW5nID0ganNvbl9yZXN1bHRzX2dlbmVyYXRvci5zdHJpcF9q
c29uX3dyYXBwZXIoanNvbl9zdHJpbmcpCisgICAgICAgIGpzb25fZGljdCA9IGpzb24ubG9hZHMo
Y29udGVudF9zdHJpbmcpCisKKyAgICAgICAganNvbl9yZXN1bHRzID0gW0pTT05UZXN0UmVzdWx0
KHRlc3RfbmFtZSwgcmVzdWx0c19kaWN0KSBmb3IgdGVzdF9uYW1lLCByZXN1bHRzX2RpY3QgaW4g
anNvbl9kaWN0Wyd0ZXN0cyddLml0ZW1zKCldCisgICAgICAgICMgRklYTUU6IFdoYXQncyB0aGUg
c2hvcnQgc2V4eSBweXRob24gd2F5IHRvIGZpbHRlciBOb25lPworICAgICAgICAjIEkgd291bGQg
dXNlIFtmb28uYmFyKCkgZm9yIGZvbyBpbiBmb29zIGlmIGZvby5iYXIoKV0gYnV0IGJhcigpIGlz
IGV4cGVuc2l2ZS4KKyAgICAgICAgbm9uX3Bhc3NpbmdfcmVzdWx0cyA9IFtyZXN1bHQudGVzdF9y
ZXN1bHQoKSBmb3IgcmVzdWx0IGluIGpzb25fcmVzdWx0cyBpZiBub3QgcmVzdWx0LmRpZF9wYXNz
KCldCisgICAgICAgIHJldHVybiBpdGVydG9vbHMuaWZpbHRlcihsYW1iZGEgYTogYSwgbm9uX3Bh
c3NpbmdfcmVzdWx0cykKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L25ldC9yZXN1bHRzanNvbnBhcnNlcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL25ldC9yZXN1bHRzanNvbnBhcnNlcl91bml0dGVzdC5weQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4y
ZmZiNzVmMTE3NGUzYTg3Nzc1NWI3ZjA5MjUzNTg3YjQwMjZjMDk0Ci0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L3Jlc3VsdHNqc29ucGFyc2VyX3Vu
aXR0ZXN0LnB5CkBAIC0wLDAgKzEsNzMgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisj
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisj
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHVu
aXR0ZXN0CisKK2Zyb20gd2Via2l0cHkuY29tbW9uLm5ldC5yZXN1bHRzanNvbnBhcnNlciBpbXBv
cnQgUmVzdWx0c0pTT05QYXJzZXIKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5vdXRwdXRj
YXB0dXJlIGltcG9ydCBPdXRwdXRDYXB0dXJlCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5s
YXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9yZXN1bHRzCitmcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9mYWlsdXJlcworZnJvbSB3ZWJraXRweS50
aGlyZHBhcnR5LkJlYXV0aWZ1bFNvdXAgaW1wb3J0IEJlYXV0aWZ1bFNvdXAKKworCitjbGFzcyBS
ZXN1bHRzSlNPTlBhcnNlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGhlIHJlYWwg
ZmlsZXMgaGF2ZSBubyB3aGl0ZXNwYWNlLCBidXQgbmV3bGluZXMgbWFrZSB0aGlzIG11Y2ggbW9y
ZSByZWFkYWJsZS4KKyAgICBfZXhhbXBsZV91bmV4cGVjdGVkX3Jlc3VsdHNfanNvbiA9ICIiIkFE
RF9SRVNVTFRTKHsKKyAgICAidGVzdHMiOiB7CisgICAgICAgICJmYXN0XC9kb21cL3Byb3RvdHlw
ZS1pbmhlcml0YW5jZS5odG1sIjogeworICAgICAgICAgICAgImV4cGVjdGVkIjogIlBBU1MiLAor
ICAgICAgICAgICAgInRpbWVfbXMiOiAyMjUsCisgICAgICAgICAgICAiYWN0dWFsIjogIlRFWFQi
LAorICAgICAgICAgICAgImhhc19zdGRlcnIiOiBmYWxzZQorICAgICAgICB9LAorICAgICAgICAi
c3ZnXC9keW5hbWljLXVwZGF0ZXNcL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQtZG9tLXN0ZERldmlh
dGlvbi1hdHRyLmh0bWwiOiB7CisgICAgICAgICAgICAiZXhwZWN0ZWQiOiAiUEFTUyIsCisgICAg
ICAgICAgICAidGltZV9tcyI6IDExMCwKKyAgICAgICAgICAgICJhY3R1YWwiOiAiSU1BR0UiLAor
ICAgICAgICAgICAgImhhc19zdGRlcnIiOiBmYWxzZQorICAgICAgICB9CisgICAgfSwKKyAgICAi
c2tpcHBlZCI6IDQ1MCwKKyAgICAibnVtX3JlZ3Jlc3Npb25zIjogMTUsCisgICAgImxheW91dF90
ZXN0c19kaXIiOiAiXC9iXC9idWlsZFwvc2xhdmVcL1dlYmtpdF9NYWMxMF81XC9idWlsZFwvc3Jj
XC90aGlyZF9wYXJ0eVwvV2ViS2l0XC9MYXlvdXRUZXN0cyIsCisgICAgInZlcnNpb24iOiAxLAor
ICAgICJudW1fcGFzc2VzIjogNzcsCisgICAgImhhc19wcmV0dHlfcGF0Y2giOiBmYWxzZSwKKyAg
ICAiZml4YWJsZSI6IDEyMjAsCisgICAgIm51bV9mbGFreSI6IDAsCisgICAgInVzZXNfZXhwZWN0
YXRpb25zX2ZpbGUiOiB0cnVlLAorICAgICJoYXNfd2RpZmYiOiBmYWxzZQorfSk7IiIiCisKKyAg
ICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKKyAgICAgICAgZXhwZWN0ZWRfcmVzdWx0cyA9IFsKKyAg
ICAgICAgICAgIHRlc3RfcmVzdWx0cy5UZXN0UmVzdWx0KCJzdmcvZHluYW1pYy11cGRhdGVzL1NW
R0ZFRHJvcFNoYWRvd0VsZW1lbnQtZG9tLXN0ZERldmlhdGlvbi1hdHRyLmh0bWwiLCBbdGVzdF9m
YWlsdXJlcy5GYWlsdXJlSW1hZ2VIYXNoTWlzbWF0Y2goKV0sIDExMCksCisgICAgICAgICAgICB0
ZXN0X3Jlc3VsdHMuVGVzdFJlc3VsdCgiZmFzdC9kb20vcHJvdG90eXBlLWluaGVyaXRhbmNlLmh0
bWwiLCBbdGVzdF9mYWlsdXJlcy5GYWlsdXJlVGV4dE1pc21hdGNoKCldLCAyMjUpLAorICAgICAg
ICBdCisgICAgICAgIHJlc3VsdHMgPSBSZXN1bHRzSlNPTlBhcnNlci5wYXJzZV9yZXN1bHRzX2pz
b24oc2VsZi5fZXhhbXBsZV91bmV4cGVjdGVkX3Jlc3VsdHNfanNvbikKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChleHBlY3RlZF9yZXN1bHRzLCBsaXN0KHJlc3VsdHMpKQpkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9y
ZXN1bHRzX2dlbmVyYXRvci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3IucHkKaW5kZXggZTdmODA0Zjhm
NmI3ZjA2ZmI3NzllZDIwNzJjYzI0Y2VhMzY3NjE2Yy4uNGNlM2YxZGNlNzc3NGU4YTVmNWEzM2Ez
NjJiZjlhZGY2N2ZlMjgzNiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weQorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jl
c3VsdHNfZ2VuZXJhdG9yLnB5CkBAIC00Niw2ICs0NiwxMCBAQCBfSlNPTl9QUkVGSVggPSAiQURE
X1JFU1VMVFMoIgogX0pTT05fU1VGRklYID0gIik7IgogCiAKK2RlZiBoYXNfanNvbl93cmFwcGVy
KHN0cmluZyk6CisgICAgcmV0dXJuIHN0cmluZy5zdGFydHN3aXRoKF9KU09OX1BSRUZJWCkgYW5k
IHN0cmluZy5lbmRzd2l0aChfSlNPTl9TVUZGSVgpCisKKwogZGVmIHN0cmlwX2pzb25fd3JhcHBl
cihqc29uX2NvbnRlbnQpOgogICAgIHJldHVybiBqc29uX2NvbnRlbnRbbGVuKF9KU09OX1BSRUZJ
WCk6bGVuKGpzb25fY29udGVudCkgLSBsZW4oX0pTT05fU1VGRklYKV0KIApkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9l
eHBlY3RhdGlvbnMucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS90ZXN0X2V4cGVjdGF0aW9ucy5weQppbmRleCBhNDA3ZWNjNGVmMTZkZGNiMjg3
NDY2MmIwZTAwNmQ0YzlhOTYwZGY4Li4zZjA3YWMzZDk0ZDNmY2ZhM2VkZDIxNDc1NTllZDQxZDc0
MmQ3YThkIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9s
YXlvdXRfcGFja2FnZS90ZXN0X2V4cGVjdGF0aW9ucy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2V4cGVjdGF0aW9ucy5weQpA
QCAtNDEsNiArNDEsOCBAQCBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoIndlYmtpdHB5LmxheW91
dF90ZXN0cy5sYXlvdXRfcGFja2FnZS4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rf
ZXhwZWN0YXRpb25zIikKIAogIyBUZXN0IGV4cGVjdGF0aW9uIGFuZCBtb2RpZmllciBjb25zdGFu
dHMuCisjIEZJWE1FOiByYW5nZSgpIHN0YXJ0cyB3aXRoIDAgd2hpY2ggbWFrZXMgaWYgZXhwZWN0
YXRpb24gY2hlY2tzIGhhcmRlcgorIyBhcyBQQVNTIGlzIDAuCiAoUEFTUywgRkFJTCwgVEVYVCwg
SU1BR0UsIElNQUdFX1BMVVNfVEVYVCwgQVVESU8sIFRJTUVPVVQsIENSQVNILCBTS0lQLCBXT05U
RklYLAogIFNMT1csIFJFQkFTRUxJTkUsIE1JU1NJTkcsIEZMQUtZLCBOT1csIE5PTkUpID0gcmFu
Z2UoMTYpCiAKQEAgLTE0Nyw2ICsxNDksMTEgQEAgY2xhc3MgVGVzdEV4cGVjdGF0aW9uczoKICAg
ICAgICAgICAgICAgICByZXR1cm4gaXRlbVswXS51cHBlcigpCiAgICAgICAgIHJhaXNlIFZhbHVl
RXJyb3IoZXhwZWN0YXRpb24pCiAKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZXhwZWN0YXRp
b25fZnJvbV9zdHJpbmcoY2xzLCBzdHJpbmcpOgorICAgICAgICBhc3NlcnQoJyAnIG5vdCBpbiBz
dHJpbmcpICAjIFRoaXMgb25seSBoYW5kbGVzIG9uZSBleHBlY3RhdGlvbiBhdCBhIHRpbWUuCisg
ICAgICAgIHJldHVybiBUZXN0RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTlMuZ2V0KHN0cmlu
Zy5sb3dlcigpKQorCiAgICAgZGVmIGdldF90ZXN0c193aXRoX3Jlc3VsdF90eXBlKHNlbGYsIHJl
c3VsdF90eXBlKToKICAgICAgICAgcmV0dXJuIHNlbGYuX2V4cGVjdGVkX2ZhaWx1cmVzLmdldF90
ZXN0c193aXRoX3Jlc3VsdF90eXBlKHJlc3VsdF90eXBlKQogCkBAIC01MzEsMTEgKzUzOCwxMCBA
QCBjbGFzcyBUZXN0RXhwZWN0YXRpb25zRmlsZToKICAgICBkZWYgX3BhcnNlX2V4cGVjdGF0aW9u
cyhzZWxmLCBleHBlY3RhdGlvbnMsIGxpbmVubywgdGVzdF9saXN0X3BhdGgpOgogICAgICAgICBy
ZXN1bHQgPSBzZXQoKQogICAgICAgICBmb3IgcGFydCBpbiBleHBlY3RhdGlvbnM6Ci0gICAgICAg
ICAgICBpZiBub3QgcGFydCBpbiBzZWxmLkVYUEVDVEFUSU9OUzoKLSAgICAgICAgICAgICAgICBz
ZWxmLl9hZGRfZXJyb3IobGluZW5vLCAnVW5zdXBwb3J0ZWQgZXhwZWN0YXRpb246ICVzJyAlIHBh
cnQsCi0gICAgICAgICAgICAgICAgICAgIHRlc3RfbGlzdF9wYXRoKQorICAgICAgICAgICAgZXhw
ZWN0YXRpb24gPSBUZXN0RXhwZWN0YXRpb25zLmV4cGVjdGF0aW9uX2Zyb21fc3RyaW5nKHBhcnQp
CisgICAgICAgICAgICBpZiBleHBlY3RhdGlvbiBpcyBOb25lOiAgIyBDYXJlZnVsLCBQQVNTIGlz
IGN1cnJlbnRseSAwLgorICAgICAgICAgICAgICAgIHNlbGYuX2FkZF9lcnJvcihsaW5lbm8sICdV
bnN1cHBvcnRlZCBleHBlY3RhdGlvbjogJXMnICUgcGFydCwgdGVzdF9saXN0X3BhdGgpCiAgICAg
ICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGV4cGVjdGF0aW9uID0gc2VsZi5FWFBF
Q1RBVElPTlNbcGFydF0KICAgICAgICAgICAgIHJlc3VsdC5hZGQoZXhwZWN0YXRpb24pCiAgICAg
ICAgIHJldHVybiByZXN1bHQKIAo=
</data>
<flag name="review"
          id="83416"
          type_id="1"
          status="+"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="83417"
          type_id="3"
          status="-"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>