<?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>40366</bug_id>
          
          <creation_ts>2010-06-09 09:44:30 -0700</creation_ts>
          <short_desc>REGRESSION (r59263): Google Docs Drawing is broken, and probably other SVG-based sites</short_desc>
          <delta_ts>2010-06-23 10:52:39 -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>SVG</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></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>GoogleBug, InRadar, NeedsReduction</keywords>
          <priority>P1</priority>
          <bug_severity>Major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dimitri Glazkov (Google)">dglazkov</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>hyatt</cc>
    
    <cc>jamesr</cc>
    
    <cc>kliegs</cc>
    
    <cc>krit</cc>
    
    <cc>mitz</cc>
    
    <cc>mrowe</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>235833</commentid>
    <comment_count>0</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-06-09 09:44:30 -0700</bug_when>
    <thetext>Steps to repro:

* Create new Drawing in Google Docs
* Click on shapes
* Attempt to draw a shape

Expected result:

* should draw a shape

Actual result

* nothing draws.

Related Chromium bug: http://crbug.com/46156</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235961</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-06-09 13:14:46 -0700</bug_when>
    <thetext>&lt;rdar://problem/8076507&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235963</commentid>
    <comment_count>2</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-06-09 13:19:37 -0700</bug_when>
    <thetext>We&apos;re clearly underpainting, probably by eating a layout root completely instead of scheduling a relayout.  Resizing the window causes the selection UI to snap into place.

I&apos;ll see if I can reduce this a bit but it won&apos;t be easy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237032</commentid>
    <comment_count>3</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-06-11 14:21:06 -0700</bug_when>
    <thetext>Google Docs has pushed a workaround for this issue, but the bug is still unfixed.  The workaround is disgusting and I do not want to evangelize it if possible :(.  I can still reproduce this locally and will try to make a distributable reproduction ASAP.

Somehow we&apos;re getting into a state where a RenderSVG* object is marked as m_needsLayout, its parent RenderSVGRoot object is marked as m_posChildNeedsLayout, and yet the RenderSVGRoot&apos;s container does not have any layout bits set and the FrameView&apos;s m_layoutRoot and m_layoutTimer are both unset.  Either we are doing layout without actually traversing some dirty objects or we&apos;re resetting the m_layoutRoot without dirtying its containers properly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237238</commentid>
    <comment_count>4</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-06-11 23:02:21 -0700</bug_when>
    <thetext>Can someone provide a simple test case, that shows the problem?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241424</commentid>
    <comment_count>5</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-06-22 13:28:32 -0700</bug_when>
    <thetext>I still haven&apos;t been able to construct a repro page but have caught the page going awry in a debugger.

Here&apos;s the render tree when things go wrong:

RenderView
- RenderBlock (relayout boundary) 0x1145e5e68
-- RenderSVGRoot (relayout boundary) 0x119fc7968
--- RenderPath

and the stack:

(gdb) bt
#0  WebCore::RenderObject::markContainingBlocksForLayout (this=0x119fc7968, scheduleRelayout=false, newRoot=0x1145e5e68) at RenderObject.h:1036
#1  0x000000010176499f in WebCore::FrameView::scheduleRelayoutOfSubtree (this=0x11799f130, relayoutRoot=0x1145e5e68) at /usr/local/home/jamesr/WebKit/WebCore/page/FrameView.cpp:1330
#2  0x0000000101d1b513 in WebCore::RenderObject::scheduleRelayout (this=0x1145e5e68) at /usr/local/home/jamesr/WebKit/WebCore/rendering/RenderObject.cpp:2092
#3  0x00000001014dd795 in WebCore::RenderObject::markContainingBlocksForLayout (this=0x119fc7968, scheduleRelayout=true, newRoot=0x0) at RenderObject.h:1035
#4  0x00000001014dd83d in WebCore::RenderObject::setNeedsLayout (this=0x119fc7968, b=true, markParents=true) at RenderObject.h:941
#5  0x0000000101f0a1e8 in WebCore::SVGSVGElement::svgAttributeChanged (this=0x119f76b50, attrName=@0x119e13758) at /usr/local/home/jamesr/WebKit/WebCore/svg/SVGSVGElement.cpp:312
#6  0x0000000101e7fc30 in WebCore::SVGElement::attributeChanged (this=0x119f76b50, attr=0x119e13750, preserveDecls=false) at /usr/local/home/jamesr/WebKit/WebCore/svg/SVGElement.cpp:304
#7  0x00000001016e6f18 in WebCore::Element::setAttribute (this=0x119f76b50, name=@0x103180b60, value=@0x7fff5fbfad50) at /usr/local/home/jamesr/WebKit/WebCore/dom/Element.cpp:598
#8  0x00000001016e718f in WebCore::Element::setAttribute (this=0x119f76b50, name=@0x103180b60, value=@0x7fff5fbfad50) at /usr/local/home/jamesr/WebKit/WebCore/dom/Element.cpp:180
#9  0x0000000101e52074 in WebCore::StyledElement::updateStyleAttribute (this=0x119f76b50) at /usr/local/home/jamesr/WebKit/WebCore/dom/StyledElement.cpp:110
#10 0x000000010140c527 in WebCore::Element::attributes (this=0x119f76b50, readonly=true) at Element.h:372
#11 0x00000001016e5e78 in WebCore::Element::hasAttributeNS (this=0x119f76b50, namespaceURI=@0x108d8a008, localName=@0x108d8a000) at /usr/local/home/jamesr/WebKit/WebCore/dom/Element.cpp:1284
#12 0x00000001016e5f3d in WebCore::Element::hasAttribute (this=0x119f76b50, name=@0x1031816a8) at /usr/local/home/jamesr/WebKit/WebCore/dom/Element.cpp:212
#13 0x0000000101ec20f3 in WebCore::SVGLength::PercentageOfViewport (value=1, context=0x119ef3ac0, mode=WebCore::LengthModeHeight) at /usr/local/home/jamesr/WebKit/WebCore/svg/SVGLength.cpp:294
#14 0x0000000101ec1d6f in WebCore::SVGLength::value (this=0x7fff5fbfb000, context=0x119ef3ac0) at /usr/local/home/jamesr/WebKit/WebCore/svg/SVGLength.cpp:136
#15 0x0000000101eeb6e7 in WebCore::SVGRectElement::toPathData (this=0x119ef3ac0) at /usr/local/home/jamesr/WebKit/WebCore/svg/SVGRectElement.cpp:148
#16 0x0000000101d26aca in WebCore::RenderPath::layout (this=0x119fc6f78) at /usr/local/home/jamesr/WebKit/WebCore/rendering/RenderPath.cpp:112
#17 0x0000000101ca0aab in WebCore::RenderObject::layoutIfNeeded (this=0x119fc6f78) at RenderObject.h:544
#18 0x0000000101ef2788 in WebCore::SVGRenderBase::layoutChildren (start=0x119fc7968, selfNeedsLayout=false) at /usr/local/home/jamesr/WebKit/WebCore/rendering/SVGRenderSupport.cpp:256
#19 0x0000000101d58953 in WebCore::RenderSVGRoot::layout (this=0x119fc7968) at /usr/local/home/jamesr/WebKit/WebCore/rendering/RenderSVGRoot.cpp:121
#20 0x00000001017666a8 in WebCore::FrameView::layout (this=0x11799f130, allowSubtree=true) at /usr/local/home/jamesr/WebKit/WebCore/page/FrameView.cpp:764
#21 0x00000001015cc409 in WebCore::Document::updateLayout (this=0x1180f9400) at /usr/local/home/jamesr/WebKit/WebCore/dom/Document.cpp:1454
#22 0x00000001015ce5fd in WebCore::Document::updateLayoutIgnorePendingStylesheets (this=0x1180f9400) at /usr/local/home/jamesr/WebKit/WebCore/dom/Document.cpp:1485
#23 0x00000001014b80bc in WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue (this=0x11b214870, propertyID=1002, updateLayout=WebCore::UpdateLayout) at /usr/local/home/jamesr/WebKit/WebCore/css/CSSComputedStyleDeclaration.cpp:669
#24 0x00000001014c0375 in WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue (this=0x11b214870, propertyID=1002) at /usr/local/home/jamesr/WebKit/WebCore/css/CSSComputedStyleDeclaration.cpp:588
#25 0x00000001015307df in WebCore::CSSStyleDeclaration::getPropertyCSSValue (this=0x11b214870, propertyName=@0x7fff5fbfcd80) at /usr/local/home/jamesr/WebKit/WebCore/css/CSSStyleDeclaration.cpp:45
#26 0x000000010193b455 in WebCore::JSCSSStyleDeclaration::nameGetter (exec=0x112a110f0, slotBase={m_ptr = 0x11a1b29c0}, propertyName=@0x7fff5fbfcf00) at /usr/local/home/jamesr/WebKit/WebCore/bindings/js/JSCSSStyleDeclarationCustom.cpp:156
#27 0x000000010075bc5c in JSC::PropertySlot::getValue (this=0x7fff5fbfce30, exec=0x112a110f0, propertyName=@0x7fff5fbfcf00) at PropertySlot.h:78

A JS query for style.direction forces a subtree layout rooted at the FrameView&apos;s m_layoutRoot, which happens to be the RenderSVGRoot.  This manages to mark its containing RenderBlock as m_posChildNeedsLayout and attempts to schedule a new relayout rooted at this renderer.  This changes the m_layoutRoot from the RenderSVGRoot to the RenderBlock, but since layout is already underway this doesn&apos;t set the layout timer.  Instead layout proceeds normally (but still rooted at the RenderSVGRoot).  The end of the layout algorithm clears out the FrameView&apos;s m_layoutRoot.  This leaves the RenderBlock with m_posChildNeedsLayout set but with no layout actually scheduled to occur.  When elements beneath this RenderBlock are subsequently marked as needing layout, markContainingBlocksForLayout() notices that m_posChildNeedsLayout is already set and returns without scheduling another layout pass.

I&apos;m not entirely sure whether the re-rooting logic is at fault here or of it&apos;s improper to mark elements outside of a subtree as needing layout during a subtree layout.  The RenderBlock is marked as m_posChildNeedsLayout through frames 5-13.  The RenderPath queries for the viewPort attribute on the SVGSVGElement which triggers an update of the style attribute that in turn calls attributeChanged which is overridden by SVGElement to mark the element&apos;s renderer (the RenderSVGRoot) to get marked as needing layout.  This pathway seems a bit odd.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241436</commentid>
    <comment_count>6</comment_count>
    <who name="">mitz</who>
    <bug_when>2010-06-22 13:47:34 -0700</bug_when>
    <thetext>Thanks for carrying on the investigation!

(In reply to comment #5)
&gt; (gdb) bt
&gt; #8  0x00000001016e718f in WebCore::Element::setAttribute (this=0x119f76b50, name=@0x103180b60, value=@0x7fff5fbfad50) at /usr/local/home/jamesr/WebKit/WebCore/dom/Element.cpp:180
[…]
&gt; #12 0x00000001016e5f3d in WebCore::Element::hasAttribute (this=0x119f76b50, name=@0x1031816a8) at /usr/local/home/jamesr/WebKit/WebCore/dom/Element.cpp:212
&gt; #13 0x0000000101ec20f3 in WebCore::SVGLength::PercentageOfViewport (value=1, context=0x119ef3ac0, mode=WebCore::LengthModeHeight) at /usr/local/home/jamesr/WebKit/WebCore/svg/SVGLength.cpp:294
&gt; #14 0x0000000101ec1d6f in WebCore::SVGLength::value (this=0x7fff5fbfb000, context=0x119ef3ac0) at /usr/local/home/jamesr/WebKit/WebCore/svg/SVGLength.cpp:136
&gt; #15 0x0000000101eeb6e7 in WebCore::SVGRectElement::toPathData (this=0x119ef3ac0) at /usr/local/home/jamesr/WebKit/WebCore/svg/SVGRectElement.cpp:148
&gt; #16 0x0000000101d26aca in WebCore::RenderPath::layout (this=0x119fc6f78) at /usr/local/home/jamesr/WebKit/WebCore/rendering/RenderPath.cpp:112
[…]
&gt; #20 0x00000001017666a8 in WebCore::FrameView::layout (this=0x11799f130, allowSubtree=true) at /usr/local/home/jamesr/WebKit/WebCore/page/FrameView.cpp:764

That Element::setAttribute() ends up being invoked beneath layout is insane. I don’t know if the problem is that hasAttibute() can call setAttribute() or, more likely, that PercentageOfViewport() calls a function (hasAttribute()) that has a known side effect of setting an attribute. But this is just asking for trouble. I think the path to resolving this bug is preventing DOM mutation during layout (other than shadow DOM, of course).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241448</commentid>
    <comment_count>7</comment_count>
    <who name="Jonathan Kliegman">kliegs</who>
    <bug_when>2010-06-22 14:02:15 -0700</bug_when>
    <thetext>I&apos;ve been trying to get a simple test case for this and haven&apos;t been able to simplify it enough.

I have seen what you are showing though from my own testing.  Mainly m_layoutRoot being reset while in the middle of a layout.  

One thing I&apos;ve found is that adding showNode calls into the rendering process for debugging actually fixes the problem.  It looks like the side effect of it you mention (where it sets the attributes) changes the order enough that the node doesn&apos;t get skipped.

I&apos;m wondering if just setting a flag to do a full layout if the DOM is changed during a layout might work here?  Its not the most efficient/elegant solution, but it *should* at least give us correctness in this case.  If the case is rare enough that its not an issue then the performance hit won&apos;t be too bad.  If this case is common enough to hurt us I expect we&apos;d have seen more reports.  Although we do need to be careful we don&apos;t accidentally loop (not sure if that&apos;s possible here).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241450</commentid>
    <comment_count>8</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-06-22 14:04:50 -0700</bug_when>
    <thetext>The bug is that SVG should not be marking things as needing layout when the style attribute changes.  The style system already handled marking things appropriately for layout or not based off style diffing, so you never have to do anything when a style attribute changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241452</commentid>
    <comment_count>9</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-06-22 14:06:35 -0700</bug_when>
    <thetext>Querying any attribute calls Element::attributes() which will call setAttribute() for the styleAttr if it&apos;s out of date.  One fix suggested in IRC is to avoid calling setNeedsLayout() if the changed attribute is styleAttr, since changing the styles on an element should always mark the element as needing layout anyway.  I&apos;m going to try that locally and see what happens on the rest of the tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241463</commentid>
    <comment_count>10</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-06-22 14:38:11 -0700</bug_when>
    <thetext>As it turns out this is sufficient to fix the issue on the older, affected version of google docs:

diff --git a/WebCore/svg/SVGStyledElement.cpp b/WebCore/svg/SVGStyledElement.cpp
index 8ae463d..10cc793 100644
--- a/WebCore/svg/SVGStyledElement.cpp
+++ b/WebCore/svg/SVGStyledElement.cpp
@@ -228,7 +228,7 @@ void SVGStyledElement::parseMappedAttribute(Attribute* attr)
 
 bool SVGStyledElement::isKnownAttribute(const QualifiedName&amp; attrName)
 {
-    return isIdAttributeName(attrName) || attrName == HTMLNames::styleAttr; 
+    return isIdAttributeName(attrName);
 }
 
 void SVGStyledElement::svgAttributeChanged(const QualifiedName&amp; attrName)


I&apos;ll work with kliegs on making a regression test and put a patch up for review ASAP.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241600</commentid>
    <comment_count>11</comment_count>
      <attachid>59460</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-06-22 19:02:32 -0700</bug_when>
    <thetext>Created attachment 59460
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241601</commentid>
    <comment_count>12</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-06-22 19:05:59 -0700</bug_when>
    <thetext>Patch + reduction attached.  The test case is really complicated, but you need to go through many intermediate states in order to end up with a hosed render tree.  I&apos;d welcome any simplifications but this is as small as I could get it.  From poking at this in GDB, I&apos;m pretty confident that this is hitting the same codepath that Google docs was.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241614</commentid>
    <comment_count>13</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-06-22 19:46:43 -0700</bug_when>
    <thetext>Thanks for the prompt review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241715</commentid>
    <comment_count>14</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-06-23 00:20:17 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; Thanks for the prompt review!

Good fix! Thanks for looking into that!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241898</commentid>
    <comment_count>15</comment_count>
      <attachid>59460</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-06-23 09:56:28 -0700</bug_when>
    <thetext>Comment on attachment 59460
Patch

Clearing flags on attachment: 59460

Committed r61693: &lt;http://trac.webkit.org/changeset/61693&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241899</commentid>
    <comment_count>16</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-06-23 09:56:33 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241913</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-23 10:16:28 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/61693 might have broken Qt Linux Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241931</commentid>
    <comment_count>18</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-06-23 10:51:26 -0700</bug_when>
    <thetext>Committed r61696: &lt;http://trac.webkit.org/changeset/61696&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241933</commentid>
    <comment_count>19</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-06-23 10:52:39 -0700</bug_when>
    <thetext>Had to add a Qt specific result since they format SVG rectangles differently when dumping the render tree.  The test was passing on Qt.  Filed https://bugs.webkit.org/show_bug.cgi?id=41079 about the difference.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59460</attachid>
            <date>2010-06-22 19:02:32 -0700</date>
            <delta_ts>2010-06-23 09:56:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40366-20100622190230.patch</filename>
            <type>text/plain</type>
            <size>10144</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBhZTU2MjJhOTE4NGVhNTNmY2E0ZDhhMTIwZWY4Y2IwYmU1NDUwZjkxLi43ZDJkYjNk
N2I1MTQzMjM1MTIzNDU0N2YwN2YzMDc1MDQ2NzQ0MTNiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAK
KzIwMTAtMDYtMjIgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBEbyBub3Qgc2V0IG5l
ZWRzTGF5b3V0IHdoZW4gdGhlIHN0eWxlIGF0dHJpYnV0ZSBjaGFuZ2VzIG9uIGFuIFNWRyBlbGVt
ZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDM2
NgorCisgICAgICAgIFRlc3RzIHRoYXQgc2V0dGluZyB0aGUgc3R5bGUgYXR0cmlidXRlIG9uIGFu
IFNWRyBlbGVtZW50IGRvZXMgbm90IGNhdXNlCisgICAgICAgIHRoZSByZW5kZXIgdHJlZSdzIGxh
eW91dCBmbGFncyB0byBnbyBoYXl3aXJlLiAgVGhlIGRldGFpbHMgYXJlIGludm9sdmVkLAorICAg
ICAgICBwbGVhc2Ugc2VlIHRoZSBidWcgYW5kIHRlc3QgY2FzZSBmb3IgZGV0YWlscy4KKworICAg
ICAgICAqIGZhc3QvcmVwYWludC9zdmctbGF5b3V0LXJvb3Qtc3R5bGUtYXR0ci11cGRhdGUtZXhw
ZWN0ZWQuY2hlY2tzdW06IEFkZGVkLgorICAgICAgICAqIGZhc3QvcmVwYWludC9zdmctbGF5b3V0
LXJvb3Qtc3R5bGUtYXR0ci11cGRhdGUtZXhwZWN0ZWQucG5nOiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L3JlcGFpbnQvc3ZnLWxheW91dC1yb290LXN0eWxlLWF0dHItdXBkYXRlLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogZmFzdC9yZXBhaW50L3N2Zy1sYXlvdXQtcm9vdC1zdHlsZS1h
dHRyLXVwZGF0ZS5odG1sOiBBZGRlZC4KKwogMjAxMC0wNi0yMSAgUm9iZXJ0IEhvZ2FuICA8cm9i
ZXJ0QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJp
c3RpYW5zZW4uCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3JlcGFpbnQvc3ZnLWxheW91
dC1yb290LXN0eWxlLWF0dHItdXBkYXRlLWV4cGVjdGVkLmNoZWNrc3VtIGIvTGF5b3V0VGVzdHMv
ZmFzdC9yZXBhaW50L3N2Zy1sYXlvdXQtcm9vdC1zdHlsZS1hdHRyLXVwZGF0ZS1leHBlY3RlZC5j
aGVja3N1bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5lNWUzOGJjZmVhNmRmNTAzNzU2MjhiMDg4ODVjNDlmMDAxYWI5
N2VlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9yZXBhaW50L3N2Zy1sYXlv
dXQtcm9vdC1zdHlsZS1hdHRyLXVwZGF0ZS1leHBlY3RlZC5jaGVja3N1bQpAQCAtMCwwICsxIEBA
CiswYWU1NzA3YWU5MzA0NDRhY2JkM2RmNzNjYTM5M2YyMQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvcmVwYWludC9zdmctbGF5b3V0LXJv
b3Qtc3R5bGUtYXR0ci11cGRhdGUtZXhwZWN0ZWQucG5nIGIvTGF5b3V0VGVzdHMvZmFzdC9yZXBh
aW50L3N2Zy1sYXlvdXQtcm9vdC1zdHlsZS1hdHRyLXVwZGF0ZS1leHBlY3RlZC5wbmcKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYTNkMzI1MTM5ODgyNGE2ZjgzYWUxMTdjZTdhYjExYjBhNWRkNmViMwpHSVQgYmluYXJ5
IHBhdGNoCmxpdGVyYWwgMTEyNjEKemNtZUkyYCMpNTk3e3x7WHZ0IWlJeFJsRkUkQXIpKFRHdjxQ
NDVrYmpWP3QzfGxPLSE2bHVJO2JiYUFPJlZrOHJ9CnpFYlIpQlVSMldWQiRoLU02am1YWllee2ly
T1Z+WnluJlZJQ18xZj1tPWxlYjlgOTl6MGQ3YmxwcDNuUHI2NDxPUQp6dlA7eUtLb0JJJHc3MjZ4
a1E0JHpARDRId24tUFZAOT5mTUNlenZ4M3JtWmMpNGhoPWw3dktYeTVyaC0yNUJ3R0IKek83b19I
ZyU0P0RQaypgY2gtNGJtcXYhYGxvOVVkcW1wYFJ6UlY1P1lgJjtJZEstMGZSYlNldHMybF5pQWNR
YW4rCnpPOD4qeElQJTdPeX43RGxoSGlJfXUyLSh8eTBQWkt0KDY2QCNQQGtgeVVqK0EyOEghTnZM
UCtUNk1XKTtZJnxEVwp6LVkrMjlYOCZ3Rl5pIVM7LUJ7YkxZbllgKXE4fCZManZER1h2UGBoa3ta
Nzx9QGJkNXlRQT8jcmB1SDUkeUc3S2cKelVwQV43eXU/RVJqPEBXfCl2R141PyY8RnNBNU9BaE1N
bTdOU2htKXgpYEojfW55a0FZPDgqeW52dnc8YiUtJm8kCno1ek5fPyo/dm1jekVhdlJhTmkjZClM
WUtVN2pIST02blcpbHZmaiVqLV56TiZWX29ndVJISXE1UkpGdTxeWXRHdQp6T3FfbWYtTTlDN3sp
XmdeUl9aRHlAMjByUnVjO01JbmJhdWxwKnBSfWF9RGtea1IzYUJkQ3E7QEFAKlJoZDg3QVUKemV5
RkZ0Yk5rbDdzajlmSWpfUn40bWlDM2F5RjhDZlF1T1VeZHA2NFc2RH5FQlRTLXgpaC1CXkFSMGVW
SHhpVTYtCnoobylVSHhJRHlxYnJJPzcpVGotSXdmNWdVPFlqay05JWNIfT5ZN1hiR3N9NWhUQ21X
emZ9QW8tcFZ1JEY+cFUxYQp6ZVEjRztoeD8/azxoLWJBeW13PldWOCN0S2pyUGB0eyFwamcoUD9k
QXNvU0BsRXNpYD1FZ0R2ezleUmdBXmRpPEkKenNXIUNpIWBRayNYLSg7UnI8TG1aLVFLPShKYnV7
SSRnQyRqQVpEWGdwVFByemlZSzhaMzgmMjUmIV92Jj9ZSTloCnphO1pBP2gxPDBBP3VvSGsteyN1
eWB9Qi0tIVYtcng2Vm1HcCMhQDtRaTxiNnI1N2QqaChvWDhOOTVeJGheX2FeUQp6UlpwensmVSRD
V3Q8NW8lMl5YUGlRO1RjRFdLNH58d3tnfUR4dUJWKHVLSFEhZnl1PDdZK1pQTEt5TzF2KXEhb24K
enF0c2xWZzIyJHJ1PTRNWmo9cmYzXiM3Uz5LMTx3VFMrdF5yVzBIK2o2ViRgdmolZlUpY2Rxczkq
PTdxKSsmOV4mCnpSV0JSOEk4RSM+VE1ubVB5V1BpZSNubFdxdWF7dlI4TGNZPSlwSVJ1Q1RvOWpA
SlhGMTlne0RjRTh8UjA3anJzIQp6RVZVPHNecUMtV14mQ1NTYVZpMFY1UXUzPGNhMCN0PyE0X3Bi
Zk1iUE5vVU14O3s8cy1OOFRsOy1mUTxsdWVeYF4Kemhxc0RIQnZUUVQ0LXNKTyFranV+OEY1RShA
emoqRUFzUzZ5Rz9PVyNnN34mKyZfM0hCczJDY1AjbihVJT5Udm0pCnpFPlpGU0UlfFk2c2FpQXFh
bFNaJVBZQnVrVDY0a1VDKVg1ZSYhV2QrVXpwVU9TYGpDP097UHhTVTwoTF9oNkVAZAp6LVBKcUM+
ekFvcGpkQkBjWWg8bXtqWn0jKGlmdStsczApOUxXP15sP2EpT2sxZm5LPFJCdHxrPjFyYURQQng5
dEUKeiNebzBxNTM9eT41Q35GUT83VCVteUF2dE5YJjBYfEtjeHZsNXJvU3BJdyVQd2o+VTw1TFYx
Z0Rxcy1AcyRWQUtyCnpPYHU3fSlFKUFNc0prZCs0WmIlJXBQLT1ZTGN8QGYjb342QEhsaWctN0x7
czwhckY8RkBqfVJ1aGhKa0JvO255Tgp6KzJgMkY8R0N1djB0ODZgTmRhI1Awek14QzQ5Kmx0MDFq
R0VlWHVHRU4tYGh4RFdHezxYaih4Pk9NcFJ9NTN+PWEKenFrdGQ7RGpBfnpVbGNtSEZnZEUrcG93
RCkweFNqMzZJNkJZQ2c4JGY5fjFyc09iY0IyUSF3RSNyRVBJVzB3cXZQCnowdX56VU4jbiE7Sk16
NDl3QVNEPjxYNmxsTz1sM05BJSs7KXBhPSktYTQzTmhsPkMtX2I9KXpETkokbz9XWkZ3Owp6TkRm
OSZUdCZpVDYzMWUhO29pVmJRTihHOERgdy02OGlMYWg2XnZ8PDk3MVVMLVl8bH5AI0R6aGotQGFm
Zi0rZSsKejRQaiNoTWM9OEJFXipBb2ExVGZkTkQ2cFVBT1pNJXNOaFQ/bEVGZEMyaHw1Ykt9bSoq
cGlkI2RwbXs/O01AeSFICnpIWGpvRkZTVTwoaiM0VEZrJCtxRzdYWE11cHFQUFRyWG0wJUVaYCkt
UilBcyNpVyNHZ0tydyZlaW4mKyRBISU4bQpVdCtrTWp7bmlVSDg3I1pZSHIme00wYWM4TEl7Kkx4
CgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3Jl
cGFpbnQvc3ZnLWxheW91dC1yb290LXN0eWxlLWF0dHItdXBkYXRlLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2Zhc3QvcmVwYWludC9zdmctbGF5b3V0LXJvb3Qtc3R5bGUtYXR0ci11cGRhdGUt
ZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU5MDAxYzkxNDcxN2I2MDgzMTlkNTVlOGE0MjE2MWRh
MTlkNWZjNzAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3JlcGFpbnQvc3Zn
LWxheW91dC1yb290LXN0eWxlLWF0dHItdXBkYXRlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE1
IEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyVmlldyBhdCAoMCwwKSBz
aXplIDgwMHg2MDAKK2xheWVyIGF0ICgwLDApIHNpemUgODAweDgKKyAgUmVuZGVyQmxvY2sge0hU
TUx9IGF0ICgwLDApIHNpemUgODAweDgKKyAgICBSZW5kZXJCb2R5IHtCT0RZfSBhdCAoOCw4KSBz
aXplIDc4NHgwCisgICAgICBSZW5kZXJCbG9jayB7RElWfSBhdCAoMCwwKSBzaXplIDUwMHgwCisg
ICAgICBSZW5kZXJCbG9jayB7RElWfSBhdCAoMCwwKSBzaXplIDc4NHgwCitsYXllciBhdCAoOCww
KSBzaXplIDUwMHg1MDAKKyAgUmVuZGVyQmxvY2sgKHBvc2l0aW9uZWQpIHtESVZ9IGF0ICg4LDAp
IHNpemUgNTAweDUwMAorbGF5ZXIgYXQgKDgsMCkgc2l6ZSA1MDB4NTAwCisgIFJlbmRlckJsb2Nr
IChwb3NpdGlvbmVkKSB7RElWfSBhdCAoMCwwKSBzaXplIDUwMHg1MDAKK2xheWVyIGF0ICg4LDAp
IHNpemUgNTAweDUwMAorICBSZW5kZXJTVkdSb290IHtzdmd9IGF0ICg4LDApIHNpemUgNTAweDUw
MAorICAgIFJlbmRlclBhdGgge3JlY3R9IGF0ICgyNTgsMTApIHNpemUgMjUweDI1MCBbZmlsbD17
W3R5cGU9U09MSURdIFtjb2xvcj0jRkYwMDAwXX1dIFtkYXRhPSJNMjUwLjAwLDEwLjAwIEw1MDAu
MDAsMTAuMDAgTDUwMC4wMCwyNjAuMDAgTDI1MC4wMCwyNjAuMDAgWiJdCisgICAgUmVuZGVyUGF0
aCB7cmVjdH0gYXQgKDI1OCwxMCkgc2l6ZSAyNTB4MjUwIFtmaWxsPXtbdHlwZT1TT0xJRF0gW2Nv
bG9yPSMwMDgwMDBdfV0gW2RhdGE9Ik0yNTAuMDAsMTAuMDAgTDUwMC4wMCwxMC4wMCBMNTAwLjAw
LDI2MC4wMCBMMjUwLjAwLDI2MC4wMCBaIl0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
cmVwYWludC9zdmctbGF5b3V0LXJvb3Qtc3R5bGUtYXR0ci11cGRhdGUuaHRtbCBiL0xheW91dFRl
c3RzL2Zhc3QvcmVwYWludC9zdmctbGF5b3V0LXJvb3Qtc3R5bGUtYXR0ci11cGRhdGUuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi45MGZiNzgxZWI2Njg1NGEwNjlmNjhhMWMwOWViZmFjMWIxOGE3MjQ1Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9yZXBhaW50L3N2Zy1sYXlvdXQtcm9vdC1z
dHlsZS1hdHRyLXVwZGF0ZS5odG1sCkBAIC0wLDAgKzEsNTggQEAKKzwhRE9DVFlQRSBodG1sPgor
PGJvZHkgc3R5bGU9Im92ZXJmbG93OmhpZGRlbiIgb25sb2FkPSJ0ZXN0KCkiPgorPGRpdiBpZD0i
b3RoZXIiPiA8L2Rpdj4KKzxkaXY+CisgIDxkaXYgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlOyB0
b3A6IDBweDsgb3ZlcmZsb3c6aGlkZGVuOyB3aWR0aDo1MDBweDsgaGVpZ2h0OjUwMHB4OyIgaWQ9
ImdyYW5kcGFyZW50Ij4KKyAgICA8ZGl2IHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOiAw
cHg7IG92ZXJmbG93OmhpZGRlbjsgd2lkdGg6NTAwcHg7IGhlaWdodDo1MDBweDsiIGlkPSJyb290
Ij4KKyAgICA8L2Rpdj4KKyAgPC9kaXY+Cis8L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZh
c2NyaXB0Ij4KK2Z1bmN0aW9uIHRlc3QoKSB7CisgICAgLy8gY3JlYXRlIHNvbWUgU1ZHCisgICAg
dmFyIHN2Z3Jvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3Jn
LzIwMDAvc3ZnIiwgInN2ZyIpOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb290Iiku
YXBwZW5kQ2hpbGQoc3Zncm9vdCk7CisgICAgLy8gYWRkIGEgcmVkIHJlY3RhbmdsZSB0aGF0IHdp
bGwgYmUgY292ZXJlZCB1cCBieSB0aGUgZ3JlZW4gcmVjdGFuZ2xlCisgICAgdmFyIHJlZFJlY3Qg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwg
InJlY3QiKTsKKyAgICByZWRSZWN0LnNldEF0dHJpYnV0ZSgiZmlsbCIsICJyZWQiKTsKKyAgICBy
ZWRSZWN0LnNldEF0dHJpYnV0ZSgieCIsICI1MCUiKTsKKyAgICByZWRSZWN0LnNldEF0dHJpYnV0
ZSgieSIsICIxMCIpOworICAgIHJlZFJlY3Quc2V0QXR0cmlidXRlKCJ3aWR0aCIsICI1MCUiKTsK
KyAgICByZWRSZWN0LnNldEF0dHJpYnV0ZSgiaGVpZ2h0IiwgIjUwJSIpOworICAgIHN2Z3Jvb3Qu
c3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOworICAgIHN2Z3Jvb3Quc3R5bGUudG9wPSIwcHgi
OworICAgIHN2Z3Jvb3QuYXBwZW5kQ2hpbGQocmVkUmVjdCk7CisgICAgLy8gYWRkIGEgZ3JlZW4g
cmVjdGFuZ2xlIHRvIHRoZSBsZWZ0IG9mIHRoZSByZWQgb25lCisgICAgdmFyIGdyZWVuUmVjdCA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCAi
cmVjdCIpOworICAgIGdyZWVuUmVjdC5zZXRBdHRyaWJ1dGUoImZpbGwiLCAiZ3JlZW4iKTsKKyAg
ICBncmVlblJlY3Quc2V0QXR0cmlidXRlKCJ4IiwgIjAlIik7CisgICAgZ3JlZW5SZWN0LnNldEF0
dHJpYnV0ZSgieSIsICIxMCIpOworICAgIGdyZWVuUmVjdC5zZXRBdHRyaWJ1dGUoIndpZHRoIiwg
IjUwJSIpOworICAgIHN2Z3Jvb3QuYXBwZW5kQ2hpbGQoZ3JlZW5SZWN0KTsKKyAgICBkb2N1bWVu
dC5ib2R5Lm9mZnNldExlZnQ7CisgICAgLy8gZGlydHkgYW4gU1ZHIGF0dHJpYnV0ZQorICAgIGdy
ZWVuUmVjdC5zZXRBdHRyaWJ1dGUoImhlaWdodCIsICI1MCUiKTsKKyAgICAvLyBtYWtlIHN1cmUg
dGhlIHN2ZyByb290J3MgLnN0eWxlIGF0dHJpYnV0ZSBpcyBvdXQgb2YgZGF0ZQorICAgIHN2Z3Jv
b3Quc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOworICAgIC8vIGZvcmNlIGxheW91dC4gdGhp
cyB3aWxsIGJlIHJvb3RlZCBhdCB0aGUgUmVuZGVyU1ZHUm9vdCBhbmQgd2lsbCBzZXQgbV9wb3ND
aGlsZE5lZWRzTGF5b3V0IG9uIGl0cworICAgIC8vIGNvbnRhaW5pbmcgUmVuZGVyQmxvY2sgKGNv
cnJlc3BvbmRpbmcgdG8gRElWI3Jvb3QpCisgICAgZG9jdW1lbnQuYm9keS5vZmZzZXRXaWR0aDsK
KyAgICAvLyBkaXJ0eSBhbiBTVkcgYXR0cmlidXRlLCB3aWxsIHNldCBGcmFtZVZpZXc6Om1fbGF5
b3V0Um9vdCB0byB0aGUgUmVuZGVyU1ZHUm9vdAorICAgIGdyZWVuUmVjdC5zZXRBdHRyaWJ1dGUo
IndpZHRoIiwgIjUwJSIpOworICAgIC8vIGRpcnR5IGEgbm9ybWFsIERPTSBhdHRyaWJ1dGUgaW4g
YSBzZXBhcmF0ZSBwYXJ0IG9mIHRoZSBET00uICB0aGlzIGlzIHdoZXJlIHRoaW5ncyBnbyBhd3J5
IHNpbmNlCisgICAgLy8gRnJhbWVWaWV3OjpzY2hlZHVsZVJlbGF5b3V0T2ZTdWJ0cmVlIHdpbGwg
Y2xlYXIgb3V0IGl0cyBtX2xheW91dFJvb3QgYW5kIGNhbGwKKyAgICAvLyBSZW5kZXJPYmplY3Q6
Om1hcmtDb250YWluaW5nQmxvY2tzRm9yTGF5b3V0KCkgb24gdGhlIFJlbmRlclNWR1Jvb3QuICBT
aW5jZSB0aGUgUmVuZGVyU1ZHUm9vdCdzCisgICAgLy8gY29udGFpbmVyIGFscmVhZHkgaGFzIG1f
cG9zQ2hpbGROZWVkc0xheW91dCBzZXQsIHRoZSBSZW5kZXJTVkdSb290J3MgY29udGFpbmVyJ3Mg
Y29udGFpbmVyCisgICAgLy8gKGNvcnJlc3BvbmRpbmcgdG8gdGhlIERJViNncmFuZHBhcmVudCkg
d2lsbCBub3QgaGF2ZSBhbnkgbmVlZHMgbGF5b3V0IGZsYWdzIHNldCBvbiBpdC4KKyAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnb3RoZXInKS5zdHlsZS53aWR0aD0iNTAwcHgiOworICAgIC8v
IFJ1biBhIGxheW91dCBwYXNzLiAgVGhpcyB3aWxsIHByb3BhZ2F0ZSB0aGUgcmVuZGVyIHRyZWUg
dXAgdG8gdGhlIERJViNvdGhlcidzIHJlbmRlciBvYmplY3QgYnV0CisgICAgLy8gd2lsbCBub3Qg
dHJhdmVyc2UgaW50byB0aGUgc3ZnIHN1YnRyZWUgYXQgYWxsIHNpbmNlIHRoZSBESVYjZ3JhbmRw
YXJlbnQncyByZW5kZXIgb2JqZWN0IGlzCisgICAgLy8gbm90IG1hcmtlZCBhcyBuZWVkaW5nIGxh
eW91dC4KKyAgICBkb2N1bWVudC5ib2R5Lm9mZnNldFdpZHRoOworICAgIC8vIFRoaXMgZ29lcyBp
bnRvIHRoZSB2b2lkIHNpbmNlIHRoZSBSZW5kZXJTVkdSb290IGlzIGFscmVhZHkgbWFya2VkIGFz
IG5lZWRzTGF5b3V0IGJ1dCB0aGVyZSBpcyBubworICAgIC8vIGxheW91dCBwZW5kaW5nLgorICAg
IGdyZWVuUmVjdC5zZXRBdHRyaWJ1dGUoIngiLCAiNTAlIik7Cit9Cis8L3NjcmlwdD4KKzwvYm9k
eT4KKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwpp
bmRleCAzNGVjZTBhNjllMDlmYzMzNzE0NWE1YzE3NmI1NTZhYmQyODNhOWQ0Li43MDZlNDdkM2M2
Y2YyMDFmMjVhNzY5ODZjODEwODA3NjExMjhmZGVhIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5n
ZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEwLTA2LTIy
ICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRG8gbm90IHNldCBuZWVkc0xheW91dCB3
aGVuIHRoZSBzdHlsZSBhdHRyaWJ1dGUgY2hhbmdlcyBvbiBhbiBTVkcgZWxlbWVudAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAzNjYKKworICAgICAg
ICBTVkdTVkdFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkIHdhcyBpbmNvcnJlY3RseSBjYWxs
aW5nIHJlbmRlcmVyKCktPnNldE5lZWRzTGF5b3V0KHRydWUpCisgICAgICAgIHdoZW5ldmVyIHRo
ZSBzdHlsZUF0dHIgY2hhbmdlZCBvbiBpdHMgZWxlbWVudC4gIFRoaXMgY291bGQgaGFwcGVuIGR1
cmluZyBsYXlvdXQgaW4gc29tZQorICAgICAgICBjaXJjdW1zdGFuY2VzIGR1ZSB0byBsYXp5IHN0
eWxlIGF0dHJpYnV0ZSBzeW5jaHJvbml6YXRpb24uICBXaGVuIGl0IGRpZCwgaXQgY291bGQgY2F1
c2UgdGhlCisgICAgICAgIGxheW91dCBmbGFncyB0byBiZWNvbWUgaW5jb25zaXN0ZW50LiAgU2Vl
IHRoZSB0ZXN0IGNhc2UgZm9yIGRldGFpbHMuCisKKyAgICAgICAgQ2hhbmdlcyB0byBhbiBlbGVt
ZW50J3Mgc3R5bGUgYXR0cmlidXRlIGFsd2F5cyBtYXJrIGFuIGVsZW1lbnQgYXMgbmVlZGluZyBs
YXlvdXQgYW55d2F5IHNvCisgICAgICAgIHRoaXMgY2FsbCB3YXMgcmVkdW5kYW50LgorCisgICAg
ICAgIFRlc3Q6IGZhc3QvcmVwYWludC9zdmctbGF5b3V0LXJvb3Qtc3R5bGUtYXR0ci11cGRhdGUu
aHRtbAorCisgICAgICAgICogc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHU3R5bGVkRWxlbWVudDo6aXNLbm93bkF0dHJpYnV0ZSk6CisKIDIwMTAtMDYtMjEg
IE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2Vk
LCBidWlsZCBmaXguCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNw
cCBiL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwCmluZGV4IDhhZTQ2M2Q5Zjc1Yjc1
MmVjYjQyODE2ZTgyNGJjYmM1M2ZhYTVhNWQuLjEwY2M3OTMxMDg3YWNjN2VlNTYxZjA2ZmM2NTEx
OWY2OGVmZmY1ZWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3Bw
CisrKyBiL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwCkBAIC0yMjgsNyArMjI4LDcg
QEAgdm9pZCBTVkdTdHlsZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUq
IGF0dHIpCiAKIGJvb2wgU1ZHU3R5bGVkRWxlbWVudDo6aXNLbm93bkF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICByZXR1cm4gaXNJZEF0dHJpYnV0ZU5hbWUo
YXR0ck5hbWUpIHx8IGF0dHJOYW1lID09IEhUTUxOYW1lczo6c3R5bGVBdHRyOyAKKyAgICByZXR1
cm4gaXNJZEF0dHJpYnV0ZU5hbWUoYXR0ck5hbWUpOwogfQogCiB2b2lkIFNWR1N0eWxlZEVsZW1l
bnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>