<?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>29997</bug_id>
          
          <creation_ts>2009-10-02 01:15:01 -0700</creation_ts>
          <short_desc>[GStreamer] Prevent double-memcpy in GStreamer media player</short_desc>
          <delta_ts>2009-10-12 07:19:01 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Media</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>29998</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Sebastian Dröge (slomo)">slomo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>gustavo</cc>
    
    <cc>pnormand</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>151786</commentid>
    <comment_count>0</comment_count>
    <who name="Sebastian Dröge (slomo)">slomo</who>
    <bug_when>2009-10-02 01:15:01 -0700</bug_when>
    <thetext>Hi,
currently the GStreamer media player memcpy&apos;s the video data twice but this isn&apos;t really needed.

Currently the video sink has an internal surface to which all buffers are painted and then in MediaPlayerPrivate::paint() this surface is painted to some external cairo_t. Instead of doing that I would propose:

in MediaPlayerPrivate::paint() get the buffers from the sink&apos;s async queue, check lateness and all that, scale (for par, etc) and then paint it to the cairo_t. This might need some exposing of information from the video sink to the media player.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153999</commentid>
    <comment_count>1</comment_count>
      <attachid>41021</attachid>
    <who name="Sebastian Dröge (slomo)">slomo</who>
    <bug_when>2009-10-12 00:55:57 -0700</bug_when>
    <thetext>Created attachment 41021
double-memcpy.diff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154003</commentid>
    <comment_count>2</comment_count>
      <attachid>41024</attachid>
    <who name="Sebastian Dröge (slomo)">slomo</who>
    <bug_when>2009-10-12 01:29:19 -0700</bug_when>
    <thetext>Created attachment 41024
double-memcpy.diff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154027</commentid>
    <comment_count>3</comment_count>
      <attachid>41024</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-10-12 05:27:07 -0700</bug_when>
    <thetext>Comment on attachment 41024
double-memcpy.diff

First, some content:

 664     cairo_surface_t* src = cairo_image_surface_create_for_data(GST_BUFFER_DATA(m_buffer),
 665                                                                CAIRO_FORMAT_RGB24,
 666                                                                width, height,
 667                                                                4 * width);

We used to have a surface with CAIRO_FORMAT_ARGB32. Keeping in mind that webkit does transforms, and should be able to apply effects such as transparency to the video, are we not loosing some of our current capabilities in changing it to CAIRO_FORMAT_RGB24?

&gt; -static void mediaPlayerPrivateRepaintCallback(WebKitVideoSink*, MediaPlayerPrivate* playerPrivate)
&gt; +void mediaPlayerPrivateRepaintCallback(WebKitVideoSink*, GstBuffer *buffer, MediaPlayerPrivate* playerPrivate)
&gt;  {
&gt; +    g_return_if_fail (GST_IS_BUFFER(buffer));
&gt; +    gst_buffer_replace (&amp;playerPrivate-&gt;m_buffer, buffer);

Spaces before brackets here. There are some more of these throughout the patch. 

&gt; +    int width = 0, height = 0, par_n = 0, par_d = 0;
&gt; +    double dpar_n = 0, dpar_d = 0;
&gt; +    GstCaps *caps = gst_buffer_get_caps (m_buffer);

I would like to see these much needed enhancements to the MediaPlayer also contribute to getting it more in line with the coding standards. So I would prefer to have these variable names matching those we expect elsewhere (http://webkit.org/coding/coding-style.html). So, par_n/par_d become pixelAspectRatioNumerator/pixelAspectRatioDenominator, and so on. Would be good to declare each in its own line after this change.

&gt; +    if (!gst_video_format_parse_caps (GST_BUFFER_CAPS (m_buffer), NULL, &amp;width, &amp;height) ||
&gt; +        !gst_video_parse_caps_pixel_aspect_ratio(caps, &amp;par_n, &amp;par_d))
&gt; +      return;

More spaces.

&gt; -    cairo_set_source_surface(cr, m_surface, 0, 0);
&gt; +    cairo_scale (cr, dpar_n / dpar_d, dpar_d / dpar_n);

^

&gt;          friend gboolean mediaPlayerPrivateErrorCallback(GstBus* bus, GstMessage* message, gpointer data);
&gt;          friend gboolean mediaPlayerPrivateEOSCallback(GstBus* bus, GstMessage* message, gpointer data);
&gt;          friend gboolean mediaPlayerPrivateStateCallback(GstBus* bus, GstMessage* message, gpointer data);
&gt; +	friend void mediaPlayerPrivateRepaintCallback(WebKitVideoSink*, GstBuffer *buffer, MediaPlayerPrivate* playerPrivate);
&gt;  

Indentation is off here.
&gt; +    if (G_UNLIKELY (!GST_BUFFER_CAPS (buffer))) {
&gt; +      buffer = gst_buffer_make_metadata_writable (buffer);
&gt; +      gst_buffer_set_caps (buffer, GST_PAD_CAPS (GST_BASE_SINK_PAD (sink)));
&gt;      }

Indentation.

&gt; -    GST_CALL_PARENT_WITH_DEFAULT(GST_BASE_SINK_CLASS, unlock,
&gt; +    return GST_CALL_PARENT_WITH_DEFAULT(GST_BASE_SINK_CLASS, unlock,
&gt;                                   (object), TRUE);

Indentation of the second line should be updated here.

&gt;  static void
&gt; +marshal_VOID__MINIOBJECT (GClosure * closure, GValue * return_value,
&gt; +    guint n_param_values, const GValue * param_values, gpointer invocation_hint,
&gt; +    gpointer marshal_data)
&gt; +{

Identation is weird, and there&apos;s a space.

&gt; +  typedef void (*marshalfunc_VOID__MINIOBJECT) (gpointer obj, gpointer arg1,
&gt; +      gpointer data2);

Indentation is also off in this function, I think you can just leave data2 in the same line, webkit doesn&apos;t strive to be under 80 cols =).

r- for now for the reasons above, thanks for working on this! =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154032</commentid>
    <comment_count>4</comment_count>
    <who name="Sebastian Dröge (slomo)">slomo</who>
    <bug_when>2009-10-12 06:04:21 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 41024 [details])
&gt; First, some content:
&gt; 
&gt;  664     cairo_surface_t* src =
&gt; cairo_image_surface_create_for_data(GST_BUFFER_DATA(m_buffer),
&gt;  665                                                               
&gt; CAIRO_FORMAT_RGB24,
&gt;  666                                                                width,
&gt; height,
&gt;  667                                                                4 * width);
&gt; 
&gt; We used to have a surface with CAIRO_FORMAT_ARGB32. Keeping in mind that webkit
&gt; does transforms, and should be able to apply effects such as transparency to
&gt; the video, are we not loosing some of our current capabilities in changing it
&gt; to CAIRO_FORMAT_RGB24?

I just copied this from the video sink. This patch shouldn&apos;t change anything in functionality.

So, the surface *to* which we&apos;re painting is still ARGB32. Only the GStreamer video sink only accepts non-alpha RGB, which means that you can still do nice alpha effects with the video but not from inside the GStreamer pipeline. (Note: almost no video format supports ARGB)

But I plan to add ARGB32 support to the video sink after you accepted my two patches. This will be quite inefficient because GStreamer and Cairo have other conventions for ARGB but for the rare case where you have alpha-content in the GStreamer pipeline it will preserve the alpha.

(Too much information?)

&gt; &gt; -static void mediaPlayerPrivateRepaintCallback(WebKitVideoSink*, MediaPlayerPrivate* playerPrivate)
&gt; &gt; +void mediaPlayerPrivateRepaintCallback(WebKitVideoSink*, GstBuffer *buffer, MediaPlayerPrivate* playerPrivate)
&gt; &gt;  {
&gt; &gt; +    g_return_if_fail (GST_IS_BUFFER(buffer));
&gt; &gt; +    gst_buffer_replace (&amp;playerPrivate-&gt;m_buffer, buffer);
&gt; 
&gt; Spaces before brackets here. There are some more of these throughout the patch. 
&gt; 
&gt; &gt; +    int width = 0, height = 0, par_n = 0, par_d = 0;
&gt; &gt; +    double dpar_n = 0, dpar_d = 0;
&gt; &gt; +    GstCaps *caps = gst_buffer_get_caps (m_buffer);
&gt; 
&gt; I would like to see these much needed enhancements to the MediaPlayer also
&gt; contribute to getting it more in line with the coding standards. So I would
&gt; prefer to have these variable names matching those we expect elsewhere
&gt; (http://webkit.org/coding/coding-style.html). So, par_n/par_d become
&gt; pixelAspectRatioNumerator/pixelAspectRatioDenominator, and so on. Would be good
&gt; to declare each in its own line after this change.

Ok... PARNumerator would be fine too? I mean, everybody who should touch this code should know what PAR means... and pixelAspectRatio is a long word ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154033</commentid>
    <comment_count>5</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-10-12 06:16:03 -0700</bug_when>
    <thetext>(In reply to comment #4)

&gt; So, the surface *to* which we&apos;re painting is still ARGB32. Only the GStreamer
&gt; video sink only accepts non-alpha RGB, which means that you can still do nice
&gt; alpha effects with the video but not from inside the GStreamer pipeline. (Note:
&gt; almost no video format supports ARGB)
&gt; 
&gt; But I plan to add ARGB32 support to the video sink after you accepted my two
&gt; patches. This will be quite inefficient because GStreamer and Cairo have other
&gt; conventions for ARGB but for the rare case where you have alpha-content in the
&gt; GStreamer pipeline it will preserve the alpha.
&gt; 
&gt; (Too much information?)

I guess I was able to get it, thanks for explaining!

&gt; Ok... PARNumerator would be fine too? I mean, everybody who should touch this
&gt; code should know what PAR means... and pixelAspectRatio is a long word ;)

yeah, I know, but we have much longer variable names in WebKit =D. I think PARNumerator is fine, though, given that PAR is a concept everyone touching the code should grasp, as you pointed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154037</commentid>
    <comment_count>6</comment_count>
      <attachid>41037</attachid>
    <who name="Sebastian Dröge (slomo)">slomo</who>
    <bug_when>2009-10-12 06:42:35 -0700</bug_when>
    <thetext>Created attachment 41037
double-memcpy.diff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154041</commentid>
    <comment_count>7</comment_count>
      <attachid>41039</attachid>
    <who name="Sebastian Dröge (slomo)">slomo</who>
    <bug_when>2009-10-12 06:55:57 -0700</bug_when>
    <thetext>Created attachment 41039
double-memcpy.diff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154042</commentid>
    <comment_count>8</comment_count>
      <attachid>41039</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-10-12 06:57:38 -0700</bug_when>
    <thetext>Comment on attachment 41039
double-memcpy.diff

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154053</commentid>
    <comment_count>9</comment_count>
      <attachid>41039</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-10-12 07:18:58 -0700</bug_when>
    <thetext>Comment on attachment 41039
double-memcpy.diff

Clearing flags on attachment: 41039

Committed r49438: &lt;http://trac.webkit.org/changeset/49438&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154054</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-10-12 07:19:01 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41021</attachid>
            <date>2009-10-12 00:55:57 -0700</date>
            <delta_ts>2009-10-12 01:29:19 -0700</delta_ts>
            <desc>double-memcpy.diff</desc>
            <filename>double-memcpy.diff</filename>
            <type>text/plain</type>
            <size>18257</size>
            <attacher name="Sebastian Dröge (slomo)">slomo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShSZXZpc2lvbiA0OTQzNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCShBcmJlaXRza29waWUpCkBA
IC0xLDMgKzEsMzAgQEAKKzIwMDktMTAtMTIgIFNlYmFzdGlhbiBEcsO2Z2UgIDxzZWJhc3RpYW4u
ZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Mjk5OTcKKyAgICAgICAgCisgICAgICAgIEZpeGVzIGRvdWJsZSBtZW1jcHkgb2YgYWxsIHJlbmRl
cmVkIHZpZGVvIGZyYW1lcy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWVkaWFQbGF5
ZXJQcml2YXRlUmVwYWludENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZTo6TWVkaWFQbGF5ZXJQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZTo6fk1lZGlhUGxheWVyUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGU6OmR1cmF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
dGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL1ZpZGVvU2lua0dTdHJlYW1lci5jcHA6CisgICAgICAgICh3ZWJraXRfdmlkZW9f
c2lua190aW1lb3V0X2Z1bmMpOgorICAgICAgICAod2Via2l0X3ZpZGVvX3NpbmtfZGlzcG9zZSk6
CisgICAgICAgICh1bmxvY2tfYnVmZmVyX211dGV4KToKKyAgICAgICAgKHdlYmtpdF92aWRlb19z
aW5rX3VubG9jayk6CisgICAgICAgIChtYXJzaGFsX1ZPSURfX01JTklPQkpFQ1QpOgorICAgICAg
ICAod2Via2l0X3ZpZGVvX3NpbmtfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfdmlkZW9f
c2lua19uZXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9WaWRlb1NpbmtHU3Ry
ZWFtZXIuaDoKKyAgICAgICAgRGlyZWN0bHkgcGFzcyB0aGUgYnVmZmVycyB1cCB0byB0aGUgTWVk
aWFQbGF5ZXJQcml2YXRlOjpwYWludCgpCisgICAgICAgIG1ldGhvZCBpbnN0ZWFkIG9mIHJlbmRl
cmluZyB0aGVtIGZpcnN0IHRvIGFuIGludGVybWVkaWF0ZSBjYWlybworICAgICAgICBzdXJmYWNl
LiBUaGlzIHNob3VsZCBpbmNyZWFzZSBwZXJmb3JtYW5jZSBhbmQgcGVhayBtZW1vcnkgdXNhZ2Uu
CisKIDIwMDktMTAtMTEgIERhbmllbCBCYXRlcyAgPGRiYXRlc0B3ZWJraXQub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2d0ay9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5j
cHAJKFJldmlzaW9uIDQ5NDMyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAkoQXJiZWl0c2tvcGllKQpAQCAtMzksNyArMzks
NiBAQAogI2luY2x1ZGUgIldpZGdldC5oIgogI2luY2x1ZGUgIlRpbWVSYW5nZXMuaCIKIAotI2lu
Y2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2VzcmMuaD4KICNpbmNsdWRlIDxnc3QvZ3N0Lmg+CiAjaW5j
bHVkZSA8Z3N0L2ludGVyZmFjZXMvbWl4ZXIuaD4KICNpbmNsdWRlIDxnc3QvaW50ZXJmYWNlcy94
b3ZlcmxheS5oPgpAQCAtMTA1LDggKzEwNCwxMCBAQAogICAgIHJldHVybiB0cnVlOwogfQogCi1z
dGF0aWMgdm9pZCBtZWRpYVBsYXllclByaXZhdGVSZXBhaW50Q2FsbGJhY2soV2ViS2l0VmlkZW9T
aW5rKiwgTWVkaWFQbGF5ZXJQcml2YXRlKiBwbGF5ZXJQcml2YXRlKQordm9pZCBtZWRpYVBsYXll
clByaXZhdGVSZXBhaW50Q2FsbGJhY2soV2ViS2l0VmlkZW9TaW5rKiwgR3N0QnVmZmVyICpidWZm
ZXIsIE1lZGlhUGxheWVyUHJpdmF0ZSogcGxheWVyUHJpdmF0ZSkKIHsKKyAgICBnX3JldHVybl9p
Zl9mYWlsIChHU1RfSVNfQlVGRkVSKGJ1ZmZlcikpOworICAgIGdzdF9idWZmZXJfcmVwbGFjZSAo
JnBsYXllclByaXZhdGUtPm1fYnVmZmVyLCBidWZmZXIpOwogICAgIHBsYXllclByaXZhdGUtPnJl
cGFpbnQoKTsKIH0KIApAQCAtMTQ4LDIwICsxNDksMTkgQEAKICAgICAsIG1faXNTdHJlYW1pbmco
ZmFsc2UpCiAgICAgLCBtX3NpemUoSW50U2l6ZSgpKQogICAgICwgbV92aXNpYmxlKHRydWUpCisg
ICAgLCBtX2J1ZmZlcigwKQogICAgICwgbV9wYXVzZWQodHJ1ZSkKICAgICAsIG1fc2Vla2luZyhm
YWxzZSkKICAgICAsIG1fZXJyb3JPY2N1cmVkKGZhbHNlKQogewogICAgIGRvX2dzdF9pbml0KCk7
Ci0KLSAgICAvLyBGSVhNRTogVGhlIHNpemUgc2hvdWxkbid0IGJlIGZpeGVkIGhlcmUsIHRoaXMg
aXMganVzdCBhIHF1aWNrIGhhY2suCi0gICAgbV9zdXJmYWNlID0gY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0FSR0IzMiwgNjQwLCA0ODApOwogfQogCiBNZWRpYVBsYXll
clByaXZhdGU6On5NZWRpYVBsYXllclByaXZhdGUoKQogewotICAgIGlmIChtX3N1cmZhY2UpCi0g
ICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShtX3N1cmZhY2UpOworICAgIGlmIChtX2J1ZmZl
cikKKyAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAobV9idWZmZXIpOworICAgIG1fYnVmZmVyID0g
MDsKIAogICAgIGlmIChtX3BsYXlCaW4pIHsKICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRl
KG1fcGxheUJpbiwgR1NUX1NUQVRFX05VTEwpOwpAQCAtMzI3LDE0ICszMjcsMTYgQEAKICAgICAv
LyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk2MzI2CiAgICAg
aW50IHdpZHRoID0gMCwgaGVpZ2h0ID0gMDsKICAgICBpZiAoR3N0UGFkKiBwYWQgPSBnc3RfZWxl
bWVudF9nZXRfc3RhdGljX3BhZChtX3ZpZGVvU2luaywgInNpbmsiKSkgewotICAgICAgICBnc3Rf
dmlkZW9fZ2V0X3NpemUoR1NUX1BBRChwYWQpLCAmd2lkdGgsICZoZWlnaHQpOwogICAgICAgICBH
c3RDYXBzKiBjYXBzID0gR1NUX1BBRF9DQVBTKHBhZCk7CiAgICAgICAgIGdmbG9hdCBwaXhlbEFz
cGVjdFJhdGlvOwogICAgICAgICBnaW50IHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3IsIHBpeGVs
QXNwZWN0UmF0aW9EZW5vbWluYXRvcjsKIAotICAgICAgICBpZiAoIWdzdF92aWRlb19wYXJzZV9j
YXBzX3BpeGVsX2FzcGVjdF9yYXRpbyhjYXBzLCAmcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBp
eGVsQXNwZWN0UmF0aW9EZW5vbWluYXRvcikpCi0gICAgICAgICAgICBwaXhlbEFzcGVjdFJhdGlv
TnVtZXJhdG9yID0gcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yID0gMTsKKwlpZiAoIWdzdF92
aWRlb19mb3JtYXRfcGFyc2VfY2FwcyAoY2FwcywgTlVMTCwgJndpZHRoLCAmaGVpZ2h0KSB8fAor
CSAgICAhZ3N0X3ZpZGVvX3BhcnNlX2NhcHNfcGl4ZWxfYXNwZWN0X3JhdGlvIChjYXBzLCAmcGl4
ZWxBc3BlY3RSYXRpb051bWVyYXRvciwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKSkgeworICAg
ICAgICAgICAgZ3N0X29iamVjdF91bnJlZiAoR1NUX09CSkVDVChwYWQpKTsKKwkgICAgcmV0dXJu
IEludFNpemUgKCk7CisJfQogCiAgICAgICAgIHBpeGVsQXNwZWN0UmF0aW8gPSAoZ2Zsb2F0KSBw
aXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yIC8gKGdmbG9hdCkgcGl4ZWxBc3BlY3RSYXRpb0Rlbm9t
aW5hdG9yOwogICAgICAgICB3aWR0aCAqPSBwaXhlbEFzcGVjdFJhdGlvOwpAQCAtNjI2LDE4ICs2
MjgsNyBAQAogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0U2l6ZShjb25zdCBJbnRTaXpl
JiBzaXplKQogewotICAgIC8vIERlc3Ryb3kgYW5kIHJlLWNyZWF0ZSB0aGUgY2Fpcm8gc3VyZmFj
ZSBvbmx5IGlmIHRoZSBzaXplCi0gICAgLy8gY2hhbmdlZC4KLSAgICBpZiAoc2l6ZSAhPSBtX3Np
emUpIHsKLSAgICAgICAgaWYgKG1fc3VyZmFjZSkKLSAgICAgICAgICAgIGNhaXJvX3N1cmZhY2Vf
ZGVzdHJveShtX3N1cmZhY2UpOwotICAgICAgICBtX3N1cmZhY2UgPSBjYWlyb19pbWFnZV9zdXJm
YWNlX2NyZWF0ZShDQUlST19GT1JNQVRfQVJHQjMyLCBzaXplLndpZHRoKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUuaGVpZ2h0KCkpOwotICAg
ICAgICBnX29iamVjdF9zZXQobV92aWRlb1NpbmssICJzdXJmYWNlIiwgbV9zdXJmYWNlLCAwKTsK
LSAgICB9Ci0KICAgICBtX3NpemUgPSBzaXplOwotCiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKQEAgLTY1Nyw4ICs2NDgsMjYgQEAKIAogICAg
IGlmICghbV92aXNpYmxlKQogICAgICAgICByZXR1cm47CisgICAgaWYgKCFtX2J1ZmZlcikKKyAg
ICAgICAgcmV0dXJuOwogCisgICAgaW50IHdpZHRoID0gMCwgaGVpZ2h0ID0gMCwgcGFyX24gPSAw
LCBwYXJfZCA9IDA7CisgICAgZG91YmxlIGR3aWR0aCA9IDAsIGRoZWlnaHQgPSAwLjA7CisgICAg
ZG91YmxlIGRwYXJfbiA9IDAsIGRwYXJfZCA9IDA7CisgICAgR3N0Q2FwcyAqY2FwcyA9IGdzdF9i
dWZmZXJfZ2V0X2NhcHMgKG1fYnVmZmVyKTsKKyAgICBpZiAoIWdzdF92aWRlb19mb3JtYXRfcGFy
c2VfY2FwcyAoR1NUX0JVRkZFUl9DQVBTIChtX2J1ZmZlciksIE5VTEwsICZ3aWR0aCwgJmhlaWdo
dCkgfHwKKwkhZ3N0X3ZpZGVvX3BhcnNlX2NhcHNfcGl4ZWxfYXNwZWN0X3JhdGlvKGNhcHMsICZw
YXJfbiwgJnBhcl9kKSkKKyAgICAgIHJldHVybjsKKworICAgIGR3aWR0aCA9IHdpZHRoOworICAg
IGRoZWlnaHQgPSBoZWlnaHQ7CisgICAgZHBhcl9uID0gcGFyX247CisgICAgZHBhcl9kID0gcGFy
X2Q7CiAgICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBj
YWlyb19zdXJmYWNlX3QqIHNyYyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRh
KEdTVF9CVUZGRVJfREFUQShtX2J1ZmZlciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQUlST19GT1JNQVRfUkdCMjQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAqIHdpZHRoKTsKIAogICAgIGNhaXJvX3NhdmUo
Y3IpOwogICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsK
QEAgLTY2Niw5ICs2NzUsMTMgQEAKICAgICAvLyBwYWludCB0aGUgcmVjdGFuZ2xlIG9uIHRoZSBj
b250ZXh0IGFuZCBkcmF3IHRoZSBzdXJmYWNlIGluc2lkZS4KICAgICBjYWlyb190cmFuc2xhdGUo
Y3IsIHJlY3QueCgpLCByZWN0LnkoKSk7CiAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCAwLCAwLCBy
ZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFj
ZShjciwgbV9zdXJmYWNlLCAwLCAwKTsKKyAgICBjYWlyb19zY2FsZSAoY3IsIGRwYXJfbiAvIGRw
YXJfZCwgZHBhcl9kIC8gZHBhcl9uKTsKKyAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3Is
IHNyYywgMCwgMCk7CiAgICAgY2Fpcm9fZmlsbChjcik7CiAgICAgY2Fpcm9fcmVzdG9yZShjcik7
CisgICAgCisgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95IChzcmMpOworICAgIGdzdF9jYXBzX3Vu
cmVmIChjYXBzKTsKIH0KIAogc3RhdGljIEhhc2hTZXQ8U3RyaW5nPiBtaW1lVHlwZUNhY2hlKCkK
QEAgLTgwMCw3ICs4MTMsNyBAQAogCiAgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKG1fcGxheUJp
biksICJ1cmkiLCB1cmwudXRmOCgpLmRhdGEoKSwgTlVMTCk7CiAKLSAgICBtX3ZpZGVvU2luayA9
IHdlYmtpdF92aWRlb19zaW5rX25ldyhtX3N1cmZhY2UpOworICAgIG1fdmlkZW9TaW5rID0gd2Vi
a2l0X3ZpZGVvX3NpbmtfbmV3KCk7CiAKICAgICBnX29iamVjdF9yZWZfc2luayhtX3ZpZGVvU2lu
ayk7CiAgICAgZ19vYmplY3Rfc2V0KG1fcGxheUJpbiwgInZpZGVvLXNpbmsiLCBtX3ZpZGVvU2lu
aywgTlVMTCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9WaWRlb1NpbmtH
U3RyZWFtZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3Rr
L1ZpZGVvU2lua0dTdHJlYW1lci5jcHAJKFJldmlzaW9uIDQ5NDMyKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsvVmlkZW9TaW5rR1N0cmVhbWVyLmNwcAkoQXJiZWl0c2tvcGllKQpA
QCAtMjEsOCArMjEsOSBAQAogICogU0VDVElPTjp3ZWJraXQtdmlkZW8tc2luawogICogQHNob3J0
X2Rlc2NyaXB0aW9uOiBHU3RyZWFtZXIgdmlkZW8gc2luawogICoKLSAqICNXZWJLaXRWaWRlb1Np
bmsgaXMgYSBHU3RyZWFtZXIgc2luayBlbGVtZW50IHRoYXQgc2VuZHMKLSAqIGRhdGEgdG8gYSAj
Y2Fpcm9fc3VyZmFjZV90LgorICogI1dlYktpdFZpZGVvU2luayBpcyBhIEdTdHJlYW1lciBzaW5r
IGVsZW1lbnQgdGhhdCB0cmlnZ2VycworICogcmVwYWludHMgaW4gdGhlIFdlYktpdCBHU3RyZWFt
ZXIgbWVkaWEgcGxheWVyIGZvciB0aGUKKyAqIGN1cnJlbnQgdmlkZW8gYnVmZmVyLgogICovCiAK
ICNpbmNsdWRlICJjb25maWcuaCIKQEAgLTU3LDIxICs1OCwxMiBAQAogfTsKIAogZW51bSB7Ci0g
ICAgUFJPUF8wLAotICAgIFBST1BfU1VSRkFDRQorICAgIFBST1BfMAogfTsKIAogc3RhdGljIGd1
aW50IHdlYmtpdF92aWRlb19zaW5rX3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OwogCiBz
dHJ1Y3QgX1dlYktpdFZpZGVvU2lua1ByaXZhdGUgewotICAgIGNhaXJvX3N1cmZhY2VfdCogc3Vy
ZmFjZTsKLSAgICBnYm9vbGVhbiByZ2Jfb3JkZXJpbmc7Ci0gICAgaW50IHdpZHRoOwotICAgIGlu
dCBoZWlnaHQ7Ci0gICAgaW50IGZwc19uOwotICAgIGludCBmcHNfZDsKLSAgICBpbnQgcGFyX247
Ci0gICAgaW50IHBhcl9kOwogICAgIEdzdEJ1ZmZlciogYnVmZmVyOwogICAgIGd1aW50IHRpbWVv
dXRfaWQ7CiAgICAgR011dGV4KiBidWZmZXJfbXV0ZXg7CkBAIC0xMTUsMTQgKzEwNywxMCBAQAog
ICAgIFdlYktpdFZpZGVvU2luayogc2luayA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViS2l0VmlkZW9T
aW5rKj4oZGF0YSk7CiAgICAgV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSogcHJpdiA9IHNpbmstPnBy
aXY7CiAgICAgR3N0QnVmZmVyKiBidWZmZXI7Ci0gICAgR3N0Q2FwcyogY2FwczsKLSAgICBHc3RW
aWRlb0Zvcm1hdCBmb3JtYXQ7Ci0gICAgZ2ludCBwYXJfbiwgcGFyX2Q7Ci0gICAgZ2Zsb2F0IHBh
cjsKLSAgICBnaW50IGJ3aWR0aCwgYmhlaWdodDsKIAogICAgIGdfbXV0ZXhfbG9jayhwcml2LT5i
dWZmZXJfbXV0ZXgpOwogICAgIGJ1ZmZlciA9IHByaXYtPmJ1ZmZlcjsKKyAgICBwcml2LT5idWZm
ZXIgPSAwOwogICAgIHByaXYtPnRpbWVvdXRfaWQgPSAwOwogCiAgICAgaWYgKCFidWZmZXIgfHwg
R19VTkxJS0VMWSghR1NUX0lTX0JVRkZFUihidWZmZXIpKSkgewpAQCAtMTMxLDM5ICsxMTksMTMg
QEAKICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KIAotICAgIGNhcHMgPSBHU1RfQlVGRkVS
X0NBUFMoYnVmZmVyKTsKLSAgICBpZiAoIWdzdF92aWRlb19mb3JtYXRfcGFyc2VfY2FwcyhjYXBz
LCAmZm9ybWF0LCAmYndpZHRoLCAmYmhlaWdodCkpIHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVD
VChzaW5rLCAiVW5rbm93biB2aWRlbyBmb3JtYXQgaW4gYnVmZmVyIGNhcHMgJyVzJyIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgZ3N0X2NhcHNfdG9fc3RyaW5nKGNhcHMpKTsKLSAgICAgICAg
Z19jb25kX3NpZ25hbChwcml2LT5kYXRhX2NvbmQpOwotICAgICAgICBnX211dGV4X3VubG9jayhw
cml2LT5idWZmZXJfbXV0ZXgpOwotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgaWYgKEdfVU5M
SUtFTFkgKCFHU1RfQlVGRkVSX0NBUFMgKGJ1ZmZlcikpKSB7CisgICAgICBidWZmZXIgPSBnc3Rf
YnVmZmVyX21ha2VfbWV0YWRhdGFfd3JpdGFibGUgKGJ1ZmZlcik7CisgICAgICBnc3RfYnVmZmVy
X3NldF9jYXBzIChidWZmZXIsIEdTVF9QQURfQ0FQUyAoR1NUX0JBU0VfU0lOS19QQUQgKHNpbmsp
KSk7CiAgICAgfQogCi0gICAgaWYgKCFnc3RfdmlkZW9fcGFyc2VfY2Fwc19waXhlbF9hc3BlY3Rf
cmF0aW8oY2FwcywgJnBhcl9uLCAmcGFyX2QpKQotICAgICAgICBwYXJfbiA9IHBhcl9kID0gMTsK
LQotICAgIHBhciA9IChnZmxvYXQpIHBhcl9uIC8gKGdmbG9hdCkgcGFyX2Q7Ci0KLSAgICBjYWly
b19zdXJmYWNlX3QqIHNyYyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKEdT
VF9CVUZGRVJfREFUQShidWZmZXIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0FJUk9fRk9STUFUX1JHQjI0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YndpZHRoLCBiaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgNCAqIGJ3aWR0aCk7Ci0KLSAgICAvLyBUT0RPOiBXZSBj
b3B5IHRoZSBkYXRhIHR3aWNlIHJpZ2h0IG5vdy4gVGhpcyBjb3VsZCBiZSBlYXNpbHkgaW1wcm92
ZWQuCi0gICAgY2Fpcm9fdCogY3IgPSBjYWlyb19jcmVhdGUocHJpdi0+c3VyZmFjZSk7Ci0gICAg
Y2Fpcm9fc2NhbGUoY3IsIHBhciwgMS4wIC8gcGFyKTsKLSAgICBjYWlyb19zZXRfb3BlcmF0b3Io
Y3IsIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNl
KGNyLCBzcmMsIDAsIDApOwotICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShzcmMpOwotICAgIGNh
aXJvX3JlY3RhbmdsZShjciwgMCwgMCwgcHJpdi0+d2lkdGgsIHByaXYtPmhlaWdodCk7Ci0gICAg
Y2Fpcm9fZmlsbChjcik7Ci0gICAgY2Fpcm9fZGVzdHJveShjcik7Ci0KKyAgICBnX3NpZ25hbF9l
bWl0KHNpbmssIHdlYmtpdF92aWRlb19zaW5rX3NpZ25hbHNbUkVQQUlOVF9SRVFVRVNURURdLCAw
LCBidWZmZXIpOwogICAgIGdzdF9idWZmZXJfdW5yZWYoYnVmZmVyKTsKLSAgICBwcml2LT5idWZm
ZXIgPSAwOwotCi0gICAgZ19zaWduYWxfZW1pdChzaW5rLCB3ZWJraXRfdmlkZW9fc2lua19zaWdu
YWxzW1JFUEFJTlRfUkVRVUVTVEVEXSwgMCk7CiAgICAgZ19jb25kX3NpZ25hbChwcml2LT5kYXRh
X2NvbmQpOwogICAgIGdfbXV0ZXhfdW5sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CiAKQEAgLTE5
MCw1OSArMTUyLDEyIEBACiAgICAgcmV0dXJuIEdTVF9GTE9XX09LOwogfQogCi1zdGF0aWMgZ2Jv
b2xlYW4KLXdlYmtpdF92aWRlb19zaW5rX3NldF9jYXBzKEdzdEJhc2VTaW5rKiBic2luaywgR3N0
Q2FwcyogY2FwcykKLXsKLSAgICBXZWJLaXRWaWRlb1NpbmsqIHNpbmsgPSBXRUJLSVRfVklERU9f
U0lOSyhic2luayk7Ci0gICAgV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSogcHJpdiA9IHNpbmstPnBy
aXY7Ci0gICAgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmU7Ci0gICAgZ2Jvb2xlYW4gcmV0OwotICAg
IGdpbnQgd2lkdGgsIGhlaWdodCwgZnBzX24sIGZwc19kOwotICAgIGludCByZWRfbWFzazsKLQot
ICAgIEdzdENhcHMqIGludGVyc2VjdGlvbiA9IGdzdF9jYXBzX2ludGVyc2VjdChnc3Rfc3RhdGlj
X3BhZF90ZW1wbGF0ZV9nZXRfY2Fwcygmc2lua3RlbXBsYXRlKSwgY2Fwcyk7Ci0KLSAgICBpZiAo
Z3N0X2NhcHNfaXNfZW1wdHkoaW50ZXJzZWN0aW9uKSkKLSAgICAgICAgcmV0dXJuIEZBTFNFOwot
Ci0gICAgZ3N0X2NhcHNfdW5yZWYoaW50ZXJzZWN0aW9uKTsKLQotICAgIHN0cnVjdHVyZSA9IGdz
dF9jYXBzX2dldF9zdHJ1Y3R1cmUoY2FwcywgMCk7Ci0KLSAgICByZXQgPSBnc3Rfc3RydWN0dXJl
X2dldF9pbnQoc3RydWN0dXJlLCAid2lkdGgiLCAmd2lkdGgpOwotICAgIHJldCAmPSBnc3Rfc3Ry
dWN0dXJlX2dldF9pbnQoc3RydWN0dXJlLCAiaGVpZ2h0IiwgJmhlaWdodCk7Ci0KLSAgICAvKiBX
ZSBkb250IHlldCB1c2UgZnBzIGJ1dCBoYW5keSB0byBoYXZlICovCi0gICAgcmV0ICY9IGdzdF9z
dHJ1Y3R1cmVfZ2V0X2ZyYWN0aW9uKHN0cnVjdHVyZSwgImZyYW1lcmF0ZSIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmcHNfbiwgJmZwc19kKTsKLSAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChyZXQsIEZBTFNFKTsKLQotICAgIHByaXYtPndpZHRoID0gd2lkdGg7Ci0g
ICAgcHJpdi0+aGVpZ2h0ID0gaGVpZ2h0OwotICAgIHByaXYtPmZwc19uID0gZnBzX247Ci0gICAg
cHJpdi0+ZnBzX2QgPSBmcHNfZDsKLQotICAgIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfZnJhY3Rp
b24oc3RydWN0dXJlLCAicGl4ZWwtYXNwZWN0LXJhdGlvIiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZwcml2LT5wYXJfbiwgJnByaXYtPnBhcl9kKSkKLSAgICAgICAgcHJp
di0+cGFyX24gPSBwcml2LT5wYXJfZCA9IDE7Ci0KLSAgICBnc3Rfc3RydWN0dXJlX2dldF9pbnQo
c3RydWN0dXJlLCAicmVkX21hc2siLCAmcmVkX21hc2spOwotICAgIHByaXYtPnJnYl9vcmRlcmlu
ZyA9IChyZWRfbWFzayA9PSBzdGF0aWNfY2FzdDxpbnQ+KDB4ZmYwMDAwMDApKTsKLQotICAgIHJl
dHVybiBUUlVFOwotfQotCiBzdGF0aWMgdm9pZAogd2Via2l0X3ZpZGVvX3NpbmtfZGlzcG9zZShH
T2JqZWN0KiBvYmplY3QpCiB7CiAgICAgV2ViS2l0VmlkZW9TaW5rKiBzaW5rID0gV0VCS0lUX1ZJ
REVPX1NJTksob2JqZWN0KTsKICAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBwcml2ID0gc2lu
ay0+cHJpdjsKIAotICAgIGlmIChwcml2LT5zdXJmYWNlKSB7Ci0gICAgICAgIGNhaXJvX3N1cmZh
Y2VfZGVzdHJveShwcml2LT5zdXJmYWNlKTsKLSAgICAgICAgcHJpdi0+c3VyZmFjZSA9IDA7Ci0g
ICAgfQotCiAgICAgaWYgKHByaXYtPmRhdGFfY29uZCkgewogICAgICAgICBnX2NvbmRfZnJlZShw
cml2LT5kYXRhX2NvbmQpOwogICAgICAgICBwcml2LT5kYXRhX2NvbmQgPSAwOwpAQCAtMjY4LDU3
ICsxODMsNTEgQEAKIAogICAgIGdfY29uZF9zaWduYWwocHJpdi0+ZGF0YV9jb25kKTsKICAgICBn
X211dGV4X3VubG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOwotCiB9CiAKIHN0YXRpYyBnYm9vbGVh
bgogd2Via2l0X3ZpZGVvX3NpbmtfdW5sb2NrKEdzdEJhc2VTaW5rKiBvYmplY3QpCiB7CiAgICAg
V2ViS2l0VmlkZW9TaW5rKiBzaW5rID0gV0VCS0lUX1ZJREVPX1NJTksob2JqZWN0KTsKKwogICAg
IHVubG9ja19idWZmZXJfbXV0ZXgoc2luay0+cHJpdik7Ci0gICAgR1NUX0NBTExfUEFSRU5UX1dJ
VEhfREVGQVVMVChHU1RfQkFTRV9TSU5LX0NMQVNTLCB1bmxvY2ssCisgICAgcmV0dXJuIEdTVF9D
QUxMX1BBUkVOVF9XSVRIX0RFRkFVTFQoR1NUX0JBU0VfU0lOS19DTEFTUywgdW5sb2NrLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9iamVjdCksIFRSVUUpOwogfQogCi1zdGF0
aWMgdm9pZAotd2Via2l0X3ZpZGVvX3Npbmtfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwg
Z3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCitz
dGF0aWMgZ2Jvb2xlYW4KK3dlYmtpdF92aWRlb19zaW5rX3N0b3AoR3N0QmFzZVNpbmsqIGJhc2Vf
c2luaykKIHsKLSAgICBXZWJLaXRWaWRlb1NpbmsqIHNpbmsgPSBXRUJLSVRfVklERU9fU0lOSyhv
YmplY3QpOwotICAgIFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBzaW5rLT5wcml2Owot
Ci0gICAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1NVUkZBQ0U6Ci0gICAgICAg
IGlmIChwcml2LT5zdXJmYWNlKQotICAgICAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHBy
aXYtPnN1cmZhY2UpOwotICAgICAgICBwcml2LT5zdXJmYWNlID0gY2Fpcm9fc3VyZmFjZV9yZWZl
cmVuY2UoKGNhaXJvX3N1cmZhY2VfdCopZ192YWx1ZV9nZXRfcG9pbnRlcih2YWx1ZSkpOwotICAg
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURf
UFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KKyAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBwcml2ID0gV0VCS0lUX1ZJREVPX1NJTkso
YmFzZV9zaW5rKS0+cHJpdjsKKyAgICB1bmxvY2tfYnVmZmVyX211dGV4KHByaXYpOworICAgIHJl
dHVybiBUUlVFOwogfQogCiBzdGF0aWMgdm9pZAotd2Via2l0X3ZpZGVvX3NpbmtfZ2V0X3Byb3Bl
cnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFt
U3BlYyogcHNwZWMpCittYXJzaGFsX1ZPSURfX01JTklPQkpFQ1QgKEdDbG9zdXJlICogY2xvc3Vy
ZSwgR1ZhbHVlICogcmV0dXJuX3ZhbHVlLAorICAgIGd1aW50IG5fcGFyYW1fdmFsdWVzLCBjb25z
dCBHVmFsdWUgKiBwYXJhbV92YWx1ZXMsIGdwb2ludGVyIGludm9jYXRpb25faGludCwKKyAgICBn
cG9pbnRlciBtYXJzaGFsX2RhdGEpCiB7Ci0gICAgV2ViS2l0VmlkZW9TaW5rKiBzaW5rID0gV0VC
S0lUX1ZJREVPX1NJTksob2JqZWN0KTsKKyAgdHlwZWRlZiB2b2lkICgqbWFyc2hhbGZ1bmNfVk9J
RF9fTUlOSU9CSkVDVCkgKGdwb2ludGVyIG9iaiwgZ3BvaW50ZXIgYXJnMSwKKyAgICAgIGdwb2lu
dGVyIGRhdGEyKTsKKyAgbWFyc2hhbGZ1bmNfVk9JRF9fTUlOSU9CSkVDVCBjYWxsYmFjazsKKyAg
R0NDbG9zdXJlICpjYyA9IChHQ0Nsb3N1cmUgKikgY2xvc3VyZTsKKyAgZ3BvaW50ZXIgZGF0YTEs
IGRhdGEyOwogCi0gICAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1NVUkZBQ0U6
Ci0gICAgICAgIGdfdmFsdWVfc2V0X3BvaW50ZXIodmFsdWUsIHNpbmstPnByaXYtPnN1cmZhY2Up
OwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBHX09CSkVDVF9XQVJOX0lO
VkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLX0KKyAgZ19yZXR1cm5faWZfZmFpbCAobl9wYXJhbV92YWx1ZXMgPT0gMik7CiAK
LXN0YXRpYyBnYm9vbGVhbgotd2Via2l0X3ZpZGVvX3Npbmtfc3RvcChHc3RCYXNlU2luayogYmFz
ZV9zaW5rKQotewotICAgIFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfVklE
RU9fU0lOSyhiYXNlX3NpbmspLT5wcml2OwotICAgIHVubG9ja19idWZmZXJfbXV0ZXgocHJpdik7
Ci0gICAgcmV0dXJuIFRSVUU7CisgIGlmIChHX0NDTE9TVVJFX1NXQVBfREFUQSAoY2xvc3VyZSkp
IHsKKyAgICBkYXRhMSA9IGNsb3N1cmUtPmRhdGE7CisgICAgZGF0YTIgPSBnX3ZhbHVlX3BlZWtf
cG9pbnRlciAocGFyYW1fdmFsdWVzICsgMCk7CisgIH0gZWxzZSB7CisgICAgZGF0YTEgPSBnX3Zh
bHVlX3BlZWtfcG9pbnRlciAocGFyYW1fdmFsdWVzICsgMCk7CisgICAgZGF0YTIgPSBjbG9zdXJl
LT5kYXRhOworICB9CisgIGNhbGxiYWNrID0KKyAgICAgIChtYXJzaGFsZnVuY19WT0lEX19NSU5J
T0JKRUNUKSAobWFyc2hhbF9kYXRhID8gbWFyc2hhbF9kYXRhIDoKKyAgICAgIGNjLT5jYWxsYmFj
ayk7CisKKyAgY2FsbGJhY2sgKGRhdGExLCBnc3RfdmFsdWVfZ2V0X21pbmlfb2JqZWN0IChwYXJh
bV92YWx1ZXMgKyAxKSwgZGF0YTIpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMzI5LDE2ICsyMzgs
MTIgQEAKIAogICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9mKFdlYktp
dFZpZGVvU2lua1ByaXZhdGUpKTsKIAotICAgIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9
IHdlYmtpdF92aWRlb19zaW5rX3NldF9wcm9wZXJ0eTsKLSAgICBnb2JqZWN0X2NsYXNzLT5nZXRf
cHJvcGVydHkgPSB3ZWJraXRfdmlkZW9fc2lua19nZXRfcHJvcGVydHk7Ci0KICAgICBnb2JqZWN0
X2NsYXNzLT5kaXNwb3NlID0gd2Via2l0X3ZpZGVvX3NpbmtfZGlzcG9zZTsKIAogICAgIGdzdGJh
c2Vfc2lua19jbGFzcy0+dW5sb2NrID0gd2Via2l0X3ZpZGVvX3NpbmtfdW5sb2NrOwogICAgIGdz
dGJhc2Vfc2lua19jbGFzcy0+cmVuZGVyID0gd2Via2l0X3ZpZGVvX3NpbmtfcmVuZGVyOwogICAg
IGdzdGJhc2Vfc2lua19jbGFzcy0+cHJlcm9sbCA9IHdlYmtpdF92aWRlb19zaW5rX3JlbmRlcjsK
ICAgICBnc3RiYXNlX3NpbmtfY2xhc3MtPnN0b3AgPSB3ZWJraXRfdmlkZW9fc2lua19zdG9wOwot
ICAgIGdzdGJhc2Vfc2lua19jbGFzcy0+c2V0X2NhcHMgPSB3ZWJraXRfdmlkZW9fc2lua19zZXRf
Y2FwczsKIAogICAgIHdlYmtpdF92aWRlb19zaW5rX3NpZ25hbHNbUkVQQUlOVF9SRVFVRVNURURd
ID0gZ19zaWduYWxfbmV3KCJyZXBhaW50LXJlcXVlc3RlZCIsCiAgICAgICAgICAgICBHX1RZUEVf
RlJPTV9DTEFTUyhrbGFzcyksCkBAIC0zNDYsMzcgKzI1MSwyMCBAQAogICAgICAgICAgICAgMCwK
ICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAwLAotICAgICAgICAgICAgZ19jY2xvc3VyZV9t
YXJzaGFsX1ZPSURfX1ZPSUQsCi0gICAgICAgICAgICBHX1RZUEVfTk9ORSwgMCk7Ci0KLSAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0X2NsYXNzLCBQ
Uk9QX1NVUkZBQ0UsCi0gICAgICAgIGdfcGFyYW1fc3BlY19wb2ludGVyKCJzdXJmYWNlIiwgInN1
cmZhY2UiLCAiVGFyZ2V0IGNhaXJvX3N1cmZhY2VfdCoiLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoR1BhcmFtRmxhZ3MpKEdfUEFSQU1fUkVBRFdSSVRFKSkpOworICAgICAgICAgICAg
bWFyc2hhbF9WT0lEX19NSU5JT0JKRUNULAorICAgICAgICAgICAgR19UWVBFX05PTkUsIDEsIEdT
VF9UWVBFX0JVRkZFUik7CiB9CiAKIC8qKgogICogd2Via2l0X3ZpZGVvX3NpbmtfbmV3OgotICog
QHN1cmZhY2U6IGEgI2NhaXJvX3N1cmZhY2VfdAogICoKLSAqIENyZWF0ZXMgYSBuZXcgR1N0cmVh
bWVyIHZpZGVvIHNpbmsgd2hpY2ggdXNlcyBAc3VyZmFjZSBhcyB0aGUgdGFyZ2V0Ci0gKiBmb3Ig
c2lua2luZyBhIHZpZGVvIHN0cmVhbSBmcm9tIEdTdHJlYW1lci4KKyAqIENyZWF0ZXMgYSBuZXcg
R1N0cmVhbWVyIHZpZGVvIHNpbmsuCiAgKgogICogUmV0dXJuIHZhbHVlOiBhICNHc3RFbGVtZW50
IGZvciB0aGUgbmV3bHkgY3JlYXRlZCB2aWRlbyBzaW5rCiAgKi8KIEdzdEVsZW1lbnQqCi13ZWJr
aXRfdmlkZW9fc2lua19uZXcoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKQord2Via2l0X3ZpZGVv
X3NpbmtfbmV3KHZvaWQpCiB7Ci0gICAgcmV0dXJuIChHc3RFbGVtZW50KilnX29iamVjdF9uZXco
V0VCS0lUX1RZUEVfVklERU9fU0lOSywgInN1cmZhY2UiLCBzdXJmYWNlLCAwKTsKKyAgICByZXR1
cm4gKEdzdEVsZW1lbnQqKWdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9WSURFT19TSU5LLCAwKTsK
IH0KIAotdm9pZAotd2Via2l0X3ZpZGVvX3Npbmtfc2V0X3N1cmZhY2UoV2ViS2l0VmlkZW9TaW5r
KiBzaW5rLCBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpCi17Ci0gICAgV2ViS2l0VmlkZW9TaW5r
UHJpdmF0ZSogcHJpdjsKLQotICAgIHNpbmstPnByaXYgPSBwcml2ID0gR19UWVBFX0lOU1RBTkNF
X0dFVF9QUklWQVRFKHNpbmssIFdFQktJVF9UWVBFX1ZJREVPX1NJTkssIFdlYktpdFZpZGVvU2lu
a1ByaXZhdGUpOwotICAgIGlmIChwcml2LT5zdXJmYWNlKQotICAgICAgICBjYWlyb19zdXJmYWNl
X2Rlc3Ryb3kocHJpdi0+c3VyZmFjZSk7Ci0gICAgcHJpdi0+c3VyZmFjZSA9IGNhaXJvX3N1cmZh
Y2VfcmVmZXJlbmNlKHN1cmZhY2UpOwotfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgJKFJl
dmlzaW9uIDQ5NDMyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyLmgJKEFyYmVpdHNrb3BpZSkKQEAgLTMwLDggKzMwLDEwIEBACiAj
aW5jbHVkZSA8Y2Fpcm8uaD4KICNpbmNsdWRlIDxnbGliLmg+CiAKK3R5cGVkZWYgc3RydWN0IF9X
ZWJLaXRWaWRlb1NpbmsgV2ViS2l0VmlkZW9TaW5rOwordHlwZWRlZiBzdHJ1Y3QgX0dzdEJ1ZmZl
ciBHc3RCdWZmZXI7Cit0eXBlZGVmIHN0cnVjdCBfR3N0TWVzc2FnZSBHc3RNZXNzYWdlOwogdHlw
ZWRlZiBzdHJ1Y3QgX0dzdEVsZW1lbnQgR3N0RWxlbWVudDsKLXR5cGVkZWYgc3RydWN0IF9Hc3RN
ZXNzYWdlIEdzdE1lc3NhZ2U7CiB0eXBlZGVmIHN0cnVjdCBfR3N0QnVzIEdzdEJ1czsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtNDksNiArNTEsNyBAQAogICAgICAgICBmcmllbmQgZ2Jvb2xl
YW4gbWVkaWFQbGF5ZXJQcml2YXRlRXJyb3JDYWxsYmFjayhHc3RCdXMqIGJ1cywgR3N0TWVzc2Fn
ZSogbWVzc2FnZSwgZ3BvaW50ZXIgZGF0YSk7CiAgICAgICAgIGZyaWVuZCBnYm9vbGVhbiBtZWRp
YVBsYXllclByaXZhdGVFT1NDYWxsYmFjayhHc3RCdXMqIGJ1cywgR3N0TWVzc2FnZSogbWVzc2Fn
ZSwgZ3BvaW50ZXIgZGF0YSk7CiAgICAgICAgIGZyaWVuZCBnYm9vbGVhbiBtZWRpYVBsYXllclBy
aXZhdGVTdGF0ZUNhbGxiYWNrKEdzdEJ1cyogYnVzLCBHc3RNZXNzYWdlKiBtZXNzYWdlLCBncG9p
bnRlciBkYXRhKTsKKwlmcmllbmQgdm9pZCBtZWRpYVBsYXllclByaXZhdGVSZXBhaW50Q2FsbGJh
Y2soV2ViS2l0VmlkZW9TaW5rKiwgR3N0QnVmZmVyICpidWZmZXIsIE1lZGlhUGxheWVyUHJpdmF0
ZSogcGxheWVyUHJpdmF0ZSk7CiAKICAgICAgICAgcHVibGljOgogICAgICAgICAgICAgc3RhdGlj
IHZvaWQgcmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhcik7CkBAIC0xMzYs
NyArMTM5LDcgQEAKICAgICAgICAgICAgIG11dGFibGUgYm9vbCBtX2lzU3RyZWFtaW5nOwogICAg
ICAgICAgICAgSW50U2l6ZSBtX3NpemU7CiAgICAgICAgICAgICBib29sIG1fdmlzaWJsZTsKLSAg
ICAgICAgICAgIGNhaXJvX3N1cmZhY2VfdCogbV9zdXJmYWNlOworICAgICAgICAgICAgR3N0QnVm
ZmVyKiBtX2J1ZmZlcjsKIAogICAgICAgICAgICAgYm9vbCBtX3BhdXNlZDsKICAgICAgICAgICAg
IGJvb2wgbV9zZWVraW5nOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvVmlk
ZW9TaW5rR1N0cmVhbWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvVmlkZW9TaW5rR1N0cmVhbWVyLmgJKFJldmlzaW9uIDQ5NDMyKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsvVmlkZW9TaW5rR1N0cmVhbWVyLmgJKEFyYmVpdHNrb3BpZSkK
QEAgLTcyLDEwICs3Miw4IEBACiB9OwogCiBHVHlwZSAgICAgICB3ZWJraXRfdmlkZW9fc2lua19n
ZXRfdHlwZSh2b2lkKSBHX0dOVUNfQ09OU1Q7Ci1Hc3RFbGVtZW50ICp3ZWJraXRfdmlkZW9fc2lu
a19uZXcoY2Fpcm9fc3VyZmFjZV90ICpzdXJmYWNlKTsKK0dzdEVsZW1lbnQgKndlYmtpdF92aWRl
b19zaW5rX25ldyh2b2lkKTsKIAotdm9pZCB3ZWJraXRfdmlkZW9fc2lua19zZXRfc3VyZmFjZShX
ZWJLaXRWaWRlb1NpbmsgKnNpbmssIGNhaXJvX3N1cmZhY2VfdCAqc3VyZmFjZSk7Ci0KIEdfRU5E
X0RFQ0xTCiAKICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41024</attachid>
            <date>2009-10-12 01:29:19 -0700</date>
            <delta_ts>2009-10-12 06:42:35 -0700</delta_ts>
            <desc>double-memcpy.diff</desc>
            <filename>double-memcpy.diff</filename>
            <type>text/plain</type>
            <size>18225</size>
            <attacher name="Sebastian Dröge (slomo)">slomo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShSZXZpc2lvbiA0OTQzNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCShBcmJlaXRza29waWUpCkBA
IC0xLDMgKzEsMzAgQEAKKzIwMDktMTAtMTIgIFNlYmFzdGlhbiBEcsO2Z2UgIDxzZWJhc3RpYW4u
ZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Mjk5OTcKKyAgICAgICAgCisgICAgICAgIEZpeGVzIGRvdWJsZSBtZW1jcHkgb2YgYWxsIHJlbmRl
cmVkIHZpZGVvIGZyYW1lcy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWVkaWFQbGF5
ZXJQcml2YXRlUmVwYWludENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZTo6TWVkaWFQbGF5ZXJQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZTo6fk1lZGlhUGxheWVyUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGU6OmR1cmF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
dGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL1ZpZGVvU2lua0dTdHJlYW1lci5jcHA6CisgICAgICAgICh3ZWJraXRfdmlkZW9f
c2lua190aW1lb3V0X2Z1bmMpOgorICAgICAgICAod2Via2l0X3ZpZGVvX3NpbmtfZGlzcG9zZSk6
CisgICAgICAgICh1bmxvY2tfYnVmZmVyX211dGV4KToKKyAgICAgICAgKHdlYmtpdF92aWRlb19z
aW5rX3VubG9jayk6CisgICAgICAgIChtYXJzaGFsX1ZPSURfX01JTklPQkpFQ1QpOgorICAgICAg
ICAod2Via2l0X3ZpZGVvX3NpbmtfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfdmlkZW9f
c2lua19uZXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9WaWRlb1NpbmtHU3Ry
ZWFtZXIuaDoKKyAgICAgICAgRGlyZWN0bHkgcGFzcyB0aGUgYnVmZmVycyB1cCB0byB0aGUgTWVk
aWFQbGF5ZXJQcml2YXRlOjpwYWludCgpCisgICAgICAgIG1ldGhvZCBpbnN0ZWFkIG9mIHJlbmRl
cmluZyB0aGVtIGZpcnN0IHRvIGFuIGludGVybWVkaWF0ZSBjYWlybworICAgICAgICBzdXJmYWNl
LiBUaGlzIHNob3VsZCBpbmNyZWFzZSBwZXJmb3JtYW5jZSBhbmQgcGVhayBtZW1vcnkgdXNhZ2Uu
CisKIDIwMDktMTAtMTEgIERhbmllbCBCYXRlcyAgPGRiYXRlc0B3ZWJraXQub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ndGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIu
Y3BwCTIwMDktMTAtMTIgMTA6MDM6MzMuMDAwMDAwMDAwICswMjAwCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2d0ay9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCTIwMDktMTAt
MTIgMTA6MDY6MTcuMDAwMDAwMDAwICswMjAwCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAi
V2lkZ2V0LmgiCiAjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgogCi0jaW5jbHVkZSA8Z3N0L2Jhc2Uv
Z3N0YmFzZXNyYy5oPgogI2luY2x1ZGUgPGdzdC9nc3QuaD4KICNpbmNsdWRlIDxnc3QvaW50ZXJm
YWNlcy9taXhlci5oPgogI2luY2x1ZGUgPGdzdC9pbnRlcmZhY2VzL3hvdmVybGF5Lmg+CkBAIC0x
MDUsOCArMTA0LDEwIEBACiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyB2b2lkIG1lZGlh
UGxheWVyUHJpdmF0ZVJlcGFpbnRDYWxsYmFjayhXZWJLaXRWaWRlb1NpbmsqLCBNZWRpYVBsYXll
clByaXZhdGUqIHBsYXllclByaXZhdGUpCit2b2lkIG1lZGlhUGxheWVyUHJpdmF0ZVJlcGFpbnRD
YWxsYmFjayhXZWJLaXRWaWRlb1NpbmsqLCBHc3RCdWZmZXIgKmJ1ZmZlciwgTWVkaWFQbGF5ZXJQ
cml2YXRlKiBwbGF5ZXJQcml2YXRlKQogeworICAgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19C
VUZGRVIoYnVmZmVyKSk7CisgICAgZ3N0X2J1ZmZlcl9yZXBsYWNlICgmcGxheWVyUHJpdmF0ZS0+
bV9idWZmZXIsIGJ1ZmZlcik7CiAgICAgcGxheWVyUHJpdmF0ZS0+cmVwYWludCgpOwogfQogCkBA
IC0xNDgsMjAgKzE0OSwxOSBAQAogICAgICwgbV9pc1N0cmVhbWluZyhmYWxzZSkKICAgICAsIG1f
c2l6ZShJbnRTaXplKCkpCiAgICAgLCBtX3Zpc2libGUodHJ1ZSkKKyAgICAsIG1fYnVmZmVyKDAp
CiAgICAgLCBtX3BhdXNlZCh0cnVlKQogICAgICwgbV9zZWVraW5nKGZhbHNlKQogICAgICwgbV9l
cnJvck9jY3VyZWQoZmFsc2UpCiB7CiAgICAgZG9fZ3N0X2luaXQoKTsKLQotICAgIC8vIEZJWE1F
OiBUaGUgc2l6ZSBzaG91bGRuJ3QgYmUgZml4ZWQgaGVyZSwgdGhpcyBpcyBqdXN0IGEgcXVpY2sg
aGFjay4KLSAgICBtX3N1cmZhY2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlST19G
T1JNQVRfQVJHQjMyLCA2NDAsIDQ4MCk7CiB9CiAKIE1lZGlhUGxheWVyUHJpdmF0ZTo6fk1lZGlh
UGxheWVyUHJpdmF0ZSgpCiB7Ci0gICAgaWYgKG1fc3VyZmFjZSkKLSAgICAgICAgY2Fpcm9fc3Vy
ZmFjZV9kZXN0cm95KG1fc3VyZmFjZSk7CisgICAgaWYgKG1fYnVmZmVyKQorICAgICAgICBnc3Rf
YnVmZmVyX3VucmVmIChtX2J1ZmZlcik7CisgICAgbV9idWZmZXIgPSAwOwogCiAgICAgaWYgKG1f
cGxheUJpbikgewogICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9wbGF5QmluLCBHU1Rf
U1RBVEVfTlVMTCk7CkBAIC0zMjcsMTQgKzMyNywxNiBAQAogICAgIC8vIGh0dHBzOi8vYnVnemls
bGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01OTYzMjYKICAgICBpbnQgd2lkdGggPSAwLCBo
ZWlnaHQgPSAwOwogICAgIGlmIChHc3RQYWQqIHBhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNf
cGFkKG1fdmlkZW9TaW5rLCAic2luayIpKSB7Ci0gICAgICAgIGdzdF92aWRlb19nZXRfc2l6ZShH
U1RfUEFEKHBhZCksICZ3aWR0aCwgJmhlaWdodCk7CiAgICAgICAgIEdzdENhcHMqIGNhcHMgPSBH
U1RfUEFEX0NBUFMocGFkKTsKICAgICAgICAgZ2Zsb2F0IHBpeGVsQXNwZWN0UmF0aW87CiAgICAg
ICAgIGdpbnQgcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciwgcGl4ZWxBc3BlY3RSYXRpb0Rlbm9t
aW5hdG9yOwogCi0gICAgICAgIGlmICghZ3N0X3ZpZGVvX3BhcnNlX2NhcHNfcGl4ZWxfYXNwZWN0
X3JhdGlvKGNhcHMsICZwaXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGl4ZWxBc3BlY3RSYXRpb0Rl
bm9taW5hdG9yKSkKLSAgICAgICAgICAgIHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3IgPSBwaXhl
bEFzcGVjdFJhdGlvRGVub21pbmF0b3IgPSAxOworICAgICAgICBpZiAoIWdzdF92aWRlb19mb3Jt
YXRfcGFyc2VfY2FwcyAoY2FwcywgTlVMTCwgJndpZHRoLCAmaGVpZ2h0KSB8fAorICAgICAgICAg
ICAgIWdzdF92aWRlb19wYXJzZV9jYXBzX3BpeGVsX2FzcGVjdF9yYXRpbyAoY2FwcywgJnBpeGVs
QXNwZWN0UmF0aW9OdW1lcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3IpKSB7
CisgICAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUKHBhZCkpOworICAgICAg
ICAgICAgcmV0dXJuIEludFNpemUgKCk7CisgICAgICAgIH0KIAogICAgICAgICBwaXhlbEFzcGVj
dFJhdGlvID0gKGdmbG9hdCkgcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciAvIChnZmxvYXQpIHBp
eGVsQXNwZWN0UmF0aW9EZW5vbWluYXRvcjsKICAgICAgICAgd2lkdGggKj0gcGl4ZWxBc3BlY3RS
YXRpbzsKQEAgLTYyNiwxOCArNjI4LDcgQEAKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNl
dFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICAvLyBEZXN0cm95IGFuZCByZS1jcmVh
dGUgdGhlIGNhaXJvIHN1cmZhY2Ugb25seSBpZiB0aGUgc2l6ZQotICAgIC8vIGNoYW5nZWQuCi0g
ICAgaWYgKHNpemUgIT0gbV9zaXplKSB7Ci0gICAgICAgIGlmIChtX3N1cmZhY2UpCi0gICAgICAg
ICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kobV9zdXJmYWNlKTsKLSAgICAgICAgbV9zdXJmYWNl
ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0FSR0IzMiwgc2l6ZS53
aWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplLmhlaWdodCgpKTsKLSAgICAgICAgZ19vYmplY3Rfc2V0KG1fdmlkZW9TaW5rLCAic3VyZmFj
ZSIsIG1fc3VyZmFjZSwgMCk7Ci0gICAgfQotCiAgICAgbV9zaXplID0gc2l6ZTsKLQogfQogCiB2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCkBAIC02NTcs
OCArNjQ4LDIzIEBACiAKICAgICBpZiAoIW1fdmlzaWJsZSkKICAgICAgICAgcmV0dXJuOworICAg
IGlmICghbV9idWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGludCB3aWR0aCA9IDAsIGhl
aWdodCA9IDAsIHBhcl9uID0gMCwgcGFyX2QgPSAwOworICAgIGRvdWJsZSBkcGFyX24gPSAwLCBk
cGFyX2QgPSAwOworICAgIEdzdENhcHMgKmNhcHMgPSBnc3RfYnVmZmVyX2dldF9jYXBzIChtX2J1
ZmZlcik7CisgICAgaWYgKCFnc3RfdmlkZW9fZm9ybWF0X3BhcnNlX2NhcHMgKEdTVF9CVUZGRVJf
Q0FQUyAobV9idWZmZXIpLCBOVUxMLCAmd2lkdGgsICZoZWlnaHQpIHx8CisgICAgICAgICFnc3Rf
dmlkZW9fcGFyc2VfY2Fwc19waXhlbF9hc3BlY3RfcmF0aW8oY2FwcywgJnBhcl9uLCAmcGFyX2Qp
KQorICAgICAgcmV0dXJuOwogCisgICAgZHBhcl9uID0gcGFyX247CisgICAgZHBhcl9kID0gcGFy
X2Q7CiAgICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBj
YWlyb19zdXJmYWNlX3QqIHNyYyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRh
KEdTVF9CVUZGRVJfREFUQShtX2J1ZmZlciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQUlST19GT1JNQVRfUkdCMjQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAqIHdpZHRoKTsKIAogICAgIGNhaXJvX3NhdmUo
Y3IpOwogICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsK
QEAgLTY2Niw5ICs2NzIsMTMgQEAKICAgICAvLyBwYWludCB0aGUgcmVjdGFuZ2xlIG9uIHRoZSBj
b250ZXh0IGFuZCBkcmF3IHRoZSBzdXJmYWNlIGluc2lkZS4KICAgICBjYWlyb190cmFuc2xhdGUo
Y3IsIHJlY3QueCgpLCByZWN0LnkoKSk7CiAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCAwLCAwLCBy
ZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFj
ZShjciwgbV9zdXJmYWNlLCAwLCAwKTsKKyAgICBjYWlyb19zY2FsZSAoY3IsIGRwYXJfbiAvIGRw
YXJfZCwgZHBhcl9kIC8gZHBhcl9uKTsKKyAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3Is
IHNyYywgMCwgMCk7CiAgICAgY2Fpcm9fZmlsbChjcik7CiAgICAgY2Fpcm9fcmVzdG9yZShjcik7
CisgICAgCisgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95IChzcmMpOworICAgIGdzdF9jYXBzX3Vu
cmVmIChjYXBzKTsKIH0KIAogc3RhdGljIEhhc2hTZXQ8U3RyaW5nPiBtaW1lVHlwZUNhY2hlKCkK
QEAgLTgwMCw3ICs4MTAsNyBAQAogCiAgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKG1fcGxheUJp
biksICJ1cmkiLCB1cmwudXRmOCgpLmRhdGEoKSwgTlVMTCk7CiAKLSAgICBtX3ZpZGVvU2luayA9
IHdlYmtpdF92aWRlb19zaW5rX25ldyhtX3N1cmZhY2UpOworICAgIG1fdmlkZW9TaW5rID0gd2Vi
a2l0X3ZpZGVvX3NpbmtfbmV3KCk7CiAKICAgICBnX29iamVjdF9yZWZfc2luayhtX3ZpZGVvU2lu
ayk7CiAgICAgZ19vYmplY3Rfc2V0KG1fcGxheUJpbiwgInZpZGVvLXNpbmsiLCBtX3ZpZGVvU2lu
aywgTlVMTCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2d0ay9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAkyMDA5LTEwLTEyIDEwOjAzOjMz
LjAwMDAwMDAwMCArMDIwMAorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgJMjAwOS0xMC0xMiAxMDowMzo1NC4wMDAwMDAwMDAgKzAy
MDAKQEAgLTMwLDggKzMwLDEwIEBACiAjaW5jbHVkZSA8Y2Fpcm8uaD4KICNpbmNsdWRlIDxnbGli
Lmg+CiAKLXR5cGVkZWYgc3RydWN0IF9Hc3RFbGVtZW50IEdzdEVsZW1lbnQ7Cit0eXBlZGVmIHN0
cnVjdCBfV2ViS2l0VmlkZW9TaW5rIFdlYktpdFZpZGVvU2luazsKK3R5cGVkZWYgc3RydWN0IF9H
c3RCdWZmZXIgR3N0QnVmZmVyOwogdHlwZWRlZiBzdHJ1Y3QgX0dzdE1lc3NhZ2UgR3N0TWVzc2Fn
ZTsKK3R5cGVkZWYgc3RydWN0IF9Hc3RFbGVtZW50IEdzdEVsZW1lbnQ7CiB0eXBlZGVmIHN0cnVj
dCBfR3N0QnVzIEdzdEJ1czsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDksNiArNTEsNyBA
QAogICAgICAgICBmcmllbmQgZ2Jvb2xlYW4gbWVkaWFQbGF5ZXJQcml2YXRlRXJyb3JDYWxsYmFj
ayhHc3RCdXMqIGJ1cywgR3N0TWVzc2FnZSogbWVzc2FnZSwgZ3BvaW50ZXIgZGF0YSk7CiAgICAg
ICAgIGZyaWVuZCBnYm9vbGVhbiBtZWRpYVBsYXllclByaXZhdGVFT1NDYWxsYmFjayhHc3RCdXMq
IGJ1cywgR3N0TWVzc2FnZSogbWVzc2FnZSwgZ3BvaW50ZXIgZGF0YSk7CiAgICAgICAgIGZyaWVu
ZCBnYm9vbGVhbiBtZWRpYVBsYXllclByaXZhdGVTdGF0ZUNhbGxiYWNrKEdzdEJ1cyogYnVzLCBH
c3RNZXNzYWdlKiBtZXNzYWdlLCBncG9pbnRlciBkYXRhKTsKKwlmcmllbmQgdm9pZCBtZWRpYVBs
YXllclByaXZhdGVSZXBhaW50Q2FsbGJhY2soV2ViS2l0VmlkZW9TaW5rKiwgR3N0QnVmZmVyICpi
dWZmZXIsIE1lZGlhUGxheWVyUHJpdmF0ZSogcGxheWVyUHJpdmF0ZSk7CiAKICAgICAgICAgcHVi
bGljOgogICAgICAgICAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVu
Z2luZVJlZ2lzdHJhcik7CkBAIC0xMzYsNyArMTM5LDcgQEAKICAgICAgICAgICAgIG11dGFibGUg
Ym9vbCBtX2lzU3RyZWFtaW5nOwogICAgICAgICAgICAgSW50U2l6ZSBtX3NpemU7CiAgICAgICAg
ICAgICBib29sIG1fdmlzaWJsZTsKLSAgICAgICAgICAgIGNhaXJvX3N1cmZhY2VfdCogbV9zdXJm
YWNlOworICAgICAgICAgICAgR3N0QnVmZmVyKiBtX2J1ZmZlcjsKIAogICAgICAgICAgICAgYm9v
bCBtX3BhdXNlZDsKICAgICAgICAgICAgIGJvb2wgbV9zZWVraW5nOwpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsvVmlkZW9TaW5rR1N0cmVhbWVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwCTIw
MDktMTAtMTIgMTA6MDM6MzcuMDAwMDAwMDAwICswMjAwCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2d0ay9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwCTIwMDktMTAtMTIgMTA6MDQ6NDcuMDAw
MDAwMDAwICswMjAwCkBAIC0yMSw4ICsyMSw5IEBACiAgKiBTRUNUSU9OOndlYmtpdC12aWRlby1z
aW5rCiAgKiBAc2hvcnRfZGVzY3JpcHRpb246IEdTdHJlYW1lciB2aWRlbyBzaW5rCiAgKgotICog
I1dlYktpdFZpZGVvU2luayBpcyBhIEdTdHJlYW1lciBzaW5rIGVsZW1lbnQgdGhhdCBzZW5kcwot
ICogZGF0YSB0byBhICNjYWlyb19zdXJmYWNlX3QuCisgKiAjV2ViS2l0VmlkZW9TaW5rIGlzIGEg
R1N0cmVhbWVyIHNpbmsgZWxlbWVudCB0aGF0IHRyaWdnZXJzCisgKiByZXBhaW50cyBpbiB0aGUg
V2ViS2l0IEdTdHJlYW1lciBtZWRpYSBwbGF5ZXIgZm9yIHRoZQorICogY3VycmVudCB2aWRlbyBi
dWZmZXIuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpAQCAtNTcsMjEgKzU4LDEyIEBACiB9
OwogCiBlbnVtIHsKLSAgICBQUk9QXzAsCi0gICAgUFJPUF9TVVJGQUNFCisgICAgUFJPUF8wCiB9
OwogCiBzdGF0aWMgZ3VpbnQgd2Via2l0X3ZpZGVvX3Npbmtfc2lnbmFsc1tMQVNUX1NJR05BTF0g
PSB7IDAsIH07CiAKIHN0cnVjdCBfV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSB7Ci0gICAgY2Fpcm9f
c3VyZmFjZV90KiBzdXJmYWNlOwotICAgIGdib29sZWFuIHJnYl9vcmRlcmluZzsKLSAgICBpbnQg
d2lkdGg7Ci0gICAgaW50IGhlaWdodDsKLSAgICBpbnQgZnBzX247Ci0gICAgaW50IGZwc19kOwot
ICAgIGludCBwYXJfbjsKLSAgICBpbnQgcGFyX2Q7CiAgICAgR3N0QnVmZmVyKiBidWZmZXI7CiAg
ICAgZ3VpbnQgdGltZW91dF9pZDsKICAgICBHTXV0ZXgqIGJ1ZmZlcl9tdXRleDsKQEAgLTExNSwx
NCArMTA3LDEwIEBACiAgICAgV2ViS2l0VmlkZW9TaW5rKiBzaW5rID0gcmVpbnRlcnByZXRfY2Fz
dDxXZWJLaXRWaWRlb1NpbmsqPihkYXRhKTsKICAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBw
cml2ID0gc2luay0+cHJpdjsKICAgICBHc3RCdWZmZXIqIGJ1ZmZlcjsKLSAgICBHc3RDYXBzKiBj
YXBzOwotICAgIEdzdFZpZGVvRm9ybWF0IGZvcm1hdDsKLSAgICBnaW50IHBhcl9uLCBwYXJfZDsK
LSAgICBnZmxvYXQgcGFyOwotICAgIGdpbnQgYndpZHRoLCBiaGVpZ2h0OwogCiAgICAgZ19tdXRl
eF9sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CiAgICAgYnVmZmVyID0gcHJpdi0+YnVmZmVyOwor
ICAgIHByaXYtPmJ1ZmZlciA9IDA7CiAgICAgcHJpdi0+dGltZW91dF9pZCA9IDA7CiAKICAgICBp
ZiAoIWJ1ZmZlciB8fCBHX1VOTElLRUxZKCFHU1RfSVNfQlVGRkVSKGJ1ZmZlcikpKSB7CkBAIC0x
MzEsMzkgKzExOSwxMyBAQAogICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogCi0gICAgY2Fw
cyA9IEdTVF9CVUZGRVJfQ0FQUyhidWZmZXIpOwotICAgIGlmICghZ3N0X3ZpZGVvX2Zvcm1hdF9w
YXJzZV9jYXBzKGNhcHMsICZmb3JtYXQsICZid2lkdGgsICZiaGVpZ2h0KSkgewotICAgICAgICBH
U1RfRVJST1JfT0JKRUNUKHNpbmssICJVbmtub3duIHZpZGVvIGZvcm1hdCBpbiBidWZmZXIgY2Fw
cyAnJXMnIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBnc3RfY2Fwc190b19zdHJpbmcoY2Fw
cykpOwotICAgICAgICBnX2NvbmRfc2lnbmFsKHByaXYtPmRhdGFfY29uZCk7Ci0gICAgICAgIGdf
bXV0ZXhfdW5sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7Ci0gICAgICAgIHJldHVybiBGQUxTRTsK
KyAgICBpZiAoR19VTkxJS0VMWSAoIUdTVF9CVUZGRVJfQ0FQUyAoYnVmZmVyKSkpIHsKKyAgICAg
IGJ1ZmZlciA9IGdzdF9idWZmZXJfbWFrZV9tZXRhZGF0YV93cml0YWJsZSAoYnVmZmVyKTsKKyAg
ICAgIGdzdF9idWZmZXJfc2V0X2NhcHMgKGJ1ZmZlciwgR1NUX1BBRF9DQVBTIChHU1RfQkFTRV9T
SU5LX1BBRCAoc2luaykpKTsKICAgICB9CiAKLSAgICBpZiAoIWdzdF92aWRlb19wYXJzZV9jYXBz
X3BpeGVsX2FzcGVjdF9yYXRpbyhjYXBzLCAmcGFyX24sICZwYXJfZCkpCi0gICAgICAgIHBhcl9u
ID0gcGFyX2QgPSAxOwotCi0gICAgcGFyID0gKGdmbG9hdCkgcGFyX24gLyAoZ2Zsb2F0KSBwYXJf
ZDsKLQotICAgIGNhaXJvX3N1cmZhY2VfdCogc3JjID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVh
dGVfZm9yX2RhdGEoR1NUX0JVRkZFUl9EQVRBKGJ1ZmZlciksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQUlST19GT1JNQVRf
UkdCMjQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBid2lkdGgsIGJoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICogYndpZHRoKTsKLQotICAg
IC8vIFRPRE86IFdlIGNvcHkgdGhlIGRhdGEgdHdpY2UgcmlnaHQgbm93LiBUaGlzIGNvdWxkIGJl
IGVhc2lseSBpbXByb3ZlZC4KLSAgICBjYWlyb190KiBjciA9IGNhaXJvX2NyZWF0ZShwcml2LT5z
dXJmYWNlKTsKLSAgICBjYWlyb19zY2FsZShjciwgcGFyLCAxLjAgLyBwYXIpOwotICAgIGNhaXJv
X3NldF9vcGVyYXRvcihjciwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKLSAgICBjYWlyb19zZXRf
c291cmNlX3N1cmZhY2UoY3IsIHNyYywgMCwgMCk7Ci0gICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95
KHNyYyk7Ci0gICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCAwLCAwLCBwcml2LT53aWR0aCwgcHJpdi0+
aGVpZ2h0KTsKLSAgICBjYWlyb19maWxsKGNyKTsKLSAgICBjYWlyb19kZXN0cm95KGNyKTsKLQor
ICAgIGdfc2lnbmFsX2VtaXQoc2luaywgd2Via2l0X3ZpZGVvX3Npbmtfc2lnbmFsc1tSRVBBSU5U
X1JFUVVFU1RFRF0sIDAsIGJ1ZmZlcik7CiAgICAgZ3N0X2J1ZmZlcl91bnJlZihidWZmZXIpOwot
ICAgIHByaXYtPmJ1ZmZlciA9IDA7Ci0KLSAgICBnX3NpZ25hbF9lbWl0KHNpbmssIHdlYmtpdF92
aWRlb19zaW5rX3NpZ25hbHNbUkVQQUlOVF9SRVFVRVNURURdLCAwKTsKICAgICBnX2NvbmRfc2ln
bmFsKHByaXYtPmRhdGFfY29uZCk7CiAgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVyX211
dGV4KTsKIApAQCAtMTkwLDU5ICsxNTIsMTIgQEAKICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7CiB9
CiAKLXN0YXRpYyBnYm9vbGVhbgotd2Via2l0X3ZpZGVvX3Npbmtfc2V0X2NhcHMoR3N0QmFzZVNp
bmsqIGJzaW5rLCBHc3RDYXBzKiBjYXBzKQotewotICAgIFdlYktpdFZpZGVvU2luayogc2luayA9
IFdFQktJVF9WSURFT19TSU5LKGJzaW5rKTsKLSAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBw
cml2ID0gc2luay0+cHJpdjsKLSAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKLSAgICBnYm9v
bGVhbiByZXQ7Ci0gICAgZ2ludCB3aWR0aCwgaGVpZ2h0LCBmcHNfbiwgZnBzX2Q7Ci0gICAgaW50
IHJlZF9tYXNrOwotCi0gICAgR3N0Q2FwcyogaW50ZXJzZWN0aW9uID0gZ3N0X2NhcHNfaW50ZXJz
ZWN0KGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldF9jYXBzKCZzaW5rdGVtcGxhdGUpLCBjYXBz
KTsKLQotICAgIGlmIChnc3RfY2Fwc19pc19lbXB0eShpbnRlcnNlY3Rpb24pKQotICAgICAgICBy
ZXR1cm4gRkFMU0U7Ci0KLSAgICBnc3RfY2Fwc191bnJlZihpbnRlcnNlY3Rpb24pOwotCi0gICAg
c3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZShjYXBzLCAwKTsKLQotICAgIHJldCA9
IGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludChzdHJ1Y3R1cmUsICJ3aWR0aCIsICZ3aWR0aCk7Ci0gICAg
cmV0ICY9IGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludChzdHJ1Y3R1cmUsICJoZWlnaHQiLCAmaGVpZ2h0
KTsKLQotICAgIC8qIFdlIGRvbnQgeWV0IHVzZSBmcHMgYnV0IGhhbmR5IHRvIGhhdmUgKi8KLSAg
ICByZXQgJj0gZ3N0X3N0cnVjdHVyZV9nZXRfZnJhY3Rpb24oc3RydWN0dXJlLCAiZnJhbWVyYXRl
IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZwc19uLCAmZnBzX2Qp
OwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHJldCwgRkFMU0UpOwotCi0gICAgcHJpdi0+d2lk
dGggPSB3aWR0aDsKLSAgICBwcml2LT5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgcHJpdi0+ZnBzX24g
PSBmcHNfbjsKLSAgICBwcml2LT5mcHNfZCA9IGZwc19kOwotCi0gICAgaWYgKCFnc3Rfc3RydWN0
dXJlX2dldF9mcmFjdGlvbihzdHJ1Y3R1cmUsICJwaXhlbC1hc3BlY3QtcmF0aW8iLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByaXYtPnBhcl9uLCAmcHJpdi0+cGFyX2Qp
KQotICAgICAgICBwcml2LT5wYXJfbiA9IHByaXYtPnBhcl9kID0gMTsKLQotICAgIGdzdF9zdHJ1
Y3R1cmVfZ2V0X2ludChzdHJ1Y3R1cmUsICJyZWRfbWFzayIsICZyZWRfbWFzayk7Ci0gICAgcHJp
di0+cmdiX29yZGVyaW5nID0gKHJlZF9tYXNrID09IHN0YXRpY19jYXN0PGludD4oMHhmZjAwMDAw
MCkpOwotCi0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KIHN0YXRpYyB2b2lkCiB3ZWJraXRfdmlkZW9f
c2lua19kaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKIHsKICAgICBXZWJLaXRWaWRlb1NpbmsqIHNp
bmsgPSBXRUJLSVRfVklERU9fU0lOSyhvYmplY3QpOwogICAgIFdlYktpdFZpZGVvU2lua1ByaXZh
dGUqIHByaXYgPSBzaW5rLT5wcml2OwogCi0gICAgaWYgKHByaXYtPnN1cmZhY2UpIHsKLSAgICAg
ICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHByaXYtPnN1cmZhY2UpOwotICAgICAgICBwcml2LT5z
dXJmYWNlID0gMDsKLSAgICB9Ci0KICAgICBpZiAocHJpdi0+ZGF0YV9jb25kKSB7CiAgICAgICAg
IGdfY29uZF9mcmVlKHByaXYtPmRhdGFfY29uZCk7CiAgICAgICAgIHByaXYtPmRhdGFfY29uZCA9
IDA7CkBAIC0yNjgsNTEgKzE4MywxOCBAQAogCiAgICAgZ19jb25kX3NpZ25hbChwcml2LT5kYXRh
X2NvbmQpOwogICAgIGdfbXV0ZXhfdW5sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7Ci0KIH0KIAog
c3RhdGljIGdib29sZWFuCiB3ZWJraXRfdmlkZW9fc2lua191bmxvY2soR3N0QmFzZVNpbmsqIG9i
amVjdCkKIHsKICAgICBXZWJLaXRWaWRlb1NpbmsqIHNpbmsgPSBXRUJLSVRfVklERU9fU0lOSyhv
YmplY3QpOworCiAgICAgdW5sb2NrX2J1ZmZlcl9tdXRleChzaW5rLT5wcml2KTsKLSAgICBHU1Rf
Q0FMTF9QQVJFTlRfV0lUSF9ERUZBVUxUKEdTVF9CQVNFX1NJTktfQ0xBU1MsIHVubG9jaywKKyAg
ICByZXR1cm4gR1NUX0NBTExfUEFSRU5UX1dJVEhfREVGQVVMVChHU1RfQkFTRV9TSU5LX0NMQVNT
LCB1bmxvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob2JqZWN0KSwgVFJV
RSk7CiB9CiAKLXN0YXRpYyB2b2lkCi13ZWJraXRfdmlkZW9fc2lua19zZXRfcHJvcGVydHkoR09i
amVjdCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1T
cGVjKiBwc3BlYykKLXsKLSAgICBXZWJLaXRWaWRlb1NpbmsqIHNpbmsgPSBXRUJLSVRfVklERU9f
U0lOSyhvYmplY3QpOwotICAgIFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBzaW5rLT5w
cml2OwotCi0gICAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1NVUkZBQ0U6Ci0g
ICAgICAgIGlmIChwcml2LT5zdXJmYWNlKQotICAgICAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0
cm95KHByaXYtPnN1cmZhY2UpOwotICAgICAgICBwcml2LT5zdXJmYWNlID0gY2Fpcm9fc3VyZmFj
ZV9yZWZlcmVuY2UoKGNhaXJvX3N1cmZhY2VfdCopZ192YWx1ZV9nZXRfcG9pbnRlcih2YWx1ZSkp
OwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBHX09CSkVDVF9XQVJOX0lO
VkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQKLXdlYmtpdF92aWRlb19zaW5rX2dldF9wcm9wZXJ0
eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNw
ZWMqIHBzcGVjKQotewotICAgIFdlYktpdFZpZGVvU2luayogc2luayA9IFdFQktJVF9WSURFT19T
SU5LKG9iamVjdCk7Ci0KLSAgICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfU1VS
RkFDRToKLSAgICAgICAgZ192YWx1ZV9zZXRfcG9pbnRlcih2YWx1ZSwgc2luay0+cHJpdi0+c3Vy
ZmFjZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdfT0JKRUNUX1dB
Uk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotfQotCiBzdGF0aWMgZ2Jvb2xlYW4KIHdlYmtpdF92aWRlb19zaW5rX3N0
b3AoR3N0QmFzZVNpbmsqIGJhc2Vfc2luaykKIHsKQEAgLTMyMiw2ICsyMDQsMzMgQEAKIH0KIAog
c3RhdGljIHZvaWQKK21hcnNoYWxfVk9JRF9fTUlOSU9CSkVDVCAoR0Nsb3N1cmUgKiBjbG9zdXJl
LCBHVmFsdWUgKiByZXR1cm5fdmFsdWUsCisgICAgZ3VpbnQgbl9wYXJhbV92YWx1ZXMsIGNvbnN0
IEdWYWx1ZSAqIHBhcmFtX3ZhbHVlcywgZ3BvaW50ZXIgaW52b2NhdGlvbl9oaW50LAorICAgIGdw
b2ludGVyIG1hcnNoYWxfZGF0YSkKK3sKKyAgdHlwZWRlZiB2b2lkICgqbWFyc2hhbGZ1bmNfVk9J
RF9fTUlOSU9CSkVDVCkgKGdwb2ludGVyIG9iaiwgZ3BvaW50ZXIgYXJnMSwKKyAgICAgIGdwb2lu
dGVyIGRhdGEyKTsKKyAgbWFyc2hhbGZ1bmNfVk9JRF9fTUlOSU9CSkVDVCBjYWxsYmFjazsKKyAg
R0NDbG9zdXJlICpjYyA9IChHQ0Nsb3N1cmUgKikgY2xvc3VyZTsKKyAgZ3BvaW50ZXIgZGF0YTEs
IGRhdGEyOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKG5fcGFyYW1fdmFsdWVzID09IDIpOworCisg
IGlmIChHX0NDTE9TVVJFX1NXQVBfREFUQSAoY2xvc3VyZSkpIHsKKyAgICBkYXRhMSA9IGNsb3N1
cmUtPmRhdGE7CisgICAgZGF0YTIgPSBnX3ZhbHVlX3BlZWtfcG9pbnRlciAocGFyYW1fdmFsdWVz
ICsgMCk7CisgIH0gZWxzZSB7CisgICAgZGF0YTEgPSBnX3ZhbHVlX3BlZWtfcG9pbnRlciAocGFy
YW1fdmFsdWVzICsgMCk7CisgICAgZGF0YTIgPSBjbG9zdXJlLT5kYXRhOworICB9CisgIGNhbGxi
YWNrID0KKyAgICAgIChtYXJzaGFsZnVuY19WT0lEX19NSU5JT0JKRUNUKSAobWFyc2hhbF9kYXRh
ID8gbWFyc2hhbF9kYXRhIDoKKyAgICAgIGNjLT5jYWxsYmFjayk7CisKKyAgY2FsbGJhY2sgKGRh
dGExLCBnc3RfdmFsdWVfZ2V0X21pbmlfb2JqZWN0IChwYXJhbV92YWx1ZXMgKyAxKSwgZGF0YTIp
OworfQorCitzdGF0aWMgdm9pZAogd2Via2l0X3ZpZGVvX3NpbmtfY2xhc3NfaW5pdChXZWJLaXRW
aWRlb1NpbmtDbGFzcyoga2xhc3MpCiB7CiAgICAgR09iamVjdENsYXNzKiBnb2JqZWN0X2NsYXNz
ID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3MpOwpAQCAtMzI5LDE2ICsyMzgsMTIgQEAKIAogICAgIGdf
dHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9mKFdlYktpdFZpZGVvU2lua1ByaXZh
dGUpKTsKIAotICAgIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF92aWRlb19z
aW5rX3NldF9wcm9wZXJ0eTsKLSAgICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJr
aXRfdmlkZW9fc2lua19nZXRfcHJvcGVydHk7Ci0KICAgICBnb2JqZWN0X2NsYXNzLT5kaXNwb3Nl
ID0gd2Via2l0X3ZpZGVvX3NpbmtfZGlzcG9zZTsKIAogICAgIGdzdGJhc2Vfc2lua19jbGFzcy0+
dW5sb2NrID0gd2Via2l0X3ZpZGVvX3NpbmtfdW5sb2NrOwogICAgIGdzdGJhc2Vfc2lua19jbGFz
cy0+cmVuZGVyID0gd2Via2l0X3ZpZGVvX3NpbmtfcmVuZGVyOwogICAgIGdzdGJhc2Vfc2lua19j
bGFzcy0+cHJlcm9sbCA9IHdlYmtpdF92aWRlb19zaW5rX3JlbmRlcjsKICAgICBnc3RiYXNlX3Np
bmtfY2xhc3MtPnN0b3AgPSB3ZWJraXRfdmlkZW9fc2lua19zdG9wOwotICAgIGdzdGJhc2Vfc2lu
a19jbGFzcy0+c2V0X2NhcHMgPSB3ZWJraXRfdmlkZW9fc2lua19zZXRfY2FwczsKIAogICAgIHdl
YmtpdF92aWRlb19zaW5rX3NpZ25hbHNbUkVQQUlOVF9SRVFVRVNURURdID0gZ19zaWduYWxfbmV3
KCJyZXBhaW50LXJlcXVlc3RlZCIsCiAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhrbGFz
cyksCkBAIC0zNDYsMzcgKzI1MSwyMCBAQAogICAgICAgICAgICAgMCwKICAgICAgICAgICAgIDAs
CiAgICAgICAgICAgICAwLAotICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1ZP
SUQsCi0gICAgICAgICAgICBHX1RZUEVfTk9ORSwgMCk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0X2NsYXNzLCBQUk9QX1NVUkZBQ0UsCi0g
ICAgICAgIGdfcGFyYW1fc3BlY19wb2ludGVyKCJzdXJmYWNlIiwgInN1cmZhY2UiLCAiVGFyZ2V0
IGNhaXJvX3N1cmZhY2VfdCoiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoR1BhcmFt
RmxhZ3MpKEdfUEFSQU1fUkVBRFdSSVRFKSkpOworICAgICAgICAgICAgbWFyc2hhbF9WT0lEX19N
SU5JT0JKRUNULAorICAgICAgICAgICAgR19UWVBFX05PTkUsIDEsIEdTVF9UWVBFX0JVRkZFUik7
CiB9CiAKIC8qKgogICogd2Via2l0X3ZpZGVvX3NpbmtfbmV3OgotICogQHN1cmZhY2U6IGEgI2Nh
aXJvX3N1cmZhY2VfdAogICoKLSAqIENyZWF0ZXMgYSBuZXcgR1N0cmVhbWVyIHZpZGVvIHNpbmsg
d2hpY2ggdXNlcyBAc3VyZmFjZSBhcyB0aGUgdGFyZ2V0Ci0gKiBmb3Igc2lua2luZyBhIHZpZGVv
IHN0cmVhbSBmcm9tIEdTdHJlYW1lci4KKyAqIENyZWF0ZXMgYSBuZXcgR1N0cmVhbWVyIHZpZGVv
IHNpbmsuCiAgKgogICogUmV0dXJuIHZhbHVlOiBhICNHc3RFbGVtZW50IGZvciB0aGUgbmV3bHkg
Y3JlYXRlZCB2aWRlbyBzaW5rCiAgKi8KIEdzdEVsZW1lbnQqCi13ZWJraXRfdmlkZW9fc2lua19u
ZXcoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKQord2Via2l0X3ZpZGVvX3NpbmtfbmV3KHZvaWQp
CiB7Ci0gICAgcmV0dXJuIChHc3RFbGVtZW50KilnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfVklE
RU9fU0lOSywgInN1cmZhY2UiLCBzdXJmYWNlLCAwKTsKKyAgICByZXR1cm4gKEdzdEVsZW1lbnQq
KWdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9WSURFT19TSU5LLCAwKTsKIH0KIAotdm9pZAotd2Vi
a2l0X3ZpZGVvX3Npbmtfc2V0X3N1cmZhY2UoV2ViS2l0VmlkZW9TaW5rKiBzaW5rLCBjYWlyb19z
dXJmYWNlX3QqIHN1cmZhY2UpCi17Ci0gICAgV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSogcHJpdjsK
LQotICAgIHNpbmstPnByaXYgPSBwcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKHNp
bmssIFdFQktJVF9UWVBFX1ZJREVPX1NJTkssIFdlYktpdFZpZGVvU2lua1ByaXZhdGUpOwotICAg
IGlmIChwcml2LT5zdXJmYWNlKQotICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kocHJpdi0+
c3VyZmFjZSk7Ci0gICAgcHJpdi0+c3VyZmFjZSA9IGNhaXJvX3N1cmZhY2VfcmVmZXJlbmNlKHN1
cmZhY2UpOwotfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvVmlkZW9TaW5r
R1N0cmVhbWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsv
VmlkZW9TaW5rR1N0cmVhbWVyLmgJMjAwOS0xMC0xMiAxMDowMzozOC4wMDAwMDAwMDAgKzAyMDAK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1ZpZGVvU2lua0dTdHJlYW1lci5oCTIw
MDktMTAtMTIgMTA6MDM6NTQuMDAwMDAwMDAwICswMjAwCkBAIC03Miw5ICs3Miw3IEBACiB9Owog
CiBHVHlwZSAgICAgICB3ZWJraXRfdmlkZW9fc2lua19nZXRfdHlwZSh2b2lkKSBHX0dOVUNfQ09O
U1Q7Ci1Hc3RFbGVtZW50ICp3ZWJraXRfdmlkZW9fc2lua19uZXcoY2Fpcm9fc3VyZmFjZV90ICpz
dXJmYWNlKTsKLQotdm9pZCB3ZWJraXRfdmlkZW9fc2lua19zZXRfc3VyZmFjZShXZWJLaXRWaWRl
b1NpbmsgKnNpbmssIGNhaXJvX3N1cmZhY2VfdCAqc3VyZmFjZSk7CitHc3RFbGVtZW50ICp3ZWJr
aXRfdmlkZW9fc2lua19uZXcodm9pZCk7CiAKIEdfRU5EX0RFQ0xTCiAK
</data>
<flag name="review"
          id="22329"
          type_id="1"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41037</attachid>
            <date>2009-10-12 06:42:35 -0700</date>
            <delta_ts>2009-10-12 06:55:57 -0700</delta_ts>
            <desc>double-memcpy.diff</desc>
            <filename>double-memcpy.diff</filename>
            <type>text/plain</type>
            <size>18668</size>
            <attacher name="Sebastian Dröge (slomo)">slomo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShSZXZpc2lvbiA0OTQzNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCShBcmJlaXRza29waWUpCkBA
IC0xLDMgKzEsMzAgQEAKKzIwMDktMTAtMTIgIFNlYmFzdGlhbiBEcsO2Z2UgIDxzZWJhc3RpYW4u
ZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Mjk5OTcKKyAgICAgICAgCisgICAgICAgIEZpeGVzIGRvdWJsZSBtZW1jcHkgb2YgYWxsIHJlbmRl
cmVkIHZpZGVvIGZyYW1lcy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWVkaWFQbGF5
ZXJQcml2YXRlUmVwYWludENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZTo6TWVkaWFQbGF5ZXJQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZTo6fk1lZGlhUGxheWVyUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGU6OmR1cmF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
dGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL1ZpZGVvU2lua0dTdHJlYW1lci5jcHA6CisgICAgICAgICh3ZWJraXRfdmlkZW9f
c2lua190aW1lb3V0X2Z1bmMpOgorICAgICAgICAod2Via2l0X3ZpZGVvX3NpbmtfZGlzcG9zZSk6
CisgICAgICAgICh1bmxvY2tfYnVmZmVyX211dGV4KToKKyAgICAgICAgKHdlYmtpdF92aWRlb19z
aW5rX3VubG9jayk6CisgICAgICAgIChtYXJzaGFsX1ZPSURfX01JTklPQkpFQ1QpOgorICAgICAg
ICAod2Via2l0X3ZpZGVvX3NpbmtfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfdmlkZW9f
c2lua19uZXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9WaWRlb1NpbmtHU3Ry
ZWFtZXIuaDoKKyAgICAgICAgRGlyZWN0bHkgcGFzcyB0aGUgYnVmZmVycyB1cCB0byB0aGUgTWVk
aWFQbGF5ZXJQcml2YXRlOjpwYWludCgpCisgICAgICAgIG1ldGhvZCBpbnN0ZWFkIG9mIHJlbmRl
cmluZyB0aGVtIGZpcnN0IHRvIGFuIGludGVybWVkaWF0ZSBjYWlybworICAgICAgICBzdXJmYWNl
LiBUaGlzIHNob3VsZCBpbmNyZWFzZSBwZXJmb3JtYW5jZSBhbmQgcGVhayBtZW1vcnkgdXNhZ2Uu
CisKIDIwMDktMTAtMTEgIERhbmllbCBCYXRlcyAgPGRiYXRlc0B3ZWJraXQub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ndGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIu
Y3BwCTIwMDktMTAtMTIgMTA6MDM6MzMuMDAwMDAwMDAwICswMjAwCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2d0ay9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCTIwMDktMTAt
MTIgMTU6Mzk6NDMuMDAwMDAwMDAwICswMjAwCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAi
V2lkZ2V0LmgiCiAjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgogCi0jaW5jbHVkZSA8Z3N0L2Jhc2Uv
Z3N0YmFzZXNyYy5oPgogI2luY2x1ZGUgPGdzdC9nc3QuaD4KICNpbmNsdWRlIDxnc3QvaW50ZXJm
YWNlcy9taXhlci5oPgogI2luY2x1ZGUgPGdzdC9pbnRlcmZhY2VzL3hvdmVybGF5Lmg+CkBAIC0x
MDUsOCArMTA0LDEwIEBACiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyB2b2lkIG1lZGlh
UGxheWVyUHJpdmF0ZVJlcGFpbnRDYWxsYmFjayhXZWJLaXRWaWRlb1NpbmsqLCBNZWRpYVBsYXll
clByaXZhdGUqIHBsYXllclByaXZhdGUpCit2b2lkIG1lZGlhUGxheWVyUHJpdmF0ZVJlcGFpbnRD
YWxsYmFjayhXZWJLaXRWaWRlb1NpbmsqLCBHc3RCdWZmZXIgKmJ1ZmZlciwgTWVkaWFQbGF5ZXJQ
cml2YXRlKiBwbGF5ZXJQcml2YXRlKQogeworICAgIGdfcmV0dXJuX2lmX2ZhaWwoR1NUX0lTX0JV
RkZFUihidWZmZXIpKTsKKyAgICBnc3RfYnVmZmVyX3JlcGxhY2UoJnBsYXllclByaXZhdGUtPm1f
YnVmZmVyLCBidWZmZXIpOwogICAgIHBsYXllclByaXZhdGUtPnJlcGFpbnQoKTsKIH0KIApAQCAt
MTQ4LDIwICsxNDksMTkgQEAKICAgICAsIG1faXNTdHJlYW1pbmcoZmFsc2UpCiAgICAgLCBtX3Np
emUoSW50U2l6ZSgpKQogICAgICwgbV92aXNpYmxlKHRydWUpCisgICAgLCBtX2J1ZmZlcigwKQog
ICAgICwgbV9wYXVzZWQodHJ1ZSkKICAgICAsIG1fc2Vla2luZyhmYWxzZSkKICAgICAsIG1fZXJy
b3JPY2N1cmVkKGZhbHNlKQogewogICAgIGRvX2dzdF9pbml0KCk7Ci0KLSAgICAvLyBGSVhNRTog
VGhlIHNpemUgc2hvdWxkbid0IGJlIGZpeGVkIGhlcmUsIHRoaXMgaXMganVzdCBhIHF1aWNrIGhh
Y2suCi0gICAgbV9zdXJmYWNlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9S
TUFUX0FSR0IzMiwgNjQwLCA0ODApOwogfQogCiBNZWRpYVBsYXllclByaXZhdGU6On5NZWRpYVBs
YXllclByaXZhdGUoKQogewotICAgIGlmIChtX3N1cmZhY2UpCi0gICAgICAgIGNhaXJvX3N1cmZh
Y2VfZGVzdHJveShtX3N1cmZhY2UpOworICAgIGlmIChtX2J1ZmZlcikKKyAgICAgICAgZ3N0X2J1
ZmZlcl91bnJlZihtX2J1ZmZlcik7CisgICAgbV9idWZmZXIgPSAwOwogCiAgICAgaWYgKG1fcGxh
eUJpbikgewogICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9wbGF5QmluLCBHU1RfU1RB
VEVfTlVMTCk7CkBAIC0zMjcsMTQgKzMyNywxNiBAQAogICAgIC8vIGh0dHBzOi8vYnVnemlsbGEu
Z25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01OTYzMjYKICAgICBpbnQgd2lkdGggPSAwLCBoZWln
aHQgPSAwOwogICAgIGlmIChHc3RQYWQqIHBhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFk
KG1fdmlkZW9TaW5rLCAic2luayIpKSB7Ci0gICAgICAgIGdzdF92aWRlb19nZXRfc2l6ZShHU1Rf
UEFEKHBhZCksICZ3aWR0aCwgJmhlaWdodCk7CiAgICAgICAgIEdzdENhcHMqIGNhcHMgPSBHU1Rf
UEFEX0NBUFMocGFkKTsKICAgICAgICAgZ2Zsb2F0IHBpeGVsQXNwZWN0UmF0aW87CiAgICAgICAg
IGdpbnQgcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciwgcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5h
dG9yOwogCi0gICAgICAgIGlmICghZ3N0X3ZpZGVvX3BhcnNlX2NhcHNfcGl4ZWxfYXNwZWN0X3Jh
dGlvKGNhcHMsICZwaXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGl4ZWxBc3BlY3RSYXRpb0Rlbm9t
aW5hdG9yKSkKLSAgICAgICAgICAgIHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3IgPSBwaXhlbEFz
cGVjdFJhdGlvRGVub21pbmF0b3IgPSAxOworICAgICAgICBpZiAoIWdzdF92aWRlb19mb3JtYXRf
cGFyc2VfY2FwcyhjYXBzLCBOVUxMLCAmd2lkdGgsICZoZWlnaHQpIHx8CisgICAgICAgICAgICAh
Z3N0X3ZpZGVvX3BhcnNlX2NhcHNfcGl4ZWxfYXNwZWN0X3JhdGlvKGNhcHMsICZwaXhlbEFzcGVj
dFJhdGlvTnVtZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKSkgeworICAg
ICAgICAgICAgZ3N0X29iamVjdF91bnJlZihHU1RfT0JKRUNUKHBhZCkpOworICAgICAgICAgICAg
cmV0dXJuIEludFNpemUoKTsKKyAgICAgICAgfQogCiAgICAgICAgIHBpeGVsQXNwZWN0UmF0aW8g
PSAoZ2Zsb2F0KSBwaXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yIC8gKGdmbG9hdCkgcGl4ZWxBc3Bl
Y3RSYXRpb0Rlbm9taW5hdG9yOwogICAgICAgICB3aWR0aCAqPSBwaXhlbEFzcGVjdFJhdGlvOwpA
QCAtNjI2LDE4ICs2MjgsNyBAQAogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0U2l6ZShj
b25zdCBJbnRTaXplJiBzaXplKQogewotICAgIC8vIERlc3Ryb3kgYW5kIHJlLWNyZWF0ZSB0aGUg
Y2Fpcm8gc3VyZmFjZSBvbmx5IGlmIHRoZSBzaXplCi0gICAgLy8gY2hhbmdlZC4KLSAgICBpZiAo
c2l6ZSAhPSBtX3NpemUpIHsKLSAgICAgICAgaWYgKG1fc3VyZmFjZSkKLSAgICAgICAgICAgIGNh
aXJvX3N1cmZhY2VfZGVzdHJveShtX3N1cmZhY2UpOwotICAgICAgICBtX3N1cmZhY2UgPSBjYWly
b19pbWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRfQVJHQjMyLCBzaXplLndpZHRoKCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUuaGVp
Z2h0KCkpOwotICAgICAgICBnX29iamVjdF9zZXQobV92aWRlb1NpbmssICJzdXJmYWNlIiwgbV9z
dXJmYWNlLCAwKTsKLSAgICB9Ci0KICAgICBtX3NpemUgPSBzaXplOwotCiB9CiAKIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKQEAgLTY1Nyw4ICs2NDgs
MzAgQEAKIAogICAgIGlmICghbV92aXNpYmxlKQogICAgICAgICByZXR1cm47CisgICAgaWYgKCFt
X2J1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IHdpZHRoID0gMCwgaGVpZ2h0ID0g
MDsKKyAgICBpbnQgcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciA9IDA7CisgICAgaW50IHBpeGVs
QXNwZWN0UmF0aW9EZW5vbWluYXRvciA9IDA7CisgICAgZG91YmxlIGRvdWJsZVBpeGVsQXNwZWN0
UmF0aW9OdW1lcmF0b3IgPSAwOworICAgIGRvdWJsZSBkb3VibGVQaXhlbEFzcGVjdFJhdGlvRGVu
b21pbmF0b3IgPSAwOworICAgIEdzdENhcHMgKmNhcHMgPSBnc3RfYnVmZmVyX2dldF9jYXBzKG1f
YnVmZmVyKTsKKworICAgIGlmICghZ3N0X3ZpZGVvX2Zvcm1hdF9wYXJzZV9jYXBzKGNhcHMsIE5V
TEwsICZ3aWR0aCwgJmhlaWdodCkgfHwKKyAgICAgICAgIWdzdF92aWRlb19wYXJzZV9jYXBzX3Bp
eGVsX2FzcGVjdF9yYXRpbyhjYXBzLCAmcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciwgJnBpeGVs
QXNwZWN0UmF0aW9EZW5vbWluYXRvcikpIHsKKyAgICAgIGdzdF9jYXBzX3VucmVmKGNhcHMpOwor
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRvdWJsZVBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0
b3IgPSBwaXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yOworICAgIGRvdWJsZVBpeGVsQXNwZWN0UmF0
aW9EZW5vbWluYXRvciA9IHBpeGVsQXNwZWN0UmF0aW9EZW5vbWluYXRvcjsKIAogICAgIGNhaXJv
X3QqIGNyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgY2Fpcm9fc3VyZmFjZV90
KiBzcmMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShHU1RfQlVGRkVSX0RB
VEEobV9idWZmZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ0FJUk9fRk9STUFUX1JHQjI0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhl
aWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDQgKiB3aWR0aCk7CiAKICAgICBjYWlyb19zYXZlKGNyKTsKICAgICBjYWly
b19zZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7CkBAIC02NjYsOSArNjc5
LDE0IEBACiAgICAgLy8gcGFpbnQgdGhlIHJlY3RhbmdsZSBvbiB0aGUgY29udGV4dCBhbmQgZHJh
dyB0aGUgc3VyZmFjZSBpbnNpZGUuCiAgICAgY2Fpcm9fdHJhbnNsYXRlKGNyLCByZWN0LngoKSwg
cmVjdC55KCkpOwogICAgIGNhaXJvX3JlY3RhbmdsZShjciwgMCwgMCwgcmVjdC53aWR0aCgpLCBy
ZWN0LmhlaWdodCgpKTsKLSAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IsIG1fc3VyZmFj
ZSwgMCwgMCk7CisgICAgY2Fpcm9fc2NhbGUoY3IsIGRvdWJsZVBpeGVsQXNwZWN0UmF0aW9OdW1l
cmF0b3IgLyBkb3VibGVQaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3IsCisgICAgICAgICAgICAg
ICAgZG91YmxlUGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yIC8gZG91YmxlUGl4ZWxBc3BlY3RS
YXRpb051bWVyYXRvcik7CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLCBzcmMsIDAs
IDApOwogICAgIGNhaXJvX2ZpbGwoY3IpOwogICAgIGNhaXJvX3Jlc3RvcmUoY3IpOworCisgICAg
Y2Fpcm9fc3VyZmFjZV9kZXN0cm95KHNyYyk7CisgICAgZ3N0X2NhcHNfdW5yZWYoY2Fwcyk7CiB9
CiAKIHN0YXRpYyBIYXNoU2V0PFN0cmluZz4gbWltZVR5cGVDYWNoZSgpCkBAIC04MDAsNyArODE4
LDcgQEAKIAogICAgIGdfb2JqZWN0X3NldChHX09CSkVDVChtX3BsYXlCaW4pLCAidXJpIiwgdXJs
LnV0ZjgoKS5kYXRhKCksIE5VTEwpOwogCi0gICAgbV92aWRlb1NpbmsgPSB3ZWJraXRfdmlkZW9f
c2lua19uZXcobV9zdXJmYWNlKTsKKyAgICBtX3ZpZGVvU2luayA9IHdlYmtpdF92aWRlb19zaW5r
X25ldygpOwogCiAgICAgZ19vYmplY3RfcmVmX3NpbmsobV92aWRlb1NpbmspOwogICAgIGdfb2Jq
ZWN0X3NldChtX3BsYXlCaW4sICJ2aWRlby1zaW5rIiwgbV92aWRlb1NpbmssIE5VTEwpOwpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgJMjAwOS0xMC0xMiAxMDowMzozMy4wMDAwMDAwMDAgKzAy
MDAKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lci5oCTIwMDktMTAtMTIgMTU6MjA6MzUuMDAwMDAwMDAwICswMjAwCkBAIC0zMCw4ICsz
MCwxMCBAQAogI2luY2x1ZGUgPGNhaXJvLmg+CiAjaW5jbHVkZSA8Z2xpYi5oPgogCi10eXBlZGVm
IHN0cnVjdCBfR3N0RWxlbWVudCBHc3RFbGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFZp
ZGVvU2luayBXZWJLaXRWaWRlb1Npbms7Cit0eXBlZGVmIHN0cnVjdCBfR3N0QnVmZmVyIEdzdEJ1
ZmZlcjsKIHR5cGVkZWYgc3RydWN0IF9Hc3RNZXNzYWdlIEdzdE1lc3NhZ2U7Cit0eXBlZGVmIHN0
cnVjdCBfR3N0RWxlbWVudCBHc3RFbGVtZW50OwogdHlwZWRlZiBzdHJ1Y3QgX0dzdEJ1cyBHc3RC
dXM7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ5LDYgKzUxLDcgQEAKICAgICAgICAgZnJp
ZW5kIGdib29sZWFuIG1lZGlhUGxheWVyUHJpdmF0ZUVycm9yQ2FsbGJhY2soR3N0QnVzKiBidXMs
IEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIGdwb2ludGVyIGRhdGEpOwogICAgICAgICBmcmllbmQgZ2Jv
b2xlYW4gbWVkaWFQbGF5ZXJQcml2YXRlRU9TQ2FsbGJhY2soR3N0QnVzKiBidXMsIEdzdE1lc3Nh
Z2UqIG1lc3NhZ2UsIGdwb2ludGVyIGRhdGEpOwogICAgICAgICBmcmllbmQgZ2Jvb2xlYW4gbWVk
aWFQbGF5ZXJQcml2YXRlU3RhdGVDYWxsYmFjayhHc3RCdXMqIGJ1cywgR3N0TWVzc2FnZSogbWVz
c2FnZSwgZ3BvaW50ZXIgZGF0YSk7CisgICAgICAgIGZyaWVuZCB2b2lkIG1lZGlhUGxheWVyUHJp
dmF0ZVJlcGFpbnRDYWxsYmFjayhXZWJLaXRWaWRlb1NpbmsqLCBHc3RCdWZmZXIgKmJ1ZmZlciwg
TWVkaWFQbGF5ZXJQcml2YXRlKiBwbGF5ZXJQcml2YXRlKTsKIAogICAgICAgICBwdWJsaWM6CiAg
ICAgICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVn
aXN0cmFyKTsKQEAgLTEzNiw3ICsxMzksNyBAQAogICAgICAgICAgICAgbXV0YWJsZSBib29sIG1f
aXNTdHJlYW1pbmc7CiAgICAgICAgICAgICBJbnRTaXplIG1fc2l6ZTsKICAgICAgICAgICAgIGJv
b2wgbV92aXNpYmxlOwotICAgICAgICAgICAgY2Fpcm9fc3VyZmFjZV90KiBtX3N1cmZhY2U7Cisg
ICAgICAgICAgICBHc3RCdWZmZXIqIG1fYnVmZmVyOwogCiAgICAgICAgICAgICBib29sIG1fcGF1
c2VkOwogICAgICAgICAgICAgYm9vbCBtX3NlZWtpbmc7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAJMjAwOS0xMC0x
MiAxMDowMzozNy4wMDAwMDAwMDAgKzAyMDAKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAJMjAwOS0xMC0xMiAxNToyNToxMy4wMDAwMDAwMDAg
KzAyMDAKQEAgLTIxLDggKzIxLDkgQEAKICAqIFNFQ1RJT046d2Via2l0LXZpZGVvLXNpbmsKICAq
IEBzaG9ydF9kZXNjcmlwdGlvbjogR1N0cmVhbWVyIHZpZGVvIHNpbmsKICAqCi0gKiAjV2ViS2l0
VmlkZW9TaW5rIGlzIGEgR1N0cmVhbWVyIHNpbmsgZWxlbWVudCB0aGF0IHNlbmRzCi0gKiBkYXRh
IHRvIGEgI2NhaXJvX3N1cmZhY2VfdC4KKyAqICNXZWJLaXRWaWRlb1NpbmsgaXMgYSBHU3RyZWFt
ZXIgc2luayBlbGVtZW50IHRoYXQgdHJpZ2dlcnMKKyAqIHJlcGFpbnRzIGluIHRoZSBXZWJLaXQg
R1N0cmVhbWVyIG1lZGlhIHBsYXllciBmb3IgdGhlCisgKiBjdXJyZW50IHZpZGVvIGJ1ZmZlci4K
ICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCkBAIC01NywyMSArNTgsMTIgQEAKIH07CiAKIGVu
dW0gewotICAgIFBST1BfMCwKLSAgICBQUk9QX1NVUkZBQ0UKKyAgICBQUk9QXzAKIH07CiAKIHN0
YXRpYyBndWludCB3ZWJraXRfdmlkZW9fc2lua19zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCwg
fTsKIAogc3RydWN0IF9XZWJLaXRWaWRlb1NpbmtQcml2YXRlIHsKLSAgICBjYWlyb19zdXJmYWNl
X3QqIHN1cmZhY2U7Ci0gICAgZ2Jvb2xlYW4gcmdiX29yZGVyaW5nOwotICAgIGludCB3aWR0aDsK
LSAgICBpbnQgaGVpZ2h0OwotICAgIGludCBmcHNfbjsKLSAgICBpbnQgZnBzX2Q7Ci0gICAgaW50
IHBhcl9uOwotICAgIGludCBwYXJfZDsKICAgICBHc3RCdWZmZXIqIGJ1ZmZlcjsKICAgICBndWlu
dCB0aW1lb3V0X2lkOwogICAgIEdNdXRleCogYnVmZmVyX211dGV4OwpAQCAtMTE1LDE0ICsxMDcs
MTAgQEAKICAgICBXZWJLaXRWaWRlb1NpbmsqIHNpbmsgPSByZWludGVycHJldF9jYXN0PFdlYktp
dFZpZGVvU2luayo+KGRhdGEpOwogICAgIFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBz
aW5rLT5wcml2OwogICAgIEdzdEJ1ZmZlciogYnVmZmVyOwotICAgIEdzdENhcHMqIGNhcHM7Ci0g
ICAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0OwotICAgIGdpbnQgcGFyX24sIHBhcl9kOwotICAgIGdm
bG9hdCBwYXI7Ci0gICAgZ2ludCBid2lkdGgsIGJoZWlnaHQ7CiAKICAgICBnX211dGV4X2xvY2so
cHJpdi0+YnVmZmVyX211dGV4KTsKICAgICBidWZmZXIgPSBwcml2LT5idWZmZXI7CisgICAgcHJp
di0+YnVmZmVyID0gMDsKICAgICBwcml2LT50aW1lb3V0X2lkID0gMDsKIAogICAgIGlmICghYnVm
ZmVyIHx8IEdfVU5MSUtFTFkoIUdTVF9JU19CVUZGRVIoYnVmZmVyKSkpIHsKQEAgLTEzMSwzOSAr
MTE5LDEzIEBACiAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICB9CiAKLSAgICBjYXBzID0gR1NU
X0JVRkZFUl9DQVBTKGJ1ZmZlcik7Ci0gICAgaWYgKCFnc3RfdmlkZW9fZm9ybWF0X3BhcnNlX2Nh
cHMoY2FwcywgJmZvcm1hdCwgJmJ3aWR0aCwgJmJoZWlnaHQpKSB7Ci0gICAgICAgIEdTVF9FUlJP
Ul9PQkpFQ1Qoc2luaywgIlVua25vd24gdmlkZW8gZm9ybWF0IGluIGJ1ZmZlciBjYXBzICclcyci
LAotICAgICAgICAgICAgICAgICAgICAgICAgIGdzdF9jYXBzX3RvX3N0cmluZyhjYXBzKSk7Ci0g
ICAgICAgIGdfY29uZF9zaWduYWwocHJpdi0+ZGF0YV9jb25kKTsKLSAgICAgICAgZ19tdXRleF91
bmxvY2socHJpdi0+YnVmZmVyX211dGV4KTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIGlm
IChHX1VOTElLRUxZKCFHU1RfQlVGRkVSX0NBUFMoYnVmZmVyKSkpIHsKKyAgICAgIGJ1ZmZlciA9
IGdzdF9idWZmZXJfbWFrZV9tZXRhZGF0YV93cml0YWJsZShidWZmZXIpOworICAgICAgZ3N0X2J1
ZmZlcl9zZXRfY2FwcyhidWZmZXIsIEdTVF9QQURfQ0FQUyhHU1RfQkFTRV9TSU5LX1BBRChzaW5r
KSkpOwogICAgIH0KIAotICAgIGlmICghZ3N0X3ZpZGVvX3BhcnNlX2NhcHNfcGl4ZWxfYXNwZWN0
X3JhdGlvKGNhcHMsICZwYXJfbiwgJnBhcl9kKSkKLSAgICAgICAgcGFyX24gPSBwYXJfZCA9IDE7
Ci0KLSAgICBwYXIgPSAoZ2Zsb2F0KSBwYXJfbiAvIChnZmxvYXQpIHBhcl9kOwotCi0gICAgY2Fp
cm9fc3VyZmFjZV90KiBzcmMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShH
U1RfQlVGRkVSX0RBVEEoYnVmZmVyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBSVJPX0ZPUk1BVF9SR0IyNCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJ3aWR0aCwgYmhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDQgKiBid2lkdGgpOwotCi0gICAgLy8gVE9ETzogV2Ug
Y29weSB0aGUgZGF0YSB0d2ljZSByaWdodCBub3cuIFRoaXMgY291bGQgYmUgZWFzaWx5IGltcHJv
dmVkLgotICAgIGNhaXJvX3QqIGNyID0gY2Fpcm9fY3JlYXRlKHByaXYtPnN1cmZhY2UpOwotICAg
IGNhaXJvX3NjYWxlKGNyLCBwYXIsIDEuMCAvIHBhcik7Ci0gICAgY2Fpcm9fc2V0X29wZXJhdG9y
KGNyLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOwotICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFj
ZShjciwgc3JjLCAwLCAwKTsKLSAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koc3JjKTsKLSAgICBj
YWlyb19yZWN0YW5nbGUoY3IsIDAsIDAsIHByaXYtPndpZHRoLCBwcml2LT5oZWlnaHQpOwotICAg
IGNhaXJvX2ZpbGwoY3IpOwotICAgIGNhaXJvX2Rlc3Ryb3koY3IpOwotCisgICAgZ19zaWduYWxf
ZW1pdChzaW5rLCB3ZWJraXRfdmlkZW9fc2lua19zaWduYWxzW1JFUEFJTlRfUkVRVUVTVEVEXSwg
MCwgYnVmZmVyKTsKICAgICBnc3RfYnVmZmVyX3VucmVmKGJ1ZmZlcik7Ci0gICAgcHJpdi0+YnVm
ZmVyID0gMDsKLQotICAgIGdfc2lnbmFsX2VtaXQoc2luaywgd2Via2l0X3ZpZGVvX3Npbmtfc2ln
bmFsc1tSRVBBSU5UX1JFUVVFU1RFRF0sIDApOwogICAgIGdfY29uZF9zaWduYWwocHJpdi0+ZGF0
YV9jb25kKTsKICAgICBnX211dGV4X3VubG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOwogCkBAIC0x
OTAsNTkgKzE1MiwxMiBAQAogICAgIHJldHVybiBHU1RfRkxPV19PSzsKIH0KIAotc3RhdGljIGdi
b29sZWFuCi13ZWJraXRfdmlkZW9fc2lua19zZXRfY2FwcyhHc3RCYXNlU2luayogYnNpbmssIEdz
dENhcHMqIGNhcHMpCi17Ci0gICAgV2ViS2l0VmlkZW9TaW5rKiBzaW5rID0gV0VCS0lUX1ZJREVP
X1NJTksoYnNpbmspOwotICAgIFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBzaW5rLT5w
cml2OwotICAgIEdzdFN0cnVjdHVyZSogc3RydWN0dXJlOwotICAgIGdib29sZWFuIHJldDsKLSAg
ICBnaW50IHdpZHRoLCBoZWlnaHQsIGZwc19uLCBmcHNfZDsKLSAgICBpbnQgcmVkX21hc2s7Ci0K
LSAgICBHc3RDYXBzKiBpbnRlcnNlY3Rpb24gPSBnc3RfY2Fwc19pbnRlcnNlY3QoZ3N0X3N0YXRp
Y19wYWRfdGVtcGxhdGVfZ2V0X2NhcHMoJnNpbmt0ZW1wbGF0ZSksIGNhcHMpOwotCi0gICAgaWYg
KGdzdF9jYXBzX2lzX2VtcHR5KGludGVyc2VjdGlvbikpCi0gICAgICAgIHJldHVybiBGQUxTRTsK
LQotICAgIGdzdF9jYXBzX3VucmVmKGludGVyc2VjdGlvbik7Ci0KLSAgICBzdHJ1Y3R1cmUgPSBn
c3RfY2Fwc19nZXRfc3RydWN0dXJlKGNhcHMsIDApOwotCi0gICAgcmV0ID0gZ3N0X3N0cnVjdHVy
ZV9nZXRfaW50KHN0cnVjdHVyZSwgIndpZHRoIiwgJndpZHRoKTsKLSAgICByZXQgJj0gZ3N0X3N0
cnVjdHVyZV9nZXRfaW50KHN0cnVjdHVyZSwgImhlaWdodCIsICZoZWlnaHQpOwotCi0gICAgLyog
V2UgZG9udCB5ZXQgdXNlIGZwcyBidXQgaGFuZHkgdG8gaGF2ZSAqLwotICAgIHJldCAmPSBnc3Rf
c3RydWN0dXJlX2dldF9mcmFjdGlvbihzdHJ1Y3R1cmUsICJmcmFtZXJhdGUiLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnBzX24sICZmcHNfZCk7Ci0gICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwocmV0LCBGQUxTRSk7Ci0KLSAgICBwcml2LT53aWR0aCA9IHdpZHRoOwot
ICAgIHByaXYtPmhlaWdodCA9IGhlaWdodDsKLSAgICBwcml2LT5mcHNfbiA9IGZwc19uOwotICAg
IHByaXYtPmZwc19kID0gZnBzX2Q7Ci0KLSAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2ZyYWN0
aW9uKHN0cnVjdHVyZSwgInBpeGVsLWFzcGVjdC1yYXRpbyIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmcHJpdi0+cGFyX24sICZwcml2LT5wYXJfZCkpCi0gICAgICAgIHBy
aXYtPnBhcl9uID0gcHJpdi0+cGFyX2QgPSAxOwotCi0gICAgZ3N0X3N0cnVjdHVyZV9nZXRfaW50
KHN0cnVjdHVyZSwgInJlZF9tYXNrIiwgJnJlZF9tYXNrKTsKLSAgICBwcml2LT5yZ2Jfb3JkZXJp
bmcgPSAocmVkX21hc2sgPT0gc3RhdGljX2Nhc3Q8aW50PigweGZmMDAwMDAwKSk7Ci0KLSAgICBy
ZXR1cm4gVFJVRTsKLX0KLQogc3RhdGljIHZvaWQKIHdlYmtpdF92aWRlb19zaW5rX2Rpc3Bvc2Uo
R09iamVjdCogb2JqZWN0KQogewogICAgIFdlYktpdFZpZGVvU2luayogc2luayA9IFdFQktJVF9W
SURFT19TSU5LKG9iamVjdCk7CiAgICAgV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSogcHJpdiA9IHNp
bmstPnByaXY7CiAKLSAgICBpZiAocHJpdi0+c3VyZmFjZSkgewotICAgICAgICBjYWlyb19zdXJm
YWNlX2Rlc3Ryb3kocHJpdi0+c3VyZmFjZSk7Ci0gICAgICAgIHByaXYtPnN1cmZhY2UgPSAwOwot
ICAgIH0KLQogICAgIGlmIChwcml2LT5kYXRhX2NvbmQpIHsKICAgICAgICAgZ19jb25kX2ZyZWUo
cHJpdi0+ZGF0YV9jb25kKTsKICAgICAgICAgcHJpdi0+ZGF0YV9jb25kID0gMDsKQEAgLTI2OCw0
OSArMTgzLDE2IEBACiAKICAgICBnX2NvbmRfc2lnbmFsKHByaXYtPmRhdGFfY29uZCk7CiAgICAg
Z19tdXRleF91bmxvY2socHJpdi0+YnVmZmVyX211dGV4KTsKLQogfQogCiBzdGF0aWMgZ2Jvb2xl
YW4KIHdlYmtpdF92aWRlb19zaW5rX3VubG9jayhHc3RCYXNlU2luayogb2JqZWN0KQogewogICAg
IFdlYktpdFZpZGVvU2luayogc2luayA9IFdFQktJVF9WSURFT19TSU5LKG9iamVjdCk7Ci0gICAg
dW5sb2NrX2J1ZmZlcl9tdXRleChzaW5rLT5wcml2KTsKLSAgICBHU1RfQ0FMTF9QQVJFTlRfV0lU
SF9ERUZBVUxUKEdTVF9CQVNFX1NJTktfQ0xBU1MsIHVubG9jaywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChvYmplY3QpLCBUUlVFKTsKLX0KLQotc3RhdGljIHZvaWQKLXdlYmtp
dF92aWRlb19zaW5rX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BfaWQs
IGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQotewotICAgIFdlYktpdFZp
ZGVvU2luayogc2luayA9IFdFQktJVF9WSURFT19TSU5LKG9iamVjdCk7Ci0gICAgV2ViS2l0Vmlk
ZW9TaW5rUHJpdmF0ZSogcHJpdiA9IHNpbmstPnByaXY7Ci0KLSAgICBzd2l0Y2ggKHByb3BfaWQp
IHsKLSAgICBjYXNlIFBST1BfU1VSRkFDRToKLSAgICAgICAgaWYgKHByaXYtPnN1cmZhY2UpCi0g
ICAgICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kocHJpdi0+c3VyZmFjZSk7Ci0gICAgICAg
IHByaXYtPnN1cmZhY2UgPSBjYWlyb19zdXJmYWNlX3JlZmVyZW5jZSgoY2Fpcm9fc3VyZmFjZV90
KilnX3ZhbHVlX2dldF9wb2ludGVyKHZhbHVlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHBy
b3BfaWQsIHBzcGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZAot
d2Via2l0X3ZpZGVvX3NpbmtfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJv
cF9pZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCi17Ci0gICAgV2ViS2l0Vmlk
ZW9TaW5rKiBzaW5rID0gV0VCS0lUX1ZJREVPX1NJTksob2JqZWN0KTsKIAotICAgIHN3aXRjaCAo
cHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9TVVJGQUNFOgotICAgICAgICBnX3ZhbHVlX3NldF9w
b2ludGVyKHZhbHVlLCBzaW5rLT5wcml2LT5zdXJmYWNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVj
dCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgdW5sb2NrX2J1
ZmZlcl9tdXRleChzaW5rLT5wcml2KTsKKyAgICByZXR1cm4gR1NUX0NBTExfUEFSRU5UX1dJVEhf
REVGQVVMVChHU1RfQkFTRV9TSU5LX0NMQVNTLCB1bmxvY2ssCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKG9iamVjdCksIFRSVUUpOwogfQogCiBzdGF0aWMgZ2Jvb2xl
YW4KQEAgLTMyMiw2ICsyMDQsMzAgQEAKIH0KIAogc3RhdGljIHZvaWQKK21hcnNoYWxfVk9JRF9f
TUlOSU9CSkVDVChHQ2xvc3VyZSAqIGNsb3N1cmUsIEdWYWx1ZSAqIHJldHVybl92YWx1ZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBndWludCBuX3BhcmFtX3ZhbHVlcywgY29uc3QgR1ZhbHVl
ICogcGFyYW1fdmFsdWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIGludm9j
YXRpb25faGludCwgZ3BvaW50ZXIgbWFyc2hhbF9kYXRhKQoreworICB0eXBlZGVmIHZvaWQgKCpt
YXJzaGFsZnVuY19WT0lEX19NSU5JT0JKRUNUKSAoZ3BvaW50ZXIgb2JqLCBncG9pbnRlciBhcmcx
LCBncG9pbnRlciBkYXRhMik7CisgIG1hcnNoYWxmdW5jX1ZPSURfX01JTklPQkpFQ1QgY2FsbGJh
Y2s7CisgIEdDQ2xvc3VyZSAqY2MgPSAoR0NDbG9zdXJlICopIGNsb3N1cmU7CisgIGdwb2ludGVy
IGRhdGExLCBkYXRhMjsKKworICBnX3JldHVybl9pZl9mYWlsKG5fcGFyYW1fdmFsdWVzID09IDIp
OworCisgIGlmIChHX0NDTE9TVVJFX1NXQVBfREFUQShjbG9zdXJlKSkgeworICAgIGRhdGExID0g
Y2xvc3VyZS0+ZGF0YTsKKyAgICBkYXRhMiA9IGdfdmFsdWVfcGVla19wb2ludGVyKHBhcmFtX3Zh
bHVlcyArIDApOworICB9IGVsc2UgeworICAgIGRhdGExID0gZ192YWx1ZV9wZWVrX3BvaW50ZXIo
cGFyYW1fdmFsdWVzICsgMCk7CisgICAgZGF0YTIgPSBjbG9zdXJlLT5kYXRhOworICB9CisgIGNh
bGxiYWNrID0gKG1hcnNoYWxmdW5jX1ZPSURfX01JTklPQkpFQ1QpIChtYXJzaGFsX2RhdGEgPyBt
YXJzaGFsX2RhdGEgOiBjYy0+Y2FsbGJhY2spOworCisgIGNhbGxiYWNrKGRhdGExLCBnc3RfdmFs
dWVfZ2V0X21pbmlfb2JqZWN0KHBhcmFtX3ZhbHVlcyArIDEpLCBkYXRhMik7Cit9CisKK3N0YXRp
YyB2b2lkCiB3ZWJraXRfdmlkZW9fc2lua19jbGFzc19pbml0KFdlYktpdFZpZGVvU2lua0NsYXNz
KiBrbGFzcykKIHsKICAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9D
TEFTUyhrbGFzcyk7CkBAIC0zMjksMTYgKzIzNSwxMiBAQAogCiAgICAgZ190eXBlX2NsYXNzX2Fk
ZF9wcml2YXRlKGtsYXNzLCBzaXplb2YoV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSkpOwogCi0gICAg
Z29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X3ZpZGVvX3Npbmtfc2V0X3Byb3Bl
cnR5OwotICAgIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF92aWRlb19zaW5r
X2dldF9wcm9wZXJ0eTsKLQogICAgIGdvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSB3ZWJraXRfdmlk
ZW9fc2lua19kaXNwb3NlOwogCiAgICAgZ3N0YmFzZV9zaW5rX2NsYXNzLT51bmxvY2sgPSB3ZWJr
aXRfdmlkZW9fc2lua191bmxvY2s7CiAgICAgZ3N0YmFzZV9zaW5rX2NsYXNzLT5yZW5kZXIgPSB3
ZWJraXRfdmlkZW9fc2lua19yZW5kZXI7CiAgICAgZ3N0YmFzZV9zaW5rX2NsYXNzLT5wcmVyb2xs
ID0gd2Via2l0X3ZpZGVvX3NpbmtfcmVuZGVyOwogICAgIGdzdGJhc2Vfc2lua19jbGFzcy0+c3Rv
cCA9IHdlYmtpdF92aWRlb19zaW5rX3N0b3A7Ci0gICAgZ3N0YmFzZV9zaW5rX2NsYXNzLT5zZXRf
Y2FwcyA9IHdlYmtpdF92aWRlb19zaW5rX3NldF9jYXBzOwogCiAgICAgd2Via2l0X3ZpZGVvX3Np
bmtfc2lnbmFsc1tSRVBBSU5UX1JFUVVFU1RFRF0gPSBnX3NpZ25hbF9uZXcoInJlcGFpbnQtcmVx
dWVzdGVkIiwKICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGtsYXNzKSwKQEAgLTM0Niwz
NyArMjQ4LDIwIEBACiAgICAgICAgICAgICAwLAogICAgICAgICAgICAgMCwKICAgICAgICAgICAg
IDAsCi0gICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fVk9JRCwKLSAgICAgICAg
ICAgIEdfVFlQRV9OT05FLCAwKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCi0gICAgICAgIGdvYmplY3RfY2xhc3MsIFBST1BfU1VSRkFDRSwKLSAgICAgICAgZ19wYXJh
bV9zcGVjX3BvaW50ZXIoInN1cmZhY2UiLCAic3VyZmFjZSIsICJUYXJnZXQgY2Fpcm9fc3VyZmFj
ZV90KiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChHUGFyYW1GbGFncykoR19QQVJB
TV9SRUFEV1JJVEUpKSk7CisgICAgICAgICAgICBtYXJzaGFsX1ZPSURfX01JTklPQkpFQ1QsCisg
ICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwgR1NUX1RZUEVfQlVGRkVSKTsKIH0KIAogLyoqCiAg
KiB3ZWJraXRfdmlkZW9fc2lua19uZXc6Ci0gKiBAc3VyZmFjZTogYSAjY2Fpcm9fc3VyZmFjZV90
CiAgKgotICogQ3JlYXRlcyBhIG5ldyBHU3RyZWFtZXIgdmlkZW8gc2luayB3aGljaCB1c2VzIEBz
dXJmYWNlIGFzIHRoZSB0YXJnZXQKLSAqIGZvciBzaW5raW5nIGEgdmlkZW8gc3RyZWFtIGZyb20g
R1N0cmVhbWVyLgorICogQ3JlYXRlcyBhIG5ldyBHU3RyZWFtZXIgdmlkZW8gc2luay4KICAqCiAg
KiBSZXR1cm4gdmFsdWU6IGEgI0dzdEVsZW1lbnQgZm9yIHRoZSBuZXdseSBjcmVhdGVkIHZpZGVv
IHNpbmsKICAqLwogR3N0RWxlbWVudCoKLXdlYmtpdF92aWRlb19zaW5rX25ldyhjYWlyb19zdXJm
YWNlX3QqIHN1cmZhY2UpCit3ZWJraXRfdmlkZW9fc2lua19uZXcodm9pZCkKIHsKLSAgICByZXR1
cm4gKEdzdEVsZW1lbnQqKWdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9WSURFT19TSU5LLCAic3Vy
ZmFjZSIsIHN1cmZhY2UsIDApOworICAgIHJldHVybiAoR3N0RWxlbWVudCopZ19vYmplY3RfbmV3
KFdFQktJVF9UWVBFX1ZJREVPX1NJTkssIDApOwogfQogCi12b2lkCi13ZWJraXRfdmlkZW9fc2lu
a19zZXRfc3VyZmFjZShXZWJLaXRWaWRlb1NpbmsqIHNpbmssIGNhaXJvX3N1cmZhY2VfdCogc3Vy
ZmFjZSkKLXsKLSAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBwcml2OwotCi0gICAgc2luay0+
cHJpdiA9IHByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoc2luaywgV0VCS0lUX1RZ
UEVfVklERU9fU0lOSywgV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSk7Ci0gICAgaWYgKHByaXYtPnN1
cmZhY2UpCi0gICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShwcml2LT5zdXJmYWNlKTsKLSAg
ICBwcml2LT5zdXJmYWNlID0gY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2Uoc3VyZmFjZSk7Ci19Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9WaWRlb1NpbmtHU3RyZWFtZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9WaWRlb1NpbmtHU3Ry
ZWFtZXIuaAkyMDA5LTEwLTEyIDEwOjAzOjM4LjAwMDAwMDAwMCArMDIwMAorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsvVmlkZW9TaW5rR1N0cmVhbWVyLmgJMjAwOS0xMC0xMiAxMDow
Mzo1NC4wMDAwMDAwMDAgKzAyMDAKQEAgLTcyLDkgKzcyLDcgQEAKIH07CiAKIEdUeXBlICAgICAg
IHdlYmtpdF92aWRlb19zaW5rX2dldF90eXBlKHZvaWQpIEdfR05VQ19DT05TVDsKLUdzdEVsZW1l
bnQgKndlYmtpdF92aWRlb19zaW5rX25ldyhjYWlyb19zdXJmYWNlX3QgKnN1cmZhY2UpOwotCi12
b2lkIHdlYmtpdF92aWRlb19zaW5rX3NldF9zdXJmYWNlKFdlYktpdFZpZGVvU2luayAqc2luaywg
Y2Fpcm9fc3VyZmFjZV90ICpzdXJmYWNlKTsKK0dzdEVsZW1lbnQgKndlYmtpdF92aWRlb19zaW5r
X25ldyh2b2lkKTsKIAogR19FTkRfREVDTFMKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41039</attachid>
            <date>2009-10-12 06:55:57 -0700</date>
            <delta_ts>2009-10-12 07:18:58 -0700</delta_ts>
            <desc>double-memcpy.diff</desc>
            <filename>double-memcpy.diff</filename>
            <type>text/plain</type>
            <size>18680</size>
            <attacher name="Sebastian Dröge (slomo)">slomo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShSZXZpc2lvbiA0OTQzNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCShBcmJlaXRza29waWUpCkBA
IC0xLDMgKzEsMzAgQEAKKzIwMDktMTAtMTIgIFNlYmFzdGlhbiBEcsO2Z2UgIDxzZWJhc3RpYW4u
ZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Mjk5OTcKKyAgICAgICAgCisgICAgICAgIEZpeGVzIGRvdWJsZSBtZW1jcHkgb2YgYWxsIHJlbmRl
cmVkIHZpZGVvIGZyYW1lcy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWVkaWFQbGF5
ZXJQcml2YXRlUmVwYWludENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZTo6TWVkaWFQbGF5ZXJQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZTo6fk1lZGlhUGxheWVyUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGU6OmR1cmF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
dGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL1ZpZGVvU2lua0dTdHJlYW1lci5jcHA6CisgICAgICAgICh3ZWJraXRfdmlkZW9f
c2lua190aW1lb3V0X2Z1bmMpOgorICAgICAgICAod2Via2l0X3ZpZGVvX3NpbmtfZGlzcG9zZSk6
CisgICAgICAgICh1bmxvY2tfYnVmZmVyX211dGV4KToKKyAgICAgICAgKHdlYmtpdF92aWRlb19z
aW5rX3VubG9jayk6CisgICAgICAgIChtYXJzaGFsX1ZPSURfX01JTklPQkpFQ1QpOgorICAgICAg
ICAod2Via2l0X3ZpZGVvX3NpbmtfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfdmlkZW9f
c2lua19uZXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9WaWRlb1NpbmtHU3Ry
ZWFtZXIuaDoKKyAgICAgICAgRGlyZWN0bHkgcGFzcyB0aGUgYnVmZmVycyB1cCB0byB0aGUgTWVk
aWFQbGF5ZXJQcml2YXRlOjpwYWludCgpCisgICAgICAgIG1ldGhvZCBpbnN0ZWFkIG9mIHJlbmRl
cmluZyB0aGVtIGZpcnN0IHRvIGFuIGludGVybWVkaWF0ZSBjYWlybworICAgICAgICBzdXJmYWNl
LiBUaGlzIHNob3VsZCBpbmNyZWFzZSBwZXJmb3JtYW5jZSBhbmQgcGVhayBtZW1vcnkgdXNhZ2Uu
CisKIDIwMDktMTAtMTEgIERhbmllbCBCYXRlcyAgPGRiYXRlc0B3ZWJraXQub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ndGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIu
Y3BwCTIwMDktMTAtMTIgMTA6MDM6MzMuMDAwMDAwMDAwICswMjAwCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2d0ay9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCTIwMDktMTAt
MTIgMTU6Mzk6NDMuMDAwMDAwMDAwICswMjAwCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAi
V2lkZ2V0LmgiCiAjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgogCi0jaW5jbHVkZSA8Z3N0L2Jhc2Uv
Z3N0YmFzZXNyYy5oPgogI2luY2x1ZGUgPGdzdC9nc3QuaD4KICNpbmNsdWRlIDxnc3QvaW50ZXJm
YWNlcy9taXhlci5oPgogI2luY2x1ZGUgPGdzdC9pbnRlcmZhY2VzL3hvdmVybGF5Lmg+CkBAIC0x
MDUsOCArMTA0LDEwIEBACiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyB2b2lkIG1lZGlh
UGxheWVyUHJpdmF0ZVJlcGFpbnRDYWxsYmFjayhXZWJLaXRWaWRlb1NpbmsqLCBNZWRpYVBsYXll
clByaXZhdGUqIHBsYXllclByaXZhdGUpCit2b2lkIG1lZGlhUGxheWVyUHJpdmF0ZVJlcGFpbnRD
YWxsYmFjayhXZWJLaXRWaWRlb1NpbmsqLCBHc3RCdWZmZXIgKmJ1ZmZlciwgTWVkaWFQbGF5ZXJQ
cml2YXRlKiBwbGF5ZXJQcml2YXRlKQogeworICAgIGdfcmV0dXJuX2lmX2ZhaWwoR1NUX0lTX0JV
RkZFUihidWZmZXIpKTsKKyAgICBnc3RfYnVmZmVyX3JlcGxhY2UoJnBsYXllclByaXZhdGUtPm1f
YnVmZmVyLCBidWZmZXIpOwogICAgIHBsYXllclByaXZhdGUtPnJlcGFpbnQoKTsKIH0KIApAQCAt
MTQ4LDIwICsxNDksMTkgQEAKICAgICAsIG1faXNTdHJlYW1pbmcoZmFsc2UpCiAgICAgLCBtX3Np
emUoSW50U2l6ZSgpKQogICAgICwgbV92aXNpYmxlKHRydWUpCisgICAgLCBtX2J1ZmZlcigwKQog
ICAgICwgbV9wYXVzZWQodHJ1ZSkKICAgICAsIG1fc2Vla2luZyhmYWxzZSkKICAgICAsIG1fZXJy
b3JPY2N1cmVkKGZhbHNlKQogewogICAgIGRvX2dzdF9pbml0KCk7Ci0KLSAgICAvLyBGSVhNRTog
VGhlIHNpemUgc2hvdWxkbid0IGJlIGZpeGVkIGhlcmUsIHRoaXMgaXMganVzdCBhIHF1aWNrIGhh
Y2suCi0gICAgbV9zdXJmYWNlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9S
TUFUX0FSR0IzMiwgNjQwLCA0ODApOwogfQogCiBNZWRpYVBsYXllclByaXZhdGU6On5NZWRpYVBs
YXllclByaXZhdGUoKQogewotICAgIGlmIChtX3N1cmZhY2UpCi0gICAgICAgIGNhaXJvX3N1cmZh
Y2VfZGVzdHJveShtX3N1cmZhY2UpOworICAgIGlmIChtX2J1ZmZlcikKKyAgICAgICAgZ3N0X2J1
ZmZlcl91bnJlZihtX2J1ZmZlcik7CisgICAgbV9idWZmZXIgPSAwOwogCiAgICAgaWYgKG1fcGxh
eUJpbikgewogICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9wbGF5QmluLCBHU1RfU1RB
VEVfTlVMTCk7CkBAIC0zMjcsMTQgKzMyNywxNiBAQAogICAgIC8vIGh0dHBzOi8vYnVnemlsbGEu
Z25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01OTYzMjYKICAgICBpbnQgd2lkdGggPSAwLCBoZWln
aHQgPSAwOwogICAgIGlmIChHc3RQYWQqIHBhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFk
KG1fdmlkZW9TaW5rLCAic2luayIpKSB7Ci0gICAgICAgIGdzdF92aWRlb19nZXRfc2l6ZShHU1Rf
UEFEKHBhZCksICZ3aWR0aCwgJmhlaWdodCk7CiAgICAgICAgIEdzdENhcHMqIGNhcHMgPSBHU1Rf
UEFEX0NBUFMocGFkKTsKICAgICAgICAgZ2Zsb2F0IHBpeGVsQXNwZWN0UmF0aW87CiAgICAgICAg
IGdpbnQgcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciwgcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5h
dG9yOwogCi0gICAgICAgIGlmICghZ3N0X3ZpZGVvX3BhcnNlX2NhcHNfcGl4ZWxfYXNwZWN0X3Jh
dGlvKGNhcHMsICZwaXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGl4ZWxBc3BlY3RSYXRpb0Rlbm9t
aW5hdG9yKSkKLSAgICAgICAgICAgIHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3IgPSBwaXhlbEFz
cGVjdFJhdGlvRGVub21pbmF0b3IgPSAxOworICAgICAgICBpZiAoIWdzdF92aWRlb19mb3JtYXRf
cGFyc2VfY2FwcyhjYXBzLCBOVUxMLCAmd2lkdGgsICZoZWlnaHQpIHx8CisgICAgICAgICAgICAh
Z3N0X3ZpZGVvX3BhcnNlX2NhcHNfcGl4ZWxfYXNwZWN0X3JhdGlvKGNhcHMsICZwaXhlbEFzcGVj
dFJhdGlvTnVtZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKSkgeworICAg
ICAgICAgICAgZ3N0X29iamVjdF91bnJlZihHU1RfT0JKRUNUKHBhZCkpOworICAgICAgICAgICAg
cmV0dXJuIEludFNpemUoKTsKKyAgICAgICAgfQogCiAgICAgICAgIHBpeGVsQXNwZWN0UmF0aW8g
PSAoZ2Zsb2F0KSBwaXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yIC8gKGdmbG9hdCkgcGl4ZWxBc3Bl
Y3RSYXRpb0Rlbm9taW5hdG9yOwogICAgICAgICB3aWR0aCAqPSBwaXhlbEFzcGVjdFJhdGlvOwpA
QCAtNjI2LDE4ICs2MjgsNyBAQAogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0U2l6ZShj
b25zdCBJbnRTaXplJiBzaXplKQogewotICAgIC8vIERlc3Ryb3kgYW5kIHJlLWNyZWF0ZSB0aGUg
Y2Fpcm8gc3VyZmFjZSBvbmx5IGlmIHRoZSBzaXplCi0gICAgLy8gY2hhbmdlZC4KLSAgICBpZiAo
c2l6ZSAhPSBtX3NpemUpIHsKLSAgICAgICAgaWYgKG1fc3VyZmFjZSkKLSAgICAgICAgICAgIGNh
aXJvX3N1cmZhY2VfZGVzdHJveShtX3N1cmZhY2UpOwotICAgICAgICBtX3N1cmZhY2UgPSBjYWly
b19pbWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRfQVJHQjMyLCBzaXplLndpZHRoKCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUuaGVp
Z2h0KCkpOwotICAgICAgICBnX29iamVjdF9zZXQobV92aWRlb1NpbmssICJzdXJmYWNlIiwgbV9z
dXJmYWNlLCAwKTsKLSAgICB9Ci0KICAgICBtX3NpemUgPSBzaXplOwotCiB9CiAKIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKQEAgLTY1Nyw4ICs2NDgs
MzAgQEAKIAogICAgIGlmICghbV92aXNpYmxlKQogICAgICAgICByZXR1cm47CisgICAgaWYgKCFt
X2J1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IHdpZHRoID0gMCwgaGVpZ2h0ID0g
MDsKKyAgICBpbnQgcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciA9IDA7CisgICAgaW50IHBpeGVs
QXNwZWN0UmF0aW9EZW5vbWluYXRvciA9IDA7CisgICAgZG91YmxlIGRvdWJsZVBpeGVsQXNwZWN0
UmF0aW9OdW1lcmF0b3IgPSAwOworICAgIGRvdWJsZSBkb3VibGVQaXhlbEFzcGVjdFJhdGlvRGVu
b21pbmF0b3IgPSAwOworICAgIEdzdENhcHMgKmNhcHMgPSBnc3RfYnVmZmVyX2dldF9jYXBzKG1f
YnVmZmVyKTsKKworICAgIGlmICghZ3N0X3ZpZGVvX2Zvcm1hdF9wYXJzZV9jYXBzKGNhcHMsIE5V
TEwsICZ3aWR0aCwgJmhlaWdodCkgfHwKKyAgICAgICAgIWdzdF92aWRlb19wYXJzZV9jYXBzX3Bp
eGVsX2FzcGVjdF9yYXRpbyhjYXBzLCAmcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciwgJnBpeGVs
QXNwZWN0UmF0aW9EZW5vbWluYXRvcikpIHsKKyAgICAgIGdzdF9jYXBzX3VucmVmKGNhcHMpOwor
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRvdWJsZVBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0
b3IgPSBwaXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yOworICAgIGRvdWJsZVBpeGVsQXNwZWN0UmF0
aW9EZW5vbWluYXRvciA9IHBpeGVsQXNwZWN0UmF0aW9EZW5vbWluYXRvcjsKIAogICAgIGNhaXJv
X3QqIGNyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgY2Fpcm9fc3VyZmFjZV90
KiBzcmMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShHU1RfQlVGRkVSX0RB
VEEobV9idWZmZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ0FJUk9fRk9STUFUX1JHQjI0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhl
aWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDQgKiB3aWR0aCk7CiAKICAgICBjYWlyb19zYXZlKGNyKTsKICAgICBjYWly
b19zZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7CkBAIC02NjYsOSArNjc5
LDE0IEBACiAgICAgLy8gcGFpbnQgdGhlIHJlY3RhbmdsZSBvbiB0aGUgY29udGV4dCBhbmQgZHJh
dyB0aGUgc3VyZmFjZSBpbnNpZGUuCiAgICAgY2Fpcm9fdHJhbnNsYXRlKGNyLCByZWN0LngoKSwg
cmVjdC55KCkpOwogICAgIGNhaXJvX3JlY3RhbmdsZShjciwgMCwgMCwgcmVjdC53aWR0aCgpLCBy
ZWN0LmhlaWdodCgpKTsKLSAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IsIG1fc3VyZmFj
ZSwgMCwgMCk7CisgICAgY2Fpcm9fc2NhbGUoY3IsIGRvdWJsZVBpeGVsQXNwZWN0UmF0aW9OdW1l
cmF0b3IgLyBkb3VibGVQaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3IsCisgICAgICAgICAgICAg
ICAgZG91YmxlUGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yIC8gZG91YmxlUGl4ZWxBc3BlY3RS
YXRpb051bWVyYXRvcik7CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLCBzcmMsIDAs
IDApOwogICAgIGNhaXJvX2ZpbGwoY3IpOwogICAgIGNhaXJvX3Jlc3RvcmUoY3IpOworCisgICAg
Y2Fpcm9fc3VyZmFjZV9kZXN0cm95KHNyYyk7CisgICAgZ3N0X2NhcHNfdW5yZWYoY2Fwcyk7CiB9
CiAKIHN0YXRpYyBIYXNoU2V0PFN0cmluZz4gbWltZVR5cGVDYWNoZSgpCkBAIC04MDAsNyArODE4
LDcgQEAKIAogICAgIGdfb2JqZWN0X3NldChHX09CSkVDVChtX3BsYXlCaW4pLCAidXJpIiwgdXJs
LnV0ZjgoKS5kYXRhKCksIE5VTEwpOwogCi0gICAgbV92aWRlb1NpbmsgPSB3ZWJraXRfdmlkZW9f
c2lua19uZXcobV9zdXJmYWNlKTsKKyAgICBtX3ZpZGVvU2luayA9IHdlYmtpdF92aWRlb19zaW5r
X25ldygpOwogCiAgICAgZ19vYmplY3RfcmVmX3NpbmsobV92aWRlb1NpbmspOwogICAgIGdfb2Jq
ZWN0X3NldChtX3BsYXlCaW4sICJ2aWRlby1zaW5rIiwgbV92aWRlb1NpbmssIE5VTEwpOwpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgJMjAwOS0xMC0xMiAxMDowMzozMy4wMDAwMDAwMDAgKzAy
MDAKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lci5oCTIwMDktMTAtMTIgMTU6MjA6MzUuMDAwMDAwMDAwICswMjAwCkBAIC0zMCw4ICsz
MCwxMCBAQAogI2luY2x1ZGUgPGNhaXJvLmg+CiAjaW5jbHVkZSA8Z2xpYi5oPgogCi10eXBlZGVm
IHN0cnVjdCBfR3N0RWxlbWVudCBHc3RFbGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFZp
ZGVvU2luayBXZWJLaXRWaWRlb1Npbms7Cit0eXBlZGVmIHN0cnVjdCBfR3N0QnVmZmVyIEdzdEJ1
ZmZlcjsKIHR5cGVkZWYgc3RydWN0IF9Hc3RNZXNzYWdlIEdzdE1lc3NhZ2U7Cit0eXBlZGVmIHN0
cnVjdCBfR3N0RWxlbWVudCBHc3RFbGVtZW50OwogdHlwZWRlZiBzdHJ1Y3QgX0dzdEJ1cyBHc3RC
dXM7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ5LDYgKzUxLDcgQEAKICAgICAgICAgZnJp
ZW5kIGdib29sZWFuIG1lZGlhUGxheWVyUHJpdmF0ZUVycm9yQ2FsbGJhY2soR3N0QnVzKiBidXMs
IEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIGdwb2ludGVyIGRhdGEpOwogICAgICAgICBmcmllbmQgZ2Jv
b2xlYW4gbWVkaWFQbGF5ZXJQcml2YXRlRU9TQ2FsbGJhY2soR3N0QnVzKiBidXMsIEdzdE1lc3Nh
Z2UqIG1lc3NhZ2UsIGdwb2ludGVyIGRhdGEpOwogICAgICAgICBmcmllbmQgZ2Jvb2xlYW4gbWVk
aWFQbGF5ZXJQcml2YXRlU3RhdGVDYWxsYmFjayhHc3RCdXMqIGJ1cywgR3N0TWVzc2FnZSogbWVz
c2FnZSwgZ3BvaW50ZXIgZGF0YSk7CisgICAgICAgIGZyaWVuZCB2b2lkIG1lZGlhUGxheWVyUHJp
dmF0ZVJlcGFpbnRDYWxsYmFjayhXZWJLaXRWaWRlb1NpbmsqLCBHc3RCdWZmZXIgKmJ1ZmZlciwg
TWVkaWFQbGF5ZXJQcml2YXRlKiBwbGF5ZXJQcml2YXRlKTsKIAogICAgICAgICBwdWJsaWM6CiAg
ICAgICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVn
aXN0cmFyKTsKQEAgLTEzNiw3ICsxMzksNyBAQAogICAgICAgICAgICAgbXV0YWJsZSBib29sIG1f
aXNTdHJlYW1pbmc7CiAgICAgICAgICAgICBJbnRTaXplIG1fc2l6ZTsKICAgICAgICAgICAgIGJv
b2wgbV92aXNpYmxlOwotICAgICAgICAgICAgY2Fpcm9fc3VyZmFjZV90KiBtX3N1cmZhY2U7Cisg
ICAgICAgICAgICBHc3RCdWZmZXIqIG1fYnVmZmVyOwogCiAgICAgICAgICAgICBib29sIG1fcGF1
c2VkOwogICAgICAgICAgICAgYm9vbCBtX3NlZWtpbmc7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAJMjAwOS0xMC0x
MiAxMDowMzozNy4wMDAwMDAwMDAgKzAyMDAKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAJMjAwOS0xMC0xMiAxNToyNToxMy4wMDAwMDAwMDAg
KzAyMDAKQEAgLTIxLDggKzIxLDkgQEAKICAqIFNFQ1RJT046d2Via2l0LXZpZGVvLXNpbmsKICAq
IEBzaG9ydF9kZXNjcmlwdGlvbjogR1N0cmVhbWVyIHZpZGVvIHNpbmsKICAqCi0gKiAjV2ViS2l0
VmlkZW9TaW5rIGlzIGEgR1N0cmVhbWVyIHNpbmsgZWxlbWVudCB0aGF0IHNlbmRzCi0gKiBkYXRh
IHRvIGEgI2NhaXJvX3N1cmZhY2VfdC4KKyAqICNXZWJLaXRWaWRlb1NpbmsgaXMgYSBHU3RyZWFt
ZXIgc2luayBlbGVtZW50IHRoYXQgdHJpZ2dlcnMKKyAqIHJlcGFpbnRzIGluIHRoZSBXZWJLaXQg
R1N0cmVhbWVyIG1lZGlhIHBsYXllciBmb3IgdGhlCisgKiBjdXJyZW50IHZpZGVvIGJ1ZmZlci4K
ICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCkBAIC01NywyMSArNTgsMTIgQEAKIH07CiAKIGVu
dW0gewotICAgIFBST1BfMCwKLSAgICBQUk9QX1NVUkZBQ0UKKyAgICBQUk9QXzAKIH07CiAKIHN0
YXRpYyBndWludCB3ZWJraXRfdmlkZW9fc2lua19zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCwg
fTsKIAogc3RydWN0IF9XZWJLaXRWaWRlb1NpbmtQcml2YXRlIHsKLSAgICBjYWlyb19zdXJmYWNl
X3QqIHN1cmZhY2U7Ci0gICAgZ2Jvb2xlYW4gcmdiX29yZGVyaW5nOwotICAgIGludCB3aWR0aDsK
LSAgICBpbnQgaGVpZ2h0OwotICAgIGludCBmcHNfbjsKLSAgICBpbnQgZnBzX2Q7Ci0gICAgaW50
IHBhcl9uOwotICAgIGludCBwYXJfZDsKICAgICBHc3RCdWZmZXIqIGJ1ZmZlcjsKICAgICBndWlu
dCB0aW1lb3V0X2lkOwogICAgIEdNdXRleCogYnVmZmVyX211dGV4OwpAQCAtMTE1LDE0ICsxMDcs
MTAgQEAKICAgICBXZWJLaXRWaWRlb1NpbmsqIHNpbmsgPSByZWludGVycHJldF9jYXN0PFdlYktp
dFZpZGVvU2luayo+KGRhdGEpOwogICAgIFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBz
aW5rLT5wcml2OwogICAgIEdzdEJ1ZmZlciogYnVmZmVyOwotICAgIEdzdENhcHMqIGNhcHM7Ci0g
ICAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0OwotICAgIGdpbnQgcGFyX24sIHBhcl9kOwotICAgIGdm
bG9hdCBwYXI7Ci0gICAgZ2ludCBid2lkdGgsIGJoZWlnaHQ7CiAKICAgICBnX211dGV4X2xvY2so
cHJpdi0+YnVmZmVyX211dGV4KTsKICAgICBidWZmZXIgPSBwcml2LT5idWZmZXI7CisgICAgcHJp
di0+YnVmZmVyID0gMDsKICAgICBwcml2LT50aW1lb3V0X2lkID0gMDsKIAogICAgIGlmICghYnVm
ZmVyIHx8IEdfVU5MSUtFTFkoIUdTVF9JU19CVUZGRVIoYnVmZmVyKSkpIHsKQEAgLTEzMSwzOSAr
MTE5LDEzIEBACiAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICB9CiAKLSAgICBjYXBzID0gR1NU
X0JVRkZFUl9DQVBTKGJ1ZmZlcik7Ci0gICAgaWYgKCFnc3RfdmlkZW9fZm9ybWF0X3BhcnNlX2Nh
cHMoY2FwcywgJmZvcm1hdCwgJmJ3aWR0aCwgJmJoZWlnaHQpKSB7Ci0gICAgICAgIEdTVF9FUlJP
Ul9PQkpFQ1Qoc2luaywgIlVua25vd24gdmlkZW8gZm9ybWF0IGluIGJ1ZmZlciBjYXBzICclcyci
LAotICAgICAgICAgICAgICAgICAgICAgICAgIGdzdF9jYXBzX3RvX3N0cmluZyhjYXBzKSk7Ci0g
ICAgICAgIGdfY29uZF9zaWduYWwocHJpdi0+ZGF0YV9jb25kKTsKLSAgICAgICAgZ19tdXRleF91
bmxvY2socHJpdi0+YnVmZmVyX211dGV4KTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIGlm
IChHX1VOTElLRUxZKCFHU1RfQlVGRkVSX0NBUFMoYnVmZmVyKSkpIHsKKyAgICAgICAgYnVmZmVy
ID0gZ3N0X2J1ZmZlcl9tYWtlX21ldGFkYXRhX3dyaXRhYmxlKGJ1ZmZlcik7CisgICAgICAgIGdz
dF9idWZmZXJfc2V0X2NhcHMoYnVmZmVyLCBHU1RfUEFEX0NBUFMoR1NUX0JBU0VfU0lOS19QQUQo
c2luaykpKTsKICAgICB9CiAKLSAgICBpZiAoIWdzdF92aWRlb19wYXJzZV9jYXBzX3BpeGVsX2Fz
cGVjdF9yYXRpbyhjYXBzLCAmcGFyX24sICZwYXJfZCkpCi0gICAgICAgIHBhcl9uID0gcGFyX2Qg
PSAxOwotCi0gICAgcGFyID0gKGdmbG9hdCkgcGFyX24gLyAoZ2Zsb2F0KSBwYXJfZDsKLQotICAg
IGNhaXJvX3N1cmZhY2VfdCogc3JjID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2Rh
dGEoR1NUX0JVRkZFUl9EQVRBKGJ1ZmZlciksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQUlST19GT1JNQVRfUkdCMjQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBid2lkdGgsIGJoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICogYndpZHRoKTsKLQotICAgIC8vIFRPRE86
IFdlIGNvcHkgdGhlIGRhdGEgdHdpY2UgcmlnaHQgbm93LiBUaGlzIGNvdWxkIGJlIGVhc2lseSBp
bXByb3ZlZC4KLSAgICBjYWlyb190KiBjciA9IGNhaXJvX2NyZWF0ZShwcml2LT5zdXJmYWNlKTsK
LSAgICBjYWlyb19zY2FsZShjciwgcGFyLCAxLjAgLyBwYXIpOwotICAgIGNhaXJvX3NldF9vcGVy
YXRvcihjciwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKLSAgICBjYWlyb19zZXRfc291cmNlX3N1
cmZhY2UoY3IsIHNyYywgMCwgMCk7Ci0gICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHNyYyk7Ci0g
ICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCAwLCAwLCBwcml2LT53aWR0aCwgcHJpdi0+aGVpZ2h0KTsK
LSAgICBjYWlyb19maWxsKGNyKTsKLSAgICBjYWlyb19kZXN0cm95KGNyKTsKLQorICAgIGdfc2ln
bmFsX2VtaXQoc2luaywgd2Via2l0X3ZpZGVvX3Npbmtfc2lnbmFsc1tSRVBBSU5UX1JFUVVFU1RF
RF0sIDAsIGJ1ZmZlcik7CiAgICAgZ3N0X2J1ZmZlcl91bnJlZihidWZmZXIpOwotICAgIHByaXYt
PmJ1ZmZlciA9IDA7Ci0KLSAgICBnX3NpZ25hbF9lbWl0KHNpbmssIHdlYmtpdF92aWRlb19zaW5r
X3NpZ25hbHNbUkVQQUlOVF9SRVFVRVNURURdLCAwKTsKICAgICBnX2NvbmRfc2lnbmFsKHByaXYt
PmRhdGFfY29uZCk7CiAgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVyX211dGV4KTsKIApA
QCAtMTkwLDU5ICsxNTIsMTIgQEAKICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7CiB9CiAKLXN0YXRp
YyBnYm9vbGVhbgotd2Via2l0X3ZpZGVvX3Npbmtfc2V0X2NhcHMoR3N0QmFzZVNpbmsqIGJzaW5r
LCBHc3RDYXBzKiBjYXBzKQotewotICAgIFdlYktpdFZpZGVvU2luayogc2luayA9IFdFQktJVF9W
SURFT19TSU5LKGJzaW5rKTsKLSAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBwcml2ID0gc2lu
ay0+cHJpdjsKLSAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKLSAgICBnYm9vbGVhbiByZXQ7
Ci0gICAgZ2ludCB3aWR0aCwgaGVpZ2h0LCBmcHNfbiwgZnBzX2Q7Ci0gICAgaW50IHJlZF9tYXNr
OwotCi0gICAgR3N0Q2FwcyogaW50ZXJzZWN0aW9uID0gZ3N0X2NhcHNfaW50ZXJzZWN0KGdzdF9z
dGF0aWNfcGFkX3RlbXBsYXRlX2dldF9jYXBzKCZzaW5rdGVtcGxhdGUpLCBjYXBzKTsKLQotICAg
IGlmIChnc3RfY2Fwc19pc19lbXB0eShpbnRlcnNlY3Rpb24pKQotICAgICAgICByZXR1cm4gRkFM
U0U7Ci0KLSAgICBnc3RfY2Fwc191bnJlZihpbnRlcnNlY3Rpb24pOwotCi0gICAgc3RydWN0dXJl
ID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZShjYXBzLCAwKTsKLQotICAgIHJldCA9IGdzdF9zdHJ1
Y3R1cmVfZ2V0X2ludChzdHJ1Y3R1cmUsICJ3aWR0aCIsICZ3aWR0aCk7Ci0gICAgcmV0ICY9IGdz
dF9zdHJ1Y3R1cmVfZ2V0X2ludChzdHJ1Y3R1cmUsICJoZWlnaHQiLCAmaGVpZ2h0KTsKLQotICAg
IC8qIFdlIGRvbnQgeWV0IHVzZSBmcHMgYnV0IGhhbmR5IHRvIGhhdmUgKi8KLSAgICByZXQgJj0g
Z3N0X3N0cnVjdHVyZV9nZXRfZnJhY3Rpb24oc3RydWN0dXJlLCAiZnJhbWVyYXRlIiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZwc19uLCAmZnBzX2QpOwotICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKHJldCwgRkFMU0UpOwotCi0gICAgcHJpdi0+d2lkdGggPSB3aWR0
aDsKLSAgICBwcml2LT5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgcHJpdi0+ZnBzX24gPSBmcHNfbjsK
LSAgICBwcml2LT5mcHNfZCA9IGZwc19kOwotCi0gICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9m
cmFjdGlvbihzdHJ1Y3R1cmUsICJwaXhlbC1hc3BlY3QtcmF0aW8iLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJnByaXYtPnBhcl9uLCAmcHJpdi0+cGFyX2QpKQotICAgICAg
ICBwcml2LT5wYXJfbiA9IHByaXYtPnBhcl9kID0gMTsKLQotICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0
X2ludChzdHJ1Y3R1cmUsICJyZWRfbWFzayIsICZyZWRfbWFzayk7Ci0gICAgcHJpdi0+cmdiX29y
ZGVyaW5nID0gKHJlZF9tYXNrID09IHN0YXRpY19jYXN0PGludD4oMHhmZjAwMDAwMCkpOwotCi0g
ICAgcmV0dXJuIFRSVUU7Ci19Ci0KIHN0YXRpYyB2b2lkCiB3ZWJraXRfdmlkZW9fc2lua19kaXNw
b3NlKEdPYmplY3QqIG9iamVjdCkKIHsKICAgICBXZWJLaXRWaWRlb1NpbmsqIHNpbmsgPSBXRUJL
SVRfVklERU9fU0lOSyhvYmplY3QpOwogICAgIFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXYg
PSBzaW5rLT5wcml2OwogCi0gICAgaWYgKHByaXYtPnN1cmZhY2UpIHsKLSAgICAgICAgY2Fpcm9f
c3VyZmFjZV9kZXN0cm95KHByaXYtPnN1cmZhY2UpOwotICAgICAgICBwcml2LT5zdXJmYWNlID0g
MDsKLSAgICB9Ci0KICAgICBpZiAocHJpdi0+ZGF0YV9jb25kKSB7CiAgICAgICAgIGdfY29uZF9m
cmVlKHByaXYtPmRhdGFfY29uZCk7CiAgICAgICAgIHByaXYtPmRhdGFfY29uZCA9IDA7CkBAIC0y
NjgsNDkgKzE4MywxNiBAQAogCiAgICAgZ19jb25kX3NpZ25hbChwcml2LT5kYXRhX2NvbmQpOwog
ICAgIGdfbXV0ZXhfdW5sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7Ci0KIH0KIAogc3RhdGljIGdi
b29sZWFuCiB3ZWJraXRfdmlkZW9fc2lua191bmxvY2soR3N0QmFzZVNpbmsqIG9iamVjdCkKIHsK
ICAgICBXZWJLaXRWaWRlb1NpbmsqIHNpbmsgPSBXRUJLSVRfVklERU9fU0lOSyhvYmplY3QpOwot
ICAgIHVubG9ja19idWZmZXJfbXV0ZXgoc2luay0+cHJpdik7Ci0gICAgR1NUX0NBTExfUEFSRU5U
X1dJVEhfREVGQVVMVChHU1RfQkFTRV9TSU5LX0NMQVNTLCB1bmxvY2ssCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAob2JqZWN0KSwgVFJVRSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi13
ZWJraXRfdmlkZW9fc2lua19zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9w
X2lkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKLXsKLSAgICBXZWJL
aXRWaWRlb1NpbmsqIHNpbmsgPSBXRUJLSVRfVklERU9fU0lOSyhvYmplY3QpOwotICAgIFdlYktp
dFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBzaW5rLT5wcml2OwotCi0gICAgc3dpdGNoIChwcm9w
X2lkKSB7Ci0gICAgY2FzZSBQUk9QX1NVUkZBQ0U6Ci0gICAgICAgIGlmIChwcml2LT5zdXJmYWNl
KQotICAgICAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHByaXYtPnN1cmZhY2UpOwotICAg
ICAgICBwcml2LT5zdXJmYWNlID0gY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2UoKGNhaXJvX3N1cmZh
Y2VfdCopZ192YWx1ZV9nZXRfcG9pbnRlcih2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0
LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotc3RhdGljIHZv
aWQKLXdlYmtpdF92aWRlb19zaW5rX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50
IHByb3BfaWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQotewotICAgIFdlYktp
dFZpZGVvU2luayogc2luayA9IFdFQktJVF9WSURFT19TSU5LKG9iamVjdCk7CiAKLSAgICBzd2l0
Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfU1VSRkFDRToKLSAgICAgICAgZ192YWx1ZV9z
ZXRfcG9pbnRlcih2YWx1ZSwgc2luay0+cHJpdi0+c3VyZmFjZSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChv
YmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIHVubG9j
a19idWZmZXJfbXV0ZXgoc2luay0+cHJpdik7CisgICAgcmV0dXJuIEdTVF9DQUxMX1BBUkVOVF9X
SVRIX0RFRkFVTFQoR1NUX0JBU0VfU0lOS19DTEFTUywgdW5sb2NrLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChvYmplY3QpLCBUUlVFKTsKIH0KIAogc3RhdGljIGdi
b29sZWFuCkBAIC0zMjIsNiArMjA0LDMwIEBACiB9CiAKIHN0YXRpYyB2b2lkCittYXJzaGFsX1ZP
SURfX01JTklPQkpFQ1QoR0Nsb3N1cmUgKiBjbG9zdXJlLCBHVmFsdWUgKiByZXR1cm5fdmFsdWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgbl9wYXJhbV92YWx1ZXMsIGNvbnN0IEdW
YWx1ZSAqIHBhcmFtX3ZhbHVlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciBp
bnZvY2F0aW9uX2hpbnQsIGdwb2ludGVyIG1hcnNoYWxfZGF0YSkKK3sKKyAgdHlwZWRlZiB2b2lk
ICgqbWFyc2hhbGZ1bmNfVk9JRF9fTUlOSU9CSkVDVCkgKGdwb2ludGVyIG9iaiwgZ3BvaW50ZXIg
YXJnMSwgZ3BvaW50ZXIgZGF0YTIpOworICBtYXJzaGFsZnVuY19WT0lEX19NSU5JT0JKRUNUIGNh
bGxiYWNrOworICBHQ0Nsb3N1cmUgKmNjID0gKEdDQ2xvc3VyZSAqKSBjbG9zdXJlOworICBncG9p
bnRlciBkYXRhMSwgZGF0YTI7CisKKyAgZ19yZXR1cm5faWZfZmFpbChuX3BhcmFtX3ZhbHVlcyA9
PSAyKTsKKworICBpZiAoR19DQ0xPU1VSRV9TV0FQX0RBVEEoY2xvc3VyZSkpIHsKKyAgICAgIGRh
dGExID0gY2xvc3VyZS0+ZGF0YTsKKyAgICAgIGRhdGEyID0gZ192YWx1ZV9wZWVrX3BvaW50ZXIo
cGFyYW1fdmFsdWVzICsgMCk7CisgIH0gZWxzZSB7CisgICAgICBkYXRhMSA9IGdfdmFsdWVfcGVl
a19wb2ludGVyKHBhcmFtX3ZhbHVlcyArIDApOworICAgICAgZGF0YTIgPSBjbG9zdXJlLT5kYXRh
OworICB9CisgIGNhbGxiYWNrID0gKG1hcnNoYWxmdW5jX1ZPSURfX01JTklPQkpFQ1QpIChtYXJz
aGFsX2RhdGEgPyBtYXJzaGFsX2RhdGEgOiBjYy0+Y2FsbGJhY2spOworCisgIGNhbGxiYWNrKGRh
dGExLCBnc3RfdmFsdWVfZ2V0X21pbmlfb2JqZWN0KHBhcmFtX3ZhbHVlcyArIDEpLCBkYXRhMik7
Cit9CisKK3N0YXRpYyB2b2lkCiB3ZWJraXRfdmlkZW9fc2lua19jbGFzc19pbml0KFdlYktpdFZp
ZGVvU2lua0NsYXNzKiBrbGFzcykKIHsKICAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RfY2xhc3Mg
PSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7CkBAIC0zMjksMTYgKzIzNSwxMiBAQAogCiAgICAgZ190
eXBlX2NsYXNzX2FkZF9wcml2YXRlKGtsYXNzLCBzaXplb2YoV2ViS2l0VmlkZW9TaW5rUHJpdmF0
ZSkpOwogCi0gICAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X3ZpZGVvX3Np
bmtfc2V0X3Byb3BlcnR5OwotICAgIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtp
dF92aWRlb19zaW5rX2dldF9wcm9wZXJ0eTsKLQogICAgIGdvYmplY3RfY2xhc3MtPmRpc3Bvc2Ug
PSB3ZWJraXRfdmlkZW9fc2lua19kaXNwb3NlOwogCiAgICAgZ3N0YmFzZV9zaW5rX2NsYXNzLT51
bmxvY2sgPSB3ZWJraXRfdmlkZW9fc2lua191bmxvY2s7CiAgICAgZ3N0YmFzZV9zaW5rX2NsYXNz
LT5yZW5kZXIgPSB3ZWJraXRfdmlkZW9fc2lua19yZW5kZXI7CiAgICAgZ3N0YmFzZV9zaW5rX2Ns
YXNzLT5wcmVyb2xsID0gd2Via2l0X3ZpZGVvX3NpbmtfcmVuZGVyOwogICAgIGdzdGJhc2Vfc2lu
a19jbGFzcy0+c3RvcCA9IHdlYmtpdF92aWRlb19zaW5rX3N0b3A7Ci0gICAgZ3N0YmFzZV9zaW5r
X2NsYXNzLT5zZXRfY2FwcyA9IHdlYmtpdF92aWRlb19zaW5rX3NldF9jYXBzOwogCiAgICAgd2Vi
a2l0X3ZpZGVvX3Npbmtfc2lnbmFsc1tSRVBBSU5UX1JFUVVFU1RFRF0gPSBnX3NpZ25hbF9uZXco
InJlcGFpbnQtcmVxdWVzdGVkIiwKICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGtsYXNz
KSwKQEAgLTM0NiwzNyArMjQ4LDIwIEBACiAgICAgICAgICAgICAwLAogICAgICAgICAgICAgMCwK
ICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fVk9J
RCwKLSAgICAgICAgICAgIEdfVFlQRV9OT05FLCAwKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RfY2xhc3MsIFBST1BfU1VSRkFDRSwKLSAg
ICAgICAgZ19wYXJhbV9zcGVjX3BvaW50ZXIoInN1cmZhY2UiLCAic3VyZmFjZSIsICJUYXJnZXQg
Y2Fpcm9fc3VyZmFjZV90KiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChHUGFyYW1G
bGFncykoR19QQVJBTV9SRUFEV1JJVEUpKSk7CisgICAgICAgICAgICBtYXJzaGFsX1ZPSURfX01J
TklPQkpFQ1QsCisgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwgR1NUX1RZUEVfQlVGRkVSKTsK
IH0KIAogLyoqCiAgKiB3ZWJraXRfdmlkZW9fc2lua19uZXc6Ci0gKiBAc3VyZmFjZTogYSAjY2Fp
cm9fc3VyZmFjZV90CiAgKgotICogQ3JlYXRlcyBhIG5ldyBHU3RyZWFtZXIgdmlkZW8gc2luayB3
aGljaCB1c2VzIEBzdXJmYWNlIGFzIHRoZSB0YXJnZXQKLSAqIGZvciBzaW5raW5nIGEgdmlkZW8g
c3RyZWFtIGZyb20gR1N0cmVhbWVyLgorICogQ3JlYXRlcyBhIG5ldyBHU3RyZWFtZXIgdmlkZW8g
c2luay4KICAqCiAgKiBSZXR1cm4gdmFsdWU6IGEgI0dzdEVsZW1lbnQgZm9yIHRoZSBuZXdseSBj
cmVhdGVkIHZpZGVvIHNpbmsKICAqLwogR3N0RWxlbWVudCoKLXdlYmtpdF92aWRlb19zaW5rX25l
dyhjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpCit3ZWJraXRfdmlkZW9fc2lua19uZXcodm9pZCkK
IHsKLSAgICByZXR1cm4gKEdzdEVsZW1lbnQqKWdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9WSURF
T19TSU5LLCAic3VyZmFjZSIsIHN1cmZhY2UsIDApOworICAgIHJldHVybiAoR3N0RWxlbWVudCop
Z19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1ZJREVPX1NJTkssIDApOwogfQogCi12b2lkCi13ZWJr
aXRfdmlkZW9fc2lua19zZXRfc3VyZmFjZShXZWJLaXRWaWRlb1NpbmsqIHNpbmssIGNhaXJvX3N1
cmZhY2VfdCogc3VyZmFjZSkKLXsKLSAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBwcml2Owot
Ci0gICAgc2luay0+cHJpdiA9IHByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoc2lu
aywgV0VCS0lUX1RZUEVfVklERU9fU0lOSywgV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSk7Ci0gICAg
aWYgKHByaXYtPnN1cmZhY2UpCi0gICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShwcml2LT5z
dXJmYWNlKTsKLSAgICBwcml2LT5zdXJmYWNlID0gY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2Uoc3Vy
ZmFjZSk7Ci19CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9WaWRlb1NpbmtH
U3RyZWFtZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9W
aWRlb1NpbmtHU3RyZWFtZXIuaAkyMDA5LTEwLTEyIDEwOjAzOjM4LjAwMDAwMDAwMCArMDIwMAor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvVmlkZW9TaW5rR1N0cmVhbWVyLmgJMjAw
OS0xMC0xMiAxMDowMzo1NC4wMDAwMDAwMDAgKzAyMDAKQEAgLTcyLDkgKzcyLDcgQEAKIH07CiAK
IEdUeXBlICAgICAgIHdlYmtpdF92aWRlb19zaW5rX2dldF90eXBlKHZvaWQpIEdfR05VQ19DT05T
VDsKLUdzdEVsZW1lbnQgKndlYmtpdF92aWRlb19zaW5rX25ldyhjYWlyb19zdXJmYWNlX3QgKnN1
cmZhY2UpOwotCi12b2lkIHdlYmtpdF92aWRlb19zaW5rX3NldF9zdXJmYWNlKFdlYktpdFZpZGVv
U2luayAqc2luaywgY2Fpcm9fc3VyZmFjZV90ICpzdXJmYWNlKTsKK0dzdEVsZW1lbnQgKndlYmtp
dF92aWRlb19zaW5rX25ldyh2b2lkKTsKIAogR19FTkRfREVDTFMKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>