<?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>67050</bug_id>
          
          <creation_ts>2011-08-26 11:50:22 -0700</creation_ts>
          <short_desc>Skia&apos;s accel canvas implementation should use GrTexture, not DrawingBuffer</short_desc>
          <delta_ts>2011-08-29 11:16:58 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Stephen White">senorblanco</reporter>
          <assigned_to name="Stephen White">senorblanco</assigned_to>
          <cc>bsalomon</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>kbr</cc>
    
    <cc>nduca</cc>
    
    <cc>twiz</cc>
    
    <cc>vangelis</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>457685</commentid>
    <comment_count>0</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-08-26 11:50:22 -0700</bug_when>
    <thetext>Skia&apos;s accel canvas implementation should use GrTexture, not DrawingBuffer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457692</commentid>
    <comment_count>1</comment_count>
      <attachid>105388</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-08-26 12:05:59 -0700</bug_when>
    <thetext>Created attachment 105388
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457747</commentid>
    <comment_count>2</comment_count>
      <attachid>105388</attachid>
    <who name="Brian Salomon">bsalomon</who>
    <bug_when>2011-08-26 13:41:42 -0700</bug_when>
    <thetext>Comment on attachment 105388
Patch

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

Looks grrrrreat to me. Can we pull the GrContext stuff out of DrawingBuffer?

&gt; Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp:100
&gt; +                SkAutoTUnref&lt;GrTexture&gt; texture(gr-&gt;createUncachedTexture(desc, 0, 0));

Just a note: In the future we may want to change the GrContext API to hide whether textures are recycled internally. If canvases are created and destroyed we could get some benefit from recycling the backing textures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457887</commentid>
    <comment_count>3</comment_count>
      <attachid>105388</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-08-26 18:09:20 -0700</bug_when>
    <thetext>Comment on attachment 105388
Patch

There is a conflict between this patch and the ongoing work twiz is doing in https://bugs.webkit.org/show_bug.cgi?id=53201 to make WebGL layers use DrawingBuffer rather than having GraphicsContext3D vend a platform layer. I&apos;m of the opinion that we should standardize on DrawingBuffer as the abstraction between the compositor and accelerated content like WebGL and 2D canvas, because doing so would move a lot of framebuffer management code into WebKit, and make the only dependency between these layers and the compositor be the sharing of OpenGL resources between their contexts. For this reason it seems to me that this patch, which adds a dependency between Canvas2DLayerChromium and GraphicsContext3D, is not really the right direction to go. Am I misunderstanding the situation? Comments?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457889</commentid>
    <comment_count>4</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-08-26 18:17:47 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 105388 [details])
&gt; There is a conflict between this patch and the ongoing work twiz is doing in https://bugs.webkit.org/show_bug.cgi?id=53201 to make WebGL layers use DrawingBuffer rather than having GraphicsContext3D vend a platform layer. 

Don&apos;t worry; twiz knows what I&apos;m up to.  :)  His patch is currently on hold until the copy or share webgl/compositor interaction is worked out.  After this patch lands, it will leave DrawingBuffer free for WebGL use (no need for the canvas2d/webGL enum in twiz&apos;s patch).

&gt; I&apos;m of the opinion that we should standardize on DrawingBuffer as the abstraction between the compositor and accelerated content like WebGL and 2D canvas, because doing so would move a lot of framebuffer management code into WebKit, and make the only dependency between these layers and the compositor be the sharing of OpenGL resources between their contexts. For this reason it seems to me that this patch, which adds a dependency between Canvas2DLayerChromium and GraphicsContext3D, is not really the right direction to go. Am I misunderstanding the situation? Comments?

The goal here is to be able to defer creation of the stencil buffer until it&apos;s actually needed (e.g., on the first clipping call) in order to minimize VRAM usage.  That&apos;s much more easily done inside Skia (which knows when it needs the stencil buffer) than outside.  The other thing is that Ganesh already has its own classes for FBO creation, etc, and was just wrapping the FBO&apos;s created by DrawingBuffer.  Since this is platform/graphics/skia, it makes more sense to me to use the Skia (Ganesh) classes directly, IMHO.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457894</commentid>
    <comment_count>5</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-08-26 18:35:08 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 105388 [details] [details])
&gt; &gt; There is a conflict between this patch and the ongoing work twiz is doing in https://bugs.webkit.org/show_bug.cgi?id=53201 to make WebGL layers use DrawingBuffer rather than having GraphicsContext3D vend a platform layer. 
&gt; 
&gt; Don&apos;t worry; twiz knows what I&apos;m up to.  :)  His patch is currently on hold until the copy or share webgl/compositor interaction is worked out.  After this patch lands, it will leave DrawingBuffer free for WebGL use (no need for the canvas2d/webGL enum in twiz&apos;s patch).

OK, I was sure that you and twiz were on the same page, but wanted to clarify. We need to unblock him on the other patch.

&gt; &gt; I&apos;m of the opinion that we should standardize on DrawingBuffer as the abstraction between the compositor and accelerated content like WebGL and 2D canvas, because doing so would move a lot of framebuffer management code into WebKit, and make the only dependency between these layers and the compositor be the sharing of OpenGL resources between their contexts. For this reason it seems to me that this patch, which adds a dependency between Canvas2DLayerChromium and GraphicsContext3D, is not really the right direction to go. Am I misunderstanding the situation? Comments?
&gt; 
&gt; The goal here is to be able to defer creation of the stencil buffer until it&apos;s actually needed (e.g., on the first clipping call) in order to minimize VRAM usage.  That&apos;s much more easily done inside Skia (which knows when it needs the stencil buffer) than outside.  The other thing is that Ganesh already has its own classes for FBO creation, etc, and was just wrapping the FBO&apos;s created by DrawingBuffer.  Since this is platform/graphics/skia, it makes more sense to me to use the Skia (Ganesh) classes directly, IMHO.

OK, I see the reasoning. I am still not really sure that pushing the drawing buffer management for CanvasLayer2DChromium deeper into GraphicsContext3D is the best idea, but I&apos;m sure you guys know what you&apos;re doing and that we can revisit the issue later if necessary. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458205</commentid>
    <comment_count>6</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-08-29 07:15:20 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 105388 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=105388&amp;action=review
&gt; 
&gt; Looks grrrrreat to me. Can we pull the GrContext stuff out of DrawingBuffer?

Good idea.  Will do.

&gt; &gt; Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp:100
&gt; &gt; +                SkAutoTUnref&lt;GrTexture&gt; texture(gr-&gt;createUncachedTexture(desc, 0, 0));
&gt; 
&gt; Just a note: In the future we may want to change the GrContext API to hide whether textures are recycled internally. If canvases are created and destroyed we could get some benefit from recycling the backing textures.

Hmm.  So is there something I can change now in anticipation of that, or something we should revisit later?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458208</commentid>
    <comment_count>7</comment_count>
      <attachid>105488</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-08-29 07:31:47 -0700</bug_when>
    <thetext>Created attachment 105488
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458210</commentid>
    <comment_count>8</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-08-29 07:35:20 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Created an attachment (id=105488) [details]
&gt; Patch

Removed all Ganesh-related datatypes and calls from DrawingBuffer.

Reverted the change to GraphicsContext3D, since it was not correctly setting the context before flushing, and adding a makeContextCurrent() at that point seemed wrong.  Moved the code to Canvas2DLayerChromium::updateCompositorResources() instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458301</commentid>
    <comment_count>9</comment_count>
      <attachid>105488</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-08-29 11:12:17 -0700</bug_when>
    <thetext>Comment on attachment 105488
Patch

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

Revision looks good to me.

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:74
&gt; +            m_context-&gt;makeContextCurrent();

According to current semantics this could actually go into the #if USE(SKIA) block, because it only has an effect when interacting with external code (like Ganesh) using the GC3D&apos;s underlying OpenGL context. The call to m_context-&gt;flush() below will implicitly make the context current.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458306</commentid>
    <comment_count>10</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-08-29 11:16:58 -0700</bug_when>
    <thetext>Committed r93988: &lt;http://trac.webkit.org/changeset/93988&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105388</attachid>
            <date>2011-08-26 12:05:59 -0700</date>
            <delta_ts>2011-08-29 07:31:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67050-20110826150558.patch</filename>
            <type>text/plain</type>
            <size>20063</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzOTAwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjAgQEAKKzIwMTEtMDgtMjYgIFN0ZXBoZW4g
V2hpdGUgIDxzZW5vcmJsYW5jb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU2tpYSdzIGFjY2Vs
IGNhbnZhcyBpbXBsZW1lbnRhdGlvbiBzaG91bGQgdXNlIEdyVGV4dHVyZSwgbm90IERyYXdpbmdC
dWZmZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3
MDUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ292
ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52
YXMyRExheWVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExh
eWVyQ2hyb21pdW06OkNhbnZhczJETGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXMyRExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCk6CisgICAgICAgIENyZWF0ZSBDYW52
YXMyRExheWVyQ2hyb21pdW0gd2l0aCBhIEdyYXBoaWNzQ29udGV4dDNELCBub3QgYQorICAgICAg
ICBEcmF3aW5nQnVmZmVyLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVt
Ojp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAgICAgICAgRmx1c2ggdGhlIEdyYXBoaWNz
Q29udGV4dDNEIG9uIGNvbXBvc2l0b3IgdXBkYXRlICh3aGljaCB3aWxsIGZsdXNoCisgICAgICAg
IHRoZSBHckNvbnRleHQgaW4gdHVybikuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmg6CisgICAgICAgIFB1dCB0ZXh0dXJlSWQoKSBi
YWNrIG9uIHRoZSBiYXNlIGNsYXNzIChDYW52YXNMYXllckNocm9taXVtKSBhbmQKKyAgICAgICAg
ZGUtdmlydHVhbGl6ZSBpdC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
YW52YXNMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hy
b21pdW06OkNhbnZhc0xheWVyQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c0xheWVyQ2hyb21pdW06OnRleHR1cmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNMYXll
ckNocm9taXVtOjpzZXRUZXh0dXJlSWQpOgorICAgICAgICBNb3ZlIG1fdGV4dHVyZUlkIGZyb20g
V2ViR0xMYXllckNocm9taXVtLCBzaW5jZSBjYW52YXMyRCBub3cgdXNlcworICAgICAgICBpdCB0
b28uICBQcm92aWRlIGdldHRlcnMgYW5kIHNldHRlcnMuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRyYXdpbmdCdWZmZXI6On5EcmF3aW5nQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRy
YXdpbmdCdWZmZXI6OnBsYXRmb3JtTGF5ZXIpOgorICAgICAgICBSZW1vdmUgQ2FudmFzMkRMYXll
ckNocm9taXVtIGZyb20gRHJhd2luZ0J1ZmZlciwgc2luY2UgdGhpcyBjbGFzcworICAgICAgICBk
b2Vzbid0IG93biBpdCBhbnltb3JlIChJbWFnZUJ1ZmZlcltTa2lhXSBkb2VzKS4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwOgor
ICAgICAgICBSZW1vdmUgYSB1c2VsZXNzICNpbmNsdWRlLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlQnVmZmVyRGF0YVNraWEuaDoKKyAgICAgICAgQWRkIG93bmVy
c2hpcCBvZiB0aGUgQ2FudmFzMkRMYXllckNocm9taXVtLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTExheWVyQ2hyb21pdW06OldlYkdMTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmg6CisgICAgICAgIFJl
bW92ZSBhbGwgdGV4dHVyZSBJRCBzdHVmZiAobm93IG9uIGJhc2UgY2xhc3MpLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmg6CisgICAgICAgIFJlbW92ZSBD
YW52YXMyRExheWVyQ2hyb21pdW0gZnJvbSBEcmF3aW5nQnVmZmVyLCBzaW5jZSB0aGlzIGNsYXNz
CisgICAgICAgIGRvZXNuJ3Qgb3duIGl0IGFueW1vcmUgKEltYWdlQnVmZmVyW1NraWFdIGRvZXMp
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcik6CisgICAgICAgIE9u
IGFjY2VsZXJhdGVkIGNyZWF0aW9uLCBjcmVhdGUgYSBHclRleHR1cmUgaW5zdGVhZCBvZiBhCisg
ICAgICAgIERyYXdpbmdCdWZmZXIuICBJZiBhbGwgaXMgY29vbCwgY3JlYXRlIGFuZCBzZXQgdGhl
IFNrR3B1RGV2aWNlIGhlcmUsCisgICAgICAgIGFuZCBjcmVhdGUgYSBDYW52YXMyRExheWVyQ2hy
b21pdW0gcGxhdGZvcm0gbGF5ZXIuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cGxh
dGZvcm1MYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNv
bnRleHRTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OnNl
dEdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1Bs
YXRmb3JtQ29udGV4dFNraWEuaDoKKyAgICAgICAgUmVtb3ZlIGFsbCBHckNvbnRleHQgY3JlYXRp
b24gYW5kIERyYXdpbmdCdWZmZXIgInNjcmFwaW5nIiBmcm9tIAorICAgICAgICBQbGF0Zm9ybUNv
bnRleHRTa2lhOjpzZXRHcmFwaGljc0NvbnRleHQzRCgpLiAgVGhpcyBpcyBoYW5kbGVkIGluCisg
ICAgICAgIHRoZSBJbWFnZUJ1ZmZlciBjb25zdHJ1Y3RvciBpbnN0ZWFkLgorCiAyMDExLTA4LTI2
ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBbTWFjXSBVc2UgdGhl
IHByb2dyZXNzIGN1cnNvciBpbnN0ZWFkIG9mIHRoZSB3cmlzdHdhdGNoIGZvciBDU1MgIndhaXQi
IGN1cnNvcgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q2FudmFzMkRMYXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCShyZXZp
c2lvbiA5MzkwMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDIxICszNCwx
OSBAQAogCiAjaW5jbHVkZSAiQ2FudmFzMkRMYXllckNocm9taXVtLmgiCiAKLSNpbmNsdWRlICJE
cmF3aW5nQnVmZmVyLmgiCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1
bS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8Q2FudmFzMkRMYXllckNo
cm9taXVtPiBDYW52YXMyRExheWVyQ2hyb21pdW06OmNyZWF0ZShEcmF3aW5nQnVmZmVyKiBkcmF3
aW5nQnVmZmVyLCBHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQorUGFzc1JlZlB0cjxDYW52
YXMyRExheWVyQ2hyb21pdW0+IENhbnZhczJETGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0KQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzMkRM
YXllckNocm9taXVtKGRyYXdpbmdCdWZmZXIsIG93bmVyKSk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDYW52YXMyRExheWVyQ2hyb21pdW0oY29udGV4dCkpOwogfQogCi1DYW52YXMyRExheWVy
Q2hyb21pdW06OkNhbnZhczJETGF5ZXJDaHJvbWl1bShEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVm
ZmVyLCBHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQotICAgIDogQ2FudmFzTGF5ZXJDaHJv
bWl1bShvd25lcikKLSAgICAsIG1fZHJhd2luZ0J1ZmZlcihkcmF3aW5nQnVmZmVyKQorQ2FudmFz
MkRMYXllckNocm9taXVtOjpDYW52YXMyRExheWVyQ2hyb21pdW0oR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQpCisgICAgOiBDYW52YXNMYXllckNocm9taXVtKDApCisgICAgLCBtX2NvbnRleHQo
Y29udGV4dCkKIHsKIH0KIApAQCAtNTgsMzIgKzU2LDIxIEBAIENhbnZhczJETGF5ZXJDaHJvbWl1
bTo6fkNhbnZhczJETGF5ZXJDaHIKIAogYm9vbCBDYW52YXMyRExheWVyQ2hyb21pdW06OmRyYXdz
Q29udGVudCgpIGNvbnN0CiB7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQ7Ci0gICAg
cmV0dXJuIChtX2RyYXdpbmdCdWZmZXIKLSAgICAgICAgICAgICYmIChjb250ZXh0ID0gbV9kcmF3
aW5nQnVmZmVyLT5ncmFwaGljc0NvbnRleHQzRCgpLmdldCgpKQotICAgICAgICAgICAgJiYgKGNv
bnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpID09IEdy
YXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikpOworICAgIHJldHVybiAobV9jb250ZXh0CisgICAg
ICAgICAgICAmJiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRT
dGF0dXNBUkIoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpKTsKIH0KIAogdm9pZCBD
YW52YXMyRExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3ND
b250ZXh0M0QqKQogewogICAgIGlmICghbV9jb250ZW50c0RpcnR5IHx8ICFkcmF3c0NvbnRlbnQo
KSkKICAgICAgICAgcmV0dXJuOwotICAgIC8vIFVwZGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIHRl
eHR1cmUgdXNlZCBieSB0aGUgY29tcG9zaXRvci4KKwogICAgIGlmIChtX2NvbnRlbnRzRGlydHkp
IHsKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5wdWJsaXNoVG9QbGF0Zm9ybUxheWVyKCk7Cisg
ICAgICAgIGlmIChtX2NvbnRleHQpCisgICAgICAgICAgICBtX2NvbnRleHQtPmZsdXNoKCk7CiAg
ICAgICAgIG1fY29udGVudHNEaXJ0eSA9IGZhbHNlOwogICAgIH0KIH0KIAotdW5zaWduZWQgQ2Fu
dmFzMkRMYXllckNocm9taXVtOjp0ZXh0dXJlSWQoKSBjb25zdAotewotICAgIHJldHVybiBtX2Ry
YXdpbmdCdWZmZXIgPyBtX2RyYXdpbmdCdWZmZXItPnBsYXRmb3JtQ29sb3JCdWZmZXIoKSA6IDA7
Ci19Ci0KLXZvaWQgQ2FudmFzMkRMYXllckNocm9taXVtOjpzZXREcmF3aW5nQnVmZmVyKERyYXdp
bmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIpCi17Ci0gICAgbV9kcmF3aW5nQnVmZmVyID0gZHJhd2lu
Z0J1ZmZlcjsKLX0KLQogfQogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJE
TGF5ZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA5MzkwMCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5
ZXJDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwyMyArMzgsMjEgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBEcmF3aW5nQnVmZmVyOworY2xhc3MgR3JhcGhpY3NDb250
ZXh0M0Q7CiAKIC8vIEEgbGF5ZXIgY29udGFpbmluZyBhbiBhY2NlbGVyYXRlZCAyZCBjYW52YXMK
IGNsYXNzIENhbnZhczJETGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBDYW52YXNMYXllckNocm9taXVt
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXMyRExheWVyQ2hyb21pdW0+
IGNyZWF0ZShEcmF3aW5nQnVmZmVyKiwgR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzMkRMYXllckNocm9taXVtPiBjcmVhdGUoR3JhcGhp
Y3NDb250ZXh0M0QqKTsKICAgICB2aXJ0dWFsIH5DYW52YXMyRExheWVyQ2hyb21pdW0oKTsKICAg
ICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqKTsKIAogICAgIHZvaWQg
c2V0VGV4dHVyZUNoYW5nZWQoKTsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIHRleHR1cmVJZCgpIGNv
bnN0OwotICAgIHZvaWQgc2V0RHJhd2luZ0J1ZmZlcihEcmF3aW5nQnVmZmVyKik7CiAKIHByaXZh
dGU6Ci0gICAgZXhwbGljaXQgQ2FudmFzMkRMYXllckNocm9taXVtKERyYXdpbmdCdWZmZXIqLCBH
cmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKLSAgICBEcmF3aW5nQnVmZmVyKiBtX2RyYXdp
bmdCdWZmZXI7CisgICAgZXhwbGljaXQgQ2FudmFzMkRMYXllckNocm9taXVtKEdyYXBoaWNzQ29u
dGV4dDNEKik7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKIH07CiAKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVy
Q2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA5MzkwMCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hy
b21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBAIENhbnZhc0xheWVyQ2hy
b21pdW06OkNhbnZhc0xheWVyQ2hyb21pdW0KICAgICA6IExheWVyQ2hyb21pdW0ob3duZXIpCiAg
ICAgLCBtX2hhc0FscGhhKHRydWUpCiAgICAgLCBtX3ByZW11bHRpcGxpZWRBbHBoYSh0cnVlKQor
ICAgICwgbV90ZXh0dXJlSWQoMCkKIHsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hy
b21pdW0uaAkocmV2aXNpb24gOTM5MDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2
LDE1ICs0NiwxNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPENDTGF5ZXJJbXBs
PiBjcmVhdGVDQ0xheWVySW1wbCgpOwogCiAgICAgdmlydHVhbCB2b2lkIHB1c2hQcm9wZXJ0aWVz
VG8oQ0NMYXllckltcGwqKTsKKyAgICB1bnNpZ25lZCB0ZXh0dXJlSWQoKSBjb25zdCB7IHJldHVy
biBtX3RleHR1cmVJZDsgfQorICAgIHZvaWQgc2V0VGV4dHVyZUlkKHVuc2lnbmVkIHRleHR1cmVJ
ZCkgeyBtX3RleHR1cmVJZCA9IHRleHR1cmVJZDsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGlj
aXQgQ2FudmFzTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKIAot
ICAgIHZpcnR1YWwgdW5zaWduZWQgdGV4dHVyZUlkKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwg
Y29uc3QgY2hhciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiAiQ2FudmFzTGF5
ZXIiOyB9CiAKICAgICBib29sIG1faGFzQWxwaGE7CiAgICAgYm9vbCBtX3ByZW11bHRpcGxpZWRB
bHBoYTsKKyAgICB1bnNpZ25lZCBtX3RleHR1cmVJZDsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcAkocmV2aXNpb24gOTM5MDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMCArMzcsNiBAQAogI2luY2x1ZGUgIkdyQ29udGV4
dC5oIgogI2VuZGlmCiAKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0jaW5jbHVk
ZSAiQ2FudmFzMkRMYXllckNocm9taXVtLmgiCi0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBzdGF0aWMgdW5zaWduZWQgZ2VuZXJhdGVDb2xvclRleHR1cmUoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUpCkBAIC05MSwxMSArODcsNiBAQCBEcmF3
aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKEdyYXBoaWNzQ29uCiAKIERyYXdpbmdCdWZmZXI6On5E
cmF3aW5nQnVmZmVyKCkKIHsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAg
aWYgKG1fcGxhdGZvcm1MYXllcikKLSAgICAgICAgbV9wbGF0Zm9ybUxheWVyLT5zZXREcmF3aW5n
QnVmZmVyKDApOwotI2VuZGlmCi0KICAgICBpZiAoIW1fY29udGV4dCkKICAgICAgICAgcmV0dXJu
OwogCkBAIC0xMjIsOSArMTEzLDcgQEAgdm9pZCBEcmF3aW5nQnVmZmVyOjpwdWJsaXNoVG9QbGF0
Zm9ybUxheQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIFBsYXRmb3JtTGF5ZXIq
IERyYXdpbmdCdWZmZXI6OnBsYXRmb3JtTGF5ZXIoKQogewotICAgIGlmICghbV9wbGF0Zm9ybUxh
eWVyKQotICAgICAgICBtX3BsYXRmb3JtTGF5ZXIgPSBDYW52YXMyRExheWVyQ2hyb21pdW06OmNy
ZWF0ZSh0aGlzLCAwKTsKLSAgICByZXR1cm4gbV9wbGF0Zm9ybUxheWVyLmdldCgpOworICAgIHJl
dHVybiAwOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9t
aXVtLmNwcAkocmV2aXNpb24gOTM5MDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Nyw3ICs0Nyw2IEBACiAKICNpbmNsdWRlICJDYW52YXMyRExheWVyQ2hyb21pdW0uaCIKICNp
bmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIu
aCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
ICNpbmNsdWRlICJJbWFnZS5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vSW1hZ2VCdWZmZXJEYXRhU2tpYS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQnVmZmVyRGF0YVNraWEuaAko
cmV2aXNpb24gOTM5MDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZUJ1ZmZlckRhdGFTa2lhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDIwICsyOCwy
NSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKIAogI2luY2x1ZGUgInNraWEvZXh0L3Bs
YXRmb3JtX2NhbnZhcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCitjbGFzcyBDYW52YXMyRExheWVyQ2hyb21pdW07CisjZW5kaWYK
KwogY2xhc3MgSW1hZ2VCdWZmZXJEYXRhIHsKIHB1YmxpYzoKICAgICBJbWFnZUJ1ZmZlckRhdGEo
Y29uc3QgSW50U2l6ZSYpOwogCiAgICAgT3duUHRyPFNrQ2FudmFzPiBtX2NhbnZhczsKICAgICBQ
bGF0Zm9ybUNvbnRleHRTa2lhIG1fcGxhdGZvcm1Db250ZXh0OwotICAgIFJlZlB0cjxEcmF3aW5n
QnVmZmVyPiBtX2RyYXdpbmdCdWZmZXI7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQorICAgIFJlZlB0cjxDYW52YXMyRExheWVyQ2hyb21pdW0+IG1fcGxhdGZvcm1MYXllcjsKKyNl
bmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExh
eWVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA5MzkwMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDcgKzQ5LDYgQEAgUGFzc1JlZlB0cjxXZWJHTExheWVyQ2hyb21pdW0+IFdlYkdM
TGF5ZQogV2ViR0xMYXllckNocm9taXVtOjpXZWJHTExheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXll
ckNocm9taXVtKiBvd25lcikKICAgICA6IENhbnZhc0xheWVyQ2hyb21pdW0ob3duZXIpCiAgICAg
LCBtX2NvbnRleHQoMCkKLSAgICAsIG1fdGV4dHVyZUlkKDApCiAgICAgLCBtX3RleHR1cmVDaGFu
Z2VkKHRydWUpCiAgICAgLCBtX2NvbnRleHRTdXBwb3J0c1JhdGVMaW1pdGluZ0V4dGVuc2lvbihm
YWxzZSkKICAgICAsIG1fcmF0ZUxpbWl0aW5nVGltZXIodGhpcywgJldlYkdMTGF5ZXJDaHJvbWl1
bTo6cmF0ZUxpbWl0Q29udGV4dCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oCShy
ZXZpc2lvbiA5MzkwMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCwxNCArNjQsMTIg
QEAgcHJpdmF0ZToKICAgICBleHBsaWNpdCBXZWJHTExheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXll
ckNocm9taXVtKiBvd25lcik7CiAgICAgZnJpZW5kIGNsYXNzIFdlYkdMTGF5ZXJDaHJvbWl1bVJh
dGVMaW1pdFRhc2s7CiAKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIHRleHR1cmVJZCgpIGNvbnN0IHsg
cmV0dXJuIG1fdGV4dHVyZUlkOyB9CiAgICAgdm9pZCByYXRlTGltaXRDb250ZXh0KFRpbWVyPFdl
YkdMTGF5ZXJDaHJvbWl1bT4qKTsKIAogICAgIC8vIEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9y
bUxheWVyIGhhcyBhIHNpZGUtZWZmZWN0IG9mIGFzc2lnbmluZyBpdHNlbGYKICAgICAvLyB0byB0
aGUgbGF5ZXIuIEJlY2F1c2Ugb2YgdGhhdCBHcmFwaGljc0NvbnRleHQzRCdzIGRlc3RydWN0b3Ig
d2lsbCByZXNldAogICAgIC8vIGxheWVyJ3MgY29udGV4dCB0byAwLgogICAgIEdyYXBoaWNzQ29u
dGV4dDNEKiBtX2NvbnRleHQ7Ci0gICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7CiAgICAgYm9vbCBt
X3RleHR1cmVDaGFuZ2VkOwogICAgIGJvb2wgbV9jb250ZXh0U3VwcG9ydHNSYXRlTGltaXRpbmdF
eHRlbnNpb247CiAgICAgVGltZXI8V2ViR0xMYXllckNocm9taXVtPiBtX3JhdGVMaW1pdGluZ1Rp
bWVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdC
dWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvRHJhd2luZ0J1ZmZlci5oCShyZXZpc2lvbiA5MzkwMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEy
MCwxMiArMTIwLDYgQEAgcHJpdmF0ZToKICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fbXVsdGlzYW1w
bGVGQk87CiAgICAgUGxhdGZvcm0zRE9iamVjdCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXI7CiAK
LSNpZiBQTEFURk9STShDSFJPTUlVTSkKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
Ci0gICAgUmVmUHRyPENhbnZhczJETGF5ZXJDaHJvbWl1bT4gbV9wbGF0Zm9ybUxheWVyOwotI2Vu
ZGlmCi0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKE1BQykKICAgICBSZXRhaW5QdHI8V2ViR0xMYXll
cj4gbV9wbGF0Zm9ybUxheWVyOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCShyZXZp
c2lvbiA5MzkwMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1h
Z2VCdWZmZXJTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsOCBAQAogI2luY2x1
ZGUgIkJhc2U2NC5oIgogI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCiAjaW5jbHVkZSAiQml0bWFw
SW1hZ2VTaW5nbGVGcmFtZVNraWEuaCIKLSNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCisjaW5j
bHVkZSAiQ2FudmFzMkRMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiR3JDb250ZXh0LmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5j
bHVkZSAiSlBFR0ltYWdlRW5jb2Rlci5oIgpAQCAtNDUsNiArNDYsNyBAQAogI2luY2x1ZGUgIlBs
YXRmb3JtQ29udGV4dFNraWEuaCIKICNpbmNsdWRlICJTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5o
IgogI2luY2x1ZGUgIlNrQ29sb3JQcml2LmgiCisjaW5jbHVkZSAiU2tHcHVEZXZpY2UuaCIKICNp
bmNsdWRlICJTa2lhVXRpbHMuaCIKIAogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpA
QCAtODMsMTIgKzg1LDI5IEBAIEltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXpl
JiAKICAgICAvLyBjb2xvci4gQ2FuIHdlIGhhdmUgYW5vdGhlciB3YXkgdG8gbWFuYWdlIHRoaXM/
CiAgICAgbV9kYXRhLm1fY2FudmFzLT5kcmF3QVJHQigwLCAwLCAwLCAwLCBTa1hmZXJtb2RlOjpr
Q2xlYXJfTW9kZSk7CiAgICAgaWYgKHJlbmRlcmluZ01vZGUgPT0gQWNjZWxlcmF0ZWQpIHsKLSAg
ICAgICAgbV9hY2NlbGVyYXRlUmVuZGVyaW5nID0gdHJ1ZTsKICAgICAgICAgR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQzRCA9IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoMCk7CiAg
ICAgICAgIGlmIChjb250ZXh0M0QpIHsKLSAgICAgICAgICAgIG1fZGF0YS5tX2RyYXdpbmdCdWZm
ZXIgPSBjb250ZXh0M0QtPmNyZWF0ZURyYXdpbmdCdWZmZXIoc2l6ZSk7Ci0gICAgICAgICAgICBp
ZiAobV9kYXRhLm1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgICAgICAgICBtX2RhdGEubV9wbGF0
Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0M0QoY29udGV4dDNELCBtX2RhdGEubV9kcmF3
aW5nQnVmZmVyLmdldCgpKTsKKyAgICAgICAgICAgIGNvbnRleHQzRC0+bWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgICAgICAgICBHckNvbnRleHQqIGdyID0gY29udGV4dDNELT5nckNvbnRleHQo
KTsKKyAgICAgICAgICAgIGlmIChncikgeworICAgICAgICAgICAgICAgIGdyLT5yZXNldENvbnRl
eHQoKTsKKyAgICAgICAgICAgICAgICBHclRleHR1cmVEZXNjIGRlc2M7CisgICAgICAgICAgICAg
ICAgZGVzYy5mRmxhZ3MgPSBrUmVuZGVyVGFyZ2V0X0dyVGV4dHVyZUZsYWdCaXQ7CisgICAgICAg
ICAgICAgICAgZGVzYy5mQUFMZXZlbCA9IGtOb25lX0dyQUFMZXZlbDsKKyAgICAgICAgICAgICAg
ICBkZXNjLmZXaWR0aCA9IHNpemUud2lkdGgoKTsKKyAgICAgICAgICAgICAgICBkZXNjLmZIZWln
aHQgPSBzaXplLmhlaWdodCgpOworICAgICAgICAgICAgICAgIGRlc2MuZkZvcm1hdCA9IGtSR0JB
Xzg4ODhfR3JQaXhlbENvbmZpZzsKKyAgICAgICAgICAgICAgICBTa0F1dG9UVW5yZWY8R3JUZXh0
dXJlPiB0ZXh0dXJlKGdyLT5jcmVhdGVVbmNhY2hlZFRleHR1cmUoZGVzYywgMCwgMCkpOworICAg
ICAgICAgICAgICAgIGlmICh0ZXh0dXJlLmdldCgpKSB7CisgICAgICAgICAgICAgICAgICAgIG1f
ZGF0YS5tX2NhbnZhcy0+c2V0RGV2aWNlKG5ldyBTa0dwdURldmljZShnciwgdGV4dHVyZS5nZXQo
KSkpLT51bnJlZigpOworICAgICAgICAgICAgICAgICAgICBtX2NvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpLT5zZXRHcmFwaGljc0NvbnRleHQzRChjb250ZXh0M0QpOworICAgICAgICAgICAgICAg
ICAgICBtX2FjY2VsZXJhdGVSZW5kZXJpbmcgPSB0cnVlOworI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKyAgICAgICAgICAgICAgICAgICAgbV9kYXRhLm1fcGxhdGZvcm1MYXllciA9
IENhbnZhczJETGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKGNvbnRleHQzRCk7CisgICAgICAgICAgICAg
ICAgICAgIG1fZGF0YS5tX3BsYXRmb3JtTGF5ZXItPnNldFRleHR1cmVJZCh0ZXh0dXJlLmdldCgp
LT5nZXRUZXh0dXJlSGFuZGxlKCkpOworI2VuZGlmCisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkBAIC0zODAsNyArMzk5LDcgQEAgU3RyaW5nIElt
YWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaQogCiBQbGF0Zm9ybUxheWVyKiBJbWFnZUJ1
ZmZlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZGF0YS5tX2RyYXdp
bmdCdWZmZXIgPyBtX2RhdGEubV9kcmF3aW5nQnVmZmVyLT5wbGF0Zm9ybUxheWVyKCkgOiAwOwor
ICAgIHJldHVybiBtX2RhdGEubV9wbGF0Zm9ybUxheWVyLmdldCgpOwogfQogCiBTdHJpbmcgSW1h
Z2VEYXRhVG9EYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBjb25zdCBkb3VibGUqIHF1YWxpdHkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tp
YS5jcHAJKHJldmlzaW9uIDkzOTAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyAr
MzMsNiBAQAogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKIAogI2luY2x1ZGUgIkFm
ZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKICNpbmNsdWRlICJF
eHRlbnNpb25zM0QuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQzRC5oIgpAQCAtNjYwLDI4ICs2NTksOSBAQCB2b2lkIFBsYXRmb3JtQ29u
dGV4dFNraWE6OmFwcGx5QW50aUFsaWFzCiAgICAgbV9jYW52YXMtPnJlc3RvcmUoKTsKIH0KIAot
dm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCwgRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlcikKK3ZvaWQgUGxh
dGZvcm1Db250ZXh0U2tpYTo6c2V0R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQpCiB7CiAgICAgbV9ncHVDb250ZXh0ID0gY29udGV4dDsKLSNpZiBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKQotICAgIGlmIChjb250ZXh0ICYmIGRyYXdpbmdCdWZmZXIpIHsK
LSAgICAgICAgLy8gdXNlIHNraWEgZ3B1IHJlbmRlcmluZyBpZiBhdmFpbGFibGUKLSAgICAgICAg
R3JDb250ZXh0KiBnciA9IGNvbnRleHQtPmdyQ29udGV4dCgpOwotICAgICAgICBpZiAoZ3IpIHsK
LSAgICAgICAgICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgICAgICAgICAg
ZHJhd2luZ0J1ZmZlci0+YmluZCgpOwotCi0gICAgICAgICAgICBnci0+cmVzZXRDb250ZXh0KCk7
Ci0gICAgICAgICAgICBkcmF3aW5nQnVmZmVyLT5zZXRHckNvbnRleHQoZ3IpOwotCi0gICAgICAg
ICAgICBHclBsYXRmb3JtU3VyZmFjZURlc2MgZHJhd0J1ZkRlc2M7Ci0gICAgICAgICAgICBkcmF3
aW5nQnVmZmVyLT5nZXRHclBsYXRmb3JtU3VyZmFjZURlc2MoJmRyYXdCdWZEZXNjKTsKLSAgICAg
ICAgICAgIFNrQXV0b1RVbnJlZjxHclRleHR1cmU+IGRyYXdCdWZUZXgoc3RhdGljX2Nhc3Q8R3JU
ZXh0dXJlKj4oZ3ItPmNyZWF0ZVBsYXRmb3JtU3VyZmFjZShkcmF3QnVmRGVzYykpKTsKLSAgICAg
ICAgICAgIG1fY2FudmFzLT5zZXREZXZpY2UobmV3IFNrR3B1RGV2aWNlKGdyLCBkcmF3QnVmVGV4
LmdldCgpKSktPnVucmVmKCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9ncHVDb250
ZXh0ID0gMDsKLSAgICB9Ci0jZW5kaWYKIH0KIAogdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpt
YWtlR3JDb250ZXh0Q3VycmVudCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAkocmV2aXNp
b24gOTM5MDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRm
b3JtQ29udGV4dFNraWEuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNiBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBlbnVtIENvbXBvc2l0ZU9wZXJhdG9yOwotY2xhc3MgRHJhd2luZ0J1
ZmZlcjsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogY2xhc3MgVGV4dHVyZTsKIApAQCAtMTc5
LDcgKzE3OCw3IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0ltYWdlUmVzYW1wbGluZ0hpbnQoKSBj
b25zdDsKIAogICAgIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3B1Q29u
dGV4dDsgfQotICAgIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Qq
LCBEcmF3aW5nQnVmZmVyKik7CisgICAgdm9pZCBzZXRHcmFwaGljc0NvbnRleHQzRChHcmFwaGlj
c0NvbnRleHQzRCopOwogICAgIHZvaWQgbWFrZUdyQ29udGV4dEN1cnJlbnQoKTsKIAogcHJpdmF0
ZToKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA5MzkwMCkKKysrIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTQgQEAKKzIwMTEtMDgtMjYgIFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0BjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgU2tpYSdzIGFjY2VsIGNhbnZhcyBpbXBsZW1lbnRhdGlvbiBzaG91bGQg
dXNlIEdyVGV4dHVyZSwgbm90IERyYXdpbmdCdWZmZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3MDUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpmbHVzaCk6
CisgICAgICAgIE1ha2UgR0MzRDo6Zmx1c2goKSBhbHNvIGZsdXNoIEdyQ29udGV4dCdzIGludGVy
bmFsIGJ1ZmZlcnMuCisKIDIwMTEtMDgtMjYgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBVc2UgZW51bXMgaW5zdGVhZCBvZiBib29scyBmb3IgVGhyZWFkYWJs
ZUxvYWRlck9wdGlvbnMKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNz
Q29udGV4dDNEQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA5MzkwMCkKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01MDcsNyArNTA3LDYgQEAgREVMRUdBVEVfVE9fSU1QTF80KGRy
YXdFbGVtZW50cywgR0MzRGVudQogREVMRUdBVEVfVE9fSU1QTF8xKGVuYWJsZSwgR0MzRGVudW0p
CiBERUxFR0FURV9UT19JTVBMXzEoZW5hYmxlVmVydGV4QXR0cmliQXJyYXksIEdDM0R1aW50KQog
REVMRUdBVEVfVE9fSU1QTChmaW5pc2gpCi1ERUxFR0FURV9UT19JTVBMKGZsdXNoKQogREVMRUdB
VEVfVE9fSU1QTF80KGZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyLCBHQzNEZW51bSwgR0MzRGVudW0s
IEdDM0RlbnVtLCBQbGF0Zm9ybTNET2JqZWN0KQogREVMRUdBVEVfVE9fSU1QTF81KGZyYW1lYnVm
ZmVyVGV4dHVyZTJELCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RlbnVtLCBQbGF0Zm9ybTNET2Jq
ZWN0LCBHQzNEaW50KQogREVMRUdBVEVfVE9fSU1QTF8xKGZyb250RmFjZSwgR0MzRGVudW0pCkBA
IC01MjQsNiArNTIzLDE1IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0QWN0
aXYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFs
OjpmbHVzaCgpCit7CisjaWYgVVNFKFNLSUEpCisgICAgaWYgKG1fZ3JDb250ZXh0KQorICAgICAg
ICBtX2dyQ29udGV4dC0+Zmx1c2goKTsKKyNlbmRpZgorICAgIG1faW1wbC0+Zmx1c2goKTsKK30K
KwogYm9vbCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRBY3RpdmVVbmlmb3JtKFBsYXRm
b3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCiB7
CiAgICAgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRDo6QWN0aXZlSW5mbyB3ZWJJbmZvOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105488</attachid>
            <date>2011-08-29 07:31:47 -0700</date>
            <delta_ts>2011-08-29 11:12:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67050-20110829103146.patch</filename>
            <type>text/plain</type>
            <size>21004</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzOTc1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjIgQEAKKzIwMTEtMDgtMjkgIFN0ZXBoZW4g
V2hpdGUgIDxzZW5vcmJsYW5jb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU2tpYSdzIGFjY2Vs
ZXJhdGVkIGNhbnZhcyAyRCBpbXBsZW1lbnRhdGlvbiBzaG91bGQgdXNlIEdyVGV4dHVyZSwgbm90
IERyYXdpbmdCdWZmZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY3MDUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXMyRExheWVyQ2hyb21pdW06OkNhbnZhczJETGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChX
ZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCk6CisgICAgICAgIENv
bnN0cnVjdCBDYW52YXMyRExheWVyQ2hyb21pdW0gd2l0aCBhIEdyYXBoaWNzQ29udGV4dDNELCBu
b3QgYQorICAgICAgICBEcmF3aW5nQnVmZmVyLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRM
YXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAgICAgICAgRmx1c2gg
dGhlIEdyQ29udGV4dCBhbmQgR3JhcGhpY3NDb250ZXh0M0Qgb24gY29tcG9zaXRvciB1cGRhdGUu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9t
aXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJD
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNMYXllckNocm9taXVtOjpDYW52
YXNMYXllckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
YW52YXNMYXllckNocm9taXVtLmg6CisgICAgICAgIFB1dCB0ZXh0dXJlSWQoKSBiYWNrIG9uIHRo
ZSBiYXNlIGNsYXNzIChDYW52YXNMYXllckNocm9taXVtKSBhbmQKKyAgICAgICAgZGUtdmlydHVh
bGl6ZSBpdC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06OnRleHR1cmVJ
ZCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNMYXllckNocm9taXVtOjpzZXRUZXh0dXJlSWQp
OgorICAgICAgICBNb3ZlIG1fdGV4dHVyZUlkIGZyb20gV2ViR0xMYXllckNocm9taXVtLCBzaW5j
ZSBjYW52YXMyRCBub3cgdXNlcworICAgICAgICBpdCB0b28uICBQcm92aWRlIGdldHRlcnMgYW5k
IHNldHRlcnMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1
ZmZlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OkRyYXdp
bmdCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6fkRyYXdpbmdCdWZm
ZXIpOgorICAgICAgICBSZW1vdmUgYWxsIENhbnZhczJELXJlbGF0ZWQgY2FsbHMgZnJvbSBEcmF3
aW5nQnVmZmVyLgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cHVibGlzaFRvUGxh
dGZvcm1MYXllcik6CisgICAgICAgIFJlbW92ZSBHckNvbnRleHQ6OmZsdXNoIGNhbGwsIHNpbmNl
IGl0J3Mgbm93IGhhbmRsZWQgYnkgdGhlIHBsYXRmb3JtIGxheWVyLgorICAgICAgICAoV2ViQ29y
ZTo6RHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm1MYXllcik6CisgICAgICAgIFJldHVybiBOVUxMIGZv
ciBub3cgKFdlYkdMIG1heSByZXNjdXNzaXRhdGUgdGhpcyBsYXRlcikuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcDoKKyAgICAg
ICAgUmVtb3ZlIGEgdXNlbGVzcyAjaW5jbHVkZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9JbWFnZUJ1ZmZlckRhdGFTa2lhLmg6CisgICAgICAgIEFkZCBvd25lcnNoaXAg
b2YgdGhlIENhbnZhczJETGF5ZXJDaHJvbWl1bS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xMYXllckNocm9taXVtOjpXZWJHTExheWVyQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICBSZW1vdmUg
YWxsIHRleHR1cmUgSUQgc3R1ZmYgKG5vdyBvbiBiYXNlIGNsYXNzKS4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oOgorICAgICAgICBSZW1vdmUgQ2FudmFz
MkRMYXllckNocm9taXVtIGFuZCBhbGwgR2FuZXNoIGRhdGF0eXBlcyBmcm9tCisgICAgICAgIERy
YXdpbmdCdWZmZXIsIHNpbmNlIGl0J3Mgbm8gbG9uZ2VyIHVzZWQgYnkgY2FudmFzMkQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKToKKyAgICAgICAgT24gYWNjZWxl
cmF0ZWQgSW1hZ2VCdWZmZXIgY3JlYXRpb24sIGNyZWF0ZSBhIEdyVGV4dHVyZSBpbnN0ZWFkIG9m
IGEKKyAgICAgICAgRHJhd2luZ0J1ZmZlci4gIElmIGFsbCBpcyBjb29sLCBjcmVhdGUgYW5kIHNl
dCB0aGUgU2tHcHVEZXZpY2UgaGVyZSwKKyAgICAgICAgYW5kIGNyZWF0ZSBhIENhbnZhczJETGF5
ZXJDaHJvbWl1bSBwbGF0Zm9ybSBsYXllci4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpwbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRm
b3JtQ29udGV4dFNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tp
YTo6c2V0R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oOgorICAgICAgICBSZW1vdmUgYWxsIEdyQ29udGV4dCBj
cmVhdGlvbiBhbmQgRHJhd2luZ0J1ZmZlciAic2NyYXBpbmciIGZyb20gCisgICAgICAgIFBsYXRm
b3JtQ29udGV4dFNraWE6OnNldEdyYXBoaWNzQ29udGV4dDNEKCkuICBUaGlzIGlzIGhhbmRsZWQg
aW4KKyAgICAgICAgdGhlIEltYWdlQnVmZmVyIGNvbnN0cnVjdG9yIGluc3RlYWQuCisKIDIwMTEt
MDgtMjkgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFdlYiBJbnNwZWN0b3I6IGNhY2hlZCBwZXJtYW5lbnQgcmVkaXJlY3RzIGRvbid0IHNob3cgcmVk
aXJlY3QgY29kZSBhbmQgdGV4dCBpbiBOZXR3b3JrIHBhbmVsLgpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
YW52YXMyRExheWVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA5Mzk3NSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDIxICszNCwyMyBAQAogCiAjaW5jbHVkZSAiQ2FudmFzMkRM
YXllckNocm9taXVtLmgiCiAKLSNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCiAjaW5jbHVkZSAi
RXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgot
I2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorCisjaWYgVVNFKFNLSUEpCisjaW5j
bHVkZSAiR3JDb250ZXh0LmgiCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNz
UmVmUHRyPENhbnZhczJETGF5ZXJDaHJvbWl1bT4gQ2FudmFzMkRMYXllckNocm9taXVtOjpjcmVh
dGUoRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlciwgR3JhcGhpY3NMYXllckNocm9taXVtKiBv
d25lcikKK1Bhc3NSZWZQdHI8Q2FudmFzMkRMYXllckNocm9taXVtPiBDYW52YXMyRExheWVyQ2hy
b21pdW06OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKIHsKLSAgICByZXR1cm4g
YWRvcHRSZWYobmV3IENhbnZhczJETGF5ZXJDaHJvbWl1bShkcmF3aW5nQnVmZmVyLCBvd25lcikp
OworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzMkRMYXllckNocm9taXVtKGNvbnRleHQp
KTsKIH0KIAotQ2FudmFzMkRMYXllckNocm9taXVtOjpDYW52YXMyRExheWVyQ2hyb21pdW0oRHJh
d2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlciwgR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikK
LSAgICA6IENhbnZhc0xheWVyQ2hyb21pdW0ob3duZXIpCi0gICAgLCBtX2RyYXdpbmdCdWZmZXIo
ZHJhd2luZ0J1ZmZlcikKK0NhbnZhczJETGF5ZXJDaHJvbWl1bTo6Q2FudmFzMkRMYXllckNocm9t
aXVtKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQorICAgIDogQ2FudmFzTGF5ZXJDaHJvbWl1
bSgwKQorICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiB7CiB9CiAKQEAgLTU4LDMyICs2MCwyOCBA
QCBDYW52YXMyRExheWVyQ2hyb21pdW06On5DYW52YXMyRExheWVyQ2hyCiAKIGJvb2wgQ2FudmFz
MkRMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKSBjb25zdAogewotICAgIEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0OwotICAgIHJldHVybiAobV9kcmF3aW5nQnVmZmVyCi0gICAgICAgICAg
ICAmJiAoY29udGV4dCA9IG1fZHJhd2luZ0J1ZmZlci0+Z3JhcGhpY3NDb250ZXh0M0QoKS5nZXQo
KSkKLSAgICAgICAgICAgICYmIChjb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNz
UmVzZXRTdGF0dXNBUkIoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpKTsKKyAgICBy
ZXR1cm4gKG1fY29udGV4dAorICAgICAgICAgICAgJiYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9u
cygpLT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5P
X0VSUk9SKSk7CiB9CiAKIHZvaWQgQ2FudmFzMkRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3Np
dG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKikKIHsKICAgICBpZiAoIW1fY29udGVudHNE
aXJ0eSB8fCAhZHJhd3NDb250ZW50KCkpCiAgICAgICAgIHJldHVybjsKLSAgICAvLyBVcGRhdGUg
dGhlIGNvbnRlbnRzIG9mIHRoZSB0ZXh0dXJlIHVzZWQgYnkgdGhlIGNvbXBvc2l0b3IuCisKICAg
ICBpZiAobV9jb250ZW50c0RpcnR5KSB7Ci0gICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+cHVibGlz
aFRvUGxhdGZvcm1MYXllcigpOworICAgICAgICBpZiAobV9jb250ZXh0KSB7CisgICAgICAgICAg
ICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworI2lmIFVTRShTS0lBKQorICAgICAg
ICAgICAgR3JDb250ZXh0KiBnckNvbnRleHQgPSBtX2NvbnRleHQtPmdyQ29udGV4dCgpOworICAg
ICAgICAgICAgaWYgKGdyQ29udGV4dCkKKyAgICAgICAgICAgICAgICBnckNvbnRleHQtPmZsdXNo
KCk7CisjZW5kaWYKKyAgICAgICAgICAgIG1fY29udGV4dC0+Zmx1c2goKTsKKyAgICAgICAgfQog
ICAgICAgICBtX2NvbnRlbnRzRGlydHkgPSBmYWxzZTsKICAgICB9CiB9CiAKLXVuc2lnbmVkIENh
bnZhczJETGF5ZXJDaHJvbWl1bTo6dGV4dHVyZUlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9k
cmF3aW5nQnVmZmVyID8gbV9kcmF3aW5nQnVmZmVyLT5wbGF0Zm9ybUNvbG9yQnVmZmVyKCkgOiAw
OwotfQotCi12b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6c2V0RHJhd2luZ0J1ZmZlcihEcmF3
aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQotewotICAgIG1fZHJhd2luZ0J1ZmZlciA9IGRyYXdp
bmdCdWZmZXI7Ci19Ci0KIH0KICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMy
RExheWVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaAkocmV2aXNpb24gOTM5NzUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExh
eWVyQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtMzgsMjMgKzM4LDIxIEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRHJhd2luZ0J1ZmZlcjsKK2NsYXNzIEdyYXBoaWNzQ29u
dGV4dDNEOwogCiAvLyBBIGxheWVyIGNvbnRhaW5pbmcgYW4gYWNjZWxlcmF0ZWQgMmQgY2FudmFz
CiBjbGFzcyBDYW52YXMyRExheWVyQ2hyb21pdW0gOiBwdWJsaWMgQ2FudmFzTGF5ZXJDaHJvbWl1
bSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzMkRMYXllckNocm9taXVt
PiBjcmVhdGUoRHJhd2luZ0J1ZmZlciosIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpOwor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhczJETGF5ZXJDaHJvbWl1bT4gY3JlYXRlKEdyYXBo
aWNzQ29udGV4dDNEKik7CiAgICAgdmlydHVhbCB+Q2FudmFzMkRMYXllckNocm9taXVtKCk7CiAg
ICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKik7CiAKICAgICB2b2lk
IHNldFRleHR1cmVDaGFuZ2VkKCk7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCB0ZXh0dXJlSWQoKSBj
b25zdDsKLSAgICB2b2lkIHNldERyYXdpbmdCdWZmZXIoRHJhd2luZ0J1ZmZlciopOwogCiBwcml2
YXRlOgotICAgIGV4cGxpY2l0IENhbnZhczJETGF5ZXJDaHJvbWl1bShEcmF3aW5nQnVmZmVyKiwg
R3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7Ci0gICAgRHJhd2luZ0J1ZmZlciogbV9kcmF3
aW5nQnVmZmVyOworICAgIGV4cGxpY2l0IENhbnZhczJETGF5ZXJDaHJvbWl1bShHcmFwaGljc0Nv
bnRleHQzRCopOworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CiB9OwogCiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXll
ckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gOTM5NzUpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNo
cm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBAQCBDYW52YXNMYXllckNo
cm9taXVtOjpDYW52YXNMYXllckNocm9taXVtCiAgICAgOiBMYXllckNocm9taXVtKG93bmVyKQog
ICAgICwgbV9oYXNBbHBoYSh0cnVlKQogICAgICwgbV9wcmVtdWx0aXBsaWVkQWxwaGEodHJ1ZSkK
KyAgICAsIG1fdGV4dHVyZUlkKDApCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNo
cm9taXVtLmgJKHJldmlzaW9uIDkzOTc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NiwxNSArNDYsMTcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDQ0xheWVySW1w
bD4gY3JlYXRlQ0NMYXllckltcGwoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBwdXNoUHJvcGVydGll
c1RvKENDTGF5ZXJJbXBsKik7CisgICAgdW5zaWduZWQgdGV4dHVyZUlkKCkgY29uc3QgeyByZXR1
cm4gbV90ZXh0dXJlSWQ7IH0KKyAgICB2b2lkIHNldFRleHR1cmVJZCh1bnNpZ25lZCB0ZXh0dXJl
SWQpIHsgbV90ZXh0dXJlSWQgPSB0ZXh0dXJlSWQ7IH0KIAogcHJvdGVjdGVkOgogICAgIGV4cGxp
Y2l0IENhbnZhc0xheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CiAK
LSAgICB2aXJ0dWFsIHVuc2lnbmVkIHRleHR1cmVJZCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFs
IGNvbnN0IGNoYXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIkNhbnZhc0xh
eWVyIjsgfQogCiAgICAgYm9vbCBtX2hhc0FscGhhOwogICAgIGJvb2wgbV9wcmVtdWx0aXBsaWVk
QWxwaGE7CisgICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7CiB9OwogCiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDkzOTc1KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVt
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTMgKzMzLDYgQEAKICNpbmNsdWRlICJEcmF3aW5n
QnVmZmVyLmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotI2lmIFVTRShTS0lB
KQotI2luY2x1ZGUgIkdyQ29udGV4dC5oIgotI2VuZGlmCi0KLSNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCi0jaW5jbHVkZSAiQ2FudmFzMkRMYXllckNocm9taXVtLmgiCi0jZW5kaWYK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03NSw5ICs2OCw2IEBAIERyYXdpbmdCdWZmZXI6
OkRyYXdpbmdCdWZmZXIoR3JhcGhpY3NDb24KICAgICAsIG1fc3RlbmNpbEJ1ZmZlcigwKQogICAg
ICwgbV9tdWx0aXNhbXBsZUZCTygwKQogICAgICwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDAp
Ci0jaWYgVVNFKFNLSUEpCi0gICAgLCBtX2dyQ29udGV4dCgwKQotI2VuZGlmCiB7CiAgICAgbV9m
Ym8gPSBjb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOwogICAgIGNvbnRleHQtPmJpbmRGcmFt
ZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKQEAgLTkxLDEx
ICs4MSw2IEBAIERyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIoR3JhcGhpY3NDb24KIAogRHJh
d2luZ0J1ZmZlcjo6fkRyYXdpbmdCdWZmZXIoKQogewotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKLSAgICBpZiAobV9wbGF0Zm9ybUxheWVyKQotICAgICAgICBtX3BsYXRmb3JtTGF5
ZXItPnNldERyYXdpbmdCdWZmZXIoMCk7Ci0jZW5kaWYKLQogICAgIGlmICghbV9jb250ZXh0KQog
ICAgICAgICByZXR1cm47CiAKQEAgLTExMSwxMCArOTYsNiBAQCB2b2lkIERyYXdpbmdCdWZmZXI6
OnB1Ymxpc2hUb1BsYXRmb3JtTGF5CiAgICAgaWYgKG11bHRpc2FtcGxlKCkpCiAgICAgICAgIGNv
bW1pdCgpOwogICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0jaWYgVVNFKFNL
SUEpCi0gICAgaWYgKG1fZ3JDb250ZXh0KQotICAgICAgICBtX2dyQ29udGV4dC0+Zmx1c2goMCk7
Ci0jZW5kaWYKICAgICBtX2NvbnRleHQtPmZsdXNoKCk7CiB9CiAjZW5kaWYKQEAgLTEyMiw5ICsx
MDMsNyBAQCB2b2lkIERyYXdpbmdCdWZmZXI6OnB1Ymxpc2hUb1BsYXRmb3JtTGF5CiAjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogUGxhdGZvcm1MYXllciogRHJhd2luZ0J1ZmZlcjo6
cGxhdGZvcm1MYXllcigpCiB7Ci0gICAgaWYgKCFtX3BsYXRmb3JtTGF5ZXIpCi0gICAgICAgIG1f
cGxhdGZvcm1MYXllciA9IENhbnZhczJETGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIDApOwot
ICAgIHJldHVybiBtX3BsYXRmb3JtTGF5ZXIuZ2V0KCk7CisgICAgcmV0dXJuIDA7CiB9CiAjZW5k
aWYKIApAQCAtMTMzLDM2ICsxMTIsNCBAQCBQbGF0Zm9ybTNET2JqZWN0IERyYXdpbmdCdWZmZXI6
OnBsYXRmb3JtCiAgICAgcmV0dXJuIG1fY29sb3JCdWZmZXI7CiB9CiAKLSNpZiBVU0UoU0tJQSkK
LXZvaWQgRHJhd2luZ0J1ZmZlcjo6c2V0R3JDb250ZXh0KEdyQ29udGV4dCogY29udGV4dCkKLXsK
LSAgICAvLyBXZSBqdXN0IHRha2UgYSBwdHIgd2l0aG91dCByZWZlcmVuY2luZyBpdCwgYXMgd2Ug
cmVxdWlyZSB0aGF0IHdlIG5ldmVyIG91dGxpdmUKLSAgICAvLyB0aGUgR3JhcGhpY3NDb250ZXh0
M0Qgb2JqZWN0IHRoYXQgaXMgZ2l2aW5nIHVzIHRoZSBjb250ZXh0LgotICAgIG1fZ3JDb250ZXh0
ID0gY29udGV4dDsKLX0KLQotdm9pZCBEcmF3aW5nQnVmZmVyOjpnZXRHclBsYXRmb3JtU3VyZmFj
ZURlc2MoR3JQbGF0Zm9ybVN1cmZhY2VEZXNjKiBkZXNjKQotewotICAgIGRlc2MtPmZTdXJmYWNl
VHlwZSA9IGtUZXh0dXJlUmVuZGVyVGFyZ2V0X0dyUGxhdGZvcm1TdXJmYWNlVHlwZTsKLQotICAg
IGRlc2MtPmZQbGF0Zm9ybVRleHR1cmUgPSBtX2NvbG9yQnVmZmVyOwotICAgIGlmIChtdWx0aXNh
bXBsZSgpKSB7Ci0gICAgICAgIGRlc2MtPmZSZW5kZXJUYXJnZXRGbGFncyA9IGtJc011bHRpc2Ft
cGxlZF9HclBsYXRmb3JtUmVuZGVyVGFyZ2V0RmxhZ0JpdCB8IGtHckNhblJlc29sdmVfR3JQbGF0
Zm9ybVJlbmRlclRhcmdldEZsYWdCaXQ7Ci0gICAgICAgIGRlc2MtPmZQbGF0Zm9ybVJlbmRlclRh
cmdldCA9IG1fbXVsdGlzYW1wbGVGQk87Ci0gICAgICAgIGRlc2MtPmZQbGF0Zm9ybVJlc29sdmVE
ZXN0aW5hdGlvbiA9IG1fZmJvOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRlc2MtPmZSZW5kZXJU
YXJnZXRGbGFncyA9IGtOb25lX0dyUGxhdGZvcm1SZW5kZXJUYXJnZXRGbGFnQml0OwotICAgICAg
ICBkZXNjLT5mUGxhdGZvcm1SZW5kZXJUYXJnZXQgPSBtX2ZibzsKLSAgICAgICAgZGVzYy0+ZlBs
YXRmb3JtUmVzb2x2ZURlc3RpbmF0aW9uID0gMDsKLSAgICB9Ci0KLSAgICBkZXNjLT5mV2lkdGgg
PSBtX3NpemUud2lkdGgoKTsKLSAgICBkZXNjLT5mSGVpZ2h0ID0gbV9zaXplLmhlaWdodCgpOwot
ICAgIGRlc2MtPmZDb25maWcgPSBrUkdCQV84ODg4X0dyUGl4ZWxDb25maWc7Ci0KLSAgICBkZXNj
LT5mU3RlbmNpbEJpdHMgPSAobV9kZXB0aFN0ZW5jaWxCdWZmZXIgfHwgbV9zdGVuY2lsQnVmZmVy
KSA/IDggOiAwOwotfQotCi0jZW5kaWYKLQogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xh
eWVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA5Mzk3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3LDcgKzQ3LDYgQEAKIAogI2luY2x1ZGUgIkNhbnZhczJETGF5ZXJDaHJvbWl1
bS5oIgogI2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9taXVtLmgiCi0jaW5jbHVkZSAiRHJhd2lu
Z0J1ZmZlci5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUJ1ZmZlckRhdGFTa2lhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VCdWZmZXJEYXRh
U2tpYS5oCShyZXZpc2lvbiA5Mzk3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ltYWdlQnVmZmVyRGF0YVNraWEuaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
MjAgKzI4LDI1IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlICJEcmF3aW5nQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgogCiAjaW5jbHVkZSAic2tp
YS9leHQvcGxhdGZvcm1fY2FudmFzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKK2NsYXNzIENhbnZhczJETGF5ZXJDaHJvbWl1bTsK
KyNlbmRpZgorCiBjbGFzcyBJbWFnZUJ1ZmZlckRhdGEgewogcHVibGljOgogICAgIEltYWdlQnVm
ZmVyRGF0YShjb25zdCBJbnRTaXplJik7CiAKICAgICBPd25QdHI8U2tDYW52YXM+IG1fY2FudmFz
OwogICAgIFBsYXRmb3JtQ29udGV4dFNraWEgbV9wbGF0Zm9ybUNvbnRleHQ7Ci0gICAgUmVmUHRy
PERyYXdpbmdCdWZmZXI+IG1fZHJhd2luZ0J1ZmZlcjsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCisgICAgUmVmUHRyPENhbnZhczJETGF5ZXJDaHJvbWl1bT4gbV9wbGF0Zm9ybUxh
eWVyOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDkzOTc1KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDksNyArNDksNiBAQCBQYXNzUmVmUHRyPFdlYkdMTGF5ZXJDaHJvbWl1
bT4gV2ViR0xMYXllCiBXZWJHTExheWVyQ2hyb21pdW06OldlYkdMTGF5ZXJDaHJvbWl1bShHcmFw
aGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQogICAgIDogQ2FudmFzTGF5ZXJDaHJvbWl1bShvd25l
cikKICAgICAsIG1fY29udGV4dCgwKQotICAgICwgbV90ZXh0dXJlSWQoMCkKICAgICAsIG1fdGV4
dHVyZUNoYW5nZWQodHJ1ZSkKICAgICAsIG1fY29udGV4dFN1cHBvcnRzUmF0ZUxpbWl0aW5nRXh0
ZW5zaW9uKGZhbHNlKQogICAgICwgbV9yYXRlTGltaXRpbmdUaW1lcih0aGlzLCAmV2ViR0xMYXll
ckNocm9taXVtOjpyYXRlTGltaXRDb250ZXh0KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9t
aXVtLmgJKHJldmlzaW9uIDkzOTc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDE0
ICs2NCwxMiBAQCBwcml2YXRlOgogICAgIGV4cGxpY2l0IFdlYkdMTGF5ZXJDaHJvbWl1bShHcmFw
aGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKICAgICBmcmllbmQgY2xhc3MgV2ViR0xMYXllckNo
cm9taXVtUmF0ZUxpbWl0VGFzazsKIAotICAgIHZpcnR1YWwgdW5zaWduZWQgdGV4dHVyZUlkKCkg
Y29uc3QgeyByZXR1cm4gbV90ZXh0dXJlSWQ7IH0KICAgICB2b2lkIHJhdGVMaW1pdENvbnRleHQo
VGltZXI8V2ViR0xMYXllckNocm9taXVtPiopOwogCiAgICAgLy8gR3JhcGhpY3NDb250ZXh0M0Q6
OnBsYXRmb3JtTGF5ZXIgaGFzIGEgc2lkZS1lZmZlY3Qgb2YgYXNzaWduaW5nIGl0c2VsZgogICAg
IC8vIHRvIHRoZSBsYXllci4gQmVjYXVzZSBvZiB0aGF0IEdyYXBoaWNzQ29udGV4dDNEJ3MgZGVz
dHJ1Y3RvciB3aWxsIHJlc2V0CiAgICAgLy8gbGF5ZXIncyBjb250ZXh0IHRvIDAuCiAgICAgR3Jh
cGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKLSAgICB1bnNpZ25lZCBtX3RleHR1cmVJZDsKICAg
ICBib29sIG1fdGV4dHVyZUNoYW5nZWQ7CiAgICAgYm9vbCBtX2NvbnRleHRTdXBwb3J0c1JhdGVM
aW1pdGluZ0V4dGVuc2lvbjsKICAgICBUaW1lcjxXZWJHTExheWVyQ2hyb21pdW0+IG1fcmF0ZUxp
bWl0aW5nVGltZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
RHJhd2luZ0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgJKHJldmlzaW9uIDkzOTc1KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNDIsMTEgKzQyLDYgQEAKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjZW5kaWYK
IAotI2lmIFVTRShTS0lBKQotY2xhc3MgR3JDb250ZXh0Owotc3RydWN0IEdyUGxhdGZvcm1TdXJm
YWNlRGVzYzsKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBQTEFURk9STShD
SFJPTUlVTSkgJiYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtOTAsMTEgKzg1LDYg
QEAgcHVibGljOgogICAgIHZvaWQgcHVibGlzaFRvUGxhdGZvcm1MYXllcigpOwogI2VuZGlmCiAK
LSNpZiBVU0UoU0tJQSkKLSAgICB2b2lkIHNldEdyQ29udGV4dChHckNvbnRleHQqIGN0eCk7Ci0g
ICAgdm9pZCBnZXRHclBsYXRmb3JtU3VyZmFjZURlc2MoR3JQbGF0Zm9ybVN1cmZhY2VEZXNjKik7
Ci0jZW5kaWYKLQogICAgIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGdyYXBoaWNzQ29u
dGV4dDNEKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0OyB9CiAKIHByaXZhdGU6CkBAIC0xMjAs
MTkgKzExMCw5IEBAIHByaXZhdGU6CiAgICAgUGxhdGZvcm0zRE9iamVjdCBtX211bHRpc2FtcGxl
RkJPOwogICAgIFBsYXRmb3JtM0RPYmplY3QgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyOwogCi0j
aWYgUExBVEZPUk0oQ0hST01JVU0pCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQot
ICAgIFJlZlB0cjxDYW52YXMyRExheWVyQ2hyb21pdW0+IG1fcGxhdGZvcm1MYXllcjsKLSNlbmRp
ZgotI2VuZGlmCi0KICNpZiBQTEFURk9STShNQUMpCiAgICAgUmV0YWluUHRyPFdlYkdMTGF5ZXI+
IG1fcGxhdGZvcm1MYXllcjsKICNlbmRpZgotCi0jaWYgVVNFKFNLSUEpCi0gICAgR3JDb250ZXh0
KiBtX2dyQ29udGV4dDsKLSNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
SW1hZ2VCdWZmZXJTa2lhLmNwcAkocmV2aXNpb24gOTM5NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM2LDcgKzM2LDggQEAKICNpbmNsdWRlICJCYXNlNjQuaCIKICNpbmNsdWRlICJCaXRtYXBJ
bWFnZS5oIgogI2luY2x1ZGUgIkJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhLmgiCi0jaW5jbHVk
ZSAiRHJhd2luZ0J1ZmZlci5oIgorI2luY2x1ZGUgIkNhbnZhczJETGF5ZXJDaHJvbWl1bS5oIgor
I2luY2x1ZGUgIkdyQ29udGV4dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkpQRUdJbWFnZUVuY29kZXIuaCIKQEAgLTQ1
LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCiAjaW5jbHVkZSAi
U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJTa0NvbG9yUHJpdi5oIgorI2lu
Y2x1ZGUgIlNrR3B1RGV2aWNlLmgiCiAjaW5jbHVkZSAiU2tpYVV0aWxzLmgiCiAKICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTgzLDEyICs4NSwyOSBAQCBJbWFnZUJ1ZmZlcjo6
SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgCiAgICAgLy8gY29sb3IuIENhbiB3ZSBoYXZlIGFu
b3RoZXIgd2F5IHRvIG1hbmFnZSB0aGlzPwogICAgIG1fZGF0YS5tX2NhbnZhcy0+ZHJhd0FSR0Io
MCwgMCwgMCwgMCwgU2tYZmVybW9kZTo6a0NsZWFyX01vZGUpOwogICAgIGlmIChyZW5kZXJpbmdN
b2RlID09IEFjY2VsZXJhdGVkKSB7Ci0gICAgICAgIG1fYWNjZWxlcmF0ZVJlbmRlcmluZyA9IHRy
dWU7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QgPSBTaGFyZWRHcmFwaGlj
c0NvbnRleHQzRDo6Y3JlYXRlKDApOwogICAgICAgICBpZiAoY29udGV4dDNEKSB7Ci0gICAgICAg
ICAgICBtX2RhdGEubV9kcmF3aW5nQnVmZmVyID0gY29udGV4dDNELT5jcmVhdGVEcmF3aW5nQnVm
ZmVyKHNpemUpOwotICAgICAgICAgICAgaWYgKG1fZGF0YS5tX2RyYXdpbmdCdWZmZXIpCi0gICAg
ICAgICAgICAgICAgbV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0LnNldEdyYXBoaWNzQ29udGV4dDNE
KGNvbnRleHQzRCwgbV9kYXRhLm1fZHJhd2luZ0J1ZmZlci5nZXQoKSk7CisgICAgICAgICAgICBj
b250ZXh0M0QtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgICAgICAgICAgR3JDb250ZXh0KiBn
ciA9IGNvbnRleHQzRC0+Z3JDb250ZXh0KCk7CisgICAgICAgICAgICBpZiAoZ3IpIHsKKyAgICAg
ICAgICAgICAgICBnci0+cmVzZXRDb250ZXh0KCk7CisgICAgICAgICAgICAgICAgR3JUZXh0dXJl
RGVzYyBkZXNjOworICAgICAgICAgICAgICAgIGRlc2MuZkZsYWdzID0ga1JlbmRlclRhcmdldF9H
clRleHR1cmVGbGFnQml0OworICAgICAgICAgICAgICAgIGRlc2MuZkFBTGV2ZWwgPSBrTm9uZV9H
ckFBTGV2ZWw7CisgICAgICAgICAgICAgICAgZGVzYy5mV2lkdGggPSBzaXplLndpZHRoKCk7Cisg
ICAgICAgICAgICAgICAgZGVzYy5mSGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgICAg
ICAgICBkZXNjLmZGb3JtYXQgPSBrUkdCQV84ODg4X0dyUGl4ZWxDb25maWc7CisgICAgICAgICAg
ICAgICAgU2tBdXRvVFVucmVmPEdyVGV4dHVyZT4gdGV4dHVyZShnci0+Y3JlYXRlVW5jYWNoZWRU
ZXh0dXJlKGRlc2MsIDAsIDApKTsKKyAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS5nZXQoKSkg
eworICAgICAgICAgICAgICAgICAgICBtX2RhdGEubV9jYW52YXMtPnNldERldmljZShuZXcgU2tH
cHVEZXZpY2UoZ3IsIHRleHR1cmUuZ2V0KCkpKS0+dW5yZWYoKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+c2V0R3JhcGhpY3NDb250ZXh0M0QoY29u
dGV4dDNEKTsKKyAgICAgICAgICAgICAgICAgICAgbV9hY2NlbGVyYXRlUmVuZGVyaW5nID0gdHJ1
ZTsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgICAgICAgICAgICAgICAg
IG1fZGF0YS5tX3BsYXRmb3JtTGF5ZXIgPSBDYW52YXMyRExheWVyQ2hyb21pdW06OmNyZWF0ZShj
b250ZXh0M0QpOworICAgICAgICAgICAgICAgICAgICBtX2RhdGEubV9wbGF0Zm9ybUxheWVyLT5z
ZXRUZXh0dXJlSWQodGV4dHVyZS5nZXQoKS0+Z2V0VGV4dHVyZUhhbmRsZSgpKTsKKyNlbmRpZgor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApAQCAt
MzgwLDcgKzM5OSw3IEBAIFN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmkK
IAogUGxhdGZvcm1MYXllciogSW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogewot
ICAgIHJldHVybiBtX2RhdGEubV9kcmF3aW5nQnVmZmVyID8gbV9kYXRhLm1fZHJhd2luZ0J1ZmZl
ci0+cGxhdGZvcm1MYXllcigpIDogMDsKKyAgICByZXR1cm4gbV9kYXRhLm1fcGxhdGZvcm1MYXll
ci5nZXQoKTsKIH0KIAogU3RyaW5nIEltYWdlRGF0YVRvRGF0YVVSTChjb25zdCBJbWFnZURhdGEm
IHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgZG91YmxlKiBxdWFsaXR5KQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRl
eHRTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCShyZXZpc2lvbiA5Mzk3NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRl
eHRTa2lhLmgiCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJEcmF3
aW5nQnVmZmVyLmgiCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKQEAgLTY2MCwyOCAr
NjU5LDkgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjphcHBseUFudGlBbGlhcwogICAgIG1f
Y2FudmFzLT5yZXN0b3JlKCk7CiB9CiAKLXZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0R3Jh
cGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIERyYXdpbmdCdWZmZXIq
IGRyYXdpbmdCdWZmZXIpCit2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnNldEdyYXBoaWNzQ29u
dGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogewogICAgIG1fZ3B1Q29udGV4dCA9
IGNvbnRleHQ7Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSAgICBpZiAoY29u
dGV4dCAmJiBkcmF3aW5nQnVmZmVyKSB7Ci0gICAgICAgIC8vIHVzZSBza2lhIGdwdSByZW5kZXJp
bmcgaWYgYXZhaWxhYmxlCi0gICAgICAgIEdyQ29udGV4dCogZ3IgPSBjb250ZXh0LT5nckNvbnRl
eHQoKTsKLSAgICAgICAgaWYgKGdyKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICAgICAgICAgIGRyYXdpbmdCdWZmZXItPmJpbmQoKTsKLQotICAgICAg
ICAgICAgZ3ItPnJlc2V0Q29udGV4dCgpOwotICAgICAgICAgICAgZHJhd2luZ0J1ZmZlci0+c2V0
R3JDb250ZXh0KGdyKTsKLQotICAgICAgICAgICAgR3JQbGF0Zm9ybVN1cmZhY2VEZXNjIGRyYXdC
dWZEZXNjOwotICAgICAgICAgICAgZHJhd2luZ0J1ZmZlci0+Z2V0R3JQbGF0Zm9ybVN1cmZhY2VE
ZXNjKCZkcmF3QnVmRGVzYyk7Ci0gICAgICAgICAgICBTa0F1dG9UVW5yZWY8R3JUZXh0dXJlPiBk
cmF3QnVmVGV4KHN0YXRpY19jYXN0PEdyVGV4dHVyZSo+KGdyLT5jcmVhdGVQbGF0Zm9ybVN1cmZh
Y2UoZHJhd0J1ZkRlc2MpKSk7Ci0gICAgICAgICAgICBtX2NhbnZhcy0+c2V0RGV2aWNlKG5ldyBT
a0dwdURldmljZShnciwgZHJhd0J1ZlRleC5nZXQoKSkpLT51bnJlZigpOwotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIG1fZ3B1Q29udGV4dCA9IDA7Ci0gICAgfQotI2VuZGlmCiB9CiAKIHZv
aWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6bWFrZUdyQ29udGV4dEN1cnJlbnQoKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0
Zm9ybUNvbnRleHRTa2lhLmgJKHJldmlzaW9uIDkzOTc1KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ1LDcgKzQ1LDYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogZW51bSBDb21wb3NpdGVP
cGVyYXRvcjsKLWNsYXNzIERyYXdpbmdCdWZmZXI7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsK
IGNsYXNzIFRleHR1cmU7CiAKQEAgLTE3OSw3ICsxNzgsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBo
YXNJbWFnZVJlc2FtcGxpbmdIaW50KCkgY29uc3Q7CiAKICAgICBib29sIGlzQWNjZWxlcmF0ZWQo
KSBjb25zdCB7IHJldHVybiBtX2dwdUNvbnRleHQ7IH0KLSAgICB2b2lkIHNldEdyYXBoaWNzQ29u
dGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEKiwgRHJhd2luZ0J1ZmZlciopOworICAgIHZvaWQgc2V0
R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0QqKTsKICAgICB2b2lkIG1ha2VHckNv
bnRleHRDdXJyZW50KCk7CiAKIHByaXZhdGU6Cg==
</data>
<flag name="review"
          id="101663"
          type_id="1"
          status="+"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>