<?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>89474</bug_id>
          
          <creation_ts>2012-06-19 08:36:35 -0700</creation_ts>
          <short_desc>[chromium] Use CCRenderPassTextureAllocator in LayerRendererChromium</short_desc>
          <delta_ts>2012-06-27 13:55:28 -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>INVALID</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>88924</dependson>
    
    <dependson>89485</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dana Jansens">danakj</reporter>
          <assigned_to name="Dana Jansens">danakj</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>piman</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>652473</commentid>
    <comment_count>0</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-19 08:36:35 -0700</bug_when>
    <thetext>[chromium] Use CCRenderPassTextureAllocator in LayerRendererChromium</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652483</commentid>
    <comment_count>1</comment_count>
      <attachid>148343</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-19 08:40:47 -0700</bug_when>
    <thetext>Created attachment 148343
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652486</commentid>
    <comment_count>2</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-19 08:41:07 -0700</bug_when>
    <thetext>This is what it looks like when hooking up the RenderPassTextureAllocator</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653522</commentid>
    <comment_count>3</comment_count>
      <attachid>148343</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-20 08:55:50 -0700</bug_when>
    <thetext>Comment on attachment 148343
Patch

misclick ews :&lt; the button is so big!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653559</commentid>
    <comment_count>4</comment_count>
      <attachid>148343</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-20 09:43:28 -0700</bug_when>
    <thetext>Comment on attachment 148343
Patch

Attachment 148343 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13003243</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653942</commentid>
    <comment_count>5</comment_count>
      <attachid>148666</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-20 15:26:27 -0700</bug_when>
    <thetext>Created attachment 148666
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654805</commentid>
    <comment_count>6</comment_count>
      <attachid>148666</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-06-21 12:43:45 -0700</bug_when>
    <thetext>Comment on attachment 148666
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderPassTextureAllocator.cpp:125
&gt; +void CCRenderPassTextureAllocator::decideAllocationsForFrame(const CCRenderPassList&amp; renderPassesInDrawOrder, const IntSize&amp; deviceViewportSize, size_t memoryLimitBytes)

How does this function interact with removing cached frames and damage?

(1) Considering some surfaces &quot;in use&quot; when they&apos;re not actually going to get drawn will cause us to overestimate our high water mark of texture usage and toss out more textures than we actually need to. For example, assume you have a super deep dependency subtree of render passes, but the one at the top has no damage.  The removing cached passes function occurs after this and would remove all but the top.  However, the only textures that you&apos;d need to save would be the top one and all of its direct dependencies.  This may be way less than the amount of in use textures.

(2) Without considering damage, are you possibly considering saving textures that we need to completely redraw? (I suppose we could consider doing partial surface updates.)

(3) Without considering damage, are you possibly considering saving textures that aren&apos;t going to get drawn, because we&apos;ve saved some ancestor texture that depends on it?

PS Would it make sense to just have render passes know explicitly about their dependent render passes, rather than having to paw through the quad list?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654891</commentid>
    <comment_count>7</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-21 14:45:54 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 148666 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=148666&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderPassTextureAllocator.cpp:125
&gt; &gt; +void CCRenderPassTextureAllocator::decideAllocationsForFrame(const CCRenderPassList&amp; renderPassesInDrawOrder, const IntSize&amp; deviceViewportSize, size_t memoryLimitBytes)
&gt; 
&gt; How does this function interact with removing cached frames and damage?

There&apos;s no notion of damage in the RenderPass list right now so it is ignoring the whole idea. I&apos;m planning to add the contentsDamaged() flag in there somewhere so it can drop textures from the previous frame that are damaged immediately and they don&apos;t cost budget.

&gt; (1) Considering some surfaces &quot;in use&quot; when they&apos;re not actually going to get drawn will cause us to overestimate our high water mark of texture usage and toss out more textures than we actually need to. For example, assume you have a super deep dependency subtree of render passes, but the one at the top has no damage.  The removing cached passes function occurs after this and would remove all but the top.  However, the only textures that you&apos;d need to save would be the top one and all of its direct dependencies.  This may be way less than the amount of in use textures.

Yes. I think we would like to save all the textures if we can, as it allows us to recover optimally from any damage, but they should not count as being needed, and should be dropped more easily.

&gt; (2) Without considering damage, are you possibly considering saving textures that we need to completely redraw? (I suppose we could consider doing partial surface updates.)

I am thinking about this, and perhaps reusing textures more aggressively for different surfaces to avoid texture delete/create.

&gt; (3) Without considering damage, are you possibly considering saving textures that aren&apos;t going to get drawn, because we&apos;ve saved some ancestor texture that depends on it?

Not /because/ of it, but I think we should save as many textures, overall, as fit within our budget.

&gt; PS Would it make sense to just have render passes know explicitly about their dependent render passes, rather than having to paw through the quad list?

Given the size of the quad lists, I&apos;m not sure..</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148343</attachid>
            <date>2012-06-19 08:40:47 -0700</date>
            <delta_ts>2012-06-20 15:26:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89474-20120619114047.patch</filename>
            <type>text/plain</type>
            <size>23772</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwNTk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjdiYWQyYTY5YWQzMTQ2
ZTgyZWNiZDkzOTU1YzhkNjNkNTFlYTU3My4uY2IxY2Y4YzcxMGRkZGUyYTEwOTg1NzNjNTMzMDFh
OGMzZjVmNDc5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDEyLTA2LTE5ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gVXNl
IENDUmVuZGVyUGFzc1RleHR1cmVBbGxvY2F0b3IgaW4gTGF5ZXJSZW5kZXJlckNocm9taXVtCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTQ3NAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVsZWFzZVJlbmRlclBhc3NU
ZXh0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnZpZXdw
b3J0Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdSZW5kZXJQYXNzKToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5RmlsdGVycyk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdCYWNrZ3JvdW5kRmlsdGVycyk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSZW5kZXJQYXNz
UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdIZWFk
c1VwRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNv
cHlUZXh0dXJlVG9GcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVy
Q2hyb21pdW06OmdldEZyYW1lYnVmZmVyVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OmlzQ3VycmVudFJlbmRlclBhc3MpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpiZWdpbkRyYXdpbmdUb1JlbmRlclBhc3MpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06
OnJlc3VtZURyYXdpbmdUb1JlbmRlclBhc3MpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjplbmREcmF3aW5nVG9SZW5kZXJQYXNzKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6YmVnaW5EcmF3aW5nVG9TY29wZWRUZXh0dXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZW5kRHJhd2luZ1RvU2NvcGVk
VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmJpbmRG
cmFtZWJ1ZmZlclRvVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAgKExheWVyUmVu
ZGVyZXJDaHJvbWl1bSk6CisKIDIwMTItMDYtMTIgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBBZGQgYW4gYWxsb2NhdGlvbiBzdGVwIGZv
ciBDQ1JlbmRlcmVyIGJlZm9yZSBkcmF3aW5nIGEgZnJhbWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uY3BwCmluZGV4IDQzNmYyZGNlMjdmOWRhMWFkZWEyNmVjMDBkNzYyMWY0Y2Zl
ZGRlODMuLmI0OTE4YWYxY2U5N2E4NWYyOWU0ZDllY2E0NWFiNzRiOWI2YTRiNmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtNzIsNiArNzIsNyBAQAogI2luY2x1
ZGUgImNjL0NDVGlsZURyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NZVVZWaWRlb0RyYXdRdWFk
LmgiCiAjaW5jbHVkZSA8cHVibGljL1dlYlZpZGVvRnJhbWUuaD4KKyNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CiAKQEAgLTI0Nyw3ICsyNDgsNyBAQCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OkxheWVyUmVuZGVyZXJDaHJvbWl1bShDQ1JlbmRlcmVyQ2xpZW50KiBjbGllbnQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0dXJlVXBsb2FkZXJPcHRp
b24gdGV4dHVyZVVwbG9hZGVyU2V0dGluZykKICAgICA6IENDUmVuZGVyZXIoY2xpZW50KQogICAg
ICwgbV9jdXJyZW50UmVuZGVyUGFzcygwKQotICAgICwgbV9jdXJyZW50TWFuYWdlZFRleHR1cmUo
MCkKKyAgICAsIG1fY3VycmVudFNjb3BlZFRleHR1cmUoMCkKICAgICAsIG1fb2Zmc2NyZWVuRnJh
bWVidWZmZXJJZCgwKQogICAgICwgbV9zaGFyZWRHZW9tZXRyeVF1YWQoRmxvYXRSZWN0KC0wLjVm
LCAtMC41ZiwgMS4wZiwgMS4wZikpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKQEAgLTM5MSw4
ICszOTIsOCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0VmlzaWJsZShib29sIHZp
c2libGUpCiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZWxlYXNlUmVuZGVyUGFzc1Rl
eHR1cmVzKCkKIHsKLSAgICBpZiAobV9pbXBsVGV4dHVyZU1hbmFnZXIpCi0gICAgICAgIG1faW1w
bFRleHR1cmVNYW5hZ2VyLT5ldmljdEFuZERlbGV0ZUFsbFRleHR1cmVzKG1faW1wbFRleHR1cmVB
bGxvY2F0b3IuZ2V0KCkpOworICAgIGlmIChtX3JlbmRlclBhc3NUZXh0dXJlQWxsb2NhdG9yKQor
ICAgICAgICBtX3JlbmRlclBhc3NUZXh0dXJlQWxsb2NhdG9yLT5jbGVhcigpOwogfQogCiB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dmlld3BvcnRDaGFuZ2VkKCkKQEAgLTQwMCw3ICs0MDEs
NyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dmlld3BvcnRDaGFuZ2VkKCkKICAgICBt
X2lzVmlld3BvcnRDaGFuZ2VkID0gdHJ1ZTsKIAogICAgIC8vIFJlc2V0IHRoZSBjdXJyZW50IFJl
bmRlclBhc3MgdG8gZm9yY2UgYW4gdXBkYXRlIG9mIHRoZSB2aWV3cG9ydCBhbmQKLSAgICAvLyBw
cm9qZWN0aW9uIG1hdHJpeCBuZXh0IHRpbWUgdXNlUmVuZGVyUGFzcyBpcyBjYWxsZWQuCisgICAg
Ly8gcHJvamVjdGlvbiBtYXRyaXggbmV4dCB0aW1lIGJlZ2luRHJhd2luZ1RvUmVuZGVyUGFzcyBp
cyBjYWxsZWQuCiAgICAgbV9jdXJyZW50UmVuZGVyUGFzcyA9IDA7CiB9CiAKQEAgLTQ3Nyw3ICs0
NzgsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZG9Ob09wKCkKIAogdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzcyogcmVu
ZGVyUGFzcywgY29uc3QgRmxvYXRSZWN0JiBmcmFtZWJ1ZmZlckRhbWFnZVJlY3QpCiB7Ci0gICAg
aWYgKCF1c2VSZW5kZXJQYXNzKHJlbmRlclBhc3MpKQorICAgIGlmICghYmVnaW5EcmF3aW5nVG9S
ZW5kZXJQYXNzKHJlbmRlclBhc3MpKQogICAgICAgICByZXR1cm47CiAKICAgICBjbGVhclJlbmRl
clBhc3MocmVuZGVyUGFzcywgZnJhbWVidWZmZXJEYW1hZ2VSZWN0KTsKQEAgLTQ4NSw2ICs0ODYs
OCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRlclBhc3MoY29uc3QgQ0NS
ZW5kZXJQYXNzKiByZW5kZXJQYXNzLCBjb25zdAogICAgIGNvbnN0IENDUXVhZExpc3QmIHF1YWRM
aXN0ID0gcmVuZGVyUGFzcy0+cXVhZExpc3QoKTsKICAgICBmb3IgKENDUXVhZExpc3Q6OmNvbnN0
QmFja1RvRnJvbnRJdGVyYXRvciBpdCA9IHF1YWRMaXN0LmJhY2tUb0Zyb250QmVnaW4oKTsgaXQg
IT0gcXVhZExpc3QuYmFja1RvRnJvbnRFbmQoKTsgKytpdCkKICAgICAgICAgZHJhd1F1YWQoaXQt
PmdldCgpKTsKKworICAgIGVuZERyYXdpbmdUb1JlbmRlclBhc3MocmVuZGVyUGFzcyk7CiB9CiAK
IHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UXVhZChjb25zdCBDQ0RyYXdRdWFkKiBx
dWFkKQpAQCAtNTg5LDcgKzU5Miw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3
RGVidWdCb3JkZXJRdWFkKGNvbnN0IENDRGVidWdCb3JkZXJEcmF3UXVhZCogcXVhCiAgICAgR0xD
KGNvbnRleHQoKSwgY29udGV4dCgpLT5kcmF3RWxlbWVudHMoR3JhcGhpY3NDb250ZXh0M0Q6OkxJ
TkVfTE9PUCwgNCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JULCA2ICogc2l6ZW9m
KHVuc2lnbmVkIHNob3J0KSkpOwogfQogCi1zdGF0aWMgaW5saW5lIFNrQml0bWFwIGFwcGx5Rmls
dGVycyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0IFdlYktpdDo6
V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycywgTWFuYWdlZFRleHR1cmUqIHNvdXJjZVRleHR1
cmUpCitzdGF0aWMgaW5saW5lIFNrQml0bWFwIGFwcGx5RmlsdGVycyhMYXllclJlbmRlcmVyQ2hy
b21pdW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYg
ZmlsdGVycywgY29uc3QgQ0NTY29wZWRUZXh0dXJlJiBzb3VyY2VUZXh0dXJlKQogewogICAgIGlm
IChmaWx0ZXJzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFNrQml0bWFwKCk7CkBAIC02MDAs
MTAgKzYwMywxMCBAQCBzdGF0aWMgaW5saW5lIFNrQml0bWFwIGFwcGx5RmlsdGVycyhMYXllclJl
bmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0CiAKICAgICBsYXllclJlbmRlcmVy
LT5jb250ZXh0KCktPmZsdXNoKCk7CiAKLSAgICByZXR1cm4gQ0NSZW5kZXJTdXJmYWNlRmlsdGVy
czo6YXBwbHkoZmlsdGVycywgc291cmNlVGV4dHVyZS0+dGV4dHVyZUlkKCksIHNvdXJjZVRleHR1
cmUtPnNpemUoKSwgZmlsdGVyQ29udGV4dC5nZXQoKSk7CisgICAgcmV0dXJuIENDUmVuZGVyU3Vy
ZmFjZUZpbHRlcnM6OmFwcGx5KGZpbHRlcnMsIHNvdXJjZVRleHR1cmUuaWQoKSwgc291cmNlVGV4
dHVyZS5zaXplKCksIGZpbHRlckNvbnRleHQuZ2V0KCkpOwogfQogCi12b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6ZHJhd0JhY2tncm91bmRGaWx0ZXJzKGNvbnN0IENDUmVuZGVyUGFzc0RyYXdR
dWFkKiBxdWFkLCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgY29udGVudHNEZXZpY2VU
cmFuc2Zvcm0pCitib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0JhY2tncm91bmRGaWx0
ZXJzKGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKiBxdWFkLCBjb25zdCBXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgY29udGVudHNEZXZpY2VUcmFuc2Zvcm0sIENDU2NvcGVkVGV4dHVyZSYgYmFj
a2dyb3VuZFRleHR1cmUpCiB7CiAgICAgLy8gVGhpcyBtZXRob2QgZHJhd3MgYSBiYWNrZ3JvdW5k
IGZpbHRlciwgd2hpY2ggYXBwbGllcyBhIGZpbHRlciB0byBhbnkgcGl4ZWxzIGJlaGluZCB0aGUg
cXVhZCBhbmQgc2VlbiB0aHJvdWdoIGl0cyBiYWNrZ3JvdW5kLgogICAgIC8vIFRoZSBhbGdvcml0
aG0gd29ya3MgYXMgZm9sbG93czoKQEAgLTYxOSwxNSArNjIyLDE5IEBAIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpkcmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQ0NSZW5kZXJQYXNzRHJh
d1F1YWQqIHF1CiAgICAgLy8KICAgICAvLyBQaXhlbCBjb3BpZXMgaW4gdGhpcyBhbGdvcml0aG0g
b2NjdXIgYXQgc3RlcHMgMiwgMywgNCwgYW5kIDUuCiAKLSAgICBDQ1JlbmRlclN1cmZhY2UqIGRy
YXdpbmdTdXJmYWNlID0gcXVhZC0+cmVuZGVyUGFzcygpLT50YXJnZXRTdXJmYWNlKCk7CisgICAg
Ym9vbCBzdWNjZXNzID0gZmFsc2U7CisKICAgICBpZiAocXVhZC0+YmFja2dyb3VuZEZpbHRlcnMo
KS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7CiAK
ICAgICAvLyBGSVhNRTogV2Ugb25seSBhbGxvdyBiYWNrZ3JvdW5kIGZpbHRlcnMgb24gYW4gb3Bh
cXVlIHJlbmRlciBzdXJmYWNlIGJlY2F1c2Ugb3RoZXIgc3VyZmFjZXMgbWF5IGNvbnRhaW4KICAg
ICAvLyB0cmFuc2x1Y2VudCBwaXhlbHMsIGFuZCB0aGUgY29udGVudHMgYmVoaW5kIHRob3NlIHRy
YW5zbHVjZW50IHBpeGVscyB3b3VsZG4ndCBoYXZlIHRoZSBmaWx0ZXIgYXBwbGllZC4KICAgICBp
ZiAobV9jdXJyZW50UmVuZGVyUGFzcy0+aGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBBU1NFUlQoIW1fY3VycmVudE1hbmFnZWRUZXh0dXJlKTsKKyAgICAg
ICAgcmV0dXJuIHN1Y2Nlc3M7CisgICAgQVNTRVJUKGlzQ3VycmVudFJlbmRlclBhc3MobV9kZWZh
dWx0UmVuZGVyUGFzcykpOworCisgICAgaWYgKCFtX3JlbmRlclBhc3NUZXh0dXJlQWxsb2NhdG9y
LT5zaG91bGRBbGxvY2F0ZUJhY2tncm91bmRGaWx0ZXJUZXh0dXJlcyhxdWFkLT5yZW5kZXJQYXNz
KCkpKQorICAgICAgICByZXR1cm4gc3VjY2VzczsKIAogICAgIC8vIEZJWE1FOiBEbyBhIHNpbmds
ZSByZWFkYmFjayBmb3IgYm90aCB0aGUgc3VyZmFjZSBhbmQgcmVwbGljYSBhbmQgY2FjaGUgdGhl
IGZpbHRlcmVkIHJlc3VsdHMgKG9uY2UgZmlsdGVyIHRleHR1cmVzIGFyZSBub3QgcmV1c2VkKS4K
ICAgICBJbnRSZWN0IGRldmljZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KENDTWF0aFV0aWw6Om1h
cENsaXBwZWRSZWN0KGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtLCBzaGFyZWRHZW9tZXRyeVF1YWQo
KS5ib3VuZGluZ0JveCgpKSk7CkBAIC02MzksMjIgKzY0NiwyNiBAQCB2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6ZHJhd0JhY2tncm91bmRGaWx0ZXJzKGNvbnN0IENDUmVuZGVyUGFzc0RyYXdR
dWFkKiBxdQogCiAgICAgZGV2aWNlUmVjdC5pbnRlcnNlY3QobV9jdXJyZW50UmVuZGVyUGFzcy0+
ZnJhbWVidWZmZXJPdXRwdXRSZWN0KCkpOwogCi0gICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBk
ZXZpY2VCYWNrZ3JvdW5kVGV4dHVyZSA9IE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUobV9pbXBsVGV4
dHVyZU1hbmFnZXIuZ2V0KCkpOwotICAgIGlmICghZ2V0RnJhbWVidWZmZXJUZXh0dXJlKGRldmlj
ZUJhY2tncm91bmRUZXh0dXJlLmdldCgpLCBkZXZpY2VSZWN0KSkKLSAgICAgICAgcmV0dXJuOwor
ICAgIENDU2NvcGVkVGV4dHVyZSBkZXZpY2VCYWNrZ3JvdW5kVGV4dHVyZShtX2NvbnRleHQpOwor
ICAgIGRldmljZUJhY2tncm91bmRUZXh0dXJlLnByZXBhcmUoZGV2aWNlUmVjdC5zaXplKCksIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0IpOworICAgIGlmICghZGV2aWNlQmFja2dyb3VuZFRleHR1cmUu
Y3JlYXRlKCkpCisgICAgICAgIHJldHVybiBzdWNjZXNzOworICAgIGdldEZyYW1lYnVmZmVyVGV4
dHVyZShkZXZpY2VCYWNrZ3JvdW5kVGV4dHVyZSwgZGV2aWNlUmVjdCk7CiAKLSAgICBTa0JpdG1h
cCBmaWx0ZXJlZERldmljZUJhY2tncm91bmQgPSBhcHBseUZpbHRlcnModGhpcywgcXVhZC0+YmFj
a2dyb3VuZEZpbHRlcnMoKSwgZGV2aWNlQmFja2dyb3VuZFRleHR1cmUuZ2V0KCkpOworICAgIFNr
Qml0bWFwIGZpbHRlcmVkRGV2aWNlQmFja2dyb3VuZCA9IGFwcGx5RmlsdGVycyh0aGlzLCBxdWFk
LT5iYWNrZ3JvdW5kRmlsdGVycygpLCBkZXZpY2VCYWNrZ3JvdW5kVGV4dHVyZSk7CiAgICAgaWYg
KCFmaWx0ZXJlZERldmljZUJhY2tncm91bmQuZ2V0VGV4dHVyZSgpKQotICAgICAgICByZXR1cm47
CisgICAgICAgIHJldHVybiBzdWNjZXNzOwogCiAgICAgR3JUZXh0dXJlKiB0ZXh0dXJlID0gcmVp
bnRlcnByZXRfY2FzdDxHclRleHR1cmUqPihmaWx0ZXJlZERldmljZUJhY2tncm91bmQuZ2V0VGV4
dHVyZSgpKTsKICAgICBpbnQgZmlsdGVyZWREZXZpY2VCYWNrZ3JvdW5kVGV4dHVyZUlkID0gdGV4
dHVyZS0+Z2V0VGV4dHVyZUhhbmRsZSgpOwogCi0gICAgaWYgKCFkcmF3aW5nU3VyZmFjZS0+cHJl
cGFyZUJhY2tncm91bmRUZXh0dXJlKHRoaXMpKQotICAgICAgICByZXR1cm47CisgICAgYm9vbCBm
b3JGcmFtZWJ1ZmZlckF0dGFjaG1lbnQgPSB0cnVlOworICAgIGJhY2tncm91bmRUZXh0dXJlLnBy
ZXBhcmUocXVhZC0+cXVhZFJlY3QoKS5zaXplKCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBm
b3JGcmFtZWJ1ZmZlckF0dGFjaG1lbnQpOworICAgIGlmICghYmFja2dyb3VuZFRleHR1cmUuY3Jl
YXRlKCkpCisgICAgICAgIHJldHVybiBzdWNjZXNzOwogCiAgICAgY29uc3QgQ0NSZW5kZXJQYXNz
KiB0YXJnZXRSZW5kZXJQYXNzID0gbV9jdXJyZW50UmVuZGVyUGFzczsKLSAgICBpZiAodXNlTWFu
YWdlZFRleHR1cmUoZHJhd2luZ1N1cmZhY2UtPmJhY2tncm91bmRUZXh0dXJlKCksIHF1YWQtPnF1
YWRSZWN0KCkpKSB7CisgICAgaWYgKGJlZ2luRHJhd2luZ1RvU2NvcGVkVGV4dHVyZShiYWNrZ3Jv
dW5kVGV4dHVyZSwgcXVhZC0+cXVhZFJlY3QoKSkpIHsKICAgICAgICAgLy8gQ29weSB0aGUgcmVh
ZGJhY2sgcGl4ZWxzIGZyb20gZGV2aWNlIHRvIHRoZSBiYWNrZ3JvdW5kIHRleHR1cmUgZm9yIHRo
ZSBzdXJmYWNlLgogICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkZXZpY2VUb0ZyYW1l
YnVmZmVyVHJhbnNmb3JtOwogICAgICAgICBkZXZpY2VUb0ZyYW1lYnVmZmVyVHJhbnNmb3JtLnRy
YW5zbGF0ZShxdWFkLT5xdWFkUmVjdCgpLndpZHRoKCkgLyAyLjAsIHF1YWQtPnF1YWRSZWN0KCku
aGVpZ2h0KCkgLyAyLjApOwpAQCAtNjY0LDE3ICs2NzUsMTggQEAgdm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdCYWNrZ3JvdW5kRmlsdGVycyhjb25zdCBDQ1JlbmRlclBhc3NEcmF3UXVh
ZCogcXUKICAgICAgICAgZGV2aWNlVG9GcmFtZWJ1ZmZlclRyYW5zZm9ybS50cmFuc2xhdGUoZGV2
aWNlUmVjdC54KCksIGRldmljZVJlY3QueSgpKTsKIAogICAgICAgICBjb3B5VGV4dHVyZVRvRnJh
bWVidWZmZXIoZmlsdGVyZWREZXZpY2VCYWNrZ3JvdW5kVGV4dHVyZUlkLCBkZXZpY2VSZWN0LnNp
emUoKSwgZGV2aWNlVG9GcmFtZWJ1ZmZlclRyYW5zZm9ybSk7Ci0KLSAgICAgICAgdXNlUmVuZGVy
UGFzcyh0YXJnZXRSZW5kZXJQYXNzKTsKKyAgICAgICAgc3VjY2VzcyA9IHRydWU7CiAgICAgfQor
CisgICAgZW5kRHJhd2luZ1RvU2NvcGVkVGV4dHVyZShiYWNrZ3JvdW5kVGV4dHVyZSk7CisgICAg
cmVzdW1lRHJhd2luZ1RvUmVuZGVyUGFzcyh0YXJnZXRSZW5kZXJQYXNzKTsKKworICAgIHJldHVy
biBzdWNjZXNzOwogfQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRlclBh
c3NRdWFkKGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKiBxdWFkKQogewotICAgIC8vIFRoZSBy
ZXBsaWNhIGlzIGFsd2F5cyBkcmF3biBmaXJzdCwgc28gZnJlZSBhZnRlciBkcmF3aW5nIHRoZSBj
b250ZW50cy4KLSAgICBib29sIHNob3VsZFJlbGVhc2VUZXh0dXJlcyA9ICFxdWFkLT5pc1JlcGxp
Y2EoKTsKLQotICAgIENDUmVuZGVyU3VyZmFjZSogZHJhd2luZ1N1cmZhY2UgPSBxdWFkLT5yZW5k
ZXJQYXNzKCktPnRhcmdldFN1cmZhY2UoKTsKKyAgICBjb25zdCBDQ1Njb3BlZFRleHR1cmUmIGNv
bnRlbnRzVGV4dHVyZSA9IG1fcmVuZGVyUGFzc1RleHR1cmVBbGxvY2F0b3ItPmJlZ2luRHJhd2lu
Z0Zyb21SZW5kZXJQYXNzKHF1YWQtPnJlbmRlclBhc3MoKSk7CiAKICAgICBXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCByZW5kZXJUcmFuc2Zvcm0gPSBxdWFkLT5sYXllclRyYW5zZm9ybSgpOwogICAg
IC8vIEFwcGx5IGEgc2NhbGluZyBmYWN0b3IgdG8gc2l6ZSB0aGUgcXVhZCBmcm9tIDF4MSB0byBp
dHMgaW50ZW5kZWQgc2l6ZS4KQEAgLTY4MiwyOCArNjk0LDMwIEBAIHZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpkcmF3UmVuZGVyUGFzc1F1YWQoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQq
IHF1YWQpCiAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggY29udGVudHNEZXZpY2VUcmFuc2Zv
cm0gPSBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCh3aW5kb3dNYXRyaXgoKSAqIHByb2plY3Rpb25N
YXRyaXgoKSAqIHJlbmRlclRyYW5zZm9ybSkudG8yZFRyYW5zZm9ybSgpOwogCiAgICAgLy8gQ2Fu
IG9ubHkgZHJhdyBzdXJmYWNlIGlmIGRldmljZSBtYXRyaXggaXMgaW52ZXJ0aWJsZS4KLSAgICBp
ZiAoIWNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpIHx8ICFkcmF3aW5nU3Vy
ZmFjZS0+aGFzVmFsaWRDb250ZW50c1RleHR1cmUoKSkgewotICAgICAgICBpZiAoc2hvdWxkUmVs
ZWFzZVRleHR1cmVzKSB7Ci0gICAgICAgICAgICBkcmF3aW5nU3VyZmFjZS0+cmVsZWFzZUJhY2tn
cm91bmRUZXh0dXJlKCk7Ci0gICAgICAgICAgICBkcmF3aW5nU3VyZmFjZS0+cmVsZWFzZUNvbnRl
bnRzVGV4dHVyZSgpOwotICAgICAgICB9CisgICAgaWYgKCFjb250ZW50c1RleHR1cmUgfHwgIWNv
bnRlbnRzRGV2aWNlVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKSB7CisgICAgICAgIG1fcmVuZGVy
UGFzc1RleHR1cmVBbGxvY2F0b3ItPmVuZERyYXdpbmdGcm9tUmVuZGVyUGFzcyhxdWFkLT5yZW5k
ZXJQYXNzKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZHJhd0JhY2tncm91bmRG
aWx0ZXJzKHF1YWQsIGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtKTsKKyAgICBBU1NFUlQoY29udGVu
dHNUZXh0dXJlLnNpemUoKSA9PSBxdWFkLT5xdWFkUmVjdCgpLnNpemUoKSk7CisKKyAgICBDQ1Nj
b3BlZFRleHR1cmUgYmFja2dyb3VuZFRleHR1cmUobV9jb250ZXh0KTsKKyAgICBib29sIGhhc0Jh
Y2tncm91bmRUZXh0dXJlID0gZHJhd0JhY2tncm91bmRGaWx0ZXJzKHF1YWQsIGNvbnRlbnRzRGV2
aWNlVHJhbnNmb3JtLCBiYWNrZ3JvdW5kVGV4dHVyZSk7CiAKICAgICAvLyBGSVhNRTogQ2FjaGUg
dGhpcyB2YWx1ZSBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gZG8gaXQgZm9yIGJvdGggdGhlIHN1
cmZhY2UgYW5kIGl0cyByZXBsaWNhLgogICAgIC8vIEFwcGx5IGZpbHRlcnMgdG8gdGhlIGNvbnRl
bnRzIHRleHR1cmUuCi0gICAgU2tCaXRtYXAgZmlsdGVyQml0bWFwID0gYXBwbHlGaWx0ZXJzKHRo
aXMsIHF1YWQtPmZpbHRlcnMoKSwgZHJhd2luZ1N1cmZhY2UtPmNvbnRlbnRzVGV4dHVyZSgpKTsK
LSAgICBpbnQgY29udGVudHNUZXh0dXJlSWQgPSBkcmF3aW5nU3VyZmFjZS0+Y29udGVudHNUZXh0
dXJlKCktPnRleHR1cmVJZCgpOworICAgIFNrQml0bWFwIGZpbHRlckJpdG1hcCA9IGFwcGx5Rmls
dGVycyh0aGlzLCBxdWFkLT5maWx0ZXJzKCksIGNvbnRlbnRzVGV4dHVyZSk7CisgICAgdW5zaWdu
ZWQgY29udGVudHNUZXh0dXJlSWQgPSBjb250ZW50c1RleHR1cmUuaWQoKTsKICAgICBpZiAoZmls
dGVyQml0bWFwLmdldFRleHR1cmUoKSkgewogICAgICAgICBHclRleHR1cmUqIHRleHR1cmUgPSBy
ZWludGVycHJldF9jYXN0PEdyVGV4dHVyZSo+KGZpbHRlckJpdG1hcC5nZXRUZXh0dXJlKCkpOwog
ICAgICAgICBjb250ZW50c1RleHR1cmVJZCA9IHRleHR1cmUtPmdldFRleHR1cmVIYW5kbGUoKTsK
ICAgICB9CiAKICAgICAvLyBEcmF3IHRoZSBiYWNrZ3JvdW5kIHRleHR1cmUgaWYgdGhlcmUgaXMg
b25lLgotICAgIGlmIChkcmF3aW5nU3VyZmFjZS0+aGFzVmFsaWRCYWNrZ3JvdW5kVGV4dHVyZSgp
KQotICAgICAgICBjb3B5VGV4dHVyZVRvRnJhbWVidWZmZXIoZHJhd2luZ1N1cmZhY2UtPmJhY2tn
cm91bmRUZXh0dXJlKCktPnRleHR1cmVJZCgpLCBxdWFkLT5xdWFkUmVjdCgpLnNpemUoKSwgcXVh
ZC0+bGF5ZXJUcmFuc2Zvcm0oKSk7CisgICAgaWYgKGhhc0JhY2tncm91bmRUZXh0dXJlKSB7Cisg
ICAgICAgIEFTU0VSVChiYWNrZ3JvdW5kVGV4dHVyZS5zaXplKCkgPT0gcXVhZC0+cXVhZFJlY3Qo
KS5zaXplKCkpOworICAgICAgICBjb3B5VGV4dHVyZVRvRnJhbWVidWZmZXIoYmFja2dyb3VuZFRl
eHR1cmUuaWQoKSwgcXVhZC0+cXVhZFJlY3QoKS5zaXplKCksIHF1YWQtPmxheWVyVHJhbnNmb3Jt
KCkpOworICAgIH0KIAogICAgIEZsb2F0UXVhZCBkZXZpY2VRdWFkID0gY29udGVudHNEZXZpY2VU
cmFuc2Zvcm0ubWFwUXVhZChzaGFyZWRHZW9tZXRyeVF1YWQoKSk7CiAgICAgQ0NMYXllclF1YWQg
ZGV2aWNlTGF5ZXJCb3VuZHMgPSBDQ0xheWVyUXVhZChGbG9hdFF1YWQoZGV2aWNlUXVhZC5ib3Vu
ZGluZ0JveCgpKSk7CkBAIC03MjEsNyArNzM1LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmRyYXdSZW5kZXJQYXNzUXVhZChjb25zdCBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcXVhZCkK
ICAgICAvLyBGSVhNRTogdXNlIHRoZSBiYWNrZ3JvdW5kVGV4dHVyZSBhbmQgYmxlbmQgdGhlIGJh
Y2tncm91bmQgaW4gd2l0aCB0aGlzIGRyYXcgaW5zdGVhZCBvZiBoYXZpbmcgYSBzZXBhcmF0ZSBj
b3B5IG9mIHRoZSBiYWNrZ3JvdW5kIHRleHR1cmUuCiAKICAgICBHTEMoY29udGV4dCgpLCBjb250
ZXh0KCktPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7Ci0gICAg
Y29udGV4dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgY29u
dGVudHNUZXh0dXJlSWQpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YmluZFRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGNvbnRlbnRzVGV4dHVyZUlkKSk7CiAK
ICAgICBpbnQgc2hhZGVyUXVhZExvY2F0aW9uID0gLTE7CiAgICAgaW50IHNoYWRlckVkZ2VMb2Nh
dGlvbiA9IC0xOwpAQCAtNzg0LDEwICs3OTgsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZHJhd1JlbmRlclBhc3NRdWFkKGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKiBxdWFkKQog
ICAgIGRyYXdUZXh0dXJlZFF1YWQocXVhZC0+bGF5ZXJUcmFuc2Zvcm0oKSwgcXVhZC0+cXVhZFJl
Y3QoKS53aWR0aCgpLCBxdWFkLT5xdWFkUmVjdCgpLmhlaWdodCgpLCBxdWFkLT5vcGFjaXR5KCks
IHN1cmZhY2VRdWFkLAogICAgICAgICAgICAgICAgICAgICAgc2hhZGVyTWF0cml4TG9jYXRpb24s
IHNoYWRlckFscGhhTG9jYXRpb24sIHNoYWRlclF1YWRMb2NhdGlvbik7CiAKLSAgICBpZiAoc2hv
dWxkUmVsZWFzZVRleHR1cmVzKSB7Ci0gICAgICAgIGRyYXdpbmdTdXJmYWNlLT5yZWxlYXNlQmFj
a2dyb3VuZFRleHR1cmUoKTsKLSAgICAgICAgZHJhd2luZ1N1cmZhY2UtPnJlbGVhc2VDb250ZW50
c1RleHR1cmUoKTsKLSAgICB9CisgICAgbV9yZW5kZXJQYXNzVGV4dHVyZUFsbG9jYXRvci0+ZW5k
RHJhd2luZ0Zyb21SZW5kZXJQYXNzKHF1YWQtPnJlbmRlclBhc3MoKSk7CiB9CiAKIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3U29saWRDb2xvclF1YWQoY29uc3QgQ0NTb2xpZENvbG9y
RHJhd1F1YWQqIHF1YWQpCkBAIC0xMTYxLDEwICsxMTcyLDEyIEBAIHZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpkcmF3SU9TdXJmYWNlUXVhZChjb25zdCBDQ0lPU3VyZmFjZURyYXdRdWFkKiBx
dWFkKQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0hlYWRzVXBEaXNwbGF5KE1h
bmFnZWRUZXh0dXJlKiBodWRUZXh0dXJlLCBjb25zdCBJbnRTaXplJiBodWRTaXplKQogeworICAg
IGlmICghYmVnaW5EcmF3aW5nVG9SZW5kZXJQYXNzKG1fZGVmYXVsdFJlbmRlclBhc3MpKQorICAg
ICAgICByZXR1cm47CisKICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmVuYWJsZShHcmFw
aGljc0NvbnRleHQzRDo6QkxFTkQpKTsKICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmJs
ZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6T05FLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01J
TlVTX1NSQ19BTFBIQSkpOwogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGlzYWJsZShH
cmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7Ci0gICAgdXNlUmVuZGVyUGFzcyhtX2Rl
ZmF1bHRSZW5kZXJQYXNzKTsKIAogICAgIGNvbnN0IEhlYWRzVXBEaXNwbGF5UHJvZ3JhbSogcHJv
Z3JhbSA9IGhlYWRzVXBEaXNwbGF5UHJvZ3JhbSgpOwogICAgIEFTU0VSVChwcm9ncmFtICYmIHBy
b2dyYW0tPmluaXRpYWxpemVkKCkpOwpAQCAtMTE4MCw2ICsxMTkzLDggQEAgdm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmRyYXdIZWFkc1VwRGlzcGxheShNYW5hZ2VkVGV4dHVyZSogaHVkVGV4
dHVyZSwgY29uc3QKICAgICAgICAgICAgICAgICAgICAgIDEsIHNoYXJlZEdlb21ldHJ5UXVhZCgp
LCBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLAogICAgICAgICAgICAg
ICAgICAgICAgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCksCiAgICAg
ICAgICAgICAgICAgICAgICAtMSk7CisKKyAgICBlbmREcmF3aW5nVG9SZW5kZXJQYXNzKG1fZGVm
YXVsdFJlbmRlclBhc3MpOwogfQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZmluaXNo
RHJhd2luZ0ZyYW1lKCkKQEAgLTEyNjAsMTAgKzEyNzUsNiBAQCB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6Y29weVRleHR1cmVUb0ZyYW1lYnVmZmVyKGludCB0ZXh0dXJlSWQsIGNvbnN0IElu
dFNpegogCiAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5hY3RpdmVUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOwogICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+
YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmVJZCkpOwot
ICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwg
R3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUikpOwotICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQo
KS0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUikp
OwotICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBH
cmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSkpOwotICAgIEdMQyhjb250ZXh0KCksIGNv
bnRleHQoKS0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBf
VE9fRURHRSkpOwogCiAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51c2VQcm9ncmFtKHBy
b2dyYW0tPnByb2dyYW0oKSkpOwogICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9y
bTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9uKCksIDApKTsKQEAg
LTEzOTIsNTQgKzE0MDMsNzEgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmdldEZyYW1l
YnVmZmVyUGl4ZWxzKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYgcmUKICAgICB9CiB9CiAK
LWJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRGcmFtZWJ1ZmZlclRleHR1cmUoTWFuYWdl
ZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIGRldmljZVJlY3QpCit2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6Z2V0RnJhbWVidWZmZXJUZXh0dXJlKENDU2NvcGVkVGV4dHVyZSYg
dGV4dHVyZSwgY29uc3QgSW50UmVjdCYgZGV2aWNlUmVjdCkKIHsKLSAgICBpZiAoIXRleHR1cmUt
PnJlc2VydmUoZGV2aWNlUmVjdC5zaXplKCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUKHRleHR1cmUgJiYgdGV4dHVyZS5zaXplKCkg
PT0gZGV2aWNlUmVjdC5zaXplKCkgJiYgdGV4dHVyZS5mb3JtYXQoKSA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCKTsKIAotICAgIFJlZlB0cjxDQ0dyYXBoaWNzQ29udGV4dD4gY2NDb250ZXh0ID0g
Q0NHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZTNEKG1fY29udGV4dCk7Ci0gICAgdGV4dHVyZS0+Ymlu
ZFRleHR1cmUoY2NDb250ZXh0LmdldCgpLCBtX2ltcGxUZXh0dXJlQWxsb2NhdG9yLmdldCgpKTsK
LSAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmNvcHlUZXhJbWFnZTJEKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCAwLCB0ZXh0dXJlLT5mb3JtYXQoKSwKKyAgICBHTEMobV9jb250
ZXh0LCBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCB0ZXh0dXJlLmlkKCkpKTsKKyAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmNvcHlUZXhJ
bWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCB0ZXh0dXJlLmZvcm1hdCgp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlUmVj
dC54KCksIGRldmljZVJlY3QueSgpLCBkZXZpY2VSZWN0LndpZHRoKCksIGRldmljZVJlY3QuaGVp
Z2h0KCksIDApKTsKLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmlzQ3VycmVudFJlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNz
KQogewotICAgIHJldHVybiBtX2N1cnJlbnRSZW5kZXJQYXNzID09IHJlbmRlclBhc3MgJiYgIW1f
Y3VycmVudE1hbmFnZWRUZXh0dXJlOworICAgIHJldHVybiBtX2N1cnJlbnRSZW5kZXJQYXNzID09
IHJlbmRlclBhc3MgJiYgIW1fY3VycmVudFNjb3BlZFRleHR1cmU7CiB9CiAKLWJvb2wgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjp1c2VSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVy
UGFzcykKK2Jvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpiZWdpbkRyYXdpbmdUb1JlbmRlclBh
c3MoY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzKQogewogICAgIG1fY3VycmVudFJlbmRl
clBhc3MgPSByZW5kZXJQYXNzOwotICAgIG1fY3VycmVudE1hbmFnZWRUZXh0dXJlID0gMDsKKyAg
ICBtX2N1cnJlbnRTY29wZWRUZXh0dXJlID0gMDsKKworICAgIGNvbnN0IENDU2NvcGVkVGV4dHVy
ZSYgdGV4dHVyZSA9IG1fcmVuZGVyUGFzc1RleHR1cmVBbGxvY2F0b3ItPmJlZ2luRHJhd2luZ1Rv
UmVuZGVyUGFzcyhyZW5kZXJQYXNzKTsKIAogICAgIGlmIChyZW5kZXJQYXNzID09IG1fZGVmYXVs
dFJlbmRlclBhc3MpIHsKKyAgICAgICAgQVNTRVJUKCF0ZXh0dXJlKTsKICAgICAgICAgR0xDKG1f
Y29udGV4dCwgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSLCAwKSk7CiAgICAgICAgIHNldERyYXdGcmFtZWJ1ZmZlclJlY3QocmVuZGVyUGFz
cy0+ZnJhbWVidWZmZXJPdXRwdXRSZWN0KCksIHRydWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAKLSAgICBpZiAoIXJlbmRlclBhc3MtPnRhcmdldFN1cmZhY2UoKS0+cHJlcGFyZUNv
bnRlbnRzVGV4dHVyZSh0aGlzKSkKKyAgICBpZiAoIXRleHR1cmUpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIHJldHVybiBiaW5kRnJhbWVidWZmZXJUb1RleHR1cmUocmVuZGVyUGFzcy0+
dGFyZ2V0U3VyZmFjZSgpLT5jb250ZW50c1RleHR1cmUoKSwgcmVuZGVyUGFzcy0+ZnJhbWVidWZm
ZXJPdXRwdXRSZWN0KCkpOworICAgIHJldHVybiBiaW5kRnJhbWVidWZmZXJUb1RleHR1cmUodGV4
dHVyZSwgcmVuZGVyUGFzcy0+ZnJhbWVidWZmZXJPdXRwdXRSZWN0KCkpOworfQorCitib29sIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVzdW1lRHJhd2luZ1RvUmVuZGVyUGFzcyhjb25zdCBDQ1Jl
bmRlclBhc3MqIHJlbmRlclBhc3MpCit7CisgICAgcmV0dXJuIGJlZ2luRHJhd2luZ1RvUmVuZGVy
UGFzcyhyZW5kZXJQYXNzKTsKK30KKwordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmVuZERy
YXdpbmdUb1JlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzKQoreworICAg
IEFTU0VSVChtX2N1cnJlbnRSZW5kZXJQYXNzID09IHJlbmRlclBhc3MpOworICAgIG1fcmVuZGVy
UGFzc1RleHR1cmVBbGxvY2F0b3ItPmVuZERyYXdpbmdUb1JlbmRlclBhc3MocmVuZGVyUGFzcyk7
CiB9CiAKLWJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1c2VNYW5hZ2VkVGV4dHVyZShNYW5h
Z2VkVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdmlld3BvcnRSZWN0KQorYm9vbCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmJlZ2luRHJhd2luZ1RvU2NvcGVkVGV4dHVyZShjb25zdCBD
Q1Njb3BlZFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHZpZXdwb3J0UmVjdCkKIHsK
ICAgICBtX2N1cnJlbnRSZW5kZXJQYXNzID0gMDsKLSAgICBtX2N1cnJlbnRNYW5hZ2VkVGV4dHVy
ZSA9IHRleHR1cmU7CisgICAgbV9jdXJyZW50U2NvcGVkVGV4dHVyZSA9ICZ0ZXh0dXJlOwogCiAg
ICAgcmV0dXJuIGJpbmRGcmFtZWJ1ZmZlclRvVGV4dHVyZSh0ZXh0dXJlLCB2aWV3cG9ydFJlY3Qp
OwogfQogCi1ib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6YmluZEZyYW1lYnVmZmVyVG9UZXh0
dXJlKE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBmcmFtZWJ1ZmZlclJl
Y3QpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZW5kRHJhd2luZ1RvU2NvcGVkVGV4dHVy
ZShjb25zdCBDQ1Njb3BlZFRleHR1cmUmIHRleHR1cmUpCiB7Ci0gICAgR0xDKG1fY29udGV4dCwg
bV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQpKTsKKyAgICBBU1NFUlRfVU5VU0VEKHRleHR1cmUs
IG1fY3VycmVudFNjb3BlZFRleHR1cmUgPT0gJnRleHR1cmUpOworfQogCi0gICAgUmVmUHRyPEND
R3JhcGhpY3NDb250ZXh0PiBjY0NvbnRleHQgPSBDQ0dyYXBoaWNzQ29udGV4dDo6Y3JlYXRlM0Qo
bV9jb250ZXh0KTsKLSAgICB0ZXh0dXJlLT5mcmFtZWJ1ZmZlclRleHR1cmUyRChjY0NvbnRleHQu
Z2V0KCksIG1faW1wbFRleHR1cmVBbGxvY2F0b3IuZ2V0KCkpOworYm9vbCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmJpbmRGcmFtZWJ1ZmZlclRvVGV4dHVyZShjb25zdCBDQ1Njb3BlZFRleHR1cmUm
IHRleHR1cmUsIGNvbnN0IEludFJlY3QmIGZyYW1lYnVmZmVyUmVjdCkKK3sKKyAgICBBU1NFUlQo
dGV4dHVyZSk7CisgICAgQVNTRVJUKHRleHR1cmUuaWQoKSk7CisKKyAgICBHTEMobV9jb250ZXh0
LCBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCkpOworICAgIEdMQyhtX2NvbnRleHQsIG1fY29u
dGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCB0ZXh0dXJlLmlkKCksIDApKTsKIAogI2lmICFkZWZpbmVkICggTkRFQlVH
ICkKICAgICBpZiAobV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NP
TVBMRVRFKSB7CkBAIC0xNTExLDYgKzE1MzksOCBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMoKQogCiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250
ZXh0LT5mbHVzaCgpKTsKIAorICAgIENDU2NvcGVkVGV4dHVyZTo6aW5pdGlhbGl6ZUNhcGFiaWxp
dGllcyhtX2NhcGFiaWxpdGllcyk7CisKICAgICBtX2ltcGxUZXh0dXJlTWFuYWdlciA9IFRleHR1
cmVNYW5hZ2VyOjpjcmVhdGUoVGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5dGVzKHZpZXdwb3J0
U2l6ZSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jYXBhYmls
aXRpZXMubWF4VGV4dHVyZVNpemUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApp
bmRleCA2ZDI4OTk1OGU1YjA5NGJiZmFiZWE4OTIzNjJhNmM1MWJiM2I5MjQwLi5hNDM3OGM2MjZm
ZTZmZjE3ZjMyODg1ZmYwNWNmZDI1ZmEwNzBkOTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIlRyYWNraW5nVGV4dHVyZUFs
bG9jYXRvci5oIgogI2luY2x1ZGUgImNjL0NDUmVuZGVyUGFzc1RleHR1cmVBbGxvY2F0b3IuaCIK
ICNpbmNsdWRlICJjYy9DQ1JlbmRlcmVyLmgiCisjaW5jbHVkZSAiY2MvQ0NTY29wZWRUZXh0dXJl
LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtOTYsNyArOTcsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgR2VvbWV0cnlCaW5kaW5nKiBzaGFy
ZWRHZW9tZXRyeSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkR2VvbWV0cnkuZ2V0KCk7IH0KIAog
ICAgIHZpcnR1YWwgdm9pZCBnZXRGcmFtZWJ1ZmZlclBpeGVscyh2b2lkICpwaXhlbHMsIGNvbnN0
IEludFJlY3QmKSBPVkVSUklERTsKLSAgICBib29sIGdldEZyYW1lYnVmZmVyVGV4dHVyZShNYW5h
Z2VkVGV4dHVyZSosIGNvbnN0IEludFJlY3QmIGRldmljZVJlY3QpOworICAgIHZvaWQgZ2V0RnJh
bWVidWZmZXJUZXh0dXJlKENDU2NvcGVkVGV4dHVyZSYsIGNvbnN0IEludFJlY3QmIGRldmljZVJl
Y3QpOwogCiAgICAgdmlydHVhbCBUZXh0dXJlTWFuYWdlciogaW1wbFRleHR1cmVNYW5hZ2VyKCkg
Y29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9pbXBsVGV4dHVyZU1hbmFnZXIuZ2V0KCk7IH0KICAg
ICB2aXJ0dWFsIFRleHR1cmVDb3BpZXIqIHRleHR1cmVDb3BpZXIoKSBjb25zdCBPVkVSUklERSB7
IHJldHVybiBtX3RleHR1cmVDb3BpZXIuZ2V0KCk7IH0KQEAgLTEzMiw3ICsxMzMsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgZHJhd1F1YWQoY29uc3QgQ0NEcmF3UXVhZCopOwogICAgIHZvaWQgZHJh
d0NoZWNrZXJib2FyZFF1YWQoY29uc3QgQ0NDaGVja2VyYm9hcmREcmF3UXVhZCopOwogICAgIHZv
aWQgZHJhd0RlYnVnQm9yZGVyUXVhZChjb25zdCBDQ0RlYnVnQm9yZGVyRHJhd1F1YWQqKTsKLSAg
ICB2b2lkIGRyYXdCYWNrZ3JvdW5kRmlsdGVycyhjb25zdCBDQ1JlbmRlclBhc3NEcmF3UXVhZCos
IGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRldmljZVRyYW5zZm9ybSk7
CisgICAgYm9vbCBkcmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1
YWQqLCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBkZXZpY2VUcmFuc2Zv
cm0sIENDU2NvcGVkVGV4dHVyZSYgYmFja2dyb3VuZFRleHR1cmUpOwogICAgIHZvaWQgZHJhd1Jl
bmRlclBhc3NRdWFkKGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKik7CiAgICAgdm9pZCBkcmF3
U29saWRDb2xvclF1YWQoY29uc3QgQ0NTb2xpZENvbG9yRHJhd1F1YWQqKTsKICAgICB2b2lkIGRy
YXdTdHJlYW1WaWRlb1F1YWQoY29uc3QgQ0NTdHJlYW1WaWRlb0RyYXdRdWFkKik7CkBAIC0xNDMs
MTIgKzE0NCwxNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzZXREcmF3RnJhbWVidWZmZXJSZWN0
KGNvbnN0IEludFJlY3QmLCBib29sIGZsaXBZKTsKIAotICAgIC8vIFRoZSBjdXJyZW50IGRyYXdp
bmcgdGFyZ2V0IGlzIGVpdGhlciBhIFJlbmRlclBhc3Mgb3IgTWFuYWdlZFRleHR1cmUuIFVzZSB0
aGVzZSBmdW5jdGlvbnMgdG8gc3dpdGNoIHRvIGEgbmV3IGRyYXdpbmcgdGFyZ2V0LgotICAgIGJv
b2wgdXNlUmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBhc3MqKTsKLSAgICBib29sIHVzZU1hbmFn
ZWRUZXh0dXJlKE1hbmFnZWRUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgdmlld3BvcnRSZWN0KTsK
KyAgICAvLyBUaGUgY3VycmVudCBkcmF3aW5nIHRhcmdldCBpcyBlaXRoZXIgYSBSZW5kZXJQYXNz
IG9yIFNjb3BlZFRleHR1cmUuIFVzZSB0aGVzZSBmdW5jdGlvbnMgdG8gc3dpdGNoIHRvIGEgbmV3
IGRyYXdpbmcgdGFyZ2V0LgorICAgIGJvb2wgYmVnaW5EcmF3aW5nVG9SZW5kZXJQYXNzKGNvbnN0
IENDUmVuZGVyUGFzcyopOworICAgIGJvb2wgcmVzdW1lRHJhd2luZ1RvUmVuZGVyUGFzcyhjb25z
dCBDQ1JlbmRlclBhc3MqKTsKKyAgICB2b2lkIGVuZERyYXdpbmdUb1JlbmRlclBhc3MoY29uc3Qg
Q0NSZW5kZXJQYXNzKik7CisKKyAgICBib29sIGJlZ2luRHJhd2luZ1RvU2NvcGVkVGV4dHVyZShj
b25zdCBDQ1Njb3BlZFRleHR1cmUmLCBjb25zdCBJbnRSZWN0JiB2aWV3cG9ydFJlY3QpOworICAg
IHZvaWQgZW5kRHJhd2luZ1RvU2NvcGVkVGV4dHVyZShjb25zdCBDQ1Njb3BlZFRleHR1cmUmKTsK
KwogICAgIGJvb2wgaXNDdXJyZW50UmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBhc3MqKTsKIAot
ICAgIGJvb2wgYmluZEZyYW1lYnVmZmVyVG9UZXh0dXJlKE1hbmFnZWRUZXh0dXJlKiwgY29uc3Qg
SW50UmVjdCYgdmlld3BvcnRSZWN0KTsKKyAgICBib29sIGJpbmRGcmFtZWJ1ZmZlclRvVGV4dHVy
ZShjb25zdCBDQ1Njb3BlZFRleHR1cmUmLCBjb25zdCBJbnRSZWN0JiB2aWV3cG9ydFJlY3QpOwog
CiAgICAgdm9pZCBjbGVhclJlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKiwgY29uc3QgRmxv
YXRSZWN0JiBmcmFtZWJ1ZmZlckRhbWFnZVJlY3QpOwogCkBAIC0xNjUsNyArMTcxLDcgQEAgcHJp
dmF0ZToKICAgICBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzIG1fY2FwYWJpbGl0aWVzOwogCiAg
ICAgY29uc3QgQ0NSZW5kZXJQYXNzKiBtX2N1cnJlbnRSZW5kZXJQYXNzOwotICAgIE1hbmFnZWRU
ZXh0dXJlKiBtX2N1cnJlbnRNYW5hZ2VkVGV4dHVyZTsKKyAgICBjb25zdCBDQ1Njb3BlZFRleHR1
cmUqIG1fY3VycmVudFNjb3BlZFRleHR1cmU7CiAgICAgdW5zaWduZWQgbV9vZmZzY3JlZW5GcmFt
ZWJ1ZmZlcklkOwogCiAgICAgT3duUHRyPEdlb21ldHJ5QmluZGluZz4gbV9zaGFyZWRHZW9tZXRy
eTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148666</attachid>
            <date>2012-06-20 15:26:27 -0700</date>
            <delta_ts>2012-06-21 12:43:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89474-20120620182626.patch</filename>
            <type>text/plain</type>
            <size>51047</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwODIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZDU4MDExZTQ2
YzZiNjRhMGYxN2JhMTY3N2ZhYmQ1ODk3YTE1NmY3MS4uNmRhMWUxZTljYzJiODc1ZjBkNGVjMDkx
ZDZkODc0MGMwMmYzZGY4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzc0OSw2ICszNzQ5LDggQEAK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3Mu
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQ
YXNzRHJhd1F1YWQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3NUZXh0dXJlQWxsb2NhdG9yLmNwcCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzVGV4dHVy
ZUFsbG9jYXRvci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlclN1cmZhY2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlRmlsdGVycy5jcHAnLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggYjZjYTY3NDQ1N2Y4ZDAzYzk3NjY2NzY5
MDNiZmVjNTczZDNhM2ViYi4uOWM2NjgwNmJhYjI1MTBlNzc2MTM3OGJiMThjNDkxZTZjNzBlYTE2
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC02OSw2ICs2OSw3
IEBACiAjaW5jbHVkZSAiY2MvQ0NWaWRlb0xheWVySW1wbC5oIgogI2luY2x1ZGUgImNjL0NDWVVW
VmlkZW9EcmF3UXVhZC5oIgogI2luY2x1ZGUgPHB1YmxpYy9XZWJWaWRlb0ZyYW1lLmg+CisjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCkBAIC0yNDQsNyArMjQ1LDcgQEAgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0oQ0NSZW5kZXJlckNsaWVudCogY2xp
ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dHVy
ZVVwbG9hZGVyT3B0aW9uIHRleHR1cmVVcGxvYWRlclNldHRpbmcpCiAgICAgOiBDQ1JlbmRlcmVy
KGNsaWVudCkKICAgICAsIG1fY3VycmVudFJlbmRlclBhc3MoMCkKLSAgICAsIG1fY3VycmVudE1h
bmFnZWRUZXh0dXJlKDApCisgICAgLCBtX2N1cnJlbnRTY29wZWRUZXh0dXJlKDApCiAgICAgLCBt
X29mZnNjcmVlbkZyYW1lYnVmZmVySWQoMCkKICAgICAsIG1fc2hhcmVkR2VvbWV0cnlRdWFkKEZs
b2F0UmVjdCgtMC41ZiwgLTAuNWYsIDEuMGYsIDEuMGYpKQogICAgICwgbV9jb250ZXh0KGNvbnRl
eHQpCkBAIC0zNzUsNiArMzc2LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRlYnVn
R0xDYWxsKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBjaGFyKgogCiB2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCiB7CisgICAgLy8g
RklYTUU6IERvIHRoaXMgd2hlcmUvd2hlbiBjb250ZW50cyB0ZXh0dXJlcyBhcmUgZnJlZWQuCiAg
ICAgaWYgKCF2aXNpYmxlKQogICAgICAgICByZWxlYXNlUmVuZGVyUGFzc1RleHR1cmVzKCk7CiAK
QEAgLTM4OCw4ICszOTAsOCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0VmlzaWJs
ZShib29sIHZpc2libGUpCiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZWxlYXNlUmVu
ZGVyUGFzc1RleHR1cmVzKCkKIHsKLSAgICBpZiAobV9pbXBsVGV4dHVyZU1hbmFnZXIpCi0gICAg
ICAgIG1faW1wbFRleHR1cmVNYW5hZ2VyLT5ldmljdEFuZERlbGV0ZUFsbFRleHR1cmVzKG1faW1w
bFRleHR1cmVBbGxvY2F0b3IuZ2V0KCkpOworICAgIGlmIChtX3JlbmRlclBhc3NUZXh0dXJlQWxs
b2NhdG9yKQorICAgICAgICBtX3JlbmRlclBhc3NUZXh0dXJlQWxsb2NhdG9yLT5jbGVhcigpOwog
fQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dmlld3BvcnRDaGFuZ2VkKCkKQEAgLTM5
Nyw3ICszOTksNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dmlld3BvcnRDaGFuZ2Vk
KCkKICAgICBtX2lzVmlld3BvcnRDaGFuZ2VkID0gdHJ1ZTsKIAogICAgIC8vIFJlc2V0IHRoZSBj
dXJyZW50IFJlbmRlclBhc3MgdG8gZm9yY2UgYW4gdXBkYXRlIG9mIHRoZSB2aWV3cG9ydCBhbmQK
LSAgICAvLyBwcm9qZWN0aW9uIG1hdHJpeCBuZXh0IHRpbWUgdXNlUmVuZGVyUGFzcyBpcyBjYWxs
ZWQuCisgICAgLy8gcHJvamVjdGlvbiBtYXRyaXggbmV4dCB0aW1lIGJlZ2luRHJhd2luZ1RvUmVu
ZGVyUGFzcyBpcyBjYWxsZWQuCiAgICAgbV9jdXJyZW50UmVuZGVyUGFzcyA9IDA7CiB9CiAKQEAg
LTQzNCw2ICs0MzYsOSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZGVjaWRlUmVuZGVy
UGFzc0FsbG9jYXRpb25zRm9yRnJhbWUoY29uc3QgQ0NSZW5kZXJQYQogICAgIHNpemVfdCBtYXhM
aW1pdEJ5dGVzID0gVGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgp
KTsKICAgICBzaXplX3QgbWVtb3J5TGltaXRCeXRlcyA9IG1heExpbWl0Qnl0ZXMgLSBjb250ZW50
c01lbW9yeVVzZUJ5dGVzID4gMHUgPyBtYXhMaW1pdEJ5dGVzIC0gY29udGVudHNNZW1vcnlVc2VC
eXRlcyA6IDB1OwogCisgICAgbV9yZW5kZXJQYXNzVGV4dHVyZUFsbG9jYXRvci0+ZGVjaWRlQWxs
b2NhdGlvbnNGb3JGcmFtZShyZW5kZXJQYXNzZXNJbkRyYXdPcmRlciwgdmlld3BvcnRTaXplKCks
IG1lbW9yeUxpbWl0Qnl0ZXMpOworCisgICAgLy8gRklYTUU6IFJlbW92ZSBpbXBsVGV4dHVyZU1h
bmFnZXIgZW50aXJlbHkuCiAgICAgbV9pbXBsVGV4dHVyZU1hbmFnZXItPnNldE1heE1lbW9yeUxp
bWl0Qnl0ZXMobWVtb3J5TGltaXRCeXRlcyk7CiB9CiAKQEAgLTQ3Niw3ICs0ODEsNyBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZG9Ob09wKCkKIAogdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcywgY29u
c3QgRmxvYXRSZWN0JiBmcmFtZWJ1ZmZlckRhbWFnZVJlY3QpCiB7Ci0gICAgaWYgKCF1c2VSZW5k
ZXJQYXNzKHJlbmRlclBhc3MpKQorICAgIGlmICghYmVnaW5EcmF3aW5nVG9SZW5kZXJQYXNzKHJl
bmRlclBhc3MpKQogICAgICAgICByZXR1cm47CiAKICAgICBjbGVhclJlbmRlclBhc3MocmVuZGVy
UGFzcywgZnJhbWVidWZmZXJEYW1hZ2VSZWN0KTsKQEAgLTQ4NCw2ICs0ODksOCBAQCB2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKiBy
ZW5kZXJQYXNzLCBjb25zdAogICAgIGNvbnN0IENDUXVhZExpc3QmIHF1YWRMaXN0ID0gcmVuZGVy
UGFzcy0+cXVhZExpc3QoKTsKICAgICBmb3IgKENDUXVhZExpc3Q6OmNvbnN0QmFja1RvRnJvbnRJ
dGVyYXRvciBpdCA9IHF1YWRMaXN0LmJhY2tUb0Zyb250QmVnaW4oKTsgaXQgIT0gcXVhZExpc3Qu
YmFja1RvRnJvbnRFbmQoKTsgKytpdCkKICAgICAgICAgZHJhd1F1YWQoaXQtPmdldCgpKTsKKwor
ICAgIGVuZERyYXdpbmdUb1JlbmRlclBhc3MocmVuZGVyUGFzcyk7CiB9CiAKIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3UXVhZChjb25zdCBDQ0RyYXdRdWFkKiBxdWFkKQpAQCAtNTg4
LDcgKzU5NSw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3RGVidWdCb3JkZXJR
dWFkKGNvbnN0IENDRGVidWdCb3JkZXJEcmF3UXVhZCogcXVhCiAgICAgR0xDKGNvbnRleHQoKSwg
Y29udGV4dCgpLT5kcmF3RWxlbWVudHMoR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfTE9PUCwgNCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JULCA2ICogc2l6ZW9mKHVuc2lnbmVkIHNo
b3J0KSkpOwogfQogCi1zdGF0aWMgaW5saW5lIFNrQml0bWFwIGFwcGx5RmlsdGVycyhMYXllclJl
bmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3Bl
cmF0aW9ucyYgZmlsdGVycywgTWFuYWdlZFRleHR1cmUqIHNvdXJjZVRleHR1cmUpCitzdGF0aWMg
aW5saW5lIFNrQml0bWFwIGFwcGx5RmlsdGVycyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVy
UmVuZGVyZXIsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycywgY29u
c3QgQ0NTY29wZWRUZXh0dXJlJiBzb3VyY2VUZXh0dXJlKQogewogICAgIGlmIChmaWx0ZXJzLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFNrQml0bWFwKCk7CkBAIC01OTksMTAgKzYwNiwxMCBA
QCBzdGF0aWMgaW5saW5lIFNrQml0bWFwIGFwcGx5RmlsdGVycyhMYXllclJlbmRlcmVyQ2hyb21p
dW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0CiAKICAgICBsYXllclJlbmRlcmVyLT5jb250ZXh0KCkt
PmZsdXNoKCk7CiAKLSAgICByZXR1cm4gQ0NSZW5kZXJTdXJmYWNlRmlsdGVyczo6YXBwbHkoZmls
dGVycywgc291cmNlVGV4dHVyZS0+dGV4dHVyZUlkKCksIHNvdXJjZVRleHR1cmUtPnNpemUoKSwg
ZmlsdGVyQ29udGV4dC5nZXQoKSk7CisgICAgcmV0dXJuIENDUmVuZGVyU3VyZmFjZUZpbHRlcnM6
OmFwcGx5KGZpbHRlcnMsIHNvdXJjZVRleHR1cmUuaWQoKSwgc291cmNlVGV4dHVyZS5zaXplKCks
IGZpbHRlckNvbnRleHQuZ2V0KCkpOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
ZHJhd0JhY2tncm91bmRGaWx0ZXJzKGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKiBxdWFkLCBj
b25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgY29udGVudHNEZXZpY2VUcmFuc2Zvcm0pCiti
b29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0JhY2tncm91bmRGaWx0ZXJzKGNvbnN0IEND
UmVuZGVyUGFzc0RyYXdRdWFkKiBxdWFkLCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
Y29udGVudHNEZXZpY2VUcmFuc2Zvcm0sIENDU2NvcGVkVGV4dHVyZSYgYmFja2dyb3VuZFRleHR1
cmUpCiB7CiAgICAgLy8gVGhpcyBtZXRob2QgZHJhd3MgYSBiYWNrZ3JvdW5kIGZpbHRlciwgd2hp
Y2ggYXBwbGllcyBhIGZpbHRlciB0byBhbnkgcGl4ZWxzIGJlaGluZCB0aGUgcXVhZCBhbmQgc2Vl
biB0aHJvdWdoIGl0cyBiYWNrZ3JvdW5kLgogICAgIC8vIFRoZSBhbGdvcml0aG0gd29ya3MgYXMg
Zm9sbG93czoKQEAgLTYxOCwxNSArNjI1LDE5IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpkcmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1CiAg
ICAgLy8KICAgICAvLyBQaXhlbCBjb3BpZXMgaW4gdGhpcyBhbGdvcml0aG0gb2NjdXIgYXQgc3Rl
cHMgMiwgMywgNCwgYW5kIDUuCiAKLSAgICBDQ1JlbmRlclN1cmZhY2UqIGRyYXdpbmdTdXJmYWNl
ID0gcXVhZC0+cmVuZGVyUGFzcygpLT50YXJnZXRTdXJmYWNlKCk7CisgICAgYm9vbCBzdWNjZXNz
ID0gZmFsc2U7CisKICAgICBpZiAocXVhZC0+YmFja2dyb3VuZEZpbHRlcnMoKS5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7CiAKICAgICAvLyBGSVhN
RTogV2Ugb25seSBhbGxvdyBiYWNrZ3JvdW5kIGZpbHRlcnMgb24gYW4gb3BhcXVlIHJlbmRlciBz
dXJmYWNlIGJlY2F1c2Ugb3RoZXIgc3VyZmFjZXMgbWF5IGNvbnRhaW4KICAgICAvLyB0cmFuc2x1
Y2VudCBwaXhlbHMsIGFuZCB0aGUgY29udGVudHMgYmVoaW5kIHRob3NlIHRyYW5zbHVjZW50IHBp
eGVscyB3b3VsZG4ndCBoYXZlIHRoZSBmaWx0ZXIgYXBwbGllZC4KICAgICBpZiAobV9jdXJyZW50
UmVuZGVyUGFzcy0+aGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBBU1NFUlQoIW1fY3VycmVudE1hbmFnZWRUZXh0dXJlKTsKKyAgICAgICAgcmV0dXJuIHN1
Y2Nlc3M7CisgICAgQVNTRVJUKGlzQ3VycmVudFJlbmRlclBhc3MobV9kZWZhdWx0UmVuZGVyUGFz
cykpOworCisgICAgaWYgKCFtX3JlbmRlclBhc3NUZXh0dXJlQWxsb2NhdG9yLT5zaG91bGRBbGxv
Y2F0ZUJhY2tncm91bmRGaWx0ZXJUZXh0dXJlcyhxdWFkLT5yZW5kZXJQYXNzKCkpKQorICAgICAg
ICByZXR1cm4gc3VjY2VzczsKIAogICAgIC8vIEZJWE1FOiBEbyBhIHNpbmdsZSByZWFkYmFjayBm
b3IgYm90aCB0aGUgc3VyZmFjZSBhbmQgcmVwbGljYSBhbmQgY2FjaGUgdGhlIGZpbHRlcmVkIHJl
c3VsdHMgKG9uY2UgZmlsdGVyIHRleHR1cmVzIGFyZSBub3QgcmV1c2VkKS4KICAgICBJbnRSZWN0
IGRldmljZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KENDTWF0aFV0aWw6Om1hcENsaXBwZWRSZWN0
KGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtLCBzaGFyZWRHZW9tZXRyeVF1YWQoKS5ib3VuZGluZ0Jv
eCgpKSk7CkBAIC02MzgsMjIgKzY0OSwyNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
ZHJhd0JhY2tncm91bmRGaWx0ZXJzKGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKiBxdQogCiAg
ICAgZGV2aWNlUmVjdC5pbnRlcnNlY3QobV9jdXJyZW50UmVuZGVyUGFzcy0+ZnJhbWVidWZmZXJP
dXRwdXRSZWN0KCkpOwogCi0gICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBkZXZpY2VCYWNrZ3Jv
dW5kVGV4dHVyZSA9IE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUobV9pbXBsVGV4dHVyZU1hbmFnZXIu
Z2V0KCkpOwotICAgIGlmICghZ2V0RnJhbWVidWZmZXJUZXh0dXJlKGRldmljZUJhY2tncm91bmRU
ZXh0dXJlLmdldCgpLCBkZXZpY2VSZWN0KSkKLSAgICAgICAgcmV0dXJuOworICAgIENDU2NvcGVk
VGV4dHVyZSBkZXZpY2VCYWNrZ3JvdW5kVGV4dHVyZTsKKyAgICBkZXZpY2VCYWNrZ3JvdW5kVGV4
dHVyZS5wcmVwYXJlKGRldmljZVJlY3Quc2l6ZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCKTsK
KyAgICBpZiAoIWRldmljZUJhY2tncm91bmRUZXh0dXJlLmNyZWF0ZShtX2NvbnRleHQpKQorICAg
ICAgICByZXR1cm4gc3VjY2VzczsKKyAgICBnZXRGcmFtZWJ1ZmZlclRleHR1cmUoZGV2aWNlQmFj
a2dyb3VuZFRleHR1cmUsIGRldmljZVJlY3QpOwogCi0gICAgU2tCaXRtYXAgZmlsdGVyZWREZXZp
Y2VCYWNrZ3JvdW5kID0gYXBwbHlGaWx0ZXJzKHRoaXMsIHF1YWQtPmJhY2tncm91bmRGaWx0ZXJz
KCksIGRldmljZUJhY2tncm91bmRUZXh0dXJlLmdldCgpKTsKKyAgICBTa0JpdG1hcCBmaWx0ZXJl
ZERldmljZUJhY2tncm91bmQgPSBhcHBseUZpbHRlcnModGhpcywgcXVhZC0+YmFja2dyb3VuZEZp
bHRlcnMoKSwgZGV2aWNlQmFja2dyb3VuZFRleHR1cmUpOwogICAgIGlmICghZmlsdGVyZWREZXZp
Y2VCYWNrZ3JvdW5kLmdldFRleHR1cmUoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4gc3VjY2VzczsKIAogICAgIEdyVGV4dHVyZSogdGV4dHVyZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
R3JUZXh0dXJlKj4oZmlsdGVyZWREZXZpY2VCYWNrZ3JvdW5kLmdldFRleHR1cmUoKSk7CiAgICAg
aW50IGZpbHRlcmVkRGV2aWNlQmFja2dyb3VuZFRleHR1cmVJZCA9IHRleHR1cmUtPmdldFRleHR1
cmVIYW5kbGUoKTsKIAotICAgIGlmICghZHJhd2luZ1N1cmZhY2UtPnByZXBhcmVCYWNrZ3JvdW5k
VGV4dHVyZSh0aGlzKSkKLSAgICAgICAgcmV0dXJuOworICAgIGJvb2wgZm9yRnJhbWVidWZmZXJB
dHRhY2htZW50ID0gdHJ1ZTsKKyAgICBiYWNrZ3JvdW5kVGV4dHVyZS5wcmVwYXJlKHF1YWQtPnF1
YWRSZWN0KCkuc2l6ZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgZm9yRnJhbWVidWZmZXJB
dHRhY2htZW50KTsKKyAgICBpZiAoIWJhY2tncm91bmRUZXh0dXJlLmNyZWF0ZShtX2NvbnRleHQp
KQorICAgICAgICByZXR1cm4gc3VjY2VzczsKIAogICAgIGNvbnN0IENDUmVuZGVyUGFzcyogdGFy
Z2V0UmVuZGVyUGFzcyA9IG1fY3VycmVudFJlbmRlclBhc3M7Ci0gICAgaWYgKHVzZU1hbmFnZWRU
ZXh0dXJlKGRyYXdpbmdTdXJmYWNlLT5iYWNrZ3JvdW5kVGV4dHVyZSgpLCBxdWFkLT5xdWFkUmVj
dCgpKSkgeworICAgIGlmIChiZWdpbkRyYXdpbmdUb1Njb3BlZFRleHR1cmUoYmFja2dyb3VuZFRl
eHR1cmUsIHF1YWQtPnF1YWRSZWN0KCkpKSB7CiAgICAgICAgIC8vIENvcHkgdGhlIHJlYWRiYWNr
IHBpeGVscyBmcm9tIGRldmljZSB0byB0aGUgYmFja2dyb3VuZCB0ZXh0dXJlIGZvciB0aGUgc3Vy
ZmFjZS4KICAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZGV2aWNlVG9GcmFtZWJ1ZmZl
clRyYW5zZm9ybTsKICAgICAgICAgZGV2aWNlVG9GcmFtZWJ1ZmZlclRyYW5zZm9ybS50cmFuc2xh
dGUocXVhZC0+cXVhZFJlY3QoKS53aWR0aCgpIC8gMi4wLCBxdWFkLT5xdWFkUmVjdCgpLmhlaWdo
dCgpIC8gMi4wKTsKQEAgLTY2MywxNyArNjc4LDE4IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1
CiAgICAgICAgIGRldmljZVRvRnJhbWVidWZmZXJUcmFuc2Zvcm0udHJhbnNsYXRlKGRldmljZVJl
Y3QueCgpLCBkZXZpY2VSZWN0LnkoKSk7CiAKICAgICAgICAgY29weVRleHR1cmVUb0ZyYW1lYnVm
ZmVyKGZpbHRlcmVkRGV2aWNlQmFja2dyb3VuZFRleHR1cmVJZCwgZGV2aWNlUmVjdC5zaXplKCks
IGRldmljZVRvRnJhbWVidWZmZXJUcmFuc2Zvcm0pOwotCi0gICAgICAgIHVzZVJlbmRlclBhc3Mo
dGFyZ2V0UmVuZGVyUGFzcyk7CisgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwogICAgIH0KKworICAg
IGVuZERyYXdpbmdUb1Njb3BlZFRleHR1cmUoYmFja2dyb3VuZFRleHR1cmUpOworICAgIHJlc3Vt
ZURyYXdpbmdUb1JlbmRlclBhc3ModGFyZ2V0UmVuZGVyUGFzcyk7CisKKyAgICByZXR1cm4gc3Vj
Y2VzczsKIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSZW5kZXJQYXNzUXVh
ZChjb25zdCBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcXVhZCkKIHsKLSAgICAvLyBUaGUgcmVwbGlj
YSBpcyBhbHdheXMgZHJhd24gZmlyc3QsIHNvIGZyZWUgYWZ0ZXIgZHJhd2luZyB0aGUgY29udGVu
dHMuCi0gICAgYm9vbCBzaG91bGRSZWxlYXNlVGV4dHVyZXMgPSAhcXVhZC0+aXNSZXBsaWNhKCk7
Ci0KLSAgICBDQ1JlbmRlclN1cmZhY2UqIGRyYXdpbmdTdXJmYWNlID0gcXVhZC0+cmVuZGVyUGFz
cygpLT50YXJnZXRTdXJmYWNlKCk7CisgICAgY29uc3QgQ0NTY29wZWRUZXh0dXJlJiBjb250ZW50
c1RleHR1cmUgPSBtX3JlbmRlclBhc3NUZXh0dXJlQWxsb2NhdG9yLT5iZWdpbkRyYXdpbmdGcm9t
UmVuZGVyUGFzcyhxdWFkLT5yZW5kZXJQYXNzKCkpOwogCiAgICAgV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXggcmVuZGVyVHJhbnNmb3JtID0gcXVhZC0+bGF5ZXJUcmFuc2Zvcm0oKTsKICAgICAvLyBB
cHBseSBhIHNjYWxpbmcgZmFjdG9yIHRvIHNpemUgdGhlIHF1YWQgZnJvbSAxeDEgdG8gaXRzIGlu
dGVuZGVkIHNpemUuCkBAIC02ODEsMjggKzY5NywzMCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHJhd1JlbmRlclBhc3NRdWFkKGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKiBxdWFk
KQogICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtID0g
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgod2luZG93TWF0cml4KCkgKiBwcm9qZWN0aW9uTWF0cml4
KCkgKiByZW5kZXJUcmFuc2Zvcm0pLnRvMmRUcmFuc2Zvcm0oKTsKIAogICAgIC8vIENhbiBvbmx5
IGRyYXcgc3VyZmFjZSBpZiBkZXZpY2UgbWF0cml4IGlzIGludmVydGlibGUuCi0gICAgaWYgKCFj
b250ZW50c0RldmljZVRyYW5zZm9ybS5pc0ludmVydGlibGUoKSB8fCAhZHJhd2luZ1N1cmZhY2Ut
Pmhhc1ZhbGlkQ29udGVudHNUZXh0dXJlKCkpIHsKLSAgICAgICAgaWYgKHNob3VsZFJlbGVhc2VU
ZXh0dXJlcykgewotICAgICAgICAgICAgZHJhd2luZ1N1cmZhY2UtPnJlbGVhc2VCYWNrZ3JvdW5k
VGV4dHVyZSgpOwotICAgICAgICAgICAgZHJhd2luZ1N1cmZhY2UtPnJlbGVhc2VDb250ZW50c1Rl
eHR1cmUoKTsKLSAgICAgICAgfQorICAgIGlmICghY29udGVudHNUZXh0dXJlIHx8ICFjb250ZW50
c0RldmljZVRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkgeworICAgICAgICBtX3JlbmRlclBhc3NU
ZXh0dXJlQWxsb2NhdG9yLT5lbmREcmF3aW5nRnJvbVJlbmRlclBhc3MocXVhZC0+cmVuZGVyUGFz
cygpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGRyYXdCYWNrZ3JvdW5kRmlsdGVy
cyhxdWFkLCBjb250ZW50c0RldmljZVRyYW5zZm9ybSk7CisgICAgQVNTRVJUKGNvbnRlbnRzVGV4
dHVyZS5zaXplKCkgPT0gcXVhZC0+cXVhZFJlY3QoKS5zaXplKCkpOworCisgICAgQ0NTY29wZWRU
ZXh0dXJlIGJhY2tncm91bmRUZXh0dXJlOworICAgIGJvb2wgaGFzQmFja2dyb3VuZFRleHR1cmUg
PSBkcmF3QmFja2dyb3VuZEZpbHRlcnMocXVhZCwgY29udGVudHNEZXZpY2VUcmFuc2Zvcm0sIGJh
Y2tncm91bmRUZXh0dXJlKTsKIAogICAgIC8vIEZJWE1FOiBDYWNoZSB0aGlzIHZhbHVlIHNvIHRo
YXQgd2UgZG9uJ3QgaGF2ZSB0byBkbyBpdCBmb3IgYm90aCB0aGUgc3VyZmFjZSBhbmQgaXRzIHJl
cGxpY2EuCiAgICAgLy8gQXBwbHkgZmlsdGVycyB0byB0aGUgY29udGVudHMgdGV4dHVyZS4KLSAg
ICBTa0JpdG1hcCBmaWx0ZXJCaXRtYXAgPSBhcHBseUZpbHRlcnModGhpcywgcXVhZC0+ZmlsdGVy
cygpLCBkcmF3aW5nU3VyZmFjZS0+Y29udGVudHNUZXh0dXJlKCkpOwotICAgIGludCBjb250ZW50
c1RleHR1cmVJZCA9IGRyYXdpbmdTdXJmYWNlLT5jb250ZW50c1RleHR1cmUoKS0+dGV4dHVyZUlk
KCk7CisgICAgU2tCaXRtYXAgZmlsdGVyQml0bWFwID0gYXBwbHlGaWx0ZXJzKHRoaXMsIHF1YWQt
PmZpbHRlcnMoKSwgY29udGVudHNUZXh0dXJlKTsKKyAgICB1bnNpZ25lZCBjb250ZW50c1RleHR1
cmVJZCA9IGNvbnRlbnRzVGV4dHVyZS5pZCgpOwogICAgIGlmIChmaWx0ZXJCaXRtYXAuZ2V0VGV4
dHVyZSgpKSB7CiAgICAgICAgIEdyVGV4dHVyZSogdGV4dHVyZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
R3JUZXh0dXJlKj4oZmlsdGVyQml0bWFwLmdldFRleHR1cmUoKSk7CiAgICAgICAgIGNvbnRlbnRz
VGV4dHVyZUlkID0gdGV4dHVyZS0+Z2V0VGV4dHVyZUhhbmRsZSgpOwogICAgIH0KIAogICAgIC8v
IERyYXcgdGhlIGJhY2tncm91bmQgdGV4dHVyZSBpZiB0aGVyZSBpcyBvbmUuCi0gICAgaWYgKGRy
YXdpbmdTdXJmYWNlLT5oYXNWYWxpZEJhY2tncm91bmRUZXh0dXJlKCkpCi0gICAgICAgIGNvcHlU
ZXh0dXJlVG9GcmFtZWJ1ZmZlcihkcmF3aW5nU3VyZmFjZS0+YmFja2dyb3VuZFRleHR1cmUoKS0+
dGV4dHVyZUlkKCksIHF1YWQtPnF1YWRSZWN0KCkuc2l6ZSgpLCBxdWFkLT5sYXllclRyYW5zZm9y
bSgpKTsKKyAgICBpZiAoaGFzQmFja2dyb3VuZFRleHR1cmUpIHsKKyAgICAgICAgQVNTRVJUKGJh
Y2tncm91bmRUZXh0dXJlLnNpemUoKSA9PSBxdWFkLT5xdWFkUmVjdCgpLnNpemUoKSk7CisgICAg
ICAgIGNvcHlUZXh0dXJlVG9GcmFtZWJ1ZmZlcihiYWNrZ3JvdW5kVGV4dHVyZS5pZCgpLCBxdWFk
LT5xdWFkUmVjdCgpLnNpemUoKSwgcXVhZC0+bGF5ZXJUcmFuc2Zvcm0oKSk7CisgICAgfQogCiAg
ICAgRmxvYXRRdWFkIGRldmljZVF1YWQgPSBjb250ZW50c0RldmljZVRyYW5zZm9ybS5tYXBRdWFk
KHNoYXJlZEdlb21ldHJ5UXVhZCgpKTsKICAgICBDQ0xheWVyUXVhZCBkZXZpY2VMYXllckJvdW5k
cyA9IENDTGF5ZXJRdWFkKEZsb2F0UXVhZChkZXZpY2VRdWFkLmJvdW5kaW5nQm94KCkpKTsKQEAg
LTcyMCw3ICs3MzgsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRlclBh
c3NRdWFkKGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKiBxdWFkKQogICAgIC8vIEZJWE1FOiB1
c2UgdGhlIGJhY2tncm91bmRUZXh0dXJlIGFuZCBibGVuZCB0aGUgYmFja2dyb3VuZCBpbiB3aXRo
IHRoaXMgZHJhdyBpbnN0ZWFkIG9mIGhhdmluZyBhIHNlcGFyYXRlIGNvcHkgb2YgdGhlIGJhY2tn
cm91bmQgdGV4dHVyZS4KIAogICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YWN0aXZlVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKLSAgICBjb250ZXh0KCktPmJpbmRU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBjb250ZW50c1RleHR1cmVJZCk7
CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgY29udGVudHNUZXh0dXJlSWQpKTsKIAogICAgIGludCBzaGFkZXJR
dWFkTG9jYXRpb24gPSAtMTsKICAgICBpbnQgc2hhZGVyRWRnZUxvY2F0aW9uID0gLTE7CkBAIC03
ODMsMTAgKzgwMSw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFz
c1F1YWQoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1YWQpCiAgICAgZHJhd1RleHR1cmVk
UXVhZChxdWFkLT5sYXllclRyYW5zZm9ybSgpLCBxdWFkLT5xdWFkUmVjdCgpLndpZHRoKCksIHF1
YWQtPnF1YWRSZWN0KCkuaGVpZ2h0KCksIHF1YWQtPm9wYWNpdHkoKSwgc3VyZmFjZVF1YWQsCiAg
ICAgICAgICAgICAgICAgICAgICBzaGFkZXJNYXRyaXhMb2NhdGlvbiwgc2hhZGVyQWxwaGFMb2Nh
dGlvbiwgc2hhZGVyUXVhZExvY2F0aW9uKTsKIAotICAgIGlmIChzaG91bGRSZWxlYXNlVGV4dHVy
ZXMpIHsKLSAgICAgICAgZHJhd2luZ1N1cmZhY2UtPnJlbGVhc2VCYWNrZ3JvdW5kVGV4dHVyZSgp
OwotICAgICAgICBkcmF3aW5nU3VyZmFjZS0+cmVsZWFzZUNvbnRlbnRzVGV4dHVyZSgpOwotICAg
IH0KKyAgICBtX3JlbmRlclBhc3NUZXh0dXJlQWxsb2NhdG9yLT5lbmREcmF3aW5nRnJvbVJlbmRl
clBhc3MocXVhZC0+cmVuZGVyUGFzcygpKTsKIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmRyYXdTb2xpZENvbG9yUXVhZChjb25zdCBDQ1NvbGlkQ29sb3JEcmF3UXVhZCogcXVhZCkK
QEAgLTExNjAsMTAgKzExNzUsMTIgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdJ
T1N1cmZhY2VRdWFkKGNvbnN0IENDSU9TdXJmYWNlRHJhd1F1YWQqIHF1YWQpCiAKIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3SGVhZHNVcERpc3BsYXkoTWFuYWdlZFRleHR1cmUqIGh1
ZFRleHR1cmUsIGNvbnN0IEludFNpemUmIGh1ZFNpemUpCiB7CisgICAgaWYgKCFiZWdpbkRyYXdp
bmdUb1JlbmRlclBhc3MobV9kZWZhdWx0UmVuZGVyUGFzcykpCisgICAgICAgIHJldHVybjsKKwog
ICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpC
TEVORCkpOwogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNz
Q29udGV4dDNEOjpPTkUsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhBKSk7
CiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNE
OjpTQ0lTU09SX1RFU1QpKTsKLSAgICB1c2VSZW5kZXJQYXNzKG1fZGVmYXVsdFJlbmRlclBhc3Mp
OwogCiAgICAgY29uc3QgSGVhZHNVcERpc3BsYXlQcm9ncmFtKiBwcm9ncmFtID0gaGVhZHNVcERp
c3BsYXlQcm9ncmFtKCk7CiAgICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6
ZWQoKSk7CkBAIC0xMTc5LDYgKzExOTYsOCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
ZHJhd0hlYWRzVXBEaXNwbGF5KE1hbmFnZWRUZXh0dXJlKiBodWRUZXh0dXJlLCBjb25zdAogICAg
ICAgICAgICAgICAgICAgICAgMSwgc2hhcmVkR2VvbWV0cnlRdWFkKCksIHByb2dyYW0tPnZlcnRl
eFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCksCiAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFt
LT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24oKSwKICAgICAgICAgICAgICAgICAgICAg
IC0xKTsKKworICAgIGVuZERyYXdpbmdUb1JlbmRlclBhc3MobV9kZWZhdWx0UmVuZGVyUGFzcyk7
CiB9CiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpmaW5pc2hEcmF3aW5nRnJhbWUoKQpA
QCAtMTE5NCw2ICsxMjEzLDEzIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpmaW5pc2hE
cmF3aW5nRnJhbWUoKQogICAgIG1faW1wbFRleHR1cmVNYW5hZ2VyLT5zZXRQcmVmZXJyZWRNZW1v
cnlMaW1pdEJ5dGVzKHByZWZlcnJlZExpbWl0KTsKICAgICBtX2ltcGxUZXh0dXJlTWFuYWdlci0+
cmVkdWNlTWVtb3J5VG9MaW1pdChwcmVmZXJyZWRMaW1pdCk7CiAgICAgbV9pbXBsVGV4dHVyZU1h
bmFnZXItPmRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyhtX2ltcGxUZXh0dXJlQWxsb2NhdG9yLmdldCgp
KTsKKworICAgIG1fcmVuZGVyUGFzc1RleHR1cmVBbGxvY2F0b3ItPnJlbW92ZUFsbG9jYXRpb25z
Tm90U2F2ZWRGb3JOZXh0RnJhbWUoKTsKK30KKworYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06
Omhhc0NhY2hlZFJlc291cmNlc0ZvclJlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5k
ZXJQYXNzKQoreworICAgIHJldHVybiBtX3JlbmRlclBhc3NUZXh0dXJlQWxsb2NhdG9yLT5oYXND
YWNoZWRUZXh0dXJlKHJlbmRlclBhc3MpOwogfQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6dG9HTE1hdHJpeChmbG9hdCogZmxhdHRlbmVkLCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgbSkKQEAgLTEyNTcsMTAgKzEyODMsNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6Y29weVRleHR1cmVUb0ZyYW1lYnVmZmVyKGludCB0ZXh0dXJlSWQsIGNvbnN0IEludFNpegog
CiAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFMCkpOwogICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YmluZFRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmVJZCkpOwotICAgIEdM
Qyhjb250ZXh0KCksIGNvbnRleHQoKS0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkxJTkVBUikpOwotICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dGV4
UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUikpOwotICAg
IEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGlj
c0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSkpOwotICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQo
KS0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURH
RSkpOwogCiAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51c2VQcm9ncmFtKHByb2dyYW0t
PnByb2dyYW0oKSkpOwogICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTFpKHBy
b2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9uKCksIDApKTsKQEAgLTEzODks
NTQgKzE0MTEsNzEgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmdldEZyYW1lYnVmZmVy
UGl4ZWxzKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYgcmUKICAgICB9CiB9CiAKLWJvb2wg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRGcmFtZWJ1ZmZlclRleHR1cmUoTWFuYWdlZFRleHR1
cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIGRldmljZVJlY3QpCit2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6Z2V0RnJhbWVidWZmZXJUZXh0dXJlKENDU2NvcGVkVGV4dHVyZSYgdGV4dHVy
ZSwgY29uc3QgSW50UmVjdCYgZGV2aWNlUmVjdCkKIHsKLSAgICBpZiAoIXRleHR1cmUtPnJlc2Vy
dmUoZGV2aWNlUmVjdC5zaXplKCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUKHRleHR1cmUgJiYgdGV4dHVyZS5zaXplKCkgPT0gZGV2
aWNlUmVjdC5zaXplKCkgJiYgdGV4dHVyZS5mb3JtYXQoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCKTsKIAotICAgIFJlZlB0cjxDQ0dyYXBoaWNzQ29udGV4dD4gY2NDb250ZXh0ID0gQ0NHcmFw
aGljc0NvbnRleHQ6OmNyZWF0ZTNEKG1fY29udGV4dCk7Ci0gICAgdGV4dHVyZS0+YmluZFRleHR1
cmUoY2NDb250ZXh0LmdldCgpLCBtX2ltcGxUZXh0dXJlQWxsb2NhdG9yLmdldCgpKTsKLSAgICBH
TEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmNvcHlUZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCAwLCB0ZXh0dXJlLT5mb3JtYXQoKSwKKyAgICBHTEMobV9jb250ZXh0LCBt
X2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0
dXJlLmlkKCkpKTsKKyAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmNvcHlUZXhJbWFnZTJE
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCB0ZXh0dXJlLmZvcm1hdCgpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlUmVjdC54KCks
IGRldmljZVJlY3QueSgpLCBkZXZpY2VSZWN0LndpZHRoKCksIGRldmljZVJlY3QuaGVpZ2h0KCks
IDApKTsKLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OmlzQ3VycmVudFJlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzKQogewot
ICAgIHJldHVybiBtX2N1cnJlbnRSZW5kZXJQYXNzID09IHJlbmRlclBhc3MgJiYgIW1fY3VycmVu
dE1hbmFnZWRUZXh0dXJlOworICAgIHJldHVybiBtX2N1cnJlbnRSZW5kZXJQYXNzID09IHJlbmRl
clBhc3MgJiYgIW1fY3VycmVudFNjb3BlZFRleHR1cmU7CiB9CiAKLWJvb2wgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjp1c2VSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcykK
K2Jvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpiZWdpbkRyYXdpbmdUb1JlbmRlclBhc3MoY29u
c3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzKQogewogICAgIG1fY3VycmVudFJlbmRlclBhc3Mg
PSByZW5kZXJQYXNzOwotICAgIG1fY3VycmVudE1hbmFnZWRUZXh0dXJlID0gMDsKKyAgICBtX2N1
cnJlbnRTY29wZWRUZXh0dXJlID0gMDsKKworICAgIGNvbnN0IENDU2NvcGVkVGV4dHVyZSYgdGV4
dHVyZSA9IG1fcmVuZGVyUGFzc1RleHR1cmVBbGxvY2F0b3ItPmJlZ2luRHJhd2luZ1RvUmVuZGVy
UGFzcyhyZW5kZXJQYXNzKTsKIAogICAgIGlmIChyZW5kZXJQYXNzID09IG1fZGVmYXVsdFJlbmRl
clBhc3MpIHsKKyAgICAgICAgQVNTRVJUKCF0ZXh0dXJlKTsKICAgICAgICAgR0xDKG1fY29udGV4
dCwgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCAwKSk7CiAgICAgICAgIHNldERyYXdGcmFtZWJ1ZmZlclJlY3QocmVuZGVyUGFzcy0+ZnJh
bWVidWZmZXJPdXRwdXRSZWN0KCksIHRydWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKLSAgICBpZiAoIXJlbmRlclBhc3MtPnRhcmdldFN1cmZhY2UoKS0+cHJlcGFyZUNvbnRlbnRz
VGV4dHVyZSh0aGlzKSkKKyAgICBpZiAoIXRleHR1cmUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIHJldHVybiBiaW5kRnJhbWVidWZmZXJUb1RleHR1cmUocmVuZGVyUGFzcy0+dGFyZ2V0
U3VyZmFjZSgpLT5jb250ZW50c1RleHR1cmUoKSwgcmVuZGVyUGFzcy0+ZnJhbWVidWZmZXJPdXRw
dXRSZWN0KCkpOworICAgIHJldHVybiBiaW5kRnJhbWVidWZmZXJUb1RleHR1cmUodGV4dHVyZSwg
cmVuZGVyUGFzcy0+ZnJhbWVidWZmZXJPdXRwdXRSZWN0KCkpOworfQorCitib29sIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6cmVzdW1lRHJhd2luZ1RvUmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBh
c3MqIHJlbmRlclBhc3MpCit7CisgICAgcmV0dXJuIGJlZ2luRHJhd2luZ1RvUmVuZGVyUGFzcyhy
ZW5kZXJQYXNzKTsKK30KKwordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmVuZERyYXdpbmdU
b1JlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzKQoreworICAgIEFTU0VS
VChtX2N1cnJlbnRSZW5kZXJQYXNzID09IHJlbmRlclBhc3MpOworICAgIG1fcmVuZGVyUGFzc1Rl
eHR1cmVBbGxvY2F0b3ItPmVuZERyYXdpbmdUb1JlbmRlclBhc3MocmVuZGVyUGFzcyk7CiB9CiAK
LWJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1c2VNYW5hZ2VkVGV4dHVyZShNYW5hZ2VkVGV4
dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdmlld3BvcnRSZWN0KQorYm9vbCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmJlZ2luRHJhd2luZ1RvU2NvcGVkVGV4dHVyZShjb25zdCBDQ1Njb3Bl
ZFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHZpZXdwb3J0UmVjdCkKIHsKICAgICBt
X2N1cnJlbnRSZW5kZXJQYXNzID0gMDsKLSAgICBtX2N1cnJlbnRNYW5hZ2VkVGV4dHVyZSA9IHRl
eHR1cmU7CisgICAgbV9jdXJyZW50U2NvcGVkVGV4dHVyZSA9ICZ0ZXh0dXJlOwogCiAgICAgcmV0
dXJuIGJpbmRGcmFtZWJ1ZmZlclRvVGV4dHVyZSh0ZXh0dXJlLCB2aWV3cG9ydFJlY3QpOwogfQog
Ci1ib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6YmluZEZyYW1lYnVmZmVyVG9UZXh0dXJlKE1h
bmFnZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBmcmFtZWJ1ZmZlclJlY3QpCit2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZW5kRHJhd2luZ1RvU2NvcGVkVGV4dHVyZShjb25z
dCBDQ1Njb3BlZFRleHR1cmUmIHRleHR1cmUpCiB7Ci0gICAgR0xDKG1fY29udGV4dCwgbV9jb250
ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX29m
ZnNjcmVlbkZyYW1lYnVmZmVySWQpKTsKKyAgICBBU1NFUlRfVU5VU0VEKHRleHR1cmUsIG1fY3Vy
cmVudFNjb3BlZFRleHR1cmUgPT0gJnRleHR1cmUpOworfQogCi0gICAgUmVmUHRyPENDR3JhcGhp
Y3NDb250ZXh0PiBjY0NvbnRleHQgPSBDQ0dyYXBoaWNzQ29udGV4dDo6Y3JlYXRlM0QobV9jb250
ZXh0KTsKLSAgICB0ZXh0dXJlLT5mcmFtZWJ1ZmZlclRleHR1cmUyRChjY0NvbnRleHQuZ2V0KCks
IG1faW1wbFRleHR1cmVBbGxvY2F0b3IuZ2V0KCkpOworYm9vbCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmJpbmRGcmFtZWJ1ZmZlclRvVGV4dHVyZShjb25zdCBDQ1Njb3BlZFRleHR1cmUmIHRleHR1
cmUsIGNvbnN0IEludFJlY3QmIGZyYW1lYnVmZmVyUmVjdCkKK3sKKyAgICBBU1NFUlQodGV4dHVy
ZSk7CisgICAgQVNTRVJUKHRleHR1cmUuaWQoKSk7CisKKyAgICBHTEMobV9jb250ZXh0LCBtX2Nv
bnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1f
b2Zmc2NyZWVuRnJhbWVidWZmZXJJZCkpOworICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+
ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFw
aGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCB0ZXh0dXJlLmlkKCksIDApKTsKIAogI2lmICFkZWZpbmVkICggTkRFQlVHICkKICAg
ICBpZiAobV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRF
KSB7CkBAIC0xNTA4LDYgKzE1NDcsOCBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5p
dGlhbGl6ZVNoYXJlZE9iamVjdHMoKQogCiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5m
bHVzaCgpKTsKIAorICAgIENDU2NvcGVkVGV4dHVyZTo6aW5pdGlhbGl6ZUNhcGFiaWxpdGllcyht
X2NhcGFiaWxpdGllcyk7CisKICAgICBtX2ltcGxUZXh0dXJlTWFuYWdlciA9IFRleHR1cmVNYW5h
Z2VyOjpjcmVhdGUoVGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgp
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4
dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jYXBhYmlsaXRpZXMu
bWF4VGV4dHVyZVNpemUpOwpAQCAtMTUyNCw2ICsxNTY1LDcgQEAgYm9vbCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzKCkKICAgICAgICAgbV9jb250ZW50c1Rl
eHR1cmVBbGxvY2F0b3ItPnNldFVzZVRleHR1cmVTdG9yYWdlRXh0KHRydWUpOwogICAgICAgICBt
X2ltcGxUZXh0dXJlQWxsb2NhdG9yLT5zZXRVc2VUZXh0dXJlU3RvcmFnZUV4dCh0cnVlKTsKICAg
ICB9CisgICAgbV9yZW5kZXJQYXNzVGV4dHVyZUFsbG9jYXRvciA9IENDUmVuZGVyUGFzc1RleHR1
cmVBbGxvY2F0b3I6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCkpOwogCiAgICAgcmV0dXJuIHRydWU7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IGU1MjVkMDc2MDQ2ODA0
MzE3ODE0ZDEzZGJiM2NmYzliZmE3N2E1NDguLjM3YWY5MmI0Y2VmMDQ4Y2Y4NjNlODlkN2QzMzMz
MGU3Zjg1MDgwOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC0zNiw3
ICszNiw5IEBACiAKICNpbmNsdWRlICJUZXh0dXJlQ29waWVyLmgiCiAjaW5jbHVkZSAiVHJhY2tp
bmdUZXh0dXJlQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiY2MvQ0NSZW5kZXJQYXNzVGV4dHVyZUFs
bG9jYXRvci5oIgogI2luY2x1ZGUgImNjL0NDUmVuZGVyZXIuaCIKKyNpbmNsdWRlICJjYy9DQ1Nj
b3BlZFRleHR1cmUuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC03OSw2ICs4MSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZHJh
d1JlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKiwgY29uc3QgRmxvYXRSZWN0JiBmcmFtZWJ1
ZmZlckRhbWFnZVJlY3QpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hEcmF3aW5n
RnJhbWUoKSBPVkVSUklERTsKIAorICAgIHZpcnR1YWwgYm9vbCBoYXNDYWNoZWRSZXNvdXJjZXNG
b3JSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzcyopIE9WRVJSSURFOworCiAgICAgdmlydHVh
bCB2b2lkIGRyYXdIZWFkc1VwRGlzcGxheShNYW5hZ2VkVGV4dHVyZSosIGNvbnN0IEludFNpemUm
IGh1ZFNpemUpIE9WRVJSSURFOwogCiAgICAgLy8gd2FpdHMgZm9yIHJlbmRlcmluZyB0byBmaW5p
c2gKQEAgLTkzLDcgKzk3LDcgQEAgcHVibGljOgogICAgIGNvbnN0IEdlb21ldHJ5QmluZGluZyog
c2hhcmVkR2VvbWV0cnkoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZEdlb21ldHJ5LmdldCgpOyB9
CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RnJhbWVidWZmZXJQaXhlbHModm9pZCAqcGl4ZWxzLCBj
b25zdCBJbnRSZWN0JikgT1ZFUlJJREU7Ci0gICAgYm9vbCBnZXRGcmFtZWJ1ZmZlclRleHR1cmUo
TWFuYWdlZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBkZXZpY2VSZWN0KTsKKyAgICB2b2lkIGdl
dEZyYW1lYnVmZmVyVGV4dHVyZShDQ1Njb3BlZFRleHR1cmUmLCBjb25zdCBJbnRSZWN0JiBkZXZp
Y2VSZWN0KTsKIAogICAgIHZpcnR1YWwgVGV4dHVyZU1hbmFnZXIqIGltcGxUZXh0dXJlTWFuYWdl
cigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faW1wbFRleHR1cmVNYW5hZ2VyLmdldCgpOyB9
CiAgICAgdmlydHVhbCBUZXh0dXJlQ29waWVyKiB0ZXh0dXJlQ29waWVyKCkgY29uc3QgT1ZFUlJJ
REUgeyByZXR1cm4gbV90ZXh0dXJlQ29waWVyLmdldCgpOyB9CkBAIC0xMjcsNyArMTMxLDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGRyYXdRdWFkKGNvbnN0IENDRHJhd1F1YWQqKTsKICAgICB2b2lk
IGRyYXdDaGVja2VyYm9hcmRRdWFkKGNvbnN0IENDQ2hlY2tlcmJvYXJkRHJhd1F1YWQqKTsKICAg
ICB2b2lkIGRyYXdEZWJ1Z0JvcmRlclF1YWQoY29uc3QgQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkKik7
Ci0gICAgdm9pZCBkcmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1
YWQqLCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBkZXZpY2VUcmFuc2Zv
cm0pOworICAgIGJvb2wgZHJhd0JhY2tncm91bmRGaWx0ZXJzKGNvbnN0IENDUmVuZGVyUGFzc0Ry
YXdRdWFkKiwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZGV2aWNlVHJh
bnNmb3JtLCBDQ1Njb3BlZFRleHR1cmUmIGJhY2tncm91bmRUZXh0dXJlKTsKICAgICB2b2lkIGRy
YXdSZW5kZXJQYXNzUXVhZChjb25zdCBDQ1JlbmRlclBhc3NEcmF3UXVhZCopOwogICAgIHZvaWQg
ZHJhd1NvbGlkQ29sb3JRdWFkKGNvbnN0IENDU29saWRDb2xvckRyYXdRdWFkKik7CiAgICAgdm9p
ZCBkcmF3U3RyZWFtVmlkZW9RdWFkKGNvbnN0IENDU3RyZWFtVmlkZW9EcmF3UXVhZCopOwpAQCAt
MTM4LDEyICsxNDIsMTcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc2V0RHJhd0ZyYW1lYnVmZmVy
UmVjdChjb25zdCBJbnRSZWN0JiwgYm9vbCBmbGlwWSk7CiAKLSAgICAvLyBUaGUgY3VycmVudCBk
cmF3aW5nIHRhcmdldCBpcyBlaXRoZXIgYSBSZW5kZXJQYXNzIG9yIE1hbmFnZWRUZXh0dXJlLiBV
c2UgdGhlc2UgZnVuY3Rpb25zIHRvIHN3aXRjaCB0byBhIG5ldyBkcmF3aW5nIHRhcmdldC4KLSAg
ICBib29sIHVzZVJlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKik7Ci0gICAgYm9vbCB1c2VN
YW5hZ2VkVGV4dHVyZShNYW5hZ2VkVGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHZpZXdwb3J0UmVj
dCk7CisgICAgLy8gVGhlIGN1cnJlbnQgZHJhd2luZyB0YXJnZXQgaXMgZWl0aGVyIGEgUmVuZGVy
UGFzcyBvciBTY29wZWRUZXh0dXJlLiBVc2UgdGhlc2UgZnVuY3Rpb25zIHRvIHN3aXRjaCB0byBh
IG5ldyBkcmF3aW5nIHRhcmdldC4KKyAgICBib29sIGJlZ2luRHJhd2luZ1RvUmVuZGVyUGFzcyhj
b25zdCBDQ1JlbmRlclBhc3MqKTsKKyAgICBib29sIHJlc3VtZURyYXdpbmdUb1JlbmRlclBhc3Mo
Y29uc3QgQ0NSZW5kZXJQYXNzKik7CisgICAgdm9pZCBlbmREcmF3aW5nVG9SZW5kZXJQYXNzKGNv
bnN0IENDUmVuZGVyUGFzcyopOworCisgICAgYm9vbCBiZWdpbkRyYXdpbmdUb1Njb3BlZFRleHR1
cmUoY29uc3QgQ0NTY29wZWRUZXh0dXJlJiwgY29uc3QgSW50UmVjdCYgdmlld3BvcnRSZWN0KTsK
KyAgICB2b2lkIGVuZERyYXdpbmdUb1Njb3BlZFRleHR1cmUoY29uc3QgQ0NTY29wZWRUZXh0dXJl
Jik7CisKICAgICBib29sIGlzQ3VycmVudFJlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKik7
CiAKLSAgICBib29sIGJpbmRGcmFtZWJ1ZmZlclRvVGV4dHVyZShNYW5hZ2VkVGV4dHVyZSosIGNv
bnN0IEludFJlY3QmIHZpZXdwb3J0UmVjdCk7CisgICAgYm9vbCBiaW5kRnJhbWVidWZmZXJUb1Rl
eHR1cmUoY29uc3QgQ0NTY29wZWRUZXh0dXJlJiwgY29uc3QgSW50UmVjdCYgdmlld3BvcnRSZWN0
KTsKIAogICAgIHZvaWQgY2xlYXJSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzcyosIGNvbnN0
IEZsb2F0UmVjdCYgZnJhbWVidWZmZXJEYW1hZ2VSZWN0KTsKIApAQCAtMTYwLDcgKzE2OSw3IEBA
IHByaXZhdGU6CiAgICAgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyBtX2NhcGFiaWxpdGllczsK
IAogICAgIGNvbnN0IENDUmVuZGVyUGFzcyogbV9jdXJyZW50UmVuZGVyUGFzczsKLSAgICBNYW5h
Z2VkVGV4dHVyZSogbV9jdXJyZW50TWFuYWdlZFRleHR1cmU7CisgICAgY29uc3QgQ0NTY29wZWRU
ZXh0dXJlKiBtX2N1cnJlbnRTY29wZWRUZXh0dXJlOwogICAgIHVuc2lnbmVkIG1fb2Zmc2NyZWVu
RnJhbWVidWZmZXJJZDsKIAogICAgIE93blB0cjxHZW9tZXRyeUJpbmRpbmc+IG1fc2hhcmVkR2Vv
bWV0cnk7CkBAIC0yNTIsNiArMjYxLDggQEAgcHJpdmF0ZToKICAgICBPd25QdHI8VHJhY2tpbmdU
ZXh0dXJlQWxsb2NhdG9yPiBtX2NvbnRlbnRzVGV4dHVyZUFsbG9jYXRvcjsKICAgICBPd25QdHI8
VHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yPiBtX2ltcGxUZXh0dXJlQWxsb2NhdG9yOwogCisgICAg
T3duUHRyPENDUmVuZGVyUGFzc1RleHR1cmVBbGxvY2F0b3I+IG1fcmVuZGVyUGFzc1RleHR1cmVB
bGxvY2F0b3I7CisKICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKIAog
ICAgIGNvbnN0IENDUmVuZGVyUGFzcyogbV9kZWZhdWx0UmVuZGVyUGFzczsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXggZWY1YTJjNTNkNDUzZTdkZjY4YjQ3MDI0
YjRiZTg1ZTBlMWM3ZmI1Ni4uNGUzZWI0NzQyYzMyNzVjMDRjN2NkYWRkN2FlMTQ2MmI1OTRjYTBj
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTQzMSwxMiAr
NDMxLDggQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpyZW1vdmVQYXNzZXNXaXRoQ2FjaGVk
VGV4dHVyZXMoQ0NSZW5kZXJQYXNzTGlzdCYgcGFzc2UKICAgICAgICAgICAgIENDUmVuZGVyUGFz
c0RyYXdRdWFkKiByZW5kZXJQYXNzUXVhZCA9IHN0YXRpY19jYXN0PENDUmVuZGVyUGFzc0RyYXdR
dWFkKj4oY3VycmVudFF1YWQpOwogICAgICAgICAgICAgQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRT
dXJmYWNlID0gcmVuZGVyUGFzc1F1YWQtPnJlbmRlclBhc3MoKS0+dGFyZ2V0U3VyZmFjZSgpOwog
Ci0gICAgICAgICAgICBpZiAodGFyZ2V0U3VyZmFjZS0+Y29udGVudHNDaGFuZ2VkKCkgfHwgIXRh
cmdldFN1cmZhY2UtPmhhc0NhY2hlZENvbnRlbnRzVGV4dHVyZSgpKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgICAgICAvLyBSZXNlcnZlIHRoZSB0ZXh0dXJlIGltbWVkaWF0
ZWx5LiBXZSBkbyBub3QgbmVlZCB0byBwYXNzIGluIGxheWVyIHJlbmRlcmVyCi0gICAgICAgICAg
ICAvLyBzaW5jZSB0aGUgdGV4dHVyZSBhbHJlYWR5IGV4aXN0cywganVzdCBuZWVkcyB0byBiZSBy
ZXNlcnZlZC4KLSAgICAgICAgICAgIGlmICghdGFyZ2V0U3VyZmFjZS0+cHJlcGFyZUNvbnRlbnRz
VGV4dHVyZSgwKSkKKyAgICAgICAgICAgIC8vIEZJWE1FOiBHZXQgY29udGVudHNDaGFuZ2VkKCkg
ZnJvbSB0aGUgcmVuZGVyUGFzcy9RdWFkLiBObyBTdXJmYWNlIHBvaW50ZXJzIGFsbG93ZWQgb24g
dGhlIFJlbmRlclBhc3MuCisgICAgICAgICAgICBpZiAodGFyZ2V0U3VyZmFjZS0+Y29udGVudHND
aGFuZ2VkKCkgfHwgIW1fbGF5ZXJSZW5kZXJlci0+aGFzQ2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVy
UGFzcyhyZW5kZXJQYXNzUXVhZC0+cmVuZGVyUGFzcygpKSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKIAogICAgICAgICAgICAgLy8gV2UgYXJlIGNoYW5naW5nIHRoZSB2ZWN0b3IgaW4gdGhl
IG1pZGRsZSBvZiByZXZlcnNlIGl0ZXJhdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuaAppbmRleCA4Mjc5MTI0ODdmMjBiMDE3NjdlNDQxNjk3ZTQzZDhmY2EzNGJhMzVhLi5l
OWZkNTRkMGZiOWJmZWZlYzBlOTJiN2M5NGFiOGUxNWIxYzAyMTI2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC0xNzcsNyArMTc3LDcgQEAgcHVibGljOgogICAgIEND
RGVidWdSZWN0SGlzdG9yeSogZGVidWdSZWN0SGlzdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVi
dWdSZWN0SGlzdG9yeS5nZXQoKTsgfQogCiAgICAgLy8gUmVtb3ZlcyBhbGwgcmVuZGVyIHBhc3Nl
cyBmb3Igd2hpY2ggd2UgaGF2ZSBjYWNoZWQgdGV4dHVyZXMsIGFuZCB3aGljaCBkaWQgbm90IGNo
YW5nZSB0aGVpciBjb250ZW50LgotICAgIHN0YXRpYyB2b2lkIHJlbW92ZVBhc3Nlc1dpdGhDYWNo
ZWRUZXh0dXJlcyhDQ1JlbmRlclBhc3NMaXN0JiBwYXNzZXMsIENDUmVuZGVyUGFzc0xpc3QmIHNr
aXBwZWRQYXNzZXMpOworICAgIHZvaWQgcmVtb3ZlUGFzc2VzV2l0aENhY2hlZFRleHR1cmVzKEND
UmVuZGVyUGFzc0xpc3QmIHBhc3NlcywgQ0NSZW5kZXJQYXNzTGlzdCYgc2tpcHBlZFBhc3Nlcyk7
CiAKIHByb3RlY3RlZDoKICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsKGNvbnN0IENDTGF5ZXJUcmVl
U2V0dGluZ3MmLCBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50Kik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3NUZXh0
dXJlQWxsb2NhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUmVuZGVyUGFzc1RleHR1cmVBbGxvY2F0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE0OGNk
YjJjNTVhNTk0ZjI2YjQ1NGEwNWZkYTc2N2RhOGM0OWM3NTYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3NU
ZXh0dXJlQWxsb2NhdG9yLmNwcApAQCAtMCwwICsxLDMwMyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDUmVuZGVyUGFzc1RleHR1cmVBbGxvY2F0b3IuaCIK
KworI2luY2x1ZGUgImNjL0NDUmVuZGVyUGFzc0RyYXdRdWFkLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworQ0NSZW5kZXJQYXNzVGV4dHVyZUFsbG9jYXRvcjo6Q0NSZW5kZXJQYXNzVGV4dHVy
ZUFsbG9jYXRvcihQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KQorICAgIDog
bV9jb250ZXh0KGNvbnRleHQpCit7CisgICAgQVNTRVJUKG1fY29udGV4dCk7Cit9CisKK0NDUmVu
ZGVyUGFzc1RleHR1cmVBbGxvY2F0b3I6On5DQ1JlbmRlclBhc3NUZXh0dXJlQWxsb2NhdG9yKCkK
K3sKK30KKwordm9pZCBDQ1JlbmRlclBhc3NUZXh0dXJlQWxsb2NhdG9yOjpjb3VudFNhdmVkQWxs
b2NhdGlvbnMoc2l6ZV90JiBpblVzZUJ5dGVzKQoreworICAgIEFTU0VSVCghaW5Vc2VCeXRlcyk7
CisKKyAgICBmb3IgKFJlbmRlclBhc3NBbGxvY2F0aW9uTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX2tub3duUmVuZGVyUGFzc2VzLmJlZ2luKCk7IGl0ICE9IG1fa25vd25SZW5kZXJQYXNzZXMu
ZW5kKCk7ICsraXQpIHsKKyAgICAgICAgQWxsb2NhdGlvbiogYWxsb2NhdGlvbiA9IG1fcmVuZGVy
UGFzc01hcC5nZXQoKml0KTsKKworICAgICAgICBhbGxvY2F0aW9uLT5zaG91bGRBbGxvY2F0ZVRl
eHR1cmUgPSBmYWxzZTsKKyAgICAgICAgYWxsb2NhdGlvbi0+c2hvdWxkU2F2ZVRleHR1cmVGb3JO
ZXh0RnJhbWUgPSBmYWxzZTsKKyAgICAgICAgYWxsb2NhdGlvbi0+dGV4dHVyZUlzSW5Vc2VGb3JD
dXJyZW50RnJhbWUgPSBmYWxzZTsKKyAgICAgICAgYWxsb2NhdGlvbi0+bnVtYmVyT2ZVc2VzT2ZU
ZXh0dXJlRm9yQ3VycmVudEZyYW1lID0gMDsKKyAgICAgICAgYWxsb2NhdGlvbi0+c2hvdWxkQWxs
b2NhdGVCYWNrZ3JvdW5kVGV4dHVyZSA9IGZhbHNlOworCisgICAgICAgIEFTU0VSVChhbGxvY2F0
aW9uLT50ZXh0dXJlKTsKKyAgICAgICAgQVNTRVJUKCFhbGxvY2F0aW9uLT50ZXh0dXJlLnNpemUo
KS5pc0VtcHR5KCkpOworICAgICAgICBpblVzZUJ5dGVzICs9IGFsbG9jYXRpb24tPnRleHR1cmUu
Ynl0ZXMoKTsKKyAgICB9Cit9CisKK3ZvaWQgQ0NSZW5kZXJQYXNzVGV4dHVyZUFsbG9jYXRvcjo6
YWRkQWxsb2NhdGlvbkludGVudGlvbnNGb3JDdXJyZW50RnJhbWUoY29uc3QgQ0NSZW5kZXJQYXNz
TGlzdCYgcmVuZGVyUGFzc2VzSW5EcmF3T3JkZXIsIHNpemVfdCBpblVzZUJ5dGVzKQoreworICAg
IC8vIFdlIGhhdmUgYSBsaXN0IG9mIGtub3duIHBhc3Nlcy4gVGhlIG9uZXMgdGhhdCBhcmVuJ3Qg
aW4gdGhpcyBmcmFtZSBzaG91bGQKKyAgICAvLyBiZSB0aGUgZmlyc3QgdG8gYmUgZHJvcHBlZCBz
byB3ZSBsZWF2ZSB0aGVtIGF0IHRoZSBmcm9udCBvZiB0aGUgbGlzdCwgYW5kCisgICAgLy8gYXBw
ZW5kIChvciBtb3ZlKSBhbnkgcGFzc2VzIGluIHRoZSBjdXJyZW50IGZyYW1lIG9udG8gdGhlIGVu
ZCBvZiB0aGUgbGlzdAorICAgIC8vIGluIGRyYXcgb3JkZXIuCisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCByZW5kZXJQYXNzZXNJbkRyYXdPcmRlci5zaXplKCk7ICsraSkgeworICAgICAgICBD
Q1JlbmRlclBhc3MqIHJlbmRlclBhc3MgPSByZW5kZXJQYXNzZXNJbkRyYXdPcmRlcltpXS5nZXQo
KTsKKworICAgICAgICBtX2tub3duUmVuZGVyUGFzc2VzLnJlbW92ZShyZW5kZXJQYXNzKTsKKyAg
ICAgICAgbV9rbm93blJlbmRlclBhc3Nlcy5hZGQocmVuZGVyUGFzcyk7CisKKyAgICAgICAgQWxs
b2NhdGlvbiogYWxsb2NhdGlvbjsKKyAgICAgICAgaWYgKG1fcmVuZGVyUGFzc01hcC5jb250YWlu
cyhyZW5kZXJQYXNzKSkKKyAgICAgICAgICAgIGFsbG9jYXRpb24gPSBtX3JlbmRlclBhc3NNYXAu
Z2V0KHJlbmRlclBhc3MpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIE93blB0cjxBbGxv
Y2F0aW9uPiBuZXdBbGxvY2F0aW9uID0gYWRvcHRQdHIobmV3IEFsbG9jYXRpb24obV9jb250ZXh0
KSk7CisgICAgICAgICAgICBhbGxvY2F0aW9uID0gbmV3QWxsb2NhdGlvbi5nZXQoKTsKKyAgICAg
ICAgICAgIG1fcmVuZGVyUGFzc01hcC5zZXQocmVuZGVyUGFzcywgbmV3QWxsb2NhdGlvbi5yZWxl
YXNlKCkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gRHJvcCBjYWNoZWQgdGV4dHVyZXMgZnJv
bSB0aGUgcHJldmlvdXMgZnJhbWUgdGhhdCBhcmUgdGhlIHdyb25nIHNpemUuCisgICAgICAgIGlm
IChhbGxvY2F0aW9uLT50ZXh0dXJlICYmIGFsbG9jYXRpb24tPnRleHR1cmUuc2l6ZSgpICE9IHJl
bmRlclBhc3MtPmZyYW1lYnVmZmVyT3V0cHV0UmVjdCgpLnNpemUoKSkgeworICAgICAgICAgICAg
QVNTRVJUKCFhbGxvY2F0aW9uLT50ZXh0dXJlLnNpemUoKS5pc0VtcHR5KCkpOworICAgICAgICAg
ICAgaW5Vc2VCeXRlcyAtPSBhbGxvY2F0aW9uLT50ZXh0dXJlLmJ5dGVzKCk7CisKKyAgICAgICAg
ICAgIGFsbG9jYXRpb24tPnRleHR1cmUuY2xlYXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgcmVuZGVyUGFzc1VzZXNUZXh0dXJlID0gaSA8IHJlbmRlclBhc3Nlc0luRHJhd09yZGVyLnNp
emUoKSAtIDE7CisgICAgICAgIGFsbG9jYXRpb24tPnNob3VsZEFsbG9jYXRlVGV4dHVyZSA9IHJl
bmRlclBhc3NVc2VzVGV4dHVyZTsKKyAgICAgICAgYWxsb2NhdGlvbi0+dGV4dHVyZS5wcmVwYXJl
KHJlbmRlclBhc3MtPmZyYW1lYnVmZmVyT3V0cHV0UmVjdCgpLnNpemUoKSwgcmVuZGVyUGFzcy0+
aGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKCkgPyBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSA6IEdy
YXBoaWNzQ29udGV4dDNEOjpSR0IpOworICAgIH0KK30KKworYm9vbCBDQ1JlbmRlclBhc3NUZXh0
dXJlQWxsb2NhdG9yOjpiYWNrZ3JvdW5kRmlsdGVyTWF4Qnl0ZXMoY29uc3QgQ0NRdWFkTGlzdCYg
Y29udHJpYnV0aW5nUXVhZHMsIGNvbnN0IEludFNpemUmIGRldmljZVZpZXdwb3J0U2l6ZSkKK3sK
KyAgICBzaXplX3QgbWF4Qnl0ZXMgPSAwdTsKKworICAgIGZvciAoQ0NRdWFkTGlzdDo6Y29uc3RC
YWNrVG9Gcm9udEl0ZXJhdG9yIGl0ID0gY29udHJpYnV0aW5nUXVhZHMuYmFja1RvRnJvbnRCZWdp
bigpOyBpdCAhPSBjb250cmlidXRpbmdRdWFkcy5iYWNrVG9Gcm9udEVuZCgpOyArK2l0KSB7Cisg
ICAgICAgIGNvbnN0IENDRHJhd1F1YWQqIGNvbnRyaWJ1dGluZ1F1YWQgPSBpdC0+Z2V0KCk7Cisg
ICAgICAgIGlmIChjb250cmlidXRpbmdRdWFkLT5tYXRlcmlhbCgpICE9IENDRHJhd1F1YWQ6OlJl
bmRlclBhc3MpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY29uc3QgQ0NSZW5kZXJQ
YXNzRHJhd1F1YWQqIGNvbnRyaWJ1dGluZ1Bhc3NRdWFkID0gY29udHJpYnV0aW5nUXVhZC0+dG9S
ZW5kZXJQYXNzRHJhd1F1YWQoKTsKKyAgICAgICAgaWYgKGNvbnRyaWJ1dGluZ1Bhc3NRdWFkLT5i
YWNrZ3JvdW5kRmlsdGVycygpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIEFsbG9jYXRpb24qIGNvbnRyaWJ1dGluZ0FsbG9jYXRpb24gPSBtX3JlbmRlclBhc3NN
YXAuZ2V0KGNvbnRyaWJ1dGluZ1Bhc3NRdWFkLT5yZW5kZXJQYXNzKCkpOworICAgICAgICBpZiAo
IWNvbnRyaWJ1dGluZ0FsbG9jYXRpb24tPnNob3VsZEFsbG9jYXRlVGV4dHVyZSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIC8vIEJhY2tncm91bmQgdGV4dHVyZXMgdXNlIGEgcmVh
ZGJhY2sgYnVmZmVyIChhdCBtb3N0IHRoZSBzaXplIG9mIHRoZSB2aWV3cG9ydCkKKyAgICAgICAg
Ly8gYW5kIGEgc2Vjb25kIHRleHR1cmUgbWF0Y2hpbmcgdGhlIGJvdW5kcyBvZiB0aGUgY29udHJp
YnV0aW5nIFJlbmRlclBhc3MuCisgICAgICAgIHNpemVfdCBieXRlcyA9IENDU2NvcGVkVGV4dHVy
ZTo6bWVtb3J5U2l6ZUJ5dGVzKGRldmljZVZpZXdwb3J0U2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQikKKyAgICAgICAgICAgICAgICAgICAgICsgQ0NTY29wZWRUZXh0dXJlOjptZW1vcnlTaXpl
Qnl0ZXMoY29udHJpYnV0aW5nQWxsb2NhdGlvbi0+dGV4dHVyZS5zaXplKCksIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0IpOworICAgICAgICBpZiAoYnl0ZXMgPiBtYXhCeXRlcykKKyAgICAgICAgICAg
IG1heEJ5dGVzID0gYnl0ZXM7CisgICAgfQorCisgICAgcmV0dXJuIG1heEJ5dGVzOworfQorCit2
b2lkIENDUmVuZGVyUGFzc1RleHR1cmVBbGxvY2F0b3I6OmRlY2lkZUFsbG9jYXRpb25zRm9yRnJh
bWUoY29uc3QgQ0NSZW5kZXJQYXNzTGlzdCYgcmVuZGVyUGFzc2VzSW5EcmF3T3JkZXIsIGNvbnN0
IEludFNpemUmIGRldmljZVZpZXdwb3J0U2l6ZSwgc2l6ZV90IG1lbW9yeUxpbWl0Qnl0ZXMpCit7
CisgICAgc2l6ZV90IGluVXNlQnl0ZXMgPSAwOworCisgICAgY291bnRTYXZlZEFsbG9jYXRpb25z
KGluVXNlQnl0ZXMpOworICAgIGFkZEFsbG9jYXRpb25JbnRlbnRpb25zRm9yQ3VycmVudEZyYW1l
KHJlbmRlclBhc3Nlc0luRHJhd09yZGVyLCBpblVzZUJ5dGVzKTsKKworICAgIC8vIFdhbGsgdGhl
IHBhc3NlcyBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGV5IHdpbGwgYmUgZHJhd24gdG8gZGV0ZXJt
aW5lIG1lbW9yeSByZXF1aXJlbWVudHMuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZW5k
ZXJQYXNzZXNJbkRyYXdPcmRlci5zaXplKCk7ICsraSkgeworICAgICAgICBDQ1JlbmRlclBhc3Mq
IHJlbmRlclBhc3MgPSByZW5kZXJQYXNzZXNJbkRyYXdPcmRlcltpXS5nZXQoKTsKKyAgICAgICAg
QWxsb2NhdGlvbiogYWxsb2NhdGlvbiA9IG1fcmVuZGVyUGFzc01hcC5nZXQocmVuZGVyUGFzcyk7
CisgICAgICAgIEFTU0VSVChhbGxvY2F0aW9uKTsKKworICAgICAgICBpZiAoIWFsbG9jYXRpb24t
PnNob3VsZEFsbG9jYXRlVGV4dHVyZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IC8vIE1hcmsgdGhpcyB0ZXh0dXJlIGFzIGluIHVzZSBmb3IgZHJhd2luZyB0byBpdC4KKyAgICAg
ICAgYm9vbCBhbHJlYWR5QWxsb2NhdGVkQW5kQ291bnRlZFRleHR1cmUgPSBhbGxvY2F0aW9uLT50
ZXh0dXJlOworICAgICAgICBpZiAoIWFscmVhZHlBbGxvY2F0ZWRBbmRDb3VudGVkVGV4dHVyZSkK
KyAgICAgICAgICAgIGluVXNlQnl0ZXMgKz0gYWxsb2NhdGlvbi0+dGV4dHVyZS5tYXliZUJ5dGVz
KCk7CisgICAgICAgIGFsbG9jYXRpb24tPnRleHR1cmVJc0luVXNlRm9yQ3VycmVudEZyYW1lID0g
dHJ1ZTsKKworICAgICAgICAvLyBXZSBvcHRpbWlzdGljYWxseSB0cnkgdG8gc2F2ZSBldmVyeSB0
ZXh0dXJlLgorICAgICAgICBhbGxvY2F0aW9uLT5zaG91bGRTYXZlVGV4dHVyZUZvck5leHRGcmFt
ZSA9IHRydWU7CisKKyAgICAgICAgLy8gQWRkIG1lbW9yeSBuZWVkZWQgZm9yIGJhY2tncm91bmQg
ZmlsdGVycy4KKyAgICAgICAgc2l6ZV90IGJhY2tncm91bmRUZXh0dXJlTWF4Qnl0ZXMgPSBiYWNr
Z3JvdW5kRmlsdGVyTWF4Qnl0ZXMocmVuZGVyUGFzcy0+cXVhZExpc3QoKSwgZGV2aWNlVmlld3Bv
cnRTaXplKTsKKyAgICAgICAgaW5Vc2VCeXRlcyArPSBiYWNrZ3JvdW5kVGV4dHVyZU1heEJ5dGVz
OworCisgICAgICAgIFJlbmRlclBhc3NBbGxvY2F0aW9uTGlzdDo6Y29uc3RfaXRlcmF0b3IgZHJv
cEl0ZXJhdG9yID0gbV9rbm93blJlbmRlclBhc3Nlcy5iZWdpbigpOworCisgICAgICAgIC8vIERy
b3AgY2FjaGVkIHRleHR1cmVzIGZyb20gdGhpcyBmcmFtZSB1bnRpbCB3ZSdyZSBiZWxvdyB0aGUg
bWVtb3J5IGxpbWl0LgorICAgICAgICBmb3IgKDsgaW5Vc2VCeXRlcyA+IG1lbW9yeUxpbWl0Qnl0
ZXMgJiYgKmRyb3BJdGVyYXRvciAhPSByZW5kZXJQYXNzOyArK2Ryb3BJdGVyYXRvcikgeworICAg
ICAgICAgICAgQWxsb2NhdGlvbiogYWxyZWFkeURyYXduQWxsb2NhdGlvbiA9IG1fcmVuZGVyUGFz
c01hcC5nZXQoKmRyb3BJdGVyYXRvcik7CisgICAgICAgICAgICBpZiAoIWFscmVhZHlEcmF3bkFs
bG9jYXRpb24tPnRleHR1cmVJc0luVXNlRm9yQ3VycmVudEZyYW1lICYmIGFscmVhZHlEcmF3bkFs
bG9jYXRpb24tPnNob3VsZFNhdmVUZXh0dXJlRm9yTmV4dEZyYW1lKSB7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKCFhbHJlYWR5RHJhd25BbGxvY2F0aW9uLT50ZXh0dXJlLnNpemUuaXNFbXB0eSgp
KTsKKyAgICAgICAgICAgICAgICBpblVzZUJ5dGVzIC09IGFscmVhZHlEcmF3bkFsbG9jYXRpb24t
PnRleHR1cmUubWF5YmVCeXRlcygpOworICAgICAgICAgICAgICAgIGFscmVhZHlEcmF3bkFsbG9j
YXRpb24tPnNob3VsZFNhdmVUZXh0dXJlRm9yTmV4dEZyYW1lID0gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBTa2lwIHRvIGp1c3QgcGFzdCB0aGUgdGV4dHVy
ZSBjdXJyZW50bHkgYmVpbmcgZHJhd24uCisgICAgICAgIGRyb3BJdGVyYXRvciA9IG1fa25vd25S
ZW5kZXJQYXNzZXMuZmluZChyZW5kZXJQYXNzKTsKKyAgICAgICAgQVNTRVJUKGRyb3BJdGVyYXRv
ciAhPSBtX2tub3duUmVuZGVyUGFzc2VzLmVuZCgpKTsKKyAgICAgICAgKytkcm9wSXRlcmF0b3I7
CisKKyAgICAgICAgLy8gRHJvcCBjYWNoZWQgdGV4dHVyZXMgZnJvbSB0aGUgcHJldmlvdXMgZnJh
bWUgdW50aWwgd2UncmUgYmVsb3cgdGhlIG1lbW9yeSBsaW1pdC4KKyAgICAgICAgZm9yICg7IGlu
VXNlQnl0ZXMgPiBtZW1vcnlMaW1pdEJ5dGVzICYmIGRyb3BJdGVyYXRvciAhPSBtX2tub3duUmVu
ZGVyUGFzc2VzLmVuZCgpOyArK2Ryb3BJdGVyYXRvcikgeworICAgICAgICAgICAgQWxsb2NhdGlv
biogbm90WWV0RHJhd25BbGxvY2F0aW9uID0gbV9yZW5kZXJQYXNzTWFwLmdldCgqZHJvcEl0ZXJh
dG9yKTsKKyAgICAgICAgICAgIEFTU0VSVCghbm90WWV0RHJhd25BbGxvY2F0aW9uLT50ZXh0dXJl
SXNJblVzZUZvckN1cnJlbnRGcmFtZSk7CisgICAgICAgICAgICBpZiAobm90WWV0RHJhd25BbGxv
Y2F0aW9uLT50ZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgaW5Vc2VCeXRlcyAtPSBub3RZZXRE
cmF3bkFsbG9jYXRpb24tPnRleHR1cmUubWF5YmVCeXRlcygpOworICAgICAgICAgICAgICAgIG5v
dFlldERyYXduQWxsb2NhdGlvbi0+dGV4dHVyZS5jbGVhcigpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgLy8gUmVtb3ZlIHRoZSBiYWNrZ3JvdW5kIGZpbHRlcnMgZnJvbSB0
aGUgbWVtb3J5IGluIHVzZS4gV2UgZG9uJ3Qgd2FudCB0aGVtIHRvIGNhdXNlIHVzIHRvIHNraXAg
ZHJhd2luZyBhIFJlbmRlclBhc3MuCisgICAgICAgIGluVXNlQnl0ZXMgLT0gYmFja2dyb3VuZFRl
eHR1cmVNYXhCeXRlczsKKworICAgICAgICAvLyBDb21wbGV0ZWx5IHNraXAgZHJhd2luZyBwYXNz
ZXMgd2UndmUgYWxyZWFkeSBkcmF3biB1bnRpbCB3ZSdyZSBiZWxvdyB0aGUgbWVtb3J5IGxpbWl0
LgorICAgICAgICBmb3IgKGRyb3BJdGVyYXRvciA9IG1fa25vd25SZW5kZXJQYXNzZXMuYmVnaW4o
KTsgaW5Vc2VCeXRlcyA+IG1lbW9yeUxpbWl0Qnl0ZXMgJiYgKmRyb3BJdGVyYXRvciAhPSByZW5k
ZXJQYXNzOyArK2Ryb3BJdGVyYXRvcikgeworICAgICAgICAgICAgQWxsb2NhdGlvbiogYWxyZWFk
eURyYXduQWxsb2NhdGlvbiA9IG1fcmVuZGVyUGFzc01hcC5nZXQoKmRyb3BJdGVyYXRvcik7Cisg
ICAgICAgICAgICBpZiAoYWxyZWFkeURyYXduQWxsb2NhdGlvbi0+dGV4dHVyZUlzSW5Vc2VGb3JD
dXJyZW50RnJhbWUgJiYgYWxyZWFkeURyYXduQWxsb2NhdGlvbi0+c2hvdWxkQWxsb2NhdGVUZXh0
dXJlKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFhbHJlYWR5RHJhd25BbGxvY2F0aW9uLT50
ZXh0dXJlLnNpemUuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBpblVzZUJ5dGVzIC09IGFs
cmVhZHlEcmF3bkFsbG9jYXRpb24tPnRleHR1cmUubWF5YmVCeXRlcygpOworICAgICAgICAgICAg
ICAgIGFscmVhZHlEcmF3bkFsbG9jYXRpb24tPnNob3VsZEFsbG9jYXRlVGV4dHVyZSA9IGZhbHNl
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gU2tpcCBkcmF3aW5nIHRo
aXMgcGFzcyBpZiB3ZSBzdGlsbCBkb24ndCBoYXZlIG1lbW9yeSBhdmFpbGFibGUuCisgICAgICAg
IGlmIChpblVzZUJ5dGVzID4gbWVtb3J5TGltaXRCeXRlcykgeworICAgICAgICAgICAgQVNTRVJU
KGNoZWNrQWxsb2NhdGlvbi0+dGV4dHVyZVNpemUud2lkdGgoKSAmJiBjaGVja0FsbG9jYXRpb24t
PnRleHR1cmVTaXplLmhlaWdodCgpKTsKKyAgICAgICAgICAgIGluVXNlQnl0ZXMgLT0gYWxsb2Nh
dGlvbi0+dGV4dHVyZS5tYXliZUJ5dGVzKCk7CisgICAgICAgICAgICBhbGxvY2F0aW9uLT5zaG91
bGRBbGxvY2F0ZVRleHR1cmUgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IEND
UXVhZExpc3QmIGNvbnRyaWJ1dGluZ1F1YWRzID0gcmVuZGVyUGFzcy0+cXVhZExpc3QoKTsKKyAg
ICAgICAgZm9yIChDQ1F1YWRMaXN0Ojpjb25zdEJhY2tUb0Zyb250SXRlcmF0b3IgaXQgPSBjb250
cmlidXRpbmdRdWFkcy5iYWNrVG9Gcm9udEJlZ2luKCk7IGl0ICE9IGNvbnRyaWJ1dGluZ1F1YWRz
LmJhY2tUb0Zyb250RW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAgIGNvbnN0IENDRHJhd1F1YWQq
IGNvbnRyaWJ1dGluZ1F1YWQgPSBpdC0+Z2V0KCk7CisgICAgICAgICAgICBpZiAoY29udHJpYnV0
aW5nUXVhZC0+bWF0ZXJpYWwoKSAhPSBDQ0RyYXdRdWFkOjpSZW5kZXJQYXNzKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQq
IGNvbnRyaWJ1dGluZ1Bhc3NRdWFkID0gY29udHJpYnV0aW5nUXVhZC0+dG9SZW5kZXJQYXNzRHJh
d1F1YWQoKTsKKworICAgICAgICAgICAgQWxsb2NhdGlvbiogY29udHJpYnV0aW5nQWxsb2NhdGlv
biA9IG1fcmVuZGVyUGFzc01hcC5nZXQoY29udHJpYnV0aW5nUGFzc1F1YWQtPnJlbmRlclBhc3Mo
KSk7CisgICAgICAgICAgICBpZiAoIWNvbnRyaWJ1dGluZ0FsbG9jYXRpb24tPnNob3VsZEFsbG9j
YXRlVGV4dHVyZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgLy8g
RGVjaWRlIGlmIHdlIHNob3VsZCBhbGxvdyBpdHMgYmFja2dyb3VuZCBmaWx0ZXJzIHRvIGJlIHVz
ZWQuCisgICAgICAgICAgICBzaXplX3QgYXZhaWxhYmxlTWVtb3J5ID0gbWVtb3J5TGltaXRCeXRl
cyAtIGluVXNlQnl0ZXM7CisgICAgICAgICAgICBjb250cmlidXRpbmdBbGxvY2F0aW9uLT5zaG91
bGRBbGxvY2F0ZUJhY2tncm91bmRUZXh0dXJlID0gYmFja2dyb3VuZFRleHR1cmVNYXhCeXRlcyA8
PSBhdmFpbGFibGVNZW1vcnk7CisKKyAgICAgICAgICAgIC8vIFRoZSBwYXNzIGhhcyBiZWVuIGRy
YXduIHRvIGl0cyB0YXJnZXQsIHNvIGRvZXMgbm90IG5lZWQgdG8gYmUga2VwdCBpbiBtZW1vcnkg
YW55bW9yZS4KKyAgICAgICAgICAgIGNvbnRyaWJ1dGluZ0FsbG9jYXRpb24tPnRleHR1cmVJc0lu
VXNlRm9yQ3VycmVudEZyYW1lID0gZmFsc2U7CisKKyAgICAgICAgICAgIC8vIEluZGljYXRlIHRo
YXQgd2UgZHJldyBmcm9tIHRoaXMgUmVuZGVyUGFzcyB0ZXh0dXJlLgorICAgICAgICAgICAgKytj
b250cmlidXRpbmdBbGxvY2F0aW9uLT5udW1iZXJPZlVzZXNPZlRleHR1cmVGb3JDdXJyZW50RnJh
bWU7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQ0NSZW5kZXJQYXNzVGV4dHVyZUFsbG9j
YXRvcjo6cmVtb3ZlQWxsb2NhdGlvbnNOb3RTYXZlZEZvck5leHRGcmFtZSgpCit7CisgICAgVmVj
dG9yPGNvbnN0IENDUmVuZGVyUGFzcyo+IHRvUmVtb3ZlOworCisgICAgZm9yIChSZW5kZXJQYXNz
QWxsb2NhdGlvbkxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rbm93blJlbmRlclBhc3Nlcy5i
ZWdpbigpOyBpdCAhPSBtX2tub3duUmVuZGVyUGFzc2VzLmVuZCgpOyArK2l0KSB7CisgICAgICAg
IEFsbG9jYXRpb24qIGFsbG9jYXRpb24gPSBtX3JlbmRlclBhc3NNYXAuZ2V0KCppdCk7CisgICAg
ICAgIGlmIChhbGxvY2F0aW9uLT5zaG91bGRTYXZlVGV4dHVyZUZvck5leHRGcmFtZSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEFTU0VSVCghYWxsb2NhdGlvbi0+dGV4dHVyZUlk
KTsKKyAgICAgICAgdG9SZW1vdmUuYXBwZW5kKCppdCk7CisgICAgfQorCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB0b1JlbW92ZS5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBDQ1Jl
bmRlclBhc3MqIHJlbmRlclBhc3MgPSB0b1JlbW92ZVtpXTsKKyAgICAgICAgbV9rbm93blJlbmRl
clBhc3Nlcy5yZW1vdmUocmVuZGVyUGFzcyk7CisgICAgICAgIG1fcmVuZGVyUGFzc01hcC5yZW1v
dmUocmVuZGVyUGFzcyk7CisgICAgfQorfQorCit2b2lkIENDUmVuZGVyUGFzc1RleHR1cmVBbGxv
Y2F0b3I6OmNsZWFyKCkKK3sKKyAgICBtX2tub3duUmVuZGVyUGFzc2VzLmNsZWFyKCk7CisgICAg
bV9yZW5kZXJQYXNzTWFwLmNsZWFyKCk7Cit9CisKK2NvbnN0IENDU2NvcGVkVGV4dHVyZSYgQ0NS
ZW5kZXJQYXNzVGV4dHVyZUFsbG9jYXRvcjo6YmVnaW5EcmF3aW5nVG9SZW5kZXJQYXNzKGNvbnN0
IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcykgY29uc3QKK3sKKyAgICBBbGxvY2F0aW9uKiBhbGxv
Y2F0aW9uID0gbV9yZW5kZXJQYXNzTWFwLmdldChyZW5kZXJQYXNzKTsKKyAgICBpZiAoYWxsb2Nh
dGlvbi0+c2hvdWxkQWxsb2NhdGVUZXh0dXJlICYmICFhbGxvY2F0aW9uLT50ZXh0dXJlKQorICAg
ICAgICBhbGxvY2F0aW9uLT50ZXh0dXJlLmNyZWF0ZShtX2NvbnRleHQpOworICAgIHJldHVybiBh
bGxvY2F0aW9uLT50ZXh0dXJlOworfQorCit2b2lkIENDUmVuZGVyUGFzc1RleHR1cmVBbGxvY2F0
b3I6OmVuZERyYXdpbmdUb1JlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNz
KSBjb25zdAoreworICAgIC8vIE5vdGhpbmcgdG8gZG8gaGVyZSwgdGhpcyBpcyBub3QgdGhlIGNv
ZGUgeW91J3JlIGxvb2tpbmcgZm9yLgorfQorCitib29sIENDUmVuZGVyUGFzc1RleHR1cmVBbGxv
Y2F0b3I6OnNob3VsZEFsbG9jYXRlQmFja2dyb3VuZEZpbHRlclRleHR1cmVzKGNvbnN0IENDUmVu
ZGVyUGFzcyogcmVuZGVyUGFzcykgY29uc3QKK3sKKyAgICBBbGxvY2F0aW9uKiBhbGxvY2F0aW9u
ID0gbV9yZW5kZXJQYXNzTWFwLmdldChyZW5kZXJQYXNzKTsKKyAgICByZXR1cm4gYWxsb2NhdGlv
bi0+c2hvdWxkQWxsb2NhdGVCYWNrZ3JvdW5kVGV4dHVyZTsKK30KKworY29uc3QgQ0NTY29wZWRU
ZXh0dXJlJiBDQ1JlbmRlclBhc3NUZXh0dXJlQWxsb2NhdG9yOjpiZWdpbkRyYXdpbmdGcm9tUmVu
ZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3MpIGNvbnN0Cit7CisgICAgQWxs
b2NhdGlvbiogYWxsb2NhdGlvbiA9IG1fcmVuZGVyUGFzc01hcC5nZXQocmVuZGVyUGFzcyk7Cisg
ICAgQVNTRVJUKGFsbG9jYXRpb24pOworCisgICAgcmV0dXJuIGFsbG9jYXRpb24tPnRleHR1cmU7
Cit9CisKK3ZvaWQgQ0NSZW5kZXJQYXNzVGV4dHVyZUFsbG9jYXRvcjo6ZW5kRHJhd2luZ0Zyb21S
ZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcykgY29uc3QKK3sKKyAgICBB
bGxvY2F0aW9uKiBhbGxvY2F0aW9uID0gbV9yZW5kZXJQYXNzTWFwLmdldChyZW5kZXJQYXNzKTsK
KyAgICBpZiAoYWxsb2NhdGlvbi0+c2hvdWxkU2F2ZVRleHR1cmVGb3JOZXh0RnJhbWUpCisgICAg
ICAgIHJldHVybjsKKyAgICBpZiAoIWFsbG9jYXRpb24tPnRleHR1cmUpCisgICAgICAgIHJldHVy
bjsKKworICAgIC0tYWxsb2NhdGlvbi0+bnVtYmVyT2ZVc2VzT2ZUZXh0dXJlRm9yQ3VycmVudEZy
YW1lOworICAgIGlmIChhbGxvY2F0aW9uLT5udW1iZXJPZlVzZXNPZlRleHR1cmVGb3JDdXJyZW50
RnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIGFsbG9jYXRpb24tPnRleHR1cmUuY2xlYXIo
KTsKK30KKworYm9vbCBDQ1JlbmRlclBhc3NUZXh0dXJlQWxsb2NhdG9yOjpoYXNDYWNoZWRUZXh0
dXJlKGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcykgY29uc3QKK3sKKyAgICBBbGxvY2F0
aW9uKiBhbGxvY2F0aW9uID0gbV9yZW5kZXJQYXNzTWFwLmdldChyZW5kZXJQYXNzKTsKKyAgICBp
ZiAoIWFsbG9jYXRpb24tPnRleHR1cmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFT
U0VSVChhbGxvY2F0aW9uLT50ZXh0dXJlLnNpemUoKSA9PSByZW5kZXJQYXNzLT5mcmFtZWJ1ZmZl
ck91dHB1dFJlY3QoKS5zaXplKCkpOworICAgIHJldHVybiB0cnVlOworfQorCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRl
clBhc3NUZXh0dXJlQWxsb2NhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3NUZXh0dXJlQWxsb2NhdG9yLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MWRiNGQ4YWFkMGU0N2M2M2U4ZjQwYjUzY2FmNzM0MDZmYTJhNWVlZAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVy
UGFzc1RleHR1cmVBbGxvY2F0b3IuaApAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
Q0NSZW5kZXJQYXNzVGV4dHVyZUFsbG9jYXRvcl9oCisjZGVmaW5lIENDUmVuZGVyUGFzc1RleHR1
cmVBbGxvY2F0b3JfaAorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRl
ICJJbnRTaXplLmgiCisjaW5jbHVkZSAiY2MvQ0NSZW5kZXJQYXNzLmgiIC8vIEZvciBDQ1JlbmRl
clBhc3NMaXN0LgorI2luY2x1ZGUgImNjL0NDU2NvcGVkVGV4dHVyZS5oIgorI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgQ0NSZW5kZXJQYXNzVGV4dHVyZUFsbG9jYXRvciB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoQ0NSZW5kZXJQYXNzVGV4dHVyZUFsbG9jYXRvcik7CisKKyAgICBzdHJ1
Y3QgQWxsb2NhdGlvbiB7CisgICAgICAgIGJvb2wgc2hvdWxkQWxsb2NhdGVUZXh0dXJlOworICAg
ICAgICBib29sIHNob3VsZFNhdmVUZXh0dXJlRm9yTmV4dEZyYW1lOworICAgICAgICBib29sIHRl
eHR1cmVJc0luVXNlRm9yQ3VycmVudEZyYW1lOworICAgICAgICBpbnQgbnVtYmVyT2ZVc2VzT2ZU
ZXh0dXJlRm9yQ3VycmVudEZyYW1lOworCisgICAgICAgIGJvb2wgc2hvdWxkQWxsb2NhdGVCYWNr
Z3JvdW5kVGV4dHVyZTsKKworICAgICAgICBDQ1Njb3BlZFRleHR1cmUgdGV4dHVyZTsKKworICAg
ICAgICBBbGxvY2F0aW9uKCkKKyAgICAgICAgICAgIDogc2hvdWxkQWxsb2NhdGVUZXh0dXJlKGZh
bHNlKQorICAgICAgICAgICAgLCBzaG91bGRTYXZlVGV4dHVyZUZvck5leHRGcmFtZShmYWxzZSkK
KyAgICAgICAgICAgICwgdGV4dHVyZUlzSW5Vc2VGb3JDdXJyZW50RnJhbWUoZmFsc2UpCisgICAg
ICAgICAgICAsIHNob3VsZEFsbG9jYXRlQmFja2dyb3VuZFRleHR1cmUoZmFsc2UpCisgICAgICAg
IHsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0eXBlZGVmIExpc3RIYXNoU2V0PGNvbnN0IEND
UmVuZGVyUGFzcyo+IFJlbmRlclBhc3NBbGxvY2F0aW9uTGlzdDsKKyAgICB0eXBlZGVmIEhhc2hN
YXA8Y29uc3QgQ0NSZW5kZXJQYXNzKiwgT3duUHRyPEFsbG9jYXRpb24+ID4gUmVuZGVyUGFzc0Fs
bG9jYXRpb25NYXA7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1JlbmRlclBh
c3NUZXh0dXJlQWxsb2NhdG9yPiBjcmVhdGUoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Y29udGV4dCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IENDUmVuZGVyUGFzc1RleHR1cmVBbGxvY2F0
b3IoY29udGV4dCkpOyB9CisgICAgfkNDUmVuZGVyUGFzc1RleHR1cmVBbGxvY2F0b3IoKTsKKwor
ICAgIHZvaWQgZGVjaWRlQWxsb2NhdGlvbnNGb3JGcmFtZShjb25zdCBDQ1JlbmRlclBhc3NMaXN0
JiByZW5kZXJQYXNzZXNJbkRyYXdPcmRlciwgY29uc3QgSW50U2l6ZSYgZGV2aWNlVmlld3BvcnRT
aXplLCBzaXplX3QgbWVtb3J5TGltaXRCeXRlcyk7CisgICAgdm9pZCByZW1vdmVBbGxvY2F0aW9u
c05vdFNhdmVkRm9yTmV4dEZyYW1lKCk7CisgICAgdm9pZCBjbGVhcigpOworCisgICAgY29uc3Qg
Q0NTY29wZWRUZXh0dXJlJiBiZWdpbkRyYXdpbmdUb1JlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQ
YXNzKikgY29uc3Q7CisgICAgdm9pZCBlbmREcmF3aW5nVG9SZW5kZXJQYXNzKGNvbnN0IENDUmVu
ZGVyUGFzcyopIGNvbnN0OworCisgICAgYm9vbCBzaG91bGRBbGxvY2F0ZUJhY2tncm91bmRGaWx0
ZXJUZXh0dXJlcyhjb25zdCBDQ1JlbmRlclBhc3MqKSBjb25zdDsKKworICAgIGNvbnN0IENDU2Nv
cGVkVGV4dHVyZSYgYmVnaW5EcmF3aW5nRnJvbVJlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNz
KikgY29uc3Q7CisgICAgdm9pZCBlbmREcmF3aW5nRnJvbVJlbmRlclBhc3MoY29uc3QgQ0NSZW5k
ZXJQYXNzKikgY29uc3Q7CisKKyAgICBib29sIGhhc0NhY2hlZFRleHR1cmUoY29uc3QgQ0NSZW5k
ZXJQYXNzKikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgQ0NSZW5kZXJQYXNzVGV4
dHVyZUFsbG9jYXRvcihQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPik7CisKKyAgICB2b2lk
IGNvdW50U2F2ZWRBbGxvY2F0aW9ucyhzaXplX3QmIGluVXNlQnl0ZXMpOworICAgIHZvaWQgYWRk
QWxsb2NhdGlvbkludGVudGlvbnNGb3JDdXJyZW50RnJhbWUoY29uc3QgQ0NSZW5kZXJQYXNzTGlz
dCYgcmVuZGVyUGFzc2VzSW5EcmF3T3JkZXIsIHNpemVfdCBpblVzZUJ5dGVzKTsKKworICAgIGJv
b2wgYmFja2dyb3VuZEZpbHRlck1heEJ5dGVzKGNvbnN0IENDUXVhZExpc3QmIGNvbnRyaWJ1dGlu
Z1F1YWRzLCBjb25zdCBJbnRTaXplJiBkZXZpY2VWaWV3cG9ydFNpemUpOworCisgICAgUmVuZGVy
UGFzc0FsbG9jYXRpb25MaXN0IG1fa25vd25SZW5kZXJQYXNzZXM7CisgICAgUmVuZGVyUGFzc0Fs
bG9jYXRpb25NYXAgbV9yZW5kZXJQYXNzTWFwOworCisgICAgLy8gRklYTUU6IFRyYWNrIHRoZSBt
X2Rlc2lyZWRUZXh0dXJlTWVtb3J5Qnl0ZXMKKworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4gbV9jb250ZXh0OworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZh
Y2UuY3BwCmluZGV4IDFjZGFkMjJlNDY4YzEyNGQyOGIxZThkNGJjZmVkZmNmYWZhMTc1OWMuLjFk
MGRiYjlhYzIzOTgxODdkZWVkYjJlYWEwNzQ1ZTgwZTMxMTcxZjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NS
ZW5kZXJTdXJmYWNlLmNwcApAQCAtODUsNzUgKzg1LDYgQEAgRmxvYXRSZWN0IENDUmVuZGVyU3Vy
ZmFjZTo6ZHJhd2FibGVDb250ZW50UmVjdCgpIGNvbnN0CiAgICAgcmV0dXJuIGRyYXdhYmxlQ29u
dGVudFJlY3Q7CiB9CiAKLWJvb2wgQ0NSZW5kZXJTdXJmYWNlOjpwcmVwYXJlQ29udGVudHNUZXh0
dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKLXsKLSAgICAvLyBGSVhN
RTogVGhpcyBtZXRob2Qgc2hvdWxkIGJlIHNlcGFyYXRlZCBpbnRvIHR3bzogb25lIHRvIHJlc2Vy
dmUgYW4KLSAgICAvLyBleGlzdGluZyBzdXJmYWNlLCBhbmQgb25lIHRvIGNyZWF0ZSBhIG5ldyBv
bmUuIFRoYXQgd2F5IHdlIHdpbGwgbm90Ci0gICAgLy8gbmVlZCB0byBwYXNzIG51bGwgbGF5ZXJS
ZW5kZXJlci4KLSAgICBpZiAobGF5ZXJSZW5kZXJlcikgewotICAgICAgICBUZXh0dXJlTWFuYWdl
ciogdGV4dHVyZU1hbmFnZXIgPSBsYXllclJlbmRlcmVyLT5pbXBsVGV4dHVyZU1hbmFnZXIoKTsK
LQotICAgICAgICBpZiAoIW1fY29udGVudHNUZXh0dXJlKQotICAgICAgICAgICAgbV9jb250ZW50
c1RleHR1cmUgPSBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKHRleHR1cmVNYW5hZ2VyKTsKLSAgICB9
Ci0KLSAgICBpZiAoIW1fY29udGVudHNUZXh0dXJlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpZiAobV9jb250ZW50c1RleHR1cmUtPmlzUmVzZXJ2ZWQoKSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICBpZiAoIW1fY29udGVudHNUZXh0dXJlLT5yZXNlcnZlKG1fY29udGVudFJl
Y3Quc2l6ZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENDUmVuZGVyU3VyZmFjZTo6cmVsZWFz
ZUNvbnRlbnRzVGV4dHVyZSgpCi17Ci0gICAgaWYgKCFtX2NvbnRlbnRzVGV4dHVyZSB8fCAhbV9j
b250ZW50c1RleHR1cmUtPmlzUmVzZXJ2ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29u
dGVudHNUZXh0dXJlLT51bnJlc2VydmUoKTsKLX0KLQotYm9vbCBDQ1JlbmRlclN1cmZhY2U6Omhh
c1ZhbGlkQ29udGVudHNUZXh0dXJlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jb250ZW50c1Rl
eHR1cmUgJiYgbV9jb250ZW50c1RleHR1cmUtPmlzUmVzZXJ2ZWQoKSAmJiBtX2NvbnRlbnRzVGV4
dHVyZS0+aXNWYWxpZChtX2NvbnRlbnRSZWN0LnNpemUoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkEpOwotfQotCi1ib29sIENDUmVuZGVyU3VyZmFjZTo6aGFzQ2FjaGVkQ29udGVudHNUZXh0dXJl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jb250ZW50c1RleHR1cmUgJiYgbV9jb250ZW50c1Rl
eHR1cmUtPmlzVmFsaWQobV9jb250ZW50UmVjdC5zaXplKCksIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBKTsKLX0KLQotYm9vbCBDQ1JlbmRlclN1cmZhY2U6OnByZXBhcmVCYWNrZ3JvdW5kVGV4dHVy
ZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCi17Ci0gICAgVGV4dHVyZU1h
bmFnZXIqIHRleHR1cmVNYW5hZ2VyID0gbGF5ZXJSZW5kZXJlci0+aW1wbFRleHR1cmVNYW5hZ2Vy
KCk7Ci0KLSAgICBpZiAoIW1fYmFja2dyb3VuZFRleHR1cmUpCi0gICAgICAgIG1fYmFja2dyb3Vu
ZFRleHR1cmUgPSBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKHRleHR1cmVNYW5hZ2VyKTsKLQotICAg
IGlmIChtX2JhY2tncm91bmRUZXh0dXJlLT5pc1Jlc2VydmVkKCkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgaWYgKCFtX2JhY2tncm91bmRUZXh0dXJlLT5yZXNlcnZlKG1fY29udGVudFJl
Y3Quc2l6ZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENDUmVuZGVyU3VyZmFjZTo6cmVsZWFz
ZUJhY2tncm91bmRUZXh0dXJlKCkKLXsKLSAgICBpZiAoIW1fYmFja2dyb3VuZFRleHR1cmUgfHwg
IW1fYmFja2dyb3VuZFRleHR1cmUtPmlzUmVzZXJ2ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IG1fYmFja2dyb3VuZFRleHR1cmUtPnVucmVzZXJ2ZSgpOwotfQotCi1ib29sIENDUmVuZGVyU3Vy
ZmFjZTo6aGFzVmFsaWRCYWNrZ3JvdW5kVGV4dHVyZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
YmFja2dyb3VuZFRleHR1cmUgJiYgbV9iYWNrZ3JvdW5kVGV4dHVyZS0+aXNSZXNlcnZlZCgpICYm
IG1fYmFja2dyb3VuZFRleHR1cmUtPmlzVmFsaWQobV9jb250ZW50UmVjdC5zaXplKCksIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBKTsKLX0KLQogU3RyaW5nIENDUmVuZGVyU3VyZmFjZTo6bmFtZSgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJSZW5kZXJTdXJmYWNlKGlkPSVp
LG93bmVyPSVzKSIsIG1fb3duaW5nTGF5ZXItPmlkKCksIG1fb3duaW5nTGF5ZXItPmRlYnVnTmFt
ZSgpLnV0ZjgoKS5kYXRhKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaAppbmRleCBjZGQ3
YTdiNTllYTMxZDFjZmM1MjExMDUzMmZlZTc4ZTI4ZThkNzhhLi43ZDE4OGE2ZDVlYTIxNTlmMDI2
MzY4ZGZmYzVkNzM5M2ZkZDI2YTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaApAQCAt
NTIsMTUgKzUyLDYgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IENDUmVuZGVyU3VyZmFjZShDQ0xh
eWVySW1wbCopOwogICAgIHZpcnR1YWwgfkNDUmVuZGVyU3VyZmFjZSgpOwogCi0gICAgdmlydHVh
bCBib29sIHByZXBhcmVDb250ZW50c1RleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7Ci0g
ICAgdm9pZCByZWxlYXNlQ29udGVudHNUZXh0dXJlKCk7Ci0gICAgYm9vbCBoYXNWYWxpZENvbnRl
bnRzVGV4dHVyZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBoYXNDYWNoZWRDb250ZW50c1Rl
eHR1cmUoKSBjb25zdDsKLQotICAgIGJvb2wgcHJlcGFyZUJhY2tncm91bmRUZXh0dXJlKExheWVy
UmVuZGVyZXJDaHJvbWl1bSopOwotICAgIHZvaWQgcmVsZWFzZUJhY2tncm91bmRUZXh0dXJlKCk7
Ci0gICAgYm9vbCBoYXNWYWxpZEJhY2tncm91bmRUZXh0dXJlKCkgY29uc3Q7Ci0KICAgICBTdHJp
bmcgbmFtZSgpIGNvbnN0OwogICAgIHZvaWQgZHVtcFN1cmZhY2UoVGV4dFN0cmVhbSYsIGludCBp
bmRlbnQpIGNvbnN0OwogCkBAIC0xMjIsOSArMTEzLDYgQEAgcHVibGljOgogICAgIHZvaWQgY2xl
YXJMYXllckxpc3QoKSB7IG1fbGF5ZXJMaXN0LmNsZWFyKCk7IH0KICAgICBWZWN0b3I8Q0NMYXll
ckltcGwqPiYgbGF5ZXJMaXN0KCkgeyByZXR1cm4gbV9sYXllckxpc3Q7IH0KIAotICAgIE1hbmFn
ZWRUZXh0dXJlKiBjb250ZW50c1RleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzVGV4
dHVyZS5nZXQoKTsgfQotICAgIE1hbmFnZWRUZXh0dXJlKiBiYWNrZ3JvdW5kVGV4dHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZFRleHR1cmUuZ2V0KCk7IH0KLQogICAgIGludCBvd25p
bmdMYXllcklkKCkgY29uc3Q7CiAgICAgQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRSZW5kZXJTdXJm
YWNlKCkgY29uc3Q7CiAKQEAgLTE1Myw5ICsxNDEsNiBAQCBwcml2YXRlOgogICAgIEludFJlY3Qg
bV9jb250ZW50UmVjdDsKICAgICBib29sIG1fc3VyZmFjZVByb3BlcnR5Q2hhbmdlZDsKIAotICAg
IE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gbV9jb250ZW50c1RleHR1cmU7Ci0gICAgT3duUHRyPE1h
bmFnZWRUZXh0dXJlPiBtX2JhY2tncm91bmRUZXh0dXJlOwotCiAgICAgZmxvYXQgbV9kcmF3T3Bh
Y2l0eTsKICAgICBib29sIG1fZHJhd09wYWNpdHlJc0FuaW1hdGluZzsKICAgICBXZWJLaXQ6Oldl
YlRyYW5zZm9ybWF0aW9uTWF0cml4IG1fZHJhd1RyYW5zZm9ybTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyZXIuaApp
bmRleCBiODkwODlmMTNkOTdmYWMxYzg5YzMxMTgwMWViZTZlODg5MWJjMDcxLi5kYzIwZDRiODky
ODVjNTgwMjVjNGZmZGYwNGU0ZDc0MDMxYTkxNWUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlcmVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJlci5oCkBAIC03
NSw2ICs3NSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlbmRlclBhc3MoY29u
c3QgQ0NSZW5kZXJQYXNzKiwgY29uc3QgRmxvYXRSZWN0JiByb290U2Npc3NvclJlY3RJbkN1cnJl
bnRQYXNzKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGZpbmlzaERyYXdpbmdGcmFtZSgpID0gMDsK
IAorICAgIHZpcnR1YWwgYm9vbCBoYXNDYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJQYXNzKGNvbnN0
IENDUmVuZGVyUGFzcyopID0gMDsKKwogICAgIHZpcnR1YWwgdm9pZCBkcmF3SGVhZHNVcERpc3Bs
YXkoTWFuYWdlZFRleHR1cmUqLCBjb25zdCBJbnRTaXplJiBodWRTaXplKSA9IDA7CiAKICAgICAv
LyB3YWl0cyBmb3IgcmVuZGVyaW5nIHRvIGZpbmlzaAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>