<?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>195077</bug_id>
          
          <creation_ts>2019-02-26 16:43:28 -0800</creation_ts>
          <short_desc>[Web GPU] Buffer updates part 2: setSubData, GPU/CPU synchronization</short_desc>
          <delta_ts>2019-02-28 16:23:11 -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>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>graouts</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1510263</commentid>
    <comment_count>0</comment_count>
    <who name="Justin Fan">justin_fan</who>
    <bug_when>2019-02-26 16:43:28 -0800</bug_when>
    <thetext>[Web GPU] Buffer updates part 2: setSubData, GPU/CPU synchronization</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510264</commentid>
    <comment_count>1</comment_count>
    <who name="Justin Fan">justin_fan</who>
    <bug_when>2019-02-26 16:43:46 -0800</bug_when>
    <thetext>&lt;rdar://problem/47805229&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510300</commentid>
    <comment_count>2</comment_count>
      <attachid>363047</attachid>
    <who name="Justin Fan">justin_fan</who>
    <bug_when>2019-02-26 17:43:27 -0800</bug_when>
    <thetext>Created attachment 363047
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510534</commentid>
    <comment_count>3</comment_count>
      <attachid>363047</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2019-02-27 11:41:24 -0800</bug_when>
    <thetext>Comment on attachment 363047
Patch

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

&gt; Source/WebCore/Modules/webgpu/WebGPUBuffer.cpp:90
&gt; +        arrayBuffer ? promise.resolve(*arrayBuffer) : promise.reject();

I suggest a real if statement here. I prefer ternaries only when assigning values.

&gt; Source/WebCore/platform/graphics/gpu/GPUBuffer.h:120
&gt; +    static const auto s_readOnlyMask = GPUBufferUsage::Index | GPUBufferUsage::Vertex | GPUBufferUsage::Uniform | GPUBufferUsage::TransferSrc;

Why do we need this as a static in the header now?

&gt; Source/WebCore/platform/graphics/gpu/cocoa/GPUBufferMetal.mm:66
&gt; +    // FIXME: Metal best practices: Read-only one-time-use data less than 4 KB should not allocate a MTLBuffer and be used in [MTLCommandEncoder set*Bytes] calls instead.

Nice.

&gt; Source/WebCore/platform/graphics/gpu/cocoa/GPUBufferMetal.mm:118
&gt; +    if (offset + data.byteLength() &gt; m_byteLength) {

We need to use checked arithmetic here. It can be in a followup patch, but please add a FIXME.

Look for Checked&lt;&gt; stuff in WebGL or GraphicsContext3D as examples.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510544</commentid>
    <comment_count>4</comment_count>
    <who name="Justin Fan">justin_fan</who>
    <bug_when>2019-02-27 11:51:54 -0800</bug_when>
    <thetext>*** Bug 194255 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510566</commentid>
    <comment_count>5</comment_count>
      <attachid>363114</attachid>
    <who name="Justin Fan">justin_fan</who>
    <bug_when>2019-02-27 12:32:48 -0800</bug_when>
    <thetext>Created attachment 363114
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510567</commentid>
    <comment_count>6</comment_count>
      <attachid>363115</attachid>
    <who name="Justin Fan">justin_fan</who>
    <bug_when>2019-02-27 12:33:25 -0800</bug_when>
    <thetext>Created attachment 363115
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510579</commentid>
    <comment_count>7</comment_count>
      <attachid>363115</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-02-27 13:10:30 -0800</bug_when>
    <thetext>Comment on attachment 363115
Patch for landing

Clearing flags on attachment: 363115

Committed r242148: &lt;https://trac.webkit.org/changeset/242148&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510580</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-02-27 13:10:32 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510944</commentid>
    <comment_count>9</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2019-02-28 09:28:28 -0800</bug_when>
    <thetext>This patch broke Mac 32-bit builds. Just noticed because EWS is really backed up by this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1511018</commentid>
    <comment_count>10</comment_count>
    <who name="Justin Fan">justin_fan</who>
    <bug_when>2019-02-28 11:23:27 -0800</bug_when>
    <thetext>(In reply to Don Olmstead from comment #9)
&gt; This patch broke Mac 32-bit builds. Just noticed because EWS is really
&gt; backed up by this.

You’re right. I landed some patches last night to try and turn off Web GPU on 32-bit (the problem is 64 bit to 32 bit narrowing conversion, and Metal is 64-bit only anyway) but I don’t think I’ve succeeded. Please stand by.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1511184</commentid>
    <comment_count>11</comment_count>
    <who name="Justin Fan">justin_fan</who>
    <bug_when>2019-02-28 16:23:11 -0800</bug_when>
    <thetext>(In reply to Don Olmstead from comment #9)
&gt; This patch broke Mac 32-bit builds. Just noticed because EWS is really
&gt; backed up by this.

Will be addressed in https://bugs.webkit.org/show_bug.cgi?id=195191.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363047</attachid>
            <date>2019-02-26 17:43:27 -0800</date>
            <delta_ts>2019-02-27 12:32:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195077-20190226174326.patch</filename>
            <type>text/plain</type>
            <size>65791</size>
            <attacher name="Justin Fan">justin_fan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQxOTk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzJmZTI4ZWM4NzE4ODM1
YTFkNjhhZGFkZTg4ZTkzYzQ0OThjYjk4MC4uNTY3Y2ViYzQ0Zjg0NzI0YTk4NTg0ZmU2ZGRhN2Y3
MGE2YjZiZmYxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg3IEBACisyMDE5LTAyLTI2ICBKdXN0
aW4gRmFuICA8anVzdGluX2ZhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYiBHUFVdIEJ1ZmZl
ciB1cGRhdGVzIHBhcnQgMjogc2V0U3ViRGF0YSwgR1BVL0NQVSBzeW5jaHJvbml6YXRpb24KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NTA3NworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBH
UFVCdWZmZXIuc2V0U3ViRGF0YSBhbmQgcHJldmVudCB0aGUgcmVzb2x2aW5nIG9mIG1hcHBpbmcg
cHJvbWlzZXMgaWYgdGhlIGJ1ZmZlciBpcyBzY2hlZHVsZWQgdG8gYmUgCisgICAgICAgIHVzZWQg
b24gdGhlIEdQVSwgYW5kIGFkZCBoYW5kbGVycyB0byByZXNvbHZlIHN1Y2ggcHJvbWlzZXMgYWZ0
ZXIgY29tbWFuZCBidWZmZXIgZXhlY3V0aW9uIGNvbXBsZXRlcy4KKworICAgICAgICBUZXN0czog
d2ViZ3B1L2J1ZmZlci1jb21tYW5kLWJ1ZmZlci1yYWNlcy5odG1sCisgICAgICAgICAgICAgICB3
ZWJncHUvbWFwLXJlYWQtYnVmZmVycy5odG1sCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9X
ZWJHUFVCaW5kR3JvdXAuaDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdQVUJpbmRHcm91cDo6Ymlu
ZEdyb3VwIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XZWJHUFVCaW5kR3JvdXBE
ZXNjcmlwdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdQVUJpbmRHcm91cERlc2NyaXB0
b3I6OmFzR1BVQmluZEdyb3VwRGVzY3JpcHRvciBjb25zdCk6IFJlbmFtZSBiaW5kaW5nIC0+IGJ1
ZmZlckJpbmRpbmcgdG8gcmVkdWNlIGNvbmZ1c2lvbi4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdw
dS9XZWJHUFVCdWZmZXIuY3BwOiBTbWFsbCB0d2Vha3MuCisgICAgICAgIChXZWJDb3JlOjpXZWJH
UFVCdWZmZXI6OnNldFN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR1BVQnVmZmVyOjp1
bm1hcCk6IENvcnJlY3RseSBmYWlsIGlmIGJ1ZmZlciBpcyBkZXN0cm95ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpXZWJHUFVCdWZmZXI6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR1BV
QnVmZmVyOjpyZWplY3RPclJlZ2lzdGVyUHJvbWlzZUNhbGxiYWNrKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmdwdS9XZWJHUFVCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdQVUJ1ZmZl
cjo6YnVmZmVyIGNvbnN0KTogUmV0dXJuZWQgYnVmZmVyIGlzIG5vIGxvbmdlciBjb25zdCBzbyB0
aGF0IGl0IGNhbiBiZSB1c2VkIGluIGNvbXBsZXRlZCBoYW5kbGVyIGNhbGxiYWNrcy4KKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmdwdS9XZWJHUFVCdWZmZXIuaWRsOiBFbmFibGUgc2V0U3ViRGF0YS4K
KyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XZWJHUFVDb21tYW5kQnVmZmVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdQVUNvbW1hbmRCdWZmZXI6OmJlZ2luUmVuZGVyUGFzcyk6CisgICAg
ICAgICogTW9kdWxlcy93ZWJncHUvV2ViR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXI6OnNldEJpbmRH
cm91cCBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV2ViR1BVUHJvZ3JhbW1hYmxl
UGFzc0VuY29kZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XZWJHUFVSZW5kZXJQYXNz
RW5jb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6
c2V0VmVydGV4QnVmZmVycyk6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2dwdS9HUFVCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdQVUJ1ZmZlcjo6aXNUcmFu
c2ZlckRzdCBjb25zdCk6IEFkZGVkIHZhcmlvdXMgc3RhdGUgYW5kIGZsYWcgZ2V0dGVycy4KKyAg
ICAgICAgKFdlYkNvcmU6OkdQVUJ1ZmZlcjo6aXNWZXJ0ZXggY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R1BVQnVmZmVyOjppc1VuaWZvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1BV
QnVmZmVyOjppc1N0b3JhZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1BVQnVmZmVyOjpp
c1JlYWRPbmx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdQVUJ1ZmZlcjo6aXNNYXBwYWJs
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHUFVCdWZmZXI6OmlzTWFwV3JpdGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R1BVQnVmZmVyOjppc01hcFJlYWQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R1BVQnVmZmVyOjppc01hcFdyaXRlYWJsZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHUFVCdWZmZXI6OmlzTWFwUmVhZGFibGUgY29uc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2dwdS9HUFVCdWZmZXJCaW5kaW5nLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L0dQVUNvbW1hbmRCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdQVUNv
bW1hbmRCdWZmZXI6OnVzZWRCdWZmZXJzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdQVUNv
bW1hbmRCdWZmZXI6OnVzZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L0dQVURldmljZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHUFVEZXZpY2U6OnRyeUNyZWF0ZUJ1
ZmZlcik6IFBhc3MgUmVmIG9mIGl0c2VsZiBmb3IgQnVmZmVyIHRvIHJlcXVlc3QgdGhlIFF1ZXVl
IGxhdGVyLCBpZiBuZWVkZWQuCisgICAgICAgIChXZWJDb3JlOjpHUFVEZXZpY2U6OnRyeUNyZWF0
ZUJ1ZmZlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L0dQVURldmljZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVQcm9ncmFt
bWFibGVQYXNzRW5jb2Rlci5jcHA6IFJldGFpbiB0aGUgZW5jb2RlcidzIGNvbW1hbmRCdWZmZXIg
dG8gcmVmZXJlbmNlIGl0cyB1c2VkIHJlc291cmNlIGJ1ZmZlcnMuCisgICAgICAgIChXZWJDb3Jl
OjpHUFVQcm9ncmFtbWFibGVQYXNzRW5jb2Rlcjo6R1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXIp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVQcm9ncmFtbWFibGVQYXNzRW5j
b2Rlci5oOgorICAgICAgICAoV2ViQ29yZTo6R1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXI6OmNv
bW1hbmRCdWZmZXIgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVS
ZW5kZXJQYXNzRW5jb2Rlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2Nv
YS9HUFVCdWZmZXJNZXRhbC5tbToKKyAgICAgICAgKFdlYkNvcmU6OkdQVUJ1ZmZlcjo6dmFsaWRh
dGVCdWZmZXJDcmVhdGUpOiBNb3ZlIHZhbGlkYXRpb24gb3V0IG9mIHRyeUNyZWF0ZS4KKyAgICAg
ICAgKFdlYkNvcmU6OkdQVUJ1ZmZlcjo6dHJ5Q3JlYXRlKTogQ3JlYXRlIGJvdGggc2hhcmVkIGFu
ZCBwcml2YXRlIGJ1ZmZlcnMsIGRlcGVuZGluZyBvbiB1c2FnZS4KKyAgICAgICAgKFdlYkNvcmU6
OkdQVUJ1ZmZlcjo6R1BVQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdQVUJ1ZmZlcjo6fkdQ
VUJ1ZmZlcik6IENhbGwgZGVzdHJveSBpbnN0ZWFkIG9mIGp1c3QgdW5tYXAuCisgICAgICAgIChX
ZWJDb3JlOjpHUFVCdWZmZXI6OnN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdQVUJ1
ZmZlcjo6c2V0U3ViRGF0YSk6IFVzZXMgYSBjYWNoZWQgY29sbGVjdGlvbiBvZiBzdGFnaW5nIE1U
TEJ1ZmZlcnMgdG8gZW5jb2RlIGRhdGEgY29waWVzIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBNVExC
dWZmZXIuCisgICAgICAgIChXZWJDb3JlOjpHUFVCdWZmZXI6OmNvbW1hbmRCdWZmZXJDb21taXR0
ZWQpOiBSZWdpc3RlciBvbiB0aGUgR1BVQnVmZmVyIHRoYXQgdGhlIHByb3ZpZGVkIE1UTENvbW1h
bmRCdWZmZXIgdXNlcyBpdCwgYW5kIGlzIGFib3V0IHRvIGJlIGNvbW1pdHRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdQVUJ1ZmZlcjo6Y29tbWFuZEJ1ZmZlckNvbXBsZXRlZCk6IE1UTENvbW1hbmRC
dWZmZXIncyBvbkNvbXBsZXRlZEhhbmRsZXIgY2FsbHMgdGhpcy4KKyAgICAgICAgKFdlYkNvcmU6
OkdQVUJ1ZmZlcjo6cmV1c2VTdWJEYXRhQnVmZmVyKTogU2V0U3ViRGF0YSdzIGJsaXQgY29tbWFu
ZCBidWZmZXJzIGNhbGwgdGhpcyB0byByZXR1cm4gYSBzdGFnaW5nIGJ1ZmZlciB0byB0aGUgcG9v
bC4KKyAgICAgICAgKFdlYkNvcmU6OkdQVUJ1ZmZlcjo6cmVnaXN0ZXJNYXBwaW5nQ2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6R1BVQnVmZmVyOjpydW5NYXBwaW5nQ2FsbGJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6R1BVQnVmZmVyOjp1bm1hcCk6CisgICAgICAgIChXZWJDb3JlOjpHUFVC
dWZmZXI6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6R1BVQnVmZmVyOjp0cnlDcmVhdGVT
aGFyZWRCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9j
b2NvYS9HUFVQcm9ncmFtbWFibGVQYXNzRW5jb2Rlck1ldGFsLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6R1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXI6OnNldFJlc291cmNlQXNCdWZmZXJPbkVuY29k
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXI6OnNldEJp
bmRHcm91cCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVF1ZXVl
TWV0YWwubW06CisgICAgICAgIChXZWJDb3JlOjpHUFVRdWV1ZTo6c3VibWl0KTogRW5zdXJlIHN1
Ym1pdHRlZCBidWZmZXJzIGFyZSBpbiB0aGUgY29ycmVjdCBzdGF0ZSwgYW5kIGFkZCBjb21wbGV0
ZWQgaGFuZGxlcnMgZm9yIHN5bmNocm9uaXphdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGFzc0VuY29kZXJNZXRhbC5tbToKKyAgICAgICAgKFdl
YkNvcmU6OkdQVVJlbmRlclBhc3NFbmNvZGVyOjp0cnlDcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R1BVUmVuZGVyUGFzc0VuY29kZXI6OkdQVVJlbmRlclBhc3NFbmNvZGVyKTogUmV0YWluIHRo
ZSBjb21tYW5kQnVmZmVyIGZvciBsYXRlciByZWZlcmVuY2UuCisgICAgICAgIChXZWJDb3JlOjpH
UFVSZW5kZXJQYXNzRW5jb2Rlcjo6c2V0VmVydGV4QnVmZmVycyk6IE1hcmsgdmVydGV4IGJ1ZmZl
cnMgYXMgdXNlZCBiZWZvcmUgc3VibWlzc2lvbi4KKyAgICAgICAgKFdlYkNvcmU6OkdQVVJlbmRl
clBhc3NFbmNvZGVyOjpjcmVhdGUpOiBEZWxldGVkLgorCiAyMDE5LTAyLTIzICBKdXN0aW4gRmFu
ICA8anVzdGluX2ZhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkdQVV0gQnVmZmVyIHVwZGF0
ZXMgcGFydCAxOiBhc3luYyBtYXBwaW5nIGZ1bmN0aW9ucywgdW5tYXAsIGFuZCBkZXN0cm95CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVCaW5kR3JvdXAu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVUJpbmRHcm91cC5oCmluZGV4
IDUwNGRhOTUwZjVjZTQwOTc5MzBlYmJhZGExMzJkNmI5YjZkNjlkZjEuLjgyOWVhYjJiM2IxYTY2
YjJmYmQ5MzEzMjcyOTFmZDY1ZWI2ODI4ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dlYkdQVUJpbmRHcm91cC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dlYkdQVUJpbmRHcm91cC5oCkBAIC0zNyw3ICszNyw3IEBAIGNsYXNzIFdlYkdQ
VUJpbmRHcm91cCA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYkdQVUJpbmRHcm91cD4gewogcHVibGlj
OgogICAgIHN0YXRpYyBSZWY8V2ViR1BVQmluZEdyb3VwPiBjcmVhdGUoUmVmUHRyPEdQVUJpbmRH
cm91cD4mJik7CiAKLSAgICBjb25zdCBHUFVCaW5kR3JvdXAqIGJpbmRHcm91cCgpIGNvbnN0IHsg
cmV0dXJuIG1fYmluZEdyb3VwLmdldCgpOyB9CisgICAgR1BVQmluZEdyb3VwKiBiaW5kR3JvdXAo
KSBjb25zdCB7IHJldHVybiBtX2JpbmRHcm91cC5nZXQoKTsgfQogCiBwcml2YXRlOgogICAgIGV4
cGxpY2l0IFdlYkdQVUJpbmRHcm91cChSZWZQdHI8R1BVQmluZEdyb3VwPiYmKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVUJpbmRHcm91cERlc2NyaXB0
b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVQmluZEdyb3VwRGVz
Y3JpcHRvci5jcHAKaW5kZXggYzRjNmQ0NmMwYzRhZWYwNjQ1OGI2NmE3YWY1MWI2MjBlMjNmMDM1
OC4uZTBlN2RiZTczMTM4NTBmMzBmNmNlZjQ1ODZmMzE5MGY0YjJkZGM0NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVQmluZEdyb3VwRGVzY3JpcHRvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVQmluZEdyb3VwRGVz
Y3JpcHRvci5jcHAKQEAgLTg2LDcgKzg2LDcgQEAgT3B0aW9uYWw8R1BVQmluZEdyb3VwRGVzY3Jp
cHRvcj4gV2ViR1BVQmluZEdyb3VwRGVzY3JpcHRvcjo6YXNHUFVCaW5kR3JvdXBEZXNjcmkKICAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0KIAotICAgICAgICBhdXRv
IGxheW91dEJpbmRpbmcgPSBpdGVyYXRvci0+dmFsdWU7CisgICAgICAgIGNvbnN0IGF1dG8gbGF5
b3V0QmluZGluZyA9IGl0ZXJhdG9yLT52YWx1ZTsKIAogICAgICAgICBhdXRvIGJpbmRpbmdSZXNv
dXJjZVZpc2l0b3IgPSBXVEY6Om1ha2VWaXNpdG9yKFtdIChSZWZQdHI8V2ViR1BVVGV4dHVyZVZp
ZXc+IHZpZXcpIC0+IE9wdGlvbmFsPEdQVUJpbmRpbmdSZXNvdXJjZT4gewogICAgICAgICAgICAg
Ly8gRklYTUU6IFZhbGlkYXRlIGJpbmRpbmcgdHlwZSB3aXRoIHRoZSB0ZXh0dXJlJ3MgdXNhZ2Ug
ZmxhZ3MuCkBAIC05NCwxNSArOTQsMTUgQEAgT3B0aW9uYWw8R1BVQmluZEdyb3VwRGVzY3JpcHRv
cj4gV2ViR1BVQmluZEdyb3VwRGVzY3JpcHRvcjo6YXNHUFVCaW5kR3JvdXBEZXNjcmkKICAgICAg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8R1BVQmluZGluZ1Jlc291cmNlPih2aWV3LT50ZXh0dXJlKCkpOwotICAgICAgICB9
LCBbJmxheW91dEJpbmRpbmcsIGZ1bmN0aW9uTmFtZV0gKGNvbnN0IFdlYkdQVUJ1ZmZlckJpbmRp
bmcmIGJpbmRpbmcpIC0+IE9wdGlvbmFsPEdQVUJpbmRpbmdSZXNvdXJjZT4gewotICAgICAgICAg
ICAgaWYgKCFiaW5kaW5nLmJ1ZmZlciB8fCAhYmluZGluZy5idWZmZXItPmJ1ZmZlcigpKSB7Cisg
ICAgICAgIH0sIFsmbGF5b3V0QmluZGluZywgZnVuY3Rpb25OYW1lXSAoV2ViR1BVQnVmZmVyQmlu
ZGluZyBidWZmZXJCaW5kaW5nKSAtPiBPcHRpb25hbDxHUFVCaW5kaW5nUmVzb3VyY2U+IHsKKyAg
ICAgICAgICAgIGlmICghYnVmZmVyQmluZGluZy5idWZmZXIgfHwgIWJ1ZmZlckJpbmRpbmcuYnVm
ZmVyLT5idWZmZXIoKSkgewogICAgICAgICAgICAgICAgIExPRyhXZWJHUFUsICIlczogSW52YWxp
ZCBHUFVCdWZmZXJCaW5kaW5nIGZvciBiaW5kaW5nICVsdSBpbiBHUFVCaW5kR3JvdXBCaW5kaW5n
cyEiLCBmdW5jdGlvbk5hbWUsIGxheW91dEJpbmRpbmcuYmluZGluZyk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgh
dmFsaWRhdGVCdWZmZXJCaW5kaW5nVHlwZShiaW5kaW5nLmJ1ZmZlci0+YnVmZmVyKCkuZ2V0KCks
IGxheW91dEJpbmRpbmcsIGZ1bmN0aW9uTmFtZSkpCisgICAgICAgICAgICBpZiAoIXZhbGlkYXRl
QnVmZmVyQmluZGluZ1R5cGUoYnVmZmVyQmluZGluZy5idWZmZXItPmJ1ZmZlcigpLmdldCgpLCBs
YXlvdXRCaW5kaW5nLCBmdW5jdGlvbk5hbWUpKQogICAgICAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxHUFVCaW5kaW5nUmVz
b3VyY2U+KEdQVUJ1ZmZlckJpbmRpbmcgeyBiaW5kaW5nLmJ1ZmZlci0+YnVmZmVyKCkucmVsZWFz
ZU5vbk51bGwoKSwgYmluZGluZy5vZmZzZXQsIGJpbmRpbmcuc2l6ZSB9KTsKKyAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxHUFVCaW5kaW5nUmVzb3VyY2U+KEdQVUJ1ZmZlckJpbmRpbmcg
eyBidWZmZXJCaW5kaW5nLmJ1ZmZlci0+YnVmZmVyKCkucmVsZWFzZU5vbk51bGwoKSwgYnVmZmVy
QmluZGluZy5vZmZzZXQsIGJ1ZmZlckJpbmRpbmcuc2l6ZSB9KTsKICAgICAgICAgfSk7CiAKICAg
ICAgICAgYXV0byBiaW5kaW5nUmVzb3VyY2UgPSBXVEY6OnZpc2l0KGJpbmRpbmdSZXNvdXJjZVZp
c2l0b3IsIGJpbmRpbmcucmVzb3VyY2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV2ViR1BVQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dlYkdQVUJ1ZmZlci5jcHAKaW5kZXggNDBiYjFmMjUxODZiZTQyOWE3YjI5YzAzZjQ1MWNl
NTc1YWE0MTM3ZC4uMzk0M2YyYWVhYmY3YzllM2EyN2I3NTljMDEyN2E0NDA5MDk4YWEzYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVQnVmZmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVCdWZmZXIuY3BwCkBAIC00
Miw2ICs0MiwxNCBAQCBXZWJHUFVCdWZmZXI6OldlYkdQVUJ1ZmZlcihSZWZQdHI8R1BVQnVmZmVy
PiYmIGJ1ZmZlcikKIHsKIH0KIAordm9pZCBXZWJHUFVCdWZmZXI6OnNldFN1YkRhdGEodW5zaWdu
ZWQgb2Zmc2V0LCBjb25zdCBKU0M6OkFycmF5QnVmZmVyJiBkYXRhKQoreworICAgIGlmICghbV9i
dWZmZXIpCisgICAgICAgIExPRyhXZWJHUFUsICJHUFVCdWZmZXI6OnNldFN1YkRhdGEoKTogSW52
YWxpZCBvcGVyYXRpb24hIik7CisgICAgZWxzZQorICAgICAgICBtX2J1ZmZlci0+c2V0U3ViRGF0
YShvZmZzZXQsIGRhdGEpOworfQorCiB2b2lkIFdlYkdQVUJ1ZmZlcjo6bWFwUmVhZEFzeW5jKEJ1
ZmZlck1hcHBpbmdQcm9taXNlJiYgcHJvbWlzZSkKIHsKICAgICByZWplY3RPclJlZ2lzdGVyUHJv
bWlzZUNhbGxiYWNrKFdURk1vdmUocHJvbWlzZSksIHRydWUpOwpAQCAtNTQsNyArNjIsOSBAQCB2
b2lkIFdlYkdQVUJ1ZmZlcjo6bWFwV3JpdGVBc3luYyhCdWZmZXJNYXBwaW5nUHJvbWlzZSYmIHBy
b21pc2UpCiAKIHZvaWQgV2ViR1BVQnVmZmVyOjp1bm1hcCgpCiB7Ci0gICAgaWYgKG1fYnVmZmVy
KQorICAgIGlmICghbV9idWZmZXIpCisgICAgICAgIExPRyhXZWJHUFUsICJHUFVCdWZmZXI6OnVu
bWFwKCk6IEludmFsaWQgb3BlcmF0aW9uISIpOworICAgIGVsc2UKICAgICAgICAgbV9idWZmZXIt
PnVubWFwKCk7CiB9CiAKQEAgLTY0LDcgKzc0LDYgQEAgdm9pZCBXZWJHUFVCdWZmZXI6OmRlc3Ry
b3koKQogICAgICAgICBMT0coV2ViR1BVLCAiR1BVQnVmZmVyOjpkZXN0cm95KCk6IEludmFsaWQg
b3BlcmF0aW9uISIpOwogICAgIGVsc2UgewogICAgICAgICBtX2J1ZmZlci0+ZGVzdHJveSgpOwot
ICAgICAgICAvLyBGSVhNRTogRW5zdXJlIHRoYXQgR1BVQnVmZmVyIGlzIGtlcHQgYWxpdmUgYnkg
cmVzb3VyY2UgYmluZGluZ3MgaWYgc3RpbGwgYmVpbmcgdXNlZCBieSBHUFUuCiAgICAgICAgIG1f
YnVmZmVyID0gbnVsbHB0cjsKICAgICB9CiB9CkBAIC03OCwxMiArODcsNyBAQCB2b2lkIFdlYkdQ
VUJ1ZmZlcjo6cmVqZWN0T3JSZWdpc3RlclByb21pc2VDYWxsYmFjayhCdWZmZXJNYXBwaW5nUHJv
bWlzZSYmIHByb21pcwogICAgIH0KIAogICAgIG1fYnVmZmVyLT5yZWdpc3Rlck1hcHBpbmdDYWxs
YmFjayhbcHJvbWlzZSA9IFdURk1vdmUocHJvbWlzZSldIChKU0M6OkFycmF5QnVmZmVyKiBhcnJh
eUJ1ZmZlcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghYXJyYXlCdWZmZXIpIHsKLSAgICAgICAg
ICAgIHByb21pc2UucmVqZWN0KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQot
ICAgICAgICBwcm9taXNlLnJlc29sdmUoYXJyYXlCdWZmZXIpOworICAgICAgICBhcnJheUJ1ZmZl
ciA/IHByb21pc2UucmVzb2x2ZSgqYXJyYXlCdWZmZXIpIDogcHJvbWlzZS5yZWplY3QoKTsKICAg
ICB9LCBpc1JlYWQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XZWJHUFVCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQ
VUJ1ZmZlci5oCmluZGV4IDI3ZTc5YjE0YjEzYzUzN2JlNzdjOWNmNzZhNWVhNWE1MmM4YzZmMWUu
LjQwYmM1NGQzNWVmMTA5OTNjZTQ5NDJhNjQ3MjcxNzQxZDE4MjZkYWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVUJ1ZmZlci5oCkBAIC00NSw5ICs0NSwxMCBAQCBj
bGFzcyBXZWJHUFVCdWZmZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJHUFVCdWZmZXI+IHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgUmVmPFdlYkdQVUJ1ZmZlcj4gY3JlYXRlKFJlZlB0cjxHUFVCdWZm
ZXI+JiYpOwogCi0gICAgUmVmUHRyPGNvbnN0IEdQVUJ1ZmZlcj4gYnVmZmVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9idWZmZXI7IH0KKyAgICBSZWZQdHI8R1BVQnVmZmVyPiBidWZmZXIoKSBjb25zdCB7
IHJldHVybiBtX2J1ZmZlcjsgfQogCi0gICAgdXNpbmcgQnVmZmVyTWFwcGluZ1Byb21pc2UgPSBE
T01Qcm9taXNlRGVmZXJyZWQ8SURMSW50ZXJmYWNlPEpTQzo6QXJyYXlCdWZmZXIqPj47CisgICAg
dm9pZCBzZXRTdWJEYXRhKHVuc2lnbmVkLCBjb25zdCBKU0M6OkFycmF5QnVmZmVyJik7CisgICAg
dXNpbmcgQnVmZmVyTWFwcGluZ1Byb21pc2UgPSBET01Qcm9taXNlRGVmZXJyZWQ8SURMSW50ZXJm
YWNlPEpTQzo6QXJyYXlCdWZmZXI+PjsKICAgICB2b2lkIG1hcFJlYWRBc3luYyhCdWZmZXJNYXBw
aW5nUHJvbWlzZSYmKTsKICAgICB2b2lkIG1hcFdyaXRlQXN5bmMoQnVmZmVyTWFwcGluZ1Byb21p
c2UmJik7CiAgICAgdm9pZCB1bm1hcCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV2ViR1BVQnVmZmVyLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dlYkdQVUJ1ZmZlci5pZGwKaW5kZXggNzUyYWU3NDU2ZTkyMDc2MzZmMzZkNjE2ZjUwNzc1
OWY5NDE2N2VhNi4uNzIxOTRlMjRhNzVlNjUyNmVlYTA5YTA3ZmRiZjJjNDM4ZDllOTZjOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVQnVmZmVyLmlkbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVCdWZmZXIuaWRsCkBAIC0y
MiwxMyArMjIsMTYgQEAKICAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KICAqLworLy8gaHR0cHM6Ly9naXRodWIuY29tL2dwdXdlYi9ncHV3ZWIvYmxv
Yi9tYXN0ZXIvZGVzaWduL3NrZXRjaC53ZWJpZGwKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIHUz
MjsKIAogWwogICAgIENvbmRpdGlvbmFsPVdFQkdQVSwKICAgICBFbmFibGVkQXRSdW50aW1lPVdl
YkdQVSwKICAgICBJbXBsZW1lbnRhdGlvbkxhY2tzVlRhYmxlCiBdIGludGVyZmFjZSBXZWJHUFVC
dWZmZXIgewotICAgIC8vdm9pZCBzZXRTdWJEYXRhKHUzMiBvZmZzZXQsIEFycmF5QnVmZmVyIGRh
dGEpOworICAgIHZvaWQgc2V0U3ViRGF0YSh1MzIgb2Zmc2V0LCBBcnJheUJ1ZmZlciBkYXRhKTsK
IAogICAgIFByb21pc2U8QXJyYXlCdWZmZXI+IG1hcFJlYWRBc3luYygpOwogICAgIFByb21pc2U8
QXJyYXlCdWZmZXI+IG1hcFdyaXRlQXN5bmMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dlYkdQVUNvbW1hbmRCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV2ViR1BVQ29tbWFuZEJ1ZmZlci5jcHAKaW5kZXggNTg4OWM4OWYzMTE5
OTZmZWJlODA5ZDc1NDc2YTk3NzIzNGJiYTllZS4uMjhhNWFiNzJkNzliOTJhYTI3MTRmMWIxMzM1
MGFlYTlmNzk0ZjI4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V2ViR1BVQ29tbWFuZEJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV2ViR1BVQ29tbWFuZEJ1ZmZlci5jcHAKQEAgLTUxLDcgKzUxLDcgQEAgUmVmUHRyPFdlYkdQ
VVJlbmRlclBhc3NFbmNvZGVyPiBXZWJHUFVDb21tYW5kQnVmZmVyOjpiZWdpblJlbmRlclBhc3Mo
V2ViR1BVUmVuZGUKICAgICBpZiAoIWdwdURlc2NyaXB0b3IpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCi0gICAgaWYgKGF1dG8gZW5jb2RlciA9IEdQVVJlbmRlclBhc3NFbmNvZGVyOjpjcmVh
dGUobV9jb21tYW5kQnVmZmVyLmdldCgpLCBXVEZNb3ZlKCpncHVEZXNjcmlwdG9yKSkpCisgICAg
aWYgKGF1dG8gZW5jb2RlciA9IEdQVVJlbmRlclBhc3NFbmNvZGVyOjp0cnlDcmVhdGUobV9jb21t
YW5kQnVmZmVyLmNvcHlSZWYoKSwgV1RGTW92ZSgqZ3B1RGVzY3JpcHRvcikpKQogICAgICAgICBy
ZXR1cm4gV2ViR1BVUmVuZGVyUGFzc0VuY29kZXI6OmNyZWF0ZSgqdGhpcywgZW5jb2Rlci5yZWxl
YXNlTm9uTnVsbCgpKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVVByb2dyYW1tYWJsZVBhc3NF
bmNvZGVyLmNwcAppbmRleCBjMzkxNTIwYjYzZDE2ODhjYzMzNDM3NGUwYzk1M2MwODVmZWMxYjYy
Li5mMDVkMTFhMDNhNDA0YjFiNzU0MjdiNmJlNmQwOGIxMjYwZmI5ZDgxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVQcm9ncmFtbWFibGVQYXNzRW5jb2Rl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVUHJvZ3JhbW1h
YmxlUGFzc0VuY29kZXIuY3BwCkBAIC00NSw3ICs0NSw3IEBAIFJlZjxXZWJHUFVDb21tYW5kQnVm
ZmVyPiBXZWJHUFVQcm9ncmFtbWFibGVQYXNzRW5jb2Rlcjo6ZW5kUGFzcygpCiAgICAgcmV0dXJu
IG1fY29tbWFuZEJ1ZmZlci5jb3B5UmVmKCk7CiB9CiAKLXZvaWQgV2ViR1BVUHJvZ3JhbW1hYmxl
UGFzc0VuY29kZXI6OnNldEJpbmRHcm91cCh1bnNpZ25lZCBsb25nIGluZGV4LCBjb25zdCBXZWJH
UFVCaW5kR3JvdXAmIGJpbmRHcm91cCkgY29uc3QKK3ZvaWQgV2ViR1BVUHJvZ3JhbW1hYmxlUGFz
c0VuY29kZXI6OnNldEJpbmRHcm91cCh1bnNpZ25lZCBsb25nIGluZGV4LCBXZWJHUFVCaW5kR3Jv
dXAmIGJpbmRHcm91cCkgY29uc3QKIHsKICAgICAvLyBNYXhpbXVtIG51bWJlciBvZiBiaW5kIGdy
b3VwcyBzdXBwb3J0ZWQgaW4gV2ViIEdQVS4KICAgICBpZiAoaW5kZXggPj0gNCkgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVUHJvZ3JhbW1hYmxlUGFz
c0VuY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVVByb2dyYW1t
YWJsZVBhc3NFbmNvZGVyLmgKaW5kZXggYWNmZDFmYmZlNDZmOTQ5Y2Y5ZWMwZWUzZTcyN2UxOTkz
OWFmMTIzZC4uZTRiYjM1YTMzY2Q4ZDRmNWEzOWM1ZWUwYjNmZTVhNzNjYjU3YjNjYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVUHJvZ3JhbW1hYmxlUGFz
c0VuY29kZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVQcm9n
cmFtbWFibGVQYXNzRW5jb2Rlci5oCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIH5XZWJHUFVQcm9ncmFtbWFibGVQYXNzRW5jb2RlcigpID0gZGVmYXVsdDsKIAogICAgIFJl
ZjxXZWJHUFVDb21tYW5kQnVmZmVyPiBlbmRQYXNzKCk7Ci0gICAgdm9pZCBzZXRCaW5kR3JvdXAo
dW5zaWduZWQgbG9uZywgY29uc3QgV2ViR1BVQmluZEdyb3VwJikgY29uc3Q7CisgICAgdm9pZCBz
ZXRCaW5kR3JvdXAodW5zaWduZWQgbG9uZywgV2ViR1BVQmluZEdyb3VwJikgY29uc3Q7CiAgICAg
dm9pZCBzZXRQaXBlbGluZShSZWY8V2ViR1BVUmVuZGVyUGlwZWxpbmU+JiYpOwogCiBwcm90ZWN0
ZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVSZW5k
ZXJQYXNzRW5jb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVS
ZW5kZXJQYXNzRW5jb2Rlci5jcHAKaW5kZXggZTE5NmIxMmUzMzdiZmEwZmY0MGE1M2Y3MzkxYjJj
NWJmNGFmMzhkYi4uOTg4MzI5YjNlN2NjMGYyODFhZGU2ZGEwZTNiOTk2MmNiNzI3N2MzZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVUmVuZGVyUGFzc0Vu
Y29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVVJlbmRl
clBhc3NFbmNvZGVyLmNwcApAQCAtNjIsNyArNjIsNyBAQCB2b2lkIFdlYkdQVVJlbmRlclBhc3NF
bmNvZGVyOjpzZXRWZXJ0ZXhCdWZmZXJzKHVuc2lnbmVkIGxvbmcgc3RhcnRTbG90LCBWZWN0b3I8
UgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgVmVjdG9yPFJlZjxjb25zdCBHUFVCdWZm
ZXI+PiBncHVCdWZmZXJzOworICAgIFZlY3RvcjxSZWY8R1BVQnVmZmVyPj4gZ3B1QnVmZmVyczsK
ICAgICBncHVCdWZmZXJzLnJlc2VydmVDYXBhY2l0eShidWZmZXJzLnNpemUoKSk7CiAKICAgICBm
b3IgKGNvbnN0IGF1dG8mIGJ1ZmZlciA6IGJ1ZmZlcnMpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggMjhm
NjZlZjc0MjhjYTljZGZjZTFmZmVjMjBjYmQ2MTM3ZjdhZjRjOS4uOTY1ZDA0MjNmNzhiMTc1OGE2
M2QyODhmOTJmODIwZTYyM2YwMGZiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTE4MTEsNiArMTgxMSw3
IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L0dQVUJpbmRHcm91cC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9H
UFVEZXZpY2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVUGlwZWxpbmVMYXlvdXQuY3Bw
CitwbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXIuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9ncHUvbGVnYWN5L0dQVUxlZ2FjeUJ1ZmZlci5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9sZWdhY3kvR1BVTGVnYWN5Q29tbWFuZEJ1ZmZlci5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9sZWdhY3kvR1BVTGVnYWN5Q29tbWFuZFF1ZXVlLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDk5OTA3
ZGQ2OTJkNDQ5ODY1ZTU3ZWRlNTZlMTlhZTA0MTUwNTRlNzguLjY4M2E0OTBmYzVhZjhkNTJjMDgx
ZDQ4M2JlZGYzZTc4N2FlMGY2YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzOTQ2LDYgKzEzOTQ2LDcgQEAKIAkJRDAwMzI4
ODQyMUM5QTIwRDAwNjIyQUE2IC8qIEdQVVBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBHUFVQaXBlbGluZUxheW91dERlc2NyaXB0b3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRDAwMzI4ODYyMUM5QTRFNTAwNjIyQUE2IC8qIEdQVVBpcGVsaW5lTGF5
b3V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdQVVBpcGVsaW5lTGF5b3V0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUQwMDMyODg3MjFDOUE0RTUwMDYyMkFBNiAvKiBHUFVQaXBlbGluZUxh
eW91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHUFVQaXBlbGluZUxheW91dC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQwMDM5MTQxMjIyNDhENDAwMDk4OTk4QyAvKiBHUFVQ
cm9ncmFtbWFibGVQYXNzRW5jb2Rlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHUFVQcm9ncmFt
bWFibGVQYXNzRW5jb2Rlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwMEY1
OTQwMjE2RUNDN0EwMDBENzFEQiAvKiBET01XaW5kb3dXZWJHUFUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RE9NV2luZG93V2ViR1BVLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwMEY1OTQx
MjE2RUNDN0EwMDBENzFEQiAvKiBET01XaW5kb3dXZWJHUFUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRE9NV2luZG93V2ViR1BVLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDAw
RjU5NDIyMTZFQ0M3QTAwMEQ3MURCIC8qIERPTVdpbmRvd1dlYkdQVS5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRE9NV2lu
ZG93V2ViR1BVLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4NTA0LDYgKzE4
NTA1LDcgQEAKIAkJCQlEMDAzMjg4NjIxQzlBNEU1MDA2MjJBQTYgLyogR1BVUGlwZWxpbmVMYXlv
dXQuaCAqLywKIAkJCQlEMDAzMjg4NDIxQzlBMjBEMDA2MjJBQTYgLyogR1BVUGlwZWxpbmVMYXlv
dXREZXNjcmlwdG9yLmggKi8sCiAJCQkJMzEyRkY4QzIyMUE0QzJGMzAwRUIxOTlEIC8qIEdQVVBp
cGVsaW5lU3RhZ2VEZXNjcmlwdG9yLmggKi8sCisJCQkJRDAwMzkxNDEyMjI0OEQ0MDAwOTg5OThD
IC8qIEdQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyLmNwcCAqLywKIAkJCQlEMDMyMTFDRjIxQUM5
NTRFMDA3NjNDRjIgLyogR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXIuaCAqLywKIAkJCQkzMTJG
RjhDMTIxQTRDMkYyMDBFQjE5OUQgLyogR1BVUXVldWUuaCAqLywKIAkJCQlEMDMyMTFEMDIxQUM5
NTRGMDA3NjNDRjIgLyogR1BVUmVuZGVyUGFzc0Rlc2NyaXB0b3IuaCAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVCdWZmZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVCdWZmZXIuaAppbmRleCBhYzc2MTMx
NTYzZTNhZWM0MzM2ZTY4NDI2ODlmNGUzNGI1NDViN2EwLi42MmEyNTY4MWQzMTRkYWIzZGM4MGIy
ZDBjMTI1N2YwODA1YzBiYjYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvR1BVQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L0dQVUJ1ZmZlci5oCkBAIC0zMyw4ICszMywxMiBAQAogI2luY2x1ZGUgPHd0Zi9S
ZWYuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKKyNpZiBVU0UoTUVUQUwpCiBPQkpDX1BS
T1RPQ09MKE1UTEJ1ZmZlcik7CitPQkpDX1BST1RPQ09MKE1UTENvbW1hbmRCdWZmZXIpOworI2Vu
ZGlmCiAKIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQXJyYXlCdWZmZXI7CkBAIC00NiwyMSArNTAs
NDIgQEAgY2xhc3MgR1BVRGV2aWNlOwogCiBzdHJ1Y3QgR1BVQnVmZmVyRGVzY3JpcHRvcjsKIAor
I2lmIFVTRShNRVRBTCkKIHVzaW5nIFBsYXRmb3JtQnVmZmVyID0gTVRMQnVmZmVyOwotdXNpbmcg
UGxhdGZvcm1CdWZmZXJTbWFydFB0ciA9IFJldGFpblB0cjxNVExCdWZmZXI+OworI2Vsc2UKK3Vz
aW5nIFBsYXRmb3JtQnVmZmVyID0gdm9pZDsKKyNlbmRpZgordXNpbmcgUGxhdGZvcm1CdWZmZXJT
bWFydFB0ciA9IFJldGFpblB0cjxQbGF0Zm9ybUJ1ZmZlcj47CiAKIGNsYXNzIEdQVUJ1ZmZlciA6
IHB1YmxpYyBSZWZDb3VudGVkPEdQVUJ1ZmZlcj4gewogcHVibGljOgorICAgIGVudW0gY2xhc3Mg
U3RhdGUgeworICAgICAgICBNYXBwZWQsCisgICAgICAgIFVubWFwcGVkLAorICAgICAgICBEZXN0
cm95ZWQKKyAgICB9OworCiAgICAgfkdQVUJ1ZmZlcigpOwogCi0gICAgc3RhdGljIFJlZlB0cjxH
UFVCdWZmZXI+IHRyeUNyZWF0ZShjb25zdCBHUFVEZXZpY2UmLCBHUFVCdWZmZXJEZXNjcmlwdG9y
JiYpOworICAgIHN0YXRpYyBSZWZQdHI8R1BVQnVmZmVyPiB0cnlDcmVhdGUoUmVmPEdQVURldmlj
ZT4mJiwgR1BVQnVmZmVyRGVzY3JpcHRvciYmKTsKIAogICAgIFBsYXRmb3JtQnVmZmVyICpwbGF0
Zm9ybUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1CdWZmZXIuZ2V0KCk7IH0KLSAg
ICBib29sIGlzVmVydGV4KCkgY29uc3QgeyByZXR1cm4gbV9pc1ZlcnRleDsgfQotICAgIGJvb2wg
aXNVbmlmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9pc1VuaWZvcm07IH0KLSAgICBib29sIGlzU3Rv
cmFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNTdG9yYWdlOyB9Ci0gICAgYm9vbCBpc1JlYWRPbmx5
KCkgY29uc3QgeyByZXR1cm4gbV9pc1JlYWRPbmx5OyB9Ci0KKyAgICBib29sIGlzVHJhbnNmZXJE
c3QoKSBjb25zdCB7IHJldHVybiBtX3VzYWdlICYgR1BVQnVmZmVyVXNhZ2U6OlRyYW5zZmVyRHN0
OyB9CisgICAgYm9vbCBpc1ZlcnRleCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNhZ2UgJiBHUFVCdWZm
ZXJVc2FnZTo6VmVydGV4OyB9CisgICAgYm9vbCBpc1VuaWZvcm0oKSBjb25zdCB7IHJldHVybiBt
X3VzYWdlICYgR1BVQnVmZmVyVXNhZ2U6OlVuaWZvcm07IH0KKyAgICBib29sIGlzU3RvcmFnZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdXNhZ2UgJiBHUFVCdWZmZXJVc2FnZTo6U3RvcmFnZTsgfQorICAg
IGJvb2wgaXNSZWFkT25seSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNhZ2UgJiBzX3JlYWRPbmx5TWFz
azsgfQorICAgIGJvb2wgaXNNYXBwYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNhZ2UgJiAoR1BV
QnVmZmVyVXNhZ2U6Ok1hcFdyaXRlIHwgR1BVQnVmZmVyVXNhZ2U6Ok1hcFJlYWQpOyB9CisgICAg
U3RhdGUgc3RhdGUoKSBjb25zdDsKKworI2lmIFVTRShNRVRBTCkKKyAgICB2b2lkIGNvbW1hbmRC
dWZmZXJDb21taXR0ZWQoTVRMQ29tbWFuZEJ1ZmZlciAqKTsKKyAgICB2b2lkIGNvbW1hbmRCdWZm
ZXJDb21wbGV0ZWQoKTsKKworICAgIHZvaWQgcmV1c2VTdWJEYXRhQnVmZmVyKFJldGFpblB0cjxN
VExCdWZmZXI+JiYpOworI2VuZGlmCisKKyAgICB2b2lkIHNldFN1YkRhdGEodW5zaWduZWQsIGNv
bnN0IEpTQzo6QXJyYXlCdWZmZXImKTsKICAgICB1c2luZyBNYXBwaW5nQ2FsbGJhY2sgPSBXVEY6
OkZ1bmN0aW9uPHZvaWQoSlNDOjpBcnJheUJ1ZmZlciopPjsKICAgICB2b2lkIHJlZ2lzdGVyTWFw
cGluZ0NhbGxiYWNrKE1hcHBpbmdDYWxsYmFjayYmLCBib29sKTsKICAgICB2b2lkIHVubWFwKCk7
CkBAIC03OSwzMSArMTA0LDM1IEBAIHByaXZhdGU6CiAgICAgICAgIFBlbmRpbmdNYXBwaW5nQ2Fs
bGJhY2soTWFwcGluZ0NhbGxiYWNrJiYpOwogICAgIH07CiAKLSAgICBHUFVCdWZmZXIoUGxhdGZv
cm1CdWZmZXJTbWFydFB0ciYmLCBjb25zdCBHUFVCdWZmZXJEZXNjcmlwdG9yJik7CisgICAgc3Rh
dGljIGJvb2wgdmFsaWRhdGVCdWZmZXJDcmVhdGUoY29uc3QgR1BVRGV2aWNlJiwgY29uc3QgR1BV
QnVmZmVyRGVzY3JpcHRvciYpOworCisgICAgR1BVQnVmZmVyKFBsYXRmb3JtQnVmZmVyU21hcnRQ
dHImJiwgY29uc3QgR1BVQnVmZmVyRGVzY3JpcHRvciYsIFJlZjxHUFVEZXZpY2U+JiYpOwogCi0g
ICAgc3RhdGljIFJlZlB0cjxHUFVCdWZmZXI+IHRyeUNyZWF0ZVNoYXJlZEJ1ZmZlcihjb25zdCBH
UFVEZXZpY2UmLCBjb25zdCBHUFVCdWZmZXJEZXNjcmlwdG9yJik7CiAgICAgSlNDOjpBcnJheUJ1
ZmZlciogc3RhZ2luZ0J1ZmZlckZvclJlYWQoKTsKICAgICBKU0M6OkFycmF5QnVmZmVyKiBzdGFn
aW5nQnVmZmVyRm9yV3JpdGUoKTsKKyAgICB2b2lkIHJ1bk1hcHBpbmdDYWxsYmFjaygpOworCisg
ICAgYm9vbCBpc01hcFdyaXRlKCkgY29uc3QgeyByZXR1cm4gbV91c2FnZSAmIEdQVUJ1ZmZlclVz
YWdlOjpNYXBXcml0ZTsgfQorICAgIGJvb2wgaXNNYXBSZWFkKCkgY29uc3QgeyByZXR1cm4gbV91
c2FnZSAmIEdQVUJ1ZmZlclVzYWdlOjpNYXBSZWFkOyB9CisgICAgYm9vbCBpc01hcFdyaXRlYWJs
ZSgpIGNvbnN0IHsgcmV0dXJuIGlzTWFwV3JpdGUoKSAmJiBzdGF0ZSgpID09IFN0YXRlOjpVbm1h
cHBlZDsgfQorICAgIGJvb2wgaXNNYXBSZWFkYWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlzTWFwUmVh
ZCgpICYmIHN0YXRlKCkgPT0gU3RhdGU6OlVubWFwcGVkOyB9CiAKLSAgICBib29sIGlzTWFwcGFi
bGUoKSBjb25zdCB7IHJldHVybiBtX2lzTWFwV3JpdGUgfHwgbV9pc01hcFJlYWQ7IH0KLSAgICBi
b29sIGlzTWFwV3JpdGVhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc01hcFdyaXRlICYmICFtX3Bl
bmRpbmdDYWxsYmFjazsgfQotICAgIGJvb2wgaXNNYXBSZWFkYWJsZSgpIGNvbnN0IHsgcmV0dXJu
IG1faXNNYXBSZWFkICYmICFtX3BlbmRpbmdDYWxsYmFjazsgfQorICAgIHN0YXRpYyBjb25zdCBh
dXRvIHNfcmVhZE9ubHlNYXNrID0gR1BVQnVmZmVyVXNhZ2U6OkluZGV4IHwgR1BVQnVmZmVyVXNh
Z2U6OlZlcnRleCB8IEdQVUJ1ZmZlclVzYWdlOjpVbmlmb3JtIHwgR1BVQnVmZmVyVXNhZ2U6OlRy
YW5zZmVyU3JjOwogCiAgICAgUGxhdGZvcm1CdWZmZXJTbWFydFB0ciBtX3BsYXRmb3JtQnVmZmVy
OworICAgIFJlZjxHUFVEZXZpY2U+IG1fZGV2aWNlOworCisjaWYgVVNFKE1FVEFMKQorICAgIFZl
Y3RvcjxSZXRhaW5QdHI8TVRMQnVmZmVyPj4gbV9zdWJEYXRhQnVmZmVyczsKKyNlbmRpZgogCiAg
ICAgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+IG1fc3RhZ2luZ0J1ZmZlcjsKLSAgICBSZWZQdHI8
UGVuZGluZ01hcHBpbmdDYWxsYmFjaz4gbV9wZW5kaW5nQ2FsbGJhY2s7CisgICAgUmVmUHRyPFBl
bmRpbmdNYXBwaW5nQ2FsbGJhY2s+IG1fbWFwcGluZ0NhbGxiYWNrOwogICAgIERlZmVycmFibGVU
YXNrPFRpbWVyPiBtX21hcHBpbmdDYWxsYmFja1Rhc2s7CiAKICAgICB1bnNpZ25lZCBsb25nIG1f
Ynl0ZUxlbmd0aDsKKyAgICBHUFVCdWZmZXJVc2FnZTo6RmxhZ3MgbV91c2FnZTsKICAgICB1bnNp
Z25lZCBtX251bVNjaGVkdWxlZENvbW1hbmRCdWZmZXJzID0gMDsKLSAgICBib29sIG1faXNNYXBX
cml0ZTsKLSAgICBib29sIG1faXNNYXBSZWFkOwotICAgIGJvb2wgbV9pc0Rlc3Ryb3llZCA9IGZh
bHNlOwotICAgIGJvb2wgbV9pc1ZlcnRleDsKLSAgICBib29sIG1faXNVbmlmb3JtOwotICAgIGJv
b2wgbV9pc1N0b3JhZ2U7Ci0gICAgYm9vbCBtX2lzUmVhZE9ubHk7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvR1BVQnVmZmVyQmluZGluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L0dQVUJ1ZmZlckJpbmRpbmcuaAppbmRleCA4MjQ4ZDhiOGM5MDFjNTNmYjU0MzJmNzAx
ZDI4MDU1MWM0ODNiYTRhLi45MWUwODczM2M2OTM0ODg3NDIxY2Y5NGE3NWM2NjM2Mjk0ZDIzNDlj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVQnVm
ZmVyQmluZGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9H
UFVCdWZmZXJCaW5kaW5nLmgKQEAgLTMzLDcgKzMzLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogc3RydWN0IEdQVUJ1ZmZlckJpbmRpbmcgewotICAgIFJlZjxjb25zdCBHUFVCdWZmZXI+IGJ1
ZmZlcjsKKyAgICBSZWY8R1BVQnVmZmVyPiBidWZmZXI7CiAgICAgdW5zaWduZWQgbG9uZyBvZmZz
ZXQ7CiAgICAgdW5zaWduZWQgbG9uZyBzaXplOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVDb21tYW5kQnVmZmVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVQ29tbWFuZEJ1ZmZlci5oCmluZGV4IDgxZThl
OTllMjgwNmEyYmQ1ZDE2MWQ2NzA0MjI5YmEzNWQxMjVmYmYuLjk5YmNlZjAyNmE0MDUzNjgxNzc0
NzEyMDhkMTg5YzI0NzAyMzlhMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9HUFVDb21tYW5kQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVUNvbW1hbmRCdWZmZXIuaApAQCAtMzAsMTEgKzMwLDEzIEBA
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogT0JK
Q19QUk9UT0NPTChNVExDb21tYW5kQnVmZmVyKTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitj
bGFzcyBHUFVCdWZmZXI7CiBjbGFzcyBHUFVEZXZpY2U7CiAKIHVzaW5nIFBsYXRmb3JtQ29tbWFu
ZEJ1ZmZlciA9IE1UTENvbW1hbmRCdWZmZXI7CkBAIC00NSwxMSArNDcsMTUgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBSZWZQdHI8R1BVQ29tbWFuZEJ1ZmZlcj4gY3JlYXRlKEdQVURldmljZSYpOwog
CiAgICAgUGxhdGZvcm1Db21tYW5kQnVmZmVyKiBwbGF0Zm9ybUNvbW1hbmRCdWZmZXIoKSBjb25z
dCB7IHJldHVybiBtX3BsYXRmb3JtQ29tbWFuZEJ1ZmZlci5nZXQoKTsgfQorICAgIGNvbnN0IFZl
Y3RvcjxSZWY8R1BVQnVmZmVyPj4mIHVzZWRCdWZmZXJzKCkgY29uc3QgeyByZXR1cm4gbV91c2Vk
QnVmZmVyczsgfQorCisgICAgdm9pZCB1c2VCdWZmZXIoUmVmPEdQVUJ1ZmZlcj4mJiBidWZmZXIp
IHsgbV91c2VkQnVmZmVycy5hcHBlbmQoV1RGTW92ZShidWZmZXIpKTsgfQogCiBwcml2YXRlOgog
ICAgIEdQVUNvbW1hbmRCdWZmZXIoUGxhdGZvcm1Db21tYW5kQnVmZmVyU21hcnRQdHImJik7CiAK
ICAgICBQbGF0Zm9ybUNvbW1hbmRCdWZmZXJTbWFydFB0ciBtX3BsYXRmb3JtQ29tbWFuZEJ1ZmZl
cjsKKyAgICBWZWN0b3I8UmVmPEdQVUJ1ZmZlcj4+IG1fdXNlZEJ1ZmZlcnM7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvR1BVRGV2aWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dwdS9HUFVEZXZpY2UuY3BwCmluZGV4IGM2YWQyMTZlNGU3MTFhNjFhYjQ2MGJmMTcyNDM0
MGY1NDkwMDA4NGYuLjUxMmNkNTVhY2ZkODYxM2I2ZjE1ZGI1ZDE0NTdhZWJlZTEwNzE1YTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVEZXZpY2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVEZXZpY2Uu
Y3BwCkBAIC00NCw5ICs0NCw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmUHRyPEdQ
VUJ1ZmZlcj4gR1BVRGV2aWNlOjp0cnlDcmVhdGVCdWZmZXIoR1BVQnVmZmVyRGVzY3JpcHRvciYm
IGRlc2NyaXB0b3IpIGNvbnN0CitSZWZQdHI8R1BVQnVmZmVyPiBHUFVEZXZpY2U6OnRyeUNyZWF0
ZUJ1ZmZlcihHUFVCdWZmZXJEZXNjcmlwdG9yJiYgZGVzY3JpcHRvcikKIHsKLSAgICByZXR1cm4g
R1BVQnVmZmVyOjp0cnlDcmVhdGUoKnRoaXMsIFdURk1vdmUoZGVzY3JpcHRvcikpOworICAgIHJl
dHVybiBHUFVCdWZmZXI6OnRyeUNyZWF0ZShtYWtlUmVmKCp0aGlzKSwgV1RGTW92ZShkZXNjcmlw
dG9yKSk7CiB9CiAKIFJlZlB0cjxHUFVUZXh0dXJlPiBHUFVEZXZpY2U6OnRyeUNyZWF0ZVRleHR1
cmUoR1BVVGV4dHVyZURlc2NyaXB0b3ImJiBkZXNjcmlwdG9yKSBjb25zdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVURldmljZS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVURldmljZS5oCmluZGV4IDdmY2U4ZjQ4
M2U1ZTQ0OGFmMjRlYjA2M2Q0ZmFjNWI3MGRlNjJmMTcuLmYyMDY1MTdiNjMwZTg4Yjc5YmNlNzEx
MTVmNDhhMTcyN2ZkYTgwOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9HUFVEZXZpY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvR1BVRGV2aWNlLmgKQEAgLTYwLDcgKzYwLDcgQEAgY2xhc3MgR1BVRGV2aWNlIDog
cHVibGljIFJlZkNvdW50ZWQ8R1BVRGV2aWNlPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZlB0
cjxHUFVEZXZpY2U+IGNyZWF0ZShPcHRpb25hbDxHUFVSZXF1ZXN0QWRhcHRlck9wdGlvbnM+JiYp
OwogCi0gICAgUmVmUHRyPEdQVUJ1ZmZlcj4gdHJ5Q3JlYXRlQnVmZmVyKEdQVUJ1ZmZlckRlc2Ny
aXB0b3ImJikgY29uc3Q7CisgICAgUmVmUHRyPEdQVUJ1ZmZlcj4gdHJ5Q3JlYXRlQnVmZmVyKEdQ
VUJ1ZmZlckRlc2NyaXB0b3ImJik7CiAgICAgUmVmUHRyPEdQVVRleHR1cmU+IHRyeUNyZWF0ZVRl
eHR1cmUoR1BVVGV4dHVyZURlc2NyaXB0b3ImJikgY29uc3Q7CiAKICAgICBSZWZQdHI8R1BVQmlu
ZEdyb3VwTGF5b3V0PiB0cnlDcmVhdGVCaW5kR3JvdXBMYXlvdXQoR1BVQmluZEdyb3VwTGF5b3V0
RGVzY3JpcHRvciYmKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9HUFVQcm9ncmFtbWFibGVQYXNzRW5jb2Rlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXIuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjlkMjZkNTkzMTI4N2Q2MGUzOTYxNGZkZTY5MWQ2YzBlYWQ1ODUxNmQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BV
UHJvZ3JhbW1hYmxlUGFzc0VuY29kZXIuY3BwCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29k
ZXIuaCIKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJHUFVDb21tYW5kQnVmZmVy
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXI6
OkdQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyKFJlZjxHUFVDb21tYW5kQnVmZmVyPiYmIGNvbW1h
bmRCdWZmZXIpCisgICAgOiBtX2NvbW1hbmRCdWZmZXIoV1RGTW92ZShjb21tYW5kQnVmZmVyKSkK
K3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQ
VSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVQ
cm9ncmFtbWFibGVQYXNzRW5jb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L0dQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyLmgKaW5kZXggYWM0OThlZmVhNjdmNjA4
ZmU2OWI4NTY1Y2E5YjlkYzYwZTk1YTMzMC4uODk0YzQ3NTBkMWY4NjRlMzI5Mzk3YmVjNGQ0NDAy
ODk2OTI0NmY0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L0dQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyLmgKQEAgLTQwLDYg
KzQwLDcgQEAgT0JKQ19QUk9UT0NPTChNVExSZXNvdXJjZSk7CiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIEdQVUJpbmRHcm91cDsKK2NsYXNzIEdQVUNvbW1hbmRCdWZmZXI7CiBjbGFzcyBH
UFVSZW5kZXJQaXBlbGluZTsKIAogdXNpbmcgUGxhdGZvcm1Qcm9ncmFtbWFibGVQYXNzRW5jb2Rl
ciA9IE1UTENvbW1hbmRFbmNvZGVyOwpAQCAtNDksMTIgKzUwLDE1IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIH5HUFVQcm9ncmFtbWFibGVQYXNzRW5jb2RlcigpID0gZGVmYXVsdDsKIAogICAgIHZv
aWQgZW5kUGFzcygpOwotICAgIHZvaWQgc2V0QmluZEdyb3VwKHVuc2lnbmVkIGxvbmcsIGNvbnN0
IEdQVUJpbmRHcm91cCYpOworICAgIHZvaWQgc2V0QmluZEdyb3VwKHVuc2lnbmVkIGxvbmcsIEdQ
VUJpbmRHcm91cCYpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRQaXBlbGluZShSZWY8R1BVUmVuZGVy
UGlwZWxpbmU+JiYpID0gMDsKIAogcHJvdGVjdGVkOgorICAgIEdQVVByb2dyYW1tYWJsZVBhc3NF
bmNvZGVyKFJlZjxHUFVDb21tYW5kQnVmZmVyPiYmKTsKICAgICB2aXJ0dWFsIFBsYXRmb3JtUHJv
Z3JhbW1hYmxlUGFzc0VuY29kZXIqIHBsYXRmb3JtUGFzc0VuY29kZXIoKSBjb25zdCA9IDA7CiAK
KyAgICBHUFVDb21tYW5kQnVmZmVyJiBjb21tYW5kQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9j
b21tYW5kQnVmZmVyLmdldCgpOyB9CisKIHByaXZhdGU6CiAjaWYgVVNFKE1FVEFMKQogICAgIHZv
aWQgc2V0UmVzb3VyY2VBc0J1ZmZlck9uRW5jb2RlcihNVExBcmd1bWVudEVuY29kZXIgKiwgY29u
c3QgR1BVQmluZGluZ1Jlc291cmNlJiwgdW5zaWduZWQgbG9uZywgY29uc3QgY2hhciogY29uc3Qp
OwpAQCAtNjUsNiArNjksNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzZXRGcmFnbWVu
dEJ1ZmZlcihNVExCdWZmZXIgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykgeyB9CiAj
ZW5kaWYgLy8gVVNFKE1FVEFMKQogCisgICAgUmVmPEdQVUNvbW1hbmRCdWZmZXI+IG1fY29tbWFu
ZEJ1ZmZlcjsKICAgICBib29sIG1faXNFbmNvZGluZyB7IHRydWUgfTsKIH07CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVSZW5kZXJQYXNzRW5j
b2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVJlbmRlclBh
c3NFbmNvZGVyLmgKaW5kZXggZmViNWMzN2I4ODU1ZTdiMDM2ZTMzODgzYmEzNWFhYzQ2YzQzODQz
OC4uYjg1ZTMzMzlmZDc3ZmFjOWQyYWFiM2Y5MzgzOThlYmE0ODEyOTAzMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVJlbmRlclBhc3NFbmNvZGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVJlbmRlclBh
c3NFbmNvZGVyLmgKQEAgLTQ5LDE1ICs0OSwxNSBAQCB1c2luZyBQbGF0Zm9ybVJlbmRlclBhc3NF
bmNvZGVyU21hcnRQdHIgPSBSZXRhaW5QdHI8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+OwogCiBj
bGFzcyBHUFVSZW5kZXJQYXNzRW5jb2RlciA6IHB1YmxpYyBHUFVQcm9ncmFtbWFibGVQYXNzRW5j
b2RlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZlB0cjxHUFVSZW5kZXJQYXNzRW5jb2Rlcj4g
Y3JlYXRlKGNvbnN0IEdQVUNvbW1hbmRCdWZmZXImLCBHUFVSZW5kZXJQYXNzRGVzY3JpcHRvciYm
KTsKKyAgICBzdGF0aWMgUmVmUHRyPEdQVVJlbmRlclBhc3NFbmNvZGVyPiB0cnlDcmVhdGUoUmVm
PEdQVUNvbW1hbmRCdWZmZXI+JiYsIEdQVVJlbmRlclBhc3NEZXNjcmlwdG9yJiYpOwogCiAgICAg
dm9pZCBzZXRQaXBlbGluZShSZWY8R1BVUmVuZGVyUGlwZWxpbmU+JiYpIGZpbmFsOwogCi0gICAg
dm9pZCBzZXRWZXJ0ZXhCdWZmZXJzKHVuc2lnbmVkIGxvbmcsIFZlY3RvcjxSZWY8Y29uc3QgR1BV
QnVmZmVyPj4mJiwgVmVjdG9yPHVuc2lnbmVkIGxvbmcgbG9uZz4mJik7CisgICAgdm9pZCBzZXRW
ZXJ0ZXhCdWZmZXJzKHVuc2lnbmVkIGxvbmcsIFZlY3RvcjxSZWY8R1BVQnVmZmVyPj4mJiwgVmVj
dG9yPHVuc2lnbmVkIGxvbmcgbG9uZz4mJik7CiAgICAgdm9pZCBkcmF3KHVuc2lnbmVkIGxvbmcg
dmVydGV4Q291bnQsIHVuc2lnbmVkIGxvbmcgaW5zdGFuY2VDb3VudCwgdW5zaWduZWQgbG9uZyBm
aXJzdFZlcnRleCwgdW5zaWduZWQgbG9uZyBmaXJzdEluc3RhbmNlKTsKIAogcHJpdmF0ZToKLSAg
ICBHUFVSZW5kZXJQYXNzRW5jb2RlcihQbGF0Zm9ybVJlbmRlclBhc3NFbmNvZGVyU21hcnRQdHIm
Jik7CisgICAgR1BVUmVuZGVyUGFzc0VuY29kZXIoUmVmPEdQVUNvbW1hbmRCdWZmZXI+JiYsIFBs
YXRmb3JtUmVuZGVyUGFzc0VuY29kZXJTbWFydFB0ciYmKTsKICAgICB+R1BVUmVuZGVyUGFzc0Vu
Y29kZXIoKSB7IGVuZFBhc3MoKTsgfSAvLyBFbnN1cmUgdGhhdCBlbmNvZGluZyBoYXMgZW5kZWQg
YmVmb3JlIHJlbGVhc2UuCiAKICAgICBQbGF0Zm9ybVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyKiBw
bGF0Zm9ybVBhc3NFbmNvZGVyKCkgY29uc3QgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQnVmZmVyTWV0YWwubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQnVmZmVyTWV0YWwubW0K
aW5kZXggMjFlYTMyMzBiMmQ2ODlmN2Y5YTJiNmNhYjcwYWQ4ODRjMjdjNmNlYi4uZmE3MDEyZTMy
ODMyMGQ4ZTllMDVkZGNjZjc4MTg0ZTdkNWM1ZWUyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUJ1ZmZlck1ldGFsLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVCdWZmZXJNZXRhbC5t
bQpAQCAtMzQsMTggKzM0LDQ3IEBACiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BcnJheUJ1ZmZl
ci5oPgogI2ltcG9ydCA8TWV0YWwvTWV0YWwuaD4KICNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNl
cHRpb25zLmg+CisjaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLVJlZlB0cjxHUFVCdWZmZXI+IEdQVUJ1ZmZlcjo6dHJ5Q3JlYXRlU2hhcmVkQnVmZmVy
KGNvbnN0IEdQVURldmljZSYgZGV2aWNlLCBjb25zdCBHUFVCdWZmZXJEZXNjcmlwdG9yJiBkZXNj
cmlwdG9yKQorYm9vbCBHUFVCdWZmZXI6OnZhbGlkYXRlQnVmZmVyQ3JlYXRlKGNvbnN0IEdQVURl
dmljZSYgZGV2aWNlLCBjb25zdCBHUFVCdWZmZXJEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQogewot
ICAgIEFTU0VSVChkZXZpY2UucGxhdGZvcm1EZXZpY2UoKSk7CisgICAgaWYgKCFkZXZpY2UucGxh
dGZvcm1EZXZpY2UoKSkgeworICAgICAgICBMT0coV2ViR1BVLCAiR1BVQnVmZmVyOjpjcmVhdGUo
KTogSW52YWxpZCBHUFVEZXZpY2UhIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBpZiAoKGRlc2NyaXB0b3IudXNhZ2UgJiBHUFVCdWZmZXJVc2FnZTo6TWFwV3JpdGUpICYm
IChkZXNjcmlwdG9yLnVzYWdlICYgR1BVQnVmZmVyVXNhZ2U6Ok1hcFJlYWQpKSB7CisgICAgICAg
IExPRyhXZWJHUFUsICJHUFVCdWZmZXI6OmNyZWF0ZSgpOiBCdWZmZXIgY2Fubm90IGhhdmUgYm90
aCBNQVBfUkVBRCBhbmQgTUFQX1dSSVRFIHVzYWdlISIpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgaWYgKChkZXNjcmlwdG9yLnVzYWdlICYgc19yZWFkT25seU1hc2spICYm
IChkZXNjcmlwdG9yLnVzYWdlICYgR1BVQnVmZmVyVXNhZ2U6OlN0b3JhZ2UpKSB7CisgICAgICAg
IExPRyhXZWJHUFUsICJHUFVCdWZmZXI6OmNyZWF0ZSgpOiBCdWZmZXIgY2Fubm90IGhhdmUgYm90
aCBTVE9SQUdFIGFuZCBhIHJlYWQtb25seSB1c2FnZSEiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitSZWZQdHI8R1BVQnVmZmVyPiBHUFVC
dWZmZXI6OnRyeUNyZWF0ZShSZWY8R1BVRGV2aWNlPiYmIGRldmljZSwgR1BVQnVmZmVyRGVzY3Jp
cHRvciYmIGRlc2NyaXB0b3IpCit7CisgICAgaWYgKCF2YWxpZGF0ZUJ1ZmZlckNyZWF0ZShkZXZp
Y2UuZ2V0KCksIGRlc2NyaXB0b3IpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8v
IEZJWE1FOiBNZXRhbCBiZXN0IHByYWN0aWNlczogUmVhZC1vbmx5IG9uZS10aW1lLXVzZSBkYXRh
IGxlc3MgdGhhbiA0IEtCIHNob3VsZCBub3QgYWxsb2NhdGUgYSBNVExCdWZmZXIgYW5kIGJlIHVz
ZWQgaW4gW01UTENvbW1hbmRFbmNvZGVyIHNldCpCeXRlc10gY2FsbHMgaW5zdGVhZC4KKworICAg
IE1UTFJlc291cmNlT3B0aW9ucyByZXNvdXJjZU9wdGlvbnMgPSBNVExSZXNvdXJjZUNQVUNhY2hl
TW9kZURlZmF1bHRDYWNoZTsKKworICAgIC8vIE1hcHBhYmxlIGJ1ZmZlcnMgdXNlIHNoYXJlZCBz
dG9yYWdlIGFsbG9jYXRpb24uCisgICAgcmVzb3VyY2VPcHRpb25zIHw9IChkZXNjcmlwdG9yLnVz
YWdlICYgKEdQVUJ1ZmZlclVzYWdlOjpNYXBXcml0ZSB8IEdQVUJ1ZmZlclVzYWdlOjpNYXBSZWFk
KSkgPyBNVExSZXNvdXJjZVN0b3JhZ2VNb2RlU2hhcmVkIDogTVRMUmVzb3VyY2VTdG9yYWdlTW9k
ZVByaXZhdGU7CiAKICAgICBSZXRhaW5QdHI8TVRMQnVmZmVyPiBtdGxCdWZmZXI7CiAKICAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKLSAgICBtdGxCdWZmZXIgPSBhZG9wdE5TKFtk
ZXZpY2UucGxhdGZvcm1EZXZpY2UoKSBuZXdCdWZmZXJXaXRoTGVuZ3RoOmRlc2NyaXB0b3Iuc2l6
ZSBvcHRpb25zOiBNVExSZXNvdXJjZUNQVUNhY2hlTW9kZURlZmF1bHRDYWNoZV0pOworICAgIG10
bEJ1ZmZlciA9IGFkb3B0TlMoW2RldmljZS0+cGxhdGZvcm1EZXZpY2UoKSBuZXdCdWZmZXJXaXRo
TGVuZ3RoOmRlc2NyaXB0b3Iuc2l6ZSBvcHRpb25zOnJlc291cmNlT3B0aW9uc10pOwogCiAgICAg
RU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIApAQCAtNTQsNTIgKzgzLDEwOSBAQCBSZWZQdHI8
R1BVQnVmZmVyPiBHUFVCdWZmZXI6OnRyeUNyZWF0ZVNoYXJlZEJ1ZmZlcihjb25zdCBHUFVEZXZp
Y2UmIGRldmljZSwgY29ucwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBHUFVCdWZmZXIoV1RGTW92ZShtdGxCdWZmZXIpLCBkZXNjcmlw
dG9yKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR1BVQnVmZmVyKFdURk1vdmUobXRsQnVm
ZmVyKSwgZGVzY3JpcHRvciwgV1RGTW92ZShkZXZpY2UpKSk7CiB9CiAKLXN0YXRpYyBjb25zdCBh
dXRvIHJlYWRPbmx5TWFzayA9IEdQVUJ1ZmZlclVzYWdlOjpJbmRleCB8IEdQVUJ1ZmZlclVzYWdl
OjpWZXJ0ZXggfCBHUFVCdWZmZXJVc2FnZTo6VW5pZm9ybSB8IEdQVUJ1ZmZlclVzYWdlOjpUcmFu
c2ZlclNyYzsKK0dQVUJ1ZmZlcjo6R1BVQnVmZmVyKFJldGFpblB0cjxNVExCdWZmZXI+JiYgYnVm
ZmVyLCBjb25zdCBHUFVCdWZmZXJEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBSZWY8R1BVRGV2aWNl
PiYmIGRldmljZSkKKyAgICA6IG1fcGxhdGZvcm1CdWZmZXIoV1RGTW92ZShidWZmZXIpKQorICAg
ICwgbV9kZXZpY2UoV1RGTW92ZShkZXZpY2UpKQorICAgICwgbV9ieXRlTGVuZ3RoKGRlc2NyaXB0
b3Iuc2l6ZSkKKyAgICAsIG1fdXNhZ2Uoc3RhdGljX2Nhc3Q8R1BVQnVmZmVyVXNhZ2U6OkZsYWdz
PihkZXNjcmlwdG9yLnVzYWdlKSkKK3sKK30KIAotUmVmUHRyPEdQVUJ1ZmZlcj4gR1BVQnVmZmVy
Ojp0cnlDcmVhdGUoY29uc3QgR1BVRGV2aWNlJiBkZXZpY2UsIEdQVUJ1ZmZlckRlc2NyaXB0b3Im
JiBkZXNjcmlwdG9yKQorR1BVQnVmZmVyOjp+R1BVQnVmZmVyKCkKIHsKLSAgICBpZiAoIWRldmlj
ZS5wbGF0Zm9ybURldmljZSgpKSB7Ci0gICAgICAgIExPRyhXZWJHUFUsICJHUFVCdWZmZXI6OmNy
ZWF0ZSgpOiBJbnZhbGlkIEdQVURldmljZSEiKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgZGVzdHJveSgpOworfQorCitHUFVCdWZmZXI6OlN0YXRlIEdQVUJ1ZmZlcjo6c3RhdGUoKSBj
b25zdAoreworICAgIGlmICghbV9wbGF0Zm9ybUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIFN0YXRl
OjpEZXN0cm95ZWQ7CisgICAgaWYgKG1fbWFwcGluZ0NhbGxiYWNrKQorICAgICAgICByZXR1cm4g
U3RhdGU6Ok1hcHBlZDsKKworICAgIHJldHVybiBTdGF0ZTo6VW5tYXBwZWQ7Cit9CisKK3ZvaWQg
R1BVQnVmZmVyOjpzZXRTdWJEYXRhKHVuc2lnbmVkIG9mZnNldCwgY29uc3QgSlNDOjpBcnJheUJ1
ZmZlciYgZGF0YSkKK3sKKyAgICBpZiAoIWlzVHJhbnNmZXJEc3QoKSB8fCBzdGF0ZSgpICE9IFN0
YXRlOjpVbm1hcHBlZCkgeworICAgICAgICBMT0coV2ViR1BVLCAiR1BVQnVmZmVyOjpzZXRTdWJE
YXRhKCk6IEludmFsaWQgb3BlcmF0aW9uISIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGlmIChvZmZzZXQgKyBkYXRhLmJ5dGVMZW5ndGgoKSA+IG1fYnl0ZUxlbmd0aCkgeworICAgICAg
ICBMT0coV2ViR1BVLCAiR1BVQnVmZmVyOjpzZXRTdWJEYXRhKCk6IEludmFsaWQgb2Zmc2V0IG9y
IGRhdGEgc2l6ZSEiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICgoZGVzY3Jp
cHRvci51c2FnZSAmIEdQVUJ1ZmZlclVzYWdlOjpNYXBXcml0ZSkgJiYgKGRlc2NyaXB0b3IudXNh
Z2UgJiBHUFVCdWZmZXJVc2FnZTo6TWFwUmVhZCkpIHsKLSAgICAgICAgTE9HKFdlYkdQVSwgIkdQ
VUJ1ZmZlcjo6Y3JlYXRlKCk6IEJ1ZmZlciBjYW5ub3QgaGF2ZSBib3RoIE1BUF9SRUFEIGFuZCBN
QVBfV1JJVEUgdXNhZ2UhIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIC8vIEZJWE1F
OiBBZGQgYWxpZ25tZW50IGNoZWNrcyBvbmNlIHNwZWNpZmllZC4KKworICAgIGlmIChtX3N1YkRh
dGFCdWZmZXJzLmlzRW1wdHkoKSkgeworICAgICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlM7CisgICAgICAgIG1fc3ViRGF0YUJ1ZmZlcnMuYXBwZW5kKGFkb3B0TlMoW21fcGxhdGZvcm1C
dWZmZXIuZ2V0KCkuZGV2aWNlIG5ld0J1ZmZlcldpdGhMZW5ndGg6bV9ieXRlTGVuZ3RoIG9wdGlv
bnM6TVRMUmVzb3VyY2VDUFVDYWNoZU1vZGVEZWZhdWx0Q2FjaGVdKSk7CisgICAgICAgIEVORF9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAgfQogCi0gICAgaWYgKChkZXNjcmlwdG9yLnVzYWdl
ICYgcmVhZE9ubHlNYXNrKSAmJiAoZGVzY3JpcHRvci51c2FnZSAmIEdQVUJ1ZmZlclVzYWdlOjpT
dG9yYWdlKSkgewotICAgICAgICBMT0coV2ViR1BVLCAiR1BVQnVmZmVyOjpjcmVhdGUoKTogQnVm
ZmVyIGNhbm5vdCBoYXZlIGJvdGggU1RPUkFHRSBhbmQgYSByZWFkLW9ubHkgdXNhZ2UhIik7Ci0g
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIF9fYmxvY2sgYXV0byBzdGFnaW5nTXRsQnVmZmVy
ID0gbV9zdWJEYXRhQnVmZmVycy50YWtlTGFzdCgpOworCisgICAgaWYgKCFzdGFnaW5nTXRsQnVm
ZmVyIHx8IHN0YWdpbmdNdGxCdWZmZXIuZ2V0KCkubGVuZ3RoIDwgZGF0YS5ieXRlTGVuZ3RoKCkp
IHsKKyAgICAgICAgTE9HKFdlYkdQVSwgIkdQVUJ1ZmZlcjo6c2V0U3ViRGF0YSgpOiBVbmFibGUg
dG8gZ2V0IHN0YWdpbmcgYnVmZmVyIGZvciBwcm92aWRlZCBkYXRhISIpOworICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgLy8gTWFwcGFibGUgYnVmZmVycyBuZWVkIChkZWZhdWx0KSBzaGFy
ZWQgc3RvcmFnZSBhbGxvY2F0aW9uLgotICAgIGlmIChkZXNjcmlwdG9yLnVzYWdlICYgKEdQVUJ1
ZmZlclVzYWdlOjpNYXBXcml0ZSB8IEdQVUJ1ZmZlclVzYWdlOjpNYXBSZWFkKSkKLSAgICAgICAg
cmV0dXJuIHRyeUNyZWF0ZVNoYXJlZEJ1ZmZlcihkZXZpY2UsIGRlc2NyaXB0b3IpOworICAgIG1l
bWNweShzdGFnaW5nTXRsQnVmZmVyLmdldCgpLmNvbnRlbnRzLCBkYXRhLmRhdGEoKSwgZGF0YS5i
eXRlTGVuZ3RoKCkpOworCisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAg
YXV0byBjb21tYW5kQnVmZmVyID0gcmV0YWluUHRyKFttX2RldmljZS0+Z2V0UXVldWUoKS0+cGxh
dGZvcm1RdWV1ZSgpIGNvbW1hbmRCdWZmZXJdKTsKKyAgICBhdXRvIGJsaXRFbmNvZGVyID0gcmV0
YWluUHRyKFtjb21tYW5kQnVmZmVyIGJsaXRDb21tYW5kRW5jb2Rlcl0pOworCisgICAgW2JsaXRF
bmNvZGVyIGNvcHlGcm9tQnVmZmVyOnN0YWdpbmdNdGxCdWZmZXIuZ2V0KCkgc291cmNlT2Zmc2V0
OjAgdG9CdWZmZXI6bV9wbGF0Zm9ybUJ1ZmZlci5nZXQoKSBkZXN0aW5hdGlvbk9mZnNldDpvZmZz
ZXQgc2l6ZTpzdGFnaW5nTXRsQnVmZmVyLmdldCgpLmxlbmd0aF07CisgICAgW2JsaXRFbmNvZGVy
IGVuZEVuY29kaW5nXTsKKworICAgIGlmIChpc01hcHBhYmxlKCkpCisgICAgICAgIGNvbW1hbmRC
dWZmZXJDb21taXR0ZWQoY29tbWFuZEJ1ZmZlci5nZXQoKSk7CisKKyAgICBhdXRvIHByb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmUHRyKHRoaXMpOworICAgIFtjb21tYW5kQnVmZmVyIGFkZENvbXBsZXRl
ZEhhbmRsZXI6XihpZDxNVExDb21tYW5kQnVmZmVyPikgeworICAgICAgICBwcm90ZWN0ZWRUaGlz
LT5yZXVzZVN1YkRhdGFCdWZmZXIoV1RGTW92ZShzdGFnaW5nTXRsQnVmZmVyKSk7CisgICAgfV07
CisgICAgW2NvbW1hbmRCdWZmZXIgY29tbWl0XTsKKworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7Cit9CiAKLSAgICBMT0coV2ViR1BVLCAiR1BVQnVmZmVyOjpjcmVhdGUoKTogU3VwcG9y
dCBmb3Igbm9uLW1hcHBlZCBidWZmZXJzIG5vdCBpbXBsZW1lbnRlZCEiKTsKLSAgICByZXR1cm4g
bnVsbHB0cjsKKyNpZiBVU0UoTUVUQUwpCit2b2lkIEdQVUJ1ZmZlcjo6Y29tbWFuZEJ1ZmZlckNv
bW1pdHRlZChNVExDb21tYW5kQnVmZmVyICpjb21tYW5kQnVmZmVyKQoreworICAgICsrbV9udW1T
Y2hlZHVsZWRDb21tYW5kQnVmZmVyczsKKworICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWZQdHIodGhpcyk7CisgICAgW2NvbW1hbmRCdWZmZXIgYWRkQ29tcGxldGVkSGFuZGxlcjpeKGlk
PE1UTENvbW1hbmRCdWZmZXI+KSB7CisgICAgICAgIHByb3RlY3RlZFRoaXMtPmNvbW1hbmRCdWZm
ZXJDb21wbGV0ZWQoKTsKKyAgICB9XTsKIH0KIAotR1BVQnVmZmVyOjpHUFVCdWZmZXIoUmV0YWlu
UHRyPE1UTEJ1ZmZlcj4mJiBidWZmZXIsIGNvbnN0IEdQVUJ1ZmZlckRlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IpCi0gICAgOiBtX3BsYXRmb3JtQnVmZmVyKFdURk1vdmUoYnVmZmVyKSkKLSAgICAsIG1f
Ynl0ZUxlbmd0aChkZXNjcmlwdG9yLnNpemUpCi0gICAgLCBtX2lzTWFwV3JpdGUoZGVzY3JpcHRv
ci51c2FnZSAmIEdQVUJ1ZmZlclVzYWdlOjpNYXBXcml0ZSkKLSAgICAsIG1faXNNYXBSZWFkKGRl
c2NyaXB0b3IudXNhZ2UgJiBHUFVCdWZmZXJVc2FnZTo6TWFwUmVhZCkKLSAgICAsIG1faXNWZXJ0
ZXgoZGVzY3JpcHRvci51c2FnZSAmIEdQVUJ1ZmZlclVzYWdlOjpWZXJ0ZXgpCi0gICAgLCBtX2lz
VW5pZm9ybShkZXNjcmlwdG9yLnVzYWdlICYgR1BVQnVmZmVyVXNhZ2U6OlVuaWZvcm0pCi0gICAg
LCBtX2lzU3RvcmFnZShkZXNjcmlwdG9yLnVzYWdlICYgR1BVQnVmZmVyVXNhZ2U6OlN0b3JhZ2Up
Ci0gICAgLCBtX2lzUmVhZE9ubHkoZGVzY3JpcHRvci51c2FnZSAmIHJlYWRPbmx5TWFzaykKK3Zv
aWQgR1BVQnVmZmVyOjpjb21tYW5kQnVmZmVyQ29tcGxldGVkKCkKIHsKKyAgICBBU1NFUlQobV9u
dW1TY2hlZHVsZWRDb21tYW5kQnVmZmVycyk7CisKKyAgICBpZiAobV9udW1TY2hlZHVsZWRDb21t
YW5kQnVmZmVycyA9PSAxICYmIHN0YXRlKCkgPT0gU3RhdGU6Ok1hcHBlZCkgeworICAgICAgICBj
YWxsT25NYWluVGhyZWFkKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldICgp
IHsKKyAgICAgICAgICAgIHJ1bk1hcHBpbmdDYWxsYmFjaygpOworICAgICAgICB9KTsKKyAgICB9
CisKKyAgICAtLW1fbnVtU2NoZWR1bGVkQ29tbWFuZEJ1ZmZlcnM7CiB9CiAKLUdQVUJ1ZmZlcjo6
fkdQVUJ1ZmZlcigpCit2b2lkIEdQVUJ1ZmZlcjo6cmV1c2VTdWJEYXRhQnVmZmVyKFJldGFpblB0
cjxNVExCdWZmZXI+JiYgYnVmZmVyKQogewotICAgIHVubWFwKCk7CisgICAgbV9zdWJEYXRhQnVm
ZmVycy5hcHBlbmQoV1RGTW92ZShidWZmZXIpKTsKIH0KKyNlbmRpZiAvLyBVU0UoTUVUQUwpCiAK
IHZvaWQgR1BVQnVmZmVyOjpyZWdpc3Rlck1hcHBpbmdDYWxsYmFjayhNYXBwaW5nQ2FsbGJhY2sm
JiBjYWxsYmFjaywgYm9vbCBpc1JlYWQpCiB7CkBAIC0xMTUsMjEgKzIwMSwyNSBAQCB2b2lkIEdQ
VUJ1ZmZlcjo6cmVnaXN0ZXJNYXBwaW5nQ2FsbGJhY2soTWFwcGluZ0NhbGxiYWNrJiYgY2FsbGJh
Y2ssIGJvb2wgaXNSZWFkKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgQVNTRVJUKCFt
X3BlbmRpbmdDYWxsYmFjayAmJiAhbV9tYXBwaW5nQ2FsbGJhY2tUYXNrLmhhc1BlbmRpbmdUYXNr
KCkpOworICAgIEFTU0VSVCghbV9tYXBwaW5nQ2FsbGJhY2sgJiYgIW1fbWFwcGluZ0NhbGxiYWNr
VGFzay5oYXNQZW5kaW5nVGFzaygpKTsKIAogICAgIC8vIEFuIGV4aXN0aW5nIGNhbGxiYWNrIG1l
YW5zIHRoaXMgYnVmZmVyIGlzIGluIHRoZSBtYXBwZWQgc3RhdGUuCi0gICAgbV9wZW5kaW5nQ2Fs
bGJhY2sgPSBQZW5kaW5nTWFwcGluZ0NhbGxiYWNrOjpjcmVhdGUoV1RGTW92ZShjYWxsYmFjaykp
OworICAgIG1fbWFwcGluZ0NhbGxiYWNrID0gUGVuZGluZ01hcHBpbmdDYWxsYmFjazo6Y3JlYXRl
KFdURk1vdmUoY2FsbGJhY2spKTsKIAogICAgIC8vIElmIEdQVSBpcyBub3QgdXNpbmcgdGhpcyBi
dWZmZXIsIHJ1biB0aGUgY2FsbGJhY2sgQVNBUC4KICAgICBpZiAoIW1fbnVtU2NoZWR1bGVkQ29t
bWFuZEJ1ZmZlcnMpIHsKICAgICAgICAgbV9tYXBwaW5nQ2FsbGJhY2tUYXNrLnNjaGVkdWxlVGFz
ayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSAoKSBtdXRhYmxlIHsKLSAg
ICAgICAgICAgIEFTU0VSVChtX3BlbmRpbmdDYWxsYmFjayk7Ci0KLSAgICAgICAgICAgIG1fcGVu
ZGluZ0NhbGxiYWNrLT5jYWxsYmFjayhtX2lzTWFwUmVhZCA/IHN0YWdpbmdCdWZmZXJGb3JSZWFk
KCkgOiBzdGFnaW5nQnVmZmVyRm9yV3JpdGUoKSk7CisgICAgICAgICAgICBydW5NYXBwaW5nQ2Fs
bGJhY2soKTsKICAgICAgICAgfSk7CiAgICAgfQogfQogCit2b2lkIEdQVUJ1ZmZlcjo6cnVuTWFw
cGluZ0NhbGxiYWNrKCkKK3sKKyAgICBpZiAobV9tYXBwaW5nQ2FsbGJhY2spCisgICAgICAgIG1f
bWFwcGluZ0NhbGxiYWNrLT5jYWxsYmFjayhpc01hcFJlYWQoKSA/IHN0YWdpbmdCdWZmZXJGb3JS
ZWFkKCkgOiBzdGFnaW5nQnVmZmVyRm9yV3JpdGUoKSk7Cit9CisKIEpTQzo6QXJyYXlCdWZmZXIq
IEdQVUJ1ZmZlcjo6c3RhZ2luZ0J1ZmZlckZvclJlYWQoKQogewogICAgIGlmICghbV9zdGFnaW5n
QnVmZmVyKQpAQCAtMTUzLDI4ICsyNDMsMjUgQEAgdm9pZCBHUFVCdWZmZXI6OnVubWFwKCkKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtX3N0YWdpbmdCdWZmZXIgJiYgbV9pc01h
cFdyaXRlKSB7CisgICAgaWYgKG1fc3RhZ2luZ0J1ZmZlciAmJiBpc01hcFdyaXRlKCkpIHsKKyAg
ICAgICAgQVNTRVJUKG1fcGxhdGZvcm1CdWZmZXIpOwogICAgICAgICBtZW1jcHkobV9wbGF0Zm9y
bUJ1ZmZlci5nZXQoKS5jb250ZW50cywgbV9zdGFnaW5nQnVmZmVyLT5kYXRhKCksIG1fYnl0ZUxl
bmd0aCk7CiAgICAgICAgIG1fc3RhZ2luZ0J1ZmZlciA9IG51bGxwdHI7CiAgICAgfQogCi0gICAg
aWYgKG1fcGVuZGluZ0NhbGxiYWNrKSB7CisgICAgaWYgKG1fbWFwcGluZ0NhbGxiYWNrKSB7CiAg
ICAgICAgIG1fbWFwcGluZ0NhbGxiYWNrVGFzay5jYW5jZWxUYXNrKCk7Ci0gICAgICAgIG1fcGVu
ZGluZ0NhbGxiYWNrLT5jYWxsYmFjayhudWxscHRyKTsKLSAgICAgICAgbV9wZW5kaW5nQ2FsbGJh
Y2sgPSBudWxscHRyOworICAgICAgICBtX21hcHBpbmdDYWxsYmFjay0+Y2FsbGJhY2sobnVsbHB0
cik7CisgICAgICAgIG1fbWFwcGluZ0NhbGxiYWNrID0gbnVsbHB0cjsKICAgICB9CiB9CiAKIHZv
aWQgR1BVQnVmZmVyOjpkZXN0cm95KCkKIHsKLSAgICBpZiAoaXNNYXBwYWJsZSgpKQorICAgIGlm
IChzdGF0ZSgpID09IFN0YXRlOjpNYXBwZWQpCiAgICAgICAgIHVubWFwKCk7CiAKLSAgICBtX2lz
RGVzdHJveWVkID0gdHJ1ZTsKLQotICAgIC8vIEZJWE1FOiBJZiBHUFUgaXMgc3RpbGwgdXNpbmcg
dGhlIE1UTEJ1ZmZlciwgaXQgd2lsbCBiZSByZWxlYXNlZCBhZnRlciBhbGwgcmVsZXZhbnQgY29t
bWFuZHMgaGF2ZSBleGVjdXRlZC4KLSAgICBpZiAoIW1fbnVtU2NoZWR1bGVkQ29tbWFuZEJ1ZmZl
cnMpCi0gICAgICAgIG1fcGxhdGZvcm1CdWZmZXIgPSBudWxscHRyOworICAgIG1fcGxhdGZvcm1C
dWZmZXIgPSBudWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUHJvZ3JhbW1h
YmxlUGFzc0VuY29kZXJNZXRhbC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9jb2NvYS9HUFVQcm9ncmFtbWFibGVQYXNzRW5jb2Rlck1ldGFsLm1tCmluZGV4IGEzMzFi
NTM1ODNkNWMyMzY2MGUzNjM3Nzc3NjE1OWE5MWNlZjY3ZmQuLmNmZjI3ZmZiZWE3Yjk4ZTUwMzRj
Y2NkZjJkYmQyN2RlYTcwNTMzMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVQcm9ncmFtbWFibGVQYXNzRW5jb2Rlck1ldGFsLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVQcm9ncmFt
bWFibGVQYXNzRW5jb2Rlck1ldGFsLm1tCkBAIC02MSw3ICs2MSw4IEBAIHZvaWQgR1BVUHJvZ3Jh
bW1hYmxlUGFzc0VuY29kZXI6OnNldFJlc291cmNlQXNCdWZmZXJPbkVuY29kZXIoTVRMQXJndW1l
bnRFbmNvZGVyCiAgICAgfQogCiAgICAgYXV0byYgYnVmZmVyQmluZGluZyA9IFdURjo6Z2V0PEdQ
VUJ1ZmZlckJpbmRpbmc+KHJlc291cmNlKTsKLSAgICBhdXRvIG10bEJ1ZmZlciA9IGJ1ZmZlckJp
bmRpbmcuYnVmZmVyLT5wbGF0Zm9ybUJ1ZmZlcigpOworICAgIGF1dG8mIGJ1ZmZlclJlZiA9IGJ1
ZmZlckJpbmRpbmcuYnVmZmVyOworICAgIGF1dG8gbXRsQnVmZmVyID0gYnVmZmVyUmVmLT5wbGF0
Zm9ybUJ1ZmZlcigpOwogCiAgICAgaWYgKCFtdGxCdWZmZXIpIHsKICAgICAgICAgTE9HKFdlYkdQ
VSwgIiVzOiBJbnZhbGlkIE1UTEJ1ZmZlciBpbiBHUFVCdWZmZXJCaW5kaW5nISIsIGZ1bmN0aW9u
TmFtZSk7CkBAIC03MSwxMiArNzIsMTQgQEAgdm9pZCBHUFVQcm9ncmFtbWFibGVQYXNzRW5jb2Rl
cjo6c2V0UmVzb3VyY2VBc0J1ZmZlck9uRW5jb2RlcihNVExBcmd1bWVudEVuY29kZXIKICAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKICAgICBbYXJndW1lbnRFbmNvZGVyIHNldEJ1
ZmZlcjptdGxCdWZmZXIgb2Zmc2V0OmJ1ZmZlckJpbmRpbmcub2Zmc2V0IGF0SW5kZXg6aW5kZXhd
OwotICAgIHVzZVJlc291cmNlKG10bEJ1ZmZlciwgYnVmZmVyQmluZGluZy5idWZmZXItPmlzUmVh
ZE9ubHkoKSA/IE1UTFJlc291cmNlVXNhZ2VSZWFkIDogTVRMUmVzb3VyY2VVc2FnZVJlYWQgfCBN
VExSZXNvdXJjZVVzYWdlV3JpdGUpOworICAgIHVzZVJlc291cmNlKG10bEJ1ZmZlciwgYnVmZmVy
UmVmLT5pc1JlYWRPbmx5KCkgPyBNVExSZXNvdXJjZVVzYWdlUmVhZCA6IE1UTFJlc291cmNlVXNh
Z2VSZWFkIHwgTVRMUmVzb3VyY2VVc2FnZVdyaXRlKTsKIAogICAgIEVORF9CTE9DS19PQkpDX0VY
Q0VQVElPTlM7CisKKyAgICBtX2NvbW1hbmRCdWZmZXItPnVzZUJ1ZmZlcihidWZmZXJSZWYuY29w
eVJlZigpKTsKIH0KIAotdm9pZCBHUFVQcm9ncmFtbWFibGVQYXNzRW5jb2Rlcjo6c2V0QmluZEdy
b3VwKHVuc2lnbmVkIGxvbmcgaW5kZXgsIGNvbnN0IEdQVUJpbmRHcm91cCYgYmluZEdyb3VwKQor
dm9pZCBHUFVQcm9ncmFtbWFibGVQYXNzRW5jb2Rlcjo6c2V0QmluZEdyb3VwKHVuc2lnbmVkIGxv
bmcgaW5kZXgsIEdQVUJpbmRHcm91cCYgYmluZEdyb3VwKQogewogICAgIGNvbnN0IGNoYXIqIGNv
bnN0IGZ1bmN0aW9uTmFtZSA9ICJHUFVQcm9ncmFtbWFibGVQYXNzRW5jb2Rlcjo6c2V0QmluZEdy
b3VwKCkiOwogI2lmIExPR19ESVNBQkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVF1ZXVlTWV0YWwubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUXVldWVNZXRhbC5tbQppbmRleCBmZGVj
ZGVlYWNlMjQ0Y2U5NjMwNTRjYzM2ZDk2NzBlNWEyMDNhOGVlLi45MWJiZDVhNjBlNDcyYWY5NzAx
Yjc5OTlhOTZjMjI0MDIyZDJmMjAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUXVldWVNZXRhbC5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUXVldWVNZXRhbC5tbQpAQCAtNzAsMTAg
KzcwLDIwIEBAIEdQVVF1ZXVlOjpHUFVRdWV1ZShQbGF0Zm9ybVF1ZXVlU21hcnRQdHImJiBxdWV1
ZSkKIHsKIH0KIAotdm9pZCBHUFVRdWV1ZTo6c3VibWl0KFZlY3RvcjxSZWY8Y29uc3QgR1BVQ29t
bWFuZEJ1ZmZlcj4+JiYgYnVmZmVycykKK3ZvaWQgR1BVUXVldWU6OnN1Ym1pdChWZWN0b3I8UmVm
PGNvbnN0IEdQVUNvbW1hbmRCdWZmZXI+PiYmIGNvbW1hbmRCdWZmZXJzKQogewotICAgIGZvciAo
YXV0byYgYnVmZmVyIDogYnVmZmVycykKLSAgICAgICAgW2J1ZmZlci0+cGxhdGZvcm1Db21tYW5k
QnVmZmVyKCkgY29tbWl0XTsKKyAgICBmb3IgKGF1dG8mIGNvbW1hbmRCdWZmZXIgOiBjb21tYW5k
QnVmZmVycykgeworICAgICAgICAvLyBQcmV2ZW50IGFueSBidWZmZXIgbWFwcGluZyBjYWxsYmFj
a3MgZnJvbSBleGVjdXRpbmcgdW50aWwgY29tbWFuZCBidWZmZXIgaXMgY29tcGxldGUuCisgICAg
ICAgIGZvciAoYXV0byYgYnVmZmVyIDogY29tbWFuZEJ1ZmZlci0+dXNlZEJ1ZmZlcnMoKSkgewor
ICAgICAgICAgICAgaWYgKGJ1ZmZlci0+c3RhdGUoKSAhPSBHUFVCdWZmZXI6OlN0YXRlOjpVbm1h
cHBlZCkgeworICAgICAgICAgICAgICAgIExPRyhXZWJHUFUsICJHUFVRdWV1ZTo6c3VibWl0KCk6
IEludmFsaWQgR1BVQnVmZmVyIHNldCBvbiBhIEdQVUNvbW1hbmRCdWZmZXIhIik7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnVmZmVyLT5jb21t
YW5kQnVmZmVyQ29tbWl0dGVkKGNvbW1hbmRCdWZmZXItPnBsYXRmb3JtQ29tbWFuZEJ1ZmZlcigp
KTsKKyAgICAgICAgfQorCisgICAgICAgIFtjb21tYW5kQnVmZmVyLT5wbGF0Zm9ybUNvbW1hbmRC
dWZmZXIoKSBjb21taXRdOworICAgIH0KIH0KIAogU3RyaW5nIEdQVVF1ZXVlOjpsYWJlbCgpIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29j
b2EvR1BVUmVuZGVyUGFzc0VuY29kZXJNZXRhbC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQYXNzRW5jb2Rlck1ldGFsLm1tCmluZGV4IDky
ZTJhY2Y1MGNlMWFlMGFmZmZlNmRjZjM1YTg2YWU2Y2U4YWMwODMuLmQ2YTZlNjQyMzYyMzcxNWIy
NDc4ZjYzZjJkZDBjNTBhMmI3ODkyNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQYXNzRW5jb2Rlck1ldGFsLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQYXNz
RW5jb2Rlck1ldGFsLm1tCkBAIC0xMTMsOSArMTEzLDkgQEAgc3RhdGljIGJvb2wgcG9wdWxhdGVN
dGxEZXB0aFN0ZW5jaWxBdHRhY2htZW50KE1UTFJlbmRlclBhc3NEZXB0aEF0dGFjaG1lbnREZXNj
cmkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotUmVmUHRyPEdQVVJlbmRlclBhc3NFbmNvZGVyPiBH
UFVSZW5kZXJQYXNzRW5jb2Rlcjo6Y3JlYXRlKGNvbnN0IEdQVUNvbW1hbmRCdWZmZXImIGJ1ZmZl
ciwgR1BVUmVuZGVyUGFzc0Rlc2NyaXB0b3ImJiBkZXNjcmlwdG9yKQorUmVmUHRyPEdQVVJlbmRl
clBhc3NFbmNvZGVyPiBHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6dHJ5Q3JlYXRlKFJlZjxHUFVDb21t
YW5kQnVmZmVyPiYmIGJ1ZmZlciwgR1BVUmVuZGVyUGFzc0Rlc2NyaXB0b3ImJiBkZXNjcmlwdG9y
KQogewotICAgIGNvbnN0IGNoYXIqIGNvbnN0IGZ1bmN0aW9uTmFtZSA9ICJHUFVSZW5kZXJQYXNz
RW5jb2Rlcjo6Y3JlYXRlKCkiOworICAgIGNvbnN0IGNoYXIqIGNvbnN0IGZ1bmN0aW9uTmFtZSA9
ICJHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6dHJ5Q3JlYXRlKCkiOwogCiAgICAgUmV0YWluUHRyPE1U
TFJlbmRlclBhc3NEZXNjcmlwdG9yPiBtdGxEZXNjcmlwdG9yOwogCkBAIC0xMzcsMTEgKzEzNywx
MSBAQCBSZWZQdHI8R1BVUmVuZGVyUGFzc0VuY29kZXI+IEdQVVJlbmRlclBhc3NFbmNvZGVyOjpj
cmVhdGUoY29uc3QgR1BVQ29tbWFuZEJ1ZmZlcgogICAgICAgICAmJiAhcG9wdWxhdGVNdGxEZXB0
aFN0ZW5jaWxBdHRhY2htZW50KG10bERlc2NyaXB0b3IuZ2V0KCkuZGVwdGhBdHRhY2htZW50LCAq
ZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWxBdHRhY2htZW50LCBmdW5jdGlvbk5hbWUpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFBsYXRmb3JtUmVuZGVyUGFzc0VuY29kZXJTbWFydFB0
ciBtdGxFbmNvZGVyOworICAgIFJldGFpblB0cjxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gbXRs
RW5jb2RlcjsKIAogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAotICAgIG10bEVu
Y29kZXIgPSByZXRhaW5QdHIoW2J1ZmZlci5wbGF0Zm9ybUNvbW1hbmRCdWZmZXIoKSByZW5kZXJD
b21tYW5kRW5jb2RlcldpdGhEZXNjcmlwdG9yOm10bERlc2NyaXB0b3IuZ2V0KCldKTsKKyAgICBt
dGxFbmNvZGVyID0gcmV0YWluUHRyKFtidWZmZXItPnBsYXRmb3JtQ29tbWFuZEJ1ZmZlcigpIHJl
bmRlckNvbW1hbmRFbmNvZGVyV2l0aERlc2NyaXB0b3I6bXRsRGVzY3JpcHRvci5nZXQoKV0pOwog
CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIApAQCAtMTUwLDExICsxNTAsMTIgQEAg
UmVmUHRyPEdQVVJlbmRlclBhc3NFbmNvZGVyPiBHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6Y3JlYXRl
KGNvbnN0IEdQVUNvbW1hbmRCdWZmZXIKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQog
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHUFVSZW5kZXJQYXNzRW5jb2RlcihXVEZNb3ZlKG10
bEVuY29kZXIpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHUFVSZW5kZXJQYXNzRW5jb2Rl
cihXVEZNb3ZlKGJ1ZmZlciksIFdURk1vdmUobXRsRW5jb2RlcikpKTsKIH0KIAotR1BVUmVuZGVy
UGFzc0VuY29kZXI6OkdQVVJlbmRlclBhc3NFbmNvZGVyKFBsYXRmb3JtUmVuZGVyUGFzc0VuY29k
ZXJTbWFydFB0ciYmIGVuY29kZXIpCi0gICAgOiBtX3BsYXRmb3JtUmVuZGVyUGFzc0VuY29kZXIo
V1RGTW92ZShlbmNvZGVyKSkKK0dQVVJlbmRlclBhc3NFbmNvZGVyOjpHUFVSZW5kZXJQYXNzRW5j
b2RlcihSZWY8R1BVQ29tbWFuZEJ1ZmZlcj4mJiBjb21tYW5kQnVmZmVyLCBSZXRhaW5QdHI8TVRM
UmVuZGVyQ29tbWFuZEVuY29kZXI+JiYgZW5jb2RlcikKKyAgICA6IEdQVVByb2dyYW1tYWJsZVBh
c3NFbmNvZGVyKFdURk1vdmUoY29tbWFuZEJ1ZmZlcikpCisgICAgLCBtX3BsYXRmb3JtUmVuZGVy
UGFzc0VuY29kZXIoV1RGTW92ZShlbmNvZGVyKSkKIHsKIH0KIApAQCAtMTc3LDEzICsxNzgsMTQg
QEAgdm9pZCBHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6c2V0UGlwZWxpbmUoUmVmPEdQVVJlbmRlclBp
cGVsaW5lPiYmIHBpcGVsaW5lKQogICAgIG1fcGlwZWxpbmUgPSBXVEZNb3ZlKHBpcGVsaW5lKTsK
IH0KIAotdm9pZCBHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6c2V0VmVydGV4QnVmZmVycyh1bnNpZ25l
ZCBsb25nIGluZGV4LCBWZWN0b3I8UmVmPGNvbnN0IEdQVUJ1ZmZlcj4+JiYgYnVmZmVycywgVmVj
dG9yPHVuc2lnbmVkIGxvbmcgbG9uZz4mJiBvZmZzZXRzKQordm9pZCBHUFVSZW5kZXJQYXNzRW5j
b2Rlcjo6c2V0VmVydGV4QnVmZmVycyh1bnNpZ25lZCBsb25nIGluZGV4LCBWZWN0b3I8UmVmPEdQ
VUJ1ZmZlcj4+JiYgYnVmZmVycywgVmVjdG9yPHVuc2lnbmVkIGxvbmcgbG9uZz4mJiBvZmZzZXRz
KQogewogICAgIEFTU0VSVChidWZmZXJzLnNpemUoKSAmJiBvZmZzZXRzLnNpemUoKSA9PSBidWZm
ZXJzLnNpemUoKSk7CiAKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKLSAgICBh
dXRvIG10bEJ1ZmZlcnMgPSBidWZmZXJzLm1hcChbXSAoY29uc3QgYXV0byYgYnVmZmVyKSB7Cisg
ICAgYXV0byBtdGxCdWZmZXJzID0gYnVmZmVycy5tYXAoW3RoaXNdIChhdXRvJiBidWZmZXIpIHsK
KyAgICAgICAgY29tbWFuZEJ1ZmZlcigpLnVzZUJ1ZmZlcihidWZmZXIuY29weVJlZigpKTsKICAg
ICAgICAgcmV0dXJuIGJ1ZmZlci0+cGxhdGZvcm1CdWZmZXIoKTsKICAgICB9KTsKIApkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4
IGMyM2VjYjY3NTEzMWVmYzI2Nzc3ZjQ2MGE2ZDQzZTc4YmRiNTQ2YTMuLmEzZGJkOTdiM2QxZWQz
ZjY5MmI4ODVkZjE2YTU4NTJhMjRlODZhMGMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxOS0w
Mi0yNiAgSnVzdGluIEZhbiAgPGp1c3Rpbl9mYW5AYXBwbGUuY29tPgorCisgICAgICAgIFtXZWIg
R1BVXSBCdWZmZXIgdXBkYXRlcyBwYXJ0IDI6IHNldFN1YkRhdGEsIEdQVS9DUFUgc3luY2hyb25p
emF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
OTUwNzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgdGVzdHMgZm9yIG1hcFJlYWRBeXNuYyBhbmQgc2V0U3ViRGF0YSBjYWxscy4gTm9maXR5IHRl
c3RSdW5uZXIgd2hlbiBkb25lIG9uIHNvbWUgZHJhd2luZyB0ZXN0cworICAgICAgICB0aGF0IG1h
eSB0YWtlIG1vcmUgdGltZS4KKworICAgICAgICAqIHdlYmdwdS9idWZmZXItY29tbWFuZC1idWZm
ZXItcmFjZXMtZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L2J1ZmZlci1j
b21tYW5kLWJ1ZmZlci1yYWNlcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvYnVmZmVy
LXJlc291cmNlLXRyaWFuZ2xlcy5odG1sOiBVc2Ugc2V0U3ViRGF0YS4KKyAgICAgICAgKiB3ZWJn
cHUvZGVwdGgtZW5hYmxlZC10cmlhbmdsZS1zdHJpcC5odG1sOiBEaXR0by4KKyAgICAgICAgKiB3
ZWJncHUvbWFwLXJlYWQtYnVmZmVycy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdl
YmdwdS9tYXAtcmVhZC1idWZmZXJzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS92ZXJ0
ZXgtYnVmZmVyLXRyaWFuZ2xlLXN0cmlwLmh0bWw6IFVzZSBzZXRTdWJEYXRhLgorCiAyMDE5LTAy
LTIzICBKdXN0aW4gRmFuICA8anVzdGluX2ZhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkdQ
VV0gQnVmZmVyIHVwZGF0ZXMgcGFydCAxOiBhc3luYyBtYXBwaW5nIGZ1bmN0aW9ucywgdW5tYXAs
IGFuZCBkZXN0cm95CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvYnVmZmVyLWNvbW1h
bmQtYnVmZmVyLXJhY2VzLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvYnVmZmVy
LWNvbW1hbmQtYnVmZmVyLXJhY2VzLWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODg2ZjEzZTgx
MjAzOTdhNWNjNjMzNmM5ZTJhNDg1ZTc3OGJhOTkzMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3dlYmdwdS9idWZmZXItY29tbWFuZC1idWZmZXItcmFjZXMtZXhwZWN0ZWQuaHRtbApA
QCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4K
Kzx0aXRsZT5IVE1MIFJlZmVyZW5jZSBGaWxlPC90aXRsZT4KKzxwPlBhc3MgaWYgc3F1YXJlIGNh
bnZhcyBiZWxvdyBpcyBjb21wbGV0ZWx5IGdyZWVuLjwvcD4KKzxjYW52YXMgd2lkdGg9IjQwMCIg
aGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50
LnF1ZXJ5U2VsZWN0b3IoImNhbnZhcyIpOworY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250
ZXh0KCcyZCcpOworCitjb250ZXh0LmZpbGxTdHlsZSA9ICdyZ2IoMCwgMjU1LCAwKSc7Citjb250
ZXh0LmZpbGxSZWN0KDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7Cis8L3Njcmlw
dD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJncHUvYnVmZmVyLWNvbW1hbmQtYnVmZmVyLXJhY2VzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvYnVmZmVyLWNvbW1hbmQtYnVmZmVyLXJhY2VzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2IzMzc4YWVh
N2ZjYWFjMTYyOWE5MGZlZmRjMDIyMjNmZWE3MjE3MwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3dlYmdwdS9idWZmZXItY29tbWFuZC1idWZmZXItcmFjZXMuaHRtbApAQCAtMCwwICsx
LDE1OSBAQAorPCFET0NUWVBFIGh0bWw+Cis8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cis8dGl0bGU+
V2ViR1BVIEhlbGxvIFRyaWFuZ2xlczwvdGl0bGU+Cis8bWV0YSBuYW1lPSJhc3NlcnQiIGNvbnRl
bnQ9IldlYkdQVSBjb3JyZWN0bHkgcmVuZGVycyBhIGdyZWVuIGNhbnZhcy4iPgorPGxpbmsgcmVs
PSJtYXRjaCIgaHJlZj0idmVydGV4LWJ1ZmZlci10cmlhbmdsZS1zdHJpcC1leHBlY3RlZC5odG1s
Ij4KKzxwPlBhc3MgaWYgc3F1YXJlIGNhbnZhcyBiZWxvdyBpcyBjb21wbGV0ZWx5IGdyZWVuLjwv
cD4KKzxjYW52YXMgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdCBz
cmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2lmICh3aW5k
b3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKworY29uc3Qg
c2hhZGVyQ29kZSA9IGAKKyNpbmNsdWRlIDxtZXRhbF9zdGRsaWI+CisgICAgCit1c2luZyBuYW1l
c3BhY2UgbWV0YWw7CisKK3N0cnVjdCBWZXJ0ZXhJbgoreworICAgIGZsb2F0MiB4eSBbW2F0dHJp
YnV0ZSgwKV1dOworICAgIGZsb2F0MyByZ2IgW1thdHRyaWJ1dGUoMSldXTsKK307CisKK3N0cnVj
dCBWZXJ0ZXhPdXQKK3sKKyAgICBmbG9hdDQgcG9zaXRpb24gW1twb3NpdGlvbl1dOworICAgIGZs
b2F0NCBjb2xvcjsKK307CisKK3ZlcnRleCBWZXJ0ZXhPdXQgdmVydGV4X21haW4oVmVydGV4SW4g
dmVydGV4SW4gW1tzdGFnZV9pbl1dKQoreworICAgIFZlcnRleE91dCB2T3V0OworICAgIHZPdXQu
cG9zaXRpb24gPSBmbG9hdDQodmVydGV4SW4ueHksIDAsIDEpOworICAgIHZPdXQuY29sb3IgPSBm
bG9hdDQodmVydGV4SW4ucmdiLCAxKTsKKworICAgIHJldHVybiB2T3V0OworfQorCitmcmFnbWVu
dCBmbG9hdDQgZnJhZ21lbnRfbWFpbihWZXJ0ZXhPdXQgdiBbW3N0YWdlX2luXV0pCit7CisgICAg
cmV0dXJuIHYuY29sb3I7Cit9CitgCisKK2Z1bmN0aW9uIGNyZWF0ZUlucHV0U3RhdGVEZXNjcmlw
dG9yKCkgeworICAgIHJldHVybiB7CisgICAgICAgIGluZGV4Rm9ybWF0OiBXZWJHUFVJbmRleEZv
cm1hdC5VSU5UMzIsCisgICAgICAgIGF0dHJpYnV0ZXM6IFt7CisgICAgICAgICAgICBzaGFkZXJM
b2NhdGlvbjogMCwKKyAgICAgICAgICAgIGlucHV0U2xvdDogMCwKKyAgICAgICAgICAgIG9mZnNl
dDogMCwKKyAgICAgICAgICAgIGZvcm1hdDogV2ViR1BVVmVydGV4Rm9ybWF0LkZMT0FUX1IzMl9H
MzIKKyAgICAgICAgfSwgeworICAgICAgICAgICAgc2hhZGVyTG9jYXRpb246IDEsCisgICAgICAg
ICAgICBpbnB1dFNsb3Q6IDEsCisgICAgICAgICAgICBvZmZzZXQ6IDAsCisgICAgICAgICAgICBm
b3JtYXQ6IFdlYkdQVVZlcnRleEZvcm1hdC5GTE9BVF9SMzJfRzMyX0IzMgorICAgICAgICB9XSwK
KyAgICAgICAgaW5wdXRzOiBbeworICAgICAgICAgICAgaW5wdXRTbG90OiAwLAorICAgICAgICAg
ICAgc3RyaWRlOiA0ICogMiwKKyAgICAgICAgICAgIHN0ZXBNb2RlOiBXZWJHUFVJbnB1dFN0ZXBN
b2RlLlZFUlRFWAorICAgICAgICB9LCB7CisgICAgICAgICAgICBpbnB1dFNsb3Q6IDEsCisgICAg
ICAgICAgICBzdHJpZGU6IDQgKiAzLAorICAgICAgICAgICAgc3RlcE1vZGU6IFdlYkdQVUlucHV0
U3RlcE1vZGUuSU5TVEFOQ0UKKyAgICAgICAgfV0KKyAgICB9Cit9CisKK2Z1bmN0aW9uIGNyZWF0
ZUFuZFNldFZlcnRleEJ1ZmZlcihkZXZpY2UsIHZlcnRpY2VzKSB7CisgICAgY29uc3QgZmxvYXRB
cnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGljZXMpOworICAgIGNvbnN0IGJ1ZmZlciA9IGRl
dmljZS5jcmVhdGVCdWZmZXIoeyBzaXplOiBmbG9hdEFycmF5LmJ5dGVMZW5ndGgsIHVzYWdlOiBH
UFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9EU1QgfSk7Cisg
ICAgYnVmZmVyLnNldFN1YkRhdGEoMCwgZmxvYXRBcnJheS5idWZmZXIpOworICAgIHJldHVybiBi
dWZmZXI7Cit9CisKK2Z1bmN0aW9uIGRyYXdBbmRTdWJtaXRDb21tYW5kcyhkZXZpY2UsIHBpcGVs
aW5lLCBhdHRhY2htZW50LCB2ZXJ0ZXhCdWZmZXIsIGNvbG9yQnVmZmVyKSB7CisgICAgY29uc3Qg
Y29tbWFuZEJ1ZmZlciA9IGRldmljZS5jcmVhdGVDb21tYW5kQnVmZmVyKCk7CisgICAgY29uc3Qg
ZW5jb2RlciA9IGNvbW1hbmRCdWZmZXIuYmVnaW5SZW5kZXJQYXNzKHsgY29sb3JBdHRhY2htZW50
czogW2F0dGFjaG1lbnRdIH0pOworICAgIGVuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVy
dGV4QnVmZmVyLCBjb2xvckJ1ZmZlcl0sIFswLCAwXSk7CisgICAgZW5jb2Rlci5zZXRQaXBlbGlu
ZShwaXBlbGluZSk7CisgICAgZW5jb2Rlci5kcmF3KDMsIDEsIDAsIDApOworICAgIGVuY29kZXIu
ZW5kUGFzcygpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0p
OworfQorCithc3luYyBmdW5jdGlvbiB0ZXN0KCkgeworICAgIGNvbnN0IGRldmljZSA9IGF3YWl0
IGdldEJhc2ljRGV2aWNlKCk7CisgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQucXVlcnlTZWxl
Y3RvcigiY2FudmFzIik7CisgICAgY29uc3QgY29udGV4dCA9IGNyZWF0ZUJhc2ljQ29udGV4dChj
YW52YXMsIGRldmljZSk7CisgICAgLy8gRklYTUU6IFJlcGxhY2Ugd2l0aCBub24tTVNMIHNoYWRl
cnMuCisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7
IGNvZGU6IHNoYWRlckNvZGUgfSk7CisgICAgY29uc3QgaW5wdXRTdGF0ZURlc2NyaXB0b3IgPSBj
cmVhdGVJbnB1dFN0YXRlRGVzY3JpcHRvcigpOworICAgIGNvbnN0IHBpcGVsaW5lID0gY3JlYXRl
QmFzaWNQaXBlbGluZShzaGFkZXJNb2R1bGUsIGRldmljZSwgbnVsbCwgaW5wdXRTdGF0ZURlc2Ny
aXB0b3IpOworCisgICAgY29uc3QgdXBwZXJMZWZ0QnVmZmVyID0gY3JlYXRlQW5kU2V0VmVydGV4
QnVmZmVyKGRldmljZSwgWy0xLCAxLCAtMSwgLTEsIDAsIDFdKTsKKyAgICBjb25zdCBtaWRkbGVC
dWZmZXIgPSBjcmVhdGVBbmRTZXRWZXJ0ZXhCdWZmZXIoZGV2aWNlLCBbMCwgMSwgLTEsIC0xLCAx
LCAtMV0pOworICAgIGNvbnN0IHVwcGVyUmlnaHRCdWZmZXIgPSBjcmVhdGVBbmRTZXRWZXJ0ZXhC
dWZmZXIoZGV2aWNlLCBbMCwgMSwgMSwgMSwgMSwgLTFdKTsKKworICAgIGNvbnN0IGdyZWVuID0g
WzAsIDEsIDBdOworICAgIGNvbnN0IGJsdWUgPSBbMCwgMCwgMV07CisgICAgY29uc3QgZ3JlZW5B
cnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoZ3JlZW4pOworICAgIGNvbnN0IGJsdWVBcnJheSA9IG5l
dyBGbG9hdDMyQXJyYXkoYmx1ZSk7CisKKyAgICBjb25zdCBjb2xvckJ1ZmZlciA9IGRldmljZS5j
cmVhdGVCdWZmZXIoeyBzaXplOiBncmVlbkFycmF5LmJ5dGVMZW5ndGgsIHVzYWdlOiBHUFVCdWZm
ZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9EU1QgfCBHUFVCdWZmZXJV
c2FnZS5NQVBfV1JJVEUgfSk7CisgICAgY29sb3JCdWZmZXIuc2V0U3ViRGF0YSgwLCBncmVlbkFy
cmF5LmJ1ZmZlcik7CisKKyAgICBjb25zdCBhdHRhY2htZW50ID0geworICAgICAgICBhdHRhY2ht
ZW50OiBjb250ZXh0LmdldE5leHRUZXh0dXJlKCkuY3JlYXRlRGVmYXVsdFRleHR1cmVWaWV3KCks
CisgICAgICAgIGxvYWRPcDogImxvYWQiLAorICAgICAgICBzdG9yZU9wOiAic3RvcmUiLAorICAg
ICAgICBjbGVhckNvbG9yOiB7IHI6IDEsIGc6IDAsIGI6IDAsIGE6IDEgfQorICAgIH07CisKKyAg
ICAvKiBtYXBXcml0ZUFzeW5jIHNob3VsZCByZXNvbHZlIGFmdGVyIEdQVSBjb21tYW5kcyBhcmUg
Y29tcGxldGUsIHNvIHRyaWFuZ2xlIHNob3VsZCBiZSBncmVlbi4gKi8KKyAgICBkcmF3QW5kU3Vi
bWl0Q29tbWFuZHMoZGV2aWNlLCBwaXBlbGluZSwgYXR0YWNobWVudCwgdXBwZXJMZWZ0QnVmZmVy
LCBjb2xvckJ1ZmZlcik7CisgICAgYXdhaXQgY29sb3JCdWZmZXIubWFwV3JpdGVBc3luYygpLnRo
ZW4oYWIgPT4geworICAgICAgICBsZXQgYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KGFiKTsKKyAg
ICAgICAgYXJyYXkuc2V0KGJsdWUpOworICAgICAgICBjb2xvckJ1ZmZlci51bm1hcCgpOworICAg
IH0pOworCisgICAgYXdhaXQgY29sb3JCdWZmZXIubWFwV3JpdGVBc3luYygpLnRoZW4oYWIgPT4g
eworICAgICAgICBsZXQgYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KGFiKTsKKyAgICAgICAgYXJy
YXkuc2V0KGdyZWVuKTsKKyAgICB9KTsKKworICAgIC8qIGNvbG9yQnVmZmVyIHRoYXQgaXMgc3Rp
bGwgbWFwcGVkIHNob3VsZCBiZSBub3Qgc3VibWl0dGVkIHRvIGRyYXcgYSBibHVlIHRyaWFuZ2xl
LiAqLworICAgIGRyYXdBbmRTdWJtaXRDb21tYW5kcyhkZXZpY2UsIHBpcGVsaW5lLCBhdHRhY2ht
ZW50LCB1cHBlckxlZnRCdWZmZXIsIGNvbG9yQnVmZmVyKTsKKworICAgIC8qIGNvbG9yQnVmZmVy
IGRvZXMgbm90IGFjdHVhbGx5IGNvbnRhaW4gImdyZWVuIiBhZ2FpbiB1bnRpbCB0aGlzIGNhbGwu
ICovCisgICAgY29sb3JCdWZmZXIudW5tYXAoKTsKKworICAgIC8qIHNldFN1YkRhdGEgaW1tZWRp
YXRlbHkgYWZ0ZXIgYSBzdWJtaXQgc2hvdWxkIG5vdCBhZmZlY3QgdGhlIHByZWNlZGluZyBkcmF3
IGNhbGwuICovCisgICAgZHJhd0FuZFN1Ym1pdENvbW1hbmRzKGRldmljZSwgcGlwZWxpbmUsIGF0
dGFjaG1lbnQsIG1pZGRsZUJ1ZmZlciwgY29sb3JCdWZmZXIpOworICAgIGNvbG9yQnVmZmVyLnNl
dFN1YkRhdGEoMCwgYmx1ZUFycmF5LmJ1ZmZlcik7CisKKyAgICAvKiBkZXN0cm95IHJpZ2h0IGFm
dGVyIGEgc3VibWl0IHNob3VsZCBub3QgYWZmZWN0IHRoZSBkcmF3IGNhbGwuICovCisgICAgY29s
b3JCdWZmZXIuc2V0U3ViRGF0YSgwLCBncmVlbkFycmF5LmJ1ZmZlcik7CisgICAgZHJhd0FuZFN1
Ym1pdENvbW1hbmRzKGRldmljZSwgcGlwZWxpbmUsIGF0dGFjaG1lbnQsIHVwcGVyUmlnaHRCdWZm
ZXIsIGNvbG9yQnVmZmVyKTsKKyAgICB1cHBlclJpZ2h0QnVmZmVyLmRlc3Ryb3koKTsKKworICAg
IC8qIGRyYXcgY29tbWFuZCB3aXRoIGEgZGVzdHJveWVkIGJ1ZmZlciBzaG91bGQgZmFpbCAqLwor
ICAgIGNvbG9yQnVmZmVyLmRlc3Ryb3koKTsKKyAgICBkcmF3QW5kU3VibWl0Q29tbWFuZHMoZGV2
aWNlLCBwaXBlbGluZSwgYXR0YWNobWVudCwgbWlkZGxlQnVmZmVyLCBjb2xvckJ1ZmZlcik7CisK
KyAgICB1cHBlckxlZnRCdWZmZXIuZGVzdHJveSgpOworICAgIG1pZGRsZUJ1ZmZlci5kZXN0cm95
KCk7CisgICAgdXBwZXJSaWdodEJ1ZmZlci5kZXN0cm95KCk7CisgICAgCisgICAgY29udGV4dC5w
cmVzZW50KCk7CisKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5u
ZXIubm90aWZ5RG9uZSgpOworfQorCit0ZXN0KCk7Cis8L3NjcmlwdD4KXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvYnVmZmVyLXJlc291
cmNlLXRyaWFuZ2xlcy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L2J1ZmZlci1yZXNvdXJjZS10
cmlhbmdsZXMuaHRtbAppbmRleCBiNGEyODU1YTY1ZDA2ZjBjMTg3YWNkMjZjMmE4MmYyZDhmMmNi
OGFkLi4wNDQxYzI5NTlmMTViN2YxMGJmOWQ2MzNmYjlmN2QwMjY3OGMxYjA2IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy93ZWJncHUvYnVmZmVyLXJlc291cmNlLXRyaWFuZ2xlcy5odG1sCisrKyBi
L0xheW91dFRlc3RzL3dlYmdwdS9idWZmZXItcmVzb3VyY2UtdHJpYW5nbGVzLmh0bWwKQEAgLTcs
NiArNyw5IEBACiA8Y2FudmFzIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KIDxz
Y3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQ+Citp
ZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisK
IGNvbnN0IHNoYWRlckNvZGUgPSBgCiAjaW5jbHVkZSA8bWV0YWxfc3RkbGliPgogICAgIApAQCAt
NzksMjAgKzgyLDE1IEBAIGZ1bmN0aW9uIGNyZWF0ZVVuaWZvcm1CdWZmZXJCaW5kR3JvdXBMYXlv
dXQoYmluZE51bSwgc3RhZ2UgPSBXZWJHUFVTaGFkZXJTdGFnZUJpCiAKIGNvbnN0IHZlcnRleFNp
emUgPSA0ICogNDsKIGNvbnN0IHZlcnRpY2VzQnVmZmVyU2l6ZSA9IHZlcnRleFNpemUgKiAzOwot
ZnVuY3Rpb24gY3JlYXRlQW5kVXBsb2FkVmVydGljZXNCdWZmZXIoZGV2aWNlLCBwcm9taXNlcykg
ewotICAgIGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoeyBzaXplOnZlcnRpY2Vz
QnVmZmVyU2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdl
Lk1BUF9XUklURSB9KTsKLQotICAgIGNvbnN0IHByb21pc2UgPSBidWZmZXIubWFwV3JpdGVBc3lu
YygpLnRoZW4obWFwcGluZyA9PiB7Ci0gICAgICAgIGNvbnN0IG1hcHBlZEFycmF5ID0gbmV3IEZs
b2F0MzJBcnJheShtYXBwaW5nKTsKLSAgICAgICAgbWFwcGVkQXJyYXkuc2V0KFsKLSAgICAgICAg
ICAgIDAsIDEsIDAsIDEsCi0gICAgICAgICAgICAtMSwgLTEsIDAsIDEsCi0gICAgICAgICAgICAx
LCAtMSwgMCwgMQotICAgICAgICBdKTsKLSAgICAgICAgYnVmZmVyLnVubWFwKCk7Ci0gICAgfSk7
Ci0KLSAgICBwcm9taXNlcy5wdXNoKHByb21pc2UpOworZnVuY3Rpb24gY3JlYXRlQW5kVXBsb2Fk
VmVydGljZXNCdWZmZXIoZGV2aWNlKSB7CisgICAgY29uc3QgYnVmZmVyID0gZGV2aWNlLmNyZWF0
ZUJ1ZmZlcih7IHNpemU6dmVydGljZXNCdWZmZXJTaXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2Uu
VkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfRFNUIH0pOworICAgIGNvbnN0IGFycmF5
QnVmZmVyID0gbmV3IEZsb2F0MzJBcnJheShbCisgICAgICAgIDAsIDEsIDAsIDEsCisgICAgICAg
IC0xLCAtMSwgMCwgMSwKKyAgICAgICAgMSwgLTEsIDAsIDEKKyAgICBdKS5idWZmZXI7CisKKyAg
ICBidWZmZXIuc2V0U3ViRGF0YSgwLCBhcnJheUJ1ZmZlcik7CiAgICAgcmV0dXJuIGJ1ZmZlcjsK
IH0KIApAQCAtMTI1LDEwICsxMjMsOSBAQCBhc3luYyBmdW5jdGlvbiB0ZXN0KCkgewogICAgIGNv
bnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoeyBjb2RlOiBzaGFk
ZXJDb2RlIH0pOwogCiAgICAgLy8gQ3JlYXRlIHZlcnRleCBkYXRhIFdlYkdQVUJ1ZmZlcnMuCi0g
ICAgbGV0IGJ1ZmZlclByb21pc2VzID0gW107Ci0KLSAgICBjb25zdCB2ZXJ0aWNlc0J1ZmZlciA9
IGNyZWF0ZUFuZFVwbG9hZFZlcnRpY2VzQnVmZmVyKGRldmljZSwgYnVmZmVyUHJvbWlzZXMpOwor
ICAgIGNvbnN0IHZlcnRpY2VzQnVmZmVyID0gY3JlYXRlQW5kVXBsb2FkVmVydGljZXNCdWZmZXIo
ZGV2aWNlKTsKIAorICAgIGxldCBidWZmZXJQcm9taXNlcyA9IFtdOwogICAgIGNvbnN0IHVwcGVy
TGVmdCA9IGNyZWF0ZUZsb2F0NEJ1ZmZlcihkZXZpY2UsIC0xLCAxLCBidWZmZXJQcm9taXNlcyk7
CiAgICAgY29uc3QgdXBwZXJNaWRkbGUgPSBjcmVhdGVGbG9hdDRCdWZmZXIoZGV2aWNlLCAwLCAx
LCBidWZmZXJQcm9taXNlcyk7CiAgICAgY29uc3QgdXBwZXJSaWdodCA9IGNyZWF0ZUZsb2F0NEJ1
ZmZlcihkZXZpY2UsIDEsIDEsIGJ1ZmZlclByb21pc2VzKTsKQEAgLTIxMiw2ICsyMDksOSBAQCBh
c3luYyBmdW5jdGlvbiB0ZXN0KCkgewogICAgICAgICBjb25zdCBxdWV1ZSA9IGRldmljZS5nZXRR
dWV1ZSgpOwogICAgICAgICBxdWV1ZS5zdWJtaXQoW2VuZENvbW1hbmRCdWZmZXJdKTsKICAgICAg
ICAgY29udGV4dC5wcmVzZW50KCk7CisKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQor
ICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CiAgICAgfSk7CiB9CiAKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS9kZXB0aC1lbmFibGVkLXRyaWFuZ2xlLXN0cmlwLmh0
bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvZGVwdGgtZW5hYmxlZC10cmlhbmdsZS1zdHJpcC5odG1s
CmluZGV4IDlmZDEzM2JjYWNmN2RhMDc1MDFlOGFjODVmMGM2ZWVjZWQ1ZmM5NmMuLmNiYzdkMjE4
ZWQ0OWYwMWUyNWQ1MGFhZTk2YTFlOTBiZDY4NTdhNTcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3dlYmdwdS9kZXB0aC1lbmFibGVkLXRyaWFuZ2xlLXN0cmlwLmh0bWwKKysrIGIvTGF5b3V0VGVz
dHMvd2ViZ3B1L2RlcHRoLWVuYWJsZWQtdHJpYW5nbGUtc3RyaXAuaHRtbApAQCAtNyw2ICs3LDkg
QEAKIDxjYW52YXMgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgogPHNjcmlwdCBz
cmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgogPHNjcmlwdD4KK2lmICh3aW5k
b3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKwogY29uc3Qg
c2hhZGVyQ29kZSA9IGAKICNpbmNsdWRlIDxtZXRhbF9zdGRsaWI+CiAgICAgCkBAIC00NCwyMyAr
NDcsMTggQEAgZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50X21haW4oVmVydGV4T3V0IHYgW1tzdGFn
ZV9pbl1dKQogfQogYAogCi1hc3luYyBmdW5jdGlvbiBjcmVhdGVWZXJ0ZXhCdWZmZXIoZGV2aWNl
KSB7CitmdW5jdGlvbiBjcmVhdGVWZXJ0ZXhCdWZmZXIoZGV2aWNlKSB7CiAgICAgY29uc3QgYnVm
ZmVyU2l6ZSA9IDQgKiA0ICogNDsKLSAgICBjb25zdCBidWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVm
ZmVyKHsgc2l6ZTogYnVmZmVyU2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQ
VUJ1ZmZlclVzYWdlLk1BUF9XUklURSB9KTsKKyAgICBjb25zdCBidWZmZXIgPSBkZXZpY2UuY3Jl
YXRlQnVmZmVyKHsgc2l6ZTogYnVmZmVyU2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRF
WCB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX0RTVCB9KTsKKyAgICBjb25zdCBhcnJheUJ1ZmZl
ciA9IG5ldyBGbG9hdDMyQXJyYXkoWworICAgICAgICAvLyBmbG9hdDQgeHl6dworICAgICAgICAt
MSwgMSwgMCwgMSwKKyAgICAgICAgLTEsIC0xLCAwLCAxLAorICAgICAgICAxLCAxLCAwLCAxLAor
ICAgICAgICAxLCAtMSwgMCwgMQorICAgIF0pLmJ1ZmZlcjsKICAgICAKLSAgICBsZXQgZmxvYXRB
cnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLm1hcHBpbmcpOwotICAgIGF3YWl0IGJ1ZmZl
ci5tYXBXcml0ZUFzeW5jKCkudGhlbihtYXBwaW5nID0+IHsKLSAgICAgICAgbGV0IG1hcHBlZEFy
cmF5ID0gbmV3IEZsb2F0MzJBcnJheShtYXBwaW5nKTsKLSAgICAgICAgbWFwcGVkQXJyYXkuc2V0
KFsKLSAgICAgICAgICAgIC8vIGZsb2F0NCB4eXp3Ci0gICAgICAgICAgICAtMSwgMSwgMCwgMSwK
LSAgICAgICAgICAgIC0xLCAtMSwgMCwgMSwKLSAgICAgICAgICAgIDEsIDEsIDAsIDEsCi0gICAg
ICAgICAgICAxLCAtMSwgMCwgMQotICAgICAgICBdKTsKLSAgICAgICAgYnVmZmVyLnVubWFwKCk7
Ci0gICAgfSk7Ci0KKyAgICBidWZmZXIuc2V0U3ViRGF0YSgwLCBhcnJheUJ1ZmZlcik7CiAgICAg
cmV0dXJuIGJ1ZmZlcjsKIH0KIApAQCAtODcsNyArODUsNyBAQCBhc3luYyBmdW5jdGlvbiB0ZXN0
KCkgewogICAgIGNvbnN0IGNvbnRleHQgPSBjcmVhdGVCYXNpY0NvbnRleHQoY2FudmFzLCBkZXZp
Y2UpOwogICAgIC8vIEZJWE1FOiBSZXBsYWNlIHdpdGggbm9uLU1TTCBzaGFkZXJzLgogICAgIGNv
bnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoeyBjb2RlOiBzaGFk
ZXJDb2RlIH0pOwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlciA9ICBhd2FpdCBjcmVhdGVWZXJ0ZXhC
dWZmZXIoZGV2aWNlKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIgPSBjcmVhdGVWZXJ0ZXhCdWZm
ZXIoZGV2aWNlKTsKICAgICBjb25zdCBpbnB1dFN0YXRlRGVzY3JpcHRvciA9IGNyZWF0ZUlucHV0
U3RhdGVEZXNjcmlwdG9yKCk7CiAgICAgY29uc3QgZGVwdGhTdGF0ZURlc2NyaXB0b3IgPSBjcmVh
dGVCYXNpY0RlcHRoU3RhdGVEZXNjcmlwdG9yKCk7CiAgICAgY29uc3QgcGlwZWxpbmUgPSBjcmVh
dGVCYXNpY1BpcGVsaW5lKHNoYWRlck1vZHVsZSwgZGV2aWNlLCBudWxsLCBpbnB1dFN0YXRlRGVz
Y3JpcHRvciwgZGVwdGhTdGF0ZURlc2NyaXB0b3IpOwpAQCAtMTE5LDYgKzExNyw5IEBAIGFzeW5j
IGZ1bmN0aW9uIHRlc3QoKSB7CiAKICAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1h
bmRCdWZmZXJdKTsKICAgICBjb250ZXh0LnByZXNlbnQoKTsKKworICAgIGlmICh3aW5kb3cudGVz
dFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CiB9CiAKIHRlc3QoKTsK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS9tYXAtcmVhZC1idWZmZXJzLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS9tYXAtcmVhZC1idWZmZXJzLWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5lMzc5NTc5NGQzMmY0YjE1YzVlN2MzY2UyZGM2MDQ3OGZhZWExODhlCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L21hcC1yZWFkLWJ1ZmZlcnMtZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEsNiBAQAorCitQQVNTIHNldFN1YkRhdGEsIG1hcFJlYWRBc3luYywg
dW5tYXAsIGFuZCBkZXN0cm95IG9uIGEgR1BVQnVmZmVyLiAKK1BBU1MgUmVqZWN0IGEgbWFwIHJl
YWQgb24gYSBidWZmZXIgbm90IGNyZWF0ZWQgd2l0aCBNQVBfUkVBRCB1c2FnZS4gCitQQVNTIFJl
amVjdCBhIG1hcCByZWFkIG9uIGEgbWFwcGVkIEdQVUJ1ZmZlci4gCitQQVNTIFJlamVjdCBhIHBl
bmRpbmcgbWFwIHJlYWQgaWYgR1BVQnVmZmVyIGlzIHVubWFwcGVkLiAKKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViZ3B1L21hcC1yZWFkLWJ1ZmZlcnMuaHRtbCBiL0xheW91dFRlc3RzL3dl
YmdwdS9tYXAtcmVhZC1idWZmZXJzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2IwMGNmMjU1MTRlN2Y2NzEx
MGE3MDE2YjVmZDUwNzkzODcwNmIyZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dl
YmdwdS9tYXAtcmVhZC1idWZmZXJzLmh0bWwKQEAgLTAsMCArMSw4NiBAQAorPCFET0NUWVBFIGh0
bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViR1BVRW5hYmxlZD10
cnVlIF0gLS0+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPHRpdGxlPlRlc3RzIGZvciBzZXRTdWJE
YXRhIGFuZCBtYXBSZWFkQXN5bmMgb24gYSBHUFVCdWZmZXIuPC90aXRsZT4KKzxib2R5PgorPHNj
cmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Cithc3lu
YyBmdW5jdGlvbiBydW5UZXN0cygpIHsKKyAgICBjb25zdCBkZXZpY2UgPSAgYXdhaXQgZ2V0QmFz
aWNEZXZpY2UoKTsKKworICAgIC8vIEJhc2ljIG1hcFJlYWRBc3luYyBmdW5jdGlvbmFsaXR5Cisg
ICAgcHJvbWlzZV90ZXN0KGFzeW5jICgpID0+IHsKKyAgICAgICAgY29uc3QgYnVmZmVyID0gZGV2
aWNlLmNyZWF0ZUJ1ZmZlcih7IHNpemU6IDE2LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVFJBTlNG
RVJfRFNUIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUQgfSk7CisgICAgICAgIGFzc2VydF90cnVl
KGJ1ZmZlciBpbnN0YW5jZW9mIFdlYkdQVUJ1ZmZlciwgImNyZWF0ZUJ1ZmZlciByZXR1cm5lZCBh
IFdlYkdQVUJ1ZmZlciIpOworCisgICAgICAgIGxldCBhcnJheSA9IG5ldyBGbG9hdDMyQXJyYXko
WzEsIDIsIDMsIDRdKTsKKyAgICAgICAgYnVmZmVyLnNldFN1YkRhdGEoMCwgYXJyYXkuYnVmZmVy
KTsKKworICAgICAgICBsZXQgYXJyYXlCdWZmZXIgPSBhd2FpdCBidWZmZXIubWFwUmVhZEFzeW5j
KCk7CisgICAgICAgIGFzc2VydF90cnVlKGFycmF5QnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZm
ZXIsICJmaXJzdCBtYXBSZWFkQXN5bmMgcmVzb2x2ZWQgc3VjY2Vzc2Z1bGx5Iik7CisKKyAgICAg
ICAgY29uc3QgcmVhZEFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShhcnJheUJ1ZmZlcik7CisgICAg
ICAgIGFzc2VydF9lcXVhbHMocmVhZEFycmF5WzNdLCA0LCAic3VjY2Vzc2Z1bGx5IG1hcC1yZWFk
IHZhbHVlIHNldCBieSBzZXRTdWJEYXRhIik7CisKKyAgICAgICAgYnVmZmVyLnVubWFwKCk7CisK
KyAgICAgICAgYnVmZmVyLnNldFN1YkRhdGEoNCAqIDMsIGFycmF5LnNsaWNlKDAsIDEpLmJ1ZmZl
cik7CisgICAgICAgIGxldCBhcnJheUJ1ZmZlcjEgPSBhd2FpdCBidWZmZXIubWFwUmVhZEFzeW5j
KCk7CisgICAgICAgIGNvbnN0IHJlYWRBcnJheTEgPSBuZXcgRmxvYXQzMkFycmF5KGFycmF5QnVm
ZmVyMSk7CisgICAgICAgIGFzc2VydF9lcXVhbHMocmVhZEFycmF5WzNdLCAxLCAic3VjY2Vzc2Z1
bGx5IHNldFN1YkRhdGEgd2l0aCBhbiBvZmZzZXQiKTsKKworICAgICAgICBidWZmZXIudW5tYXAo
KTsKKworICAgICAgICBjb25zdCBwcm9taXNlID0gYnVmZmVyLm1hcFJlYWRBc3luYygpOyAvLyBU
aGlzIHdpbGwgZXZlbnR1YWxseSByZWplY3QgZHVlIHRvIGJ1ZmZlci5kZXN0cm95KCkKKworICAg
ICAgICBidWZmZXIuZGVzdHJveSgpOworCisgICAgICAgIGF3YWl0IHByb21pc2UudGhlbigoKSA9
PiB7CisgICAgICAgICAgICBhc3NlcnRfdW5yZWFjaGVkKCJCdWZmZXIgd2FzIGRlc3Ryb3llZCEi
KTsKKyAgICAgICAgfSwgKCkgPT4ge30pOworCisgICAgfSwgInNldFN1YkRhdGEsIG1hcFJlYWRB
c3luYywgdW5tYXAsIGFuZCBkZXN0cm95IG9uIGEgR1BVQnVmZmVyLiIpOworCisgICAgLyogQmFz
aWMgdmFsaWRhdGlvbiAqLworICAgIC8vIEZJWE1FOiBUZXN0IGludmFsaWQgY29tYmluYXRpb25z
IG9mIEdQVUJ1ZmZlclVzYWdlIGFmdGVyIGltcGxlbWVudGluZyBlcnJvciBoYW5kbGluZy4KKwor
ICAgIHByb21pc2VfdGVzdChhc3luYyAoKSA9PiB7CisgICAgICAgIGNvbnN0IGJ1ZmZlciA9IGRl
dmljZS5jcmVhdGVCdWZmZXIoeyBzaXplOiAxNiwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLk1BUF9X
UklURSB9KTsKKworICAgICAgICBhd2FpdCBidWZmZXIubWFwUmVhZEFzeW5jKCkudGhlbigoKSA9
PiB7CisgICAgICAgICAgICBhc3NlcnRfdW5yZWFjaGVkKCJCdWZmZXIgd2FzIG5vdCBjcmVhdGVk
IHdpdGggTUFQX1JFQUQhIik7CisgICAgICAgIH0sICgpID0+IHt9KTsKKyAgICB9LCAiUmVqZWN0
IGEgbWFwIHJlYWQgb24gYSBidWZmZXIgbm90IGNyZWF0ZWQgd2l0aCBNQVBfUkVBRCB1c2FnZS4i
KTsKKworICAgIC8qIEV4dGVuZGVkIHVubWFwL2Rlc3Ryb3kgYW5kIHByb21pc2Ugc2V0dGxpbmcg
dGVzdGluZyAqLworCisgICAgcHJvbWlzZV90ZXN0KGFzeW5jICgpID0+IHsKKyAgICAgICAgY29u
c3QgYnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih7IHNpemU6IDE2LCB1c2FnZTogR1BVQnVm
ZmVyVXNhZ2UuTUFQX1JFQUQgfSk7CisKKyAgICAgICAgYnVmZmVyLm1hcFJlYWRBc3luYygpLnRo
ZW4oKCkgPT4geworICAgICAgICAgICAgYnVmZmVyLnVubWFwKCk7CisgICAgICAgIH0sICgpID0+
IHsgCisgICAgICAgICAgICBhc3NlcnRfdW5yZWFjaGVkKCk7IAorICAgICAgICB9KTsKKworICAg
ICAgICBhd2FpdCBidWZmZXIubWFwUmVhZEFzeW5jKCkudGhlbigoKSA9PiB7CisgICAgICAgICAg
ICBhc3NlcnRfdW5yZWFjaGVkKCJNYXAgb3BlcmF0aW9uIHdhcyBpbnZhbGlkISIpOyAvLyBidWZm
ZXIgd2FzIHN0aWxsIGluIG1hcHBlZCBzdGF0ZSBkdXJpbmcgcHJvbWlzZSBjcmVhdGlvbgorICAg
ICAgICB9LCAoKSA9PiB7fSk7CisgICAgfSwgIlJlamVjdCBhIG1hcCByZWFkIG9uIGEgbWFwcGVk
IEdQVUJ1ZmZlci4iKTsKKworICAgIHByb21pc2VfdGVzdChhc3luYyAoKSA9PiB7CisgICAgICAg
IGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoeyBzaXplOiAxNiwgdXNhZ2U6IEdQ
VUJ1ZmZlclVzYWdlLk1BUF9SRUFEIH0pOworCisgICAgICAgIGNvbnN0IHByb21pc2UgPSBidWZm
ZXIubWFwUmVhZEFzeW5jKCk7CisgICAgICAgIGJ1ZmZlci51bm1hcCgpOworCisgICAgICAgIGF3
YWl0IHByb21pc2UudGhlbigoKSA9PiB7CisgICAgICAgICAgICBhc3NlcnRfdW5yZWFjaGVkKCJC
dWZmZXIgd2FzIHVubWFwcGVkISIpOyAvLyBidWZmZXIgd2FzIHVubWFwcGVkLCB3aGljaCByZWpl
Y3RzIHBlbmRpbmcgcHJvbWlzZXMKKyAgICAgICAgfSwoKSA9PiB7fSk7CisgICAgfSwgIlJlamVj
dCBhIHBlbmRpbmcgbWFwIHJlYWQgaWYgR1BVQnVmZmVyIGlzIHVubWFwcGVkLiIpOworfQorCity
dW5UZXN0cygpOworPC9zY3JpcHQ+Cis8L2JvZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJncHUvdmVydGV4LWJ1ZmZlci10cmlhbmdsZS1zdHJpcC5odG1sIGIvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3ZlcnRleC1idWZmZXItdHJpYW5nbGUtc3RyaXAuaHRtbAppbmRleCAyYzA1N2UzMzRhNjE0
Y2I4ZGFmZDNhYTk4YzljNDY4M2Y2MDkzYWFiLi40NGQ5NDQ5NzEzZDIzZWE0MmUwYjU5NjU4NzQ2
NWVlNDU2ZmY0NmNhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvdmVydGV4LWJ1ZmZl
ci10cmlhbmdsZS1zdHJpcC5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS92ZXJ0ZXgtYnVm
ZmVyLXRyaWFuZ2xlLXN0cmlwLmh0bWwKQEAgLTcsNiArNyw5IEBACiA8Y2FudmFzIHdpZHRoPSI0
MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KIDxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rp
b25zLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQ+CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAg
dGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisKIGNvbnN0IHNoYWRlckNvZGUgPSBgCiAjaW5j
bHVkZSA8bWV0YWxfc3RkbGliPgogICAgIApAQCAtMzgsMjEgKzQxLDIxIEBAIGZyYWdtZW50IGZs
b2F0NCBmcmFnbWVudF9tYWluKFZlcnRleE91dCB2IFtbc3RhZ2VfaW5dXSkKIH0KIGAKIAotYXN5
bmMgZnVuY3Rpb24gY3JlYXRlVmVydGV4QnVmZmVyKGRldmljZSkgeworZnVuY3Rpb24gY3JlYXRl
VmVydGV4QnVmZmVyKGRldmljZSkgewogICAgIGNvbnN0IGJ1ZmZlclNpemUgPSA0ICogNSAqIDQ7
Ci0gICAgY29uc3QgYnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih7IHNpemU6IGJ1ZmZlclNp
emUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJ
VEUgfSk7Ci0gICAgCi0gICAgYXdhaXQgYnVmZmVyLm1hcFdyaXRlQXN5bmMoKS50aGVuKG1hcHBp
bmcgPT4gewotICAgICAgICBsZXQgbWFwcGVkQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KG1hcHBp
bmcpOwotICAgICAgICBtYXBwZWRBcnJheS5zZXQoWwotICAgICAgICAgICAgLy8gZmxvYXQ0IHh5
encsIGZsb2F0IGcKLSAgICAgICAgICAgIC0xLCAxLCAwLCAxLCAxLAotICAgICAgICAgICAgLTEs
IC0xLCAwLCAxLCAxLAotICAgICAgICAgICAgMSwgMSwgMCwgMSwgMSwKLSAgICAgICAgICAgIDEs
IC0xLCAwLCAxLCAxCi0gICAgICAgIF0pOwotICAgICAgICBidWZmZXIudW5tYXAoKTsKLSAgICB9
KTsKKyAgICBjb25zdCBidWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHsgc2l6ZTogYnVmZmVy
U2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5T
RkVSX0RTVCB9KTsKKyAgICBjb25zdCB2ZXJ0ZXhBcnJheUJ1ZmZlcjAgPSBuZXcgRmxvYXQzMkFy
cmF5KFsKKyAgICAgICAgLy8gZmxvYXQ0IHh5encsIGZsb2F0IGcKKyAgICAgICAgLTEsIDEsIDAs
IDEsIDEsCisgICAgICAgIC0xLCAtMSwgMCwgMSwgMQorICAgIF0pLmJ1ZmZlcjsKKyAgICBjb25z
dCB2ZXJ0ZXhBcnJheUJ1ZmZlcjEgPSBuZXcgRmxvYXQzMkFycmF5KFsKKyAgICAgICAgMSwgMSwg
MCwgMSwgMSwKKyAgICAgICAgMSwgLTEsIDAsIDEsIDEKKyAgICBdKS5idWZmZXI7CisKKyAgICBi
dWZmZXIuc2V0U3ViRGF0YSgwLCB2ZXJ0ZXhBcnJheUJ1ZmZlcjApOworICAgIGJ1ZmZlci5zZXRT
dWJEYXRhKDQgKiA1ICogMiwgdmVydGV4QXJyYXlCdWZmZXIxKTsKIAogICAgIHJldHVybiBidWZm
ZXI7CiB9CkBAIC04NSwxNiArODgsMTkgQEAgYXN5bmMgZnVuY3Rpb24gdGVzdCgpIHsKICAgICBj
b25zdCBjb250ZXh0ID0gY3JlYXRlQmFzaWNDb250ZXh0KGNhbnZhcywgZGV2aWNlKTsKICAgICAv
LyBGSVhNRTogUmVwbGFjZSB3aXRoIG5vbi1NU0wgc2hhZGVycy4KICAgICBjb25zdCBzaGFkZXJN
b2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHsgY29kZTogc2hhZGVyQ29kZSB9KTsK
LSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIgPSBhd2FpdCBjcmVhdGVWZXJ0ZXhCdWZmZXIoZGV2aWNl
KTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIgPSBjcmVhdGVWZXJ0ZXhCdWZmZXIoZGV2aWNlKTsK
ICAgICBjb25zdCBpbnB1dFN0YXRlRGVzY3JpcHRvciA9IGNyZWF0ZUlucHV0U3RhdGVEZXNjcmlw
dG9yKCk7CiAgICAgY29uc3QgcGlwZWxpbmUgPSBjcmVhdGVCYXNpY1BpcGVsaW5lKHNoYWRlck1v
ZHVsZSwgZGV2aWNlLCBudWxsLCBpbnB1dFN0YXRlRGVzY3JpcHRvcik7CiAgICAgY29uc3QgY29t
bWFuZEJ1ZmZlciA9IGRldmljZS5jcmVhdGVDb21tYW5kQnVmZmVyKCk7CiAgICAgY29uc3QgcGFz
c0VuY29kZXIgPSBiZWdpbkJhc2ljUmVuZGVyUGFzcyhjb250ZXh0LCBjb21tYW5kQnVmZmVyKTsK
ICAgICBjb25zdCBlbmRDb21tYW5kQnVmZmVyID0gZW5jb2RlQmFzaWNDb21tYW5kcyhwYXNzRW5j
b2RlciwgcGlwZWxpbmUsIHZlcnRleEJ1ZmZlcik7CiAgICAgY29uc3QgcXVldWUgPSBkZXZpY2Uu
Z2V0UXVldWUoKTsKLQogICAgIHF1ZXVlLnN1Ym1pdChbZW5kQ29tbWFuZEJ1ZmZlcl0pOworICAg
IHZlcnRleEJ1ZmZlci5kZXN0cm95KCk7CiAgICAgY29udGV4dC5wcmVzZW50KCk7CisKKyAgICBp
ZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwog
fQogCiB0ZXN0KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363114</attachid>
            <date>2019-02-27 12:32:48 -0800</date>
            <delta_ts>2019-02-27 12:33:24 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-195077-20190227123247.patch</filename>
            <type>text/plain</type>
            <size>71855</size>
            <attacher name="Justin Fan">justin_fan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQxOTk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzJmZTI4ZWM4NzE4ODM1
YTFkNjhhZGFkZTg4ZTkzYzQ0OThjYjk4MC4uMTFlMmYzNjRkMDc2MGZhN2NhNjcwNzBhODY3ZGZm
OWY2NTBmNTg4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk3IEBACisyMDE5LTAyLTI3ICBKdXN0
aW4gRmFuICA8anVzdGluX2ZhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYiBHUFVdIEJ1ZmZl
ciB1cGRhdGVzIHBhcnQgMjogc2V0U3ViRGF0YSwgR1BVL0NQVSBzeW5jaHJvbml6YXRpb24KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NTA3NworCisg
ICAgICAgIFJldmlld2VkIGJ5IERlYW4gSmFja3Nvbi4KKworICAgICAgICBJbXBsZW1lbnQgR1BV
QnVmZmVyLnNldFN1YkRhdGEgYW5kIHByZXZlbnQgdGhlIHJlc29sdmluZyBvZiBtYXBwaW5nIHBy
b21pc2VzIGlmIHRoZSBidWZmZXIgaXMgc2NoZWR1bGVkIHRvIGJlIAorICAgICAgICB1c2VkIG9u
IHRoZSBHUFUsIGFuZCBhZGQgaGFuZGxlcnMgdG8gcmVzb2x2ZSBzdWNoIHByb21pc2VzIGFmdGVy
IGNvbW1hbmQgYnVmZmVyIGV4ZWN1dGlvbiBjb21wbGV0ZXMuIEluIGFkZGl0aW9uLAorICAgICAg
ICB1cGRhdGUgYnVmZmVyIHNpemVzIHRvIHU2NCAodW5zaWduZWQgbG9uZyBpbiBDKyspIGFzIHBl
ciB0aGUgdXBkYXRlZCBXZWIgR1BVIEFQSS4KKworICAgICAgICBUZXN0czogd2ViZ3B1L2J1ZmZl
ci1jb21tYW5kLWJ1ZmZlci1yYWNlcy5odG1sCisgICAgICAgICAgICAgICB3ZWJncHUvbWFwLXJl
YWQtYnVmZmVycy5odG1sCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XZWJHUFVCaW5kR3Jv
dXAuaDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdQVUJpbmRHcm91cDo6YmluZEdyb3VwIGNvbnN0
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XZWJHUFVCaW5kR3JvdXBEZXNjcmlwdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdQVUJpbmRHcm91cERlc2NyaXB0b3I6OmFzR1BVQmlu
ZEdyb3VwRGVzY3JpcHRvciBjb25zdCk6IFJlbmFtZSBiaW5kaW5nIC0+IGJ1ZmZlckJpbmRpbmcg
dG8gcmVkdWNlIGNvbmZ1c2lvbi4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XZWJHUFVCdWZm
ZXIuY3BwOiBTbWFsbCB0d2Vha3MuCisgICAgICAgIChXZWJDb3JlOjpXZWJHUFVCdWZmZXI6OnNl
dFN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR1BVQnVmZmVyOjp1bm1hcCk6IENvcnJl
Y3RseSBmYWlsIGlmIGJ1ZmZlciBpcyBkZXN0cm95ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJH
UFVCdWZmZXI6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR1BVQnVmZmVyOjpyZWpl
Y3RPclJlZ2lzdGVyUHJvbWlzZUNhbGxiYWNrKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9X
ZWJHUFVCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdQVUJ1ZmZlcjo6YnVmZmVyIGNv
bnN0KTogUmV0dXJuZWQgYnVmZmVyIGlzIG5vIGxvbmdlciBjb25zdCBzbyB0aGF0IGl0IGNhbiBi
ZSB1c2VkIGluIGNvbXBsZXRlZCBoYW5kbGVyIGNhbGxiYWNrcy4KKyAgICAgICAgKiBNb2R1bGVz
L3dlYmdwdS9XZWJHUFVCdWZmZXIuaWRsOiBFbmFibGUgc2V0U3ViRGF0YS4KKyAgICAgICAgKiBN
b2R1bGVzL3dlYmdwdS9XZWJHUFVDb21tYW5kQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdQVUNvbW1hbmRCdWZmZXI6OmJlZ2luUmVuZGVyUGFzcyk6CisgICAgICAgICogTW9kdWxl
cy93ZWJncHUvV2ViR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXI6OnNldEJpbmRHcm91cCBjb25zdCk6
CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV2ViR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXIu
aDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XZWJHUFVSZW5kZXJQYXNzRW5jb2Rlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6c2V0VmVydGV4QnVm
ZmVycyk6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVC
dWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdQVUJ1ZmZlcjo6aXNUcmFuc2ZlckRzdCBjb25z
dCk6IEFkZGVkIHZhcmlvdXMgc3RhdGUgYW5kIGZsYWcgZ2V0dGVycy4KKyAgICAgICAgKFdlYkNv
cmU6OkdQVUJ1ZmZlcjo6aXNWZXJ0ZXggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1BVQnVm
ZmVyOjppc1VuaWZvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1BVQnVmZmVyOjppc1N0
b3JhZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1BVQnVmZmVyOjppc1JlYWRPbmx5IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdQVUJ1ZmZlcjo6aXNNYXBwYWJsZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHUFVCdWZmZXI6OmlzTWFwV3JpdGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R1BVQnVmZmVyOjppc01hcFJlYWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R1BVQnVmZmVyOjppc01hcFdyaXRlYWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHUFVC
dWZmZXI6OmlzTWFwUmVhZGFibGUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2dwdS9HUFVCdWZmZXJCaW5kaW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L0dQVUNvbW1hbmRCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdQVUNvbW1hbmRCdWZmZXI6
OnVzZWRCdWZmZXJzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdQVUNvbW1hbmRCdWZmZXI6
OnVzZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVURldmljZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHUFVEZXZpY2U6OnRyeUNyZWF0ZUJ1ZmZlcik6IFBhc3Mg
UmVmIG9mIGl0c2VsZiBmb3IgQnVmZmVyIHRvIHJlcXVlc3QgdGhlIFF1ZXVlIGxhdGVyLCBpZiBu
ZWVkZWQuCisgICAgICAgIChXZWJDb3JlOjpHUFVEZXZpY2U6OnRyeUNyZWF0ZUJ1ZmZlciBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVURldmljZS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVQcm9ncmFtbWFibGVQYXNzRW5j
b2Rlci5jcHA6IFJldGFpbiB0aGUgZW5jb2RlcidzIGNvbW1hbmRCdWZmZXIgdG8gcmVmZXJlbmNl
IGl0cyB1c2VkIHJlc291cmNlIGJ1ZmZlcnMuCisgICAgICAgIChXZWJDb3JlOjpHUFVQcm9ncmFt
bWFibGVQYXNzRW5jb2Rlcjo6R1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVQcm9ncmFtbWFibGVQYXNzRW5jb2Rlci5oOgorICAg
ICAgICAoV2ViQ29yZTo6R1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXI6OmNvbW1hbmRCdWZmZXIg
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVSZW5kZXJQYXNzRW5j
b2Rlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVCdWZmZXJN
ZXRhbC5tbToKKyAgICAgICAgKFdlYkNvcmU6OkdQVUJ1ZmZlcjo6dmFsaWRhdGVCdWZmZXJDcmVh
dGUpOiBNb3ZlIHZhbGlkYXRpb24gb3V0IG9mIHRyeUNyZWF0ZS4KKyAgICAgICAgKFdlYkNvcmU6
OkdQVUJ1ZmZlcjo6dHJ5Q3JlYXRlKTogQ3JlYXRlIGJvdGggc2hhcmVkIGFuZCBwcml2YXRlIGJ1
ZmZlcnMsIGRlcGVuZGluZyBvbiB1c2FnZS4KKyAgICAgICAgKFdlYkNvcmU6OkdQVUJ1ZmZlcjo6
R1BVQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdQVUJ1ZmZlcjo6fkdQVUJ1ZmZlcik6IENh
bGwgZGVzdHJveSBpbnN0ZWFkIG9mIGp1c3QgdW5tYXAuCisgICAgICAgIChXZWJDb3JlOjpHUFVC
dWZmZXI6OnN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdQVUJ1ZmZlcjo6c2V0U3Vi
RGF0YSk6IFVzZXMgYSBjYWNoZWQgY29sbGVjdGlvbiBvZiBzdGFnaW5nIE1UTEJ1ZmZlcnMgdG8g
ZW5jb2RlIGRhdGEgY29waWVzIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBNVExCdWZmZXIuCisgICAg
ICAgIChXZWJDb3JlOjpHUFVCdWZmZXI6OmNvbW1hbmRCdWZmZXJDb21taXR0ZWQpOiBSZWdpc3Rl
ciBvbiB0aGUgR1BVQnVmZmVyIHRoYXQgdGhlIHByb3ZpZGVkIE1UTENvbW1hbmRCdWZmZXIgdXNl
cyBpdCwgYW5kIGlzIGFib3V0IHRvIGJlIGNvbW1pdHRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdQ
VUJ1ZmZlcjo6Y29tbWFuZEJ1ZmZlckNvbXBsZXRlZCk6IE1UTENvbW1hbmRCdWZmZXIncyBvbkNv
bXBsZXRlZEhhbmRsZXIgY2FsbHMgdGhpcy4KKyAgICAgICAgKFdlYkNvcmU6OkdQVUJ1ZmZlcjo6
cmV1c2VTdWJEYXRhQnVmZmVyKTogU2V0U3ViRGF0YSdzIGJsaXQgY29tbWFuZCBidWZmZXJzIGNh
bGwgdGhpcyB0byByZXR1cm4gYSBzdGFnaW5nIGJ1ZmZlciB0byB0aGUgcG9vbC4KKyAgICAgICAg
KFdlYkNvcmU6OkdQVUJ1ZmZlcjo6cmVnaXN0ZXJNYXBwaW5nQ2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6R1BVQnVmZmVyOjpydW5NYXBwaW5nQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6R1BVQnVmZmVyOjp1bm1hcCk6CisgICAgICAgIChXZWJDb3JlOjpHUFVCdWZmZXI6OmRlc3Ry
b3kpOgorICAgICAgICAoV2ViQ29yZTo6R1BVQnVmZmVyOjp0cnlDcmVhdGVTaGFyZWRCdWZmZXIp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVQcm9n
cmFtbWFibGVQYXNzRW5jb2Rlck1ldGFsLm1tOgorICAgICAgICAoV2ViQ29yZTo6R1BVUHJvZ3Jh
bW1hYmxlUGFzc0VuY29kZXI6OnNldFJlc291cmNlQXNCdWZmZXJPbkVuY29kZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXI6OnNldEJpbmRHcm91cCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVF1ZXVlTWV0YWwubW06Cisg
ICAgICAgIChXZWJDb3JlOjpHUFVRdWV1ZTo6c3VibWl0KTogRW5zdXJlIHN1Ym1pdHRlZCBidWZm
ZXJzIGFyZSBpbiB0aGUgY29ycmVjdCBzdGF0ZSwgYW5kIGFkZCBjb21wbGV0ZWQgaGFuZGxlcnMg
Zm9yIHN5bmNocm9uaXphdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29j
b2EvR1BVUmVuZGVyUGFzc0VuY29kZXJNZXRhbC5tbToKKyAgICAgICAgKFdlYkNvcmU6OkdQVVJl
bmRlclBhc3NFbmNvZGVyOjp0cnlDcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R1BVUmVuZGVy
UGFzc0VuY29kZXI6OkdQVVJlbmRlclBhc3NFbmNvZGVyKTogUmV0YWluIHRoZSBjb21tYW5kQnVm
ZmVyIGZvciBsYXRlciByZWZlcmVuY2UuCisgICAgICAgIChXZWJDb3JlOjpHUFVSZW5kZXJQYXNz
RW5jb2Rlcjo6c2V0VmVydGV4QnVmZmVycyk6IE1hcmsgdmVydGV4IGJ1ZmZlcnMgYXMgdXNlZCBi
ZWZvcmUgc3VibWlzc2lvbi4KKyAgICAgICAgKFdlYkNvcmU6OkdQVVJlbmRlclBhc3NFbmNvZGVy
OjpjcmVhdGUpOiBEZWxldGVkLgorCisgICAgICAgIEJ1ZmZlciBzaXplIHVwZGF0ZXMgaW4gdGhl
IElETDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9HUFVCdWZmZXJEZXNjcmlwdG9yLmlkbDoK
KyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XZWJHUFVCdWZmZXIuaWRsOgorICAgICAgICAqIE1v
ZHVsZXMvd2ViZ3B1L1dlYkdQVUJ1ZmZlckJpbmRpbmcuaWRsOgorICAgICAgICAqIE1vZHVsZXMv
d2ViZ3B1L1dlYkdQVUNvbW1hbmRCdWZmZXIuaWRsOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1
L1dlYkdQVVJlbmRlclBhc3NFbmNvZGVyLmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9X
ZWJHUFVWZXJ0ZXhBdHRyaWJ1dGVEZXNjcmlwdG9yLmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL3dl
YmdwdS9XZWJHUFVWZXJ0ZXhJbnB1dERlc2NyaXB0b3IuaWRsOgorCiAyMDE5LTAyLTIzICBKdXN0
aW4gRmFuICA8anVzdGluX2ZhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkdQVV0gQnVmZmVy
IHVwZGF0ZXMgcGFydCAxOiBhc3luYyBtYXBwaW5nIGZ1bmN0aW9ucywgdW5tYXAsIGFuZCBkZXN0
cm95CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9HUFVCdWZmZXJE
ZXNjcmlwdG9yLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L0dQVUJ1ZmZlckRl
c2NyaXB0b3IuaWRsCmluZGV4IDM3ODZlMzU2ODU3MjQ5ZGNmZmYyMDJlZjNjNDg3ZmY1YThkZTYw
NTYuLjI3MzM3N2Q1ZjAyOTFmYmM5MDBjOGQ3MDMyODJhMmRlYjQ5YzBmMDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L0dQVUJ1ZmZlckRlc2NyaXB0b3IuaWRsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L0dQVUJ1ZmZlckRlc2NyaXB0b3IuaWRs
CkBAIC0yNCwxMyArMjQsMTMgQEAKICAqLwogLy8gaHR0cHM6Ly9naXRodWIuY29tL2dwdXdlYi9n
cHV3ZWIvYmxvYi9tYXN0ZXIvZGVzaWduL3NrZXRjaC53ZWJpZGwKIAotdHlwZWRlZiB1bnNpZ25l
ZCBsb25nIHUzMjsKLXR5cGVkZWYgdTMyIEdQVUJ1ZmZlclVzYWdlRmxhZ3M7Cit0eXBlZGVmIHVu
c2lnbmVkIGxvbmcgbG9uZyB1NjQ7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgR1BVQnVmZmVyVXNh
Z2VGbGFnczsKIAogWwogICAgIENvbmRpdGlvbmFsPVdFQkdQVSwKICAgICBFbmFibGVkQXRSdW50
aW1lPVdlYkdQVQogXSBkaWN0aW9uYXJ5IEdQVUJ1ZmZlckRlc2NyaXB0b3IgewotICAgIHUzMiBz
aXplOworICAgIHU2NCBzaXplOwogICAgIEdQVUJ1ZmZlclVzYWdlRmxhZ3MgdXNhZ2U7CiB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVQmluZEdyb3Vw
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVCaW5kR3JvdXAuaAppbmRl
eCA1MDRkYTk1MGY1Y2U0MDk3OTMwZWJiYWRhMTMyZDZiOWI2ZDY5ZGYxLi44MjllYWIyYjNiMWE2
NmIyZmJkOTMxMzI3MjkxZmQ2NWViNjgyOGZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XZWJHUFVCaW5kR3JvdXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XZWJHUFVCaW5kR3JvdXAuaApAQCAtMzcsNyArMzcsNyBAQCBjbGFzcyBXZWJH
UFVCaW5kR3JvdXAgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJHUFVCaW5kR3JvdXA+IHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUmVmPFdlYkdQVUJpbmRHcm91cD4gY3JlYXRlKFJlZlB0cjxHUFVCaW5k
R3JvdXA+JiYpOwogCi0gICAgY29uc3QgR1BVQmluZEdyb3VwKiBiaW5kR3JvdXAoKSBjb25zdCB7
IHJldHVybiBtX2JpbmRHcm91cC5nZXQoKTsgfQorICAgIEdQVUJpbmRHcm91cCogYmluZEdyb3Vw
KCkgY29uc3QgeyByZXR1cm4gbV9iaW5kR3JvdXAuZ2V0KCk7IH0KIAogcHJpdmF0ZToKICAgICBl
eHBsaWNpdCBXZWJHUFVCaW5kR3JvdXAoUmVmUHRyPEdQVUJpbmRHcm91cD4mJik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVCaW5kR3JvdXBEZXNjcmlw
dG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVUJpbmRHcm91cERl
c2NyaXB0b3IuY3BwCmluZGV4IGM0YzZkNDZjMGM0YWVmMDY0NThiNjZhN2FmNTFiNjIwZTIzZjAz
NTguLmUwZTdkYmU3MzEzODUwZjMwZjZjZWY0NTg2ZjMxOTBmNGIyZGRjNDcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVUJpbmRHcm91cERlc2NyaXB0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVUJpbmRHcm91cERl
c2NyaXB0b3IuY3BwCkBAIC04Niw3ICs4Niw3IEBAIE9wdGlvbmFsPEdQVUJpbmRHcm91cERlc2Ny
aXB0b3I+IFdlYkdQVUJpbmRHcm91cERlc2NyaXB0b3I6OmFzR1BVQmluZEdyb3VwRGVzY3JpCiAg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9CiAKLSAgICAgICAgYXV0
byBsYXlvdXRCaW5kaW5nID0gaXRlcmF0b3ItPnZhbHVlOworICAgICAgICBjb25zdCBhdXRvIGxh
eW91dEJpbmRpbmcgPSBpdGVyYXRvci0+dmFsdWU7CiAKICAgICAgICAgYXV0byBiaW5kaW5nUmVz
b3VyY2VWaXNpdG9yID0gV1RGOjptYWtlVmlzaXRvcihbXSAoUmVmUHRyPFdlYkdQVVRleHR1cmVW
aWV3PiB2aWV3KSAtPiBPcHRpb25hbDxHUFVCaW5kaW5nUmVzb3VyY2U+IHsKICAgICAgICAgICAg
IC8vIEZJWE1FOiBWYWxpZGF0ZSBiaW5kaW5nIHR5cGUgd2l0aCB0aGUgdGV4dHVyZSdzIHVzYWdl
IGZsYWdzLgpAQCAtOTQsMTUgKzk0LDE1IEBAIE9wdGlvbmFsPEdQVUJpbmRHcm91cERlc2NyaXB0
b3I+IFdlYkdQVUJpbmRHcm91cERlc2NyaXB0b3I6OmFzR1BVQmluZEdyb3VwRGVzY3JpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEdQVUJpbmRpbmdSZXNvdXJjZT4odmlldy0+dGV4dHVyZSgpKTsKLSAgICAgICAg
fSwgWyZsYXlvdXRCaW5kaW5nLCBmdW5jdGlvbk5hbWVdIChjb25zdCBXZWJHUFVCdWZmZXJCaW5k
aW5nJiBiaW5kaW5nKSAtPiBPcHRpb25hbDxHUFVCaW5kaW5nUmVzb3VyY2U+IHsKLSAgICAgICAg
ICAgIGlmICghYmluZGluZy5idWZmZXIgfHwgIWJpbmRpbmcuYnVmZmVyLT5idWZmZXIoKSkgewor
ICAgICAgICB9LCBbJmxheW91dEJpbmRpbmcsIGZ1bmN0aW9uTmFtZV0gKFdlYkdQVUJ1ZmZlckJp
bmRpbmcgYnVmZmVyQmluZGluZykgLT4gT3B0aW9uYWw8R1BVQmluZGluZ1Jlc291cmNlPiB7Cisg
ICAgICAgICAgICBpZiAoIWJ1ZmZlckJpbmRpbmcuYnVmZmVyIHx8ICFidWZmZXJCaW5kaW5nLmJ1
ZmZlci0+YnVmZmVyKCkpIHsKICAgICAgICAgICAgICAgICBMT0coV2ViR1BVLCAiJXM6IEludmFs
aWQgR1BVQnVmZmVyQmluZGluZyBmb3IgYmluZGluZyAlbHUgaW4gR1BVQmluZEdyb3VwQmluZGlu
Z3MhIiwgZnVuY3Rpb25OYW1lLCBsYXlvdXRCaW5kaW5nLmJpbmRpbmcpOwogICAgICAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo
IXZhbGlkYXRlQnVmZmVyQmluZGluZ1R5cGUoYmluZGluZy5idWZmZXItPmJ1ZmZlcigpLmdldCgp
LCBsYXlvdXRCaW5kaW5nLCBmdW5jdGlvbk5hbWUpKQorICAgICAgICAgICAgaWYgKCF2YWxpZGF0
ZUJ1ZmZlckJpbmRpbmdUeXBlKGJ1ZmZlckJpbmRpbmcuYnVmZmVyLT5idWZmZXIoKS5nZXQoKSwg
bGF5b3V0QmluZGluZywgZnVuY3Rpb25OYW1lKSkKICAgICAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R1BVQmluZGluZ1Jl
c291cmNlPihHUFVCdWZmZXJCaW5kaW5nIHsgYmluZGluZy5idWZmZXItPmJ1ZmZlcigpLnJlbGVh
c2VOb25OdWxsKCksIGJpbmRpbmcub2Zmc2V0LCBiaW5kaW5nLnNpemUgfSk7CisgICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8R1BVQmluZGluZ1Jlc291cmNlPihHUFVCdWZmZXJCaW5kaW5n
IHsgYnVmZmVyQmluZGluZy5idWZmZXItPmJ1ZmZlcigpLnJlbGVhc2VOb25OdWxsKCksIGJ1ZmZl
ckJpbmRpbmcub2Zmc2V0LCBidWZmZXJCaW5kaW5nLnNpemUgfSk7CiAgICAgICAgIH0pOwogCiAg
ICAgICAgIGF1dG8gYmluZGluZ1Jlc291cmNlID0gV1RGOjp2aXNpdChiaW5kaW5nUmVzb3VyY2VW
aXNpdG9yLCBiaW5kaW5nLnJlc291cmNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dlYkdQVUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XZWJHUFVCdWZmZXIuY3BwCmluZGV4IDQwYmIxZjI1MTg2YmU0MjlhN2IyOWMwM2Y0NTFj
ZTU3NWFhNDEzN2QuLmFkZTIyNjE4OTQwNmY4NTdmYTFlM2ZiMjlkOGM5YmRiZWJmOTVmMzIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVUJ1ZmZlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVQnVmZmVyLmNwcApAQCAt
NDIsNiArNDIsMTQgQEAgV2ViR1BVQnVmZmVyOjpXZWJHUFVCdWZmZXIoUmVmUHRyPEdQVUJ1ZmZl
cj4mJiBidWZmZXIpCiB7CiB9CiAKK3ZvaWQgV2ViR1BVQnVmZmVyOjpzZXRTdWJEYXRhKHVuc2ln
bmVkIGxvbmcgb2Zmc2V0LCBjb25zdCBKU0M6OkFycmF5QnVmZmVyJiBkYXRhKQoreworICAgIGlm
ICghbV9idWZmZXIpCisgICAgICAgIExPRyhXZWJHUFUsICJHUFVCdWZmZXI6OnNldFN1YkRhdGEo
KTogSW52YWxpZCBvcGVyYXRpb24hIik7CisgICAgZWxzZQorICAgICAgICBtX2J1ZmZlci0+c2V0
U3ViRGF0YShvZmZzZXQsIGRhdGEpOworfQorCiB2b2lkIFdlYkdQVUJ1ZmZlcjo6bWFwUmVhZEFz
eW5jKEJ1ZmZlck1hcHBpbmdQcm9taXNlJiYgcHJvbWlzZSkKIHsKICAgICByZWplY3RPclJlZ2lz
dGVyUHJvbWlzZUNhbGxiYWNrKFdURk1vdmUocHJvbWlzZSksIHRydWUpOwpAQCAtNTQsNyArNjIs
OSBAQCB2b2lkIFdlYkdQVUJ1ZmZlcjo6bWFwV3JpdGVBc3luYyhCdWZmZXJNYXBwaW5nUHJvbWlz
ZSYmIHByb21pc2UpCiAKIHZvaWQgV2ViR1BVQnVmZmVyOjp1bm1hcCgpCiB7Ci0gICAgaWYgKG1f
YnVmZmVyKQorICAgIGlmICghbV9idWZmZXIpCisgICAgICAgIExPRyhXZWJHUFUsICJHUFVCdWZm
ZXI6OnVubWFwKCk6IEludmFsaWQgb3BlcmF0aW9uISIpOworICAgIGVsc2UKICAgICAgICAgbV9i
dWZmZXItPnVubWFwKCk7CiB9CiAKQEAgLTY0LDcgKzc0LDYgQEAgdm9pZCBXZWJHUFVCdWZmZXI6
OmRlc3Ryb3koKQogICAgICAgICBMT0coV2ViR1BVLCAiR1BVQnVmZmVyOjpkZXN0cm95KCk6IElu
dmFsaWQgb3BlcmF0aW9uISIpOwogICAgIGVsc2UgewogICAgICAgICBtX2J1ZmZlci0+ZGVzdHJv
eSgpOwotICAgICAgICAvLyBGSVhNRTogRW5zdXJlIHRoYXQgR1BVQnVmZmVyIGlzIGtlcHQgYWxp
dmUgYnkgcmVzb3VyY2UgYmluZGluZ3MgaWYgc3RpbGwgYmVpbmcgdXNlZCBieSBHUFUuCiAgICAg
ICAgIG1fYnVmZmVyID0gbnVsbHB0cjsKICAgICB9CiB9CkBAIC03OCwxMiArODcsMTAgQEAgdm9p
ZCBXZWJHUFVCdWZmZXI6OnJlamVjdE9yUmVnaXN0ZXJQcm9taXNlQ2FsbGJhY2soQnVmZmVyTWFw
cGluZ1Byb21pc2UmJiBwcm9taXMKICAgICB9CiAKICAgICBtX2J1ZmZlci0+cmVnaXN0ZXJNYXBw
aW5nQ2FsbGJhY2soW3Byb21pc2UgPSBXVEZNb3ZlKHByb21pc2UpXSAoSlNDOjpBcnJheUJ1ZmZl
ciogYXJyYXlCdWZmZXIpIG11dGFibGUgewotICAgICAgICBpZiAoIWFycmF5QnVmZmVyKSB7Cisg
ICAgICAgIGlmIChhcnJheUJ1ZmZlcikKKyAgICAgICAgICAgIHByb21pc2UucmVzb2x2ZSgqYXJy
YXlCdWZmZXIpOworICAgICAgICBlbHNlCiAgICAgICAgICAgICBwcm9taXNlLnJlamVjdCgpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJvbWlzZS5yZXNvbHZl
KGFycmF5QnVmZmVyKTsKICAgICB9LCBpc1JlYWQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dlYkdQVUJ1ZmZlci5oCmluZGV4IDI3ZTc5YjE0YjEzYzUzN2JlNzdjOWNm
NzZhNWVhNWE1MmM4YzZmMWUuLmY1NTVjN2M3NzdkYTNiZjczNmE5MGY4NjYyZWUxNGFmYmIxNDcx
NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVUJ1ZmZl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVUJ1ZmZlci5oCkBA
IC00NSw5ICs0NSwxMCBAQCBjbGFzcyBXZWJHUFVCdWZmZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxX
ZWJHUFVCdWZmZXI+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFdlYkdQVUJ1ZmZlcj4gY3Jl
YXRlKFJlZlB0cjxHUFVCdWZmZXI+JiYpOwogCi0gICAgUmVmUHRyPGNvbnN0IEdQVUJ1ZmZlcj4g
YnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXI7IH0KKyAgICBSZWZQdHI8R1BVQnVmZmVy
PiBidWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlcjsgfQogCi0gICAgdXNpbmcgQnVmZmVy
TWFwcGluZ1Byb21pc2UgPSBET01Qcm9taXNlRGVmZXJyZWQ8SURMSW50ZXJmYWNlPEpTQzo6QXJy
YXlCdWZmZXIqPj47CisgICAgdm9pZCBzZXRTdWJEYXRhKHVuc2lnbmVkIGxvbmcsIGNvbnN0IEpT
Qzo6QXJyYXlCdWZmZXImKTsKKyAgICB1c2luZyBCdWZmZXJNYXBwaW5nUHJvbWlzZSA9IERPTVBy
b21pc2VEZWZlcnJlZDxJRExJbnRlcmZhY2U8SlNDOjpBcnJheUJ1ZmZlcj4+OwogICAgIHZvaWQg
bWFwUmVhZEFzeW5jKEJ1ZmZlck1hcHBpbmdQcm9taXNlJiYpOwogICAgIHZvaWQgbWFwV3JpdGVB
c3luYyhCdWZmZXJNYXBwaW5nUHJvbWlzZSYmKTsKICAgICB2b2lkIHVubWFwKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVCdWZmZXIuaWRsIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVQnVmZmVyLmlkbAppbmRleCA3NTJhZTc0
NTZlOTIwNzYzNmYzNmQ2MTZmNTA3NzU5Zjk0MTY3ZWE2Li42MWRhMDllZDk0YTliYzY3ZDA4YWQz
YWM3MzI1ZWI0MjFjM2I5NzkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XZWJHUFVCdWZmZXIuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dlYkdQVUJ1ZmZlci5pZGwKQEAgLTIyLDEzICsyMiwxNiBAQAogICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgog
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCisvLyBodHRwczovL2dpdGh1
Yi5jb20vZ3B1d2ViL2dwdXdlYi9ibG9iL21hc3Rlci9kZXNpZ24vc2tldGNoLndlYmlkbAorCit0
eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1NjQ7CiAKIFsKICAgICBDb25kaXRpb25hbD1XRUJH
UFUsCiAgICAgRW5hYmxlZEF0UnVudGltZT1XZWJHUFUsCiAgICAgSW1wbGVtZW50YXRpb25MYWNr
c1ZUYWJsZQogXSBpbnRlcmZhY2UgV2ViR1BVQnVmZmVyIHsKLSAgICAvL3ZvaWQgc2V0U3ViRGF0
YSh1MzIgb2Zmc2V0LCBBcnJheUJ1ZmZlciBkYXRhKTsKKyAgICB2b2lkIHNldFN1YkRhdGEodTY0
IG9mZnNldCwgQXJyYXlCdWZmZXIgZGF0YSk7CiAKICAgICBQcm9taXNlPEFycmF5QnVmZmVyPiBt
YXBSZWFkQXN5bmMoKTsKICAgICBQcm9taXNlPEFycmF5QnVmZmVyPiBtYXBXcml0ZUFzeW5jKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVCdWZmZXJC
aW5kaW5nLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVUJ1ZmZlckJp
bmRpbmcuaWRsCmluZGV4IGFkNzI4NjY4MWJhM2QxZjNmYTE3MjFjNmZhZTgwZWJhZWIzMDRlOGMu
LmM5YTJlZmU2ZjY1N2I3NDRlOWZiYzFkOWMyNzJmZWFmODkzN2EwYzkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVUJ1ZmZlckJpbmRpbmcuaWRsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVUJ1ZmZlckJpbmRpbmcuaWRsCkBA
IC0yNCwxMyArMjQsMTMgQEAKICAqLwogLy8gaHR0cHM6Ly9naXRodWIuY29tL2dwdXdlYi9ncHV3
ZWIvYmxvYi9tYXN0ZXIvZGVzaWduL3NrZXRjaC53ZWJpZGwKIAotdHlwZWRlZiB1bnNpZ25lZCBs
b25nIHUzMjsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHU2NDsKIAogWwogICAgIENvbmRp
dGlvbmFsPVdFQkdQVSwKICAgICBFbmFibGVkQXRSdW50aW1lPVdlYkdQVQogXSBkaWN0aW9uYXJ5
IFdlYkdQVUJ1ZmZlckJpbmRpbmcgewogICAgIFdlYkdQVUJ1ZmZlciBidWZmZXI7Ci0gICAgdTMy
IG9mZnNldDsKLSAgICB1MzIgc2l6ZTsKKyAgICB1NjQgb2Zmc2V0OworICAgIHU2NCBzaXplOwog
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVUNvbW1h
bmRCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVQ29tbWFu
ZEJ1ZmZlci5jcHAKaW5kZXggNTg4OWM4OWYzMTE5OTZmZWJlODA5ZDc1NDc2YTk3NzIzNGJiYTll
ZS4uMjhhNWFiNzJkNzliOTJhYTI3MTRmMWIxMzM1MGFlYTlmNzk0ZjI4OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVQ29tbWFuZEJ1ZmZlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVQ29tbWFuZEJ1ZmZlci5jcHAK
QEAgLTUxLDcgKzUxLDcgQEAgUmVmUHRyPFdlYkdQVVJlbmRlclBhc3NFbmNvZGVyPiBXZWJHUFVD
b21tYW5kQnVmZmVyOjpiZWdpblJlbmRlclBhc3MoV2ViR1BVUmVuZGUKICAgICBpZiAoIWdwdURl
c2NyaXB0b3IpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgaWYgKGF1dG8gZW5jb2Rl
ciA9IEdQVVJlbmRlclBhc3NFbmNvZGVyOjpjcmVhdGUobV9jb21tYW5kQnVmZmVyLmdldCgpLCBX
VEZNb3ZlKCpncHVEZXNjcmlwdG9yKSkpCisgICAgaWYgKGF1dG8gZW5jb2RlciA9IEdQVVJlbmRl
clBhc3NFbmNvZGVyOjp0cnlDcmVhdGUobV9jb21tYW5kQnVmZmVyLmNvcHlSZWYoKSwgV1RGTW92
ZSgqZ3B1RGVzY3JpcHRvcikpKQogICAgICAgICByZXR1cm4gV2ViR1BVUmVuZGVyUGFzc0VuY29k
ZXI6OmNyZWF0ZSgqdGhpcywgZW5jb2Rlci5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICByZXR1cm4g
bnVsbHB0cjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dl
YkdQVUNvbW1hbmRCdWZmZXIuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2Vi
R1BVQ29tbWFuZEJ1ZmZlci5pZGwKaW5kZXggMGZhYTNmOTY3YWNlMWQ5MTc3YzUwYjYyOTA0YmM2
MDNiMmMyOTk4Ny4uYjlmNDJjZmRhYWJmNThmOTY5YzAwZDYyODRiZDkzYzliMjA5YjRmOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVQ29tbWFuZEJ1ZmZl
ci5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVQ29tbWFuZEJ1
ZmZlci5pZGwKQEAgLTM3LDEwICszNywxMCBAQAogICAgIC8vIENvbW1hbmRzIGFsbG93ZWQgb3V0
c2lkZSBvZiAicGFzc2VzIgogICAgICAgICB2b2lkIGNvcHlCdWZmZXJUb0J1ZmZlcigKICAgICAg
ICAgV2ViR1BVQnVmZmVyIHNyYywKLSAgICAgICAgdTMyIHNyY09mZnNldCwKKyAgICAgICAgdTY0
IHNyY09mZnNldCwKICAgICAgICAgV2ViR1BVQnVmZmVyIGRzdCwKLSAgICAgICAgdTMyIGRzdE9m
ZnNldCwKLSAgICAgICAgdTMyIHNpemUpOworICAgICAgICB1NjQgZHN0T2Zmc2V0LAorICAgICAg
ICB1NjQgc2l6ZSk7CiAKICAgICB2b2lkIGNvcHlCdWZmZXJUb1RleHR1cmUoCiAgICAgICAgIFdl
YkdQVUJ1ZmZlckNvcHlWaWV3IHNvdXJjZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dlYkdQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyLmNwcApp
bmRleCBjMzkxNTIwYjYzZDE2ODhjYzMzNDM3NGUwYzk1M2MwODVmZWMxYjYyLi5mMDVkMTFhMDNh
NDA0YjFiNzU0MjdiNmJlNmQwOGIxMjYwZmI5ZDgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVQcm9ncmFtbWFibGVQYXNzRW5jb2Rlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29k
ZXIuY3BwCkBAIC00NSw3ICs0NSw3IEBAIFJlZjxXZWJHUFVDb21tYW5kQnVmZmVyPiBXZWJHUFVQ
cm9ncmFtbWFibGVQYXNzRW5jb2Rlcjo6ZW5kUGFzcygpCiAgICAgcmV0dXJuIG1fY29tbWFuZEJ1
ZmZlci5jb3B5UmVmKCk7CiB9CiAKLXZvaWQgV2ViR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXI6
OnNldEJpbmRHcm91cCh1bnNpZ25lZCBsb25nIGluZGV4LCBjb25zdCBXZWJHUFVCaW5kR3JvdXAm
IGJpbmRHcm91cCkgY29uc3QKK3ZvaWQgV2ViR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXI6OnNl
dEJpbmRHcm91cCh1bnNpZ25lZCBsb25nIGluZGV4LCBXZWJHUFVCaW5kR3JvdXAmIGJpbmRHcm91
cCkgY29uc3QKIHsKICAgICAvLyBNYXhpbXVtIG51bWJlciBvZiBiaW5kIGdyb3VwcyBzdXBwb3J0
ZWQgaW4gV2ViIEdQVS4KICAgICBpZiAoaW5kZXggPj0gNCkgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVVByb2dyYW1tYWJsZVBhc3NFbmNv
ZGVyLmgKaW5kZXggYWNmZDFmYmZlNDZmOTQ5Y2Y5ZWMwZWUzZTcyN2UxOTkzOWFmMTIzZC4uZTRi
YjM1YTMzY2Q4ZDRmNWEzOWM1ZWUwYjNmZTVhNzNjYjU3YjNjYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVQcm9ncmFtbWFibGVQYXNz
RW5jb2Rlci5oCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5XZWJHUFVQ
cm9ncmFtbWFibGVQYXNzRW5jb2RlcigpID0gZGVmYXVsdDsKIAogICAgIFJlZjxXZWJHUFVDb21t
YW5kQnVmZmVyPiBlbmRQYXNzKCk7Ci0gICAgdm9pZCBzZXRCaW5kR3JvdXAodW5zaWduZWQgbG9u
ZywgY29uc3QgV2ViR1BVQmluZEdyb3VwJikgY29uc3Q7CisgICAgdm9pZCBzZXRCaW5kR3JvdXAo
dW5zaWduZWQgbG9uZywgV2ViR1BVQmluZEdyb3VwJikgY29uc3Q7CiAgICAgdm9pZCBzZXRQaXBl
bGluZShSZWY8V2ViR1BVUmVuZGVyUGlwZWxpbmU+JiYpOwogCiBwcm90ZWN0ZWQ6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVSZW5kZXJQYXNzRW5jb2Rl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVSZW5kZXJQYXNzRW5j
b2Rlci5jcHAKaW5kZXggZTE5NmIxMmUzMzdiZmEwZmY0MGE1M2Y3MzkxYjJjNWJmNGFmMzhkYi4u
OTg4MzI5YjNlN2NjMGYyODFhZGU2ZGEwZTNiOTk2MmNiNzI3N2MzZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVUmVuZGVyUGFzc0VuY29kZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVVJlbmRlclBhc3NFbmNvZGVy
LmNwcApAQCAtNjIsNyArNjIsNyBAQCB2b2lkIFdlYkdQVVJlbmRlclBhc3NFbmNvZGVyOjpzZXRW
ZXJ0ZXhCdWZmZXJzKHVuc2lnbmVkIGxvbmcgc3RhcnRTbG90LCBWZWN0b3I8UgogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgVmVjdG9yPFJlZjxjb25zdCBHUFVCdWZmZXI+PiBncHVCdWZm
ZXJzOworICAgIFZlY3RvcjxSZWY8R1BVQnVmZmVyPj4gZ3B1QnVmZmVyczsKICAgICBncHVCdWZm
ZXJzLnJlc2VydmVDYXBhY2l0eShidWZmZXJzLnNpemUoKSk7CiAKICAgICBmb3IgKGNvbnN0IGF1
dG8mIGJ1ZmZlciA6IGJ1ZmZlcnMpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dlYkdQVVJlbmRlclBhc3NFbmNvZGVyLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dlYkdQVVJlbmRlclBhc3NFbmNvZGVyLmlkbAppbmRleCA5MWFjZWIxMzcz
ZjZmY2MwZDkxYWQ2YmJlZDE1ZTNlZmVkZDJjZDUwLi5jZWFjYTcwYjMyZGZhOGU5N2FjMzYyMDVl
MTQ2NGE3NWFjOWVhYmZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XZWJHUFVSZW5kZXJQYXNzRW5jb2Rlci5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV2ViR1BVUmVuZGVyUGFzc0VuY29kZXIuaWRsCkBAIC0yNSwyMCArMjUsMjEgQEAK
IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ncHV3ZWIvZ3B1d2ViL2Jsb2IvbWFzdGVyL2Rlc2lnbi9z
a2V0Y2gud2ViaWRsCiAKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyB1MzI7Cit0eXBlZGVmIHVuc2ln
bmVkIGxvbmcgbG9uZyB1NjQ7CiAKIFsKICAgICBDb25kaXRpb25hbD1XRUJHUFUsCiAgICAgRW5h
YmxlZEF0UnVudGltZT1XZWJHUFUsCiAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QKIF0gaW50ZXJm
YWNlIFdlYkdQVVJlbmRlclBhc3NFbmNvZGVyIDogV2ViR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29k
ZXIgewotICAgIC8vIEZJWE1FOiAoPHJkYXI6Ly9wcm9ibGVtLzQ3NzE3ODMyPikgTGFzdCBhcmd1
bWVudCBzaG91bGQgYmUgc2VxdWVuY2U8dW5zaWduZWQgbG9uZz4sIGJ1dCBiaW5kaW5ncyBnZW5l
cmF0ZXMgVmVjdG9yPHVuc2lnbmVkIGludD4uCi0gICAgdm9pZCBzZXRWZXJ0ZXhCdWZmZXJzKHUz
MiBzdGFydFNsb3QsIHNlcXVlbmNlPFdlYkdQVUJ1ZmZlcj4gYnVmZmVycywgc2VxdWVuY2U8dW5z
aWduZWQgbG9uZyBsb25nPiBvZmZzZXRzKTsKKyAgICAvLyBGSVhNRTogKDxyZGFyOi8vcHJvYmxl
bS80NzcxNzgzMj4pIExhc3QgYXJndW1lbnQgc2hvdWxkIGJlIGdlbmVyYXRlZCB0byBWZWN0b3I8
dW5zaWduZWQgbG9uZz4sIGJ1dCBiaW5kaW5ncyBnZW5lcmF0ZXMgVmVjdG9yPHVuc2lnbmVkIGxv
bmcgbG9uZz4uCisgICAgdm9pZCBzZXRWZXJ0ZXhCdWZmZXJzKHUzMiBzdGFydFNsb3QsIHNlcXVl
bmNlPFdlYkdQVUJ1ZmZlcj4gYnVmZmVycywgc2VxdWVuY2U8dTY0PiBvZmZzZXRzKTsKIAogICAg
IHZvaWQgZHJhdyh1MzIgdmVydGV4Q291bnQsIHUzMiBpbnN0YW5jZUNvdW50LCB1MzIgZmlyc3RW
ZXJ0ZXgsIHUzMiBmaXJzdEluc3RhbmNlKTsKIAogLyogTm90IFlldCBJbXBsZW1lbnRlZAogICAg
IHZvaWQgc2V0QmxlbmRDb2xvcihmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKTsK
LSAgICB2b2lkIHNldEluZGV4QnVmZmVyKFdlYkdQVUJ1ZmZlciBidWZmZXIsIHUzMiBvZmZzZXQp
OworICAgIHZvaWQgc2V0SW5kZXhCdWZmZXIoV2ViR1BVQnVmZmVyIGJ1ZmZlciwgdTY0IG9mZnNl
dCk7CiAKICAgICB2b2lkIGRyYXdJbmRleGVkKHUzMiBpbmRleENvdW50LCB1MzIgaW5zdGFuY2VD
b3VudCwgdTMyIGZpcnN0SW5kZXgsIGkzMiBiYXNlVmVydGV4LCB1MzIgZmlyc3RJbnN0YW5jZSk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVVZlcnRl
eEF0dHJpYnV0ZURlc2NyaXB0b3IuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V2ViR1BVVmVydGV4QXR0cmlidXRlRGVzY3JpcHRvci5pZGwKaW5kZXggODk2YWVhMzM2N2MxNzY4
YjhlYmQ5YjYzM2ViZmQ0OGFiZTA3M2FiYy4uMTdlZWE1NjVlODQ1OTI1NGY3NWVlZmFjZTg3ODhm
MjU5MTVjOTRhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2Vi
R1BVVmVydGV4QXR0cmlidXRlRGVzY3JpcHRvci5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV2ViR1BVVmVydGV4QXR0cmlidXRlRGVzY3JpcHRvci5pZGwKQEAgLTI1LDYg
KzI1LDcgQEAKIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ncHV3ZWIvZ3B1d2ViL2Jsb2IvbWFzdGVy
L2Rlc2lnbi9za2V0Y2gud2ViaWRsCiAKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyB1MzI7Cit0eXBl
ZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1NjQ7CiB0eXBlZGVmIHUzMiBXZWJHUFVWZXJ0ZXhGb3Jt
YXRFbnVtOwogCiBbCkBAIC0zMyw2ICszNCw2IEBAIHR5cGVkZWYgdTMyIFdlYkdQVVZlcnRleEZv
cm1hdEVudW07CiBdIGRpY3Rpb25hcnkgV2ViR1BVVmVydGV4QXR0cmlidXRlRGVzY3JpcHRvciB7
CiAgICAgdTMyIHNoYWRlckxvY2F0aW9uOwogICAgIHUzMiBpbnB1dFNsb3Q7Ci0gICAgdTMyIG9m
ZnNldDsKKyAgICB1NjQgb2Zmc2V0OwogICAgIFdlYkdQVVZlcnRleEZvcm1hdEVudW0gZm9ybWF0
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVVZl
cnRleElucHV0RGVzY3JpcHRvci5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
ZWJHUFVWZXJ0ZXhJbnB1dERlc2NyaXB0b3IuaWRsCmluZGV4IDg3MmYzNTM1YjBmMjQwNDU2Yzhk
ZjVkOTRiM2JkOWYzZDlhNDFiNmEuLjM2ZWM4MTRkYjQ5YmE0OWQ1YTAxMTM1ZDZjNjczNTg0MDRj
MTNmNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVVZl
cnRleElucHV0RGVzY3JpcHRvci5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV2ViR1BVVmVydGV4SW5wdXREZXNjcmlwdG9yLmlkbApAQCAtMjUsNiArMjUsNyBAQAogLy8g
aHR0cHM6Ly9naXRodWIuY29tL2dwdXdlYi9ncHV3ZWIvYmxvYi9tYXN0ZXIvZGVzaWduL3NrZXRj
aC53ZWJpZGwKIAogdHlwZWRlZiB1bnNpZ25lZCBsb25nIHUzMjsKK3R5cGVkZWYgdW5zaWduZWQg
bG9uZyBsb25nIHU2NDsKIHR5cGVkZWYgdTMyIFdlYkdQVUlucHV0U3RlcE1vZGVFbnVtOwogCiBb
CkBAIC0zMiw2ICszMyw2IEBAIHR5cGVkZWYgdTMyIFdlYkdQVUlucHV0U3RlcE1vZGVFbnVtOwog
ICAgIEVuYWJsZWRBdFJ1bnRpbWU9V2ViR1BVCiBdIGRpY3Rpb25hcnkgV2ViR1BVVmVydGV4SW5w
dXREZXNjcmlwdG9yIHsKICAgICB1MzIgaW5wdXRTbG90OwotICAgIHUzMiBzdHJpZGU7CisgICAg
dTY0IHN0cmlkZTsKICAgICBXZWJHUFVJbnB1dFN0ZXBNb2RlRW51bSBzdGVwTW9kZTsKIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0CmluZGV4IDI4ZjY2ZWY3NDI4Y2E5Y2RmY2UxZmZlYzIwY2JkNjEzN2Y3YWY0Yzku
Ljk2NWQwNDIzZjc4YjE3NThhNjNkMjg4ZjkyZjgyMGU2MjNmMDBmYjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
CkBAIC0xODExLDYgKzE4MTEsNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdo
dFNvdXJjZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVCaW5kR3JvdXAuY3BwCiBwbGF0
Zm9ybS9ncmFwaGljcy9ncHUvR1BVRGV2aWNlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQ
VVBpcGVsaW5lTGF5b3V0LmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVByb2dyYW1tYWJs
ZVBhc3NFbmNvZGVyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2xlZ2FjeS9HUFVMZWdhY3lC
dWZmZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvbGVnYWN5L0dQVUxlZ2FjeUNvbW1hbmRC
dWZmZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvbGVnYWN5L0dQVUxlZ2FjeUNvbW1hbmRR
dWV1ZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCA5OTkwN2RkNjkyZDQ0OTg2NWU1N2VkZTU2ZTE5YWUwNDE1MDU0ZTc4Li42
ODNhNDkwZmM1YWY4ZDUyYzA4MWQ0ODNiZWRmM2U3ODdhZTBmNmI3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMzk0Niw2ICsx
Mzk0Niw3IEBACiAJCUQwMDMyODg0MjFDOUEyMEQwMDYyMkFBNiAvKiBHUFVQaXBlbGluZUxheW91
dERlc2NyaXB0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR1BVUGlwZWxpbmVMYXlvdXREZXNjcmlwdG9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwMDMyODg2MjFDOUE0RTUwMDYyMkFB
NiAvKiBHUFVQaXBlbGluZUxheW91dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHUFVQaXBlbGluZUxheW91
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMDAzMjg4NzIxQzlBNEU1MDA2MjJB
QTYgLyogR1BVUGlwZWxpbmVMYXlvdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR1BVUGlwZWxp
bmVMYXlvdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEMDAzOTE0MTIyMjQ4
RDQwMDA5ODk5OEMgLyogR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlEMDBGNTk0MDIxNkVDQzdBMDAwRDcxREIgLyogRE9NV2luZG93V2ViR1BV
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERPTVdpbmRvd1dlYkdQVS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlEMDBGNTk0MTIxNkVDQzdBMDAwRDcxREIgLyogRE9NV2luZG93V2ViR1BVLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERPTVdpbmRvd1dlYkdQVS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUQwMEY1OTQyMjE2RUNDN0EwMDBENzFEQiAvKiBET01XaW5kb3dXZWJH
UFUuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IERPTVdpbmRvd1dlYkdQVS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xODUwNCw2ICsxODUwNSw3IEBACiAJCQkJRDAwMzI4ODYyMUM5QTRFNTAwNjIyQUE2
IC8qIEdQVVBpcGVsaW5lTGF5b3V0LmggKi8sCiAJCQkJRDAwMzI4ODQyMUM5QTIwRDAwNjIyQUE2
IC8qIEdQVVBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvci5oICovLAogCQkJCTMxMkZGOEMyMjFBNEMy
RjMwMEVCMTk5RCAvKiBHUFVQaXBlbGluZVN0YWdlRGVzY3JpcHRvci5oICovLAorCQkJCUQwMDM5
MTQxMjIyNDhENDAwMDk4OTk4QyAvKiBHUFVQcm9ncmFtbWFibGVQYXNzRW5jb2Rlci5jcHAgKi8s
CiAJCQkJRDAzMjExQ0YyMUFDOTU0RTAwNzYzQ0YyIC8qIEdQVVByb2dyYW1tYWJsZVBhc3NFbmNv
ZGVyLmggKi8sCiAJCQkJMzEyRkY4QzEyMUE0QzJGMjAwRUIxOTlEIC8qIEdQVVF1ZXVlLmggKi8s
CiAJCQkJRDAzMjExRDAyMUFDOTU0RjAwNzYzQ0YyIC8qIEdQVVJlbmRlclBhc3NEZXNjcmlwdG9y
LmggKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
R1BVQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVQnVm
ZmVyLmgKaW5kZXggYWM3NjEzMTU2M2UzYWVjNDMzNmU2ODQyNjg5ZjRlMzRiNTQ1YjdhMC4uZDky
OWZkMTk3N2U1ZDY4Mzg5YTNhY2NkZWJlNmU0ZmYzN2I2ZWQ4ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVCdWZmZXIuaApAQCAtMzMsOCArMzMsMTIg
QEAKICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCisjaWYg
VVNFKE1FVEFMKQogT0JKQ19QUk9UT0NPTChNVExCdWZmZXIpOworT0JKQ19QUk9UT0NPTChNVExD
b21tYW5kQnVmZmVyKTsKKyNlbmRpZgogCiBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEFycmF5QnVm
ZmVyOwpAQCAtNDYsMjEgKzUwLDQyIEBAIGNsYXNzIEdQVURldmljZTsKIAogc3RydWN0IEdQVUJ1
ZmZlckRlc2NyaXB0b3I7CiAKKyNpZiBVU0UoTUVUQUwpCiB1c2luZyBQbGF0Zm9ybUJ1ZmZlciA9
IE1UTEJ1ZmZlcjsKLXVzaW5nIFBsYXRmb3JtQnVmZmVyU21hcnRQdHIgPSBSZXRhaW5QdHI8TVRM
QnVmZmVyPjsKKyNlbHNlCit1c2luZyBQbGF0Zm9ybUJ1ZmZlciA9IHZvaWQ7CisjZW5kaWYKK3Vz
aW5nIFBsYXRmb3JtQnVmZmVyU21hcnRQdHIgPSBSZXRhaW5QdHI8UGxhdGZvcm1CdWZmZXI+Owog
CiBjbGFzcyBHUFVCdWZmZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxHUFVCdWZmZXI+IHsKIHB1Ymxp
YzoKKyAgICBlbnVtIGNsYXNzIFN0YXRlIHsKKyAgICAgICAgTWFwcGVkLAorICAgICAgICBVbm1h
cHBlZCwKKyAgICAgICAgRGVzdHJveWVkCisgICAgfTsKKwogICAgIH5HUFVCdWZmZXIoKTsKIAot
ICAgIHN0YXRpYyBSZWZQdHI8R1BVQnVmZmVyPiB0cnlDcmVhdGUoY29uc3QgR1BVRGV2aWNlJiwg
R1BVQnVmZmVyRGVzY3JpcHRvciYmKTsKKyAgICBzdGF0aWMgUmVmUHRyPEdQVUJ1ZmZlcj4gdHJ5
Q3JlYXRlKFJlZjxHUFVEZXZpY2U+JiYsIEdQVUJ1ZmZlckRlc2NyaXB0b3ImJik7CiAKICAgICBQ
bGF0Zm9ybUJ1ZmZlciAqcGxhdGZvcm1CdWZmZXIoKSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3Jt
QnVmZmVyLmdldCgpOyB9Ci0gICAgYm9vbCBpc1ZlcnRleCgpIGNvbnN0IHsgcmV0dXJuIG1faXNW
ZXJ0ZXg7IH0KLSAgICBib29sIGlzVW5pZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1faXNVbmlmb3Jt
OyB9Ci0gICAgYm9vbCBpc1N0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX2lzU3RvcmFnZTsgfQot
ICAgIGJvb2wgaXNSZWFkT25seSgpIGNvbnN0IHsgcmV0dXJuIG1faXNSZWFkT25seTsgfQotCisg
ICAgYm9vbCBpc1RyYW5zZmVyRHN0KCkgY29uc3QgeyByZXR1cm4gbV91c2FnZSAmIEdQVUJ1ZmZl
clVzYWdlOjpUcmFuc2ZlckRzdDsgfQorICAgIGJvb2wgaXNWZXJ0ZXgoKSBjb25zdCB7IHJldHVy
biBtX3VzYWdlICYgR1BVQnVmZmVyVXNhZ2U6OlZlcnRleDsgfQorICAgIGJvb2wgaXNVbmlmb3Jt
KCkgY29uc3QgeyByZXR1cm4gbV91c2FnZSAmIEdQVUJ1ZmZlclVzYWdlOjpVbmlmb3JtOyB9Cisg
ICAgYm9vbCBpc1N0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX3VzYWdlICYgR1BVQnVmZmVyVXNh
Z2U6OlN0b3JhZ2U7IH0KKyAgICBib29sIGlzUmVhZE9ubHkoKSBjb25zdDsKKyAgICBib29sIGlz
TWFwcGFibGUoKSBjb25zdCB7IHJldHVybiBtX3VzYWdlICYgKEdQVUJ1ZmZlclVzYWdlOjpNYXBX
cml0ZSB8IEdQVUJ1ZmZlclVzYWdlOjpNYXBSZWFkKTsgfQorICAgIFN0YXRlIHN0YXRlKCkgY29u
c3Q7CisKKyNpZiBVU0UoTUVUQUwpCisgICAgdm9pZCBjb21tYW5kQnVmZmVyQ29tbWl0dGVkKE1U
TENvbW1hbmRCdWZmZXIgKik7CisgICAgdm9pZCBjb21tYW5kQnVmZmVyQ29tcGxldGVkKCk7CisK
KyAgICB2b2lkIHJldXNlU3ViRGF0YUJ1ZmZlcihSZXRhaW5QdHI8TVRMQnVmZmVyPiYmKTsKKyNl
bmRpZgorCisgICAgdm9pZCBzZXRTdWJEYXRhKHVuc2lnbmVkIGxvbmcsIGNvbnN0IEpTQzo6QXJy
YXlCdWZmZXImKTsKICAgICB1c2luZyBNYXBwaW5nQ2FsbGJhY2sgPSBXVEY6OkZ1bmN0aW9uPHZv
aWQoSlNDOjpBcnJheUJ1ZmZlciopPjsKICAgICB2b2lkIHJlZ2lzdGVyTWFwcGluZ0NhbGxiYWNr
KE1hcHBpbmdDYWxsYmFjayYmLCBib29sKTsKICAgICB2b2lkIHVubWFwKCk7CkBAIC03OSwzMSAr
MTA0LDMzIEBAIHByaXZhdGU6CiAgICAgICAgIFBlbmRpbmdNYXBwaW5nQ2FsbGJhY2soTWFwcGlu
Z0NhbGxiYWNrJiYpOwogICAgIH07CiAKLSAgICBHUFVCdWZmZXIoUGxhdGZvcm1CdWZmZXJTbWFy
dFB0ciYmLCBjb25zdCBHUFVCdWZmZXJEZXNjcmlwdG9yJik7CisgICAgc3RhdGljIGJvb2wgdmFs
aWRhdGVCdWZmZXJDcmVhdGUoY29uc3QgR1BVRGV2aWNlJiwgY29uc3QgR1BVQnVmZmVyRGVzY3Jp
cHRvciYpOworCisgICAgR1BVQnVmZmVyKFBsYXRmb3JtQnVmZmVyU21hcnRQdHImJiwgY29uc3Qg
R1BVQnVmZmVyRGVzY3JpcHRvciYsIFJlZjxHUFVEZXZpY2U+JiYpOwogCi0gICAgc3RhdGljIFJl
ZlB0cjxHUFVCdWZmZXI+IHRyeUNyZWF0ZVNoYXJlZEJ1ZmZlcihjb25zdCBHUFVEZXZpY2UmLCBj
b25zdCBHUFVCdWZmZXJEZXNjcmlwdG9yJik7CiAgICAgSlNDOjpBcnJheUJ1ZmZlciogc3RhZ2lu
Z0J1ZmZlckZvclJlYWQoKTsKICAgICBKU0M6OkFycmF5QnVmZmVyKiBzdGFnaW5nQnVmZmVyRm9y
V3JpdGUoKTsKKyAgICB2b2lkIHJ1bk1hcHBpbmdDYWxsYmFjaygpOwogCi0gICAgYm9vbCBpc01h
cHBhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc01hcFdyaXRlIHx8IG1faXNNYXBSZWFkOyB9Ci0g
ICAgYm9vbCBpc01hcFdyaXRlYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNNYXBXcml0ZSAmJiAh
bV9wZW5kaW5nQ2FsbGJhY2s7IH0KLSAgICBib29sIGlzTWFwUmVhZGFibGUoKSBjb25zdCB7IHJl
dHVybiBtX2lzTWFwUmVhZCAmJiAhbV9wZW5kaW5nQ2FsbGJhY2s7IH0KKyAgICBib29sIGlzTWFw
V3JpdGUoKSBjb25zdCB7IHJldHVybiBtX3VzYWdlICYgR1BVQnVmZmVyVXNhZ2U6Ok1hcFdyaXRl
OyB9CisgICAgYm9vbCBpc01hcFJlYWQoKSBjb25zdCB7IHJldHVybiBtX3VzYWdlICYgR1BVQnVm
ZmVyVXNhZ2U6Ok1hcFJlYWQ7IH0KKyAgICBib29sIGlzTWFwV3JpdGVhYmxlKCkgY29uc3QgeyBy
ZXR1cm4gaXNNYXBXcml0ZSgpICYmIHN0YXRlKCkgPT0gU3RhdGU6OlVubWFwcGVkOyB9CisgICAg
Ym9vbCBpc01hcFJlYWRhYmxlKCkgY29uc3QgeyByZXR1cm4gaXNNYXBSZWFkKCkgJiYgc3RhdGUo
KSA9PSBTdGF0ZTo6VW5tYXBwZWQ7IH0KIAogICAgIFBsYXRmb3JtQnVmZmVyU21hcnRQdHIgbV9w
bGF0Zm9ybUJ1ZmZlcjsKKyAgICBSZWY8R1BVRGV2aWNlPiBtX2RldmljZTsKKworI2lmIFVTRShN
RVRBTCkKKyAgICBWZWN0b3I8UmV0YWluUHRyPE1UTEJ1ZmZlcj4+IG1fc3ViRGF0YUJ1ZmZlcnM7
CisjZW5kaWYKIAogICAgIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyPiBtX3N0YWdpbmdCdWZmZXI7
Ci0gICAgUmVmUHRyPFBlbmRpbmdNYXBwaW5nQ2FsbGJhY2s+IG1fcGVuZGluZ0NhbGxiYWNrOwor
ICAgIFJlZlB0cjxQZW5kaW5nTWFwcGluZ0NhbGxiYWNrPiBtX21hcHBpbmdDYWxsYmFjazsKICAg
ICBEZWZlcnJhYmxlVGFzazxUaW1lcj4gbV9tYXBwaW5nQ2FsbGJhY2tUYXNrOwogCiAgICAgdW5z
aWduZWQgbG9uZyBtX2J5dGVMZW5ndGg7CisgICAgR1BVQnVmZmVyVXNhZ2U6OkZsYWdzIG1fdXNh
Z2U7CiAgICAgdW5zaWduZWQgbV9udW1TY2hlZHVsZWRDb21tYW5kQnVmZmVycyA9IDA7Ci0gICAg
Ym9vbCBtX2lzTWFwV3JpdGU7Ci0gICAgYm9vbCBtX2lzTWFwUmVhZDsKLSAgICBib29sIG1faXNE
ZXN0cm95ZWQgPSBmYWxzZTsKLSAgICBib29sIG1faXNWZXJ0ZXg7Ci0gICAgYm9vbCBtX2lzVW5p
Zm9ybTsKLSAgICBib29sIG1faXNTdG9yYWdlOwotICAgIGJvb2wgbV9pc1JlYWRPbmx5OwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVUJ1ZmZlckJpbmRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVCdWZmZXJCaW5kaW5nLmgKaW5kZXggODI0OGQ4YjhjOTAx
YzUzZmI1NDMyZjcwMWQyODA1NTFjNDgzYmE0YS4uOTFlMDg3MzNjNjkzNDg4NzQyMWNmOTRhNzVj
NjYzNjI5NGQyMzQ5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L0dQVUJ1ZmZlckJpbmRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvR1BVQnVmZmVyQmluZGluZy5oCkBAIC0zMyw3ICszMyw3IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIHN0cnVjdCBHUFVCdWZmZXJCaW5kaW5nIHsKLSAgICBSZWY8Y29uc3Qg
R1BVQnVmZmVyPiBidWZmZXI7CisgICAgUmVmPEdQVUJ1ZmZlcj4gYnVmZmVyOwogICAgIHVuc2ln
bmVkIGxvbmcgb2Zmc2V0OwogICAgIHVuc2lnbmVkIGxvbmcgc2l6ZTsKIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVQ29tbWFuZEJ1ZmZlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVUNvbW1hbmRCdWZmZXIu
aAppbmRleCA4MWU4ZTk5ZTI4MDZhMmJkNWQxNjFkNjcwNDIyOWJhMzVkMTI1ZmJmLi45OWJjZWYw
MjZhNDA1MzY4MTc3NDcxMjA4ZDE4OWMyNDcwMjM5YTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVQ29tbWFuZEJ1ZmZlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVDb21tYW5kQnVmZmVyLmgKQEAgLTMw
LDExICszMCwxMyBAQAogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKIE9CSkNfUFJPVE9DT0woTVRMQ29tbWFuZEJ1ZmZlcik7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorY2xhc3MgR1BVQnVmZmVyOwogY2xhc3MgR1BVRGV2aWNlOwogCiB1c2luZyBQ
bGF0Zm9ybUNvbW1hbmRCdWZmZXIgPSBNVExDb21tYW5kQnVmZmVyOwpAQCAtNDUsMTEgKzQ3LDE1
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmUHRyPEdQVUNvbW1hbmRCdWZmZXI+IGNyZWF0ZShH
UFVEZXZpY2UmKTsKIAogICAgIFBsYXRmb3JtQ29tbWFuZEJ1ZmZlciogcGxhdGZvcm1Db21tYW5k
QnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybUNvbW1hbmRCdWZmZXIuZ2V0KCk7IH0K
KyAgICBjb25zdCBWZWN0b3I8UmVmPEdQVUJ1ZmZlcj4+JiB1c2VkQnVmZmVycygpIGNvbnN0IHsg
cmV0dXJuIG1fdXNlZEJ1ZmZlcnM7IH0KKworICAgIHZvaWQgdXNlQnVmZmVyKFJlZjxHUFVCdWZm
ZXI+JiYgYnVmZmVyKSB7IG1fdXNlZEJ1ZmZlcnMuYXBwZW5kKFdURk1vdmUoYnVmZmVyKSk7IH0K
IAogcHJpdmF0ZToKICAgICBHUFVDb21tYW5kQnVmZmVyKFBsYXRmb3JtQ29tbWFuZEJ1ZmZlclNt
YXJ0UHRyJiYpOwogCiAgICAgUGxhdGZvcm1Db21tYW5kQnVmZmVyU21hcnRQdHIgbV9wbGF0Zm9y
bUNvbW1hbmRCdWZmZXI7CisgICAgVmVjdG9yPFJlZjxHUFVCdWZmZXI+PiBtX3VzZWRCdWZmZXJz
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVURldmljZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVRGV2aWNlLmNwcAppbmRleCBjNmFkMjE2ZTRlNzExYTYx
YWI0NjBiZjE3MjQzNDBmNTQ5MDAwODRmLi41MTJjZDU1YWNmZDg2MTNiNmYxNWRiNWQxNDU3YWVi
ZWUxMDcxNWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvR1BVRGV2aWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvR1BVRGV2aWNlLmNwcApAQCAtNDQsOSArNDQsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLVJlZlB0cjxHUFVCdWZmZXI+IEdQVURldmljZTo6dHJ5Q3JlYXRlQnVmZmVyKEdQVUJ1ZmZl
ckRlc2NyaXB0b3ImJiBkZXNjcmlwdG9yKSBjb25zdAorUmVmUHRyPEdQVUJ1ZmZlcj4gR1BVRGV2
aWNlOjp0cnlDcmVhdGVCdWZmZXIoR1BVQnVmZmVyRGVzY3JpcHRvciYmIGRlc2NyaXB0b3IpCiB7
Ci0gICAgcmV0dXJuIEdQVUJ1ZmZlcjo6dHJ5Q3JlYXRlKCp0aGlzLCBXVEZNb3ZlKGRlc2NyaXB0
b3IpKTsKKyAgICByZXR1cm4gR1BVQnVmZmVyOjp0cnlDcmVhdGUobWFrZVJlZigqdGhpcyksIFdU
Rk1vdmUoZGVzY3JpcHRvcikpOwogfQogCiBSZWZQdHI8R1BVVGV4dHVyZT4gR1BVRGV2aWNlOjp0
cnlDcmVhdGVUZXh0dXJlKEdQVVRleHR1cmVEZXNjcmlwdG9yJiYgZGVzY3JpcHRvcikgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVEZXZp
Y2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVEZXZpY2UuaApp
bmRleCA3ZmNlOGY0ODNlNWU0NDhhZjI0ZWIwNjNkNGZhYzViNzBkZTYyZjE3Li5mMjA2NTE3YjYz
MGU4OGI3OWJjZTcxMTE1ZjQ4YTE3MjdmZGE4MDkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVRGV2aWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVURldmljZS5oCkBAIC02MCw3ICs2MCw3IEBAIGNsYXNz
IEdQVURldmljZSA6IHB1YmxpYyBSZWZDb3VudGVkPEdQVURldmljZT4gewogcHVibGljOgogICAg
IHN0YXRpYyBSZWZQdHI8R1BVRGV2aWNlPiBjcmVhdGUoT3B0aW9uYWw8R1BVUmVxdWVzdEFkYXB0
ZXJPcHRpb25zPiYmKTsKIAotICAgIFJlZlB0cjxHUFVCdWZmZXI+IHRyeUNyZWF0ZUJ1ZmZlcihH
UFVCdWZmZXJEZXNjcmlwdG9yJiYpIGNvbnN0OworICAgIFJlZlB0cjxHUFVCdWZmZXI+IHRyeUNy
ZWF0ZUJ1ZmZlcihHUFVCdWZmZXJEZXNjcmlwdG9yJiYpOwogICAgIFJlZlB0cjxHUFVUZXh0dXJl
PiB0cnlDcmVhdGVUZXh0dXJlKEdQVVRleHR1cmVEZXNjcmlwdG9yJiYpIGNvbnN0OwogCiAgICAg
UmVmUHRyPEdQVUJpbmRHcm91cExheW91dD4gdHJ5Q3JlYXRlQmluZEdyb3VwTGF5b3V0KEdQVUJp
bmRHcm91cExheW91dERlc2NyaXB0b3ImJikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVByb2dyYW1tYWJsZVBh
c3NFbmNvZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZDI2ZDU5MzEyODdkNjBlMzk2MTRmZGU2OTFkNmMw
ZWFkNTg1MTZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L0dQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyLmNwcApAQCAtMCwwICsxLDQyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdQVVByb2dyYW1t
YWJsZVBhc3NFbmNvZGVyLmgiCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiR1BV
Q29tbWFuZEJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dQVVByb2dyYW1tYWJs
ZVBhc3NFbmNvZGVyOjpHUFVQcm9ncmFtbWFibGVQYXNzRW5jb2RlcihSZWY8R1BVQ29tbWFuZEJ1
ZmZlcj4mJiBjb21tYW5kQnVmZmVyKQorICAgIDogbV9jb21tYW5kQnVmZmVyKFdURk1vdmUoY29t
bWFuZEJ1ZmZlcikpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShXRUJHUFUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVQcm9ncmFtbWFibGVQYXNzRW5jb2Rlci5oCmluZGV4IGFj
NDk4ZWZlYTY3ZjYwOGZlNjliODU2NWNhOWI5ZGM2MGU5NWEzMzAuLjg5NGM0NzUwZDFmODY0ZTMy
OTM5N2JlYzRkNDQwMjg5NjkyNDZmNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9HUFVQcm9ncmFtbWFibGVQYXNzRW5jb2Rlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVQcm9ncmFtbWFibGVQYXNzRW5jb2Rl
ci5oCkBAIC00MCw2ICs0MCw3IEBAIE9CSkNfUFJPVE9DT0woTVRMUmVzb3VyY2UpOwogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBHUFVCaW5kR3JvdXA7CitjbGFzcyBHUFVDb21tYW5kQnVm
ZmVyOwogY2xhc3MgR1BVUmVuZGVyUGlwZWxpbmU7CiAKIHVzaW5nIFBsYXRmb3JtUHJvZ3JhbW1h
YmxlUGFzc0VuY29kZXIgPSBNVExDb21tYW5kRW5jb2RlcjsKQEAgLTQ5LDEyICs1MCwxNSBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB+R1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXIoKSA9IGRlZmF1
bHQ7CiAKICAgICB2b2lkIGVuZFBhc3MoKTsKLSAgICB2b2lkIHNldEJpbmRHcm91cCh1bnNpZ25l
ZCBsb25nLCBjb25zdCBHUFVCaW5kR3JvdXAmKTsKKyAgICB2b2lkIHNldEJpbmRHcm91cCh1bnNp
Z25lZCBsb25nLCBHUFVCaW5kR3JvdXAmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0UGlwZWxpbmUo
UmVmPEdQVVJlbmRlclBpcGVsaW5lPiYmKSA9IDA7CiAKIHByb3RlY3RlZDoKKyAgICBHUFVQcm9n
cmFtbWFibGVQYXNzRW5jb2RlcihSZWY8R1BVQ29tbWFuZEJ1ZmZlcj4mJik7CiAgICAgdmlydHVh
bCBQbGF0Zm9ybVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyKiBwbGF0Zm9ybVBhc3NFbmNvZGVyKCkg
Y29uc3QgPSAwOwogCisgICAgR1BVQ29tbWFuZEJ1ZmZlciYgY29tbWFuZEJ1ZmZlcigpIGNvbnN0
IHsgcmV0dXJuIG1fY29tbWFuZEJ1ZmZlci5nZXQoKTsgfQorCiBwcml2YXRlOgogI2lmIFVTRShN
RVRBTCkKICAgICB2b2lkIHNldFJlc291cmNlQXNCdWZmZXJPbkVuY29kZXIoTVRMQXJndW1lbnRF
bmNvZGVyICosIGNvbnN0IEdQVUJpbmRpbmdSZXNvdXJjZSYsIHVuc2lnbmVkIGxvbmcsIGNvbnN0
IGNoYXIqIGNvbnN0KTsKQEAgLTY1LDYgKzY5LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZv
aWQgc2V0RnJhZ21lbnRCdWZmZXIoTVRMQnVmZmVyICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVk
IGxvbmcpIHsgfQogI2VuZGlmIC8vIFVTRShNRVRBTCkKIAorICAgIFJlZjxHUFVDb21tYW5kQnVm
ZmVyPiBtX2NvbW1hbmRCdWZmZXI7CiAgICAgYm9vbCBtX2lzRW5jb2RpbmcgeyB0cnVlIH07CiB9
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BV
UmVuZGVyUGFzc0VuY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dw
dS9HUFVSZW5kZXJQYXNzRW5jb2Rlci5oCmluZGV4IGZlYjVjMzdiODg1NWU3YjAzNmUzMzg4M2Jh
MzVhYWM0NmM0Mzg0MzguLmI4NWUzMzM5ZmQ3N2ZhYzlkMmFhYjNmOTM4Mzk4ZWJhNDgxMjkwMzEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVSZW5k
ZXJQYXNzRW5jb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dw
dS9HUFVSZW5kZXJQYXNzRW5jb2Rlci5oCkBAIC00OSwxNSArNDksMTUgQEAgdXNpbmcgUGxhdGZv
cm1SZW5kZXJQYXNzRW5jb2RlclNtYXJ0UHRyID0gUmV0YWluUHRyPE1UTFJlbmRlckNvbW1hbmRF
bmNvZGVyPjsKIAogY2xhc3MgR1BVUmVuZGVyUGFzc0VuY29kZXIgOiBwdWJsaWMgR1BVUHJvZ3Jh
bW1hYmxlUGFzc0VuY29kZXIgewogcHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8R1BVUmVuZGVy
UGFzc0VuY29kZXI+IGNyZWF0ZShjb25zdCBHUFVDb21tYW5kQnVmZmVyJiwgR1BVUmVuZGVyUGFz
c0Rlc2NyaXB0b3ImJik7CisgICAgc3RhdGljIFJlZlB0cjxHUFVSZW5kZXJQYXNzRW5jb2Rlcj4g
dHJ5Q3JlYXRlKFJlZjxHUFVDb21tYW5kQnVmZmVyPiYmLCBHUFVSZW5kZXJQYXNzRGVzY3JpcHRv
ciYmKTsKIAogICAgIHZvaWQgc2V0UGlwZWxpbmUoUmVmPEdQVVJlbmRlclBpcGVsaW5lPiYmKSBm
aW5hbDsKIAotICAgIHZvaWQgc2V0VmVydGV4QnVmZmVycyh1bnNpZ25lZCBsb25nLCBWZWN0b3I8
UmVmPGNvbnN0IEdQVUJ1ZmZlcj4+JiYsIFZlY3Rvcjx1bnNpZ25lZCBsb25nIGxvbmc+JiYpOwor
ICAgIHZvaWQgc2V0VmVydGV4QnVmZmVycyh1bnNpZ25lZCBsb25nLCBWZWN0b3I8UmVmPEdQVUJ1
ZmZlcj4+JiYsIFZlY3Rvcjx1bnNpZ25lZCBsb25nIGxvbmc+JiYpOwogICAgIHZvaWQgZHJhdyh1
bnNpZ25lZCBsb25nIHZlcnRleENvdW50LCB1bnNpZ25lZCBsb25nIGluc3RhbmNlQ291bnQsIHVu
c2lnbmVkIGxvbmcgZmlyc3RWZXJ0ZXgsIHVuc2lnbmVkIGxvbmcgZmlyc3RJbnN0YW5jZSk7CiAK
IHByaXZhdGU6Ci0gICAgR1BVUmVuZGVyUGFzc0VuY29kZXIoUGxhdGZvcm1SZW5kZXJQYXNzRW5j
b2RlclNtYXJ0UHRyJiYpOworICAgIEdQVVJlbmRlclBhc3NFbmNvZGVyKFJlZjxHUFVDb21tYW5k
QnVmZmVyPiYmLCBQbGF0Zm9ybVJlbmRlclBhc3NFbmNvZGVyU21hcnRQdHImJik7CiAgICAgfkdQ
VVJlbmRlclBhc3NFbmNvZGVyKCkgeyBlbmRQYXNzKCk7IH0gLy8gRW5zdXJlIHRoYXQgZW5jb2Rp
bmcgaGFzIGVuZGVkIGJlZm9yZSByZWxlYXNlLgogCiAgICAgUGxhdGZvcm1Qcm9ncmFtbWFibGVQ
YXNzRW5jb2RlciogcGxhdGZvcm1QYXNzRW5jb2RlcigpIGNvbnN0IGZpbmFsOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUJ1ZmZlck1l
dGFsLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUJ1
ZmZlck1ldGFsLm1tCmluZGV4IDIxZWEzMjMwYjJkNjg5ZjdmOWEyYjZjYWI3MGFkODg0YzI3YzZj
ZWIuLjBkOGMyMDgxODBjMGI1MTZlYzhlOWQ1NmQzNjI3MmFmNTk5ZmEwZjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVCdWZmZXJNZXRh
bC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BV
QnVmZmVyTWV0YWwubW0KQEAgLTM0LDE4ICszNCw1MSBAQAogI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvQXJyYXlCdWZmZXIuaD4KICNpbXBvcnQgPE1ldGFsL01ldGFsLmg+CiAjaW1wb3J0IDx3dGYv
QmxvY2tPYmpDRXhjZXB0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+
CisjaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJl
ZlB0cjxHUFVCdWZmZXI+IEdQVUJ1ZmZlcjo6dHJ5Q3JlYXRlU2hhcmVkQnVmZmVyKGNvbnN0IEdQ
VURldmljZSYgZGV2aWNlLCBjb25zdCBHUFVCdWZmZXJEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQor
c3RhdGljIGNvbnN0IGF1dG8gcmVhZE9ubHlNYXNrID0gR1BVQnVmZmVyVXNhZ2U6OkluZGV4IHwg
R1BVQnVmZmVyVXNhZ2U6OlZlcnRleCB8IEdQVUJ1ZmZlclVzYWdlOjpVbmlmb3JtIHwgR1BVQnVm
ZmVyVXNhZ2U6OlRyYW5zZmVyU3JjOworCisKK2Jvb2wgR1BVQnVmZmVyOjp2YWxpZGF0ZUJ1ZmZl
ckNyZWF0ZShjb25zdCBHUFVEZXZpY2UmIGRldmljZSwgY29uc3QgR1BVQnVmZmVyRGVzY3JpcHRv
ciYgZGVzY3JpcHRvcikKK3sKKyAgICBpZiAoIWRldmljZS5wbGF0Zm9ybURldmljZSgpKSB7Cisg
ICAgICAgIExPRyhXZWJHUFUsICJHUFVCdWZmZXI6OmNyZWF0ZSgpOiBJbnZhbGlkIEdQVURldmlj
ZSEiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICgoZGVzY3JpcHRv
ci51c2FnZSAmIEdQVUJ1ZmZlclVzYWdlOjpNYXBXcml0ZSkgJiYgKGRlc2NyaXB0b3IudXNhZ2Ug
JiBHUFVCdWZmZXJVc2FnZTo6TWFwUmVhZCkpIHsKKyAgICAgICAgTE9HKFdlYkdQVSwgIkdQVUJ1
ZmZlcjo6Y3JlYXRlKCk6IEJ1ZmZlciBjYW5ub3QgaGF2ZSBib3RoIE1BUF9SRUFEIGFuZCBNQVBf
V1JJVEUgdXNhZ2UhIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAo
KGRlc2NyaXB0b3IudXNhZ2UgJiByZWFkT25seU1hc2spICYmIChkZXNjcmlwdG9yLnVzYWdlICYg
R1BVQnVmZmVyVXNhZ2U6OlN0b3JhZ2UpKSB7CisgICAgICAgIExPRyhXZWJHUFUsICJHUFVCdWZm
ZXI6OmNyZWF0ZSgpOiBCdWZmZXIgY2Fubm90IGhhdmUgYm90aCBTVE9SQUdFIGFuZCBhIHJlYWQt
b25seSB1c2FnZSEiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCitSZWZQdHI8R1BVQnVmZmVyPiBHUFVCdWZmZXI6OnRyeUNyZWF0ZShSZWY8
R1BVRGV2aWNlPiYmIGRldmljZSwgR1BVQnVmZmVyRGVzY3JpcHRvciYmIGRlc2NyaXB0b3IpCiB7
Ci0gICAgQVNTRVJUKGRldmljZS5wbGF0Zm9ybURldmljZSgpKTsKKyAgICBpZiAoIXZhbGlkYXRl
QnVmZmVyQ3JlYXRlKGRldmljZS5nZXQoKSwgZGVzY3JpcHRvcikpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgLy8gRklYTUU6IE1ldGFsIGJlc3QgcHJhY3RpY2VzOiBSZWFkLW9ubHkg
b25lLXRpbWUtdXNlIGRhdGEgbGVzcyB0aGFuIDQgS0Igc2hvdWxkIG5vdCBhbGxvY2F0ZSBhIE1U
TEJ1ZmZlciBhbmQgYmUgdXNlZCBpbiBbTVRMQ29tbWFuZEVuY29kZXIgc2V0KkJ5dGVzXSBjYWxs
cyBpbnN0ZWFkLgorCisgICAgTVRMUmVzb3VyY2VPcHRpb25zIHJlc291cmNlT3B0aW9ucyA9IE1U
TFJlc291cmNlQ1BVQ2FjaGVNb2RlRGVmYXVsdENhY2hlOworCisgICAgLy8gTWFwcGFibGUgYnVm
ZmVycyB1c2Ugc2hhcmVkIHN0b3JhZ2UgYWxsb2NhdGlvbi4KKyAgICByZXNvdXJjZU9wdGlvbnMg
fD0gKGRlc2NyaXB0b3IudXNhZ2UgJiAoR1BVQnVmZmVyVXNhZ2U6Ok1hcFdyaXRlIHwgR1BVQnVm
ZmVyVXNhZ2U6Ok1hcFJlYWQpKSA/IE1UTFJlc291cmNlU3RvcmFnZU1vZGVTaGFyZWQgOiBNVExS
ZXNvdXJjZVN0b3JhZ2VNb2RlUHJpdmF0ZTsKIAogICAgIFJldGFpblB0cjxNVExCdWZmZXI+IG10
bEJ1ZmZlcjsKIAogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAotICAgIG10bEJ1
ZmZlciA9IGFkb3B0TlMoW2RldmljZS5wbGF0Zm9ybURldmljZSgpIG5ld0J1ZmZlcldpdGhMZW5n
dGg6ZGVzY3JpcHRvci5zaXplIG9wdGlvbnM6IE1UTFJlc291cmNlQ1BVQ2FjaGVNb2RlRGVmYXVs
dENhY2hlXSk7CisgICAgbXRsQnVmZmVyID0gYWRvcHROUyhbZGV2aWNlLT5wbGF0Zm9ybURldmlj
ZSgpIG5ld0J1ZmZlcldpdGhMZW5ndGg6ZGVzY3JpcHRvci5zaXplIG9wdGlvbnM6cmVzb3VyY2VP
cHRpb25zXSk7CiAKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCkBAIC01NCw1MyAr
ODcsMTE2IEBAIFJlZlB0cjxHUFVCdWZmZXI+IEdQVUJ1ZmZlcjo6dHJ5Q3JlYXRlU2hhcmVkQnVm
ZmVyKGNvbnN0IEdQVURldmljZSYgZGV2aWNlLCBjb25zCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KIAotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEdQVUJ1ZmZlcihXVEZNb3ZlKG10
bEJ1ZmZlciksIGRlc2NyaXB0b3IpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHUFVCdWZm
ZXIoV1RGTW92ZShtdGxCdWZmZXIpLCBkZXNjcmlwdG9yLCBXVEZNb3ZlKGRldmljZSkpKTsKIH0K
IAotc3RhdGljIGNvbnN0IGF1dG8gcmVhZE9ubHlNYXNrID0gR1BVQnVmZmVyVXNhZ2U6OkluZGV4
IHwgR1BVQnVmZmVyVXNhZ2U6OlZlcnRleCB8IEdQVUJ1ZmZlclVzYWdlOjpVbmlmb3JtIHwgR1BV
QnVmZmVyVXNhZ2U6OlRyYW5zZmVyU3JjOworR1BVQnVmZmVyOjpHUFVCdWZmZXIoUmV0YWluUHRy
PE1UTEJ1ZmZlcj4mJiBidWZmZXIsIGNvbnN0IEdQVUJ1ZmZlckRlc2NyaXB0b3ImIGRlc2NyaXB0
b3IsIFJlZjxHUFVEZXZpY2U+JiYgZGV2aWNlKQorICAgIDogbV9wbGF0Zm9ybUJ1ZmZlcihXVEZN
b3ZlKGJ1ZmZlcikpCisgICAgLCBtX2RldmljZShXVEZNb3ZlKGRldmljZSkpCisgICAgLCBtX2J5
dGVMZW5ndGgoZGVzY3JpcHRvci5zaXplKQorICAgICwgbV91c2FnZShzdGF0aWNfY2FzdDxHUFVC
dWZmZXJVc2FnZTo6RmxhZ3M+KGRlc2NyaXB0b3IudXNhZ2UpKQoreworfQogCi1SZWZQdHI8R1BV
QnVmZmVyPiBHUFVCdWZmZXI6OnRyeUNyZWF0ZShjb25zdCBHUFVEZXZpY2UmIGRldmljZSwgR1BV
QnVmZmVyRGVzY3JpcHRvciYmIGRlc2NyaXB0b3IpCitHUFVCdWZmZXI6On5HUFVCdWZmZXIoKQog
ewotICAgIGlmICghZGV2aWNlLnBsYXRmb3JtRGV2aWNlKCkpIHsKLSAgICAgICAgTE9HKFdlYkdQ
VSwgIkdQVUJ1ZmZlcjo6Y3JlYXRlKCk6IEludmFsaWQgR1BVRGV2aWNlISIpOwotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICBkZXN0cm95KCk7Cit9CisKK2Jvb2wgR1BVQnVmZmVyOjppc1Jl
YWRPbmx5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV91c2FnZSAmIHJlYWRPbmx5TWFzazsKK30K
KworR1BVQnVmZmVyOjpTdGF0ZSBHUFVCdWZmZXI6OnN0YXRlKCkgY29uc3QKK3sKKyAgICBpZiAo
IW1fcGxhdGZvcm1CdWZmZXIpCisgICAgICAgIHJldHVybiBTdGF0ZTo6RGVzdHJveWVkOworICAg
IGlmIChtX21hcHBpbmdDYWxsYmFjaykKKyAgICAgICAgcmV0dXJuIFN0YXRlOjpNYXBwZWQ7CisK
KyAgICByZXR1cm4gU3RhdGU6OlVubWFwcGVkOworfQorCit2b2lkIEdQVUJ1ZmZlcjo6c2V0U3Vi
RGF0YSh1bnNpZ25lZCBsb25nIG9mZnNldCwgY29uc3QgSlNDOjpBcnJheUJ1ZmZlciYgZGF0YSkK
K3sKKyAgICBpZiAoIWlzVHJhbnNmZXJEc3QoKSB8fCBzdGF0ZSgpICE9IFN0YXRlOjpVbm1hcHBl
ZCkgeworICAgICAgICBMT0coV2ViR1BVLCAiR1BVQnVmZmVyOjpzZXRTdWJEYXRhKCk6IEludmFs
aWQgb3BlcmF0aW9uISIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGF1dG8gc3ViRGF0
YUxlbmd0aCA9IGNoZWNrZWRTdW08dW5zaWduZWQgbG9uZz4oZGF0YS5ieXRlTGVuZ3RoKCksIG9m
ZnNldCk7CisgICAgaWYgKHN1YkRhdGFMZW5ndGguaGFzT3ZlcmZsb3dlZCgpIHx8IHN1YkRhdGFM
ZW5ndGgudW5zYWZlR2V0KCkgPiBtX2J5dGVMZW5ndGgpIHsKKyAgICAgICAgTE9HKFdlYkdQVSwg
IkdQVUJ1ZmZlcjo6c2V0U3ViRGF0YSgpOiBJbnZhbGlkIG9mZnNldCBvciBkYXRhIHNpemUhIik7
CisgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoKGRlc2NyaXB0b3IudXNhZ2UgJiBH
UFVCdWZmZXJVc2FnZTo6TWFwV3JpdGUpICYmIChkZXNjcmlwdG9yLnVzYWdlICYgR1BVQnVmZmVy
VXNhZ2U6Ok1hcFJlYWQpKSB7Ci0gICAgICAgIExPRyhXZWJHUFUsICJHUFVCdWZmZXI6OmNyZWF0
ZSgpOiBCdWZmZXIgY2Fubm90IGhhdmUgYm90aCBNQVBfUkVBRCBhbmQgTUFQX1dSSVRFIHVzYWdl
ISIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAvLyBGSVhNRTogQWRkIGFsaWdubWVu
dCBjaGVja3Mgb25jZSBzcGVjaWZpZWQuCisKKyAgICBpZiAobV9zdWJEYXRhQnVmZmVycy5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgICAgICBt
X3N1YkRhdGFCdWZmZXJzLmFwcGVuZChhZG9wdE5TKFttX3BsYXRmb3JtQnVmZmVyLmdldCgpLmRl
dmljZSBuZXdCdWZmZXJXaXRoTGVuZ3RoOm1fYnl0ZUxlbmd0aCBvcHRpb25zOk1UTFJlc291cmNl
Q1BVQ2FjaGVNb2RlRGVmYXVsdENhY2hlXSkpOworICAgICAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TOwogICAgIH0KIAotICAgIGlmICgoZGVzY3JpcHRvci51c2FnZSAmIHJlYWRPbmx5TWFz
aykgJiYgKGRlc2NyaXB0b3IudXNhZ2UgJiBHUFVCdWZmZXJVc2FnZTo6U3RvcmFnZSkpIHsKLSAg
ICAgICAgTE9HKFdlYkdQVSwgIkdQVUJ1ZmZlcjo6Y3JlYXRlKCk6IEJ1ZmZlciBjYW5ub3QgaGF2
ZSBib3RoIFNUT1JBR0UgYW5kIGEgcmVhZC1vbmx5IHVzYWdlISIpOwotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICBfX2Jsb2NrIGF1dG8gc3RhZ2luZ010bEJ1ZmZlciA9IG1fc3ViRGF0YUJ1
ZmZlcnMudGFrZUxhc3QoKTsKKworICAgIGlmICghc3RhZ2luZ010bEJ1ZmZlciB8fCBzdGFnaW5n
TXRsQnVmZmVyLmdldCgpLmxlbmd0aCA8IGRhdGEuYnl0ZUxlbmd0aCgpKSB7CisgICAgICAgIExP
RyhXZWJHUFUsICJHUFVCdWZmZXI6OnNldFN1YkRhdGEoKTogVW5hYmxlIHRvIGdldCBzdGFnaW5n
IGJ1ZmZlciBmb3IgcHJvdmlkZWQgZGF0YSEiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIC8vIE1hcHBhYmxlIGJ1ZmZlcnMgbmVlZCAoZGVmYXVsdCkgc2hhcmVkIHN0b3JhZ2UgYWxs
b2NhdGlvbi4KLSAgICBpZiAoZGVzY3JpcHRvci51c2FnZSAmIChHUFVCdWZmZXJVc2FnZTo6TWFw
V3JpdGUgfCBHUFVCdWZmZXJVc2FnZTo6TWFwUmVhZCkpCi0gICAgICAgIHJldHVybiB0cnlDcmVh
dGVTaGFyZWRCdWZmZXIoZGV2aWNlLCBkZXNjcmlwdG9yKTsKKyAgICBtZW1jcHkoc3RhZ2luZ010
bEJ1ZmZlci5nZXQoKS5jb250ZW50cywgZGF0YS5kYXRhKCksIGRhdGEuYnl0ZUxlbmd0aCgpKTsK
KworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAgIGF1dG8gY29tbWFuZEJ1
ZmZlciA9IHJldGFpblB0cihbbV9kZXZpY2UtPmdldFF1ZXVlKCktPnBsYXRmb3JtUXVldWUoKSBj
b21tYW5kQnVmZmVyXSk7CisgICAgYXV0byBibGl0RW5jb2RlciA9IHJldGFpblB0cihbY29tbWFu
ZEJ1ZmZlciBibGl0Q29tbWFuZEVuY29kZXJdKTsKKworICAgIFtibGl0RW5jb2RlciBjb3B5RnJv
bUJ1ZmZlcjpzdGFnaW5nTXRsQnVmZmVyLmdldCgpIHNvdXJjZU9mZnNldDowIHRvQnVmZmVyOm1f
cGxhdGZvcm1CdWZmZXIuZ2V0KCkgZGVzdGluYXRpb25PZmZzZXQ6b2Zmc2V0IHNpemU6c3RhZ2lu
Z010bEJ1ZmZlci5nZXQoKS5sZW5ndGhdOworICAgIFtibGl0RW5jb2RlciBlbmRFbmNvZGluZ107
CisKKyAgICBpZiAoaXNNYXBwYWJsZSgpKQorICAgICAgICBjb21tYW5kQnVmZmVyQ29tbWl0dGVk
KGNvbW1hbmRCdWZmZXIuZ2V0KCkpOwogCi0gICAgTE9HKFdlYkdQVSwgIkdQVUJ1ZmZlcjo6Y3Jl
YXRlKCk6IFN1cHBvcnQgZm9yIG5vbi1tYXBwZWQgYnVmZmVycyBub3QgaW1wbGVtZW50ZWQhIik7
Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZlB0
cih0aGlzKTsKKyAgICBbY29tbWFuZEJ1ZmZlciBhZGRDb21wbGV0ZWRIYW5kbGVyOl4oaWQ8TVRM
Q29tbWFuZEJ1ZmZlcj4pIHsKKyAgICAgICAgcHJvdGVjdGVkVGhpcy0+cmV1c2VTdWJEYXRhQnVm
ZmVyKFdURk1vdmUoc3RhZ2luZ010bEJ1ZmZlcikpOworICAgIH1dOworICAgIFtjb21tYW5kQnVm
ZmVyIGNvbW1pdF07CisKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCi1HUFVC
dWZmZXI6OkdQVUJ1ZmZlcihSZXRhaW5QdHI8TVRMQnVmZmVyPiYmIGJ1ZmZlciwgY29uc3QgR1BV
QnVmZmVyRGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLSAgICA6IG1fcGxhdGZvcm1CdWZmZXIoV1RG
TW92ZShidWZmZXIpKQotICAgICwgbV9ieXRlTGVuZ3RoKGRlc2NyaXB0b3Iuc2l6ZSkKLSAgICAs
IG1faXNNYXBXcml0ZShkZXNjcmlwdG9yLnVzYWdlICYgR1BVQnVmZmVyVXNhZ2U6Ok1hcFdyaXRl
KQotICAgICwgbV9pc01hcFJlYWQoZGVzY3JpcHRvci51c2FnZSAmIEdQVUJ1ZmZlclVzYWdlOjpN
YXBSZWFkKQotICAgICwgbV9pc1ZlcnRleChkZXNjcmlwdG9yLnVzYWdlICYgR1BVQnVmZmVyVXNh
Z2U6OlZlcnRleCkKLSAgICAsIG1faXNVbmlmb3JtKGRlc2NyaXB0b3IudXNhZ2UgJiBHUFVCdWZm
ZXJVc2FnZTo6VW5pZm9ybSkKLSAgICAsIG1faXNTdG9yYWdlKGRlc2NyaXB0b3IudXNhZ2UgJiBH
UFVCdWZmZXJVc2FnZTo6U3RvcmFnZSkKLSAgICAsIG1faXNSZWFkT25seShkZXNjcmlwdG9yLnVz
YWdlICYgcmVhZE9ubHlNYXNrKQorI2lmIFVTRShNRVRBTCkKK3ZvaWQgR1BVQnVmZmVyOjpjb21t
YW5kQnVmZmVyQ29tbWl0dGVkKE1UTENvbW1hbmRCdWZmZXIgKmNvbW1hbmRCdWZmZXIpCiB7Cisg
ICAgKyttX251bVNjaGVkdWxlZENvbW1hbmRCdWZmZXJzOworCisgICAgYXV0byBwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZlB0cih0aGlzKTsKKyAgICBbY29tbWFuZEJ1ZmZlciBhZGRDb21wbGV0ZWRI
YW5kbGVyOl4oaWQ8TVRMQ29tbWFuZEJ1ZmZlcj4pIHsKKyAgICAgICAgcHJvdGVjdGVkVGhpcy0+
Y29tbWFuZEJ1ZmZlckNvbXBsZXRlZCgpOworICAgIH1dOwogfQogCi1HUFVCdWZmZXI6On5HUFVC
dWZmZXIoKQordm9pZCBHUFVCdWZmZXI6OmNvbW1hbmRCdWZmZXJDb21wbGV0ZWQoKQogewotICAg
IHVubWFwKCk7CisgICAgQVNTRVJUKG1fbnVtU2NoZWR1bGVkQ29tbWFuZEJ1ZmZlcnMpOworCisg
ICAgaWYgKG1fbnVtU2NoZWR1bGVkQ29tbWFuZEJ1ZmZlcnMgPT0gMSAmJiBzdGF0ZSgpID09IFN0
YXRlOjpNYXBwZWQpIHsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpXSAoKSB7CisgICAgICAgICAgICBydW5NYXBwaW5nQ2FsbGJh
Y2soKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgLS1tX251bVNjaGVkdWxlZENvbW1hbmRC
dWZmZXJzOwogfQogCit2b2lkIEdQVUJ1ZmZlcjo6cmV1c2VTdWJEYXRhQnVmZmVyKFJldGFpblB0
cjxNVExCdWZmZXI+JiYgYnVmZmVyKQoreworICAgIG1fc3ViRGF0YUJ1ZmZlcnMuYXBwZW5kKFdU
Rk1vdmUoYnVmZmVyKSk7Cit9CisjZW5kaWYgLy8gVVNFKE1FVEFMKQorCiB2b2lkIEdQVUJ1ZmZl
cjo6cmVnaXN0ZXJNYXBwaW5nQ2FsbGJhY2soTWFwcGluZ0NhbGxiYWNrJiYgY2FsbGJhY2ssIGJv
b2wgaXNSZWFkKQogewogICAgIC8vIFJlamVjdCBpZiByZXF1ZXN0IGlzIGludmFsaWQuCkBAIC0x
MTUsMjEgKzIxMSwyNSBAQCB2b2lkIEdQVUJ1ZmZlcjo6cmVnaXN0ZXJNYXBwaW5nQ2FsbGJhY2so
TWFwcGluZ0NhbGxiYWNrJiYgY2FsbGJhY2ssIGJvb2wgaXNSZWFkKQogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgQVNTRVJUKCFtX3BlbmRpbmdDYWxsYmFjayAmJiAhbV9tYXBwaW5nQ2Fs
bGJhY2tUYXNrLmhhc1BlbmRpbmdUYXNrKCkpOworICAgIEFTU0VSVCghbV9tYXBwaW5nQ2FsbGJh
Y2sgJiYgIW1fbWFwcGluZ0NhbGxiYWNrVGFzay5oYXNQZW5kaW5nVGFzaygpKTsKIAogICAgIC8v
IEFuIGV4aXN0aW5nIGNhbGxiYWNrIG1lYW5zIHRoaXMgYnVmZmVyIGlzIGluIHRoZSBtYXBwZWQg
c3RhdGUuCi0gICAgbV9wZW5kaW5nQ2FsbGJhY2sgPSBQZW5kaW5nTWFwcGluZ0NhbGxiYWNrOjpj
cmVhdGUoV1RGTW92ZShjYWxsYmFjaykpOworICAgIG1fbWFwcGluZ0NhbGxiYWNrID0gUGVuZGlu
Z01hcHBpbmdDYWxsYmFjazo6Y3JlYXRlKFdURk1vdmUoY2FsbGJhY2spKTsKIAogICAgIC8vIElm
IEdQVSBpcyBub3QgdXNpbmcgdGhpcyBidWZmZXIsIHJ1biB0aGUgY2FsbGJhY2sgQVNBUC4KICAg
ICBpZiAoIW1fbnVtU2NoZWR1bGVkQ29tbWFuZEJ1ZmZlcnMpIHsKICAgICAgICAgbV9tYXBwaW5n
Q2FsbGJhY2tUYXNrLnNjaGVkdWxlVGFzayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYo
KnRoaXMpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIEFTU0VSVChtX3BlbmRpbmdDYWxsYmFj
ayk7Ci0KLSAgICAgICAgICAgIG1fcGVuZGluZ0NhbGxiYWNrLT5jYWxsYmFjayhtX2lzTWFwUmVh
ZCA/IHN0YWdpbmdCdWZmZXJGb3JSZWFkKCkgOiBzdGFnaW5nQnVmZmVyRm9yV3JpdGUoKSk7Cisg
ICAgICAgICAgICBydW5NYXBwaW5nQ2FsbGJhY2soKTsKICAgICAgICAgfSk7CiAgICAgfQogfQog
Cit2b2lkIEdQVUJ1ZmZlcjo6cnVuTWFwcGluZ0NhbGxiYWNrKCkKK3sKKyAgICBpZiAobV9tYXBw
aW5nQ2FsbGJhY2spCisgICAgICAgIG1fbWFwcGluZ0NhbGxiYWNrLT5jYWxsYmFjayhpc01hcFJl
YWQoKSA/IHN0YWdpbmdCdWZmZXJGb3JSZWFkKCkgOiBzdGFnaW5nQnVmZmVyRm9yV3JpdGUoKSk7
Cit9CisKIEpTQzo6QXJyYXlCdWZmZXIqIEdQVUJ1ZmZlcjo6c3RhZ2luZ0J1ZmZlckZvclJlYWQo
KQogewogICAgIGlmICghbV9zdGFnaW5nQnVmZmVyKQpAQCAtMTUzLDI4ICsyNTMsMjUgQEAgdm9p
ZCBHUFVCdWZmZXI6OnVubWFwKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICht
X3N0YWdpbmdCdWZmZXIgJiYgbV9pc01hcFdyaXRlKSB7CisgICAgaWYgKG1fc3RhZ2luZ0J1ZmZl
ciAmJiBpc01hcFdyaXRlKCkpIHsKKyAgICAgICAgQVNTRVJUKG1fcGxhdGZvcm1CdWZmZXIpOwog
ICAgICAgICBtZW1jcHkobV9wbGF0Zm9ybUJ1ZmZlci5nZXQoKS5jb250ZW50cywgbV9zdGFnaW5n
QnVmZmVyLT5kYXRhKCksIG1fYnl0ZUxlbmd0aCk7CiAgICAgICAgIG1fc3RhZ2luZ0J1ZmZlciA9
IG51bGxwdHI7CiAgICAgfQogCi0gICAgaWYgKG1fcGVuZGluZ0NhbGxiYWNrKSB7CisgICAgaWYg
KG1fbWFwcGluZ0NhbGxiYWNrKSB7CiAgICAgICAgIG1fbWFwcGluZ0NhbGxiYWNrVGFzay5jYW5j
ZWxUYXNrKCk7Ci0gICAgICAgIG1fcGVuZGluZ0NhbGxiYWNrLT5jYWxsYmFjayhudWxscHRyKTsK
LSAgICAgICAgbV9wZW5kaW5nQ2FsbGJhY2sgPSBudWxscHRyOworICAgICAgICBtX21hcHBpbmdD
YWxsYmFjay0+Y2FsbGJhY2sobnVsbHB0cik7CisgICAgICAgIG1fbWFwcGluZ0NhbGxiYWNrID0g
bnVsbHB0cjsKICAgICB9CiB9CiAKIHZvaWQgR1BVQnVmZmVyOjpkZXN0cm95KCkKIHsKLSAgICBp
ZiAoaXNNYXBwYWJsZSgpKQorICAgIGlmIChzdGF0ZSgpID09IFN0YXRlOjpNYXBwZWQpCiAgICAg
ICAgIHVubWFwKCk7CiAKLSAgICBtX2lzRGVzdHJveWVkID0gdHJ1ZTsKLQotICAgIC8vIEZJWE1F
OiBJZiBHUFUgaXMgc3RpbGwgdXNpbmcgdGhlIE1UTEJ1ZmZlciwgaXQgd2lsbCBiZSByZWxlYXNl
ZCBhZnRlciBhbGwgcmVsZXZhbnQgY29tbWFuZHMgaGF2ZSBleGVjdXRlZC4KLSAgICBpZiAoIW1f
bnVtU2NoZWR1bGVkQ29tbWFuZEJ1ZmZlcnMpCi0gICAgICAgIG1fcGxhdGZvcm1CdWZmZXIgPSBu
dWxscHRyOworICAgIG1fcGxhdGZvcm1CdWZmZXIgPSBudWxscHRyOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvY29jb2EvR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXJNZXRhbC5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVQcm9ncmFtbWFibGVQYXNzRW5j
b2Rlck1ldGFsLm1tCmluZGV4IGEzMzFiNTM1ODNkNWMyMzY2MGUzNjM3Nzc3NjE1OWE5MWNlZjY3
ZmQuLmNmZjI3ZmZiZWE3Yjk4ZTUwMzRjY2NkZjJkYmQyN2RlYTcwNTMzMTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVQcm9ncmFtbWFi
bGVQYXNzRW5jb2Rlck1ldGFsLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dwdS9jb2NvYS9HUFVQcm9ncmFtbWFibGVQYXNzRW5jb2Rlck1ldGFsLm1tCkBAIC02MSw3
ICs2MSw4IEBAIHZvaWQgR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXI6OnNldFJlc291cmNlQXNC
dWZmZXJPbkVuY29kZXIoTVRMQXJndW1lbnRFbmNvZGVyCiAgICAgfQogCiAgICAgYXV0byYgYnVm
ZmVyQmluZGluZyA9IFdURjo6Z2V0PEdQVUJ1ZmZlckJpbmRpbmc+KHJlc291cmNlKTsKLSAgICBh
dXRvIG10bEJ1ZmZlciA9IGJ1ZmZlckJpbmRpbmcuYnVmZmVyLT5wbGF0Zm9ybUJ1ZmZlcigpOwor
ICAgIGF1dG8mIGJ1ZmZlclJlZiA9IGJ1ZmZlckJpbmRpbmcuYnVmZmVyOworICAgIGF1dG8gbXRs
QnVmZmVyID0gYnVmZmVyUmVmLT5wbGF0Zm9ybUJ1ZmZlcigpOwogCiAgICAgaWYgKCFtdGxCdWZm
ZXIpIHsKICAgICAgICAgTE9HKFdlYkdQVSwgIiVzOiBJbnZhbGlkIE1UTEJ1ZmZlciBpbiBHUFVC
dWZmZXJCaW5kaW5nISIsIGZ1bmN0aW9uTmFtZSk7CkBAIC03MSwxMiArNzIsMTQgQEAgdm9pZCBH
UFVQcm9ncmFtbWFibGVQYXNzRW5jb2Rlcjo6c2V0UmVzb3VyY2VBc0J1ZmZlck9uRW5jb2RlcihN
VExBcmd1bWVudEVuY29kZXIKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKICAg
ICBbYXJndW1lbnRFbmNvZGVyIHNldEJ1ZmZlcjptdGxCdWZmZXIgb2Zmc2V0OmJ1ZmZlckJpbmRp
bmcub2Zmc2V0IGF0SW5kZXg6aW5kZXhdOwotICAgIHVzZVJlc291cmNlKG10bEJ1ZmZlciwgYnVm
ZmVyQmluZGluZy5idWZmZXItPmlzUmVhZE9ubHkoKSA/IE1UTFJlc291cmNlVXNhZ2VSZWFkIDog
TVRMUmVzb3VyY2VVc2FnZVJlYWQgfCBNVExSZXNvdXJjZVVzYWdlV3JpdGUpOworICAgIHVzZVJl
c291cmNlKG10bEJ1ZmZlciwgYnVmZmVyUmVmLT5pc1JlYWRPbmx5KCkgPyBNVExSZXNvdXJjZVVz
YWdlUmVhZCA6IE1UTFJlc291cmNlVXNhZ2VSZWFkIHwgTVRMUmVzb3VyY2VVc2FnZVdyaXRlKTsK
IAogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICBtX2NvbW1hbmRCdWZmZXIt
PnVzZUJ1ZmZlcihidWZmZXJSZWYuY29weVJlZigpKTsKIH0KIAotdm9pZCBHUFVQcm9ncmFtbWFi
bGVQYXNzRW5jb2Rlcjo6c2V0QmluZEdyb3VwKHVuc2lnbmVkIGxvbmcgaW5kZXgsIGNvbnN0IEdQ
VUJpbmRHcm91cCYgYmluZEdyb3VwKQordm9pZCBHUFVQcm9ncmFtbWFibGVQYXNzRW5jb2Rlcjo6
c2V0QmluZEdyb3VwKHVuc2lnbmVkIGxvbmcgaW5kZXgsIEdQVUJpbmRHcm91cCYgYmluZEdyb3Vw
KQogewogICAgIGNvbnN0IGNoYXIqIGNvbnN0IGZ1bmN0aW9uTmFtZSA9ICJHUFVQcm9ncmFtbWFi
bGVQYXNzRW5jb2Rlcjo6c2V0QmluZEdyb3VwKCkiOwogI2lmIExPR19ESVNBQkxFRApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVF1ZXVl
TWV0YWwubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BV
UXVldWVNZXRhbC5tbQppbmRleCBmZGVjZGVlYWNlMjQ0Y2U5NjMwNTRjYzM2ZDk2NzBlNWEyMDNh
OGVlLi45MWJiZDVhNjBlNDcyYWY5NzAxYjc5OTlhOTZjMjI0MDIyZDJmMjAwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUXVldWVNZXRh
bC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BV
UXVldWVNZXRhbC5tbQpAQCAtNzAsMTAgKzcwLDIwIEBAIEdQVVF1ZXVlOjpHUFVRdWV1ZShQbGF0
Zm9ybVF1ZXVlU21hcnRQdHImJiBxdWV1ZSkKIHsKIH0KIAotdm9pZCBHUFVRdWV1ZTo6c3VibWl0
KFZlY3RvcjxSZWY8Y29uc3QgR1BVQ29tbWFuZEJ1ZmZlcj4+JiYgYnVmZmVycykKK3ZvaWQgR1BV
UXVldWU6OnN1Ym1pdChWZWN0b3I8UmVmPGNvbnN0IEdQVUNvbW1hbmRCdWZmZXI+PiYmIGNvbW1h
bmRCdWZmZXJzKQogewotICAgIGZvciAoYXV0byYgYnVmZmVyIDogYnVmZmVycykKLSAgICAgICAg
W2J1ZmZlci0+cGxhdGZvcm1Db21tYW5kQnVmZmVyKCkgY29tbWl0XTsKKyAgICBmb3IgKGF1dG8m
IGNvbW1hbmRCdWZmZXIgOiBjb21tYW5kQnVmZmVycykgeworICAgICAgICAvLyBQcmV2ZW50IGFu
eSBidWZmZXIgbWFwcGluZyBjYWxsYmFja3MgZnJvbSBleGVjdXRpbmcgdW50aWwgY29tbWFuZCBi
dWZmZXIgaXMgY29tcGxldGUuCisgICAgICAgIGZvciAoYXV0byYgYnVmZmVyIDogY29tbWFuZEJ1
ZmZlci0+dXNlZEJ1ZmZlcnMoKSkgeworICAgICAgICAgICAgaWYgKGJ1ZmZlci0+c3RhdGUoKSAh
PSBHUFVCdWZmZXI6OlN0YXRlOjpVbm1hcHBlZCkgeworICAgICAgICAgICAgICAgIExPRyhXZWJH
UFUsICJHUFVRdWV1ZTo6c3VibWl0KCk6IEludmFsaWQgR1BVQnVmZmVyIHNldCBvbiBhIEdQVUNv
bW1hbmRCdWZmZXIhIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnVmZmVyLT5jb21tYW5kQnVmZmVyQ29tbWl0dGVkKGNvbW1hbmRCdWZmZXIt
PnBsYXRmb3JtQ29tbWFuZEJ1ZmZlcigpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtjb21tYW5k
QnVmZmVyLT5wbGF0Zm9ybUNvbW1hbmRCdWZmZXIoKSBjb21taXRdOworICAgIH0KIH0KIAogU3Ry
aW5nIEdQVVF1ZXVlOjpsYWJlbCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGFzc0VuY29kZXJNZXRhbC5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQYXNz
RW5jb2Rlck1ldGFsLm1tCmluZGV4IDkyZTJhY2Y1MGNlMWFlMGFmZmZlNmRjZjM1YTg2YWU2Y2U4
YWMwODMuLmQ2YTZlNjQyMzYyMzcxNWIyNDc4ZjYzZjJkZDBjNTBhMmI3ODkyNTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQ
YXNzRW5jb2Rlck1ldGFsLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9jb2NvYS9HUFVSZW5kZXJQYXNzRW5jb2Rlck1ldGFsLm1tCkBAIC0xMTMsOSArMTEzLDkg
QEAgc3RhdGljIGJvb2wgcG9wdWxhdGVNdGxEZXB0aFN0ZW5jaWxBdHRhY2htZW50KE1UTFJlbmRl
clBhc3NEZXB0aEF0dGFjaG1lbnREZXNjcmkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotUmVmUHRy
PEdQVVJlbmRlclBhc3NFbmNvZGVyPiBHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6Y3JlYXRlKGNvbnN0
IEdQVUNvbW1hbmRCdWZmZXImIGJ1ZmZlciwgR1BVUmVuZGVyUGFzc0Rlc2NyaXB0b3ImJiBkZXNj
cmlwdG9yKQorUmVmUHRyPEdQVVJlbmRlclBhc3NFbmNvZGVyPiBHUFVSZW5kZXJQYXNzRW5jb2Rl
cjo6dHJ5Q3JlYXRlKFJlZjxHUFVDb21tYW5kQnVmZmVyPiYmIGJ1ZmZlciwgR1BVUmVuZGVyUGFz
c0Rlc2NyaXB0b3ImJiBkZXNjcmlwdG9yKQogewotICAgIGNvbnN0IGNoYXIqIGNvbnN0IGZ1bmN0
aW9uTmFtZSA9ICJHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6Y3JlYXRlKCkiOworICAgIGNvbnN0IGNo
YXIqIGNvbnN0IGZ1bmN0aW9uTmFtZSA9ICJHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6dHJ5Q3JlYXRl
KCkiOwogCiAgICAgUmV0YWluUHRyPE1UTFJlbmRlclBhc3NEZXNjcmlwdG9yPiBtdGxEZXNjcmlw
dG9yOwogCkBAIC0xMzcsMTEgKzEzNywxMSBAQCBSZWZQdHI8R1BVUmVuZGVyUGFzc0VuY29kZXI+
IEdQVVJlbmRlclBhc3NFbmNvZGVyOjpjcmVhdGUoY29uc3QgR1BVQ29tbWFuZEJ1ZmZlcgogICAg
ICAgICAmJiAhcG9wdWxhdGVNdGxEZXB0aFN0ZW5jaWxBdHRhY2htZW50KG10bERlc2NyaXB0b3Iu
Z2V0KCkuZGVwdGhBdHRhY2htZW50LCAqZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWxBdHRhY2htZW50
LCBmdW5jdGlvbk5hbWUpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFBsYXRmb3Jt
UmVuZGVyUGFzc0VuY29kZXJTbWFydFB0ciBtdGxFbmNvZGVyOworICAgIFJldGFpblB0cjxNVExS
ZW5kZXJDb21tYW5kRW5jb2Rlcj4gbXRsRW5jb2RlcjsKIAogICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKIAotICAgIG10bEVuY29kZXIgPSByZXRhaW5QdHIoW2J1ZmZlci5wbGF0Zm9y
bUNvbW1hbmRCdWZmZXIoKSByZW5kZXJDb21tYW5kRW5jb2RlcldpdGhEZXNjcmlwdG9yOm10bERl
c2NyaXB0b3IuZ2V0KCldKTsKKyAgICBtdGxFbmNvZGVyID0gcmV0YWluUHRyKFtidWZmZXItPnBs
YXRmb3JtQ29tbWFuZEJ1ZmZlcigpIHJlbmRlckNvbW1hbmRFbmNvZGVyV2l0aERlc2NyaXB0b3I6
bXRsRGVzY3JpcHRvci5nZXQoKV0pOwogCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
IApAQCAtMTUwLDExICsxNTAsMTIgQEAgUmVmUHRyPEdQVVJlbmRlclBhc3NFbmNvZGVyPiBHUFVS
ZW5kZXJQYXNzRW5jb2Rlcjo6Y3JlYXRlKGNvbnN0IEdQVUNvbW1hbmRCdWZmZXIKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHUFVSZW5k
ZXJQYXNzRW5jb2RlcihXVEZNb3ZlKG10bEVuY29kZXIpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBHUFVSZW5kZXJQYXNzRW5jb2RlcihXVEZNb3ZlKGJ1ZmZlciksIFdURk1vdmUobXRsRW5j
b2RlcikpKTsKIH0KIAotR1BVUmVuZGVyUGFzc0VuY29kZXI6OkdQVVJlbmRlclBhc3NFbmNvZGVy
KFBsYXRmb3JtUmVuZGVyUGFzc0VuY29kZXJTbWFydFB0ciYmIGVuY29kZXIpCi0gICAgOiBtX3Bs
YXRmb3JtUmVuZGVyUGFzc0VuY29kZXIoV1RGTW92ZShlbmNvZGVyKSkKK0dQVVJlbmRlclBhc3NF
bmNvZGVyOjpHUFVSZW5kZXJQYXNzRW5jb2RlcihSZWY8R1BVQ29tbWFuZEJ1ZmZlcj4mJiBjb21t
YW5kQnVmZmVyLCBSZXRhaW5QdHI8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+JiYgZW5jb2RlcikK
KyAgICA6IEdQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyKFdURk1vdmUoY29tbWFuZEJ1ZmZlcikp
CisgICAgLCBtX3BsYXRmb3JtUmVuZGVyUGFzc0VuY29kZXIoV1RGTW92ZShlbmNvZGVyKSkKIHsK
IH0KIApAQCAtMTc3LDEzICsxNzgsMTQgQEAgdm9pZCBHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6c2V0
UGlwZWxpbmUoUmVmPEdQVVJlbmRlclBpcGVsaW5lPiYmIHBpcGVsaW5lKQogICAgIG1fcGlwZWxp
bmUgPSBXVEZNb3ZlKHBpcGVsaW5lKTsKIH0KIAotdm9pZCBHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6
c2V0VmVydGV4QnVmZmVycyh1bnNpZ25lZCBsb25nIGluZGV4LCBWZWN0b3I8UmVmPGNvbnN0IEdQ
VUJ1ZmZlcj4+JiYgYnVmZmVycywgVmVjdG9yPHVuc2lnbmVkIGxvbmcgbG9uZz4mJiBvZmZzZXRz
KQordm9pZCBHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6c2V0VmVydGV4QnVmZmVycyh1bnNpZ25lZCBs
b25nIGluZGV4LCBWZWN0b3I8UmVmPEdQVUJ1ZmZlcj4+JiYgYnVmZmVycywgVmVjdG9yPHVuc2ln
bmVkIGxvbmcgbG9uZz4mJiBvZmZzZXRzKQogewogICAgIEFTU0VSVChidWZmZXJzLnNpemUoKSAm
JiBvZmZzZXRzLnNpemUoKSA9PSBidWZmZXJzLnNpemUoKSk7CiAKICAgICBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7CiAKLSAgICBhdXRvIG10bEJ1ZmZlcnMgPSBidWZmZXJzLm1hcChbXSAo
Y29uc3QgYXV0byYgYnVmZmVyKSB7CisgICAgYXV0byBtdGxCdWZmZXJzID0gYnVmZmVycy5tYXAo
W3RoaXNdIChhdXRvJiBidWZmZXIpIHsKKyAgICAgICAgY29tbWFuZEJ1ZmZlcigpLnVzZUJ1ZmZl
cihidWZmZXIuY29weVJlZigpKTsKICAgICAgICAgcmV0dXJuIGJ1ZmZlci0+cGxhdGZvcm1CdWZm
ZXIoKTsKICAgICB9KTsKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGMyM2VjYjY3NTEzMWVmYzI2Nzc3ZjQ2MGE2ZDQzZTc4
YmRiNTQ2YTMuLmY3Yjk5MmFlNDRiN2Q4ODZmNzRhMDRkMDc3ZDFiMmVhMzM4MDZlMDUgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyMSBAQAorMjAxOS0wMi0yNyAgSnVzdGluIEZhbiAgPGp1c3Rpbl9mYW5AYXBw
bGUuY29tPgorCisgICAgICAgIFtXZWIgR1BVXSBCdWZmZXIgdXBkYXRlcyBwYXJ0IDI6IHNldFN1
YkRhdGEsIEdQVS9DUFUgc3luY2hyb25pemF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTUwNzcKKworICAgICAgICBSZXZpZXdlZCBieSBEZWFu
IEphY2tzb24uCisKKyAgICAgICAgQWRkIHRlc3RzIGZvciBtYXBSZWFkQXlzbmMgYW5kIHNldFN1
YkRhdGEgY2FsbHMuIE5vZml0eSB0ZXN0UnVubmVyIHdoZW4gZG9uZSBvbiBzb21lIGRyYXdpbmcg
dGVzdHMKKyAgICAgICAgdGhhdCBtYXkgdGFrZSBtb3JlIHRpbWUuCisKKyAgICAgICAgKiB3ZWJn
cHUvYnVmZmVyLWNvbW1hbmQtYnVmZmVyLXJhY2VzLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIHdlYmdwdS9idWZmZXItY29tbWFuZC1idWZmZXItcmFjZXMuaHRtbDogQWRkZWQuCisg
ICAgICAgICogd2ViZ3B1L2J1ZmZlci1yZXNvdXJjZS10cmlhbmdsZXMuaHRtbDogVXNlIHNldFN1
YkRhdGEuCisgICAgICAgICogd2ViZ3B1L2RlcHRoLWVuYWJsZWQtdHJpYW5nbGUtc3RyaXAuaHRt
bDogRGl0dG8uCisgICAgICAgICogd2ViZ3B1L21hcC1yZWFkLWJ1ZmZlcnMtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvbWFwLXJlYWQtYnVmZmVycy5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiB3ZWJncHUvdmVydGV4LWJ1ZmZlci10cmlhbmdsZS1zdHJpcC5odG1sOiBVc2Ug
c2V0U3ViRGF0YS4KKwogMjAxOS0wMi0yMyAgSnVzdGluIEZhbiAgPGp1c3Rpbl9mYW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIFtXZWJHUFVdIEJ1ZmZlciB1cGRhdGVzIHBhcnQgMTogYXN5bmMgbWFw
cGluZyBmdW5jdGlvbnMsIHVubWFwLCBhbmQgZGVzdHJveQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L2J1ZmZlci1jb21tYW5kLWJ1ZmZlci1yYWNlcy1leHBlY3RlZC5odG1sIGIvTGF5
b3V0VGVzdHMvd2ViZ3B1L2J1ZmZlci1jb21tYW5kLWJ1ZmZlci1yYWNlcy1leHBlY3RlZC5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjg4NmYxM2U4MTIwMzk3YTVjYzYzMzZjOWUyYTQ4NWU3NzhiYTk5MzIKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvYnVmZmVyLWNvbW1hbmQtYnVmZmVy
LXJhY2VzLWV4cGVjdGVkLmh0bWwKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIGh0bWw+Cis8
bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cis8dGl0bGU+SFRNTCBSZWZlcmVuY2UgRmlsZTwvdGl0bGU+
Cis8cD5QYXNzIGlmIHNxdWFyZSBjYW52YXMgYmVsb3cgaXMgY29tcGxldGVseSBncmVlbi48L3A+
Cis8Y2FudmFzIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citj
b25zdCBjYW52YXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJjYW52YXMiKTsKK2NvbnN0IGNv
bnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKKworY29udGV4dC5maWxsU3R5bGUgPSAn
cmdiKDAsIDI1NSwgMCknOworY29udGV4dC5maWxsUmVjdCgwLCAwLCBjYW52YXMud2lkdGgsIGNh
bnZhcy5oZWlnaHQpOworPC9zY3JpcHQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L2J1ZmZlci1jb21tYW5kLWJ1ZmZlci1yYWNlcy5o
dG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L2J1ZmZlci1jb21tYW5kLWJ1ZmZlci1yYWNlcy5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjNiMzM3OGFlYTdmY2FhYzE2MjlhOTBmZWZkYzAyMjIzZmVhNzIxNzMKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvYnVmZmVyLWNvbW1hbmQtYnVmZmVy
LXJhY2VzLmh0bWwKQEAgLTAsMCArMSwxNTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPG1ldGEgY2hh
cnNldD0idXRmLTgiPgorPHRpdGxlPldlYkdQVSBIZWxsbyBUcmlhbmdsZXM8L3RpdGxlPgorPG1l
dGEgbmFtZT0iYXNzZXJ0IiBjb250ZW50PSJXZWJHUFUgY29ycmVjdGx5IHJlbmRlcnMgYSBncmVl
biBjYW52YXMuIj4KKzxsaW5rIHJlbD0ibWF0Y2giIGhyZWY9InZlcnRleC1idWZmZXItdHJpYW5n
bGUtc3RyaXAtZXhwZWN0ZWQuaHRtbCI+Cis8cD5QYXNzIGlmIHNxdWFyZSBjYW52YXMgYmVsb3cg
aXMgY29tcGxldGVseSBncmVlbi48L3A+Cis8Y2FudmFzIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAw
Ij48L2NhbnZhcz4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQ+CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0
VW50aWxEb25lKCk7CisKK2NvbnN0IHNoYWRlckNvZGUgPSBgCisjaW5jbHVkZSA8bWV0YWxfc3Rk
bGliPgorICAgIAordXNpbmcgbmFtZXNwYWNlIG1ldGFsOworCitzdHJ1Y3QgVmVydGV4SW4KK3sK
KyAgICBmbG9hdDIgeHkgW1thdHRyaWJ1dGUoMCldXTsKKyAgICBmbG9hdDMgcmdiIFtbYXR0cmli
dXRlKDEpXV07Cit9OworCitzdHJ1Y3QgVmVydGV4T3V0Cit7CisgICAgZmxvYXQ0IHBvc2l0aW9u
IFtbcG9zaXRpb25dXTsKKyAgICBmbG9hdDQgY29sb3I7Cit9OworCit2ZXJ0ZXggVmVydGV4T3V0
IHZlcnRleF9tYWluKFZlcnRleEluIHZlcnRleEluIFtbc3RhZ2VfaW5dXSkKK3sKKyAgICBWZXJ0
ZXhPdXQgdk91dDsKKyAgICB2T3V0LnBvc2l0aW9uID0gZmxvYXQ0KHZlcnRleEluLnh5LCAwLCAx
KTsKKyAgICB2T3V0LmNvbG9yID0gZmxvYXQ0KHZlcnRleEluLnJnYiwgMSk7CisKKyAgICByZXR1
cm4gdk91dDsKK30KKworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50X21haW4oVmVydGV4T3V0IHYg
W1tzdGFnZV9pbl1dKQoreworICAgIHJldHVybiB2LmNvbG9yOworfQorYAorCitmdW5jdGlvbiBj
cmVhdGVJbnB1dFN0YXRlRGVzY3JpcHRvcigpIHsKKyAgICByZXR1cm4geworICAgICAgICBpbmRl
eEZvcm1hdDogV2ViR1BVSW5kZXhGb3JtYXQuVUlOVDMyLAorICAgICAgICBhdHRyaWJ1dGVzOiBb
eworICAgICAgICAgICAgc2hhZGVyTG9jYXRpb246IDAsCisgICAgICAgICAgICBpbnB1dFNsb3Q6
IDAsCisgICAgICAgICAgICBvZmZzZXQ6IDAsCisgICAgICAgICAgICBmb3JtYXQ6IFdlYkdQVVZl
cnRleEZvcm1hdC5GTE9BVF9SMzJfRzMyCisgICAgICAgIH0sIHsKKyAgICAgICAgICAgIHNoYWRl
ckxvY2F0aW9uOiAxLAorICAgICAgICAgICAgaW5wdXRTbG90OiAxLAorICAgICAgICAgICAgb2Zm
c2V0OiAwLAorICAgICAgICAgICAgZm9ybWF0OiBXZWJHUFVWZXJ0ZXhGb3JtYXQuRkxPQVRfUjMy
X0czMl9CMzIKKyAgICAgICAgfV0sCisgICAgICAgIGlucHV0czogW3sKKyAgICAgICAgICAgIGlu
cHV0U2xvdDogMCwKKyAgICAgICAgICAgIHN0cmlkZTogNCAqIDIsCisgICAgICAgICAgICBzdGVw
TW9kZTogV2ViR1BVSW5wdXRTdGVwTW9kZS5WRVJURVgKKyAgICAgICAgfSwgeworICAgICAgICAg
ICAgaW5wdXRTbG90OiAxLAorICAgICAgICAgICAgc3RyaWRlOiA0ICogMywKKyAgICAgICAgICAg
IHN0ZXBNb2RlOiBXZWJHUFVJbnB1dFN0ZXBNb2RlLklOU1RBTkNFCisgICAgICAgIH1dCisgICAg
fQorfQorCitmdW5jdGlvbiBjcmVhdGVBbmRTZXRWZXJ0ZXhCdWZmZXIoZGV2aWNlLCB2ZXJ0aWNl
cykgeworICAgIGNvbnN0IGZsb2F0QXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRpY2VzKTsK
KyAgICBjb25zdCBidWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHsgc2l6ZTogZmxvYXRBcnJh
eS5ieXRlTGVuZ3RoLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNh
Z2UuVFJBTlNGRVJfRFNUIH0pOworICAgIGJ1ZmZlci5zZXRTdWJEYXRhKDAsIGZsb2F0QXJyYXku
YnVmZmVyKTsKKyAgICByZXR1cm4gYnVmZmVyOworfQorCitmdW5jdGlvbiBkcmF3QW5kU3VibWl0
Q29tbWFuZHMoZGV2aWNlLCBwaXBlbGluZSwgYXR0YWNobWVudCwgdmVydGV4QnVmZmVyLCBjb2xv
ckJ1ZmZlcikgeworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFu
ZEJ1ZmZlcigpOworICAgIGNvbnN0IGVuY29kZXIgPSBjb21tYW5kQnVmZmVyLmJlZ2luUmVuZGVy
UGFzcyh7IGNvbG9yQXR0YWNobWVudHM6IFthdHRhY2htZW50XSB9KTsKKyAgICBlbmNvZGVyLnNl
dFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlciwgY29sb3JCdWZmZXJdLCBbMCwgMF0pOwor
ICAgIGVuY29kZXIuc2V0UGlwZWxpbmUocGlwZWxpbmUpOworICAgIGVuY29kZXIuZHJhdygzLCAx
LCAwLCAwKTsKKyAgICBlbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5z
dWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKK30KKworYXN5bmMgZnVuY3Rpb24gdGVzdCgpIHsKKyAg
ICBjb25zdCBkZXZpY2UgPSBhd2FpdCBnZXRCYXNpY0RldmljZSgpOworICAgIGNvbnN0IGNhbnZh
cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImNhbnZhcyIpOworICAgIGNvbnN0IGNvbnRleHQg
PSBjcmVhdGVCYXNpY0NvbnRleHQoY2FudmFzLCBkZXZpY2UpOworICAgIC8vIEZJWE1FOiBSZXBs
YWNlIHdpdGggbm9uLU1TTCBzaGFkZXJzLgorICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmlj
ZS5jcmVhdGVTaGFkZXJNb2R1bGUoeyBjb2RlOiBzaGFkZXJDb2RlIH0pOworICAgIGNvbnN0IGlu
cHV0U3RhdGVEZXNjcmlwdG9yID0gY3JlYXRlSW5wdXRTdGF0ZURlc2NyaXB0b3IoKTsKKyAgICBj
b25zdCBwaXBlbGluZSA9IGNyZWF0ZUJhc2ljUGlwZWxpbmUoc2hhZGVyTW9kdWxlLCBkZXZpY2Us
IG51bGwsIGlucHV0U3RhdGVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHVwcGVyTGVmdEJ1ZmZl
ciA9IGNyZWF0ZUFuZFNldFZlcnRleEJ1ZmZlcihkZXZpY2UsIFstMSwgMSwgLTEsIC0xLCAwLCAx
XSk7CisgICAgY29uc3QgbWlkZGxlQnVmZmVyID0gY3JlYXRlQW5kU2V0VmVydGV4QnVmZmVyKGRl
dmljZSwgWzAsIDEsIC0xLCAtMSwgMSwgLTFdKTsKKyAgICBjb25zdCB1cHBlclJpZ2h0QnVmZmVy
ID0gY3JlYXRlQW5kU2V0VmVydGV4QnVmZmVyKGRldmljZSwgWzAsIDEsIDEsIDEsIDEsIC0xXSk7
CisKKyAgICBjb25zdCBncmVlbiA9IFswLCAxLCAwXTsKKyAgICBjb25zdCBibHVlID0gWzAsIDAs
IDFdOworICAgIGNvbnN0IGdyZWVuQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KGdyZWVuKTsKKyAg
ICBjb25zdCBibHVlQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KGJsdWUpOworCisgICAgY29uc3Qg
Y29sb3JCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHsgc2l6ZTogZ3JlZW5BcnJheS5ieXRl
TGVuZ3RoLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuVFJB
TlNGRVJfRFNUIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFIH0pOworICAgIGNvbG9yQnVmZmVy
LnNldFN1YkRhdGEoMCwgZ3JlZW5BcnJheS5idWZmZXIpOworCisgICAgY29uc3QgYXR0YWNobWVu
dCA9IHsKKyAgICAgICAgYXR0YWNobWVudDogY29udGV4dC5nZXROZXh0VGV4dHVyZSgpLmNyZWF0
ZURlZmF1bHRUZXh0dXJlVmlldygpLAorICAgICAgICBsb2FkT3A6ICJsb2FkIiwKKyAgICAgICAg
c3RvcmVPcDogInN0b3JlIiwKKyAgICAgICAgY2xlYXJDb2xvcjogeyByOiAxLCBnOiAwLCBiOiAw
LCBhOiAxIH0KKyAgICB9OworCisgICAgLyogbWFwV3JpdGVBc3luYyBzaG91bGQgcmVzb2x2ZSBh
ZnRlciBHUFUgY29tbWFuZHMgYXJlIGNvbXBsZXRlLCBzbyB0cmlhbmdsZSBzaG91bGQgYmUgZ3Jl
ZW4uICovCisgICAgZHJhd0FuZFN1Ym1pdENvbW1hbmRzKGRldmljZSwgcGlwZWxpbmUsIGF0dGFj
aG1lbnQsIHVwcGVyTGVmdEJ1ZmZlciwgY29sb3JCdWZmZXIpOworICAgIGF3YWl0IGNvbG9yQnVm
ZmVyLm1hcFdyaXRlQXN5bmMoKS50aGVuKGFiID0+IHsKKyAgICAgICAgbGV0IGFycmF5ID0gbmV3
IEZsb2F0MzJBcnJheShhYik7CisgICAgICAgIGFycmF5LnNldChibHVlKTsKKyAgICAgICAgY29s
b3JCdWZmZXIudW5tYXAoKTsKKyAgICB9KTsKKworICAgIGF3YWl0IGNvbG9yQnVmZmVyLm1hcFdy
aXRlQXN5bmMoKS50aGVuKGFiID0+IHsKKyAgICAgICAgbGV0IGFycmF5ID0gbmV3IEZsb2F0MzJB
cnJheShhYik7CisgICAgICAgIGFycmF5LnNldChncmVlbik7CisgICAgfSk7CisKKyAgICAvKiBj
b2xvckJ1ZmZlciB0aGF0IGlzIHN0aWxsIG1hcHBlZCBzaG91bGQgYmUgbm90IHN1Ym1pdHRlZCB0
byBkcmF3IGEgYmx1ZSB0cmlhbmdsZS4gKi8KKyAgICBkcmF3QW5kU3VibWl0Q29tbWFuZHMoZGV2
aWNlLCBwaXBlbGluZSwgYXR0YWNobWVudCwgdXBwZXJMZWZ0QnVmZmVyLCBjb2xvckJ1ZmZlcik7
CisKKyAgICAvKiBjb2xvckJ1ZmZlciBkb2VzIG5vdCBhY3R1YWxseSBjb250YWluICJncmVlbiIg
YWdhaW4gdW50aWwgdGhpcyBjYWxsLiAqLworICAgIGNvbG9yQnVmZmVyLnVubWFwKCk7CisKKyAg
ICAvKiBzZXRTdWJEYXRhIGltbWVkaWF0ZWx5IGFmdGVyIGEgc3VibWl0IHNob3VsZCBub3QgYWZm
ZWN0IHRoZSBwcmVjZWRpbmcgZHJhdyBjYWxsLiAqLworICAgIGRyYXdBbmRTdWJtaXRDb21tYW5k
cyhkZXZpY2UsIHBpcGVsaW5lLCBhdHRhY2htZW50LCBtaWRkbGVCdWZmZXIsIGNvbG9yQnVmZmVy
KTsKKyAgICBjb2xvckJ1ZmZlci5zZXRTdWJEYXRhKDAsIGJsdWVBcnJheS5idWZmZXIpOworCisg
ICAgLyogZGVzdHJveSByaWdodCBhZnRlciBhIHN1Ym1pdCBzaG91bGQgbm90IGFmZmVjdCB0aGUg
ZHJhdyBjYWxsLiAqLworICAgIGNvbG9yQnVmZmVyLnNldFN1YkRhdGEoMCwgZ3JlZW5BcnJheS5i
dWZmZXIpOworICAgIGRyYXdBbmRTdWJtaXRDb21tYW5kcyhkZXZpY2UsIHBpcGVsaW5lLCBhdHRh
Y2htZW50LCB1cHBlclJpZ2h0QnVmZmVyLCBjb2xvckJ1ZmZlcik7CisgICAgdXBwZXJSaWdodEJ1
ZmZlci5kZXN0cm95KCk7CisKKyAgICAvKiBkcmF3IGNvbW1hbmQgd2l0aCBhIGRlc3Ryb3llZCBi
dWZmZXIgc2hvdWxkIGZhaWwgKi8KKyAgICBjb2xvckJ1ZmZlci5kZXN0cm95KCk7CisgICAgZHJh
d0FuZFN1Ym1pdENvbW1hbmRzKGRldmljZSwgcGlwZWxpbmUsIGF0dGFjaG1lbnQsIG1pZGRsZUJ1
ZmZlciwgY29sb3JCdWZmZXIpOworCisgICAgdXBwZXJMZWZ0QnVmZmVyLmRlc3Ryb3koKTsKKyAg
ICBtaWRkbGVCdWZmZXIuZGVzdHJveSgpOworICAgIHVwcGVyUmlnaHRCdWZmZXIuZGVzdHJveSgp
OworICAgIAorICAgIGNvbnRleHQucHJlc2VudCgpOworCisgICAgaWYgKHdpbmRvdy50ZXN0UnVu
bmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30KKwordGVzdCgpOworPC9z
Y3JpcHQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L2J1ZmZlci1yZXNvdXJjZS10cmlhbmdsZXMuaHRtbCBiL0xheW91dFRlc3RzL3dl
YmdwdS9idWZmZXItcmVzb3VyY2UtdHJpYW5nbGVzLmh0bWwKaW5kZXggYjRhMjg1NWE2NWQwNmYw
YzE4N2FjZDI2YzJhODJmMmQ4ZjJjYjhhZC4uMDQ0MWMyOTU5ZjE1YjdmMTBiZjlkNjMzZmI5Zjdk
MDI2NzhjMWIwNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L2J1ZmZlci1yZXNvdXJj
ZS10cmlhbmdsZXMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvYnVmZmVyLXJlc291cmNl
LXRyaWFuZ2xlcy5odG1sCkBAIC03LDYgKzcsOSBAQAogPGNhbnZhcyB3aWR0aD0iNDAwIiBoZWln
aHQ9IjQwMCI+PC9jYW52YXM+CiA8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+
PC9zY3JpcHQ+CiA8c2NyaXB0PgoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5u
ZXIud2FpdFVudGlsRG9uZSgpOworCiBjb25zdCBzaGFkZXJDb2RlID0gYAogI2luY2x1ZGUgPG1l
dGFsX3N0ZGxpYj4KICAgICAKQEAgLTc5LDIwICs4MiwxNSBAQCBmdW5jdGlvbiBjcmVhdGVVbmlm
b3JtQnVmZmVyQmluZEdyb3VwTGF5b3V0KGJpbmROdW0sIHN0YWdlID0gV2ViR1BVU2hhZGVyU3Rh
Z2VCaQogCiBjb25zdCB2ZXJ0ZXhTaXplID0gNCAqIDQ7CiBjb25zdCB2ZXJ0aWNlc0J1ZmZlclNp
emUgPSB2ZXJ0ZXhTaXplICogMzsKLWZ1bmN0aW9uIGNyZWF0ZUFuZFVwbG9hZFZlcnRpY2VzQnVm
ZmVyKGRldmljZSwgcHJvbWlzZXMpIHsKLSAgICBjb25zdCBidWZmZXIgPSBkZXZpY2UuY3JlYXRl
QnVmZmVyKHsgc2l6ZTp2ZXJ0aWNlc0J1ZmZlclNpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5W
RVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEUgfSk7Ci0KLSAgICBjb25zdCBwcm9taXNl
ID0gYnVmZmVyLm1hcFdyaXRlQXN5bmMoKS50aGVuKG1hcHBpbmcgPT4gewotICAgICAgICBjb25z
dCBtYXBwZWRBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkobWFwcGluZyk7Ci0gICAgICAgIG1hcHBl
ZEFycmF5LnNldChbCi0gICAgICAgICAgICAwLCAxLCAwLCAxLAotICAgICAgICAgICAgLTEsIC0x
LCAwLCAxLAotICAgICAgICAgICAgMSwgLTEsIDAsIDEKLSAgICAgICAgXSk7Ci0gICAgICAgIGJ1
ZmZlci51bm1hcCgpOwotICAgIH0pOwotCi0gICAgcHJvbWlzZXMucHVzaChwcm9taXNlKTsKK2Z1
bmN0aW9uIGNyZWF0ZUFuZFVwbG9hZFZlcnRpY2VzQnVmZmVyKGRldmljZSkgeworICAgIGNvbnN0
IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoeyBzaXplOnZlcnRpY2VzQnVmZmVyU2l6ZSwg
dXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX0RT
VCB9KTsKKyAgICBjb25zdCBhcnJheUJ1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkoWworICAgICAg
ICAwLCAxLCAwLCAxLAorICAgICAgICAtMSwgLTEsIDAsIDEsCisgICAgICAgIDEsIC0xLCAwLCAx
CisgICAgXSkuYnVmZmVyOworCisgICAgYnVmZmVyLnNldFN1YkRhdGEoMCwgYXJyYXlCdWZmZXIp
OwogICAgIHJldHVybiBidWZmZXI7CiB9CiAKQEAgLTEyNSwxMCArMTIzLDkgQEAgYXN5bmMgZnVu
Y3Rpb24gdGVzdCgpIHsKICAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hh
ZGVyTW9kdWxlKHsgY29kZTogc2hhZGVyQ29kZSB9KTsKIAogICAgIC8vIENyZWF0ZSB2ZXJ0ZXgg
ZGF0YSBXZWJHUFVCdWZmZXJzLgotICAgIGxldCBidWZmZXJQcm9taXNlcyA9IFtdOwotCi0gICAg
Y29uc3QgdmVydGljZXNCdWZmZXIgPSBjcmVhdGVBbmRVcGxvYWRWZXJ0aWNlc0J1ZmZlcihkZXZp
Y2UsIGJ1ZmZlclByb21pc2VzKTsKKyAgICBjb25zdCB2ZXJ0aWNlc0J1ZmZlciA9IGNyZWF0ZUFu
ZFVwbG9hZFZlcnRpY2VzQnVmZmVyKGRldmljZSk7CiAKKyAgICBsZXQgYnVmZmVyUHJvbWlzZXMg
PSBbXTsKICAgICBjb25zdCB1cHBlckxlZnQgPSBjcmVhdGVGbG9hdDRCdWZmZXIoZGV2aWNlLCAt
MSwgMSwgYnVmZmVyUHJvbWlzZXMpOwogICAgIGNvbnN0IHVwcGVyTWlkZGxlID0gY3JlYXRlRmxv
YXQ0QnVmZmVyKGRldmljZSwgMCwgMSwgYnVmZmVyUHJvbWlzZXMpOwogICAgIGNvbnN0IHVwcGVy
UmlnaHQgPSBjcmVhdGVGbG9hdDRCdWZmZXIoZGV2aWNlLCAxLCAxLCBidWZmZXJQcm9taXNlcyk7
CkBAIC0yMTIsNiArMjA5LDkgQEAgYXN5bmMgZnVuY3Rpb24gdGVzdCgpIHsKICAgICAgICAgY29u
c3QgcXVldWUgPSBkZXZpY2UuZ2V0UXVldWUoKTsKICAgICAgICAgcXVldWUuc3VibWl0KFtlbmRD
b21tYW5kQnVmZmVyXSk7CiAgICAgICAgIGNvbnRleHQucHJlc2VudCgpOworCisgICAgICAgIGlm
ICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgp
OwogICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvZGVwdGgtZW5h
YmxlZC10cmlhbmdsZS1zdHJpcC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L2RlcHRoLWVuYWJs
ZWQtdHJpYW5nbGUtc3RyaXAuaHRtbAppbmRleCA5ZmQxMzNiY2FjZjdkYTA3NTAxZThhYzg1ZjBj
NmVlY2VkNWZjOTZjLi5jYmM3ZDIxOGVkNDlmMDFlMjVkNTBhYWU5NmExZTkwYmQ2ODU3YTU3IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvZGVwdGgtZW5hYmxlZC10cmlhbmdsZS1zdHJp
cC5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS9kZXB0aC1lbmFibGVkLXRyaWFuZ2xlLXN0
cmlwLmh0bWwKQEAgLTcsNiArNyw5IEBACiA8Y2FudmFzIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAw
Ij48L2NhbnZhcz4KIDxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3Njcmlw
dD4KIDxzY3JpcHQ+CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0
VW50aWxEb25lKCk7CisKIGNvbnN0IHNoYWRlckNvZGUgPSBgCiAjaW5jbHVkZSA8bWV0YWxfc3Rk
bGliPgogICAgIApAQCAtNDQsMjMgKzQ3LDE4IEBAIGZyYWdtZW50IGZsb2F0NCBmcmFnbWVudF9t
YWluKFZlcnRleE91dCB2IFtbc3RhZ2VfaW5dXSkKIH0KIGAKIAotYXN5bmMgZnVuY3Rpb24gY3Jl
YXRlVmVydGV4QnVmZmVyKGRldmljZSkgeworZnVuY3Rpb24gY3JlYXRlVmVydGV4QnVmZmVyKGRl
dmljZSkgewogICAgIGNvbnN0IGJ1ZmZlclNpemUgPSA0ICogNCAqIDQ7Ci0gICAgY29uc3QgYnVm
ZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih7IHNpemU6IGJ1ZmZlclNpemUsIHVzYWdlOiBHUFVC
dWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEUgfSk7CisgICAgY29u
c3QgYnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih7IHNpemU6IGJ1ZmZlclNpemUsIHVzYWdl
OiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9EU1QgfSk7
CisgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KFsKKyAgICAgICAgLy8g
ZmxvYXQ0IHh5encKKyAgICAgICAgLTEsIDEsIDAsIDEsCisgICAgICAgIC0xLCAtMSwgMCwgMSwK
KyAgICAgICAgMSwgMSwgMCwgMSwKKyAgICAgICAgMSwgLTEsIDAsIDEKKyAgICBdKS5idWZmZXI7
CiAgICAgCi0gICAgbGV0IGZsb2F0QXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlci5tYXBw
aW5nKTsKLSAgICBhd2FpdCBidWZmZXIubWFwV3JpdGVBc3luYygpLnRoZW4obWFwcGluZyA9PiB7
Ci0gICAgICAgIGxldCBtYXBwZWRBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkobWFwcGluZyk7Ci0g
ICAgICAgIG1hcHBlZEFycmF5LnNldChbCi0gICAgICAgICAgICAvLyBmbG9hdDQgeHl6dwotICAg
ICAgICAgICAgLTEsIDEsIDAsIDEsCi0gICAgICAgICAgICAtMSwgLTEsIDAsIDEsCi0gICAgICAg
ICAgICAxLCAxLCAwLCAxLAotICAgICAgICAgICAgMSwgLTEsIDAsIDEKLSAgICAgICAgXSk7Ci0g
ICAgICAgIGJ1ZmZlci51bm1hcCgpOwotICAgIH0pOwotCisgICAgYnVmZmVyLnNldFN1YkRhdGEo
MCwgYXJyYXlCdWZmZXIpOwogICAgIHJldHVybiBidWZmZXI7CiB9CiAKQEAgLTg3LDcgKzg1LDcg
QEAgYXN5bmMgZnVuY3Rpb24gdGVzdCgpIHsKICAgICBjb25zdCBjb250ZXh0ID0gY3JlYXRlQmFz
aWNDb250ZXh0KGNhbnZhcywgZGV2aWNlKTsKICAgICAvLyBGSVhNRTogUmVwbGFjZSB3aXRoIG5v
bi1NU0wgc2hhZGVycy4KICAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hh
ZGVyTW9kdWxlKHsgY29kZTogc2hhZGVyQ29kZSB9KTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIg
PSAgYXdhaXQgY3JlYXRlVmVydGV4QnVmZmVyKGRldmljZSk7CisgICAgY29uc3QgdmVydGV4QnVm
ZmVyID0gY3JlYXRlVmVydGV4QnVmZmVyKGRldmljZSk7CiAgICAgY29uc3QgaW5wdXRTdGF0ZURl
c2NyaXB0b3IgPSBjcmVhdGVJbnB1dFN0YXRlRGVzY3JpcHRvcigpOwogICAgIGNvbnN0IGRlcHRo
U3RhdGVEZXNjcmlwdG9yID0gY3JlYXRlQmFzaWNEZXB0aFN0YXRlRGVzY3JpcHRvcigpOwogICAg
IGNvbnN0IHBpcGVsaW5lID0gY3JlYXRlQmFzaWNQaXBlbGluZShzaGFkZXJNb2R1bGUsIGRldmlj
ZSwgbnVsbCwgaW5wdXRTdGF0ZURlc2NyaXB0b3IsIGRlcHRoU3RhdGVEZXNjcmlwdG9yKTsKQEAg
LTExOSw2ICsxMTcsOSBAQCBhc3luYyBmdW5jdGlvbiB0ZXN0KCkgewogCiAgICAgZGV2aWNlLmdl
dFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7CiAgICAgY29udGV4dC5wcmVzZW50KCk7
CisKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5
RG9uZSgpOwogfQogCiB0ZXN0KCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvbWFw
LXJlYWQtYnVmZmVycy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvbWFwLXJlYWQt
YnVmZmVycy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTM3OTU3OTRkMzJmNGIxNWM1ZTdjM2Nl
MmRjNjA0NzhmYWVhMTg4ZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS9t
YXAtcmVhZC1idWZmZXJzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDYgQEAKKworUEFTUyBzZXRT
dWJEYXRhLCBtYXBSZWFkQXN5bmMsIHVubWFwLCBhbmQgZGVzdHJveSBvbiBhIEdQVUJ1ZmZlci4g
CitQQVNTIFJlamVjdCBhIG1hcCByZWFkIG9uIGEgYnVmZmVyIG5vdCBjcmVhdGVkIHdpdGggTUFQ
X1JFQUQgdXNhZ2UuIAorUEFTUyBSZWplY3QgYSBtYXAgcmVhZCBvbiBhIG1hcHBlZCBHUFVCdWZm
ZXIuIAorUEFTUyBSZWplY3QgYSBwZW5kaW5nIG1hcCByZWFkIGlmIEdQVUJ1ZmZlciBpcyB1bm1h
cHBlZC4gCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS9tYXAtcmVhZC1idWZmZXJz
Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvbWFwLXJlYWQtYnVmZmVycy5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjNiMDBjZjI1NTE0ZTdmNjcxMTBhNzAxNmI1ZmQ1MDc5Mzg3MDZiMmQKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvbWFwLXJlYWQtYnVmZmVycy5odG1sCkBAIC0wLDAg
KzEsODYgQEAKKzwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJp
bWVudGFsOldlYkdQVUVuYWJsZWQ9dHJ1ZSBdIC0tPgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzx0
aXRsZT5UZXN0cyBmb3Igc2V0U3ViRGF0YSBhbmQgbWFwUmVhZEFzeW5jIG9uIGEgR1BVQnVmZmVy
LjwvdGl0bGU+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3Mu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9y
dC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0PgorYXN5bmMgZnVuY3Rpb24gcnVuVGVzdHMoKSB7CisgICAgY29uc3Qg
ZGV2aWNlID0gIGF3YWl0IGdldEJhc2ljRGV2aWNlKCk7CisKKyAgICAvLyBCYXNpYyBtYXBSZWFk
QXN5bmMgZnVuY3Rpb25hbGl0eQorICAgIHByb21pc2VfdGVzdChhc3luYyAoKSA9PiB7CisgICAg
ICAgIGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoeyBzaXplOiAxNiwgdXNhZ2U6
IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX0RTVCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9SRUFEIH0p
OworICAgICAgICBhc3NlcnRfdHJ1ZShidWZmZXIgaW5zdGFuY2VvZiBXZWJHUFVCdWZmZXIsICJj
cmVhdGVCdWZmZXIgcmV0dXJuZWQgYSBXZWJHUFVCdWZmZXIiKTsKKworICAgICAgICBsZXQgYXJy
YXkgPSBuZXcgRmxvYXQzMkFycmF5KFsxLCAyLCAzLCA0XSk7CisgICAgICAgIGJ1ZmZlci5zZXRT
dWJEYXRhKDAsIGFycmF5LmJ1ZmZlcik7CisKKyAgICAgICAgbGV0IGFycmF5QnVmZmVyID0gYXdh
aXQgYnVmZmVyLm1hcFJlYWRBc3luYygpOworICAgICAgICBhc3NlcnRfdHJ1ZShhcnJheUJ1ZmZl
ciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyLCAiZmlyc3QgbWFwUmVhZEFzeW5jIHJlc29sdmVkIHN1
Y2Nlc3NmdWxseSIpOworCisgICAgICAgIGNvbnN0IHJlYWRBcnJheSA9IG5ldyBGbG9hdDMyQXJy
YXkoYXJyYXlCdWZmZXIpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHJlYWRBcnJheVszXSwgNCwg
InN1Y2Nlc3NmdWxseSBtYXAtcmVhZCB2YWx1ZSBzZXQgYnkgc2V0U3ViRGF0YSIpOworCisgICAg
ICAgIGJ1ZmZlci51bm1hcCgpOworCisgICAgICAgIGJ1ZmZlci5zZXRTdWJEYXRhKDQgKiAzLCBh
cnJheS5zbGljZSgwLCAxKS5idWZmZXIpOworICAgICAgICBsZXQgYXJyYXlCdWZmZXIxID0gYXdh
aXQgYnVmZmVyLm1hcFJlYWRBc3luYygpOworICAgICAgICBjb25zdCByZWFkQXJyYXkxID0gbmV3
IEZsb2F0MzJBcnJheShhcnJheUJ1ZmZlcjEpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHJlYWRB
cnJheVszXSwgMSwgInN1Y2Nlc3NmdWxseSBzZXRTdWJEYXRhIHdpdGggYW4gb2Zmc2V0Iik7CisK
KyAgICAgICAgYnVmZmVyLnVubWFwKCk7CisKKyAgICAgICAgY29uc3QgcHJvbWlzZSA9IGJ1ZmZl
ci5tYXBSZWFkQXN5bmMoKTsgLy8gVGhpcyB3aWxsIGV2ZW50dWFsbHkgcmVqZWN0IGR1ZSB0byBi
dWZmZXIuZGVzdHJveSgpCisKKyAgICAgICAgYnVmZmVyLmRlc3Ryb3koKTsKKworICAgICAgICBh
d2FpdCBwcm9taXNlLnRoZW4oKCkgPT4geworICAgICAgICAgICAgYXNzZXJ0X3VucmVhY2hlZCgi
QnVmZmVyIHdhcyBkZXN0cm95ZWQhIik7CisgICAgICAgIH0sICgpID0+IHt9KTsKKworICAgIH0s
ICJzZXRTdWJEYXRhLCBtYXBSZWFkQXN5bmMsIHVubWFwLCBhbmQgZGVzdHJveSBvbiBhIEdQVUJ1
ZmZlci4iKTsKKworICAgIC8qIEJhc2ljIHZhbGlkYXRpb24gKi8KKyAgICAvLyBGSVhNRTogVGVz
dCBpbnZhbGlkIGNvbWJpbmF0aW9ucyBvZiBHUFVCdWZmZXJVc2FnZSBhZnRlciBpbXBsZW1lbnRp
bmcgZXJyb3IgaGFuZGxpbmcuCisKKyAgICBwcm9taXNlX3Rlc3QoYXN5bmMgKCkgPT4geworICAg
ICAgICBjb25zdCBidWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHsgc2l6ZTogMTYsIHVzYWdl
OiBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEUgfSk7CisKKyAgICAgICAgYXdhaXQgYnVmZmVyLm1h
cFJlYWRBc3luYygpLnRoZW4oKCkgPT4geworICAgICAgICAgICAgYXNzZXJ0X3VucmVhY2hlZCgi
QnVmZmVyIHdhcyBub3QgY3JlYXRlZCB3aXRoIE1BUF9SRUFEISIpOworICAgICAgICB9LCAoKSA9
PiB7fSk7CisgICAgfSwgIlJlamVjdCBhIG1hcCByZWFkIG9uIGEgYnVmZmVyIG5vdCBjcmVhdGVk
IHdpdGggTUFQX1JFQUQgdXNhZ2UuIik7CisKKyAgICAvKiBFeHRlbmRlZCB1bm1hcC9kZXN0cm95
IGFuZCBwcm9taXNlIHNldHRsaW5nIHRlc3RpbmcgKi8KKworICAgIHByb21pc2VfdGVzdChhc3lu
YyAoKSA9PiB7CisgICAgICAgIGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoeyBz
aXplOiAxNiwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLk1BUF9SRUFEIH0pOworCisgICAgICAgIGJ1
ZmZlci5tYXBSZWFkQXN5bmMoKS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgIGJ1ZmZlci51bm1h
cCgpOworICAgICAgICB9LCAoKSA9PiB7IAorICAgICAgICAgICAgYXNzZXJ0X3VucmVhY2hlZCgp
OyAKKyAgICAgICAgfSk7CisKKyAgICAgICAgYXdhaXQgYnVmZmVyLm1hcFJlYWRBc3luYygpLnRo
ZW4oKCkgPT4geworICAgICAgICAgICAgYXNzZXJ0X3VucmVhY2hlZCgiTWFwIG9wZXJhdGlvbiB3
YXMgaW52YWxpZCEiKTsgLy8gYnVmZmVyIHdhcyBzdGlsbCBpbiBtYXBwZWQgc3RhdGUgZHVyaW5n
IHByb21pc2UgY3JlYXRpb24KKyAgICAgICAgfSwgKCkgPT4ge30pOworICAgIH0sICJSZWplY3Qg
YSBtYXAgcmVhZCBvbiBhIG1hcHBlZCBHUFVCdWZmZXIuIik7CisKKyAgICBwcm9taXNlX3Rlc3Qo
YXN5bmMgKCkgPT4geworICAgICAgICBjb25zdCBidWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVy
KHsgc2l6ZTogMTYsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRCB9KTsKKworICAgICAg
ICBjb25zdCBwcm9taXNlID0gYnVmZmVyLm1hcFJlYWRBc3luYygpOworICAgICAgICBidWZmZXIu
dW5tYXAoKTsKKworICAgICAgICBhd2FpdCBwcm9taXNlLnRoZW4oKCkgPT4geworICAgICAgICAg
ICAgYXNzZXJ0X3VucmVhY2hlZCgiQnVmZmVyIHdhcyB1bm1hcHBlZCEiKTsgLy8gYnVmZmVyIHdh
cyB1bm1hcHBlZCwgd2hpY2ggcmVqZWN0cyBwZW5kaW5nIHByb21pc2VzCisgICAgICAgIH0sKCkg
PT4ge30pOworICAgIH0sICJSZWplY3QgYSBwZW5kaW5nIG1hcCByZWFkIGlmIEdQVUJ1ZmZlciBp
cyB1bm1hcHBlZC4iKTsKK30KKworcnVuVGVzdHMoKTsKKzwvc2NyaXB0PgorPC9ib2R5PgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3ZlcnRleC1idWZmZXItdHJpYW5nbGUtc3RyaXAu
aHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS92ZXJ0ZXgtYnVmZmVyLXRyaWFuZ2xlLXN0cmlwLmh0
bWwKaW5kZXggMmMwNTdlMzM0YTYxNGNiOGRhZmQzYWE5OGM5YzQ2ODNmNjA5M2FhYi4uNDRkOTQ0
OTcxM2QyM2VhNDJlMGI1OTY1ODc0NjVlZTQ1NmZmNDZjYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L3ZlcnRleC1idWZmZXItdHJpYW5nbGUtc3RyaXAuaHRtbAorKysgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvdmVydGV4LWJ1ZmZlci10cmlhbmdsZS1zdHJpcC5odG1sCkBAIC03LDYgKzcs
OSBAQAogPGNhbnZhcyB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+CiA8c2NyaXB0
IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0PgoraWYgKHdp
bmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworCiBjb25z
dCBzaGFkZXJDb2RlID0gYAogI2luY2x1ZGUgPG1ldGFsX3N0ZGxpYj4KICAgICAKQEAgLTM4LDIx
ICs0MSwyMSBAQCBmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRfbWFpbihWZXJ0ZXhPdXQgdiBbW3N0
YWdlX2luXV0pCiB9CiBgCiAKLWFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVZlcnRleEJ1ZmZlcihkZXZp
Y2UpIHsKK2Z1bmN0aW9uIGNyZWF0ZVZlcnRleEJ1ZmZlcihkZXZpY2UpIHsKICAgICBjb25zdCBi
dWZmZXJTaXplID0gNCAqIDUgKiA0OwotICAgIGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVC
dWZmZXIoeyBzaXplOiBidWZmZXJTaXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwg
R1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFIH0pOwotICAgIAotICAgIGF3YWl0IGJ1ZmZlci5tYXBX
cml0ZUFzeW5jKCkudGhlbihtYXBwaW5nID0+IHsKLSAgICAgICAgbGV0IG1hcHBlZEFycmF5ID0g
bmV3IEZsb2F0MzJBcnJheShtYXBwaW5nKTsKLSAgICAgICAgbWFwcGVkQXJyYXkuc2V0KFsKLSAg
ICAgICAgICAgIC8vIGZsb2F0NCB4eXp3LCBmbG9hdCBnCi0gICAgICAgICAgICAtMSwgMSwgMCwg
MSwgMSwKLSAgICAgICAgICAgIC0xLCAtMSwgMCwgMSwgMSwKLSAgICAgICAgICAgIDEsIDEsIDAs
IDEsIDEsCi0gICAgICAgICAgICAxLCAtMSwgMCwgMSwgMQotICAgICAgICBdKTsKLSAgICAgICAg
YnVmZmVyLnVubWFwKCk7Ci0gICAgfSk7CisgICAgY29uc3QgYnVmZmVyID0gZGV2aWNlLmNyZWF0
ZUJ1ZmZlcih7IHNpemU6IGJ1ZmZlclNpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVgg
fCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9EU1QgfSk7CisgICAgY29uc3QgdmVydGV4QXJyYXlC
dWZmZXIwID0gbmV3IEZsb2F0MzJBcnJheShbCisgICAgICAgIC8vIGZsb2F0NCB4eXp3LCBmbG9h
dCBnCisgICAgICAgIC0xLCAxLCAwLCAxLCAxLAorICAgICAgICAtMSwgLTEsIDAsIDEsIDEKKyAg
ICBdKS5idWZmZXI7CisgICAgY29uc3QgdmVydGV4QXJyYXlCdWZmZXIxID0gbmV3IEZsb2F0MzJB
cnJheShbCisgICAgICAgIDEsIDEsIDAsIDEsIDEsCisgICAgICAgIDEsIC0xLCAwLCAxLCAxCisg
ICAgXSkuYnVmZmVyOworCisgICAgYnVmZmVyLnNldFN1YkRhdGEoMCwgdmVydGV4QXJyYXlCdWZm
ZXIwKTsKKyAgICBidWZmZXIuc2V0U3ViRGF0YSg0ICogNSAqIDIsIHZlcnRleEFycmF5QnVmZmVy
MSk7CiAKICAgICByZXR1cm4gYnVmZmVyOwogfQpAQCAtODUsMTYgKzg4LDE5IEBAIGFzeW5jIGZ1
bmN0aW9uIHRlc3QoKSB7CiAgICAgY29uc3QgY29udGV4dCA9IGNyZWF0ZUJhc2ljQ29udGV4dChj
YW52YXMsIGRldmljZSk7CiAgICAgLy8gRklYTUU6IFJlcGxhY2Ugd2l0aCBub24tTVNMIHNoYWRl
cnMuCiAgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7
IGNvZGU6IHNoYWRlckNvZGUgfSk7Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyID0gYXdhaXQgY3Jl
YXRlVmVydGV4QnVmZmVyKGRldmljZSk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyID0gY3JlYXRl
VmVydGV4QnVmZmVyKGRldmljZSk7CiAgICAgY29uc3QgaW5wdXRTdGF0ZURlc2NyaXB0b3IgPSBj
cmVhdGVJbnB1dFN0YXRlRGVzY3JpcHRvcigpOwogICAgIGNvbnN0IHBpcGVsaW5lID0gY3JlYXRl
QmFzaWNQaXBlbGluZShzaGFkZXJNb2R1bGUsIGRldmljZSwgbnVsbCwgaW5wdXRTdGF0ZURlc2Ny
aXB0b3IpOwogICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEJ1
ZmZlcigpOwogICAgIGNvbnN0IHBhc3NFbmNvZGVyID0gYmVnaW5CYXNpY1JlbmRlclBhc3MoY29u
dGV4dCwgY29tbWFuZEJ1ZmZlcik7CiAgICAgY29uc3QgZW5kQ29tbWFuZEJ1ZmZlciA9IGVuY29k
ZUJhc2ljQ29tbWFuZHMocGFzc0VuY29kZXIsIHBpcGVsaW5lLCB2ZXJ0ZXhCdWZmZXIpOwogICAg
IGNvbnN0IHF1ZXVlID0gZGV2aWNlLmdldFF1ZXVlKCk7Ci0KICAgICBxdWV1ZS5zdWJtaXQoW2Vu
ZENvbW1hbmRCdWZmZXJdKTsKKyAgICB2ZXJ0ZXhCdWZmZXIuZGVzdHJveSgpOwogICAgIGNvbnRl
eHQucHJlc2VudCgpOworCisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0
UnVubmVyLm5vdGlmeURvbmUoKTsKIH0KIAogdGVzdCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363115</attachid>
            <date>2019-02-27 12:33:25 -0800</date>
            <delta_ts>2019-02-27 13:10:30 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-195077-20190227123325.patch</filename>
            <type>text/plain</type>
            <size>71925</size>
            <attacher name="Justin Fan">justin_fan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQxOTk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzJmZTI4ZWM4NzE4ODM1
YTFkNjhhZGFkZTg4ZTkzYzQ0OThjYjk4MC4uZDNiMTg2ZGNjNzcxYWE5YTQyZmMxOTdlYzFmNTJm
ODRkYmQyN2E2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDE5LTAyLTI3ICBKdXN0
aW4gRmFuICA8anVzdGluX2ZhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYiBHUFVdIEJ1ZmZl
ciB1cGRhdGVzIHBhcnQgMjogc2V0U3ViRGF0YSwgR1BVL0NQVSBzeW5jaHJvbml6YXRpb24KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NTA3NworICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vNDc4MDUyMjk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGVh
biBKYWNrc29uLgorCisgICAgICAgIEltcGxlbWVudCBHUFVCdWZmZXIuc2V0U3ViRGF0YSBhbmQg
cHJldmVudCB0aGUgcmVzb2x2aW5nIG9mIG1hcHBpbmcgcHJvbWlzZXMgaWYgdGhlIGJ1ZmZlciBp
cyBzY2hlZHVsZWQgdG8gYmUgCisgICAgICAgIHVzZWQgb24gdGhlIEdQVSwgYW5kIGFkZCBoYW5k
bGVycyB0byByZXNvbHZlIHN1Y2ggcHJvbWlzZXMgYWZ0ZXIgY29tbWFuZCBidWZmZXIgZXhlY3V0
aW9uIGNvbXBsZXRlcy4gSW4gYWRkaXRpb24sCisgICAgICAgIHVwZGF0ZSBidWZmZXIgc2l6ZXMg
dG8gdTY0ICh1bnNpZ25lZCBsb25nIGluIEMrKykgYXMgcGVyIHRoZSB1cGRhdGVkIFdlYiBHUFUg
QVBJLgorCisgICAgICAgIFRlc3RzOiB3ZWJncHUvYnVmZmVyLWNvbW1hbmQtYnVmZmVyLXJhY2Vz
Lmh0bWwKKyAgICAgICAgICAgICAgIHdlYmdwdS9tYXAtcmVhZC1idWZmZXJzLmh0bWwKKworICAg
ICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dlYkdQVUJpbmRHcm91cC5oOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR1BVQmluZEdyb3VwOjpiaW5kR3JvdXAgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMv
d2ViZ3B1L1dlYkdQVUJpbmRHcm91cERlc2NyaXB0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR1BVQmluZEdyb3VwRGVzY3JpcHRvcjo6YXNHUFVCaW5kR3JvdXBEZXNjcmlwdG9yIGNvbnN0
KTogUmVuYW1lIGJpbmRpbmcgLT4gYnVmZmVyQmluZGluZyB0byByZWR1Y2UgY29uZnVzaW9uLgor
ICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dlYkdQVUJ1ZmZlci5jcHA6IFNtYWxsIHR3ZWFrcy4K
KyAgICAgICAgKFdlYkNvcmU6OldlYkdQVUJ1ZmZlcjo6c2V0U3ViRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHUFVCdWZmZXI6OnVubWFwKTogQ29ycmVjdGx5IGZhaWwgaWYgYnVmZmVyIGlz
IGRlc3Ryb3llZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdQVUJ1ZmZlcjo6ZGVzdHJveSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHUFVCdWZmZXI6OnJlamVjdE9yUmVnaXN0ZXJQcm9taXNlQ2Fs
bGJhY2spOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dlYkdQVUJ1ZmZlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR1BVQnVmZmVyOjpidWZmZXIgY29uc3QpOiBSZXR1cm5lZCBidWZmZXIg
aXMgbm8gbG9uZ2VyIGNvbnN0IHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgaW4gY29tcGxldGVkIGhh
bmRsZXIgY2FsbGJhY2tzLgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dlYkdQVUJ1ZmZlci5p
ZGw6IEVuYWJsZSBzZXRTdWJEYXRhLgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dlYkdQVUNv
bW1hbmRCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR1BVQ29tbWFuZEJ1ZmZlcjo6
YmVnaW5SZW5kZXJQYXNzKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XZWJHUFVQcm9ncmFt
bWFibGVQYXNzRW5jb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHUFVQcm9ncmFtbWFi
bGVQYXNzRW5jb2Rlcjo6c2V0QmluZEdyb3VwIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dl
YmdwdS9XZWJHUFVQcm9ncmFtbWFibGVQYXNzRW5jb2Rlci5oOgorICAgICAgICAqIE1vZHVsZXMv
d2ViZ3B1L1dlYkdQVVJlbmRlclBhc3NFbmNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdQVVJlbmRlclBhc3NFbmNvZGVyOjpzZXRWZXJ0ZXhCdWZmZXJzKToKKyAgICAgICAgKiBTb3Vy
Y2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVUJ1ZmZlci5oOgorICAgICAgICAoV2Vi
Q29yZTo6R1BVQnVmZmVyOjppc1RyYW5zZmVyRHN0IGNvbnN0KTogQWRkZWQgdmFyaW91cyBzdGF0
ZSBhbmQgZmxhZyBnZXR0ZXJzLgorICAgICAgICAoV2ViQ29yZTo6R1BVQnVmZmVyOjppc1ZlcnRl
eCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHUFVCdWZmZXI6OmlzVW5pZm9ybSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpHUFVCdWZmZXI6OmlzU3RvcmFnZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHUFVCdWZmZXI6OmlzUmVhZE9ubHkgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R1BVQnVmZmVyOjppc01hcHBhYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdQVUJ1
ZmZlcjo6aXNNYXBXcml0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHUFVCdWZmZXI6Omlz
TWFwUmVhZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHUFVCdWZmZXI6OmlzTWFwV3JpdGVh
YmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdQVUJ1ZmZlcjo6aXNNYXBSZWFkYWJsZSBj
b25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVUJ1ZmZlckJpbmRpbmcu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVQ29tbWFuZEJ1ZmZlci5oOgor
ICAgICAgICAoV2ViQ29yZTo6R1BVQ29tbWFuZEJ1ZmZlcjo6dXNlZEJ1ZmZlcnMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R1BVQ29tbWFuZEJ1ZmZlcjo6dXNlQnVmZmVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVRGV2aWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdQVURldmljZTo6dHJ5Q3JlYXRlQnVmZmVyKTogUGFzcyBSZWYgb2YgaXRzZWxmIGZvciBCdWZm
ZXIgdG8gcmVxdWVzdCB0aGUgUXVldWUgbGF0ZXIsIGlmIG5lZWRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdQVURldmljZTo6dHJ5Q3JlYXRlQnVmZmVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVRGV2aWNlLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L0dQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyLmNwcDogUmV0YWluIHRoZSBl
bmNvZGVyJ3MgY29tbWFuZEJ1ZmZlciB0byByZWZlcmVuY2UgaXRzIHVzZWQgcmVzb3VyY2UgYnVm
ZmVycy4KKyAgICAgICAgKFdlYkNvcmU6OkdQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyOjpHUFVQ
cm9ncmFtbWFibGVQYXNzRW5jb2Rlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L0dQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpHUFVQcm9n
cmFtbWFibGVQYXNzRW5jb2Rlcjo6Y29tbWFuZEJ1ZmZlciBjb25zdCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVJlbmRlclBhc3NFbmNvZGVyLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUJ1ZmZlck1ldGFsLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6R1BVQnVmZmVyOjp2YWxpZGF0ZUJ1ZmZlckNyZWF0ZSk6IE1vdmUgdmFsaWRhdGlvbiBv
dXQgb2YgdHJ5Q3JlYXRlLgorICAgICAgICAoV2ViQ29yZTo6R1BVQnVmZmVyOjp0cnlDcmVhdGUp
OiBDcmVhdGUgYm90aCBzaGFyZWQgYW5kIHByaXZhdGUgYnVmZmVycywgZGVwZW5kaW5nIG9uIHVz
YWdlLgorICAgICAgICAoV2ViQ29yZTo6R1BVQnVmZmVyOjpHUFVCdWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R1BVQnVmZmVyOjp+R1BVQnVmZmVyKTogQ2FsbCBkZXN0cm95IGluc3RlYWQgb2Yg
anVzdCB1bm1hcC4KKyAgICAgICAgKFdlYkNvcmU6OkdQVUJ1ZmZlcjo6c3RhdGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R1BVQnVmZmVyOjpzZXRTdWJEYXRhKTogVXNlcyBhIGNhY2hlZCBj
b2xsZWN0aW9uIG9mIHN0YWdpbmcgTVRMQnVmZmVycyB0byBlbmNvZGUgZGF0YSBjb3BpZXMgdG8g
dGhlIGltcGxlbWVudGF0aW9uIE1UTEJ1ZmZlci4KKyAgICAgICAgKFdlYkNvcmU6OkdQVUJ1ZmZl
cjo6Y29tbWFuZEJ1ZmZlckNvbW1pdHRlZCk6IFJlZ2lzdGVyIG9uIHRoZSBHUFVCdWZmZXIgdGhh
dCB0aGUgcHJvdmlkZWQgTVRMQ29tbWFuZEJ1ZmZlciB1c2VzIGl0LCBhbmQgaXMgYWJvdXQgdG8g
YmUgY29tbWl0dGVkLgorICAgICAgICAoV2ViQ29yZTo6R1BVQnVmZmVyOjpjb21tYW5kQnVmZmVy
Q29tcGxldGVkKTogTVRMQ29tbWFuZEJ1ZmZlcidzIG9uQ29tcGxldGVkSGFuZGxlciBjYWxscyB0
aGlzLgorICAgICAgICAoV2ViQ29yZTo6R1BVQnVmZmVyOjpyZXVzZVN1YkRhdGFCdWZmZXIpOiBT
ZXRTdWJEYXRhJ3MgYmxpdCBjb21tYW5kIGJ1ZmZlcnMgY2FsbCB0aGlzIHRvIHJldHVybiBhIHN0
YWdpbmcgYnVmZmVyIHRvIHRoZSBwb29sLgorICAgICAgICAoV2ViQ29yZTo6R1BVQnVmZmVyOjpy
ZWdpc3Rlck1hcHBpbmdDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHUFVCdWZmZXI6OnJ1
bk1hcHBpbmdDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHUFVCdWZmZXI6OnVubWFwKToK
KyAgICAgICAgKFdlYkNvcmU6OkdQVUJ1ZmZlcjo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3Jl
OjpHUFVCdWZmZXI6OnRyeUNyZWF0ZVNoYXJlZEJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyTWV0
YWwubW06CisgICAgICAgIChXZWJDb3JlOjpHUFVQcm9ncmFtbWFibGVQYXNzRW5jb2Rlcjo6c2V0
UmVzb3VyY2VBc0J1ZmZlck9uRW5jb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpHUFVQcm9ncmFt
bWFibGVQYXNzRW5jb2Rlcjo6c2V0QmluZEdyb3VwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9ncHUvY29jb2EvR1BVUXVldWVNZXRhbC5tbToKKyAgICAgICAgKFdlYkNvcmU6OkdQVVF1
ZXVlOjpzdWJtaXQpOiBFbnN1cmUgc3VibWl0dGVkIGJ1ZmZlcnMgYXJlIGluIHRoZSBjb3JyZWN0
IHN0YXRlLCBhbmQgYWRkIGNvbXBsZXRlZCBoYW5kbGVycyBmb3Igc3luY2hyb25pemF0aW9uLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQYXNzRW5jb2Rl
ck1ldGFsLm1tOgorICAgICAgICAoV2ViQ29yZTo6R1BVUmVuZGVyUGFzc0VuY29kZXI6OnRyeUNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6R1BVUmVuZGVy
UGFzc0VuY29kZXIpOiBSZXRhaW4gdGhlIGNvbW1hbmRCdWZmZXIgZm9yIGxhdGVyIHJlZmVyZW5j
ZS4KKyAgICAgICAgKFdlYkNvcmU6OkdQVVJlbmRlclBhc3NFbmNvZGVyOjpzZXRWZXJ0ZXhCdWZm
ZXJzKTogTWFyayB2ZXJ0ZXggYnVmZmVycyBhcyB1c2VkIGJlZm9yZSBzdWJtaXNzaW9uLgorICAg
ICAgICAoV2ViQ29yZTo6R1BVUmVuZGVyUGFzc0VuY29kZXI6OmNyZWF0ZSk6IERlbGV0ZWQuCisK
KyAgICAgICAgQnVmZmVyIHNpemUgdXBkYXRlcyBpbiB0aGUgSURMOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViZ3B1L0dQVUJ1ZmZlckRlc2NyaXB0b3IuaWRsOgorICAgICAgICAqIE1vZHVsZXMvd2Vi
Z3B1L1dlYkdQVUJ1ZmZlci5pZGw6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV2ViR1BVQnVm
ZmVyQmluZGluZy5pZGw6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV2ViR1BVQ29tbWFuZEJ1
ZmZlci5pZGw6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV2ViR1BVUmVuZGVyUGFzc0VuY29k
ZXIuaWRsOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dlYkdQVVZlcnRleEF0dHJpYnV0ZURl
c2NyaXB0b3IuaWRsOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dlYkdQVVZlcnRleElucHV0
RGVzY3JpcHRvci5pZGw6CisKIDIwMTktMDItMjMgIEp1c3RpbiBGYW4gIDxqdXN0aW5fZmFuQGFw
cGxlLmNvbT4KIAogICAgICAgICBbV2ViR1BVXSBCdWZmZXIgdXBkYXRlcyBwYXJ0IDE6IGFzeW5j
IG1hcHBpbmcgZnVuY3Rpb25zLCB1bm1hcCwgYW5kIGRlc3Ryb3kKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L0dQVUJ1ZmZlckRlc2NyaXB0b3IuaWRsIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvR1BVQnVmZmVyRGVzY3JpcHRvci5pZGwKaW5kZXggMzc4
NmUzNTY4NTcyNDlkY2ZmZjIwMmVmM2M0ODdmZjVhOGRlNjA1Ni4uMjczMzc3ZDVmMDI5MWZiYzkw
MGM4ZDcwMzI4MmEyZGViNDljMGYwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvR1BVQnVmZmVyRGVzY3JpcHRvci5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvR1BVQnVmZmVyRGVzY3JpcHRvci5pZGwKQEAgLTI0LDEzICsyNCwxMyBAQAog
ICovCiAvLyBodHRwczovL2dpdGh1Yi5jb20vZ3B1d2ViL2dwdXdlYi9ibG9iL21hc3Rlci9kZXNp
Z24vc2tldGNoLndlYmlkbAogCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgdTMyOwotdHlwZWRlZiB1
MzIgR1BVQnVmZmVyVXNhZ2VGbGFnczsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHU2NDsK
K3R5cGVkZWYgdW5zaWduZWQgbG9uZyBHUFVCdWZmZXJVc2FnZUZsYWdzOwogCiBbCiAgICAgQ29u
ZGl0aW9uYWw9V0VCR1BVLAogICAgIEVuYWJsZWRBdFJ1bnRpbWU9V2ViR1BVCiBdIGRpY3Rpb25h
cnkgR1BVQnVmZmVyRGVzY3JpcHRvciB7Ci0gICAgdTMyIHNpemU7CisgICAgdTY0IHNpemU7CiAg
ICAgR1BVQnVmZmVyVXNhZ2VGbGFncyB1c2FnZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVCaW5kR3JvdXAuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dlYkdQVUJpbmRHcm91cC5oCmluZGV4IDUwNGRhOTUwZjVjZTQwOTc5MzBl
YmJhZGExMzJkNmI5YjZkNjlkZjEuLjgyOWVhYjJiM2IxYTY2YjJmYmQ5MzEzMjcyOTFmZDY1ZWI2
ODI4ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVUJp
bmRHcm91cC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVUJpbmRH
cm91cC5oCkBAIC0zNyw3ICszNyw3IEBAIGNsYXNzIFdlYkdQVUJpbmRHcm91cCA6IHB1YmxpYyBS
ZWZDb3VudGVkPFdlYkdQVUJpbmRHcm91cD4gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8V2Vi
R1BVQmluZEdyb3VwPiBjcmVhdGUoUmVmUHRyPEdQVUJpbmRHcm91cD4mJik7CiAKLSAgICBjb25z
dCBHUFVCaW5kR3JvdXAqIGJpbmRHcm91cCgpIGNvbnN0IHsgcmV0dXJuIG1fYmluZEdyb3VwLmdl
dCgpOyB9CisgICAgR1BVQmluZEdyb3VwKiBiaW5kR3JvdXAoKSBjb25zdCB7IHJldHVybiBtX2Jp
bmRHcm91cC5nZXQoKTsgfQogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFdlYkdQVUJpbmRHcm91
cChSZWZQdHI8R1BVQmluZEdyb3VwPiYmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dlYkdQVUJpbmRHcm91cERlc2NyaXB0b3IuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVQmluZEdyb3VwRGVzY3JpcHRvci5jcHAKaW5kZXggYzRj
NmQ0NmMwYzRhZWYwNjQ1OGI2NmE3YWY1MWI2MjBlMjNmMDM1OC4uZTBlN2RiZTczMTM4NTBmMzBm
NmNlZjQ1ODZmMzE5MGY0YjJkZGM0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV2ViR1BVQmluZEdyb3VwRGVzY3JpcHRvci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVQmluZEdyb3VwRGVzY3JpcHRvci5jcHAKQEAgLTg2LDcg
Kzg2LDcgQEAgT3B0aW9uYWw8R1BVQmluZEdyb3VwRGVzY3JpcHRvcj4gV2ViR1BVQmluZEdyb3Vw
RGVzY3JpcHRvcjo6YXNHUFVCaW5kR3JvdXBEZXNjcmkKICAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgICAgIH0KIAotICAgICAgICBhdXRvIGxheW91dEJpbmRpbmcgPSBpdGVy
YXRvci0+dmFsdWU7CisgICAgICAgIGNvbnN0IGF1dG8gbGF5b3V0QmluZGluZyA9IGl0ZXJhdG9y
LT52YWx1ZTsKIAogICAgICAgICBhdXRvIGJpbmRpbmdSZXNvdXJjZVZpc2l0b3IgPSBXVEY6Om1h
a2VWaXNpdG9yKFtdIChSZWZQdHI8V2ViR1BVVGV4dHVyZVZpZXc+IHZpZXcpIC0+IE9wdGlvbmFs
PEdQVUJpbmRpbmdSZXNvdXJjZT4gewogICAgICAgICAgICAgLy8gRklYTUU6IFZhbGlkYXRlIGJp
bmRpbmcgdHlwZSB3aXRoIHRoZSB0ZXh0dXJlJ3MgdXNhZ2UgZmxhZ3MuCkBAIC05NCwxNSArOTQs
MTUgQEAgT3B0aW9uYWw8R1BVQmluZEdyb3VwRGVzY3JpcHRvcj4gV2ViR1BVQmluZEdyb3VwRGVz
Y3JpcHRvcjo6YXNHUFVCaW5kR3JvdXBEZXNjcmkKICAgICAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R1BVQmluZGluZ1Jl
c291cmNlPih2aWV3LT50ZXh0dXJlKCkpOwotICAgICAgICB9LCBbJmxheW91dEJpbmRpbmcsIGZ1
bmN0aW9uTmFtZV0gKGNvbnN0IFdlYkdQVUJ1ZmZlckJpbmRpbmcmIGJpbmRpbmcpIC0+IE9wdGlv
bmFsPEdQVUJpbmRpbmdSZXNvdXJjZT4gewotICAgICAgICAgICAgaWYgKCFiaW5kaW5nLmJ1ZmZl
ciB8fCAhYmluZGluZy5idWZmZXItPmJ1ZmZlcigpKSB7CisgICAgICAgIH0sIFsmbGF5b3V0Qmlu
ZGluZywgZnVuY3Rpb25OYW1lXSAoV2ViR1BVQnVmZmVyQmluZGluZyBidWZmZXJCaW5kaW5nKSAt
PiBPcHRpb25hbDxHUFVCaW5kaW5nUmVzb3VyY2U+IHsKKyAgICAgICAgICAgIGlmICghYnVmZmVy
QmluZGluZy5idWZmZXIgfHwgIWJ1ZmZlckJpbmRpbmcuYnVmZmVyLT5idWZmZXIoKSkgewogICAg
ICAgICAgICAgICAgIExPRyhXZWJHUFUsICIlczogSW52YWxpZCBHUFVCdWZmZXJCaW5kaW5nIGZv
ciBiaW5kaW5nICVsdSBpbiBHUFVCaW5kR3JvdXBCaW5kaW5ncyEiLCBmdW5jdGlvbk5hbWUsIGxh
eW91dEJpbmRpbmcuYmluZGluZyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghdmFsaWRhdGVCdWZmZXJCaW5kaW5n
VHlwZShiaW5kaW5nLmJ1ZmZlci0+YnVmZmVyKCkuZ2V0KCksIGxheW91dEJpbmRpbmcsIGZ1bmN0
aW9uTmFtZSkpCisgICAgICAgICAgICBpZiAoIXZhbGlkYXRlQnVmZmVyQmluZGluZ1R5cGUoYnVm
ZmVyQmluZGluZy5idWZmZXItPmJ1ZmZlcigpLmdldCgpLCBsYXlvdXRCaW5kaW5nLCBmdW5jdGlv
bk5hbWUpKQogICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxHUFVCaW5kaW5nUmVzb3VyY2U+KEdQVUJ1ZmZlckJpbmRp
bmcgeyBiaW5kaW5nLmJ1ZmZlci0+YnVmZmVyKCkucmVsZWFzZU5vbk51bGwoKSwgYmluZGluZy5v
ZmZzZXQsIGJpbmRpbmcuc2l6ZSB9KTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxH
UFVCaW5kaW5nUmVzb3VyY2U+KEdQVUJ1ZmZlckJpbmRpbmcgeyBidWZmZXJCaW5kaW5nLmJ1ZmZl
ci0+YnVmZmVyKCkucmVsZWFzZU5vbk51bGwoKSwgYnVmZmVyQmluZGluZy5vZmZzZXQsIGJ1ZmZl
ckJpbmRpbmcuc2l6ZSB9KTsKICAgICAgICAgfSk7CiAKICAgICAgICAgYXV0byBiaW5kaW5nUmVz
b3VyY2UgPSBXVEY6OnZpc2l0KGJpbmRpbmdSZXNvdXJjZVZpc2l0b3IsIGJpbmRpbmcucmVzb3Vy
Y2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVQnVm
ZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVUJ1ZmZlci5jcHAK
aW5kZXggNDBiYjFmMjUxODZiZTQyOWE3YjI5YzAzZjQ1MWNlNTc1YWE0MTM3ZC4uYWRlMjI2MTg5
NDA2Zjg1N2ZhMWUzZmIyOWQ4YzliZGJlYmY5NWYzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XZWJHUFVCdWZmZXIuY3BwCkBAIC00Miw2ICs0MiwxNCBAQCBXZWJHUFVC
dWZmZXI6OldlYkdQVUJ1ZmZlcihSZWZQdHI8R1BVQnVmZmVyPiYmIGJ1ZmZlcikKIHsKIH0KIAor
dm9pZCBXZWJHUFVCdWZmZXI6OnNldFN1YkRhdGEodW5zaWduZWQgbG9uZyBvZmZzZXQsIGNvbnN0
IEpTQzo6QXJyYXlCdWZmZXImIGRhdGEpCit7CisgICAgaWYgKCFtX2J1ZmZlcikKKyAgICAgICAg
TE9HKFdlYkdQVSwgIkdQVUJ1ZmZlcjo6c2V0U3ViRGF0YSgpOiBJbnZhbGlkIG9wZXJhdGlvbiEi
KTsKKyAgICBlbHNlCisgICAgICAgIG1fYnVmZmVyLT5zZXRTdWJEYXRhKG9mZnNldCwgZGF0YSk7
Cit9CisKIHZvaWQgV2ViR1BVQnVmZmVyOjptYXBSZWFkQXN5bmMoQnVmZmVyTWFwcGluZ1Byb21p
c2UmJiBwcm9taXNlKQogewogICAgIHJlamVjdE9yUmVnaXN0ZXJQcm9taXNlQ2FsbGJhY2soV1RG
TW92ZShwcm9taXNlKSwgdHJ1ZSk7CkBAIC01NCw3ICs2Miw5IEBAIHZvaWQgV2ViR1BVQnVmZmVy
OjptYXBXcml0ZUFzeW5jKEJ1ZmZlck1hcHBpbmdQcm9taXNlJiYgcHJvbWlzZSkKIAogdm9pZCBX
ZWJHUFVCdWZmZXI6OnVubWFwKCkKIHsKLSAgICBpZiAobV9idWZmZXIpCisgICAgaWYgKCFtX2J1
ZmZlcikKKyAgICAgICAgTE9HKFdlYkdQVSwgIkdQVUJ1ZmZlcjo6dW5tYXAoKTogSW52YWxpZCBv
cGVyYXRpb24hIik7CisgICAgZWxzZQogICAgICAgICBtX2J1ZmZlci0+dW5tYXAoKTsKIH0KIApA
QCAtNjQsNyArNzQsNiBAQCB2b2lkIFdlYkdQVUJ1ZmZlcjo6ZGVzdHJveSgpCiAgICAgICAgIExP
RyhXZWJHUFUsICJHUFVCdWZmZXI6OmRlc3Ryb3koKTogSW52YWxpZCBvcGVyYXRpb24hIik7CiAg
ICAgZWxzZSB7CiAgICAgICAgIG1fYnVmZmVyLT5kZXN0cm95KCk7Ci0gICAgICAgIC8vIEZJWE1F
OiBFbnN1cmUgdGhhdCBHUFVCdWZmZXIgaXMga2VwdCBhbGl2ZSBieSByZXNvdXJjZSBiaW5kaW5n
cyBpZiBzdGlsbCBiZWluZyB1c2VkIGJ5IEdQVS4KICAgICAgICAgbV9idWZmZXIgPSBudWxscHRy
OwogICAgIH0KIH0KQEAgLTc4LDEyICs4NywxMCBAQCB2b2lkIFdlYkdQVUJ1ZmZlcjo6cmVqZWN0
T3JSZWdpc3RlclByb21pc2VDYWxsYmFjayhCdWZmZXJNYXBwaW5nUHJvbWlzZSYmIHByb21pcwog
ICAgIH0KIAogICAgIG1fYnVmZmVyLT5yZWdpc3Rlck1hcHBpbmdDYWxsYmFjayhbcHJvbWlzZSA9
IFdURk1vdmUocHJvbWlzZSldIChKU0M6OkFycmF5QnVmZmVyKiBhcnJheUJ1ZmZlcikgbXV0YWJs
ZSB7Ci0gICAgICAgIGlmICghYXJyYXlCdWZmZXIpIHsKKyAgICAgICAgaWYgKGFycmF5QnVmZmVy
KQorICAgICAgICAgICAgcHJvbWlzZS5yZXNvbHZlKCphcnJheUJ1ZmZlcik7CisgICAgICAgIGVs
c2UKICAgICAgICAgICAgIHByb21pc2UucmVqZWN0KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLQotICAgICAgICBwcm9taXNlLnJlc29sdmUoYXJyYXlCdWZmZXIpOwogICAgIH0s
IGlzUmVhZCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dlYkdQVUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVQnVm
ZmVyLmgKaW5kZXggMjdlNzliMTRiMTNjNTM3YmU3N2M5Y2Y3NmE1ZWE1YTUyYzhjNmYxZS4uZjU1
NWM3Yzc3N2RhM2JmNzM2YTkwZjg2NjJlZTE0YWZiYjE0NzE0ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVQnVmZmVyLmgKQEAgLTQ1LDkgKzQ1LDEwIEBAIGNsYXNz
IFdlYkdQVUJ1ZmZlciA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYkdQVUJ1ZmZlcj4gewogcHVibGlj
OgogICAgIHN0YXRpYyBSZWY8V2ViR1BVQnVmZmVyPiBjcmVhdGUoUmVmUHRyPEdQVUJ1ZmZlcj4m
Jik7CiAKLSAgICBSZWZQdHI8Y29uc3QgR1BVQnVmZmVyPiBidWZmZXIoKSBjb25zdCB7IHJldHVy
biBtX2J1ZmZlcjsgfQorICAgIFJlZlB0cjxHUFVCdWZmZXI+IGJ1ZmZlcigpIGNvbnN0IHsgcmV0
dXJuIG1fYnVmZmVyOyB9CiAKLSAgICB1c2luZyBCdWZmZXJNYXBwaW5nUHJvbWlzZSA9IERPTVBy
b21pc2VEZWZlcnJlZDxJRExJbnRlcmZhY2U8SlNDOjpBcnJheUJ1ZmZlcio+PjsKKyAgICB2b2lk
IHNldFN1YkRhdGEodW5zaWduZWQgbG9uZywgY29uc3QgSlNDOjpBcnJheUJ1ZmZlciYpOworICAg
IHVzaW5nIEJ1ZmZlck1hcHBpbmdQcm9taXNlID0gRE9NUHJvbWlzZURlZmVycmVkPElETEludGVy
ZmFjZTxKU0M6OkFycmF5QnVmZmVyPj47CiAgICAgdm9pZCBtYXBSZWFkQXN5bmMoQnVmZmVyTWFw
cGluZ1Byb21pc2UmJik7CiAgICAgdm9pZCBtYXBXcml0ZUFzeW5jKEJ1ZmZlck1hcHBpbmdQcm9t
aXNlJiYpOwogICAgIHZvaWQgdW5tYXAoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dlYkdQVUJ1ZmZlci5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XZWJHUFVCdWZmZXIuaWRsCmluZGV4IDc1MmFlNzQ1NmU5MjA3NjM2ZjM2ZDYxNmY1MDc3
NTlmOTQxNjdlYTYuLjYxZGEwOWVkOTRhOWJjNjdkMDhhZDNhYzczMjVlYjQyMWMzYjk3OTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVUJ1ZmZlci5pZGwK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVQnVmZmVyLmlkbApAQCAt
MjIsMTMgKzIyLDE2IEBACiAgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCiAgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAgKi8KKy8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ncHV3ZWIvZ3B1d2ViL2Js
b2IvbWFzdGVyL2Rlc2lnbi9za2V0Y2gud2ViaWRsCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBs
b25nIHU2NDsKIAogWwogICAgIENvbmRpdGlvbmFsPVdFQkdQVSwKICAgICBFbmFibGVkQXRSdW50
aW1lPVdlYkdQVSwKICAgICBJbXBsZW1lbnRhdGlvbkxhY2tzVlRhYmxlCiBdIGludGVyZmFjZSBX
ZWJHUFVCdWZmZXIgewotICAgIC8vdm9pZCBzZXRTdWJEYXRhKHUzMiBvZmZzZXQsIEFycmF5QnVm
ZmVyIGRhdGEpOworICAgIHZvaWQgc2V0U3ViRGF0YSh1NjQgb2Zmc2V0LCBBcnJheUJ1ZmZlciBk
YXRhKTsKIAogICAgIFByb21pc2U8QXJyYXlCdWZmZXI+IG1hcFJlYWRBc3luYygpOwogICAgIFBy
b21pc2U8QXJyYXlCdWZmZXI+IG1hcFdyaXRlQXN5bmMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVUJ1ZmZlckJpbmRpbmcuaWRsIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVQnVmZmVyQmluZGluZy5pZGwKaW5kZXggYWQ3Mjg2
NjgxYmEzZDFmM2ZhMTcyMWM2ZmFlODBlYmFlYjMwNGU4Yy4uYzlhMmVmZTZmNjU3Yjc0NGU5ZmJj
MWQ5YzI3MmZlYWY4OTM3YTBjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV2ViR1BVQnVmZmVyQmluZGluZy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV2ViR1BVQnVmZmVyQmluZGluZy5pZGwKQEAgLTI0LDEzICsyNCwxMyBAQAogICov
CiAvLyBodHRwczovL2dpdGh1Yi5jb20vZ3B1d2ViL2dwdXdlYi9ibG9iL21hc3Rlci9kZXNpZ24v
c2tldGNoLndlYmlkbAogCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgdTMyOwordHlwZWRlZiB1bnNp
Z25lZCBsb25nIGxvbmcgdTY0OwogCiBbCiAgICAgQ29uZGl0aW9uYWw9V0VCR1BVLAogICAgIEVu
YWJsZWRBdFJ1bnRpbWU9V2ViR1BVCiBdIGRpY3Rpb25hcnkgV2ViR1BVQnVmZmVyQmluZGluZyB7
CiAgICAgV2ViR1BVQnVmZmVyIGJ1ZmZlcjsKLSAgICB1MzIgb2Zmc2V0OwotICAgIHUzMiBzaXpl
OworICAgIHU2NCBvZmZzZXQ7CisgICAgdTY0IHNpemU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVQ29tbWFuZEJ1ZmZlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVDb21tYW5kQnVmZmVyLmNwcAppbmRleCA1ODg5
Yzg5ZjMxMTk5NmZlYmU4MDlkNzU0NzZhOTc3MjM0YmJhOWVlLi4yOGE1YWI3MmQ3OWI5MmFhMjcx
NGYxYjEzMzUwYWVhOWY3OTRmMjg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XZWJHUFVDb21tYW5kQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XZWJHUFVDb21tYW5kQnVmZmVyLmNwcApAQCAtNTEsNyArNTEsNyBAQCBSZWZQ
dHI8V2ViR1BVUmVuZGVyUGFzc0VuY29kZXI+IFdlYkdQVUNvbW1hbmRCdWZmZXI6OmJlZ2luUmVu
ZGVyUGFzcyhXZWJHUFVSZW5kZQogICAgIGlmICghZ3B1RGVzY3JpcHRvcikKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKLSAgICBpZiAoYXV0byBlbmNvZGVyID0gR1BVUmVuZGVyUGFzc0VuY29k
ZXI6OmNyZWF0ZShtX2NvbW1hbmRCdWZmZXIuZ2V0KCksIFdURk1vdmUoKmdwdURlc2NyaXB0b3Ip
KSkKKyAgICBpZiAoYXV0byBlbmNvZGVyID0gR1BVUmVuZGVyUGFzc0VuY29kZXI6OnRyeUNyZWF0
ZShtX2NvbW1hbmRCdWZmZXIuY29weVJlZigpLCBXVEZNb3ZlKCpncHVEZXNjcmlwdG9yKSkpCiAg
ICAgICAgIHJldHVybiBXZWJHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6Y3JlYXRlKCp0aGlzLCBlbmNv
ZGVyLnJlbGVhc2VOb25OdWxsKCkpOwogICAgIHJldHVybiBudWxscHRyOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVQ29tbWFuZEJ1ZmZlci5pZGwg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVDb21tYW5kQnVmZmVyLmlkbApp
bmRleCAwZmFhM2Y5NjdhY2UxZDkxNzdjNTBiNjI5MDRiYzYwM2IyYzI5OTg3Li5iOWY0MmNmZGFh
YmY1OGY5NjljMDBkNjI4NGJkOTNjOWIyMDliNGY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVDb21tYW5kQnVmZmVyLmlkbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVDb21tYW5kQnVmZmVyLmlkbApAQCAtMzcsMTAgKzM3
LDEwIEBACiAgICAgLy8gQ29tbWFuZHMgYWxsb3dlZCBvdXRzaWRlIG9mICJwYXNzZXMiCiAgICAg
ICAgIHZvaWQgY29weUJ1ZmZlclRvQnVmZmVyKAogICAgICAgICBXZWJHUFVCdWZmZXIgc3JjLAot
ICAgICAgICB1MzIgc3JjT2Zmc2V0LAorICAgICAgICB1NjQgc3JjT2Zmc2V0LAogICAgICAgICBX
ZWJHUFVCdWZmZXIgZHN0LAotICAgICAgICB1MzIgZHN0T2Zmc2V0LAotICAgICAgICB1MzIgc2l6
ZSk7CisgICAgICAgIHU2NCBkc3RPZmZzZXQsCisgICAgICAgIHU2NCBzaXplKTsKIAogICAgIHZv
aWQgY29weUJ1ZmZlclRvVGV4dHVyZSgKICAgICAgICAgV2ViR1BVQnVmZmVyQ29weVZpZXcgc291
cmNlLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVUHJv
Z3JhbW1hYmxlUGFzc0VuY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V2ViR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXIuY3BwCmluZGV4IGMzOTE1MjBiNjNkMTY4OGNj
MzM0Mzc0ZTBjOTUzYzA4NWZlYzFiNjIuLmYwNWQxMWEwM2E0MDRiMWI3NTQyN2I2YmU2ZDA4YjEy
NjBmYjlkODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQ
VVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XZWJHUFVQcm9ncmFtbWFibGVQYXNzRW5jb2Rlci5jcHAKQEAgLTQ1LDcgKzQ1LDcg
QEAgUmVmPFdlYkdQVUNvbW1hbmRCdWZmZXI+IFdlYkdQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVy
OjplbmRQYXNzKCkKICAgICByZXR1cm4gbV9jb21tYW5kQnVmZmVyLmNvcHlSZWYoKTsKIH0KIAot
dm9pZCBXZWJHUFVQcm9ncmFtbWFibGVQYXNzRW5jb2Rlcjo6c2V0QmluZEdyb3VwKHVuc2lnbmVk
IGxvbmcgaW5kZXgsIGNvbnN0IFdlYkdQVUJpbmRHcm91cCYgYmluZEdyb3VwKSBjb25zdAordm9p
ZCBXZWJHUFVQcm9ncmFtbWFibGVQYXNzRW5jb2Rlcjo6c2V0QmluZEdyb3VwKHVuc2lnbmVkIGxv
bmcgaW5kZXgsIFdlYkdQVUJpbmRHcm91cCYgYmluZEdyb3VwKSBjb25zdAogewogICAgIC8vIE1h
eGltdW0gbnVtYmVyIG9mIGJpbmQgZ3JvdXBzIHN1cHBvcnRlZCBpbiBXZWIgR1BVLgogICAgIGlm
IChpbmRleCA+PSA0KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XZWJHUFVQcm9ncmFtbWFibGVQYXNzRW5jb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV2ViR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXIuaAppbmRleCBhY2ZkMWZiZmU0
NmY5NDljZjllYzBlZTNlNzI3ZTE5OTM5YWYxMjNkLi5lNGJiMzVhMzNjZDhkNGY1YTM5YzVlZTBi
M2ZlNWE3M2NiNTdiM2NjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XZWJHUFVQcm9ncmFtbWFibGVQYXNzRW5jb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dlYkdQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyLmgKQEAgLTQxLDcgKzQx
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfldlYkdQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVy
KCkgPSBkZWZhdWx0OwogCiAgICAgUmVmPFdlYkdQVUNvbW1hbmRCdWZmZXI+IGVuZFBhc3MoKTsK
LSAgICB2b2lkIHNldEJpbmRHcm91cCh1bnNpZ25lZCBsb25nLCBjb25zdCBXZWJHUFVCaW5kR3Jv
dXAmKSBjb25zdDsKKyAgICB2b2lkIHNldEJpbmRHcm91cCh1bnNpZ25lZCBsb25nLCBXZWJHUFVC
aW5kR3JvdXAmKSBjb25zdDsKICAgICB2b2lkIHNldFBpcGVsaW5lKFJlZjxXZWJHUFVSZW5kZXJQ
aXBlbGluZT4mJik7CiAKIHByb3RlY3RlZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dlYkdQVVJlbmRlclBhc3NFbmNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dlYkdQVVJlbmRlclBhc3NFbmNvZGVyLmNwcAppbmRleCBlMTk2YjEy
ZTMzN2JmYTBmZjQwYTUzZjczOTFiMmM1YmY0YWYzOGRiLi45ODgzMjliM2U3Y2MwZjI4MWFkZTZk
YTBlM2I5OTYyY2I3Mjc3YzNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XZWJHUFVSZW5kZXJQYXNzRW5jb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV2ViR1BVUmVuZGVyUGFzc0VuY29kZXIuY3BwCkBAIC02Miw3ICs2Miw3IEBA
IHZvaWQgV2ViR1BVUmVuZGVyUGFzc0VuY29kZXI6OnNldFZlcnRleEJ1ZmZlcnModW5zaWduZWQg
bG9uZyBzdGFydFNsb3QsIFZlY3RvcjxSCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBW
ZWN0b3I8UmVmPGNvbnN0IEdQVUJ1ZmZlcj4+IGdwdUJ1ZmZlcnM7CisgICAgVmVjdG9yPFJlZjxH
UFVCdWZmZXI+PiBncHVCdWZmZXJzOwogICAgIGdwdUJ1ZmZlcnMucmVzZXJ2ZUNhcGFjaXR5KGJ1
ZmZlcnMuc2l6ZSgpKTsKIAogICAgIGZvciAoY29uc3QgYXV0byYgYnVmZmVyIDogYnVmZmVycykg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVUmVuZGVy
UGFzc0VuY29kZXIuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVUmVu
ZGVyUGFzc0VuY29kZXIuaWRsCmluZGV4IDkxYWNlYjEzNzNmNmZjYzBkOTFhZDZiYmVkMTVlM2Vm
ZWRkMmNkNTAuLmNlYWNhNzBiMzJkZmE4ZTk3YWMzNjIwNWUxNDY0YTc1YWM5ZWFiZmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVVJlbmRlclBhc3NFbmNv
ZGVyLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVSZW5kZXJQ
YXNzRW5jb2Rlci5pZGwKQEAgLTI1LDIwICsyNSwyMSBAQAogLy8gaHR0cHM6Ly9naXRodWIuY29t
L2dwdXdlYi9ncHV3ZWIvYmxvYi9tYXN0ZXIvZGVzaWduL3NrZXRjaC53ZWJpZGwKIAogdHlwZWRl
ZiB1bnNpZ25lZCBsb25nIHUzMjsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHU2NDsKIAog
WwogICAgIENvbmRpdGlvbmFsPVdFQkdQVSwKICAgICBFbmFibGVkQXRSdW50aW1lPVdlYkdQVSwK
ICAgICBKU0dlbmVyYXRlVG9KU09iamVjdAogXSBpbnRlcmZhY2UgV2ViR1BVUmVuZGVyUGFzc0Vu
Y29kZXIgOiBXZWJHUFVQcm9ncmFtbWFibGVQYXNzRW5jb2RlciB7Ci0gICAgLy8gRklYTUU6ICg8
cmRhcjovL3Byb2JsZW0vNDc3MTc4MzI+KSBMYXN0IGFyZ3VtZW50IHNob3VsZCBiZSBzZXF1ZW5j
ZTx1bnNpZ25lZCBsb25nPiwgYnV0IGJpbmRpbmdzIGdlbmVyYXRlcyBWZWN0b3I8dW5zaWduZWQg
aW50Pi4KLSAgICB2b2lkIHNldFZlcnRleEJ1ZmZlcnModTMyIHN0YXJ0U2xvdCwgc2VxdWVuY2U8
V2ViR1BVQnVmZmVyPiBidWZmZXJzLCBzZXF1ZW5jZTx1bnNpZ25lZCBsb25nIGxvbmc+IG9mZnNl
dHMpOworICAgIC8vIEZJWE1FOiAoPHJkYXI6Ly9wcm9ibGVtLzQ3NzE3ODMyPikgTGFzdCBhcmd1
bWVudCBzaG91bGQgYmUgZ2VuZXJhdGVkIHRvIFZlY3Rvcjx1bnNpZ25lZCBsb25nPiwgYnV0IGJp
bmRpbmdzIGdlbmVyYXRlcyBWZWN0b3I8dW5zaWduZWQgbG9uZyBsb25nPi4KKyAgICB2b2lkIHNl
dFZlcnRleEJ1ZmZlcnModTMyIHN0YXJ0U2xvdCwgc2VxdWVuY2U8V2ViR1BVQnVmZmVyPiBidWZm
ZXJzLCBzZXF1ZW5jZTx1NjQ+IG9mZnNldHMpOwogCiAgICAgdm9pZCBkcmF3KHUzMiB2ZXJ0ZXhD
b3VudCwgdTMyIGluc3RhbmNlQ291bnQsIHUzMiBmaXJzdFZlcnRleCwgdTMyIGZpcnN0SW5zdGFu
Y2UpOwogCiAvKiBOb3QgWWV0IEltcGxlbWVudGVkCiAgICAgdm9pZCBzZXRCbGVuZENvbG9yKGZs
b2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpOwotICAgIHZvaWQgc2V0SW5kZXhCdWZm
ZXIoV2ViR1BVQnVmZmVyIGJ1ZmZlciwgdTMyIG9mZnNldCk7CisgICAgdm9pZCBzZXRJbmRleEJ1
ZmZlcihXZWJHUFVCdWZmZXIgYnVmZmVyLCB1NjQgb2Zmc2V0KTsKIAogICAgIHZvaWQgZHJhd0lu
ZGV4ZWQodTMyIGluZGV4Q291bnQsIHUzMiBpbnN0YW5jZUNvdW50LCB1MzIgZmlyc3RJbmRleCwg
aTMyIGJhc2VWZXJ0ZXgsIHUzMiBmaXJzdEluc3RhbmNlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVVmVydGV4QXR0cmlidXRlRGVzY3JpcHRvci5p
ZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVWZXJ0ZXhBdHRyaWJ1dGVE
ZXNjcmlwdG9yLmlkbAppbmRleCA4OTZhZWEzMzY3YzE3NjhiOGViZDliNjMzZWJmZDQ4YWJlMDcz
YWJjLi4xN2VlYTU2NWU4NDU5MjU0Zjc1ZWVmYWNlODc4OGYyNTkxNWM5NGFjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVWZXJ0ZXhBdHRyaWJ1dGVEZXNj
cmlwdG9yLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVWZXJ0
ZXhBdHRyaWJ1dGVEZXNjcmlwdG9yLmlkbApAQCAtMjUsNiArMjUsNyBAQAogLy8gaHR0cHM6Ly9n
aXRodWIuY29tL2dwdXdlYi9ncHV3ZWIvYmxvYi9tYXN0ZXIvZGVzaWduL3NrZXRjaC53ZWJpZGwK
IAogdHlwZWRlZiB1bnNpZ25lZCBsb25nIHUzMjsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25n
IHU2NDsKIHR5cGVkZWYgdTMyIFdlYkdQVVZlcnRleEZvcm1hdEVudW07CiAKIFsKQEAgLTMzLDYg
KzM0LDYgQEAgdHlwZWRlZiB1MzIgV2ViR1BVVmVydGV4Rm9ybWF0RW51bTsKIF0gZGljdGlvbmFy
eSBXZWJHUFVWZXJ0ZXhBdHRyaWJ1dGVEZXNjcmlwdG9yIHsKICAgICB1MzIgc2hhZGVyTG9jYXRp
b247CiAgICAgdTMyIGlucHV0U2xvdDsKLSAgICB1MzIgb2Zmc2V0OworICAgIHU2NCBvZmZzZXQ7
CiAgICAgV2ViR1BVVmVydGV4Rm9ybWF0RW51bSBmb3JtYXQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVVmVydGV4SW5wdXREZXNjcmlwdG9yLmlk
bCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVVZlcnRleElucHV0RGVzY3Jp
cHRvci5pZGwKaW5kZXggODcyZjM1MzViMGYyNDA0NTZjOGRmNWQ5NGIzYmQ5ZjNkOWE0MWI2YS4u
MzZlYzgxNGRiNDliYTQ5ZDVhMDExMzVkNmM2NzM1ODQwNGMxM2Y3MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVVmVydGV4SW5wdXREZXNjcmlwdG9yLmlk
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVWZXJ0ZXhJbnB1dERl
c2NyaXB0b3IuaWRsCkBAIC0yNSw2ICsyNSw3IEBACiAvLyBodHRwczovL2dpdGh1Yi5jb20vZ3B1
d2ViL2dwdXdlYi9ibG9iL21hc3Rlci9kZXNpZ24vc2tldGNoLndlYmlkbAogCiB0eXBlZGVmIHVu
c2lnbmVkIGxvbmcgdTMyOwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdTY0OwogdHlwZWRl
ZiB1MzIgV2ViR1BVSW5wdXRTdGVwTW9kZUVudW07CiAKIFsKQEAgLTMyLDYgKzMzLDYgQEAgdHlw
ZWRlZiB1MzIgV2ViR1BVSW5wdXRTdGVwTW9kZUVudW07CiAgICAgRW5hYmxlZEF0UnVudGltZT1X
ZWJHUFUKIF0gZGljdGlvbmFyeSBXZWJHUFVWZXJ0ZXhJbnB1dERlc2NyaXB0b3IgewogICAgIHUz
MiBpbnB1dFNsb3Q7Ci0gICAgdTMyIHN0cmlkZTsKKyAgICB1NjQgc3RyaWRlOwogICAgIFdlYkdQ
VUlucHV0U3RlcE1vZGVFbnVtIHN0ZXBNb2RlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggMjhmNjZl
Zjc0MjhjYTljZGZjZTFmZmVjMjBjYmQ2MTM3ZjdhZjRjOS4uOTY1ZDA0MjNmNzhiMTc1OGE2M2Qy
ODhmOTJmODIwZTYyM2YwMGZiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTE4MTEsNiArMTgxMSw3IEBA
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L0dQVUJpbmRHcm91cC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVE
ZXZpY2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVUGlwZWxpbmVMYXlvdXQuY3BwCitw
bGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXIuY3BwCiBwbGF0
Zm9ybS9ncmFwaGljcy9ncHUvbGVnYWN5L0dQVUxlZ2FjeUJ1ZmZlci5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2dwdS9sZWdhY3kvR1BVTGVnYWN5Q29tbWFuZEJ1ZmZlci5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2dwdS9sZWdhY3kvR1BVTGVnYWN5Q29tbWFuZFF1ZXVlLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDk5OTA3ZGQ2
OTJkNDQ5ODY1ZTU3ZWRlNTZlMTlhZTA0MTUwNTRlNzguLjY4M2E0OTBmYzVhZjhkNTJjMDgxZDQ4
M2JlZGYzZTc4N2FlMGY2YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzOTQ2LDYgKzEzOTQ2LDcgQEAKIAkJRDAwMzI4ODQy
MUM5QTIwRDAwNjIyQUE2IC8qIEdQVVBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBHUFVQaXBlbGluZUxheW91dERlc2NyaXB0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRDAwMzI4ODYyMUM5QTRFNTAwNjIyQUE2IC8qIEdQVVBpcGVsaW5lTGF5b3V0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEdQVVBpcGVsaW5lTGF5b3V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUQwMDMyODg3MjFDOUE0RTUwMDYyMkFBNiAvKiBHUFVQaXBlbGluZUxheW91
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHUFVQaXBlbGluZUxheW91dC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUQwMDM5MTQxMjIyNDhENDAwMDk4OTk4QyAvKiBHUFVQcm9n
cmFtbWFibGVQYXNzRW5jb2Rlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHUFVQcm9ncmFtbWFi
bGVQYXNzRW5jb2Rlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwMEY1OTQw
MjE2RUNDN0EwMDBENzFEQiAvKiBET01XaW5kb3dXZWJHUFUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9N
V2luZG93V2ViR1BVLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwMEY1OTQxMjE2
RUNDN0EwMDBENzFEQiAvKiBET01XaW5kb3dXZWJHUFUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RE9NV2luZG93V2ViR1BVLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDAwRjU5
NDIyMTZFQ0M3QTAwMEQ3MURCIC8qIERPTVdpbmRvd1dlYkdQVS5pZGwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRE9NV2luZG93
V2ViR1BVLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4NTA0LDYgKzE4NTA1
LDcgQEAKIAkJCQlEMDAzMjg4NjIxQzlBNEU1MDA2MjJBQTYgLyogR1BVUGlwZWxpbmVMYXlvdXQu
aCAqLywKIAkJCQlEMDAzMjg4NDIxQzlBMjBEMDA2MjJBQTYgLyogR1BVUGlwZWxpbmVMYXlvdXRE
ZXNjcmlwdG9yLmggKi8sCiAJCQkJMzEyRkY4QzIyMUE0QzJGMzAwRUIxOTlEIC8qIEdQVVBpcGVs
aW5lU3RhZ2VEZXNjcmlwdG9yLmggKi8sCisJCQkJRDAwMzkxNDEyMjI0OEQ0MDAwOTg5OThDIC8q
IEdQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyLmNwcCAqLywKIAkJCQlEMDMyMTFDRjIxQUM5NTRF
MDA3NjNDRjIgLyogR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXIuaCAqLywKIAkJCQkzMTJGRjhD
MTIxQTRDMkYyMDBFQjE5OUQgLyogR1BVUXVldWUuaCAqLywKIAkJCQlEMDMyMTFEMDIxQUM5NTRG
MDA3NjNDRjIgLyogR1BVUmVuZGVyUGFzc0Rlc2NyaXB0b3IuaCAqLywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVCdWZmZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVCdWZmZXIuaAppbmRleCBhYzc2MTMxNTYz
ZTNhZWM0MzM2ZTY4NDI2ODlmNGUzNGI1NDViN2EwLi5kOTI5ZmQxOTc3ZTVkNjgzODlhM2FjY2Rl
YmU2ZTRmZjM3YjZlZDhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvR1BVQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L0dQVUJ1ZmZlci5oCkBAIC0zMyw4ICszMywxMiBAQAogI2luY2x1ZGUgPHd0Zi9SZWYu
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKKyNpZiBVU0UoTUVUQUwpCiBPQkpDX1BST1RP
Q09MKE1UTEJ1ZmZlcik7CitPQkpDX1BST1RPQ09MKE1UTENvbW1hbmRCdWZmZXIpOworI2VuZGlm
CiAKIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQXJyYXlCdWZmZXI7CkBAIC00NiwyMSArNTAsNDIg
QEAgY2xhc3MgR1BVRGV2aWNlOwogCiBzdHJ1Y3QgR1BVQnVmZmVyRGVzY3JpcHRvcjsKIAorI2lm
IFVTRShNRVRBTCkKIHVzaW5nIFBsYXRmb3JtQnVmZmVyID0gTVRMQnVmZmVyOwotdXNpbmcgUGxh
dGZvcm1CdWZmZXJTbWFydFB0ciA9IFJldGFpblB0cjxNVExCdWZmZXI+OworI2Vsc2UKK3VzaW5n
IFBsYXRmb3JtQnVmZmVyID0gdm9pZDsKKyNlbmRpZgordXNpbmcgUGxhdGZvcm1CdWZmZXJTbWFy
dFB0ciA9IFJldGFpblB0cjxQbGF0Zm9ybUJ1ZmZlcj47CiAKIGNsYXNzIEdQVUJ1ZmZlciA6IHB1
YmxpYyBSZWZDb3VudGVkPEdQVUJ1ZmZlcj4gewogcHVibGljOgorICAgIGVudW0gY2xhc3MgU3Rh
dGUgeworICAgICAgICBNYXBwZWQsCisgICAgICAgIFVubWFwcGVkLAorICAgICAgICBEZXN0cm95
ZWQKKyAgICB9OworCiAgICAgfkdQVUJ1ZmZlcigpOwogCi0gICAgc3RhdGljIFJlZlB0cjxHUFVC
dWZmZXI+IHRyeUNyZWF0ZShjb25zdCBHUFVEZXZpY2UmLCBHUFVCdWZmZXJEZXNjcmlwdG9yJiYp
OworICAgIHN0YXRpYyBSZWZQdHI8R1BVQnVmZmVyPiB0cnlDcmVhdGUoUmVmPEdQVURldmljZT4m
JiwgR1BVQnVmZmVyRGVzY3JpcHRvciYmKTsKIAogICAgIFBsYXRmb3JtQnVmZmVyICpwbGF0Zm9y
bUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1CdWZmZXIuZ2V0KCk7IH0KLSAgICBi
b29sIGlzVmVydGV4KCkgY29uc3QgeyByZXR1cm4gbV9pc1ZlcnRleDsgfQotICAgIGJvb2wgaXNV
bmlmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9pc1VuaWZvcm07IH0KLSAgICBib29sIGlzU3RvcmFn
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNTdG9yYWdlOyB9Ci0gICAgYm9vbCBpc1JlYWRPbmx5KCkg
Y29uc3QgeyByZXR1cm4gbV9pc1JlYWRPbmx5OyB9Ci0KKyAgICBib29sIGlzVHJhbnNmZXJEc3Qo
KSBjb25zdCB7IHJldHVybiBtX3VzYWdlICYgR1BVQnVmZmVyVXNhZ2U6OlRyYW5zZmVyRHN0OyB9
CisgICAgYm9vbCBpc1ZlcnRleCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNhZ2UgJiBHUFVCdWZmZXJV
c2FnZTo6VmVydGV4OyB9CisgICAgYm9vbCBpc1VuaWZvcm0oKSBjb25zdCB7IHJldHVybiBtX3Vz
YWdlICYgR1BVQnVmZmVyVXNhZ2U6OlVuaWZvcm07IH0KKyAgICBib29sIGlzU3RvcmFnZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdXNhZ2UgJiBHUFVCdWZmZXJVc2FnZTo6U3RvcmFnZTsgfQorICAgIGJv
b2wgaXNSZWFkT25seSgpIGNvbnN0OworICAgIGJvb2wgaXNNYXBwYWJsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdXNhZ2UgJiAoR1BVQnVmZmVyVXNhZ2U6Ok1hcFdyaXRlIHwgR1BVQnVmZmVyVXNhZ2U6
Ok1hcFJlYWQpOyB9CisgICAgU3RhdGUgc3RhdGUoKSBjb25zdDsKKworI2lmIFVTRShNRVRBTCkK
KyAgICB2b2lkIGNvbW1hbmRCdWZmZXJDb21taXR0ZWQoTVRMQ29tbWFuZEJ1ZmZlciAqKTsKKyAg
ICB2b2lkIGNvbW1hbmRCdWZmZXJDb21wbGV0ZWQoKTsKKworICAgIHZvaWQgcmV1c2VTdWJEYXRh
QnVmZmVyKFJldGFpblB0cjxNVExCdWZmZXI+JiYpOworI2VuZGlmCisKKyAgICB2b2lkIHNldFN1
YkRhdGEodW5zaWduZWQgbG9uZywgY29uc3QgSlNDOjpBcnJheUJ1ZmZlciYpOwogICAgIHVzaW5n
IE1hcHBpbmdDYWxsYmFjayA9IFdURjo6RnVuY3Rpb248dm9pZChKU0M6OkFycmF5QnVmZmVyKik+
OwogICAgIHZvaWQgcmVnaXN0ZXJNYXBwaW5nQ2FsbGJhY2soTWFwcGluZ0NhbGxiYWNrJiYsIGJv
b2wpOwogICAgIHZvaWQgdW5tYXAoKTsKQEAgLTc5LDMxICsxMDQsMzMgQEAgcHJpdmF0ZToKICAg
ICAgICAgUGVuZGluZ01hcHBpbmdDYWxsYmFjayhNYXBwaW5nQ2FsbGJhY2smJik7CiAgICAgfTsK
IAotICAgIEdQVUJ1ZmZlcihQbGF0Zm9ybUJ1ZmZlclNtYXJ0UHRyJiYsIGNvbnN0IEdQVUJ1ZmZl
ckRlc2NyaXB0b3ImKTsKKyAgICBzdGF0aWMgYm9vbCB2YWxpZGF0ZUJ1ZmZlckNyZWF0ZShjb25z
dCBHUFVEZXZpY2UmLCBjb25zdCBHUFVCdWZmZXJEZXNjcmlwdG9yJik7CisKKyAgICBHUFVCdWZm
ZXIoUGxhdGZvcm1CdWZmZXJTbWFydFB0ciYmLCBjb25zdCBHUFVCdWZmZXJEZXNjcmlwdG9yJiwg
UmVmPEdQVURldmljZT4mJik7CiAKLSAgICBzdGF0aWMgUmVmUHRyPEdQVUJ1ZmZlcj4gdHJ5Q3Jl
YXRlU2hhcmVkQnVmZmVyKGNvbnN0IEdQVURldmljZSYsIGNvbnN0IEdQVUJ1ZmZlckRlc2NyaXB0
b3ImKTsKICAgICBKU0M6OkFycmF5QnVmZmVyKiBzdGFnaW5nQnVmZmVyRm9yUmVhZCgpOwogICAg
IEpTQzo6QXJyYXlCdWZmZXIqIHN0YWdpbmdCdWZmZXJGb3JXcml0ZSgpOworICAgIHZvaWQgcnVu
TWFwcGluZ0NhbGxiYWNrKCk7CiAKLSAgICBib29sIGlzTWFwcGFibGUoKSBjb25zdCB7IHJldHVy
biBtX2lzTWFwV3JpdGUgfHwgbV9pc01hcFJlYWQ7IH0KLSAgICBib29sIGlzTWFwV3JpdGVhYmxl
KCkgY29uc3QgeyByZXR1cm4gbV9pc01hcFdyaXRlICYmICFtX3BlbmRpbmdDYWxsYmFjazsgfQot
ICAgIGJvb2wgaXNNYXBSZWFkYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNNYXBSZWFkICYmICFt
X3BlbmRpbmdDYWxsYmFjazsgfQorICAgIGJvb2wgaXNNYXBXcml0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdXNhZ2UgJiBHUFVCdWZmZXJVc2FnZTo6TWFwV3JpdGU7IH0KKyAgICBib29sIGlzTWFwUmVh
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNhZ2UgJiBHUFVCdWZmZXJVc2FnZTo6TWFwUmVhZDsgfQor
ICAgIGJvb2wgaXNNYXBXcml0ZWFibGUoKSBjb25zdCB7IHJldHVybiBpc01hcFdyaXRlKCkgJiYg
c3RhdGUoKSA9PSBTdGF0ZTo6VW5tYXBwZWQ7IH0KKyAgICBib29sIGlzTWFwUmVhZGFibGUoKSBj
b25zdCB7IHJldHVybiBpc01hcFJlYWQoKSAmJiBzdGF0ZSgpID09IFN0YXRlOjpVbm1hcHBlZDsg
fQogCiAgICAgUGxhdGZvcm1CdWZmZXJTbWFydFB0ciBtX3BsYXRmb3JtQnVmZmVyOworICAgIFJl
ZjxHUFVEZXZpY2U+IG1fZGV2aWNlOworCisjaWYgVVNFKE1FVEFMKQorICAgIFZlY3RvcjxSZXRh
aW5QdHI8TVRMQnVmZmVyPj4gbV9zdWJEYXRhQnVmZmVyczsKKyNlbmRpZgogCiAgICAgUmVmUHRy
PEpTQzo6QXJyYXlCdWZmZXI+IG1fc3RhZ2luZ0J1ZmZlcjsKLSAgICBSZWZQdHI8UGVuZGluZ01h
cHBpbmdDYWxsYmFjaz4gbV9wZW5kaW5nQ2FsbGJhY2s7CisgICAgUmVmUHRyPFBlbmRpbmdNYXBw
aW5nQ2FsbGJhY2s+IG1fbWFwcGluZ0NhbGxiYWNrOwogICAgIERlZmVycmFibGVUYXNrPFRpbWVy
PiBtX21hcHBpbmdDYWxsYmFja1Rhc2s7CiAKICAgICB1bnNpZ25lZCBsb25nIG1fYnl0ZUxlbmd0
aDsKKyAgICBHUFVCdWZmZXJVc2FnZTo6RmxhZ3MgbV91c2FnZTsKICAgICB1bnNpZ25lZCBtX251
bVNjaGVkdWxlZENvbW1hbmRCdWZmZXJzID0gMDsKLSAgICBib29sIG1faXNNYXBXcml0ZTsKLSAg
ICBib29sIG1faXNNYXBSZWFkOwotICAgIGJvb2wgbV9pc0Rlc3Ryb3llZCA9IGZhbHNlOwotICAg
IGJvb2wgbV9pc1ZlcnRleDsKLSAgICBib29sIG1faXNVbmlmb3JtOwotICAgIGJvb2wgbV9pc1N0
b3JhZ2U7Ci0gICAgYm9vbCBtX2lzUmVhZE9ubHk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BV
QnVmZmVyQmluZGluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQ
VUJ1ZmZlckJpbmRpbmcuaAppbmRleCA4MjQ4ZDhiOGM5MDFjNTNmYjU0MzJmNzAxZDI4MDU1MWM0
ODNiYTRhLi45MWUwODczM2M2OTM0ODg3NDIxY2Y5NGE3NWM2NjM2Mjk0ZDIzNDljIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVQnVmZmVyQmluZGlu
Zy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVCdWZmZXJC
aW5kaW5nLmgKQEAgLTMzLDcgKzMzLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0
IEdQVUJ1ZmZlckJpbmRpbmcgewotICAgIFJlZjxjb25zdCBHUFVCdWZmZXI+IGJ1ZmZlcjsKKyAg
ICBSZWY8R1BVQnVmZmVyPiBidWZmZXI7CiAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQ7CiAgICAg
dW5zaWduZWQgbG9uZyBzaXplOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9HUFVDb21tYW5kQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvR1BVQ29tbWFuZEJ1ZmZlci5oCmluZGV4IDgxZThlOTllMjgwNmEy
YmQ1ZDE2MWQ2NzA0MjI5YmEzNWQxMjVmYmYuLjk5YmNlZjAyNmE0MDUzNjgxNzc0NzEyMDhkMTg5
YzI0NzAyMzlhMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9HUFVDb21tYW5kQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L0dQVUNvbW1hbmRCdWZmZXIuaApAQCAtMzAsMTEgKzMwLDEzIEBACiAjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogT0JKQ19QUk9UT0NP
TChNVExDb21tYW5kQnVmZmVyKTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBHUFVC
dWZmZXI7CiBjbGFzcyBHUFVEZXZpY2U7CiAKIHVzaW5nIFBsYXRmb3JtQ29tbWFuZEJ1ZmZlciA9
IE1UTENvbW1hbmRCdWZmZXI7CkBAIC00NSwxMSArNDcsMTUgQEAgcHVibGljOgogICAgIHN0YXRp
YyBSZWZQdHI8R1BVQ29tbWFuZEJ1ZmZlcj4gY3JlYXRlKEdQVURldmljZSYpOwogCiAgICAgUGxh
dGZvcm1Db21tYW5kQnVmZmVyKiBwbGF0Zm9ybUNvbW1hbmRCdWZmZXIoKSBjb25zdCB7IHJldHVy
biBtX3BsYXRmb3JtQ29tbWFuZEJ1ZmZlci5nZXQoKTsgfQorICAgIGNvbnN0IFZlY3RvcjxSZWY8
R1BVQnVmZmVyPj4mIHVzZWRCdWZmZXJzKCkgY29uc3QgeyByZXR1cm4gbV91c2VkQnVmZmVyczsg
fQorCisgICAgdm9pZCB1c2VCdWZmZXIoUmVmPEdQVUJ1ZmZlcj4mJiBidWZmZXIpIHsgbV91c2Vk
QnVmZmVycy5hcHBlbmQoV1RGTW92ZShidWZmZXIpKTsgfQogCiBwcml2YXRlOgogICAgIEdQVUNv
bW1hbmRCdWZmZXIoUGxhdGZvcm1Db21tYW5kQnVmZmVyU21hcnRQdHImJik7CiAKICAgICBQbGF0
Zm9ybUNvbW1hbmRCdWZmZXJTbWFydFB0ciBtX3BsYXRmb3JtQ29tbWFuZEJ1ZmZlcjsKKyAgICBW
ZWN0b3I8UmVmPEdQVUJ1ZmZlcj4+IG1fdXNlZEJ1ZmZlcnM7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvR1BVRGV2aWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9H
UFVEZXZpY2UuY3BwCmluZGV4IGM2YWQyMTZlNGU3MTFhNjFhYjQ2MGJmMTcyNDM0MGY1NDkwMDA4
NGYuLjUxMmNkNTVhY2ZkODYxM2I2ZjE1ZGI1ZDE0NTdhZWJlZTEwNzE1YTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVEZXZpY2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVEZXZpY2UuY3BwCkBAIC00
NCw5ICs0NCw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmUHRyPEdQVUJ1ZmZlcj4g
R1BVRGV2aWNlOjp0cnlDcmVhdGVCdWZmZXIoR1BVQnVmZmVyRGVzY3JpcHRvciYmIGRlc2NyaXB0
b3IpIGNvbnN0CitSZWZQdHI8R1BVQnVmZmVyPiBHUFVEZXZpY2U6OnRyeUNyZWF0ZUJ1ZmZlcihH
UFVCdWZmZXJEZXNjcmlwdG9yJiYgZGVzY3JpcHRvcikKIHsKLSAgICByZXR1cm4gR1BVQnVmZmVy
Ojp0cnlDcmVhdGUoKnRoaXMsIFdURk1vdmUoZGVzY3JpcHRvcikpOworICAgIHJldHVybiBHUFVC
dWZmZXI6OnRyeUNyZWF0ZShtYWtlUmVmKCp0aGlzKSwgV1RGTW92ZShkZXNjcmlwdG9yKSk7CiB9
CiAKIFJlZlB0cjxHUFVUZXh0dXJlPiBHUFVEZXZpY2U6OnRyeUNyZWF0ZVRleHR1cmUoR1BVVGV4
dHVyZURlc2NyaXB0b3ImJiBkZXNjcmlwdG9yKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVURldmljZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVURldmljZS5oCmluZGV4IDdmY2U4ZjQ4M2U1ZTQ0OGFm
MjRlYjA2M2Q0ZmFjNWI3MGRlNjJmMTcuLmYyMDY1MTdiNjMwZTg4Yjc5YmNlNzExMTVmNDhhMTcy
N2ZkYTgwOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dw
dS9HUFVEZXZpY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
R1BVRGV2aWNlLmgKQEAgLTYwLDcgKzYwLDcgQEAgY2xhc3MgR1BVRGV2aWNlIDogcHVibGljIFJl
ZkNvdW50ZWQ8R1BVRGV2aWNlPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZlB0cjxHUFVEZXZp
Y2U+IGNyZWF0ZShPcHRpb25hbDxHUFVSZXF1ZXN0QWRhcHRlck9wdGlvbnM+JiYpOwogCi0gICAg
UmVmUHRyPEdQVUJ1ZmZlcj4gdHJ5Q3JlYXRlQnVmZmVyKEdQVUJ1ZmZlckRlc2NyaXB0b3ImJikg
Y29uc3Q7CisgICAgUmVmUHRyPEdQVUJ1ZmZlcj4gdHJ5Q3JlYXRlQnVmZmVyKEdQVUJ1ZmZlckRl
c2NyaXB0b3ImJik7CiAgICAgUmVmUHRyPEdQVVRleHR1cmU+IHRyeUNyZWF0ZVRleHR1cmUoR1BV
VGV4dHVyZURlc2NyaXB0b3ImJikgY29uc3Q7CiAKICAgICBSZWZQdHI8R1BVQmluZEdyb3VwTGF5
b3V0PiB0cnlDcmVhdGVCaW5kR3JvdXBMYXlvdXQoR1BVQmluZEdyb3VwTGF5b3V0RGVzY3JpcHRv
ciYmKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9HUFVQcm9ncmFtbWFibGVQYXNzRW5jb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjlkMjZkNTkzMTI4N2Q2MGUzOTYxNGZkZTY5MWQ2YzBlYWQ1ODUxNmQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVUHJvZ3JhbW1h
YmxlUGFzc0VuY29kZXIuY3BwCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXIuaCIKKwor
I2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJHUFVDb21tYW5kQnVmZmVyLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXI6OkdQVVByb2dy
YW1tYWJsZVBhc3NFbmNvZGVyKFJlZjxHUFVDb21tYW5kQnVmZmVyPiYmIGNvbW1hbmRCdWZmZXIp
CisgICAgOiBtX2NvbW1hbmRCdWZmZXIoV1RGTW92ZShjb21tYW5kQnVmZmVyKSkKK3sKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVQcm9ncmFtbWFi
bGVQYXNzRW5jb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQ
VVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyLmgKaW5kZXggYWM0OThlZmVhNjdmNjA4ZmU2OWI4NTY1
Y2E5YjlkYzYwZTk1YTMzMC4uODk0YzQ3NTBkMWY4NjRlMzI5Mzk3YmVjNGQ0NDAyODk2OTI0NmY0
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVBy
b2dyYW1tYWJsZVBhc3NFbmNvZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L0dQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyLmgKQEAgLTQwLDYgKzQwLDcgQEAg
T0JKQ19QUk9UT0NPTChNVExSZXNvdXJjZSk7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IEdQVUJpbmRHcm91cDsKK2NsYXNzIEdQVUNvbW1hbmRCdWZmZXI7CiBjbGFzcyBHUFVSZW5kZXJQ
aXBlbGluZTsKIAogdXNpbmcgUGxhdGZvcm1Qcm9ncmFtbWFibGVQYXNzRW5jb2RlciA9IE1UTENv
bW1hbmRFbmNvZGVyOwpAQCAtNDksMTIgKzUwLDE1IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5H
UFVQcm9ncmFtbWFibGVQYXNzRW5jb2RlcigpID0gZGVmYXVsdDsKIAogICAgIHZvaWQgZW5kUGFz
cygpOwotICAgIHZvaWQgc2V0QmluZEdyb3VwKHVuc2lnbmVkIGxvbmcsIGNvbnN0IEdQVUJpbmRH
cm91cCYpOworICAgIHZvaWQgc2V0QmluZEdyb3VwKHVuc2lnbmVkIGxvbmcsIEdQVUJpbmRHcm91
cCYpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRQaXBlbGluZShSZWY8R1BVUmVuZGVyUGlwZWxpbmU+
JiYpID0gMDsKIAogcHJvdGVjdGVkOgorICAgIEdQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyKFJl
ZjxHUFVDb21tYW5kQnVmZmVyPiYmKTsKICAgICB2aXJ0dWFsIFBsYXRmb3JtUHJvZ3JhbW1hYmxl
UGFzc0VuY29kZXIqIHBsYXRmb3JtUGFzc0VuY29kZXIoKSBjb25zdCA9IDA7CiAKKyAgICBHUFVD
b21tYW5kQnVmZmVyJiBjb21tYW5kQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9jb21tYW5kQnVm
ZmVyLmdldCgpOyB9CisKIHByaXZhdGU6CiAjaWYgVVNFKE1FVEFMKQogICAgIHZvaWQgc2V0UmVz
b3VyY2VBc0J1ZmZlck9uRW5jb2RlcihNVExBcmd1bWVudEVuY29kZXIgKiwgY29uc3QgR1BVQmlu
ZGluZ1Jlc291cmNlJiwgdW5zaWduZWQgbG9uZywgY29uc3QgY2hhciogY29uc3QpOwpAQCAtNjUs
NiArNjksNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzZXRGcmFnbWVudEJ1ZmZlcihN
VExCdWZmZXIgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykgeyB9CiAjZW5kaWYgLy8g
VVNFKE1FVEFMKQogCisgICAgUmVmPEdQVUNvbW1hbmRCdWZmZXI+IG1fY29tbWFuZEJ1ZmZlcjsK
ICAgICBib29sIG1faXNFbmNvZGluZyB7IHRydWUgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVSZW5kZXJQYXNzRW5jb2Rlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVJlbmRlclBhc3NFbmNvZGVy
LmgKaW5kZXggZmViNWMzN2I4ODU1ZTdiMDM2ZTMzODgzYmEzNWFhYzQ2YzQzODQzOC4uYjg1ZTMz
MzlmZDc3ZmFjOWQyYWFiM2Y5MzgzOThlYmE0ODEyOTAzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVJlbmRlclBhc3NFbmNvZGVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVJlbmRlclBhc3NFbmNvZGVy
LmgKQEAgLTQ5LDE1ICs0OSwxNSBAQCB1c2luZyBQbGF0Zm9ybVJlbmRlclBhc3NFbmNvZGVyU21h
cnRQdHIgPSBSZXRhaW5QdHI8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+OwogCiBjbGFzcyBHUFVS
ZW5kZXJQYXNzRW5jb2RlciA6IHB1YmxpYyBHUFVQcm9ncmFtbWFibGVQYXNzRW5jb2RlciB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZlB0cjxHUFVSZW5kZXJQYXNzRW5jb2Rlcj4gY3JlYXRlKGNv
bnN0IEdQVUNvbW1hbmRCdWZmZXImLCBHUFVSZW5kZXJQYXNzRGVzY3JpcHRvciYmKTsKKyAgICBz
dGF0aWMgUmVmUHRyPEdQVVJlbmRlclBhc3NFbmNvZGVyPiB0cnlDcmVhdGUoUmVmPEdQVUNvbW1h
bmRCdWZmZXI+JiYsIEdQVVJlbmRlclBhc3NEZXNjcmlwdG9yJiYpOwogCiAgICAgdm9pZCBzZXRQ
aXBlbGluZShSZWY8R1BVUmVuZGVyUGlwZWxpbmU+JiYpIGZpbmFsOwogCi0gICAgdm9pZCBzZXRW
ZXJ0ZXhCdWZmZXJzKHVuc2lnbmVkIGxvbmcsIFZlY3RvcjxSZWY8Y29uc3QgR1BVQnVmZmVyPj4m
JiwgVmVjdG9yPHVuc2lnbmVkIGxvbmcgbG9uZz4mJik7CisgICAgdm9pZCBzZXRWZXJ0ZXhCdWZm
ZXJzKHVuc2lnbmVkIGxvbmcsIFZlY3RvcjxSZWY8R1BVQnVmZmVyPj4mJiwgVmVjdG9yPHVuc2ln
bmVkIGxvbmcgbG9uZz4mJik7CiAgICAgdm9pZCBkcmF3KHVuc2lnbmVkIGxvbmcgdmVydGV4Q291
bnQsIHVuc2lnbmVkIGxvbmcgaW5zdGFuY2VDb3VudCwgdW5zaWduZWQgbG9uZyBmaXJzdFZlcnRl
eCwgdW5zaWduZWQgbG9uZyBmaXJzdEluc3RhbmNlKTsKIAogcHJpdmF0ZToKLSAgICBHUFVSZW5k
ZXJQYXNzRW5jb2RlcihQbGF0Zm9ybVJlbmRlclBhc3NFbmNvZGVyU21hcnRQdHImJik7CisgICAg
R1BVUmVuZGVyUGFzc0VuY29kZXIoUmVmPEdQVUNvbW1hbmRCdWZmZXI+JiYsIFBsYXRmb3JtUmVu
ZGVyUGFzc0VuY29kZXJTbWFydFB0ciYmKTsKICAgICB+R1BVUmVuZGVyUGFzc0VuY29kZXIoKSB7
IGVuZFBhc3MoKTsgfSAvLyBFbnN1cmUgdGhhdCBlbmNvZGluZyBoYXMgZW5kZWQgYmVmb3JlIHJl
bGVhc2UuCiAKICAgICBQbGF0Zm9ybVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyKiBwbGF0Zm9ybVBh
c3NFbmNvZGVyKCkgY29uc3QgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQnVmZmVyTWV0YWwubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQnVmZmVyTWV0YWwubW0KaW5kZXggMjFl
YTMyMzBiMmQ2ODlmN2Y5YTJiNmNhYjcwYWQ4ODRjMjdjNmNlYi4uMGQ4YzIwODE4MGMwYjUxNmVj
OGU5ZDU2ZDM2MjcyYWY1OTlmYTBmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUJ1ZmZlck1ldGFsLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVCdWZmZXJNZXRhbC5tbQpAQCAtMzQs
MTggKzM0LDUxIEBACiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BcnJheUJ1ZmZlci5oPgogI2lt
cG9ydCA8TWV0YWwvTWV0YWwuaD4KICNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+
CisjaW1wb3J0IDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KKyNpbXBvcnQgPHd0Zi9NYWluVGhy
ZWFkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmUHRyPEdQVUJ1ZmZlcj4gR1BVQnVm
ZmVyOjp0cnlDcmVhdGVTaGFyZWRCdWZmZXIoY29uc3QgR1BVRGV2aWNlJiBkZXZpY2UsIGNvbnN0
IEdQVUJ1ZmZlckRlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCitzdGF0aWMgY29uc3QgYXV0byByZWFk
T25seU1hc2sgPSBHUFVCdWZmZXJVc2FnZTo6SW5kZXggfCBHUFVCdWZmZXJVc2FnZTo6VmVydGV4
IHwgR1BVQnVmZmVyVXNhZ2U6OlVuaWZvcm0gfCBHUFVCdWZmZXJVc2FnZTo6VHJhbnNmZXJTcmM7
CisKKworYm9vbCBHUFVCdWZmZXI6OnZhbGlkYXRlQnVmZmVyQ3JlYXRlKGNvbnN0IEdQVURldmlj
ZSYgZGV2aWNlLCBjb25zdCBHUFVCdWZmZXJEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAg
IGlmICghZGV2aWNlLnBsYXRmb3JtRGV2aWNlKCkpIHsKKyAgICAgICAgTE9HKFdlYkdQVSwgIkdQ
VUJ1ZmZlcjo6Y3JlYXRlKCk6IEludmFsaWQgR1BVRGV2aWNlISIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgaWYgKChkZXNjcmlwdG9yLnVzYWdlICYgR1BVQnVmZmVyVXNh
Z2U6Ok1hcFdyaXRlKSAmJiAoZGVzY3JpcHRvci51c2FnZSAmIEdQVUJ1ZmZlclVzYWdlOjpNYXBS
ZWFkKSkgeworICAgICAgICBMT0coV2ViR1BVLCAiR1BVQnVmZmVyOjpjcmVhdGUoKTogQnVmZmVy
IGNhbm5vdCBoYXZlIGJvdGggTUFQX1JFQUQgYW5kIE1BUF9XUklURSB1c2FnZSEiKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICgoZGVzY3JpcHRvci51c2FnZSAmIHJl
YWRPbmx5TWFzaykgJiYgKGRlc2NyaXB0b3IudXNhZ2UgJiBHUFVCdWZmZXJVc2FnZTo6U3RvcmFn
ZSkpIHsKKyAgICAgICAgTE9HKFdlYkdQVSwgIkdQVUJ1ZmZlcjo6Y3JlYXRlKCk6IEJ1ZmZlciBj
YW5ub3QgaGF2ZSBib3RoIFNUT1JBR0UgYW5kIGEgcmVhZC1vbmx5IHVzYWdlISIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK1JlZlB0cjxH
UFVCdWZmZXI+IEdQVUJ1ZmZlcjo6dHJ5Q3JlYXRlKFJlZjxHUFVEZXZpY2U+JiYgZGV2aWNlLCBH
UFVCdWZmZXJEZXNjcmlwdG9yJiYgZGVzY3JpcHRvcikKIHsKLSAgICBBU1NFUlQoZGV2aWNlLnBs
YXRmb3JtRGV2aWNlKCkpOworICAgIGlmICghdmFsaWRhdGVCdWZmZXJDcmVhdGUoZGV2aWNlLmdl
dCgpLCBkZXNjcmlwdG9yKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBGSVhN
RTogTWV0YWwgYmVzdCBwcmFjdGljZXM6IFJlYWQtb25seSBvbmUtdGltZS11c2UgZGF0YSBsZXNz
IHRoYW4gNCBLQiBzaG91bGQgbm90IGFsbG9jYXRlIGEgTVRMQnVmZmVyIGFuZCBiZSB1c2VkIGlu
IFtNVExDb21tYW5kRW5jb2RlciBzZXQqQnl0ZXNdIGNhbGxzIGluc3RlYWQuCisKKyAgICBNVExS
ZXNvdXJjZU9wdGlvbnMgcmVzb3VyY2VPcHRpb25zID0gTVRMUmVzb3VyY2VDUFVDYWNoZU1vZGVE
ZWZhdWx0Q2FjaGU7CisKKyAgICAvLyBNYXBwYWJsZSBidWZmZXJzIHVzZSBzaGFyZWQgc3RvcmFn
ZSBhbGxvY2F0aW9uLgorICAgIHJlc291cmNlT3B0aW9ucyB8PSAoZGVzY3JpcHRvci51c2FnZSAm
IChHUFVCdWZmZXJVc2FnZTo6TWFwV3JpdGUgfCBHUFVCdWZmZXJVc2FnZTo6TWFwUmVhZCkpID8g
TVRMUmVzb3VyY2VTdG9yYWdlTW9kZVNoYXJlZCA6IE1UTFJlc291cmNlU3RvcmFnZU1vZGVQcml2
YXRlOwogCiAgICAgUmV0YWluUHRyPE1UTEJ1ZmZlcj4gbXRsQnVmZmVyOwogCiAgICAgQkVHSU5f
QkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCi0gICAgbXRsQnVmZmVyID0gYWRvcHROUyhbZGV2aWNl
LnBsYXRmb3JtRGV2aWNlKCkgbmV3QnVmZmVyV2l0aExlbmd0aDpkZXNjcmlwdG9yLnNpemUgb3B0
aW9uczogTVRMUmVzb3VyY2VDUFVDYWNoZU1vZGVEZWZhdWx0Q2FjaGVdKTsKKyAgICBtdGxCdWZm
ZXIgPSBhZG9wdE5TKFtkZXZpY2UtPnBsYXRmb3JtRGV2aWNlKCkgbmV3QnVmZmVyV2l0aExlbmd0
aDpkZXNjcmlwdG9yLnNpemUgb3B0aW9uczpyZXNvdXJjZU9wdGlvbnNdKTsKIAogICAgIEVORF9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKQEAgLTU0LDUzICs4NywxMTYgQEAgUmVmUHRyPEdQVUJ1
ZmZlcj4gR1BVQnVmZmVyOjp0cnlDcmVhdGVTaGFyZWRCdWZmZXIoY29uc3QgR1BVRGV2aWNlJiBk
ZXZpY2UsIGNvbnMKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgR1BVQnVmZmVyKFdURk1vdmUobXRsQnVmZmVyKSwgZGVzY3JpcHRvcikp
OworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEdQVUJ1ZmZlcihXVEZNb3ZlKG10bEJ1ZmZlciks
IGRlc2NyaXB0b3IsIFdURk1vdmUoZGV2aWNlKSkpOwogfQogCi1zdGF0aWMgY29uc3QgYXV0byBy
ZWFkT25seU1hc2sgPSBHUFVCdWZmZXJVc2FnZTo6SW5kZXggfCBHUFVCdWZmZXJVc2FnZTo6VmVy
dGV4IHwgR1BVQnVmZmVyVXNhZ2U6OlVuaWZvcm0gfCBHUFVCdWZmZXJVc2FnZTo6VHJhbnNmZXJT
cmM7CitHUFVCdWZmZXI6OkdQVUJ1ZmZlcihSZXRhaW5QdHI8TVRMQnVmZmVyPiYmIGJ1ZmZlciwg
Y29uc3QgR1BVQnVmZmVyRGVzY3JpcHRvciYgZGVzY3JpcHRvciwgUmVmPEdQVURldmljZT4mJiBk
ZXZpY2UpCisgICAgOiBtX3BsYXRmb3JtQnVmZmVyKFdURk1vdmUoYnVmZmVyKSkKKyAgICAsIG1f
ZGV2aWNlKFdURk1vdmUoZGV2aWNlKSkKKyAgICAsIG1fYnl0ZUxlbmd0aChkZXNjcmlwdG9yLnNp
emUpCisgICAgLCBtX3VzYWdlKHN0YXRpY19jYXN0PEdQVUJ1ZmZlclVzYWdlOjpGbGFncz4oZGVz
Y3JpcHRvci51c2FnZSkpCit7Cit9CiAKLVJlZlB0cjxHUFVCdWZmZXI+IEdQVUJ1ZmZlcjo6dHJ5
Q3JlYXRlKGNvbnN0IEdQVURldmljZSYgZGV2aWNlLCBHUFVCdWZmZXJEZXNjcmlwdG9yJiYgZGVz
Y3JpcHRvcikKK0dQVUJ1ZmZlcjo6fkdQVUJ1ZmZlcigpCiB7Ci0gICAgaWYgKCFkZXZpY2UucGxh
dGZvcm1EZXZpY2UoKSkgewotICAgICAgICBMT0coV2ViR1BVLCAiR1BVQnVmZmVyOjpjcmVhdGUo
KTogSW52YWxpZCBHUFVEZXZpY2UhIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIGRl
c3Ryb3koKTsKK30KKworYm9vbCBHUFVCdWZmZXI6OmlzUmVhZE9ubHkoKSBjb25zdAoreworICAg
IHJldHVybiBtX3VzYWdlICYgcmVhZE9ubHlNYXNrOworfQorCitHUFVCdWZmZXI6OlN0YXRlIEdQ
VUJ1ZmZlcjo6c3RhdGUoKSBjb25zdAoreworICAgIGlmICghbV9wbGF0Zm9ybUJ1ZmZlcikKKyAg
ICAgICAgcmV0dXJuIFN0YXRlOjpEZXN0cm95ZWQ7CisgICAgaWYgKG1fbWFwcGluZ0NhbGxiYWNr
KQorICAgICAgICByZXR1cm4gU3RhdGU6Ok1hcHBlZDsKKworICAgIHJldHVybiBTdGF0ZTo6VW5t
YXBwZWQ7Cit9CisKK3ZvaWQgR1BVQnVmZmVyOjpzZXRTdWJEYXRhKHVuc2lnbmVkIGxvbmcgb2Zm
c2V0LCBjb25zdCBKU0M6OkFycmF5QnVmZmVyJiBkYXRhKQoreworICAgIGlmICghaXNUcmFuc2Zl
ckRzdCgpIHx8IHN0YXRlKCkgIT0gU3RhdGU6OlVubWFwcGVkKSB7CisgICAgICAgIExPRyhXZWJH
UFUsICJHUFVCdWZmZXI6OnNldFN1YkRhdGEoKTogSW52YWxpZCBvcGVyYXRpb24hIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgYXV0byBzdWJEYXRhTGVuZ3RoID0gY2hlY2tlZFN1bTx1
bnNpZ25lZCBsb25nPihkYXRhLmJ5dGVMZW5ndGgoKSwgb2Zmc2V0KTsKKyAgICBpZiAoc3ViRGF0
YUxlbmd0aC5oYXNPdmVyZmxvd2VkKCkgfHwgc3ViRGF0YUxlbmd0aC51bnNhZmVHZXQoKSA+IG1f
Ynl0ZUxlbmd0aCkgeworICAgICAgICBMT0coV2ViR1BVLCAiR1BVQnVmZmVyOjpzZXRTdWJEYXRh
KCk6IEludmFsaWQgb2Zmc2V0IG9yIGRhdGEgc2l6ZSEiKTsKKyAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGlmICgoZGVzY3JpcHRvci51c2FnZSAmIEdQVUJ1ZmZlclVzYWdlOjpNYXBXcml0
ZSkgJiYgKGRlc2NyaXB0b3IudXNhZ2UgJiBHUFVCdWZmZXJVc2FnZTo6TWFwUmVhZCkpIHsKLSAg
ICAgICAgTE9HKFdlYkdQVSwgIkdQVUJ1ZmZlcjo6Y3JlYXRlKCk6IEJ1ZmZlciBjYW5ub3QgaGF2
ZSBib3RoIE1BUF9SRUFEIGFuZCBNQVBfV1JJVEUgdXNhZ2UhIik7Ci0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIC8vIEZJWE1FOiBBZGQgYWxpZ25tZW50IGNoZWNrcyBvbmNlIHNwZWNpZmll
ZC4KKworICAgIGlmIChtX3N1YkRhdGFCdWZmZXJzLmlzRW1wdHkoKSkgeworICAgICAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgICAgIG1fc3ViRGF0YUJ1ZmZlcnMuYXBwZW5k
KGFkb3B0TlMoW21fcGxhdGZvcm1CdWZmZXIuZ2V0KCkuZGV2aWNlIG5ld0J1ZmZlcldpdGhMZW5n
dGg6bV9ieXRlTGVuZ3RoIG9wdGlvbnM6TVRMUmVzb3VyY2VDUFVDYWNoZU1vZGVEZWZhdWx0Q2Fj
aGVdKSk7CisgICAgICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAgfQogCi0gICAg
aWYgKChkZXNjcmlwdG9yLnVzYWdlICYgcmVhZE9ubHlNYXNrKSAmJiAoZGVzY3JpcHRvci51c2Fn
ZSAmIEdQVUJ1ZmZlclVzYWdlOjpTdG9yYWdlKSkgewotICAgICAgICBMT0coV2ViR1BVLCAiR1BV
QnVmZmVyOjpjcmVhdGUoKTogQnVmZmVyIGNhbm5vdCBoYXZlIGJvdGggU1RPUkFHRSBhbmQgYSBy
ZWFkLW9ubHkgdXNhZ2UhIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIF9fYmxvY2sg
YXV0byBzdGFnaW5nTXRsQnVmZmVyID0gbV9zdWJEYXRhQnVmZmVycy50YWtlTGFzdCgpOworCisg
ICAgaWYgKCFzdGFnaW5nTXRsQnVmZmVyIHx8IHN0YWdpbmdNdGxCdWZmZXIuZ2V0KCkubGVuZ3Ro
IDwgZGF0YS5ieXRlTGVuZ3RoKCkpIHsKKyAgICAgICAgTE9HKFdlYkdQVSwgIkdQVUJ1ZmZlcjo6
c2V0U3ViRGF0YSgpOiBVbmFibGUgdG8gZ2V0IHN0YWdpbmcgYnVmZmVyIGZvciBwcm92aWRlZCBk
YXRhISIpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gTWFwcGFibGUgYnVmZmVy
cyBuZWVkIChkZWZhdWx0KSBzaGFyZWQgc3RvcmFnZSBhbGxvY2F0aW9uLgotICAgIGlmIChkZXNj
cmlwdG9yLnVzYWdlICYgKEdQVUJ1ZmZlclVzYWdlOjpNYXBXcml0ZSB8IEdQVUJ1ZmZlclVzYWdl
OjpNYXBSZWFkKSkKLSAgICAgICAgcmV0dXJuIHRyeUNyZWF0ZVNoYXJlZEJ1ZmZlcihkZXZpY2Us
IGRlc2NyaXB0b3IpOworICAgIG1lbWNweShzdGFnaW5nTXRsQnVmZmVyLmdldCgpLmNvbnRlbnRz
LCBkYXRhLmRhdGEoKSwgZGF0YS5ieXRlTGVuZ3RoKCkpOworCisgICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TOworCisgICAgYXV0byBjb21tYW5kQnVmZmVyID0gcmV0YWluUHRyKFttX2Rl
dmljZS0+Z2V0UXVldWUoKS0+cGxhdGZvcm1RdWV1ZSgpIGNvbW1hbmRCdWZmZXJdKTsKKyAgICBh
dXRvIGJsaXRFbmNvZGVyID0gcmV0YWluUHRyKFtjb21tYW5kQnVmZmVyIGJsaXRDb21tYW5kRW5j
b2Rlcl0pOworCisgICAgW2JsaXRFbmNvZGVyIGNvcHlGcm9tQnVmZmVyOnN0YWdpbmdNdGxCdWZm
ZXIuZ2V0KCkgc291cmNlT2Zmc2V0OjAgdG9CdWZmZXI6bV9wbGF0Zm9ybUJ1ZmZlci5nZXQoKSBk
ZXN0aW5hdGlvbk9mZnNldDpvZmZzZXQgc2l6ZTpzdGFnaW5nTXRsQnVmZmVyLmdldCgpLmxlbmd0
aF07CisgICAgW2JsaXRFbmNvZGVyIGVuZEVuY29kaW5nXTsKKworICAgIGlmIChpc01hcHBhYmxl
KCkpCisgICAgICAgIGNvbW1hbmRCdWZmZXJDb21taXR0ZWQoY29tbWFuZEJ1ZmZlci5nZXQoKSk7
CiAKLSAgICBMT0coV2ViR1BVLCAiR1BVQnVmZmVyOjpjcmVhdGUoKTogU3VwcG9ydCBmb3Igbm9u
LW1hcHBlZCBidWZmZXJzIG5vdCBpbXBsZW1lbnRlZCEiKTsKLSAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmUHRyKHRoaXMpOworICAgIFtjb21tYW5k
QnVmZmVyIGFkZENvbXBsZXRlZEhhbmRsZXI6XihpZDxNVExDb21tYW5kQnVmZmVyPikgeworICAg
ICAgICBwcm90ZWN0ZWRUaGlzLT5yZXVzZVN1YkRhdGFCdWZmZXIoV1RGTW92ZShzdGFnaW5nTXRs
QnVmZmVyKSk7CisgICAgfV07CisgICAgW2NvbW1hbmRCdWZmZXIgY29tbWl0XTsKKworICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLUdQVUJ1ZmZlcjo6R1BVQnVmZmVyKFJldGFp
blB0cjxNVExCdWZmZXI+JiYgYnVmZmVyLCBjb25zdCBHUFVCdWZmZXJEZXNjcmlwdG9yJiBkZXNj
cmlwdG9yKQotICAgIDogbV9wbGF0Zm9ybUJ1ZmZlcihXVEZNb3ZlKGJ1ZmZlcikpCi0gICAgLCBt
X2J5dGVMZW5ndGgoZGVzY3JpcHRvci5zaXplKQotICAgICwgbV9pc01hcFdyaXRlKGRlc2NyaXB0
b3IudXNhZ2UgJiBHUFVCdWZmZXJVc2FnZTo6TWFwV3JpdGUpCi0gICAgLCBtX2lzTWFwUmVhZChk
ZXNjcmlwdG9yLnVzYWdlICYgR1BVQnVmZmVyVXNhZ2U6Ok1hcFJlYWQpCi0gICAgLCBtX2lzVmVy
dGV4KGRlc2NyaXB0b3IudXNhZ2UgJiBHUFVCdWZmZXJVc2FnZTo6VmVydGV4KQotICAgICwgbV9p
c1VuaWZvcm0oZGVzY3JpcHRvci51c2FnZSAmIEdQVUJ1ZmZlclVzYWdlOjpVbmlmb3JtKQotICAg
ICwgbV9pc1N0b3JhZ2UoZGVzY3JpcHRvci51c2FnZSAmIEdQVUJ1ZmZlclVzYWdlOjpTdG9yYWdl
KQotICAgICwgbV9pc1JlYWRPbmx5KGRlc2NyaXB0b3IudXNhZ2UgJiByZWFkT25seU1hc2spCisj
aWYgVVNFKE1FVEFMKQordm9pZCBHUFVCdWZmZXI6OmNvbW1hbmRCdWZmZXJDb21taXR0ZWQoTVRM
Q29tbWFuZEJ1ZmZlciAqY29tbWFuZEJ1ZmZlcikKIHsKKyAgICArK21fbnVtU2NoZWR1bGVkQ29t
bWFuZEJ1ZmZlcnM7CisKKyAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmUHRyKHRoaXMp
OworICAgIFtjb21tYW5kQnVmZmVyIGFkZENvbXBsZXRlZEhhbmRsZXI6XihpZDxNVExDb21tYW5k
QnVmZmVyPikgeworICAgICAgICBwcm90ZWN0ZWRUaGlzLT5jb21tYW5kQnVmZmVyQ29tcGxldGVk
KCk7CisgICAgfV07CiB9CiAKLUdQVUJ1ZmZlcjo6fkdQVUJ1ZmZlcigpCit2b2lkIEdQVUJ1ZmZl
cjo6Y29tbWFuZEJ1ZmZlckNvbXBsZXRlZCgpCiB7Ci0gICAgdW5tYXAoKTsKKyAgICBBU1NFUlQo
bV9udW1TY2hlZHVsZWRDb21tYW5kQnVmZmVycyk7CisKKyAgICBpZiAobV9udW1TY2hlZHVsZWRD
b21tYW5kQnVmZmVycyA9PSAxICYmIHN0YXRlKCkgPT0gU3RhdGU6Ok1hcHBlZCkgeworICAgICAg
ICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyld
ICgpIHsKKyAgICAgICAgICAgIHJ1bk1hcHBpbmdDYWxsYmFjaygpOworICAgICAgICB9KTsKKyAg
ICB9CisKKyAgICAtLW1fbnVtU2NoZWR1bGVkQ29tbWFuZEJ1ZmZlcnM7CiB9CiAKK3ZvaWQgR1BV
QnVmZmVyOjpyZXVzZVN1YkRhdGFCdWZmZXIoUmV0YWluUHRyPE1UTEJ1ZmZlcj4mJiBidWZmZXIp
Cit7CisgICAgbV9zdWJEYXRhQnVmZmVycy5hcHBlbmQoV1RGTW92ZShidWZmZXIpKTsKK30KKyNl
bmRpZiAvLyBVU0UoTUVUQUwpCisKIHZvaWQgR1BVQnVmZmVyOjpyZWdpc3Rlck1hcHBpbmdDYWxs
YmFjayhNYXBwaW5nQ2FsbGJhY2smJiBjYWxsYmFjaywgYm9vbCBpc1JlYWQpCiB7CiAgICAgLy8g
UmVqZWN0IGlmIHJlcXVlc3QgaXMgaW52YWxpZC4KQEAgLTExNSwyMSArMjExLDI1IEBAIHZvaWQg
R1BVQnVmZmVyOjpyZWdpc3Rlck1hcHBpbmdDYWxsYmFjayhNYXBwaW5nQ2FsbGJhY2smJiBjYWxs
YmFjaywgYm9vbCBpc1JlYWQpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBBU1NFUlQo
IW1fcGVuZGluZ0NhbGxiYWNrICYmICFtX21hcHBpbmdDYWxsYmFja1Rhc2suaGFzUGVuZGluZ1Rh
c2soKSk7CisgICAgQVNTRVJUKCFtX21hcHBpbmdDYWxsYmFjayAmJiAhbV9tYXBwaW5nQ2FsbGJh
Y2tUYXNrLmhhc1BlbmRpbmdUYXNrKCkpOwogCiAgICAgLy8gQW4gZXhpc3RpbmcgY2FsbGJhY2sg
bWVhbnMgdGhpcyBidWZmZXIgaXMgaW4gdGhlIG1hcHBlZCBzdGF0ZS4KLSAgICBtX3BlbmRpbmdD
YWxsYmFjayA9IFBlbmRpbmdNYXBwaW5nQ2FsbGJhY2s6OmNyZWF0ZShXVEZNb3ZlKGNhbGxiYWNr
KSk7CisgICAgbV9tYXBwaW5nQ2FsbGJhY2sgPSBQZW5kaW5nTWFwcGluZ0NhbGxiYWNrOjpjcmVh
dGUoV1RGTW92ZShjYWxsYmFjaykpOwogCiAgICAgLy8gSWYgR1BVIGlzIG5vdCB1c2luZyB0aGlz
IGJ1ZmZlciwgcnVuIHRoZSBjYWxsYmFjayBBU0FQLgogICAgIGlmICghbV9udW1TY2hlZHVsZWRD
b21tYW5kQnVmZmVycykgewogICAgICAgICBtX21hcHBpbmdDYWxsYmFja1Rhc2suc2NoZWR1bGVU
YXNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldICgpIG11dGFibGUgewot
ICAgICAgICAgICAgQVNTRVJUKG1fcGVuZGluZ0NhbGxiYWNrKTsKLQotICAgICAgICAgICAgbV9w
ZW5kaW5nQ2FsbGJhY2stPmNhbGxiYWNrKG1faXNNYXBSZWFkID8gc3RhZ2luZ0J1ZmZlckZvclJl
YWQoKSA6IHN0YWdpbmdCdWZmZXJGb3JXcml0ZSgpKTsKKyAgICAgICAgICAgIHJ1bk1hcHBpbmdD
YWxsYmFjaygpOwogICAgICAgICB9KTsKICAgICB9CiB9CiAKK3ZvaWQgR1BVQnVmZmVyOjpydW5N
YXBwaW5nQ2FsbGJhY2soKQoreworICAgIGlmIChtX21hcHBpbmdDYWxsYmFjaykKKyAgICAgICAg
bV9tYXBwaW5nQ2FsbGJhY2stPmNhbGxiYWNrKGlzTWFwUmVhZCgpID8gc3RhZ2luZ0J1ZmZlckZv
clJlYWQoKSA6IHN0YWdpbmdCdWZmZXJGb3JXcml0ZSgpKTsKK30KKwogSlNDOjpBcnJheUJ1ZmZl
ciogR1BVQnVmZmVyOjpzdGFnaW5nQnVmZmVyRm9yUmVhZCgpCiB7CiAgICAgaWYgKCFtX3N0YWdp
bmdCdWZmZXIpCkBAIC0xNTMsMjggKzI1MywyNSBAQCB2b2lkIEdQVUJ1ZmZlcjo6dW5tYXAoKQog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fc3RhZ2luZ0J1ZmZlciAmJiBtX2lz
TWFwV3JpdGUpIHsKKyAgICBpZiAobV9zdGFnaW5nQnVmZmVyICYmIGlzTWFwV3JpdGUoKSkgewor
ICAgICAgICBBU1NFUlQobV9wbGF0Zm9ybUJ1ZmZlcik7CiAgICAgICAgIG1lbWNweShtX3BsYXRm
b3JtQnVmZmVyLmdldCgpLmNvbnRlbnRzLCBtX3N0YWdpbmdCdWZmZXItPmRhdGEoKSwgbV9ieXRl
TGVuZ3RoKTsKICAgICAgICAgbV9zdGFnaW5nQnVmZmVyID0gbnVsbHB0cjsKICAgICB9CiAKLSAg
ICBpZiAobV9wZW5kaW5nQ2FsbGJhY2spIHsKKyAgICBpZiAobV9tYXBwaW5nQ2FsbGJhY2spIHsK
ICAgICAgICAgbV9tYXBwaW5nQ2FsbGJhY2tUYXNrLmNhbmNlbFRhc2soKTsKLSAgICAgICAgbV9w
ZW5kaW5nQ2FsbGJhY2stPmNhbGxiYWNrKG51bGxwdHIpOwotICAgICAgICBtX3BlbmRpbmdDYWxs
YmFjayA9IG51bGxwdHI7CisgICAgICAgIG1fbWFwcGluZ0NhbGxiYWNrLT5jYWxsYmFjayhudWxs
cHRyKTsKKyAgICAgICAgbV9tYXBwaW5nQ2FsbGJhY2sgPSBudWxscHRyOwogICAgIH0KIH0KIAog
dm9pZCBHUFVCdWZmZXI6OmRlc3Ryb3koKQogewotICAgIGlmIChpc01hcHBhYmxlKCkpCisgICAg
aWYgKHN0YXRlKCkgPT0gU3RhdGU6Ok1hcHBlZCkKICAgICAgICAgdW5tYXAoKTsKIAotICAgIG1f
aXNEZXN0cm95ZWQgPSB0cnVlOwotCi0gICAgLy8gRklYTUU6IElmIEdQVSBpcyBzdGlsbCB1c2lu
ZyB0aGUgTVRMQnVmZmVyLCBpdCB3aWxsIGJlIHJlbGVhc2VkIGFmdGVyIGFsbCByZWxldmFudCBj
b21tYW5kcyBoYXZlIGV4ZWN1dGVkLgotICAgIGlmICghbV9udW1TY2hlZHVsZWRDb21tYW5kQnVm
ZmVycykKLSAgICAgICAgbV9wbGF0Zm9ybUJ1ZmZlciA9IG51bGxwdHI7CisgICAgbV9wbGF0Zm9y
bUJ1ZmZlciA9IG51bGxwdHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVQcm9ncmFt
bWFibGVQYXNzRW5jb2Rlck1ldGFsLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L2NvY29hL0dQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyTWV0YWwubW0KaW5kZXggYTMz
MWI1MzU4M2Q1YzIzNjYwZTM2Mzc3Nzc2MTU5YTkxY2VmNjdmZC4uY2ZmMjdmZmJlYTdiOThlNTAz
NGNjY2RmMmRiZDI3ZGVhNzA1MzMxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyTWV0YWwubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVByb2dy
YW1tYWJsZVBhc3NFbmNvZGVyTWV0YWwubW0KQEAgLTYxLDcgKzYxLDggQEAgdm9pZCBHUFVQcm9n
cmFtbWFibGVQYXNzRW5jb2Rlcjo6c2V0UmVzb3VyY2VBc0J1ZmZlck9uRW5jb2RlcihNVExBcmd1
bWVudEVuY29kZXIKICAgICB9CiAKICAgICBhdXRvJiBidWZmZXJCaW5kaW5nID0gV1RGOjpnZXQ8
R1BVQnVmZmVyQmluZGluZz4ocmVzb3VyY2UpOwotICAgIGF1dG8gbXRsQnVmZmVyID0gYnVmZmVy
QmluZGluZy5idWZmZXItPnBsYXRmb3JtQnVmZmVyKCk7CisgICAgYXV0byYgYnVmZmVyUmVmID0g
YnVmZmVyQmluZGluZy5idWZmZXI7CisgICAgYXV0byBtdGxCdWZmZXIgPSBidWZmZXJSZWYtPnBs
YXRmb3JtQnVmZmVyKCk7CiAKICAgICBpZiAoIW10bEJ1ZmZlcikgewogICAgICAgICBMT0coV2Vi
R1BVLCAiJXM6IEludmFsaWQgTVRMQnVmZmVyIGluIEdQVUJ1ZmZlckJpbmRpbmchIiwgZnVuY3Rp
b25OYW1lKTsKQEAgLTcxLDEyICs3MiwxNCBAQCB2b2lkIEdQVVByb2dyYW1tYWJsZVBhc3NFbmNv
ZGVyOjpzZXRSZXNvdXJjZUFzQnVmZmVyT25FbmNvZGVyKE1UTEFyZ3VtZW50RW5jb2RlcgogICAg
IEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAogICAgIFthcmd1bWVudEVuY29kZXIgc2V0
QnVmZmVyOm10bEJ1ZmZlciBvZmZzZXQ6YnVmZmVyQmluZGluZy5vZmZzZXQgYXRJbmRleDppbmRl
eF07Ci0gICAgdXNlUmVzb3VyY2UobXRsQnVmZmVyLCBidWZmZXJCaW5kaW5nLmJ1ZmZlci0+aXNS
ZWFkT25seSgpID8gTVRMUmVzb3VyY2VVc2FnZVJlYWQgOiBNVExSZXNvdXJjZVVzYWdlUmVhZCB8
IE1UTFJlc291cmNlVXNhZ2VXcml0ZSk7CisgICAgdXNlUmVzb3VyY2UobXRsQnVmZmVyLCBidWZm
ZXJSZWYtPmlzUmVhZE9ubHkoKSA/IE1UTFJlc291cmNlVXNhZ2VSZWFkIDogTVRMUmVzb3VyY2VV
c2FnZVJlYWQgfCBNVExSZXNvdXJjZVVzYWdlV3JpdGUpOwogCiAgICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKKworICAgIG1fY29tbWFuZEJ1ZmZlci0+dXNlQnVmZmVyKGJ1ZmZlclJlZi5j
b3B5UmVmKCkpOwogfQogCi12b2lkIEdQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyOjpzZXRCaW5k
R3JvdXAodW5zaWduZWQgbG9uZyBpbmRleCwgY29uc3QgR1BVQmluZEdyb3VwJiBiaW5kR3JvdXAp
Cit2b2lkIEdQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyOjpzZXRCaW5kR3JvdXAodW5zaWduZWQg
bG9uZyBpbmRleCwgR1BVQmluZEdyb3VwJiBiaW5kR3JvdXApCiB7CiAgICAgY29uc3QgY2hhciog
Y29uc3QgZnVuY3Rpb25OYW1lID0gIkdQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyOjpzZXRCaW5k
R3JvdXAoKSI7CiAjaWYgTE9HX0RJU0FCTEVECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUXVldWVNZXRhbC5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVRdWV1ZU1ldGFsLm1tCmluZGV4IGZk
ZWNkZWVhY2UyNDRjZTk2MzA1NGNjMzZkOTY3MGU1YTIwM2E4ZWUuLjkxYmJkNWE2MGU0NzJhZjk3
MDFiNzk5OWE5NmMyMjQwMjJkMmYyMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVRdWV1ZU1ldGFsLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVRdWV1ZU1ldGFsLm1tCkBAIC03MCwx
MCArNzAsMjAgQEAgR1BVUXVldWU6OkdQVVF1ZXVlKFBsYXRmb3JtUXVldWVTbWFydFB0ciYmIHF1
ZXVlKQogewogfQogCi12b2lkIEdQVVF1ZXVlOjpzdWJtaXQoVmVjdG9yPFJlZjxjb25zdCBHUFVD
b21tYW5kQnVmZmVyPj4mJiBidWZmZXJzKQordm9pZCBHUFVRdWV1ZTo6c3VibWl0KFZlY3RvcjxS
ZWY8Y29uc3QgR1BVQ29tbWFuZEJ1ZmZlcj4+JiYgY29tbWFuZEJ1ZmZlcnMpCiB7Ci0gICAgZm9y
IChhdXRvJiBidWZmZXIgOiBidWZmZXJzKQotICAgICAgICBbYnVmZmVyLT5wbGF0Zm9ybUNvbW1h
bmRCdWZmZXIoKSBjb21taXRdOworICAgIGZvciAoYXV0byYgY29tbWFuZEJ1ZmZlciA6IGNvbW1h
bmRCdWZmZXJzKSB7CisgICAgICAgIC8vIFByZXZlbnQgYW55IGJ1ZmZlciBtYXBwaW5nIGNhbGxi
YWNrcyBmcm9tIGV4ZWN1dGluZyB1bnRpbCBjb21tYW5kIGJ1ZmZlciBpcyBjb21wbGV0ZS4KKyAg
ICAgICAgZm9yIChhdXRvJiBidWZmZXIgOiBjb21tYW5kQnVmZmVyLT51c2VkQnVmZmVycygpKSB7
CisgICAgICAgICAgICBpZiAoYnVmZmVyLT5zdGF0ZSgpICE9IEdQVUJ1ZmZlcjo6U3RhdGU6OlVu
bWFwcGVkKSB7CisgICAgICAgICAgICAgICAgTE9HKFdlYkdQVSwgIkdQVVF1ZXVlOjpzdWJtaXQo
KTogSW52YWxpZCBHUFVCdWZmZXIgc2V0IG9uIGEgR1BVQ29tbWFuZEJ1ZmZlciEiKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBidWZmZXItPmNv
bW1hbmRCdWZmZXJDb21taXR0ZWQoY29tbWFuZEJ1ZmZlci0+cGxhdGZvcm1Db21tYW5kQnVmZmVy
KCkpOworICAgICAgICB9CisKKyAgICAgICAgW2NvbW1hbmRCdWZmZXItPnBsYXRmb3JtQ29tbWFu
ZEJ1ZmZlcigpIGNvbW1pdF07CisgICAgfQogfQogCiBTdHJpbmcgR1BVUXVldWU6OmxhYmVsKCkg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9j
b2NvYS9HUFVSZW5kZXJQYXNzRW5jb2Rlck1ldGFsLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBhc3NFbmNvZGVyTWV0YWwubW0KaW5kZXgg
OTJlMmFjZjUwY2UxYWUwYWZmZmU2ZGNmMzVhODZhZTZjZThhYzA4My4uZDZhNmU2NDIzNjIzNzE1
YjI0NzhmNjNmMmRkMGM1MGEyYjc4OTI1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBhc3NFbmNvZGVyTWV0YWwubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBh
c3NFbmNvZGVyTWV0YWwubW0KQEAgLTExMyw5ICsxMTMsOSBAQCBzdGF0aWMgYm9vbCBwb3B1bGF0
ZU10bERlcHRoU3RlbmNpbEF0dGFjaG1lbnQoTVRMUmVuZGVyUGFzc0RlcHRoQXR0YWNobWVudERl
c2NyaQogICAgIHJldHVybiB0cnVlOwogfQogCi1SZWZQdHI8R1BVUmVuZGVyUGFzc0VuY29kZXI+
IEdQVVJlbmRlclBhc3NFbmNvZGVyOjpjcmVhdGUoY29uc3QgR1BVQ29tbWFuZEJ1ZmZlciYgYnVm
ZmVyLCBHUFVSZW5kZXJQYXNzRGVzY3JpcHRvciYmIGRlc2NyaXB0b3IpCitSZWZQdHI8R1BVUmVu
ZGVyUGFzc0VuY29kZXI+IEdQVVJlbmRlclBhc3NFbmNvZGVyOjp0cnlDcmVhdGUoUmVmPEdQVUNv
bW1hbmRCdWZmZXI+JiYgYnVmZmVyLCBHUFVSZW5kZXJQYXNzRGVzY3JpcHRvciYmIGRlc2NyaXB0
b3IpCiB7Ci0gICAgY29uc3QgY2hhciogY29uc3QgZnVuY3Rpb25OYW1lID0gIkdQVVJlbmRlclBh
c3NFbmNvZGVyOjpjcmVhdGUoKSI7CisgICAgY29uc3QgY2hhciogY29uc3QgZnVuY3Rpb25OYW1l
ID0gIkdQVVJlbmRlclBhc3NFbmNvZGVyOjp0cnlDcmVhdGUoKSI7CiAKICAgICBSZXRhaW5QdHI8
TVRMUmVuZGVyUGFzc0Rlc2NyaXB0b3I+IG10bERlc2NyaXB0b3I7CiAKQEAgLTEzNywxMSArMTM3
LDExIEBAIFJlZlB0cjxHUFVSZW5kZXJQYXNzRW5jb2Rlcj4gR1BVUmVuZGVyUGFzc0VuY29kZXI6
OmNyZWF0ZShjb25zdCBHUFVDb21tYW5kQnVmZmVyCiAgICAgICAgICYmICFwb3B1bGF0ZU10bERl
cHRoU3RlbmNpbEF0dGFjaG1lbnQobXRsRGVzY3JpcHRvci5nZXQoKS5kZXB0aEF0dGFjaG1lbnQs
ICpkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQsIGZ1bmN0aW9uTmFtZSkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCi0gICAgUGxhdGZvcm1SZW5kZXJQYXNzRW5jb2RlclNtYXJ0
UHRyIG10bEVuY29kZXI7CisgICAgUmV0YWluUHRyPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBt
dGxFbmNvZGVyOwogCiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCi0gICAgbXRs
RW5jb2RlciA9IHJldGFpblB0cihbYnVmZmVyLnBsYXRmb3JtQ29tbWFuZEJ1ZmZlcigpIHJlbmRl
ckNvbW1hbmRFbmNvZGVyV2l0aERlc2NyaXB0b3I6bXRsRGVzY3JpcHRvci5nZXQoKV0pOworICAg
IG10bEVuY29kZXIgPSByZXRhaW5QdHIoW2J1ZmZlci0+cGxhdGZvcm1Db21tYW5kQnVmZmVyKCkg
cmVuZGVyQ29tbWFuZEVuY29kZXJXaXRoRGVzY3JpcHRvcjptdGxEZXNjcmlwdG9yLmdldCgpXSk7
CiAKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCkBAIC0xNTAsMTEgKzE1MCwxMiBA
QCBSZWZQdHI8R1BVUmVuZGVyUGFzc0VuY29kZXI+IEdQVVJlbmRlclBhc3NFbmNvZGVyOjpjcmVh
dGUoY29uc3QgR1BVQ29tbWFuZEJ1ZmZlcgogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CiAKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdQVVJlbmRlclBhc3NFbmNvZGVyKFdURk1vdmUo
bXRsRW5jb2RlcikpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdQVVJlbmRlclBhc3NFbmNv
ZGVyKFdURk1vdmUoYnVmZmVyKSwgV1RGTW92ZShtdGxFbmNvZGVyKSkpOwogfQogCi1HUFVSZW5k
ZXJQYXNzRW5jb2Rlcjo6R1BVUmVuZGVyUGFzc0VuY29kZXIoUGxhdGZvcm1SZW5kZXJQYXNzRW5j
b2RlclNtYXJ0UHRyJiYgZW5jb2RlcikKLSAgICA6IG1fcGxhdGZvcm1SZW5kZXJQYXNzRW5jb2Rl
cihXVEZNb3ZlKGVuY29kZXIpKQorR1BVUmVuZGVyUGFzc0VuY29kZXI6OkdQVVJlbmRlclBhc3NF
bmNvZGVyKFJlZjxHUFVDb21tYW5kQnVmZmVyPiYmIGNvbW1hbmRCdWZmZXIsIFJldGFpblB0cjxN
VExSZW5kZXJDb21tYW5kRW5jb2Rlcj4mJiBlbmNvZGVyKQorICAgIDogR1BVUHJvZ3JhbW1hYmxl
UGFzc0VuY29kZXIoV1RGTW92ZShjb21tYW5kQnVmZmVyKSkKKyAgICAsIG1fcGxhdGZvcm1SZW5k
ZXJQYXNzRW5jb2RlcihXVEZNb3ZlKGVuY29kZXIpKQogewogfQogCkBAIC0xNzcsMTMgKzE3OCwx
NCBAQCB2b2lkIEdQVVJlbmRlclBhc3NFbmNvZGVyOjpzZXRQaXBlbGluZShSZWY8R1BVUmVuZGVy
UGlwZWxpbmU+JiYgcGlwZWxpbmUpCiAgICAgbV9waXBlbGluZSA9IFdURk1vdmUocGlwZWxpbmUp
OwogfQogCi12b2lkIEdQVVJlbmRlclBhc3NFbmNvZGVyOjpzZXRWZXJ0ZXhCdWZmZXJzKHVuc2ln
bmVkIGxvbmcgaW5kZXgsIFZlY3RvcjxSZWY8Y29uc3QgR1BVQnVmZmVyPj4mJiBidWZmZXJzLCBW
ZWN0b3I8dW5zaWduZWQgbG9uZyBsb25nPiYmIG9mZnNldHMpCit2b2lkIEdQVVJlbmRlclBhc3NF
bmNvZGVyOjpzZXRWZXJ0ZXhCdWZmZXJzKHVuc2lnbmVkIGxvbmcgaW5kZXgsIFZlY3RvcjxSZWY8
R1BVQnVmZmVyPj4mJiBidWZmZXJzLCBWZWN0b3I8dW5zaWduZWQgbG9uZyBsb25nPiYmIG9mZnNl
dHMpCiB7CiAgICAgQVNTRVJUKGJ1ZmZlcnMuc2l6ZSgpICYmIG9mZnNldHMuc2l6ZSgpID09IGJ1
ZmZlcnMuc2l6ZSgpKTsKIAogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAotICAg
IGF1dG8gbXRsQnVmZmVycyA9IGJ1ZmZlcnMubWFwKFtdIChjb25zdCBhdXRvJiBidWZmZXIpIHsK
KyAgICBhdXRvIG10bEJ1ZmZlcnMgPSBidWZmZXJzLm1hcChbdGhpc10gKGF1dG8mIGJ1ZmZlcikg
eworICAgICAgICBjb21tYW5kQnVmZmVyKCkudXNlQnVmZmVyKGJ1ZmZlci5jb3B5UmVmKCkpOwog
ICAgICAgICByZXR1cm4gYnVmZmVyLT5wbGF0Zm9ybUJ1ZmZlcigpOwogICAgIH0pOwogCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5k
ZXggYzIzZWNiNjc1MTMxZWZjMjY3NzdmNDYwYTZkNDNlNzhiZGI1NDZhMy4uNzE3MjE5MTgxZWZk
YjRjODljMzk4N2NmMGRkZDA3N2MxNGQ0M2ZiMyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDE5
LTAyLTI3ICBKdXN0aW4gRmFuICA8anVzdGluX2ZhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dl
YiBHUFVdIEJ1ZmZlciB1cGRhdGVzIHBhcnQgMjogc2V0U3ViRGF0YSwgR1BVL0NQVSBzeW5jaHJv
bml6YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE5NTA3NworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDc4MDUyMjk+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgRGVhbiBKYWNrc29uLgorCisgICAgICAgIEFkZCB0ZXN0cyBmb3IgbWFwUmVhZEF5
c25jIGFuZCBzZXRTdWJEYXRhIGNhbGxzLiBOb2ZpdHkgdGVzdFJ1bm5lciB3aGVuIGRvbmUgb24g
c29tZSBkcmF3aW5nIHRlc3RzCisgICAgICAgIHRoYXQgbWF5IHRha2UgbW9yZSB0aW1lLgorCisg
ICAgICAgICogd2ViZ3B1L2J1ZmZlci1jb21tYW5kLWJ1ZmZlci1yYWNlcy1leHBlY3RlZC5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvYnVmZmVyLWNvbW1hbmQtYnVmZmVyLXJhY2VzLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS9idWZmZXItcmVzb3VyY2UtdHJpYW5nbGVzLmh0
bWw6IFVzZSBzZXRTdWJEYXRhLgorICAgICAgICAqIHdlYmdwdS9kZXB0aC1lbmFibGVkLXRyaWFu
Z2xlLXN0cmlwLmh0bWw6IERpdHRvLgorICAgICAgICAqIHdlYmdwdS9tYXAtcmVhZC1idWZmZXJz
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L21hcC1yZWFkLWJ1ZmZlcnMu
aHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3ZlcnRleC1idWZmZXItdHJpYW5nbGUtc3Ry
aXAuaHRtbDogVXNlIHNldFN1YkRhdGEuCisKIDIwMTktMDItMjMgIEp1c3RpbiBGYW4gIDxqdXN0
aW5fZmFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2ViR1BVXSBCdWZmZXIgdXBkYXRlcyBwYXJ0
IDE6IGFzeW5jIG1hcHBpbmcgZnVuY3Rpb25zLCB1bm1hcCwgYW5kIGRlc3Ryb3kKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmdwdS9idWZmZXItY29tbWFuZC1idWZmZXItcmFjZXMtZXhwZWN0
ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS9idWZmZXItY29tbWFuZC1idWZmZXItcmFjZXMt
ZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ODZmMTNlODEyMDM5N2E1Y2M2MzM2YzllMmE0ODVl
Nzc4YmE5OTMyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L2J1ZmZlci1j
b21tYW5kLWJ1ZmZlci1yYWNlcy1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9D
VFlQRSBodG1sPgorPG1ldGEgY2hhcnNldD0idXRmLTgiPgorPHRpdGxlPkhUTUwgUmVmZXJlbmNl
IEZpbGU8L3RpdGxlPgorPHA+UGFzcyBpZiBzcXVhcmUgY2FudmFzIGJlbG93IGlzIGNvbXBsZXRl
bHkgZ3JlZW4uPC9wPgorPGNhbnZhcyB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+
Cis8c2NyaXB0PgorY29uc3QgY2FudmFzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiY2FudmFz
Iik7Citjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7CisKK2NvbnRleHQu
ZmlsbFN0eWxlID0gJ3JnYigwLCAyNTUsIDApJzsKK2NvbnRleHQuZmlsbFJlY3QoMCwgMCwgY2Fu
dmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTsKKzwvc2NyaXB0PgpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS9idWZmZXItY29tbWFuZC1i
dWZmZXItcmFjZXMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS9idWZmZXItY29tbWFuZC1idWZm
ZXItcmFjZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYjMzNzhhZWE3ZmNhYWMxNjI5YTkwZmVmZGMwMjIy
M2ZlYTcyMTczCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L2J1ZmZlci1j
b21tYW5kLWJ1ZmZlci1yYWNlcy5odG1sCkBAIC0wLDAgKzEsMTU5IEBACis8IURPQ1RZUEUgaHRt
bD4KKzxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKzx0aXRsZT5XZWJHUFUgSGVsbG8gVHJpYW5nbGVz
PC90aXRsZT4KKzxtZXRhIG5hbWU9ImFzc2VydCIgY29udGVudD0iV2ViR1BVIGNvcnJlY3RseSBy
ZW5kZXJzIGEgZ3JlZW4gY2FudmFzLiI+Cis8bGluayByZWw9Im1hdGNoIiBocmVmPSJ2ZXJ0ZXgt
YnVmZmVyLXRyaWFuZ2xlLXN0cmlwLWV4cGVjdGVkLmh0bWwiPgorPHA+UGFzcyBpZiBzcXVhcmUg
Y2FudmFzIGJlbG93IGlzIGNvbXBsZXRlbHkgZ3JlZW4uPC9wPgorPGNhbnZhcyB3aWR0aD0iNDAw
IiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9u
cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRl
c3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworCitjb25zdCBzaGFkZXJDb2RlID0gYAorI2luY2x1
ZGUgPG1ldGFsX3N0ZGxpYj4KKyAgICAKK3VzaW5nIG5hbWVzcGFjZSBtZXRhbDsKKworc3RydWN0
IFZlcnRleEluCit7CisgICAgZmxvYXQyIHh5IFtbYXR0cmlidXRlKDApXV07CisgICAgZmxvYXQz
IHJnYiBbW2F0dHJpYnV0ZSgxKV1dOworfTsKKworc3RydWN0IFZlcnRleE91dAoreworICAgIGZs
b2F0NCBwb3NpdGlvbiBbW3Bvc2l0aW9uXV07CisgICAgZmxvYXQ0IGNvbG9yOworfTsKKwordmVy
dGV4IFZlcnRleE91dCB2ZXJ0ZXhfbWFpbihWZXJ0ZXhJbiB2ZXJ0ZXhJbiBbW3N0YWdlX2luXV0p
Cit7CisgICAgVmVydGV4T3V0IHZPdXQ7CisgICAgdk91dC5wb3NpdGlvbiA9IGZsb2F0NCh2ZXJ0
ZXhJbi54eSwgMCwgMSk7CisgICAgdk91dC5jb2xvciA9IGZsb2F0NCh2ZXJ0ZXhJbi5yZ2IsIDEp
OworCisgICAgcmV0dXJuIHZPdXQ7Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudF9tYWlu
KFZlcnRleE91dCB2IFtbc3RhZ2VfaW5dXSkKK3sKKyAgICByZXR1cm4gdi5jb2xvcjsKK30KK2AK
KworZnVuY3Rpb24gY3JlYXRlSW5wdXRTdGF0ZURlc2NyaXB0b3IoKSB7CisgICAgcmV0dXJuIHsK
KyAgICAgICAgaW5kZXhGb3JtYXQ6IFdlYkdQVUluZGV4Rm9ybWF0LlVJTlQzMiwKKyAgICAgICAg
YXR0cmlidXRlczogW3sKKyAgICAgICAgICAgIHNoYWRlckxvY2F0aW9uOiAwLAorICAgICAgICAg
ICAgaW5wdXRTbG90OiAwLAorICAgICAgICAgICAgb2Zmc2V0OiAwLAorICAgICAgICAgICAgZm9y
bWF0OiBXZWJHUFVWZXJ0ZXhGb3JtYXQuRkxPQVRfUjMyX0czMgorICAgICAgICB9LCB7CisgICAg
ICAgICAgICBzaGFkZXJMb2NhdGlvbjogMSwKKyAgICAgICAgICAgIGlucHV0U2xvdDogMSwKKyAg
ICAgICAgICAgIG9mZnNldDogMCwKKyAgICAgICAgICAgIGZvcm1hdDogV2ViR1BVVmVydGV4Rm9y
bWF0LkZMT0FUX1IzMl9HMzJfQjMyCisgICAgICAgIH1dLAorICAgICAgICBpbnB1dHM6IFt7Cisg
ICAgICAgICAgICBpbnB1dFNsb3Q6IDAsCisgICAgICAgICAgICBzdHJpZGU6IDQgKiAyLAorICAg
ICAgICAgICAgc3RlcE1vZGU6IFdlYkdQVUlucHV0U3RlcE1vZGUuVkVSVEVYCisgICAgICAgIH0s
IHsKKyAgICAgICAgICAgIGlucHV0U2xvdDogMSwKKyAgICAgICAgICAgIHN0cmlkZTogNCAqIDMs
CisgICAgICAgICAgICBzdGVwTW9kZTogV2ViR1BVSW5wdXRTdGVwTW9kZS5JTlNUQU5DRQorICAg
ICAgICB9XQorICAgIH0KK30KKworZnVuY3Rpb24gY3JlYXRlQW5kU2V0VmVydGV4QnVmZmVyKGRl
dmljZSwgdmVydGljZXMpIHsKKyAgICBjb25zdCBmbG9hdEFycmF5ID0gbmV3IEZsb2F0MzJBcnJh
eSh2ZXJ0aWNlcyk7CisgICAgY29uc3QgYnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih7IHNp
emU6IGZsb2F0QXJyYXkuYnl0ZUxlbmd0aCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8
IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX0RTVCB9KTsKKyAgICBidWZmZXIuc2V0U3ViRGF0YSgw
LCBmbG9hdEFycmF5LmJ1ZmZlcik7CisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKworZnVuY3Rpb24g
ZHJhd0FuZFN1Ym1pdENvbW1hbmRzKGRldmljZSwgcGlwZWxpbmUsIGF0dGFjaG1lbnQsIHZlcnRl
eEJ1ZmZlciwgY29sb3JCdWZmZXIpIHsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gZGV2aWNl
LmNyZWF0ZUNvbW1hbmRCdWZmZXIoKTsKKyAgICBjb25zdCBlbmNvZGVyID0gY29tbWFuZEJ1ZmZl
ci5iZWdpblJlbmRlclBhc3MoeyBjb2xvckF0dGFjaG1lbnRzOiBbYXR0YWNobWVudF0gfSk7Cisg
ICAgZW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXIsIGNvbG9yQnVmZmVy
XSwgWzAsIDBdKTsKKyAgICBlbmNvZGVyLnNldFBpcGVsaW5lKHBpcGVsaW5lKTsKKyAgICBlbmNv
ZGVyLmRyYXcoMywgMSwgMCwgMCk7CisgICAgZW5jb2Rlci5lbmRQYXNzKCk7CisgICAgZGV2aWNl
LmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Cit9CisKK2FzeW5jIGZ1bmN0aW9u
IHRlc3QoKSB7CisgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgZ2V0QmFzaWNEZXZpY2UoKTsKKyAg
ICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJjYW52YXMiKTsKKyAgICBj
b25zdCBjb250ZXh0ID0gY3JlYXRlQmFzaWNDb250ZXh0KGNhbnZhcywgZGV2aWNlKTsKKyAgICAv
LyBGSVhNRTogUmVwbGFjZSB3aXRoIG5vbi1NU0wgc2hhZGVycy4KKyAgICBjb25zdCBzaGFkZXJN
b2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHsgY29kZTogc2hhZGVyQ29kZSB9KTsK
KyAgICBjb25zdCBpbnB1dFN0YXRlRGVzY3JpcHRvciA9IGNyZWF0ZUlucHV0U3RhdGVEZXNjcmlw
dG9yKCk7CisgICAgY29uc3QgcGlwZWxpbmUgPSBjcmVhdGVCYXNpY1BpcGVsaW5lKHNoYWRlck1v
ZHVsZSwgZGV2aWNlLCBudWxsLCBpbnB1dFN0YXRlRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB1
cHBlckxlZnRCdWZmZXIgPSBjcmVhdGVBbmRTZXRWZXJ0ZXhCdWZmZXIoZGV2aWNlLCBbLTEsIDEs
IC0xLCAtMSwgMCwgMV0pOworICAgIGNvbnN0IG1pZGRsZUJ1ZmZlciA9IGNyZWF0ZUFuZFNldFZl
cnRleEJ1ZmZlcihkZXZpY2UsIFswLCAxLCAtMSwgLTEsIDEsIC0xXSk7CisgICAgY29uc3QgdXBw
ZXJSaWdodEJ1ZmZlciA9IGNyZWF0ZUFuZFNldFZlcnRleEJ1ZmZlcihkZXZpY2UsIFswLCAxLCAx
LCAxLCAxLCAtMV0pOworCisgICAgY29uc3QgZ3JlZW4gPSBbMCwgMSwgMF07CisgICAgY29uc3Qg
Ymx1ZSA9IFswLCAwLCAxXTsKKyAgICBjb25zdCBncmVlbkFycmF5ID0gbmV3IEZsb2F0MzJBcnJh
eShncmVlbik7CisgICAgY29uc3QgYmx1ZUFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShibHVlKTsK
KworICAgIGNvbnN0IGNvbG9yQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih7IHNpemU6IGdy
ZWVuQXJyYXkuYnl0ZUxlbmd0aCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1
ZmZlclVzYWdlLlRSQU5TRkVSX0RTVCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURSB9KTsKKyAg
ICBjb2xvckJ1ZmZlci5zZXRTdWJEYXRhKDAsIGdyZWVuQXJyYXkuYnVmZmVyKTsKKworICAgIGNv
bnN0IGF0dGFjaG1lbnQgPSB7CisgICAgICAgIGF0dGFjaG1lbnQ6IGNvbnRleHQuZ2V0TmV4dFRl
eHR1cmUoKS5jcmVhdGVEZWZhdWx0VGV4dHVyZVZpZXcoKSwKKyAgICAgICAgbG9hZE9wOiAibG9h
ZCIsCisgICAgICAgIHN0b3JlT3A6ICJzdG9yZSIsCisgICAgICAgIGNsZWFyQ29sb3I6IHsgcjog
MSwgZzogMCwgYjogMCwgYTogMSB9CisgICAgfTsKKworICAgIC8qIG1hcFdyaXRlQXN5bmMgc2hv
dWxkIHJlc29sdmUgYWZ0ZXIgR1BVIGNvbW1hbmRzIGFyZSBjb21wbGV0ZSwgc28gdHJpYW5nbGUg
c2hvdWxkIGJlIGdyZWVuLiAqLworICAgIGRyYXdBbmRTdWJtaXRDb21tYW5kcyhkZXZpY2UsIHBp
cGVsaW5lLCBhdHRhY2htZW50LCB1cHBlckxlZnRCdWZmZXIsIGNvbG9yQnVmZmVyKTsKKyAgICBh
d2FpdCBjb2xvckJ1ZmZlci5tYXBXcml0ZUFzeW5jKCkudGhlbihhYiA9PiB7CisgICAgICAgIGxl
dCBhcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoYWIpOworICAgICAgICBhcnJheS5zZXQoYmx1ZSk7
CisgICAgICAgIGNvbG9yQnVmZmVyLnVubWFwKCk7CisgICAgfSk7CisKKyAgICBhd2FpdCBjb2xv
ckJ1ZmZlci5tYXBXcml0ZUFzeW5jKCkudGhlbihhYiA9PiB7CisgICAgICAgIGxldCBhcnJheSA9
IG5ldyBGbG9hdDMyQXJyYXkoYWIpOworICAgICAgICBhcnJheS5zZXQoZ3JlZW4pOworICAgIH0p
OworCisgICAgLyogY29sb3JCdWZmZXIgdGhhdCBpcyBzdGlsbCBtYXBwZWQgc2hvdWxkIGJlIG5v
dCBzdWJtaXR0ZWQgdG8gZHJhdyBhIGJsdWUgdHJpYW5nbGUuICovCisgICAgZHJhd0FuZFN1Ym1p
dENvbW1hbmRzKGRldmljZSwgcGlwZWxpbmUsIGF0dGFjaG1lbnQsIHVwcGVyTGVmdEJ1ZmZlciwg
Y29sb3JCdWZmZXIpOworCisgICAgLyogY29sb3JCdWZmZXIgZG9lcyBub3QgYWN0dWFsbHkgY29u
dGFpbiAiZ3JlZW4iIGFnYWluIHVudGlsIHRoaXMgY2FsbC4gKi8KKyAgICBjb2xvckJ1ZmZlci51
bm1hcCgpOworCisgICAgLyogc2V0U3ViRGF0YSBpbW1lZGlhdGVseSBhZnRlciBhIHN1Ym1pdCBz
aG91bGQgbm90IGFmZmVjdCB0aGUgcHJlY2VkaW5nIGRyYXcgY2FsbC4gKi8KKyAgICBkcmF3QW5k
U3VibWl0Q29tbWFuZHMoZGV2aWNlLCBwaXBlbGluZSwgYXR0YWNobWVudCwgbWlkZGxlQnVmZmVy
LCBjb2xvckJ1ZmZlcik7CisgICAgY29sb3JCdWZmZXIuc2V0U3ViRGF0YSgwLCBibHVlQXJyYXku
YnVmZmVyKTsKKworICAgIC8qIGRlc3Ryb3kgcmlnaHQgYWZ0ZXIgYSBzdWJtaXQgc2hvdWxkIG5v
dCBhZmZlY3QgdGhlIGRyYXcgY2FsbC4gKi8KKyAgICBjb2xvckJ1ZmZlci5zZXRTdWJEYXRhKDAs
IGdyZWVuQXJyYXkuYnVmZmVyKTsKKyAgICBkcmF3QW5kU3VibWl0Q29tbWFuZHMoZGV2aWNlLCBw
aXBlbGluZSwgYXR0YWNobWVudCwgdXBwZXJSaWdodEJ1ZmZlciwgY29sb3JCdWZmZXIpOworICAg
IHVwcGVyUmlnaHRCdWZmZXIuZGVzdHJveSgpOworCisgICAgLyogZHJhdyBjb21tYW5kIHdpdGgg
YSBkZXN0cm95ZWQgYnVmZmVyIHNob3VsZCBmYWlsICovCisgICAgY29sb3JCdWZmZXIuZGVzdHJv
eSgpOworICAgIGRyYXdBbmRTdWJtaXRDb21tYW5kcyhkZXZpY2UsIHBpcGVsaW5lLCBhdHRhY2ht
ZW50LCBtaWRkbGVCdWZmZXIsIGNvbG9yQnVmZmVyKTsKKworICAgIHVwcGVyTGVmdEJ1ZmZlci5k
ZXN0cm95KCk7CisgICAgbWlkZGxlQnVmZmVyLmRlc3Ryb3koKTsKKyAgICB1cHBlclJpZ2h0QnVm
ZmVyLmRlc3Ryb3koKTsKKyAgICAKKyAgICBjb250ZXh0LnByZXNlbnQoKTsKKworICAgIGlmICh3
aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CisK
K3Rlc3QoKTsKKzwvc2NyaXB0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmdwdS9idWZmZXItcmVzb3VyY2UtdHJpYW5nbGVzLmh0bWwgYi9M
YXlvdXRUZXN0cy93ZWJncHUvYnVmZmVyLXJlc291cmNlLXRyaWFuZ2xlcy5odG1sCmluZGV4IGI0
YTI4NTVhNjVkMDZmMGMxODdhY2QyNmMyYTgyZjJkOGYyY2I4YWQuLjA0NDFjMjk1OWYxNWI3ZjEw
YmY5ZDYzM2ZiOWY3ZDAyNjc4YzFiMDYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS9i
dWZmZXItcmVzb3VyY2UtdHJpYW5nbGVzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L2J1
ZmZlci1yZXNvdXJjZS10cmlhbmdsZXMuaHRtbApAQCAtNyw2ICs3LDkgQEAKIDxjYW52YXMgd2lk
dGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgogPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1m
dW5jdGlvbnMuanMiPjwvc2NyaXB0PgogPHNjcmlwdD4KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikK
KyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKwogY29uc3Qgc2hhZGVyQ29kZSA9IGAK
ICNpbmNsdWRlIDxtZXRhbF9zdGRsaWI+CiAgICAgCkBAIC03OSwyMCArODIsMTUgQEAgZnVuY3Rp
b24gY3JlYXRlVW5pZm9ybUJ1ZmZlckJpbmRHcm91cExheW91dChiaW5kTnVtLCBzdGFnZSA9IFdl
YkdQVVNoYWRlclN0YWdlQmkKIAogY29uc3QgdmVydGV4U2l6ZSA9IDQgKiA0OwogY29uc3QgdmVy
dGljZXNCdWZmZXJTaXplID0gdmVydGV4U2l6ZSAqIDM7Ci1mdW5jdGlvbiBjcmVhdGVBbmRVcGxv
YWRWZXJ0aWNlc0J1ZmZlcihkZXZpY2UsIHByb21pc2VzKSB7Ci0gICAgY29uc3QgYnVmZmVyID0g
ZGV2aWNlLmNyZWF0ZUJ1ZmZlcih7IHNpemU6dmVydGljZXNCdWZmZXJTaXplLCB1c2FnZTogR1BV
QnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFIH0pOwotCi0gICAg
Y29uc3QgcHJvbWlzZSA9IGJ1ZmZlci5tYXBXcml0ZUFzeW5jKCkudGhlbihtYXBwaW5nID0+IHsK
LSAgICAgICAgY29uc3QgbWFwcGVkQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KG1hcHBpbmcpOwot
ICAgICAgICBtYXBwZWRBcnJheS5zZXQoWwotICAgICAgICAgICAgMCwgMSwgMCwgMSwKLSAgICAg
ICAgICAgIC0xLCAtMSwgMCwgMSwKLSAgICAgICAgICAgIDEsIC0xLCAwLCAxCi0gICAgICAgIF0p
OwotICAgICAgICBidWZmZXIudW5tYXAoKTsKLSAgICB9KTsKLQotICAgIHByb21pc2VzLnB1c2go
cHJvbWlzZSk7CitmdW5jdGlvbiBjcmVhdGVBbmRVcGxvYWRWZXJ0aWNlc0J1ZmZlcihkZXZpY2Up
IHsKKyAgICBjb25zdCBidWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHsgc2l6ZTp2ZXJ0aWNl
c0J1ZmZlclNpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2Fn
ZS5UUkFOU0ZFUl9EU1QgfSk7CisgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBuZXcgRmxvYXQzMkFy
cmF5KFsKKyAgICAgICAgMCwgMSwgMCwgMSwKKyAgICAgICAgLTEsIC0xLCAwLCAxLAorICAgICAg
ICAxLCAtMSwgMCwgMQorICAgIF0pLmJ1ZmZlcjsKKworICAgIGJ1ZmZlci5zZXRTdWJEYXRhKDAs
IGFycmF5QnVmZmVyKTsKICAgICByZXR1cm4gYnVmZmVyOwogfQogCkBAIC0xMjUsMTAgKzEyMyw5
IEBAIGFzeW5jIGZ1bmN0aW9uIHRlc3QoKSB7CiAgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2
aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7IGNvZGU6IHNoYWRlckNvZGUgfSk7CiAKICAgICAvLyBD
cmVhdGUgdmVydGV4IGRhdGEgV2ViR1BVQnVmZmVycy4KLSAgICBsZXQgYnVmZmVyUHJvbWlzZXMg
PSBbXTsKLQotICAgIGNvbnN0IHZlcnRpY2VzQnVmZmVyID0gY3JlYXRlQW5kVXBsb2FkVmVydGlj
ZXNCdWZmZXIoZGV2aWNlLCBidWZmZXJQcm9taXNlcyk7CisgICAgY29uc3QgdmVydGljZXNCdWZm
ZXIgPSBjcmVhdGVBbmRVcGxvYWRWZXJ0aWNlc0J1ZmZlcihkZXZpY2UpOwogCisgICAgbGV0IGJ1
ZmZlclByb21pc2VzID0gW107CiAgICAgY29uc3QgdXBwZXJMZWZ0ID0gY3JlYXRlRmxvYXQ0QnVm
ZmVyKGRldmljZSwgLTEsIDEsIGJ1ZmZlclByb21pc2VzKTsKICAgICBjb25zdCB1cHBlck1pZGRs
ZSA9IGNyZWF0ZUZsb2F0NEJ1ZmZlcihkZXZpY2UsIDAsIDEsIGJ1ZmZlclByb21pc2VzKTsKICAg
ICBjb25zdCB1cHBlclJpZ2h0ID0gY3JlYXRlRmxvYXQ0QnVmZmVyKGRldmljZSwgMSwgMSwgYnVm
ZmVyUHJvbWlzZXMpOwpAQCAtMjEyLDYgKzIwOSw5IEBAIGFzeW5jIGZ1bmN0aW9uIHRlc3QoKSB7
CiAgICAgICAgIGNvbnN0IHF1ZXVlID0gZGV2aWNlLmdldFF1ZXVlKCk7CiAgICAgICAgIHF1ZXVl
LnN1Ym1pdChbZW5kQ29tbWFuZEJ1ZmZlcl0pOwogICAgICAgICBjb250ZXh0LnByZXNlbnQoKTsK
KworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVy
Lm5vdGlmeURvbmUoKTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
Z3B1L2RlcHRoLWVuYWJsZWQtdHJpYW5nbGUtc3RyaXAuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdw
dS9kZXB0aC1lbmFibGVkLXRyaWFuZ2xlLXN0cmlwLmh0bWwKaW5kZXggOWZkMTMzYmNhY2Y3ZGEw
NzUwMWU4YWM4NWYwYzZlZWNlZDVmYzk2Yy4uY2JjN2QyMThlZDQ5ZjAxZTI1ZDUwYWFlOTZhMWU5
MGJkNjg1N2E1NyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L2RlcHRoLWVuYWJsZWQt
dHJpYW5nbGUtc3RyaXAuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvZGVwdGgtZW5hYmxl
ZC10cmlhbmdsZS1zdHJpcC5odG1sCkBAIC03LDYgKzcsOSBAQAogPGNhbnZhcyB3aWR0aD0iNDAw
IiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+CiA8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9u
cy5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0PgoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRl
c3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworCiBjb25zdCBzaGFkZXJDb2RlID0gYAogI2luY2x1
ZGUgPG1ldGFsX3N0ZGxpYj4KICAgICAKQEAgLTQ0LDIzICs0NywxOCBAQCBmcmFnbWVudCBmbG9h
dDQgZnJhZ21lbnRfbWFpbihWZXJ0ZXhPdXQgdiBbW3N0YWdlX2luXV0pCiB9CiBgCiAKLWFzeW5j
IGZ1bmN0aW9uIGNyZWF0ZVZlcnRleEJ1ZmZlcihkZXZpY2UpIHsKK2Z1bmN0aW9uIGNyZWF0ZVZl
cnRleEJ1ZmZlcihkZXZpY2UpIHsKICAgICBjb25zdCBidWZmZXJTaXplID0gNCAqIDQgKiA0Owot
ICAgIGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoeyBzaXplOiBidWZmZXJTaXpl
LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRF
IH0pOworICAgIGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoeyBzaXplOiBidWZm
ZXJTaXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuVFJB
TlNGRVJfRFNUIH0pOworICAgIGNvbnN0IGFycmF5QnVmZmVyID0gbmV3IEZsb2F0MzJBcnJheShb
CisgICAgICAgIC8vIGZsb2F0NCB4eXp3CisgICAgICAgIC0xLCAxLCAwLCAxLAorICAgICAgICAt
MSwgLTEsIDAsIDEsCisgICAgICAgIDEsIDEsIDAsIDEsCisgICAgICAgIDEsIC0xLCAwLCAxCisg
ICAgXSkuYnVmZmVyOwogICAgIAotICAgIGxldCBmbG9hdEFycmF5ID0gbmV3IEZsb2F0MzJBcnJh
eShidWZmZXIubWFwcGluZyk7Ci0gICAgYXdhaXQgYnVmZmVyLm1hcFdyaXRlQXN5bmMoKS50aGVu
KG1hcHBpbmcgPT4gewotICAgICAgICBsZXQgbWFwcGVkQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5
KG1hcHBpbmcpOwotICAgICAgICBtYXBwZWRBcnJheS5zZXQoWwotICAgICAgICAgICAgLy8gZmxv
YXQ0IHh5encKLSAgICAgICAgICAgIC0xLCAxLCAwLCAxLAotICAgICAgICAgICAgLTEsIC0xLCAw
LCAxLAotICAgICAgICAgICAgMSwgMSwgMCwgMSwKLSAgICAgICAgICAgIDEsIC0xLCAwLCAxCi0g
ICAgICAgIF0pOwotICAgICAgICBidWZmZXIudW5tYXAoKTsKLSAgICB9KTsKLQorICAgIGJ1ZmZl
ci5zZXRTdWJEYXRhKDAsIGFycmF5QnVmZmVyKTsKICAgICByZXR1cm4gYnVmZmVyOwogfQogCkBA
IC04Nyw3ICs4NSw3IEBAIGFzeW5jIGZ1bmN0aW9uIHRlc3QoKSB7CiAgICAgY29uc3QgY29udGV4
dCA9IGNyZWF0ZUJhc2ljQ29udGV4dChjYW52YXMsIGRldmljZSk7CiAgICAgLy8gRklYTUU6IFJl
cGxhY2Ugd2l0aCBub24tTVNMIHNoYWRlcnMuCiAgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2
aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7IGNvZGU6IHNoYWRlckNvZGUgfSk7Ci0gICAgY29uc3Qg
dmVydGV4QnVmZmVyID0gIGF3YWl0IGNyZWF0ZVZlcnRleEJ1ZmZlcihkZXZpY2UpOworICAgIGNv
bnN0IHZlcnRleEJ1ZmZlciA9IGNyZWF0ZVZlcnRleEJ1ZmZlcihkZXZpY2UpOwogICAgIGNvbnN0
IGlucHV0U3RhdGVEZXNjcmlwdG9yID0gY3JlYXRlSW5wdXRTdGF0ZURlc2NyaXB0b3IoKTsKICAg
ICBjb25zdCBkZXB0aFN0YXRlRGVzY3JpcHRvciA9IGNyZWF0ZUJhc2ljRGVwdGhTdGF0ZURlc2Ny
aXB0b3IoKTsKICAgICBjb25zdCBwaXBlbGluZSA9IGNyZWF0ZUJhc2ljUGlwZWxpbmUoc2hhZGVy
TW9kdWxlLCBkZXZpY2UsIG51bGwsIGlucHV0U3RhdGVEZXNjcmlwdG9yLCBkZXB0aFN0YXRlRGVz
Y3JpcHRvcik7CkBAIC0xMTksNiArMTE3LDkgQEAgYXN5bmMgZnVuY3Rpb24gdGVzdCgpIHsKIAog
ICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOwogICAgIGNvbnRl
eHQucHJlc2VudCgpOworCisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0
UnVubmVyLm5vdGlmeURvbmUoKTsKIH0KIAogdGVzdCgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L21hcC1yZWFkLWJ1ZmZlcnMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2Vi
Z3B1L21hcC1yZWFkLWJ1ZmZlcnMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUzNzk1Nzk0ZDMy
ZjRiMTVjNWU3YzNjZTJkYzYwNDc4ZmFlYTE4OGUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvbWFwLXJlYWQtYnVmZmVycy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw2IEBA
CisKK1BBU1Mgc2V0U3ViRGF0YSwgbWFwUmVhZEFzeW5jLCB1bm1hcCwgYW5kIGRlc3Ryb3kgb24g
YSBHUFVCdWZmZXIuIAorUEFTUyBSZWplY3QgYSBtYXAgcmVhZCBvbiBhIGJ1ZmZlciBub3QgY3Jl
YXRlZCB3aXRoIE1BUF9SRUFEIHVzYWdlLiAKK1BBU1MgUmVqZWN0IGEgbWFwIHJlYWQgb24gYSBt
YXBwZWQgR1BVQnVmZmVyLiAKK1BBU1MgUmVqZWN0IGEgcGVuZGluZyBtYXAgcmVhZCBpZiBHUFVC
dWZmZXIgaXMgdW5tYXBwZWQuIAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvbWFw
LXJlYWQtYnVmZmVycy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L21hcC1yZWFkLWJ1ZmZlcnMu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4zYjAwY2YyNTUxNGU3ZjY3MTEwYTcwMTZiNWZkNTA3OTM4NzA2YjJk
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L21hcC1yZWFkLWJ1ZmZlcnMu
aHRtbApAQCAtMCwwICsxLDg2IEBACis8IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1
bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJHUFVFbmFibGVkPXRydWUgXSAtLT4KKzxtZXRhIGNoYXJz
ZXQ9dXRmLTg+Cis8dGl0bGU+VGVzdHMgZm9yIHNldFN1YkRhdGEgYW5kIG1hcFJlYWRBc3luYyBv
biBhIEdQVUJ1ZmZlci48L3RpdGxlPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2Vz
L3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVz
dGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5j
dGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2FzeW5jIGZ1bmN0aW9uIHJ1blRlc3RzKCkg
eworICAgIGNvbnN0IGRldmljZSA9ICBhd2FpdCBnZXRCYXNpY0RldmljZSgpOworCisgICAgLy8g
QmFzaWMgbWFwUmVhZEFzeW5jIGZ1bmN0aW9uYWxpdHkKKyAgICBwcm9taXNlX3Rlc3QoYXN5bmMg
KCkgPT4geworICAgICAgICBjb25zdCBidWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHsgc2l6
ZTogMTYsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9EU1QgfCBHUFVCdWZmZXJVc2Fn
ZS5NQVBfUkVBRCB9KTsKKyAgICAgICAgYXNzZXJ0X3RydWUoYnVmZmVyIGluc3RhbmNlb2YgV2Vi
R1BVQnVmZmVyLCAiY3JlYXRlQnVmZmVyIHJldHVybmVkIGEgV2ViR1BVQnVmZmVyIik7CisKKyAg
ICAgICAgbGV0IGFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShbMSwgMiwgMywgNF0pOworICAgICAg
ICBidWZmZXIuc2V0U3ViRGF0YSgwLCBhcnJheS5idWZmZXIpOworCisgICAgICAgIGxldCBhcnJh
eUJ1ZmZlciA9IGF3YWl0IGJ1ZmZlci5tYXBSZWFkQXN5bmMoKTsKKyAgICAgICAgYXNzZXJ0X3Ry
dWUoYXJyYXlCdWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciwgImZpcnN0IG1hcFJlYWRBc3lu
YyByZXNvbHZlZCBzdWNjZXNzZnVsbHkiKTsKKworICAgICAgICBjb25zdCByZWFkQXJyYXkgPSBu
ZXcgRmxvYXQzMkFycmF5KGFycmF5QnVmZmVyKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhyZWFk
QXJyYXlbM10sIDQsICJzdWNjZXNzZnVsbHkgbWFwLXJlYWQgdmFsdWUgc2V0IGJ5IHNldFN1YkRh
dGEiKTsKKworICAgICAgICBidWZmZXIudW5tYXAoKTsKKworICAgICAgICBidWZmZXIuc2V0U3Vi
RGF0YSg0ICogMywgYXJyYXkuc2xpY2UoMCwgMSkuYnVmZmVyKTsKKyAgICAgICAgbGV0IGFycmF5
QnVmZmVyMSA9IGF3YWl0IGJ1ZmZlci5tYXBSZWFkQXN5bmMoKTsKKyAgICAgICAgY29uc3QgcmVh
ZEFycmF5MSA9IG5ldyBGbG9hdDMyQXJyYXkoYXJyYXlCdWZmZXIxKTsKKyAgICAgICAgYXNzZXJ0
X2VxdWFscyhyZWFkQXJyYXlbM10sIDEsICJzdWNjZXNzZnVsbHkgc2V0U3ViRGF0YSB3aXRoIGFu
IG9mZnNldCIpOworCisgICAgICAgIGJ1ZmZlci51bm1hcCgpOworCisgICAgICAgIGNvbnN0IHBy
b21pc2UgPSBidWZmZXIubWFwUmVhZEFzeW5jKCk7IC8vIFRoaXMgd2lsbCBldmVudHVhbGx5IHJl
amVjdCBkdWUgdG8gYnVmZmVyLmRlc3Ryb3koKQorCisgICAgICAgIGJ1ZmZlci5kZXN0cm95KCk7
CisKKyAgICAgICAgYXdhaXQgcHJvbWlzZS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgIGFzc2Vy
dF91bnJlYWNoZWQoIkJ1ZmZlciB3YXMgZGVzdHJveWVkISIpOworICAgICAgICB9LCAoKSA9PiB7
fSk7CisKKyAgICB9LCAic2V0U3ViRGF0YSwgbWFwUmVhZEFzeW5jLCB1bm1hcCwgYW5kIGRlc3Ry
b3kgb24gYSBHUFVCdWZmZXIuIik7CisKKyAgICAvKiBCYXNpYyB2YWxpZGF0aW9uICovCisgICAg
Ly8gRklYTUU6IFRlc3QgaW52YWxpZCBjb21iaW5hdGlvbnMgb2YgR1BVQnVmZmVyVXNhZ2UgYWZ0
ZXIgaW1wbGVtZW50aW5nIGVycm9yIGhhbmRsaW5nLgorCisgICAgcHJvbWlzZV90ZXN0KGFzeW5j
ICgpID0+IHsKKyAgICAgICAgY29uc3QgYnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih7IHNp
emU6IDE2LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFIH0pOworCisgICAgICAgIGF3
YWl0IGJ1ZmZlci5tYXBSZWFkQXN5bmMoKS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgIGFzc2Vy
dF91bnJlYWNoZWQoIkJ1ZmZlciB3YXMgbm90IGNyZWF0ZWQgd2l0aCBNQVBfUkVBRCEiKTsKKyAg
ICAgICAgfSwgKCkgPT4ge30pOworICAgIH0sICJSZWplY3QgYSBtYXAgcmVhZCBvbiBhIGJ1ZmZl
ciBub3QgY3JlYXRlZCB3aXRoIE1BUF9SRUFEIHVzYWdlLiIpOworCisgICAgLyogRXh0ZW5kZWQg
dW5tYXAvZGVzdHJveSBhbmQgcHJvbWlzZSBzZXR0bGluZyB0ZXN0aW5nICovCisKKyAgICBwcm9t
aXNlX3Rlc3QoYXN5bmMgKCkgPT4geworICAgICAgICBjb25zdCBidWZmZXIgPSBkZXZpY2UuY3Jl
YXRlQnVmZmVyKHsgc2l6ZTogMTYsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRCB9KTsK
KworICAgICAgICBidWZmZXIubWFwUmVhZEFzeW5jKCkudGhlbigoKSA9PiB7CisgICAgICAgICAg
ICBidWZmZXIudW5tYXAoKTsKKyAgICAgICAgfSwgKCkgPT4geyAKKyAgICAgICAgICAgIGFzc2Vy
dF91bnJlYWNoZWQoKTsgCisgICAgICAgIH0pOworCisgICAgICAgIGF3YWl0IGJ1ZmZlci5tYXBS
ZWFkQXN5bmMoKS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgIGFzc2VydF91bnJlYWNoZWQoIk1h
cCBvcGVyYXRpb24gd2FzIGludmFsaWQhIik7IC8vIGJ1ZmZlciB3YXMgc3RpbGwgaW4gbWFwcGVk
IHN0YXRlIGR1cmluZyBwcm9taXNlIGNyZWF0aW9uCisgICAgICAgIH0sICgpID0+IHt9KTsKKyAg
ICB9LCAiUmVqZWN0IGEgbWFwIHJlYWQgb24gYSBtYXBwZWQgR1BVQnVmZmVyLiIpOworCisgICAg
cHJvbWlzZV90ZXN0KGFzeW5jICgpID0+IHsKKyAgICAgICAgY29uc3QgYnVmZmVyID0gZGV2aWNl
LmNyZWF0ZUJ1ZmZlcih7IHNpemU6IDE2LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUQg
fSk7CisKKyAgICAgICAgY29uc3QgcHJvbWlzZSA9IGJ1ZmZlci5tYXBSZWFkQXN5bmMoKTsKKyAg
ICAgICAgYnVmZmVyLnVubWFwKCk7CisKKyAgICAgICAgYXdhaXQgcHJvbWlzZS50aGVuKCgpID0+
IHsKKyAgICAgICAgICAgIGFzc2VydF91bnJlYWNoZWQoIkJ1ZmZlciB3YXMgdW5tYXBwZWQhIik7
IC8vIGJ1ZmZlciB3YXMgdW5tYXBwZWQsIHdoaWNoIHJlamVjdHMgcGVuZGluZyBwcm9taXNlcwor
ICAgICAgICB9LCgpID0+IHt9KTsKKyAgICB9LCAiUmVqZWN0IGEgcGVuZGluZyBtYXAgcmVhZCBp
ZiBHUFVCdWZmZXIgaXMgdW5tYXBwZWQuIik7Cit9CisKK3J1blRlc3RzKCk7Cis8L3NjcmlwdD4K
KzwvYm9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS92ZXJ0ZXgtYnVmZmVyLXRy
aWFuZ2xlLXN0cmlwLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvdmVydGV4LWJ1ZmZlci10cmlh
bmdsZS1zdHJpcC5odG1sCmluZGV4IDJjMDU3ZTMzNGE2MTRjYjhkYWZkM2FhOThjOWM0NjgzZjYw
OTNhYWIuLjQ0ZDk0NDk3MTNkMjNlYTQyZTBiNTk2NTg3NDY1ZWU0NTZmZjQ2Y2EgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL3dlYmdwdS92ZXJ0ZXgtYnVmZmVyLXRyaWFuZ2xlLXN0cmlwLmh0bWwK
KysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3ZlcnRleC1idWZmZXItdHJpYW5nbGUtc3RyaXAuaHRt
bApAQCAtNyw2ICs3LDkgQEAKIDxjYW52YXMgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2Fu
dmFzPgogPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgogPHNj
cmlwdD4KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERv
bmUoKTsKKwogY29uc3Qgc2hhZGVyQ29kZSA9IGAKICNpbmNsdWRlIDxtZXRhbF9zdGRsaWI+CiAg
ICAgCkBAIC0zOCwyMSArNDEsMjEgQEAgZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50X21haW4oVmVy
dGV4T3V0IHYgW1tzdGFnZV9pbl1dKQogfQogYAogCi1hc3luYyBmdW5jdGlvbiBjcmVhdGVWZXJ0
ZXhCdWZmZXIoZGV2aWNlKSB7CitmdW5jdGlvbiBjcmVhdGVWZXJ0ZXhCdWZmZXIoZGV2aWNlKSB7
CiAgICAgY29uc3QgYnVmZmVyU2l6ZSA9IDQgKiA1ICogNDsKLSAgICBjb25zdCBidWZmZXIgPSBk
ZXZpY2UuY3JlYXRlQnVmZmVyKHsgc2l6ZTogYnVmZmVyU2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVz
YWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURSB9KTsKLSAgICAKLSAgICBhd2Fp
dCBidWZmZXIubWFwV3JpdGVBc3luYygpLnRoZW4obWFwcGluZyA9PiB7Ci0gICAgICAgIGxldCBt
YXBwZWRBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkobWFwcGluZyk7Ci0gICAgICAgIG1hcHBlZEFy
cmF5LnNldChbCi0gICAgICAgICAgICAvLyBmbG9hdDQgeHl6dywgZmxvYXQgZwotICAgICAgICAg
ICAgLTEsIDEsIDAsIDEsIDEsCi0gICAgICAgICAgICAtMSwgLTEsIDAsIDEsIDEsCi0gICAgICAg
ICAgICAxLCAxLCAwLCAxLCAxLAotICAgICAgICAgICAgMSwgLTEsIDAsIDEsIDEKLSAgICAgICAg
XSk7Ci0gICAgICAgIGJ1ZmZlci51bm1hcCgpOwotICAgIH0pOworICAgIGNvbnN0IGJ1ZmZlciA9
IGRldmljZS5jcmVhdGVCdWZmZXIoeyBzaXplOiBidWZmZXJTaXplLCB1c2FnZTogR1BVQnVmZmVy
VXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfRFNUIH0pOworICAgIGNvbnN0
IHZlcnRleEFycmF5QnVmZmVyMCA9IG5ldyBGbG9hdDMyQXJyYXkoWworICAgICAgICAvLyBmbG9h
dDQgeHl6dywgZmxvYXQgZworICAgICAgICAtMSwgMSwgMCwgMSwgMSwKKyAgICAgICAgLTEsIC0x
LCAwLCAxLCAxCisgICAgXSkuYnVmZmVyOworICAgIGNvbnN0IHZlcnRleEFycmF5QnVmZmVyMSA9
IG5ldyBGbG9hdDMyQXJyYXkoWworICAgICAgICAxLCAxLCAwLCAxLCAxLAorICAgICAgICAxLCAt
MSwgMCwgMSwgMQorICAgIF0pLmJ1ZmZlcjsKKworICAgIGJ1ZmZlci5zZXRTdWJEYXRhKDAsIHZl
cnRleEFycmF5QnVmZmVyMCk7CisgICAgYnVmZmVyLnNldFN1YkRhdGEoNCAqIDUgKiAyLCB2ZXJ0
ZXhBcnJheUJ1ZmZlcjEpOwogCiAgICAgcmV0dXJuIGJ1ZmZlcjsKIH0KQEAgLTg1LDE2ICs4OCwx
OSBAQCBhc3luYyBmdW5jdGlvbiB0ZXN0KCkgewogICAgIGNvbnN0IGNvbnRleHQgPSBjcmVhdGVC
YXNpY0NvbnRleHQoY2FudmFzLCBkZXZpY2UpOwogICAgIC8vIEZJWE1FOiBSZXBsYWNlIHdpdGgg
bm9uLU1TTCBzaGFkZXJzLgogICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVT
aGFkZXJNb2R1bGUoeyBjb2RlOiBzaGFkZXJDb2RlIH0pOwotICAgIGNvbnN0IHZlcnRleEJ1ZmZl
ciA9IGF3YWl0IGNyZWF0ZVZlcnRleEJ1ZmZlcihkZXZpY2UpOworICAgIGNvbnN0IHZlcnRleEJ1
ZmZlciA9IGNyZWF0ZVZlcnRleEJ1ZmZlcihkZXZpY2UpOwogICAgIGNvbnN0IGlucHV0U3RhdGVE
ZXNjcmlwdG9yID0gY3JlYXRlSW5wdXRTdGF0ZURlc2NyaXB0b3IoKTsKICAgICBjb25zdCBwaXBl
bGluZSA9IGNyZWF0ZUJhc2ljUGlwZWxpbmUoc2hhZGVyTW9kdWxlLCBkZXZpY2UsIG51bGwsIGlu
cHV0U3RhdGVEZXNjcmlwdG9yKTsKICAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gZGV2aWNlLmNy
ZWF0ZUNvbW1hbmRCdWZmZXIoKTsKICAgICBjb25zdCBwYXNzRW5jb2RlciA9IGJlZ2luQmFzaWNS
ZW5kZXJQYXNzKGNvbnRleHQsIGNvbW1hbmRCdWZmZXIpOwogICAgIGNvbnN0IGVuZENvbW1hbmRC
dWZmZXIgPSBlbmNvZGVCYXNpY0NvbW1hbmRzKHBhc3NFbmNvZGVyLCBwaXBlbGluZSwgdmVydGV4
QnVmZmVyKTsKICAgICBjb25zdCBxdWV1ZSA9IGRldmljZS5nZXRRdWV1ZSgpOwotCiAgICAgcXVl
dWUuc3VibWl0KFtlbmRDb21tYW5kQnVmZmVyXSk7CisgICAgdmVydGV4QnVmZmVyLmRlc3Ryb3ko
KTsKICAgICBjb250ZXh0LnByZXNlbnQoKTsKKworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikK
KyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CiB9CiAKIHRlc3QoKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>