<?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>23435</bug_id>
          
          <creation_ts>2009-01-20 11:09:54 -0800</creation_ts>
          <short_desc>Make SVG spreadMethod a member of Gradient rather than GraphicsContext</short_desc>
          <delta_ts>2009-01-27 09:14:35 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</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>0</everconfirmed>
          <reporter name="Evan Stade">estade</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>krit</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>106344</commentid>
    <comment_count>0</comment_count>
    <who name="Evan Stade">estade</who>
    <bug_when>2009-01-20 11:09:54 -0800</bug_when>
    <thetext>Both cairo and skia treat spreadMethod as an aspect of the platform gradient (rather than state).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106346</commentid>
    <comment_count>1</comment_count>
      <attachid>26864</attachid>
    <who name="Evan Stade">estade</who>
    <bug_when>2009-01-20 11:10:44 -0800</bug_when>
    <thetext>Created attachment 26864
gradient spreadMethod patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106457</commentid>
    <comment_count>2</comment_count>
      <attachid>26864</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-01-21 08:41:46 -0800</bug_when>
    <thetext>Comment on attachment 26864
gradient spreadMethod patch

This patch looks great! Though you should pass around the enum, instead of an integer. This could be achieved by moving GradientSpreadMethod from GraphicsContext.h to GraphicsTypes.h, and including GraphicsTypes.h in both GraphicsContext.h and Gradient.h. What do you think?

r- because of that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106468</commentid>
    <comment_count>3</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-01-21 09:49:58 -0800</bug_when>
    <thetext>Just happened to look at this and saw a few things:

In WebCore/platform/graphics/cairo/GradientCairo.cpp, applySpreadMethod:
* case statements shouldn&apos;t be indented (in other places too)
* cairo_pattern_set_extend(pattern, CAIRO_EXTEND_PAD); is indented only 3 spaces.
* It should &quot;return pattern;&quot; at the end of the function.

In WebCore/platform/graphics/skia/GradientSkia.cpp,

  return m_gradient; 
got indented incorrectly.

  switch (spreadMethod) {
  ...
  default:

The default is going to prevent compiler warning/errors about unhandled enums values (when this is an enum).  If you want to ensure that SkShader::TileMode tile; is initialized (which is great), then do SkShader::TileMode tile = SkShader::kClamp_TileMode;


</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106493</commentid>
    <comment_count>4</comment_count>
      <attachid>26903</attachid>
    <who name="Evan Stade">estade</who>
    <bug_when>2009-01-21 13:20:02 -0800</bug_when>
    <thetext>Created attachment 26903
SVG gradient spreadMethod patch try2

updated according to reviewers&apos; comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106494</commentid>
    <comment_count>5</comment_count>
    <who name="Evan Stade">estade</who>
    <bug_when>2009-01-21 13:21:00 -0800</bug_when>
    <thetext>thanks for the comments. Updated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106495</commentid>
    <comment_count>6</comment_count>
      <attachid>26903</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-01-21 13:37:21 -0800</bug_when>
    <thetext>Comment on attachment 26903
SVG gradient spreadMethod patch try2

Looks good. Though you need to obey some parameter names, as the mac build recently fails on &apos;unused variable&apos; warnings.

&gt; Index: WebCore/platform/graphics/cg/GradientCG.cpp
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/cg/GradientCG.cpp	(revision 39831)
&gt; +++ WebCore/platform/graphics/cg/GradientCG.cpp	(working copy)
&gt; @@ -50,7 +50,7 @@ static void gradientCallback(void* info,
&gt;      out[3] = a;
&gt;  }
&gt;  
&gt; -CGShadingRef Gradient::platformGradient()
&gt; +CGShadingRef Gradient::platformGradient(GradientSpreadMethod spreadMethod)
Obey the &apos;spreadMethod&apos; name here.

&gt; Index: WebCore/platform/graphics/qt/GradientQt.cpp
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/qt/GradientQt.cpp	(revision 39831)
&gt; +++ WebCore/platform/graphics/qt/GradientQt.cpp	(working copy)
&gt; @@ -40,7 +40,7 @@ void Gradient::platformDestroy()
&gt;      m_gradient = 0;
&gt;  }
&gt;  
&gt; -QGradient* Gradient::platformGradient()
&gt; +QGradient* Gradient::platformGradient(GradientSpreadMethod spreadMethod)
Same here, not sure if Linux builds fail as well, but better safe than sorry.

&gt; Index: WebCore/platform/graphics/wx/GradientWx.cpp
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/wx/GradientWx.cpp	(revision 39831)
&gt; +++ WebCore/platform/graphics/wx/GradientWx.cpp	(working copy)
&gt; @@ -36,7 +36,7 @@ void Gradient::platformDestroy()
&gt;      notImplemented();
&gt;  }
&gt;  
&gt; -PlatformGradient Gradient::platformGradient()
&gt; +PlatformGradient Gradient::platformGradient(GradientSpreadMethod spreadMethod)
Ditto.

While I didn&apos;t comment on this before, I still like to raise the issue: Why is spread method living in GraphicsContext anyways?
It seems to me it better fits in the &apos;Gradient&apos; class anyway (as the gradient stops live there as well) - this way we wouldn&apos;t
need to pass down the spreadMethod() in a lot of calls.

What do you think? If you have strong reasons against, we might as well r+ the patch as it looks fine, though maybe it&apos;s unnecessary...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106499</commentid>
    <comment_count>7</comment_count>
    <who name="Evan Stade">estade</who>
    <bug_when>2009-01-21 14:08:12 -0800</bug_when>
    <thetext>Sorry, I&apos;m not sure what you mean by &quot;obey the parameter name&quot;. I thought compilers (even the ones that worry about unused local variables) typically don&apos;t complain about unused parameters.

You might be right about moving the spread method to the gradient. I&apos;ll look into that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106503</commentid>
    <comment_count>8</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-01-21 14:32:23 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Sorry, I&apos;m not sure what you mean by &quot;obey the parameter name&quot;. I thought
&gt; compilers (even the ones that worry about unused local variables) typically
&gt; don&apos;t complain about unused parameters.
See http://trac.webkit.org/changeset/39880. -Wno-unused-parameter is now firing in cases where you don&apos;t use a named function argument, as we fail the build on warnings, it would be broken.

You either have to obey the parameter name, if you don&apos;t intend to use it, or use &quot;UNUSED_PARAM(myParameter);&quot;
 
&gt; You might be right about moving the spread method to the gradient. I&apos;ll look
&gt; into that.
Excellent.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106529</commentid>
    <comment_count>9</comment_count>
      <attachid>26911</attachid>
    <who name="Evan Stade">estade</who>
    <bug_when>2009-01-21 15:59:22 -0800</bug_when>
    <thetext>Created attachment 26911
move spreadMethod attribute to Gradient (from GraphicsContext)

Ok, thanks for the explanation. I hadn&apos;t heard &quot;obey&quot; used in that context before.

I&apos;ve moved spreadMethod as you suggested. Note that you should not try to change a gradient&apos;s spreadMethod after m_gradient is created.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106538</commentid>
    <comment_count>10</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-01-21 16:22:15 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Created an attachment (id=26911) [review]
&gt; move spreadMethod attribute to Gradient (from GraphicsContext)
&gt; 
&gt; Ok, thanks for the explanation. I hadn&apos;t heard &quot;obey&quot; used in that context
&gt; before.
Oh jesus, I meant to say &quot;omit&quot;, not &quot;obey&quot;. Sorry for the confusion, I should drink more coffee :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106539</commentid>
    <comment_count>11</comment_count>
      <attachid>26911</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-01-21 16:28:33 -0800</bug_when>
    <thetext>Comment on attachment 26911
move spreadMethod attribute to Gradient (from GraphicsContext)

Patch looks much better, r+, with one comments:
  
&gt; +        void setSpreadMethod(GradientSpreadMethod spreadMethod) {
&gt; +            ASSERT(m_gradient == NULL);
&gt; +            m_spreadMethod = spreadMethod;
&gt; +        }

We use &quot;0&quot; instead of &quot;NULL&quot; in WebKit. But why does m_gradient have to be null?
I&apos;d rather implement the setSpreadMethod in Gradient.cpp, and add a FIXME to handle
dynamic spread method changes (when m_gradient has already been created), instead
of asserting

Thanks for the nice work!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106542</commentid>
    <comment_count>12</comment_count>
      <attachid>26916</attachid>
    <who name="Evan Stade">estade</who>
    <bug_when>2009-01-21 16:45:23 -0800</bug_when>
    <thetext>Created attachment 26916
try4

&gt; We use &quot;0&quot; instead of &quot;NULL&quot; in WebKit.

Ok.

&gt; But why does m_gradient have to be null? ...

OK, but I left the ASSERT to avoid future head-banging since the current use pattern should never hit this ASSERT and it would only be hit if someone made changes.

&gt; Thanks for the nice work!

thanks for the review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106543</commentid>
    <comment_count>13</comment_count>
      <attachid>26917</attachid>
    <who name="Evan Stade">estade</who>
    <bug_when>2009-01-21 16:47:29 -0800</bug_when>
    <thetext>Created attachment 26917
try5

fixed typo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106547</commentid>
    <comment_count>14</comment_count>
      <attachid>26918</attachid>
    <who name="Evan Stade">estade</who>
    <bug_when>2009-01-21 17:04:37 -0800</bug_when>
    <thetext>Created attachment 26918
try6

added bug url to changelog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106693</commentid>
    <comment_count>15</comment_count>
      <attachid>26918</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-01-22 21:12:22 -0800</bug_when>
    <thetext>Comment on attachment 26918
try6

Most issues seem resolved, r=me - just one minor style issue:

&gt; +        void setSpreadMethod(GradientSpreadMethod spreadMethod);
&gt; +
&gt; +        GradientSpreadMethod spreadMethod() { return m_spreadMethod; }
You can remove the newline between those methods, and omit the parameter name in setSpreadMethod, so it just reads &apos;void setSpreadMethod(GradientSpreadMethod);&apos;

You don&apos;t need to upload another patch, just fix that issue before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107170</commentid>
    <comment_count>16</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-01-27 00:06:25 -0800</bug_when>
    <thetext>can you land this patch? Do you have commit rights?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107191</commentid>
    <comment_count>17</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-01-27 08:47:30 -0800</bug_when>
    <thetext>I&apos;ll land this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107196</commentid>
    <comment_count>18</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-01-27 09:14:35 -0800</bug_when>
    <thetext>Committed in http://trac.webkit.org/changeset/40292</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26864</attachid>
            <date>2009-01-20 11:10:44 -0800</date>
            <delta_ts>2009-01-21 16:47:29 -0800</delta_ts>
            <desc>gradient spreadMethod patch</desc>
            <filename>grad-spread.diff</filename>
            <type>text/plain</type>
            <size>16153</size>
            <attacher name="Evan Stade">estade</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDA2MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDYgQEAKKzIwMDktMDEtMjAgIEV2YW4gU3RhZGUgIDxzZXQgRU1BSUxfQUREUkVT
UyBlbnZpcm9ubWVudCB2YXJpYWJsZT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBQYXNzIHNwcmVhZE1ldGhvZCBhcyBhIHBhcmFtZXRlciB0byBHcmFk
aWVudDo6cGxhdGZvcm1HcmFkaWVudCgpLgorICAgICAgICBBbHNvIGltcGxlbWVudCBpdCBpbiBT
a2lhLgorCisgICAgICAgIFRlc3QgaXMgTGF5b3V0VGVzdHMvc3ZnL1czQy1TVkctMS4xL3BzZXJ2
ZXJzLWdyYWQtMTQtYi5zdmcKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHA6
CisgICAgICAgIChXZWJDb3JlOjphcHBseVNwcmVhZE1ldGhvZCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFkaWVudDo6cGxhdGZvcm1HcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVu
dDo6ZmlsbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250
ZXh0Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0
aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhZGllbnQ6OnBsYXRmb3JtR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
ZGllbnQ6OmZpbGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29u
dGV4dENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9xdC9HcmFkaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpwbGF0
Zm9ybUdyYWRpZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0Nv
bnRleHRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRo
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0dyYWRpZW50U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpm
aWxsU3RvcHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnBsYXRmb3JtR3JhZGllbnQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYWRpZW50V3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhZGllbnQ6OnBsYXRmb3JtR3JhZGllbnQpOgorCiAyMDA5LTAxLTIwICBEYXJpbiBBZGxlciAg
PGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYXJrIFJvd2UuCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCShyZXZpc2lvbiAzOTgzMSkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzEs
NyArNzEsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBnZXRDb2xvcihm
bG9hdCB2YWx1ZSwgZmxvYXQqIHIsIGZsb2F0KiBnLCBmbG9hdCogYiwgZmxvYXQqIGEpIGNvbnN0
OwogCi0gICAgICAgIFBsYXRmb3JtR3JhZGllbnQgcGxhdGZvcm1HcmFkaWVudCgpOworICAgICAg
ICAvLyB8c3ByZWFkTWV0aG9kfCBpcyBvZiBlbnVtIHR5cGUgR3JhZGllbnRTcHJlYWRNZXRob2Qu
CisgICAgICAgIFBsYXRmb3JtR3JhZGllbnQgcGxhdGZvcm1HcmFkaWVudChpbnQgc3ByZWFkTWV0
aG9kKTsKIAogICAgICAgICBzdHJ1Y3QgQ29sb3JTdG9wIHsKICAgICAgICAgICAgIGZsb2F0IHN0
b3A7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGll
bnRDYWlyby5jcHAJKHJldmlzaW9uIDM5ODMxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTAgKzQxLDI3
IEBAIHZvaWQgR3JhZGllbnQ6OnBsYXRmb3JtRGVzdHJveSgpCiAgICAgfQogfQogCi1jYWlyb19w
YXR0ZXJuX3QqIEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50KCkKK3N0YXRpYyBpbmxpbmUgY2Fp
cm9fcGF0dGVybl90KiBhcHBseVNwcmVhZE1ldGhvZChjYWlyb19wYXR0ZXJuX3QqIHBhdHRlcm4s
IGludCBzcHJlYWRNZXRob2QpCiB7Ci0gICAgaWYgKG1fZ3JhZGllbnQpCisgICAgc3dpdGNoIChz
cHJlYWRNZXRob2QpIHsKKyAgICAgICAgY2FzZSBTcHJlYWRNZXRob2RQYWQ6CisgICAgICAgICAg
IGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZChwYXR0ZXJuLCBDQUlST19FWFRFTkRfUEFEKTsKKyAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3ByZWFkTWV0aG9kUmVmbGVjdDoKKyAgICAg
ICAgICAgIGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZChwYXR0ZXJuLCBDQUlST19FWFRFTkRfUkVG
TEVDVCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTcHJlYWRNZXRob2RSZXBl
YXQ6CisgICAgICAgICAgICBjYWlyb19wYXR0ZXJuX3NldF9leHRlbmQocGF0dGVybiwgQ0FJUk9f
RVhURU5EX1JFUEVBVCk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK2NhaXJvX3Bh
dHRlcm5fdCogR3JhZGllbnQ6OnBsYXRmb3JtR3JhZGllbnQoaW50IHNwcmVhZE1ldGhvZCkKK3sK
KyAgICBpZiAobV9ncmFkaWVudCkgeworICAgICAgICBhcHBseVNwcmVhZE1ldGhvZChtX2dyYWRp
ZW50LCBzcHJlYWRNZXRob2QpOwogICAgICAgICByZXR1cm4gbV9ncmFkaWVudDsKKyAgICB9CiAK
ICAgICBpZiAobV9yYWRpYWwpCiAgICAgICAgIG1fZ3JhZGllbnQgPSBjYWlyb19wYXR0ZXJuX2Ny
ZWF0ZV9yYWRpYWwobV9wMC54KCksIG1fcDAueSgpLCBtX3IwLCBtX3AxLngoKSwgbV9wMS55KCks
IG1fcjEpOwpAQCAtNTcsNiArNzQsNyBAQCBjYWlyb19wYXR0ZXJuX3QqIEdyYWRpZW50OjpwbGF0
Zm9ybUdyYWRpCiAgICAgICAgICsrc3RvcEl0ZXJhdG9yOwogICAgIH0KIAorICAgIGFwcGx5U3By
ZWFkTWV0aG9kKG1fZ3JhZGllbnQsIHNwcmVhZE1ldGhvZCk7CiAgICAgcmV0dXJuIG1fZ3JhZGll
bnQ7CiB9CiAKQEAgLTY1LDcgKzgzLDcgQEAgdm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0Nv
bnRleHQqIGNvbgogICAgIGNhaXJvX3QqIGNyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7
CiAKICAgICBjYWlyb19zYXZlKGNyKTsKLSAgICBjYWlyb19zZXRfc291cmNlKGNyLCBwbGF0Zm9y
bUdyYWRpZW50KCkpOworICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIHBsYXRmb3JtR3JhZGllbnQo
c3ByZWFkTWV0aG9kUGFkKSk7CiAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCByZWN0LngoKSwgcmVj
dC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CiAgICAgY2Fpcm9fZmlsbChjcik7
CiAgICAgY2Fpcm9fcmVzdG9yZShjcik7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAkocmV2aXNpb24g
Mzk4MzEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4
dENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsMjIgKzg3LDYgQEAgc3RhdGljIGlubGlu
ZSB2b2lkIGZpbGxSZWN0U291cmNlT3ZlcihjYQogICAgIGNhaXJvX2ZpbGwoY3IpOwogfQogCi1z
dGF0aWMgaW5saW5lIGNhaXJvX3BhdHRlcm5fdCogYXBwbHlTcHJlYWRNZXRob2QoY2Fpcm9fcGF0
dGVybl90KiBwYXR0ZXJuLCBHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRob2QpCi17Ci0g
ICAgc3dpdGNoIChzcHJlYWRNZXRob2QpIHsKLSAgICAgICAgY2FzZSBTcHJlYWRNZXRob2RQYWQ6
Ci0gICAgICAgICAgIGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZChwYXR0ZXJuLCBDQUlST19FWFRF
TkRfUEFEKTsKLSAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU3ByZWFkTWV0aG9kUmVm
bGVjdDoKLSAgICAgICAgICAgIGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZChwYXR0ZXJuLCBDQUlS
T19FWFRFTkRfUkVGTEVDVCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTcHJl
YWRNZXRob2RSZXBlYXQ6Ci0gICAgICAgICAgICBjYWlyb19wYXR0ZXJuX3NldF9leHRlbmQocGF0
dGVybiwgQ0FJUk9fRVhURU5EX1JFUEVBVCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgcmV0dXJuIHBhdHRlcm47Ci19Ci0KIEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0
KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBjcikKICAgICA6IG1fY29tbW9uKGNyZWF0ZUdyYXBo
aWNzQ29udGV4dFByaXZhdGUoKSkKICAgICAsIG1fZGF0YShuZXcgR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlKQpAQCAtNDYyLDggKzQ0Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUGF0aCgpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEdyYWRpZW50Q29sb3JT
cGFjZToKLSAgICAgICAgY2Fpcm9fcGF0dGVybl90KiBwYXR0ZXJuID0gbV9jb21tb24tPnN0YXRl
LmZpbGxHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpOwotICAgICAgICBwYXR0ZXJuID0gYXBw
bHlTcHJlYWRNZXRob2QocGF0dGVybiwgc3ByZWFkTWV0aG9kKCkpOworICAgICAgICBjYWlyb19w
YXR0ZXJuX3QqIHBhdHRlcm4gPSBtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50LT5wbGF0Zm9y
bUdyYWRpZW50KHNwcmVhZE1ldGhvZCgpKTsKICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZShjciwg
cGF0dGVybik7CiAgICAgICAgIGNhaXJvX2NsaXAoY3IpOwogICAgICAgICBjYWlyb19wYWludF93
aXRoX2FscGhhKGNyLCBtX2NvbW1vbi0+c3RhdGUuZ2xvYmFsQWxwaGEpOwpAQCAtNTAwLDggKzQ4
Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKCkKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIGNhc2UgR3JhZGllbnRDb2xvclNwYWNlOgotICAgICAgICBjYWlyb19wYXR0
ZXJuX3QqIHBhdHRlcm4gPSBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBsYXRmb3Jt
R3JhZGllbnQoKTsKLSAgICAgICAgcGF0dGVybiA9IGFwcGx5U3ByZWFkTWV0aG9kKHBhdHRlcm4s
IHNwcmVhZE1ldGhvZCgpKTsKKyAgICAgICAgY2Fpcm9fcGF0dGVybl90KiBwYXR0ZXJuID0gbV9j
b21tb24tPnN0YXRlLnN0cm9rZUdyYWRpZW50LT5wbGF0Zm9ybUdyYWRpZW50KHNwcmVhZE1ldGhv
ZCgpKTsKICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgcGF0dGVybik7CiAgICAgICAgIGlm
IChtX2NvbW1vbi0+c3RhdGUuZ2xvYmFsQWxwaGEgPCAxLjBmKSB7CiAgICAgICAgICAgICBjYWly
b19wdXNoX2dyb3VwKGNyKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
ZGllbnRDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9H
cmFkaWVudENHLmNwcAkocmV2aXNpb24gMzk4MzEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0dyYWRpZW50Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHN0
YXRpYyB2b2lkIGdyYWRpZW50Q2FsbGJhY2sodm9pZCogaW5mbywKICAgICBvdXRbM10gPSBhOwog
fQogCi1DR1NoYWRpbmdSZWYgR3JhZGllbnQ6OnBsYXRmb3JtR3JhZGllbnQoKQorQ0dTaGFkaW5n
UmVmIEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50KGludCBzcHJlYWRNZXRob2QpCiB7CiAgICAg
aWYgKG1fZ3JhZGllbnQpCiAgICAgICAgIHJldHVybiBtX2dyYWRpZW50OwpAQCAtNzYsNyArNzYs
NyBAQCBDR1NoYWRpbmdSZWYgR3JhZGllbnQ6OnBsYXRmb3JtR3JhZGllbnQoCiB2b2lkIEdyYWRp
ZW50OjpmaWxsKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0
KQogewogICAgIGNvbnRleHQtPmNsaXAocmVjdCk7Ci0gICAgQ0dDb250ZXh0RHJhd1NoYWRpbmco
Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHBsYXRmb3JtR3JhZGllbnQoKSk7CisgICAgQ0dD
b250ZXh0RHJhd1NoYWRpbmcoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHBsYXRmb3JtR3Jh
ZGllbnQoU3ByZWFkTWV0aG9kUGFkKSk7CiB9CiAKIH0gLy9uYW1lc3BhY2UKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCShy
ZXZpc2lvbiAzOTgzMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3ND
b250ZXh0Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTgsNyArNDk4LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmZpbGxQYXRoKCkKICAgICAgICAgICAgIENHQ29udGV4dEVPQ2xpcChjb250
ZXh0KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcChjb250ZXh0KTsK
LSAgICAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29udGV4dCwgbV9jb21tb24tPnN0YXRlLmZp
bGxHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd1No
YWRpbmcoY29udGV4dCwgbV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC0+cGxhdGZvcm1HcmFk
aWVudChzcHJlYWRNZXRob2QoKSkpOwogICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNv
bnRleHQpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC01MjMsNyArNTIzLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoKQogICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRl
KGNvbnRleHQpOwogICAgICAgICBDR0NvbnRleHRSZXBsYWNlUGF0aFdpdGhTdHJva2VkUGF0aChj
b250ZXh0KTsKICAgICAgICAgQ0dDb250ZXh0Q2xpcChjb250ZXh0KTsKLSAgICAgICAgQ0dDb250
ZXh0RHJhd1NoYWRpbmcoY29udGV4dCwgbV9jb21tb24tPnN0YXRlLnN0cm9rZUdyYWRpZW50LT5w
bGF0Zm9ybUdyYWRpZW50KCkpOworICAgICAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0
LCBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoc3ByZWFk
TWV0aG9kKCkpKTsKICAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNTQ2LDcgKzU0Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8KICAgICBjYXNlIEdyYWRpZW50Q29sb3JTcGFjZToKICAg
ICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKICAgICAgICAgQ0dDb250ZXh0Q2xp
cFRvUmVjdChjb250ZXh0LCByZWN0KTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29u
dGV4dCwgbV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsK
KyAgICAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29udGV4dCwgbV9jb21tb24tPnN0YXRlLmZp
bGxHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudChzcHJlYWRNZXRob2QoKSkpOwogICAgICAgICBD
R0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwogICAgICAgICBicmVhazsKICAgICB9CkBA
IC03ODYsNyArNzg2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3Qg
RgogICAgICAgICBDR0NvbnRleHRBZGRSZWN0KGNvbnRleHQsIHIpOwogICAgICAgICBDR0NvbnRl
eHRSZXBsYWNlUGF0aFdpdGhTdHJva2VkUGF0aChjb250ZXh0KTsKICAgICAgICAgQ0dDb250ZXh0
Q2xpcChjb250ZXh0KTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29udGV4dCwgbV9j
b21tb24tPnN0YXRlLnN0cm9rZUdyYWRpZW50LT5wbGF0Zm9ybUdyYWRpZW50KCkpOworICAgICAg
ICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0LCBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3Jh
ZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoc3ByZWFkTWV0aG9kKCkpKTsKICAgICAgICAgQ0dDb250
ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFkaWVudFF0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYWRpZW50UXQuY3BwCShyZXZpc2lvbiAz
OTgzMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhZGllbnRRdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgdm9pZCBHcmFkaWVudDo6cGxhdGZvcm1EZXN0
cm95KCkKICAgICBtX2dyYWRpZW50ID0gMDsKIH0KIAotUUdyYWRpZW50KiBHcmFkaWVudDo6cGxh
dGZvcm1HcmFkaWVudCgpCitRR3JhZGllbnQqIEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50KGlu
dCBzcHJlYWRNZXRob2QpCiB7CiAgICAgaWYgKG1fZ3JhZGllbnQpCiAgICAgICAgIHJldHVybiBt
X2dyYWRpZW50OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0Nv
bnRleHRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9H
cmFwaGljc0NvbnRleHRRdC5jcHAJKHJldmlzaW9uIDM5ODMxKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1
Myw3ICs1NTMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoKQogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgY2FzZSBHcmFkaWVudENvbG9yU3BhY2U6Ci0gICAgICAgIFFHcmFk
aWVudCogZ3JhZGllbnQgPSBtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50LT5wbGF0Zm9ybUdy
YWRpZW50KCk7CisgICAgICAgIFFHcmFkaWVudCogZ3JhZGllbnQgPSBtX2NvbW1vbi0+c3RhdGUu
ZmlsbEdyYWRpZW50LT5wbGF0Zm9ybUdyYWRpZW50KHNwcmVhZE1ldGhvZCgpKTsKICAgICAgICAg
KmdyYWRpZW50ID0gYXBwbHlTcHJlYWRNZXRob2QoKmdyYWRpZW50LCBzcHJlYWRNZXRob2QoKSk7
ICAKICAgICAgICAgcC0+ZmlsbFBhdGgocGF0aCwgUUJydXNoKCpncmFkaWVudCkpOwogICAgICAg
ICBicmVhazsKQEAgLTU4Myw3ICs1ODMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tl
UGF0aCgpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEdyYWRpZW50Q29sb3JTcGFj
ZTogewotICAgICAgICBRR3JhZGllbnQqIGdyYWRpZW50ID0gbV9jb21tb24tPnN0YXRlLnN0cm9r
ZUdyYWRpZW50LT5wbGF0Zm9ybUdyYWRpZW50KCk7CisgICAgICAgIFFHcmFkaWVudCogZ3JhZGll
bnQgPSBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoc3By
ZWFkTWV0aG9kKCkpOwogICAgICAgICAqZ3JhZGllbnQgPSBhcHBseVNwcmVhZE1ldGhvZCgqZ3Jh
ZGllbnQsIHNwcmVhZE1ldGhvZCgpKTsgCiAgICAgICAgIHBlbi5zZXRCcnVzaChRQnJ1c2goKmdy
YWRpZW50KSk7CiAgICAgICAgIHAtPnNldFBlbihwZW4pOwpAQCAtNjEyLDcgKzYxMiw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8KICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgIGNhc2UgR3JhZGllbnRDb2xvclNwYWNlOgotICAgICAgICBwLT5maWxsUmVjdChy
ZWN0LCBRQnJ1c2goKihtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50LmdldCgpLT5wbGF0Zm9y
bUdyYWRpZW50KCkpKSk7CisgICAgICAgIHAtPmZpbGxSZWN0KHJlY3QsIFFCcnVzaCgqKG1fY29t
bW9uLT5zdGF0ZS5maWxsR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoc3ByZWFkTWV0aG9kKCkp
KSkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgbV9kYXRhLT5jdXJyZW50UGF0aCA9IFFQ
YWludGVyUGF0aCgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYWRp
ZW50U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L0dyYWRpZW50U2tpYS5jcHAJKHJldmlzaW9uIDM5ODMyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0dyYWRpZW50U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2
LDcgQEAgc3RhdGljIHNpemVfdCB0b3RhbFN0b3BzTmVlZGVkKGNvbnN0IEdyYQogLy8gc3RvcHMg
YXQgMC4wIGFuZCAxLjAgYXJlbid0IGFscmVhZHkgaW5jbHVkZWQuCiBzdGF0aWMgdm9pZCBmaWxs
U3RvcHMoY29uc3QgR3JhZGllbnQ6OkNvbG9yU3RvcCogc3RvcERhdGEsCiAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBjb3VudCwgU2tTY2FsYXIqIHBvcywgU2tDb2xvciogY29sb3JzKQot
eyAKK3sKICAgICBjb25zdCBHcmFkaWVudDo6Q29sb3JTdG9wKiBzdG9wID0gc3RvcERhdGE7CiAg
ICAgc2l6ZV90IHN0YXJ0ID0gMDsKICAgICBpZiAoY291bnQgPCAxKSB7CkBAIC0xMTMsMTAgKzEx
MywxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVN0b3BzKGNvbnN0IEdyCiAgICAgcmV0
dXJuIGEuc3RvcCA8IGIuc3RvcDsKIH0KIAotU2tTaGFkZXIqIEdyYWRpZW50OjpwbGF0Zm9ybUdy
YWRpZW50KCkKK1NrU2hhZGVyKiBHcmFkaWVudDo6cGxhdGZvcm1HcmFkaWVudChpbnQgc3ByZWFk
TWV0aG9kKQogeworICAgIC8vIEZJWE1FOiBXaWxsIHRoaXMgZXZlciByZXR1cm4gYSBncmFkaWVu
dCB3aXRoIHRoZSB3cm9uZyBzcHJlYWQgbWV0aG9kPwogICAgIGlmIChtX2dyYWRpZW50KQotICAg
ICAgICByZXR1cm4gbV9ncmFkaWVudDsKKyAgICAgIHJldHVybiBtX2dyYWRpZW50OwogCiAgICAg
Ly8gRklYTUU6IFRoaXMgYW5kIGNvbXBhcmVTdG9wcygpIGFyZSBhbHNvIGluIEdyYWRpZW50LmNw
cCBhbmQKICAgICAvLyBDU1NHcmFkaWVudFZhbHVlLmNwcDsgcHJvYmFibHkgc2hvdWxkIHJlZmFj
dG9yIGluIFdlYktpdC4KQEAgLTEzNiw2ICsxMzcsMTkgQEAgU2tTaGFkZXIqIEdyYWRpZW50Ojpw
bGF0Zm9ybUdyYWRpZW50KCkKIAogICAgIGZpbGxTdG9wcyhtX3N0b3BzLmRhdGEoKSwgbV9zdG9w
cy5zaXplKCksIHBvcywgY29sb3JzKTsKIAorICAgIFNrU2hhZGVyOjpUaWxlTW9kZSB0aWxlOwor
ICAgIHN3aXRjaCAoc3ByZWFkTWV0aG9kKSB7CisgICAgICAgIGNhc2UgU3ByZWFkTWV0aG9kUmVm
bGVjdDoKKyAgICAgICAgICAgIHRpbGUgPSBTa1NoYWRlcjo6a01pcnJvcl9UaWxlTW9kZTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNwcmVhZE1ldGhvZFJlcGVhdDoKKyAgICAg
ICAgICAgIHRpbGUgPSBTa1NoYWRlcjo6a1JlcGVhdF9UaWxlTW9kZTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFNwcmVhZE1ldGhvZFBhZDoKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHRpbGUgPSBTa1NoYWRlcjo6a0NsYW1wX1RpbGVNb2RlOworICAgIH0KKwogICAg
IGlmIChtX3JhZGlhbCkgewogICAgICAgICAvLyBGSVhNRTogQ1NTIHJhZGlhbCBHcmFkaWVudHMg
YWxsb3cgYW4gb2Zmc2V0IGZvY2FsIHBvaW50ICh0aGUKICAgICAgICAgLy8gInN0YXJ0IGNpcmNs
ZSIpLCBidXQgc2tpYSBkb2Vzbid0IHNlZW0gdG8gc3VwcG9ydCB0aGF0LCBzbyB0aGlzIGp1c3QK
QEAgLTE0NSwxMSArMTU5LDExIEBAIFNrU2hhZGVyKiBHcmFkaWVudDo6cGxhdGZvcm1HcmFkaWVu
dCgpCiAgICAgICAgIC8vIGRlc2NyaXB0aW9uIG9mIHRoZSBleHBlY3RlZCBiZWhhdmlvci4KICAg
ICAgICAgbV9ncmFkaWVudCA9IFNrR3JhZGllbnRTaGFkZXI6OkNyZWF0ZVJhZGlhbChtX3AxLAog
ICAgICAgICAgICAgV2ViQ29yZUZsb2F0VG9Ta1NjYWxhcihtX3IxKSwgY29sb3JzLCBwb3MsCi0g
ICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGNvdW50VXNlZCksIFNrU2hhZGVyOjprQ2xhbXBf
VGlsZU1vZGUpOworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pihjb3VudFVzZWQpLCB0aWxl
KTsKICAgICB9IGVsc2UgewogICAgICAgICBTa1BvaW50IHB0c1syXSA9IHsgbV9wMCwgbV9wMSB9
OwogICAgICAgICBtX2dyYWRpZW50ID0gU2tHcmFkaWVudFNoYWRlcjo6Q3JlYXRlTGluZWFyKHB0
cywgY29sb3JzLCBwb3MsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGNvdW50VXNlZCks
IFNrU2hhZGVyOjprQ2xhbXBfVGlsZU1vZGUpOworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50
Pihjb3VudFVzZWQpLCB0aWxlKTsKICAgICB9CiAKICAgICByZXR1cm4gbV9ncmFkaWVudDsKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3ND
b250ZXh0U2tpYS5jcHAJKHJldmlzaW9uIDM5ODMyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgs
NyArMTE4LDcgQEAgc3RhdGljIGJvb2wgaXNSZWN0U2tpYVNhZmUoY29uc3QgU2tNYXRyaQogI2Vu
ZGlmCiB9CiAKLWJvb2wgaXNQYXRoU2tpYVNhZmUoY29uc3QgU2tNYXRyaXgmIHRyYW5zZm9ybSwg
Y29uc3QgU2tQYXRoJiBwYXRoKQorc3RhdGljIGJvb2wgaXNQYXRoU2tpYVNhZmUoY29uc3QgU2tN
YXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgU2tQYXRoJiBwYXRoKQogewogI2lmZGVmIEVOU1VSRV9W
QUxVRV9TQUZFVFlfRk9SX1NLSUEKICAgICBTa1BvaW50IGN1cnJlbnRfcG9pbnRzWzRdOwpAQCAt
Njk3LDcgKzY5Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCgpCiAgICAgICAg
IHBhaW50LnNldFNoYWRlcihwYXQpOwogICAgICAgICBwYXQtPnVucmVmKCk7CiAgICAgfSBlbHNl
IGlmIChjb2xvclNwYWNlID09IEdyYWRpZW50Q29sb3JTcGFjZSkKLSAgICAgICAgcGFpbnQuc2V0
U2hhZGVyKHN0YXRlLmZpbGxHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsKKyAgICAgICAg
cGFpbnQuc2V0U2hhZGVyKHN0YXRlLmZpbGxHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudChzcHJl
YWRNZXRob2QoKSkpOwogCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UGF0
aChwYXRoLCBwYWludCk7CiB9CkBAIC03MjYsNyArNzI2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwogICAgICAgICBwYWludC5zZXRTaGFkZXIocGF0KTsKICAg
ICAgICAgcGF0LT51bnJlZigpOwogICAgIH0gZWxzZSBpZiAoY29sb3JTcGFjZSA9PSBHcmFkaWVu
dENvbG9yU3BhY2UpCi0gICAgICAgIHBhaW50LnNldFNoYWRlcihzdGF0ZS5maWxsR3JhZGllbnQt
PnBsYXRmb3JtR3JhZGllbnQoKSk7CisgICAgICAgIHBhaW50LnNldFNoYWRlcihzdGF0ZS5maWxs
R3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoc3ByZWFkTWV0aG9kKCkpKTsKIAogICAgIHBsYXRm
b3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1JlY3QociwgcGFpbnQpOwogfQpAQCAtMTA2OCw3
ICsxMDY4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoKQogICAgICAgICBw
YWludC5zZXRTaGFkZXIocGF0KTsKICAgICAgICAgcGF0LT51bnJlZigpOwogICAgIH0gZWxzZSBp
ZiAoY29sb3JTcGFjZSA9PSBHcmFkaWVudENvbG9yU3BhY2UpCi0gICAgICAgIHBhaW50LnNldFNo
YWRlcihzdGF0ZS5zdHJva2VHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsKKyAgICAgICAg
cGFpbnQuc2V0U2hhZGVyKHN0YXRlLnN0cm9rZUdyYWRpZW50LT5wbGF0Zm9ybUdyYWRpZW50KHNw
cmVhZE1ldGhvZCgpKSk7CiAKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdQ
YXRoKHBhdGgsIHBhaW50KTsKIH0KQEAgLTEwOTYsNyArMTA5Niw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEYKICAgICAgICAgcGFpbnQuc2V0U2hhZGVyKHBhdCk7
CiAgICAgICAgIHBhdC0+dW5yZWYoKTsKICAgICB9IGVsc2UgaWYgKGNvbG9yU3BhY2UgPT0gR3Jh
ZGllbnRDb2xvclNwYWNlKQotICAgICAgICBwYWludC5zZXRTaGFkZXIoc3RhdGUuc3Ryb2tlR3Jh
ZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7CisgICAgICAgIHBhaW50LnNldFNoYWRlcihzdGF0
ZS5zdHJva2VHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudChzcHJlYWRNZXRob2QoKSkpOwogCiAg
ICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UmVjdChyZWN0LCBwYWludCk7CiB9
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYWRpZW50V3guY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvR3JhZGllbnRXeC5jcHAJKHJl
dmlzaW9uIDM5ODMxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFkaWVudFd4
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCB2b2lkIEdyYWRpZW50OjpwbGF0
Zm9ybURlc3Ryb3koKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLVBsYXRmb3JtR3JhZGll
bnQgR3JhZGllbnQ6OnBsYXRmb3JtR3JhZGllbnQoKQorUGxhdGZvcm1HcmFkaWVudCBHcmFkaWVu
dDo6cGxhdGZvcm1HcmFkaWVudChpbnQgc3ByZWFkTWV0aG9kKQogewogICAgIG5vdEltcGxlbWVu
dGVkKCk7CiAgICAgcmV0dXJuIDA7Cg==
</data>
<flag name="review"
          id="12846"
          type_id="1"
          status="-"
          setter="zimmermann"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26903</attachid>
            <date>2009-01-21 13:20:02 -0800</date>
            <delta_ts>2009-01-21 16:47:29 -0800</delta_ts>
            <desc>SVG gradient spreadMethod patch try2</desc>
            <filename>grad-spread.diff</filename>
            <type>text/plain</type>
            <size>16948</size>
            <attacher name="Evan Stade">estade</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDA4OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDcgQEAKKzIwMDktMDEtMjEgIEV2YW4gU3RhZGUgIDxlc3RhZGVAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBh
c3Mgc3ByZWFkTWV0aG9kIGFzIGEgcGFyYW1ldGVyIHRvIEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRp
ZW50KCkuCisgICAgICAgIEFsc28gaW1wbGVtZW50IGl0IGluIFNraWEuCisKKyAgICAgICAgVGVz
dCBpcyBMYXlvdXRUZXN0cy9zdmcvVzNDLVNWRy0xLjEvcHNlcnZlcnMtZ3JhZC0xNC1iLnN2Zwor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc1R5cGVzLmg6CisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6YXBwbHlTcHJlYWRNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnBsYXRm
b3JtR3JhZGllbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Zmls
bFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhZGllbnRRdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHcmFkaWVudDo6cGxhdGZvcm1HcmFkaWVudCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpm
aWxsUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFkaWVudFNraWEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbFN0b3BzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpzdHJva2VSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFkaWVudFd4
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50KToKKwog
MjAwOS0wMS0yMSAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEFsZXhleSBQcm9za3VyeWFrb3YuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYWRpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFkaWVudC5oCShyZXZpc2lvbiAzOTgzMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhZGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVk
ZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzVHlwZXMuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KIApAQCAtNzEsNyArNzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAg
ICAgdm9pZCBnZXRDb2xvcihmbG9hdCB2YWx1ZSwgZmxvYXQqIHIsIGZsb2F0KiBnLCBmbG9hdCog
YiwgZmxvYXQqIGEpIGNvbnN0OwogCi0gICAgICAgIFBsYXRmb3JtR3JhZGllbnQgcGxhdGZvcm1H
cmFkaWVudCgpOworICAgICAgICBQbGF0Zm9ybUdyYWRpZW50IHBsYXRmb3JtR3JhZGllbnQoR3Jh
ZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kID0gU3ByZWFkTWV0aG9kUGFkKTsKIAogICAg
ICAgICBzdHJ1Y3QgQ29sb3JTdG9wIHsKICAgICAgICAgICAgIGZsb2F0IHN0b3A7CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDM5
ODMxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkod29y
a2luZyBjb3B5KQpAQCAtMTI1LDE0ICsxMjUsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIEludGVycG9sYXRpb25IaWdoCiAgICAgfTsKIAotICAgIC8vIEZJWE1FOiBDdXJyZW50bHkg
dGhlc2UgY29uc3RhbnRzIGhhdmUgdG8gbWF0Y2ggdGhlIHZhbHVlcyB1c2VkIGluIHRoZSBTVkcK
LSAgICAvLyBET00gQVBJLiBUaGF0J3MgYSBtaXN0YWtlLiBXZSBuZWVkIHRvIG1ha2UgY3V0IHRo
YXQgZGVwZW5kZW5jeS4KLSAgICBlbnVtIEdyYWRpZW50U3ByZWFkTWV0aG9kIHsKLSAgICAgICAg
U3ByZWFkTWV0aG9kUGFkID0gMSwKLSAgICAgICAgU3ByZWFkTWV0aG9kUmVmbGVjdCA9IDIsCi0g
ICAgICAgIFNwcmVhZE1ldGhvZFJlcGVhdCA9IDMKLSAgICB9OwotCiAgICAgY2xhc3MgR3JhcGhp
Y3NDb250ZXh0IDogTm9uY29weWFibGUgewogICAgIHB1YmxpYzoKICAgICAgICAgR3JhcGhpY3ND
b250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kik7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaAkocmV2aXNpb24gMzk4MzEpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiAr
NTAsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBDb21wb3NpdGVQbHVzTGlnaHRl
cgogICAgIH07CiAKKyAgICAvLyBGSVhNRTogQ3VycmVudGx5IHRoZXNlIGNvbnN0YW50cyBoYXZl
IHRvIG1hdGNoIHRoZSB2YWx1ZXMgdXNlZCBpbiB0aGUgU1ZHCisgICAgLy8gRE9NIEFQSS4gVGhh
dCdzIGEgbWlzdGFrZS4gV2UgbmVlZCB0byBtYWtlIGN1dCB0aGF0IGRlcGVuZGVuY3kuCisgICAg
ZW51bSBHcmFkaWVudFNwcmVhZE1ldGhvZCB7CisgICAgICAgIFNwcmVhZE1ldGhvZFBhZCA9IDEs
CisgICAgICAgIFNwcmVhZE1ldGhvZFJlZmxlY3QgPSAyLAorICAgICAgICBTcHJlYWRNZXRob2RS
ZXBlYXQgPSAzCisgICAgfTsKKwogICAgIGVudW0gTGluZUNhcCB7IEJ1dHRDYXAsIFJvdW5kQ2Fw
LCBTcXVhcmVDYXAgfTsKIAogICAgIGVudW0gTGluZUpvaW4geyBNaXRlckpvaW4sIFJvdW5kSm9p
biwgQmV2ZWxKb2luIH07CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YWRpZW50Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhZGllbnRDYWlyby5jcHAJKHJldmlzaW9uIDM5ODMxKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDEsMTAgKzQxLDI3IEBAIHZvaWQgR3JhZGllbnQ6OnBsYXRmb3JtRGVzdHJveSgpCiAgICAgfQog
fQogCi1jYWlyb19wYXR0ZXJuX3QqIEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50KCkKK3N0YXRp
YyBpbmxpbmUgdm9pZCBhcHBseVNwcmVhZE1ldGhvZChjYWlyb19wYXR0ZXJuX3QqIHBhdHRlcm4s
IEdyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCkKIHsKLSAgICBpZiAobV9ncmFkaWVu
dCkKKyAgICBzd2l0Y2ggKHNwcmVhZE1ldGhvZCkgeworICAgIGNhc2UgU3ByZWFkTWV0aG9kUGFk
OgorICAgICAgICBjYWlyb19wYXR0ZXJuX3NldF9leHRlbmQocGF0dGVybiwgQ0FJUk9fRVhURU5E
X1BBRCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU3ByZWFkTWV0aG9kUmVmbGVjdDoKKyAg
ICAgICAgY2Fpcm9fcGF0dGVybl9zZXRfZXh0ZW5kKHBhdHRlcm4sIENBSVJPX0VYVEVORF9SRUZM
RUNUKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTcHJlYWRNZXRob2RSZXBlYXQ6CisgICAg
ICAgIGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZChwYXR0ZXJuLCBDQUlST19FWFRFTkRfUkVQRUFU
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitjYWlyb19wYXR0ZXJuX3QqIEdyYWRpZW50
OjpwbGF0Zm9ybUdyYWRpZW50KEdyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCkKK3sK
KyAgICBpZiAobV9ncmFkaWVudCkgeworICAgICAgICBhcHBseVNwcmVhZE1ldGhvZChtX2dyYWRp
ZW50LCBzcHJlYWRNZXRob2QpOwogICAgICAgICByZXR1cm4gbV9ncmFkaWVudDsKKyAgICB9CiAK
ICAgICBpZiAobV9yYWRpYWwpCiAgICAgICAgIG1fZ3JhZGllbnQgPSBjYWlyb19wYXR0ZXJuX2Ny
ZWF0ZV9yYWRpYWwobV9wMC54KCksIG1fcDAueSgpLCBtX3IwLCBtX3AxLngoKSwgbV9wMS55KCks
IG1fcjEpOwpAQCAtNTcsNiArNzQsNyBAQCBjYWlyb19wYXR0ZXJuX3QqIEdyYWRpZW50OjpwbGF0
Zm9ybUdyYWRpCiAgICAgICAgICsrc3RvcEl0ZXJhdG9yOwogICAgIH0KIAorICAgIGFwcGx5U3By
ZWFkTWV0aG9kKG1fZ3JhZGllbnQsIHNwcmVhZE1ldGhvZCk7CiAgICAgcmV0dXJuIG1fZ3JhZGll
bnQ7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCShyZXZpc2lvbiAzOTgzMSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NywyMiArODcsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmlsbFJlY3RT
b3VyY2VPdmVyKGNhCiAgICAgY2Fpcm9fZmlsbChjcik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgY2Fp
cm9fcGF0dGVybl90KiBhcHBseVNwcmVhZE1ldGhvZChjYWlyb19wYXR0ZXJuX3QqIHBhdHRlcm4s
IEdyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCkKLXsKLSAgICBzd2l0Y2ggKHNwcmVh
ZE1ldGhvZCkgewotICAgICAgICBjYXNlIFNwcmVhZE1ldGhvZFBhZDoKLSAgICAgICAgICAgY2Fp
cm9fcGF0dGVybl9zZXRfZXh0ZW5kKHBhdHRlcm4sIENBSVJPX0VYVEVORF9QQUQpOwotICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTcHJlYWRNZXRob2RSZWZsZWN0OgotICAgICAgICAg
ICAgY2Fpcm9fcGF0dGVybl9zZXRfZXh0ZW5kKHBhdHRlcm4sIENBSVJPX0VYVEVORF9SRUZMRUNU
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNwcmVhZE1ldGhvZFJlcGVhdDoK
LSAgICAgICAgICAgIGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZChwYXR0ZXJuLCBDQUlST19FWFRF
TkRfUkVQRUFUKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gcGF0dGVy
bjsKLX0KLQogR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQqIGNyKQogICAgIDogbV9jb21tb24oY3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0
ZSgpKQogICAgICwgbV9kYXRhKG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUpCkBA
IC00NjIsOCArNDQ2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKCkKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgR3JhZGllbnRDb2xvclNwYWNlOgotICAgICAgICBj
YWlyb19wYXR0ZXJuX3QqIHBhdHRlcm4gPSBtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50LT5w
bGF0Zm9ybUdyYWRpZW50KCk7Ci0gICAgICAgIHBhdHRlcm4gPSBhcHBseVNwcmVhZE1ldGhvZChw
YXR0ZXJuLCBzcHJlYWRNZXRob2QoKSk7CisgICAgICAgIGNhaXJvX3BhdHRlcm5fdCogcGF0dGVy
biA9IG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoc3ByZWFk
TWV0aG9kKCkpOwogICAgICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBwYXR0ZXJuKTsKICAgICAg
ICAgY2Fpcm9fY2xpcChjcik7CiAgICAgICAgIGNhaXJvX3BhaW50X3dpdGhfYWxwaGEoY3IsIG1f
Y29tbW9uLT5zdGF0ZS5nbG9iYWxBbHBoYSk7CkBAIC01MDAsOCArNDgzLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2Fz
ZSBHcmFkaWVudENvbG9yU3BhY2U6Ci0gICAgICAgIGNhaXJvX3BhdHRlcm5fdCogcGF0dGVybiA9
IG1fY29tbW9uLT5zdGF0ZS5zdHJva2VHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpOwotICAg
ICAgICBwYXR0ZXJuID0gYXBwbHlTcHJlYWRNZXRob2QocGF0dGVybiwgc3ByZWFkTWV0aG9kKCkp
OworICAgICAgICBjYWlyb19wYXR0ZXJuX3QqIHBhdHRlcm4gPSBtX2NvbW1vbi0+c3RhdGUuc3Ry
b2tlR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoc3ByZWFkTWV0aG9kKCkpOwogICAgICAgICBj
YWlyb19zZXRfc291cmNlKGNyLCBwYXR0ZXJuKTsKICAgICAgICAgaWYgKG1fY29tbW9uLT5zdGF0
ZS5nbG9iYWxBbHBoYSA8IDEuMGYpIHsKICAgICAgICAgICAgIGNhaXJvX3B1c2hfZ3JvdXAoY3Ip
OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwCShy
ZXZpc2lvbiAzOTgzMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRD
Ry5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgc3RhdGljIHZvaWQgZ3JhZGll
bnRDYWxsYmFjayh2b2lkKiBpbmZvLAogICAgIG91dFszXSA9IGE7CiB9CiAKLUNHU2hhZGluZ1Jl
ZiBHcmFkaWVudDo6cGxhdGZvcm1HcmFkaWVudCgpCitDR1NoYWRpbmdSZWYgR3JhZGllbnQ6OnBs
YXRmb3JtR3JhZGllbnQoR3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kKQogewogICAg
IGlmIChtX2dyYWRpZW50KQogICAgICAgICByZXR1cm4gbV9ncmFkaWVudDsKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCShy
ZXZpc2lvbiAzOTgzMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3ND
b250ZXh0Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTgsNyArNDk4LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmZpbGxQYXRoKCkKICAgICAgICAgICAgIENHQ29udGV4dEVPQ2xpcChjb250
ZXh0KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcChjb250ZXh0KTsK
LSAgICAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29udGV4dCwgbV9jb21tb24tPnN0YXRlLmZp
bGxHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd1No
YWRpbmcoY29udGV4dCwgbV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC0+cGxhdGZvcm1HcmFk
aWVudChzcHJlYWRNZXRob2QoKSkpOwogICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNv
bnRleHQpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC01MjMsNyArNTIzLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoKQogICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRl
KGNvbnRleHQpOwogICAgICAgICBDR0NvbnRleHRSZXBsYWNlUGF0aFdpdGhTdHJva2VkUGF0aChj
b250ZXh0KTsKICAgICAgICAgQ0dDb250ZXh0Q2xpcChjb250ZXh0KTsKLSAgICAgICAgQ0dDb250
ZXh0RHJhd1NoYWRpbmcoY29udGV4dCwgbV9jb21tb24tPnN0YXRlLnN0cm9rZUdyYWRpZW50LT5w
bGF0Zm9ybUdyYWRpZW50KCkpOworICAgICAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0
LCBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoc3ByZWFk
TWV0aG9kKCkpKTsKICAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNTQ2LDcgKzU0Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8KICAgICBjYXNlIEdyYWRpZW50Q29sb3JTcGFjZToKICAg
ICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKICAgICAgICAgQ0dDb250ZXh0Q2xp
cFRvUmVjdChjb250ZXh0LCByZWN0KTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29u
dGV4dCwgbV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsK
KyAgICAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29udGV4dCwgbV9jb21tb24tPnN0YXRlLmZp
bGxHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudChzcHJlYWRNZXRob2QoKSkpOwogICAgICAgICBD
R0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwogICAgICAgICBicmVhazsKICAgICB9CkBA
IC03ODYsNyArNzg2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3Qg
RgogICAgICAgICBDR0NvbnRleHRBZGRSZWN0KGNvbnRleHQsIHIpOwogICAgICAgICBDR0NvbnRl
eHRSZXBsYWNlUGF0aFdpdGhTdHJva2VkUGF0aChjb250ZXh0KTsKICAgICAgICAgQ0dDb250ZXh0
Q2xpcChjb250ZXh0KTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29udGV4dCwgbV9j
b21tb24tPnN0YXRlLnN0cm9rZUdyYWRpZW50LT5wbGF0Zm9ybUdyYWRpZW50KCkpOworICAgICAg
ICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0LCBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3Jh
ZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoc3ByZWFkTWV0aG9kKCkpKTsKICAgICAgICAgQ0dDb250
ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFkaWVudFF0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYWRpZW50UXQuY3BwCShyZXZpc2lvbiAz
OTgzMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhZGllbnRRdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgdm9pZCBHcmFkaWVudDo6cGxhdGZvcm1EZXN0
cm95KCkKICAgICBtX2dyYWRpZW50ID0gMDsKIH0KIAotUUdyYWRpZW50KiBHcmFkaWVudDo6cGxh
dGZvcm1HcmFkaWVudCgpCitRR3JhZGllbnQqIEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50KEdy
YWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCkKIHsKICAgICBpZiAobV9ncmFkaWVudCkK
ICAgICAgICAgcmV0dXJuIG1fZ3JhZGllbnQ7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAkocmV2aXNpb24gMzk4MzEpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTUzLDcgKzU1Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxs
UGF0aCgpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEdyYWRpZW50Q29sb3JTcGFj
ZToKLSAgICAgICAgUUdyYWRpZW50KiBncmFkaWVudCA9IG1fY29tbW9uLT5zdGF0ZS5maWxsR3Jh
ZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKTsKKyAgICAgICAgUUdyYWRpZW50KiBncmFkaWVudCA9
IG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoc3ByZWFkTWV0
aG9kKCkpOwogICAgICAgICAqZ3JhZGllbnQgPSBhcHBseVNwcmVhZE1ldGhvZCgqZ3JhZGllbnQs
IHNwcmVhZE1ldGhvZCgpKTsgIAogICAgICAgICBwLT5maWxsUGF0aChwYXRoLCBRQnJ1c2goKmdy
YWRpZW50KSk7CiAgICAgICAgIGJyZWFrOwpAQCAtNTgzLDcgKzU4Myw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VQYXRoKCkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2Ug
R3JhZGllbnRDb2xvclNwYWNlOiB7Ci0gICAgICAgIFFHcmFkaWVudCogZ3JhZGllbnQgPSBtX2Nv
bW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKTsKKyAgICAgICAg
UUdyYWRpZW50KiBncmFkaWVudCA9IG1fY29tbW9uLT5zdGF0ZS5zdHJva2VHcmFkaWVudC0+cGxh
dGZvcm1HcmFkaWVudChzcHJlYWRNZXRob2QoKSk7CiAgICAgICAgICpncmFkaWVudCA9IGFwcGx5
U3ByZWFkTWV0aG9kKCpncmFkaWVudCwgc3ByZWFkTWV0aG9kKCkpOyAKICAgICAgICAgcGVuLnNl
dEJydXNoKFFCcnVzaCgqZ3JhZGllbnQpKTsKICAgICAgICAgcC0+c2V0UGVuKHBlbik7CkBAIC02
MTIsNyArNjEyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBHcmFkaWVudENvbG9yU3BhY2U6Ci0gICAg
ICAgIHAtPmZpbGxSZWN0KHJlY3QsIFFCcnVzaCgqKG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGll
bnQuZ2V0KCktPnBsYXRmb3JtR3JhZGllbnQoKSkpKTsKKyAgICAgICAgcC0+ZmlsbFJlY3QocmVj
dCwgUUJydXNoKCoobV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVu
dChzcHJlYWRNZXRob2QoKSkpKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBtX2RhdGEt
PmN1cnJlbnRQYXRoID0gUVBhaW50ZXJQYXRoKCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvR3JhZGllbnRTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvR3JhZGllbnRTa2lhLmNwcAkocmV2aXNpb24gMzk4MzIpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhZGllbnRTa2lhLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzYsNyArNzYsNyBAQCBzdGF0aWMgc2l6ZV90IHRvdGFsU3RvcHNOZWVkZWQoY29u
c3QgR3JhCiAvLyBzdG9wcyBhdCAwLjAgYW5kIDEuMCBhcmVuJ3QgYWxyZWFkeSBpbmNsdWRlZC4K
IHN0YXRpYyB2b2lkIGZpbGxTdG9wcyhjb25zdCBHcmFkaWVudDo6Q29sb3JTdG9wKiBzdG9wRGF0
YSwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGNvdW50LCBTa1NjYWxhciogcG9zLCBT
a0NvbG9yKiBjb2xvcnMpCi17IAorewogICAgIGNvbnN0IEdyYWRpZW50OjpDb2xvclN0b3AqIHN0
b3AgPSBzdG9wRGF0YTsKICAgICBzaXplX3Qgc3RhcnQgPSAwOwogICAgIGlmIChjb3VudCA8IDEp
IHsKQEAgLTExMyw4ICsxMTMsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVN0b3BzKGNv
bnN0IEdyCiAgICAgcmV0dXJuIGEuc3RvcCA8IGIuc3RvcDsKIH0KIAotU2tTaGFkZXIqIEdyYWRp
ZW50OjpwbGF0Zm9ybUdyYWRpZW50KCkKK1NrU2hhZGVyKiBHcmFkaWVudDo6cGxhdGZvcm1HcmFk
aWVudChHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRob2QpCiB7CisgICAgLy8gRklYTUU6
IFdpbGwgdGhpcyBldmVyIHJldHVybiBhIGdyYWRpZW50IHdpdGggdGhlIHdyb25nIHNwcmVhZCBt
ZXRob2Q/CiAgICAgaWYgKG1fZ3JhZGllbnQpCiAgICAgICAgIHJldHVybiBtX2dyYWRpZW50Owog
CkBAIC0xMzYsNiArMTM3LDE5IEBAIFNrU2hhZGVyKiBHcmFkaWVudDo6cGxhdGZvcm1HcmFkaWVu
dCgpCiAKICAgICBmaWxsU3RvcHMobV9zdG9wcy5kYXRhKCksIG1fc3RvcHMuc2l6ZSgpLCBwb3Ms
IGNvbG9ycyk7CiAKKyAgICBTa1NoYWRlcjo6VGlsZU1vZGUgdGlsZSA9IFNrU2hhZGVyOjprQ2xh
bXBfVGlsZU1vZGU7CisgICAgc3dpdGNoIChzcHJlYWRNZXRob2QpIHsKKyAgICBjYXNlIFNwcmVh
ZE1ldGhvZFJlZmxlY3Q6CisgICAgICAgIHRpbGUgPSBTa1NoYWRlcjo6a01pcnJvcl9UaWxlTW9k
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTcHJlYWRNZXRob2RSZXBlYXQ6CisgICAgICAg
IHRpbGUgPSBTa1NoYWRlcjo6a1JlcGVhdF9UaWxlTW9kZTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBTcHJlYWRNZXRob2RQYWQ6CisgICAgICAgIHRpbGUgPSBTa1NoYWRlcjo6a0NsYW1wX1Rp
bGVNb2RlOworICAgICAgICBicmVhazsKKyAgICB9CisKICAgICBpZiAobV9yYWRpYWwpIHsKICAg
ICAgICAgLy8gRklYTUU6IENTUyByYWRpYWwgR3JhZGllbnRzIGFsbG93IGFuIG9mZnNldCBmb2Nh
bCBwb2ludCAodGhlCiAgICAgICAgIC8vICJzdGFydCBjaXJjbGUiKSwgYnV0IHNraWEgZG9lc24n
dCBzZWVtIHRvIHN1cHBvcnQgdGhhdCwgc28gdGhpcyBqdXN0CkBAIC0xNDUsMTEgKzE1OSwxMSBA
QCBTa1NoYWRlciogR3JhZGllbnQ6OnBsYXRmb3JtR3JhZGllbnQoKQogICAgICAgICAvLyBkZXNj
cmlwdGlvbiBvZiB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IuCiAgICAgICAgIG1fZ3JhZGllbnQgPSBT
a0dyYWRpZW50U2hhZGVyOjpDcmVhdGVSYWRpYWwobV9wMSwKICAgICAgICAgICAgIFdlYkNvcmVG
bG9hdFRvU2tTY2FsYXIobV9yMSksIGNvbG9ycywgcG9zLAotICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8aW50Pihjb3VudFVzZWQpLCBTa1NoYWRlcjo6a0NsYW1wX1RpbGVNb2RlKTsKKyAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGludD4oY291bnRVc2VkKSwgdGlsZSk7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgU2tQb2ludCBwdHNbMl0gPSB7IG1fcDAsIG1fcDEgfTsKICAgICAgICAgbV9ncmFkaWVu
dCA9IFNrR3JhZGllbnRTaGFkZXI6OkNyZWF0ZUxpbmVhcihwdHMsIGNvbG9ycywgcG9zLAotICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pihjb3VudFVzZWQpLCBTa1NoYWRlcjo6a0NsYW1wX1Rp
bGVNb2RlKTsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4oY291bnRVc2VkKSwgdGlsZSk7
CiAgICAgfQogCiAgICAgcmV0dXJuIG1fZ3JhZGllbnQ7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCShyZXZp
c2lvbiAzOTgzMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0Nv
bnRleHRTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw3IEBAIHN0YXRpYyBi
b29sIGlzUmVjdFNraWFTYWZlKGNvbnN0IFNrTWF0cmkKICNlbmRpZgogfQogCi1ib29sIGlzUGF0
aFNraWFTYWZlKGNvbnN0IFNrTWF0cml4JiB0cmFuc2Zvcm0sIGNvbnN0IFNrUGF0aCYgcGF0aCkK
K3N0YXRpYyBib29sIGlzUGF0aFNraWFTYWZlKGNvbnN0IFNrTWF0cml4JiB0cmFuc2Zvcm0sIGNv
bnN0IFNrUGF0aCYgcGF0aCkKIHsKICNpZmRlZiBFTlNVUkVfVkFMVUVfU0FGRVRZX0ZPUl9TS0lB
CiAgICAgU2tQb2ludCBjdXJyZW50X3BvaW50c1s0XTsKQEAgLTY5Nyw3ICs2OTcsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoKQogICAgICAgICBwYWludC5zZXRTaGFkZXIocGF0
KTsKICAgICAgICAgcGF0LT51bnJlZigpOwogICAgIH0gZWxzZSBpZiAoY29sb3JTcGFjZSA9PSBH
cmFkaWVudENvbG9yU3BhY2UpCi0gICAgICAgIHBhaW50LnNldFNoYWRlcihzdGF0ZS5maWxsR3Jh
ZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7CisgICAgICAgIHBhaW50LnNldFNoYWRlcihzdGF0
ZS5maWxsR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoc3ByZWFkTWV0aG9kKCkpKTsKIAogICAg
IHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1BhdGgocGF0aCwgcGFpbnQpOwogfQpA
QCAtNzI2LDcgKzcyNiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBG
bG8KICAgICAgICAgcGFpbnQuc2V0U2hhZGVyKHBhdCk7CiAgICAgICAgIHBhdC0+dW5yZWYoKTsK
ICAgICB9IGVsc2UgaWYgKGNvbG9yU3BhY2UgPT0gR3JhZGllbnRDb2xvclNwYWNlKQotICAgICAg
ICBwYWludC5zZXRTaGFkZXIoc3RhdGUuZmlsbEdyYWRpZW50LT5wbGF0Zm9ybUdyYWRpZW50KCkp
OworICAgICAgICBwYWludC5zZXRTaGFkZXIoc3RhdGUuZmlsbEdyYWRpZW50LT5wbGF0Zm9ybUdy
YWRpZW50KHNwcmVhZE1ldGhvZCgpKSk7CiAKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFz
KCktPmRyYXdSZWN0KHIsIHBhaW50KTsKIH0KQEAgLTEwNjgsNyArMTA2OCw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKCkKICAgICAgICAgcGFpbnQuc2V0U2hhZGVyKHBhdCk7
CiAgICAgICAgIHBhdC0+dW5yZWYoKTsKICAgICB9IGVsc2UgaWYgKGNvbG9yU3BhY2UgPT0gR3Jh
ZGllbnRDb2xvclNwYWNlKQotICAgICAgICBwYWludC5zZXRTaGFkZXIoc3RhdGUuc3Ryb2tlR3Jh
ZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7CisgICAgICAgIHBhaW50LnNldFNoYWRlcihzdGF0
ZS5zdHJva2VHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudChzcHJlYWRNZXRob2QoKSkpOwogCiAg
ICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UGF0aChwYXRoLCBwYWludCk7CiB9
CkBAIC0xMDk2LDcgKzEwOTYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChj
b25zdCBGCiAgICAgICAgIHBhaW50LnNldFNoYWRlcihwYXQpOwogICAgICAgICBwYXQtPnVucmVm
KCk7CiAgICAgfSBlbHNlIGlmIChjb2xvclNwYWNlID09IEdyYWRpZW50Q29sb3JTcGFjZSkKLSAg
ICAgICAgcGFpbnQuc2V0U2hhZGVyKHN0YXRlLnN0cm9rZUdyYWRpZW50LT5wbGF0Zm9ybUdyYWRp
ZW50KCkpOworICAgICAgICBwYWludC5zZXRTaGFkZXIoc3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBs
YXRmb3JtR3JhZGllbnQoc3ByZWFkTWV0aG9kKCkpKTsKIAogICAgIHBsYXRmb3JtQ29udGV4dCgp
LT5jYW52YXMoKS0+ZHJhd1JlY3QocmVjdCwgcGFpbnQpOwogfQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93eC9HcmFkaWVudFd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3d4L0dyYWRpZW50V3guY3BwCShyZXZpc2lvbiAzOTgzMSkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvR3JhZGllbnRXeC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM2LDcgKzM2LDcgQEAgdm9pZCBHcmFkaWVudDo6cGxhdGZvcm1EZXN0cm95KCkKICAgICBu
b3RJbXBsZW1lbnRlZCgpOwogfQogCi1QbGF0Zm9ybUdyYWRpZW50IEdyYWRpZW50OjpwbGF0Zm9y
bUdyYWRpZW50KCkKK1BsYXRmb3JtR3JhZGllbnQgR3JhZGllbnQ6OnBsYXRmb3JtR3JhZGllbnQo
R3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kKQogewogICAgIG5vdEltcGxlbWVudGVk
KCk7CiAgICAgcmV0dXJuIDA7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26911</attachid>
            <date>2009-01-21 15:59:22 -0800</date>
            <delta_ts>2009-01-21 16:47:29 -0800</delta_ts>
            <desc>move spreadMethod attribute to Gradient (from GraphicsContext)</desc>
            <filename>grad-spread.diff</filename>
            <type>text/plain</type>
            <size>17780</size>
            <attacher name="Evan Stade">estade</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDEwMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDIgQEAKKzIwMDktMDEtMjEgIEV2YW4gU3RhZGUgIDxlc3RhZGVAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1h
a2Ugc3ByZWFkTWV0aG9kIGEgbWVtYmVyIG9mIEdyYWRpZW50IHJhdGhlciB0aGFuIEdyYXBoaWNz
Q29udGV4dC4KKyAgICAgICAgSW1wbGVtZW50IHNwcmVhZE1ldGhvZCBmb3IgU2tpYS4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYWRpZW50OjpHcmFkaWVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGll
bnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpzZXRTcHJlYWRNZXRob2QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnNwcmVhZE1ldGhvZCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHRQcml2YXRlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NUeXBlcy5oOgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50
OjpwbGF0Zm9ybUdyYWRpZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFwaGljc0NvbnRleHRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tl
UGF0aCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhZGllbnRRdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6cGxhdGZvcm1HcmFkaWVudCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnN0cm9rZVBhdGgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvR3JhZGllbnRTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpwbGF0Zm9y
bUdyYWRpZW50KToKKyAgICAgICAgKiBzdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6YnVpbGRHcmFkaWVu
dCk6CisgICAgICAgICogc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OmJ1aWxkR3JhZGllbnQpOgorICAg
ICAgICAqIHN2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhaW50U2VydmVyR3JhZGllbnQ6OlNWR1BhaW50U2VydmVyR3JhZGllbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0dXApOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbik6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyR3JhZGllbnQuaDoK
KwogMjAwOS0wMS0yMSAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgSnVzdGluIEdhcmNpYS4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhZGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhZGllbnQuY3BwCShyZXZpc2lvbiAzOTgzMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhZGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBAIEdyYWRpZW50
OjpHcmFkaWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwKICAgICAsIG1fcjEoMCkKICAgICAsIG1f
c3RvcHNTb3J0ZWQoZmFsc2UpCiAgICAgLCBtX2xhc3RTdG9wKDApCisgICAgLCBtX3NwcmVhZE1l
dGhvZChTcHJlYWRNZXRob2RQYWQpCiB7CiAgICAgcGxhdGZvcm1Jbml0KCk7CiB9CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCShyZXZpc2lvbiAzOTgzMSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiAr
MjksNyBAQAogCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkdlbmVyYXRvci5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtODYsNiArODcsMTMgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQgc2V0U3RvcHNTb3J0ZWQoYm9vbCBzKSB7IG1fc3Rv
cHNTb3J0ZWQgPSBzOyB9CiAKKyAgICAgICAgdm9pZCBzZXRTcHJlYWRNZXRob2QoR3JhZGllbnRT
cHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kKSB7CisgICAgICAgICAgICBBU1NFUlQobV9ncmFkaWVu
dCA9PSBOVUxMKTsKKyAgICAgICAgICAgIG1fc3ByZWFkTWV0aG9kID0gc3ByZWFkTWV0aG9kOwor
ICAgICAgICB9CisKKyAgICAgICAgR3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kKCkg
eyByZXR1cm4gbV9zcHJlYWRNZXRob2Q7IH0KKwogICAgICAgICB2aXJ0dWFsIHZvaWQgZmlsbChH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmKTsKIAogICAgIHByaXZhdGU6CkBAIC0x
MDUsNiArMTEzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBtdXRhYmxlIFZlY3Rv
cjxDb2xvclN0b3A+IG1fc3RvcHM7CiAgICAgICAgIG11dGFibGUgYm9vbCBtX3N0b3BzU29ydGVk
OwogICAgICAgICBtdXRhYmxlIGludCBtX2xhc3RTdG9wOworICAgICAgICBHcmFkaWVudFNwcmVh
ZE1ldGhvZCBtX3NwcmVhZE1ldGhvZDsKIAogICAgICAgICBQbGF0Zm9ybUdyYWRpZW50IG1fZ3Jh
ZGllbnQ7CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5jcHAJKHJldmlzaW9uIDM5ODMxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODksMTYgKzE4OSw2
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsUnVsZShXaW5kUnUKICAgICBtX2NvbW1v
bi0+c3RhdGUuZmlsbFJ1bGUgPSBmaWxsUnVsZTsKIH0KIAotR3JhZGllbnRTcHJlYWRNZXRob2Qg
R3JhcGhpY3NDb250ZXh0OjpzcHJlYWRNZXRob2QoKSBjb25zdAotewotICAgIHJldHVybiBtX2Nv
bW1vbi0+c3RhdGUuc3ByZWFkTWV0aG9kOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
U3ByZWFkTWV0aG9kKEdyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCkKLXsKLSAgICBt
X2NvbW1vbi0+c3RhdGUuc3ByZWFkTWV0aG9kID0gc3ByZWFkTWV0aG9kOwotfQotCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBt
X2NvbW1vbi0+c3RhdGUuZmlsbENvbG9yU3BhY2UgPSBTb2xpZENvbG9yU3BhY2U7CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDM5
ODMxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkod29y
a2luZyBjb3B5KQpAQCAtMTI1LDE0ICsxMjUsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIEludGVycG9sYXRpb25IaWdoCiAgICAgfTsKIAotICAgIC8vIEZJWE1FOiBDdXJyZW50bHkg
dGhlc2UgY29uc3RhbnRzIGhhdmUgdG8gbWF0Y2ggdGhlIHZhbHVlcyB1c2VkIGluIHRoZSBTVkcK
LSAgICAvLyBET00gQVBJLiBUaGF0J3MgYSBtaXN0YWtlLiBXZSBuZWVkIHRvIG1ha2UgY3V0IHRo
YXQgZGVwZW5kZW5jeS4KLSAgICBlbnVtIEdyYWRpZW50U3ByZWFkTWV0aG9kIHsKLSAgICAgICAg
U3ByZWFkTWV0aG9kUGFkID0gMSwKLSAgICAgICAgU3ByZWFkTWV0aG9kUmVmbGVjdCA9IDIsCi0g
ICAgICAgIFNwcmVhZE1ldGhvZFJlcGVhdCA9IDMKLSAgICB9OwotCiAgICAgY2xhc3MgR3JhcGhp
Y3NDb250ZXh0IDogTm9uY29weWFibGUgewogICAgIHB1YmxpYzoKICAgICAgICAgR3JhcGhpY3ND
b250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kik7CkBAIC0xNTQsOCArMTQ2LDYgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIFdpbmRSdWxlIGZpbGxSdWxlKCkgY29uc3Q7CiAg
ICAgICAgIHZvaWQgc2V0RmlsbFJ1bGUoV2luZFJ1bGUpOwotICAgICAgICBHcmFkaWVudFNwcmVh
ZE1ldGhvZCBzcHJlYWRNZXRob2QoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRTcHJlYWRNZXRo
b2QoR3JhZGllbnRTcHJlYWRNZXRob2QpOwogICAgICAgICBDb2xvciBmaWxsQ29sb3IoKSBjb25z
dDsKICAgICAgICAgdm9pZCBzZXRGaWxsQ29sb3IoY29uc3QgQ29sb3ImKTsKICAgICAgICAgdm9p
ZCBzZXRGaWxsUGF0dGVybihQYXNzUmVmUHRyPFBhdHRlcm4+KTsKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oCShyZXZpc2lv
biAzOTgzMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0UHJp
dmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgUmVmUHRyPFBhdHRlcm4+IHN0cm9rZVBhdHRlcm47CiAgICAgICAgIAogICAg
ICAgICBXaW5kUnVsZSBmaWxsUnVsZTsKLSAgICAgICAgR3JhZGllbnRTcHJlYWRNZXRob2Qgc3By
ZWFkTWV0aG9kOwogICAgICAgICBDb2xvclNwYWNlIGZpbGxDb2xvclNwYWNlOwogICAgICAgICBD
b2xvciBmaWxsQ29sb3I7CiAgICAgICAgIFJlZlB0cjxHcmFkaWVudD4gZmlsbEdyYWRpZW50OwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgJKHJldmlzaW9u
IDM5ODMxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgQ29tcG9zaXRlUGx1c0xpZ2h0ZXIKICAgICB9OwogCisgICAgLy8gRklYTUU6IEN1cnJlbnRs
eSB0aGVzZSBjb25zdGFudHMgaGF2ZSB0byBtYXRjaCB0aGUgdmFsdWVzIHVzZWQgaW4gdGhlIFNW
RworICAgIC8vIERPTSBBUEkuIFRoYXQncyBhIG1pc3Rha2UuIFdlIG5lZWQgdG8gbWFrZSBjdXQg
dGhhdCBkZXBlbmRlbmN5LgorICAgIGVudW0gR3JhZGllbnRTcHJlYWRNZXRob2QgeworICAgICAg
ICBTcHJlYWRNZXRob2RQYWQgPSAxLAorICAgICAgICBTcHJlYWRNZXRob2RSZWZsZWN0ID0gMiwK
KyAgICAgICAgU3ByZWFkTWV0aG9kUmVwZWF0ID0gMworICAgIH07CisKICAgICBlbnVtIExpbmVD
YXAgeyBCdXR0Q2FwLCBSb3VuZENhcCwgU3F1YXJlQ2FwIH07CiAKICAgICBlbnVtIExpbmVKb2lu
IHsgTWl0ZXJKb2luLCBSb3VuZEpvaW4sIEJldmVsSm9pbiB9OwpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCShyZXZpc2lvbiAz
OTgzMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDE4IEBAIGNhaXJvX3BhdHRlcm5fdCogR3Jh
ZGllbnQ6OnBsYXRmb3JtR3JhZGkKICAgICAgICAgKytzdG9wSXRlcmF0b3I7CiAgICAgfQogCisg
ICAgc3dpdGNoIChtX3NwcmVhZE1ldGhvZCkgeworICAgIGNhc2UgU3ByZWFkTWV0aG9kUGFkOgor
ICAgICAgICBjYWlyb19wYXR0ZXJuX3NldF9leHRlbmQobV9ncmFkaWVudCwgQ0FJUk9fRVhURU5E
X1BBRCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU3ByZWFkTWV0aG9kUmVmbGVjdDoKKyAg
ICAgICAgY2Fpcm9fcGF0dGVybl9zZXRfZXh0ZW5kKG1fZ3JhZGllbnQsIENBSVJPX0VYVEVORF9S
RUZMRUNUKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTcHJlYWRNZXRob2RSZXBlYXQ6Cisg
ICAgICAgIGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZChtX2dyYWRpZW50LCBDQUlST19FWFRFTkRf
UkVQRUFUKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgcmV0dXJuIG1fZ3JhZGllbnQ7
CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250
ZXh0Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCShyZXZpc2lvbiAzOTgzMSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04NywyMiArODcsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmlsbFJlY3RTb3Vy
Y2VPdmVyKGNhCiAgICAgY2Fpcm9fZmlsbChjcik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgY2Fpcm9f
cGF0dGVybl90KiBhcHBseVNwcmVhZE1ldGhvZChjYWlyb19wYXR0ZXJuX3QqIHBhdHRlcm4sIEdy
YWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCkKLXsKLSAgICBzd2l0Y2ggKHNwcmVhZE1l
dGhvZCkgewotICAgICAgICBjYXNlIFNwcmVhZE1ldGhvZFBhZDoKLSAgICAgICAgICAgY2Fpcm9f
cGF0dGVybl9zZXRfZXh0ZW5kKHBhdHRlcm4sIENBSVJPX0VYVEVORF9QQUQpOwotICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBTcHJlYWRNZXRob2RSZWZsZWN0OgotICAgICAgICAgICAg
Y2Fpcm9fcGF0dGVybl9zZXRfZXh0ZW5kKHBhdHRlcm4sIENBSVJPX0VYVEVORF9SRUZMRUNUKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNwcmVhZE1ldGhvZFJlcGVhdDoKLSAg
ICAgICAgICAgIGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZChwYXR0ZXJuLCBDQUlST19FWFRFTkRf
UkVQRUFUKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gcGF0dGVybjsK
LX0KLQogR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQqIGNyKQogICAgIDogbV9jb21tb24oY3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgp
KQogICAgICwgbV9kYXRhKG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUpCkBAIC00
NjMsNyArNDQ3LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKCkKICAgICB9CiAg
ICAgY2FzZSBHcmFkaWVudENvbG9yU3BhY2U6CiAgICAgICAgIGNhaXJvX3BhdHRlcm5fdCogcGF0
dGVybiA9IG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKTsK
LSAgICAgICAgcGF0dGVybiA9IGFwcGx5U3ByZWFkTWV0aG9kKHBhdHRlcm4sIHNwcmVhZE1ldGhv
ZCgpKTsKICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgcGF0dGVybik7CiAgICAgICAgIGNh
aXJvX2NsaXAoY3IpOwogICAgICAgICBjYWlyb19wYWludF93aXRoX2FscGhhKGNyLCBtX2NvbW1v
bi0+c3RhdGUuZ2xvYmFsQWxwaGEpOwpAQCAtNTAxLDcgKzQ4NCw2IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzdHJva2VQYXRoKCkKICAgICB9CiAgICAgY2FzZSBHcmFkaWVudENvbG9yU3BhY2U6
CiAgICAgICAgIGNhaXJvX3BhdHRlcm5fdCogcGF0dGVybiA9IG1fY29tbW9uLT5zdGF0ZS5zdHJv
a2VHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpOwotICAgICAgICBwYXR0ZXJuID0gYXBwbHlT
cHJlYWRNZXRob2QocGF0dGVybiwgc3ByZWFkTWV0aG9kKCkpOwogICAgICAgICBjYWlyb19zZXRf
c291cmNlKGNyLCBwYXR0ZXJuKTsKICAgICAgICAgaWYgKG1fY29tbW9uLT5zdGF0ZS5nbG9iYWxB
bHBoYSA8IDEuMGYpIHsKICAgICAgICAgICAgIGNhaXJvX3B1c2hfZ3JvdXAoY3IpOwpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFkaWVudFF0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYWRpZW50UXQuY3BwCShyZXZpc2lvbiAz
OTgzMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhZGllbnRRdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDE4IEBAIFFHcmFkaWVudCogR3JhZGllbnQ6OnBsYXRm
b3JtR3JhZGllbnQoKQogICAgICAgICArK3N0b3BJdGVyYXRvcjsKICAgICB9CiAKKyAgICBzd2l0
Y2gobV9zcHJlYWRNZXRob2QpIHsKKyAgICBjYXNlIFNwcmVhZE1ldGhvZFBhZDoKKyAgICAgICAg
bV9ncmFkaWVudC0+c2V0U3ByZWFkKFFHcmFkaWVudDo6UGFkU3ByZWFkKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBTcHJlYWRNZXRob2RSZWZsZWN0OgorICAgICAgICBtX2dyYWRpZW50LT5z
ZXRTcHJlYWQoUUdyYWRpZW50OjpSZWZsZWN0U3ByZWFkKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBTcHJlYWRNZXRob2RSZXBlYXQ6CisgICAgICAgIG1fZ3JhZGllbnQtPnNldFNwcmVhZChR
R3JhZGllbnQ6OlJlcGVhdFNwcmVhZCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIHJl
dHVybiBtX2dyYWRpZW50OwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0dyYXBoaWNzQ29udGV4dFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAkocmV2aXNpb24gMzk4MzEpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTUyLDIyICsxNTIsNiBAQCBzdGF0aWMgUXQ6OlBlblN0eWxlIHRvUVBlblN0eWxl
KFN0cm9rZVN0CiAgICAgcmV0dXJuIFF0OjpOb1BlbjsKIH0KIAotc3RhdGljIGlubGluZSBRR3Jh
ZGllbnQgYXBwbHlTcHJlYWRNZXRob2QoUUdyYWRpZW50IGdyYWRpZW50LCBHcmFkaWVudFNwcmVh
ZE1ldGhvZCBzcHJlYWRNZXRob2QpCi17Ci0gICAgc3dpdGNoIChzcHJlYWRNZXRob2QpIHsKLSAg
ICAgICAgY2FzZSBTcHJlYWRNZXRob2RQYWQ6Ci0gICAgICAgICAgICBncmFkaWVudC5zZXRTcHJl
YWQoUUdyYWRpZW50OjpQYWRTcHJlYWQpOwotICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBTcHJlYWRNZXRob2RSZWZsZWN0OgotICAgICAgICAgICAgZ3JhZGllbnQuc2V0U3ByZWFkKFFH
cmFkaWVudDo6UmVmbGVjdFNwcmVhZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBTcHJlYWRNZXRob2RSZXBlYXQ6Ci0gICAgICAgICAgICBncmFkaWVudC5zZXRTcHJlYWQoUUdy
YWRpZW50OjpSZXBlYXRTcHJlYWQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJl
dHVybiBncmFkaWVudDsKLX0KLQogc3RydWN0IFRyYW5zcGFyZW5jeUxheWVyCiB7CiAgICAgVHJh
bnNwYXJlbmN5TGF5ZXIoY29uc3QgUVBhaW50ZXIqIHAsIGNvbnN0IFFSZWN0ICZyZWN0KQpAQCAt
NTU0LDcgKzUzOCw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCgpCiAgICAgfQog
ICAgIGNhc2UgR3JhZGllbnRDb2xvclNwYWNlOgogICAgICAgICBRR3JhZGllbnQqIGdyYWRpZW50
ID0gbV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpOwotICAg
ICAgICAqZ3JhZGllbnQgPSBhcHBseVNwcmVhZE1ldGhvZCgqZ3JhZGllbnQsIHNwcmVhZE1ldGhv
ZCgpKTsgIAogICAgICAgICBwLT5maWxsUGF0aChwYXRoLCBRQnJ1c2goKmdyYWRpZW50KSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTU4NCw3ICs1NjcsNiBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c3Ryb2tlUGF0aCgpCiAgICAgfQogICAgIGNhc2UgR3JhZGllbnRDb2xvclNwYWNlOiB7
CiAgICAgICAgIFFHcmFkaWVudCogZ3JhZGllbnQgPSBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3Jh
ZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKTsKLSAgICAgICAgKmdyYWRpZW50ID0gYXBwbHlTcHJl
YWRNZXRob2QoKmdyYWRpZW50LCBzcHJlYWRNZXRob2QoKSk7IAogICAgICAgICBwZW4uc2V0QnJ1
c2goUUJydXNoKCpncmFkaWVudCkpOwogICAgICAgICBwLT5zZXRQZW4ocGVuKTsKICAgICAgICAg
cC0+c3Ryb2tlUGF0aChwYXRoLCBwZW4pOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0dyYWRpZW50U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0dyYWRpZW50U2tpYS5jcHAJKHJldmlzaW9uIDM5ODMyKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYWRpZW50U2tpYS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEzNiw2ICsxMzYsMTkgQEAgU2tTaGFkZXIqIEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50
KCkKIAogICAgIGZpbGxTdG9wcyhtX3N0b3BzLmRhdGEoKSwgbV9zdG9wcy5zaXplKCksIHBvcywg
Y29sb3JzKTsKIAorICAgIFNrU2hhZGVyOjpUaWxlTW9kZSB0aWxlID0gU2tTaGFkZXI6OmtDbGFt
cF9UaWxlTW9kZTsKKyAgICBzd2l0Y2ggKG1fc3ByZWFkTWV0aG9kKSB7CisgICAgY2FzZSBTcHJl
YWRNZXRob2RSZWZsZWN0OgorICAgICAgICB0aWxlID0gU2tTaGFkZXI6OmtNaXJyb3JfVGlsZU1v
ZGU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU3ByZWFkTWV0aG9kUmVwZWF0OgorICAgICAg
ICB0aWxlID0gU2tTaGFkZXI6OmtSZXBlYXRfVGlsZU1vZGU7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgU3ByZWFkTWV0aG9kUGFkOgorICAgICAgICB0aWxlID0gU2tTaGFkZXI6OmtDbGFtcF9U
aWxlTW9kZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgaWYgKG1fcmFkaWFsKSB7CiAg
ICAgICAgIC8vIEZJWE1FOiBDU1MgcmFkaWFsIEdyYWRpZW50cyBhbGxvdyBhbiBvZmZzZXQgZm9j
YWwgcG9pbnQgKHRoZQogICAgICAgICAvLyAic3RhcnQgY2lyY2xlIiksIGJ1dCBza2lhIGRvZXNu
J3Qgc2VlbSB0byBzdXBwb3J0IHRoYXQsIHNvIHRoaXMganVzdApAQCAtMTQ1LDExICsxNTgsMTEg
QEAgU2tTaGFkZXIqIEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50KCkKICAgICAgICAgLy8gZGVz
Y3JpcHRpb24gb2YgdGhlIGV4cGVjdGVkIGJlaGF2aW9yLgogICAgICAgICBtX2dyYWRpZW50ID0g
U2tHcmFkaWVudFNoYWRlcjo6Q3JlYXRlUmFkaWFsKG1fcDEsCiAgICAgICAgICAgICBXZWJDb3Jl
RmxvYXRUb1NrU2NhbGFyKG1fcjEpLCBjb2xvcnMsIHBvcywKLSAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludD4oY291bnRVc2VkKSwgU2tTaGFkZXI6OmtDbGFtcF9UaWxlTW9kZSk7CisgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQ+KGNvdW50VXNlZCksIHRpbGUpOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIFNrUG9pbnQgcHRzWzJdID0geyBtX3AwLCBtX3AxIH07CiAgICAgICAgIG1fZ3JhZGll
bnQgPSBTa0dyYWRpZW50U2hhZGVyOjpDcmVhdGVMaW5lYXIocHRzLCBjb2xvcnMsIHBvcywKLSAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludD4oY291bnRVc2VkKSwgU2tTaGFkZXI6OmtDbGFtcF9U
aWxlTW9kZSk7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGNvdW50VXNlZCksIHRpbGUp
OwogICAgIH0KIAogICAgIHJldHVybiBtX2dyYWRpZW50OwpJbmRleDogV2ViQ29yZS9zdmcvU1ZH
TGluZWFyR3JhZGllbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdM
aW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwCShyZXZpc2lvbiAzOTgzMSkKKysrIFdlYkNvcmUvc3Zn
L1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3
LDcgQEAgdm9pZCBTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OmJ1aWxkR3JhZAogICAgIEZsb2F0
UG9pbnQgZW5kUG9pbnQgPSBGbG9hdFBvaW50OjpuYXJyb3dQcmVjaXNpb24oYXR0cmlidXRlcy54
MigpLCBhdHRyaWJ1dGVzLnkyKCkpOwogCiAgICAgUmVmUHRyPEdyYWRpZW50PiBncmFkaWVudCA9
IEdyYWRpZW50OjpjcmVhdGUoc3RhcnRQb2ludCwgZW5kUG9pbnQpOworICAgIGdyYWRpZW50LT5z
ZXRTcHJlYWRNZXRob2QoYXR0cmlidXRlcy5zcHJlYWRNZXRob2QoKSk7CiAKICAgICBWZWN0b3I8
U1ZHR3JhZGllbnRTdG9wPiBtX3N0b3BzID0gYXR0cmlidXRlcy5zdG9wcygpOwogICAgIGZsb2F0
IHByZXZpb3VzT2Zmc2V0ID0gMC4wZjsKQEAgLTEwNyw3ICsxMDgsNiBAQCB2b2lkIFNWR0xpbmVh
ckdyYWRpZW50RWxlbWVudDo6YnVpbGRHcmFkCiAgICAgbGluZWFyR3JhZGllbnQtPnNldEdyYWRp
ZW50U3RvcHMoYXR0cmlidXRlcy5zdG9wcygpKTsKIAogICAgIC8vIFRoZXNlIHNob3VsZCBwb3Nz
aWJseSBiZSBzdXBwb3J0ZWQgb24gR3JhZGllbnQKLSAgICBsaW5lYXJHcmFkaWVudC0+c2V0R3Jh
ZGllbnRTcHJlYWRNZXRob2QoYXR0cmlidXRlcy5zcHJlYWRNZXRob2QoKSk7CiAgICAgbGluZWFy
R3JhZGllbnQtPnNldEdyYWRpZW50VHJhbnNmb3JtKGF0dHJpYnV0ZXMuZ3JhZGllbnRUcmFuc2Zv
cm0oKSk7CiAgICAgbGluZWFyR3JhZGllbnQtPnNldEdyYWRpZW50U3RhcnQoc3RhcnRQb2ludCk7
CiAgICAgbGluZWFyR3JhZGllbnQtPnNldEdyYWRpZW50RW5kKGVuZFBvaW50KTsKSW5kZXg6IFdl
YkNvcmUvc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcAkocmV2aXNpb24gMzk4MzEpCisr
KyBXZWJDb3JlL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTQsNiArMTE0LDcgQEAgdm9pZCBTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OmJ1aWxk
R3JhZAogICAgICAgICAwLmYsIC8vIFNWRyBkb2VzIG5vdCBzdXBwb3J0IGEgImZvY3VzIHJhZGl1
cyIKICAgICAgICAgY2VudGVyUG9pbnQsCiAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
YXR0cmlidXRlcy5yKCkpKTsKKyAgICBncmFkaWVudC0+c2V0U3ByZWFkTWV0aG9kKGF0dHJpYnV0
ZXMuc3ByZWFkTWV0aG9kKCkpOwogCiAgICAgVmVjdG9yPFNWR0dyYWRpZW50U3RvcD4gc3RvcHMg
PSBhdHRyaWJ1dGVzLnN0b3BzKCk7CiAgICAgZmxvYXQgcHJldmlvdXNPZmZzZXQgPSAwLjBmOwpA
QCAtMTI5LDcgKzEzMCw2IEBAIHZvaWQgU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpidWlsZEdy
YWQKICAgICAgICAgcmV0dXJuOwogCiAgICAgcmFkaWFsR3JhZGllbnQtPnNldEJvdW5kaW5nQm94
TW9kZShhdHRyaWJ1dGVzLmJvdW5kaW5nQm94TW9kZSgpKTsKLSAgICByYWRpYWxHcmFkaWVudC0+
c2V0R3JhZGllbnRTcHJlYWRNZXRob2QoYXR0cmlidXRlcy5zcHJlYWRNZXRob2QoKSk7IAogICAg
IHJhZGlhbEdyYWRpZW50LT5zZXRHcmFkaWVudFRyYW5zZm9ybShhdHRyaWJ1dGVzLmdyYWRpZW50
VHJhbnNmb3JtKCkpOwogICAgIHJhZGlhbEdyYWRpZW50LT5zZXRHcmFkaWVudENlbnRlcihjZW50
ZXJQb2ludCk7CiAgICAgcmFkaWFsR3JhZGllbnQtPnNldEdyYWRpZW50Rm9jYWwoZm9jYWxQb2lu
dCk7CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRp
ZW50LmNwcAkocmV2aXNpb24gMzk4MzEpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWlu
dFNlcnZlckdyYWRpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsOCArNzYsNyBAQCBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjCiB9CiAKIFNWR1BhaW50U2VydmVy
R3JhZGllbnQ6OlNWR1BhaW50U2VydmVyR3JhZGllbnQoY29uc3QgU1ZHR3JhZGllbnRFbGVtZW50
KiBvd25lcikKLSAgICA6IG1fc3ByZWFkTWV0aG9kKFNwcmVhZE1ldGhvZFBhZCkKLSAgICAsIG1f
Ym91bmRpbmdCb3hNb2RlKHRydWUpCisgICAgOiBtX2JvdW5kaW5nQm94TW9kZSh0cnVlKQogICAg
ICwgbV9vd25lckVsZW1lbnQob3duZXIpCiAKICNpZiBQTEFURk9STShDRykKQEAgLTEwMiwxNiAr
MTAxLDYgQEAgdm9pZCBTVkdQYWludFNlcnZlckdyYWRpZW50OjpzZXRHcmFkaWVudAogICAgIG1f
Z3JhZGllbnQgPSBncmFkaWVudDsKIH0KIAotR3JhZGllbnRTcHJlYWRNZXRob2QgU1ZHUGFpbnRT
ZXJ2ZXJHcmFkaWVudDo6c3ByZWFkTWV0aG9kKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zcHJl
YWRNZXRob2Q7Ci19Ci0KLXZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0R3JhZGllbnRT
cHJlYWRNZXRob2QoY29uc3QgR3JhZGllbnRTcHJlYWRNZXRob2QmIG1ldGhvZCkKLXsKLSAgICBt
X3NwcmVhZE1ldGhvZCA9IG1ldGhvZDsKLX0KLQogYm9vbCBTVkdQYWludFNlcnZlckdyYWRpZW50
Ojpib3VuZGluZ0JveE1vZGUoKSBjb25zdAogewogICAgIHJldHVybiBtX2JvdW5kaW5nQm94TW9k
ZTsKQEAgLTI1Miw3ICsyNDEsNiBAQCBib29sIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnNldHVw
KEdyYXBoCiAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcyhzdHJva2VUaGlja25l
c3MpOwogICAgIH0KICAgICBjb250ZXh0LT5jb25jYXRDVE0oZ3JhZGllbnRUcmFuc2Zvcm0oKSk7
Ci0gICAgY29udGV4dC0+c2V0U3ByZWFkTWV0aG9kKHNwcmVhZE1ldGhvZCgpKTsKIAogICAgIHJl
dHVybiB0cnVlOwogfQpAQCAtMjk1LDggKzI4Myw4IEBAIFRleHRTdHJlYW0mIFNWR1BhaW50U2Vy
dmVyR3JhZGllbnQ6OmV4dGUKIAogICAgIC8vIGFic3RyYWN0LCBkb24ndCBzdHJlYW0gdHlwZQog
ICAgIHRzICA8PCAiW3N0b3BzPSIgPDwgZ3JhZGllbnRTdG9wcygpIDw8ICJdIjsKLSAgICBpZiAo
c3ByZWFkTWV0aG9kKCkgIT0gU3ByZWFkTWV0aG9kUGFkKQotICAgICAgICB0cyA8PCAiW21ldGhv
ZD0iIDw8IHNwcmVhZE1ldGhvZCgpIDw8ICJdIjsKKyAgICBpZiAobV9ncmFkaWVudC0+c3ByZWFk
TWV0aG9kKCkgIT0gU3ByZWFkTWV0aG9kUGFkKQorICAgICAgICB0cyA8PCAiW21ldGhvZD0iIDw8
IG1fZ3JhZGllbnQtPnNwcmVhZE1ldGhvZCgpIDw8ICJdIjsKICAgICBpZiAoIWJvdW5kaW5nQm94
TW9kZSgpKQogICAgICAgICB0cyA8PCAiIFtib3VuZGluZyBib3ggbW9kZT0iIDw8IGJvdW5kaW5n
Qm94TW9kZSgpIDw8ICJdIjsKICAgICBpZiAoIWdyYWRpZW50VHJhbnNmb3JtKCkuaXNJZGVudGl0
eSgpKQpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyR3JhZGll
bnQuaAkocmV2aXNpb24gMzk4MzEpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNl
cnZlckdyYWRpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDkgKzUyLDYgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2b2lkIHNldEdyYWRpZW50KFBhc3NSZWZQdHI8R3JhZGllbnQ+
KTsKICAgICAgICAgR3JhZGllbnQqIGdyYWRpZW50KCkgY29uc3Q7CiAKLSAgICAgICAgR3JhZGll
bnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0R3Jh
ZGllbnRTcHJlYWRNZXRob2QoY29uc3QgR3JhZGllbnRTcHJlYWRNZXRob2QmKTsKLQogICAgICAg
ICAvLyBHcmFkaWVudCBzdGFydCBhbmQgZW5kIHBvaW50cyBhcmUgcGVyY2VudGFnZXMgd2hlbiB1
c2VkIGluIGJvdW5kaW5nQm94IG1vZGUuCiAgICAgICAgIC8vIEZvciBpbnN0YW5jZSBzdGFydCBw
b2ludCB3aXRoIHZhbHVlICgwLDApIGlzIHRvcC1sZWZ0IGFuZCBlbmQgcG9pbnQgd2l0aAogICAg
ICAgICAvLyB2YWx1ZSAoMTAwLCAxMDApIGlzIGJvdHRvbS1yaWdodC4gQm91bmRpbmdCb3ggbW9k
ZSBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCkBAIC03OSw3ICs3Niw2IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICBwcml2YXRlOgogICAgICAgICBWZWN0b3I8U1ZHR3JhZGllbnRTdG9wPiBtX3N0
b3BzOwogICAgICAgICBSZWZQdHI8R3JhZGllbnQ+IG1fZ3JhZGllbnQ7Ci0gICAgICAgIEdyYWRp
ZW50U3ByZWFkTWV0aG9kIG1fc3ByZWFkTWV0aG9kOwogICAgICAgICBib29sIG1fYm91bmRpbmdC
b3hNb2RlOwogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2dyYWRpZW50VHJhbnNmb3Jt
OwogICAgICAgICBjb25zdCBTVkdHcmFkaWVudEVsZW1lbnQqIG1fb3duZXJFbGVtZW50Owo=
</data>
<flag name="review"
          id="12882"
          type_id="1"
          status="+"
          setter="zimmermann"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26916</attachid>
            <date>2009-01-21 16:45:23 -0800</date>
            <delta_ts>2009-01-21 16:47:29 -0800</delta_ts>
            <desc>try4</desc>
            <filename>grad-spread.diff</filename>
            <type>text/plain</type>
            <size>18011</size>
            <attacher name="Evan Stade">estade</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDEwMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDIgQEAKKzIwMDktMDEtMjEgIEV2YW4gU3RhZGUgIDxlc3RhZGVAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1h
a2Ugc3ByZWFkTWV0aG9kIGEgbWVtYmVyIG9mIEdyYWRpZW50IHJhdGhlciB0aGFuIEdyYXBoaWNz
Q29udGV4dC4KKyAgICAgICAgSW1wbGVtZW50IHNwcmVhZE1ldGhvZCBmb3IgU2tpYS4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYWRpZW50OjpHcmFkaWVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGll
bnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpzZXRTcHJlYWRNZXRob2QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnNwcmVhZE1ldGhvZCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHRQcml2YXRlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NUeXBlcy5oOgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50
OjpwbGF0Zm9ybUdyYWRpZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFwaGljc0NvbnRleHRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tl
UGF0aCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhZGllbnRRdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6cGxhdGZvcm1HcmFkaWVudCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnN0cm9rZVBhdGgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvR3JhZGllbnRTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpwbGF0Zm9y
bUdyYWRpZW50KToKKyAgICAgICAgKiBzdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6YnVpbGRHcmFkaWVu
dCk6CisgICAgICAgICogc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OmJ1aWxkR3JhZGllbnQpOgorICAg
ICAgICAqIHN2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhaW50U2VydmVyR3JhZGllbnQ6OlNWR1BhaW50U2VydmVyR3JhZGllbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0dXApOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbik6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyR3JhZGllbnQuaDoK
KwogMjAwOS0wMS0yMSAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgSnVzdGluIEdhcmNpYS4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhZGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhZGllbnQuY3BwCShyZXZpc2lvbiAzOTgzMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhZGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBAIEdyYWRpZW50
OjpHcmFkaWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwKICAgICAsIG1fcjEoMCkKICAgICAsIG1f
c3RvcHNTb3J0ZWQoZmFsc2UpCiAgICAgLCBtX2xhc3RTdG9wKDApCisgICAgLCBtX3NwcmVhZE1l
dGhvZChTcHJlYWRNZXRob2RQYWQpCiB7CiAgICAgcGxhdGZvcm1Jbml0KCk7CiB9CkBAIC0xNDYs
NCArMTQ3LDExIEBAIGludCBHcmFkaWVudDo6ZmluZFN0b3AoZmxvYXQgdmFsdWUpIGNvbnMKICAg
ICByZXR1cm4gbV9sYXN0U3RvcDsKIH0KIAorR3JhZGllbnRTcHJlYWRNZXRob2QgR3JhZGllbnQ6
OnNwcmVhZE1ldGhvZCgpCit7CisgICAgLy8gRklYTUU6IFNob3VsZCBpdCBiZWNvbWUgbmVjZXNz
YXJ5LCBhbGxvdyBjYWxscyB0byB0aGlzIG1ldGhvZCBhZnRlciBtX2dyYWRpZW50IGhhcyBiZWVu
IHNldC4KKyAgICBBU1NFUlQobV9ncmFkaWVudCA9PSAwKTsKKyAgICBtX3NwcmVhZE1ldGhvZCA9
IHNwcmVhZE1ldGhvZDsKK30KKwogfSAvL25hbWVzcGFjZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFkaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhZGllbnQuaAkocmV2aXNpb24gMzk4MzEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYWRpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2lu
Y2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJH
cmFwaGljc1R5cGVzLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAKQEAgLTg2LDYgKzg3LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ICAgICAgICB2b2lkIHNldFN0b3BzU29ydGVkKGJvb2wgcykgeyBtX3N0b3BzU29ydGVkID0gczsg
fQogCisgICAgICAgIHZvaWQgc2V0U3ByZWFkTWV0aG9kKEdyYWRpZW50U3ByZWFkTWV0aG9kIHNw
cmVhZE1ldGhvZCk7CisKKyAgICAgICAgR3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9k
KCkgeyByZXR1cm4gbV9zcHJlYWRNZXRob2Q7IH0KKwogICAgICAgICB2aXJ0dWFsIHZvaWQgZmls
bChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmKTsKIAogICAgIHByaXZhdGU6CkBA
IC0xMDUsNiArMTEwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBtdXRhYmxlIFZl
Y3RvcjxDb2xvclN0b3A+IG1fc3RvcHM7CiAgICAgICAgIG11dGFibGUgYm9vbCBtX3N0b3BzU29y
dGVkOwogICAgICAgICBtdXRhYmxlIGludCBtX2xhc3RTdG9wOworICAgICAgICBHcmFkaWVudFNw
cmVhZE1ldGhvZCBtX3NwcmVhZE1ldGhvZDsKIAogICAgICAgICBQbGF0Zm9ybUdyYWRpZW50IG1f
Z3JhZGllbnQ7CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5jcHAJKHJldmlzaW9uIDM5ODMxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODksMTYgKzE4
OSw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsUnVsZShXaW5kUnUKICAgICBtX2Nv
bW1vbi0+c3RhdGUuZmlsbFJ1bGUgPSBmaWxsUnVsZTsKIH0KIAotR3JhZGllbnRTcHJlYWRNZXRo
b2QgR3JhcGhpY3NDb250ZXh0OjpzcHJlYWRNZXRob2QoKSBjb25zdAotewotICAgIHJldHVybiBt
X2NvbW1vbi0+c3RhdGUuc3ByZWFkTWV0aG9kOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0U3ByZWFkTWV0aG9kKEdyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCkKLXsKLSAg
ICBtX2NvbW1vbi0+c3RhdGUuc3ByZWFkTWV0aG9kID0gc3ByZWFkTWV0aG9kOwotfQotCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAg
ICBtX2NvbW1vbi0+c3RhdGUuZmlsbENvbG9yU3BhY2UgPSBTb2xpZENvbG9yU3BhY2U7CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9u
IDM5ODMxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAko
d29ya2luZyBjb3B5KQpAQCAtMTI1LDE0ICsxMjUsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIEludGVycG9sYXRpb25IaWdoCiAgICAgfTsKIAotICAgIC8vIEZJWE1FOiBDdXJyZW50
bHkgdGhlc2UgY29uc3RhbnRzIGhhdmUgdG8gbWF0Y2ggdGhlIHZhbHVlcyB1c2VkIGluIHRoZSBT
VkcKLSAgICAvLyBET00gQVBJLiBUaGF0J3MgYSBtaXN0YWtlLiBXZSBuZWVkIHRvIG1ha2UgY3V0
IHRoYXQgZGVwZW5kZW5jeS4KLSAgICBlbnVtIEdyYWRpZW50U3ByZWFkTWV0aG9kIHsKLSAgICAg
ICAgU3ByZWFkTWV0aG9kUGFkID0gMSwKLSAgICAgICAgU3ByZWFkTWV0aG9kUmVmbGVjdCA9IDIs
Ci0gICAgICAgIFNwcmVhZE1ldGhvZFJlcGVhdCA9IDMKLSAgICB9OwotCiAgICAgY2xhc3MgR3Jh
cGhpY3NDb250ZXh0IDogTm9uY29weWFibGUgewogICAgIHB1YmxpYzoKICAgICAgICAgR3JhcGhp
Y3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kik7CkBAIC0xNTQsOCArMTQ2LDYgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIFdpbmRSdWxlIGZpbGxSdWxlKCkgY29uc3Q7
CiAgICAgICAgIHZvaWQgc2V0RmlsbFJ1bGUoV2luZFJ1bGUpOwotICAgICAgICBHcmFkaWVudFNw
cmVhZE1ldGhvZCBzcHJlYWRNZXRob2QoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRTcHJlYWRN
ZXRob2QoR3JhZGllbnRTcHJlYWRNZXRob2QpOwogICAgICAgICBDb2xvciBmaWxsQ29sb3IoKSBj
b25zdDsKICAgICAgICAgdm9pZCBzZXRGaWxsQ29sb3IoY29uc3QgQ29sb3ImKTsKICAgICAgICAg
dm9pZCBzZXRGaWxsUGF0dGVybihQYXNzUmVmUHRyPFBhdHRlcm4+KTsKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oCShyZXZp
c2lvbiAzOTgzMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw2IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgUmVmUHRyPFBhdHRlcm4+IHN0cm9rZVBhdHRlcm47CiAgICAgICAgIAog
ICAgICAgICBXaW5kUnVsZSBmaWxsUnVsZTsKLSAgICAgICAgR3JhZGllbnRTcHJlYWRNZXRob2Qg
c3ByZWFkTWV0aG9kOwogICAgICAgICBDb2xvclNwYWNlIGZpbGxDb2xvclNwYWNlOwogICAgICAg
ICBDb2xvciBmaWxsQ29sb3I7CiAgICAgICAgIFJlZlB0cjxHcmFkaWVudD4gZmlsbEdyYWRpZW50
OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgJKHJldmlz
aW9uIDM5ODMxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgQ29tcG9zaXRlUGx1c0xpZ2h0ZXIKICAgICB9OwogCisgICAgLy8gRklYTUU6IEN1cnJl
bnRseSB0aGVzZSBjb25zdGFudHMgaGF2ZSB0byBtYXRjaCB0aGUgdmFsdWVzIHVzZWQgaW4gdGhl
IFNWRworICAgIC8vIERPTSBBUEkuIFRoYXQncyBhIG1pc3Rha2UuIFdlIG5lZWQgdG8gbWFrZSBj
dXQgdGhhdCBkZXBlbmRlbmN5LgorICAgIGVudW0gR3JhZGllbnRTcHJlYWRNZXRob2QgeworICAg
ICAgICBTcHJlYWRNZXRob2RQYWQgPSAxLAorICAgICAgICBTcHJlYWRNZXRob2RSZWZsZWN0ID0g
MiwKKyAgICAgICAgU3ByZWFkTWV0aG9kUmVwZWF0ID0gMworICAgIH07CisKICAgICBlbnVtIExp
bmVDYXAgeyBCdXR0Q2FwLCBSb3VuZENhcCwgU3F1YXJlQ2FwIH07CiAKICAgICBlbnVtIExpbmVK
b2luIHsgTWl0ZXJKb2luLCBSb3VuZEpvaW4sIEJldmVsSm9pbiB9OwpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCShyZXZpc2lv
biAzOTgzMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWly
by5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDE4IEBAIGNhaXJvX3BhdHRlcm5fdCog
R3JhZGllbnQ6OnBsYXRmb3JtR3JhZGkKICAgICAgICAgKytzdG9wSXRlcmF0b3I7CiAgICAgfQog
CisgICAgc3dpdGNoIChtX3NwcmVhZE1ldGhvZCkgeworICAgIGNhc2UgU3ByZWFkTWV0aG9kUGFk
OgorICAgICAgICBjYWlyb19wYXR0ZXJuX3NldF9leHRlbmQobV9ncmFkaWVudCwgQ0FJUk9fRVhU
RU5EX1BBRCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU3ByZWFkTWV0aG9kUmVmbGVjdDoK
KyAgICAgICAgY2Fpcm9fcGF0dGVybl9zZXRfZXh0ZW5kKG1fZ3JhZGllbnQsIENBSVJPX0VYVEVO
RF9SRUZMRUNUKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTcHJlYWRNZXRob2RSZXBlYXQ6
CisgICAgICAgIGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZChtX2dyYWRpZW50LCBDQUlST19FWFRF
TkRfUkVQRUFUKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgcmV0dXJuIG1fZ3JhZGll
bnQ7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCShyZXZpc2lvbiAzOTgzMSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NywyMiArODcsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmlsbFJlY3RT
b3VyY2VPdmVyKGNhCiAgICAgY2Fpcm9fZmlsbChjcik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgY2Fp
cm9fcGF0dGVybl90KiBhcHBseVNwcmVhZE1ldGhvZChjYWlyb19wYXR0ZXJuX3QqIHBhdHRlcm4s
IEdyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCkKLXsKLSAgICBzd2l0Y2ggKHNwcmVh
ZE1ldGhvZCkgewotICAgICAgICBjYXNlIFNwcmVhZE1ldGhvZFBhZDoKLSAgICAgICAgICAgY2Fp
cm9fcGF0dGVybl9zZXRfZXh0ZW5kKHBhdHRlcm4sIENBSVJPX0VYVEVORF9QQUQpOwotICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTcHJlYWRNZXRob2RSZWZsZWN0OgotICAgICAgICAg
ICAgY2Fpcm9fcGF0dGVybl9zZXRfZXh0ZW5kKHBhdHRlcm4sIENBSVJPX0VYVEVORF9SRUZMRUNU
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNwcmVhZE1ldGhvZFJlcGVhdDoK
LSAgICAgICAgICAgIGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZChwYXR0ZXJuLCBDQUlST19FWFRF
TkRfUkVQRUFUKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gcGF0dGVy
bjsKLX0KLQogR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQqIGNyKQogICAgIDogbV9jb21tb24oY3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0
ZSgpKQogICAgICwgbV9kYXRhKG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUpCkBA
IC00NjMsNyArNDQ3LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKCkKICAgICB9
CiAgICAgY2FzZSBHcmFkaWVudENvbG9yU3BhY2U6CiAgICAgICAgIGNhaXJvX3BhdHRlcm5fdCog
cGF0dGVybiA9IG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQo
KTsKLSAgICAgICAgcGF0dGVybiA9IGFwcGx5U3ByZWFkTWV0aG9kKHBhdHRlcm4sIHNwcmVhZE1l
dGhvZCgpKTsKICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgcGF0dGVybik7CiAgICAgICAg
IGNhaXJvX2NsaXAoY3IpOwogICAgICAgICBjYWlyb19wYWludF93aXRoX2FscGhhKGNyLCBtX2Nv
bW1vbi0+c3RhdGUuZ2xvYmFsQWxwaGEpOwpAQCAtNTAxLDcgKzQ4NCw2IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VQYXRoKCkKICAgICB9CiAgICAgY2FzZSBHcmFkaWVudENvbG9yU3Bh
Y2U6CiAgICAgICAgIGNhaXJvX3BhdHRlcm5fdCogcGF0dGVybiA9IG1fY29tbW9uLT5zdGF0ZS5z
dHJva2VHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpOwotICAgICAgICBwYXR0ZXJuID0gYXBw
bHlTcHJlYWRNZXRob2QocGF0dGVybiwgc3ByZWFkTWV0aG9kKCkpOwogICAgICAgICBjYWlyb19z
ZXRfc291cmNlKGNyLCBwYXR0ZXJuKTsKICAgICAgICAgaWYgKG1fY29tbW9uLT5zdGF0ZS5nbG9i
YWxBbHBoYSA8IDEuMGYpIHsKICAgICAgICAgICAgIGNhaXJvX3B1c2hfZ3JvdXAoY3IpOwpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFkaWVudFF0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYWRpZW50UXQuY3BwCShyZXZpc2lv
biAzOTgzMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhZGllbnRRdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDE4IEBAIFFHcmFkaWVudCogR3JhZGllbnQ6OnBs
YXRmb3JtR3JhZGllbnQoKQogICAgICAgICArK3N0b3BJdGVyYXRvcjsKICAgICB9CiAKKyAgICBz
d2l0Y2gobV9zcHJlYWRNZXRob2QpIHsKKyAgICBjYXNlIFNwcmVhZE1ldGhvZFBhZDoKKyAgICAg
ICAgbV9ncmFkaWVudC0+c2V0U3ByZWFkKFFHcmFkaWVudDo6UGFkU3ByZWFkKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBTcHJlYWRNZXRob2RSZWZsZWN0OgorICAgICAgICBtX2dyYWRpZW50
LT5zZXRTcHJlYWQoUUdyYWRpZW50OjpSZWZsZWN0U3ByZWFkKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBTcHJlYWRNZXRob2RSZXBlYXQ6CisgICAgICAgIG1fZ3JhZGllbnQtPnNldFNwcmVh
ZChRR3JhZGllbnQ6OlJlcGVhdFNwcmVhZCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAg
IHJldHVybiBtX2dyYWRpZW50OwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAkocmV2aXNpb24gMzk4MzEpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTUyLDIyICsxNTIsNiBAQCBzdGF0aWMgUXQ6OlBlblN0eWxlIHRvUVBlblN0
eWxlKFN0cm9rZVN0CiAgICAgcmV0dXJuIFF0OjpOb1BlbjsKIH0KIAotc3RhdGljIGlubGluZSBR
R3JhZGllbnQgYXBwbHlTcHJlYWRNZXRob2QoUUdyYWRpZW50IGdyYWRpZW50LCBHcmFkaWVudFNw
cmVhZE1ldGhvZCBzcHJlYWRNZXRob2QpCi17Ci0gICAgc3dpdGNoIChzcHJlYWRNZXRob2QpIHsK
LSAgICAgICAgY2FzZSBTcHJlYWRNZXRob2RQYWQ6Ci0gICAgICAgICAgICBncmFkaWVudC5zZXRT
cHJlYWQoUUdyYWRpZW50OjpQYWRTcHJlYWQpOwotICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBTcHJlYWRNZXRob2RSZWZsZWN0OgotICAgICAgICAgICAgZ3JhZGllbnQuc2V0U3ByZWFk
KFFHcmFkaWVudDo6UmVmbGVjdFNwcmVhZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBTcHJlYWRNZXRob2RSZXBlYXQ6Ci0gICAgICAgICAgICBncmFkaWVudC5zZXRTcHJlYWQo
UUdyYWRpZW50OjpSZXBlYXRTcHJlYWQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IHJldHVybiBncmFkaWVudDsKLX0KLQogc3RydWN0IFRyYW5zcGFyZW5jeUxheWVyCiB7CiAgICAg
VHJhbnNwYXJlbmN5TGF5ZXIoY29uc3QgUVBhaW50ZXIqIHAsIGNvbnN0IFFSZWN0ICZyZWN0KQpA
QCAtNTU0LDcgKzUzOCw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCgpCiAgICAg
fQogICAgIGNhc2UgR3JhZGllbnRDb2xvclNwYWNlOgogICAgICAgICBRR3JhZGllbnQqIGdyYWRp
ZW50ID0gbV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpOwot
ICAgICAgICAqZ3JhZGllbnQgPSBhcHBseVNwcmVhZE1ldGhvZCgqZ3JhZGllbnQsIHNwcmVhZE1l
dGhvZCgpKTsgIAogICAgICAgICBwLT5maWxsUGF0aChwYXRoLCBRQnJ1c2goKmdyYWRpZW50KSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTU4NCw3ICs1NjcsNiBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c3Ryb2tlUGF0aCgpCiAgICAgfQogICAgIGNhc2UgR3JhZGllbnRDb2xvclNwYWNl
OiB7CiAgICAgICAgIFFHcmFkaWVudCogZ3JhZGllbnQgPSBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tl
R3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKTsKLSAgICAgICAgKmdyYWRpZW50ID0gYXBwbHlT
cHJlYWRNZXRob2QoKmdyYWRpZW50LCBzcHJlYWRNZXRob2QoKSk7IAogICAgICAgICBwZW4uc2V0
QnJ1c2goUUJydXNoKCpncmFkaWVudCkpOwogICAgICAgICBwLT5zZXRQZW4ocGVuKTsKICAgICAg
ICAgcC0+c3Ryb2tlUGF0aChwYXRoLCBwZW4pOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0dyYWRpZW50U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0dyYWRpZW50U2tpYS5jcHAJKHJldmlzaW9uIDM5ODMyKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYWRpZW50U2tpYS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEzNiw2ICsxMzYsMTkgQEAgU2tTaGFkZXIqIEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRp
ZW50KCkKIAogICAgIGZpbGxTdG9wcyhtX3N0b3BzLmRhdGEoKSwgbV9zdG9wcy5zaXplKCksIHBv
cywgY29sb3JzKTsKIAorICAgIFNrU2hhZGVyOjpUaWxlTW9kZSB0aWxlID0gU2tTaGFkZXI6OmtD
bGFtcF9UaWxlTW9kZTsKKyAgICBzd2l0Y2ggKG1fc3ByZWFkTWV0aG9kKSB7CisgICAgY2FzZSBT
cHJlYWRNZXRob2RSZWZsZWN0OgorICAgICAgICB0aWxlID0gU2tTaGFkZXI6OmtNaXJyb3JfVGls
ZU1vZGU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU3ByZWFkTWV0aG9kUmVwZWF0OgorICAg
ICAgICB0aWxlID0gU2tTaGFkZXI6OmtSZXBlYXRfVGlsZU1vZGU7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgU3ByZWFkTWV0aG9kUGFkOgorICAgICAgICB0aWxlID0gU2tTaGFkZXI6OmtDbGFt
cF9UaWxlTW9kZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgaWYgKG1fcmFkaWFsKSB7
CiAgICAgICAgIC8vIEZJWE1FOiBDU1MgcmFkaWFsIEdyYWRpZW50cyBhbGxvdyBhbiBvZmZzZXQg
Zm9jYWwgcG9pbnQgKHRoZQogICAgICAgICAvLyAic3RhcnQgY2lyY2xlIiksIGJ1dCBza2lhIGRv
ZXNuJ3Qgc2VlbSB0byBzdXBwb3J0IHRoYXQsIHNvIHRoaXMganVzdApAQCAtMTQ1LDExICsxNTgs
MTEgQEAgU2tTaGFkZXIqIEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50KCkKICAgICAgICAgLy8g
ZGVzY3JpcHRpb24gb2YgdGhlIGV4cGVjdGVkIGJlaGF2aW9yLgogICAgICAgICBtX2dyYWRpZW50
ID0gU2tHcmFkaWVudFNoYWRlcjo6Q3JlYXRlUmFkaWFsKG1fcDEsCiAgICAgICAgICAgICBXZWJD
b3JlRmxvYXRUb1NrU2NhbGFyKG1fcjEpLCBjb2xvcnMsIHBvcywKLSAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGludD4oY291bnRVc2VkKSwgU2tTaGFkZXI6OmtDbGFtcF9UaWxlTW9kZSk7CisgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGNvdW50VXNlZCksIHRpbGUpOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIFNrUG9pbnQgcHRzWzJdID0geyBtX3AwLCBtX3AxIH07CiAgICAgICAgIG1fZ3Jh
ZGllbnQgPSBTa0dyYWRpZW50U2hhZGVyOjpDcmVhdGVMaW5lYXIocHRzLCBjb2xvcnMsIHBvcywK
LSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4oY291bnRVc2VkKSwgU2tTaGFkZXI6OmtDbGFt
cF9UaWxlTW9kZSk7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGNvdW50VXNlZCksIHRp
bGUpOwogICAgIH0KIAogICAgIHJldHVybiBtX2dyYWRpZW50OwpJbmRleDogV2ViQ29yZS9zdmcv
U1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9T
VkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwCShyZXZpc2lvbiAzOTgzMSkKKysrIFdlYkNvcmUv
c3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYg
Kzg3LDcgQEAgdm9pZCBTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OmJ1aWxkR3JhZAogICAgIEZs
b2F0UG9pbnQgZW5kUG9pbnQgPSBGbG9hdFBvaW50OjpuYXJyb3dQcmVjaXNpb24oYXR0cmlidXRl
cy54MigpLCBhdHRyaWJ1dGVzLnkyKCkpOwogCiAgICAgUmVmUHRyPEdyYWRpZW50PiBncmFkaWVu
dCA9IEdyYWRpZW50OjpjcmVhdGUoc3RhcnRQb2ludCwgZW5kUG9pbnQpOworICAgIGdyYWRpZW50
LT5zZXRTcHJlYWRNZXRob2QoYXR0cmlidXRlcy5zcHJlYWRNZXRob2QoKSk7CiAKICAgICBWZWN0
b3I8U1ZHR3JhZGllbnRTdG9wPiBtX3N0b3BzID0gYXR0cmlidXRlcy5zdG9wcygpOwogICAgIGZs
b2F0IHByZXZpb3VzT2Zmc2V0ID0gMC4wZjsKQEAgLTEwNyw3ICsxMDgsNiBAQCB2b2lkIFNWR0xp
bmVhckdyYWRpZW50RWxlbWVudDo6YnVpbGRHcmFkCiAgICAgbGluZWFyR3JhZGllbnQtPnNldEdy
YWRpZW50U3RvcHMoYXR0cmlidXRlcy5zdG9wcygpKTsKIAogICAgIC8vIFRoZXNlIHNob3VsZCBw
b3NzaWJseSBiZSBzdXBwb3J0ZWQgb24gR3JhZGllbnQKLSAgICBsaW5lYXJHcmFkaWVudC0+c2V0
R3JhZGllbnRTcHJlYWRNZXRob2QoYXR0cmlidXRlcy5zcHJlYWRNZXRob2QoKSk7CiAgICAgbGlu
ZWFyR3JhZGllbnQtPnNldEdyYWRpZW50VHJhbnNmb3JtKGF0dHJpYnV0ZXMuZ3JhZGllbnRUcmFu
c2Zvcm0oKSk7CiAgICAgbGluZWFyR3JhZGllbnQtPnNldEdyYWRpZW50U3RhcnQoc3RhcnRQb2lu
dCk7CiAgICAgbGluZWFyR3JhZGllbnQtPnNldEdyYWRpZW50RW5kKGVuZFBvaW50KTsKSW5kZXg6
IFdlYkNvcmUvc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcAkocmV2aXNpb24gMzk4MzEp
CisrKyBXZWJDb3JlL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTQsNiArMTE0LDcgQEAgdm9pZCBTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OmJ1
aWxkR3JhZAogICAgICAgICAwLmYsIC8vIFNWRyBkb2VzIG5vdCBzdXBwb3J0IGEgImZvY3VzIHJh
ZGl1cyIKICAgICAgICAgY2VudGVyUG9pbnQsCiAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoYXR0cmlidXRlcy5yKCkpKTsKKyAgICBncmFkaWVudC0+c2V0U3ByZWFkTWV0aG9kKGF0dHJp
YnV0ZXMuc3ByZWFkTWV0aG9kKCkpOwogCiAgICAgVmVjdG9yPFNWR0dyYWRpZW50U3RvcD4gc3Rv
cHMgPSBhdHRyaWJ1dGVzLnN0b3BzKCk7CiAgICAgZmxvYXQgcHJldmlvdXNPZmZzZXQgPSAwLjBm
OwpAQCAtMTI5LDcgKzEzMCw2IEBAIHZvaWQgU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpidWls
ZEdyYWQKICAgICAgICAgcmV0dXJuOwogCiAgICAgcmFkaWFsR3JhZGllbnQtPnNldEJvdW5kaW5n
Qm94TW9kZShhdHRyaWJ1dGVzLmJvdW5kaW5nQm94TW9kZSgpKTsKLSAgICByYWRpYWxHcmFkaWVu
dC0+c2V0R3JhZGllbnRTcHJlYWRNZXRob2QoYXR0cmlidXRlcy5zcHJlYWRNZXRob2QoKSk7IAog
ICAgIHJhZGlhbEdyYWRpZW50LT5zZXRHcmFkaWVudFRyYW5zZm9ybShhdHRyaWJ1dGVzLmdyYWRp
ZW50VHJhbnNmb3JtKCkpOwogICAgIHJhZGlhbEdyYWRpZW50LT5zZXRHcmFkaWVudENlbnRlcihj
ZW50ZXJQb2ludCk7CiAgICAgcmFkaWFsR3JhZGllbnQtPnNldEdyYWRpZW50Rm9jYWwoZm9jYWxQ
b2ludCk7CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdy
YWRpZW50LmNwcAkocmV2aXNpb24gMzk4MzEpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQ
YWludFNlcnZlckdyYWRpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsOCArNzYsNyBAQCBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjCiB9CiAKIFNWR1BhaW50U2Vy
dmVyR3JhZGllbnQ6OlNWR1BhaW50U2VydmVyR3JhZGllbnQoY29uc3QgU1ZHR3JhZGllbnRFbGVt
ZW50KiBvd25lcikKLSAgICA6IG1fc3ByZWFkTWV0aG9kKFNwcmVhZE1ldGhvZFBhZCkKLSAgICAs
IG1fYm91bmRpbmdCb3hNb2RlKHRydWUpCisgICAgOiBtX2JvdW5kaW5nQm94TW9kZSh0cnVlKQog
ICAgICwgbV9vd25lckVsZW1lbnQob3duZXIpCiAKICNpZiBQTEFURk9STShDRykKQEAgLTEwMiwx
NiArMTAxLDYgQEAgdm9pZCBTVkdQYWludFNlcnZlckdyYWRpZW50OjpzZXRHcmFkaWVudAogICAg
IG1fZ3JhZGllbnQgPSBncmFkaWVudDsKIH0KIAotR3JhZGllbnRTcHJlYWRNZXRob2QgU1ZHUGFp
bnRTZXJ2ZXJHcmFkaWVudDo6c3ByZWFkTWV0aG9kKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9z
cHJlYWRNZXRob2Q7Ci19Ci0KLXZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0R3JhZGll
bnRTcHJlYWRNZXRob2QoY29uc3QgR3JhZGllbnRTcHJlYWRNZXRob2QmIG1ldGhvZCkKLXsKLSAg
ICBtX3NwcmVhZE1ldGhvZCA9IG1ldGhvZDsKLX0KLQogYm9vbCBTVkdQYWludFNlcnZlckdyYWRp
ZW50Ojpib3VuZGluZ0JveE1vZGUoKSBjb25zdAogewogICAgIHJldHVybiBtX2JvdW5kaW5nQm94
TW9kZTsKQEAgLTI1Miw3ICsyNDEsNiBAQCBib29sIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnNl
dHVwKEdyYXBoCiAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcyhzdHJva2VUaGlj
a25lc3MpOwogICAgIH0KICAgICBjb250ZXh0LT5jb25jYXRDVE0oZ3JhZGllbnRUcmFuc2Zvcm0o
KSk7Ci0gICAgY29udGV4dC0+c2V0U3ByZWFkTWV0aG9kKHNwcmVhZE1ldGhvZCgpKTsKIAogICAg
IHJldHVybiB0cnVlOwogfQpAQCAtMjk1LDggKzI4Myw4IEBAIFRleHRTdHJlYW0mIFNWR1BhaW50
U2VydmVyR3JhZGllbnQ6OmV4dGUKIAogICAgIC8vIGFic3RyYWN0LCBkb24ndCBzdHJlYW0gdHlw
ZQogICAgIHRzICA8PCAiW3N0b3BzPSIgPDwgZ3JhZGllbnRTdG9wcygpIDw8ICJdIjsKLSAgICBp
ZiAoc3ByZWFkTWV0aG9kKCkgIT0gU3ByZWFkTWV0aG9kUGFkKQotICAgICAgICB0cyA8PCAiW21l
dGhvZD0iIDw8IHNwcmVhZE1ldGhvZCgpIDw8ICJdIjsKKyAgICBpZiAobV9ncmFkaWVudC0+c3By
ZWFkTWV0aG9kKCkgIT0gU3ByZWFkTWV0aG9kUGFkKQorICAgICAgICB0cyA8PCAiW21ldGhvZD0i
IDw8IG1fZ3JhZGllbnQtPnNwcmVhZE1ldGhvZCgpIDw8ICJdIjsKICAgICBpZiAoIWJvdW5kaW5n
Qm94TW9kZSgpKQogICAgICAgICB0cyA8PCAiIFtib3VuZGluZyBib3ggbW9kZT0iIDw8IGJvdW5k
aW5nQm94TW9kZSgpIDw8ICJdIjsKICAgICBpZiAoIWdyYWRpZW50VHJhbnNmb3JtKCkuaXNJZGVu
dGl0eSgpKQpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyR3Jh
ZGllbnQuaAkocmV2aXNpb24gMzk4MzEpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWlu
dFNlcnZlckdyYWRpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDkgKzUyLDYgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNldEdyYWRpZW50KFBhc3NSZWZQdHI8R3JhZGll
bnQ+KTsKICAgICAgICAgR3JhZGllbnQqIGdyYWRpZW50KCkgY29uc3Q7CiAKLSAgICAgICAgR3Jh
ZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0
R3JhZGllbnRTcHJlYWRNZXRob2QoY29uc3QgR3JhZGllbnRTcHJlYWRNZXRob2QmKTsKLQogICAg
ICAgICAvLyBHcmFkaWVudCBzdGFydCBhbmQgZW5kIHBvaW50cyBhcmUgcGVyY2VudGFnZXMgd2hl
biB1c2VkIGluIGJvdW5kaW5nQm94IG1vZGUuCiAgICAgICAgIC8vIEZvciBpbnN0YW5jZSBzdGFy
dCBwb2ludCB3aXRoIHZhbHVlICgwLDApIGlzIHRvcC1sZWZ0IGFuZCBlbmQgcG9pbnQgd2l0aAog
ICAgICAgICAvLyB2YWx1ZSAoMTAwLCAxMDApIGlzIGJvdHRvbS1yaWdodC4gQm91bmRpbmdCb3gg
bW9kZSBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCkBAIC03OSw3ICs3Niw2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICBwcml2YXRlOgogICAgICAgICBWZWN0b3I8U1ZHR3JhZGllbnRTdG9wPiBt
X3N0b3BzOwogICAgICAgICBSZWZQdHI8R3JhZGllbnQ+IG1fZ3JhZGllbnQ7Ci0gICAgICAgIEdy
YWRpZW50U3ByZWFkTWV0aG9kIG1fc3ByZWFkTWV0aG9kOwogICAgICAgICBib29sIG1fYm91bmRp
bmdCb3hNb2RlOwogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2dyYWRpZW50VHJhbnNm
b3JtOwogICAgICAgICBjb25zdCBTVkdHcmFkaWVudEVsZW1lbnQqIG1fb3duZXJFbGVtZW50Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26917</attachid>
            <date>2009-01-21 16:47:29 -0800</date>
            <delta_ts>2009-01-21 17:04:37 -0800</delta_ts>
            <desc>try5</desc>
            <filename>grad-spread.diff</filename>
            <type>text/plain</type>
            <size>18047</size>
            <attacher name="Evan Stade">estade</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDEwMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDIgQEAKKzIwMDktMDEtMjEgIEV2YW4gU3RhZGUgIDxlc3RhZGVAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1h
a2Ugc3ByZWFkTWV0aG9kIGEgbWVtYmVyIG9mIEdyYWRpZW50IHJhdGhlciB0aGFuIEdyYXBoaWNz
Q29udGV4dC4KKyAgICAgICAgSW1wbGVtZW50IHNwcmVhZE1ldGhvZCBmb3IgU2tpYS4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYWRpZW50OjpHcmFkaWVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGll
bnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpzZXRTcHJlYWRNZXRob2QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnNwcmVhZE1ldGhvZCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHRQcml2YXRlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NUeXBlcy5oOgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50
OjpwbGF0Zm9ybUdyYWRpZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFwaGljc0NvbnRleHRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tl
UGF0aCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhZGllbnRRdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6cGxhdGZvcm1HcmFkaWVudCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnN0cm9rZVBhdGgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvR3JhZGllbnRTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpwbGF0Zm9y
bUdyYWRpZW50KToKKyAgICAgICAgKiBzdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6YnVpbGRHcmFkaWVu
dCk6CisgICAgICAgICogc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OmJ1aWxkR3JhZGllbnQpOgorICAg
ICAgICAqIHN2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhaW50U2VydmVyR3JhZGllbnQ6OlNWR1BhaW50U2VydmVyR3JhZGllbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0dXApOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbik6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyR3JhZGllbnQuaDoK
KwogMjAwOS0wMS0yMSAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgSnVzdGluIEdhcmNpYS4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhZGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhZGllbnQuY3BwCShyZXZpc2lvbiAzOTgzMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhZGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBAIEdyYWRpZW50
OjpHcmFkaWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwKICAgICAsIG1fcjEoMCkKICAgICAsIG1f
c3RvcHNTb3J0ZWQoZmFsc2UpCiAgICAgLCBtX2xhc3RTdG9wKDApCisgICAgLCBtX3NwcmVhZE1l
dGhvZChTcHJlYWRNZXRob2RQYWQpCiB7CiAgICAgcGxhdGZvcm1Jbml0KCk7CiB9CkBAIC0xNDYs
NCArMTQ3LDExIEBAIGludCBHcmFkaWVudDo6ZmluZFN0b3AoZmxvYXQgdmFsdWUpIGNvbnMKICAg
ICByZXR1cm4gbV9sYXN0U3RvcDsKIH0KIAorR3JhZGllbnRTcHJlYWRNZXRob2QgR3JhZGllbnQ6
OnNldFNwcmVhZE1ldGhvZChHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRob2QpCit7Cisg
ICAgLy8gRklYTUU6IFNob3VsZCBpdCBiZWNvbWUgbmVjZXNzYXJ5LCBhbGxvdyBjYWxscyB0byB0
aGlzIG1ldGhvZCBhZnRlciBtX2dyYWRpZW50IGhhcyBiZWVuIHNldC4KKyAgICBBU1NFUlQobV9n
cmFkaWVudCA9PSAwKTsKKyAgICBtX3NwcmVhZE1ldGhvZCA9IHNwcmVhZE1ldGhvZDsKK30KKwog
fSAvL25hbWVzcGFjZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaAkocmV2
aXNpb24gMzk4MzEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIK
ICNpbmNsdWRlICJHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCiAjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTg2
LDYgKzg3LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkIHNldFN0b3Bz
U29ydGVkKGJvb2wgcykgeyBtX3N0b3BzU29ydGVkID0gczsgfQogCisgICAgICAgIHZvaWQgc2V0
U3ByZWFkTWV0aG9kKEdyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCk7CisKKyAgICAg
ICAgR3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kKCkgeyByZXR1cm4gbV9zcHJlYWRN
ZXRob2Q7IH0KKwogICAgICAgICB2aXJ0dWFsIHZvaWQgZmlsbChHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBGbG9hdFJlY3QmKTsKIAogICAgIHByaXZhdGU6CkBAIC0xMDUsNiArMTEwLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBtdXRhYmxlIFZlY3RvcjxDb2xvclN0b3A+IG1fc3Rv
cHM7CiAgICAgICAgIG11dGFibGUgYm9vbCBtX3N0b3BzU29ydGVkOwogICAgICAgICBtdXRhYmxl
IGludCBtX2xhc3RTdG9wOworICAgICAgICBHcmFkaWVudFNwcmVhZE1ldGhvZCBtX3NwcmVhZE1l
dGhvZDsKIAogICAgICAgICBQbGF0Zm9ybUdyYWRpZW50IG1fZ3JhZGllbnQ7CiAgICAgfTsKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHJl
dmlzaW9uIDM5ODMxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODksMTYgKzE4OSw2IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRGaWxsUnVsZShXaW5kUnUKICAgICBtX2NvbW1vbi0+c3RhdGUuZmlsbFJ1bGUg
PSBmaWxsUnVsZTsKIH0KIAotR3JhZGllbnRTcHJlYWRNZXRob2QgR3JhcGhpY3NDb250ZXh0Ojpz
cHJlYWRNZXRob2QoKSBjb25zdAotewotICAgIHJldHVybiBtX2NvbW1vbi0+c3RhdGUuc3ByZWFk
TWV0aG9kOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3ByZWFkTWV0aG9kKEdyYWRp
ZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCkKLXsKLSAgICBtX2NvbW1vbi0+c3RhdGUuc3By
ZWFkTWV0aG9kID0gc3ByZWFkTWV0aG9kOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
RmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBtX2NvbW1vbi0+c3RhdGUuZmls
bENvbG9yU3BhY2UgPSBTb2xpZENvbG9yU3BhY2U7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDM5ODMxKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMTI1
LDE0ICsxMjUsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEludGVycG9sYXRpb25I
aWdoCiAgICAgfTsKIAotICAgIC8vIEZJWE1FOiBDdXJyZW50bHkgdGhlc2UgY29uc3RhbnRzIGhh
dmUgdG8gbWF0Y2ggdGhlIHZhbHVlcyB1c2VkIGluIHRoZSBTVkcKLSAgICAvLyBET00gQVBJLiBU
aGF0J3MgYSBtaXN0YWtlLiBXZSBuZWVkIHRvIG1ha2UgY3V0IHRoYXQgZGVwZW5kZW5jeS4KLSAg
ICBlbnVtIEdyYWRpZW50U3ByZWFkTWV0aG9kIHsKLSAgICAgICAgU3ByZWFkTWV0aG9kUGFkID0g
MSwKLSAgICAgICAgU3ByZWFkTWV0aG9kUmVmbGVjdCA9IDIsCi0gICAgICAgIFNwcmVhZE1ldGhv
ZFJlcGVhdCA9IDMKLSAgICB9OwotCiAgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0IDogTm9uY29w
eWFibGUgewogICAgIHB1YmxpYzoKICAgICAgICAgR3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0Kik7CkBAIC0xNTQsOCArMTQ2LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgICAgIFdpbmRSdWxlIGZpbGxSdWxlKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0Rmls
bFJ1bGUoV2luZFJ1bGUpOwotICAgICAgICBHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRo
b2QoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRTcHJlYWRNZXRob2QoR3JhZGllbnRTcHJlYWRN
ZXRob2QpOwogICAgICAgICBDb2xvciBmaWxsQ29sb3IoKSBjb25zdDsKICAgICAgICAgdm9pZCBz
ZXRGaWxsQ29sb3IoY29uc3QgQ29sb3ImKTsKICAgICAgICAgdm9pZCBzZXRGaWxsUGF0dGVybihQ
YXNzUmVmUHRyPFBhdHRlcm4+KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oCShyZXZpc2lvbiAzOTgzMSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC04MSw3ICs4MSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUmVmUHRy
PFBhdHRlcm4+IHN0cm9rZVBhdHRlcm47CiAgICAgICAgIAogICAgICAgICBXaW5kUnVsZSBmaWxs
UnVsZTsKLSAgICAgICAgR3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kOwogICAgICAg
ICBDb2xvclNwYWNlIGZpbGxDb2xvclNwYWNlOwogICAgICAgICBDb2xvciBmaWxsQ29sb3I7CiAg
ICAgICAgIFJlZlB0cjxHcmFkaWVudD4gZmlsbEdyYWRpZW50OwpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgJKHJldmlzaW9uIDM5ODMxKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUw
LDYgKzUwLDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgQ29tcG9zaXRlUGx1c0xp
Z2h0ZXIKICAgICB9OwogCisgICAgLy8gRklYTUU6IEN1cnJlbnRseSB0aGVzZSBjb25zdGFudHMg
aGF2ZSB0byBtYXRjaCB0aGUgdmFsdWVzIHVzZWQgaW4gdGhlIFNWRworICAgIC8vIERPTSBBUEku
IFRoYXQncyBhIG1pc3Rha2UuIFdlIG5lZWQgdG8gbWFrZSBjdXQgdGhhdCBkZXBlbmRlbmN5Lgor
ICAgIGVudW0gR3JhZGllbnRTcHJlYWRNZXRob2QgeworICAgICAgICBTcHJlYWRNZXRob2RQYWQg
PSAxLAorICAgICAgICBTcHJlYWRNZXRob2RSZWZsZWN0ID0gMiwKKyAgICAgICAgU3ByZWFkTWV0
aG9kUmVwZWF0ID0gMworICAgIH07CisKICAgICBlbnVtIExpbmVDYXAgeyBCdXR0Q2FwLCBSb3Vu
ZENhcCwgU3F1YXJlQ2FwIH07CiAKICAgICBlbnVtIExpbmVKb2luIHsgTWl0ZXJKb2luLCBSb3Vu
ZEpvaW4sIEJldmVsSm9pbiB9OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFkaWVudENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCShyZXZpc2lvbiAzOTgzMSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU3LDYgKzU3LDE4IEBAIGNhaXJvX3BhdHRlcm5fdCogR3JhZGllbnQ6OnBsYXRmb3JtR3Jh
ZGkKICAgICAgICAgKytzdG9wSXRlcmF0b3I7CiAgICAgfQogCisgICAgc3dpdGNoIChtX3NwcmVh
ZE1ldGhvZCkgeworICAgIGNhc2UgU3ByZWFkTWV0aG9kUGFkOgorICAgICAgICBjYWlyb19wYXR0
ZXJuX3NldF9leHRlbmQobV9ncmFkaWVudCwgQ0FJUk9fRVhURU5EX1BBRCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgU3ByZWFkTWV0aG9kUmVmbGVjdDoKKyAgICAgICAgY2Fpcm9fcGF0dGVy
bl9zZXRfZXh0ZW5kKG1fZ3JhZGllbnQsIENBSVJPX0VYVEVORF9SRUZMRUNUKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBTcHJlYWRNZXRob2RSZXBlYXQ6CisgICAgICAgIGNhaXJvX3BhdHRl
cm5fc2V0X2V4dGVuZChtX2dyYWRpZW50LCBDQUlST19FWFRFTkRfUkVQRUFUKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCiAgICAgcmV0dXJuIG1fZ3JhZGllbnQ7CiB9CiAKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
Q2Fpcm8uY3BwCShyZXZpc2lvbiAzOTgzMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NywyMiAr
ODcsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmlsbFJlY3RTb3VyY2VPdmVyKGNhCiAgICAgY2Fp
cm9fZmlsbChjcik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgY2Fpcm9fcGF0dGVybl90KiBhcHBseVNw
cmVhZE1ldGhvZChjYWlyb19wYXR0ZXJuX3QqIHBhdHRlcm4sIEdyYWRpZW50U3ByZWFkTWV0aG9k
IHNwcmVhZE1ldGhvZCkKLXsKLSAgICBzd2l0Y2ggKHNwcmVhZE1ldGhvZCkgewotICAgICAgICBj
YXNlIFNwcmVhZE1ldGhvZFBhZDoKLSAgICAgICAgICAgY2Fpcm9fcGF0dGVybl9zZXRfZXh0ZW5k
KHBhdHRlcm4sIENBSVJPX0VYVEVORF9QQUQpOwotICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBTcHJlYWRNZXRob2RSZWZsZWN0OgotICAgICAgICAgICAgY2Fpcm9fcGF0dGVybl9zZXRf
ZXh0ZW5kKHBhdHRlcm4sIENBSVJPX0VYVEVORF9SRUZMRUNUKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIFNwcmVhZE1ldGhvZFJlcGVhdDoKLSAgICAgICAgICAgIGNhaXJvX3Bh
dHRlcm5fc2V0X2V4dGVuZChwYXR0ZXJuLCBDQUlST19FWFRFTkRfUkVQRUFUKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gcGF0dGVybjsKLX0KLQogR3JhcGhpY3NDb250
ZXh0OjpHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGNyKQogICAgIDog
bV9jb21tb24oY3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpKQogICAgICwgbV9kYXRhKG5l
dyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUpCkBAIC00NjMsNyArNDQ3LDYgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKCkKICAgICB9CiAgICAgY2FzZSBHcmFkaWVudENv
bG9yU3BhY2U6CiAgICAgICAgIGNhaXJvX3BhdHRlcm5fdCogcGF0dGVybiA9IG1fY29tbW9uLT5z
dGF0ZS5maWxsR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKTsKLSAgICAgICAgcGF0dGVybiA9
IGFwcGx5U3ByZWFkTWV0aG9kKHBhdHRlcm4sIHNwcmVhZE1ldGhvZCgpKTsKICAgICAgICAgY2Fp
cm9fc2V0X3NvdXJjZShjciwgcGF0dGVybik7CiAgICAgICAgIGNhaXJvX2NsaXAoY3IpOwogICAg
ICAgICBjYWlyb19wYWludF93aXRoX2FscGhhKGNyLCBtX2NvbW1vbi0+c3RhdGUuZ2xvYmFsQWxw
aGEpOwpAQCAtNTAxLDcgKzQ4NCw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRo
KCkKICAgICB9CiAgICAgY2FzZSBHcmFkaWVudENvbG9yU3BhY2U6CiAgICAgICAgIGNhaXJvX3Bh
dHRlcm5fdCogcGF0dGVybiA9IG1fY29tbW9uLT5zdGF0ZS5zdHJva2VHcmFkaWVudC0+cGxhdGZv
cm1HcmFkaWVudCgpOwotICAgICAgICBwYXR0ZXJuID0gYXBwbHlTcHJlYWRNZXRob2QocGF0dGVy
biwgc3ByZWFkTWV0aG9kKCkpOwogICAgICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBwYXR0ZXJu
KTsKICAgICAgICAgaWYgKG1fY29tbW9uLT5zdGF0ZS5nbG9iYWxBbHBoYSA8IDEuMGYpIHsKICAg
ICAgICAgICAgIGNhaXJvX3B1c2hfZ3JvdXAoY3IpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9HcmFkaWVudFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0dyYWRpZW50UXQuY3BwCShyZXZpc2lvbiAzOTgzMSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhZGllbnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2
LDYgKzY2LDE4IEBAIFFHcmFkaWVudCogR3JhZGllbnQ6OnBsYXRmb3JtR3JhZGllbnQoKQogICAg
ICAgICArK3N0b3BJdGVyYXRvcjsKICAgICB9CiAKKyAgICBzd2l0Y2gobV9zcHJlYWRNZXRob2Qp
IHsKKyAgICBjYXNlIFNwcmVhZE1ldGhvZFBhZDoKKyAgICAgICAgbV9ncmFkaWVudC0+c2V0U3By
ZWFkKFFHcmFkaWVudDo6UGFkU3ByZWFkKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTcHJl
YWRNZXRob2RSZWZsZWN0OgorICAgICAgICBtX2dyYWRpZW50LT5zZXRTcHJlYWQoUUdyYWRpZW50
OjpSZWZsZWN0U3ByZWFkKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTcHJlYWRNZXRob2RS
ZXBlYXQ6CisgICAgICAgIG1fZ3JhZGllbnQtPnNldFNwcmVhZChRR3JhZGllbnQ6OlJlcGVhdFNw
cmVhZCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIHJldHVybiBtX2dyYWRpZW50Owog
fQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNz
Q29udGV4dFF0LmNwcAkocmV2aXNpb24gMzk4MzEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDIyICsx
NTIsNiBAQCBzdGF0aWMgUXQ6OlBlblN0eWxlIHRvUVBlblN0eWxlKFN0cm9rZVN0CiAgICAgcmV0
dXJuIFF0OjpOb1BlbjsKIH0KIAotc3RhdGljIGlubGluZSBRR3JhZGllbnQgYXBwbHlTcHJlYWRN
ZXRob2QoUUdyYWRpZW50IGdyYWRpZW50LCBHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRo
b2QpCi17Ci0gICAgc3dpdGNoIChzcHJlYWRNZXRob2QpIHsKLSAgICAgICAgY2FzZSBTcHJlYWRN
ZXRob2RQYWQ6Ci0gICAgICAgICAgICBncmFkaWVudC5zZXRTcHJlYWQoUUdyYWRpZW50OjpQYWRT
cHJlYWQpOwotICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTcHJlYWRNZXRob2RSZWZs
ZWN0OgotICAgICAgICAgICAgZ3JhZGllbnQuc2V0U3ByZWFkKFFHcmFkaWVudDo6UmVmbGVjdFNw
cmVhZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTcHJlYWRNZXRob2RSZXBl
YXQ6Ci0gICAgICAgICAgICBncmFkaWVudC5zZXRTcHJlYWQoUUdyYWRpZW50OjpSZXBlYXRTcHJl
YWQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBncmFkaWVudDsKLX0K
LQogc3RydWN0IFRyYW5zcGFyZW5jeUxheWVyCiB7CiAgICAgVHJhbnNwYXJlbmN5TGF5ZXIoY29u
c3QgUVBhaW50ZXIqIHAsIGNvbnN0IFFSZWN0ICZyZWN0KQpAQCAtNTU0LDcgKzUzOCw2IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCgpCiAgICAgfQogICAgIGNhc2UgR3JhZGllbnRD
b2xvclNwYWNlOgogICAgICAgICBRR3JhZGllbnQqIGdyYWRpZW50ID0gbV9jb21tb24tPnN0YXRl
LmZpbGxHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpOwotICAgICAgICAqZ3JhZGllbnQgPSBh
cHBseVNwcmVhZE1ldGhvZCgqZ3JhZGllbnQsIHNwcmVhZE1ldGhvZCgpKTsgIAogICAgICAgICBw
LT5maWxsUGF0aChwYXRoLCBRQnJ1c2goKmdyYWRpZW50KSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KQEAgLTU4NCw3ICs1NjcsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCgp
CiAgICAgfQogICAgIGNhc2UgR3JhZGllbnRDb2xvclNwYWNlOiB7CiAgICAgICAgIFFHcmFkaWVu
dCogZ3JhZGllbnQgPSBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBsYXRmb3JtR3Jh
ZGllbnQoKTsKLSAgICAgICAgKmdyYWRpZW50ID0gYXBwbHlTcHJlYWRNZXRob2QoKmdyYWRpZW50
LCBzcHJlYWRNZXRob2QoKSk7IAogICAgICAgICBwZW4uc2V0QnJ1c2goUUJydXNoKCpncmFkaWVu
dCkpOwogICAgICAgICBwLT5zZXRQZW4ocGVuKTsKICAgICAgICAgcC0+c3Ryb2tlUGF0aChwYXRo
LCBwZW4pOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYWRpZW50U2tp
YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYWRp
ZW50U2tpYS5jcHAJKHJldmlzaW9uIDM5ODMyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0dyYWRpZW50U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNiw2ICsxMzYsMTkg
QEAgU2tTaGFkZXIqIEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50KCkKIAogICAgIGZpbGxTdG9w
cyhtX3N0b3BzLmRhdGEoKSwgbV9zdG9wcy5zaXplKCksIHBvcywgY29sb3JzKTsKIAorICAgIFNr
U2hhZGVyOjpUaWxlTW9kZSB0aWxlID0gU2tTaGFkZXI6OmtDbGFtcF9UaWxlTW9kZTsKKyAgICBz
d2l0Y2ggKG1fc3ByZWFkTWV0aG9kKSB7CisgICAgY2FzZSBTcHJlYWRNZXRob2RSZWZsZWN0Ogor
ICAgICAgICB0aWxlID0gU2tTaGFkZXI6OmtNaXJyb3JfVGlsZU1vZGU7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgU3ByZWFkTWV0aG9kUmVwZWF0OgorICAgICAgICB0aWxlID0gU2tTaGFkZXI6
OmtSZXBlYXRfVGlsZU1vZGU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU3ByZWFkTWV0aG9k
UGFkOgorICAgICAgICB0aWxlID0gU2tTaGFkZXI6OmtDbGFtcF9UaWxlTW9kZTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCiAgICAgaWYgKG1fcmFkaWFsKSB7CiAgICAgICAgIC8vIEZJWE1FOiBD
U1MgcmFkaWFsIEdyYWRpZW50cyBhbGxvdyBhbiBvZmZzZXQgZm9jYWwgcG9pbnQgKHRoZQogICAg
ICAgICAvLyAic3RhcnQgY2lyY2xlIiksIGJ1dCBza2lhIGRvZXNuJ3Qgc2VlbSB0byBzdXBwb3J0
IHRoYXQsIHNvIHRoaXMganVzdApAQCAtMTQ1LDExICsxNTgsMTEgQEAgU2tTaGFkZXIqIEdyYWRp
ZW50OjpwbGF0Zm9ybUdyYWRpZW50KCkKICAgICAgICAgLy8gZGVzY3JpcHRpb24gb2YgdGhlIGV4
cGVjdGVkIGJlaGF2aW9yLgogICAgICAgICBtX2dyYWRpZW50ID0gU2tHcmFkaWVudFNoYWRlcjo6
Q3JlYXRlUmFkaWFsKG1fcDEsCiAgICAgICAgICAgICBXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKG1f
cjEpLCBjb2xvcnMsIHBvcywKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4oY291bnRVc2Vk
KSwgU2tTaGFkZXI6OmtDbGFtcF9UaWxlTW9kZSk7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQ+KGNvdW50VXNlZCksIHRpbGUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFNrUG9pbnQgcHRz
WzJdID0geyBtX3AwLCBtX3AxIH07CiAgICAgICAgIG1fZ3JhZGllbnQgPSBTa0dyYWRpZW50U2hh
ZGVyOjpDcmVhdGVMaW5lYXIocHRzLCBjb2xvcnMsIHBvcywKLSAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludD4oY291bnRVc2VkKSwgU2tTaGFkZXI6OmtDbGFtcF9UaWxlTW9kZSk7CisgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQ+KGNvdW50VXNlZCksIHRpbGUpOwogICAgIH0KIAogICAgIHJl
dHVybiBtX2dyYWRpZW50OwpJbmRleDogV2ViQ29yZS9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1l
bnQuY3BwCShyZXZpc2lvbiAzOTgzMSkKKysrIFdlYkNvcmUvc3ZnL1NWR0xpbmVhckdyYWRpZW50
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAgdm9pZCBTVkdMaW5l
YXJHcmFkaWVudEVsZW1lbnQ6OmJ1aWxkR3JhZAogICAgIEZsb2F0UG9pbnQgZW5kUG9pbnQgPSBG
bG9hdFBvaW50OjpuYXJyb3dQcmVjaXNpb24oYXR0cmlidXRlcy54MigpLCBhdHRyaWJ1dGVzLnky
KCkpOwogCiAgICAgUmVmUHRyPEdyYWRpZW50PiBncmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUo
c3RhcnRQb2ludCwgZW5kUG9pbnQpOworICAgIGdyYWRpZW50LT5zZXRTcHJlYWRNZXRob2QoYXR0
cmlidXRlcy5zcHJlYWRNZXRob2QoKSk7CiAKICAgICBWZWN0b3I8U1ZHR3JhZGllbnRTdG9wPiBt
X3N0b3BzID0gYXR0cmlidXRlcy5zdG9wcygpOwogICAgIGZsb2F0IHByZXZpb3VzT2Zmc2V0ID0g
MC4wZjsKQEAgLTEwNyw3ICsxMDgsNiBAQCB2b2lkIFNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6
YnVpbGRHcmFkCiAgICAgbGluZWFyR3JhZGllbnQtPnNldEdyYWRpZW50U3RvcHMoYXR0cmlidXRl
cy5zdG9wcygpKTsKIAogICAgIC8vIFRoZXNlIHNob3VsZCBwb3NzaWJseSBiZSBzdXBwb3J0ZWQg
b24gR3JhZGllbnQKLSAgICBsaW5lYXJHcmFkaWVudC0+c2V0R3JhZGllbnRTcHJlYWRNZXRob2Qo
YXR0cmlidXRlcy5zcHJlYWRNZXRob2QoKSk7CiAgICAgbGluZWFyR3JhZGllbnQtPnNldEdyYWRp
ZW50VHJhbnNmb3JtKGF0dHJpYnV0ZXMuZ3JhZGllbnRUcmFuc2Zvcm0oKSk7CiAgICAgbGluZWFy
R3JhZGllbnQtPnNldEdyYWRpZW50U3RhcnQoc3RhcnRQb2ludCk7CiAgICAgbGluZWFyR3JhZGll
bnQtPnNldEdyYWRpZW50RW5kKGVuZFBvaW50KTsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1JhZGlh
bEdyYWRpZW50RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHUmFkaWFs
R3JhZGllbnRFbGVtZW50LmNwcAkocmV2aXNpb24gMzk4MzEpCisrKyBXZWJDb3JlL3N2Zy9TVkdS
YWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNiArMTE0LDcg
QEAgdm9pZCBTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OmJ1aWxkR3JhZAogICAgICAgICAwLmYs
IC8vIFNWRyBkb2VzIG5vdCBzdXBwb3J0IGEgImZvY3VzIHJhZGl1cyIKICAgICAgICAgY2VudGVy
UG9pbnQsCiAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoYXR0cmlidXRlcy5yKCkpKTsK
KyAgICBncmFkaWVudC0+c2V0U3ByZWFkTWV0aG9kKGF0dHJpYnV0ZXMuc3ByZWFkTWV0aG9kKCkp
OwogCiAgICAgVmVjdG9yPFNWR0dyYWRpZW50U3RvcD4gc3RvcHMgPSBhdHRyaWJ1dGVzLnN0b3Bz
KCk7CiAgICAgZmxvYXQgcHJldmlvdXNPZmZzZXQgPSAwLjBmOwpAQCAtMTI5LDcgKzEzMCw2IEBA
IHZvaWQgU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpidWlsZEdyYWQKICAgICAgICAgcmV0dXJu
OwogCiAgICAgcmFkaWFsR3JhZGllbnQtPnNldEJvdW5kaW5nQm94TW9kZShhdHRyaWJ1dGVzLmJv
dW5kaW5nQm94TW9kZSgpKTsKLSAgICByYWRpYWxHcmFkaWVudC0+c2V0R3JhZGllbnRTcHJlYWRN
ZXRob2QoYXR0cmlidXRlcy5zcHJlYWRNZXRob2QoKSk7IAogICAgIHJhZGlhbEdyYWRpZW50LT5z
ZXRHcmFkaWVudFRyYW5zZm9ybShhdHRyaWJ1dGVzLmdyYWRpZW50VHJhbnNmb3JtKCkpOwogICAg
IHJhZGlhbEdyYWRpZW50LT5zZXRHcmFkaWVudENlbnRlcihjZW50ZXJQb2ludCk7CiAgICAgcmFk
aWFsR3JhZGllbnQtPnNldEdyYWRpZW50Rm9jYWwoZm9jYWxQb2ludCk7CkluZGV4OiBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50LmNwcAkocmV2aXNpb24g
Mzk4MzEpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzYsOCArNzYsNyBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjCiB9CiAKIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OlNWR1BhaW50
U2VydmVyR3JhZGllbnQoY29uc3QgU1ZHR3JhZGllbnRFbGVtZW50KiBvd25lcikKLSAgICA6IG1f
c3ByZWFkTWV0aG9kKFNwcmVhZE1ldGhvZFBhZCkKLSAgICAsIG1fYm91bmRpbmdCb3hNb2RlKHRy
dWUpCisgICAgOiBtX2JvdW5kaW5nQm94TW9kZSh0cnVlKQogICAgICwgbV9vd25lckVsZW1lbnQo
b3duZXIpCiAKICNpZiBQTEFURk9STShDRykKQEAgLTEwMiwxNiArMTAxLDYgQEAgdm9pZCBTVkdQ
YWludFNlcnZlckdyYWRpZW50OjpzZXRHcmFkaWVudAogICAgIG1fZ3JhZGllbnQgPSBncmFkaWVu
dDsKIH0KIAotR3JhZGllbnRTcHJlYWRNZXRob2QgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c3By
ZWFkTWV0aG9kKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zcHJlYWRNZXRob2Q7Ci19Ci0KLXZv
aWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0R3JhZGllbnRTcHJlYWRNZXRob2QoY29uc3Qg
R3JhZGllbnRTcHJlYWRNZXRob2QmIG1ldGhvZCkKLXsKLSAgICBtX3NwcmVhZE1ldGhvZCA9IG1l
dGhvZDsKLX0KLQogYm9vbCBTVkdQYWludFNlcnZlckdyYWRpZW50Ojpib3VuZGluZ0JveE1vZGUo
KSBjb25zdAogewogICAgIHJldHVybiBtX2JvdW5kaW5nQm94TW9kZTsKQEAgLTI1Miw3ICsyNDEs
NiBAQCBib29sIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnNldHVwKEdyYXBoCiAgICAgICAgIGNv
bnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcyhzdHJva2VUaGlja25lc3MpOwogICAgIH0KICAgICBj
b250ZXh0LT5jb25jYXRDVE0oZ3JhZGllbnRUcmFuc2Zvcm0oKSk7Ci0gICAgY29udGV4dC0+c2V0
U3ByZWFkTWV0aG9kKHNwcmVhZE1ldGhvZCgpKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAt
Mjk1LDggKzI4Myw4IEBAIFRleHRTdHJlYW0mIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OmV4dGUK
IAogICAgIC8vIGFic3RyYWN0LCBkb24ndCBzdHJlYW0gdHlwZQogICAgIHRzICA8PCAiW3N0b3Bz
PSIgPDwgZ3JhZGllbnRTdG9wcygpIDw8ICJdIjsKLSAgICBpZiAoc3ByZWFkTWV0aG9kKCkgIT0g
U3ByZWFkTWV0aG9kUGFkKQotICAgICAgICB0cyA8PCAiW21ldGhvZD0iIDw8IHNwcmVhZE1ldGhv
ZCgpIDw8ICJdIjsKKyAgICBpZiAobV9ncmFkaWVudC0+c3ByZWFkTWV0aG9kKCkgIT0gU3ByZWFk
TWV0aG9kUGFkKQorICAgICAgICB0cyA8PCAiW21ldGhvZD0iIDw8IG1fZ3JhZGllbnQtPnNwcmVh
ZE1ldGhvZCgpIDw8ICJdIjsKICAgICBpZiAoIWJvdW5kaW5nQm94TW9kZSgpKQogICAgICAgICB0
cyA8PCAiIFtib3VuZGluZyBib3ggbW9kZT0iIDw8IGJvdW5kaW5nQm94TW9kZSgpIDw8ICJdIjsK
ICAgICBpZiAoIWdyYWRpZW50VHJhbnNmb3JtKCkuaXNJZGVudGl0eSgpKQpJbmRleDogV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyR3JhZGllbnQuaAkocmV2aXNpb24gMzk4
MzEpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTUyLDkgKzUyLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICB2b2lkIHNldEdyYWRpZW50KFBhc3NSZWZQdHI8R3JhZGllbnQ+KTsKICAgICAgICAgR3JhZGll
bnQqIGdyYWRpZW50KCkgY29uc3Q7CiAKLSAgICAgICAgR3JhZGllbnRTcHJlYWRNZXRob2Qgc3By
ZWFkTWV0aG9kKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0R3JhZGllbnRTcHJlYWRNZXRob2Qo
Y29uc3QgR3JhZGllbnRTcHJlYWRNZXRob2QmKTsKLQogICAgICAgICAvLyBHcmFkaWVudCBzdGFy
dCBhbmQgZW5kIHBvaW50cyBhcmUgcGVyY2VudGFnZXMgd2hlbiB1c2VkIGluIGJvdW5kaW5nQm94
IG1vZGUuCiAgICAgICAgIC8vIEZvciBpbnN0YW5jZSBzdGFydCBwb2ludCB3aXRoIHZhbHVlICgw
LDApIGlzIHRvcC1sZWZ0IGFuZCBlbmQgcG9pbnQgd2l0aAogICAgICAgICAvLyB2YWx1ZSAoMTAw
LCAxMDApIGlzIGJvdHRvbS1yaWdodC4gQm91bmRpbmdCb3ggbW9kZSBpcyBlbmFibGVkIGJ5IGRl
ZmF1bHQuCkBAIC03OSw3ICs3Niw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwcml2YXRl
OgogICAgICAgICBWZWN0b3I8U1ZHR3JhZGllbnRTdG9wPiBtX3N0b3BzOwogICAgICAgICBSZWZQ
dHI8R3JhZGllbnQ+IG1fZ3JhZGllbnQ7Ci0gICAgICAgIEdyYWRpZW50U3ByZWFkTWV0aG9kIG1f
c3ByZWFkTWV0aG9kOwogICAgICAgICBib29sIG1fYm91bmRpbmdCb3hNb2RlOwogICAgICAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2dyYWRpZW50VHJhbnNmb3JtOwogICAgICAgICBjb25zdCBT
VkdHcmFkaWVudEVsZW1lbnQqIG1fb3duZXJFbGVtZW50Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26918</attachid>
            <date>2009-01-21 17:04:37 -0800</date>
            <delta_ts>2009-01-22 21:12:22 -0800</delta_ts>
            <desc>try6</desc>
            <filename>grad-spread.diff</filename>
            <type>text/plain</type>
            <size>18201</size>
            <attacher name="Evan Stade">estade</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDEwNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDUgQEAKKzIwMDktMDEtMjEgIEV2YW4gU3RhZGUgIDxlc3RhZGVAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1
ZyAyMzQzNTogTWFrZSBTVkcgc3ByZWFkTWV0aG9kIGEgbWVtYmVyIG9mIEdyYWRpZW50IHJhdGhl
ciB0aGFuIEdyYXBoaWNzQ29udGV4dAorICAgICAgICA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzNDM1PgorCisgICAgICAgIE1ha2Ugc3ByZWFkTWV0aG9kIGEgbWVt
YmVyIG9mIEdyYWRpZW50IHJhdGhlciB0aGFuIEdyYXBoaWNzQ29udGV4dC4KKyAgICAgICAgSW1w
bGVtZW50IHNwcmVhZE1ldGhvZCBmb3IgU2tpYS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0dyYWRpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpHcmFkaWVudCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYWRpZW50OjpzZXRTcHJlYWRNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGll
bnQ6OnNwcmVhZE1ldGhvZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRQcml2YXRlLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oOgorICAgICAgICAo
V2ViQ29yZTo6KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENh
aXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvR3JhZGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFk
aWVudDo6cGxhdGZvcm1HcmFkaWVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
R3JhcGhpY3NDb250ZXh0UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBh
dGgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhZGllbnRTa2lhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50KToKKyAgICAgICAg
KiBzdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0xpbmVhckdyYWRpZW50RWxlbWVudDo6YnVpbGRHcmFkaWVudCk6CisgICAgICAgICogc3ZnL1NW
R1JhZGlhbEdyYWRpZW50RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSYWRpYWxH
cmFkaWVudEVsZW1lbnQ6OmJ1aWxkR3JhZGllbnQpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9T
VkdQYWludFNlcnZlckdyYWRpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2Vy
dmVyR3JhZGllbnQ6OlNWR1BhaW50U2VydmVyR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0dXApOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFp
bnRTZXJ2ZXJHcmFkaWVudDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbik6CisgICAgICAgICogc3Zn
L2dyYXBoaWNzL1NWR1BhaW50U2VydmVyR3JhZGllbnQuaDoKKwogMjAwOS0wMS0yMSAgQW5kZXJz
IENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNh
bSBXZWluaWcuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcAkocmV2
aXNpb24gMzk4MzEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQCBHcmFkaWVudDo6R3JhZGllbnQoY29uc3Qg
RmxvYXRQb2ludCYgcDAsCiAgICAgLCBtX3IxKDApCiAgICAgLCBtX3N0b3BzU29ydGVkKGZhbHNl
KQogICAgICwgbV9sYXN0U3RvcCgwKQorICAgICwgbV9zcHJlYWRNZXRob2QoU3ByZWFkTWV0aG9k
UGFkKQogewogICAgIHBsYXRmb3JtSW5pdCgpOwogfQpAQCAtMTQ2LDQgKzE0NywxMSBAQCBpbnQg
R3JhZGllbnQ6OmZpbmRTdG9wKGZsb2F0IHZhbHVlKSBjb25zCiAgICAgcmV0dXJuIG1fbGFzdFN0
b3A7CiB9CiAKK0dyYWRpZW50U3ByZWFkTWV0aG9kIEdyYWRpZW50OjpzZXRTcHJlYWRNZXRob2Qo
R3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kKQoreworICAgIC8vIEZJWE1FOiBTaG91
bGQgaXQgYmVjb21lIG5lY2Vzc2FyeSwgYWxsb3cgY2FsbHMgdG8gdGhpcyBtZXRob2QgYWZ0ZXIg
bV9ncmFkaWVudCBoYXMgYmVlbiBzZXQuCisgICAgQVNTRVJUKG1fZ3JhZGllbnQgPT0gMCk7Cisg
ICAgbV9zcHJlYWRNZXRob2QgPSBzcHJlYWRNZXRob2Q7Cit9CisKIH0gLy9uYW1lc3BhY2UKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgJKHJldmlzaW9uIDM5ODMxKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiR2VuZXJh
dG9yLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC04Niw2ICs4NywxMCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBzZXRTdG9wc1NvcnRlZChib29sIHMpIHsg
bV9zdG9wc1NvcnRlZCA9IHM7IH0KIAorICAgICAgICB2b2lkIHNldFNwcmVhZE1ldGhvZChHcmFk
aWVudFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRob2QpOworCisgICAgICAgIEdyYWRpZW50U3ByZWFk
TWV0aG9kIHNwcmVhZE1ldGhvZCgpIHsgcmV0dXJuIG1fc3ByZWFkTWV0aG9kOyB9CisKICAgICAg
ICAgdmlydHVhbCB2b2lkIGZpbGwoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0Jik7
CiAKICAgICBwcml2YXRlOgpAQCAtMTA1LDYgKzExMCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgbXV0YWJsZSBWZWN0b3I8Q29sb3JTdG9wPiBtX3N0b3BzOwogICAgICAgICBtdXRh
YmxlIGJvb2wgbV9zdG9wc1NvcnRlZDsKICAgICAgICAgbXV0YWJsZSBpbnQgbV9sYXN0U3RvcDsK
KyAgICAgICAgR3JhZGllbnRTcHJlYWRNZXRob2QgbV9zcHJlYWRNZXRob2Q7CiAKICAgICAgICAg
UGxhdGZvcm1HcmFkaWVudCBtX2dyYWRpZW50OwogICAgIH07CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCShyZXZpc2lvbiAzOTgzMSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTg5LDE2ICsxODksNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFJ1
bGUoV2luZFJ1CiAgICAgbV9jb21tb24tPnN0YXRlLmZpbGxSdWxlID0gZmlsbFJ1bGU7CiB9CiAK
LUdyYWRpZW50U3ByZWFkTWV0aG9kIEdyYXBoaWNzQ29udGV4dDo6c3ByZWFkTWV0aG9kKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9jb21tb24tPnN0YXRlLnNwcmVhZE1ldGhvZDsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFNwcmVhZE1ldGhvZChHcmFkaWVudFNwcmVhZE1ldGhvZCBz
cHJlYWRNZXRob2QpCi17Ci0gICAgbV9jb21tb24tPnN0YXRlLnNwcmVhZE1ldGhvZCA9IHNwcmVh
ZE1ldGhvZDsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxDb2xvcihjb25zdCBD
b2xvciYgY29sb3IpCiB7CiAgICAgbV9jb21tb24tPnN0YXRlLmZpbGxDb2xvclNwYWNlID0gU29s
aWRDb2xvclNwYWNlOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5oCShyZXZpc2lvbiAzOTgzMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNSwxNCArMTI1LDYgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBJbnRlcnBvbGF0aW9uSGlnaAogICAgIH07CiAKLSAg
ICAvLyBGSVhNRTogQ3VycmVudGx5IHRoZXNlIGNvbnN0YW50cyBoYXZlIHRvIG1hdGNoIHRoZSB2
YWx1ZXMgdXNlZCBpbiB0aGUgU1ZHCi0gICAgLy8gRE9NIEFQSS4gVGhhdCdzIGEgbWlzdGFrZS4g
V2UgbmVlZCB0byBtYWtlIGN1dCB0aGF0IGRlcGVuZGVuY3kuCi0gICAgZW51bSBHcmFkaWVudFNw
cmVhZE1ldGhvZCB7Ci0gICAgICAgIFNwcmVhZE1ldGhvZFBhZCA9IDEsCi0gICAgICAgIFNwcmVh
ZE1ldGhvZFJlZmxlY3QgPSAyLAotICAgICAgICBTcHJlYWRNZXRob2RSZXBlYXQgPSAzCi0gICAg
fTsKLQogICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dCA6IE5vbmNvcHlhYmxlIHsKICAgICBwdWJs
aWM6CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopOwpA
QCAtMTU0LDggKzE0Niw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBXaW5kUnVs
ZSBmaWxsUnVsZSgpIGNvbnN0OwogICAgICAgICB2b2lkIHNldEZpbGxSdWxlKFdpbmRSdWxlKTsK
LSAgICAgICAgR3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kKCkgY29uc3Q7Ci0gICAg
ICAgIHZvaWQgc2V0U3ByZWFkTWV0aG9kKEdyYWRpZW50U3ByZWFkTWV0aG9kKTsKICAgICAgICAg
Q29sb3IgZmlsbENvbG9yKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0RmlsbENvbG9yKGNvbnN0
IENvbG9yJik7CiAgICAgICAgIHZvaWQgc2V0RmlsbFBhdHRlcm4oUGFzc1JlZlB0cjxQYXR0ZXJu
Pik7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFByaXZh
dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dFByaXZhdGUuaAkocmV2aXNpb24gMzk4MzEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dFByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEs
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFJlZlB0cjxQYXR0ZXJuPiBzdHJva2VQ
YXR0ZXJuOwogICAgICAgICAKICAgICAgICAgV2luZFJ1bGUgZmlsbFJ1bGU7Ci0gICAgICAgIEdy
YWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZDsKICAgICAgICAgQ29sb3JTcGFjZSBmaWxs
Q29sb3JTcGFjZTsKICAgICAgICAgQ29sb3IgZmlsbENvbG9yOwogICAgICAgICBSZWZQdHI8R3Jh
ZGllbnQ+IGZpbGxHcmFkaWVudDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NUeXBlcy5oCShyZXZpc2lvbiAzOTgzMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NUeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCwxNCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIENvbXBvc2l0ZVBsdXNMaWdodGVyCiAgICAgfTsKIAor
ICAgIC8vIEZJWE1FOiBDdXJyZW50bHkgdGhlc2UgY29uc3RhbnRzIGhhdmUgdG8gbWF0Y2ggdGhl
IHZhbHVlcyB1c2VkIGluIHRoZSBTVkcKKyAgICAvLyBET00gQVBJLiBUaGF0J3MgYSBtaXN0YWtl
LiBXZSBuZWVkIHRvIG1ha2UgY3V0IHRoYXQgZGVwZW5kZW5jeS4KKyAgICBlbnVtIEdyYWRpZW50
U3ByZWFkTWV0aG9kIHsKKyAgICAgICAgU3ByZWFkTWV0aG9kUGFkID0gMSwKKyAgICAgICAgU3By
ZWFkTWV0aG9kUmVmbGVjdCA9IDIsCisgICAgICAgIFNwcmVhZE1ldGhvZFJlcGVhdCA9IDMKKyAg
ICB9OworCiAgICAgZW51bSBMaW5lQ2FwIHsgQnV0dENhcCwgUm91bmRDYXAsIFNxdWFyZUNhcCB9
OwogCiAgICAgZW51bSBMaW5lSm9pbiB7IE1pdGVySm9pbiwgUm91bmRKb2luLCBCZXZlbEpvaW4g
fTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVu
dENhaXJvLmNwcAkocmV2aXNpb24gMzk4MzEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1NywxOCBA
QCBjYWlyb19wYXR0ZXJuX3QqIEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpCiAgICAgICAgICsrc3Rv
cEl0ZXJhdG9yOwogICAgIH0KIAorICAgIHN3aXRjaCAobV9zcHJlYWRNZXRob2QpIHsKKyAgICBj
YXNlIFNwcmVhZE1ldGhvZFBhZDoKKyAgICAgICAgY2Fpcm9fcGF0dGVybl9zZXRfZXh0ZW5kKG1f
Z3JhZGllbnQsIENBSVJPX0VYVEVORF9QQUQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNw
cmVhZE1ldGhvZFJlZmxlY3Q6CisgICAgICAgIGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZChtX2dy
YWRpZW50LCBDQUlST19FWFRFTkRfUkVGTEVDVCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
U3ByZWFkTWV0aG9kUmVwZWF0OgorICAgICAgICBjYWlyb19wYXR0ZXJuX3NldF9leHRlbmQobV9n
cmFkaWVudCwgQ0FJUk9fRVhURU5EX1JFUEVBVCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwog
ICAgIHJldHVybiBtX2dyYWRpZW50OwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAkocmV2aXNp
b24gMzk4MzEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsMjIgKzg3LDYgQEAgc3RhdGljIGlu
bGluZSB2b2lkIGZpbGxSZWN0U291cmNlT3ZlcihjYQogICAgIGNhaXJvX2ZpbGwoY3IpOwogfQog
Ci1zdGF0aWMgaW5saW5lIGNhaXJvX3BhdHRlcm5fdCogYXBwbHlTcHJlYWRNZXRob2QoY2Fpcm9f
cGF0dGVybl90KiBwYXR0ZXJuLCBHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRob2QpCi17
Ci0gICAgc3dpdGNoIChzcHJlYWRNZXRob2QpIHsKLSAgICAgICAgY2FzZSBTcHJlYWRNZXRob2RQ
YWQ6Ci0gICAgICAgICAgIGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZChwYXR0ZXJuLCBDQUlST19F
WFRFTkRfUEFEKTsKLSAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU3ByZWFkTWV0aG9k
UmVmbGVjdDoKLSAgICAgICAgICAgIGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZChwYXR0ZXJuLCBD
QUlST19FWFRFTkRfUkVGTEVDVCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBT
cHJlYWRNZXRob2RSZXBlYXQ6Ci0gICAgICAgICAgICBjYWlyb19wYXR0ZXJuX3NldF9leHRlbmQo
cGF0dGVybiwgQ0FJUk9fRVhURU5EX1JFUEVBVCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgcmV0dXJuIHBhdHRlcm47Ci19Ci0KIEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250
ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBjcikKICAgICA6IG1fY29tbW9uKGNyZWF0ZUdy
YXBoaWNzQ29udGV4dFByaXZhdGUoKSkKICAgICAsIG1fZGF0YShuZXcgR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlKQpAQCAtNDYzLDcgKzQ0Nyw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUGF0aCgpCiAgICAgfQogICAgIGNhc2UgR3JhZGllbnRDb2xvclNwYWNlOgogICAgICAg
ICBjYWlyb19wYXR0ZXJuX3QqIHBhdHRlcm4gPSBtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50
LT5wbGF0Zm9ybUdyYWRpZW50KCk7Ci0gICAgICAgIHBhdHRlcm4gPSBhcHBseVNwcmVhZE1ldGhv
ZChwYXR0ZXJuLCBzcHJlYWRNZXRob2QoKSk7CiAgICAgICAgIGNhaXJvX3NldF9zb3VyY2UoY3Is
IHBhdHRlcm4pOwogICAgICAgICBjYWlyb19jbGlwKGNyKTsKICAgICAgICAgY2Fpcm9fcGFpbnRf
d2l0aF9hbHBoYShjciwgbV9jb21tb24tPnN0YXRlLmdsb2JhbEFscGhhKTsKQEAgLTUwMSw3ICs0
ODQsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCgpCiAgICAgfQogICAgIGNh
c2UgR3JhZGllbnRDb2xvclNwYWNlOgogICAgICAgICBjYWlyb19wYXR0ZXJuX3QqIHBhdHRlcm4g
PSBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKTsKLSAg
ICAgICAgcGF0dGVybiA9IGFwcGx5U3ByZWFkTWV0aG9kKHBhdHRlcm4sIHNwcmVhZE1ldGhvZCgp
KTsKICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgcGF0dGVybik7CiAgICAgICAgIGlmICht
X2NvbW1vbi0+c3RhdGUuZ2xvYmFsQWxwaGEgPCAxLjBmKSB7CiAgICAgICAgICAgICBjYWlyb19w
dXNoX2dyb3VwKGNyKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhZGll
bnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFk
aWVudFF0LmNwcAkocmV2aXNpb24gMzk4MzEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYWRpZW50UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2NiwxOCBAQCBRR3Jh
ZGllbnQqIEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50KCkKICAgICAgICAgKytzdG9wSXRlcmF0
b3I7CiAgICAgfQogCisgICAgc3dpdGNoKG1fc3ByZWFkTWV0aG9kKSB7CisgICAgY2FzZSBTcHJl
YWRNZXRob2RQYWQ6CisgICAgICAgIG1fZ3JhZGllbnQtPnNldFNwcmVhZChRR3JhZGllbnQ6OlBh
ZFNwcmVhZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU3ByZWFkTWV0aG9kUmVmbGVjdDoK
KyAgICAgICAgbV9ncmFkaWVudC0+c2V0U3ByZWFkKFFHcmFkaWVudDo6UmVmbGVjdFNwcmVhZCk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU3ByZWFkTWV0aG9kUmVwZWF0OgorICAgICAgICBt
X2dyYWRpZW50LT5zZXRTcHJlYWQoUUdyYWRpZW50OjpSZXBlYXRTcHJlYWQpOworICAgICAgICBi
cmVhazsKKyAgICB9CisKICAgICByZXR1cm4gbV9ncmFkaWVudDsKIH0KIApJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAJKHJl
dmlzaW9uIDM5ODMxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0Nv
bnRleHRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MiwyMiArMTUyLDYgQEAgc3RhdGljIFF0
OjpQZW5TdHlsZSB0b1FQZW5TdHlsZShTdHJva2VTdAogICAgIHJldHVybiBRdDo6Tm9QZW47CiB9
CiAKLXN0YXRpYyBpbmxpbmUgUUdyYWRpZW50IGFwcGx5U3ByZWFkTWV0aG9kKFFHcmFkaWVudCBn
cmFkaWVudCwgR3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kKQotewotICAgIHN3aXRj
aCAoc3ByZWFkTWV0aG9kKSB7Ci0gICAgICAgIGNhc2UgU3ByZWFkTWV0aG9kUGFkOgotICAgICAg
ICAgICAgZ3JhZGllbnQuc2V0U3ByZWFkKFFHcmFkaWVudDo6UGFkU3ByZWFkKTsKLSAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU3ByZWFkTWV0aG9kUmVmbGVjdDoKLSAgICAgICAgICAg
IGdyYWRpZW50LnNldFNwcmVhZChRR3JhZGllbnQ6OlJlZmxlY3RTcHJlYWQpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU3ByZWFkTWV0aG9kUmVwZWF0OgotICAgICAgICAgICAg
Z3JhZGllbnQuc2V0U3ByZWFkKFFHcmFkaWVudDo6UmVwZWF0U3ByZWFkKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gZ3JhZGllbnQ7Ci19Ci0KIHN0cnVjdCBUcmFuc3Bh
cmVuY3lMYXllcgogewogICAgIFRyYW5zcGFyZW5jeUxheWVyKGNvbnN0IFFQYWludGVyKiBwLCBj
b25zdCBRUmVjdCAmcmVjdCkKQEAgLTU1NCw3ICs1MzgsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFBhdGgoKQogICAgIH0KICAgICBjYXNlIEdyYWRpZW50Q29sb3JTcGFjZToKICAgICAg
ICAgUUdyYWRpZW50KiBncmFkaWVudCA9IG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQtPnBs
YXRmb3JtR3JhZGllbnQoKTsKLSAgICAgICAgKmdyYWRpZW50ID0gYXBwbHlTcHJlYWRNZXRob2Qo
KmdyYWRpZW50LCBzcHJlYWRNZXRob2QoKSk7ICAKICAgICAgICAgcC0+ZmlsbFBhdGgocGF0aCwg
UUJydXNoKCpncmFkaWVudCkpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC01ODQsNyArNTY3
LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoKQogICAgIH0KICAgICBjYXNl
IEdyYWRpZW50Q29sb3JTcGFjZTogewogICAgICAgICBRR3JhZGllbnQqIGdyYWRpZW50ID0gbV9j
b21tb24tPnN0YXRlLnN0cm9rZUdyYWRpZW50LT5wbGF0Zm9ybUdyYWRpZW50KCk7Ci0gICAgICAg
ICpncmFkaWVudCA9IGFwcGx5U3ByZWFkTWV0aG9kKCpncmFkaWVudCwgc3ByZWFkTWV0aG9kKCkp
OyAKICAgICAgICAgcGVuLnNldEJydXNoKFFCcnVzaCgqZ3JhZGllbnQpKTsKICAgICAgICAgcC0+
c2V0UGVuKHBlbik7CiAgICAgICAgIHAtPnN0cm9rZVBhdGgocGF0aCwgcGVuKTsKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFkaWVudFNraWEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFkaWVudFNraWEuY3BwCShyZXZp
c2lvbiAzOTgzMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFkaWVudFNr
aWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsNiArMTM2LDE5IEBAIFNrU2hhZGVyKiBHcmFk
aWVudDo6cGxhdGZvcm1HcmFkaWVudCgpCiAKICAgICBmaWxsU3RvcHMobV9zdG9wcy5kYXRhKCks
IG1fc3RvcHMuc2l6ZSgpLCBwb3MsIGNvbG9ycyk7CiAKKyAgICBTa1NoYWRlcjo6VGlsZU1vZGUg
dGlsZSA9IFNrU2hhZGVyOjprQ2xhbXBfVGlsZU1vZGU7CisgICAgc3dpdGNoIChtX3NwcmVhZE1l
dGhvZCkgeworICAgIGNhc2UgU3ByZWFkTWV0aG9kUmVmbGVjdDoKKyAgICAgICAgdGlsZSA9IFNr
U2hhZGVyOjprTWlycm9yX1RpbGVNb2RlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNwcmVh
ZE1ldGhvZFJlcGVhdDoKKyAgICAgICAgdGlsZSA9IFNrU2hhZGVyOjprUmVwZWF0X1RpbGVNb2Rl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNwcmVhZE1ldGhvZFBhZDoKKyAgICAgICAgdGls
ZSA9IFNrU2hhZGVyOjprQ2xhbXBfVGlsZU1vZGU7CisgICAgICAgIGJyZWFrOworICAgIH0KKwog
ICAgIGlmIChtX3JhZGlhbCkgewogICAgICAgICAvLyBGSVhNRTogQ1NTIHJhZGlhbCBHcmFkaWVu
dHMgYWxsb3cgYW4gb2Zmc2V0IGZvY2FsIHBvaW50ICh0aGUKICAgICAgICAgLy8gInN0YXJ0IGNp
cmNsZSIpLCBidXQgc2tpYSBkb2Vzbid0IHNlZW0gdG8gc3VwcG9ydCB0aGF0LCBzbyB0aGlzIGp1
c3QKQEAgLTE0NSwxMSArMTU4LDExIEBAIFNrU2hhZGVyKiBHcmFkaWVudDo6cGxhdGZvcm1HcmFk
aWVudCgpCiAgICAgICAgIC8vIGRlc2NyaXB0aW9uIG9mIHRoZSBleHBlY3RlZCBiZWhhdmlvci4K
ICAgICAgICAgbV9ncmFkaWVudCA9IFNrR3JhZGllbnRTaGFkZXI6OkNyZWF0ZVJhZGlhbChtX3Ax
LAogICAgICAgICAgICAgV2ViQ29yZUZsb2F0VG9Ta1NjYWxhcihtX3IxKSwgY29sb3JzLCBwb3Ms
Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGNvdW50VXNlZCksIFNrU2hhZGVyOjprQ2xh
bXBfVGlsZU1vZGUpOworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pihjb3VudFVzZWQpLCB0
aWxlKTsKICAgICB9IGVsc2UgewogICAgICAgICBTa1BvaW50IHB0c1syXSA9IHsgbV9wMCwgbV9w
MSB9OwogICAgICAgICBtX2dyYWRpZW50ID0gU2tHcmFkaWVudFNoYWRlcjo6Q3JlYXRlTGluZWFy
KHB0cywgY29sb3JzLCBwb3MsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGNvdW50VXNl
ZCksIFNrU2hhZGVyOjprQ2xhbXBfVGlsZU1vZGUpOworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
aW50Pihjb3VudFVzZWQpLCB0aWxlKTsKICAgICB9CiAKICAgICByZXR1cm4gbV9ncmFkaWVudDsK
SW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcAkocmV2aXNpb24g
Mzk4MzEpCisrKyBXZWJDb3JlL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw3IEBAIHZvaWQgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50
OjpidWlsZEdyYWQKICAgICBGbG9hdFBvaW50IGVuZFBvaW50ID0gRmxvYXRQb2ludDo6bmFycm93
UHJlY2lzaW9uKGF0dHJpYnV0ZXMueDIoKSwgYXR0cmlidXRlcy55MigpKTsKIAogICAgIFJlZlB0
cjxHcmFkaWVudD4gZ3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKHN0YXJ0UG9pbnQsIGVuZFBv
aW50KTsKKyAgICBncmFkaWVudC0+c2V0U3ByZWFkTWV0aG9kKGF0dHJpYnV0ZXMuc3ByZWFkTWV0
aG9kKCkpOwogCiAgICAgVmVjdG9yPFNWR0dyYWRpZW50U3RvcD4gbV9zdG9wcyA9IGF0dHJpYnV0
ZXMuc3RvcHMoKTsKICAgICBmbG9hdCBwcmV2aW91c09mZnNldCA9IDAuMGY7CkBAIC0xMDcsNyAr
MTA4LDYgQEAgdm9pZCBTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OmJ1aWxkR3JhZAogICAgIGxp
bmVhckdyYWRpZW50LT5zZXRHcmFkaWVudFN0b3BzKGF0dHJpYnV0ZXMuc3RvcHMoKSk7CiAKICAg
ICAvLyBUaGVzZSBzaG91bGQgcG9zc2libHkgYmUgc3VwcG9ydGVkIG9uIEdyYWRpZW50Ci0gICAg
bGluZWFyR3JhZGllbnQtPnNldEdyYWRpZW50U3ByZWFkTWV0aG9kKGF0dHJpYnV0ZXMuc3ByZWFk
TWV0aG9kKCkpOwogICAgIGxpbmVhckdyYWRpZW50LT5zZXRHcmFkaWVudFRyYW5zZm9ybShhdHRy
aWJ1dGVzLmdyYWRpZW50VHJhbnNmb3JtKCkpOwogICAgIGxpbmVhckdyYWRpZW50LT5zZXRHcmFk
aWVudFN0YXJ0KHN0YXJ0UG9pbnQpOwogICAgIGxpbmVhckdyYWRpZW50LT5zZXRHcmFkaWVudEVu
ZChlbmRQb2ludCk7CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5j
cHAJKHJldmlzaW9uIDM5ODMxKQorKysgV2ViQ29yZS9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDYgKzExNCw3IEBAIHZvaWQgU1ZHUmFkaWFs
R3JhZGllbnRFbGVtZW50OjpidWlsZEdyYWQKICAgICAgICAgMC5mLCAvLyBTVkcgZG9lcyBub3Qg
c3VwcG9ydCBhICJmb2N1cyByYWRpdXMiCiAgICAgICAgIGNlbnRlclBvaW50LAogICAgICAgICBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGF0dHJpYnV0ZXMucigpKSk7CisgICAgZ3JhZGllbnQtPnNl
dFNwcmVhZE1ldGhvZChhdHRyaWJ1dGVzLnNwcmVhZE1ldGhvZCgpKTsKIAogICAgIFZlY3RvcjxT
VkdHcmFkaWVudFN0b3A+IHN0b3BzID0gYXR0cmlidXRlcy5zdG9wcygpOwogICAgIGZsb2F0IHBy
ZXZpb3VzT2Zmc2V0ID0gMC4wZjsKQEAgLTEyOSw3ICsxMzAsNiBAQCB2b2lkIFNWR1JhZGlhbEdy
YWRpZW50RWxlbWVudDo6YnVpbGRHcmFkCiAgICAgICAgIHJldHVybjsKIAogICAgIHJhZGlhbEdy
YWRpZW50LT5zZXRCb3VuZGluZ0JveE1vZGUoYXR0cmlidXRlcy5ib3VuZGluZ0JveE1vZGUoKSk7
Ci0gICAgcmFkaWFsR3JhZGllbnQtPnNldEdyYWRpZW50U3ByZWFkTWV0aG9kKGF0dHJpYnV0ZXMu
c3ByZWFkTWV0aG9kKCkpOyAKICAgICByYWRpYWxHcmFkaWVudC0+c2V0R3JhZGllbnRUcmFuc2Zv
cm0oYXR0cmlidXRlcy5ncmFkaWVudFRyYW5zZm9ybSgpKTsKICAgICByYWRpYWxHcmFkaWVudC0+
c2V0R3JhZGllbnRDZW50ZXIoY2VudGVyUG9pbnQpOwogICAgIHJhZGlhbEdyYWRpZW50LT5zZXRH
cmFkaWVudEZvY2FsKGZvY2FsUG9pbnQpOwpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZH
UGFpbnRTZXJ2ZXJHcmFkaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5jcHAJKHJldmlzaW9uIDM5ODMxKQorKysgV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc2LDggKzc2LDcgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
YwogfQogCiBTVkdQYWludFNlcnZlckdyYWRpZW50OjpTVkdQYWludFNlcnZlckdyYWRpZW50KGNv
bnN0IFNWR0dyYWRpZW50RWxlbWVudCogb3duZXIpCi0gICAgOiBtX3NwcmVhZE1ldGhvZChTcHJl
YWRNZXRob2RQYWQpCi0gICAgLCBtX2JvdW5kaW5nQm94TW9kZSh0cnVlKQorICAgIDogbV9ib3Vu
ZGluZ0JveE1vZGUodHJ1ZSkKICAgICAsIG1fb3duZXJFbGVtZW50KG93bmVyKQogCiAjaWYgUExB
VEZPUk0oQ0cpCkBAIC0xMDIsMTYgKzEwMSw2IEBAIHZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVu
dDo6c2V0R3JhZGllbnQKICAgICBtX2dyYWRpZW50ID0gZ3JhZGllbnQ7CiB9CiAKLUdyYWRpZW50
U3ByZWFkTWV0aG9kIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnNwcmVhZE1ldGhvZCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fc3ByZWFkTWV0aG9kOwotfQotCi12b2lkIFNWR1BhaW50U2VydmVy
R3JhZGllbnQ6OnNldEdyYWRpZW50U3ByZWFkTWV0aG9kKGNvbnN0IEdyYWRpZW50U3ByZWFkTWV0
aG9kJiBtZXRob2QpCi17Ci0gICAgbV9zcHJlYWRNZXRob2QgPSBtZXRob2Q7Ci19Ci0KIGJvb2wg
U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6Ym91bmRpbmdCb3hNb2RlKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbV9ib3VuZGluZ0JveE1vZGU7CkBAIC0yNTIsNyArMjQxLDYgQEAgYm9vbCBTVkdQYWlu
dFNlcnZlckdyYWRpZW50OjpzZXR1cChHcmFwaAogICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VU
aGlja25lc3Moc3Ryb2tlVGhpY2tuZXNzKTsKICAgICB9CiAgICAgY29udGV4dC0+Y29uY2F0Q1RN
KGdyYWRpZW50VHJhbnNmb3JtKCkpOwotICAgIGNvbnRleHQtPnNldFNwcmVhZE1ldGhvZChzcHJl
YWRNZXRob2QoKSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTI5NSw4ICsyODMsOCBAQCBU
ZXh0U3RyZWFtJiBTVkdQYWludFNlcnZlckdyYWRpZW50OjpleHRlCiAKICAgICAvLyBhYnN0cmFj
dCwgZG9uJ3Qgc3RyZWFtIHR5cGUKICAgICB0cyAgPDwgIltzdG9wcz0iIDw8IGdyYWRpZW50U3Rv
cHMoKSA8PCAiXSI7Ci0gICAgaWYgKHNwcmVhZE1ldGhvZCgpICE9IFNwcmVhZE1ldGhvZFBhZCkK
LSAgICAgICAgdHMgPDwgIlttZXRob2Q9IiA8PCBzcHJlYWRNZXRob2QoKSA8PCAiXSI7CisgICAg
aWYgKG1fZ3JhZGllbnQtPnNwcmVhZE1ldGhvZCgpICE9IFNwcmVhZE1ldGhvZFBhZCkKKyAgICAg
ICAgdHMgPDwgIlttZXRob2Q9IiA8PCBtX2dyYWRpZW50LT5zcHJlYWRNZXRob2QoKSA8PCAiXSI7
CiAgICAgaWYgKCFib3VuZGluZ0JveE1vZGUoKSkKICAgICAgICAgdHMgPDwgIiBbYm91bmRpbmcg
Ym94IG1vZGU9IiA8PCBib3VuZGluZ0JveE1vZGUoKSA8PCAiXSI7CiAgICAgaWYgKCFncmFkaWVu
dFRyYW5zZm9ybSgpLmlzSWRlbnRpdHkoKSkKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NW
R1BhaW50U2VydmVyR3JhZGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9TVkdQYWludFNlcnZlckdyYWRpZW50LmgJKHJldmlzaW9uIDM5ODMxKQorKysgV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
Miw5ICs1Miw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRHcmFkaWVu
dChQYXNzUmVmUHRyPEdyYWRpZW50Pik7CiAgICAgICAgIEdyYWRpZW50KiBncmFkaWVudCgpIGNv
bnN0OwogCi0gICAgICAgIEdyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCgpIGNvbnN0
OwotICAgICAgICB2b2lkIHNldEdyYWRpZW50U3ByZWFkTWV0aG9kKGNvbnN0IEdyYWRpZW50U3By
ZWFkTWV0aG9kJik7Ci0KICAgICAgICAgLy8gR3JhZGllbnQgc3RhcnQgYW5kIGVuZCBwb2ludHMg
YXJlIHBlcmNlbnRhZ2VzIHdoZW4gdXNlZCBpbiBib3VuZGluZ0JveCBtb2RlLgogICAgICAgICAv
LyBGb3IgaW5zdGFuY2Ugc3RhcnQgcG9pbnQgd2l0aCB2YWx1ZSAoMCwwKSBpcyB0b3AtbGVmdCBh
bmQgZW5kIHBvaW50IHdpdGgKICAgICAgICAgLy8gdmFsdWUgKDEwMCwgMTAwKSBpcyBib3R0b20t
cmlnaHQuIEJvdW5kaW5nQm94IG1vZGUgaXMgZW5hYmxlZCBieSBkZWZhdWx0LgpAQCAtNzksNyAr
NzYsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgVmVjdG9y
PFNWR0dyYWRpZW50U3RvcD4gbV9zdG9wczsKICAgICAgICAgUmVmUHRyPEdyYWRpZW50PiBtX2dy
YWRpZW50OwotICAgICAgICBHcmFkaWVudFNwcmVhZE1ldGhvZCBtX3NwcmVhZE1ldGhvZDsKICAg
ICAgICAgYm9vbCBtX2JvdW5kaW5nQm94TW9kZTsKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggbV9ncmFkaWVudFRyYW5zZm9ybTsKICAgICAgICAgY29uc3QgU1ZHR3JhZGllbnRFbGVtZW50
KiBtX293bmVyRWxlbWVudDsK
</data>
<flag name="review"
          id="12887"
          type_id="1"
          status="+"
          setter="zimmermann"
    />
          </attachment>
      

    </bug>

</bugzilla>