<?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>156669</bug_id>
          
          <creation_ts>2016-04-16 15:01:23 -0700</creation_ts>
          <short_desc>[JSC] DFG should support relational comparisons of Number and Other</short_desc>
          <delta_ts>2016-04-17 09:17:43 -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>WebKit 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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1184388</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-04-16 15:01:23 -0700</bug_when>
    <thetext>[JSC] DFG should support relational comparisons of Number and Other</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184389</commentid>
    <comment_count>1</comment_count>
      <attachid>276564</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-04-16 15:06:45 -0700</bug_when>
    <thetext>Created attachment 276564
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184390</commentid>
    <comment_count>2</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-04-16 15:15:37 -0700</bug_when>
    <thetext>&gt;5% on Sunspider/3d-raytrace. Easy wins here and there:

                                                  Conf#1                    Conf#2                                      
SunSpider:
   3d-cube                                    4.9859+-0.1048     ?      5.0979+-0.0845        ? might be 1.0225x slower
   3d-morph                                   5.1717+-0.0509     ?      5.1923+-0.0660        ?
   3d-raytrace                                5.5222+-0.0303     ^      5.2502+-0.0965        ^ definitely 1.0518x faster
   access-binary-trees                        2.1145+-0.0198     ?      2.1724+-0.0559        ? might be 1.0274x slower
   access-fannkuch                            5.9337+-0.0715            5.8528+-0.1176          might be 1.0138x faster
   access-nbody                               2.6371+-0.1096            2.5488+-0.0300          might be 1.0347x faster
   access-nsieve                              3.0457+-0.0229     ?      3.0681+-0.0387        ?
   bitops-3bit-bits-in-byte                   1.1351+-0.0109     ?      1.1405+-0.0125        ?
   bitops-bits-in-byte                        2.7861+-0.0213     ?      2.8001+-0.0502        ?
   bitops-bitwise-and                         2.0675+-0.0332            2.0480+-0.0144        
   bitops-nsieve-bits                         3.1379+-0.0645            3.1296+-0.0467        
   controlflow-recursive                      2.3544+-0.0174            2.3503+-0.0337        
   crypto-aes                                 4.0292+-0.0413     ?      4.0324+-0.0696        ?
   crypto-md5                                 2.5080+-0.0444            2.5002+-0.0531        
   crypto-sha1                                2.3578+-0.0277            2.3432+-0.0190        
   date-format-tofte                          6.4053+-0.0903     ?      6.4075+-0.0770        ?
   date-format-xparb                          4.8294+-0.1402     ?      4.8493+-0.1692        ?
   math-cordic                                2.9286+-0.0389            2.8776+-0.0131          might be 1.0177x faster
   math-partial-sums                          4.9225+-0.1037            4.8803+-0.0690        
   math-spectral-norm                         1.9831+-0.0149     ?      1.9973+-0.0194        ?
   regexp-dna                                 6.3421+-0.0768            6.2721+-0.0501          might be 1.0112x faster
   string-base64                              4.7411+-0.0730     ?      4.8863+-0.1663        ? might be 1.0306x slower
   string-fasta                               5.9668+-0.1654            5.8749+-0.0860          might be 1.0157x faster
   string-tagcloud                            8.1567+-0.0770     ?      8.2552+-0.2033        ? might be 1.0121x slower
   string-unpack-code                        19.4009+-0.4762     ?     19.4415+-0.4419        ?
   string-validate-input                      4.4489+-0.1219            4.3643+-0.0198          might be 1.0194x faster

   &lt;arithmetic&gt;                               4.6120+-0.0239            4.6013+-0.0260          might be 1.0023x faster

                                                  Conf#1                    Conf#2                                      
Octane:
   encrypt                                   0.16215+-0.00089          0.16188+-0.00077       
   decrypt                                   2.84181+-0.00700          2.83793+-0.00366       
   deltablue                        x2       0.13987+-0.00160          0.13956+-0.00119       
   earley                                    0.28584+-0.00080    ?     0.28594+-0.00089       ?
   boyer                                     5.01632+-0.06001    ?     5.02915+-0.05367       ?
   navier-stokes                    x2       4.99973+-0.00721    ?     5.00253+-0.00861       ?
   raytrace                         x2       0.79912+-0.00250    ?     0.80120+-0.00283       ?
   richards                         x2       0.08335+-0.00063    ?     0.08385+-0.00046       ?
   splay                            x2       0.34159+-0.00129    ?     0.34190+-0.00111       ?
   regexp                           x2      15.76614+-0.11218    ?    15.77291+-0.10053       ?
   pdfjs                            x2      39.76868+-0.27101    ?    39.80804+-0.28669       ?
   mandreel                         x2      42.61976+-0.08029         42.54716+-0.12615       
   gbemu                            x2      24.19040+-0.07575         24.14995+-0.08258       
   closure                                   0.53466+-0.00131    ^     0.53167+-0.00110       ^ definitely 1.0056x faster
   jquery                                    6.83269+-0.02810          6.82235+-0.02935       
   box2d                            x2       9.17647+-0.03200    ?     9.18539+-0.02331       ?
   zlib                             x2     360.04454+-3.37642        358.57454+-4.06083       
   typescript                       x2     617.64299+-2.06962    ?   617.86455+-1.89938       ?

   &lt;geometric&gt;                               5.02176+-0.00666          5.02161+-0.00704         might be 1.0000x faster

                                                  Conf#1                    Conf#2                                      
Kraken:
   ai-astar                                   88.104+-0.407      ?      88.946+-1.186         ?
   audio-beat-detection                       42.056+-0.063      ^      41.061+-0.096         ^ definitely 1.0242x faster
   audio-dft                                  99.650+-0.822             99.536+-0.929         
   audio-fft                                  32.752+-0.019      ?      32.971+-0.364         ?
   audio-oscillator                           47.862+-0.081             47.851+-0.075         
   imaging-darkroom                           60.532+-0.482      ^      59.988+-0.054         ^ definitely 1.0091x faster
   imaging-desaturate                         45.517+-0.690             45.255+-0.166         
   imaging-gaussian-blur                      64.913+-1.672             63.702+-2.006           might be 1.0190x faster
   json-parse-financial                       37.855+-0.139      ?      37.921+-0.302         ?
   json-stringify-tinderbox                   24.565+-0.790             24.554+-0.743         
   stanford-crypto-aes                        39.708+-0.447             39.595+-0.794         
   stanford-crypto-ccm                        32.765+-0.619      ?      33.094+-0.625         ? might be 1.0100x slower
   stanford-crypto-pbkdf2                     96.472+-0.274      ?      96.727+-0.343         ?
   stanford-crypto-sha256-iterative           36.772+-0.126             36.634+-0.085         

   &lt;arithmetic&gt;                               53.537+-0.190             53.417+-0.186           might be 1.0023x faster

                                                  Conf#1                    Conf#2                                      
AsmBench:
   bigfib.cpp                               441.5196+-0.7669     ?    443.0796+-1.7072        ?
   cray.c                                   363.6939+-0.5656     ?    364.3559+-2.4752        ?
   dry.c                                    461.6533+-27.8064    ?    462.1714+-28.9926       ?
   FloatMM.c                                723.4377+-3.6195     ?    726.6473+-3.5986        ?
   gcc-loops.cpp                           3709.0511+-4.2150     ?   3718.9008+-11.3078       ?
   n-body.c                                 808.7373+-1.9564          807.3993+-1.6012        
   Quicksort.c                              398.2005+-0.7623          397.2776+-0.6105        
   stepanov_container.cpp                  3310.4908+-12.0120    ?   3316.4831+-13.6885       ?
   Towers.c                                 273.4291+-0.9558     ?    273.5383+-0.8914        ?

   &lt;geometric&gt;                              728.2313+-4.3860     ?    729.1486+-5.3243        ? might be 1.0013x slower

                                                  Conf#1                    Conf#2                                      
Geomean of preferred means:
   &lt;scaled-result&gt;                           30.8251+-0.0657           30.7990+-0.0761          might be 1.0008x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184413</commentid>
    <comment_count>3</comment_count>
      <attachid>276564</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-16 18:34:08 -0700</bug_when>
    <thetext>Comment on attachment 276564
Patch

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

&gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:411
&gt; +            if (child.isNumber()) {
&gt; +                setConstant(node, jsDoubleNumber(child.asNumber()));
&gt; +                break;
&gt; +            }
&gt; +            if (child.isUndefined()) {
&gt; +                setConstant(node, jsDoubleNumber(PNaN));
&gt; +                break;
&gt; +            }
&gt; +            if (child.isNull() || child.isFalse()) {
&gt; +                setConstant(node, jsDoubleNumber(0));
&gt; +                break;
&gt; +            }
&gt; +            if (child.isTrue()) {
&gt; +                setConstant(node, jsDoubleNumber(1));
&gt; +                break;
&gt; +            }

Seems like we would want this to share code with JSValue::toNumber function. This code should be something like this:

    if (child &amp;&amp; !child.isCell()) {
        setConstant(node, jsDoubleNumber(child.toNumberNonCell()))
        break;
    }

I suppose it’s OK to write it out like this instead, but it seems nice to concentrate this knowledge of how to turn values into numbers in one place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184433</commentid>
    <comment_count>4</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-04-16 21:06:53 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Seems like we would want this to share code with JSValue::toNumber function.
&gt; This code should be something like this:
&gt; 
&gt;     if (child &amp;&amp; !child.isCell()) {
&gt;         setConstant(node, jsDoubleNumber(child.toNumberNonCell()))
&gt;         break;
&gt;     }
&gt; 
&gt; I suppose it’s OK to write it out like this instead, but it seems nice to
&gt; concentrate this knowledge of how to turn values into numbers in one place.

I think this may be a bit dangerous for maintainability.
In the abstract interpreter, we must ensure this transformation is thread-safe and without side effect. Someone could modify JSValue without knowing how it is used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184437</commentid>
    <comment_count>5</comment_count>
      <attachid>276564</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-16 21:54:50 -0700</bug_when>
    <thetext>Comment on attachment 276564
Patch

Clearing flags on attachment: 276564

Committed r199639: &lt;http://trac.webkit.org/changeset/199639&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184438</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-16 21:54:53 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184475</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-17 09:17:43 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; Seems like we would want this to share code with JSValue::toNumber function.
&gt; &gt; This code should be something like this:
&gt; &gt; 
&gt; &gt;     if (child &amp;&amp; !child.isCell()) {
&gt; &gt;         setConstant(node, jsDoubleNumber(child.toNumberNonCell()))
&gt; &gt;         break;
&gt; &gt;     }
&gt; &gt; 
&gt; &gt; I suppose it’s OK to write it out like this instead, but it seems nice to
&gt; &gt; concentrate this knowledge of how to turn values into numbers in one place.
&gt; 
&gt; I think this may be a bit dangerous for maintainability.
&gt; In the abstract interpreter, we must ensure this transformation is
&gt; thread-safe and without side effect. Someone could modify JSValue without
&gt; knowing how it is used.

I understand what you are saying, but do not agree with you. All the non-cell transformations on JSValue have this property today. That’s what the entire class is about. The lack of a VM&amp; or ExecState&amp; argument is part of what makes this clear.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276564</attachid>
            <date>2016-04-16 15:06:45 -0700</date>
            <delta_ts>2016-04-16 21:54:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156669-20160416150701.patch</filename>
            <type>text/plain</type>
            <size>7586</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk5NTI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
YTMwYzdhMjBlMTNjZmNjMzQ3MDU5ZDc2YWM5MDM1OWZiY2JhMmQ0Li5iODhkOGIzODIxOTVhNGNm
OGViZTViZTk3NmU4MmIzZWEwNmEwNDk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNCBAQAorMjAxNi0wNC0xNiAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgW0pTQ10gREZHIHNob3VsZCBzdXBwb3J0IHJlbGF0aW9uYWwgY29t
cGFyaXNvbnMgb2YgTnVtYmVyIGFuZCBPdGhlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2NjY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW4gU3Vuc3BpZGVyLzNkLXJheXRyYWNlLCBERkcgZmFsbHMg
YmFjayB0byBKU1ZhbHVlIGluIHNvbWUgaW1wb3J0YW50CisgICAgICAgIHJlbGF0aW9uYWwgY29t
cGFyZSBiZWNhdXNlIHByb2ZpbGluZyBzZWVzICJ1bmRlZmluZWQiIGZyb20gdGltZSB0byB0aW1l
LgorCisgICAgICAgIFRoaXMgY2FzZSBpcyBmYWlybHkgY29tbW9uIG91dHNpZGUgU3Vuc3BpZGVy
IHRvbyBiZWNhdXNlIG9mIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzLgorICAgICAgICBVbmZv
cnR1bmF0ZWx5IGZvciB1cywgb3VyIGZhbGxiYWNrIGZvciBjb21wYXJlIGlzIHJlYWxseSBpbmVm
ZmljaWVudC4KKworICAgICAgICBGb3J0dW5hdGVseSwgcmVsYXRpb25hbCBjb21wYXJpc29uIHdp
dGggbnVsbC91bmRlZmluZWQvdHJ1ZS9mYWxzZSBhcmUgdHJpdmFsLgorICAgICAgICBXZSBjYW4g
anVzdCBjb252ZXJ0IGJvdGggc2lkZSB0byBEb3VibGUuIFRoYXQncyB3aGF0IHRoaXMgcGF0Y2gg
YWRkcy4KKworICAgICAgICBJIGFsc28gZXh0ZW5kZWQgY29uc3RhbnQgZm9sZGluZyBmb3IgdGhv
c2UgY2FzZXMgYmVjYXVzZSBJIG5vdGljZWQKKyAgICAgICAgYSBidW5jaCBvZiAidW5kZWZpbmVk
IiBjb25zdGFudCBnb2luZyB0aHJvdWdoIERvdWJsZVJlcCBhdCBydW50aW1lLgorCisgICAgICAg
ICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3Rz
KToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvY29tcGFyZS1u
dW1iZXItYW5kLW90aGVyLmpzOiBBZGRlZC4KKyAgICAgICAgKG9wYXF1ZVNpZGVFZmZlY3QpOgor
ICAgICAgICAobGV0Lm9wZXJhdG9yLm9mLm9wZXJhdG9ycy5ldmFsLnRlc3RQb2x5bW9ycGhpYyk6
CisgICAgICAgIChsZXQub3BlcmF0b3Iub2Yub3BlcmF0b3JzLmxldC5sZWZ0Lm9mLnR5cGVDYXNl
cy5sZXQucmlnaHQub2YudHlwZUNhc2VzLmV2YWwudGVzdE1vbm9tb3JwaGljKToKKyAgICAgICAg
KGxldC5vcGVyYXRvci5vZi5vcGVyYXRvcnMubGV0LmxlZnQub2YudHlwZUNhc2VzLmxldC5yaWdo
dC5vZi50eXBlQ2FzZXMudGVzdE1vbm9tb3JwaGljTGVmdENvbnN0YW50KToKKyAgICAgICAgKGxl
dC5vcGVyYXRvci5vZi5vcGVyYXRvcnMubGV0LmxlZnQub2YudHlwZUNhc2VzLmxldC5yaWdodC5v
Zi50eXBlQ2FzZXMudGVzdE1vbm9tb3JwaGljUmlnaHRDb25zdGFudCk6CisgICAgICAgIChsZXQu
b3BlcmF0b3Iub2Yub3BlcmF0b3JzLmxldC5sZWZ0Lm9mLnR5cGVDYXNlcy5sZXQucmlnaHQub2Yu
dHlwZUNhc2VzLmkudGVzdFBvbHltb3JwaGljKToKKwogMjAxNi0wNC0xMyAgSm9zZXBoIFBlY29y
YXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIEpTQ29udGV4dCBJbnNwZWN0b3I6
IEltcHJvdmUgQ2xhc3MgaW5zdGFuY2VzIGFuZCBKU0MgQVBJIEV4cG9ydGVkIFZhbHVlcyB2aWV3
IGluIENvbnNvbGUgLyBPYmplY3RUcmVlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKaW5kZXggZmI1NDRmYzUx
NGVmNWRkY2UwNzAxYmQ3OWNhZmNkNjA2OTA5NDgzNS4uZWVkY2MyNDRhZGVlNmM4M2RlMzA0MGZk
NDk5MTM0OTNlNTkzZDgxMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaApAQCAtMzkyLDkgKzM5MiwyMyBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZm
ZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAKICAgICBjYXNlIERvdWJsZVJlcDog
ewogICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUo
KTsKLSAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAg
IHNldENvbnN0YW50KG5vZGUsIGpzRG91YmxlTnVtYmVyKGNoaWxkLmFzTnVtYmVyKCkpKTsKLSAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoY2hpbGQpIHsKKyAgICAgICAgICAgIGlmIChj
aGlsZC5pc051bWJlcigpKSB7CisgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNE
b3VibGVOdW1iZXIoY2hpbGQuYXNOdW1iZXIoKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNoaWxkLmlzVW5kZWZpbmVkKCkpIHsKKyAg
ICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc0RvdWJsZU51bWJlcihQTmFOKSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY2hp
bGQuaXNOdWxsKCkgfHwgY2hpbGQuaXNGYWxzZSgpKSB7CisgICAgICAgICAgICAgICAgc2V0Q29u
c3RhbnQobm9kZSwganNEb3VibGVOdW1iZXIoMCkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNoaWxkLmlzVHJ1ZSgpKSB7CisgICAgICAg
ICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNEb3VibGVOdW1iZXIoMSkpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgdHlwZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCmluZGV4IDIwZGNkMGQ1MWM3MGYz
ZmEwYjY3ODZiMWRhYTZmMGY1NDAzMGYxNTguLmQzODdhMmU5NjE3MWU3MjIyODRiMjlhNjcwN2Nm
OTk0OTMzZDA3YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4
dXBQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcApAQCAtNDUzLDYgKzQ1MywxOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKE5vZGU6
OnNob3VsZFNwZWN1bGF0ZU51bWJlck9yQm9vbGVhbihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5v
ZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKICAgICAgICAgICAgICAgICBmaXhEb3VibGVPckJvb2xl
YW5FZGdlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICBmaXhEb3VibGVPckJvb2xl
YW5FZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChu
b2RlLT5vcCgpICE9IENvbXBhcmVFcQorICAgICAgICAgICAgICAgICYmIG5vZGUtPmNoaWxkMSgp
LT5zaG91bGRTcGVjdWxhdGVOb3RDZWxsKCkKKyAgICAgICAgICAgICAgICAmJiBub2RlLT5jaGls
ZDIoKS0+c2hvdWxkU3BlY3VsYXRlTm90Q2VsbCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXJPckJvb2xlYW4oKSkKKyAgICAgICAg
ICAgICAgICAgICAgZml4RG91YmxlT3JCb29sZWFuRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBmaXhFZGdlPERvdWJsZVJlcFVz
ZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDIoKS0+
c2hvdWxkU3BlY3VsYXRlTnVtYmVyT3JCb29sZWFuKCkpCisgICAgICAgICAgICAgICAgICAgIGZp
eERvdWJsZU9yQm9vbGVhbkVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgZml4RWRnZTxEb3VibGVSZXBVc2U+KG5vZGUtPmNoaWxk
MigpKTsKICAgICAgICAgICAgICAgICBub2RlLT5jbGVhckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9jb21wYXJlLW51bWJlci1hbmQtb3RoZXIu
anMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2NvbXBhcmUtbnVtYmVyLWFu
ZC1vdGhlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NTQ2YmYzN2VhMTBmOWE5M2IzM2UwNmQ5YjY3MWJiZTVi
ZTg5MGFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0
cmVzcy9jb21wYXJlLW51bWJlci1hbmQtb3RoZXIuanMKQEAgLTAsMCArMSw3NSBAQAorbGV0IHR5
cGVDYXNlcyA9IFsKKyAgICAiMSIsCisgICAgIk1hdGguUEkiLAorICAgICJOYU4iLAorICAgICJ1
bmRlZmluZWQiLAorICAgICJudWxsIiwKKyAgICAidHJ1ZSIsCisgICAgImZhbHNlIiwKK107CisK
K2xldCBvcGVyYXRvcnMgPSBbIjwiLCAiPD0iLCAiPiIsICI+PSIsICI9PSIsICIhPSIsICI9PT0i
LCAiIT09Il07CisKK2Z1bmN0aW9uIG9wYXF1ZVNpZGVFZmZlY3QoKQoreworfQorbm9JbmxpbmUo
b3BhcXVlU2lkZUVmZmVjdCk7CisKK2xldCB0ZXN0Q2FzZUluZGV4ID0gMDsKK2ZvciAobGV0IG9w
ZXJhdG9yIG9mIG9wZXJhdG9ycykgeworICAgIGV2YWwoYAorICAgICAgICBmdW5jdGlvbiB0ZXN0
UG9seW1vcnBoaWMoYSwgYikgeworICAgICAgICAgICAgaWYgKGEgJHtvcGVyYXRvcn0gYikgewor
ICAgICAgICAgICAgICAgIG9wYXF1ZVNpZGVFZmZlY3QoKQorICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIG5vSW5saW5lKHRlc3RQb2x5bW9ycGhpYylgKTsKKworICAgIGZvciAobGV0
IGxlZnQgb2YgdHlwZUNhc2VzKSB7CisgICAgICAgIGZvciAobGV0IHJpZ2h0IG9mIHR5cGVDYXNl
cykgeworICAgICAgICAgICAgbGV0IGxsaW50UmVzdWx0ID0gZXZhbChsZWZ0ICsgb3BlcmF0b3Ig
KyByaWdodCk7CisgICAgICAgICAgICBldmFsKGAKKyAgICAgICAgICAgIGZ1bmN0aW9uIHRlc3RN
b25vbW9ycGhpYyR7dGVzdENhc2VJbmRleH0oYSwgYikgeworICAgICAgICAgICAgICAgIGlmIChh
ICR7b3BlcmF0b3J9IGIpIHsKKyAgICAgICAgICAgICAgICAgICAgb3BhcXVlU2lkZUVmZmVjdCgp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBu
b0lubGluZSh0ZXN0TW9ub21vcnBoaWMke3Rlc3RDYXNlSW5kZXh9KTsKKworICAgICAgICAgICAg
ZnVuY3Rpb24gdGVzdE1vbm9tb3JwaGljTGVmdENvbnN0YW50JHt0ZXN0Q2FzZUluZGV4fShiKSB7
CisgICAgICAgICAgICAgICAgaWYgKCR7bGVmdH0gJHtvcGVyYXRvcn0gYikgeworICAgICAgICAg
ICAgICAgICAgICBvcGFxdWVTaWRlRWZmZWN0KCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5vSW5saW5lKHRlc3RNb25vbW9ycGhpY0xlZnRD
b25zdGFudCR7dGVzdENhc2VJbmRleH0pOworCisgICAgICAgICAgICBmdW5jdGlvbiB0ZXN0TW9u
b21vcnBoaWNSaWdodENvbnN0YW50JHt0ZXN0Q2FzZUluZGV4fShhKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGEgJHtvcGVyYXRvcn0gJHtyaWdodH0pIHsKKyAgICAgICAgICAgICAgICAgICAgb3Bh
cXVlU2lkZUVmZmVjdCgpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBub0lubGluZSh0ZXN0TW9ub21vcnBoaWNSaWdodENvbnN0YW50JHt0ZXN0
Q2FzZUluZGV4fSk7CisKKyAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAwOyArK2kp
IHsKKyAgICAgICAgICAgICAgICBpZiAodGVzdE1vbm9tb3JwaGljJHt0ZXN0Q2FzZUluZGV4fSgk
e2xlZnR9LCAke3JpZ2h0fSkgIT0gJHtsbGludFJlc3VsdH0pCisgICAgICAgICAgICAgICAgICAg
IHRocm93ICJGYWlsZWQgdGVzdE1vbm9tb3JwaGljJHt0ZXN0Q2FzZUluZGV4fSgke2xlZnR9LCAk
e3JpZ2h0fSkiOworICAgICAgICAgICAgICAgIGlmICh0ZXN0TW9ub21vcnBoaWNMZWZ0Q29uc3Rh
bnQke3Rlc3RDYXNlSW5kZXh9KCR7cmlnaHR9KSAhPSAke2xsaW50UmVzdWx0fSkKKyAgICAgICAg
ICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0TW9ub21vcnBoaWNMZWZ0Q29uc3RhbnQke3Rl
c3RDYXNlSW5kZXh9KCR7cmlnaHR9KSI7CisgICAgICAgICAgICAgICAgaWYgKHRlc3RNb25vbW9y
cGhpY1JpZ2h0Q29uc3RhbnQke3Rlc3RDYXNlSW5kZXh9KCR7bGVmdH0pICE9ICR7bGxpbnRSZXN1
bHR9KQorICAgICAgICAgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RNb25vbW9ycGhpY0xl
ZnRDb25zdGFudCR7dGVzdENhc2VJbmRleH0oJHtsZWZ0fSkiOworICAgICAgICAgICAgICAgIGlm
ICh0ZXN0UG9seW1vcnBoaWMoJHtsZWZ0fSwgJHtyaWdodH0pICE9PSAke2xsaW50UmVzdWx0fSkK
KyAgICAgICAgICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCBwb2x5bW9ycGhpY1ZlcnNpb24oJHts
ZWZ0fSkiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYCk7CisgICAgICAgICAgICArK3Rl
c3RDYXNlSW5kZXg7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>