<?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>133054</bug_id>
          <alias>TerrainPerf</alias>
          <creation_ts>2014-05-18 14:14:31 -0700</creation_ts>
          <short_desc>Performance testing, diamond-square terrain generation + canvas</short_desc>
          <delta_ts>2014-05-23 15:37:55 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://www.playfuljs.com/realistic-terrain-in-130-lines/</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P5</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>133238</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Hunter Loftis">hunter</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1010105</commentid>
    <comment_count>0</comment_count>
    <who name="Hunter Loftis">hunter</who>
    <bug_when>2014-05-18 14:14:31 -0700</bug_when>
    <thetext>This is an implementation of the diamond-square terrain generation algorithm commonly used to generate fractal-noise worlds in games. It stores height map data in a Float32Array and renders to a fixed-sized canvas.

The benchmark averages the result of ten iterations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010106</commentid>
    <comment_count>1</comment_count>
      <attachid>231665</attachid>
    <who name="Hunter Loftis">hunter</who>
    <bug_when>2014-05-18 14:15:11 -0700</bug_when>
    <thetext>Created attachment 231665
Implementation of diamond-square terrain generation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011028</commentid>
    <comment_count>2</comment_count>
      <attachid>231901</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-05-22 11:47:41 -0700</bug_when>
    <thetext>Created attachment 231901
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011029</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-05-22 11:48:16 -0700</bug_when>
    <thetext>Thanks, Hunter. 

I did a bit more formatting to bring this up to WebKit coding standards, and turned it into a patch that can apply to the source tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011030</commentid>
    <comment_count>4</comment_count>
      <attachid>231901</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-05-22 12:02:34 -0700</bug_when>
    <thetext>Comment on attachment 231901
Patch

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

&gt; PerformanceTests/Canvas/terrain.html:197
&gt; +        benchmark(function() {
&gt; +            var terrain = new Terrain(9);
&gt; +            terrain.generate(0.5);
&gt; +            ctx.clearRect(0, 0, width, height);
&gt; +            terrain.draw(ctx, width, height);
&gt; +        });

We should use PerfTestRunner.measureTime or reportValueAsync so that perf bots would be able to run this test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011031</commentid>
    <comment_count>5</comment_count>
      <attachid>231901</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-05-22 12:03:17 -0700</bug_when>
    <thetext>Comment on attachment 231901
Patch

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

&gt; PerformanceTests/Canvas/terrain.html:41
&gt; +        Math.random = (function() {
&gt; +           var seed = 49734321;
&gt; +           return function() {
&gt; +               /* The Jenkins hash function:
&gt; +                   &lt;http://en.wikipedia.org/wiki/Jenkins_hash_function&gt;
&gt; +                   &lt;http://burtleburtle.net/bob/hash/integer.html&gt;
&gt; +                */
&gt; +               seed = ((seed + 0x7ed55d16) + (seed &lt;&lt; 12)) &amp; 0xffffffff;
&gt; +               seed = ((seed ^ 0xc761c23c) ^ (seed &gt;&gt;&gt; 19)) &amp; 0xffffffff;
&gt; +               seed = ((seed + 0x165667b1) + (seed &lt;&lt; 5)) &amp; 0xffffffff;
&gt; +               seed = ((seed + 0xd3a2646c) ^ (seed &lt;&lt; 9)) &amp; 0xffffffff;
&gt; +               seed = ((seed + 0xfd7046c5) + (seed &lt;&lt; 3)) &amp; 0xffffffff;
&gt; +               seed = ((seed ^ 0xb55a4f09) ^ (seed &gt;&gt;&gt; 16)) &amp; 0xffffffff;
&gt; +               return (seed &amp; 0xfffffff) / 0x10000000;
&gt; +           };
&gt; +        })();

This is included in PerformanceTests/resources/runner.js</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011032</commentid>
    <comment_count>6</comment_count>
      <attachid>231901</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-05-22 12:06:21 -0700</bug_when>
    <thetext>Comment on attachment 231901
Patch

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

&gt;&gt; PerformanceTests/Canvas/terrain.html:197
&gt;&gt; +        });
&gt; 
&gt; We should use PerfTestRunner.measureTime or reportValueAsync so that perf bots would be able to run this test.

I think all you need to do is include ../resources/runner.js and then do:
PerfTestRunner.measureTime({run: function () {
    var terrain = new Terrain(9);
    ...
}})</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011380</commentid>
    <comment_count>7</comment_count>
      <attachid>231994</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-05-23 15:00:23 -0700</bug_when>
    <thetext>Created attachment 231994
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011381</commentid>
    <comment_count>8</comment_count>
      <attachid>231995</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-05-23 15:12:20 -0700</bug_when>
    <thetext>Created attachment 231995
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011389</commentid>
    <comment_count>9</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-05-23 15:37:55 -0700</bug_when>
    <thetext>Committed r169287: &lt;http://trac.webkit.org/changeset/169287&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>231665</attachid>
            <date>2014-05-18 14:15:11 -0700</date>
            <delta_ts>2014-05-18 14:15:11 -0700</delta_ts>
            <desc>Implementation of diamond-square terrain generation</desc>
            <filename>terrain.html</filename>
            <type>text/html</type>
            <size>7223</size>
            <attacher name="Hunter Loftis">hunter</attacher>
            
              <data encoding="base64">PGh0bWw+DQogIDxoZWFkPg0KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0
aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCI+DQog
ICAgPHRpdGxlPlRlcnJhaW4gRGVtbyAtIFBsYXlmdWxKUzwvdGl0bGU+DQogICAgPCEtLSBCU0Qg
TGljZW5zZQ0KDQogICAgICBDb3B5cmlnaHQgKGMpIDIwMTQsIEh1bnRlciBMb2Z0aXMNCiAgICAg
IEFsbCByaWdodHMgcmVzZXJ2ZWQuDQoNCiAgICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1l
dDoNCg0KICAgICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KDQogICAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uDQoNCiAgICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQogICAgLS0+DQogIDwvaGVhZD4N
CiAgPGJvZHkgc3R5bGU9J2JhY2tncm91bmQ6ICMwMDAnPg0KICAgIDxwcmUgaWQ9J2NvbnNvbGUn
IHN0eWxlPSdjb2xvcjp3aGl0ZSc+PC9wcmU+DQogICAgPGNhbnZhcyBpZD0nZGlzcGxheSc+PC9j
YW52YXM+DQoNCiAgICA8c2NyaXB0Pg0KICAgICAgICBNYXRoLnJhbmRvbSA9IChmdW5jdGlvbigp
IHsNCiAgICAgICAgICB2YXIgc2VlZCA9IDQ5NzM0MzIxOw0KICAgICAgICAgIHJldHVybiBmdW5j
dGlvbigpIHsNCiAgICAgICAgICAgIC8vIFJvYmVydCBKZW5raW5zJyAzMiBiaXQgaW50ZWdlciBo
YXNoIGZ1bmN0aW9uLg0KICAgICAgICAgICAgc2VlZCA9ICgoc2VlZCArIDB4N2VkNTVkMTYpICsg
KHNlZWQgPDwgMTIpKSAgJiAweGZmZmZmZmZmOw0KICAgICAgICAgICAgc2VlZCA9ICgoc2VlZCBe
IDB4Yzc2MWMyM2MpIF4gKHNlZWQgPj4+IDE5KSkgJiAweGZmZmZmZmZmOw0KICAgICAgICAgICAg
c2VlZCA9ICgoc2VlZCArIDB4MTY1NjY3YjEpICsgKHNlZWQgPDwgNSkpICAgJiAweGZmZmZmZmZm
Ow0KICAgICAgICAgICAgc2VlZCA9ICgoc2VlZCArIDB4ZDNhMjY0NmMpIF4gKHNlZWQgPDwgOSkp
ICAgJiAweGZmZmZmZmZmOw0KICAgICAgICAgICAgc2VlZCA9ICgoc2VlZCArIDB4ZmQ3MDQ2YzUp
ICsgKHNlZWQgPDwgMykpICAgJiAweGZmZmZmZmZmOw0KICAgICAgICAgICAgc2VlZCA9ICgoc2Vl
ZCBeIDB4YjU1YTRmMDkpIF4gKHNlZWQgPj4+IDE2KSkgJiAweGZmZmZmZmZmOw0KICAgICAgICAg
ICAgcmV0dXJuIChzZWVkICYgMHhmZmZmZmZmKSAvIDB4MTAwMDAwMDA7DQogICAgICAgICAgfTsN
CiAgICAgICAgfSkoKTsNCg0KICAgICAgZnVuY3Rpb24gVGVycmFpbihkZXRhaWwpIHsNCiAgICAg
ICAgdGhpcy5zaXplID0gTWF0aC5wb3coMiwgZGV0YWlsKSArIDE7DQogICAgICAgIHRoaXMubWF4
ID0gdGhpcy5zaXplIC0gMTsNCiAgICAgICAgdGhpcy5tYXAgPSBuZXcgRmxvYXQzMkFycmF5KHRo
aXMuc2l6ZSAqIHRoaXMuc2l6ZSk7DQogICAgICB9DQoNCiAgICAgIFRlcnJhaW4ucHJvdG90eXBl
LmdldCA9IGZ1bmN0aW9uKHgsIHkpIHsNCiAgICAgICAgaWYgKHggPCAwIHx8IHggPiB0aGlzLm1h
eCB8fCB5IDwgMCB8fCB5ID4gdGhpcy5tYXgpIHJldHVybiAtMTsNCiAgICAgICAgcmV0dXJuIHRo
aXMubWFwW3ggKyB0aGlzLnNpemUgKiB5XTsNCiAgICAgIH07DQoNCiAgICAgIFRlcnJhaW4ucHJv
dG90eXBlLnNldCA9IGZ1bmN0aW9uKHgsIHksIHZhbCkgew0KICAgICAgICB0aGlzLm1hcFt4ICsg
dGhpcy5zaXplICogeV0gPSB2YWw7DQogICAgICB9Ow0KDQogICAgICBUZXJyYWluLnByb3RvdHlw
ZS5nZW5lcmF0ZSA9IGZ1bmN0aW9uKHJvdWdobmVzcykgew0KICAgICAgICB2YXIgc2VsZiA9IHRo
aXM7DQoNCiAgICAgICAgdGhpcy5zZXQoMCwgMCwgc2VsZi5tYXgpOw0KICAgICAgICB0aGlzLnNl
dCh0aGlzLm1heCwgMCwgc2VsZi5tYXggLyAyKTsNCiAgICAgICAgdGhpcy5zZXQodGhpcy5tYXgs
IHRoaXMubWF4LCAwKTsNCiAgICAgICAgdGhpcy5zZXQoMCwgdGhpcy5tYXgsIHNlbGYubWF4IC8g
Mik7DQoNCiAgICAgICAgZGl2aWRlKHRoaXMubWF4KTsNCg0KICAgICAgICBmdW5jdGlvbiBkaXZp
ZGUoc2l6ZSkgew0KICAgICAgICAgIHZhciB4LCB5LCBoYWxmID0gc2l6ZSAvIDI7DQogICAgICAg
ICAgdmFyIHNjYWxlID0gcm91Z2huZXNzICogc2l6ZTsNCiAgICAgICAgICBpZiAoaGFsZiA8IDEp
IHJldHVybjsNCg0KICAgICAgICAgIGZvciAoeSA9IGhhbGY7IHkgPCBzZWxmLm1heDsgeSArPSBz
aXplKSB7DQogICAgICAgICAgICBmb3IgKHggPSBoYWxmOyB4IDwgc2VsZi5tYXg7IHggKz0gc2l6
ZSkgew0KICAgICAgICAgICAgICBzcXVhcmUoeCwgeSwgaGFsZiwgTWF0aC5yYW5kb20oKSAqIHNj
YWxlICogMiAtIHNjYWxlKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgICAg
Zm9yICh5ID0gMDsgeSA8PSBzZWxmLm1heDsgeSArPSBoYWxmKSB7DQogICAgICAgICAgICBmb3Ig
KHggPSAoeSArIGhhbGYpICUgc2l6ZTsgeCA8PSBzZWxmLm1heDsgeCArPSBzaXplKSB7DQogICAg
ICAgICAgICAgIGRpYW1vbmQoeCwgeSwgaGFsZiwgTWF0aC5yYW5kb20oKSAqIHNjYWxlICogMiAt
IHNjYWxlKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgICAgZGl2aWRlKHNp
emUgLyAyKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGZ1bmN0aW9uIGF2ZXJhZ2UodmFsdWVzKSB7
DQogICAgICAgICAgdmFyIHZhbGlkID0gdmFsdWVzLmZpbHRlcihmdW5jdGlvbih2YWwpIHsgcmV0
dXJuIHZhbCAhPT0gLTE7IH0pOw0KICAgICAgICAgIHZhciB0b3RhbCA9IHZhbGlkLnJlZHVjZShm
dW5jdGlvbihzdW0sIHZhbCkgeyByZXR1cm4gc3VtICsgdmFsOyB9LCAwKTsNCiAgICAgICAgICBy
ZXR1cm4gdG90YWwgLyB2YWxpZC5sZW5ndGg7DQogICAgICAgIH0NCg0KICAgICAgICBmdW5jdGlv
biBzcXVhcmUoeCwgeSwgc2l6ZSwgb2Zmc2V0KSB7DQogICAgICAgICAgdmFyIGF2ZSA9IGF2ZXJh
Z2UoWw0KICAgICAgICAgICAgc2VsZi5nZXQoeCAtIHNpemUsIHkgLSBzaXplKSwgICAvLyB1cHBl
ciBsZWZ0DQogICAgICAgICAgICBzZWxmLmdldCh4ICsgc2l6ZSwgeSAtIHNpemUpLCAgIC8vIHVw
cGVyIHJpZ2h0DQogICAgICAgICAgICBzZWxmLmdldCh4ICsgc2l6ZSwgeSArIHNpemUpLCAgIC8v
IGxvd2VyIHJpZ2h0DQogICAgICAgICAgICBzZWxmLmdldCh4IC0gc2l6ZSwgeSArIHNpemUpICAg
IC8vIGxvd2VyIGxlZnQNCiAgICAgICAgICBdKTsNCiAgICAgICAgICBzZWxmLnNldCh4LCB5LCBh
dmUgKyBvZmZzZXQpOw0KICAgICAgICB9DQoNCiAgICAgICAgZnVuY3Rpb24gZGlhbW9uZCh4LCB5
LCBzaXplLCBvZmZzZXQpIHsNCiAgICAgICAgICB2YXIgYXZlID0gYXZlcmFnZShbDQogICAgICAg
ICAgICBzZWxmLmdldCh4LCB5IC0gc2l6ZSksICAgICAgLy8gdG9wDQogICAgICAgICAgICBzZWxm
LmdldCh4ICsgc2l6ZSwgeSksICAgICAgLy8gcmlnaHQNCiAgICAgICAgICAgIHNlbGYuZ2V0KHgs
IHkgKyBzaXplKSwgICAgICAvLyBib3R0b20NCiAgICAgICAgICAgIHNlbGYuZ2V0KHggLSBzaXpl
LCB5KSAgICAgICAvLyBsZWZ0DQogICAgICAgICAgXSk7DQogICAgICAgICAgc2VsZi5zZXQoeCwg
eSwgYXZlICsgb2Zmc2V0KTsNCiAgICAgICAgfQ0KICAgICAgfTsNCg0KICAgICAgVGVycmFpbi5w
cm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uKGN0eCwgd2lkdGgsIGhlaWdodCkgew0KICAgICAgICB2
YXIgc2VsZiA9IHRoaXM7DQogICAgICAgIHZhciB3YXRlclZhbCA9IHRoaXMuc2l6ZSAqIDAuMzsN
Cg0KICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IHRoaXMuc2l6ZTsgeSsrKSB7DQogICAgICAg
ICAgZm9yICh2YXIgeCA9IDA7IHggPCB0aGlzLnNpemU7IHgrKykgew0KICAgICAgICAgICAgdmFy
IHZhbCA9IHRoaXMuZ2V0KHgsIHkpOw0KICAgICAgICAgICAgdmFyIHRvcCA9IHByb2plY3QoeCwg
eSwgdmFsKTsNCiAgICAgICAgICAgIHZhciBib3R0b20gPSBwcm9qZWN0KHggKyAxLCB5LCAwKTsN
CiAgICAgICAgICAgIHZhciB3YXRlciA9IHByb2plY3QoeCwgeSwgd2F0ZXJWYWwpOw0KICAgICAg
ICAgICAgdmFyIHN0eWxlID0gYnJpZ2h0bmVzcyh4LCB5LCB0aGlzLmdldCh4ICsgMSwgeSkgLSB2
YWwpOw0KDQogICAgICAgICAgICByZWN0KHRvcCwgYm90dG9tLCBzdHlsZSk7DQogICAgICAgICAg
ICByZWN0KHdhdGVyLCBib3R0b20sICdyZ2JhKDUwLCAxNTAsIDIwMCwgMC4xNSknKTsNCiAgICAg
ICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBmdW5jdGlvbiByZWN0KGEsIGIsIHN0eWxlKSB7
DQogICAgICAgICAgaWYgKGIueSA8IGEueSkgcmV0dXJuOw0KICAgICAgICAgIGN0eC5maWxsU3R5
bGUgPSBzdHlsZTsNCiAgICAgICAgICBjdHguZmlsbFJlY3QoYS54LCBhLnksIGIueCAtIGEueCwg
Yi55IC0gYS55KTsNCiAgICAgICAgfQ0KDQogICAgICAgIGZ1bmN0aW9uIGJyaWdodG5lc3MoeCwg
eSwgc2xvcGUpIHsNCiAgICAgICAgICBpZiAoeSA9PT0gc2VsZi5tYXggfHwgeCA9PT0gc2VsZi5t
YXgpIHJldHVybiAnIzAwMCc7DQogICAgICAgICAgdmFyIGIgPSB+fihzbG9wZSAqIDUwKSArIDEy
ODsNCiAgICAgICAgICByZXR1cm4gWydyZ2JhKCcsIGIsICcsJywgYiwgJywnLCBiLCAnLDEpJ10u
am9pbignJyk7DQogICAgICAgIH0NCg0KICAgICAgICBmdW5jdGlvbiBpc28oeCwgeSkgew0KICAg
ICAgICAgIHJldHVybiB7DQogICAgICAgICAgICB4OiAwLjUgKiAoc2VsZi5zaXplICsgeCAtIHkp
LA0KICAgICAgICAgICAgeTogMC41ICogKHggKyB5KQ0KICAgICAgICAgIH07DQogICAgICAgIH0N
Cg0KICAgICAgICBmdW5jdGlvbiBwcm9qZWN0KGZsYXRYLCBmbGF0WSwgZmxhdFopIHsNCiAgICAg
ICAgICB2YXIgcG9pbnQgPSBpc28oZmxhdFgsIGZsYXRZKTsNCiAgICAgICAgICB2YXIgeDAgPSB3
aWR0aCAqIDAuNTsNCiAgICAgICAgICB2YXIgeTAgPSBoZWlnaHQgKiAwLjI7DQogICAgICAgICAg
dmFyIHogPSBzZWxmLnNpemUgKiAwLjUgLSBmbGF0WiArIHBvaW50LnkgKiAwLjc1Ow0KICAgICAg
ICAgIHZhciB4ID0gKHBvaW50LnggLSBzZWxmLnNpemUgKiAwLjUpICogNjsNCiAgICAgICAgICB2
YXIgeSA9IChzZWxmLnNpemUgLSBwb2ludC55KSAqIDAuMDA1ICsgMTsNCg0KICAgICAgICAgIHJl
dHVybiB7DQogICAgICAgICAgICB4OiB4MCArIHggLyB5LA0KICAgICAgICAgICAgeTogeTAgKyB6
IC8geQ0KICAgICAgICAgIH07DQogICAgICAgIH0NCiAgICAgIH07DQoNCiAgICAgIGZ1bmN0aW9u
IGJlbmNobWFyayhmKSB7DQogICAgICAgIHZhciBzdGFydCA9IG5ldyBEYXRlOw0KICAgICAgICB2
YXIgY291bnQgPSAxMDsNCiAgICAgICAgdmFyIGkgPSAwOw0KDQogICAgICAgIHNldFRpbWVvdXQo
ZnVuY3Rpb24gaXRlcmF0aW9uKCkgew0KICAgICAgICAgIGlmICgrK2kgPj0gY291bnQpIHsNCiAg
ICAgICAgICAgIHZhciBlbmQgPSBuZXcgRGF0ZTsNCiAgICAgICAgICAgIHZhciBhdmVyYWdlID0g
KGVuZCAtIHN0YXJ0KSAvIGNvdW50Ow0KICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImNvbnNvbGUiKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShhdmVyYWdl
ICsgIm1zXG4iKSk7DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgfQ0KDQogICAgICAg
ICAgZigpOw0KDQogICAgICAgICAgc2V0VGltZW91dChpdGVyYXRpb24sIDApOw0KICAgICAgICB9
LCAwKTsNCiAgICAgIH0NCg0KICAgICAgdmFyIGRpc3BsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnZGlzcGxheScpOw0KICAgICAgdmFyIGN0eCA9IGRpc3BsYXkuZ2V0Q29udGV4dCgnMmQn
KTsNCiAgICAgIHZhciB3aWR0aCA9IGRpc3BsYXkud2lkdGggPSAxMDI0Ow0KICAgICAgdmFyIGhl
aWdodCA9IGRpc3BsYXkuaGVpZ2h0ID0gNzY4Ow0KDQogICAgICBiZW5jaG1hcmsoZnVuY3Rpb24o
KSB7DQogICAgICAgIHZhciB0ZXJyYWluID0gbmV3IFRlcnJhaW4oOSk7DQogICAgICAgIHRlcnJh
aW4uZ2VuZXJhdGUoMC41KTsNCiAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3aWR0aCwgaGVp
Z2h0KTsNCiAgICAgICAgdGVycmFpbi5kcmF3KGN0eCwgd2lkdGgsIGhlaWdodCk7DQogICAgICB9
KTsNCg0KICAgIDwvc2NyaXB0Pg0KICA8L2JvZHk+DQo8L2h0bWw+DQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231901</attachid>
            <date>2014-05-22 11:47:41 -0700</date>
            <delta_ts>2014-05-23 15:00:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133054-20140522114718.patch</filename>
            <type>text/plain</type>
            <size>9439</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjkyMDkpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE0LTA1LTIyICBH
ZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgUGVyZm9ybWFuY2Ug
dGVzdGluZywgZGlhbW9uZC1zcXVhcmUgdGVycmFpbiBnZW5lcmF0aW9uICsgY2FudmFzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMwNTQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHRlc3Qgd2Fz
IHdyaXR0ZW4gYnkgSHVudGVyIExvZnRpcy4gSXQgb3JpZ2luYWxseSBhcHBlYXJlZCBvbiBoaXMK
KyAgICAgICAgYmxvZyBAIDxodHRwOi8vd3d3LnBsYXlmdWxqcy5jb20vcmVhbGlzdGljLXRlcnJh
aW4taW4tMTMwLWxpbmVzLz4uCisKKyAgICAgICAgSSBkaWQgYSBiaXQgb2YgZWRpdGluZyBmb3Ig
Zm9ybWF0IGFuZCBiZW5jaG1hcmsgc3VpdGFiaWxpdHkuCisKKyAgICAgICAgKiBDYW52YXMvdGVy
cmFpbi5odG1sOiBBZGRlZC4KKwogMjAxNC0wNS0xMyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBEWUVCZW5jaCBzaG91bGQgcnVuIDIwIGl0ZXJhdGlvbnMgaW4g
YnJvd3NlcgpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9DYW52YXMvdGVycmFpbi5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvQ2FudmFzL3RlcnJhaW4uaHRtbAkocmV2aXNpb24g
MCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvQ2FudmFzL3RlcnJhaW4uaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDIwMSBAQAorPCEtLSBCU0QgTGljZW5zZQorCitDb3B5cmlnaHQgKGMpIDIw
MTQsIEh1bnRlciBMb2Z0aXMuCisgCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZSBtZXQ6CisKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIC0tPgorCis8aHRtbD4KKyAgICA8
aGVhZD4KKyAgICAgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmlj
ZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAsIG1heGltdW0tc2NhbGU9MS4wIj4KKyAgICAgICAg
ICAgIDx0aXRsZT5UZXJyYWluIERlbW8gLSBQbGF5ZnVsSlM8L3RpdGxlPgorICAgIDwvaGVhZD4K
KyAgICA8Ym9keSBzdHlsZT0nYmFja2dyb3VuZDogIzAwMCc+CisgICAgICAgIDxwcmUgaWQ9J2Nv
bnNvbGUnIHN0eWxlPSdjb2xvcjp3aGl0ZSc+PC9wcmU+CisgICAgICAgIDxjYW52YXMgaWQ9J2Rp
c3BsYXknPjwvY2FudmFzPgorICAgICAgICAKKyAgICAgICAgPHNjcmlwdD4KKyAgICAgICAgTWF0
aC5yYW5kb20gPSAoZnVuY3Rpb24oKSB7CisgICAgICAgICAgIHZhciBzZWVkID0gNDk3MzQzMjE7
CisgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgIC8qIFRoZSBK
ZW5raW5zIGhhc2ggZnVuY3Rpb246CisgICAgICAgICAgICAgICAgICAgPGh0dHA6Ly9lbi53aWtp
cGVkaWEub3JnL3dpa2kvSmVua2luc19oYXNoX2Z1bmN0aW9uPgorICAgICAgICAgICAgICAgICAg
IDxodHRwOi8vYnVydGxlYnVydGxlLm5ldC9ib2IvaGFzaC9pbnRlZ2VyLmh0bWw+CisgICAgICAg
ICAgICAgICAgKi8KKyAgICAgICAgICAgICAgIHNlZWQgPSAoKHNlZWQgKyAweDdlZDU1ZDE2KSAr
IChzZWVkIDw8IDEyKSkgJiAweGZmZmZmZmZmOworICAgICAgICAgICAgICAgc2VlZCA9ICgoc2Vl
ZCBeIDB4Yzc2MWMyM2MpIF4gKHNlZWQgPj4+IDE5KSkgJiAweGZmZmZmZmZmOworICAgICAgICAg
ICAgICAgc2VlZCA9ICgoc2VlZCArIDB4MTY1NjY3YjEpICsgKHNlZWQgPDwgNSkpICYgMHhmZmZm
ZmZmZjsKKyAgICAgICAgICAgICAgIHNlZWQgPSAoKHNlZWQgKyAweGQzYTI2NDZjKSBeIChzZWVk
IDw8IDkpKSAmIDB4ZmZmZmZmZmY7CisgICAgICAgICAgICAgICBzZWVkID0gKChzZWVkICsgMHhm
ZDcwNDZjNSkgKyAoc2VlZCA8PCAzKSkgJiAweGZmZmZmZmZmOworICAgICAgICAgICAgICAgc2Vl
ZCA9ICgoc2VlZCBeIDB4YjU1YTRmMDkpIF4gKHNlZWQgPj4+IDE2KSkgJiAweGZmZmZmZmZmOwor
ICAgICAgICAgICAgICAgcmV0dXJuIChzZWVkICYgMHhmZmZmZmZmKSAvIDB4MTAwMDAwMDA7Cisg
ICAgICAgICAgIH07CisgICAgICAgIH0pKCk7CisgICAgICAgCisgICAgICAgIGZ1bmN0aW9uIFRl
cnJhaW4oZGV0YWlsKSB7CisgICAgICAgICAgIHRoaXMuc2l6ZSA9IE1hdGgucG93KDIsIGRldGFp
bCkgKyAxOworICAgICAgICAgICB0aGlzLm1heCA9IHRoaXMuc2l6ZSAtIDE7CisgICAgICAgICAg
IHRoaXMubWFwID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnNpemUgKiB0aGlzLnNpemUpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBUZXJyYWluLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlv
bih4LCB5KSB7CisgICAgICAgICAgICBpZiAoeCA8IDAgfHwgeCA+IHRoaXMubWF4IHx8IHkgPCAw
IHx8IHkgPiB0aGlzLm1heCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5tYXBbeCArIHRoaXMuc2l6ZSAqIHldOworICAgICAgICB9OworICAgICAg
ICAKKyAgICAgICAgVGVycmFpbi5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24oeCwgeSwgdmFsKSB7
CisgICAgICAgICAgICB0aGlzLm1hcFt4ICsgdGhpcy5zaXplICogeV0gPSB2YWw7CisgICAgICAg
IH07CisgICAgICAgIAorICAgICAgICBUZXJyYWluLnByb3RvdHlwZS5nZW5lcmF0ZSA9IGZ1bmN0
aW9uKHJvdWdobmVzcykgeworICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgICAg
ICAgCisgICAgICAgICAgICB0aGlzLnNldCgwLCAwLCBzZWxmLm1heCk7CisgICAgICAgICAgICB0
aGlzLnNldCh0aGlzLm1heCwgMCwgc2VsZi5tYXggLyAyKTsKKyAgICAgICAgICAgIHRoaXMuc2V0
KHRoaXMubWF4LCB0aGlzLm1heCwgMCk7CisgICAgICAgICAgICB0aGlzLnNldCgwLCB0aGlzLm1h
eCwgc2VsZi5tYXggLyAyKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZGl2aWRlKHRoaXMu
bWF4KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZnVuY3Rpb24gZGl2aWRlKHNpemUpIHsK
KyAgICAgICAgICAgICAgICB2YXIgeCwgeSwgaGFsZiA9IHNpemUgLyAyOworICAgICAgICAgICAg
ICAgIHZhciBzY2FsZSA9IHJvdWdobmVzcyAqIHNpemU7CisgICAgICAgICAgICAgICAgaWYgKGhh
bGYgPCAxKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgZm9yICh5ID0gaGFsZjsgeSA8IHNlbGYubWF4OyB5ICs9IHNpemUpIHsK
KyAgICAgICAgICAgICAgICAgICAgZm9yICh4ID0gaGFsZjsgeCA8IHNlbGYubWF4OyB4ICs9IHNp
emUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNxdWFyZSh4LCB5LCBoYWxmLCBNYXRoLnJh
bmRvbSgpICogc2NhbGUgKiAyIC0gc2NhbGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZvciAoeSA9IDA7IHkgPD0gc2VsZi5tYXg7
IHkgKz0gaGFsZikgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHggPSAoeSArIGhhbGYpICUg
c2l6ZTsgeCA8PSBzZWxmLm1heDsgeCArPSBzaXplKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBkaWFtb25kKHgsIHksIGhhbGYsIE1hdGgucmFuZG9tKCkgKiBzY2FsZSAqIDIgLSBzY2FsZSk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgZGl2aWRlKHNpemUgLyAyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgZnVuY3Rpb24gYXZlcmFnZSh2YWx1ZXMpIHsKKyAgICAgICAgICAgICAgICB2YXIgdmFs
aWQgPSB2YWx1ZXMuZmlsdGVyKGZ1bmN0aW9uKHZhbCkgeyByZXR1cm4gdmFsICE9PSAtMTsgfSk7
CisgICAgICAgICAgICAgICAgdmFyIHRvdGFsID0gdmFsaWQucmVkdWNlKGZ1bmN0aW9uKHN1bSwg
dmFsKSB7IHJldHVybiBzdW0gKyB2YWw7IH0sIDApOworICAgICAgICAgICAgICAgIHJldHVybiB0
b3RhbCAvIHZhbGlkLmxlbmd0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgZnVuY3Rpb24gc3F1YXJlKHgsIHksIHNpemUsIG9mZnNldCkgeworICAgICAgICAgICAg
ICAgIHZhciBhdmUgPSBhdmVyYWdlKFsKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXQoeCAt
IHNpemUsIHkgLSBzaXplKSwgICAvLyB1cHBlciBsZWZ0CisgICAgICAgICAgICAgICAgICAgIHNl
bGYuZ2V0KHggKyBzaXplLCB5IC0gc2l6ZSksICAgLy8gdXBwZXIgcmlnaHQKKyAgICAgICAgICAg
ICAgICAgICAgc2VsZi5nZXQoeCArIHNpemUsIHkgKyBzaXplKSwgICAvLyBsb3dlciByaWdodAor
ICAgICAgICAgICAgICAgICAgICBzZWxmLmdldCh4IC0gc2l6ZSwgeSArIHNpemUpICAgIC8vIGxv
d2VyIGxlZnQKKyAgICAgICAgICAgICAgICBdKTsKKyAgICAgICAgICAgICAgICBzZWxmLnNldCh4
LCB5LCBhdmUgKyBvZmZzZXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBmdW5jdGlvbiBkaWFtb25kKHgsIHksIHNpemUsIG9mZnNldCkgeworICAgICAgICAgICAg
ICAgIHZhciBhdmUgPSBhdmVyYWdlKFsKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXQoeCwg
eSAtIHNpemUpLCAgICAgIC8vIHRvcAorICAgICAgICAgICAgICAgICAgICBzZWxmLmdldCh4ICsg
c2l6ZSwgeSksICAgICAgLy8gcmlnaHQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXQoeCwg
eSArIHNpemUpLCAgICAgIC8vIGJvdHRvbQorICAgICAgICAgICAgICAgICAgICBzZWxmLmdldCh4
IC0gc2l6ZSwgeSkgICAgICAgLy8gbGVmdAorICAgICAgICAgICAgICAgIF0pOworICAgICAgICAg
ICAgICAgIHNlbGYuc2V0KHgsIHksIGF2ZSArIG9mZnNldCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH07CisgICAgICAgIAorICAgICAgICBUZXJyYWluLnByb3RvdHlwZS5kcmF3ID0gZnVuY3Rp
b24oY3R4LCB3aWR0aCwgaGVpZ2h0KSB7CisgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7Cisg
ICAgICAgICAgICB2YXIgd2F0ZXJWYWwgPSB0aGlzLnNpemUgKiAwLjM7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGZvciAodmFyIHkgPSAwOyB5IDwgdGhpcy5zaXplOyB5KyspIHsKKyAgICAg
ICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHRoaXMuc2l6ZTsgeCsrKSB7CisgICAgICAg
ICAgICAgICAgICAgIHZhciB2YWwgPSB0aGlzLmdldCh4LCB5KTsKKyAgICAgICAgICAgICAgICAg
ICAgdmFyIHRvcCA9IHByb2plY3QoeCwgeSwgdmFsKTsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IGJvdHRvbSA9IHByb2plY3QoeCArIDEsIHksIDApOworICAgICAgICAgICAgICAgICAgICB2YXIg
d2F0ZXIgPSBwcm9qZWN0KHgsIHksIHdhdGVyVmFsKTsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IHN0eWxlID0gYnJpZ2h0bmVzcyh4LCB5LCB0aGlzLmdldCh4ICsgMSwgeSkgLSB2YWwpOworICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgcmVjdCh0b3AsIGJvdHRvbSwg
c3R5bGUpOworICAgICAgICAgICAgICAgICAgICByZWN0KHdhdGVyLCBib3R0b20sICdyZ2JhKDUw
LCAxNTAsIDIwMCwgMC4xNSknKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGZ1bmN0aW9uIHJlY3QoYSwgYiwgc3R5bGUpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoYi55IDwgYS55KQorICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHN0eWxlOworICAgICAgICAgICAgICAg
IGN0eC5maWxsUmVjdChhLngsIGEueSwgYi54IC0gYS54LCBiLnkgLSBhLnkpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBmdW5jdGlvbiBicmlnaHRuZXNzKHgsIHks
IHNsb3BlKSB7CisgICAgICAgICAgICAgICAgaWYgKHkgPT09IHNlbGYubWF4IHx8IHggPT09IHNl
bGYubWF4KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyMwMDAnOworICAgICAgICAgICAg
ICAgIHZhciBiID0gfn4oc2xvcGUgKiA1MCkgKyAxMjg7CisgICAgICAgICAgICAgICAgcmV0dXJu
IFsncmdiYSgnLCBiLCAnLCcsIGIsICcsJywgYiwgJywxKSddLmpvaW4oJycpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBmdW5jdGlvbiBpc28oeCwgeSkgeworICAg
ICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHg6IDAuNSAqIChzZWxm
LnNpemUgKyB4IC0geSksCisgICAgICAgICAgICAgICAgICAgIHk6IDAuNSAqICh4ICsgeSkKKyAg
ICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAg
ICBmdW5jdGlvbiBwcm9qZWN0KGZsYXRYLCBmbGF0WSwgZmxhdFopIHsKKyAgICAgICAgICAgICAg
ICB2YXIgcG9pbnQgPSBpc28oZmxhdFgsIGZsYXRZKTsKKyAgICAgICAgICAgICAgICB2YXIgeDAg
PSB3aWR0aCAqIDAuNTsKKyAgICAgICAgICAgICAgICB2YXIgeTAgPSBoZWlnaHQgKiAwLjI7Cisg
ICAgICAgICAgICAgICAgdmFyIHogPSBzZWxmLnNpemUgKiAwLjUgLSBmbGF0WiArIHBvaW50Lnkg
KiAwLjc1OworICAgICAgICAgICAgICAgIHZhciB4ID0gKHBvaW50LnggLSBzZWxmLnNpemUgKiAw
LjUpICogNjsKKyAgICAgICAgICAgICAgICB2YXIgeSA9IChzZWxmLnNpemUgLSBwb2ludC55KSAq
IDAuMDA1ICsgMTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgICAgICB4OiB4MCArIHggLyB5LAorICAgICAgICAgICAgICAgICAgICB5
OiB5MCArIHogLyB5CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fTsKKyAgICAgICAgCisgICAgICAgIGZ1bmN0aW9uIGJlbmNobWFyayhmKSB7CisgICAgICAgICAg
ICB2YXIgc3RhcnQgPSBuZXcgRGF0ZTsKKyAgICAgICAgICAgIHZhciBjb3VudCA9IDEwOworICAg
ICAgICAgICAgdmFyIGkgPSAwOworICAgICAgICAgICAgCisgICAgICAgICAgICBzZXRUaW1lb3V0
KGZ1bmN0aW9uIGl0ZXJhdGlvbigpIHsKKyAgICAgICAgICAgICAgICBpZiAoKytpID49IGNvdW50
KSB7CisgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IG5ldyBEYXRlOworICAgICAgICAgICAg
ICAgICAgIHZhciBhdmVyYWdlID0gKGVuZCAtIHN0YXJ0KSAvIGNvdW50OworICAgICAgICAgICAg
ICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuYXBwZW5kQ2hpbGQoZG9j
dW1lbnQuY3JlYXRlVGV4dE5vZGUoYXZlcmFnZSArICJtc1xuIikpOworICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBmKCk7CisK
KyAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGl0ZXJhdGlvbiwgMCk7CisgICAgICAgICAgIH0s
IDApOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2YXIgZGlzcGxheSA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdkaXNwbGF5Jyk7CisgICAgICAgIHZhciBjdHggPSBkaXNwbGF5Lmdl
dENvbnRleHQoJzJkJyk7CisgICAgICAgIHZhciB3aWR0aCA9IGRpc3BsYXkud2lkdGggPSAxMDI0
OworICAgICAgICB2YXIgaGVpZ2h0ID0gZGlzcGxheS5oZWlnaHQgPSA3Njg7CisgICAgICAgIAor
ICAgICAgICBiZW5jaG1hcmsoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgdGVycmFpbiA9
IG5ldyBUZXJyYWluKDkpOworICAgICAgICAgICAgdGVycmFpbi5nZW5lcmF0ZSgwLjUpOworICAg
ICAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAg
IHRlcnJhaW4uZHJhdyhjdHgsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICB9KTsKKworICAgICAg
ICA8L3NjcmlwdD4KKyAgICA8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231994</attachid>
            <date>2014-05-23 15:00:23 -0700</date>
            <delta_ts>2014-05-23 15:12:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133054-20140523145957.patch</filename>
            <type>text/plain</type>
            <size>8876</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjkyODIpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE0LTA1LTIzICBH
ZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgUGVyZm9ybWFuY2Ug
dGVzdGluZywgZGlhbW9uZC1zcXVhcmUgdGVycmFpbiBnZW5lcmF0aW9uICsgY2FudmFzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMwNTQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHRlc3Qgd2Fz
IHdyaXR0ZW4gYnkgSHVudGVyIExvZnRpcy4gSXQgb3JpZ2luYWxseSBhcHBlYXJlZCBvbiBoaXMK
KyAgICAgICAgYmxvZyBAIDxodHRwOi8vd3d3LnBsYXlmdWxqcy5jb20vcmVhbGlzdGljLXRlcnJh
aW4taW4tMTMwLWxpbmVzLz4uCisKKyAgICAgICAgSSBkaWQgYSBiaXQgb2YgZWRpdGluZyBmb3Ig
Zm9ybWF0IGFuZCBiZW5jaG1hcmsgc3VpdGFiaWxpdHkuCisKKyAgICAgICAgKiBDYW52YXMvdGVy
cmFpbi5odG1sOiBBZGRlZC4KKwogMjAxNC0wNS0xMyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBEWUVCZW5jaCBzaG91bGQgcnVuIDIwIGl0ZXJhdGlvbnMgaW4g
YnJvd3NlcgpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9DYW52YXMvdGVycmFpbi5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvQ2FudmFzL3RlcnJhaW4uaHRtbAkocmV2aXNpb24g
MCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvQ2FudmFzL3RlcnJhaW4uaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE4MSBAQAorPCEtLSBCU0QgTGljZW5zZQorCitDb3B5cmlnaHQgKGMpIDIw
MTQsIEh1bnRlciBMb2Z0aXMuCisgCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZSBtZXQ6CisKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIC0tPgorCis8aHRtbD4KKyAgICA8
aGVhZD4KKyAgICAgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmlj
ZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAsIG1heGltdW0tc2NhbGU9MS4wIj4KKyAgICAgICAg
PHRpdGxlPlRlcnJhaW4gRGVtbyAtIFBsYXlmdWxKUzwvdGl0bGU+CisgICAgICAgIDxzY3JpcHQg
c3JjPSIuLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48L3NjcmlwdD4KKyAgICA8L2hlYWQ+CisgICAg
PGJvZHk+CisgICAgICAgIDxjYW52YXMgaWQ9J2Rpc3BsYXknIHN0eWxlPSdiYWNrZ3JvdW5kOiAj
MDAwJz48L2NhbnZhcz4KKyAgICAgICAgCisgICAgICAgIDxzY3JpcHQ+CisgICAgICAgIE1hdGgu
cmFuZG9tID0gKGZ1bmN0aW9uKCkgeworICAgICAgICAgICB2YXIgc2VlZCA9IDQ5NzM0MzIxOwor
ICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAvKiBUaGUgSmVu
a2lucyBoYXNoIGZ1bmN0aW9uOgorICAgICAgICAgICAgICAgICAgIDxodHRwOi8vZW4ud2lraXBl
ZGlhLm9yZy93aWtpL0plbmtpbnNfaGFzaF9mdW5jdGlvbj4KKyAgICAgICAgICAgICAgICAgICA8
aHR0cDovL2J1cnRsZWJ1cnRsZS5uZXQvYm9iL2hhc2gvaW50ZWdlci5odG1sPgorICAgICAgICAg
ICAgICAgICovCisgICAgICAgICAgICAgICBzZWVkID0gKChzZWVkICsgMHg3ZWQ1NWQxNikgKyAo
c2VlZCA8PCAxMikpICYgMHhmZmZmZmZmZjsKKyAgICAgICAgICAgICAgIHNlZWQgPSAoKHNlZWQg
XiAweGM3NjFjMjNjKSBeIChzZWVkID4+PiAxOSkpICYgMHhmZmZmZmZmZjsKKyAgICAgICAgICAg
ICAgIHNlZWQgPSAoKHNlZWQgKyAweDE2NTY2N2IxKSArIChzZWVkIDw8IDUpKSAmIDB4ZmZmZmZm
ZmY7CisgICAgICAgICAgICAgICBzZWVkID0gKChzZWVkICsgMHhkM2EyNjQ2YykgXiAoc2VlZCA8
PCA5KSkgJiAweGZmZmZmZmZmOworICAgICAgICAgICAgICAgc2VlZCA9ICgoc2VlZCArIDB4ZmQ3
MDQ2YzUpICsgKHNlZWQgPDwgMykpICYgMHhmZmZmZmZmZjsKKyAgICAgICAgICAgICAgIHNlZWQg
PSAoKHNlZWQgXiAweGI1NWE0ZjA5KSBeIChzZWVkID4+PiAxNikpICYgMHhmZmZmZmZmZjsKKyAg
ICAgICAgICAgICAgIHJldHVybiAoc2VlZCAmIDB4ZmZmZmZmZikgLyAweDEwMDAwMDAwOworICAg
ICAgICAgICB9OworICAgICAgICB9KSgpOworICAgICAgIAorICAgICAgICBmdW5jdGlvbiBUZXJy
YWluKGRldGFpbCkgeworICAgICAgICAgICB0aGlzLnNpemUgPSBNYXRoLnBvdygyLCBkZXRhaWwp
ICsgMTsKKyAgICAgICAgICAgdGhpcy5tYXggPSB0aGlzLnNpemUgLSAxOworICAgICAgICAgICB0
aGlzLm1hcCA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5zaXplICogdGhpcy5zaXplKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgVGVycmFpbi5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24o
eCwgeSkgeworICAgICAgICAgICAgaWYgKHggPCAwIHx8IHggPiB0aGlzLm1heCB8fCB5IDwgMCB8
fCB5ID4gdGhpcy5tYXgpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAg
cmV0dXJuIHRoaXMubWFwW3ggKyB0aGlzLnNpemUgKiB5XTsKKyAgICAgICAgfTsKKyAgICAgICAg
CisgICAgICAgIFRlcnJhaW4ucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKHgsIHksIHZhbCkgewor
ICAgICAgICAgICAgdGhpcy5tYXBbeCArIHRoaXMuc2l6ZSAqIHldID0gdmFsOworICAgICAgICB9
OworICAgICAgICAKKyAgICAgICAgVGVycmFpbi5wcm90b3R5cGUuZ2VuZXJhdGUgPSBmdW5jdGlv
bihyb3VnaG5lc3MpIHsKKyAgICAgICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgdGhpcy5zZXQoMCwgMCwgc2VsZi5tYXgpOworICAgICAgICAgICAgdGhp
cy5zZXQodGhpcy5tYXgsIDAsIHNlbGYubWF4IC8gMik7CisgICAgICAgICAgICB0aGlzLnNldCh0
aGlzLm1heCwgdGhpcy5tYXgsIDApOworICAgICAgICAgICAgdGhpcy5zZXQoMCwgdGhpcy5tYXgs
IHNlbGYubWF4IC8gMik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGRpdmlkZSh0aGlzLm1h
eCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZ1bmN0aW9uIGRpdmlkZShzaXplKSB7Cisg
ICAgICAgICAgICAgICAgdmFyIHgsIHksIGhhbGYgPSBzaXplIC8gMjsKKyAgICAgICAgICAgICAg
ICB2YXIgc2NhbGUgPSByb3VnaG5lc3MgKiBzaXplOworICAgICAgICAgICAgICAgIGlmIChoYWxm
IDwgMSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGZvciAoeSA9IGhhbGY7IHkgPCBzZWxmLm1heDsgeSArPSBzaXplKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGZvciAoeCA9IGhhbGY7IHggPCBzZWxmLm1heDsgeCArPSBzaXpl
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzcXVhcmUoeCwgeSwgaGFsZiwgTWF0aC5yYW5k
b20oKSAqIHNjYWxlICogMiAtIHNjYWxlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKHkgPSAwOyB5IDw9IHNlbGYubWF4OyB5
ICs9IGhhbGYpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh4ID0gKHkgKyBoYWxmKSAlIHNp
emU7IHggPD0gc2VsZi5tYXg7IHggKz0gc2l6ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ZGlhbW9uZCh4LCB5LCBoYWxmLCBNYXRoLnJhbmRvbSgpICogc2NhbGUgKiAyIC0gc2NhbGUpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGRpdmlkZShzaXplIC8gMik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGZ1bmN0aW9uIGF2ZXJhZ2UodmFsdWVzKSB7CisgICAgICAgICAgICAgICAgdmFyIHZhbGlk
ID0gdmFsdWVzLmZpbHRlcihmdW5jdGlvbih2YWwpIHsgcmV0dXJuIHZhbCAhPT0gLTE7IH0pOwor
ICAgICAgICAgICAgICAgIHZhciB0b3RhbCA9IHZhbGlkLnJlZHVjZShmdW5jdGlvbihzdW0sIHZh
bCkgeyByZXR1cm4gc3VtICsgdmFsOyB9LCAwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdG90
YWwgLyB2YWxpZC5sZW5ndGg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGZ1bmN0aW9uIHNxdWFyZSh4LCB5LCBzaXplLCBvZmZzZXQpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgYXZlID0gYXZlcmFnZShbCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0KHggLSBz
aXplLCB5IC0gc2l6ZSksICAgLy8gdXBwZXIgbGVmdAorICAgICAgICAgICAgICAgICAgICBzZWxm
LmdldCh4ICsgc2l6ZSwgeSAtIHNpemUpLCAgIC8vIHVwcGVyIHJpZ2h0CisgICAgICAgICAgICAg
ICAgICAgIHNlbGYuZ2V0KHggKyBzaXplLCB5ICsgc2l6ZSksICAgLy8gbG93ZXIgcmlnaHQKKyAg
ICAgICAgICAgICAgICAgICAgc2VsZi5nZXQoeCAtIHNpemUsIHkgKyBzaXplKSAgICAvLyBsb3dl
ciBsZWZ0CisgICAgICAgICAgICAgICAgXSk7CisgICAgICAgICAgICAgICAgc2VsZi5zZXQoeCwg
eSwgYXZlICsgb2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgZnVuY3Rpb24gZGlhbW9uZCh4LCB5LCBzaXplLCBvZmZzZXQpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgYXZlID0gYXZlcmFnZShbCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0KHgsIHkg
LSBzaXplKSwgICAgICAvLyB0b3AKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXQoeCArIHNp
emUsIHkpLCAgICAgIC8vIHJpZ2h0CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0KHgsIHkg
KyBzaXplKSwgICAgICAvLyBib3R0b20KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXQoeCAt
IHNpemUsIHkpICAgICAgIC8vIGxlZnQKKyAgICAgICAgICAgICAgICBdKTsKKyAgICAgICAgICAg
ICAgICBzZWxmLnNldCh4LCB5LCBhdmUgKyBvZmZzZXQpOworICAgICAgICAgICAgfQorICAgICAg
ICB9OworICAgICAgICAKKyAgICAgICAgVGVycmFpbi5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9u
KGN0eCwgd2lkdGgsIGhlaWdodCkgeworICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAg
ICAgICAgICAgdmFyIHdhdGVyVmFsID0gdGhpcy5zaXplICogMC4zOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IHRoaXMuc2l6ZTsgeSsrKSB7CisgICAgICAg
ICAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCB0aGlzLnNpemU7IHgrKykgeworICAgICAgICAg
ICAgICAgICAgICB2YXIgdmFsID0gdGhpcy5nZXQoeCwgeSk7CisgICAgICAgICAgICAgICAgICAg
IHZhciB0b3AgPSBwcm9qZWN0KHgsIHksIHZhbCk7CisgICAgICAgICAgICAgICAgICAgIHZhciBi
b3R0b20gPSBwcm9qZWN0KHggKyAxLCB5LCAwKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHdh
dGVyID0gcHJvamVjdCh4LCB5LCB3YXRlclZhbCk7CisgICAgICAgICAgICAgICAgICAgIHZhciBz
dHlsZSA9IGJyaWdodG5lc3MoeCwgeSwgdGhpcy5nZXQoeCArIDEsIHkpIC0gdmFsKTsKKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHJlY3QodG9wLCBib3R0b20sIHN0
eWxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmVjdCh3YXRlciwgYm90dG9tLCAncmdiYSg1MCwg
MTUwLCAyMDAsIDAuMTUpJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBmdW5jdGlvbiByZWN0KGEsIGIsIHN0eWxlKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGIueSA8IGEueSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBzdHlsZTsKKyAgICAgICAgICAgICAgICBj
dHguZmlsbFJlY3QoYS54LCBhLnksIGIueCAtIGEueCwgYi55IC0gYS55KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZnVuY3Rpb24gYnJpZ2h0bmVzcyh4LCB5LCBz
bG9wZSkgeworICAgICAgICAgICAgICAgIGlmICh5ID09PSBzZWxmLm1heCB8fCB4ID09PSBzZWxm
Lm1heCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcjMDAwJzsKKyAgICAgICAgICAgICAg
ICB2YXIgYiA9IH5+KHNsb3BlICogNTApICsgMTI4OworICAgICAgICAgICAgICAgIHJldHVybiBb
J3JnYmEoJywgYiwgJywnLCBiLCAnLCcsIGIsICcsMSknXS5qb2luKCcnKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZnVuY3Rpb24gaXNvKHgsIHkpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB4OiAwLjUgKiAoc2VsZi5z
aXplICsgeCAtIHkpLAorICAgICAgICAgICAgICAgICAgICB5OiAwLjUgKiAoeCArIHkpCisgICAg
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
ZnVuY3Rpb24gcHJvamVjdChmbGF0WCwgZmxhdFksIGZsYXRaKSB7CisgICAgICAgICAgICAgICAg
dmFyIHBvaW50ID0gaXNvKGZsYXRYLCBmbGF0WSk7CisgICAgICAgICAgICAgICAgdmFyIHgwID0g
d2lkdGggKiAwLjU7CisgICAgICAgICAgICAgICAgdmFyIHkwID0gaGVpZ2h0ICogMC4yOworICAg
ICAgICAgICAgICAgIHZhciB6ID0gc2VsZi5zaXplICogMC41IC0gZmxhdFogKyBwb2ludC55ICog
MC43NTsKKyAgICAgICAgICAgICAgICB2YXIgeCA9IChwb2ludC54IC0gc2VsZi5zaXplICogMC41
KSAqIDY7CisgICAgICAgICAgICAgICAgdmFyIHkgPSAoc2VsZi5zaXplIC0gcG9pbnQueSkgKiAw
LjAwNSArIDE7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgICAgICAgICAgeDogeDAgKyB4IC8geSwKKyAgICAgICAgICAgICAgICAgICAgeTog
eTAgKyB6IC8geQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgIH07
CisgICAgICAgIAorICAgICAgICB2YXIgZGlzcGxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdkaXNwbGF5Jyk7CisgICAgICAgIHZhciBjdHggPSBkaXNwbGF5LmdldENvbnRleHQoJzJkJyk7
CisgICAgICAgIHZhciB3aWR0aCA9IGRpc3BsYXkud2lkdGggPSAxMDI0OworICAgICAgICB2YXIg
aGVpZ2h0ID0gZGlzcGxheS5oZWlnaHQgPSA3Njg7CisgICAgICAgIAorICAgICAgICBQZXJmVGVz
dFJ1bm5lci5tZWFzdXJlVGltZSh7cnVuOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciB0
ZXJyYWluID0gbmV3IFRlcnJhaW4oOSk7CisgICAgICAgICAgICB0ZXJyYWluLmdlbmVyYXRlKDAu
NSk7CisgICAgICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOworICAg
ICAgICAgICAgdGVycmFpbi5kcmF3KGN0eCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIH19KTsK
KyAgICAgICAgPC9zY3JpcHQ+CisgICAgPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231995</attachid>
            <date>2014-05-23 15:12:20 -0700</date>
            <delta_ts>2014-05-23 15:36:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133054-20140523151154.patch</filename>
            <type>text/plain</type>
            <size>8920</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjkyODIpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE0LTA1LTIzICBH
ZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgUGVyZm9ybWFuY2Ug
dGVzdGluZywgZGlhbW9uZC1zcXVhcmUgdGVycmFpbiBnZW5lcmF0aW9uICsgY2FudmFzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMwNTQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHRlc3Qgd2Fz
IHdyaXR0ZW4gYnkgSHVudGVyIExvZnRpcy4gSXQgb3JpZ2luYWxseSBhcHBlYXJlZCBvbiBoaXMK
KyAgICAgICAgYmxvZyBAIDxodHRwOi8vd3d3LnBsYXlmdWxqcy5jb20vcmVhbGlzdGljLXRlcnJh
aW4taW4tMTMwLWxpbmVzLz4uCisKKyAgICAgICAgSSBkaWQgYSBiaXQgb2YgZWRpdGluZyBmb3Ig
Zm9ybWF0IGFuZCBiZW5jaG1hcmsgc3VpdGFiaWxpdHkuCisKKyAgICAgICAgKiBDYW52YXMvdGVy
cmFpbi5odG1sOiBBZGRlZC4KKwogMjAxNC0wNS0xMyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBEWUVCZW5jaCBzaG91bGQgcnVuIDIwIGl0ZXJhdGlvbnMgaW4g
YnJvd3NlcgpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9DYW52YXMvdGVycmFpbi5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvQ2FudmFzL3RlcnJhaW4uaHRtbAkocmV2aXNpb24g
MCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvQ2FudmFzL3RlcnJhaW4uaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE4MyBAQAorPCEtLSBCU0QgTGljZW5zZQorCitDb3B5cmlnaHQgKGMpIDIw
MTQsIEh1bnRlciBMb2Z0aXMuCisgCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZSBtZXQ6CisKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIC0tPgorCis8aHRtbD4KKyAgICA8
aGVhZD4KKyAgICAgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmlj
ZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAsIG1heGltdW0tc2NhbGU9MS4wIj4KKyAgICAgICAg
PHRpdGxlPlRlcnJhaW4gRGVtbyAtIFBsYXlmdWxKUzwvdGl0bGU+CisgICAgICAgIDxzY3JpcHQg
c3JjPSIuLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48L3NjcmlwdD4KKyAgICA8L2hlYWQ+CisgICAg
PGJvZHk+CisgICAgICAgIDxjYW52YXMgaWQ9J2Rpc3BsYXknIHN0eWxlPSdiYWNrZ3JvdW5kOiAj
MDAwJz48L2NhbnZhcz4KKyAgICAgICAgCisgICAgICAgIDxzY3JpcHQ+CisgICAgICAgIE1hdGgu
cmFuZG9tID0gKGZ1bmN0aW9uKCkgeworICAgICAgICAgICB2YXIgc2VlZCA9IDQ5NzM0MzIxOwor
ICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAvKiBUaGUgSmVu
a2lucyBoYXNoIGZ1bmN0aW9uOgorICAgICAgICAgICAgICAgICAgIDxodHRwOi8vZW4ud2lraXBl
ZGlhLm9yZy93aWtpL0plbmtpbnNfaGFzaF9mdW5jdGlvbj4KKyAgICAgICAgICAgICAgICAgICA8
aHR0cDovL2J1cnRsZWJ1cnRsZS5uZXQvYm9iL2hhc2gvaW50ZWdlci5odG1sPgorICAgICAgICAg
ICAgICAgICovCisgICAgICAgICAgICAgICBzZWVkID0gKChzZWVkICsgMHg3ZWQ1NWQxNikgKyAo
c2VlZCA8PCAxMikpICYgMHhmZmZmZmZmZjsKKyAgICAgICAgICAgICAgIHNlZWQgPSAoKHNlZWQg
XiAweGM3NjFjMjNjKSBeIChzZWVkID4+PiAxOSkpICYgMHhmZmZmZmZmZjsKKyAgICAgICAgICAg
ICAgIHNlZWQgPSAoKHNlZWQgKyAweDE2NTY2N2IxKSArIChzZWVkIDw8IDUpKSAmIDB4ZmZmZmZm
ZmY7CisgICAgICAgICAgICAgICBzZWVkID0gKChzZWVkICsgMHhkM2EyNjQ2YykgXiAoc2VlZCA8
PCA5KSkgJiAweGZmZmZmZmZmOworICAgICAgICAgICAgICAgc2VlZCA9ICgoc2VlZCArIDB4ZmQ3
MDQ2YzUpICsgKHNlZWQgPDwgMykpICYgMHhmZmZmZmZmZjsKKyAgICAgICAgICAgICAgIHNlZWQg
PSAoKHNlZWQgXiAweGI1NWE0ZjA5KSBeIChzZWVkID4+PiAxNikpICYgMHhmZmZmZmZmZjsKKyAg
ICAgICAgICAgICAgIHJldHVybiAoc2VlZCAmIDB4ZmZmZmZmZikgLyAweDEwMDAwMDAwOworICAg
ICAgICAgICB9OworICAgICAgICB9KSgpOworICAgICAgIAorICAgICAgICBmdW5jdGlvbiBUZXJy
YWluKGRldGFpbCkgeworICAgICAgICAgICB0aGlzLnNpemUgPSBNYXRoLnBvdygyLCBkZXRhaWwp
ICsgMTsKKyAgICAgICAgICAgdGhpcy5tYXggPSB0aGlzLnNpemUgLSAxOworICAgICAgICAgICB0
aGlzLm1hcCA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5zaXplICogdGhpcy5zaXplKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgVGVycmFpbi5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24o
eCwgeSkgeworICAgICAgICAgICAgaWYgKHggPCAwIHx8IHggPiB0aGlzLm1heCB8fCB5IDwgMCB8
fCB5ID4gdGhpcy5tYXgpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAg
cmV0dXJuIHRoaXMubWFwW3ggKyB0aGlzLnNpemUgKiB5XTsKKyAgICAgICAgfTsKKyAgICAgICAg
CisgICAgICAgIFRlcnJhaW4ucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKHgsIHksIHZhbCkgewor
ICAgICAgICAgICAgdGhpcy5tYXBbeCArIHRoaXMuc2l6ZSAqIHldID0gdmFsOworICAgICAgICB9
OworICAgICAgICAKKyAgICAgICAgVGVycmFpbi5wcm90b3R5cGUuZ2VuZXJhdGUgPSBmdW5jdGlv
bihyb3VnaG5lc3MpIHsKKyAgICAgICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgdGhpcy5zZXQoMCwgMCwgc2VsZi5tYXgpOworICAgICAgICAgICAgdGhp
cy5zZXQodGhpcy5tYXgsIDAsIHNlbGYubWF4IC8gMik7CisgICAgICAgICAgICB0aGlzLnNldCh0
aGlzLm1heCwgdGhpcy5tYXgsIDApOworICAgICAgICAgICAgdGhpcy5zZXQoMCwgdGhpcy5tYXgs
IHNlbGYubWF4IC8gMik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGRpdmlkZSh0aGlzLm1h
eCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZ1bmN0aW9uIGRpdmlkZShzaXplKSB7Cisg
ICAgICAgICAgICAgICAgdmFyIHgsIHksIGhhbGYgPSBzaXplIC8gMjsKKyAgICAgICAgICAgICAg
ICB2YXIgc2NhbGUgPSByb3VnaG5lc3MgKiBzaXplOworICAgICAgICAgICAgICAgIGlmIChoYWxm
IDwgMSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGZvciAoeSA9IGhhbGY7IHkgPCBzZWxmLm1heDsgeSArPSBzaXplKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGZvciAoeCA9IGhhbGY7IHggPCBzZWxmLm1heDsgeCArPSBzaXpl
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzcXVhcmUoeCwgeSwgaGFsZiwgTWF0aC5yYW5k
b20oKSAqIHNjYWxlICogMiAtIHNjYWxlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKHkgPSAwOyB5IDw9IHNlbGYubWF4OyB5
ICs9IGhhbGYpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh4ID0gKHkgKyBoYWxmKSAlIHNp
emU7IHggPD0gc2VsZi5tYXg7IHggKz0gc2l6ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ZGlhbW9uZCh4LCB5LCBoYWxmLCBNYXRoLnJhbmRvbSgpICogc2NhbGUgKiAyIC0gc2NhbGUpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGRpdmlkZShzaXplIC8gMik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGZ1bmN0aW9uIGF2ZXJhZ2UodmFsdWVzKSB7CisgICAgICAgICAgICAgICAgdmFyIHZhbGlk
ID0gdmFsdWVzLmZpbHRlcihmdW5jdGlvbih2YWwpIHsgcmV0dXJuIHZhbCAhPT0gLTE7IH0pOwor
ICAgICAgICAgICAgICAgIHZhciB0b3RhbCA9IHZhbGlkLnJlZHVjZShmdW5jdGlvbihzdW0sIHZh
bCkgeyByZXR1cm4gc3VtICsgdmFsOyB9LCAwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdG90
YWwgLyB2YWxpZC5sZW5ndGg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGZ1bmN0aW9uIHNxdWFyZSh4LCB5LCBzaXplLCBvZmZzZXQpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgYXZlID0gYXZlcmFnZShbCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0KHggLSBz
aXplLCB5IC0gc2l6ZSksICAgLy8gdXBwZXIgbGVmdAorICAgICAgICAgICAgICAgICAgICBzZWxm
LmdldCh4ICsgc2l6ZSwgeSAtIHNpemUpLCAgIC8vIHVwcGVyIHJpZ2h0CisgICAgICAgICAgICAg
ICAgICAgIHNlbGYuZ2V0KHggKyBzaXplLCB5ICsgc2l6ZSksICAgLy8gbG93ZXIgcmlnaHQKKyAg
ICAgICAgICAgICAgICAgICAgc2VsZi5nZXQoeCAtIHNpemUsIHkgKyBzaXplKSAgICAvLyBsb3dl
ciBsZWZ0CisgICAgICAgICAgICAgICAgXSk7CisgICAgICAgICAgICAgICAgc2VsZi5zZXQoeCwg
eSwgYXZlICsgb2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgZnVuY3Rpb24gZGlhbW9uZCh4LCB5LCBzaXplLCBvZmZzZXQpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgYXZlID0gYXZlcmFnZShbCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0KHgsIHkg
LSBzaXplKSwgICAgICAvLyB0b3AKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXQoeCArIHNp
emUsIHkpLCAgICAgIC8vIHJpZ2h0CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0KHgsIHkg
KyBzaXplKSwgICAgICAvLyBib3R0b20KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXQoeCAt
IHNpemUsIHkpICAgICAgIC8vIGxlZnQKKyAgICAgICAgICAgICAgICBdKTsKKyAgICAgICAgICAg
ICAgICBzZWxmLnNldCh4LCB5LCBhdmUgKyBvZmZzZXQpOworICAgICAgICAgICAgfQorICAgICAg
ICB9OworICAgICAgICAKKyAgICAgICAgVGVycmFpbi5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9u
KGN0eCwgd2lkdGgsIGhlaWdodCkgeworICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAg
ICAgICAgICAgdmFyIHdhdGVyVmFsID0gdGhpcy5zaXplICogMC4zOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IHRoaXMuc2l6ZTsgeSsrKSB7CisgICAgICAg
ICAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCB0aGlzLnNpemU7IHgrKykgeworICAgICAgICAg
ICAgICAgICAgICB2YXIgdmFsID0gdGhpcy5nZXQoeCwgeSk7CisgICAgICAgICAgICAgICAgICAg
IHZhciB0b3AgPSBwcm9qZWN0KHgsIHksIHZhbCk7CisgICAgICAgICAgICAgICAgICAgIHZhciBi
b3R0b20gPSBwcm9qZWN0KHggKyAxLCB5LCAwKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHdh
dGVyID0gcHJvamVjdCh4LCB5LCB3YXRlclZhbCk7CisgICAgICAgICAgICAgICAgICAgIHZhciBz
dHlsZSA9IGJyaWdodG5lc3MoeCwgeSwgdGhpcy5nZXQoeCArIDEsIHkpIC0gdmFsKTsKKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHJlY3QodG9wLCBib3R0b20sIHN0
eWxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmVjdCh3YXRlciwgYm90dG9tLCAncmdiYSg1MCwg
MTUwLCAyMDAsIDAuMTUpJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBmdW5jdGlvbiByZWN0KGEsIGIsIHN0eWxlKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGIueSA8IGEueSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBzdHlsZTsKKyAgICAgICAgICAgICAgICBj
dHguZmlsbFJlY3QoYS54LCBhLnksIGIueCAtIGEueCwgYi55IC0gYS55KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZnVuY3Rpb24gYnJpZ2h0bmVzcyh4LCB5LCBz
bG9wZSkgeworICAgICAgICAgICAgICAgIGlmICh5ID09PSBzZWxmLm1heCB8fCB4ID09PSBzZWxm
Lm1heCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcjMDAwJzsKKyAgICAgICAgICAgICAg
ICB2YXIgYiA9IH5+KHNsb3BlICogNTApICsgMTI4OworICAgICAgICAgICAgICAgIHJldHVybiBb
J3JnYmEoJywgYiwgJywnLCBiLCAnLCcsIGIsICcsMSknXS5qb2luKCcnKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZnVuY3Rpb24gaXNvKHgsIHkpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB4OiAwLjUgKiAoc2VsZi5z
aXplICsgeCAtIHkpLAorICAgICAgICAgICAgICAgICAgICB5OiAwLjUgKiAoeCArIHkpCisgICAg
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
ZnVuY3Rpb24gcHJvamVjdChmbGF0WCwgZmxhdFksIGZsYXRaKSB7CisgICAgICAgICAgICAgICAg
dmFyIHBvaW50ID0gaXNvKGZsYXRYLCBmbGF0WSk7CisgICAgICAgICAgICAgICAgdmFyIHgwID0g
d2lkdGggKiAwLjU7CisgICAgICAgICAgICAgICAgdmFyIHkwID0gaGVpZ2h0ICogMC4yOworICAg
ICAgICAgICAgICAgIHZhciB6ID0gc2VsZi5zaXplICogMC41IC0gZmxhdFogKyBwb2ludC55ICog
MC43NTsKKyAgICAgICAgICAgICAgICB2YXIgeCA9IChwb2ludC54IC0gc2VsZi5zaXplICogMC41
KSAqIDY7CisgICAgICAgICAgICAgICAgdmFyIHkgPSAoc2VsZi5zaXplIC0gcG9pbnQueSkgKiAw
LjAwNSArIDE7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgICAgICAgICAgeDogeDAgKyB4IC8geSwKKyAgICAgICAgICAgICAgICAgICAgeTog
eTAgKyB6IC8geQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgIH07
CisgICAgICAgIAorICAgICAgICB2YXIgZGlzcGxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdkaXNwbGF5Jyk7CisgICAgICAgIHZhciBjdHggPSBkaXNwbGF5LmdldENvbnRleHQoJzJkJyk7
CisgICAgICAgIHZhciB3aWR0aCA9IGRpc3BsYXkud2lkdGggPSAxMDI0OworICAgICAgICB2YXIg
aGVpZ2h0ID0gZGlzcGxheS5oZWlnaHQgPSA3Njg7CisgICAgICAgIAorICAgICAgICBQZXJmVGVz
dFJ1bm5lci5tZWFzdXJlVGltZSh7CisgICAgICAgICAgICBydW46IGZ1bmN0aW9uKCkgeworICAg
ICAgICAgICAgICAgIHZhciB0ZXJyYWluID0gbmV3IFRlcnJhaW4oOSk7CisgICAgICAgICAgICAg
ICAgdGVycmFpbi5nZW5lcmF0ZSgwLjUpOworICAgICAgICAgICAgICAgIGN0eC5jbGVhclJlY3Qo
MCwgMCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICAgICAgdGVycmFpbi5kcmF3KGN0eCwg
d2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICA8L3Nj
cmlwdD4KKyAgICA8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="256470"
          type_id="1"
          status="+"
          setter="rniwa"
    />
          </attachment>
      

    </bug>

</bugzilla>