<?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>54080</bug_id>
          
          <creation_ts>2011-02-09 01:35:51 -0800</creation_ts>
          <short_desc>[GTK] Implement UpdateChunk, ChunkedUpdateDrawingArea/Proxy classes for WebKit2</short_desc>
          <delta_ts>2011-02-11 11:21:51 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>52805</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alejandro G. Castro">alex</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>amruthraj</cc>
    
    <cc>mrobinson</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>348063</commentid>
    <comment_count>0</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-09 01:35:51 -0800</bug_when>
    <thetext>We have to add those classes for gtk webkit2 compilation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348182</commentid>
    <comment_count>1</comment_count>
      <attachid>81796</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-09 06:24:04 -0800</bug_when>
    <thetext>Created attachment 81796
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348837</commentid>
    <comment_count>2</comment_count>
    <who name="Amruth Raj">amruthraj</who>
    <bug_when>2011-02-09 23:21:24 -0800</bug_when>
    <thetext>Some comments from a non reviewer.
View in context: https://bugs.webkit.org/attachment.cgi?id=81796&amp;action=review

&gt; Source/WebKit2/Shared/gtk/UpdateChunk.cpp:57
&gt; +        encoder-&gt;encode(false);

Can we send an empty m_rect instead of a separate variable to signify that SharedMemory creation failed?

&gt; Source/WebKit2/Shared/gtk/UpdateChunk.cpp:104
&gt; +    int stride = cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32, m_rect.width());

This assumes that the bit depth is always 32 bit, can we provide an option to use a lower resolution for systems with less memory?

&gt; Source/WebKit2/UIProcess/gtk/ChunkedUpdateDrawingAreaProxyGtk.cpp:79
&gt; +    cairo_surface_t* pixmap(updateChunk-&gt;createImage());

The return pixmap&apos;s status has to be checked using cairo_surface_status(pixmap) before using.

&gt; Source/WebKit2/UIProcess/gtk/ChunkedUpdateDrawingAreaProxyGtk.cpp:86
&gt; +

The cairo_surface_t also has to be destroyed.

&gt; Source/WebKit2/WebProcess/WebPage/gtk/ChunkedUpdateDrawingAreaGtk.cpp:45
&gt; +    cairo_surface_t* image = updateChunk-&gt;createImage();

image has to be destroyed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348920</commentid>
    <comment_count>3</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-10 03:35:33 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Some comments from a non reviewer.

Thanks very much for the review.

&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81796&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/Shared/gtk/UpdateChunk.cpp:57
&gt; &gt; +        encoder-&gt;encode(false);
&gt; 
&gt; Can we send an empty m_rect instead of a separate variable to signify that SharedMemory creation failed?
&gt;

I guess it is better to do this kind of changes with all the shared memory patch that you are doing? I did not check much the sharedmemory patch you sent, just fixes to make it work.

&gt; &gt; Source/WebKit2/Shared/gtk/UpdateChunk.cpp:104
&gt; &gt; +    int stride = cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32, m_rect.width());
&gt; 
&gt; This assumes that the bit depth is always 32 bit, can we provide an option to use a lower resolution for systems with less memory?
&gt;

Yep, it is something pendind, I was not sure if it makes sense to do it now or keep this patch more simple. I&apos;ll check it.

&gt; &gt; Source/WebKit2/UIProcess/gtk/ChunkedUpdateDrawingAreaProxyGtk.cpp:79
&gt; &gt; +    cairo_surface_t* pixmap(updateChunk-&gt;createImage());
&gt; 
&gt; The return pixmap&apos;s status has to be checked using cairo_surface_status(pixmap) before using.
&gt; 

Yep, I&apos;ll add this.

&gt; &gt; Source/WebKit2/UIProcess/gtk/ChunkedUpdateDrawingAreaProxyGtk.cpp:86
&gt; &gt; +
&gt; 
&gt; The cairo_surface_t also has to be destroyed.
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/gtk/ChunkedUpdateDrawingAreaGtk.cpp:45
&gt; &gt; +    cairo_surface_t* image = updateChunk-&gt;createImage();
&gt; 
&gt; image has to be destroyed.

Both fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348986</commentid>
    <comment_count>4</comment_count>
      <attachid>81959</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-10 05:44:19 -0800</bug_when>
    <thetext>Created attachment 81959
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349125</commentid>
    <comment_count>5</comment_count>
      <attachid>81959</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-02-10 09:23:32 -0800</bug_when>
    <thetext>Comment on attachment 81959
Proposed patch

View in context: https://bugs.webkit.org/attachment.cgi?id=81959&amp;action=review

Looks good to me! I wouldn&apos;t mind Amruth taking another look at it too.

&gt; Source/WebKit2/Shared/gtk/UpdateChunk.cpp:112
&gt; +    return cairo_image_surface_create_for_data(reinterpret_cast&lt;unsigned char*&gt;(m_sharedMemory-&gt;data()),

This should just be a static cast, I think.

&gt; Source/WebKit2/UIProcess/ChunkedUpdateDrawingAreaProxy.h:106
&gt; +    // BackingStore

Please remove this comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349142</commentid>
    <comment_count>6</comment_count>
    <who name="Amruth Raj">amruthraj</who>
    <bug_when>2011-02-10 09:49:04 -0800</bug_when>
    <thetext>The patch looks good to me except for the following usage:
View in context: https://bugs.webkit.org/attachment.cgi?id=81959&amp;action=review

&gt; Source/WebKit2/UIProcess/gtk/ChunkedUpdateDrawingAreaProxyGtk.cpp:80
&gt; +    RefPtr&lt;cairo_surface_t&gt; pixmap(updateChunk-&gt;createImage());

I am not sure if this is supported. cairo_destroy_surface has to be explicitly called, I think.

&gt; Source/WebKit2/WebProcess/WebPage/gtk/ChunkedUpdateDrawingAreaGtk.cpp:46
&gt; +    RefPtr&lt;cairo_surface_t&gt; image = updateChunk-&gt;createImage();

Same here.

&gt; Source/WebKit2/WebProcess/WebPage/gtk/ChunkedUpdateDrawingAreaGtk.cpp:47
&gt; +    RefPtr&lt;cairo_t&gt; cr = cairo_create(image.get());

And here. cairo_destroy has to be called.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349144</commentid>
    <comment_count>7</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-02-10 09:51:22 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; The patch looks good to me except for the following usage:
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81959&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/gtk/ChunkedUpdateDrawingAreaProxyGtk.cpp:80
&gt; &gt; +    RefPtr&lt;cairo_surface_t&gt; pixmap(updateChunk-&gt;createImage());
&gt; 
&gt; I am not sure if this is supported. cairo_destroy_surface has to be explicitly called, I think.
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/gtk/ChunkedUpdateDrawingAreaGtk.cpp:46
&gt; &gt; +    RefPtr&lt;cairo_surface_t&gt; image = updateChunk-&gt;createImage();
&gt; 
&gt; Same here.
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/gtk/ChunkedUpdateDrawingAreaGtk.cpp:47
&gt; &gt; +    RefPtr&lt;cairo_t&gt; cr = cairo_create(image.get());
&gt; 
&gt; And here. cairo_destroy has to be called.

RefPtrCairo defines some specializations for Cairo + RefPtrs, unless I&apos;m missing something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349148</commentid>
    <comment_count>8</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-10 09:58:51 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; The patch looks good to me except for the following usage:
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81959&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/gtk/ChunkedUpdateDrawingAreaProxyGtk.cpp:80
&gt; &gt; +    RefPtr&lt;cairo_surface_t&gt; pixmap(updateChunk-&gt;createImage());
&gt; 
&gt; I am not sure if this is supported. cairo_destroy_surface has to be explicitly called, I think.
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/gtk/ChunkedUpdateDrawingAreaGtk.cpp:46
&gt; &gt; +    RefPtr&lt;cairo_surface_t&gt; image = updateChunk-&gt;createImage();
&gt; 
&gt; Same here.
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/gtk/ChunkedUpdateDrawingAreaGtk.cpp:47
&gt; &gt; +    RefPtr&lt;cairo_t&gt; cr = cairo_create(image.get());
&gt; 
&gt; And here. cairo_destroy has to be called.

The destroy cairo functions are called, there is an specialization for those types. Check the RefPtrCairo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349151</commentid>
    <comment_count>9</comment_count>
    <who name="Amruth Raj">amruthraj</who>
    <bug_when>2011-02-10 10:02:17 -0800</bug_when>
    <thetext>Sorry, i haven&apos;t observed the specialization earlier. The patch looks good and thanks for correcting me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349864</commentid>
    <comment_count>10</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-11 11:21:51 -0800</bug_when>
    <thetext>Landed http://trac.webkit.org/changeset/78350</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81796</attachid>
            <date>2011-02-09 06:24:04 -0800</date>
            <delta_ts>2011-02-10 05:44:19 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>updatechunk.patch</filename>
            <type>text/plain</type>
            <size>20298</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">Y29tbWl0IDJlNWJjZDIyNTRhMmU1ZDA3ODJhYjZmMDA2OGY2ZmMwMjViYjYzNTYKQXV0aG9yOiBB
bGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CkRhdGU6ICAgRnJpIEphbiAyMSAx
MTo1NjozNSAyMDExICswMTAwCgogICAgMjAxMS0wMi0wNyAgQWxlamFuZHJvIEcuIENhc3RybyAg
PGFsZXhAaWdhbGlhLmNvbT4KICAgIAogICAgICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KICAgIAogICAgICAgICAgICBCYXNlZCBvbiBhIHBhdGNoIGJ5IENoYW5kcmEgVmFsbGFs
YS4KICAgIAogICAgICAgICAgICBbR1RLXSBJbXBsZW1lbnQgVXBkYXRlQ2h1bmssIENodW5rZWRV
cGRhdGVEcmF3aW5nQXJlYS9Qcm94eQogICAgICAgICAgICBjbGFzc2VzIGZvciBXZWJLaXQyCiAg
ICAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDA4MAog
ICAgCiAgICAgICAgICAgICogR05VbWFrZWZpbGUuYW06CiAgICAgICAgICAgICogU2hhcmVkL2d0
ay9VcGRhdGVDaHVuay5jcHA6IEFkZGVkLgogICAgICAgICAgICAoV2ViS2l0OjpVcGRhdGVDaHVu
azo6VXBkYXRlQ2h1bmspOgogICAgICAgICAgICAoV2ViS2l0OjpVcGRhdGVDaHVuazo6flVwZGF0
ZUNodW5rKToKICAgICAgICAgICAgKFdlYktpdDo6VXBkYXRlQ2h1bms6OmVuY29kZSk6CiAgICAg
ICAgICAgIChXZWJLaXQ6OlVwZGF0ZUNodW5rOjpkZWNvZGUpOgogICAgICAgICAgICAoV2ViS2l0
OjpVcGRhdGVDaHVuazo6Y3JlYXRlSW1hZ2UpOgogICAgICAgICAgICAqIFNoYXJlZC9ndGsvVXBk
YXRlQ2h1bmsuaDogQWRkZWQuCiAgICAgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUNodW5rOjpyZWN0
KToKICAgICAgICAgICAgKFdlYktpdDo6VXBkYXRlQ2h1bms6OmlzRW1wdHkpOgogICAgICAgICAg
ICAoV2ViS2l0OjpVcGRhdGVDaHVuazo6c2l6ZSk6CiAgICAgICAgICAgICogVUlQcm9jZXNzL0No
dW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5LmNwcDoKICAgICAgICAgICAgKFdlYktpdDo6Q2h1
bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHk6OkNodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5
KToKICAgICAgICAgICAgSW5pdGlhbGl6ZSB0aGUgc3VyZmFjZS4KICAgICAgICAgICAgKiBVSVBy
b2Nlc3MvQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHkuaDoKICAgICAgICAgICAgKiBVSVBy
b2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oOiBBZGRlZCBjYWlybyB2YXJpYWJsZXMuCiAgICAgICAg
ICAgICogVUlQcm9jZXNzL2d0ay9DaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eUd0ay5jcHA6
IEFkZGVkLgogICAgICAgICAgICAoV2ViS2l0OjpDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94
eTo6cGFnZSk6CiAgICAgICAgICAgIChXZWJLaXQ6OkNodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVBy
b3h5OjplbnN1cmVCYWNraW5nU3RvcmUpOgogICAgICAgICAgICAoV2ViS2l0OjpDaHVua2VkVXBk
YXRlRHJhd2luZ0FyZWFQcm94eTo6aW52YWxpZGF0ZUJhY2tpbmdTdG9yZSk6CiAgICAgICAgICAg
IChXZWJLaXQ6OkNodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5OjpwbGF0Zm9ybVBhaW50KToK
ICAgICAgICAgICAgKFdlYktpdDo6Q2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHk6OmRyYXdV
cGRhdGVDaHVua0ludG9CYWNraW5nU3RvcmUpOgogICAgICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9ndGsvQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhR3RrLmNwcDogQWRkZWQuCiAgICAgICAg
ICAgIChXZWJLaXQ6OkNodW5rZWRVcGRhdGVEcmF3aW5nQXJlYTo6cGFpbnRJbnRvVXBkYXRlQ2h1
bmspOgoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwppbmRleCA2Yjk2MGUzLi5mZjY2NDY3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMzggQEAKKzIwMTEtMDItMDcgIEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQmFz
ZWQgb24gYSBwYXRjaCBieSBDaGFuZHJhIFZhbGxhbGEuCisKKyAgICAgICAgW0dUS10gSW1wbGVt
ZW50IFVwZGF0ZUNodW5rLCBDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWEvUHJveHkKKyAgICAgICAg
Y2xhc3NlcyBmb3IgV2ViS2l0MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTQwODAKKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAq
IFNoYXJlZC9ndGsvVXBkYXRlQ2h1bmsuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6VXBk
YXRlQ2h1bms6OlVwZGF0ZUNodW5rKToKKyAgICAgICAgKFdlYktpdDo6VXBkYXRlQ2h1bms6On5V
cGRhdGVDaHVuayk6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUNodW5rOjplbmNvZGUpOgorICAg
ICAgICAoV2ViS2l0OjpVcGRhdGVDaHVuazo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6VXBk
YXRlQ2h1bms6OmNyZWF0ZUltYWdlKToKKyAgICAgICAgKiBTaGFyZWQvZ3RrL1VwZGF0ZUNodW5r
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpVcGRhdGVDaHVuazo6cmVjdCk6CisgICAgICAg
IChXZWJLaXQ6OlVwZGF0ZUNodW5rOjppc0VtcHR5KToKKyAgICAgICAgKFdlYktpdDo6VXBkYXRl
Q2h1bms6OnNpemUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9DaHVua2VkVXBkYXRlRHJhd2luZ0Fy
ZWFQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVBy
b3h5OjpDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eSk6CisgICAgICAgIEluaXRpYWxpemUg
dGhlIHN1cmZhY2UuCisgICAgICAgICogVUlQcm9jZXNzL0NodW5rZWRVcGRhdGVEcmF3aW5nQXJl
YVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaDogQWRkZWQg
Y2Fpcm8gdmFyaWFibGVzLgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvQ2h1bmtlZFVwZGF0ZURy
YXdpbmdBcmVhUHJveHlHdGsuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6Q2h1bmtlZFVw
ZGF0ZURyYXdpbmdBcmVhUHJveHk6OnBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpDaHVua2VkVXBk
YXRlRHJhd2luZ0FyZWFQcm94eTo6ZW5zdXJlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYktp
dDo6Q2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHk6OmludmFsaWRhdGVCYWNraW5nU3RvcmUp
OgorICAgICAgICAoV2ViS2l0OjpDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eTo6cGxhdGZv
cm1QYWludCk6CisgICAgICAgIChXZWJLaXQ6OkNodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5
OjpkcmF3VXBkYXRlQ2h1bmtJbnRvQmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvZ3RrL0NodW5rZWRVcGRhdGVEcmF3aW5nQXJlYUd0ay5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0OjpDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWE6OnBhaW50SW50b1VwZGF0ZUNo
dW5rKToKKwogMjAxMS0wMi0wOSAgQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxl
LmFtCmluZGV4IGQ1OGY2YmQuLjRhZWQ5ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dO
VW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCkBAIC0xNjgs
NiArMTY4LDggQEAgbGliV2ViS2l0Ml9sYV9TT1VSQ0VTID0gXAogCVNvdXJjZS9XZWJLaXQyL1No
YXJlZC9Gb250U21vb3RoaW5nTGV2ZWwuaCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9T
aGFyZWFibGVCaXRtYXBHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1BsYXRm
b3JtQ2VydGlmaWNhdGVJbmZvLmggXAorCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvVXBkYXRl
Q2h1bmsuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1VwZGF0ZUNodW5rLmggXAog
CVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViQ29yZUFyZ3VtZW50Q29kZXJzR3RrLmNwcCBc
CiAJU291cmNlL1dlYktpdDIvU2hhcmVkL0ltYWdlT3B0aW9ucy5oIFwKIAlTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvSW1tdXRhYmxlQXJyYXkuY3BwIFwKQEAgLTU0Myw2ICs1NDUsNyBAQCBsaWJXZWJL
aXQyX2xhX1NPVVJDRVMgPSBcCiAJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Vu
Y29kZXJBZGFwdGVyLmggXAogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5k
Q29udHJvbGxlci5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5k
Q29udHJvbGxlci5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0No
dW5rZWRVcGRhdGVEcmF3aW5nQXJlYUd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9ndGsvV2ViSW5zcGVjdG9yR3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0xheWVyQmFja2VkRHJhd2luZ0FyZWEuY3BwIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJCYWNrZWREcmF3aW5nQXJlYS5oIFwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvVXBkYXRlQ2h1bmsuY3BwIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL2d0ay9VcGRhdGVDaHVuay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNjQ0NzFiMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9ndGsvVXBkYXRlQ2h1bmsuY3BwCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRp
b25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJVcGRhdGVDaHVuay5oIgorCisjaW5jbHVk
ZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSA8Z2RrL2dka3guaD4KKwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitVcGRhdGVDaHVu
azo6VXBkYXRlQ2h1bmsoKQorICAgIDogbV9zaGFyZWRNZW1vcnkoMCkKK3sKK30KKworVXBkYXRl
Q2h1bms6OlVwZGF0ZUNodW5rKGNvbnN0IEludFJlY3QmIHJlY3QpCisgICAgOiBtX3JlY3QocmVj
dCkKKyAgICAsIG1fc2hhcmVkTWVtb3J5KFNoYXJlZE1lbW9yeTo6Y3JlYXRlKHNpemUoKSkpCit7
Cit9CisKK1VwZGF0ZUNodW5rOjp+VXBkYXRlQ2h1bmsoKQoreworfQorCit2b2lkIFVwZGF0ZUNo
dW5rOjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyKSBjb25zdAorewor
ICAgIGVuY29kZXItPmVuY29kZShtX3JlY3QpOworICAgIGlmICghbV9zaGFyZWRNZW1vcnkpIHsK
KyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsKKyAgICBpZiAobV9zaGFyZWRNZW1v
cnktPmNyZWF0ZUhhbmRsZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHkpKSB7CisgICAg
ICAgIGVuY29kZXItPmVuY29kZSh0cnVlKTsKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKGhhbmRs
ZSk7CisgICAgfSBlbHNlCisgICAgICAgIGVuY29kZXItPmVuY29kZShmYWxzZSk7CisKKyAgICBt
X3NoYXJlZE1lbW9yeSA9IDA7Cit9CisKK2Jvb2wgVXBkYXRlQ2h1bms6OmRlY29kZShDb3JlSVBD
OjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFVwZGF0ZUNodW5rJiBjaHVuaykKK3sKKyAgICBB
U1NFUlRfQVJHKGNodW5rLCBjaHVuay5pc0VtcHR5KCkpOworCisgICAgSW50UmVjdCByZWN0Owor
ICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHJlY3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBjaHVuay5tX3JlY3QgPSByZWN0OworCisgICAgYm9vbCBoYXNTaGFyZWRNZW1vcnk7Cisg
ICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaGFzU2hhcmVkTWVtb3J5KSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKCFoYXNTaGFyZWRNZW1vcnkpIHsKKyAgICAgICAgY2h1bmsubV9z
aGFyZWRNZW1vcnkgPSAwOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBTaGFy
ZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaGFuZGxl
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY2h1bmsubV9zaGFyZWRNZW1vcnkgPSBT
aGFyZWRNZW1vcnk6OmNyZWF0ZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHkpOworICAg
IHJldHVybiB0cnVlOworfQorCitjYWlyb19zdXJmYWNlX3QqIFVwZGF0ZUNodW5rOjpjcmVhdGVJ
bWFnZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fc2hhcmVkTWVtb3J5KTsKKyAgICBpZiAoIW1f
c2hhcmVkTWVtb3J5KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGludCBzdHJpZGUgPSBjYWly
b19mb3JtYXRfc3RyaWRlX2Zvcl93aWR0aChDQUlST19GT1JNQVRfQVJHQjMyLCBtX3JlY3Qud2lk
dGgoKSk7CisgICAgcmV0dXJuIGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKHJl
aW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KG1fc2hhcmVkTWVtb3J5LT5kYXRhKCkpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQUlST19GT1JN
QVRfQVJHQjMyLCBtX3JlY3Qud2lkdGgoKSwgbV9yZWN0LmhlaWdodCgpLCBzdHJpZGUpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9ndGsvVXBkYXRlQ2h1bmsuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvVXBkYXRlQ2h1
bmsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWIyNzlkCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9VcGRhdGVDaHVuay5oCkBAIC0w
LDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1v
YmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEx
IElnYWxpYSBTLkwKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBVcGRhdGVDaHVua19oCisjZGVmaW5lIFVw
ZGF0ZUNodW5rX2gKKworI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJTaGFyZWRNZW1v
cnkuaCIKKworI2luY2x1ZGUgPGNhaXJvLmg+CisKK25hbWVzcGFjZSBDb3JlSVBDIHsKK2NsYXNz
IEFyZ3VtZW50RW5jb2RlcjsKK2NsYXNzIEFyZ3VtZW50RGVjb2RlcjsKK30KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2NsYXNzIFVwZGF0ZUNodW5rIHsKK3B1YmxpYzoKKyAgICBVcGRhdGVDaHVu
aygpOworICAgIFVwZGF0ZUNodW5rKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB+VXBk
YXRlQ2h1bmsoKTsKKworICAgIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QoKSBjb25zdCB7
IHJldHVybiBtX3JlY3Q7IH0KKyAgICBib29sIGlzRW1wdHkoKSB7IHJldHVybiBtX3JlY3QuaXNF
bXB0eSgpOyB9CisKKyAgICB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqKSBj
b25zdDsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiwg
VXBkYXRlQ2h1bmsmKTsKKworICAgIGNhaXJvX3N1cmZhY2VfdCogY3JlYXRlSW1hZ2UoKSBjb25z
dDsKKworcHJpdmF0ZToKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGNhaXJvX2Zv
cm1hdF9zdHJpZGVfZm9yX3dpZHRoKENBSVJPX0ZPUk1BVF9BUkdCMzIsIG1fcmVjdC53aWR0aCgp
KSAqIG1fcmVjdC5oZWlnaHQoKTsgfQorICAgIGludCBtX3N0cmlkZTsKKyAgICBXZWJDb3JlOjpJ
bnRSZWN0IG1fcmVjdDsKKyAgICBtdXRhYmxlIFJlZlB0cjxTaGFyZWRNZW1vcnk+IG1fc2hhcmVk
TWVtb3J5OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKworI2VuZGlmIC8vIFVwZGF0
ZUNodW5rX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9DaHVua2VkVXBk
YXRlRHJhd2luZ0FyZWFQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ2h1bmtl
ZFVwZGF0ZURyYXdpbmdBcmVhUHJveHkuY3BwCmluZGV4IDNiZjMyZjIuLjkxZjIxZmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9DaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQ
cm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NodW5rZWRVcGRhdGVEcmF3
aW5nQXJlYVByb3h5LmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0
IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OCw2ICs0OSw5IEBAIENodW5rZWRV
cGRhdGVEcmF3aW5nQXJlYVByb3h5OjpDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eShQbGF0
Zm9ybVdlYlZpZXcqIHdlCiAgICAgLCBtX2lzV2FpdGluZ0ZvckRpZFNldEZyYW1lTm90aWZpY2F0
aW9uKGZhbHNlKQogICAgICwgbV9pc1Zpc2libGUodHJ1ZSkKICAgICAsIG1fZm9yY2VSZXBhaW50
V2hlblJlc3VtaW5nUGFpbnRpbmcoZmFsc2UpCisjaWYgUExBVEZPUk0oR1RLKQorICAgICwgbV9i
YWNraW5nU3RvcmVJbWFnZSgwKQorI2VuZGlmCiAgICAgLCBtX3dlYlZpZXcod2ViVmlldykKIHsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9DaHVua2VkVXBkYXRlRHJh
d2luZ0FyZWFQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NodW5rZWRVcGRhdGVE
cmF3aW5nQXJlYVByb3h5LmgKaW5kZXggYzUzNDI4NC4uNjljYzNmZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5LmgKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5
LmgKQEAgLTEsNSArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rv
cm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMSBJZ2FsaWEgUy5MCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1
LDYgKzM3LDggQEAgT0JKQ19DTEFTUyBXS1ZpZXc7CiAjZWxpZiBQTEFURk9STShRVCkKICNpbmNs
dWRlIDxRSW1hZ2U+CiBjbGFzcyBRR3JhcGhpY3NXS1ZpZXc7CisjZWxpZiBQTEFURk9STShHVEsp
Cit0eXBlZGVmIHN0cnVjdCBfY2Fpcm9fc3VyZmFjZSBjYWlyb19zdXJmYWNlX3Q7CiAjZW5kaWYK
IAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC00OSw2ICs1Myw5IEBAIGNsYXNzIFdlYlZpZXc7CiB0
eXBlZGVmIFdlYlZpZXcgUGxhdGZvcm1XZWJWaWV3OwogI2VsaWYgUExBVEZPUk0oUVQpCiB0eXBl
ZGVmIFFHcmFwaGljc1dLVmlldyBQbGF0Zm9ybVdlYlZpZXc7CisjZWxpZiBQTEFURk9STShHVEsp
CitjbGFzcyBXZWJWaWV3OwordHlwZWRlZiBXZWJWaWV3IFBsYXRmb3JtV2ViVmlldzsKICNlbmRp
ZgogCiBjbGFzcyBDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eSA6IHB1YmxpYyBEcmF3aW5n
QXJlYVByb3h5IHsKQEAgLTk1LDYgKzEwMiw5IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPEhCSVRN
QVA+IG1fYmFja2luZ1N0b3JlQml0bWFwOwogI2VsaWYgUExBVEZPUk0oUVQpCiAgICAgUUltYWdl
IG1fYmFja2luZ1N0b3JlSW1hZ2U7CisjZWxpZiBQTEFURk9STShHVEspCisgICAgLy8gQmFja2lu
Z1N0b3JlCisgICAgY2Fpcm9fc3VyZmFjZV90KiBtX2JhY2tpbmdTdG9yZUltYWdlOwogI2VuZGlm
CiAKICAgICBQbGF0Zm9ybVdlYlZpZXcqIG1fd2ViVmlldzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCmluZGV4IDA0MmViZDQuLmY4MDIyNDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaApAQCAtMSw1ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMSw2ICszMiw4IEBACiAKICNpZiBQTEFURk9STShRVCkKIGNsYXNzIFFQYWludGVyOworI2Vs
aWYgUExBVEZPUk0oR1RLKQordHlwZWRlZiBzdHJ1Y3QgX2NhaXJvIGNhaXJvX3Q7CiAjZW5kaWYK
IAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC00NSw2ICs0OCw4IEBAIHR5cGVkZWYgQ0dDb250ZXh0
UmVmIFBsYXRmb3JtRHJhd2luZ0NvbnRleHQ7CiB0eXBlZGVmIEhEQyBQbGF0Zm9ybURyYXdpbmdD
b250ZXh0OwogI2VsaWYgUExBVEZPUk0oUVQpCiB0eXBlZGVmIFFQYWludGVyKiBQbGF0Zm9ybURy
YXdpbmdDb250ZXh0OworI2VsaWYgUExBVEZPUk0oR1RLKQordHlwZWRlZiBjYWlyb190KiBQbGF0
Zm9ybURyYXdpbmdDb250ZXh0OwogI2VuZGlmCiAKIGNsYXNzIERyYXdpbmdBcmVhUHJveHkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9DaHVua2VkVXBkYXRlRHJh
d2luZ0FyZWFQcm94eUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0NodW5r
ZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5R3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5lMjM4MjVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2d0ay9DaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eUd0ay5jcHAKQEAgLTAsMCAr
MSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxp
dHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdh
bGlhIFMuTAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2h1bmtl
ZFVwZGF0ZURyYXdpbmdBcmVhUHJveHkuaCIKKworI2luY2x1ZGUgIlVwZGF0ZUNodW5rLmgiCisj
aW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAiV2ViVmlldy5oIgorCisjaW5j
bHVkZSA8Z2RrL2dkay5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK1dlYlBhZ2VQcm94eSogQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHk6
OnBhZ2UoKQoreworICAgIHJldHVybiBtX3dlYlZpZXctPnBhZ2UoKTsKK30KKwordm9pZCBDaHVu
a2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eTo6ZW5zdXJlQmFja2luZ1N0b3JlKCkKK3sKKyAgICBp
ZiAobV9iYWNraW5nU3RvcmVJbWFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9iYWNraW5n
U3RvcmVJbWFnZSA9IGdka193aW5kb3dfY3JlYXRlX3NpbWlsYXJfc3VyZmFjZShndGtfd2lkZ2V0
X2dldF93aW5kb3cobV93ZWJWaWV3LT53aW5kb3coKSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQUlST19DT05URU5UX0NPTE9S
X0FMUEhBLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKTsKK30KKwordm9pZCBDaHVu
a2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eTo6aW52YWxpZGF0ZUJhY2tpbmdTdG9yZSgpCit7Cisg
ICAgaWYgKG1fYmFja2luZ1N0b3JlSW1hZ2UpIHsKKyAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0
cm95KG1fYmFja2luZ1N0b3JlSW1hZ2UpOworICAgICAgICBtX2JhY2tpbmdTdG9yZUltYWdlID0g
MDsKKyAgICB9Cit9CisKK2Jvb2wgQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHk6OnBsYXRm
b3JtUGFpbnQoY29uc3QgSW50UmVjdCYgcmVjdCwgY2Fpcm9fdCogY3IpCit7CisgICAgaWYgKCFt
X2JhY2tpbmdTdG9yZUltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjYWlyb19y
ZWN0YW5nbGUoY3IsIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdo
dCgpKTsKKyAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IsIG1fYmFja2luZ1N0b3JlSW1h
Z2UsIDAsIDApOworICAgIGNhaXJvX2ZpbGwoY3IpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHk6OmRyYXdVcGRhdGVDaHVua0ludG9C
YWNraW5nU3RvcmUoVXBkYXRlQ2h1bmsqIHVwZGF0ZUNodW5rKQoreworICAgIGVuc3VyZUJhY2tp
bmdTdG9yZSgpOworCisgICAgY2Fpcm9fc3VyZmFjZV90KiBwaXhtYXAodXBkYXRlQ2h1bmstPmNy
ZWF0ZUltYWdlKCkpOworICAgIGNvbnN0IEludFJlY3QmIHVwZGF0ZUNodW5rUmVjdCA9IHVwZGF0
ZUNodW5rLT5yZWN0KCk7CisKKyAgICBjYWlyb190KiBjciA9IGNhaXJvX2NyZWF0ZShtX2JhY2tp
bmdTdG9yZUltYWdlKTsKKyAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IsIHBpeG1hcCwg
dXBkYXRlQ2h1bmtSZWN0LngoKSwgdXBkYXRlQ2h1bmtSZWN0LnkoKSk7CisgICAgY2Fpcm9fcGFp
bnQoY3IpOworICAgIGNhaXJvX2Rlc3Ryb3koY3IpOworCisgICAgZ3RrX3dpZGdldF9xdWV1ZV9k
cmF3X2FyZWEobV93ZWJWaWV3LT53aW5kb3coKSwgdXBkYXRlQ2h1bmtSZWN0LngoKSwgdXBkYXRl
Q2h1bmtSZWN0LnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVDaHVu
a1JlY3Qud2lkdGgoKSwgdXBkYXRlQ2h1bmtSZWN0LmhlaWdodCgpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvZ3RrL0NodW5rZWRVcGRhdGVEcmF3aW5nQXJlYUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0NodW5rZWRVcGRhdGVEcmF3aW5nQXJlYUd0ay5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU2NDliNgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvQ2h1bmtlZFVwZGF0ZURy
YXdpbmdBcmVhR3RrLmNwcApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdo
dCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhLmgiCisKKyNpbmNs
dWRlICJVcGRhdGVDaHVuay5oIgorI2luY2x1ZGUgIldlYlBhZ2UuaCIKKworI2luY2x1ZGUgPFdl
YkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBD
aHVua2VkVXBkYXRlRHJhd2luZ0FyZWE6OnBhaW50SW50b1VwZGF0ZUNodW5rKFVwZGF0ZUNodW5r
KiB1cGRhdGVDaHVuaykKK3sKKyAgICBBU1NFUlQoIXVwZGF0ZUNodW5rLT5pc0VtcHR5KCkpOwor
CisgICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IHVwZGF0ZUNodW5rLT5jcmVhdGVJbWFnZSgp
OworICAgIGNhaXJvX3QqIGNyID0gY2Fpcm9fY3JlYXRlKGltYWdlKTsKKyAgICBHcmFwaGljc0Nv
bnRleHQgZ2MoY3IpOworICAgIGdjLnNhdmUoKTsKKyAgICBJbnRSZWN0IHJlY3QgPSB1cGRhdGVD
aHVuay0+cmVjdCgpOworICAgIGdjLnRyYW5zbGF0ZSgtcmVjdC54KCksIC1yZWN0LnkoKSk7Cisg
ICAgbV93ZWJQYWdlLT5kcmF3UmVjdChnYywgdXBkYXRlQ2h1bmstPnJlY3QoKSk7CisgICAgZ2Mu
cmVzdG9yZSgpOworICAgIGNhaXJvX2Rlc3Ryb3koY3IpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81959</attachid>
            <date>2011-02-10 05:44:19 -0800</date>
            <delta_ts>2011-02-10 09:23:32 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>chunked.patch</filename>
            <type>text/plain</type>
            <size>20527</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">Y29tbWl0IDNlNWVhYzc0ZDhlYzdmNWM5ZDkzNWI1YWQzMjk0OTIyZTYwZTMwM2EKQXV0aG9yOiBB
bGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CkRhdGU6ICAgRnJpIEphbiAyMSAx
MTo1NjozNSAyMDExICswMTAwCgogICAgMjAxMS0wMi0xMCAgQ2hhbmRyYSBWYWxsYWxhICA8Y2hh
bmRyYS52YWxsYWxhQG1vdG9yb2xhLmNvbT4gYW5kIEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4
QGlnYWxpYS5jb20+CiAgICAKICAgICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CiAgICAKICAgICAgICAgICAgW0dUS10gSW1wbGVtZW50IFVwZGF0ZUNodW5rLCBDaHVua2VkVXBk
YXRlRHJhd2luZ0FyZWEvUHJveHkKICAgICAgICAgICAgY2xhc3NlcyBmb3IgV2ViS2l0MgogICAg
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQwODAKICAg
IAogICAgICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgogICAgICAgICAgICAqIFNoYXJlZC9ndGsv
VXBkYXRlQ2h1bmsuY3BwOiBBZGRlZC4KICAgICAgICAgICAgKFdlYktpdDo6VXBkYXRlQ2h1bms6
OlVwZGF0ZUNodW5rKToKICAgICAgICAgICAgKFdlYktpdDo6VXBkYXRlQ2h1bms6On5VcGRhdGVD
aHVuayk6CiAgICAgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUNodW5rOjplbmNvZGUpOgogICAgICAg
ICAgICAoV2ViS2l0OjpVcGRhdGVDaHVuazo6ZGVjb2RlKToKICAgICAgICAgICAgKFdlYktpdDo6
VXBkYXRlQ2h1bms6OmNyZWF0ZUltYWdlKToKICAgICAgICAgICAgKiBTaGFyZWQvZ3RrL1VwZGF0
ZUNodW5rLmg6IEFkZGVkLgogICAgICAgICAgICAoV2ViS2l0OjpVcGRhdGVDaHVuazo6cmVjdCk6
CiAgICAgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUNodW5rOjppc0VtcHR5KToKICAgICAgICAgICAg
KFdlYktpdDo6VXBkYXRlQ2h1bms6OnNpemUpOgogICAgICAgICAgICAqIFVJUHJvY2Vzcy9DaHVu
a2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eS5jcHA6CiAgICAgICAgICAgIChXZWJLaXQ6OkNodW5r
ZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5OjpDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eSk6
CiAgICAgICAgICAgIEluaXRpYWxpemUgdGhlIHN1cmZhY2UuCiAgICAgICAgICAgICogVUlQcm9j
ZXNzL0NodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5Lmg6CiAgICAgICAgICAgICogVUlQcm9j
ZXNzL0RyYXdpbmdBcmVhUHJveHkuaDogQWRkZWQgY2Fpcm8gdmFyaWFibGVzLgogICAgICAgICAg
ICAqIFVJUHJvY2Vzcy9ndGsvQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHlHdGsuY3BwOiBB
ZGRlZC4KICAgICAgICAgICAgKFdlYktpdDo6Q2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHk6
OnBhZ2UpOgogICAgICAgICAgICAoV2ViS2l0OjpDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94
eTo6ZW5zdXJlQmFja2luZ1N0b3JlKToKICAgICAgICAgICAgKFdlYktpdDo6Q2h1bmtlZFVwZGF0
ZURyYXdpbmdBcmVhUHJveHk6OmludmFsaWRhdGVCYWNraW5nU3RvcmUpOgogICAgICAgICAgICAo
V2ViS2l0OjpDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eTo6cGxhdGZvcm1QYWludCk6CiAg
ICAgICAgICAgIChXZWJLaXQ6OkNodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5OjpkcmF3VXBk
YXRlQ2h1bmtJbnRvQmFja2luZ1N0b3JlKToKICAgICAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvZ3RrL0NodW5rZWRVcGRhdGVEcmF3aW5nQXJlYUd0ay5jcHA6IEFkZGVkLgogICAgICAgICAg
ICAoV2ViS2l0OjpDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWE6OnBhaW50SW50b1VwZGF0ZUNodW5r
KToKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKaW5kZXggNjczMjY2Yi4uZWIwOTY2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDM2IEBACisyMDExLTAyLTEwICBDaGFuZHJhIFZhbGxhbGEgIDxjaGFuZHJhLnZhbGxhbGFAbW90
b3JvbGEuY29tPiBhbmQgQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBJbXBs
ZW1lbnQgVXBkYXRlQ2h1bmssIENodW5rZWRVcGRhdGVEcmF3aW5nQXJlYS9Qcm94eQorICAgICAg
ICBjbGFzc2VzIGZvciBXZWJLaXQyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01NDA4MAorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAg
ICogU2hhcmVkL2d0ay9VcGRhdGVDaHVuay5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpV
cGRhdGVDaHVuazo6VXBkYXRlQ2h1bmspOgorICAgICAgICAoV2ViS2l0OjpVcGRhdGVDaHVuazo6
flVwZGF0ZUNodW5rKToKKyAgICAgICAgKFdlYktpdDo6VXBkYXRlQ2h1bms6OmVuY29kZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlVwZGF0ZUNodW5rOjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpV
cGRhdGVDaHVuazo6Y3JlYXRlSW1hZ2UpOgorICAgICAgICAqIFNoYXJlZC9ndGsvVXBkYXRlQ2h1
bmsuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUNodW5rOjpyZWN0KToKKyAgICAg
ICAgKFdlYktpdDo6VXBkYXRlQ2h1bms6OmlzRW1wdHkpOgorICAgICAgICAoV2ViS2l0OjpVcGRh
dGVDaHVuazo6c2l6ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0NodW5rZWRVcGRhdGVEcmF3aW5n
QXJlYVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVh
UHJveHk6OkNodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5KToKKyAgICAgICAgSW5pdGlhbGl6
ZSB0aGUgc3VyZmFjZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQ2h1bmtlZFVwZGF0ZURyYXdpbmdB
cmVhUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oOiBBZGRl
ZCBjYWlybyB2YXJpYWJsZXMuCisgICAgICAgICogVUlQcm9jZXNzL2d0ay9DaHVua2VkVXBkYXRl
RHJhd2luZ0FyZWFQcm94eUd0ay5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpDaHVua2Vk
VXBkYXRlRHJhd2luZ0FyZWFQcm94eTo6cGFnZSk6CisgICAgICAgIChXZWJLaXQ6OkNodW5rZWRV
cGRhdGVEcmF3aW5nQXJlYVByb3h5OjplbnN1cmVCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2Vi
S2l0OjpDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eTo6aW52YWxpZGF0ZUJhY2tpbmdTdG9y
ZSk6CisgICAgICAgIChXZWJLaXQ6OkNodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5OjpwbGF0
Zm9ybVBhaW50KToKKyAgICAgICAgKFdlYktpdDo6Q2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJv
eHk6OmRyYXdVcGRhdGVDaHVua0ludG9CYWNraW5nU3RvcmUpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9ndGsvQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhR3RrLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OkNodW5rZWRVcGRhdGVEcmF3aW5nQXJlYTo6cGFpbnRJbnRvVXBkYXRl
Q2h1bmspOgorCiAyMDExLTAyLTEwICBQZXRlciBWYXJnYSAgPHB2YXJnYUB3ZWJraXQub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IENzYWJhIE9zenRyb2dvbsOhYy4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUu
YW0KaW5kZXggNThhMzg3Ni4uNzg3NGM2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05V
bWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KQEAgLTE3OSw2
ICsxNzksOCBAQCBsaWJXZWJLaXQyX2xhX1NPVVJDRVMgPSBcCiAJU291cmNlL1dlYktpdDIvU2hh
cmVkL0ZvbnRTbW9vdGhpbmdMZXZlbC5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1No
YXJlYWJsZUJpdG1hcEd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvUGxhdGZv
cm1DZXJ0aWZpY2F0ZUluZm8uaCBcCisJU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9VcGRhdGVD
aHVuay5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvVXBkYXRlQ2h1bmsuaCBcCiAJ
U291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJDb3JlQXJndW1lbnRDb2RlcnNHdGsuY3BwIFwK
IAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvSW1hZ2VPcHRpb25zLmggXAogCVNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9JbW11dGFibGVBcnJheS5jcHAgXApAQCAtNTc2LDYgKzU3OCw3IEBAIGxpYldlYktp
dDJfbGFfU09VUkNFUyA9IFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRW5j
b2RlckFkYXB0ZXIuaCBcCiAJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRD
b250cm9sbGVyLmNwcCBcCiAJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRD
b250cm9sbGVyLmggXAorCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvQ2h1
bmtlZFVwZGF0ZURyYXdpbmdBcmVhR3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL2d0ay9XZWJJbnNwZWN0b3JHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvTGF5ZXJCYWNrZWREcmF3aW5nQXJlYS5jcHAgXAogCVNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllckJhY2tlZERyYXdpbmdBcmVhLmggXApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9VcGRhdGVDaHVuay5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvZ3RrL1VwZGF0ZUNodW5rLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi44MjViOGY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL2d0ay9VcGRhdGVDaHVuay5jcHAKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlv
bnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwKKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlVwZGF0ZUNodW5rLmgiCisKKyNpbmNsdWRl
ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlIDxnZGsvZ2RreC5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworc3RhdGljIGNhaXJvX2Zvcm1hdF90IGltYWdlRm9ybWF0
ID0gQ0FJUk9fRk9STUFUX0FSR0IzMjsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1VwZGF0ZUNo
dW5rOjpVcGRhdGVDaHVuaygpCisgICAgOiBtX3NoYXJlZE1lbW9yeSgwKQoreworfQorCitVcGRh
dGVDaHVuazo6VXBkYXRlQ2h1bmsoY29uc3QgSW50UmVjdCYgcmVjdCkKKyAgICA6IG1fcmVjdChy
ZWN0KQorICAgICwgbV9zaGFyZWRNZW1vcnkoU2hhcmVkTWVtb3J5OjpjcmVhdGUoc2l6ZSgpKSkK
K3sKK30KKworVXBkYXRlQ2h1bms6On5VcGRhdGVDaHVuaygpCit7Cit9CisKK3NpemVfdCBVcGRh
dGVDaHVuazo6c2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNhaXJvX2Zvcm1hdF9zdHJpZGVf
Zm9yX3dpZHRoKGltYWdlRm9ybWF0LCBtX3JlY3Qud2lkdGgoKSkgKiBtX3JlY3QuaGVpZ2h0KCk7
Cit9CisKK3ZvaWQgVXBkYXRlQ2h1bms6OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIq
IGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2Rlci0+ZW5jb2RlKG1fcmVjdCk7CisgICAgaWYg
KCFtX3NoYXJlZE1lbW9yeSkgeworICAgICAgICBlbmNvZGVyLT5lbmNvZGUoZmFsc2UpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOwor
ICAgIGlmIChtX3NoYXJlZE1lbW9yeS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSwgU2hhcmVkTWVtb3J5
OjpSZWFkT25seSkpIHsKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHRydWUpOworICAgICAgICBl
bmNvZGVyLT5lbmNvZGUoaGFuZGxlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW5jb2Rlci0+ZW5j
b2RlKGZhbHNlKTsKKworICAgIG1fc2hhcmVkTWVtb3J5ID0gMDsKK30KKworYm9vbCBVcGRhdGVD
aHVuazo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgVXBkYXRlQ2h1
bmsmIGNodW5rKQoreworICAgIEFTU0VSVF9BUkcoY2h1bmssIGNodW5rLmlzRW1wdHkoKSk7CisK
KyAgICBJbnRSZWN0IHJlY3Q7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUocmVjdCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGNodW5rLm1fcmVjdCA9IHJlY3Q7CisKKyAgICBib29s
IGhhc1NoYXJlZE1lbW9yeTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShoYXNTaGFyZWRNZW1v
cnkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWhhc1NoYXJlZE1lbW9yeSkg
eworICAgICAgICBjaHVuay5tX3NoYXJlZE1lbW9yeSA9IDA7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsKKyAgICBpZiAoIWRl
Y29kZXItPmRlY29kZShoYW5kbGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjaHVu
ay5tX3NoYXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKGhhbmRsZSwgU2hhcmVkTWVt
b3J5OjpSZWFkT25seSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2NhaXJvX3N1cmZhY2VfdCog
VXBkYXRlQ2h1bms6OmNyZWF0ZUltYWdlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9zaGFyZWRN
ZW1vcnkpOworICAgIGlmICghbV9zaGFyZWRNZW1vcnkpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgaW50IHN0cmlkZSA9IGNhaXJvX2Zvcm1hdF9zdHJpZGVfZm9yX3dpZHRoKGltYWdlRm9ybWF0
LCBtX3JlY3Qud2lkdGgoKSk7CisgICAgcmV0dXJuIGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRl
X2Zvcl9kYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KG1fc2hhcmVkTWVtb3J5
LT5kYXRhKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbWFnZUZvcm1hdCwgbV9yZWN0LndpZHRoKCksIG1fcmVjdC5oZWlnaHQoKSwgc3RyaWRlKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvZ3RrL1VwZGF0ZUNodW5rLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1VwZGF0
ZUNodW5rLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI0MmFkZAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvVXBkYXRlQ2h1bmsuaApA
QCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9s
YSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMSBJZ2FsaWEgUy5MCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVXBkYXRlQ2h1bmtfaAorI2RlZmlu
ZSBVcGRhdGVDaHVua19oCisKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiU2hhcmVk
TWVtb3J5LmgiCisKKyNpbmNsdWRlIDxjYWlyby5oPgorCituYW1lc3BhY2UgQ29yZUlQQyB7Citj
bGFzcyBBcmd1bWVudEVuY29kZXI7CitjbGFzcyBBcmd1bWVudERlY29kZXI7Cit9CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBVcGRhdGVDaHVuayB7CitwdWJsaWM6CisgICAgVXBkYXRl
Q2h1bmsoKTsKKyAgICBVcGRhdGVDaHVuayhjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAg
flVwZGF0ZUNodW5rKCk7CisKKyAgICBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KCkgY29u
c3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgYm9vbCBpc0VtcHR5KCkgeyByZXR1cm4gbV9yZWN0
LmlzRW1wdHkoKTsgfQorCisgICAgdm9pZCBlbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVy
KikgY29uc3Q7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rl
ciosIFVwZGF0ZUNodW5rJik7CisKKyAgICBjYWlyb19zdXJmYWNlX3QqIGNyZWF0ZUltYWdlKCkg
Y29uc3Q7CisKK3ByaXZhdGU6CisgICAgc2l6ZV90IHNpemUoKSBjb25zdDsKKyAgICBpbnQgbV9z
dHJpZGU7CisgICAgV2ViQ29yZTo6SW50UmVjdCBtX3JlY3Q7CisgICAgbXV0YWJsZSBSZWZQdHI8
U2hhcmVkTWVtb3J5PiBtX3NoYXJlZE1lbW9yeTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisKKyNlbmRpZiAvLyBVcGRhdGVDaHVua19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHkuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0NodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5LmNwcAppbmRleCAz
YmYzMmYyLi45MWYyMWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ2h1
bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9DaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eS5jcHAKQEAgLTEsNSArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDgsNiArNDksOSBAQCBDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eTo6Q2h1bmtlZFVwZGF0
ZURyYXdpbmdBcmVhUHJveHkoUGxhdGZvcm1XZWJWaWV3KiB3ZQogICAgICwgbV9pc1dhaXRpbmdG
b3JEaWRTZXRGcmFtZU5vdGlmaWNhdGlvbihmYWxzZSkKICAgICAsIG1faXNWaXNpYmxlKHRydWUp
CiAgICAgLCBtX2ZvcmNlUmVwYWludFdoZW5SZXN1bWluZ1BhaW50aW5nKGZhbHNlKQorI2lmIFBM
QVRGT1JNKEdUSykKKyAgICAsIG1fYmFja2luZ1N0b3JlSW1hZ2UoMCkKKyNlbmRpZgogICAgICwg
bV93ZWJWaWV3KHdlYlZpZXcpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9DaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eS5oCmluZGV4IGM1MzQyODQuLjY5
Y2MzZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9DaHVua2VkVXBkYXRl
RHJhd2luZ0FyZWFQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9DaHVua2Vk
VXBkYXRlRHJhd2luZ0FyZWFQcm94eS5oCkBAIC0xLDUgKzEsNyBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBD
b3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTAogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zNSw2ICszNyw4IEBAIE9CSkNfQ0xBU1MgV0tWaWV3OwogI2Vs
aWYgUExBVEZPUk0oUVQpCiAjaW5jbHVkZSA8UUltYWdlPgogY2xhc3MgUUdyYXBoaWNzV0tWaWV3
OworI2VsaWYgUExBVEZPUk0oR1RLKQordHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3N1cmZhY2UgY2Fp
cm9fc3VyZmFjZV90OwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNDksNiArNTMs
OSBAQCBjbGFzcyBXZWJWaWV3OwogdHlwZWRlZiBXZWJWaWV3IFBsYXRmb3JtV2ViVmlldzsKICNl
bGlmIFBMQVRGT1JNKFFUKQogdHlwZWRlZiBRR3JhcGhpY3NXS1ZpZXcgUGxhdGZvcm1XZWJWaWV3
OworI2VsaWYgUExBVEZPUk0oR1RLKQorY2xhc3MgV2ViVmlldzsKK3R5cGVkZWYgV2ViVmlldyBQ
bGF0Zm9ybVdlYlZpZXc7CiAjZW5kaWYKIAogY2xhc3MgQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVh
UHJveHkgOiBwdWJsaWMgRHJhd2luZ0FyZWFQcm94eSB7CkBAIC05NSw2ICsxMDIsOSBAQCBwcml2
YXRlOgogICAgIE93blB0cjxIQklUTUFQPiBtX2JhY2tpbmdTdG9yZUJpdG1hcDsKICNlbGlmIFBM
QVRGT1JNKFFUKQogICAgIFFJbWFnZSBtX2JhY2tpbmdTdG9yZUltYWdlOworI2VsaWYgUExBVEZP
Uk0oR1RLKQorICAgIC8vIEJhY2tpbmdTdG9yZQorICAgIGNhaXJvX3N1cmZhY2VfdCogbV9iYWNr
aW5nU3RvcmVJbWFnZTsKICNlbmRpZgogCiAgICAgUGxhdGZvcm1XZWJWaWV3KiBtX3dlYlZpZXc7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaAppbmRleCAwNDJl
YmQ0Li5mODAyMjQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2lu
Z0FyZWFQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVBy
b3h5LmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBN
b3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNiArMzIsOCBAQAogCiAjaWYgUExBVEZPUk0oUVQp
CiBjbGFzcyBRUGFpbnRlcjsKKyNlbGlmIFBMQVRGT1JNKEdUSykKK3R5cGVkZWYgc3RydWN0IF9j
YWlybyBjYWlyb190OwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNDUsNiArNDgs
OCBAQCB0eXBlZGVmIENHQ29udGV4dFJlZiBQbGF0Zm9ybURyYXdpbmdDb250ZXh0OwogdHlwZWRl
ZiBIREMgUGxhdGZvcm1EcmF3aW5nQ29udGV4dDsKICNlbGlmIFBMQVRGT1JNKFFUKQogdHlwZWRl
ZiBRUGFpbnRlciogUGxhdGZvcm1EcmF3aW5nQ29udGV4dDsKKyNlbGlmIFBMQVRGT1JNKEdUSykK
K3R5cGVkZWYgY2Fpcm9fdCogUGxhdGZvcm1EcmF3aW5nQ29udGV4dDsKICNlbmRpZgogCiBjbGFz
cyBEcmF3aW5nQXJlYVByb3h5IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9ndGsvQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHlHdGsuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2d0ay9DaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eUd0ay5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVjNzA4ZgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVh
UHJveHlHdGsuY3BwCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChj
KSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkNodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5LmgiCisKKyNpbmNs
dWRlICJSZWZQdHJDYWlyby5oIgorI2luY2x1ZGUgIlVwZGF0ZUNodW5rLmgiCisjaW5jbHVkZSAi
V2ViUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAiV2ViVmlldy5oIgorCisjaW5jbHVkZSA8Z2Rr
L2dkay5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK1dlYlBhZ2VQcm94eSogQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHk6OnBhZ2UoKQor
eworICAgIHJldHVybiBtX3dlYlZpZXctPnBhZ2UoKTsKK30KKwordm9pZCBDaHVua2VkVXBkYXRl
RHJhd2luZ0FyZWFQcm94eTo6ZW5zdXJlQmFja2luZ1N0b3JlKCkKK3sKKyAgICBpZiAobV9iYWNr
aW5nU3RvcmVJbWFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9iYWNraW5nU3RvcmVJbWFn
ZSA9IGdka193aW5kb3dfY3JlYXRlX3NpbWlsYXJfc3VyZmFjZShndGtfd2lkZ2V0X2dldF93aW5k
b3cobV93ZWJWaWV3LT53aW5kb3coKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBLCBz
aXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKTsKK30KKwordm9pZCBDaHVua2VkVXBkYXRl
RHJhd2luZ0FyZWFQcm94eTo6aW52YWxpZGF0ZUJhY2tpbmdTdG9yZSgpCit7CisgICAgaWYgKG1f
YmFja2luZ1N0b3JlSW1hZ2UpIHsKKyAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KG1fYmFj
a2luZ1N0b3JlSW1hZ2UpOworICAgICAgICBtX2JhY2tpbmdTdG9yZUltYWdlID0gMDsKKyAgICB9
Cit9CisKK2Jvb2wgQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHk6OnBsYXRmb3JtUGFpbnQo
Y29uc3QgSW50UmVjdCYgcmVjdCwgY2Fpcm9fdCogY3IpCit7CisgICAgaWYgKCFtX2JhY2tpbmdT
dG9yZUltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjYWlyb19yZWN0YW5nbGUo
Y3IsIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAg
ICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IsIG1fYmFja2luZ1N0b3JlSW1hZ2UsIDAsIDAp
OworICAgIGNhaXJvX2ZpbGwoY3IpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ2h1
bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHk6OmRyYXdVcGRhdGVDaHVua0ludG9CYWNraW5nU3Rv
cmUoVXBkYXRlQ2h1bmsqIHVwZGF0ZUNodW5rKQoreworICAgIGVuc3VyZUJhY2tpbmdTdG9yZSgp
OworCisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gcGl4bWFwKHVwZGF0ZUNodW5rLT5jcmVh
dGVJbWFnZSgpKTsKKyAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMocGl4bWFwLmdldCgpKSAh
PSBDQUlST19TVEFUVVNfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgSW50
UmVjdCYgdXBkYXRlQ2h1bmtSZWN0ID0gdXBkYXRlQ2h1bmstPnJlY3QoKTsKKworICAgIFJlZlB0
cjxjYWlyb190PiBjciA9IGNhaXJvX2NyZWF0ZShtX2JhY2tpbmdTdG9yZUltYWdlKTsKKyAgICBj
YWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIHBpeG1hcC5nZXQoKSwgdXBkYXRlQ2h1
bmtSZWN0LngoKSwgdXBkYXRlQ2h1bmtSZWN0LnkoKSk7CisgICAgY2Fpcm9fcGFpbnQoY3IuZ2V0
KCkpOworCisgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3X2FyZWEobV93ZWJWaWV3LT53aW5kb3co
KSwgdXBkYXRlQ2h1bmtSZWN0LngoKSwgdXBkYXRlQ2h1bmtSZWN0LnkoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1cGRhdGVDaHVua1JlY3Qud2lkdGgoKSwgdXBkYXRlQ2h1bmtS
ZWN0LmhlaWdodCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0NodW5rZWRVcGRhdGVEcmF3aW5n
QXJlYUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0NodW5r
ZWRVcGRhdGVEcmF3aW5nQXJlYUd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMzEzYWQzZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9ndGsvQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhR3RrLmNwcApAQCAtMCwwICsx
LDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0
eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2Fs
aWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2h1bmtl
ZFVwZGF0ZURyYXdpbmdBcmVhLmgiCisKKyNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgorI2luY2x1
ZGUgIlVwZGF0ZUNodW5rLmgiCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorCisjaW5jbHVkZSA8V2Vi
Q29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lkIENo
dW5rZWRVcGRhdGVEcmF3aW5nQXJlYTo6cGFpbnRJbnRvVXBkYXRlQ2h1bmsoVXBkYXRlQ2h1bmsq
IHVwZGF0ZUNodW5rKQoreworICAgIEFTU0VSVCghdXBkYXRlQ2h1bmstPmlzRW1wdHkoKSk7CisK
KyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBpbWFnZSA9IHVwZGF0ZUNodW5rLT5jcmVhdGVJ
bWFnZSgpOworICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGNhaXJvX2NyZWF0ZShpbWFnZS5nZXQo
KSk7CisgICAgR3JhcGhpY3NDb250ZXh0IGdjKGNyLmdldCgpKTsKKyAgICBnYy5zYXZlKCk7Cisg
ICAgSW50UmVjdCByZWN0ID0gdXBkYXRlQ2h1bmstPnJlY3QoKTsKKyAgICBnYy50cmFuc2xhdGUo
LXJlY3QueCgpLCAtcmVjdC55KCkpOworICAgIG1fd2ViUGFnZS0+ZHJhd1JlY3QoZ2MsIHVwZGF0
ZUNodW5rLT5yZWN0KCkpOworICAgIGdjLnJlc3RvcmUoKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0Cg==
</data>
<flag name="review"
          id="73574"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>