<?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>191794</bug_id>
          
          <creation_ts>2018-11-16 16:41:54 -0800</creation_ts>
          <short_desc>[WebGPU] Begin implementing WebGPUTexture, WebGPUTextureView, and WebGPUTextureFormatEnum, and WebGPUSwapChain::configure upgrades</short_desc>
          <delta_ts>2018-11-26 09:56:21 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGPU</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Justin Fan">justin_fan</reporter>
          <assigned_to name="Justin Fan">justin_fan</assigned_to>
          <cc>dino</cc>
    
    <cc>jonlee</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1479742</commentid>
    <comment_count>0</comment_count>
    <who name="Justin Fan">justin_fan</who>
    <bug_when>2018-11-16 16:41:54 -0800</bug_when>
    <thetext>[WebGPU] Begin implementing WebGPUTexture, WebGPUTextureView, and WebGPUTextureFormatEnum, and WebGPUSwapChain::configure upgrades</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1479754</commentid>
    <comment_count>1</comment_count>
      <attachid>355163</attachid>
    <who name="Justin Fan">justin_fan</who>
    <bug_when>2018-11-16 17:01:47 -0800</bug_when>
    <thetext>Created attachment 355163
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1479774</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-11-16 17:27:32 -0800</bug_when>
    <thetext>&lt;rdar://problem/46144874&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1480305</commentid>
    <comment_count>3</comment_count>
      <attachid>355163</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2018-11-19 14:54:26 -0800</bug_when>
    <thetext>Comment on attachment 355163
Patch

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

&gt; Source/WebCore/Modules/webgpu/GPUTextureFormatEnum.h:40
&gt; +std::optional&lt;PlatformTextureFormat&gt; convertAndValidate(GPUTextureFormatEnum);

I&apos;m not sure I like this in the WebCore namespace. Do we need it in more than one place? i.e. can it be file static?

It seems it is only used in GPUSwapChainMetal, so I think it can live there for the moment.

&gt; Source/WebCore/Modules/webgpu/WebGPUTextureFormatEnum.idl:33
&gt; +    &quot;R8G8B8A8Unorm&quot;,
&gt; +    &quot;R8G8B8A8Uint&quot;,
&gt; +    &quot;B8G8R8A8Unorm&quot;,
&gt; +    &quot;D32FloatS8Uint&quot;

Ugh. I wonder if WebGPU should use better names here. Or maybe those are the names everyone expects?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1480306</commentid>
    <comment_count>4</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2018-11-19 14:54:45 -0800</bug_when>
    <thetext>I might make the small changes and land this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1480319</commentid>
    <comment_count>5</comment_count>
      <attachid>355163</attachid>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2018-11-19 15:30:12 -0800</bug_when>
    <thetext>Comment on attachment 355163
Patch

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

&gt;&gt; Source/WebCore/Modules/webgpu/WebGPUTextureFormatEnum.idl:33
&gt;&gt; +    &quot;D32FloatS8Uint&quot;
&gt; 
&gt; Ugh. I wonder if WebGPU should use better names here. Or maybe those are the names everyone expects?

I think so.
https://docs.rs/vulkano/0.7/vulkano/format/index.html
https://docs.microsoft.com/en-us/windows/desktop/api/dxgiformat/ne-dxgiformat-dxgi_format</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1480321</commentid>
    <comment_count>6</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2018-11-19 15:34:26 -0800</bug_when>
    <thetext>Committed r238382: &lt;https://trac.webkit.org/changeset/238382&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1480323</commentid>
    <comment_count>7</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2018-11-19 15:38:39 -0800</bug_when>
    <thetext>(In reply to Jon Lee from comment #5)
&gt; Comment on attachment 355163 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=355163&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/Modules/webgpu/WebGPUTextureFormatEnum.idl:33
&gt; &gt;&gt; +    &quot;D32FloatS8Uint&quot;
&gt; &gt; 
&gt; &gt; Ugh. I wonder if WebGPU should use better names here. Or maybe those are the names everyone expects?
&gt; 
&gt; I think so.
&gt; https://docs.rs/vulkano/0.7/vulkano/format/index.html
&gt; https://docs.microsoft.com/en-us/windows/desktop/api/dxgiformat/ne-
&gt; dxgiformat-dxgi_format

OK! Metal seems to make them a little nicer, in that R8G8B8A8 -&gt; RGBA8, but I guess it doesn&apos;t matter.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>355163</attachid>
            <date>2018-11-16 17:01:47 -0800</date>
            <delta_ts>2018-11-26 09:56:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191794-20181116170146.patch</filename>
            <type>text/plain</type>
            <size>66197</size>
            <attacher name="Justin Fan">justin_fan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4MTIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGQwZWFlYjAyYjhjZDA1
MjdlZDEzNGI1YzZjYzQyNzUyZTUxMWVjMS4uMGY2MGYwMmRiODk3MDAxYzZhMzg2ZWZlMjBhMzFk
NDJjNzc3ZTA0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDE4LTExLTE2ICBKdXN0
aW4gRmFuICA8anVzdGluX2ZhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkdQVV0gQmVnaW4g
aW1wbGVtZW50aW5nIFdlYkdQVVRleHR1cmUsIFdlYkdQVVRleHR1cmVWaWV3LCBhbmQgV2ViR1BV
VGV4dHVyZUZvcm1hdEVudW0sIGFuZCBXZWJHUFVTd2FwQ2hhaW46OmNvbmZpZ3VyZSB1cGdyYWRl
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxNzk0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDog
d2ViZ3B1L3RleHR1cmVzLXRleHR1cmV2aWV3cy5odG1sCisKKyAgICAgICAgSW1wbGVtZW50IGJh
c2ljIGZ1bmN0aW9uYWxpdHkgZm9yIGdldHRpbmcgdGhlIG5leHQgV2ViR1BVVGV4dHVyZSBhbmQg
VGV4dHVyZVZpZXcgZnJvbSB0aGUgV2ViR1BVUmVuZGVyaW5nQ29udGV4dAorICAgICAgICB0byB1
c2UgYXMgYSByZW5kZXIgZGVzdGluYXRpb24gZm9yIHRoZSBuZXh0IGRyYXcgY2FsbC4gQWxzbyBp
bnRyb2R1Y2UgV2ViR1BVVGV4dHVyZUZvcm1hdEVudW0gYW5kIHRoZSBhYmlsaXR5IHRvIAorICAg
ICAgICBjb25maWd1cmUgdGhlIGNvbnRleHQgd2l0aCBhIGNob3NlbiB0ZXh0dXJlIGZvcm1hdC4g
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5t
YWtlOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L0dQVVN3YXBDaGFpbi5oOiBUZXh0dXJlL1Bp
eGVsIGZvcm1hdCBjYW4gbm93IGJlIHNldC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9HUFVU
ZXh0dXJlLmg6IEFkZGVkLiBJbnRlcmZhY2UgdG8gYSBNVExUZXh0dXJlLgorICAgICAgICAqIE1v
ZHVsZXMvd2ViZ3B1L0dQVVRleHR1cmVGb3JtYXRFbnVtLmg6IEFkZGVkLgorICAgICAgICAqIE1v
ZHVsZXMvd2ViZ3B1L1dlYkdQVURldmljZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHUFVE
ZXZpY2U6OmNyZWF0ZVJlbmRlclBpcGVsaW5lIGNvbnN0KTogUmVtb3ZlZCBub3ctdW5uZWNlc3Nh
cnkgZW51bSBjbGFzcyBjYXN0LgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dlYkdQVVJlbmRl
clBpcGVsaW5lRGVzY3JpcHRvci5oOiBSYXRoZXIgdGhhbiBkdXBsaWNhdGUgR1BVUmVuZGVyUGlw
ZWxpbmVEZXNjcmlwdG9yOjpQcmltaXRpdmVUb3BvbG9neSwgYWxpYXMgdG8gaXQuCisgICAgICAg
ICogTW9kdWxlcy93ZWJncHUvV2ViR1BVU3dhcENoYWluLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdQVVN3YXBDaGFpbjo6Y29uZmlndXJlKTogQ2FuIG5vdyBzcGVjaWZ5IGEgc3BlY2lmaWMg
dGV4dHVyZSBmb3JtYXQgZm9yIHRoZSB1bmRlcmx5aW5nIENBTWV0YWxMYXllci4KKyAgICAgICAg
KFdlYkNvcmU6OldlYkdQVVN3YXBDaGFpbjo6Z2V0TmV4dFRleHR1cmUpOiBBZGRlZC4gUmVxdWVz
dCB0aGUgbmV4dCBkcmF3YWJsZSB0ZXh0dXJlLgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dl
YkdQVVN3YXBDaGFpbi5oOiBFeHBvc2UgZ2V0TmV4dFRleHR1cmUoKS4KKyAgICAgICAgKiBNb2R1
bGVzL3dlYmdwdS9XZWJHUFVTd2FwQ2hhaW4uaWRsOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1
L1dlYkdQVVRleHR1cmUuY3BwOiBBZGRlZC4gCisgICAgICAgIChXZWJDb3JlOjpXZWJHUFVUZXh0
dXJlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR1BVVGV4dHVyZTo6V2ViR1BVVGV4
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHUFVUZXh0dXJlOjpjcmVhdGVEZWZhdWx0VGV4
dHVyZVZpZXcpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dlYkdQVVRleHR1cmUuaDogQWRk
ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV2ViR1BVVGV4dHVyZS5pZGw6IEFkZGVkLgor
ICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dlYkdQVVRleHR1cmVGb3JtYXRFbnVtLmg6IEFkZGVk
LiBUeXBlIGFsaWFzIGZvciBHUFVUZXh0dXJlRm9ybWF0RW51bS4KKyAgICAgICAgKiBNb2R1bGVz
L3dlYmdwdS9XZWJHUFVUZXh0dXJlRm9ybWF0RW51bS5pZGw6IEFkZGVkLiBVc2VkIHRvIHJlcHJl
c2VudCBhbnkgdGV4dHVyZSBmb3JtYXQgdXNlZCBieSBXZWJHUFUuCisgICAgICAgICogTW9kdWxl
cy93ZWJncHUvV2ViR1BVVGV4dHVyZVZpZXcuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OldlYkdQVVRleHR1cmVWaWV3OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR1BVVGV4
dHVyZVZpZXc6OldlYkdQVVRleHR1cmVWaWV3KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9X
ZWJHUFVUZXh0dXJlVmlldy5oOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XZWJH
UFVUZXh0dXJlVmlldy5pZGw6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L2NvY29h
L0dQVVN3YXBDaGFpbk1ldGFsLm1tOiAKKyAgICAgICAgKFdlYkNvcmU6OkdQVVN3YXBDaGFpbjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdQVVN3YXBDaGFpbjo6c2V0Rm9ybWF0KTogQ2Fs
bGVkIGJ5IFdlYkdQVVN3YXBDaGFpbjo6Y29uZmlndXJlKCkuCisgICAgICAgIChXZWJDb3JlOjpH
UFVTd2FwQ2hhaW46OmdldE5leHRUZXh0dXJlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9j
b2NvYS9HUFVUZXh0dXJlRm9ybWF0RW51bU1ldGFsLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmNvbnZlcnRBbmRWYWxpZGF0ZSk6IENvbnZlcnQgdGhlIFdlYkdQVVRleHR1cmVGb3JtYXRF
bnVtIHRvIGEgTVRMUGl4ZWxGb3JtYXQuCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvY29jb2Ev
R1BVVGV4dHVyZU1ldGFsLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdQVVRleHR1cmU6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHUFVUZXh0dXJlOjpHUFVUZXh0dXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdQVVRleHR1cmU6OmNyZWF0ZURlZmF1bHRUZXh0dXJlVmlldyk6IFVz
ZXMgdGhlIHBpeGVsRm9ybWF0IG9mIHRoZSBvcmlnaW5hbCB0ZXh0dXJlLgorICAgICAgICAqIFNv
dXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dlYkNv
cmVCdWlsdGluTmFtZXMuaDoKKwogMjAxOC0xMS0xNCAgSnVzdGluIEZhbiAgPGp1c3Rpbl9mYW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFtXZWJHUFVdIFdlYkdQVUNvbW1hbmRCdWZmZXIgcHJvdG90
eXBlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDY2MDk3ZTZjMmY0OThmMTExNjBmOTIwYTgzMWY4
MmRmYWFlOTZiYmQuLjI3OWQ1YzMxODMyMGU1MWZmNGQ1ZjhhMTA4NzdjOGYzZTViYjIzYTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0CkBAIC00NjksNiArNDY5LDkgQEAgc2V0KFdlYkNvcmVfTk9OX1NW
R19JRExfRklMRVMKICAgICBNb2R1bGVzL3dlYmdwdS9XZWJHUFVTaGFkZXJNb2R1bGVEZXNjcmlw
dG9yLmlkbAogICAgIE1vZHVsZXMvd2ViZ3B1L1dlYkdQVVNoYWRlclN0YWdlLmlkbAogICAgIE1v
ZHVsZXMvd2ViZ3B1L1dlYkdQVVN3YXBDaGFpbi5pZGwKKyAgICBNb2R1bGVzL3dlYmdwdS9XZWJH
UFVUZXh0dXJlLmlkbAorICAgIE1vZHVsZXMvd2ViZ3B1L1dlYkdQVVRleHR1cmVGb3JtYXRFbnVt
LmlkbAorICAgIE1vZHVsZXMvd2ViZ3B1L1dlYkdQVVRleHR1cmVWaWV3LmlkbAogCiAgICAgTW9k
dWxlcy93ZWJzb2NrZXRzL0Nsb3NlRXZlbnQuaWRsCiAgICAgTW9kdWxlcy93ZWJzb2NrZXRzL1dl
YlNvY2tldC5pZGwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1h
a2UgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IGI4MjM1OTcxYzM1
ZGE3NWZhODhkNmZhNmVlZjU5MjIxMmE0OTczODkuLmYxNmY3MTE2NjBlOWY1YTE1YzllNDQwZTQ3
NzMxYTM0NDQ1MDQzYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2Vz
Lm1ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMzg2LDYg
KzM4Niw5IEBAIEpTX0JJTkRJTkdfSURMUyA9IFwKICAgICAkKFdlYkNvcmUpL01vZHVsZXMvd2Vi
Z3B1L1dlYkdQVVNoYWRlck1vZHVsZURlc2NyaXB0b3IuaWRsIFwKICAgICAkKFdlYkNvcmUpL01v
ZHVsZXMvd2ViZ3B1L1dlYkdQVVNoYWRlclN0YWdlLmlkbCBcCiAgICAgJChXZWJDb3JlKS9Nb2R1
bGVzL3dlYmdwdS9XZWJHUFVTd2FwQ2hhaW4uaWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMv
d2ViZ3B1L1dlYkdQVVRleHR1cmUuaWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvd2ViZ3B1
L1dlYkdQVVRleHR1cmVGb3JtYXRFbnVtLmlkbCBcCisJJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmdw
dS9XZWJHUFVUZXh0dXJlVmlldy5pZGwgXAogICAgICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJzb2Nr
ZXRzL0Nsb3NlRXZlbnQuaWRsIFwKICAgICAkKFdlYkNvcmUpL01vZHVsZXMvd2Vic29ja2V0cy9X
ZWJTb2NrZXQuaWRsIFwKICAgICAkKFdlYkNvcmUpL01vZHVsZXMvd2VidnIvRE9NV2luZG93V2Vi
VlIuaWRsIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L0dQVVN3
YXBDaGFpbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvR1BVU3dhcENoYWluLmgK
aW5kZXggNTU3ZGNhMTM1NWI4ODk3OTUzMzJjZDMwNmMzYzFiMmExMzkyZDNkOS4uYzQ4YzEwMTQ0
MjU5NjgwODYwMmNjOTJhZGUyMTZiNmJjMWZkNDY2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvR1BVU3dhcENoYWluLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvR1BVU3dhcENoYWluLmgKQEAgLTM1LDYgKzM1LDkgQEAgT0JKQ19DTEFTUyBD
QU1ldGFsTGF5ZXI7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdQVURldmljZTsKK2Ns
YXNzIEdQVVRleHR1cmU7CisKK2VudW0gY2xhc3MgR1BVVGV4dHVyZUZvcm1hdEVudW07CiAKIHVz
aW5nIFBsYXRmb3JtU3dhcExheWVyID0gQ0FNZXRhbExheWVyOwogdXNpbmcgUGxhdGZvcm1Td2Fw
TGF5ZXJTbWFydFB0ciA9IFJldGFpblB0cjxDQU1ldGFsTGF5ZXI+OwpAQCAtNDQsNyArNDcsOSBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIFJlZlB0cjxHUFVTd2FwQ2hhaW4+IGNyZWF0ZSgpOwogCiAg
ICAgdm9pZCBzZXREZXZpY2UoY29uc3QgR1BVRGV2aWNlJik7CisgICAgdm9pZCBzZXRGb3JtYXQo
R1BVVGV4dHVyZUZvcm1hdEVudW0pOwogICAgIHZvaWQgcmVzaGFwZShpbnQgd2lkdGgsIGludCBo
ZWlnaHQpOworICAgIFJlZlB0cjxHUFVUZXh0dXJlPiBnZXROZXh0VGV4dHVyZSgpOwogICAgIHZv
aWQgcHJlc2VudCgpOwogCiAgICAgUGxhdGZvcm1Td2FwTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBj
b25zdCB7IHJldHVybiBtX3BsYXRmb3JtU3dhcExheWVyLmdldCgpOyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9HUFVUZXh0dXJlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9HUFVUZXh0dXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODM3NDQwYmM5YjY0ZmNm
OTc0ZGI0Zjg0MDg1Y2ZmODRlODYwNjFlMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L0dQVVRleHR1cmUuaApAQCAtMCwwICsxLDU1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSA8d3Rm
L1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgorCitPQkpDX1BST1RPQ09MKE1UTFRleHR1cmUpOworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3VzaW5nIFBsYXRmb3JtVGV4dHVyZSA9IE1UTFRleHR1cmU7Cit1c2luZyBQbGF0Zm9y
bVRleHR1cmVTbWFydFB0ciA9IFJldGFpblB0cjxNVExUZXh0dXJlPjsKKworY2xhc3MgR1BVVGV4
dHVyZSA6IHB1YmxpYyBSZWZDb3VudGVkPEdQVVRleHR1cmU+IHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUmVmPEdQVVRleHR1cmU+IGNyZWF0ZShQbGF0Zm9ybVRleHR1cmVTbWFydFB0ciYmKTsKKwor
ICAgIFJlZlB0cjxHUFVUZXh0dXJlPiBjcmVhdGVEZWZhdWx0VGV4dHVyZVZpZXcoKTsKKworcHJp
dmF0ZToKKyAgICBleHBsaWNpdCBHUFVUZXh0dXJlKFBsYXRmb3JtVGV4dHVyZVNtYXJ0UHRyJiYp
OworCisgICAgUGxhdGZvcm1UZXh0dXJlU21hcnRQdHIgbV9wbGF0Zm9ybVRleHR1cmU7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvR1BVVGV4dHVyZUZvcm1hdEVu
dW0uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L0dQVVRleHR1cmVGb3JtYXRFbnVt
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYTA1YzU5Njg1YTM1OTRiZGYxNzk2MDgwZWEzMzg3Y2NjMzk2YTBiNAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L0dQVVRleHR1
cmVGb3JtYXRFbnVtLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIGNs
YXNzIEdQVVRleHR1cmVGb3JtYXRFbnVtIHsKKyAgICBSOEc4QjhBOFVub3JtLAorICAgIFI4RzhC
OEE4VWludCwKKyAgICBCOEc4UjhBOFVub3JtLAorICAgIEQzMkZsb2F0UzhVaW50Cit9OworCit1
c2luZyBQbGF0Zm9ybVRleHR1cmVGb3JtYXQgPSB1bnNpZ25lZCBsb25nOworc3RkOjpvcHRpb25h
bDxQbGF0Zm9ybVRleHR1cmVGb3JtYXQ+IGNvbnZlcnRBbmRWYWxpZGF0ZShHUFVUZXh0dXJlRm9y
bWF0RW51bSk7CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVEZXZpY2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVRGV2aWNlLmNwcAppbmRleCA3MjRhY2E4ZGFhNTA4
ZGRkYjAxNDc4YWNhNTA2MGJlZjcwOWYyNGUzLi4zNGVlMTQ4ZTk3MzZiOWVlNjViMTVmNTNjNDE2
ZTEwMmVkNmVhZTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
ZWJHUFVEZXZpY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQ
VURldmljZS5jcHAKQEAgLTExNiw3ICsxMTYsNyBAQCBSZWZQdHI8V2ViR1BVUmVuZGVyUGlwZWxp
bmU+IFdlYkdQVURldmljZTo6Y3JlYXRlUmVuZGVyUGlwZWxpbmUoV2ViR1BVUmVuZGVyUGlwZQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICByZXR1cm4gV2ViR1BVUmVuZGVy
UGlwZWxpbmU6OmNyZWF0ZShtX2RldmljZS0+Y3JlYXRlUmVuZGVyUGlwZWxpbmUoR1BVUmVuZGVy
UGlwZWxpbmVEZXNjcmlwdG9yIHsgV1RGTW92ZSh2ZXJ0ZXhTdGFnZSksIFdURk1vdmUoZnJhZ21l
bnRTdGFnZSksIHN0YXRpY19jYXN0PEdQVVJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcjo6UHJpbWl0
aXZlVG9wb2xvZ3k+KGRlc2NyaXB0b3IucHJpbWl0aXZlVG9wb2xvZ3kpIH0pKTsKKyAgICByZXR1
cm4gV2ViR1BVUmVuZGVyUGlwZWxpbmU6OmNyZWF0ZShtX2RldmljZS0+Y3JlYXRlUmVuZGVyUGlw
ZWxpbmUoR1BVUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yIHsgV1RGTW92ZSh2ZXJ0ZXhTdGFnZSks
IFdURk1vdmUoZnJhZ21lbnRTdGFnZSksIGRlc2NyaXB0b3IucHJpbWl0aXZlVG9wb2xvZ3kgfSkp
OwogfQogCiBSZWZQdHI8V2ViR1BVQ29tbWFuZEJ1ZmZlcj4gV2ViR1BVRGV2aWNlOjpjcmVhdGVD
b21tYW5kQnVmZmVyKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dlYkdQVVJlbmRlclBpcGVsaW5lRGVzY3JpcHRvci5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV2ViR1BVUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yLmgKaW5kZXggMDZl
ZWM1ZDhiNmZlZTI5NWU1ZjQwMTEwOWRhMWJhZDgxZTJlOGQ1Mi4uOWMyNjQ2MzkwODQ2ZGRhODI5
ZWZjYzI4OTEzNjhkY2E4OTk0MDcyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV2ViR1BVUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yLmgKQEAg
LTI3LDE4ICsyNywxMyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAorI2luY2x1ZGUgIkdQVVJl
bmRlclBpcGVsaW5lRGVzY3JpcHRvci5oIgogI2luY2x1ZGUgIldlYkdQVVBpcGVsaW5lRGVzY3Jp
cHRvckJhc2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdHJ1Y3QgV2ViR1BVUmVuZGVy
UGlwZWxpbmVEZXNjcmlwdG9yIDogV2ViR1BVUGlwZWxpbmVEZXNjcmlwdG9yQmFzZSB7Ci0gICAg
ZW51bSBjbGFzcyBQcmltaXRpdmVUb3BvbG9neSB7Ci0gICAgICAgIFBvaW50TGlzdCwKLSAgICAg
ICAgTGluZUxpc3QsCi0gICAgICAgIExpbmVTdHJpcCwKLSAgICAgICAgVHJpYW5nbGVMaXN0LAot
ICAgICAgICBUcmlhbmdsZVN0cmlwCi0gICAgfTsKKyAgICB1c2luZyBQcmltaXRpdmVUb3BvbG9n
eSA9IEdQVVJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcjo6UHJpbWl0aXZlVG9wb2xvZ3k7CiAKICAg
ICBQcmltaXRpdmVUb3BvbG9neSBwcmltaXRpdmVUb3BvbG9neTsKIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVTd2FwQ2hhaW4uY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVU3dhcENoYWluLmNwcAppbmRleCA4YWE2YTY4
MmJlNDc5OTRlZGI4OGU2MWU4ZmIzMjRkYmYwNGMxMGQyLi4yNmQyMGQzZDMxZjNiMzRjMDc0Yjhl
ZGFkNjUwYTRhYTNlNjJhN2E2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XZWJHUFVTd2FwQ2hhaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dlYkdQVVN3YXBDaGFpbi5jcHAKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShX
RUJHUFUpCiAKLSNpbmNsdWRlICJXZWJHUFVEZXZpY2UuaCIKKyNpbmNsdWRlICJHUFVUZXh0dXJl
Rm9ybWF0RW51bS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM5LDkgKzM5LDE2IEBA
IHZvaWQgV2ViR1BVU3dhcENoYWluOjpjb25maWd1cmUoRGVzY3JpcHRvciYmIGRlc2NyaXB0b3Ip
CiAgICAgaWYgKGRlc2NyaXB0b3IuZGV2aWNlKQogICAgICAgICBtX3N3YXBDaGFpbi0+c2V0RGV2
aWNlKGRlc2NyaXB0b3IuZGV2aWNlLT5kZXZpY2UoKSk7CiAKKyAgICBtX3N3YXBDaGFpbi0+c2V0
Rm9ybWF0KGRlc2NyaXB0b3IuZm9ybWF0KTsKKwogICAgIHJlc2hhcGUoZGVzY3JpcHRvci53aWR0
aCwgZGVzY3JpcHRvci5oZWlnaHQpOwogfQogCitSZWZQdHI8V2ViR1BVVGV4dHVyZT4gV2ViR1BV
U3dhcENoYWluOjpnZXROZXh0VGV4dHVyZSgpCit7CisgICAgcmV0dXJuIFdlYkdQVVRleHR1cmU6
OmNyZWF0ZShtX3N3YXBDaGFpbi0+Z2V0TmV4dFRleHR1cmUoKSk7Cit9CisKIHZvaWQgV2ViR1BV
U3dhcENoYWluOjpwcmVzZW50KCkKIHsKICAgICBtYXJrTGF5ZXJDb21wb3NpdGVkKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVTd2FwQ2hhaW4uaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVVN3YXBDaGFpbi5oCmluZGV4IDA2
Nzk1MDYyMTViYmYyZTgxOGI1MzFlZjE2ZGM0YmUyMjgyZjA0MzcuLmI0NzI0YTRiMTZlODk3N2I4
MjVhZjc5MTAwM2VjYzcyN2QwZTQwMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dlYkdQVVN3YXBDaGFpbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dlYkdQVVN3YXBDaGFpbi5oCkBAIC0zMCw2ICszMCwxMCBAQAogI2luY2x1ZGUgIkdQ
VUJhc2VkQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkdQVVN3YXBDaGFpbi5o
IgogI2luY2x1ZGUgIldlYkdQVURldmljZS5oIgorI2luY2x1ZGUgIldlYkdQVVRleHR1cmUuaCIK
KyNpbmNsdWRlICJXZWJHUFVUZXh0dXJlRm9ybWF0RW51bS5oIgorCisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM4LDEzICs0MiwxNSBAQCBwdWJs
aWM6CiAgICAgc3RydWN0IERlc2NyaXB0b3IgewogICAgICAgICBjb25zdCBXZWJHUFVEZXZpY2Uq
IGRldmljZSA9IG51bGxwdHI7CiAgICAgICAgIC8vIEZJWE1FOiBNb3JlIHRleHR1cmUgcHJvcGVy
dGllcy4KKyAgICAgICAgV2ViR1BVVGV4dHVyZUZvcm1hdEVudW0gZm9ybWF0OwogICAgICAgICB1
bnNpZ25lZCBsb25nIHdpZHRoOwogICAgICAgICB1bnNpZ25lZCBsb25nIGhlaWdodDsKICAgICB9
OwogCiAgICAgdmlydHVhbCB+V2ViR1BVU3dhcENoYWluKCkgPSAwOworCiAgICAgdm9pZCBjb25m
aWd1cmUoRGVzY3JpcHRvciYmKTsKLSAgICAvLyBGSVhNRTogV2ViR1BVVGV4dHVyZSBnZXROZXh0
VGV4dHVyZSgpOworICAgIFJlZlB0cjxXZWJHUFVUZXh0dXJlPiBnZXROZXh0VGV4dHVyZSgpOwog
ICAgIHZvaWQgcHJlc2VudCgpOwogCiBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVTd2FwQ2hhaW4uaWRsIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV2ViR1BVU3dhcENoYWluLmlkbAppbmRleCBlZWY4NWViYzViZDI3NDAw
YTc2NTgzOTY4OGQ1YTljY2I5MDE3YmQyLi5mZTBkYWZmMTYwYTgyMjEwMjdkOTJjZDFiYjkxMzc2
ZDQ1Y2MzMDI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJH
UFVTd2FwQ2hhaW4uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQ
VVN3YXBDaGFpbi5pZGwKQEAgLTMwLDcgKzMwLDcgQEAKICAgICBTa2lwVlRhYmxlVmFsaWRhdGlv
bgogXSBpbnRlcmZhY2UgV2ViR1BVU3dhcENoYWluIHsKICAgICB2b2lkIGNvbmZpZ3VyZShXZWJH
UFVTd2FwQ2hhaW5EZXNjcmlwdG9yIGRlc2NyaXB0b3IpOwotICAgIC8vIFdlYkdQVVRleHR1cmUg
Z2V0TmV4dFRleHR1cmUoKTsKKyAgICBXZWJHUFVUZXh0dXJlIGdldE5leHRUZXh0dXJlKCk7CiAg
ICAgdm9pZCBwcmVzZW50KCk7CiB9OwogCkBAIC00Miw3ICs0Miw3IEBAIHR5cGVkZWYgdW5zaWdu
ZWQgbG9uZyB1MzI7CiBdIGRpY3Rpb25hcnkgV2ViR1BVU3dhcENoYWluRGVzY3JpcHRvciB7CiAg
ICAgV2ViR1BVRGV2aWNlIGRldmljZTsgLy8gRklYTUU6IFByb3Bvc2UgdGhpcyBhZGRpdGlvbiB0
byBJREwuCiAgICAgLy8gV2ViR1BVVGV4dHVyZVVzYWdlRmxhZ3MgdXNhZ2U7Ci0gICAgLy8gV2Vi
R1BVVGV4dHVyZUZvcm1hdEVudW0gZm9ybWF0OworICAgIFdlYkdQVVRleHR1cmVGb3JtYXRFbnVt
IGZvcm1hdDsKICAgICB1MzIgd2lkdGg7CiAgICAgdTMyIGhlaWdodDsKIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVUZXh0dXJlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVVRleHR1cmUuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ1
YjRiM2JkY2ViNGJlNWZmMDQxNzFkMTlkZTQyMWUwMjYxMDNjM2IKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVUZXh0dXJlLmNwcApAQCAtMCww
ICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldl
YkdQVVRleHR1cmUuaCIKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXZWJHUFVU
ZXh0dXJlVmlldy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZlB0cjxXZWJHUFVUZXh0
dXJlPiBXZWJHUFVUZXh0dXJlOjpjcmVhdGUoUmVmUHRyPEdQVVRleHR1cmU+JiYgdGV4dHVyZSkK
K3sKKyAgICBpZiAoIXRleHR1cmUpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBXZWJHUFVUZXh0dXJlKHRleHR1cmUucmVsZWFzZU5vbk51bGwoKSkp
OworfQorCitXZWJHUFVUZXh0dXJlOjpXZWJHUFVUZXh0dXJlKFJlZjxHUFVUZXh0dXJlPiYmIHRl
eHR1cmUpCisgICAgOiBtX3RleHR1cmUoV1RGTW92ZSh0ZXh0dXJlKSkKK3sKK30KKworUmVmUHRy
PFdlYkdQVVRleHR1cmVWaWV3PiBXZWJHUFVUZXh0dXJlOjpjcmVhdGVEZWZhdWx0VGV4dHVyZVZp
ZXcoKQoreworICAgIGF1dG8gZ3B1VGV4dHVyZSA9IG1fdGV4dHVyZS0+Y3JlYXRlRGVmYXVsdFRl
eHR1cmVWaWV3KCk7CisKKyAgICBpZiAoIWdwdVRleHR1cmUpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgcmV0dXJuIFdlYkdQVVRleHR1cmVWaWV3OjpjcmVhdGUoZ3B1VGV4dHVyZS5y
ZWxlYXNlTm9uTnVsbCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQkdQVSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dlYkdQVVRleHR1cmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQ
VVRleHR1cmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMWMwOGRlNGQyNWRjMmNiZGVkOTQxOGI1NWFjNzI1Yjkx
MzY3ZTU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V2ViR1BVVGV4dHVyZS5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJHUFVUZXh0dXJlLmgiCisKKyNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXZWJHUFVUZXh0dXJlVmlldzsKKworY2xhc3MgV2Vi
R1BVVGV4dHVyZSA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYkdQVVRleHR1cmU+IHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUmVmUHRyPFdlYkdQVVRleHR1cmU+IGNyZWF0ZShSZWZQdHI8R1BVVGV4dHVy
ZT4mJik7CisKKyAgICBSZWZQdHI8V2ViR1BVVGV4dHVyZVZpZXc+IGNyZWF0ZURlZmF1bHRUZXh0
dXJlVmlldygpOworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IFdlYkdQVVRleHR1cmUoUmVmPEdQ
VVRleHR1cmU+JiYpOworCisgICAgUmVmPEdQVVRleHR1cmU+IG1fdGV4dHVyZTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVUZXh0dXJlLmlkbCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVVRleHR1cmUuaWRsCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjdhZGU4MmE2NzE3MTJlMTJkZDBkMWIxMjE2OWUxYmI2NWI3NzllODUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVUZXh0dXJlLmlkbApAQCAt
MCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKy8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ncHV3ZWIvZ3B1
d2ViL2Jsb2IvbWFzdGVyL2Rlc2lnbi9za2V0Y2gud2ViaWRsCisKK1sKKyAgICBDb25kaXRpb25h
bD1XRUJHUFUsCisgICAgRW5hYmxlZEF0UnVudGltZT1XZWJHUFUsCisgICAgSW1wbGVtZW50YXRp
b25MYWNrc1ZUYWJsZQorXSBpbnRlcmZhY2UgV2ViR1BVVGV4dHVyZSB7CisgICAgV2ViR1BVVGV4
dHVyZVZpZXcgY3JlYXRlRGVmYXVsdFRleHR1cmVWaWV3KCk7CisvKiBOb3QgWWV0IEltcGxlbWVu
dGVkOgorICAgIFdlYkdQVVRleHR1cmVWaWV3IGNyZWF0ZVRleHR1cmVWaWV3KFdlYkdQVVRleHR1
cmVWaWV3RGVzY3JpcHRvciBkZXNjKTsKKworICAgIHZvaWQgZGVzdHJveSgpOworKi8KK307CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVUZXh0dXJlRm9y
bWF0RW51bS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVVGV4dHVyZUZv
cm1hdEVudW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZTdhYTJhOGY1YzAyMzE1YTg2MjBjNTY5MjAwOGM2YjVl
OGNlYjgyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V2ViR1BVVGV4dHVyZUZvcm1hdEVudW0uaApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiR1BVVGV4dHVy
ZUZvcm1hdEVudW0uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBXZWJHUFVUZXh0
dXJlRm9ybWF0RW51bSA9IEdQVVRleHR1cmVGb3JtYXRFbnVtOworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVVGV4dHVyZUZvcm1hdEVudW0uaWRsIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVVGV4dHVyZUZvcm1hdEVudW0uaWRsCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjk4MjJmZmQ0NTkzNzg5MmQ2OTI3NDIwOWMwNjg4ZTFjM2Y1YTcxOGEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVUZXh0dXJlRm9y
bWF0RW51bS5pZGwKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1sKKyAgICBDb25kaXRp
b25hbD1XRUJHUFUsCisgICAgRW5hYmxlZEF0UnVudGltZT1XZWJHUFUKK10gZW51bSBXZWJHUFVU
ZXh0dXJlRm9ybWF0RW51bSB7CisgICAgIlI4RzhCOEE4VW5vcm0iLAorICAgICJSOEc4QjhBOFVp
bnQiLAorICAgICJCOEc4UjhBOFVub3JtIiwKKyAgICAiRDMyRmxvYXRTOFVpbnQiCit9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVVGV4dHVyZVZpZXcu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVVGV4dHVyZVZpZXcuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmViNTE3ZmQwZmM0ZWRjNDYwMTAwMzY3NWZlY2Y4NmJkZjg4M2FiZTAKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVUZXh0
dXJlVmlldy5jcHAKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJHUFVUZXh0dXJlVmlldy5oIgorCisjaWYgRU5BQkxFKFdFQkdQ
VSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWY8V2ViR1BVVGV4dHVyZVZpZXc+IFdlYkdQ
VVRleHR1cmVWaWV3OjpjcmVhdGUoUmVmPEdQVVRleHR1cmU+JiYgdmlldykKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBXZWJHUFVUZXh0dXJlVmlldyhXVEZNb3ZlKHZpZXcpKSk7Cit9CisK
K1dlYkdQVVRleHR1cmVWaWV3OjpXZWJHUFVUZXh0dXJlVmlldyhSZWY8R1BVVGV4dHVyZT4mJiB2
aWV3KQorICAgIDogbV90ZXh0dXJlVmlldyhXVEZNb3ZlKHZpZXcpKQoreworICAgIFVOVVNFRF9Q
QVJBTShtX3RleHR1cmVWaWV3KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKFdFQkdQVSkKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV2ViR1BVVGV4dHVyZVZpZXcuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dlYkdQVVRleHR1cmVWaWV3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjMxNWZhNDkxZmQxYjY2M2JjNmY3
YzVlYzFjMmNkZjE3NjUyMmE0NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dlYkdQVVRleHR1cmVWaWV3LmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIkdQ
VVRleHR1cmUuaCIKKworI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgV2ViR1BVVGV4dHVyZVZpZXcgOiBwdWJsaWMgUmVmQ291bnRlZDxX
ZWJHUFVUZXh0dXJlVmlldz4geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8V2ViR1BVVGV4dHVy
ZVZpZXc+IGNyZWF0ZShSZWY8R1BVVGV4dHVyZT4mJik7CisKK3ByaXZhdGU6CisgICAgZXhwbGlj
aXQgV2ViR1BVVGV4dHVyZVZpZXcoUmVmPEdQVVRleHR1cmU+JiYpOworICAgIAorICAgIFJlZjxH
UFVUZXh0dXJlPiBtX3RleHR1cmVWaWV3OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dlYkdQVVRleHR1cmVWaWV3LmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dlYkdQVVRleHR1cmVWaWV3LmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OTMxYzVlYTk3NzAw
NjQ2YmZhNDAwZGMzY2YyN2M1Mzg4Mzc1OWIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVVGV4dHVyZVZpZXcuaWRsCkBAIC0wLDAgKzEsMzIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworLy8gaHR0cHM6Ly9naXRodWIuY29tL2dwdXdlYi9ncHV3ZWIvYmxvYi9t
YXN0ZXIvZGVzaWduL3NrZXRjaC53ZWJpZGwKKworWworICAgIENvbmRpdGlvbmFsPVdFQkdQVSwK
KyAgICBFbmFibGVkQXRSdW50aW1lPVdlYkdQVSwKKyAgICBJbXBsZW1lbnRhdGlvbkxhY2tzVlRh
YmxlCitdIGludGVyZmFjZSBXZWJHUFVUZXh0dXJlVmlldyB7Cit9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvY29jb2EvR1BVU3dhcENoYWluTWV0YWwubW0gYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9jb2NvYS9HUFVTd2FwQ2hhaW5NZXRhbC5tbQpp
bmRleCAzZGZkMTYyZWJiODIzMTc3ZTQzNWNiOTY3YTJjNjNjZjdiNTVkYjk1Li45ZDc0ZDk5Njk3
N2Q5ZmI4ZGYzYWJjNDg2MTM1Mjg1NWQxNjBlMTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9jb2NvYS9HUFVTd2FwQ2hhaW5NZXRhbC5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9jb2NvYS9HUFVTd2FwQ2hhaW5NZXRhbC5tbQpAQCAtMjks
NiArMjksOCBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbXBvcnQgIkdQVURldmljZS5oIgor
I2ltcG9ydCAiR1BVVGV4dHVyZS5oIgorI2ltcG9ydCAiR1BVVGV4dHVyZUZvcm1hdEVudW0uaCIK
ICNpbXBvcnQgIkxvZ2dpbmcuaCIKIAogI2ltcG9ydCA8TWV0YWwvTWV0YWwuaD4KQEAgLTQ4LDgg
KzUwLDcgQEAgUmVmUHRyPEdQVVN3YXBDaGFpbj4gR1BVU3dhcENoYWluOjpjcmVhdGUoKQogICAg
IFtwbGF0Zm9ybUxheWVyIHNldE9wYXF1ZTowXTsKICAgICBbcGxhdGZvcm1MYXllciBzZXROYW1l
OkAiV2ViR1BVIExheWVyIl07CiAKLSAgICAvLyBGSVhNRTogRm9yIG5vdywgZGVmYXVsdCB0byB0
aGVzZSBzZXR0aW5ncy4KLSAgICBbcGxhdGZvcm1MYXllciBzZXRQaXhlbEZvcm1hdDpNVExQaXhl
bEZvcm1hdEJHUkE4VW5vcm1dOworICAgIC8vIEZJWE1FOiBGb3Igbm93LCBkZWZhdWx0IHRvIHRo
aXMgdXNhZ2UgZmxhZy4KICAgICBbcGxhdGZvcm1MYXllciBzZXRGcmFtZWJ1ZmZlck9ubHk6WUVT
XTsKIAogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CkBAIC03NywxMiArNzgsNDYgQEAg
dm9pZCBHUFVTd2FwQ2hhaW46OnNldERldmljZShjb25zdCBHUFVEZXZpY2UmIGRldmljZSkKICAg
ICBbbV9wbGF0Zm9ybVN3YXBMYXllciBzZXREZXZpY2U6ZGV2aWNlLnBsYXRmb3JtRGV2aWNlKCld
OwogfQogCit2b2lkIEdQVVN3YXBDaGFpbjo6c2V0Rm9ybWF0KEdQVVRleHR1cmVGb3JtYXRFbnVt
IGZvcm1hdCkKK3sKKyAgICBhdXRvIHJlc3VsdCA9IGNvbnZlcnRBbmRWYWxpZGF0ZShmb3JtYXQp
OworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIG10bFJlc3Vs
dCA9IHN0YXRpY19jYXN0PE1UTFBpeGVsRm9ybWF0PihyZXN1bHQudmFsdWUoKSk7CisKKyAgICBz
d2l0Y2ggKG10bFJlc3VsdCkgeworICAgIGNhc2UgTVRMUGl4ZWxGb3JtYXRCR1JBOFVub3JtOgor
ICAgIC8vIEZJWE1FOiBBZGQgdGhlIG90aGVyIHN1cHBvcnRlZCBzd2FwIGxheWVyIGZvcm1hdHMg
YXMgdGhleSBhcmUgYWRkZWQgdG8gR1BVIHNwZWMuCisgICAgLy8gIE1UTFBpeGVsRm9ybWF0QkdS
QThVbm9ybV9zUkdCLCBNVExQaXhlbEZvcm1hdFJHQkExNkZsb2F0LCBNVExQaXhlbEZvcm1hdEJH
UkExMF9YUiwgYW5kIE1UTFBpeGVsRm9ybWF0QkdSQTEwX1hSX3NSR0IuCisgICAgICAgIFttX3Bs
YXRmb3JtU3dhcExheWVyIHNldFBpeGVsRm9ybWF0Om10bFJlc3VsdF07CisgICAgICAgIHJldHVy
bjsKKyAgICBkZWZhdWx0OgorICAgICAgICBMT0coV2ViR1BVLCAiR1BVU3dhcENoYWluOjpzZXRG
b3JtYXQoKTogVW5zdXBwb3J0ZWQgTVRMUGl4ZWxGb3JtYXQhIik7CisgICAgfQorfQorCiB2b2lk
IEdQVVN3YXBDaGFpbjo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAgICAgW21f
cGxhdGZvcm1Td2FwTGF5ZXIgc2V0Qm91bmRzOkNHUmVjdE1ha2UoMCwgMCwgd2lkdGgsIGhlaWdo
dCldOwogICAgIFttX3BsYXRmb3JtU3dhcExheWVyIHNldERyYXdhYmxlU2l6ZTpDR1NpemVNYWtl
KHdpZHRoLCBoZWlnaHQpXTsKIH0KIAorUmVmUHRyPEdQVVRleHR1cmU+IEdQVVN3YXBDaGFpbjo6
Z2V0TmV4dFRleHR1cmUoKQoreworICAgIFJldGFpblB0cjxNVExUZXh0dXJlPiBtdGxUZXh0dXJl
OworCisgICAgaWYgKGF1dG8gZHJhd2FibGUgPSByZXRhaW5QdHIoW21fcGxhdGZvcm1Td2FwTGF5
ZXIgbmV4dERyYXdhYmxlXSkpCisgICAgICAgIG10bFRleHR1cmUgPSByZXRhaW5QdHIoW2RyYXdh
YmxlIHRleHR1cmVdKTsKKworICAgIGlmICghbXRsVGV4dHVyZSkgeworICAgICAgICBMT0coV2Vi
R1BVLCAiR1BVU3dhcENoYWluOjpnZXROZXh0VGV4dHVyZSgpOiBVbmFibGUgdG8gZ2V0IG5leHQg
TVRMVGV4dHVyZSEiKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0
dXJuIEdQVVRleHR1cmU6OmNyZWF0ZShXVEZNb3ZlKG10bFRleHR1cmUpKTsKK30KKwogdm9pZCBH
UFVTd2FwQ2hhaW46OnByZXNlbnQoKQogewogICAgIC8vIEZJWE1FOiBVbmltcGxlbWVudGVkIHN0
dWIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9jb2NvYS9HUFVU
ZXh0dXJlRm9ybWF0RW51bU1ldGFsLm1tIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
Y29jb2EvR1BVVGV4dHVyZUZvcm1hdEVudW1NZXRhbC5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43Njg3NDkzYjdl
YTRiOWEyNWU2YTI1NWNmZWIwMTI4MjZlY2FmNGVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvY29jb2EvR1BVVGV4dHVyZUZvcm1hdEVudW1NZXRhbC5t
bQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1w
b3J0ICJHUFVUZXh0dXJlRm9ybWF0RW51bS5oIgorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2lt
cG9ydCA8TWV0YWwvTWV0YWwuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGQ6Om9wdGlv
bmFsPFBsYXRmb3JtVGV4dHVyZUZvcm1hdD4gY29udmVydEFuZFZhbGlkYXRlKEdQVVRleHR1cmVG
b3JtYXRFbnVtIGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgR1BV
VGV4dHVyZUZvcm1hdEVudW06OlI4RzhCOEE4VW5vcm06CisgICAgICAgIHJldHVybiBNVExQaXhl
bEZvcm1hdFJHQkE4VW5vcm07CisgICAgY2FzZSBHUFVUZXh0dXJlRm9ybWF0RW51bTo6UjhHOEI4
QThVaW50OgorICAgICAgICByZXR1cm4gTVRMUGl4ZWxGb3JtYXRSR0JBOFVpbnQ7CisgICAgY2Fz
ZSBHUFVUZXh0dXJlRm9ybWF0RW51bTo6QjhHOFI4QThVbm9ybToKKyAgICAgICAgcmV0dXJuIE1U
TFBpeGVsRm9ybWF0QkdSQThVbm9ybTsKKyAgICBjYXNlIEdQVVRleHR1cmVGb3JtYXRFbnVtOjpE
MzJGbG9hdFM4VWludDoKKyAgICAgICAgcmV0dXJuIE1UTFBpeGVsRm9ybWF0RGVwdGgzMkZsb2F0
X1N0ZW5jaWw4OworICAgIGRlZmF1bHQ6CisgICAgICAgIExPRyhXZWJHUFUsICJHUFVTd2FwQ2hh
aW46OnNldEZvcm1hdCgpOiBJbnZhbGlkIHRleHR1cmUgZm9ybWF0IHNwZWNpZmllZCEiKTsKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9jb2NvYS9HUFVUZXh0dXJlTWV0YWwubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9jb2NvYS9HUFVUZXh0dXJlTWV0YWwubW0KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NTA3ODU3YjZmM2FiNTU0YWEwZmE1Y2E3ZDNhYmE0OTBlNGM3ZmI3OQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L2NvY29hL0dQVVRleHR1cmVNZXRhbC5t
bQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1w
b3J0ICJHUFVUZXh0dXJlLmgiCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW1wb3J0ICJMb2dn
aW5nLmgiCisKKyNpbXBvcnQgPE1ldGFsL01ldGFsLmg+CisjaW1wb3J0IDx3dGYvQmxvY2tPYmpD
RXhjZXB0aW9ucy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZjxHUFVUZXh0dXJlPiBH
UFVUZXh0dXJlOjpjcmVhdGUoUGxhdGZvcm1UZXh0dXJlU21hcnRQdHImJiB0ZXh0dXJlKQorewor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEdQVVRleHR1cmUoV1RGTW92ZSh0ZXh0dXJlKSkpOwor
fQorCitHUFVUZXh0dXJlOjpHUFVUZXh0dXJlKFJldGFpblB0cjxNVExUZXh0dXJlPiYmIHRleHR1
cmUpCisgICAgOiBtX3BsYXRmb3JtVGV4dHVyZShXVEZNb3ZlKHRleHR1cmUpKQoreworfQorCitS
ZWZQdHI8R1BVVGV4dHVyZT4gR1BVVGV4dHVyZTo6Y3JlYXRlRGVmYXVsdFRleHR1cmVWaWV3KCkK
K3sKKyAgICBSZXRhaW5QdHI8TVRMVGV4dHVyZT4gdGV4dHVyZTsKKworICAgIHRleHR1cmUgPSBh
ZG9wdE5TKFttX3BsYXRmb3JtVGV4dHVyZSBuZXdUZXh0dXJlVmlld1dpdGhQaXhlbEZvcm1hdDpt
X3BsYXRmb3JtVGV4dHVyZS5nZXQoKS5waXhlbEZvcm1hdF0pOworCisgICAgaWYgKCF0ZXh0dXJl
KSB7CisgICAgICAgIExPRyhXZWJHUFUsICJHUFVUZXh0dXJlOjpjcmVhdGVEZWZhdWx0VGV4dHVy
ZVZpZXcoKTogVW5hYmxlIHRvIGNyZWF0ZSBNVExUZXh0dXJlIHZpZXchIik7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiBHUFVUZXh0dXJlOjpjcmVhdGUoV1RG
TW92ZSh0ZXh0dXJlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShXRUJHUFUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDg2MzNiZDcyYzVhMWE5ODJjYzhlNDQ2
OTg3MjE4YmU1YjM4YTIwYWQuLmY3YTQ3Mjg0OGIwZDc4MTQwZjJjMzBhNDk2YTBlYjhhNjQ2ODk4
NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0zMTAsNiArMzEwLDggQEAgTW9kdWxlcy93ZWJncHUvV2Vi
R1BVUmVuZGVyaW5nQ29udGV4dC5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dlYkdQVVJlbmRlclBpcGVs
aW5lLmNwcAogTW9kdWxlcy93ZWJncHUvV2ViR1BVU2hhZGVyTW9kdWxlLmNwcAogTW9kdWxlcy93
ZWJncHUvV2ViR1BVU3dhcENoYWluLmNwcAorTW9kdWxlcy93ZWJncHUvV2ViR1BVVGV4dHVyZS5j
cHAKK01vZHVsZXMvd2ViZ3B1L1dlYkdQVVRleHR1cmVWaWV3LmNwcAogCiBNb2R1bGVzL3dlYnZy
L05hdmlnYXRvcldlYlZSLmNwcAogTW9kdWxlcy93ZWJ2ci9WUkRpc3BsYXkuY3BwCkBAIC0zMjIw
LDYgKzMyMjIsOSBAQCBKU1dlYkdQVVNoYWRlck1vZHVsZS5jcHAKIEpTV2ViR1BVU2hhZGVyTW9k
dWxlRGVzY3JpcHRvci5jcHAKIEpTV2ViR1BVU2hhZGVyU3RhZ2UuY3BwCiBKU1dlYkdQVVN3YXBD
aGFpbi5jcHAKK0pTV2ViR1BVVGV4dHVyZS5jcHAKK0pTV2ViR1BVVGV4dHVyZUZvcm1hdEVudW0u
Y3BwCitKU1dlYkdQVVRleHR1cmVWaWV3LmNwcAogSlNXZWJNZXRhbEJ1ZmZlci5jcHAKIEpTV2Vi
TWV0YWxDb21tYW5kQnVmZmVyLmNwcAogSlNXZWJNZXRhbENvbW1hbmRRdWV1ZS5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzQ29jb2EudHh0CmluZGV4IGU3ZWUzMDUxZWI1NDc3MWZhYzgwMTc5YTk1Y2M5OWZkODkz
OTAzNjguLjY0YWNiYjE2NDBkYjE1NTllNDRjOTFiNjkwYjQyM2YxOWZhMGUyNzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUv
U291cmNlc0NvY29hLnR4dApAQCAtMzMsNiArMzMsOCBAQCBNb2R1bGVzL3dlYmdwdS9jb2NvYS9H
UFVRdWV1ZU1ldGFsLm1tCiBNb2R1bGVzL3dlYmdwdS9jb2NvYS9HUFVSZW5kZXJQaXBlbGluZU1l
dGFsLm1tCiBNb2R1bGVzL3dlYmdwdS9jb2NvYS9HUFVTaGFkZXJNb2R1bGVNZXRhbC5tbQogTW9k
dWxlcy93ZWJncHUvY29jb2EvR1BVU3dhcENoYWluTWV0YWwubW0KK01vZHVsZXMvd2ViZ3B1L2Nv
Y29hL0dQVVRleHR1cmVNZXRhbC5tbQorTW9kdWxlcy93ZWJncHUvY29jb2EvR1BVVGV4dHVyZUZv
cm1hdEVudW1NZXRhbC5tbQogCiBhY2Nlc3NpYmlsaXR5L2lvcy9BY2Nlc3NpYmlsaXR5T2JqZWN0
SU9TLm1tCiBhY2Nlc3NpYmlsaXR5L2lvcy9BWE9iamVjdENhY2hlSU9TLm1tCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMmU1ODZi
ZDAwNTI4MWU1YTQ3NTFjY2U0OTljOGZlNTlkMThkYzZiMy4uNjEyYmQyNmExMWUzNzRjMmQzNjdh
Y2Y4NTdlMGU4NTMwZDZkNzQyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTM4MTksNiArMTM4MTksNyBAQAogCQlEMDQ1QUQy
MzIxNjgyNDc1MDAwQTZFOUIgLyogV2ViTWV0YWxDb21tYW5kUXVldWUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV2ViTWV0YWxDb21tYW5kUXVldWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlEMDQ2RkI2NTIxOEQwNzNDMDBDQjhGNjIgLyogR1BVUmVuZGVyUGlwZWxpbmVEZXNj
cmlwdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdQVVJlbmRlclBpcGVsaW5lRGVzY3JpcHRvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMDQ2RkI2NzIxOEQxODAzMDBDQjhGNjIgLyog
R1BVUGlwZWxpbmVTdGFnZURlc2NyaXB0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR1BVUGlwZWxpbmVT
dGFnZURlc2NyaXB0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDA0NkZCNjgy
MThEMThDRDAwQ0I4RjYyIC8qIEdQVVBpcGVsaW5lRGVzY3JpcHRvckJhc2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gR1BVUGlwZWxpbmVEZXNjcmlwdG9yQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlEMDU3M0Q0MjIxN0VCODFFMDBEMUJFOTEgLyogR1BVTGVnYWN5VGV4dHVyZU1ldGFs
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gR1BVTGVnYWN5VGV4
dHVyZU1ldGFsLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMDVDRUQyNzBBNDBC
QjJDMDBDNUFGMzggLyogRm9ybWF0QmxvY2tDb21tYW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBGb3JtYXRCbG9ja0NvbW1hbmQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlEMDVDRUQyODBBNDBCQjJDMDBDNUFGMzggLyogRm9ybWF0QmxvY2tD
b21tYW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb3JtYXRCbG9ja0Nv
bW1hbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzODgzLDYgKzEzODg0LDE4
IEBACiAJCUQwRUFDRjdFMjE5MzgyQjAwMDBGQTc1QyAvKiBHUFVDb21tYW5kQnVmZmVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEdQVUNvbW1hbmRCdWZmZXIuaDsgcGF0aCA9IE1vZHVsZXMvd2ViZ3B1L0dQ
VUNvbW1hbmRCdWZmZXIuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OwogCQlEMEVBQ0Y4
MDIxOTM5MUVFMDAwRkE3NUMgLyogR1BVUXVldWVNZXRhbC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IEdQVVF1ZXVlTWV0YWwubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwRUFD
RjgxMjE5MzkyMUEwMDBGQTc1QyAvKiBHUFVRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHUFVRdWV1
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEMEVBQ0Y4MjIxOTNBQjM4MDAwRkE3
NUMgLyogR1BVVGV4dHVyZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHUFVUZXh0dXJlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUQwRUFDRjgzMjE5M0FCMzgwMDBGQTc1QyAvKiBHUFVUZXh0
dXJlTWV0YWwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBHUFVUZXh0dXJlTWV0YWwubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQwRUFDRjg0MjE5M0IwMkUwMDBGQTc1QyAvKiBX
ZWJHUFVUZXh0dXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVVRleHR1cmUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDBFQUNGODUyMTkzQjAyRTAwMEZBNzVDIC8qIFdlYkdQVVRl
eHR1cmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViR1BVVGV4dHVyZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUQwRUFDRjg2MjE5M0IwMkUwMDBGQTc1QyAvKiBXZWJHUFVU
ZXh0dXJlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBXZWJHUFVUZXh0dXJlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRDBFQUNGODcyMTkzRUU0RTAwMEZBNzVDIC8qIFdlYkdQVVRleHR1cmVWaWV3Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYkdQVVRleHR1cmVWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUQwRUFDRjg4MjE5M0VFNEUwMDBGQTc1QyAvKiBXZWJHUFVUZXh0dXJlVmlldy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHUFVUZXh0dXJlVmlldy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUQwRUFDRjg5MjE5M0VFNEUwMDBGQTc1QyAvKiBXZWJHUFVUZXh0
dXJlVmlldy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gV2ViR1BVVGV4dHVyZVZpZXcuaWRsOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlEMEVBQ0ZBRDIxOUUzMEZEMDAwRkE3NUMgLyogV2ViR1BVVGV4dHVyZUZv
cm1hdEVudW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR1BVVGV4dHVyZUZvcm1hdEVudW0uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDBFQUNGQUUyMTlFMzBGRDAwMEZBNzVDIC8qIFdl
YkdQVVRleHR1cmVGb3JtYXRFbnVtLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJHUFVUZXh0dXJlRm9ybWF0RW51bS5p
ZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQwRUFDRkIyMjE5RTRGMTQwMDBGQTc1
QyAvKiBHUFVUZXh0dXJlRm9ybWF0RW51bS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHUFVUZXh0dXJlRm9y
bWF0RW51bS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEMEVBQ0ZCNDIxOUU2MkNC
MDAwRkE3NUMgLyogR1BVVGV4dHVyZUZvcm1hdEVudW1NZXRhbC5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IEdQVVRleHR1cmVGb3JtYXRFbnVtTWV0YWwubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUQwRURBNzcyMTQzRTMwM0MwMDI4RTM4MyAvKiBDYWNoZWRSYXdSZXNvdXJjZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWNoZWRSYXdSZXNvdXJj
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwRURBNzczMTQzRTMwM0MwMDI4
RTM4MyAvKiBDYWNoZWRSYXdSZXNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDYWNoZWRSYXdSZXNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlE
MEZGMkE1QjExRjhDNDVBMDA3RTc0RTAgLyogUGluZ0xvYWRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQaW5nTG9hZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTI1NTQ5LDYgKzI1NTYyLDcgQEAKIAkJCQlEMEVBQ0Y3RTIxOTM4MkIwMDAw
RkE3NUMgLyogR1BVQ29tbWFuZEJ1ZmZlci5oICovLAogCQkJCUQwOTcyN0NBMjE4QkQ3QTUwMDk0
MkYzQSAvKiBHUFVEZXZpY2UuY3BwICovLAogCQkJCUQwNjE1RkNGMjE3RkYxODUwMDhBNDhBOCAv
KiBHUFVEZXZpY2UuaCAqLywKKwkJCQlEMDQ2RkI2ODIxOEQxOENEMDBDQjhGNjIgLyogR1BVUGlw
ZWxpbmVEZXNjcmlwdG9yQmFzZS5oICovLAogCQkJCUQwNDZGQjY3MjE4RDE4MDMwMENCOEY2MiAv
KiBHUFVQaXBlbGluZVN0YWdlRGVzY3JpcHRvci5oICovLAogCQkJCUQwRUFDRjgxMjE5MzkyMUEw
MDBGQTc1QyAvKiBHUFVRdWV1ZS5oICovLAogCQkJCUQwRUFDRjdEMjE5MzgyQjAwMDBGQTc1QyAv
KiBHUFVSZW5kZXJQaXBlbGluZS5oICovLApAQCAtMjU1NTYsNiArMjU1NzAsOCBAQAogCQkJCUQw
NjBEODg4MjE4MjgwQzEwMDMzOTMxOCAvKiBHUFVTaGFkZXJNb2R1bGUuaCAqLywKIAkJCQlEMDk3
MjdDMjIxOEE0NzI5MDA5NDJGM0EgLyogR1BVU2hhZGVyTW9kdWxlRGVzY3JpcHRvci5oICovLAog
CQkJCUQwRUFDRjdDMjE5MzgyQUYwMDBGQTc1QyAvKiBHUFVTd2FwQ2hhaW4uaCAqLywKKwkJCQlE
MEVBQ0Y4MjIxOTNBQjM4MDAwRkE3NUMgLyogR1BVVGV4dHVyZS5oICovLAorCQkJCUQwRUFDRkIy
MjE5RTRGMTQwMDBGQTc1QyAvKiBHUFVUZXh0dXJlRm9ybWF0RW51bS5oICovLAogCQkJCUQwMEY1
OTQ3MjE2RUZFNTQwMDBENzFEQiAvKiBXZWJHUFUuY3BwICovLAogCQkJCUQwMEY1OTQ2MjE2RUZF
NTQwMDBENzFEQiAvKiBXZWJHUFUuaCAqLywKIAkJCQlEMDBGNTk0ODIxNkVGRTU0MDAwRDcxREIg
LyogV2ViR1BVLmlkbCAqLywKQEAgLTI1NTkyLDYgKzI1NjA4LDE0IEBACiAJCQkJRDBEQTBCRTUy
MTc5MzBFMjAwN0ZFMkFDIC8qIFdlYkdQVVN3YXBDaGFpbi5jcHAgKi8sCiAJCQkJRDBEQTBCRTQy
MTc5MzBFMjAwN0ZFMkFDIC8qIFdlYkdQVVN3YXBDaGFpbi5oICovLAogCQkJCUQwREEwQkU2MjE3
OTMwRTIwMDdGRTJBQyAvKiBXZWJHUFVTd2FwQ2hhaW4uaWRsICovLAorCQkJCUQwRUFDRjg1MjE5
M0IwMkUwMDBGQTc1QyAvKiBXZWJHUFVUZXh0dXJlLmNwcCAqLywKKwkJCQlEMEVBQ0Y4NDIxOTNC
MDJFMDAwRkE3NUMgLyogV2ViR1BVVGV4dHVyZS5oICovLAorCQkJCUQwRUFDRjg2MjE5M0IwMkUw
MDBGQTc1QyAvKiBXZWJHUFVUZXh0dXJlLmlkbCAqLywKKwkJCQlEMEVBQ0ZBRDIxOUUzMEZEMDAw
RkE3NUMgLyogV2ViR1BVVGV4dHVyZUZvcm1hdEVudW0uaCAqLywKKwkJCQlEMEVBQ0ZBRTIxOUUz
MEZEMDAwRkE3NUMgLyogV2ViR1BVVGV4dHVyZUZvcm1hdEVudW0uaWRsICovLAorCQkJCUQwRUFD
Rjg4MjE5M0VFNEUwMDBGQTc1QyAvKiBXZWJHUFVUZXh0dXJlVmlldy5jcHAgKi8sCisJCQkJRDBF
QUNGODcyMTkzRUU0RTAwMEZBNzVDIC8qIFdlYkdQVVRleHR1cmVWaWV3LmggKi8sCisJCQkJRDBF
QUNGODkyMTkzRUU0RTAwMEZBNzVDIC8qIFdlYkdQVVRleHR1cmVWaWV3LmlkbCAqLywKIAkJCSk7
CiAJCQlwYXRoID0gd2ViZ3B1OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI1NjA1
LDYgKzI1NjI5LDggQEAKIAkJCQlEMEM0MTlGQjIxODQwRjZDMDA5RUMxREUgLyogR1BVUmVuZGVy
UGlwZWxpbmVNZXRhbC5tbSAqLywKIAkJCQlEMDYwRDg4OTIxODI4MEMxMDAzMzkzMTggLyogR1BV
U2hhZGVyTW9kdWxlTWV0YWwubW0gKi8sCiAJCQkJRDA5NzI3QjYyMTg3RjQ0MzAwOTQyRjNBIC8q
IEdQVVN3YXBDaGFpbk1ldGFsLm1tICovLAorCQkJCUQwRUFDRkI0MjE5RTYyQ0IwMDBGQTc1QyAv
KiBHUFVUZXh0dXJlRm9ybWF0RW51bU1ldGFsLm1tICovLAorCQkJCUQwRUFDRjgzMjE5M0FCMzgw
MDBGQTc1QyAvKiBHUFVUZXh0dXJlTWV0YWwubW0gKi8sCiAJCQkpOwogCQkJcGF0aCA9IGNvY29h
OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1dlYkNvcmVCdWlsdGluTmFtZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1dlYkNvcmVCdWlsdGluTmFtZXMuaAppbmRleCBkN2VkYmRlNTQ2MDBmYjYwZWIwZWVj
NWU4ZDE2NDA3YWY2ZWZjYjYxLi5hZWNlMWMzN2IxMjg2MjEyZDExY2RlZTMyZWNjZTk3Mzg5N2Vk
M2U4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlQnVpbHRp
bk5hbWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUJ1aWx0aW5O
YW1lcy5oCkBAIC0xODYsNiArMTg2LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIG1hY3Jv
KFdlYkdQVVNoYWRlclN0YWdlKSBcCiAgICAgbWFjcm8oV2ViR1BVU2hhZGVyTW9kdWxlKSBcCiAg
ICAgbWFjcm8oV2ViR1BVU3dhcENoYWluKSBcCisgICAgbWFjcm8oV2ViR1BVVGV4dHVyZSkgXAor
ICAgIG1hY3JvKFdlYkdQVVRleHR1cmVWaWV3KSBcCiAgICAgbWFjcm8oV2ViTWV0YWxCdWZmZXIp
IFwKICAgICBtYWNybyhXZWJNZXRhbENvbW1hbmRCdWZmZXIpIFwKICAgICBtYWNybyhXZWJNZXRh
bENvbW1hbmRRdWV1ZSkgXApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDM1MWE5MTc2YTdmMTFjOTI5YWU4NzY1YmViMDliZTg4
M2VkMGFjYjUuLjQ3MmQwNGMyMTRjMTQ2ZWIwZGZmMDA5NjI4ODM0MWZlZDEyMDQ0NDYgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwzMiBAQAorMjAxOC0xMS0xNiAgSnVzdGluIEZhbiAgPGp1c3Rpbl9mYW5AYXBw
bGUuY29tPgorCisgICAgICAgIFtXZWJHUFVdIEJlZ2luIGltcGxlbWVudGluZyBXZWJHUFVUZXh0
dXJlLCBXZWJHUFVUZXh0dXJlVmlldywgYW5kIFdlYkdQVVRleHR1cmVGb3JtYXRFbnVtLCBhbmQg
V2ViR1BVU3dhcENoYWluOjpjb25maWd1cmUgdXBncmFkZXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTc5NAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIERpZCBzb21lIHJlZmFjdG9yaW5nIHRvIGJldHRl
ciBzaGFyZSBjb2RlIGFtb25nIHRlc3RzLCBhbmQgYWRkZWQgYmFzaWMgZnVuY3Rpb25hbGl0eSB0
ZXN0IGZvciAKKyAgICAgICAgV2ViR1BVVGV4dHVyZXMgYW5kIFdlYkdQVVRleHR1cmVWaWV3LCB0
byBiZSBmbGVzaGVkIG91dCB3aGVuIHRoZWlyIGRlc2NyaXB0b3Igb2JqZWN0cyBhcmUgaW1wbGVt
ZW50ZWQuIAorCisgICAgICAgICogd2ViZ3B1L2NvbW1hbmQtYnVmZmVycy5odG1sOiBSZWZhY3Rv
cmVkIHRvIHVzZSBiYXNpYy13ZWJncHUtZnVuY3Rpb25zLmpzLgorICAgICAgICAqIHdlYmdwdS9q
cy9iYXNpYy13ZWJncHUtZnVuY3Rpb25zLmpzOiBBZGRlZC4KKyAgICAgICAgKHZlcnRleC5WZXJ0
ZXgudmVydGV4X21haW4pOiBUaGUgYmFzaWMgTVNMIGNvZGUgaGFzIGJlZW4gbW92ZWQgaW50byB0
aGlzIGZpbGUuCisgICAgICAgIChmcmFnbWVudC5mbG9hdDQuZnJhZ21lbnRfbWFpbik6CisgICAg
ICAgIChydW5XZWJHUFVUZXN0cyk6IENyZWF0ZXMgYSBXZWJHUFVSZW5kZXJpbmdDb250ZXh0IG9u
IGEgZGVmYXVsdCBjYW52YXMgYW5kIHJ1bnMgaXRzIHByb3ZpZGVkIGZ1bmN0aW9ucy4KKyAgICAg
ICAgKGFzeW5jLnJ1bldlYkdQVVRlc3RzT25DYW52YXMpOiAKKyAgICAgICAgKGFzeW5jLnNldFVw
Q29udGV4dHMpOiBUZXN0cyBwcm9wZXIgY3JlYXRpb24gb2YgYSBiYXNpYyBXZWJHUFVSZW5kZXJp
bmdDb250ZXh0LgorICAgICAgICAoc2V0VXBNb2R1bGUpOiBDcmVhdGVzIGEgYmFzaWMgV2ViR1BV
U2hhZGVyTW9kdWxlLgorICAgICAgICAoc2V0VXBQaXBlbGluZURlc2NyaXB0b3IpOiBDcmVhdGVz
IGEgYmFzaWMgV2ViR1BVUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yLgorICAgICAgICAoc2V0VXBQ
aXBlbGluZSk6IENyZWF0ZXMgYSBiYXNpYyBXZWJHUFVSZW5kZXJQaXBlbGluZS4KKyAgICAgICAg
KHJlbmRlcik6CisgICAgICAgICogd2ViZ3B1L2pzL3NldC11cC13ZWJncHUtY29udGV4dHMuanM6
IE1vdmVkIGludG8gYmFzaWMtd2ViZ3B1LWZ1bmN0aW9ucy5qcy4KKyAgICAgICAgKiB3ZWJncHUv
cmVuZGVyLXBpcGVsaW5lcy1leHBlY3RlZC50eHQ6CisgICAgICAgICogd2ViZ3B1L3JlbmRlci1w
aXBlbGluZXMuaHRtbDogUmVmYWN0b3JlZCB0byB1c2UgYmFzaWMtd2ViZ3B1LWZ1bmN0aW9ucy5q
cy4KKyAgICAgICAgKiB3ZWJncHUvc2hhZGVyLW1vZHVsZXMuaHRtbDogUmVmYWN0b3JlZCB0byB1
c2UgYmFzaWMtd2ViZ3B1LWZ1bmN0aW9ucy5qcy4KKyAgICAgICAgKiB3ZWJncHUvdGV4dHVyZXMt
dGV4dHVyZXZpZXdzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3RleHR1
cmVzLXRleHR1cmV2aWV3cy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2ViZ3B1LWJh
c2ljcy5odG1sOiBSZWZhY3RvcmVkIHRvIHVzZSBiYXNpYy13ZWJncHUtZnVuY3Rpb25zLmpzLgor
CiAyMDE4LTExLTE0ICBKdXN0aW4gRmFuICA8anVzdGluX2ZhbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgW1dlYkdQVV0gV2ViR1BVQ29tbWFuZEJ1ZmZlciBwcm90b3R5cGUKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmdwdS9jb21tYW5kLWJ1ZmZlcnMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdw
dS9jb21tYW5kLWJ1ZmZlcnMuaHRtbAppbmRleCAwNDk2ZjNjMTM3MTgwNzI4ZTdmMGE4MzAzZDYz
NGNkZWQ2OTU0MGM1Li4yOTc4NjQ0MzZiZDM0MTY3OTM2MDRhMzQxZWU5ZWY4Y2MwZTc3YjJhIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvY29tbWFuZC1idWZmZXJzLmh0bWwKKysrIGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L2NvbW1hbmQtYnVmZmVycy5odG1sCkBAIC0xLDcgKzEsNyBAQAog
PCFET0NUWVBFIGh0bWw+CiA8aHRtbD4KIDxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3NldC11cC13ZWJncHUtY29udGV4
dHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL2Jhc2ljLXdlYmdwdS1mdW5jdGlvbnMu
anMiPjwvc2NyaXB0PgogPHNjcmlwdD4KIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKICAgICB3aW5k
b3cudGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJn
cHUvanMvYmFzaWMtd2ViZ3B1LWZ1bmN0aW9ucy5qcyBiL0xheW91dFRlc3RzL3dlYmdwdS9qcy9i
YXNpYy13ZWJncHUtZnVuY3Rpb25zLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFjNWFhNjQ1NGE0NTY5OGE0MGI4
NDdiNzkyN2EwYjVhY2VmZmMyOGUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvanMvYmFzaWMtd2ViZ3B1LWZ1bmN0aW9ucy5qcwpAQCAtMCwwICsxLDE0MSBAQAorbGV0IHNo
YWRlckNvZGUgPSBgCisjaW5jbHVkZSA8bWV0YWxfc3RkbGliPgorICAgIAordXNpbmcgbmFtZXNw
YWNlIG1ldGFsOworCitzdHJ1Y3QgVmVydGV4Cit7CisgICAgZmxvYXQ0IHBvc2l0aW9uIFtbcG9z
aXRpb25dXTsKK307CisKK3ZlcnRleCBWZXJ0ZXggdmVydGV4X21haW4odWludCB2aWQgW1t2ZXJ0
ZXhfaWRdXSkKK3sKKyAgICBWZXJ0ZXggdjsKKyAgICBzd2l0Y2ggKHZpZCkgeworICAgIGNhc2Ug
MDoKKyAgICAgICAgdi5wb3NpdGlvbiA9IGZsb2F0NCgtLjc1LCAtLjc1LCAwLCAxKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgICAgICB2LnBvc2l0aW9uID0gZmxvYXQ0KC43NSwg
LS43NSwgMCwgMSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAgICAgICAgdi5wb3Np
dGlvbiA9IGZsb2F0NCgwLCAuNzUsIDAsIDEpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICB2LnBvc2l0aW9uID0gZmxvYXQ0KDAsIDAsIDAsIDEpOworICAgIH0KKyAgICBy
ZXR1cm4gdjsKK30KKworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50X21haW4oVmVydGV4IHZlcnRl
eEluIFtbc3RhZ2VfaW5dXSkKK3sKKyAgICByZXR1cm4gZmxvYXQ0KDEuMCwgMC4wLCAwLjAsIDEu
MCk7Cit9CitgCisKK2xldCBjb250ZXh0LCBhZGFwdGVyLCBkZWZhdWx0RGV2aWNlOworCitmdW5j
dGlvbiBydW5XZWJHUFVUZXN0cyh0ZXN0cykgeworICAgIHJ1bldlYkdQVVRlc3RzT25DYW52YXMo
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksIHRlc3RzKTsKK30KKworYXN5bmMgZnVu
Y3Rpb24gcnVuV2ViR1BVVGVzdHNPbkNhbnZhcyhjYW52YXMsIHRlc3RzKSB7CisgICAgdHJ5IHsK
KyAgICAgICAgYXdhaXQgc2V0VXBDb250ZXh0cyhjYW52YXMpOworCisgICAgICAgIGZvciAobGV0
IHRlc3Qgb2YgdGVzdHMpCisgICAgICAgICAgICB0ZXN0KCk7CisKKyAgICAgICAgZGVidWcoIkFs
bCB0ZXN0cyBjb21wbGV0ZS4iKTsKKyAgICB9IGNhdGNoIChlcnJvcikgeworICAgICAgICBjb25z
b2xlLmVycm9yKGVycm9yKTsKKyAgICAgICAgdGVzdEZhaWxlZChgWyR7ZXJyb3J9XTogU2VlIGNv
bnNvbGUhYCk7CisgICAgfQorfQorCithc3luYyBmdW5jdGlvbiBzZXRVcENvbnRleHRzKGNhbnZh
cykgeworICAgIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgid2ViZ3B1Iik7CisgICAgaWYg
KCFjb250ZXh0KQorICAgICAgICB0ZXN0RmFpbGVkKCJDb3VsZCBub3QgY3JlYXRlIFdlYkdQVSBj
b250ZXh0ISIpOworCisgICAgc2hvdWxkQmVEZWZpbmVkKHdpbmRvdy53ZWJncHUpOworICAgIAor
ICAgIC8vIEZJWE1FOiByZXF1ZXN0QWRhcHRlciBzaG91bGQgdGFrZSBhIFdlYkdQVUFkYXB0ZXJE
ZXNjcmlwdG9yLgorICAgIGFkYXB0ZXIgPSBhd2FpdCB3aW5kb3cud2ViZ3B1LnJlcXVlc3RBZGFw
dGVyKHt9KTsKKyAgICBpZiAoIWFkYXB0ZXIpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiQ291bGQg
bm90IGNyZWF0ZSBkZWZhdWx0IFdlYkdQVUFkYXB0ZXIhIikKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIEZJWE1FOiByZXF1ZXN0RGV2aWNlIHNob3VsZCB0YWtlIGEgV2ViR1BVRGV2
aWNlRGVzY3JpcHRvci4KKyAgICBkZWZhdWx0RGV2aWNlID0gYWRhcHRlci5jcmVhdGVEZXZpY2Uo
KTsKKyAgICBpZiAoIWRlZmF1bHREZXZpY2UpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiQ291bGQg
bm90IGNyZWF0ZSBXZWJHUFVEZXZpY2UhIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IFdlYkdQVVRleHR1cmVVc2FnZUVudW0uCisgICAgY29udGV4
dC5jb25maWd1cmUoeyBkZXZpY2U6IGRlZmF1bHREZXZpY2UsIGZvcm1hdDoiQjhHOFI4QThVbm9y
bSIsIHdpZHRoOiBjYW52YXMud2lkdGgsIGhlaWdodDogY2FudmFzLmhlaWdodCB9KTsKK30KKwor
bGV0IHNoYWRlck1vZHVsZSwgdmVydGV4U3RhZ2VEZXNjcmlwdG9yLCBmcmFnbWVudFN0YWdlRGVz
Y3JpcHRvciwgcGlwZWxpbmVEZXNjcmlwdG9yLCByZW5kZXJQaXBlbGluZTsKKworZnVuY3Rpb24g
c2V0VXBNb2R1bGUoKSB7CisgICAgc2hhZGVyTW9kdWxlID0gZGVmYXVsdERldmljZS5jcmVhdGVT
aGFkZXJNb2R1bGUoeyBjb2RlOiBzaGFkZXJDb2RlIH0pOworICAgIGlmICghc2hhZGVyTW9kdWxl
KSB7CisgICAgICAgIHRlc3RGYWlsZWQoIkNvdWxkIG5vdCBjcmVhdGUgV2ViR1BVU2hhZGVyTW9k
dWxlISIpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCitmdW5jdGlvbiBzZXRVcFBpcGVs
aW5lRGVzY3JpcHRvcigpIHsKKyAgICB2ZXJ0ZXhTdGFnZURlc2NyaXB0b3IgPSB7IAorICAgICAg
ICBtb2R1bGU6IHNoYWRlck1vZHVsZSwgCisgICAgICAgIHN0YWdlOiBXZWJHUFVTaGFkZXJTdGFn
ZS5WRVJURVgsIAorICAgICAgICBlbnRyeVBvaW50OiAidmVydGV4X21haW4iIAorICAgIH07CisK
KyAgICBmcmFnbWVudFN0YWdlRGVzY3JpcHRvciA9IHsKKyAgICAgICAgbW9kdWxlOiBzaGFkZXJN
b2R1bGUsCisgICAgICAgIHN0YWdlOiBXZWJHUFVTaGFkZXJTdGFnZS5GUkFHTUVOVCwKKyAgICAg
ICAgZW50cnlQb2ludDogImZyYWdtZW50X21haW4iCisgICAgfTsKKworICAgIHBpcGVsaW5lRGVz
Y3JpcHRvciA9IHsKKyAgICAgICAgc3RhZ2VzOiBbdmVydGV4U3RhZ2VEZXNjcmlwdG9yLCBmcmFn
bWVudFN0YWdlRGVzY3JpcHRvcl0sCisgICAgICAgIHByaW1pdGl2ZVRvcG9sb2d5OiAidHJpYW5n
bGVMaXN0IgorICAgIH07Cit9CisKK2Z1bmN0aW9uIHNldFVwUGlwZWxpbmUoKSB7CisgICAgc2V0
VXBNb2R1bGUoKTsKKyAgICBzZXRVcFBpcGVsaW5lRGVzY3JpcHRvcigpOworCisgICAgcmVuZGVy
UGlwZWxpbmUgPSBkZWZhdWx0RGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHBpcGVsaW5lRGVz
Y3JpcHRvcik7CisgICAgaWYgKCFyZW5kZXJQaXBlbGluZSkgeworICAgICAgICB0ZXN0RmFpbGVk
KCJDb3VsZCBub3QgY3JlYXRlIFdlYkdQVVJlbmRlclBpcGVsaW5lISIpOworICAgICAgICByZXR1
cm47CisgICAgfQorfQorCitmdW5jdGlvbiByZW5kZXIoKSB7CisgICAgbGV0IGNvbW1hbmRCdWZm
ZXIgPSBkZWZhdWx0RGV2aWNlLmNyZWF0ZUNvbW1hbmRCdWZmZXIoKTsKKyAgICBpZiAoIWNvbW1h
bmRCdWZmZXIpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiQ291bGQgbm90IGNyZWF0ZSBXZWJHUFVD
b21tYW5kQnVmZmVyISIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbGV0IHRleHR1
cmUgPSBjb250ZXh0LmdldE5leHRUZXh0dXJlKCk7CisgICAgaWYgKCF0ZXh0dXJlKSB7CisgICAg
ICAgIHRlc3RGYWlsZWQoIkNvdWxkIG5vdCBnZXQgbmV4dCBXZWJHUFVUZXh0dXJlISIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgbGV0IHRleHR1cmVWaWV3ID0gdGV4dHVyZS5jcmVh
dGVEZWZhdWx0VGV4dHVyZVZpZXcoKTsKKyAgICBpZiAoIXRleHR1cmVWaWV3KSB7CisgICAgICAg
IHRlc3RGYWlsZWQoIkNvdWxkIG5vdCBjcmVhdGUgV2ViR1BVVGV4dHVyZVZpZXchIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogUmVzdCBvZiByZW5kZXJpbmcgY29t
bWFuZHMgdG8gZm9sbG93LgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmdwdS9qcy9zZXQtdXAtd2ViZ3B1LWNvbnRleHRzLmpzIGIvTGF5
b3V0VGVzdHMvd2ViZ3B1L2pzL3NldC11cC13ZWJncHUtY29udGV4dHMuanMKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDE4MzA1NjA0ZGFlZTNmYmE1NzVjM2I0OThmZDhlOGJjY2IyZDMw
YzMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L2pzL3NldC11cC13ZWJncHUtY29udGV4dHMuanMKKysrIC9kZXYvbnVsbApA
QCAtMSw0NiArMCwwIEBACi0ndXNlIHN0cmljdCc7Ci0KLWxldCBjb250ZXh0LCBhZGFwdGVyLCBk
ZWZhdWx0RGV2aWNlOwotCi1mdW5jdGlvbiBydW5XZWJHUFVUZXN0cyh0ZXN0cykgewotICAgIHJ1
bldlYkdQVVRlc3RzT25DYW52YXMoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksIHRl
c3RzKTsKLX0KLQotYXN5bmMgZnVuY3Rpb24gcnVuV2ViR1BVVGVzdHNPbkNhbnZhcyhjYW52YXMs
IHRlc3RzKSB7Ci0gICAgdHJ5IHsKLSAgICAgICAgYXdhaXQgc2V0VXBDb250ZXh0cyhjYW52YXMp
OwotCi0gICAgICAgIGZvciAobGV0IHRlc3Qgb2YgdGVzdHMpCi0gICAgICAgICAgICB0ZXN0KCk7
Ci0KLSAgICAgICAgZGVidWcoIkFsbCB0ZXN0cyBjb21wbGV0ZS4iKTsKLSAgICB9IGNhdGNoIChl
cnJvcikgewotICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTsKLSAgICAgICAgdGVzdEZhaWxl
ZChgWyR7ZXJyb3J9XTogU2VlIGNvbnNvbGUhYCk7Ci0gICAgfQotfQotCi1hc3luYyBmdW5jdGlv
biBzZXRVcENvbnRleHRzKGNhbnZhcykgewotICAgIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4
dCgid2ViZ3B1Iik7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICB0ZXN0RmFpbGVkKCJDb3Vs
ZCBub3QgY3JlYXRlIFdlYkdQVSBjb250ZXh0ISIpOwotCi0gICAgc2hvdWxkQmVEZWZpbmVkKHdp
bmRvdy53ZWJncHUpOwotICAgIAotICAgIC8vIEZJWE1FOiByZXF1ZXN0QWRhcHRlciBzaG91bGQg
dGFrZSBhIFdlYkdQVUFkYXB0ZXJEZXNjcmlwdG9yLgotICAgIGFkYXB0ZXIgPSBhd2FpdCB3aW5k
b3cud2ViZ3B1LnJlcXVlc3RBZGFwdGVyKHt9KTsKLSAgICBpZiAoIWFkYXB0ZXIpIHsKLSAgICAg
ICAgdGVzdEZhaWxlZCgiQ291bGQgbm90IGNyZWF0ZSBkZWZhdWx0IFdlYkdQVUFkYXB0ZXIhIikK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiByZXF1ZXN0RGV2aWNlIHNo
b3VsZCB0YWtlIGEgV2ViR1BVRGV2aWNlRGVzY3JpcHRvci4KLSAgICBkZWZhdWx0RGV2aWNlID0g
YWRhcHRlci5jcmVhdGVEZXZpY2UoKTsKLSAgICBpZiAoIWRlZmF1bHREZXZpY2UpIHsKLSAgICAg
ICAgdGVzdEZhaWxlZCgiQ291bGQgbm90IGNyZWF0ZSBXZWJHUFVEZXZpY2UhIik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogRGVmYXVsdCB0byAiQjhHOFI4QThVbm9y
bSIgZm9ybWF0IGZvciBub3cuCi0gICAgY29udGV4dC5jb25maWd1cmUoeyBkZXZpY2U6IGRlZmF1
bHREZXZpY2UsIHdpZHRoOiBjYW52YXMud2lkdGgsIGhlaWdodDogY2FudmFzLmhlaWdodCB9KTsK
LX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJncHUvcmVuZGVyLXBpcGVsaW5lcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUv
cmVuZGVyLXBpcGVsaW5lcy1leHBlY3RlZC50eHQKaW5kZXggYzI1YjQ3ZjlkZjVjMjU2ZWNjOWQy
YTk1YjY2ZTBjNTZmMzkwNjdmNi4uYjZkODZiMGFjYWFlMjZlZDVmOGFkYjc1ODU3Y2RmODg5ZTYz
NjRmNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3JlbmRlci1waXBlbGluZXMtZXhw
ZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS9yZW5kZXItcGlwZWxpbmVzLWV4cGVj
dGVkLnR4dApAQCAtMSw1ICsxLDQgQEAKIFBBU1MgW29iamVjdCBXZWJHUFVdIGlzIGRlZmluZWQu
Ci1QQVNTIFN1Y2Nlc3NmdWxseSBjcmVhdGVkIFdlYkdQVVJlbmRlclBpcGVsaW5lLgogUEFTUyBX
ZWJHUFVSZW5kZXJQaXBlbGluZSB3aXRoIGludmFsaWQgV2ViR1BVUmVuZGVyUGlwZWxpbmVEZXNj
cmlwdG9yIHdhcyBub3QgY3JlYXRlZC4KIFBBU1MgV2ViR1BVUmVuZGVyUGlwZWxpbmUgd2l0aCBp
bnZhbGlkIHNoYWRlciBtb2R1bGUgd2FzIG5vdCBjcmVhdGVkLgogUEFTUyBXZWJHUFVSZW5kZXJQ
aXBlbGluZSB3aXRoIGludmFsaWQgdmVydGV4IHNoYWRlciBzdGFnZSB3YXMgbm90IGNyZWF0ZWQu
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvcmVuZGVyLXBpcGVsaW5lcy5odG1sIGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3JlbmRlci1waXBlbGluZXMuaHRtbAppbmRleCA4NWQ0YzBhM2Nj
NjQ5YmM0MDM2NDg2ZmFmZjQ1YmE2MGEzNmI0Mzg4Li5hM2I5MjllY2Q4NzVjZDBhYTUzNmQ3ZDFi
NTMwZjE1MWJkNjcwOWNiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvcmVuZGVyLXBp
cGVsaW5lcy5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS9yZW5kZXItcGlwZWxpbmVzLmh0
bWwKQEAgLTEsODQgKzEsMTEgQEAKIDwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8c2NyaXB0IHNy
Yz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJq
cy9zZXQtdXAtd2ViZ3B1LWNvbnRleHRzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgaWQ9ImxpYnJh
cnkiIHR5cGU9Ingtc2hhZGVyL3gtbWV0YWwiPgotICAgICNpbmNsdWRlIDxtZXRhbF9zdGRsaWI+
Ci0gICAgCi0gICAgdXNpbmcgbmFtZXNwYWNlIG1ldGFsOwotICAgIAotICAgIHN0cnVjdCBWZXJ0
ZXgKLSAgICB7Ci0gICAgICAgIGZsb2F0NCBwb3NpdGlvbiBbW3Bvc2l0aW9uXV07Ci0gICAgfTsK
LSAgICAKLSAgICB2ZXJ0ZXggVmVydGV4IHZlcnRleF9tYWluKHVpbnQgdmlkIFtbdmVydGV4X2lk
XV0pCi0gICAgewotICAgICAgICBWZXJ0ZXggdjsKLSAgICAgICAgc3dpdGNoICh2aWQpIHsKLSAg
ICAgICAgY2FzZSAwOgotICAgICAgICAgICAgdi5wb3NpdGlvbiA9IGZsb2F0NCgtLjc1LCAtLjc1
LCAwLCAxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAg
ICB2LnBvc2l0aW9uID0gZmxvYXQ0KC43NSwgLS43NSwgMCwgMSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgdi5wb3NpdGlvbiA9IGZsb2F0NCgwLCAu
NzUsIDAsIDEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICB2LnBvc2l0aW9uID0gZmxvYXQ0KDAsIDAsIDAsIDEpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiB2OwotICAgIH0KLSAgICAKLSAgICBmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRfbWFp
bihWZXJ0ZXggdmVydGV4SW4gW1tzdGFnZV9pbl1dKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZs
b2F0NCgxLjAsIDAuMCwgMC4wLCAxLjApOwotICAgIH0KLTwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
ImpzL2Jhc2ljLXdlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgogPHNjcmlwdD4KLSd1c2Ug
c3RyaWN0JzsKLQogaWYgKHdpbmRvdy50ZXN0UnVubmVyKQogICAgIHdpbmRvdy50ZXN0UnVubmVy
LmR1bXBBc1RleHQoKTsKIAotbGV0IHNoYWRlckRlc2NyaXB0b3IsIHNoYWRlck1vZHVsZSwgdmVy
dGV4U3RhZ2VEZXNjcmlwdG9yLCBmcmFnbWVudFN0YWdlRGVzY3JpcHRvcjsKLQotZnVuY3Rpb24g
c2V0VXBQaXBlbGluZSgpIHsKLSAgICBzaGFkZXJEZXNjcmlwdG9yID0gewotICAgICAgICBjb2Rl
OiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibGlicmFyeSIpLnRleHQKLSAgICB9OwotCi0gICAg
c2hhZGVyTW9kdWxlID0gZGVmYXVsdERldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoc2hhZGVyRGVz
Y3JpcHRvcik7Ci0gICAgaWYgKCFzaGFkZXJNb2R1bGUpIHsKLSAgICAgICAgdGVzdEZhaWxlZCgi
Q291bGQgbm90IGNyZWF0ZSBXZWJHUFVTaGFkZXJNb2R1bGUhIik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICB2ZXJ0ZXhTdGFnZURlc2NyaXB0b3IgPSB7IAotICAgICAgICBtb2R1bGU6
IHNoYWRlck1vZHVsZSwgCi0gICAgICAgIHN0YWdlOiBXZWJHUFVTaGFkZXJTdGFnZS5WRVJURVgs
IAotICAgICAgICBlbnRyeVBvaW50OiAidmVydGV4X21haW4iIAotICAgIH07Ci0KLSAgICBmcmFn
bWVudFN0YWdlRGVzY3JpcHRvciA9IHsKLSAgICAgICAgbW9kdWxlOiBzaGFkZXJNb2R1bGUsCi0g
ICAgICAgIHN0YWdlOiBXZWJHUFVTaGFkZXJTdGFnZS5GUkFHTUVOVCwKLSAgICAgICAgZW50cnlQ
b2ludDogImZyYWdtZW50X21haW4iCi0gICAgfTsKLQotICAgIGxldCBwaXBlbGluZURlc2NyaXB0
b3IgPSB7Ci0gICAgICAgIHN0YWdlczogW3ZlcnRleFN0YWdlRGVzY3JpcHRvciwgZnJhZ21lbnRT
dGFnZURlc2NyaXB0b3JdLAotICAgICAgICBwcmltaXRpdmVUb3BvbG9neTogInRyaWFuZ2xlTGlz
dCIKLSAgICB9OwotCi0gICAgbGV0IHJlbmRlclBpcGVsaW5lID0gZGVmYXVsdERldmljZS5jcmVh
dGVSZW5kZXJQaXBlbGluZShwaXBlbGluZURlc2NyaXB0b3IpOwotICAgIGlmIChyZW5kZXJQaXBl
bGluZSkKLSAgICAgICAgdGVzdFBhc3NlZCgiU3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgV2ViR1BVUmVu
ZGVyUGlwZWxpbmUuIikKLSAgICBlbHNlCi0gICAgICAgIHRlc3RGYWlsZWQoIkNvdWxkIG5vdCBj
cmVhdGUgV2ViR1BVUmVuZGVyUGlwZWxpbmUhIik7Ci19Ci0KIGZ1bmN0aW9uIGNoZWNrQmFkUmVu
ZGVyUGlwZWxpbmUoZGVzY3JpcHRvciwgdGVzdFN1YmplY3ROYW1lKSB7CiAgICAgbGV0IHBpcGVs
aW5lID0gZGVmYXVsdERldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShkZXNjcmlwdG9yKTsKIApk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3NoYWRlci1tb2R1bGVzLmh0bWwgYi9MYXlv
dXRUZXN0cy93ZWJncHUvc2hhZGVyLW1vZHVsZXMuaHRtbAppbmRleCAyNjdjODAyNzBiMmNlYWZi
NDViZjU3YmVkZjA3ZDVjZDMzZWRmMWYzLi5kOGNmMDI4YmU2ZjAxNjc5NTgwY2MwOTYyOTMxYjc4
YTVmOWVhMTJkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvc2hhZGVyLW1vZHVsZXMu
aHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvc2hhZGVyLW1vZHVsZXMuaHRtbApAQCAtMSw0
MSArMSw3IEBACiA8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPHNjcmlwdCBzcmM9Ii4uL3Jlc291
cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMvc2V0LXVwLXdl
YmdwdS1jb250ZXh0cy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IGlkPSJsaWJyYXJ5X2Z1bGwiIHR5
cGU9Ingtc2hhZGVyL3gtbWV0YWwiPgotICAgICNpbmNsdWRlIDxtZXRhbF9zdGRsaWI+Ci0gICAg
Ci0gICAgdXNpbmcgbmFtZXNwYWNlIG1ldGFsOwotICAgIAotICAgIHN0cnVjdCBWZXJ0ZXgKLSAg
ICB7Ci0gICAgICAgIGZsb2F0NCBwb3NpdGlvbiBbW3Bvc2l0aW9uXV07Ci0gICAgfTsKLSAgICAK
LSAgICB2ZXJ0ZXggVmVydGV4IHZlcnRleF9tYWluKHVpbnQgdmlkIFtbdmVydGV4X2lkXV0pCi0g
ICAgewotICAgICAgICBWZXJ0ZXggdjsKLSAgICAgICAgc3dpdGNoICh2aWQpIHsKLSAgICAgICAg
Y2FzZSAwOgotICAgICAgICAgICAgdi5wb3NpdGlvbiA9IGZsb2F0NCgtLjc1LCAtLjc1LCAwLCAx
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICB2LnBv
c2l0aW9uID0gZmxvYXQ0KC43NSwgLS43NSwgMCwgMSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSAyOgotICAgICAgICAgICAgdi5wb3NpdGlvbiA9IGZsb2F0NCgwLCAuNzUsIDAs
IDEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB2
LnBvc2l0aW9uID0gZmxvYXQ0KDAsIDAsIDAsIDEpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biB2OwotICAgIH0KLSAgICAKLSAgICBmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRfbWFpbihWZXJ0
ZXggdmVydGV4SW4gW1tzdGFnZV9pbl1dKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZsb2F0NCgx
LjAsIDAuMCwgMC4wLCAxLjApOwotICAgIH0KLTwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL2Jh
c2ljLXdlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBpZD0ibGlicmFyeV9p
bmNvbXBsZXRlIiB0eXBlPSJ4LXNoYWRlci94LW1ldGFsIj4KICAgICAjaW5jbHVkZSA8bWV0YWxf
c3RkbGliPgogICAgIApAQCAtNjYsOCArMzIsNiBAQAogICAgIH0KIDwvc2NyaXB0PgogPHNjcmlw
dD4KLSd1c2Ugc3RyaWN0JzsKLQogaWYgKHdpbmRvdy50ZXN0UnVubmVyKQogICAgIHdpbmRvdy50
ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKIApAQCAtOTIsNyArNTYsNyBAQCBmdW5jdGlvbiBzZXRV
cFNoYWRlcnMoKSB7CiAgICAgICAgIHRlc3RGYWlsZWQoIkluY29tcGxldGUgc2hhZGVyIGNvZGUg
Y3JlYXRlZCBhIHZhbGlkIG1vZHVsZSEiKTsKICAgICAKICAgICBsZXQgc2hhZGVyRGVzY3JpcHRv
cjIgPSB7Ci0gICAgICAgIGNvZGUgOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibGlicmFyeV9m
dWxsIikudGV4dAorICAgICAgICBjb2RlIDogc2hhZGVyQ29kZQogICAgIH07CiAKICAgICBzaGFk
ZXJNb2R1bGUgPSBkZWZhdWx0RGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZShzaGFkZXJEZXNjcmlw
dG9yMik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvdGV4dHVyZXMtdGV4dHVyZXZp
ZXdzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS90ZXh0dXJlcy10ZXh0dXJldmll
d3MtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYyMDNjYzE4MWJkOGUzODYyYWZhMmRkNzhkNTUw
OTY5NDU3MzE2YTcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvdGV4dHVy
ZXMtdGV4dHVyZXZpZXdzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDggQEAKK1BBU1MgW29iamVj
dCBXZWJHUFVdIGlzIGRlZmluZWQuCitQQVNTIEFjcXVpcmVkIG5leHQgV2ViR1BVVGV4dHVyZSBm
cm9tIFdlYkdQVVJlbmRlcmluZ0NvbnRleHQuCitQQVNTIENyZWF0ZWQgZGVmYXVsdCBXZWJHUFVU
ZXh0dXJlVmlldyBmcm9tIGEgV2ViR1BVVGV4dHVyZQorQWxsIHRlc3RzIGNvbXBsZXRlLgorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmdwdS90ZXh0dXJlcy10ZXh0dXJldmlld3MuaHRtbCBiL0xheW91
dFRlc3RzL3dlYmdwdS90ZXh0dXJlcy10ZXh0dXJldmlld3MuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZGRi
NGFjOTY0MDgzYjIwNjUzYWQxZjdkZDkwOWE1NDBmZDNkN2IxCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3RleHR1cmVzLXRleHR1cmV2aWV3cy5odG1sCkBAIC0wLDAgKzEs
MzQgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy9iYXNpYy13ZWJncHUt
ZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitpZiAod2luZG93LnRlc3RSdW5uZXIp
CisgICAgd2luZG93LnRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworCitmdW5jdGlvbiBzZXRVcE5l
eHRUZXh0dXJlVmlldygpIHsKKyAgICBsZXQgdGV4dHVyZSA9IGNvbnRleHQuZ2V0TmV4dFRleHR1
cmUoKTsKKyAgICBpZiAodGV4dHVyZSkKKyAgICAgICAgdGVzdFBhc3NlZCgiQWNxdWlyZWQgbmV4
dCBXZWJHUFVUZXh0dXJlIGZyb20gV2ViR1BVUmVuZGVyaW5nQ29udGV4dC4iKTsKKyAgICBlbHNl
IHsKKyAgICAgICAgdGVzdEZhaWxlZCgiQ291bGQgbm90IGdldCBuZXh0IFdlYkdQVVRleHR1cmUg
ZnJvbSBXZWJHUFVSZW5kZXJpbmdDb250ZXh0ISIpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgbGV0IHRleHR1cmVWaWV3ID0gdGV4dHVyZS5jcmVhdGVEZWZhdWx0VGV4dHVyZVZpZXco
KTsKKyAgICBpZiAodGV4dHVyZVZpZXcpIAorICAgICAgICB0ZXN0UGFzc2VkKCJDcmVhdGVkIGRl
ZmF1bHQgV2ViR1BVVGV4dHVyZVZpZXcgZnJvbSBhIFdlYkdQVVRleHR1cmUiKTsKKyAgICBlbHNl
IHsKKyAgICAgICAgdGVzdEZhaWxlZCgiQ291bGQgbm90IGNyZWF0ZSBkZWZhdWx0IFdlYkdQVVRl
eHR1cmVWaWV3ISIpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCisvLyBGSVhNRTogQWRk
IHRlc3RzIGZvciBkZXZpY2UuY3JlYXRlVGV4dHVyZSwgV2ViR1BVVGV4dHVyZURlc2NyaXB0b3Is
IGFuZCBXZWJHUFVUZXh0dXJlVmlld0Rlc2NyaXB0b3IuCisKK3J1bldlYkdQVVRlc3RzKFtzZXRV
cE5leHRUZXh0dXJlVmlld10pOworCitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+
Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dlYmdwdS1iYXNpY3MuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93ZWJn
cHUtYmFzaWNzLmh0bWwKaW5kZXggZWNiYTM2MWZlOTZlMThhNmJmMjc1ZTdjOTRjMjI0ZWMxZTRh
YWNkNi4uZDU0N2M4MjljNjMxMTQzMDZjZjJkMzdjODU4Zjk3MmUxMjAxMmEyNyAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dlYmdwdS1iYXNpY3MuaHRtbAorKysgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2ViZ3B1LWJhc2ljcy5odG1sCkBAIC0xLDEwMyArMSwxMSBAQAogPCFET0NUWVBF
IGh0bWw+CiA8aHRtbD4KIDxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3NldC11cC13ZWJncHUtY29udGV4dHMuanMiPjwv
c2NyaXB0PgotPHNjcmlwdCBpZD0ibGlicmFyeSIgdHlwZT0ieC1zaGFkZXIveC1tZXRhbCI+Ci0g
ICAgI2luY2x1ZGUgPG1ldGFsX3N0ZGxpYj4KLSAgICAKLSAgICB1c2luZyBuYW1lc3BhY2UgbWV0
YWw7Ci0gICAgCi0gICAgc3RydWN0IFZlcnRleAotICAgIHsKLSAgICAgICAgZmxvYXQ0IHBvc2l0
aW9uIFtbcG9zaXRpb25dXTsKLSAgICB9OwotICAgIAotICAgIHZlcnRleCBWZXJ0ZXggdmVydGV4
X21haW4odWludCB2aWQgW1t2ZXJ0ZXhfaWRdXSkKLSAgICB7Ci0gICAgICAgIFZlcnRleCB2Owot
ICAgICAgICBzd2l0Y2ggKHZpZCkgewotICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICB2LnBv
c2l0aW9uID0gZmxvYXQ0KC0uNzUsIC0uNzUsIDAsIDEpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIHYucG9zaXRpb24gPSBmbG9hdDQoLjc1LCAtLjc1
LCAwLCAxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAg
ICB2LnBvc2l0aW9uID0gZmxvYXQ0KDAsIC43NSwgMCwgMSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHYucG9zaXRpb24gPSBmbG9hdDQoMCwgMCwg
MCwgMSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHY7Ci0gICAgfQotICAgIAotICAgIGZy
YWdtZW50IGZsb2F0NCBmcmFnbWVudF9tYWluKFZlcnRleCB2ZXJ0ZXhJbiBbW3N0YWdlX2luXV0p
Ci0gICAgewotICAgICAgICByZXR1cm4gZmxvYXQ0KDEuMCwgMC4wLCAwLjAsIDEuMCk7Ci0gICAg
fQotPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ianMvYmFzaWMtd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+
PC9zY3JpcHQ+CiA8c2NyaXB0PgotJ3VzZSBzdHJpY3QnOwotCiBpZiAod2luZG93LnRlc3RSdW5u
ZXIpCiAgICAgd2luZG93LnRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOwogCi1sZXQgcmVuZGVyUGlw
ZWxpbmU7Ci0KLWZ1bmN0aW9uIHNldFVwUGlwZWxpbmUoKSB7Ci0gICAgbGV0IHNoYWRlckRlc2Ny
aXB0b3IgPSB7Ci0gICAgICAgIGNvZGU6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsaWJyYXJ5
IikudGV4dAotICAgIH07Ci0gICAgbGV0IHNoYWRlck1vZHVsZSA9IGRlZmF1bHREZXZpY2UuY3Jl
YXRlU2hhZGVyTW9kdWxlKHNoYWRlckRlc2NyaXB0b3IpOwotICAgIGlmICghc2hhZGVyTW9kdWxl
KSB7Ci0gICAgICAgIHRlc3RGYWlsZWQoIkNvdWxkIG5vdCBjcmVhdGUgV2ViR1BVU2hhZGVyTW9k
dWxlISIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbGV0IHZlcnRleFN0YWdlRGVz
Y3JpcHRvciA9IHsgCi0gICAgICAgIG1vZHVsZTogc2hhZGVyTW9kdWxlLCAKLSAgICAgICAgc3Rh
Z2U6IFdlYkdQVVNoYWRlclN0YWdlLlZFUlRFWCwgCi0gICAgICAgIGVudHJ5UG9pbnQ6ICJ2ZXJ0
ZXhfbWFpbiIgCi0gICAgfTsKLQotICAgIGxldCBmcmFnbWVudFN0YWdlRGVzY3JpcHRvciA9IHsK
LSAgICAgICAgbW9kdWxlOiBzaGFkZXJNb2R1bGUsCi0gICAgICAgIHN0YWdlOiBXZWJHUFVTaGFk
ZXJTdGFnZS5GUkFHTUVOVCwKLSAgICAgICAgZW50cnlQb2ludDogImZyYWdtZW50X21haW4iCi0g
ICAgfTsKLQotICAgIGlmICghdmVydGV4U3RhZ2VEZXNjcmlwdG9yIHx8ICFmcmFnbWVudFN0YWdl
RGVzY3JpcHRvcikgewotICAgICAgICB0ZXN0RmFpbGVkKCJDb3VsZCBub3QgY3JlYXRlIFdlYkdQ
VVBpcGVsaW5lU3RhZ2VEZXNjcmlwdG9yISIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgbGV0IHBpcGVsaW5lRGVzY3JpcHRvciA9IHsKLSAgICAgICAgc3RhZ2VzOiBbdmVydGV4U3Rh
Z2VEZXNjcmlwdG9yLCBmcmFnbWVudFN0YWdlRGVzY3JpcHRvcl0sCi0gICAgICAgIHByaW1pdGl2
ZVRvcG9sb2d5OiAidHJpYW5nbGVMaXN0IgotICAgIH07Ci0KLSAgICBpZiAoIXBpcGVsaW5lRGVz
Y3JpcHRvcikgewotICAgICAgICB0ZXN0RmFpbGVkKCJDb3VsZCBub3QgY3JlYXRlIFdlYkdQVVJl
bmRlclBpcGVsaW5lRGVzY3JpcHRvciEiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IHJlbmRlclBpcGVsaW5lID0gZGVmYXVsdERldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShwaXBl
bGluZURlc2NyaXB0b3IpOwotICAgIGlmICghcmVuZGVyUGlwZWxpbmUpIHsKLSAgICAgICAgdGVz
dEZhaWxlZCgiQ291bGQgbm90IGNyZWF0ZSBXZWJHUFVSZW5kZXJQaXBlbGluZSEiKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLX0KLQotZnVuY3Rpb24gcmVuZGVyKCkgewotICAgIGxldCBjb21t
YW5kQnVmZmVyID0gZGVmYXVsdERldmljZS5jcmVhdGVDb21tYW5kQnVmZmVyKCk7Ci0gICAgaWYg
KCFjb21tYW5kQnVmZmVyKSB7Ci0gICAgICAgIHRlc3RGYWlsZWQoIkNvdWxkIG5vdCBjcmVhdGUg
V2ViR1BVQ29tbWFuZEJ1ZmZlciEiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8v
IEZJWE1FOiBNb3JlIGNvbW1hbmRzIHRvIGZvbGxvdyBhcyB0aGV5IGFyZSBpbXBsZW1lbnRlZC4K
LX0KLQogcnVuV2ViR1BVVGVzdHMoW3NldFVwUGlwZWxpbmUsIHJlbmRlcl0pOwogCiBzdWNjZXNz
ZnVsbHlQYXJzZWQgPSB0cnVlOwo=
</data>
<flag name="review"
          id="372311"
          type_id="1"
          status="+"
          setter="dino"
    />
    <flag name="commit-queue"
          id="372713"
          type_id="3"
          status="-"
          setter="justin_fan"
    />
          </attachment>
      

    </bug>

</bugzilla>