<?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>78728</bug_id>
          
          <creation_ts>2012-02-15 12:17:55 -0800</creation_ts>
          <short_desc>Box shadow drawing takes an unnecessarily slow code path in some single-shadow, opaque-background cases</short_desc>
          <delta_ts>2012-02-15 19:31:20 -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>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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>mitz</reporter>
          <assigned_to>mitz</assigned_to>
          <cc>simon.fraser</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>557450</commentid>
    <comment_count>0</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-02-15 12:17:55 -0800</bug_when>
    <thetext>Box shadow drawing takes an unnecessarily slow code path in some single-shadow, opaque-background cases</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557451</commentid>
    <comment_count>1</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-02-15 12:18:23 -0800</bug_when>
    <thetext>&lt;rdar://problem/10870238&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557464</commentid>
    <comment_count>2</comment_count>
      <attachid>127213</attachid>
    <who name="">mitz</who>
    <bug_when>2012-02-15 12:31:42 -0800</bug_when>
    <thetext>Created attachment 127213
Let the background cast the shadow directly in some cases where this is possible</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557469</commentid>
    <comment_count>3</comment_count>
      <attachid>127213</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2012-02-15 12:44:42 -0800</bug_when>
    <thetext>Comment on attachment 127213
Let the background cast the shadow directly in some cases where this is possible

It&apos;s slightly slower, but you could simplify the patch considerably if you just moved:

if (!boxShadowShouldBeAppliedToBackground(determineBackgroundBleedAvoidance(paintInfo.context)))
    paintBoxShadow(paintInfo, rect, style(), Normal);

inside RenderBoxModelObject::paintBoxShadow.

Then you wouldn&apos;t have to patch a bunch of call sites, and you wouldn&apos;t even have to touch InlineFlowBox.

I&apos;ll leave it up to you, though, since your way is ever-so-slightly faster at the cost of complicating every call site.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557486</commentid>
    <comment_count>4</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-02-15 13:05:28 -0800</bug_when>
    <thetext>I can&apos;t do this because InlineFlowBox doesn&apos;t use determineBackgroundBleedAvoidance(). Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557525</commentid>
    <comment_count>5</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-02-15 13:58:06 -0800</bug_when>
    <thetext>Fixed in &lt;http://trac.webkit.org/r107836&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557631</commentid>
    <comment_count>6</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-02-15 15:23:59 -0800</bug_when>
    <thetext>On the chromium bots, this changed 3 pixel results in unexpected ways.

In fast/box-shadow/spread.html, the black shapes got smaller.
http://svn.webkit.org/repository/webkit/trunk/LayoutTests/platform/chromium-mac-snowleopard/fast/box-shadow/spread-expected.png
http://build.chromium.org/f/chromium/layout_test_results/Webkit_Mac10_6/results/layout-test-results/fast/box-shadow/spread-actual.png
http://build.chromium.org/f/chromium/layout_test_results/Webkit_Mac10_6/results/layout-test-results/fast/box-shadow/spread-diff.png

In fast/writing-mode/box-shadow-horizontal-bt.html and fast/writing-mode/box-shadow-vertical-lr.html, the shadow disappeared from the first line of text.
http://svn.webkit.org/repository/webkit/trunk/LayoutTests/platform/chromium-mac-snowleopard/fast/writing-mode/box-shadow-horizontal-bt-expected.png
http://build.chromium.org/f/chromium/layout_test_results/Webkit_Mac10_6/results/layout-test-results/fast/writing-mode/box-shadow-horizontal-bt-actual.png
http://build.chromium.org/f/chromium/layout_test_results/Webkit_Mac10_6/results/layout-test-results/fast/writing-mode/box-shadow-horizontal-bt-diff.png

Was there no change for these tests on Apple Mac?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557659</commentid>
    <comment_count>7</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-02-15 15:45:05 -0800</bug_when>
    <thetext>Thanks. These differences do occur in OS X WebKit, but I failed to notice them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557712</commentid>
    <comment_count>8</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-02-15 16:22:41 -0800</bug_when>
    <thetext>Filed bug 78759.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557836</commentid>
    <comment_count>9</comment_count>
      <attachid>127213</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-02-15 19:21:45 -0800</bug_when>
    <thetext>Comment on attachment 127213
Let the background cast the shadow directly in some cases where this is possible

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

&gt; Source/WebCore/rendering/RenderBoxModelObject.cpp:2611
&gt; +    for (const FillLayer* next = lastBackgroundLayer-&gt;next(); next; )
&gt; +        lastBackgroundLayer = next;

This loop is bad.  We never iterate after the first iteration.  Did you mean to have next = lastBackgroundLayer-&gt;next() as the third part of the for statement?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557842</commentid>
    <comment_count>10</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-02-15 19:31:20 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 127213 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=127213&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderBoxModelObject.cpp:2611
&gt; &gt; +    for (const FillLayer* next = lastBackgroundLayer-&gt;next(); next; )
&gt; &gt; +        lastBackgroundLayer = next;
&gt; 
&gt; This loop is bad.  We never iterate after the first iteration.  Did you mean to have next = lastBackgroundLayer-&gt;next() as the third part of the for statement?

Yes. Thanks for noticing it!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127213</attachid>
            <date>2012-02-15 12:31:42 -0800</date>
            <delta_ts>2012-02-15 19:21:45 -0800</delta_ts>
            <desc>Let the background cast the shadow directly in some cases where this is possible</desc>
            <filename>bug-78728-20120215123140.patch</filename>
            <type>text/plain</type>
            <size>14607</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNzgzMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDEyLTAyLTE1ICBEYW4gQmVy
bnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CisKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwODcw
MjM4PiBCb3ggc2hhZG93IGRyYXdpbmcgdGFrZXMgYW4gdW5uZWNlc3NhcmlseSBzbG93IGNvZGUg
cGF0aCBpbiBzb21lIHNpbmdsZS1zaGFkb3csIG9wYXF1ZS1iYWNrZ3JvdW5kIGNhc2VzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODcyOAorCisgICAg
ICAgIEluIHNvbWUgY2FzZXMsIHdoZW4gdGhlcmUgaXMgb25seSBvbmUgbm9ybWFsIGJveCBzaGFk
b3csIGFuZCB0aGUgYm94IGhhcyBhbiBvcGFxdWUgYmFja2dyb3VuZCwKKyAgICAgICAgaXQgaXMg
cG9zc2libGUgdG8gZHJhdyB0aGUgYm94IHNoYWRvdyBieSBoYXZpbmcgdGhlIGJhY2tncm91bmQg
Y2FzdCBpdCBkaXJlY3RseS4gVGhpcyBhcHBlYXJzCisgICAgICAgIHRvIGJlIGZhc3RlciB0aGFu
IHRoZSBnZW5lcmljIGNvZGUgcGF0aCB0aGF0IHVzZXMgYSBzZXBhcmF0ZSBkcmF3aW5nIHBhc3Mg
dG8gY2FzdCB0aGUgc2hhZG93LAorICAgICAgICBjbGlwcGluZyBvdXQgdGhlIGJvcmRlciBib3gg
YW5kIHRoZSBzaGFkb3ctY2FzdGluZyBib3guCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBiZWNhdXNlIGJlaGF2aW9yIGlzIHVu
Y2hhbmdlZC4KKworICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6OnBhaW50Qm94RGVjb3JhdGlvbnMpOiBDaGFuZ2Vk
IHRvIG5vdCBwYWludCBub3JtYWwgYm94IHNoYWRvd3MgaWYKKyAgICAgICAgdGhleSBhcmUgZ29p
bmcgdG8gYmUgY2FzdCBieSB0aGUgYmFja2dyb3VuZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFpbnRCb3hEZWNvcmF0
aW9ucyk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guaDogTWFkZSBkZXRl
cm1pbmVCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2UoKSBwcm90ZWN0ZWQuCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5
Qm94U2hhZG93Rm9yQmFja2dyb3VuZCk6IEFkZGVkIHRoaXMgaGVscGVyIGZ1bmN0aW9uLCB3aGlj
aCBhcHBsaWVzIHRoZSBmaXJzdAorICAgICAgICBub3JtYWwgc2hhZG93IGZyb20gdGhlIGdpdmVu
IFJlbmRlclN0eWxlIHRvIHRoZSBnaXZlbiBHcmFwaGljc0NvbnRleHQuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZXJFeHRlbmRlZCk6IEFkZGVk
IGNhbGxzIHRvCisgICAgICAgIGFwcGx5Qm94U2hhZG93Rm9yQmFja2dyb3VuZCgpIGJlZm9yZSBk
cmF3aW5nIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIHdoZW4gbmVlZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OmJveFNoYWRvd1Nob3VsZEJlQXBwbGllZFRvQmFja2dy
b3VuZCk6IEFkZGVkLiBSZXR1cm5zIHRydWUKKyAgICAgICAgaW4gc29tZSBvZiB0aGUgY2FzZXMg
d2hlcmUgdGhlIGJveCBzaGFkb3cgY2FuIGJlIGNhc3QgYnkgdGhlIGJhY2tncm91bmQgZGlyZWN0
bHkuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0Lmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckZpZWxkc2V0OjpwYWludEJveERlY29yYXRpb25zKTogQ2hhbmdlZCB0byBub3QgcGFpbnQgbm9y
bWFsIGJveCBzaGFkb3dzIGlmCisgICAgICAgIHRoZXkgYXJlIGdvaW5nIHRvIGJlIGNhc3QgYnkg
dGhlIGJhY2tncm91bmQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpwYWludEJveERlY29yYXRpb25zKTogRGl0dG8u
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUYWJsZUNlbGw6OmJveFNoYWRvd1Nob3VsZEJlQXBwbGllZFRvQmFja2dyb3Vu
ZCk6IEFkZGVkIHRoaXMgb3ZlcnJpZGUgdGhhdAorICAgICAgICBhbHdheXMgcmV0dXJucyBmYWxz
ZSwgYmVjYXVzZSB0YWJsZSBjZWxscyBzb21ldGltZXMgYXBwbHkgYSBjbGlwIGJlZm9yZSBkcmF3
aW5nIHRoZSBiYWNrZ3JvdW5kLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwu
aDoKKwogMjAxMi0wMi0xNSAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4K
IAogICAgICAgICBVbnNldCB0aGUgYWN0aXZlIGZsYWcgd2hlbiBUZXh0VHJhY2tDdWVzIGdvIGF3
YXkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHJl
dmlzaW9uIDEwNzcyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwMyw3ICsxMjAzLDggQEAgdm9pZCBJbmxpbmVGbG93
Qm94OjpwYWludEJveERlY29yYXRpb25zKAogICAgIGlmICgoIXBhcmVudCgpICYmIG1fZmlyc3RM
aW5lICYmIHN0eWxlVG9Vc2UgIT0gcmVuZGVyZXIoKS0+c3R5bGUoKSkgfHwgKHBhcmVudCgpICYm
IHJlbmRlcmVyKCktPmhhc0JveERlY29yYXRpb25zKCkpKSB7CiAgICAgICAgIExheW91dFJlY3Qg
cGFpbnRSZWN0ID0gTGF5b3V0UmVjdChhZGp1c3RlZFBhaW50b2Zmc2V0LCBmcmFtZVJlY3Quc2l6
ZSgpKTsKICAgICAgICAgLy8gU2hhZG93IGNvbWVzIGZpcnN0IGFuZCBpcyBiZWhpbmQgdGhlIGJh
Y2tncm91bmQgYW5kIGJvcmRlci4KLSAgICAgICAgcGFpbnRCb3hTaGFkb3cocGFpbnRJbmZvLCBz
dHlsZVRvVXNlLCBOb3JtYWwsIHBhaW50UmVjdCk7CisgICAgICAgIGlmICghYm94TW9kZWxPYmpl
Y3QoKS0+Ym94U2hhZG93U2hvdWxkQmVBcHBsaWVkVG9CYWNrZ3JvdW5kKEJhY2tncm91bmRCbGVl
ZE5vbmUpKQorICAgICAgICAgICAgcGFpbnRCb3hTaGFkb3cocGFpbnRJbmZvLCBzdHlsZVRvVXNl
LCBOb3JtYWwsIHBhaW50UmVjdCk7CiAKICAgICAgICAgQ29sb3IgYyA9IHN0eWxlVG9Vc2UtPnZp
c2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7CiAgICAgICAg
IHBhaW50RmlsbExheWVycyhwYWludEluZm8sIGMsIHN0eWxlVG9Vc2UtPmJhY2tncm91bmRMYXll
cnMoKSwgcGFpbnRSZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3gu
Y3BwCShyZXZpc2lvbiAxMDc3MjApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTE3LDExICs5MTcsMTIgQEAgdm9pZCBSZW5kZXJC
b3g6OnBhaW50Qm94RGVjb3JhdGlvbnMoUGFpbgogICAgIC8vIGJhbGxvb24gbGF5b3V0IGlzIGFu
IGV4YW1wbGUgb2YgdGhpcykuCiAgICAgYm9yZGVyRml0QWRqdXN0KHBhaW50UmVjdCk7CiAKKyAg
ICBCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2UgYmxlZWRBdm9pZGFuY2UgPSBkZXRlcm1pbmVCYWNr
Z3JvdW5kQmxlZWRBdm9pZGFuY2UocGFpbnRJbmZvLmNvbnRleHQpOworCiAgICAgLy8gRklYTUU6
IFNob3VsZCBldmVudHVhbGx5IGdpdmUgdGhlIHRoZW1lIGNvbnRyb2wgb3ZlciB3aGV0aGVyIHRo
ZSBib3ggc2hhZG93IHNob3VsZCBwYWludCwgc2luY2UgY29udHJvbHMgY291bGQgaGF2ZQogICAg
IC8vIGN1c3RvbSBzaGFkb3dzIG9mIHRoZWlyIG93bi4KLSAgICBwYWludEJveFNoYWRvdyhwYWlu
dEluZm8sIHBhaW50UmVjdCwgc3R5bGUoKSwgTm9ybWFsKTsKLQotICAgIEJhY2tncm91bmRCbGVl
ZEF2b2lkYW5jZSBibGVlZEF2b2lkYW5jZSA9IGRldGVybWluZUJhY2tncm91bmRCbGVlZEF2b2lk
YW5jZShwYWludEluZm8uY29udGV4dCk7CisgICAgaWYgKCFib3hTaGFkb3dTaG91bGRCZUFwcGxp
ZWRUb0JhY2tncm91bmQoYmxlZWRBdm9pZGFuY2UpKQorICAgICAgICBwYWludEJveFNoYWRvdyhw
YWludEluZm8sIHBhaW50UmVjdCwgc3R5bGUoKSwgTm9ybWFsKTsKIAogICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQsIGZhbHNlKTsKICAg
ICBpZiAoYmxlZWRBdm9pZGFuY2UgPT0gQmFja2dyb3VuZEJsZWVkVXNlVHJhbnNwYXJlbmN5TGF5
ZXIpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHJldmlzaW9uIDEw
NzcyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkod29ya2luZyBj
b3B5KQpAQCAtNDU5LDYgKzQ1OSw4IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgcGFpbnRNYXNr
SW1hZ2VzKGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IExheW91dFJlY3QmKTsKIAorICAgIEJhY2tn
cm91bmRCbGVlZEF2b2lkYW5jZSBkZXRlcm1pbmVCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2UoR3Jh
cGhpY3NDb250ZXh0KikgY29uc3Q7CisKICNpZiBQTEFURk9STShNQUMpCiAgICAgdm9pZCBwYWlu
dEN1c3RvbUhpZ2hsaWdodChjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IEF0b21pY1N0cmluZyYg
dHlwZSwgYm9vbCBiZWhpbmRUZXh0KTsKICNlbmRpZgpAQCAtNTAzLDggKzUwNSw2IEBAIHByaXZh
dGU6CiAgICAgLy8gVGhlc2UgaW5jbHVkZSB0YWJsZXMsIHBvc2l0aW9uZWQgb2JqZWN0cywgZmxv
YXRzIGFuZCBmbGV4aWJsZSBib3hlcy4KICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVByZWZlcnJl
ZExvZ2ljYWxXaWR0aHMoKSB7IHNldFByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eShmYWxzZSk7
IH0KIAotICAgIEJhY2tncm91bmRCbGVlZEF2b2lkYW5jZSBkZXRlcm1pbmVCYWNrZ3JvdW5kQmxl
ZWRBdm9pZGFuY2UoR3JhcGhpY3NDb250ZXh0KikgY29uc3Q7Ci0KIHByaXZhdGU6CiAgICAgLy8g
VGhlIHdpZHRoL2hlaWdodCBvZiB0aGUgY29udGVudHMgKyBib3JkZXJzICsgcGFkZGluZy4gIFRo
ZSB4L3kgbG9jYXRpb24gaXMgcmVsYXRpdmUgdG8gb3VyIGNvbnRhaW5lciAod2hpY2ggaXMgbm90
IGFsd2F5cyBvdXIgcGFyZW50KS4KICAgICBMYXlvdXRSZWN0IG1fZnJhbWVSZWN0OwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3Bw
CShyZXZpc2lvbiAxMDc3MjApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
TW9kZWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTksNiArNjE5LDE5IEBAIHN0YXRp
YyBMYXlvdXRSZWN0IGJhY2tncm91bmRSZWN0QWRqdXN0ZWQKICAgICByZXR1cm4gYWRqdXN0ZWRS
ZWN0OwogfQogCitzdGF0aWMgdm9pZCBhcHBseUJveFNoYWRvd0ZvckJhY2tncm91bmQoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBSZW5kZXJTdHlsZSogc3R5bGUpCit7CisgICAgY29uc3QgU2hh
ZG93RGF0YSogYm94U2hhZG93ID0gc3R5bGUtPmJveFNoYWRvdygpOworICAgIHdoaWxlIChib3hT
aGFkb3ctPnN0eWxlKCkgIT0gTm9ybWFsKQorICAgICAgICBib3hTaGFkb3cgPSBib3hTaGFkb3ct
Pm5leHQoKTsKKworICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQoYm94U2hhZG93LT54KCksIGJv
eFNoYWRvdy0+eSgpKTsKKyAgICBpZiAoIWJveFNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSkK
KyAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KHNoYWRvd09mZnNldCwgYm94U2hhZG93LT5ibHVy
KCksIGJveFNoYWRvdy0+Y29sb3IoKSwgc3R5bGUtPmNvbG9yU3BhY2UoKSk7CisgICAgZWxzZQor
ICAgICAgICBjb250ZXh0LT5zZXRMZWdhY3lTaGFkb3coc2hhZG93T2Zmc2V0LCBib3hTaGFkb3ct
PmJsdXIoKSwgYm94U2hhZG93LT5jb2xvcigpLCBzdHlsZS0+Y29sb3JTcGFjZSgpKTsKK30KKwog
dm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZXJFeHRlbmRlZChjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgQ29sb3ImIGNvbG9yLCBjb25zdCBGaWxsTGF5ZXIq
IGJnTGF5ZXIsIGNvbnN0IExheW91dFJlY3QmIHJlY3QsCiAgICAgQmFja2dyb3VuZEJsZWVkQXZv
aWRhbmNlIGJsZWVkQXZvaWRhbmNlLCBJbmxpbmVGbG93Qm94KiBib3gsIGNvbnN0IExheW91dFNp
emUmIGJveFNpemUsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBSZW5kZXJPYmplY3QqIGJhY2tncm91
bmRPYmplY3QpCiB7CkBAIC02NjksNiArNjgyLDExIEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmpl
Y3Q6OnBhaW50RmlsbExheWUKICAgICAgICAgaWYgKCFjb2xvclZpc2libGUpCiAgICAgICAgICAg
ICByZXR1cm47CiAKKyAgICAgICAgYm9vbCBib3hTaGFkb3dTaG91bGRCZUFwcGxpZWRUb0JhY2tn
cm91bmQgPSB0aGlzLT5ib3hTaGFkb3dTaG91bGRCZUFwcGxpZWRUb0JhY2tncm91bmQoYmxlZWRB
dm9pZGFuY2UpOworICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHNoYWRvd1N0YXRl
U2F2ZXIoKmNvbnRleHQsIGJveFNoYWRvd1Nob3VsZEJlQXBwbGllZFRvQmFja2dyb3VuZCk7Cisg
ICAgICAgIGlmIChib3hTaGFkb3dTaG91bGRCZUFwcGxpZWRUb0JhY2tncm91bmQpCisgICAgICAg
ICAgICBhcHBseUJveFNoYWRvd0ZvckJhY2tncm91bmQoY29udGV4dCwgc3R5bGUoKSk7CisKICAg
ICAgICAgaWYgKGhhc1JvdW5kZWRCb3JkZXIgJiYgYmxlZWRBdm9pZGFuY2UgIT0gQmFja2dyb3Vu
ZEJsZWVkVXNlVHJhbnNwYXJlbmN5TGF5ZXIpIHsKICAgICAgICAgICAgIFJvdW5kZWRSZWN0IGJv
cmRlciA9IGdldEJhY2tncm91bmRSb3VuZGVkUmVjdChiYWNrZ3JvdW5kUmVjdEFkanVzdGVkRm9y
QmxlZWRBdm9pZGFuY2UoY29udGV4dCwgcmVjdCwgYmxlZWRBdm9pZGFuY2UpLCBib3gsIGJveFNp
emUud2lkdGgoKSwgYm94U2l6ZS5oZWlnaHQoKSwgaW5jbHVkZUxlZnRFZGdlLCBpbmNsdWRlUmln
aHRFZGdlKTsKICAgICAgICAgICAgIGNvbnRleHQtPmZpbGxSb3VuZGVkUmVjdChib3JkZXIsIGJn
Q29sb3IsIHN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CkBAIC03NzgsNyArNzk2LDEwIEBAIHZvaWQg
UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWUKICAgICAvLyBQYWludCB0aGUgY29s
b3IgZmlyc3QgdW5kZXJuZWF0aCBhbGwgaW1hZ2VzLgogICAgIGlmICghYmdMYXllci0+bmV4dCgp
KSB7CiAgICAgICAgIEludFJlY3QgYmFja2dyb3VuZFJlY3QocGl4ZWxTbmFwcGVkSW50UmVjdChz
Y3JvbGxlZFBhaW50UmVjdCkpOwotICAgICAgICBiYWNrZ3JvdW5kUmVjdC5pbnRlcnNlY3QocGFp
bnRJbmZvLnJlY3QpOworICAgICAgICBib29sIGJveFNoYWRvd1Nob3VsZEJlQXBwbGllZFRvQmFj
a2dyb3VuZCA9IHRoaXMtPmJveFNoYWRvd1Nob3VsZEJlQXBwbGllZFRvQmFja2dyb3VuZChibGVl
ZEF2b2lkYW5jZSk7CisgICAgICAgIGlmICghYm94U2hhZG93U2hvdWxkQmVBcHBsaWVkVG9CYWNr
Z3JvdW5kKQorICAgICAgICAgICAgYmFja2dyb3VuZFJlY3QuaW50ZXJzZWN0KHBhaW50SW5mby5y
ZWN0KTsKKwogICAgICAgICAvLyBJZiB3ZSBoYXZlIGFuIGFscGhhIGFuZCB3ZSBhcmUgcGFpbnRp
bmcgdGhlIHJvb3QgZWxlbWVudCwgZ28gYWhlYWQgYW5kIGJsZW5kIHdpdGggdGhlIGJhc2UgYmFj
a2dyb3VuZCBjb2xvci4KICAgICAgICAgQ29sb3IgYmFzZUNvbG9yOwogICAgICAgICBib29sIHNo
b3VsZENsZWFyQmFja2dyb3VuZCA9IGZhbHNlOwpAQCAtNzg4LDYgKzgwOSwxMCBAQCB2b2lkIFJl
bmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZpbGxMYXllCiAgICAgICAgICAgICAgICAgc2hvdWxk
Q2xlYXJCYWNrZ3JvdW5kID0gdHJ1ZTsKICAgICAgICAgfQogCisgICAgICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIgc2hhZG93U3RhdGVTYXZlcigqY29udGV4dCwgYm94U2hhZG93U2hvdWxk
QmVBcHBsaWVkVG9CYWNrZ3JvdW5kKTsKKyAgICAgICAgaWYgKGJveFNoYWRvd1Nob3VsZEJlQXBw
bGllZFRvQmFja2dyb3VuZCkKKyAgICAgICAgICAgIGFwcGx5Qm94U2hhZG93Rm9yQmFja2dyb3Vu
ZChjb250ZXh0LCBzdHlsZSgpKTsKKwogICAgICAgICBpZiAoYmFzZUNvbG9yLmFscGhhKCkpIHsK
ICAgICAgICAgICAgIGlmIChiZ0NvbG9yLmFscGhhKCkpCiAgICAgICAgICAgICAgICAgYmFzZUNv
bG9yID0gYmFzZUNvbG9yLmJsZW5kKGJnQ29sb3IpOwpAQCAtMjU1Niw2ICsyNTgxLDQ0IEBAIGJv
b2wgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmJvcmRlck9ic2N1cmUKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAorYm9vbCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Ym94U2hhZG93U2hvdWxkQmVBcHBsaWVk
VG9CYWNrZ3JvdW5kKEJhY2tncm91bmRCbGVlZEF2b2lkYW5jZSBibGVlZEF2b2lkYW5jZSkgY29u
c3QKK3sKKyAgICBpZiAoYmxlZWRBdm9pZGFuY2UgIT0gQmFja2dyb3VuZEJsZWVkTm9uZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHN0eWxlKCktPmhhc0FwcGVhcmFuY2UoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgU2hhZG93RGF0YSogYm94U2hhZG93
ID0gc3R5bGUoKS0+Ym94U2hhZG93KCk7CisgICAgYm9vbCBoYXNPbmVOb3JtYWxCb3hTaGFkb3cg
PSBmYWxzZTsKKyAgICBmb3IgKGNvbnN0IFNoYWRvd0RhdGEqIGN1cnJlbnRTaGFkb3cgPSBib3hT
aGFkb3c7IGN1cnJlbnRTaGFkb3c7IGN1cnJlbnRTaGFkb3cgPSBjdXJyZW50U2hhZG93LT5uZXh0
KCkpIHsKKyAgICAgICAgaWYgKGN1cnJlbnRTaGFkb3ctPnN0eWxlKCkgIT0gTm9ybWFsKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChoYXNPbmVOb3JtYWxCb3hTaGFkb3cpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGhhc09uZU5vcm1hbEJveFNoYWRvdyA9
IHRydWU7CisgICAgfQorCisgICAgaWYgKCFoYXNPbmVOb3JtYWxCb3hTaGFkb3cpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIENvbG9yIGJhY2tncm91bmRDb2xvciA9IHN0eWxlKCktPnZp
c2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7CisgICAgaWYg
KCFiYWNrZ3JvdW5kQ29sb3IuaXNWYWxpZCgpIHx8IGJhY2tncm91bmRDb2xvci5hbHBoYSgpIDwg
MjU1KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBGaWxsTGF5ZXIqIGxhc3RC
YWNrZ3JvdW5kTGF5ZXIgPSBzdHlsZSgpLT5iYWNrZ3JvdW5kTGF5ZXJzKCk7CisgICAgZm9yIChj
b25zdCBGaWxsTGF5ZXIqIG5leHQgPSBsYXN0QmFja2dyb3VuZExheWVyLT5uZXh0KCk7IG5leHQ7
ICkKKyAgICAgICAgbGFzdEJhY2tncm91bmRMYXllciA9IG5leHQ7CisKKyAgICBpZiAobGFzdEJh
Y2tncm91bmRMYXllci0+Y2xpcCgpICE9IEJvcmRlckZpbGxCb3gpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXN0QmFja2dyb3VuZExheWVy
LT5hdHRhY2htZW50KCkgPT0gTG9jYWxCYWNrZ3JvdW5kQXR0YWNobWVudCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKIHN0YXRpYyBpbmxpbmUgTGF5b3V0
UmVjdCBhcmVhQ2FzdGluZ1NoYWRvd0luSG9sZShjb25zdCBMYXlvdXRSZWN0JiBob2xlUmVjdCwg
aW50IHNoYWRvd0JsdXIsIGludCBzaGFkb3dTcHJlYWQsIGNvbnN0IExheW91dFNpemUmIHNoYWRv
d09mZnNldCkKIHsKICAgICBMYXlvdXRSZWN0IGJvdW5kcyhob2xlUmVjdCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAkocmV2aXNp
b24gMTA3NzIwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw2ICsxMjcsOCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBwYWludEJveFNoYWRvdyhjb25zdCBQYWludEluZm8mLCBjb25zdCBMYXlvdXRSZWN0JiwgY29u
c3QgUmVuZGVyU3R5bGUqLCBTaGFkb3dTdHlsZSwgYm9vbCBpbmNsdWRlTG9naWNhbExlZnRFZGdl
ID0gdHJ1ZSwgYm9vbCBpbmNsdWRlTG9naWNhbFJpZ2h0RWRnZSA9IHRydWUpOwogICAgIHZvaWQg
cGFpbnRGaWxsTGF5ZXJFeHRlbmRlZChjb25zdCBQYWludEluZm8mLCBjb25zdCBDb2xvciYsIGNv
bnN0IEZpbGxMYXllciosIGNvbnN0IExheW91dFJlY3QmLCBCYWNrZ3JvdW5kQmxlZWRBdm9pZGFu
Y2UsIElubGluZUZsb3dCb3gqID0gMCwgY29uc3QgTGF5b3V0U2l6ZSYgPSBMYXlvdXRTaXplKCks
IENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3ZlciwgUmVuZGVyT2JqZWN0KiBi
YWNrZ3JvdW5kT2JqZWN0ID0gMCk7CiAgICAgCisgICAgdmlydHVhbCBib29sIGJveFNoYWRvd1No
b3VsZEJlQXBwbGllZFRvQmFja2dyb3VuZChCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2UpIGNvbnN0
OworCiAgICAgLy8gT3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzIHRvIGRldGVybWluZSBsaW5lIGhl
aWdodCBhbmQgYmFzZWxpbmUgcG9zaXRpb24uCiAgICAgdmlydHVhbCBMYXlvdXRVbml0IGxpbmVI
ZWlnaHQoYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2Rl
ID0gUG9zaXRpb25PbkNvbnRhaW5pbmdMaW5lKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBMYXlv
dXRVbml0IGJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lLCBib29sIGZpcnN0TGluZSwgTGlu
ZURpcmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUgPSBQb3NpdGlvbk9uQ29udGFpbmluZ0xp
bmUpIGNvbnN0ID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWVs
ZHNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZp
ZWxkc2V0LmNwcAkocmV2aXNpb24gMTA3NzIwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZpZWxkc2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDggKzE0MCw5IEBAIHZv
aWQgUmVuZGVyRmllbGRzZXQ6OnBhaW50Qm94RGVjb3JhdGlvbnMKICAgICAgICAgcGFpbnRSZWN0
LnNldFdpZHRoKHBhaW50UmVjdC53aWR0aCgpIC0geE9mZik7CiAgICAgICAgIHBhaW50UmVjdC5z
ZXRYKHBhaW50UmVjdC54KCkgKyB4T2ZmKTsKICAgICB9Ci0gICAgCi0gICAgcGFpbnRCb3hTaGFk
b3cocGFpbnRJbmZvLCBwYWludFJlY3QsIHN0eWxlKCksIE5vcm1hbCk7CisKKyAgICBpZiAoIWJv
eFNoYWRvd1Nob3VsZEJlQXBwbGllZFRvQmFja2dyb3VuZChkZXRlcm1pbmVCYWNrZ3JvdW5kQmxl
ZWRBdm9pZGFuY2UocGFpbnRJbmZvLmNvbnRleHQpKSkKKyAgICAgICAgcGFpbnRCb3hTaGFkb3co
cGFpbnRJbmZvLCBwYWludFJlY3QsIHN0eWxlKCksIE5vcm1hbCk7CiAgICAgcGFpbnRGaWxsTGF5
ZXJzKHBhaW50SW5mbywgc3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5
QmFja2dyb3VuZENvbG9yKSwgc3R5bGUoKS0+YmFja2dyb3VuZExheWVycygpLCBwYWludFJlY3Qp
OwogICAgIHBhaW50Qm94U2hhZG93KHBhaW50SW5mbywgcGFpbnRSZWN0LCBzdHlsZSgpLCBJbnNl
dCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkocmV2
aXNpb24gMTA3NzIwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjE3LDcgKzYxNyw4IEBAIHZvaWQgUmVuZGVyVGFibGU6OnBh
aW50Qm94RGVjb3JhdGlvbnMoUGEKICAgICBMYXlvdXRSZWN0IHJlY3QocGFpbnRPZmZzZXQsIHNp
emUoKSk7CiAgICAgc3VidHJhY3RDYXB0aW9uUmVjdChyZWN0KTsKIAotICAgIHBhaW50Qm94U2hh
ZG93KHBhaW50SW5mbywgcmVjdCwgc3R5bGUoKSwgTm9ybWFsKTsKKyAgICBpZiAoIWJveFNoYWRv
d1Nob3VsZEJlQXBwbGllZFRvQmFja2dyb3VuZChkZXRlcm1pbmVCYWNrZ3JvdW5kQmxlZWRBdm9p
ZGFuY2UocGFpbnRJbmZvLmNvbnRleHQpKSkKKyAgICAgICAgcGFpbnRCb3hTaGFkb3cocGFpbnRJ
bmZvLCByZWN0LCBzdHlsZSgpLCBOb3JtYWwpOwogICAgIHBhaW50QmFja2dyb3VuZChwYWludElu
Zm8sIHJlY3QpOwogICAgIHBhaW50Qm94U2hhZG93KHBhaW50SW5mbywgcmVjdCwgc3R5bGUoKSwg
SW5zZXQpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVD
ZWxsLmNwcAkocmV2aXNpb24gMTA3NzIwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNjgsNiArMTA2OCwxMSBAQCB2
b2lkIFJlbmRlclRhYmxlQ2VsbDo6cGFpbnRNYXNrKFBhaW50SW5mCiAgICAgcGFpbnRNYXNrSW1h
Z2VzKHBhaW50SW5mbywgTGF5b3V0UmVjdChwYWludE9mZnNldCwgc2l6ZSgpKSk7CiB9CiAKK2Jv
b2wgUmVuZGVyVGFibGVDZWxsOjpib3hTaGFkb3dTaG91bGRCZUFwcGxpZWRUb0JhY2tncm91bmQo
QmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30K
Kwogdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnNjcm9sbGJhcnNDaGFuZ2VkKGJvb2wgaG9yaXpvbnRh
bFNjcm9sbGJhckNoYW5nZWQsIGJvb2wgdmVydGljYWxTY3JvbGxiYXJDaGFuZ2VkKQogewogICAg
IExheW91dFVuaXQgc2Nyb2xsYmFySGVpZ2h0ID0gc2Nyb2xsYmFyTG9naWNhbEhlaWdodCgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAkocmV2aXNp
b24gMTA3NzIwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTEsNiArMTUxLDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRCb3hEZWNvcmF0aW9ucyhQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYp
OwogICAgIHZpcnR1YWwgdm9pZCBwYWludE1hc2soUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9p
bnQmKTsKIAorICAgIHZpcnR1YWwgYm9vbCBib3hTaGFkb3dTaG91bGRCZUFwcGxpZWRUb0JhY2tn
cm91bmQoQmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlKSBjb25zdCBPVkVSUklERTsKKwogICAgIHZp
cnR1YWwgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRlck9iamVjdCosIGNvbnN0
IExheW91dFBvaW50JikgY29uc3Q7CiAgICAgdmlydHVhbCBMYXlvdXRSZWN0IGNsaXBwZWRPdmVy
Zmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVy
KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJv
eE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBMYXlvdXRSZWN0JiwgYm9vbCBmaXhlZCA9
IGZhbHNlKSBjb25zdDsK
</data>
<flag name="review"
          id="129283"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>