<?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>34779</bug_id>
          
          <creation_ts>2010-02-09 17:30:58 -0800</creation_ts>
          <short_desc>Need CA_PRINT_TREE functionality on Windows</short_desc>
          <delta_ts>2010-02-10 16:26:18 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Marrin">cmarrin</reporter>
          <assigned_to name="Chris Marrin">cmarrin</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>189181</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-02-09 17:30:58 -0800</bug_when>
    <thetext>CACF does not provide a useable form of this debugging tool. So we need to implement it ourselves to track down some of the layer structure bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189182</commentid>
    <comment_count>1</comment_count>
      <attachid>48453</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-02-09 17:36:18 -0800</bug_when>
    <thetext>Created attachment 48453
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189399</commentid>
    <comment_count>2</comment_count>
      <attachid>48453</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-02-10 10:16:49 -0800</bug_when>
    <thetext>Comment on attachment 48453
Patch

&gt; +    CFArrayRef sublayers = CACFLayerGetSublayers(layer());
&gt; +    if (CFArrayGetCount(sublayers) &lt;= index)
&gt; +        return 0;

If we&apos;re checking the range of index and returning 0 rather than calling CFArrayGetValueAtIndex, then suggest we check for negative numbers too since the index is signed.

&gt; +    return layer(reinterpret_cast&lt;CACFLayerRef&gt;(const_cast&lt;void*&gt;(CFArrayGetValueAtIndex(sublayers, index))));

This should be static_cast instead of reinterpret_cast since it&apos;s a cast from void*.

&gt; -    bool isTransformLayer() const { return CACFLayerGetClass(layer()) == kCACFTransformLayer; }
&gt; +    bool isTransformLayer() const;

Why this change? Is there a problem with it being inlined?

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189420</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-02-10 11:09:04 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 48453 [details])
&gt; &gt; +    CFArrayRef sublayers = CACFLayerGetSublayers(layer());
&gt; &gt; +    if (CFArrayGetCount(sublayers) &lt;= index)
&gt; &gt; +        return 0;
&gt; 
&gt; If we&apos;re checking the range of index and returning 0 rather than calling
&gt; CFArrayGetValueAtIndex, then suggest we check for negative numbers too since
&gt; the index is signed.

I&apos;ll fix it.

&gt; 
&gt; &gt; +    return layer(reinterpret_cast&lt;CACFLayerRef&gt;(const_cast&lt;void*&gt;(CFArrayGetValueAtIndex(sublayers, index))));
&gt; 
&gt; This should be static_cast instead of reinterpret_cast since it&apos;s a cast from
&gt; void*.

Will do.

&gt; 
&gt; &gt; -    bool isTransformLayer() const { return CACFLayerGetClass(layer()) == kCACFTransformLayer; }
&gt; &gt; +    bool isTransformLayer() const;
&gt; 
&gt; Why this change? Is there a problem with it being inlined?

I had to change it to use the function call version of the enum since the DLL is delay loaded. Using that function can only be done in the cpp file. I will make a note of that in the changelog

&gt; 
&gt; r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189495</commentid>
    <comment_count>4</comment_count>
      <attachid>48522</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-02-10 15:18:52 -0800</bug_when>
    <thetext>Created attachment 48522
Replacement patch

I realized that it&apos;s a bad idea to be calling getenv() on each render to get CA_PRINT_TREE. So I now cache it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189506</commentid>
    <comment_count>5</comment_count>
      <attachid>48522</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-02-10 15:46:20 -0800</bug_when>
    <thetext>Comment on attachment 48522
Replacement patch

&gt;  void WKCACFLayerRenderer::renderSoon()
&gt; Index: WebCore/platform/graphics/win/WKCACFLayerRenderer.h
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/win/WKCACFLayerRenderer.h	(revision 54620)
&gt; +++ WebCore/platform/graphics/win/WKCACFLayerRenderer.h	(working copy)
&gt; @@ -97,6 +97,10 @@ private:
&gt;      HWND m_hostWindow;
&gt;      Timer&lt;WKCACFLayerRenderer&gt; m_renderTimer;
&gt;      IntRect m_scrollFrame;
&gt; +
&gt; +#ifndef NDEBUG
&gt; +    bool m_cachedPrintTreeFlag;
&gt; +#endif

I don&apos;t think the name needs to include &apos;cached&apos; or &apos;flag&apos;; both are obvious.
m_printTree is fine.

This stuff is OK, but I&apos;d still like to see a platform-independent layer dump
we can use in DRT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189520</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-02-10 16:26:13 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/54630</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48453</attachid>
            <date>2010-02-09 17:36:18 -0800</date>
            <delta_ts>2010-02-10 15:18:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>34779.patch</filename>
            <type>text/plain</type>
            <size>9263</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDU3NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMTAtMDItMDkgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZGVkIENBX1BSSU5UX1RSRUUgZnVuY3Rpb25hbGl0eSB0byBXS0NBQ0ZMYXllciBpbXBsZW1lbnRh
dGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ3
NzkKKyAgICAgICAgCisgICAgICAgIEkndmUgdHJpZWQgdG8gZHVwbGljYXRlIHRoZSBsb29rIG9m
IHRoZSBvdXRwdXQgb24gTWFjLCBidXQKKyAgICAgICAgaXQncyBub3QgcXVpdGUgdGhlIHNhbWUu
IEl0IHNob3dzIGFsbCB0aGUgdXNlZnVsIGluZm9ybWF0aW9uIHRob3VnaC4KKyAgICAgICAgSXQg
aXMgZW5hYmxlZCBieSBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBDQV9QUklOVF9U
UkVFPTEKKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1dLQ0FDRkxh
eWVyLmNwcDpJbXBsZW1lbnRhdGlvbiBvZiBwcmludFRyZWUKKyAgICAgICAgKFdlYkNvcmU6OldL
Q0FDRkxheWVyOjppc1RyYW5zZm9ybUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OldLQ0FDRkxh
eWVyOjpzdWJsYXllckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6cHJpbnRJbmRlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6cHJpbnRUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6V0tD
QUNGTGF5ZXI6OnByaW50VHJlZSk6UHJpbnRzIGZyb20gdGhpcyBsYXllciBkb3duCisgICAgICAg
IChXZWJDb3JlOjpXS0NBQ0ZMYXllcjo6cHJpbnRMYXllcik6UHJpbnRzIHRoaXMgbGF5ZXIgYW5k
IHJlY3Vyc2l2ZWx5IGNhbGxzIHN1YmxheWVycworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9XS0NBQ0ZMYXllci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9XS0NB
Q0ZMYXllclJlbmRlcmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldLQ0FDRkxheWVyUmVuZGVy
ZXI6OmNyZWF0ZVJlbmRlcmVyKTpBZGRzIGEgbmFtZSB0byB0aGUgcm9vdCBsYXllcnMKKyAgICAg
ICAgKFdlYkNvcmU6OldLQ0FDRkxheWVyUmVuZGVyZXI6OnJlbmRlcik6Q2FsbHMgcHJpbnRUcmVl
IHdoZW4gQ0FfUFJJTlRfVFJFRSBpcyAxCisKIDIwMTAtMDItMDkgIEdhdmluIEJhcnJhY2xvdWdo
ICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIFJ1YmJlciBTdGFtcGVkIGJ5IEdl
b2ZmIEdhcmVuLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vV0tDQUNGTGF5
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1dLQ0FD
RkxheWVyLmNwcAkocmV2aXNpb24gNTQ0NTQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9XS0NBQ0ZMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAog
I2luY2x1ZGUgIldLQ0FDRkxheWVyLmgiCiAKKyNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVk
ZSAiV0tDQUNGQ29udGV4dEZsdXNoZXIuaCIKICNpbmNsdWRlICJXS0NBQ0ZMYXllclJlbmRlcmVy
LmgiCiAKQEAgLTM3LDYgKzM4LDEwIEBACiAjaW5jbHVkZSA8UXVhcnR6Q29yZS9DQVJlbmRlci5o
PgogI2luY2x1ZGUgPFF1YXJ0ekNvcmVJbnRlcmZhY2UvUXVhcnR6Q29yZUludGVyZmFjZS5oPgog
CisjaWZuZGVmIE5ERUJVRworI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2VuZGlmCisK
ICNpZmRlZiBERUJVR19BTEwKICNwcmFnbWEgY29tbWVudChsaWIsICJRdWFydHpDb3JlX2RlYnVn
IikKICNwcmFnbWEgY29tbWVudChsaWIsICJRdWFydHpDb3JlSW50ZXJmYWNlX2RlYnVnIikKQEAg
LTI4Miw2ICsyODcsMTEgQEAgdm9pZCBXS0NBQ0ZMYXllcjo6c2V0TmVlZHNDb21taXQoKQogICAg
ICAgICBtX293bmVyLT5ub3RpZnlTeW5jUmVxdWlyZWQoKTsKIH0KIAorYm9vbCBXS0NBQ0ZMYXll
cjo6aXNUcmFuc2Zvcm1MYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIENBQ0ZMYXllckdldENs
YXNzKGxheWVyKCkpID09IGtDQUNGVHJhbnNmb3JtTGF5ZXIoKTsKK30KKwogdm9pZCBXS0NBQ0ZM
YXllcjo6YWRkU3VibGF5ZXIoUGFzc1JlZlB0cjxXS0NBQ0ZMYXllcj4gc3VibGF5ZXIpCiB7CiAg
ICAgaW5zZXJ0U3VibGF5ZXIoc3VibGF5ZXIsIG51bVN1YmxheWVycygpKTsKQEAgLTM3Miw2ICsz
ODIsMTUgQEAgdm9pZCBXS0NBQ0ZMYXllcjo6cmVtb3ZlU3VibGF5ZXIoY29uc3QgVwogICAgIHNl
dE5lZWRzQ29tbWl0KCk7CiB9CiAKK2NvbnN0IFdLQ0FDRkxheWVyKiBXS0NBQ0ZMYXllcjo6c3Vi
bGF5ZXJBdEluZGV4KGludCBpbmRleCkgY29uc3QKK3sKKyAgICBDRkFycmF5UmVmIHN1YmxheWVy
cyA9IENBQ0ZMYXllckdldFN1YmxheWVycyhsYXllcigpKTsKKyAgICBpZiAoQ0ZBcnJheUdldENv
dW50KHN1YmxheWVycykgPD0gaW5kZXgpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJl
dHVybiBsYXllcihyZWludGVycHJldF9jYXN0PENBQ0ZMYXllclJlZj4oY29uc3RfY2FzdDx2b2lk
Kj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChzdWJsYXllcnMsIGluZGV4KSkpKTsKK30KKwogaW50
IFdLQ0FDRkxheWVyOjppbmRleE9mU3VibGF5ZXIoY29uc3QgV0tDQUNGTGF5ZXIqIHJlZmVyZW5j
ZSkKIHsKICAgICBDQUNGTGF5ZXJSZWYgcmVmID0gcmVmZXJlbmNlLT5sYXllcigpOwpAQCAtNTE4
LDcgKzUzNywxMDggQEAgdm9pZCBXS0NBQ0ZMYXllcjo6c2V0TmVlZHNEaXNwbGF5KCkKICAgICBz
ZXROZWVkc0NvbW1pdCgpOwogfQogCisjaWZuZGVmIE5ERUJVRworc3RhdGljIHZvaWQgcHJpbnRJ
bmRlbnQoaW50IGluZGVudCkKK3sKKyAgICBmb3IgKCA7IGluZGVudCA+IDA7IC0taW5kZW50KQor
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgIik7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50VHJh
bnNmb3JtKGNvbnN0IENBVHJhbnNmb3JtM0QmIHRyYW5zZm9ybSkKK3sKKyAgICBmcHJpbnRmKHN0
ZGVyciwgIlslZyAlZyAlZyAlZzsgJWcgJWcgJWcgJWc7ICVnICVnICVnICVnOyAlZyAlZyAlZyAl
Z10iLAorICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0ubTExLCB0cmFuc2Zvcm0ubTEyLCB0
cmFuc2Zvcm0ubTEzLCB0cmFuc2Zvcm0ubTE0LCAKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNm
b3JtLm0yMSwgdHJhbnNmb3JtLm0yMiwgdHJhbnNmb3JtLm0yMywgdHJhbnNmb3JtLm0yNCwgCisg
ICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5tMzEsIHRyYW5zZm9ybS5tMzIsIHRyYW5zZm9y
bS5tMzMsIHRyYW5zZm9ybS5tMzQsIAorICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0ubTQx
LCB0cmFuc2Zvcm0ubTQyLCB0cmFuc2Zvcm0ubTQzLCB0cmFuc2Zvcm0ubTQ0KTsKK30KKwordm9p
ZCBXS0NBQ0ZMYXllcjo6cHJpbnRUcmVlKCkgY29uc3QKK3sKKyAgICAvLyBQcmludCBoZWFkaW5n
IGluZm8KKyAgICBDR1JlY3Qgcm9vdEJvdW5kcyA9IGJvdW5kcygpOworICAgIGZwcmludGYoc3Rk
ZXJyLCAiXG5cbioqIFJlbmRlciB0cmVlIGF0IHRpbWUgJWcgKGJvdW5kcyAlZywgJWcgJWd4JWcp
ICoqXG5cbiIsIAorICAgICAgICBjdXJyZW50VGltZSgpLCByb290Qm91bmRzLm9yaWdpbi54LCBy
b290Qm91bmRzLm9yaWdpbi55LCByb290Qm91bmRzLnNpemUud2lkdGgsIHJvb3RCb3VuZHMuc2l6
ZS5oZWlnaHQpOworCisgICAgLy8gUHJpbnQgbGF5ZXIgdHJlZSBmcm9tIHRoZSByb290CisgICAg
cHJpbnRMYXllcigwKTsKK30KKwordm9pZCBXS0NBQ0ZMYXllcjo6cHJpbnRMYXllcihpbnQgaW5k
ZW50KSBjb25zdAoreworICAgIENHUG9pbnQgbGF5ZXJQb3NpdGlvbiA9IHBvc2l0aW9uKCk7Cisg
ICAgQ0dQb2ludCBsYXllckFuY2hvclBvaW50ID0gYW5jaG9yUG9pbnQoKTsKKyAgICBDR1JlY3Qg
bGF5ZXJCb3VuZHMgPSBib3VuZHMoKTsKKyAgICBwcmludEluZGVudChpbmRlbnQpOworICAgIGZw
cmludGYoc3RkZXJyLCAiKCVzIFslZyAlZyAlZ10gWyVnICVnICVnICVnXSBbJWcgJWcgJWddXG4i
LAorICAgICAgICBpc1RyYW5zZm9ybUxheWVyKCkgPyAidHJhbnNmb3JtLWxheWVyIiA6ICJsYXll
ciIsCisgICAgICAgIGxheWVyUG9zaXRpb24ueCwgbGF5ZXJQb3NpdGlvbi55LCB6UG9zaXRpb24o
KSwgCisgICAgICAgIGxheWVyQm91bmRzLm9yaWdpbi54LCBsYXllckJvdW5kcy5vcmlnaW4ueSwg
bGF5ZXJCb3VuZHMuc2l6ZS53aWR0aCwgbGF5ZXJCb3VuZHMuc2l6ZS5oZWlnaHQsCisgICAgICAg
IGxheWVyQW5jaG9yUG9pbnQueCwgbGF5ZXJBbmNob3JQb2ludC55LCBhbmNob3JQb2ludFooKSk7
CisKKyAgICAvLyBQcmludCBuYW1lIGlmIG5lZWRlZAorICAgIFN0cmluZyBsYXllck5hbWUgPSBu
YW1lKCk7CisgICAgaWYgKCFsYXllck5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgIHByaW50SW5k
ZW50KGluZGVudCArIDEpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIihuYW1lICVzKVxuIiwg
bGF5ZXJOYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKworICAgIC8vIFByaW50IG1hc2tzVG9C
b3VuZHMgaWYgbmVlZGVkCisgICAgYm9vbCBsYXllck1hc2tzVG9Cb3VuZHMgPSBtYXNrc1RvQm91
bmRzKCk7CisgICAgaWYgKGxheWVyTWFza3NUb0JvdW5kcykgeworICAgICAgICBwcmludEluZGVu
dChpbmRlbnQgKyAxKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIobWFza3NUb0JvdW5kcyB0
cnVlKVxuIik7CisgICAgfQorCisgICAgLy8gUHJpbnQgb3BhY2l0eSBpZiBuZWVkZWQKKyAgICBm
bG9hdCBsYXllck9wYWNpdHkgPSBvcGFjaXR5KCk7CisgICAgaWYgKGxheWVyT3BhY2l0eSAhPSAx
KSB7CisgICAgICAgIHByaW50SW5kZW50KGluZGVudCArIDEpOworICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIihvcGFjaXR5ICVoZilcbiIsIGxheWVyT3BhY2l0eSk7CisgICAgfQorCisgICAgLy8g
UHJpbnQgc3VibGF5ZXJUcmFuc2Zvcm0gaWYgbmVlZGVkCisgICAgQ0FUcmFuc2Zvcm0zRCBsYXll
clRyYW5zZm9ybSA9IHN1YmxheWVyVHJhbnNmb3JtKCk7CisgICAgaWYgKCFDQVRyYW5zZm9ybTNE
SXNJZGVudGl0eShsYXllclRyYW5zZm9ybSkpIHsKKyAgICAgICAgcHJpbnRJbmRlbnQoaW5kZW50
ICsgMSk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKHN1YmxheWVyVHJhbnNmb3JtICIpOwor
ICAgICAgICBwcmludFRyYW5zZm9ybShsYXllclRyYW5zZm9ybSk7CisgICAgICAgIGZwcmludGYo
c3RkZXJyLCAiKVxuIik7CisgICAgfQorCisgICAgLy8gUHJpbnQgdHJhbnNmb3JtIGlmIG5lZWRl
ZAorICAgIGxheWVyVHJhbnNmb3JtID0gdHJhbnNmb3JtKCk7CisgICAgaWYgKCFDQVRyYW5zZm9y
bTNESXNJZGVudGl0eShsYXllclRyYW5zZm9ybSkpIHsKKyAgICAgICAgcHJpbnRJbmRlbnQoaW5k
ZW50ICsgMSk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKHRyYW5zZm9ybSAiKTsKKyAgICAg
ICAgcHJpbnRUcmFuc2Zvcm0obGF5ZXJUcmFuc2Zvcm0pOworICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIilcbiIpOworICAgIH0KKworICAgIC8vIFByaW50IGNvbnRlbnRzIGlmIG5lZWRlZAorICAg
IENHSW1hZ2VSZWYgbGF5ZXJDb250ZW50cyA9IGNvbnRlbnRzKCk7CisgICAgaWYgKGxheWVyQ29u
dGVudHMpIHsKKyAgICAgICAgcHJpbnRJbmRlbnQoaW5kZW50ICsgMSk7CisgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiKGNvbnRlbnRzIChpbWFnZSBbJWQgJWRdKSlcbiIsCisgICAgICAgICAgICBD
R0ltYWdlR2V0V2lkdGgobGF5ZXJDb250ZW50cyksIENHSW1hZ2VHZXRIZWlnaHQobGF5ZXJDb250
ZW50cykpOworICAgIH0KKworICAgIC8vIFByaW50IHN1YmxheWVycyBpZiBuZWVkZWQKKyAgICBp
bnQgbiA9IG51bVN1YmxheWVycygpOworICAgIGlmIChuID4gMCkgeworICAgICAgICBwcmludElu
ZGVudChpbmRlbnQgKyAxKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIoc3VibGF5ZXJzXG4i
KTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpCisgICAgICAgICAgICBzdWJs
YXllckF0SW5kZXgoaSktPnByaW50TGF5ZXIoaW5kZW50ICsgMik7CiAKKyAgICAgICAgcHJpbnRJ
bmRlbnQoaW5kZW50ICsgMSk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKVxuIik7CisgICAg
fQorCisgICAgcHJpbnRJbmRlbnQoaW5kZW50KTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIilcbiIp
OworfQorI2VuZGlmIC8vICNpZm5kZWYgTkRFQlVHCiB9CiAKICNlbmRpZiAvLyBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9X
S0NBQ0ZMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L1dLQ0FDRkxheWVyLmgJKHJldmlzaW9uIDU0NDU0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vV0tDQUNGTGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgZGlzcGxheShQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopOwog
Ci0gICAgYm9vbCBpc1RyYW5zZm9ybUxheWVyKCkgY29uc3QgeyByZXR1cm4gQ0FDRkxheWVyR2V0
Q2xhc3MobGF5ZXIoKSkgPT0ga0NBQ0ZUcmFuc2Zvcm1MYXllcjsgfQorICAgIGJvb2wgaXNUcmFu
c2Zvcm1MYXllcigpIGNvbnN0OwogCiAgICAgdm9pZCBhZGRTdWJsYXllcihQYXNzUmVmUHRyPFdL
Q0FDRkxheWVyPiBzdWJsYXllcik7CiAgICAgdm9pZCBpbnNlcnRTdWJsYXllcihQYXNzUmVmUHRy
PFdLQ0FDRkxheWVyPiwgc2l6ZV90IGluZGV4KTsKQEAgLTIyMyw2ICsyMjMsMTEgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0R2VvbWV0cnlGbGlwcGVkKGJvb2wgZmxpcHBlZCkgeyBDQUNGTGF5ZXJT
ZXRHZW9tZXRyeUZsaXBwZWQobGF5ZXIoKSwgZmxpcHBlZCk7IHNldE5lZWRzQ29tbWl0KCk7IH0K
ICAgICBib29sIGdlb21ldHJ5RmxpcHBlZCgpIGNvbnN0IHsgcmV0dXJuIENBQ0ZMYXllcklzR2Vv
bWV0cnlGbGlwcGVkKGxheWVyKCkpOyB9CiAKKyNpZm5kZWYgTkRFQlVHCisgICAgLy8gUHJpbnQg
dGhlIHRyZWUgZnJvbSB0aGUgcm9vdC4gQWxzbyBkb2VzIGNvbnNpc3RlbmN5IGNoZWNrcworICAg
IHZvaWQgcHJpbnRUcmVlKCkgY29uc3Q7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBXS0NBQ0ZM
YXllcihMYXllclR5cGUsIEdyYXBoaWNzTGF5ZXJDQUNGKiBvd25lcik7CiAKQEAgLTIzMyw2ICsy
MzgsOCBAQCBwcml2YXRlOgogICAgICAgICBDRkFycmF5UmVmIHN1YmxheWVycyA9IENBQ0ZMYXll
ckdldFN1YmxheWVycyhsYXllcigpKTsKICAgICAgICAgcmV0dXJuIHN1YmxheWVycyA/IENGQXJy
YXlHZXRDb3VudChzdWJsYXllcnMpIDogMDsKICAgICB9CisKKyAgICBjb25zdCBXS0NBQ0ZMYXll
ciogc3VibGF5ZXJBdEluZGV4KGludCkgY29uc3Q7CiAgICAgCiAgICAgLy8gUmV0dXJucyB0aGUg
aW5kZXggb2YgdGhlIHBhc3NlZCBsYXllciBpbiB0aGlzIGxheWVyJ3Mgc3VibGF5ZXJzIGxpc3QK
ICAgICAvLyBvciAtMSBpZiBub3QgZm91bmQKQEAgLTI0MSw2ICsyNDgsMTEgQEAgcHJpdmF0ZToK
ICAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIHJlbW92ZUZyb21TdXBlcmxh
eWVyLgogICAgIHZvaWQgcmVtb3ZlU3VibGF5ZXIoY29uc3QgV0tDQUNGTGF5ZXIqKTsKIAorI2lm
bmRlZiBOREVCVUcKKyAgICAvLyBQcmludCB0aGlzIGxheWVyIGFuZCBpdHMgY2hpbGRyZW4gdG8g
dGhlIGNvbnNvbGUKKyAgICB2b2lkIHByaW50TGF5ZXIoaW50IGluZGVudCkgY29uc3Q7CisjZW5k
aWYKKwogICAgIFJldGFpblB0cjxDQUNGTGF5ZXJSZWY+IG1fbGF5ZXI7CiAgICAgYm9vbCBtX25l
ZWRzRGlzcGxheU9uQm91bmRzQ2hhbmdlOwogICAgIEdyYXBoaWNzTGF5ZXJDQUNGKiBtX293bmVy
OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vV0tDQUNGTGF5ZXJSZW5kZXJl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vV0tDQUNG
TGF5ZXJSZW5kZXJlci5jcHAJKHJldmlzaW9uIDU0NDU0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vV0tDQUNGTGF5ZXJSZW5kZXJlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
OCw3ICsyMjgsOSBAQCB2b2lkIFdLQ0FDRkxheWVyUmVuZGVyZXI6OmNyZWF0ZVJlbmRlcmVyCiAK
ICAgICAvLyBDcmVhdGUgdGhlIHJvb3QgaGllcmFyY2h5CiAgICAgbV9yb290TGF5ZXIgPSBXS0NB
Q0ZMYXllcjo6Y3JlYXRlKFdLQ0FDRkxheWVyOjpMYXllcik7CisgICAgbV9yb290TGF5ZXItPnNl
dE5hbWUoIldLQ0FDRkxheWVyUmVuZGVyZXIgcm9vdExheWVyIik7CiAgICAgbV9zY3JvbGxMYXll
ciA9IFdLQ0FDRkxheWVyOjpjcmVhdGUoV0tDQUNGTGF5ZXI6OkxheWVyKTsKKyAgICBtX3Njcm9s
bExheWVyLT5zZXROYW1lKCJXS0NBQ0ZMYXllclJlbmRlcmVyIHNjcm9sbExheWVyIik7CiAKICAg
ICBtX3Jvb3RMYXllci0+YWRkU3VibGF5ZXIobV9zY3JvbGxMYXllcik7CiAgICAgbV9zY3JvbGxM
YXllci0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKQEAgLTM5OCw2ICs0MDAsMTIgQEAgdm9pZCBX
S0NBQ0ZMYXllclJlbmRlcmVyOjpyZW5kZXIoY29uc3QgVgogICAgIH0gd2hpbGUgKGVyciA9PSBE
M0RFUlJfREVWSUNFTE9TVCk7CiAKICAgICBDQVJlbmRlclVwZGF0ZUZpbmlzaCh1KTsKKworI2lm
bmRlZiBfTkRFQlVHCisgICAgY2hhciogcHJpbnRUcmVlRmxhZyA9IGdldGVudigiQ0FfUFJJTlRf
VFJFRSIpOworICAgIGlmIChwcmludFRyZWVGbGFnICYmIGF0b2kocHJpbnRUcmVlRmxhZykpCisg
ICAgICAgIG1fcm9vdExheWVyLT5wcmludFRyZWUoKTsKKyNlbmRpZgogfQogCiB2b2lkIFdLQ0FD
RkxheWVyUmVuZGVyZXI6OnJlbmRlclNvb24oKQo=
</data>
<flag name="review"
          id="31140"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48522</attachid>
            <date>2010-02-10 15:18:52 -0800</date>
            <delta_ts>2010-02-10 15:46:32 -0800</delta_ts>
            <desc>Replacement patch</desc>
            <filename>34779.patch</filename>
            <type>text/plain</type>
            <size>10381</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDYyMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzAgQEAKKzIwMTAtMDItMTAgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIEFkZGVk
IENBX1BSSU5UX1RSRUUgZnVuY3Rpb25hbGl0eSB0byBXS0NBQ0ZMYXllciBpbXBsZW1lbnRhdGlv
bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ3NzkK
KyAgICAgICAgCisgICAgICAgIEkndmUgdHJpZWQgdG8gZHVwbGljYXRlIHRoZSBsb29rIG9mIHRo
ZSBvdXRwdXQgb24gTWFjLCBidXQKKyAgICAgICAgaXQncyBub3QgcXVpdGUgdGhlIHNhbWUuIEl0
IHNob3dzIGFsbCB0aGUgdXNlZnVsIGluZm9ybWF0aW9uIHRob3VnaC4KKyAgICAgICAgSXQgaXMg
ZW5hYmxlZCBieSBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBDQV9QUklOVF9UUkVF
PTEKKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1dLQ0FDRkxheWVy
LmNwcDpJbXBsZW1lbnRhdGlvbiBvZiBwcmludFRyZWUKKyAgICAgICAgKFdlYkNvcmU6OldLQ0FD
RkxheWVyOjppc1RyYW5zZm9ybUxheWVyKToKKyAgICAgICAgICAgIE1vdmVkIGZ1bmN0aW9uIHRv
IGNwcCBmaWxlIGJlY2F1c2UgaXQgbmVlZHMgdG8gdXNlIHRoZSBmdW5jdGlvbiBmb3JtCisgICAg
ICAgICAgICBvZiBrQ0FDRlRyYW5zZm9ybUxheWVyIGJlY2F1c2UgdGhlIERMTCBpcyBkZWxheSBs
b2FkZWQsIGFuZCB0aGF0IGZ1bmN0aW9uCisgICAgICAgICAgICBjYW4gb25seSBiZSBjYWxsZWQg
ZnJvbSB0aGUgY3BwIGZpbGUuCisgICAgICAgIChXZWJDb3JlOjpXS0NBQ0ZMYXllcjo6c3VibGF5
ZXJBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OnByaW50SW5kZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OnByaW50VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OldLQ0FDRkxheWVyOjpw
cmludFRyZWUpOlByaW50cyBmcm9tIHRoaXMgbGF5ZXIgZG93bgorICAgICAgICAoV2ViQ29yZTo6
V0tDQUNGTGF5ZXI6OnByaW50TGF5ZXIpOlByaW50cyB0aGlzIGxheWVyIGFuZCByZWN1cnNpdmVs
eSBjYWxscyBzdWJsYXllcnMKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vV0tDQUNG
TGF5ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vV0tDQUNGTGF5ZXJSZW5k
ZXJlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXS0NBQ0ZMYXllclJlbmRlcmVyOjpXS0NBQ0ZM
YXllclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldLQ0FDRkxheWVyUmVuZGVyZXI6OmNy
ZWF0ZVJlbmRlcmVyKTpBZGRzIGEgbmFtZSB0byB0aGUgcm9vdCBsYXllcnMKKyAgICAgICAgKFdl
YkNvcmU6OldLQ0FDRkxheWVyUmVuZGVyZXI6OnJlbmRlcik6Q2FsbHMgcHJpbnRUcmVlIHdoZW4g
Q0FfUFJJTlRfVFJFRSBpcyAxCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1dLQ0FD
RkxheWVyUmVuZGVyZXIuaDoKIDIwMTAtMDItMTAgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQu
b3JnPgogCiAgICAgICAgIE5vIHJldmlldywgTWFjIGJ1aWxkIGZpeC4KSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1dLQ0FDRkxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9XS0NBQ0ZMYXllci5jcHAJKHJldmlzaW9uIDU0NjIw
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vV0tDQUNGTGF5ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJXS0NBQ0ZMYXllci5oIgog
CisjaW5jbHVkZSAiQ1N0cmluZy5oIgogI2luY2x1ZGUgIldLQ0FDRkNvbnRleHRGbHVzaGVyLmgi
CiAjaW5jbHVkZSAiV0tDQUNGTGF5ZXJSZW5kZXJlci5oIgogCkBAIC0zNyw2ICszOCwxMCBAQAog
I2luY2x1ZGUgPFF1YXJ0ekNvcmUvQ0FSZW5kZXIuaD4KICNpbmNsdWRlIDxRdWFydHpDb3JlSW50
ZXJmYWNlL1F1YXJ0ekNvcmVJbnRlcmZhY2UuaD4KIAorI2lmbmRlZiBOREVCVUcKKyNpbmNsdWRl
IDx3dGYvQ3VycmVudFRpbWUuaD4KKyNlbmRpZgorCiAjaWZkZWYgREVCVUdfQUxMCiAjcHJhZ21h
IGNvbW1lbnQobGliLCAiUXVhcnR6Q29yZV9kZWJ1ZyIpCiAjcHJhZ21hIGNvbW1lbnQobGliLCAi
UXVhcnR6Q29yZUludGVyZmFjZV9kZWJ1ZyIpCkBAIC0yODIsNiArMjg3LDExIEBAIHZvaWQgV0tD
QUNGTGF5ZXI6OnNldE5lZWRzQ29tbWl0KCkKICAgICAgICAgbV9vd25lci0+bm90aWZ5U3luY1Jl
cXVpcmVkKCk7CiB9CiAKK2Jvb2wgV0tDQUNGTGF5ZXI6OmlzVHJhbnNmb3JtTGF5ZXIoKSBjb25z
dAoreworICAgIHJldHVybiBDQUNGTGF5ZXJHZXRDbGFzcyhsYXllcigpKSA9PSBrQ0FDRlRyYW5z
Zm9ybUxheWVyKCk7Cit9CisKIHZvaWQgV0tDQUNGTGF5ZXI6OmFkZFN1YmxheWVyKFBhc3NSZWZQ
dHI8V0tDQUNGTGF5ZXI+IHN1YmxheWVyKQogewogICAgIGluc2VydFN1YmxheWVyKHN1YmxheWVy
LCBudW1TdWJsYXllcnMoKSk7CkBAIC0zNzIsNiArMzgyLDE1IEBAIHZvaWQgV0tDQUNGTGF5ZXI6
OnJlbW92ZVN1YmxheWVyKGNvbnN0IFcKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCitjb25z
dCBXS0NBQ0ZMYXllciogV0tDQUNGTGF5ZXI6OnN1YmxheWVyQXRJbmRleChpbnQgaW5kZXgpIGNv
bnN0Cit7CisgICAgQ0ZBcnJheVJlZiBzdWJsYXllcnMgPSBDQUNGTGF5ZXJHZXRTdWJsYXllcnMo
bGF5ZXIoKSk7CisgICAgaWYgKGluZGV4IDwgMCB8fCBDRkFycmF5R2V0Q291bnQoc3VibGF5ZXJz
KSA8PSBpbmRleCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIGxheWVyKHN0
YXRpY19jYXN0PENBQ0ZMYXllclJlZj4oY29uc3RfY2FzdDx2b2lkKj4oQ0ZBcnJheUdldFZhbHVl
QXRJbmRleChzdWJsYXllcnMsIGluZGV4KSkpKTsKK30KKwogaW50IFdLQ0FDRkxheWVyOjppbmRl
eE9mU3VibGF5ZXIoY29uc3QgV0tDQUNGTGF5ZXIqIHJlZmVyZW5jZSkKIHsKICAgICBDQUNGTGF5
ZXJSZWYgcmVmID0gcmVmZXJlbmNlLT5sYXllcigpOwpAQCAtNTE4LDcgKzUzNywxMDggQEAgdm9p
ZCBXS0NBQ0ZMYXllcjo6c2V0TmVlZHNEaXNwbGF5KCkKICAgICBzZXROZWVkc0NvbW1pdCgpOwog
fQogCisjaWZuZGVmIE5ERUJVRworc3RhdGljIHZvaWQgcHJpbnRJbmRlbnQoaW50IGluZGVudCkK
K3sKKyAgICBmb3IgKCA7IGluZGVudCA+IDA7IC0taW5kZW50KQorICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIiAgIik7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50VHJhbnNmb3JtKGNvbnN0IENBVHJh
bnNmb3JtM0QmIHRyYW5zZm9ybSkKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlslZyAlZyAlZyAl
ZzsgJWcgJWcgJWcgJWc7ICVnICVnICVnICVnOyAlZyAlZyAlZyAlZ10iLAorICAgICAgICAgICAg
ICAgICAgICB0cmFuc2Zvcm0ubTExLCB0cmFuc2Zvcm0ubTEyLCB0cmFuc2Zvcm0ubTEzLCB0cmFu
c2Zvcm0ubTE0LCAKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLm0yMSwgdHJhbnNmb3Jt
Lm0yMiwgdHJhbnNmb3JtLm0yMywgdHJhbnNmb3JtLm0yNCwgCisgICAgICAgICAgICAgICAgICAg
IHRyYW5zZm9ybS5tMzEsIHRyYW5zZm9ybS5tMzIsIHRyYW5zZm9ybS5tMzMsIHRyYW5zZm9ybS5t
MzQsIAorICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0ubTQxLCB0cmFuc2Zvcm0ubTQyLCB0
cmFuc2Zvcm0ubTQzLCB0cmFuc2Zvcm0ubTQ0KTsKK30KKwordm9pZCBXS0NBQ0ZMYXllcjo6cHJp
bnRUcmVlKCkgY29uc3QKK3sKKyAgICAvLyBQcmludCBoZWFkaW5nIGluZm8KKyAgICBDR1JlY3Qg
cm9vdEJvdW5kcyA9IGJvdW5kcygpOworICAgIGZwcmludGYoc3RkZXJyLCAiXG5cbioqIFJlbmRl
ciB0cmVlIGF0IHRpbWUgJWcgKGJvdW5kcyAlZywgJWcgJWd4JWcpICoqXG5cbiIsIAorICAgICAg
ICBjdXJyZW50VGltZSgpLCByb290Qm91bmRzLm9yaWdpbi54LCByb290Qm91bmRzLm9yaWdpbi55
LCByb290Qm91bmRzLnNpemUud2lkdGgsIHJvb3RCb3VuZHMuc2l6ZS5oZWlnaHQpOworCisgICAg
Ly8gUHJpbnQgbGF5ZXIgdHJlZSBmcm9tIHRoZSByb290CisgICAgcHJpbnRMYXllcigwKTsKK30K
Kwordm9pZCBXS0NBQ0ZMYXllcjo6cHJpbnRMYXllcihpbnQgaW5kZW50KSBjb25zdAoreworICAg
IENHUG9pbnQgbGF5ZXJQb3NpdGlvbiA9IHBvc2l0aW9uKCk7CisgICAgQ0dQb2ludCBsYXllckFu
Y2hvclBvaW50ID0gYW5jaG9yUG9pbnQoKTsKKyAgICBDR1JlY3QgbGF5ZXJCb3VuZHMgPSBib3Vu
ZHMoKTsKKyAgICBwcmludEluZGVudChpbmRlbnQpOworICAgIGZwcmludGYoc3RkZXJyLCAiKCVz
IFslZyAlZyAlZ10gWyVnICVnICVnICVnXSBbJWcgJWcgJWddXG4iLAorICAgICAgICBpc1RyYW5z
Zm9ybUxheWVyKCkgPyAidHJhbnNmb3JtLWxheWVyIiA6ICJsYXllciIsCisgICAgICAgIGxheWVy
UG9zaXRpb24ueCwgbGF5ZXJQb3NpdGlvbi55LCB6UG9zaXRpb24oKSwgCisgICAgICAgIGxheWVy
Qm91bmRzLm9yaWdpbi54LCBsYXllckJvdW5kcy5vcmlnaW4ueSwgbGF5ZXJCb3VuZHMuc2l6ZS53
aWR0aCwgbGF5ZXJCb3VuZHMuc2l6ZS5oZWlnaHQsCisgICAgICAgIGxheWVyQW5jaG9yUG9pbnQu
eCwgbGF5ZXJBbmNob3JQb2ludC55LCBhbmNob3JQb2ludFooKSk7CisKKyAgICAvLyBQcmludCBu
YW1lIGlmIG5lZWRlZAorICAgIFN0cmluZyBsYXllck5hbWUgPSBuYW1lKCk7CisgICAgaWYgKCFs
YXllck5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgIHByaW50SW5kZW50KGluZGVudCArIDEpOwor
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIihuYW1lICVzKVxuIiwgbGF5ZXJOYW1lLnV0ZjgoKS5k
YXRhKCkpOworICAgIH0KKworICAgIC8vIFByaW50IG1hc2tzVG9Cb3VuZHMgaWYgbmVlZGVkCisg
ICAgYm9vbCBsYXllck1hc2tzVG9Cb3VuZHMgPSBtYXNrc1RvQm91bmRzKCk7CisgICAgaWYgKGxh
eWVyTWFza3NUb0JvdW5kcykgeworICAgICAgICBwcmludEluZGVudChpbmRlbnQgKyAxKTsKKyAg
ICAgICAgZnByaW50ZihzdGRlcnIsICIobWFza3NUb0JvdW5kcyB0cnVlKVxuIik7CisgICAgfQor
CisgICAgLy8gUHJpbnQgb3BhY2l0eSBpZiBuZWVkZWQKKyAgICBmbG9hdCBsYXllck9wYWNpdHkg
PSBvcGFjaXR5KCk7CisgICAgaWYgKGxheWVyT3BhY2l0eSAhPSAxKSB7CisgICAgICAgIHByaW50
SW5kZW50KGluZGVudCArIDEpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIihvcGFjaXR5ICVo
ZilcbiIsIGxheWVyT3BhY2l0eSk7CisgICAgfQorCisgICAgLy8gUHJpbnQgc3VibGF5ZXJUcmFu
c2Zvcm0gaWYgbmVlZGVkCisgICAgQ0FUcmFuc2Zvcm0zRCBsYXllclRyYW5zZm9ybSA9IHN1Ymxh
eWVyVHJhbnNmb3JtKCk7CisgICAgaWYgKCFDQVRyYW5zZm9ybTNESXNJZGVudGl0eShsYXllclRy
YW5zZm9ybSkpIHsKKyAgICAgICAgcHJpbnRJbmRlbnQoaW5kZW50ICsgMSk7CisgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiKHN1YmxheWVyVHJhbnNmb3JtICIpOworICAgICAgICBwcmludFRyYW5z
Zm9ybShsYXllclRyYW5zZm9ybSk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKVxuIik7Cisg
ICAgfQorCisgICAgLy8gUHJpbnQgdHJhbnNmb3JtIGlmIG5lZWRlZAorICAgIGxheWVyVHJhbnNm
b3JtID0gdHJhbnNmb3JtKCk7CisgICAgaWYgKCFDQVRyYW5zZm9ybTNESXNJZGVudGl0eShsYXll
clRyYW5zZm9ybSkpIHsKKyAgICAgICAgcHJpbnRJbmRlbnQoaW5kZW50ICsgMSk7CisgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiKHRyYW5zZm9ybSAiKTsKKyAgICAgICAgcHJpbnRUcmFuc2Zvcm0o
bGF5ZXJUcmFuc2Zvcm0pOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIilcbiIpOworICAgIH0K
KworICAgIC8vIFByaW50IGNvbnRlbnRzIGlmIG5lZWRlZAorICAgIENHSW1hZ2VSZWYgbGF5ZXJD
b250ZW50cyA9IGNvbnRlbnRzKCk7CisgICAgaWYgKGxheWVyQ29udGVudHMpIHsKKyAgICAgICAg
cHJpbnRJbmRlbnQoaW5kZW50ICsgMSk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKGNvbnRl
bnRzIChpbWFnZSBbJWQgJWRdKSlcbiIsCisgICAgICAgICAgICBDR0ltYWdlR2V0V2lkdGgobGF5
ZXJDb250ZW50cyksIENHSW1hZ2VHZXRIZWlnaHQobGF5ZXJDb250ZW50cykpOworICAgIH0KKwor
ICAgIC8vIFByaW50IHN1YmxheWVycyBpZiBuZWVkZWQKKyAgICBpbnQgbiA9IG51bVN1YmxheWVy
cygpOworICAgIGlmIChuID4gMCkgeworICAgICAgICBwcmludEluZGVudChpbmRlbnQgKyAxKTsK
KyAgICAgICAgZnByaW50ZihzdGRlcnIsICIoc3VibGF5ZXJzXG4iKTsKKyAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBuOyArK2kpCisgICAgICAgICAgICBzdWJsYXllckF0SW5kZXgoaSktPnBy
aW50TGF5ZXIoaW5kZW50ICsgMik7CiAKKyAgICAgICAgcHJpbnRJbmRlbnQoaW5kZW50ICsgMSk7
CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKVxuIik7CisgICAgfQorCisgICAgcHJpbnRJbmRl
bnQoaW5kZW50KTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIilcbiIpOworfQorI2VuZGlmIC8vICNp
Zm5kZWYgTkRFQlVHCiB9CiAKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9XS0NBQ0ZMYXllci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1dLQ0FDRkxheWVyLmgJKHJl
dmlzaW9uIDU0NjIwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vV0tDQUNGTGF5
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgZGlzcGxheShQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopOwogCi0gICAgYm9vbCBpc1RyYW5z
Zm9ybUxheWVyKCkgY29uc3QgeyByZXR1cm4gQ0FDRkxheWVyR2V0Q2xhc3MobGF5ZXIoKSkgPT0g
a0NBQ0ZUcmFuc2Zvcm1MYXllcjsgfQorICAgIGJvb2wgaXNUcmFuc2Zvcm1MYXllcigpIGNvbnN0
OwogCiAgICAgdm9pZCBhZGRTdWJsYXllcihQYXNzUmVmUHRyPFdLQ0FDRkxheWVyPiBzdWJsYXll
cik7CiAgICAgdm9pZCBpbnNlcnRTdWJsYXllcihQYXNzUmVmUHRyPFdLQ0FDRkxheWVyPiwgc2l6
ZV90IGluZGV4KTsKQEAgLTIyMyw2ICsyMjMsMTEgQEAgcHVibGljOgogICAgIHZvaWQgc2V0R2Vv
bWV0cnlGbGlwcGVkKGJvb2wgZmxpcHBlZCkgeyBDQUNGTGF5ZXJTZXRHZW9tZXRyeUZsaXBwZWQo
bGF5ZXIoKSwgZmxpcHBlZCk7IHNldE5lZWRzQ29tbWl0KCk7IH0KICAgICBib29sIGdlb21ldHJ5
RmxpcHBlZCgpIGNvbnN0IHsgcmV0dXJuIENBQ0ZMYXllcklzR2VvbWV0cnlGbGlwcGVkKGxheWVy
KCkpOyB9CiAKKyNpZm5kZWYgTkRFQlVHCisgICAgLy8gUHJpbnQgdGhlIHRyZWUgZnJvbSB0aGUg
cm9vdC4gQWxzbyBkb2VzIGNvbnNpc3RlbmN5IGNoZWNrcworICAgIHZvaWQgcHJpbnRUcmVlKCkg
Y29uc3Q7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBXS0NBQ0ZMYXllcihMYXllclR5cGUsIEdy
YXBoaWNzTGF5ZXJDQUNGKiBvd25lcik7CiAKQEAgLTIzMyw2ICsyMzgsOCBAQCBwcml2YXRlOgog
ICAgICAgICBDRkFycmF5UmVmIHN1YmxheWVycyA9IENBQ0ZMYXllckdldFN1YmxheWVycyhsYXll
cigpKTsKICAgICAgICAgcmV0dXJuIHN1YmxheWVycyA/IENGQXJyYXlHZXRDb3VudChzdWJsYXll
cnMpIDogMDsKICAgICB9CisKKyAgICBjb25zdCBXS0NBQ0ZMYXllciogc3VibGF5ZXJBdEluZGV4
KGludCkgY29uc3Q7CiAgICAgCiAgICAgLy8gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIHBhc3Nl
ZCBsYXllciBpbiB0aGlzIGxheWVyJ3Mgc3VibGF5ZXJzIGxpc3QKICAgICAvLyBvciAtMSBpZiBu
b3QgZm91bmQKQEAgLTI0MSw2ICsyNDgsMTEgQEAgcHJpdmF0ZToKICAgICAvLyBUaGlzIHNob3Vs
ZCBvbmx5IGJlIGNhbGxlZCBmcm9tIHJlbW92ZUZyb21TdXBlcmxheWVyLgogICAgIHZvaWQgcmVt
b3ZlU3VibGF5ZXIoY29uc3QgV0tDQUNGTGF5ZXIqKTsKIAorI2lmbmRlZiBOREVCVUcKKyAgICAv
LyBQcmludCB0aGlzIGxheWVyIGFuZCBpdHMgY2hpbGRyZW4gdG8gdGhlIGNvbnNvbGUKKyAgICB2
b2lkIHByaW50TGF5ZXIoaW50IGluZGVudCkgY29uc3Q7CisjZW5kaWYKKwogICAgIFJldGFpblB0
cjxDQUNGTGF5ZXJSZWY+IG1fbGF5ZXI7CiAgICAgYm9vbCBtX25lZWRzRGlzcGxheU9uQm91bmRz
Q2hhbmdlOwogICAgIEdyYXBoaWNzTGF5ZXJDQUNGKiBtX293bmVyOwpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vV0tDQUNGTGF5ZXJSZW5kZXJlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vV0tDQUNGTGF5ZXJSZW5kZXJlci5jcHAJ
KHJldmlzaW9uIDU0NjIwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vV0tDQUNG
TGF5ZXJSZW5kZXJlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw2ICsxNDIsMTAgQEAgV0tD
QUNGTGF5ZXJSZW5kZXJlcjo6V0tDQUNGTGF5ZXJSZW5kZXJlcgogICAgICwgbV9yZW5kZXJUaW1l
cih0aGlzLCAmV0tDQUNGTGF5ZXJSZW5kZXJlcjo6cmVuZGVyVGltZXJGaXJlZCkKICAgICAsIG1f
c2Nyb2xsRnJhbWUoMCwgMCwgMSwgMSkgLy8gRGVmYXVsdCB0byAxIHRvIGF2b2lkIDAgc2l6ZSBm
cmFtZXMKIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgY2hhciogcHJpbnRUcmVlRmxhZyA9IGdldGVu
digiQ0FfUFJJTlRfVFJFRSIpOworICAgIG1fY2FjaGVkUHJpbnRUcmVlRmxhZyA9IHByaW50VHJl
ZUZsYWcgJiYgYXRvaShwcmludFRyZWVGbGFnKQorI2VuZGlmCiB9CiAKIFdLQ0FDRkxheWVyUmVu
ZGVyZXI6On5XS0NBQ0ZMYXllclJlbmRlcmVyKCkKQEAgLTIyOCw3ICsyMzIsOSBAQCB2b2lkIFdL
Q0FDRkxheWVyUmVuZGVyZXI6OmNyZWF0ZVJlbmRlcmVyCiAKICAgICAvLyBDcmVhdGUgdGhlIHJv
b3QgaGllcmFyY2h5CiAgICAgbV9yb290TGF5ZXIgPSBXS0NBQ0ZMYXllcjo6Y3JlYXRlKFdLQ0FD
RkxheWVyOjpMYXllcik7CisgICAgbV9yb290TGF5ZXItPnNldE5hbWUoIldLQ0FDRkxheWVyUmVu
ZGVyZXIgcm9vdExheWVyIik7CiAgICAgbV9zY3JvbGxMYXllciA9IFdLQ0FDRkxheWVyOjpjcmVh
dGUoV0tDQUNGTGF5ZXI6OkxheWVyKTsKKyAgICBtX3Njcm9sbExheWVyLT5zZXROYW1lKCJXS0NB
Q0ZMYXllclJlbmRlcmVyIHNjcm9sbExheWVyIik7CiAKICAgICBtX3Jvb3RMYXllci0+YWRkU3Vi
bGF5ZXIobV9zY3JvbGxMYXllcik7CiAgICAgbV9zY3JvbGxMYXllci0+c2V0TWFza3NUb0JvdW5k
cyh0cnVlKTsKQEAgLTM5OCw2ICs0MDQsMTEgQEAgdm9pZCBXS0NBQ0ZMYXllclJlbmRlcmVyOjpy
ZW5kZXIoY29uc3QgVgogICAgIH0gd2hpbGUgKGVyciA9PSBEM0RFUlJfREVWSUNFTE9TVCk7CiAK
ICAgICBDQVJlbmRlclVwZGF0ZUZpbmlzaCh1KTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBpZiAo
bV9jYWNoZWRQcmludFRyZWVGbGFnKQorICAgICAgICBtX3Jvb3RMYXllci0+cHJpbnRUcmVlKCk7
CisjZW5kaWYKIH0KIAogdm9pZCBXS0NBQ0ZMYXllclJlbmRlcmVyOjpyZW5kZXJTb29uKCkKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1dLQ0FDRkxheWVyUmVuZGVyZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9XS0NBQ0ZMYXllclJl
bmRlcmVyLmgJKHJldmlzaW9uIDU0NjIwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vV0tDQUNGTGF5ZXJSZW5kZXJlci5oCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw2ICs5NywxMCBA
QCBwcml2YXRlOgogICAgIEhXTkQgbV9ob3N0V2luZG93OwogICAgIFRpbWVyPFdLQ0FDRkxheWVy
UmVuZGVyZXI+IG1fcmVuZGVyVGltZXI7CiAgICAgSW50UmVjdCBtX3Njcm9sbEZyYW1lOworCisj
aWZuZGVmIE5ERUJVRworICAgIGJvb2wgbV9jYWNoZWRQcmludFRyZWVGbGFnOworI2VuZGlmCiB9
OwogCiB9Cg==
</data>
<flag name="review"
          id="31223"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>