<?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>64141</bug_id>
          
          <creation_ts>2011-07-07 18:09:40 -0700</creation_ts>
          <short_desc>Teach garden-o-matic how to display test results</short_desc>
          <delta_ts>2011-07-08 12:26:37 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</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>
          
          <blocked>64188</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>ojan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>433833</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-07 18:09:40 -0700</bug_when>
    <thetext>Teach garden-o-matic how to display test results</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433835</commentid>
    <comment_count>1</comment_count>
      <attachid>100057</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-07 18:10:23 -0700</bug_when>
    <thetext>Created attachment 100057
Work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433850</commentid>
    <comment_count>2</comment_count>
      <attachid>100062</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-07 18:48:45 -0700</bug_when>
    <thetext>Created attachment 100062
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433856</commentid>
    <comment_count>3</comment_count>
      <attachid>100062</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-07-07 19:10:50 -0700</bug_when>
    <thetext>Comment on attachment 100062
Patch

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

Yay for tests!

&gt; Tools/ChangeLog:7
&gt; +

Wouldn&apos;t hurt to give a bit more description here, e.g. as to how this all works. The code isn&apos;t especially hard for me to understand given it&apos;s ancestry, but the way it works at a high-level is maybe not immediately obvious.

&gt; Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/base.js:50
&gt; +base.probe = function(url, options)

s/options/handlers? and maybe change success-&gt;onsuccess and error-&gt;onerror?

&gt; Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/base.js:55
&gt; +        if ($.isFunction(options.success))

checking that it&apos;s a function seems excessive to me. bulks up the code. I think it should be sufficient to just check &quot;if (options.success)&quot;

&gt; Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/base.js:56
&gt; +            options.success.call();

Can&apos;t you just call options.success()?

&gt; Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/base.js:60
&gt; +        if ($.isFunction(options.error))

ditto: if (options.error)

&gt; Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/base.js:61
&gt; +            options.error.call();

options.error()?

&gt; Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/index.html:54
&gt; +.results iframe {
&gt; +  width: 400px;
&gt; +  height: 300px;
&gt; +}
&gt; +.results img {
&gt; +  width: 400px;
&gt; +  height: 300px;
&gt; +}

.results iframe,
.results img {
...
}

&gt; Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:13
&gt; +var kPossibleSuffixList = [

Because of reftests, there are -expected.html and -expected-mismatch.html and for audio tests you&apos;ll need -expected.wav and -actual.wav.

You might want to look at http://trac.webkit.org/browser/trunk/LayoutTests/fast/harness/results.html as a reference for some of this stuff.

&gt; Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:132
&gt; +results.resultKind = function(url)
&gt; +{
&gt; +    if (/-actual\.[a-z]+$/.test(url))
&gt; +        return &apos;actual&apos;;
&gt; +    else if (/-expected\.[a-z]+$/.test(url))
&gt; +        return &apos;expected&apos;;
&gt; +    else if (/diff\.[a-z]+$/.test(url))
&gt; +        return &apos;diff&apos;;
&gt; +    return &apos;unknown&apos;;
&gt; +}
&gt; +
&gt; +results.resultType = function(url)
&gt; +{
&gt; +    if (/\.png$/.test(url))
&gt; +        return &apos;image&apos;;
&gt; +    return &apos;text&apos;;

Would prefer for these strings to be constants.

&gt; Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:135
&gt; +function sortResultURLs(urls)

I&apos;m confused by this name. This looks more like it filters than sorts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433860</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-07 19:16:09 -0700</bug_when>
    <thetext>Thanks for the review.

&gt; &gt; Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/base.js:56
&gt; &gt; +            options.success.call();
&gt; 
&gt; Can&apos;t you just call options.success()?

We can, but then the |this| value will be bound to |options|, which leaks an implementation detail.

&gt; &gt; Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:13
&gt; &gt; +var kPossibleSuffixList = [
&gt; 
&gt; Because of reftests, there are -expected.html and -expected-mismatch.html and for audio tests you&apos;ll need -expected.wav and -actual.wav.

I&apos;m not going to worry about that stuff yet.  The truth is that there are only four reftests total in the whole project.  Basic stuff first.  Complicated things later.

&gt; &gt; Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:135
&gt; &gt; +function sortResultURLs(urls)
&gt; 
&gt; I&apos;m confused by this name. This looks more like it filters than sorts.

It sorts.  I should add an ASSERT that we end up returning all the URLs we started with.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433863</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-07 19:19:33 -0700</bug_when>
    <thetext>&gt; &gt; Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/base.js:50
&gt; &gt; +base.probe = function(url, options)
&gt; 
&gt; s/options/handlers? and maybe change success-&gt;onsuccess and error-&gt;onerror?

I&apos;m just matching jQuery style here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433864</commentid>
    <comment_count>6</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-07-07 19:21:12 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Thanks for the review.
&gt; 
&gt; &gt; &gt; Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/base.js:56
&gt; &gt; &gt; +            options.success.call();
&gt; &gt; 
&gt; &gt; Can&apos;t you just call options.success()?
&gt; 
&gt; We can, but then the |this| value will be bound to |options|, which leaks an implementation detail.

Fair enough.

&gt; &gt; &gt; Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:13
&gt; &gt; &gt; +var kPossibleSuffixList = [
&gt; &gt; 
&gt; &gt; Because of reftests, there are -expected.html and -expected-mismatch.html and for audio tests you&apos;ll need -expected.wav and -actual.wav.
&gt; 
&gt; I&apos;m not going to worry about that stuff yet.  The truth is that there are only four reftests total in the whole project.  Basic stuff first.  Complicated things later.

I&apos;m fine with that, but it&apos;d be good add them to the FIXME. Now that nearly everyone is on NRWT, I think we can start writing reftests, so I expect that number to change quickly.

&gt; &gt; &gt; Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:135
&gt; &gt; &gt; +function sortResultURLs(urls)
&gt; &gt; 
&gt; &gt; I&apos;m confused by this name. This looks more like it filters than sorts.
&gt; 
&gt; It sorts.  I should add an ASSERT that we end up returning all the URLs we started with.

Oh, I see. It sorts by suffix type? Could use a better name. I would expect sort to sort them lexicographically.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433868</commentid>
    <comment_count>7</comment_count>
      <attachid>100066</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-07 19:26:56 -0700</bug_when>
    <thetext>Created attachment 100066
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434109</commentid>
    <comment_count>8</comment_count>
      <attachid>100066</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-07-08 09:47:26 -0700</bug_when>
    <thetext>Comment on attachment 100066
Patch

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

&gt; Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:30
&gt; +        var fragment = type == &apos;image&apos; ? &apos;&lt;img&gt;&apos; : &apos;&lt;iframe&gt;&lt;/iframe&gt;&apos;;

s/&apos;image&apos;/kImageType/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434232</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-08 12:26:37 -0700</bug_when>
    <thetext>Committed r90652: &lt;http://trac.webkit.org/changeset/90652&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100057</attachid>
            <date>2011-07-07 18:10:23 -0700</date>
            <delta_ts>2011-07-07 18:48:42 -0700</delta_ts>
            <desc>Work in progress</desc>
            <filename>bug-64141-20110707181021.patch</filename>
            <type>text/plain</type>
            <size>10170</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDkwNjA0KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTcgQEAKKzIwMTEtMDctMDcgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBUZWFjaCBnYXJkZW4tby1tYXRpYyBob3cgdG8gZGlzcGxheSB0ZXN0IHJlc3VsdHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0MTQxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3Rvb2wvc2VydmVycy9kYXRhL2dhcmRlbmluZ3NlcnZlci9iYXNlLmpzOgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2RhdGEvZ2FyZGVuaW5nc2VydmVy
L2luZGV4Lmh0bWw6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZGF0
YS9nYXJkZW5pbmdzZXJ2ZXIvbWFpbi5qczoKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rv
b2wvc2VydmVycy9kYXRhL2dhcmRlbmluZ3NlcnZlci9yZXN1bHRzLmpzOgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2RhdGEvZ2FyZGVuaW5nc2VydmVyL3VpLmpzOgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2RhdGEvZ2FyZGVuaW5nc2Vy
dmVyL3VpX3VuaXR0ZXN0cy5qczoKKwogMjAxMS0wNy0wNyAgQWRhbSBSb2JlbiAgPGFyb2JlbkBh
cHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlIFRlc3RGYWlsdXJlcydzIHRpdGxlIGFuZCBoZWFk
ZXIgaW1tZWRpYXRlbHkgdXBvbiBuYXZpZ2F0aW9uCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3Rvb2wvc2VydmVycy9kYXRhL2dhcmRlbmluZ3NlcnZlci9iYXNlLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2RhdGEvZ2FyZGVuaW5nc2Vy
dmVyL2Jhc2UuanMJKHJldmlzaW9uIDkwNTg2KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS90
b29sL3NlcnZlcnMvZGF0YS9nYXJkZW5pbmdzZXJ2ZXIvYmFzZS5qcwkod29ya2luZyBjb3B5KQpA
QCAtMiwxMSArMiwyNCBAQCB2YXIgYmFzZSA9IGJhc2UgfHwge307CiAKIChmdW5jdGlvbigpewog
CitiYXNlLmVuZHNXaXRoID0gZnVuY3Rpb24oc3RyaW5nLCBzdWZmaXgpCit7CisgICAgaWYgKHN1
ZmZpeC5sZW5ndGggPiBzdHJpbmcubGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
dmFyIGV4cGVjdGVkSW5kZXggPSBzdHJpbmcubGVuZ3RoIC0gc3VmZml4Lmxlbmd0aDsKKyAgICBy
ZXR1cm4gc3RyaW5nLmxhc3RJbmRleE9mKHN1ZmZpeCkgPT0gZXhwZWN0ZWRJbmRleDsKK307CisK
IGJhc2Uuam9pblBhdGggPSBmdW5jdGlvbihwYXJlbnQsIGNoaWxkKQogewogICAgIGlmIChwYXJl
bnQubGVuZ3RoID09IDApCiAgICAgICAgIHJldHVybiBjaGlsZDsKICAgICByZXR1cm4gcGFyZW50
ICsgJy8nICsgY2hpbGQ7Cit9OworCitiYXNlLnRyaW1FeHRlbnNpb24gPSBmdW5jdGlvbih1cmwp
Cit7CisgICAgcmV0dXJuIHVybC5zdWJzdHIoMCwgdXJsLmxhc3RJbmRleE9mKCcuJykpOwogfQog
CiBiYXNlLmZpbHRlclRyZWUgPSBmdW5jdGlvbih0cmVlLCBpc0xlYWYsIHByZWRpY2F0ZSkKQEAg
LTI5LDYgKzQyLDIzIEBAIGJhc2UuZmlsdGVyVHJlZSA9IGZ1bmN0aW9uKHRyZWUsIGlzTGVhZiwK
IAogICAgIHdhbGtTdWJ0cmVlKHRyZWUsICcnKTsKICAgICByZXR1cm4gZmlsdGVyZWRUcmVlOwot
fQorfTsKKworYmFzZS5wcm9iZSA9IGZ1bmN0aW9uKHVybCwgb3B0aW9ucykKK3sKKyAgICB2YXIg
c2NyaXB0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOworICAgIHNj
cmlwdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uKCkgeworICAgICAg
ICAkKHNjcmlwdEVsZW1lbnQpLmRldGFjaCgpOworICAgICAgICBpZiAoJC5pc0Z1bmN0aW9uKG9w
dGlvbnMuc3VjY2VzcykpCisgICAgICAgICAgICBvcHRpb25zLnN1Y2Nlc3MoKTsKKyAgICB9LCBm
YWxzZSk7CisgICAgc2NyaXB0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGZ1bmN0
aW9uKCkgeworICAgICAgICAkKHNjcmlwdEVsZW1lbnQpLmRldGFjaCgpOworICAgICAgICBpZiAo
JC5pc0Z1bmN0aW9uKG9wdGlvbnMuZXJyb3IpKQorICAgICAgICAgICAgb3B0aW9ucy5lcnJvcigp
OworICAgIH0sIGZhbHNlKTsKKyAgICBzY3JpcHRFbGVtZW50LnNyYyA9IHVybDsKKyAgICBkb2N1
bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdEVsZW1lbnQpOworfTsKIAogfSkoKTsKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2RhdGEvZ2FyZGVuaW5nc2VydmVy
L2luZGV4Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3Nl
cnZlcnMvZGF0YS9nYXJkZW5pbmdzZXJ2ZXIvaW5kZXguaHRtbAkocmV2aXNpb24gOTA1ODYpCisr
KyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9kYXRhL2dhcmRlbmluZ3NlcnZl
ci9pbmRleC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMCArNDAsMTggQEAgaDEgewogLmZh
aWx1cmVzIC5idWlsZGVycyB7CiAgIGNvbG9yOiAjODg4OwogfQotLmZhaWx1cmVzIC5idWlsZGVy
TmFtZSwgLmZhaWx1cmVzIC5hY3R1YWwgeworLmJ1aWxkZXIgLmJ1aWxkZXJOYW1lLCAuYnVpbGRl
ciAuYWN0dWFsIHsKICAgZmxvYXQ6IGxlZnQ7CiAgIHdpZHRoOiAyMDBweDsKIH0KKy5yZXN1bHRz
IGlmcmFtZSB7CisgIHdpZHRoOiA0MDBweDsKKyAgaGVpZ2h0OiAzMDBweDsKK30KKy5yZXN1bHRz
IGltZyB7CisgIHdpZHRoOiA0MDBweDsKKyAgaGVpZ2h0OiAzMDBweDsKK30KIDwvc3R5bGU+CiA8
bGluayByZWw9Imljb24iIGlkPSJmYXZpY29uIiB0eXBlPSJpbWFnZS9wbmciIGhyZWY9ImZhdmlj
b24tZ3JlZW4ucG5nIj4KIDwvaGVhZD4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9v
bC9zZXJ2ZXJzL2RhdGEvZ2FyZGVuaW5nc2VydmVyL21haW4uanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZGF0YS9nYXJkZW5pbmdzZXJ2ZXIvbWFp
bi5qcwkocmV2aXNpb24gOTA1ODYpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2Vy
dmVycy9kYXRhL2dhcmRlbmluZ3NlcnZlci9tYWluLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xNywy
MCArMTcsMzMgQEAgZnVuY3Rpb24gc2V0SWNvblN0YXRlKGhhc0ZhaWx1cmVzKQogewogICAgIHZh
ciBmYXZpY29uVVJMID0gJ2Zhdmljb24tJyArIChoYXNGYWlsdXJlcyA/ICdyZWQnIDogJ2dyZWVu
JykgKyAnLnBuZyc7CiAgICAgJCgnI2Zhdmljb24nKS5hdHRyKCdocmVmJywgZmF2aWNvblVSTCk7
Ci19OworfQogCiBmdW5jdGlvbiBmZXRjaFJlc3VsdHMob25zdWNjZXNzKQogewogICAgIHJlc3Vs
dHMuZmV0Y2hSZXN1bHRzQnlCdWlsZGVyKGNvbmZpZy5idWlsZGVycywgZnVuY3Rpb24ocmVzdWx0
c0J5QnVpbGRlcikgewotICAgICAgICB2YXIgdW5leHBlY3RlZEZhaWx1cmVzID0gdWkucmVzdWx0
c0J5VGVzdChyZXN1bHRzLnVuZXhwZWN0ZWRGYWlsdXJlc0J5VGVzdChyZXN1bHRzQnlCdWlsZGVy
KSk7CisgICAgICAgIHZhciB1bmV4cGVjdGVkRmFpbHVyZXMgPSB1aS5zdW1tYXJpemVSZXN1bHRz
QnlUZXN0KHJlc3VsdHMudW5leHBlY3RlZEZhaWx1cmVzQnlUZXN0KHJlc3VsdHNCeUJ1aWxkZXIp
KTsKICAgICAgICAgJCgnLmZhaWx1cmVzJykuYXBwZW5kKHVuZXhwZWN0ZWRGYWlsdXJlcyk7CiAg
ICAgICAgIG9uc3VjY2VzcygpOwogICAgIH0pOwogICAgIHNldEljb25TdGF0ZSgkKCcuZmFpbHVy
ZXMnKS5sZW5ndGgpOwogfQogCitmdW5jdGlvbiBleHBhbmRSZXN1bHRzKCkKK3sKKyAgICB2YXIg
cmVzdWx0c1N1bW1hcnkgPSAkKHRoaXMpOworICAgIHZhciB0ZXN0TmFtZSA9ICQoJy50ZXN0TmFt
ZScsIHJlc3VsdHNTdW1tYXJ5KS50ZXh0KCk7CisgICAgJCgnLmJ1aWxkZXJOYW1lJywgcmVzdWx0
c1N1bW1hcnkpLmVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBidWlsZGVyTmFtZSA9ICQo
dGhpcykudGV4dCgpOworICAgICAgICByZXN1bHRzLmZldGNoUmVzdWx0c1VSTHMoYnVpbGRlck5h
bWUsIHRlc3ROYW1lLCBmdW5jdGlvbihyZXN1bHRVUkxzKSB7CisgICAgICAgICAgICByZXN1bHRz
U3VtbWFyeS5hcHBlbmQodWkucmVzdWx0cyhyZXN1bHRVUkxzKSk7CisgICAgICAgIH0pOworICAg
IH0pOworfQorCiAkKCcuaGlkZScpLmxpdmUoJ2NsaWNrJywgaGlkZSk7CiAkKCcucXVpdCcpLmxp
dmUoJ2NsaWNrJywgcXVpdCk7CiskKCcucmVzdWx0cy1zdW1tYXJ5IC50ZXN0JykubGl2ZSgnY2xp
Y2snLCBleHBhbmRSZXN1bHRzKTsKIAogJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CiAg
ICAgZmV0Y2hSZXN1bHRzKGZ1bmN0aW9uKCkgewpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90b29sL3NlcnZlcnMvZGF0YS9nYXJkZW5pbmdzZXJ2ZXIvcmVzdWx0cy5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9kYXRhL2dhcmRlbmluZ3Nl
cnZlci9yZXN1bHRzLmpzCShyZXZpc2lvbiA5MDU4NikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdG9vbC9zZXJ2ZXJzL2RhdGEvZ2FyZGVuaW5nc2VydmVyL3Jlc3VsdHMuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTcsNiArNyw5IEBAIHZhciBrVGVzdFR5cGUgPSAnbGF5b3V0LXRlc3RzJzsKIHZh
ciBrUmVzdWx0c05hbWUgPSAnZnVsbF9yZXN1bHRzLmpzb24nOwogdmFyIGtNYXN0ZXJOYW1lID0g
J0Nocm9taXVtV2Via2l0JzsKIAordmFyIGtMYXlvdXRUZXN0UmVzdWx0c1NlcnZlciA9ICdodHRw
Oi8vYnVpbGQuY2hyb21pdW0ub3JnL2YvY2hyb21pdW0vbGF5b3V0X3Rlc3RfcmVzdWx0cy8nOwor
dmFyIGtMYXlvdXRUZXN0UmVzdWx0c1BhdGggPSAnL3Jlc3VsdHMvbGF5b3V0LXRlc3QtcmVzdWx0
cy8nOworCiB2YXIgUEFTUyA9ICdQQVNTJzsKIHZhciBUSU1FT1VUID0gJ1RJTUVPVVQnOwogdmFy
IFRFWFQgPSAnVEVYVCc7CkBAIC04OSw3ICs5Miw4NSBAQCByZXN1bHRzLnVuZXhwZWN0ZWRGYWls
dXJlc0J5VGVzdCA9IGZ1bmN0CiAgICAgcmV0dXJuIHVuZXhwZWN0ZWRGYWlsdXJlczsKIH07CiAK
LWZ1bmN0aW9uIHJlc3VsdHNVUkwoYnVpbGRlck5hbWUsIG5hbWUpCitmdW5jdGlvbiByZXN1bHRz
RGlyZWN0b3J5Rm9yQnVpbGRlcihidWlsZGVyTmFtZSkKK3sKKyAgICByZXR1cm4gYnVpbGRlck5h
bWUucmVwbGFjZSgvWyAuKCldL2csICdfJyk7Cit9CisKK2Z1bmN0aW9uIHJlc3VsdHNEaXJlY3Rv
cnlVUkwoYnVpbGRlck5hbWUpCit7CisgICAgcmV0dXJuIGtMYXlvdXRUZXN0UmVzdWx0c1NlcnZl
ciArIHJlc3VsdHNEaXJlY3RvcnlGb3JCdWlsZGVyKGJ1aWxkZXJOYW1lKSArIGtMYXlvdXRUZXN0
UmVzdWx0c1BhdGg7Cit9CisKK3Jlc3VsdHMucmVzdWx0S2luZCA9IGZ1bmN0aW9uKHVybCkKK3sK
KyAgICBpZiAoLy1hY3R1YWxcLlthLXpdKyQvLnRlc3QodXJsKSkKKyAgICAgICAgcmV0dXJuICdh
Y3R1YWwnOworICAgIGVsc2UgaWYgKC8tZXhwZWN0ZWRcLlthLXpdKyQvLnRlc3QodXJsKSkKKyAg
ICAgICAgcmV0dXJuICdleHBlY3RlZCc7CisgICAgZWxzZSBpZiAoL2RpZmZcLlthLXpdKyQvLnRl
c3QodXJsKSkKKyAgICAgICAgcmV0dXJuICdkaWZmJzsKKyAgICByZXR1cm4gJ3Vua25vd24nOwor
fQorCityZXN1bHRzLnJlc3VsdFR5cGUgPSBmdW5jdGlvbih1cmwpCit7CisgICAgaWYgKC9cLnBu
ZyQvLnRlc3QodXJsKSkKKyAgICAgICAgcmV0dXJuICdpbWFnZSc7CisgICAgcmV0dXJuICd0ZXh0
JzsKK30KKworcmVzdWx0cy5mZXRjaFJlc3VsdHNVUkxzID0gZnVuY3Rpb24oYnVpbGRlck5hbWUs
IHRlc3ROYW1lLCBjYWxsYmFjaykKK3sKKyAgICB2YXIgc3RlbSA9IHJlc3VsdHNEaXJlY3RvcnlV
UkwoYnVpbGRlck5hbWUpOworICAgIHZhciBwb3NzaWJsZVN1ZmZpeExpc3QgPSBbCisgICAgICAg
ICctZXhwZWN0ZWQucG5nJywKKyAgICAgICAgJy1hY3R1YWwucG5nJywKKyAgICAgICAgJy1kaWZm
LnBuZycsCisgICAgICAgICctZXhwZWN0ZWQudHh0JywKKyAgICAgICAgJy1hY3R1YWwudHh0JywK
KyAgICAgICAgJy1kaWZmLnR4dCcsCisgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Ig
dGhlc2UgcmVzdWx0IHR5cGVzLgorICAgICAgICAvLyAnLXdkaWZmLmh0bWwnLAorICAgICAgICAv
LyAnLXByZXR0eS1kaWZmLmh0bWwnLAorICAgIF07CisgICAgdmFyIHRlc3ROYW1lU3RlbSA9IGJh
c2UudHJpbUV4dGVuc2lvbih0ZXN0TmFtZSk7CisKKyAgICB2YXIgcmVzdWx0VVJMcyA9IFtdOwor
ICAgIHZhciByZXF1ZXN0c0luRmxpZ2h0ID0gcG9zc2libGVTdWZmaXhMaXN0Lmxlbmd0aDsKKwor
ICAgIGZ1bmN0aW9uIHNvcnRSZXN1bHRVUkxzKCkKKyAgICB7CisgICAgICAgIHZhciBzb3J0ZWRS
ZXN1bHRVUkxzID0gW107CisgICAgICAgICQuZWFjaChwb3NzaWJsZVN1ZmZpeExpc3QsIGZ1bmN0
aW9uKGksIHN1ZmZpeCkgeworICAgICAgICAgICAgJC5lYWNoKHJlc3VsdFVSTHMsIGZ1bmN0aW9u
KGosIHVybCkgeworICAgICAgICAgICAgICAgIGlmICghYmFzZS5lbmRzV2l0aCh1cmwsIHN1ZmZp
eCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBzb3J0ZWRS
ZXN1bHRVUkxzLnB1c2godXJsKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICAg
ICAgcmV0dXJuIHNvcnRlZFJlc3VsdFVSTHM7CisgICAgfQorCisgICAgZnVuY3Rpb24gY2hlY2tD
b21wbGV0ZSgpCisgICAgeworICAgICAgICBpZiAoLS1yZXF1ZXN0c0luRmxpZ2h0ID09IDApCisg
ICAgICAgICAgICBjYWxsYmFjayhzb3J0UmVzdWx0VVJMcygpKTsKKyAgICB9CisKKyAgICAkLmVh
Y2gocG9zc2libGVTdWZmaXhMaXN0LCBmdW5jdGlvbihpbmRleCwgc3VmZml4KSB7CisgICAgICAg
IHZhciB1cmwgPSBzdGVtICsgdGVzdE5hbWVTdGVtICsgc3VmZml4OworICAgICAgICBiYXNlLnBy
b2JlKHVybCwgeworICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICAgICAgcmVzdWx0VVJMcy5wdXNoKHVybCk7CisgICAgICAgICAgICAgICAgY2hlY2tDb21wbGV0
ZSgpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGVycm9yOiBjaGVja0NvbXBsZXRlLAor
ICAgICAgICB9KTsKKyAgICB9KTsKK307CisKK2Z1bmN0aW9uIHJlc3VsdHNTdW1tYXJ5VVJMKGJ1
aWxkZXJOYW1lLCBuYW1lKQogewogICAgIHJldHVybiBrVGVzdFJlc3VsdHNTZXJ2ZXIgKyAndGVz
dGZpbGUnICsKICAgICAgICAgICAnP2J1aWxkZXI9JyArIGJ1aWxkZXJOYW1lICsKQEAgLTEwMSw3
ICsxODIsNyBAQCBmdW5jdGlvbiByZXN1bHRzVVJMKGJ1aWxkZXJOYW1lLCBuYW1lKQogcmVzdWx0
cy5mZXRjaFJlc3VsdHNGb3JCdWlsZGVyID0gZnVuY3Rpb24oYnVpbGRlck5hbWUsIG9uc3VjY2Vz
cykKIHsKICAgICAkLmFqYXgoewotICAgICAgICB1cmw6IHJlc3VsdHNVUkwoYnVpbGRlck5hbWUs
IGtSZXN1bHRzTmFtZSksCisgICAgICAgIHVybDogcmVzdWx0c1N1bW1hcnlVUkwoYnVpbGRlck5h
bWUsIGtSZXN1bHRzTmFtZSksCiAgICAgICAgIGRhdGFUeXBlOiAnanNvbnAnLAogICAgICAgICBz
dWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7CiAgICAgICAgICAgICBvbnN1Y2Nlc3MobmV3IHJlc3Vs
dHMuQnVpbGRlclJlc3VsdHMoZGF0YSkpOwpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90
b29sL3NlcnZlcnMvZGF0YS9nYXJkZW5pbmdzZXJ2ZXIvdWkuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZGF0YS9nYXJkZW5pbmdzZXJ2ZXIvdWku
anMJKHJldmlzaW9uIDkwNTg2KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZl
cnMvZGF0YS9nYXJkZW5pbmdzZXJ2ZXIvdWkuanMJKHdvcmtpbmcgY29weSkKQEAgLTIsOSArMiw5
IEBAIHZhciB1aSA9IHVpIHx8IHt9OwogCiAoZnVuY3Rpb24gKCkgewogCi11aS5yZXN1bHRzQnlU
ZXN0ID0gZnVuY3Rpb24ocmVzdWx0c0J5VGVzdCkKK3VpLnN1bW1hcml6ZVJlc3VsdHNCeVRlc3Qg
PSBmdW5jdGlvbihyZXN1bHRzQnlUZXN0KQogewotICAgIHZhciBibG9jayA9ICQoJzxkaXYgY2xh
c3M9InJlc3VsdHMiPjwvZGl2PicpOworICAgIHZhciBibG9jayA9ICQoJzxkaXYgY2xhc3M9InJl
c3VsdHMtc3VtbWFyeSI+PC9kaXY+Jyk7CiAgICAgJC5lYWNoKHJlc3VsdHNCeVRlc3QsIGZ1bmN0
aW9uKHRlc3ROYW1lLCByZXN1bHROb2Rlc0J5QnVpbGRlcikgewogICAgICAgICB2YXIgdGVzdEJs
b2NrID0gJCgnPGRpdiBjbGFzcz0idGVzdCI+PGRpdiBjbGFzcz0idGVzdE5hbWUiPjwvZGl2Pjxk
aXYgY2xhc3M9ImJ1aWxkZXJzIj48L2Rpdj48L2Rpdj4nKTsKICAgICAgICAgYmxvY2suYXBwZW5k
KHRlc3RCbG9jayk7CkBAIC0yMSw0ICsyMSwxNiBAQCB1aS5yZXN1bHRzQnlUZXN0ID0gZnVuY3Rp
b24ocmVzdWx0c0J5VGVzCiAgICAgcmV0dXJuIGJsb2NrOwogfTsKIAordWkucmVzdWx0cyA9IGZ1
bmN0aW9uKHJlc3VsdHNVUkxzKQoreworICAgIHZhciBibG9jayA9ICQoJzxkaXYgY2xhc3M9InJl
c3VsdHMiPjwvZGl2PicpOworICAgICQuZWFjaChyZXN1bHRzVVJMcywgZnVuY3Rpb24oaW5kZXgs
IHJlc3VsdFVSTCkgeworICAgICAgICB2YXIga2luZCA9IHJlc3VsdHMucmVzdWx0S2luZChyZXN1
bHRVUkwpOworICAgICAgICB2YXIgdHlwZSA9IHJlc3VsdHMucmVzdWx0VHlwZShyZXN1bHRVUkwp
OworICAgICAgICB2YXIgZnJhZ21lbnQgPSB0eXBlID09ICdpbWFnZScgPyAnPGltZz4nIDogJzxp
ZnJhbWU+PC9pZnJhbWU+JzsKKyAgICAgICAgYmxvY2suYXBwZW5kKCQoZnJhZ21lbnQpLmF0dHIo
J3NyYycsIHJlc3VsdFVSTCkuYWRkQ2xhc3Moa2luZCkpCisgICAgfSk7CisgICAgcmV0dXJuIGJs
b2NrOworfTsKKwogfSkoKTsKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2
ZXJzL2RhdGEvZ2FyZGVuaW5nc2VydmVyL3VpX3VuaXR0ZXN0cy5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9kYXRhL2dhcmRlbmluZ3NlcnZlci91
aV91bml0dGVzdHMuanMJKHJldmlzaW9uIDkwNTg2KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90b29sL3NlcnZlcnMvZGF0YS9nYXJkZW5pbmdzZXJ2ZXIvdWlfdW5pdHRlc3RzLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMCw3ICsyMCw3IEBAIHZhciBrRXhhbXBsZVJlc3VsdHNCeVRlc3QgPSB7
CiB9CiAKIHRlc3QoIkJ1aWxkZXJSZXN1bHRzLnJlc3VsdHNCeVRlc3QiLCAxLCBmdW5jdGlvbigp
IHsKLSAgICB2YXIgcmVzdWx0c0J5VGVzdCA9IHVpLnJlc3VsdHNCeVRlc3Qoa0V4YW1wbGVSZXN1
bHRzQnlUZXN0KTsKKyAgICB2YXIgcmVzdWx0c0J5VGVzdCA9IHVpLnN1bW1hcml6ZVJlc3VsdHNC
eVRlc3Qoa0V4YW1wbGVSZXN1bHRzQnlUZXN0KTsKICAgICBlcXVhbChyZXN1bHRzQnlUZXN0Lmh0
bWwoKSwKICAgICAgICAgJzxkaXYgY2xhc3M9InRlc3QiPicgKwogICAgICAgICAgICAgJzxkaXYg
Y2xhc3M9InRlc3ROYW1lIj5zY3JvbGxiYXJzL2N1c3RvbS1zY3JvbGxiYXItd2l0aC1pbmNvbXBs
ZXRlLXN0eWxlLmh0bWw8L2Rpdj4nICsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100062</attachid>
            <date>2011-07-07 18:48:45 -0700</date>
            <delta_ts>2011-07-07 19:26:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64141-20110707184844.patch</filename>
            <type>text/plain</type>
            <size>17478</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDkwNjA0KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTcgQEAKKzIwMTEtMDctMDcgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBUZWFjaCBnYXJkZW4tby1tYXRpYyBob3cgdG8gZGlzcGxheSB0ZXN0IHJlc3VsdHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0MTQxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3Rvb2wvc2VydmVycy9kYXRhL2dhcmRlbmluZ3NlcnZlci9iYXNlLmpzOgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2RhdGEvZ2FyZGVuaW5nc2VydmVy
L2luZGV4Lmh0bWw6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZGF0
YS9nYXJkZW5pbmdzZXJ2ZXIvbWFpbi5qczoKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rv
b2wvc2VydmVycy9kYXRhL2dhcmRlbmluZ3NlcnZlci9yZXN1bHRzLmpzOgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2RhdGEvZ2FyZGVuaW5nc2VydmVyL3VpLmpzOgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2RhdGEvZ2FyZGVuaW5nc2Vy
dmVyL3VpX3VuaXR0ZXN0cy5qczoKKwogMjAxMS0wNy0wNyAgQWRhbSBSb2JlbiAgPGFyb2JlbkBh
cHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlIFRlc3RGYWlsdXJlcydzIHRpdGxlIGFuZCBoZWFk
ZXIgaW1tZWRpYXRlbHkgdXBvbiBuYXZpZ2F0aW9uCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3Rvb2wvc2VydmVycy9kYXRhL2dhcmRlbmluZ3NlcnZlci9iYXNlLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2RhdGEvZ2FyZGVuaW5nc2Vy
dmVyL2Jhc2UuanMJKHJldmlzaW9uIDkwNTg2KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS90
b29sL3NlcnZlcnMvZGF0YS9nYXJkZW5pbmdzZXJ2ZXIvYmFzZS5qcwkod29ya2luZyBjb3B5KQpA
QCAtMiwxMSArMiwyNyBAQCB2YXIgYmFzZSA9IGJhc2UgfHwge307CiAKIChmdW5jdGlvbigpewog
CitiYXNlLmVuZHNXaXRoID0gZnVuY3Rpb24oc3RyaW5nLCBzdWZmaXgpCit7CisgICAgaWYgKHN1
ZmZpeC5sZW5ndGggPiBzdHJpbmcubGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
dmFyIGV4cGVjdGVkSW5kZXggPSBzdHJpbmcubGVuZ3RoIC0gc3VmZml4Lmxlbmd0aDsKKyAgICBy
ZXR1cm4gc3RyaW5nLmxhc3RJbmRleE9mKHN1ZmZpeCkgPT0gZXhwZWN0ZWRJbmRleDsKK307CisK
IGJhc2Uuam9pblBhdGggPSBmdW5jdGlvbihwYXJlbnQsIGNoaWxkKQogewogICAgIGlmIChwYXJl
bnQubGVuZ3RoID09IDApCiAgICAgICAgIHJldHVybiBjaGlsZDsKICAgICByZXR1cm4gcGFyZW50
ICsgJy8nICsgY2hpbGQ7Cit9OworCitiYXNlLnRyaW1FeHRlbnNpb24gPSBmdW5jdGlvbih1cmwp
Cit7CisgICAgdmFyIGluZGV4ID0gdXJsLmxhc3RJbmRleE9mKCcuJyk7CisgICAgaWYgKGluZGV4
ID09IC0xKQorICAgICAgICByZXR1cm4gdXJsOworICAgIHJldHVybiB1cmwuc3Vic3RyKDAsIGlu
ZGV4KTsKIH0KIAogYmFzZS5maWx0ZXJUcmVlID0gZnVuY3Rpb24odHJlZSwgaXNMZWFmLCBwcmVk
aWNhdGUpCkBAIC0yOSw2ICs0NSwyMyBAQCBiYXNlLmZpbHRlclRyZWUgPSBmdW5jdGlvbih0cmVl
LCBpc0xlYWYsCiAKICAgICB3YWxrU3VidHJlZSh0cmVlLCAnJyk7CiAgICAgcmV0dXJuIGZpbHRl
cmVkVHJlZTsKLX0KK307CisKK2Jhc2UucHJvYmUgPSBmdW5jdGlvbih1cmwsIG9wdGlvbnMpCit7
CisgICAgdmFyIHNjcmlwdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQn
KTsKKyAgICBzY3JpcHRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigp
IHsKKyAgICAgICAgJChzY3JpcHRFbGVtZW50KS5kZXRhY2goKTsKKyAgICAgICAgaWYgKCQuaXNG
dW5jdGlvbihvcHRpb25zLnN1Y2Nlc3MpKQorICAgICAgICAgICAgb3B0aW9ucy5zdWNjZXNzLmNh
bGwoKTsKKyAgICB9LCBmYWxzZSk7CisgICAgc2NyaXB0RWxlbWVudC5hZGRFdmVudExpc3RlbmVy
KCdlcnJvcicsIGZ1bmN0aW9uKCkgeworICAgICAgICAkKHNjcmlwdEVsZW1lbnQpLmRldGFjaCgp
OworICAgICAgICBpZiAoJC5pc0Z1bmN0aW9uKG9wdGlvbnMuZXJyb3IpKQorICAgICAgICAgICAg
b3B0aW9ucy5lcnJvci5jYWxsKCk7CisgICAgfSwgZmFsc2UpOworICAgIHNjcmlwdEVsZW1lbnQu
c3JjID0gdXJsOworICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0RWxlbWVudCk7
Cit9OwogCiB9KSgpOwpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMv
ZGF0YS9nYXJkZW5pbmdzZXJ2ZXIvYmFzZV91bml0dGVzdHMuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZGF0YS9nYXJkZW5pbmdzZXJ2ZXIvYmFz
ZV91bml0dGVzdHMuanMJKHJldmlzaW9uIDkwNTg2KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90b29sL3NlcnZlcnMvZGF0YS9nYXJkZW5pbmdzZXJ2ZXIvYmFzZV91bml0dGVzdHMuanMJKHdv
cmtpbmcgY29weSkKQEAgLTUsNiArNSwyNyBAQCB0ZXN0KCJqb2luUGF0aCIsIDEsIGZ1bmN0aW9u
KCkgewogICAgIGVxdWFscyh2YWx1ZSwgInBhdGgvdG8vdGVzdC5odG1sIik7CiB9KTsKIAordGVz
dCgiZW5kc1dpdGgiLCA5LCBmdW5jdGlvbigpIHsKKyAgICBvayhiYXNlLmVuZHNXaXRoKCJ4eXoi
LCAiIikpOworICAgIG9rKGJhc2UuZW5kc1dpdGgoInh5eiIsICJ6IikpOworICAgIG9rKGJhc2Uu
ZW5kc1dpdGgoInh5eiIsICJ5eiIpKTsKKyAgICBvayhiYXNlLmVuZHNXaXRoKCJ4eXoiLCAieHl6
IikpOworICAgIG9rKCFiYXNlLmVuZHNXaXRoKCJ4eXoiLCAid3h5eiIpKTsKKyAgICBvayghYmFz
ZS5lbmRzV2l0aCgieHl6IiwgImd3eHl6IikpOworICAgIG9rKGJhc2UuZW5kc1dpdGgoIiIsICIi
KSk7CisgICAgb2soIWJhc2UuZW5kc1dpdGgoIiIsICJ6IikpOworICAgIG9rKCFiYXNlLmVuZHNX
aXRoKCJ4eXh5IiwgInl4IikpOworfSk7CisKK3Rlc3QoInRyaW1FeHRlbnNpb24iLCA2LCBmdW5j
dGlvbigpIHsKKyAgICBlcXVhbHMoYmFzZS50cmltRXh0ZW5zaW9uKCJ4eXoiKSwgInh5eiIpOwor
ICAgIGVxdWFscyhiYXNlLnRyaW1FeHRlbnNpb24oInh5LnoiKSwgInh5Iik7CisgICAgZXF1YWxz
KGJhc2UudHJpbUV4dGVuc2lvbigieC55eiIpLCAieCIpOworICAgIGVxdWFscyhiYXNlLnRyaW1F
eHRlbnNpb24oIngueS56IiksICJ4LnkiKTsKKyAgICBlcXVhbHMoYmFzZS50cmltRXh0ZW5zaW9u
KCIueHl6IiksICIiKTsKKyAgICBlcXVhbHMoYmFzZS50cmltRXh0ZW5zaW9uKCIiKSwgIiIpOwor
fSk7CisKIHRlc3QoImpvaW5QYXRoIHdpdGggZW1wdHkgcGFyZW50IiwgMSwgZnVuY3Rpb24oKSB7
CiAgICAgdmFyIHZhbHVlID0gYmFzZS5qb2luUGF0aCgiIiwgInRlc3QuaHRtbCIpOwogICAgIGVx
dWFscyh2YWx1ZSwgInRlc3QuaHRtbCIpOwpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90
b29sL3NlcnZlcnMvZGF0YS9nYXJkZW5pbmdzZXJ2ZXIvaW5kZXguaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9kYXRhL2dhcmRlbmluZ3NlcnZl
ci9pbmRleC5odG1sCShyZXZpc2lvbiA5MDU4NikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dG9vbC9zZXJ2ZXJzL2RhdGEvZ2FyZGVuaW5nc2VydmVyL2luZGV4Lmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDEwICs0MCwxOCBAQCBoMSB7CiAuZmFpbHVyZXMgLmJ1aWxkZXJzIHsKICAgY29s
b3I6ICM4ODg7CiB9Ci0uZmFpbHVyZXMgLmJ1aWxkZXJOYW1lLCAuZmFpbHVyZXMgLmFjdHVhbCB7
CisuYnVpbGRlciAuYnVpbGRlck5hbWUsIC5idWlsZGVyIC5hY3R1YWwgewogICBmbG9hdDogbGVm
dDsKICAgd2lkdGg6IDIwMHB4OwogfQorLnJlc3VsdHMgaWZyYW1lIHsKKyAgd2lkdGg6IDQwMHB4
OworICBoZWlnaHQ6IDMwMHB4OworfQorLnJlc3VsdHMgaW1nIHsKKyAgd2lkdGg6IDQwMHB4Owor
ICBoZWlnaHQ6IDMwMHB4OworfQogPC9zdHlsZT4KIDxsaW5rIHJlbD0iaWNvbiIgaWQ9ImZhdmlj
b24iIHR5cGU9ImltYWdlL3BuZyIgaHJlZj0iZmF2aWNvbi1ncmVlbi5wbmciPgogPC9oZWFkPgpJ
bmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZGF0YS9nYXJkZW5pbmdz
ZXJ2ZXIvbWFpbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wv
c2VydmVycy9kYXRhL2dhcmRlbmluZ3NlcnZlci9tYWluLmpzCShyZXZpc2lvbiA5MDU4NikKKysr
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2RhdGEvZ2FyZGVuaW5nc2VydmVy
L21haW4uanMJKHdvcmtpbmcgY29weSkKQEAgLTE3LDIwICsxNywzMyBAQCBmdW5jdGlvbiBzZXRJ
Y29uU3RhdGUoaGFzRmFpbHVyZXMpCiB7CiAgICAgdmFyIGZhdmljb25VUkwgPSAnZmF2aWNvbi0n
ICsgKGhhc0ZhaWx1cmVzID8gJ3JlZCcgOiAnZ3JlZW4nKSArICcucG5nJzsKICAgICAkKCcjZmF2
aWNvbicpLmF0dHIoJ2hyZWYnLCBmYXZpY29uVVJMKTsKLX07Cit9CiAKIGZ1bmN0aW9uIGZldGNo
UmVzdWx0cyhvbnN1Y2Nlc3MpCiB7CiAgICAgcmVzdWx0cy5mZXRjaFJlc3VsdHNCeUJ1aWxkZXIo
Y29uZmlnLmJ1aWxkZXJzLCBmdW5jdGlvbihyZXN1bHRzQnlCdWlsZGVyKSB7Ci0gICAgICAgIHZh
ciB1bmV4cGVjdGVkRmFpbHVyZXMgPSB1aS5yZXN1bHRzQnlUZXN0KHJlc3VsdHMudW5leHBlY3Rl
ZEZhaWx1cmVzQnlUZXN0KHJlc3VsdHNCeUJ1aWxkZXIpKTsKKyAgICAgICAgdmFyIHVuZXhwZWN0
ZWRGYWlsdXJlcyA9IHVpLnN1bW1hcml6ZVJlc3VsdHNCeVRlc3QocmVzdWx0cy51bmV4cGVjdGVk
RmFpbHVyZXNCeVRlc3QocmVzdWx0c0J5QnVpbGRlcikpOwogICAgICAgICAkKCcuZmFpbHVyZXMn
KS5hcHBlbmQodW5leHBlY3RlZEZhaWx1cmVzKTsKICAgICAgICAgb25zdWNjZXNzKCk7CiAgICAg
fSk7CiAgICAgc2V0SWNvblN0YXRlKCQoJy5mYWlsdXJlcycpLmxlbmd0aCk7CiB9CiAKK2Z1bmN0
aW9uIGV4cGFuZFJlc3VsdHMoKQoreworICAgIHZhciByZXN1bHRzU3VtbWFyeSA9ICQodGhpcyk7
CisgICAgdmFyIHRlc3ROYW1lID0gJCgnLnRlc3ROYW1lJywgcmVzdWx0c1N1bW1hcnkpLnRleHQo
KTsKKyAgICAkKCcuYnVpbGRlck5hbWUnLCByZXN1bHRzU3VtbWFyeSkuZWFjaChmdW5jdGlvbigp
IHsKKyAgICAgICAgdmFyIGJ1aWxkZXJOYW1lID0gJCh0aGlzKS50ZXh0KCk7CisgICAgICAgIHJl
c3VsdHMuZmV0Y2hSZXN1bHRzVVJMcyhidWlsZGVyTmFtZSwgdGVzdE5hbWUsIGZ1bmN0aW9uKHJl
c3VsdFVSTHMpIHsKKyAgICAgICAgICAgIHJlc3VsdHNTdW1tYXJ5LmFwcGVuZCh1aS5yZXN1bHRz
KHJlc3VsdFVSTHMpKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKICQoJy5oaWRlJykubGl2
ZSgnY2xpY2snLCBoaWRlKTsKICQoJy5xdWl0JykubGl2ZSgnY2xpY2snLCBxdWl0KTsKKyQoJy5y
ZXN1bHRzLXN1bW1hcnkgLnRlc3QnKS5saXZlKCdjbGljaycsIGV4cGFuZFJlc3VsdHMpOwogCiAk
KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKICAgICBmZXRjaFJlc3VsdHMoZnVuY3Rpb24o
KSB7CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9kYXRhL2dhcmRl
bmluZ3NlcnZlci9yZXN1bHRzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdG9vbC9zZXJ2ZXJzL2RhdGEvZ2FyZGVuaW5nc2VydmVyL3Jlc3VsdHMuanMJKHJldmlzaW9u
IDkwNTg2KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZGF0YS9nYXJk
ZW5pbmdzZXJ2ZXIvcmVzdWx0cy5qcwkod29ya2luZyBjb3B5KQpAQCAtNyw2ICs3LDIxIEBAIHZh
ciBrVGVzdFR5cGUgPSAnbGF5b3V0LXRlc3RzJzsKIHZhciBrUmVzdWx0c05hbWUgPSAnZnVsbF9y
ZXN1bHRzLmpzb24nOwogdmFyIGtNYXN0ZXJOYW1lID0gJ0Nocm9taXVtV2Via2l0JzsKIAordmFy
IGtMYXlvdXRUZXN0UmVzdWx0c1NlcnZlciA9ICdodHRwOi8vYnVpbGQuY2hyb21pdW0ub3JnL2Yv
Y2hyb21pdW0vbGF5b3V0X3Rlc3RfcmVzdWx0cy8nOwordmFyIGtMYXlvdXRUZXN0UmVzdWx0c1Bh
dGggPSAnL3Jlc3VsdHMvbGF5b3V0LXRlc3QtcmVzdWx0cy8nOworCit2YXIga1Bvc3NpYmxlU3Vm
Zml4TGlzdCA9IFsKKyAgICAnLWV4cGVjdGVkLnBuZycsCisgICAgJy1hY3R1YWwucG5nJywKKyAg
ICAnLWRpZmYucG5nJywKKyAgICAnLWV4cGVjdGVkLnR4dCcsCisgICAgJy1hY3R1YWwudHh0JywK
KyAgICAnLWRpZmYudHh0JywKKyAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIHRoZXNlIHJl
c3VsdCB0eXBlcy4KKyAgICAvLyAnLXdkaWZmLmh0bWwnLAorICAgIC8vICctcHJldHR5LWRpZmYu
aHRtbCcsCitdOworCiB2YXIgUEFTUyA9ICdQQVNTJzsKIHZhciBUSU1FT1VUID0gJ1RJTUVPVVQn
OwogdmFyIFRFWFQgPSAnVEVYVCc7CkBAIC04OSw3ICsxMDQsNzQgQEAgcmVzdWx0cy51bmV4cGVj
dGVkRmFpbHVyZXNCeVRlc3QgPSBmdW5jdAogICAgIHJldHVybiB1bmV4cGVjdGVkRmFpbHVyZXM7
CiB9OwogCi1mdW5jdGlvbiByZXN1bHRzVVJMKGJ1aWxkZXJOYW1lLCBuYW1lKQorZnVuY3Rpb24g
cmVzdWx0c0RpcmVjdG9yeUZvckJ1aWxkZXIoYnVpbGRlck5hbWUpCit7CisgICAgcmV0dXJuIGJ1
aWxkZXJOYW1lLnJlcGxhY2UoL1sgLigpXS9nLCAnXycpOworfQorCitmdW5jdGlvbiByZXN1bHRz
RGlyZWN0b3J5VVJMKGJ1aWxkZXJOYW1lKQoreworICAgIHJldHVybiBrTGF5b3V0VGVzdFJlc3Vs
dHNTZXJ2ZXIgKyByZXN1bHRzRGlyZWN0b3J5Rm9yQnVpbGRlcihidWlsZGVyTmFtZSkgKyBrTGF5
b3V0VGVzdFJlc3VsdHNQYXRoOworfQorCityZXN1bHRzLnJlc3VsdEtpbmQgPSBmdW5jdGlvbih1
cmwpCit7CisgICAgaWYgKC8tYWN0dWFsXC5bYS16XSskLy50ZXN0KHVybCkpCisgICAgICAgIHJl
dHVybiAnYWN0dWFsJzsKKyAgICBlbHNlIGlmICgvLWV4cGVjdGVkXC5bYS16XSskLy50ZXN0KHVy
bCkpCisgICAgICAgIHJldHVybiAnZXhwZWN0ZWQnOworICAgIGVsc2UgaWYgKC9kaWZmXC5bYS16
XSskLy50ZXN0KHVybCkpCisgICAgICAgIHJldHVybiAnZGlmZic7CisgICAgcmV0dXJuICd1bmtu
b3duJzsKK30KKworcmVzdWx0cy5yZXN1bHRUeXBlID0gZnVuY3Rpb24odXJsKQoreworICAgIGlm
ICgvXC5wbmckLy50ZXN0KHVybCkpCisgICAgICAgIHJldHVybiAnaW1hZ2UnOworICAgIHJldHVy
biAndGV4dCc7Cit9CisKK2Z1bmN0aW9uIHNvcnRSZXN1bHRVUkxzKHVybHMpCit7CisgICAgdmFy
IHNvcnRlZFVSTHMgPSBbXTsKKyAgICAkLmVhY2goa1Bvc3NpYmxlU3VmZml4TGlzdCwgZnVuY3Rp
b24oaSwgc3VmZml4KSB7CisgICAgICAgICQuZWFjaCh1cmxzLCBmdW5jdGlvbihqLCB1cmwpIHsK
KyAgICAgICAgICAgIGlmICghYmFzZS5lbmRzV2l0aCh1cmwsIHN1ZmZpeCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgc29ydGVkVVJMcy5wdXNoKHVybCk7CisgICAgICAg
IH0pOworICAgIH0pOworICAgIHJldHVybiBzb3J0ZWRVUkxzOworfQorCityZXN1bHRzLmZldGNo
UmVzdWx0c1VSTHMgPSBmdW5jdGlvbihidWlsZGVyTmFtZSwgdGVzdE5hbWUsIGNhbGxiYWNrKQor
eworICAgIHZhciBzdGVtID0gcmVzdWx0c0RpcmVjdG9yeVVSTChidWlsZGVyTmFtZSk7CisgICAg
dmFyIHRlc3ROYW1lU3RlbSA9IGJhc2UudHJpbUV4dGVuc2lvbih0ZXN0TmFtZSk7CisKKyAgICB2
YXIgcmVzdWx0VVJMcyA9IFtdOworICAgIHZhciByZXF1ZXN0c0luRmxpZ2h0ID0ga1Bvc3NpYmxl
U3VmZml4TGlzdC5sZW5ndGg7CisKKyAgICBmdW5jdGlvbiBjaGVja0NvbXBsZXRlKCkKKyAgICB7
CisgICAgICAgIGlmICgtLXJlcXVlc3RzSW5GbGlnaHQgPT0gMCkKKyAgICAgICAgICAgIGNhbGxi
YWNrKHNvcnRSZXN1bHRVUkxzKHJlc3VsdFVSTHMpKTsKKyAgICB9CisKKyAgICAkLmVhY2goa1Bv
c3NpYmxlU3VmZml4TGlzdCwgZnVuY3Rpb24oaW5kZXgsIHN1ZmZpeCkgeworICAgICAgICB2YXIg
dXJsID0gc3RlbSArIHRlc3ROYW1lU3RlbSArIHN1ZmZpeDsKKyAgICAgICAgYmFzZS5wcm9iZSh1
cmwsIHsKKyAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAg
IHJlc3VsdFVSTHMucHVzaCh1cmwpOworICAgICAgICAgICAgICAgIGNoZWNrQ29tcGxldGUoKTsK
KyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBlcnJvcjogY2hlY2tDb21wbGV0ZSwKKyAgICAg
ICAgfSk7CisgICAgfSk7Cit9OworCitmdW5jdGlvbiByZXN1bHRzU3VtbWFyeVVSTChidWlsZGVy
TmFtZSwgbmFtZSkKIHsKICAgICByZXR1cm4ga1Rlc3RSZXN1bHRzU2VydmVyICsgJ3Rlc3RmaWxl
JyArCiAgICAgICAgICAgJz9idWlsZGVyPScgKyBidWlsZGVyTmFtZSArCkBAIC0xMDEsNyArMTgz
LDcgQEAgZnVuY3Rpb24gcmVzdWx0c1VSTChidWlsZGVyTmFtZSwgbmFtZSkKIHJlc3VsdHMuZmV0
Y2hSZXN1bHRzRm9yQnVpbGRlciA9IGZ1bmN0aW9uKGJ1aWxkZXJOYW1lLCBvbnN1Y2Nlc3MpCiB7
CiAgICAgJC5hamF4KHsKLSAgICAgICAgdXJsOiByZXN1bHRzVVJMKGJ1aWxkZXJOYW1lLCBrUmVz
dWx0c05hbWUpLAorICAgICAgICB1cmw6IHJlc3VsdHNTdW1tYXJ5VVJMKGJ1aWxkZXJOYW1lLCBr
UmVzdWx0c05hbWUpLAogICAgICAgICBkYXRhVHlwZTogJ2pzb25wJywKICAgICAgICAgc3VjY2Vz
czogZnVuY3Rpb24oZGF0YSkgewogICAgICAgICAgICAgb25zdWNjZXNzKG5ldyByZXN1bHRzLkJ1
aWxkZXJSZXN1bHRzKGRhdGEpKTsKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9z
ZXJ2ZXJzL2RhdGEvZ2FyZGVuaW5nc2VydmVyL3Jlc3VsdHNfdW5pdHRlc3RzLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2RhdGEvZ2FyZGVuaW5n
c2VydmVyL3Jlc3VsdHNfdW5pdHRlc3RzLmpzCShyZXZpc2lvbiA5MDU4NikKKysrIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2RhdGEvZ2FyZGVuaW5nc2VydmVyL3Jlc3VsdHNf
dW5pdHRlc3RzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC02MiwzICs2Miw3NCBAQCB0ZXN0KCJ1bmV4
cGVjdGVkRmFpbHVyZXNCeVRlc3QiLCAxLCBmdW5jCiAgICAgICAgIH0KICAgICB9KTsKIH0pOwor
Cit0ZXN0KCJyZXN1bHRLaW5kIiwgMTIsIGZ1bmN0aW9uKCkgeworICAgIGVxdWFscyhyZXN1bHRz
LnJlc3VsdEtpbmQoImh0dHA6Ly9leGFtcGxlLmNvbS9mb28tYWN0dWFsLnR4dCIpLCAiYWN0dWFs
Iik7CisgICAgZXF1YWxzKHJlc3VsdHMucmVzdWx0S2luZCgiaHR0cDovL2V4YW1wbGUuY29tL2Zv
by1leHBlY3RlZC50eHQiKSwgImV4cGVjdGVkIik7CisgICAgZXF1YWxzKHJlc3VsdHMucmVzdWx0
S2luZCgiaHR0cDovL2V4YW1wbGUuY29tL2Zvby1kaWZmLnR4dCIpLCAiZGlmZiIpOworICAgIGVx
dWFscyhyZXN1bHRzLnJlc3VsdEtpbmQoImh0dHA6Ly9leGFtcGxlLmNvbS9mb28uYmFyLWFjdHVh
bC50eHQiKSwgImFjdHVhbCIpOworICAgIGVxdWFscyhyZXN1bHRzLnJlc3VsdEtpbmQoImh0dHA6
Ly9leGFtcGxlLmNvbS9mb28uYmFyLWV4cGVjdGVkLnR4dCIpLCAiZXhwZWN0ZWQiKTsKKyAgICBl
cXVhbHMocmVzdWx0cy5yZXN1bHRLaW5kKCJodHRwOi8vZXhhbXBsZS5jb20vZm9vLmJhci1kaWZm
LnR4dCIpLCAiZGlmZiIpOworICAgIGVxdWFscyhyZXN1bHRzLnJlc3VsdEtpbmQoImh0dHA6Ly9l
eGFtcGxlLmNvbS9mb28tYWN0dWFsLnBuZyIpLCAiYWN0dWFsIik7CisgICAgZXF1YWxzKHJlc3Vs
dHMucmVzdWx0S2luZCgiaHR0cDovL2V4YW1wbGUuY29tL2Zvby1leHBlY3RlZC5wbmciKSwgImV4
cGVjdGVkIik7CisgICAgZXF1YWxzKHJlc3VsdHMucmVzdWx0S2luZCgiaHR0cDovL2V4YW1wbGUu
Y29tL2Zvby1kaWZmLnBuZyIpLCAiZGlmZiIpOworICAgIGVxdWFscyhyZXN1bHRzLnJlc3VsdEtp
bmQoImh0dHA6Ly9leGFtcGxlLmNvbS9mb28tcHJldHR5LWRpZmYuaHRtbCIpLCAiZGlmZiIpOwor
ICAgIGVxdWFscyhyZXN1bHRzLnJlc3VsdEtpbmQoImh0dHA6Ly9leGFtcGxlLmNvbS9mb28td2Rp
ZmYuaHRtbCIpLCAiZGlmZiIpOworICAgIGVxdWFscyhyZXN1bHRzLnJlc3VsdEtpbmQoImh0dHA6
Ly9leGFtcGxlLmNvbS9mb28teHl6Lmh0bWwiKSwgInVua25vd24iKTsKK30pOworCit0ZXN0KCJy
ZXN1bHRUeXBlIiwgMTIsIGZ1bmN0aW9uKCkgeworICAgIGVxdWFscyhyZXN1bHRzLnJlc3VsdFR5
cGUoImh0dHA6Ly9leGFtcGxlLmNvbS9mb28tYWN0dWFsLnR4dCIpLCAidGV4dCIpOworICAgIGVx
dWFscyhyZXN1bHRzLnJlc3VsdFR5cGUoImh0dHA6Ly9leGFtcGxlLmNvbS9mb28tZXhwZWN0ZWQu
dHh0IiksICJ0ZXh0Iik7CisgICAgZXF1YWxzKHJlc3VsdHMucmVzdWx0VHlwZSgiaHR0cDovL2V4
YW1wbGUuY29tL2Zvby1kaWZmLnR4dCIpLCAidGV4dCIpOworICAgIGVxdWFscyhyZXN1bHRzLnJl
c3VsdFR5cGUoImh0dHA6Ly9leGFtcGxlLmNvbS9mb28uYmFyLWFjdHVhbC50eHQiKSwgInRleHQi
KTsKKyAgICBlcXVhbHMocmVzdWx0cy5yZXN1bHRUeXBlKCJodHRwOi8vZXhhbXBsZS5jb20vZm9v
LmJhci1leHBlY3RlZC50eHQiKSwgInRleHQiKTsKKyAgICBlcXVhbHMocmVzdWx0cy5yZXN1bHRU
eXBlKCJodHRwOi8vZXhhbXBsZS5jb20vZm9vLmJhci1kaWZmLnR4dCIpLCAidGV4dCIpOworICAg
IGVxdWFscyhyZXN1bHRzLnJlc3VsdFR5cGUoImh0dHA6Ly9leGFtcGxlLmNvbS9mb28tYWN0dWFs
LnBuZyIpLCAiaW1hZ2UiKTsKKyAgICBlcXVhbHMocmVzdWx0cy5yZXN1bHRUeXBlKCJodHRwOi8v
ZXhhbXBsZS5jb20vZm9vLWV4cGVjdGVkLnBuZyIpLCAiaW1hZ2UiKTsKKyAgICBlcXVhbHMocmVz
dWx0cy5yZXN1bHRUeXBlKCJodHRwOi8vZXhhbXBsZS5jb20vZm9vLWRpZmYucG5nIiksICJpbWFn
ZSIpOworICAgIGVxdWFscyhyZXN1bHRzLnJlc3VsdFR5cGUoImh0dHA6Ly9leGFtcGxlLmNvbS9m
b28tcHJldHR5LWRpZmYuaHRtbCIpLCAidGV4dCIpOworICAgIGVxdWFscyhyZXN1bHRzLnJlc3Vs
dFR5cGUoImh0dHA6Ly9leGFtcGxlLmNvbS9mb28td2RpZmYuaHRtbCIpLCAidGV4dCIpOworICAg
IGVxdWFscyhyZXN1bHRzLnJlc3VsdFR5cGUoImh0dHA6Ly9leGFtcGxlLmNvbS9mb28ueHl6Iiks
ICJ0ZXh0Iik7Cit9KTsKKwordGVzdCgiZmV0Y2hSZXN1bHRzVVJMcyIsIDMsIGZ1bmN0aW9uKCkg
eworICAgIHZhciByZWFsQmFzZSA9IHdpbmRvdy5iYXNlOworCisgICAgdmFyIHBlbmRpbmdDYWxs
YmFja3MgPSB7fTsKKyAgICB3aW5kb3cuYmFzZSA9IHt9OworICAgIGJhc2UucHJvYmUgPSBmdW5j
dGlvbih1cmwsIG9wdGlvbnMpIHsKKyAgICAgICAgcGVuZGluZ0NhbGxiYWNrc1t1cmxdID0gb3B0
aW9uczsKKyAgICB9OworICAgIGJhc2UuZW5kc1dpdGggPSByZWFsQmFzZS5lbmRzV2l0aDsKKyAg
ICBiYXNlLnRyaW1FeHRlbnNpb24gPSByZWFsQmFzZS50cmltRXh0ZW5zaW9uOworCisgICAgcmVz
dWx0cy5mZXRjaFJlc3VsdHNVUkxzKCJNb2NrIEJ1aWxkZXIiLCAidXNlcnNjcmlwdHMvYW5vdGhl
ci10ZXN0Lmh0bWwiLCBmdW5jdGlvbihyZXN1bHRVUkxzKSB7CisgICAgICAgIGRlZXBFcXVhbChy
ZXN1bHRVUkxzLCBbCisgICAgICAgICAgICAiaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZy9mL2No
cm9taXVtL2xheW91dF90ZXN0X3Jlc3VsdHMvTW9ja19CdWlsZGVyL3Jlc3VsdHMvbGF5b3V0LXRl
c3QtcmVzdWx0cy91c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QtZXhwZWN0ZWQudHh0IiwKKyAgICAg
ICAgICAgICJodHRwOi8vYnVpbGQuY2hyb21pdW0ub3JnL2YvY2hyb21pdW0vbGF5b3V0X3Rlc3Rf
cmVzdWx0cy9Nb2NrX0J1aWxkZXIvcmVzdWx0cy9sYXlvdXQtdGVzdC1yZXN1bHRzL3VzZXJzY3Jp
cHRzL2Fub3RoZXItdGVzdC1hY3R1YWwudHh0IiwKKyAgICAgICAgICAgICJodHRwOi8vYnVpbGQu
Y2hyb21pdW0ub3JnL2YvY2hyb21pdW0vbGF5b3V0X3Rlc3RfcmVzdWx0cy9Nb2NrX0J1aWxkZXIv
cmVzdWx0cy9sYXlvdXQtdGVzdC1yZXN1bHRzL3VzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC1kaWZm
LnR4dCIsCisgICAgICAgIF0pOworICAgIH0pOworCisgICAgdmFyIHByb2JlZFVSTHMgPSBbXTsK
KyAgICBmb3IgKHZhciB1cmwgaW4gcGVuZGluZ0NhbGxiYWNrcykgeworICAgICAgICBwcm9iZWRV
UkxzLnB1c2godXJsKTsKKyAgICAgICAgaWYgKHJlYWxCYXNlLmVuZHNXaXRoKHVybCwgJy50eHQn
KSkKKyAgICAgICAgICAgIHBlbmRpbmdDYWxsYmFja3NbdXJsXS5zdWNjZXNzLmNhbGwoKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgcGVuZGluZ0NhbGxiYWNrc1t1cmxdLmVycm9yLmNhbGwo
KTsKKyAgICB9CisKKyAgICBkZWVwRXF1YWwocHJvYmVkVVJMcywgWworICAgICAgICAiaHR0cDov
L2J1aWxkLmNocm9taXVtLm9yZy9mL2Nocm9taXVtL2xheW91dF90ZXN0X3Jlc3VsdHMvTW9ja19C
dWlsZGVyL3Jlc3VsdHMvbGF5b3V0LXRlc3QtcmVzdWx0cy91c2Vyc2NyaXB0cy9hbm90aGVyLXRl
c3QtZXhwZWN0ZWQucG5nIiwKKyAgICAgICAgImh0dHA6Ly9idWlsZC5jaHJvbWl1bS5vcmcvZi9j
aHJvbWl1bS9sYXlvdXRfdGVzdF9yZXN1bHRzL01vY2tfQnVpbGRlci9yZXN1bHRzL2xheW91dC10
ZXN0LXJlc3VsdHMvdXNlcnNjcmlwdHMvYW5vdGhlci10ZXN0LWFjdHVhbC5wbmciLAorICAgICAg
ICAiaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZy9mL2Nocm9taXVtL2xheW91dF90ZXN0X3Jlc3Vs
dHMvTW9ja19CdWlsZGVyL3Jlc3VsdHMvbGF5b3V0LXRlc3QtcmVzdWx0cy91c2Vyc2NyaXB0cy9h
bm90aGVyLXRlc3QtZGlmZi5wbmciLAorICAgICAgICAiaHR0cDovL2J1aWxkLmNocm9taXVtLm9y
Zy9mL2Nocm9taXVtL2xheW91dF90ZXN0X3Jlc3VsdHMvTW9ja19CdWlsZGVyL3Jlc3VsdHMvbGF5
b3V0LXRlc3QtcmVzdWx0cy91c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QtZXhwZWN0ZWQudHh0IiwK
KyAgICAgICAgImh0dHA6Ly9idWlsZC5jaHJvbWl1bS5vcmcvZi9jaHJvbWl1bS9sYXlvdXRfdGVz
dF9yZXN1bHRzL01vY2tfQnVpbGRlci9yZXN1bHRzL2xheW91dC10ZXN0LXJlc3VsdHMvdXNlcnNj
cmlwdHMvYW5vdGhlci10ZXN0LWFjdHVhbC50eHQiLAorICAgICAgICAiaHR0cDovL2J1aWxkLmNo
cm9taXVtLm9yZy9mL2Nocm9taXVtL2xheW91dF90ZXN0X3Jlc3VsdHMvTW9ja19CdWlsZGVyL3Jl
c3VsdHMvbGF5b3V0LXRlc3QtcmVzdWx0cy91c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QtZGlmZi50
eHQiLAorICAgIF0pOworCisgICAgd2luZG93LmJhc2UgPSByZWFsQmFzZTsKKyAgICBlcXVhbCh3
aW5kb3cuYmFzZSwgcmVhbEJhc2UsICJGYWlsZWQgdG8gcmVzdG9yZSByZWFsIGJhc2UhIik7Cit9
KTsKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2RhdGEvZ2FyZGVu
aW5nc2VydmVyL3VpLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9v
bC9zZXJ2ZXJzL2RhdGEvZ2FyZGVuaW5nc2VydmVyL3VpLmpzCShyZXZpc2lvbiA5MDU4NikKKysr
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2RhdGEvZ2FyZGVuaW5nc2VydmVy
L3VpLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yLDkgKzIsOSBAQCB2YXIgdWkgPSB1aSB8fCB7fTsK
IAogKGZ1bmN0aW9uICgpIHsKIAotdWkucmVzdWx0c0J5VGVzdCA9IGZ1bmN0aW9uKHJlc3VsdHNC
eVRlc3QpCit1aS5zdW1tYXJpemVSZXN1bHRzQnlUZXN0ID0gZnVuY3Rpb24ocmVzdWx0c0J5VGVz
dCkKIHsKLSAgICB2YXIgYmxvY2sgPSAkKCc8ZGl2IGNsYXNzPSJyZXN1bHRzIj48L2Rpdj4nKTsK
KyAgICB2YXIgYmxvY2sgPSAkKCc8ZGl2IGNsYXNzPSJyZXN1bHRzLXN1bW1hcnkiPjwvZGl2Picp
OwogICAgICQuZWFjaChyZXN1bHRzQnlUZXN0LCBmdW5jdGlvbih0ZXN0TmFtZSwgcmVzdWx0Tm9k
ZXNCeUJ1aWxkZXIpIHsKICAgICAgICAgdmFyIHRlc3RCbG9jayA9ICQoJzxkaXYgY2xhc3M9InRl
c3QiPjxkaXYgY2xhc3M9InRlc3ROYW1lIj48L2Rpdj48ZGl2IGNsYXNzPSJidWlsZGVycyI+PC9k
aXY+PC9kaXY+Jyk7CiAgICAgICAgIGJsb2NrLmFwcGVuZCh0ZXN0QmxvY2spOwpAQCAtMjEsNCAr
MjEsMTYgQEAgdWkucmVzdWx0c0J5VGVzdCA9IGZ1bmN0aW9uKHJlc3VsdHNCeVRlcwogICAgIHJl
dHVybiBibG9jazsKIH07CiAKK3VpLnJlc3VsdHMgPSBmdW5jdGlvbihyZXN1bHRzVVJMcykKK3sK
KyAgICB2YXIgYmxvY2sgPSAkKCc8ZGl2IGNsYXNzPSJyZXN1bHRzIj48L2Rpdj4nKTsKKyAgICAk
LmVhY2gocmVzdWx0c1VSTHMsIGZ1bmN0aW9uKGluZGV4LCByZXN1bHRVUkwpIHsKKyAgICAgICAg
dmFyIGtpbmQgPSByZXN1bHRzLnJlc3VsdEtpbmQocmVzdWx0VVJMKTsKKyAgICAgICAgdmFyIHR5
cGUgPSByZXN1bHRzLnJlc3VsdFR5cGUocmVzdWx0VVJMKTsKKyAgICAgICAgdmFyIGZyYWdtZW50
ID0gdHlwZSA9PSAnaW1hZ2UnID8gJzxpbWc+JyA6ICc8aWZyYW1lPjwvaWZyYW1lPic7CisgICAg
ICAgIGJsb2NrLmFwcGVuZCgkKGZyYWdtZW50KS5hdHRyKCdzcmMnLCByZXN1bHRVUkwpLmFkZENs
YXNzKGtpbmQpKQorICAgIH0pOworICAgIHJldHVybiBibG9jazsKK307CisKIH0pKCk7CkluZGV4
OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9kYXRhL2dhcmRlbmluZ3NlcnZl
ci91aV91bml0dGVzdHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS90
b29sL3NlcnZlcnMvZGF0YS9nYXJkZW5pbmdzZXJ2ZXIvdWlfdW5pdHRlc3RzLmpzCShyZXZpc2lv
biA5MDU4NikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2RhdGEvZ2Fy
ZGVuaW5nc2VydmVyL3VpX3VuaXR0ZXN0cy5qcwkod29ya2luZyBjb3B5KQpAQCAtMTksOSArMTks
OSBAQCB2YXIga0V4YW1wbGVSZXN1bHRzQnlUZXN0ID0gewogICAgIH0KIH0KIAotdGVzdCgiQnVp
bGRlclJlc3VsdHMucmVzdWx0c0J5VGVzdCIsIDEsIGZ1bmN0aW9uKCkgewotICAgIHZhciByZXN1
bHRzQnlUZXN0ID0gdWkucmVzdWx0c0J5VGVzdChrRXhhbXBsZVJlc3VsdHNCeVRlc3QpOwotICAg
IGVxdWFsKHJlc3VsdHNCeVRlc3QuaHRtbCgpLAordGVzdCgic3VtbWFyaXplUmVzdWx0c0J5VGVz
dCIsIDEsIGZ1bmN0aW9uKCkgeworICAgIHZhciByZXN1bHRzU3VtbWFyeSA9IHVpLnN1bW1hcml6
ZVJlc3VsdHNCeVRlc3Qoa0V4YW1wbGVSZXN1bHRzQnlUZXN0KTsKKyAgICBlcXVhbChyZXN1bHRz
U3VtbWFyeS5odG1sKCksCiAgICAgICAgICc8ZGl2IGNsYXNzPSJ0ZXN0Ij4nICsKICAgICAgICAg
ICAgICc8ZGl2IGNsYXNzPSJ0ZXN0TmFtZSI+c2Nyb2xsYmFycy9jdXN0b20tc2Nyb2xsYmFyLXdp
dGgtaW5jb21wbGV0ZS1zdHlsZS5odG1sPC9kaXY+JyArCiAgICAgICAgICAgICAgICAgJzxkaXYg
Y2xhc3M9ImJ1aWxkZXJzIj4nICsKQEAgLTM2LDMgKzM2LDIxIEBAIHRlc3QoIkJ1aWxkZXJSZXN1
bHRzLnJlc3VsdHNCeVRlc3QiLCAxLCAKICAgICAgICAgICAgICc8L2Rpdj4nICsKICAgICAgICAg
JzwvZGl2PicpOwogfSk7CisKK3Rlc3QoInJlc3VsdHMiLCAxLCBmdW5jdGlvbigpIHsKKyAgICB2
YXIgdGVzdFJlc3VsdHMgPSB1aS5yZXN1bHRzKFsKKyAgICAgICAgJ2h0dHA6Ly9leGFtcGxlLmNv
bS9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zvby1iYXItZXhwZWN0ZWQudHh0JywKKyAgICAgICAgJ2h0
dHA6Ly9leGFtcGxlLmNvbS9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zvby1iYXItYWN0dWFsLnR4dCcs
CisgICAgICAgICdodHRwOi8vZXhhbXBsZS5jb20vbGF5b3V0LXRlc3QtcmVzdWx0cy9mb28tYmFy
LWRpZmYudHh0JywKKyAgICAgICAgJ2h0dHA6Ly9leGFtcGxlLmNvbS9sYXlvdXQtdGVzdC1yZXN1
bHRzL2Zvby1iYXItZXhwZWN0ZWQucG5nJywKKyAgICAgICAgJ2h0dHA6Ly9leGFtcGxlLmNvbS9s
YXlvdXQtdGVzdC1yZXN1bHRzL2Zvby1iYXItYWN0dWFsLnBuZycsCisgICAgICAgICdodHRwOi8v
ZXhhbXBsZS5jb20vbGF5b3V0LXRlc3QtcmVzdWx0cy9mb28tYmFyLWRpZmYucG5nJywKKyAgICBd
KTsKKyAgICBlcXVhbCh0ZXN0UmVzdWx0cy5odG1sKCksCisgICAgICAgICc8aWZyYW1lIHNyYz0i
aHR0cDovL2V4YW1wbGUuY29tL2xheW91dC10ZXN0LXJlc3VsdHMvZm9vLWJhci1leHBlY3RlZC50
eHQiIGNsYXNzPSJleHBlY3RlZCI+PC9pZnJhbWU+JyArCisgICAgICAgICc8aWZyYW1lIHNyYz0i
aHR0cDovL2V4YW1wbGUuY29tL2xheW91dC10ZXN0LXJlc3VsdHMvZm9vLWJhci1hY3R1YWwudHh0
IiBjbGFzcz0iYWN0dWFsIj48L2lmcmFtZT4nICsKKyAgICAgICAgJzxpZnJhbWUgc3JjPSJodHRw
Oi8vZXhhbXBsZS5jb20vbGF5b3V0LXRlc3QtcmVzdWx0cy9mb28tYmFyLWRpZmYudHh0IiBjbGFz
cz0iZGlmZiI+PC9pZnJhbWU+JyArCisgICAgICAgICc8aW1nIHNyYz0iaHR0cDovL2V4YW1wbGUu
Y29tL2xheW91dC10ZXN0LXJlc3VsdHMvZm9vLWJhci1leHBlY3RlZC5wbmciIGNsYXNzPSJleHBl
Y3RlZCI+JyArCisgICAgICAgICc8aW1nIHNyYz0iaHR0cDovL2V4YW1wbGUuY29tL2xheW91dC10
ZXN0LXJlc3VsdHMvZm9vLWJhci1hY3R1YWwucG5nIiBjbGFzcz0iYWN0dWFsIj4nICsKKyAgICAg
ICAgJzxpbWcgc3JjPSJodHRwOi8vZXhhbXBsZS5jb20vbGF5b3V0LXRlc3QtcmVzdWx0cy9mb28t
YmFyLWRpZmYucG5nIiBjbGFzcz0iZGlmZiI+Jyk7Cit9KTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100066</attachid>
            <date>2011-07-07 19:26:56 -0700</date>
            <delta_ts>2011-07-08 09:47:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64141-20110707192655.patch</filename>
            <type>text/plain</type>
            <size>18722</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDkwNjA0KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjcgQEAKKzIwMTEtMDctMDcgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBUZWFjaCBnYXJkZW4tby1tYXRpYyBob3cgdG8gZGlzcGxheSB0ZXN0IHJlc3VsdHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0MTQxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBpbmNsdWRlcyBiYXNpYyBpbmZyYXN0cnVjdHVyZSBmb3IgcHJvYmluZyBidWlsZC5jaHJvbWl1
bS5vcmcKKyAgICAgICAgZm9yIHRlc3QgcmVzdWx0cy4gIFdlIG9ubHkgaGFuZGxlIHRleHQgYW5k
IGltYWdlIHRlc3RzLCBub3QgYW55dGhpbmcKKyAgICAgICAgY29tcGxpY2F0ZWQgbGlrZSByZWZ0
ZXN0cy4gIEFsc28sIHdlJ3JlIHVzaW5nIHRoZSByZXZpc2lvbi9idWlsZAorICAgICAgICBpbmRl
cGVuZGVudCByZXN1bHRzIHN0b3JlIG9uIHRoZSBzZXJ2ZXIsIHNvIHdlJ3JlIGF2b2lkaW5nIHRo
YXQKKyAgICAgICAgY29tcGxpY2F0aW9uIGZvciBub3cuCisKKyAgICAgICAgSXQncyBzbGlnaHRs
eSBoYWNreSB0aGF0IHdlIG5lZWQgdG8gcHJvYmUgdGhlIHNlcnZlciB0byBzZWUgd2hhdCBraW5k
cworICAgICAgICBvZiByZXN1bHRzIGV4aXN0LiAgQSBiZXR0ZXIgc29sdXRpb24gd291bGQgYmUg
dG8gYWRkIENPUlMgc3VwcG9ydCB0bworICAgICAgICB0aGUgc2VydmVyIG9yIHRvIHVzZSB0aGUg
bG9jYWwgc2VydmVyIHRvIGhlbHAuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wv
c2VydmVycy9kYXRhL2dhcmRlbmluZ3NlcnZlci9iYXNlLmpzOgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2RhdGEvZ2FyZGVuaW5nc2VydmVyL2luZGV4Lmh0bWw6Cisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZGF0YS9nYXJkZW5pbmdzZXJ2
ZXIvbWFpbi5qczoKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9kYXRh
L2dhcmRlbmluZ3NlcnZlci9yZXN1bHRzLmpzOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
dG9vbC9zZXJ2ZXJzL2RhdGEvZ2FyZGVuaW5nc2VydmVyL3VpLmpzOgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2RhdGEvZ2FyZGVuaW5nc2VydmVyL3VpX3VuaXR0ZXN0
cy5qczoKKwogMjAxMS0wNy0wNyAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgVXBkYXRlIFRlc3RGYWlsdXJlcydzIHRpdGxlIGFuZCBoZWFkZXIgaW1tZWRpYXRlbHkg
dXBvbiBuYXZpZ2F0aW9uCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVy
cy9kYXRhL2dhcmRlbmluZ3NlcnZlci9iYXNlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2RhdGEvZ2FyZGVuaW5nc2VydmVyL2Jhc2UuanMJKHJl
dmlzaW9uIDkwNTg2KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZGF0
YS9nYXJkZW5pbmdzZXJ2ZXIvYmFzZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMiwxMSArMiwyNyBA
QCB2YXIgYmFzZSA9IGJhc2UgfHwge307CiAKIChmdW5jdGlvbigpewogCitiYXNlLmVuZHNXaXRo
ID0gZnVuY3Rpb24oc3RyaW5nLCBzdWZmaXgpCit7CisgICAgaWYgKHN1ZmZpeC5sZW5ndGggPiBz
dHJpbmcubGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdmFyIGV4cGVjdGVkSW5k
ZXggPSBzdHJpbmcubGVuZ3RoIC0gc3VmZml4Lmxlbmd0aDsKKyAgICByZXR1cm4gc3RyaW5nLmxh
c3RJbmRleE9mKHN1ZmZpeCkgPT0gZXhwZWN0ZWRJbmRleDsKK307CisKIGJhc2Uuam9pblBhdGgg
PSBmdW5jdGlvbihwYXJlbnQsIGNoaWxkKQogewogICAgIGlmIChwYXJlbnQubGVuZ3RoID09IDAp
CiAgICAgICAgIHJldHVybiBjaGlsZDsKICAgICByZXR1cm4gcGFyZW50ICsgJy8nICsgY2hpbGQ7
Cit9OworCitiYXNlLnRyaW1FeHRlbnNpb24gPSBmdW5jdGlvbih1cmwpCit7CisgICAgdmFyIGlu
ZGV4ID0gdXJsLmxhc3RJbmRleE9mKCcuJyk7CisgICAgaWYgKGluZGV4ID09IC0xKQorICAgICAg
ICByZXR1cm4gdXJsOworICAgIHJldHVybiB1cmwuc3Vic3RyKDAsIGluZGV4KTsKIH0KIAogYmFz
ZS5maWx0ZXJUcmVlID0gZnVuY3Rpb24odHJlZSwgaXNMZWFmLCBwcmVkaWNhdGUpCkBAIC0yOSw2
ICs0NSwyMyBAQCBiYXNlLmZpbHRlclRyZWUgPSBmdW5jdGlvbih0cmVlLCBpc0xlYWYsCiAKICAg
ICB3YWxrU3VidHJlZSh0cmVlLCAnJyk7CiAgICAgcmV0dXJuIGZpbHRlcmVkVHJlZTsKLX0KK307
CisKK2Jhc2UucHJvYmUgPSBmdW5jdGlvbih1cmwsIG9wdGlvbnMpCit7CisgICAgdmFyIHNjcmlw
dEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKKyAgICBzY3JpcHRF
bGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgJChz
Y3JpcHRFbGVtZW50KS5kZXRhY2goKTsKKyAgICAgICAgaWYgKG9wdGlvbnMuc3VjY2VzcykKKyAg
ICAgICAgICAgIG9wdGlvbnMuc3VjY2Vzcy5jYWxsKCk7CisgICAgfSwgZmFsc2UpOworICAgIHNj
cmlwdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBmdW5jdGlvbigpIHsKKyAgICAg
ICAgJChzY3JpcHRFbGVtZW50KS5kZXRhY2goKTsKKyAgICAgICAgaWYgKG9wdGlvbnMuZXJyb3Ip
CisgICAgICAgICAgICBvcHRpb25zLmVycm9yLmNhbGwoKTsKKyAgICB9LCBmYWxzZSk7CisgICAg
c2NyaXB0RWxlbWVudC5zcmMgPSB1cmw7CisgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChz
Y3JpcHRFbGVtZW50KTsKK307CiAKIH0pKCk7CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3Rvb2wvc2VydmVycy9kYXRhL2dhcmRlbmluZ3NlcnZlci9iYXNlX3VuaXR0ZXN0cy5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9kYXRhL2dhcmRl
bmluZ3NlcnZlci9iYXNlX3VuaXR0ZXN0cy5qcwkocmV2aXNpb24gOTA1ODYpCisrKyBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9kYXRhL2dhcmRlbmluZ3NlcnZlci9iYXNlX3Vu
aXR0ZXN0cy5qcwkod29ya2luZyBjb3B5KQpAQCAtNSw2ICs1LDI3IEBAIHRlc3QoImpvaW5QYXRo
IiwgMSwgZnVuY3Rpb24oKSB7CiAgICAgZXF1YWxzKHZhbHVlLCAicGF0aC90by90ZXN0Lmh0bWwi
KTsKIH0pOwogCit0ZXN0KCJlbmRzV2l0aCIsIDksIGZ1bmN0aW9uKCkgeworICAgIG9rKGJhc2Uu
ZW5kc1dpdGgoInh5eiIsICIiKSk7CisgICAgb2soYmFzZS5lbmRzV2l0aCgieHl6IiwgInoiKSk7
CisgICAgb2soYmFzZS5lbmRzV2l0aCgieHl6IiwgInl6IikpOworICAgIG9rKGJhc2UuZW5kc1dp
dGgoInh5eiIsICJ4eXoiKSk7CisgICAgb2soIWJhc2UuZW5kc1dpdGgoInh5eiIsICJ3eHl6Iikp
OworICAgIG9rKCFiYXNlLmVuZHNXaXRoKCJ4eXoiLCAiZ3d4eXoiKSk7CisgICAgb2soYmFzZS5l
bmRzV2l0aCgiIiwgIiIpKTsKKyAgICBvayghYmFzZS5lbmRzV2l0aCgiIiwgInoiKSk7CisgICAg
b2soIWJhc2UuZW5kc1dpdGgoInh5eHkiLCAieXgiKSk7Cit9KTsKKwordGVzdCgidHJpbUV4dGVu
c2lvbiIsIDYsIGZ1bmN0aW9uKCkgeworICAgIGVxdWFscyhiYXNlLnRyaW1FeHRlbnNpb24oInh5
eiIpLCAieHl6Iik7CisgICAgZXF1YWxzKGJhc2UudHJpbUV4dGVuc2lvbigieHkueiIpLCAieHki
KTsKKyAgICBlcXVhbHMoYmFzZS50cmltRXh0ZW5zaW9uKCJ4Lnl6IiksICJ4Iik7CisgICAgZXF1
YWxzKGJhc2UudHJpbUV4dGVuc2lvbigieC55LnoiKSwgIngueSIpOworICAgIGVxdWFscyhiYXNl
LnRyaW1FeHRlbnNpb24oIi54eXoiKSwgIiIpOworICAgIGVxdWFscyhiYXNlLnRyaW1FeHRlbnNp
b24oIiIpLCAiIik7Cit9KTsKKwogdGVzdCgiam9pblBhdGggd2l0aCBlbXB0eSBwYXJlbnQiLCAx
LCBmdW5jdGlvbigpIHsKICAgICB2YXIgdmFsdWUgPSBiYXNlLmpvaW5QYXRoKCIiLCAidGVzdC5o
dG1sIik7CiAgICAgZXF1YWxzKHZhbHVlLCAidGVzdC5odG1sIik7CkluZGV4OiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9kYXRhL2dhcmRlbmluZ3NlcnZlci9pbmRleC5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2RhdGEv
Z2FyZGVuaW5nc2VydmVyL2luZGV4Lmh0bWwJKHJldmlzaW9uIDkwNTg2KQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZGF0YS9nYXJkZW5pbmdzZXJ2ZXIvaW5kZXguaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTAgKzQwLDE0IEBAIGgxIHsKIC5mYWlsdXJlcyAuYnVp
bGRlcnMgewogICBjb2xvcjogIzg4ODsKIH0KLS5mYWlsdXJlcyAuYnVpbGRlck5hbWUsIC5mYWls
dXJlcyAuYWN0dWFsIHsKKy5idWlsZGVyIC5idWlsZGVyTmFtZSwgLmJ1aWxkZXIgLmFjdHVhbCB7
CiAgIGZsb2F0OiBsZWZ0OwogICB3aWR0aDogMjAwcHg7CiB9CisucmVzdWx0cyBpZnJhbWUsIC5y
ZXN1bHRzIGltZyB7CisgIHdpZHRoOiA0MDBweDsKKyAgaGVpZ2h0OiAzMDBweDsKK30KIDwvc3R5
bGU+CiA8bGluayByZWw9Imljb24iIGlkPSJmYXZpY29uIiB0eXBlPSJpbWFnZS9wbmciIGhyZWY9
ImZhdmljb24tZ3JlZW4ucG5nIj4KIDwvaGVhZD4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdG9vbC9zZXJ2ZXJzL2RhdGEvZ2FyZGVuaW5nc2VydmVyL21haW4uanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZGF0YS9nYXJkZW5pbmdzZXJ2
ZXIvbWFpbi5qcwkocmV2aXNpb24gOTA1ODYpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rv
b2wvc2VydmVycy9kYXRhL2dhcmRlbmluZ3NlcnZlci9tYWluLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0xNywyMCArMTcsMzMgQEAgZnVuY3Rpb24gc2V0SWNvblN0YXRlKGhhc0ZhaWx1cmVzKQogewog
ICAgIHZhciBmYXZpY29uVVJMID0gJ2Zhdmljb24tJyArIChoYXNGYWlsdXJlcyA/ICdyZWQnIDog
J2dyZWVuJykgKyAnLnBuZyc7CiAgICAgJCgnI2Zhdmljb24nKS5hdHRyKCdocmVmJywgZmF2aWNv
blVSTCk7Ci19OworfQogCiBmdW5jdGlvbiBmZXRjaFJlc3VsdHMob25zdWNjZXNzKQogewogICAg
IHJlc3VsdHMuZmV0Y2hSZXN1bHRzQnlCdWlsZGVyKGNvbmZpZy5idWlsZGVycywgZnVuY3Rpb24o
cmVzdWx0c0J5QnVpbGRlcikgewotICAgICAgICB2YXIgdW5leHBlY3RlZEZhaWx1cmVzID0gdWku
cmVzdWx0c0J5VGVzdChyZXN1bHRzLnVuZXhwZWN0ZWRGYWlsdXJlc0J5VGVzdChyZXN1bHRzQnlC
dWlsZGVyKSk7CisgICAgICAgIHZhciB1bmV4cGVjdGVkRmFpbHVyZXMgPSB1aS5zdW1tYXJpemVS
ZXN1bHRzQnlUZXN0KHJlc3VsdHMudW5leHBlY3RlZEZhaWx1cmVzQnlUZXN0KHJlc3VsdHNCeUJ1
aWxkZXIpKTsKICAgICAgICAgJCgnLmZhaWx1cmVzJykuYXBwZW5kKHVuZXhwZWN0ZWRGYWlsdXJl
cyk7CiAgICAgICAgIG9uc3VjY2VzcygpOwogICAgIH0pOwogICAgIHNldEljb25TdGF0ZSgkKCcu
ZmFpbHVyZXMnKS5sZW5ndGgpOwogfQogCitmdW5jdGlvbiBleHBhbmRSZXN1bHRzKCkKK3sKKyAg
ICB2YXIgcmVzdWx0c1N1bW1hcnkgPSAkKHRoaXMpOworICAgIHZhciB0ZXN0TmFtZSA9ICQoJy50
ZXN0TmFtZScsIHJlc3VsdHNTdW1tYXJ5KS50ZXh0KCk7CisgICAgJCgnLmJ1aWxkZXJOYW1lJywg
cmVzdWx0c1N1bW1hcnkpLmVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBidWlsZGVyTmFt
ZSA9ICQodGhpcykudGV4dCgpOworICAgICAgICByZXN1bHRzLmZldGNoUmVzdWx0c1VSTHMoYnVp
bGRlck5hbWUsIHRlc3ROYW1lLCBmdW5jdGlvbihyZXN1bHRVUkxzKSB7CisgICAgICAgICAgICBy
ZXN1bHRzU3VtbWFyeS5hcHBlbmQodWkucmVzdWx0cyhyZXN1bHRVUkxzKSk7CisgICAgICAgIH0p
OworICAgIH0pOworfQorCiAkKCcuaGlkZScpLmxpdmUoJ2NsaWNrJywgaGlkZSk7CiAkKCcucXVp
dCcpLmxpdmUoJ2NsaWNrJywgcXVpdCk7CiskKCcucmVzdWx0cy1zdW1tYXJ5IC50ZXN0JykubGl2
ZSgnY2xpY2snLCBleHBhbmRSZXN1bHRzKTsKIAogJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24o
KSB7CiAgICAgZmV0Y2hSZXN1bHRzKGZ1bmN0aW9uKCkgewpJbmRleDogVG9vbHMvU2NyaXB0cy93
ZWJraXRweS90b29sL3NlcnZlcnMvZGF0YS9nYXJkZW5pbmdzZXJ2ZXIvcmVzdWx0cy5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9kYXRhL2dhcmRl
bmluZ3NlcnZlci9yZXN1bHRzLmpzCShyZXZpc2lvbiA5MDU4NikKKysrIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2RhdGEvZ2FyZGVuaW5nc2VydmVyL3Jlc3VsdHMuanMJKHdv
cmtpbmcgY29weSkKQEAgLTcsNiArNywyNiBAQCB2YXIga1Rlc3RUeXBlID0gJ2xheW91dC10ZXN0
cyc7CiB2YXIga1Jlc3VsdHNOYW1lID0gJ2Z1bGxfcmVzdWx0cy5qc29uJzsKIHZhciBrTWFzdGVy
TmFtZSA9ICdDaHJvbWl1bVdlYmtpdCc7CiAKK3ZhciBrTGF5b3V0VGVzdFJlc3VsdHNTZXJ2ZXIg
PSAnaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZy9mL2Nocm9taXVtL2xheW91dF90ZXN0X3Jlc3Vs
dHMvJzsKK3ZhciBrTGF5b3V0VGVzdFJlc3VsdHNQYXRoID0gJy9yZXN1bHRzL2xheW91dC10ZXN0
LXJlc3VsdHMvJzsKKwordmFyIGtQb3NzaWJsZVN1ZmZpeExpc3QgPSBbCisgICAgJy1leHBlY3Rl
ZC5wbmcnLAorICAgICctYWN0dWFsLnBuZycsCisgICAgJy1kaWZmLnBuZycsCisgICAgJy1leHBl
Y3RlZC50eHQnLAorICAgICctYWN0dWFsLnR4dCcsCisgICAgJy1kaWZmLnR4dCcsCisgICAgLy8g
RklYTUU6IEFkZCBzdXBwb3J0IGZvciB0aGVzZSByZXN1bHQgdHlwZXMuCisgICAgLy8gJy13ZGlm
Zi5odG1sJywKKyAgICAvLyAnLXByZXR0eS1kaWZmLmh0bWwnLAorICAgIC8vICctZXhwZWN0ZWQu
aHRtbCcsCisgICAgLy8gJy1leHBlY3RlZC1taXNtYXRjaC5odG1sJywKKyAgICAvLyAnLWV4cGVj
dGVkLndhdicsCisgICAgLy8gJy1hY3R1YWwud2F2JywKKyAgICAvLyAuLi4gYW5kIHBvc3NpYmx5
IG1vcmUuCitdOworCiB2YXIgUEFTUyA9ICdQQVNTJzsKIHZhciBUSU1FT1VUID0gJ1RJTUVPVVQn
OwogdmFyIFRFWFQgPSAnVEVYVCc7CkBAIC0xNiw2ICszNiwxNyBAQCB2YXIgSU1BR0VfVEVYVCA9
ICdJTUFHRStURVhUJzsKIAogdmFyIGtGYWlsaW5nUmVzdWx0cyA9IFtUSU1FT1VULCBURVhULCBD
UkFTSCwgSU1BR0UsIElNQUdFX1RFWFRdOwogCisvLyBLaW5kcyBvZiByZXN1bHRzLgordmFyIGtB
Y3R1YWxLaW5kID0gJ2FjdHVhbCc7Cit2YXIga0V4cGVjdGVkS2luZCA9ICdleHBlY3RlZCc7Cit2
YXIga0RpZmZLaW5kID0gJ2RpZmYnOwordmFyIGtVbmtub3duS2luZCA9ICd1bmtub3duJzsKKwor
Ly8gVHlwZXMgb2YgdGVzdHMuCit2YXIga0ltYWdlVHlwZSA9ICdpbWFnZScKK3ZhciBrVGV4dFR5
cGUgPSAndGV4dCcKKy8vIEZJWE1FOiBUaGVyZSBhcmUgbW9yZSB0eXBlcyBvZiB0ZXN0cy4KKwog
ZnVuY3Rpb24gaXNGYWlsdXJlKHJlc3VsdCkKIHsKICAgICByZXR1cm4ga0ZhaWxpbmdSZXN1bHRz
LmluZGV4T2YocmVzdWx0KSAhPSAtMTsKQEAgLTg5LDcgKzEyMCw3NiBAQCByZXN1bHRzLnVuZXhw
ZWN0ZWRGYWlsdXJlc0J5VGVzdCA9IGZ1bmN0CiAgICAgcmV0dXJuIHVuZXhwZWN0ZWRGYWlsdXJl
czsKIH07CiAKLWZ1bmN0aW9uIHJlc3VsdHNVUkwoYnVpbGRlck5hbWUsIG5hbWUpCitmdW5jdGlv
biByZXN1bHRzRGlyZWN0b3J5Rm9yQnVpbGRlcihidWlsZGVyTmFtZSkKK3sKKyAgICByZXR1cm4g
YnVpbGRlck5hbWUucmVwbGFjZSgvWyAuKCldL2csICdfJyk7Cit9CisKK2Z1bmN0aW9uIHJlc3Vs
dHNEaXJlY3RvcnlVUkwoYnVpbGRlck5hbWUpCit7CisgICAgcmV0dXJuIGtMYXlvdXRUZXN0UmVz
dWx0c1NlcnZlciArIHJlc3VsdHNEaXJlY3RvcnlGb3JCdWlsZGVyKGJ1aWxkZXJOYW1lKSArIGtM
YXlvdXRUZXN0UmVzdWx0c1BhdGg7Cit9CisKK3Jlc3VsdHMucmVzdWx0S2luZCA9IGZ1bmN0aW9u
KHVybCkKK3sKKyAgICBpZiAoLy1hY3R1YWxcLlthLXpdKyQvLnRlc3QodXJsKSkKKyAgICAgICAg
cmV0dXJuIGtBY3R1YWxLaW5kOworICAgIGVsc2UgaWYgKC8tZXhwZWN0ZWRcLlthLXpdKyQvLnRl
c3QodXJsKSkKKyAgICAgICAgcmV0dXJuIGtFeHBlY3RlZEtpbmQ7CisgICAgZWxzZSBpZiAoL2Rp
ZmZcLlthLXpdKyQvLnRlc3QodXJsKSkKKyAgICAgICAgcmV0dXJuIGtEaWZmS2luZDsKKyAgICBy
ZXR1cm4ga1Vua25vd25LaW5kOworfQorCityZXN1bHRzLnJlc3VsdFR5cGUgPSBmdW5jdGlvbih1
cmwpCit7CisgICAgaWYgKC9cLnBuZyQvLnRlc3QodXJsKSkKKyAgICAgICAgcmV0dXJuIGtJbWFn
ZVR5cGU7CisgICAgcmV0dXJuIGtUZXh0VHlwZTsKK30KKworZnVuY3Rpb24gc29ydFJlc3VsdFVS
THNCeVN1ZmZpeCh1cmxzKQoreworICAgIHZhciBzb3J0ZWRVUkxzID0gW107CisgICAgJC5lYWNo
KGtQb3NzaWJsZVN1ZmZpeExpc3QsIGZ1bmN0aW9uKGksIHN1ZmZpeCkgeworICAgICAgICAkLmVh
Y2godXJscywgZnVuY3Rpb24oaiwgdXJsKSB7CisgICAgICAgICAgICBpZiAoIWJhc2UuZW5kc1dp
dGgodXJsLCBzdWZmaXgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHNv
cnRlZFVSTHMucHVzaCh1cmwpOworICAgICAgICB9KTsKKyAgICB9KTsKKyAgICBpZiAoc29ydGVk
VVJMcy5sZW5ndGggIT0gdXJscy5sZW5ndGgpCisgICAgICAgIHRocm93ICJzb3J0UmVzdWx0VVJM
c0J5U3VmZml4IGZhaWxlZCB0byByZXR1cm4gdGhlIHNhbWUgbnVtYmVyIG9mIFVSTHMuIgorICAg
IHJldHVybiBzb3J0ZWRVUkxzOworfQorCityZXN1bHRzLmZldGNoUmVzdWx0c1VSTHMgPSBmdW5j
dGlvbihidWlsZGVyTmFtZSwgdGVzdE5hbWUsIGNhbGxiYWNrKQoreworICAgIHZhciBzdGVtID0g
cmVzdWx0c0RpcmVjdG9yeVVSTChidWlsZGVyTmFtZSk7CisgICAgdmFyIHRlc3ROYW1lU3RlbSA9
IGJhc2UudHJpbUV4dGVuc2lvbih0ZXN0TmFtZSk7CisKKyAgICB2YXIgcmVzdWx0VVJMcyA9IFtd
OworICAgIHZhciByZXF1ZXN0c0luRmxpZ2h0ID0ga1Bvc3NpYmxlU3VmZml4TGlzdC5sZW5ndGg7
CisKKyAgICBmdW5jdGlvbiBjaGVja0NvbXBsZXRlKCkKKyAgICB7CisgICAgICAgIGlmICgtLXJl
cXVlc3RzSW5GbGlnaHQgPT0gMCkKKyAgICAgICAgICAgIGNhbGxiYWNrKHNvcnRSZXN1bHRVUkxz
QnlTdWZmaXgocmVzdWx0VVJMcykpOworICAgIH0KKworICAgICQuZWFjaChrUG9zc2libGVTdWZm
aXhMaXN0LCBmdW5jdGlvbihpbmRleCwgc3VmZml4KSB7CisgICAgICAgIHZhciB1cmwgPSBzdGVt
ICsgdGVzdE5hbWVTdGVtICsgc3VmZml4OworICAgICAgICBiYXNlLnByb2JlKHVybCwgeworICAg
ICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0VVJM
cy5wdXNoKHVybCk7CisgICAgICAgICAgICAgICAgY2hlY2tDb21wbGV0ZSgpOworICAgICAgICAg
ICAgfSwKKyAgICAgICAgICAgIGVycm9yOiBjaGVja0NvbXBsZXRlLAorICAgICAgICB9KTsKKyAg
ICB9KTsKK307CisKK2Z1bmN0aW9uIHJlc3VsdHNTdW1tYXJ5VVJMKGJ1aWxkZXJOYW1lLCBuYW1l
KQogewogICAgIHJldHVybiBrVGVzdFJlc3VsdHNTZXJ2ZXIgKyAndGVzdGZpbGUnICsKICAgICAg
ICAgICAnP2J1aWxkZXI9JyArIGJ1aWxkZXJOYW1lICsKQEAgLTEwMSw3ICsyMDEsNyBAQCBmdW5j
dGlvbiByZXN1bHRzVVJMKGJ1aWxkZXJOYW1lLCBuYW1lKQogcmVzdWx0cy5mZXRjaFJlc3VsdHNG
b3JCdWlsZGVyID0gZnVuY3Rpb24oYnVpbGRlck5hbWUsIG9uc3VjY2VzcykKIHsKICAgICAkLmFq
YXgoewotICAgICAgICB1cmw6IHJlc3VsdHNVUkwoYnVpbGRlck5hbWUsIGtSZXN1bHRzTmFtZSks
CisgICAgICAgIHVybDogcmVzdWx0c1N1bW1hcnlVUkwoYnVpbGRlck5hbWUsIGtSZXN1bHRzTmFt
ZSksCiAgICAgICAgIGRhdGFUeXBlOiAnanNvbnAnLAogICAgICAgICBzdWNjZXNzOiBmdW5jdGlv
bihkYXRhKSB7CiAgICAgICAgICAgICBvbnN1Y2Nlc3MobmV3IHJlc3VsdHMuQnVpbGRlclJlc3Vs
dHMoZGF0YSkpOwpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZGF0
YS9nYXJkZW5pbmdzZXJ2ZXIvcmVzdWx0c191bml0dGVzdHMuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZGF0YS9nYXJkZW5pbmdzZXJ2ZXIvcmVz
dWx0c191bml0dGVzdHMuanMJKHJldmlzaW9uIDkwNTg2KQorKysgVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90b29sL3NlcnZlcnMvZGF0YS9nYXJkZW5pbmdzZXJ2ZXIvcmVzdWx0c191bml0dGVzdHMu
anMJKHdvcmtpbmcgY29weSkKQEAgLTYyLDMgKzYyLDc0IEBAIHRlc3QoInVuZXhwZWN0ZWRGYWls
dXJlc0J5VGVzdCIsIDEsIGZ1bmMKICAgICAgICAgfQogICAgIH0pOwogfSk7CisKK3Rlc3QoInJl
c3VsdEtpbmQiLCAxMiwgZnVuY3Rpb24oKSB7CisgICAgZXF1YWxzKHJlc3VsdHMucmVzdWx0S2lu
ZCgiaHR0cDovL2V4YW1wbGUuY29tL2Zvby1hY3R1YWwudHh0IiksICJhY3R1YWwiKTsKKyAgICBl
cXVhbHMocmVzdWx0cy5yZXN1bHRLaW5kKCJodHRwOi8vZXhhbXBsZS5jb20vZm9vLWV4cGVjdGVk
LnR4dCIpLCAiZXhwZWN0ZWQiKTsKKyAgICBlcXVhbHMocmVzdWx0cy5yZXN1bHRLaW5kKCJodHRw
Oi8vZXhhbXBsZS5jb20vZm9vLWRpZmYudHh0IiksICJkaWZmIik7CisgICAgZXF1YWxzKHJlc3Vs
dHMucmVzdWx0S2luZCgiaHR0cDovL2V4YW1wbGUuY29tL2Zvby5iYXItYWN0dWFsLnR4dCIpLCAi
YWN0dWFsIik7CisgICAgZXF1YWxzKHJlc3VsdHMucmVzdWx0S2luZCgiaHR0cDovL2V4YW1wbGUu
Y29tL2Zvby5iYXItZXhwZWN0ZWQudHh0IiksICJleHBlY3RlZCIpOworICAgIGVxdWFscyhyZXN1
bHRzLnJlc3VsdEtpbmQoImh0dHA6Ly9leGFtcGxlLmNvbS9mb28uYmFyLWRpZmYudHh0IiksICJk
aWZmIik7CisgICAgZXF1YWxzKHJlc3VsdHMucmVzdWx0S2luZCgiaHR0cDovL2V4YW1wbGUuY29t
L2Zvby1hY3R1YWwucG5nIiksICJhY3R1YWwiKTsKKyAgICBlcXVhbHMocmVzdWx0cy5yZXN1bHRL
aW5kKCJodHRwOi8vZXhhbXBsZS5jb20vZm9vLWV4cGVjdGVkLnBuZyIpLCAiZXhwZWN0ZWQiKTsK
KyAgICBlcXVhbHMocmVzdWx0cy5yZXN1bHRLaW5kKCJodHRwOi8vZXhhbXBsZS5jb20vZm9vLWRp
ZmYucG5nIiksICJkaWZmIik7CisgICAgZXF1YWxzKHJlc3VsdHMucmVzdWx0S2luZCgiaHR0cDov
L2V4YW1wbGUuY29tL2Zvby1wcmV0dHktZGlmZi5odG1sIiksICJkaWZmIik7CisgICAgZXF1YWxz
KHJlc3VsdHMucmVzdWx0S2luZCgiaHR0cDovL2V4YW1wbGUuY29tL2Zvby13ZGlmZi5odG1sIiks
ICJkaWZmIik7CisgICAgZXF1YWxzKHJlc3VsdHMucmVzdWx0S2luZCgiaHR0cDovL2V4YW1wbGUu
Y29tL2Zvby14eXouaHRtbCIpLCAidW5rbm93biIpOworfSk7CisKK3Rlc3QoInJlc3VsdFR5cGUi
LCAxMiwgZnVuY3Rpb24oKSB7CisgICAgZXF1YWxzKHJlc3VsdHMucmVzdWx0VHlwZSgiaHR0cDov
L2V4YW1wbGUuY29tL2Zvby1hY3R1YWwudHh0IiksICJ0ZXh0Iik7CisgICAgZXF1YWxzKHJlc3Vs
dHMucmVzdWx0VHlwZSgiaHR0cDovL2V4YW1wbGUuY29tL2Zvby1leHBlY3RlZC50eHQiKSwgInRl
eHQiKTsKKyAgICBlcXVhbHMocmVzdWx0cy5yZXN1bHRUeXBlKCJodHRwOi8vZXhhbXBsZS5jb20v
Zm9vLWRpZmYudHh0IiksICJ0ZXh0Iik7CisgICAgZXF1YWxzKHJlc3VsdHMucmVzdWx0VHlwZSgi
aHR0cDovL2V4YW1wbGUuY29tL2Zvby5iYXItYWN0dWFsLnR4dCIpLCAidGV4dCIpOworICAgIGVx
dWFscyhyZXN1bHRzLnJlc3VsdFR5cGUoImh0dHA6Ly9leGFtcGxlLmNvbS9mb28uYmFyLWV4cGVj
dGVkLnR4dCIpLCAidGV4dCIpOworICAgIGVxdWFscyhyZXN1bHRzLnJlc3VsdFR5cGUoImh0dHA6
Ly9leGFtcGxlLmNvbS9mb28uYmFyLWRpZmYudHh0IiksICJ0ZXh0Iik7CisgICAgZXF1YWxzKHJl
c3VsdHMucmVzdWx0VHlwZSgiaHR0cDovL2V4YW1wbGUuY29tL2Zvby1hY3R1YWwucG5nIiksICJp
bWFnZSIpOworICAgIGVxdWFscyhyZXN1bHRzLnJlc3VsdFR5cGUoImh0dHA6Ly9leGFtcGxlLmNv
bS9mb28tZXhwZWN0ZWQucG5nIiksICJpbWFnZSIpOworICAgIGVxdWFscyhyZXN1bHRzLnJlc3Vs
dFR5cGUoImh0dHA6Ly9leGFtcGxlLmNvbS9mb28tZGlmZi5wbmciKSwgImltYWdlIik7CisgICAg
ZXF1YWxzKHJlc3VsdHMucmVzdWx0VHlwZSgiaHR0cDovL2V4YW1wbGUuY29tL2Zvby1wcmV0dHkt
ZGlmZi5odG1sIiksICJ0ZXh0Iik7CisgICAgZXF1YWxzKHJlc3VsdHMucmVzdWx0VHlwZSgiaHR0
cDovL2V4YW1wbGUuY29tL2Zvby13ZGlmZi5odG1sIiksICJ0ZXh0Iik7CisgICAgZXF1YWxzKHJl
c3VsdHMucmVzdWx0VHlwZSgiaHR0cDovL2V4YW1wbGUuY29tL2Zvby54eXoiKSwgInRleHQiKTsK
K30pOworCit0ZXN0KCJmZXRjaFJlc3VsdHNVUkxzIiwgMywgZnVuY3Rpb24oKSB7CisgICAgdmFy
IHJlYWxCYXNlID0gd2luZG93LmJhc2U7CisKKyAgICB2YXIgcGVuZGluZ0NhbGxiYWNrcyA9IHt9
OworICAgIHdpbmRvdy5iYXNlID0ge307CisgICAgYmFzZS5wcm9iZSA9IGZ1bmN0aW9uKHVybCwg
b3B0aW9ucykgeworICAgICAgICBwZW5kaW5nQ2FsbGJhY2tzW3VybF0gPSBvcHRpb25zOworICAg
IH07CisgICAgYmFzZS5lbmRzV2l0aCA9IHJlYWxCYXNlLmVuZHNXaXRoOworICAgIGJhc2UudHJp
bUV4dGVuc2lvbiA9IHJlYWxCYXNlLnRyaW1FeHRlbnNpb247CisKKyAgICByZXN1bHRzLmZldGNo
UmVzdWx0c1VSTHMoIk1vY2sgQnVpbGRlciIsICJ1c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QuaHRt
bCIsIGZ1bmN0aW9uKHJlc3VsdFVSTHMpIHsKKyAgICAgICAgZGVlcEVxdWFsKHJlc3VsdFVSTHMs
IFsKKyAgICAgICAgICAgICJodHRwOi8vYnVpbGQuY2hyb21pdW0ub3JnL2YvY2hyb21pdW0vbGF5
b3V0X3Rlc3RfcmVzdWx0cy9Nb2NrX0J1aWxkZXIvcmVzdWx0cy9sYXlvdXQtdGVzdC1yZXN1bHRz
L3VzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC1leHBlY3RlZC50eHQiLAorICAgICAgICAgICAgImh0
dHA6Ly9idWlsZC5jaHJvbWl1bS5vcmcvZi9jaHJvbWl1bS9sYXlvdXRfdGVzdF9yZXN1bHRzL01v
Y2tfQnVpbGRlci9yZXN1bHRzL2xheW91dC10ZXN0LXJlc3VsdHMvdXNlcnNjcmlwdHMvYW5vdGhl
ci10ZXN0LWFjdHVhbC50eHQiLAorICAgICAgICAgICAgImh0dHA6Ly9idWlsZC5jaHJvbWl1bS5v
cmcvZi9jaHJvbWl1bS9sYXlvdXRfdGVzdF9yZXN1bHRzL01vY2tfQnVpbGRlci9yZXN1bHRzL2xh
eW91dC10ZXN0LXJlc3VsdHMvdXNlcnNjcmlwdHMvYW5vdGhlci10ZXN0LWRpZmYudHh0IiwKKyAg
ICAgICAgXSk7CisgICAgfSk7CisKKyAgICB2YXIgcHJvYmVkVVJMcyA9IFtdOworICAgIGZvciAo
dmFyIHVybCBpbiBwZW5kaW5nQ2FsbGJhY2tzKSB7CisgICAgICAgIHByb2JlZFVSTHMucHVzaCh1
cmwpOworICAgICAgICBpZiAocmVhbEJhc2UuZW5kc1dpdGgodXJsLCAnLnR4dCcpKQorICAgICAg
ICAgICAgcGVuZGluZ0NhbGxiYWNrc1t1cmxdLnN1Y2Nlc3MuY2FsbCgpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBwZW5kaW5nQ2FsbGJhY2tzW3VybF0uZXJyb3IuY2FsbCgpOworICAgIH0K
KworICAgIGRlZXBFcXVhbChwcm9iZWRVUkxzLCBbCisgICAgICAgICJodHRwOi8vYnVpbGQuY2hy
b21pdW0ub3JnL2YvY2hyb21pdW0vbGF5b3V0X3Rlc3RfcmVzdWx0cy9Nb2NrX0J1aWxkZXIvcmVz
dWx0cy9sYXlvdXQtdGVzdC1yZXN1bHRzL3VzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC1leHBlY3Rl
ZC5wbmciLAorICAgICAgICAiaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZy9mL2Nocm9taXVtL2xh
eW91dF90ZXN0X3Jlc3VsdHMvTW9ja19CdWlsZGVyL3Jlc3VsdHMvbGF5b3V0LXRlc3QtcmVzdWx0
cy91c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QtYWN0dWFsLnBuZyIsCisgICAgICAgICJodHRwOi8v
YnVpbGQuY2hyb21pdW0ub3JnL2YvY2hyb21pdW0vbGF5b3V0X3Rlc3RfcmVzdWx0cy9Nb2NrX0J1
aWxkZXIvcmVzdWx0cy9sYXlvdXQtdGVzdC1yZXN1bHRzL3VzZXJzY3JpcHRzL2Fub3RoZXItdGVz
dC1kaWZmLnBuZyIsCisgICAgICAgICJodHRwOi8vYnVpbGQuY2hyb21pdW0ub3JnL2YvY2hyb21p
dW0vbGF5b3V0X3Rlc3RfcmVzdWx0cy9Nb2NrX0J1aWxkZXIvcmVzdWx0cy9sYXlvdXQtdGVzdC1y
ZXN1bHRzL3VzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC1leHBlY3RlZC50eHQiLAorICAgICAgICAi
aHR0cDovL2J1aWxkLmNocm9taXVtLm9yZy9mL2Nocm9taXVtL2xheW91dF90ZXN0X3Jlc3VsdHMv
TW9ja19CdWlsZGVyL3Jlc3VsdHMvbGF5b3V0LXRlc3QtcmVzdWx0cy91c2Vyc2NyaXB0cy9hbm90
aGVyLXRlc3QtYWN0dWFsLnR4dCIsCisgICAgICAgICJodHRwOi8vYnVpbGQuY2hyb21pdW0ub3Jn
L2YvY2hyb21pdW0vbGF5b3V0X3Rlc3RfcmVzdWx0cy9Nb2NrX0J1aWxkZXIvcmVzdWx0cy9sYXlv
dXQtdGVzdC1yZXN1bHRzL3VzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC1kaWZmLnR4dCIsCisgICAg
XSk7CisKKyAgICB3aW5kb3cuYmFzZSA9IHJlYWxCYXNlOworICAgIGVxdWFsKHdpbmRvdy5iYXNl
LCByZWFsQmFzZSwgIkZhaWxlZCB0byByZXN0b3JlIHJlYWwgYmFzZSEiKTsKK30pOwpJbmRleDog
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZGF0YS9nYXJkZW5pbmdzZXJ2ZXIv
dWkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMv
ZGF0YS9nYXJkZW5pbmdzZXJ2ZXIvdWkuanMJKHJldmlzaW9uIDkwNTg2KQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZGF0YS9nYXJkZW5pbmdzZXJ2ZXIvdWkuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIsOSArMiw5IEBAIHZhciB1aSA9IHVpIHx8IHt9OwogCiAoZnVuY3Rp
b24gKCkgewogCi11aS5yZXN1bHRzQnlUZXN0ID0gZnVuY3Rpb24ocmVzdWx0c0J5VGVzdCkKK3Vp
LnN1bW1hcml6ZVJlc3VsdHNCeVRlc3QgPSBmdW5jdGlvbihyZXN1bHRzQnlUZXN0KQogewotICAg
IHZhciBibG9jayA9ICQoJzxkaXYgY2xhc3M9InJlc3VsdHMiPjwvZGl2PicpOworICAgIHZhciBi
bG9jayA9ICQoJzxkaXYgY2xhc3M9InJlc3VsdHMtc3VtbWFyeSI+PC9kaXY+Jyk7CiAgICAgJC5l
YWNoKHJlc3VsdHNCeVRlc3QsIGZ1bmN0aW9uKHRlc3ROYW1lLCByZXN1bHROb2Rlc0J5QnVpbGRl
cikgewogICAgICAgICB2YXIgdGVzdEJsb2NrID0gJCgnPGRpdiBjbGFzcz0idGVzdCI+PGRpdiBj
bGFzcz0idGVzdE5hbWUiPjwvZGl2PjxkaXYgY2xhc3M9ImJ1aWxkZXJzIj48L2Rpdj48L2Rpdj4n
KTsKICAgICAgICAgYmxvY2suYXBwZW5kKHRlc3RCbG9jayk7CkBAIC0yMSw0ICsyMSwxNiBAQCB1
aS5yZXN1bHRzQnlUZXN0ID0gZnVuY3Rpb24ocmVzdWx0c0J5VGVzCiAgICAgcmV0dXJuIGJsb2Nr
OwogfTsKIAordWkucmVzdWx0cyA9IGZ1bmN0aW9uKHJlc3VsdHNVUkxzKQoreworICAgIHZhciBi
bG9jayA9ICQoJzxkaXYgY2xhc3M9InJlc3VsdHMiPjwvZGl2PicpOworICAgICQuZWFjaChyZXN1
bHRzVVJMcywgZnVuY3Rpb24oaW5kZXgsIHJlc3VsdFVSTCkgeworICAgICAgICB2YXIga2luZCA9
IHJlc3VsdHMucmVzdWx0S2luZChyZXN1bHRVUkwpOworICAgICAgICB2YXIgdHlwZSA9IHJlc3Vs
dHMucmVzdWx0VHlwZShyZXN1bHRVUkwpOworICAgICAgICB2YXIgZnJhZ21lbnQgPSB0eXBlID09
ICdpbWFnZScgPyAnPGltZz4nIDogJzxpZnJhbWU+PC9pZnJhbWU+JzsKKyAgICAgICAgYmxvY2su
YXBwZW5kKCQoZnJhZ21lbnQpLmF0dHIoJ3NyYycsIHJlc3VsdFVSTCkuYWRkQ2xhc3Moa2luZCkp
CisgICAgfSk7CisgICAgcmV0dXJuIGJsb2NrOworfTsKKwogfSkoKTsKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2RhdGEvZ2FyZGVuaW5nc2VydmVyL3VpX3VuaXR0
ZXN0cy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVy
cy9kYXRhL2dhcmRlbmluZ3NlcnZlci91aV91bml0dGVzdHMuanMJKHJldmlzaW9uIDkwNTg2KQor
KysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZGF0YS9nYXJkZW5pbmdzZXJ2
ZXIvdWlfdW5pdHRlc3RzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xOSw5ICsxOSw5IEBAIHZhciBr
RXhhbXBsZVJlc3VsdHNCeVRlc3QgPSB7CiAgICAgfQogfQogCi10ZXN0KCJCdWlsZGVyUmVzdWx0
cy5yZXN1bHRzQnlUZXN0IiwgMSwgZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHJlc3VsdHNCeVRlc3Qg
PSB1aS5yZXN1bHRzQnlUZXN0KGtFeGFtcGxlUmVzdWx0c0J5VGVzdCk7Ci0gICAgZXF1YWwocmVz
dWx0c0J5VGVzdC5odG1sKCksCit0ZXN0KCJzdW1tYXJpemVSZXN1bHRzQnlUZXN0IiwgMSwgZnVu
Y3Rpb24oKSB7CisgICAgdmFyIHJlc3VsdHNTdW1tYXJ5ID0gdWkuc3VtbWFyaXplUmVzdWx0c0J5
VGVzdChrRXhhbXBsZVJlc3VsdHNCeVRlc3QpOworICAgIGVxdWFsKHJlc3VsdHNTdW1tYXJ5Lmh0
bWwoKSwKICAgICAgICAgJzxkaXYgY2xhc3M9InRlc3QiPicgKwogICAgICAgICAgICAgJzxkaXYg
Y2xhc3M9InRlc3ROYW1lIj5zY3JvbGxiYXJzL2N1c3RvbS1zY3JvbGxiYXItd2l0aC1pbmNvbXBs
ZXRlLXN0eWxlLmh0bWw8L2Rpdj4nICsKICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0iYnVp
bGRlcnMiPicgKwpAQCAtMzYsMyArMzYsMjEgQEAgdGVzdCgiQnVpbGRlclJlc3VsdHMucmVzdWx0
c0J5VGVzdCIsIDEsIAogICAgICAgICAgICAgJzwvZGl2PicgKwogICAgICAgICAnPC9kaXY+Jyk7
CiB9KTsKKwordGVzdCgicmVzdWx0cyIsIDEsIGZ1bmN0aW9uKCkgeworICAgIHZhciB0ZXN0UmVz
dWx0cyA9IHVpLnJlc3VsdHMoWworICAgICAgICAnaHR0cDovL2V4YW1wbGUuY29tL2xheW91dC10
ZXN0LXJlc3VsdHMvZm9vLWJhci1leHBlY3RlZC50eHQnLAorICAgICAgICAnaHR0cDovL2V4YW1w
bGUuY29tL2xheW91dC10ZXN0LXJlc3VsdHMvZm9vLWJhci1hY3R1YWwudHh0JywKKyAgICAgICAg
J2h0dHA6Ly9leGFtcGxlLmNvbS9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zvby1iYXItZGlmZi50eHQn
LAorICAgICAgICAnaHR0cDovL2V4YW1wbGUuY29tL2xheW91dC10ZXN0LXJlc3VsdHMvZm9vLWJh
ci1leHBlY3RlZC5wbmcnLAorICAgICAgICAnaHR0cDovL2V4YW1wbGUuY29tL2xheW91dC10ZXN0
LXJlc3VsdHMvZm9vLWJhci1hY3R1YWwucG5nJywKKyAgICAgICAgJ2h0dHA6Ly9leGFtcGxlLmNv
bS9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zvby1iYXItZGlmZi5wbmcnLAorICAgIF0pOworICAgIGVx
dWFsKHRlc3RSZXN1bHRzLmh0bWwoKSwKKyAgICAgICAgJzxpZnJhbWUgc3JjPSJodHRwOi8vZXhh
bXBsZS5jb20vbGF5b3V0LXRlc3QtcmVzdWx0cy9mb28tYmFyLWV4cGVjdGVkLnR4dCIgY2xhc3M9
ImV4cGVjdGVkIj48L2lmcmFtZT4nICsKKyAgICAgICAgJzxpZnJhbWUgc3JjPSJodHRwOi8vZXhh
bXBsZS5jb20vbGF5b3V0LXRlc3QtcmVzdWx0cy9mb28tYmFyLWFjdHVhbC50eHQiIGNsYXNzPSJh
Y3R1YWwiPjwvaWZyYW1lPicgKworICAgICAgICAnPGlmcmFtZSBzcmM9Imh0dHA6Ly9leGFtcGxl
LmNvbS9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zvby1iYXItZGlmZi50eHQiIGNsYXNzPSJkaWZmIj48
L2lmcmFtZT4nICsKKyAgICAgICAgJzxpbWcgc3JjPSJodHRwOi8vZXhhbXBsZS5jb20vbGF5b3V0
LXRlc3QtcmVzdWx0cy9mb28tYmFyLWV4cGVjdGVkLnBuZyIgY2xhc3M9ImV4cGVjdGVkIj4nICsK
KyAgICAgICAgJzxpbWcgc3JjPSJodHRwOi8vZXhhbXBsZS5jb20vbGF5b3V0LXRlc3QtcmVzdWx0
cy9mb28tYmFyLWFjdHVhbC5wbmciIGNsYXNzPSJhY3R1YWwiPicgKworICAgICAgICAnPGltZyBz
cmM9Imh0dHA6Ly9leGFtcGxlLmNvbS9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zvby1iYXItZGlmZi5w
bmciIGNsYXNzPSJkaWZmIj4nKTsKK30pOwo=
</data>
<flag name="review"
          id="94688"
          type_id="1"
          status="+"
          setter="ojan"
    />
    <flag name="commit-queue"
          id="94689"
          type_id="3"
          status="-"
          setter="ojan"
    />
          </attachment>
      

    </bug>

</bugzilla>