<?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>37352</bug_id>
          
          <creation_ts>2010-04-09 13:29:29 -0700</creation_ts>
          <short_desc>Animations are cleared when stylesheets are dynamically inserted</short_desc>
          <delta_ts>2010-04-09 18:00:45 -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>CSS</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>210880</commentid>
    <comment_count>0</comment_count>
      <attachid>52983</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-04-09 13:29:29 -0700</bug_when>
    <thetext>Created attachment 52983
testcase showing the problem

We have a testcase where animations fail to start when you load a dynamic style sheet. Attached testcase shows the problem. It is timing related, so it rarely happens on the desktop, but it happens more often on embedded devices.

I&apos;ve tracked this down to the fact that the animation is getting destroyed early, when style gets recalculated after loading the new style sheet. It&apos;s very timing sensitive and adding printfs to track it down makes it stop failing. But so far it looks like the keyframes are getting destroyed, so it decides to delete the animation since there are no keyframes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211038</commentid>
    <comment_count>1</comment_count>
      <attachid>53018</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-04-09 17:23:06 -0700</bug_when>
    <thetext>Created attachment 53018
Patch with testcase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211046</commentid>
    <comment_count>2</comment_count>
      <attachid>53018</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-04-09 17:30:11 -0700</bug_when>
    <thetext>Comment on attachment 53018
Patch with testcase

&gt; Index: WebCore/dom/Document.cpp
&gt; ===================================================================

&gt;      recalcStyleSelector();
&gt; +    // This recalcStyle initialtes a new recalc cycle. We need to bracket it to
&gt; +    // make sure animations get the correct update time
&gt; +    if (m_frame)
&gt; +        m_frame-&gt;animation()-&gt;beginAnimationUpdate();
&gt;      recalcStyle(Force);
&gt; +    if (m_frame)
&gt; +        m_frame-&gt;animation()-&gt;endAnimationUpdate();

I don&apos;t think the comment is necessary; the code speaks for itself.

&gt; Index: WebCore/page/animation/KeyframeAnimation.cpp
&gt; ===================================================================
&gt; --- WebCore/page/animation/KeyframeAnimation.cpp	(revision 57355)
&gt; +++ WebCore/page/animation/KeyframeAnimation.cpp	(working copy)
&gt; @@ -68,6 +68,11 @@ void KeyframeAnimation::getKeyframeAnima
&gt;      double elapsedTime = getElapsedTime();
&gt;  
&gt;      double t = m_animation-&gt;duration() ? (elapsedTime / m_animation-&gt;duration()) : 1;
&gt; +
&gt; +    ASSERT(t &gt;= 0);
&gt; +    if (t &lt; 0)
&gt; +        t = 0;

Or t = max(t, 0);

&gt; Index: LayoutTests/animations/dynamic-stylesheet-loading.html
&gt; ===================================================================
&gt; +  &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot;&gt;
&gt; +  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no&quot;&gt;

No need for these meta tags.

&gt; +  &lt;title&gt;Test of dynamic stylesheet loading&lt;/title&gt;
&gt; +  &lt;link rel=&quot;stylesheet&quot; href=&quot;resources/dynamic-stylesheet-insertion-main.css&quot;&gt;
&gt; +    &lt;script src=&quot;animation-test-helpers.js&quot; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&gt; +    &lt;script type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;
&gt; +    
&gt; +    const expectedValues = [
&gt; +      // [animation-name, time, element-id, property, expected-value, tolerance]
&gt; +      [&quot;splashdown&quot;, 0.3, &quot;splash&quot;, &quot;webkitTransform.5&quot;, 100, 0.1],
&gt; +    ];
&gt; +    
&gt; +    var controller = {};
&gt; +
&gt; +    controller.init = function () {
&gt; +        // put a listener on the initial splash animation
&gt; +        this.splash = document.getElementById(&apos;splash&apos;);
&gt; +        this.splash.addEventListener(&apos;webkitAnimationStart&apos;, this, false);
&gt; +        this.splash.addEventListener(&apos;webkitAnimationEnd&apos;, this, false);
&gt; +
&gt; +        runAnimationTest(expectedValues, undefined, undefined, true);
&gt; +    };
&gt; +
&gt; +    controller.handleEvent = function (event) {
&gt; +        if (event.type == &apos;webkitAnimationStart&apos;) {
&gt; +            // pre-load the stylesheet
&gt; +            var link = document.createElement(&apos;link&apos;);
&gt; +            link.rel = &apos;stylesheet&apos;;
&gt; +            link.href = &apos;resources/dynamic-stylesheet-insertion-inserted.css&apos;;
&gt; +            document.head.appendChild(link);
&gt; +        }
&gt; +    };

I&apos;d simplify this JS to not be objecty, and to make the names like &apos;splash&apos; more generic.

&gt; Index: LayoutTests/animations/resources/dynamic-stylesheet-insertion-inserted.css
&gt; ===================================================================

Maybe add a comment saying &quot;/* This file deliberately left blank */ ?

&gt; Index: LayoutTests/animations/resources/dynamic-stylesheet-insertion-main.css
&gt; ===================================================================
&gt; --- LayoutTests/animations/resources/dynamic-stylesheet-insertion-main.css	(revision 0)
&gt; +++ LayoutTests/animations/resources/dynamic-stylesheet-insertion-main.css	(revision 0)
&gt; @@ -0,0 +1,37 @@
&gt; +body {
&gt; +  width: 320px;
&gt; +  height: 480px;
&gt; +}
&gt; +
&gt; +#splash {
&gt; +  position: absolute;
&gt; +  left: 20px;
&gt; +  left: 60px;
&gt; +  width: 100px;
&gt; +  height: 100px;
&gt; +  background-color: blue;
&gt; +  -webkit-transform: translate3d(0,80px,0);
&gt; +  -webkit-animation-name: splashdown;
&gt; +  -webkit-animation-duration: 0.6s;
&gt; +  -webkit-animation-delay: 0.1s;
&gt; +}

Should remove rules that don&apos;t pertain to the issue, and pref. avoid rules that kick us into compositing mode.

r=me with more simplified testcase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211061</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-04-09 18:00:45 -0700</bug_when>
    <thetext>Landed in r57390</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211062</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-04-09 18:00:45 -0700</bug_when>
    <thetext>Landed in r57390</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>52983</attachid>
            <date>2010-04-09 13:29:29 -0700</date>
            <delta_ts>2010-04-09 13:29:29 -0700</delta_ts>
            <desc>testcase showing the problem</desc>
            <filename>Animation and Stylesheet Insertion.zip</filename>
            <type>application/zip</type>
            <size>3042</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">UEsDBAoAAAAAACRfVzwAAAAAAAAAAAAAAAAjABAAQW5pbWF0aW9uIGFuZCBTdHlsZXNoZWV0IElu
c2VydGlvbi9VWAwANbSDS4S0g0v2ARQAUEsDBBQACAAIACRfVzwAAAAAAAAAAAAAAAAtABAAQW5p
bWF0aW9uIGFuZCBTdHlsZXNoZWV0IEluc2VydGlvbi9pbmRleC5odG1sVVgMAJO0g0uEtINL9gEU
AJ1UwW6cMBC95yumXCBSgPZWKbBSu91DpFQ97BfM4tngxhiKBzarKP/eMRCWTbZS1BP2+L0Z8+aN
s0+qLvjYEJRcmdVVNn6uALKSUK1kIUvWbGi13m7hm9UVsq6tA7QKtnw05EoihjvrqPUnWTrCR2pF
jJKbm5j+dLrPg6K2TJZjXzSAaZcHTE+c+uK3UJTYOuK84338NVjmsVhRHvSaDk3d8oJ90IrLXFGv
C4qHzQ1UWu7aVbEr0FD+JfksIXx6G+rk1sMedxKy9YV62DSG4qreafkcaBdLIHaM3Ll4h8L2Iiwu
szNYPMbconWmKyT00ZwFNv4Wi1RHcq9ko+0jtGTywM2iB1C2tM+DCrVNCjdjXdHqhsFLPCn7G3sc
o8Gsb/Aq8EAC6LEdKre1MdRCDs8vt69np3gisrIc7jtb+HZDdA3PEwogTaHpGBCMdvILkkYQXBJ4
lkYDrjHoSjHP5KOZyaV2yXSag7iyq0SC5IF4Y8gvvx/vVBSOiPD69hIxQaU2vWDvp+pRKNo+ap5t
u2VsObwZSDewR+Pof1NtrPpHoouylTIvhoaUZ+qRjywl1PspmAxzmedw+SeWnKGSqw0lpn6Iwlld
cB5KaqnX2KSWYlOjGnpzMtQC5N0weG7RjKIlZJr6EYX++DyzjyRiUiGFp6zhO4i3rcfo4dEg5c17
hppL+lcokeEgq9alNiry/EXNl3lF0oIPiOfb9iHppOK5cC/v2nvQVtWHC1b58evnepzhexGZvFEu
z8ubuYpOHjqZapzpdBxfP+FZOr7Nfrmr1XGaeqV70Ereh8HAwSpLJTLiR9RVlo7P+19QSwcIY1OH
ZGsCAAD2BQAAUEsDBAoAAAAAACxfVzwAAAAAAAAAAAAAAAAJABAAX19NQUNPU1gvVVgMAJO0g0uT
tINL9gEUAFBLAwQKAAAAAAAsX1c8AAAAAAAAAAAAAAAALAAQAF9fTUFDT1NYL0FuaW1hdGlvbiBh
bmQgU3R5bGVzaGVldCBJbnNlcnRpb24vVVgMAJO0g0uTtINL9gEUAFBLAwQUAAgACAAkX1c8AAAA
AAAAAAAAAAAAOAAQAF9fTUFDT1NYL0FuaW1hdGlvbiBhbmQgU3R5bGVzaGVldCBJbnNlcnRpb24v
Ll9pbmRleC5odG1sVVgMAJO0g0uEtINL9gEUAGNgFWNnYGJg8E1MVvAPVohQgAKQGAMnEBsBcTsQ
g/g7GYgCjiEhQQwC249DdcwAYkU0JYwIcdHk/Fy93MTkovzcxJLUYr3kxKLUEoZqLpArkvNzSnPz
FGwVDKzB/JzMvFQgz8SaqxYAUEsHCGPMZltoAAAAuQAAAFBLAwQKAAAAAAC4Xlc8AAAAAAAAAAAA
AAAALwAQAEFuaW1hdGlvbiBhbmQgU3R5bGVzaGVldCBJbnNlcnRpb24vaW5zZXJ0ZWQuY3NzVVgM
AHC0g0u8s4NL9gEUAFBLAwQUAAgACAC4Xlc8AAAAAAAAAAAAAAAAOgAQAF9fTUFDT1NYL0FuaW1h
dGlvbiBhbmQgU3R5bGVzaGVldCBJbnNlcnRpb24vLl9pbnNlcnRlZC5jc3NVWAwAcLSDS7yzg0v2
ARQAY2AVY2dgYmDwTUxW8A9WiFCAApAYAycQGwFxGxCD+DsYiAKOISFBDALbl0J1zABiBTQljAhx
0eT8XL3cxOSi/NzEktRiveTEotQShoo5q58FMTQ9+TPn0h0b1mhW5mwDe3VjfdFDq1kZumdyyAIA
UEsHCK36GmdvAAAAuAAAAFBLAwQUAAgACACEXlc8AAAAAAAAAAAAAAAAKwAQAEFuaW1hdGlvbiBh
bmQgU3R5bGVzaGVldCBJbnNlcnRpb24vbWFpbi5jc3NVWAwAk7SDS1izg0v2ARQApVDtasQgEPyf
p1gohRZOMMlx9Lw/fRUTTSIxGtSQhpJ3r5q7XujHNW0R0VnHmZ1NCs0meE0ARsFcQyDPcP9y8rjh
om4cgf1TLMxJcmd7SW0T2b22wgmtCNDCajk4Hv5IXvkfFwWn+ytYng5ndDbL8Aez90JBy7Y2elAM
lVpqQ6CQvhSedE9L4SYCOCA08qIVDjlDla206QjEq6SO5+wB7/x6XBOpEh0NrSNFO05gCcX0qL5m
scHQJenBfsPgkvp2Uhun9HwhtHyqjLewK4s4O3wfjw29A8rDQHawRFhlTwOe/c4/qV0bc6ITqkbV
oMolAaeWI6FOG92zH7z3f/BGenBb/fEt8+MvxnhTKMX/VMKL0py8AVBLBwjvvg68FQEAAE0DAABQ
SwMEFAAIAAgAhF5XPAAAAAAAAAAAAAAAADYAEABfX01BQ09TWC9BbmltYXRpb24gYW5kIFN0eWxl
c2hlZXQgSW5zZXJ0aW9uLy5fbWFpbi5jc3NVWAwAk7SDS1izg0v2ARQAY2AVY2dgYmDwTUxW8A9W
iFCAApAYAycQGwFxGxCD+DsYiAKOISFBDALbp0J1zABiBTQljAhx0eT8XL3cxOSi/NzEktRiveTE
otQShoo5q58FMTQ9+TPn0h0b1mhW5mwDe3VjfdFDq1kZumdyyAIAUEsHCFQswUJvAAAAuAAAAFBL
AQIVAwoAAAAAACRfVzwAAAAAAAAAAAAAAAAjAAwAAAAAAAAAAEDtQQAAAABBbmltYXRpb24gYW5k
IFN0eWxlc2hlZXQgSW5zZXJ0aW9uL1VYCAA1tINLhLSDS1BLAQIVAxQACAAIACRfVzxjU4dkawIA
APYFAAAtAAwAAAAAAAAAAECkgVEAAABBbmltYXRpb24gYW5kIFN0eWxlc2hlZXQgSW5zZXJ0aW9u
L2luZGV4Lmh0bWxVWAgAk7SDS4S0g0tQSwECFQMKAAAAAAAsX1c8AAAAAAAAAAAAAAAACQAMAAAA
AAAAAABA/UEnAwAAX19NQUNPU1gvVVgIAJO0g0uTtINLUEsBAhUDCgAAAAAALF9XPAAAAAAAAAAA
AAAAACwADAAAAAAAAAAAQP1BXgMAAF9fTUFDT1NYL0FuaW1hdGlvbiBhbmQgU3R5bGVzaGVldCBJ
bnNlcnRpb24vVVgIAJO0g0uTtINLUEsBAhUDFAAIAAgAJF9XPGPMZltoAAAAuQAAADgADAAAAAAA
AAAAQKSBuAMAAF9fTUFDT1NYL0FuaW1hdGlvbiBhbmQgU3R5bGVzaGVldCBJbnNlcnRpb24vLl9p
bmRleC5odG1sVVgIAJO0g0uEtINLUEsBAhUDCgAAAAAAuF5XPAAAAAAAAAAAAAAAAC8ADAAAAAAA
AAAAQKSBlgQAAEFuaW1hdGlvbiBhbmQgU3R5bGVzaGVldCBJbnNlcnRpb24vaW5zZXJ0ZWQuY3Nz
VVgIAHC0g0u8s4NLUEsBAhUDFAAIAAgAuF5XPK36GmdvAAAAuAAAADoADAAAAAAAAAAAQKSB8wQA
AF9fTUFDT1NYL0FuaW1hdGlvbiBhbmQgU3R5bGVzaGVldCBJbnNlcnRpb24vLl9pbnNlcnRlZC5j
c3NVWAgAcLSDS7yzg0tQSwECFQMUAAgACACEXlc8774OvBUBAABNAwAAKwAMAAAAAAAAAABApIHa
BQAAQW5pbWF0aW9uIGFuZCBTdHlsZXNoZWV0IEluc2VydGlvbi9tYWluLmNzc1VYCACTtINLWLOD
S1BLAQIVAxQACAAIAIReVzxULMFCbwAAALgAAAA2AAwAAAAAAAAAAECkgVgHAABfX01BQ09TWC9B
bmltYXRpb24gYW5kIFN0eWxlc2hlZXQgSW5zZXJ0aW9uLy5fbWFpbi5jc3NVWAgAk7SDS1izg0tQ
SwUGAAAAAAkACQCRAwAAOwgAAAAA
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53018</attachid>
            <date>2010-04-09 17:23:06 -0700</date>
            <delta_ts>2010-04-09 17:30:11 -0700</delta_ts>
            <desc>Patch with testcase</desc>
            <filename>37352.patch</filename>
            <type>text/plain</type>
            <size>7887</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NzM4NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjQgQEAKKzIwMTAtMDQtMDkgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZp
eGVkIGJ1ZyB3aGVyZSBhbmltYXRpb24gdGltZSB3YXMgbm90IHVwZGF0ZWQgd2hlbiBkeW5hbWlj
YWxseSBsb2FkaW5nIGEgc3R5bGUgc2hlZXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTM3MzUyCisKKyAgICAgICAgQSBkeW5hbWljYWxseSBsb2FkZWQg
c3R5bGUgc2hlZXQga2lja3Mgb2ZmIGl0cyBvd24gc3R5bGVSZWNhbGMgY3ljbGUuIFRoaXMgd2Fz
IG5vdAorICAgICAgICBicmFja2V0ZWQgd2l0aCBhIGJlZ2luQW5pbWF0aW9uVXBkYXRlL2VuZEFu
aW1hdGlvblVwZGF0ZSB3aGljaCB3YXNuJ3QgcmVzZXR0aW5nIHRoZQorICAgICAgICBhbmltYXRp
b24gdGltZS4gSW4gc29tZSB0aW1lLWRlcGVuZGVudCBjYXNlcyB0aGlzIHdhcyBjYXVzaW5nIGEg
bmVnYXRpdmUgZWxhcHNlZFRpbWUKKyAgICAgICAgdG8gYmUgc2VudCB0byB0aGUga2V5ZnJhbWUg
YW5pbWF0b3IuIFRoaXMgaXMgYW4gaW52YWxpZCBjYXNlIHdoaWNoIGRlc3Ryb3lzIHRoZQorICAg
ICAgICBhbmltYXRpb24gcHJlbWF0dXJlbHkuIEkgbm90IG9ubHkgYWRkZWQgdGhlIGJyYWNrZXRz
LCBidXQgSSBhbHNvIGFkZGVkIGFuIGFzc2VydAorICAgICAgICBhbmQgcHJvdGVjdGlvbiBmb3Ig
d2hlbiB0aGUgZWxhcHNlZFRpbWUgY29tZXMgdXAgbmVnYXRpdmUuCisKKyAgICAgICAgVGVzdDog
YW5pbWF0aW9ucy9keW5hbWljLXN0eWxlc2hlZXQtbG9hZGluZy5odG1sCisKKyAgICAgICAgKiBk
b20vRG9jdW1lbnQuY3BwOiBBZGRlZCBicmFja2V0cworICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OnVwZGF0ZVN0eWxlU2VsZWN0b3IpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0tleWZy
YW1lQW5pbWF0aW9uLmNwcDogQWRkZWQgYXNzZXJ0IGFuZCBwcm90ZWN0aW9uCisgICAgICAgIChX
ZWJDb3JlOjpLZXlmcmFtZUFuaW1hdGlvbjo6Z2V0S2V5ZnJhbWVBbmltYXRpb25JbnRlcnZhbCk6
CisKIDIwMTAtMDQtMDkgIFNoaW5pY2hpcm8gSGFtYWppICA8aGFtYWppQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFdlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlz
aW9uIDU3MzU1KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNDgzLDcgKzI0ODMsMTMgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRlU3R5bGVTZWxlY3Rvcigp
CiAjZW5kaWYKIAogICAgIHJlY2FsY1N0eWxlU2VsZWN0b3IoKTsKKyAgICAvLyBUaGlzIHJlY2Fs
Y1N0eWxlIGluaXRpYWx0ZXMgYSBuZXcgcmVjYWxjIGN5Y2xlLiBXZSBuZWVkIHRvIGJyYWNrZXQg
aXQgdG8KKyAgICAvLyBtYWtlIHN1cmUgYW5pbWF0aW9ucyBnZXQgdGhlIGNvcnJlY3QgdXBkYXRl
IHRpbWUKKyAgICBpZiAobV9mcmFtZSkKKyAgICAgICAgbV9mcmFtZS0+YW5pbWF0aW9uKCktPmJl
Z2luQW5pbWF0aW9uVXBkYXRlKCk7CiAgICAgcmVjYWxjU3R5bGUoRm9yY2UpOworICAgIGlmICht
X2ZyYW1lKQorICAgICAgICBtX2ZyYW1lLT5hbmltYXRpb24oKS0+ZW5kQW5pbWF0aW9uVXBkYXRl
KCk7CiAKICNpZmRlZiBJTlNUUlVNRU5UX0xBWU9VVF9TQ0hFRFVMSU5HCiAgICAgaWYgKCFvd25l
ckVsZW1lbnQoKSkKSW5kZXg6IFdlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmlt
YXRpb24uY3BwCShyZXZpc2lvbiA1NzM1NSkKKysrIFdlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5
ZnJhbWVBbmltYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCwxMSBAQCB2b2lk
IEtleWZyYW1lQW5pbWF0aW9uOjpnZXRLZXlmcmFtZUFuaW1hCiAgICAgZG91YmxlIGVsYXBzZWRU
aW1lID0gZ2V0RWxhcHNlZFRpbWUoKTsKIAogICAgIGRvdWJsZSB0ID0gbV9hbmltYXRpb24tPmR1
cmF0aW9uKCkgPyAoZWxhcHNlZFRpbWUgLyBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSkgOiAxOwor
CisgICAgQVNTRVJUKHQgPj0gMCk7CisgICAgaWYgKHQgPCAwKQorICAgICAgICB0ID0gMDsKKwog
ICAgIGludCBpID0gc3RhdGljX2Nhc3Q8aW50Pih0KTsKICAgICB0IC09IGk7CiAgICAgaWYgKG1f
YW5pbWF0aW9uLT5kaXJlY3Rpb24oKSAmJiAoaSAmIDEpKQpJbmRleDogTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTcz
ODUpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NyBAQAorMjAxMC0wNC0wOSAgQ2hyaXMgTWFycmluICA8Y21hcnJpbkBhcHBsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4ZWQgYnVnIHdo
ZXJlIGFuaW1hdGlvbiB0aW1lIHdhcyBub3QgdXBkYXRlZCB3aGVuIGR5bmFtaWNhbGx5IGxvYWRp
bmcgYSBzdHlsZSBzaGVldAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzczNTIKKworICAgICAgICBMYXlvdXRUZXN0IHNob3dpbmcgcHJvYmxlbS4KKwor
ICAgICAgICAqIGFuaW1hdGlvbnMvZHluYW1pYy1zdHlsZXNoZWV0LWxvYWRpbmctZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBhbmltYXRpb25zL2R5bmFtaWMtc3R5bGVzaGVldC1sb2Fk
aW5nLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGFuaW1hdGlvbnMvcmVzb3VyY2VzL2R5bmFtaWMt
c3R5bGVzaGVldC1pbnNlcnRpb24taW5zZXJ0ZWQuY3NzOiBBZGRlZC4KKyAgICAgICAgKiBhbmlt
YXRpb25zL3Jlc291cmNlcy9keW5hbWljLXN0eWxlc2hlZXQtaW5zZXJ0aW9uLW1haW4uY3NzOiBB
ZGRlZC4KKwogMjAxMC0wNC0wOSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgTWFjaWVqIFN0YWNob3dpYWsuCkluZGV4OiBMYXlvdXRUZXN0cy9h
bmltYXRpb25zL2R5bmFtaWMtc3R5bGVzaGVldC1sb2FkaW5nLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9hbmltYXRpb25zL2R5bmFtaWMtc3R5bGVzaGVldC1sb2FkaW5n
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2FuaW1hdGlvbnMvZHlu
YW1pYy1zdHlsZXNoZWV0LWxvYWRpbmctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDMgQEAKK1RoaXMgdGVzdCBwZXJmb3JtcyBhbiBhbmltYXRpb24gYW5kIHRoZW4gZHluYW1p
Y2FsbHkgbG9hZHMgYSBuZXcgc3R5bGVzaGVldCAod2hpY2ggaXMgZW1wdHkpLiBJdCBzaG91bGQg
c3RhcnQgYW5pbWF0aW5nIGFmdGVyIGEgMTAwbXMgZGVsYXkgYW5kIHRoZW4gc3RvcCBoYWxmd2F5
IHRocm91Z2ggdGhlIGFuaW1hdGlvbiBhdCB3aGljaCBwb2ludCB3ZSBzZWUgaWYgaXQgaXMgYXQg
dGhlIGNvcnJlY3QgcG9zaXRpb24uIFRoZSBsb2FkaW5nIG9mIHRoZSBzdHlsZXNoZWV0IHNob3Vs
ZCBub3QgcHJldmVudCB0aGUgYW5pbWF0aW9uIGZyb20gcnVubmluZy4gCitQQVNTIC0gIndlYmtp
dFRyYW5zZm9ybS41IiBwcm9wZXJ0eSBmb3IgInNwbGFzaCIgZWxlbWVudCBhdCAwLjNzIHNhdyBz
b21ldGhpbmcgY2xvc2UgdG86IDEwMAorCkluZGV4OiBMYXlvdXRUZXN0cy9hbmltYXRpb25zL2R5
bmFtaWMtc3R5bGVzaGVldC1sb2FkaW5nLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
YW5pbWF0aW9ucy9keW5hbWljLXN0eWxlc2hlZXQtbG9hZGluZy5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9keW5hbWljLXN0eWxlc2hlZXQtbG9hZGluZy5odG1s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUzIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0v
L1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorICAgImh0dHA6Ly93d3cudzMu
b3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+CisKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorICA8
bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNl
dD11dGYtOCI+CisgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Ut
d2lkdGgsIG1pbmltdW0tc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJs
ZT1ubyI+CisgIDx0aXRsZT5UZXN0IG9mIGR5bmFtaWMgc3R5bGVzaGVldCBsb2FkaW5nPC90aXRs
ZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJyZXNvdXJjZXMvZHluYW1pYy1zdHls
ZXNoZWV0LWluc2VydGlvbi1tYWluLmNzcyI+CisgICAgPHNjcmlwdCBzcmM9ImFuaW1hdGlvbi10
ZXN0LWhlbHBlcnMuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgY2hhcnNldD0idXRmLTgiPjwv
c2NyaXB0PgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBjaGFyc2V0PSJ1dGYt
OCI+CisgICAgCisgICAgY29uc3QgZXhwZWN0ZWRWYWx1ZXMgPSBbCisgICAgICAvLyBbYW5pbWF0
aW9uLW5hbWUsIHRpbWUsIGVsZW1lbnQtaWQsIHByb3BlcnR5LCBleHBlY3RlZC12YWx1ZSwgdG9s
ZXJhbmNlXQorICAgICAgWyJzcGxhc2hkb3duIiwgMC4zLCAic3BsYXNoIiwgIndlYmtpdFRyYW5z
Zm9ybS41IiwgMTAwLCAwLjFdLAorICAgIF07CisgICAgCisgICAgdmFyIGNvbnRyb2xsZXIgPSB7
fTsKKworICAgIGNvbnRyb2xsZXIuaW5pdCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLy8gcHV0
IGEgbGlzdGVuZXIgb24gdGhlIGluaXRpYWwgc3BsYXNoIGFuaW1hdGlvbgorICAgICAgICB0aGlz
LnNwbGFzaCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzcGxhc2gnKTsKKyAgICAgICAgdGhp
cy5zcGxhc2guYWRkRXZlbnRMaXN0ZW5lcignd2Via2l0QW5pbWF0aW9uU3RhcnQnLCB0aGlzLCBm
YWxzZSk7CisgICAgICAgIHRoaXMuc3BsYXNoLmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmtpdEFuaW1h
dGlvbkVuZCcsIHRoaXMsIGZhbHNlKTsKKworICAgICAgICBydW5BbmltYXRpb25UZXN0KGV4cGVj
dGVkVmFsdWVzLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdHJ1ZSk7CisgICAgfTsKKworICAgIGNv
bnRyb2xsZXIuaGFuZGxlRXZlbnQgPSBmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgICAgaWYgKGV2
ZW50LnR5cGUgPT0gJ3dlYmtpdEFuaW1hdGlvblN0YXJ0JykgeworICAgICAgICAgICAgLy8gcHJl
LWxvYWQgdGhlIHN0eWxlc2hlZXQKKyAgICAgICAgICAgIHZhciBsaW5rID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnbGluaycpOworICAgICAgICAgICAgbGluay5yZWwgPSAnc3R5bGVzaGVldCc7
CisgICAgICAgICAgICBsaW5rLmhyZWYgPSAncmVzb3VyY2VzL2R5bmFtaWMtc3R5bGVzaGVldC1p
bnNlcnRpb24taW5zZXJ0ZWQuY3NzJzsKKyAgICAgICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5k
Q2hpbGQobGluayk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgd2luZG93LmFkZEV2ZW50TGlz
dGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIGNvbnRyb2xs
ZXIuaW5pdCgpOworICAgIH0sIGZhbHNlKTsKKworICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorVGhpcyB0ZXN0IHBlcmZvcm1zIGFuIGFuaW1hdGlvbiBhbmQgdGhlbiBkeW5hbWljYWxseSBs
b2FkcyBhIG5ldyBzdHlsZXNoZWV0ICh3aGljaCBpcyBlbXB0eSkuIEl0IHNob3VsZCBzdGFydAor
YW5pbWF0aW5nIGFmdGVyIGEgMTAwbXMgZGVsYXkgYW5kIHRoZW4gc3RvcCBoYWxmd2F5IHRocm91
Z2ggdGhlIGFuaW1hdGlvbiBhdCB3aGljaCBwb2ludCB3ZSBzZWUgaWYgaXQgaXMgYXQgdGhlIAor
Y29ycmVjdCBwb3NpdGlvbi4gVGhlIGxvYWRpbmcgb2YgdGhlIHN0eWxlc2hlZXQgc2hvdWxkIG5v
dCBwcmV2ZW50IHRoZSBhbmltYXRpb24gZnJvbSBydW5uaW5nLgorPGRpdiBpZD0ic3BsYXNoIj48
L2Rpdj4KKzxkaXYgaWQ9InJlc3VsdCI+Cis8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6
IExheW91dFRlc3RzL2FuaW1hdGlvbnMvcmVzb3VyY2VzL2R5bmFtaWMtc3R5bGVzaGVldC1pbnNl
cnRpb24taW5zZXJ0ZWQuY3NzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSW5kZXg6IExheW91dFRlc3RzL2FuaW1hdGlv
bnMvcmVzb3VyY2VzL2R5bmFtaWMtc3R5bGVzaGVldC1pbnNlcnRpb24tbWFpbi5jc3MKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9yZXNvdXJjZXMvZHluYW1pYy1zdHlsZXNo
ZWV0LWluc2VydGlvbi1tYWluLmNzcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2FuaW1h
dGlvbnMvcmVzb3VyY2VzL2R5bmFtaWMtc3R5bGVzaGVldC1pbnNlcnRpb24tbWFpbi5jc3MJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMzcgQEAKK2JvZHkgeworICB3aWR0aDogMzIwcHg7CisgIGhl
aWdodDogNDgwcHg7Cit9CisKKyNzcGxhc2ggeworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGxl
ZnQ6IDIwcHg7CisgIGxlZnQ6IDYwcHg7CisgIHdpZHRoOiAxMDBweDsKKyAgaGVpZ2h0OiAxMDBw
eDsKKyAgYmFja2dyb3VuZC1jb2xvcjogYmx1ZTsKKyAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5z
bGF0ZTNkKDAsODBweCwwKTsKKyAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogc3BsYXNoZG93bjsK
KyAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IDAuNnM7CisgIC13ZWJraXQtYW5pbWF0aW9u
LWRlbGF5OiAwLjFzOworfQorCitALXdlYmtpdC1rZXlmcmFtZXMgc3BsYXNoZG93biB7CisgIDAl
IHsKKyAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgLTMwMHB4LCAwKTsKKyAg
fQorICAzMCUgeworICAgIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1p
bjsKKyAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMjBweCwgMCk7CisgIH0K
KyAgNDAlIHsKKyAgICAtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2UtaW4t
b3V0OworICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAxMDBweCwgMCk7Cisg
IH0KKyAgOTAlIHsKKyAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMTAwcHgs
IDApOworICB9CisgIDEwMCUgeworICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgw
LCAxMDBweCwgMCk7CisgIH0KK30K
</data>
<flag name="review"
          id="36663"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>