<?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>195519</bug_id>
          
          <creation_ts>2019-03-09 04:11:15 -0800</creation_ts>
          <short_desc>[Web GPU] BindGroups/Argument buffers: Move MTLBuffer creation from and GPUBindGroup validation to GPUDevice.createBindGroup</short_desc>
          <delta_ts>2019-03-11 20:19:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGPU</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P1</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>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>graouts</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1514369</commentid>
    <comment_count>0</comment_count>
    <who name="Justin Fan">justin_fan</who>
    <bug_when>2019-03-09 04:11:15 -0800</bug_when>
    <thetext>The MTLBuffers that serve as argument buffers in the GPUBindGroup backend shouldn&apos;t be created until the GPUBindGroup is created. Each GPUBindGroup requires its own unique MTLBuffer(s), but a GPUBindGroupLayout can be used by different GPUBindGroups or GPUPipelineLayouts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1514983</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-03-11 14:00:59 -0700</bug_when>
    <thetext>&lt;rdar://problem/48781297&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1515002</commentid>
    <comment_count>2</comment_count>
      <attachid>364287</attachid>
    <who name="Justin Fan">justin_fan</who>
    <bug_when>2019-03-11 14:28:32 -0700</bug_when>
    <thetext>Created attachment 364287
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1515040</commentid>
    <comment_count>3</comment_count>
      <attachid>364298</attachid>
    <who name="Justin Fan">justin_fan</who>
    <bug_when>2019-03-11 15:25:21 -0700</bug_when>
    <thetext>Created attachment 364298
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1515089</commentid>
    <comment_count>4</comment_count>
      <attachid>364298</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-03-11 16:44:30 -0700</bug_when>
    <thetext>Comment on attachment 364298
Patch

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

&gt; Source/WebCore/platform/graphics/gpu/GPUBindGroup.h:60
&gt; +    RetainPtr&lt;MTLBuffer&gt; m_vertexArgsBuffer;
&gt; +    RetainPtr&lt;MTLBuffer&gt; m_fragmentArgsBuffer;

Compute :(

&gt; Source/WebCore/platform/graphics/gpu/cocoa/GPUBindGroupLayoutMetal.mm:66
&gt; +static RetainPtr&lt;MTLArgumentEncoder&gt; tryCreateMtlArgumentEncoder(const GPUDevice&amp; device, ArgumentArray array)

Do you need to say it&apos;s Mtl? It&apos;s in a Metal file already.

&gt; Source/WebCore/platform/graphics/gpu/cocoa/GPUBindGroupMetal.mm:202
&gt; +        case GPUBindGroupLayoutBinding::BindingType::StorageBuffer: {
&gt; +            auto bufferResource = tryGetResourceAsBufferBinding(resourceBinding.resource, functionName);
&gt; +            if (!bufferResource)
&gt; +                return nullptr;
&gt; +            if (layoutBinding.visibility &amp; GPUShaderStageBit::Flags::Vertex) {
&gt; +                if (!trySetBufferOnEncoder(vertexEncoder, *bufferResource, resourceBinding.binding, functionName))
&gt; +                    return nullptr;
&gt; +            }
&gt; +            if (layoutBinding.visibility &amp; GPUShaderStageBit::Flags::Fragment) {
&gt; +                if (!trySetBufferOnEncoder(fragmentEncoder, *bufferResource, resourceBinding.binding, functionName))
&gt; +                    return nullptr;
&gt; +            }
&gt; +            boundBuffers.append(bufferResource-&gt;buffer.copyRef());
&gt; +            break;
&gt; +        }

Can we collapse the cases somehow? There seems to be a lot of duplicated code.

It seems wrong that we mark the buffer as bound even if visibility == NONE.

&gt; Source/WebCore/platform/graphics/gpu/cocoa/GPUProgrammablePassEncoderMetal.mm:60
&gt; +    if (bindGroup.vertexArgsBuffer())
&gt; +        setVertexBuffer(bindGroup.vertexArgsBuffer(), 0, index);
&gt; +    if (bindGroup.fragmentArgsBuffer())
&gt; +        setFragmentBuffer(bindGroup.fragmentArgsBuffer(), 0, index);

Yes! This is awesome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1515210</commentid>
    <comment_count>5</comment_count>
      <attachid>364336</attachid>
    <who name="Justin Fan">justin_fan</who>
    <bug_when>2019-03-11 19:41:00 -0700</bug_when>
    <thetext>Created attachment 364336
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1515225</commentid>
    <comment_count>6</comment_count>
      <attachid>364336</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-03-11 20:19:17 -0700</bug_when>
    <thetext>Comment on attachment 364336
Patch for landing

Clearing flags on attachment: 364336

Committed r242766: &lt;https://trac.webkit.org/changeset/242766&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1515226</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-03-11 20:19:19 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364287</attachid>
            <date>2019-03-11 14:28:32 -0700</date>
            <delta_ts>2019-03-11 15:25:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195519-20190311142831.patch</filename>
            <type>text/plain</type>
            <size>42424</size>
            <attacher name="Justin Fan">justin_fan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQyNzEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDQzYzlkNjE3YmZiMDE5
YjNkNTFkNGJlZmFkNDRlMGYwZDEzODk0Mi4uNjdkZTNmMjIxN2FkMjc1ZjczNDllMTA1ZGQxNjRm
YjE5MjZhNjAyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDE5LTAzLTExICBKdXN0
aW4gRmFuICA8anVzdGluX2ZhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYiBHUFVdIEJpbmRH
cm91cHMvQXJndW1lbnQgYnVmZmVyczogTW92ZSBNVExCdWZmZXIgY3JlYXRpb24gZnJvbSBhbmQg
R1BVQmluZEdyb3VwIHZhbGlkYXRpb24gdG8gR1BVRGV2aWNlLmNyZWF0ZUJpbmRHcm91cAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1NTE5CisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS80ODc4MTI5Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBNZXRhbCdzIEFyZ3VtZW50IEJ1ZmZlcnMgc2hvdWxkIG5v
dCBiZSB0aWVkIGRpcmVjdGx5IHRvIEdQVUJpbmRHcm91cExheW91dDsgcmF0aGVyLCBjcmVhdGUg
dGhlIE1UTEJ1ZmZlciAKKyAgICAgICAgaW4gR1BVQmluZEdyb3VwIGNyZWF0aW9uIHByb2Nlc3Mu
CisgICAgICAgIE1vdmUgR1BVQmluZEdyb3VwIHZhbGlkYXRpb24gb3V0IG9mIHNldEJpbmRHcm91
cCBhbmQgdG8gR1BVQmluZEdyb3VwIGNyZWF0aW9uIGZvciBwZXJmb3JtYW5jZS4KKworICAgICAg
ICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLiBObyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmdwdS9XZWJHUFVEZXZpY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR1BVRGV2aWNlOjpjcmVhdGVCaW5kR3JvdXAgY29uc3QpOgorICAgICAgICAqIFNvdXJjZXMu
dHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9H
UFVCaW5kR3JvdXAuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dw
dS9HUFVCaW5kR3JvdXAuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdQVUJpbmRHcm91cDo6dmVydGV4
QXJnc0J1ZmZlcik6IEEgYnVmZmVyIHRoYXQgYXJndW1lbnRzIHdpbGwgYmUgZW5jb2RlZCBpbnRv
IGR1cmluZyBzZXRCaW5kR3JvdXAuCisgICAgICAgIChXZWJDb3JlOjpHUFVCaW5kR3JvdXA6OmZy
YWdtZW50QXJnc0J1ZmZlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6R1BVQmluZEdyb3Vw
Ojpib3VuZEJ1ZmZlcnMgY29uc3QpOiBBIGxpc3Qgb2YgcmVzb3VyY2VzIHRoYXQgYXJlIGJvdW5k
IGJ5IHRoaXMgR1BVQmluZEdyb3VwLgorICAgICAgICAoV2ViQ29yZTo6R1BVQmluZEdyb3VwOjpi
b3VuZFRleHR1cmVzIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpHUFVCaW5kR3Jv
dXA6OmxheW91dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHUFVCaW5kR3Jv
dXA6OmJpbmRpbmdzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvR1BVQmluZEdyb3VwTGF5b3V0Lmg6IE5vIGxvbmdlciBjcmVhdGluZyBhbmQgcmV0YWlu
aW5nIE1UTEJ1ZmZlcnMuCisgICAgICAgIChXZWJDb3JlOjpHUFVCaW5kR3JvdXBMYXlvdXQ6OnZl
cnRleEVuY29kZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1BVQmluZEdyb3VwTGF5b3V0
OjpmcmFnbWVudEVuY29kZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1BVQmluZEdyb3Vw
TGF5b3V0Ojpjb21wdXRlRW5jb2RlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHUFVCaW5k
R3JvdXBMYXlvdXQ6OkFyZ3VtZW50RW5jb2RlckJ1ZmZlcjo6aXNWYWxpZCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHUFVCaW5kR3JvdXBMYXlvdXQ6OnZlcnRleEFyZ3VtZW50
cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHUFVCaW5kR3JvdXBMYXlvdXQ6
OmZyYWdtZW50QXJndW1lbnRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdQ
VUJpbmRHcm91cExheW91dDo6Y29tcHV0ZUFyZ3VtZW50cyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUJpbmRHcm91cExheW91
dE1ldGFsLm1tOgorICAgICAgICAoV2ViQ29yZTo6dHJ5Q3JlYXRlTXRsQXJndW1lbnRFbmNvZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdQVUJpbmRHcm91cExheW91dDo6dHJ5Q3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdQVUJpbmRHcm91cExheW91dDo6R1BVQmluZEdyb3VwTGF5b3V0KToK
KyAgICAgICAgKFdlYkNvcmU6OnRyeUNyZWF0ZUFyZ3VtZW50RW5jb2RlckFuZEJ1ZmZlcik6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUJpbmRHcm91
cE1ldGFsLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnRyeUNyZWF0ZUFyZ3VtZW50QnVm
ZmVyKTogQ3JlYXRlIGFuZCBhc3NvY2lhdGUgdGhlIE1UTEJ1ZmZlciB0aGF0IGJhY2tzIHRoZSBN
VExBcmd1bWVudEVuY29kZXIuCisgICAgICAgIChXZWJDb3JlOjp0cnlHZXRSZXNvdXJjZUFzQnVm
ZmVyQmluZGluZyk6IFZhbGlkYXRlIGEgR1BVQmluZGluZ1Jlc291cmNlLgorICAgICAgICAoV2Vi
Q29yZTo6dHJ5U2V0QnVmZmVyT25FbmNvZGVyKTogRW5jb2RlcyBhIEdQVUJ1ZmZlckJpbmRpbmcn
cyBNVExCdWZmZXIgb24gYSBNVExBcmd1bWVudEVuY29kZXIuCisgICAgICAgIChXZWJDb3JlOjp0
cnlHZXRSZXNvdXJjZUFzU2FtcGxlcik6IERpdHRvLCBmb3IgR1BVU2FtcGxlcnMuCisgICAgICAg
IChXZWJDb3JlOjp0cnlTZXRTYW1wbGVyT25FbmNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnRy
eUdldFJlc291cmNlQXNUZXh0dXJlKTogRGl0dG8sIGZvciBHUFVUZXh0dXJlcy4KKyAgICAgICAg
KFdlYkNvcmU6OnRyeVNldFRleHR1cmVPbkVuY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1BV
QmluZEdyb3VwOjp0cnlDcmVhdGUpOiBNb3N0IHNldEJpbmRHcm91cCB2YWxpZGF0aW9uIG1vdmVk
IGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpHUFVCaW5kR3JvdXA6OkdQVUJpbmRHcm91cCk6IFJl
dGFpbnMgdGhlIHJlc291cmNlIHJlZmVyZW5jZXMgbmVlZGVkIGZvciBzZXRCaW5kR3JvdXAuIAor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVQcm9ncmFtbWFibGVQYXNz
RW5jb2Rlck1ldGFsLm1tOgorICAgICAgICAoV2ViQ29yZTo6R1BVUHJvZ3JhbW1hYmxlUGFzc0Vu
Y29kZXI6OnNldEJpbmRHcm91cCk6IE1vc3QgdmFsaWRhdGlvbiBtb3ZlZCB0byBHUFVCaW5kR3Jv
dXA6OnRyeUNyZWF0ZSgpLgorICAgICAgICAoV2ViQ29yZTo6R1BVUHJvZ3JhbW1hYmxlUGFzc0Vu
Y29kZXI6OnNldFJlc291cmNlQXNCdWZmZXJPbkVuY29kZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXI6OnNldFJlc291cmNlQXNTYW1wbGVy
T25FbmNvZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdQVVByb2dyYW1tYWJsZVBh
c3NFbmNvZGVyOjpzZXRSZXNvdXJjZUFzVGV4dHVyZU9uRW5jb2Rlcik6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBhc3NFbmNvZGVyTWV0
YWwubW06CisgICAgICAgIChXZWJDb3JlOjpHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6dXNlUmVzb3Vy
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6R1BVUmVuZGVyUGFzc0VuY29kZXI6OnNldFZlcnRleEJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6c2V0RnJhZ21l
bnRCdWZmZXIpOgorCiAyMDE5LTAzLTExICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdh
bGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBOb24tR1N0cmVhbWVyLUdMIGJ1aWxkIGZp
eCBhZnRlciByMjQyNzAxLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV2ViR1BVRGV2aWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQ
VURldmljZS5jcHAKaW5kZXggMjI5NGY4NWI1MDM5OGZhYTczMDhkNjgxMDY0NzdiMjI1ZDA4MWYw
Ny4uMzE1YzE0OTdiNDY0YzQzODk1NDY4YTcwY2NiMzYyNjg0YmRhM2MwZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVRGV2aWNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVEZXZpY2UuY3BwCkBAIC0xMTUsNyArMTE1
LDcgQEAgUmVmPFdlYkdQVUJpbmRHcm91cD4gV2ViR1BVRGV2aWNlOjpjcmVhdGVCaW5kR3JvdXAo
V2ViR1BVQmluZEdyb3VwRGVzY3JpcHRvciYmIGQKICAgICBpZiAoIWdwdURlc2NyaXB0b3IpCiAg
ICAgICAgIHJldHVybiBXZWJHUFVCaW5kR3JvdXA6OmNyZWF0ZShudWxscHRyKTsKIAotICAgIGF1
dG8gYmluZEdyb3VwID0gR1BVQmluZEdyb3VwOjpjcmVhdGUoV1RGTW92ZSgqZ3B1RGVzY3JpcHRv
cikpOworICAgIGF1dG8gYmluZEdyb3VwID0gR1BVQmluZEdyb3VwOjp0cnlDcmVhdGUoKmdwdURl
c2NyaXB0b3IpOwogICAgIHJldHVybiBXZWJHUFVCaW5kR3JvdXA6OmNyZWF0ZShXVEZNb3ZlKGJp
bmRHcm91cCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IGQyZmNkZjIwYjYwM2YwYmViYjQ4MzNm
N2UxODY0NThhZjVjMWVhYTkuLjUxNzA1OWVmNTQwOGQ1YjAyNTVlNTVlODBhZDQzMmUwMzQ3MTUy
N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xODEzLDcgKzE4MTMsNiBAQCBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3Vy
Y2VHcmFwaGljLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2Uu
Y3BwCiAKLXBsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVCaW5kR3JvdXAuY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9ncHUvR1BVRGV2aWNlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVBpcGVs
aW5lTGF5b3V0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVByb2dyYW1tYWJsZVBhc3NF
bmNvZGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggNzM0ZWY3ODVmM2E4MTk3MzQw
ZmIwMjEwNDVhYzYxZmNhYjAzNGRkMi4uNzlhOTdkMWE3NGU1MzU2NWFkNWIxNDQ4MmE2MGM4ZmNm
NzUwNDAxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC0zMTcsNiArMzE3LDcgQEAgcGxh
dGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2N2L1RleHR1cmVDYWNoZUNWLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jdi9WaWRlb1Rl
eHR1cmVDb3BpZXJDVi5jcHAKIAorcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUJpbmRH
cm91cE1ldGFsLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQmluZEdyb3VwTGF5
b3V0TWV0YWwubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVCdWZmZXJNZXRhbC5t
bQogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNvbW1hbmRCdWZmZXJNZXRhbC5tbQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDU4MmMwZThjZjdkMDFkNGY3ZGFiYjU2ODA4ODE4ZmJhMTI3ZTJjOWYuLjAxYmFjYzk5OWRi
NThmYzM3MWIwOGI1YzY3MTU5MWQ2YjFkNDgwNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE0MDk0LDYgKzE0MDk0LDcgQEAK
IAkJRDA4NDAzM0QyMjFFMTg2NDAwMDA3MjA1IC8qIFdlYkdQVUJpbmRHcm91cERlc2NyaXB0b3Iu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViR1BVQmluZEdyb3VwRGVzY3JpcHRvci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwODQzQTRBMjBGRUJFM0QwMEZFODYwRSAvKiBH
cmFwaGljc0NvbnRleHQzRE1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0
M0RNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwODQzQTRDMjBGRUMx
NjUwMEZFODYwRSAvKiBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRDA4NUU2NEEyMjM2REVBRTAwQzNFMUUyIC8qIEdQVUJpbmRHcm91cE1ldGFsLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gR1BVQmluZEdyb3VwTWV0YWwubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUQwODZGRTk2MDlENTNBQUIwMDVCQzc0RCAvKiBVbmxpbmtDb21t
YW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVubGlua0NvbW1hbmQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDA4NkZFOTcwOUQ1M0FBQjAwNUJDNzREIC8q
IFVubGlua0NvbW1hbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VW5saW5rQ29tbWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwODdDRTM4
MjFBQ0E5NDIwMEJERTE3NCAvKiBHUFVDb21tYW5kQnVmZmVyTWV0YWwubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBHUFVDb21tYW5kQnVmZmVyTWV0YWwubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xNDE0MCw3ICsxNDE0MSw2IEBACiAJCUQwQkUxMDUyMjFFNkFBMEQwMEU0MkE4
OSAvKiBXZWJHUFVCaW5kR3JvdXBEZXNjcmlwdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVUJp
bmRHcm91cERlc2NyaXB0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDBCRTEw
NTMyMUU2QUEwRDAwRTQyQTg5IC8qIFdlYkdQVUJpbmRHcm91cERlc2NyaXB0b3IuaWRsICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IFdlYkdQVUJpbmRHcm91cERlc2NyaXB0b3IuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlEMEJFMTA1RTIxRTZCQUQzMDBFNDJBODkgLyogR1BVQmluZEdyb3VwLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEdQVUJpbmRHcm91cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlEMEJF
MTA1RjIxRTZCQUQzMDBFNDJBODkgLyogR1BVQmluZEdyb3VwLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEdQVUJpbmRHcm91cC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwQkUx
MDYwMjFFNkMwRUIwMEU0MkE4OSAvKiBXZWJHUFVCaW5kR3JvdXAuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2ViR1BVQmluZEdyb3VwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwQkUxMDYx
MjFFNkMwRUIwMEU0MkE4OSAvKiBXZWJHUFVCaW5kR3JvdXAuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV2ViR1BVQmluZEdyb3VwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDBC
RTEwNjIyMUU2QzBFQjAwRTQyQTg5IC8qIFdlYkdQVUJpbmRHcm91cC5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViR1BV
QmluZEdyb3VwLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4NDg5LDcgKzE4
NDg5LDYgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCUQwODdDRTM3MjFBQ0E5NDIwMEJERTE3NCAv
KiBjb2NvYSAqLywKIAkJCQkzMTJGRjhDRTIxQTRDMzNGMDBFQjE5OUQgLyogbGVnYWN5ICovLAot
CQkJCUQwQkUxMDVGMjFFNkJBRDMwMEU0MkE4OSAvKiBHUFVCaW5kR3JvdXAuY3BwICovLAogCQkJ
CUQwQkUxMDVFMjFFNkJBRDMwMEU0MkE4OSAvKiBHUFVCaW5kR3JvdXAuaCAqLywKIAkJCQlEMEJF
MTA0RTIxRTY5NUUyMDBFNDJBODkgLyogR1BVQmluZEdyb3VwQmluZGluZy5oICovLAogCQkJCUQw
QkUxMDUxMjFFNkE3MEUwMEU0MkE4OSAvKiBHUFVCaW5kR3JvdXBEZXNjcmlwdG9yLmggKi8sCkBA
IC0yNjIyMSw2ICsyNjIyMCw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAogCQkJCUQwMjMyQjU4MjFDQjQ5QjcwMDk0ODNCOSAvKiBHUFVCaW5kR3JvdXBMYXlvdXRNZXRh
bC5tbSAqLywKKwkJCQlEMDg1RTY0QTIyMzZERUFFMDBDM0UxRTIgLyogR1BVQmluZEdyb3VwTWV0
YWwubW0gKi8sCiAJCQkJRDBEODY0OTEyMUI3NjBDNDAwM0M5ODNDIC8qIEdQVUJ1ZmZlck1ldGFs
Lm1tICovLAogCQkJCUQwODdDRTM4MjFBQ0E5NDIwMEJERTE3NCAvKiBHUFVDb21tYW5kQnVmZmVy
TWV0YWwubW0gKi8sCiAJCQkJRDA4N0NFM0MyMUFDQTk0MjAwQkRFMTc0IC8qIEdQVURldmljZU1l
dGFsLm1tICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L0dQVUJpbmRHcm91cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvR1BVQmluZEdyb3VwLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRmZDM2
MWFkOWVhNWM0ODM0ZGRkMjdmNzk3ZDFmNjA5ZTI4YmMwOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvR1BVQmluZEdyb3VwLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR1BVQmluZEdyb3VwLmgi
Ci0KLSNpZiBFTkFCTEUoV0VCR1BVKQotCi0jaW5jbHVkZSAiR1BVQmluZEdyb3VwQmluZGluZy5o
IgotI2luY2x1ZGUgIkdQVUJpbmRHcm91cERlc2NyaXB0b3IuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1SZWY8R1BVQmluZEdyb3VwPiBHUFVCaW5kR3JvdXA6OmNyZWF0ZShHUFVCaW5kR3Jv
dXBEZXNjcmlwdG9yJiYgZGVzY3JpcHRvcikKLXsKLSAgICAvLyBGSVhNRTogVW5maW5pc2hlZCBz
dHViLgotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEdQVUJpbmRHcm91cChXVEZNb3ZlKGRlc2Ny
aXB0b3IpKSk7Ci19Ci0KLUdQVUJpbmRHcm91cDo6R1BVQmluZEdyb3VwKEdQVUJpbmRHcm91cERl
c2NyaXB0b3ImJiBkZXNjcmlwdG9yKQotICAgIDogbV9sYXlvdXQoV1RGTW92ZShkZXNjcmlwdG9y
LmxheW91dCkpCi0gICAgLCBtX2JpbmRpbmdzKFdURk1vdmUoZGVzY3JpcHRvci5iaW5kaW5ncykp
Ci17Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJH
UFUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BV
QmluZEdyb3VwLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVQmlu
ZEdyb3VwLmgKaW5kZXggMmNkYzA3MzczNjAxMWVhYTAyYjBlNjYzN2VhMmQ0MzEwYzZlNzMyNC4u
ODFhZTY0MWExMGU1NTBmZTVkOTE4ZTZkMDM3Mjg2MWNmOWRjODZiZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVUJpbmRHcm91cC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVCaW5kR3JvdXAuaApAQCAtMjcs
MjggKzI3LDQwIEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiR1BVQmluZEdy
b3VwQmluZGluZy5oIgotI2luY2x1ZGUgIkdQVUJpbmRHcm91cExheW91dC5oIgotI2luY2x1ZGUg
PHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCitPQkpDX1BST1RPQ09MKE1UTEJ1ZmZlcik7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorY2xhc3MgR1BVQnVmZmVyOworY2xhc3MgR1BVVGV4dHVyZTsKKwogc3RydWN0IEdQVUJpbmRH
cm91cERlc2NyaXB0b3I7CiAKIGNsYXNzIEdQVUJpbmRHcm91cCA6IHB1YmxpYyBSZWZDb3VudGVk
PEdQVUJpbmRHcm91cD4gewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8R1BVQmluZEdyb3VwPiBj
cmVhdGUoR1BVQmluZEdyb3VwRGVzY3JpcHRvciYmKTsKLQotICAgIGNvbnN0IEdQVUJpbmRHcm91
cExheW91dCYgbGF5b3V0KCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXQuZ2V0KCk7IH0KLSAgICBj
b25zdCBWZWN0b3I8R1BVQmluZEdyb3VwQmluZGluZz4mIGJpbmRpbmdzKCkgY29uc3QgeyByZXR1
cm4gbV9iaW5kaW5nczsgfQorICAgIHN0YXRpYyBSZWZQdHI8R1BVQmluZEdyb3VwPiB0cnlDcmVh
dGUoY29uc3QgR1BVQmluZEdyb3VwRGVzY3JpcHRvciYpOworICAgIAorI2lmIFVTRShNRVRBTCkK
KyAgICBNVExCdWZmZXIgKnZlcnRleEFyZ3NCdWZmZXIoKSB7IHJldHVybiBtX3ZlcnRleEFyZ3NC
dWZmZXIuZ2V0KCk7IH0KKyAgICBNVExCdWZmZXIgKmZyYWdtZW50QXJnc0J1ZmZlcigpIHsgcmV0
dXJuIG1fZnJhZ21lbnRBcmdzQnVmZmVyLmdldCgpOyB9CisjZW5kaWYKKyAgICBjb25zdCBWZWN0
b3I8UmVmPEdQVUJ1ZmZlcj4+JiBib3VuZEJ1ZmZlcnMoKSBjb25zdCB7IHJldHVybiBtX2JvdW5k
QnVmZmVyczsgfQorICAgIGNvbnN0IFZlY3RvcjxSZWY8R1BVVGV4dHVyZT4+JiBib3VuZFRleHR1
cmVzKCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZFRleHR1cmVzOyB9CiAKIHByaXZhdGU6Ci0gICAg
ZXhwbGljaXQgR1BVQmluZEdyb3VwKEdQVUJpbmRHcm91cERlc2NyaXB0b3ImJik7Ci0KLSAgICBS
ZWY8R1BVQmluZEdyb3VwTGF5b3V0PiBtX2xheW91dDsKLSAgICBWZWN0b3I8R1BVQmluZEdyb3Vw
QmluZGluZz4gbV9iaW5kaW5nczsKKyNpZiBVU0UoTUVUQUwpCisgICAgR1BVQmluZEdyb3VwKFJl
dGFpblB0cjxNVExCdWZmZXI+JiYgdmVydGV4QnVmZmVyLCBSZXRhaW5QdHI8TVRMQnVmZmVyPiYm
IGZyYWdtZW50QnVmZmVyLCBWZWN0b3I8UmVmPEdQVUJ1ZmZlcj4+JiYsIFZlY3RvcjxSZWY8R1BV
VGV4dHVyZT4+JiYpOworICAgIAorICAgIFJldGFpblB0cjxNVExCdWZmZXI+IG1fdmVydGV4QXJn
c0J1ZmZlcjsKKyAgICBSZXRhaW5QdHI8TVRMQnVmZmVyPiBtX2ZyYWdtZW50QXJnc0J1ZmZlcjsK
KyNlbmRpZgorICAgIFZlY3RvcjxSZWY8R1BVQnVmZmVyPj4gbV9ib3VuZEJ1ZmZlcnM7CisgICAg
VmVjdG9yPFJlZjxHUFVUZXh0dXJlPj4gbV9ib3VuZFRleHR1cmVzOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L0dQVUJpbmRHcm91cExheW91dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L0dQVUJpbmRHcm91cExheW91dC5oCmluZGV4IGJhODY2YTllZDJiNmY3MjE3Nzdl
ODE2OGQ0OGQ4ZjQyNDFkMGRlNDQuLjliMDVjMDE3YjUzYjBjMjM3ZmZiZGVjNWJmNDY1NWI4YmVi
MDE1NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9H
UFVCaW5kR3JvdXBMYXlvdXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvR1BVQmluZEdyb3VwTGF5b3V0LmgKQEAgLTUwLDI0ICs1MCwxOCBAQCBwdWJsaWM6CiAg
ICAgdXNpbmcgQmluZGluZ3NNYXBUeXBlID0gSGFzaE1hcDx1bnNpZ25lZCBsb25nIGxvbmcsIEdQ
VUJpbmRHcm91cExheW91dEJpbmRpbmcsIFdURjo6SW50SGFzaDx1bnNpZ25lZCBsb25nIGxvbmc+
LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkIGxvbmcgbG9uZz4+
OwogICAgIGNvbnN0IEJpbmRpbmdzTWFwVHlwZSYgYmluZGluZ3NNYXAoKSBjb25zdCB7IHJldHVy
biBtX2JpbmRpbmdzTWFwOyB9CiAjaWYgVVNFKE1FVEFMKQotICAgIHN0cnVjdCBBcmd1bWVudEVu
Y29kZXJCdWZmZXIgewotICAgICAgICBSZXRhaW5QdHI8TVRMQXJndW1lbnRFbmNvZGVyPiBlbmNv
ZGVyOwotICAgICAgICBSZXRhaW5QdHI8TVRMQnVmZmVyPiBidWZmZXI7Ci0KLSAgICAgICAgYm9v
bCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gZW5jb2RlciAmJiBidWZmZXI7IH0KLSAgICB9Owot
ICAgIGNvbnN0IEFyZ3VtZW50RW5jb2RlckJ1ZmZlciYgdmVydGV4QXJndW1lbnRzKCkgY29uc3Qg
eyByZXR1cm4gbV92ZXJ0ZXhBcmd1bWVudHM7IH0KLSAgICBjb25zdCBBcmd1bWVudEVuY29kZXJC
dWZmZXImIGZyYWdtZW50QXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9mcmFnbWVudEFyZ3Vt
ZW50czsgfQotICAgIGNvbnN0IEFyZ3VtZW50RW5jb2RlckJ1ZmZlciYgY29tcHV0ZUFyZ3VtZW50
cygpIGNvbnN0IHsgcmV0dXJuIG1fY29tcHV0ZUFyZ3VtZW50czsgfQorICAgIE1UTEFyZ3VtZW50
RW5jb2RlciAqdmVydGV4RW5jb2RlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGV4RW5jb2Rlci5n
ZXQoKTsgfQorICAgIE1UTEFyZ3VtZW50RW5jb2RlciAqZnJhZ21lbnRFbmNvZGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9mcmFnbWVudEVuY29kZXIuZ2V0KCk7IH0KKyAgICBNVExBcmd1bWVudEVuY29k
ZXIgKmNvbXB1dGVFbmNvZGVyKCkgY29uc3QgeyByZXR1cm4gbV9jb21wdXRlRW5jb2Rlci5nZXQo
KTsgfQogI2VuZGlmIC8vIFVTRShNRVRBTCkKIAogcHJpdmF0ZToKICNpZiBVU0UoTUVUQUwpCi0g
ICAgR1BVQmluZEdyb3VwTGF5b3V0KEJpbmRpbmdzTWFwVHlwZSYmLCBBcmd1bWVudEVuY29kZXJC
dWZmZXImJiB2ZXJ0ZXgsIEFyZ3VtZW50RW5jb2RlckJ1ZmZlciYmIGZyYWdtZW50LCBBcmd1bWVu
dEVuY29kZXJCdWZmZXImJiBjb21wdXRlKTsKKyAgICBHUFVCaW5kR3JvdXBMYXlvdXQoQmluZGlu
Z3NNYXBUeXBlJiYsIFJldGFpblB0cjxNVExBcmd1bWVudEVuY29kZXI+JiYgdmVydGV4LCBSZXRh
aW5QdHI8TVRMQXJndW1lbnRFbmNvZGVyPiYmIGZyYWdtZW50LCBSZXRhaW5QdHI8TVRMQXJndW1l
bnRFbmNvZGVyPiYmIGNvbXB1dGUpOwogCi0gICAgQXJndW1lbnRFbmNvZGVyQnVmZmVyIG1fdmVy
dGV4QXJndW1lbnRzOwotICAgIEFyZ3VtZW50RW5jb2RlckJ1ZmZlciBtX2ZyYWdtZW50QXJndW1l
bnRzOwotICAgIEFyZ3VtZW50RW5jb2RlckJ1ZmZlciBtX2NvbXB1dGVBcmd1bWVudHM7CisgICAg
UmV0YWluUHRyPE1UTEFyZ3VtZW50RW5jb2Rlcj4gbV92ZXJ0ZXhFbmNvZGVyOworICAgIFJldGFp
blB0cjxNVExBcmd1bWVudEVuY29kZXI+IG1fZnJhZ21lbnRFbmNvZGVyOworICAgIFJldGFpblB0
cjxNVExBcmd1bWVudEVuY29kZXI+IG1fY29tcHV0ZUVuY29kZXI7CiAjZW5kaWYgLy8gVVNFKE1F
VEFMKQogICAgIGNvbnN0IEJpbmRpbmdzTWFwVHlwZSBtX2JpbmRpbmdzTWFwOwogfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVQcm9ncmFtbWFi
bGVQYXNzRW5jb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQ
VVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyLmgKaW5kZXggM2NkYzE5ZjliNThiODc3ZTAxODIzZDE0
MzIyZDMyY2JmMmUwMmE5MS4uZmExNjhkYzI5ZDc1YzlkYzEyM2I1MjIwOGNlZWMyY2NlYzI2MTYy
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVBy
b2dyYW1tYWJsZVBhc3NFbmNvZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L0dQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyLmgKQEAgLTMwLDEyICszMCwxMSBA
QAogI2luY2x1ZGUgIkdQVUJpbmRHcm91cEJpbmRpbmcuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgogCi1PQkpDX1BST1RPQ09MKE1UTEFyZ3VtZW50RW5jb2Rlcik7CiAjaWYgVVNFKE1F
VEFMKQogT0JKQ19QUk9UT0NPTChNVExCdWZmZXIpOwogT0JKQ19QUk9UT0NPTChNVExDb21tYW5k
RW5jb2Rlcik7CiBPQkpDX1BST1RPQ09MKE1UTFJlc291cmNlKTsKLSNlbmRpZiAvLyBVU0UoTUVU
QUwpCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02MSw5ICs2MCw2IEBAIHBy
b3RlY3RlZDoKIAogcHJpdmF0ZToKICNpZiBVU0UoTUVUQUwpCi0gICAgdm9pZCBzZXRSZXNvdXJj
ZUFzQnVmZmVyT25FbmNvZGVyKE1UTEFyZ3VtZW50RW5jb2RlciAqLCBjb25zdCBHUFVCaW5kR3Jv
dXBCaW5kaW5nJiwgY29uc3QgY2hhciogY29uc3QpOwotICAgIHZvaWQgc2V0UmVzb3VyY2VBc1Nh
bXBsZXJPbkVuY29kZXIoTVRMQXJndW1lbnRFbmNvZGVyICosIGNvbnN0IEdQVUJpbmRHcm91cEJp
bmRpbmcmLCBjb25zdCBjaGFyKiBjb25zdCk7Ci0gICAgdm9pZCBzZXRSZXNvdXJjZUFzVGV4dHVy
ZU9uRW5jb2RlcihNVExBcmd1bWVudEVuY29kZXIgKiwgY29uc3QgR1BVQmluZEdyb3VwQmluZGlu
ZyYsIGNvbnN0IGNoYXIqIGNvbnN0KTsKICAgICB2aXJ0dWFsIHZvaWQgdXNlUmVzb3VyY2UoTVRM
UmVzb3VyY2UgKiwgdW5zaWduZWQpID0gMDsKIAogICAgIC8vIFJlbmRlciBjb21tYW5kIGVuY29k
ZXIgbWV0aG9kcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9jb2NvYS9HUFVCaW5kR3JvdXBMYXlvdXRNZXRhbC5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVCaW5kR3JvdXBMYXlvdXRNZXRhbC5tbQppbmRl
eCBhZDIzOTdjZGM2NzE1M2Y2MGMxYjY1YmM4YWQ5NWM3NGQ5YzZlZTgyLi44ZTQ2ZTc2YzdmZGY4
ODZiNzA3MTlkYzRmZDViYjk3ZDNiZTEyMTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQmluZEdyb3VwTGF5b3V0TWV0YWwubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUJpbmRHcm91
cExheW91dE1ldGFsLm1tCkBAIC02MywyOCArNjMsMTggQEAgc3RhdGljIHZvaWQgYXBwZW5kQXJn
dW1lbnRUb0FycmF5KEFyZ3VtZW50QXJyYXkmIGFycmF5LCBSZXRhaW5QdHI8TVRMQXJndW1lbnRE
ZXMKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCi1zdGF0aWMgR1BVQmluZEdy
b3VwTGF5b3V0OjpBcmd1bWVudEVuY29kZXJCdWZmZXIgdHJ5Q3JlYXRlQXJndW1lbnRFbmNvZGVy
QW5kQnVmZmVyKGNvbnN0IEdQVURldmljZSYgZGV2aWNlLCBBcmd1bWVudEFycmF5IGFycmF5KQor
c3RhdGljIFJldGFpblB0cjxNVExBcmd1bWVudEVuY29kZXI+IHRyeUNyZWF0ZU10bEFyZ3VtZW50
RW5jb2Rlcihjb25zdCBHUFVEZXZpY2UmIGRldmljZSwgQXJndW1lbnRBcnJheSBhcnJheSkKIHsK
LSAgICBHUFVCaW5kR3JvdXBMYXlvdXQ6OkFyZ3VtZW50RW5jb2RlckJ1ZmZlciBhcmdzOworICAg
IFJldGFpblB0cjxNVExBcmd1bWVudEVuY29kZXI+IGVuY29kZXI7CiAKICAgICBCRUdJTl9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgYXJncy5lbmNvZGVyID0gYWRvcHROUyhbZGV2aWNlLnBs
YXRmb3JtRGV2aWNlKCkgbmV3QXJndW1lbnRFbmNvZGVyV2l0aEFyZ3VtZW50czphcnJheS5nZXQo
KV0pOworICAgIGVuY29kZXIgPSBhZG9wdE5TKFtkZXZpY2UucGxhdGZvcm1EZXZpY2UoKSBuZXdB
cmd1bWVudEVuY29kZXJXaXRoQXJndW1lbnRzOmFycmF5LmdldCgpXSk7CiAgICAgRU5EX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKLSAgICBpZiAoIWFyZ3MuZW5jb2RlcikgeworICAgIGlmICghZW5j
b2RlcikgewogICAgICAgICBMT0coV2ViR1BVLCAiR1BVQmluZEdyb3VwTGF5b3V0Ojp0cnlDcmVh
dGUoKTogVW5hYmxlIHRvIGNyZWF0ZSBNVExBcmd1bWVudEVuY29kZXIhIik7Ci0gICAgICAgIHJl
dHVybiB7IH07Ci0gICAgfQotCi0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAg
IGFyZ3MuYnVmZmVyID0gYWRvcHROUyhbZGV2aWNlLnBsYXRmb3JtRGV2aWNlKCkgbmV3QnVmZmVy
V2l0aExlbmd0aDphcmdzLmVuY29kZXIuZ2V0KCkuZW5jb2RlZExlbmd0aCBvcHRpb25zOjBdKTsK
LSAgICBbYXJncy5lbmNvZGVyIHNldEFyZ3VtZW50QnVmZmVyOmFyZ3MuYnVmZmVyLmdldCgpIG9m
ZnNldDowXTsKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIGlmICghYXJncy5i
dWZmZXIpIHsKLSAgICAgICAgTE9HKFdlYkdQVSwgIkdQVUJpbmRHcm91cExheW91dDo6dHJ5Q3Jl
YXRlKCk6IFVuYWJsZSB0byBjcmVhdGUgTVRMQnVmZmVyIGZyb20gTVRMQXJndW1lbnRFbmNvZGVy
ISIpOwotICAgICAgICByZXR1cm4geyB9OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
Ci0KLSAgICByZXR1cm4gYXJnczsKKyAgICByZXR1cm4gZW5jb2RlcjsKIH07CiAKIFJlZlB0cjxH
UFVCaW5kR3JvdXBMYXlvdXQ+IEdQVUJpbmRHcm91cExheW91dDo6dHJ5Q3JlYXRlKGNvbnN0IEdQ
VURldmljZSYgZGV2aWNlLCBjb25zdCBHUFVCaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yJiBkZXNj
cmlwdG9yKQpAQCAtMTA4LDE0ICs5OCwxMyBAQCBSZWZQdHI8R1BVQmluZEdyb3VwTGF5b3V0PiBH
UFVCaW5kR3JvdXBMYXlvdXQ6OnRyeUNyZWF0ZShjb25zdCBHUFVEZXZpY2UmIGRldmljZQogICAg
ICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAgICAgIG10bEFyZ3VtZW50ID0g
YWRvcHROUyhbTVRMQXJndW1lbnREZXNjcmlwdG9yIG5ld10pOwogICAgICAgICBFTkRfQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwotCiAgICAgICAgIGlmICghbXRsQXJndW1lbnQpIHsKICAgICAgICAg
ICAgIExPRyhXZWJHUFUsICJHUFVCaW5kR3JvdXBMYXlvdXQ6OnRyeUNyZWF0ZSgpOiBVbmFibGUg
dG8gY3JlYXRlIE1UTEFyZ3VtZW50RGVzY3JpcHRvciBmb3IgYmluZGluZyAlbHUhIiwgYmluZGlu
Zy5iaW5kaW5nKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAKLSAg
ICAgICAgbXRsQXJndW1lbnQuZ2V0KCkuZGF0YVR5cGUgPSBNVExEYXRhVHlwZUZvckJpbmRpbmdU
eXBlKGJpbmRpbmcudHlwZSk7Ci0gICAgICAgIG10bEFyZ3VtZW50LmdldCgpLmluZGV4ID0gYmlu
ZGluZy5iaW5kaW5nOworICAgICAgICBbbXRsQXJndW1lbnQgc2V0RGF0YVR5cGU6TVRMRGF0YVR5
cGVGb3JCaW5kaW5nVHlwZShiaW5kaW5nLnR5cGUpXTsKKyAgICAgICAgW210bEFyZ3VtZW50IHNl
dEluZGV4OmJpbmRpbmcuYmluZGluZ107CiAKICAgICAgICAgaWYgKGJpbmRpbmcudmlzaWJpbGl0
eSAmIEdQVVNoYWRlclN0YWdlQml0OjpGbGFnczo6VmVydGV4KQogICAgICAgICAgICAgYXBwZW5k
QXJndW1lbnRUb0FycmF5KHZlcnRleEFyZ3NBcnJheSwgbXRsQXJndW1lbnQpOwpAQCAtMTI1LDI4
ICsxMTQsMjggQEAgUmVmUHRyPEdQVUJpbmRHcm91cExheW91dD4gR1BVQmluZEdyb3VwTGF5b3V0
Ojp0cnlDcmVhdGUoY29uc3QgR1BVRGV2aWNlJiBkZXZpY2UKICAgICAgICAgICAgIGFwcGVuZEFy
Z3VtZW50VG9BcnJheShjb21wdXRlQXJnc0FycmF5LCBtdGxBcmd1bWVudCk7CiAgICAgfQogCi0g
ICAgQXJndW1lbnRFbmNvZGVyQnVmZmVyIHZlcnRleCwgZnJhZ21lbnQsIGNvbXB1dGU7CisgICAg
UmV0YWluUHRyPE1UTEFyZ3VtZW50RW5jb2Rlcj4gdmVydGV4LCBmcmFnbWVudCwgY29tcHV0ZTsK
IAogICAgIGlmICh2ZXJ0ZXhBcmdzQXJyYXkpIHsKLSAgICAgICAgaWYgKCEodmVydGV4ID0gdHJ5
Q3JlYXRlQXJndW1lbnRFbmNvZGVyQW5kQnVmZmVyKGRldmljZSwgdmVydGV4QXJnc0FycmF5KSku
aXNWYWxpZCgpKQorICAgICAgICBpZiAoISh2ZXJ0ZXggPSB0cnlDcmVhdGVNdGxBcmd1bWVudEVu
Y29kZXIoZGV2aWNlLCB2ZXJ0ZXhBcmdzQXJyYXkpKSkKICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KICAgICBpZiAoZnJhZ21lbnRBcmdzQXJyYXkpIHsKLSAgICAgICAgaWYgKCEo
ZnJhZ21lbnQgPSB0cnlDcmVhdGVBcmd1bWVudEVuY29kZXJBbmRCdWZmZXIoZGV2aWNlLCBmcmFn
bWVudEFyZ3NBcnJheSkpLmlzVmFsaWQoKSkKKyAgICAgICAgaWYgKCEoZnJhZ21lbnQgPSB0cnlD
cmVhdGVNdGxBcmd1bWVudEVuY29kZXIoZGV2aWNlLCBmcmFnbWVudEFyZ3NBcnJheSkpKQogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIGlmIChjb21wdXRlQXJnc0FycmF5
KSB7Ci0gICAgICAgIGlmICghKGNvbXB1dGUgPSB0cnlDcmVhdGVBcmd1bWVudEVuY29kZXJBbmRC
dWZmZXIoZGV2aWNlLCBjb21wdXRlQXJnc0FycmF5KSkuaXNWYWxpZCgpKQorICAgICAgICBpZiAo
IShjb21wdXRlID0gdHJ5Q3JlYXRlTXRsQXJndW1lbnRFbmNvZGVyKGRldmljZSwgY29tcHV0ZUFy
Z3NBcnJheSkpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBHUFVCaW5kR3JvdXBMYXlvdXQoV1RGTW92ZShiaW5kaW5nc01hcCks
IFdURk1vdmUodmVydGV4KSwgV1RGTW92ZShmcmFnbWVudCksIFdURk1vdmUoY29tcHV0ZSkpKTsK
IH0KIAotR1BVQmluZEdyb3VwTGF5b3V0OjpHUFVCaW5kR3JvdXBMYXlvdXQoQmluZGluZ3NNYXBU
eXBlJiYgYmluZGluZ3NNYXAsIEFyZ3VtZW50RW5jb2RlckJ1ZmZlciYmIHZlcnRleCwgQXJndW1l
bnRFbmNvZGVyQnVmZmVyJiYgZnJhZ21lbnQsIEFyZ3VtZW50RW5jb2RlckJ1ZmZlciYmIGNvbXB1
dGUpCi0gICAgOiBtX3ZlcnRleEFyZ3VtZW50cyhXVEZNb3ZlKHZlcnRleCkpCi0gICAgLCBtX2Zy
YWdtZW50QXJndW1lbnRzKFdURk1vdmUoZnJhZ21lbnQpKQotICAgICwgbV9jb21wdXRlQXJndW1l
bnRzKFdURk1vdmUoY29tcHV0ZSkpCitHUFVCaW5kR3JvdXBMYXlvdXQ6OkdQVUJpbmRHcm91cExh
eW91dChCaW5kaW5nc01hcFR5cGUmJiBiaW5kaW5nc01hcCwgUmV0YWluUHRyPE1UTEFyZ3VtZW50
RW5jb2Rlcj4mJiB2ZXJ0ZXgsIFJldGFpblB0cjxNVExBcmd1bWVudEVuY29kZXI+JiYgZnJhZ21l
bnQsIFJldGFpblB0cjxNVExBcmd1bWVudEVuY29kZXI+JiYgY29tcHV0ZSkKKyAgICA6IG1fdmVy
dGV4RW5jb2RlcihXVEZNb3ZlKHZlcnRleCkpCisgICAgLCBtX2ZyYWdtZW50RW5jb2RlcihXVEZN
b3ZlKGZyYWdtZW50KSkKKyAgICAsIG1fY29tcHV0ZUVuY29kZXIoV1RGTW92ZShjb21wdXRlKSkK
ICAgICAsIG1fYmluZGluZ3NNYXAoV1RGTW92ZShiaW5kaW5nc01hcCkpCiB7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQmluZEdy
b3VwTWV0YWwubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2Ev
R1BVQmluZEdyb3VwTWV0YWwubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTMxNTc0Y2IyMTU5YjhjNzFlNzQ2MDMw
NTlkODc0YzU1ZDg2ZjE4NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVCaW5kR3JvdXBNZXRhbC5tbQpAQCAtMCwwICsxLDI1
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiR1BVQmluZEdy
b3VwLmgiCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW1wb3J0ICJHUFVCaW5kR3JvdXBCaW5k
aW5nLmgiCisjaW1wb3J0ICJHUFVCaW5kR3JvdXBEZXNjcmlwdG9yLmgiCisjaW1wb3J0ICJHUFVC
aW5kR3JvdXBMYXlvdXQuaCIKKyNpbXBvcnQgIkdQVUJ1ZmZlci5oIgorI2ltcG9ydCAiR1BVU2Ft
cGxlci5oIgorI2ltcG9ydCAiR1BVVGV4dHVyZS5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2lt
cG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9PcHRpb25hbC5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBSZXRhaW5QdHI8TVRMQnVmZmVyPiB0
cnlDcmVhdGVBcmd1bWVudEJ1ZmZlcihNVExBcmd1bWVudEVuY29kZXIgKmVuY29kZXIpCit7Cisg
ICAgUmV0YWluUHRyPE1UTEJ1ZmZlcj4gYnVmZmVyOworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUzsKKyAgICBidWZmZXIgPSBhZG9wdE5TKFtlbmNvZGVyLmRldmljZSBuZXdCdWZmZXJX
aXRoTGVuZ3RoOmVuY29kZXIuZW5jb2RlZExlbmd0aCBvcHRpb25zOjBdKTsKKyAgICBbZW5jb2Rl
ciBzZXRBcmd1bWVudEJ1ZmZlcjpidWZmZXIuZ2V0KCkgb2Zmc2V0OjBdOworICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7CisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKyAgICAKK3N0YXRpYyBP
cHRpb25hbDxHUFVCdWZmZXJCaW5kaW5nPiB0cnlHZXRSZXNvdXJjZUFzQnVmZmVyQmluZGluZyhj
b25zdCBHUFVCaW5kaW5nUmVzb3VyY2UmIHJlc291cmNlLCBjb25zdCBjaGFyKiBjb25zdCBmdW5j
dGlvbk5hbWUpCit7CisjaWYgTE9HX0RJU0FCTEVECisgICAgVU5VU0VEX1BBUkFNKGZ1bmN0aW9u
TmFtZSk7CisjZW5kaWYKKyAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8R1BVQnVmZmVy
QmluZGluZz4ocmVzb3VyY2UpKSB7CisgICAgICAgIExPRyhXZWJHUFUsICIlczogUmVzb3VyY2Ug
aXMgbm90IGEgYnVmZmVyIHR5cGUhIiwgZnVuY3Rpb25OYW1lKTsKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICB9CisgICAgYXV0byYgYnVmZmVyQmluZGluZyA9IFdURjo6Z2V0PEdQ
VUJ1ZmZlckJpbmRpbmc+KHJlc291cmNlKTsKKyAgICBpZiAoIWJ1ZmZlckJpbmRpbmcuYnVmZmVy
LT5wbGF0Zm9ybUJ1ZmZlcigpKSB7CisgICAgICAgIExPRyhXZWJHUFUsICIlczogSW52YWxpZCBN
VExCdWZmZXIgaW4gR1BVQnVmZmVyQmluZGluZyEiLCBmdW5jdGlvbk5hbWUpOworICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KKyAgICByZXR1cm4gR1BVQnVmZmVyQmluZGluZyB7
IGJ1ZmZlckJpbmRpbmcuYnVmZmVyLmNvcHlSZWYoKSwgYnVmZmVyQmluZGluZy5vZmZzZXQsIGJ1
ZmZlckJpbmRpbmcuc2l6ZSB9OworfQorCitzdGF0aWMgYm9vbCB0cnlTZXRCdWZmZXJPbkVuY29k
ZXIoTVRMQXJndW1lbnRFbmNvZGVyICphcmd1bWVudEVuY29kZXIsIGNvbnN0IEdQVUJ1ZmZlckJp
bmRpbmcmIGJ1ZmZlckJpbmRpbmcsIHVuc2lnbmVkIGluZGV4LCBjb25zdCBjaGFyKiBjb25zdCBm
dW5jdGlvbk5hbWUpCit7CisjaWYgTE9HX0RJU0FCTEVECisgICAgVU5VU0VEX1BBUkFNKGZ1bmN0
aW9uTmFtZSk7CisjZW5kaWYKKyAgICBpZiAoIWFyZ3VtZW50RW5jb2RlcikgeworICAgICAgICBM
T0coV2ViR1BVLCAiJXM6IE5vIGFyZ3VtZW50IGVuY29kZXIgZm9yIHJlcXVlc3RlZCBzdGFnZSBm
b3VuZCEiLCBmdW5jdGlvbk5hbWUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICBbYXJndW1lbnRFbmNvZGVyIHNldEJ1
ZmZlcjpidWZmZXJCaW5kaW5nLmJ1ZmZlci0+cGxhdGZvcm1CdWZmZXIoKSBvZmZzZXQ6YnVmZmVy
QmluZGluZy5vZmZzZXQgYXRJbmRleDppbmRleF07CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBU
SU9OUzsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyAgICAKK3N0YXRpYyBSZWZQdHI8R1BVU2FtcGxl
cj4gdHJ5R2V0UmVzb3VyY2VBc1NhbXBsZXIoY29uc3QgR1BVQmluZGluZ1Jlc291cmNlJiByZXNv
dXJjZSwgY29uc3QgY2hhciogY29uc3QgZnVuY3Rpb25OYW1lKQoreworI2lmIExPR19ESVNBQkxF
RAorICAgIFVOVVNFRF9QQVJBTShmdW5jdGlvbk5hbWUpOworI2VuZGlmCisgICAgaWYgKCFXVEY6
OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxHUFVTYW1wbGVyPj4ocmVzb3VyY2UpKSB7CisgICAgICAg
IExPRyhXZWJHUFUsICIlczogUmVzb3VyY2UgaXMgbm90IGEgR1BVU2FtcGxlciEiLCBmdW5jdGlv
bk5hbWUpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgYXV0byYgc2FtcGxl
clJlZiA9IFdURjo6Z2V0PFJlZjxHUFVTYW1wbGVyPj4ocmVzb3VyY2UpOworICAgIGlmICghc2Ft
cGxlclJlZi0+cGxhdGZvcm1TYW1wbGVyKCkpIHsKKyAgICAgICAgTE9HKFdlYkdQVSwgIiVzOiBJ
bnZhbGlkIE1UTFNhbXBsZXJTdGF0ZSBpbiBHUFVTYW1wbGVyIGJpbmRpbmchIiwgZnVuY3Rpb25O
YW1lKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiBzYW1wbGVy
UmVmLmNvcHlSZWYoKTsKK30KKworc3RhdGljIGJvb2wgdHJ5U2V0U2FtcGxlck9uRW5jb2RlcihN
VExBcmd1bWVudEVuY29kZXIgKmFyZ3VtZW50RW5jb2RlciwgTVRMU2FtcGxlclN0YXRlICpzYW1w
bGVyLCB1bnNpZ25lZCBpbmRleCwgY29uc3QgY2hhciAqY29uc3QgZnVuY3Rpb25OYW1lKQorewor
I2lmIExPR19ESVNBQkxFRAorICAgIFVOVVNFRF9QQVJBTShmdW5jdGlvbk5hbWUpOworI2VuZGlm
CisgICAgaWYgKCFhcmd1bWVudEVuY29kZXIpIHsKKyAgICAgICAgTE9HKFdlYkdQVSwgIiVzOiBO
byBhcmd1bWVudCBlbmNvZGVyIGZvciByZXF1ZXN0ZWQgc3RhZ2UgZm91bmQhIiwgZnVuY3Rpb25O
YW1lKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBCRUdJTl9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7CisgICAgW2FyZ3VtZW50RW5jb2RlciBzZXRTYW1wbGVyU3RhdGU6c2FtcGxl
ciBhdEluZGV4OmluZGV4XTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIHJl
dHVybiB0cnVlOworfQorCitzdGF0aWMgUmVmUHRyPEdQVVRleHR1cmU+IHRyeUdldFJlc291cmNl
QXNUZXh0dXJlKGNvbnN0IEdQVUJpbmRpbmdSZXNvdXJjZSYgcmVzb3VyY2UsIGNvbnN0IGNoYXIq
IGNvbnN0IGZ1bmN0aW9uTmFtZSkKKyAgICB7CisjaWYgTE9HX0RJU0FCTEVECisgICAgVU5VU0VE
X1BBUkFNKGZ1bmN0aW9uTmFtZSk7CisjZW5kaWYKKyAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJu
YXRpdmU8UmVmPEdQVVRleHR1cmU+PihyZXNvdXJjZSkpIHsKKyAgICAgICAgTE9HKFdlYkdQVSwg
IiVzOiBSZXNvdXJjZSBpcyBub3QgYSBHUFVUZXh0dXJlVmlldyEiLCBmdW5jdGlvbk5hbWUpOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgYXV0byYgdGV4dHVyZVJlZiA9IFdU
Rjo6Z2V0PFJlZjxHUFVUZXh0dXJlPj4ocmVzb3VyY2UpOworICAgIGlmICghdGV4dHVyZVJlZi0+
cGxhdGZvcm1UZXh0dXJlKCkpIHsKKyAgICAgICAgTE9HKFdlYkdQVSwgIiVzOiBJbnZhbGlkIE1U
TFRleHR1cmUgaW4gR1BVVGV4dHVyZVZpZXcgYmluZGluZyEiLCBmdW5jdGlvbk5hbWUpOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuIHRleHR1cmVSZWYuY29weVJl
ZigpOworfQorCitzdGF0aWMgYm9vbCB0cnlTZXRUZXh0dXJlT25FbmNvZGVyKE1UTEFyZ3VtZW50
RW5jb2RlciAqYXJndW1lbnRFbmNvZGVyLCBNVExUZXh0dXJlICp0ZXh0dXJlLCB1bnNpZ25lZCBp
bmRleCwgY29uc3QgY2hhciogY29uc3QgZnVuY3Rpb25OYW1lKQoreworI2lmIExPR19ESVNBQkxF
RAorICAgIFVOVVNFRF9QQVJBTShmdW5jdGlvbk5hbWUpOworI2VuZGlmCisgICAgaWYgKCFhcmd1
bWVudEVuY29kZXIpIHsKKyAgICAgICAgTE9HKFdlYkdQVSwgIiVzOiBObyBhcmd1bWVudCBlbmNv
ZGVyIGZvciByZXF1ZXN0ZWQgc3RhZ2UgZm91bmQhIiwgZnVuY3Rpb25OYW1lKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cisg
ICAgW2FyZ3VtZW50RW5jb2RlciBzZXRUZXh0dXJlOnRleHR1cmUgYXRJbmRleDppbmRleF07Cisg
ICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyAgICAK
K1JlZlB0cjxHUFVCaW5kR3JvdXA+IEdQVUJpbmRHcm91cDo6dHJ5Q3JlYXRlKGNvbnN0IEdQVUJp
bmRHcm91cERlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgY29uc3QgY2hhciogY29uc3Qg
ZnVuY3Rpb25OYW1lID0gIkdQVUJpbmRHcm91cDo6dHJ5Q3JlYXRlKCkiOworICAgIAorICAgIE1U
TEFyZ3VtZW50RW5jb2RlciAqdmVydGV4RW5jb2RlciA9IGRlc2NyaXB0b3IubGF5b3V0LT52ZXJ0
ZXhFbmNvZGVyKCk7CisgICAgTVRMQXJndW1lbnRFbmNvZGVyICpmcmFnbWVudEVuY29kZXIgPSBk
ZXNjcmlwdG9yLmxheW91dC0+ZnJhZ21lbnRFbmNvZGVyKCk7CisgICAgLy8gRklYTUU6IEZpbmlz
aCBzdXBwb3J0IGZvciBjb21wdXRlLgorICAgIAorICAgIFJldGFpblB0cjxNVExCdWZmZXI+IHZl
cnRleEFyZ3NCdWZmZXI7CisgICAgaWYgKHZlcnRleEVuY29kZXIpIHsKKyAgICAgICAgaWYgKCEo
dmVydGV4QXJnc0J1ZmZlciA9IHRyeUNyZWF0ZUFyZ3VtZW50QnVmZmVyKHZlcnRleEVuY29kZXIp
KSkgeworICAgICAgICAgICAgTE9HKFdlYkdQVSwgIiVzOiBVbmFibGUgdG8gY3JlYXRlIE1UTEJ1
ZmZlciBmb3IgdmVydGV4IGFyZ3VtZW50IGJ1ZmZlciEiLCBmdW5jdGlvbk5hbWUpOworICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICB9CisgICAgUmV0YWluUHRyPE1U
TEJ1ZmZlcj4gZnJhZ21lbnRBcmdzQnVmZmVyOworICAgIGlmIChmcmFnbWVudEVuY29kZXIpIHsK
KyAgICAgICAgaWYgKCEoZnJhZ21lbnRBcmdzQnVmZmVyID0gdHJ5Q3JlYXRlQXJndW1lbnRCdWZm
ZXIoZnJhZ21lbnRFbmNvZGVyKSkpIHsKKyAgICAgICAgICAgIExPRyhXZWJHUFUsICIlczogVW5h
YmxlIHRvIGNyZWF0ZSBNVExCdWZmZXIgZm9yIGZyYWdtZW50IGFyZ3VtZW50IGJ1ZmZlciEiLCBm
dW5jdGlvbk5hbWUpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgVmVjdG9yPFJlZjxHUFVCdWZmZXI+PiBib3VuZEJ1ZmZlcnM7CisgICAg
VmVjdG9yPFJlZjxHUFVUZXh0dXJlPj4gYm91bmRUZXh0dXJlczsKKworICAgIC8vIFNldCBlYWNo
IHJlc291cmNlIG9uIGVhY2ggTVRMQXJndW1lbnRFbmNvZGVyIGl0IHNob3VsZCBiZSB2aXNpYmxl
IG9uLgorICAgIGNvbnN0IGF1dG8mIGxheW91dEJpbmRpbmdzTWFwID0gZGVzY3JpcHRvci5sYXlv
dXQtPmJpbmRpbmdzTWFwKCk7CisgICAgZm9yIChjb25zdCBhdXRvJiByZXNvdXJjZUJpbmRpbmcg
OiBkZXNjcmlwdG9yLmJpbmRpbmdzKSB7CisgICAgICAgIGF1dG8gbGF5b3V0SXRlcmF0b3IgPSBs
YXlvdXRCaW5kaW5nc01hcC5maW5kKHJlc291cmNlQmluZGluZy5iaW5kaW5nKTsKKyAgICAgICAg
aWYgKGxheW91dEl0ZXJhdG9yID09IGxheW91dEJpbmRpbmdzTWFwLmVuZCgpKSB7CisgICAgICAg
ICAgICBMT0coV2ViR1BVLCAiJXM6IEdQVUJpbmRHcm91cEJpbmRpbmcgJWx1IG5vdCBmb3VuZCBp
biBHUFVCaW5kR3JvdXBMYXlvdXQhIiwgZnVuY3Rpb25OYW1lLCByZXNvdXJjZUJpbmRpbmcuYmlu
ZGluZyk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICBh
dXRvIGxheW91dEJpbmRpbmcgPSBsYXlvdXRJdGVyYXRvci0+dmFsdWU7CisgICAgICAgIAorICAg
ICAgICBzd2l0Y2ggKGxheW91dEJpbmRpbmcudHlwZSkgeworICAgICAgICAvLyBGSVhNRTogU3Vw
cG9ydCBtb3JlIHJlc291cmNlIHR5cGVzLgorICAgICAgICBjYXNlIEdQVUJpbmRHcm91cExheW91
dEJpbmRpbmc6OkJpbmRpbmdUeXBlOjpVbmlmb3JtQnVmZmVyOgorICAgICAgICBjYXNlIEdQVUJp
bmRHcm91cExheW91dEJpbmRpbmc6OkJpbmRpbmdUeXBlOjpTdG9yYWdlQnVmZmVyOiB7CisgICAg
ICAgICAgICBhdXRvIGJ1ZmZlclJlc291cmNlID0gdHJ5R2V0UmVzb3VyY2VBc0J1ZmZlckJpbmRp
bmcocmVzb3VyY2VCaW5kaW5nLnJlc291cmNlLCBmdW5jdGlvbk5hbWUpOworICAgICAgICAgICAg
aWYgKCFidWZmZXJSZXNvdXJjZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgICAgIGlmIChsYXlvdXRCaW5kaW5nLnZpc2liaWxpdHkgJiBHUFVTaGFkZXJTdGFnZUJp
dDo6RmxhZ3M6OlZlcnRleCkgeworICAgICAgICAgICAgICAgIGlmICghdHJ5U2V0QnVmZmVyT25F
bmNvZGVyKHZlcnRleEVuY29kZXIsICpidWZmZXJSZXNvdXJjZSwgcmVzb3VyY2VCaW5kaW5nLmJp
bmRpbmcsIGZ1bmN0aW9uTmFtZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGxheW91dEJpbmRpbmcudmlzaWJpbGl0
eSAmIEdQVVNoYWRlclN0YWdlQml0OjpGbGFnczo6RnJhZ21lbnQpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIXRyeVNldEJ1ZmZlck9uRW5jb2RlcihmcmFnbWVudEVuY29kZXIsICpidWZmZXJSZXNv
dXJjZSwgcmVzb3VyY2VCaW5kaW5nLmJpbmRpbmcsIGZ1bmN0aW9uTmFtZSkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYm91
bmRCdWZmZXJzLmFwcGVuZChidWZmZXJSZXNvdXJjZS0+YnVmZmVyLmNvcHlSZWYoKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEdQVUJpbmRHcm91cExheW91
dEJpbmRpbmc6OkJpbmRpbmdUeXBlOjpTYW1wbGVyOiB7CisgICAgICAgICAgICBhdXRvIHNhbXBs
ZXJSZXNvdXJjZSA9IHRyeUdldFJlc291cmNlQXNTYW1wbGVyKHJlc291cmNlQmluZGluZy5yZXNv
dXJjZSwgZnVuY3Rpb25OYW1lKTsKKyAgICAgICAgICAgIGlmICghc2FtcGxlclJlc291cmNlKQor
ICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgaWYgKGxheW91dEJp
bmRpbmcudmlzaWJpbGl0eSAmIEdQVVNoYWRlclN0YWdlQml0OjpGbGFnczo6VmVydGV4KSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCF0cnlTZXRTYW1wbGVyT25FbmNvZGVyKHZlcnRleEVuY29kZXIs
IHNhbXBsZXJSZXNvdXJjZS0+cGxhdGZvcm1TYW1wbGVyKCksIHJlc291cmNlQmluZGluZy5iaW5k
aW5nLCBmdW5jdGlvbk5hbWUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChsYXlvdXRCaW5kaW5nLnZpc2liaWxpdHkg
JiBHUFVTaGFkZXJTdGFnZUJpdDo6RmxhZ3M6OkZyYWdtZW50KSB7CisgICAgICAgICAgICAgICAg
aWYgKCF0cnlTZXRTYW1wbGVyT25FbmNvZGVyKGZyYWdtZW50RW5jb2Rlciwgc2FtcGxlclJlc291
cmNlLT5wbGF0Zm9ybVNhbXBsZXIoKSwgcmVzb3VyY2VCaW5kaW5nLmJpbmRpbmcsIGZ1bmN0aW9u
TmFtZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHUFVCaW5kR3Jv
dXBMYXlvdXRCaW5kaW5nOjpCaW5kaW5nVHlwZTo6U2FtcGxlZFRleHR1cmU6IHsKKyAgICAgICAg
ICAgIGF1dG8gdGV4dHVyZVJlc291cmNlID0gdHJ5R2V0UmVzb3VyY2VBc1RleHR1cmUocmVzb3Vy
Y2VCaW5kaW5nLnJlc291cmNlLCBmdW5jdGlvbk5hbWUpOworICAgICAgICAgICAgaWYgKCF0ZXh0
dXJlUmVzb3VyY2UpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAg
ICBpZiAobGF5b3V0QmluZGluZy52aXNpYmlsaXR5ICYgR1BVU2hhZGVyU3RhZ2VCaXQ6OkZsYWdz
OjpWZXJ0ZXgpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXRyeVNldFRleHR1cmVPbkVuY29kZXIo
dmVydGV4RW5jb2RlciwgdGV4dHVyZVJlc291cmNlLT5wbGF0Zm9ybVRleHR1cmUoKSwgcmVzb3Vy
Y2VCaW5kaW5nLmJpbmRpbmcsIGZ1bmN0aW9uTmFtZSkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGxheW91dEJpbmRp
bmcudmlzaWJpbGl0eSAmIEdQVVNoYWRlclN0YWdlQml0OjpGbGFnczo6RnJhZ21lbnQpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIXRyeVNldFRleHR1cmVPbkVuY29kZXIoZnJhZ21lbnRFbmNvZGVy
LCB0ZXh0dXJlUmVzb3VyY2UtPnBsYXRmb3JtVGV4dHVyZSgpLCByZXNvdXJjZUJpbmRpbmcuYmlu
ZGluZywgZnVuY3Rpb25OYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBib3VuZFRleHR1cmVzLmFwcGVuZCh0ZXh0dXJl
UmVzb3VyY2UucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgTE9HKFdlYkdQVSwgIiVzOiBSZXNvdXJj
ZSB0eXBlIG5vdCB5ZXQgaW1wbGVtZW50ZWQuIiwgZnVuY3Rpb25OYW1lKTsKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiBhZG9w
dFJlZihuZXcgR1BVQmluZEdyb3VwKFdURk1vdmUodmVydGV4QXJnc0J1ZmZlciksIFdURk1vdmUo
ZnJhZ21lbnRBcmdzQnVmZmVyKSwgV1RGTW92ZShib3VuZEJ1ZmZlcnMpLCBXVEZNb3ZlKGJvdW5k
VGV4dHVyZXMpKSk7Cit9CisgICAgCitHUFVCaW5kR3JvdXA6OkdQVUJpbmRHcm91cChSZXRhaW5Q
dHI8TVRMQnVmZmVyPiYmIHZlcnRleEJ1ZmZlciwgUmV0YWluUHRyPE1UTEJ1ZmZlcj4mJiBmcmFn
bWVudEJ1ZmZlciwgVmVjdG9yPFJlZjxHUFVCdWZmZXI+PiYmIGJ1ZmZlcnMsIFZlY3RvcjxSZWY8
R1BVVGV4dHVyZT4+JiYgdGV4dHVyZXMpCisgICAgOiBtX3ZlcnRleEFyZ3NCdWZmZXIoV1RGTW92
ZSh2ZXJ0ZXhCdWZmZXIpKQorICAgICwgbV9mcmFnbWVudEFyZ3NCdWZmZXIoV1RGTW92ZShmcmFn
bWVudEJ1ZmZlcikpCisgICAgLCBtX2JvdW5kQnVmZmVycyhXVEZNb3ZlKGJ1ZmZlcnMpKQorICAg
ICwgbV9ib3VuZFRleHR1cmVzKFdURk1vdmUodGV4dHVyZXMpKQoreworfQorICAgIAorfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQlBHVSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVQcm9ncmFtbWFi
bGVQYXNzRW5jb2Rlck1ldGFsLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L2NvY29hL0dQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyTWV0YWwubW0KaW5kZXggOTE1YWI2
MjBiYWQ4YjFhMGJlN2I1OGUxY2U3NWU5NTg5MjcyNTk3NC4uNmNhZGNmYmEwOGQ1Njg2YWQwZTk5
ZThiNTgzNTdmNjQxM2QxNzE1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L2NvY29hL0dQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyTWV0YWwubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVByb2dyYW1t
YWJsZVBhc3NFbmNvZGVyTWV0YWwubW0KQEAgLTI5LDcgKzI5LDYgQEAKICNpZiBFTkFCTEUoV0VC
R1BVKQogCiAjaW1wb3J0ICJHUFVCaW5kR3JvdXAuaCIKLSNpbXBvcnQgIkdQVUJpbmRHcm91cExh
eW91dEJpbmRpbmcuaCIKICNpbXBvcnQgIkdQVUNvbW1hbmRCdWZmZXIuaCIKICNpbXBvcnQgIkxv
Z2dpbmcuaCIKICNpbXBvcnQgPE1ldGFsL01ldGFsLmg+CkBAIC01MCwxNjAgKzQ5LDI0IEBAIHZv
aWQgR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXI6OmVuZFBhc3MoKQogCiB2b2lkIEdQVVByb2dy
YW1tYWJsZVBhc3NFbmNvZGVyOjpzZXRCaW5kR3JvdXAodW5zaWduZWQgaW5kZXgsIEdQVUJpbmRH
cm91cCYgYmluZEdyb3VwKQogewotICAgIGNvbnN0IGNoYXIqIGNvbnN0IGZ1bmN0aW9uTmFtZSA9
ICJHUFVQcm9ncmFtbWFibGVQYXNzRW5jb2Rlcjo6c2V0QmluZEdyb3VwKCkiOwotCiAgICAgaWYg
KCFwbGF0Zm9ybVBhc3NFbmNvZGVyKCkpIHsKLSAgICAgICAgTE9HKFdlYkdQVSwgIiVzOiBJbnZh
bGlkIG9wZXJhdGlvbjogRW5jb2RpbmcgaXMgZW5kZWQhIik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBjb25zdCBhdXRvJiB2ZXJ0ZXhBcmdzID0gYmluZEdyb3VwLmxheW91dCgpLnZl
cnRleEFyZ3VtZW50cygpOwotICAgIGNvbnN0IGF1dG8mIGZyYWdtZW50QXJncyA9IGJpbmRHcm91
cC5sYXlvdXQoKS5mcmFnbWVudEFyZ3VtZW50cygpOwotICAgIC8vIEZJWE1FOiBGaW5pc2ggc3Vw
cG9ydCBmb3IgY29tcHV0ZS4KLQotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQot
ICAgIGlmICh2ZXJ0ZXhBcmdzLmJ1ZmZlcikKLSAgICAgICAgc2V0VmVydGV4QnVmZmVyKHZlcnRl
eEFyZ3MuYnVmZmVyLmdldCgpLCAwLCBpbmRleCk7Ci0gICAgaWYgKGZyYWdtZW50QXJncy5idWZm
ZXIpCi0gICAgICAgIHNldEZyYWdtZW50QnVmZmVyKGZyYWdtZW50QXJncy5idWZmZXIuZ2V0KCks
IDAsIGluZGV4KTsKLQotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICAvLyBT
ZXQgZWFjaCByZXNvdXJjZSBvbiBlYWNoIE1UTEFyZ3VtZW50RW5jb2RlciBpdCBzaG91bGQgYmUg
dmlzaWJsZSBvbi4KLSAgICBjb25zdCBhdXRvJiBsYXlvdXRCaW5kaW5nc01hcCA9IGJpbmRHcm91
cC5sYXlvdXQoKS5iaW5kaW5nc01hcCgpOwotICAgIGZvciAoY29uc3QgYXV0byYgcmVzb3VyY2VC
aW5kaW5nIDogYmluZEdyb3VwLmJpbmRpbmdzKCkpIHsKLSAgICAgICAgYXV0byBsYXlvdXRJdGVy
YXRvciA9IGxheW91dEJpbmRpbmdzTWFwLmZpbmQocmVzb3VyY2VCaW5kaW5nLmJpbmRpbmcpOwot
ICAgICAgICBpZiAobGF5b3V0SXRlcmF0b3IgPT0gbGF5b3V0QmluZGluZ3NNYXAuZW5kKCkpIHsK
LSAgICAgICAgICAgIExPRyhXZWJHUFUsICIlczogR1BVQmluZEdyb3VwQmluZGluZyAlbHUgbm90
IGZvdW5kIGluIEdQVUJpbmRHcm91cExheW91dCEiLCBmdW5jdGlvbk5hbWUsIHJlc291cmNlQmlu
ZGluZy5iaW5kaW5nKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBh
dXRvIGxheW91dEJpbmRpbmcgPSBsYXlvdXRJdGVyYXRvci0+dmFsdWU7Ci0KLSAgICAgICAgc3dp
dGNoIChsYXlvdXRCaW5kaW5nLnR5cGUpIHsKLSAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgbW9y
ZSByZXNvdXJjZSB0eXBlcy4KLSAgICAgICAgY2FzZSBHUFVCaW5kR3JvdXBMYXlvdXRCaW5kaW5n
OjpCaW5kaW5nVHlwZTo6VW5pZm9ybUJ1ZmZlcjoKLSAgICAgICAgY2FzZSBHUFVCaW5kR3JvdXBM
YXlvdXRCaW5kaW5nOjpCaW5kaW5nVHlwZTo6U3RvcmFnZUJ1ZmZlcjogewotICAgICAgICAgICAg
aWYgKGxheW91dEJpbmRpbmcudmlzaWJpbGl0eSAmIEdQVVNoYWRlclN0YWdlQml0OjpGbGFnczo6
VmVydGV4KQotICAgICAgICAgICAgICAgIHNldFJlc291cmNlQXNCdWZmZXJPbkVuY29kZXIodmVy
dGV4QXJncy5lbmNvZGVyLmdldCgpLCByZXNvdXJjZUJpbmRpbmcsIGZ1bmN0aW9uTmFtZSk7Ci0g
ICAgICAgICAgICBpZiAobGF5b3V0QmluZGluZy52aXNpYmlsaXR5ICYgR1BVU2hhZGVyU3RhZ2VC
aXQ6OkZsYWdzOjpGcmFnbWVudCkKLSAgICAgICAgICAgICAgICBzZXRSZXNvdXJjZUFzQnVmZmVy
T25FbmNvZGVyKGZyYWdtZW50QXJncy5lbmNvZGVyLmdldCgpLCByZXNvdXJjZUJpbmRpbmcsIGZ1
bmN0aW9uTmFtZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IEdQVUJpbmRHcm91cExheW91dEJpbmRpbmc6OkJpbmRpbmdUeXBlOjpTYW1wbGVyOiB7Ci0gICAg
ICAgICAgICBpZiAobGF5b3V0QmluZGluZy52aXNpYmlsaXR5ICYgR1BVU2hhZGVyU3RhZ2VCaXQ6
OkZsYWdzOjpWZXJ0ZXgpCi0gICAgICAgICAgICAgICAgc2V0UmVzb3VyY2VBc1NhbXBsZXJPbkVu
Y29kZXIodmVydGV4QXJncy5lbmNvZGVyLmdldCgpLCByZXNvdXJjZUJpbmRpbmcsIGZ1bmN0aW9u
TmFtZSk7Ci0gICAgICAgICAgICBpZiAobGF5b3V0QmluZGluZy52aXNpYmlsaXR5ICYgR1BVU2hh
ZGVyU3RhZ2VCaXQ6OkZsYWdzOjpGcmFnbWVudCkKLSAgICAgICAgICAgICAgICBzZXRSZXNvdXJj
ZUFzU2FtcGxlck9uRW5jb2RlcihmcmFnbWVudEFyZ3MuZW5jb2Rlci5nZXQoKSwgcmVzb3VyY2VC
aW5kaW5nLCBmdW5jdGlvbk5hbWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBHUFVCaW5kR3JvdXBMYXlvdXRCaW5kaW5nOjpCaW5kaW5nVHlwZTo6U2FtcGxl
ZFRleHR1cmU6IHsKLSAgICAgICAgICAgIGlmIChsYXlvdXRCaW5kaW5nLnZpc2liaWxpdHkgJiBH
UFVTaGFkZXJTdGFnZUJpdDo6RmxhZ3M6OlZlcnRleCkKLSAgICAgICAgICAgICAgICBzZXRSZXNv
dXJjZUFzVGV4dHVyZU9uRW5jb2Rlcih2ZXJ0ZXhBcmdzLmVuY29kZXIuZ2V0KCksIHJlc291cmNl
QmluZGluZywgZnVuY3Rpb25OYW1lKTsKLSAgICAgICAgICAgIGlmIChsYXlvdXRCaW5kaW5nLnZp
c2liaWxpdHkgJiBHUFVTaGFkZXJTdGFnZUJpdDo6RmxhZ3M6OkZyYWdtZW50KQotICAgICAgICAg
ICAgICAgIHNldFJlc291cmNlQXNUZXh0dXJlT25FbmNvZGVyKGZyYWdtZW50QXJncy5lbmNvZGVy
LmdldCgpLCByZXNvdXJjZUJpbmRpbmcsIGZ1bmN0aW9uTmFtZSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgTE9HKFdlYkdQVSwg
IiVzOiBSZXNvdXJjZSB0eXBlIG5vdCB5ZXQgaW1wbGVtZW50ZWQuIiwgZnVuY3Rpb25OYW1lKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBHUFVQcm9n
cmFtbWFibGVQYXNzRW5jb2Rlcjo6c2V0UmVzb3VyY2VBc0J1ZmZlck9uRW5jb2RlcihNVExBcmd1
bWVudEVuY29kZXIgKmFyZ3VtZW50RW5jb2RlciwgY29uc3QgR1BVQmluZEdyb3VwQmluZGluZyYg
YmluZGluZywgY29uc3QgY2hhciogY29uc3QgZnVuY3Rpb25OYW1lKQotewotI2lmIExPR19ESVNB
QkxFRAotICAgIFVOVVNFRF9QQVJBTShmdW5jdGlvbk5hbWUpOwotI2VuZGlmCi0gICAgaWYgKCFh
cmd1bWVudEVuY29kZXIpIHsKLSAgICAgICAgTE9HKFdlYkdQVSwgIiVzOiBObyBhcmd1bWVudCBl
bmNvZGVyIGZvciByZXF1ZXN0ZWQgc3RhZ2UgZm91bmQhIiwgZnVuY3Rpb25OYW1lKTsKKyAgICAg
ICAgTE9HKFdlYkdQVSwgIkdQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyOjpzZXRCaW5kR3JvdXAo
KTogSW52YWxpZCBvcGVyYXRpb246IEVuY29kaW5nIGlzIGVuZGVkISIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQotCi0gICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEdQVUJ1ZmZlckJp
bmRpbmc+KGJpbmRpbmcucmVzb3VyY2UpKSB7Ci0gICAgICAgIExPRyhXZWJHUFUsICIlczogUmVz
b3VyY2UgaXMgbm90IGEgYnVmZmVyIHR5cGUhIiwgZnVuY3Rpb25OYW1lKTsKLSAgICAgICAgcmV0
dXJuOworICAgIAorICAgIGlmIChiaW5kR3JvdXAudmVydGV4QXJnc0J1ZmZlcigpKQorICAgICAg
ICBzZXRWZXJ0ZXhCdWZmZXIoYmluZEdyb3VwLnZlcnRleEFyZ3NCdWZmZXIoKSwgMCwgaW5kZXgp
OworICAgIGlmIChiaW5kR3JvdXAuZnJhZ21lbnRBcmdzQnVmZmVyKCkpCisgICAgICAgIHNldEZy
YWdtZW50QnVmZmVyKGJpbmRHcm91cC5mcmFnbWVudEFyZ3NCdWZmZXIoKSwgMCwgaW5kZXgpOwor
CisgICAgZm9yIChhdXRvJiBidWZmZXJSZWYgOiBiaW5kR3JvdXAuYm91bmRCdWZmZXJzKCkpIHsK
KyAgICAgICAgdXNlUmVzb3VyY2UoYnVmZmVyUmVmLT5wbGF0Zm9ybUJ1ZmZlcigpLCBidWZmZXJS
ZWYtPmlzUmVhZE9ubHkoKSA/IE1UTFJlc291cmNlVXNhZ2VSZWFkIDogTVRMUmVzb3VyY2VVc2Fn
ZVJlYWQgfCBNVExSZXNvdXJjZVVzYWdlV3JpdGUpOworICAgICAgICBtX2NvbW1hbmRCdWZmZXIt
PnVzZUJ1ZmZlcihidWZmZXJSZWYuY29weVJlZigpKTsKICAgICB9Ci0KLSAgICBhdXRvJiBidWZm
ZXJCaW5kaW5nID0gV1RGOjpnZXQ8R1BVQnVmZmVyQmluZGluZz4oYmluZGluZy5yZXNvdXJjZSk7
Ci0gICAgYXV0byYgYnVmZmVyUmVmID0gYnVmZmVyQmluZGluZy5idWZmZXI7Ci0gICAgYXV0byBt
dGxCdWZmZXIgPSBidWZmZXJSZWYtPnBsYXRmb3JtQnVmZmVyKCk7Ci0KLSAgICBpZiAoIW10bEJ1
ZmZlcikgewotICAgICAgICBMT0coV2ViR1BVLCAiJXM6IEludmFsaWQgTVRMQnVmZmVyIGluIEdQ
VUJ1ZmZlckJpbmRpbmchIiwgZnVuY3Rpb25OYW1lKTsKLSAgICAgICAgcmV0dXJuOworICAgIGZv
ciAoYXV0byYgdGV4dHVyZVJlZiA6IGJpbmRHcm91cC5ib3VuZFRleHR1cmVzKCkpIHsKKyAgICAg
ICAgdXNlUmVzb3VyY2UodGV4dHVyZVJlZi0+cGxhdGZvcm1UZXh0dXJlKCksIHRleHR1cmVSZWYt
PmlzUmVhZE9ubHkoKSA/IE1UTFJlc291cmNlVXNhZ2VSZWFkIDogTVRMUmVzb3VyY2VVc2FnZVJl
YWQgfCBNVExSZXNvdXJjZVVzYWdlV3JpdGUpOworICAgICAgICBtX2NvbW1hbmRCdWZmZXItPnVz
ZVRleHR1cmUodGV4dHVyZVJlZi5jb3B5UmVmKCkpOwogICAgIH0KLQotICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKLQotICAgIFthcmd1bWVudEVuY29kZXIgc2V0QnVmZmVyOm10bEJ1
ZmZlciBvZmZzZXQ6YnVmZmVyQmluZGluZy5vZmZzZXQgYXRJbmRleDpiaW5kaW5nLmJpbmRpbmdd
OwotICAgIHVzZVJlc291cmNlKG10bEJ1ZmZlciwgYnVmZmVyUmVmLT5pc1JlYWRPbmx5KCkgPyBN
VExSZXNvdXJjZVVzYWdlUmVhZCA6IE1UTFJlc291cmNlVXNhZ2VSZWFkIHwgTVRMUmVzb3VyY2VV
c2FnZVdyaXRlKTsKLQotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBtX2Nv
bW1hbmRCdWZmZXItPnVzZUJ1ZmZlcihidWZmZXJSZWYuY29weVJlZigpKTsKLX0KLQotdm9pZCBH
UFVQcm9ncmFtbWFibGVQYXNzRW5jb2Rlcjo6c2V0UmVzb3VyY2VBc1NhbXBsZXJPbkVuY29kZXIo
TVRMQXJndW1lbnRFbmNvZGVyICphcmd1bWVudEVuY29kZXIsIGNvbnN0IEdQVUJpbmRHcm91cEJp
bmRpbmcmIGJpbmRpbmcsIGNvbnN0IGNoYXIgKmNvbnN0IGZ1bmN0aW9uTmFtZSkKLXsKLSNpZiBM
T0dfRElTQUJMRUQKLSAgICBVTlVTRURfUEFSQU0oZnVuY3Rpb25OYW1lKTsKLSNlbmRpZgotICAg
IGlmICghYXJndW1lbnRFbmNvZGVyKSB7Ci0gICAgICAgIExPRyhXZWJHUFUsICIlczogTm8gYXJn
dW1lbnQgZW5jb2RlciBmb3IgcmVxdWVzdGVkIHN0YWdlIGZvdW5kISIsIGZ1bmN0aW9uTmFtZSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRp
dmU8UmVmPEdQVVNhbXBsZXI+PihiaW5kaW5nLnJlc291cmNlKSkgewotICAgICAgICBMT0coV2Vi
R1BVLCAiJXM6IFJlc291cmNlIGlzIG5vdCBhIEdQVVNhbXBsZXIhIiwgZnVuY3Rpb25OYW1lKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8mIHNhbXBsZXJSZWYgPSBXVEY6Omdl
dDxSZWY8R1BVU2FtcGxlcj4+KGJpbmRpbmcucmVzb3VyY2UpOwotICAgIGF1dG8gbXRsU2FtcGxl
ciA9IHNhbXBsZXJSZWYtPnBsYXRmb3JtU2FtcGxlcigpOwotCi0gICAgaWYgKCFtdGxTYW1wbGVy
KSB7Ci0gICAgICAgIExPRyhXZWJHUFUsICIlczogSW52YWxpZCBNVExTYW1wbGVyU3RhdGUgaW4g
R1BVU2FtcGxlciBiaW5kaW5nISIsIGZ1bmN0aW9uTmFtZSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgW2FyZ3VtZW50RW5j
b2RlciBzZXRTYW1wbGVyU3RhdGU6bXRsU2FtcGxlciBhdEluZGV4OmJpbmRpbmcuYmluZGluZ107
Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLX0KLQotdm9pZCBHUFVQcm9ncmFtbWFi
bGVQYXNzRW5jb2Rlcjo6c2V0UmVzb3VyY2VBc1RleHR1cmVPbkVuY29kZXIoTVRMQXJndW1lbnRF
bmNvZGVyICphcmd1bWVudEVuY29kZXIsIGNvbnN0IEdQVUJpbmRHcm91cEJpbmRpbmcmIGJpbmRp
bmcsIGNvbnN0IGNoYXIqIGNvbnN0IGZ1bmN0aW9uTmFtZSkKLXsKLSNpZiBMT0dfRElTQUJMRUQK
LSAgICBVTlVTRURfUEFSQU0oZnVuY3Rpb25OYW1lKTsKLSNlbmRpZgotICAgIGlmICghYXJndW1l
bnRFbmNvZGVyKSB7Ci0gICAgICAgIExPRyhXZWJHUFUsICIlczogTm8gYXJndW1lbnQgZW5jb2Rl
ciBmb3IgcmVxdWVzdGVkIHN0YWdlIGZvdW5kISIsIGZ1bmN0aW9uTmFtZSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPEdQVVRl
eHR1cmU+PihiaW5kaW5nLnJlc291cmNlKSkgewotICAgICAgICBMT0coV2ViR1BVLCAiJXM6IFJl
c291cmNlIGlzIG5vdCBhIEdQVVRleHR1cmVWaWV3ISIsIGZ1bmN0aW9uTmFtZSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvJiB0ZXh0dXJlUmVmID0gV1RGOjpnZXQ8UmVmPEdQ
VVRleHR1cmU+PihiaW5kaW5nLnJlc291cmNlKTsKLSAgICBhdXRvIG10bFRleHR1cmUgPSB0ZXh0
dXJlUmVmLT5wbGF0Zm9ybVRleHR1cmUoKTsKLQotICAgIGlmICghbXRsVGV4dHVyZSkgewotICAg
ICAgICBMT0coV2ViR1BVLCAiJXM6IEludmFsaWQgTVRMVGV4dHVyZSBpbiBHUFVUZXh0dXJlVmll
dyBiaW5kaW5nISIsIGZ1bmN0aW9uTmFtZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBbYXJndW1lbnRFbmNvZGVyIHNl
dFRleHR1cmU6bXRsVGV4dHVyZSBhdEluZGV4OmJpbmRpbmcuYmluZGluZ107Ci0gICAgdXNlUmVz
b3VyY2UobXRsVGV4dHVyZSwgdGV4dHVyZVJlZi0+aXNSZWFkT25seSgpID8gTVRMUmVzb3VyY2VV
c2FnZVJlYWQgOiBNVExSZXNvdXJjZVVzYWdlUmVhZCB8IE1UTFJlc291cmNlVXNhZ2VXcml0ZSk7
Ci0KLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgbV9jb21tYW5kQnVmZmVy
LT51c2VUZXh0dXJlKHRleHR1cmVSZWYuY29weVJlZigpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L2NvY29hL0dQVVJlbmRlclBhc3NFbmNvZGVyTWV0YWwubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGFzc0VuY29kZXJNZXRhbC5tbQppbmRl
eCBlMWM0OWE5ZmE5MDdmZjEwZjUxMjQ0MzgwOWNhMWFiMjE4MTY2Y2Y2Li4xNWUzNzVmMmJmNDZi
ZTYxOTQxMDFjNTQzZDFjYTA5ZmNlNjIyMGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGFzc0VuY29kZXJNZXRhbC5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVy
UGFzc0VuY29kZXJNZXRhbC5tbQpAQCAtMjY2LDggKzI2Niw5IEBAIHZvaWQgR1BVUmVuZGVyUGFz
c0VuY29kZXI6OnVzZVJlc291cmNlKE1UTFJlc291cmNlICpyZXNvdXJjZSwgdW5zaWduZWQgdXNh
Z2UpCiAgICAgICAgIExPRyhXZWJHUFUsICJHUFVSZW5kZXJQYXNzRW5jb2RlcjogSW52YWxpZCBv
cGVyYXRpb246IEVuY29kaW5nIGlzIGVuZGVkISIpOwogICAgICAgICByZXR1cm47CiAgICAgfQot
CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogICAgIFttX3BsYXRmb3JtUmVuZGVy
UGFzc0VuY29kZXIgdXNlUmVzb3VyY2U6cmVzb3VyY2UgdXNhZ2U6dXNhZ2VdOworICAgIEVORF9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKIHZvaWQgR1BVUmVuZGVyUGFzc0VuY29kZXI6OnNl
dFZlcnRleEJ1ZmZlcihNVExCdWZmZXIgKmJ1ZmZlciwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25l
ZCBpbmRleCkKQEAgLTI3Niw4ICsyNzcsOSBAQCB2b2lkIEdQVVJlbmRlclBhc3NFbmNvZGVyOjpz
ZXRWZXJ0ZXhCdWZmZXIoTVRMQnVmZmVyICpidWZmZXIsIHVuc2lnbmVkIG9mZnNldCwgdQogICAg
ICAgICBMT0coV2ViR1BVLCAiR1BVUmVuZGVyUGFzc0VuY29kZXI6IEludmFsaWQgb3BlcmF0aW9u
OiBFbmNvZGluZyBpcyBlbmRlZCEiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQorICAgIEJF
R0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICBbbV9wbGF0Zm9ybVJlbmRlclBhc3NFbmNv
ZGVyIHNldFZlcnRleEJ1ZmZlcjpidWZmZXIgb2Zmc2V0Om9mZnNldCBhdEluZGV4OmluZGV4XTsK
KyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCiB2b2lkIEdQVVJlbmRlclBhc3NF
bmNvZGVyOjpzZXRGcmFnbWVudEJ1ZmZlcihNVExCdWZmZXIgKmJ1ZmZlciwgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBpbmRleCkKQEAgLTI4Niw4ICsyODgsOSBAQCB2b2lkIEdQVVJlbmRlclBh
c3NFbmNvZGVyOjpzZXRGcmFnbWVudEJ1ZmZlcihNVExCdWZmZXIgKmJ1ZmZlciwgdW5zaWduZWQg
b2Zmc2V0LAogICAgICAgICBMT0coV2ViR1BVLCAiR1BVUmVuZGVyUGFzc0VuY29kZXI6IEludmFs
aWQgb3BlcmF0aW9uOiBFbmNvZGluZyBpcyBlbmRlZCEiKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLQorICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICBbbV9wbGF0Zm9ybVJl
bmRlclBhc3NFbmNvZGVyIHNldEZyYWdtZW50QnVmZmVyOmJ1ZmZlciBvZmZzZXQ6b2Zmc2V0IGF0
SW5kZXg6aW5kZXhdOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKICNlbmRp
ZiAvLyBVU0UoTUVUQUwpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364298</attachid>
            <date>2019-03-11 15:25:21 -0700</date>
            <delta_ts>2019-03-11 19:40:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195519-20190311152520.patch</filename>
            <type>text/plain</type>
            <size>43836</size>
            <attacher name="Justin Fan">justin_fan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQyNzEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDQzYzlkNjE3YmZiMDE5
YjNkNTFkNGJlZmFkNDRlMGYwZDEzODk0Mi4uOTgyN2NhYzgxZjYxYjlhMjRiMWNkZTE5ZjgzN2Rl
NDZjNDkxZDk5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY3IEBACisyMDE5LTAzLTExICBKdXN0
aW4gRmFuICA8anVzdGluX2ZhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYiBHUFVdIEJpbmRH
cm91cHMvQXJndW1lbnQgYnVmZmVyczogTW92ZSBNVExCdWZmZXIgY3JlYXRpb24gZnJvbSBhbmQg
R1BVQmluZEdyb3VwIHZhbGlkYXRpb24gdG8gR1BVRGV2aWNlLmNyZWF0ZUJpbmRHcm91cAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1NTE5CisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS80ODc4MTI5Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBNZXRhbCdzIEFyZ3VtZW50IEJ1ZmZlcnMgc2hvdWxkIG5v
dCBiZSB0aWVkIGRpcmVjdGx5IHRvIEdQVUJpbmRHcm91cExheW91dDsgcmF0aGVyLCBjcmVhdGUg
dGhlIE1UTEJ1ZmZlciAKKyAgICAgICAgaW4gR1BVQmluZEdyb3VwIGNyZWF0aW9uIHByb2Nlc3Mu
CisgICAgICAgIE1vdmUgR1BVQmluZEdyb3VwIHZhbGlkYXRpb24gb3V0IG9mIHNldEJpbmRHcm91
cCBhbmQgdG8gR1BVQmluZEdyb3VwIGNyZWF0aW9uIGZvciBwZXJmb3JtYW5jZS4KKworICAgICAg
ICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLiBObyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmdwdS9XZWJHUFVEZXZpY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR1BVRGV2aWNlOjpjcmVhdGVCaW5kR3JvdXAgY29uc3QpOgorICAgICAgICAqIFNvdXJjZXMu
dHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9H
UFVCaW5kR3JvdXAuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dw
dS9HUFVCaW5kR3JvdXAuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdQVUJpbmRHcm91cDo6dmVydGV4
QXJnc0J1ZmZlcik6IEEgYnVmZmVyIHRoYXQgYXJndW1lbnRzIHdpbGwgYmUgZW5jb2RlZCBpbnRv
IGR1cmluZyBzZXRCaW5kR3JvdXAuCisgICAgICAgIChXZWJDb3JlOjpHUFVCaW5kR3JvdXA6OmZy
YWdtZW50QXJnc0J1ZmZlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6R1BVQmluZEdyb3Vw
Ojpib3VuZEJ1ZmZlcnMgY29uc3QpOiBBIGxpc3Qgb2YgcmVzb3VyY2VzIHRoYXQgYXJlIGJvdW5k
IGJ5IHRoaXMgR1BVQmluZEdyb3VwLgorICAgICAgICAoV2ViQ29yZTo6R1BVQmluZEdyb3VwOjpi
b3VuZFRleHR1cmVzIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpHUFVCaW5kR3Jv
dXA6OmxheW91dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHUFVCaW5kR3Jv
dXA6OmJpbmRpbmdzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvR1BVQmluZEdyb3VwTGF5b3V0Lmg6IE5vIGxvbmdlciBjcmVhdGluZyBhbmQgcmV0YWlu
aW5nIE1UTEJ1ZmZlcnMuCisgICAgICAgIChXZWJDb3JlOjpHUFVCaW5kR3JvdXBMYXlvdXQ6OnZl
cnRleEVuY29kZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1BVQmluZEdyb3VwTGF5b3V0
OjpmcmFnbWVudEVuY29kZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1BVQmluZEdyb3Vw
TGF5b3V0Ojpjb21wdXRlRW5jb2RlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHUFVCaW5k
R3JvdXBMYXlvdXQ6OkFyZ3VtZW50RW5jb2RlckJ1ZmZlcjo6aXNWYWxpZCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHUFVCaW5kR3JvdXBMYXlvdXQ6OnZlcnRleEFyZ3VtZW50
cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHUFVCaW5kR3JvdXBMYXlvdXQ6
OmZyYWdtZW50QXJndW1lbnRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdQ
VUJpbmRHcm91cExheW91dDo6Y29tcHV0ZUFyZ3VtZW50cyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUJpbmRHcm91cExheW91
dE1ldGFsLm1tOgorICAgICAgICAoV2ViQ29yZTo6dHJ5Q3JlYXRlTXRsQXJndW1lbnRFbmNvZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdQVUJpbmRHcm91cExheW91dDo6dHJ5Q3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdQVUJpbmRHcm91cExheW91dDo6R1BVQmluZEdyb3VwTGF5b3V0KToK
KyAgICAgICAgKFdlYkNvcmU6OnRyeUNyZWF0ZUFyZ3VtZW50RW5jb2RlckFuZEJ1ZmZlcik6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUJpbmRHcm91
cE1ldGFsLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnRyeUNyZWF0ZUFyZ3VtZW50QnVm
ZmVyKTogQ3JlYXRlIGFuZCBhc3NvY2lhdGUgdGhlIE1UTEJ1ZmZlciB0aGF0IGJhY2tzIHRoZSBN
VExBcmd1bWVudEVuY29kZXIuCisgICAgICAgIChXZWJDb3JlOjp0cnlHZXRSZXNvdXJjZUFzQnVm
ZmVyQmluZGluZyk6IFZhbGlkYXRlIGEgR1BVQmluZGluZ1Jlc291cmNlLgorICAgICAgICAoV2Vi
Q29yZTo6dHJ5U2V0QnVmZmVyT25FbmNvZGVyKTogRW5jb2RlcyBhIEdQVUJ1ZmZlckJpbmRpbmcn
cyBNVExCdWZmZXIgb24gYSBNVExBcmd1bWVudEVuY29kZXIuCisgICAgICAgIChXZWJDb3JlOjp0
cnlHZXRSZXNvdXJjZUFzU2FtcGxlcik6IERpdHRvLCBmb3IgR1BVU2FtcGxlcnMuCisgICAgICAg
IChXZWJDb3JlOjp0cnlTZXRTYW1wbGVyT25FbmNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnRy
eUdldFJlc291cmNlQXNUZXh0dXJlKTogRGl0dG8sIGZvciBHUFVUZXh0dXJlcy4KKyAgICAgICAg
KFdlYkNvcmU6OnRyeVNldFRleHR1cmVPbkVuY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1BV
QmluZEdyb3VwOjp0cnlDcmVhdGUpOiBNb3N0IHNldEJpbmRHcm91cCB2YWxpZGF0aW9uIG1vdmVk
IGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpHUFVCaW5kR3JvdXA6OkdQVUJpbmRHcm91cCk6IFJl
dGFpbnMgdGhlIHJlc291cmNlIHJlZmVyZW5jZXMgbmVlZGVkIGZvciBzZXRCaW5kR3JvdXAuIAor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVQcm9ncmFtbWFibGVQYXNz
RW5jb2Rlck1ldGFsLm1tOgorICAgICAgICAoV2ViQ29yZTo6R1BVUHJvZ3JhbW1hYmxlUGFzc0Vu
Y29kZXI6OnNldEJpbmRHcm91cCk6IE1vc3QgdmFsaWRhdGlvbiBtb3ZlZCB0byBHUFVCaW5kR3Jv
dXA6OnRyeUNyZWF0ZSgpLgorICAgICAgICAoV2ViQ29yZTo6R1BVUHJvZ3JhbW1hYmxlUGFzc0Vu
Y29kZXI6OnNldFJlc291cmNlQXNCdWZmZXJPbkVuY29kZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXI6OnNldFJlc291cmNlQXNTYW1wbGVy
T25FbmNvZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdQVVByb2dyYW1tYWJsZVBh
c3NFbmNvZGVyOjpzZXRSZXNvdXJjZUFzVGV4dHVyZU9uRW5jb2Rlcik6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBhc3NFbmNvZGVyTWV0
YWwubW06CisgICAgICAgIChXZWJDb3JlOjpHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6dXNlUmVzb3Vy
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6R1BVUmVuZGVyUGFzc0VuY29kZXI6OnNldFZlcnRleEJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6c2V0RnJhZ21l
bnRCdWZmZXIpOgorCisgICAgICAgIE1pc2M6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L0dQVUNvbW1hbmRCdWZmZXIuY3BwL2g6IE1vdmUgbWlzc2luZyBpbmNsdWRlcyB0byBoZWFk
ZXIuCisKIDIwMTktMDMtMTEgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgogCiAgICAgICAgIFVucmV2aWV3ZWQsIE5vbi1HU3RyZWFtZXItR0wgYnVpbGQgZml4IGFmdGVy
IHIyNDI3MDEuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJH
UFVEZXZpY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVRGV2aWNl
LmNwcAppbmRleCAyMjk0Zjg1YjUwMzk4ZmFhNzMwOGQ2ODEwNjQ3N2IyMjVkMDgxZjA3Li4zMTVj
MTQ5N2I0NjRjNDM4OTU0NjhhNzBjY2IzNjI2ODRiZGEzYzBmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVEZXZpY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVURldmljZS5jcHAKQEAgLTExNSw3ICsxMTUsNyBAQCBS
ZWY8V2ViR1BVQmluZEdyb3VwPiBXZWJHUFVEZXZpY2U6OmNyZWF0ZUJpbmRHcm91cChXZWJHUFVC
aW5kR3JvdXBEZXNjcmlwdG9yJiYgZAogICAgIGlmICghZ3B1RGVzY3JpcHRvcikKICAgICAgICAg
cmV0dXJuIFdlYkdQVUJpbmRHcm91cDo6Y3JlYXRlKG51bGxwdHIpOwogCi0gICAgYXV0byBiaW5k
R3JvdXAgPSBHUFVCaW5kR3JvdXA6OmNyZWF0ZShXVEZNb3ZlKCpncHVEZXNjcmlwdG9yKSk7Cisg
ICAgYXV0byBiaW5kR3JvdXAgPSBHUFVCaW5kR3JvdXA6OnRyeUNyZWF0ZSgqZ3B1RGVzY3JpcHRv
cik7CiAgICAgcmV0dXJuIFdlYkdQVUJpbmRHcm91cDo6Y3JlYXRlKFdURk1vdmUoYmluZEdyb3Vw
KSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggZDJmY2RmMjBiNjAzZjBiZWJiNDgzM2Y3ZTE4NjQ1
OGFmNWMxZWFhOS4uNTE3MDU5ZWY1NDA4ZDViMDI1NWU1NWU4MGFkNDMyZTAzNDcxNTI3YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQKQEAgLTE4MTMsNyArMTgxMyw2IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlQWxwaGEuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBo
aWMuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAKIAot
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVUJpbmRHcm91cC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2dwdS9HUFVEZXZpY2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVUGlwZWxpbmVMYXlv
dXQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXIu
Y3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNl
L1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAppbmRleCA3MzRlZjc4NWYzYTgxOTczNDBmYjAyMTA0
NWFjNjFmY2FiMDM0ZGQyLi43OWE5N2QxYTc0ZTUzNTY1YWQ1YjE0NDgyYTYwYzhmY2Y3NTA0MDFj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKQEAgLTMxNyw2ICszMTcsNyBAQCBwbGF0Zm9ybS9n
cmFwaGljcy9jdi9QaXhlbEJ1ZmZlckNvbmZvcm1lckNWLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y3YvVGV4dHVyZUNhY2hlQ1YubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2N2L1ZpZGVvVGV4dHVyZUNv
cGllckNWLmNwcAogCitwbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQmluZEdyb3VwTWV0
YWwubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVCaW5kR3JvdXBMYXlvdXRNZXRh
bC5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUJ1ZmZlck1ldGFsLm1tCiBwbGF0
Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQ29tbWFuZEJ1ZmZlck1ldGFsLm1tCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNTgy
YzBlOGNmN2QwMWQ0ZjdkYWJiNTY4MDg4MThmYmExMjdlMmM5Zi4uMDFiYWNjOTk5ZGI1OGZjMzcx
YjA4YjVjNjcxNTkxZDZiMWQ0ODA1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTQwOTQsNiArMTQwOTQsNyBAQAogCQlEMDg0
MDMzRDIyMUUxODY0MDAwMDcyMDUgLyogV2ViR1BVQmluZEdyb3VwRGVzY3JpcHRvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXZWJHUFVCaW5kR3JvdXBEZXNjcmlwdG9yLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDA4NDNBNEEyMEZFQkUzRDAwRkU4NjBFIC8qIEdyYXBoaWNz
Q29udGV4dDNETWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRleHQzRE1hbmFn
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDA4NDNBNEMyMEZFQzE2NTAwRkU4
NjBFIC8qIEdyYXBoaWNzQ29udGV4dDNETWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBH
cmFwaGljc0NvbnRleHQzRE1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlEMDg1RTY0QTIyMzZERUFFMDBDM0UxRTIgLyogR1BVQmluZEdyb3VwTWV0YWwubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBHUFVCaW5kR3JvdXBNZXRhbC5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRDA4NkZFOTYwOUQ1M0FBQjAwNUJDNzREIC8qIFVubGlua0NvbW1hbmQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5saW5rQ29tbWFuZC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlEMDg2RkU5NzA5RDUzQUFCMDA1QkM3NEQgLyogVW5saW5r
Q29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmxpbmtD
b21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDA4N0NFMzgyMUFDQTk0
MjAwQkRFMTc0IC8qIEdQVUNvbW1hbmRCdWZmZXJNZXRhbC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IEdQVUNvbW1hbmRCdWZmZXJNZXRhbC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTE0MTQwLDcgKzE0MTQxLDYgQEAKIAkJRDBCRTEwNTIyMUU2QUEwRDAwRTQyQTg5IC8qIFdl
YkdQVUJpbmRHcm91cERlc2NyaXB0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR1BVQmluZEdyb3Vw
RGVzY3JpcHRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMEJFMTA1MzIxRTZB
QTBEMDBFNDJBODkgLyogV2ViR1BVQmluZEdyb3VwRGVzY3JpcHRvci5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViR1BV
QmluZEdyb3VwRGVzY3JpcHRvci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQw
QkUxMDVFMjFFNkJBRDMwMEU0MkE4OSAvKiBHUFVCaW5kR3JvdXAuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
R1BVQmluZEdyb3VwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUQwQkUxMDVGMjFF
NkJBRDMwMEU0MkE4OSAvKiBHUFVCaW5kR3JvdXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR1BV
QmluZEdyb3VwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDBCRTEwNjAyMUU2
QzBFQjAwRTQyQTg5IC8qIFdlYkdQVUJpbmRHcm91cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHUFVC
aW5kR3JvdXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDBCRTEwNjEyMUU2QzBF
QjAwRTQyQTg5IC8qIFdlYkdQVUJpbmRHcm91cC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJH
UFVCaW5kR3JvdXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMEJFMTA2MjIx
RTZDMEVCMDBFNDJBODkgLyogV2ViR1BVQmluZEdyb3VwLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJHUFVCaW5kR3Jv
dXAuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTg0ODksNyArMTg0ODksNiBA
QAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJRDA4N0NFMzcyMUFDQTk0MjAwQkRFMTc0IC8qIGNvY29h
ICovLAogCQkJCTMxMkZGOENFMjFBNEMzM0YwMEVCMTk5RCAvKiBsZWdhY3kgKi8sCi0JCQkJRDBC
RTEwNUYyMUU2QkFEMzAwRTQyQTg5IC8qIEdQVUJpbmRHcm91cC5jcHAgKi8sCiAJCQkJRDBCRTEw
NUUyMUU2QkFEMzAwRTQyQTg5IC8qIEdQVUJpbmRHcm91cC5oICovLAogCQkJCUQwQkUxMDRFMjFF
Njk1RTIwMEU0MkE4OSAvKiBHUFVCaW5kR3JvdXBCaW5kaW5nLmggKi8sCiAJCQkJRDBCRTEwNTEy
MUU2QTcwRTAwRTQyQTg5IC8qIEdQVUJpbmRHcm91cERlc2NyaXB0b3IuaCAqLywKQEAgLTI2MjIx
LDYgKzI2MjIwLDcgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJ
RDAyMzJCNTgyMUNCNDlCNzAwOTQ4M0I5IC8qIEdQVUJpbmRHcm91cExheW91dE1ldGFsLm1tICov
LAorCQkJCUQwODVFNjRBMjIzNkRFQUUwMEMzRTFFMiAvKiBHUFVCaW5kR3JvdXBNZXRhbC5tbSAq
LywKIAkJCQlEMEQ4NjQ5MTIxQjc2MEM0MDAzQzk4M0MgLyogR1BVQnVmZmVyTWV0YWwubW0gKi8s
CiAJCQkJRDA4N0NFMzgyMUFDQTk0MjAwQkRFMTc0IC8qIEdQVUNvbW1hbmRCdWZmZXJNZXRhbC5t
bSAqLywKIAkJCQlEMDg3Q0UzQzIxQUNBOTQyMDBCREUxNzQgLyogR1BVRGV2aWNlTWV0YWwubW0g
Ki8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BV
QmluZEdyb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVC
aW5kR3JvdXAuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGZkMzYxYWQ5ZWE1
YzQ4MzRkZGQyN2Y3OTdkMWY2MDllMjhiYzA4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9H
UFVCaW5kR3JvdXAuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHUFVCaW5kR3JvdXAuaCIKLQotI2lm
IEVOQUJMRShXRUJHUFUpCi0KLSNpbmNsdWRlICJHUFVCaW5kR3JvdXBCaW5kaW5nLmgiCi0jaW5j
bHVkZSAiR1BVQmluZEdyb3VwRGVzY3JpcHRvci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LVJlZjxHUFVCaW5kR3JvdXA+IEdQVUJpbmRHcm91cDo6Y3JlYXRlKEdQVUJpbmRHcm91cERlc2Ny
aXB0b3ImJiBkZXNjcmlwdG9yKQotewotICAgIC8vIEZJWE1FOiBVbmZpbmlzaGVkIHN0dWIuCi0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR1BVQmluZEdyb3VwKFdURk1vdmUoZGVzY3JpcHRvcikp
KTsKLX0KLQotR1BVQmluZEdyb3VwOjpHUFVCaW5kR3JvdXAoR1BVQmluZEdyb3VwRGVzY3JpcHRv
ciYmIGRlc2NyaXB0b3IpCi0gICAgOiBtX2xheW91dChXVEZNb3ZlKGRlc2NyaXB0b3IubGF5b3V0
KSkKLSAgICAsIG1fYmluZGluZ3MoV1RGTW92ZShkZXNjcmlwdG9yLmJpbmRpbmdzKSkKLXsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVCaW5kR3Jv
dXAuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVCaW5kR3JvdXAu
aAppbmRleCAyY2RjMDczNzM2MDExZWFhMDJiMGU2NjM3ZWEyZDQzMTBjNmU3MzI0Li44MWFlNjQx
YTEwZTU1MGZlNWQ5MThlNmQwMzcyODYxY2Y5ZGM4NmJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVQmluZEdyb3VwLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVUJpbmRHcm91cC5oCkBAIC0yNywyOCArMjcs
NDAgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKLSNpbmNsdWRlICJHUFVCaW5kR3JvdXBCaW5k
aW5nLmgiCi0jaW5jbHVkZSAiR1BVQmluZEdyb3VwTGF5b3V0LmgiCi0jaW5jbHVkZSA8d3RmL1Jl
Zi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
K09CSkNfUFJPVE9DT0woTVRMQnVmZmVyKTsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFz
cyBHUFVCdWZmZXI7CitjbGFzcyBHUFVUZXh0dXJlOworCiBzdHJ1Y3QgR1BVQmluZEdyb3VwRGVz
Y3JpcHRvcjsKIAogY2xhc3MgR1BVQmluZEdyb3VwIDogcHVibGljIFJlZkNvdW50ZWQ8R1BVQmlu
ZEdyb3VwPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxHUFVCaW5kR3JvdXA+IGNyZWF0ZShH
UFVCaW5kR3JvdXBEZXNjcmlwdG9yJiYpOwotCi0gICAgY29uc3QgR1BVQmluZEdyb3VwTGF5b3V0
JiBsYXlvdXQoKSBjb25zdCB7IHJldHVybiBtX2xheW91dC5nZXQoKTsgfQotICAgIGNvbnN0IFZl
Y3RvcjxHUFVCaW5kR3JvdXBCaW5kaW5nPiYgYmluZGluZ3MoKSBjb25zdCB7IHJldHVybiBtX2Jp
bmRpbmdzOyB9CisgICAgc3RhdGljIFJlZlB0cjxHUFVCaW5kR3JvdXA+IHRyeUNyZWF0ZShjb25z
dCBHUFVCaW5kR3JvdXBEZXNjcmlwdG9yJik7CisgICAgCisjaWYgVVNFKE1FVEFMKQorICAgIE1U
TEJ1ZmZlciAqdmVydGV4QXJnc0J1ZmZlcigpIHsgcmV0dXJuIG1fdmVydGV4QXJnc0J1ZmZlci5n
ZXQoKTsgfQorICAgIE1UTEJ1ZmZlciAqZnJhZ21lbnRBcmdzQnVmZmVyKCkgeyByZXR1cm4gbV9m
cmFnbWVudEFyZ3NCdWZmZXIuZ2V0KCk7IH0KKyNlbmRpZgorICAgIGNvbnN0IFZlY3RvcjxSZWY8
R1BVQnVmZmVyPj4mIGJvdW5kQnVmZmVycygpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRCdWZmZXJz
OyB9CisgICAgY29uc3QgVmVjdG9yPFJlZjxHUFVUZXh0dXJlPj4mIGJvdW5kVGV4dHVyZXMoKSBj
b25zdCB7IHJldHVybiBtX2JvdW5kVGV4dHVyZXM7IH0KIAogcHJpdmF0ZToKLSAgICBleHBsaWNp
dCBHUFVCaW5kR3JvdXAoR1BVQmluZEdyb3VwRGVzY3JpcHRvciYmKTsKLQotICAgIFJlZjxHUFVC
aW5kR3JvdXBMYXlvdXQ+IG1fbGF5b3V0OwotICAgIFZlY3RvcjxHUFVCaW5kR3JvdXBCaW5kaW5n
PiBtX2JpbmRpbmdzOworI2lmIFVTRShNRVRBTCkKKyAgICBHUFVCaW5kR3JvdXAoUmV0YWluUHRy
PE1UTEJ1ZmZlcj4mJiB2ZXJ0ZXhCdWZmZXIsIFJldGFpblB0cjxNVExCdWZmZXI+JiYgZnJhZ21l
bnRCdWZmZXIsIFZlY3RvcjxSZWY8R1BVQnVmZmVyPj4mJiwgVmVjdG9yPFJlZjxHUFVUZXh0dXJl
Pj4mJik7CisgICAgCisgICAgUmV0YWluUHRyPE1UTEJ1ZmZlcj4gbV92ZXJ0ZXhBcmdzQnVmZmVy
OworICAgIFJldGFpblB0cjxNVExCdWZmZXI+IG1fZnJhZ21lbnRBcmdzQnVmZmVyOworI2VuZGlm
CisgICAgVmVjdG9yPFJlZjxHUFVCdWZmZXI+PiBtX2JvdW5kQnVmZmVyczsKKyAgICBWZWN0b3I8
UmVmPEdQVVRleHR1cmU+PiBtX2JvdW5kVGV4dHVyZXM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
R1BVQmluZEdyb3VwTGF5b3V0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvR1BVQmluZEdyb3VwTGF5b3V0LmgKaW5kZXggYmE4NjZhOWVkMmI2ZjcyMTc3N2U4MTY4ZDQ4
ZDhmNDI0MWQwZGU0NC4uOWIwNWMwMTdiNTNiMGMyMzdmZmJkZWM1YmY0NjU1YjhiZWIwMTU0MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVUJpbmRH
cm91cExheW91dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9H
UFVCaW5kR3JvdXBMYXlvdXQuaApAQCAtNTAsMjQgKzUwLDE4IEBAIHB1YmxpYzoKICAgICB1c2lu
ZyBCaW5kaW5nc01hcFR5cGUgPSBIYXNoTWFwPHVuc2lnbmVkIGxvbmcgbG9uZywgR1BVQmluZEdy
b3VwTGF5b3V0QmluZGluZywgV1RGOjpJbnRIYXNoPHVuc2lnbmVkIGxvbmcgbG9uZz4sIFdURjo6
VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQgbG9uZyBsb25nPj47CiAgICAg
Y29uc3QgQmluZGluZ3NNYXBUeXBlJiBiaW5kaW5nc01hcCgpIGNvbnN0IHsgcmV0dXJuIG1fYmlu
ZGluZ3NNYXA7IH0KICNpZiBVU0UoTUVUQUwpCi0gICAgc3RydWN0IEFyZ3VtZW50RW5jb2RlckJ1
ZmZlciB7Ci0gICAgICAgIFJldGFpblB0cjxNVExBcmd1bWVudEVuY29kZXI+IGVuY29kZXI7Ci0g
ICAgICAgIFJldGFpblB0cjxNVExCdWZmZXI+IGJ1ZmZlcjsKLQotICAgICAgICBib29sIGlzVmFs
aWQoKSBjb25zdCB7IHJldHVybiBlbmNvZGVyICYmIGJ1ZmZlcjsgfQotICAgIH07Ci0gICAgY29u
c3QgQXJndW1lbnRFbmNvZGVyQnVmZmVyJiB2ZXJ0ZXhBcmd1bWVudHMoKSBjb25zdCB7IHJldHVy
biBtX3ZlcnRleEFyZ3VtZW50czsgfQotICAgIGNvbnN0IEFyZ3VtZW50RW5jb2RlckJ1ZmZlciYg
ZnJhZ21lbnRBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX2ZyYWdtZW50QXJndW1lbnRzOyB9
Ci0gICAgY29uc3QgQXJndW1lbnRFbmNvZGVyQnVmZmVyJiBjb21wdXRlQXJndW1lbnRzKCkgY29u
c3QgeyByZXR1cm4gbV9jb21wdXRlQXJndW1lbnRzOyB9CisgICAgTVRMQXJndW1lbnRFbmNvZGVy
ICp2ZXJ0ZXhFbmNvZGVyKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0ZXhFbmNvZGVyLmdldCgpOyB9
CisgICAgTVRMQXJndW1lbnRFbmNvZGVyICpmcmFnbWVudEVuY29kZXIoKSBjb25zdCB7IHJldHVy
biBtX2ZyYWdtZW50RW5jb2Rlci5nZXQoKTsgfQorICAgIE1UTEFyZ3VtZW50RW5jb2RlciAqY29t
cHV0ZUVuY29kZXIoKSBjb25zdCB7IHJldHVybiBtX2NvbXB1dGVFbmNvZGVyLmdldCgpOyB9CiAj
ZW5kaWYgLy8gVVNFKE1FVEFMKQogCiBwcml2YXRlOgogI2lmIFVTRShNRVRBTCkKLSAgICBHUFVC
aW5kR3JvdXBMYXlvdXQoQmluZGluZ3NNYXBUeXBlJiYsIEFyZ3VtZW50RW5jb2RlckJ1ZmZlciYm
IHZlcnRleCwgQXJndW1lbnRFbmNvZGVyQnVmZmVyJiYgZnJhZ21lbnQsIEFyZ3VtZW50RW5jb2Rl
ckJ1ZmZlciYmIGNvbXB1dGUpOworICAgIEdQVUJpbmRHcm91cExheW91dChCaW5kaW5nc01hcFR5
cGUmJiwgUmV0YWluUHRyPE1UTEFyZ3VtZW50RW5jb2Rlcj4mJiB2ZXJ0ZXgsIFJldGFpblB0cjxN
VExBcmd1bWVudEVuY29kZXI+JiYgZnJhZ21lbnQsIFJldGFpblB0cjxNVExBcmd1bWVudEVuY29k
ZXI+JiYgY29tcHV0ZSk7CiAKLSAgICBBcmd1bWVudEVuY29kZXJCdWZmZXIgbV92ZXJ0ZXhBcmd1
bWVudHM7Ci0gICAgQXJndW1lbnRFbmNvZGVyQnVmZmVyIG1fZnJhZ21lbnRBcmd1bWVudHM7Ci0g
ICAgQXJndW1lbnRFbmNvZGVyQnVmZmVyIG1fY29tcHV0ZUFyZ3VtZW50czsKKyAgICBSZXRhaW5Q
dHI8TVRMQXJndW1lbnRFbmNvZGVyPiBtX3ZlcnRleEVuY29kZXI7CisgICAgUmV0YWluUHRyPE1U
TEFyZ3VtZW50RW5jb2Rlcj4gbV9mcmFnbWVudEVuY29kZXI7CisgICAgUmV0YWluUHRyPE1UTEFy
Z3VtZW50RW5jb2Rlcj4gbV9jb21wdXRlRW5jb2RlcjsKICNlbmRpZiAvLyBVU0UoTUVUQUwpCiAg
ICAgY29uc3QgQmluZGluZ3NNYXBUeXBlIG1fYmluZGluZ3NNYXA7CiB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVUNvbW1hbmRCdWZmZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVDb21tYW5kQnVmZmVyLmgK
aW5kZXggM2E5MjhiYjBhZGUxNmZkMWJlMzY2MmRjMTA1Y2E1YWJiYmZhNDllZC4uMmQzMjQwMTc4
ZmRhYTU1ZWY3Y2FhMjI2YjQ4Y2RhYTIxZDQzNjk0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVUNvbW1hbmRCdWZmZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVQ29tbWFuZEJ1ZmZlci5oCkBAIC0yNyw3
ICsyNyw5IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCisjaW5jbHVkZSAiR1BVQnVmZmVyLmgi
CiAjaW5jbHVkZSAiR1BVT3JpZ2luM0QuaCIKKyNpbmNsdWRlICJHUFVUZXh0dXJlLmgiCiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgpAQCAtMzgsOSArNDAsNyBAQCBPQkpDX1BST1RPQ09MKE1UTENv
bW1hbmRCdWZmZXIpOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEdQVUJ1ZmZlcjsK
IGNsYXNzIEdQVURldmljZTsKLWNsYXNzIEdQVVRleHR1cmU7CiAKIHN0cnVjdCBHUFVFeHRlbnQz
RDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQ
VVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXIuaAppbmRleCAzY2RjMTlmOWI1OGI4
NzdlMDE4MjNkMTQzMjJkMzJjYmYyZTAyYTkxLi5mYTE2OGRjMjlkNzVjOWRjMTIzYjUyMjA4Y2Vl
YzJjY2VjMjYxNjIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXIuaApAQCAtMzAs
MTIgKzMwLDExIEBACiAjaW5jbHVkZSAiR1BVQmluZEdyb3VwQmluZGluZy5oIgogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CiAKLU9CSkNfUFJPVE9DT0woTVRMQXJndW1lbnRFbmNvZGVyKTsK
ICNpZiBVU0UoTUVUQUwpCiBPQkpDX1BST1RPQ09MKE1UTEJ1ZmZlcik7CiBPQkpDX1BST1RPQ09M
KE1UTENvbW1hbmRFbmNvZGVyKTsKIE9CSkNfUFJPVE9DT0woTVRMUmVzb3VyY2UpOwotI2VuZGlm
IC8vIFVTRShNRVRBTCkKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTYxLDkg
KzYwLDYgQEAgcHJvdGVjdGVkOgogCiBwcml2YXRlOgogI2lmIFVTRShNRVRBTCkKLSAgICB2b2lk
IHNldFJlc291cmNlQXNCdWZmZXJPbkVuY29kZXIoTVRMQXJndW1lbnRFbmNvZGVyICosIGNvbnN0
IEdQVUJpbmRHcm91cEJpbmRpbmcmLCBjb25zdCBjaGFyKiBjb25zdCk7Ci0gICAgdm9pZCBzZXRS
ZXNvdXJjZUFzU2FtcGxlck9uRW5jb2RlcihNVExBcmd1bWVudEVuY29kZXIgKiwgY29uc3QgR1BV
QmluZEdyb3VwQmluZGluZyYsIGNvbnN0IGNoYXIqIGNvbnN0KTsKLSAgICB2b2lkIHNldFJlc291
cmNlQXNUZXh0dXJlT25FbmNvZGVyKE1UTEFyZ3VtZW50RW5jb2RlciAqLCBjb25zdCBHUFVCaW5k
R3JvdXBCaW5kaW5nJiwgY29uc3QgY2hhciogY29uc3QpOwogICAgIHZpcnR1YWwgdm9pZCB1c2VS
ZXNvdXJjZShNVExSZXNvdXJjZSAqLCB1bnNpZ25lZCkgPSAwOwogCiAgICAgLy8gUmVuZGVyIGNv
bW1hbmQgZW5jb2RlciBtZXRob2RzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUJpbmRHcm91cExheW91dE1ldGFsLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUJpbmRHcm91cExheW91dE1l
dGFsLm1tCmluZGV4IGFkMjM5N2NkYzY3MTUzZjYwYzFiNjViYzhhZDk1Yzc0ZDljNmVlODIuLjhl
NDZlNzZjN2ZkZjg4NmI3MDcxOWRjNGZkNWJiOTdkM2JlMTIxNmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVCaW5kR3JvdXBMYXlvdXRN
ZXRhbC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2Ev
R1BVQmluZEdyb3VwTGF5b3V0TWV0YWwubW0KQEAgLTYzLDI4ICs2MywxOCBAQCBzdGF0aWMgdm9p
ZCBhcHBlbmRBcmd1bWVudFRvQXJyYXkoQXJndW1lbnRBcnJheSYgYXJyYXksIFJldGFpblB0cjxN
VExBcmd1bWVudERlcwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLXN0YXRp
YyBHUFVCaW5kR3JvdXBMYXlvdXQ6OkFyZ3VtZW50RW5jb2RlckJ1ZmZlciB0cnlDcmVhdGVBcmd1
bWVudEVuY29kZXJBbmRCdWZmZXIoY29uc3QgR1BVRGV2aWNlJiBkZXZpY2UsIEFyZ3VtZW50QXJy
YXkgYXJyYXkpCitzdGF0aWMgUmV0YWluUHRyPE1UTEFyZ3VtZW50RW5jb2Rlcj4gdHJ5Q3JlYXRl
TXRsQXJndW1lbnRFbmNvZGVyKGNvbnN0IEdQVURldmljZSYgZGV2aWNlLCBBcmd1bWVudEFycmF5
IGFycmF5KQogewotICAgIEdQVUJpbmRHcm91cExheW91dDo6QXJndW1lbnRFbmNvZGVyQnVmZmVy
IGFyZ3M7CisgICAgUmV0YWluUHRyPE1UTEFyZ3VtZW50RW5jb2Rlcj4gZW5jb2RlcjsKIAogICAg
IEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICBhcmdzLmVuY29kZXIgPSBhZG9wdE5T
KFtkZXZpY2UucGxhdGZvcm1EZXZpY2UoKSBuZXdBcmd1bWVudEVuY29kZXJXaXRoQXJndW1lbnRz
OmFycmF5LmdldCgpXSk7CisgICAgZW5jb2RlciA9IGFkb3B0TlMoW2RldmljZS5wbGF0Zm9ybURl
dmljZSgpIG5ld0FyZ3VtZW50RW5jb2RlcldpdGhBcmd1bWVudHM6YXJyYXkuZ2V0KCldKTsKICAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIGlmICghYXJncy5lbmNvZGVyKSB7Cisg
ICAgaWYgKCFlbmNvZGVyKSB7CiAgICAgICAgIExPRyhXZWJHUFUsICJHUFVCaW5kR3JvdXBMYXlv
dXQ6OnRyeUNyZWF0ZSgpOiBVbmFibGUgdG8gY3JlYXRlIE1UTEFyZ3VtZW50RW5jb2RlciEiKTsK
LSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7Ci0gICAgYXJncy5idWZmZXIgPSBhZG9wdE5TKFtkZXZpY2UucGxhdGZvcm1EZXZpY2Uo
KSBuZXdCdWZmZXJXaXRoTGVuZ3RoOmFyZ3MuZW5jb2Rlci5nZXQoKS5lbmNvZGVkTGVuZ3RoIG9w
dGlvbnM6MF0pOwotICAgIFthcmdzLmVuY29kZXIgc2V0QXJndW1lbnRCdWZmZXI6YXJncy5idWZm
ZXIuZ2V0KCkgb2Zmc2V0OjBdOwotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAg
aWYgKCFhcmdzLmJ1ZmZlcikgewotICAgICAgICBMT0coV2ViR1BVLCAiR1BVQmluZEdyb3VwTGF5
b3V0Ojp0cnlDcmVhdGUoKTogVW5hYmxlIHRvIGNyZWF0ZSBNVExCdWZmZXIgZnJvbSBNVExBcmd1
bWVudEVuY29kZXIhIik7Ci0gICAgICAgIHJldHVybiB7IH07CisgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KLQotICAgIHJldHVybiBhcmdzOworICAgIHJldHVybiBlbmNvZGVyOwogfTsK
IAogUmVmUHRyPEdQVUJpbmRHcm91cExheW91dD4gR1BVQmluZEdyb3VwTGF5b3V0Ojp0cnlDcmVh
dGUoY29uc3QgR1BVRGV2aWNlJiBkZXZpY2UsIGNvbnN0IEdQVUJpbmRHcm91cExheW91dERlc2Ny
aXB0b3ImIGRlc2NyaXB0b3IpCkBAIC0xMDgsMTQgKzk4LDEzIEBAIFJlZlB0cjxHUFVCaW5kR3Jv
dXBMYXlvdXQ+IEdQVUJpbmRHcm91cExheW91dDo6dHJ5Q3JlYXRlKGNvbnN0IEdQVURldmljZSYg
ZGV2aWNlCiAgICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICAgICAgbXRs
QXJndW1lbnQgPSBhZG9wdE5TKFtNVExBcmd1bWVudERlc2NyaXB0b3IgbmV3XSk7CiAgICAgICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KICAgICAgICAgaWYgKCFtdGxBcmd1bWVudCkg
ewogICAgICAgICAgICAgTE9HKFdlYkdQVSwgIkdQVUJpbmRHcm91cExheW91dDo6dHJ5Q3JlYXRl
KCk6IFVuYWJsZSB0byBjcmVhdGUgTVRMQXJndW1lbnREZXNjcmlwdG9yIGZvciBiaW5kaW5nICVs
dSEiLCBiaW5kaW5nLmJpbmRpbmcpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
ICAgIH0KIAotICAgICAgICBtdGxBcmd1bWVudC5nZXQoKS5kYXRhVHlwZSA9IE1UTERhdGFUeXBl
Rm9yQmluZGluZ1R5cGUoYmluZGluZy50eXBlKTsKLSAgICAgICAgbXRsQXJndW1lbnQuZ2V0KCku
aW5kZXggPSBiaW5kaW5nLmJpbmRpbmc7CisgICAgICAgIFttdGxBcmd1bWVudCBzZXREYXRhVHlw
ZTpNVExEYXRhVHlwZUZvckJpbmRpbmdUeXBlKGJpbmRpbmcudHlwZSldOworICAgICAgICBbbXRs
QXJndW1lbnQgc2V0SW5kZXg6YmluZGluZy5iaW5kaW5nXTsKIAogICAgICAgICBpZiAoYmluZGlu
Zy52aXNpYmlsaXR5ICYgR1BVU2hhZGVyU3RhZ2VCaXQ6OkZsYWdzOjpWZXJ0ZXgpCiAgICAgICAg
ICAgICBhcHBlbmRBcmd1bWVudFRvQXJyYXkodmVydGV4QXJnc0FycmF5LCBtdGxBcmd1bWVudCk7
CkBAIC0xMjUsMjggKzExNCwyOCBAQCBSZWZQdHI8R1BVQmluZEdyb3VwTGF5b3V0PiBHUFVCaW5k
R3JvdXBMYXlvdXQ6OnRyeUNyZWF0ZShjb25zdCBHUFVEZXZpY2UmIGRldmljZQogICAgICAgICAg
ICAgYXBwZW5kQXJndW1lbnRUb0FycmF5KGNvbXB1dGVBcmdzQXJyYXksIG10bEFyZ3VtZW50KTsK
ICAgICB9CiAKLSAgICBBcmd1bWVudEVuY29kZXJCdWZmZXIgdmVydGV4LCBmcmFnbWVudCwgY29t
cHV0ZTsKKyAgICBSZXRhaW5QdHI8TVRMQXJndW1lbnRFbmNvZGVyPiB2ZXJ0ZXgsIGZyYWdtZW50
LCBjb21wdXRlOwogCiAgICAgaWYgKHZlcnRleEFyZ3NBcnJheSkgewotICAgICAgICBpZiAoISh2
ZXJ0ZXggPSB0cnlDcmVhdGVBcmd1bWVudEVuY29kZXJBbmRCdWZmZXIoZGV2aWNlLCB2ZXJ0ZXhB
cmdzQXJyYXkpKS5pc1ZhbGlkKCkpCisgICAgICAgIGlmICghKHZlcnRleCA9IHRyeUNyZWF0ZU10
bEFyZ3VtZW50RW5jb2RlcihkZXZpY2UsIHZlcnRleEFyZ3NBcnJheSkpKQogICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIGlmIChmcmFnbWVudEFyZ3NBcnJheSkgewotICAg
ICAgICBpZiAoIShmcmFnbWVudCA9IHRyeUNyZWF0ZUFyZ3VtZW50RW5jb2RlckFuZEJ1ZmZlcihk
ZXZpY2UsIGZyYWdtZW50QXJnc0FycmF5KSkuaXNWYWxpZCgpKQorICAgICAgICBpZiAoIShmcmFn
bWVudCA9IHRyeUNyZWF0ZU10bEFyZ3VtZW50RW5jb2RlcihkZXZpY2UsIGZyYWdtZW50QXJnc0Fy
cmF5KSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgaWYgKGNvbXB1
dGVBcmdzQXJyYXkpIHsKLSAgICAgICAgaWYgKCEoY29tcHV0ZSA9IHRyeUNyZWF0ZUFyZ3VtZW50
RW5jb2RlckFuZEJ1ZmZlcihkZXZpY2UsIGNvbXB1dGVBcmdzQXJyYXkpKS5pc1ZhbGlkKCkpCisg
ICAgICAgIGlmICghKGNvbXB1dGUgPSB0cnlDcmVhdGVNdGxBcmd1bWVudEVuY29kZXIoZGV2aWNl
LCBjb21wdXRlQXJnc0FycmF5KSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CiAKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdQVUJpbmRHcm91cExheW91dChXVEZNb3ZlKGJp
bmRpbmdzTWFwKSwgV1RGTW92ZSh2ZXJ0ZXgpLCBXVEZNb3ZlKGZyYWdtZW50KSwgV1RGTW92ZShj
b21wdXRlKSkpOwogfQogCi1HUFVCaW5kR3JvdXBMYXlvdXQ6OkdQVUJpbmRHcm91cExheW91dChC
aW5kaW5nc01hcFR5cGUmJiBiaW5kaW5nc01hcCwgQXJndW1lbnRFbmNvZGVyQnVmZmVyJiYgdmVy
dGV4LCBBcmd1bWVudEVuY29kZXJCdWZmZXImJiBmcmFnbWVudCwgQXJndW1lbnRFbmNvZGVyQnVm
ZmVyJiYgY29tcHV0ZSkKLSAgICA6IG1fdmVydGV4QXJndW1lbnRzKFdURk1vdmUodmVydGV4KSkK
LSAgICAsIG1fZnJhZ21lbnRBcmd1bWVudHMoV1RGTW92ZShmcmFnbWVudCkpCi0gICAgLCBtX2Nv
bXB1dGVBcmd1bWVudHMoV1RGTW92ZShjb21wdXRlKSkKK0dQVUJpbmRHcm91cExheW91dDo6R1BV
QmluZEdyb3VwTGF5b3V0KEJpbmRpbmdzTWFwVHlwZSYmIGJpbmRpbmdzTWFwLCBSZXRhaW5QdHI8
TVRMQXJndW1lbnRFbmNvZGVyPiYmIHZlcnRleCwgUmV0YWluUHRyPE1UTEFyZ3VtZW50RW5jb2Rl
cj4mJiBmcmFnbWVudCwgUmV0YWluUHRyPE1UTEFyZ3VtZW50RW5jb2Rlcj4mJiBjb21wdXRlKQor
ICAgIDogbV92ZXJ0ZXhFbmNvZGVyKFdURk1vdmUodmVydGV4KSkKKyAgICAsIG1fZnJhZ21lbnRF
bmNvZGVyKFdURk1vdmUoZnJhZ21lbnQpKQorICAgICwgbV9jb21wdXRlRW5jb2RlcihXVEZNb3Zl
KGNvbXB1dGUpKQogICAgICwgbV9iaW5kaW5nc01hcChXVEZNb3ZlKGJpbmRpbmdzTWFwKSkKIHsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2Nv
YS9HUFVCaW5kR3JvdXBNZXRhbC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9jb2NvYS9HUFVCaW5kR3JvdXBNZXRhbC5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMzE1NzRjYjIxNTli
OGM3MWU3NDYwMzA1OWQ4NzRjNTVkODZmMTg1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUJpbmRHcm91cE1ldGFsLm1tCkBA
IC0wLDAgKzEsMjUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0
ICJHUFVCaW5kR3JvdXAuaCIKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbXBvcnQgIkdQVUJp
bmRHcm91cEJpbmRpbmcuaCIKKyNpbXBvcnQgIkdQVUJpbmRHcm91cERlc2NyaXB0b3IuaCIKKyNp
bXBvcnQgIkdQVUJpbmRHcm91cExheW91dC5oIgorI2ltcG9ydCAiR1BVQnVmZmVyLmgiCisjaW1w
b3J0ICJHUFVTYW1wbGVyLmgiCisjaW1wb3J0ICJHUFVUZXh0dXJlLmgiCisjaW1wb3J0ICJMb2dn
aW5nLmgiCisjaW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5oPgorI2ltcG9ydCA8d3Rm
L09wdGlvbmFsLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFJldGFpblB0cjxN
VExCdWZmZXI+IHRyeUNyZWF0ZUFyZ3VtZW50QnVmZmVyKE1UTEFyZ3VtZW50RW5jb2RlciAqZW5j
b2RlcikKK3sKKyAgICBSZXRhaW5QdHI8TVRMQnVmZmVyPiBidWZmZXI7CisgICAgQkVHSU5fQkxP
Q0tfT0JKQ19FWENFUFRJT05TOworICAgIGJ1ZmZlciA9IGFkb3B0TlMoW2VuY29kZXIuZGV2aWNl
IG5ld0J1ZmZlcldpdGhMZW5ndGg6ZW5jb2Rlci5lbmNvZGVkTGVuZ3RoIG9wdGlvbnM6MF0pOwor
ICAgIFtlbmNvZGVyIHNldEFyZ3VtZW50QnVmZmVyOmJ1ZmZlci5nZXQoKSBvZmZzZXQ6MF07Cisg
ICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICByZXR1cm4gYnVmZmVyOworfQorICAg
IAorc3RhdGljIE9wdGlvbmFsPEdQVUJ1ZmZlckJpbmRpbmc+IHRyeUdldFJlc291cmNlQXNCdWZm
ZXJCaW5kaW5nKGNvbnN0IEdQVUJpbmRpbmdSZXNvdXJjZSYgcmVzb3VyY2UsIGNvbnN0IGNoYXIq
IGNvbnN0IGZ1bmN0aW9uTmFtZSkKK3sKKyNpZiBMT0dfRElTQUJMRUQKKyAgICBVTlVTRURfUEFS
QU0oZnVuY3Rpb25OYW1lKTsKKyNlbmRpZgorICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2
ZTxHUFVCdWZmZXJCaW5kaW5nPihyZXNvdXJjZSkpIHsKKyAgICAgICAgTE9HKFdlYkdQVSwgIiVz
OiBSZXNvdXJjZSBpcyBub3QgYSBidWZmZXIgdHlwZSEiLCBmdW5jdGlvbk5hbWUpOworICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KKyAgICBhdXRvJiBidWZmZXJCaW5kaW5nID0g
V1RGOjpnZXQ8R1BVQnVmZmVyQmluZGluZz4ocmVzb3VyY2UpOworICAgIGlmICghYnVmZmVyQmlu
ZGluZy5idWZmZXItPnBsYXRmb3JtQnVmZmVyKCkpIHsKKyAgICAgICAgTE9HKFdlYkdQVSwgIiVz
OiBJbnZhbGlkIE1UTEJ1ZmZlciBpbiBHUFVCdWZmZXJCaW5kaW5nISIsIGZ1bmN0aW9uTmFtZSk7
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQorICAgIHJldHVybiBHUFVCdWZm
ZXJCaW5kaW5nIHsgYnVmZmVyQmluZGluZy5idWZmZXIuY29weVJlZigpLCBidWZmZXJCaW5kaW5n
Lm9mZnNldCwgYnVmZmVyQmluZGluZy5zaXplIH07Cit9CisKK3N0YXRpYyBib29sIHRyeVNldEJ1
ZmZlck9uRW5jb2RlcihNVExBcmd1bWVudEVuY29kZXIgKmFyZ3VtZW50RW5jb2RlciwgY29uc3Qg
R1BVQnVmZmVyQmluZGluZyYgYnVmZmVyQmluZGluZywgdW5zaWduZWQgaW5kZXgsIGNvbnN0IGNo
YXIqIGNvbnN0IGZ1bmN0aW9uTmFtZSkKK3sKKyNpZiBMT0dfRElTQUJMRUQKKyAgICBVTlVTRURf
UEFSQU0oZnVuY3Rpb25OYW1lKTsKKyNlbmRpZgorICAgIGlmICghYXJndW1lbnRFbmNvZGVyKSB7
CisgICAgICAgIExPRyhXZWJHUFUsICIlczogTm8gYXJndW1lbnQgZW5jb2RlciBmb3IgcmVxdWVz
dGVkIHN0YWdlIGZvdW5kISIsIGZ1bmN0aW9uTmFtZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIFthcmd1bWVudEVu
Y29kZXIgc2V0QnVmZmVyOmJ1ZmZlckJpbmRpbmcuYnVmZmVyLT5wbGF0Zm9ybUJ1ZmZlcigpIG9m
ZnNldDpidWZmZXJCaW5kaW5nLm9mZnNldCBhdEluZGV4OmluZGV4XTsKKyAgICBFTkRfQkxPQ0tf
T0JKQ19FWENFUFRJT05TOworICAgIHJldHVybiB0cnVlOworfQorICAgIAorc3RhdGljIFJlZlB0
cjxHUFVTYW1wbGVyPiB0cnlHZXRSZXNvdXJjZUFzU2FtcGxlcihjb25zdCBHUFVCaW5kaW5nUmVz
b3VyY2UmIHJlc291cmNlLCBjb25zdCBjaGFyKiBjb25zdCBmdW5jdGlvbk5hbWUpCit7CisjaWYg
TE9HX0RJU0FCTEVECisgICAgVU5VU0VEX1BBUkFNKGZ1bmN0aW9uTmFtZSk7CisjZW5kaWYKKyAg
ICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPEdQVVNhbXBsZXI+PihyZXNvdXJjZSkp
IHsKKyAgICAgICAgTE9HKFdlYkdQVSwgIiVzOiBSZXNvdXJjZSBpcyBub3QgYSBHUFVTYW1wbGVy
ISIsIGZ1bmN0aW9uTmFtZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBh
dXRvJiBzYW1wbGVyUmVmID0gV1RGOjpnZXQ8UmVmPEdQVVNhbXBsZXI+PihyZXNvdXJjZSk7Cisg
ICAgaWYgKCFzYW1wbGVyUmVmLT5wbGF0Zm9ybVNhbXBsZXIoKSkgeworICAgICAgICBMT0coV2Vi
R1BVLCAiJXM6IEludmFsaWQgTVRMU2FtcGxlclN0YXRlIGluIEdQVVNhbXBsZXIgYmluZGluZyEi
LCBmdW5jdGlvbk5hbWUpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0
dXJuIHNhbXBsZXJSZWYuY29weVJlZigpOworfQorCitzdGF0aWMgYm9vbCB0cnlTZXRTYW1wbGVy
T25FbmNvZGVyKE1UTEFyZ3VtZW50RW5jb2RlciAqYXJndW1lbnRFbmNvZGVyLCBNVExTYW1wbGVy
U3RhdGUgKnNhbXBsZXIsIHVuc2lnbmVkIGluZGV4LCBjb25zdCBjaGFyICpjb25zdCBmdW5jdGlv
bk5hbWUpCit7CisjaWYgTE9HX0RJU0FCTEVECisgICAgVU5VU0VEX1BBUkFNKGZ1bmN0aW9uTmFt
ZSk7CisjZW5kaWYKKyAgICBpZiAoIWFyZ3VtZW50RW5jb2RlcikgeworICAgICAgICBMT0coV2Vi
R1BVLCAiJXM6IE5vIGFyZ3VtZW50IGVuY29kZXIgZm9yIHJlcXVlc3RlZCBzdGFnZSBmb3VuZCEi
LCBmdW5jdGlvbk5hbWUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIEJFR0lO
X0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICBbYXJndW1lbnRFbmNvZGVyIHNldFNhbXBsZXJT
dGF0ZTpzYW1wbGVyIGF0SW5kZXg6aW5kZXhdOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElP
TlM7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBSZWZQdHI8R1BVVGV4dHVyZT4gdHJ5
R2V0UmVzb3VyY2VBc1RleHR1cmUoY29uc3QgR1BVQmluZGluZ1Jlc291cmNlJiByZXNvdXJjZSwg
Y29uc3QgY2hhciogY29uc3QgZnVuY3Rpb25OYW1lKQorICAgIHsKKyNpZiBMT0dfRElTQUJMRUQK
KyAgICBVTlVTRURfUEFSQU0oZnVuY3Rpb25OYW1lKTsKKyNlbmRpZgorICAgIGlmICghV1RGOjpo
b2xkc19hbHRlcm5hdGl2ZTxSZWY8R1BVVGV4dHVyZT4+KHJlc291cmNlKSkgeworICAgICAgICBM
T0coV2ViR1BVLCAiJXM6IFJlc291cmNlIGlzIG5vdCBhIEdQVVRleHR1cmVWaWV3ISIsIGZ1bmN0
aW9uTmFtZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBhdXRvJiB0ZXh0
dXJlUmVmID0gV1RGOjpnZXQ8UmVmPEdQVVRleHR1cmU+PihyZXNvdXJjZSk7CisgICAgaWYgKCF0
ZXh0dXJlUmVmLT5wbGF0Zm9ybVRleHR1cmUoKSkgeworICAgICAgICBMT0coV2ViR1BVLCAiJXM6
IEludmFsaWQgTVRMVGV4dHVyZSBpbiBHUFVUZXh0dXJlVmlldyBiaW5kaW5nISIsIGZ1bmN0aW9u
TmFtZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICByZXR1cm4gdGV4dHVy
ZVJlZi5jb3B5UmVmKCk7Cit9CisKK3N0YXRpYyBib29sIHRyeVNldFRleHR1cmVPbkVuY29kZXIo
TVRMQXJndW1lbnRFbmNvZGVyICphcmd1bWVudEVuY29kZXIsIE1UTFRleHR1cmUgKnRleHR1cmUs
IHVuc2lnbmVkIGluZGV4LCBjb25zdCBjaGFyKiBjb25zdCBmdW5jdGlvbk5hbWUpCit7CisjaWYg
TE9HX0RJU0FCTEVECisgICAgVU5VU0VEX1BBUkFNKGZ1bmN0aW9uTmFtZSk7CisjZW5kaWYKKyAg
ICBpZiAoIWFyZ3VtZW50RW5jb2RlcikgeworICAgICAgICBMT0coV2ViR1BVLCAiJXM6IE5vIGFy
Z3VtZW50IGVuY29kZXIgZm9yIHJlcXVlc3RlZCBzdGFnZSBmb3VuZCEiLCBmdW5jdGlvbk5hbWUp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUzsKKyAgICBbYXJndW1lbnRFbmNvZGVyIHNldFRleHR1cmU6dGV4dHVyZSBhdEluZGV4
OmluZGV4XTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIHJldHVybiB0cnVl
OworfQorICAgIAorUmVmUHRyPEdQVUJpbmRHcm91cD4gR1BVQmluZEdyb3VwOjp0cnlDcmVhdGUo
Y29uc3QgR1BVQmluZEdyb3VwRGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBjb25zdCBj
aGFyKiBjb25zdCBmdW5jdGlvbk5hbWUgPSAiR1BVQmluZEdyb3VwOjp0cnlDcmVhdGUoKSI7Cisg
ICAgCisgICAgTVRMQXJndW1lbnRFbmNvZGVyICp2ZXJ0ZXhFbmNvZGVyID0gZGVzY3JpcHRvci5s
YXlvdXQtPnZlcnRleEVuY29kZXIoKTsKKyAgICBNVExBcmd1bWVudEVuY29kZXIgKmZyYWdtZW50
RW5jb2RlciA9IGRlc2NyaXB0b3IubGF5b3V0LT5mcmFnbWVudEVuY29kZXIoKTsKKyAgICAvLyBG
SVhNRTogRmluaXNoIHN1cHBvcnQgZm9yIGNvbXB1dGUuCisgICAgCisgICAgUmV0YWluUHRyPE1U
TEJ1ZmZlcj4gdmVydGV4QXJnc0J1ZmZlcjsKKyAgICBpZiAodmVydGV4RW5jb2RlcikgeworICAg
ICAgICBpZiAoISh2ZXJ0ZXhBcmdzQnVmZmVyID0gdHJ5Q3JlYXRlQXJndW1lbnRCdWZmZXIodmVy
dGV4RW5jb2RlcikpKSB7CisgICAgICAgICAgICBMT0coV2ViR1BVLCAiJXM6IFVuYWJsZSB0byBj
cmVhdGUgTVRMQnVmZmVyIGZvciB2ZXJ0ZXggYXJndW1lbnQgYnVmZmVyISIsIGZ1bmN0aW9uTmFt
ZSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgIH0KKyAgICBS
ZXRhaW5QdHI8TVRMQnVmZmVyPiBmcmFnbWVudEFyZ3NCdWZmZXI7CisgICAgaWYgKGZyYWdtZW50
RW5jb2RlcikgeworICAgICAgICBpZiAoIShmcmFnbWVudEFyZ3NCdWZmZXIgPSB0cnlDcmVhdGVB
cmd1bWVudEJ1ZmZlcihmcmFnbWVudEVuY29kZXIpKSkgeworICAgICAgICAgICAgTE9HKFdlYkdQ
VSwgIiVzOiBVbmFibGUgdG8gY3JlYXRlIE1UTEJ1ZmZlciBmb3IgZnJhZ21lbnQgYXJndW1lbnQg
YnVmZmVyISIsIGZ1bmN0aW9uTmFtZSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICBWZWN0b3I8UmVmPEdQVUJ1ZmZlcj4+IGJvdW5kQnVm
ZmVyczsKKyAgICBWZWN0b3I8UmVmPEdQVVRleHR1cmU+PiBib3VuZFRleHR1cmVzOworCisgICAg
Ly8gU2V0IGVhY2ggcmVzb3VyY2Ugb24gZWFjaCBNVExBcmd1bWVudEVuY29kZXIgaXQgc2hvdWxk
IGJlIHZpc2libGUgb24uCisgICAgY29uc3QgYXV0byYgbGF5b3V0QmluZGluZ3NNYXAgPSBkZXNj
cmlwdG9yLmxheW91dC0+YmluZGluZ3NNYXAoKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHJlc291
cmNlQmluZGluZyA6IGRlc2NyaXB0b3IuYmluZGluZ3MpIHsKKyAgICAgICAgYXV0byBsYXlvdXRJ
dGVyYXRvciA9IGxheW91dEJpbmRpbmdzTWFwLmZpbmQocmVzb3VyY2VCaW5kaW5nLmJpbmRpbmcp
OworICAgICAgICBpZiAobGF5b3V0SXRlcmF0b3IgPT0gbGF5b3V0QmluZGluZ3NNYXAuZW5kKCkp
IHsKKyAgICAgICAgICAgIExPRyhXZWJHUFUsICIlczogR1BVQmluZEdyb3VwQmluZGluZyAlbHUg
bm90IGZvdW5kIGluIEdQVUJpbmRHcm91cExheW91dCEiLCBmdW5jdGlvbk5hbWUsIHJlc291cmNl
QmluZGluZy5iaW5kaW5nKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9
CisgICAgICAgIGF1dG8gbGF5b3V0QmluZGluZyA9IGxheW91dEl0ZXJhdG9yLT52YWx1ZTsKKyAg
ICAgICAgCisgICAgICAgIHN3aXRjaCAobGF5b3V0QmluZGluZy50eXBlKSB7CisgICAgICAgIC8v
IEZJWE1FOiBTdXBwb3J0IG1vcmUgcmVzb3VyY2UgdHlwZXMuCisgICAgICAgIGNhc2UgR1BVQmlu
ZEdyb3VwTGF5b3V0QmluZGluZzo6QmluZGluZ1R5cGU6OlVuaWZvcm1CdWZmZXI6CisgICAgICAg
IGNhc2UgR1BVQmluZEdyb3VwTGF5b3V0QmluZGluZzo6QmluZGluZ1R5cGU6OlN0b3JhZ2VCdWZm
ZXI6IHsKKyAgICAgICAgICAgIGF1dG8gYnVmZmVyUmVzb3VyY2UgPSB0cnlHZXRSZXNvdXJjZUFz
QnVmZmVyQmluZGluZyhyZXNvdXJjZUJpbmRpbmcucmVzb3VyY2UsIGZ1bmN0aW9uTmFtZSk7Cisg
ICAgICAgICAgICBpZiAoIWJ1ZmZlclJlc291cmNlKQorICAgICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICAgICAgaWYgKGxheW91dEJpbmRpbmcudmlzaWJpbGl0eSAmIEdQVVNo
YWRlclN0YWdlQml0OjpGbGFnczo6VmVydGV4KSB7CisgICAgICAgICAgICAgICAgaWYgKCF0cnlT
ZXRCdWZmZXJPbkVuY29kZXIodmVydGV4RW5jb2RlciwgKmJ1ZmZlclJlc291cmNlLCByZXNvdXJj
ZUJpbmRpbmcuYmluZGluZywgZnVuY3Rpb25OYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobGF5b3V0QmluZGlu
Zy52aXNpYmlsaXR5ICYgR1BVU2hhZGVyU3RhZ2VCaXQ6OkZsYWdzOjpGcmFnbWVudCkgeworICAg
ICAgICAgICAgICAgIGlmICghdHJ5U2V0QnVmZmVyT25FbmNvZGVyKGZyYWdtZW50RW5jb2Rlciwg
KmJ1ZmZlclJlc291cmNlLCByZXNvdXJjZUJpbmRpbmcuYmluZGluZywgZnVuY3Rpb25OYW1lKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBib3VuZEJ1ZmZlcnMuYXBwZW5kKGJ1ZmZlclJlc291cmNlLT5idWZmZXIuY29weVJl
ZigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgR1BVQmlu
ZEdyb3VwTGF5b3V0QmluZGluZzo6QmluZGluZ1R5cGU6OlNhbXBsZXI6IHsKKyAgICAgICAgICAg
IGF1dG8gc2FtcGxlclJlc291cmNlID0gdHJ5R2V0UmVzb3VyY2VBc1NhbXBsZXIocmVzb3VyY2VC
aW5kaW5nLnJlc291cmNlLCBmdW5jdGlvbk5hbWUpOworICAgICAgICAgICAgaWYgKCFzYW1wbGVy
UmVzb3VyY2UpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICBp
ZiAobGF5b3V0QmluZGluZy52aXNpYmlsaXR5ICYgR1BVU2hhZGVyU3RhZ2VCaXQ6OkZsYWdzOjpW
ZXJ0ZXgpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXRyeVNldFNhbXBsZXJPbkVuY29kZXIodmVy
dGV4RW5jb2Rlciwgc2FtcGxlclJlc291cmNlLT5wbGF0Zm9ybVNhbXBsZXIoKSwgcmVzb3VyY2VC
aW5kaW5nLmJpbmRpbmcsIGZ1bmN0aW9uTmFtZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGxheW91dEJpbmRpbmcu
dmlzaWJpbGl0eSAmIEdQVVNoYWRlclN0YWdlQml0OjpGbGFnczo6RnJhZ21lbnQpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIXRyeVNldFNhbXBsZXJPbkVuY29kZXIoZnJhZ21lbnRFbmNvZGVyLCBz
YW1wbGVyUmVzb3VyY2UtPnBsYXRmb3JtU2FtcGxlcigpLCByZXNvdXJjZUJpbmRpbmcuYmluZGlu
ZywgZnVuY3Rpb25OYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IEdQVUJpbmRHcm91cExheW91dEJpbmRpbmc6OkJpbmRpbmdUeXBlOjpTYW1wbGVkVGV4dHVyZTog
eworICAgICAgICAgICAgYXV0byB0ZXh0dXJlUmVzb3VyY2UgPSB0cnlHZXRSZXNvdXJjZUFzVGV4
dHVyZShyZXNvdXJjZUJpbmRpbmcucmVzb3VyY2UsIGZ1bmN0aW9uTmFtZSk7CisgICAgICAgICAg
ICBpZiAoIXRleHR1cmVSZXNvdXJjZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgICAgIGlmIChsYXlvdXRCaW5kaW5nLnZpc2liaWxpdHkgJiBHUFVTaGFkZXJTdGFn
ZUJpdDo6RmxhZ3M6OlZlcnRleCkgeworICAgICAgICAgICAgICAgIGlmICghdHJ5U2V0VGV4dHVy
ZU9uRW5jb2Rlcih2ZXJ0ZXhFbmNvZGVyLCB0ZXh0dXJlUmVzb3VyY2UtPnBsYXRmb3JtVGV4dHVy
ZSgpLCByZXNvdXJjZUJpbmRpbmcuYmluZGluZywgZnVuY3Rpb25OYW1lKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
bGF5b3V0QmluZGluZy52aXNpYmlsaXR5ICYgR1BVU2hhZGVyU3RhZ2VCaXQ6OkZsYWdzOjpGcmFn
bWVudCkgeworICAgICAgICAgICAgICAgIGlmICghdHJ5U2V0VGV4dHVyZU9uRW5jb2RlcihmcmFn
bWVudEVuY29kZXIsIHRleHR1cmVSZXNvdXJjZS0+cGxhdGZvcm1UZXh0dXJlKCksIHJlc291cmNl
QmluZGluZy5iaW5kaW5nLCBmdW5jdGlvbk5hbWUpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJvdW5kVGV4dHVyZXMuYXBw
ZW5kKHRleHR1cmVSZXNvdXJjZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBMT0coV2ViR1BVLCAi
JXM6IFJlc291cmNlIHR5cGUgbm90IHlldCBpbXBsZW1lbnRlZC4iLCBmdW5jdGlvbk5hbWUpOwor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBHUFVCaW5kR3JvdXAoV1RGTW92ZSh2ZXJ0ZXhBcmdzQnVmZmVy
KSwgV1RGTW92ZShmcmFnbWVudEFyZ3NCdWZmZXIpLCBXVEZNb3ZlKGJvdW5kQnVmZmVycyksIFdU
Rk1vdmUoYm91bmRUZXh0dXJlcykpKTsKK30KKyAgICAKK0dQVUJpbmRHcm91cDo6R1BVQmluZEdy
b3VwKFJldGFpblB0cjxNVExCdWZmZXI+JiYgdmVydGV4QnVmZmVyLCBSZXRhaW5QdHI8TVRMQnVm
ZmVyPiYmIGZyYWdtZW50QnVmZmVyLCBWZWN0b3I8UmVmPEdQVUJ1ZmZlcj4+JiYgYnVmZmVycywg
VmVjdG9yPFJlZjxHUFVUZXh0dXJlPj4mJiB0ZXh0dXJlcykKKyAgICA6IG1fdmVydGV4QXJnc0J1
ZmZlcihXVEZNb3ZlKHZlcnRleEJ1ZmZlcikpCisgICAgLCBtX2ZyYWdtZW50QXJnc0J1ZmZlcihX
VEZNb3ZlKGZyYWdtZW50QnVmZmVyKSkKKyAgICAsIG1fYm91bmRCdWZmZXJzKFdURk1vdmUoYnVm
ZmVycykpCisgICAgLCBtX2JvdW5kVGV4dHVyZXMoV1RGTW92ZSh0ZXh0dXJlcykpCit7Cit9Cisg
ICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCUEdVKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQ
VUNvbW1hbmRCdWZmZXJNZXRhbC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9jb2NvYS9HUFVDb21tYW5kQnVmZmVyTWV0YWwubW0KaW5kZXggYzkyYzU0NGQxNTFhYWFl
OTRiNzFlZGY4NjAyNzcwYjU1Y2I1N2IwNi4uOTg2YTY2YWYyODE5NjA3OTU5MmY4MjcwYTdjM2Fj
M2I0Y2UzNjY3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L2NvY29hL0dQVUNvbW1hbmRCdWZmZXJNZXRhbC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQ29tbWFuZEJ1ZmZlck1ldGFsLm1tCkBAIC0y
OCwxMSArMjgsOSBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2ltcG9ydCAiR1BVQnVmZmVy
LmgiCiAjaW1wb3J0ICJHUFVEZXZpY2UuaCIKICNpbXBvcnQgIkdQVUV4dGVudDNELmgiCiAjaW1w
b3J0ICJHUFVRdWV1ZS5oIgotI2ltcG9ydCAiR1BVVGV4dHVyZS5oIgogI2ltcG9ydCAiTG9nZ2lu
Zy5oIgogCiAjaW1wb3J0IDxNZXRhbC9NZXRhbC5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVy
TWV0YWwubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BV
UHJvZ3JhbW1hYmxlUGFzc0VuY29kZXJNZXRhbC5tbQppbmRleCA5MTVhYjYyMGJhZDhiMWEwYmU3
YjU4ZTFjZTc1ZTk1ODkyNzI1OTc0Li42Y2FkY2ZiYTA4ZDU2ODZhZDBlOTllOGI1ODM1N2Y2NDEz
ZDE3MTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
Y29jb2EvR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXJNZXRhbC5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29k
ZXJNZXRhbC5tbQpAQCAtMjksNyArMjksNiBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbXBv
cnQgIkdQVUJpbmRHcm91cC5oIgotI2ltcG9ydCAiR1BVQmluZEdyb3VwTGF5b3V0QmluZGluZy5o
IgogI2ltcG9ydCAiR1BVQ29tbWFuZEJ1ZmZlci5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2lt
cG9ydCA8TWV0YWwvTWV0YWwuaD4KQEAgLTUwLDE2MCArNDksMjQgQEAgdm9pZCBHUFVQcm9ncmFt
bWFibGVQYXNzRW5jb2Rlcjo6ZW5kUGFzcygpCiAKIHZvaWQgR1BVUHJvZ3JhbW1hYmxlUGFzc0Vu
Y29kZXI6OnNldEJpbmRHcm91cCh1bnNpZ25lZCBpbmRleCwgR1BVQmluZEdyb3VwJiBiaW5kR3Jv
dXApCiB7Ci0gICAgY29uc3QgY2hhciogY29uc3QgZnVuY3Rpb25OYW1lID0gIkdQVVByb2dyYW1t
YWJsZVBhc3NFbmNvZGVyOjpzZXRCaW5kR3JvdXAoKSI7Ci0KICAgICBpZiAoIXBsYXRmb3JtUGFz
c0VuY29kZXIoKSkgewotICAgICAgICBMT0coV2ViR1BVLCAiJXM6IEludmFsaWQgb3BlcmF0aW9u
OiBFbmNvZGluZyBpcyBlbmRlZCEiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNv
bnN0IGF1dG8mIHZlcnRleEFyZ3MgPSBiaW5kR3JvdXAubGF5b3V0KCkudmVydGV4QXJndW1lbnRz
KCk7Ci0gICAgY29uc3QgYXV0byYgZnJhZ21lbnRBcmdzID0gYmluZEdyb3VwLmxheW91dCgpLmZy
YWdtZW50QXJndW1lbnRzKCk7Ci0gICAgLy8gRklYTUU6IEZpbmlzaCBzdXBwb3J0IGZvciBjb21w
dXRlLgotCi0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgaWYgKHZlcnRl
eEFyZ3MuYnVmZmVyKQotICAgICAgICBzZXRWZXJ0ZXhCdWZmZXIodmVydGV4QXJncy5idWZmZXIu
Z2V0KCksIDAsIGluZGV4KTsKLSAgICBpZiAoZnJhZ21lbnRBcmdzLmJ1ZmZlcikKLSAgICAgICAg
c2V0RnJhZ21lbnRCdWZmZXIoZnJhZ21lbnRBcmdzLmJ1ZmZlci5nZXQoKSwgMCwgaW5kZXgpOwot
Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAgIC8vIFNldCBlYWNoIHJlc291
cmNlIG9uIGVhY2ggTVRMQXJndW1lbnRFbmNvZGVyIGl0IHNob3VsZCBiZSB2aXNpYmxlIG9uLgot
ICAgIGNvbnN0IGF1dG8mIGxheW91dEJpbmRpbmdzTWFwID0gYmluZEdyb3VwLmxheW91dCgpLmJp
bmRpbmdzTWFwKCk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiByZXNvdXJjZUJpbmRpbmcgOiBiaW5k
R3JvdXAuYmluZGluZ3MoKSkgewotICAgICAgICBhdXRvIGxheW91dEl0ZXJhdG9yID0gbGF5b3V0
QmluZGluZ3NNYXAuZmluZChyZXNvdXJjZUJpbmRpbmcuYmluZGluZyk7Ci0gICAgICAgIGlmIChs
YXlvdXRJdGVyYXRvciA9PSBsYXlvdXRCaW5kaW5nc01hcC5lbmQoKSkgewotICAgICAgICAgICAg
TE9HKFdlYkdQVSwgIiVzOiBHUFVCaW5kR3JvdXBCaW5kaW5nICVsdSBub3QgZm91bmQgaW4gR1BV
QmluZEdyb3VwTGF5b3V0ISIsIGZ1bmN0aW9uTmFtZSwgcmVzb3VyY2VCaW5kaW5nLmJpbmRpbmcp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGF1dG8gbGF5b3V0Qmlu
ZGluZyA9IGxheW91dEl0ZXJhdG9yLT52YWx1ZTsKLQotICAgICAgICBzd2l0Y2ggKGxheW91dEJp
bmRpbmcudHlwZSkgewotICAgICAgICAvLyBGSVhNRTogU3VwcG9ydCBtb3JlIHJlc291cmNlIHR5
cGVzLgotICAgICAgICBjYXNlIEdQVUJpbmRHcm91cExheW91dEJpbmRpbmc6OkJpbmRpbmdUeXBl
OjpVbmlmb3JtQnVmZmVyOgotICAgICAgICBjYXNlIEdQVUJpbmRHcm91cExheW91dEJpbmRpbmc6
OkJpbmRpbmdUeXBlOjpTdG9yYWdlQnVmZmVyOiB7Ci0gICAgICAgICAgICBpZiAobGF5b3V0Qmlu
ZGluZy52aXNpYmlsaXR5ICYgR1BVU2hhZGVyU3RhZ2VCaXQ6OkZsYWdzOjpWZXJ0ZXgpCi0gICAg
ICAgICAgICAgICAgc2V0UmVzb3VyY2VBc0J1ZmZlck9uRW5jb2Rlcih2ZXJ0ZXhBcmdzLmVuY29k
ZXIuZ2V0KCksIHJlc291cmNlQmluZGluZywgZnVuY3Rpb25OYW1lKTsKLSAgICAgICAgICAgIGlm
IChsYXlvdXRCaW5kaW5nLnZpc2liaWxpdHkgJiBHUFVTaGFkZXJTdGFnZUJpdDo6RmxhZ3M6OkZy
YWdtZW50KQotICAgICAgICAgICAgICAgIHNldFJlc291cmNlQXNCdWZmZXJPbkVuY29kZXIoZnJh
Z21lbnRBcmdzLmVuY29kZXIuZ2V0KCksIHJlc291cmNlQmluZGluZywgZnVuY3Rpb25OYW1lKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR1BVQmluZEdyb3Vw
TGF5b3V0QmluZGluZzo6QmluZGluZ1R5cGU6OlNhbXBsZXI6IHsKLSAgICAgICAgICAgIGlmIChs
YXlvdXRCaW5kaW5nLnZpc2liaWxpdHkgJiBHUFVTaGFkZXJTdGFnZUJpdDo6RmxhZ3M6OlZlcnRl
eCkKLSAgICAgICAgICAgICAgICBzZXRSZXNvdXJjZUFzU2FtcGxlck9uRW5jb2Rlcih2ZXJ0ZXhB
cmdzLmVuY29kZXIuZ2V0KCksIHJlc291cmNlQmluZGluZywgZnVuY3Rpb25OYW1lKTsKLSAgICAg
ICAgICAgIGlmIChsYXlvdXRCaW5kaW5nLnZpc2liaWxpdHkgJiBHUFVTaGFkZXJTdGFnZUJpdDo6
RmxhZ3M6OkZyYWdtZW50KQotICAgICAgICAgICAgICAgIHNldFJlc291cmNlQXNTYW1wbGVyT25F
bmNvZGVyKGZyYWdtZW50QXJncy5lbmNvZGVyLmdldCgpLCByZXNvdXJjZUJpbmRpbmcsIGZ1bmN0
aW9uTmFtZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdQ
VUJpbmRHcm91cExheW91dEJpbmRpbmc6OkJpbmRpbmdUeXBlOjpTYW1wbGVkVGV4dHVyZTogewot
ICAgICAgICAgICAgaWYgKGxheW91dEJpbmRpbmcudmlzaWJpbGl0eSAmIEdQVVNoYWRlclN0YWdl
Qml0OjpGbGFnczo6VmVydGV4KQotICAgICAgICAgICAgICAgIHNldFJlc291cmNlQXNUZXh0dXJl
T25FbmNvZGVyKHZlcnRleEFyZ3MuZW5jb2Rlci5nZXQoKSwgcmVzb3VyY2VCaW5kaW5nLCBmdW5j
dGlvbk5hbWUpOwotICAgICAgICAgICAgaWYgKGxheW91dEJpbmRpbmcudmlzaWJpbGl0eSAmIEdQ
VVNoYWRlclN0YWdlQml0OjpGbGFnczo6RnJhZ21lbnQpCi0gICAgICAgICAgICAgICAgc2V0UmVz
b3VyY2VBc1RleHR1cmVPbkVuY29kZXIoZnJhZ21lbnRBcmdzLmVuY29kZXIuZ2V0KCksIHJlc291
cmNlQmluZGluZywgZnVuY3Rpb25OYW1lKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBMT0coV2ViR1BVLCAiJXM6IFJlc291cmNl
IHR5cGUgbm90IHlldCBpbXBsZW1lbnRlZC4iLCBmdW5jdGlvbk5hbWUpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEdQVVByb2dyYW1tYWJsZVBhc3NF
bmNvZGVyOjpzZXRSZXNvdXJjZUFzQnVmZmVyT25FbmNvZGVyKE1UTEFyZ3VtZW50RW5jb2RlciAq
YXJndW1lbnRFbmNvZGVyLCBjb25zdCBHUFVCaW5kR3JvdXBCaW5kaW5nJiBiaW5kaW5nLCBjb25z
dCBjaGFyKiBjb25zdCBmdW5jdGlvbk5hbWUpCi17Ci0jaWYgTE9HX0RJU0FCTEVECi0gICAgVU5V
U0VEX1BBUkFNKGZ1bmN0aW9uTmFtZSk7Ci0jZW5kaWYKLSAgICBpZiAoIWFyZ3VtZW50RW5jb2Rl
cikgewotICAgICAgICBMT0coV2ViR1BVLCAiJXM6IE5vIGFyZ3VtZW50IGVuY29kZXIgZm9yIHJl
cXVlc3RlZCBzdGFnZSBmb3VuZCEiLCBmdW5jdGlvbk5hbWUpOworICAgICAgICBMT0coV2ViR1BV
LCAiR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXI6OnNldEJpbmRHcm91cCgpOiBJbnZhbGlkIG9w
ZXJhdGlvbjogRW5jb2RpbmcgaXMgZW5kZWQhIik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0K
LSAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8R1BVQnVmZmVyQmluZGluZz4oYmluZGlu
Zy5yZXNvdXJjZSkpIHsKLSAgICAgICAgTE9HKFdlYkdQVSwgIiVzOiBSZXNvdXJjZSBpcyBub3Qg
YSBidWZmZXIgdHlwZSEiLCBmdW5jdGlvbk5hbWUpOwotICAgICAgICByZXR1cm47CisgICAgCisg
ICAgaWYgKGJpbmRHcm91cC52ZXJ0ZXhBcmdzQnVmZmVyKCkpCisgICAgICAgIHNldFZlcnRleEJ1
ZmZlcihiaW5kR3JvdXAudmVydGV4QXJnc0J1ZmZlcigpLCAwLCBpbmRleCk7CisgICAgaWYgKGJp
bmRHcm91cC5mcmFnbWVudEFyZ3NCdWZmZXIoKSkKKyAgICAgICAgc2V0RnJhZ21lbnRCdWZmZXIo
YmluZEdyb3VwLmZyYWdtZW50QXJnc0J1ZmZlcigpLCAwLCBpbmRleCk7CisKKyAgICBmb3IgKGF1
dG8mIGJ1ZmZlclJlZiA6IGJpbmRHcm91cC5ib3VuZEJ1ZmZlcnMoKSkgeworICAgICAgICB1c2VS
ZXNvdXJjZShidWZmZXJSZWYtPnBsYXRmb3JtQnVmZmVyKCksIGJ1ZmZlclJlZi0+aXNSZWFkT25s
eSgpID8gTVRMUmVzb3VyY2VVc2FnZVJlYWQgOiBNVExSZXNvdXJjZVVzYWdlUmVhZCB8IE1UTFJl
c291cmNlVXNhZ2VXcml0ZSk7CisgICAgICAgIG1fY29tbWFuZEJ1ZmZlci0+dXNlQnVmZmVyKGJ1
ZmZlclJlZi5jb3B5UmVmKCkpOwogICAgIH0KLQotICAgIGF1dG8mIGJ1ZmZlckJpbmRpbmcgPSBX
VEY6OmdldDxHUFVCdWZmZXJCaW5kaW5nPihiaW5kaW5nLnJlc291cmNlKTsKLSAgICBhdXRvJiBi
dWZmZXJSZWYgPSBidWZmZXJCaW5kaW5nLmJ1ZmZlcjsKLSAgICBhdXRvIG10bEJ1ZmZlciA9IGJ1
ZmZlclJlZi0+cGxhdGZvcm1CdWZmZXIoKTsKLQotICAgIGlmICghbXRsQnVmZmVyKSB7Ci0gICAg
ICAgIExPRyhXZWJHUFUsICIlczogSW52YWxpZCBNVExCdWZmZXIgaW4gR1BVQnVmZmVyQmluZGlu
ZyEiLCBmdW5jdGlvbk5hbWUpOwotICAgICAgICByZXR1cm47CisgICAgZm9yIChhdXRvJiB0ZXh0
dXJlUmVmIDogYmluZEdyb3VwLmJvdW5kVGV4dHVyZXMoKSkgeworICAgICAgICB1c2VSZXNvdXJj
ZSh0ZXh0dXJlUmVmLT5wbGF0Zm9ybVRleHR1cmUoKSwgdGV4dHVyZVJlZi0+aXNSZWFkT25seSgp
ID8gTVRMUmVzb3VyY2VVc2FnZVJlYWQgOiBNVExSZXNvdXJjZVVzYWdlUmVhZCB8IE1UTFJlc291
cmNlVXNhZ2VXcml0ZSk7CisgICAgICAgIG1fY29tbWFuZEJ1ZmZlci0+dXNlVGV4dHVyZSh0ZXh0
dXJlUmVmLmNvcHlSZWYoKSk7CiAgICAgfQotCi0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwotCi0gICAgW2FyZ3VtZW50RW5jb2RlciBzZXRCdWZmZXI6bXRsQnVmZmVyIG9mZnNldDpi
dWZmZXJCaW5kaW5nLm9mZnNldCBhdEluZGV4OmJpbmRpbmcuYmluZGluZ107Ci0gICAgdXNlUmVz
b3VyY2UobXRsQnVmZmVyLCBidWZmZXJSZWYtPmlzUmVhZE9ubHkoKSA/IE1UTFJlc291cmNlVXNh
Z2VSZWFkIDogTVRMUmVzb3VyY2VVc2FnZVJlYWQgfCBNVExSZXNvdXJjZVVzYWdlV3JpdGUpOwot
Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAgIG1fY29tbWFuZEJ1ZmZlci0+
dXNlQnVmZmVyKGJ1ZmZlclJlZi5jb3B5UmVmKCkpOwotfQotCi12b2lkIEdQVVByb2dyYW1tYWJs
ZVBhc3NFbmNvZGVyOjpzZXRSZXNvdXJjZUFzU2FtcGxlck9uRW5jb2RlcihNVExBcmd1bWVudEVu
Y29kZXIgKmFyZ3VtZW50RW5jb2RlciwgY29uc3QgR1BVQmluZEdyb3VwQmluZGluZyYgYmluZGlu
ZywgY29uc3QgY2hhciAqY29uc3QgZnVuY3Rpb25OYW1lKQotewotI2lmIExPR19ESVNBQkxFRAot
ICAgIFVOVVNFRF9QQVJBTShmdW5jdGlvbk5hbWUpOwotI2VuZGlmCi0gICAgaWYgKCFhcmd1bWVu
dEVuY29kZXIpIHsKLSAgICAgICAgTE9HKFdlYkdQVSwgIiVzOiBObyBhcmd1bWVudCBlbmNvZGVy
IGZvciByZXF1ZXN0ZWQgc3RhZ2UgZm91bmQhIiwgZnVuY3Rpb25OYW1lKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8R1BVU2Ft
cGxlcj4+KGJpbmRpbmcucmVzb3VyY2UpKSB7Ci0gICAgICAgIExPRyhXZWJHUFUsICIlczogUmVz
b3VyY2UgaXMgbm90IGEgR1BVU2FtcGxlciEiLCBmdW5jdGlvbk5hbWUpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgYXV0byYgc2FtcGxlclJlZiA9IFdURjo6Z2V0PFJlZjxHUFVTYW1w
bGVyPj4oYmluZGluZy5yZXNvdXJjZSk7Ci0gICAgYXV0byBtdGxTYW1wbGVyID0gc2FtcGxlclJl
Zi0+cGxhdGZvcm1TYW1wbGVyKCk7Ci0KLSAgICBpZiAoIW10bFNhbXBsZXIpIHsKLSAgICAgICAg
TE9HKFdlYkdQVSwgIiVzOiBJbnZhbGlkIE1UTFNhbXBsZXJTdGF0ZSBpbiBHUFVTYW1wbGVyIGJp
bmRpbmchIiwgZnVuY3Rpb25OYW1lKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEJF
R0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICBbYXJndW1lbnRFbmNvZGVyIHNldFNhbXBs
ZXJTdGF0ZTptdGxTYW1wbGVyIGF0SW5kZXg6YmluZGluZy5iaW5kaW5nXTsKLSAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TOwotfQotCi12b2lkIEdQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVy
OjpzZXRSZXNvdXJjZUFzVGV4dHVyZU9uRW5jb2RlcihNVExBcmd1bWVudEVuY29kZXIgKmFyZ3Vt
ZW50RW5jb2RlciwgY29uc3QgR1BVQmluZEdyb3VwQmluZGluZyYgYmluZGluZywgY29uc3QgY2hh
ciogY29uc3QgZnVuY3Rpb25OYW1lKQotewotI2lmIExPR19ESVNBQkxFRAotICAgIFVOVVNFRF9Q
QVJBTShmdW5jdGlvbk5hbWUpOwotI2VuZGlmCi0gICAgaWYgKCFhcmd1bWVudEVuY29kZXIpIHsK
LSAgICAgICAgTE9HKFdlYkdQVSwgIiVzOiBObyBhcmd1bWVudCBlbmNvZGVyIGZvciByZXF1ZXN0
ZWQgc3RhZ2UgZm91bmQhIiwgZnVuY3Rpb25OYW1lKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8R1BVVGV4dHVyZT4+KGJpbmRp
bmcucmVzb3VyY2UpKSB7Ci0gICAgICAgIExPRyhXZWJHUFUsICIlczogUmVzb3VyY2UgaXMgbm90
IGEgR1BVVGV4dHVyZVZpZXchIiwgZnVuY3Rpb25OYW1lKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGF1dG8mIHRleHR1cmVSZWYgPSBXVEY6OmdldDxSZWY8R1BVVGV4dHVyZT4+KGJp
bmRpbmcucmVzb3VyY2UpOwotICAgIGF1dG8gbXRsVGV4dHVyZSA9IHRleHR1cmVSZWYtPnBsYXRm
b3JtVGV4dHVyZSgpOwotCi0gICAgaWYgKCFtdGxUZXh0dXJlKSB7Ci0gICAgICAgIExPRyhXZWJH
UFUsICIlczogSW52YWxpZCBNVExUZXh0dXJlIGluIEdQVVRleHR1cmVWaWV3IGJpbmRpbmchIiwg
ZnVuY3Rpb25OYW1lKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKLQotICAgIFthcmd1bWVudEVuY29kZXIgc2V0VGV4dHVyZTptdGxU
ZXh0dXJlIGF0SW5kZXg6YmluZGluZy5iaW5kaW5nXTsKLSAgICB1c2VSZXNvdXJjZShtdGxUZXh0
dXJlLCB0ZXh0dXJlUmVmLT5pc1JlYWRPbmx5KCkgPyBNVExSZXNvdXJjZVVzYWdlUmVhZCA6IE1U
TFJlc291cmNlVXNhZ2VSZWFkIHwgTVRMUmVzb3VyY2VVc2FnZVdyaXRlKTsKLQotICAgIEVORF9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBtX2NvbW1hbmRCdWZmZXItPnVzZVRleHR1cmUo
dGV4dHVyZVJlZi5jb3B5UmVmKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVu
ZGVyUGFzc0VuY29kZXJNZXRhbC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9jb2NvYS9HUFVSZW5kZXJQYXNzRW5jb2Rlck1ldGFsLm1tCmluZGV4IGUxYzQ5YTlmYTkw
N2ZmMTBmNTEyNDQzODA5Y2ExYWIyMTgxNjZjZjYuLjE1ZTM3NWYyYmY0NmJlNjE5NDEwMWM1NDNk
MWNhMDlmY2U2MjIwYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQYXNzRW5jb2Rlck1ldGFsLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQYXNzRW5jb2Rlck1l
dGFsLm1tCkBAIC0yNjYsOCArMjY2LDkgQEAgdm9pZCBHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6dXNl
UmVzb3VyY2UoTVRMUmVzb3VyY2UgKnJlc291cmNlLCB1bnNpZ25lZCB1c2FnZSkKICAgICAgICAg
TE9HKFdlYkdQVSwgIkdQVVJlbmRlclBhc3NFbmNvZGVyOiBJbnZhbGlkIG9wZXJhdGlvbjogRW5j
b2RpbmcgaXMgZW5kZWQhIik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KKyAgICBCRUdJTl9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAgW21fcGxhdGZvcm1SZW5kZXJQYXNzRW5jb2RlciB1
c2VSZXNvdXJjZTpyZXNvdXJjZSB1c2FnZTp1c2FnZV07CisgICAgRU5EX0JMT0NLX09CSkNfRVhD
RVBUSU9OUzsKIH0KIAogdm9pZCBHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6c2V0VmVydGV4QnVmZmVy
KE1UTEJ1ZmZlciAqYnVmZmVyLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGluZGV4KQpAQCAt
Mjc2LDggKzI3Nyw5IEBAIHZvaWQgR1BVUmVuZGVyUGFzc0VuY29kZXI6OnNldFZlcnRleEJ1ZmZl
cihNVExCdWZmZXIgKmJ1ZmZlciwgdW5zaWduZWQgb2Zmc2V0LCB1CiAgICAgICAgIExPRyhXZWJH
UFUsICJHUFVSZW5kZXJQYXNzRW5jb2RlcjogSW52YWxpZCBvcGVyYXRpb246IEVuY29kaW5nIGlz
IGVuZGVkISIpOwogICAgICAgICByZXR1cm47CiAgICAgfQotCisgICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TOwogICAgIFttX3BsYXRmb3JtUmVuZGVyUGFzc0VuY29kZXIgc2V0VmVydGV4
QnVmZmVyOmJ1ZmZlciBvZmZzZXQ6b2Zmc2V0IGF0SW5kZXg6aW5kZXhdOworICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKIHZvaWQgR1BVUmVuZGVyUGFzc0VuY29kZXI6OnNldEZy
YWdtZW50QnVmZmVyKE1UTEJ1ZmZlciAqYnVmZmVyLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVk
IGluZGV4KQpAQCAtMjg2LDggKzI4OCw5IEBAIHZvaWQgR1BVUmVuZGVyUGFzc0VuY29kZXI6OnNl
dEZyYWdtZW50QnVmZmVyKE1UTEJ1ZmZlciAqYnVmZmVyLCB1bnNpZ25lZCBvZmZzZXQsCiAgICAg
ICAgIExPRyhXZWJHUFUsICJHUFVSZW5kZXJQYXNzRW5jb2RlcjogSW52YWxpZCBvcGVyYXRpb246
IEVuY29kaW5nIGlzIGVuZGVkISIpOwogICAgICAgICByZXR1cm47CiAgICAgfQotCisgICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogICAgIFttX3BsYXRmb3JtUmVuZGVyUGFzc0VuY29k
ZXIgc2V0RnJhZ21lbnRCdWZmZXI6YnVmZmVyIG9mZnNldDpvZmZzZXQgYXRJbmRleDppbmRleF07
CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAogI2VuZGlmIC8vIFVTRShNRVRB
TCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364336</attachid>
            <date>2019-03-11 19:41:00 -0700</date>
            <delta_ts>2019-03-11 20:19:17 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-195519-20190311194059.patch</filename>
            <type>text/plain</type>
            <size>42025</size>
            <attacher name="Justin Fan">justin_fan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQyNzYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODM4MTNmODY1MjhmMzBj
YzM5ZjdhMTdmMjRlYWY2M2VjYTU3MWIzMS4uYTU1NGVhY2Y2ODcwNWU3ZmI3OTNiY2I2NDE4MDJh
NTQzZWE1NGM4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY3IEBACisyMDE5LTAzLTExICBKdXN0
aW4gRmFuICA8anVzdGluX2ZhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYiBHUFVdIEJpbmRH
cm91cHMvQXJndW1lbnQgYnVmZmVyczogTW92ZSBNVExCdWZmZXIgY3JlYXRpb24gZnJvbSBhbmQg
R1BVQmluZEdyb3VwIHZhbGlkYXRpb24gdG8gR1BVRGV2aWNlLmNyZWF0ZUJpbmRHcm91cAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1NTE5CisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS80ODc4MTI5Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBNeWxl
cyBDLiBNYXhmaWVsZC4KKworICAgICAgICBNZXRhbCdzIEFyZ3VtZW50IEJ1ZmZlcnMgc2hvdWxk
IG5vdCBiZSB0aWVkIGRpcmVjdGx5IHRvIEdQVUJpbmRHcm91cExheW91dDsgcmF0aGVyLCBjcmVh
dGUgdGhlIE1UTEJ1ZmZlciAKKyAgICAgICAgaW4gR1BVQmluZEdyb3VwIGNyZWF0aW9uIHByb2Nl
c3MuCisgICAgICAgIE1vdmUgR1BVQmluZEdyb3VwIHZhbGlkYXRpb24gb3V0IG9mIHNldEJpbmRH
cm91cCBhbmQgdG8gR1BVQmluZEdyb3VwIGNyZWF0aW9uIGZvciBwZXJmb3JtYW5jZS4KKworICAg
ICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLiBObyBiZWhhdmlvciBjaGFuZ2UuCisKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XZWJHUFVEZXZpY2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR1BVRGV2aWNlOjpjcmVhdGVCaW5kR3JvdXAgY29uc3QpOgorICAgICAgICAqIFNvdXJj
ZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dw
dS9HUFVCaW5kR3JvdXAuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2dwdS9HUFVCaW5kR3JvdXAuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdQVUJpbmRHcm91cDo6dmVy
dGV4QXJnc0J1ZmZlcik6IEEgYnVmZmVyIHRoYXQgYXJndW1lbnRzIHdpbGwgYmUgZW5jb2RlZCBp
bnRvIGR1cmluZyBzZXRCaW5kR3JvdXAuCisgICAgICAgIChXZWJDb3JlOjpHUFVCaW5kR3JvdXA6
OmZyYWdtZW50QXJnc0J1ZmZlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6R1BVQmluZEdy
b3VwOjpib3VuZEJ1ZmZlcnMgY29uc3QpOiBBIGxpc3Qgb2YgcmVzb3VyY2VzIHRoYXQgYXJlIGJv
dW5kIGJ5IHRoaXMgR1BVQmluZEdyb3VwLgorICAgICAgICAoV2ViQ29yZTo6R1BVQmluZEdyb3Vw
Ojpib3VuZFRleHR1cmVzIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpHUFVCaW5k
R3JvdXA6OmxheW91dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHUFVCaW5k
R3JvdXA6OmJpbmRpbmdzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9ncHUvR1BVQmluZEdyb3VwTGF5b3V0Lmg6IE5vIGxvbmdlciBjcmVhdGluZyBhbmQgcmV0
YWluaW5nIE1UTEJ1ZmZlcnMuCisgICAgICAgIChXZWJDb3JlOjpHUFVCaW5kR3JvdXBMYXlvdXQ6
OnZlcnRleEVuY29kZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1BVQmluZEdyb3VwTGF5
b3V0OjpmcmFnbWVudEVuY29kZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1BVQmluZEdy
b3VwTGF5b3V0Ojpjb21wdXRlRW5jb2RlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHUFVC
aW5kR3JvdXBMYXlvdXQ6OkFyZ3VtZW50RW5jb2RlckJ1ZmZlcjo6aXNWYWxpZCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHUFVCaW5kR3JvdXBMYXlvdXQ6OnZlcnRleEFyZ3Vt
ZW50cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHUFVCaW5kR3JvdXBMYXlv
dXQ6OmZyYWdtZW50QXJndW1lbnRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdQVUJpbmRHcm91cExheW91dDo6Y29tcHV0ZUFyZ3VtZW50cyBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVy
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUJpbmRHcm91cExh
eW91dE1ldGFsLm1tOgorICAgICAgICAoV2ViQ29yZTo6dHJ5Q3JlYXRlTXRsQXJndW1lbnRFbmNv
ZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdQVUJpbmRHcm91cExheW91dDo6dHJ5Q3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdQVUJpbmRHcm91cExheW91dDo6R1BVQmluZEdyb3VwTGF5b3V0
KToKKyAgICAgICAgKFdlYkNvcmU6OnRyeUNyZWF0ZUFyZ3VtZW50RW5jb2RlckFuZEJ1ZmZlcik6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUJpbmRH
cm91cE1ldGFsLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnRyeUNyZWF0ZUFyZ3VtZW50
QnVmZmVyKTogQ3JlYXRlIGFuZCBhc3NvY2lhdGUgdGhlIE1UTEJ1ZmZlciB0aGF0IGJhY2tzIHRo
ZSBNVExBcmd1bWVudEVuY29kZXIuCisgICAgICAgIChXZWJDb3JlOjp0cnlHZXRSZXNvdXJjZUFz
QnVmZmVyQmluZGluZyk6IFZhbGlkYXRlIGEgR1BVQmluZGluZ1Jlc291cmNlLgorICAgICAgICAo
V2ViQ29yZTo6dHJ5U2V0QnVmZmVyT25FbmNvZGVyKTogRW5jb2RlcyBhIEdQVUJ1ZmZlckJpbmRp
bmcncyBNVExCdWZmZXIgb24gYSBNVExBcmd1bWVudEVuY29kZXIuCisgICAgICAgIChXZWJDb3Jl
Ojp0cnlHZXRSZXNvdXJjZUFzU2FtcGxlcik6IERpdHRvLCBmb3IgR1BVU2FtcGxlcnMuCisgICAg
ICAgIChXZWJDb3JlOjp0cnlTZXRTYW1wbGVyT25FbmNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OnRyeUdldFJlc291cmNlQXNUZXh0dXJlKTogRGl0dG8sIGZvciBHUFVUZXh0dXJlcy4KKyAgICAg
ICAgKFdlYkNvcmU6OnRyeVNldFRleHR1cmVPbkVuY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R1BVQmluZEdyb3VwOjp0cnlDcmVhdGUpOiBNb3N0IHNldEJpbmRHcm91cCB2YWxpZGF0aW9uIG1v
dmVkIGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpHUFVCaW5kR3JvdXA6OkdQVUJpbmRHcm91cCk6
IFJldGFpbnMgdGhlIHJlc291cmNlIHJlZmVyZW5jZXMgbmVlZGVkIGZvciBzZXRCaW5kR3JvdXAu
IAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVQcm9ncmFtbWFibGVQ
YXNzRW5jb2Rlck1ldGFsLm1tOgorICAgICAgICAoV2ViQ29yZTo6R1BVUHJvZ3JhbW1hYmxlUGFz
c0VuY29kZXI6OnNldEJpbmRHcm91cCk6IE1vc3QgdmFsaWRhdGlvbiBtb3ZlZCB0byBHUFVCaW5k
R3JvdXA6OnRyeUNyZWF0ZSgpLgorICAgICAgICAoV2ViQ29yZTo6R1BVUHJvZ3JhbW1hYmxlUGFz
c0VuY29kZXI6OnNldFJlc291cmNlQXNCdWZmZXJPbkVuY29kZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXI6OnNldFJlc291cmNlQXNTYW1w
bGVyT25FbmNvZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdQVVByb2dyYW1tYWJs
ZVBhc3NFbmNvZGVyOjpzZXRSZXNvdXJjZUFzVGV4dHVyZU9uRW5jb2Rlcik6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBhc3NFbmNvZGVy
TWV0YWwubW06CisgICAgICAgIChXZWJDb3JlOjpHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6dXNlUmVz
b3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6R1BVUmVuZGVyUGFzc0VuY29kZXI6OnNldFZlcnRl
eEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6c2V0RnJh
Z21lbnRCdWZmZXIpOgorCisgICAgICAgIE1pc2M6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L0dQVUNvbW1hbmRCdWZmZXIuY3BwL2g6IE1vdmUgbWlzc2luZyBpbmNsdWRlcyB0byBo
ZWFkZXIuCisKIDIwMTktMDMtMTEgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgog
CiAgICAgICAgIFJFR1JFU1NJT046IChyMjQyMTgxKSBBUEkgdGVzdCBEcmFnQW5kRHJvcFRlc3Rz
LkV4dGVybmFsU291cmNlUGxhaW5UZXh0VG9JRnJhbWUgaXMgVGltaW5nIG91dApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVRGV2aWNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVURldmljZS5jcHAKaW5kZXggMzA4MmZmMzEx
YTc4OTJjMjM0ZTE1ZTUxNmQzZmQwNTlkYWNhYmZmZi4uMDE1NDJhYzY3NzdhZDZiY2NhNzZhOTQ4
ZmFlNDhhMTU4N2UzOGZjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV2ViR1BVRGV2aWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
ZWJHUFVEZXZpY2UuY3BwCkBAIC0xMTYsNyArMTE2LDcgQEAgUmVmPFdlYkdQVUJpbmRHcm91cD4g
V2ViR1BVRGV2aWNlOjpjcmVhdGVCaW5kR3JvdXAoV2ViR1BVQmluZEdyb3VwRGVzY3JpcHRvciYm
IGQKICAgICBpZiAoIWdwdURlc2NyaXB0b3IpCiAgICAgICAgIHJldHVybiBXZWJHUFVCaW5kR3Jv
dXA6OmNyZWF0ZShudWxscHRyKTsKIAotICAgIGF1dG8gYmluZEdyb3VwID0gR1BVQmluZEdyb3Vw
OjpjcmVhdGUoV1RGTW92ZSgqZ3B1RGVzY3JpcHRvcikpOworICAgIGF1dG8gYmluZEdyb3VwID0g
R1BVQmluZEdyb3VwOjp0cnlDcmVhdGUoKmdwdURlc2NyaXB0b3IpOwogICAgIHJldHVybiBXZWJH
UFVCaW5kR3JvdXA6OmNyZWF0ZShXVEZNb3ZlKGJpbmRHcm91cCkpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
CmluZGV4IGE1MzE0ZWQ0MzkxM2E5M2FlMThlMGY2OWIyZTYxODY3OWVjMGRlZDYuLjEyYjY5M2Iy
ZWYxYTljMzhmZDRiMTdiZmJkZmUyNzJkOTI3ODExZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xODEz
LDcgKzE4MTMsNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwCiAKLXBsYXRmb3JtL2dyYXBoaWNzL2dw
dS9HUFVCaW5kR3JvdXAuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVRGV2aWNlLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVBpcGVsaW5lTGF5b3V0LmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L0dQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyLmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2Nv
YS50eHQKaW5kZXggNzM0ZWY3ODVmM2E4MTk3MzQwZmIwMjEwNDVhYzYxZmNhYjAzNGRkMi4uNzlh
OTdkMWE3NGU1MzU2NWFkNWIxNDQ4MmE2MGM4ZmNmNzUwNDAxYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29j
b2EudHh0CkBAIC0zMTcsNiArMzE3LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZm
ZXJDb25mb3JtZXJDVi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2N2L1RleHR1cmVDYWNoZUNWLm1t
CiBwbGF0Zm9ybS9ncmFwaGljcy9jdi9WaWRlb1RleHR1cmVDb3BpZXJDVi5jcHAKIAorcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUJpbmRHcm91cE1ldGFsLm1tCiBwbGF0Zm9ybS9ncmFw
aGljcy9ncHUvY29jb2EvR1BVQmluZEdyb3VwTGF5b3V0TWV0YWwubW0KIHBsYXRmb3JtL2dyYXBo
aWNzL2dwdS9jb2NvYS9HUFVCdWZmZXJNZXRhbC5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Nv
Y29hL0dQVUNvbW1hbmRCdWZmZXJNZXRhbC5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDU0ODYxNzEwZTk4ZWFjYWY4OTY3YTg0
NGI1NjdmZjI5MWQ3NDUzNjYuLjEyNDIzNDViN2VmNTNhMWY2Y2JjZGI5ZTc1ZDg0YWYwYjQ4MWYy
MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTE0MDk0LDYgKzE0MDk0LDcgQEAKIAkJRDA4NDAzM0QyMjFFMTg2NDAwMDA3MjA1
IC8qIFdlYkdQVUJpbmRHcm91cERlc2NyaXB0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vi
R1BVQmluZEdyb3VwRGVzY3JpcHRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUQwODQzQTRBMjBGRUJFM0QwMEZFODYwRSAvKiBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUQwODQzQTRDMjBGRUMxNjUwMEZFODYwRSAvKiBHcmFwaGljc0NvbnRl
eHQzRE1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0M0RNYW5h
Z2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDA4NUU2NEEyMjM2REVBRTAw
QzNFMUUyIC8qIEdQVUJpbmRHcm91cE1ldGFsLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gR1BV
QmluZEdyb3VwTWV0YWwubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwODZGRTk2
MDlENTNBQUIwMDVCQzc0RCAvKiBVbmxpbmtDb21tYW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFVubGlua0NvbW1hbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRDA4NkZFOTcwOUQ1M0FBQjAwNUJDNzREIC8qIFVubGlua0NvbW1hbmQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5saW5rQ29tbWFuZC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwODdDRTM4MjFBQ0E5NDIwMEJERTE3NCAvKiBHUFVDb21t
YW5kQnVmZmVyTWV0YWwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBHUFVDb21tYW5kQnVmZmVy
TWV0YWwubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDE0Miw3ICsxNDE0Myw2
IEBACiAJCUQwQkUxMDUyMjFFNkFBMEQwMEU0MkE4OSAvKiBXZWJHUFVCaW5kR3JvdXBEZXNjcmlw
dG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVUJpbmRHcm91cERlc2NyaXB0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDBCRTEwNTMyMUU2QUEwRDAwRTQyQTg5IC8qIFdlYkdQ
VUJpbmRHcm91cERlc2NyaXB0b3IuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYkdQVUJpbmRHcm91cERlc2NyaXB0b3Iu
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMEJFMTA1RTIxRTZCQUQzMDBFNDJB
ODkgLyogR1BVQmluZEdyb3VwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdQVUJpbmRHcm91cC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlEMEJFMTA1RjIxRTZCQUQzMDBFNDJBODkgLyogR1BV
QmluZEdyb3VwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdQVUJpbmRHcm91cC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwQkUxMDYwMjFFNkMwRUIwMEU0MkE4OSAvKiBXZWJH
UFVCaW5kR3JvdXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR1BVQmluZEdyb3VwLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwQkUxMDYxMjFFNkMwRUIwMEU0MkE4OSAvKiBXZWJHUFVC
aW5kR3JvdXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViR1BVQmluZEdyb3VwLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDBCRTEwNjIyMUU2QzBFQjAwRTQyQTg5IC8qIFdl
YkdQVUJpbmRHcm91cC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViR1BVQmluZEdyb3VwLmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTE4NDkxLDcgKzE4NDkxLDYgQEAKIAkJCWNoaWxkcmVuID0gKAog
CQkJCUQwODdDRTM3MjFBQ0E5NDIwMEJERTE3NCAvKiBjb2NvYSAqLywKIAkJCQkzMTJGRjhDRTIx
QTRDMzNGMDBFQjE5OUQgLyogbGVnYWN5ICovLAotCQkJCUQwQkUxMDVGMjFFNkJBRDMwMEU0MkE4
OSAvKiBHUFVCaW5kR3JvdXAuY3BwICovLAogCQkJCUQwQkUxMDVFMjFFNkJBRDMwMEU0MkE4OSAv
KiBHUFVCaW5kR3JvdXAuaCAqLywKIAkJCQlEMEJFMTA0RTIxRTY5NUUyMDBFNDJBODkgLyogR1BV
QmluZEdyb3VwQmluZGluZy5oICovLAogCQkJCUQwQkUxMDUxMjFFNkE3MEUwMEU0MkE4OSAvKiBH
UFVCaW5kR3JvdXBEZXNjcmlwdG9yLmggKi8sCkBAIC0yNjIyNSw2ICsyNjIyNCw3IEBACiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCUQwMjMyQjU4MjFDQjQ5QjcwMDk0
ODNCOSAvKiBHUFVCaW5kR3JvdXBMYXlvdXRNZXRhbC5tbSAqLywKKwkJCQlEMDg1RTY0QTIyMzZE
RUFFMDBDM0UxRTIgLyogR1BVQmluZEdyb3VwTWV0YWwubW0gKi8sCiAJCQkJRDBEODY0OTEyMUI3
NjBDNDAwM0M5ODNDIC8qIEdQVUJ1ZmZlck1ldGFsLm1tICovLAogCQkJCUQwODdDRTM4MjFBQ0E5
NDIwMEJERTE3NCAvKiBHUFVDb21tYW5kQnVmZmVyTWV0YWwubW0gKi8sCiAJCQkJRDA4N0NFM0My
MUFDQTk0MjAwQkRFMTc0IC8qIEdQVURldmljZU1ldGFsLm1tICovLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVUJpbmRHcm91cC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVQmluZEdyb3VwLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRmZDM2MWFkOWVhNWM0ODM0ZGRkMjdmNzk3ZDFmNjA5
ZTI4YmMwOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVQmluZEdyb3VwLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiR1BVQmluZEdyb3VwLmgiCi0KLSNpZiBFTkFCTEUoV0VCR1BVKQotCi0j
aW5jbHVkZSAiR1BVQmluZEdyb3VwQmluZGluZy5oIgotI2luY2x1ZGUgIkdQVUJpbmRHcm91cERl
c2NyaXB0b3IuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZWY8R1BVQmluZEdyb3VwPiBH
UFVCaW5kR3JvdXA6OmNyZWF0ZShHUFVCaW5kR3JvdXBEZXNjcmlwdG9yJiYgZGVzY3JpcHRvcikK
LXsKLSAgICAvLyBGSVhNRTogVW5maW5pc2hlZCBzdHViLgotICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEdQVUJpbmRHcm91cChXVEZNb3ZlKGRlc2NyaXB0b3IpKSk7Ci19Ci0KLUdQVUJpbmRHcm91
cDo6R1BVQmluZEdyb3VwKEdQVUJpbmRHcm91cERlc2NyaXB0b3ImJiBkZXNjcmlwdG9yKQotICAg
IDogbV9sYXlvdXQoV1RGTW92ZShkZXNjcmlwdG9yLmxheW91dCkpCi0gICAgLCBtX2JpbmRpbmdz
KFdURk1vdmUoZGVzY3JpcHRvci5iaW5kaW5ncykpCi17Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVQmluZEdyb3VwLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVQmluZEdyb3VwLmgKaW5kZXggMmNkYzA3MzczNjAx
MWVhYTAyYjBlNjYzN2VhMmQ0MzEwYzZlNzMyNC4uODFhZTY0MWExMGU1NTBmZTVkOTE4ZTZkMDM3
Mjg2MWNmOWRjODZiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L0dQVUJpbmRHcm91cC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dwdS9HUFVCaW5kR3JvdXAuaApAQCAtMjcsMjggKzI3LDQwIEBACiAKICNpZiBFTkFCTEUo
V0VCR1BVKQogCi0jaW5jbHVkZSAiR1BVQmluZEdyb3VwQmluZGluZy5oIgotI2luY2x1ZGUgIkdQ
VUJpbmRHcm91cExheW91dC5oIgotI2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCitPQkpDX1BST1RPQ09MKE1UTEJ1
ZmZlcik7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgR1BVQnVmZmVyOworY2xhc3Mg
R1BVVGV4dHVyZTsKKwogc3RydWN0IEdQVUJpbmRHcm91cERlc2NyaXB0b3I7CiAKIGNsYXNzIEdQ
VUJpbmRHcm91cCA6IHB1YmxpYyBSZWZDb3VudGVkPEdQVUJpbmRHcm91cD4gewogcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8R1BVQmluZEdyb3VwPiBjcmVhdGUoR1BVQmluZEdyb3VwRGVzY3JpcHRv
ciYmKTsKLQotICAgIGNvbnN0IEdQVUJpbmRHcm91cExheW91dCYgbGF5b3V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9sYXlvdXQuZ2V0KCk7IH0KLSAgICBjb25zdCBWZWN0b3I8R1BVQmluZEdyb3VwQmlu
ZGluZz4mIGJpbmRpbmdzKCkgY29uc3QgeyByZXR1cm4gbV9iaW5kaW5nczsgfQorICAgIHN0YXRp
YyBSZWZQdHI8R1BVQmluZEdyb3VwPiB0cnlDcmVhdGUoY29uc3QgR1BVQmluZEdyb3VwRGVzY3Jp
cHRvciYpOworICAgIAorI2lmIFVTRShNRVRBTCkKKyAgICBNVExCdWZmZXIgKnZlcnRleEFyZ3NC
dWZmZXIoKSB7IHJldHVybiBtX3ZlcnRleEFyZ3NCdWZmZXIuZ2V0KCk7IH0KKyAgICBNVExCdWZm
ZXIgKmZyYWdtZW50QXJnc0J1ZmZlcigpIHsgcmV0dXJuIG1fZnJhZ21lbnRBcmdzQnVmZmVyLmdl
dCgpOyB9CisjZW5kaWYKKyAgICBjb25zdCBWZWN0b3I8UmVmPEdQVUJ1ZmZlcj4+JiBib3VuZEJ1
ZmZlcnMoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kQnVmZmVyczsgfQorICAgIGNvbnN0IFZlY3Rv
cjxSZWY8R1BVVGV4dHVyZT4+JiBib3VuZFRleHR1cmVzKCkgY29uc3QgeyByZXR1cm4gbV9ib3Vu
ZFRleHR1cmVzOyB9CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgR1BVQmluZEdyb3VwKEdQVUJp
bmRHcm91cERlc2NyaXB0b3ImJik7Ci0KLSAgICBSZWY8R1BVQmluZEdyb3VwTGF5b3V0PiBtX2xh
eW91dDsKLSAgICBWZWN0b3I8R1BVQmluZEdyb3VwQmluZGluZz4gbV9iaW5kaW5nczsKKyNpZiBV
U0UoTUVUQUwpCisgICAgR1BVQmluZEdyb3VwKFJldGFpblB0cjxNVExCdWZmZXI+JiYgdmVydGV4
QnVmZmVyLCBSZXRhaW5QdHI8TVRMQnVmZmVyPiYmIGZyYWdtZW50QnVmZmVyLCBWZWN0b3I8UmVm
PEdQVUJ1ZmZlcj4+JiYsIFZlY3RvcjxSZWY8R1BVVGV4dHVyZT4+JiYpOworICAgIAorICAgIFJl
dGFpblB0cjxNVExCdWZmZXI+IG1fdmVydGV4QXJnc0J1ZmZlcjsKKyAgICBSZXRhaW5QdHI8TVRM
QnVmZmVyPiBtX2ZyYWdtZW50QXJnc0J1ZmZlcjsKKyNlbmRpZgorICAgIFZlY3RvcjxSZWY8R1BV
QnVmZmVyPj4gbV9ib3VuZEJ1ZmZlcnM7CisgICAgVmVjdG9yPFJlZjxHUFVUZXh0dXJlPj4gbV9i
b3VuZFRleHR1cmVzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVUJpbmRHcm91cExheW91dC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVUJpbmRHcm91cExheW91
dC5oCmluZGV4IGJhODY2YTllZDJiNmY3MjE3NzdlODE2OGQ0OGQ4ZjQyNDFkMGRlNDQuLjliMDVj
MDE3YjUzYjBjMjM3ZmZiZGVjNWJmNDY1NWI4YmViMDE1NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVCaW5kR3JvdXBMYXlvdXQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVQmluZEdyb3VwTGF5b3V0LmgK
QEAgLTUwLDI0ICs1MCwxOCBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmluZGluZ3NNYXBUeXBlID0g
SGFzaE1hcDx1bnNpZ25lZCBsb25nIGxvbmcsIEdQVUJpbmRHcm91cExheW91dEJpbmRpbmcsIFdU
Rjo6SW50SGFzaDx1bnNpZ25lZCBsb25nIGxvbmc+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlI
YXNoVHJhaXRzPHVuc2lnbmVkIGxvbmcgbG9uZz4+OwogICAgIGNvbnN0IEJpbmRpbmdzTWFwVHlw
ZSYgYmluZGluZ3NNYXAoKSBjb25zdCB7IHJldHVybiBtX2JpbmRpbmdzTWFwOyB9CiAjaWYgVVNF
KE1FVEFMKQotICAgIHN0cnVjdCBBcmd1bWVudEVuY29kZXJCdWZmZXIgewotICAgICAgICBSZXRh
aW5QdHI8TVRMQXJndW1lbnRFbmNvZGVyPiBlbmNvZGVyOwotICAgICAgICBSZXRhaW5QdHI8TVRM
QnVmZmVyPiBidWZmZXI7Ci0KLSAgICAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4g
ZW5jb2RlciAmJiBidWZmZXI7IH0KLSAgICB9OwotICAgIGNvbnN0IEFyZ3VtZW50RW5jb2RlckJ1
ZmZlciYgdmVydGV4QXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0ZXhBcmd1bWVudHM7
IH0KLSAgICBjb25zdCBBcmd1bWVudEVuY29kZXJCdWZmZXImIGZyYWdtZW50QXJndW1lbnRzKCkg
Y29uc3QgeyByZXR1cm4gbV9mcmFnbWVudEFyZ3VtZW50czsgfQotICAgIGNvbnN0IEFyZ3VtZW50
RW5jb2RlckJ1ZmZlciYgY29tcHV0ZUFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fY29tcHV0
ZUFyZ3VtZW50czsgfQorICAgIE1UTEFyZ3VtZW50RW5jb2RlciAqdmVydGV4RW5jb2RlcigpIGNv
bnN0IHsgcmV0dXJuIG1fdmVydGV4RW5jb2Rlci5nZXQoKTsgfQorICAgIE1UTEFyZ3VtZW50RW5j
b2RlciAqZnJhZ21lbnRFbmNvZGVyKCkgY29uc3QgeyByZXR1cm4gbV9mcmFnbWVudEVuY29kZXIu
Z2V0KCk7IH0KKyAgICBNVExBcmd1bWVudEVuY29kZXIgKmNvbXB1dGVFbmNvZGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9jb21wdXRlRW5jb2Rlci5nZXQoKTsgfQogI2VuZGlmIC8vIFVTRShNRVRBTCkK
IAogcHJpdmF0ZToKICNpZiBVU0UoTUVUQUwpCi0gICAgR1BVQmluZEdyb3VwTGF5b3V0KEJpbmRp
bmdzTWFwVHlwZSYmLCBBcmd1bWVudEVuY29kZXJCdWZmZXImJiB2ZXJ0ZXgsIEFyZ3VtZW50RW5j
b2RlckJ1ZmZlciYmIGZyYWdtZW50LCBBcmd1bWVudEVuY29kZXJCdWZmZXImJiBjb21wdXRlKTsK
KyAgICBHUFVCaW5kR3JvdXBMYXlvdXQoQmluZGluZ3NNYXBUeXBlJiYsIFJldGFpblB0cjxNVExB
cmd1bWVudEVuY29kZXI+JiYgdmVydGV4LCBSZXRhaW5QdHI8TVRMQXJndW1lbnRFbmNvZGVyPiYm
IGZyYWdtZW50LCBSZXRhaW5QdHI8TVRMQXJndW1lbnRFbmNvZGVyPiYmIGNvbXB1dGUpOwogCi0g
ICAgQXJndW1lbnRFbmNvZGVyQnVmZmVyIG1fdmVydGV4QXJndW1lbnRzOwotICAgIEFyZ3VtZW50
RW5jb2RlckJ1ZmZlciBtX2ZyYWdtZW50QXJndW1lbnRzOwotICAgIEFyZ3VtZW50RW5jb2RlckJ1
ZmZlciBtX2NvbXB1dGVBcmd1bWVudHM7CisgICAgUmV0YWluUHRyPE1UTEFyZ3VtZW50RW5jb2Rl
cj4gbV92ZXJ0ZXhFbmNvZGVyOworICAgIFJldGFpblB0cjxNVExBcmd1bWVudEVuY29kZXI+IG1f
ZnJhZ21lbnRFbmNvZGVyOworICAgIFJldGFpblB0cjxNVExBcmd1bWVudEVuY29kZXI+IG1fY29t
cHV0ZUVuY29kZXI7CiAjZW5kaWYgLy8gVVNFKE1FVEFMKQogICAgIGNvbnN0IEJpbmRpbmdzTWFw
VHlwZSBtX2JpbmRpbmdzTWFwOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9HUFVQcm9ncmFtbWFibGVQYXNzRW5jb2Rlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyLmgK
aW5kZXggM2NkYzE5ZjliNThiODc3ZTAxODIzZDE0MzIyZDMyY2JmMmUwMmE5MS4uZmExNjhkYzI5
ZDc1YzlkYzEyM2I1MjIwOGNlZWMyY2NlYzI2MTYyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVByb2dyYW1tYWJsZVBh
c3NFbmNvZGVyLmgKQEAgLTMwLDEyICszMCwxMSBAQAogI2luY2x1ZGUgIkdQVUJpbmRHcm91cEJp
bmRpbmcuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCi1PQkpDX1BST1RPQ09MKE1U
TEFyZ3VtZW50RW5jb2Rlcik7CiAjaWYgVVNFKE1FVEFMKQogT0JKQ19QUk9UT0NPTChNVExCdWZm
ZXIpOwogT0JKQ19QUk9UT0NPTChNVExDb21tYW5kRW5jb2Rlcik7CiBPQkpDX1BST1RPQ09MKE1U
TFJlc291cmNlKTsKLSNlbmRpZiAvLyBVU0UoTUVUQUwpCisjZW5kaWYKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC02MSw5ICs2MCw2IEBAIHByb3RlY3RlZDoKIAogcHJpdmF0ZToKICNpZiBV
U0UoTUVUQUwpCi0gICAgdm9pZCBzZXRSZXNvdXJjZUFzQnVmZmVyT25FbmNvZGVyKE1UTEFyZ3Vt
ZW50RW5jb2RlciAqLCBjb25zdCBHUFVCaW5kR3JvdXBCaW5kaW5nJiwgY29uc3QgY2hhciogY29u
c3QpOwotICAgIHZvaWQgc2V0UmVzb3VyY2VBc1NhbXBsZXJPbkVuY29kZXIoTVRMQXJndW1lbnRF
bmNvZGVyICosIGNvbnN0IEdQVUJpbmRHcm91cEJpbmRpbmcmLCBjb25zdCBjaGFyKiBjb25zdCk7
Ci0gICAgdm9pZCBzZXRSZXNvdXJjZUFzVGV4dHVyZU9uRW5jb2RlcihNVExBcmd1bWVudEVuY29k
ZXIgKiwgY29uc3QgR1BVQmluZEdyb3VwQmluZGluZyYsIGNvbnN0IGNoYXIqIGNvbnN0KTsKICAg
ICB2aXJ0dWFsIHZvaWQgdXNlUmVzb3VyY2UoTVRMUmVzb3VyY2UgKiwgdW5zaWduZWQpID0gMDsK
IAogICAgIC8vIFJlbmRlciBjb21tYW5kIGVuY29kZXIgbWV0aG9kcy4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVCaW5kR3JvdXBMYXlv
dXRNZXRhbC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9H
UFVCaW5kR3JvdXBMYXlvdXRNZXRhbC5tbQppbmRleCBhZDIzOTdjZGM2NzE1M2Y2MGMxYjY1YmM4
YWQ5NWM3NGQ5YzZlZTgyLi44ZTQ2ZTc2YzdmZGY4ODZiNzA3MTlkYzRmZDViYjk3ZDNiZTEyMTZm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2Ev
R1BVQmluZEdyb3VwTGF5b3V0TWV0YWwubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L2NvY29hL0dQVUJpbmRHcm91cExheW91dE1ldGFsLm1tCkBAIC02MywyOCAr
NjMsMTggQEAgc3RhdGljIHZvaWQgYXBwZW5kQXJndW1lbnRUb0FycmF5KEFyZ3VtZW50QXJyYXkm
IGFycmF5LCBSZXRhaW5QdHI8TVRMQXJndW1lbnREZXMKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TOwogfQogCi1zdGF0aWMgR1BVQmluZEdyb3VwTGF5b3V0OjpBcmd1bWVudEVuY29kZXJC
dWZmZXIgdHJ5Q3JlYXRlQXJndW1lbnRFbmNvZGVyQW5kQnVmZmVyKGNvbnN0IEdQVURldmljZSYg
ZGV2aWNlLCBBcmd1bWVudEFycmF5IGFycmF5KQorc3RhdGljIFJldGFpblB0cjxNVExBcmd1bWVu
dEVuY29kZXI+IHRyeUNyZWF0ZU10bEFyZ3VtZW50RW5jb2Rlcihjb25zdCBHUFVEZXZpY2UmIGRl
dmljZSwgQXJndW1lbnRBcnJheSBhcnJheSkKIHsKLSAgICBHUFVCaW5kR3JvdXBMYXlvdXQ6OkFy
Z3VtZW50RW5jb2RlckJ1ZmZlciBhcmdzOworICAgIFJldGFpblB0cjxNVExBcmd1bWVudEVuY29k
ZXI+IGVuY29kZXI7CiAKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgYXJn
cy5lbmNvZGVyID0gYWRvcHROUyhbZGV2aWNlLnBsYXRmb3JtRGV2aWNlKCkgbmV3QXJndW1lbnRF
bmNvZGVyV2l0aEFyZ3VtZW50czphcnJheS5nZXQoKV0pOworICAgIGVuY29kZXIgPSBhZG9wdE5T
KFtkZXZpY2UucGxhdGZvcm1EZXZpY2UoKSBuZXdBcmd1bWVudEVuY29kZXJXaXRoQXJndW1lbnRz
OmFycmF5LmdldCgpXSk7CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICBpZiAo
IWFyZ3MuZW5jb2RlcikgeworICAgIGlmICghZW5jb2RlcikgewogICAgICAgICBMT0coV2ViR1BV
LCAiR1BVQmluZEdyb3VwTGF5b3V0Ojp0cnlDcmVhdGUoKTogVW5hYmxlIHRvIGNyZWF0ZSBNVExB
cmd1bWVudEVuY29kZXIhIik7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIGFyZ3MuYnVmZmVyID0gYWRvcHROUyhbZGV2
aWNlLnBsYXRmb3JtRGV2aWNlKCkgbmV3QnVmZmVyV2l0aExlbmd0aDphcmdzLmVuY29kZXIuZ2V0
KCkuZW5jb2RlZExlbmd0aCBvcHRpb25zOjBdKTsKLSAgICBbYXJncy5lbmNvZGVyIHNldEFyZ3Vt
ZW50QnVmZmVyOmFyZ3MuYnVmZmVyLmdldCgpIG9mZnNldDowXTsKLSAgICBFTkRfQkxPQ0tfT0JK
Q19FWENFUFRJT05TOwotICAgIGlmICghYXJncy5idWZmZXIpIHsKLSAgICAgICAgTE9HKFdlYkdQ
VSwgIkdQVUJpbmRHcm91cExheW91dDo6dHJ5Q3JlYXRlKCk6IFVuYWJsZSB0byBjcmVhdGUgTVRM
QnVmZmVyIGZyb20gTVRMQXJndW1lbnRFbmNvZGVyISIpOwotICAgICAgICByZXR1cm4geyB9Owor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0KLSAgICByZXR1cm4gYXJnczsKKyAgICBy
ZXR1cm4gZW5jb2RlcjsKIH07CiAKIFJlZlB0cjxHUFVCaW5kR3JvdXBMYXlvdXQ+IEdQVUJpbmRH
cm91cExheW91dDo6dHJ5Q3JlYXRlKGNvbnN0IEdQVURldmljZSYgZGV2aWNlLCBjb25zdCBHUFVC
aW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQpAQCAtMTA4LDE0ICs5OCwxMyBA
QCBSZWZQdHI8R1BVQmluZEdyb3VwTGF5b3V0PiBHUFVCaW5kR3JvdXBMYXlvdXQ6OnRyeUNyZWF0
ZShjb25zdCBHUFVEZXZpY2UmIGRldmljZQogICAgICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7CiAgICAgICAgIG10bEFyZ3VtZW50ID0gYWRvcHROUyhbTVRMQXJndW1lbnREZXNjcmlw
dG9yIG5ld10pOwogICAgICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCiAgICAgICAg
IGlmICghbXRsQXJndW1lbnQpIHsKICAgICAgICAgICAgIExPRyhXZWJHUFUsICJHUFVCaW5kR3Jv
dXBMYXlvdXQ6OnRyeUNyZWF0ZSgpOiBVbmFibGUgdG8gY3JlYXRlIE1UTEFyZ3VtZW50RGVzY3Jp
cHRvciBmb3IgYmluZGluZyAlbHUhIiwgYmluZGluZy5iaW5kaW5nKTsKICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgICAgICB9CiAKLSAgICAgICAgbXRsQXJndW1lbnQuZ2V0KCkuZGF0
YVR5cGUgPSBNVExEYXRhVHlwZUZvckJpbmRpbmdUeXBlKGJpbmRpbmcudHlwZSk7Ci0gICAgICAg
IG10bEFyZ3VtZW50LmdldCgpLmluZGV4ID0gYmluZGluZy5iaW5kaW5nOworICAgICAgICBbbXRs
QXJndW1lbnQgc2V0RGF0YVR5cGU6TVRMRGF0YVR5cGVGb3JCaW5kaW5nVHlwZShiaW5kaW5nLnR5
cGUpXTsKKyAgICAgICAgW210bEFyZ3VtZW50IHNldEluZGV4OmJpbmRpbmcuYmluZGluZ107CiAK
ICAgICAgICAgaWYgKGJpbmRpbmcudmlzaWJpbGl0eSAmIEdQVVNoYWRlclN0YWdlQml0OjpGbGFn
czo6VmVydGV4KQogICAgICAgICAgICAgYXBwZW5kQXJndW1lbnRUb0FycmF5KHZlcnRleEFyZ3NB
cnJheSwgbXRsQXJndW1lbnQpOwpAQCAtMTI1LDI4ICsxMTQsMjggQEAgUmVmUHRyPEdQVUJpbmRH
cm91cExheW91dD4gR1BVQmluZEdyb3VwTGF5b3V0Ojp0cnlDcmVhdGUoY29uc3QgR1BVRGV2aWNl
JiBkZXZpY2UKICAgICAgICAgICAgIGFwcGVuZEFyZ3VtZW50VG9BcnJheShjb21wdXRlQXJnc0Fy
cmF5LCBtdGxBcmd1bWVudCk7CiAgICAgfQogCi0gICAgQXJndW1lbnRFbmNvZGVyQnVmZmVyIHZl
cnRleCwgZnJhZ21lbnQsIGNvbXB1dGU7CisgICAgUmV0YWluUHRyPE1UTEFyZ3VtZW50RW5jb2Rl
cj4gdmVydGV4LCBmcmFnbWVudCwgY29tcHV0ZTsKIAogICAgIGlmICh2ZXJ0ZXhBcmdzQXJyYXkp
IHsKLSAgICAgICAgaWYgKCEodmVydGV4ID0gdHJ5Q3JlYXRlQXJndW1lbnRFbmNvZGVyQW5kQnVm
ZmVyKGRldmljZSwgdmVydGV4QXJnc0FycmF5KSkuaXNWYWxpZCgpKQorICAgICAgICBpZiAoISh2
ZXJ0ZXggPSB0cnlDcmVhdGVNdGxBcmd1bWVudEVuY29kZXIoZGV2aWNlLCB2ZXJ0ZXhBcmdzQXJy
YXkpKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBpZiAoZnJhZ21l
bnRBcmdzQXJyYXkpIHsKLSAgICAgICAgaWYgKCEoZnJhZ21lbnQgPSB0cnlDcmVhdGVBcmd1bWVu
dEVuY29kZXJBbmRCdWZmZXIoZGV2aWNlLCBmcmFnbWVudEFyZ3NBcnJheSkpLmlzVmFsaWQoKSkK
KyAgICAgICAgaWYgKCEoZnJhZ21lbnQgPSB0cnlDcmVhdGVNdGxBcmd1bWVudEVuY29kZXIoZGV2
aWNlLCBmcmFnbWVudEFyZ3NBcnJheSkpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQogICAgIGlmIChjb21wdXRlQXJnc0FycmF5KSB7Ci0gICAgICAgIGlmICghKGNvbXB1dGUg
PSB0cnlDcmVhdGVBcmd1bWVudEVuY29kZXJBbmRCdWZmZXIoZGV2aWNlLCBjb21wdXRlQXJnc0Fy
cmF5KSkuaXNWYWxpZCgpKQorICAgICAgICBpZiAoIShjb21wdXRlID0gdHJ5Q3JlYXRlTXRsQXJn
dW1lbnRFbmNvZGVyKGRldmljZSwgY29tcHV0ZUFyZ3NBcnJheSkpKQogICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHUFVCaW5kR3Jv
dXBMYXlvdXQoV1RGTW92ZShiaW5kaW5nc01hcCksIFdURk1vdmUodmVydGV4KSwgV1RGTW92ZShm
cmFnbWVudCksIFdURk1vdmUoY29tcHV0ZSkpKTsKIH0KIAotR1BVQmluZEdyb3VwTGF5b3V0OjpH
UFVCaW5kR3JvdXBMYXlvdXQoQmluZGluZ3NNYXBUeXBlJiYgYmluZGluZ3NNYXAsIEFyZ3VtZW50
RW5jb2RlckJ1ZmZlciYmIHZlcnRleCwgQXJndW1lbnRFbmNvZGVyQnVmZmVyJiYgZnJhZ21lbnQs
IEFyZ3VtZW50RW5jb2RlckJ1ZmZlciYmIGNvbXB1dGUpCi0gICAgOiBtX3ZlcnRleEFyZ3VtZW50
cyhXVEZNb3ZlKHZlcnRleCkpCi0gICAgLCBtX2ZyYWdtZW50QXJndW1lbnRzKFdURk1vdmUoZnJh
Z21lbnQpKQotICAgICwgbV9jb21wdXRlQXJndW1lbnRzKFdURk1vdmUoY29tcHV0ZSkpCitHUFVC
aW5kR3JvdXBMYXlvdXQ6OkdQVUJpbmRHcm91cExheW91dChCaW5kaW5nc01hcFR5cGUmJiBiaW5k
aW5nc01hcCwgUmV0YWluUHRyPE1UTEFyZ3VtZW50RW5jb2Rlcj4mJiB2ZXJ0ZXgsIFJldGFpblB0
cjxNVExBcmd1bWVudEVuY29kZXI+JiYgZnJhZ21lbnQsIFJldGFpblB0cjxNVExBcmd1bWVudEVu
Y29kZXI+JiYgY29tcHV0ZSkKKyAgICA6IG1fdmVydGV4RW5jb2RlcihXVEZNb3ZlKHZlcnRleCkp
CisgICAgLCBtX2ZyYWdtZW50RW5jb2RlcihXVEZNb3ZlKGZyYWdtZW50KSkKKyAgICAsIG1fY29t
cHV0ZUVuY29kZXIoV1RGTW92ZShjb21wdXRlKSkKICAgICAsIG1fYmluZGluZ3NNYXAoV1RGTW92
ZShiaW5kaW5nc01hcCkpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQmluZEdyb3VwTWV0YWwubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQmluZEdyb3VwTWV0YWwubW0KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYzYzNGZkN2E0ZjYwMTY4YWUxMmQ4ZjBlZjhmMzQ5MzUzZTg3Y2Q1NwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVC
aW5kR3JvdXBNZXRhbC5tbQpAQCAtMCwwICsxLDIyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQg
ImNvbmZpZy5oIgorI2ltcG9ydCAiR1BVQmluZEdyb3VwLmgiCisKKyNpZiBFTkFCTEUoV0VCR1BV
KQorCisjaW1wb3J0ICJHUFVCaW5kR3JvdXBCaW5kaW5nLmgiCisjaW1wb3J0ICJHUFVCaW5kR3Jv
dXBEZXNjcmlwdG9yLmgiCisjaW1wb3J0ICJHUFVCaW5kR3JvdXBMYXlvdXQuaCIKKyNpbXBvcnQg
IkdQVUJ1ZmZlci5oIgorI2ltcG9ydCAiR1BVU2FtcGxlci5oIgorI2ltcG9ydCAiR1BVVGV4dHVy
ZS5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlv
bnMuaD4KKyNpbXBvcnQgPHd0Zi9PcHRpb25hbC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3N0YXRpYyBSZXRhaW5QdHI8TVRMQnVmZmVyPiB0cnlDcmVhdGVBcmd1bWVudEJ1ZmZlcihNVExB
cmd1bWVudEVuY29kZXIgKmVuY29kZXIpCit7CisgICAgUmV0YWluUHRyPE1UTEJ1ZmZlcj4gYnVm
ZmVyOworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICBidWZmZXIgPSBhZG9w
dE5TKFtlbmNvZGVyLmRldmljZSBuZXdCdWZmZXJXaXRoTGVuZ3RoOmVuY29kZXIuZW5jb2RlZExl
bmd0aCBvcHRpb25zOjBdKTsKKyAgICBbZW5jb2RlciBzZXRBcmd1bWVudEJ1ZmZlcjpidWZmZXIu
Z2V0KCkgb2Zmc2V0OjBdOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgcmV0
dXJuIGJ1ZmZlcjsKK30KKyAgICAKK3N0YXRpYyBPcHRpb25hbDxHUFVCdWZmZXJCaW5kaW5nPiB0
cnlHZXRSZXNvdXJjZUFzQnVmZmVyQmluZGluZyhjb25zdCBHUFVCaW5kaW5nUmVzb3VyY2UmIHJl
c291cmNlLCBjb25zdCBjaGFyKiBjb25zdCBmdW5jdGlvbk5hbWUpCit7CisjaWYgTE9HX0RJU0FC
TEVECisgICAgVU5VU0VEX1BBUkFNKGZ1bmN0aW9uTmFtZSk7CisjZW5kaWYKKyAgICBpZiAoIVdU
Rjo6aG9sZHNfYWx0ZXJuYXRpdmU8R1BVQnVmZmVyQmluZGluZz4ocmVzb3VyY2UpKSB7CisgICAg
ICAgIExPRyhXZWJHUFUsICIlczogUmVzb3VyY2UgaXMgbm90IGEgYnVmZmVyIHR5cGUhIiwgZnVu
Y3Rpb25OYW1lKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisgICAgYXV0
byYgYnVmZmVyQmluZGluZyA9IFdURjo6Z2V0PEdQVUJ1ZmZlckJpbmRpbmc+KHJlc291cmNlKTsK
KyAgICBpZiAoIWJ1ZmZlckJpbmRpbmcuYnVmZmVyLT5wbGF0Zm9ybUJ1ZmZlcigpKSB7CisgICAg
ICAgIExPRyhXZWJHUFUsICIlczogSW52YWxpZCBNVExCdWZmZXIgaW4gR1BVQnVmZmVyQmluZGlu
ZyEiLCBmdW5jdGlvbk5hbWUpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0K
KyAgICByZXR1cm4gR1BVQnVmZmVyQmluZGluZyB7IGJ1ZmZlckJpbmRpbmcuYnVmZmVyLmNvcHlS
ZWYoKSwgYnVmZmVyQmluZGluZy5vZmZzZXQsIGJ1ZmZlckJpbmRpbmcuc2l6ZSB9OworfQorCitz
dGF0aWMgdm9pZCBzZXRCdWZmZXJPbkVuY29kZXIoTVRMQXJndW1lbnRFbmNvZGVyICphcmd1bWVu
dEVuY29kZXIsIGNvbnN0IEdQVUJ1ZmZlckJpbmRpbmcmIGJ1ZmZlckJpbmRpbmcsIHVuc2lnbmVk
IGluZGV4KQoreworICAgIEFTU0VSVChhcmd1bWVudEVuY29kZXIgJiYgYnVmZmVyQmluZGluZy5i
dWZmZXItPnBsYXRmb3JtQnVmZmVyKCkpOworCisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOworICAgIFthcmd1bWVudEVuY29kZXIgc2V0QnVmZmVyOmJ1ZmZlckJpbmRpbmcuYnVmZmVy
LT5wbGF0Zm9ybUJ1ZmZlcigpIG9mZnNldDpidWZmZXJCaW5kaW5nLm9mZnNldCBhdEluZGV4Omlu
ZGV4XTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworfQorICAgIAorc3RhdGljIFJl
ZlB0cjxHUFVTYW1wbGVyPiB0cnlHZXRSZXNvdXJjZUFzU2FtcGxlcihjb25zdCBHUFVCaW5kaW5n
UmVzb3VyY2UmIHJlc291cmNlLCBjb25zdCBjaGFyKiBjb25zdCBmdW5jdGlvbk5hbWUpCit7Cisj
aWYgTE9HX0RJU0FCTEVECisgICAgVU5VU0VEX1BBUkFNKGZ1bmN0aW9uTmFtZSk7CisjZW5kaWYK
KyAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPEdQVVNhbXBsZXI+PihyZXNvdXJj
ZSkpIHsKKyAgICAgICAgTE9HKFdlYkdQVSwgIiVzOiBSZXNvdXJjZSBpcyBub3QgYSBHUFVTYW1w
bGVyISIsIGZ1bmN0aW9uTmFtZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAg
ICBhdXRvJiBzYW1wbGVyUmVmID0gV1RGOjpnZXQ8UmVmPEdQVVNhbXBsZXI+PihyZXNvdXJjZSk7
CisgICAgaWYgKCFzYW1wbGVyUmVmLT5wbGF0Zm9ybVNhbXBsZXIoKSkgeworICAgICAgICBMT0co
V2ViR1BVLCAiJXM6IEludmFsaWQgTVRMU2FtcGxlclN0YXRlIGluIEdQVVNhbXBsZXIgYmluZGlu
ZyEiLCBmdW5jdGlvbk5hbWUpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAg
cmV0dXJuIHNhbXBsZXJSZWYuY29weVJlZigpOworfQorCitzdGF0aWMgdm9pZCBzZXRTYW1wbGVy
T25FbmNvZGVyKE1UTEFyZ3VtZW50RW5jb2RlciAqYXJndW1lbnRFbmNvZGVyLCBNVExTYW1wbGVy
U3RhdGUgKnNhbXBsZXIsIHVuc2lnbmVkIGluZGV4KQoreworICAgIEFTU0VSVChhcmd1bWVudEVu
Y29kZXIgJiYgc2FtcGxlcik7CisKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cisg
ICAgW2FyZ3VtZW50RW5jb2RlciBzZXRTYW1wbGVyU3RhdGU6c2FtcGxlciBhdEluZGV4OmluZGV4
XTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworfQorCitzdGF0aWMgUmVmUHRyPEdQ
VVRleHR1cmU+IHRyeUdldFJlc291cmNlQXNUZXh0dXJlKGNvbnN0IEdQVUJpbmRpbmdSZXNvdXJj
ZSYgcmVzb3VyY2UsIGNvbnN0IGNoYXIqIGNvbnN0IGZ1bmN0aW9uTmFtZSkKKyAgICB7CisjaWYg
TE9HX0RJU0FCTEVECisgICAgVU5VU0VEX1BBUkFNKGZ1bmN0aW9uTmFtZSk7CisjZW5kaWYKKyAg
ICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPEdQVVRleHR1cmU+PihyZXNvdXJjZSkp
IHsKKyAgICAgICAgTE9HKFdlYkdQVSwgIiVzOiBSZXNvdXJjZSBpcyBub3QgYSBHUFVUZXh0dXJl
VmlldyEiLCBmdW5jdGlvbk5hbWUpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cisg
ICAgYXV0byYgdGV4dHVyZVJlZiA9IFdURjo6Z2V0PFJlZjxHUFVUZXh0dXJlPj4ocmVzb3VyY2Up
OworICAgIGlmICghdGV4dHVyZVJlZi0+cGxhdGZvcm1UZXh0dXJlKCkpIHsKKyAgICAgICAgTE9H
KFdlYkdQVSwgIiVzOiBJbnZhbGlkIE1UTFRleHR1cmUgaW4gR1BVVGV4dHVyZVZpZXcgYmluZGlu
ZyEiLCBmdW5jdGlvbk5hbWUpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAg
cmV0dXJuIHRleHR1cmVSZWYuY29weVJlZigpOworfQorCitzdGF0aWMgdm9pZCBzZXRUZXh0dXJl
T25FbmNvZGVyKE1UTEFyZ3VtZW50RW5jb2RlciAqYXJndW1lbnRFbmNvZGVyLCBNVExUZXh0dXJl
ICp0ZXh0dXJlLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBBU1NFUlQoYXJndW1lbnRFbmNvZGVy
ICYmIHRleHR1cmUpOworCisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIFth
cmd1bWVudEVuY29kZXIgc2V0VGV4dHVyZTp0ZXh0dXJlIGF0SW5kZXg6aW5kZXhdOworICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisgICAgCitSZWZQdHI8R1BVQmluZEdyb3VwPiBH
UFVCaW5kR3JvdXA6OnRyeUNyZWF0ZShjb25zdCBHUFVCaW5kR3JvdXBEZXNjcmlwdG9yJiBkZXNj
cmlwdG9yKQoreworICAgIGNvbnN0IGNoYXIqIGNvbnN0IGZ1bmN0aW9uTmFtZSA9ICJHUFVCaW5k
R3JvdXA6OnRyeUNyZWF0ZSgpIjsKKyAgICAKKyAgICBNVExBcmd1bWVudEVuY29kZXIgKnZlcnRl
eEVuY29kZXIgPSBkZXNjcmlwdG9yLmxheW91dC0+dmVydGV4RW5jb2RlcigpOworICAgIE1UTEFy
Z3VtZW50RW5jb2RlciAqZnJhZ21lbnRFbmNvZGVyID0gZGVzY3JpcHRvci5sYXlvdXQtPmZyYWdt
ZW50RW5jb2RlcigpOworICAgIC8vIEZJWE1FOiBGaW5pc2ggc3VwcG9ydCBmb3IgY29tcHV0ZS4K
KyAgICAKKyAgICBSZXRhaW5QdHI8TVRMQnVmZmVyPiB2ZXJ0ZXhBcmdzQnVmZmVyOworICAgIGlm
ICh2ZXJ0ZXhFbmNvZGVyICYmICEodmVydGV4QXJnc0J1ZmZlciA9IHRyeUNyZWF0ZUFyZ3VtZW50
QnVmZmVyKHZlcnRleEVuY29kZXIpKSkgeworICAgICAgICBMT0coV2ViR1BVLCAiJXM6IFVuYWJs
ZSB0byBjcmVhdGUgTVRMQnVmZmVyIGZvciB2ZXJ0ZXggYXJndW1lbnQgYnVmZmVyISIsIGZ1bmN0
aW9uTmFtZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBSZXRhaW5QdHI8
TVRMQnVmZmVyPiBmcmFnbWVudEFyZ3NCdWZmZXI7CisgICAgaWYgKGZyYWdtZW50RW5jb2RlciAm
JiAhKGZyYWdtZW50QXJnc0J1ZmZlciA9IHRyeUNyZWF0ZUFyZ3VtZW50QnVmZmVyKGZyYWdtZW50
RW5jb2RlcikpKSB7CisgICAgICAgIExPRyhXZWJHUFUsICIlczogVW5hYmxlIHRvIGNyZWF0ZSBN
VExCdWZmZXIgZm9yIGZyYWdtZW50IGFyZ3VtZW50IGJ1ZmZlciEiLCBmdW5jdGlvbk5hbWUpOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCisgICAgVmVjdG9yPFJlZjxHUFVC
dWZmZXI+PiBib3VuZEJ1ZmZlcnM7CisgICAgVmVjdG9yPFJlZjxHUFVUZXh0dXJlPj4gYm91bmRU
ZXh0dXJlczsKKworICAgIC8vIFNldCBlYWNoIHJlc291cmNlIG9uIGVhY2ggTVRMQXJndW1lbnRF
bmNvZGVyIGl0IHNob3VsZCBiZSB2aXNpYmxlIG9uLgorICAgIGNvbnN0IGF1dG8mIGxheW91dEJp
bmRpbmdzTWFwID0gZGVzY3JpcHRvci5sYXlvdXQtPmJpbmRpbmdzTWFwKCk7CisgICAgZm9yIChj
b25zdCBhdXRvJiByZXNvdXJjZUJpbmRpbmcgOiBkZXNjcmlwdG9yLmJpbmRpbmdzKSB7CisgICAg
ICAgIGF1dG8gbGF5b3V0SXRlcmF0b3IgPSBsYXlvdXRCaW5kaW5nc01hcC5maW5kKHJlc291cmNl
QmluZGluZy5iaW5kaW5nKTsKKyAgICAgICAgaWYgKGxheW91dEl0ZXJhdG9yID09IGxheW91dEJp
bmRpbmdzTWFwLmVuZCgpKSB7CisgICAgICAgICAgICBMT0coV2ViR1BVLCAiJXM6IEdQVUJpbmRH
cm91cEJpbmRpbmcgJWx1IG5vdCBmb3VuZCBpbiBHUFVCaW5kR3JvdXBMYXlvdXQhIiwgZnVuY3Rp
b25OYW1lLCByZXNvdXJjZUJpbmRpbmcuYmluZGluZyk7CisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgfQorICAgICAgICBhdXRvIGxheW91dEJpbmRpbmcgPSBsYXlvdXRJdGVy
YXRvci0+dmFsdWU7CisgICAgICAgIGlmIChsYXlvdXRCaW5kaW5nLnZpc2liaWxpdHkgPT0gR1BV
U2hhZGVyU3RhZ2VCaXQ6OkZsYWdzOjpOb25lKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIGlmICgobGF5b3V0QmluZGluZy52aXNpYmlsaXR5ICYgR1BVU2hhZGVyU3RhZ2VCaXQ6OkZs
YWdzOjpWZXJ0ZXgpICYmICF2ZXJ0ZXhFbmNvZGVyKSB7CisgICAgICAgICAgICBMT0coV2ViR1BV
LCAiJXM6IE5vIHZlcnRleCBlbmNvZGVyIGZvdW5kIGZvciBiaW5kaW5nICVsdSEiLCBmdW5jdGlv
bk5hbWUsIHJlc291cmNlQmluZGluZy5iaW5kaW5nKTsKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICB9CisgICAgICAgIGlmICgobGF5b3V0QmluZGluZy52aXNpYmlsaXR5ICYg
R1BVU2hhZGVyU3RhZ2VCaXQ6OkZsYWdzOjpGcmFnbWVudCkgJiYgIWZyYWdtZW50RW5jb2Rlcikg
eworICAgICAgICAgICAgTE9HKFdlYkdQVSwgIiVzOiBObyBmcmFnbWVudCBlbmNvZGVyIGZvdW5k
IGZvciBiaW5kaW5nICVsdSEiLCBmdW5jdGlvbk5hbWUsIHJlc291cmNlQmluZGluZy5iaW5kaW5n
KTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBzd2l0Y2ggKGxheW91dEJpbmRpbmcudHlwZSkgeworICAgICAgICAvLyBGSVhNRTogU3Vw
cG9ydCBtb3JlIHJlc291cmNlIHR5cGVzLgorICAgICAgICBjYXNlIEdQVUJpbmRHcm91cExheW91
dEJpbmRpbmc6OkJpbmRpbmdUeXBlOjpVbmlmb3JtQnVmZmVyOgorICAgICAgICBjYXNlIEdQVUJp
bmRHcm91cExheW91dEJpbmRpbmc6OkJpbmRpbmdUeXBlOjpTdG9yYWdlQnVmZmVyOiB7CisgICAg
ICAgICAgICBhdXRvIGJ1ZmZlclJlc291cmNlID0gdHJ5R2V0UmVzb3VyY2VBc0J1ZmZlckJpbmRp
bmcocmVzb3VyY2VCaW5kaW5nLnJlc291cmNlLCBmdW5jdGlvbk5hbWUpOworICAgICAgICAgICAg
aWYgKCFidWZmZXJSZXNvdXJjZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgICAgIGlmIChsYXlvdXRCaW5kaW5nLnZpc2liaWxpdHkgJiBHUFVTaGFkZXJTdGFnZUJp
dDo6RmxhZ3M6OlZlcnRleCkKKyAgICAgICAgICAgICAgICBzZXRCdWZmZXJPbkVuY29kZXIodmVy
dGV4RW5jb2RlciwgKmJ1ZmZlclJlc291cmNlLCByZXNvdXJjZUJpbmRpbmcuYmluZGluZyk7Cisg
ICAgICAgICAgICBpZiAobGF5b3V0QmluZGluZy52aXNpYmlsaXR5ICYgR1BVU2hhZGVyU3RhZ2VC
aXQ6OkZsYWdzOjpGcmFnbWVudCkKKyAgICAgICAgICAgICAgICBzZXRCdWZmZXJPbkVuY29kZXIo
ZnJhZ21lbnRFbmNvZGVyLCAqYnVmZmVyUmVzb3VyY2UsIHJlc291cmNlQmluZGluZy5iaW5kaW5n
KTsKKyAgICAgICAgICAgIGJvdW5kQnVmZmVycy5hcHBlbmQoYnVmZmVyUmVzb3VyY2UtPmJ1ZmZl
ci5jb3B5UmVmKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBHUFVCaW5kR3JvdXBMYXlvdXRCaW5kaW5nOjpCaW5kaW5nVHlwZTo6U2FtcGxlcjogeworICAg
ICAgICAgICAgYXV0byBzYW1wbGVyUmVzb3VyY2UgPSB0cnlHZXRSZXNvdXJjZUFzU2FtcGxlcihy
ZXNvdXJjZUJpbmRpbmcucmVzb3VyY2UsIGZ1bmN0aW9uTmFtZSk7CisgICAgICAgICAgICBpZiAo
IXNhbXBsZXJSZXNvdXJjZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgICAgIGlmIChsYXlvdXRCaW5kaW5nLnZpc2liaWxpdHkgJiBHUFVTaGFkZXJTdGFnZUJpdDo6
RmxhZ3M6OlZlcnRleCkKKyAgICAgICAgICAgICAgICBzZXRTYW1wbGVyT25FbmNvZGVyKHZlcnRl
eEVuY29kZXIsIHNhbXBsZXJSZXNvdXJjZS0+cGxhdGZvcm1TYW1wbGVyKCksIHJlc291cmNlQmlu
ZGluZy5iaW5kaW5nKTsKKyAgICAgICAgICAgIGlmIChsYXlvdXRCaW5kaW5nLnZpc2liaWxpdHkg
JiBHUFVTaGFkZXJTdGFnZUJpdDo6RmxhZ3M6OkZyYWdtZW50KQorICAgICAgICAgICAgICAgIHNl
dFNhbXBsZXJPbkVuY29kZXIoZnJhZ21lbnRFbmNvZGVyLCBzYW1wbGVyUmVzb3VyY2UtPnBsYXRm
b3JtU2FtcGxlcigpLCByZXNvdXJjZUJpbmRpbmcuYmluZGluZyk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEdQVUJpbmRHcm91cExheW91dEJpbmRpbmc6OkJp
bmRpbmdUeXBlOjpTYW1wbGVkVGV4dHVyZTogeworICAgICAgICAgICAgYXV0byB0ZXh0dXJlUmVz
b3VyY2UgPSB0cnlHZXRSZXNvdXJjZUFzVGV4dHVyZShyZXNvdXJjZUJpbmRpbmcucmVzb3VyY2Us
IGZ1bmN0aW9uTmFtZSk7CisgICAgICAgICAgICBpZiAoIXRleHR1cmVSZXNvdXJjZSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIGlmIChsYXlvdXRCaW5kaW5n
LnZpc2liaWxpdHkgJiBHUFVTaGFkZXJTdGFnZUJpdDo6RmxhZ3M6OlZlcnRleCkKKyAgICAgICAg
ICAgICAgICBzZXRUZXh0dXJlT25FbmNvZGVyKHZlcnRleEVuY29kZXIsIHRleHR1cmVSZXNvdXJj
ZS0+cGxhdGZvcm1UZXh0dXJlKCksIHJlc291cmNlQmluZGluZy5iaW5kaW5nKTsKKyAgICAgICAg
ICAgIGlmIChsYXlvdXRCaW5kaW5nLnZpc2liaWxpdHkgJiBHUFVTaGFkZXJTdGFnZUJpdDo6Rmxh
Z3M6OkZyYWdtZW50KQorICAgICAgICAgICAgICAgIHNldFRleHR1cmVPbkVuY29kZXIoZnJhZ21l
bnRFbmNvZGVyLCB0ZXh0dXJlUmVzb3VyY2UtPnBsYXRmb3JtVGV4dHVyZSgpLCByZXNvdXJjZUJp
bmRpbmcuYmluZGluZyk7CisgICAgICAgICAgICBib3VuZFRleHR1cmVzLmFwcGVuZCh0ZXh0dXJl
UmVzb3VyY2UucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgTE9HKFdlYkdQVSwgIiVzOiBSZXNvdXJj
ZSB0eXBlIG5vdCB5ZXQgaW1wbGVtZW50ZWQuIiwgZnVuY3Rpb25OYW1lKTsKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiBhZG9w
dFJlZihuZXcgR1BVQmluZEdyb3VwKFdURk1vdmUodmVydGV4QXJnc0J1ZmZlciksIFdURk1vdmUo
ZnJhZ21lbnRBcmdzQnVmZmVyKSwgV1RGTW92ZShib3VuZEJ1ZmZlcnMpLCBXVEZNb3ZlKGJvdW5k
VGV4dHVyZXMpKSk7Cit9CisgICAgCitHUFVCaW5kR3JvdXA6OkdQVUJpbmRHcm91cChSZXRhaW5Q
dHI8TVRMQnVmZmVyPiYmIHZlcnRleEJ1ZmZlciwgUmV0YWluUHRyPE1UTEJ1ZmZlcj4mJiBmcmFn
bWVudEJ1ZmZlciwgVmVjdG9yPFJlZjxHUFVCdWZmZXI+PiYmIGJ1ZmZlcnMsIFZlY3RvcjxSZWY8
R1BVVGV4dHVyZT4+JiYgdGV4dHVyZXMpCisgICAgOiBtX3ZlcnRleEFyZ3NCdWZmZXIoV1RGTW92
ZSh2ZXJ0ZXhCdWZmZXIpKQorICAgICwgbV9mcmFnbWVudEFyZ3NCdWZmZXIoV1RGTW92ZShmcmFn
bWVudEJ1ZmZlcikpCisgICAgLCBtX2JvdW5kQnVmZmVycyhXVEZNb3ZlKGJ1ZmZlcnMpKQorICAg
ICwgbV9ib3VuZFRleHR1cmVzKFdURk1vdmUodGV4dHVyZXMpKQoreworfQorICAgIAorfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQlBHVSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVQcm9ncmFtbWFi
bGVQYXNzRW5jb2Rlck1ldGFsLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L2NvY29hL0dQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyTWV0YWwubW0KaW5kZXggOTE1YWI2
MjBiYWQ4YjFhMGJlN2I1OGUxY2U3NWU5NTg5MjcyNTk3NC4uNmNhZGNmYmEwOGQ1Njg2YWQwZTk5
ZThiNTgzNTdmNjQxM2QxNzE1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L2NvY29hL0dQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyTWV0YWwubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVByb2dyYW1t
YWJsZVBhc3NFbmNvZGVyTWV0YWwubW0KQEAgLTI5LDcgKzI5LDYgQEAKICNpZiBFTkFCTEUoV0VC
R1BVKQogCiAjaW1wb3J0ICJHUFVCaW5kR3JvdXAuaCIKLSNpbXBvcnQgIkdQVUJpbmRHcm91cExh
eW91dEJpbmRpbmcuaCIKICNpbXBvcnQgIkdQVUNvbW1hbmRCdWZmZXIuaCIKICNpbXBvcnQgIkxv
Z2dpbmcuaCIKICNpbXBvcnQgPE1ldGFsL01ldGFsLmg+CkBAIC01MCwxNjAgKzQ5LDI0IEBAIHZv
aWQgR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXI6OmVuZFBhc3MoKQogCiB2b2lkIEdQVVByb2dy
YW1tYWJsZVBhc3NFbmNvZGVyOjpzZXRCaW5kR3JvdXAodW5zaWduZWQgaW5kZXgsIEdQVUJpbmRH
cm91cCYgYmluZEdyb3VwKQogewotICAgIGNvbnN0IGNoYXIqIGNvbnN0IGZ1bmN0aW9uTmFtZSA9
ICJHUFVQcm9ncmFtbWFibGVQYXNzRW5jb2Rlcjo6c2V0QmluZEdyb3VwKCkiOwotCiAgICAgaWYg
KCFwbGF0Zm9ybVBhc3NFbmNvZGVyKCkpIHsKLSAgICAgICAgTE9HKFdlYkdQVSwgIiVzOiBJbnZh
bGlkIG9wZXJhdGlvbjogRW5jb2RpbmcgaXMgZW5kZWQhIik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBjb25zdCBhdXRvJiB2ZXJ0ZXhBcmdzID0gYmluZEdyb3VwLmxheW91dCgpLnZl
cnRleEFyZ3VtZW50cygpOwotICAgIGNvbnN0IGF1dG8mIGZyYWdtZW50QXJncyA9IGJpbmRHcm91
cC5sYXlvdXQoKS5mcmFnbWVudEFyZ3VtZW50cygpOwotICAgIC8vIEZJWE1FOiBGaW5pc2ggc3Vw
cG9ydCBmb3IgY29tcHV0ZS4KLQotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQot
ICAgIGlmICh2ZXJ0ZXhBcmdzLmJ1ZmZlcikKLSAgICAgICAgc2V0VmVydGV4QnVmZmVyKHZlcnRl
eEFyZ3MuYnVmZmVyLmdldCgpLCAwLCBpbmRleCk7Ci0gICAgaWYgKGZyYWdtZW50QXJncy5idWZm
ZXIpCi0gICAgICAgIHNldEZyYWdtZW50QnVmZmVyKGZyYWdtZW50QXJncy5idWZmZXIuZ2V0KCks
IDAsIGluZGV4KTsKLQotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICAvLyBT
ZXQgZWFjaCByZXNvdXJjZSBvbiBlYWNoIE1UTEFyZ3VtZW50RW5jb2RlciBpdCBzaG91bGQgYmUg
dmlzaWJsZSBvbi4KLSAgICBjb25zdCBhdXRvJiBsYXlvdXRCaW5kaW5nc01hcCA9IGJpbmRHcm91
cC5sYXlvdXQoKS5iaW5kaW5nc01hcCgpOwotICAgIGZvciAoY29uc3QgYXV0byYgcmVzb3VyY2VC
aW5kaW5nIDogYmluZEdyb3VwLmJpbmRpbmdzKCkpIHsKLSAgICAgICAgYXV0byBsYXlvdXRJdGVy
YXRvciA9IGxheW91dEJpbmRpbmdzTWFwLmZpbmQocmVzb3VyY2VCaW5kaW5nLmJpbmRpbmcpOwot
ICAgICAgICBpZiAobGF5b3V0SXRlcmF0b3IgPT0gbGF5b3V0QmluZGluZ3NNYXAuZW5kKCkpIHsK
LSAgICAgICAgICAgIExPRyhXZWJHUFUsICIlczogR1BVQmluZEdyb3VwQmluZGluZyAlbHUgbm90
IGZvdW5kIGluIEdQVUJpbmRHcm91cExheW91dCEiLCBmdW5jdGlvbk5hbWUsIHJlc291cmNlQmlu
ZGluZy5iaW5kaW5nKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBh
dXRvIGxheW91dEJpbmRpbmcgPSBsYXlvdXRJdGVyYXRvci0+dmFsdWU7Ci0KLSAgICAgICAgc3dp
dGNoIChsYXlvdXRCaW5kaW5nLnR5cGUpIHsKLSAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgbW9y
ZSByZXNvdXJjZSB0eXBlcy4KLSAgICAgICAgY2FzZSBHUFVCaW5kR3JvdXBMYXlvdXRCaW5kaW5n
OjpCaW5kaW5nVHlwZTo6VW5pZm9ybUJ1ZmZlcjoKLSAgICAgICAgY2FzZSBHUFVCaW5kR3JvdXBM
YXlvdXRCaW5kaW5nOjpCaW5kaW5nVHlwZTo6U3RvcmFnZUJ1ZmZlcjogewotICAgICAgICAgICAg
aWYgKGxheW91dEJpbmRpbmcudmlzaWJpbGl0eSAmIEdQVVNoYWRlclN0YWdlQml0OjpGbGFnczo6
VmVydGV4KQotICAgICAgICAgICAgICAgIHNldFJlc291cmNlQXNCdWZmZXJPbkVuY29kZXIodmVy
dGV4QXJncy5lbmNvZGVyLmdldCgpLCByZXNvdXJjZUJpbmRpbmcsIGZ1bmN0aW9uTmFtZSk7Ci0g
ICAgICAgICAgICBpZiAobGF5b3V0QmluZGluZy52aXNpYmlsaXR5ICYgR1BVU2hhZGVyU3RhZ2VC
aXQ6OkZsYWdzOjpGcmFnbWVudCkKLSAgICAgICAgICAgICAgICBzZXRSZXNvdXJjZUFzQnVmZmVy
T25FbmNvZGVyKGZyYWdtZW50QXJncy5lbmNvZGVyLmdldCgpLCByZXNvdXJjZUJpbmRpbmcsIGZ1
bmN0aW9uTmFtZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IEdQVUJpbmRHcm91cExheW91dEJpbmRpbmc6OkJpbmRpbmdUeXBlOjpTYW1wbGVyOiB7Ci0gICAg
ICAgICAgICBpZiAobGF5b3V0QmluZGluZy52aXNpYmlsaXR5ICYgR1BVU2hhZGVyU3RhZ2VCaXQ6
OkZsYWdzOjpWZXJ0ZXgpCi0gICAgICAgICAgICAgICAgc2V0UmVzb3VyY2VBc1NhbXBsZXJPbkVu
Y29kZXIodmVydGV4QXJncy5lbmNvZGVyLmdldCgpLCByZXNvdXJjZUJpbmRpbmcsIGZ1bmN0aW9u
TmFtZSk7Ci0gICAgICAgICAgICBpZiAobGF5b3V0QmluZGluZy52aXNpYmlsaXR5ICYgR1BVU2hh
ZGVyU3RhZ2VCaXQ6OkZsYWdzOjpGcmFnbWVudCkKLSAgICAgICAgICAgICAgICBzZXRSZXNvdXJj
ZUFzU2FtcGxlck9uRW5jb2RlcihmcmFnbWVudEFyZ3MuZW5jb2Rlci5nZXQoKSwgcmVzb3VyY2VC
aW5kaW5nLCBmdW5jdGlvbk5hbWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBHUFVCaW5kR3JvdXBMYXlvdXRCaW5kaW5nOjpCaW5kaW5nVHlwZTo6U2FtcGxl
ZFRleHR1cmU6IHsKLSAgICAgICAgICAgIGlmIChsYXlvdXRCaW5kaW5nLnZpc2liaWxpdHkgJiBH
UFVTaGFkZXJTdGFnZUJpdDo6RmxhZ3M6OlZlcnRleCkKLSAgICAgICAgICAgICAgICBzZXRSZXNv
dXJjZUFzVGV4dHVyZU9uRW5jb2Rlcih2ZXJ0ZXhBcmdzLmVuY29kZXIuZ2V0KCksIHJlc291cmNl
QmluZGluZywgZnVuY3Rpb25OYW1lKTsKLSAgICAgICAgICAgIGlmIChsYXlvdXRCaW5kaW5nLnZp
c2liaWxpdHkgJiBHUFVTaGFkZXJTdGFnZUJpdDo6RmxhZ3M6OkZyYWdtZW50KQotICAgICAgICAg
ICAgICAgIHNldFJlc291cmNlQXNUZXh0dXJlT25FbmNvZGVyKGZyYWdtZW50QXJncy5lbmNvZGVy
LmdldCgpLCByZXNvdXJjZUJpbmRpbmcsIGZ1bmN0aW9uTmFtZSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgTE9HKFdlYkdQVSwg
IiVzOiBSZXNvdXJjZSB0eXBlIG5vdCB5ZXQgaW1wbGVtZW50ZWQuIiwgZnVuY3Rpb25OYW1lKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBHUFVQcm9n
cmFtbWFibGVQYXNzRW5jb2Rlcjo6c2V0UmVzb3VyY2VBc0J1ZmZlck9uRW5jb2RlcihNVExBcmd1
bWVudEVuY29kZXIgKmFyZ3VtZW50RW5jb2RlciwgY29uc3QgR1BVQmluZEdyb3VwQmluZGluZyYg
YmluZGluZywgY29uc3QgY2hhciogY29uc3QgZnVuY3Rpb25OYW1lKQotewotI2lmIExPR19ESVNB
QkxFRAotICAgIFVOVVNFRF9QQVJBTShmdW5jdGlvbk5hbWUpOwotI2VuZGlmCi0gICAgaWYgKCFh
cmd1bWVudEVuY29kZXIpIHsKLSAgICAgICAgTE9HKFdlYkdQVSwgIiVzOiBObyBhcmd1bWVudCBl
bmNvZGVyIGZvciByZXF1ZXN0ZWQgc3RhZ2UgZm91bmQhIiwgZnVuY3Rpb25OYW1lKTsKKyAgICAg
ICAgTE9HKFdlYkdQVSwgIkdQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyOjpzZXRCaW5kR3JvdXAo
KTogSW52YWxpZCBvcGVyYXRpb246IEVuY29kaW5nIGlzIGVuZGVkISIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQotCi0gICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEdQVUJ1ZmZlckJp
bmRpbmc+KGJpbmRpbmcucmVzb3VyY2UpKSB7Ci0gICAgICAgIExPRyhXZWJHUFUsICIlczogUmVz
b3VyY2UgaXMgbm90IGEgYnVmZmVyIHR5cGUhIiwgZnVuY3Rpb25OYW1lKTsKLSAgICAgICAgcmV0
dXJuOworICAgIAorICAgIGlmIChiaW5kR3JvdXAudmVydGV4QXJnc0J1ZmZlcigpKQorICAgICAg
ICBzZXRWZXJ0ZXhCdWZmZXIoYmluZEdyb3VwLnZlcnRleEFyZ3NCdWZmZXIoKSwgMCwgaW5kZXgp
OworICAgIGlmIChiaW5kR3JvdXAuZnJhZ21lbnRBcmdzQnVmZmVyKCkpCisgICAgICAgIHNldEZy
YWdtZW50QnVmZmVyKGJpbmRHcm91cC5mcmFnbWVudEFyZ3NCdWZmZXIoKSwgMCwgaW5kZXgpOwor
CisgICAgZm9yIChhdXRvJiBidWZmZXJSZWYgOiBiaW5kR3JvdXAuYm91bmRCdWZmZXJzKCkpIHsK
KyAgICAgICAgdXNlUmVzb3VyY2UoYnVmZmVyUmVmLT5wbGF0Zm9ybUJ1ZmZlcigpLCBidWZmZXJS
ZWYtPmlzUmVhZE9ubHkoKSA/IE1UTFJlc291cmNlVXNhZ2VSZWFkIDogTVRMUmVzb3VyY2VVc2Fn
ZVJlYWQgfCBNVExSZXNvdXJjZVVzYWdlV3JpdGUpOworICAgICAgICBtX2NvbW1hbmRCdWZmZXIt
PnVzZUJ1ZmZlcihidWZmZXJSZWYuY29weVJlZigpKTsKICAgICB9Ci0KLSAgICBhdXRvJiBidWZm
ZXJCaW5kaW5nID0gV1RGOjpnZXQ8R1BVQnVmZmVyQmluZGluZz4oYmluZGluZy5yZXNvdXJjZSk7
Ci0gICAgYXV0byYgYnVmZmVyUmVmID0gYnVmZmVyQmluZGluZy5idWZmZXI7Ci0gICAgYXV0byBt
dGxCdWZmZXIgPSBidWZmZXJSZWYtPnBsYXRmb3JtQnVmZmVyKCk7Ci0KLSAgICBpZiAoIW10bEJ1
ZmZlcikgewotICAgICAgICBMT0coV2ViR1BVLCAiJXM6IEludmFsaWQgTVRMQnVmZmVyIGluIEdQ
VUJ1ZmZlckJpbmRpbmchIiwgZnVuY3Rpb25OYW1lKTsKLSAgICAgICAgcmV0dXJuOworICAgIGZv
ciAoYXV0byYgdGV4dHVyZVJlZiA6IGJpbmRHcm91cC5ib3VuZFRleHR1cmVzKCkpIHsKKyAgICAg
ICAgdXNlUmVzb3VyY2UodGV4dHVyZVJlZi0+cGxhdGZvcm1UZXh0dXJlKCksIHRleHR1cmVSZWYt
PmlzUmVhZE9ubHkoKSA/IE1UTFJlc291cmNlVXNhZ2VSZWFkIDogTVRMUmVzb3VyY2VVc2FnZVJl
YWQgfCBNVExSZXNvdXJjZVVzYWdlV3JpdGUpOworICAgICAgICBtX2NvbW1hbmRCdWZmZXItPnVz
ZVRleHR1cmUodGV4dHVyZVJlZi5jb3B5UmVmKCkpOwogICAgIH0KLQotICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKLQotICAgIFthcmd1bWVudEVuY29kZXIgc2V0QnVmZmVyOm10bEJ1
ZmZlciBvZmZzZXQ6YnVmZmVyQmluZGluZy5vZmZzZXQgYXRJbmRleDpiaW5kaW5nLmJpbmRpbmdd
OwotICAgIHVzZVJlc291cmNlKG10bEJ1ZmZlciwgYnVmZmVyUmVmLT5pc1JlYWRPbmx5KCkgPyBN
VExSZXNvdXJjZVVzYWdlUmVhZCA6IE1UTFJlc291cmNlVXNhZ2VSZWFkIHwgTVRMUmVzb3VyY2VV
c2FnZVdyaXRlKTsKLQotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBtX2Nv
bW1hbmRCdWZmZXItPnVzZUJ1ZmZlcihidWZmZXJSZWYuY29weVJlZigpKTsKLX0KLQotdm9pZCBH
UFVQcm9ncmFtbWFibGVQYXNzRW5jb2Rlcjo6c2V0UmVzb3VyY2VBc1NhbXBsZXJPbkVuY29kZXIo
TVRMQXJndW1lbnRFbmNvZGVyICphcmd1bWVudEVuY29kZXIsIGNvbnN0IEdQVUJpbmRHcm91cEJp
bmRpbmcmIGJpbmRpbmcsIGNvbnN0IGNoYXIgKmNvbnN0IGZ1bmN0aW9uTmFtZSkKLXsKLSNpZiBM
T0dfRElTQUJMRUQKLSAgICBVTlVTRURfUEFSQU0oZnVuY3Rpb25OYW1lKTsKLSNlbmRpZgotICAg
IGlmICghYXJndW1lbnRFbmNvZGVyKSB7Ci0gICAgICAgIExPRyhXZWJHUFUsICIlczogTm8gYXJn
dW1lbnQgZW5jb2RlciBmb3IgcmVxdWVzdGVkIHN0YWdlIGZvdW5kISIsIGZ1bmN0aW9uTmFtZSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRp
dmU8UmVmPEdQVVNhbXBsZXI+PihiaW5kaW5nLnJlc291cmNlKSkgewotICAgICAgICBMT0coV2Vi
R1BVLCAiJXM6IFJlc291cmNlIGlzIG5vdCBhIEdQVVNhbXBsZXIhIiwgZnVuY3Rpb25OYW1lKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8mIHNhbXBsZXJSZWYgPSBXVEY6Omdl
dDxSZWY8R1BVU2FtcGxlcj4+KGJpbmRpbmcucmVzb3VyY2UpOwotICAgIGF1dG8gbXRsU2FtcGxl
ciA9IHNhbXBsZXJSZWYtPnBsYXRmb3JtU2FtcGxlcigpOwotCi0gICAgaWYgKCFtdGxTYW1wbGVy
KSB7Ci0gICAgICAgIExPRyhXZWJHUFUsICIlczogSW52YWxpZCBNVExTYW1wbGVyU3RhdGUgaW4g
R1BVU2FtcGxlciBiaW5kaW5nISIsIGZ1bmN0aW9uTmFtZSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgW2FyZ3VtZW50RW5j
b2RlciBzZXRTYW1wbGVyU3RhdGU6bXRsU2FtcGxlciBhdEluZGV4OmJpbmRpbmcuYmluZGluZ107
Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLX0KLQotdm9pZCBHUFVQcm9ncmFtbWFi
bGVQYXNzRW5jb2Rlcjo6c2V0UmVzb3VyY2VBc1RleHR1cmVPbkVuY29kZXIoTVRMQXJndW1lbnRF
bmNvZGVyICphcmd1bWVudEVuY29kZXIsIGNvbnN0IEdQVUJpbmRHcm91cEJpbmRpbmcmIGJpbmRp
bmcsIGNvbnN0IGNoYXIqIGNvbnN0IGZ1bmN0aW9uTmFtZSkKLXsKLSNpZiBMT0dfRElTQUJMRUQK
LSAgICBVTlVTRURfUEFSQU0oZnVuY3Rpb25OYW1lKTsKLSNlbmRpZgotICAgIGlmICghYXJndW1l
bnRFbmNvZGVyKSB7Ci0gICAgICAgIExPRyhXZWJHUFUsICIlczogTm8gYXJndW1lbnQgZW5jb2Rl
ciBmb3IgcmVxdWVzdGVkIHN0YWdlIGZvdW5kISIsIGZ1bmN0aW9uTmFtZSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPEdQVVRl
eHR1cmU+PihiaW5kaW5nLnJlc291cmNlKSkgewotICAgICAgICBMT0coV2ViR1BVLCAiJXM6IFJl
c291cmNlIGlzIG5vdCBhIEdQVVRleHR1cmVWaWV3ISIsIGZ1bmN0aW9uTmFtZSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvJiB0ZXh0dXJlUmVmID0gV1RGOjpnZXQ8UmVmPEdQ
VVRleHR1cmU+PihiaW5kaW5nLnJlc291cmNlKTsKLSAgICBhdXRvIG10bFRleHR1cmUgPSB0ZXh0
dXJlUmVmLT5wbGF0Zm9ybVRleHR1cmUoKTsKLQotICAgIGlmICghbXRsVGV4dHVyZSkgewotICAg
ICAgICBMT0coV2ViR1BVLCAiJXM6IEludmFsaWQgTVRMVGV4dHVyZSBpbiBHUFVUZXh0dXJlVmll
dyBiaW5kaW5nISIsIGZ1bmN0aW9uTmFtZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBbYXJndW1lbnRFbmNvZGVyIHNl
dFRleHR1cmU6bXRsVGV4dHVyZSBhdEluZGV4OmJpbmRpbmcuYmluZGluZ107Ci0gICAgdXNlUmVz
b3VyY2UobXRsVGV4dHVyZSwgdGV4dHVyZVJlZi0+aXNSZWFkT25seSgpID8gTVRMUmVzb3VyY2VV
c2FnZVJlYWQgOiBNVExSZXNvdXJjZVVzYWdlUmVhZCB8IE1UTFJlc291cmNlVXNhZ2VXcml0ZSk7
Ci0KLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgbV9jb21tYW5kQnVmZmVy
LT51c2VUZXh0dXJlKHRleHR1cmVSZWYuY29weVJlZigpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L2NvY29hL0dQVVJlbmRlclBhc3NFbmNvZGVyTWV0YWwubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGFzc0VuY29kZXJNZXRhbC5tbQppbmRl
eCAxNDUyMWM1NmEyZjg3OTVkZGNkNjVkZDJiOGM0YTdlMjlmZTFjYmU2Li42ZDE3NjViNmQ0N2Q2
YjY3ZGRlMzZmNGY2N2JkNGFlZjAyMzI0MmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGFzc0VuY29kZXJNZXRhbC5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVy
UGFzc0VuY29kZXJNZXRhbC5tbQpAQCAtMjc3LDggKzI3Nyw5IEBAIHZvaWQgR1BVUmVuZGVyUGFz
c0VuY29kZXI6OnVzZVJlc291cmNlKE1UTFJlc291cmNlICpyZXNvdXJjZSwgdW5zaWduZWQgdXNh
Z2UpCiAgICAgICAgIExPRyhXZWJHUFUsICJHUFVSZW5kZXJQYXNzRW5jb2RlcjogSW52YWxpZCBv
cGVyYXRpb246IEVuY29kaW5nIGlzIGVuZGVkISIpOwogICAgICAgICByZXR1cm47CiAgICAgfQot
CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogICAgIFttX3BsYXRmb3JtUmVuZGVy
UGFzc0VuY29kZXIgdXNlUmVzb3VyY2U6cmVzb3VyY2UgdXNhZ2U6dXNhZ2VdOworICAgIEVORF9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKIHZvaWQgR1BVUmVuZGVyUGFzc0VuY29kZXI6OnNl
dFZlcnRleEJ1ZmZlcihNVExCdWZmZXIgKmJ1ZmZlciwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25l
ZCBpbmRleCkKQEAgLTI4Nyw4ICsyODgsOSBAQCB2b2lkIEdQVVJlbmRlclBhc3NFbmNvZGVyOjpz
ZXRWZXJ0ZXhCdWZmZXIoTVRMQnVmZmVyICpidWZmZXIsIHVuc2lnbmVkIG9mZnNldCwgdQogICAg
ICAgICBMT0coV2ViR1BVLCAiR1BVUmVuZGVyUGFzc0VuY29kZXI6IEludmFsaWQgb3BlcmF0aW9u
OiBFbmNvZGluZyBpcyBlbmRlZCEiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQorICAgIEJF
R0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICBbbV9wbGF0Zm9ybVJlbmRlclBhc3NFbmNv
ZGVyIHNldFZlcnRleEJ1ZmZlcjpidWZmZXIgb2Zmc2V0Om9mZnNldCBhdEluZGV4OmluZGV4XTsK
KyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCiB2b2lkIEdQVVJlbmRlclBhc3NF
bmNvZGVyOjpzZXRGcmFnbWVudEJ1ZmZlcihNVExCdWZmZXIgKmJ1ZmZlciwgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBpbmRleCkKQEAgLTI5Nyw4ICsyOTksOSBAQCB2b2lkIEdQVVJlbmRlclBh
c3NFbmNvZGVyOjpzZXRGcmFnbWVudEJ1ZmZlcihNVExCdWZmZXIgKmJ1ZmZlciwgdW5zaWduZWQg
b2Zmc2V0LAogICAgICAgICBMT0coV2ViR1BVLCAiR1BVUmVuZGVyUGFzc0VuY29kZXI6IEludmFs
aWQgb3BlcmF0aW9uOiBFbmNvZGluZyBpcyBlbmRlZCEiKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLQorICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICBbbV9wbGF0Zm9ybVJl
bmRlclBhc3NFbmNvZGVyIHNldEZyYWdtZW50QnVmZmVyOmJ1ZmZlciBvZmZzZXQ6b2Zmc2V0IGF0
SW5kZXg6aW5kZXhdOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKICNlbmRp
ZiAvLyBVU0UoTUVUQUwpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>