<?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>55259</bug_id>
          
          <creation_ts>2011-02-25 14:02:06 -0800</creation_ts>
          <short_desc>[chromium] Abstract &quot;pixels with a graphics context&quot; into its own class</short_desc>
          <delta_ts>2011-03-01 18:35:56 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>55388</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adrienne Walker">enne</reporter>
          <assigned_to name="Adrienne Walker">enne</assigned_to>
          <cc>antonm</cc>
    
    <cc>aroben</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>kbr</cc>
    
    <cc>nduca</cc>
    
    <cc>vangelis</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>358171</commentid>
    <comment_count>0</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-02-25 14:02:06 -0800</bug_when>
    <thetext>[chromium] Abstract &quot;pixels with a graphics context&quot; into its own class</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>358272</commentid>
    <comment_count>1</comment_count>
      <attachid>83900</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-02-25 16:34:30 -0800</bug_when>
    <thetext>Created attachment 83900
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>358275</commentid>
    <comment_count>2</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-02-25 16:39:35 -0800</bug_when>
    <thetext>This refactoring patch is working towards tiling layers.  Along with the obvious abstraction of the Skia/Cg logic, it splits out the update/draw logic from the LayerTilerChromium.cpp into separate functions.  Having PlatformCanvas and PlatformImage be its own class will make it much easier to merge the common logic of LayerTilerChromium, ContentLayerChromium, and ImageLayerChromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>358300</commentid>
    <comment_count>3</comment_count>
      <attachid>83900</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-02-25 17:24:24 -0800</bug_when>
    <thetext>Comment on attachment 83900
Patch

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

Looks awesome!  Usual sort of collection of nitpicks

&gt; Source/WebCore/platform/graphics/chromium/PlatformCanvas.cpp:2
&gt; + * Copyright (C) 2010 Google Inc. All rights reserved.

times they are a&apos;changing. 2011 :)

&gt; Source/WebCore/platform/graphics/chromium/PlatformCanvas.h:32
&gt; +#if USE(SKIA)
&gt; +namespace skia { class PlatformCanvas; }
&gt; +class SkBitmap;
&gt; +#endif

nit: move this after the #includes

&gt; Source/WebCore/platform/graphics/chromium/PlatformCanvas.h:64
&gt; +        AutoLocker(PlatformCanvas*);

nit: explicit

&gt; Source/WebCore/platform/graphics/chromium/PlatformCanvas.h:80
&gt; +        Painter(PlatformCanvas*);

nit: explicit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>359134</commentid>
    <comment_count>4</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-02-28 10:03:39 -0800</bug_when>
    <thetext>Committed r79877: &lt;http://trac.webkit.org/changeset/79877&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>359135</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-02-28 10:04:48 -0800</bug_when>
    <thetext>(In reply to comment #0)
&gt; [chromium] Abstract &quot;pixels with a graphics context&quot; into its own class

Isn&apos;t that what ImageBuffer is?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>359157</commentid>
    <comment_count>6</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2011-02-28 10:34:25 -0800</bug_when>
    <thetext>Sample broken build log: http://chromesshgw.corp.google.com/i/chromium.webkit/builders/Webkit%20Win%20Builder/builds/4114/steps/compile/logs/stdio

Grep for PlatformCanvas.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>359178</commentid>
    <comment_count>7</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-02-28 11:05:17 -0800</bug_when>
    <thetext>Windows has no idea what uint8_t is, apparently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>359317</commentid>
    <comment_count>8</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-02-28 13:53:51 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Sample broken build log: http://chromesshgw.corp.google.com/i/chromium.webkit/builders/Webkit%20Win%20Builder/builds/4114/steps/compile/logs/stdio
&gt; 
&gt; Grep for PlatformCanvas.h

Thanks for rolling that out for me.  It&apos;s unfortunate that the win build check above didn&apos;t catch that.

(In reply to comment #5)
&gt; (In reply to comment #0)
&gt; &gt; [chromium] Abstract &quot;pixels with a graphics context&quot; into its own class
&gt; 
&gt; Isn&apos;t that what ImageBuffer is?

Thanks for pointing this out.  I need to look into it more closely at it to see if it solves the same needs.  At the very least, using ImageBuffer as-is would involve an extra pixel-by-pixel copy operation for every texture upload, so it will need some additional APIs first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>359487</commentid>
    <comment_count>9</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-02-28 16:46:27 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #6)
&gt; &gt; Sample broken build log: http://chromesshgw.corp.google.com/i/chromium.webkit/builders/Webkit%20Win%20Builder/builds/4114/steps/compile/logs/stdio
&gt; &gt; 
&gt; &gt; Grep for PlatformCanvas.h
&gt; 
&gt; Thanks for rolling that out for me.  It&apos;s unfortunate that the win build check above didn&apos;t catch that.

We have a win EWS bot but no chromium-win EWS :&apos;(

&gt; 
&gt; (In reply to comment #5)
&gt; &gt; (In reply to comment #0)
&gt; &gt; &gt; [chromium] Abstract &quot;pixels with a graphics context&quot; into its own class
&gt; &gt; 
&gt; &gt; Isn&apos;t that what ImageBuffer is?
&gt; 
&gt; Thanks for pointing this out.  I need to look into it more closely at it to see if it solves the same needs.  At the very least, using ImageBuffer as-is would involve an extra pixel-by-pixel copy operation for every texture upload, so it will need some additional APIs first.

Not necessarily, we can probably grab the bits out of the GraphicsContext in a platform-specific way in platform-specific code as needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360113</commentid>
    <comment_count>10</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-03-01 12:31:59 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; (In reply to comment #6)
&gt; &gt; &gt; Sample broken build log: http://chromesshgw.corp.google.com/i/chromium.webkit/builders/Webkit%20Win%20Builder/builds/4114/steps/compile/logs/stdio
&gt; &gt; &gt; 
&gt; &gt; &gt; Grep for PlatformCanvas.h
&gt; &gt; 
&gt; &gt; Thanks for rolling that out for me.  It&apos;s unfortunate that the win build check above didn&apos;t catch that.
&gt; 
&gt; We have a win EWS bot but no chromium-win EWS :&apos;(

I still am not sure how stdint.h is magically included in one but not the other.

&gt; &gt; 
&gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; (In reply to comment #0)
&gt; &gt; &gt; &gt; [chromium] Abstract &quot;pixels with a graphics context&quot; into its own class
&gt; &gt; &gt; 
&gt; &gt; &gt; Isn&apos;t that what ImageBuffer is?
&gt; &gt; 
&gt; &gt; Thanks for pointing this out.  I need to look into it more closely at it to see if it solves the same needs.  At the very least, using ImageBuffer as-is would involve an extra pixel-by-pixel copy operation for every texture upload, so it will need some additional APIs first.
&gt; 
&gt; Not necessarily, we can probably grab the bits out of the GraphicsContext in a platform-specific way in platform-specific code as needed.

Looking at ImageBuffer, the code I would add to to it is pretty much the contents of this patch, except I would also (likely) need to add an implementation of these APIs to all the other ImageBufferData implementations (other than Skia and Cg).  I&apos;m feeling inclined to commit this as-is because it significantly cleans up the compositor code and is just a refactoring of what already exists.

It&apos;s possible that there&apos;s no real performance win from the existing code and thus no benefit to having an extra path or extra classes.  However, at this point we don&apos;t really have good performance measurements of the compositor speed (and its performance characteristics will change drastically in the coming months as it becomes multithreaded).  In my mind, further cleanup or potential merging with ImageBuffer should really be left for a future patch when we can evaluate it with better data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360488</commentid>
    <comment_count>11</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-03-01 18:35:56 -0800</bug_when>
    <thetext>Committed r80081: &lt;http://trac.webkit.org/changeset/80081&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83900</attachid>
            <date>2011-02-25 16:34:30 -0800</date>
            <delta_ts>2011-02-25 17:24:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55259-20110225163429.patch</filename>
            <type>text/plain</type>
            <size>39224</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzk3MjMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3ZDkzMTVjMGVmNzY0NGE4
YmYyNGM1ZjU2MzliYmQ5ZTg2ZmViZTQzLi43NGZkYzVkYWYxOWZhZjQ4OGIxZjYxMzczZGMyNzA3
ZjVhYzMzNDU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTMgQEAKKzIwMTEtMDItMjUgIEFkcmll
bm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIEFic3RyYWN0ICJwaXhlbHMgd2l0aCBh
IGdyYXBoaWNzIGNvbnRleHQiIGludG8gaXRzIG93biBjbGFzcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTUyNTkKKworICAgICAgICBUaGlzIGNyZWF0
ZXMgbmV3IFBsYXRmb3JtQ2FudmFzL1BsYXRmb3JtSW1hZ2UgY2xhc3NlcyB3aGljaCB3cmFwCisg
ICAgICAgIGFsbCBvZiB0aGUgI2lmZGVmIFNraWEvQ2cgd2FydHMgZnJvbSB0aGUgY29tcG9zaXRv
ci4gIEFsbCBjbGFzc2VzCisgICAgICAgIChMYXllclRpbGVyQ2hyb21pdW0sIENvbnRlbnRMYXll
ckNocm9taXVtLCBhbmQgSW1hZ2VMYXllckNocm9taXVtKSBhcmUKKyAgICAgICAgbW9kaWZpZWQg
dG8gdXNlIHRoZXNlIGFic3RyYWN0aW9ucy4KKworICAgICAgICBUZXN0czogTGF5b3V0VGVzdHMv
Y29tcG9zaXRpbmcKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNJZkRpcnR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpyZXNpemVVcGxvYWRCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmVJ
Zk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRl
VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhdyk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21p
dW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hy
b21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllckNocm9taXVtOjp1cGRhdGVD
b250ZW50c0lmRGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllckNocm9taXVtOjp1
cGRhdGVUZXh0dXJlSWZOZWVkZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRp
bGVyQ2hyb21pdW06OmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclRpbGVyQ2hyb21pdW06OnVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRp
bGVyQ2hyb21pdW06OnVwZGF0ZUZyb21QaXhlbHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtQ2FudmFzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybUNhbnZhczo6UGxhdGZvcm1DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1DYW52YXM6On5QbGF0Zm9ybUNhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybUNhbnZhczo6cmVzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ2FudmFzOjpB
dXRvTG9ja2VyOjpBdXRvTG9ja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ2FudmFz
OjpBdXRvTG9ja2VyOjp+QXV0b0xvY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNh
bnZhczo6UGFpbnRlcjo6UGFpbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNhbnZh
czo6UGFpbnRlcjo6flBhaW50ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1BsYXRmb3JtQ2FudmFzLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1D
YW52YXM6OkF1dG9Mb2NrZXI6OnBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNh
bnZhczo6UGFpbnRlcjo6Y29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNhbnZh
czo6c2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1J
bWFnZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUltYWdlOjpQbGF0Zm9ybUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6
OnVwZGF0ZUZyb21JbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
UGxhdGZvcm1JbWFnZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6
OnBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzaXplKToKKwogMjAx
MS0wMi0yNSAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgQnJhZHkgRWlkc29uIGFuZCBsb29rZWQgb3ZlciBieSBKZXNzaWUgQmVy
bGluLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDcyNDI5MWJhZTYzNDYzMWY2NGQzMTdhODZlNTQ3MjI4
ODQ3YmVmNjQuLjE0Zjg1OWJlZjg1NWI4OTViYzAyMTU4NTc3Y2VmN2JjZDIzMjI3MTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKQEAgLTI2MjIsNiArMjYyMiwxMCBAQAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NZWRpYVBsYXllclByaXZhdGVDaHJvbWl1bS5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUljb24uaCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1DYW52YXMu
Y3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNh
bnZhcy5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9y
bUltYWdlLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxh
dGZvcm1JbWFnZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Q
bHVnaW5MYXllckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Qcm9ncmFtQmluZGluZy5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExh
eWVyQ2hyb21pdW0uY3BwCmluZGV4IDI1NzNlZDNkZTBlMDg3OWZiYTdlYzk1OWNkZTNiMjQ5ZTIy
MzRiMWEuLmE0YjgwYzc5ZTMwMTcyNWQ0OWVmZWFlY2M1NTY1ZjZjYzUzMmJiYmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXll
ckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTQwLDE1ICs0MCw2IEBACiAjaW5jbHVk
ZSAiTGF5ZXJUZXh0dXJlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAKLSNp
ZiBVU0UoU0tJQSkKLSNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKLSNpbmNsdWRlICJQbGF0
Zm9ybUNvbnRleHRTa2lhLmgiCi0jaW5jbHVkZSAiU2tDb2xvclByaXYuaCIKLSNpbmNsdWRlICJz
a2lhL2V4dC9wbGF0Zm9ybV9jYW52YXMuaCIKLSNlbGlmIFBMQVRGT1JNKENHKQotI2luY2x1ZGUg
PENvcmVHcmFwaGljcy9DR0JpdG1hcENvbnRleHQuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIFBhc3NSZWZQdHI8Q29udGVudExheWVyQ2hyb21pdW0+IENvbnRlbnRMYXllckNo
cm9taXVtOjpjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikKQEAgLTEzNiw3ICsx
MjcsNyBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHko
KQogICAgICAgICB9CiAKICAgICAgICAgLy8gSWYgd2UgbmVlZCB0byByZXNpemUgdGhlIHVwbG9h
ZCBidWZmZXIgd2UgaGF2ZSB0byByZXBhaW50IGV2ZXJ5dGhpbmcuCi0gICAgICAgIGlmIChtX3Vw
bG9hZEJ1ZmZlclNpemUgIT0gdmlzaWJsZVJlY3RJbkxheWVyQ29vcmRzLnNpemUoKSkgeworICAg
ICAgICBpZiAobV9jYW52YXMuc2l6ZSgpICE9IHZpc2libGVSZWN0SW5MYXllckNvb3Jkcy5zaXpl
KCkpIHsKICAgICAgICAgICAgIHJlc2l6ZVVwbG9hZEJ1ZmZlcih2aXNpYmxlUmVjdEluTGF5ZXJD
b29yZHMuc2l6ZSgpKTsKICAgICAgICAgICAgIG1fZGlydHlSZWN0ID0gYm91bmRzUmVjdDsKICAg
ICAgICAgfQpAQCAtMTYxLDcgKzE1Miw3IEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnVw
ZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpCiAgICAgICAgIGRpcnR5UmVjdCA9IEludFJlY3QobV9kaXJ0
eVJlY3QpOwogICAgICAgICAvLyBJZiB0aGUgdGV4dHVyZSBuZWVkcyB0byBiZSByZWFsbG9jYXRl
ZCB0aGVuIHdlIG11c3QgcmVkcmF3IHRoZSBlbnRpcmUKICAgICAgICAgLy8gY29udGVudHMgb2Yg
dGhlIGxheWVyLgotICAgICAgICBpZiAobV91cGxvYWRCdWZmZXJTaXplICE9IGJvdW5kcygpKSB7
CisgICAgICAgIGlmIChtX2NhbnZhcy5zaXplKCkgIT0gYm91bmRzKCkpIHsKICAgICAgICAgICAg
IHJlc2l6ZVVwbG9hZEJ1ZmZlcihib3VuZHMoKSk7CiAgICAgICAgICAgICBkaXJ0eVJlY3QgPSBi
b3VuZHNSZWN0OwogICAgICAgICB9IGVsc2UgewpAQCAtMTc1LDEwNiArMTY2LDI5IEBAIHZvaWQg
Q29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpCiAgICAgaWYgKGRp
cnR5UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotI2lmIFVTRShTS0lBKQotICAg
IE93blB0cjxQbGF0Zm9ybUNvbnRleHRTa2lhPiBza2lhQ29udGV4dDsKLQotICAgIHNraWFDb250
ZXh0LnNldChuZXcgUGxhdGZvcm1Db250ZXh0U2tpYShtX3VwbG9hZFBpeGVsQ2FudmFzLmdldCgp
KSk7Ci0KLSAgICAvLyBUaGlzIGlzIG5lZWRlZCB0byBnZXQgdGV4dCB0byBzaG93IHVwIGNvcnJl
Y3RseS4KLSAgICBza2lhQ29udGV4dC0+c2V0RHJhd2luZ1RvSW1hZ2VCdWZmZXIodHJ1ZSk7Ci0K
LSAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KHJlaW50ZXJwcmV0X2Nhc3Q8UGxh
dGZvcm1HcmFwaGljc0NvbnRleHQqPihza2lhQ29udGV4dC5nZXQoKSkpOwotCi0jZWxpZiBQTEFU
Rk9STShDRykKLSAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBjbGVhciB0aGUgZGlydHkgcmVj
dGFuZ2xlIGluIHRoZSB1cGxvYWQgYnVmZmVyPwotICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VS
ZWY+IGNvbG9yU3BhY2UoQWRvcHRDRiwgQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkpOwot
ICAgIHNpemVfdCByb3dCeXRlcyA9IG1fdXBsb2FkQnVmZmVyU2l6ZS53aWR0aCgpICogNDsKLSAg
ICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBjb250ZXh0Q0coQWRvcHRDRiwgQ0dCaXRtYXBDb250
ZXh0Q3JlYXRlKG1fdXBsb2FkUGl4ZWxEYXRhLT5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3VwbG9h
ZEJ1ZmZlclNpemUud2lkdGgoKSwgbV91cGxvYWRCdWZmZXJTaXplLmhlaWdodCgpLCA4LCByb3dC
eXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2UuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0dJbWFn
ZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0KSk7Ci0g
ICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHRDRy5nZXQoKSwgMCwgbV91cGxvYWRCdWZm
ZXJTaXplLmhlaWdodCgpKTsKLSAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0Q0cuZ2V0KCks
IDEsIC0xKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dENH
LmdldCgpKTsKLSNlbHNlCi0jZXJyb3IgIk5lZWQgdG8gaW1wbGVtZW50IGZvciB5b3VyIHBsYXRm
b3JtLiIKLSNlbmRpZgorICAgIFBsYXRmb3JtQ2FudmFzOjpQYWludGVyIHBhaW50ZXIoJm1fY2Fu
dmFzKTsKKyAgICBwYWludGVyLmNvbnRleHQoKS0+c2F2ZSgpOworICAgIHBhaW50ZXIuY29udGV4
dCgpLT50cmFuc2xhdGUoLXBhaW50aW5nT2Zmc2V0LngoKSwgLXBhaW50aW5nT2Zmc2V0LnkoKSk7
CisgICAgcGFpbnRlci5jb250ZXh0KCktPmNsZWFyUmVjdChkaXJ0eVJlY3QpOworICAgIHBhaW50
ZXIuY29udGV4dCgpLT5jbGlwKGRpcnR5UmVjdCk7CiAKLSAgICBncmFwaGljc0NvbnRleHQuc2F2
ZSgpOwotICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUoLXBhaW50aW5nT2Zmc2V0LngoKSwg
LXBhaW50aW5nT2Zmc2V0LnkoKSk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LmNsZWFyUmVjdChkaXJ0
eVJlY3QpOwotICAgIGdyYXBoaWNzQ29udGV4dC5jbGlwKGRpcnR5UmVjdCk7Ci0KLSAgICBtX293
bmVyLT5wYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhncmFwaGljc0NvbnRleHQsIGRpcnR5UmVj
dCk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LnJlc3RvcmUoKTsKKyAgICBtX293bmVyLT5wYWludEdy
YXBoaWNzTGF5ZXJDb250ZW50cygqcGFpbnRlci5jb250ZXh0KCksIGRpcnR5UmVjdCk7CisgICAg
cGFpbnRlci5jb250ZXh0KCktPnJlc3RvcmUoKTsKIH0KIAotdm9pZCBDb250ZW50TGF5ZXJDaHJv
bWl1bTo6cmVzaXplVXBsb2FkQnVmZmVyRm9ySW1hZ2UoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsK
LSAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IHNpemUud2lkdGgoKSAqIHNpemUuaGVpZ2h0KCkgKiA0
OwotICAgIG1fdXBsb2FkUGl4ZWxEYXRhID0gbmV3IFZlY3Rvcjx1aW50OF90PihidWZmZXJTaXpl
KTsKLSNpZiBQTEFURk9STShDRykKLSAgICBtZW1zZXQobV91cGxvYWRQaXhlbERhdGEtPmRhdGEo
KSwgMCwgYnVmZmVyU2l6ZSk7Ci0jZW5kaWYKLSAgICBtX3VwbG9hZEJ1ZmZlclNpemUgPSBzaXpl
OwotfQogdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6cmVzaXplVXBsb2FkQnVmZmVyKGNvbnN0
IEludFNpemUmIHNpemUpCiB7Ci0jaWYgVVNFKFNLSUEpCi0gICAgbV91cGxvYWRQaXhlbENhbnZh
cyA9IG5ldyBza2lhOjpQbGF0Zm9ybUNhbnZhcyhzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCks
IGZhbHNlKTsKLSAgICBtX3VwbG9hZEJ1ZmZlclNpemUgPSBzaXplOwotI2Vsc2UKLSAgICByZXNp
emVVcGxvYWRCdWZmZXJGb3JJbWFnZShzaXplKTsKLSNlbmRpZgorICAgIG1fY2FudmFzLnJlc2l6
ZShzaXplKTsKIH0KIAotI2lmIFVTRShTS0lBKQotY2xhc3MgU2tCaXRtYXBDb25kaXRpb25hbEF1
dG9Mb2NrZXJQaXhlbHMgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNrQml0bWFwQ29uZGl0
aW9uYWxBdXRvTG9ja2VyUGl4ZWxzKTsKLXB1YmxpYzoKLSAgICBTa0JpdG1hcENvbmRpdGlvbmFs
QXV0b0xvY2tlclBpeGVscygpCi0gICAgICAgIDogbV9iaXRtYXAoMCkKLSAgICB7Ci0gICAgfQot
Ci0gICAgflNrQml0bWFwQ29uZGl0aW9uYWxBdXRvTG9ja2VyUGl4ZWxzKCkKLSAgICB7Ci0gICAg
ICAgIGlmIChtX2JpdG1hcCkKLSAgICAgICAgICAgIG1fYml0bWFwLT51bmxvY2tQaXhlbHMoKTsK
LSAgICB9Ci0KLSAgICB2b2lkIGxvY2tQaXhlbHMoY29uc3QgU2tCaXRtYXAqIGJpdG1hcCkKLSAg
ICB7Ci0gICAgICAgIGJpdG1hcC0+bG9ja1BpeGVscygpOwotICAgICAgICBtX2JpdG1hcCA9IGJp
dG1hcDsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgY29uc3QgU2tCaXRtYXAqIG1fYml0bWFwOwot
fTsKLSNlbmRpZgotCiB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJlSWZO
ZWVkZWQoKQogewotICAgIHVpbnQ4X3QqIHBpeGVscyA9IDA7Ci0jaWYgVVNFKFNLSUEpCi0gICAg
U2tCaXRtYXBDb25kaXRpb25hbEF1dG9Mb2NrZXJQaXhlbHMgbG9ja2VyOwotI2VuZGlmCi0gICAg
aWYgKCFtX3VwbG9hZFVwZGF0ZVJlY3QuaXNFbXB0eSgpKSB7Ci0jaWYgVVNFKFNLSUEpCi0gICAg
ICAgIGlmIChtX3VwbG9hZFBpeGVsQ2FudmFzKSB7Ci0gICAgICAgICAgICBjb25zdCBTa0JpdG1h
cCYgYml0bWFwID0gbV91cGxvYWRQaXhlbENhbnZhcy0+Z2V0RGV2aWNlKCktPmFjY2Vzc0JpdG1h
cChmYWxzZSk7Ci0gICAgICAgICAgICBsb2NrZXIubG9ja1BpeGVscygmYml0bWFwKTsKLSAgICAg
ICAgICAgIC8vIEZJWE1FOiBkbyB3ZSBuZWVkIHRvIHN1cHBvcnQgbW9yZSBpbWFnZSBjb25maWd1
cmF0aW9ucz8KLSAgICAgICAgICAgIGlmIChiaXRtYXAuY29uZmlnKCkgPT0gU2tCaXRtYXA6OmtB
UkdCXzg4ODhfQ29uZmlnKQotICAgICAgICAgICAgICAgIHBpeGVscyA9IHN0YXRpY19jYXN0PHVp
bnQ4X3QqPihiaXRtYXAuZ2V0UGl4ZWxzKCkpOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAg
aWYgKG1fdXBsb2FkUGl4ZWxEYXRhKQotICAgICAgICAgICAgcGl4ZWxzID0gbV91cGxvYWRQaXhl
bERhdGEtPmRhdGEoKTsKLSAgICB9CisgICAgUGxhdGZvcm1DYW52YXM6OkF1dG9Mb2NrZXIgbG9j
a2VyKCZtX2NhbnZhcyk7CisgICAgdXBkYXRlVGV4dHVyZShsb2NrZXIucGl4ZWxzKCksIG1fY2Fu
dmFzLnNpemUoKSk7Cit9CiAKK3ZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1
cmUoY29uc3QgdWludDhfdCogcGl4ZWxzLCBjb25zdCBJbnRTaXplJiBzaXplKQorewogICAgIGlm
ICghcGl4ZWxzKQogICAgICAgICByZXR1cm47CiAKQEAgLTI4MywyOCArMTk3LDI4IEBAIHZvaWQg
Q29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmVJZk5lZWRlZCgpCiAgICAgICAgIG1f
Y29udGVudHNUZXh0dXJlID0gTGF5ZXJUZXh0dXJlOjpjcmVhdGUoY29udGV4dCwgbGF5ZXJSZW5k
ZXJlcigpLT50ZXh0dXJlTWFuYWdlcigpKTsKIAogICAgIC8vIElmIHdlIGhhdmUgdG8gYWxsb2Nh
dGUgYSBuZXcgdGV4dHVyZSB3ZSBoYXZlIHRvIHVwbG9hZCB0aGUgZnVsbCBjb250ZW50cy4KLSAg
ICBpZiAoIW1fY29udGVudHNUZXh0dXJlLT5pc1ZhbGlkKG1fdXBsb2FkQnVmZmVyU2l6ZSwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkEpKQotICAgICAgICBtX3VwbG9hZFVwZGF0ZVJlY3QgPSBJbnRS
ZWN0KEludFBvaW50KDAsIDApLCBtX3VwbG9hZEJ1ZmZlclNpemUpOworICAgIGlmICghbV9jb250
ZW50c1RleHR1cmUtPmlzVmFsaWQoc2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKQorICAg
ICAgICBtX3VwbG9hZFVwZGF0ZVJlY3QgPSBJbnRSZWN0KEludFBvaW50KDAsIDApLCBzaXplKTsK
IAotICAgIGlmICghbV9jb250ZW50c1RleHR1cmUtPnJlc2VydmUobV91cGxvYWRCdWZmZXJTaXpl
LCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpIHsKKyAgICBpZiAoIW1fY29udGVudHNUZXh0dXJl
LT5yZXNlcnZlKHNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkgewogICAgICAgICBtX3Nr
aXBzRHJhdyA9IHRydWU7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBJbnRSZWN0IHNy
Y1JlY3QgPSBJbnRSZWN0KEludFBvaW50KDAsIDApLCBtX3VwbG9hZEJ1ZmZlclNpemUpOworICAg
IEludFJlY3Qgc3JjUmVjdCA9IEludFJlY3QoSW50UG9pbnQoMCwgMCksIHNpemUpOwogICAgIGlm
IChyZXF1aXJlc0NsaXBwZWRVcGRhdGVSZWN0KCkpCiAgICAgICAgIHNyY1JlY3QgPSBtX3Zpc2li
bGVSZWN0SW5MYXllckNvb3JkczsKIAotICAgIGNvbnN0IHNpemVfdCBkZXN0U3RyaWRlID0gbV91
cGxvYWRVcGRhdGVSZWN0LndpZHRoKCkgKiA0OworICAgIGNvbnN0IHNpemVfdCBkZXN0U3RyaWRl
ID0gc2l6ZS53aWR0aCgpICogNDsKICAgICBjb25zdCBzaXplX3Qgc3JjU3RyaWRlID0gc3JjUmVj
dC53aWR0aCgpICogNDsKIAotICAgIHVpbnQ4X3QqIHVwbG9hZFBpeGVscyA9IHBpeGVscyArIHNy
Y1N0cmlkZSAqIG1fdXBsb2FkVXBkYXRlUmVjdC54KCk7CisgICAgY29uc3QgdWludDhfdCogdXBs
b2FkUGl4ZWxzID0gcGl4ZWxzICsgc3JjU3RyaWRlICogbV91cGxvYWRVcGRhdGVSZWN0LngoKTsK
ICAgICBWZWN0b3I8dWludDhfdD4gdXBsb2FkQnVmZmVyOwogICAgIGlmIChzcmNTdHJpZGUgIT0g
ZGVzdFN0cmlkZSkgewogICAgICAgICB1cGxvYWRCdWZmZXIucmVzaXplKG1fdXBsb2FkVXBkYXRl
UmVjdC5oZWlnaHQoKSAqIGRlc3RTdHJpZGUpOwogICAgICAgICBmb3IgKGludCByb3cgPSAwOyBy
b3cgPCBtX3VwbG9hZFVwZGF0ZVJlY3QuaGVpZ2h0KCk7ICsrcm93KSB7CiAgICAgICAgICAgICBz
aXplX3Qgc3JjT2Zmc2V0ID0gKG1fdXBsb2FkVXBkYXRlUmVjdC55KCkgKyByb3cpICogc3JjU3Ry
aWRlICsgbV91cGxvYWRVcGRhdGVSZWN0LngoKSAqIDQ7Ci0gICAgICAgICAgICBBU1NFUlQoc3Jj
T2Zmc2V0ICsgZGVzdFN0cmlkZSA8PSBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fdXBsb2FkQnVmZmVy
U2l6ZS53aWR0aCgpICogbV91cGxvYWRCdWZmZXJTaXplLmhlaWdodCgpICogNCkpOworICAgICAg
ICAgICAgQVNTRVJUKHNyY09mZnNldCArIGRlc3RTdHJpZGUgPD0gc3RhdGljX2Nhc3Q8c2l6ZV90
PihzaXplLndpZHRoKCkgKiBzaXplLmhlaWdodCgpICogNCkpOwogICAgICAgICAgICAgc2l6ZV90
IGRlc3RPZmZzZXQgPSByb3cgKiBkZXN0U3RyaWRlOwogICAgICAgICAgICAgQVNTRVJUKGRlc3RP
ZmZzZXQgICsgZGVzdFN0cmlkZSA8PSB1cGxvYWRCdWZmZXIuc2l6ZSgpKTsKICAgICAgICAgICAg
IG1lbWNweSh1cGxvYWRCdWZmZXIuZGF0YSgpICsgZGVzdE9mZnNldCwgcGl4ZWxzICsgc3JjT2Zm
c2V0LCBkZXN0U3RyaWRlKTsKQEAgLTMyNiw4ICsyNDAsNiBAQCB2b2lkIENvbnRlbnRMYXllckNo
cm9taXVtOjp1cGRhdGVUZXh0dXJlSWZOZWVkZWQoKQogCiB2b2lkIENvbnRlbnRMYXllckNocm9t
aXVtOjpkcmF3KCkKIHsKLSAgICB1cGRhdGVUZXh0dXJlSWZOZWVkZWQoKTsKLQogICAgIGlmICht
X3NraXBzRHJhdykKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21p
dW0uaAppbmRleCBkZjQ5OGNlZDFkMDg3YWI2YjRhOTBlZjU2MWY3NzNjZWFlNTcxM2UxLi5hMTk4
OGE4Nzc0YWIyYWY5NzcyZjhjZDdiMGQ3NTZkNDVkZDEwYzFhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRM
YXllckNocm9taXVtLmgKQEAgLTM1LDYgKzM1LDcgQEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCiAKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1DYW52YXMuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC02NCwyNSArNjUsMTggQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBj
bGVhbnVwUmVzb3VyY2VzKCk7CiAgICAgYm9vbCByZXF1aXJlc0NsaXBwZWRVcGRhdGVSZWN0KCkg
Y29uc3Q7CiAgICAgdm9pZCByZXNpemVVcGxvYWRCdWZmZXIoY29uc3QgSW50U2l6ZSYpOwotICAg
IHZvaWQgcmVzaXplVXBsb2FkQnVmZmVyRm9ySW1hZ2UoY29uc3QgSW50U2l6ZSYpOwogCiAgICAg
T3duUHRyPExheWVyVGV4dHVyZT4gbV9jb250ZW50c1RleHR1cmU7CiAgICAgYm9vbCBtX3NraXBz
RHJhdzsKIAotICAgIC8vIFRoZSBzaXplIG9mIHRoZSB1cGxvYWQgYnVmZmVyIChhbHNvIHRoZSBz
aXplIG9mIG91ciBiYWNraW5nIHRleHR1cmUpLgotICAgIEludFNpemUgbV91cGxvYWRCdWZmZXJT
aXplOwogICAgIC8vIFRoZSBwb3J0aW9uIG9mIHRoZSB1cGxvYWQgYnVmZmVyIHRoYXQgaGFzIGEg
cGVuZGluZyB1cGRhdGUsIGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgdGV4dHVyZS4KICAgICBJ
bnRSZWN0IG1fdXBsb2FkVXBkYXRlUmVjdDsKLSAgICAvLyBPbiBwbGF0Zm9ybXMgdXNpbmcgU2tp
YSwgd2UgdXNlIHRoZSBza2lhOjpQbGF0Zm9ybUNhbnZhcyBmb3IgY29udGVudCBsYXllcnMKLSAg
ICAvLyBhbmQgdGhlIG1fdXBsb2FkUGl4ZWxEYXRhIGJ1ZmZlciBmb3IgaW1hZ2UgbGF5ZXJzLgot
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgdXNpbmcgbWVtb3J5IHdlIGNvbnRyb2wgZm9yIGFs
bCB1cGxvYWRzLgotI2lmIFVTRShTS0lBKQotICAgIE93blB0cjxza2lhOjpQbGF0Zm9ybUNhbnZh
cz4gbV91cGxvYWRQaXhlbENhbnZhczsKLSNlbmRpZgotICAgIE93blB0cjxWZWN0b3I8dWludDhf
dD4gPiBtX3VwbG9hZFBpeGVsRGF0YTsKKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJl
SWZOZWVkZWQoKTsKKyAgICB2b2lkIHVwZGF0ZVRleHR1cmUoY29uc3QgdWludDhfdCogcGl4ZWxz
LCBjb25zdCBJbnRTaXplJik7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCB1cGRhdGVUZXh0dXJlSWZO
ZWVkZWQoKTsKKyAgICBQbGF0Zm9ybUNhbnZhcyBtX2NhbnZhczsKIAogICAgIEludFJlY3QgbV92
aXNpYmxlUmVjdEluTGF5ZXJDb29yZHM7CiAgICAgRmxvYXRQb2ludCBtX2xheWVyQ2VudGVySW5T
dXJmYWNlQ29vcmRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggYzJhODkx
YjZkNGYzNjcyMDdmMWQwODEzNjFjYjFiNWQxMjhlMWY3Ny4uMWExYWE4OTJlMDczY2ExOTIxZWI5
MWU2NDRlMzQ3N2QyMGQxZWJhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCkBA
IC0zOCwxOCArMzgsNiBAQAogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2lu
Y2x1ZGUgIkxheWVyVGV4dHVyZS5oIgogCi0jaWYgVVNFKFNLSUEpCi0jaW5jbHVkZSAiTmF0aXZl
SW1hZ2VTa2lhLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgotI2VuZGlmCi0K
LSNpZiBQTEFURk9STShDRykKLSNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dCaXRtYXBDb250ZXh0
Lmg+Ci0jaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQ29udGV4dC5oPgotI2luY2x1ZGUgPENvcmVH
cmFwaGljcy9DR0ltYWdlLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2VuZGlmCi0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUGFzc1JlZlB0cjxJbWFnZUxheWVyQ2hyb21pdW0+IElt
YWdlTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCkBA
IC04NCw2MyArNzIsMTIgQEAgdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRz
SWZEaXJ0eSgpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBOYXRpdmVJbWFnZVB0ciBu
YXRpdmVJbWFnZSA9IG1fY29udGVudHMtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0K
LSNpZiBVU0UoU0tJQSkKLSAgICAvLyBUaGUgbGF5ZXIgY29udGFpbnMgYW4gSW1hZ2UuCi0gICAg
TmF0aXZlSW1hZ2VTa2lhKiBza2lhSW1hZ2UgPSBzdGF0aWNfY2FzdDxOYXRpdmVJbWFnZVNraWEq
PihuYXRpdmVJbWFnZSk7Ci0gICAgY29uc3QgU2tCaXRtYXAqIHNraWFCaXRtYXAgPSBza2lhSW1h
Z2U7Ci0gICAgSW50U2l6ZSBiaXRtYXBTaXplKHNraWFCaXRtYXAtPndpZHRoKCksIHNraWFCaXRt
YXAtPmhlaWdodCgpKTsKLSAgICBBU1NFUlQoc2tpYUJpdG1hcCk7Ci0jZWxpZiBQTEFURk9STShD
RykKLSAgICAvLyBOYXRpdmVJbWFnZVB0ciBpcyBhIENHSW1hZ2VSZWYgb24gTWFjIE9TIFguCi0g
ICAgaW50IHdpZHRoID0gQ0dJbWFnZUdldFdpZHRoKG5hdGl2ZUltYWdlKTsKLSAgICBpbnQgaGVp
Z2h0ID0gQ0dJbWFnZUdldEhlaWdodChuYXRpdmVJbWFnZSk7Ci0gICAgSW50U2l6ZSBiaXRtYXBT
aXplKHdpZHRoLCBoZWlnaHQpOwotI2VuZGlmCi0KLSAgICBpZiAobV91cGxvYWRCdWZmZXJTaXpl
ICE9IGJpdG1hcFNpemUpCi0gICAgICAgIHJlc2l6ZVVwbG9hZEJ1ZmZlckZvckltYWdlKGJpdG1h
cFNpemUpOwotICAgIG1fdXBsb2FkVXBkYXRlUmVjdCA9IEludFJlY3QoSW50UG9pbnQoMCwgMCks
IGJpdG1hcFNpemUpOworICAgIG1fZGVjb2RlZEltYWdlLnVwZGF0ZUZyb21JbWFnZShtX2NvbnRl
bnRzLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpKTsKK30KIAotI2lmIFVTRShTS0lBKQot
ICAgIFNrQXV0b0xvY2tQaXhlbHMgbG9jaygqc2tpYUJpdG1hcCk7Ci0gICAgLy8gRklYTUU6IGRv
IHdlIG5lZWQgdG8gc3VwcG9ydCBtb3JlIGltYWdlIGNvbmZpZ3VyYXRpb25zPwotICAgIEFTU0VS
VChza2lhQml0bWFwLT5jb25maWcoKT09IFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZyk7Ci0g
ICAgc2tpYUJpdG1hcC0+Y29weVBpeGVsc1RvKG1fdXBsb2FkUGl4ZWxEYXRhLT5kYXRhKCksIG1f
dXBsb2FkUGl4ZWxEYXRhLT5zaXplKCkpOwotI2VsaWYgUExBVEZPUk0oQ0cpCi0gICAgLy8gRklY
TUU6IHdlIHNob3VsZCBnZXQgcmlkIG9mIHRoaXMgdGVtcG9yYXJ5IGNvcHkgd2hlcmUgcG9zc2li
bGUuCi0gICAgaW50IHRlbXBSb3dCeXRlcyA9IHdpZHRoICogNDsKLSAgICAvLyBOb3RlIHdlIGRv
IG5vdCB6ZXJvIHRoaXMgdmVjdG9yIHNpbmNlIHdlIGFyZSBnb2luZyB0bwotICAgIC8vIGNvbXBs
ZXRlbHkgb3ZlcndyaXRlIGl0cyBjb250ZW50cyB3aXRoIHRoZSBpbWFnZSBiZWxvdy4KLSAgICAv
LyBUcnkgdG8gcmV1c2UgdGhlIGNvbG9yIHNwYWNlIGZyb20gdGhlIGltYWdlIHRvIHByZXNlcnZl
IGl0cyBjb2xvcnMuCi0gICAgLy8gU29tZSBpbWFnZXMgdXNlIGEgY29sb3Igc3BhY2UgKHN1Y2gg
YXMgaW5kZXhlZCkgdW5zdXBwb3J0ZWQgYnkgdGhlIGJpdG1hcCBjb250ZXh0LgotICAgIFJldGFp
blB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9yU3BhY2VSZWxlYXNlcjsKLSAgICBDR0NvbG9yU3Bh
Y2VSZWYgY29sb3JTcGFjZSA9IENHSW1hZ2VHZXRDb2xvclNwYWNlKG5hdGl2ZUltYWdlKTsKLSAg
ICBDR0NvbG9yU3BhY2VNb2RlbCBjb2xvclNwYWNlTW9kZWwgPSBDR0NvbG9yU3BhY2VHZXRNb2Rl
bChjb2xvclNwYWNlKTsKLSAgICBzd2l0Y2ggKGNvbG9yU3BhY2VNb2RlbCkgewotICAgIGNhc2Ug
a0NHQ29sb3JTcGFjZU1vZGVsTW9ub2Nocm9tZToKLSAgICBjYXNlIGtDR0NvbG9yU3BhY2VNb2Rl
bFJHQjoKLSAgICBjYXNlIGtDR0NvbG9yU3BhY2VNb2RlbENNWUs6Ci0gICAgY2FzZSBrQ0dDb2xv
clNwYWNlTW9kZWxMYWI6Ci0gICAgY2FzZSBrQ0dDb2xvclNwYWNlTW9kZWxEZXZpY2VOOgotICAg
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBjb2xvclNwYWNlUmVsZWFzZXIuYWRv
cHRDRihDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKSk7Ci0gICAgICAgIGNvbG9yU3BhY2Ug
PSBjb2xvclNwYWNlUmVsZWFzZXIuZ2V0KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBS
ZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiB0ZW1wQ29udGV4dChBZG9wdENGLCBDR0JpdG1hcENvbnRl
eHRDcmVhdGUobV91cGxvYWRQaXhlbERhdGEtPmRhdGEoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgs
IGhlaWdodCwgOCwgdGVtcFJvd0J5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclNwYWNlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0
ZU9yZGVyMzJIb3N0KSk7Ci0gICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKHRlbXBDb250ZXh0Lmdl
dCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKLSAgICBDR0NvbnRleHREcmF3SW1hZ2UodGVtcENvbnRl
eHQuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgIENHUmVjdE1ha2UoMCwgMCwgc3RhdGlj
X2Nhc3Q8Q0dGbG9hdD4od2lkdGgpLCBzdGF0aWNfY2FzdDxDR0Zsb2F0PihoZWlnaHQpKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgbmF0aXZlSW1hZ2UpOwotI2Vsc2UKLSNlcnJvciAiTmVlZCB0
byBpbXBsZW1lbnQgZm9yIHlvdXIgcGxhdGZvcm0uIgotI2VuZGlmCit2b2lkIEltYWdlTGF5ZXJD
aHJvbWl1bTo6dXBkYXRlVGV4dHVyZUlmTmVlZGVkKCkKK3sKKyAgICB1cGRhdGVUZXh0dXJlKG1f
ZGVjb2RlZEltYWdlLnBpeGVscygpLCBtX2RlY29kZWRJbWFnZS5zaXplKCkpOwogfQogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZUxheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGE1YzE0NTA5MDQ2NjI3NzVhNjVlY2NiYmY1
MDZkYjg0MTYxYzNjZWUuLmRlMDc5YzFmZWFmOTgxMjUyZWMxN2E2ODk4ODllMmMwZWY4ZjQ4ZDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0lt
YWdlTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oCkBAIC0zNSw2ICszNSw3IEBACiAjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCiAjaW5jbHVkZSAiQ29udGVudExheWVyQ2hyb21p
dW0uaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlLmgiCiAKICNpZiBQTEFURk9STShDRykKICNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CkBAIC01NSw4ICs1NiwxMSBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXRDb250ZW50cyhJbWFnZSogaW1hZ2UpOwogCiBwcml2YXRlOgorICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVUZXh0dXJlSWZOZWVkZWQoKTsKKwogICAgIEltYWdlTGF5ZXJDaHJvbWl1bShH
cmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKIAorICAgIFBsYXRmb3JtSW1hZ2UgbV9kZWNv
ZGVkSW1hZ2U7CiAgICAgUmVmUHRyPEltYWdlPiBtX2NvbnRlbnRzOwogfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNo
cm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyVGlsZXJDaHJvbWl1bS5jcHAKaW5kZXggZDBmZjU0MzRlODRhOTEzZWEyZjlhZWUwNWZlNmJj
NzE2MDM5NGRmMC4uMWMzNjUyYmM0NTBhN2IxNTk2ZWE3YWY1Y2YyZWQ1ZTc0YjY1ZjU2MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJU
aWxlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uY3BwCkBAIC0zNSwxMyArMzUsNiBAQAogI2luY2x1
ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyVGV4dHVyZS5oIgog
Ci0jaWYgVVNFKFNLSUEpCi0jaW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCi0jaW5jbHVkZSAi
UGxhdGZvcm1Db250ZXh0U2tpYS5oIgotI2VsaWYgUExBVEZPUk0oQ0cpCi0jaW5jbHVkZSA8Q29y
ZUdyYXBoaWNzL0NHQml0bWFwQ29udGV4dC5oPgotI2VuZGlmCi0KICNpbmNsdWRlIDx3dGYvUGFz
c093bkFycmF5UHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC0yNzAsNTUgKzI2Mywy
NiBAQCB2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6dXBkYXRlKFRpbGVQYWludEludGVyZmFjZSYg
cGFpbnRlciwgY29uc3QgSW50UmVjdCYgY29udAogICAgICAgICByZXR1cm47CiAKICAgICBjb25z
dCBJbnRSZWN0IHBhaW50UmVjdCA9IGxheWVyUmVjdFRvQ29udGVudFJlY3QoZGlydHlMYXllclJl
Y3QpOwotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlckNvbnRl
eHQoKTsKLSNpZiBVU0UoU0tJQSkKLSAgICBPd25QdHI8c2tpYTo6UGxhdGZvcm1DYW52YXM+IGNh
bnZhcyhuZXcgc2tpYTo6UGxhdGZvcm1DYW52YXMocGFpbnRSZWN0LndpZHRoKCksIHBhaW50UmVj
dC5oZWlnaHQoKSwgZmFsc2UpKTsKLSAgICBPd25QdHI8UGxhdGZvcm1Db250ZXh0U2tpYT4gc2tp
YUNvbnRleHQobmV3IFBsYXRmb3JtQ29udGV4dFNraWEoY2FudmFzLmdldCgpKSk7Ci0gICAgT3du
UHRyPEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0KG5ldyBHcmFwaGljc0NvbnRleHQo
cmVpbnRlcnByZXRfY2FzdDxQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCo+KHNraWFDb250ZXh0Lmdl
dCgpKSkpOwotCi0gICAgLy8gQnJpbmcgdGhlIGNhbnZhcyBpbnRvIHRoZSBjb29yZGluYXRlIHN5
c3RlbSBvZiB0aGUgcGFpbnQgcmVjdC4KLSAgICBjYW52YXMtPnRyYW5zbGF0ZShzdGF0aWNfY2Fz
dDxTa1NjYWxhcj4oLXBhaW50UmVjdC54KCkpLCBzdGF0aWNfY2FzdDxTa1NjYWxhcj4oLXBhaW50
UmVjdC55KCkpKTsKIAotICAgIHBhaW50ZXIucGFpbnQoKmdyYXBoaWNzQ29udGV4dCwgcGFpbnRS
ZWN0KTsKKyAgICBtX2NhbnZhcy5yZXNpemUocGFpbnRSZWN0LnNpemUoKSk7CisgICAgUGxhdGZv
cm1DYW52YXM6OlBhaW50ZXIgY2FudmFzUGFpbnRlcigmbV9jYW52YXMpOworICAgIGNhbnZhc1Bh
aW50ZXIuY29udGV4dCgpLT50cmFuc2xhdGUoLXBhaW50UmVjdC54KCksIC1wYWludFJlY3QueSgp
KTsKKyAgICBwYWludGVyLnBhaW50KCpjYW52YXNQYWludGVyLmNvbnRleHQoKSwgcGFpbnRSZWN0
KTsKIAotICAgIC8vIEdldCB0aGUgY29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVjdC4KLSAgICBj
b25zdCBTa0JpdG1hcCYgYml0bWFwID0gY2FudmFzLT5nZXREZXZpY2UoKS0+YWNjZXNzQml0bWFw
KGZhbHNlKTsKLSAgICBBU1NFUlQoYml0bWFwLndpZHRoKCkgPT0gcGFpbnRSZWN0LndpZHRoKCkg
JiYgYml0bWFwLmhlaWdodCgpID09IHBhaW50UmVjdC5oZWlnaHQoKSk7Ci0gICAgaWYgKGJpdG1h
cC53aWR0aCgpICE9IHBhaW50UmVjdC53aWR0aCgpIHx8IGJpdG1hcC5oZWlnaHQoKSAhPSBwYWlu
dFJlY3QuaGVpZ2h0KCkpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgdWludDhfdCogcGFpbnRQaXhl
bHMgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oYml0bWFwLmdldFBpeGVscygpKTsKLSAgICBpZiAo
IXBhaW50UGl4ZWxzKQotICAgICAgICBDUkFTSCgpOwotI2VsaWYgUExBVEZPUk0oQ0cpCi0gICAg
VmVjdG9yPHVpbnQ4X3Q+IGNhbnZhc1BpeGVsczsKLSAgICBpbnQgcm93Qnl0ZXMgPSA0ICogcGFp
bnRSZWN0LndpZHRoKCk7Ci0gICAgY2FudmFzUGl4ZWxzLnJlc2l6ZShyb3dCeXRlcyAqIHBhaW50
UmVjdC5oZWlnaHQoKSk7Ci0gICAgbWVtc2V0KGNhbnZhc1BpeGVscy5kYXRhKCksIDAsIGNhbnZh
c1BpeGVscy5zaXplKCkpOwotICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9yU3Bh
Y2UoQWRvcHRDRiwgQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkpOwotICAgIFJldGFpblB0
cjxDR0NvbnRleHRSZWY+IG1fY2dDb250ZXh0OwotICAgIG1fY2dDb250ZXh0LmFkb3B0Q0YoQ0dC
aXRtYXBDb250ZXh0Q3JlYXRlKGNhbnZhc1BpeGVscy5kYXRhKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpbnRSZWN0LndpZHRoKCks
IHBhaW50UmVjdC5oZWlnaHQoKSwgOCwgcm93Qnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZS5nZXQoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0dJbWFn
ZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0KSk7Ci0g
ICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKG1fY2dDb250ZXh0LmdldCgpLCAwLCBwYWludFJlY3Qu
aGVpZ2h0KCkpOwotICAgIENHQ29udGV4dFNjYWxlQ1RNKG1fY2dDb250ZXh0LmdldCgpLCAxLCAt
MSk7Ci0gICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gbV9ncmFwaGljc0NvbnRleHQobmV3IEdy
YXBoaWNzQ29udGV4dChtX2NnQ29udGV4dC5nZXQoKSkpOwotCi0gICAgLy8gQnJpbmcgdGhlIENv
cmVHcmFwaGljcyBjb250ZXh0IGludG8gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBwYWlu
dCByZWN0LgotICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShtX2NnQ29udGV4dC5nZXQoKSwgLXBh
aW50UmVjdC54KCksIC1wYWludFJlY3QueSgpKTsKLSAgICBwYWludGVyLnBhaW50KCptX2dyYXBo
aWNzQ29udGV4dCwgcGFpbnRSZWN0KTsKLQotICAgIC8vIEdldCB0aGUgY29udGVudHMgb2YgdGhl
IHVwZGF0ZWQgcmVjdC4KLSAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihDR0JpdG1hcENvbnRl
eHRHZXRXaWR0aChtX2NnQ29udGV4dC5nZXQoKSkpID09IHBhaW50UmVjdC53aWR0aCgpICYmIHN0
YXRpY19jYXN0PGludD4oQ0dCaXRtYXBDb250ZXh0R2V0SGVpZ2h0KG1fY2dDb250ZXh0LmdldCgp
KSkgPT0gcGFpbnRSZWN0LmhlaWdodCgpKTsKLSAgICB1aW50OF90KiBwYWludFBpeGVscyA9IHN0
YXRpY19jYXN0PHVpbnQ4X3QqPihjYW52YXNQaXhlbHMuZGF0YSgpKTsKLSNlbHNlCi0jZXJyb3Ig
Ik5lZWQgdG8gaW1wbGVtZW50IGZvciB5b3VyIHBsYXRmb3JtLiIKLSNlbmRpZgorICAgIFBsYXRm
b3JtQ2FudmFzOjpBdXRvTG9ja2VyIGxvY2tlcigmbV9jYW52YXMpOworICAgIHVwZGF0ZUZyb21Q
aXhlbHMocGFpbnRSZWN0LCBsb2NrZXIucGl4ZWxzKCkpOworfQogCit2b2lkIExheWVyVGlsZXJD
aHJvbWl1bTo6dXBkYXRlRnJvbVBpeGVscyhjb25zdCBJbnRSZWN0JiBwYWludFJlY3QsIGNvbnN0
IHVpbnQ4X3QqIHBhaW50UGl4ZWxzKQorewogICAgIC8vIFBhaW50aW5nIGNvdWxkIGNhdXNlIGNv
bXBvc2l0aW5nIHRvIGdldCB0dXJuZWQgb2ZmLCB3aGljaCBtYXkgY2F1c2UgdGhlIHRpbGVyIHRv
IGJlY29tZSBpbnZhbGlkYXRlZCBtaWQtdXBkYXRlLgogICAgIGlmICghbV90aWxlcy5zaXplKCkp
CiAgICAgICAgIHJldHVybjsKIAorICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5
ZXJSZW5kZXJlckNvbnRleHQoKTsKKworICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207
CisgICAgY29udGVudFJlY3RUb1RpbGVJbmRpY2VzKHBhaW50UmVjdCwgbGVmdCwgdG9wLCByaWdo
dCwgYm90dG9tKTsKICAgICBmb3IgKGludCBqID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7CiAg
ICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyArK2kpIHsKICAgICAgICAgICAg
IFRpbGUqIHRpbGUgPSBtX3RpbGVzW3RpbGVJbmRleChpLCBqKV0uZ2V0KCk7CkBAIC0zNTgsNyAr
MzIyLDcgQEAgdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OnVwZGF0ZShUaWxlUGFpbnRJbnRlcmZh
Y2UmIHBhaW50ZXIsIGNvbnN0IEludFJlY3QmIGNvbnQKICAgICAgICAgICAgIGlmIChwYWludE9m
ZnNldC55KCkgKyBkZXN0UmVjdC5oZWlnaHQoKSA+IHBhaW50UmVjdC5oZWlnaHQoKSkKICAgICAg
ICAgICAgICAgICBDUkFTSCgpOwogCi0gICAgICAgICAgICB1aW50OF90KiBwaXhlbFNvdXJjZTsK
KyAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHBpeGVsU291cmNlOwogICAgICAgICAgICAgaWYg
KHBhaW50UmVjdC53aWR0aCgpID09IHNvdXJjZVJlY3Qud2lkdGgoKSAmJiAhcGFpbnRPZmZzZXQu
eCgpKQogICAgICAgICAgICAgICAgIHBpeGVsU291cmNlID0gJnBhaW50UGl4ZWxzWzQgKiBwYWlu
dE9mZnNldC55KCkgKiBwYWludFJlY3Qud2lkdGgoKV07CiAgICAgICAgICAgICBlbHNlIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
VGlsZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJUaWxlckNocm9taXVtLmgKaW5kZXggMzdlNTBlZmM2NjRlYjkyMzRhODBmM2M1ZWQ2
MzNkZTRiM2FjZjM1Mi4uYmRiMzVhNWM0ODE4MjU3YzkzYmEzMWRkMjNhZGU2NzZlNjI3M2I4MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJUaWxlckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmgKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1
ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllclRleHR1cmUuaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybUNhbnZhcy5oIgogI2luY2x1ZGUgIlRpbGluZ0RhdGEuaCIKICNpbmNsdWRlIDx3
dGYvT3duQXJyYXlQdHIuaD4KIApAQCAtNTYsNiArNTcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBp
bnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CiAgICAgdm9pZCBpbnZh
bGlkYXRlRW50aXJlTGF5ZXIoKTsKICAgICB2b2lkIHVwZGF0ZShUaWxlUGFpbnRJbnRlcmZhY2Um
IHBhaW50ZXIsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKKyAgICB2b2lkIHVwZGF0ZUZy
b21QaXhlbHMoY29uc3QgSW50UmVjdCYgcGFpbnRSZWN0LCBjb25zdCB1aW50OF90KiBwaXhlbHMp
OwogICAgIHZvaWQgZHJhdyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CiAKICAgICAvLyBT
ZXQgcG9zaXRpb24gb2YgdGhpcyB0aWxlZCBsYXllciBpbiBjb250ZW50IHNwYWNlLgpAQCAtMTI1
LDYgKzEyNyw4IEBAIHByaXZhdGU6CiAgICAgLy8gTGluZWFyIGFycmF5IG9mIHVudXNlZCB0aWxl
cy4KICAgICBWZWN0b3I8T3duUHRyPFRpbGU+ID4gbV91bnVzZWRUaWxlczsKIAorICAgIFBsYXRm
b3JtQ2FudmFzIG1fY2FudmFzOworCiAgICAgLy8gQ2FjaGUgYSB0aWxlLXNpemVkIHBpeGVsIGJ1
ZmZlciB0byBkcmF3IGludG8uCiAgICAgT3duQXJyYXlQdHI8dWludDhfdD4gbV90aWxlUGl4ZWxz
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9QbGF0Zm9ybUNhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODNlMDZlMGYwYWUzYjljY2Mw
NTYyNzBhODBlYTRkMjFkOWViMzQyNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtQ2FudmFzLmNwcApAQCAtMCwwICsx
LDExNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlBsYXRmb3Jt
Q2FudmFzLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKworI2lmIFVTRShTS0lB
KQorI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4
dFNraWEuaCIKKyNpbmNsdWRlICJTa0NvbG9yUHJpdi5oIgorI2luY2x1ZGUgInNraWEvZXh0L3Bs
YXRmb3JtX2NhbnZhcy5oIgorI2VsaWYgUExBVEZPUk0oQ0cpCisjaW5jbHVkZSA8Q29yZUdyYXBo
aWNzL0NHQml0bWFwQ29udGV4dC5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
UGxhdGZvcm1DYW52YXM6OlBsYXRmb3JtQ2FudmFzKCkKK3sKK30KKworUGxhdGZvcm1DYW52YXM6
On5QbGF0Zm9ybUNhbnZhcygpCit7Cit9CisKK3ZvaWQgUGxhdGZvcm1DYW52YXM6OnJlc2l6ZShj
b25zdCBJbnRTaXplJiBzaXplKQoreworICAgIG1fc2l6ZSA9IHNpemU7CisjaWYgVVNFKFNLSUEp
CisgICAgbV9za2lhQ2FudmFzID0gbmV3IHNraWE6OlBsYXRmb3JtQ2FudmFzKHNpemUud2lkdGgo
KSwgc2l6ZS5oZWlnaHQoKSwgZmFsc2UpOworI2VsaWYgUExBVEZPUk0oQ0cpCisgICAgc2l6ZV90
IGJ1ZmZlclNpemUgPSBzaXplLndpZHRoKCkgKiBzaXplLmhlaWdodCgpICogNDsKKyAgICBtX3Bp
eGVsRGF0YSA9IGFkb3B0QXJyYXlQdHIobmV3IHVpbnQ4X3RbYnVmZmVyU2l6ZV0pOworICAgIG1l
bXNldChtX3BpeGVsRGF0YS5nZXQoKSwgMCwgYnVmZmVyU2l6ZSk7CisjZW5kaWYKK30KKworUGxh
dGZvcm1DYW52YXM6OkF1dG9Mb2NrZXI6OkF1dG9Mb2NrZXIoUGxhdGZvcm1DYW52YXMqIGNhbnZh
cykKKyAgICA6IG1fY2FudmFzKGNhbnZhcykKKyAgICAsIG1fcGl4ZWxzKDApCit7CisjaWYgVVNF
KFNLSUEpCisgICAgaWYgKG1fY2FudmFzLT5tX3NraWFDYW52YXMpIHsKKyAgICAgICAgbV9iaXRt
YXAgPSAmbV9jYW52YXMtPm1fc2tpYUNhbnZhcy0+Z2V0RGV2aWNlKCktPmFjY2Vzc0JpdG1hcChm
YWxzZSk7CisgICAgICAgIG1fYml0bWFwLT5sb2NrUGl4ZWxzKCk7CisKKyAgICAgICAgaWYgKG1f
Yml0bWFwLT5jb25maWcoKSA9PSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpCisgICAgICAg
ICAgICBtX3BpeGVscyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX2JpdG1hcC0+Z2V0UGl4ZWxz
KCkpOworICAgIH0gZWxzZQorICAgICAgICBtX2JpdG1hcCA9IDA7CisjZWxpZiBQTEFURk9STShD
RykKKyAgICBtX3BpeGVscyA9ICZjYW52YXMtPm1fcGl4ZWxEYXRhWzBdOworI2VuZGlmCit9CisK
K1BsYXRmb3JtQ2FudmFzOjpBdXRvTG9ja2VyOjp+QXV0b0xvY2tlcigpCit7CisjaWYgVVNFKFNL
SUEpCisgICAgaWYgKG1fYml0bWFwKQorICAgICAgICBtX2JpdG1hcC0+dW5sb2NrUGl4ZWxzKCk7
CisjZW5kaWYKK30KKworUGxhdGZvcm1DYW52YXM6OlBhaW50ZXI6OlBhaW50ZXIoUGxhdGZvcm1D
YW52YXMqIGNhbnZhcykKK3sKKyNpZiBVU0UoU0tJQSkKKyAgICBtX3NraWFDb250ZXh0ID0gYWRv
cHRQdHIobmV3IFBsYXRmb3JtQ29udGV4dFNraWEoY2FudmFzLT5tX3NraWFDYW52YXMuZ2V0KCkp
KTsKKworICAgIC8vIFRoaXMgaXMgbmVlZGVkIHRvIGdldCB0ZXh0IHRvIHNob3cgdXAgY29ycmVj
dGx5LgorICAgIG1fc2tpYUNvbnRleHQtPnNldERyYXdpbmdUb0ltYWdlQnVmZmVyKHRydWUpOwor
CisgICAgbV9jb250ZXh0ID0gYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dChyZWludGVycHJl
dF9jYXN0PFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kj4obV9za2lhQ29udGV4dC5nZXQoKSkpKTsK
KyNlbGlmIFBMQVRGT1JNKENHKQorCisgICAgbV9jb2xvclNwYWNlID0gQ0dDb2xvclNwYWNlQ3Jl
YXRlRGV2aWNlUkdCKCk7CisgICAgc2l6ZV90IHJvd0J5dGVzID0gY2FudmFzLT5zaXplKCkud2lk
dGgoKSAqIDQ7CisgICAgbV9jb250ZXh0Q0cgPSBDR0JpdG1hcENvbnRleHRDcmVhdGUoY2FudmFz
LT5tX3BpeGVsRGF0YS5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYW52YXMtPnNpemUoKS53aWR0aCgpLCBjYW52YXMtPnNpemUoKS5oZWlnaHQoKSwgOCwg
cm93Qnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xv
clNwYWNlLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtD
R0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3Qp
OworICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShtX2NvbnRleHRDRy5nZXQoKSwgMCwgY2FudmFz
LT5zaXplKCkuaGVpZ2h0KCkpOworICAgIENHQ29udGV4dFNjYWxlQ1RNKG1fY29udGV4dENHLmdl
dCgpLCAxLCAtMSk7CisgICAgbV9jb250ZXh0ID0gYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4
dChtX2NvbnRleHRDRy5nZXQoKSkpOworI2VuZGlmCit9CisKK1BsYXRmb3JtQ2FudmFzOjpQYWlu
dGVyOjp+UGFpbnRlcigpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtQ2Fu
dmFzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9y
bUNhbnZhcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY2MmExNmFhOGQxNTJkMTNmYWUzNTU0NDJlOTEwMDcwNmY4
NmM5ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5oCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBQbGF0Zm9ybUNhbnZhc19oCisjZGVmaW5lIFBsYXRmb3JtQ2FudmFzX2gKKworI2lmIFVT
RShTS0lBKQorbmFtZXNwYWNlIHNraWEgeyBjbGFzcyBQbGF0Zm9ybUNhbnZhczsgfQorY2xhc3Mg
U2tCaXRtYXA7CisjZW5kaWYKKworI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKKyNpZiBQTEFURk9STShD
RykKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dDb2xvclNwYWNlLmg+CisjaW5jbHVkZSA8Q29y
ZUdyYXBoaWNzL0NHQ29udGV4dC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKKworI2lmIFVTRShTS0lBKQorY2xhc3MgUGxhdGZvcm1D
b250ZXh0U2tpYTsKKyNlbmRpZgorCisvLyBBIDJEIGJ1ZmZlciBvZiBwaXhlbHMgd2l0aCBhbiBh
c3NvY2lhdGVkIEdyYXBoaWNzQ29udGV4dC4KK2NsYXNzIFBsYXRmb3JtQ2FudmFzIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShQbGF0Zm9ybUNhbnZhcyk7CitwdWJsaWM6CisgICAgUGxhdGZv
cm1DYW52YXMoKTsKKyAgICB+UGxhdGZvcm1DYW52YXMoKTsKKworICAgIC8vIFNjb3BlZCBsb2Nr
IGNsYXNzIHRvIGdldCB0ZW1wb3JhcnkgYWNjZXNzIHRvIHRoaXMgY2FudmFzJ3MgcGl4ZWxzLgor
ICAgIGNsYXNzIEF1dG9Mb2NrZXIgeworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBdXRv
TG9ja2VyKTsKKyAgICBwdWJsaWM6CisgICAgICAgIEF1dG9Mb2NrZXIoUGxhdGZvcm1DYW52YXMq
KTsKKyAgICAgICAgfkF1dG9Mb2NrZXIoKTsKKworICAgICAgICBjb25zdCB1aW50OF90KiBwaXhl
bHMoKSBjb25zdCB7IHJldHVybiBtX3BpeGVsczsgfQorICAgIHByaXZhdGU6CisgICAgICAgIFBs
YXRmb3JtQ2FudmFzKiBtX2NhbnZhczsKKyNpZiBVU0UoU0tJQSkKKyAgICAgICAgY29uc3QgU2tC
aXRtYXAqIG1fYml0bWFwOworI2VuZGlmCisgICAgICAgIHVpbnQ4X3QqIG1fcGl4ZWxzOworICAg
IH07CisKKyAgICAvLyBTY29wZWQgbG9jayBjbGFzcyB0byBnZXQgdGVtcG9yYXJ5IGFjY2VzcyB0
byBwYWludCBpbnRvIHRoaXMgY2FudmFzLgorICAgIGNsYXNzIFBhaW50ZXIgeworICAgICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShQYWludGVyKTsKKyAgICBwdWJsaWM6CisgICAgICAgIFBhaW50
ZXIoUGxhdGZvcm1DYW52YXMqKTsKKyAgICAgICAgflBhaW50ZXIoKTsKKworICAgICAgICBHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0K
KyAgICBwcml2YXRlOgorICAgICAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7
CisjaWYgVVNFKFNLSUEpCisgICAgICAgIE93blB0cjxQbGF0Zm9ybUNvbnRleHRTa2lhPiBtX3Nr
aWFDb250ZXh0OworI2VsaWYgUExBVEZPUk0oQ0cpCisgICAgICAgIFJldGFpblB0cjxDR0NvbG9y
U3BhY2VSZWY+IG1fY29sb3JTcGFjZTsKKyAgICAgICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4g
bV9jb250ZXh0Q0c7CisjZW5kaWYKKyAgICB9OworCisgICAgdm9pZCByZXNpemUoY29uc3QgSW50
U2l6ZSYpOworICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorCitw
cml2YXRlOgorI2lmIFVTRShTS0lBKQorICAgIE93blB0cjxza2lhOjpQbGF0Zm9ybUNhbnZhcz4g
bV9za2lhQ2FudmFzOworI2VsaWYgUExBVEZPUk0oQ0cpCisgICAgT3duQXJyYXlQdHI8dWludDhf
dD4gbV9waXhlbERhdGE7CisjZW5kaWYKKyAgICBJbnRTaXplIG1fc2l6ZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUltYWdlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtSW1hZ2UuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjk0ODVmODNhOTJjMDczN2QyZTlmMjMzZTA1NDk1ZTI2YTJlMjFmOTIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9y
bUltYWdlLmNwcApAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2UuaCIKKworI2lmIFVTRShTS0lBKQorI2luY2x1ZGUg
Ik5hdGl2ZUltYWdlU2tpYS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKKyNl
bGlmIFBMQVRGT1JNKENHKQorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0JpdG1hcENvbnRleHQu
aD4KKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dDb250ZXh0Lmg+CisjaW5jbHVkZSA8Q29yZUdy
YXBoaWNzL0NHSW1hZ2UuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjZWxzZQorI2Vy
cm9yICJOZWVkIHRvIGltcGxlbWVudCBmb3IgeW91ciBwbGF0Zm9ybSIKKyNlbmRpZgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1BsYXRmb3JtSW1hZ2U6OlBsYXRmb3JtSW1hZ2UoKQoreworfQor
Cit2b2lkIFBsYXRmb3JtSW1hZ2U6OnVwZGF0ZUZyb21JbWFnZShOYXRpdmVJbWFnZVB0ciBuYXRp
dmVJbWFnZSkKK3sKKyNpZiBVU0UoU0tJQSkKKyAgICAvLyBUaGUgbGF5ZXIgY29udGFpbnMgYW4g
SW1hZ2UuCisgICAgTmF0aXZlSW1hZ2VTa2lhKiBza2lhSW1hZ2UgPSBzdGF0aWNfY2FzdDxOYXRp
dmVJbWFnZVNraWEqPihuYXRpdmVJbWFnZSk7CisgICAgY29uc3QgU2tCaXRtYXAqIHNraWFCaXRt
YXAgPSBza2lhSW1hZ2U7CisKKyAgICBJbnRTaXplIGJpdG1hcFNpemUoc2tpYUJpdG1hcC0+d2lk
dGgoKSwgc2tpYUJpdG1hcC0+aGVpZ2h0KCkpOworICAgIEFTU0VSVChza2lhQml0bWFwKTsKKyNl
bGlmIFBMQVRGT1JNKENHKQorICAgIC8vIE5hdGl2ZUltYWdlUHRyIGlzIGEgQ0dJbWFnZVJlZiBv
biBNYWMgT1MgWC4KKyAgICBpbnQgd2lkdGggPSBDR0ltYWdlR2V0V2lkdGgobmF0aXZlSW1hZ2Up
OworICAgIGludCBoZWlnaHQgPSBDR0ltYWdlR2V0SGVpZ2h0KG5hdGl2ZUltYWdlKTsKKyAgICBJ
bnRTaXplIGJpdG1hcFNpemUod2lkdGgsIGhlaWdodCk7CisjZW5kaWYKKworICAgIHNpemVfdCBi
dWZmZXJTaXplID0gYml0bWFwU2l6ZS53aWR0aCgpICogYml0bWFwU2l6ZS5oZWlnaHQoKSAqIDQ7
CisgICAgaWYgKG1fc2l6ZSAhPSBiaXRtYXBTaXplKSB7CisgICAgICAgIG1fcGl4ZWxEYXRhID0g
YWRvcHRBcnJheVB0cihuZXcgdWludDhfdFtidWZmZXJTaXplXSk7CisgICAgICAgIG1lbXNldCht
X3BpeGVsRGF0YS5nZXQoKSwgMCwgYnVmZmVyU2l6ZSk7CisgICAgICAgIG1fc2l6ZSA9IGJpdG1h
cFNpemU7CisgICAgfQorCisjaWYgVVNFKFNLSUEpCisgICAgU2tBdXRvTG9ja1BpeGVscyBsb2Nr
KCpza2lhQml0bWFwKTsKKyAgICAvLyBGSVhNRTogZG8gd2UgbmVlZCB0byBzdXBwb3J0IG1vcmUg
aW1hZ2UgY29uZmlndXJhdGlvbnM/CisgICAgQVNTRVJUKHNraWFCaXRtYXAtPmNvbmZpZygpPT0g
U2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnKTsKKyAgICBza2lhQml0bWFwLT5jb3B5UGl4ZWxz
VG8obV9waXhlbERhdGEuZ2V0KCksIGJ1ZmZlclNpemUpOworI2VsaWYgUExBVEZPUk0oQ0cpCisg
ICAgLy8gRklYTUU6IHdlIHNob3VsZCBnZXQgcmlkIG9mIHRoaXMgdGVtcG9yYXJ5IGNvcHkgd2hl
cmUgcG9zc2libGUuCisgICAgaW50IHRlbXBSb3dCeXRlcyA9IHdpZHRoICogNDsKKyAgICAvLyBO
b3RlIHdlIGRvIG5vdCB6ZXJvIHRoaXMgdmVjdG9yIHNpbmNlIHdlIGFyZSBnb2luZyB0bworICAg
IC8vIGNvbXBsZXRlbHkgb3ZlcndyaXRlIGl0cyBjb250ZW50cyB3aXRoIHRoZSBpbWFnZSBiZWxv
dy4KKyAgICAvLyBUcnkgdG8gcmV1c2UgdGhlIGNvbG9yIHNwYWNlIGZyb20gdGhlIGltYWdlIHRv
IHByZXNlcnZlIGl0cyBjb2xvcnMuCisgICAgLy8gU29tZSBpbWFnZXMgdXNlIGEgY29sb3Igc3Bh
Y2UgKHN1Y2ggYXMgaW5kZXhlZCkgdW5zdXBwb3J0ZWQgYnkgdGhlIGJpdG1hcCBjb250ZXh0Lgor
ICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9yU3BhY2VSZWxlYXNlcjsKKyAgICBD
R0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSA9IENHSW1hZ2VHZXRDb2xvclNwYWNlKG5hdGl2ZUlt
YWdlKTsKKyAgICBDR0NvbG9yU3BhY2VNb2RlbCBjb2xvclNwYWNlTW9kZWwgPSBDR0NvbG9yU3Bh
Y2VHZXRNb2RlbChjb2xvclNwYWNlKTsKKyAgICBzd2l0Y2ggKGNvbG9yU3BhY2VNb2RlbCkgewor
ICAgIGNhc2Uga0NHQ29sb3JTcGFjZU1vZGVsTW9ub2Nocm9tZToKKyAgICBjYXNlIGtDR0NvbG9y
U3BhY2VNb2RlbFJHQjoKKyAgICBjYXNlIGtDR0NvbG9yU3BhY2VNb2RlbENNWUs6CisgICAgY2Fz
ZSBrQ0dDb2xvclNwYWNlTW9kZWxMYWI6CisgICAgY2FzZSBrQ0dDb2xvclNwYWNlTW9kZWxEZXZp
Y2VOOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBjb2xvclNwYWNlUmVs
ZWFzZXIuYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKSk7CisgICAgICAgIGNv
bG9yU3BhY2UgPSBjb2xvclNwYWNlUmVsZWFzZXIuZ2V0KCk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiB0ZW1wQ29udGV4dChBZG9wdENGLCBDR0Jp
dG1hcENvbnRleHRDcmVhdGUobV9waXhlbERhdGEuZ2V0KCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRo
LCBoZWlnaHQsIDgsIHRlbXBSb3dCeXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1hcEJ5
dGVPcmRlcjMySG9zdCkpOworICAgIENHQ29udGV4dFNldEJsZW5kTW9kZSh0ZW1wQ29udGV4dC5n
ZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7CisgICAgQ0dDb250ZXh0RHJhd0ltYWdlKHRlbXBDb250
ZXh0LmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICBDR1JlY3RNYWtlKDAsIDAsIHN0YXRp
Y19jYXN0PENHRmxvYXQ+KHdpZHRoKSwgc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oaGVpZ2h0KSksCisg
ICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUltYWdlKTsKKyNlbHNlCisjZXJyb3IgIk5lZWQg
dG8gaW1wbGVtZW50IGZvciB5b3VyIHBsYXRmb3JtLiIKKyNlbmRpZgorfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9QbGF0Zm9ybUltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9QbGF0Zm9ybUltYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTIxNzAwNThmMDVlNjk2
Nzc0YjQzZGI2OWMzMTMyZjAzNDYyYmM0MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtSW1hZ2UuaApAQCAtMCwwICsx
LDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBQbGF0Zm9ybUltYWdlX2gKKyNkZWZpbmUgUGxhdGZvcm1J
bWFnZV9oCisKKyNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgorI2luY2x1ZGUgIkludFNpemUuaCIK
KyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQbGF0Zm9ybUltYWdlIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShQbGF0Zm9ybUltYWdlKTsKK3B1YmxpYzoKKyAgICBQbGF0Zm9y
bUltYWdlKCk7CisKKyAgICB2b2lkIHVwZGF0ZUZyb21JbWFnZShOYXRpdmVJbWFnZVB0cik7Cisg
ICAgY29uc3QgdWludDhfdCogcGl4ZWxzKCkgY29uc3QgeyByZXR1cm4gbV9waXhlbERhdGEgPyAm
bV9waXhlbERhdGFbMF0gOiAwOyB9CisgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9zaXplOyB9CisKK3ByaXZhdGU6CisgICAgT3duQXJyYXlQdHI8dWludDhfdD4gbV9waXhlbERh
dGE7CisgICAgSW50U2l6ZSBtX3NpemU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZgo=
</data>
<flag name="review"
          id="75801"
          type_id="1"
          status="+"
          setter="jamesr"
    />
          </attachment>
      

    </bug>

</bugzilla>