<?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>237870</bug_id>
          
          <creation_ts>2022-03-14 20:28:20 -0700</creation_ts>
          <short_desc>[WebGPU] Implement first draft of buffer mapping according to the spec</short_desc>
          <delta_ts>2022-03-16 14:50:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          <dependson>237869</dependson>
          <blocked>237583</blocked>
    
    <blocked>237871</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>dino</cc>
    
    <cc>djg</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1851130</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-14 20:28:20 -0700</bug_when>
    <thetext>.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851131</commentid>
    <comment_count>1</comment_count>
      <attachid>454657</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-14 20:32:45 -0700</bug_when>
    <thetext>Created attachment 454657
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851141</commentid>
    <comment_count>2</comment_count>
      <attachid>454657</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-14 21:36:36 -0700</bug_when>
    <thetext>Comment on attachment 454657
Patch

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

&gt; Source/WebGPU/WebGPU/Buffer.mm:352
&gt; +    if (validateUnmap()) {

if (!validateUnmap())</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851151</commentid>
    <comment_count>3</comment_count>
      <attachid>454663</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-14 22:04:32 -0700</bug_when>
    <thetext>Created attachment 454663
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851770</commentid>
    <comment_count>4</comment_count>
      <attachid>454663</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-03-16 06:43:04 -0700</bug_when>
    <thetext>Comment on attachment 454663
Patch

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

some nits

&gt; Source/WebGPU/WebGPU/Buffer.h:44
&gt; +    using MappingRange = std::pair&lt;size_t, size_t&gt;;

Is there a benefit to using pair instead of real struct? You take a hit with the cumbersomeness of make_pair, requiring static casts

&gt; Source/WebGPU/WebGPU/Buffer.h:85
&gt; +    size_t m_size { 0 }; // &quot;The length of the GPUBuffer allocation in bytes.&quot;

if some of these never change, you could mark them as const and not have the initialiser..

&gt; Source/WebGPU/WebGPU/Buffer.mm:43
&gt; +    // FIXME: &quot;If any of the bits of descriptorâs usage arenât present in this deviceâs [[allowed buffer usages]] return false.&quot;

non-latin chars in comment?

&gt; Source/WebGPU/WebGPU/Buffer.mm:77
&gt; +    if (descriptor.mappedAtCreation &amp;&amp; isNotMultipleOfPowerOfTwo(descriptor.size, 4))

typically I&apos;d expect 
descriptor.size is a multiple of 4.
  descriptor.size % 4 == 0

E.g. in this case I&apos;d expect
descriptor.mappedAtCreation &amp;&amp; (descriptor.size % 4) != 0

I couldn&apos;t understand that function immediately isNotMultipleOfPowerOfTwo, read it as &quot;is not multiple power of two x, y&quot;.

&gt; Source/WebGPU/WebGPU/Buffer.mm:114
&gt; +    buffer.label = [NSString stringWithCString:descriptor.label encoding:NSUTF8StringEncoding];

maybe descriptor.label == nullptr is fixed up in the latter commit?

&gt; Source/WebGPU/WebGPU/Buffer.mm:132
&gt; +        return Buffer::create(buffer, descriptor.size, descriptor.usage, Buffer::State::MappedAtCreation, std::make_pair(static_cast&lt;size_t&gt;(0), descriptor.size), *this);

std::make_pair could be just {0, descriptor.size} if your MappingRange would be normal struct.

&gt; Source/WebGPU/WebGPU/Buffer.mm:186
&gt; +    if (isNotMultipleOfPowerOfTwo(offset, 8))

here you check offset and 8, maybe intended is something else.
(I don&apos;t understand the isNotMultipleOfPowerOfTwo func)

&gt; Source/WebGPU/WebGPU/Buffer.mm:195
&gt; +    if (offset + rangeSize &gt; m_mappingRange.second)

could move this to a variable, so then when the variable is declared checked arithmetic, you get the checked value down below in line 199

&gt; Source/WebGPU/WebGPU/Buffer.mm:213
&gt; +        rangeSize = std::max(static_cast&lt;size_t&gt;(0), m_size - offset);

I&apos;m terrible at these, but:
 m_size - offset is still unsigned, so I don&apos;t think this is valid.

size_t value = 1;
value -= 77;
assert(std::max&lt;size_t&gt;(0, value) == value)


Writing these checks without checked arithmetic or if (offset &gt; m_size) does not produce very understandable code

&gt; Source/WebGPU/WebGPU/Buffer.mm:275
&gt; +        rangeSize = std::max(static_cast&lt;size_t&gt;(0), m_size - offset);

max(0, u) is always u when u is unsigned.

&gt; Source/WebGPU/WebGPU/Device.h:97
&gt; +    bool m_hasUnifiedMemory { false };

could also be
hasUnfifiedMemory() ...

or could be const field

&gt; Source/WebGPU/WebGPU/Utilities.h:32
&gt; +inline bool isNotMultipleOfPowerOfTwo(uint64_t x, uint64_t y)

If it is used to check (x % y)  == 0 then I&apos;d expect the check to be written inline instead of custom function with bit twiddling.

compiler knows all your ys, so it should be able to generate better code than you..

Similar functions exist in WTF StdLibExtras.h, so if this sort of stuff is added, maybe there..

also the &quot;power of two&quot; seems like a implementation detail. So we could call it
  isNotMultipleOf(x, y)
 and  we would then do 
   if constexpr(isPowerOfTwo(y)) ....
and then we would arrive the same conclusion that we should just let the compiler handle that, as it has isMultipleOf(a,b) implemented as  (a%b) == 0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851776</commentid>
    <comment_count>5</comment_count>
      <attachid>454663</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-03-16 07:10:55 -0700</bug_when>
    <thetext>Comment on attachment 454663
Patch

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

&gt;&gt; Source/WebGPU/WebGPU/Buffer.mm:186
&gt;&gt; +    if (isNotMultipleOfPowerOfTwo(offset, 8))
&gt; 
&gt; here you check offset and 8, maybe intended is something else.
&gt; (I don&apos;t understand the isNotMultipleOfPowerOfTwo func)

Clarifying: 
 - offset is checked already
 - here you have a copy-paste error, you should check `(rangeSize % 4)`</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851998</commentid>
    <comment_count>6</comment_count>
      <attachid>454663</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-16 14:45:35 -0700</bug_when>
    <thetext>Comment on attachment 454663
Patch

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

&gt;&gt; Source/WebGPU/WebGPU/Buffer.h:85
&gt;&gt; +    size_t m_size { 0 }; // &quot;The length of the GPUBuffer allocation in bytes.&quot;
&gt; 
&gt; if some of these never change, you could mark them as const and not have the initialiser..

Good idea!!!

&gt;&gt; Source/WebGPU/WebGPU/Buffer.mm:43
&gt;&gt; +    // FIXME: &quot;If any of the bits of descriptorâs usage arenât present in this deviceâs [[allowed buffer usages]] return false.&quot;
&gt; 
&gt; non-latin chars in comment?

It&apos;s a copy/paste. It&apos;s probably valuable to keep the original source text in the comment, so it can be copied and searched for within the spec.

&gt;&gt; Source/WebGPU/WebGPU/Buffer.mm:77
&gt;&gt; +    if (descriptor.mappedAtCreation &amp;&amp; isNotMultipleOfPowerOfTwo(descriptor.size, 4))
&gt; 
&gt; typically I&apos;d expect 
&gt; descriptor.size is a multiple of 4.
&gt;   descriptor.size % 4 == 0
&gt; 
&gt; E.g. in this case I&apos;d expect
&gt; descriptor.mappedAtCreation &amp;&amp; (descriptor.size % 4) != 0
&gt; 
&gt; I couldn&apos;t understand that function immediately isNotMultipleOfPowerOfTwo, read it as &quot;is not multiple power of two x, y&quot;.

Right, good idea.

&gt;&gt; Source/WebGPU/WebGPU/Buffer.mm:114
&gt;&gt; +    buffer.label = [NSString stringWithCString:descriptor.label encoding:NSUTF8StringEncoding];
&gt; 
&gt; maybe descriptor.label == nullptr is fixed up in the latter commit?

Yes.

&gt;&gt; Source/WebGPU/WebGPU/Buffer.mm:132
&gt;&gt; +        return Buffer::create(buffer, descriptor.size, descriptor.usage, Buffer::State::MappedAtCreation, std::make_pair(static_cast&lt;size_t&gt;(0), descriptor.size), *this);
&gt; 
&gt; std::make_pair could be just {0, descriptor.size} if your MappingRange would be normal struct.

Yep!

&gt;&gt;&gt; Source/WebGPU/WebGPU/Buffer.mm:186
&gt;&gt;&gt; +    if (isNotMultipleOfPowerOfTwo(offset, 8))
&gt;&gt; 
&gt;&gt; here you check offset and 8, maybe intended is something else.
&gt;&gt; (I don&apos;t understand the isNotMultipleOfPowerOfTwo func)
&gt; 
&gt; Clarifying: 
&gt;  - offset is checked already
&gt;  - here you have a copy-paste error, you should check `(rangeSize % 4)`

Yes, it&apos;s a copy-paste error. Good catch.

&gt;&gt; Source/WebGPU/WebGPU/Buffer.mm:213
&gt;&gt; +        rangeSize = std::max(static_cast&lt;size_t&gt;(0), m_size - offset);
&gt; 
&gt; I&apos;m terrible at these, but:
&gt;  m_size - offset is still unsigned, so I don&apos;t think this is valid.
&gt; 
&gt; size_t value = 1;
&gt; value -= 77;
&gt; assert(std::max&lt;size_t&gt;(0, value) == value)
&gt; 
&gt; 
&gt; Writing these checks without checked arithmetic or if (offset &gt; m_size) does not produce very understandable code

Right, this will be handled when I switch to using checked arithmetic. You&apos;re right that it&apos;s kind of silly now, but it&apos;s temporary.

&gt;&gt; Source/WebGPU/WebGPU/Buffer.mm:275
&gt;&gt; +        rangeSize = std::max(static_cast&lt;size_t&gt;(0), m_size - offset);
&gt; 
&gt; max(0, u) is always u when u is unsigned.

Ditto.

&gt;&gt; Source/WebGPU/WebGPU/Utilities.h:32
&gt;&gt; +inline bool isNotMultipleOfPowerOfTwo(uint64_t x, uint64_t y)
&gt; 
&gt; If it is used to check (x % y)  == 0 then I&apos;d expect the check to be written inline instead of custom function with bit twiddling.
&gt; 
&gt; compiler knows all your ys, so it should be able to generate better code than you..
&gt; 
&gt; Similar functions exist in WTF StdLibExtras.h, so if this sort of stuff is added, maybe there..
&gt; 
&gt; also the &quot;power of two&quot; seems like a implementation detail. So we could call it
&gt;   isNotMultipleOf(x, y)
&gt;  and  we would then do 
&gt;    if constexpr(isPowerOfTwo(y)) ....
&gt; and then we would arrive the same conclusion that we should just let the compiler handle that, as it has isMultipleOf(a,b) implemented as  (a%b) == 0

I&apos;ve deleted this function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852001</commentid>
    <comment_count>7</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-16 14:49:58 -0700</bug_when>
    <thetext>Committed r291369 (248501@trunk): &lt;https://commits.webkit.org/248501@trunk&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852002</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-03-16 14:50:22 -0700</bug_when>
    <thetext>&lt;rdar://problem/90393491&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454657</attachid>
            <date>2022-03-14 20:32:45 -0700</date>
            <delta_ts>2022-03-14 22:04:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>24587</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">Y29tbWl0IDdmNmMxMDYxY2JiOGYyNjdmYzZiZDFlZTIzODNhYWRlODEyMWFhYjQKQXV0aG9yOiBN
eWxlcyBDLiBNYXhmaWVsZCA8bW1heGZpZWxkQGFwcGxlLmNvbT4KRGF0ZTogICBNb24gTWFyIDE0
IDIwOjMwOjI3IDIwMjIgLTA3MDAKCiAgICBQYXJ0IDYKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGY5ZmFkYjZiMDE5ZC4uZmYw
ZWRjN2JkNzA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIyLTAzLTE0ICBNeWxlcyBDLiBNYXhm
aWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkdQVV0gSW1wbGVtZW50
IGZpcnN0IGRyYWZ0IG9mIGJ1ZmZlciBtYXBwaW5nIGFjY29yZGluZyB0byB0aGUgc3BlYworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3ODcwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV1RGIGNsYXNzZXMg
dXN1YWxseSBoYXZlICd1c2luZycgc3RhdGVtZW50cyBzbyB1c2VycyBkb24ndCBoYXZlIHRvIHF1
YWxpZnkgYWxsIHVzZXMuCisKKyAgICAgICAgKiB3dGYvUmFuZ2UuaDoKKwogMjAyMi0wMy0xNCAg
TWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgRW5oYW5jZSBTdGFja0No
ZWNrIGRlYnVnZ2luZyBzdXBwb3J0IGFuZCBidW1wIHVwIHRoZSBBU0FOIHJlc2VydmVkIHpvbmUg
c2l6ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JhbmdlLmggYi9Tb3VyY2UvV1RGL3d0
Zi9SYW5nZS5oCmluZGV4IGE5NmJmOWEwNjFjNy4uZjRlY2M3YzVkNjkzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9SYW5nZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JhbmdlLmgKQEAgLTE0
MCwzICsxNDAsNSBAQCBwcml2YXRlOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5n
IFdURjo6UmFuZ2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJHUFUvQ2hhbmdlTG9nCmluZGV4IDAxZjBkNjU3NDIwMi4uZTE5MzUzZWIxNjA4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViR1BVL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViR1BVL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDIyLTAzLTE0ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1t
YXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkdQVV0gSW1wbGVtZW50IGZpcnN0IGRy
YWZ0IG9mIGJ1ZmZlciBtYXBwaW5nIGFjY29yZGluZyB0byB0aGUgc3BlYworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3ODcwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IHRoZSB2YXJpb3Vz
IEdQVUJ1ZmZlciBtZXRob2RzLCBhY2NvcmRpbmcgdG8gdGhlIGFsZ29yaXRobXMgaW4gdGhlIHNw
ZWMuCisgICAgICAgIFRoZXJlIGFyZSBhIGZldyB0aGluZ3Mgd2hpY2ggdGhlIHNwZWMgbGlzdHMg
d2hpY2ggd2UgY2FuJ3QgZG8geWV0IChsaWtlIHJlcG9ydGluZworICAgICAgICB2YWxpZGF0aW9u
IGVycm9ycyksIHNvIHRob3NlIHRoaW5ncyBhcmUgbGVmdCB3aXRoIEZJWE1Fcy4gRXZlcnkgc3Rl
cCBpcyBsaXN0ZWQgd2l0aAorICAgICAgICBsaW5rcyB0byB0aGUgc3BlYyB3aGVyZSBhcHByb3By
aWF0ZSwgYW5kIHdpdGggcXVvdGVzIHRvIHRoZSBzcGVjIGRlc2NyaWJpbmcgd2hhdAorICAgICAg
ICBpcyBiZWluZyBpbXBsZW1lbnRlZC4KKworICAgICAgICAqIFdlYkdQVS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYkdQVS9CdWZmZXIuaDoKKyAgICAgICAgKFdlYkdQ
VTo6QnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViR1BVOjpCdWZmZXI6OnNpemUgY29uc3Qp
OgorICAgICAgICAoV2ViR1BVOjpCdWZmZXI6OnVzYWdlIGNvbnN0KToKKyAgICAgICAgKiBXZWJH
UFUvQnVmZmVyLm1tOgorICAgICAgICAoV2ViR1BVOjp2YWxpZGF0ZURlc2NyaXB0b3IpOgorICAg
ICAgICAoV2ViR1BVOjp2YWxpZGF0ZUNyZWF0ZUJ1ZmZlcik6CisgICAgICAgIChXZWJHUFU6OnN0
b3JhZ2VNb2RlKToKKyAgICAgICAgKFdlYkdQVTo6RGV2aWNlOjpjcmVhdGVCdWZmZXIpOgorICAg
ICAgICAoV2ViR1BVOjpCdWZmZXI6OkJ1ZmZlcik6CisgICAgICAgIChXZWJHUFU6OkJ1ZmZlcjo6
ZGVzdHJveSk6CisgICAgICAgIChXZWJHUFU6OkJ1ZmZlcjo6Z2V0Q29uc3RNYXBwZWRSYW5nZSk6
CisgICAgICAgIChXZWJHUFU6OkJ1ZmZlcjo6dmFsaWRhdGVHZXRNYXBwZWRSYW5nZSBjb25zdCk6
CisgICAgICAgIChXZWJHUFU6OkJ1ZmZlcjo6Z2V0TWFwcGVkUmFuZ2UpOgorICAgICAgICAoV2Vi
R1BVOjpCdWZmZXI6OnZhbGlkYXRlTWFwQXN5bmMgY29uc3QpOgorICAgICAgICAoV2ViR1BVOjpC
dWZmZXI6Om1hcEFzeW5jKToKKyAgICAgICAgKFdlYkdQVTo6QnVmZmVyOjp2YWxpZGF0ZVVubWFw
IGNvbnN0KToKKyAgICAgICAgKFdlYkdQVTo6QnVmZmVyOjp1bm1hcCk6CisgICAgICAgICogV2Vi
R1BVL0RldmljZS5oOgorICAgICAgICAqIFdlYkdQVS9EZXZpY2UubW06CisgICAgICAgIChXZWJH
UFU6OkRldmljZTo6RGV2aWNlKToKKyAgICAgICAgKiBXZWJHUFUvVXRpbGl0aWVzLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJHUFUvV2ViR1BVL0J1ZmZlci5oLgorICAgICAgICAoV2ViR1BVOjpp
c05vdE11bHRpcGxlT2ZQb3dlck9mVHdvKToKKwogMjAyMi0wMy0xNCAgTXlsZXMgQy4gTWF4Zmll
bGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWJHUFVdIEltcGxlbWVudCBx
dWV1ZSBzdWJtaXNzaW9uIG1ldGhvZHMgYWNjb3JkaW5nIHRvIHRoZSBzcGVjCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dlYkdQVS9XZWJHUFUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmNzQ0MDI5OTkx
MTIuLjJiNzk1ZDlhZThkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC0xMzMsNiArMTMzLDcgQEAKIAkJMUM1MzE5QkQyN0JEQzZDQjAw
Q0QxMjdFIC8qIENvbW1hbmRMaW5lUGxheWdyb3VuZCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5j
bHVkZUluSW5kZXggPSAwOyBwYXRoID0gQ29tbWFuZExpbmVQbGF5Z3JvdW5kOyBzb3VyY2VUcmVl
ID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQkxQzUzMTlCRjI3QkRDNkNDMDBDRDEyN0UgLyog
bWFpbi5zd2lmdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuc3dpZnQ7IHBhdGggPSBtYWluLnN3aWZ0OyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxQzUzMTlDQTI3QkRENzAwMDBDRDEyN0UgLyogQ29tbWFuZExpbmVQbGF5
Z3JvdW5kLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IENvbW1hbmRMaW5lUGxheWdyb3VuZC54Y2Nv
bmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM1ODJGRjYyN0UwM0U1NjAwOUI0
MEYwIC8qIFV0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVdGlsaXRpZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM1QUNBOTIyNzNBNDFDMjAwOTVGOEQ1IC8qIEluc3RhbmNl
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSW5zdGFuY2UubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFDNUFDQTk2MjczQTQyNkQwMDk1RjhENSAvKiBTdXJmYWNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN1cmZhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMUM1QUNBOTcyNzNBNDI2RDAwOTVGOEQ1IC8qIFN3YXBDaGFpbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTd2FwQ2hhaW4uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTM3Myw2ICszNzQsNyBAQAogCQkJCTFDRUJEN0U2MjcxNkFGQkEwMEE1
MjU0RCAvKiBXZWJHUFUuaCAqLywKIAkJCQkxQ0MwQzhDOTI3M0E3RDg5MDBEMEI0ODEgLyogV2Vi
R1BVLm1vZHVsZW1hcCAqLywKIAkJCQkxQzVBQ0FEMjI3M0E0Qzg2MDA5NUY4RDUgLyogV2ViR1BV
RXh0LmggKi8sCisJCQkJMUM1ODJGRjYyN0UwM0U1NjAwOUI0MEYwIC8qIFV0aWxpdGllcy5oICov
LAogCQkJKTsKIAkJCXBhdGggPSBXZWJHUFU7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJHUFUvQnVmZmVyLmggYi9Tb3VyY2UvV2ViR1BV
L1dlYkdQVS9CdWZmZXIuaAppbmRleCA5NTA2NjMxYmU5YTMuLjliZTA3ZDUzZjU1NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkdQVS9X
ZWJHUFUvQnVmZmVyLmgKQEAgLTI1LDE5ICsyNSwyNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lt
cG9ydCA8dXRpbGl0eT4KICNpbXBvcnQgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW1wb3J0IDx3dGYv
RnVuY3Rpb24uaD4KKyNpbXBvcnQgPHd0Zi9SYW5nZS5oPgorI2ltcG9ydCA8d3RmL1JhbmdlU2V0
Lmg+CiAjaW1wb3J0IDx3dGYvUmVmLmg+Ci0jaW1wb3J0IDx3dGYvUmVmQ291bnRlZC5oPgorI2lt
cG9ydCA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJHUFUgewog
Ci1jbGFzcyBCdWZmZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxCdWZmZXI+IHsKK2NsYXNzIERldmlj
ZTsKKworY2xhc3MgQnVmZmVyIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEJ1ZmZlcj4g
ewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
QnVmZmVyPiBjcmVhdGUoaWQ8TVRMQnVmZmVyPiBidWZmZXIpCisgICAgZW51bSBjbGFzcyBTdGF0
ZSA6IHVpbnQ4X3Q7CisgICAgdXNpbmcgTWFwcGluZ1JhbmdlID0gc3RkOjpwYWlyPHNpemVfdCwg
c2l6ZV90PjsKKworICAgIHN0YXRpYyBSZWY8QnVmZmVyPiBjcmVhdGUoaWQ8TVRMQnVmZmVyPiBi
dWZmZXIsIHVpbnQ2NF90IHNpemUsIFdHUFVCdWZmZXJVc2FnZUZsYWdzIHVzYWdlLCBTdGF0ZSBp
bml0aWFsU3RhdGUsIE1hcHBpbmdSYW5nZSBpbml0aWFsTWFwcGluZ1JhbmdlLCBEZXZpY2UmIGRl
dmljZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEJ1ZmZlcihidWZmZXIp
KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQnVmZmVyKGJ1ZmZlciwgc2l6ZSwgdXNh
Z2UsIGluaXRpYWxTdGF0ZSwgaW5pdGlhbE1hcHBpbmdSYW5nZSwgZGV2aWNlKSk7CiAgICAgfQog
CiAgICAgfkJ1ZmZlcigpOwpAQCAtNDksMTIgKzU3LDQxIEBAIHB1YmxpYzoKICAgICB2b2lkIHVu
bWFwKCk7CiAgICAgdm9pZCBzZXRMYWJlbChjb25zdCBjaGFyKik7CiAKKyAgICAvLyBodHRwczov
L2dwdXdlYi5naXRodWIuaW8vZ3B1d2ViLyNidWZmZXItc3RhdGUKKyAgICAvLyBFYWNoIEdQVUJ1
ZmZlciBoYXMgYSBjdXJyZW50IGJ1ZmZlciBzdGF0ZSBvbiB0aGUgQ29udGVudCB0aW1lbGluZSB3
aGljaCBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyAgICBlbnVtIGNsYXNzIFN0YXRlIDogdWlu
dDhfdCB7CisgICAgICAgIE1hcHBlZCwgLy8gIndoZXJlIHRoZSBHUFVCdWZmZXIgaXMgYXZhaWxh
YmxlIGZvciBDUFUgb3BlcmF0aW9ucyBvbiBpdHMgY29udGVudC4iCisgICAgICAgIE1hcHBlZEF0
Q3JlYXRpb24sIC8vICJ3aGVyZSB0aGUgR1BVQnVmZmVyIHdhcyBqdXN0IGNyZWF0ZWQgYW5kIGlz
IGF2YWlsYWJsZSBmb3IgQ1BVIG9wZXJhdGlvbnMgb24gaXRzIGNvbnRlbnQuIgorICAgICAgICBN
YXBwaW5nUGVuZGluZywgLy8gIndoZXJlIHRoZSBHUFVCdWZmZXIgaXMgYmVpbmcgbWFkZSBhdmFp
bGFibGUgZm9yIENQVSBvcGVyYXRpb25zIG9uIGl0cyBjb250ZW50LiIKKyAgICAgICAgVW5tYXBw
ZWQsIC8vICJ3aGVyZSB0aGUgR1BVQnVmZmVyIGlzIGF2YWlsYWJsZSBmb3IgR1BVIG9wZXJhdGlv
bnMuIgorICAgICAgICBEZXN0cm95ZWQsIC8vICJ3aGVyZSB0aGUgR1BVQnVmZmVyIGlzIG5vIGxv
bmdlciBhdmFpbGFibGUgZm9yIGFueSBvcGVyYXRpb25zIGV4Y2VwdCBkZXN0cm95LiIKKyAgICB9
OworCiAgICAgaWQ8TVRMQnVmZmVyPiBidWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlcjsg
fQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgV0dQVUJ1
ZmZlclVzYWdlRmxhZ3MgdXNhZ2UoKSBjb25zdCB7IHJldHVybiBtX3VzYWdlOyB9CiAKIHByaXZh
dGU6Ci0gICAgQnVmZmVyKGlkPE1UTEJ1ZmZlcj4pOworICAgIEJ1ZmZlcihpZDxNVExCdWZmZXI+
LCB1aW50NjRfdCBzaXplLCBXR1BVQnVmZmVyVXNhZ2VGbGFncywgU3RhdGUgaW5pdGlhbFN0YXRl
LCBNYXBwaW5nUmFuZ2UgaW5pdGlhbE1hcHBpbmdSYW5nZSwgRGV2aWNlJik7CisKKyAgICBib29s
IHZhbGlkYXRlR2V0TWFwcGVkUmFuZ2Uoc2l6ZV90IG9mZnNldCwgc2l6ZV90IHJhbmdlU2l6ZSkg
Y29uc3Q7CisgICAgYm9vbCB2YWxpZGF0ZU1hcEFzeW5jKFdHUFVNYXBNb2RlRmxhZ3MsIHNpemVf
dCBvZmZzZXQsIHNpemVfdCByYW5nZVNpemUpIGNvbnN0OworICAgIGJvb2wgdmFsaWRhdGVVbm1h
cCgpIGNvbnN0OwogCiAgICAgaWQ8TVRMQnVmZmVyPiBtX2J1ZmZlciB7IG5pbCB9OworCisgICAg
Ly8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8jYnVmZmVyLWludGVyZmFjZQorICAg
IC8vICJHUFVCdWZmZXIgaGFzIHRoZSBmb2xsb3dpbmcgaW50ZXJuYWwgc2xvdHM6IgorICAgIHNp
emVfdCBtX3NpemUgeyAwIH07IC8vICJUaGUgbGVuZ3RoIG9mIHRoZSBHUFVCdWZmZXIgYWxsb2Nh
dGlvbiBpbiBieXRlcy4iCisgICAgV0dQVUJ1ZmZlclVzYWdlRmxhZ3MgbV91c2FnZSB7IDAgfTsg
Ly8gIlRoZSBhbGxvd2VkIHVzYWdlcyBmb3IgdGhpcyBHUFVCdWZmZXIuIgorICAgIFN0YXRlIG1f
c3RhdGUgeyBTdGF0ZTo6VW5tYXBwZWQgfTsgLy8gIlRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBH
UFVCdWZmZXIuIgorICAgIC8vICJbW21hcHBpbmddXSBvZiB0eXBlIEFycmF5QnVmZmVyIG9yIFBy
b21pc2Ugb3IgbnVsbC4iIFRoaXMgaXMgdW5uZWNlc3Nhcnk7IHdlIGNhbiBqdXN0IHVzZSBtX2Rl
dmljZS5jb250ZW50cy4KKyAgICBNYXBwaW5nUmFuZ2UgbV9tYXBwaW5nUmFuZ2UgeyAwLCAwIH07
IC8vICJbW21hcHBpbmdfcmFuZ2VdXSBvZiB0eXBlIGxpc3Q8dW5zaWduZWQgbG9uZyBsb25nPiBv
ciBudWxsLiIKKyAgICB1c2luZyBNYXBwZWRSYW5nZXMgPSBSYW5nZVNldDxSYW5nZTxzaXplX3Q+
PjsKKyAgICBNYXBwZWRSYW5nZXMgbV9tYXBwZWRSYW5nZXM7IC8vICJbW21hcHBlZF9yYW5nZXNd
XSBvZiB0eXBlIGxpc3Q8QXJyYXlCdWZmZXI+IG9yIG51bGwuIgorICAgIFdHUFVNYXBNb2RlRmxh
Z3MgbV9tYXBNb2RlIHsgV0dQVU1hcE1vZGVfTm9uZSB9OyAvLyAiVGhlIEdQVU1hcE1vZGVGbGFn
cyBvZiB0aGUgbGFzdCBjYWxsIHRvIG1hcEFzeW5jKCkgKGlmIGFueSkuIgorCisgICAgUmVmPERl
dmljZT4gbV9kZXZpY2U7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJHUFUvV2ViR1BVL0J1ZmZlci5tbSBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0J1
ZmZlci5tbQppbmRleCA2MWFkYTc5YWFkODIuLmYyMTA2NzNhMTBkNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkdQVS9XZWJHUFUvQnVmZmVyLm1tCisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0J1
ZmZlci5tbQpAQCAtMjcsMTcgKzI3LDEyNSBAQAogI2ltcG9ydCAiQnVmZmVyLmgiCiAKICNpbXBv
cnQgIkRldmljZS5oIgorI2ltcG9ydCAiVXRpbGl0aWVzLmgiCisjaW1wb3J0IDx3dGYvU3RkTGli
RXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJHUFUgewogCitzdGF0aWMgYm9vbCB2YWxpZGF0ZURl
c2NyaXB0b3IoY29uc3QgRGV2aWNlJiBkZXZpY2UsIGNvbnN0IFdHUFVCdWZmZXJEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yKQoreworICAgIFVOVVNFRF9QQVJBTShkZXZpY2UpOworCisgICAgLy8gaHR0
cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8jYWJzdHJhY3Qtb3BkZWYtdmFsaWRhdGluZy1n
cHVidWZmZXJkZXNjcmlwdG9yCisKKyAgICAvLyBGSVhNRTogIklmIGRldmljZSBpcyBsb3N0IHJl
dHVybiBmYWxzZS4iCisKKyAgICAvLyBGSVhNRTogIklmIGFueSBvZiB0aGUgYml0cyBvZiBkZXNj
cmlwdG9y4oCZcyB1c2FnZSBhcmVu4oCZdCBwcmVzZW50IGluIHRoaXMgZGV2aWNl4oCZcyBbW2Fs
bG93ZWQgYnVmZmVyIHVzYWdlc11dIHJldHVybiBmYWxzZS4iCisKKyAgICAvLyAiSWYgYm90aCB0
aGUgTUFQX1JFQUQgYW5kIE1BUF9XUklURSBiaXRzIG9mIGRlc2NyaXB0b3LigJlzIHVzYWdlIGF0
dHJpYnV0ZSBhcmUgc2V0LCByZXR1cm4gZmFsc2UuIgorICAgIGlmICgoZGVzY3JpcHRvci51c2Fn
ZSAmIFdHUFVCdWZmZXJVc2FnZV9NYXBSZWFkKSAmJiAoZGVzY3JpcHRvci51c2FnZSAmIFdHUFVC
dWZmZXJVc2FnZV9NYXBXcml0ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVy
biB0cnVlOworfQorCitzdGF0aWMgYm9vbCB2YWxpZGF0ZUNyZWF0ZUJ1ZmZlcihjb25zdCBEZXZp
Y2UmIGRldmljZSwgY29uc3QgV0dQVUJ1ZmZlckRlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7Cisg
ICAgLy8gRklYTUU6ICJ0aGlzIGlzIGEgdmFsaWQgR1BVRGV2aWNlLiIKKworICAgIC8vICJ2YWxp
ZGF0aW5nIEdQVUJ1ZmZlckRlc2NyaXB0b3IodGhpcywgZGVzY3JpcHRvcikgcmV0dXJucyB0cnVl
LiIKKyAgICBpZiAoIXZhbGlkYXRlRGVzY3JpcHRvcihkZXZpY2UsIGRlc2NyaXB0b3IpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAiZGVzY3JpcHRvci51c2FnZSBtdXN0IG5vdCBi
ZSAwLiIKKyAgICBpZiAoIWRlc2NyaXB0b3IudXNhZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vIEZJWE1FOiAiZGVzY3JpcHRvci51c2FnZSBpcyBhIHN1YnNldCBvZiB0aGlzLltb
YWxsb3dlZCBidWZmZXIgdXNhZ2VzXV0uIgorCisgICAgLy8gIklmIGRlc2NyaXB0b3IudXNhZ2Ug
Y29udGFpbnMgTUFQX1JFQUQ6IGRlc2NyaXB0b3IudXNhZ2UgY29udGFpbnMgbm8gb3RoZXIgZmxh
Z3MgZXhjZXB0IENPUFlfRFNULiIKKyAgICBpZiAoKGRlc2NyaXB0b3IudXNhZ2UgJiBXR1BVQnVm
ZmVyVXNhZ2VfTWFwUmVhZCkKKyAgICAgICAgJiYgKGRlc2NyaXB0b3IudXNhZ2UgJiB+V0dQVUJ1
ZmZlclVzYWdlX0NvcHlEc3QgJiB+V0dQVUJ1ZmZlclVzYWdlX01hcFJlYWQpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAvLyAiSWYgZGVzY3JpcHRvci51c2FnZSBjb250YWlucyBNQVBf
V1JJVEU6IGRlc2NyaXB0b3IudXNhZ2UgY29udGFpbnMgbm8gb3RoZXIgZmxhZ3MgZXhjZXB0IENP
UFlfU1JDLiIKKyAgICBpZiAoKGRlc2NyaXB0b3IudXNhZ2UgJiBXR1BVQnVmZmVyVXNhZ2VfTWFw
V3JpdGUpCisgICAgICAgICYmIChkZXNjcmlwdG9yLnVzYWdlICYgfldHUFVCdWZmZXJVc2FnZV9D
b3B5U3JjICYgfldHUFVCdWZmZXJVc2FnZV9NYXBXcml0ZSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIC8vICJJZiBkZXNjcmlwdG9yLm1hcHBlZEF0Q3JlYXRpb24gaXMgdHJ1ZTogZGVz
Y3JpcHRvci5zaXplIGlzIGEgbXVsdGlwbGUgb2YgNC4iCisgICAgaWYgKGRlc2NyaXB0b3IubWFw
cGVkQXRDcmVhdGlvbiAmJiBpc05vdE11bHRpcGxlT2ZQb3dlck9mVHdvKGRlc2NyaXB0b3Iuc2l6
ZSwgNCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitz
dGF0aWMgTVRMU3RvcmFnZU1vZGUgc3RvcmFnZU1vZGUoYm9vbCBkZXZpY2VIYXNVbmlmaWVkTWVt
b3J5LCBXR1BVQnVmZmVyVXNhZ2VGbGFncyB1c2FnZSkKK3sKKyAgICBpZiAoZGV2aWNlSGFzVW5p
ZmllZE1lbW9yeSkKKyAgICAgICAgcmV0dXJuIE1UTFN0b3JhZ2VNb2RlU2hhcmVkOworICAgIC8v
IE9uIGRpc2NyZXRlIG1lbW9yeSBHUFVzLCBtYXBwYWJsZSBtZW1vcnkgaXMgc2hhcmVkLCB3aGVy
ZWFzIG5vbi1tYXBwYWJsZSBtZW1vcnkgaXMgcHJpdmF0ZS4KKyAgICAvLyBUaGVyZSBpcyBubyBz
aXR1YXRpb24gd2hlcmUgd2UnbGwgdXNlIHRoZSBtYW5hZ2VkIHN0b3JhZ2UgbW9kZS4KKyAgICBp
ZiAoKHVzYWdlICYgV0dQVUJ1ZmZlclVzYWdlX01hcFJlYWQpIHx8ICh1c2FnZSAmIFdHUFVCdWZm
ZXJVc2FnZV9NYXBXcml0ZSkpCisgICAgICAgIHJldHVybiBNVExTdG9yYWdlTW9kZVNoYXJlZDsK
KyAgICByZXR1cm4gTVRMU3RvcmFnZU1vZGVQcml2YXRlOworfQorCiBSZWZQdHI8QnVmZmVyPiBE
ZXZpY2U6OmNyZWF0ZUJ1ZmZlcihjb25zdCBXR1BVQnVmZmVyRGVzY3JpcHRvciYgZGVzY3JpcHRv
cikKIHsKLSAgICBVTlVTRURfUEFSQU0oZGVzY3JpcHRvcik7Ci0gICAgcmV0dXJuIEJ1ZmZlcjo6
Y3JlYXRlKG5pbCk7CisgICAgaWYgKGRlc2NyaXB0b3IubmV4dEluQ2hhaW4pCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8j
ZG9tLWdwdWRldmljZS1jcmVhdGVidWZmZXIKKworICAgIC8vICJJZiBhbnkgb2YgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZSB1bnNhdGlzZmllZCwgcmV0dXJuIGFuIGVycm9yIGJ1ZmZlciBh
bmQgc3RvcC4iCisgICAgaWYgKCF2YWxpZGF0ZUNyZWF0ZUJ1ZmZlcigqdGhpcywgZGVzY3JpcHRv
cikpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gRklYTUU6IFVzZSBoZWFwIGFs
bG9jYXRpb24gdG8gbWFrZSB0aGlzIGZhc3Rlci4KKyAgICAvLyBJZi93aGVuIHdlIGRvIHRoYXQs
IHdlIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgIm5ldyIgYnVmZmVycyBnZXQgY2xlYXJlZCB0byAw
LgorICAgIC8vIEZJWE1FOiBDb25zaWRlciB3cml0ZS1jb21iaW5pbmcgQ1BVIGNhY2hlIG1vZGUu
CisgICAgLy8gRklYTUU6IENvbnNpZGVyIGltcGxlbWVudGluZyBoYXphcmQgdHJhY2tpbmcgb3Vy
c2VsZi4KKyAgICBNVExTdG9yYWdlTW9kZSBzdG9yYWdlTW9kZSA9IFdlYkdQVTo6c3RvcmFnZU1v
ZGUobV9oYXNVbmlmaWVkTWVtb3J5LCBkZXNjcmlwdG9yLnVzYWdlKTsKKyAgICBpZDxNVExCdWZm
ZXI+IGJ1ZmZlciA9IFttX2RldmljZSBuZXdCdWZmZXJXaXRoTGVuZ3RoOmRlc2NyaXB0b3Iuc2l6
ZSBvcHRpb25zOnN0b3JhZ2VNb2RlXTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBidWZmZXIubGFiZWwgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENTdHJp
bmc6ZGVzY3JpcHRvci5sYWJlbCBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107CisKKyAg
ICAvLyBGSVhNRTogSGFuZGxlIGRlc2NyaXB0b3IubWFwcGVkQXRDcmVhdGlvbi4KKyAgICAvLyBC
ZWNhdXNlIG5vbi1tYXBwYWJsZSBidWZmZXJzIGNhbiBiZSBtYXBwZWQgYXQgY3JlYXRpb24sCisg
ICAgLy8gdGhpcyBtZWFucyB3ZSBoYXZlIHRvIGhhdmUgYSB0ZW1wb3JhcnkgYnVmZmVyIG1hcHBl
ZCwKKyAgICAvLyBhbmQgd2UgY2FuIHRvIHNjaGVkdWxlIGEgY29weSBjb21tYW5kIHdoZW4gaXQg
Z2V0cyB1bm1hcHBlZCwKKyAgICAvLyBwcmVzdW1hYmx5IGF0IGZpcnN0IHVzZS4KKworICAgIC8v
ICJMZXQgYiBiZSBhIG5ldyBHUFVCdWZmZXIgb2JqZWN0LiIKKyAgICAvLyAiU2V0IGIuW1tzaXpl
XV0gdG8gZGVzY3JpcHRvci5zaXplLiIKKyAgICAvLyAiU2V0IGIuW1t1c2FnZV1dIHRvIGRlc2Ny
aXB0b3IudXNhZ2UuIgorCisgICAgLy8gIklmIGRlc2NyaXB0b3IubWFwcGVkQXRDcmVhdGlvbiBp
cyB0cnVlOiIKKyAgICBpZiAoZGVzY3JpcHRvci5tYXBwZWRBdENyZWF0aW9uKSB7CisgICAgICAg
IC8vICJTZXQgYi5bW21hcHBpbmddXSB0byBhIG5ldyBBcnJheUJ1ZmZlciBvZiBzaXplIGIuW1tz
aXplXV0uIiBUaGlzIGlzIHVubmVjZXNzYXJ5LgorICAgICAgICAvLyAiU2V0IGIuW1ttYXBwaW5n
X3JhbmdlXV0gdG8gWzAsIGRlc2NyaXB0b3Iuc2l6ZV0uIgorICAgICAgICAvLyAiU2V0IGIuW1tt
YXBwZWRfcmFuZ2VzXV0gdG8gW10uIgorICAgICAgICAvLyAiU2V0IGIuW1tzdGF0ZV1dIHRvIG1h
cHBlZCBhdCBjcmVhdGlvbi4iCisgICAgICAgIHJldHVybiBCdWZmZXI6OmNyZWF0ZShidWZmZXIs
IGRlc2NyaXB0b3Iuc2l6ZSwgZGVzY3JpcHRvci51c2FnZSwgQnVmZmVyOjpTdGF0ZTo6TWFwcGVk
QXRDcmVhdGlvbiwgc3RkOjptYWtlX3BhaXIoc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwgZGVzY3Jp
cHRvci5zaXplKSwgKnRoaXMpOworICAgIH0KKworICAgIC8vICJTZXQgYi5bW21hcHBpbmddXSB0
byBudWxsLiIgVGhpcyBpcyB1bm5lY2Vzc2FyeS4KKyAgICAvLyAiU2V0IGIuW1ttYXBwaW5nX3Jh
bmdlXV0gdG8gbnVsbC4iCisgICAgLy8gIlNldCBiLltbbWFwcGVkX3Jhbmdlc11dIHRvIG51bGwu
IgorICAgIC8vICJTZXQgYi5bW3N0YXRlXV0gdG8gdW5tYXBwZWQuIgorICAgIHJldHVybiBCdWZm
ZXI6OmNyZWF0ZShidWZmZXIsIGRlc2NyaXB0b3Iuc2l6ZSwgZGVzY3JpcHRvci51c2FnZSwgQnVm
ZmVyOjpTdGF0ZTo6VW5tYXBwZWQsIHN0ZDo6bWFrZV9wYWlyKHN0YXRpY19jYXN0PHNpemVfdD4o
MCksIHN0YXRpY19jYXN0PHNpemVfdD4oMCkpLCAqdGhpcyk7CiB9CiAKLUJ1ZmZlcjo6QnVmZmVy
KGlkPE1UTEJ1ZmZlcj4gYnVmZmVyKQorQnVmZmVyOjpCdWZmZXIoaWQ8TVRMQnVmZmVyPiBidWZm
ZXIsIHVpbnQ2NF90IHNpemUsIFdHUFVCdWZmZXJVc2FnZUZsYWdzIHVzYWdlLCBTdGF0ZSBpbml0
aWFsU3RhdGUsIE1hcHBpbmdSYW5nZSBpbml0aWFsTWFwcGluZ1JhbmdlLCBEZXZpY2UmIGRldmlj
ZSkKICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKKyAgICAsIG1fc2l6ZShzaXplKQorICAgICwgbV91
c2FnZSh1c2FnZSkKKyAgICAsIG1fc3RhdGUoaW5pdGlhbFN0YXRlKQorICAgICwgbV9tYXBwaW5n
UmFuZ2UoaW5pdGlhbE1hcHBpbmdSYW5nZSkKKyAgICAsIG1fZGV2aWNlKGRldmljZSkKIHsKIH0K
IApAQCAtNDUsMzIgKzE1MywyMzIgQEAgQnVmZmVyOjp+QnVmZmVyKCkgPSBkZWZhdWx0OwogCiB2
b2lkIEJ1ZmZlcjo6ZGVzdHJveSgpCiB7CisgICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlv
L2dwdXdlYi8jZG9tLWdwdWJ1ZmZlci1kZXN0cm95CisKKyAgICAvLyAiSWYgdGhlIHRoaXMuW1tz
dGF0ZV1dIGlzIG5vdCBlaXRoZXIgb2YgdW5tYXBwZWQgb3IgZGVzdHJveWVkOiBSdW4gdGhlIHN0
ZXBzIHRvIHVubWFwIHRoaXMuIgorICAgIGlmIChtX3N0YXRlICE9IFN0YXRlOjpVbm1hcHBlZCAm
JiBtX3N0YXRlICE9IFN0YXRlOjpEZXN0cm95ZWQpIHsKKyAgICAgICAgLy8gRklYTUU6IEFTU0VS
VCgpIHRoYXQgdGhpcyBjYWxsIGRvZXNuJ3QgZmFpbC4KKyAgICAgICAgdW5tYXAoKTsKKyAgICB9
CisKKyAgICAvLyAiU2V0IHRoaXMuW1tzdGF0ZV1dIHRvIGRlc3Ryb3llZC4iCisgICAgbV9zdGF0
ZSA9IFN0YXRlOjpEZXN0cm95ZWQ7CisKKyAgICBtX2J1ZmZlciA9IG5pbDsKIH0KIAogY29uc3Qg
dm9pZCogQnVmZmVyOjpnZXRDb25zdE1hcHBlZFJhbmdlKHNpemVfdCBvZmZzZXQsIHNpemVfdCBz
aXplKQogewotICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwotICAgIFVOVVNFRF9QQVJBTShzaXpl
KTsKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gZ2V0TWFwcGVkUmFuZ2Uob2Zmc2V0
LCBzaXplKTsKK30KKworYm9vbCBCdWZmZXI6OnZhbGlkYXRlR2V0TWFwcGVkUmFuZ2Uoc2l6ZV90
IG9mZnNldCwgc2l6ZV90IHJhbmdlU2l6ZSkgY29uc3QKK3sKKyAgICAvLyAidGhpcy5bW3N0YXRl
XV0gaXMgbWFwcGVkIG9yIG1hcHBlZCBhdCBjcmVhdGlvbi4iCisgICAgaWYgKG1fc3RhdGUgIT0g
U3RhdGU6Ok1hcHBlZCAmJiBtX3N0YXRlICE9IFN0YXRlOjpNYXBwZWRBdENyZWF0aW9uKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAib2Zmc2V0IGlzIGEgbXVsdGlwbGUgb2YgOC4i
CisgICAgaWYgKGlzTm90TXVsdGlwbGVPZlBvd2VyT2ZUd28ob2Zmc2V0LCA4KSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgLy8gInJhbmdlU2l6ZSBpcyBhIG11bHRpcGxlIG9mIDQuIgor
ICAgIGlmIChpc05vdE11bHRpcGxlT2ZQb3dlck9mVHdvKG9mZnNldCwgOCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIC8vICJvZmZzZXQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRv
IHRoaXMuW1ttYXBwaW5nX3JhbmdlXV1bMF0uIgorICAgIGlmIChvZmZzZXQgPCBtX21hcHBpbmdS
YW5nZS5maXJzdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gIm9mZnNldCArIHJh
bmdlU2l6ZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhpcy5bW21hcHBpbmdfcmFuZ2VdXVsx
XS4iCisgICAgLy8gRklYTUU6IFVzZWQgY2hlY2tlZCBhcml0aG1ldGljLgorICAgIGlmIChvZmZz
ZXQgKyByYW5nZVNpemUgPiBtX21hcHBpbmdSYW5nZS5zZWNvbmQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIC8vICJbb2Zmc2V0LCBvZmZzZXQgKyByYW5nZVNpemUpIGRvZXMgbm90IG92
ZXJsYXAgYW5vdGhlciByYW5nZSBpbiB0aGlzLltbbWFwcGVkX3Jhbmdlc11dLiIKKyAgICBpZiAo
bV9tYXBwZWRSYW5nZXMub3ZlcmxhcHMoeyBvZmZzZXQsIG9mZnNldCArIHJhbmdlU2l6ZSB9KSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQqIEJ1
ZmZlcjo6Z2V0TWFwcGVkUmFuZ2Uoc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpCiB7Ci0gICAg
VU5VU0VEX1BBUkFNKG9mZnNldCk7Ci0gICAgVU5VU0VEX1BBUkFNKHNpemUpOwotICAgIHJldHVy
biBudWxscHRyOworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2RvbS1n
cHVidWZmZXItZ2V0bWFwcGVkcmFuZ2UKKworICAgIC8vICJJZiBzaXplIGlzIG1pc3Npbmc6IExl
dCByYW5nZVNpemUgYmUgbWF4KDAsIHRoaXMuW1tzaXplXV0gLSBvZmZzZXQpLiIKKyAgICAvLyBG
SVhNRTogVXNlIGNoZWNrZWQgYXJpdGhtZXRpYy4KKyAgICBhdXRvIHJhbmdlU2l6ZSA9IHNpemU7
CisgICAgaWYgKHNpemUgPT0gV0dQVV9XSE9MRV9NQVBfU0laRSkKKyAgICAgICAgcmFuZ2VTaXpl
ID0gc3RkOjptYXgoc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwgbV9zaXplIC0gb2Zmc2V0KTsKKwor
ICAgIC8vICJJZiBhbnkgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSB1bnNhdGlzZmll
ZCIKKyAgICBpZiAoIXZhbGlkYXRlR2V0TWFwcGVkUmFuZ2Uob2Zmc2V0LCByYW5nZVNpemUpKSB7
CisgICAgICAgIC8vIEZJWE1FOiAidGhyb3cgYW4gT3BlcmF0aW9uRXJyb3IgYW5kIHN0b3AuIgor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICAvLyAiTGV0IG0gYmUgYSBuZXcg
QXJyYXlCdWZmZXIgb2Ygc2l6ZSByYW5nZVNpemUgcG9pbnRpbmcgYXQgdGhlIGNvbnRlbnQgb2Yg
dGhpcy5bW21hcHBpbmddXSBhdCBvZmZzZXQgb2Zmc2V0IC0gdGhpcy5bW21hcHBpbmdfcmFuZ2Vd
XVswXS4iCisKKyAgICAvLyAiQXBwZW5kIG0gdG8gdGhpcy5bW21hcHBlZF9yYW5nZXNdXS4iCisg
ICAgbV9tYXBwZWRSYW5nZXMuYWRkKHsgb2Zmc2V0LCBvZmZzZXQgKyByYW5nZVNpemUgfSk7CisK
KyAgICAvLyAiUmV0dXJuIG0uIgorICAgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4obV9idWZm
ZXIuY29udGVudHMpICsgb2Zmc2V0OworfQorCitib29sIEJ1ZmZlcjo6dmFsaWRhdGVNYXBBc3lu
YyhXR1BVTWFwTW9kZUZsYWdzIG1vZGUsIHNpemVfdCBvZmZzZXQsIHNpemVfdCByYW5nZVNpemUp
IGNvbnN0Cit7CisgICAgLy8gRklYTUU6ICJ0aGlzIGlzIGEgdmFsaWQgR1BVQnVmZmVyLiBUT0RP
OiBjaGVjayBkZXN0cm95ZWQgc3RhdGU/IgorCisgICAgLy8gIm9mZnNldCBpcyBhIG11bHRpcGxl
IG9mIDguIgorICAgIGlmIChpc05vdE11bHRpcGxlT2ZQb3dlck9mVHdvKG9mZnNldCwgOCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJyYW5nZVNpemUgaXMgYSBtdWx0aXBsZSBv
ZiA0LiIKKyAgICBpZiAoaXNOb3RNdWx0aXBsZU9mUG93ZXJPZlR3byhyYW5nZVNpemUsIDQpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAib2Zmc2V0ICsgcmFuZ2VTaXplIGlzIGxl
c3Mgb3IgZXF1YWwgdG8gdGhpcy5bW3NpemVdXSIKKyAgICAvLyBGSVhNRTogVXNlIGNoZWNrZWQg
YXJpdGhtZXRpYy4KKyAgICBpZiAob2Zmc2V0ICsgcmFuZ2VTaXplID4gbV9zaXplKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAidGhpcy5bW3N0YXRlXV0gaXMgdW5tYXBwZWQiCisg
ICAgaWYgKG1fc3RhdGUgIT0gU3RhdGU6OlVubWFwcGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAvLyAibW9kZSBjb250YWlucyBleGFjdGx5IG9uZSBvZiBSRUFEIG9yIFdSSVRFLiIK
KyAgICBhdXRvIHJlYWRXcml0ZU1vZGVGbGFncyA9IG1vZGUgJiAoV0dQVU1hcE1vZGVfUmVhZCB8
IFdHUFVNYXBNb2RlX1dyaXRlKTsKKyAgICBpZiAocmVhZFdyaXRlTW9kZUZsYWdzICE9IFdHUFVN
YXBNb2RlX1JlYWQgJiYgcmVhZFdyaXRlTW9kZUZsYWdzICE9IFdHUFVNYXBNb2RlX1dyaXRlKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAiSWYgbW9kZSBjb250YWlucyBSRUFEIHRo
ZW4gdGhpcy5bW3VzYWdlXV0gbXVzdCBjb250YWluIE1BUF9SRUFELiIKKyAgICBpZiAoKG1vZGUg
JiBXR1BVTWFwTW9kZV9SZWFkKSAmJiAhKG1fdXNhZ2UgJiBXR1BVQnVmZmVyVXNhZ2VfTWFwUmVh
ZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJJZiBtb2RlIGNvbnRhaW5zIFdS
SVRFIHRoZW4gdGhpcy5bW3VzYWdlXV0gbXVzdCBjb250YWluIE1BUF9XUklURS4iCisgICAgaWYg
KChtb2RlICYgV0dQVU1hcE1vZGVfV3JpdGUpICYmICEobV91c2FnZSAmIFdHUFVCdWZmZXJVc2Fn
ZV9NYXBXcml0ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOwog
fQogCiB2b2lkIEJ1ZmZlcjo6bWFwQXN5bmMoV0dQVU1hcE1vZGVGbGFncyBtb2RlLCBzaXplX3Qg
b2Zmc2V0LCBzaXplX3Qgc2l6ZSwgV1RGOjpGdW5jdGlvbjx2b2lkKFdHUFVCdWZmZXJNYXBBc3lu
Y1N0YXR1cyk+JiYgY2FsbGJhY2spCiB7Ci0gICAgVU5VU0VEX1BBUkFNKG1vZGUpOwotICAgIFVO
VVNFRF9QQVJBTShvZmZzZXQpOwotICAgIFVOVVNFRF9QQVJBTShzaXplKTsKLSAgICBVTlVTRURf
UEFSQU0oY2FsbGJhY2spOworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIv
I2RvbS1ncHVidWZmZXItbWFwYXN5bmMKKworICAgIC8vICJJZiBzaXplIGlzIG1pc3Npbmc6IExl
dCByYW5nZVNpemUgYmUgbWF4KDAsIHRoaXMuW1tzaXplXV0gLSBvZmZzZXQpLiIKKyAgICAvLyBG
SVhNRTogVXNlIGNoZWNrZWQgYXJpdGhtZXRpYy4KKyAgICBhdXRvIHJhbmdlU2l6ZSA9IHNpemU7
CisgICAgaWYgKHNpemUgPT0gV0dQVV9XSE9MRV9NQVBfU0laRSkKKyAgICAgICAgcmFuZ2VTaXpl
ID0gc3RkOjptYXgoc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwgbV9zaXplIC0gb2Zmc2V0KTsKKwor
ICAgIC8vICJJZiBhbnkgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSB1bnNhdGlzZmll
ZDoiCisgICAgaWYgKCF2YWxpZGF0ZU1hcEFzeW5jKG1vZGUsIG9mZnNldCwgcmFuZ2VTaXplKSkg
eworICAgICAgICAvLyBGSVhNRTogIlJlY29yZCBhIHZhbGlkYXRpb24gZXJyb3Igb24gdGhlIGN1
cnJlbnQgc2NvcGUuIgorCisgICAgICAgIC8vICJSZXR1cm4gYSBwcm9taXNlIHJlamVjdGVkIHdp
dGggYW4gT3BlcmF0aW9uRXJyb3Igb24gdGhlIERldmljZSB0aW1lbGluZS4iCisgICAgICAgIGNh
bGxiYWNrKFdHUFVCdWZmZXJNYXBBc3luY1N0YXR1c19FcnJvcik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAvLyAiU2V0IHRoaXMuW1ttYXBwaW5nXV0gdG8gcC4iCisKKyAgICAvLyAi
U2V0IHRoaXMuW1tzdGF0ZV1dIHRvIG1hcHBpbmcgcGVuZGluZy4iCisgICAgbV9zdGF0ZSA9IFN0
YXRlOjpNYXBwaW5nUGVuZGluZzsKKworICAgIC8vICJTZXQgdGhpcy5bW21hcF9tb2RlXV0gdG8g
bW9kZS4iCisgICAgbV9tYXBNb2RlID0gbW9kZTsKKworICAgIC8vICJFbnF1ZXVlIGFuIG9wZXJh
dGlvbiBvbiB0aGUgZGVmYXVsdCBxdWV1ZeKAmXMgUXVldWUgdGltZWxpbmUgdGhhdCB3aWxsIGV4
ZWN1dGUgdGhlIGZvbGxvd2luZzoiCisgICAgbV9kZXZpY2UtPmdldFF1ZXVlKCkub25TdWJtaXR0
ZWRXb3JrRG9uZSgwLCBbcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIG9mZnNldCwgcmFu
Z2VTaXplLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSAoV0dQVVF1ZXVlV29ya0RvbmVT
dGF0dXMgc3RhdHVzKSB7CisgICAgICAgIC8vICJJZiB0aGlzLltbc3RhdGVdXSBpcyBtYXBwaW5n
IHBlbmRpbmc6IgorICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+bV9zdGF0ZSA9PSBTdGF0ZTo6
TWFwcGluZ1BlbmRpbmcpIHsKKyAgICAgICAgICAgIC8vICJMZXQgbSBiZSBhIG5ldyBBcnJheUJ1
ZmZlciBvZiBzaXplIHJhbmdlU2l6ZS4iCisKKyAgICAgICAgICAgIC8vICJTZXQgdGhlIGNvbnRl
bnQgb2YgbSB0byB0aGUgY29udGVudCBvZiB0aGlz4oCZcyBhbGxvY2F0aW9uIHN0YXJ0aW5nIGF0
IG9mZnNldCBvZmZzZXQgYW5kIGZvciByYW5nZVNpemUgYnl0ZXMuIgorCisgICAgICAgICAgICAv
LyAiU2V0IHRoaXMuW1ttYXBwaW5nXV0gdG8gbS4iCisKKyAgICAgICAgICAgIC8vICJTZXQgdGhp
cy5bW3N0YXRlXV0gdG8gbWFwcGVkLiIKKyAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPm1fc3Rh
dGUgPSBTdGF0ZTo6TWFwcGVkOworCisgICAgICAgICAgICAvLyAiU2V0IHRoaXMuW1ttYXBwaW5n
X3JhbmdlXV0gdG8gW29mZnNldCwgb2Zmc2V0ICsgcmFuZ2VTaXplXS4iCisgICAgICAgICAgICBw
cm90ZWN0ZWRUaGlzLT5tX21hcHBpbmdSYW5nZSA9IHN0ZDo6bWFrZV9wYWlyKG9mZnNldCwgb2Zm
c2V0ICsgcmFuZ2VTaXplKTsKKworICAgICAgICAgICAgLy8gIlNldCB0aGlzLltbbWFwcGVkX3Jh
bmdlc11dIHRvIFtdLiIKKyAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPm1fbWFwcGVkUmFuZ2Vz
ID0gTWFwcGVkUmFuZ2VzKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyAiUmVzb2x2ZSBwLiIK
KyAgICAgICAgc3dpdGNoIChzdGF0dXMpIHsKKyAgICAgICAgY2FzZSBXR1BVUXVldWVXb3JrRG9u
ZVN0YXR1c19TdWNjZXNzOgorICAgICAgICAgICAgY2FsbGJhY2soV0dQVUJ1ZmZlck1hcEFzeW5j
U3RhdHVzX1N1Y2Nlc3MpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFdHUFVR
dWV1ZVdvcmtEb25lU3RhdHVzX0Vycm9yOgorICAgICAgICAgICAgY2FsbGJhY2soV0dQVUJ1ZmZl
ck1hcEFzeW5jU3RhdHVzX0Vycm9yKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2Fz
ZSBXR1BVUXVldWVXb3JrRG9uZVN0YXR1c19Vbmtub3duOgorICAgICAgICAgICAgY2FsbGJhY2so
V0dQVUJ1ZmZlck1hcEFzeW5jU3RhdHVzX1Vua25vd24pOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBjYXNlIFdHUFVRdWV1ZVdvcmtEb25lU3RhdHVzX0RldmljZUxvc3Q6CisgICAgICAg
ICAgICBjYWxsYmFjayhXR1BVQnVmZmVyTWFwQXN5bmNTdGF0dXNfRGV2aWNlTG9zdCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGNhbGxiYWNrKFdHUFVCdWZmZXJNYXBBc3luY1N0YXR1
c19FcnJvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9KTsKK30KKwor
Ym9vbCBCdWZmZXI6OnZhbGlkYXRlVW5tYXAoKSBjb25zdAoreworICAgIC8vICJ0aGlzLltbc3Rh
dGVdXSBtdXN0IGJlIG1hcHBlZCBhdCBjcmVhdGlvbiwgbWFwcGluZyBwZW5kaW5nLCBvciBtYXBw
ZWQuIgorICAgIGlmIChtX3N0YXRlICE9IFN0YXRlOjpNYXBwZWRBdENyZWF0aW9uCisgICAgICAg
ICYmIG1fc3RhdGUgIT0gU3RhdGU6Ok1hcHBpbmdQZW5kaW5nCisgICAgICAgICYmIG1fc3RhdGUg
IT0gU3RhdGU6Ok1hcHBlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRy
dWU7CiB9CiAKIHZvaWQgQnVmZmVyOjp1bm1hcCgpCiB7CisgICAgLy8gaHR0cHM6Ly9ncHV3ZWIu
Z2l0aHViLmlvL2dwdXdlYi8jZG9tLWdwdWJ1ZmZlci11bm1hcAorCisgICAgLy8gIklmIGFueSBv
ZiB0aGUgZm9sbG93aW5nIHJlcXVpcmVtZW50cyBhcmUgdW5tZXQiCisgICAgaWYgKHZhbGlkYXRl
VW5tYXAoKSkgeworICAgICAgICAvLyBGSVhNRTogImdlbmVyYXRlIGEgdmFsaWRhdGlvbiBlcnJv
ciBhbmQgc3RvcC4iCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyAiSWYgdGhpcy5b
W3N0YXRlXV0gaXMgbWFwcGluZyBwZW5kaW5nOiIKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6
TWFwcGluZ1BlbmRpbmcpIHsKKyAgICAgICAgLy8gRklYTUU6ICJSZWplY3QgW1ttYXBwaW5nXV0g
d2l0aCBhbiBBYm9ydEVycm9yLiIKKworICAgICAgICAvLyAiU2V0IHRoaXMuW1ttYXBwaW5nXV0g
dG8gbnVsbC4iCisgICAgfQorCisgICAgLy8gIklmIHRoaXMuW1tzdGF0ZV1dIGlzIG1hcHBlZCBv
ciBtYXBwZWQgYXQgY3JlYXRpb246IgorICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpNYXBwZWQg
fHwgbV9zdGF0ZSA9PSBTdGF0ZTo6TWFwcGVkQXRDcmVhdGlvbikgeworICAgICAgICAvLyAiSWYg
b25lIG9mIHRoZSB0d28gZm9sbG93aW5nIGNvbmRpdGlvbnMgaG9sZHM6IgorICAgICAgICAvLyAi
dGhpcy5bW3N0YXRlXV0gaXMgbWFwcGVkIGF0IGNyZWF0aW9uIgorICAgICAgICAvLyAidGhpcy5b
W3N0YXRlXV0gaXMgbWFwcGVkIGFuZCB0aGlzLltbbWFwX21vZGVdXSBjb250YWlucyBXUklURSIK
KyAgICAgICAgLy8gIkVucXVldWUgYW4gb3BlcmF0aW9uIG9uIHRoZSBkZWZhdWx0IHF1ZXVl4oCZ
cyBRdWV1ZSB0aW1lbGluZSB0aGF0IHVwZGF0ZXMgdGhlIHRoaXMuW1ttYXBwaW5nX3JhbmdlXV0g
b2YgdGhpc+KAmXMgYWxsb2NhdGlvbiB0byB0aGUgY29udGVudCBvZiB0aGlzLltbbWFwcGluZ11d
LiIKKworICAgICAgICAvLyAiRGV0YWNoIGVhY2ggQXJyYXlCdWZmZXIgaW4gdGhpcy5bW21hcHBl
ZF9yYW5nZXNdXSBmcm9tIGl0cyBjb250ZW50LiIKKworICAgICAgICAvLyAiU2V0IHRoaXMuW1tt
YXBwaW5nXV0gdG8gbnVsbC4iCisKKyAgICAgICAgLy8gIlNldCB0aGlzLltbbWFwcGluZ19yYW5n
ZV1dIHRvIG51bGwuIgorCisgICAgICAgIC8vICJTZXQgdGhpcy5bW21hcHBlZF9yYW5nZXNdXSB0
byBudWxsLiIKKyAgICB9CisKKyAgICAvLyAiU2V0IHRoaXMuW1tzdGF0ZV1dIHRvIHVubWFwcGVk
LiIKKyAgICBtX3N0YXRlID0gU3RhdGU6OlVubWFwcGVkOwogfQogCiB2b2lkIEJ1ZmZlcjo6c2V0
TGFiZWwoY29uc3QgY2hhciogbGFiZWwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQ
VS9EZXZpY2UuaCBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0RldmljZS5oCmluZGV4IGVmOGI1ZmZl
ODE3NC4uOWI4YzBjNDBkNjc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9EZXZp
Y2UuaAorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9EZXZpY2UuaApAQCAtOTMsNiArOTMsOCBA
QCBwcml2YXRlOgogICAgIGlkPE1UTERldmljZT4gbV9kZXZpY2UgeyBuaWwgfTsKICAgICBSZWY8
UXVldWU+IG1fZGVmYXVsdFF1ZXVlOwogICAgIFJlZjxBZGFwdGVyPiBtX2FkYXB0ZXI7CisKKyAg
ICBib29sIG1faGFzVW5pZmllZE1lbW9yeSB7IGZhbHNlIH07CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0RldmljZS5tbSBiL1Nv
dXJjZS9XZWJHUFUvV2ViR1BVL0RldmljZS5tbQppbmRleCAxNzQ5ZGE2YjA2YmYuLmU5ZDA5NjEy
MWNmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvRGV2aWNlLm1tCisrKyBiL1Nv
dXJjZS9XZWJHUFUvV2ViR1BVL0RldmljZS5tbQpAQCAtNjMsNiArNjMsNyBAQCBEZXZpY2U6OkRl
dmljZShpZDxNVExEZXZpY2U+IGRldmljZSwgaWQ8TVRMQ29tbWFuZFF1ZXVlPiBkZWZhdWx0UXVl
dWUsIEFkYXB0ZXImCiAgICAgOiBtX2RldmljZShkZXZpY2UpCiAgICAgLCBtX2RlZmF1bHRRdWV1
ZShRdWV1ZTo6Y3JlYXRlKGRlZmF1bHRRdWV1ZSwgKnRoaXMpKQogICAgICwgbV9hZGFwdGVyKGFk
YXB0ZXIpCisgICAgLCBtX2hhc1VuaWZpZWRNZW1vcnkoZGV2aWNlLmhhc1VuaWZpZWRNZW1vcnkp
CiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1V0aWxpdGllcy5oIGIv
U291cmNlL1dlYkdQVS9XZWJHUFUvVXRpbGl0aWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwLi45ZGY2MGJhMWFhYTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViR1BVL1dlYkdQVS9VdGlsaXRpZXMuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJp
Z2h0IChjKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbXBvcnQg
PHd0Zi9QYWdlQmxvY2suaD4KKworbmFtZXNwYWNlIFdlYkdQVSB7CisKK2lubGluZSBib29sIGlz
Tm90TXVsdGlwbGVPZlBvd2VyT2ZUd28odWludDY0X3QgeCwgdWludDY0X3QgeSkKK3sKKyAgICBB
U1NFUlQoaXNQb3dlck9mVHdvKHkpKTsKKyAgICByZXR1cm4geCAmICh5IC0gMSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkdQVQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454663</attachid>
            <date>2022-03-14 22:04:32 -0700</date>
            <delta_ts>2022-03-16 06:43:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>24588</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">Y29tbWl0IDdmNmMxMDYxY2JiOGYyNjdmYzZiZDFlZTIzODNhYWRlODEyMWFhYjQKQXV0aG9yOiBN
eWxlcyBDLiBNYXhmaWVsZCA8bW1heGZpZWxkQGFwcGxlLmNvbT4KRGF0ZTogICBNb24gTWFyIDE0
IDIwOjMwOjI3IDIwMjIgLTA3MDAKCiAgICBQYXJ0IDYKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGY5ZmFkYjZiMDE5ZC4uZmYw
ZWRjN2JkNzA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIyLTAzLTE0ICBNeWxlcyBDLiBNYXhm
aWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkdQVV0gSW1wbGVtZW50
IGZpcnN0IGRyYWZ0IG9mIGJ1ZmZlciBtYXBwaW5nIGFjY29yZGluZyB0byB0aGUgc3BlYworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3ODcwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV1RGIGNsYXNzZXMg
dXN1YWxseSBoYXZlICd1c2luZycgc3RhdGVtZW50cyBzbyB1c2VycyBkb24ndCBoYXZlIHRvIHF1
YWxpZnkgYWxsIHVzZXMuCisKKyAgICAgICAgKiB3dGYvUmFuZ2UuaDoKKwogMjAyMi0wMy0xNCAg
TWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgRW5oYW5jZSBTdGFja0No
ZWNrIGRlYnVnZ2luZyBzdXBwb3J0IGFuZCBidW1wIHVwIHRoZSBBU0FOIHJlc2VydmVkIHpvbmUg
c2l6ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JhbmdlLmggYi9Tb3VyY2UvV1RGL3d0
Zi9SYW5nZS5oCmluZGV4IGE5NmJmOWEwNjFjNy4uZjRlY2M3YzVkNjkzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9SYW5nZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JhbmdlLmgKQEAgLTE0
MCwzICsxNDAsNSBAQCBwcml2YXRlOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5n
IFdURjo6UmFuZ2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJHUFUvQ2hhbmdlTG9nCmluZGV4IDAxZjBkNjU3NDIwMi4uZTE5MzUzZWIxNjA4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViR1BVL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViR1BVL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDIyLTAzLTE0ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1t
YXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkdQVV0gSW1wbGVtZW50IGZpcnN0IGRy
YWZ0IG9mIGJ1ZmZlciBtYXBwaW5nIGFjY29yZGluZyB0byB0aGUgc3BlYworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3ODcwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IHRoZSB2YXJpb3Vz
IEdQVUJ1ZmZlciBtZXRob2RzLCBhY2NvcmRpbmcgdG8gdGhlIGFsZ29yaXRobXMgaW4gdGhlIHNw
ZWMuCisgICAgICAgIFRoZXJlIGFyZSBhIGZldyB0aGluZ3Mgd2hpY2ggdGhlIHNwZWMgbGlzdHMg
d2hpY2ggd2UgY2FuJ3QgZG8geWV0IChsaWtlIHJlcG9ydGluZworICAgICAgICB2YWxpZGF0aW9u
IGVycm9ycyksIHNvIHRob3NlIHRoaW5ncyBhcmUgbGVmdCB3aXRoIEZJWE1Fcy4gRXZlcnkgc3Rl
cCBpcyBsaXN0ZWQgd2l0aAorICAgICAgICBsaW5rcyB0byB0aGUgc3BlYyB3aGVyZSBhcHByb3By
aWF0ZSwgYW5kIHdpdGggcXVvdGVzIHRvIHRoZSBzcGVjIGRlc2NyaWJpbmcgd2hhdAorICAgICAg
ICBpcyBiZWluZyBpbXBsZW1lbnRlZC4KKworICAgICAgICAqIFdlYkdQVS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYkdQVS9CdWZmZXIuaDoKKyAgICAgICAgKFdlYkdQ
VTo6QnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViR1BVOjpCdWZmZXI6OnNpemUgY29uc3Qp
OgorICAgICAgICAoV2ViR1BVOjpCdWZmZXI6OnVzYWdlIGNvbnN0KToKKyAgICAgICAgKiBXZWJH
UFUvQnVmZmVyLm1tOgorICAgICAgICAoV2ViR1BVOjp2YWxpZGF0ZURlc2NyaXB0b3IpOgorICAg
ICAgICAoV2ViR1BVOjp2YWxpZGF0ZUNyZWF0ZUJ1ZmZlcik6CisgICAgICAgIChXZWJHUFU6OnN0
b3JhZ2VNb2RlKToKKyAgICAgICAgKFdlYkdQVTo6RGV2aWNlOjpjcmVhdGVCdWZmZXIpOgorICAg
ICAgICAoV2ViR1BVOjpCdWZmZXI6OkJ1ZmZlcik6CisgICAgICAgIChXZWJHUFU6OkJ1ZmZlcjo6
ZGVzdHJveSk6CisgICAgICAgIChXZWJHUFU6OkJ1ZmZlcjo6Z2V0Q29uc3RNYXBwZWRSYW5nZSk6
CisgICAgICAgIChXZWJHUFU6OkJ1ZmZlcjo6dmFsaWRhdGVHZXRNYXBwZWRSYW5nZSBjb25zdCk6
CisgICAgICAgIChXZWJHUFU6OkJ1ZmZlcjo6Z2V0TWFwcGVkUmFuZ2UpOgorICAgICAgICAoV2Vi
R1BVOjpCdWZmZXI6OnZhbGlkYXRlTWFwQXN5bmMgY29uc3QpOgorICAgICAgICAoV2ViR1BVOjpC
dWZmZXI6Om1hcEFzeW5jKToKKyAgICAgICAgKFdlYkdQVTo6QnVmZmVyOjp2YWxpZGF0ZVVubWFw
IGNvbnN0KToKKyAgICAgICAgKFdlYkdQVTo6QnVmZmVyOjp1bm1hcCk6CisgICAgICAgICogV2Vi
R1BVL0RldmljZS5oOgorICAgICAgICAqIFdlYkdQVS9EZXZpY2UubW06CisgICAgICAgIChXZWJH
UFU6OkRldmljZTo6RGV2aWNlKToKKyAgICAgICAgKiBXZWJHUFUvVXRpbGl0aWVzLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJHUFUvV2ViR1BVL0J1ZmZlci5oLgorICAgICAgICAoV2ViR1BVOjpp
c05vdE11bHRpcGxlT2ZQb3dlck9mVHdvKToKKwogMjAyMi0wMy0xNCAgTXlsZXMgQy4gTWF4Zmll
bGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWJHUFVdIEltcGxlbWVudCBx
dWV1ZSBzdWJtaXNzaW9uIG1ldGhvZHMgYWNjb3JkaW5nIHRvIHRoZSBzcGVjCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dlYkdQVS9XZWJHUFUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmNzQ0MDI5OTkx
MTIuLjJiNzk1ZDlhZThkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC0xMzMsNiArMTMzLDcgQEAKIAkJMUM1MzE5QkQyN0JEQzZDQjAw
Q0QxMjdFIC8qIENvbW1hbmRMaW5lUGxheWdyb3VuZCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5j
bHVkZUluSW5kZXggPSAwOyBwYXRoID0gQ29tbWFuZExpbmVQbGF5Z3JvdW5kOyBzb3VyY2VUcmVl
ID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQkxQzUzMTlCRjI3QkRDNkNDMDBDRDEyN0UgLyog
bWFpbi5zd2lmdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuc3dpZnQ7IHBhdGggPSBtYWluLnN3aWZ0OyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxQzUzMTlDQTI3QkRENzAwMDBDRDEyN0UgLyogQ29tbWFuZExpbmVQbGF5
Z3JvdW5kLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IENvbW1hbmRMaW5lUGxheWdyb3VuZC54Y2Nv
bmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM1ODJGRjYyN0UwM0U1NjAwOUI0
MEYwIC8qIFV0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVdGlsaXRpZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM1QUNBOTIyNzNBNDFDMjAwOTVGOEQ1IC8qIEluc3RhbmNl
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSW5zdGFuY2UubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFDNUFDQTk2MjczQTQyNkQwMDk1RjhENSAvKiBTdXJmYWNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN1cmZhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMUM1QUNBOTcyNzNBNDI2RDAwOTVGOEQ1IC8qIFN3YXBDaGFpbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTd2FwQ2hhaW4uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTM3Myw2ICszNzQsNyBAQAogCQkJCTFDRUJEN0U2MjcxNkFGQkEwMEE1
MjU0RCAvKiBXZWJHUFUuaCAqLywKIAkJCQkxQ0MwQzhDOTI3M0E3RDg5MDBEMEI0ODEgLyogV2Vi
R1BVLm1vZHVsZW1hcCAqLywKIAkJCQkxQzVBQ0FEMjI3M0E0Qzg2MDA5NUY4RDUgLyogV2ViR1BV
RXh0LmggKi8sCisJCQkJMUM1ODJGRjYyN0UwM0U1NjAwOUI0MEYwIC8qIFV0aWxpdGllcy5oICov
LAogCQkJKTsKIAkJCXBhdGggPSBXZWJHUFU7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJHUFUvQnVmZmVyLmggYi9Tb3VyY2UvV2ViR1BV
L1dlYkdQVS9CdWZmZXIuaAppbmRleCA5NTA2NjMxYmU5YTMuLjliZTA3ZDUzZjU1NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkdQVS9X
ZWJHUFUvQnVmZmVyLmgKQEAgLTI1LDE5ICsyNSwyNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lt
cG9ydCA8dXRpbGl0eT4KICNpbXBvcnQgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW1wb3J0IDx3dGYv
RnVuY3Rpb24uaD4KKyNpbXBvcnQgPHd0Zi9SYW5nZS5oPgorI2ltcG9ydCA8d3RmL1JhbmdlU2V0
Lmg+CiAjaW1wb3J0IDx3dGYvUmVmLmg+Ci0jaW1wb3J0IDx3dGYvUmVmQ291bnRlZC5oPgorI2lt
cG9ydCA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJHUFUgewog
Ci1jbGFzcyBCdWZmZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxCdWZmZXI+IHsKK2NsYXNzIERldmlj
ZTsKKworY2xhc3MgQnVmZmVyIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEJ1ZmZlcj4g
ewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
QnVmZmVyPiBjcmVhdGUoaWQ8TVRMQnVmZmVyPiBidWZmZXIpCisgICAgZW51bSBjbGFzcyBTdGF0
ZSA6IHVpbnQ4X3Q7CisgICAgdXNpbmcgTWFwcGluZ1JhbmdlID0gc3RkOjpwYWlyPHNpemVfdCwg
c2l6ZV90PjsKKworICAgIHN0YXRpYyBSZWY8QnVmZmVyPiBjcmVhdGUoaWQ8TVRMQnVmZmVyPiBi
dWZmZXIsIHVpbnQ2NF90IHNpemUsIFdHUFVCdWZmZXJVc2FnZUZsYWdzIHVzYWdlLCBTdGF0ZSBp
bml0aWFsU3RhdGUsIE1hcHBpbmdSYW5nZSBpbml0aWFsTWFwcGluZ1JhbmdlLCBEZXZpY2UmIGRl
dmljZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEJ1ZmZlcihidWZmZXIp
KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQnVmZmVyKGJ1ZmZlciwgc2l6ZSwgdXNh
Z2UsIGluaXRpYWxTdGF0ZSwgaW5pdGlhbE1hcHBpbmdSYW5nZSwgZGV2aWNlKSk7CiAgICAgfQog
CiAgICAgfkJ1ZmZlcigpOwpAQCAtNDksMTIgKzU3LDQxIEBAIHB1YmxpYzoKICAgICB2b2lkIHVu
bWFwKCk7CiAgICAgdm9pZCBzZXRMYWJlbChjb25zdCBjaGFyKik7CiAKKyAgICAvLyBodHRwczov
L2dwdXdlYi5naXRodWIuaW8vZ3B1d2ViLyNidWZmZXItc3RhdGUKKyAgICAvLyBFYWNoIEdQVUJ1
ZmZlciBoYXMgYSBjdXJyZW50IGJ1ZmZlciBzdGF0ZSBvbiB0aGUgQ29udGVudCB0aW1lbGluZSB3
aGljaCBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyAgICBlbnVtIGNsYXNzIFN0YXRlIDogdWlu
dDhfdCB7CisgICAgICAgIE1hcHBlZCwgLy8gIndoZXJlIHRoZSBHUFVCdWZmZXIgaXMgYXZhaWxh
YmxlIGZvciBDUFUgb3BlcmF0aW9ucyBvbiBpdHMgY29udGVudC4iCisgICAgICAgIE1hcHBlZEF0
Q3JlYXRpb24sIC8vICJ3aGVyZSB0aGUgR1BVQnVmZmVyIHdhcyBqdXN0IGNyZWF0ZWQgYW5kIGlz
IGF2YWlsYWJsZSBmb3IgQ1BVIG9wZXJhdGlvbnMgb24gaXRzIGNvbnRlbnQuIgorICAgICAgICBN
YXBwaW5nUGVuZGluZywgLy8gIndoZXJlIHRoZSBHUFVCdWZmZXIgaXMgYmVpbmcgbWFkZSBhdmFp
bGFibGUgZm9yIENQVSBvcGVyYXRpb25zIG9uIGl0cyBjb250ZW50LiIKKyAgICAgICAgVW5tYXBw
ZWQsIC8vICJ3aGVyZSB0aGUgR1BVQnVmZmVyIGlzIGF2YWlsYWJsZSBmb3IgR1BVIG9wZXJhdGlv
bnMuIgorICAgICAgICBEZXN0cm95ZWQsIC8vICJ3aGVyZSB0aGUgR1BVQnVmZmVyIGlzIG5vIGxv
bmdlciBhdmFpbGFibGUgZm9yIGFueSBvcGVyYXRpb25zIGV4Y2VwdCBkZXN0cm95LiIKKyAgICB9
OworCiAgICAgaWQ8TVRMQnVmZmVyPiBidWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlcjsg
fQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgV0dQVUJ1
ZmZlclVzYWdlRmxhZ3MgdXNhZ2UoKSBjb25zdCB7IHJldHVybiBtX3VzYWdlOyB9CiAKIHByaXZh
dGU6Ci0gICAgQnVmZmVyKGlkPE1UTEJ1ZmZlcj4pOworICAgIEJ1ZmZlcihpZDxNVExCdWZmZXI+
LCB1aW50NjRfdCBzaXplLCBXR1BVQnVmZmVyVXNhZ2VGbGFncywgU3RhdGUgaW5pdGlhbFN0YXRl
LCBNYXBwaW5nUmFuZ2UgaW5pdGlhbE1hcHBpbmdSYW5nZSwgRGV2aWNlJik7CisKKyAgICBib29s
IHZhbGlkYXRlR2V0TWFwcGVkUmFuZ2Uoc2l6ZV90IG9mZnNldCwgc2l6ZV90IHJhbmdlU2l6ZSkg
Y29uc3Q7CisgICAgYm9vbCB2YWxpZGF0ZU1hcEFzeW5jKFdHUFVNYXBNb2RlRmxhZ3MsIHNpemVf
dCBvZmZzZXQsIHNpemVfdCByYW5nZVNpemUpIGNvbnN0OworICAgIGJvb2wgdmFsaWRhdGVVbm1h
cCgpIGNvbnN0OwogCiAgICAgaWQ8TVRMQnVmZmVyPiBtX2J1ZmZlciB7IG5pbCB9OworCisgICAg
Ly8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8jYnVmZmVyLWludGVyZmFjZQorICAg
IC8vICJHUFVCdWZmZXIgaGFzIHRoZSBmb2xsb3dpbmcgaW50ZXJuYWwgc2xvdHM6IgorICAgIHNp
emVfdCBtX3NpemUgeyAwIH07IC8vICJUaGUgbGVuZ3RoIG9mIHRoZSBHUFVCdWZmZXIgYWxsb2Nh
dGlvbiBpbiBieXRlcy4iCisgICAgV0dQVUJ1ZmZlclVzYWdlRmxhZ3MgbV91c2FnZSB7IDAgfTsg
Ly8gIlRoZSBhbGxvd2VkIHVzYWdlcyBmb3IgdGhpcyBHUFVCdWZmZXIuIgorICAgIFN0YXRlIG1f
c3RhdGUgeyBTdGF0ZTo6VW5tYXBwZWQgfTsgLy8gIlRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBH
UFVCdWZmZXIuIgorICAgIC8vICJbW21hcHBpbmddXSBvZiB0eXBlIEFycmF5QnVmZmVyIG9yIFBy
b21pc2Ugb3IgbnVsbC4iIFRoaXMgaXMgdW5uZWNlc3Nhcnk7IHdlIGNhbiBqdXN0IHVzZSBtX2Rl
dmljZS5jb250ZW50cy4KKyAgICBNYXBwaW5nUmFuZ2UgbV9tYXBwaW5nUmFuZ2UgeyAwLCAwIH07
IC8vICJbW21hcHBpbmdfcmFuZ2VdXSBvZiB0eXBlIGxpc3Q8dW5zaWduZWQgbG9uZyBsb25nPiBv
ciBudWxsLiIKKyAgICB1c2luZyBNYXBwZWRSYW5nZXMgPSBSYW5nZVNldDxSYW5nZTxzaXplX3Q+
PjsKKyAgICBNYXBwZWRSYW5nZXMgbV9tYXBwZWRSYW5nZXM7IC8vICJbW21hcHBlZF9yYW5nZXNd
XSBvZiB0eXBlIGxpc3Q8QXJyYXlCdWZmZXI+IG9yIG51bGwuIgorICAgIFdHUFVNYXBNb2RlRmxh
Z3MgbV9tYXBNb2RlIHsgV0dQVU1hcE1vZGVfTm9uZSB9OyAvLyAiVGhlIEdQVU1hcE1vZGVGbGFn
cyBvZiB0aGUgbGFzdCBjYWxsIHRvIG1hcEFzeW5jKCkgKGlmIGFueSkuIgorCisgICAgUmVmPERl
dmljZT4gbV9kZXZpY2U7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJHUFUvV2ViR1BVL0J1ZmZlci5tbSBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0J1
ZmZlci5tbQppbmRleCA2MWFkYTc5YWFkODIuLmYyMTA2NzNhMTBkNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkdQVS9XZWJHUFUvQnVmZmVyLm1tCisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0J1
ZmZlci5tbQpAQCAtMjcsMTcgKzI3LDEyNSBAQAogI2ltcG9ydCAiQnVmZmVyLmgiCiAKICNpbXBv
cnQgIkRldmljZS5oIgorI2ltcG9ydCAiVXRpbGl0aWVzLmgiCisjaW1wb3J0IDx3dGYvU3RkTGli
RXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJHUFUgewogCitzdGF0aWMgYm9vbCB2YWxpZGF0ZURl
c2NyaXB0b3IoY29uc3QgRGV2aWNlJiBkZXZpY2UsIGNvbnN0IFdHUFVCdWZmZXJEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yKQoreworICAgIFVOVVNFRF9QQVJBTShkZXZpY2UpOworCisgICAgLy8gaHR0
cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8jYWJzdHJhY3Qtb3BkZWYtdmFsaWRhdGluZy1n
cHVidWZmZXJkZXNjcmlwdG9yCisKKyAgICAvLyBGSVhNRTogIklmIGRldmljZSBpcyBsb3N0IHJl
dHVybiBmYWxzZS4iCisKKyAgICAvLyBGSVhNRTogIklmIGFueSBvZiB0aGUgYml0cyBvZiBkZXNj
cmlwdG9y4oCZcyB1c2FnZSBhcmVu4oCZdCBwcmVzZW50IGluIHRoaXMgZGV2aWNl4oCZcyBbW2Fs
bG93ZWQgYnVmZmVyIHVzYWdlc11dIHJldHVybiBmYWxzZS4iCisKKyAgICAvLyAiSWYgYm90aCB0
aGUgTUFQX1JFQUQgYW5kIE1BUF9XUklURSBiaXRzIG9mIGRlc2NyaXB0b3LigJlzIHVzYWdlIGF0
dHJpYnV0ZSBhcmUgc2V0LCByZXR1cm4gZmFsc2UuIgorICAgIGlmICgoZGVzY3JpcHRvci51c2Fn
ZSAmIFdHUFVCdWZmZXJVc2FnZV9NYXBSZWFkKSAmJiAoZGVzY3JpcHRvci51c2FnZSAmIFdHUFVC
dWZmZXJVc2FnZV9NYXBXcml0ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVy
biB0cnVlOworfQorCitzdGF0aWMgYm9vbCB2YWxpZGF0ZUNyZWF0ZUJ1ZmZlcihjb25zdCBEZXZp
Y2UmIGRldmljZSwgY29uc3QgV0dQVUJ1ZmZlckRlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7Cisg
ICAgLy8gRklYTUU6ICJ0aGlzIGlzIGEgdmFsaWQgR1BVRGV2aWNlLiIKKworICAgIC8vICJ2YWxp
ZGF0aW5nIEdQVUJ1ZmZlckRlc2NyaXB0b3IodGhpcywgZGVzY3JpcHRvcikgcmV0dXJucyB0cnVl
LiIKKyAgICBpZiAoIXZhbGlkYXRlRGVzY3JpcHRvcihkZXZpY2UsIGRlc2NyaXB0b3IpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAiZGVzY3JpcHRvci51c2FnZSBtdXN0IG5vdCBi
ZSAwLiIKKyAgICBpZiAoIWRlc2NyaXB0b3IudXNhZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vIEZJWE1FOiAiZGVzY3JpcHRvci51c2FnZSBpcyBhIHN1YnNldCBvZiB0aGlzLltb
YWxsb3dlZCBidWZmZXIgdXNhZ2VzXV0uIgorCisgICAgLy8gIklmIGRlc2NyaXB0b3IudXNhZ2Ug
Y29udGFpbnMgTUFQX1JFQUQ6IGRlc2NyaXB0b3IudXNhZ2UgY29udGFpbnMgbm8gb3RoZXIgZmxh
Z3MgZXhjZXB0IENPUFlfRFNULiIKKyAgICBpZiAoKGRlc2NyaXB0b3IudXNhZ2UgJiBXR1BVQnVm
ZmVyVXNhZ2VfTWFwUmVhZCkKKyAgICAgICAgJiYgKGRlc2NyaXB0b3IudXNhZ2UgJiB+V0dQVUJ1
ZmZlclVzYWdlX0NvcHlEc3QgJiB+V0dQVUJ1ZmZlclVzYWdlX01hcFJlYWQpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAvLyAiSWYgZGVzY3JpcHRvci51c2FnZSBjb250YWlucyBNQVBf
V1JJVEU6IGRlc2NyaXB0b3IudXNhZ2UgY29udGFpbnMgbm8gb3RoZXIgZmxhZ3MgZXhjZXB0IENP
UFlfU1JDLiIKKyAgICBpZiAoKGRlc2NyaXB0b3IudXNhZ2UgJiBXR1BVQnVmZmVyVXNhZ2VfTWFw
V3JpdGUpCisgICAgICAgICYmIChkZXNjcmlwdG9yLnVzYWdlICYgfldHUFVCdWZmZXJVc2FnZV9D
b3B5U3JjICYgfldHUFVCdWZmZXJVc2FnZV9NYXBXcml0ZSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIC8vICJJZiBkZXNjcmlwdG9yLm1hcHBlZEF0Q3JlYXRpb24gaXMgdHJ1ZTogZGVz
Y3JpcHRvci5zaXplIGlzIGEgbXVsdGlwbGUgb2YgNC4iCisgICAgaWYgKGRlc2NyaXB0b3IubWFw
cGVkQXRDcmVhdGlvbiAmJiBpc05vdE11bHRpcGxlT2ZQb3dlck9mVHdvKGRlc2NyaXB0b3Iuc2l6
ZSwgNCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitz
dGF0aWMgTVRMU3RvcmFnZU1vZGUgc3RvcmFnZU1vZGUoYm9vbCBkZXZpY2VIYXNVbmlmaWVkTWVt
b3J5LCBXR1BVQnVmZmVyVXNhZ2VGbGFncyB1c2FnZSkKK3sKKyAgICBpZiAoZGV2aWNlSGFzVW5p
ZmllZE1lbW9yeSkKKyAgICAgICAgcmV0dXJuIE1UTFN0b3JhZ2VNb2RlU2hhcmVkOworICAgIC8v
IE9uIGRpc2NyZXRlIG1lbW9yeSBHUFVzLCBtYXBwYWJsZSBtZW1vcnkgaXMgc2hhcmVkLCB3aGVy
ZWFzIG5vbi1tYXBwYWJsZSBtZW1vcnkgaXMgcHJpdmF0ZS4KKyAgICAvLyBUaGVyZSBpcyBubyBz
aXR1YXRpb24gd2hlcmUgd2UnbGwgdXNlIHRoZSBtYW5hZ2VkIHN0b3JhZ2UgbW9kZS4KKyAgICBp
ZiAoKHVzYWdlICYgV0dQVUJ1ZmZlclVzYWdlX01hcFJlYWQpIHx8ICh1c2FnZSAmIFdHUFVCdWZm
ZXJVc2FnZV9NYXBXcml0ZSkpCisgICAgICAgIHJldHVybiBNVExTdG9yYWdlTW9kZVNoYXJlZDsK
KyAgICByZXR1cm4gTVRMU3RvcmFnZU1vZGVQcml2YXRlOworfQorCiBSZWZQdHI8QnVmZmVyPiBE
ZXZpY2U6OmNyZWF0ZUJ1ZmZlcihjb25zdCBXR1BVQnVmZmVyRGVzY3JpcHRvciYgZGVzY3JpcHRv
cikKIHsKLSAgICBVTlVTRURfUEFSQU0oZGVzY3JpcHRvcik7Ci0gICAgcmV0dXJuIEJ1ZmZlcjo6
Y3JlYXRlKG5pbCk7CisgICAgaWYgKGRlc2NyaXB0b3IubmV4dEluQ2hhaW4pCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8j
ZG9tLWdwdWRldmljZS1jcmVhdGVidWZmZXIKKworICAgIC8vICJJZiBhbnkgb2YgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZSB1bnNhdGlzZmllZCwgcmV0dXJuIGFuIGVycm9yIGJ1ZmZlciBh
bmQgc3RvcC4iCisgICAgaWYgKCF2YWxpZGF0ZUNyZWF0ZUJ1ZmZlcigqdGhpcywgZGVzY3JpcHRv
cikpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gRklYTUU6IFVzZSBoZWFwIGFs
bG9jYXRpb24gdG8gbWFrZSB0aGlzIGZhc3Rlci4KKyAgICAvLyBJZi93aGVuIHdlIGRvIHRoYXQs
IHdlIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgIm5ldyIgYnVmZmVycyBnZXQgY2xlYXJlZCB0byAw
LgorICAgIC8vIEZJWE1FOiBDb25zaWRlciB3cml0ZS1jb21iaW5pbmcgQ1BVIGNhY2hlIG1vZGUu
CisgICAgLy8gRklYTUU6IENvbnNpZGVyIGltcGxlbWVudGluZyBoYXphcmQgdHJhY2tpbmcgb3Vy
c2VsZi4KKyAgICBNVExTdG9yYWdlTW9kZSBzdG9yYWdlTW9kZSA9IFdlYkdQVTo6c3RvcmFnZU1v
ZGUobV9oYXNVbmlmaWVkTWVtb3J5LCBkZXNjcmlwdG9yLnVzYWdlKTsKKyAgICBpZDxNVExCdWZm
ZXI+IGJ1ZmZlciA9IFttX2RldmljZSBuZXdCdWZmZXJXaXRoTGVuZ3RoOmRlc2NyaXB0b3Iuc2l6
ZSBvcHRpb25zOnN0b3JhZ2VNb2RlXTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBidWZmZXIubGFiZWwgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENTdHJp
bmc6ZGVzY3JpcHRvci5sYWJlbCBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107CisKKyAg
ICAvLyBGSVhNRTogSGFuZGxlIGRlc2NyaXB0b3IubWFwcGVkQXRDcmVhdGlvbi4KKyAgICAvLyBC
ZWNhdXNlIG5vbi1tYXBwYWJsZSBidWZmZXJzIGNhbiBiZSBtYXBwZWQgYXQgY3JlYXRpb24sCisg
ICAgLy8gdGhpcyBtZWFucyB3ZSBoYXZlIHRvIGhhdmUgYSB0ZW1wb3JhcnkgYnVmZmVyIG1hcHBl
ZCwKKyAgICAvLyBhbmQgd2UgY2FuIHRvIHNjaGVkdWxlIGEgY29weSBjb21tYW5kIHdoZW4gaXQg
Z2V0cyB1bm1hcHBlZCwKKyAgICAvLyBwcmVzdW1hYmx5IGF0IGZpcnN0IHVzZS4KKworICAgIC8v
ICJMZXQgYiBiZSBhIG5ldyBHUFVCdWZmZXIgb2JqZWN0LiIKKyAgICAvLyAiU2V0IGIuW1tzaXpl
XV0gdG8gZGVzY3JpcHRvci5zaXplLiIKKyAgICAvLyAiU2V0IGIuW1t1c2FnZV1dIHRvIGRlc2Ny
aXB0b3IudXNhZ2UuIgorCisgICAgLy8gIklmIGRlc2NyaXB0b3IubWFwcGVkQXRDcmVhdGlvbiBp
cyB0cnVlOiIKKyAgICBpZiAoZGVzY3JpcHRvci5tYXBwZWRBdENyZWF0aW9uKSB7CisgICAgICAg
IC8vICJTZXQgYi5bW21hcHBpbmddXSB0byBhIG5ldyBBcnJheUJ1ZmZlciBvZiBzaXplIGIuW1tz
aXplXV0uIiBUaGlzIGlzIHVubmVjZXNzYXJ5LgorICAgICAgICAvLyAiU2V0IGIuW1ttYXBwaW5n
X3JhbmdlXV0gdG8gWzAsIGRlc2NyaXB0b3Iuc2l6ZV0uIgorICAgICAgICAvLyAiU2V0IGIuW1tt
YXBwZWRfcmFuZ2VzXV0gdG8gW10uIgorICAgICAgICAvLyAiU2V0IGIuW1tzdGF0ZV1dIHRvIG1h
cHBlZCBhdCBjcmVhdGlvbi4iCisgICAgICAgIHJldHVybiBCdWZmZXI6OmNyZWF0ZShidWZmZXIs
IGRlc2NyaXB0b3Iuc2l6ZSwgZGVzY3JpcHRvci51c2FnZSwgQnVmZmVyOjpTdGF0ZTo6TWFwcGVk
QXRDcmVhdGlvbiwgc3RkOjptYWtlX3BhaXIoc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwgZGVzY3Jp
cHRvci5zaXplKSwgKnRoaXMpOworICAgIH0KKworICAgIC8vICJTZXQgYi5bW21hcHBpbmddXSB0
byBudWxsLiIgVGhpcyBpcyB1bm5lY2Vzc2FyeS4KKyAgICAvLyAiU2V0IGIuW1ttYXBwaW5nX3Jh
bmdlXV0gdG8gbnVsbC4iCisgICAgLy8gIlNldCBiLltbbWFwcGVkX3Jhbmdlc11dIHRvIG51bGwu
IgorICAgIC8vICJTZXQgYi5bW3N0YXRlXV0gdG8gdW5tYXBwZWQuIgorICAgIHJldHVybiBCdWZm
ZXI6OmNyZWF0ZShidWZmZXIsIGRlc2NyaXB0b3Iuc2l6ZSwgZGVzY3JpcHRvci51c2FnZSwgQnVm
ZmVyOjpTdGF0ZTo6VW5tYXBwZWQsIHN0ZDo6bWFrZV9wYWlyKHN0YXRpY19jYXN0PHNpemVfdD4o
MCksIHN0YXRpY19jYXN0PHNpemVfdD4oMCkpLCAqdGhpcyk7CiB9CiAKLUJ1ZmZlcjo6QnVmZmVy
KGlkPE1UTEJ1ZmZlcj4gYnVmZmVyKQorQnVmZmVyOjpCdWZmZXIoaWQ8TVRMQnVmZmVyPiBidWZm
ZXIsIHVpbnQ2NF90IHNpemUsIFdHUFVCdWZmZXJVc2FnZUZsYWdzIHVzYWdlLCBTdGF0ZSBpbml0
aWFsU3RhdGUsIE1hcHBpbmdSYW5nZSBpbml0aWFsTWFwcGluZ1JhbmdlLCBEZXZpY2UmIGRldmlj
ZSkKICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKKyAgICAsIG1fc2l6ZShzaXplKQorICAgICwgbV91
c2FnZSh1c2FnZSkKKyAgICAsIG1fc3RhdGUoaW5pdGlhbFN0YXRlKQorICAgICwgbV9tYXBwaW5n
UmFuZ2UoaW5pdGlhbE1hcHBpbmdSYW5nZSkKKyAgICAsIG1fZGV2aWNlKGRldmljZSkKIHsKIH0K
IApAQCAtNDUsMzIgKzE1MywyMzIgQEAgQnVmZmVyOjp+QnVmZmVyKCkgPSBkZWZhdWx0OwogCiB2
b2lkIEJ1ZmZlcjo6ZGVzdHJveSgpCiB7CisgICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlv
L2dwdXdlYi8jZG9tLWdwdWJ1ZmZlci1kZXN0cm95CisKKyAgICAvLyAiSWYgdGhlIHRoaXMuW1tz
dGF0ZV1dIGlzIG5vdCBlaXRoZXIgb2YgdW5tYXBwZWQgb3IgZGVzdHJveWVkOiBSdW4gdGhlIHN0
ZXBzIHRvIHVubWFwIHRoaXMuIgorICAgIGlmIChtX3N0YXRlICE9IFN0YXRlOjpVbm1hcHBlZCAm
JiBtX3N0YXRlICE9IFN0YXRlOjpEZXN0cm95ZWQpIHsKKyAgICAgICAgLy8gRklYTUU6IEFTU0VS
VCgpIHRoYXQgdGhpcyBjYWxsIGRvZXNuJ3QgZmFpbC4KKyAgICAgICAgdW5tYXAoKTsKKyAgICB9
CisKKyAgICAvLyAiU2V0IHRoaXMuW1tzdGF0ZV1dIHRvIGRlc3Ryb3llZC4iCisgICAgbV9zdGF0
ZSA9IFN0YXRlOjpEZXN0cm95ZWQ7CisKKyAgICBtX2J1ZmZlciA9IG5pbDsKIH0KIAogY29uc3Qg
dm9pZCogQnVmZmVyOjpnZXRDb25zdE1hcHBlZFJhbmdlKHNpemVfdCBvZmZzZXQsIHNpemVfdCBz
aXplKQogewotICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwotICAgIFVOVVNFRF9QQVJBTShzaXpl
KTsKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gZ2V0TWFwcGVkUmFuZ2Uob2Zmc2V0
LCBzaXplKTsKK30KKworYm9vbCBCdWZmZXI6OnZhbGlkYXRlR2V0TWFwcGVkUmFuZ2Uoc2l6ZV90
IG9mZnNldCwgc2l6ZV90IHJhbmdlU2l6ZSkgY29uc3QKK3sKKyAgICAvLyAidGhpcy5bW3N0YXRl
XV0gaXMgbWFwcGVkIG9yIG1hcHBlZCBhdCBjcmVhdGlvbi4iCisgICAgaWYgKG1fc3RhdGUgIT0g
U3RhdGU6Ok1hcHBlZCAmJiBtX3N0YXRlICE9IFN0YXRlOjpNYXBwZWRBdENyZWF0aW9uKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAib2Zmc2V0IGlzIGEgbXVsdGlwbGUgb2YgOC4i
CisgICAgaWYgKGlzTm90TXVsdGlwbGVPZlBvd2VyT2ZUd28ob2Zmc2V0LCA4KSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgLy8gInJhbmdlU2l6ZSBpcyBhIG11bHRpcGxlIG9mIDQuIgor
ICAgIGlmIChpc05vdE11bHRpcGxlT2ZQb3dlck9mVHdvKG9mZnNldCwgOCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIC8vICJvZmZzZXQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRv
IHRoaXMuW1ttYXBwaW5nX3JhbmdlXV1bMF0uIgorICAgIGlmIChvZmZzZXQgPCBtX21hcHBpbmdS
YW5nZS5maXJzdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gIm9mZnNldCArIHJh
bmdlU2l6ZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhpcy5bW21hcHBpbmdfcmFuZ2VdXVsx
XS4iCisgICAgLy8gRklYTUU6IFVzZWQgY2hlY2tlZCBhcml0aG1ldGljLgorICAgIGlmIChvZmZz
ZXQgKyByYW5nZVNpemUgPiBtX21hcHBpbmdSYW5nZS5zZWNvbmQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIC8vICJbb2Zmc2V0LCBvZmZzZXQgKyByYW5nZVNpemUpIGRvZXMgbm90IG92
ZXJsYXAgYW5vdGhlciByYW5nZSBpbiB0aGlzLltbbWFwcGVkX3Jhbmdlc11dLiIKKyAgICBpZiAo
bV9tYXBwZWRSYW5nZXMub3ZlcmxhcHMoeyBvZmZzZXQsIG9mZnNldCArIHJhbmdlU2l6ZSB9KSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQqIEJ1
ZmZlcjo6Z2V0TWFwcGVkUmFuZ2Uoc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpCiB7Ci0gICAg
VU5VU0VEX1BBUkFNKG9mZnNldCk7Ci0gICAgVU5VU0VEX1BBUkFNKHNpemUpOwotICAgIHJldHVy
biBudWxscHRyOworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2RvbS1n
cHVidWZmZXItZ2V0bWFwcGVkcmFuZ2UKKworICAgIC8vICJJZiBzaXplIGlzIG1pc3Npbmc6IExl
dCByYW5nZVNpemUgYmUgbWF4KDAsIHRoaXMuW1tzaXplXV0gLSBvZmZzZXQpLiIKKyAgICAvLyBG
SVhNRTogVXNlIGNoZWNrZWQgYXJpdGhtZXRpYy4KKyAgICBhdXRvIHJhbmdlU2l6ZSA9IHNpemU7
CisgICAgaWYgKHNpemUgPT0gV0dQVV9XSE9MRV9NQVBfU0laRSkKKyAgICAgICAgcmFuZ2VTaXpl
ID0gc3RkOjptYXgoc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwgbV9zaXplIC0gb2Zmc2V0KTsKKwor
ICAgIC8vICJJZiBhbnkgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSB1bnNhdGlzZmll
ZCIKKyAgICBpZiAoIXZhbGlkYXRlR2V0TWFwcGVkUmFuZ2Uob2Zmc2V0LCByYW5nZVNpemUpKSB7
CisgICAgICAgIC8vIEZJWE1FOiAidGhyb3cgYW4gT3BlcmF0aW9uRXJyb3IgYW5kIHN0b3AuIgor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICAvLyAiTGV0IG0gYmUgYSBuZXcg
QXJyYXlCdWZmZXIgb2Ygc2l6ZSByYW5nZVNpemUgcG9pbnRpbmcgYXQgdGhlIGNvbnRlbnQgb2Yg
dGhpcy5bW21hcHBpbmddXSBhdCBvZmZzZXQgb2Zmc2V0IC0gdGhpcy5bW21hcHBpbmdfcmFuZ2Vd
XVswXS4iCisKKyAgICAvLyAiQXBwZW5kIG0gdG8gdGhpcy5bW21hcHBlZF9yYW5nZXNdXS4iCisg
ICAgbV9tYXBwZWRSYW5nZXMuYWRkKHsgb2Zmc2V0LCBvZmZzZXQgKyByYW5nZVNpemUgfSk7CisK
KyAgICAvLyAiUmV0dXJuIG0uIgorICAgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4obV9idWZm
ZXIuY29udGVudHMpICsgb2Zmc2V0OworfQorCitib29sIEJ1ZmZlcjo6dmFsaWRhdGVNYXBBc3lu
YyhXR1BVTWFwTW9kZUZsYWdzIG1vZGUsIHNpemVfdCBvZmZzZXQsIHNpemVfdCByYW5nZVNpemUp
IGNvbnN0Cit7CisgICAgLy8gRklYTUU6ICJ0aGlzIGlzIGEgdmFsaWQgR1BVQnVmZmVyLiBUT0RP
OiBjaGVjayBkZXN0cm95ZWQgc3RhdGU/IgorCisgICAgLy8gIm9mZnNldCBpcyBhIG11bHRpcGxl
IG9mIDguIgorICAgIGlmIChpc05vdE11bHRpcGxlT2ZQb3dlck9mVHdvKG9mZnNldCwgOCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJyYW5nZVNpemUgaXMgYSBtdWx0aXBsZSBv
ZiA0LiIKKyAgICBpZiAoaXNOb3RNdWx0aXBsZU9mUG93ZXJPZlR3byhyYW5nZVNpemUsIDQpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAib2Zmc2V0ICsgcmFuZ2VTaXplIGlzIGxl
c3Mgb3IgZXF1YWwgdG8gdGhpcy5bW3NpemVdXSIKKyAgICAvLyBGSVhNRTogVXNlIGNoZWNrZWQg
YXJpdGhtZXRpYy4KKyAgICBpZiAob2Zmc2V0ICsgcmFuZ2VTaXplID4gbV9zaXplKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAidGhpcy5bW3N0YXRlXV0gaXMgdW5tYXBwZWQiCisg
ICAgaWYgKG1fc3RhdGUgIT0gU3RhdGU6OlVubWFwcGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAvLyAibW9kZSBjb250YWlucyBleGFjdGx5IG9uZSBvZiBSRUFEIG9yIFdSSVRFLiIK
KyAgICBhdXRvIHJlYWRXcml0ZU1vZGVGbGFncyA9IG1vZGUgJiAoV0dQVU1hcE1vZGVfUmVhZCB8
IFdHUFVNYXBNb2RlX1dyaXRlKTsKKyAgICBpZiAocmVhZFdyaXRlTW9kZUZsYWdzICE9IFdHUFVN
YXBNb2RlX1JlYWQgJiYgcmVhZFdyaXRlTW9kZUZsYWdzICE9IFdHUFVNYXBNb2RlX1dyaXRlKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAiSWYgbW9kZSBjb250YWlucyBSRUFEIHRo
ZW4gdGhpcy5bW3VzYWdlXV0gbXVzdCBjb250YWluIE1BUF9SRUFELiIKKyAgICBpZiAoKG1vZGUg
JiBXR1BVTWFwTW9kZV9SZWFkKSAmJiAhKG1fdXNhZ2UgJiBXR1BVQnVmZmVyVXNhZ2VfTWFwUmVh
ZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJJZiBtb2RlIGNvbnRhaW5zIFdS
SVRFIHRoZW4gdGhpcy5bW3VzYWdlXV0gbXVzdCBjb250YWluIE1BUF9XUklURS4iCisgICAgaWYg
KChtb2RlICYgV0dQVU1hcE1vZGVfV3JpdGUpICYmICEobV91c2FnZSAmIFdHUFVCdWZmZXJVc2Fn
ZV9NYXBXcml0ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOwog
fQogCiB2b2lkIEJ1ZmZlcjo6bWFwQXN5bmMoV0dQVU1hcE1vZGVGbGFncyBtb2RlLCBzaXplX3Qg
b2Zmc2V0LCBzaXplX3Qgc2l6ZSwgV1RGOjpGdW5jdGlvbjx2b2lkKFdHUFVCdWZmZXJNYXBBc3lu
Y1N0YXR1cyk+JiYgY2FsbGJhY2spCiB7Ci0gICAgVU5VU0VEX1BBUkFNKG1vZGUpOwotICAgIFVO
VVNFRF9QQVJBTShvZmZzZXQpOwotICAgIFVOVVNFRF9QQVJBTShzaXplKTsKLSAgICBVTlVTRURf
UEFSQU0oY2FsbGJhY2spOworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIv
I2RvbS1ncHVidWZmZXItbWFwYXN5bmMKKworICAgIC8vICJJZiBzaXplIGlzIG1pc3Npbmc6IExl
dCByYW5nZVNpemUgYmUgbWF4KDAsIHRoaXMuW1tzaXplXV0gLSBvZmZzZXQpLiIKKyAgICAvLyBG
SVhNRTogVXNlIGNoZWNrZWQgYXJpdGhtZXRpYy4KKyAgICBhdXRvIHJhbmdlU2l6ZSA9IHNpemU7
CisgICAgaWYgKHNpemUgPT0gV0dQVV9XSE9MRV9NQVBfU0laRSkKKyAgICAgICAgcmFuZ2VTaXpl
ID0gc3RkOjptYXgoc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwgbV9zaXplIC0gb2Zmc2V0KTsKKwor
ICAgIC8vICJJZiBhbnkgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSB1bnNhdGlzZmll
ZDoiCisgICAgaWYgKCF2YWxpZGF0ZU1hcEFzeW5jKG1vZGUsIG9mZnNldCwgcmFuZ2VTaXplKSkg
eworICAgICAgICAvLyBGSVhNRTogIlJlY29yZCBhIHZhbGlkYXRpb24gZXJyb3Igb24gdGhlIGN1
cnJlbnQgc2NvcGUuIgorCisgICAgICAgIC8vICJSZXR1cm4gYSBwcm9taXNlIHJlamVjdGVkIHdp
dGggYW4gT3BlcmF0aW9uRXJyb3Igb24gdGhlIERldmljZSB0aW1lbGluZS4iCisgICAgICAgIGNh
bGxiYWNrKFdHUFVCdWZmZXJNYXBBc3luY1N0YXR1c19FcnJvcik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAvLyAiU2V0IHRoaXMuW1ttYXBwaW5nXV0gdG8gcC4iCisKKyAgICAvLyAi
U2V0IHRoaXMuW1tzdGF0ZV1dIHRvIG1hcHBpbmcgcGVuZGluZy4iCisgICAgbV9zdGF0ZSA9IFN0
YXRlOjpNYXBwaW5nUGVuZGluZzsKKworICAgIC8vICJTZXQgdGhpcy5bW21hcF9tb2RlXV0gdG8g
bW9kZS4iCisgICAgbV9tYXBNb2RlID0gbW9kZTsKKworICAgIC8vICJFbnF1ZXVlIGFuIG9wZXJh
dGlvbiBvbiB0aGUgZGVmYXVsdCBxdWV1ZeKAmXMgUXVldWUgdGltZWxpbmUgdGhhdCB3aWxsIGV4
ZWN1dGUgdGhlIGZvbGxvd2luZzoiCisgICAgbV9kZXZpY2UtPmdldFF1ZXVlKCkub25TdWJtaXR0
ZWRXb3JrRG9uZSgwLCBbcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIG9mZnNldCwgcmFu
Z2VTaXplLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSAoV0dQVVF1ZXVlV29ya0RvbmVT
dGF0dXMgc3RhdHVzKSB7CisgICAgICAgIC8vICJJZiB0aGlzLltbc3RhdGVdXSBpcyBtYXBwaW5n
IHBlbmRpbmc6IgorICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+bV9zdGF0ZSA9PSBTdGF0ZTo6
TWFwcGluZ1BlbmRpbmcpIHsKKyAgICAgICAgICAgIC8vICJMZXQgbSBiZSBhIG5ldyBBcnJheUJ1
ZmZlciBvZiBzaXplIHJhbmdlU2l6ZS4iCisKKyAgICAgICAgICAgIC8vICJTZXQgdGhlIGNvbnRl
bnQgb2YgbSB0byB0aGUgY29udGVudCBvZiB0aGlz4oCZcyBhbGxvY2F0aW9uIHN0YXJ0aW5nIGF0
IG9mZnNldCBvZmZzZXQgYW5kIGZvciByYW5nZVNpemUgYnl0ZXMuIgorCisgICAgICAgICAgICAv
LyAiU2V0IHRoaXMuW1ttYXBwaW5nXV0gdG8gbS4iCisKKyAgICAgICAgICAgIC8vICJTZXQgdGhp
cy5bW3N0YXRlXV0gdG8gbWFwcGVkLiIKKyAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPm1fc3Rh
dGUgPSBTdGF0ZTo6TWFwcGVkOworCisgICAgICAgICAgICAvLyAiU2V0IHRoaXMuW1ttYXBwaW5n
X3JhbmdlXV0gdG8gW29mZnNldCwgb2Zmc2V0ICsgcmFuZ2VTaXplXS4iCisgICAgICAgICAgICBw
cm90ZWN0ZWRUaGlzLT5tX21hcHBpbmdSYW5nZSA9IHN0ZDo6bWFrZV9wYWlyKG9mZnNldCwgb2Zm
c2V0ICsgcmFuZ2VTaXplKTsKKworICAgICAgICAgICAgLy8gIlNldCB0aGlzLltbbWFwcGVkX3Jh
bmdlc11dIHRvIFtdLiIKKyAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPm1fbWFwcGVkUmFuZ2Vz
ID0gTWFwcGVkUmFuZ2VzKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyAiUmVzb2x2ZSBwLiIK
KyAgICAgICAgc3dpdGNoIChzdGF0dXMpIHsKKyAgICAgICAgY2FzZSBXR1BVUXVldWVXb3JrRG9u
ZVN0YXR1c19TdWNjZXNzOgorICAgICAgICAgICAgY2FsbGJhY2soV0dQVUJ1ZmZlck1hcEFzeW5j
U3RhdHVzX1N1Y2Nlc3MpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFdHUFVR
dWV1ZVdvcmtEb25lU3RhdHVzX0Vycm9yOgorICAgICAgICAgICAgY2FsbGJhY2soV0dQVUJ1ZmZl
ck1hcEFzeW5jU3RhdHVzX0Vycm9yKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2Fz
ZSBXR1BVUXVldWVXb3JrRG9uZVN0YXR1c19Vbmtub3duOgorICAgICAgICAgICAgY2FsbGJhY2so
V0dQVUJ1ZmZlck1hcEFzeW5jU3RhdHVzX1Vua25vd24pOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBjYXNlIFdHUFVRdWV1ZVdvcmtEb25lU3RhdHVzX0RldmljZUxvc3Q6CisgICAgICAg
ICAgICBjYWxsYmFjayhXR1BVQnVmZmVyTWFwQXN5bmNTdGF0dXNfRGV2aWNlTG9zdCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGNhbGxiYWNrKFdHUFVCdWZmZXJNYXBBc3luY1N0YXR1
c19FcnJvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9KTsKK30KKwor
Ym9vbCBCdWZmZXI6OnZhbGlkYXRlVW5tYXAoKSBjb25zdAoreworICAgIC8vICJ0aGlzLltbc3Rh
dGVdXSBtdXN0IGJlIG1hcHBlZCBhdCBjcmVhdGlvbiwgbWFwcGluZyBwZW5kaW5nLCBvciBtYXBw
ZWQuIgorICAgIGlmIChtX3N0YXRlICE9IFN0YXRlOjpNYXBwZWRBdENyZWF0aW9uCisgICAgICAg
ICYmIG1fc3RhdGUgIT0gU3RhdGU6Ok1hcHBpbmdQZW5kaW5nCisgICAgICAgICYmIG1fc3RhdGUg
IT0gU3RhdGU6Ok1hcHBlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRy
dWU7CiB9CiAKIHZvaWQgQnVmZmVyOjp1bm1hcCgpCiB7CisgICAgLy8gaHR0cHM6Ly9ncHV3ZWIu
Z2l0aHViLmlvL2dwdXdlYi8jZG9tLWdwdWJ1ZmZlci11bm1hcAorCisgICAgLy8gIklmIGFueSBv
ZiB0aGUgZm9sbG93aW5nIHJlcXVpcmVtZW50cyBhcmUgdW5tZXQiCisgICAgaWYgKCF2YWxpZGF0
ZVVubWFwKCkpIHsKKyAgICAgICAgLy8gRklYTUU6ICJnZW5lcmF0ZSBhIHZhbGlkYXRpb24gZXJy
b3IgYW5kIHN0b3AuIgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gIklmIHRoaXMu
W1tzdGF0ZV1dIGlzIG1hcHBpbmcgcGVuZGluZzoiCisgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6
Ok1hcHBpbmdQZW5kaW5nKSB7CisgICAgICAgIC8vIEZJWE1FOiAiUmVqZWN0IFtbbWFwcGluZ11d
IHdpdGggYW4gQWJvcnRFcnJvci4iCisKKyAgICAgICAgLy8gIlNldCB0aGlzLltbbWFwcGluZ11d
IHRvIG51bGwuIgorICAgIH0KKworICAgIC8vICJJZiB0aGlzLltbc3RhdGVdXSBpcyBtYXBwZWQg
b3IgbWFwcGVkIGF0IGNyZWF0aW9uOiIKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6TWFwcGVk
IHx8IG1fc3RhdGUgPT0gU3RhdGU6Ok1hcHBlZEF0Q3JlYXRpb24pIHsKKyAgICAgICAgLy8gIklm
IG9uZSBvZiB0aGUgdHdvIGZvbGxvd2luZyBjb25kaXRpb25zIGhvbGRzOiIKKyAgICAgICAgLy8g
InRoaXMuW1tzdGF0ZV1dIGlzIG1hcHBlZCBhdCBjcmVhdGlvbiIKKyAgICAgICAgLy8gInRoaXMu
W1tzdGF0ZV1dIGlzIG1hcHBlZCBhbmQgdGhpcy5bW21hcF9tb2RlXV0gY29udGFpbnMgV1JJVEUi
CisgICAgICAgIC8vICJFbnF1ZXVlIGFuIG9wZXJhdGlvbiBvbiB0aGUgZGVmYXVsdCBxdWV1ZeKA
mXMgUXVldWUgdGltZWxpbmUgdGhhdCB1cGRhdGVzIHRoZSB0aGlzLltbbWFwcGluZ19yYW5nZV1d
IG9mIHRoaXPigJlzIGFsbG9jYXRpb24gdG8gdGhlIGNvbnRlbnQgb2YgdGhpcy5bW21hcHBpbmdd
XS4iCisKKyAgICAgICAgLy8gIkRldGFjaCBlYWNoIEFycmF5QnVmZmVyIGluIHRoaXMuW1ttYXBw
ZWRfcmFuZ2VzXV0gZnJvbSBpdHMgY29udGVudC4iCisKKyAgICAgICAgLy8gIlNldCB0aGlzLltb
bWFwcGluZ11dIHRvIG51bGwuIgorCisgICAgICAgIC8vICJTZXQgdGhpcy5bW21hcHBpbmdfcmFu
Z2VdXSB0byBudWxsLiIKKworICAgICAgICAvLyAiU2V0IHRoaXMuW1ttYXBwZWRfcmFuZ2VzXV0g
dG8gbnVsbC4iCisgICAgfQorCisgICAgLy8gIlNldCB0aGlzLltbc3RhdGVdXSB0byB1bm1hcHBl
ZC4iCisgICAgbV9zdGF0ZSA9IFN0YXRlOjpVbm1hcHBlZDsKIH0KIAogdm9pZCBCdWZmZXI6OnNl
dExhYmVsKGNvbnN0IGNoYXIqIGxhYmVsKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJH
UFUvRGV2aWNlLmggYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9EZXZpY2UuaAppbmRleCBlZjhiNWZm
ZTgxNzQuLjliOGMwYzQwZDY3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvRGV2
aWNlLmgKKysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvRGV2aWNlLmgKQEAgLTkzLDYgKzkzLDgg
QEAgcHJpdmF0ZToKICAgICBpZDxNVExEZXZpY2U+IG1fZGV2aWNlIHsgbmlsIH07CiAgICAgUmVm
PFF1ZXVlPiBtX2RlZmF1bHRRdWV1ZTsKICAgICBSZWY8QWRhcHRlcj4gbV9hZGFwdGVyOworCisg
ICAgYm9vbCBtX2hhc1VuaWZpZWRNZW1vcnkgeyBmYWxzZSB9OwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9EZXZpY2UubW0gYi9T
b3VyY2UvV2ViR1BVL1dlYkdQVS9EZXZpY2UubW0KaW5kZXggMTc0OWRhNmIwNmJmLi5lOWQwOTYx
MjFjZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0RldmljZS5tbQorKysgYi9T
b3VyY2UvV2ViR1BVL1dlYkdQVS9EZXZpY2UubW0KQEAgLTYzLDYgKzYzLDcgQEAgRGV2aWNlOjpE
ZXZpY2UoaWQ8TVRMRGV2aWNlPiBkZXZpY2UsIGlkPE1UTENvbW1hbmRRdWV1ZT4gZGVmYXVsdFF1
ZXVlLCBBZGFwdGVyJgogICAgIDogbV9kZXZpY2UoZGV2aWNlKQogICAgICwgbV9kZWZhdWx0UXVl
dWUoUXVldWU6OmNyZWF0ZShkZWZhdWx0UXVldWUsICp0aGlzKSkKICAgICAsIG1fYWRhcHRlcihh
ZGFwdGVyKQorICAgICwgbV9oYXNVbmlmaWVkTWVtb3J5KGRldmljZS5oYXNVbmlmaWVkTWVtb3J5
KQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9VdGlsaXRpZXMuaCBi
L1NvdXJjZS9XZWJHUFUvV2ViR1BVL1V0aWxpdGllcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMC4uOWRmNjBiYTFhYWEwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkdQVS9XZWJHUFUvVXRpbGl0aWVzLmgKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHly
aWdodCAoYykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW1wb3J0
IDx3dGYvUGFnZUJsb2NrLmg+CisKK25hbWVzcGFjZSBXZWJHUFUgeworCitpbmxpbmUgYm9vbCBp
c05vdE11bHRpcGxlT2ZQb3dlck9mVHdvKHVpbnQ2NF90IHgsIHVpbnQ2NF90IHkpCit7CisgICAg
QVNTRVJUKGlzUG93ZXJPZlR3byh5KSk7CisgICAgcmV0dXJuIHggJiAoeSAtIDEpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJHUFUK
</data>
<flag name="review"
          id="482383"
          type_id="1"
          status="+"
          setter="kkinnunen"
    />
          </attachment>
      

    </bug>

</bugzilla>