<?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>60293</bug_id>
          
          <creation_ts>2011-05-05 12:40:00 -0700</creation_ts>
          <short_desc>[Cairo][WebKit2] Add an implementation of ShareableBitmap for Cairo</short_desc>
          <delta_ts>2011-05-10 11:34:23 -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>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>Gtk</keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>58242</blocked>
    
    <blocked>59655</blocked>
    
    <blocked>60546</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>alex</cc>
    
    <cc>aroben</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cgarcia</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>398938</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-05-05 12:40:00 -0700</bug_when>
    <thetext>ShareableBitmap is necessary for several features of WebKit2. The Cairo backend should have an implementation of this class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398951</commentid>
    <comment_count>1</comment_count>
      <attachid>92452</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-05-05 12:56:22 -0700</bug_when>
    <thetext>Created attachment 92452
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401248</commentid>
    <comment_count>2</comment_count>
      <attachid>92452</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-05-10 09:16:03 -0700</bug_when>
    <thetext>Comment on attachment 92452
Patch

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

&gt; Source/WebCore/ChangeLog:12
&gt; +        * platform/graphics/cairo/CairoUtilities.cpp:
&gt; +        (WebCore::copyCairoImageSurface): Added this helper which creates a deep
&gt; +        copy of a Cairo image surface.

Would be good to mention where this code came from (though it&apos;s fairly obvious).

&gt; Source/WebCore/platform/graphics/cairo/CairoUtilities.cpp:162
&gt; +cairo_surface_t* copyCairoImageSurface(cairo_surface_t* originalSurface)

This should return a PassRefPtr&lt;cairo_surface_t&gt;.

&gt; Source/WebCore/platform/graphics/cairo/CairoUtilities.cpp:167
&gt; +    cairo_surface_t* newSurface = cairo_image_surface_create(cairo_image_surface_get_format(originalSurface), 

And this should be a RefPtr&lt;cairo_surface_t&gt;.

&gt; Source/WebCore/platform/graphics/cairo/PlatformContextCairo.cpp:99
&gt; +    cairo_pattern_t* pattern = cairo_pattern_create_for_surface(surface);

Looks like this is being leaked? (RefPtr to the rescue!)

&gt; Source/WebCore/platform/graphics/cairo/PlatformContextCairo.cpp:112
&gt; +        if (cairo_t* shadowContext = shadow-&gt;beginShadowLayer(context, destRect)) {
&gt; +            drawPatternToCairoContext(shadowContext, pattern, destRect, 1);
&gt; +            shadow-&gt;endShadowLayer(context);
&gt; +        }

Do we need to destroy shadowContext? Maybe endShadowLayer does that for you?

&gt; Source/WebKit2/Shared/ShareableBitmap.h:113
&gt; +    cairo_surface_t* createCairoSurface();

This should return a PassRefPtr.

&gt; Source/WebKit2/Shared/cairo/ShareableBitmapCairo.cpp:56
&gt; +    const FloatRect destRect = FloatRect(dstPoint, srcRect.size());

No need for the &quot;const&quot; here. And you can just use straight construction syntax, rather than construction+assignment.

&gt; Source/WebKit2/Shared/cairo/ShareableBitmapCairo.cpp:57
&gt; +    context.platformContext()-&gt;drawSurfaceToContext(surfaceCopy.get(), destRect, FloatRect(srcRect), &amp;context);

I think the explicit FloatRect() isn&apos;t needed.

&gt; Source/WebKit2/Shared/cairo/ShareableBitmapCairo.cpp:62
&gt; +    cairo_surface_t* image = cairo_image_surface_create_for_data(static_cast&lt;unsigned char*&gt;(data()),

This should be a RefPtr.

&gt; Source/WebKit2/Shared/cairo/ShareableBitmapCairo.cpp:68
&gt; +    static cairo_user_data_key_t dataKey;

Why static?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401331</commentid>
    <comment_count>3</comment_count>
      <attachid>92981</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-05-10 10:52:59 -0700</bug_when>
    <thetext>Created attachment 92981
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401349</commentid>
    <comment_count>4</comment_count>
      <attachid>92981</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-05-10 11:03:47 -0700</bug_when>
    <thetext>Comment on attachment 92981
Patch for landing

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

&gt; Source/WebCore/platform/graphics/cairo/PlatformContextCairo.cpp:112
&gt; +        if (cairo_t* shadowContext = shadow-&gt;beginShadowLayer(context, destRect)) {
&gt; +            drawPatternToCairoContext(shadowContext, pattern.get(), destRect, 1);
&gt; +            shadow-&gt;endShadowLayer(context);
&gt; +        }

I guess we don&apos;t need to do anything to clean up shadowContext? I didn&apos;t see a reply to my question on the other patch.

&gt; Source/WebKit2/Shared/cairo/ShareableBitmapCairo.cpp:68
&gt; +    static cairo_user_data_key_t dataKey;

Why static?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401351</commentid>
    <comment_count>5</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-05-10 11:04:34 -0700</bug_when>
    <thetext>(In reply to comment #2)

Thanks for the comments!

&gt; (From update of attachment 92452 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=92452&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:12
&gt; &gt; +        * platform/graphics/cairo/CairoUtilities.cpp:
&gt; &gt; +        (WebCore::copyCairoImageSurface): Added this helper which creates a deep
&gt; &gt; +        copy of a Cairo image surface.
&gt; 
&gt; Would be good to mention where this code came from (though it&apos;s fairly obvious).

I&apos;ve updated the ChangeLog to be more explicit here.

&gt; &gt; Source/WebCore/platform/graphics/cairo/CairoUtilities.cpp:162
&gt; &gt; +cairo_surface_t* copyCairoImageSurface(cairo_surface_t* originalSurface)
&gt; 
&gt; This should return a PassRefPtr&lt;cairo_surface_t&gt;.

Fixed.

&gt; &gt; Source/WebCore/platform/graphics/cairo/CairoUtilities.cpp:167
&gt; &gt; +    cairo_surface_t* newSurface = cairo_image_surface_create(cairo_image_surface_get_format(originalSurface), 
&gt; 
&gt; And this should be a RefPtr&lt;cairo_surface_t&gt;.

Fixed.

&gt; &gt; Source/WebCore/platform/graphics/cairo/PlatformContextCairo.cpp:99
&gt; &gt; +    cairo_pattern_t* pattern = cairo_pattern_create_for_surface(surface);
&gt; 
&gt; Looks like this is being leaked? (RefPtr to the rescue!)

Nice catch. I&apos;ve changed this to a RefPtr.

&gt; &gt; Source/WebCore/platform/graphics/cairo/PlatformContextCairo.cpp:112
&gt; &gt; +        if (cairo_t* shadowContext = shadow-&gt;beginShadowLayer(context, destRect)) {
&gt; &gt; +            drawPatternToCairoContext(shadowContext, pattern, destRect, 1);
&gt; &gt; +            shadow-&gt;endShadowLayer(context);
&gt; &gt; +        }
&gt; 
&gt; Do we need to destroy shadowContext? Maybe endShadowLayer does that for you?

endShadowLayer should take care of it. It owns shadowContext.

&gt; &gt; Source/WebKit2/Shared/ShareableBitmap.h:113
&gt; &gt; +    cairo_surface_t* createCairoSurface();
&gt; 
&gt; This should return a PassRefPtr.

Fixed.

&gt; &gt; Source/WebKit2/Shared/cairo/ShareableBitmapCairo.cpp:56
&gt; &gt; +    const FloatRect destRect = FloatRect(dstPoint, srcRect.size());
&gt; 
&gt; No need for the &quot;const&quot; here. And you can just use straight construction syntax, rather than construction+assignment.

Fixed.

&gt; &gt; Source/WebKit2/Shared/cairo/ShareableBitmapCairo.cpp:57
&gt; &gt; +    context.platformContext()-&gt;drawSurfaceToContext(surfaceCopy.get(), destRect, FloatRect(srcRect), &amp;context);
&gt; 
&gt; I think the explicit FloatRect() isn&apos;t needed.

Fixed.

&gt; &gt; Source/WebKit2/Shared/cairo/ShareableBitmapCairo.cpp:62
&gt; &gt; +    cairo_surface_t* image = cairo_image_surface_create_for_data(static_cast&lt;unsigned char*&gt;(data()),
&gt; 
&gt; This should be a RefPtr.

Fixed.

&gt; &gt; Source/WebKit2/Shared/cairo/ShareableBitmapCairo.cpp:68
&gt; &gt; +    static cairo_user_data_key_t dataKey;
&gt; 
&gt; Why static?

The Cairo documentation suggests this is the best way to use the API. I did not want to deviate from that. I left it as static in the final patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401365</commentid>
    <comment_count>6</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-05-10 11:18:34 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 92981 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=92981&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/cairo/PlatformContextCairo.cpp:112
&gt; &gt; +        if (cairo_t* shadowContext = shadow-&gt;beginShadowLayer(context, destRect)) {
&gt; &gt; +            drawPatternToCairoContext(shadowContext, pattern.get(), destRect, 1);
&gt; &gt; +            shadow-&gt;endShadowLayer(context);
&gt; &gt; +        }
&gt; 
&gt; I guess we don&apos;t need to do anything to clean up shadowContext? I didn&apos;t see a reply to my question on the other patch.
&gt; 
&gt; &gt; Source/WebKit2/Shared/cairo/ShareableBitmapCairo.cpp:68
&gt; &gt; +    static cairo_user_data_key_t dataKey;
&gt; 
&gt; Why static?

Hopefully I&apos;ve answered your questions above. I&apos;ll begin the process of landing the patch. Feel free to ping me if you have further questions. Thanks again!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401372</commentid>
    <comment_count>7</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-05-10 11:32:19 -0700</bug_when>
    <thetext>Committed r86174: &lt;http://trac.webkit.org/changeset/86174&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92452</attachid>
            <date>2011-05-05 12:56:22 -0700</date>
            <delta_ts>2011-05-10 11:34:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60293-20110505125621.patch</filename>
            <type>text/plain</type>
            <size>17262</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODU0MDIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzYTViMWNhYTg0ZTdmMWZl
ZGZjMDEzMzNjZjk3MmEzYWMwOGVjZjE3Li5iOGM1ODRhMmZhYTA1YWUyNDNkMjllMGEyODM5ZDk1
NGFiYWUwMWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTEtMDUtMDUgIEJyZW50
IEZ1bGdoYW0gIDxiZnVsZ2hhbUB3ZWJraXQub3JnPiBhbmQgTWFydGluIFJvYmluc29uICA8bXJv
Ymluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgW0NhaXJvXVtXZWJLaXQyXSBBZGQgYW4gaW1wbGVtZW50YXRpb24gb2YgU2hh
cmVhYmxlQml0bWFwIGZvciBDYWlybworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjAyOTMKKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgaXMgY292
ZXJlZCBieSBjdXJyZW50IHBpeGVsIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29weUNhaXJv
SW1hZ2VTdXJmYWNlKTogQWRkZWQgdGhpcyBoZWxwZXIgd2hpY2ggY3JlYXRlcyBhIGRlZXAKKyAg
ICAgICAgY29weSBvZiBhIENhaXJvIGltYWdlIHN1cmZhY2UuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuaDogQWRkZWQgZGVjbGFyYXRpb24uCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKTogVXNlIHRoZSBuZXcgaGVscGVy
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwOiBBYnN0
cmFjdCBzb21lIG9mIHRoaXMgbG9naWMKKyAgICAgICAgaW50byB0aGUgbmV3IGRyYXdTdXJmYWNl
VG9Db250ZXh0IG1ldGhvZCBvbiBQbGF0Zm9ybUNvbnRleHRDYWlyby4KKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9QbGF0Zm9ybUNvbnRleHRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkcmF3UGF0dGVy
blRvQ2Fpcm9Db250ZXh0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRl
eHRDYWlybzo6ZHJhd1N1cmZhY2VUb0NvbnRleHQpOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUNvbnRleHRDYWlyby5oOiBBZGRlZCBkZWNsYXJhdGlv
bnMuCisKIDIwMTEtMDQtMzAgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgTm90IHJldmlld2VkOiBpbnNwZWN0b3IgdG9vbGJhciB0aXRsZXMgd2VyZSAy
cHggb2ZmLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vQ2Fpcm9VdGlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCmluZGV4IDc1OGJjZTlhNjQ5ZDUzMmNiYzc0NjkwMDcy
ZTg2NzhiMGQ4ODEyMzQuLmNjNDRhMzc5ZGU1MjVmOGY1ZmVmMzNmZmVkMzliN2YzZDY1YzM0NDYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJv
VXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9DYWlyb1V0aWxpdGllcy5jcHAKQEAgLTE1OSw0ICsxNTksMjAgQEAgdm9pZCBkcmF3UGF0dGVy
blRvQ2Fpcm9Db250ZXh0KGNhaXJvX3QqIGNyLCBjYWlyb19zdXJmYWNlX3QqIGltYWdlLCBjb25z
dCBJbnRTaXoKICAgICBjYWlyb19yZXN0b3JlKGNyKTsKIH0KIAorY2Fpcm9fc3VyZmFjZV90KiBj
b3B5Q2Fpcm9JbWFnZVN1cmZhY2UoY2Fpcm9fc3VyZmFjZV90KiBvcmlnaW5hbFN1cmZhY2UpCit7
CisgICAgLy8gQ2Fpcm8gZG9lc24ndCBwcm92aWRlIGEgd2F5IHRvIGNvcHkgYSBjYWlyb19zdXJm
YWNlX3QuCisgICAgLy8gU2VlIGh0dHA6Ly9saXN0cy5jYWlyb2dyYXBoaWNzLm9yZy9hcmNoaXZl
cy9jYWlyby8yMDA3LUp1bmUvMDEwODc3Lmh0bWwKKyAgICAvLyBPbmNlIGNhaXJvIHByb3ZpZGVz
IHRoZSB3YXksIHVzZSB0aGUgZnVuY3Rpb24gaW5zdGVhZCBvZiB0aGlzLgorICAgIGNhaXJvX3N1
cmZhY2VfdCogbmV3U3VyZmFjZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKGNhaXJvX2lt
YWdlX3N1cmZhY2VfZ2V0X2Zvcm1hdChvcmlnaW5hbFN1cmZhY2UpLCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF93aWR0aChvcmlnaW5hbFN1cmZhY2UpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X2hlaWdodChvcmlnaW5hbFN1cmZhY2UpKTsKKworICAgIFJlZlB0cjxjYWlyb190
PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShuZXdTdXJmYWNlKSk7CisgICAgY2Fpcm9fc2V0
X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgpLCBvcmlnaW5hbFN1cmZhY2UsIDAsIDApOworICAgIGNh
aXJvX3NldF9vcGVyYXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKKyAgICBj
YWlyb19wYWludChjci5nZXQoKSk7CisgICAgcmV0dXJuIG5ld1N1cmZhY2U7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5oCmluZGV4IGQ4ZmZmOGQ3ZjMwNWRhYmI1YWI1
MjVjZDkwZGZhOTcxNjljM2UzYTUuLjFjYWI1MzNiMDdkYjhjZmM0M2U5OWMxNjk1OTk0YmQyMjMy
Yzk4MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0NhaXJvVXRpbGl0aWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuaApAQCAtNDUsNiArNDUsNyBAQCB2b2lkIGFwcGVuZFdlYkNv
cmVQYXRoVG9DYWlyb0NvbnRleHQoY2Fpcm9fdCogY29udGV4dCwgY29uc3QgUGF0aCYgcGF0aCk7
CiBjYWlyb19vcGVyYXRvcl90IHRvQ2Fpcm9PcGVyYXRvcihDb21wb3NpdGVPcGVyYXRvciBvcCk7
CiB2b2lkIGRyYXdQYXR0ZXJuVG9DYWlyb0NvbnRleHQoY2Fpcm9fdCogY3IsIGNhaXJvX3N1cmZh
Y2VfdCogaW1hZ2UsIGNvbnN0IEludFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiB0
aWxlUmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjYWlyb19v
cGVyYXRvcl90IG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KTsKK2NhaXJvX3N1cmZhY2Vf
dCogY29weUNhaXJvSW1hZ2VTdXJmYWNlKGNhaXJvX3N1cmZhY2VfdCopOwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKaW5kZXggOGFhNjUzMTgwMjlmYzFj
ZTU5ODlhOTg2OTJjZTVjMDIzY2VkMWIwZS4uYTgwOWIyMjc1NzdhNDE3ZDUxYTQxNmE1MzMwN2Uy
MjMyYWMyMTkyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKIAog
I2luY2x1ZGUgIkJhc2U2NC5oIgogI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5jbHVkZSAi
Q2Fpcm9VdGlsaXRpZXMuaCIKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlRGF0YS5oIgpAQCAtNDUsMjQgKzQ2LDYgQEAKIAog
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAotLy8gQ2Fpcm8gZG9lc24ndCBwcm92aWRlIGEgd2F5IHRv
IGNvcHkgYSBjYWlyb19zdXJmYWNlX3QuCi0vLyBTZWUgaHR0cDovL2xpc3RzLmNhaXJvZ3JhcGhp
Y3Mub3JnL2FyY2hpdmVzL2NhaXJvLzIwMDctSnVuZS8wMTA4NzcuaHRtbAotLy8gT25jZSBjYWly
byBwcm92aWRlcyB0aGUgd2F5LCB1c2UgdGhlIGZ1bmN0aW9uIGluc3RlYWQgb2YgdGhpcy4KLXN0
YXRpYyBpbmxpbmUgY2Fpcm9fc3VyZmFjZV90KiBjb3B5U3VyZmFjZShjYWlyb19zdXJmYWNlX3Qq
IHN1cmZhY2UpCi17Ci0gICAgY2Fpcm9fZm9ybWF0X3QgZm9ybWF0ID0gY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9nZXRfZm9ybWF0KHN1cmZhY2UpOwotICAgIGludCB3aWR0aCA9IGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpOwotICAgIGludCBoZWlnaHQgPSBjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZSk7Ci0gICAgY2Fpcm9fc3VyZmFjZV90KiBuZXdzdXJm
YWNlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsK
LQotICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShuZXdzdXJm
YWNlKSk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgpLCBzdXJmYWNlLCAw
LCAwKTsKLSAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX1NP
VVJDRSk7Ci0gICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOwotCi0gICAgcmV0dXJuIG5ld3N1cmZh
Y2U7Ci19Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogSW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1
ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYgc2l6ZSkKQEAgLTExMSw3ICs5NCw3IEBAIGJvb2wgSW1h
Z2VCdWZmZXI6OmRyYXdzVXNpbmdDb3B5KCkgY29uc3QKIFBhc3NSZWZQdHI8SW1hZ2U+IEltYWdl
QnVmZmVyOjpjb3B5SW1hZ2UoKSBjb25zdAogewogICAgIC8vIEJpdG1hcEltYWdlIHdpbGwgcmVs
ZWFzZSB0aGUgcGFzc2VkIGluIHN1cmZhY2Ugb24gZGVzdHJ1Y3Rpb24KLSAgICByZXR1cm4gQml0
bWFwSW1hZ2U6OmNyZWF0ZShjb3B5U3VyZmFjZShtX2RhdGEubV9zdXJmYWNlKSk7CisgICAgcmV0
dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoY29weUNhaXJvSW1hZ2VTdXJmYWNlKG1fZGF0YS5tX3N1
cmZhY2UpKTsKIH0KIAogdm9pZCBJbWFnZUJ1ZmZlcjo6Y2xpcChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgbWFza1JlY3QpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCmluZGV4IGNl
N2Q4YjI2YmExOGYwNjNiMDE1ZjViZWUzYThkNDkyM2I4ZDU2YmUuLmIwYmIxOGNlMThkYTAzYzBm
YTgwZGE1MGY0Yjk1YjYwNGU0ZjJlM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCkBAIC0xMTMsOSArMTEzLDYgQEAg
dm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgZHN0LCBjb25zdCBGbG8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIElu
dFNpemUgc2VsZlNpemUgPSBzaXplKCk7Ci0KLSAgICBjYWlyb190KiBjciA9IGNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpLT5jcigpOwogICAgIGNvbnRleHQtPnNhdmUoKTsKIAogICAgIC8vIFNl
dCB0aGUgY29tcG9zaXRpbmcgb3BlcmF0aW9uLgpAQCAtMTIzLDM5ICsxMjAsNyBAQCB2b2lkIEJp
dG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBkc3QsIGNvbnN0IEZsbwogICAgICAgICBjb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24o
Q29tcG9zaXRlQ29weSk7CiAgICAgZWxzZQogICAgICAgICBjb250ZXh0LT5zZXRDb21wb3NpdGVP
cGVyYXRpb24ob3ApOwotCi0gICAgLy8gSWYgd2UncmUgZHJhd2luZyBhIHN1YiBwb3J0aW9uIG9m
IHRoZSBpbWFnZSBvciBzY2FsaW5nIHRoZW4gY3JlYXRlCi0gICAgLy8gYSBwYXR0ZXJuIHRyYW5z
Zm9ybWF0aW9uIG9uIHRoZSBpbWFnZSBhbmQgZHJhdyB0aGUgdHJhbnNmb3JtZWQgcGF0dGVybi4K
LSAgICAvLyBUZXN0IHVzaW5nIGV4YW1wbGUgc2l0ZSBhdCBodHRwOi8vd3d3Lm1leWVyd2ViLmNv
bS9lcmljL2Nzcy9lZGdlL2NvbXBsZXhzcGlyYWwvZGVtby5odG1sCi0gICAgY2Fpcm9fcGF0dGVy
bl90KiBwYXR0ZXJuID0gY2Fpcm9fcGF0dGVybl9jcmVhdGVfZm9yX3N1cmZhY2UoaW1hZ2UpOwot
Ci0gICAgY2Fpcm9fcGF0dGVybl9zZXRfZXh0ZW5kKHBhdHRlcm4sIENBSVJPX0VYVEVORF9QQUQp
OwotCi0gICAgZmxvYXQgc2NhbGVYID0gc3JjUmVjdC53aWR0aCgpIC8gZHN0UmVjdC53aWR0aCgp
OwotICAgIGZsb2F0IHNjYWxlWSA9IHNyY1JlY3QuaGVpZ2h0KCkgLyBkc3RSZWN0LmhlaWdodCgp
OwotICAgIGNhaXJvX21hdHJpeF90IG1hdHJpeCA9IHsgc2NhbGVYLCAwLCAwLCBzY2FsZVksIHNy
Y1JlY3QueCgpLCBzcmNSZWN0LnkoKSB9OwotICAgIGNhaXJvX3BhdHRlcm5fc2V0X21hdHJpeChw
YXR0ZXJuLCAmbWF0cml4KTsKLQotICAgIENvbnRleHRTaGFkb3cqIHNoYWRvdyA9IGNvbnRleHQt
PmNvbnRleHRTaGFkb3coKTsKLSAgICBBU1NFUlQoc2hhZG93KTsKLSAgICBpZiAoc2hhZG93LT5t
X3R5cGUgIT0gQ29udGV4dFNoYWRvdzo6Tm9TaGFkb3cpIHsKLSAgICAgICAgY2Fpcm9fdCogc2hh
ZG93Q29udGV4dCA9IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcihjb250ZXh0LCBkc3RSZWN0KTsK
LSAgICAgICAgaWYgKHNoYWRvd0NvbnRleHQpIHsKLSAgICAgICAgICAgIGNhaXJvX3RyYW5zbGF0
ZShzaGFkb3dDb250ZXh0LCBkc3RSZWN0LngoKSwgZHN0UmVjdC55KCkpOwotICAgICAgICAgICAg
Y2Fpcm9fc2V0X3NvdXJjZShzaGFkb3dDb250ZXh0LCBwYXR0ZXJuKTsKLSAgICAgICAgICAgIGNh
aXJvX3JlY3RhbmdsZShzaGFkb3dDb250ZXh0LCAwLCAwLCBkc3RSZWN0LndpZHRoKCksIGRzdFJl
Y3QuaGVpZ2h0KCkpOwotICAgICAgICAgICAgY2Fpcm9fZmlsbChzaGFkb3dDb250ZXh0KTsKLSAg
ICAgICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIoY29udGV4dCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICAvLyBEcmF3IHRoZSBpbWFnZS4KLSAgICBjYWlyb190cmFuc2xhdGUoY3IsIGRz
dFJlY3QueCgpLCBkc3RSZWN0LnkoKSk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgcGF0dGVy
bik7Ci0gICAgY2Fpcm9fcGF0dGVybl9kZXN0cm95KHBhdHRlcm4pOwotICAgIGNhaXJvX3JlY3Rh
bmdsZShjciwgMCwgMCwgZHN0UmVjdC53aWR0aCgpLCBkc3RSZWN0LmhlaWdodCgpKTsKLSAgICBj
YWlyb19jbGlwKGNyKTsKLSAgICBjYWlyb19wYWludF93aXRoX2FscGhhKGNyLCBjb250ZXh0LT5n
ZXRBbHBoYSgpKTsKKyAgICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1N1cmZhY2VU
b0NvbnRleHQoaW1hZ2UsIGRzdFJlY3QsIHNyY1JlY3QsIGNvbnRleHQpOwogCiAgICAgY29udGV4
dC0+cmVzdG9yZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9QbGF0Zm9ybUNvbnRleHRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUNvbnRleHRDYWlyby5jcHAKaW5kZXggMDYxZWUw
NmExM2NmMTUxZGYzMTA2YzAwYzdhZDM3ODEyMWI2NDM2Ni4uM2ZhMmVhOGVkNDc5NzI2MzAxZGJi
OGVjMzc3ZGI5ZWE3NGQzM2JmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1Db250ZXh0Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtQ29udGV4dENhaXJvLmNwcApAQCAt
MjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29u
dGV4dENhaXJvLmgiCiAKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlIDxj
YWlyby5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC04MSw1ICs4Miw0MCBAQCB2b2lkIFBs
YXRmb3JtQ29udGV4dENhaXJvOjpwdXNoSW1hZ2VNYXNrKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFj
ZSwgY29uc3QgRmxvYXRSZQogICAgIGNhaXJvX2ZpbGwobV9jci5nZXQoKSk7CiB9CiAKK3N0YXRp
YyB2b2lkIGRyYXdQYXR0ZXJuVG9DYWlyb0NvbnRleHQoY2Fpcm9fdCogY3IsIGNhaXJvX3BhdHRl
cm5fdCogcGF0dGVybiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgZmxvYXQgYWxwaGEpCit7
CisgICAgY2Fpcm9fdHJhbnNsYXRlKGNyLCBkZXN0UmVjdC54KCksIGRlc3RSZWN0LnkoKSk7Cisg
ICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgcGF0dGVybik7CisgICAgY2Fpcm9fcmVjdGFuZ2xlKGNy
LCAwLCAwLCBkZXN0UmVjdC53aWR0aCgpLCBkZXN0UmVjdC5oZWlnaHQoKSk7CisgICAgY2Fpcm9f
Y2xpcChjcik7CisgICAgY2Fpcm9fcGFpbnRfd2l0aF9hbHBoYShjciwgYWxwaGEpOworfQorCit2
b2lkIFBsYXRmb3JtQ29udGV4dENhaXJvOjpkcmF3U3VyZmFjZVRvQ29udGV4dChjYWlyb19zdXJm
YWNlX3QqIHN1cmZhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQoreworICAgIC8vIElmIHdlJ3Jl
IGRyYXdpbmcgYSBzdWIgcG9ydGlvbiBvZiB0aGUgaW1hZ2Ugb3Igc2NhbGluZyB0aGVuIGNyZWF0
ZQorICAgIC8vIGEgcGF0dGVybiB0cmFuc2Zvcm1hdGlvbiBvbiB0aGUgaW1hZ2UgYW5kIGRyYXcg
dGhlIHRyYW5zZm9ybWVkIHBhdHRlcm4uCisgICAgLy8gVGVzdCB1c2luZyBleGFtcGxlIHNpdGUg
YXQgaHR0cDovL3d3dy5tZXllcndlYi5jb20vZXJpYy9jc3MvZWRnZS9jb21wbGV4c3BpcmFsL2Rl
bW8uaHRtbAorICAgIGNhaXJvX3BhdHRlcm5fdCogcGF0dGVybiA9IGNhaXJvX3BhdHRlcm5fY3Jl
YXRlX2Zvcl9zdXJmYWNlKHN1cmZhY2UpOworICAgIGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZChw
YXR0ZXJuLCBDQUlST19FWFRFTkRfUEFEKTsKKworICAgIGZsb2F0IHNjYWxlWCA9IHNyY1JlY3Qu
d2lkdGgoKSAvIGRlc3RSZWN0LndpZHRoKCk7CisgICAgZmxvYXQgc2NhbGVZID0gc3JjUmVjdC5o
ZWlnaHQoKSAvIGRlc3RSZWN0LmhlaWdodCgpOworICAgIGNhaXJvX21hdHJpeF90IG1hdHJpeCA9
IHsgc2NhbGVYLCAwLCAwLCBzY2FsZVksIHNyY1JlY3QueCgpLCBzcmNSZWN0LnkoKSB9OworICAg
IGNhaXJvX3BhdHRlcm5fc2V0X21hdHJpeChwYXR0ZXJuLCAmbWF0cml4KTsKKworICAgIENvbnRl
eHRTaGFkb3cqIHNoYWRvdyA9IGNvbnRleHQtPmNvbnRleHRTaGFkb3coKTsKKyAgICBpZiAoc2hh
ZG93ICYmIHNoYWRvdy0+bV90eXBlICE9IENvbnRleHRTaGFkb3c6Ok5vU2hhZG93KSB7CisgICAg
ICAgIGlmIChjYWlyb190KiBzaGFkb3dDb250ZXh0ID0gc2hhZG93LT5iZWdpblNoYWRvd0xheWVy
KGNvbnRleHQsIGRlc3RSZWN0KSkgeworICAgICAgICAgICAgZHJhd1BhdHRlcm5Ub0NhaXJvQ29u
dGV4dChzaGFkb3dDb250ZXh0LCBwYXR0ZXJuLCBkZXN0UmVjdCwgMSk7CisgICAgICAgICAgICBz
aGFkb3ctPmVuZFNoYWRvd0xheWVyKGNvbnRleHQpOworICAgICAgICB9CisgICAgfQorCisgICAg
Y2Fpcm9fc2F2ZShtX2NyLmdldCgpKTsKKyAgICBkcmF3UGF0dGVyblRvQ2Fpcm9Db250ZXh0KG1f
Y3IuZ2V0KCksIHBhdHRlcm4sIGRlc3RSZWN0LCBjb250ZXh0LT5nZXRBbHBoYSgpKTsKKyAgICBj
YWlyb19yZXN0b3JlKG1fY3IuZ2V0KCkpOworfQorCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRm
b3JtQ29udGV4dENhaXJvLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9QbGF0Zm9ybUNvbnRleHRDYWlyby5oCmluZGV4IDkzNzQxN2FjMDkwMGRmMjcyMDZmNTcyMDEy
YTQ2MTE2YTc0ZGEwMjEuLmZkYjM0YjhjNmM2ZmQ4ZjhiMWQ3Njg2MmE2ZGU4Zjg4ZGEyMzdkNWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRm
b3JtQ29udGV4dENhaXJvLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaApAQCAtNjYsNiArNjYsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzYXZlKCk7CiAgICAgdm9pZCByZXN0b3JlKCk7CiAgICAgdm9pZCBwdXNoSW1hZ2VN
YXNrKGNhaXJvX3N1cmZhY2VfdCosIGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZvaWQgZHJhd1N1
cmZhY2VUb0NvbnRleHQoY2Fpcm9fc3VyZmFjZV90KiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBHcmFwaGljc0NvbnRleHQqKTsKIAogcHJpdmF0
ZToKICAgICBSZWZQdHI8Y2Fpcm9fdD4gbV9jcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA4M2ZmNzU4NDE5NTFh
ODBjYTVhM2JmYjk4MzdlNDg3ODQ1YTM1MGIxLi45YmFjMGMwNDE5ODgyZjQyMjVjMGQyNzVhNzA3
YWM2NzRhZGMxYzM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDUtMDUgIEJy
ZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUB3ZWJraXQub3JnPiBhbmQgTWFydGluIFJvYmluc29uICA8
bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgW0NhaXJvXVtXZWJLaXQyXSBBZGQgYW4gaW1wbGVtZW50YXRpb24gb2Yg
U2hhcmVhYmxlQml0bWFwIGZvciBDYWlybworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NjAyOTMKKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBSZW1v
dmUgU2hhcmVhYmxlQml0bWFwR3RrIGluIGZhdm9yIG9mIFNoYXJlYWJsZUJpdG1hcENhaXJvLgor
ICAgICAgICAqIFNoYXJlZC9TaGFyZWFibGVCaXRtYXAuaDogQWRkZWQgYSBjb3VwbGUgQ2Fpcm8t
c3BlY2lmaWMgZGVjbGFyYXRpb25zLgorICAgICAgICAqIFNoYXJlZC9jYWlyby9TaGFyZWFibGVC
aXRtYXBDYWlyby5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRl
R3JhcGhpY3NDb250ZXh0KTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1h
cDo6cGFpbnQpOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpjcmVh
dGVDYWlyb1N1cmZhY2UpOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFw
OjpyZWxlYXNlU3VyZmFjZURhdGEpOiBBZGRlZC4KKwogMjAxMS0wNC0yOCAgSmVyIE5vYmxlICA8
amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBKb24gSG9uZXljdXR0
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2Vi
S2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCBkMTM2MGM0NTBkZGE2ODMyMjU3N2JiZWQwOWYzMDJh
MWU1ZDdhNTMxLi4yNmIwNjIyNzRmNTNjYmZjMWY3MGVhM2U5ZDA5MDNjZWMxYjQwOTUzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9HTlVtYWtlZmlsZS5hbQpAQCAtMTgyLDcgKzE4Miw3IEBAIGxpYndlYmtpdDJndGtfQFdFQktJ
VEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFf
U09VCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL0RyYXdpbmdBcmVhSW5mby5oIFwKIAlTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvRWRpdG9yU3RhdGUuaCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL0Zv
bnRTbW9vdGhpbmdMZXZlbC5oIFwKLQlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1NoYXJlYWJs
ZUJpdG1hcEd0ay5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9jYWlyby9TaGFyZWFibGVC
aXRtYXBDYWlyby5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvTmF0aXZlV2ViS2V5
Ym9hcmRFdmVudEd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvTmF0aXZlV2Vi
TW91c2VFdmVudEd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvUGxhdGZvcm1D
ZXJ0aWZpY2F0ZUluZm8uaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hh
cmVhYmxlQml0bWFwLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmgK
aW5kZXggZDY0N2ExMmU2NWMyMTQ0NGE3OWY4YWEzM2FkNmQzM2FlNDlhNjcxOS4uMmUyNDk4N2I0
MjVlZWE3NWE2NzljYzhhYjViMWVjNjI4OTk4MDVjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9T
aGFyZWFibGVCaXRtYXAuaApAQCAtMzUsNiArMzUsOCBAQAogCiAjaWYgVVNFKENHKQogI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNlbGlmIFBMQVRGT1JNKENBSVJPKQordHlwZWRlZiBzdHJ1
Y3QgX2NhaXJvX3N1cmZhY2UgY2Fpcm9fc3VyZmFjZV90OyAKICNlbmRpZgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC0xMDUsNiArMTA3LDEwIEBAIHB1YmxpYzoKICAgICAvLyBUaGlzIGNyZWF0
ZXMgYSBDR0ltYWdlUmVmIHRoYXQgZGlyZWN0bHkgcmVmZXJlbmNlcyB0aGUgc2hhcmVkIGJpdG1h
cCBkYXRhLgogICAgIC8vIFRoaXMgaXMgb25seSBzYWZlIHRvIHVzZSB3aGVuIHdlIGtub3cgdGhh
dCB0aGUgY29udGVudHMgb2YgdGhlIHNoYXJlYWJsZSBiaXRtYXAgd29uJ3QgY2hhbmdlLgogICAg
IFJldGFpblB0cjxDR0ltYWdlUmVmPiBtYWtlQ0dJbWFnZSgpOworI2VsaWYgVVNFKENBSVJPKQor
ICAgIC8vIFRoaXMgY3JlYXRlcyBhIEJpdG1hcEltYWdlIHRoYXQgZGlyZWN0bHkgcmVmZXJlbmNl
cyB0aGUgc2hhcmVkIGJpdG1hcCBkYXRhLgorICAgIC8vIFRoaXMgaXMgb25seSBzYWZlIHRvIHVz
ZSB3aGVuIHdlIGtub3cgdGhhdCB0aGUgY29udGVudHMgb2YgdGhlIHNoYXJlYWJsZSBiaXRtYXAg
d29uJ3QgY2hhbmdlLgorICAgIGNhaXJvX3N1cmZhY2VfdCogY3JlYXRlQ2Fpcm9TdXJmYWNlKCk7
CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAgLTExOCw2ICsxMjQsMTAgQEAgcHJpdmF0ZToKICAgICBz
dGF0aWMgdm9pZCByZWxlYXNlRGF0YVByb3ZpZGVyRGF0YSh2b2lkKiB0eXBlbGVzc0JpdG1hcCwg
Y29uc3Qgdm9pZCogdHlwZWxlc3NEYXRhLCBzaXplX3QpOwogI2VuZGlmCiAKKyNpZiBVU0UoQ0FJ
Uk8pCisgICAgc3RhdGljIHZvaWQgcmVsZWFzZVN1cmZhY2VEYXRhKHZvaWQqIHR5cGVsZXNzQml0
bWFwKTsKKyNlbmRpZgorCiAgICAgdm9pZCogZGF0YSgpIGNvbnN0OwogICAgIHNpemVfdCBzaXpl
SW5CeXRlcygpIGNvbnN0IHsgcmV0dXJuIG51bUJ5dGVzRm9yU2l6ZShtX3NpemUpOyB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9jYWlyby9TaGFyZWFibGVCaXRtYXBDYWly
by5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2Fpcm8vU2hhcmVhYmxlQml0bWFwQ2Fpcm8u
Y3BwCmluZGV4IGE0ZThlNTU3Mzk0Mjc0MjVmZDAwYWU3NDQxN2JhYzA4NWJlMGM2MTEuLmI4ZWVi
YzY3M2Q5N2U2YWQ4NDc3MDMxNDA3OTU2NjIxYzY1NWVmNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9jYWlyby9TaGFyZWFibGVCaXRtYXBDYWlyby5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL2NhaXJvL1NoYXJlYWJsZUJpdG1hcENhaXJvLmNwcApAQCAtMSw1ICsx
LDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIEJyZW50IEZ1bGdoYW0gPGJmdWxnaGFtQHdl
YmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsOCArMjgsMTAgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKIAorI2luY2x1ZGUgPFdlYkNvcmUvQ2Fp
cm9VdGlsaXRpZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRm
b3JtQ29udGV4dENhaXJvLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0zNSwx
MyArMzksNDAgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIFBhc3NPd25QdHI8R3JhcGhpY3NDb250
ZXh0PiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpCiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90
PiBpbWFnZSA9IGFkb3B0UmVmKGNyZWF0ZUNhaXJvU3VyZmFjZSgpKTsKKyAgICBSZWZQdHI8Y2Fp
cm9fdD4gYml0bWFwQ29udGV4dCA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShpbWFnZS5nZXQoKSkp
OworICAgIHJldHVybiBhZG9wdFB0cihuZXcgR3JhcGhpY3NDb250ZXh0KGJpdG1hcENvbnRleHQu
Z2V0KCkpKTsKIH0KIAotdm9pZCBTaGFyZWFibGVCaXRtYXA6OnBhaW50KEdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYpCit2b2lkIFNoYXJlYWJsZUJpdG1h
cDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgZHN0UG9p
bnQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRhdGEo
KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBSVJPX0ZPUk1BVF9BUkdCMzIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fc2l6ZS53aWR0aCgpICogNCkpOworCisgICAgLy8g
VGhpcyBjb3B5IGlzIG5vdCBjb3B5LW9uLXdyaXRlLCBzbyB0aGlzIGlzIHByb2JhYmx5IHN1Yi1v
cHRpbWFsLgorICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHN1cmZhY2VDb3B5ID0gYWRvcHRS
ZWYoY29weUNhaXJvSW1hZ2VTdXJmYWNlKHN1cmZhY2UuZ2V0KCkpKTsKKyAgICBjb25zdCBGbG9h
dFJlY3QgZGVzdFJlY3QgPSBGbG9hdFJlY3QoZHN0UG9pbnQsIHNyY1JlY3Quc2l6ZSgpKTsKKyAg
ICBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5kcmF3U3VyZmFjZVRvQ29udGV4dChzdXJmYWNl
Q29weS5nZXQoKSwgZGVzdFJlY3QsIEZsb2F0UmVjdChzcmNSZWN0KSwgJmNvbnRleHQpOworfQor
CitjYWlyb19zdXJmYWNlX3QqIFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlQ2Fpcm9TdXJmYWNlKCkK
K3sKKyAgICBjYWlyb19zdXJmYWNlX3QqIGltYWdlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVh
dGVfZm9yX2RhdGEoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRhdGEoKSksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENBSVJPX0ZPUk1BVF9BUkdCMzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVp
Z2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fc2l6ZS53aWR0aCgpICogNCk7CisKKyAgICByZWYoKTsgLy8gQmFs
YW5jZWQgYnkgZGVyZWYgaW4gcmVsZWFzZVN1cmZhY2VEYXRhLgorICAgIHN0YXRpYyBjYWlyb191
c2VyX2RhdGFfa2V5X3QgZGF0YUtleTsKKyAgICBjYWlyb19zdXJmYWNlX3NldF91c2VyX2RhdGEo
aW1hZ2UsICZkYXRhS2V5LCB0aGlzLCByZWxlYXNlU3VyZmFjZURhdGEpOworICAgIHJldHVybiBp
bWFnZTsKIH0KLSAgICAgICAgCisKK3ZvaWQgU2hhcmVhYmxlQml0bWFwOjpyZWxlYXNlU3VyZmFj
ZURhdGEodm9pZCogdHlwZWxlc3NCaXRtYXApCit7CisgICAgc3RhdGljX2Nhc3Q8U2hhcmVhYmxl
Qml0bWFwKj4odHlwZWxlc3NCaXRtYXApLT5kZXJlZigpOyAvLyBCYWxhbmNlZCBieSByZWYgaW4g
Y3JlYXRlQ2Fpcm9TdXJmYWNlLgorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92981</attachid>
            <date>2011-05-10 10:52:59 -0700</date>
            <delta_ts>2011-05-10 11:03:47 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-60293-20110510105258.patch</filename>
            <type>text/plain</type>
            <size>17504</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODYxNjMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxZWZhNzdlMGFhY2VhZWE2
ZmUzZTg0YjU5YTEyYjI4ZDQ0ZTA2Zjk4Li4yNWUwMjFkZGI1OTQ4YWM2ZmIwZjY2NTM2NjkzNzZm
ZDVkOWI0ZTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTEtMDUtMDUgIEJyZW50
IEZ1bGdoYW0gIDxiZnVsZ2hhbUB3ZWJraXQub3JnPiBhbmQgTWFydGluIFJvYmluc29uICA8bXJv
Ymluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgW0NhaXJvXVtXZWJLaXQyXSBBZGQgYW4gaW1wbGVtZW50YXRpb24gb2YgU2hh
cmVhYmxlQml0bWFwIGZvciBDYWlybworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjAyOTMKKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgaXMgY292
ZXJlZCBieSBjdXJyZW50IHBpeGVsIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29weUNhaXJv
SW1hZ2VTdXJmYWNlKTogQWJzdHJhY3QgdGhlIGNvZGUgZnJvbSBXZWJDb3JlOjpJbWFnZUJ1ZmZl
cjo6Y29weUltYWdlCisgICAgICAgIGludG8gdGhpcyBoZWxwZXIgd2hpY2ggY3JlYXRlcyBhIGRl
ZXAgY29weSBvZiBhIENhaXJvIGltYWdlIHN1cmZhY2UuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuaDogQWRkZWQgZGVjbGFyYXRpb24uCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKTogVXNlIHRoZSBuZXcgaGVscGVyLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwOiBBYnN0cmFj
dCBzb21lIG9mIHRoaXMgbG9naWMKKyAgICAgICAgaW50byB0aGUgbmV3IGRyYXdTdXJmYWNlVG9D
b250ZXh0IG1ldGhvZCBvbiBQbGF0Zm9ybUNvbnRleHRDYWlyby4KKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Q
bGF0Zm9ybUNvbnRleHRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkcmF3UGF0dGVyblRv
Q2Fpcm9Db250ZXh0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRD
YWlybzo6ZHJhd1N1cmZhY2VUb0NvbnRleHQpOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9QbGF0Zm9ybUNvbnRleHRDYWlyby5oOiBBZGRlZCBkZWNsYXJhdGlvbnMu
CisKIDIwMTEtMDUtMTAgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAKaW5kZXgg
MDFiNGZjMWU5MjliZjhjYzU1MWFlMWEyN2Q0ODg2YTFjZWI5OWQ1OS4uOTkxM2YwNTU5MTUxODY3
NDQxYWIwZTdhZjJjOGFmZDZhYjZlMWNkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcApAQCAtMTU5LDQg
KzE1OSwyMCBAQCB2b2lkIGRyYXdQYXR0ZXJuVG9DYWlyb0NvbnRleHQoY2Fpcm9fdCogY3IsIGNh
aXJvX3N1cmZhY2VfdCogaW1hZ2UsIGNvbnN0IEludFNpegogICAgIGNhaXJvX3Jlc3RvcmUoY3Ip
OwogfQogCitQYXNzUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gY29weUNhaXJvSW1hZ2VTdXJmYWNl
KGNhaXJvX3N1cmZhY2VfdCogb3JpZ2luYWxTdXJmYWNlKQoreworICAgIC8vIENhaXJvIGRvZXNu
J3QgcHJvdmlkZSBhIHdheSB0byBjb3B5IGEgY2Fpcm9fc3VyZmFjZV90LgorICAgIC8vIFNlZSBo
dHRwOi8vbGlzdHMuY2Fpcm9ncmFwaGljcy5vcmcvYXJjaGl2ZXMvY2Fpcm8vMjAwNy1KdW5lLzAx
MDg3Ny5odG1sCisgICAgLy8gT25jZSBjYWlybyBwcm92aWRlcyB0aGUgd2F5LCB1c2UgdGhlIGZ1
bmN0aW9uIGluc3RlYWQgb2YgdGhpcy4KKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBuZXdT
dXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9nZXRfZm9ybWF0KG9yaWdpbmFsU3VyZmFjZSksIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChvcmlnaW5hbFN1cmZhY2UpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQob3JpZ2luYWxTdXJm
YWNlKSkpOworCisgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRl
KG5ld1N1cmZhY2UuZ2V0KCkpKTsKKyAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0
KCksIG9yaWdpbmFsU3VyZmFjZSwgMCwgMCk7CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLmdl
dCgpLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOworICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsK
KyAgICByZXR1cm4gbmV3U3VyZmFjZS5yZWxlYXNlKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0NhaXJvVXRpbGl0aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9DYWlyb1V0aWxpdGllcy5oCmluZGV4IGQ4ZmZmOGQ3ZjMwNWRhYmI1YWI1MjVjZDkwZGZhOTcx
NjljM2UzYTUuLjNjMGY3ZDRhMWVmZjMyMzZkMjQyOWFkMzZlNzFkOGMxY2JjODUzNTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0
aWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9V
dGlsaXRpZXMuaApAQCAtNDUsNiArNDUsNyBAQCB2b2lkIGFwcGVuZFdlYkNvcmVQYXRoVG9DYWly
b0NvbnRleHQoY2Fpcm9fdCogY29udGV4dCwgY29uc3QgUGF0aCYgcGF0aCk7CiBjYWlyb19vcGVy
YXRvcl90IHRvQ2Fpcm9PcGVyYXRvcihDb21wb3NpdGVPcGVyYXRvciBvcCk7CiB2b2lkIGRyYXdQ
YXR0ZXJuVG9DYWlyb0NvbnRleHQoY2Fpcm9fdCogY3IsIGNhaXJvX3N1cmZhY2VfdCogaW1hZ2Us
IGNvbnN0IEludFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRl
cm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjYWlyb19vcGVyYXRvcl90IG9w
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KTsKK1Bhc3NSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90
PiBjb3B5Q2Fpcm9JbWFnZVN1cmZhY2UoY2Fpcm9fc3VyZmFjZV90Kik7CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAppbmRleCBhM2Y0NWMxNmM3ZjkzMDVh
NGIyNjUyNTk1ZjdkYzM3MTkxYzU0ZjNmLi4xNjM0MGE3ZGRkMzk1ZDIxZTdlNzU1M2VlZDBlZjhj
YTZjNGIxMTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcApAQCAtMzEsNiArMzEsNyBAQAogCiAj
aW5jbHVkZSAiQmFzZTY0LmgiCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJD
YWlyb1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCkBAIC00NSwyNCArNDYsNiBAQAogCiB1
c2luZyBuYW1lc3BhY2Ugc3RkOwogCi0vLyBDYWlybyBkb2Vzbid0IHByb3ZpZGUgYSB3YXkgdG8g
Y29weSBhIGNhaXJvX3N1cmZhY2VfdC4KLS8vIFNlZSBodHRwOi8vbGlzdHMuY2Fpcm9ncmFwaGlj
cy5vcmcvYXJjaGl2ZXMvY2Fpcm8vMjAwNy1KdW5lLzAxMDg3Ny5odG1sCi0vLyBPbmNlIGNhaXJv
IHByb3ZpZGVzIHRoZSB3YXksIHVzZSB0aGUgZnVuY3Rpb24gaW5zdGVhZCBvZiB0aGlzLgotc3Rh
dGljIGlubGluZSBjYWlyb19zdXJmYWNlX3QqIGNvcHlTdXJmYWNlKGNhaXJvX3N1cmZhY2VfdCog
c3VyZmFjZSkKLXsKLSAgICBjYWlyb19mb3JtYXRfdCBmb3JtYXQgPSBjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF9mb3JtYXQoc3VyZmFjZSk7Ci0gICAgaW50IHdpZHRoID0gY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9nZXRfd2lkdGgoc3VyZmFjZSk7Ci0gICAgaW50IGhlaWdodCA9IGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlKTsKLSAgICBjYWlyb19zdXJmYWNlX3QqIG5ld3N1cmZh
Y2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZShmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwot
Ci0gICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG5ld3N1cmZh
Y2UpKTsKLSAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIHN1cmZhY2UsIDAs
IDApOwotICAgIGNhaXJvX3NldF9vcGVyYXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09V
UkNFKTsKLSAgICBjYWlyb19wYWludChjci5nZXQoKSk7Ci0KLSAgICByZXR1cm4gbmV3c3VyZmFj
ZTsKLX0KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBJbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVm
ZmVyRGF0YShjb25zdCBJbnRTaXplJiBzaXplKQpAQCAtMTExLDcgKzk0LDcgQEAgYm9vbCBJbWFn
ZUJ1ZmZlcjo6ZHJhd3NVc2luZ0NvcHkoKSBjb25zdAogUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2VC
dWZmZXI6OmNvcHlJbWFnZSgpIGNvbnN0CiB7CiAgICAgLy8gQml0bWFwSW1hZ2Ugd2lsbCByZWxl
YXNlIHRoZSBwYXNzZWQgaW4gc3VyZmFjZSBvbiBkZXN0cnVjdGlvbgotICAgIHJldHVybiBCaXRt
YXBJbWFnZTo6Y3JlYXRlKGNvcHlTdXJmYWNlKG1fZGF0YS5tX3N1cmZhY2UpKTsKKyAgICByZXR1
cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShjb3B5Q2Fpcm9JbWFnZVN1cmZhY2UobV9kYXRhLm1fc3Vy
ZmFjZSkubGVha1JlZigpKTsKIH0KIAogdm9pZCBJbWFnZUJ1ZmZlcjo6Y2xpcChHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgbWFza1JlY3QpIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3Bw
CmluZGV4IGNlN2Q4YjI2YmExOGYwNjNiMDE1ZjViZWUzYThkNDkyM2I4ZDU2YmUuLmIwYmIxOGNl
MThkYTAzYzBmYTgwZGE1MGY0Yjk1YjYwNGU0ZjJlM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCkBAIC0xMTMsOSAr
MTEzLDYgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgZHN0LCBjb25zdCBGbG8KICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIEludFNpemUgc2VsZlNpemUgPSBzaXplKCk7Ci0KLSAgICBjYWlyb190KiBjciA9IGNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOwogICAgIGNvbnRleHQtPnNhdmUoKTsKIAog
ICAgIC8vIFNldCB0aGUgY29tcG9zaXRpbmcgb3BlcmF0aW9uLgpAQCAtMTIzLDM5ICsxMjAsNyBA
QCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsbwogICAgICAgICBjb250ZXh0LT5zZXRDb21wb3NpdGVP
cGVyYXRpb24oQ29tcG9zaXRlQ29weSk7CiAgICAgZWxzZQogICAgICAgICBjb250ZXh0LT5zZXRD
b21wb3NpdGVPcGVyYXRpb24ob3ApOwotCi0gICAgLy8gSWYgd2UncmUgZHJhd2luZyBhIHN1YiBw
b3J0aW9uIG9mIHRoZSBpbWFnZSBvciBzY2FsaW5nIHRoZW4gY3JlYXRlCi0gICAgLy8gYSBwYXR0
ZXJuIHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBpbWFnZSBhbmQgZHJhdyB0aGUgdHJhbnNmb3JtZWQg
cGF0dGVybi4KLSAgICAvLyBUZXN0IHVzaW5nIGV4YW1wbGUgc2l0ZSBhdCBodHRwOi8vd3d3Lm1l
eWVyd2ViLmNvbS9lcmljL2Nzcy9lZGdlL2NvbXBsZXhzcGlyYWwvZGVtby5odG1sCi0gICAgY2Fp
cm9fcGF0dGVybl90KiBwYXR0ZXJuID0gY2Fpcm9fcGF0dGVybl9jcmVhdGVfZm9yX3N1cmZhY2Uo
aW1hZ2UpOwotCi0gICAgY2Fpcm9fcGF0dGVybl9zZXRfZXh0ZW5kKHBhdHRlcm4sIENBSVJPX0VY
VEVORF9QQUQpOwotCi0gICAgZmxvYXQgc2NhbGVYID0gc3JjUmVjdC53aWR0aCgpIC8gZHN0UmVj
dC53aWR0aCgpOwotICAgIGZsb2F0IHNjYWxlWSA9IHNyY1JlY3QuaGVpZ2h0KCkgLyBkc3RSZWN0
LmhlaWdodCgpOwotICAgIGNhaXJvX21hdHJpeF90IG1hdHJpeCA9IHsgc2NhbGVYLCAwLCAwLCBz
Y2FsZVksIHNyY1JlY3QueCgpLCBzcmNSZWN0LnkoKSB9OwotICAgIGNhaXJvX3BhdHRlcm5fc2V0
X21hdHJpeChwYXR0ZXJuLCAmbWF0cml4KTsKLQotICAgIENvbnRleHRTaGFkb3cqIHNoYWRvdyA9
IGNvbnRleHQtPmNvbnRleHRTaGFkb3coKTsKLSAgICBBU1NFUlQoc2hhZG93KTsKLSAgICBpZiAo
c2hhZG93LT5tX3R5cGUgIT0gQ29udGV4dFNoYWRvdzo6Tm9TaGFkb3cpIHsKLSAgICAgICAgY2Fp
cm9fdCogc2hhZG93Q29udGV4dCA9IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcihjb250ZXh0LCBk
c3RSZWN0KTsKLSAgICAgICAgaWYgKHNoYWRvd0NvbnRleHQpIHsKLSAgICAgICAgICAgIGNhaXJv
X3RyYW5zbGF0ZShzaGFkb3dDb250ZXh0LCBkc3RSZWN0LngoKSwgZHN0UmVjdC55KCkpOwotICAg
ICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZShzaGFkb3dDb250ZXh0LCBwYXR0ZXJuKTsKLSAgICAg
ICAgICAgIGNhaXJvX3JlY3RhbmdsZShzaGFkb3dDb250ZXh0LCAwLCAwLCBkc3RSZWN0LndpZHRo
KCksIGRzdFJlY3QuaGVpZ2h0KCkpOwotICAgICAgICAgICAgY2Fpcm9fZmlsbChzaGFkb3dDb250
ZXh0KTsKLSAgICAgICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIoY29udGV4dCk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICAvLyBEcmF3IHRoZSBpbWFnZS4KLSAgICBjYWlyb190cmFuc2xh
dGUoY3IsIGRzdFJlY3QueCgpLCBkc3RSZWN0LnkoKSk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZShj
ciwgcGF0dGVybik7Ci0gICAgY2Fpcm9fcGF0dGVybl9kZXN0cm95KHBhdHRlcm4pOwotICAgIGNh
aXJvX3JlY3RhbmdsZShjciwgMCwgMCwgZHN0UmVjdC53aWR0aCgpLCBkc3RSZWN0LmhlaWdodCgp
KTsKLSAgICBjYWlyb19jbGlwKGNyKTsKLSAgICBjYWlyb19wYWludF93aXRoX2FscGhhKGNyLCBj
b250ZXh0LT5nZXRBbHBoYSgpKTsKKyAgICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJh
d1N1cmZhY2VUb0NvbnRleHQoaW1hZ2UsIGRzdFJlY3QsIHNyY1JlY3QsIGNvbnRleHQpOwogCiAg
ICAgY29udGV4dC0+cmVzdG9yZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUNvbnRleHRDYWlyby5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUNvbnRleHRDYWlyby5jcHAKaW5k
ZXggMDYxZWUwNmExM2NmMTUxZGYzMTA2YzAwYzdhZDM3ODEyMWI2NDM2Ni4uMjc1OGUzZDRhYTg5
YTRhNTJjZjQyYzE2Mjg5YWRiYzdmMDQxNGNkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1Db250ZXh0Q2Fpcm8uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtQ29udGV4dENhaXJv
LmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtQ29udGV4dENhaXJvLmgiCiAKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNp
bmNsdWRlIDxjYWlyby5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC04MSw1ICs4Miw0MCBA
QCB2b2lkIFBsYXRmb3JtQ29udGV4dENhaXJvOjpwdXNoSW1hZ2VNYXNrKGNhaXJvX3N1cmZhY2Vf
dCogc3VyZmFjZSwgY29uc3QgRmxvYXRSZQogICAgIGNhaXJvX2ZpbGwobV9jci5nZXQoKSk7CiB9
CiAKK3N0YXRpYyB2b2lkIGRyYXdQYXR0ZXJuVG9DYWlyb0NvbnRleHQoY2Fpcm9fdCogY3IsIGNh
aXJvX3BhdHRlcm5fdCogcGF0dGVybiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgZmxvYXQg
YWxwaGEpCit7CisgICAgY2Fpcm9fdHJhbnNsYXRlKGNyLCBkZXN0UmVjdC54KCksIGRlc3RSZWN0
LnkoKSk7CisgICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgcGF0dGVybik7CisgICAgY2Fpcm9fcmVj
dGFuZ2xlKGNyLCAwLCAwLCBkZXN0UmVjdC53aWR0aCgpLCBkZXN0UmVjdC5oZWlnaHQoKSk7Cisg
ICAgY2Fpcm9fY2xpcChjcik7CisgICAgY2Fpcm9fcGFpbnRfd2l0aF9hbHBoYShjciwgYWxwaGEp
OworfQorCit2b2lkIFBsYXRmb3JtQ29udGV4dENhaXJvOjpkcmF3U3VyZmFjZVRvQ29udGV4dChj
YWlyb19zdXJmYWNlX3QqIHN1cmZhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQoreworICAgIC8v
IElmIHdlJ3JlIGRyYXdpbmcgYSBzdWIgcG9ydGlvbiBvZiB0aGUgaW1hZ2Ugb3Igc2NhbGluZyB0
aGVuIGNyZWF0ZQorICAgIC8vIGEgcGF0dGVybiB0cmFuc2Zvcm1hdGlvbiBvbiB0aGUgaW1hZ2Ug
YW5kIGRyYXcgdGhlIHRyYW5zZm9ybWVkIHBhdHRlcm4uCisgICAgLy8gVGVzdCB1c2luZyBleGFt
cGxlIHNpdGUgYXQgaHR0cDovL3d3dy5tZXllcndlYi5jb20vZXJpYy9jc3MvZWRnZS9jb21wbGV4
c3BpcmFsL2RlbW8uaHRtbAorICAgIFJlZlB0cjxjYWlyb19wYXR0ZXJuX3Q+IHBhdHRlcm4gPSBh
ZG9wdFJlZihjYWlyb19wYXR0ZXJuX2NyZWF0ZV9mb3Jfc3VyZmFjZShzdXJmYWNlKSk7CisgICAg
Y2Fpcm9fcGF0dGVybl9zZXRfZXh0ZW5kKHBhdHRlcm4uZ2V0KCksIENBSVJPX0VYVEVORF9QQUQp
OworCisgICAgZmxvYXQgc2NhbGVYID0gc3JjUmVjdC53aWR0aCgpIC8gZGVzdFJlY3Qud2lkdGgo
KTsKKyAgICBmbG9hdCBzY2FsZVkgPSBzcmNSZWN0LmhlaWdodCgpIC8gZGVzdFJlY3QuaGVpZ2h0
KCk7CisgICAgY2Fpcm9fbWF0cml4X3QgbWF0cml4ID0geyBzY2FsZVgsIDAsIDAsIHNjYWxlWSwg
c3JjUmVjdC54KCksIHNyY1JlY3QueSgpIH07CisgICAgY2Fpcm9fcGF0dGVybl9zZXRfbWF0cml4
KHBhdHRlcm4uZ2V0KCksICZtYXRyaXgpOworCisgICAgQ29udGV4dFNoYWRvdyogc2hhZG93ID0g
Y29udGV4dC0+Y29udGV4dFNoYWRvdygpOworICAgIGlmIChzaGFkb3cgJiYgc2hhZG93LT5tX3R5
cGUgIT0gQ29udGV4dFNoYWRvdzo6Tm9TaGFkb3cpIHsKKyAgICAgICAgaWYgKGNhaXJvX3QqIHNo
YWRvd0NvbnRleHQgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIoY29udGV4dCwgZGVzdFJlY3Qp
KSB7CisgICAgICAgICAgICBkcmF3UGF0dGVyblRvQ2Fpcm9Db250ZXh0KHNoYWRvd0NvbnRleHQs
IHBhdHRlcm4uZ2V0KCksIGRlc3RSZWN0LCAxKTsKKyAgICAgICAgICAgIHNoYWRvdy0+ZW5kU2hh
ZG93TGF5ZXIoY29udGV4dCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjYWlyb19zYXZlKG1f
Y3IuZ2V0KCkpOworICAgIGRyYXdQYXR0ZXJuVG9DYWlyb0NvbnRleHQobV9jci5nZXQoKSwgcGF0
dGVybi5nZXQoKSwgZGVzdFJlY3QsIGNvbnRleHQtPmdldEFscGhhKCkpOworICAgIGNhaXJvX3Jl
c3RvcmUobV9jci5nZXQoKSk7Cit9CisKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1Db250
ZXh0Q2Fpcm8uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRm
b3JtQ29udGV4dENhaXJvLmgKaW5kZXggOTM3NDE3YWMwOTAwZGYyNzIwNmY1NzIwMTJhNDYxMTZh
NzRkYTAyMS4uZmRiMzRiOGM2YzZmZDhmOGIxZDc2ODYyYTZkZThmODhkYTIzN2Q1ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1Db250
ZXh0Q2Fpcm8uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Q
bGF0Zm9ybUNvbnRleHRDYWlyby5oCkBAIC02Niw2ICs2Niw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNhdmUoKTsKICAgICB2b2lkIHJlc3RvcmUoKTsKICAgICB2b2lkIHB1c2hJbWFnZU1hc2soY2Fp
cm9fc3VyZmFjZV90KiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdm9pZCBkcmF3U3VyZmFjZVRv
Q29udGV4dChjYWlyb19zdXJmYWNlX3QqLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIEdyYXBoaWNzQ29udGV4dCopOwogCiBwcml2YXRlOgogICAg
IFJlZlB0cjxjYWlyb190PiBtX2NyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDU2ZjE2MzdhZWVlODlhOWJhNWRi
N2I1NDJiMjFhN2Q1ZTgzOGI2ZDQuLjU0MjE1N2YxNWVmNzVjZTMxMzY3YTIzNjc3MWQ0YjdjYjIy
ZTUxNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMS0wNS0wNSAgQnJlbnQgRnVs
Z2hhbSAgPGJmdWxnaGFtQHdlYmtpdC5vcmc+IGFuZCBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5z
b25AaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBbQ2Fpcm9dW1dlYktpdDJdIEFkZCBhbiBpbXBsZW1lbnRhdGlvbiBvZiBTaGFyZWFi
bGVCaXRtYXAgZm9yIENhaXJvCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02MDI5MworCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IFJlbW92ZSBTaGFy
ZWFibGVCaXRtYXBHdGsgaW4gZmF2b3Igb2YgU2hhcmVhYmxlQml0bWFwQ2Fpcm8uCisgICAgICAg
ICogU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5oOiBBZGRlZCBhIGNvdXBsZSBDYWlyby1zcGVjaWZp
YyBkZWNsYXJhdGlvbnMuCisgICAgICAgICogU2hhcmVkL2NhaXJvL1NoYXJlYWJsZUJpdG1hcENh
aXJvLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpjcmVhdGVHcmFwaGlj
c0NvbnRleHQpOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpwYWlu
dCk6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZUNhaXJv
U3VyZmFjZSk6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OnJlbGVh
c2VTdXJmYWNlRGF0YSk6IEFkZGVkLgorCiAyMDExLTA1LTEwICBBZGFtIFJvYmVuICA8YXJvYmVu
QGFwcGxlLmNvbT4KIAogICAgICAgICBVc2UgRm9udFNtb290aGluZ0xldmVsV2luZG93cyBieSBk
ZWZhdWx0IG9uIFdpbmRvd3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxl
LmFtIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KaW5kZXggM2ZhNDRmZmRlY2IzMDhk
Njc4YTI5MTc3ZmM3MmY4NDQ1ZGQxNjc1ZC4uYzA5YTY5NDYwYjgxNjg0ZDBmOWU4M2MyYjc2Y2Ew
YWJkMmZmMmY3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KKysr
IGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KQEAgLTE4Miw3ICsxODIsNyBAQCBsaWJ3
ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01J
Tk9SX1ZFUlNJT05AX2xhX1NPVQogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9EcmF3aW5nQXJlYUlu
Zm8uaCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL0VkaXRvclN0YXRlLmggXAogCVNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9Gb250U21vb3RoaW5nTGV2ZWwuaCBcCi0JU291cmNlL1dlYktpdDIvU2hh
cmVkL2d0ay9TaGFyZWFibGVCaXRtYXBHdGsuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Y2Fpcm8vU2hhcmVhYmxlQml0bWFwQ2Fpcm8uY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Z3RrL05hdGl2ZVdlYktleWJvYXJkRXZlbnRHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvZ3RrL05hdGl2ZVdlYk1vdXNlRXZlbnRHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvZ3RrL05hdGl2ZVdlYldoZWVsRXZlbnRHdGsuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVCaXRtYXAuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9T
aGFyZWFibGVCaXRtYXAuaAppbmRleCA3MGYwZTY3OWYzMDYyMDhmOGNkMTdjMzEwYWU5MDVjNzlk
NjI3NGRhLi4yMjk0ZWRjMTgwNjYxMTBhYzI0Y2IxOWQ2Mzk2OWZhMWMzMjBhMWRmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmgKKysrIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5oCkBAIC0zNSw2ICszNSw4IEBACiAKICNp
ZiBVU0UoQ0cpCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2VsaWYgUExBVEZPUk0oQ0FJ
Uk8pCit0eXBlZGVmIHN0cnVjdCBfY2Fpcm9fc3VyZmFjZSBjYWlyb19zdXJmYWNlX3Q7IAogI2Vu
ZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTEwNSw2ICsxMDcsMTAgQEAgcHVibGljOgog
ICAgIC8vIFRoaXMgY3JlYXRlcyBhIENHSW1hZ2VSZWYgdGhhdCBkaXJlY3RseSByZWZlcmVuY2Vz
IHRoZSBzaGFyZWQgYml0bWFwIGRhdGEuCiAgICAgLy8gVGhpcyBpcyBvbmx5IHNhZmUgdG8gdXNl
IHdoZW4gd2Uga25vdyB0aGF0IHRoZSBjb250ZW50cyBvZiB0aGUgc2hhcmVhYmxlIGJpdG1hcCB3
b24ndCBjaGFuZ2UuCiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IG1ha2VDR0ltYWdlKCk7Cisj
ZWxpZiBVU0UoQ0FJUk8pCisgICAgLy8gVGhpcyBjcmVhdGVzIGEgQml0bWFwSW1hZ2UgdGhhdCBk
aXJlY3RseSByZWZlcmVuY2VzIHRoZSBzaGFyZWQgYml0bWFwIGRhdGEuCisgICAgLy8gVGhpcyBp
cyBvbmx5IHNhZmUgdG8gdXNlIHdoZW4gd2Uga25vdyB0aGF0IHRoZSBjb250ZW50cyBvZiB0aGUg
c2hhcmVhYmxlIGJpdG1hcCB3b24ndCBjaGFuZ2UuCisgICAgUGFzc1JlZlB0cjxjYWlyb19zdXJm
YWNlX3Q+IGNyZWF0ZUNhaXJvU3VyZmFjZSgpOwogI2VuZGlmCiAKIHByaXZhdGU6CkBAIC0xMTks
NiArMTI1LDEwIEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgcmVsZWFzZURhdGFQcm92aWRl
ckRhdGEodm9pZCogdHlwZWxlc3NCaXRtYXAsIGNvbnN0IHZvaWQqIHR5cGVsZXNzRGF0YSwgc2l6
ZV90KTsKICNlbmRpZgogCisjaWYgVVNFKENBSVJPKQorICAgIHN0YXRpYyB2b2lkIHJlbGVhc2VT
dXJmYWNlRGF0YSh2b2lkKiB0eXBlbGVzc0JpdG1hcCk7CisjZW5kaWYKKwogICAgIHZvaWQqIGRh
dGEoKSBjb25zdDsKICAgICBzaXplX3Qgc2l6ZUluQnl0ZXMoKSBjb25zdCB7IHJldHVybiBudW1C
eXRlc0ZvclNpemUobV9zaXplKTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvY2Fpcm8vU2hhcmVhYmxlQml0bWFwQ2Fpcm8uY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L2NhaXJvL1NoYXJlYWJsZUJpdG1hcENhaXJvLmNwcAppbmRleCBhNGU4ZTU1NzM5NDI3NDI1ZmQw
MGFlNzQ0MTdiYWMwODViZTBjNjExLi4xMzNmNjJmZjMxNTkyMzhjN2Q5NWI0Zjc5OGYxOGFhMmJi
ZWFkZTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2Fpcm8vU2hhcmVhYmxl
Qml0bWFwQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9jYWlyby9TaGFyZWFi
bGVCaXRtYXBDYWlyby5jcHAKQEAgLTEsNSArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MSBCcmVudCBGdWxnaGFtIDxiZnVsZ2hhbUB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDExIElnYWxpYSBTLkwuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDgg
KzI4LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFw
LmgiCiAKKyNpbmNsdWRlIDxXZWJDb3JlL0NhaXJvVXRpbGl0aWVzLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9HcmFwaGljc0NvbnRleHQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVk
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvbnRleHRDYWlyby5oPgogCiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtMzUsMTMgKzM5LDQwIEBAIG5hbWVzcGFjZSBXZWJLaXQg
ewogCiBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVH
cmFwaGljc0NvbnRleHQoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7
CisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gaW1hZ2UgPSBjcmVhdGVDYWlyb1N1cmZhY2Uo
KTsKKyAgICBSZWZQdHI8Y2Fpcm9fdD4gYml0bWFwQ29udGV4dCA9IGFkb3B0UmVmKGNhaXJvX2Ny
ZWF0ZShpbWFnZS5nZXQoKSkpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgR3JhcGhpY3NDb250
ZXh0KGJpdG1hcENvbnRleHQuZ2V0KCkpKTsKIH0KIAotdm9pZCBTaGFyZWFibGVCaXRtYXA6OnBh
aW50KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYpCit2
b2lkIFNoYXJlYWJsZUJpdG1hcDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBJbnRQb2ludCYgZHN0UG9pbnQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpCiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzdXJmYWNlID0gYWRv
cHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcio+KGRhdGEoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBSVJPX0ZP
Uk1BVF9BUkdCMzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fc2l6ZS53aWR0aCgpLCBt
X3NpemUuaGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fc2l6ZS53aWR0aCgp
ICogNCkpOworCisgICAgLy8gVGhpcyBjb3B5IGlzIG5vdCBjb3B5LW9uLXdyaXRlLCBzbyB0aGlz
IGlzIHByb2JhYmx5IHN1Yi1vcHRpbWFsLgorICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHN1
cmZhY2VDb3B5ID0gY29weUNhaXJvSW1hZ2VTdXJmYWNlKHN1cmZhY2UuZ2V0KCkpOworICAgIEZs
b2F0UmVjdCBkZXN0UmVjdChkc3RQb2ludCwgc3JjUmVjdC5zaXplKCkpOworICAgIGNvbnRleHQu
cGxhdGZvcm1Db250ZXh0KCktPmRyYXdTdXJmYWNlVG9Db250ZXh0KHN1cmZhY2VDb3B5LmdldCgp
LCBkZXN0UmVjdCwgc3JjUmVjdCwgJmNvbnRleHQpOworfQorCitQYXNzUmVmUHRyPGNhaXJvX3N1
cmZhY2VfdD4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVDYWlyb1N1cmZhY2UoKQoreworICAgIFJl
ZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9jcmVhdGVfZm9yX2RhdGEoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRhdGEoKSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDQUlST19GT1JNQVRfQVJHQjMyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fc2l6ZS53aWR0aCgpICogNCkpOworCisgICAgcmVmKCk7IC8vIEJhbGFu
Y2VkIGJ5IGRlcmVmIGluIHJlbGVhc2VTdXJmYWNlRGF0YS4KKyAgICBzdGF0aWMgY2Fpcm9fdXNl
cl9kYXRhX2tleV90IGRhdGFLZXk7CisgICAgY2Fpcm9fc3VyZmFjZV9zZXRfdXNlcl9kYXRhKGlt
YWdlLmdldCgpLCAmZGF0YUtleSwgdGhpcywgcmVsZWFzZVN1cmZhY2VEYXRhKTsKKyAgICByZXR1
cm4gaW1hZ2UucmVsZWFzZSgpOwogfQotICAgICAgICAKKwordm9pZCBTaGFyZWFibGVCaXRtYXA6
OnJlbGVhc2VTdXJmYWNlRGF0YSh2b2lkKiB0eXBlbGVzc0JpdG1hcCkKK3sKKyAgICBzdGF0aWNf
Y2FzdDxTaGFyZWFibGVCaXRtYXAqPih0eXBlbGVzc0JpdG1hcCktPmRlcmVmKCk7IC8vIEJhbGFu
Y2VkIGJ5IHJlZiBpbiBjcmVhdGVDYWlyb1N1cmZhY2UuCit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>