<?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>40794</bug_id>
          
          <creation_ts>2010-06-17 12:01:15 -0700</creation_ts>
          <short_desc>When properties are missing from animation keyframes, interpolate between those keyframes that specify them</short_desc>
          <delta_ts>2010-08-29 16:17:10 -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>All</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>41188</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>abarth</cc>
    
    <cc>cmarrin</cc>
    
    <cc>dino</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>239515</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-06-17 12:01:15 -0700</bug_when>
    <thetext>If you have keyframes like:

{
  from { left: 0; opacity: 1; }
  50% { opacity: 0.8; }
  to { left: 200px; opacity: 0.2; }
}
then the 50% keyframe will use the current value of left on the element being animated. This is not very useful; it would be much better to just interpolate &apos;left&apos; between the first and last keyframes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239516</commentid>
    <comment_count>1</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-06-17 12:01:37 -0700</bug_when>
    <thetext>&lt;rdar://problem/8104038&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242764</commentid>
    <comment_count>2</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2010-06-24 17:42:15 -0700</bug_when>
    <thetext>I generally support this, but have a few questions.

Do you always have to list every property you are animating in the from and to keyframes? If you don&apos;t, what value do you use? The value from the element&apos;s style?

I expect you want the property to animate through the missing keyframes as if it had been specified there with the value calculated from the animation? For example:

from { left: 0; opacity: 1; }
20% { opacity: 0.8; }
to {left: 200px; opacity: 0.2; }

... would calculate a left value of 40px at the 20% keyframe.

While, this:

from { left: 0; opacity: 1; }
20% { opacity: 0.8; }
40% {left: 40px; opacity: 0.4 }
to {left: 200px; opacity: 0.2; }

.. would provide a left value of 20px at the 20% keyframe.

And also, that the timing function would not matter. For example:


from { left: 0; opacity: 1; timing-function: ease-in; }
20% { opacity: 0.8; timing-function: ease-in; }
to {left: 200px; opacity: 0.2; }

... would still give 40px at 20%. The timing function only applies between keyframes, even if the property value is not specified. In fact, there is always a linear calculation for filling in the blank values?

Lastly, what about complex properties such as transform?

from { transform: rotate(10deg) translate(50px); opacity: 1; }
50% { opacity: 0.8; }
to { transform: rotate(50deg) translate(90px); opacity: 0.2; }

Is the value at 50% a matrix, or the list of functions rotate(30deg) translate(70px) ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242770</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-06-24 17:57:44 -0700</bug_when>
    <thetext>I think this:

  @keyframes combined {
    0% {
      left: 0;
      top: 0;
      timing-function: ease-in;
    }
    
    50% {
      top: 50px;
    }

    100% {
      top: 200px;
      left: 200px;
    }
  }

should exactly equivalent to two separate animations:

  @keyframes top {
    0% {
      top: 0;
      timing-function: ease-in;
    }
    
    50% {
      top: 50px;
    }

    100% {
      top: 200px;
    }
  }


  @keyframes left {
    0% {
      left: 0;
      timing-function: ease-in;
    }
    
    100% {
      left: 200px;
    }
  }

so you can&apos;t just linearly interpolate the values of missing properties; the timing functions apply. I don&apos;t see that transforms need any special treatment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242772</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-06-24 18:00:12 -0700</bug_when>
    <thetext>So when combining this with bug 41188, we&apos;ll have to say something like:
* if the 0% or 100% keyframes are missing, or if a property is not specified in these keyframes, then the initial/final value of that property is taken from the current style of the element.
* If a property is missing from an intermediate keyframe, then that property is interpolated as if that keyframe does not exist.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242778</commentid>
    <comment_count>5</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2010-06-24 18:19:17 -0700</bug_when>
    <thetext>OK. So you think the keyframe should not exist, and I assumed that it should be filled in.

I think your approach is fine. But I sort of wonder why we are doing this if, as you point out, the functionality is already there - just write another animation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242780</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-06-24 18:22:12 -0700</bug_when>
    <thetext>Because writing another animation is verbose, and now you have to keep two animation in sync. I would have found this really useful when doing my gallery stuff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267720</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-08-22 15:18:26 -0700</bug_when>
    <thetext>We also need to consider repeating animations. How does &apos;top&apos; animate with the following?

@keyframes move {
from { left: 0; }
50% {
  left: 50px;
  top: 100px;
 }
to { left: 100px; }
}

.box {
  top: 50px;
  animation: move 2s 2 linear alternate;
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267737</commentid>
    <comment_count>8</comment_count>
      <attachid>65070</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-08-22 19:13:43 -0700</bug_when>
    <thetext>Created attachment 65070
Patch for some initial cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267738</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-22 19:15:53 -0700</bug_when>
    <thetext>Attachment 65070 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/css/CSSStyleSelector.cpp:1470:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267739</commentid>
    <comment_count>10</comment_count>
      <attachid>65070</attachid>
    <who name="">mitz</who>
    <bug_when>2010-08-22 19:31:01 -0700</bug_when>
    <thetext>Comment on attachment 65070
Patch for some initial cleanup

&gt; +    const KeyframeValue&amp; at(size_t index) const { return m_keyframes[index]; }

Please add and use operator[]; .at() is not commonly used. Vector also provides first() and last() which are preferred to [0] and [….size() - 1].

&gt; +    const Vector&lt;KeyframeValue&gt;&amp; keyframes() const { return m_keyframes; }

This doesn’t seem to be used. Perhaps you should just use this instead of covering Vector methods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268280</commentid>
    <comment_count>11</comment_count>
      <attachid>65207</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-08-23 20:08:57 -0700</bug_when>
    <thetext>Created attachment 65207
Patch for some initial cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268281</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-23 20:14:10 -0700</bug_when>
    <thetext>Attachment 65207 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/css/CSSStyleSelector.cpp:1470:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268718</commentid>
    <comment_count>13</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2010-08-24 12:38:06 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; We also need to consider repeating animations. How does &apos;top&apos; animate with the following?
&gt; 
&gt; @keyframes move {
&gt; from { left: 0; }
&gt; 50% {
&gt;   left: 50px;
&gt;   top: 100px;
&gt;  }
&gt; to { left: 100px; }
&gt; }
&gt; 
&gt; .box {
&gt;   top: 50px;
&gt;   animation: move 2s 2 linear alternate;
&gt; }

The 0% and 100% keyframes with top:50px will be autogenerated, so that means this animation will not change from the existing behaviour. Right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268719</commentid>
    <comment_count>14</comment_count>
      <attachid>65207</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2010-08-24 12:41:04 -0700</bug_when>
    <thetext>Comment on attachment 65207
Patch for some initial cleanup


WebCore/page/animation/KeyframeAnimation.cpp:85
 +          const KeyframeValue&amp; currKeyframe = m_keyframes[i];

I know this is super nitpicky, but I think this should be currentKeyframe. We use full words elsewhere around this code.

Otherwise I&apos;m very glad to see the end of iterators!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268736</commentid>
    <comment_count>15</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-08-24 13:04:57 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #7)
&gt; &gt; We also need to consider repeating animations. How does &apos;top&apos; animate with the following?
&gt; &gt; 
&gt; &gt; @keyframes move {
&gt; &gt; from { left: 0; }
&gt; &gt; 50% {
&gt; &gt;   left: 50px;
&gt; &gt;   top: 100px;
&gt; &gt;  }
&gt; &gt; to { left: 100px; }
&gt; &gt; }
&gt; &gt; 
&gt; &gt; .box {
&gt; &gt;   top: 50px;
&gt; &gt;   animation: move 2s 2 linear alternate;
&gt; &gt; }
&gt; 
&gt; The 0% and 100% keyframes with top:50px will be autogenerated, so that means this animation will not change from the existing behaviour. Right?

I think what should happen is that the 0% and 100% keyframes should only apply at the ends of repeating animation, so &quot;internal&quot; iterations would interpolate over these. It&apos;s a little more complex to spec, but I think could allow useful behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269197</commentid>
    <comment_count>16</comment_count>
      <attachid>65207</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-08-25 06:13:03 -0700</bug_when>
    <thetext>Comment on attachment 65207
Patch for some initial cleanup

&gt;      double offset = 0;
&gt; -    Vector&lt;KeyframeValue&gt;::const_iterator endKeyframes = m_keyframes.endKeyframes();
&gt; -    for (Vector&lt;KeyframeValue&gt;::const_iterator it = m_keyframes.beginKeyframes(); it != endKeyframes; ++it) {
&gt; -        if (t &lt; it-&gt;key()) {
&gt; +    size_t numKeyframes = m_keyframes.size();
&gt; +    for (size_t i = 0; i &lt; numKeyframes; ++i) {
&gt; +        const KeyframeValue&amp; currKeyframe = m_keyframes[i];

I don&apos;t think there is a really compelling reason to continue using curr rather than current here.

Otherwise, r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271024</commentid>
    <comment_count>17</comment_count>
      <attachid>65207</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-08-28 10:39:44 -0700</bug_when>
    <thetext>Comment on attachment 65207
Patch for some initial cleanup

http://trac.webkit.org/changeset/66310</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271029</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-28 11:08:00 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/66310 might have broken Qt Linux Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271170</commentid>
    <comment_count>19</comment_count>
      <attachid>65858</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-08-29 11:40:50 -0700</bug_when>
    <thetext>Created attachment 65858
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271232</commentid>
    <comment_count>20</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-08-29 16:17:10 -0700</bug_when>
    <thetext>Note that I didn&apos;t do any special behavior for the &apos;to&apos; and &apos;from&apos; keyframes. We can do that later if we think it&apos;s appropriate.

http://trac.webkit.org/changeset/66339</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65070</attachid>
            <date>2010-08-22 19:13:43 -0700</date>
            <delta_ts>2010-08-23 20:08:53 -0700</delta_ts>
            <desc>Patch for some initial cleanup</desc>
            <filename>bug-40794-20100822191341.patch</filename>
            <type>text/plain</type>
            <size>7833</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
M2MzNjU1NGI0MGQ5N2JmOTVlNjZhMzFlNjFkNjU1YTlkNzU5NThmMS4uYTlkYWI2ZTQ1YjU3YzQz
YTZhMjI1NzhiOGM0ZDVkMzg1ODM0MDc2YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAxMC0wOC0yMiAgU2lt
b24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIHByb3BlcnRpZXMgYXJlIG1pc3Npbmcg
ZnJvbSBhbmltYXRpb24ga2V5ZnJhbWVzLCBpbnRlcnBvbGF0ZSBiZXR3ZWVuIHRob3NlIGtleWZy
YW1lcyB0aGF0IHNwZWNpZnkgdGhlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDA3OTQKKworICAgICAgICBTb21lIHByZWxpbWluYXJ5IGNsZWFudXA7
IGZvciB2ZWN0b3JzLCBwcmVmZXIgaW5kZXhlZCBhY2Nlc3MgcmF0aGVyIHRoYW4gdXNpbmcgaXRl
cmF0b3JzLgorICAgICAgICAKKyAgICAgICAgTm8gYmVoYXZpb3IgY2hhbmdlcy4KKworICAgICAg
ICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxl
U2VsZWN0b3I6OmtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKToKKyAgICAgICAgKiBwYWdlL2Fu
aW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpLZXlmcmFt
ZUFuaW1hdGlvbjo6Z2V0S2V5ZnJhbWVBbmltYXRpb25JbnRlcnZhbCk6CisgICAgICAgIChXZWJD
b3JlOjpLZXlmcmFtZUFuaW1hdGlvbjo6dmFsaWRhdGVUcmFuc2Zvcm1GdW5jdGlvbkxpc3QpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpzdGFydEFuaW1hdGlvbik6CisgICAgICAgICogcmVu
ZGVyaW5nL3N0eWxlL0tleWZyYW1lTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVM
aXN0OjphdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlmcmFtZUxpc3Q6OmtleWZyYW1lcyk6CisK
IDIwMTAtMDgtMjAgIEFuZHJlYXMgS2xpbmcgIDxhbmRyZWFzLmtsaW5nQG5va2lhLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBBcml5YSBIaWRheWF0LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9j
c3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAgYi9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNw
cAppbmRleCA0ZWU0OWQwNjEyY2MyMTQ3NzM5ZTc0ZTM4ZWQzZmRlZTViMTMxNWI3Li4xYzE1NzMz
MGYxNWNiMjA0NzY0NTg0ZTJmMDM0YzEyNzJhNDY4Y2Y1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2Nz
cy9DU1NTdHlsZVNlbGVjdG9yLmNwcAorKysgYi9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9y
LmNwcApAQCAtMTQ2Nyw3ICsxNDY3LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjprZXlmcmFt
ZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiBlLCBjb25zdCBSZW5kZXJTdHlsZSoKICAgICAK
ICAgICAvLyBJZiB0aGUgMCUga2V5ZnJhbWUgaXMgbWlzc2luZywgY3JlYXRlIGl0IChidXQgb25s
eSBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgb3RoZXIga2V5ZnJhbWUpCiAgICAgaW50IGluaXRp
YWxMaXN0U2l6ZSA9IGxpc3Quc2l6ZSgpOwotICAgIGlmIChpbml0aWFsTGlzdFNpemUgPiAwICYm
IGxpc3QuYmVnaW5LZXlmcmFtZXMoKS0+a2V5KCkgIT0gMCkgeworICAgIGlmIChpbml0aWFsTGlz
dFNpemUgPiAwICYmIGxpc3QuYXQoMCkua2V5KCkgIT0gMCkgewogICAgICAgICBSZWZQdHI8V2Vi
S2l0Q1NTS2V5ZnJhbWVSdWxlPiBrZXlmcmFtZSA9IFdlYktpdENTU0tleWZyYW1lUnVsZTo6Y3Jl
YXRlKCk7CiAgICAgICAgIGtleWZyYW1lLT5zZXRLZXlUZXh0KCIwJSIpOwogICAgICAgICBrZXlm
cmFtZVN0eWxlID0gc3R5bGVGb3JLZXlmcmFtZShlbGVtZW50U3R5bGUsIGtleWZyYW1lLmdldCgp
LCBsaXN0KTsKQEAgLTE0NzUsNyArMTQ3NSw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6a2V5
ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oRWxlbWVudCogZSwgY29uc3QgUmVuZGVyU3R5bGUqCiAg
ICAgfQogCiAgICAgLy8gSWYgdGhlIDEwMCUga2V5ZnJhbWUgaXMgbWlzc2luZywgY3JlYXRlIGl0
IChidXQgb25seSBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgb3RoZXIga2V5ZnJhbWUpCi0gICAg
aWYgKGluaXRpYWxMaXN0U2l6ZSA+IDAgJiYgKGxpc3QuZW5kS2V5ZnJhbWVzKCkgLSAxKS0+a2V5
KCkgIT0gMSkgeworICAgIGlmIChpbml0aWFsTGlzdFNpemUgPiAwICYmIChsaXN0LmF0KGxpc3Qu
c2l6ZSgpIC0gMSkua2V5KCkgIT0gMSkpIHsKICAgICAgICAgUmVmUHRyPFdlYktpdENTU0tleWZy
YW1lUnVsZT4ga2V5ZnJhbWUgPSBXZWJLaXRDU1NLZXlmcmFtZVJ1bGU6OmNyZWF0ZSgpOwogICAg
ICAgICBrZXlmcmFtZS0+c2V0S2V5VGV4dCgiMTAwJSIpOwogICAgICAgICBrZXlmcmFtZVN0eWxl
ID0gc3R5bGVGb3JLZXlmcmFtZShlbGVtZW50U3R5bGUsIGtleWZyYW1lLmdldCgpLCBsaXN0KTsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3Bw
IGIvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHAKaW5kZXggMmYy
Y2ZjMGMyNmQ2NjY4YWY3OWU4NjE1YzM3YzRhMzUxOTdmMGYyZS4uZjc5OTgyNzc3ZDMxYTY2MjEy
MGRkZTFlOTVhN2ViMTc1Y2QwY2FkOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL2FuaW1hdGlv
bi9LZXlmcmFtZUFuaW1hdGlvbi5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlm
cmFtZUFuaW1hdGlvbi5jcHAKQEAgLTgwLDE5ICs4MCwyMCBAQCB2b2lkIEtleWZyYW1lQW5pbWF0
aW9uOjpnZXRLZXlmcmFtZUFuaW1hdGlvbkludGVydmFsKGNvbnN0IFJlbmRlclN0eWxlKiYgZnJv
bVN0eQogCiAgICAgZG91YmxlIHNjYWxlID0gMTsKICAgICBkb3VibGUgb2Zmc2V0ID0gMDsKLSAg
ICBWZWN0b3I8S2V5ZnJhbWVWYWx1ZT46OmNvbnN0X2l0ZXJhdG9yIGVuZEtleWZyYW1lcyA9IG1f
a2V5ZnJhbWVzLmVuZEtleWZyYW1lcygpOwotICAgIGZvciAoVmVjdG9yPEtleWZyYW1lVmFsdWU+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVzLmJlZ2luS2V5ZnJhbWVzKCk7IGl0ICE9
IGVuZEtleWZyYW1lczsgKytpdCkgewotICAgICAgICBpZiAodCA8IGl0LT5rZXkoKSkgeworICAg
IHNpemVfdCBudW1LZXlmcmFtZXMgPSBtX2tleWZyYW1lcy5zaXplKCk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBudW1LZXlmcmFtZXM7ICsraSkgeworICAgICAgICBjb25zdCBLZXlmcmFt
ZVZhbHVlJiBjdXJyS2V5ZnJhbWUgPSBtX2tleWZyYW1lcy5hdChpKTsKKyAgICAgICAgaWYgKHQg
PCBjdXJyS2V5ZnJhbWUua2V5KCkpIHsKICAgICAgICAgICAgIC8vIFRoZSBmaXJzdCBrZXkgc2hv
dWxkIGFsd2F5cyBiZSAwLCBzbyB3ZSBzaG91bGQgbmV2ZXIgc3VjY2VlZCBvbiB0aGUgZmlyc3Qg
a2V5CiAgICAgICAgICAgICBpZiAoIWZyb21TdHlsZSkKICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIHNjYWxlID0gMS4wIC8gKGl0LT5rZXkoKSAtIG9mZnNldCk7Ci0gICAgICAg
ICAgICB0b1N0eWxlID0gaXQtPnN0eWxlKCk7CisgICAgICAgICAgICBzY2FsZSA9IDEuMCAvIChj
dXJyS2V5ZnJhbWUua2V5KCkgLSBvZmZzZXQpOworICAgICAgICAgICAgdG9TdHlsZSA9IGN1cnJL
ZXlmcmFtZS5zdHlsZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAg
ICBvZmZzZXQgPSBpdC0+a2V5KCk7Ci0gICAgICAgIGZyb21TdHlsZSA9IGl0LT5zdHlsZSgpOwor
ICAgICAgICBvZmZzZXQgPSBjdXJyS2V5ZnJhbWUua2V5KCk7CisgICAgICAgIGZyb21TdHlsZSA9
IGN1cnJLZXlmcmFtZS5zdHlsZSgpOwogICAgIH0KIAogICAgIGlmICghZnJvbVN0eWxlIHx8ICF0
b1N0eWxlKQpAQCAtMzQ2LDI3ICszNDcsMjcgQEAgdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6dmFs
aWRhdGVUcmFuc2Zvcm1GdW5jdGlvbkxpc3QoKQogICAgIGlmIChtX2tleWZyYW1lcy5zaXplKCkg
PCAyIHx8ICFtX2tleWZyYW1lcy5jb250YWluc1Byb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VHJh
bnNmb3JtKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPEtleWZyYW1lVmFsdWU+Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBtX2tleWZyYW1lcy5lbmRLZXlmcmFtZXMoKTsKLQogICAgIC8v
IEVtcHR5IHRyYW5zZm9ybXMgbWF0Y2ggYW55dGhpbmcsIHNvIGZpbmQgdGhlIGZpcnN0IG5vbi1l
bXB0eSBlbnRyeSBhcyB0aGUgcmVmZXJlbmNlCi0gICAgc2l6ZV90IGZpcnN0SW5kZXggPSAwOwot
ICAgIFZlY3RvcjxLZXlmcmFtZVZhbHVlPjo6Y29uc3RfaXRlcmF0b3IgZmlyc3RJdCA9IGVuZDsK
LSAgICAKLSAgICBmb3IgKFZlY3RvcjxLZXlmcmFtZVZhbHVlPjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX2tleWZyYW1lcy5iZWdpbktleWZyYW1lcygpOyBpdCAhPSBlbmQ7ICsraXQsICsrZmlyc3RJ
bmRleCkgewotICAgICAgICBpZiAoaXQtPnN0eWxlKCktPnRyYW5zZm9ybSgpLm9wZXJhdGlvbnMo
KS5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICBmaXJzdEl0ID0gaXQ7CisgICAgc2l6ZV90IG51
bUtleWZyYW1lcyA9IG1fa2V5ZnJhbWVzLnNpemUoKTsKKyAgICBzaXplX3QgZmlyc3ROb25FbXB0
eVRyYW5zZm9ybUtleWZyYW1lSW5kZXggPSBudW1LZXlmcmFtZXM7CisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG51bUtleWZyYW1lczsgKytpKSB7CisgICAgICAgIGNvbnN0IEtleWZyYW1l
VmFsdWUmIGN1cnJLZXlmcmFtZSA9IG1fa2V5ZnJhbWVzLmF0KGkpOworICAgICAgICBpZiAoY3Vy
cktleWZyYW1lLnN0eWxlKCktPnRyYW5zZm9ybSgpLm9wZXJhdGlvbnMoKS5zaXplKCkpIHsKKyAg
ICAgICAgICAgIGZpcnN0Tm9uRW1wdHlUcmFuc2Zvcm1LZXlmcmFtZUluZGV4ID0gaTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGlmIChmaXJzdEl0ID09
IGVuZCkKKyAgICBpZiAoZmlyc3ROb25FbXB0eVRyYW5zZm9ybUtleWZyYW1lSW5kZXggPT0gbnVt
S2V5ZnJhbWVzKQogICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgIGNvbnN0IFRyYW5zZm9y
bU9wZXJhdGlvbnMqIGZpcnN0VmFsID0gJmZpcnN0SXQtPnN0eWxlKCktPnRyYW5zZm9ybSgpOwor
ICAgIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIGZpcnN0VmFsID0gJm1fa2V5ZnJhbWVzLmF0
KGZpcnN0Tm9uRW1wdHlUcmFuc2Zvcm1LZXlmcmFtZUluZGV4KS5zdHlsZSgpLT50cmFuc2Zvcm0o
KTsKICAgICAKICAgICAvLyBTZWUgaWYgdGhlIGtleWZyYW1lcyBhcmUgdmFsaWQKLSAgICBmb3Ig
KFZlY3RvcjxLZXlmcmFtZVZhbHVlPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBmaXJzdEl0KzE7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiB2YWwg
PSAmaXQtPnN0eWxlKCktPnRyYW5zZm9ybSgpOworICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdE5v
bkVtcHR5VHJhbnNmb3JtS2V5ZnJhbWVJbmRleCArIDE7IGkgPCBudW1LZXlmcmFtZXM7ICsraSkg
eworICAgICAgICBjb25zdCBLZXlmcmFtZVZhbHVlJiBjdXJyS2V5ZnJhbWUgPSBtX2tleWZyYW1l
cy5hdChpKTsKKyAgICAgICAgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogdmFsID0gJmN1cnJL
ZXlmcmFtZS5zdHlsZSgpLT50cmFuc2Zvcm0oKTsKICAgICAgICAgCiAgICAgICAgIC8vIEEgbnVs
bCB0cmFuc2Zvcm0gbWF0Y2hlcyBhbnl0aGluZwogICAgICAgICBpZiAodmFsLT5vcGVyYXRpb25z
KCkuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJC
YWNraW5nLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKaW5k
ZXggOTZkNmQxYTA5MTgwMzI4ZmE2MzZhYmVmOWRmN2YwMGYxZjg0MmFmMS4uNDU2M2M3YWIwMGIy
YzgwZmNjMzRjNmU1M2RhNTViMDgyZGJjNzU4NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckJhY2tpbmcuY3BwCkBAIC0xMTE0LDkgKzExMTQsMTEgQEAgYm9vbCBSZW5kZXJMYXllckJh
Y2tpbmc6OnN0YXJ0QW5pbWF0aW9uKGRvdWJsZSB0aW1lT2Zmc2V0LCBjb25zdCBBbmltYXRpb24q
IGFuaW0KICAgICBLZXlmcmFtZVZhbHVlTGlzdCB0cmFuc2Zvcm1WZWN0b3IoQW5pbWF0ZWRQcm9w
ZXJ0eVdlYmtpdFRyYW5zZm9ybSk7CiAgICAgS2V5ZnJhbWVWYWx1ZUxpc3Qgb3BhY2l0eVZlY3Rv
cihBbmltYXRlZFByb3BlcnR5T3BhY2l0eSk7CiAKLSAgICBmb3IgKFZlY3RvcjxLZXlmcmFtZVZh
bHVlPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBrZXlmcmFtZXMuYmVnaW5LZXlmcmFtZXMoKTsgaXQg
IT0ga2V5ZnJhbWVzLmVuZEtleWZyYW1lcygpOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFJlbmRl
clN0eWxlKiBrZXlmcmFtZVN0eWxlID0gaXQtPnN0eWxlKCk7Ci0gICAgICAgIGZsb2F0IGtleSA9
IGl0LT5rZXkoKTsKKyAgICBzaXplX3QgbnVtS2V5ZnJhbWVzID0ga2V5ZnJhbWVzLnNpemUoKTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUtleWZyYW1lczsgKytpKSB7CisgICAgICAg
IGNvbnN0IEtleWZyYW1lVmFsdWUmIGN1cnJLZXlmcmFtZSA9IGtleWZyYW1lcy5hdChpKTsKKyAg
ICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIGtleWZyYW1lU3R5bGUgPSBjdXJyS2V5ZnJhbWUuc3R5
bGUoKTsKKyAgICAgICAgZmxvYXQga2V5ID0gY3VycktleWZyYW1lLmtleSgpOwogCiAgICAgICAg
IGlmICgha2V5ZnJhbWVTdHlsZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvS2V5ZnJhbWVMaXN0LmggYi9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9LZXlmcmFtZUxpc3QuaAppbmRleCBiYjVmMTgwZTIwOWUxMjA1NzQxZmYxOGY3ZjEw
ZjgyYjI0NmJmZDg5Li43YmZmZDRmZDFiZTgzMmI2YWQ3NThhNzNlOGU0YjhlZmJkMzBlNWY4IDEw
MDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9LZXlmcmFtZUxpc3QuaAorKysgYi9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9LZXlmcmFtZUxpc3QuaApAQCAtNzUsOCArNzUsOCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBjbGVhcigpOwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fa2V5ZnJhbWVzLmlzRW1wdHkoKTsgfQogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9rZXlmcmFtZXMuc2l6ZSgpOyB9Ci0gICAgVmVjdG9yPEtleWZyYW1lVmFsdWU+Ojpj
b25zdF9pdGVyYXRvciBiZWdpbktleWZyYW1lcygpIGNvbnN0IHsgcmV0dXJuIG1fa2V5ZnJhbWVz
LmJlZ2luKCk7IH0KLSAgICBWZWN0b3I8S2V5ZnJhbWVWYWx1ZT46OmNvbnN0X2l0ZXJhdG9yIGVu
ZEtleWZyYW1lcygpIGNvbnN0IHsgcmV0dXJuIG1fa2V5ZnJhbWVzLmVuZCgpOyB9CisgICAgY29u
c3QgS2V5ZnJhbWVWYWx1ZSYgYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2tleWZy
YW1lc1tpbmRleF07IH0KKyAgICBjb25zdCBWZWN0b3I8S2V5ZnJhbWVWYWx1ZT4mIGtleWZyYW1l
cygpIGNvbnN0IHsgcmV0dXJuIG1fa2V5ZnJhbWVzOyB9CiAKIHByaXZhdGU6CiAgICAgQXRvbWlj
U3RyaW5nIG1fYW5pbWF0aW9uTmFtZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65207</attachid>
            <date>2010-08-23 20:08:57 -0700</date>
            <delta_ts>2010-08-28 10:39:44 -0700</delta_ts>
            <desc>Patch for some initial cleanup</desc>
            <filename>bug-40794-20100823200856.patch</filename>
            <type>text/plain</type>
            <size>7822</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NDQwMzQ0ZGZlZDRmNTc0Y2JkN2M0NTdlNGFhMzcxNTcyMThhM2M3MS4uMzdkYzM1NzA1NmZiNmM2
MjEwNTBmNTZiZmU3NWRkZmUzYTg4MDI2NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwyNyBAQAogMjAxMC0wOC0yMyAgU2lt
b24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAorICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIHByb3BlcnRpZXMgYXJlIG1pc3Npbmcg
ZnJvbSBhbmltYXRpb24ga2V5ZnJhbWVzLCBpbnRlcnBvbGF0ZSBiZXR3ZWVuIHRob3NlIGtleWZy
YW1lcyB0aGF0IHNwZWNpZnkgdGhlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDA3OTQKKworICAgICAgICBTb21lIHByZWxpbWluYXJ5IGNsZWFudXA7
IGZvciB2ZWN0b3JzLCBwcmVmZXIgaW5kZXhlZCBhY2Nlc3MgcmF0aGVyIHRoYW4gdXNpbmcgaXRl
cmF0b3JzLgorICAgICAgICAKKyAgICAgICAgTm8gYmVoYXZpb3IgY2hhbmdlcy4KKworICAgICAg
ICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxl
U2VsZWN0b3I6OmtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKToKKyAgICAgICAgKiBwYWdlL2Fu
aW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpLZXlmcmFt
ZUFuaW1hdGlvbjo6Z2V0S2V5ZnJhbWVBbmltYXRpb25JbnRlcnZhbCk6CisgICAgICAgIChXZWJD
b3JlOjpLZXlmcmFtZUFuaW1hdGlvbjo6dmFsaWRhdGVUcmFuc2Zvcm1GdW5jdGlvbkxpc3QpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpzdGFydEFuaW1hdGlvbik6CisgICAgICAgICogcmVu
ZGVyaW5nL3N0eWxlL0tleWZyYW1lTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVM
aXN0OjphdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlmcmFtZUxpc3Q6OmtleWZyYW1lcyk6CisK
KzIwMTAtMDgtMjMgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKICAg
ICAgICAgUmV2aWV3ZWQgYnkgQWxleGV5IFByb3NrdXJ5YWtvdi4KIAogICAgICAgICBUcmVlV2Fs
a2VyIGlzIG5vdCBjYWxsaW5nIGFjY2VwdE5vZGUgZnVuY3Rpb24gaW4gZmlsdGVyIG9iamVjdApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAgYi9XZWJDb3JlL2Nz
cy9DU1NTdHlsZVNlbGVjdG9yLmNwcAppbmRleCA0ZWU0OWQwNjEyY2MyMTQ3NzM5ZTc0ZTM4ZWQz
ZmRlZTViMTMxNWI3Li5hZjhkMDVmYjQ0YzUzZGEzNjgyZDVhZTMyMzdmNjBhOGJhYTY0NmMzIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAorKysgYi9XZWJDb3Jl
L2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcApAQCAtMTQ2Nyw3ICsxNDY3LDcgQEAgdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjprZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiBlLCBjb25z
dCBSZW5kZXJTdHlsZSoKICAgICAKICAgICAvLyBJZiB0aGUgMCUga2V5ZnJhbWUgaXMgbWlzc2lu
ZywgY3JlYXRlIGl0IChidXQgb25seSBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgb3RoZXIga2V5
ZnJhbWUpCiAgICAgaW50IGluaXRpYWxMaXN0U2l6ZSA9IGxpc3Quc2l6ZSgpOwotICAgIGlmIChp
bml0aWFsTGlzdFNpemUgPiAwICYmIGxpc3QuYmVnaW5LZXlmcmFtZXMoKS0+a2V5KCkgIT0gMCkg
eworICAgIGlmIChpbml0aWFsTGlzdFNpemUgPiAwICYmIGxpc3RbMF0ua2V5KCkgIT0gMCkgewog
ICAgICAgICBSZWZQdHI8V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlPiBrZXlmcmFtZSA9IFdlYktpdENT
U0tleWZyYW1lUnVsZTo6Y3JlYXRlKCk7CiAgICAgICAgIGtleWZyYW1lLT5zZXRLZXlUZXh0KCIw
JSIpOwogICAgICAgICBrZXlmcmFtZVN0eWxlID0gc3R5bGVGb3JLZXlmcmFtZShlbGVtZW50U3R5
bGUsIGtleWZyYW1lLmdldCgpLCBsaXN0KTsKQEAgLTE0NzUsNyArMTQ3NSw3IEBAIHZvaWQgQ1NT
U3R5bGVTZWxlY3Rvcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oRWxlbWVudCogZSwgY29u
c3QgUmVuZGVyU3R5bGUqCiAgICAgfQogCiAgICAgLy8gSWYgdGhlIDEwMCUga2V5ZnJhbWUgaXMg
bWlzc2luZywgY3JlYXRlIGl0IChidXQgb25seSBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgb3Ro
ZXIga2V5ZnJhbWUpCi0gICAgaWYgKGluaXRpYWxMaXN0U2l6ZSA+IDAgJiYgKGxpc3QuZW5kS2V5
ZnJhbWVzKCkgLSAxKS0+a2V5KCkgIT0gMSkgeworICAgIGlmIChpbml0aWFsTGlzdFNpemUgPiAw
ICYmIChsaXN0W2xpc3Quc2l6ZSgpIC0gMV0ua2V5KCkgIT0gMSkpIHsKICAgICAgICAgUmVmUHRy
PFdlYktpdENTU0tleWZyYW1lUnVsZT4ga2V5ZnJhbWUgPSBXZWJLaXRDU1NLZXlmcmFtZVJ1bGU6
OmNyZWF0ZSgpOwogICAgICAgICBrZXlmcmFtZS0+c2V0S2V5VGV4dCgiMTAwJSIpOwogICAgICAg
ICBrZXlmcmFtZVN0eWxlID0gc3R5bGVGb3JLZXlmcmFtZShlbGVtZW50U3R5bGUsIGtleWZyYW1l
LmdldCgpLCBsaXN0KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJh
bWVBbmltYXRpb24uY3BwIGIvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlv
bi5jcHAKaW5kZXggMmYyY2ZjMGMyNmQ2NjY4YWY3OWU4NjE1YzM3YzRhMzUxOTdmMGYyZS4uNjAz
MmFlY2RlZGY0Y2YxZTI5Y2FiNTA2YTQ0NDY0ZmZiZWM4YjI5NCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHAKKysrIGIvV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHAKQEAgLTgwLDE5ICs4MCwyMCBAQCB2b2lk
IEtleWZyYW1lQW5pbWF0aW9uOjpnZXRLZXlmcmFtZUFuaW1hdGlvbkludGVydmFsKGNvbnN0IFJl
bmRlclN0eWxlKiYgZnJvbVN0eQogCiAgICAgZG91YmxlIHNjYWxlID0gMTsKICAgICBkb3VibGUg
b2Zmc2V0ID0gMDsKLSAgICBWZWN0b3I8S2V5ZnJhbWVWYWx1ZT46OmNvbnN0X2l0ZXJhdG9yIGVu
ZEtleWZyYW1lcyA9IG1fa2V5ZnJhbWVzLmVuZEtleWZyYW1lcygpOwotICAgIGZvciAoVmVjdG9y
PEtleWZyYW1lVmFsdWU+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVzLmJlZ2luS2V5
ZnJhbWVzKCk7IGl0ICE9IGVuZEtleWZyYW1lczsgKytpdCkgewotICAgICAgICBpZiAodCA8IGl0
LT5rZXkoKSkgeworICAgIHNpemVfdCBudW1LZXlmcmFtZXMgPSBtX2tleWZyYW1lcy5zaXplKCk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1LZXlmcmFtZXM7ICsraSkgeworICAgICAg
ICBjb25zdCBLZXlmcmFtZVZhbHVlJiBjdXJyS2V5ZnJhbWUgPSBtX2tleWZyYW1lc1tpXTsKKyAg
ICAgICAgaWYgKHQgPCBjdXJyS2V5ZnJhbWUua2V5KCkpIHsKICAgICAgICAgICAgIC8vIFRoZSBm
aXJzdCBrZXkgc2hvdWxkIGFsd2F5cyBiZSAwLCBzbyB3ZSBzaG91bGQgbmV2ZXIgc3VjY2VlZCBv
biB0aGUgZmlyc3Qga2V5CiAgICAgICAgICAgICBpZiAoIWZyb21TdHlsZSkKICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIHNjYWxlID0gMS4wIC8gKGl0LT5rZXkoKSAtIG9mZnNl
dCk7Ci0gICAgICAgICAgICB0b1N0eWxlID0gaXQtPnN0eWxlKCk7CisgICAgICAgICAgICBzY2Fs
ZSA9IDEuMCAvIChjdXJyS2V5ZnJhbWUua2V5KCkgLSBvZmZzZXQpOworICAgICAgICAgICAgdG9T
dHlsZSA9IGN1cnJLZXlmcmFtZS5zdHlsZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KIAotICAgICAgICBvZmZzZXQgPSBpdC0+a2V5KCk7Ci0gICAgICAgIGZyb21TdHlsZSA9IGl0
LT5zdHlsZSgpOworICAgICAgICBvZmZzZXQgPSBjdXJyS2V5ZnJhbWUua2V5KCk7CisgICAgICAg
IGZyb21TdHlsZSA9IGN1cnJLZXlmcmFtZS5zdHlsZSgpOwogICAgIH0KIAogICAgIGlmICghZnJv
bVN0eWxlIHx8ICF0b1N0eWxlKQpAQCAtMzQ2LDI3ICszNDcsMjcgQEAgdm9pZCBLZXlmcmFtZUFu
aW1hdGlvbjo6dmFsaWRhdGVUcmFuc2Zvcm1GdW5jdGlvbkxpc3QoKQogICAgIGlmIChtX2tleWZy
YW1lcy5zaXplKCkgPCAyIHx8ICFtX2tleWZyYW1lcy5jb250YWluc1Byb3BlcnR5KENTU1Byb3Bl
cnR5V2Via2l0VHJhbnNmb3JtKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPEtleWZy
YW1lVmFsdWU+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2tleWZyYW1lcy5lbmRLZXlmcmFtZXMo
KTsKLQogICAgIC8vIEVtcHR5IHRyYW5zZm9ybXMgbWF0Y2ggYW55dGhpbmcsIHNvIGZpbmQgdGhl
IGZpcnN0IG5vbi1lbXB0eSBlbnRyeSBhcyB0aGUgcmVmZXJlbmNlCi0gICAgc2l6ZV90IGZpcnN0
SW5kZXggPSAwOwotICAgIFZlY3RvcjxLZXlmcmFtZVZhbHVlPjo6Y29uc3RfaXRlcmF0b3IgZmly
c3RJdCA9IGVuZDsKLSAgICAKLSAgICBmb3IgKFZlY3RvcjxLZXlmcmFtZVZhbHVlPjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lcy5iZWdpbktleWZyYW1lcygpOyBpdCAhPSBlbmQ7ICsr
aXQsICsrZmlyc3RJbmRleCkgewotICAgICAgICBpZiAoaXQtPnN0eWxlKCktPnRyYW5zZm9ybSgp
Lm9wZXJhdGlvbnMoKS5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICBmaXJzdEl0ID0gaXQ7Cisg
ICAgc2l6ZV90IG51bUtleWZyYW1lcyA9IG1fa2V5ZnJhbWVzLnNpemUoKTsKKyAgICBzaXplX3Qg
Zmlyc3ROb25FbXB0eVRyYW5zZm9ybUtleWZyYW1lSW5kZXggPSBudW1LZXlmcmFtZXM7CisKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUtleWZyYW1lczsgKytpKSB7CisgICAgICAgIGNv
bnN0IEtleWZyYW1lVmFsdWUmIGN1cnJLZXlmcmFtZSA9IG1fa2V5ZnJhbWVzW2ldOworICAgICAg
ICBpZiAoY3VycktleWZyYW1lLnN0eWxlKCktPnRyYW5zZm9ybSgpLm9wZXJhdGlvbnMoKS5zaXpl
KCkpIHsKKyAgICAgICAgICAgIGZpcnN0Tm9uRW1wdHlUcmFuc2Zvcm1LZXlmcmFtZUluZGV4ID0g
aTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGlmIChm
aXJzdEl0ID09IGVuZCkKKyAgICBpZiAoZmlyc3ROb25FbXB0eVRyYW5zZm9ybUtleWZyYW1lSW5k
ZXggPT0gbnVtS2V5ZnJhbWVzKQogICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgIGNvbnN0
IFRyYW5zZm9ybU9wZXJhdGlvbnMqIGZpcnN0VmFsID0gJmZpcnN0SXQtPnN0eWxlKCktPnRyYW5z
Zm9ybSgpOworICAgIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIGZpcnN0VmFsID0gJm1fa2V5
ZnJhbWVzW2ZpcnN0Tm9uRW1wdHlUcmFuc2Zvcm1LZXlmcmFtZUluZGV4XS5zdHlsZSgpLT50cmFu
c2Zvcm0oKTsKICAgICAKICAgICAvLyBTZWUgaWYgdGhlIGtleWZyYW1lcyBhcmUgdmFsaWQKLSAg
ICBmb3IgKFZlY3RvcjxLZXlmcmFtZVZhbHVlPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBmaXJzdEl0
KzE7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25z
KiB2YWwgPSAmaXQtPnN0eWxlKCktPnRyYW5zZm9ybSgpOworICAgIGZvciAoc2l6ZV90IGkgPSBm
aXJzdE5vbkVtcHR5VHJhbnNmb3JtS2V5ZnJhbWVJbmRleCArIDE7IGkgPCBudW1LZXlmcmFtZXM7
ICsraSkgeworICAgICAgICBjb25zdCBLZXlmcmFtZVZhbHVlJiBjdXJyS2V5ZnJhbWUgPSBtX2tl
eWZyYW1lc1tpXTsKKyAgICAgICAgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogdmFsID0gJmN1
cnJLZXlmcmFtZS5zdHlsZSgpLT50cmFuc2Zvcm0oKTsKICAgICAgICAgCiAgICAgICAgIC8vIEEg
bnVsbCB0cmFuc2Zvcm0gbWF0Y2hlcyBhbnl0aGluZwogICAgICAgICBpZiAodmFsLT5vcGVyYXRp
b25zKCkuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJCYWNraW5nLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAK
aW5kZXggOTZkNmQxYTA5MTgwMzI4ZmE2MzZhYmVmOWRmN2YwMGYxZjg0MmFmMS4uODJlMTJhNTY3
ZTU5YWZhNDNjYWJjZTVhNzU2MzI1ZDZkMzk4YTg4OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckJhY2tpbmcuY3BwCkBAIC0xMTE0LDkgKzExMTQsMTEgQEAgYm9vbCBSZW5kZXJMYXll
ckJhY2tpbmc6OnN0YXJ0QW5pbWF0aW9uKGRvdWJsZSB0aW1lT2Zmc2V0LCBjb25zdCBBbmltYXRp
b24qIGFuaW0KICAgICBLZXlmcmFtZVZhbHVlTGlzdCB0cmFuc2Zvcm1WZWN0b3IoQW5pbWF0ZWRQ
cm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSk7CiAgICAgS2V5ZnJhbWVWYWx1ZUxpc3Qgb3BhY2l0eVZl
Y3RvcihBbmltYXRlZFByb3BlcnR5T3BhY2l0eSk7CiAKLSAgICBmb3IgKFZlY3RvcjxLZXlmcmFt
ZVZhbHVlPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBrZXlmcmFtZXMuYmVnaW5LZXlmcmFtZXMoKTsg
aXQgIT0ga2V5ZnJhbWVzLmVuZEtleWZyYW1lcygpOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFJl
bmRlclN0eWxlKiBrZXlmcmFtZVN0eWxlID0gaXQtPnN0eWxlKCk7Ci0gICAgICAgIGZsb2F0IGtl
eSA9IGl0LT5rZXkoKTsKKyAgICBzaXplX3QgbnVtS2V5ZnJhbWVzID0ga2V5ZnJhbWVzLnNpemUo
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUtleWZyYW1lczsgKytpKSB7CisgICAg
ICAgIGNvbnN0IEtleWZyYW1lVmFsdWUmIGN1cnJLZXlmcmFtZSA9IGtleWZyYW1lc1tpXTsKKyAg
ICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIGtleWZyYW1lU3R5bGUgPSBjdXJyS2V5ZnJhbWUuc3R5
bGUoKTsKKyAgICAgICAgZmxvYXQga2V5ID0gY3VycktleWZyYW1lLmtleSgpOwogCiAgICAgICAg
IGlmICgha2V5ZnJhbWVTdHlsZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvS2V5ZnJhbWVMaXN0LmggYi9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9LZXlmcmFtZUxpc3QuaAppbmRleCBiYjVmMTgwZTIwOWUxMjA1NzQxZmYxOGY3ZjEw
ZjgyYjI0NmJmZDg5Li40NGEyYmRmODM2MTdkNmY2MmVhMjY2ZTk2OGNhMTFjZGZjM2I3OGZiIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9LZXlmcmFtZUxpc3QuaAorKysgYi9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9LZXlmcmFtZUxpc3QuaApAQCAtNzUsOCArNzUsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBjbGVhcigpOwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fa2V5ZnJhbWVzLmlzRW1wdHkoKTsgfQogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9rZXlmcmFtZXMuc2l6ZSgpOyB9Ci0gICAgVmVjdG9yPEtleWZyYW1lVmFsdWU+Ojpj
b25zdF9pdGVyYXRvciBiZWdpbktleWZyYW1lcygpIGNvbnN0IHsgcmV0dXJuIG1fa2V5ZnJhbWVz
LmJlZ2luKCk7IH0KLSAgICBWZWN0b3I8S2V5ZnJhbWVWYWx1ZT46OmNvbnN0X2l0ZXJhdG9yIGVu
ZEtleWZyYW1lcygpIGNvbnN0IHsgcmV0dXJuIG1fa2V5ZnJhbWVzLmVuZCgpOyB9CisgICAgY29u
c3QgS2V5ZnJhbWVWYWx1ZSYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IG1fa2V5ZnJhbWVzW2luZGV4XTsgfQogCiBwcml2YXRlOgogICAgIEF0b21pY1N0cmluZyBtX2Fu
aW1hdGlvbk5hbWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65858</attachid>
            <date>2010-08-29 11:40:50 -0700</date>
            <delta_ts>2010-08-29 12:56:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40794-20100829114048.patch</filename>
            <type>text/plain</type>
            <size>34362</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2NjJjNTI4NmIzNTk2NmM5NTA0ODcyZThlYzQzZDVjMzcyOTAyYzI4Li41Y2VhMTJm
MGYwZTkxMjlkOGY4NGUyOTU1ZDM0NWRiY2NjMzllNzVkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAK
KzIwMTAtMDgtMjkgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2hlbiBwcm9wZXJ0
aWVzIGFyZSBtaXNzaW5nIGZyb20gYW5pbWF0aW9uIGtleWZyYW1lcywgaW50ZXJwb2xhdGUgYmV0
d2VlbiB0aG9zZSBrZXlmcmFtZXMgdGhhdCBzcGVjaWZ5IHRoZW0KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwNzk0CisKKyAgICAgICAgVGVzdGNhc2Vz
IGZvciBrZXlmcmFtZXMgd2l0aCBtaXNzaW5nIHByb3BlcnRpZXM7IHJlcGVhdGluZyBhbmQgbm9u
LXJlcGVhdGluZy4KKworICAgICAgICAqIGFuaW1hdGlvbnMvbWlzc2luZy1mcm9tLXRvLXRyYW5z
Zm9ybXMuaHRtbDoKKyAgICAgICAgKiBhbmltYXRpb25zL21pc3NpbmctZnJvbS10by5odG1sOgor
ICAgICAgICAqIGFuaW1hdGlvbnMvbWlzc2luZy1rZXlmcmFtZS1wcm9wZXJ0aWVzLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogYW5pbWF0aW9ucy9taXNzaW5nLWtleWZyYW1lLXByb3Bl
cnRpZXMtcmVwZWF0aW5nLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogYW5pbWF0aW9u
cy9taXNzaW5nLWtleWZyYW1lLXByb3BlcnRpZXMtcmVwZWF0aW5nLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGFuaW1hdGlvbnMvbWlzc2luZy1rZXlmcmFtZS1wcm9wZXJ0aWVzLXRpbWluZy1mdW5j
dGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGFuaW1hdGlvbnMvbWlzc2luZy1r
ZXlmcmFtZS1wcm9wZXJ0aWVzLXRpbWluZy1mdW5jdGlvbi5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBhbmltYXRpb25zL21pc3Npbmcta2V5ZnJhbWUtcHJvcGVydGllcy5odG1sOiBBZGRlZC4KKwog
MjAxMC0wOC0yOCAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYW5pbWF0aW9u
cy9taXNzaW5nLWZyb20tdG8tdHJhbnNmb3Jtcy5odG1sIGIvTGF5b3V0VGVzdHMvYW5pbWF0aW9u
cy9taXNzaW5nLWZyb20tdG8tdHJhbnNmb3Jtcy5odG1sCmluZGV4IDExMGE1YTIwNjllNWUzNzQ4
ZTUzNDk3NTZiY2Q5ZWM3NWJhYzcwYjEuLjQ0Zjk1OGIzYjExMmU5NjVmNTU1Y2I1YzQ1ZWZmZmY2
YTA2ZGE5Y2IgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2FuaW1hdGlvbnMvbWlzc2luZy1mcm9t
LXRvLXRyYW5zZm9ybXMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9hbmltYXRpb25zL21pc3Npbmct
ZnJvbS10by10cmFuc2Zvcm1zLmh0bWwKQEAgLTg5LDcgKzg5LDcgQEAKICAgICBdOwogCiAgICAg
cnVuQW5pbWF0aW9uVGVzdChleHBlY3RlZFZhbHVlcywgZnVuY3Rpb24oKSB7Ci0gICAgICBpZiAo
bGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpIHsKICAgICAgICAgICBpZiAobGF5b3V0VGVzdENvbnRyb2xsZXIucGF1c2VBbmltYXRp
b25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoImFuaW01IiwgMC4xLCAiYm94NSIpKQogICAgICAgICAg
ICAgICByZXN1bHQgKz0gIkZBSUwgLSBib3g1IGFuaW1hdGlvbiB3YXMgcnVubmluZzxicj4iOwog
ICAgICAgICAgIGVsc2UgCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9hbmltYXRpb25zL21pc3Np
bmctZnJvbS10by5odG1sIGIvTGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9taXNzaW5nLWZyb20tdG8u
aHRtbAppbmRleCA5YjkyYTQ5MDg2ODQ4YjE0MTExMmZkOGU5YWRmOTdhYmY3MWNmZDBjLi5hMjhh
NTMwYzU2YmM5MWU2M2Q5YzRiYjc3ZDk0MTNkNDNkZDRhZTM2IDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9hbmltYXRpb25zL21pc3NpbmctZnJvbS10by5odG1sCisrKyBiL0xheW91dFRlc3RzL2Fu
aW1hdGlvbnMvbWlzc2luZy1mcm9tLXRvLmh0bWwKQEAgLTg4LDcgKzg4LDcgQEAKICAgICBdOwog
CiAgICAgcnVuQW5pbWF0aW9uVGVzdChleHBlY3RlZFZhbHVlcywgZnVuY3Rpb24oKSB7Ci0gICAg
ICBpZiAobGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpIHsKICAgICAgICAgICBpZiAobGF5b3V0VGVzdENvbnRyb2xsZXIucGF1c2VB
bmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoImFuaW01IiwgMC4xLCAiYm94NSIpKQogICAg
ICAgICAgICAgICByZXN1bHQgKz0gIkZBSUwgLSBib3g1IGFuaW1hdGlvbiB3YXMgcnVubmluZzxi
cj4iOwogICAgICAgICAgIGVsc2UgCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9hbmltYXRpb25z
L21pc3Npbmcta2V5ZnJhbWUtcHJvcGVydGllcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9h
bmltYXRpb25zL21pc3Npbmcta2V5ZnJhbWUtcHJvcGVydGllcy1leHBlY3RlZC50eHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uN2NkYzIxYzQ1M2ZjYzBkYzZiNTU3MzgzNTdkY2I4MzUyNGZjMTM5YQotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2FuaW1hdGlvbnMvbWlzc2luZy1rZXlmcmFtZS1wcm9wZXJ0
aWVzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDggQEAKK1BBU1MgLSAibGVmdCIgcHJvcGVydHkg
Zm9yICJib3gxIiBlbGVtZW50IGF0IDFzIHNhdyBzb21ldGhpbmcgY2xvc2UgdG86IDIwMAorUEFT
UyAtICJ3ZWJraXRUcmFuc2Zvcm0uNCIgcHJvcGVydHkgZm9yICJib3gyIiBlbGVtZW50IGF0IDFz
IHNhdyBzb21ldGhpbmcgY2xvc2UgdG86IDIwMAorUEFTUyAtICJvcGFjaXR5IiBwcm9wZXJ0eSBm
b3IgImJveDEiIGVsZW1lbnQgYXQgMC41cyBzYXcgc29tZXRoaW5nIGNsb3NlIHRvOiAwLjUKK1BB
U1MgLSAib3BhY2l0eSIgcHJvcGVydHkgZm9yICJib3gxIiBlbGVtZW50IGF0IDFzIHNhdyBzb21l
dGhpbmcgY2xvc2UgdG86IDAKK1BBU1MgLSAibGVmdCIgcHJvcGVydHkgZm9yICJib3gxIiBlbGVt
ZW50IGF0IDEuNXMgc2F3IHNvbWV0aGluZyBjbG9zZSB0bzogMzAwCitQQVNTIC0gIndlYmtpdFRy
YW5zZm9ybS40IiBwcm9wZXJ0eSBmb3IgImJveDIiIGVsZW1lbnQgYXQgMS41cyBzYXcgc29tZXRo
aW5nIGNsb3NlIHRvOiAzMDAKK1BBU1MgLSAib3BhY2l0eSIgcHJvcGVydHkgZm9yICJib3gxIiBl
bGVtZW50IGF0IDEuNXMgc2F3IHNvbWV0aGluZyBjbG9zZSB0bzogMC41CisKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2FuaW1hdGlvbnMvbWlzc2luZy1rZXlmcmFtZS1wcm9wZXJ0aWVzLXJlcGVh
dGluZy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9hbmltYXRpb25zL21pc3Npbmcta2V5ZnJh
bWUtcHJvcGVydGllcy1yZXBlYXRpbmctZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI5YzYyYjgx
ZmQ4MGY2ODdmNTBkMjYxYWI4YjU4ZDg5ZjhlZTk2ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9hbmltYXRpb25zL21pc3Npbmcta2V5ZnJhbWUtcHJvcGVydGllcy1yZXBlYXRpbmct
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNCBAQAorUEFTUyAtICJsZWZ0IiBwcm9wZXJ0eSBmb3Ig
ImJveDEiIGVsZW1lbnQgYXQgMXMgc2F3IHNvbWV0aGluZyBjbG9zZSB0bzogMTAwCitQQVNTIC0g
ImxlZnQiIHByb3BlcnR5IGZvciAiYm94MSIgZWxlbWVudCBhdCAycyBzYXcgc29tZXRoaW5nIGNs
b3NlIHRvOiAwCitQQVNTIC0gImxlZnQiIHByb3BlcnR5IGZvciAiYm94MSIgZWxlbWVudCBhdCAz
cyBzYXcgc29tZXRoaW5nIGNsb3NlIHRvOiAxMDAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
YW5pbWF0aW9ucy9taXNzaW5nLWtleWZyYW1lLXByb3BlcnRpZXMtcmVwZWF0aW5nLmh0bWwgYi9M
YXlvdXRUZXN0cy9hbmltYXRpb25zL21pc3Npbmcta2V5ZnJhbWUtcHJvcGVydGllcy1yZXBlYXRp
bmcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jNGMyOTllZTQyOTExNzUxMjYyOGNkNjI3NTZhMmMxOWMxOWJk
NGI1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9taXNzaW5nLWtl
eWZyYW1lLXByb3BlcnRpZXMtcmVwZWF0aW5nLmh0bWwKQEAgLTAsMCArMSw1MiBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlh
PSJzY3JlZW4iPgorICAgICNib3gxIHsKKyAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICAg
IGhlaWdodDogMTAwcHg7CisgICAgICB3aWR0aDogMTAwcHg7CisgICAgICBsZWZ0OiAwOworICAg
ICAgYmFja2dyb3VuZC1jb2xvcjogYmx1ZTsKKyAgICAgIG1hcmdpbjogMDsKKyAgICAgIC13ZWJr
aXQtYW5pbWF0aW9uLWR1cmF0aW9uOiAyczsKKyAgICAgIC13ZWJraXQtYW5pbWF0aW9uLXRpbWlu
Zy1mdW5jdGlvbjogbGluZWFyOworICAgICAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNv
dW50OiAyOworICAgICAgLXdlYmtpdC1hbmltYXRpb24tZGlyZWN0aW9uOiBhbHRlcm5hdGU7Cisg
ICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBtb3ZlOworICAgIH0KKyAgICBALXdlYmtpdC1r
ZXlmcmFtZXMgbW92ZSB7CisgICAgICAgIGZyb20geworICAgICAgICAgIG9wYWNpdHk6IDE7Cisg
ICAgICAgIH0KKyAgICAgICAgNTAlIHsKKyAgICAgICAgICBvcGFjaXR5OiAxOworICAgICAgICAg
IGxlZnQ6IDEwMHB4OworICAgICAgICB9CisgICAgICAgIHRvIHsKKyAgICAgICAgICBvcGFjaXR5
OiAxOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qIFRlc3QgcmV2ZXJzaW5nIGFuaW1h
dGlvbiB3aXRoIG1pc3NpbmcgdmFsdWVzICovCisKKyAgPC9zdHlsZT4KKyAgPHNjcmlwdCBzcmM9
ImFuaW1hdGlvbi10ZXN0LWhlbHBlcnMuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgY2hhcnNl
dD0idXRmLTgiPjwvc2NyaXB0PgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgY2hh
cnNldD0idXRmLTgiPgorICAgIAorICAgIGNvbnN0IGV4cGVjdGVkVmFsdWVzID0gWworICAgICAg
Ly8gW2FuaW1hdGlvbi1uYW1lLCB0aW1lLCBlbGVtZW50LWlkLCBwcm9wZXJ0eSwgZXhwZWN0ZWQt
dmFsdWUsIHRvbGVyYW5jZV0KKyAgICAgIFsibW92ZSIsIDEsICJib3gxIiwgImxlZnQiLCAxMDAs
IDE1XSwKKyAgICAgIFsibW92ZSIsIDIsICJib3gxIiwgImxlZnQiLCAwLCAxNV0sCisgICAgICBb
Im1vdmUiLCAzLCAiYm94MSIsICJsZWZ0IiwgMTAwLCAxNV0sCisgICAgXTsKKyAgICAKKyAgICBy
dW5BbmltYXRpb25UZXN0KGV4cGVjdGVkVmFsdWVzKTsKKyAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxkaXYgaWQ9ImJveDEiPjwvZGl2PgorPGRpdiBpZD0icmVzdWx0Ij4KKzwvZGl2Pgor
PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9taXNz
aW5nLWtleWZyYW1lLXByb3BlcnRpZXMtdGltaW5nLWZ1bmN0aW9uLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2FuaW1hdGlvbnMvbWlzc2luZy1rZXlmcmFtZS1wcm9wZXJ0aWVzLXRpbWluZy1m
dW5jdGlvbi1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWFjY2M0NzBlNGI1MzU4Zjc1YzhlZWMy
YjM5YzcwMWI0NjFlOTEyMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2FuaW1hdGlv
bnMvbWlzc2luZy1rZXlmcmFtZS1wcm9wZXJ0aWVzLXRpbWluZy1mdW5jdGlvbi1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSw1IEBACitQQVNTIC0gImxlZnQiIHByb3BlcnR5IGZvciAiYm94MSIgZWxl
bWVudCBhdCAwLjVzIHNhdyBzb21ldGhpbmcgY2xvc2UgdG86IDEzMgorUEFTUyAtICJ3ZWJraXRU
cmFuc2Zvcm0uNCIgcHJvcGVydHkgZm9yICJib3gyIiBlbGVtZW50IGF0IDAuNXMgc2F3IHNvbWV0
aGluZyBjbG9zZSB0bzogMTMyCitQQVNTIC0gImxlZnQiIHByb3BlcnR5IGZvciAiYm94MSIgZWxl
bWVudCBhdCAxLjVzIHNhdyBzb21ldGhpbmcgY2xvc2UgdG86IDMwMAorUEFTUyAtICJ3ZWJraXRU
cmFuc2Zvcm0uNCIgcHJvcGVydHkgZm9yICJib3gyIiBlbGVtZW50IGF0IDEuNXMgc2F3IHNvbWV0
aGluZyBjbG9zZSB0bzogMzAwCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FuaW1hdGlvbnMv
bWlzc2luZy1rZXlmcmFtZS1wcm9wZXJ0aWVzLXRpbWluZy1mdW5jdGlvbi5odG1sIGIvTGF5b3V0
VGVzdHMvYW5pbWF0aW9ucy9taXNzaW5nLWtleWZyYW1lLXByb3BlcnRpZXMtdGltaW5nLWZ1bmN0
aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYWY0NjdhNjdjZDFmZDUwZGI5Yzc4YzgxY2NkM2JmY2ZkZDgy
ZjdhNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2FuaW1hdGlvbnMvbWlzc2luZy1r
ZXlmcmFtZS1wcm9wZXJ0aWVzLXRpbWluZy1mdW5jdGlvbi5odG1sCkBAIC0wLDAgKzEsNzcgQEAK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgPHN0eWxlIHR5cGU9InRleHQvY3Nz
IiBtZWRpYT0ic2NyZWVuIj4KKyAgICAuYm94IHsKKyAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsK
KyAgICAgIG1hcmdpbjogMTBweDsKKyAgICAgIGxlZnQ6IDA7CisgICAgICB3aWR0aDogMTAwcHg7
CisgICAgICBoZWlnaHQ6IDEwMHB4OworICAgICAgYmFja2dyb3VuZC1jb2xvcjogYmx1ZTsKKyAg
ICAgIC13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOiAyczsKKyAgICAgIC13ZWJraXQtYW5pbWF0
aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1pbjsKKyAgICB9CisgICAgCisgICAgI2JveDEgewor
ICAgICAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogbW92ZTsKKyAgICB9CisgICAgQC13ZWJraXQt
a2V5ZnJhbWVzIG1vdmUgeworICAgICAgICBmcm9tIHsKKyAgICAgICAgICBvcGFjaXR5OiAwOwor
ICAgICAgICAgIGxlZnQ6IDEwMHB4OworICAgICAgICB9CisgICAgICAgIDI1JSB7CisgICAgICAg
ICAgb3BhY2l0eTogMC4yNTsKKyAgICAgICAgfQorICAgICAgICA1MCUgeworICAgICAgICAgIGxl
ZnQ6IDIwMHB4OworICAgICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjog
bGluZWFyOworICAgICAgICB9CisgICAgICAgIHRvIHsKKyAgICAgICAgICBsZWZ0OiA0MDBweDsK
KyAgICAgICAgfQorICAgIH0KKworICAgICNib3gyIHsKKyAgICAgIC13ZWJraXQtYW5pbWF0aW9u
LW5hbWU6IG1vdmUyOworICAgIH0KKyAgICBALXdlYmtpdC1rZXlmcmFtZXMgbW92ZTIgeworICAg
ICAgICBmcm9tIHsKKyAgICAgICAgICBvcGFjaXR5OiAwOworICAgICAgICAgIC13ZWJraXQtdHJh
bnNmb3JtOiB0cmFuc2xhdGVYKDEwMHB4KTsKKyAgICAgICAgfQorICAgICAgICAyNSUgeworICAg
ICAgICAgIG9wYWNpdHk6IDAuMjU7CisgICAgICAgIH0KKyAgICAgICAgNTAlIHsKKyAgICAgICAg
ICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgyMDBweCk7CisgICAgICAgICAgLXdlYmtp
dC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXI7CisgICAgICAgIH0KKyAgICAgICAg
dG8geworICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDQwMHB4KTsKKyAg
ICAgICAgfQorICAgIH0KKworICA8L3N0eWxlPgorICA8c2NyaXB0IHNyYz0iYW5pbWF0aW9uLXRl
c3QtaGVscGVycy5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBjaGFyc2V0PSJ1dGYtOCI+PC9z
Y3JpcHQ+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBjaGFyc2V0PSJ1dGYtOCI+
CisgICAgCisgICAgY29uc3QgZXhwZWN0ZWRWYWx1ZXMgPSBbCisgICAgICAvLyBbYW5pbWF0aW9u
LW5hbWUsIHRpbWUsIGVsZW1lbnQtaWQsIHByb3BlcnR5LCBleHBlY3RlZC12YWx1ZSwgdG9sZXJh
bmNlXQorICAgICAgWyJtb3ZlIiwgMC41LCAiYm94MSIsICJsZWZ0IiwgMTMyLCAxNV0sCisgICAg
ICBbIm1vdmUyIiwgMC41LCAiYm94MiIsICJ3ZWJraXRUcmFuc2Zvcm0uNCIsIDEzMiwgMTVdLAor
ICAgICAgWyJtb3ZlIiwgMS41LCAiYm94MSIsICJsZWZ0IiwgMzAwLCAxNV0sCisgICAgICBbIm1v
dmUyIiwgMS41LCAiYm94MiIsICJ3ZWJraXRUcmFuc2Zvcm0uNCIsIDMwMCwgMTVdLAorICAgIF07
CisgICAgCisgICAgcnVuQW5pbWF0aW9uVGVzdChleHBlY3RlZFZhbHVlcyk7CisgIDwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJib3gxIiBjbGFzcz0iYm94Ij48L2Rpdj4KKzxk
aXYgaWQ9ImJveDIiIGNsYXNzPSJib3giPjwvZGl2PgorPGRpdiBpZD0icmVzdWx0Ij4KKzwvZGl2
PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9t
aXNzaW5nLWtleWZyYW1lLXByb3BlcnRpZXMuaHRtbCBiL0xheW91dFRlc3RzL2FuaW1hdGlvbnMv
bWlzc2luZy1rZXlmcmFtZS1wcm9wZXJ0aWVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDRhNjk2MzM5ZmU4
MGUxYjExMzBlOGQyODgxMGE2MDEwNmUwZWE3ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2FuaW1hdGlvbnMvbWlzc2luZy1rZXlmcmFtZS1wcm9wZXJ0aWVzLmh0bWwKQEAgLTAsMCAr
MSw3MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICA8c3R5bGUgdHlwZT0i
dGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iPgorICAgIC5ib3ggeworICAgICAgcG9zaXRpb246IHJl
bGF0aXZlOworICAgICAgbWFyZ2luOiAxMHB4OworICAgICAgbGVmdDogMDsKKyAgICAgIHdpZHRo
OiAxMDBweDsKKyAgICAgIGhlaWdodDogMTAwcHg7CisgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBi
bHVlOworICAgICAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IDJzOworICAgICAgLXdlYmtp
dC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXI7CisgICAgfQorICAgIAorICAgICNi
b3gxIHsKKyAgICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IG1vdmU7CisgICAgfQorICAgIEAt
d2Via2l0LWtleWZyYW1lcyBtb3ZlIHsKKyAgICAgICAgZnJvbSB7CisgICAgICAgICAgbGVmdDog
MHB4OworICAgICAgICB9CisgICAgICAgIDUwJSB7CisgICAgICAgICAgb3BhY2l0eTogMDsKKyAg
ICAgICAgfQorICAgICAgICB0byB7CisgICAgICAgICAgbGVmdDogNDAwcHg7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAjYm94MiB7CisgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBtb3Zl
MjsKKyAgICB9CisgICAgQC13ZWJraXQta2V5ZnJhbWVzIG1vdmUyIHsKKyAgICAgICAgZnJvbSB7
CisgICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7CisgICAgICAgIH0K
KyAgICAgICAgNTAlIHsKKyAgICAgICAgICBvcGFjaXR5OiAwOworICAgICAgICB9CisgICAgICAg
IHRvIHsKKyAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCg0MDBweCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgPC9zdHlsZT4KKyAgPHNjcmlwdCBzcmM9ImFuaW1hdGlvbi10
ZXN0LWhlbHBlcnMuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgY2hhcnNldD0idXRmLTgiPjwv
c2NyaXB0PgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgY2hhcnNldD0idXRmLTgi
PgorICAgIAorICAgIGNvbnN0IGV4cGVjdGVkVmFsdWVzID0gWworICAgICAgLy8gW2FuaW1hdGlv
bi1uYW1lLCB0aW1lLCBlbGVtZW50LWlkLCBwcm9wZXJ0eSwgZXhwZWN0ZWQtdmFsdWUsIHRvbGVy
YW5jZV0KKyAgICAgIFsibW92ZSIsIDEsICJib3gxIiwgImxlZnQiLCAyMDAsIDE1XSwKKyAgICAg
IFsibW92ZTIiLCAxLCAiYm94MiIsICJ3ZWJraXRUcmFuc2Zvcm0uNCIsIDIwMCwgMTVdLAorICAg
ICAgWyJtb3ZlIiwgMC41LCAiYm94MSIsICJvcGFjaXR5IiwgMC41LCAwLjFdLAorICAgICAgWyJt
b3ZlIiwgMSwgImJveDEiLCAib3BhY2l0eSIsIDAsIDAuMV0sCisgICAgICBbIm1vdmUiLCAxLjUs
ICJib3gxIiwgImxlZnQiLCAzMDAsIDE1XSwKKyAgICAgIFsibW92ZTIiLCAxLjUsICJib3gyIiwg
IndlYmtpdFRyYW5zZm9ybS40IiwgMzAwLCAxNV0sCisgICAgICBbIm1vdmUiLCAxLjUsICJib3gx
IiwgIm9wYWNpdHkiLCAwLjUsIDAuMV0sCisgICAgXTsKKyAgICAKKyAgICBydW5BbmltYXRpb25U
ZXN0KGV4cGVjdGVkVmFsdWVzKTsKKyAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYg
aWQ9ImJveDEiIGNsYXNzPSJib3giPjwvZGl2PgorPGRpdiBpZD0iYm94MiIgY2xhc3M9ImJveCI+
PC9kaXY+Cis8ZGl2IGlkPSJyZXN1bHQiPgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDU2MmI4
NzIyNTY0YzIzZWEyMDhmNWYwMjdjYjFjOGE3MjUyYjc3NWUuLjRiOGVjOWM0NmZmMzZkZmI3Yzg3
NzAxYTUxNDQzYWM1MTU5YWNhMzUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTAtMDgtMjkgIFNpbW9uIEZy
YXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgV2hlbiBwcm9wZXJ0aWVzIGFyZSBtaXNzaW5nIGZyb20g
YW5pbWF0aW9uIGtleWZyYW1lcywgaW50ZXJwb2xhdGUgYmV0d2VlbiB0aG9zZSBrZXlmcmFtZXMg
dGhhdCBzcGVjaWZ5IHRoZW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQwNzk0CisgICAgICAgIAorICAgICAgICBXaGVuIGEgcHJvcGVydHkgZG9lcyBu
b3QgYXBwZWFyIGluIGFsbCBrZXlmcmFtZXMgb2YgYSBrZXlmcmFtZSBhbmltYXRpb24sIHdlIGN1
cnJlbnRseSB1c2UgdGhlCisgICAgICAgIHZhbHVlIG9mIHRoYXQgcHJvcGVydHkgZnJvbSB0aGUg
dW5hbmltYXRlZCBzdHlsZS4gVGhhdCBmb3JjZXMgdGhlIGF1dGhvciB0byB1c2UgYWRkaXRpb25h
bAorICAgICAgICBrZXlmcmFtZXMgZm9yIHByb3BlcnRpZXMgdGhhdCBuZWVkIHRvICJza2lwIGEg
a2V5ZnJhbWUiLCB3aGljaCBpcyBsYWJvcmlvdXMuCisgICAgICAgIAorICAgICAgICBXaXRoIHRo
aXMgY2hhbmdlLCBwcm9wZXJ0aWVzIGFyZSBpbnRlcnBvbGF0ZWQgYmV0d2VlbiB0aGUga2V5ZnJh
bWVzIGluIHdoaWNoIHRoZXkgYXBwZWFyLgorICAgICAgICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8g
c3BsaXR0aW5nIGVhY2ggcHJvcGVydHkgb3V0IGludG8gaXRzIG93biBzZXQgb2Yga2V5ZnJhbWVz
LgorCisgICAgICAgIFRlc3RzOiBhbmltYXRpb25zL21pc3Npbmcta2V5ZnJhbWUtcHJvcGVydGll
cy1yZXBlYXRpbmcuaHRtbAorICAgICAgICAgICAgICAgYW5pbWF0aW9ucy9taXNzaW5nLWtleWZy
YW1lLXByb3BlcnRpZXMtdGltaW5nLWZ1bmN0aW9uLmh0bWwKKyAgICAgICAgICAgICAgIGFuaW1h
dGlvbnMvbWlzc2luZy1rZXlmcmFtZS1wcm9wZXJ0aWVzLmh0bWwKKworICAgICAgICAqIGNzcy9D
U1NTdHlsZVNlbGVjdG9yLmg6CisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JLZXlmcmFtZSk6IFBh
c3MgYSBLZXlmcmFtZVZhbHVlIGluIHNvIHRoYXQgd2UgY2FuCisgICAgICAgIGNvbGxlY3Qgd2hp
Y2ggcHJvcGVydGllcyBhcmUgcmVwcmVzZW50ZWQgcGVyIGtleWZyYW1lLgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24pOiBLZXlm
cmFtZXMgYXJlIGluc2VydGVkIGludG8gYQorICAgICAgICBLZXlmcmFtZUxpc3QgYnkgb2JqZWN0
IG5vdywgcmF0aGVyIHRoYW4gYnkga2V5IGFuZCBzdHlsZS4KKworICAgICAgICAqIHBhZ2UvYW5p
bWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFz
ZTo6cHJvZ3Jlc3MpOiBVc2UgQW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlIGZvciByZWFkYWJp
bGl0eS4KKworICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lQW5pbWF0aW9uOjpmZXRjaEludGVydmFsRW5kcG9p
bnRzRm9yUHJvcGVydHkpOiBSZW5hbWVkIGZyb20gZ2V0S2V5ZnJhbWVBbmltYXRpb25JbnRlcnZh
bC4KKyAgICAgICAgVXNlIGZyYWN0aW9uYWxUaW1lIGV0YyB0byBtYXRjaCBBbmltYXRpb25CYXNl
Ojpwcm9ncmVzcygpLCBhbmQgZG8gbG9va3VwcyBwZXItcHJvcGVydHkuCisgICAgICAgIFNpbXBs
aWZ5IHRoZSBjb2RlIHRoYXQgZmluZHMgdGhlIHJlbGV2YW50IGtleWZyYW1lIHRvIGRvIGxlc3Mg
d29yay4KKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lQW5pbWF0aW9uOjphbmltYXRlKTogQ2Fs
bCBmZXRjaEludGVydmFsRW5kcG9pbnRzRm9yUHJvcGVydHkoKSBmb3IgZWFjaCBwcm9wZXJ0eSwg
cmF0aGVyIHRoYW4ganVzdCBvbmNlIGZvciB0aGUKKyAgICAgICAgZW50aXJlIGtleWZyYW1lLgor
ICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVBbmltYXRpb246OmdldEFuaW1hdGVkU3R5bGUpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lQW5pbWF0aW9uOjpoYXNBbmltYXRpb25G
b3JQcm9wZXJ0eSk6IEZJWE1FIGNvbW1lbnQuCisKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9L
ZXlmcmFtZUFuaW1hdGlvbi5oOiBSZW5hbWUgZ2V0S2V5ZnJhbWVBbmltYXRpb25JbnRlcnZhbCgp
IHRvIGZldGNoSW50ZXJ2YWxFbmRwb2ludHNGb3JQcm9wZXJ0eSgpLgorCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckJhY2tpbmc6OnN0YXJ0QW5pbWF0aW9uKTogRm9yIGhhcmR3YXJlIGFuaW1hdGlvbnMsIG9u
bHkgaW5zZXJ0IHZhbHVlcworICAgICAgICBmb3Iga2V5ZnJhbWVzIHdoaWNoIGNvbnRhaW4gdGhl
IHByb3BlcnR5LgorCisgICAgICAgIChXZWJDb3JlOjpLZXlmcmFtZUxpc3Q6OktleWZyYW1lTGlz
dCk6IGluc2VydCgpIHRha2VzIGEgS2V5ZnJhbWVWYWx1ZSBub3cuCisgICAgICAgICogcmVuZGVy
aW5nL3N0eWxlL0tleWZyYW1lTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpLZXlmcmFtZUxp
c3Q6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVMaXN0OjppbnNlcnQp
OiBGaXggaW5zZXJ0L3JlcGxhY2UgbG9naWMsIGFuZCBlbnN1cmUgd2UgbWFpbnRhaW4gdGhlCisg
ICAgICAgIG1fcHJvcGVydGllcyBoYXNoLgorCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL0tl
eWZyYW1lTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVWYWx1ZTo6S2V5ZnJhbWVW
YWx1ZSk6IE1ha2UgbWVtYmVycyBwcml2YXRlLCB3aXRoIGFjY2Vzc29ycy4KKyAgICAgICAgQWRk
IGEgbV9wcm9wZXJ0aWVzIEhhc2hTZXQgZm9yIHRoZSBwcm9wZXJ0aWVzIGFuaW1hdGVkIGluIHRo
aXMga2V5ZnJhbWUuCisKKwogMjAxMC0wOC0yOCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2Vy
QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAgYi9XZWJDb3JlL2Nzcy9DU1NTdHls
ZVNlbGVjdG9yLmNwcAppbmRleCAyMDNhNDE0ZmExN2VjMGE0M2I4MjczYjg1Y2NhY2FjOTljMjMw
YTgwLi5iMDRkZWNjZTdiYzBjNTNiYTJiMWE4ZGVjOGFmNzRhODEwYThjMjI0IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAorKysgYi9XZWJDb3JlL2Nzcy9DU1NT
dHlsZVNlbGVjdG9yLmNwcApAQCAtMTM5Myw3ICsxMzkzLDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJT
dHlsZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JFbGVtZW50KEVsZW1lbnQqIGUsIFJlbmRl
clN0eWwKICAgICByZXR1cm4gbV9zdHlsZS5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8UmVu
ZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVy
U3R5bGUqIGVsZW1lbnRTdHlsZSwgY29uc3QgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKiBrZXlmcmFt
ZVJ1bGUsIEtleWZyYW1lTGlzdCYgbGlzdCkKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0
eWxlU2VsZWN0b3I6OnN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lbnRT
dHlsZSwgY29uc3QgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKiBrZXlmcmFtZVJ1bGUsIEtleWZyYW1l
VmFsdWUmIGtleWZyYW1lKQogewogICAgIGlmIChrZXlmcmFtZVJ1bGUtPnN0eWxlKCkpCiAgICAg
ICAgIGFkZE1hdGNoZWREZWNsYXJhdGlvbihrZXlmcmFtZVJ1bGUtPnN0eWxlKCkpOwpAQCAtMTQz
MCw3ICsxNDMwLDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6
c3R5bGVGb3JLZXlmcmFtZShjb25zdCBSZW5kZXJTdHlsZSogZWwKICAgICAvLyBTdGFydCBsb2Fk
aW5nIGltYWdlcyByZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUuCiAgICAgbG9hZFBlbmRpbmdJbWFn
ZXMoKTsKIAotICAgIC8vIEFkZCBhbGwgdGhlIGFuaW1hdGluZyBwcm9wZXJ0aWVzIHRvIHRoZSBs
aXN0CisgICAgLy8gQWRkIGFsbCB0aGUgYW5pbWF0aW5nIHByb3BlcnRpZXMgdG8gdGhlIGtleWZy
YW1lLgogICAgIGlmIChrZXlmcmFtZVJ1bGUtPnN0eWxlKCkpIHsKICAgICAgICAgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGtleWZyYW1lUnVsZS0+c3R5
bGUoKS0+ZW5kKCk7CiAgICAgICAgIGZvciAoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNv
bnN0X2l0ZXJhdG9yIGl0ID0ga2V5ZnJhbWVSdWxlLT5zdHlsZSgpLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKQEAgLTE0MzgsNyArMTQzOCw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+
IENTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqIGVs
CiAgICAgICAgICAgICAvLyBUaW1pbmctZnVuY3Rpb24gd2l0aGluIGtleWZyYW1lcyBpcyBzcGVj
aWFsLCBiZWNhdXNlIGl0IGlzIG5vdCBhbmltYXRlZDsgaXQganVzdAogICAgICAgICAgICAgLy8g
ZGVzY3JpYmVzIHRoZSB0aW1pbmcgZnVuY3Rpb24gYmV0d2VlbiB0aGlzIGtleWZyYW1lIGFuZCB0
aGUgbmV4dC4KICAgICAgICAgICAgIGlmIChwcm9wZXJ0eSAhPSBDU1NQcm9wZXJ0eVdlYmtpdEFu
aW1hdGlvblRpbWluZ0Z1bmN0aW9uKQotICAgICAgICAgICAgICAgIGxpc3QuYWRkUHJvcGVydHko
cHJvcGVydHkpOworICAgICAgICAgICAgICAgIGtleWZyYW1lLmFkZFByb3BlcnR5KHByb3BlcnR5
KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTQ1OSw3ICsxNDU5LDYgQEAgdm9pZCBDU1NTdHls
ZVNlbGVjdG9yOjprZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiBlLCBjb25zdCBS
ZW5kZXJTdHlsZSoKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjb25zdCBXZWJLaXRD
U1NLZXlmcmFtZXNSdWxlKiBydWxlID0gbV9rZXlmcmFtZXNSdWxlTWFwLmZpbmQobGlzdC5hbmlt
YXRpb25OYW1lKCkuaW1wbCgpKS5nZXQoKS0+c2Vjb25kLmdldCgpOwotICAgIFJlZlB0cjxSZW5k
ZXJTdHlsZT4ga2V5ZnJhbWVTdHlsZTsKICAgICAKICAgICAvLyBDb25zdHJ1Y3QgYW5kIHBvcHVs
YXRlIHRoZSBzdHlsZSBmb3IgZWFjaCBrZXlmcmFtZQogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBydWxlLT5sZW5ndGgoKTsgKytpKSB7CkBAIC0xNDY4LDM0ICsxNDY3LDM2IEBAIHZvaWQg
Q1NTU3R5bGVTZWxlY3Rvcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oRWxlbWVudCogZSwg
Y29uc3QgUmVuZGVyU3R5bGUqCiAgICAgICAgIGluaXRGb3JTdHlsZVJlc29sdmUoZSk7CiAgICAg
ICAgIAogICAgICAgICBjb25zdCBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUqIGtleWZyYW1lUnVsZSA9
IHJ1bGUtPml0ZW0oaSk7Ci0gICAgICAgIAotICAgICAgICBrZXlmcmFtZVN0eWxlID0gc3R5bGVG
b3JLZXlmcmFtZShlbGVtZW50U3R5bGUsIGtleWZyYW1lUnVsZSwgbGlzdCk7CisKKyAgICAgICAg
S2V5ZnJhbWVWYWx1ZSBrZXlmcmFtZSgwLCAwKTsKKyAgICAgICAga2V5ZnJhbWUuc2V0U3R5bGUo
c3R5bGVGb3JLZXlmcmFtZShlbGVtZW50U3R5bGUsIGtleWZyYW1lUnVsZSwga2V5ZnJhbWUpKTsK
IAogICAgICAgICAvLyBBZGQgdGhpcyBrZXlmcmFtZSBzdHlsZSB0byBhbGwgdGhlIGluZGljYXRl
ZCBrZXkgdGltZXMKICAgICAgICAgVmVjdG9yPGZsb2F0PiBrZXlzOwogICAgICAgICBrZXlmcmFt
ZVJ1bGUtPmdldEtleXMoa2V5cyk7CiAgICAgICAgIGZvciAoc2l6ZV90IGtleUluZGV4ID0gMDsg
a2V5SW5kZXggPCBrZXlzLnNpemUoKTsgKytrZXlJbmRleCkgewotICAgICAgICAgICAgZmxvYXQg
a2V5ID0ga2V5c1trZXlJbmRleF07Ci0gICAgICAgICAgICBsaXN0Lmluc2VydChrZXksIGtleWZy
YW1lU3R5bGUuZ2V0KCkpOworICAgICAgICAgICAga2V5ZnJhbWUuc2V0S2V5KGtleXNba2V5SW5k
ZXhdKTsKKyAgICAgICAgICAgIGxpc3QuaW5zZXJ0KGtleWZyYW1lKTsKICAgICAgICAgfQotICAg
ICAgICBrZXlmcmFtZVN0eWxlLnJlbGVhc2UoKTsKICAgICB9CiAgICAgCiAgICAgLy8gSWYgdGhl
IDAlIGtleWZyYW1lIGlzIG1pc3NpbmcsIGNyZWF0ZSBpdCAoYnV0IG9ubHkgaWYgdGhlcmUgaXMg
YXQgbGVhc3Qgb25lIG90aGVyIGtleWZyYW1lKQogICAgIGludCBpbml0aWFsTGlzdFNpemUgPSBs
aXN0LnNpemUoKTsKICAgICBpZiAoaW5pdGlhbExpc3RTaXplID4gMCAmJiBsaXN0WzBdLmtleSgp
ICE9IDApIHsKLSAgICAgICAgUmVmUHRyPFdlYktpdENTU0tleWZyYW1lUnVsZT4ga2V5ZnJhbWUg
PSBXZWJLaXRDU1NLZXlmcmFtZVJ1bGU6OmNyZWF0ZSgpOwotICAgICAgICBrZXlmcmFtZS0+c2V0
S2V5VGV4dCgiMCUiKTsKLSAgICAgICAga2V5ZnJhbWVTdHlsZSA9IHN0eWxlRm9yS2V5ZnJhbWUo
ZWxlbWVudFN0eWxlLCBrZXlmcmFtZS5nZXQoKSwgbGlzdCk7Ci0gICAgICAgIGxpc3QuaW5zZXJ0
KDAsIGtleWZyYW1lU3R5bGUucmVsZWFzZSgpKTsKKyAgICAgICAgUmVmUHRyPFdlYktpdENTU0tl
eWZyYW1lUnVsZT4ga2V5ZnJhbWVSdWxlID0gV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlOjpjcmVhdGUo
KTsKKyAgICAgICAga2V5ZnJhbWVSdWxlLT5zZXRLZXlUZXh0KCIwJSIpOworICAgICAgICBLZXlm
cmFtZVZhbHVlIGtleWZyYW1lKDAsIDApOworICAgICAgICBrZXlmcmFtZS5zZXRTdHlsZShzdHls
ZUZvcktleWZyYW1lKGVsZW1lbnRTdHlsZSwga2V5ZnJhbWVSdWxlLmdldCgpLCBrZXlmcmFtZSkp
OworICAgICAgICBsaXN0Lmluc2VydChrZXlmcmFtZSk7CiAgICAgfQogCiAgICAgLy8gSWYgdGhl
IDEwMCUga2V5ZnJhbWUgaXMgbWlzc2luZywgY3JlYXRlIGl0IChidXQgb25seSBpZiB0aGVyZSBp
cyBhdCBsZWFzdCBvbmUgb3RoZXIga2V5ZnJhbWUpCiAgICAgaWYgKGluaXRpYWxMaXN0U2l6ZSA+
IDAgJiYgKGxpc3RbbGlzdC5zaXplKCkgLSAxXS5rZXkoKSAhPSAxKSkgewotICAgICAgICBSZWZQ
dHI8V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlPiBrZXlmcmFtZSA9IFdlYktpdENTU0tleWZyYW1lUnVs
ZTo6Y3JlYXRlKCk7Ci0gICAgICAgIGtleWZyYW1lLT5zZXRLZXlUZXh0KCIxMDAlIik7Ci0gICAg
ICAgIGtleWZyYW1lU3R5bGUgPSBzdHlsZUZvcktleWZyYW1lKGVsZW1lbnRTdHlsZSwga2V5ZnJh
bWUuZ2V0KCksIGxpc3QpOwotICAgICAgICBsaXN0Lmluc2VydCgxLCBrZXlmcmFtZVN0eWxlLnJl
bGVhc2UoKSk7CisgICAgICAgIFJlZlB0cjxXZWJLaXRDU1NLZXlmcmFtZVJ1bGU+IGtleWZyYW1l
UnVsZSA9IFdlYktpdENTU0tleWZyYW1lUnVsZTo6Y3JlYXRlKCk7CisgICAgICAgIGtleWZyYW1l
UnVsZS0+c2V0S2V5VGV4dCgiMTAwJSIpOworICAgICAgICBLZXlmcmFtZVZhbHVlIGtleWZyYW1l
KDEsIDApOworICAgICAgICBrZXlmcmFtZS5zZXRTdHlsZShzdHlsZUZvcktleWZyYW1lKGVsZW1l
bnRTdHlsZSwga2V5ZnJhbWVSdWxlLmdldCgpLCBrZXlmcmFtZSkpOworICAgICAgICBsaXN0Lmlu
c2VydChrZXlmcmFtZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy9DU1NT
dHlsZVNlbGVjdG9yLmggYi9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKaW5kZXggYzNl
NDIzYTA4MTVlYTcyMTMwMTIxMWYyYjk2ZDU4NzYzNmE5NjIxNC4uZjUyYjUyZjk2MDc1ZTEyMjcw
NzNmNWFlYTQxNjRlZGVjYWI0ODZlZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvQ1NTU3R5bGVT
ZWxlY3Rvci5oCisrKyBiL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaApAQCAtNTksNiAr
NTksNyBAQCBjbGFzcyBGcmFtZTsKIGNsYXNzIEZyYW1lVmlldzsKIGNsYXNzIEtVUkw7CiBjbGFz
cyBLZXlmcmFtZUxpc3Q7CitjbGFzcyBLZXlmcmFtZVZhbHVlOwogY2xhc3MgTWVkaWFRdWVyeUV2
YWx1YXRvcjsKIGNsYXNzIE5vZGU7CiBjbGFzcyBTZXR0aW5nczsKQEAgLTExNCw3ICsxMTUsNyBA
QCBwdWJsaWM6CiAKICAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlKCkgY29uc3QgeyByZXR1cm4g
bV9zdHlsZS5nZXQoKTsgfQogCi0gICAgICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxl
Rm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBXZWJLaXRDU1NLZXlmcmFtZVJ1
bGUqLCBLZXlmcmFtZUxpc3QmKTsKKyAgICAgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5
bGVGb3JLZXlmcmFtZShjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFdlYktpdENTU0tleWZyYW1l
UnVsZSosIEtleWZyYW1lVmFsdWUmKTsKIAogICAgIHB1YmxpYzoKICAgICAgICAgLy8gVGhlc2Ug
bWV0aG9kcyB3aWxsIGdpdmUgYmFjayB0aGUgc2V0IG9mIHJ1bGVzIHRoYXQgbWF0Y2hlZCBmb3Ig
YSBnaXZlbiBlbGVtZW50IChvciBhIHBzZXVkby1lbGVtZW50KS4KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAgYi9XZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0FuaW1hdGlvbkJhc2UuY3BwCmluZGV4IDRmMzA0ZTJlNGQ4ODExN2EyZGY5NGViYWRkNzAz
NTlkNTczZTExYzMuLmQyZTg2YmRhNmJjMjFhOTFkNjY4M2JiNGFmOTE5NDE1NTI4YTBkZWMgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAKKysrIGIv
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcApAQCAtMTI0Miw3ICsxMjQy
LDcgQEAgZG91YmxlIEFuaW1hdGlvbkJhc2U6OnByb2dyZXNzKGRvdWJsZSBzY2FsZSwgZG91Ymxl
IG9mZnNldCwgY29uc3QgVGltaW5nRnVuY3Rpb24KICAgICBpbnQgaW50ZWdyYWxUaW1lID0gc3Rh
dGljX2Nhc3Q8aW50PihmcmFjdGlvbmFsVGltZSk7CiAgICAgZnJhY3Rpb25hbFRpbWUgLT0gaW50
ZWdyYWxUaW1lOwogCi0gICAgaWYgKG1fYW5pbWF0aW9uLT5kaXJlY3Rpb24oKSAmJiAoaW50ZWdy
YWxUaW1lICYgMSkpCisgICAgaWYgKChtX2FuaW1hdGlvbi0+ZGlyZWN0aW9uKCkgPT0gQW5pbWF0
aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRlcm5hdGUpICYmIChpbnRlZ3JhbFRpbWUgJiAxKSkK
ICAgICAgICAgZnJhY3Rpb25hbFRpbWUgPSAxIC0gZnJhY3Rpb25hbFRpbWU7CiAKICAgICBpZiAo
c2NhbGUgIT0gMSB8fCBvZmZzZXQpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9u
L0tleWZyYW1lQW5pbWF0aW9uLmNwcCBiL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVB
bmltYXRpb24uY3BwCmluZGV4IDJmNWE3M2U0Y2YxMzM4MTViNDY0MGM1YmMzM2QxMzc3ZTk4NTBk
NzIuLjAxZWMyZjE2OTA4YTBhZWUyNGI2MWUxMTRlYjZkOWE5ZTAxNWUwZjYgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwCisrKyBiL1dlYkNv
cmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwCkBAIC02Miw0MiArNjIsNjcg
QEAgS2V5ZnJhbWVBbmltYXRpb246On5LZXlmcmFtZUFuaW1hdGlvbigpCiAgICAgICAgIGVuZEFu
aW1hdGlvbigpOwogfQogCi12b2lkIEtleWZyYW1lQW5pbWF0aW9uOjpnZXRLZXlmcmFtZUFuaW1h
dGlvbkludGVydmFsKGNvbnN0IFJlbmRlclN0eWxlKiYgZnJvbVN0eWxlLCBjb25zdCBSZW5kZXJT
dHlsZSomIHRvU3R5bGUsIGRvdWJsZSYgcHJvZykgY29uc3QKK3ZvaWQgS2V5ZnJhbWVBbmltYXRp
b246OmZldGNoSW50ZXJ2YWxFbmRwb2ludHNGb3JQcm9wZXJ0eShpbnQgcHJvcGVydHksIGNvbnN0
IFJlbmRlclN0eWxlKiYgZnJvbVN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSomIHRvU3R5bGUsIGRv
dWJsZSYgcHJvZykgY29uc3QKIHsKICAgICAvLyBGaW5kIHRoZSBmaXJzdCBrZXkKICAgICBkb3Vi
bGUgZWxhcHNlZFRpbWUgPSBnZXRFbGFwc2VkVGltZSgpOwogCi0gICAgZG91YmxlIHQgPSBtX2Fu
aW1hdGlvbi0+ZHVyYXRpb24oKSA/IChlbGFwc2VkVGltZSAvIG1fYW5pbWF0aW9uLT5kdXJhdGlv
bigpKSA6IDE7CisgICAgZG91YmxlIGZyYWN0aW9uYWxUaW1lID0gbV9hbmltYXRpb24tPmR1cmF0
aW9uKCkgPyAoZWxhcHNlZFRpbWUgLyBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSkgOiAxOwogCi0g
ICAgQVNTRVJUKHQgPj0gMCk7Ci0gICAgaWYgKHQgPCAwKQotICAgICAgICB0ID0gMDsKKyAgICBB
U1NFUlQoZnJhY3Rpb25hbFRpbWUgPj0gMCk7CisgICAgaWYgKGZyYWN0aW9uYWxUaW1lIDwgMCkK
KyAgICAgICAgZnJhY3Rpb25hbFRpbWUgPSAwOwogCi0gICAgaW50IGkgPSBzdGF0aWNfY2FzdDxp
bnQ+KHQpOwotICAgIHQgLT0gaTsKLSAgICBpZiAobV9hbmltYXRpb24tPmRpcmVjdGlvbigpICYm
IChpICYgMSkpCi0gICAgICAgIHQgPSAxIC0gdDsKKyAgICAvLyBGSVhNRTogc2hhcmUgdGhpcyBj
b2RlIHdpdGggQW5pbWF0aW9uQmFzZTo6cHJvZ3Jlc3MoKS4KKyAgICBpbnQgaXRlcmF0aW9uID0g
c3RhdGljX2Nhc3Q8aW50PihmcmFjdGlvbmFsVGltZSk7CisgICAgZnJhY3Rpb25hbFRpbWUgLT0g
aXRlcmF0aW9uOworICAgIAorICAgIGJvb2wgcmV2ZXJzaW5nID0gKG1fYW5pbWF0aW9uLT5kaXJl
Y3Rpb24oKSA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZSkgJiYgKGl0
ZXJhdGlvbiAmIDEpOworICAgIGlmIChyZXZlcnNpbmcpCisgICAgICAgIGZyYWN0aW9uYWxUaW1l
ID0gMSAtIGZyYWN0aW9uYWxUaW1lOwogCi0gICAgZG91YmxlIHNjYWxlID0gMTsKLSAgICBkb3Vi
bGUgb2Zmc2V0ID0gMDsKICAgICBzaXplX3QgbnVtS2V5ZnJhbWVzID0gbV9rZXlmcmFtZXMuc2l6
ZSgpOworICAgIGlmICghbnVtS2V5ZnJhbWVzKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
QVNTRVJUKCFtX2tleWZyYW1lc1swXS5rZXkoKSk7CisgICAgQVNTRVJUKG1fa2V5ZnJhbWVzW21f
a2V5ZnJhbWVzLnNpemUoKSAtIDFdLmtleSgpID09IDEpOworICAgIAorICAgIGludCBwcmV2SW5k
ZXggPSAtMTsKKyAgICBpbnQgbmV4dEluZGV4ID0gLTE7CisgICAgCisgICAgLy8gRklYTUU6IHdp
dGggYSBsb3Qgb2Yga2V5cywgdGhpcyBsaW5lYXIgc2VhcmNoIHdpbGwgYmUgc2xvdy4gV2UgY291
bGQgYmluYXJ5IHNlYXJjaC4KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUtleWZyYW1l
czsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEtleWZyYW1lVmFsdWUmIGN1cnJlbnRLZXlmcmFtZSA9
IG1fa2V5ZnJhbWVzW2ldOwotICAgICAgICBpZiAodCA8IGN1cnJlbnRLZXlmcmFtZS5rZXkoKSkg
ewotICAgICAgICAgICAgLy8gVGhlIGZpcnN0IGtleSBzaG91bGQgYWx3YXlzIGJlIDAsIHNvIHdl
IHNob3VsZCBuZXZlciBzdWNjZWVkIG9uIHRoZSBmaXJzdCBrZXkKLSAgICAgICAgICAgIGlmICgh
ZnJvbVN0eWxlKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgc2NhbGUgPSAx
LjAgLyAoY3VycmVudEtleWZyYW1lLmtleSgpIC0gb2Zmc2V0KTsKLSAgICAgICAgICAgIHRvU3R5
bGUgPSBjdXJyZW50S2V5ZnJhbWUuc3R5bGUoKTsKKyAgICAgICAgY29uc3QgS2V5ZnJhbWVWYWx1
ZSYgY3VycktleUZyYW1lID0gbV9rZXlmcmFtZXNbaV07CisKKyAgICAgICAgaWYgKCFjdXJyS2V5
RnJhbWUuY29udGFpbnNQcm9wZXJ0eShwcm9wZXJ0eSkpCisgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICBpZiAoZnJhY3Rpb25hbFRpbWUgPCBjdXJyS2V5RnJhbWUua2V5KCkpIHsKKyAg
ICAgICAgICAgIG5leHRJbmRleCA9IGk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQot
Ci0gICAgICAgIG9mZnNldCA9IGN1cnJlbnRLZXlmcmFtZS5rZXkoKTsKLSAgICAgICAgZnJvbVN0
eWxlID0gY3VycmVudEtleWZyYW1lLnN0eWxlKCk7CisgICAgICAgIAorICAgICAgICBwcmV2SW5k
ZXggPSBpOwogICAgIH0KIAotICAgIGlmICghZnJvbVN0eWxlIHx8ICF0b1N0eWxlKQotICAgICAg
ICByZXR1cm47CisgICAgZG91YmxlIHNjYWxlID0gMTsKKyAgICBkb3VibGUgb2Zmc2V0ID0gMDsK
KworICAgIGlmIChwcmV2SW5kZXggPT0gLTEpCisgICAgICAgIHByZXZJbmRleCA9IDA7CisKKyAg
ICBpZiAobmV4dEluZGV4ID09IC0xKQorICAgICAgICBuZXh0SW5kZXggPSBtX2tleWZyYW1lcy5z
aXplKCkgLSAxOworCisgICAgY29uc3QgS2V5ZnJhbWVWYWx1ZSYgcHJldktleWZyYW1lID0gbV9r
ZXlmcmFtZXNbcHJldkluZGV4XTsKKyAgICBjb25zdCBLZXlmcmFtZVZhbHVlJiBuZXh0S2V5ZnJh
bWUgPSBtX2tleWZyYW1lc1tuZXh0SW5kZXhdOworCisgICAgZnJvbVN0eWxlID0gcHJldktleWZy
YW1lLnN0eWxlKCk7CisgICAgdG9TdHlsZSA9IG5leHRLZXlmcmFtZS5zdHlsZSgpOworICAgIAor
ICAgIG9mZnNldCA9IHByZXZLZXlmcmFtZS5rZXkoKTsKKyAgICBzY2FsZSA9IDEuMCAvIChuZXh0
S2V5ZnJhbWUua2V5KCkgLSBwcmV2S2V5ZnJhbWUua2V5KCkpOwogCiAgICAgY29uc3QgVGltaW5n
RnVuY3Rpb24qIHRpbWluZ0Z1bmN0aW9uID0gMDsKICAgICBpZiAoZnJvbVN0eWxlLT5hbmltYXRp
b25zKCkgJiYgZnJvbVN0eWxlLT5hbmltYXRpb25zKCktPnNpemUoKSA+IDApIHsKQEAgLTEzMiwx
OCArMTU3LDkgQEAgdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6YW5pbWF0ZShDb21wb3NpdGVBbmlt
YXRpb24qLCBSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXIKICAgICAvLyB0aHJvdWdoIHRvIHRo
ZSBzdHlsZSBibGVuZCBzbyB0aGF0IHdlIGdldCB0aGUgZnJvbVN0eWxlLgogICAgIGlmICh3YWl0
aW5nVG9TdGFydCgpICYmIG1fYW5pbWF0aW9uLT5kZWxheSgpID4gMCAmJiAhbV9hbmltYXRpb24t
PmZpbGxzQmFja3dhcmRzKCkpCiAgICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiB3ZSBu
ZWVkIHRvIGJlIG1vcmUgZWZmaWNpZW50IGFib3V0IGRldGVybWluaW5nIHdoaWNoIGtleWZyYW1l
cyB3ZSBhcmUgYW5pbWF0aW5nIGJldHdlZW4uCi0gICAgLy8gV2Ugc2hvdWxkIGNhY2hlIHRoZSBs
YXN0IHBhaXIgb3Igc29tZXRoaW5nLgogICAgIAotICAgIC8vIEdldCB0aGUgZnJvbS90byBzdHls
ZXMgYW5kIHByb2dyZXNzIGJldHdlZW4KLSAgICBjb25zdCBSZW5kZXJTdHlsZSogZnJvbVN0eWxl
ID0gMDsKLSAgICBjb25zdCBSZW5kZXJTdHlsZSogdG9TdHlsZSA9IDA7Ci0gICAgZG91YmxlIHBy
b2dyZXNzOwotICAgIGdldEtleWZyYW1lQW5pbWF0aW9uSW50ZXJ2YWwoZnJvbVN0eWxlLCB0b1N0
eWxlLCBwcm9ncmVzcyk7Ci0KLSAgICAvLyBJZiBlaXRoZXIgc3R5bGUgaXMgMCB3ZSBoYXZlIGFu
IGludmFsaWQgY2FzZSwganVzdCBzdG9wIHRoZSBhbmltYXRpb24uCi0gICAgaWYgKCFmcm9tU3R5
bGUgfHwgIXRvU3R5bGUpIHsKKyAgICAvLyBJZiB3ZSBoYXZlIG5vIGtleWZyYW1lcywgZG9uJ3Qg
YW5pbWF0ZS4KKyAgICBpZiAoIW1fa2V5ZnJhbWVzLnNpemUoKSkgewogICAgICAgICB1cGRhdGVT
dGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dEVuZEFuaW1hdGlvbiwgLTEpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtMTUzLDkgKzE2OSwxOSBAQCB2b2lkIEtleWZyYW1lQW5pbWF0
aW9uOjphbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiosIFJlbmRlck9iamVjdCosIGNvbnN0IFJl
bmRlcgogICAgIGlmICghYW5pbWF0ZWRTdHlsZSkKICAgICAgICAgYW5pbWF0ZWRTdHlsZSA9IFJl
bmRlclN0eWxlOjpjbG9uZSh0YXJnZXRTdHlsZSk7CiAKKyAgICAvLyBGSVhNRTogd2UgbmVlZCB0
byBiZSBtb3JlIGVmZmljaWVudCBhYm91dCBkZXRlcm1pbmluZyB3aGljaCBrZXlmcmFtZXMgd2Ug
YXJlIGFuaW1hdGluZyBiZXR3ZWVuLgorICAgIC8vIFdlIHNob3VsZCBjYWNoZSB0aGUgbGFzdCBw
YWlyIG9yIHNvbWV0aGluZy4KICAgICBIYXNoU2V0PGludD46OmNvbnN0X2l0ZXJhdG9yIGVuZFBy
b3BlcnRpZXMgPSBtX2tleWZyYW1lcy5lbmRQcm9wZXJ0aWVzKCk7CiAgICAgZm9yIChIYXNoU2V0
PGludD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZXMuYmVnaW5Qcm9wZXJ0aWVzKCk7
IGl0ICE9IGVuZFByb3BlcnRpZXM7ICsraXQpIHsKLSAgICAgICAgYm9vbCBuZWVkc0FuaW0gPSBi
bGVuZFByb3BlcnRpZXModGhpcywgKml0LCBhbmltYXRlZFN0eWxlLmdldCgpLCBmcm9tU3R5bGUs
IHRvU3R5bGUsIHByb2dyZXNzKTsKKyAgICAgICAgaW50IHByb3BlcnR5ID0gKml0OworCisgICAg
ICAgIC8vIEdldCB0aGUgZnJvbS90byBzdHlsZXMgYW5kIHByb2dyZXNzIGJldHdlZW4KKyAgICAg
ICAgY29uc3QgUmVuZGVyU3R5bGUqIGZyb21TdHlsZSA9IDA7CisgICAgICAgIGNvbnN0IFJlbmRl
clN0eWxlKiB0b1N0eWxlID0gMDsKKyAgICAgICAgZG91YmxlIHByb2dyZXNzOworICAgICAgICBm
ZXRjaEludGVydmFsRW5kcG9pbnRzRm9yUHJvcGVydHkocHJvcGVydHksIGZyb21TdHlsZSwgdG9T
dHlsZSwgcHJvZ3Jlc3MpOworICAgIAorICAgICAgICBib29sIG5lZWRzQW5pbSA9IGJsZW5kUHJv
cGVydGllcyh0aGlzLCBwcm9wZXJ0eSwgYW5pbWF0ZWRTdHlsZS5nZXQoKSwgZnJvbVN0eWxlLCB0
b1N0eWxlLCBwcm9ncmVzcyk7CiAgICAgICAgIGlmIChuZWVkc0FuaW0pCiAgICAgICAgICAgICBz
ZXRBbmltYXRpbmcoKTsKICAgICAgICAgZWxzZSB7CkBAIC0xNzYsMjYgKzIwMiwyOSBAQCB2b2lk
IEtleWZyYW1lQW5pbWF0aW9uOjpnZXRBbmltYXRlZFN0eWxlKFJlZlB0cjxSZW5kZXJTdHlsZT4m
IGFuaW1hdGVkU3R5bGUpCiAgICAgaWYgKHdhaXRpbmdUb1N0YXJ0KCkgJiYgbV9hbmltYXRpb24t
PmRlbGF5KCkgPiAwICYmICFtX2FuaW1hdGlvbi0+ZmlsbHNCYWNrd2FyZHMoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgLy8gR2V0IHRoZSBmcm9tL3RvIHN0eWxlcyBhbmQgcHJvZ3Jlc3MgYmV0
d2VlbgotICAgIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tU3R5bGUgPSAwOwotICAgIGNvbnN0IFJl
bmRlclN0eWxlKiB0b1N0eWxlID0gMDsKLSAgICBkb3VibGUgcHJvZ3Jlc3M7Ci0gICAgZ2V0S2V5
ZnJhbWVBbmltYXRpb25JbnRlcnZhbChmcm9tU3R5bGUsIHRvU3R5bGUsIHByb2dyZXNzKTsKLQot
ICAgIC8vIElmIGVpdGhlciBzdHlsZSBpcyAwIHdlIGhhdmUgYW4gaW52YWxpZCBjYXNlCi0gICAg
aWYgKCFmcm9tU3R5bGUgfHwgIXRvU3R5bGUpCisgICAgaWYgKCFtX2tleWZyYW1lcy5zaXplKCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghYW5pbWF0ZWRTdHlsZSkKICAgICAgICAgYW5p
bWF0ZWRTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZShtX29iamVjdC0+c3R5bGUoKSk7CiAKICAg
ICBIYXNoU2V0PGludD46OmNvbnN0X2l0ZXJhdG9yIGVuZFByb3BlcnRpZXMgPSBtX2tleWZyYW1l
cy5lbmRQcm9wZXJ0aWVzKCk7Ci0gICAgZm9yIChIYXNoU2V0PGludD46OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9rZXlmcmFtZXMuYmVnaW5Qcm9wZXJ0aWVzKCk7IGl0ICE9IGVuZFByb3BlcnRpZXM7
ICsraXQpCi0gICAgICAgIGJsZW5kUHJvcGVydGllcyh0aGlzLCAqaXQsIGFuaW1hdGVkU3R5bGUu
Z2V0KCksIGZyb21TdHlsZSwgdG9TdHlsZSwgcHJvZ3Jlc3MpOworICAgIGZvciAoSGFzaFNldDxp
bnQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVzLmJlZ2luUHJvcGVydGllcygpOyBp
dCAhPSBlbmRQcm9wZXJ0aWVzOyArK2l0KSB7CisgICAgICAgIGludCBwcm9wZXJ0eSA9ICppdDsK
KworICAgICAgICAvLyBHZXQgdGhlIGZyb20vdG8gc3R5bGVzIGFuZCBwcm9ncmVzcyBiZXR3ZWVu
CisgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tU3R5bGUgPSAwOworICAgICAgICBjb25z
dCBSZW5kZXJTdHlsZSogdG9TdHlsZSA9IDA7CisgICAgICAgIGRvdWJsZSBwcm9ncmVzczsKKyAg
ICAgICAgZmV0Y2hJbnRlcnZhbEVuZHBvaW50c0ZvclByb3BlcnR5KHByb3BlcnR5LCBmcm9tU3R5
bGUsIHRvU3R5bGUsIHByb2dyZXNzKTsKKworICAgICAgICBibGVuZFByb3BlcnRpZXModGhpcywg
cHJvcGVydHksIGFuaW1hdGVkU3R5bGUuZ2V0KCksIGZyb21TdHlsZSwgdG9TdHlsZSwgcHJvZ3Jl
c3MpOworICAgIH0KIH0KIAogYm9vbCBLZXlmcmFtZUFuaW1hdGlvbjo6aGFzQW5pbWF0aW9uRm9y
UHJvcGVydHkoaW50IHByb3BlcnR5KSBjb25zdAogeworICAgIC8vIEZJWE1FOiB3aHkgbm90IGp1
c3QgbV9rZXlmcmFtZXMuY29udGFpbnNQcm9wZXJ0eSgpPwogICAgIEhhc2hTZXQ8aW50Pjo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbV9rZXlmcmFtZXMuZW5kUHJvcGVydGllcygpOwogICAgIGZvciAo
SGFzaFNldDxpbnQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVzLmJlZ2luUHJvcGVy
dGllcygpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgaWYgKCppdCA9PSBwcm9wZXJ0eSkK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaCBi
L1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaAppbmRleCBmYWIwYWU4
Njc1YTcxM2NiMWJkYWIzNWRjYWRjN2I5ZGY1NTUwNjdlLi5hMTg3ZjM1MTI4NTk0NDNjNzAwNDlm
ZDQxNjliMzdjNTkzODMxMTVjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tl
eWZyYW1lQW5pbWF0aW9uLmgKKysrIGIvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFu
aW1hdGlvbi5oCkBAIC04Miw4ICs4Miw4IEBAIHByaXZhdGU6CiAgICAgS2V5ZnJhbWVBbmltYXRp
b24oY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIFJlbmRlck9iamVjdCosIGludCBpbmRleCwg
Q29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyU3R5bGUqIHVuYW5pbWF0ZWRTdHlsZSk7CiAgICAg
dmlydHVhbCB+S2V5ZnJhbWVBbmltYXRpb24oKTsKICAgICAKLSAgICAvLyBHZXQgdGhlIHN0eWxl
cyBzdXJyb3VuZGluZyB0aGUgY3VycmVudCBhbmltYXRpb24gdGltZSBhbmQgdGhlIHByb2dyZXNz
IGJldHdlZW4gdGhlbQotICAgIHZvaWQgZ2V0S2V5ZnJhbWVBbmltYXRpb25JbnRlcnZhbChjb25z
dCBSZW5kZXJTdHlsZSomIGZyb21TdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqJiB0b1N0eWxlLCBk
b3VibGUmIHByb2dyZXNzKSBjb25zdDsKKyAgICAvLyBHZXQgdGhlIHN0eWxlcyBmb3IgdGhlIGdp
dmVuIHByb3BlcnR5IHN1cnJvdW5kaW5nIHRoZSBjdXJyZW50IGFuaW1hdGlvbiB0aW1lIGFuZCB0
aGUgcHJvZ3Jlc3MgYmV0d2VlbiB0aGVtLgorICAgIHZvaWQgZmV0Y2hJbnRlcnZhbEVuZHBvaW50
c0ZvclByb3BlcnR5KGludCBwcm9wZXJ0eSwgY29uc3QgUmVuZGVyU3R5bGUqJiBmcm9tU3R5bGUs
IGNvbnN0IFJlbmRlclN0eWxlKiYgdG9TdHlsZSwgZG91YmxlJiBwcm9ncmVzcykgY29uc3Q7CiAK
ICAgICAvLyBUaGUga2V5ZnJhbWVzIHRoYXQgd2UgYXJlIGJsZW5kaW5nLgogICAgIEtleWZyYW1l
TGlzdCBtX2tleWZyYW1lczsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQmFja2luZy5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3Bw
CmluZGV4IDQzZDE5NDUzOTY4MWNjNzZiOTUwMWQzZjJiNjcxMDI0Y2ZkMTA1NjMuLjBiYTkwN2Jl
OTQwMDExNDRkZjM3YTVhZmRiN2Q1MzlhYTg3NDc5NjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtMTEyNiwxMCArMTEyNiwxMCBAQCBib29sIFJlbmRlckxh
eWVyQmFja2luZzo6c3RhcnRBbmltYXRpb24oZG91YmxlIHRpbWVPZmZzZXQsIGNvbnN0IEFuaW1h
dGlvbiogYW5pbQogICAgICAgICAvLyBnZXQgdGltaW5nIGZ1bmN0aW9uCiAgICAgICAgIGNvbnN0
IFRpbWluZ0Z1bmN0aW9uKiB0ZiA9IGtleWZyYW1lU3R5bGUtPmhhc0FuaW1hdGlvbnMoKSA/ICYo
KCprZXlmcmFtZVN0eWxlLT5hbmltYXRpb25zKCkpLmFuaW1hdGlvbigwKS0+dGltaW5nRnVuY3Rp
b24oKSkgOiAwOwogICAgICAgICAKLSAgICAgICAgaWYgKGhhc1RyYW5zZm9ybSkKKyAgICAgICAg
aWYgKGN1cnJlbnRLZXlmcmFtZS5jb250YWluc1Byb3BlcnR5KEFuaW1hdGVkUHJvcGVydHlXZWJr
aXRUcmFuc2Zvcm0pKQogICAgICAgICAgICAgdHJhbnNmb3JtVmVjdG9yLmluc2VydChuZXcgVHJh
bnNmb3JtQW5pbWF0aW9uVmFsdWUoa2V5LCAmKGtleWZyYW1lU3R5bGUtPnRyYW5zZm9ybSgpKSwg
dGYpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChoYXNPcGFjaXR5KQorICAgICAgICBpZiAoY3Vy
cmVudEtleWZyYW1lLmNvbnRhaW5zUHJvcGVydHkoQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpKQog
ICAgICAgICAgICAgb3BhY2l0eVZlY3Rvci5pbnNlcnQobmV3IEZsb2F0QW5pbWF0aW9uVmFsdWUo
a2V5LCBrZXlmcmFtZVN0eWxlLT5vcGFjaXR5KCksIHRmKSk7CiAgICAgfQogCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9LZXlmcmFtZUxpc3QuY3BwIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvS2V5ZnJhbWVMaXN0LmNwcAppbmRleCA0MWZiYmUyZjQ3YThhOTJmNzYxOWJi
ZTYwNjFmMjUzODhiNjM5NjlhLi5iYWZhNDI2N2MyODcxMDljN2U1Y2JmZWY2MjFlYzY2NWQxNzdh
OTk2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9LZXlmcmFtZUxpc3QuY3Bw
CisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0tleWZyYW1lTGlzdC5jcHAKQEAgLTQzLDEw
ICs0MywxMCBAQCBib29sIEtleWZyYW1lTGlzdDo6b3BlcmF0b3I9PShjb25zdCBLZXlmcmFtZUxp
c3QmIG8pIGNvbnN0CiAKICAgICBWZWN0b3I8S2V5ZnJhbWVWYWx1ZT46OmNvbnN0X2l0ZXJhdG9y
IGl0MiA9IG8ubV9rZXlmcmFtZXMuYmVnaW4oKTsKICAgICBmb3IgKFZlY3RvcjxLZXlmcmFtZVZh
bHVlPjo6Y29uc3RfaXRlcmF0b3IgaXQxID0gbV9rZXlmcmFtZXMuYmVnaW4oKTsgaXQxICE9IG1f
a2V5ZnJhbWVzLmVuZCgpOyArK2l0MSkgewotICAgICAgICBpZiAoaXQxLT5tX2tleSAhPSBpdDIt
Pm1fa2V5KQorICAgICAgICBpZiAoaXQxLT5rZXkoKSAhPSBpdDItPmtleSgpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUxID0gKml0
MS0+bV9zdHlsZTsKLSAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlMiA9ICppdDItPm1f
c3R5bGU7CisgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZTEgPSAqaXQxLT5zdHlsZSgp
OworICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUyID0gKml0Mi0+c3R5bGUoKTsKICAg
ICAgICAgaWYgKHN0eWxlMSAhPSBzdHlsZTIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgICsraXQyOwpAQCAtNTUsMzQgKzU1LDQzIEBAIGJvb2wgS2V5ZnJhbWVMaXN0OjpvcGVy
YXRvcj09KGNvbnN0IEtleWZyYW1lTGlzdCYgbykgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdm9pZCBLZXlmcmFtZUxpc3Q6Omluc2VydChmbG9hdCBrZXksIFBhc3NSZWZQdHI8UmVuZGVy
U3R5bGU+IHN0eWxlKQordm9pZCBLZXlmcmFtZUxpc3Q6Omluc2VydChjb25zdCBLZXlmcmFtZVZh
bHVlJiBrZXlmcmFtZSkKIHsKLSAgICBpZiAoa2V5IDwgMCB8fCBrZXkgPiAxKQorICAgIGlmIChr
ZXlmcmFtZS5rZXkoKSA8IDAgfHwga2V5ZnJhbWUua2V5KCkgPiAxKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpbnQgaW5kZXggPSAtMTsKLSAgICAKKyAgICBib29sIGluc2VydGVkID0gZmFsc2U7
CisgICAgYm9vbCByZXBsYWNlZCA9IGZhbHNlOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9rZXlmcmFtZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fa2V5ZnJhbWVzW2ldLm1f
a2V5ID09IGtleSkgewotICAgICAgICAgICAgaW5kZXggPSAoaW50KSBpOworICAgICAgICBpZiAo
bV9rZXlmcmFtZXNbaV0ua2V5KCkgPT0ga2V5ZnJhbWUua2V5KCkpIHsKKyAgICAgICAgICAgIG1f
a2V5ZnJhbWVzW2ldID0ga2V5ZnJhbWU7CisgICAgICAgICAgICByZXBsYWNlZCA9IHRydWU7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAobV9rZXlmcmFtZXNbaV0u
bV9rZXkgPiBrZXkpIHsKKworICAgICAgICBpZiAobV9rZXlmcmFtZXNbaV0ua2V5KCkgPiBrZXlm
cmFtZS5rZXkoKSkgewogICAgICAgICAgICAgLy8gaW5zZXJ0IGJlZm9yZQotICAgICAgICAgICAg
bV9rZXlmcmFtZXMuaW5zZXJ0KGksIEtleWZyYW1lVmFsdWUoKSk7Ci0gICAgICAgICAgICBpbmRl
eCA9IChpbnQpIGk7CisgICAgICAgICAgICBtX2tleWZyYW1lcy5pbnNlcnQoaSwga2V5ZnJhbWUp
OworICAgICAgICAgICAgaW5zZXJ0ZWQgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICB9CiAgICAgCi0gICAgaWYgKGluZGV4IDwgMCkgewotICAgICAgICAvLyBhcHBl
bmQKLSAgICAgICAgaW5kZXggPSAoaW50KSBtX2tleWZyYW1lcy5zaXplKCk7Ci0gICAgICAgIG1f
a2V5ZnJhbWVzLmFwcGVuZChLZXlmcmFtZVZhbHVlKCkpOworICAgIGlmICghcmVwbGFjZWQgJiYg
IWluc2VydGVkKQorICAgICAgICBtX2tleWZyYW1lcy5hcHBlbmQoa2V5ZnJhbWUpOworCisgICAg
aWYgKHJlcGxhY2VkKSB7CisgICAgICAgIC8vIFdlIGhhdmUgdG8gcmVidWlsZCB0aGUgcHJvcGVy
dGllcyBsaXN0IGZyb20gc2NyYXRjaC4KKyAgICAgICAgbV9wcm9wZXJ0aWVzLmNsZWFyKCk7Cisg
ICAgICAgIGZvciAoVmVjdG9yPEtleWZyYW1lVmFsdWU+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1f
a2V5ZnJhbWVzLmJlZ2luKCk7IGl0ICE9IG1fa2V5ZnJhbWVzLmVuZCgpOyArK2l0KSB7CisgICAg
ICAgICAgICBjb25zdCBLZXlmcmFtZVZhbHVlJiBjdXJyS2V5ZnJhbWUgPSAqaXQ7CisgICAgICAg
ICAgICBmb3IgKEhhc2hTZXQ8aW50Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjdXJyS2V5ZnJhbWUu
cHJvcGVydGllcygpLmJlZ2luKCk7IGl0ICE9IGN1cnJLZXlmcmFtZS5wcm9wZXJ0aWVzKCkuZW5k
KCk7ICsraXQpCisgICAgICAgICAgICAgICAgbV9wcm9wZXJ0aWVzLmFkZCgqaXQpOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChIYXNoU2V0PGludD46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0ga2V5ZnJhbWUucHJvcGVydGllcygpLmJlZ2luKCk7IGl0ICE9IGtleWZyYW1lLnBy
b3BlcnRpZXMoKS5lbmQoKTsgKytpdCkKKyAgICAgICAgICAgIG1fcHJvcGVydGllcy5hZGQoKml0
KTsKICAgICB9Ci0gICAgCi0gICAgbV9rZXlmcmFtZXNbaW5kZXhdLm1fa2V5ID0ga2V5OwotICAg
IG1fa2V5ZnJhbWVzW2luZGV4XS5tX3N0eWxlID0gc3R5bGU7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0tleWZyYW1lTGlz
dC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvS2V5ZnJhbWVMaXN0LmgKaW5kZXggNDRhMmJk
ZjgzNjE3ZDZmNjJlYTI2NmU5NjhjYTExY2RmYzNiNzhmYi4uNjQxNzBjZTBjZGMwN2ZkZDg2ZDZk
NGQwNzE4ZGU5YzRjNjY5Yjk2YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
S2V5ZnJhbWVMaXN0LmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvS2V5ZnJhbWVMaXN0
LmgKQEAgLTM3LDE1ICszNywyNSBAQCBjbGFzcyBSZW5kZXJTdHlsZTsKIAogY2xhc3MgS2V5ZnJh
bWVWYWx1ZSB7CiBwdWJsaWM6Ci0gICAgS2V5ZnJhbWVWYWx1ZSgpCi0gICAgICAgIDogbV9rZXko
LTEpCisgICAgS2V5ZnJhbWVWYWx1ZShmbG9hdCBrZXksIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+
IHN0eWxlKQorICAgICAgICA6IG1fa2V5KGtleSkKKyAgICAgICAgLCBtX3N0eWxlKHN0eWxlKQog
ICAgIHsKICAgICB9CiAKKyAgICB2b2lkIGFkZFByb3BlcnR5KGludCBwcm9wKSB7IG1fcHJvcGVy
dGllcy5hZGQocHJvcCk7IH0KKyAgICBib29sIGNvbnRhaW5zUHJvcGVydHkoaW50IHByb3ApIGNv
bnN0IHsgcmV0dXJuIG1fcHJvcGVydGllcy5jb250YWlucyhwcm9wKTsgfQorICAgIGNvbnN0IEhh
c2hTZXQ8aW50PiYgcHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydGllczsgfQor
CiAgICAgZmxvYXQga2V5KCkgY29uc3QgeyByZXR1cm4gbV9rZXk7IH0KKyAgICB2b2lkIHNldEtl
eShmbG9hdCBrZXkpIHsgbV9rZXkgPSBrZXk7IH0KKwogICAgIGNvbnN0IFJlbmRlclN0eWxlKiBz
dHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KKyAgICB2b2lkIHNldFN0eWxl
KFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlKSB7IG1fc3R5bGUgPSBzdHlsZTsgfQogCitw
cml2YXRlOgogICAgIGZsb2F0IG1fa2V5OworICAgIEhhc2hTZXQ8aW50PiBtX3Byb3BlcnRpZXM7
IC8vIFRoZSBwcm9wZXJ0aWVzIHNwZWNpZmllZCBpbiB0aGlzIGtleWZyYW1lLgogICAgIFJlZlB0
cjxSZW5kZXJTdHlsZT4gbV9zdHlsZTsKIH07CiAKQEAgLTU1LDggKzY1LDggQEAgcHVibGljOgog
ICAgICAgICA6IG1fYW5pbWF0aW9uTmFtZShhbmltYXRpb25OYW1lKQogICAgICAgICAsIG1fcmVu
ZGVyZXIocmVuZGVyZXIpCiAgICAgewotICAgICAgICBpbnNlcnQoMCwgMCk7Ci0gICAgICAgIGlu
c2VydCgxLCAwKTsKKyAgICAgICAgaW5zZXJ0KEtleWZyYW1lVmFsdWUoMCwgMCkpOworICAgICAg
ICBpbnNlcnQoS2V5ZnJhbWVWYWx1ZSgxLCAwKSk7CiAgICAgfQogICAgIH5LZXlmcmFtZUxpc3Qo
KTsKICAgICAgICAgCkBAIC02NSw3ICs3NSw3IEBAIHB1YmxpYzoKICAgICAKICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIGFuaW1hdGlvbk5hbWUoKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlvbk5h
bWU7IH0KICAgICAKLSAgICB2b2lkIGluc2VydChmbG9hdCBrZXksIFBhc3NSZWZQdHI8UmVuZGVy
U3R5bGU+IHN0eWxlKTsKKyAgICB2b2lkIGluc2VydChjb25zdCBLZXlmcmFtZVZhbHVlJiBrZXlm
cmFtZSk7CiAgICAgCiAgICAgdm9pZCBhZGRQcm9wZXJ0eShpbnQgcHJvcCkgeyBtX3Byb3BlcnRp
ZXMuYWRkKHByb3ApOyB9CiAgICAgYm9vbCBjb250YWluc1Byb3BlcnR5KGludCBwcm9wKSBjb25z
dCB7IHJldHVybiBtX3Byb3BlcnRpZXMuY29udGFpbnMocHJvcCk7IH0KQEAgLTc5LDggKzg5LDgg
QEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIEF0b21pY1N0cmluZyBtX2FuaW1hdGlvbk5hbWU7
Ci0gICAgVmVjdG9yPEtleWZyYW1lVmFsdWU+IG1fa2V5ZnJhbWVzOwotICAgIEhhc2hTZXQ8aW50
PiBtX3Byb3BlcnRpZXM7ICAgICAgIC8vIHRoZSBwcm9wZXJ0aWVzIGJlaW5nIGFuaW1hdGVkCisg
ICAgVmVjdG9yPEtleWZyYW1lVmFsdWU+IG1fa2V5ZnJhbWVzOyAvLyBrZXB0IHNvcnRlZCBieSBr
ZXkKKyAgICBIYXNoU2V0PGludD4gbV9wcm9wZXJ0aWVzOyAvLyB0aGUgcHJvcGVydGllcyBiZWlu
ZyBhbmltYXRlZAogICAgIFJlbmRlck9iamVjdCogbV9yZW5kZXJlcjsKIH07CiAK
</data>
<flag name="review"
          id="54734"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>