<?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>207198</bug_id>
          
          <creation_ts>2020-02-04 07:35:52 -0800</creation_ts>
          <short_desc>Implement the remote RenderingBackend</short_desc>
          <delta_ts>2020-02-27 13:50:51 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Canvas</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>207134</dependson>
          <blocked>204955</blocked>
    
    <blocked>207233</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>alecflett</cc>
    
    <cc>annulen</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>graouts</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hta</cc>
    
    <cc>jer.noble</cc>
    
    <cc>jsbell</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mkwst</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>noam</cc>
    
    <cc>pdr</cc>
    
    <cc>philipj</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>tommyw</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1614523</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-04 07:35:52 -0800</bug_when>
    <thetext>RemoteRenderingBackend and RemoteRenderingBackendProxy will be responsible of creating the remote ImageBuffer objects. RemoteRenderingBackend will create the remote ImageBuffer in WebProcess while RemoteRenderingBackendProxy will create the associated remote ImageBuffer proxy in the GPUProcess.

RemoteRenderingBackend will be created by WebChromeClient and owned by Chrome. ImageBuffer::create will have access to it through the HostWindow argument. All types of ImageBuffer will be created by RemoteRenderingBackend::createImageBuffer() method. In-process ImageBuffer types will be created by RenderingBackend:: createImageBuffer().

RemoteRenderingBackendProxy will be created and owned by GPUConnectionToWebProcess. RemoteRenderingBackend and RemoteRenderingBackendProxy will communicate with each other using IPC and a new ObjectIdentifier called RenderingBackendIdentifier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614540</commentid>
    <comment_count>1</comment_count>
      <attachid>389661</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-04 08:08:54 -0800</bug_when>
    <thetext>Created attachment 389661
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614636</commentid>
    <comment_count>2</comment_count>
      <attachid>389679</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-04 10:55:26 -0800</bug_when>
    <thetext>Created attachment 389679
Patch  for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622871</commentid>
    <comment_count>3</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-25 17:51:29 -0800</bug_when>
    <thetext>After making HostWindow be the creator of the remote ImageBuffer, there is no need for this bug.

*** This bug has been marked as a duplicate of bug 207134 ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623245</commentid>
    <comment_count>4</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-26 16:00:33 -0800</bug_when>
    <thetext>Will implement the RemoteRenderingBack because we do not what every RemoteImageBuffer to be a message sender or receiver.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623259</commentid>
    <comment_count>5</comment_count>
      <attachid>391802</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-26 16:19:17 -0800</bug_when>
    <thetext>Created attachment 391802
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623269</commentid>
    <comment_count>6</comment_count>
      <attachid>391806</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-26 16:39:01 -0800</bug_when>
    <thetext>Created attachment 391806
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623275</commentid>
    <comment_count>7</comment_count>
      <attachid>391806</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-02-26 16:49:44 -0800</bug_when>
    <thetext>Comment on attachment 391806
Patch

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

&gt; Source/WebKit/GPUProcess/GPUConnectionToWebProcess.h:65
&gt; +    IPC::MessageReceiverMap&amp; messageReceiverMap() { return m_messageReceiverMap; }

const?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623280</commentid>
    <comment_count>8</comment_count>
      <attachid>391806</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-02-26 16:52:57 -0800</bug_when>
    <thetext>Comment on attachment 391806
Patch

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

&gt;&gt; Source/WebKit/GPUProcess/GPUConnectionToWebProcess.h:65
&gt;&gt; +    IPC::MessageReceiverMap&amp; messageReceiverMap() { return m_messageReceiverMap; }
&gt; 
&gt; const?

IPC::MessageReceiverMap&amp; messageReceiverMap()
or
const IPC::MessageReceiverMap&amp; messageReceiverMap() const
or
both

but not:
IPC::MessageReceiverMap&amp; messageReceiverMap() const { return m_messageReceiverMap; }

please :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623316</commentid>
    <comment_count>9</comment_count>
      <attachid>391806</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-02-26 17:52:02 -0800</bug_when>
    <thetext>Comment on attachment 391806
Patch

Clearing flags on attachment: 391806

Committed r257542: &lt;https://trac.webkit.org/changeset/257542&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623317</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-02-26 17:52:05 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623318</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-02-26 17:53:19 -0800</bug_when>
    <thetext>&lt;rdar://problem/59830213&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623640</commentid>
    <comment_count>12</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-27 13:44:36 -0800</bug_when>
    <thetext>This patch broke the internal build bots. The break is happening because of unified sources.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623642</commentid>
    <comment_count>13</comment_count>
      <attachid>391907</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-27 13:47:42 -0800</bug_when>
    <thetext>Created attachment 391907
Fix internal bots</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623644</commentid>
    <comment_count>14</comment_count>
      <attachid>391907</attachid>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2020-02-27 13:50:49 -0800</bug_when>
    <thetext>Comment on attachment 391907
Fix internal bots

Clearing flags on attachment: 391907

Committed r257583: &lt;https://trac.webkit.org/changeset/257583&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623645</commentid>
    <comment_count>15</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2020-02-27 13:50:51 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389661</attachid>
            <date>2020-02-04 08:08:54 -0800</date>
            <delta_ts>2020-02-26 16:19:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207198-20200204080853.patch</filename>
            <type>text/plain</type>
            <size>457583</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU1NjIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmNmNGYxNTAyYjcxM2I5
ZWYyZTc0NjUyYmQ4MGFlOTI0Nzc3ODllNy4uMTA4OGY4OTMxZGI4NjhkNWM4NjE3NjQ4NzExM2M0
OGIzZGZiM2MzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4NSBAQAorMjAyMC0wMi0wNCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxl
bWVudCB0aGUgcmVtb3RlIFJlbmRlcmluZ0JhY2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzE5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4dGVuZCBSZW5kZXJpbmdNb2RlIHRvIGluY2x1ZGUg
bmV3IGVudW0gdmFsdWVzIGZvciBjcmVhdGluZyByZW1vdGUKKyAgICAgICAgSW1hZ2VCdWZmZXIg
dHlwZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVy
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oOgorCisyMDIwLTAyLTAzICBT
YWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW50
cm9kdWNlIFJlbmRlcmluZ0JhY2tlbmQgYW5kIG1ha2UgaXQgdGhlIGNyZWF0b3Igb2YgSW1hZ2VC
dWZmZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIw
NzEzNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJl
bmRlcmluZ0JhY2tlbmQgd2lsbCBiZSByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgdGhlIEltYWdl
QnVmZmVyLiBJbiBhCisgICAgICAgIGZvbGxvd2luZyBwYXRjaCBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kIHdpbGwgYmUgaW50cm9kdWNlZC4gSXQnbGwgaW5oZXJpdAorICAgICAgICBSZW5kZXJpbmdC
YWNrZW5kIGFuZCBsaXZlIGluIFdlYktpdC4gSXQgd2lsbCBiZSByZXNwb25zaWJsZSBmb3IgY3Jl
YXRpbmcKKyAgICAgICAgdGhlIFJlbW90ZUltYWdlQnVmZmVyLiBUaGUgZ29hbCBmb3IgUmVuZGVy
aW5nQmFja2VuZCBhbmQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZAorICAgICAgICBpcyB0byBpbnRl
cmFjdCB3aXRoIFJlbW90ZUltYWdlQnVmZmVyIHNlYW1sZXNzbHkgaW4gdGhlIGNhbGxlciBzaWRl
LgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGFn
ZS9DaHJvbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lOjpzaGFyZWRSZW5kZXJpbmdC
YWNrZW5kIGNvbnN0KToKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5oOgorICAgICAgICAqIHBhZ2Uv
Q2hyb21lQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OmNyZWF0ZVJl
bmRlcmluZ0JhY2tlbmQgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL0hvc3RXaW5kb3cuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0dWFsSW1hZ2VCdWZmZXIuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9S
ZW5kZXJpbmdCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJpbmdC
YWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZDo6c2hh
cmVkUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJpbmdCYWNrZW5k
OjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVy
aW5nQmFja2VuZC5oOiBBZGRlZC4KKworMjAyMC0wMi0wMiAgU2FpZCBBYm91LUhhbGxhd2EgIDxz
YWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIENyZWF0ZSBhIG5ldyBJbWFnZUJ1ZmZl
ciB0eXBlIGZvciBkcmF3aW5nIG9uIGEgRGlzcGxheUxpc3QKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzEwOQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgaW5oZXJp
dHMgSW1hZ2VCdWZmZXIgYW5kIERyYXdpbmdDb250ZXh0LiBUaGUgCisgICAgICAgIGRyYXdpbmcg
Y29udGV4dCB3aWxsIGJlIHRoZSBjb250ZXh0IG9mIHRoZSBkaXNwbGF5IGxpc3QuIFRoZSBJbWFn
ZUJ1ZmZlcgorICAgICAgICBvcGVyYXRpb25zIHdpbGwgZW5zdXJlIHRoZSByZWNvcmRlZCBkaXNw
bGF5LWxpc3QgaXMgcmVwbGF5ZWQgYmFjayBiZWZvcmUKKyAgICAgICAgZ2V0dGluZyB0aGUgcGl4
ZWxzIG9mIHRoZSBJbWFnZUJ1ZmZlckJhY2tlbmQuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlQ29udGV4dDJk
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpzZXRVc2VzRGlzcGxheUxp
c3REcmF3aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpzZXRUcmFj
a3NEaXNwbGF5TGlzdFJlcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVu
dDo6ZGlzcGxheUxpc3RBc1RleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZh
c0VsZW1lbnQ6OnJlcGxheURpc3BsYXlMaXN0QXNUZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlciBjb25zdCk6CisgICAgICAg
ICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0NvbnRleHR1YWxJbWFnZUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbElt
YWdlQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVm
ZmVyOjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVm
ZmVyOjpjb3B5TmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdl
QnVmZmVyOjpjb3B5SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVm
ZmVyOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6ZHJh
d1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjpzaW5r
SW50b05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZl
cjo6c2lua0ludG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZm
ZXI6OmRyYXdDb25zdW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVm
ZmVyOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1
YWxJbWFnZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdEltYWdlQnVmZmVyOjpEaXNwbGF5TGlzdEltYWdlQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6On5EaXNwbGF5TGlzdEltYWdlQnVmZmVy
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdp
bmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpmbHVzaERyYXdpbmdD
b250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVy
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250
ZXh0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250
ZXh0OjpEcmF3aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d2luZ0NvbnRleHQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdpbmdDb250ZXh0OjpkaXNwbGF5TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OmRpc3BsYXlMaXN0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6cmVwbGF5RGlzcGxheUxpc3QgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpzZXRU
cmFja3NEaXNwbGF5TGlzdFJlcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd2luZ0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0KToKKworMjAyMC0wMS0zMSAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEFsbG93IGRp
ZmZlcmVudCBiYWNrLWVuZHMgZm9yIEltYWdlQnVmZmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDcwNDgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbWFnZUJ1ZmZlciB3aWxsIGJlIHJlLWZhY3RvcmVk
IHRvIGRlY291cGxlIHRoZSBwbGF0Zm9ybSBzcGVjaWZpY3MgYW5kCisgICAgICAgIHRoZSBiYWNr
LWVuZCBkZXRhaWxzIGZyb20gdGhlIGludGVyZmFjZSAiSW1hZ2VCdWZmZXIiLgorCisgICAgICAg
IEEgY2xhc3MgaGllcmFyY2h5IGZvciB0aGUgSW1hZ2VCdWZmZXJCYWNrZW5kIHdpbGwgYWRkZWQg
dG8gYWxsb3cgY29kZQorICAgICAgICBzaGFyaW5nIGFuZCB0byBzcGxpdCB0aGUgY29kZSBhY2Nv
cmRpbmcgdG8gdGhlIHBsYXRmb3JtIGFuZCB0aGUgYmFjay1lbmQKKyAgICAgICAgZGV0YWlscy4K
KworICAgICAgICBJbWFnZUJ1ZmZlciB3aWxsIGJlIGtlcHQgaW50ZXJmYWNlIHdpdGggdGhlIHJl
c3Qgb2YgdGhlIGNvZGUgYnV0IGRpZmZlcmVudAorICAgICAgICBiYWNrLWVuZHMgd2lsbCBiZSBj
cmVhdGVkLiBDb250ZXh0dWFsSW1hZ2VCdWZmZXIgaXMgYSB0ZW1wbGF0ZSBjbGFzcyB3aGljaAor
ICAgICAgICBpbmhlcml0cyBJbWFnZUJ1ZmZlciBhbmQgd2lsbCAgYWN0IGFzIGEgYnJpZGdlIHRv
IHRoZSBjb25jcmV0ZQorICAgICAgICBJbWFnZUJ1ZmZlckJhY2tlbmQuCisKKyAgICAgICAgQmFz
ZWQgb24gdGhlIFJlbmRlcmluZ01vZGUsIGEgQ29udGV4dHVhbEltYWdlQnVmZmVyPEJhY2tlbmRU
eXBlPiB3aWxsCisgICAgICAgIGJlIGNyZWF0ZWQuIEluc3RlYWQgb2YgY2hlY2tpbmcgdGhlIHJl
bmRlcmluZ01vZGUgaW4gbWFueSBwbGFjZXMgb2YgdGhlCisgICAgICAgIGNvZGUgYW5kIGluc3Rl
YWQgb2YgYW5kIHVzaW5nIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLCBhbGwgdGhlc2UgZGVjaXNp
b25zCisgICAgICAgIHdpbGwgYmUgbWFkZSBpbiB0aGUgY29uY3JldGUgSW1hZ2VCdWZmZXJCYWNr
ZW5kLgorCisgICAgICAgIFRoaXMgcmUtZmFjdG9yaW5nIHdpbGwgYWxsb3cgY3JlYXRpbmcgbmV3
IHR5cGVzIG9mIEltYWdlQnVmZmVycyBiYWNrZWQgYnkKKyAgICAgICAgbmV3IEltYWdlQnVmZmVy
QmFja2VuZHMuIFRoZXNlIG5ldyBJbWFnZUJ1ZmZlckJhY2tlbmRzIHdpbGwgaW1wbGVtZW50Cisg
ICAgICAgIERpc3BsYXlMaXN0IGRyYXdpbmcgYW5kIHN5bmNocm9uaXplIHJlbW90ZSByZW5kZXJp
bmcuCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtQXBwbGVX
aW4uY21ha2U6CisgICAgICAgICogUGxhdGZvcm1GVFcuY21ha2U6CisgICAgICAgICogUGxhdGZv
cm1NYWMuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1XaW4uY21ha2U6CisgICAgICAgICogU291
cmNlcy50eHQ6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaHRtbC9DYW52YXNCYXNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0Jhc2U6OnNldEltYWdlQnVmZmVyIGNvbnN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9DYWlyby5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9Tb3Vy
Y2VzQ2Fpcm8udHh0OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNw
cDoKKworICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lUmVzcGVjdGluZ09yaWVudGF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Db250ZXh0dWFsSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250
ZXh0dWFsSW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFs
SW1hZ2VCdWZmZXI6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZXh0dWFsSW1hZ2VCdWZmZXI6OmVuc3VyZUJhY2tlbmQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEpOgorICAgICAgICBBIGJy
aWRnZSBjbGFzcyB0byBJbWFnZUJ1ZmZlckJhY2tlbmQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxl
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb252ZXJ0VG9MdW1pbmFuY2VN
YXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwbGF0Zm9ybUxh
eWVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb3B5
VG9QbGF0Zm9ybVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXI6Om1lbW9yeUNvc3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OmV4dGVybmFsTWVtb3J5Q29zdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3UGF0dGVybik6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6aW50ZXJuYWxTaXplIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpsb2dpY2FsU2l6ZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cmVzb2x1dGlvblNj
YWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpiYXNl
VHJhbnNmb3JtIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgUmVtb3ZlIGFsbCB0aGUgYmFjay1l
bmQgYW5kIHBsYXRmb3JtcyBkZXRhaWxzLiBVbmlmeSB0aGUgaW50ZXJmYWNlIHN1Y2gKKyAgICAg
ICAgdGhhdCBJbWFnZUJ1ZmZlciBkb2VzIG5vdCBpbmNsdWRlIHByZXByb2Nlc3NvciBkaXJlY3Rp
dmVzLiBBbGwgdGhlIAorICAgICAgICBwbGF0Zm9ybSBzcGVjaWZpY3Mgd2lsbCBiZSBpbiBJbWFn
ZUJ1ZmZlckJhY2tlbmQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ckJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2Vu
ZDo6SW1hZ2VCdWZmZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFj
a2VuZDo6Y2FsY3VsYXRlQmFja2VuZFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJCYWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQmFja2VuZDo6c2lua0ludG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckJhY2tlbmQ6OmRyYXdDb25zdW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpj
b3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5
UHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBsaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlV
bnByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29weUZ1
bmN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjb3B5SW1hZ2VQ
aXhlbHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJ
bWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpw
dXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFj
a2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Zmx1
c2hDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6bG9naWNh
bFNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpiYWNr
ZW5kU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnJl
c29sdXRpb25TY2FsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmNvbG9yU3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNr
ZW5kOjpiYXNlVHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
QmFja2VuZDo6bWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OmV4dGVybmFsTWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckJhY2tlbmQ6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpwbGF0Zm9ybUxheWVyIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y29weVRvUGxhdGZvcm1UZXh0dXJlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Ynl0ZXNQZXJSb3cgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpiYWNrZW5kQ29sb3JGb3Jt
YXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JhY2tl
bmRDb29yZGluYXRlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmxvZ2ljYWxSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFj
a2VuZDo6YmFja2VuZFJlY3QgY29uc3QpOgorICAgICAgICBBIGJhc2UgY2xhc3Mgd2hpY2ggZGVm
aW5lcyBzb21lICBkZWZhdWx0IGJlaGF2aW9ycyBzbyBub3QgYWxsIHRoZSBwbGF0Zm9ybXMKKyAg
ICAgICAgaGF2ZSB0byBpbXBsZW1lbnQgdGhlbS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvU2hhZG93Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpkcmF3
U2hhZG93QnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09w
ZXJhdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OmRyYXdTaGFkb3dMYXllckJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6ZHJhd1NoYWRvd0ltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhaXJvOjpmaWxsU2hhZG93QnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJD
YWlyb0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fp
cm9CYWNrZW5kOjpjb3B5SW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJDYWlyb0JhY2tlbmQ6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWly
b0JhY2tlbmQ6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fp
cm9CYWNrZW5kOjp0cmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGFVUkwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YSBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6cGxhdGZvcm1UcmFuc2Zvcm1D
b2xvclNwYWNlKToKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpj
bGVhclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFj
ZUJhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xT
dXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6On5JbWFnZUJ1ZmZl
ckNhaXJvR0xTdXJmYWNlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
cGxhdGZvcm1MYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJv
R0xTdXJmYWNlQmFja2VuZDo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpjcmVhdGVDb21wb3NpdG9yQnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5k
Ojpzd2FwQnVmZmVyc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fp
cm9HTFN1cmZhY2VCYWNrZW5kOjpwYWludFRvVGV4dHVyZU1hcHBlcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuaDog
QWRkZWQuCisgICAgICAgIEFuIGFjY2VsZXJhdGVkIENhaXJvIGJhY2stZW5kLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJh
Y2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9JbWFn
ZVN1cmZhY2VCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJD
YWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNr
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNr
ZW5kOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmg6IEFkZGVk
LgorICAgICAgICBBbiB1bmFjY2VsZXJhdGVkIENhaXJvIGJhY2stZW5kLgorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tl
bmQ6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpieXRlc1BlclJvdyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmNv
cHlOYXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJv
U3VyZmFjZUJhY2tlbmQ6OmNhaXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2UgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjp0b0JHUkFEYXRhIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6
Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9T
dXJmYWNlQmFja2VuZDo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaDogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwOiBBZGRl
ZC4KKyAgICAgICAgQSBDYWlybyBzdXJmYWNlIGJhc2UgY2xhc3MgYmFjay1lbmQuCisKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb250ZXh0Q29sb3JTcGFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2V0dXBDb250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2lua0ludG9JbWFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhdyk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmJhc2VUcmFuc2Zvcm0gY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvQ0ZEYXRhIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGEgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YVVSTCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjptYWtlVkltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlJbWFn
ZVBpeGVsc0FjY2VsZXJhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNr
ZW5kOjpjb3B5SW1hZ2VQaXhlbHMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICBBIGJhc2UgY2xhc3Mg
Zm9yIGFsbCBDRyBiYWNrLWVuZHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvbnRleHQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvcHlO
YXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmg6IEFkZGVkLgor
ICAgICAgICBBbiB1bmFjY2VsZXJhdGVkIENHIGJhY2stZW5kLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwOiBSZW1vdmVkLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNh
bGN1bGF0ZUJhY2tlbmRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZDo6Y29udGV4dENvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb250ZXh0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Zmx1c2hD
b250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6
bWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQ6OmV4dGVybmFsTWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmJ5dGVzUGVyUm93IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6YmFja2VuZENvbG9yRm9ybWF0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6
Y29weU5hdGl2ZUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZDo6c2lua0ludG9OYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmRyYXdDb25zdW1pbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRh
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6
cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgIEFuIElPU3VyZmFjZSBhY2NlbGVy
YXRlZCBDRyBiYWNrLWVuZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRv
Y3VtZW50SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6dXBk
YXRlQ2FjaGVkSW1hZ2VJZk5lZWRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvSU9TdXJmYWNlLm1tOgorICAgICAgICAoV2ViQ29yZTo6SU9TdXJmYWNlOjpjcmVhdGVGcm9t
SW1hZ2VCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJE
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZm
ZXJEYXRhRGlyZWN0MkQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpJbWFnZUJ1ZmZlckRpcmVj
dDJEQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2Vu
ZDo6Y29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJE
QmFja2VuZDo6Zmx1c2hDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGly
ZWN0MkRCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
Qml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y29weUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpzaW5rSW50b0ltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjb21wYXRpYmxlQml0bWFwKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpkcmF3KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpkcmF3UGF0dGVybik6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6dG9EYXRhVVJM
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjp0
b0RhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tl
bmQ6OnRvQkdSQURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJl
Y3QyREJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaDogQWRkZWQuCisgICAg
ICAgIFJlbW92ZSBEaXJlY3QyRCBpbXBsZW1lbnRhdGlvbiBmb3IgSW1hZ2VCdWZmZXIuIEludHJv
ZHVjZSAKKyAgICAgICAgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQgaW5zdGVhZC4KKworICAg
ICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVyVmlkZW9D
YXB0dXJlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldyYXBwZWRNb2NrUmVhbHRpbWVW
aWRlb1NvdXJjZTo6dXBkYXRlU2FtcGxlQnVmZmVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3Zn
L1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyaW5n
Q29udGV4dDo6YnVmZmVyRm9yZWdyb3VuZCk6CisKKzIwMjAtMDEtMjggIFNhaWQgQWJvdS1IYWxs
YXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIEltYWdlQnVmZmVy
OjpnZXRJbWFnZURhdGEoKSBhbmQgcHV0SW1hZ2VEYXRhKCkgcmV0dXJuIGFuZCB0YWtlIEltYWdl
RGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2
NjIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLS0g
Q29tYmluZSBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKCkgYW5kIGdldFBy
ZW11bHRpcGxpZWRJbWFnZURhdGEoKQorICAgICAgICAgICBpbiBvbmUgZnVuY3Rpb24gYW5kIG5h
bWUgaXQgZ2V0SW1hZ2VEYXRhKCk7CisKKyAgICAgICAgLS0gTWFrZSBnZXRJbWFnZURhdGEoKSBy
ZXR1cm5zIGFuIFJlZlB0cjxJbWFnZURhdGE+IHNpbmNlIHRoZSBjYW52YXMgY29kZQorICAgICAg
ICAgICB1c2VkIHRvIGVuY2Fwc3VsYXRlIHRoZSByZXR1cm5lZCBVaW50OENsYW1wZWRBcnJheSBp
bnRvIGFuIEltYWdlRGF0YQorICAgICAgICAgICBhbmQgc2VuZCBpdCB0byBKYXZhU2NyaXB0Q29y
ZS4KKworICAgICAgICAtLSBSZW5hbWUgSW1hZ2VCdWZmZXI6OnB1dEJ5dGVBcnJheSgpIHRvIElt
YWdlQnVmZmVyOjpwdXRJbWFnZURhdGEoKSBhbmQKKyAgICAgICAgICAgbWFrZSBpdCB0YWtlIGFu
IEltYWdlRGF0YSBzaW5jZSB0aGUgYnl0ZSBhcnJheSBoYXMgdG8gYmUgYXNzb2NpYXRlZAorICAg
ICAgICAgICB3aXRoIGFuIEludFNpemUgYW5kIHNlcGFyYXRpbmcgdGhlbSBkb2VzIG5vdCBsb29r
IGEgZ29vZCBkZXNpZ24uCisKKyAgICAgICAgLS0gUmVtb3ZlIHRoZSBlbnVtIEltYWdlQnVmZmVy
OjpDb29yZGluYXRlU3lzdGVtLiBBbGwgdGhlIGNhbGxlcnMgbmVlZCB0bworICAgICAgICAgICBw
YXNzIHJlY3RhbmdsZXMgYW5kIHNpemVzIGluIGxvZ2ljYWwgY29vcmRpbmF0ZXMuIFRoZSBJbWFn
ZURhdGEgaGFzIHRvCisgICAgICAgICAgIGJlIHNjYWxlZCBhY2NvcmRpbmcgdG8gdGhlIEltZ2VC
dWZmZXI6OnJlc29sdXRpb25TY2FsZSgpLiAKKworICAgICAgICAqIGJpbmRpbmdzL2pzL1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6
OmR1bXBJbWFnZUJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6
cmVhZEltYWdlQml0bWFwKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaDoKKyAgICAgICAgKiBwYWdlL1BhZ2VD
b25zb2xlQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb25zb2xlQ2xpZW50Ojpz
Y3JlZW5zaG90KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29udmVydFRvTHVtaW5hbmNlTWFzayk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFjZSk6IERl
bGV0ZWQuCisgICAgICAgIE1vdmUgdGhpcyBmdW5jdGlvbiB0byBJbWFnZUJ1ZmZlckNhaXJvLmNw
cC4KKworICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdlbmVyaWNDb252ZXJ0VG9MdW1p
bmFuY2VNYXNrKTogRGVsZXRlZC4KKyAgICAgICAgY29udmVydFRvTHVtaW5hbmNlTWFzaygpIGFu
ZCBnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpIGFyZSBub3QgCisgICAgICAgIG92ZXJy
aWRkZW4gYnkgYW55IHBsYXRmb3JtLiBTbyBkZWxldGUgZ2VuZXJpY0NvbnZlcnRUb0x1bWluYW5j
ZU1hc2soKSBhbmQKKyAgICAgICAgbW92ZSBpdHMgYm9keSB0byBjb252ZXJ0VG9MdW1pbmFuY2VN
YXNrKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpk
cmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRJbWFnZURh
dGEpOgorICAgICAgICBNYWtlIHRoZSBwcml2YXRlIGZ1bmN0aW9ucyBiZSBwdWJsaWMgYW5kIHJl
bW92ZSB0aGUgZnJpZW5kIGNsYXNzZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9T
aGFkb3dCbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmJsdXJTaGFkb3dC
dWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3Bh
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SW1hZ2VEYXRhKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmxvZ2ljYWxVbml0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OmJhY2tpbmdTdG9yZVVuaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFy
cmF5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dG9DRkRhdGEgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdl
RGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0
Qnl0ZUFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckRhdGFDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6Omdl
dERhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRh
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oOgor
ICAgICAgICBBbGwgdGhlIHJlY3RhbmdsZXMgYW5kIHNpemVzIGhhdmUgdG8gYmUgcGFzc2VkIGlu
IGxvZ2ljYWwgY29vcmRpbmF0ZXMuIFRvCisgICAgICAgIGRlYWwgd2l0aCB0aGUgcGl4ZWxzJyBk
YXRhIHdlIG5lZWQgdG8gc2NhbGUgdGhlbSBieSB0aGUgcmVzb2x1dGlvblNjYWxlKCkuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaDoK
KyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXgu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2Vt
ZW50TWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
cm9wU2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKToKKyAgICAgICAgVGhpcyB3YXMgdGhlIG9ubHkgcGxhY2Ugd2hpY2ggd2Fz
IHBhc3NpbmcgYSByZWN0YW5nbGUgaW4gYSB0aGUgYmFjay1lbmQKKyAgICAgICAgY29vcmRpbmF0
ZXMgYWxvbmcgd2l0aCBCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtLiBJbnN0ZWFkIHdlIGNh
biBwYXNzCisgICAgICAgIHRoZSByZWN0YW5nbGUgaW4gbG9naWNhbCBjb29yZGluYXRlcyBhbmQg
dGhlbiB1c2UgSW1hZ2VEYXRhOjpzaXplKCkgc2luY2UKKyAgICAgICAgaXQgbXVzdCBiZSBzY2Fs
ZWQgd2l0aCByZXNvbHV0aW9uU2NhbGUoKSB3aGVuIHRoZSBJbWFnZURhdGEgaXMgY3JlYXRlZC4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdl
UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZl
ckRhdGFEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6Omdl
dERhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRh
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0
MkQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3Qy
RC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGll
ZEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cjo6cHV0Qnl0ZUFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1No
YXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlOjpjcmVhdGVSYXN0ZXJTaGFwZSk6CisK
IDIwMjAtMDItMDMgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CiAKICAgICAgICAg
Q3Jhc2ggaW4gV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmNyZWF0ZUluZGV4CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CmluZGV4IGY4YzhjMzNhN2QzNGZhM2JmYmZkZTFmMzljZDg3YzE5YzViY2RjZWEuLjRhMGFlMjhj
M2NlMDVkYjU0Y2M4YmFmZWZiOTUzZmQyM2U3NGU5N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTE5
IEBACisyMDIwLTAyLTA0ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5j
b20+CisKKyAgICAgICAgSW1wbGVtZW50IHRoZSByZW1vdGUgUmVuZGVyaW5nQmFja2VuZAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3MTk4CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLS0gUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZCB3aWxsIGJlIGNyZWF0ZWQgYnkgV2ViQ2hyb21lQ2xpZW50IGFuZCBvd25l
ZCBieQorICAgICAgICBDaHJvbWUuIEltYWdlQnVmZmVyOjpjcmVhdGUgd2lsbCBoYXZlIGFjY2Vz
cyB0byBpdCB0aHJvdWdoIHRoZSBIb3N0V2luZG93CisgICAgICAgIGFyZ3VtZW50LiBBbGwgdHlw
ZXMgb2YgSW1hZ2VCdWZmZXIgd2lsbCBiZSBjcmVhdGVkIGJ5CisgICAgICAgIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKCkgbWV0aG9kLiBJbi1wcm9jZXNzIEltYWdl
QnVmZmVyCisgICAgICAgIHR5cGVzIHdpbGwgYmUgY3JlYXRlZCBieSBSZW5kZXJpbmdCYWNrZW5k
OjogY3JlYXRlSW1hZ2VCdWZmZXIoKS4KKworICAgICAgICAtLSBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkgd2lsbCBiZSBjcmVhdGVkIGFuZCBvd25lZCBieQorICAgICAgICBHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxl
bGlzdDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdDoKKyAgICAg
ICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorCisgICAgICAgICogR1BVUHJvY2Vzcy9HUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzczo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OkdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAg
ICAgQWRkIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGFuZCByZWxlYXNpbmcgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5LgorCisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6OmRpc3BhdGNoTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3M6OmRpc3BhdGNoU3luY01lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlTWVzc2FnZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVTeW5jTWVzc2Fn
ZSk6IERlbGV0ZWQuCisgICAgICAgICogR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLmg6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6Om1lc3Nh
Z2VSZWNlaXZlck1hcCk6CisgICAgICAgIEFkZCBhIE1lc3NhZ2VSZWNlaXZlck1hcCB0byBHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzIHNvIG1lc3NhZ2VzIGNhbiBiZQorICAgICAgICBkaXNwYXRj
aGVkIHRvIGl0cyBNZXNzYWdlUmVjZWl2ZXJzLgorCisgICAgICAgICogR1BVUHJvY2Vzcy9HUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluOgorICAgICAgICBBZGQgdGhlIGF0dHJp
YnV0ZSAnV2FudHNEaXNwYXRjaE1lc3NhZ2UnLgorICAgICAgICBBZGQgbWVzc2FnZXMgZm9yIGNy
ZWF0aW5nIGFuZCByZWxlYXNpbmcgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LgorCisgICAg
ICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eTo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojp+UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlU2Vu
ZGVyQ29ubmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eTo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQgY29uc3QpOgorCisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlSW1hZ2VCdWZmZXIp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlbGVhc2VJ
bWFnZUJ1ZmZlcik6CisgICAgICAgIEFkZCBtZXRob2RzIGZvciBjcmVhdGluZyBhbmQgcmVsZWFz
aW5nIHJlbW90ZSBJbWFnZUJ1ZmZlciBwcm94eS4KKworICAgICAgICAqIEdQVVByb2Nlc3MvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaDogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW46IEFkZGVkLgorICAgICAg
ICBBZGQgbWVzc2FnZXMgZm9yIGNyZWF0aW5nIGFuZCByZWxlYXNpbmcgcmVtb3RlIEltYWdlQnVm
ZmVyIHByb3h5LgorCisgICAgICAgICogR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlU2FtcGxlQnVm
ZmVyRGlzcGxheUxheWVyLmg6CisgICAgICAgICogR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlU2Ft
cGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlci5jcHA6CisgICAgICAgICogR1BVUHJvY2Vzcy93
ZWJydGMvUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlci5oOgorCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHk6CisgICAgICAgIElmIHRoZSBhdHRyaWJ1dGUg
V2FudHNEaXNwYXRjaE1lc3NhZ2UgaXMgYWRkZWQgdG8gdGhlIG1lc3NhZ2VzLmluIGZpbGUsCisg
ICAgICAgIGEgY2FsbCB0byAnZGlzcGF0Y2hNZXNzYWdlKCknIHdpbGwgYmUgYWRkZWQgdG8gZGlk
UmVjZWl2ZU1lc3NhZ2UoKSBhbmQKKyAgICAgICAgYSBjYWxsIHRvICdkaXNwYXRjaFN5bmNNZXNz
YWdlKCknIHdpbGwgYmUgYWRkZWQgdG8gZGlzcGF0Y2hTeW5jTWVzc2FnZSgpCisgICAgICAgIGV2
ZW4gaWYgbm8gbWVzc2FnZXMgYXJlIGRlZmluZWQgaW4gbWVzc2FnZXMuaW4uCisKKyAgICAgICAg
KiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgIEFkZCBlbmNvZGluZyBh
bmQgZGVjb2Rpbmcgc3VwcG9ydCBmb3IgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbmQgUmVuZGVy
aW5nTW9kZS4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2Nv
YS50eHQ6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHA6CisgICAgICAg
IChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRjaE1lc3NhZ2UpOgorICAgICAg
ICAoV2ViS2l0OjpHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlzcGF0Y2hTeW5jTWVzc2FnZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlSW52YWxpZE1l
c3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2
ZU1lc3NhZ2UpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3ND
b25uZWN0aW9uLmg6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjptZXNz
YWdlUmVjZWl2ZXJNYXApOgorICAgICAgICBBZGQgYSBNZXNzYWdlUmVjZWl2ZXJNYXAgdG8gR1BV
UHJvY2Vzc0Nvbm5lY3Rpb24gc28gbWVzc2FnZXMgY2FuIGJlCisgICAgICAgIGRpc3BhdGNoZWQg
dG8gaXRzIE1lc3NhZ2VSZWNlaXZlcnMuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9HUFVQ
cm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbjoKKyAgICAgICAgQWRkIHRoZSBhdHRyaWJ1dGUg
J1dhbnRzRGlzcGF0Y2hNZXNzYWdlJy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRl
cmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmg6IEFkZGVkLgorICAgICAgICBBZGQg
YW4gT2JqZWN0SWRlbnRpZmllciBmb3IgcmVtb3RlIEltYWdlQnVmZmVyLgorCisgICAgICAgICog
V2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp+
UmVtb3RlUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQgY29u
c3QpOgorCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUlt
YWdlQnVmZmVyKToKKyAgICAgICAgQ3JlYXRlcyBhbGwgdHlwZXMgb2YgSW1hZ2VCdWZmZXIuIEZv
ciBub3cgaXQgb25seSBjcmVhdGVzIHRoZSBpbiBwcm9jZXNzCisgICAgICAgIFJlbmRlcmluZ0Jh
Y2tlbmQuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVu
ZGVyaW5nQmFja2VuZC9SZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oOiBBZGRlZC4KKworICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kIGNv
bnN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5oOgorICAgICAgICBDcmVhdGUgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCB3aGljaCB3aWxsIGJl
IG93bmVkIGJ5IHRoZSBDaHJvbWUuCisKKzIwMjAtMDItMDMgIFNhaWQgQWJvdS1IYWxsYXdhICA8
c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBBbGxvdyBkaWZmZXJlbnQgYmFjay1l
bmRzIGZvciBJbWFnZUJ1ZmZlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA3MDQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJGcmFtZTo6Y3JlYXRlU2VsZWN0aW9uU25hcHNob3QgY29uc3QpOgorCiAyMDIw
LTAyLTAzICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgW1dLMl0g
VXNlIHBlci1VSVByb2Nlc3MgZGVmYXVsdCBjb29raWUgc3RvcmFnZSBmb3IgTWFjIENhdGFseXN0
IGFwcHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2Uv
V2ViQ29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IDUyYjM2NDEwOTg5NjU4ZDQ5ZmMyNTA2OWQyMDgz
MDk0NWYwNjhkMmIuLjQ4NjFmMjhmZGIwNmZiZmJmMGM5NjEyM2RlMjBjMzE0MWQxYzlmNTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNv
cmUvSGVhZGVycy5jbWFrZQpAQCAtMTA0Myw2ICsxMDQzLDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFU
RV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9ySGFzaC5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29tcGxleFRleHRDb250cm9sbGVyLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0dWFs
SW1hZ2VCdWZmZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rhc2hBcnJheS5oCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvRGVjb2RpbmdPcHRpb25zLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9E
aXNwbGF5UmVmcmVzaE1vbml0b3IuaApAQCAtMTA5NCw3ICsxMDk1LDcgQEAgc2V0KFdlYkNvcmVf
UFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
RGF0YS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZU9ic2VydmVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9yaWVudGF0aW9uLmgKQEAg
LTExMjcsMTIgKzExMjgsMTQgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVS
UwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMuaAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL1BhdHRlcm4uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5o
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvUGxhdGZvcm1MYXllci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZv
cm1NZWRpYVJlc291cmNlTG9hZGVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRl
eHRUcmFjay5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1UaW1lUmFuZ2VzLmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1JlbW90
ZVZpZGVvU2FtcGxlLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9Sb3VuZGVkUmVjdC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9y
LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UgYi9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCmluZGV4IGY3MTI5MjdjYzkxOGYz
YWIwZmU3MDhhOGFjMDE3YmQwZjNjZjk0MGQuLjVkMTc3NDNlZDM4NDMwMTFmYTg2Y2U1MTFiZTky
OTMzMDk5MjkyZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4u
Y21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQpAQCAtODMs
OCArODMsNyBAQCBpZiAoJHtVU0VfRElSRUNUMkR9KQogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NMYXllckRpcmVjdDJELmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3QyRC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlRGlyZWN0MkQuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9O
YXRpdmVJbWFnZURpcmVjdDJELmNwcApAQCAtMTMyLDggKzEzMSw5IEBAIGVsc2UgKCkKICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAKICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCiAgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyRGF0YUNHLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHQmFja2VuZC5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VEZWNvZGVyQ0cuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291
cmNlQ0dXaW4uY3BwCkBAIC0xNzYsNyArMTc2LDkgQEAgZWxzZSAoKQogCiAgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmgKICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5oCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyRGF0YUNHLmgKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQuaAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZC5oCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZC5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyVXRpbGl0aWVzQ0cuaAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVu
dEltYWdlLmgKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcuY21ha2UgYi9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUZUVy5jbWFrZQppbmRleCA5YWI0Njg3MzllZjExZmY2MDliOTYyOTI4OGJiMDFi
MTZkYTcwMmFhLi5mNGI5YjdmODg2NmIxMjQxYTg1NTc5YjJlNjFmN2JhZTU0M2Q4NzVhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUZUVy5jbWFrZQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybUZUVy5jbWFrZQpAQCAtODQsOCArODQsNyBAQCBsaXN0KEFQUEVORCBXZWJD
b3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0SW1w
bERpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRX
aW4uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ljb25XaW4uY3BwCi0gICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcAotICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ltYWdlRGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlV2lu
LmNwcApAQCAtMjAxLDcgKzIwMCw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFN
RVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GdWxsU2NyZWVuQ29udHJv
bGxlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9sbGVyQ2xp
ZW50LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0SW1wbERpcmVj
dDJELmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3QyRC5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0xvY2FsV2luZG93c0NvbnRleHQuaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93LmgKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1NYWMuY21ha2UKaW5kZXggYWVjMzIwNjdkM2U2ZjJmNDlkMTkzZTBiMWE2NmJiMDk1
OTExNjBjOC4uMTIyMTVhYjFkMTBmYmRkOGFlY2EyNjdmNzA4NDYzNzM1YmY1ZmVkMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1NYWMuY21ha2UKQEAgLTI5MSw4ICsyOTEsMTAgQEAgbGlzdChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xD
Ry5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNwcAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJEYXRhQ0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JhY2tlbmQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0
aWVzQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR01hYy5tbQogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ludFBvaW50Q0cuY3BwCkBAIC01MjcsNyArNTI5LDkgQEAgbGlzdChBUFBF
TkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9T
dXJmYWNlUG9vbC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cu
aAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9V
VElSZWdpc3RyeS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFr
ZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCmluZGV4IDRmMzA3MTU5YjdlZDgw
NmViODE5NTJiYmE0NWY1YzA3YThkYzkzZWIuLjhhZjcwMWM3NzdmZTE1MmUyMzE2Y2E1MDAwNDNh
ZDk3MWFjYmYxYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtl
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCkBAIC0xMTksNyArMTE5LDYg
QEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0RJQlBpeGVsRGF0YS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0Z1bGxTY3JlZW5Db250cm9sbGVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRnVs
bFNjcmVlbkNvbnRyb2xsZXJDbGllbnQuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFn
ZUJ1ZmZlckRhdGFEaXJlY3QyRC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0xvY2FsV2lu
ZG93c0NvbnRleHQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZh
dGVGdWxsc2NyZWVuV2luZG93LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vU2hhcmVkR0RJ
T2JqZWN0LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggMTE2YjM4OGQyZDVmZDVjZDJmZDlhNGU2MjUwYzM4
NmI0NWM3MTI2NS4uM2EzNWQ2YzEzMTRlNTAwNmVlNTc5OTZmNGI4MzVmOTgyMGJlMjA2YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQKQEAgLTE4NjQsNiArMTg2NCw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL0hFVkNV
dGlsaXRpZXMuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JY29uLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKK3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
RGVjb2Rlci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWUuY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKQEAgLTE4ODMsNiArMTg4NCw3IEBAIHBsYXRmb3JtL2dy
YXBoaWNzL1BhdHRlcm4uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRpbWVSYW5nZXMu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9SZW1v
dGVWaWRlb1NhbXBsZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9Sb3VuZGVkUmVjdC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1No
YWRvd0JsdXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYkNvcmUv
U291cmNlc0NvY29hLnR4dAppbmRleCA0ZGU3NWRmOGRmMGI4ZjkwZTViMjU4MTU3ZWFkYTRhNjlk
M2I1OTE2Li43NjYxZTJiOWFkMmIzOTE4YTUzYjE2N2U0N2JjMTQ1M2FlNmZjOTFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXNDb2NvYS50eHQKQEAgLTI5MSw4ICsyOTEsOSBAQCBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9HcmFkaWVudENHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xD
Ry5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyQ0cuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5j
cHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAorcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCitwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VEZWNvZGVyQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHTWFj
Lm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggYWYwNDQxMjQxOGU2ZGJiMGYwYjNiMTdhNmQ5YThjYTZiYTgxMTZiNC4uOTI3OGNh
ODI1ZjQ0MzEzMGY2NWU0MDlkOWE4ZGNjZjBmNDkzMWRjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjQ1LDggKzY0NSw2IEBA
CiAJCTIwRDYyOTI3MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIwRDYyOTI1
MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCAqLzsgfTsKIAkJ
MjI1QTE2QjUwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50UmVnaW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMjVBMTZCMzBENUMxMUU5MDAwOTAy
OTUgLyogV2ViRXZlbnRSZWdpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkyMjhDMjg0NTEwRDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBh
YmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMjhD
Mjg0NDEwRDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMjJCRDlGN0YxMzUzNjI1QzAwOUJE
MTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMjJCRDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0
YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTIy
QkQ5RjgxMTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjJCRDlGODAxMzUzNjRGRTAwOUJE
MTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMjREOTEyOTIxM0NBOTUxRTAwRDIxOTE1IC8qIEpTU1ZHQWx0
R2x5cGhEZWZFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyNEQ5MTI5MDEzQ0E5NTFFMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaERlZkVsZW1l
bnQuaCAqLzsgfTsKIAkJMjREOTEyOTYxM0NBOTU2MTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhJ
dGVtRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMjREOTEyOTQxM0NBOTU2MTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhJdGVtRWxlbWVudC5o
ICovOyB9OwogCQkyNEQ5MTI5QTEzQ0E5NzE0MDBEMjE5MTUgLyogSlNTVkdHbHlwaFJlZkVsZW1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI0RDkx
Mjk5MTNDQTk3MTQwMEQyMTkxNSAvKiBKU1NWR0dseXBoUmVmRWxlbWVudC5oICovOyB9OwpAQCAt
ODMzLDE3ICs4MzEsMTcgQEAKIAkJMkRBQ0I5RTkyMzc1NUQwMDAwQjRDMTg1IC8qIEdyYXBoaWNz
Q29udGV4dEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMDAxMjNGMUZBRDg3RDYwMDUzMUQ3NiAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkRBRjM0M0Qx
RUE3RTBGMTAwMzgyQ0QzIC8qIENvbnN0YW50UHJvcGVydHlNYXAuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEQUYzNDNCMUVBN0UwRjEwMDM4MkNEMyAv
KiBDb25zdGFudFByb3BlcnR5TWFwLmggKi87IH07CiAJCTJERDVBNzI3MUVCRUU0N0QwMDlCQTU5
NyAvKiBDb21wb3NpdGlvblVuZGVybGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkRENUE3MjYxRUJFRTQ3RDAwOUJBNTk3IC8qIENvbXBvc2l0aW9u
VW5kZXJsaW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKLQkJMkRERTFDRTMxRjU3NEFFNTAwRDFBMzY1IC8qIEpTVlJGaWVsZE9mVmlldy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRERTFDRTAxRjU3NEFE
MTAwRDFBMzY1IC8qIEpTVlJGaWVsZE9mVmlldy5oICovOyB9OwotCQkyRERFMUNFNDFGNTc0QUU5
MDBEMUEzNjUgLyogSlNWUkRpc3BsYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJEREUxQ0RFMUY1NzRBQUIwMEQxQTM2NSAvKiBKU1ZSRGlzcGxheS5o
ICovOyB9OwotCQkyRERFMUNGODFGNTc0QzM5MDBEMUEzNjUgLyogSlNWUkRpc3BsYXlDYXBhYmls
aXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJE
REUxQ0U2MUY1NzRCRkYwMEQxQTM2NSAvKiBKU1ZSRGlzcGxheUNhcGFiaWxpdGllcy5oICovOyB9
OwotCQkyRERFMUNGQTFGNTc0QzNFMDBEMUEzNjUgLyogSlNWUkRpc3BsYXlFdmVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRERTFDRTgxRjU3NEJG
RjAwRDFBMzY1IC8qIEpTVlJEaXNwbGF5RXZlbnQuaCAqLzsgfTsKLQkJMkRERTFDRkMxRjU3NENF
RTAwRDFBMzY1IC8qIEpTVlJEaXNwbGF5RXZlbnRSZWFzb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEREUxQ0VBMUY1NzRCRkYwMEQxQTM2NSAvKiBK
U1ZSRGlzcGxheUV2ZW50UmVhc29uLmggKi87IH07Ci0JCTJEREUxQ0ZFMUY1NzRDRjMwMEQxQTM2
NSAvKiBKU1ZSRXllLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyRERFMUNFQzFGNTc0QkZGMDBEMUEzNjUgLyogSlNWUkV5ZS5oICovOyB9OwotCQkyRERF
MUQwMDFGNTc0Q0Y3MDBEMUEzNjUgLyogSlNWUkV5ZVBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEREUxQ0VFMUY1NzRCRkYwMEQxQTM2
NSAvKiBKU1ZSRXllUGFyYW1ldGVycy5oICovOyB9OwotCQkyRERFMUQwMjFGNTc0RDAwMDBEMUEz
NjUgLyogSlNWUkZyYW1lRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkRERTFDRjAxRjU3NEJGRjAwRDFBMzY1IC8qIEpTVlJGcmFtZURhdGEuaCAq
LzsgfTsKLQkJMkRERTFEMDQxRjU3NEQwNTAwRDFBMzY1IC8qIEpTVlJMYXllckluaXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEREUxQ0YyMUY1NzRC
RkYwMEQxQTM2NSAvKiBKU1ZSTGF5ZXJJbml0LmggKi87IH07Ci0JCTJEREUxRDA2MUY1NzREMEEw
MEQxQTM2NSAvKiBKU1ZSUG9zZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkRERTFDRjQxRjU3NEJGRjAwRDFBMzY1IC8qIEpTVlJQb3NlLmggKi87IH07
Ci0JCTJEREUxRDA4MUY1NzREMEUwMEQxQTM2NSAvKiBKU1ZSU3RhZ2VQYXJhbWV0ZXJzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRERFMUNGNjFGNTc0
QkZGMDBEMUEzNjUgLyogSlNWUlN0YWdlUGFyYW1ldGVycy5oICovOyB9OworCQkyRERFMUNFMzFG
NTc0QUU1MDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyB9OworCQkyRERFMUNFNDFGNTc0QUU5MDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyB9OworCQkyRERFMUNGODFGNTc0QzM5MDBEMUEzNjUg
LyogKG51bGwpIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyB9OworCQkyRERF
MUNGQTFGNTc0QzNFMDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyB9OworCQkyRERFMUNGQzFGNTc0Q0VFMDBEMUEzNjUgLyogKG51bGwpIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyB9OworCQkyRERFMUNGRTFGNTc0Q0YzMDBE
MUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyB9Owor
CQkyRERFMUQwMDFGNTc0Q0Y3MDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyB9OworCQkyRERFMUQwMjFGNTc0RDAwMDBEMUEzNjUgLyogKG51bGwp
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyB9OworCQkyRERFMUQwNDFGNTc0
RDA1MDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyB9OworCQkyRERFMUQwNjFGNTc0RDBBMDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyB9OworCQkyRERFMUQwODFGNTc0RDBFMDBEMUEzNjUgLyog
KG51bGwpIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyB9OwogCQkyREU3MDAy
MzE5MkZFODJBMDBCMDk3NUMgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yTWFjLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREU3MDAyMjE5MkZFODJBMDBC
MDk3NUMgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yTWFjLmggKi87IH07CiAJCTJERjUxMkNFMUQ4
NzNFNDcwMDFENjc4MCAvKiBSZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJERjUxMkNDMUQ4NzNFNDcwMDFE
Njc4MCAvKiBSZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuaCAqLzsgfTsKIAkJMkRGQTQ4OEYx
REI1NDFEMDAwMzYyQjk5IC8qIEJ1ZmZlclNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRGQTQ4OEUxREI1NDFDMjAwMzYyQjk5IC8qIEJ1ZmZl
clNvdXJjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC0yMTQ1LDExICsyMTQzLDEzIEBACiAJCTcyMTQ0MzM0MjIzRUM5MTYwMEYxMkZGNyAvKiBT
VkdQcm9wZXJ0eU93bmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1NUVFNTM2MDIyM0IyQTIxMDBGQkE5NDQgLyogU1ZHUHJvcGVydHlPd25lci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMjgzRjBF
MjMwQjI2OEMwMEY1RDgyOCAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJDMThBM0YyMzBCMDRCNzAwNjg0N0M3
IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIyQTgxNUQyMzhGREFGMDAwQzAwNTgzIC8qIEFuaW1hdGlv
bkZyYW1lUmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzIyQTgxNUMyMzhGRDUwNTAwQzAwNTgzIC8qIEFuaW1hdGlvbkZyYW1lUmF0ZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMzk0MDY1MjNF
ODgyODYwMEUzQjU0NSAvKiBSZW5kZXJpbmdCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjM5NDA2NDIzRTg3RDU0MDBFM0I1NDUgLyogUmVu
ZGVyaW5nQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTcyNEVEMzMyMUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRDMzMDFB
M0E4QjIzMDBGNUYxM0MgLyogSlNFWFRCbGVuZE1pbk1heC5oICovOyB9OwogCQk3MjRFRTU1MDFE
QzgwRDdGMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0RUU1NEUxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2
aXR5U3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3MjRFRTU1MTFEQzgwRDg0MDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2Vy
dmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRF
RTU0RjFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI5OUJDNjcy
M0Q2QTUzMjAwQ0M2ODgzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyOTlCQzY0MjNENjg2QTYwMENDNjg4
MyAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI5OUJDNjgyM0Q2QTUzRTAwQ0M2ODgzIC8qIFJlbmRl
cmluZ01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDcyOTlCQzY2MjNENjg2QzYwMENDNjg4MyAvKiBSZW5kZXJpbmdNb2RlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJCQUMzQUUyM0UxRjBCMDAw
OEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQUMzQTUyM0UxNzMyODAwOEQ3NDFDIC8qIEltYWdlQnVm
ZmVyQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTc1NTNDRkU4MTA4RjQ3M0YwMEVBMjgxRSAvKiBUaW1lbGluZVJlY29yZEZhY3Rvcnku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NTNDRkU2
MTA4RjQ3M0YwMEVBMjgxRSAvKiBUaW1lbGluZVJlY29yZEZhY3RvcnkuaCAqLzsgfTsKIAkJNzU3
OTNFODQwRDBDRTBCMzAwN0ZDMEFDIC8qIE1lc3NhZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU3OTNFODEwRDBDRTBCMzAwN0ZDMEFDIC8q
IE1lc3NhZ2VFdmVudC5oICovOyB9OwogCQk3NTc5M0VDOTBEMENFNzJEMDA3RkMwQUMgLyogSlNN
ZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDc1NzkzRUM3MEQwQ0U3MkQwMDdGQzBBQyAvKiBKU01lc3NhZ2VFdmVudC5oICovOyB9OwpA
QCAtMjU4MCw3ICsyNTgwLDYgQEAKIAkJOEFGNEU1NUMxMURDNUE2MzAwMEVEM0RFIC8qIFBlcmZv
cm1hbmNlVGltaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4QUY0RTU1OTExREM1QTYzMDAwRUQzREUgLyogUGVyZm9ybWFuY2VUaW1pbmcuaCAqLzsg
fTsKIAkJOEJEMzdBNjgyMDFCQjM5QzAwMTE3MzRBIC8qIFJlYWRhYmxlU3RyZWFtQ2h1bmsuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhCRDM3QTY3MjAx
QkIzOUMwMDExNzM0QSAvKiBSZWFkYWJsZVN0cmVhbUNodW5rLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOEU0Qzk2REQxQUQ0NDgzNTAwMzY1QTUw
IC8qIEpTRmV0Y2hSZXNwb25zZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOEU0Qzk2RDkxQUQ0NDgzNTAwMzY1QTUwIC8qIEpTRmV0Y2hSZXNwb25zZS5o
ICovOyB9OwotCQk4RTYyMEU4MTIwRUU2MDI0MDA3QkM1RUYgLyogVlJQbGF0Zm9ybURpc3BsYXlD
bGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhF
NjIwRTgwMjBFRTVGRkMwMDdCQzVFRiAvKiBWUlBsYXRmb3JtRGlzcGxheUNsaWVudC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCThFQzZDOTYzMjAx
QTI1MTYwMEZCRkE1MyAvKiBHYXBMZW5ndGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDhFQzZDOTYxMjAxQTI1MDEwMEZCRkE1MyAvKiBHYXBMZW5ndGgu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4RjY3
NTYxQjEyODhCMTdCMDA0N0FDQTMgLyogRXZlbnRRdWV1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEY2NzU2MTkxMjg4QjE3QjAwNDdBQ0EzIC8qIEV2
ZW50UXVldWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk5MDAxNzc0MTEyRTAzNDc4MDA2NDg0NjIgLyogT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTAwMTc3M0Ux
MkUwMzQ3ODAwNjQ4NDYyIC8qIE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaCAqLzsgfTsKQEAgLTY1
NTksOSArNjU1OCw2IEBACiAJCTIyNUExNkIzMEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJl
Z2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJFdmVudFJlZ2lvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyMjVBMTZCNDBENUMxMUU5MDAwOTAyOTUg
LyogV2ViRXZlbnRSZWdpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBXZWJFdmVudFJlZ2lvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjI4
QzI4NDQxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRXcmFwcGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMjI5MkIyN0IxMzU2NjY5NDAwQ0YxMUVGIC8qIEltYWdlQnVmZmVyRGF0YUNH
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0
YUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjJCRDlGN0QxMzUzNjI1QzAw
OUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJbWFnZUJ1ZmZlckRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjJC
RDlGODAxMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0YUNHLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTI0NDJCQkY4MTE5NEM5RDMwMEQ0OTQ2OSAvKiBIYXNoQ2hhbmdlRXZl
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFzaENoYW5nZUV2ZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0RDkxMjhGMTNDQTk1MUUwMEQyMTkxNSAv
KiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTI0RDkxMjkwMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVm
RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NWR0FsdEdseXBo
RGVmRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTU4MCw2ICs5NTc2
LDEwIEBACiAJCTcyMTQ0MzQ1MjI0MEM4QkEwMEYxMkZGNyAvKiBTVkdBbmltYXRlZFZhbHVlUHJv
cGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ2MjI0MENBRDIwMEYxMkZGNyAvKiBTVkdW
YWx1ZVByb3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1ZhbHVlUHJvcGVydHkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIyQTgxNUMyMzhGRDUwNTAwQzAwNTgzIC8qIEFuaW1h
dGlvbkZyYW1lUmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBbmltYXRpb25GcmFtZVJhdGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIzOTQwNUUyM0U1RjUzRjAwRTNCNTQ1IC8qIERp
c3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MjM5NDA2MDIzRTVGNTY3MDBFM0I1NDUgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMzk0MDYyMjNFODdENTMwMEUzQjU0
NSAvKiBSZW5kZXJpbmdCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFJlbmRlcmluZ0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MjM5NDA2NDIzRTg3RDU0MDBFM0I1NDUgLyogUmVuZGVyaW5nQmFja2VuZC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdCYWNrZW5kLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzI5MUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1p
bk1heC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFWFRCbGVuZE1p
bk1heC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzJBMUEzQTdFNTQw
MEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBFWFRCbGVuZE1pbk1heC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRF
RDMyQjFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXguaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTk2MDIsNiArOTYwMiwxNiBAQAogCQk3MjdBRkVEMzFBMkVBNkEwMDAwNDQyRTggLyogRVhU
c1JHQi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhUc1JHQi5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcyOTlCQzY0MjNENjg2QTYwMENDNjg4MyAvKiBBbHBoYVByZW11
bHRpcGxpY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFscGhhUHJlbXVsdGlwbGljYXRpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI5OUJDNjYyM0Q2ODZDNjAwQ0M2ODgzIC8q
IFJlbmRlcmluZ01vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nTW9kZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkJBQzNBNDIzRTE3MzI3MDA4RDc0MUMgLyogSW1hZ2VC
dWZmZXJCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElt
YWdlQnVmZmVyQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkFD
M0E1MjNFMTczMjgwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyQkFDM0E2MjNFMTczMjgwMDhENzQxQyAvKiBQbGF0Zm9ybUltYWdl
QnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtSW1hZ2VC
dWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQUMzQTcyM0UxNzMyODAw
OEQ3NDFDIC8qIENvbnRleHR1YWxJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDb250ZXh0dWFsSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNzJCQUMzQTgyM0UxRTU0MzAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJC
QUMzQTkyM0UxRTU0MzAwOEQ3NDFDIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJBQzNBQTIzRTFF
NTQ0MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQUMzQUIyM0UxRTU0NDAwOEQ3NDFDIC8qIEltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzJCQUMzQUMyM0UxRTU0NTAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCYWNr
ZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQUMzQUQyM0UxRTU0NTAw
OEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbWFnZVBhaW50aW5nT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MkU0MTc2MTFBMkU4RDJGMDA0QzU2MkEgLyogSlNFWFRzUkdCLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRVhUc1JHQi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRTQxNzYyMUEyRThEMkYwMDRDNTYyQSAvKiBKU0VY
VHNSR0IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNFWFRzUkdCLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDU0NCw4ICsxMDU1NCw2IEBACiAJCThFMzND
RDkzMjAxQTI5QzEwMEUzOTA5MyAvKiBHYXBMZW5ndGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gR2FwTGVuZ3RoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOEU0Qzk2RDgxQUQ0NDgzNTAwMzY1QTUwIC8qIEpTRmV0Y2hSZXNwb25zZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0ZldGNoUmVzcG9uc2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4RTRDOTZEOTFBRDQ0ODM1MDAzNjVBNTAgLyog
SlNGZXRjaFJlc3BvbnNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRmV0
Y2hSZXNwb25zZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4RTYyMEU3RTIwRUU1
RkUyMDA3QkM1RUYgLyogVlJQbGF0Zm9ybURpc3BsYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVlJQbGF0Zm9ybURpc3BsYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk4RTYyMEU4MDIwRUU1RkZDMDA3QkM1RUYgLyogVlJQbGF0Zm9ybURpc3Bs
YXlDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVlJQbGF0Zm9ybURp
c3BsYXlDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEVDNkM5NjEyMDFB
MjUwMTAwRkJGQTUzIC8qIEdhcExlbmd0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBHYXBMZW5ndGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEY2NzU2MTkx
Mjg4QjE3QjAwNDdBQ0EzIC8qIEV2ZW50UXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRXZlbnRRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4Rjkz
NEQ4MzExODlGMUVFMDA1MDhENUQgLyogSlNFeGVjU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNFeGVjU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTEyNjc1LDcgKzEyNjgzLDYgQEAKIAkJQjJBMDE1OTQwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdy
YXBoaWNzVHlwZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdy
YXBoaWNzVHlwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkEwMTU5NTBB
RjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gR3JhcGhpY3NUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCMkExMEI5MTBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUIyQTEwQjkzMEIzODE4RDcwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlckNHLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckNHLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMUYyQTEwQ0VGMEFCRjAwNDQyRjZBIC8q
IFNWR0ZvbnRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTVkdGb250RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTFG
MkEyMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU1ZHRm9udEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQjJBMUYyQTMwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1ZHRm9udEVsZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTY2ODksNiArMTY2OTYsNyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJ
CQkJMEZFNUZCQ0ExQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmNwcCAqLywKIAkJCQkw
RkU1RkJDQjFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3QuaCAqLywKKwkJCQk3MjM5NDA2
MDIzRTVGNTY3MDBFM0I1NDUgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oICovLAogCQkJ
CTBGRTVGQkNDMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmNwcCAqLywKIAkJ
CQkwRkU1RkJDRDFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJdGVtcy5oICovLAogCQkJ
CTBGRTVGQkNFMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmNwcCAqLywK
QEAgLTI0ODQwLDkgKzI0ODQ4LDEyIEBACiAJCQkJOTM0OTA3RTMxMjVCQkJDODAwN0YyM0EwIC8q
IEdyYXBoaWNzQ29udGV4dENHLmggKi8sCiAJCQkJNkUyMUM2QzExMTI2MzM5OTAwQTdCRTAyIC8q
IEdyYXBoaWNzQ29udGV4dEdMQ0cuY3BwICovLAogCQkJCUE4MEQ2NzA3MEU5RTlERUIwMEU0MjBG
MCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oICovLAotCQkJCUIyQTEwQjkz
MEIzODE4RDcwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlckNHLmNwcCAqLywKLQkJCQkyMjkyQjI3QjEz
NTY2Njk0MDBDRjExRUYgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwICovLAotCQkJCTIyQkQ5Rjgw
MTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oICovLAorCQkJCTcyQkFDM0FD
MjNFMUU1NDUwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAgKi8sCisJCQkJNzJC
QUMzQUQyM0UxRTU0NTAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmggKi8sCisJCQkJ
NzJCQUMzQTgyM0UxRTU0MzAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNw
cCAqLywKKwkJCQk3MkJBQzNBQTIzRTFFNTQ0MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQuaCAqLywKKwkJCQk3MkJBQzNBOTIzRTFFNTQzMDA4RDc0MUMgLyogSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkJBQzNBQjIzRTFFNTQ0MDA4RDc0MUMg
LyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggKi8sCiAJCQkJQ0Q1ODk0OTMyMTg3NDA2
NDAwNEY0MjRBIC8qIEltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwICovLAogCQkJCUNEM0UyMURC
MjE4MzNGNTEwMEU2NkY1NSAvKiBJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmggKi8sCiAJCQkJNTU1
Qjg3RUExQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLywKQEAgLTI0OTM0
LDEyICsyNDk0NSwxNCBAQAogCQkJCTBGRTZDNzZDMUZCRkI3QTYwMDI1QzA1MyAvKiBDb2xvclV0
aWxpdGllcy5oICovLAogCQkJCUMyRjRFNzg4MUU0NUFFREYwMDZENzEwNSAvKiBDb21wbGV4VGV4
dENvbnRyb2xsZXIuY3BwICovLAogCQkJCUMyRjRFNzg5MUU0NUFFREYwMDZENzEwNSAvKiBDb21w
bGV4VGV4dENvbnRyb2xsZXIuaCAqLywKKwkJCQk3MkJBQzNBNzIzRTE3MzI4MDA4RDc0MUMgLyog
Q29udGV4dHVhbEltYWdlQnVmZmVyLmggKi8sCiAJCQkJMkQyRkMwNTQxNDYwQ0Q2RjAwMjYzNjMz
IC8qIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmNwcCAqLywKIAkJCQkyRDJGQzA1NTE0NjBDRDZG
MDAyNjM2MzMgLyogQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuaCAqLywKIAkJCQk0QjdBRTQ5NTIx
NzdCNjNFMDBDNTk5NTkgLyogQ3VzdG9tUGFpbnRJbWFnZS5jcHAgKi8sCiAJCQkJNEI3QUU0OTIy
MTc3QjU2RjAwQzU5OTU5IC8qIEN1c3RvbVBhaW50SW1hZ2UuaCAqLywKIAkJCQlBOENCNDEwMjBF
ODVCOEE1MDAzMkM0RjAgLyogRGFzaEFycmF5LmggKi8sCiAJCQkJNTU1MTMwMDAxRTdDQ0NDQTAw
QTY5RTM4IC8qIERlY29kaW5nT3B0aW9ucy5oICovLAorCQkJCTcyMzk0MDVFMjNFNUY1M0YwMEUz
QjU0NSAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggKi8sCiAJCQkJNDlGQzdBNEYxNDQ0QUY1
RjAwQTVEODY0IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvci5jcHAgKi8sCiAJCQkJNDlBRjJENjgx
NDQzNUQwNTAwMTZBNzg0IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvci5oICovLAogCQkJCTJEMjlF
Q0MxMTkyRUNDODMwMDk4NEI3OCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQuY3BwICov
LApAQCAtMjUwMzEsNyArMjUwNDQsOCBAQAogCQkJCTU1QTMzNkY4MUQ4MjFFM0MwMDIyQzRDNyAv
KiBJbWFnZUJhY2tpbmdTdG9yZS5oICovLAogCQkJCTQzRDI1OTc2MTNDODE2RjQwMDYwODU1OSAv
KiBJbWFnZUJ1ZmZlci5jcHAgKi8sCiAJCQkJQjJBMTBCOTEwQjM4MThCRDAwMDk5QUE0IC8qIElt
YWdlQnVmZmVyLmggKi8sCi0JCQkJMjJCRDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVm
ZmVyRGF0YS5oICovLAorCQkJCTcyQkFDM0E0MjNFMTczMjcwMDhENzQxQyAvKiBJbWFnZUJ1ZmZl
ckJhY2tlbmQuY3BwICovLAorCQkJCTcyQkFDM0E1MjNFMTczMjgwMDhENzQxQyAvKiBJbWFnZUJ1
ZmZlckJhY2tlbmQuaCAqLywKIAkJCQlDRDE5RkVBNzFGNTczOTcyMDAwQzQyRkIgLyogSW1hZ2VE
ZWNvZGVyLmNwcCAqLywKIAkJCQlDRDE5RkVBNjFGNTczOTcyMDAwQzQyRkIgLyogSW1hZ2VEZWNv
ZGVyLmggKi8sCiAJCQkJNTU3NkE1NjIxRDg4QTcwODAwQ0NDMDRDIC8qIEltYWdlRnJhbWUuY3Bw
ICovLApAQCAtMjUwODgsNiArMjUxMDIsNyBAQAogCQkJCTJENTAwMkZBMUI1NkQ3OTkwMDIwQUFG
NyAvKiBQYXRoVXRpbGl0aWVzLmggKi8sCiAJCQkJQThGQTZFNUMwRTRDRkRFRDAwRDVDRjQ5IC8q
IFBhdHRlcm4uY3BwICovLAogCQkJCUE4RkE2RTVCMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJu
LmggKi8sCisJCQkJNzJCQUMzQTYyM0UxNzMyODAwOEQ3NDFDIC8qIFBsYXRmb3JtSW1hZ2VCdWZm
ZXIuaCAqLywKIAkJCQkwNTYyRjk2MDE1NzNGODhGMDAzMUNBMTYgLyogUGxhdGZvcm1MYXllci5o
ICovLAogCQkJCUNFRUZDRDdCMTlEQjMzREMwMDM4NzZENyAvKiBQbGF0Zm9ybU1lZGlhUmVzb3Vy
Y2VMb2FkZXIuaCAqLywKIAkJCQkwNzI4NDdFMjE2RUJDNUIwMDA0M0NGQTQgLyogUGxhdGZvcm1U
ZXh0VHJhY2suaCAqLywKQEAgLTI1MDk3LDYgKzI1MTEyLDggQEAKIAkJCQlCQ0FCNDE4MDEzRTM1
NkU4MDBEOEFBRjMgLyogUmVnaW9uLmggKi8sCiAJCQkJMDczQTE1NTEyMTc3QTM5ODAwRUEwOEYy
IC8qIFJlbW90ZVZpZGVvU2FtcGxlLmNwcCAqLywKIAkJCQkwNzNBMTU1MzIxNzdBMzlBMDBFQTA4
RjIgLyogUmVtb3RlVmlkZW9TYW1wbGUuaCAqLywKKwkJCQk3MjM5NDA2MjIzRTg3RDUzMDBFM0I1
NDUgLyogUmVuZGVyaW5nQmFja2VuZC5jcHAgKi8sCisJCQkJNzIzOTQwNjQyM0U4N0Q1NDAwRTNC
NTQ1IC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAqLywKIAkJCQk3Mjk5QkM2NjIzRDY4NkM2MDBDQzY4
ODMgLyogUmVuZGVyaW5nTW9kZS5oICovLAogCQkJCUE3M0Y5NUZDMTJDOTdCRkUwMDMxQUFGOSAv
KiBSb3VuZGVkUmVjdC5jcHAgKi8sCiAJCQkJQTczRjk1RkQxMkM5N0JGRTAwMzFBQUY5IC8qIFJv
dW5kZWRSZWN0LmggKi8sCkBAIC0yNTgyMyw3ICsyNTg0MCw2IEBACiAJCQkJNjU2Qjg0RDcwQUVB
MUNFOTAwQTA5NUI0IC8qIG5ldHdvcmsgKi8sCiAJCQkJMUEyRTZFNTYwQ0M1NTFFMDAwNEEyMDYy
IC8qIHNxbCAqLywKIAkJCQlCMkMzRDlFQzBEMDA2QzFEMDBFRjZGMjYgLyogdGV4dCAqLywKLQkJ
CQlFMTg4MjM1RjIwMzFGNTBGMDBCNDJERjMgLyogdnIgKi8sCiAJCQkJREZEQjkxMkNGOEU4OEE2
REExQUQyNjRGIC8qIEFib3J0YWJsZVRhc2tRdWV1ZS5oICovLAogCQkJCTQ5QUUyRDk0MTM0RUU1
RjkwMDcyOTIwQSAvKiBDYWxjdWxhdGlvblZhbHVlLmNwcCAqLywKIAkJCQk0OUFFMkQ5NTEzNEVF
NUY5MDA3MjkyMEEgLyogQ2FsY3VsYXRpb25WYWx1ZS5oICovLApAQCAtMjg5MDQsNiArMjg5MjAs
MTcgQEAKIAkJCWZpbGVzID0gKAogCQkJCTcyMTQ0MzMyMjIzRUM4NUYwMEYxMkZGNyAvKiAobnVs
bCkgaW4gSGVhZGVycyAqLywKIAkJCQk3MjE0NDMzMTIyM0VDODU0MDBGMTJGRjcgLyogKG51bGwp
IGluIEhlYWRlcnMgKi8sCisJCQkJMkRERTFDRTQxRjU3NEFFOTAwRDFBMzY1IC8qIChudWxsKSBp
biBIZWFkZXJzICovLAorCQkJCTJEREUxQ0Y4MUY1NzRDMzkwMEQxQTM2NSAvKiAobnVsbCkgaW4g
SGVhZGVycyAqLywKKwkJCQkyRERFMUNGQTFGNTc0QzNFMDBEMUEzNjUgLyogKG51bGwpIGluIEhl
YWRlcnMgKi8sCisJCQkJMkRERTFDRkMxRjU3NENFRTAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFk
ZXJzICovLAorCQkJCTJEREUxQ0ZFMUY1NzRDRjMwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVy
cyAqLywKKwkJCQkyRERFMUQwMDFGNTc0Q0Y3MDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMg
Ki8sCisJCQkJMkRERTFDRTMxRjU3NEFFNTAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICov
LAorCQkJCTJEREUxRDAyMUY1NzREMDAwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLywK
KwkJCQkyRERFMUQwNDFGNTc0RDA1MDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8sCisJ
CQkJMkRERTFEMDYxRjU3NEQwQTAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovLAorCQkJ
CTJEREUxRDA4MUY1NzREMEUwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLywKIAkJCQk3
Q0QwRTJCODFGODBBNDgyMDAxNkE0Q0UgLyogQWJvcnRDb250cm9sbGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk3Q0QwRTJCRjFGODBBNTZFMDAxNkE0Q0UgLyogQWJvcnRTaWduYWwuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTQ2Qjk1MTk1MjA3RDYzMzQwMEE3RDJERCAvKiBBYnN0cmFjdERPTVdpbmRv
dy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDI1OSw4ICszMDI4Niw3IEBACiAJCQkJN0M3OTAzQjMx
Rjg2Rjk1QzAwNDYzQTcwIC8qIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzE4RUFENEQxRkE5MTM4MDAwOENFRjg2IC8qIEltYWdlQml0bWFwUmVuZGVy
aW5nQ29udGV4dFNldHRpbmdzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkExMEI5MjBCMzgxOEJE
MDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTIyQkQ5RjdGMTM1
MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCBpbiBIZWFkZXJzICovLAotCQkJCTIy
QkQ5RjgxMTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNzJCQUMzQUUyM0UxRjBCMDAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQ0QzRTIxREQyMTgzNDQ0QTAwRTY2RjU1IC8qIEltYWdlQnVm
ZmVyVXRpbGl0aWVzQ0cuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEMjUzOTYzMThDRTdGNjIwMDI3
MDIyMiAvKiBJbWFnZUNvbnRyb2xzQnV0dG9uRWxlbWVudE1hYy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTEwMTkyRDYxOEI2QjlCNzAwN0ZDN0ExIC8qIEltYWdlQ29udHJvbHNSb290RWxlbWVudC5o
IGluIEhlYWRlcnMgKi8sCkBAIC0zMTE2NSwxNyArMzExOTEsNiBAQAogCQkJCUJFOEVGMDREMTcx
QzkwMTQwMDlCNDhDMyAvKiBKU1ZpZGVvVHJhY2tMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk0
NkU3OTE0OTFGOTdFMDFBMDAxOTk3MzkgLyogSlNWaXNpYmlsaXR5U3RhdGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTc3NzlCRDk2MUYzMjI0NkEwMEMyMTQxNyAvKiBKU1Zpc3VhbFZpZXdwb3J0Lmgg
aW4gSGVhZGVycyAqLywKLQkJCQkyRERFMUNFNDFGNTc0QUU5MDBEMUEzNjUgLyogSlNWUkRpc3Bs
YXkuaCBpbiBIZWFkZXJzICovLAotCQkJCTJEREUxQ0Y4MUY1NzRDMzkwMEQxQTM2NSAvKiBKU1ZS
RGlzcGxheUNhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkRERTFDRkExRjU3NEMz
RTAwRDFBMzY1IC8qIEpTVlJEaXNwbGF5RXZlbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTJEREUx
Q0ZDMUY1NzRDRUUwMEQxQTM2NSAvKiBKU1ZSRGlzcGxheUV2ZW50UmVhc29uLmggaW4gSGVhZGVy
cyAqLywKLQkJCQkyRERFMUNGRTFGNTc0Q0YzMDBEMUEzNjUgLyogSlNWUkV5ZS5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJMkRERTFEMDAxRjU3NENGNzAwRDFBMzY1IC8qIEpTVlJFeWVQYXJhbWV0ZXJz
LmggaW4gSGVhZGVycyAqLywKLQkJCQkyRERFMUNFMzFGNTc0QUU1MDBEMUEzNjUgLyogSlNWUkZp
ZWxkT2ZWaWV3LmggaW4gSGVhZGVycyAqLywKLQkJCQkyRERFMUQwMjFGNTc0RDAwMDBEMUEzNjUg
LyogSlNWUkZyYW1lRGF0YS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkRERTFEMDQxRjU3NEQwNTAw
RDFBMzY1IC8qIEpTVlJMYXllckluaXQuaCBpbiBIZWFkZXJzICovLAotCQkJCTJEREUxRDA2MUY1
NzREMEEwMEQxQTM2NSAvKiBKU1ZSUG9zZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkRERTFEMDgx
RjU3NEQwRTAwRDFBMzY1IC8qIEpTVlJTdGFnZVBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJFMjA1MDgyMThBNDYwQzMwMDgwNjQ3RSAvKiBKU1ZUVEN1ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJN0FGOUIyMEQxOENGQjVGNDAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk3QUY5QjIwRjE4Q0ZCNUY0MDBDNjRCRUYgLyogSlNWVFRSZWdpb25MaXN0Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTMxOTMzLDYgKzMxOTQ4LDcgQEAKIAkJCQlCQ0VBNDg3NjA5N0Q5
MzAyMDA5NEM5RTQgLyogUmVuZGVySW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4RjJGMDBB
MTIxM0U2MTcwMERDRUM0OCAvKiBSZW5kZXJJbWFnZVJlc291cmNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwODY0MUQ0ODEyMTQyRjdEMDA4REU5RjYgLyogUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxl
SW1hZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMzk0MDY1MjNFODgyODYwMEUzQjU0NSAvKiBS
ZW5kZXJpbmdCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Mjk5QkM2ODIzRDZBNTNFMDBD
QzY4ODMgLyogUmVuZGVyaW5nTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTU2QzdDNEIyMjEy
Mzk5NzAwOUIwNkNBIC8qIFJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkNFQTQ4NzgwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlcklubGluZS5oIGluIEhlYWRl
cnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmNwcAppbmRleCBjNGM3ZTI4ODI3NzI2NmRkZWM3NTIwNDEyMTJiNWUyYmM1ZmFh
MzU4Li4yNWQ2OWY5NGE2N2ZiOTFiY2M0OGJjN2U4NTk2ZDc1OGY2ZjVlMjdlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAK
QEAgLTk0MywxMyArOTQzLDEzIEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBjb25z
dCBJbnRTaXplJiBsb2dpY2FsU2l6ZSA9IGJ1ZmZlci0+bG9naWNhbFNpemUoKTsKLSAgICAgICAg
YXV0byBpbWFnZURhdGEgPSBidWZmZXItPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVj
dCgwLCAwLCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSkpOworICAg
ICAgICBhdXRvIGltYWdlRGF0YSA9IGJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQsIHsgSW50UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUg
fSk7CiAgICAgICAgIGlmICghaW1hZ2VEYXRhKSB7CiAgICAgICAgICAgICBjb2RlID0gU2VyaWFs
aXphdGlvblJldHVybkNvZGU6OlZhbGlkYXRpb25FcnJvcjsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXIgPSBp
bWFnZURhdGEtPnBvc3NpYmx5U2hhcmVkQnVmZmVyKCk7CisgICAgICAgIFJlZlB0cjxBcnJheUJ1
ZmZlcj4gYXJyYXlCdWZmZXIgPSBpbWFnZURhdGEtPmRhdGEoKS0+cG9zc2libHlTaGFyZWRCdWZm
ZXIoKTsKICAgICAgICAgaWYgKCFhcnJheUJ1ZmZlcikgewogICAgICAgICAgICAgY29kZSA9IFNl
cmlhbGl6YXRpb25SZXR1cm5Db2RlOjpWYWxpZGF0aW9uRXJyb3I7CiAgICAgICAgICAgICByZXR1
cm47CkBAIC0yODY1LDE5ICsyODY1LDI1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byBpbWFnZURhdGEgPSBVaW50OENs
YW1wZWRBcnJheTo6dHJ5Q3JlYXRlKFdURk1vdmUoYXJyYXlCdWZmZXIpLCAwLCBhcnJheUJ1ZmZl
ci0+Ynl0ZUxlbmd0aCgpKTsKLSAgICAgICAgaWYgKCFpbWFnZURhdGEpIHsKKyAgICAgICAgYXV0
byBhcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGUoV1RGTW92ZShhcnJheUJ1ZmZl
ciksIDAsIGFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkpOworICAgICAgICBpZiAoIWFycmF5KSB7
CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAg
ICAgICB9CiAKKyAgICAgICAgYXV0byBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShJbnRT
aXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIGFycmF5LnJlbGVhc2VOb25OdWxsKCkp
OworICAgICAgICBpZiAoIWltYWdlRGF0YSkgeworICAgICAgICAgICAgZmFpbCgpOworICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgYXV0
byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKEZsb2F0U2l6ZShsb2dpY2FsV2lkdGgsIGxv
Z2ljYWxIZWlnaHQpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCByZXNvbHV0aW9uU2Nh
bGUpOwogICAgICAgICBpZiAoIWJ1ZmZlcikgewogICAgICAgICAgICAgZmFpbCgpOwogICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAgfQogCi0gICAgICAgIGJ1ZmZlci0+cHV0
Qnl0ZUFycmF5KCppbWFnZURhdGEsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQsIEludFNpemUobG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSwgSW50UmVjdCgwLCAwLCBs
b2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBJbnRQb2ludCgpKTsKKyAgICAgICAgYnVmZmVy
LT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgKmlt
YWdlRGF0YSwgeyBJbnRQb2ludDo6emVybygpLCBpbWFnZURhdGEtPnNpemUoKSB9KTsKIAogICAg
ICAgICBhdXRvIGJpdG1hcCA9IEltYWdlQml0bWFwOjpjcmVhdGUoeyBXVEZNb3ZlKGJ1ZmZlciks
IHN0YXRpY19jYXN0PGJvb2w+KG9yaWdpbkNsZWFuKSB9KTsKICAgICAgICAgcmV0dXJuIGdldEpT
VmFsdWUoYml0bWFwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ2FudmFzQmFz
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0NhbnZhc0Jhc2UuY3BwCmluZGV4IGQyYWQ0MWU4
NzFhYzVhMGJjYjRkNjljMTUyNTM0NjM5YTczNjE0NWQuLjE2MmIyOTQyZjY2NmE5MzI0NjBiMDZl
NzZkMDgzNmU0M2MwMTcxNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ2FudmFz
QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmNwcApAQCAtMTkx
LDggKzE5MSw4IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gQ2FudmFzQmFzZTo6c2V0
SW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmCiAgICAgICAgIHJldHVybkJ1ZmZl
ciA9IHN0ZDo6ZXhjaGFuZ2UobV9pbWFnZUJ1ZmZlciwgV1RGTW92ZShidWZmZXIpKTsKICAgICB9
CiAKLSAgICBpZiAobV9pbWFnZUJ1ZmZlciAmJiBtX3NpemUgIT0gbV9pbWFnZUJ1ZmZlci0+aW50
ZXJuYWxTaXplKCkpCi0gICAgICAgIG1fc2l6ZSA9IG1faW1hZ2VCdWZmZXItPmludGVybmFsU2l6
ZSgpOworICAgIGlmIChtX2ltYWdlQnVmZmVyICYmIG1fc2l6ZSAhPSBtX2ltYWdlQnVmZmVyLT5i
YWNrZW5kU2l6ZSgpKQorICAgICAgICBtX3NpemUgPSBtX2ltYWdlQnVmZmVyLT5iYWNrZW5kU2l6
ZSgpOwogCiAgICAgc2l6ZV90IHByZXZpb3VzTWVtb3J5Q29zdCA9IG1faW1hZ2VCdWZmZXJDb3N0
OwogICAgIG1faW1hZ2VCdWZmZXJDb3N0ID0gbWVtb3J5Q29zdCgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAppbmRleCBmNWU3NjUwMDY5YTZkODY5MGQ5NDNkZWUy
NmJiMzYxZjkxODljZTMxLi40MmE2NWQzYTllNzU0NDU0NDJlNjU5ZjhjOWE1YTc1ZDJlODM5NTE0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcApAQCAtMzMsNiAr
MzMsNyBAQAogI2luY2x1ZGUgIkNhbnZhc0dyYWRpZW50LmgiCiAjaW5jbHVkZSAiQ2FudmFzUGF0
dGVybi5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIgorI2luY2x1ZGUg
IkRpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2lu
Y2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKQEAgLTM0OSw5
ICszNTAsNiBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIEhUTUxDYW52YXNFbGVtZW50Ojpj
cmVhdGVDb250ZXh0MmQoY29uc3QgU3RyaW5nJiB0eXBlKQogCiAgICAgbV9jb250ZXh0ID0gQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGUoKnRoaXMsIGRvY3VtZW50KCkuaW5RdWlya3NN
b2RlKCkpOwogCi0gICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250
ZXh0KS5zZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyk7
Ci0gICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5zZXRU
cmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKLQogI2lm
IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRF
RF8yRF9DQU5WQVMpCiAgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgYSBSZW5kZXJMYXllciBhbmQg
Y29tcG9zaXRpbmcgbGF5ZXIgZ2V0IGNyZWF0ZWQgZm9yIHRoZSBDYW52YXMuCiAgICAgaW52YWxp
ZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwpAQCAtODIyLDM5ICs4MjAsMjcgQEAgYm9v
bCBIVE1MQ2FudmFzRWxlbWVudDo6c2hvdWxkQWNjZWxlcmF0ZShjb25zdCBJbnRTaXplJiBzaXpl
KSBjb25zdAogCiB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpzZXRVc2VzRGlzcGxheUxpc3REcmF3
aW5nKGJvb2wgdXNlc0Rpc3BsYXlMaXN0RHJhd2luZykKIHsKLSAgICBpZiAodXNlc0Rpc3BsYXlM
aXN0RHJhd2luZyA9PSBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcpCi0gICAgICAgIHJldHVybjsK
LSAgICAKICAgICBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcgPSB1c2VzRGlzcGxheUxpc3REcmF3
aW5nOwotCi0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4obV9jb250ZXh0Lmdl
dCgpKSkKLSAgICAgICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250
ZXh0KS5zZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyk7
CiB9CiAKIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5
KGJvb2wgdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCiB7Ci0gICAgaWYgKHRyYWNrc0Rpc3BsYXlM
aXN0UmVwbGF5ID09IG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCi0gICAgICAgIHJldHVybjsK
LQogICAgIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgPSB0cmFja3NEaXNwbGF5TGlzdFJlcGxh
eTsKLQotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KG1fY29udGV4dC5nZXQo
KSkpCi0gICAgICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4
dCkuc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7
CisgICAgaWYgKGJ1ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpKQorICAgICAg
ICBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXko
bV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7CiB9CiAKIFN0cmluZyBIVE1MQ2FudmFzRWxlbWVu
dDo6ZGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzIGZsYWdzKSBjb25z
dAogewotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KG1fY29udGV4dC5nZXQo
KSkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCpt
X2NvbnRleHQpLmRpc3BsYXlMaXN0QXNUZXh0KGZsYWdzKTsKLQorICAgIGlmIChidWZmZXIoKSAm
JiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcigpLT5k
cmF3aW5nQ29udGV4dCgpLT5kaXNwbGF5TGlzdCgpLmFzVGV4dChmbGFncyk7CiAgICAgcmV0dXJu
IFN0cmluZygpOwogfQogCiBTdHJpbmcgSFRNTENhbnZhc0VsZW1lbnQ6OnJlcGxheURpc3BsYXlM
aXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1RleHRGbGFncyBmbGFncykgY29uc3QKIHsKLSAgICBp
ZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihtX2NvbnRleHQuZ2V0KCkpKQotICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5y
ZXBsYXlEaXNwbGF5TGlzdEFzVGV4dChmbGFncyk7Ci0KKyAgICBpZiAoYnVmZmVyKCkgJiYgYnVm
ZmVyKCktPmRyYXdpbmdDb250ZXh0KCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPnJl
cGxheURpc3BsYXlMaXN0KCkpCisgICAgICAgIHJldHVybiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRl
eHQoKS0+cmVwbGF5RGlzcGxheUxpc3QoKS0+YXNUZXh0KGZsYWdzKTsKICAgICByZXR1cm4gU3Ry
aW5nKCk7CiB9CiAKQEAgLTg4OSwxMSArODc1LDIyIEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6
OmNyZWF0ZUltYWdlQnVmZmVyKCkgY29uc3QKICAgICBpZiAoIXdpZHRoKCkgfHwgIWhlaWdodCgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSBz
aG91bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJl
bmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7Ci0KICAgICBhdXRvIGhvc3RXaW5kb3cgPSAoZG9j
dW1lbnQoKS52aWV3KCkgJiYgZG9jdW1lbnQoKS52aWV3KCktPnJvb3QoKSkgPyBkb2N1bWVudCgp
LnZpZXcoKS0+cm9vdCgpLT5ob3N0V2luZG93KCkgOiBudWxscHRyOworCisgICAgLy8gRklYTUU6
IEFkZCBhIG5ldyBzZXR0aW5nIGZvciBEaXNwbGF5TGlzdCBkcmF3aW5nIG9uIGNhbnZhcy4KKyAg
ICBib29sIHVzZXNEaXNwbGF5TGlzdERyYXdpbmcgPSBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcu
dmFsdWVPcihkb2N1bWVudCgpLnNldHRpbmdzKCkuZGlzcGxheUxpc3REcmF3aW5nRW5hYmxlZCgp
KTsKKworICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZTsKKyAgICBpZiAodXNlc0Rpc3Bs
YXlMaXN0RHJhd2luZykKKyAgICAgICAgcmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUo
c2l6ZSgpKSA/IFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQgOiBSZW5kZXJp
bmdNb2RlOjpEaXNwbGF5TGlzdDsKKyAgICBlbHNlCisgICAgICAgIHJlbmRlcmluZ01vZGUgPSBz
aG91bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJl
bmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CisKICAgICBzZXRJbWFnZUJ1ZmZlcihJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKHNpemUoKSwgcmVuZGVyaW5nTW9kZSwgMSwgQ29sb3JTcGFjZTo6U1JHQiwg
aG9zdFdpbmRvdykpOwogCisgICAgaWYgKGJ1ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29u
dGV4dCgpKQorICAgICAgICBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+c2V0VHJhY2tzRGlz
cGxheUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7CisKICNpZiBVU0UoSU9T
VVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FO
VkFTKQogICAgIGlmIChtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5pczJkKCkpIHsKICAgICAgICAg
Ly8gUmVjYWxjdWxhdGUgY29tcG9zaXRpbmcgcmVxdWlyZW1lbnRzIGlmIGFjY2VsZXJhdGlvbiBz
dGF0ZSBjaGFuZ2VkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFz
RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCmluZGV4
IGI1Mjg2NDVjNjU4NzRjZDBjYTA5MzQ0NDYxYjQ1NGQ1NjA1MDYzMjYuLjQyMTM0YTEyMjk0MTQ5
NmJmMzFiY2RkNzljNmJjNWMzOTFhNzhhNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTENhbnZhc0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52
YXNFbGVtZW50LmgKQEAgLTE2MSw3ICsxNjEsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX2ln
bm9yZVJlc2V0IHsgZmFsc2UgfTsKIAotICAgIGJvb2wgbV91c2VzRGlzcGxheUxpc3REcmF3aW5n
IHsgZmFsc2UgfTsKKyAgICBPcHRpb25hbDxib29sPiBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmc7
CiAgICAgYm9vbCBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5IHsgZmFsc2UgfTsKIAogICAgIHN0
ZDo6dW5pcXVlX3B0cjxDYW52YXNSZW5kZXJpbmdDb250ZXh0PiBtX2NvbnRleHQ7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2UuY3BwCmluZGV4IGQ0OTQ3MTIwODMyMzEwYzdjMGQ3YmVmMWM4NzlkYTNmZmIyOTNm
MGEuLmQyYjhkYjgxNGQzMTM0MTg2NDEyZmE1ZDhhZWFmN2EyMzgwYjEyODUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2UuY3BwCkBAIC0yMTU4LDExICsyMTU4LDYgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPElt
YWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZUltYWdlRGF0YShm
bG8KIH0KIAogRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OmdldEltYWdlRGF0YShmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBm
bG9hdCBzaCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhKEltYWdlQnVmZmVyOjpM
b2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSwgc3gsIHN5LCBzdywgc2gpOwotfQotCi1FeGNlcHRpb25P
cjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1h
Z2VEYXRhKEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0sIGZs
b2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdAogewogICAgIGlmICgh
Y2FudmFzQmFzZSgpLm9yaWdpbkNsZWFuKCkpIHsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFN0cmluZz4gY29uc29sZU1lc3NhZ2UoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlVuYWJs
ZSB0byBnZXQgaW1hZ2UgZGF0YSBmcm9tIGNhbnZhcyBiZWNhdXNlIHRoZSBjYW52YXMgaGFzIGJl
ZW4gdGFpbnRlZCBieSBjcm9zcy1vcmlnaW4gZGF0YS4iKSk7CkBAIC0yMTk2LDggKzIxOTEsOCBA
QCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6Z2V0SW1hZ2VEYXRhKEltYWdlQgogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1
cm4gY3JlYXRlRW1wdHlJbWFnZURhdGEoaW1hZ2VEYXRhUmVjdC5zaXplKCkpOwogCi0gICAgYXV0
byBieXRlQXJyYXkgPSBidWZmZXItPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShpbWFnZURhdGFS
ZWN0LCBudWxscHRyLCBjb29yZGluYXRlU3lzdGVtKTsKLSAgICBpZiAoIWJ5dGVBcnJheSkgewor
ICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZURhdGFSZWN0KTsKKyAgICBpZiAoIWltYWdl
RGF0YSkgewogICAgICAgICBTdHJpbmdCdWlsZGVyIGNvbnNvbGVNZXNzYWdlOwogICAgICAgICBj
b25zb2xlTWVzc2FnZS5hcHBlbmRMaXRlcmFsKCJVbmFibGUgdG8gZ2V0IGltYWdlIGRhdGEgZnJv
bSBjYW52YXMuIFJlcXVlc3RlZCBzaXplIHdhcyAiKTsKICAgICAgICAgY29uc29sZU1lc3NhZ2Uu
YXBwZW5kTnVtYmVyKGltYWdlRGF0YVJlY3Qud2lkdGgoKSk7CkBAIC0yMjA4LDcgKzIyMDMsNyBA
QCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6Z2V0SW1hZ2VEYXRhKEltYWdlQgogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52
YWxpZFN0YXRlRXJyb3IgfTsKICAgICB9CiAKLSAgICByZXR1cm4gSW1hZ2VEYXRhOjpjcmVhdGUo
aW1hZ2VEYXRhUmVjdC5zaXplKCksIGJ5dGVBcnJheS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBy
ZXR1cm4gaW1hZ2VEYXRhOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIGZsb2F0IGR4LCBmbG9hdCBkeSkKQEAgLTIy
MTcsMTEgKzIyMTIsNiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dElt
YWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIGZsb2F0IGR4LCBmbG9hdAogfQogCiB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIGZs
b2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5
V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KQotewotICAgIHB1dEltYWdlRGF0YShkYXRhLCBJbWFn
ZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5hdGVTeXN0ZW0sIGR4LCBkeSwgZGlydHlYLCBkaXJ0eVks
IGRpcnR5V2lkdGgsIGRpcnR5SGVpZ2h0KTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBJbWFnZUJ1ZmZlcjo6Q29v
cmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtLCBmbG9hdCBkeCwgZmxvYXQgZHksIGZsb2F0
IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBmbG9hdCBkaXJ0eVdpZHRoLCBmbG9hdCBkaXJ0eUhlaWdo
dCkKIHsKICAgICBJbWFnZUJ1ZmZlciogYnVmZmVyID0gY2FudmFzQmFzZSgpLmJ1ZmZlcigpOwog
ICAgIGlmICghYnVmZmVyKQpAQCAtMjI0NSw3ICsyMjM1LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBJbWFnZUJ1ZmZl
cjo6Q28KICAgICBJbnRTaXplIGRlc3RPZmZzZXQoc3RhdGljX2Nhc3Q8aW50PihkeCksIHN0YXRp
Y19jYXN0PGludD4oZHkpKTsKICAgICBJbnRSZWN0IGRlc3RSZWN0ID0gZW5jbG9zaW5nSW50UmVj
dChjbGlwUmVjdCk7CiAgICAgZGVzdFJlY3QubW92ZShkZXN0T2Zmc2V0KTsKLSAgICBkZXN0UmVj
dC5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2ludCgpLCBjb29yZGluYXRlU3lzdGVtID09IEltYWdl
QnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSA/IGJ1ZmZlci0+bG9naWNhbFNpemUoKSA6
IGJ1ZmZlci0+aW50ZXJuYWxTaXplKCkpKTsKKyAgICBkZXN0UmVjdC5pbnRlcnNlY3QoSW50UmVj
dChJbnRQb2ludCgpLCBidWZmZXItPmxvZ2ljYWxTaXplKCkpKTsKICAgICBpZiAoZGVzdFJlY3Qu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgSW50UmVjdCBzb3VyY2VSZWN0KGRlc3RS
ZWN0KTsKQEAgLTIyNTMsNyArMjI0Myw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvCiAgICAg
c291cmNlUmVjdC5pbnRlcnNlY3QoSW50UmVjdCgwLCAwLCBkYXRhLndpZHRoKCksIGRhdGEuaGVp
Z2h0KCkpKTsKIAogICAgIGlmICghc291cmNlUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIGJ1ZmZl
ci0+cHV0Qnl0ZUFycmF5KCpkYXRhLmRhdGEoKSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkLCBJbnRTaXplKGRhdGEud2lkdGgoKSwgZGF0YS5oZWlnaHQoKSksIHNvdXJj
ZVJlY3QsIEludFBvaW50KGRlc3RPZmZzZXQpLCBjb29yZGluYXRlU3lzdGVtKTsKKyAgICAgICAg
YnVmZmVyLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkLCBkYXRhLCBzb3VyY2VSZWN0LCBJbnRQb2ludChkZXN0T2Zmc2V0KSk7CiAKICAgICBkaWRE
cmF3KGRlc3RSZWN0LCBDYW52YXNEaWREcmF3QXBwbHlOb25lKTsgLy8gaWdub3JlIHRyYW5zZm9y
bSwgc2hhZG93IGFuZCBjbGlwCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKaW5kZXggM2RmYzljOWZjZTUy
YmU4ODkyYmY0OThhZTY3MjIxODdmMWJlZTkxZC4uZGIzZmFjOGIwOGI3MDNiZDU0MWZjNzJmNGQz
MWJkNTE3NzM1MDRkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaApAQCAtMzcxLDkgKzM3MSw2IEBAIHBy
b3RlY3RlZDoKIAogICAgIHRlbXBsYXRlPGNsYXNzIFQ+IHZvaWQgZnVsbENhbnZhc0NvbXBvc2l0
ZWREcmF3SW1hZ2UoVCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIENvbXBv
c2l0ZU9wZXJhdG9yKTsKIAotICAgIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBnZXRJ
bWFnZURhdGEoSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4LCBmbG9hdCBz
eSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdDsKLSAgICB2b2lkIHB1dEltYWdlRGF0YShJbWFn
ZURhdGEmLCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5
LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGly
dHlIZWlnaHQpOwotCiAgICAgYm9vbCBpc0FjY2VsZXJhdGVkKCkgY29uc3Qgb3ZlcnJpZGU7CiAK
ICAgICBib29sIGhhc0ludmVydGlibGVUcmFuc2Zvcm0oKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBzdGF0ZSgpLmhhc0ludmVydGlibGVUcmFuc2Zvcm07IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcApp
bmRleCBmNTg2Y2NiMTc4Yzc2ZTU3OGMyMTMwODQ2YTFmYmZhN2VmZmQ3YWY1Li42MzdlNzdjNWZl
ZGFiMzNjNWJkYjgwYzZmZDBlMTFhYjdmNGE4MjE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0Nocm9tZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCkBA
IC00OTQsNiArNDk0LDEzIEBAIHZvaWQgQ2hyb21lOjpzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNl
TW92ZXMoYm9vbCBoaWRkZW5VbnRpbE1vdXNlTW92ZXMpCiAgICAgbV9jbGllbnQuc2V0Q3Vyc29y
SGlkZGVuVW50aWxNb3VzZU1vdmVzKGhpZGRlblVudGlsTW91c2VNb3Zlcyk7CiB9CiAKK1JlbmRl
cmluZ0JhY2tlbmQqIENocm9tZTo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0Cit7Cisg
ICAgaWYgKCFtX3JlbmRlcmluZ0JhY2tlbmQpCisgICAgICAgIG1fcmVuZGVyaW5nQmFja2VuZCA9
IG1fY2xpZW50LmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoKTsKKyAgICByZXR1cm4gbV9yZW5kZXJp
bmdCYWNrZW5kLmdldCgpOworfQorCiBQbGF0Zm9ybURpc3BsYXlJRCBDaHJvbWU6OmRpc3BsYXlJ
RCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZGlzcGxheUlEOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9DaHJvbWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmgKaW5k
ZXggNjYyYmUwMGZhMGFiYWU4YjdiYTdkNjY4ZDQ0NzBlYzUxMzYxYWY0OS4uNmNmY2FlY2EyODVj
NGViYzVlMjI0NGU4ZWJkNjRiYWM5YTc2MmUyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9DaHJvbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oCkBAIC04Myw2
ICs4Myw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEN1cnNvcihjb25zdCBDdXJzb3ImKSBvdmVy
cmlkZTsKICAgICB2b2lkIHNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29sKSBvdmVy
cmlkZTsKIAorICAgIFJlbmRlcmluZ0JhY2tlbmQqIHNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoKSBj
b25zdCBvdmVycmlkZTsKKwogICAgIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKSBvdmVycmlkZSB7
IH0KIAogICAgIFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCgpIGNvbnN0IG92ZXJyaWRlOwpA
QCAtMTk1LDYgKzE5Nyw3IEBAIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAg
ICBib29sIG1faXNEaXNwYXRjaFZpZXdwb3J0RGF0YURpZENoYW5nZVN1cHByZXNzZWQgeyBmYWxz
ZSB9OwogI2VuZGlmCisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2Vu
ZD4gbV9yZW5kZXJpbmdCYWNrZW5kOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKaW5kZXggOTg5YmFmNGE3ZDdmMzM1NDU5MzJiZDkzMDQz
ZWY0M2JhN2FhNTEyYS4uYjU5Y2UxM2Q5ZWMzMzAxOTNkODAzNDdjMGNmODcxZDkyNThjYTVlYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVk
ZSAiUG9wdXBNZW51Q2xpZW50LmgiCiAjaW5jbHVkZSAiUmVnaXN0cmFibGVEb21haW4uaCIKICNp
bmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tl
bmQuaCIKICNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3Jk
aW5hdG9yLmgiCiAjaW5jbHVkZSAiU2VhcmNoUG9wdXBNZW51LmgiCkBAIC0zMDUsNiArMzA2LDgg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgUmVmUHRyPERpc3BsYXlSZWZyZXNoTW9uaXRvcj4gY3Jl
YXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEKSBjb25zdCB7IHJldHVy
biBudWxscHRyOyB9CiAjZW5kaWYKIAorICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPFJlbmRl
cmluZ0JhY2tlbmQ+IGNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdCB7IHJldHVybiBudWxs
cHRyOyB9CisKICAgICAvLyBQYXNzIG51bGxwdHIgYXMgdGhlIEdyYXBoaWNzTGF5ZXIgdG8gZGV0
YXRjaCB0aGUgcm9vdCBsYXllci4KICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoUm9vdEdyYXBoaWNz
TGF5ZXIoRnJhbWUmLCBHcmFwaGljc0xheWVyKikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBhdHRh
Y2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciopID0gMDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAKaW5kZXggNGMzNTMzMDkxNjE5ZGM2NDNm
ODcyOTA5Y2I3MWY3ODI4ZWY4NWJiYy4uZTYwY2RlMTRkMWE3YzZjMzA0Mjg5MDc1MDdjNjEwYmU1
NWRlMWEyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAKQEAg
LTM3Niw3ICszNzYsNyBAQCB2b2lkIFBhZ2VDb25zb2xlQ2xpZW50OjpzY3JlZW5zaG90KEpTQzo6
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFJlZgogICAgICAgICAgICAgICAg
IGF1dG8gc291cmNlU2l6ZSA9IGltYWdlRGF0YS0+c2l6ZSgpOwogICAgICAgICAgICAgICAgIGlm
IChhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzb3VyY2VTaXplLCBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSkgewogICAgICAgICAgICAgICAgICAgICBJbnRSZWN0
IHNvdXJjZVJlY3QoSW50UG9pbnQoKSwgc291cmNlU2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAg
IGltYWdlQnVmZmVyLT5wdXRCeXRlQXJyYXkoKmltYWdlRGF0YS0+ZGF0YSgpLCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHNvdXJjZVNpemUsIHNvdXJjZVJlY3QsIElu
dFBvaW50KCkpOworICAgICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKmltYWdlRGF0YSwgc291
cmNlUmVjdCk7CiAgICAgICAgICAgICAgICAgICAgIGRhdGFVUkwgPSBpbWFnZUJ1ZmZlci0+dG9E
YXRhVVJMKCJpbWFnZS9wbmciX3MsIFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uOjpZ
ZXMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0NhaXJvLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Q2Fpcm8uY21ha2UKaW5kZXggOWEzYThiZjk0M2FkNjU4NmRhNDNjZWQwZGE3ZTYzZjA1NWFiOWE1
ZC4uMTJhMmQ3NGZmYmU4ZmNjNzNmMDY4YmJmY2JhMDA1NDA3NzU3MTc3MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vQ2Fpcm8uY21ha2UKQEAgLTEzLDcgKzEzLDEwIEBAIGxpc3QoQVBQRU5EIFdlYkNv
cmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0NhaXJvT3BlcmF0aW9ucy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGls
aXRpZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxD
YWlyby5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8u
aAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFj
a2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdl
U3VyZmFjZUJhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm9TdXJmYWNlQmFja2VuZC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZv
cm1Db250ZXh0Q2Fpcm8uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1JlZlB0ckNhaXJv
LmgKICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaAppbmRleCAyY2ZlY2FkYzI0ZDk4
MmE4NjE2Mzc0Yjc2YTBlNGZiMGZmZjdhOWQ0Li44OTg2NTM0NmNmNDgwZjgwNmM1YzBjZTkzNTIx
ZGU2OTIwODE4MDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0V2lu
ZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRvdy5oCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsMTQg
KzIzLDE0IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIEhvc3RXaW5kb3dfaAot
I2RlZmluZSBIb3N0V2luZG93X2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiV2lkZ2V0Lmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ3Vyc29yOworY2xhc3MgUmVuZGVyaW5n
QmFja2VuZDsKIAogY2xhc3MgSG9zdFdpbmRvdyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
SG9zdFdpbmRvdyk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNjQsNiArNjQsOCBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVz
KGJvb2wpID0gMDsKIAorICAgIHZpcnR1YWwgUmVuZGVyaW5nQmFja2VuZCogc2hhcmVkUmVuZGVy
aW5nQmFja2VuZCgpIGNvbnN0ID0gMDsKKwogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFuaW1h
dGlvbigpID0gMDsKIAogICAgIHZpcnR1YWwgUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKCkg
Y29uc3QgPSAwOwpAQCAtNzUsNSArNzcsMyBAQCBwdWJsaWM6CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBIb3N0V2luZG93X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Tb3VyY2VzQ2Fpcm8udHh0CmluZGV4IGY5MGQyNDZlYzU5YjRmOGE4ZTEzOGI3MjI0MGNmMjAy
NTgzMTkyYzQuLjZmYTRmZmUxNDYwZWE3MTM4MjFiY2EzNjIyNmQyNmE5N2U1ZDk5ODkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dApAQCAtMzAsNyArMzAsMTAgQEAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEdMQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm8uY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
QmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1
cmZhY2VCYWNrZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWly
b0ltYWdlU3VyZmFjZUJhY2tlbmQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW50UmVj
dENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vTmF0aXZlSW1hZ2VDYWlyby5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcApp
bmRleCA0ODIyNDRhNGYyYmRjZWRlN2M4NzRjZDFiNTBlYTkxNGIxNDk5YTIyLi5kZGQ1YzZjNzM0
NWEyYzBkOGJkOWE4ZTRlZmI0ZTNjYjk5NTg3YzZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCkBAIC0xNjUsMTIgKzE2NSw3IEBAIE5h
dGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZVJlc3Bl
Y3RpbmdPcmllbnRhdGlvbihjb25zCiAgICAgICAgIHJldHVybiBpbWFnZTsKIAogICAgIGJ1ZmZl
ci0+Y29udGV4dCgpLmRyYXdOYXRpdmVJbWFnZShpbWFnZSwgcmVjdC5zaXplKCksIHJlY3QsIHJl
Y3QsIHsgb3JpZW50YXRpb24gfSk7Ci0KLSNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKICAg
ICByZXR1cm4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RGTW92ZShidWZmZXIp
KTsKLSNlbGlmIFVTRShDQUlSTykKLSAgICByZXR1cm4gYnVmZmVyLT5uYXRpdmVJbWFnZSgpOwot
I2VuZGlmCiB9CiAKICNpZiBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db250ZXh0dWFsSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbnRleHR1YWxJbWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI4ZjMy
NzgyMTA1YTg0ZTkyNTYyMDUyYjlkNGM3MGFkNmY2NTg5NDIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0dWFsSW1hZ2VCdWZmZXIuaApA
QCAtMCwwICsxLDE4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVk
ZSAiSW1hZ2VEYXRhLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordGVtcGxhdGU8dHlwZW5h
bWUgQmFja2VuZFR5cGU+CitjbGFzcyBDb250ZXh0dWFsSW1hZ2VCdWZmZXIgOiBwdWJsaWMgSW1h
Z2VCdWZmZXIgeworcHVibGljOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEltYWdlQnVmZmVyVHlw
ZSA9IENvbnRleHR1YWxJbWFnZUJ1ZmZlciwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHN0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUm
IHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25z
dCBIb3N0V2luZG93KiBob3N0V2luZG93LCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAg
eworICAgICAgICBhdXRvIGJhY2tlbmQgPSBCYWNrZW5kVHlwZTo6Y3JlYXRlKHNpemUsIHJlc29s
dXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIGlmICghYmFja2Vu
ZCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyVHlwZT4obmV3IEltYWdlQnVmZmVyVHlwZShXVEZNb3ZlKGJhY2tl
bmQpLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7CisgICAgfQorCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSW1hZ2VCdWZmZXJUeXBlID0gQ29udGV4dHVhbEltYWdlQnVm
ZmVyLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAg
ICBhdXRvIGJhY2tlbmQgPSBCYWNrZW5kVHlwZTo6Y3JlYXRlKHNpemUsIGNvbnRleHQpOworICAg
ICAgICBpZiAoIWJhY2tlbmQpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclR5cGU+KG5ldyBJbWFnZUJ1ZmZlclR5
cGUoV1RGTW92ZShiYWNrZW5kKSwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4u
LikpOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIENvbnRleHR1YWxJbWFnZUJ1ZmZlcihzdGQ6
OnVuaXF1ZV9wdHI8QmFja2VuZFR5cGU+JiYgYmFja2VuZCkKKyAgICAgICAgOiBtX2JhY2tlbmQo
V1RGTW92ZShiYWNrZW5kKSkKKyAgICB7CisgICAgfQorCisgICAgQ29udGV4dHVhbEltYWdlQnVm
ZmVyKCkgPSBkZWZhdWx0OworCisgICAgdmlydHVhbCBCYWNrZW5kVHlwZSogZW5zdXJlQmFja2Vu
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorCisgICAgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2Jh
Y2tlbmQpOworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5jb250ZXh0KCk7CisgICAgfQorCisg
ICAgdm9pZCBmbHVzaENvbnRleHQoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgZmx1c2hEcmF3
aW5nQ29udGV4dCgpOworICAgICAgICBtX2JhY2tlbmQtPmZsdXNoQ29udGV4dCgpOworICAgIH0K
KworICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9iYWNrZW5kLT5iYXNlVHJhbnNmb3JtKCk7IH0KKyAgICBJbnRTaXplIGxvZ2ljYWxT
aXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9iYWNrZW5kLT5sb2dpY2FsU2l6ZSgpOyB9
CisgICAgSW50U2l6ZSBiYWNrZW5kU2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFj
a2VuZC0+YmFja2VuZFNpemUoKTsgfQorICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2VuZC0+cmVzb2x1dGlvblNjYWxlKCk7IH0KKworICAg
IHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9iYWNrZW5kLT5t
ZW1vcnlDb3N0KCk7IH0KKyAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbV9iYWNrZW5kLT5leHRlcm5hbE1lbW9yeUNvc3QoKTsgfQorCisgICAg
TmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2
aW9yID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNv
bnN0X2Nhc3Q8Q29udGV4dHVhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoRHJhd2luZ0NvbnRl
eHQoKTsKKyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+Y29weU5hdGl2ZUltYWdlKGNvcHlCZWhh
dmlvcik7CisgICAgfQorCisgICAgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3Jl
Q29weSBjb3B5QmVoYXZpb3IgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24g
cHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Qgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIGNvbnN0X2Nhc3Q8Q29udGV4dHVhbEltYWdlQnVmZmVyJj4oKnRo
aXMpLmZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+Y29w
eUltYWdlKGNvcHlCZWhhdmlvciwgcHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICB9CisKKyAgICB2
b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRl
eHQoKTsKKyAgICAgICAgbV9iYWNrZW5kLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3Jj
UmVjdCwgb3B0aW9ucyk7CisgICAgfQorCisgICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0Nv
bnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCisgICAgeworICAgICAgICBm
bHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgIG1fYmFja2VuZC0+ZHJhd1BhdHRlcm4oZGVz
dENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3Bh
Y2luZywgb3B0aW9ucyk7CisgICAgfQorCisgICAgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRp
dmVJbWFnZSgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7
CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQtPnNpbmtJbnRvTmF0aXZlSW1hZ2UoKTsKKyAgICB9
CisKKyAgICBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHBy
ZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIG92ZXJyaWRlCisgICAg
eworICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgIHJldHVybiBtX2JhY2tl
bmQtPnNpbmtJbnRvSW1hZ2UocHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICB9CisKKyAgICB2b2lk
IGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGZsdXNoRHJhd2lu
Z0NvbnRleHQoKTsKKyAgICAgICAgbV9iYWNrZW5kLT5kcmF3Q29uc3VtaW5nKGRlc3RDb250ZXh0
LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgfQorCisgICAgdm9pZCBjb252ZXJ0
VG9MdW1pbmFuY2VNYXNrKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGZsdXNoRHJhd2luZ0Nv
bnRleHQoKTsKKyAgICAgICAgbV9iYWNrZW5kLT5jb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7Cisg
ICAgfQorCisgICAgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JT
cGFjZSwgQ29sb3JTcGFjZSBkZXN0Q29sb3JTcGFjZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgbV9iYWNrZW5kLT50cmFuc2Zvcm1Db2xv
clNwYWNlKHNyY0NvbG9yU3BhY2UsIGRlc3RDb2xvclNwYWNlKTsKKyAgICB9CisKKyAgICBTdHJp
bmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIGNvbnN0X2Nhc3Q8Q29udGV4dHVhbEltYWdlQnVmZmVyJj4oKnRo
aXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT50b0RhdGFVUkwo
bWltZVR5cGUsIHF1YWxpdHksIHByZXNlcnZlUmVzb2x1dGlvbik7CisgICAgfQorCisgICAgVmVj
dG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAg
ICBjb25zdF9jYXN0PENvbnRleHR1YWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaENvbnRleHQo
KTsKKyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+dG9EYXRhKG1pbWVUeXBlLCBxdWFsaXR5KTsK
KyAgICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRl
CisgICAgeworICAgICAgICBjb25zdF9jYXN0PENvbnRleHR1YWxJbWFnZUJ1ZmZlciY+KCp0aGlz
KS5mbHVzaENvbnRleHQoKTsKKyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+dG9CR1JBRGF0YSgp
OworICAgIH0KKworICAgIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3Qg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNvbnN0X2Nhc3Q8Q29udGV4dHVhbEltYWdlQnVmZmVy
Jj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5nZXRJ
bWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0KTsKKyAgICB9CisKKyAgICB2b2lkIHB1dElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURh
dGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCA9IHsgfSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGZsdXNoQ29udGV4dCgpOwor
ICAgICAgICBtX2JhY2tlbmQtPnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgaW1hZ2VEYXRhLCBz
cmNSZWN0LCBkZXN0UG9pbnQpOworICAgIH0KKworICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3Jt
TGF5ZXIoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+
cGxhdGZvcm1MYXllcigpOworICAgIH0KKworICAgIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJl
KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiBjb250ZXh0LCBHQ0dMZW51bSB0YXJnZXQsIFBsYXRm
b3JtR0xPYmplY3QgZGVzdGluYXRpb25UZXh0dXJlLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwg
Ym9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKSBjb25zdCBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKGNvbnRleHQs
IHRhcmdldCwgZGVzdGluYXRpb25UZXh0dXJlLCBpbnRlcm5hbGZvcm1hdCwgcHJlbXVsdGlwbHlB
bHBoYSwgZmxpcFkpOworICAgIH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4g
bV9iYWNrZW5kOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjlkYjBmMGRmYmM0N2NhMTJkNzNjNDM3ODZlYTFhODk3OWZkMGI1NDUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5
TGlzdEltYWdlQnVmZmVyLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbnRl
eHR1YWxJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlw
ZT4KK2NsYXNzIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgOiBwdWJsaWMgQ29udGV4dHVhbEltYWdl
QnVmZmVyPEJhY2tlbmRUeXBlPiAsIHB1YmxpYyBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQg
eworICAgIHVzaW5nIEJhc2VDb250ZXh0dWFsSW1hZ2VCdWZmZXIgPSBDb250ZXh0dWFsSW1hZ2VC
dWZmZXI8QmFja2VuZFR5cGU+OworCitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RX
aW5kb3cpCisgICAgeworICAgICAgICByZXR1cm4gQmFzZUNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6
dGVtcGxhdGUgY3JlYXRlPERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI+KHNpemUsIHJlc29sdXRpb25T
Y2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdywgc2l6ZSk7CisgICAgfQorCisgICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEJhc2VDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OnRlbXBsYXRlIGNyZWF0ZTxEaXNwbGF5TGlzdElt
YWdlQnVmZmVyPihzaXplLCBjb250ZXh0LCBzaXplKTsKKyAgICB9CisKKyAgICBEaXNwbGF5TGlz
dEltYWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4mJiBkYXRhQmFja2VuZCwg
Y29uc3QgRmxvYXRTaXplJiBzaXplKQorICAgICAgICA6IEJhc2VDb250ZXh0dWFsSW1hZ2VCdWZm
ZXIoV1RGTW92ZShkYXRhQmFja2VuZCkpCisgICAgICAgICwgRGlzcGxheUxpc3Q6OkRyYXdpbmdD
b250ZXh0KHNpemUpCisgICAgeworICAgIH0KKworICAgIH5EaXNwbGF5TGlzdEltYWdlQnVmZmVy
KCkKKyAgICB7CisgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICB9CisKKyAgICBE
aXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQqIGRyYXdpbmdDb250ZXh0KCkgb3ZlcnJpZGUgeyBy
ZXR1cm4gdGhpczsgfQorCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6
OmNvbnRleHQoKTsKKyAgICB9CisKKyAgICB2b2lkIGZsdXNoRHJhd2luZ0NvbnRleHQoKSBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpyZXBsYXlE
aXNwbGF5TGlzdChCYXNlQ29udGV4dHVhbEltYWdlQnVmZmVyOjpjb250ZXh0KCkpOworICAgIH0K
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAppbmRleCAyMGI5ODEwYzI5MTQxZTQ3M2U2YTg4
OGJjODBjMTQxN2FlYWMyZmFmLi5hZmE4YjVhNWQwOGU1NmE4NjNkNDBhOWRkZTgxNTk1MGQyODJk
YzYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXIuY3BwCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNj
aHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNDQgKzI4LDY3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKIAotI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVz
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgot
I2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiUmVuZGVy
aW5nQmFja2VuZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBjb25zdCBmbG9h
dCBNYXhDbGFtcGVkTGVuZ3RoID0gNDA5NjsKIHN0YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVk
QXJlYSA9IE1heENsYW1wZWRMZW5ndGggKiBNYXhDbGFtcGVkTGVuZ3RoOwogCi1XVEZfTUFLRV9J
U09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXIpOwotCiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJp
bmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBj
b2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQogewotICAgIGJvb2wgc3Vj
Y2VzcyA9IGZhbHNlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5l
dyBJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmlu
Z01vZGUsIGhvc3RXaW5kb3csIHN1Y2Nlc3MpKTsKLSAgICBpZiAoIXN1Y2Nlc3MpCisgICAgcmV0
dXJuIFJlbmRlcmluZ0JhY2tlbmQ6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoaG9zdFdpbmRvdyku
Y3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBj
b2xvclNwYWNlLCBob3N0V2luZG93KTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIHJldHVybiBSZW5kZXJpbmdCYWNrZW5kOjpzaGFy
ZWRSZW5kZXJpbmdCYWNrZW5kKCkuY3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSwgY29udGV4dCk7Cit9
CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBh
dGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpCit7CisgICAgaWYgKHNpemUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICByZXR1cm4gYnVmZmVyOworCisgICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1h
Z2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRleHQpOworCisgICAgYXV0
byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2NhbGVkU2l6ZSwgY29udGV4dCk7
CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAv
LyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0aGUgZ3JhcGhpY3MgY29u
dGV4dC4KKyAgICBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLnNjYWxlKHNjYWxlZFNpemUgLyBzaXpl
KTsKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7CisKIH0KIAotI2lmIFVTRShESVJFQ1QyRCkKLXN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjb25zdCBGbG9h
dFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgR3JhcGhpY3ND
b250ZXh0KiB0YXJnZXRDb250ZXh0LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3N0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3Qg
RmxvYXRTaXplJiBzaXplLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkKIHsKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1
dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCBob3N0V2luZG93LCB0YXJnZXRD
b250ZXh0LCBzdWNjZXNzKSk7Ci0gICAgaWYgKCFzdWNjZXNzKQorICAgIGlmIChzaXplLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKKworICAg
IEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShz
aXplLCBjb250ZXh0KTsKKworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlQ29tcGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNwYWNlLCBjb250ZXh0KTsK
KyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8v
IFNldCB1cCBhIGNvcnJlc3BvbmRpbmcgc2NhbGUgZmFjdG9yIG9uIHRoZSBncmFwaGljcyBjb250
ZXh0LgorICAgIGltYWdlQnVmZmVyLT5jb250ZXh0KCkuc2NhbGUoc2NhbGVkU2l6ZSAvIHNpemUp
OworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUm
IHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25z
dCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyOjpj
cmVhdGUoc2l6ZSwgY29udGV4dC5yZW5kZXJpbmdNb2RlKCksIHJlc29sdXRpb25TY2FsZSwgY29s
b3JTcGFjZSk7CiB9Ci0jZW5kaWYKIAogYm9vbCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBp
bmcoY29uc3QgRmxvYXRTaXplJiBzaXplKQogewogICAgIGlmIChzaXplLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgcmV0dXJuIGZsb29yZihzaXplLmhlaWdodCgpKSAq
IGZsb29yZihzaXplLndpZHRoKCkpID4gTWF4Q2xhbXBlZEFyZWE7CiB9CiAKQEAgLTEwNSw5MSAr
MTI4LDEyIEBAIEZsb2F0UmVjdCBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogICAgIHJldHVybiBGbG9hdFJlY3QocmVjdC5sb2NhdGlvbigpLCBjbGFtcGVk
U2l6ZShyZWN0LnNpemUoKSkpOwogfQogCi0jaWYgIVVTRShDRykgJiYgIVVTRShDQUlSTykKLVZl
Y3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9CR1JBRGF0YSgpIGNvbnN0Ci17Ci0gICAgLy8g
RklYTUU6IEltcGxlbWVudCB0aGlzIGZvciBvdGhlciBiYWNrZW5kcy4KLSAgICByZXR1cm4geyB9
OwotfQotI2VuZGlmCi0KLSNpZiAhKFVTRShDRykgfHwgVVNFKERJUkVDVDJEKSkKLXZvaWQgSW1h
Z2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBD
b2xvclNwYWNlIGRzdENvbG9yU3BhY2UpCi17Ci0gICAgaWYgKHNyY0NvbG9yU3BhY2UgPT0gZHN0
Q29sb3JTcGFjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gb25seSBzUkdCIDwtPiBsaW5l
YXJSR0IgYXJlIHN1cHBvcnRlZCBhdCB0aGUgbW9tZW50Ci0gICAgaWYgKChzcmNDb2xvclNwYWNl
ICE9IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBzcmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6
OlNSR0IpCi0gICAgICAgIHx8IChkc3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OkxpbmVhclJH
QiAmJiBkc3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0IpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoZHN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpMaW5lYXJSR0IpIHsKLSAg
ICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBsaW5lYXJSZ2JMVVQg
PSBbXSB7Ci0gICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7Ci0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLSAgICAgICAgICAg
ICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7Ci0gICAgICAgICAgICAgICAgY29sb3IgPSBz
UkdCVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xvcik7Ci0gICAgICAgICAgICAgICAgYXJyYXlb
aV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgcmV0dXJuIGFycmF5OwotICAgICAgICB9KCk7Ci0gICAgICAgIHBs
YXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShsaW5lYXJSZ2JMVVQpOwotICAgIH0gZWxzZSBpZiAo
ZHN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpTUkdCKSB7Ci0gICAgICAgIHN0YXRpYyBjb25z
dCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gZGV2aWNlUmdiTFVUPSBbXSB7Ci0gICAgICAgICAg
ICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7Ci0gICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLSAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9
IGkgLyAyNTUuMGY7Ci0gICAgICAgICAgICAgICAgY29sb3IgPSBsaW5lYXJUb1NSR0JDb2xvckNv
bXBvbmVudChjb2xvcik7Ci0gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1
aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
cmV0dXJuIGFycmF5OwotICAgICAgICB9KCk7Ci0gICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29s
b3JTcGFjZShkZXZpY2VSZ2JMVVQpOwotICAgIH0KLX0KLQotI2VuZGlmIC8vIFVTRShDRykKLQot
aW5saW5lIHZvaWQgSW1hZ2VCdWZmZXI6OmdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkK
LXsKLSAgICBJbnRSZWN0IGx1bWluYW5jZVJlY3QoSW50UG9pbnQoKSwgaW50ZXJuYWxTaXplKCkp
OwotICAgIGF1dG8gc3JjUGl4ZWxBcnJheSA9IGdldFVubXVsdGlwbGllZEltYWdlRGF0YShsdW1p
bmFuY2VSZWN0KTsKLSAgICBpZiAoIXNyY1BpeGVsQXJyYXkpCi0gICAgICAgIHJldHVybjsKLSAg
ICAKLSAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gc3JjUGl4ZWxBcnJheS0+bGVuZ3Ro
KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9IDA7IHBpeGVsT2Zmc2V0IDwgcGl4
ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkgewotICAgICAgICB1aW50OF90IGEgPSBz
cmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMyk7Ci0gICAgICAgIGlmICghYSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB1aW50OF90IHIgPSBzcmNQaXhlbEFycmF5LT5p
dGVtKHBpeGVsT2Zmc2V0KTsKLSAgICAgICAgdWludDhfdCBnID0gc3JjUGl4ZWxBcnJheS0+aXRl
bShwaXhlbE9mZnNldCArIDEpOwotICAgICAgICB1aW50OF90IGIgPSBzcmNQaXhlbEFycmF5LT5p
dGVtKHBpeGVsT2Zmc2V0ICsgMik7Ci0gICAgICAgIAotICAgICAgICBkb3VibGUgbHVtYSA9IChy
ICogMC4yMTI1ICsgZyAqIDAuNzE1NCArIGIgKiAwLjA3MjEpICogKChkb3VibGUpYSAvIDI1NS4w
KTsKLSAgICAgICAgc3JjUGl4ZWxBcnJheS0+c2V0KHBpeGVsT2Zmc2V0ICsgMywgbHVtYSk7Ci0g
ICAgfQotICAgIHB1dEJ5dGVBcnJheSgqc3JjUGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBsdW1pbmFuY2VSZWN0LnNpemUoKSwgbHVtaW5hbmNlUmVj
dCwgSW50UG9pbnQoKSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmNvbnZlcnRUb0x1bWluYW5j
ZU1hc2soKQotewotICAgIC8vIEFkZCBwbGF0Zm9ybSBzcGVjaWZpYyBmdW5jdGlvbnMgd2l0aCBw
bGF0Zm9ybUNvbnZlcnRUb0x1bWluYW5jZU1hc2sgaGVyZSBsYXRlci4KLSAgICBnZW5lcmljQ29u
dmVydFRvTHVtaW5hbmNlTWFzaygpOwotfQotCi0jaWYgIVVTRShDQUlSTykKLVBsYXRmb3JtTGF5
ZXIqIEltYWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsK
LX0KLQotYm9vbCBJbWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMJiwgR0NHTGVudW0sIFBsYXRmb3JtR0xPYmplY3QsIEdDR0xlbnVtLCBib29s
LCBib29sKQorSW50U2l6ZSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoY29uc3Qg
RmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAg
cmV0dXJuIGZhbHNlOworICAgIC8vIEVubGFyZ2UgdGhlIGJ1ZmZlciBzaXplIGlmIHRoZSBjb250
ZXh0J3MgdHJhbnNmb3JtIGlzIHNjYWxpbmcgaXQgc28gd2UgbmVlZCBhIGhpZ2hlcgorICAgIC8v
IHJlc29sdXRpb24gdGhhbiBvbmUgcGl4ZWwgcGVyIHVuaXQuCisgICAgcmV0dXJuIGV4cGFuZGVk
SW50U2l6ZShzaXplICogY29udGV4dC5zY2FsZUZhY3RvcigpKTsKIH0KLSNlbmRpZgogCiBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjb3B5UmVjdFRvQnVmZmVyKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpCiB7CkBAIC0yMDYsNTAgKzE1MCwxOSBAQCBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjb3B5UmVjdFRvQnVmZmVyKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdAogICAgIHJldHVybiBidWZmZXI7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRT
aXplJiBzaXplLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdl
KHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIpCiB7Ci0gICAgaWYgKHNp
emUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEludFNpemUgc2Nh
bGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShzaXplLCBjb250ZXh0
KTsKLQotICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZm
ZXIoc2NhbGVkU2l6ZSwgMSwgY29sb3JTcGFjZSwgY29udGV4dCk7Ci0gICAgaWYgKCFidWZmZXIp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8gU2V0IHVwIGEgY29ycmVzcG9uZGlu
ZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNzIGNvbnRleHQuCi0gICAgYnVmZmVyLT5jb250
ZXh0KCkuc2NhbGUoc2NhbGVkU2l6ZSAvIHNpemUpOwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0K
LXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGli
bGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENv
bG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotewot
I2lmIFVTRShESVJFQ1QyRCkKLSAgICByZXR1cm4gY3JlYXRlKHNpemUsIGNvbnRleHQucmVuZGVy
aW5nTW9kZSgpLCAmY29udGV4dCwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKTsKLSNlbHNl
Ci0gICAgcmV0dXJuIGNyZWF0ZShzaXplLCBjb250ZXh0LnJlbmRlcmluZ01vZGUoKSwgcmVzb2x1
dGlvblNjYWxlLCBjb2xvclNwYWNlKTsKLSNlbmRpZgorICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+
c2lua0ludG9OYXRpdmVJbWFnZSgpOwogfQogCi1JbnRTaXplIEltYWdlQnVmZmVyOjpjb21wYXRp
YmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2Uoc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgUHJlc2VydmVSZXNvbHV0aW9u
IHByZXNlcnZlUmVzb2x1dGlvbikKIHsKLSAgICAvLyBFbmxhcmdlIHRoZSBidWZmZXIgc2l6ZSBp
ZiB0aGUgY29udGV4dCdzIHRyYW5zZm9ybSBpcyBzY2FsaW5nIGl0IHNvIHdlIG5lZWQgYSBoaWdo
ZXIKLSAgICAvLyByZXNvbHV0aW9uIHRoYW4gb25lIHBpeGVsIHBlciB1bml0LgotICAgIHJldHVy
biBleHBhbmRlZEludFNpemUoc2l6ZSAqIGNvbnRleHQuc2NhbGVGYWN0b3IoKSk7CisgICAgcmV0
dXJuIGltYWdlQnVmZmVyLT5zaW5rSW50b0ltYWdlKHByZXNlcnZlUmVzb2x1dGlvbik7CiB9CiAK
LSNpZiAhVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLXNpemVfdCBJbWFnZUJ1
ZmZlcjo6bWVtb3J5Q29zdCgpIGNvbnN0Cit2b2lkIEltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5n
KHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICAvLyBt
ZW1vcnlDb3N0KCkgbWF5IGJlIGludm9rZWQgY29uY3VycmVudGx5IGZyb20gYSBHQyB0aHJlYWQs
IGFuZCB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgd2hhdCBkYXRhIHdlIGFjY2VzcyBoZXJl
IGFuZCBob3cuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBpbnRlcm5hbFNpemUoKSBiZWNh
dXNlIGl0IGRvZXNuJ3QgZG8gYW55IHBvaW50ZXIgY2hhc2luZy4KLSAgICByZXR1cm4gNCAqIGlu
dGVybmFsU2l6ZSgpLndpZHRoKCkgKiBpbnRlcm5hbFNpemUoKS5oZWlnaHQoKTsKKyAgICBpbWFn
ZUJ1ZmZlci0+ZHJhd0NvbnN1bWluZyhjb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9u
cyk7CiB9CiAKLXNpemVfdCBJbWFnZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gMDsKLX0KLSNlbmRpZgotCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRl
eCA3Yjc3MmEyZjJkOGY2ZTc1NzdlYWZjNmRiMjI5MzA2YjdjZmVkZjliLi4zNTUxZjQ1ZjgyYmVi
YTM3ZjI5NzFhMDk1MDdkMmI1ZjJmNTJkNTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICog
Q29weXJpZ2h0IChDKSAyMDA3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI3LDE2MCArMjcsODMg
QEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNs
dWRlICJBbHBoYVByZW11bHRpcGxpY2F0aW9uLmgiCi0jaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzR0wuaCIK
LSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGEuaCIKLSNpbmNsdWRlICJJbWFnZVBhaW50aW5nT3B0
aW9ucy5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgi
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgiCiAjaW5jbHVkZSAiUmVuZGVyaW5nTW9k
ZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5j
bHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL0lz
b01hbGxvYy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRSZWN0OwotY2xhc3MgR3Jh
cGhpY3NDb250ZXh0OwotY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7Ci1jbGFzcyBJbWFn
ZTsKLWNsYXNzIEltYWdlRGF0YTsKLWNsYXNzIEludFBvaW50OwotY2xhc3MgSW50UmVjdDsKLWNs
YXNzIEhvc3RXaW5kb3c7Ci0KLWVudW0gQmFja2luZ1N0b3JlQ29weSB7Ci0gICAgQ29weUJhY2tp
bmdTdG9yZSwgLy8gR3VhcmFudGVlIHN1YnNlcXVlbnQgZHJhd3MgZG9uJ3QgYWZmZWN0IHRoZSBj
b3B5LgotICAgIERvbnRDb3B5QmFja2luZ1N0b3JlIC8vIFN1YnNlcXVlbnQgZHJhd3MgbWF5IGFm
ZmVjdCB0aGUgY29weS4KLX07Ci0KLWVudW0gY2xhc3MgUHJlc2VydmVSZXNvbHV0aW9uIHsKLSAg
ICBObywKLSAgICBZZXMsCi19OworbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKK2NsYXNzIERyYXdp
bmdDb250ZXh0OworfQogCiBjbGFzcyBJbWFnZUJ1ZmZlciB7Ci0gICAgV1RGX01BS0VfSVNPX0FM
TE9DQVRFRF9FWFBPUlQoSW1hZ2VCdWZmZXIsIFdFQkNPUkVfRVhQT1JUKTsKLSAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlcik7Ci0gICAgZnJpZW5kIGNsYXNzIElPU3VyZmFjZTsK
IHB1YmxpYzoKLSAgICAvLyBXaWxsIHJldHVybiBhIG51bGwgcG9pbnRlciBvbiBhbGxvY2F0aW9u
IGZhaWx1cmUuCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIFJlbmRlcmluZ01vZGUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSA9IDEsIENvbG9yU3BhY2UgPSBDb2xvclNwYWNlOjpTUkdCLCBjb25zdCBI
b3N0V2luZG93KiA9IG51bGxwdHIpOwotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxv
YXRTaXplJiwgUmVuZGVyaW5nTW9kZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlID0gMSwgQ29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OlNSR0IsIGNvbnN0IEhv
c3RXaW5kb3cqID0gbnVsbHB0cik7Ci0jZW5kaWYKLQotICAgIC8vIENyZWF0ZSBhbiBpbWFnZSBi
dWZmZXIgY29tcGF0aWJsZSB3aXRoIHRoZSBjb250ZXh0IGFuZCBjb3B5IHJlY3QgZnJvbSB0aGlz
IGJ1ZmZlciBpbnRvIHRoaXMgbmV3IG9uZS4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IGNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiwgQ29sb3JTcGFjZSwgY29uc3Qg
R3JhcGhpY3NDb250ZXh0Jik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogCiAg
ICAgLy8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZlciBjb21wYXRpYmxlIHdpdGggdGhlIGNvbnRleHQs
IHdpdGggc3VpdGFibGUgcmVzb2x1dGlvbiBmb3IgZHJhd2luZyBpbnRvIHRoZSBidWZmZXIgYW5k
IHRoZW4gaW50byB0aGlzIGNvbnRleHQuCiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmKTsKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIENvbG9yU3BhY2UsIGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYpOwogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKIAotICAg
IHN0YXRpYyBJbnRTaXplIGNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYpOworICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB3
aGVuIGNsYW1waW5nIHRoZSBJbWFnZUJ1ZmZlciB3aGljaCBpcyBjcmVhdGVkIGZvciBmaWx0ZXIs
IG1hc2tlciBvciBjbGlwcGVyLgorICAgIHN0YXRpYyBib29sIHNpemVOZWVkc0NsYW1waW5nKGNv
bnN0IEZsb2F0U2l6ZSYpOworICAgIHN0YXRpYyBib29sIHNpemVOZWVkc0NsYW1waW5nKGNvbnN0
IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYgc2NhbGUpOworICAgIHN0YXRpYyBGbG9hdFNpemUgY2xh
bXBlZFNpemUoY29uc3QgRmxvYXRTaXplJik7CisgICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFtcGVk
U2l6ZShjb25zdCBGbG9hdFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsKKyAgICBzdGF0aWMgRmxv
YXRSZWN0IGNsYW1wZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwogCi0gICAgV0VCQ09SRV9FWFBP
UlQgfkltYWdlQnVmZmVyKCk7CisgICAgc3RhdGljIEludFNpemUgY29tcGF0aWJsZUJ1ZmZlclNp
emUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisgICAgCisgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+SW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7CiAKLSAgICAv
LyBUaGUgYWN0dWFsIHJlc29sdXRpb24gb2YgdGhlIGJhY2tpbmcgc3RvcmUKLSAgICBjb25zdCBJ
bnRTaXplJiBpbnRlcm5hbFNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KLSAgICBjb25z
dCBJbnRTaXplJiBsb2dpY2FsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFNpemU7IH0K
LSAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdXRpb25T
Y2FsZTsgfQorICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBmbHVzaENvbnRleHQoKSA9IDA7CiAKLSAgICBXRUJDT1JFX0VY
UE9SVCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIERpc3Bs
YXlMaXN0OjpEcmF3aW5nQ29udGV4dCogZHJhd2luZ0NvbnRleHQoKSB7IHJldHVybiBudWxscHRy
OyB9CisgICAgdmlydHVhbCB2b2lkIGZsdXNoRHJhd2luZ0NvbnRleHQoKSB7IH0KIAotICAgIFdF
QkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBD
b3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246
Ok5vKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPEltYWdlPiBzaW5r
SW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIFByZXNlcnZlUmVzb2x1dGlv
biA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pOworICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3Jt
IGJhc2VUcmFuc2Zvcm0oKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJbnRTaXplIGxvZ2ljYWxT
aXplKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgSW50U2l6ZSBiYWNrZW5kU2l6ZSgpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0ID0gMDsKKyAg
ICAKKyAgICB2aXJ0dWFsIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0ID0gMDsKIAotICAgIGVudW0gQ29v
cmRpbmF0ZVN5c3RlbSB7IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtLCBCYWNraW5nU3RvcmVDb29y
ZGluYXRlU3lzdGVtIH07CisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1h
Z2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFj
a2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBj
b25zdCA9IDA7CiAKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldFVubXVsdGlwbGll
ZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMg
PSBudWxscHRyLCBDb29yZGluYXRlU3lzdGVtID0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pIGNv
bnN0OwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0UHJlbXVsdGlwbGllZEltYWdl
RGF0YShjb25zdCBJbnRSZWN0JiwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBudWxs
cHRyLCBDb29yZGluYXRlU3lzdGVtID0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Owor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY29weVJlY3RUb0J1ZmZlcihjb25zdCBG
bG9hdFJlY3QmLCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKIAotICAgIHZv
aWQgcHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBidWZmZXJGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IElu
dFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVT
eXN0ZW0gPSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSk7Ci0gICAgCi0gICAgdm9pZCBjb252ZXJ0
VG9MdW1pbmFuY2VNYXNrKCk7CisgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0g
RmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsg
fSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
ID0geyB9KSA9IDA7CiAKLSAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNv
bHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Q7Ci0gICAgVmVjdG9yPHVpbnQ4
X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxp
dHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0OwotICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRh
KCkgY29uc3Q7CisgICAgc3RhdGljIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2Uo
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKTsKKyAgICBzdGF0
aWMgdm9pZCBkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IH0pOwogCi0jaWYgVVNFKENBSVJPKQotICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2
ZUltYWdlKCkgY29uc3Q7Ci0jZW5kaWYKKyAgICB2aXJ0dWFsIHZvaWQgY29udmVydFRvTHVtaW5h
bmNlTWFzaygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xv
clNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSkgPSAwOwogCi0j
aWYgIVVTRShDRykKLSAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsg
cmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOyB9Ci0gICAgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNl
KENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkc3RDb2xvclNwYWNlKTsKLSAg
ICB2b2lkIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6OmFycmF5PHVpbnQ4
X3QsIDI1Nj4mKTsKLSNlbHNlCi0gICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBj
b25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oMSwgMCwgMCwgLTEsIDAsIG1fZGF0YS5iYWNr
aW5nU3RvcmVTaXplLmhlaWdodCgpKTsgfQotI2VuZGlmCi0gICAgUGxhdGZvcm1MYXllciogcGxh
dGZvcm1MYXllcigpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQs
IFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0KSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0ID0gMDsKIAotICAg
IHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Q7Ci0gICAgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29z
dCgpIGNvbnN0OworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50ID0geyB9KSA9IDA7CiAKICAgICAvLyBG
SVhNRTogY3VycmVudCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhpcyBtZXRob2QgaGF2ZSB0aGUgcmVz
dHJpY3Rpb24gdGhhdCB0aGV5IG9ubHkgd29yawogICAgIC8vIHdpdGggdGV4dHVyZXMgdGhhdCBh
cmUgUkdCIG9yIFJHQkEgZm9ybWF0LCBhbmQgVU5TSUdORURfQllURSB0eXBlLgotICAgIGJvb2wg
Y29weVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiwgR0NHTGVudW0s
IFBsYXRmb3JtR0xPYmplY3QsIEdDR0xlbnVtLCBib29sLCBib29sKTsKKyAgICB2aXJ0dWFsIGJv
b2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiwgR0NHTGVu
dW0sIFBsYXRmb3JtR0xPYmplY3QsIEdDR0xlbnVtLCBib29sLCBib29sKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgPSAwOwogCi0g
ICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHdoZW4gY2xhbXBpbmcgdGhlIEltYWdlQnVm
ZmVyIHdoaWNoIGlzIGNyZWF0ZWQgZm9yIGZpbHRlciwgbWFza2VyIG9yIGNsaXBwZXIuCi0gICAg
c3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJik7Ci0gICAgc3Rh
dGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBz
Y2FsZSk7Ci0gICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZShjb25zdCBGbG9hdFNpemUm
KTsKLSAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIEZs
b2F0U2l6ZSYgc2NhbGUpOwotICAgIHN0YXRpYyBGbG9hdFJlY3QgY2xhbXBlZFJlY3QoY29uc3Qg
RmxvYXRSZWN0Jik7Ci0KLXByaXZhdGU6Ci0jaWYgVVNFKENHKQotICAgIC8vIFRoZSByZXR1cm5l
ZCBpbWFnZSBtaWdodCBiZSBsYXJnZXIgdGhhbiB0aGUgaW50ZXJuYWxTaXplKCkuIElmIHlvdSB3
YW50IHRoZSBzbWFsbGVyCi0gICAgLy8gaW1hZ2UsIGNyb3AgdGhlIHJlc3VsdC4KLSAgICBSZXRh
aW5QdHI8Q0dJbWFnZVJlZj4gY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5
QmFja2luZ1N0b3JlKSBjb25zdDsKLSAgICBzdGF0aWMgUmV0YWluUHRyPENHSW1hZ2VSZWY+IHNp
bmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPik7Ci0gICAgdm9p
ZCBmbHVzaENvbnRleHQoKSBjb25zdDsKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSAgICBDT01QdHI8
SUQyRDFCaXRtYXA+IGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tp
bmdTdG9yZSkgY29uc3Q7Ci0gICAgc3RhdGljIENPTVB0cjxJRDJEMUJpdG1hcD4gc2lua0ludG9O
YXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKLSAgICB2b2lkIGZsdXNo
Q29udGV4dCgpIGNvbnN0OwotI2VuZGlmCitwcm90ZWN0ZWQ6CisgICAgSW1hZ2VCdWZmZXIoKSA9
IGRlZmF1bHQ7CiAgICAgCi0gICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgw
LCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwotICAgIHZv
aWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRl
cm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0KLSAgICBzdGF0aWMg
dm9pZCBkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pOwotCi0gICAgaW5saW5lIHZvaWQgZ2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1h
c2soKTsKLQotICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci0gICAgZnJpZW5kIGNs
YXNzIEdlbmVyYXRlZEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBDcm9zc2ZhZGVHZW5lcmF0ZWRJ
bWFnZTsKLSAgICBmcmllbmQgY2xhc3MgTmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlOwotICAgIGZy
aWVuZCBjbGFzcyBHcmFkaWVudEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBDdXN0b21QYWludElt
YWdlOwotICAgIGZyaWVuZCBjbGFzcyBCaXRtYXBJbWFnZTsKLQotcHJpdmF0ZToKLSAgICBJbWFn
ZUJ1ZmZlckRhdGEgbV9kYXRhOwotICAgIEludFNpemUgbV9zaXplOwotICAgIEludFNpemUgbV9s
b2dpY2FsU2l6ZTsKLSAgICBmbG9hdCBtX3Jlc29sdXRpb25TY2FsZTsKLQotICAgIC8vIFRoaXMg
Y29uc3RydWN0b3Igd2lsbCBwbGFjZSBpdHMgc3VjY2VzcyBpbnRvIHRoZSBnaXZlbiBvdXQtdmFy
aWFibGUKLSAgICAvLyBzbyB0aGF0IGNyZWF0ZSgpIGtub3dzIHdoZW4gaXQgc2hvdWxkIHJldHVy
biBmYWlsdXJlLgotICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6
ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSwgY29u
c3QgSG9zdFdpbmRvdyosIGJvb2wmIHN1Y2Nlc3MpOwotI2lmIFVTRShDRykKLSAgICBJbWFnZUJ1
ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENHQ29sb3JTcGFj
ZVJlZiwgUmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGJvb2wmIHN1Y2Nlc3MpOwot
ICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdDsKLSNl
bGlmIFVTRShESVJFQ1QyRCkKLSAgICBJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RX
aW5kb3cqLCBjb25zdCBHcmFwaGljc0NvbnRleHQqLCBib29sJiBzdWNjZXNzKTsKLSNlbmRpZgor
ICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZSgpID0gMDsKKyAg
ICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24g
PSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdDb25z
dW1pbmcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ2M2Fh
NWRhNjI2MjUzYjUxZDkyZmVkODFhYmNhYmQyNzQzZGVlODYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCkBA
IC0wLDAgKzEsMjc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmQu
aCIKKworI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworSW1hZ2VCdWZmZXJCYWNrZW5kOjpJbWFnZUJ1ZmZlckJhY2tlbmQo
Y29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQorICAgIDogbV9s
b2dpY2FsU2l6ZShsb2dpY2FsU2l6ZSkKKyAgICAsIG1fYmFja2VuZFNpemUoYmFja2VuZFNpemUp
CisgICAgLCBtX3Jlc29sdXRpb25TY2FsZShyZXNvbHV0aW9uU2NhbGUpCisgICAgLCBtX2NvbG9y
U3BhY2UoY29sb3JTcGFjZSkKK3sKK30KKworSW50U2l6ZSBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNh
bGN1bGF0ZUJhY2tlbmRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlKQoreworICAgIEZsb2F0U2l6ZSBzY2FsZWRTaXplID0geyBjZWlsZihyZXNvbHV0aW9u
U2NhbGUgKiBzaXplLndpZHRoKCkpLCBjZWlsZihyZXNvbHV0aW9uU2NhbGUgKiBzaXplLmhlaWdo
dCgpKSB9OworICAgIGlmIChzY2FsZWRTaXplLmlzRW1wdHkoKSB8fCAhc2NhbGVkU2l6ZS5pc0V4
cHJlc3NpYmxlQXNJbnRTaXplKCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBJbnRTaXpl
IGJhY2tlbmRTaXplID0gSW50U2l6ZShzY2FsZWRTaXplKTsKKworICAgIENoZWNrZWQ8dW5zaWdu
ZWQsIFJlY29yZE92ZXJmbG93PiBieXRlc1BlclJvdyA9IDQgKiBDaGVja2VkPHVuc2lnbmVkLCBS
ZWNvcmRPdmVyZmxvdz4oYmFja2VuZFNpemUud2lkdGgoKSk7CisgICAgaWYgKGJ5dGVzUGVyUm93
Lmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIENoZWNrZWQ8c2l6
ZV90LCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRP
dmVyZmxvdz4oYmFja2VuZFNpemUuaGVpZ2h0KCkpICogYnl0ZXNQZXJSb3c7CisgICAgaWYgKG51
bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVy
biBiYWNrZW5kU2l6ZTsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJCYWNrZW5kOjpz
aW5rSW50b05hdGl2ZUltYWdlKCkKK3sKKyAgICByZXR1cm4gY29weU5hdGl2ZUltYWdlKERvbnRD
b3B5QmFja2luZ1N0b3JlKTsKK30KKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckJhY2tlbmQ6
OnNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKK3sK
KyAgICByZXR1cm4gY29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlLCBwcmVzZXJ2ZVJlc29s
dXRpb24pOworfQorCit2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6ZHJhd0NvbnN1bWluZyhHcmFw
aGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25z
KQoreworICAgIGRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsK
K30KKwordm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKQor
eworICAgIGF1dG8gaW1hZ2VEYXRhID0gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZCwgbG9naWNhbFJlY3QoKSk7CisgICAgaWYgKCFpbWFnZURhdGEp
CisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8qIHNyY1BpeGVsQXJyYXkgPSBpbWFnZURhdGEt
PmRhdGEoKTsKKyAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gc3JjUGl4ZWxBcnJheS0+
bGVuZ3RoKCk7CisgICAgZm9yICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9IDA7IHBpeGVsT2Zmc2V0
IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkgeworICAgICAgICB1aW50OF90
IGEgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMyk7CisgICAgICAgIGlmICgh
YSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB1aW50OF90IHIgPSBzcmNQaXhlbEFy
cmF5LT5pdGVtKHBpeGVsT2Zmc2V0KTsKKyAgICAgICAgdWludDhfdCBnID0gc3JjUGl4ZWxBcnJh
eS0+aXRlbShwaXhlbE9mZnNldCArIDEpOworICAgICAgICB1aW50OF90IGIgPSBzcmNQaXhlbEFy
cmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMik7CisKKyAgICAgICAgZG91YmxlIGx1bWEgPSAociAq
IDAuMjEyNSArIGcgKiAwLjcxNTQgKyBiICogMC4wNzIxKSAqICgoZG91YmxlKWEgLyAyNTUuMCk7
CisgICAgICAgIHNyY1BpeGVsQXJyYXktPnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOworICAg
IH0KKworICAgIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQsICppbWFnZURhdGEsIGxvZ2ljYWxSZWN0KCksIEludFBvaW50Ojp6ZXJvKCkpOworfQor
CitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhKHZvaWQqIGRh
dGEpIGNvbnN0Cit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdCg0ICogbV9sb2dpY2FsU2l6
ZS5hcmVhKCkudW5zYWZlR2V0KCkpOworICAgIHNpemVfdCBkZXN0Qnl0ZXNQZXJSb3cgPSBtX2xv
Z2ljYWxTaXplLndpZHRoKCkgKiA0OworICAgIHNpemVfdCBzcmNCeXRlc1BlclJvdyA9IGJ5dGVz
UGVyUm93KCk7CisKKyAgICB1aW50OF90KiBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4oZGF0YSk7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGJhY2tlbmRDb2xvckZvcm1hdCgpLCBzcmNCeXRl
c1BlclJvdywgc3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCBDb2xvckZvcm1hdDo6QkdSQSwgZGVzdEJ5dGVzUGVyUm93LCByZXN1bHQuZGF0
YSgpLCBtX2xvZ2ljYWxTaXplKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBp
bmxpbmUgdm9pZCBjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZChDb2xvckZvcm1hdCBz
cmNDb2xvckZvcm1hdCwgY29uc3QgdWludDhfdCogc3JjUGl4ZWwsIENvbG9yRm9ybWF0IGRlc3RD
b2xvckZvcm1hdCwgdWludDhfdCogZGVzdFBpeGVsKQoreworICAgIHVpbnQ4X3QgYWxwaGEgPSBz
cmNQaXhlbFszXTsKKyAgICBpZiAoIWFscGhhKSB7CisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDMyX3QqPihkZXN0UGl4ZWwpWzBdID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChzcmNDb2xvckZvcm1hdCA9PSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgcmVp
bnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RQaXhlbClbMF0gPSByZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQzMl90Kj4oc3JjUGl4ZWwpWzBdOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAgIGRlc3RQaXhl
bFswXSA9IHNyY1BpeGVsWzJdOworICAgIGRlc3RQaXhlbFsxXSA9IHNyY1BpeGVsWzFdOworICAg
IGRlc3RQaXhlbFsyXSA9IHNyY1BpeGVsWzBdOworICAgIGRlc3RQaXhlbFszXSA9IHNyY1BpeGVs
WzNdOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weVByZW11bHRpcGxpZWRUb1VucHJlbXVs
dGlwbGllZChDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgY29uc3QgdWludDhfdCogc3JjUGl4
ZWwsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdWludDhfdCogZGVzdFBpeGVsKQorewor
ICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNQaXhlbFszXTsKKyAgICBpZiAoIWFscGhhIHx8IGFscGhh
ID09IDI1NSkgeworICAgICAgICBjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZChzcmND
b2xvckZvcm1hdCwgc3JjUGl4ZWwsIGRlc3RDb2xvckZvcm1hdCwgZGVzdFBpeGVsKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChzcmNDb2xvckZvcm1hdCA9PSBkZXN0Q29sb3JG
b3JtYXQpIHsKKyAgICAgICAgZGVzdFBpeGVsWzBdID0gKHNyY1BpeGVsWzBdICogMjU1KSAvIGFs
cGhhOworICAgICAgICBkZXN0UGl4ZWxbMV0gPSAoc3JjUGl4ZWxbMV0gKiAyNTUpIC8gYWxwaGE7
CisgICAgICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQaXhlbFsyXSAqIDI1NSkgLyBhbHBoYTsKKyAg
ICAgICAgZGVzdFBpeGVsWzNdID0gYWxwaGE7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgZGVzdFBpeGVsWzBd
ID0gKHNyY1BpeGVsWzJdICogMjU1KSAvIGFscGhhOworICAgIGRlc3RQaXhlbFsxXSA9IChzcmNQ
aXhlbFsxXSAqIDI1NSkgLyBhbHBoYTsKKyAgICBkZXN0UGl4ZWxbMl0gPSAoc3JjUGl4ZWxbMF0g
KiAyNTUpIC8gYWxwaGE7CisgICAgZGVzdFBpeGVsWzNdID0gYWxwaGE7Cit9CisKK3N0YXRpYyBp
bmxpbmUgdm9pZCBjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKENvbG9yRm9ybWF0
IHNyY0NvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiBzcmNQaXhlbCwgQ29sb3JGb3JtYXQgZGVz
dENvbG9yRm9ybWF0LCB1aW50OF90KiBkZXN0UGl4ZWwpCit7CisgICAgdWludDhfdCBhbHBoYSA9
IHNyY1BpeGVsWzNdOworICAgIGlmICghYWxwaGEgfHwgYWxwaGEgPT0gMjU1KSB7CisgICAgICAg
IGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKHNyY0NvbG9yRm9ybWF0LCBzcmNQaXhl
bCwgZGVzdENvbG9yRm9ybWF0LCBkZXN0UGl4ZWwpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAgICBk
ZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAg
IGRlc3RQaXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICAg
ICAgZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVsWzJdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAg
ICAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICBkZXN0UGl4ZWxbMF0g
PSAoc3JjUGl4ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgZGVzdFBpeGVsWzFdID0g
KHNyY1BpeGVsWzFdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgIGRlc3RQaXhlbFsyXSA9IChz
cmNQaXhlbFswXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICBkZXN0UGl4ZWxbM10gPSBhbHBo
YTsKK30KKwordGVtcGxhdGU8dm9pZCAoKmNvcHlGdW5jdG9yKShDb2xvckZvcm1hdCwgY29uc3Qg
dWludDhfdCosIENvbG9yRm9ybWF0LCB1aW50OF90Kik+CitzdGF0aWMgaW5saW5lIHZvaWQgY29w
eUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZCgKKyAgICBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1h
dCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgQ29sb3JG
b3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3Qq
IGRlc3RSb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIHNpemVfdCBieXRlc1BlclJv
dyA9IHNpemUud2lkdGgoKSAqIDQ7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBzaXplLmhlaWdo
dCgpOyArK3kpIHsKKyAgICAgICAgZm9yIChzaXplX3QgeCA9IDA7IHggPCBieXRlc1BlclJvdzsg
eCArPSA0KQorICAgICAgICAgICAgY29weUZ1bmN0b3Ioc3JjQ29sb3JGb3JtYXQsICZzcmNSb3dz
W3hdLCBkZXN0Q29sb3JGb3JtYXQsICZkZXN0Um93c1t4XSk7CisgICAgICAgIHNyY1Jvd3MgKz0g
c3JjQnl0ZXNQZXJSb3c7CisgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKKyAg
ICB9Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMoCisgICAg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29s
b3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAorICAg
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0
Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3Ms
IGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0Cit7CisgICAgaWYgKHNyY0FscGhhRm9ybWF0ID09
IGRlc3RBbHBoYUZvcm1hdCkgeworICAgICAgICBBU1NFUlQoc3JjQWxwaGFGb3JtYXQgPT0gQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCAmJiBkZXN0QWxwaGFGb3JtYXQgPT0g
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgICAgIGNvcHlJbWFn
ZVBpeGVsc1VuYWNjZWxlcmF0ZWQ8Y29weVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQ+KHNy
Y0NvbG9yRm9ybWF0LCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywgZGVzdENvbG9yRm9ybWF0LCBk
ZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBzaXplKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkKSB7CisgICAgICAgIGNvcHlJbWFnZVBpeGVsc1VuYWNjZWxlcmF0ZWQ8Y29w
eVByZW11bHRpcGxpZWRUb1VucHJlbXVsdGlwbGllZD4oc3JjQ29sb3JGb3JtYXQsIHNyY0J5dGVz
UGVyUm93LCBzcmNSb3dzLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJv
d3MsIHNpemUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29weUltYWdlUGl4ZWxz
VW5hY2NlbGVyYXRlZDxjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkPihzcmNDb2xv
ckZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RDb2xvckZvcm1hdCwgZGVzdEJ5
dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7Cit9CisKK1JlZlB0cjxJbWFnZURhdGE+IEltYWdl
QnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0
Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCB2b2lkKiBkYXRhKSBjb25zdAoreworICAg
IEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHRvQmFja2VuZENvb3JkaW5hdGVzKHNyY1JlY3QpOwor
CisgICAgYXV0byBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShzcmNSZWN0U2NhbGVkLnNp
emUoKSk7CisgICAgaWYgKCFpbWFnZURhdGEgfHwgIWltYWdlRGF0YS0+ZGF0YSgpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIEludFJlY3Qgc3JjUmVjdENsaXBwZWQgPSAgaW50ZXJz
ZWN0aW9uKGJhY2tlbmRSZWN0KCksIHNyY1JlY3RTY2FsZWQpOworICAgIEludFJlY3QgZGVzdFJl
Y3QgPSB7IEludFBvaW50Ojp6ZXJvKCksIHNyY1JlY3RDbGlwcGVkLnNpemUoKSB9OworCisgICAg
aWYgKHNyY1JlY3RTY2FsZWQueCgpIDwgMCkKKyAgICAgICAgZGVzdFJlY3Quc2V0WCgtc3JjUmVj
dFNjYWxlZC54KCkpOworCisgICAgaWYgKHNyY1JlY3RTY2FsZWQueSgpIDwgMCkKKyAgICAgICAg
ZGVzdFJlY3Quc2V0WSgtc3JjUmVjdFNjYWxlZC55KCkpOworCisgICAgaWYgKGRlc3RSZWN0LnNp
emUoKSAhPSBzcmNSZWN0U2NhbGVkLnNpemUoKSkKKyAgICAgICAgaW1hZ2VEYXRhLT5kYXRhKCkt
Pnplcm9GaWxsKCk7CisKKyAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICogc3JjUmVj
dFNjYWxlZC53aWR0aCgpOworICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gaW1hZ2VEYXRhLT5kYXRh
KCktPmRhdGEoKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RSZWN0Lngo
KSAqIDQ7CisKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93KCk7Cisg
ICAgdWludDhfdCogc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsg
c3JjUmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQZXJSb3cgKyBzcmNSZWN0Q2xpcHBlZC54KCkg
KiA0OworCisgICAgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkLCBiYWNrZW5kQ29sb3JGb3JtYXQoKSwgc3JjQnl0ZXNQZXJSb3cs
IHNyY1Jvd3MsCisgICAgICAgIG91dHB1dEZvcm1hdCwgQ29sb3JGb3JtYXQ6OlJHQkEsIGRlc3RC
eXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUoKSk7CisKKyAgICByZXR1cm4gaW1h
Z2VEYXRhOworfQorCit2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRh
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCB2b2lk
KiBkYXRhKQoreworICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHRvQmFja2VuZENvb3JkaW5h
dGVzKHNyY1JlY3QpOworICAgIEludFBvaW50IGRlc3RQb2ludFNjYWxlZCA9IHRvQmFja2VuZENv
b3JkaW5hdGVzKGRlc3RQb2ludCk7CisKKyAgICBJbnRSZWN0IHNyY1JlY3RDbGlwcGVkID0gaW50
ZXJzZWN0aW9uKHsgSW50UG9pbnQ6Onplcm8oKSwgaW1hZ2VEYXRhLnNpemUoKSB9LCBzcmNSZWN0
U2NhbGVkKTsKKyAgICBJbnRSZWN0IGRlc3RSZWN0ID0gc3JjUmVjdENsaXBwZWQ7CisgICAgZGVz
dFJlY3QubW92ZUJ5KGRlc3RQb2ludFNjYWxlZCk7CisKKyAgICBpZiAoc3JjUmVjdFNjYWxlZC54
KCkgPCAwKQorICAgICAgICBkZXN0UmVjdC5zZXRYKGRlc3RSZWN0LngoKSAtIHNyY1JlY3RTY2Fs
ZWQueCgpKTsKKworICAgIGlmIChzcmNSZWN0U2NhbGVkLnkoKSA8IDApCisgICAgICAgIGRlc3RS
ZWN0LnNldFkoZGVzdFJlY3QueSgpIC0gc3JjUmVjdFNjYWxlZC55KCkpOworCisgICAgZGVzdFJl
Y3QuaW50ZXJzZWN0KGJhY2tlbmRSZWN0KCkpOworICAgIHNyY1JlY3RDbGlwcGVkLnNldFNpemUo
ZGVzdFJlY3Quc2l6ZSgpKTsKKworICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IGJ5dGVz
UGVyUm93KCk7CisgICAgdWludDhfdCogZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihkYXRhKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RSZWN0Lngo
KSAqIDQ7CisKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBpbWFnZURhdGEuc2l6
ZSgpLndpZHRoKCk7CisgICAgdWludDhfdCogc3JjUm93cyA9IGltYWdlRGF0YS5kYXRhKCktPmRh
dGEoKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3JjUmVjdENsaXBw
ZWQueCgpICogNDsKKworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgaW5wdXRGb3JtYXQs
IENvbG9yRm9ybWF0OjpSR0JBLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKKyAgICAgICAgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgYmFja2VuZENvbG9yRm9ybWF0KCks
IGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUoKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWEzYjYzY2RmNzE3OGFiYjFi
NWEzODgyOWM1NWUxMjhlZGI3YTI0YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCkBAIC0wLDAgKzEsMTM1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIgorI2luY2x1ZGUgIkNv
bG9yU3BhY2UuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1R5
cGVzR0wuaCIKKyNpbmNsdWRlICJJbWFnZVBhaW50aW5nT3B0aW9ucy5oIgorI2luY2x1ZGUgIklu
dFJlY3QuaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTGF5
ZXIuaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOwor
Y2xhc3MgSG9zdFdpbmRvdzsKK2NsYXNzIEltYWdlOworY2xhc3MgSW1hZ2VEYXRhOworCitlbnVt
IEJhY2tpbmdTdG9yZUNvcHkgeworICAgIENvcHlCYWNraW5nU3RvcmUsIC8vIEd1YXJhbnRlZSBz
dWJzZXF1ZW50IGRyYXdzIGRvbid0IGFmZmVjdCB0aGUgY29weS4KKyAgICBEb250Q29weUJhY2tp
bmdTdG9yZSAvLyBTdWJzZXF1ZW50IGRyYXdzIG1heSBhZmZlY3QgdGhlIGNvcHkuCit9OworCitl
bnVtIGNsYXNzIFByZXNlcnZlUmVzb2x1dGlvbiA6IHVpbnQ4X3QgeworICAgIE5vLAorICAgIFll
cywKK307CisKK2VudW0gY2xhc3MgQ29sb3JGb3JtYXQgOiB1aW50OF90IHsKKyAgICBSR0JBLAor
ICAgIEJHUkEKK307CisKK2NsYXNzIEltYWdlQnVmZmVyQmFja2VuZCB7CitwdWJsaWM6CisgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+SW1hZ2VCdWZmZXJCYWNrZW5kKCkgPSBkZWZhdWx0Owor
CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEludFNpemUgY2FsY3VsYXRlQmFja2VuZFNpemUo
Y29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKTsKKworICAgIHZpcnR1YWwg
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBm
bHVzaENvbnRleHQoKSB7IH0KKworICAgIEludFNpemUgbG9naWNhbFNpemUoKSBjb25zdCB7IHJl
dHVybiBtX2xvZ2ljYWxTaXplOyB9CisgICAgSW50U2l6ZSBiYWNrZW5kU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fYmFja2VuZFNpemU7IH0KKyAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUoKSBjb25z
dCB7IHJldHVybiBtX3Jlc29sdXRpb25TY2FsZTsgfQorICAgIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JTcGFjZTsgfQorCisgICAgdmlydHVhbCBBZmZpbmVU
cmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgp
OyB9CisgICAgdmlydHVhbCBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IHsgcmV0dXJuIDQgKiBt
X2JhY2tlbmRTaXplLmFyZWEoKS51bnNhZmVHZXQoKTsgfQorICAgIHZpcnR1YWwgc2l6ZV90IGV4
dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKworICAgIHZpcnR1YWwgTmF0
aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHksIFBy
ZXNlcnZlUmVzb2x1dGlvbikgY29uc3QgPSAwOworCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0g
MDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJikgPSAwOworCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBOYXRpdmVJbWFn
ZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBS
ZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmIGRl
c3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7CisKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKKyAgICB2aXJ0dWFsIHZvaWQgdHJhbnNm
b3JtQ29sb3JTcGFjZShDb2xvclNwYWNlLCBDb2xvclNwYWNlKSB7IH0KKworICAgIHZpcnR1YWwg
U3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVj
dG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHkpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0JH
UkFEYXRhKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJl
Y3QmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KSA9IDA7CisKKyAgICB2aXJ0dWFs
IFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9
CisgICAgdmlydHVhbCBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRH
TE9wZW5HTCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwgYm9v
bCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworcHJvdGVjdGVkOgorICAgIFdFQkNPUkVfRVhQ
T1JUIEltYWdlQnVmZmVyQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25z
dCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNl
KTsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZXNQZXJSb3coKSBjb25zdCB7IHJldHVybiA0
ICogbV9iYWNrZW5kU2l6ZS53aWR0aCgpOyB9CisgICAgdmlydHVhbCBDb2xvckZvcm1hdCBiYWNr
ZW5kQ29sb3JGb3JtYXQoKSBjb25zdCB7IHJldHVybiBDb2xvckZvcm1hdDo6UkdCQTsgfQorCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUIHRvQmFja2VuZENvb3JkaW5hdGVzKFQgdCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPFQsIEludFBv
aW50Pjo6dmFsdWUgfHwgc3RkOjppc19zYW1lPFQsIEludFNpemU+Ojp2YWx1ZSB8fCBzdGQ6Omlz
X3NhbWU8VCwgSW50UmVjdD46OnZhbHVlKTsKKyAgICAgICAgaWYgKG1fcmVzb2x1dGlvblNjYWxl
ICE9IDEpCisgICAgICAgICAgICB0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKyAgICAgICAg
cmV0dXJuIHQ7CisgICAgfQorCisgICAgSW50UmVjdCBsb2dpY2FsUmVjdCgpIGNvbnN0IHsgcmV0
dXJuIEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgbV9sb2dpY2FsU2l6ZSk7IH07CisgICAgSW50
UmVjdCBiYWNrZW5kUmVjdCgpIGNvbnN0IHsgcmV0dXJuIEludFJlY3QoSW50UG9pbnQ6Onplcm8o
KSwgbV9iYWNrZW5kU2l6ZSk7IH07CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQg
Y29weUltYWdlUGl4ZWxzKAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhh
Rm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJS
b3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVz
dEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RC
eXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmKSBjb25zdDsKKwor
ICAgIFdFQkNPUkVfRVhQT1JUIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKHZvaWQqIGRhdGEp
IGNvbnN0OworCisgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBz
cmNSZWN0LCB2b2lkKiBkYXRhKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHB1dElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURh
dGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCB2
b2lkKiBkYXRhKTsKKworICAgIEludFNpemUgbV9sb2dpY2FsU2l6ZTsKKyAgICBJbnRTaXplIG1f
YmFja2VuZFNpemU7CisgICAgZmxvYXQgbV9yZXNvbHV0aW9uU2NhbGU7CisgICAgQ29sb3JTcGFj
ZSBtX2NvbG9yU3BhY2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDJhNWM4ODVlNWMxMDI0NDdjNzNhMTJmMWQ2ZmIzMmI1
ZDM5OTAzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCisrKyAvZGV2
L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKENHKQotI2luY2x1ZGUg
IkltYWdlQnVmZmVyRGF0YUNHLmgiCi0jZWxpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiSW1h
Z2VCdWZmZXJEYXRhRGlyZWN0MkQuaCIKLSNlbGlmIFVTRShDQUlSTykKLSNpbmNsdWRlICJJbWFn
ZUJ1ZmZlckRhdGFDYWlyby5oIgotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjQzYTg3
MTljZTQ5ZDE3NzZiOTc1M2Q1ZDcyNjA4NzdmMDUxNDM2MAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaApAQCAt
MCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29udGV4dHVhbEltYWdlQnVmZmVyLmgiCisj
aW5jbHVkZSAiRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIgorCisjaWYgVVNFKENHKQorI2luY2x1
ZGUgIkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgiCisjZWxpZiBVU0UoRElSRUNUMkQpCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaCIKKyNlbGlmIFVTRShDQUlSTykK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oIgorI2VuZGlm
CisKKyNpZiBIQVZFKElPU1VSRkFDRSkKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQuaCIKKyNlbGlmIFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZB
UykKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5oIgorI2VuZGlm
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIFVTRShDRykKK3VzaW5nIFBsYXRmb3JtVW5h
Y2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5k
OworI2VsaWYgVVNFKERJUkVDVDJEKQordXNpbmcgUGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VC
dWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ7CisjZWxpZiBVU0UoQ0FJ
Uk8pCit1c2luZyBQbGF0Zm9ybVVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFn
ZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDsKKyNlbmRpZgorCisjaWYgSEFWRShJT1NV
UkZBQ0UpCit1c2luZyBQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOworI2VsaWYgVVNFKENBSVJPKSAmJiBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKQordXNpbmcgUGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVy
QmFja2VuZCA9IEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOworI2Vsc2UKK3VzaW5n
IFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBQbGF0Zm9ybVVuYWNjZWxl
cmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQ7CisjZW5kaWYKKwordXNpbmcgUGxhdGZvcm1JbWFnZUJ1
ZmZlciA9IENvbnRleHR1YWxJbWFnZUJ1ZmZlcjxQbGF0Zm9ybVVuYWNjZWxlcmF0ZWRJbWFnZUJ1
ZmZlckJhY2tlbmQ+OwordXNpbmcgUGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyID0gQ29u
dGV4dHVhbEltYWdlQnVmZmVyPFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQ+
OwordXNpbmcgUGxhdGZvcm1EaXNwbGF5TGlzdEltYWdlQnVmZmVyID0gRGlzcGxheUxpc3RJbWFn
ZUJ1ZmZlcjxQbGF0Zm9ybVVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQ+OwordXNpbmcg
UGxhdGZvcm1BY2NlbGVyYXRlZERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgPSBEaXNwbGF5TGlzdElt
YWdlQnVmZmVyPFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQ+OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAzY2I2YjI0MWFhNWQxMDVm
M2NhYzhlZGMyMzlkMGY1MWZiYTkzM2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtMCwwICsxLDEwNCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZC5oIgorCisjaW5jbHVkZSAi
Q2hyb21lLmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2VCdWZm
ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5n
QmFja2VuZD4gUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gc3RkOjp1
bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+KG5ldyBSZW5kZXJpbmdCYWNrZW5kKCkpOworfQor
CitSZW5kZXJpbmdCYWNrZW5kJiBSZW5kZXJpbmdCYWNrZW5kOjpzaGFyZWRSZW5kZXJpbmdCYWNr
ZW5kKGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPj4gc2hhcmVkUmVuZGVyaW5n
QmFja2VuZCB7IFJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgpIH07CisgICAgcmV0dXJuIGhvc3RX
aW5kb3cgJiYgaG9zdFdpbmRvdy0+c2hhcmVkUmVuZGVyaW5nQmFja2VuZCgpID8gKmhvc3RXaW5k
b3ctPnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoKSA6ICpzaGFyZWRSZW5kZXJpbmdCYWNrZW5kLmdl
dCgpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IFJlbmRlcmluZ0JhY2tlbmQ6
OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSBy
ZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyOworCisgICAgc3dpdGNoIChyZW5kZXJpbmdNb2RlKSB7
CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDoKKyAgICBjYXNlIFJlbmRlcmlu
Z01vZGU6OlJlbW90ZUFjY2VsZXJhdGVkOgorICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3Jt
QWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29s
b3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIGNhc2UgUmVu
ZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDoKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90
ZToKKyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIGltYWdlQnVmZmVyID0g
UGxhdGZvcm1JbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JT
cGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBSZW5kZXJpbmdN
b2RlOjpEaXNwbGF5TGlzdEFjY2VsZXJhdGVkOgorICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRm
b3JtQWNjZWxlcmF0ZWREaXNwbGF5TGlzdEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVzb2x1
dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgRkFMTFRIUk9VR0g7
CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdDoKKyAgICAgICAgaWYgKCFpbWFn
ZUJ1ZmZlcikKKyAgICAgICAgICAgIGltYWdlQnVmZmVyID0gUGxhdGZvcm1EaXNwbGF5TGlzdElt
YWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0
V2luZG93KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGltYWdlQnVmZmVy
OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IFJlbmRlcmluZ0JhY2tlbmQ6OmNy
ZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VC
dWZmZXI7CisKKyAgICBzd2l0Y2ggKGNvbnRleHQucmVuZGVyaW5nTW9kZSgpKSB7CisgICAgY2Fz
ZSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDoKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJl
bW90ZUFjY2VsZXJhdGVkOgorICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtQWNjZWxlcmF0
ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIGNvbnRleHQpOworICAgICAgICBGQUxMVEhST1VH
SDsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ6CisgICAgY2FzZSBSZW5k
ZXJpbmdNb2RlOjpSZW1vdGU6CisgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgICAg
ICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBjb250ZXh0
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0
QWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gUGxhdGZvcm1BY2NlbGVyYXRlZERp
c3BsYXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBjb250ZXh0KTsKKyAgICAgICAgRkFM
TFRIUk9VR0g7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdDoKKyAgICAgICAg
aWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIGltYWdlQnVmZmVyID0gUGxhdGZvcm1EaXNw
bGF5TGlzdEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgY29udGV4dCk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1JlbmRlcmluZ0JhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Jl
bmRlcmluZ0JhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYWM3MzA2ODU3NWQyMDFlMWMwMWY3YzAwYTM4
MGNmNjFhZTUyODM5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIkNvbG9yU3BhY2UuaCIKKyNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJSZW5k
ZXJpbmdNb2RlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250
ZXh0OworY2xhc3MgSG9zdFdpbmRvdzsKK2NsYXNzIEltYWdlQnVmZmVyOworY2xhc3MgSW50U2l6
ZTsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgUmVuZGVyaW5nQmFja2VuZCB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBjcmVhdGUoKTsKKwor
ICAgIHN0YXRpYyBSZW5kZXJpbmdCYWNrZW5kJiBzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKGNvbnN0
IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7CisKKyAgICB2aXJ0dWFsIH5SZW5kZXJpbmdCYWNrZW5k
KCkgPSBkZWZhdWx0OworICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBj
cmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICB2aXJ0
dWFsIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3Qg
RmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisKK3Byb3RlY3RlZDoKKyAgICBS
ZW5kZXJpbmdCYWNrZW5kKCkgPSBkZWZhdWx0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5n
TW9kZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5o
CmluZGV4IDY5ZDhhZTgxYzg0OGIxMGU2ZjJkMDdhNzg5YjE2YzMzM2RjMjNjYjQuLmFhNDgzNWRi
ZmFhYWE5NzQyZjM0YWNjMzhmOGExZTBlMjcwYzI0ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ01vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgKQEAgLTMwLDYgKzMwLDEwIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIGVudW0gY2xhc3MgUmVuZGVyaW5nTW9kZSA6IHVpbnQ4X3Qgewog
ICAgIEFjY2VsZXJhdGVkLAogICAgIFVuYWNjZWxlcmF0ZWQsCisgICAgRGlzcGxheUxpc3RBY2Nl
bGVyYXRlZCwKKyAgICBEaXNwbGF5TGlzdCwKKyAgICBSZW1vdGVBY2NlbGVyYXRlZCwKKyAgICBS
ZW1vdGUKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKaW5kZXggNjgxYWI1NmVlYjM0MTk0NjJi
MjM0NDUwZDAwZjQxZjkzMzY3NGQxOC4uM2NmY2U3Mjk1NDIwOWQzMDNhOWY3MjQzMmZiYjRiNjM5
ZDRiNDIxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hh
ZG93Qmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93
Qmx1ci5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1
ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KQEAgLTQ0OSw3ICs0NTAs
NyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdTaGFkb3dCdWZmZXIoR3JhcGhpY3NDb250ZXh0JiBn
cmFwaGljc0NvbnRleHQsIEltYWdlQnVmZmVyJgogewogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOwogCi0gICAgSW50U2l6ZSBidWZmZXJT
aXplID0gbGF5ZXJJbWFnZS5pbnRlcm5hbFNpemUoKTsKKyAgICBJbnRTaXplIGJ1ZmZlclNpemUg
PSBsYXllckltYWdlLmJhY2tlbmRTaXplKCk7CiAgICAgaWYgKGJ1ZmZlclNpemUgIT0gbGF5ZXJT
aXplKSB7CiAgICAgICAgIC8vIFRoZSByZWN0IHBhc3NlZCB0byBjbGlwVG9JbWFnZUJ1ZmZlcigp
IGhhcyB0byBiZSB0aGUgc2l6ZSBvZiB0aGUgZW50aXJlIGJ1ZmZlciwKICAgICAgICAgLy8gYnV0
IHdlIG1heSBub3QgaGF2ZSBjbGVhcmVkIGl0IGFsbCwgc28gY2xpcCB0byB0aGUgZmlsbGVkIHBh
cnQgZmlyc3QuCkBAIC04ODQsMTIgKzg4NSwxMyBAQCB2b2lkIFNoYWRvd0JsdXI6OmJsdXJTaGFk
b3dCdWZmZXIoSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0IEludFNpemUmIHRlbXBsYQog
ICAgICAgICByZXR1cm47CiAKICAgICBJbnRSZWN0IGJsdXJSZWN0KEludFBvaW50KCksIHRlbXBs
YXRlU2l6ZSk7Ci0gICAgYXV0byBsYXllckRhdGEgPSBsYXllckltYWdlLmdldFVubXVsdGlwbGll
ZEltYWdlRGF0YShibHVyUmVjdCk7CisgICAgYXV0byBsYXllckRhdGEgPSBsYXllckltYWdlLmdl
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGJsdXJS
ZWN0KTsKICAgICBpZiAoIWxheWVyRGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYmx1ckxh
eWVySW1hZ2UobGF5ZXJEYXRhLT5kYXRhKCksIGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3Qud2lk
dGgoKSAqIDQpOwotICAgIGxheWVySW1hZ2UucHV0Qnl0ZUFycmF5KCpsYXllckRhdGEsIEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgYmx1clJlY3Quc2l6ZSgpLCBibHVy
UmVjdCwgeyB9KTsKKyAgICBhdXRvKiBibHVyUGl4ZWxBcnJheSA9IGxheWVyRGF0YS0+ZGF0YSgp
OworICAgIGJsdXJMYXllckltYWdlKGJsdXJQaXhlbEFycmF5LT5kYXRhKCksIGJsdXJSZWN0LnNp
emUoKSwgYmx1clJlY3Qud2lkdGgoKSAqIDQpOworICAgIGxheWVySW1hZ2UucHV0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKmxheWVyRGF0YSwgYmx1
clJlY3QpOwogfQogCiB2b2lkIFNoYWRvd0JsdXI6OmJsdXJBbmRDb2xvclNoYWRvd0J1ZmZlcihJ
bWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgSW50U2l6ZSYgdGVtcGxhdGVTaXplKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVy
YXRpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJv
T3BlcmF0aW9ucy5jcHAKaW5kZXggNjg5ODRkNTY0YTkyOTI3ZDQyOGZjZWJiODBlMTRhYWNmOWFm
YTRlZi4uY2Q4ZjFkYjM1OWUyNmEwMWEyYzg1YmJkMjJlYTM2OGU2YWM4ODk0YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25z
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09w
ZXJhdGlvbnMuY3BwCkBAIC0xNzUsNyArMTc1LDcgQEAgZW51bSBQYXRoRHJhd2luZ1N0eWxlIHsK
IAogc3RhdGljIHZvaWQgZHJhd1NoYWRvd0xheWVyQnVmZmVyKFBsYXRmb3JtQ29udGV4dENhaXJv
JiBwbGF0Zm9ybUNvbnRleHQsIEltYWdlQnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBGbG9hdFBv
aW50JiBsYXllck9yaWdpbiwgY29uc3QgRmxvYXRTaXplJiBsYXllclNpemUsIGNvbnN0IFNoYWRv
d1N0YXRlJiBzaGFkb3dTdGF0ZSkKIHsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gbGF5ZXJJbWFn
ZS5uYXRpdmVJbWFnZSgpKSB7CisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGxheWVySW1hZ2UuY29w
eU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkgewogICAgICAgICBkcmF3TmF0aXZl
SW1hZ2UocGxhdGZvcm1Db250ZXh0LCBzdXJmYWNlLmdldCgpLCBGbG9hdFJlY3Qocm91bmRlZElu
dFBvaW50KGxheWVyT3JpZ2luKSwgbGF5ZXJTaXplKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwg
bGF5ZXJTaXplKSwgeyBzaGFkb3dTdGF0ZS5nbG9iYWxDb21wb3NpdGVPcGVyYXRvciB9LCBzaGFk
b3dTdGF0ZS5nbG9iYWxBbHBoYSwgU2hhZG93U3RhdGUoKSk7CiAgICAgfQogfQpAQCAtMTgzLDcg
KzE4Myw3IEBAIHN0YXRpYyB2b2lkIGRyYXdTaGFkb3dMYXllckJ1ZmZlcihQbGF0Zm9ybUNvbnRl
eHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBJbWFnZUJ1CiAvLyBGSVhNRTogVGhpcyBpcyBtb3N0
bHkgc2FtZSBhcyBkcmF3U2hhZG93TGF5ZXJCdWZmZXIsIHNvIHdlIHNob3VsZCBtZXJnZSB0d28u
CiBzdGF0aWMgdm9pZCBkcmF3U2hhZG93SW1hZ2UoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRm
b3JtQ29udGV4dCwgSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRv
d1N0YXRlKQogewotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdlLm5hdGl2ZUltYWdl
KCkpIHsKKyAgICBpZiAoYXV0byBzdXJmYWNlID0gbGF5ZXJJbWFnZS5jb3B5TmF0aXZlSW1hZ2Uo
RG9udENvcHlCYWNraW5nU3RvcmUpKSB7CiAgICAgICAgIGRyYXdOYXRpdmVJbWFnZShwbGF0Zm9y
bUNvbnRleHQsIHN1cmZhY2UuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7IHNoYWRvd1N0YXRl
Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdG9yIH0sIHNoYWRvd1N0YXRlLmdsb2JhbEFscGhhLCBTaGFk
b3dTdGF0ZSgpKTsKICAgICB9CiB9CkBAIC0xOTIsNyArMTkyLDcgQEAgc3RhdGljIHZvaWQgZmls
bFNoYWRvd0J1ZmZlcihQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBJbWFn
ZUJ1ZmZlciYKIHsKICAgICBzYXZlKHBsYXRmb3JtQ29udGV4dCk7CiAKLSAgICBpZiAoYXV0byBz
dXJmYWNlID0gbGF5ZXJJbWFnZS5uYXRpdmVJbWFnZSgpKQorICAgIGlmIChhdXRvIHN1cmZhY2Ug
PSBsYXllckltYWdlLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpCiAgICAg
ICAgIGNsaXBUb0ltYWdlQnVmZmVyKHBsYXRmb3JtQ29udGV4dCwgc3VyZmFjZS5nZXQoKSwgRmxv
YXRSZWN0KGxheWVyT3JpZ2luLCBleHBhbmRlZEludFNpemUobGF5ZXJTaXplKSkpOwogCiAgICAg
RmlsbFNvdXJjZSBmaWxsU291cmNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCmluZGV4
IDliMDI1ZTE0NzY3MzUyZTE0YWQ0OGY4NjdiMDQ1ODVlZTgwMzQxMzQuLjRlMWJmMmI0MzY3ZjM0
MzU5ZDg1NGViNzhjMjIwMmRmNTdiMjc0NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5j
cHAKQEAgLTI2OCw3ICsyNjgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VC
dWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZQogICAgIH0KIAog
ICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgaWYgKGF1dG8gc3VyZmFjZSA9
IGJ1ZmZlci5uYXRpdmVJbWFnZSgpKQorICAgIGlmIChhdXRvIHN1cmZhY2UgPSBidWZmZXIuY29w
eU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKICAgICAgICAgQ2Fpcm86OmNsaXBU
b0ltYWdlQnVmZmVyKCpwbGF0Zm9ybUNvbnRleHQoKSwgc3VyZmFjZS5nZXQoKSwgZGVzdFJlY3Qp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcAppbmRleCBiY2EyOWRm
YjY5NDk4NmU4Nzc0NjZiOGYwNzc4NmZiZDFiZjM5NDU2Li5jZDg2NWFhYTI2MDE5ZmZjNzVhZWVl
OTI2MjAyY2YxMTI1OTViYzgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5j
cHAKQEAgLTQxNCw3ICs0MTQsNyBAQCBJbnRSZWN0IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6
Y2xpcEJvdW5kcygpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwVG9JbWFn
ZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQog
ewotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBidWZmZXIubmF0aXZlSW1hZ2UoKSkKKyAgICBpZiAo
YXV0byBzdXJmYWNlID0gYnVmZmVyLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9y
ZSkpCiAgICAgICAgIENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcihtX3BsYXRmb3JtQ29udGV4dCwg
c3VyZmFjZS5nZXQoKSwgZGVzdFJlY3QpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmI1YzY0ODJiNmUxZDNmMjhhYzQ3OWVhN2M1ZDMx
YjFkMzM3OTAyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8u
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmln
aHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3Jn
PgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQu
b3JnPgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgi
Ci0KLSNpZiBVU0UoQ0FJUk8pCi0KLSNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1ZGUg
IkNhaXJvT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCi0jaW5jbHVk
ZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0Nh
aXJvLmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgotI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCi0jaW5jbHVkZSAiUGF0dGVybi5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4
dENhaXJvLmgiCi0jaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlu
bGluZXMuaD4KLSNpbmNsdWRlIDxjYWlyby5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaW5jbHVkZSAiR0xDb250
ZXh0LmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCi0KLSNpZiBVU0UoRUdMKQotI2lm
IFVTRShMSUJFUE9YWSkKLSNpbmNsdWRlICJFcG94eUVHTC5oIgotI2Vsc2UKLSNpbmNsdWRlIDxF
R0wvZWdsLmg+Ci0jZW5kaWYKLSNlbmRpZgotI2luY2x1ZGUgPGNhaXJvLWdsLmg+Ci0KLSNpZiBV
U0UoTElCRVBPWFkpCi0jaW5jbHVkZSA8ZXBveHkvZ2wuaD4KLSNlbGlmIFVTRShPUEVOR0xfRVMp
Ci0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0jZWxzZQotI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgi
Ci0jZW5kaWYKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyUHJveHkuaCIKLSNlbmRpZgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotSW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYgc2l6
ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQotICAgIDogbV9wbGF0Zm9ybUNvbnRleHQo
MCkKLSAgICAsIG1fc2l6ZShzaXplKQotICAgICwgbV9yZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01v
ZGUpCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCi0gICAgLCBtX2NvbXBvc2l0b3JUZXh0dXJlKDApCi0jZW5kaWYKLSAgICAs
IG1fdGV4dHVyZSgwKQotI2VuZGlmCi17Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZB
UykgJiYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIGlmIChtX3JlbmRlcmluZ01vZGUg
PT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpIHsKLSNpZiBVU0UoTklDT1NJQSkKLSAgICAg
ICAgbV9uaWNvc2lhTGF5ZXIgPSBOaWNvc2lhOjpDb250ZW50TGF5ZXI6OmNyZWF0ZShOaWNvc2lh
OjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Y3JlYXRlRmFjdG9yeSgqdGhpcykpOwot
I2Vsc2UKLSAgICAgICAgbV9wbGF0Zm9ybUxheWVyUHJveHkgPSBhZG9wdFJlZihuZXcgVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSk7Ci0jZW5kaWYKLSAgICB9Ci0jZW5kaWYKLX0KLQot
SW1hZ2VCdWZmZXJEYXRhOjp+SW1hZ2VCdWZmZXJEYXRhKCkKLXsKLSAgICBpZiAobV9yZW5kZXJp
bmdNb2RlICE9IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKQotICAgICAgICByZXR1cm47Ci0K
LSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2lmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykgJiYgVVNFKE5JQ09TSUEpCi0gICAgZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExh
eWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLmludmFsaWRhdGVD
bGllbnQoKTsKLSNlbmRpZgotCi0gICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQg
PSBHTENvbnRleHQ6OmN1cnJlbnQoKTsKLSAgICBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3Bs
YXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKS0+bWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0KLSAgICBpZiAobV90ZXh0dXJlKQotICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZt
X3RleHR1cmUpOwotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIGlmIChtX2Nv
bXBvc2l0b3JUZXh0dXJlKQotICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX2NvbXBvc2l0
b3JUZXh0dXJlKTsKLSNlbmRpZgotCi0gICAgaWYgKHByZXZpb3VzQWN0aXZlQ29udGV4dCkKLSAg
ICAgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNlbmRp
ZgotfQotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6Y3JlYXRlQ29tcG9zaXRvckJ1
ZmZlcigpCi17Ci0gICAgYXV0byogY29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlz
cGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpOwotICAgIGNvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgZ2xHZW5UZXh0dXJlcygxLCAmbV9jb21wb3NpdG9y
VGV4dHVyZSk7Ci0gICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbXBvc2l0b3JU
ZXh0dXJlKTsKLSAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9X
UkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJF
XzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJh
bWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsK
LSAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVS
LCBHTF9MSU5FQVIpOwotICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX0FMSUdOTUVOVCwgMSk7
Ci0gICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLCBHTF9SR0JBLCBtX3NpemUud2lk
dGgoKSwgbV9zaXplLmhlaWdodCgpLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsK
LQotICAgIG1fY29tcG9zaXRvclN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19nbF9zdXJmYWNlX2Ny
ZWF0ZV9mb3JfdGV4dHVyZShjb250ZXh0LT5jYWlyb0RldmljZSgpLCBDQUlST19DT05URU5UX0NP
TE9SX0FMUEhBLCBtX2NvbXBvc2l0b3JUZXh0dXJlLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhl
aWdodCgpKSk7Ci0gICAgbV9jb21wb3NpdG9yQ3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9j
b21wb3NpdG9yU3VyZmFjZS5nZXQoKSkpOwotICAgIGNhaXJvX3NldF9hbnRpYWxpYXMobV9jb21w
b3NpdG9yQ3IuZ2V0KCksIENBSVJPX0FOVElBTElBU19OT05FKTsKLX0KLQotI2lmICFVU0UoTklD
T1NJQSkKLVJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBJbWFnZUJ1ZmZl
ckRhdGE6OnByb3h5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wbGF0Zm9ybUxheWVyUHJveHku
Y29weVJlZigpOwotfQotI2VuZGlmCi0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpzd2FwQnVmZmVy
c0lmTmVlZGVkKCkKLXsKLSAgICBHTENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdM
Q29udGV4dDo6Y3VycmVudCgpOwotCi0gICAgaWYgKCFtX2NvbXBvc2l0b3JUZXh0dXJlKSB7Ci0g
ICAgICAgIGNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKTsKLQotICAgICAgICBhdXRvIHByb3h5T3Bl
cmF0aW9uID0KLSAgICAgICAgICAgIFt0aGlzXShUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclBy
b3h5JiBwcm94eSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGhv
bGRlcihwcm94eS5sb2NrKCkpOwotICAgICAgICAgICAgICAgIHByb3h5LnB1c2hOZXh0QnVmZmVy
KG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+KG1fY29tcG9zaXRv
clRleHR1cmUsIG1fc2l6ZSwgVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCwgR0xfUkdCQSkp
OwotICAgICAgICAgICAgfTsKLSNpZiBVU0UoTklDT1NJQSkKLSAgICAgICAgcHJveHlPcGVyYXRp
b24oZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmlj
b3NpYUxheWVyLT5pbXBsKCkpLnByb3h5KCkpOwotI2Vsc2UKLSAgICAgICAgcHJveHlPcGVyYXRp
b24oKm1fcGxhdGZvcm1MYXllclByb3h5KTsKLSNlbmRpZgotICAgIH0KLQotICAgIC8vIEl0IHdv
dWxkIGJlIGdyZWF0IGlmIHdlIGNvdWxkIGp1c3Qgc3dhcCB0aGUgYnVmZmVycyBoZXJlIGFzIHdl
IGRvIHdpdGggd2ViZ2wsIGJ1dCB0aGF0IGJyZWFrcyB0aGUgY2FzZXMKLSAgICAvLyB3aGVyZSBv
bmUgZnJhbWUgdXNlcyB0aGUgY29udGVudCBhbHJlYWR5IHJlbmRlcmVkIGluIHRoZSBwcmV2aW91
cyBmcmFtZS4gU28gd2UganVzdCBjb3B5IHRoZSBjb250ZW50Ci0gICAgLy8gaW50byB0aGUgY29t
cG9zaXRvciBidWZmZXIuCi0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKG1fY29tcG9zaXRv
ckNyLmdldCgpLCBtX3N1cmZhY2UuZ2V0KCksIDAsIDApOwotICAgIGNhaXJvX3NldF9vcGVyYXRv
cihtX2NvbXBvc2l0b3JDci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKLSAgICBjYWly
b19wYWludChtX2NvbXBvc2l0b3JDci5nZXQoKSk7Ci0KLSAgICBpZiAocHJldmlvdXNBY3RpdmVD
b250ZXh0KQotICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOwotfQotI2VuZGlmCi0KLXZvaWQgY2xlYXJTdXJmYWNlKGNhaXJvX3N1cmZhY2VfdCogc3Vy
ZmFjZSkKLXsKLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZSkgIT0gQ0FJUk9f
U1RBVFVTX1NVQ0NFU1MpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxjYWlyb190PiBj
ciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShzdXJmYWNlKSk7Ci0gICAgY2Fpcm9fc2V0X29wZXJh
dG9yKGNyLmdldCgpLCBDQUlST19PUEVSQVRPUl9DTEVBUik7Ci0gICAgY2Fpcm9fcGFpbnQoY3Iu
Z2V0KCkpOwotfQotCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6Y3JlYXRlQ2Fpcm9HTFN1cmZhY2Uo
KQotewotICAgIGF1dG8qIGNvbnRleHQgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlG
b3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKTsKLSAgICBjb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLQotICAgIC8vIFdlIG11c3QgZ2VuZXJhdGUgdGhlIHRleHR1cmUgb3Vy
c2VsdmVzLCBiZWNhdXNlIHRoZXJlIGlzIG5vIENhaXJvIEFQSSBmb3IgZXh0cmFjdGluZyBpdAot
ICAgIC8vIGZyb20gYSBwcmUtZXhpc3Rpbmcgc3VyZmFjZS4KLSAgICBnbEdlblRleHR1cmVzKDEs
ICZtX3RleHR1cmUpOwotICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJl
KTsKLSAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1Ms
IEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBH
TF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBn
bFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9M
SU5FQVIpOwotCi0gICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKLQot
ICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwIC8qIGxldmVsICovLCBHTF9SR0JBLCBt
X3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwIC8qIGJvcmRlciAqLywgR0xfUkdCQSwg
R0xfVU5TSUdORURfQllURSwgMCk7Ci0KLSAgICBjYWlyb19kZXZpY2VfdCogZGV2aWNlID0gY29u
dGV4dC0+Y2Fpcm9EZXZpY2UoKTsKLQotICAgIC8vIFRocmVhZC1hd2FyZW5lc3MgaXMgYSBodWdl
IHBlcmZvcm1hbmNlIGhpdCBvbiBub24tSW50ZWwgZHJpdmVycy4KLSAgICBjYWlyb19nbF9kZXZp
Y2Vfc2V0X3RocmVhZF9hd2FyZShkZXZpY2UsIEZBTFNFKTsKLQotICAgIG1fc3VyZmFjZSA9IGFk
b3B0UmVmKGNhaXJvX2dsX3N1cmZhY2VfY3JlYXRlX2Zvcl90ZXh0dXJlKGRldmljZSwgQ0FJUk9f
Q09OVEVOVF9DT0xPUl9BTFBIQSwgbV90ZXh0dXJlLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhl
aWdodCgpKSk7Ci0gICAgY2xlYXJTdXJmYWNlKG1fc3VyZmFjZS5nZXQoKSk7Ci19Ci0jZW5kaWYK
LQotc3RhdGljIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+Ci1jYWlyb1N1cmZhY2VDb3B5KGNhaXJv
X3N1cmZhY2VfdCogc3VyZmFjZSkKLXsKLSAgICBhdXRvIGNvcHkgPSBhZG9wdFJlZihjYWlyb19p
bWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRfQVJHQjMyLAotICAgICAgICBjYWlyb19p
bWFnZV9zdXJmYWNlX2dldF93aWR0aChzdXJmYWNlKSwKLSAgICAgICAgY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UpKSk7Ci0KLSAgICBhdXRvIGNyID0gYWRvcHRSZWYoY2Fp
cm9fY3JlYXRlKGNvcHkuZ2V0KCkpKTsKLSAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCks
IENBSVJPX09QRVJBVE9SX1NPVVJDRSk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNy
LmdldCgpLCBzdXJmYWNlLCAwLCAwKTsKLSAgICBjYWlyb19wYWludChjci5nZXQoKSk7Ci0KLSAg
ICByZXR1cm4gY29weTsKLX0KLQotc3RhdGljIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+Ci1jYWly
b1N1cmZhY2VDb2VyY2VUb0ltYWdlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKLXsKLSAgICBp
ZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShzdXJmYWNlKSA9PSBDQUlST19TVVJGQUNFX1RZUEVf
SU1BR0UKLSAgICAgICAgJiYgY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChzdXJmYWNlKSA9PSBD
QUlST19DT05URU5UX0NPTE9SX0FMUEhBKQotICAgICAgICByZXR1cm4gc3VyZmFjZTsKLQotICAg
IHJldHVybiBjYWlyb1N1cmZhY2VDb3B5KHN1cmZhY2UpOwotfQotCi1WZWN0b3I8dWludDhfdD4g
SW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEoKSBjb25zdAotewotICAgIGF1dG8gc3VyZmFjZSA9IGNh
aXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2UobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgY2Fp
cm9fc3VyZmFjZV9mbHVzaChzdXJmYWNlLmdldCgpKTsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBp
bWFnZURhdGE7Ci0gICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UuZ2V0KCkpKQot
ICAgICAgICByZXR1cm4gaW1hZ2VEYXRhOwotCi0gICAgYXV0byBwaXhlbHMgPSBjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UuZ2V0KCkpOwotICAgIGltYWdlRGF0YS5hcHBlbmQo
cGl4ZWxzLCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZS5nZXQoKSkgKgot
ICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZS5nZXQoKSkpOwot
Ci0gICAgcmV0dXJuIGltYWdlRGF0YTsKLX0KLQotTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXI6
Om5hdGl2ZUltYWdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kYXRhLm1fc3VyZmFjZS5nZXQo
KTsKLX0KLQotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBib29sJiBzdWNjZXNzKQotICAgIDogbV9kYXRhKElu
dFNpemUoc2l6ZSksIHJlbmRlcmluZ01vZGUpCi0gICAgLCBtX2xvZ2ljYWxTaXplKHNpemUpCi0g
ICAgLCBtX3Jlc29sdXRpb25TY2FsZShyZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgc3VjY2VzcyA9
IGZhbHNlOyAgLy8gTWFrZSBlYXJseSByZXR1cm4gbWVhbiBlcnJvci4KLQotICAgIGZsb2F0IHNj
YWxlZFdpZHRoID0gY2VpbGYobV9yZXNvbHV0aW9uU2NhbGUgKiBzaXplLndpZHRoKCkpOwotICAg
IGZsb2F0IHNjYWxlZEhlaWdodCA9IGNlaWxmKG1fcmVzb2x1dGlvblNjYWxlICogc2l6ZS5oZWln
aHQoKSk7Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGF1dG9tYXRpY2FsbHkgdXNlIGEgbG93
ZXIgcmVzb2x1dGlvbj8KLSAgICBpZiAoIUZsb2F0U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVp
Z2h0KS5pc0V4cHJlc3NpYmxlQXNJbnRTaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
c2l6ZSA9IEludFNpemUoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCk7Ci0gICAgbV9kYXRhLm1f
c2l6ZSA9IG1fc2l6ZTsKLQotICAgIGlmIChtX3NpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm47Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotICAgIGlmIChtX2RhdGEu
bV9yZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKSB7Ci0gICAgICAg
IG1fZGF0YS5jcmVhdGVDYWlyb0dMU3VyZmFjZSgpOwotICAgICAgICBpZiAoIW1fZGF0YS5tX3N1
cmZhY2UgfHwgY2Fpcm9fc3VyZmFjZV9zdGF0dXMobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkgIT0g
Q0FJUk9fU1RBVFVTX1NVQ0NFU1MpCi0gICAgICAgICAgICBtX2RhdGEubV9yZW5kZXJpbmdNb2Rl
ID0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgLy8gSWYgYWxsb2NhdGlvbiBmYWlscywg
ZmFsbCBiYWNrIHRvIG5vbi1hY2NlbGVyYXRlZCBwYXRoLgotICAgIH0KLSAgICBpZiAobV9kYXRh
Lm1fcmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKQotI2Vsc2UK
LSAgICBBU1NFUlQobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSAhPSBSZW5kZXJpbmdNb2RlOjpBY2Nl
bGVyYXRlZCk7Ci0jZW5kaWYKLSAgICB7Ci0gICAgICAgIHN0YXRpYyBjYWlyb191c2VyX2RhdGFf
a2V5X3Qgc19zdXJmYWNlRGF0YUtleTsKLQotICAgICAgICBpbnQgc3RyaWRlID0gY2Fpcm9fZm9y
bWF0X3N0cmlkZV9mb3Jfd2lkdGgoQ0FJUk9fRk9STUFUX0FSR0IzMiwgbV9zaXplLndpZHRoKCkp
OwotICAgICAgICB2b2lkKiBzdXJmYWNlRGF0YTsKLSAgICAgICAgaWYgKCF0cnlGYXN0WmVyb2Vk
TWFsbG9jKG1fc2l6ZS5oZWlnaHQoKSAqIHN0cmlkZSkuZ2V0VmFsdWUoc3VyZmFjZURhdGEpKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1fZGF0YS5tX3N1cmZhY2UgPSBhZG9wdFJl
ZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyKj4oc3VyZmFjZURhdGEpLCBDQUlST19GT1JNQVRfQVJHQjMyLCBtX3NpemUud2lkdGgo
KSwgbV9zaXplLmhlaWdodCgpLCBzdHJpZGUpKTsKLSAgICAgICAgY2Fpcm9fc3VyZmFjZV9zZXRf
dXNlcl9kYXRhKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCksICZzX3N1cmZhY2VEYXRhS2V5LCBzdXJm
YWNlRGF0YSwgW10odm9pZCogZGF0YSkgeyBmYXN0RnJlZShkYXRhKTsgfSk7Ci0gICAgfQotCi0g
ICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpICE9IENB
SVJPX1NUQVRVU19TVUNDRVNTKQotICAgICAgICByZXR1cm47ICAvLyBjcmVhdGUgd2lsbCBub3Rp
Y2Ugd2UgZGlkbid0IHNldCBtX2luaXRpYWxpemVkIGFuZCBmYWlsLgotCi0gICAgY2Fpcm9TdXJm
YWNlU2V0RGV2aWNlU2NhbGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgbV9yZXNvbHV0aW9uU2Nh
bGUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0
UmVmKGNhaXJvX2NyZWF0ZShtX2RhdGEubV9zdXJmYWNlLmdldCgpKSk7Ci0gICAgbV9kYXRhLm1f
cGxhdGZvcm1Db250ZXh0LnNldENyKGNyLmdldCgpKTsKLSAgICBtX2RhdGEubV9jb250ZXh0ID0g
bWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3Jl
YXRlRmFjdG9yeShtX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQpKTsKLSAgICBzdWNjZXNzID0gdHJ1
ZTsKLX0KLQotSW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKLQotc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZl
cihjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkK
LXsKLSAgICByZXR1cm4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzaXplLCBDb2xvclNwYWNlOjpT
UkdCLCBjb250ZXh0KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlcjo6Y29udGV4
dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICptX2RhdGEubV9jb250ZXh0OwotfQotCi1SZWZQdHI8
SW1hZ2U+IEltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gaW1hZ2VCdWZmZXIsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24p
Ci17Ci0gICAgcmV0dXJuIGltYWdlQnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3Rv
cmUsIHByZXNlcnZlUmVzb2x1dGlvbik7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6
OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0
aW9uKSBjb25zdAotewotICAgIC8vIGNvcHlDYWlyb0ltYWdlU3VyZmFjZSBpbmhlcml0cyBzdXJm
YWNlJ3MgZGV2aWNlIHNjYWxlIGZhY3Rvci4KLSAgICBpZiAoY29weUJlaGF2aW9yID09IENvcHlC
YWNraW5nU3RvcmUpCi0gICAgICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNvcHlDYWly
b0ltYWdlU3VyZmFjZShtX2RhdGEubV9zdXJmYWNlLmdldCgpKSk7Ci0KLSAgICAvLyBCaXRtYXBJ
bWFnZSB3aWxsIHJlbGVhc2UgdGhlIHBhc3NlZCBpbiBzdXJmYWNlIG9uIGRlc3RydWN0aW9uCi0g
ICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4obV9k
YXRhLm1fc3VyZmFjZSkpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIEdyYXBoaWNzQ29udGV4dCYg
ZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaW1h
Z2VCdWZmZXItPmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsK
LX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9u
Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCAgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaWYgKGRl
c3RpbmF0aW9uQ29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChhdXRvIHN1cmZhY2UgPSBuYXRpdmVJbWFnZSgpKSB7Ci0gICAgICAgIGlmICgmZGVz
dGluYXRpb25Db250ZXh0ID09ICZjb250ZXh0KCkpCi0gICAgICAgICAgICBzdXJmYWNlID0gY2Fp
cm9TdXJmYWNlQ29weShzdXJmYWNlLmdldCgpKTsKLQotICAgICAgICBJbnRlcnBvbGF0aW9uUXVh
bGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoZGVzdGluYXRp
b25Db250ZXh0LCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOwotICAgICAgICBjb25z
dCBhdXRvJiBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZSA9IGRlc3RpbmF0aW9uQ29udGV4dC5zdGF0
ZSgpOwotICAgICAgICBkcmF3TmF0aXZlSW1hZ2UoKmRlc3RpbmF0aW9uQ29udGV4dC5wbGF0Zm9y
bUNvbnRleHQoKSwgc3VyZmFjZS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9ucywg
ZGVzdGluYXRpb25Db250ZXh0U3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB9LCBkZXN0
aW5hdGlvbkNvbnRleHRTdGF0ZS5hbHBoYSwgV2ViQ29yZTo6Q2Fpcm86OlNoYWRvd1N0YXRlKGRl
c3RpbmF0aW9uQ29udGV4dFN0YXRlKSk7Ci0gICAgfQotfQotCi12b2lkIEltYWdlQnVmZmVyOjpk
cmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBw
YXR0ZXJuVHJhbnNmb3JtLAotICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAo
Y29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChh
dXRvIHN1cmZhY2UgPSBuYXRpdmVJbWFnZSgpKQotICAgICAgICBDYWlybzo6ZHJhd1BhdHRlcm4o
KmNvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIHN1cmZhY2UuZ2V0KCksIG1fc2l6ZSwgZGVzdFJl
Y3QsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKLX0KLQotdm9p
ZCBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IHN0ZDo6YXJy
YXk8dWludDhfdCwgMjU2PiYgbG9va1VwVGFibGUpCi17Ci0gICAgLy8gRklYTUU6IEVuYWJsZSBj
b2xvciBzcGFjZSBjb252ZXJzaW9ucyBvbiBhY2NlbGVyYXRlZCBjYW52YXNlcy4KLSAgICBpZiAo
Y2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShtX2RhdGEubV9zdXJmYWNlLmdldCgpKSAhPSBDQUlST19T
VVJGQUNFX1RZUEVfSU1BR0UpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIGNoYXIq
IGRhdGFTcmMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1fZGF0YS5tX3N1cmZhY2Uu
Z2V0KCkpOwotICAgIGludCBzdHJpZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUo
bV9kYXRhLm1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtX3NpemUu
aGVpZ2h0KCk7ICsreSkgewotICAgICAgICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRfY2Fz
dF9wdHI8dW5zaWduZWQqPihkYXRhU3JjICsgc3RyaWRlICogeSk7Ci0gICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgbV9zaXplLndpZHRoKCk7IHgrKykgewotICAgICAgICAgICAgdW5zaWduZWQq
IHBpeGVsID0gcm93ICsgeDsKLSAgICAgICAgICAgIENvbG9yIHBpeGVsQ29sb3IgPSBjb2xvckZy
b21QcmVtdWx0aXBsaWVkQVJHQigqcGl4ZWwpOwotICAgICAgICAgICAgcGl4ZWxDb2xvciA9IENv
bG9yKGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IucmVkKCldLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuZ3JlZW4oKV0sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ibHVlKCldLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsQ29sb3IuYWxwaGEoKSk7Ci0gICAgICAgICAg
ICAqcGl4ZWwgPSBwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcihwaXhlbENvbG9yKTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBjYWlyb19zdXJmYWNlX21hcmtfZGlydHlfcmVjdGFuZ2xlKG1fZGF0
YS5tX3N1cmZhY2UuZ2V0KCksIDAsIDAsIG1fbG9naWNhbFNpemUud2lkdGgoKSwgbV9sb2dpY2Fs
U2l6ZS5oZWlnaHQoKSk7Ci19Ci0KLVJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGNvcHlTdXJmYWNl
VG9JbWFnZUFuZEFkanVzdFJlY3QoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlLCBJbnRSZWN0JiBy
ZWN0KQotewotICAgIGNhaXJvX3N1cmZhY2VfdHlwZV90IHN1cmZhY2VUeXBlID0gY2Fpcm9fc3Vy
ZmFjZV9nZXRfdHlwZShzdXJmYWNlKTsKLQotICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSBhbiBp
bWFnZSwgd2Ugd3JpdGUgZGlyZWN0bHkgdG8gdGhlIHVuZGVybHlpbmcgZGF0YTsKLSAgICAvLyBv
dGhlcndpc2Ugd2UgY3JlYXRlIGEgdGVtcG9yYXJ5IHN1cmZhY2UgaW1hZ2UKLSAgICBpZiAoc3Vy
ZmFjZVR5cGUgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKQotICAgICAgICByZXR1cm4gc3Vy
ZmFjZTsKLSAgICAKLSAgICByZWN0LnNldFgoMCk7Ci0gICAgcmVjdC5zZXRZKDApOwotICAgIHJl
dHVybiBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRfQVJH
QjMyLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKLX0KLQotdGVtcGxhdGUgPEFscGhh
UHJlbXVsdGlwbGljYXRpb24gcHJlbXVsdGlwbGllZD4KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJh
eT4gZ2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFJlY3QmIGxvZ2lj
YWxSZWN0LCBjb25zdCBJbWFnZUJ1ZmZlckRhdGEmIGRhdGEsIGNvbnN0IEludFNpemUmIHNpemUs
IGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCi17Ci0g
ICAgLy8gVGhlIGFyZWEgY2FuIG92ZXJmbG93IGlmIHRoZSByZWN0IGlzIHRvbyBiaWcuCi0gICAg
Q2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGFyZWEgPSA0OwotICAgIGFyZWEgKj0g
cmVjdC53aWR0aCgpOwotICAgIGFyZWEgKj0gcmVjdC5oZWlnaHQoKTsKLSAgICBpZiAoYXJlYS5o
YXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byByZXN1
bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChhcmVhLnVuc2Fm
ZUdldCgpKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICAvLyBDYW4gb3ZlcmZsb3csIGFzIHdlIGFyZSBhZGRpbmcgMiBpbnRzLgotICAgIGludCBlbmR4
ID0gMDsKLSAgICBpZiAoIVdURjo6c2FmZUFkZChyZWN0LngoKSwgcmVjdC53aWR0aCgpLCBlbmR4
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBDYW4gb3ZlcmZsb3csIGFzIHdl
IGFyZSBhZGRpbmcgMiBpbnRzLgotICAgIGludCBlbmR5ID0gMDsKLSAgICBpZiAoIVdURjo6c2Fm
ZUFkZChyZWN0LnkoKSwgcmVjdC5oZWlnaHQoKSwgZW5keSkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgaWYgKHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwgZW5keCA+IHNp
emUud2lkdGgoKSB8fCBlbmR5ID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcmVzdWx0LT56ZXJv
RmlsbCgpOwotCi0gICAgaW50IG9yaWdpbnggPSByZWN0LngoKTsKLSAgICBpbnQgZGVzdHggPSAw
OwotICAgIGlmIChvcmlnaW54IDwgMCkgewotICAgICAgICBkZXN0eCA9IC1vcmlnaW54OwotICAg
ICAgICBvcmlnaW54ID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoZW5keCA+IHNpemUud2lkdGgoKSkK
LSAgICAgICAgZW5keCA9IHNpemUud2lkdGgoKTsKLSAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZHgg
LSBvcmlnaW54OwotCi0gICAgaW50IG9yaWdpbnkgPSByZWN0LnkoKTsKLSAgICBpbnQgZGVzdHkg
PSAwOwotICAgIGlmIChvcmlnaW55IDwgMCkgewotICAgICAgICBkZXN0eSA9IC1vcmlnaW55Owot
ICAgICAgICBvcmlnaW55ID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoZW5keSA+IHNpemUuaGVpZ2h0
KCkpCi0gICAgICAgIGVuZHkgPSBzaXplLmhlaWdodCgpOwotICAgIGludCBudW1Sb3dzID0gZW5k
eSAtIG9yaWdpbnk7Ci0KLSAgICAvLyBOb3RoaW5nIHdpbGwgYmUgY29waWVkLCBzbyBqdXN0IHJl
dHVybiB0aGUgcmVzdWx0LgotICAgIGlmIChudW1Db2x1bW5zIDw9IDAgfHwgbnVtUm93cyA8PSAw
KQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgLy8gVGhlIHNpemUgb2YgdGhlIGRlcml2
ZWQgc3VyZmFjZSBpcyBpbiBCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtLgotICAgIC8vIFdl
IG5lZWQgdG8gc2V0IHRoZSBkZXZpY2Ugc2NhbGUgZm9yIHRoZSBkZXJpdmVkIHN1cmZhY2UgZnJv
bSB0aGlzIEltYWdlQnVmZmVyLgotICAgIEludFJlY3QgaW1hZ2VSZWN0KG9yaWdpbngsIG9yaWdp
bnksIG51bUNvbHVtbnMsIG51bVJvd3MpOwotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGlt
YWdlU3VyZmFjZSA9IGNvcHlTdXJmYWNlVG9JbWFnZUFuZEFkanVzdFJlY3QoZGF0YS5tX3N1cmZh
Y2UuZ2V0KCksIGltYWdlUmVjdCk7Ci0gICAgY2Fpcm9TdXJmYWNlU2V0RGV2aWNlU2NhbGUoaW1h
Z2VTdXJmYWNlLmdldCgpLCByZXNvbHV0aW9uU2NhbGUsIHJlc29sdXRpb25TY2FsZSk7Ci0gICAg
b3JpZ2lueCA9IGltYWdlUmVjdC54KCk7Ci0gICAgb3JpZ2lueSA9IGltYWdlUmVjdC55KCk7Ci0g
ICAgaWYgKGltYWdlU3VyZmFjZSAhPSBkYXRhLm1fc3VyZmFjZS5nZXQoKSkgewotICAgICAgICAv
LyBUaGlzIGNhaXJvIHN1cmZhY2Ugb3BlcmF0aW9uIGlzIGRvbmUgaW4gTG9naWNhbENvb3JkaW5h
dGVTeXN0ZW0uCi0gICAgICAgIEludFJlY3QgbG9naWNhbEFyZWEgPSBpbnRlcnNlY3Rpb24obG9n
aWNhbFJlY3QsIEludFJlY3QoMCwgMCwgbG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUu
aGVpZ2h0KCkpKTsKLSAgICAgICAgY29weVJlY3RGcm9tT25lU3VyZmFjZVRvQW5vdGhlcihkYXRh
Lm1fc3VyZmFjZS5nZXQoKSwgaW1hZ2VTdXJmYWNlLmdldCgpLCBJbnRTaXplKC1sb2dpY2FsQXJl
YS54KCksIC1sb2dpY2FsQXJlYS55KCkpLCBJbnRSZWN0KEludFBvaW50KCksIGxvZ2ljYWxBcmVh
LnNpemUoKSksIEludFNpemUoKSk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgY2hhciogZGF0YVNy
YyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoaW1hZ2VTdXJmYWNlLmdldCgpKTsKLSAg
ICB1bnNpZ25lZCBjaGFyKiBkYXRhRHN0ID0gcmVzdWx0LT5kYXRhKCk7Ci0gICAgaW50IHN0cmlk
ZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShpbWFnZVN1cmZhY2UuZ2V0KCkpOwot
ICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiByZWN0LndpZHRoKCk7Ci0KLSAgICB1
bnNpZ25lZCBjaGFyKiBkZXN0Um93cyA9IGRhdGFEc3QgKyBkZXN0eSAqIGRlc3RCeXRlc1BlclJv
dyArIGRlc3R4ICogNDsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IG51bVJvd3M7ICsreSkgewot
ICAgICAgICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQqPihk
YXRhU3JjICsgc3RyaWRlICogKHkgKyBvcmlnaW55KSk7Ci0gICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgbnVtQ29sdW1uczsgeCsrKSB7Ci0gICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsK
LSAgICAgICAgICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJvdyArIHggKyBvcmlnaW54OwotCi0gICAg
ICAgICAgICAvLyBBdm9pZCBjYWxsaW5nIENvbG9yOjpjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJH
QigpIGJlY2F1c2Ugb25lCi0gICAgICAgICAgICAvLyBmdW5jdGlvbiBjYWxsIHBlciBwaXhlbCBp
cyB0b28gZXhwZW5zaXZlLgotICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEgPSAoKnBpeGVsICYg
MHhGRjAwMDAwMCkgPj4gMjQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCByZWQgPSAoKnBpeGVsICYg
MHgwMEZGMDAwMCkgPj4gMTY7Ci0gICAgICAgICAgICB1bnNpZ25lZCBncmVlbiA9ICgqcGl4ZWwg
JiAweDAwMDBGRjAwKSA+PiA4OwotICAgICAgICAgICAgdW5zaWduZWQgYmx1ZSA9ICgqcGl4ZWwg
JiAweDAwMDAwMEZGKTsKLQotICAgICAgICAgICAgaWYgKHByZW11bHRpcGxpZWQgPT0gQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGFscGhhICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAgICByZWQgPSByZWQg
KiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgZ3JlZW4gPSBncmVlbiAqIDI1NSAv
IGFscGhhOwotICAgICAgICAgICAgICAgICAgICBibHVlID0gYmx1ZSAqIDI1NSAvIGFscGhhOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXhdICAgICA9IHJlZDsKLSAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBncmVl
bjsKLSAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBibHVlOwotICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICB9Ci0gICAgICAgIGRlc3RSb3dz
ICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBVbml0PgotaW5saW5lIFVuaXQgbG9naWNhbFVuaXQoY29uc3QgVW5p
dCYgdmFsdWUsIEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW1P
ZlZhbHVlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0
ZW1PZlZhbHVlID09IEltYWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSB8fCByZXNv
bHV0aW9uU2NhbGUgPT0gMS4wKQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgVW5pdCByZXN1
bHQodmFsdWUpOwotICAgIHJlc3VsdC5zY2FsZSgxLjAgLyByZXNvbHV0aW9uU2NhbGUpOwotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFVuaXQ+Ci1pbmxpbmUgVW5p
dCBiYWNraW5nU3RvcmVVbml0KGNvbnN0IFVuaXQmIHZhbHVlLCBJbWFnZUJ1ZmZlcjo6Q29vcmRp
bmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtT2ZWYWx1ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
KQotewotICAgIGlmIChjb29yZGluYXRlU3lzdGVtT2ZWYWx1ZSA9PSBJbWFnZUJ1ZmZlcjo6QmFj
a2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSB8fCByZXNvbHV0aW9uU2NhbGUgPT0gMS4wKQotICAg
ICAgICByZXR1cm4gdmFsdWU7Ci0gICAgVW5pdCByZXN1bHQodmFsdWUpOwotICAgIHJlc3VsdC5z
Y2FsZShyZXNvbHV0aW9uU2NhbGUpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVJlZlB0cjxV
aW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShj
b25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRp
bmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIEludFJlY3QgbG9naWNh
bFJlY3QgPSBsb2dpY2FsVW5pdChyZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25T
Y2FsZSk7Ci0gICAgSW50UmVjdCBiYWNraW5nU3RvcmVSZWN0ID0gYmFja2luZ1N0b3JlVW5pdChy
ZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgaWYgKHBpeGVs
QXJyYXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBiYWNraW5n
U3RvcmVSZWN0LnNpemUoKTsKLSAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhPEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZD4oYmFja2luZ1N0b3JlUmVjdCwgbG9naWNhbFJlY3Qs
IG1fZGF0YSwgbV9zaXplLCBtX2xvZ2ljYWxTaXplLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci19Ci0K
LVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJ
bWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lv
bnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBJbnRS
ZWN0IGxvZ2ljYWxSZWN0ID0gbG9naWNhbFVuaXQocmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9y
ZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFJlY3QgYmFja2luZ1N0b3JlUmVjdCA9IGJhY2tpbmdT
dG9yZVVuaXQocmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAg
IGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25z
ID0gYmFja2luZ1N0b3JlUmVjdC5zaXplKCk7Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0YTxBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihiYWNraW5nU3RvcmVSZWN0LCBsb2dp
Y2FsUmVjdCwgbV9kYXRhLCBtX3NpemUsIG1fbG9naWNhbFNpemUsIG1fcmVzb2x1dGlvblNjYWxl
KTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBl
ZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25z
dCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJ
bnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pCi17
Ci0gICAgSW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0ID0gYmFja2luZ1N0b3JlVW5pdChzb3VyY2VS
ZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50U2l6ZSBz
Y2FsZWRTb3VyY2VTaXplID0gYmFja2luZ1N0b3JlVW5pdChzb3VyY2VTaXplLCBjb29yZGluYXRl
U3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UG9pbnQgc2NhbGVkRGVzdFBvaW50
ID0gYmFja2luZ1N0b3JlVW5pdChkZXN0UG9pbnQsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1
dGlvblNjYWxlKTsKLSAgICBJbnRSZWN0IGxvZ2ljYWxTb3VyY2VSZWN0ID0gbG9naWNhbFVuaXQo
c291cmNlUmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIElu
dFBvaW50IGxvZ2ljYWxEZXN0UG9pbnQgPSBsb2dpY2FsVW5pdChkZXN0UG9pbnQsIGNvb3JkaW5h
dGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIEFTU0VSVChzY2FsZWRTb3VyY2VS
ZWN0LndpZHRoKCkgPiAwKTsKLSAgICBBU1NFUlQoc2NhbGVkU291cmNlUmVjdC5oZWlnaHQoKSA+
IDApOwotCi0gICAgaW50IG9yaWdpbnggPSBzY2FsZWRTb3VyY2VSZWN0LngoKTsKLSAgICBpbnQg
ZGVzdHggPSBzY2FsZWREZXN0UG9pbnQueCgpICsgc2NhbGVkU291cmNlUmVjdC54KCk7Ci0gICAg
aW50IGxvZ2ljYWxEZXN0eCA9IGxvZ2ljYWxEZXN0UG9pbnQueCgpICsgbG9naWNhbFNvdXJjZVJl
Y3QueCgpOwotICAgIEFTU0VSVChkZXN0eCA+PSAwKTsKLSAgICBBU1NFUlQoZGVzdHggPCBtX3Np
emUud2lkdGgoKSk7Ci0gICAgQVNTRVJUKG9yaWdpbnggPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdp
bnggPD0gc2NhbGVkU291cmNlUmVjdC5tYXhYKCkpOwotCi0gICAgaW50IGVuZHggPSBzY2FsZWRE
ZXN0UG9pbnQueCgpICsgc2NhbGVkU291cmNlUmVjdC5tYXhYKCk7Ci0gICAgaW50IGxvZ2ljYWxF
bmR4ID0gbG9naWNhbERlc3RQb2ludC54KCkgKyBsb2dpY2FsU291cmNlUmVjdC5tYXhYKCk7Ci0g
ICAgQVNTRVJUKGVuZHggPD0gbV9zaXplLndpZHRoKCkpOwotCi0gICAgaW50IG51bUNvbHVtbnMg
PSBlbmR4IC0gZGVzdHg7Ci0gICAgaW50IGxvZ2ljYWxOdW1Db2x1bW5zID0gbG9naWNhbEVuZHgg
LSBsb2dpY2FsRGVzdHg7Ci0KLSAgICBpbnQgb3JpZ2lueSA9IHNjYWxlZFNvdXJjZVJlY3QueSgp
OwotICAgIGludCBkZXN0eSA9IHNjYWxlZERlc3RQb2ludC55KCkgKyBzY2FsZWRTb3VyY2VSZWN0
LnkoKTsKLSAgICBpbnQgbG9naWNhbERlc3R5ID0gbG9naWNhbERlc3RQb2ludC55KCkgKyBsb2dp
Y2FsU291cmNlUmVjdC55KCk7Ci0gICAgQVNTRVJUKGRlc3R5ID49IDApOwotICAgIEFTU0VSVChk
ZXN0eSA8IG1fc2l6ZS5oZWlnaHQoKSk7Ci0gICAgQVNTRVJUKG9yaWdpbnkgPj0gMCk7Ci0gICAg
QVNTRVJUKG9yaWdpbnkgPD0gc2NhbGVkU291cmNlUmVjdC5tYXhZKCkpOwotCi0gICAgaW50IGVu
ZHkgPSBzY2FsZWREZXN0UG9pbnQueSgpICsgc2NhbGVkU291cmNlUmVjdC5tYXhZKCk7Ci0gICAg
aW50IGxvZ2ljYWxFbmR5ID0gbG9naWNhbERlc3RQb2ludC55KCkgKyBsb2dpY2FsU291cmNlUmVj
dC5tYXhZKCk7Ci0gICAgQVNTRVJUKGVuZHkgPD0gbV9zaXplLmhlaWdodCgpKTsKLSAgICBpbnQg
bnVtUm93cyA9IGVuZHkgLSBkZXN0eTsKLSAgICBpbnQgbG9naWNhbE51bVJvd3MgPSBsb2dpY2Fs
RW5keSAtIGxvZ2ljYWxEZXN0eTsKLQotICAgIC8vIFRoZSBzaXplIG9mIHRoZSBkZXJpdmVkIHN1
cmZhY2UgaXMgaW4gQmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbS4KLSAgICAvLyBXZSBuZWVk
IHRvIHNldCB0aGUgZGV2aWNlIHNjYWxlIGZvciB0aGUgZGVyaXZlZCBzdXJmYWNlIGZyb20gdGhp
cyBJbWFnZUJ1ZmZlci4KLSAgICBJbnRSZWN0IGltYWdlUmVjdChkZXN0eCwgZGVzdHksIG51bUNv
bHVtbnMsIG51bVJvd3MpOwotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlU3VyZmFj
ZSA9IGNvcHlTdXJmYWNlVG9JbWFnZUFuZEFkanVzdFJlY3QobV9kYXRhLm1fc3VyZmFjZS5nZXQo
KSwgaW1hZ2VSZWN0KTsKLSAgICBjYWlyb1N1cmZhY2VTZXREZXZpY2VTY2FsZShpbWFnZVN1cmZh
Y2UuZ2V0KCksIG1fcmVzb2x1dGlvblNjYWxlLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgZGVz
dHggPSBpbWFnZVJlY3QueCgpOwotICAgIGRlc3R5ID0gaW1hZ2VSZWN0LnkoKTsKLQotICAgIHVp
bnQ4X3QqIHBpeGVsRGF0YSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoaW1hZ2VTdXJm
YWNlLmdldCgpKTsKLQotICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIHNjYWxlZFNv
dXJjZVNpemUud2lkdGgoKTsKLSAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfc3RyaWRlKGltYWdlU3VyZmFjZS5nZXQoKSk7Ci0KLSAgICBjb25zdCB1aW50OF90KiBzcmNS
b3dzID0gc291cmNlLmRhdGEoKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbngg
KiA0OwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbnVtUm93czsgKyt5KSB7Ci0gICAgICAgIHVu
c2lnbmVkKiByb3cgPSByZWludGVycHJldF9jYXN0X3B0cjx1bnNpZ25lZCo+KHBpeGVsRGF0YSAr
IHN0cmlkZSAqICh5ICsgZGVzdHkpKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBudW1D
b2x1bW5zOyB4KyspIHsKLSAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAg
ICAgdW5zaWduZWQqIHBpeGVsID0gcm93ICsgeCArIGRlc3R4OwotCi0gICAgICAgICAgICAvLyBB
dm9pZCBjYWxsaW5nIENvbG9yOjpwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcigpIGJlY2F1c2Ug
b25lCi0gICAgICAgICAgICAvLyBmdW5jdGlvbiBjYWxsIHBlciBwaXhlbCBpcyB0b28gZXhwZW5z
aXZlLgotICAgICAgICAgICAgdW5zaWduZWQgcmVkID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBncmVlbiA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgIHVu
c2lnbmVkIGJsdWUgPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICB1bnNpZ25lZCBh
bHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLQotICAgICAgICAgICAgaWYgKHNvdXJjZUZvcm1h
dCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlZCA9IChy
ZWQgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGdyZWVuID0gKGdy
ZWVuICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBibHVlID0gKGJs
dWUgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAqcGl4ZWwgPSAoYWxwaGEgPDwgMjQpIHwgcmVkICA8PCAxNiB8IGdy
ZWVuICA8PCA4IHwgYmx1ZTsKLSAgICAgICAgfQotICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVz
UGVyUm93OwotICAgIH0KLQotICAgIC8vIFRoaXMgY2Fpcm8gc3VyZmFjZSBvcGVyYXRpb24gaXMg
ZG9uZSBpbiBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbS4KLSAgICBjYWlyb19zdXJmYWNlX21hcmtf
ZGlydHlfcmVjdGFuZ2xlKGltYWdlU3VyZmFjZS5nZXQoKSwgbG9naWNhbERlc3R4LCBsb2dpY2Fs
RGVzdHksIGxvZ2ljYWxOdW1Db2x1bW5zLCBsb2dpY2FsTnVtUm93cyk7Ci0KLSAgICBpZiAoaW1h
Z2VTdXJmYWNlICE9IG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpIHsKLSAgICAgICAgLy8gVGhpcyBj
YWlybyBzdXJmYWNlIG9wZXJhdGlvbiBpcyBkb25lIGluIExvZ2ljYWxDb29yZGluYXRlU3lzdGVt
LgotICAgICAgICBjb3B5UmVjdEZyb21PbmVTdXJmYWNlVG9Bbm90aGVyKGltYWdlU3VyZmFjZS5n
ZXQoKSwgbV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgSW50U2l6ZSgpLCBJbnRSZWN0KDAsIDAsIGxv
Z2ljYWxOdW1Db2x1bW5zLCBsb2dpY2FsTnVtUm93cyksIEludFNpemUobG9naWNhbERlc3RQb2lu
dC54KCkgKyBsb2dpY2FsU291cmNlUmVjdC54KCksIGxvZ2ljYWxEZXN0UG9pbnQueSgpICsgbG9n
aWNhbFNvdXJjZVJlY3QueSgpKSk7Ci0gICAgfQotfQotCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRv
RGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHks
IFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBWZWN0b3I8dWludDhfdD4gZW5jb2Rl
ZEltYWdlID0gdG9EYXRhKG1pbWVUeXBlLCBxdWFsaXR5KTsKLSAgICBpZiAoZW5jb2RlZEltYWdl
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuICJkYXRhOiwiOwotCi0gICAgVmVjdG9yPGNoYXI+
IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKGVuY29kZWRJbWFnZS5kYXRhKCksIGVuY29k
ZWRJbWFnZS5zaXplKCksIGJhc2U2NERhdGEpOwotCi0gICAgcmV0dXJuICJkYXRhOiIgKyBtaW1l
VHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1h
Z2VCdWZmZXI6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHkpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9y
dGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7Ci0gICAgY2Fpcm9fc3VyZmFj
ZV90KiBpbWFnZSA9IGNhaXJvX2dldF90YXJnZXQoY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgp
LT5jcigpKTsKLSAgICByZXR1cm4gZGF0YShpbWFnZSwgbWltZVR5cGUsIHF1YWxpdHkpOwotfQot
Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJiYgIVVTRShDT09SRElOQVRFRF9H
UkFQSElDUykKLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0
dXJlTWFwcGVyJiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHkpCi17Ci0gICAg
QVNTRVJUKG1fdGV4dHVyZSk7Ci0KLSAgICAvLyBDYWlybyBtYXkgY2hhbmdlIHRoZSBhY3RpdmUg
Y29udGV4dCwgc28gd2UgbWFrZSBzdXJlIHRvIGNoYW5nZSBpdCBiYWNrIGFmdGVyIGZsdXNoaW5n
LgotICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJy
ZW50KCk7Ci0gICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChtX3N1cmZhY2UuZ2V0KCkpOwotICAgIHBy
ZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBzdGF0aWNf
Y2FzdDxUZXh0dXJlTWFwcGVyR0wmPih0ZXh0dXJlTWFwcGVyKS5kcmF3VGV4dHVyZShtX3RleHR1
cmUsIFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQsIG1fc2l6ZSwgdGFyZ2V0UmVjdCwgbWF0
cml4LCBvcGFjaXR5KTsKLX0KLSNlbmRpZgotCi1QbGF0Zm9ybUxheWVyKiBJbWFnZUJ1ZmZlcjo6
cGxhdGZvcm1MYXllcigpIGNvbnN0Ci17Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZB
UykKLSNpZiBVU0UoTklDT1NJQSkKLSAgICBpZiAobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSA9PSBS
ZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5tX25pY29z
aWFMYXllci5nZXQoKTsKLSNlbHNlCi0gICAgaWYgKG1fZGF0YS5tX3RleHR1cmUpCi0gICAgICAg
IHJldHVybiBjb25zdF9jYXN0PEltYWdlQnVmZmVyRGF0YSo+KCZtX2RhdGEpOwotI2VuZGlmCi0j
ZW5kaWYKLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBJbWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZv
cm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiwgR0NHTGVudW0gdGFyZ2V0LCBQbGF0
Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkKLXsKLSNpZiBFTkFCTEUoQUNDRUxF
UkFURURfMkRfQ0FOVkFTKQotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9yZXNvbHV0aW9uU2Nh
bGUgPT0gMS4wLCAiU2luY2UgdGhlIEhpRFBJIENhbnZhcyBmZWF0dXJlIGlzIHJlbW92ZWQsIHRo
ZSByZXNvbHV0aW9uIGZhY3RvciBoZXJlIGlzIGFsd2F5cyAxLiIpOwotICAgIGlmIChwcmVtdWx0
aXBseUFscGhhIHx8IGZsaXBZKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIW1f
ZGF0YS5tX3RleHR1cmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdDR0xlbnVtIGJp
bmRUZXh0dXJlVGFyZ2V0OwotICAgIHN3aXRjaCAodGFyZ2V0KSB7Ci0gICAgY2FzZSBHTF9URVhU
VVJFXzJEOgotICAgICAgICBiaW5kVGV4dHVyZVRhcmdldCA9IEdMX1RFWFRVUkVfMkQ7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgotICAg
IGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgotICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdB
VElWRV9ZOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAgIGNh
c2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICBiaW5kVGV4dHVyZVRh
cmdldCA9IEdMX1RFWFRVUkVfQ1VCRV9NQVA7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBjYWlyb19zdXJmYWNlX2ZsdXNo
KG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPEdMQ29udGV4
dD4gY29udGV4dCA9IEdMQ29udGV4dDo6Y3JlYXRlT2Zmc2NyZWVuQ29udGV4dCgmUGxhdGZvcm1E
aXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKSk7Ci0gICAgY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgdWludDMyX3QgZmJvOwotICAgIGdsR2VuRnJhbWVidWZm
ZXJzKDEsICZmYm8pOwotICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBmYm8p
OwotICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FU
VEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBtX2RhdGEubV90ZXh0dXJlLCAwKTsKLSAgICBnbEJp
bmRUZXh0dXJlKGJpbmRUZXh0dXJlVGFyZ2V0LCBkZXN0aW5hdGlvblRleHR1cmUpOwotICAgIGds
Q29weVRleEltYWdlMkQodGFyZ2V0LCAwLCBpbnRlcm5hbGZvcm1hdCwgMCwgMCwgbV9zaXplLndp
ZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCk7Ci0gICAgZ2xCaW5kVGV4dHVyZShiaW5kVGV4dHVy
ZVRhcmdldCwgMCk7Ci0gICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIDApOwot
ICAgIGdsRmx1c2goKTsKLSAgICBnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmZmJvKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VE
X1BBUkFNKGRlc3RpbmF0aW9uVGV4dHVyZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGludGVybmFsZm9y
bWF0KTsKLSAgICBVTlVTRURfUEFSQU0ocHJlbXVsdGlwbHlBbHBoYSk7Ci0gICAgVU5VU0VEX1BB
UkFNKGZsaXBZKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWly
b0JhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA3NmFmNDA4OTZiYWFjZDgwZDlmMWM1ZWZhYTc5MGEx
NDliOGRkN2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKQEAgLTAsMCArMSwxMjYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRo
ZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsg
U2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1v
YmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaCIKKworI2luY2x1ZGUgIkJpdG1hcEltYWdl
LmgiCisjaW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNp
bmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oIgorI2luY2x1ZGUgIkltYWdlQnVm
ZmVyVXRpbGl0aWVzQ2Fpcm8uaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorCisjaWYgVVNFKENBSVJPKQorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmNvcHlJbWFn
ZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25z
dAoreworICAgIC8vIEJpdG1hcEltYWdlIHdpbGwgcmVsZWFzZSB0aGUgcGFzc2VkIGluIHN1cmZh
Y2Ugb24gZGVzdHJ1Y3Rpb24KKyAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShjb3B5TmF0
aXZlSW1hZ2UoY29weUJlaGF2aW9yKSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0JhY2tl
bmQ6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgb3B0aW9ucykKK3sKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50
ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoZGVzdENvbnRleHQsIG9wdGlvbnMuaW50ZXJw
b2xhdGlvblF1YWxpdHkoKSk7CisgICAgY29uc3QgYXV0byYgZGVzdGluYXRpb25Db250ZXh0U3Rh
dGUgPSBkZXN0Q29udGV4dC5zdGF0ZSgpOworCisgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5TmF0
aXZlSW1hZ2UoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDog
RG9udENvcHlCYWNraW5nU3RvcmUpKQorICAgICAgICBkcmF3TmF0aXZlSW1hZ2UoKmRlc3RDb250
ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBpbWFnZS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsg
b3B0aW9ucywgZGVzdGluYXRpb25Db250ZXh0U3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eSB9LCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5hbHBoYSwgV2ViQ29yZTo6Q2Fpcm86OlNoYWRv
d1N0YXRlKGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlKSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJD
YWlyb0JhY2tlbmQ6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFz
ZSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
Cit7CisgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoJmRlc3RDb250ZXh0ID09
ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUpKQor
ICAgICAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKmRlc3RDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgp
LCBpbWFnZS5nZXQoKSwgbV9sb2dpY2FsU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIHBhdHRlcm5U
cmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFj
a2VuZDo6dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9y
U3BhY2UgZGVzdENvbG9yU3BhY2UpCit7CisgICAgaWYgKHNyY0NvbG9yU3BhY2UgPT0gZGVzdENv
bG9yU3BhY2UpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIG9ubHkgc1JHQiA8LT4gbGluZWFy
UkdCIGFyZSBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVudAorICAgIGlmICgoc3JjQ29sb3JTcGFjZSAh
PSBDb2xvclNwYWNlOjpMaW5lYXJSR0IgJiYgc3JjQ29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpT
UkdCKQorICAgICAgICB8fCAoZGVzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdC
ICYmIGRlc3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0IpKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoZGVzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCKSB7Cisg
ICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gbGluZWFyUmdiTFVU
ID0gW10geworICAgICAgICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5OworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOworICAgICAgICAgICAgICAgIGNvbG9yID0g
c1JHQlRvTGluZWFyQ29sb3JDb21wb25lbnQoY29sb3IpOworICAgICAgICAgICAgICAgIGFycmF5
W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiBhcnJheTsKKyAgICAgICAgfSgpOworICAgICAgICBw
bGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UobGluZWFyUmdiTFVUKTsKKyAgICB9IGVsc2UgaWYg
KGRlc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6OlNSR0IpIHsKKyAgICAgICAgc3RhdGljIGNv
bnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBkZXZpY2VSZ2JMVVQ9IFtdIHsKKyAgICAgICAg
ICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgeworICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9y
ID0gaSAvIDI1NS4wZjsKKyAgICAgICAgICAgICAgICBjb2xvciA9IGxpbmVhclRvU1JHQkNvbG9y
Q29tcG9uZW50KGNvbG9yKTsKKyAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gYXJyYXk7CisgICAgICAgIH0oKTsKKyAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1D
b2xvclNwYWNlKGRldmljZVJnYkxVVCk7CisgICAgfQorfQorCitTdHJpbmcgSW1hZ2VCdWZmZXJD
YWlyb0JhY2tlbmQ6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxk
b3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKK3sKKyAgICBWZWN0b3I8
dWludDhfdD4gZW5jb2RlZEltYWdlID0gdG9EYXRhKG1pbWVUeXBlLCBxdWFsaXR5KTsKKyAgICBp
ZiAoZW5jb2RlZEltYWdlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuICJkYXRhOiwiOworCisg
ICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7CisgICAgYmFzZTY0RW5jb2RlKGVuY29kZWRJbWFn
ZS5kYXRhKCksIGVuY29kZWRJbWFnZS5zaXplKCksIGJhc2U2NERhdGEpOworCisgICAgcmV0dXJu
ICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOworfQorCitWZWN0
b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YShjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0Cit7CisgICAgQVNTRVJU
KE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1p
bWVUeXBlKSk7CisgICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IGNhaXJvX2dldF90YXJnZXQo
Y29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpKTsKKyAgICByZXR1cm4gZGF0YShpbWFn
ZSwgbWltZVR5cGUsIHF1YWxpdHkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4yM2I5MTlhZDUyMmVhMTc4YjMyYzAwOWY1ZDg4ZDVkNzE2ZGVmM2ExCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyb0JhY2tlbmQuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlckJhY2tlbmQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1
ZmZlckNhaXJvQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckJhY2tlbmQgeworcHVibGljOgor
ICAgIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2lu
Z1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25z
dCBvdmVycmlkZTsKKworICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQ
b2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmKSBvdmVycmlkZTsKKworICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xv
clNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZGVzdENvbG9yU3BhY2UpIG92ZXJyaWRl
OworCisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0IG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAgdXNp
bmcgSW1hZ2VCdWZmZXJCYWNrZW5kOjpJbWFnZUJ1ZmZlckJhY2tlbmQ7CisKKyAgICBDb2xvckZv
cm1hdCBiYWNrZW5kQ29sb3JGb3JtYXQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBDb2xvckZv
cm1hdDo6QkdSQTsgfQorICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3Bh
Y2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+JikgeyB9Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNl
QmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDM2MzcyZjkxOWU3
ZWNlOGNiYzZhMjYzYzQ4OWM5OWUwZTg3NjI0MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kLmNwcApAQCAtMCwwICsxLDI2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvR0xTdXJm
YWNlQmFja2VuZC5oIgorCisjaWYgVVNFKENBSVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFURURfMkRf
Q0FOVkFTKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpbmNsdWRlICJHTENvbnRleHQuaCIK
KyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5s
aW5lcy5oPgorCisjaWYgVVNFKEVHTCkKKyNpZiBVU0UoTElCRVBPWFkpCisjaW5jbHVkZSAiRXBv
eHlFR0wuaCIKKyNlbHNlCisjaW5jbHVkZSA8RUdML2VnbC5oPgorI2VuZGlmCisjZW5kaWYKKyNp
bmNsdWRlIDxjYWlyby1nbC5oPgorCisjaWYgVVNFKExJQkVQT1hZKQorI2luY2x1ZGUgPGVwb3h5
L2dsLmg+CisjZWxpZiBVU0UoT1BFTkdMX0VTKQorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2Vs
c2UKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgorI2VuZGlmCisKKyNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXIu
aCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5LmgiCisjZW5kaWYK
KworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kKTsKKworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyU3VyZmFjZShjYWlyb19zdXJmYWNl
X3QqIHN1cmZhY2UpCit7CisgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9f
Y3JlYXRlKHN1cmZhY2UpKTsKKyAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJP
X09QRVJBVE9SX0NMRUFSKTsKKyAgICBjYWlyb19wYWludChjci5nZXQoKSk7Cit9CisKK3N0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZmZXJD
YWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93
KikKK3sKKyAgICBJbnRTaXplIGJhY2tlbmRTaXplID0gY2FsY3VsYXRlQmFja2VuZFNpemUoc2l6
ZSwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAoYmFja2VuZFNpemUuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8qIGNvbnRleHQgPSBQbGF0Zm9ybURpc3Bs
YXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKTsKKyAg
ICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIC8vIFdlIG11c3QgZ2VuZXJh
dGUgdGhlIHRleHR1cmUgb3Vyc2VsdmVzLCBiZWNhdXNlIHRoZXJlIGlzIG5vIENhaXJvIEFQSSBm
b3IgZXh0cmFjdGluZyBpdAorICAgIC8vIGZyb20gYSBwcmUtZXhpc3Rpbmcgc3VyZmFjZS4KKyAg
ICB1aW50MzJfdCB0ZXh0dXJlCisgICAgZ2xHZW5UZXh0dXJlcygxLCAmdGV4dHVyZSk7CisgICAg
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0dXJlKTsKKyAgICBnbFRleFBhcmFtZXRl
cmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwor
ICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xf
Q0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RF
WFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVY
VFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworCisgICAgZ2xQaXhl
bFN0b3JlaShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKKworICAgIGdsVGV4SW1hZ2UyRChHTF9U
RVhUVVJFXzJELCAwIC8qIGxldmVsICovLCBHTF9SR0JBLCBiYWNrZW5kU2l6ZS53aWR0aCgpLCBi
YWNrZW5kU2l6ZS5oZWlnaHQoKSwgMCAvKiBib3JkZXIgKi8sIEdMX1JHQkEsIEdMX1VOU0lHTkVE
X0JZVEUsIDApOworCisgICAgY2Fpcm9fZGV2aWNlX3QqIGRldmljZSA9IGNvbnRleHQtPmNhaXJv
RGV2aWNlKCk7CisKKyAgICAvLyBUaHJlYWQtYXdhcmVuZXNzIGlzIGEgaHVnZSBwZXJmb3JtYW5j
ZSBoaXQgb24gbm9uLUludGVsIGRyaXZlcnMuCisgICAgY2Fpcm9fZ2xfZGV2aWNlX3NldF90aHJl
YWRfYXdhcmUoZGV2aWNlLCBGQUxTRSk7CisKKyAgICBhdXRvIHN1cmZhY2UgPSBhZG9wdFJlZihj
YWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9mb3JfdGV4dHVyZShkZXZpY2UsIENBSVJPX0NPTlRFTlRf
Q09MT1JfQUxQSEEsIHRleHR1cmUsIGJhY2tlbmRTaXplLndpZHRoKCksIGJhY2tlbmRTaXplLmhl
aWdodCgpKSk7CisgICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UpICE9IENBSVJP
X1NUQVRVU19TVUNDRVNTKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGNsZWFyU3Vy
ZmFjZShzdXJmYWNlLmdldCgpKTsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNl
QmFja2VuZChzaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBX
VEZNb3ZlKHN1cmZhY2UpLCB0ZXh0dXJlKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tl
bmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
Cit7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpjcmVhdGUo
c2l6ZSwgMSwgQ29sb3JTcGFjZTo6U1JHQiwgbnVsbHB0cik7Cit9CisKK0ltYWdlQnVmZmVyQ2Fp
cm9HTFN1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZChjb25z
dCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlZlB0cjxjYWlyb19z
dXJmYWNlX3Q+JiYgc3VyZmFjZSwgdWludDMyX3QgdGV4dHVyZSkKKyAgICA6IEltYWdlQnVmZmVy
Q2Fpcm9TdXJmYWNlQmFja2VuZChsb2dpY2FsU2l6ZSwgYmFja2VuZFNpemUsIHJlc29sdXRpb25T
Y2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSkKKyAgICAsIG1fdGV4dHVyZSh0ZXh0
dXJlKQoreworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpZiBVU0UoTklDT1NJQSkK
KyAgICBtX25pY29zaWFMYXllciA9IE5pY29zaWE6OkNvbnRlbnRMYXllcjo6Y3JlYXRlKE5pY29z
aWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpjcmVhdGVGYWN0b3J5KCp0aGlzKSk7
CisjZWxzZQorICAgIG1fcGxhdGZvcm1MYXllclByb3h5ID0gYWRvcHRSZWYobmV3IFRleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyUHJveHkpOworI2VuZGlmCisjZW5kaWYKK30KKworSW1hZ2VCdWZm
ZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6On5JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2Vu
ZCgpCit7CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSAmJiBVU0UoTklDT1NJQSkKKyAg
ICBkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNv
c2lhTGF5ZXItPmltcGwoKSkuaW52YWxpZGF0ZUNsaWVudCgpOworI2VuZGlmCisKKyAgICBHTENv
bnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOworICAg
IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dM
Q29udGV4dCgpLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIGlmIChtX3RleHR1cmUpCisg
ICAgICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisKKyNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCisgICAgaWYgKG1fY29tcG9zaXRvclRleHR1cmUpCisgICAgICAgIGds
RGVsZXRlVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOworI2VuZGlmCisKKyAgICBp
ZiAocHJldmlvdXNBY3RpdmVDb250ZXh0KQorICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOworfQorCitQbGF0Zm9ybUxheWVyKiBJbWFnZUJ1ZmZlcjo6
cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisjaWYgVVNFKE5JQ09TSUEpCisgICAgcmV0dXJuIG1f
bmljb3NpYUxheWVyLmdldCgpOworI2Vsc2UKKyAgICBpZiAobV90ZXh0dXJlKQorICAgICAgICBy
ZXR1cm4gdGhpczsKKyNlbmRpZgorICAgIHJldHVybiBudWxscHRyOworfQorCitib29sIEltYWdl
QnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR0NHTGVu
dW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0NHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkKK3sKKyAg
ICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fcmVzb2x1dGlvblNjYWxlID09IDEuMCwgIlNpbmNlIHRo
ZSBIaURQSSBDYW52YXMgZmVhdHVyZSBpcyByZW1vdmVkLCB0aGUgcmVzb2x1dGlvbiBmYWN0b3Ig
aGVyZSBpcyBhbHdheXMgMS4iKTsKKyAgICBpZiAocHJlbXVsdGlwbHlBbHBoYSB8fCBmbGlwWSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFtX3RleHR1cmUpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIEdDM0RlbnVtIGJpbmRUZXh0dXJlVGFyZ2V0OworICAgIHN3aXRj
aCAodGFyZ2V0KSB7CisgICAgY2FzZSBHTF9URVhUVVJFXzJEOgorICAgICAgICBiaW5kVGV4dHVy
ZVRhcmdldCA9IEdMX1RFWFRVUkVfMkQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9O
RUdBVElWRV9YOgorICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAg
IGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgorICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdB
VElWRV9aOgorICAgICAgICBiaW5kVGV4dHVyZVRhcmdldCA9IEdMX1RFWFRVUkVfQ1VCRV9NQVA7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKG1fc3VyZmFjZS5nZXQoKSk7CisKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8R0xDb250ZXh0PiBjb250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVPZmZz
Y3JlZW5Db250ZXh0KCZQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGlu
ZygpKTsKKyAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICB1aW50MzJfdCBm
Ym87CisgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJmZibyk7CisgICAgZ2xCaW5kRnJhbWVidWZm
ZXIoR0xfRlJBTUVCVUZGRVIsIGZibyk7CisgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9G
UkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVy
ZSwgMCk7CisgICAgZ2xCaW5kVGV4dHVyZShiaW5kVGV4dHVyZVRhcmdldCwgZGVzdGluYXRpb25U
ZXh0dXJlKTsKKyAgICBnbENvcHlUZXhJbWFnZTJEKHRhcmdldCwgMCwgaW50ZXJuYWxmb3JtYXQs
IDAsIDAsIG1fYmFja2VuZFNpemUud2lkdGgoKSwgbV9iYWNrZW5kU2l6ZS5oZWlnaHQoKSwgMCk7
CisgICAgZ2xCaW5kVGV4dHVyZShiaW5kVGV4dHVyZVRhcmdldCwgMCk7CisgICAgZ2xCaW5kRnJh
bWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIDApOworICAgIGdsRmx1c2goKTsKKyAgICBnbERlbGV0
ZUZyYW1lYnVmZmVycygxLCAmZmJvKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2lmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tl
bmQ6OmNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKQoreworICAgIGF1dG8qIGNvbnRleHQgPSBQbGF0
Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRl
eHQoKTsKKyAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIGdsR2VuVGV4
dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOworICAgIGdsQmluZFRleHR1cmUoR0xfVEVY
VFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbFRl
eFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RP
X0VER0UpOworICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01J
Tl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQs
IEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbFBpeGVsU3RvcmVpKEdM
X1VOUEFDS19BTElHTk1FTlQsIDEpOworICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAw
ICwgR0xfUkdCQSwgbV9iYWNrZW5kU2l6ZS53aWR0aCgpLCBtX2JhY2tlbmRTaXplLmhlaWdodCgp
LCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKworICAgIG1fY29tcG9zaXRvclN1
cmZhY2UgPSBhZG9wdFJlZihjYWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9mb3JfdGV4dHVyZShjb250
ZXh0LT5jYWlyb0RldmljZSgpLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBLCBtX2NvbXBvc2l0
b3JUZXh0dXJlLCBtX2JhY2tlbmRTaXplLndpZHRoKCksIG1fYmFja2VuZFNpemUuaGVpZ2h0KCkp
KTsKKyAgICBtX2NvbXBvc2l0b3JDciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShtX2NvbXBvc2l0
b3JTdXJmYWNlLmdldCgpKSk7CisgICAgY2Fpcm9fc2V0X2FudGlhbGlhcyhtX2NvbXBvc2l0b3JD
ci5nZXQoKSwgQ0FJUk9fQU5USUFMSUFTX05PTkUpOworfQorCit2b2lkIEltYWdlQnVmZmVyQ2Fp
cm9HTFN1cmZhY2VCYWNrZW5kOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkKK3sKKyAgICBHTENvbnRl
eHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOworCisgICAg
aWYgKCFtX2NvbXBvc2l0b3JUZXh0dXJlKSB7CisgICAgICAgIGNyZWF0ZUNvbXBvc2l0b3JCdWZm
ZXIoKTsKKworICAgICAgICBhdXRvIHByb3h5T3BlcmF0aW9uID0KKyAgICAgICAgICAgIFt0aGlz
XShUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihwcm94eS5sb2NrKCkpOworICAgICAg
ICAgICAgICAgIHByb3h5LnB1c2hOZXh0QnVmZmVyKG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXJCdWZmZXI+KG1fY29tcG9zaXRvclRleHR1cmUsIG1fYmFja2VuZFNpemUsIFRl
eHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQsIEdMX1JHQkEpKTsKKyAgICAgICAgICAgIH07Cisj
aWYgVVNFKE5JQ09TSUEpCisgICAgICAgIHByb3h5T3BlcmF0aW9uKGRvd25jYXN0PE5pY29zaWE6
OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5w
cm94eSgpKTsKKyNlbHNlCisgICAgICAgIHByb3h5T3BlcmF0aW9uKCptX3BsYXRmb3JtTGF5ZXJQ
cm94eSk7CisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBJdCB3b3VsZCBiZSBncmVhdCBpZiB3ZSBj
b3VsZCBqdXN0IHN3YXAgdGhlIGJ1ZmZlcnMgaGVyZSBhcyB3ZSBkbyB3aXRoIHdlYmdsLCBidXQg
dGhhdCBicmVha3MgdGhlIGNhc2VzCisgICAgLy8gd2hlcmUgb25lIGZyYW1lIHVzZXMgdGhlIGNv
bnRlbnQgYWxyZWFkeSByZW5kZXJlZCBpbiB0aGUgcHJldmlvdXMgZnJhbWUuIFNvIHdlIGp1c3Qg
Y29weSB0aGUgY29udGVudAorICAgIC8vIGludG8gdGhlIGNvbXBvc2l0b3IgYnVmZmVyLgorICAg
IGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShtX2NvbXBvc2l0b3JDci5nZXQoKSwgbV9zdXJmYWNl
LmdldCgpLCAwLCAwKTsKKyAgICBjYWlyb19zZXRfb3BlcmF0b3IobV9jb21wb3NpdG9yQ3IuZ2V0
KCksIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7CisgICAgY2Fpcm9fcGFpbnQobV9jb21wb3NpdG9y
Q3IuZ2V0KCkpOworCisgICAgaWYgKHByZXZpb3VzQWN0aXZlQ29udGV4dCkKKyAgICAgICAgcHJl
dmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKK30KKyNlbHNlCit2b2lk
IEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpwYWludFRvVGV4dHVyZU1hcHBlcihU
ZXh0dXJlTWFwcGVyJiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3Qs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHkpCit7Cisg
ICAgQVNTRVJUKG1fdGV4dHVyZSk7CisKKyAgICAvLyBDYWlybyBtYXkgY2hhbmdlIHRoZSBhY3Rp
dmUgY29udGV4dCwgc28gd2UgbWFrZSBzdXJlIHRvIGNoYW5nZSBpdCBiYWNrIGFmdGVyIGZsdXNo
aW5nLgorICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0Ojpj
dXJyZW50KCk7CisgICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChtX3N1cmZhY2UuZ2V0KCkpOworICAg
IHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBzdGF0
aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wmPih0ZXh0dXJlTWFwcGVyKS5kcmF3VGV4dHVyZShtX3Rl
eHR1cmUsIFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQsIG1fYmFja2VuZFNpemUsIHRhcmdl
dFJlY3QsIG1hdHJpeCwgb3BhY2l0eSk7Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FO
VkFTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uY2RmMGZhZTdlMmMzNDllMjE2NDE5ODQ1NWQ0MThjM2NhYjY3NDdiNAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VA
c2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxr
cml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlq
aW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENBSVJPKSAmJiBF
TkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWly
b1N1cmZhY2VCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorCisjaWYgVVNF
KE5JQ09TSUEpCisjaW5jbHVkZSAiTmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBs
LmgiCisjZWxzZQorI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKKyNlbmRpZgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kCisj
aWYgVVNFKE5JQ09TSUEpCisgICAgOiBwdWJsaWMgTmljb3NpYTo6Q29udGVudExheWVyVGV4dHVy
ZU1hcHBlckltcGw6OkNsaWVudAorI2Vsc2UKKyAgICA6IHB1YmxpYyBQbGF0Zm9ybUxheWVyCisj
ZW5kaWYKKyAgICAsIHB1YmxpYyBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQgeworICAg
IFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQp
OworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNr
ZW5kKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fp
cm9HTFN1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisgICAgc3RhdGljIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNv
bnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworCisgICAgfkltYWdlQnVm
ZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKCk7CisKKyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9y
bUxheWVyKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUo
R0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0NH
TGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkg
b3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tl
bmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNp
emUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZh
Y2VfdD4mJik7CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgdm9pZCBjcmVh
dGVDb21wb3NpdG9yQnVmZmVyKCk7CisgICAgdm9pZCBzd2FwQnVmZmVyc0lmTmVlZGVkKCkgb3Zl
cnJpZGU7CisjaWYgIVVTRShOSUNPU0lBKQorICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZv
cm1MYXllclByb3h5PiBwcm94eSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcGxhdGZvcm1M
YXllclByb3h5LmNvcHlSZWYoKTsgfQorI2VuZGlmCisjZWxzZQorICAgIHZvaWQgcGFpbnRUb1Rl
eHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciYsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0LCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHkpOworI2VuZGlmCisKKyNpZiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaWYgVVNFKE5JQ09TSUEpCisgICAgUmVmUHRyPE5p
Y29zaWE6OkNvbnRlbnRMYXllcj4gbV9uaWNvc2lhTGF5ZXI7CisjZWxzZQorICAgIFJlZlB0cjxU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBtX3BsYXRmb3JtTGF5ZXJQcm94eTsKKyNl
bmRpZgorICAgIHVpbnQzMl90IG1fdGV4dHVyZTsKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90
PiBtX2NvbXBvc2l0b3JTdXJmYWNlOworICAgIFJlZlB0cjxjYWlyb190PiBtX2NvbXBvc2l0b3JD
cjsKKyAgICB1aW50MzJfdCBtX2NvbXBvc2l0b3JUZXh0dXJlIHsgMCB9OworI2VuZGlmCisgICAg
dWludDMyX3QgbV90ZXh0dXJlIHsgMCB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gVVNFKENBSVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjU1ZjJkZGU5OGViNzRlNGUyMTAzY2FjNDQxOGY3YjU4ZWE5ZTFjZmMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKQEAgLTAsMCArMSw5MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhl
ciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBT
Y2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9i
aWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oIgorCisjaWYgVVNFKENB
SVJPKQorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1ZGUg
PHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV1RGX01B
S0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5k
KTsKKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5k
PiBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IGNvbnN0IEhvc3RXaW5kb3cqKQoreworICAgIHN0YXRpYyBjYWlyb191c2VyX2RhdGFfa2V5X3Qg
c19zdXJmYWNlRGF0YUtleTsKKworICAgIEludFNpemUgYmFja2VuZFNpemUgPSBjYWxjdWxhdGVC
YWNrZW5kU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChiYWNrZW5kU2l6ZS5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaW50IHN0cmlkZSA9IGNh
aXJvX2Zvcm1hdF9zdHJpZGVfZm9yX3dpZHRoKENBSVJPX0ZPUk1BVF9BUkdCMzIsIGJhY2tlbmRT
aXplLndpZHRoKCkpOworICAgIHZvaWQqIHN1cmZhY2VEYXRhOworICAgIGlmICghdHJ5RmFzdFpl
cm9lZE1hbGxvYyhiYWNrZW5kU2l6ZS5oZWlnaHQoKSAqIHN0cmlkZSkuZ2V0VmFsdWUoc3VyZmFj
ZURhdGEpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gc3VyZmFjZSA9IGFk
b3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIqPihzdXJmYWNlRGF0YSksIENBSVJPX0ZPUk1BVF9BUkdCMzIsIGJhY2tlbmRT
aXplLndpZHRoKCksIGJhY2tlbmRTaXplLmhlaWdodCgpLCBzdHJpZGUpKTsKKyAgICBjYWlyb19z
dXJmYWNlX3NldF91c2VyX2RhdGEoc3VyZmFjZS5nZXQoKSwgJnNfc3VyZmFjZURhdGFLZXksIHN1
cmZhY2VEYXRhLCBbXSh2b2lkKiBkYXRhKSB7CisgICAgICAgIGZhc3RGcmVlKGRhdGEpOworICAg
IH0pOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VT
dXJmYWNlQmFja2VuZD4obmV3IEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKHNp
emUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3Vy
ZmFjZSkpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZh
Y2VCYWNrZW5kPiBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JikKK3sKKyAgICByZXR1
cm4gSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShzaXplLCAxLCBD
b2xvclNwYWNlOjpTUkdCLCBudWxscHRyKTsKK30KKworSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3Vy
ZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKGNvbnN0IEZs
b2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZh
Y2VfdD4mJiBzdXJmYWNlKQorICAgIDogSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kKGxv
Z2ljYWxTaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZN
b3ZlKHN1cmZhY2UpKQoreworICAgIEFTU0VSVChjYWlyb19zdXJmYWNlX2dldF90eXBlKG1fc3Vy
ZmFjZS5nZXQoKSkgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKTsKK30KKwordm9pZCBJbWFn
ZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNw
YWNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiYgbG9va1VwVGFibGUpCit7CisgICAg
dW5zaWduZWQgY2hhciogZGF0YVNyYyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9z
dXJmYWNlLmdldCgpKTsKKyAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRf
c3RyaWRlKG1fc3VyZmFjZS5nZXQoKSk7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtX2xvZ2lj
YWxTaXplLmhlaWdodCgpOyArK3kpIHsKKyAgICAgICAgdW5zaWduZWQqIHJvdyA9IHJlaW50ZXJw
cmV0X2Nhc3RfcHRyPHVuc2lnbmVkKj4oZGF0YVNyYyArIHN0cmlkZSAqIHkpOworICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IG1fbG9naWNhbFNpemUud2lkdGgoKTsgeCsrKSB7CisgICAgICAg
ICAgICB1bnNpZ25lZCogcGl4ZWwgPSByb3cgKyB4OworICAgICAgICAgICAgQ29sb3IgcGl4ZWxD
b2xvciA9IGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKCpwaXhlbCk7CisgICAgICAgICAgICBw
aXhlbENvbG9yID0gQ29sb3IobG9va1VwVGFibGVbcGl4ZWxDb2xvci5yZWQoKV0sIGxvb2tVcFRh
YmxlW3BpeGVsQ29sb3IuZ3JlZW4oKV0sIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuYmx1ZSgpXSwg
cGl4ZWxDb2xvci5hbHBoYSgpKTsKKyAgICAgICAgICAgICpwaXhlbCA9IHByZW11bHRpcGxpZWRB
UkdCRnJvbUNvbG9yKHBpeGVsQ29sb3IpOworICAgICAgICB9CisgICAgfQorICAgIGNhaXJvX3N1
cmZhY2VfbWFya19kaXJ0eV9yZWN0YW5nbGUobV9zdXJmYWNlLmdldCgpLCAwLCAwLCBtX2xvZ2lj
YWxTaXplLndpZHRoKCksIG1fbG9naWNhbFNpemUuaGVpZ2h0KCkpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJm
YWNlQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNjAwMzc5NGZk
YWE5NDczMmI2MTU1N2M0MWU4NDQyMzFhOThhNzAxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3Vy
ZmFjZUJhY2tlbmQuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2
IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJJbWFnZUJ1
ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFj
ZUJhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kIHsKKyAgICBX
VEZfTUFLRV9JU09fQUxMT0NBVEVEKEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5k
KTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNl
QmFja2VuZCk7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
ckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworICAgIHN0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ+
IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKKworcHJp
dmF0ZToKKyAgICBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZChjb25zdCBGbG9h
dFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmKTsKKwor
ICAgIHZvaWQgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8dWlu
dDhfdCwgMjU2PiYgbG9va1VwVGFibGUpIG92ZXJyaWRlOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTJkMTVmMGJhMjIyMTBmN2ExNzRi
YTcwN2VkMjYxODBjMThmZWE0YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAK
QEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2Vy
IEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgi
CisKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1ZGUgIkNhaXJvT3BlcmF0aW9ucy5o
IgorI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm8uaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgiCisjaW5jbHVkZSAi
SW1hZ2VEYXRhLmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKworI2lmIFVTRShDQUlSTykKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OkltYWdl
QnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBj
b25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNw
YWNlIGNvbG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYgc3VyZmFjZSkKKyAgICA6
IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kKGxvZ2ljYWxTaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1
dGlvblNjYWxlLCBjb2xvclNwYWNlKQorICAgICwgbV9zdXJmYWNlKFdURk1vdmUoc3VyZmFjZSkp
Cit7CisgICAgQVNTRVJUKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKG1fc3VyZmFjZS5nZXQoKSkgPT0g
Q0FJUk9fU1RBVFVTX1NVQ0NFU1MpOworCisgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRS
ZWYoY2Fpcm9fY3JlYXRlKG1fc3VyZmFjZS5nZXQoKSkpOworICAgIG1fcGxhdGZvcm1Db250ZXh0
LnNldENyKGNyLmdldCgpKTsKKyAgICBtX2NvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29u
dGV4dD4oR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KG1fcGxhdGZvcm1D
b250ZXh0KSk7Cit9CisKK0dyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VC
YWNrZW5kOjpjb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKm1fY29udGV4dDsKK30KKwor
dW5zaWduZWQgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpieXRlc1BlclJvdygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShtX3N1cmZh
Y2UuZ2V0KCkpOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJh
Y2tlbmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29u
c3QKK3sKKyAgICBzd2l0Y2ggKGNvcHlCZWhhdmlvcikgeworICAgIGNhc2UgQ29weUJhY2tpbmdT
dG9yZTogeworICAgICAgICBhdXRvIGNvcHkgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNl
X2NyZWF0ZShDQUlST19GT1JNQVRfQVJHQjMyLAorICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF93aWR0aChtX3N1cmZhY2UuZ2V0KCkpLAorICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9oZWlnaHQobV9zdXJmYWNlLmdldCgpKSkpOworCisgICAgICAgIGF1dG8gY3IgPSBhZG9w
dFJlZihjYWlyb19jcmVhdGUoY29weS5nZXQoKSkpOworICAgICAgICBjYWlyb19zZXRfb3BlcmF0
b3IoY3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7CisgICAgICAgIGNhaXJvX3NldF9z
b3VyY2Vfc3VyZmFjZShjci5nZXQoKSwgbV9zdXJmYWNlLmdldCgpLCAwLCAwKTsKKyAgICAgICAg
Y2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOworCisgICAgICAgIHJldHVybiBjb3B5OworICAgIH0KKwor
ICAgIGNhc2UgRG9udENvcHlCYWNraW5nU3RvcmU6CisgICAgICAgIHJldHVybiBtX3N1cmZhY2U7
CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Y2Fp
cm9TdXJmYWNlQ29lcmNlVG9JbWFnZSgpIGNvbnN0Cit7CisgICAgQmFja2luZ1N0b3JlQ29weSBj
b3B5QmVoYXZpb3I7CisgICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUobV9zdXJmYWNlLmdl
dCgpKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UgJiYgY2Fpcm9fc3VyZmFjZV9nZXRfY29u
dGVudChtX3N1cmZhY2UuZ2V0KCkpID09IENBSVJPX0NPTlRFTlRfQ09MT1JfQUxQSEEpCisgICAg
ICAgIGNvcHlCZWhhdmlvciA9IERvbnRDb3B5QmFja2luZ1N0b3JlOworICAgIGVsc2UKKyAgICAg
ICAgY29weUJlaGF2aW9yID0gQ29weUJhY2tpbmdTdG9yZTsKKyAgICByZXR1cm4gY29weU5hdGl2
ZUltYWdlKGNvcHlCZWhhdmlvcik7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNh
aXJvU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEoKSBjb25zdAoreworICAgIGF1dG8gc3VyZmFj
ZSA9IGNhaXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2UoKTsKKyAgICBjYWlyb19zdXJmYWNlX2ZsdXNo
KHN1cmZhY2UuZ2V0KCkpOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGltYWdlRGF0YTsKKyAgICBp
ZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZS5nZXQoKSkpCisgICAgICAgIHJldHVybiBp
bWFnZURhdGE7CisKKyAgICBhdXRvIHBpeGVscyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2Rh
dGEoc3VyZmFjZS5nZXQoKSk7CisgICAgaW1hZ2VEYXRhLmFwcGVuZChwaXhlbHMsIGNhaXJvX2lt
YWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzdXJmYWNlLmdldCgpKSAqCisgICAgICAgIGNhaXJvX2lt
YWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlLmdldCgpKSk7CisKKyAgICByZXR1cm4gaW1h
Z2VEYXRhOworfQorCitSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJh
Y2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwg
Y29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJC
YWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF9kYXRhKG1fc3VyZmFjZS5nZXQoKSkpOworfQorCit2b2lkIEltYWdlQnVmZmVy
Q2Fpcm9TdXJmYWNlQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24g
aW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQoreworICAgIEltYWdlQnVmZmVyQmFj
a2VuZDo6cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQ
b2ludCwgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX3N1cmZhY2UuZ2V0KCkpKTsKKwor
ICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHRvQmFja2VuZENvb3JkaW5hdGVzKHNyY1JlY3Qp
OworICAgIEludFBvaW50IGRlc3RQb2ludFNjYWxlZCA9IHRvQmFja2VuZENvb3JkaW5hdGVzKGRl
c3RQb2ludCk7CisgICAgY2Fpcm9fc3VyZmFjZV9tYXJrX2RpcnR5X3JlY3RhbmdsZShtX3N1cmZh
Y2UuZ2V0KCksIGRlc3RQb2ludFNjYWxlZC54KCksIGRlc3RQb2ludFNjYWxlZC55KCksIHNyY1Jl
Y3RTY2FsZWQud2lkdGgoKSwgc3JjUmVjdFNjYWxlZC5oZWlnaHQoKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNl
QmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzk0OWZmMzczNzQ4ODI0NTUx
ZTNlNGVmZTVhMmI0ZDY2OTNmMDU1MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5o
CkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2Vy
IEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQgOiBwdWJsaWMg
SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQgeworcHVibGljOgorICAgIEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2
ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkpIGNvbnN0IG92ZXJyaWRlOworCisgICAgVmVjdG9yPHVp
bnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8SW1hZ2VEYXRh
PiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0
IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KSBvdmVycmlkZTsKKworcHJv
dGVjdGVkOgorICAgIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNp
emUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmKTsKKworICAg
IE5hdGl2ZUltYWdlUHRyIGNhaXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2UoKSBjb25zdDsKKyAgICB1
bnNpZ25lZCBieXRlc1BlclJvdygpIGNvbnN0IG92ZXJyaWRlOworCisgICAgbXV0YWJsZSBSZWZQ
dHI8Y2Fpcm9fc3VyZmFjZV90PiBtX3N1cmZhY2U7CisgICAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8g
bV9wbGF0Zm9ybUNvbnRleHQgeyBudWxscHRyIH07CisgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBo
aWNzQ29udGV4dD4gbV9jb250ZXh0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyRGF0YUNhaXJvLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDJhNjFlMzU5OTQ2ZWY0YmFkNjkyM2ZkYmY3NTY0YTJlMzlmNzY5
YzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8uaAor
KysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSW1hZ2VCdWZmZXJEYXRhQ2Fpcm9faAotI2Rl
ZmluZSBJbWFnZUJ1ZmZlckRhdGFDYWlyb19oCi0KLSNpZiBVU0UoQ0FJUk8pCi0KLSNpbmNsdWRl
ICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgotI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCi0KLSNp
ZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIu
aCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5
UHJvdmlkZXIuaCIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykg
JiYgVVNFKE5JQ09TSUEpCi0jaW5jbHVkZSAiTmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVNYXBw
ZXJJbXBsLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJbnRTaXpl
OwotY2xhc3MgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTsKLQotY2xhc3MgSW1hZ2VC
dWZmZXJEYXRhCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoTklD
T1NJQSkKLSAgICA6IHB1YmxpYyBOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1w
bDo6Q2xpZW50Ci0jZWxzZQotICAgIDogcHVibGljIFBsYXRmb3JtTGF5ZXIKLSNlbmRpZgotI2Vu
ZGlmCi17Ci1wdWJsaWM6Ci0gICAgSW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEludFNpemUmLCBSZW5k
ZXJpbmdNb2RlKTsKLSAgICB2aXJ0dWFsIH5JbWFnZUJ1ZmZlckRhdGEoKTsKLQotICAgIFJlZlB0
cjxjYWlyb19zdXJmYWNlX3Q+IG1fc3VyZmFjZTsKLSAgICBQbGF0Zm9ybUNvbnRleHRDYWlybyBt
X3BsYXRmb3JtQ29udGV4dDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBt
X2NvbnRleHQ7Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci0gICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRl
cmluZ01vZGU7Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotICAgIHZvaWQg
Y3JlYXRlQ2Fpcm9HTFN1cmZhY2UoKTsKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
LSNpZiBVU0UoTklDT1NJQSkKLSAgICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQoKSBvdmVycmlk
ZTsKLSNlbHNlCi0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IHBy
b3h5KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzd2FwQnVmZmVyc0lmTmVlZGVkKCkgb3Zl
cnJpZGU7Ci0jZW5kaWYKLSAgICB2b2lkIGNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKTsKLQotICAg
IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fY29tcG9zaXRvclN1cmZhY2U7Ci0gICAgdWludDMy
X3QgbV9jb21wb3NpdG9yVGV4dHVyZTsKLSAgICBSZWZQdHI8Y2Fpcm9fdD4gbV9jb21wb3NpdG9y
Q3I7Ci0KLSNpZiBVU0UoTklDT1NJQSkKLSAgICBSZWZQdHI8Tmljb3NpYTo6Q29udGVudExheWVy
PiBtX25pY29zaWFMYXllcjsKLSNlbHNlCi0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyUHJveHk+IG1fcGxhdGZvcm1MYXllclByb3h5OwotI2VuZGlmCi0jZWxzZQotICAgIHZp
cnR1YWwgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiwgY29uc3QgRmxv
YXRSZWN0JiB0YXJnZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0
eSk7Ci0jZW5kaWYKLSAgICB1aW50MzJfdCBtX3RleHR1cmU7Ci0jZW5kaWYKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShDQUlSTykKLQotI2VuZGlmIC8vIElt
YWdlQnVmZmVyRGF0YUNhaXJvX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGFmZDVlNGVjNzE5ZWRiNDkzZjc5ZGJiZmFiZTVhZjkzY2EwNjcwOWIuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OTkg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUg
KEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJJbWFnZUJ1ZmZlci5oIgotCi0jaWYgVVNFKENHKQotCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2Uu
aCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRDRy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKLSNpbmNsdWRlICJJ
bWFnZURhdGEuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVSZWdp
c3RyeS5oIgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdy
YXBoaWNzLmg+Ci0jaW5jbHVkZSA8SW1hZ2VJTy9JbWFnZUlPLmg+Ci0jaW5jbHVkZSA8cGFsL3Nw
aS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2lu
Y2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgotI2luY2x1ZGUgPHd0Zi9EZWJ1Z0hlYXAu
aD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KLQotI2lmIFBMQVRGT1JNKENPQ09BKQotI2luY2x1ZGUgIlVUSVV0aWxpdGllcy5o
IgotI2VuZGlmCi0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotI2lu
Y2x1ZGUgIklPU3VyZmFjZS5oIgotI2luY2x1ZGUgPHBhbC9zcGkvY29jb2EvSU9TdXJmYWNlU1BJ
Lmg+Ci0jZW5kaWYKLQotLy8gQ0EgdXNlcyBBUkdCMzIgZm9yIHRleHR1cmVzIGFuZCBBUkdCMzIg
LT4gQVJHQjMyIHJlc2FtcGxpbmcgaXMgb3B0aW1pemVkLgotI2RlZmluZSBVU0VfQVJHQjMyIFBM
QVRGT1JNKElPU19GQU1JTFkpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotREVDTEFSRV9BTExP
Q0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSW1hZ2VCdWZmZXIpOwotREVGSU5FX0FMTE9DQVRP
Ul9XSVRIX0hFQVBfSURFTlRJRklFUihJbWFnZUJ1ZmZlcik7Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxv
YXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgaWYg
KHNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJldGFpblB0
cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9yU3BhY2U7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAg
Q0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7Ci0gICAg
c3dpdGNoIChDR0NvbnRleHRHZXRUeXBlKGNnQ29udGV4dCkpIHsKLSAgICBjYXNlIGtDR0NvbnRl
eHRUeXBlQml0bWFwOgotICAgICAgICBjb2xvclNwYWNlID0gQ0dCaXRtYXBDb250ZXh0R2V0Q29s
b3JTcGFjZShjZ0NvbnRleHQpOwotICAgICAgICBicmVhazsKLSNpZiBIQVZFKElPU1VSRkFDRSkK
LSAgICBjYXNlIGtDR0NvbnRleHRUeXBlSU9TdXJmYWNlOgotICAgICAgICBjb2xvclNwYWNlID0g
Q0dJT1N1cmZhY2VDb250ZXh0R2V0Q29sb3JTcGFjZShjZ0NvbnRleHQpOwotICAgICAgICBicmVh
azsKLSNlbmRpZgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGNvbG9yU3BhY2UgPSBhZG9wdENGKENH
Q29udGV4dENvcHlEZXZpY2VDb2xvclNwYWNlKGNnQ29udGV4dCkpOwotICAgIH0KLQotICAgIGlm
ICghY29sb3JTcGFjZSkKLSAgICAgICAgY29sb3JTcGFjZSA9IHNSR0JDb2xvclNwYWNlUmVmKCk7
Ci0jZWxzZQotICAgIGNvbG9yU3BhY2UgPSBzUkdCQ29sb3JTcGFjZVJlZigpOwotI2VuZGlmCi0g
ICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlID0gY29udGV4dC5yZW5kZXJpbmdNb2RlKCk7
Ci0gICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJT
aXplKHNpemUsIGNvbnRleHQpOwotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZlcihzY2FsZWRTaXpl
LCAxLCBjb2xvclNwYWNlLmdldCgpLCByZW5kZXJpbmdNb2RlLCBudWxscHRyLCBzdWNjZXNzKSk7
Ci0KLSAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8g
U2V0IHVwIGEgY29ycmVzcG9uZGluZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNzIGNvbnRl
eHQuCi0gICAgYnVmZmVyLT5jb250ZXh0KCkuc2NhbGUoc2NhbGVkU2l6ZSAvIHNpemUpOwotICAg
IHJldHVybiBidWZmZXI7Ci19Ci0KLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9h
dFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ0dDb2xvclNwYWNlUmVmIGNvbG9y
U3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyogaG9z
dFdpbmRvdywgYm9vbCYgc3VjY2VzcykKLSAgICA6IG1fbG9naWNhbFNpemUoc2l6ZSkKLSAgICAs
IG1fcmVzb2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZSkKLXsKLSAgICBzdWNjZXNzID0gZmFs
c2U7IC8vIE1ha2UgZWFybHkgcmV0dXJuIG1lYW4gZmFpbHVyZS4KLSAgICBmbG9hdCBzY2FsZWRX
aWR0aCA9IGNlaWxmKHJlc29sdXRpb25TY2FsZSAqIHNpemUud2lkdGgoKSk7Ci0gICAgZmxvYXQg
c2NhbGVkSGVpZ2h0ID0gY2VpbGYocmVzb2x1dGlvblNjYWxlICogc2l6ZS5oZWlnaHQoKSk7Ci0K
LSAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGF1dG9tYXRpY2FsbHkgdXNlIGEgbG93ZXIgcmVzb2x1
dGlvbj8KLSAgICBpZiAoIUZsb2F0U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KS5pc0V4
cHJlc3NpYmxlQXNJbnRTaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2l6ZSA9IElu
dFNpemUoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCk7Ci0gICAgbV9kYXRhLmJhY2tpbmdTdG9y
ZVNpemUgPSBtX3NpemU7Ci0KLSAgICBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcgPSByZW5kZXJp
bmdNb2RlID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkOwotICAgIGlmIChtX3NpemUud2lk
dGgoKSA8PSAwIHx8IG1fc2l6ZS5oZWlnaHQoKSA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSNp
ZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIENoZWNrZWQ8aW50LCBS
ZWNvcmRPdmVyZmxvdz4gd2lkdGggPSBtX3NpemUud2lkdGgoKTsKLSAgICBDaGVja2VkPGludCwg
UmVjb3JkT3ZlcmZsb3c+IGhlaWdodCA9IG1fc2l6ZS5oZWlnaHQoKTsKLSNlbmRpZgotCi0gICAg
Ly8gUHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cwotICAgIG1fZGF0YS5ieXRlc1BlclJvdyA9IDQg
KiBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4obV9kYXRhLmJhY2tpbmdTdG9yZVNp
emUud2lkdGgoKSk7Ci0gICAgQ2hlY2tlZDxzaXplX3QsIFJlY29yZE92ZXJmbG93PiBudW1CeXRl
cyA9IENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihtX2RhdGEuYmFja2luZ1N0b3Jl
U2l6ZS5oZWlnaHQoKSkgKiBtX2RhdGEuYnl0ZXNQZXJSb3c7Ci0gICAgaWYgKG51bUJ5dGVzLmhh
c092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5W
QVNfQkFDS0lOR19TVE9SRSkKLSAgICBJbnRTaXplIG1heFNpemUgPSBJT1N1cmZhY2U6Om1heGlt
dW1TaXplKCk7Ci0gICAgaWYgKHdpZHRoLnVuc2FmZUdldCgpID4gbWF4U2l6ZS53aWR0aCgpIHx8
IGhlaWdodC51bnNhZmVHZXQoKSA+IG1heFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIGFjY2VsZXJh
dGVSZW5kZXJpbmcgPSBmYWxzZTsKLSNlbHNlCi0gICAgQVNTRVJUKHJlbmRlcmluZ01vZGUgPT0g
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7Ci0jZW5kaWYKLQotICAgIG1fZGF0YS5jb2xv
clNwYWNlID0gY29sb3JTcGFjZTsKLQotICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNnQ29u
dGV4dDsKLSAgICBpZiAoYWNjZWxlcmF0ZVJlbmRlcmluZykgewotI2lmIFVTRShJT1NVUkZBQ0Vf
Q0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgICAgIEZsb2F0U2l6ZSB1c2VyQm91bmRzID0gRmxv
YXRTaXplKHdpZHRoLnVuc2FmZUdldCgpLCBoZWlnaHQudW5zYWZlR2V0KCkpOwotICAgICAgICBt
X2RhdGEuc3VyZmFjZSA9IElPU3VyZmFjZTo6Y3JlYXRlKG1fZGF0YS5iYWNraW5nU3RvcmVTaXpl
LCBJbnRTaXplKHVzZXJCb3VuZHMpLCBjb2xvclNwYWNlKTsKLSAgICAgICAgaWYgKG1fZGF0YS5z
dXJmYWNlKSB7Ci0gICAgICAgICAgICBjZ0NvbnRleHQgPSBtX2RhdGEuc3VyZmFjZS0+ZW5zdXJl
UGxhdGZvcm1Db250ZXh0KGhvc3RXaW5kb3cpOwotICAgICAgICAgICAgaWYgKGNnQ29udGV4dCkK
LSAgICAgICAgICAgICAgICBDR0NvbnRleHRDbGVhclJlY3QoY2dDb250ZXh0LmdldCgpLCBGbG9h
dFJlY3QoRmxvYXRQb2ludCgpLCB1c2VyQm91bmRzKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgbV9kYXRhLnN1cmZhY2UgPSBudWxscHRyOwotICAgICAgICB9Ci0jZWxzZQot
ICAgICAgICBVTlVTRURfUEFSQU0oaG9zdFdpbmRvdyk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKCFj
Z0NvbnRleHQpCi0gICAgICAgICAgICBhY2NlbGVyYXRlUmVuZGVyaW5nID0gZmFsc2U7IC8vIElm
IGFsbG9jYXRpb24gZmFpbHMsIGZhbGwgYmFjayB0byBub24tYWNjZWxlcmF0ZWQgcGF0aC4KLSAg
ICB9Ci0KLSAgICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSAgICAgICAgbV9kYXRhLmRh
dGEgPSBJbWFnZUJ1ZmZlck1hbGxvYzo6dHJ5WmVyb2VkTWFsbG9jKG1fZGF0YS5iYWNraW5nU3Rv
cmVTaXplLmhlaWdodCgpICogbV9kYXRhLmJ5dGVzUGVyUm93LnVuc2FmZUdldCgpKTsKLSAgICAg
ICAgaWYgKCFtX2RhdGEuZGF0YSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQVNTRVJU
KCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9kYXRhLmRhdGEpICYgMykpOwotCi0jaWYg
VVNFX0FSR0IzMgotICAgICAgICBtX2RhdGEuYml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVt
dWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3Q7Ci0jZWxzZQotICAgICAg
ICBtX2RhdGEuYml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdDsKLSNl
bmRpZgotICAgICAgICBjZ0NvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSht
X2RhdGEuZGF0YSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSwgbV9kYXRhLmJhY2tp
bmdTdG9yZVNpemUuaGVpZ2h0KCksIDgsIG1fZGF0YS5ieXRlc1BlclJvdy51bnNhZmVHZXQoKSwg
bV9kYXRhLmNvbG9yU3BhY2UsIG1fZGF0YS5iaXRtYXBJbmZvKSk7Ci0gICAgICAgIGNvbnN0IGF1
dG8gcmVsZWFzZUltYWdlRGF0YSA9IFtdICh2b2lkKiwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90
KSB7Ci0gICAgICAgICAgICBJbWFnZUJ1ZmZlck1hbGxvYzo6ZnJlZShjb25zdF9jYXN0PHZvaWQq
PihkYXRhKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIC8vIENyZWF0ZSBhIGxpdmUgaW1hZ2UgdGhh
dCB3cmFwcyB0aGUgZGF0YS4KLSAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaCht
X2RhdGEuZGF0YSwgbnVtQnl0ZXMudW5zYWZlR2V0KCkpOwotICAgICAgICBtX2RhdGEuZGF0YVBy
b3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAsIG1fZGF0YS5k
YXRhLCBudW1CeXRlcy51bnNhZmVHZXQoKSwgcmVsZWFzZUltYWdlRGF0YSkpOwotCi0gICAgICAg
IGlmICghY2dDb250ZXh0KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1fZGF0YS5j
b250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KGNnQ29udGV4dC5nZXQoKSk7Ci0g
ICAgfQotCi0gICAgY29udGV4dCgpLnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOwotICAgIGNvbnRl
eHQoKS50cmFuc2xhdGUoMCwgLW1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKTsKLSAg
ICBjb250ZXh0KCkuYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihtX3Jlc29sdXRpb25TY2FsZSk7Ci0K
LSAgICBzdWNjZXNzID0gdHJ1ZTsKLX0KLQotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGltYWdl
Q29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93
KiBob3N0V2luZG93LCBib29sJiBzdWNjZXNzKQotICAgIDogSW1hZ2VCdWZmZXIoc2l6ZSwgcmVz
b2x1dGlvblNjYWxlLCBjYWNoZWRDR0NvbG9yU3BhY2UoaW1hZ2VDb2xvclNwYWNlKSwgcmVuZGVy
aW5nTW9kZSwgaG9zdFdpbmRvdywgc3VjY2VzcykKLXsKLX0KLQotSW1hZ2VCdWZmZXI6On5JbWFn
ZUJ1ZmZlcigpID0gZGVmYXVsdDsKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdf
U1RPUkUpCi1zaXplX3QgSW1hZ2VCdWZmZXI6Om1lbW9yeUNvc3QoKSBjb25zdAotewotICAgIC8v
IG1lbW9yeUNvc3QoKSBtYXkgYmUgaW52b2tlZCBjb25jdXJyZW50bHkgZnJvbSBhIEdDIHRocmVh
ZCwgYW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB3aGF0IGRhdGEgd2UgYWNjZXNzIGhl
cmUgYW5kIGhvdy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIGludGVybmFsU2l6ZSgpIGJl
Y2F1c2UgaXQgZG9lc24ndCBkbyBhbnkgcG9pbnRlciBjaGFzaW5nLgotICAgIC8vIEl0J3Mgc2Fm
ZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZhY2UgYmVjYXVzZSB0aGUgc3VyZmFjZSBjYW4gb25seSBi
ZSBhc3NpZ25lZCBkdXJpbmcgY29uc3RydWN0aW9uIG9mIHRoaXMgSW1hZ2VCdWZmZXIuCi0gICAg
Ly8gSXQncyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFjZS0+dG90YWxCeXRlcygpIGJlY2F1
c2UgdG90YWxCeXRlcygpIGRvZXNuJ3QgY2hhc2UgcG9pbnRlcnMuCi0gICAgaWYgKG1fZGF0YS5z
dXJmYWNlKQotICAgICAgICByZXR1cm4gbV9kYXRhLnN1cmZhY2UtPnRvdGFsQnl0ZXMoKTsKLSAg
ICByZXR1cm4gNCAqIGludGVybmFsU2l6ZSgpLndpZHRoKCkgKiBpbnRlcm5hbFNpemUoKS5oZWln
aHQoKTsKLX0KLQotc2l6ZV90IEltYWdlQnVmZmVyOjpleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25z
dAotewotICAgIC8vIGV4dGVybmFsTWVtb3J5Q29zdCgpIG1heSBiZSBpbnZva2VkIGNvbmN1cnJl
bnRseSBmcm9tIGEgR0MgdGhyZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IHdo
YXQgZGF0YSB3ZSBhY2Nlc3MgaGVyZSBhbmQgaG93LgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nl
c3MgbV9kYXRhLnN1cmZhY2UgYmVjYXVzZSB0aGUgc3VyZmFjZSBjYW4gb25seSBiZSBhc3NpZ25l
ZCBkdXJpbmcgY29uc3RydWN0aW9uIG9mIHRoaXMgSW1hZ2VCdWZmZXIuCi0gICAgLy8gSXQncyBz
YWZlIHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFjZS0+dG90YWxCeXRlcygpIGJlY2F1c2UgdG90YWxC
eXRlcygpIGRvZXNuJ3QgY2hhc2UgcG9pbnRlcnMuCi0gICAgaWYgKG1fZGF0YS5zdXJmYWNlKQot
ICAgICAgICByZXR1cm4gbV9kYXRhLnN1cmZhY2UtPnRvdGFsQnl0ZXMoKTsKLSAgICByZXR1cm4g
MDsKLX0KLSNlbmRpZgotCi1HcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyOjpjb250ZXh0KCkg
Y29uc3QKLXsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGlm
IChtX2RhdGEuc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5zdXJmYWNlLT5lbnN1cmVH
cmFwaGljc0NvbnRleHQoKTsKLSNlbmRpZgotICAgIHJldHVybiAqbV9kYXRhLmNvbnRleHQ7Ci19
Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmZsdXNoQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgQ0dDb250
ZXh0Rmx1c2goY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKTsKLX0KLQotc3RhdGljIFJldGFp
blB0cjxDR0ltYWdlUmVmPiBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShDR0ltYWdlUmVm
IGltYWdlLCBjb25zdCBJbnRTaXplJiBib3VuZHMpCi17Ci0gICAgaWYgKGltYWdlICYmIChDR0lt
YWdlR2V0V2lkdGgoaW1hZ2UpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYm91bmRzLndpZHRoKCkp
IHx8IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYm91bmRz
LmhlaWdodCgpKSkpCi0gICAgICAgIHJldHVybiBhZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoSW1h
Z2VJblJlY3QoaW1hZ2UsIENHUmVjdE1ha2UoMCwgMCwgYm91bmRzLndpZHRoKCksIGJvdW5kcy5o
ZWlnaHQoKSkpKTsKLSAgICByZXR1cm4gaW1hZ2U7Ci19Ci0KLXN0YXRpYyBSZWZQdHI8SW1hZ2U+
IGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoUmV0YWluUHRyPENHSW1hZ2VS
ZWY+JiYgaW1hZ2UsIEludFNpemUgbG9naWNhbFNpemUsIEludFNpemUgaW50ZXJuYWxTaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRp
b24pCi17Ci0gICAgaWYgKHJlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlv
biA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKLSAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9w
cGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50ZXJuYWxTaXplKTsKLSAgICBlbHNl
IHsKLSAgICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUo
MCwgbG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCksIDgsIDQgKiBsb2dp
Y2FsU2l6ZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVs
dGlwbGllZExhc3QpKTsKLSAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0
KCksIGtDR0JsZW5kTW9kZUNvcHkpOwotICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRl
eHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGxvZ2ljYWxTaXplKSk7Ci0g
ICAgICAgIEZsb2F0U2l6ZSBpbWFnZVNpemVJblVzZXJTcGFjZSA9IGxvZ2ljYWxTaXplOwotICAg
ICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9p
bnQ6Onplcm8oKSwgaW1hZ2VTaXplSW5Vc2VyU3BhY2UpLCBpbWFnZS5nZXQoKSk7Ci0gICAgICAg
IGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0LmdldCgp
KSk7Ci0gICAgfQotCi0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKGltYWdlKSk7Ci19Ci0KLVJl
ZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlC
ZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsK
LSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgaWYgKG1fcmVzb2x1dGlvblNj
YWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVz
KQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOwotICAgIGVs
c2UKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUp
OwotCi0gICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoV1RG
TW92ZShpbWFnZSksIGxvZ2ljYWxTaXplKCksIGludGVybmFsU2l6ZSgpLCBtX3Jlc29sdXRpb25T
Y2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKLX0KLQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZl
cjo6c2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVy
LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQotewotICAgIEludFNpemUg
aW50ZXJuYWxTaXplID0gaW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpOwotICAgIEludFNpemUg
bG9naWNhbFNpemUgPSBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKTsKLSAgICBmbG9hdCByZXNv
bHV0aW9uU2NhbGUgPSBpbWFnZUJ1ZmZlci0+bV9yZXNvbHV0aW9uU2NhbGU7Ci0KLSAgICByZXR1
cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChzaW5rSW50b05hdGl2ZUlt
YWdlKFdURk1vdmUoaW1hZ2VCdWZmZXIpKSwgbG9naWNhbFNpemUsIGludGVybmFsU2l6ZSwgcmVz
b2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwotfQotCi1SZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcikKLXsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNL
SU5HX1NUT1JFKQotICAgIGlmICghaW1hZ2VCdWZmZXItPm1fZGF0YS5zdXJmYWNlKQotICAgICAg
ICByZXR1cm4gaW1hZ2VCdWZmZXItPmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9y
ZSk7Ci0KLSAgICByZXR1cm4gSU9TdXJmYWNlOjpzaW5rSW50b0ltYWdlKElPU3VyZmFjZTo6Y3Jl
YXRlRnJvbUltYWdlQnVmZmVyKFdURk1vdmUoaW1hZ2VCdWZmZXIpKSk7Ci0jZWxzZQotICAgIHJl
dHVybiBpbWFnZUJ1ZmZlci0+Y29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsK
LSNlbmRpZgotfQotCi1SZXRhaW5QdHI8Q0dJbWFnZVJlZj4gSW1hZ2VCdWZmZXI6OmNvcHlOYXRp
dmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QKLXsKLSAgICBSZXRh
aW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgaWYgKCFjb250ZXh0KCkuaXNBY2NlbGVyYXRl
ZENvbnRleHQoKSkgewotICAgICAgICBzd2l0Y2ggKGNvcHlCZWhhdmlvcikgewotICAgICAgICBj
YXNlIERvbnRDb3B5QmFja2luZ1N0b3JlOgotICAgICAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENH
SW1hZ2VDcmVhdGUobV9kYXRhLmJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSwgbV9kYXRhLmJhY2tp
bmdTdG9yZVNpemUuaGVpZ2h0KCksIDgsIDMyLCBtX2RhdGEuYnl0ZXNQZXJSb3cudW5zYWZlR2V0
KCksIG1fZGF0YS5jb2xvclNwYWNlLCBtX2RhdGEuYml0bWFwSW5mbywgbV9kYXRhLmRhdGFQcm92
aWRlci5nZXQoKSwgMCwgdHJ1ZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29weUJhY2tpbmdTdG9yZToKLSAgICAgICAgICAg
IGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0KCkucGxh
dGZvcm1Db250ZXh0KCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgIH0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQot
ICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBtX2RhdGEuc3VyZmFjZS0+Y3JlYXRlSW1hZ2UoKTsK
LSNlbmRpZgotCi0gICAgcmV0dXJuIGltYWdlOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3
Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIEdyYXBo
aWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
Ci17Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBpZiAoIWlt
YWdlQnVmZmVyLT5tX2RhdGEuc3VyZmFjZSkgewotICAgICAgICBpbWFnZUJ1ZmZlci0+ZHJhdyhk
ZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIAotICAgIEFTU0VSVChkZXN0Q29udGV4dC5pc0FjY2VsZXJhdGVkQ29udGV4
dCgpKTsKLSAgICAKLSAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSBpbWFnZUJ1ZmZlci0+bV9y
ZXNvbHV0aW9uU2NhbGU7Ci0gICAgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplID0gaW1hZ2VCdWZm
ZXItPm1fZGF0YS5iYWNraW5nU3RvcmVTaXplOwotCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+
IGltYWdlID0gSU9TdXJmYWNlOjpzaW5rSW50b0ltYWdlKElPU3VyZmFjZTo6Y3JlYXRlRnJvbUlt
YWdlQnVmZmVyKFdURk1vdmUoaW1hZ2VCdWZmZXIpKSk7Ci0gICAgCi0gICAgRmxvYXRSZWN0IGFk
anVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKHJlc29s
dXRpb25TY2FsZSk7Ci0gICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLmdldCgp
LCBiYWNraW5nU3RvcmVTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsK
LSNlbHNlCi0gICAgaW1hZ2VCdWZmZXItPmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNS
ZWN0LCBvcHRpb25zKTsKLSNlbmRpZgotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBo
aWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
Ci17Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOwotICAgIGlmICgmZGVzdENvbnRl
eHQgPT0gJmNvbnRleHQoKSB8fCBkZXN0Q29udGV4dC5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQot
ICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsgLy8gRHJh
d2luZyBpbnRvIG91ciBvd24gYnVmZmVyLCBuZWVkIHRvIGRlZXAgY29weS4KLSAgICBlbHNlCi0g
ICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLQot
ICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGFkanVzdGVkU3Jj
UmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgZGVzdENvbnRleHQuZHJhd05hdGl2
ZUltYWdlKGltYWdlLmdldCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSwgZGVzdFJlY3QsIGFk
anVzdGVkU3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0
ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0
ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBGbG9h
dFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1c3RlZFNyY1JlY3Quc2Nh
bGUobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgaWYgKCFjb250ZXh0KCkuaXNBY2NlbGVyYXRl
ZENvbnRleHQoKSkgewotICAgICAgICBpZiAoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgfHwg
ZGVzdENvbnRleHQuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkgewotICAgICAgICAgICAgaWYgKFJl
ZlB0cjxJbWFnZT4gY29weSA9IGNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKSkgLy8gRHJhd2lu
ZyBpbnRvIG91ciBvd24gYnVmZmVyLCBuZWVkIHRvIGRlZXAgY29weS4KLSAgICAgICAgICAgICAg
ICBjb3B5LT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVj
dCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgaWYgKFJlZlB0cjxJbWFnZT4gaW1hZ2VGb3JSZW5kZXJpbmcg
PSBjb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKQotICAgICAgICAgICAgICAgIGltYWdl
Rm9yUmVuZGVyaW5nLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVk
U3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAg
ICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKFJlZlB0cjxJbWFnZT4gY29weSA9IGNv
cHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJu
KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3Jt
LCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgfQotfQotCi1SZWZQdHI8VWludDhDbGFt
cGVkQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50
UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0
ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxl
cmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVjdCBz
cmNSZWN0ID0gcmVjdDsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBMb2dpY2FsQ29vcmRp
bmF0ZVN5c3RlbSkKLSAgICAgICAgc3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0K
LSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lvbnMpCi0gICAgICAgICpwaXhlbEFycmF5RGltZW5z
aW9ucyA9IHNyY1JlY3Quc2l6ZSgpOwotCi0gICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgc3JjUmVjdCwgaW50ZXJuYWxTaXpl
KCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKLX0KLQotUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25z
dCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0
ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIGlmIChjb250ZXh0KCkuaXNB
Y2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBJbnRS
ZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxD
b29yZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxl
KTsKLQotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlE
aW1lbnNpb25zID0gc3JjUmVjdC5zaXplKCk7Ci0KLSAgICByZXR1cm4gbV9kYXRhLmdldERhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc3JjUmVjdCwgaW50ZXJuYWxT
aXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKLX0KLQotdm9pZCBJbWFn
ZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VT
aXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50
LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pCi17Ci0gICAgaWYgKGNvbnRleHQo
KS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLQotICAg
IEludFJlY3Qgc2NhbGVkU291cmNlUmVjdCA9IHNvdXJjZVJlY3Q7Ci0gICAgSW50U2l6ZSBzY2Fs
ZWRTb3VyY2VTaXplID0gc291cmNlU2l6ZTsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBM
b2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkgewotICAgICAgICBzY2FsZWRTb3VyY2VSZWN0LnNjYWxl
KG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICAgICAgc2NhbGVkU291cmNlU2l6ZS5zY2FsZShtX3Jl
c29sdXRpb25TY2FsZSk7Ci0gICAgfQotCi0gICAgbV9kYXRhLnB1dERhdGEoc291cmNlLCBzb3Vy
Y2VGb3JtYXQsIHNjYWxlZFNvdXJjZVNpemUsIHNjYWxlZFNvdXJjZVJlY3QsIGRlc3RQb2ludCwg
aW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKLSAgICAK
LSAgICAvLyBGb3JjZSByZWNyZWF0aW5nIHRoZSBJT1N1cmZhY2UgY2FjaGVkIGltYWdlIGlmIGl0
IGlzIHJlcXVlc3RlZCB0aHJvdWdoIENHSU9TdXJmYWNlQ29udGV4dENyZWF0ZUltYWdlKCkuCi0g
ICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc5NjYg
Zm9yIGV4cGxhaW5pbmcgd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LgotICAgIGlmIChjb250ZXh0KCku
aXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgY29udGV4dCgpLmZpbGxSZWN0KEZsb2F0
UmVjdCgxLCAxLCAwLCAwKSk7Ci19Ci0KLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVS
ZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBpZiAoYXV0byBkYXRh
ID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIHByZXNlcnZlUmVzb2x1dGlvbikpCi0gICAg
ICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBlKTsKLSAgICByZXR1cm4gImRh
dGE6LCJfczsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0RhdGEoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAotewotICAg
IGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0eSwgUHJlc2VydmVSZXNv
bHV0aW9uOjpObykpCi0gICAgICAgIHJldHVybiBkYXRhVmVjdG9yKGRhdGEuZ2V0KCkpOwotICAg
IHJldHVybiB7IH07Ci19Ci0KLVJldGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVyOjp0b0NG
RGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFBy
ZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgQVNTRVJU
KE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1p
bWVUeXBlKSk7Ci0KLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0g
ICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgYXV0byB1dGkgPSB1dGlGcm9tSW1hZ2VCdWZm
ZXJNSU1FVHlwZShtaW1lVHlwZSk7Ci0gICAgQVNTRVJUKHV0aSk7Ci0KLSAgICBSZXRhaW5QdHI8
Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwcmVtdWx0
aXBsaWVkRGF0YTsKLQotICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwganBlZ1VUSSgpKSkgewot
ICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWwsIHNvIHdlIGhhdmUg
dG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4KLSAgICAgICAgcHJlbXVsdGlw
bGllZERhdGEgPSBnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwg
bG9naWNhbFNpemUoKSkpOwotICAgICAgICBpZiAoIXByZW11bHRpcGxpZWREYXRhKQotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgc2l6ZV90IGRhdGFTaXplID0gNCAqIGxv
Z2ljYWxTaXplKCkud2lkdGgoKSAqIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCk7Ci0gICAgICAgIHZl
cmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2gocHJlbXVsdGlwbGllZERhdGEtPmRhdGEoKSwgZGF0
YVNpemUpOwotICAgICAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlk
ZXJDcmVhdGVXaXRoRGF0YShudWxscHRyLCBwcmVtdWx0aXBsaWVkRGF0YS0+ZGF0YSgpLCBkYXRh
U2l6ZSwgbnVsbHB0cikpOwotICAgICAgICBpZiAoIWRhdGFQcm92aWRlcikKLSAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgICAgIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRl
KGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSwgOCwgMzIsIDQg
KiBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5
dGVPcmRlckRlZmF1bHQgfCBrQ0dJbWFnZUFscGhhTm9uZVNraXBMYXN0LCBkYXRhUHJvdmlkZXIu
Z2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7Ci0gICAgfSBlbHNl
IGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVz
ZXJ2ZVJlc29sdXRpb246OlllcykgewotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShD
b3B5QmFja2luZ1N0b3JlKTsKLSAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5l
Y2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50ZXJuYWxTaXplKCkpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLSAgICAg
ICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwgbG9naWNh
bFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpLCA4LCA0ICogbG9naWNhbFNp
emUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlw
bGllZExhc3QpKTsKLSAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCks
IGtDR0JsZW5kTW9kZUNvcHkpOwotICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQu
Z2V0KCksIENHUmVjdE1ha2UoMCwgMCwgbG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6
ZSgpLmhlaWdodCgpKSk7Ci0gICAgICAgIEZsb2F0U2l6ZSBpbWFnZVNpemVJblVzZXJTcGFjZSA9
IGxvZ2ljYWxTaXplKCk7Ci0gICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgp
LCBDR1JlY3RNYWtlKDAsIDAsIGltYWdlU2l6ZUluVXNlclNwYWNlLndpZHRoKCksIGltYWdlU2l6
ZUluVXNlclNwYWNlLmhlaWdodCgpKSwgaW1hZ2UuZ2V0KCkpOwotICAgICAgICBpbWFnZSA9IGFk
b3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQoKSkpOwotICAgIH0K
LQotICAgIGF1dG8gY2ZEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9j
YXRvckRlZmF1bHQsIDApKTsKLSAgICBpZiAoIWVuY29kZUltYWdlKGltYWdlLmdldCgpLCB1dGku
Z2V0KCksIHF1YWxpdHksIGNmRGF0YS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgcmV0dXJuIFdURk1vdmUoY2ZEYXRhKTsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdl
QnVmZmVyOjp0b0JHUkFEYXRhKCkgY29uc3QKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxl
cmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotICAgIHJldHVybiBtX2Rh
dGEudG9CR1JBRGF0YShjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSwgbV9zaXplLndp
ZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzFjZDIzNzU4MWY5NWQw
Y2NhY2I4MmM4NGZjMjY0ZjkyYTc5YjNlYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcApAQCAtMCww
ICsxLDI1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCIK
KworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCisj
aW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIk1J
TUVUeXBlUmVnaXN0cnkuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFKQorI2luY2x1ZGUgPEFjY2Vs
ZXJhdGUvQWNjZWxlcmF0ZS5oPgorI2VuZGlmCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVH
cmFwaGljcy5oPgorI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQ6OmNvbnRleHRDb2xvclNwYWNlKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkKK3sKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0
ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKKworICAgIGlmIChDR0NvbnRleHRHZXRUeXBl
KGNnQ29udGV4dCkgPT0ga0NHQ29udGV4dFR5cGVCaXRtYXApCisgICAgICAgIHJldHVybiBDR0Jp
dG1hcENvbnRleHRHZXRDb2xvclNwYWNlKGNnQ29udGV4dCk7CisgICAgCisgICAgcmV0dXJuIGFk
b3B0Q0YoQ0dDb250ZXh0Q29weURldmljZUNvbG9yU3BhY2UoY2dDb250ZXh0KSk7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKKyAgICByZXR1cm4gbnVsbHB0cjsKKyNlbmRpZgor
fQorIworCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpzZXR1cENvbnRleHQoKQoreworICAg
IGNvbnRleHQoKS5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICBjb250ZXh0KCkudHJhbnNs
YXRlKDAsIC1tX2JhY2tlbmRTaXplLmhlaWdodCgpKTsKKyAgICBjb250ZXh0KCkuYXBwbHlEZXZp
Y2VTY2FsZUZhY3RvcihtX3Jlc29sdXRpb25TY2FsZSk7Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8
Q0dJbWFnZVJlZj4gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoQ0dJbWFnZVJlZiBpbWFn
ZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNpemUpCit7CisgICAgaWYgKGltYWdlICYmIChDR0lt
YWdlR2V0V2lkdGgoaW1hZ2UpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYmFja2VuZFNpemUud2lk
dGgoKSkgfHwgQ0dJbWFnZUdldEhlaWdodChpbWFnZSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihi
YWNrZW5kU2l6ZS5oZWlnaHQoKSkpKQorICAgICAgICByZXR1cm4gYWRvcHRDRihDR0ltYWdlQ3Jl
YXRlV2l0aEltYWdlSW5SZWN0KGltYWdlLCBDR1JlY3RNYWtlKDAsIDAsIGJhY2tlbmRTaXplLndp
ZHRoKCksIGJhY2tlbmRTaXplLmhlaWdodCgpKSkpOworICAgIHJldHVybiBpbWFnZTsKK30KKwor
c3RhdGljIFJlZlB0cjxJbWFnZT4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRl
ZChSZXRhaW5QdHI8Q0dJbWFnZVJlZj4mJiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgbG9naWNhbFNp
emUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFBy
ZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAgaWYgKHJlc29sdXRp
b25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246
OlllcykKKyAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFn
ZS5nZXQoKSwgYmFja2VuZFNpemUpOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGNvbnRleHQg
PSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBs
b2dpY2FsU2l6ZS5oZWlnaHQoKSwgOCwgNCAqIGxvZ2ljYWxTaXplLndpZHRoKCksIHNSR0JDb2xv
clNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOworICAgICAgICBD
R0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7Cisg
ICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0
UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUpKTsKKyAgICAgICAgRmxvYXRTaXplIGltYWdlU2l6
ZUluVXNlclNwYWNlID0gbG9naWNhbFNpemU7CisgICAgICAgIENHQ29udGV4dERyYXdJbWFnZShj
b250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBpbWFnZVNpemVJblVz
ZXJTcGFjZSksIGltYWdlLmdldCgpKTsKKyAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFw
Q29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0KCkpKTsKKyAgICB9CisKKyAgICBpZiAoIWlt
YWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBCaXRtYXBJbWFnZTo6
Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsKK30KKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckNH
QmFja2VuZDo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2
ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIE5hdGl2ZUltYWdl
UHRyIGltYWdlOworICAgIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVz
b2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKKyAgICAgICAgaW1hZ2UgPSBjb3B5
TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKKyAgICBlbHNlCisgICAgICAgIGltYWdlID0gY29w
eU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKKyAgICByZXR1cm4gY3JlYXRlQml0
bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChXVEZNb3ZlKGltYWdlKSwgbV9sb2dpY2FsU2l6
ZSwgbV9iYWNrZW5kU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7
Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnNpbmtJbnRvSW1hZ2Uo
UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAgICByZXR1cm4gY3Jl
YXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChzaW5rSW50b05hdGl2ZUltYWdlKCks
IG1fbG9naWNhbFNpemUsIG1fYmFja2VuZFNpemUsIG1fcmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2
ZVJlc29sdXRpb24pOworfQorCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3KEdyYXBo
aWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
Cit7CisgICAgRmxvYXRSZWN0IHNyY1JlY3RTY2FsZWQgPSBzcmNSZWN0OworICAgIHNyY1JlY3RT
Y2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgaWYgKGF1dG8gaW1hZ2UgPSBj
b3B5TmF0aXZlSW1hZ2UoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0
b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUpKQorICAgICAgICBkZXN0Q29udGV4dC5kcmF3TmF0
aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIG1fYmFja2VuZFNpemUsIGRlc3RSZWN0LCBzcmNSZWN0U2Nh
bGVkLCBvcHRpb25zKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhd1BhdHRl
cm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRl
cm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEZsb2F0
UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGFkanVzdGVkU3JjUmVjdC5zY2Fs
ZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlJbWFnZSgm
ZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJh
Y2tpbmdTdG9yZSkpCisgICAgICAgIGltYWdlLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVz
dFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcs
IG9wdGlvbnMpOworfQorCitBZmZpbmVUcmFuc2Zvcm0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmJh
c2VUcmFuc2Zvcm0oKSBjb25zdAoreworICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oMSwgMCwg
MCwgLTEsIDAsIG1fbG9naWNhbFNpemUuaGVpZ2h0KCkpOworfQorCitSZXRhaW5QdHI8Q0ZEYXRh
UmVmPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVS
ZXNvbHV0aW9uKSBjb25zdAoreworICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBv
cnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOworCisgICAgYXV0byB1dGkg
PSB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7CisgICAgQVNTRVJUKHV0aSk7
CisKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7CisgICAgUmVmUHRyPFVpbnQ4Q2xh
bXBlZEFycmF5PiBwcm90ZWN0ZWRQaXhlbEFycmF5OworCisgICAgaWYgKENGRXF1YWwodXRpLmdl
dCgpLCBqcGVnVVRJKCkpKSB7CisgICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUgYW4gYWxwaGEg
Y2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9wIG9mIGJsYWNr
LgorICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBsb2dpY2FsUmVjdCgpKTsKKyAgICAgICAgaWYgKCFpbWFn
ZURhdGEpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBwcm90ZWN0ZWRQ
aXhlbEFycmF5ID0gbWFrZVJlZlB0cihpbWFnZURhdGEtPmRhdGEoKSk7CisgICAgICAgIHNpemVf
dCBkYXRhU2l6ZSA9IHByb3RlY3RlZFBpeGVsQXJyYXktPmJ5dGVMZW5ndGgoKTsKKyAgICAgICAg
SW50U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9ucyA9IGltYWdlRGF0YS0+c2l6ZSgpOworCisgICAg
ICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2gocHJvdGVjdGVkUGl4ZWxBcnJheS0+ZGF0
YSgpLCBkYXRhU2l6ZSk7CisgICAgICAgIGF1dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0Rh
dGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKG51bGxwdHIsIHByb3RlY3RlZFBpeGVsQXJyYXktPmRh
dGEoKSwgZGF0YVNpemUsIG51bGxwdHIpKTsKKyAgICAgICAgaWYgKCFkYXRhUHJvdmlkZXIpCisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJ
bWFnZUNyZWF0ZShwaXhlbEFycmF5RGltZW5zaW9ucy53aWR0aCgpLCBwaXhlbEFycmF5RGltZW5z
aW9ucy5oZWlnaHQoKSwgOCwgMzIsIDQgKiBwaXhlbEFycmF5RGltZW5zaW9ucy53aWR0aCgpLCBz
UkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwga0NHSW1hZ2VB
bHBoYU5vbmVTa2lwTGFzdCwgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVy
aW5nSW50ZW50RGVmYXVsdCkpOworICAgIH0gZWxzZSBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0g
MSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpIHsKKyAg
ICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7CisgICAgICAg
IGltYWdlID0gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoaW1hZ2UuZ2V0KCksIGJhY2tl
bmRTaXplKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdl
KERvbnRDb3B5QmFja2luZ1N0b3JlKTsKKyAgICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihD
R0JpdG1hcENvbnRleHRDcmVhdGUoMCwgYmFja2VuZFNpemUoKS53aWR0aCgpLCBiYWNrZW5kU2l6
ZSgpLmhlaWdodCgpLCA4LCA0ICogYmFja2VuZFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFj
ZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKKyAgICAgICAgQ0dDb250
ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOworICAgICAg
ICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgYmFj
a2VuZFNpemUoKS53aWR0aCgpLCBiYWNrZW5kU2l6ZSgpLmhlaWdodCgpKSk7CisgICAgICAgIENH
Q29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGJhY2tlbmRT
aXplKCkud2lkdGgoKSwgYmFja2VuZFNpemUoKS5oZWlnaHQoKSksIGltYWdlLmdldCgpKTsKKyAg
ICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQu
Z2V0KCkpKTsKKyAgICB9CisKKyAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRl
TXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7CisgICAgaWYgKCFlbmNvZGVJbWFnZShp
bWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7Cit9CisKK1ZlY3Rv
cjx1aW50OF90PiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKK3sKKyAgICBpZiAoYXV0byBk
YXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8p
KQorICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdldCgpKTsKKyAgICByZXR1cm4geyB9
OworfQorCitTdHJpbmcgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YVVSTChjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlv
biBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZE
YXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pKQorICAgICAgICByZXR1
cm4gZGF0YVVSTChkYXRhLmdldCgpLCBtaW1lVHlwZSk7CisgICAgcmV0dXJuICJkYXRhOiwiX3M7
Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFURSkKK3N0YXRpYyBpbmxpbmUgdkltYWdlX0J1ZmZlciBt
YWtlVkltYWdlQnVmZmVyKHVuc2lnbmVkIGJ5dGVzUGVyUm93LCB1aW50OF90KiByb3dzLCBjb25z
dCBJbnRTaXplJiBzaXplKQoreworICAgIHZJbWFnZV9CdWZmZXIgdkltYWdlQnVmZmVyOworCisg
ICAgdkltYWdlQnVmZmVyLmhlaWdodCA9IHN0YXRpY19jYXN0PHZJbWFnZVBpeGVsQ291bnQ+KHNp
emUuaGVpZ2h0KCkpOworICAgIHZJbWFnZUJ1ZmZlci53aWR0aCA9IHN0YXRpY19jYXN0PHZJbWFn
ZVBpeGVsQ291bnQ+KHNpemUud2lkdGgoKSk7CisgICAgdkltYWdlQnVmZmVyLnJvd0J5dGVzID0g
Ynl0ZXNQZXJSb3c7CisgICAgdkltYWdlQnVmZmVyLmRhdGEgPSByb3dzOworICAgIHJldHVybiB2
SW1hZ2VCdWZmZXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5SW1hZ2VQaXhlbHNBY2Nl
bGVyYXRlZCgKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xv
ckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdkltYWdlX0J1ZmZlciYgc3JjLAorICAgIEFscGhhUHJl
bXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3Jt
YXQsIHZJbWFnZV9CdWZmZXImIGRlc3QpCit7CisgICAgaWYgKHNyY0FscGhhRm9ybWF0ID09IGRl
c3RBbHBoYUZvcm1hdCkgeworICAgICAgICBBU1NFUlQoc3JjQ29sb3JGb3JtYXQgIT0gZGVzdENv
bG9yRm9ybWF0KTsKKyAgICAgICAgQVNTRVJUKGRlc3RBbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKworICAgICAgICAvLyBTd2FwIHBpeGVsIGNo
YW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAy
LCAxLCAwLCAzIH07CisgICAgICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmc3Jj
LCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoZGVzdEFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCkgeworICAgICAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gQ29sb3JGb3JtYXQ6
OlJHQkEpCisgICAgICAgICAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3Jj
LCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2SW1h
Z2VVbnByZW11bHRpcGx5RGF0YV9CR1JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3Mp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChzcmNDb2xvckZvcm1hdCA9PSBDb2xvckZvcm1h
dDo6UkdCQSkKKyAgICAgICAgICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3Jj
LCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2SW1h
Z2VQcmVtdWx0aXBseURhdGFfQkdSQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsK
KyAgICB9CisKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgIT0gZGVzdENvbG9yRm9ybWF0KSB7Cisg
ICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICAgICAgY29u
c3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKKyAgICAgICAgdkltYWdlUGVybXV0
ZUNoYW5uZWxzX0FSR0I4ODg4KCZkZXN0LCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7Cisg
ICAgfQorfQorCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMoCisg
ICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgc3Jj
Q29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAor
ICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBk
ZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJv
d3MsIGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0Cit7CisgICAgaWYgKHNyY0FscGhhRm9ybWF0
ID09IGRlc3RBbHBoYUZvcm1hdCAmJiBzcmNDb2xvckZvcm1hdCA9PSBkZXN0Q29sb3JGb3JtYXQp
IHsKKyAgICAgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMoc3JjQWxwaGFG
b3JtYXQsIHNyY0NvbG9yRm9ybWF0LCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywgZGVzdEFscGhh
Rm9ybWF0LCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNpemUp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdkltYWdlX0J1ZmZlciBzcmMgPSBtYWtl
VkltYWdlQnVmZmVyKHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBzaXplKTsKKyAgICB2SW1hZ2Vf
QnVmZmVyIGRlc3QgPSBtYWtlVkltYWdlQnVmZmVyKGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3Ms
IHNpemUpOworCisgICAgY29weUltYWdlUGl4ZWxzQWNjZWxlcmF0ZWQoc3JjQWxwaGFGb3JtYXQs
IHNyY0NvbG9yRm9ybWF0LCBzcmMsIGRlc3RBbHBoYUZvcm1hdCwgZGVzdENvbG9yRm9ybWF0LCBk
ZXN0KTsKK30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBV
U0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jN2NhMzk4MDM0ZjI1YTMzNDky
NDdkNDM0ZjVmNjU5ZjkyYWYzZDQzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaApAQCAtMCwwICsxLDYz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJCYWNrZW5kIHsKK3B1YmxpYzoKKyAgICBS
ZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9y
ZSwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Qgb3Zl
cnJpZGU7CisgICAgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlv
bikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJikgb3ZlcnJpZGU7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9y
bSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0IG92ZXJyaWRlOworCitw
cm90ZWN0ZWQ6CisgICAgdXNpbmcgSW1hZ2VCdWZmZXJCYWNrZW5kOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ7CisKKyAgICBzdGF0aWMgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29udGV4dENvbG9y
U3BhY2UoY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisgICAgdm9pZCBzZXR1cENvbnRleHQoKTsK
KyAgICB2aXJ0dWFsIFJldGFpblB0cjxDRkRhdGFSZWY+IHRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBj
b25zdDsKKworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIHZvaWQgY29weUltYWdlUGl4ZWxzKAor
ICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1h
dCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jv
d3MsCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xv
ckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhf
dCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmKSBjb25zdCBvdmVycmlkZTsKKyNlbmRpZgorfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkzODNjOTk2ZTU0ZDBiMDQ3MTNm
ZGM3NDJjMjE0MzZkMzgwN2U4NDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKQEAgLTAs
MCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNr
ZW5kLmgiCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0
aWVzQ0cuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisj
aW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKK2NvbnN0ZXhwciBjb25zdCBDR0JpdG1hcEluZm8g
RGVmYXVsdEJpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NH
Qml0bWFwQnl0ZU9yZGVyMzJIb3N0OworI2Vsc2UKK2NvbnN0ZXhwciBjb25zdCBDR0JpdG1hcElu
Zm8gRGVmYXVsdEJpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3Q7Cisj
ZW5kaWYKKworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kKTsKKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBJ
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIENHQ29sb3JTcGFj
ZVJlZiBjZ0NvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKQoreworICAgIEludFNpemUgYmFj
a2VuZFNpemUgPSBjYWxjdWxhdGVCYWNrZW5kU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOwor
ICAgIGlmIChiYWNrZW5kU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgdm9pZCogZGF0YTsKKyAgICB1bnNpZ25lZCBieXRlc1BlclJvdyA9IDQgKiBiYWNrZW5k
U2l6ZS53aWR0aCgpOworCisgICAgaWYgKCF0cnlGYXN0Q2FsbG9jKGJhY2tlbmRTaXplLmhlaWdo
dCgpLCBieXRlc1BlclJvdykuZ2V0VmFsdWUoZGF0YSkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZGF0YSkgJiAzKSk7
CisKKyAgICBzaXplX3QgbnVtQnl0ZXMgPSBiYWNrZW5kU2l6ZS5oZWlnaHQoKSAqIGJ5dGVzUGVy
Um93OworICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goZGF0YSwgbnVtQnl0ZXMpOwor
CisgICAgYXV0byBjZ0NvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShkYXRh
LCBiYWNrZW5kU2l6ZS53aWR0aCgpLCBiYWNrZW5kU2l6ZS5oZWlnaHQoKSwgOCwgYnl0ZXNQZXJS
b3csIGNnQ29sb3JTcGFjZSwgRGVmYXVsdEJpdG1hcEluZm8pKTsKKyAgICBpZiAoIWNnQ29udGV4
dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5p
cXVlPEdyYXBoaWNzQ29udGV4dD4oY2dDb250ZXh0LmdldCgpKTsKKworICAgIGNvbnN0IGF1dG8g
cmVsZWFzZUltYWdlRGF0YSA9IFtdICh2b2lkKiwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90KSB7
CisgICAgICAgIGZhc3RGcmVlKGNvbnN0X2Nhc3Q8dm9pZCo+KGRhdGEpKTsKKyAgICB9OworCisg
ICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERh
dGEoMCwgZGF0YSwgbnVtQnl0ZXMsIHJlbGVhc2VJbWFnZURhdGEpKTsKKworICAgIHJldHVybiBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZChzaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xv
clNwYWNlLCBkYXRhLCBXVEZNb3ZlKGRhdGFQcm92aWRlciksIFdURk1vdmUoY29udGV4dCkpKTsK
K30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBJbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3Qg
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIGlmIChhdXRvIGNnQ29sb3JTcGFjZSA9
IGNvbnRleHRDb2xvclNwYWNlKGNvbnRleHQpKQorICAgICAgICByZXR1cm4gSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZShzaXplLCAxLCBDb2xvclNwYWNlOjpTUkdCLCBjZ0NvbG9y
U3BhY2UuZ2V0KCksIG51bGxwdHIpOworICAgIAorICAgIHJldHVybiBJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZDo6Y3JlYXRlKHNpemUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIG51bGxwdHIpOwor
fQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IEltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyog
aG9zdFdpbmRvdykKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNy
ZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGNhY2hlZENHQ29sb3JTcGFj
ZShjb2xvclNwYWNlKSwgaG9zdFdpbmRvdyk7Cit9CisKK0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNr
ZW5kOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxT
aXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UsIHZvaWQqIGRhdGEsIFJldGFpblB0cjxDR0RhdGFQcm92aWRl
clJlZj4mJiBkYXRhUHJvdmlkZXIsIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+JiYg
Y29udGV4dCkKKyAgICA6IEltYWdlQnVmZmVyQ0dCYWNrZW5kKGxvZ2ljYWxTaXplLCBiYWNrZW5k
U2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKQorICAgICwgbV9kYXRhKGRhdGEpCisg
ICAgLCBtX2RhdGFQcm92aWRlcihXVEZNb3ZlKGRhdGFQcm92aWRlcikpCisgICAgLCBtX2NvbnRl
eHQoV1RGTW92ZShjb250ZXh0KSkKK3sKKyAgICBBU1NFUlQobV9kYXRhKTsKKyAgICBBU1NFUlQo
bV9kYXRhUHJvdmlkZXIpOworICAgIEFTU0VSVChtX2NvbnRleHQpOworICAgIHNldHVwQ29udGV4
dCgpOworfQorCitHcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpj
b250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKm1fY29udGV4dDsKK30KKworTmF0aXZlSW1h
Z2VQdHIgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5n
U3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGNvcHlCZWhhdmlv
cikgeworICAgIGNhc2UgQ29weUJhY2tpbmdTdG9yZToKKyAgICAgICAgcmV0dXJuIGFkb3B0Q0Yo
Q0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKSk7
CisKKyAgICBjYXNlIERvbnRDb3B5QmFja2luZ1N0b3JlOgorICAgICAgICByZXR1cm4gYWRvcHRD
RihDR0ltYWdlQ3JlYXRlKAorICAgICAgICAgICAgbV9iYWNrZW5kU2l6ZS53aWR0aCgpLCBtX2Jh
Y2tlbmRTaXplLmhlaWdodCgpLCA4LCAzMiwgYnl0ZXNQZXJSb3coKSwKKyAgICAgICAgICAgIGNh
Y2hlZENHQ29sb3JTcGFjZShtX2NvbG9yU3BhY2UpLCBEZWZhdWx0Qml0bWFwSW5mbywgbV9kYXRh
UHJvdmlkZXIuZ2V0KCksCisgICAgICAgICAgICAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJbnRlbnRE
ZWZhdWx0KSk7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IG51bGxwdHI7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZDo6dG9CR1JBRGF0YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6
dG9CR1JBRGF0YShtX2RhdGEpOworfQorCitSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0
Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAoreworICAgIHJldHVybiBJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIG1fZGF0
YSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnB1dEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdl
RGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkK
K3sKKyAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgaW1h
Z2VEYXRhLCBzcmNSZWN0LCBkZXN0UG9pbnQsIG1fZGF0YSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmI2YWY2NjJhMWM3NmE4Yjg5Yjc3NmYyMzk2Y2I4NTM0N2Q2YTQ5MWMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBV
U0UoQ0cpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0
Zi9Jc29NYWxsb2MuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckNHQmFja2VuZCB7CisgICAgV1RG
X01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCk7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQpOworcHVibGljOgor
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IGNy
ZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2Us
IENHQ29sb3JTcGFjZVJlZiwgY29uc3QgSG9zdFdpbmRvdyopOworICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNp
emUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cq
KTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5k
PiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisKKyAg
ICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIE5hdGl2
ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdT
dG9yZSkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgp
IGNvbnN0IG92ZXJyaWRlOworCisgICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBp
bnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW50UG9pbnQmIGRlc3RQb2ludCkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgSW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3Qg
SW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2Us
IHZvaWQqIGRhdGEsIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4mJiwgc3RkOjp1bmlxdWVf
cHRyPEdyYXBoaWNzQ29udGV4dD4mJik7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAg
IENvbG9yRm9ybWF0IGJhY2tlbmRDb2xvckZvcm1hdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IENvbG9yRm9ybWF0OjpCR1JBOyB9CisjZW5kaWYKKworICAgIHZvaWQqIG1fZGF0YTsKKyAgICBS
ZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IG1fZGF0YVByb3ZpZGVyOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNjFmYzAzMWNjMDY2NGRlN2E1NzdkMWJjYjViNDk2MmZkZDJl
YWJhYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSw0OTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJ
bWFnZUJ1ZmZlckRhdGEuaCIKLQotI2lmIFVTRShDRykKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29y
ZUdyYXBoaWNzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVy
YXRlLmg+Ci0jZW5kaWYKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUp
Ci0jaW5jbHVkZSAiSU9TdXJmYWNlLmgiCi0jaW5jbHVkZSA8ZGlzcGF0Y2gvZGlzcGF0Y2guaD4K
LSNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0lPU3VyZmFjZVNQSS5oPgotI2VuZGlmCi0KLS8vIENB
IHVzZXMgQVJHQjMyIGZvciB0ZXh0dXJlcyBhbmQgQVJHQjMyIC0+IEFSR0IzMiByZXNhbXBsaW5n
IGlzIG9wdGltaXplZC4KLSNkZWZpbmUgVVNFX0FSR0IzMiBQTEFURk9STShJT1NfRkFNSUxZKQot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkgJiYgKFVTRV9BUkdC
MzIgfHwgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkpCi1zdGF0aWMgdm9pZCB1
bnByZW11bHRpcGx5QnVmZmVyRGF0YShjb25zdCB2SW1hZ2VfQnVmZmVyJiBzcmMsIGNvbnN0IHZJ
bWFnZV9CdWZmZXImIGRlc3QpCi17Ci0gICAgQVNTRVJUKHNyYy5kYXRhKTsKLSAgICBBU1NFUlQo
ZGVzdC5kYXRhKTsKLQotICAgIGlmIChrdkltYWdlTm9FcnJvciAhPSB2SW1hZ2VVbnByZW11bHRp
cGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICAvLyBTd2FwIGNoYW5uZWxzIDEgYW5kIDMsIHRvIGNvbnZlcnQgQkdSQTwt
PlJHQkEuIElPU3VyZmFjZXMgYXJlIEJHUkEsIEltYWdlRGF0YSBleHBlY3RzIFJHQkEuCi0gICAg
Y29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICB2SW1hZ2VQZXJtdXRl
Q2hhbm5lbHNfQVJHQjg4ODgoJmRlc3QsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLX0K
LQotc3RhdGljIHZvaWQgcHJlbXVsdGlwbHlCdWZmZXJEYXRhKGNvbnN0IHZJbWFnZV9CdWZmZXIm
IHNyYywgY29uc3QgdkltYWdlX0J1ZmZlciYgZGVzdCkKLXsKLSAgICBBU1NFUlQoc3JjLmRhdGEp
OwotICAgIEFTU0VSVChkZXN0LmRhdGEpOwotCi0gICAgaWYgKGt2SW1hZ2VOb0Vycm9yICE9IHZJ
bWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3Mp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBTd2FwIGNoYW5uZWxzIDEgYW5kIDMsIHRvIGNv
bnZlcnQgQkdSQTwtPlJHQkEuIElPU3VyZmFjZXMgYXJlIEJHUkEsIEltYWdlRGF0YSBleHBlY3Rz
IFJHQkEuCi0gICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICB2
SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJmRlc3QsICZkZXN0LCBtYXAsIGt2SW1hZ2VO
b0ZsYWdzKTsKLX0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURSkgJiYgKFVTRV9BUkdCMzIgfHwg
VVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkpCi0KLXN0YXRpYyBpbmxpbmUgdm9p
ZCB0cmFuc2ZlckRhdGEodm9pZCogb3V0cHV0LCB2b2lkKiBpbnB1dCwgaW50IHdpZHRoLCBpbnQg
aGVpZ2h0LCBzaXplX3QgaW5wdXRCeXRlc1BlclJvdykKLXsKLSNpZiBVU0UoQUNDRUxFUkFURSkK
LSAgICBBU1NFUlQoaW5wdXQpOwotICAgIEFTU0VSVChvdXRwdXQpOwotCi0gICAgdkltYWdlX0J1
ZmZlciBzcmM7Ci0gICAgc3JjLndpZHRoID0gd2lkdGg7Ci0gICAgc3JjLmhlaWdodCA9IGhlaWdo
dDsKLSAgICBzcmMucm93Qnl0ZXMgPSBpbnB1dEJ5dGVzUGVyUm93OwotICAgIHNyYy5kYXRhID0g
aW5wdXQ7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IHdpZHRo
OwotICAgIGRlc3QuaGVpZ2h0ID0gaGVpZ2h0OwotICAgIGRlc3Qucm93Qnl0ZXMgPSB3aWR0aCAq
IDQ7Ci0gICAgZGVzdC5kYXRhID0gb3V0cHV0OwotCi0gICAgdkltYWdlVW5wcmVtdWx0aXBseURh
dGFfQkdSQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgVU5V
U0VEX1BBUkFNKG91dHB1dCk7Ci0gICAgVU5VU0VEX1BBUkFNKGlucHV0KTsKLSAgICBVTlVTRURf
UEFSQU0od2lkdGgpOwotICAgIFVOVVNFRF9QQVJBTShoZWlnaHQpOwotICAgIC8vIEZJWE1FOiBB
ZGQgc3VwcG9ydCBmb3Igbm90IEFDQ0VMRVJBVEUuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0jZW5kaWYKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyRGF0YTo6dG9CR1JBRGF0
YShib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcsIGludCB3aWR0aCwgaW50IGhlaWdodCkgY29uc3QK
LXsKLSAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0KDQgKiB3aWR0aCAqIGhlaWdodCk7Ci0KLSAg
ICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSAgICAgICAgdHJhbnNmZXJEYXRhKHJlc3Vs
dC5kYXRhKCksIGRhdGEsIHdpZHRoLCBoZWlnaHQsIDQgKiBiYWNraW5nU3RvcmVTaXplLndpZHRo
KCkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSNpZiBVU0UoSU9TVVJGQUNFX0NB
TlZBU19CQUNLSU5HX1NUT1JFKQotICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKnN1cmZhY2Up
OwotICAgIHRyYW5zZmVyRGF0YShyZXN1bHQuZGF0YSgpLCBsb2NrLnN1cmZhY2VCYXNlQWRkcmVz
cygpLCB3aWR0aCwgaGVpZ2h0LCBzdXJmYWNlLT5ieXRlc1BlclJvdygpKTsKLSNlbHNlCi0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1S
ZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKSBjb25zdAotewotICAgIENo
ZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBhcmVhID0gNDsKLSAgICBhcmVhICo9IHJl
Y3Qud2lkdGgoKTsKLSAgICBhcmVhICo9IHJlY3QuaGVpZ2h0KCk7Ci0gICAgaWYgKGFyZWEuaGFz
T3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcmVzdWx0
ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoYXJlYS51bnNhZmVH
ZXQoKSk7Ci0gICAgdWludDhfdCogcmVzdWx0RGF0YSA9IHJlc3VsdCA/IHJlc3VsdC0+ZGF0YSgp
IDogbnVsbHB0cjsKLSAgICBpZiAoIXJlc3VsdERhdGEpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgQ2hlY2tlZDxpbnQ+IGVuZHggPSByZWN0Lm1heFgoKTsKLSAgICBDaGVja2VkPGlu
dD4gZW5keSA9IHJlY3QubWF4WSgpOwotICAgIGlmIChyZWN0LngoKSA8IDAgfHwgcmVjdC55KCkg
PCAwIHx8IGVuZHgudW5zYWZlR2V0KCkgPiBzaXplLndpZHRoKCkgfHwgZW5keS51bnNhZmVHZXQo
KSA+IHNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHJlc3VsdC0+emVyb0ZpbGwoKTsKLSAgICAKLSAg
ICBpbnQgb3JpZ2lueCA9IHJlY3QueCgpOwotICAgIGludCBkZXN0eCA9IDA7Ci0gICAgQ2hlY2tl
ZDxpbnQ+IGRlc3R3ID0gcmVjdC53aWR0aCgpOwotICAgIGlmIChvcmlnaW54IDwgMCkgewotICAg
ICAgICBkZXN0dyArPSBvcmlnaW54OwotICAgICAgICBkZXN0eCA9IC1vcmlnaW54OwotICAgICAg
ICBvcmlnaW54ID0gMDsKLSAgICB9Ci0gICAgZGVzdHcgPSBzdGQ6Om1pbjxpbnQ+KGRlc3R3LnVu
c2FmZUdldCgpLCBzaXplLndpZHRoKCkgLSBvcmlnaW54KTsKLSAgICBpZiAoZW5keC51bnNhZmVH
ZXQoKSA+IHNpemUud2lkdGgoKSkKLSAgICAgICAgZW5keCA9IHNpemUud2lkdGgoKTsKLSAgICBD
aGVja2VkPGludD4gd2lkdGggPSBlbmR4IC0gb3JpZ2lueDsKLSAgICAKLSAgICBpbnQgb3JpZ2lu
eSA9IHJlY3QueSgpOwotICAgIGludCBkZXN0eSA9IDA7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3Ro
ID0gcmVjdC5oZWlnaHQoKTsKLSAgICBpZiAob3JpZ2lueSA8IDApIHsKLSAgICAgICAgZGVzdGgg
Kz0gb3JpZ2lueTsKLSAgICAgICAgZGVzdHkgPSAtb3JpZ2lueTsKLSAgICAgICAgb3JpZ2lueSA9
IDA7Ci0gICAgfQotICAgIGRlc3RoID0gc3RkOjptaW48aW50PihkZXN0aC51bnNhZmVHZXQoKSwg
c2l6ZS5oZWlnaHQoKSAtIG9yaWdpbnkpOwotICAgIGlmIChlbmR5LnVuc2FmZUdldCgpID4gc2l6
ZS5oZWlnaHQoKSkKLSAgICAgICAgZW5keSA9IHNpemUuaGVpZ2h0KCk7Ci0gICAgQ2hlY2tlZDxp
bnQ+IGhlaWdodCA9IGVuZHkgLSBvcmlnaW55OwotICAgIAotICAgIGlmICh3aWR0aC51bnNhZmVH
ZXQoKSA8PSAwIHx8IGhlaWdodC51bnNhZmVHZXQoKSA8PSAwKQotICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgIAotICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiByZWN0LndpZHRo
KCk7Ci0gICAgdWludDhfdCogZGVzdFJvd3MgPSByZXN1bHREYXRhICsgZGVzdHkgKiBkZXN0Qnl0
ZXNQZXJSb3cgKyBkZXN0eCAqIDQ7Ci0gICAgCi0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3c7
Ci0gICAgdWludDhfdCogc3JjUm93czsKLSAgICAKLSAgICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJp
bmcpIHsKLSAgICAgICAgaWYgKCFkYXRhKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQot
ICAgICAgICBzcmNCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93LnVuc2FmZUdldCgpOwotICAgICAg
ICBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyBvcmlnaW55ICog
c3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAg
ICAgICBpZiAob3V0cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCkgewotCi0gICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAgICAgICAg
IHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAgICAgICAgc3JjLmhlaWdodCA9
IGhlaWdodC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVz
UGVyUm93OwotICAgICAgICAgICAgc3JjLmRhdGEgPSBzcmNSb3dzOwotCi0gICAgICAgICAgICB2
SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgICAgICBkZXN0LndpZHRoID0gZGVzdHcudW5zYWZl
R2V0KCk7Ci0gICAgICAgICAgICBkZXN0LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgpOwotICAg
ICAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIGRl
c3QuZGF0YSA9IGRlc3RSb3dzOwotCi0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgdW5wcmVt
dWx0aXBseUJ1ZmZlckRhdGEoc3JjLCBkZXN0KTsKLSNlbHNlCi0gICAgICAgICAgICB2SW1hZ2VV
bnByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwot
I2VuZGlmCi0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSNlbmRpZgot
ICAgICAgICBpZiAob3V0cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCkgewotICAgICAgICAgICAgaWYgKCh3aWR0aCAqIDQpLmhhc092ZXJmbG93ZWQo
KSkKLSAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotICAgICAgICAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgICAg
ICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICAgICAgdWludDhfdCBhbHBoYSA9
IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICAgICAgICAg
IC8vIEJ5dGUgb3JkZXIgaXMgZGlmZmVyZW50IGFzIHdlIHVzZSBpbWFnZSBidWZmZXJzIG9mIEFS
R0IzMgotICAgICAgICAgICAgICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8gYWxw
aGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jv
d3NbYmFzZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3JjUm93c1tiYXNleF0gKiAyNTUpIC8gYWxwaGE7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1ti
YXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0jZWxzZQotICAgICAgICAgICAgICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4XSAqIDI1NSkg
LyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAo
c3JjUm93c1tiYXNleCArIDFdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8gYWxw
aGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7
Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcmVp
bnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3dzICsgYmFzZXgpWzBdID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1Jvd3MgKyBiYXNleClbMF07Ci0jZW5kaWYKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJv
dzsKLSAgICAgICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8
IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAg
ICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICAgICAgZGVz
dFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAg
ICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8ICh3
aWR0aCAqIDQpLnVuc2FmZUdldCgpOyB4ICs9IDQpCi0gICAgICAgICAgICAgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyArIHgpWzBdID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50MzJfdCo+KHNyY1Jvd3MgKyB4KVswXTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIHNy
Y1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVz
dEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSNp
ZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgICAgICBJT1N1cmZhY2U6
OkxvY2tlciBsb2NrKCpzdXJmYWNlKTsKLSAgICAgICAgc3JjQnl0ZXNQZXJSb3cgPSBzdXJmYWNl
LT5ieXRlc1BlclJvdygpOwotICAgICAgICBzcmNSb3dzID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+
KGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsg
b3JpZ2lueCAqIDQ7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAgdkltYWdlX0J1ZmZl
ciBzcmM7Ci0gICAgICAgIHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAgICBz
cmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdldCgpOwotICAgICAgICBzcmMucm93Qnl0ZXMgPSBz
cmNCeXRlc1BlclJvdzsKLSAgICAgICAgc3JjLmRhdGEgPSBzcmNSb3dzOwotCi0gICAgICAgIHZJ
bWFnZV9CdWZmZXIgZGVzdDsKLSAgICAgICAgZGVzdC53aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgp
OwotICAgICAgICBkZXN0LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0
LnJvd0J5dGVzID0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICBkZXN0LmRhdGEgPSBkZXN0Um93
czsKLQotICAgICAgICBpZiAob3V0cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCkKLSAgICAgICAgICAgIHVucHJlbXVsdGlwbHlCdWZmZXJEYXRhKHNy
YywgZGVzdCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFu
bmVscyBmcm9tIEJHUkEgdG8gUkdCQS4KLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRd
ID0geyAyLCAxLCAwLCAzIH07Ci0gICAgICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJH
Qjg4ODgoJnNyYywgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOwotICAgICAgICB9Ci0jZWxz
ZQotICAgICAgICBpZiAoKHdpZHRoICogNCkuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICAgICAg
Q1JBU0goKTsKLQotICAgICAgICBpZiAob3V0cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgICAgICBp
bnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICAgICAgdWludDhfdCBiID0gc3JjUm93
c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jh
c2V4ICsgM107Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhbHBoYSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIDI1NSkg
LyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAo
c3JjUm93c1tiYXNleCArIDFdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChiICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0g
c3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFz
ZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4ICsgMl0gPSBiOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAzXSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVy
Um93OwotICAgICAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAgICAg
aW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1Jv
d3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dz
W2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBz
cmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsg
Ml0gPSBiOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gc3JjUm93
c1tiYXNleCArIDNdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzcmNSb3dz
ICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRl
c1BlclJvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8vIFVTRShBQ0NFTEVS
QVRFKQotI2Vsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYgLy8gVVNF
KElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEoY29uc3QgVWludDhD
bGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQs
IGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNv
bnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgYWNjZWxl
cmF0ZVJlbmRlcmluZykKLXsKLSAgICBBU1NFUlQoc291cmNlUmVjdC53aWR0aCgpID4gMCk7Ci0g
ICAgQVNTRVJUKHNvdXJjZVJlY3QuaGVpZ2h0KCkgPiAwKTsKLSAgICAKLSAgICBDaGVja2VkPGlu
dD4gb3JpZ2lueCA9IHNvdXJjZVJlY3QueCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0eCA9IChD
aGVja2VkPGludD4oZGVzdFBvaW50LngoKSkgKyBzb3VyY2VSZWN0LngoKSk7Ci0gICAgQVNTRVJU
KGRlc3R4LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVF9VTlVTRUQoc2l6ZSwgZGVzdHgu
dW5zYWZlR2V0KCkgPCBzaXplLndpZHRoKCkpOwotICAgIEFTU0VSVChvcmlnaW54LnVuc2FmZUdl
dCgpID49IDApOwotICAgIEFTU0VSVChvcmlnaW54LnVuc2FmZUdldCgpIDw9IHNvdXJjZVJlY3Qu
bWF4WCgpKTsKLSAgICAKLSAgICBDaGVja2VkPGludD4gZW5keCA9IChDaGVja2VkPGludD4oZGVz
dFBvaW50LngoKSkgKyBzb3VyY2VSZWN0Lm1heFgoKSk7Ci0gICAgQVNTRVJUKGVuZHgudW5zYWZl
R2V0KCkgPD0gc2l6ZS53aWR0aCgpKTsKLSAgICAKLSAgICBDaGVja2VkPGludD4gd2lkdGggPSBz
b3VyY2VSZWN0LndpZHRoKCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R3ID0gZW5keCAtIGRlc3R4
OwotCi0gICAgQ2hlY2tlZDxpbnQ+IG9yaWdpbnkgPSBzb3VyY2VSZWN0LnkoKTsKLSAgICBDaGVj
a2VkPGludD4gZGVzdHkgPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC55KCkpICsgc291cmNlUmVj
dC55KCkpOwotICAgIEFTU0VSVChkZXN0eS51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQo
ZGVzdHkudW5zYWZlR2V0KCkgPCBzaXplLmhlaWdodCgpKTsKLSAgICBBU1NFUlQob3JpZ2lueS51
bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueS51bnNhZmVHZXQoKSA8PSBzb3Vy
Y2VSZWN0Lm1heFkoKSk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+IGVuZHkgPSAoQ2hlY2tlZDxp
bnQ+KGRlc3RQb2ludC55KCkpICsgc291cmNlUmVjdC5tYXhZKCkpOwotICAgIEFTU0VSVChlbmR5
LnVuc2FmZUdldCgpIDw9IHNpemUuaGVpZ2h0KCkpOwotCi0gICAgQ2hlY2tlZDxpbnQ+IGhlaWdo
dCA9IHNvdXJjZVJlY3QuaGVpZ2h0KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3RoID0gZW5keSAt
IGRlc3R5OwotICAgIAotICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKQotICAgICAg
ICByZXR1cm47Ci0gICAgCi0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogc291cmNl
U2l6ZS53aWR0aCgpOwotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBzb3VyY2UuZGF0YSgp
ICsgKG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0KS51bnNhZmVHZXQoKTsK
LSAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgdWludDhfdCogZGVzdFJvd3M7Ci0g
ICAgCi0gICAgaWYgKCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAgICAgIGlmICghZGF0YSkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBkZXN0Qnl0ZXNQZXJSb3cgPSBieXRlc1Bl
clJvdy51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0PHVp
bnQ4X3QqPihkYXRhKSArIChkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNCkudW5z
YWZlR2V0KCk7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAgaWYgKHNvdXJjZUZvcm1h
dCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLQotICAgICAg
ICAgICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgICAgICAgICBzcmMud2lkdGggPSB3aWR0aC51
bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7
Ci0gICAgICAgICAgICBzcmMucm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAg
IHNyYy5kYXRhID0gY29uc3RfY2FzdDx1aW50OF90Kj4oc3JjUm93cyk7Ci0KLSAgICAgICAgICAg
IHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICAgICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dy51bnNh
ZmVHZXQoKTsKLSAgICAgICAgICAgIGRlc3QuaGVpZ2h0ID0gZGVzdGgudW5zYWZlR2V0KCk7Ci0g
ICAgICAgICAgICBkZXN0LnJvd0J5dGVzID0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAg
ZGVzdC5kYXRhID0gZGVzdFJvd3M7Ci0KLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICBwcmVt
dWx0aXBseUJ1ZmZlckRhdGEoc3JjLCBkZXN0KTsKLSNlbHNlCi0gICAgICAgICAgICB2SW1hZ2VQ
cmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNl
bmRpZgotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICBm
b3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAg
ICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICB1aW50OF90IGFscGhh
ID0gc3JjUm93c1tiYXNleCArIDNdOwotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAgICAgICAv
LyBCeXRlIG9yZGVyIGlzIGRpZmZlcmVudCBhcyB3ZSB1c2UgaW1hZ2UgYnVmZmVycyBvZiBBUkdC
MzIKLSAgICAgICAgICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIGFscGhhICsgMjU0
KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNS
b3dzW2Jhc2V4ICsgMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3JjUm93c1tiYXNleCArIDBdICogYWxwaGEgKyAyNTQp
IC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleCArIDJdID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9Ci0jZWxzZQot
ICAgICAgICAgICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7
Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNl
eCArIDFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsK
LSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAg
ICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVp
bnQzMl90Kj4oZGVzdFJvd3MgKyBiYXNleClbMF0gPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVp
bnQzMl90Kj4oc3JjUm93cyArIGJhc2V4KVswXTsKLSNlbmRpZgotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgc3JjUm93
cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0jaWYgVVNFKElP
U1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICAgICAgSU9TdXJmYWNlOjpMb2NrZXIg
bG9jaygqc3VyZmFjZSwgSU9TdXJmYWNlOjpMb2NrZXI6OkFjY2Vzc01vZGU6OlJlYWRXcml0ZSk7
Ci0gICAgICAgIGRlc3RCeXRlc1BlclJvdyA9IHN1cmZhY2UtPmJ5dGVzUGVyUm93KCk7Ci0gICAg
ICAgIGRlc3RSb3dzID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGxvY2suc3VyZmFjZUJhc2VBZGRy
ZXNzKCkpICsgKGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0KS51bnNhZmVHZXQo
KTsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAg
ICAgICAgc3JjLndpZHRoID0gd2lkdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgIHNyYy5oZWlnaHQg
PSBoZWlnaHQudW5zYWZlR2V0KCk7Ci0gICAgICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVzUGVy
Um93OwotICAgICAgICBzcmMuZGF0YSA9IGNvbnN0X2Nhc3Q8dWludDhfdCo+KHNyY1Jvd3MpOwot
Ci0gICAgICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICAgICAgZGVzdC53aWR0aCA9IGRlc3R3
LnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgpOwot
ICAgICAgICBkZXN0LnJvd0J5dGVzID0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICBkZXN0LmRh
dGEgPSBkZXN0Um93czsKLQotICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkKLSAgICAgICAgICAgIHByZW11bHRpcGx5QnVm
ZmVyRGF0YShzcmMsIGRlc3QpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFN3YXAg
cGl4ZWwgY2hhbm5lbHMgZnJvbSBSR0JBIHRvIEJHUkEuCi0gICAgICAgICAgICBjb25zdCB1aW50
OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OwotICAgICAgICAgICAgdkltYWdlUGVybXV0ZUNo
YW5uZWxzX0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLSAgICAg
ICAgfQotI2Vsc2UKLSAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0
KCk7ICsreSkgewotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVH
ZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAg
ICAgICAgICAgdWludDhfdCBiID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgdWlu
dDhfdCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICBpZiAoc291
cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCAmJiBh
bHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNy
Y1Jvd3NbYmFzZXggKyAyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiBhbHBoYSArIDI1
NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoYiAq
IGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXgg
KyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAg
ICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IGI7Ci0gICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAg
ICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICB9Ci0jZW5kaWYgLy8gVVNF
KEFDQ0VMRVJBVEUpCi0jZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRp
ZiAvLyBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIH0KLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAzZTIzNzRiYWQyNGYwNzg3ZmVmMDU0M2MxYjUxYjkxMjBmMTIzMGQ0
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkFscGhhUHJlbXVsdGlwbGljYXRp
b24uaCIKLSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4
Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+Ci0jaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+Ci0KLXR5cGVkZWYgc3RydWN0IENHQ29sb3JTcGFjZSAqQ0dDb2xvclNw
YWNlUmVmOwotdHlwZWRlZiBzdHJ1Y3QgQ0dEYXRhUHJvdmlkZXIgKkNHRGF0YVByb3ZpZGVyUmVm
OwotdHlwZWRlZiB1aW50MzJfdCBDR0JpdG1hcEluZm87Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgSU9TdXJmYWNlOwotCi1zdHJ1Y3QgSW1hZ2VCdWZmZXJEYXRhIHsKLSAgICBJbnRT
aXplIGJhY2tpbmdTdG9yZVNpemU7Ci0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZs
b3c+IGJ5dGVzUGVyUm93OwotICAgIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlOwotCi0gICAg
Ly8gT25seSBmb3Igc29mdHdhcmUgSW1hZ2VCdWZmZXJzLgotICAgIHZvaWQqIGRhdGEgeyBudWxs
cHRyIH07Ci0gICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBkYXRhUHJvdmlkZXI7Ci0g
ICAgQ0dCaXRtYXBJbmZvIGJpdG1hcEluZm87Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNz
Q29udGV4dD4gY29udGV4dDsKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RP
UkUpCi0gICAgLy8gT25seSBmb3IgYWNjZWxlcmF0ZWQgSW1hZ2VCdWZmZXJzLgotICAgIHN0ZDo6
dW5pcXVlX3B0cjxJT1N1cmZhY2U+IHN1cmZhY2U7Ci0jZW5kaWYKLQotICAgIFZlY3Rvcjx1aW50
OF90PiB0b0JHUkFEYXRhKGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywgaW50IHdpZHRoLCBpbnQg
aGVpZ2h0KSBjb25zdDsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldERhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmLCBib29s
IGFjY2VsZXJhdGVSZW5kZXJpbmcpIGNvbnN0OwotICAgIHZvaWQgcHV0RGF0YShjb25zdCBVaW50
OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1h
dCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwg
Y29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0
ZVJlbmRlcmluZyk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNDdjZjVjZGU2MzkzOTdlN2IwMTU0
N2ZmZGRjOGI2OGJkNjYwNDg5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcApAQCAtMCww
ICsxLDE4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kLmgiCisKKyNpZiBIQVZFKElPU1VSRkFDRSkKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dENHLmgiCisjaW5jbHVkZSAiSU9TdXJmYWNlLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisj
aW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3Mu
aD4KKyNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgorI2luY2x1ZGUgPHd0
Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV1RGX01BS0Vf
SVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCk7CisKK0ludFNp
emUgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjYWxjdWxhdGVCYWNrZW5kU2l6ZShjb25z
dCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKK3sKKyAgICBJbnRTaXpl
IGJhY2tlbmRTaXplID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNhbGN1bGF0ZUJhY2tlbmRTaXpl
KHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGJhY2tlbmRTaXplLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIEludFNpemUgbWF4U2l6ZSA9IElPU3VyZmFjZTo6
bWF4aW11bVNpemUoKTsKKyAgICBpZiAoYmFja2VuZFNpemUud2lkdGgoKSA+IG1heFNpemUud2lk
dGgoKSB8fCBiYWNrZW5kU2l6ZS5oZWlnaHQoKSA+IG1heFNpemUuaGVpZ2h0KCkpCisgICAgICAg
IHJldHVybiB7IH07CisKKyAgICByZXR1cm4gYmFja2VuZFNpemU7Cit9CisKK1JldGFpblB0cjxD
R0NvbG9yU3BhY2VSZWY+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y29udGV4dENvbG9y
U3BhY2UoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIENHQ29udGV4dFJl
ZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOworCisgICAgaWYgKENHQ29u
dGV4dEdldFR5cGUoY2dDb250ZXh0KSA9PSBrQ0dDb250ZXh0VHlwZUlPU3VyZmFjZSkKKyAgICAg
ICAgcmV0dXJuIENHSU9TdXJmYWNlQ29udGV4dEdldENvbG9yU3BhY2UoY2dDb250ZXh0KTsKKyAg
ICAKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvbnRleHRDb2xvclNwYWNlKGNv
bnRleHQpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
PiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNp
emUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBDR0NvbG9y
U3BhY2VSZWYgY2dDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQorewor
ICAgIEludFNpemUgYmFja2VuZFNpemUgPSBjYWxjdWxhdGVCYWNrZW5kU2l6ZShzaXplLCByZXNv
bHV0aW9uU2NhbGUpOworICAgIGlmIChiYWNrZW5kU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgYXV0byBzdXJmYWNlID0gSU9TdXJmYWNlOjpjcmVhdGUoYmFj
a2VuZFNpemUsIGJhY2tlbmRTaXplLCBjZ0NvbG9yU3BhY2UpOworICAgIGlmICghc3VyZmFjZSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBj
Z0NvbnRleHQgPSBzdXJmYWNlLT5lbnN1cmVQbGF0Zm9ybUNvbnRleHQoaG9zdFdpbmRvdyk7Cisg
ICAgaWYgKCFjZ0NvbnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQ0dDb250
ZXh0Q2xlYXJSZWN0KGNnQ29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8o
KSwgYmFja2VuZFNpemUpKTsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKHNpemUs
IGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFj
ZSkpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4g
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXpl
LCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgaWYgKGF1dG8gY2dDb2xv
clNwYWNlID0gY29udGV4dENvbG9yU3BhY2UoY29udGV4dCkpCisgICAgICAgIHJldHVybiBJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShzaXplLCAxLCBDb2xvclNwYWNlOjpTUkdC
LCBjZ0NvbG9yU3BhY2UuZ2V0KCksIG51bGxwdHIpOworICAgIAorICAgIHJldHVybiBJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShzaXplLCAxLCBDb2xvclNwYWNlOjpTUkdCLCBu
dWxscHRyKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZD4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBz
aXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3Qg
SG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBjYWNo
ZWRDR0NvbG9yU3BhY2UoY29sb3JTcGFjZSksIGhvc3RXaW5kb3cpOworfQorCisKK0ltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZs
b2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPElP
U3VyZmFjZT4mJiBzdXJmYWNlKQorICAgIDogSW1hZ2VCdWZmZXJDR0JhY2tlbmQobG9naWNhbFNp
emUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpCisgICAgLCBtX3N1
cmZhY2UoV1RGTW92ZShzdXJmYWNlKSkKK3sKKyAgICBBU1NFUlQobV9zdXJmYWNlKTsKKyAgICBz
ZXR1cENvbnRleHQoKTsKK30KKworR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQ6OmNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2UtPmVuc3Vy
ZUdyYXBoaWNzQ29udGV4dCgpOworfQorCit2b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZDo6Zmx1c2hDb250ZXh0KCkKK3sKKyAgICBDR0NvbnRleHRGbHVzaChjb250ZXh0KCkucGxhdGZv
cm1Db250ZXh0KCkpOworfQorCitzaXplX3QgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpt
ZW1vcnlDb3N0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT50b3RhbEJ5dGVzKCk7
Cit9CisKK3NpemVfdCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmV4dGVybmFsTWVtb3J5
Q29zdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1lbW9yeUNvc3QoKTsKK30KKwordW5zaWduZWQg
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpieXRlc1BlclJvdygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKTsKK30KKworQ29sb3JGb3JtYXQgSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpiYWNrZW5kQ29sb3JGb3JtYXQoKSBjb25zdAoreworICAg
IHJldHVybiBDb2xvckZvcm1hdDo6QkdSQTsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT5jcmVhdGVJbWFnZSgpOworfQorCitOYXRpdmVJ
bWFnZVB0ciBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2Uo
KQoreworICAgIHJldHVybiBJT1N1cmZhY2U6OnNpbmtJbnRvSW1hZ2UoV1RGTW92ZShtX3N1cmZh
Y2UpKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmRyYXdDb25zdW1p
bmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKK3sKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAg
ICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgaWYgKGF1
dG8gaW1hZ2UgPSBzaW5rSW50b05hdGl2ZUltYWdlKCkpCisgICAgICAgIGRlc3RDb250ZXh0LmRy
YXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgbV9iYWNrZW5kU2l6ZSwgZGVzdFJlY3QsIGFkanVz
dGVkU3JjUmVjdCwgb3B0aW9ucyk7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEoKSBjb25zdAoreworICAgIElPU3VyZmFjZTo6TG9j
a2VyIGxvY2soKm1fc3VyZmFjZSk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6dG9C
R1JBRGF0YShsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKTsKK30KKworUmVmUHRyPEltYWdlRGF0
YT4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0Cit7
CisgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlKTsKKyAgICByZXR1cm4gSW1h
Z2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBsb2Nr
LnN1cmZhY2VCYXNlQWRkcmVzcygpKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBj
b25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW50UG9pbnQmIGRlc3RQb2ludCkKK3sKKyAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCptX3N1
cmZhY2UsIElPU3VyZmFjZTo6TG9ja2VyOjpBY2Nlc3NNb2RlOjpSZWFkV3JpdGUpOworICAgIElt
YWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNy
Y1JlY3QsIGRlc3RQb2ludCwgbG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSk7CisKKyAgICAvLyBG
b3JjZSByZWNyZWF0aW5nIHRoZSBJT1N1cmZhY2UgY2FjaGVkIGltYWdlLgorICAgIC8vIFNlZSBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3OTY2IGZvciBleHBsYWlu
aW5nIHdoeSB0aGlzIGlzIG5lY2Vzc2FyeS4KKyAgICBjb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRS
ZWN0KDEsIDEsIDAsIDApKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gSEFWRShJT1NVUkZBQ0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmRmYzBmMDQzZjA1NWE3N2RjZWY2NjNlZTRmYzdiZjY1Yjk2ZjY4NWYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgSEFWRShJT1NV
UkZBQ0UpCisKKyNpbmNsdWRlICJJT1N1cmZhY2UuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNH
QmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBXRUJDT1JFX0VYUE9SVCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQg
OiBwdWJsaWMgSW1hZ2VCdWZmZXJDR0JhY2tlbmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FU
RUQoSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQpOworcHVibGljOgorICAgIHN0YXRpYyBJbnRT
aXplIGNhbGN1bGF0ZUJhY2tlbmRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSk7CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgQ0dDb2xvclNwYWNlUmVmLCBjb25zdCBIb3N0V2lu
ZG93Kik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENv
bG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYpOworCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBvdmVycmlkZTsKKworICAg
IHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgc2l6ZV90IGV4dGVybmFs
TWVtb3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgTmF0aXZlSW1hZ2VQdHIgY29weU5h
dGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKCkgb3ZlcnJpZGU7
CisKKyAgICB2b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEo
KSBjb25zdCBvdmVycmlkZTsKKworICAgIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0
IG92ZXJyaWRlOworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24g
aW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEludFBvaW50JiBkZXN0UG9pbnQpIG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAgSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNv
bnN0IEludFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNw
YWNlLCBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmKTsKKworICAgIHN0YXRpYyBSZXRhaW5Q
dHI8Q0dDb2xvclNwYWNlUmVmPiBjb250ZXh0Q29sb3JTcGFjZShjb25zdCBHcmFwaGljc0NvbnRl
eHQmKTsKKyAgICB1bnNpZ25lZCBieXRlc1BlclJvdygpIGNvbnN0IG92ZXJyaWRlOworICAgIENv
bG9yRm9ybWF0IGJhY2tlbmRDb2xvckZvcm1hdCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPElPU3VyZmFjZT4gbV9zdXJmYWNlOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gSEFWRShJT1NVUkZBQ0UpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCmluZGV4
IDI4MjFlZjgxZDc1ZGZiMGZmMDVhODViZTVjOWZiYzI1OGI1NjJlYjMuLjJhYTgyMzMyZGUyZDEx
MWJkY2UxZTA4MDYzNTkwZGNlMjFiNmMzZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCkBAIC0yNTQsOCAr
MjU0LDggQEAgdm9pZCBQREZEb2N1bWVudEltYWdlOjp1cGRhdGVDYWNoZWRJbWFnZUlmTmVlZGVk
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QKICAgICBtX2NhY2hlZFNvdXJjZVJlY3Qg
PSBzcmNSZWN0OwogICAgICsrbV9jYWNoaW5nQ291bnRGb3JUZXN0aW5nOwogCi0gICAgSW50U2l6
ZSBpbnRlcm5hbFNpemUgPSBtX2NhY2hlZEltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKTsKLSAg
ICBkZWNvZGVkU2l6ZUNoYW5nZWQoaW50ZXJuYWxTaXplLnVuY2xhbXBlZEFyZWEoKSAqIDQpOwor
ICAgIEludFNpemUgYmFja2VuZFNpemUgPSBtX2NhY2hlZEltYWdlQnVmZmVyLT5iYWNrZW5kU2l6
ZSgpOworICAgIGRlY29kZWRTaXplQ2hhbmdlZChiYWNrZW5kU2l6ZS51bmNsYW1wZWRBcmVhKCkg
KiA0KTsKIH0KIAogSW1hZ2VEcmF3UmVzdWx0IFBERkRvY3VtZW50SW1hZ2U6OmRyYXcoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2Uu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0K
aW5kZXggYzIxMjVjM2VmMTYwYzA4MTAxMDk4MjNiNGI5MDM2ZGRmNmZiY2Y2Ny4uMzkxZmMyM2Nk
MGE4Zjg2OWFjYzEwNzMyZDE0ZmRmNDUwZmMyODU1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQpAQCAtMzMsNyArMzMsNiBA
QAogI2ltcG9ydCAiSG9zdFdpbmRvdy5oIgogI2ltcG9ydCAiSU9TdXJmYWNlUG9vbC5oIgogI2lt
cG9ydCAiSW1hZ2VCdWZmZXIuaCIKLSNpbXBvcnQgIkltYWdlQnVmZmVyRGF0YUNHLmgiCiAjaW1w
b3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVNjcmVlbi5oIgogI2ltcG9ydCA8cGFs
L3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KQEAgLTExMCwxMyArMTA5LDYgQEAgdm9pZCBJT1N1
cmZhY2U6Om1vdmVUb1Bvb2woc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4mJiBzdXJmYWNlKQog
ICAgIElPU3VyZmFjZVBvb2w6OnNoYXJlZFBvb2woKS5hZGRTdXJmYWNlKFdURk1vdmUoc3VyZmFj
ZSkpOwogfQogCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLXN0ZDo6
dW5pcXVlX3B0cjxJT1N1cmZhY2U+IElPU3VyZmFjZTo6Y3JlYXRlRnJvbUltYWdlQnVmZmVyKHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIpCi17Ci0gICAgcmV0dXJuIFdU
Rk1vdmUoaW1hZ2VCdWZmZXItPm1fZGF0YS5zdXJmYWNlKTsKLX0KLSNlbmRpZgotCiBzdGF0aWMg
TlNEaWN0aW9uYXJ5ICpvcHRpb25zRm9yQmlwbGFuYXJTdXJmYWNlKEludFNpemUgc2l6ZSwgdW5z
aWduZWQgcGl4ZWxGb3JtYXQsIHNpemVfdCBmaXJzdFBsYW5lQnl0ZXNQZXJQaXhlbCwgc2l6ZV90
IHNlY29uZFBsYW5lQnl0ZXNQZXJQaXhlbCkKIHsKICAgICBpbnQgd2lkdGggPSBzaXplLndpZHRo
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJt
L2ZpbHRlcnMvRkVCbGVuZE5FT04uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCmluZGV4IGZkOGU1ZThlMmU5NGU3MDU0ODk2
ZjlhYmJiYTdhNDZmNTAyMTQxYzkuLmM5NmUzM2NhNWY2MTMxZTUyZTFlOWQ0NWQ3YzAyMTYzZGU0
YWNjMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9h
cm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCkBAIC0xMTEsNyArMTExLDggQEAg
dm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIEZpbHRlckVmZmVjdCog
aW4gPSBpbnB1dEVmZmVjdCgwKTsKICAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0
KDEpOwogCi0gICAgVWludDhDbGFtcGVkQXJyYXkqIGRzdFBpeGVsQXJyYXkgPSBjcmVhdGVQcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvKiBpbWFnZVJlc3VsdCA9IGNyZWF0ZVBy
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIGRzdFBpeGVsQXJyYXkgPSBpbWFn
ZVJlc3VsdCA/IGltYWdlUmVzdWx0LT5kYXRhKCkgOiBudWxscHRyOwogICAgIGlmICghZHN0UGl4
ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0RHJhd2luZ0NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMjkyYjFjZTQ4ZmM0NGMxODE1Y2U3NzRj
ZTFiOTVjNzM2NTUyZWJmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaApAQCAt
MCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRl
ICJEaXNwbGF5TGlzdC5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVjb3JkZXIuaCIKKyNpbmNs
dWRlICJEaXNwbGF5TGlzdFJlcGxheWVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CisKK2NsYXNz
IERyYXdpbmdDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBEcmF3aW5nQ29udGV4dChjb25zdCBGbG9h
dFNpemUmIGxvZ2ljYWxTaXplKQorICAgICAgICA6IG1fY29udGV4dChbJl0oR3JhcGhpY3NDb250
ZXh0JiBkaXNwbGF5TGlzdENvbnRleHQpIHsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVl
PFJlY29yZGVyPihkaXNwbGF5TGlzdENvbnRleHQsIG1fZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlKCksIEZsb2F0UmVjdCh7IH0sIGxvZ2ljYWxTaXplKSwgQWZmaW5lVHJhbnNmb3Jt
KCkpOworICAgICAgICB9KQorICAgIHsKKyAgICB9CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQoKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PERyYXdpbmdDb250ZXh0Jj4oKnRoaXMp
Lm1fY29udGV4dDsgIH0KKyAgICBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QoKSB7IHJldHVybiBt
X2Rpc3BsYXlMaXN0OyB9CisgICAgY29uc3QgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KCkgY29u
c3QgeyByZXR1cm4gbV9kaXNwbGF5TGlzdDsgfQorICAgIGNvbnN0IERpc3BsYXlMaXN0KiByZXBs
YXlEaXNwbGF5TGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwbGF5RGlzcGxheUxpc3QuZ2V0KCk7
IH0KKworICAgIHZvaWQgc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCB0cmFja3NEaXNw
bGF5TGlzdFJlcGxheSkKKyAgICB7CisgICAgICAgIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkg
PSB0cmFja3NEaXNwbGF5TGlzdFJlcGxheTsKKyAgICAgICAgbV9yZXBsYXlEaXNwbGF5TGlzdC5y
ZXNldCgpOworICAgIH0KKworICAgIHZvaWQgcmVwbGF5RGlzcGxheUxpc3QoR3JhcGhpY3NDb250
ZXh0JiBkZXN0Q29udGV4dCkKKyAgICB7CisgICAgICAgIGlmICghbV9kaXNwbGF5TGlzdC5pdGVt
Q291bnQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBSZXBsYXllciByZXBsYXll
cihkZXN0Q29udGV4dCwgbV9kaXNwbGF5TGlzdCk7CisgICAgICAgIGlmIChtX3RyYWNrc0Rpc3Bs
YXlMaXN0UmVwbGF5KQorICAgICAgICAgICAgbV9yZXBsYXlEaXNwbGF5TGlzdCA9IHJlcGxheWVy
LnJlcGxheSh7IH0sIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICByZXBsYXllci5yZXBsYXkoKTsKKyAgICAgICAgbV9kaXNwbGF5TGlzdC5jbGVh
cigpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBHcmFwaGljc0NvbnRleHQgbV9jb250ZXh0Owor
ICAgIERpc3BsYXlMaXN0IG1fZGlzcGxheUxpc3Q7CisgICAgc3RkOjp1bmlxdWVfcHRyPERpc3Bs
YXlMaXN0PiBtX3JlcGxheURpc3BsYXlMaXN0OworICAgIGJvb2wgbV90cmFja3NEaXNwbGF5TGlz
dFJlcGxheSB7IGZhbHNlIH07Cit9OworCit9IC8vIERpc3BsYXlMaXN0Cit9IC8vIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b2xvck1hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29sb3JNYXRyaXguY3BwCmluZGV4IGU2MTQxYmRlMzIwNGMxNzdhYjY5ZjUxYzVkMDM0MjVh
NDdmYzU5NzUuLjk1MTgwMGVkYTkxNzQxMWM4OGI5YTRiZTU1MTRjZjFmNjhjNzg3OTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1h
dHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbG9yTWF0cml4LmNwcApAQCAtMjUsNyArMjUsNyBAQAogCiAjaW5jbHVkZSAiRmlsdGVyLmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
VWludDhDbGFtcGVkQXJyYXkuaD4KKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIApAQCAt
Mjg2LDEzICsyODYsMTUgQEAgdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKQogICAgICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5C
dWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkp
KTsKIAogICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlLT5sb2dp
Y2FsU2l6ZSgpKTsKLSAgICBJbnRTaXplIHBpeGVsQXJyYXlEaW1lbnNpb25zOwotICAgIGF1dG8g
cGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VS
ZWN0LCAmcGl4ZWxBcnJheURpbWVuc2lvbnMpOwotICAgIGlmICghcGl4ZWxBcnJheSkKKyAgICBh
dXRvIGltYWdlRGF0YSA9IHJlc3VsdEltYWdlLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZVJlY3QpOworICAgIGlmICghaW1hZ2VEYXRh
KQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8ZmxvYXQ+IHZhbHVlcyA9IG5vcm1hbGl6
ZWRGbG9hdHMobV92YWx1ZXMpOworICAgIGF1dG8qIHBpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRh
dGEoKTsKKyAgICBJbnRTaXplIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gaW1hZ2VEYXRhLT5zaXpl
KCk7CiAKKyAgICBWZWN0b3I8ZmxvYXQ+IHZhbHVlcyA9IG5vcm1hbGl6ZWRGbG9hdHMobV92YWx1
ZXMpOworICAgIAogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBGRUNPTE9STUFUUklY
X1RZUEVfVU5LTk9XTjoKICAgICAgICAgYnJlYWs7CkBAIC0zMTEsNyArMzEzLDcgQEAgdm9pZCBG
RUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgICAgICBicmVhazsKICAg
ICB9CiAKLSAgICByZXN1bHRJbWFnZS0+cHV0Qnl0ZUFycmF5KCpwaXhlbEFycmF5LCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdlUmVjdC5zaXplKCksIGltYWdl
UmVjdCwgSW50UG9pbnQoKSk7CisgICAgcmVzdWx0SW1hZ2UtPnB1dEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIGltYWdlUmVjdCk7
CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBDb2xvck1hdHJpeFR5cGUmIHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcApp
bmRleCBmYTA0MTNjMDBkYTQzYWM1ZGY1NWU1ZTAxZjY5NDRhYjllZGE3NDgzLi45NzhjNTVhNjdi
OGRlNzIwZTlmYTc5YmQ4Y2MzNGQ3NDUyOGEwMjhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFu
c2Zlci5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKIAogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xh
bXBlZEFycmF5Lmg+CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvVGV4dFN0cmVhbS5oPgpAQCAtMTA4LDcgKzEwOCw4IEBAIHZvaWQgRkVDb21wb25lbnRUcmFu
c2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0g
aW5wdXRFZmZlY3QoMCk7CiAKLSAgICBVaW50OENsYW1wZWRBcnJheSogcGl4ZWxBcnJheSA9IGNy
ZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byogaW1hZ2VSZXN1bHQgPSBj
cmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIHBpeGVsQXJyYXkgPSBp
bWFnZVJlc3VsdCA/IGltYWdlUmVzdWx0LT5kYXRhKCkgOiBudWxscHRyOwogICAgIGlmICghcGl4
ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCmluZGV4IGExOWVhMDUz
NzU4MTljZWNkYWMyNWQ1ZDk2M2Q1NDRkZDRkMWE5NjkuLjI2NTQ0MGY0Mzk0MmFmYTZhYTI5OGRh
ZjRlYzAyZWUzZDk1Y2VjODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCkBAIC0yNyw3ICsyNyw3IEBACiAj
aW5jbHVkZSAiRkVDb21wb3NpdGVBcml0aG1ldGljTkVPTi5oIgogI2luY2x1ZGUgIkZpbHRlci5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0yMjksNyAr
MjI5LDggQEAgdm9pZCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBG
aWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwogCiAgICAgaWYgKG1fdHlwZSA9PSBG
RUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKSB7Ci0gICAgICAgIFVpbnQ4Q2xhbXBlZEFy
cmF5KiBkc3RQaXhlbEFycmF5ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Cisg
ICAgICAgIGF1dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
KCk7CisgICAgICAgIGF1dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdElt
YWdlLT5kYXRhKCkgOiBudWxscHRyOwogICAgICAgICBpZiAoIWRzdFBpeGVsQXJyYXkpCiAgICAg
ICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCmluZGV4IDYyYzJmODMz
NjUzNTg2ODQ0ZDlmMzkwZWVhNWVkYzEwOGUzMGEzODguLmE2ZTNmNGJiYWEyNDQ5N2Y5MjYzNDY1
Njk3NWZmYjg3ZGM3YWI5ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcApAQCAtMjUsNyAr
MjUsNyBAQAogI2luY2x1ZGUgIkZFQ29udm9sdmVNYXRyaXguaCIKIAogI2luY2x1ZGUgIkZpbHRl
ci5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CisjaW5j
bHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgogI2luY2x1
ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBA
IC0zNzEsMTIgKzM3MSwxMyBAQCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0g
ICAgVWludDhDbGFtcGVkQXJyYXkqIHJlc3VsdEltYWdlOworICAgIEltYWdlRGF0YSogcmVzdWx0
SW1hZ2U7CiAgICAgaWYgKG1fcHJlc2VydmVBbHBoYSkKICAgICAgICAgcmVzdWx0SW1hZ2UgPSBj
cmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwogICAgIGVsc2UKICAgICAgICAgcmVzdWx0
SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3Vs
dEltYWdlKQorICAgIGF1dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdElt
YWdlLT5kYXRhKCkgOiBudWxscHRyOworICAgIGlmICghZHN0UGl4ZWxBcnJheSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lv
bk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwpAQCAtMzk1LDcgKzM5
Niw3IEBAIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIAog
ICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGEgPSB7CiAgICAgICAgICpzcmNQaXhlbEFycmF5
LAotICAgICAgICAqcmVzdWx0SW1hZ2UsCisgICAgICAgICpkc3RQaXhlbEFycmF5LAogICAgICAg
ICBwYWludFNpemUud2lkdGgoKSwKICAgICAgICAgcGFpbnRTaXplLmhlaWdodCgpLAogICAgICAg
ICBtX2JpYXMgKiAyNTUsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCmluZGV4IDBlOTQ0ZGYw
MGE5NWNjMDZkMjZhYTQyZjE2OWVlNmE0NmY1YTI3ODIuLjUzNzM1NTA0NTNlNDk4NjJjMGU0MTZm
MmRjYzI1NmI0NzBjOTE5NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCkBAIC0yNyw3
ICsyNyw3IEBACiAjaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJGaWx0ZXIu
aCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9VaW50OENsYW1wZWRBcnJheS5oPgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtOTQsNyAr
OTQsOCBAQCB2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQog
ICAgIEFTU0VSVChtX3hDaGFubmVsU2VsZWN0b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKICAgICBB
U1NFUlQobV95Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5ORUxfVU5LTk9XTik7CiAKLSAgICBVaW50
OENsYW1wZWRBcnJheSogZHN0UGl4ZWxBcnJheSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCgpOworICAgIGF1dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0KCk7CisgICAgYXV0byogZHN0UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlID8gcmVzdWx0
SW1hZ2UtPmRhdGEoKSA6IG51bGxwdHI7CiAgICAgaWYgKCFkc3RQaXhlbEFycmF5KQogICAgICAg
ICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAppbmRleCAyMzY2NmExYWVmNTM1MzIxNDkzYzll
YTJkNTYxOGU4ZmRkZDg0ZWNiLi4xMzk1YTJkYjg1MDMyYzllMmFlODY0YzYzOTY2NjhiMzc0MWNj
MzMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRHJvcFNoYWRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCkBAIC0yMyw4ICsyMyw4IEBACiAjaW5jbHVkZSAiRkVH
YXVzc2lhbkJsdXIuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJTaGFkb3dCbHVyLmgi
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KICNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIApA
QCAtOTksMTQgKzk5LDE1IEBAIHZvaWQgRkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKQogICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhibHVyUmFkaXVzLCBvZmZzZXQsIG1f
c2hhZG93Q29sb3IpOwogCiAgICAgLy8gVE9ETzogRGlyZWN0IHBpeGVsIGFjY2VzcyB0byBJbWFn
ZUJ1ZmZlciB3b3VsZCBhdm9pZCBjb3B5aW5nIHRoZSBJbWFnZURhdGEuCi0gICAgSW50UmVjdCBz
aGFkb3dBcmVhKEludFBvaW50KCksIHJlc3VsdEltYWdlLT5pbnRlcm5hbFNpemUoKSk7Ci0gICAg
YXV0byBzcmNQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmdldFByZW11bHRpcGxpZWRJbWFnZURh
dGEoc2hhZG93QXJlYSwgbnVsbHB0ciwgSW1hZ2VCdWZmZXI6OkJhY2tpbmdTdG9yZUNvb3JkaW5h
dGVTeXN0ZW0pOwotICAgIGlmICghc3JjUGl4ZWxBcnJheSkKKyAgICBJbnRSZWN0IHNoYWRvd0Fy
ZWEoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmxvZ2ljYWxTaXplKCkpOworICAgIGF1dG8gaW1h
Z2VEYXRhID0gcmVzdWx0SW1hZ2UtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkLCBzaGFkb3dBcmVhKTsKKyAgICBpZiAoIWltYWdlRGF0YSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgY29udGV4dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShzcmNQaXhlbEFy
cmF5LT5kYXRhKCksIHNoYWRvd0FyZWEuc2l6ZSgpLCA0ICogc2hhZG93QXJlYS5zaXplKCkud2lk
dGgoKSk7Ci0KLSAgICByZXN1bHRJbWFnZS0+cHV0Qnl0ZUFycmF5KCpzcmNQaXhlbEFycmF5LCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBzaGFkb3dBcmVhLnNpemUoKSwg
c2hhZG93QXJlYSwgSW50UG9pbnQoKSwgSW1hZ2VCdWZmZXI6OkJhY2tpbmdTdG9yZUNvb3JkaW5h
dGVTeXN0ZW0pOworICAgIGF1dG8qIHNyY1BpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsK
KyAgICBjb250ZXh0U2hhZG93LmJsdXJMYXllckltYWdlKHNyY1BpeGVsQXJyYXktPmRhdGEoKSwg
aW1hZ2VEYXRhLT5zaXplKCksIDQgKiBpbWFnZURhdGEtPnNpemUoKS53aWR0aCgpKTsKKyAgICAK
KyAgICByZXN1bHRJbWFnZS0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQsICppbWFnZURhdGEsIHNoYWRvd0FyZWEpOwogCiAgICAgcmVzdWx0Q29udGV4
dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUluKTsKICAg
ICByZXN1bHRDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRl
UGFpbnRSZWN0KCkuc2l6ZSgpKSwgbV9zaGFkb3dDb2xvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3Bw
CmluZGV4IDQ5YmE4NDE3M2MyZDFhOTk1NGU1NjEzOTBjZTAzYzI0YmM5MGM4MWIuLmQ3ZWQ5YjI0
NDkwMTc4ZmZiZmJlYjFjZDQyYmVhNWU4ZmYxNTllNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3Bw
CkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXJORU9OLmgiCiAjaW5j
bHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAi
SW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiAjaWYgVVNF
KEFDQ0VMRVJBVEUpCkBAIC01MjIsMTQgKzUyMywxNSBAQCB2b2lkIEZFR2F1c3NpYW5CbHVyOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVm
ZmVjdCgwKTsKIAotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiByZXN1bHRQaXhlbEFycmF5ID0gY3Jl
YXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRQaXhlbEFycmF5
KQorICAgIGF1dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
KCk7CisgICAgYXV0byogZHN0UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlID8gcmVzdWx0SW1hZ2Ut
PmRhdGEoKSA6IG51bGxwdHI7CisgICAgaWYgKCFkc3RQaXhlbEFycmF5KQogICAgICAgICByZXR1
cm47CiAKICAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKIAogICAgIElu
dFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRh
KGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1
bHQoKnJlc3VsdFBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0KTsKKyAgICBpbi0+Y29weVBy
ZW11bHRpcGxpZWRSZXN1bHQoKmRzdFBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0KTsKIAog
ICAgIGlmICghbV9zdGRYICYmICFtX3N0ZFkpCiAgICAgICAgIHJldHVybjsKQEAgLTU0Myw3ICs1
NDUsNyBAQCB2b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAg
IGlmICghdG1wSW1hZ2VEYXRhKQogICAgICAgICByZXR1cm47CiAKLSAgICBwbGF0Zm9ybUFwcGx5
KCpyZXN1bHRQaXhlbEFycmF5LCAqdG1wSW1hZ2VEYXRhLCBrZXJuZWxTaXplLndpZHRoKCksIGtl
cm5lbFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZSk7CisgICAgcGxhdGZvcm1BcHBseSgqZHN0UGl4
ZWxBcnJheSwgKnRtcEltYWdlRGF0YSwga2VybmVsU2l6ZS53aWR0aCgpLCBrZXJuZWxTaXplLmhl
aWdodCgpLCBwYWludFNpemUpOwogfQogCiBJbnRPdXRzZXRzIEZFR2F1c3NpYW5CbHVyOjpvdXRz
ZXRzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCmluZGV4IDBiYTUxYjc2MTJmMmNiMmY2OWY0ZjYwMjFj
ZWZjYmUzYzJlNzQyZDMuLjZkYjg3ZmQ1NDVhOGYxZGRhN2Q5YjU4OGEyNTQwNjU1YTU3OGZiMjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVM
aWdodGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUxpZ2h0aW5nLmNwcApAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ29sb3JVdGls
aXRpZXMuaCIKICNpbmNsdWRlICJGRUxpZ2h0aW5nTkVPTi5oIgorI2luY2x1ZGUgIkltYWdlRGF0
YS5oIgogI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtNDczLDcgKzQ3NCw4IEBAIHZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKCkKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBV
aW50OENsYW1wZWRBcnJheSogcmVzdXRQaXhlbEFycmF5ID0gY3JlYXRlUHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0KCk7CisgICAgYXV0byogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvKiByZXN1dFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/
IHJlc3VsdEltYWdlLT5kYXRhKCkgOiBudWxscHRyOwogICAgIGlmICghcmVzdXRQaXhlbEFycmF5
KQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAppbmRleCAyNTE3ODFjYTVhYTUx
Zjc4MDI3YWQ1MDhkZjlhYzYxMGM2Nzk0ZmE1Li5jYmQ0MjQxOTc2NTcwYTg3Mzk0NTIwMGE5MTNl
MGU5ZTY1OWFiNDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCkBAIC0yNyw3ICsyNyw3IEBACiAKICNp
bmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CisjaW5jbHVkZSAiSW1hZ2VEYXRh
LmgiCiAjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBAIC0yMzQsNyArMjM0LDggQEAg
dm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiB7CiAgICAgRmlsdGVy
RWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgVWludDhDbGFtcGVkQXJyYXkqIGRz
dFBpeGVsQXJyYXkgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRv
KiByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1
dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkgOiBu
dWxscHRyOwogICAgIGlmICghZHN0UGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVs
ZW5jZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVy
YnVsZW5jZS5jcHAKaW5kZXggNmQ2MGNkZGViYjEwMmY1MmRjM2MyMWFlY2MyYTUwZGI0YmY3ODM0
Yi4uZjE2YjliMzFhNTU5ZDc0NjIxZmYyMzI0NGRhOTMyZGY0MzE2OGQ0OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxl
bmNlLmNwcApAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIkZFVHVyYnVsZW5jZS5oIgogCiAj
aW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVk
QXJyYXkuaD4KKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgogI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9U
ZXh0U3RyZWFtLmg+CkBAIC0zOTUsNyArMzk1LDggQEAgdm9pZCBGRVR1cmJ1bGVuY2U6OmZpbGxS
ZWdpb25Xb3JrZXIoRmlsbFJlZ2lvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMpCiAKIHZvaWQgRkVU
dXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewotICAgIFVpbnQ4Q2xhbXBlZEFy
cmF5KiBwaXhlbEFycmF5ID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBh
dXRvKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAg
YXV0byogcGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlID8gcmVzdWx0SW1hZ2UtPmRhdGEoKSA6IG51
bGxwdHI7CiAgICAgaWYgKCFwaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0LmNwcAppbmRleCA2ZTk4NmQ0ZWMyYTk3OTI5NjYzODRmYzU1MDc0YTJmOTcyYjU5MGZhLi5h
OWU4ZmNhMmM1ZDFkY2JiNjY3YTViN2NjMGQ0Zjc3MDI0ODRmMzQ5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3Qu
Y3BwCkBAIC0yNywxMCArMjcsMTAgQEAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJH
ZW9tZXRyeVV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAi
SW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5s
aW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiAjaWYgSEFWRShBUk1fTkVPTl9JTlRS
SU5TSUNTKQpAQCAtMTk5LDcgKzE5OSw3IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlk
UHJlTXVsdGlwbGllZFBpeGVscygpCiAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVWludDhDbGFtcGVkQXJyYXkqIGltYWdlQXJyYXkg
PSBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKTsKKyAgICBVaW50OENsYW1wZWRBcnJh
eSogaW1hZ2VBcnJheSA9IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCk7CiAgICAg
dWludDhfdCogcGl4ZWxEYXRhID0gaW1hZ2VBcnJheS0+ZGF0YSgpOwogICAgIGludCBwaXhlbEFy
cmF5TGVuZ3RoID0gaW1hZ2VBcnJheS0+bGVuZ3RoKCk7CiAKQEAgLTI2NSw3ICsyNjUsNyBAQCB2
b2lkIEZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKCkKIAogSW1hZ2VCdWZmZXIq
IEZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQoKQogewotICAgIExPR19XSVRIX1NUUkVB
TShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAi
ICIgPDwgdGhpcyA8PCAiIGltYWdlQnVmZmVyUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZl
ciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSA8PCAiIG1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgp
KTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3Qg
IiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBpbWFnZUJ1ZmZlclJlc3VsdCgp
LiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8
ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQtPmRhdGEoKSA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCkpOwogCiAgICAgaWYgKCFoYXNSZXN1bHQoKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yNzksOSArMjc5LDkgQEAgSW1hZ2VCdWZmZXIqIEZp
bHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQoKQogCiAgICAgSW50UmVjdCBkZXN0aW5hdGlv
blJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwogICAgIGlmICht
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+
cHV0Qnl0ZUFycmF5KCptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZGVzdGluYXRpb25SZWN0LnNpemUoKSwgZGVzdGluYXRp
b25SZWN0LCBJbnRQb2ludCgpKTsKKyAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICptX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKICAgICBlbHNlCi0gICAgICAgIG1f
aW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEJ5dGVBcnJheSgqbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBkZXN0aW5hdGlvblJl
Y3Quc2l6ZSgpLCBkZXN0aW5hdGlvblJlY3QsIEludFBvaW50KCkpOworICAgICAgICBtX2ltYWdl
QnVmZmVyUmVzdWx0LT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCAqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsK
ICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKIH0KIApAQCAtNDM4LDUyICs0
MzgsNTIgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhD
bGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdAogewogICAgIEFTU0VSVChoYXNSZXN1bHQo
KSk7CiAgICAgCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVy
RWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgY29weVVubXVsdGlw
bGllZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVz
dWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIg
PDwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSk7CisgICAgTE9HX1dJVEhfU1RSRUFN
KEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIg
IiA8PCB0aGlzIDw8ICIgY29weVVubXVsdGlwbGllZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBi
dWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSA8PCAi
IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
LT5kYXRhKCkpOwogCiAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KSB7CiAgICAg
ICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgogICAg
ICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAgICAgICAgbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFVubXVsdGlwbGllZEltYWdl
RGF0YShJbnRSZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7Cisg
ICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3Vs
dC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwg
eyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9KTsKICAgICAgICAgICAg
IGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29s
dXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpz
aXplTmVlZHNDbGFtcGluZyhpbnB1dFNpemUpKTsKICAgICAgICAgICAgIGlucHV0U2l6ZS5zY2Fs
ZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCgoaW5w
dXRTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpKTsKKyAgICAgICAgICAgIG1fdW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShpbnB1dFNpemUpOwogICAgICAgICAg
ICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIAotICAgICAgICAgICAgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYSgq
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCBp
bnB1dFNpemUpOworICAgICAgICAgICAgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYSgqbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQt
PmRhdGEoKSwgaW5wdXRTaXplKTsKICAgICAgICAgfQogICAgIH0KLSAgICBjb3B5SW1hZ2VCeXRl
cygqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb24sIHJlY3QpOworICAgIGNv
cHlJbWFnZUJ5dGVzKCptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0
aW9uLCByZWN0KTsKIH0KIAogdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVz
dWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCkK
IHsKICAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwogCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRl
cnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0
aGlzIDw8ICIgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVy
ICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpIDw8ICIgbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkp
OworICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAi
IDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlQcmVtdWx0aXBsaWVkUmVz
dWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0
KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdC0+ZGF0YSgpIDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSk7CiAKICAgICBpZiAoIW1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0KSB7CiAgICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJv
bSB0aGUgaW1hZ2UgYnVmZmVyLgogICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgewot
ICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVz
dWx0LT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgbV9hYnNv
bHV0ZVBhaW50UmVjdC5zaXplKCkpKTsKKyAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVj
dC5zaXplKCkgfSk7CiAgICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IEludFNpemUgaW5wdXRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICAgICAg
ICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGlucHV0U2l6ZSkpOwog
ICAgICAgICAgICAgaW5wdXRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAg
ICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6
dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCgoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgp
KTsKKyAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpj
cmVhdGUoaW5wdXRTaXplKTsKICAgICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSgqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKm1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCBpbnB1dFNpemUpOworICAgICAgICAgICAgY29weVBy
ZW11bHRpcGx5aW5nQWxwaGEoKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgKm1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7CiAgICAgICAgIH0K
ICAgICB9Ci0gICAgY29weUltYWdlQnl0ZXMoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCBk
ZXN0aW5hdGlvbiwgcmVjdCk7CisgICAgY29weUltYWdlQnl0ZXMoKm1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKIH0KIAogSW1hZ2VCdWZmZXIq
IEZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKQpAQCAtNDk3LDEzICs0OTcs
MTAgQEAgSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQo
KQogCiAgICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXpl
KG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgp
LCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpLCBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgIGlmICgh
bV9pbWFnZUJ1ZmZlclJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KICAgICByZXR1
cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKIH0KIAotVWludDhDbGFtcGVkQXJyYXkqIEZp
bHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQorSW1hZ2VEYXRhKiBG
aWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkKIHsKICAgICBMT0co
RmlsdGVycywgIkZpbHRlckVmZmVjdCAlcyAlcCBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCIsIGZpbHRlck5hbWUoKSwgdGhpcyk7CiAKQEAgLTUxNSwxMSArNTEyLDExIEBAIFVpbnQ4Q2xh
bXBlZEFycmF5KiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkK
ICAgICBJbnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwogICAg
IEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsKICAg
ICByZXN1bHRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFs
aXplZCgocmVzdWx0U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKSk7CisgICAgbV91bm11bHRp
cGxpZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlc3VsdFNpemUpOwogICAgIHJl
dHVybiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpOwogfQogCi1VaW50OENsYW1wZWRB
cnJheSogRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQorSW1h
Z2VEYXRhKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCiB7
CiAgICAgTE9HKEZpbHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRlUHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0IiwgZmlsdGVyTmFtZSgpLCB0aGlzKTsKIApAQCAtNTMxLDcgKzUyOCw3IEBA
IFVpbnQ4Q2xhbXBlZEFycmF5KiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCgpCiAgICAgSW50U2l6ZSByZXN1bHRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6
ZSgpKTsKICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhyZXN1bHRT
aXplKSk7CiAgICAgcmVzdWx0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAg
ICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVh
dGVVbmluaXRpYWxpemVkKChyZXN1bHRTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpKTsKKyAg
ICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlc3VsdFNp
emUpOwogICAgIHJldHVybiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRWZmZWN0LmgKaW5kZXggYzk2NmZjYzIxNjM5ZGU1YTQwNGE3YzYyZjNlYTJiNmU5MzMyZmU0
Mi4uYWY0NjNlZmViMDEzNmFjNjE4ZTI5OWNkMDhkNDQ4MzhkMGVmNTY1MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5oCkBAIC00MCw2ICs0MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEZpbHRlcjsK
IGNsYXNzIEZpbHRlckVmZmVjdDsKIGNsYXNzIEltYWdlQnVmZmVyOworY2xhc3MgSW1hZ2VEYXRh
OwogCiB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8RmlsdGVyRWZmZWN0Pj4gRmlsdGVyRWZmZWN0VmVj
dG9yOwogCkBAIC0xNTMsOCArMTU0LDggQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgY29uc3Qg
Y2hhciogZmlsdGVyTmFtZSgpIGNvbnN0ID0gMDsKIAogICAgIEltYWdlQnVmZmVyKiBjcmVhdGVJ
bWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBjcmVhdGVVbm11bHRp
cGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBjcmVhdGVQcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBJbWFnZURhdGEqIGNyZWF0ZVVubXVsdGlwbGllZElt
YWdlUmVzdWx0KCk7CisgICAgSW1hZ2VEYXRhKiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQoKTsKIAogICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBmaWx0ZXIgd2lsbCBvbmx5IG9wZXJh
dGUgY29ycmVjdGx5IG9uIHZhbGlkIFJHQkEgdmFsdWVzLCB3aXRoCiAgICAgLy8gYWxwaGEgaW4g
WzAsMjU1XSBhbmQgZWFjaCBjb2xvciBjb21wb25lbnQgaW4gWzAsIGFscGhhXS4KQEAgLTE4Miw4
ICsxODMsOCBAQCBwcml2YXRlOgogICAgIEZpbHRlckVmZmVjdFZlY3RvciBtX2lucHV0RWZmZWN0
czsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlclJlc3Vs
dDsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQ7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdDsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0Owor
ICAgIFJlZlB0cjxJbWFnZURhdGE+IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OwogCiAgICAg
SW50UmVjdCBtX2Fic29sdXRlUGFpbnRSZWN0OwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29t
bW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAKaW5kZXggMWUwMzVhN2VlZjI4MDNjZjY1OTkyZDA0
OWM5ZjhiNTU2YmNlY2FlYy4uOTE4ZTE4YWY1ZTEyZmY5MDQ5NDgzYTc4ZWYxYmE4MmQ3MzU4YzJh
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dy
YXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCkBA
IC0xODgsNyArMTg4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXIqIGltYWdlQnUKICAgICAgICAgfQogICAg
IH0KIAotICAgIHBhaW50VG9DYW52YXMocGl4ZWxzLmdldCgpLCBJbnRTaXplKG1fY3VycmVudFdp
ZHRoLCBtX2N1cnJlbnRIZWlnaHQpLCBpbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCksIGltYWdl
QnVmZmVyLT5jb250ZXh0KCkpOworICAgIHBhaW50VG9DYW52YXMocGl4ZWxzLmdldCgpLCBJbnRT
aXplKG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpLCBpbWFnZUJ1ZmZlci0+YmFja2Vu
ZFNpemUoKSwgaW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7CiAKICNpZiBQTEFURk9STShDT0NPQSkg
JiYgVVNFKE9QRU5HTF9FUykKICAgICBwcmVzZW50UmVuZGVyYnVmZmVyKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGly
ZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVm
ZmVyRGF0YURpcmVjdDJELmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmYxYjM5
NDE1ZWJiMjFiZTZjZWZhYzU5MDZmN2Q0MjUxYjgzNTkzZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTQ0
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhLmgiCi0K
LSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJCaXRtYXBJbmZvLmgiCi0jaW5jbHVkZSAi
RGlyZWN0MkRVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNs
dWRlICJIV25kREMuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9U
eXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBl
ZEFycmF5Lmg+Ci0jaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
Ci0jaW5jbHVkZSA8d3RmL1VuaXF1ZUFycmF5Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Ly8gU3dpenpsZSB0aGUgcmVkIGFuZCBibHVlIGJ5dGVzIG9mIHRoZSBwaXhlbHMgaW4gYSBidWZm
ZXIKLXRlbXBsYXRlIDxBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc2lyZWRGb3JtYXQ+Ci12b2lk
IHN3aXp6bGVBbmRQcmVtdWx0aXBseShjb25zdCB1aW50OF90KiBzcmNSb3dzLCB1bnNpZ25lZCBy
b3dDb3VudCwgdW5zaWduZWQgY29sQ291bnQsIHVuc2lnbmVkIHNyY1N0cmlkZSwgdW5zaWduZWQg
ZGVzdFN0cmlkZSwgdWludDhfdCogZGVzdFJvd3MpCi17Ci0gICAgZm9yICh1bnNpZ25lZCB5ID0g
MDsgeSA8IHJvd0NvdW50OyArK3kpIHsKLSAgICAgICAgLy8gU291cmNlIGRhdGEgbWF5IGJlIHBv
d2VyLW9mLXR3byBzaXplZCwgc28gd2UgbmVlZCB0byBvbmx5IGNvcHkgdGhlIGJpdHMgdGhhdAot
ICAgICAgICAvLyBjb3JyZXNwb25kIHRvIHRoZSByZWN0YW5nbGUgc3VwcGxpZWQgYnkgdGhlIGNh
bGxlci4KLSAgICAgICAgY29uc3QgdWludDMyX3QqIHNyY1JvdyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDMyX3QqPihzcmNSb3dzICsgc3JjU3RyaWRlICogeSk7Ci0gICAgICAgIHVpbnQ4
X3QqIGRlc3RSb3cgPSBkZXN0Um93cyArIGRlc3RTdHJpZGUgKiB5OwotICAgICAgICBmb3IgKHVu
c2lnbmVkIHggPSAwOyB4IDwgY29sQ291bnQ7ICsreCkgewotICAgICAgICAgICAgdW5zaWduZWQg
Ynl0ZVBvc2l0aW9uID0geCAqIDQ7Ci0gICAgICAgICAgICBjb25zdCB1aW50MzJfdCogc3JjUGl4
ZWwgPSBzcmNSb3cgKyB4OwotCi0gICAgICAgICAgICAvLyBTb2Z0d2FyZSBmaWx0ZXJzIGV4cGVj
dCAoUClSR0JBIGJ5dGVzLiBXZSBuZWVkIHRvIHN3aXp6bGUgZnJvbSBEaXJlY3QyRCdzIFBCR1JB
IHRvIGJlIGNvbXBhdGlibGUuCi0gICAgICAgICAgICB1aW50MzJfdCBhbHBoYSA9ICgqc3JjUGl4
ZWwgJiAweEZGMDAwMDAwKSA+PiAyNDsKLSAgICAgICAgICAgIHVpbnQzMl90IHJlZCA9ICgqc3Jj
UGl4ZWwgJiAweDAwRkYwMDAwKSA+PiAxNjsKLSAgICAgICAgICAgIHVpbnQzMl90IGdyZWVuID0g
KCpzcmNQaXhlbCAmIDB4MDAwMEZGMDApID4+IDg7Ci0gICAgICAgICAgICB1aW50MzJfdCBibHVl
ID0gKCpzcmNQaXhlbCAmIDB4MDAwMDAwRkYpOwotCi0gICAgICAgICAgICBpZiAoZGVzaXJlZEZv
cm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoYWxwaGEgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJlZCA9IHJlZCAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICBncmVlbiA9
IGdyZWVuICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIGJsdWUgPSBibHVlICog
MjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBkZXN0Um93W2J5dGVQb3NpdGlvbl0gICAgID0gcmVkOwotICAgICAgICAgICAgZGVzdFJv
d1tieXRlUG9zaXRpb24gKyAxXSA9IGdyZWVuOwotICAgICAgICAgICAgZGVzdFJvd1tieXRlUG9z
aXRpb24gKyAyXSA9IGJsdWU7Ci0gICAgICAgICAgICBkZXN0Um93W2J5dGVQb3NpdGlvbiArIDNd
ID0gYWxwaGE7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXN0YXRpYyBib29sIGNvcHlSZWN0RnJv
bVNvdXJjZVRvRGVzdChjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRTaXplJiBz
b3VyY2VCdWZmZXJTaXplLCBjb25zdCB1aW50OF90KiBzb3VyY2UsIGNvbnN0IEludFNpemUmIGRl
c3RCdWZmZXJTaXplLCB1aW50OF90KiBkZXN0LCBjb25zdCBJbnRQb2ludCYgZGVzdEJ1ZmZlclBv
c2l0aW9uKQotewotICAgIGlmICghSW50UmVjdCh7IH0sIGRlc3RCdWZmZXJTaXplKS5jb250YWlu
cyhJbnRSZWN0KGRlc3RCdWZmZXJQb3NpdGlvbiwgc291cmNlUmVjdC5zaXplKCkpKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFJbnRSZWN0KHsgfSwgc291cmNlQnVmZmVyU2l6
ZSkuY29udGFpbnMoc291cmNlUmVjdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHVu
c2lnbmVkIHNyY1N0cmlkZSA9IHNvdXJjZUJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7Ci0gICAgdW5z
aWduZWQgZGVzdFN0cmlkZSA9IGRlc3RCdWZmZXJTaXplLndpZHRoKCkgKiA0OwotCi0gICAgdW5z
aWduZWQgc3JjUm93T2Zmc2V0ID0gc291cmNlUmVjdC5sb2NhdGlvbigpLngoKSAqIDQ7Ci0gICAg
dW5zaWduZWQgZGVzdFJvd09mZnNldCA9IGRlc3RCdWZmZXJQb3NpdGlvbi54KCkgKiA0OwotCi0g
ICAgY29uc3QgdWludDhfdCogc3JjUm93cyA9IHNvdXJjZSArIHNyY1N0cmlkZSAqIHNvdXJjZVJl
Y3QubG9jYXRpb24oKS55KCk7Ci0gICAgdWludDhfdCogZGVzdFJvd3MgPSBkZXN0ICsgZGVzdFN0
cmlkZSAqIGRlc3RCdWZmZXJQb3NpdGlvbi55KCk7Ci0KLSAgICBjb25zdCB1bnNpZ25lZCBieXRl
c1BlclJvdyA9IHNvdXJjZVJlY3Qud2lkdGgoKSAqIDQ7Ci0gICAgZm9yICh1bnNpZ25lZCB5ID0g
MDsgeSA8IHNvdXJjZVJlY3QuaGVpZ2h0KCk7ICsreSkgewotICAgICAgICBjb25zdCB1aW50OF90
KiBzcmNSb3cgPSBzcmNSb3dzICsgc3JjU3RyaWRlICogeSArIHNyY1Jvd09mZnNldDsKLSAgICAg
ICAgdWludDhfdCogZGVzdFJvdyA9IGRlc3RSb3dzICsgZGVzdFN0cmlkZSAqIHkgKyBkZXN0Um93
T2Zmc2V0OwotICAgICAgICBtZW1jcHkoZGVzdFJvdywgc3JjUm93LCBieXRlc1BlclJvdyk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIE5vdGU6IEFzc3VtZXMgdGhhdCBieXRl
cyBhcmUgYWxyZWFkeSBpbiBSR0JBIGZvcm1hdAotdGVtcGxhdGUgPEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gZGVzaXJlZEZvcm1hdD4KLWJvb2wgY29weVJlY3RGcm9tU291cmNlVG9EZXN0QW5kU2V0
UHJlbXVsdGlwbGljYXRpb24oY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50U2l6
ZSYgc291cmNlQnVmZmVyU2l6ZSwgY29uc3QgdWludDhfdCogc291cmNlLCBjb25zdCBJbnRTaXpl
JiBkZXN0QnVmZmVyU2l6ZSwgdWludDhfdCogZGVzdCwgY29uc3QgSW50UG9pbnQmIGRlc3RCdWZm
ZXJQb3NpdGlvbikKLXsKLSAgICBpZiAoIUludFJlY3QoeyB9LCBkZXN0QnVmZmVyU2l6ZSkuY29u
dGFpbnMoSW50UmVjdChkZXN0QnVmZmVyUG9zaXRpb24sIHNvdXJjZVJlY3Quc2l6ZSgpKSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghSW50UmVjdCh7IH0sIHNvdXJjZUJ1ZmZl
clNpemUpLmNvbnRhaW5zKHNvdXJjZVJlY3QpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICB1bnNpZ25lZCBzcmNTdHJpZGUgPSBzb3VyY2VCdWZmZXJTaXplLndpZHRoKCkgKiA0OwotICAg
IHVuc2lnbmVkIGRlc3RTdHJpZGUgPSBkZXN0QnVmZmVyU2l6ZS53aWR0aCgpICogNDsKLQotICAg
IHVuc2lnbmVkIHNyY1Jvd09mZnNldCA9IHNvdXJjZVJlY3QubG9jYXRpb24oKS54KCkgKiA0Owot
ICAgIHVuc2lnbmVkIGRlc3RSb3dPZmZzZXQgPSBkZXN0QnVmZmVyUG9zaXRpb24ueCgpICogNDsK
LQotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBzb3VyY2UgKyBzcmNTdHJpZGUgKiBzb3Vy
Y2VSZWN0LmxvY2F0aW9uKCkueSgpOwotICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gZGVzdCArIGRl
c3RTdHJpZGUgKiBkZXN0QnVmZmVyUG9zaXRpb24ueSgpOwotCi0gICAgY29uc3QgdW5zaWduZWQg
Ynl0ZXNQZXJSb3cgPSBzb3VyY2VSZWN0LndpZHRoKCkgKiA0OwotICAgIGZvciAodW5zaWduZWQg
eSA9IDA7IHkgPCBzb3VyY2VSZWN0LmhlaWdodCgpOyArK3kpIHsKLSAgICAgICAgY29uc3QgdWlu
dDhfdCogc3JjUm93ID0gc3JjUm93cyArIHNyY1N0cmlkZSAqIHkgKyBzcmNSb3dPZmZzZXQ7Ci0g
ICAgICAgIHVpbnQ4X3QqIGRlc3RSb3cgPSBkZXN0Um93cyArIGRlc3RTdHJpZGUgKiB5ICsgZGVz
dFJvd09mZnNldDsKLQotICAgICAgICBmb3IgKHNpemVfdCB4ID0gMDsgeCA8IHNvdXJjZVJlY3Qu
d2lkdGgoKTsgKyt4KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBwb3MgPSB4ICogNDsKLQotICAg
ICAgICAgICAgdW5zaWduZWQgcmVkID0gc3JjUm93W3hdOwotICAgICAgICAgICAgdW5zaWduZWQg
Z3JlZW4gPSBzcmNSb3dbeCArIDFdOwotICAgICAgICAgICAgdW5zaWduZWQgYmx1ZSA9IHNyY1Jv
d1t4ICsgMl07Ci0gICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IHNyY1Jvd1t4ICsgM107Ci0K
LSAgICAgICAgICAgIGlmIChkZXNpcmVkRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJlZCA9IChyZWQgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAg
ICAgICAgICAgICAgICAgIGdyZWVuID0gKGdyZWVuICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAg
ICAgICAgICAgICAgICAgICBibHVlID0gKGJsdWUgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAo
YWxwaGEgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlZCA9IHJlZCAq
IDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICBncmVlbiA9IGdyZWVuICogMjU1IC8g
YWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIGJsdWUgPSBibHVlICogMjU1IC8gYWxwaGE7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB1aW50MzJfdCog
cGl4ZWwgPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJvdykgKyB4OwotICAgICAg
ICAgICAgKnBpeGVsID0gKGFscGhhIDw8IDI0KSB8IHJlZCAgPDwgMTYgfCBncmVlbiAgPDwgOCB8
IGJsdWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJ
bWFnZUJ1ZmZlckRhdGE6OmNvcHlSZWN0RnJvbURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiYgcmVzdWx0KSBjb25zdAotewotICAgIGF1dG8gcmF3Qml0
bWFwU2l6ZSA9IGJpdG1hcC0+R2V0U2l6ZSgpOwotCi0gICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBi
YWNraW5nU3RvcmVTaXplLndpZHRoKCkgLyByYXdCaXRtYXBTaXplLndpZHRoOwotCi0gICAgSW50
UmVjdCBzY2FsZWRSZWN0ID0gcmVjdDsKLSAgICBzY2FsZWRSZWN0LnNjYWxlKHNjYWxlRmFjdG9y
KTsKLQotICAgIGlmICghSW50UmVjdChJbnRQb2ludCgpLCBiYWNraW5nU3RvcmVTaXplKS5jb250
YWlucyhzY2FsZWRSZWN0KSkgewotICAgICAgICAvLyBSZXF1ZXN0ZWQgcmVjdCBpcyBvdXRzaWRl
IHRoZSBidWZmZXIuIFJldHVybiB6ZXJvLWZpbGxlZCBidWZmZXIuCi0gICAgICAgIHJlc3VsdC0+
emVyb0ZpbGwoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNv
cHlSZWN0RnJvbVNvdXJjZVRvRGVzdChzY2FsZWRSZWN0LCBiYWNraW5nU3RvcmVTaXplLCBkYXRh
LmRhdGEoKSwgcmVjdC5zaXplKCksIHJlc3VsdC0+ZGF0YSgpLCBJbnRQb2ludCgpKTsKLX0KLQot
Ym9vbCBJbWFnZUJ1ZmZlckRhdGE6OmVuc3VyZUJhY2tpbmdTdG9yZShjb25zdCBJbnRTaXplJiBz
aXplKSBjb25zdAotewotICAgIGlmIChzaXplID09IGJhY2tpbmdTdG9yZVNpemUgJiYgIWRhdGEu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGF1dG8gbnVtQnl0ZXMgPSBz
aXplLmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkgKiA0OwotICAgIGlmIChudW1CeXRlcy5oYXNPdmVy
Zmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJhY2tpbmdTdG9yZVNpemUg
PSBzaXplOwotICAgIGRhdGEucmVzaXplVG9GaXQobnVtQnl0ZXMudW5zYWZlR2V0KCkpOwotICAg
IHJldHVybiBkYXRhLmNhcGFjaXR5KCkgPT0gbnVtQnl0ZXMudW5zYWZlR2V0KCk7Ci19Ci0KLS8v
IFN3aXp6bGUgdGhlIHJlZCBhbmQgYmx1ZSBieXRlcyBvZiB0aGUgcGl4ZWxzIGluIGEgYnVmZmVy
Ci10ZW1wbGF0ZSA8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQ+Ci12b2lkIGlu
UGxhY2VTd2l6emxlKHVpbnQ4X3QqIGJ5dGVEYXRhLCB1bnNpZ25lZCBieXRlQ291bnQpCi17Ci0g
ICAgc2l6ZV90IHBpeGVsQ291bnQgPSBieXRlQ291bnQgLyA0OwotICAgIGF1dG8qIHBpeGVsRGF0
YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihieXRlRGF0YSk7Ci0KLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHBpeGVsQ291bnQ7ICsraSkgewotICAgICAgICB1aW50MzJfdCBwaXhl
bCA9ICpwaXhlbERhdGE7Ci0gICAgICAgIHNpemVfdCBieXRlUG9zaXRpb24gPSBpICogNDsKLQot
ICAgICAgICB1aW50MzJfdCBhbHBoYSA9IChwaXhlbCAmIDB4RkYwMDAwMDApID4+IDI0OwotICAg
ICAgICB1aW50MzJfdCByZWQgPSAocGl4ZWwgJiAweDAwRkYwMDAwKSA+PiAxNjsKLSAgICAgICAg
dWludDMyX3QgZ3JlZW4gPSAocGl4ZWwgJiAweDAwMDBGRjAwKSA+PiA4OwotICAgICAgICB1aW50
MzJfdCBibHVlID0gKHBpeGVsICYgMHgwMDAwMDBGRik7Ci0KLSAgICAgICAgLy8gKFApUkdCQSAt
PiBQQkdSQQotICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgaWYgKGFscGhhICE9IDI1NSkgewot
ICAgICAgICAgICAgICAgIHJlZCA9IChyZWQgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAg
ICAgICAgICAgZ3JlZW4gPSAoZ3JlZW4gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAg
ICAgICAgYmx1ZSA9IChibHVlICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgKnBpeGVsRGF0YSA9IChhbHBoYSA8PCAyNCkgfCByZWQgIDw8
IDE2IHwgZ3JlZW4gIDw8IDggfCBibHVlOwotICAgICAgICArK3BpeGVsRGF0YTsKLSAgICB9Ci19
Ci0KLS8vIE5vdGU6IEFzc3VtZXMgdGhhdCBieXRlcyBhcmUgYWxyZWFkeSBpbiBSR0JBIGZvcm1h
dAotdGVtcGxhdGUgPEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzaXJlZEZvcm1hdD4KLXZvaWQg
aW5QbGFjZUNoYW5nZVByZW11bHRpcGxpY2F0aW9uKHVpbnQ4X3QqIGJ5dGVEYXRhLCB1bnNpZ25l
ZCBieXRlQ291bnQpCi17Ci0gICAgc2l6ZV90IHBpeGVsQ291bnQgPSBieXRlQ291bnQgLyA0Owot
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwaXhlbENvdW50OyArK2kpIHsKLSAgICAgICAg
dW5zaWduZWQgeCA9IHBpeGVsQ291bnQgKiA0OwotCi0gICAgICAgIHVuc2lnbmVkIHJlZCA9IGJ5
dGVEYXRhW3hdOwotICAgICAgICB1bnNpZ25lZCBncmVlbiA9IGJ5dGVEYXRhW3ggKyAxXTsKLSAg
ICAgICAgdW5zaWduZWQgYmx1ZSA9IGJ5dGVEYXRhW3ggKyAyXTsKLSAgICAgICAgdW5zaWduZWQg
YWxwaGEgPSBieXRlRGF0YVt4ICsgM107Ci0KLSAgICAgICAgaWYgKGRlc2lyZWRGb3JtYXQgPT0g
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgaWYg
KGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgIHJlZCA9IChyZWQgKiBhbHBoYSArIDI1
NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgZ3JlZW4gPSAoZ3JlZW4gKiBhbHBoYSArIDI1NCkg
LyAyNTU7Ci0gICAgICAgICAgICAgICAgYmx1ZSA9IChibHVlICogYWxwaGEgKyAyNTQpIC8gMjU1
OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGFscGhh
ICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgIHJlZCA9IHJlZCAqIDI1NSAvIGFs
cGhhOwotICAgICAgICAgICAgICAgIGdyZWVuID0gZ3JlZW4gKiAyNTUgLyBhbHBoYTsKLSAgICAg
ICAgICAgICAgICBibHVlID0gYmx1ZSAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgdWludDMyX3QqIHBpeGVsID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
MzJfdCo+KGJ5dGVEYXRhKSArIGk7Ci0gICAgICAgICpwaXhlbCA9IChhbHBoYSA8PCAyNCkgfCBy
ZWQgIDw8IDE2IHwgZ3JlZW4gIDw8IDggfCBibHVlOwotICAgIH0KLX0KLQotUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBkZXNpcmVkRm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiBz
aXplLCBib29sIC8qIGFjY2VsZXJhdGVSZW5kZXJpbmcgKi8sIGZsb2F0IC8qIHJlc29sdXRpb25T
Y2FsZSAqLykgY29uc3QKLXsKLSAgICBhdXRvIG51bUJ5dGVzID0gcmVjdC5hcmVhPFJlY29yZE92
ZXJmbG93PigpICogNDsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6
OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobnVtQnl0ZXMudW5zYWZlR2V0KCkpOwotICAgIGlmICgh
cmVzdWx0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICghYml0bWFwKQotICAg
ICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgaWYgKCFyZWFkRGF0YUZyb21CaXRtYXBJZk5lZWRl
ZChkZXNpcmVkRm9ybWF0KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHJh
d0JpdG1hcFNpemUgPSBiaXRtYXAtPkdldFNpemUoKTsKLSAgICBJbnRTaXplIGJpdG1hcFNpemUo
Y2xhbXBUbzxpbnQ+KHJhd0JpdG1hcFNpemUud2lkdGgpLCBjbGFtcFRvPGludD4ocmF3Qml0bWFw
U2l6ZS5oZWlnaHQpKTsKLQotICAgIGlmIChyZWN0LmxvY2F0aW9uKCkgPT0gSW50UG9pbnQoKSAm
JiByZWN0LnNpemUoKSA9PSBiaXRtYXBTaXplKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG51
bUJ5dGVzLnVuc2FmZUdldCgpID09IGRhdGEuc2l6ZSgpKTsKLSAgICAgICAgcmVzdWx0LT5zZXRS
YW5nZShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksIDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IC8vIE9ubHkgd2FudCBwYXJ0IG9mIHRoZSBiaXRtYXAuCi0gICAgICAgIGlmICghY29weVJlY3RG
cm9tRGF0YShyZWN0LCByZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
fQotCi0gICAgaWYgKGJ5dGVGb3JtYXQgIT0gZGVzaXJlZEZvcm1hdCkgewotICAgICAgICAvLyBJ
bi1tZW1vcnkgZGF0YSBkb2VzIG5vdCBtYXRjaCBkZXNpcmVkIGZvcm1hdC4gTmVlZCB0byBzd2l6
emxlIHRoZSByZXN1bHRzLgotICAgICAgICBpZiAoZGVzaXJlZEZvcm1hdCA9PSBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCi0gICAgICAgICAgICBpblBsYWNlQ2hhbmdl
UHJlbXVsdGlwbGljYXRpb248QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
PihyZXN1bHQtPmRhdGEoKSwgcmVzdWx0LT5sZW5ndGgoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGluUGxhY2VDaGFuZ2VQcmVtdWx0aXBsaWNhdGlvbjxBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkPihyZXN1bHQtPmRhdGEoKSwgcmVzdWx0LT5sZW5ndGgoKSk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBJbWFnZUJ1ZmZlckRhdGE6OnJl
YWREYXRhRnJvbUJpdG1hcElmTmVlZGVkKEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzaXJlZEZv
cm1hdCkgY29uc3QKLXsKLSAgICBpZiAoYml0bWFwQnVmZmVyU3luYyAhPSBCaXRtYXBCdWZmZXJT
eW5jOjpCdWZmZXJPdXRPZlN5bmMpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgSW50U2l6
ZSBwaXhlbFNpemUgPSBiaXRtYXAtPkdldFBpeGVsU2l6ZSgpOwotCi0gICAgYXV0byBudW1CeXRl
cyA9IHBpeGVsU2l6ZS5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKLSAgICBpZiAobnVtQnl0
ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb250ZXh0
LT5lbmREcmF3KCk7Ci0KLSAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiBkMmREZXZpY2VD
b250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LT5kZXZpY2VDb250ZXh0KCk7Ci0gICAgQVNTRVJUKCEh
ZDJkRGV2aWNlQ29udGV4dCk7Ci0KLSAgICBhdXRvIGJ5dGVzUGVyUm93SW5EYXRhID0gcGl4ZWxT
aXplLndpZHRoKCkgKiA0OwotCi0gICAgLy8gQ29weSBHUFUgZGF0YSBmcm9tIHRoZSBJRDJEMUJp
dG1hcCB0byBhIENQVS1iYWNrZWQgSUQyRDFCaXRtYXAxCi0gICAgQ09NUHRyPElEMkQxQml0bWFw
MT4gY3B1Qml0bWFwOwotICAgIEQyRDFfQklUTUFQX1BST1BFUlRJRVMxIGJpdG1hcFByb3BlcnRp
ZXMyID0gRDJEMTo6Qml0bWFwUHJvcGVydGllczEoRDJEMV9CSVRNQVBfT1BUSU9OU19DUFVfUkVB
RCB8IEQyRDFfQklUTUFQX09QVElPTlNfQ0FOTk9UX0RSQVcsIERpcmVjdDJEOjpwaXhlbEZvcm1h
dCgpKTsKLSAgICBIUkVTVUxUIGhyID0gZDJkRGV2aWNlQ29udGV4dC0+Q3JlYXRlQml0bWFwKHBp
eGVsU2l6ZSwgbnVsbHB0ciwgYnl0ZXNQZXJSb3dJbkRhdGEsIGJpdG1hcFByb3BlcnRpZXMyLCAm
Y3B1Qml0bWFwKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGF1dG8gdGFyZ2V0UG9zID0gRDJEMTo6UG9pbnQyVSgpOwotICAgIEQyRDFfUkVD
VF9VIGRhdGFSZWN0ID0gRDJEMTo6UmVjdFUoMCwgMCwgcGl4ZWxTaXplLndpZHRoKCksIHBpeGVs
U2l6ZS5oZWlnaHQoKSk7Ci0gICAgaHIgPSBjcHVCaXRtYXAtPkNvcHlGcm9tQml0bWFwKCZ0YXJn
ZXRQb3MsIGJpdG1hcC5nZXQoKSwgJmRhdGFSZWN0KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEQyRDFfTUFQUEVEX1JFQ1QgbWFwcGVkRGF0
YTsKLSAgICBociA9IGNwdUJpdG1hcC0+TWFwKEQyRDFfTUFQX09QVElPTlNfUkVBRCwgJm1hcHBl
ZERhdGEpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgaWYgKCFtYXBwZWREYXRhLmJpdHMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmICghZW5zdXJlQmFja2luZ1N0b3JlKHBpeGVsU2l6ZSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIC8vIFNvZnR3YXJlIGZpbHRlcnMgZXhwZWN0IFJHQkEgYnl0ZXMuIFdlIG5lZWQg
dG8gc3dpenpsZSBmcm9tIERpcmVjdDJEJ3MgQkdSQSB0byBiZSBjb21wYXRpYmxlLgotICAgIGlm
IChkZXNpcmVkRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQp
Ci0gICAgICAgIHN3aXp6bGVBbmRQcmVtdWx0aXBseTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkPihtYXBwZWREYXRhLmJpdHMsIHBpeGVsU2l6ZS5oZWlnaHQoKSwgcGl4ZWxT
aXplLndpZHRoKCksIG1hcHBlZERhdGEucGl0Y2gsIGJ5dGVzUGVyUm93SW5EYXRhLCBkYXRhLmRh
dGEoKSk7Ci0gICAgZWxzZQotICAgICAgICBzd2l6emxlQW5kUHJlbXVsdGlwbHk8QWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkPihtYXBwZWREYXRhLmJpdHMsIHBpeGVsU2l6
ZS5oZWlnaHQoKSwgcGl4ZWxTaXplLndpZHRoKCksIG1hcHBlZERhdGEucGl0Y2gsIGJ5dGVzUGVy
Um93SW5EYXRhLCBkYXRhLmRhdGEoKSk7Ci0KLSAgICBieXRlRm9ybWF0ID0gZGVzaXJlZEZvcm1h
dDsKLQotICAgIGJpdG1hcEJ1ZmZlclN5bmMgPSBCaXRtYXBCdWZmZXJTeW5jOjpJblN5bmM7Ci0K
LSAgICBociA9IGNwdUJpdG1hcC0+VW5tYXAoKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7
Ci0KLSAgICBjb250ZXh0LT5iZWdpbkRyYXcoKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12
b2lkIEltYWdlQnVmZmVyRGF0YTo6cHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291
cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYg
c291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCAvKiBhY2NlbGVyYXRlUmVuZGVyaW5n
ICovLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgQVNTRVJUKHNvdXJjZVJlY3Qud2lk
dGgoKSA+IDApOwotICAgIEFTU0VSVChzb3VyY2VSZWN0LmhlaWdodCgpID4gMCk7Ci0KLSAgICBD
aGVja2VkPGludD4gb3JpZ2lueCA9IHNvdXJjZVJlY3QueCgpOwotICAgIENoZWNrZWQ8aW50PiBk
ZXN0eCA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LngoKSkgKyBzb3VyY2VSZWN0LngoKSk7Ci0g
ICAgZGVzdHggKj0gcmVzb2x1dGlvblNjYWxlOwotICAgIEFTU0VSVChkZXN0eC51bnNhZmVHZXQo
KSA+PSAwKTsKLSAgICBBU1NFUlQoZGVzdHgudW5zYWZlR2V0KCkgPCBzaXplLndpZHRoKCkpOwot
ICAgIEFTU0VSVChvcmlnaW54LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVChvcmlnaW54
LnVuc2FmZUdldCgpIDw9IHNvdXJjZVJlY3QubWF4WCgpKTsKLQotICAgIENoZWNrZWQ8aW50PiBl
bmR4ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueCgpKSArIHNvdXJjZVJlY3QubWF4WCgpKTsK
LSAgICBlbmR4ICo9IHJlc29sdXRpb25TY2FsZTsKLSAgICBBU1NFUlQoZW5keC51bnNhZmVHZXQo
KSA8PSBzaXplLndpZHRoKCkpOwotCi0gICAgQ2hlY2tlZDxpbnQ+IHdpZHRoID0gc291cmNlUmVj
dC53aWR0aCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0dyA9IGVuZHggLSBkZXN0eDsKLQotICAg
IENoZWNrZWQ8aW50PiBvcmlnaW55ID0gc291cmNlUmVjdC55KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+
IGRlc3R5ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueSgpKSArIHNvdXJjZVJlY3QueSgpKTsK
LSAgICBkZXN0eSAqPSByZXNvbHV0aW9uU2NhbGU7Ci0gICAgQVNTRVJUKGRlc3R5LnVuc2FmZUdl
dCgpID49IDApOwotICAgIEFTU0VSVChkZXN0eS51bnNhZmVHZXQoKSA8IHNpemUuaGVpZ2h0KCkp
OwotICAgIEFTU0VSVChvcmlnaW55LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVChvcmln
aW55LnVuc2FmZUdldCgpIDw9IHNvdXJjZVJlY3QubWF4WSgpKTsKLQotICAgIENoZWNrZWQ8aW50
PiBlbmR5ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueSgpKSArIHNvdXJjZVJlY3QubWF4WSgp
KTsKLSAgICBlbmR5ICo9IHJlc29sdXRpb25TY2FsZTsKLSAgICBBU1NFUlQoZW5keS51bnNhZmVH
ZXQoKSA8PSBzaXplLmhlaWdodCgpKTsKLQotICAgIENoZWNrZWQ8aW50PiBoZWlnaHQgPSBzb3Vy
Y2VSZWN0LmhlaWdodCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0aCA9IGVuZHkgLSBkZXN0eTsK
LQotICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKQotICAgICAgICByZXR1cm47Ci0K
LSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIGlmIChiaXRtYXApIHsKLSAgICAgICAgYXV0byBwaXhl
bFNpemUgPSBiaXRtYXAtPkdldFBpeGVsU2l6ZSgpOwotICAgICAgICBBU1NFUlQocGl4ZWxTaXpl
LndpZHRoID49IHNvdXJjZVNpemUud2lkdGgoKSk7Ci0gICAgICAgIEFTU0VSVChwaXhlbFNpemUu
d2lkdGggPj0gc2l6ZS53aWR0aCgpKTsKLSAgICAgICAgQVNTRVJUKHBpeGVsU2l6ZS5oZWlnaHQg
Pj0gc291cmNlU2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIEFTU0VSVChwaXhlbFNpemUuaGVpZ2h0
ID49IHNpemUuaGVpZ2h0KCkpOwotICAgIH0KLSNlbmRpZgotCi0gICAgaWYgKCFlbnN1cmVCYWNr
aW5nU3RvcmUoc2l6ZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChzb3VyY2VTaXplID09
IHNpemUpIHsKLSAgICAgICAgbWVtY3B5KGRhdGEuZGF0YSgpLCBzb3VyY2UuZGF0YSgpLCBzb3Vy
Y2UubGVuZ3RoKCkpOwotICAgICAgICBieXRlRm9ybWF0ID0gc291cmNlRm9ybWF0OwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHJlYWREYXRhRnJvbUJpdG1hcElmTmVlZGVkKGJ5dGVGb3JtYXQpOwot
ICAgICAgICBpZiAoIWNvcHlSZWN0RnJvbVNvdXJjZVRvRGF0YShzb3VyY2VSZWN0LCBzb3VyY2Us
IHNvdXJjZUZvcm1hdCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYml0bWFw
QnVmZmVyU3luYyA9IEJpdG1hcEJ1ZmZlclN5bmM6OkJpdG1hcE91dE9mU3luYzsKLX0KLQotYm9v
bCBJbWFnZUJ1ZmZlckRhdGE6OmNvcHlSZWN0RnJvbVNvdXJjZVRvRGF0YShjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCkKLXsKLSAgICBJbnRTaXplIHBpeGVsU2l6ZSA9IGJp
dG1hcC0+R2V0UGl4ZWxTaXplKCk7Ci0KLSAgICBJbnRSZWN0IHNvdXJjZVJlY3RUb0NvcHkgPSBz
b3VyY2VSZWN0OwotICAgIGlmICghSW50UmVjdChJbnRQb2ludCgpLCBwaXhlbFNpemUpLmNvbnRh
aW5zKHNvdXJjZVJlY3QpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGRlc3RC
dWZmZXJQb3NpdGlvbiA9IHNvdXJjZVJlY3QubG9jYXRpb24oKTsKLQotICAgIGlmIChzb3VyY2VG
b3JtYXQgPT0gYnl0ZUZvcm1hdCkKLSAgICAgICAgcmV0dXJuIGNvcHlSZWN0RnJvbVNvdXJjZVRv
RGVzdChzb3VyY2VSZWN0LCBzb3VyY2VSZWN0LnNpemUoKSwgc291cmNlLmRhdGEoKSwgYmFja2lu
Z1N0b3JlU2l6ZSwgZGF0YS5kYXRhKCksIGRlc3RCdWZmZXJQb3NpdGlvbik7Ci0KLSAgICBpZiAo
Ynl0ZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCi0g
ICAgICAgIHJldHVybiBjb3B5UmVjdEZyb21Tb3VyY2VUb0Rlc3RBbmRTZXRQcmVtdWx0aXBsaWNh
dGlvbjxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQ+KHNvdXJjZVJlY3Qs
IHNvdXJjZVJlY3Quc2l6ZSgpLCBzb3VyY2UuZGF0YSgpLCBiYWNraW5nU3RvcmVTaXplLCBkYXRh
LmRhdGEoKSwgZGVzdEJ1ZmZlclBvc2l0aW9uKTsKLQotICAgIHJldHVybiBjb3B5UmVjdEZyb21T
b3VyY2VUb0Rlc3RBbmRTZXRQcmVtdWx0aXBsaWNhdGlvbjxBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkPihzb3VyY2VSZWN0LCBzb3VyY2VSZWN0LnNpemUoKSwgc291cmNlLmRh
dGEoKSwgYmFja2luZ1N0b3JlU2l6ZSwgZGF0YS5kYXRhKCksIGRlc3RCdWZmZXJQb3NpdGlvbik7
Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpsb2FkRGF0YVRvQml0bWFwSWZOZWVkZWQoKQot
ewotICAgIGlmIChiaXRtYXBCdWZmZXJTeW5jICE9IEJpdG1hcEJ1ZmZlclN5bmM6OkJpdG1hcE91
dE9mU3luYyB8fCBkYXRhLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBw
aXhlbFNpemUgPSBiaXRtYXAtPkdldFBpeGVsU2l6ZSgpOwotICAgIEFTU0VSVChwaXhlbFNpemUu
d2lkdGggPj0gYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpKTsKLSAgICBBU1NFUlQocGl4ZWxTaXpl
LmhlaWdodCA+PSBiYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKTsKLQotICAgIENoZWNrZWQ8dW5z
aWduZWQsIFJlY29yZE92ZXJmbG93PiBudW1CeXRlcyA9IHBpeGVsU2l6ZS53aWR0aCAqIHBpeGVs
U2l6ZS5oZWlnaHQgKiA0OwotICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIFNvZnR3YXJlIGdlbmVyYXRlZCBiaXRtYXAgZGF0YSBpcyBp
biBSR0JBLiBXZSBuZWVkIHRvIHN3aXp6bGUgdG8gcHJlbXVsdGlwbGllZCBCR1JBIHRvIGJlIGNv
bXBhdGlibGUKLSAgICAvLyB3aXRoIHRoZSBIV05EL0hEQyByZW5kZXIgYmFja2luZyB3ZSB1c2Uu
Ci0gICAgaWYgKGJ5dGVGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkKQotICAgICAgICBpblBsYWNlU3dpenpsZTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQ+KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7IC8vIFJHQkEgLT4gUEJH
UkEKLSAgICBlbHNlCi0gICAgICAgIGluUGxhY2VTd2l6emxlPEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQ+KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7IC8vIFBSR0JBIC0+
IFBCR1JBCi0KLSAgICBhdXRvIGJ5dGVzUGVyUm93SW5EYXRhID0gYmFja2luZ1N0b3JlU2l6ZS53
aWR0aCgpICogNDsKLQotICAgIEhSRVNVTFQgaHIgPSBiaXRtYXAtPkNvcHlGcm9tTWVtb3J5KG51
bGxwdHIsIGRhdGEuZGF0YSgpLCBieXRlc1BlclJvd0luRGF0YSk7Ci0gICAgQVNTRVJUKFNVQ0NF
RURFRChocikpOwotCi0gICAgYml0bWFwQnVmZmVyU3luYyA9IEJpdG1hcEJ1ZmZlclN5bmM6Oklu
U3luYzsKLX0KLQotQ09NUHRyPElEMkQxQml0bWFwPiBJbWFnZUJ1ZmZlckRhdGE6OmNvbXBhdGli
bGVCaXRtYXAoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKLXsKLSAgICBsb2FkRGF0
YVRvQml0bWFwSWZOZWVkZWQoKTsKLQotICAgIGlmICghcmVuZGVyVGFyZ2V0KQotICAgICAgICBy
ZXR1cm4gYml0bWFwOwotCi0gICAgaWYgKHBsYXRmb3JtQ29udGV4dC0+cmVuZGVyVGFyZ2V0KCkg
PT0gcmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdl
dD4gYml0bWFwVGFyZ2V0KFF1ZXJ5LCByZW5kZXJUYXJnZXQpOwotICAgICAgICBpZiAoYml0bWFw
VGFyZ2V0KSB7Ci0gICAgICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGJhY2tpbmdCaXRtYXA7
Ci0gICAgICAgICAgICBpZiAoU1VDQ0VFREVEKGJpdG1hcFRhcmdldC0+R2V0Qml0bWFwKCZiYWNr
aW5nQml0bWFwKSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYmFja2luZ0JpdG1hcCAhPSBiaXRt
YXApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBiaXRtYXA7Ci0KLSAgICAgICAgICAgICAg
ICAvLyBXZSBjYW4ndCBkcmF3IGFuIElEMkQxQml0bWFwIHRvIGl0c2VsZi4gTXVzdCByZXR1cm4g
YSBjb3B5LgotICAgICAgICAgICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY29waWVkQml0bWFw
OwotICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVuZGVyVGFyZ2V0LT5DcmVhdGVCaXRt
YXAoYml0bWFwLT5HZXRQaXhlbFNpemUoKSwgRGlyZWN0MkQ6OmJpdG1hcFByb3BlcnRpZXMoKSwg
JmNvcGllZEJpdG1hcCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQoY29w
aWVkQml0bWFwLT5Db3B5RnJvbUJpdG1hcChudWxscHRyLCBiaXRtYXAuZ2V0KCksIG51bGxwdHIp
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb3BpZWRCaXRtYXA7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgYXV0byBz
aXplID0gYml0bWFwLT5HZXRQaXhlbFNpemUoKTsKLSAgICBBU1NFUlQoc2l6ZS5oZWlnaHQgJiYg
c2l6ZS53aWR0aCk7Ci0KLSAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gbnVt
Qnl0ZXMgPSBzaXplLndpZHRoICogc2l6ZS5oZWlnaHQgKiA0OwotICAgIGlmIChudW1CeXRlcy5o
YXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8gQ29weSB0
aGUgYml0cyBmcm9tIGN1cnJlbnQgcmVuZGVyVGFyZ2V0IHRvIHRoZSBvdXRwdXQgdGFyZ2V0Lgot
ICAgIC8vIFdlIGNhbm5vdCBhY2Nlc3MgdGhlIGRhdGEgYmFja2luZyBhbiBJV0lDQml0bWFwIHdo
aWxlIGFuIGFjdGl2ZSBkcmF3IHNlc3Npb24gaXMgb3Blbi4KLSAgICBjb250ZXh0LT5lbmREcmF3
KCk7Ci0KLSAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiBzb3VyY2VEZXZpY2VDb250ZXh0
ID0gcGxhdGZvcm1Db250ZXh0LT5kZXZpY2VDb250ZXh0KCk7Ci0gICAgaWYgKCFzb3VyY2VEZXZp
Y2VDb250ZXh0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENPTVB0cjxJRDJEMUJp
dG1hcDE+IHNvdXJjZUNQVUJpdG1hcDsKLSAgICBEMkQxX0JJVE1BUF9QUk9QRVJUSUVTMSBiaXRt
YXBQcm9wZXJ0aWVzID0gRDJEMTo6Qml0bWFwUHJvcGVydGllczEoRDJEMV9CSVRNQVBfT1BUSU9O
U19DUFVfUkVBRCB8IEQyRDFfQklUTUFQX09QVElPTlNfQ0FOTk9UX0RSQVcsIERpcmVjdDJEOjpw
aXhlbEZvcm1hdCgpKTsKLSAgICBIUkVTVUxUIGhyID0gc291cmNlRGV2aWNlQ29udGV4dC0+Q3Jl
YXRlQml0bWFwKGJpdG1hcC0+R2V0UGl4ZWxTaXplKCksIG51bGxwdHIsIGJ5dGVzUGVyUm93LnVu
c2FmZUdldCgpLCBiaXRtYXBQcm9wZXJ0aWVzLCAmc291cmNlQ1BVQml0bWFwKTsKLSAgICBpZiAo
IVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKCFzb3Vy
Y2VDUFVCaXRtYXApCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaHIgPSBzb3VyY2VD
UFVCaXRtYXAtPkNvcHlGcm9tQml0bWFwKG51bGxwdHIsIGJpdG1hcC5nZXQoKSwgbnVsbHB0cik7
Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IEQyRDFfTUFQUEVEX1JFQ1QgbWFwcGVkU291cmNlRGF0YTsKLSAgICBociA9IHNvdXJjZUNQVUJp
dG1hcC0+TWFwKEQyRDFfTUFQX09QVElPTlNfUkVBRCwgJm1hcHBlZFNvdXJjZURhdGEpOwotICAg
IGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDT01Q
dHI8SUQyRDFEZXZpY2VDb250ZXh0PiB0YXJnZXREZXZpY2VDb250ZXh0OwotICAgIGhyID0gcmVu
ZGVyVGFyZ2V0LT5RdWVyeUludGVyZmFjZSgmdGFyZ2V0RGV2aWNlQ29udGV4dCk7Ci0gICAgQVNT
RVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBjb21wYXRpYmxl
Qml0bWFwOwotICAgIGhyID0gdGFyZ2V0RGV2aWNlQ29udGV4dC0+Q3JlYXRlQml0bWFwKGJpdG1h
cC0+R2V0UGl4ZWxTaXplKCksIG1hcHBlZFNvdXJjZURhdGEuYml0cywgbWFwcGVkU291cmNlRGF0
YS5waXRjaCwgRGlyZWN0MkQ6OmJpdG1hcFByb3BlcnRpZXMoKSwgJmNvbXBhdGlibGVCaXRtYXAp
OwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICBociA9IHNvdXJjZUNQVUJpdG1hcC0+VW5tYXAoKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhy
KSk7Ci0KLSAgICBjb250ZXh0LT5iZWdpbkRyYXcoKTsKLQotICAgIHJldHVybiBjb21wYXRpYmxl
Qml0bWFwOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURp
cmVjdDJELmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZm
ZXJEYXRhRGlyZWN0MkQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM5NGQ4YTQ4
MjJmMTI1ZjQwNmYzMDA3NzQ3ZmY5MzU4YzE1NmEzMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuaAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0j
aW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRp
Yy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
Ci0KLWludGVyZmFjZSBJRDJEMVJlbmRlclRhcmdldDsKLWludGVyZmFjZSBJRDJEMUJpdG1hcDsK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDsK
LQotc3RydWN0IEltYWdlQnVmZmVyRGF0YSB7Ci0gICAgbXV0YWJsZSBJbnRTaXplIGJhY2tpbmdT
dG9yZVNpemU7Ci0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGJ5dGVzUGVy
Um93OwotCi0gICAgLy8gT25seSBmb3Igc29mdHdhcmUgSW1hZ2VCdWZmZXJzLgotICAgIG11dGFi
bGUgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgbXV0YWJsZSBBbHBoYVByZW11bHRpcGxpY2F0
aW9uIGJ5dGVGb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQg
fTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+IHBsYXRmb3Jt
Q29udGV4dDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBjb250ZXh0Owot
ICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gYml0bWFwOwotCi0gICAgZW51bSBjbGFzcyBCaXRtYXBC
dWZmZXJTeW5jIHsgSW5TeW5jLCBCaXRtYXBPdXRPZlN5bmMsIEJ1ZmZlck91dE9mU3luYyB9Owot
ICAgIG11dGFibGUgQml0bWFwQnVmZmVyU3luYyBiaXRtYXBCdWZmZXJTeW5jIHsgQml0bWFwQnVm
ZmVyU3luYzo6QnVmZmVyT3V0T2ZTeW5jIH07Ci0KLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IGdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0
IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSkgY29uc3Q7Ci0gICAgdm9pZCBwdXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3Vy
Y2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBz
b3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVz
dFBvaW50LCBjb25zdCBJbnRTaXplJiwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBjb21wYXRpYmxlQml0
bWFwKElEMkQxUmVuZGVyVGFyZ2V0Kik7Ci0KLSAgICBib29sIGVuc3VyZUJhY2tpbmdTdG9yZShj
b25zdCBJbnRTaXplJikgY29uc3Q7Ci0gICAgdm9pZCBsb2FkRGF0YVRvQml0bWFwSWZOZWVkZWQo
KTsKLSAgICBib29sIHJlYWREYXRhRnJvbUJpdG1hcElmTmVlZGVkKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gZGVzaXJlZEZvcm1hdCkgY29uc3Q7Ci0gICAgYm9vbCBjb3B5UmVjdEZyb21EYXRhKGNv
bnN0IEludFJlY3QmLCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+JikgY29uc3Q7Ci0gICAgYm9v
bCBjb3B5UmVjdEZyb21Tb3VyY2VUb0RhdGEoY29uc3QgSW50UmVjdCYsIGNvbnN0IFVpbnQ4Q2xh
bXBlZEFycmF5JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7Ci0gICAgdm9pZCBtYXJrQnVmZmVy
T3V0T2ZTeW5jKCkgeyBiaXRtYXBCdWZmZXJTeW5jID0gQml0bWFwQnVmZmVyU3luYzo6QnVmZmVy
T3V0T2ZTeW5jOyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJl
Y3QyRC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwNDIxOGYxZWY0ZjU3OGNl
MDdmOTRiN2E4ZWNiYjgzMGE1MjY3ZjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdl
QnVmZmVyRGlyZWN0MkQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzUxICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotCi0jaWYgVVNFKERJUkVDVDJEKQot
Ci0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJDT01QdHIuaCIKLSNpbmNsdWRl
ICJEaXJlY3QyRFV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkltYWdlRGVjb2RlckRpcmVjdDJELmgiCi0j
aW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJE
LmgiCi0jaW5jbHVkZSA8ZDJkMV8xLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHdp
bmNvZGVjLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvQ2hl
Y2tlZEFyaXRobWV0aWMuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZm
ZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
Ci17Ci0gICAgaWYgKHNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IGNvbnRleHQucmVuZGVyaW5nTW9kZSgp
OwotICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVy
U2l6ZShzaXplLCBjb250ZXh0KTsKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIoc2NhbGVkU2l6
ZSwgMSwgQ29sb3JTcGFjZTo6U1JHQiwgcmVuZGVyaW5nTW9kZSwgbnVsbHB0ciwgJmNvbnRleHQs
IHN1Y2Nlc3MpKTsKLQotICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0aGUgZ3Jh
cGhpY3MgY29udGV4dC4KLSAgICBidWZmZXItPmNvbnRleHQoKS5zY2FsZShGbG9hdFNpemUoc2Nh
bGVkU2l6ZS53aWR0aCgpIC8gc2l6ZS53aWR0aCgpLCBzY2FsZWRTaXplLmhlaWdodCgpIC8gc2l6
ZS5oZWlnaHQoKSkpOwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLUltYWdlQnVmZmVyOjpJbWFn
ZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSAvKmNvbG9yU3BhY2UqLywgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25z
dCBIb3N0V2luZG93KiwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0LCBib29s
JiBzdWNjZXNzKQotICAgIDogbV9sb2dpY2FsU2l6ZShzaXplKQotICAgICwgbV9yZXNvbHV0aW9u
U2NhbGUocmVzb2x1dGlvblNjYWxlKQotewotICAgIHN1Y2Nlc3MgPSBmYWxzZTsgLy8gTWFrZSBl
YXJseSByZXR1cm4gbWVhbiBmYWlsdXJlLgotICAgIGZsb2F0IHNjYWxlZFdpZHRoID0gc3RkOjpj
ZWlsKHJlc29sdXRpb25TY2FsZSAqIHNpemUud2lkdGgoKSk7Ci0gICAgZmxvYXQgc2NhbGVkSGVp
Z2h0ID0gc3RkOjpjZWlsKHJlc29sdXRpb25TY2FsZSAqIHNpemUuaGVpZ2h0KCkpOwotCi0gICAg
Ly8gRklYTUU6IFNob3VsZCB3ZSBhdXRvbWF0aWNhbGx5IHVzZSBhIGxvd2VyIHJlc29sdXRpb24/
Ci0gICAgaWYgKCFGbG9hdFNpemUoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCkuaXNFeHByZXNz
aWJsZUFzSW50U2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3NpemUgPSBJbnRTaXpl
KHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpOwotICAgIG1fZGF0YS5iYWNraW5nU3RvcmVTaXpl
ID0gbV9zaXplOwotCi0gICAgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nID0gcmVuZGVyaW5nTW9k
ZSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsKLSAgICBpZiAobV9zaXplLndpZHRoKCkg
PD0gMCB8fCBtX3NpemUuaGVpZ2h0KCkgPD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8g
UHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cwotICAgIG1fZGF0YS5ieXRlc1BlclJvdyA9IDQgKiBD
aGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4obV9kYXRhLmJhY2tpbmdTdG9yZVNpemUu
d2lkdGgoKSk7Ci0gICAgQ2hlY2tlZDxzaXplX3QsIFJlY29yZE92ZXJmbG93PiBudW1CeXRlcyA9
IENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihtX2RhdGEuYmFja2luZ1N0b3JlU2l6
ZS5oZWlnaHQoKSkgKiBtX2RhdGEuYnl0ZXNQZXJSb3c7Ci0gICAgaWYgKG51bUJ5dGVzLmhhc092
ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byogcGxhdGZvcm1Db250ZXh0
ID0gdGFyZ2V0Q29udGV4dCA/IHRhcmdldENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpIDogbnVs
bHB0cjsKLSAgICBhdXRvKiByZW5kZXJUYXJnZXQgPSBwbGF0Zm9ybUNvbnRleHQgPyBwbGF0Zm9y
bUNvbnRleHQtPnJlbmRlclRhcmdldCgpIDogbnVsbHB0cjsKLQotICAgIGlmICghcmVuZGVyVGFy
Z2V0KQotICAgICAgICByZW5kZXJUYXJnZXQgPSBHcmFwaGljc0NvbnRleHQ6OmRlZmF1bHRSZW5k
ZXJUYXJnZXQoKTsKLQotICAgIGF1dG8gYml0bWFwQ29udGV4dCA9IERpcmVjdDJEOjpjcmVhdGVC
aXRtYXBSZW5kZXJUYXJnZXRPZlNpemUobV9sb2dpY2FsU2l6ZSwgcmVuZGVyVGFyZ2V0LCBtX3Jl
c29sdXRpb25TY2FsZSk7Ci0gICAgaWYgKCFiaXRtYXBDb250ZXh0KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBIUkVTVUxUIGhyID0gYml0bWFwQ29udGV4dC0+R2V0Qml0bWFwKCZtX2RhdGEuYml0
bWFwKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
ZGF0YS5wbGF0Zm9ybUNvbnRleHQgPSBtYWtlVW5pcXVlPFBsYXRmb3JtQ29udGV4dERpcmVjdDJE
PihiaXRtYXBDb250ZXh0LmdldCgpLCBbdGhpc10oKSB7Ci0gICAgICAgIG1fZGF0YS5sb2FkRGF0
YVRvQml0bWFwSWZOZWVkZWQoKTsKLSAgICB9LCBbdGhpc10oKSB7Ci0gICAgICAgIG1fZGF0YS5t
YXJrQnVmZmVyT3V0T2ZTeW5jKCk7Ci0gICAgfSk7Ci0gICAgbV9kYXRhLmNvbnRleHQgPSBtYWtl
VW5pcXVlPEdyYXBoaWNzQ29udGV4dD4obV9kYXRhLnBsYXRmb3JtQ29udGV4dC5nZXQoKSwgR3Jh
cGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKLQot
ICAgIHN1Y2Nlc3MgPSB0cnVlOwotfQotCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3Qg
RmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgaW1hZ2VD
b2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cq
LCBib29sJiBzdWNjZXNzKQotICAgIDogSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxl
LCBpbWFnZUNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIG51bGxwdHIsIG51bGxwdHIsIHN1Y2Nl
c3MpCi17Ci19Ci0KLUltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7Ci0KLUdy
YXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSBjb25zdAotewotICAgIHJldHVy
biAqbV9kYXRhLmNvbnRleHQ7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmZsdXNoQ29udGV4dCgp
IGNvbnN0Ci17Ci0gICAgY29udGV4dCgpLmZsdXNoKCk7Ci19Ci0KLXN0YXRpYyBDT01QdHI8SUQy
RDFCaXRtYXA+IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KElEMkQxQml0bWFwUmVuZGVy
VGFyZ2V0KiBiaXRtYXBUYXJnZXQsIElEMkQxQml0bWFwKiBpbWFnZSwgY29uc3QgSW50U2l6ZSYg
Ym91bmRzKQotewotICAgIEZsb2F0U2l6ZSBpbWFnZVNpemUgPSBpbWFnZSA/IG5hdGl2ZUltYWdl
U2l6ZShpbWFnZSkgOiBGbG9hdFNpemUoKTsKLQotICAgIGlmIChpbWFnZSAmJiAoc3RhdGljX2Nh
c3Q8c2l6ZV90PihpbWFnZVNpemUud2lkdGgoKSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihib3Vu
ZHMud2lkdGgoKSkgfHwgc3RhdGljX2Nhc3Q8c2l6ZV90PihpbWFnZVNpemUuaGVpZ2h0KCkpICE9
IHN0YXRpY19jYXN0PHNpemVfdD4oYm91bmRzLmhlaWdodCgpKSkpIHsKLSAgICAgICAgQ09NUHRy
PElEMkQxQml0bWFwPiBjcm9wcGVkQml0bWFwID0gRGlyZWN0MkQ6OmNyZWF0ZUJpdG1hcChiaXRt
YXBUYXJnZXQsIGJvdW5kcyk7Ci0gICAgICAgIGlmIChjcm9wcGVkQml0bWFwKSB7Ci0gICAgICAg
ICAgICBhdXRvIHNvdXJjZVJlY3QgPSBEMkQxOjpSZWN0VSgwLCAwLCBib3VuZHMud2lkdGgoKSwg
Ym91bmRzLmhlaWdodCgpKTsKLSAgICAgICAgICAgIEhSRVNVTFQgaHIgPSBjcm9wcGVkQml0bWFw
LT5Db3B5RnJvbUJpdG1hcChudWxscHRyLCBpbWFnZSwgJnNvdXJjZVJlY3QpOwotICAgICAgICAg
ICAgaWYgKFNVQ0NFRURFRChocikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNyb3BwZWRCaXRt
YXA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gaW1hZ2U7Ci19Ci0KLXN0YXRpYyBS
ZWZQdHI8SW1hZ2U+IGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoSUQyRDFC
aXRtYXBSZW5kZXJUYXJnZXQqIGJpdG1hcFRhcmdldCwgQ09NUHRyPElEMkQxQml0bWFwPiYmIGlt
YWdlLCBJbnRTaXplIGludGVybmFsU2l6ZSwgSW50U2l6ZSBsb2dpY2FsU2l6ZSwgSW50U2l6ZSBi
YWNraW5nU3RvcmVTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1dGlv
biBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAgaWYgKHJlc29sdXRpb25TY2FsZSA9PSAxIHx8
IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKLSAgICAgICAg
aW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShiaXRtYXBUYXJnZXQsIGltYWdl
LmdldCgpLCBpbnRlcm5hbFNpemUpOwotICAgIGVsc2UgewotICAgICAgICAvLyBGSVhNRTogTmVl
ZCB0byBpbXBsZW1lbnQgc2NhbGVkIHZlcnNpb24KLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICB9Ci0KLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsKLX0KLQotUmVmUHRy
PEltYWdlPiBJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2
aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAg
IENPTVB0cjxJRDJEMUJpdG1hcD4gaW1hZ2U7Ci0gICAgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09
IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQotICAg
ICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOwotICAgIGVsc2UKLSAg
ICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotCi0g
ICAgYXV0byBiaXRtYXBUYXJnZXQgPSByZWludGVycHJldF9jYXN0PElEMkQxQml0bWFwUmVuZGVy
VGFyZ2V0Kj4oY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICByZXR1cm4gY3JlYXRl
Qml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChiaXRtYXBUYXJnZXQsIFdURk1vdmUoaW1h
Z2UpLCBpbnRlcm5hbFNpemUoKSwgbG9naWNhbFNpemUoKSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNp
emUsIG1fcmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwotfQotCi1SZWZQdHI8
SW1hZ2U+IEltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gaW1hZ2VCdWZmZXIsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24p
Ci17Ci0gICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBpbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXpl
KCk7Ci0gICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSA9IGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgp
OwotICAgIEludFNpemUgYmFja2luZ1N0b3JlU2l6ZSA9IGltYWdlQnVmZmVyLT5tX2RhdGEuYmFj
a2luZ1N0b3JlU2l6ZTsKLSAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSBpbWFnZUJ1ZmZlci0+
bV9yZXNvbHV0aW9uU2NhbGU7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+
IGJpdG1hcFRhcmdldDsKLSAgICBIUkVTVUxUIGhyID0gaW1hZ2VCdWZmZXItPmNvbnRleHQoKS5w
bGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCktPlF1ZXJ5SW50ZXJmYWNlKCZiaXRtYXBU
YXJnZXQpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChiaXRt
YXBUYXJnZXQuZ2V0KCksIHNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RGTW92ZShpbWFnZUJ1ZmZlcikp
LCBpbnRlcm5hbFNpemUsIGxvZ2ljYWxTaXplLCBiYWNraW5nU3RvcmVTaXplLCByZXNvbHV0aW9u
U2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Ci19Ci0KLUNPTVB0cjxJRDJEMUJpdG1hcD4gSW1h
Z2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBpbWFnZUJ1ZmZlcikKLXsKLSAgICAvLyBGSVhNRTogU2VlIGlmIHdlIGNhbiByZXVzZSB0aGUg
b24taGFyZHdhcmUgaW1hZ2UuCi0gICAgcmV0dXJuIGltYWdlQnVmZmVyLT5jb3B5TmF0aXZlSW1h
Z2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotfQotCi1DT01QdHI8SUQyRDFCaXRtYXA+IEltYWdl
QnVmZmVyOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IpIGNv
bnN0Ci17Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBiaXRtYXBUYXJnZXQ7
Ci0gICAgSFJFU1VMVCBociA9IGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFy
Z2V0KCktPlF1ZXJ5SW50ZXJmYWNlKCZiaXRtYXBUYXJnZXQpOwotICAgIGlmICghU1VDQ0VFREVE
KGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+
IGltYWdlOwotICAgIGhyID0gYml0bWFwVGFyZ2V0LT5HZXRCaXRtYXAoJmltYWdlKTsKLSAgICBB
U1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICAvLyBGSVhNRTogbV9kYXRhLmRhdGEgaXMgbnVs
bHB0ciBldmVuIHdoZW4gYXNraW5nIHRvIGNvcHkgYmFja2luZyBzdG9yZSBsZWFkaW5nIHRvIHRl
c3QgZmFpbHVyZXMuCi0gICAgaWYgKGNvcHlCZWhhdmlvciA9PSBDb3B5QmFja2luZ1N0b3JlICYm
IG1fZGF0YS5kYXRhLmlzRW1wdHkoKSkKLSAgICAgICAgY29weUJlaGF2aW9yID0gRG9udENvcHlC
YWNraW5nU3RvcmU7Ci0KLSAgICBDaGVja2VkPHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5
dGVzID0gQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KG1fZGF0YS5iYWNraW5nU3Rv
cmVTaXplLmhlaWdodCgpKSAqIG1fZGF0YS5ieXRlc1BlclJvdzsKLSAgICBpZiAobnVtQnl0ZXMu
aGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICghY29u
dGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKLSAgICAgICAgc3dpdGNoIChjb3B5QmVo
YXZpb3IpIHsKLSAgICAgICAgY2FzZSBEb250Q29weUJhY2tpbmdTdG9yZToKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIENvcHlCYWNraW5nU3RvcmU6Ci0gICAgICAgICAgICBEMkQx
X1JFQ1RfVSBiYWNraW5nU3RvcmVEaW1lbnN0aW9ucyA9IEludFJlY3QoSW50UG9pbnQoKSwgbV9k
YXRhLmJhY2tpbmdTdG9yZVNpemUpOwotICAgICAgICAgICAgaW1hZ2UtPkNvcHlGcm9tTWVtb3J5
KCZiYWNraW5nU3RvcmVEaW1lbnN0aW9ucywgbV9kYXRhLmRhdGEuZGF0YSgpLCAzMik7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0jaWYgVVNF
KElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBlbHNlCi0gICAgICAgIGltYWdl
ID0gbV9kYXRhLnN1cmZhY2UtPmNyZWF0ZUltYWdlKCk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBp
bWFnZTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGltYWdlQnVmZmVyLT5k
cmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQg
SW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0
ID0gc3JjUmVjdDsKLSAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUs
IG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIGF1dG8gY29tcGF0aWJsZUJpdG1hcCA9IG1fZGF0
YS5jb21wYXRpYmxlQml0bWFwKGRlc3RDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJU
YXJnZXQoKSk7Ci0KLSAgICBGbG9hdFNpemUgY3VycmVudEltYWdlU2l6ZSA9IG5hdGl2ZUltYWdl
U2l6ZShjb21wYXRpYmxlQml0bWFwKTsKLSAgICBpZiAoY3VycmVudEltYWdlU2l6ZS5pc1plcm8o
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGNv
bXBhdGlibGVCaXRtYXAsIGN1cnJlbnRJbWFnZVNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1Jl
Y3QsIG9wdGlvbnMpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGlj
c0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9y
bSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgRmxvYXRSZWN0IGFkanVz
dGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1
dGlvblNjYWxlLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBpZiAoIWNvbnRleHQoKS5pc0Fj
Y2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgIGlmICgmZGVzdENvbnRleHQgPT0gJmNvbnRl
eHQoKSB8fCBkZXN0Q29udGV4dC5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgICAg
ICBpZiAoUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpKSAv
LyBEcmF3aW5nIGludG8gb3VyIG93biBidWZmZXIsIG5lZWQgdG8gZGVlcCBjb3B5LgotICAgICAg
ICAgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0
ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBpbWFnZUZvclJl
bmRlcmluZyA9IGNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpCi0gICAgICAgICAgICAg
ICAgaW1hZ2VGb3JSZW5kZXJpbmctPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwg
YWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9u
cyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBj
b3B5ID0gY29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpKQotICAgICAgICAgICAgY29weS0+ZHJh
d1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5U
cmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICB9Ci19Ci0KLVJlZlB0cjxV
aW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShj
b25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRp
bmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIGlmIChjb250ZXh0KCku
aXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBJ
bnRSZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2lj
YWxDb29yZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNj
YWxlKTsKLQotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJy
YXlEaW1lbnNpb25zID0gc3JjUmVjdC5zaXplKCk7Ci0KLSAgICByZXR1cm4gbV9kYXRhLmdldERh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBzcmNSZWN0LCBpbnRl
cm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCksIDEpOwotfQotCi1S
ZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1h
Z2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25z
LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAgaWYgKGNv
bnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsK
LQotICAgIEludFJlY3Qgc3JjUmVjdCA9IHJlY3Q7Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0g
PT0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pCi0gICAgICAgIHNyY1JlY3Quc2NhbGUobV9yZXNv
bHV0aW9uU2NhbGUpOwotCi0gICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNpb25zKQotICAgICAgICAq
cGl4ZWxBcnJheURpbWVuc2lvbnMgPSBzcmNSZWN0LnNpemUoKTsKLQotICAgIHJldHVybiBtX2Rh
dGEuZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBzcmNSZWN0
LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCksIDEpOwot
fQotCi12b2lkIEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJy
YXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBidWZmZXJGb3JtYXQsIGNvbnN0IElu
dFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBv
aW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKLXsKLSAg
ICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29u
dGV4dCgpOwotCi0gICAgSW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0ID0gc291cmNlUmVjdDsKLSAg
ICBJbnRTaXplIHNjYWxlZFNvdXJjZVNpemUgPSBzb3VyY2VTaXplOwotICAgIGlmIChjb29yZGlu
YXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSB7Ci0gICAgICAgIHNjYWxlZFNv
dXJjZVJlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAgICAgICBzY2FsZWRTb3VyY2VT
aXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICB9Ci0KLSAgICBtX2RhdGEucHV0RGF0
YShzb3VyY2UsIGJ1ZmZlckZvcm1hdCwgc2NhbGVkU291cmNlU2l6ZSwgc2NhbGVkU291cmNlUmVj
dCwgZGVzdFBvaW50LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250
ZXh0KCksIDEpOwotfQotCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJp
bmcmLCBPcHRpb25hbDxkb3VibGU+LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gImRhdGE6LCJfczsKLX0KLQotVmVjdG9yPHVp
bnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIHsgfTsKLX0KLQotU3RyaW5nIEltYWdlRGF0YVRvRGF0YVVSTChjb25zdCBJbWFnZURh
dGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgZG91YmxlKiBxdWFsaXR5
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuICJkYXRhOiwiX3M7Ci19Ci0K
LXZvaWQgSW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSwgQ29sb3JT
cGFjZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMjcwYWJlZGYwYTYzNTBmZDU1OTQ4ZDQ4MWFiNzg5NWY2MjBiNDhjMwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZl
ckRpcmVjdDJEQmFja2VuZC5jcHAKQEAgLTAsMCArMSwzMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgiCisKKyNpZiBVU0UoRElSRUNUMkQpCisK
KyNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1ZGUgIkNPTVB0ci5oIgorI2luY2x1ZGUg
IkRpcmVjdDJEVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5j
bHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaCIKKyNp
bmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQu
aCIKKyNpbmNsdWRlIDxkMmQxXzEuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8d2lu
Y29kZWMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9Jc29N
YWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV1RGX01BS0VfSVNPX0FM
TE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kKTsKKworc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2Vu
ZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7Cisg
ICAgSW50U2l6ZSBiYWNrZW5kU2l6ZSA9IGNhbGN1bGF0ZUJhY2tlbmRTaXplKHNpemUsIHJlc29s
dXRpb25TY2FsZSk7CisgICAgaWYgKGJhY2tlbmRTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBhdXRvKiBwbGF0Zm9ybUNvbnRleHQgPSB0YXJnZXRDb250ZXh0
ID8gdGFyZ2V0Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkgOiBudWxscHRyOworICAgIGF1dG8q
IHJlbmRlclRhcmdldCA9IHBsYXRmb3JtQ29udGV4dCA/IHBsYXRmb3JtQ29udGV4dC0+cmVuZGVy
VGFyZ2V0KCkgOiBudWxscHRyOworCisgICAgaWYgKCFyZW5kZXJUYXJnZXQpCisgICAgICAgIHJl
bmRlclRhcmdldCA9IEdyYXBoaWNzQ29udGV4dDo6ZGVmYXVsdFJlbmRlclRhcmdldCgpOworCisg
ICAgYXV0byBiaXRtYXBDb250ZXh0ID0gRGlyZWN0MkQ6OmNyZWF0ZUJpdG1hcFJlbmRlclRhcmdl
dE9mU2l6ZShzaXplLCByZW5kZXJUYXJnZXQsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKCFi
aXRtYXBDb250ZXh0KQorICAgICAgICByZXR1cm47CisKKyAgICBOYXRpdmVJbWFnZVB0ciBiaXRt
YXA7CisgICAgSFJFU1VMVCBociA9IGJpdG1hcENvbnRleHQtPkdldEJpdG1hcCgmYml0bWFwKTsK
KyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcGxh
dGZvcm1Db250ZXh0ID0gbWFrZVVuaXF1ZTxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4oYml0bWFw
Q29udGV4dC5nZXQoKSwgW3RoaXNdKCkgeworICAgICAgICBtX2RhdGEubG9hZERhdGFUb0JpdG1h
cElmTmVlZGVkKCk7CisgICAgfSwgW3RoaXNdKCkgeworICAgICAgICBtX2RhdGEubWFya0J1ZmZl
ck91dE9mU3luYygpOworICAgIH0pOworCisgICAgaWYgKCFwbGF0Zm9ybUNvbnRleHQpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBjb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFw
aGljc0NvbnRleHQ+KHBsYXRmb3JtQ29udGV4dC5nZXQoKSwgR3JhcGhpY3NDb250ZXh0OjpCaXRt
YXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKKyAgICBpZiAoIWNvbnRleHQpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlckRpcmVjdDJEQmFja2VuZD4obmV3IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kKHNp
emUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUocGxh
dGZvcm1Db250ZXh0KSwgV1RGTW92ZShjb250ZXh0KSwgV1RGTW92ZShiaXRtYXApKSk7Cit9CisK
K3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZD4gSW1hZ2VCdWZmZXJE
aXJlY3QyREJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJEaXJlY3QyREJh
Y2tlbmQ6OmNyZWF0ZShzaXplLCAxLCBDb2xvclNwYWNlOjpTUkdCLCBudWxscHRyKTsKK30KKwor
SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kKGNv
bnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgc3RkOjp1bmlxdWVf
cHRyPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPiYmIHBsYXRmb3JtQ29udGV4dCwgc3RkOjp1bmlx
dWVfcHRyPEdyYXBoaWNzQ29udGV4dD4mJiBjb250ZXh0LCBOYXRpdmVJbWFnZVB0ciYmIGJpdG1h
cCkKKyAgICA6IEltYWdlQnVmZmVyQ0dCYWNrZW5kKGxvZ2ljYWxTaXplLCBiYWNrZW5kU2l6ZSwg
cmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKQorICAgICwgbV9wbGF0Zm9ybUNvbnRleHQoV1RG
TW92ZShwbGF0Zm9ybUNvbnRleHQpKQorICAgICwgbV9jb250ZXh0KFdURk1vdmUoY29udGV4dCkp
CisgICAgLCBtX2JpdG1hcChXVEZNb3ZlKGJpdG1hcCkpCit7Cit9CisKK0dyYXBoaWNzQ29udGV4
dCYgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNvbnRleHQoKSBjb25zdAoreworICAgIHJl
dHVybiAqbV9jb250ZXh0OworfQorCit2b2lkIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpm
bHVzaENvbnRleHQoKQoreworICAgIGNvbnRleHQoKS5mbHVzaCgpOworfQorCitOYXRpdmVJbWFn
ZVB0ciBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdT
dG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAoreworICAgIENPTVB0cjxJRDJEMUJpdG1hcFJl
bmRlclRhcmdldD4gYml0bWFwVGFyZ2V0OworICAgIEhSRVNVTFQgaHIgPSBjb250ZXh0KCkucGxh
dGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdldCgpLT5RdWVyeUludGVyZmFjZSgmYml0bWFwVGFy
Z2V0KTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgQ09NUHRyPElEMkQxQml0bWFwPiBpbWFnZTsKKyAgICBociA9IGJpdG1hcFRhcmdldC0+
R2V0Qml0bWFwKCZpbWFnZSk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOworCisgICAgLy8g
RklYTUU6IG1fZGF0YS5kYXRhIGlzIG51bGxwdHIgZXZlbiB3aGVuIGFza2luZyB0byBjb3B5IGJh
Y2tpbmcgc3RvcmUgbGVhZGluZyB0byB0ZXN0IGZhaWx1cmVzLgorICAgIGlmIChjb3B5QmVoYXZp
b3IgPT0gQ29weUJhY2tpbmdTdG9yZSAmJiBtX2RhdGEuZGF0YS5pc0VtcHR5KCkpCisgICAgICAg
IGNvcHlCZWhhdmlvciA9IERvbnRDb3B5QmFja2luZ1N0b3JlOworCisgICAgQ2hlY2tlZDxzaXpl
X3QsIFJlY29yZE92ZXJmbG93PiBudW1CeXRlcyA9IENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92
ZXJmbG93PihtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSkgKiBtX2RhdGEuYnl0ZXNQ
ZXJSb3c7CisgICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBpZiAoY29weUJlaGF2aW9yID09IENvcHlCYWNraW5nU3RvcmUpIHsK
KyAgICAgICAgRDJEMV9SRUNUX1UgYmFja2luZ1N0b3JlRGltZW5zdGlvbnMgPSBJbnRSZWN0KElu
dFBvaW50KCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplKTsKKyAgICAgICAgaW1hZ2UtPkNvcHlG
cm9tTWVtb3J5KCZiYWNraW5nU3RvcmVEaW1lbnN0aW9ucywgbV9kYXRhLmRhdGEuZGF0YSgpLCAz
Mik7CisKKyAgICB9CisKKyAgICByZXR1cm4gaW1hZ2U7Cit9CisKK3N0YXRpYyBOYXRpdmVJbWFn
ZVB0ciBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShJRDJEMUJpdG1hcFJlbmRlclRhcmdl
dCogYml0bWFwVGFyZ2V0LCBJRDJEMUJpdG1hcCogaW1hZ2UsIGNvbnN0IEludFNpemUmIGJvdW5k
cykKK3sKKyAgICBGbG9hdFNpemUgaW1hZ2VTaXplID0gaW1hZ2UgPyBuYXRpdmVJbWFnZVNpemUo
aW1hZ2UpIDogRmxvYXRTaXplKCk7CisKKyAgICBpZiAoaW1hZ2UgJiYgKHN0YXRpY19jYXN0PHNp
emVfdD4oaW1hZ2VTaXplLndpZHRoKCkpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYm91bmRzLndp
ZHRoKCkpIHx8IHN0YXRpY19jYXN0PHNpemVfdD4oaW1hZ2VTaXplLmhlaWdodCgpKSAhPSBzdGF0
aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy5oZWlnaHQoKSkpKSB7CisgICAgICAgIENPTVB0cjxJRDJE
MUJpdG1hcD4gY3JvcHBlZEJpdG1hcCA9IERpcmVjdDJEOjpjcmVhdGVCaXRtYXAoYml0bWFwVGFy
Z2V0LCBib3VuZHMpOworICAgICAgICBpZiAoY3JvcHBlZEJpdG1hcCkgeworICAgICAgICAgICAg
YXV0byBzb3VyY2VSZWN0ID0gRDJEMTo6UmVjdFUoMCwgMCwgYm91bmRzLndpZHRoKCksIGJvdW5k
cy5oZWlnaHQoKSk7CisgICAgICAgICAgICBIUkVTVUxUIGhyID0gY3JvcHBlZEJpdG1hcC0+Q29w
eUZyb21CaXRtYXAobnVsbHB0ciwgaW1hZ2UsICZzb3VyY2VSZWN0KTsKKyAgICAgICAgICAgIGlm
IChTVUNDRUVERUQoaHIpKQorICAgICAgICAgICAgICAgIHJldHVybiBjcm9wcGVkQml0bWFwOwor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGltYWdlOworfQorCitzdGF0aWMgUmVmUHRy
PEltYWdlPiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKElEMkQxQml0bWFw
UmVuZGVyVGFyZ2V0KiBiaXRtYXBUYXJnZXQsIENPTVB0cjxJRDJEMUJpdG1hcD4mJiBpbWFnZSwg
SW50U2l6ZSBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgUHJlc2VydmVSZXNv
bHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAgICBpZiAocmVzb2x1dGlvblNjYWxlID09
IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQorICAg
ICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGJpdG1hcFRhcmdldCwg
aW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSk7CisgICAgZWxzZSB7CisgICAgICAgIC8vIEZJWE1F
OiBOZWVkIHRvIGltcGxlbWVudCBzY2FsZWQgdmVyc2lvbgorICAgICAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIH0KKworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoV1RGTW92ZShpbWFnZSkpOworfQorCitS
ZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjb3B5SW1hZ2UoQmFja2lu
Z1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29s
dXRpb24pIGNvbnN0Cit7CisgICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2U7CisgICAgaWYgKG1fcmVz
b2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1
dGlvbjo6WWVzKQorICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3Ip
OworICAgIGVsc2UKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNr
aW5nU3RvcmUpOworCisgICAgYXV0byBiaXRtYXBUYXJnZXQgPSByZWludGVycHJldF9jYXN0PElE
MkQxQml0bWFwUmVuZGVyVGFyZ2V0Kj4oY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKTsKKyAg
ICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChiaXRtYXBUYXJn
ZXQsIFdURk1vdmUoaW1hZ2UpLCBpbnRlcm5hbFNpemUoKSwgcmVzb2x1dGlvblNjYWxlKCksIHBy
ZXNlcnZlUmVzb2x1dGlvbik7Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1
dGlvbikKK3sKKyAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdl
dDsKKyAgICBIUkVTVUxUIGhyID0gY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJU
YXJnZXQoKS0+UXVlcnlJbnRlcmZhY2UoJmJpdG1hcFRhcmdldCk7CisgICAgaWYgKCFTVUNDRUVE
RUQoaHIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIE5hdGl2ZUltYWdlUHRyIGlt
YWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKKyAgICByZXR1cm4g
Y3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChiaXRtYXBUYXJnZXQuZ2V0KCks
IFdURk1vdmUoaW1hZ2UpLCBpbnRlcm5hbFNpemUoKSwgcmVzb2x1dGlvblNjYWxlKCksIHByZXNl
cnZlUmVzb2x1dGlvbik7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyRGlyZWN0MkRC
YWNrZW5kOjpjb21wYXRpYmxlQml0bWFwKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQp
Cit7CisgICAgbG9hZERhdGFUb0JpdG1hcElmTmVlZGVkKCk7CisKKyAgICBpZiAoIXJlbmRlclRh
cmdldCkKKyAgICAgICAgcmV0dXJuIGJpdG1hcDsKKworICAgIGlmIChtX3BsYXRmb3JtQ29udGV4
dC0+cmVuZGVyVGFyZ2V0KCkgPT0gcmVuZGVyVGFyZ2V0KSB7CisgICAgICAgIENPTVB0cjxJRDJE
MUJpdG1hcFJlbmRlclRhcmdldD4gYml0bWFwVGFyZ2V0KFF1ZXJ5LCByZW5kZXJUYXJnZXQpOwor
ICAgICAgICBpZiAoYml0bWFwVGFyZ2V0KSB7CisgICAgICAgICAgICBDT01QdHI8SUQyRDFCaXRt
YXA+IGJhY2tpbmdCaXRtYXA7CisgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKGJpdG1hcFRhcmdl
dC0+R2V0Qml0bWFwKCZiYWNraW5nQml0bWFwKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYmFj
a2luZ0JpdG1hcCAhPSBtX2JpdG1hcCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJpdG1h
cDsKKworICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IGRyYXcgYW4gSUQyRDFCaXRtYXAgdG8g
aXRzZWxmLiBNdXN0IHJldHVybiBhIGNvcHkuCisgICAgICAgICAgICAgICAgQ09NUHRyPElEMkQx
Qml0bWFwPiBjb3BpZWRCaXRtYXA7CisgICAgICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZW5k
ZXJUYXJnZXQtPkNyZWF0ZUJpdG1hcChiaXRtYXAtPkdldFBpeGVsU2l6ZSgpLCBEaXJlY3QyRDo6
Yml0bWFwUHJvcGVydGllcygpLCAmY29waWVkQml0bWFwKSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKFNVQ0NFRURFRChjb3BpZWRCaXRtYXAtPkNvcHlGcm9tQml0bWFwKG51bGxwdHIsIG1f
Yml0bWFwLmdldCgpLCBudWxscHRyKSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Y29waWVkQml0bWFwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIGF1dG8gc2l6ZSA9IG1fYml0bWFwLT5HZXRQaXhlbFNpemUoKTsKKyAg
ICBBU1NFUlQoc2l6ZS5oZWlnaHQgJiYgc2l6ZS53aWR0aCk7CisKKyAgICBDaGVja2VkPHVuc2ln
bmVkLCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBzaXplLndpZHRoICogc2l6ZS5oZWlnaHQg
KiA0OworICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgLy8gQ29weSB0aGUgYml0cyBmcm9tIGN1cnJlbnQgcmVuZGVyVGFyZ2V0
IHRvIHRoZSBvdXRwdXQgdGFyZ2V0LgorICAgIC8vIFdlIGNhbm5vdCBhY2Nlc3MgdGhlIGRhdGEg
YmFja2luZyBhbiBJV0lDQml0bWFwIHdoaWxlIGFuIGFjdGl2ZSBkcmF3IHNlc3Npb24gaXMgb3Bl
bi4KKyAgICBjb250ZXh0LT5lbmREcmF3KCk7CisKKyAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250
ZXh0PiBzb3VyY2VEZXZpY2VDb250ZXh0ID0gbV9wbGF0Zm9ybUNvbnRleHQtPmRldmljZUNvbnRl
eHQoKTsKKyAgICBpZiAoIXNvdXJjZURldmljZUNvbnRleHQpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgQ09NUHRyPElEMkQxQml0bWFwMT4gc291cmNlQ1BVQml0bWFwOworICAgIEQy
RDFfQklUTUFQX1BST1BFUlRJRVMxIGJpdG1hcFByb3BlcnRpZXMgPSBEMkQxOjpCaXRtYXBQcm9w
ZXJ0aWVzMShEMkQxX0JJVE1BUF9PUFRJT05TX0NQVV9SRUFEIHwgRDJEMV9CSVRNQVBfT1BUSU9O
U19DQU5OT1RfRFJBVywgRGlyZWN0MkQ6OnBpeGVsRm9ybWF0KCkpOworICAgIEhSRVNVTFQgaHIg
PSBzb3VyY2VEZXZpY2VDb250ZXh0LT5DcmVhdGVCaXRtYXAobV9iaXRtYXAtPkdldFBpeGVsU2l6
ZSgpLCBudWxscHRyLCBieXRlc1BlclJvdy51bnNhZmVHZXQoKSwgYml0bWFwUHJvcGVydGllcywg
JnNvdXJjZUNQVUJpdG1hcCk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIGlmICghc291cmNlQ1BVQml0bWFwKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIGhyID0gc291cmNlQ1BVQml0bWFwLT5Db3B5RnJvbUJpdG1hcChudWxs
cHRyLCBtX2JpdG1hcC5nZXQoKSwgbnVsbHB0cik7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEQyRDFfTUFQUEVEX1JFQ1QgbWFwcGVkU291
cmNlRGF0YTsKKyAgICBociA9IHNvdXJjZUNQVUJpdG1hcC0+TWFwKEQyRDFfTUFQX09QVElPTlNf
UkVBRCwgJm1hcHBlZFNvdXJjZURhdGEpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiB0YXJn
ZXREZXZpY2VDb250ZXh0OworICAgIGhyID0gcmVuZGVyVGFyZ2V0LT5RdWVyeUludGVyZmFjZSgm
dGFyZ2V0RGV2aWNlQ29udGV4dCk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOworCisgICAg
Q09NUHRyPElEMkQxQml0bWFwPiBjb21wYXRpYmxlQml0bWFwOworICAgIGhyID0gdGFyZ2V0RGV2
aWNlQ29udGV4dC0+Q3JlYXRlQml0bWFwKGJpdG1hcC0+R2V0UGl4ZWxTaXplKCksIG1hcHBlZFNv
dXJjZURhdGEuYml0cywgbWFwcGVkU291cmNlRGF0YS5waXRjaCwgRGlyZWN0MkQ6OmJpdG1hcFBy
b3BlcnRpZXMoKSwgJmNvbXBhdGlibGVCaXRtYXApOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBociA9IHNvdXJjZUNQVUJpdG1hcC0+VW5t
YXAoKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICBjb250ZXh0LT5iZWdpbkRy
YXcoKTsKKworICAgIHJldHVybiBjb21wYXRpYmxlQml0bWFwOworfQorCit2b2lkIEltYWdlQnVm
ZmVyRGlyZWN0MkRCYWNrZW5kOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgRmxvYXRSZWN0IGFkanVzdGVk
U3JjUmVjdCA9IHNyY1JlY3Q7CisgICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlv
blNjYWxlLCBtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBhdXRvIGNvbXBhdGlibGVCaXRtYXAg
PSBjb21wYXRpYmxlQml0bWFwKGRlc3RDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJU
YXJnZXQoKSk7CisKKyAgICBGbG9hdFNpemUgY3VycmVudEltYWdlU2l6ZSA9IG5hdGl2ZUltYWdl
U2l6ZShjb21wYXRpYmxlQml0bWFwKTsKKyAgICBpZiAoY3VycmVudEltYWdlU2l6ZS5pc1plcm8o
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGNv
bXBhdGlibGVCaXRtYXAsIGN1cnJlbnRJbWFnZVNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1Jl
Y3QsIG9wdGlvbnMpOworfQorCit2b2lkIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpkcmF3
UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAg
RmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7CisgICAgYWRqdXN0ZWRTcmNSZWN0
LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIGlmIChhdXRvIGltYWdlID0gY29weUlt
YWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERvbnRD
b3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgaW1hZ2UtPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0
LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3Bh
Y2luZywgb3B0aW9ucyk7Cit9CisKK1N0cmluZyBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6
dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYsIE9wdGlvbmFsPGRvdWJsZT4sIFByZXNlcnZlUmVzb2x1
dGlvbikgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAiZGF0YTos
Il9zOworfQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnRv
RGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNv
bnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4geyB9OworfQorCitWZWN0
b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnRvQkdSQURhdGEoKSBjb25z
dAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworUmVmUHRy
PEltYWdlRGF0YT4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkg
Y29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIG51bGxwdHIpOworfQor
Cit2b2lkIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShp
bnB1dEZvcm1hdCwgaW1hZ2VEYXRhLCBzcmNSZWN0LCBkZXN0UG9pbnQsIG51bGxwdHIpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoRElSRUNUMkQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJE
aXJlY3QyREJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9J
bWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNkMTU2MDdmMzY0M2RiYTdl
ZTVlZWZmMmY3MWFjMzkzOTYwMDdlMTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaApAQCAt
MCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKERJUkVDVDJEKQorCisjaW5jbHVkZSAiSW1hZ2VC
dWZmZXJCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kIDogcHVibGljIElt
YWdlQnVmZmVyQmFja2VuZCB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZl
ckRpcmVjdDJEQmFja2VuZCk7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXJE
aXJlY3QyREJhY2tlbmQpOworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kPiBjcmVhdGUoY29u
c3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisKKyAgICBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGZsdXNoQ29udGV4dCgp
IG92ZXJyaWRlOworCisgICAgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdT
dG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8
SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNv
bnN0IG92ZXJyaWRlOworCisgICAgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZl
UmVzb2x1dGlvbikgb3ZlcnJpZGU7CisKKyAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9u
KSBjb25zdCBvdmVycmlkZTsKKyAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKKworICAgIFJl
ZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1
dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0
YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpIG92
ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQoY29u
c3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UpOworCisgICAgc3RkOjp1bmlxdWVfcHRy
PFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPiBtX3BsYXRmb3JtQ29udGV4dDsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7CisgICAgTmF0aXZlSW1hZ2VQdHIg
bV9iaXRtYXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0Uo
RElSRUNUMkQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lclZpZGVv
Q2FwdHVyZVNvdXJjZS5jcHAKaW5kZXggNDkzNjdjYjI5ZDBmMjBkMTcxMjIwYjMyMDBjOTRlNWNj
ZDM3MDFiZC4uMzJiZjg2YmM2ZmI2OGMxZTZkNjNkZWQ4NzYyNzUzNTNkNTRhZmI4MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tH
U3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNl
LmNwcApAQCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgaW50IGZwc051bWVyYXRv
ciwgZnBzRGVub21pbmF0b3I7CiAgICAgICAgIGdzdF91dGlsX2RvdWJsZV90b19mcmFjdGlvbihm
cmFtZVJhdGUoKSwgJmZwc051bWVyYXRvciwgJmZwc0Rlbm9taW5hdG9yKTsKLSAgICAgICAgYXV0
byBpbWFnZVNpemUgPSBpbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCk7CisgICAgICAgIGF1dG8g
aW1hZ2VTaXplID0gaW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCk7CiAgICAgICAgIGF1dG8gY2Fw
cyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfc2ltcGxlKCJ2aWRlby94LXJhdyIsCiAgICAgICAg
ICAgICAiZm9ybWF0IiwgR19UWVBFX1NUUklORywgIkJHUkEiLAogICAgICAgICAgICAgIndpZHRo
IiwgR19UWVBFX0lOVCwgaW1hZ2VTaXplLndpZHRoKCksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zaGFwZXMvU2hhcGUuY3BwCmluZGV4IDg1MWE4NjY3ODliNDgzNTQyMmM1N2E0MWRkYTc1YTBi
Y2FkN2Q2NzUuLjA0MmQ1ZGQ3YmI4MzRmMWUzYmVhMWE5ZTFhOTAyZmUzZGI2ZWZmYjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCkBAIC0zNSw2ICszNSw3IEBA
CiAjaW5jbHVkZSAiQm94U2hhcGUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNp
bmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUg
Ikxlbmd0aEZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIlBvbHlnb25TaGFwZS5oIgogI2luY2x1ZGUg
IlJhc3RlclNoYXBlLmgiCkBAIC0xODgsOCArMTg5LDkgQEAgc3RkOjp1bmlxdWVfcHRyPFNoYXBl
PiBTaGFwZTo6Y3JlYXRlUmFzdGVyU2hhcGUoSW1hZ2UqIGltYWdlLCBmbG9hdCB0aHJlc2hvbGQs
IGMKICAgICAgICAgaWYgKGltYWdlKQogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmRyYXdJ
bWFnZSgqaW1hZ2UsIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VSZWN0LnNpemUoKSkpOwogCi0g
ICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcGl4ZWxBcnJheSA9IGltYWdlQnVmZmVy
LT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZVJlY3Qu
c2l6ZSgpKSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHBpeGVsQXJyYXkpOworICAgICAgICBh
dXRvIGltYWdlRGF0YSA9IGltYWdlQnVmZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCB7IEludFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkg
fSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGltYWdlRGF0YSAmJiBpbWFnZURhdGEtPmRhdGEo
KSk7CisgICAgICAgIGF1dG8qIHBpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKICAgICAg
ICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHBpeGVsQXJyYXktPmxlbmd0aCgpOwogICAg
ICAgICB1bnNpZ25lZCBwaXhlbEFycmF5T2Zmc2V0ID0gMzsgLy8gRWFjaCBwaXhlbCBpcyBmb3Vy
IGJ5dGVzOiBSR0JBLgogICAgICAgICB1aW50OF90IGFscGhhUGl4ZWxUaHJlc2hvbGQgPSBzdGF0
aWNfY2FzdDx1aW50OF90Pihscm91bmRmKGNsYW1wVG88ZmxvYXQ+KHRocmVzaG9sZCwgMCwgMSkg
KiAyNTUuMGYpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
UmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
bmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IDYwNzVmNjNlMWMyODAwN2Y2NzdlMjkzN2M1Y2E3YmM2
NzkzMzIwMjguLmY2YTk1NDU4OTg1OGUwMGU0ZTdiNmEzYzE5ZjIyYmFmYTU3NjFkMzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0
LmNwcApAQCAtMzQ2LDcgKzM0Niw3IEBAIGJvb2wgU1ZHUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVy
Rm9yZWdyb3VuZChzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1CiAgICAgICAg
IEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBtX3BhaW50SW5mby0+Y29udGV4dCgpLmdldENU
TShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOwogICAgICAg
ICBJbnRTaXplIGV4cGFuZGVkQm91bmRpbmdCb3ggPSBleHBhbmRlZEludFNpemUoYm91bmRpbmdC
b3guc2l6ZSgpKTsKICAgICAgICAgSW50U2l6ZSBidWZmZXJTaXplKHN0YXRpY19jYXN0PGludD4o
Y2VpbChleHBhbmRlZEJvdW5kaW5nQm94LndpZHRoKCkgKiB0cmFuc2Zvcm0ueFNjYWxlKCkpKSwg
c3RhdGljX2Nhc3Q8aW50PihjZWlsKGV4cGFuZGVkQm91bmRpbmdCb3guaGVpZ2h0KCkgKiB0cmFu
c2Zvcm0ueVNjYWxlKCkpKSk7Ci0gICAgICAgIGlmIChidWZmZXJTaXplICE9IGltYWdlQnVmZmVy
LT5pbnRlcm5hbFNpemUoKSkKKyAgICAgICAgaWYgKGJ1ZmZlclNpemUgIT0gaW1hZ2VCdWZmZXIt
PmJhY2tlbmRTaXplKCkpCiAgICAgICAgICAgICBpbWFnZUJ1ZmZlci5yZXNldCgpOwogICAgIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVs
aXN0IGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CmluZGV4
IDUxZDMxOGI3MjRlNzUxOWQ3Mjc3YWU3NTA3NzNkMWIyOGU4ZGRhYTMuLjhhMzBmNjNiOTg4YTEx
NjVhODRjN2M4Y2UxYjI2MDkxNzRhMGEzNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVy
aXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRT
b3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKQEAgLTE1LDYgKzE1LDcgQEAgJChKQVZBU0NSSVBUQ09S
RV9QUklWQVRFX0hFQURFUlNfRElSKS9tb2RlbHMucHkKICQoSkFWQVNDUklQVENPUkVfUFJJVkFU
RV9IRUFERVJTX0RJUikveHhkLnBsCiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL0dQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3Mv
R1BVUHJvY2Vzcy5tZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbgogJChQUk9K
RUNUX0RJUikvR1BVUHJvY2Vzcy9tYWMvY29tLmFwcGxlLldlYktpdC5HUFVQcm9jZXNzLnNiLmlu
CiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdl
clByb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL21lZGlhL1JlbW90
ZU1lZGlhUGxheWVyUHJveHkubWVzc2FnZXMuaW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
RGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRT
b3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CmluZGV4IDVjOTJiODEzMzUzZGY3MWZlNmQ2ODUwZjM3
YzRmNzNmY2NmNzFlNWUuLmYyOTM5ZjYwNTJlZDdlMTBkMWRmMDg5OTU4ODE2ZjFmZGEyYmQ2MWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxp
c3QKKysrIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdApA
QCAtMTU0LDYgKzE1NCw5IEBAICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJLaXQyL1JlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyTWVzc2FnZXNSCiAkKEJVSUxUX1BST0RV
Q1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVPYmplY3RSZWdpc3RyeU1lc3Nh
Z2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJL
aXQyL1JlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIp
L0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlc1JlcGxp
ZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAorJChCVUlMVF9QUk9EVUNU
U19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
TWVzc2FnZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXNSZXBsaWVzLmgKICQoQlVJTFRfUFJP
RFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVNhbXBsZUJ1ZmZlckRpc3Bs
YXlMYXllck1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikv
RGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5h
Z2VyTWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktp
dDIvUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlck1lc3NhZ2VzUmVwbGllcy5o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2Uv
V2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggMzQ5ZTU0ZGMzMGM0NDk4MmJjZDgyZTA5
ZTk0YmI2NmRlOTlkY2IxMS4uMTU4YWM1YzAyNWIyMjk3ODBkMTM5NTQzOTI4MmZiZGI1MzdjZTY3
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1Nv
dXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMjUsNiArMjUsNyBAQCBWUEFUSCA9
IFwKICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3MgXAogICAgICQoV2ViS2l0MikvR1BVUHJvY2Vz
cy9tYWMgXAogICAgICQoV2ViS2l0MikvR1BVUHJvY2Vzcy9tZWRpYSBcCisgICAgJChXZWJLaXQy
KS9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQgXAogICAgICQoV2ViS2l0MikvR1BVUHJvY2Vz
cy93ZWJydGMgXAogICAgICQoV2ViS2l0MikvTmV0d29ya1Byb2Nlc3MgXAogICAgICQoV2ViS2l0
MikvTmV0d29ya1Byb2Nlc3MvQ29va2llcyBcCkBAIC01Miw2ICs1Myw3IEBAIFZQQVRIID0gXAog
ICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbiBcCiAgICAgJChXZWJLaXQyKS9X
ZWJQcm9jZXNzL0dQVSBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0dQVS9tZWRpYSBcCisg
ICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kIFwKICAgICAkKFdl
YktpdDIpL1dlYlByb2Nlc3MvR1BVL3dlYnJ0YyBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNz
L0ljb25EYXRhYmFzZSBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0luc3BlY3RvciBcCkBA
IC0xNTMsNiArMTU1LDcgQEAgTUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAgICAgUmVtb3RlTWVkaWFS
ZWNvcmRlck1hbmFnZXIgXAogICAgIFJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyIFwKICAgICBS
ZW1vdGVPYmplY3RSZWdpc3RyeSBcCisgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5IFwK
ICAgICBSZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIgXAogICAgIFJlbW90ZVNhbXBsZUJ1
ZmZlckRpc3BsYXlMYXllck1hbmFnZXIgXAogICAgIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9y
IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmNwcAppbmRleCBhNmNlZTU0Yzk3YzkyMTVhNjg3M2Y0ZGNiMTJiZGU0N2MxZGM0
MGVjLi5hNmE1NGZlMTE4ZDA3ZDhkNDQ5MmYxZDZjOTNlY2VhZWQwMzcxZDcwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
Y3BwCkBAIC0xODYsNzkgKzE4Niw5MiBAQCBMaWJXZWJSVENDb2RlY3NQcm94eSYgR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6bGliV2ViUlRDQ29kZWNzUHJveHkoKQogfQogI2VuZGlmCiAKLXZv
aWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25u
ZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIpCit2b2lkIEdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKCFt
X3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSk7CisgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkgPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZSgqdGhpcywgcmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworfQorCit2b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M6OnJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
IHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQoreworICAgIEFTU0VSVChtX3JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eSk7CisgICAgQVNTRVJUKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LT5yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpID09IHJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyKTsKKyAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSA9IG51bGxwdHI7Cit9
CisKK2Jvb2wgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIGlm
IChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFQ
bGF5ZXJNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICByZW1v
dGVNZWRpYVBsYXllck1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVNZXNzYWdlRnJvbVdlYlByb2Nl
c3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfSBlbHNlIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBN
ZXNzYWdlczo6UmVtb3RlTWVkaWFQbGF5ZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7
CiAgICAgICAgIHJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5KCkuZGlkUmVjZWl2ZVBsYXll
ck1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfSBlbHNlIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUo
KSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSkgewogICAgICAgICByZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlcigpLmRpZFJlY2Vp
dmVNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogICAgIGlmIChk
ZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6VXNlck1lZGlhQ2FwdHVy
ZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIHVzZXJNZWRp
YUNhcHR1cmVNYW5hZ2VyUHJveHkoKS5kaWRSZWNlaXZlTWVzc2FnZUZyb21HUFVQcm9jZXNzKGNv
bm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2Fn
ZXM6OlJlbW90ZU1lZGlhUmVjb3JkZXJNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsK
ICAgICAgICAgbWVkaWFSZWNvcmRlck1hbmFnZXIoKS5kaWRSZWNlaXZlTWVzc2FnZUZyb21XZWJQ
cm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkg
PT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUmVjb3JkZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkg
ewogICAgICAgICBtZWRpYVJlY29yZGVyTWFuYWdlcigpLmRpZFJlY2VpdmVSZW1vdGVNZWRpYVJl
Y29yZGVyTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjaWYgUExBVEZPUk0oQ09DT0EpICYmIEVOQUJMRShW
SURFT19UUkFDSykKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVz
c2FnZXM6OlJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyTWFuYWdlcjo6bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIGF1ZGlvVHJhY2tSZW5kZXJlck1hbmFnZXIoKS5k
aWRSZWNlaXZlTWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAoZGVjb2Rl
ci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZUF1ZGlvTWVkaWFTdHJl
YW1UcmFja1JlbmRlcmVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgYXVkaW9U
cmFja1JlbmRlcmVyTWFuYWdlcigpLmRpZFJlY2VpdmVSZW5kZXJlck1lc3NhZ2UoY29ubmVjdGlv
biwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVt
b3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgp
KSB7CiAgICAgICAgIHNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXIoKS5kaWRSZWNlaXZl
TWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAoZGVjb2Rlci5tZXNzYWdl
UmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXll
cjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIHNhbXBsZUJ1ZmZlckRpc3BsYXlM
YXllck1hbmFnZXIoKS5kaWRSZWNlaXZlTGF5ZXJNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIp
OwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNlbmRpZgog
I2VuZGlmCiAjaWYgUExBVEZPUk0oQ09DT0EpICYmIFVTRShMSUJXRUJSVEMpCiAgICAgaWYgKGRl
Y29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpMaWJXZWJSVENDb2RlY3NQ
cm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIGxpYldlYlJUQ0NvZGVjc1By
b3h5KCkuZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVy
KTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYK
KyAgICByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rp
b24sIGRlY29kZXIpOwogfQogCi12b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJl
Y2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2Rl
ciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikK
K2Jvb2wgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlx
dWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikKIHsKICAgICBpZiAoZGVjb2Rlci5t
ZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdl
clByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgcmVtb3RlTWVkaWFQbGF5
ZXJNYW5hZ2VyUHJveHkoKS5kaWRSZWNlaXZlU3luY01lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25u
ZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgaWYg
KGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpVc2VyTWVkaWFDYXB0
dXJlTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgdXNlck1l
ZGlhQ2FwdHVyZU1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVTeW5jTWVzc2FnZUZyb21HUFVQcm9j
ZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Ci0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBFTkFC
TEUoVklERU9fVFJBQ0spCiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09
IE1lc3NhZ2VzOjpSZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyOjptZXNzYWdl
UmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgc2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdl
cigpLmRpZFJlY2VpdmVTeW5jTWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29k
ZXIsIHJlcGx5RW5jb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogI2VuZGlmCiAjZW5kaWYKLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaFN5bmNNZXNzYWdlKGNvbm5lY3Rp
b24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7CiB9CiAKIGNvbnN0IFN0cmluZyYgR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6bWVkaWFDYWNoZURpcmVjdG9yeSgpIGNvbnN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIGIv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAppbmRl
eCAyYjliZDFmODg3YmFkYWZhNGVhNWM0YmEzNDE2OWQ4Yjk3OGZkNjJkLi40MGZhZWJkZjhlMTI5
NjEyZWI3M2NmNThiYWQ0N2NiMmU5MzJkODQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKQEAgLTI4LDEzICsyOCwxNSBA
QAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKLSNp
bmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXNSZXBsaWVzLmgiCi0jaW5j
bHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CisjaW5jbHVkZSAiR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyTWFwLmgi
CisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgiCisjaW5jbHVkZSAiUmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1Byb2Nlc3NJZGVu
dGlmaWVyLmg+CiAjaW5jbHVkZSA8cGFsL1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2dn
ZXIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9VbmlxdWVS
ZWYuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApA
QCAtNDksMTggKzUxLDIwIEBAIGNsYXNzIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk7CiAK
IGNsYXNzIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MKICAgICA6IHB1YmxpYyBSZWZDb3VudGVk
PEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+CisgICAgLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4KICAgICAsIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IGNy
ZWF0ZShHUFVQcm9jZXNzJiwgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIsIElQQzo6Q29ubmVj
dGlvbjo6SWRlbnRpZmllciwgUEFMOjpTZXNzaW9uSUQpOwogICAgIHZpcnR1YWwgfkdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MoKTsKIAogICAgIElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbigp
IHsgcmV0dXJuIG1fY29ubmVjdGlvbi5nZXQoKTsgfQorICAgIElQQzo6TWVzc2FnZVJlY2VpdmVy
TWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAoKSB7IHJldHVybiBtX21lc3NhZ2VSZWNlaXZlck1hcDsg
fQogICAgIEdQVVByb2Nlc3MmIGdwdVByb2Nlc3MoKSB7IHJldHVybiBtX2dwdVByb2Nlc3MuZ2V0
KCk7IH0KKyAgICBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciB3ZWJQcm9jZXNzSWRlbnRpZmll
cigpIGNvbnN0IHsgcmV0dXJuIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXI7IH0KIAogICAgIHZvaWQg
Y2xlYW51cEZvclN1c3BlbnNpb24oRnVuY3Rpb248dm9pZCgpPiYmKTsKICAgICB2b2lkIGVuZFN1
c3BlbnNpb24oKTsKIAotICAgIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIHdlYlByb2Nlc3NJ
ZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV93ZWJQcm9jZXNzSWRlbnRpZmllcjsgfQogICAg
IFJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyJiByZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlcigp
OwogCiAgICAgTG9nZ2VyJiBsb2dnZXIoKTsKQEAgLTg1LDE3ICs4OSwyMyBAQCBwcml2YXRlOgog
ICAgIFJlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXImIHNhbXBsZUJ1ZmZlckRp
c3BsYXlMYXllck1hbmFnZXIoKTsKICNlbmRpZgogI2VuZGlmCi0KKyAgICB2b2lkIGNyZWF0ZVJl
bmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgIHZvaWQgcmVs
ZWFzZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgICAg
ICAKICAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudAogICAgIHZvaWQgZGlkQ2xvc2UoSVBD
OjpDb25uZWN0aW9uJikgZmluYWw7Ci0gICAgdm9pZCBkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2Uo
SVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFt
ZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUpIGZpbmFsOwogICAgIHZvaWQgZGlk
UmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgZmluYWw7CiAg
ICAgdm9pZCBkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNv
ZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKSBmaW5hbDsKKyAgICB2b2lkIGRp
ZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVy
ZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFt
ZSkgZmluYWw7CisKKyAgICBib29sIGRpc3BhdGNoTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJ
UEM6OkRlY29kZXImKTsKKyAgICBib29sIGRpc3BhdGNoU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKTsKIAog
ICAgIFJlZlB0cjxMb2dnZXI+IG1fbG9nZ2VyOwogCiAgICAgUmVmPElQQzo6Q29ubmVjdGlvbj4g
bV9jb25uZWN0aW9uOwogICAgIFJlZjxHUFVQcm9jZXNzPiBtX2dwdVByb2Nlc3M7CisgICAgSVBD
OjpNZXNzYWdlUmVjZWl2ZXJNYXAgbV9tZXNzYWdlUmVjZWl2ZXJNYXA7CiAgICAgY29uc3QgV2Vi
Q29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgbV93ZWJQcm9jZXNzSWRlbnRpZmllcjsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8UmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXI+IG1fcmVtb3RlTWVkaWFSZXNv
dXJjZU1hbmFnZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZU1lZGlhUGxheWVyTWFuYWdl
clByb3h5PiBtX3JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OwpAQCAtMTExLDYgKzEyMSw3
IEBAIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oQ09DT0EpICYmIFVTRShMSUJXRUJSVEMpCiAgICAg
c3RkOjp1bmlxdWVfcHRyPExpYldlYlJUQ0NvZGVjc1Byb3h5PiBtX2xpYldlYlJUQ0NvZGVjc1By
b3h5OwogI2VuZGlmCisgICAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eT4gbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KaW5kZXggM2Q0MGE1NzEyZTAyZDE0
OWQxNGY5MmY1NmU0NDUzNDZjMDEyMjFkOC4uOTMyYzAxMjJkZTA4MWVkZTliYjllZmI1NmY5YmM1
MjU5YmE0ZDcwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KQEAgLTIyLDcgKzIyLDkg
QEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAotbWVzc2FnZXMgLT4gR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2VzcyB7CittZXNzYWdlcyAtPiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzIFdh
bnRzRGlzcGF0Y2hNZXNzYWdlIHsKKyAgICB2b2lkIENyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoV2Vi
S2l0OjpSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
cikKKyAgICB2b2lkIFJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKFdlYktpdDo6UmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCiB9CiAKICNlbmRpZiAv
LyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZDYyNTI3OWZjZDYxY2YxNDJiZDE0NWIxZTViZGVj
ZDQ0MDk1ZTRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcApAQCAtMCwwICsx
LDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKwor
I2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgiCisKK25hbWVz
cGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0ZDo6dW5pcXVlX3B0
cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eTo6Y3JlYXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyKQoreworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5PihuZXcgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KGdwdUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MsIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKSk7Cit9CisKK1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eTo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KEdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgIDogbV9ncHVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzKG1ha2VXZWFrUHRyKGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mp
KQorICAgICwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcihyZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllcikKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1f
Z3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgZ3B1Q29ubmVjdGlvblRv
V2ViUHJvY2Vzcy0+bWVzc2FnZVJlY2VpdmVyTWFwKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3Nh
Z2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwg
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKSwgKnRoaXMpOworfQorCitSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoKQor
eworICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAgICBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LT5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3JlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCkpOworfQorCitJUEM6OkNvbm5lY3Rpb24q
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBj
b25zdAoreworICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAgICByZXR1cm4gJmdwdUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MtPmNvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwor
dWludDY0X3QgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlU2VuZGVyRGVzdGlu
YXRpb25JRCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIudG9VSW50NjQoKTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNy
ZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UsIEltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCit7Cisg
ICAgaWYgKG1faW1hZ2VCdWZmZXJNYXAuY29udGFpbnMoaW1hZ2VCdWZmZXJJZGVudGlmaWVyKSkg
eworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MuZ2V0KCk7CisgICAgaWYgKCFncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKQor
ICAgICAgICByZXR1cm47CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdl
QnVmZmVyOworCisgICAgc3dpdGNoIChyZW5kZXJpbmdNb2RlKSB7CisgICAgY2FzZSBSZW5kZXJp
bmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRlZDoKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90
ZToKKyAgICAgICAgLy8gRklYTUU6IGNyZWF0ZSB0aGUgcmVtb3RlIEltYWdlQnVmZmVyIHByb3h5
LgorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKwor
ICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW1hZ2VCdWZm
ZXJNYXAuYWRkKGltYWdlQnVmZmVySWRlbnRpZmllciwgV1RGTW92ZShpbWFnZUJ1ZmZlcikpOwor
fQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVsZWFzZUltYWdlQnVmZmVy
KEltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCit7CisgICAgLy8g
Q3JlYXRlSW1hZ2VCdWZmZXIgbWVzc2FnZSBzaG91bGQgaGF2ZSBiZWVuIHJlY2VpdmVkIGJlZm9y
ZSB0aGlzIG9uZS4KKyAgICBpZiAoIW1faW1hZ2VCdWZmZXJNYXAuY29udGFpbnMoaW1hZ2VCdWZm
ZXJJZGVudGlmaWVyKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBtX2ltYWdlQnVmZmVyTWFwLnJlbW92ZShpbWFnZUJ1ZmZlcklk
ZW50aWZpZXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJM
RShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZjk1MjdiODc1YWExMzI1NTY5YWMyMjYzMDBmYTZhZDU5OGU5YWUwZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNr
ZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1
ZGUgIkNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCIKKyNp
bmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCisj
aW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0NvbG9yU3BhY2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlQnVmZmVyLmg+CisjaW5jbHVk
ZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M7CisKK2NsYXNzIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eQor
ICAgIDogcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5kZXIKKyAgICAsIHByaXZhdGUgSVBDOjpNZXNz
YWdlUmVjZWl2ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5PiBjcmVhdGUoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYs
IFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICB2aXJ0dWFsIH5SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkoKTsKKworICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllcjsgfQorCitwcml2YXRlOgorICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIp
OworCisgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgorICAgIElQQzo6Q29ubmVjdGlvbiogbWVz
c2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB1aW50NjRfdCBtZXNz
YWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gSVBDOjpN
ZXNzYWdlUmVjZWl2ZXIKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlv
biYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworCisgICAgdm9pZCBjcmVhdGVJbWFnZUJ1ZmZl
cihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpSZW5kZXJp
bmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIEltYWdl
QnVmZmVySWRlbnRpZmllcik7CisgICAgdm9pZCByZWxlYXNlSW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXJJZGVudGlmaWVyKTsKKworICAgIHVzaW5nIEltYWdlQnVmZmVyTWFwID0gSGFzaE1hcDxJbWFn
ZUJ1ZmZlcklkZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4+
OworICAgIEltYWdlQnVmZmVyTWFwIG1faW1hZ2VCdWZmZXJNYXA7CisgICAgV2Vha1B0cjxHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzPiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CisgICAg
UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcjsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9D
RVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
Lm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU0ZGNmN2YzMmI0NTI2ZGRmYmViYjc4N2Y4MDJjMzZm
ZDk1N2JjNDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4KQEAg
LTAsMCArMSwzMCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMg
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisj
aWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCittZXNzYWdlcyAtPiBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkgTm90UmVmQ291bnRlZCB7CisgICAgdm9pZCBDcmVhdGVJbWFnZUJ1ZmZlcihXZWJD
b3JlOjpGbG9hdFNpemUgbG9naWNhbFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9y
U3BhY2UsIFdlYktpdDo6SW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmll
cikKKyAgICB2b2lkIFJlbGVhc2VJbWFnZUJ1ZmZlcihXZWJLaXQ6OkltYWdlQnVmZmVySWRlbnRp
ZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BS
T0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mvd2VicnRjL1JlbW90
ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllci5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dl
YnJ0Yy9SZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIuaAppbmRleCA2ODVhNjY5Nzg3MTc2
YjEzNzE5Y2JiOGZlOTkzY2RjMWJjZTc5Y2U4Li42ZTZhMjE3YTVhMjA1ZWUzNzA4ZjM0MGJhZDc0
NjM5MTZjMmQ2ZTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mvd2VicnRj
L1JlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy93ZWJydGMvUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyLmgKQEAgLTMyLDYg
KzMyLDcgQEAKICNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCiAjaW5jbHVkZSAiU2FtcGxlQnVm
ZmVyRGlzcGxheUxheWVySWRlbnRpZmllci5oIgogI2luY2x1ZGUgPFdlYkNvcmUvU2FtcGxlQnVm
ZmVyRGlzcGxheUxheWVyLmg+CisjaW5jbHVkZSA8d3RmL01lZGlhVGltZS5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBjbGFzcyBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5
TGF5ZXJNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3Rl
U2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlci5jcHAKaW5kZXggNGI5YmU0OWNhYzcyZjQ0
ZTcxNzk3N2M0YTQ2NmUyZTI3OWYxYjE0ZS4uZmIwZDI2NTJlN2RjNzE1ZjNjYmU5MGIwMWE3NDE3
MzEyOGNkYjU3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dlYnJ0Yy9S
ZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3Mvd2VicnRjL1JlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFn
ZXIuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiUmVtb3RlU2FtcGxlQnVmZmVyRGlz
cGxheUxheWVyLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKIFJlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXI6OlJlbW90ZVNhbXBs
ZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXIoUmVmPElQQzo6Q29ubmVjdGlvbj4mJiBjb25uZWN0
aW9uKQogICAgIDogbV9jb25uZWN0aW9uKFdURk1vdmUoY29ubmVjdGlvbikpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mvd2VicnRjL1JlbW90ZVNhbXBsZUJ1ZmZlckRpc3Bs
YXlMYXllck1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3Rl
U2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlci5oCmluZGV4IDlmOWIzMGM3NjE2MjNkZDk0
OGQyOWJlMGYzN2YwYWQwZjQ3ZTVhOWEuLmUzOGM1ZDZjMDVkMGRmYWY0MjY4MTk5NWI5ZTA0ZjRl
NzY0N2YwYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy93ZWJydGMvUmVt
b3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlci5o
CkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCiAjaW5jbHVk
ZSAiUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlck1lc3NhZ2VzUmVwbGllcy5o
IgogI2luY2x1ZGUgIlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllcklkZW50aWZpZXIuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0ludFNpemUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCiBuYW1l
c3BhY2UgSVBDIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVz
c2FnZXMucHkgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CmluZGV4
IDdjNWFjMGFjZjc0NWI3YTcwM2NiZWMwNmJmN2IxYWM2MmVhODQyYjAuLjE4M2I1ZDU2MDFlZDAy
YzQyNGY3MTgzMTRjN2M0MjY5OGYxMTFiMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2Ny
aXB0cy93ZWJraXQvbWVzc2FnZXMucHkKKysrIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtp
dC9tZXNzYWdlcy5weQpAQCAtMjcsNiArMjcsNyBAQCBpbXBvcnQgc3lzCiBmcm9tIHdlYmtpdCBp
bXBvcnQgcGFyc2VyCiAKIFdBTlRTX0NPTk5FQ1RJT05fQVRUUklCVVRFID0gJ1dhbnRzQ29ubmVj
dGlvbicKK1dBTlRTX0RJU1BBVENIX01FU1NBR0VfQVRUUklCVVRFID0gJ1dhbnRzRGlzcGF0Y2hN
ZXNzYWdlJwogTEVHQUNZX1JFQ0VJVkVSX0FUVFJJQlVURSA9ICdMZWdhY3lSZWNlaXZlcicKIE5P
VF9SRUZDT1VOVEVEX1JFQ0VJVkVSX0FUVFJJQlVURSA9ICdOb3RSZWZDb3VudGVkJwogU1lOQ0hS
T05PVVNfQVRUUklCVVRFID0gJ1N5bmNocm9ub3VzJwpAQCAtMjA0LDYgKzIwNSw4IEBAIGRlZiB0
eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2RlY2xhcmVkKCk6CiAgICAgcmV0dXJuIGZyb3pl
bnNldChbCiAgICAgICAgICdNYWNoU2VuZFJpZ2h0JywKICAgICAgICAgJ1N0cmluZycsCisgICAg
ICAgICdXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uJywKKyAgICAgICAgJ1dlYkNvcmU6
OkNvbG9yU3BhY2UnLAogICAgICAgICAnV2ViQ29yZTo6RG9jdW1lbnRJZGVudGlmaWVyJywKICAg
ICAgICAgJ1dlYkNvcmU6OkZldGNoSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpGcmFt
ZUlkZW50aWZpZXInLApAQCAtMjEyLDYgKzIxNSw3IEBAIGRlZiB0eXBlc190aGF0X2Nhbm5vdF9i
ZV9mb3J3YXJkX2RlY2xhcmVkKCk6CiAgICAgICAgICdXZWJDb3JlOjpQb2ludGVySUQnLAogICAg
ICAgICAnV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6UmVh
bHRpbWVNZWRpYVNvdXJjZUlkZW50aWZpZXInLAorICAgICAgICAnV2ViQ29yZTo6UmVuZGVyaW5n
TW9kZScsCiAgICAgICAgICdXZWJDb3JlOjpTZXJ2aWNlV29ya2VySWRlbnRpZmllcicsCiAgICAg
ICAgICdXZWJDb3JlOjpTZXJ2aWNlV29ya2VySm9iSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJD
b3JlOjpTZXJ2aWNlV29ya2VyT3JDbGllbnREYXRhJywKQEAgLTIyMSwxMiArMjI1LDE0IEBAIGRl
ZiB0eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2RlY2xhcmVkKCk6CiAgICAgICAgICdXZWJL
aXQ6OkFjdGl2aXR5U3RhdGVDaGFuZ2VJRCcsCiAgICAgICAgICdXZWJLaXQ6OkF1ZGlvTWVkaWFT
dHJlYW1UcmFja1JlbmRlcmVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OkNvbnRlbnRX
b3JsZElkZW50aWZpZXInLAorICAgICAgICAnV2ViS2l0OjpJbWFnZUJ1ZmZlcklkZW50aWZpZXIn
LAogICAgICAgICAnV2ViS2l0OjpMYXllckhvc3RpbmdDb250ZXh0SUQnLAogICAgICAgICAnV2Vi
S2l0OjpNZWRpYVBsYXllclByaXZhdGVSZW1vdGVJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktp
dDo6TWVkaWFSZWNvcmRlcklkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpSZW1vdGVNZWRp
YVJlc291cmNlSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlJUQ0RlY29kZXJJZGVudGlm
aWVyJywKICAgICAgICAgJ1dlYktpdDo6UlRDRW5jb2RlcklkZW50aWZpZXInLAorICAgICAgICAn
V2ViS2l0OjpSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlNh
bXBsZUJ1ZmZlckRpc3BsYXlMYXllcklkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpTdG9y
YWdlQXJlYUlkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpTdG9yYWdlQXJlYUltcGxJZGVu
dGlmaWVyJywKQEAgLTc2OSwxMyArNzc1LDE2IEBAIGRlZiBnZW5lcmF0ZV9tZXNzYWdlX2hhbmRs
ZXIocmVjZWl2ZXIpOgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgYXN5bmNfbWVzc2FnZXMu
YXBwZW5kKG1lc3NhZ2UpCiAKLSAgICBpZiBhc3luY19tZXNzYWdlczoKKyAgICBpZiBhc3luY19t
ZXNzYWdlcyBvciByZWNlaXZlci5oYXNfYXR0cmlidXRlKFdBTlRTX0RJU1BBVENIX01FU1NBR0Vf
QVRUUklCVVRFKToKICAgICAgICAgcmVzdWx0LmFwcGVuZCgndm9pZCAlczo6ZGlkUmVjZWl2ZSVz
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rl
cilcbicgJSAocmVjZWl2ZXIubmFtZSwgcmVjZWl2ZXIubmFtZSBpZiByZWNlaXZlci5oYXNfYXR0
cmlidXRlKExFR0FDWV9SRUNFSVZFUl9BVFRSSUJVVEUpIGVsc2UgJycpKQogICAgICAgICByZXN1
bHQuYXBwZW5kKCd7XG4nKQogICAgICAgICBpZiBub3QgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShO
T1RfUkVGQ09VTlRFRF9SRUNFSVZFUl9BVFRSSUJVVEUpOgogICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZCgnICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpO1xuJykKIAogICAg
ICAgICByZXN1bHQgKz0gW2FzeW5jX21lc3NhZ2Vfc3RhdGVtZW50KHJlY2VpdmVyLCBtZXNzYWdl
KSBmb3IgbWVzc2FnZSBpbiBhc3luY19tZXNzYWdlc10KKyAgICAgICAgaWYgcmVjZWl2ZXIuaGFz
X2F0dHJpYnV0ZShXQU5UU19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVURSk6CisgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKCcgICAgaWYgKGRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNv
ZGVyKSlcbicpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgICAgIHJldHVybjtcbicp
CiAgICAgICAgIGlmIChyZWNlaXZlci5zdXBlcmNsYXNzKToKICAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoJyAgICAlczo6ZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7XG4n
ICUgKHJlY2VpdmVyLnN1cGVyY2xhc3MpKQogICAgICAgICBlbHNlOgpAQCAtNzg0LDEzICs3OTMs
MTYgQEAgZGVmIGdlbmVyYXRlX21lc3NhZ2VfaGFuZGxlcihyZWNlaXZlcik6CiAgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKCcgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7XG4nKQogICAgICAgICBy
ZXN1bHQuYXBwZW5kKCd9XG4nKQogCi0gICAgaWYgc3luY19tZXNzYWdlczoKKyAgICBpZiBzeW5j
X21lc3NhZ2VzIG9yIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FH
RV9BVFRSSUJVVEUpOgogICAgICAgICByZXN1bHQuYXBwZW5kKCdcbicpCiAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoJ3ZvaWQgJXM6OmRpZFJlY2VpdmVTeW5jJXNNZXNzYWdlKElQQzo6Q29ubmVjdGlv
biYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBD
OjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKVxuJyAlIChyZWNlaXZlci5uYW1lLCByZWNlaXZlci5u
YW1lIGlmIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoTEVHQUNZX1JFQ0VJVkVSX0FUVFJJQlVURSkg
ZWxzZSAnJykpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3tcbicpCiAgICAgICAgIGlmIG5vdCBy
ZWNlaXZlci5oYXNfYXR0cmlidXRlKE5PVF9SRUZDT1VOVEVEX1JFQ0VJVkVSX0FUVFJJQlVURSk6
CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFr
ZVJlZigqdGhpcyk7XG4nKQogICAgICAgICByZXN1bHQgKz0gW3N5bmNfbWVzc2FnZV9zdGF0ZW1l
bnQocmVjZWl2ZXIsIG1lc3NhZ2UpIGZvciBtZXNzYWdlIGluIHN5bmNfbWVzc2FnZXNdCisgICAg
ICAgIGlmIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRS
SUJVVEUpOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGlmIChkaXNwYXRjaFN5bmNN
ZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2RlcikpXG4nKQorICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZCgnICAgICAgICByZXR1cm47XG4nKQogICAgICAgICByZXN1bHQuYXBw
ZW5kKCcgICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24pO1xuJykKICAgICAgICAgcmVzdWx0LmFw
cGVuZCgnICAgIFVOVVNFRF9QQVJBTShkZWNvZGVyKTtcbicpCiAgICAgICAgIHJlc3VsdC5hcHBl
bmQoJyAgICBVTlVTRURfUEFSQU0ocmVwbHlFbmNvZGVyKTtcbicpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCmluZGV4IDdiZjcxYzE3YWJkZDNkOGIxMzE5
MDIyMDA1OGM5ZjljMjE5ZjYwYjMuLmQ5OTNjMjczYTMzZGZhYjk5ZjQ2NGEwYjI3YzJjY2ZlNTkw
MjEwYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENv
ZGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5o
CkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFyZ3VtZW50Q29k
ZXJzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9BdXRvcGxheUV2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvclNw
YWNlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oPgpAQCAt
MzYsNiArMzcsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya0xvYWRNZXRyaWNzLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9Ob3RpZmljYXRpb25EaXJlY3Rpb24uaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1JlYWx0aW1lTWVkaWFTb3VyY2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlcmluZ01v
ZGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvU2VydmljZVdvcmtlclR5cGVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TdG9y
ZWRDcmVkZW50aWFsc1BvbGljeS5oPgpAQCAtODIzLDYgKzgyNSwxNCBAQCB0ZW1wbGF0ZTw+IHN0
cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlNlcmlhbGl6ZWRBdHRhY2htZW50RGF0YT4gewog
CiBuYW1lc3BhY2UgV1RGIHsKIAordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3Jl
OjpBbHBoYVByZW11bHRpcGxpY2F0aW9uPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVl
czwKKyAgICBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uLAorICAgIFdlYkNvcmU6OkFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsCisgICAgV2ViQ29yZTo6QWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkCisgICAgPjsKK307CisKIHRlbXBsYXRl
PD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6Q29sb3JTcGFjZT4gewogICAgIHVzaW5nIHZh
bHVlcyA9IEVudW1WYWx1ZXM8CiAgICAgV2ViQ29yZTo6Q29sb3JTcGFjZSwKQEAgLTgzMiw2ICs4
NDIsMTggQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpDb2xvclNwYWNl
PiB7CiAgICAgPjsKIH07CiAKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6
UmVuZGVyaW5nTW9kZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgV2Vi
Q29yZTo6UmVuZGVyaW5nTW9kZSwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpBY2NlbGVy
YXRlZCwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLAorICAgIFdl
YkNvcmU6OlJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQsCisgICAgV2ViQ29y
ZTo6UmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3QsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9k
ZTo6UmVtb3RlQWNjZWxlcmF0ZWQsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6UmVtb3Rl
CisgICAgPjsKK307CisKIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6QXV0
b3BsYXlFdmVudD4gewogICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CiAgICAgICAgIFdl
YkNvcmU6OkF1dG9wbGF5RXZlbnQsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMu
dHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAppbmRleCA1MzEwOTIwM2NhMjJjYjVmNWRi
OTM1MWY5YzIzNmUwNTNhYjFlMDA5Li4zOTE2ZTc4YzUzZDI4M2VkMjgxZTdjNmYxOTllYTc4NWEy
ODBmODk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CisrKyBiL1NvdXJj
ZS9XZWJLaXQvU291cmNlcy50eHQKQEAgLTM3LDYgKzM3LDcgQEAgR1BVUHJvY2Vzcy9tZWRpYS9S
ZW1vdGVNZWRpYVJlc291cmNlLmNwcAogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVJlc291
cmNlTG9hZGVyLmNwcAogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVJlc291cmNlTWFuYWdl
ci5jcHAKIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3RlVmlkZW9UcmFja1Byb3h5LmNwcAorR1BVUHJv
Y2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKIAog
TmV0d29ya1Byb2Nlc3MvQWRDbGlja0F0dHJpYnV0aW9uTWFuYWdlci5jcHAKIE5ldHdvcmtQcm9j
ZXNzL05ldHdvcmtBY3Rpdml0eVRyYWNrZXIuY3BwCkBAIC01MzcsNiArNTM4LDcgQEAgV2ViUHJv
Y2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyLmNwcAogV2ViUHJvY2Vzcy9H
UFUvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNSU1FVHlwZUNhY2hlLmNwcCBAbm8tdW5pZnkKIFdl
YlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2VQcm94eS5jcHAKIFdlYlByb2Nl
c3MvR1BVL21lZGlhL1ZpZGVvVHJhY2tQcml2YXRlUmVtb3RlLmNwcAorV2ViUHJvY2Vzcy9HUFUv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAogV2ViUHJvY2Vzcy9H
UFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5jcHAKIFdlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9NZWRp
YVJlY29yZGVyUHJpdmF0ZS5jcHAKIFdlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9NZWRpYVJlY29yZGVy
UHJvdmlkZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQg
Yi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggZWFhMGQ4NGZhNWNmYTc0MGQy
N2I3OGI5MDdlYzk1Njk5MzFjYjBkYy4uZmEzNDVkMTdlZTJlNDEyNTlhYThlODljMGU0N2U1NjE4
MTg4YzAyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CisrKyBi
L1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dApAQCAtNjM4LDYgKzYzOCw3IEBAIFdlYlBy
b2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3Iu
bW0KIC8vIERlcml2ZWQgU291cmNlcwogRWRpdGFibGVJbWFnZUNvbnRyb2xsZXJNZXNzYWdlUmVj
ZWl2ZXIuY3BwCiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcAor
R1BVUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwCiBHUFVQcm9jZXNzUHJveHlN
ZXNzYWdlUmVjZWl2ZXIuY3BwCiBHUFVQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcAogTGliV2Vi
UlRDQ29kZWNzUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCkBAIC02NDYsNiArNjQ3LDcgQEAgUmVt
b3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJNYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNw
cAogUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJNZXNzYWdlUmVjZWl2ZXIuY3Bw
CiBSZW1vdGVNZWRpYVJlY29yZGVyTWVzc2FnZVJlY2VpdmVyLmNwcAogUmVtb3RlTWVkaWFSZWNv
cmRlck1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiBSZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5h
Z2VyTWVzc2FnZVJlY2VpdmVyLmNwcAogUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWVz
c2FnZVJlY2VpdmVyLmNwcAogU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWVzc2FnZVJlY2VpdmVy
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggYmU2NDIyMDQ3NzVlMjU1NWNjYmE1ZmRlOWY4ZTRhZTgzNTVlZGRkNS4uNGVhZTE5NTg0
ZDY2ZjgzMjA4MzExMzc0OWY4MTJiMTFiNjBlMzZkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00MDM4LDYgKzQwMzgsMTMgQEAKIAkJ
NzFBNjc2QTQyMkM2MjMxODAwN0Q2Mjk1IC8qIFdLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXpl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXS1RvdWNoQWN0aW9uR2VzdHVy
ZVJlY29nbml6ZXIuaDsgcGF0aCA9IGlvcy9XS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFBNjc2QTUyMkM2MjMxODAwN0Q2Mjk1
IC8qIFdLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5tbTsg
cGF0aCA9IGlvcy9XS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcxRkI4MTBBMjI2MDYyN0EwMDMyMzY3NyAvKiBXZWJzaXRlU2lt
dWxhdGVkTW91c2VFdmVudHNEaXNwYXRjaFBvbGljeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJzaXRlU2ltdWxhdGVkTW91c2VFdmVudHNEaXNwYXRjaFBvbGljeS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjU2NDU5RTIzRThGRjA3MDBBMDYzMkQgLyog
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyNTY0NTlGMjNFOEZGMDcwMEEwNjMyRCAvKiBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyNTY0NUEwMjNFOEZGMDcwMEEwNjMyRCAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHku
bWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjU2NDVB
MTIzRThGRjE1MDBBMDYzMkQgLyogUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI1NjQ1QTIyM0U4RkYxNTAwQTA2MzJEIC8q
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MjU2NDVBMzIzRThGRjE1MDBBMDYzMkQgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI1NjQ1QTQyM0U5MDdEMTAw
QTA2MzJEIC8qIEltYWdlQnVmZmVySWRlbnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzI4RTg2RUYxNzk1MTg4QzAwODc4NzlFIC8qIFdlYkNvbG9yUGlja2VyTWFjLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvbG9yUGlja2VyTWFjLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOEU4NkYwMTc5NTE4OEMwMDg3ODc5RSAvKiBX
ZWJDb2xvclBpY2tlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFdlYkNvbG9yUGlja2VyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
NUE4RDJDNDE4N0NDRjlGMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9yZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNjQ4Miw2ICs2NDg5LDcgQEAKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMDc5MjMxMkYyMzlCM0IwQzAwOTU5OEUyIC8qIG1lZGlh
ICovLAorCQkJCTcyNTY0NTlDMjNFOEZFNUMwMEEwNjMyRCAvKiBSZW5kZXJpbmdCYWNrZW5kICov
LAogCQkJCTQxNzIxOTg4MjNCNjEyNjEwMEFFNTY4NiAvKiB3ZWJydGMgKi8sCiAJCQkJMkQ3RTQz
QzAyMzc1MkNEOTAwRUE1Q0EwIC8qIEdQVVByb2Nlc3NDb25uZWN0aW9uLmNwcCAqLywKIAkJCQky
RDdFNDNDMzIzNzUyQ0Q5MDBFQTVDQTAgLyogR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCAqLywKQEAg
LTY0OTgsNiArNjUwNiw3IEBACiAJCQkJMkQ5RkIyMDQyMzc1MjA5RDAwNDlGOTM2IC8qIGlvcyAq
LywKIAkJCQkyRDlGQjIwNjIzNzUyMDlEMDA0OUY5MzYgLyogbWFjICovLAogCQkJCTA3Qzc1QzE3
MjM5OUEzREIwMDg4RTY1QiAvKiBtZWRpYSAqLywKKwkJCQk3MjU2NDU5RDIzRThGRTg3MDBBMDYz
MkQgLyogUmVuZGVyaW5nQmFja2VuZCAqLywKIAkJCQk0MTcyMTk4RTIzQjYzM0NBMDBBRTU2ODYg
Lyogd2VicnRjICovLAogCQkJCTJEOUZCMjBDMjM3NTIwOUQwMDQ5RjkzNiAvKiBHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmNwcCAqLywKIAkJCQkyRDlGQjIwMDIzNzUyMDlEMDA0OUY5MzYgLyog
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oICovLApAQCAtNzg5OSw2ICs3OTA4LDI3IEBACiAJ
CQluYW1lID0gbWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJNzI1NjQ1
OUMyM0U4RkU1QzAwQTA2MzJEIC8qIFJlbmRlcmluZ0JhY2tlbmQgKi8gPSB7CisJCQlpc2EgPSBQ
QlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTcyNTY0NUE0MjNFOTA3RDEwMEEwNjMyRCAv
KiBJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCAqLywKKwkJCQk3MjU2NDVBMzIzRThGRjE1MDBBMDYz
MkQgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgKi8sCisJCQkJNzI1NjQ1QTIyM0U4RkYx
NTAwQTA2MzJEIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCAqLywKKwkJCQk3MjU2NDVBMTIz
RThGRjE1MDBBMDYzMkQgLyogUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCAqLywKKwkJCSk7
CisJCQlwYXRoID0gUmVuZGVyaW5nQmFja2VuZDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CisJCX07CisJCTcyNTY0NTlEMjNFOEZFODcwMEEwNjMyRCAvKiBSZW5kZXJpbmdCYWNrZW5kICov
ID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk3MjU2NDU5RTIz
RThGRjA3MDBBMDYzMkQgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcCAqLywKKwkJ
CQk3MjU2NDU5RjIzRThGRjA3MDBBMDYzMkQgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
LmggKi8sCisJCQkJNzI1NjQ1QTAyM0U4RkYwNzAwQTA2MzJEIC8qIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5tZXNzYWdlcy5pbiAqLywKKwkJCSk7CisJCQlwYXRoID0gUmVuZGVyaW5nQmFj
a2VuZDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTdBODQzQTFEMjFFNDFG
RDkwMERFRjY2MyAvKiBDbGFzc2lmaWVyICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BV
UHJvY2Vzc0Nvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQ
cm9jZXNzQ29ubmVjdGlvbi5jcHAKaW5kZXggOGRmZjUwZjMwODhlZDQ1YzU5MGVjODFlMmMwOWEx
MzhiYTdhNTM1Zi4uMGY5YzdhY2VmNGUwZWQ4NzNjNGJlMDg5NjE4YTZkZjA0MTc4NzBmNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVj
dGlvbi5jcHAKQEAgLTYyLDEwICs2Miw2IEBAIHZvaWQgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRp
ZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpCiB7CiB9CiAKLXZvaWQgR1BVUHJvY2Vzc0Nvbm5lY3Rp
b246OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmlu
Z1JlZmVyZW5jZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UpCi17Ci19Ci0KICNpZiBQTEFURk9STShD
T0NPQSkgJiYgRU5BQkxFKFZJREVPX1RSQUNLKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFNKQogU2Ft
cGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlciYgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OnNhbXBs
ZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXIoKQogewpAQCAtNzUsMzQgKzcxLDQ0IEBAIFNhbXBs
ZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXImIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpzYW1wbGVC
dWZmZXJEaXNwbGF5TGF5ZXJNCiB9CiAjZW5kaWYKIAotdm9pZCBHUFVQcm9jZXNzQ29ubmVjdGlv
bjo6ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRl
Y29kZXImIGRlY29kZXIpCitib29sIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRjaE1lc3Nh
Z2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIpCiB7
CiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpNZWRp
YVBsYXllclByaXZhdGVSZW1vdGU6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zdXBwbGVtZW50PFJlbW90ZU1lZGlhUGxheWVyTWFuYWdl
cj4oKS0+ZGlkUmVjZWl2ZVBsYXllck1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAg
ICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotCiAjaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVz
c2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsK
ICAgICAgICAgaWYgKGF1dG8qIGNhcHR1cmVNYW5hZ2VyID0gV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkuc3VwcGxlbWVudDxVc2VyTWVkaWFDYXB0dXJlTWFuYWdlcj4oKSkKICAgICAgICAgICAgIGNh
cHR1cmVNYW5hZ2VyLT5kaWRSZWNlaXZlTWVzc2FnZUZyb21HUFVQcm9jZXNzKGNvbm5lY3Rpb24s
IGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICNpZiBQTEFURk9STShDT0NPQSkgJiYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIGlmIChkZWNv
ZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6U2FtcGxlQnVmZmVyRGlzcGxh
eUxheWVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgc2FtcGxlQnVmZmVyRGlz
cGxheUxheWVyTWFuYWdlcigpLmRpZFJlY2VpdmVMYXllck1lc3NhZ2UoY29ubmVjdGlvbiwgZGVj
b2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2Vu
ZGlmIC8vIFBMQVRGT1JNKENPQ09BKSAmJiBFTkFCTEUoVklERU9fVFJBQ0spCiAjZW5kaWYgLy8g
RU5BQkxFKE1FRElBX1NUUkVBTSkKICNpZiBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9STShDT0NP
QSkKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6Okxp
YldlYlJUQ0NvZGVjczo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLmxpYldlYlJUQ0NvZGVjcygpLmRpZFJlY2VpdmVNZXNzYWdlKGNvbm5l
Y3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICNlbmRpZgorICAgIHJldHVybiBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaE1l
c3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7CiB9CiAKK2Jvb2wgR1BVUHJvY2Vzc0Nvbm5lY3Rp
b246OmRpc3BhdGNoU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6
OkRlY29kZXImIGRlY29kZXIsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiByZXBseUVu
Y29kZXIpCit7CisgICAgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck1hcCgpLmRpc3BhdGNoU3luY01l
c3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsKK30KKwordm9pZCBHUFVQ
cm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlv
biYsIElQQzo6U3RyaW5nUmVmZXJlbmNlLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSkKK3sKK30KKwor
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5l
Y3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rp
b24uaAppbmRleCA0NjAwZTUzYmIyODRkNzQ4Y2YzOTExYjk0ZGI1NTk5YTljYjQ1ZjI3Li43YjZm
ODgyMjJjMzM3MzZiOGM0MjdkYjRjYmRlMWMwNDU0ODg2YzgyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmgKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oCkBAIC0yOCw2ICsy
OCw3IEBACiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5o
IgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlck1hcC5oIgogI2luY2x1ZGUgIlNhbXBsZUJ1ZmZl
ckRpc3BsYXlMYXllck1hbmFnZXIuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNDcsNiArNDgsNyBAQCBwdWJsaWM6CiAg
ICAgfkdQVVByb2Nlc3NDb25uZWN0aW9uKCk7CiAgICAgCiAgICAgSVBDOjpDb25uZWN0aW9uJiBj
b25uZWN0aW9uKCkgeyByZXR1cm4gbV9jb25uZWN0aW9uLmdldCgpOyB9CisgICAgSVBDOjpNZXNz
YWdlUmVjZWl2ZXJNYXAmIG1lc3NhZ2VSZWNlaXZlck1hcCgpIHsgcmV0dXJuIG1fbWVzc2FnZVJl
Y2VpdmVyTWFwOyB9CiAKICNpZiBIQVZFKEFVRElUX1RPS0VOKQogICAgIHZvaWQgc2V0QXVkaXRU
b2tlbihPcHRpb25hbDxhdWRpdF90b2tlbl90PiBhdWRpdFRva2VuKSB7IG1fYXVkaXRUb2tlbiA9
IGF1ZGl0VG9rZW47IH0KQEAgLTYyLDEwICs2NCwxNSBAQCBwcml2YXRlOgogICAgIC8vIElQQzo6
Q29ubmVjdGlvbjo6Q2xpZW50CiAgICAgdm9pZCBkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKSBv
dmVycmlkZTsKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQ
Qzo6RGVjb2RlciYpIGZpbmFsOworICAgIHZvaWQgZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+
JikgZmluYWw7CiAgICAgdm9pZCBkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpTdHJp
bmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUpIG92ZXJyaWRlOworICAgIAorICAgIGJvb2wgZGlzcGF0
Y2hNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOworICAgIGJvb2wgZGlz
cGF0Y2hTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBzdGQ6OnVu
aXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpOwogCiAgICAgLy8gVGhlIGNvbm5lY3Rpb24gZnJvbSB0
aGUgd2ViIHByb2Nlc3MgdG8gdGhlIEdQVSBwcm9jZXNzLgogICAgIFJlZjxJUEM6OkNvbm5lY3Rp
b24+IG1fY29ubmVjdGlvbjsKKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCBtX21lc3NhZ2VS
ZWNlaXZlck1hcDsKIAogI2lmIEhBVkUoQVVESVRfVE9LRU4pCiAgICAgT3B0aW9uYWw8YXVkaXRf
dG9rZW5fdD4gbV9hdWRpdFRva2VuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4KaW5kZXggZDM2
ZjhhMDk1ZjZhNzdiYmI2Y2FjODgzYTY1MWU4NGNlOWQ2NGIzMC4uNTdmZWNkZTlkZjI3YzczOWE2
Y2JmMDI2OTgwNjU5MmI1ZTIxNzlhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCkBAIC0y
Miw3ICsyMiw3IEBACiAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKLW1lc3NhZ2VzIC0+IEdQ
VVByb2Nlc3NDb25uZWN0aW9uIHsKK21lc3NhZ2VzIC0+IEdQVVByb2Nlc3NDb25uZWN0aW9uIFdh
bnRzRGlzcGF0Y2hNZXNzYWdlIHsKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmggYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWExYmM5YWU4N2RjOGQ3MjQyOGEwYjgwOWNhZDBkODBh
NGNkMWNiOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
UmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlcklkZW50aWZpZXIuaApAQCAtMCwwICsxLDM5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisK
KyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworZW51bSBJbWFnZUJ1ZmZlcklkZW50aWZpZXJUeXBlIHsgfTsKK3VzaW5nIEltYWdlQnVmZmVy
SWRlbnRpZmllciA9IE9iamVjdElkZW50aWZpZXI8SW1hZ2VCdWZmZXJJZGVudGlmaWVyVHlwZT47
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNr
ZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjgwMzU3YjBhNGIxODEzOTg1NTFmZTkwYWUyOWU0Yjk2OWQ2YTE4NzgKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgiCisK
KyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCitzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4g
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gc3RkOjp1bmlx
dWVfcHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ+KG5ldyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
KCkpOworfQorCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
KCkKK3sKKyAgICAvLyBDcmVhdGUgdGhlIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS4KKyAg
ICBzZW5kKE1lc3NhZ2VzOjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDcmVhdGVSZW5kZXJp
bmdCYWNrZW5kKG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpLCAwKTsKK30KKworUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6flJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKQoreworICAgIC8vIFJl
bGVhc2UgdGhlIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS4KKyAgICBzZW5kKE1lc3NhZ2Vz
OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpSZWxlYXNlUmVuZGVyaW5nQmFja2VuZChtX3Jl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKSwgMCk7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiogUmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdAorewor
ICAgIHJldHVybiAmV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5l
Y3Rpb24oKS5jb25uZWN0aW9uKCk7Cit9CisKK3VpbnQ2NF90IFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9y
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpOworfQorCitzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVy
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRv
dyogaG9zdFdpbmRvdykKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdl
QnVmZmVyOworCisgICAgc3dpdGNoIChyZW5kZXJpbmdNb2RlKSB7CisgICAgY2FzZSBSZW5kZXJp
bmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRlZDoKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90
ZToKKyAgICAgICAgLy8gRklYTUU6IGNyZWF0ZSB0aGUgcmVtb3RlIEltYWdlQnVmZmVyLgorICAg
IGRlZmF1bHQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRl
SW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNw
YWNlLCBob3N0V2luZG93KTsKKyAgICB9CisKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODZi
ZTlkY2JkNjBmMzk1ODc3ZjQ4ZTUxNzE4NTA5ZDlkMWY0NGMwNQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9D
RVNTKQorCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVNl
bmRlci5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9SZW5kZXJpbmdCYWNrZW5kLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
bGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kCisgICAgOiBwdWJsaWMgV2ViQ29yZTo6UmVuZGVy
aW5nQmFja2VuZAorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5kZXIKKyAgICAsIHByaXZh
dGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlKCk7CisKKyAgICB+UmVtb3RlUmVuZGVyaW5n
QmFja2VuZCgpOworCisgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgorICAgIElQQzo6Q29ubmVj
dGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB1aW50
NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAg
Ly8gUmVuZGVyaW5nQmFja2VuZAorICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJbWFnZUJ1
ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiwgV2ViQ29y
ZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNw
YWNlLCBjb25zdCBXZWJDb3JlOjpIb3N0V2luZG93Kikgb3ZlcnJpZGU7CisKK3ByaXZhdGU6Cisg
ICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpOworICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgeyBSZW5kZXJpbmdCYWNrZW5kSWRlbnRp
Zmllcjo6Z2VuZXJhdGUoKSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQyMzU0NzBjY2ZlN2I3OWJiOTI0NTc4YWZi
NDE3MDM1YzkxM2RkMDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaApAQCAt
MCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BV
X1BST0NFU1MpCisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworZW51bSBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllclR5cGUgeyB9Owor
dXNpbmcgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPFJlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyVHlwZT47CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAppbmRleCA4
ZTRjOTM3NWQ3YjhjYzEwZmZhMDA4MDNkNDgyMTczYmU1YTM1NThhLi43ZDdiODg2ZDY4NjQzNWQy
YmQxYTExNDRjNjU0NjA2YTc0MzgwM2Y1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcApAQCAtOTAs
NiArOTAsMTAgQEAKICNpbmNsdWRlICJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmgiCiAjZW5kaWYK
IAorI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmgiCisjZW5kaWYKKwogI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCiAjaW5jbHVkZSAi
UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKICNlbmRpZgpAQCAtODkxLDYgKzg5NSwxNSBA
QCBSZWZQdHI8RGlzcGxheVJlZnJlc2hNb25pdG9yPiBXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZURp
c3BsYXlSZWZyZXNoTW9uaXRvcihQbGF0ZgogCiAjZW5kaWYKIAorc3RkOjp1bmlxdWVfcHRyPFJl
bmRlcmluZ0JhY2tlbmQ+IFdlYkNocm9tZUNsaWVudDo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCgp
IGNvbnN0Cit7CisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorICAgIHJldHVybiBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpjcmVhdGUoKTsKKyNlbHNlCisgICAgcmV0dXJuIFJlbmRlcmluZ0JhY2tl
bmQ6OmNyZWF0ZSgpOworI2VuZGlmCit9CisKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjphdHRhY2hS
b290R3JhcGhpY3NMYXllcihGcmFtZSYsIEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogewogICAgIGlm
IChsYXllcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAppbmRleCBhOGE0Y2NhYzU3ZDgwOGFhYTU1ZDhkNzk1
MWJjNWM1NDFjNjBmMmFkLi41Njc4N2UwMTcwMGViYmVlOWRjMzdlM2FiODQ1ODY2NDg1ZjZkNmQz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5oCkBAIC0yMzMsNiArMjMzLDggQEAgcHJpdmF0ZToKICAgICBS
ZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVz
aE1vbml0b3IoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpIGNvbnN0IGZpbmFsOwogI2VuZGlm
CiAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRl
UmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0IGZpbmFsOworCiAgICAgQ29tcG9zaXRpbmdUcmlnZ2Vy
RmxhZ3MgYWxsb3dlZENvbXBvc2l0aW5nVHJpZ2dlcnMoKSBjb25zdCBmaW5hbAogICAgIHsKICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENvbXBvc2l0aW5nVHJpZ2dlckZsYWdzPigKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAppbmRleCA5ZmJiMWZk
ZjBkODI3ODg0NjY1Y2VjNzczN2IzMTBiNTAzMWQ0MGM1Li4wZjg4NDI5MDBmODUxYTdkOTJmODg2
Y2E2NmY5MWE5MTBlOWZlZmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJGcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViRnJhbWUuY3BwCkBAIC04NDAsNyArODQwLDcgQEAgUmVmUHRyPFNoYXJlYWJsZUJpdG1h
cD4gV2ViRnJhbWU6OmNyZWF0ZVNlbGVjdGlvblNuYXBzaG90KCkgY29uc3QKICAgICBpZiAoIXNu
YXBzaG90KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gc2hhcmVkU25hcHNo
b3QgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShzbmFwc2hvdC0+aW50ZXJuYWxT
aXplKCksIHsgfSk7CisgICAgYXV0byBzaGFyZWRTbmFwc2hvdCA9IFNoYXJlYWJsZUJpdG1hcDo6
Y3JlYXRlU2hhcmVhYmxlKHNuYXBzaG90LT5iYWNrZW5kU2l6ZSgpLCB7IH0pOwogICAgIGlmICgh
c2hhcmVkU25hcHNob3QpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMGExYTBl
YzllMzUwNmNmYzU0M2Q4OWY0YzE5YmYxZmRhNGI5ODI5MS4uZThhZjA2MjAxNjNmOGJiMGE4NGJh
MTNlMGZmODJkMGMyOTYwMDAwZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisr
KyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIwLTAyLTAzICBT
YWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgQ3Jl
YXRlIGEgbmV3IEltYWdlQnVmZmVyIHR5cGUgZm9yIGRyYXdpbmcgb24gYSBEaXNwbGF5TGlzdAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3MTA5CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGV4dHJh
IHJlY29yZGluZyBoYXBwZW5zIGJlY2F1c2UgQ2FudmFzQmFzZTo6c2V0SW1hZ2VCdWZmZXIoKSB1
c2VkIHRvCisgICAgICAgIGlzc3VlIGl0cyBHcmFwaGljc0NvbnRleHQgY29tbWFuZHMgZGlyZWN0
bHkgdG8gdGhlIGJhY2tlbmQuIFdpdGggdGhpcyAKKyAgICAgICAgcGF0Y2gsIERpc3BsYXlMaXN0
SW1hZ2VCdWZmZXIgZG9lcyBub3QgYWxsb3cgYWNjZXNzIHRvIHRoZSBiYWNrZW5kIGNvbnRleHQu
CisgICAgICAgIFNvIGFsbCB0aGUgR3JhcGhpY3NDb250ZXh0IGNvbW1hbmRzIGhhcyB0byBiZSBy
ZWNvcmRlZC4KKworICAgICAgICAqIGRpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4
cGVjdGVkLnR4dDoKKwogMjAyMC0wMi0wMyAgSmFzb24gTGF3cmVuY2UgIDxsYXdyZW5jZS5qQGFw
cGxlLmNvbT4KIAogICAgICAgICBbIE1hYyB3azIgXSBodHRwL3dwdC9tZWRpYXJlY29yZGVyL01l
ZGlhUmVjb3JkZXItQVYtYXVkaW8tdmlkZW8tZGF0YWF2YWlsYWJsZS1ncHVwcm9jZXNzLmh0bWwg
aXMgZmxha3kgZmFpbGluZy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9j
YW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0
cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dAppbmRleCAxYjU3ZTc5MWI3MmFjY2E4
Nzc2MTQ0NzliNGRjN2ZlNWM5NTk0ZDc3Li4zNGM4N2I5YjA0Mjk0NTVhOWJmMTE0MWM2YmZiMzk3
MWM3NTIwYjhmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRp
c3BsYXktbGlzdC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2Nh
bnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0CkBAIC0xLDcgKzEsMTEgQEAKICAKKyhzYXZl
CisgIChyZXN0b3JlLWluZGV4IDApKQogKHNldC1zdGF0ZQotICAoY2hhbmdlLWZsYWdzIDI1NikK
LSAgKGZpbGwtY29sb3IgI0M4MDAwMCkpCisgIChjaGFuZ2UtZmxhZ3MgMTA1MDkxMikKKyAgKHN0
cm9rZS10aGlja25lc3MgMS4wMCkKKyAgKGZpbGwtY29sb3IgI0M4MDAwMCkKKyAgKHNoYWRvd3Mt
aWdub3JlLXRyYW5zZm9ybXMgMSkpCiAoZmlsbC1yZWN0CiAgIChleHRlbnQgYXQgKDEwLDEwKSBz
aXplIDU1eDUwKQogICAocmVjdCBhdCAoMTAsMTApIHNpemUgNTV4NTApKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389679</attachid>
            <date>2020-02-04 10:55:26 -0800</date>
            <delta_ts>2020-02-26 16:19:15 -0800</delta_ts>
            <desc>Patch  for review</desc>
            <filename>ImageBuffer-Pacthes-09.patch</filename>
            <type>text/plain</type>
            <size>62851</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxYjUzNDE4YmMyYS4uMTA4OGY4OTMxZGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOCBAQAorMjAyMC0wMi0wNCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FA
YXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCB0aGUgcmVtb3RlIFJlbmRlcmluZ0JhY2tl
bmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzE5
OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4dGVu
ZCBSZW5kZXJpbmdNb2RlIHRvIGluY2x1ZGUgbmV3IGVudW0gdmFsdWVzIGZvciBjcmVhdGluZyBy
ZW1vdGUKKyAgICAgICAgSW1hZ2VCdWZmZXIgdHlwZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcmlu
Z0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9SZW5kZXJpbmdCYWNrZW5kLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVy
aW5nTW9kZS5oOgorCiAyMDIwLTAyLTAzICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3
YUBhcHBsZS5jb20+CiAKICAgICAgICAgSW50cm9kdWNlIFJlbmRlcmluZ0JhY2tlbmQgYW5kIG1h
a2UgaXQgdGhlIGNyZWF0b3Igb2YgSW1hZ2VCdWZmZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5jcHAKaW5kZXggY2E1Y2I0ZmZi
NDUuLjAzY2I2YjI0MWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtNTEsOSArNTEsMTEgQEAgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihj
b25zdCBGbG9hdFNpemUKIAogICAgIHN3aXRjaCAocmVuZGVyaW5nTW9kZSkgewogICAgIGNhc2Ug
UmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ6CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1v
dGVBY2NlbGVyYXRlZDoKICAgICAgICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybUFjY2VsZXJhdGVk
SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhv
c3RXaW5kb3cpOwogICAgICAgICBGQUxMVEhST1VHSDsKICAgICBjYXNlIFJlbmRlcmluZ01vZGU6
OlVuYWNjZWxlcmF0ZWQ6CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGU6CiAgICAgICAg
IGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtSW1h
Z2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RX
aW5kb3cpOwogICAgICAgICBicmVhazsKQEAgLTc2LDkgKzc4LDExIEBAIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3Qg
RmxvYXRTaXplCiAKICAgICBzd2l0Y2ggKGNvbnRleHQucmVuZGVyaW5nTW9kZSgpKSB7CiAgICAg
Y2FzZSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDoKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6
OlJlbW90ZUFjY2VsZXJhdGVkOgogICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtQWNjZWxl
cmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIGNvbnRleHQpOwogICAgICAgICBGQUxMVEhS
T1VHSDsKICAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ6CisgICAgY2FzZSBS
ZW5kZXJpbmdNb2RlOjpSZW1vdGU6CiAgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAg
ICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBjb250
ZXh0KTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmgKaW5kZXggYThkZDg1MzUyODUuLmZhYzczMDY4NTc1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdC
YWNrZW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5n
QmFja2VuZC5oCkBAIC0zNiw3ICszNiw3IEBAIGNsYXNzIEhvc3RXaW5kb3c7CiBjbGFzcyBJbWFn
ZUJ1ZmZlcjsKIGNsYXNzIEludFNpemU7CiAKLWNsYXNzIFJlbmRlcmluZ0JhY2tlbmQgeworY2xh
c3MgV0VCQ09SRV9FWFBPUlQgUmVuZGVyaW5nQmFja2VuZCB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBjcmVhdGUoKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oCmluZGV4IDVjMjI0
ZThmNDVjLi5hYTQ4MzVkYmZhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1JlbmRlcmluZ01vZGUuaApAQCAtMzIsNiArMzIsOCBAQCBlbnVtIGNsYXNzIFJlbmRl
cmluZ01vZGUgOiB1aW50OF90IHsKICAgICBVbmFjY2VsZXJhdGVkLAogICAgIERpc3BsYXlMaXN0
QWNjZWxlcmF0ZWQsCiAgICAgRGlzcGxheUxpc3QsCisgICAgUmVtb3RlQWNjZWxlcmF0ZWQsCisg
ICAgUmVtb3RlCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDQ2NDY4
M2EzODFhLi40YTBhZTI4YzNjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMDkgQEAKKzIwMjAtMDIt
MDQgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAg
ICBJbXBsZW1lbnQgdGhlIHJlbW90ZSBSZW5kZXJpbmdCYWNrZW5kCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDcxOTgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtLSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
IHdpbGwgYmUgY3JlYXRlZCBieSBXZWJDaHJvbWVDbGllbnQgYW5kIG93bmVkIGJ5CisgICAgICAg
IENocm9tZS4gSW1hZ2VCdWZmZXI6OmNyZWF0ZSB3aWxsIGhhdmUgYWNjZXNzIHRvIGl0IHRocm91
Z2ggdGhlIEhvc3RXaW5kb3cKKyAgICAgICAgYXJndW1lbnQuIEFsbCB0eXBlcyBvZiBJbWFnZUJ1
ZmZlciB3aWxsIGJlIGNyZWF0ZWQgYnkKKyAgICAgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
Y3JlYXRlSW1hZ2VCdWZmZXIoKSBtZXRob2QuIEluLXByb2Nlc3MgSW1hZ2VCdWZmZXIKKyAgICAg
ICAgdHlwZXMgd2lsbCBiZSBjcmVhdGVkIGJ5IFJlbmRlcmluZ0JhY2tlbmQ6OiBjcmVhdGVJbWFn
ZUJ1ZmZlcigpLgorCisgICAgICAgIC0tIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSB3aWxs
IGJlIGNyZWF0ZWQgYW5kIG93bmVkIGJ5CisgICAgICAgIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MuCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0OgorICAgICAg
ICAqIERlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2ZWRT
b3VyY2VzLm1ha2U6CisKKyAgICAgICAgKiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpj
cmVhdGVSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzczo6cmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQpOgorICAgICAgICBBZGQgbWV0aG9k
cyBmb3IgY3JlYXRpbmcgYW5kIHJlbGVhc2luZyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHku
CisKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hN
ZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlz
cGF0Y2hTeW5jTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M6OmRpZFJlY2VpdmVNZXNzYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6R1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaDoKKyAgICAg
ICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6bWVzc2FnZVJlY2VpdmVyTWFw
KToKKyAgICAgICAgQWRkIGEgTWVzc2FnZVJlY2VpdmVyTWFwIHRvIEdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3Mgc28gbWVzc2FnZXMgY2FuIGJlCisgICAgICAgIGRpc3BhdGNoZWQgdG8gaXRzIE1l
c3NhZ2VSZWNlaXZlcnMuCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MubWVzc2FnZXMuaW46CisgICAgICAgIEFkZCB0aGUgYXR0cmlidXRlICdXYW50c0Rp
c3BhdGNoTWVzc2FnZScuCisgICAgICAgIEFkZCBtZXNzYWdlcyBmb3IgY3JlYXRpbmcgYW5kIHJl
bGVhc2luZyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuCisKKyAgICAgICAgKiBHUFVQcm9j
ZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHk6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9u
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojpt
ZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCBjb25zdCk6CisKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVsZWFzZUltYWdlQnVmZmVyKToK
KyAgICAgICAgQWRkIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGFuZCByZWxlYXNpbmcgcmVtb3RlIElt
YWdlQnVmZmVyIHByb3h5LgorCisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBj
b25zdCk6CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbjogQWRkZWQuCisgICAgICAgIEFkZCBtZXNzYWdl
cyBmb3IgY3JlYXRpbmcgYW5kIHJlbGVhc2luZyByZW1vdGUgSW1hZ2VCdWZmZXIgcHJveHkuCisK
KyAgICAgICAgKiBHUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5
ZXIuaDoKKyAgICAgICAgKiBHUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVTYW1wbGVCdWZmZXJEaXNw
bGF5TGF5ZXJNYW5hZ2VyLmNwcDoKKyAgICAgICAgKiBHUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVT
YW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyLmg6CisKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdC9tZXNzYWdlcy5weToKKyAgICAgICAgSWYgdGhlIGF0dHJpYnV0ZSBXYW50c0Rpc3BhdGNo
TWVzc2FnZSBpcyBhZGRlZCB0byB0aGUgbWVzc2FnZXMuaW4gZmlsZSwKKyAgICAgICAgYSBjYWxs
IHRvICdkaXNwYXRjaE1lc3NhZ2UoKScgd2lsbCBiZSBhZGRlZCB0byBkaWRSZWNlaXZlTWVzc2Fn
ZSgpIGFuZAorICAgICAgICBhIGNhbGwgdG8gJ2Rpc3BhdGNoU3luY01lc3NhZ2UoKScgd2lsbCBi
ZSBhZGRlZCB0byBkaXNwYXRjaFN5bmNNZXNzYWdlKCkKKyAgICAgICAgZXZlbiBpZiBubyBtZXNz
YWdlcyBhcmUgZGVmaW5lZCBpbiBtZXNzYWdlcy5pbi4KKworICAgICAgICAqIFNoYXJlZC9XZWJD
b3JlQXJndW1lbnRDb2RlcnMuaDoKKyAgICAgICAgQWRkIGVuY29kaW5nIGFuZCBkZWNvZGluZyBz
dXBwb3J0IGZvciBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFuZCBSZW5kZXJpbmdNb2RlLgorCisg
ICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAg
ICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKworICAgICAgICAqIFdlYlBy
b2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6R1BV
UHJvY2Vzc0Nvbm5lY3Rpb246OmRpc3BhdGNoTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkdQ
VVByb2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRjaFN5bmNNZXNzYWdlKToKKyAgICAgICAgKFdlYktp
dDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZSk6CisgICAg
ICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZSk6IERl
bGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaDoK
KyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246Om1lc3NhZ2VSZWNlaXZlck1h
cCk6CisgICAgICAgIEFkZCBhIE1lc3NhZ2VSZWNlaXZlck1hcCB0byBHUFVQcm9jZXNzQ29ubmVj
dGlvbiBzbyBtZXNzYWdlcyBjYW4gYmUKKyAgICAgICAgZGlzcGF0Y2hlZCB0byBpdHMgTWVzc2Fn
ZVJlY2VpdmVycy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0
aW9uLm1lc3NhZ2VzLmluOgorICAgICAgICBBZGQgdGhlIGF0dHJpYnV0ZSAnV2FudHNEaXNwYXRj
aE1lc3NhZ2UnLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9J
bWFnZUJ1ZmZlcklkZW50aWZpZXIuaDogQWRkZWQuCisgICAgICAgIEFkZCBhbiBPYmplY3RJZGVu
dGlmaWVyIGZvciByZW1vdGUgSW1hZ2VCdWZmZXIuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQ
VS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZCk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6On5SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVz
c2FnZVNlbmRlckNvbm5lY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCBjb25zdCk6CisKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIpOgor
ICAgICAgICBDcmVhdGVzIGFsbCB0eXBlcyBvZiBJbWFnZUJ1ZmZlci4gRm9yIG5vdyBpdCBvbmx5
IGNyZWF0ZXMgdGhlIGluIHByb2Nlc3MKKyAgICAgICAgUmVuZGVyaW5nQmFja2VuZC4KKworICAg
ICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L1JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmg6IEFkZGVkLgorCisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQgY29uc3QpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmg6CisgICAgICAg
IENyZWF0ZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIHdoaWNoIHdpbGwgYmUgb3duZWQgYnkgdGhl
IENocm9tZS4KKwogMjAyMC0wMi0wMyAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FA
YXBwbGUuY29tPgogCiAgICAgICAgIEFsbG93IGRpZmZlcmVudCBiYWNrLWVuZHMgZm9yIEltYWdl
QnVmZmVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0Lnhj
ZmlsZWxpc3QgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QK
aW5kZXggNTFkMzE4YjcyNGUuLjhhMzBmNjNiOTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL1dlYktpdC9EZXJp
dmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CkBAIC0xNSw2ICsxNSw3IEBAICQoSkFWQVNDUklQ
VENPUkVfUFJJVkFURV9IRUFERVJTX0RJUikvbW9kZWxzLnB5CiAkKEpBVkFTQ1JJUFRDT1JFX1BS
SVZBVEVfSEVBREVSU19ESVIpL3h4ZC5wbAogJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9HUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9HUFVQcm9j
ZXNzL0dQVVByb2Nlc3MubWVzc2FnZXMuaW4KKyQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4KICQo
UFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvbWFjL2NvbS5hcHBsZS5XZWJLaXQuR1BVUHJvY2Vzcy5z
Yi5pbgogJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1h
bmFnZXJQcm94eS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9tZWRpYS9S
ZW1vdGVNZWRpYVBsYXllclByb3h5Lm1lc3NhZ2VzLmluCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0IGIvU291cmNlL1dlYktpdC9EZXJp
dmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAppbmRleCA1YzkyYjgxMzM1My4uZjI5MzlmNjA1
MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmls
ZWxpc3QKKysrIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlz
dApAQCAtMTU0LDYgKzE1NCw5IEBAICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNl
cy9XZWJLaXQyL1JlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyTWVzc2FnZXNSCiAkKEJVSUxUX1BS
T0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVPYmplY3RSZWdpc3RyeU1l
c3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJLaXQyL1JlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNUU19E
SVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlc1Jl
cGxpZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAorJChCVUlMVF9QUk9E
VUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5TWVzc2FnZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktp
dDIvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXNSZXBsaWVzLmgKICQoQlVJTFRf
UFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVNhbXBsZUJ1ZmZlckRp
c3BsYXlMYXllck1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJ
UikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJN
YW5hZ2VyTWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dl
YktpdDIvUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlck1lc3NhZ2VzUmVwbGll
cy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3Vy
Y2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggMzQ5ZTU0ZGMzMGMuLjE1OGFjNWMw
MjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIv
U291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC0yNSw2ICsyNSw3IEBAIFZQQVRI
ID0gXAogICAgICQoV2ViS2l0MikvR1BVUHJvY2VzcyBcCiAgICAgJChXZWJLaXQyKS9HUFVQcm9j
ZXNzL21hYyBcCiAgICAgJChXZWJLaXQyKS9HUFVQcm9jZXNzL21lZGlhIFwKKyAgICAkKFdlYktp
dDIpL0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZCBcCiAgICAgJChXZWJLaXQyKS9HUFVQcm9j
ZXNzL3dlYnJ0YyBcCiAgICAgJChXZWJLaXQyKS9OZXR3b3JrUHJvY2VzcyBcCiAgICAgJChXZWJL
aXQyKS9OZXR3b3JrUHJvY2Vzcy9Db29raWVzIFwKQEAgLTUyLDYgKzUzLDcgQEAgVlBBVEggPSBc
CiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0dlb2xvY2F0aW9uIFwKICAgICAkKFdlYktpdDIp
L1dlYlByb2Nlc3MvR1BVIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvR1BVL21lZGlhIFwK
KyAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQgXAogICAgICQo
V2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUvd2VicnRjIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nl
c3MvSWNvbkRhdGFiYXNlIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvSW5zcGVjdG9yIFwK
QEAgLTE1Myw2ICsxNTUsNyBAQCBNRVNTQUdFX1JFQ0VJVkVSUyA9IFwKICAgICBSZW1vdGVNZWRp
YVJlY29yZGVyTWFuYWdlciBcCiAgICAgUmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIgXAogICAg
IFJlbW90ZU9iamVjdFJlZ2lzdHJ5IFwKKyAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkg
XAogICAgIFJlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllciBcCiAgICAgUmVtb3RlU2FtcGxl
QnVmZmVyRGlzcGxheUxheWVyTWFuYWdlciBcCiAgICAgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0
b3IgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MuY3BwCmluZGV4IGE2Y2VlNTRjOTdjLi5hNmE1NGZlMTE4ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LmNwcApAQCAtMTg2LDc5ICsxODYsOTIgQEAgTGliV2ViUlRDQ29kZWNzUHJveHkmIEdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M6OmxpYldlYlJUQ0NvZGVjc1Byb3h5KCkKIH0KICNlbmRpZgogCi12
b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29u
bmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQordm9pZCBHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQoreworICAgIEFTU0VSVCgh
bV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpOworICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5ID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGUoKnRoaXMsIHJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKK30KKwordm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjpyZWxlYXNlUmVuZGVyaW5nQmFja2VuZChSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
ciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQobV9yZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkpOworICAgIEFTU0VSVChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS0+cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSA9PSByZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllcik7CisgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgPSBudWxscHRyOwor
fQorCitib29sIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpc3BhdGNoTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBp
ZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlh
UGxheWVyTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgcmVt
b3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkoKS5kaWRSZWNlaXZlTWVzc2FnZUZyb21XZWJQcm9j
ZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0gZWxzZSBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0g
TWVzc2FnZXM6OlJlbW90ZU1lZGlhUGxheWVyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkg
ewogICAgICAgICByZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVQbGF5
ZXJNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0gZWxzZSBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1l
KCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyOjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCkpIHsKICAgICAgICAgcmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIoKS5kaWRSZWNl
aXZlTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICBpZiAo
ZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlVzZXJNZWRpYUNhcHR1
cmVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICB1c2VyTWVk
aWFDYXB0dXJlTWFuYWdlclByb3h5KCkuZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tR1BVUHJvY2Vzcyhj
b25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3Nh
Z2VzOjpSZW1vdGVNZWRpYVJlY29yZGVyTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7
CiAgICAgICAgIG1lZGlhUmVjb3JkZXJNYW5hZ2VyKCkuZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tV2Vi
UHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgp
ID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVJlY29yZGVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkp
IHsKICAgICAgICAgbWVkaWFSZWNvcmRlck1hbmFnZXIoKS5kaWRSZWNlaXZlUmVtb3RlTWVkaWFS
ZWNvcmRlck1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBFTkFCTEUo
VklERU9fVFJBQ0spCiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1l
c3NhZ2VzOjpSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlck1hbmFnZXI6Om1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICBhdWRpb1RyYWNrUmVuZGVyZXJNYW5hZ2VyKCku
ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYgKGRlY29k
ZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVBdWRpb01lZGlhU3Ry
ZWFtVHJhY2tSZW5kZXJlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIGF1ZGlv
VHJhY2tSZW5kZXJlck1hbmFnZXIoKS5kaWRSZWNlaXZlUmVuZGVyZXJNZXNzYWdlKGNvbm5lY3Rp
b24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJl
bW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSkgewogICAgICAgICBzYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyKCkuZGlkUmVjZWl2
ZU1lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0
dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYgKGRlY29kZXIubWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5
ZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICBzYW1wbGVCdWZmZXJEaXNwbGF5
TGF5ZXJNYW5hZ2VyKCkuZGlkUmVjZWl2ZUxheWVyTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVy
KTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYK
ICNlbmRpZgogI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoTElCV0VCUlRDKQogICAgIGlmIChk
ZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6TGliV2ViUlRDQ29kZWNz
UHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICBsaWJXZWJSVENDb2RlY3NQ
cm94eSgpLmRpZFJlY2VpdmVNZXNzYWdlRnJvbVdlYlByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rl
cik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlm
CisgICAgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck1hcCgpLmRpc3BhdGNoTWVzc2FnZShjb25uZWN0
aW9uLCBkZWNvZGVyKTsKIH0KIAotdm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRS
ZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29k
ZXImIGRlY29kZXIsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIp
Citib29sIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpc3BhdGNoU3luY01lc3NhZ2UoSVBD
OjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0ZDo6dW5p
cXVlX3B0cjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIpCiB7CiAgICAgaWYgKGRlY29kZXIu
bWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVBsYXllck1hbmFn
ZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIHJlbW90ZU1lZGlhUGxh
eWVyTWFuYWdlclByb3h5KCkuZGlkUmVjZWl2ZVN5bmNNZXNzYWdlRnJvbVdlYlByb2Nlc3MoY29u
bmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogICAgIGlm
IChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6VXNlck1lZGlhQ2Fw
dHVyZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIHVzZXJN
ZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHkoKS5kaWRSZWNlaXZlU3luY01lc3NhZ2VGcm9tR1BVUHJv
Y2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOwotICAgICAgICByZXR1cm47
CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNpZiBQTEFURk9STShDT0NPQSkgJiYgRU5B
QkxFKFZJREVPX1RSQUNLKQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9
PSBNZXNzYWdlczo6UmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlcjo6bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIHNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFn
ZXIoKS5kaWRSZWNlaXZlU3luY01lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNv
ZGVyLCByZXBseUVuY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICNlbmRpZgogI2VuZGlmCi0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hTeW5jTWVzc2FnZShjb25uZWN0
aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOwogfQogCiBjb25zdCBTdHJpbmcmIEdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M6Om1lZGlhQ2FjaGVEaXJlY3RvcnkoKSBjb25zdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCBi
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKaW5k
ZXggMmI5YmQxZjg4N2IuLjQwZmFlYmRmOGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKQEAgLTI4LDEzICsyOCwxNSBA
QAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKLSNp
bmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXNSZXBsaWVzLmgiCi0jaW5j
bHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CisjaW5jbHVkZSAiR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyTWFwLmgi
CisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgiCisjaW5jbHVkZSAiUmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1Byb2Nlc3NJZGVu
dGlmaWVyLmg+CiAjaW5jbHVkZSA8cGFsL1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2dn
ZXIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9VbmlxdWVS
ZWYuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApA
QCAtNDksMTggKzUxLDIwIEBAIGNsYXNzIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk7CiAK
IGNsYXNzIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MKICAgICA6IHB1YmxpYyBSZWZDb3VudGVk
PEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+CisgICAgLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4KICAgICAsIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IGNy
ZWF0ZShHUFVQcm9jZXNzJiwgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIsIElQQzo6Q29ubmVj
dGlvbjo6SWRlbnRpZmllciwgUEFMOjpTZXNzaW9uSUQpOwogICAgIHZpcnR1YWwgfkdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MoKTsKIAogICAgIElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbigp
IHsgcmV0dXJuIG1fY29ubmVjdGlvbi5nZXQoKTsgfQorICAgIElQQzo6TWVzc2FnZVJlY2VpdmVy
TWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAoKSB7IHJldHVybiBtX21lc3NhZ2VSZWNlaXZlck1hcDsg
fQogICAgIEdQVVByb2Nlc3MmIGdwdVByb2Nlc3MoKSB7IHJldHVybiBtX2dwdVByb2Nlc3MuZ2V0
KCk7IH0KKyAgICBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciB3ZWJQcm9jZXNzSWRlbnRpZmll
cigpIGNvbnN0IHsgcmV0dXJuIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXI7IH0KIAogICAgIHZvaWQg
Y2xlYW51cEZvclN1c3BlbnNpb24oRnVuY3Rpb248dm9pZCgpPiYmKTsKICAgICB2b2lkIGVuZFN1
c3BlbnNpb24oKTsKIAotICAgIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIHdlYlByb2Nlc3NJ
ZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV93ZWJQcm9jZXNzSWRlbnRpZmllcjsgfQogICAg
IFJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyJiByZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlcigp
OwogCiAgICAgTG9nZ2VyJiBsb2dnZXIoKTsKQEAgLTg1LDE3ICs4OSwyMyBAQCBwcml2YXRlOgog
ICAgIFJlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXImIHNhbXBsZUJ1ZmZlckRp
c3BsYXlMYXllck1hbmFnZXIoKTsKICNlbmRpZgogI2VuZGlmCi0KKyAgICB2b2lkIGNyZWF0ZVJl
bmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgIHZvaWQgcmVs
ZWFzZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgICAg
ICAKICAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudAogICAgIHZvaWQgZGlkQ2xvc2UoSVBD
OjpDb25uZWN0aW9uJikgZmluYWw7Ci0gICAgdm9pZCBkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2Uo
SVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFt
ZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUpIGZpbmFsOwogICAgIHZvaWQgZGlk
UmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgZmluYWw7CiAg
ICAgdm9pZCBkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNv
ZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKSBmaW5hbDsKKyAgICB2b2lkIGRp
ZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVy
ZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFt
ZSkgZmluYWw7CisKKyAgICBib29sIGRpc3BhdGNoTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJ
UEM6OkRlY29kZXImKTsKKyAgICBib29sIGRpc3BhdGNoU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKTsKIAog
ICAgIFJlZlB0cjxMb2dnZXI+IG1fbG9nZ2VyOwogCiAgICAgUmVmPElQQzo6Q29ubmVjdGlvbj4g
bV9jb25uZWN0aW9uOwogICAgIFJlZjxHUFVQcm9jZXNzPiBtX2dwdVByb2Nlc3M7CisgICAgSVBD
OjpNZXNzYWdlUmVjZWl2ZXJNYXAgbV9tZXNzYWdlUmVjZWl2ZXJNYXA7CiAgICAgY29uc3QgV2Vi
Q29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgbV93ZWJQcm9jZXNzSWRlbnRpZmllcjsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8UmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXI+IG1fcmVtb3RlTWVkaWFSZXNv
dXJjZU1hbmFnZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZU1lZGlhUGxheWVyTWFuYWdl
clByb3h5PiBtX3JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OwpAQCAtMTExLDYgKzEyMSw3
IEBAIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oQ09DT0EpICYmIFVTRShMSUJXRUJSVEMpCiAgICAg
c3RkOjp1bmlxdWVfcHRyPExpYldlYlJUQ0NvZGVjc1Byb3h5PiBtX2xpYldlYlJUQ0NvZGVjc1By
b3h5OwogI2VuZGlmCisgICAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eT4gbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KaW5kZXggM2Q0MGE1NzEyZTAuLjkz
MmMwMTIyZGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgpAQCAtMjIsNyArMjIsOSBA
QAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCi1tZXNzYWdlcyAtPiBHUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzIHsKK21lc3NhZ2VzIC0+IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgV2Fu
dHNEaXNwYXRjaE1lc3NhZ2UgeworICAgIHZvaWQgQ3JlYXRlUmVuZGVyaW5nQmFja2VuZChXZWJL
aXQ6OlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
KQorICAgIHZvaWQgUmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQoV2ViS2l0OjpSZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKIH0KIAogI2VuZGlmIC8v
IEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkuY3BwCmluZGV4IDhiMTM3ODkxNzkxLi5jZDYyNTI3OWZjZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCkBAIC0xICsxLDEwNiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCiAKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkuaCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUg
IlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgiCisKK25hbWVzcGFjZSBXZWJL
aXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0ZDo6dW5pcXVlX3B0cjxSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHk+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRl
KEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorewor
ICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Pihu
ZXcgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Ms
IHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKSk7Cit9CisKK1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eTo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KEdQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgIDogbV9ncHVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzKG1ha2VXZWFrUHRyKGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpKQorICAgICwg
bV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcihyZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikK
K3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cy0+bWVzc2FnZVJlY2VpdmVyTWFwKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgcmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKSwgKnRoaXMpOworfQorCitSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHk6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoKQoreworICAgIGlm
IChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmdldCgpKQorICAgICAgICBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5tZXNzYWdl
UmVjZWl2ZXJNYXAoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3JlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyLnRvVUludDY0KCkpOworfQorCitJUEM6OkNvbm5lY3Rpb24qIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdAorewor
ICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAgICByZXR1cm4gJmdwdUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MtPmNvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordWludDY0X3Qg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50
NjQoKTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZUltYWdl
QnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIElt
YWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCit7CisgICAgaWYgKG1f
aW1hZ2VCdWZmZXJNYXAuY29udGFpbnMoaW1hZ2VCdWZmZXJJZGVudGlmaWVyKSkgeworICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1
dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MuZ2V0KCk7CisgICAgaWYgKCFncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyOwor
CisgICAgc3dpdGNoIChyZW5kZXJpbmdNb2RlKSB7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpS
ZW1vdGVBY2NlbGVyYXRlZDoKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90ZToKKyAgICAg
ICAgLy8gRklYTUU6IGNyZWF0ZSB0aGUgcmVtb3RlIEltYWdlQnVmZmVyIHByb3h5LgorICAgIGRl
ZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIGlmICgh
aW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW1hZ2VCdWZmZXJNYXAuYWRk
KGltYWdlQnVmZmVySWRlbnRpZmllciwgV1RGTW92ZShpbWFnZUJ1ZmZlcikpOworfQorCit2b2lk
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVsZWFzZUltYWdlQnVmZmVyKEltYWdlQnVm
ZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCit7CisgICAgLy8gQ3JlYXRlSW1h
Z2VCdWZmZXIgbWVzc2FnZSBzaG91bGQgaGF2ZSBiZWVuIHJlY2VpdmVkIGJlZm9yZSB0aGlzIG9u
ZS4KKyAgICBpZiAoIW1faW1hZ2VCdWZmZXJNYXAuY29udGFpbnMoaW1hZ2VCdWZmZXJJZGVudGlm
aWVyKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBtX2ltYWdlQnVmZmVyTWFwLnJlbW92ZShpbWFnZUJ1ZmZlcklkZW50aWZpZXIp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJP
Q0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNr
ZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKaW5kZXgg
OGIxMzc4OTE3OTEuLmY5NTI3Yjg3NWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkuaApAQCAtMSArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCiAKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgor
I2luY2x1ZGUgIkltYWdlQnVmZmVySWRlbnRpZmllci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNl
aXZlci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3JTcGFjZS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvSW1hZ2VCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzczsK
KworY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5CisgICAgOiBwcml2YXRlIElQQzo6
TWVzc2FnZVNlbmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJs
aWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHk+IGNyZWF0ZShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgUmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIpOworICAgIHZpcnR1YWwgflJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSgpOwor
CisgICAgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyOyB9CisKK3By
aXZhdGU6CisgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KEdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MmLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisKKyAgICAvLyBJUEM6Ok1l
c3NhZ2VTZW5kZXIuCisgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlv
bigpIGNvbnN0IG92ZXJyaWRlOworICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlv
bklEKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAg
IHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikg
b3ZlcnJpZGU7CisKKyAgICB2b2lkIGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZs
b2F0U2l6ZSYgbG9naWNhbFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsK
KyAgICB2b2lkIHJlbGVhc2VJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworCisg
ICAgdXNpbmcgSW1hZ2VCdWZmZXJNYXAgPSBIYXNoTWFwPEltYWdlQnVmZmVySWRlbnRpZmllciwg
c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPj47CisgICAgSW1hZ2VCdWZmZXJN
YXAgbV9pbWFnZUJ1ZmZlck1hcDsKKyAgICBXZWFrUHRyPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M+IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzczsKKyAgICBSZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllciBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4KaW5kZXgg
OGIxMzc4OTE3OTEuLmU0ZGNmN2YzMmI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2Fn
ZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluCkBAIC0xICsxLDMwIEBACisjIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKKyNpZiBFTkFCTEUoR1BVX1BST0NF
U1MpCisKK21lc3NhZ2VzIC0+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSBOb3RSZWZDb3Vu
dGVkIHsKKyAgICB2b2lkIENyZWF0ZUltYWdlQnVmZmVyKFdlYkNvcmU6OkZsb2F0U2l6ZSBsb2dp
Y2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgV2ViS2l0OjpJbWFn
ZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorICAgIHZvaWQgUmVsZWFz
ZUltYWdlQnVmZmVyKFdlYktpdDo6SW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRl
bnRpZmllcikKK30KKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxh
eUxheWVyLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mvd2VicnRjL1JlbW90ZVNhbXBsZUJ1
ZmZlckRpc3BsYXlMYXllci5oCmluZGV4IDY4NWE2Njk3ODcxLi42ZTZhMjE3YTVhMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVTYW1wbGVCdWZmZXJE
aXNwbGF5TGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mvd2VicnRjL1JlbW90
ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllci5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAi
TWVzc2FnZVNlbmRlci5oIgogI2luY2x1ZGUgIlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllcklkZW50
aWZpZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1NhbXBsZUJ1ZmZlckRpc3BsYXlMYXllci5oPgor
I2luY2x1ZGUgPHd0Zi9NZWRpYVRpbWUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
SW1hZ2VUcmFuc2ZlclNlc3Npb25WVDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy93ZWJydGMvUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlci5jcHAgYi9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mvd2VicnRjL1JlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlM
YXllck1hbmFnZXIuY3BwCmluZGV4IDRiOWJlNDljYWM3Li5mYjBkMjY1MmU3ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVTYW1wbGVCdWZmZXJEaXNw
bGF5TGF5ZXJNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mvd2VicnRj
L1JlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXIuY3BwCkBAIC0zMiw2ICszMiw3
IEBACiAjaW5jbHVkZSAiUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyLmgiCiAKIG5hbWVz
cGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIFJlbW90ZVNhbXBsZUJ1
ZmZlckRpc3BsYXlMYXllck1hbmFnZXI6OlJlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1h
bmFnZXIoUmVmPElQQzo6Q29ubmVjdGlvbj4mJiBjb25uZWN0aW9uKQogICAgIDogbV9jb25uZWN0
aW9uKFdURk1vdmUoY29ubmVjdGlvbikpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3Mvd2VicnRjL1JlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXIuaCBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxh
eWVyTWFuYWdlci5oCmluZGV4IDlmOWIzMGM3NjE2Li5lMzhjNWQ2YzA1ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5
TGF5ZXJNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1v
dGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNp
bmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKICNpbmNsdWRlICJSZW1vdGVTYW1wbGVCdWZmZXJE
aXNwbGF5TGF5ZXJNYW5hZ2VyTWVzc2FnZXNSZXBsaWVzLmgiCiAjaW5jbHVkZSAiU2FtcGxlQnVm
ZmVyRGlzcGxheUxheWVySWRlbnRpZmllci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBJUEMgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weSBiL1NvdXJjZS9XZWJL
aXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKaW5kZXggN2M1YWMwYWNmNzQuLjE4M2I1ZDU2
MDFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5
CisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKQEAgLTI3LDYg
KzI3LDcgQEAgaW1wb3J0IHN5cwogZnJvbSB3ZWJraXQgaW1wb3J0IHBhcnNlcgogCiBXQU5UU19D
T05ORUNUSU9OX0FUVFJJQlVURSA9ICdXYW50c0Nvbm5lY3Rpb24nCitXQU5UU19ESVNQQVRDSF9N
RVNTQUdFX0FUVFJJQlVURSA9ICdXYW50c0Rpc3BhdGNoTWVzc2FnZScKIExFR0FDWV9SRUNFSVZF
Ul9BVFRSSUJVVEUgPSAnTGVnYWN5UmVjZWl2ZXInCiBOT1RfUkVGQ09VTlRFRF9SRUNFSVZFUl9B
VFRSSUJVVEUgPSAnTm90UmVmQ291bnRlZCcKIFNZTkNIUk9OT1VTX0FUVFJJQlVURSA9ICdTeW5j
aHJvbm91cycKQEAgLTIwNCw2ICsyMDUsOCBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9y
d2FyZF9kZWNsYXJlZCgpOgogICAgIHJldHVybiBmcm96ZW5zZXQoWwogICAgICAgICAnTWFjaFNl
bmRSaWdodCcsCiAgICAgICAgICdTdHJpbmcnLAorICAgICAgICAnV2ViQ29yZTo6QWxwaGFQcmVt
dWx0aXBsaWNhdGlvbicsCisgICAgICAgICdXZWJDb3JlOjpDb2xvclNwYWNlJywKICAgICAgICAg
J1dlYkNvcmU6OkRvY3VtZW50SWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpGZXRjaElk
ZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyJywKQEAgLTIxMiw2
ICsyMTUsNyBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgpOgog
ICAgICAgICAnV2ViQ29yZTo6UG9pbnRlcklEJywKICAgICAgICAgJ1dlYkNvcmU6OlByb2Nlc3NJ
ZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VJZGVudGlm
aWVyJywKKyAgICAgICAgJ1dlYkNvcmU6OlJlbmRlcmluZ01vZGUnLAogICAgICAgICAnV2ViQ29y
ZTo6U2VydmljZVdvcmtlcklkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdv
cmtlckpvYklkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtlck9yQ2xp
ZW50RGF0YScsCkBAIC0yMjEsMTIgKzIyNSwxNCBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVf
Zm9yd2FyZF9kZWNsYXJlZCgpOgogICAgICAgICAnV2ViS2l0OjpBY3Rpdml0eVN0YXRlQ2hhbmdl
SUQnLAogICAgICAgICAnV2ViS2l0OjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlcklkZW50
aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpDb250ZW50V29ybGRJZGVudGlmaWVyJywKKyAgICAg
ICAgJ1dlYktpdDo6SW1hZ2VCdWZmZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6TGF5
ZXJIb3N0aW5nQ29udGV4dElEJywKICAgICAgICAgJ1dlYktpdDo6TWVkaWFQbGF5ZXJQcml2YXRl
UmVtb3RlSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6Ok1lZGlhUmVjb3JkZXJJZGVudGlm
aWVyJywKICAgICAgICAgJ1dlYktpdDo6UmVtb3RlTWVkaWFSZXNvdXJjZUlkZW50aWZpZXInLAog
ICAgICAgICAnV2ViS2l0OjpSVENEZWNvZGVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6
OlJUQ0VuY29kZXJJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYktpdDo6UmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJJ
ZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVyJywKICAg
ICAgICAgJ1dlYktpdDo6U3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllcicsCkBAIC03NjksMTMgKzc3
NSwxNiBAQCBkZWYgZ2VuZXJhdGVfbWVzc2FnZV9oYW5kbGVyKHJlY2VpdmVyKToKICAgICAgICAg
ZWxzZToKICAgICAgICAgICAgIGFzeW5jX21lc3NhZ2VzLmFwcGVuZChtZXNzYWdlKQogCi0gICAg
aWYgYXN5bmNfbWVzc2FnZXM6CisgICAgaWYgYXN5bmNfbWVzc2FnZXMgb3IgcmVjZWl2ZXIuaGFz
X2F0dHJpYnV0ZShXQU5UU19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVURSk6CiAgICAgICAgIHJl
c3VsdC5hcHBlbmQoJ3ZvaWQgJXM6OmRpZFJlY2VpdmUlc01lc3NhZ2UoSVBDOjpDb25uZWN0aW9u
JiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIpXG4nICUgKHJlY2VpdmVyLm5hbWUs
IHJlY2VpdmVyLm5hbWUgaWYgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShMRUdBQ1lfUkVDRUlWRVJf
QVRUUklCVVRFKSBlbHNlICcnKSkKICAgICAgICAgcmVzdWx0LmFwcGVuZCgne1xuJykKICAgICAg
ICAgaWYgbm90IHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoTk9UX1JFRkNPVU5URURfUkVDRUlWRVJf
QVRUUklCVVRFKToKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBhdXRvIHByb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTtcbicpCiAKICAgICAgICAgcmVzdWx0ICs9IFthc3luY19t
ZXNzYWdlX3N0YXRlbWVudChyZWNlaXZlciwgbWVzc2FnZSkgZm9yIG1lc3NhZ2UgaW4gYXN5bmNf
bWVzc2FnZXNdCisgICAgICAgIGlmIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFU
Q0hfTUVTU0FHRV9BVFRSSUJVVEUpOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGlm
IChkaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlcikpXG4nKQorICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCgnICAgICAgICByZXR1cm47XG4nKQogICAgICAgICBpZiAocmVjZWl2ZXIu
c3VwZXJjbGFzcyk6CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgJXM6OmRpZFJlY2Vp
dmVNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpO1xuJyAlIChyZWNlaXZlci5zdXBlcmNsYXNz
KSkKICAgICAgICAgZWxzZToKQEAgLTc4NCwxMyArNzkzLDE2IEBAIGRlZiBnZW5lcmF0ZV9tZXNz
YWdlX2hhbmRsZXIocmVjZWl2ZXIpOgogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpO1xuJykKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnfVxuJykKIAot
ICAgIGlmIHN5bmNfbWVzc2FnZXM6CisgICAgaWYgc3luY19tZXNzYWdlcyBvciByZWNlaXZlci5o
YXNfYXR0cmlidXRlKFdBTlRTX0RJU1BBVENIX01FU1NBR0VfQVRUUklCVVRFKToKICAgICAgICAg
cmVzdWx0LmFwcGVuZCgnXG4nKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd2b2lkICVzOjpkaWRS
ZWNlaXZlU3luYyVzTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVj
b2RlciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2Rl
cilcbicgJSAocmVjZWl2ZXIubmFtZSwgcmVjZWl2ZXIubmFtZSBpZiByZWNlaXZlci5oYXNfYXR0
cmlidXRlKExFR0FDWV9SRUNFSVZFUl9BVFRSSUJVVEUpIGVsc2UgJycpKQogICAgICAgICByZXN1
bHQuYXBwZW5kKCd7XG4nKQogICAgICAgICBpZiBub3QgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShO
T1RfUkVGQ09VTlRFRF9SRUNFSVZFUl9BVFRSSUJVVEUpOgogICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZCgnICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpO1xuJykKICAgICAg
ICAgcmVzdWx0ICs9IFtzeW5jX21lc3NhZ2Vfc3RhdGVtZW50KHJlY2VpdmVyLCBtZXNzYWdlKSBm
b3IgbWVzc2FnZSBpbiBzeW5jX21lc3NhZ2VzXQorICAgICAgICBpZiByZWNlaXZlci5oYXNfYXR0
cmlidXRlKFdBTlRTX0RJU1BBVENIX01FU1NBR0VfQVRUUklCVVRFKToKKyAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoJyAgICBpZiAoZGlzcGF0Y2hTeW5jTWVzc2FnZShjb25uZWN0aW9uLCBkZWNv
ZGVyLCByZXBseUVuY29kZXIpKVxuJykKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICAg
ICAgcmV0dXJuO1xuJykKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIFVOVVNFRF9QQVJBTShj
b25uZWN0aW9uKTtcbicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBVTlVTRURfUEFSQU0o
ZGVjb2Rlcik7XG4nKQogICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgVU5VU0VEX1BBUkFNKHJl
cGx5RW5jb2Rlcik7XG4nKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRD
b2RlcnMuaAppbmRleCA3YmY3MWMxN2FiZC4uZDk5M2MyNzNhMzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9BdXRvcGxheUV2
ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvclNwYWNlLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9EaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oPgpAQCAtMzYsNiArMzcsNyBAQAogI2luY2x1ZGUg
PFdlYkNvcmUvTmV0d29ya0xvYWRNZXRyaWNzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RpZmlj
YXRpb25EaXJlY3Rpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlYWx0aW1lTWVkaWFTb3VyY2Uu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlcmluZ01vZGUuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1Njcm9sbFNuYXBPZmZzZXRzSW5mby5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2VydmljZVdvcmtl
clR5cGVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TdG9yZWRDcmVkZW50aWFsc1BvbGljeS5oPgpA
QCAtODIzLDYgKzgyNSwxNCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNv
cmU6OlNlcmlhbGl6ZWRBdHRhY2htZW50RGF0YT4gewogCiBuYW1lc3BhY2UgV1RGIHsKIAordGVt
cGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9u
PiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICBXZWJDb3JlOjpBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uLAorICAgIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQsCisgICAgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkCisgICAgPjsKK307CisKIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2Vi
Q29yZTo6Q29sb3JTcGFjZT4gewogICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CiAgICAg
V2ViQ29yZTo6Q29sb3JTcGFjZSwKQEAgLTgzMiw2ICs4NDIsMTggQEAgdGVtcGxhdGU8PiBzdHJ1
Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpDb2xvclNwYWNlPiB7CiAgICAgPjsKIH07CiAKK3RlbXBs
YXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6UmVuZGVyaW5nTW9kZT4geworICAgIHVz
aW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwKKyAg
ICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCwKKyAgICBXZWJDb3JlOjpSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLAorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OkRp
c3BsYXlMaXN0QWNjZWxlcmF0ZWQsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6RGlzcGxh
eUxpc3QsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQsCisg
ICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6UmVtb3RlCisgICAgPjsKK307CisKIHRlbXBsYXRl
PD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6QXV0b3BsYXlFdmVudD4gewogICAgIHVzaW5n
IHZhbHVlcyA9IEVudW1WYWx1ZXM8CiAgICAgICAgIFdlYkNvcmU6OkF1dG9wbGF5RXZlbnQsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYktpdC9Tb3Vy
Y2VzLnR4dAppbmRleCA1MzEwOTIwM2NhMi4uMzkxNmU3OGM1M2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dApAQCAt
MzcsNiArMzcsNyBAQCBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2UuY3BwCiBH
UFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2VMb2FkZXIuY3BwCiBHUFVQcm9jZXNz
L21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyLmNwcAogR1BVUHJvY2Vzcy9tZWRpYS9S
ZW1vdGVWaWRlb1RyYWNrUHJveHkuY3BwCitHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAogCiBOZXR3b3JrUHJvY2Vzcy9BZENsaWNrQXR0
cmlidXRpb25NYW5hZ2VyLmNwcAogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0FjdGl2aXR5VHJhY2tl
ci5jcHAKQEAgLTUzNyw2ICs1MzgsNyBAQCBXZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRp
YVBsYXllck1hbmFnZXIuY3BwCiBXZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXll
ck1JTUVUeXBlQ2FjaGUuY3BwIEBuby11bmlmeQogV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3Rl
TWVkaWFSZXNvdXJjZVByb3h5LmNwcAogV2ViUHJvY2Vzcy9HUFUvbWVkaWEvVmlkZW9UcmFja1By
aXZhdGVSZW1vdGUuY3BwCitXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmQuY3BwCiBXZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29kZWNz
LmNwcAogV2ViUHJvY2Vzcy9HUFUvd2VicnRjL01lZGlhUmVjb3JkZXJQcml2YXRlLmNwcAogV2Vi
UHJvY2Vzcy9HUFUvd2VicnRjL01lZGlhUmVjb3JkZXJQcm92aWRlci5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0Nv
Y29hLnR4dAppbmRleCBlYWEwZDg0ZmE1Yy4uZmEzNDVkMTdlZTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2Nv
YS50eHQKQEAgLTYzOCw2ICs2MzgsNyBAQCBXZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJU
cmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLm1tCiAvLyBEZXJpdmVkIFNvdXJjZXMKIEVk
aXRhYmxlSW1hZ2VDb250cm9sbGVyTWVzc2FnZVJlY2VpdmVyLmNwcAogR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAKK0dQVVByb2Nlc3NDb25uZWN0aW9uTWVzc2Fn
ZVJlY2VpdmVyLmNwcAogR1BVUHJvY2Vzc1Byb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAogR1BVUHJv
Y2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAKIExpYldlYlJUQ0NvZGVjc1Byb3h5TWVzc2FnZVJlY2Vp
dmVyLmNwcApAQCAtNjQ2LDYgKzY0Nyw3IEBAIFJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1Jl
bmRlcmVyTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAKIFJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1U
cmFja1JlbmRlcmVyTWVzc2FnZVJlY2VpdmVyLmNwcAogUmVtb3RlTWVkaWFSZWNvcmRlck1lc3Nh
Z2VSZWNlaXZlci5jcHAKIFJlbW90ZU1lZGlhUmVjb3JkZXJNYW5hZ2VyTWVzc2FnZVJlY2VpdmVy
LmNwcAorUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAogUmVt
b3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAKIFJl
bW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1lc3NhZ2VSZWNlaXZlci5jcHAKIFNhbXBsZUJ1
ZmZlckRpc3BsYXlMYXllck1lc3NhZ2VSZWNlaXZlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dl
YktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGJlNjQyMjA0Nzc1Li40ZWFlMTk1
ODRkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC00MDM4LDYgKzQwMzgsMTMgQEAKIAkJNzFBNjc2QTQyMkM2MjMxODAwN0Q2Mjk1IC8q
IFdLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBXS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIuaDsgcGF0aCA9IGlvcy9X
S1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzFBNjc2QTUyMkM2MjMxODAwN0Q2Mjk1IC8qIFdLVG91Y2hBY3Rpb25HZXN0dXJlUmVj
b2duaXplci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLVG91
Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5tbTsgcGF0aCA9IGlvcy9XS1RvdWNoQWN0aW9uR2Vz
dHVyZVJlY29nbml6ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRkI4MTBB
MjI2MDYyN0EwMDMyMzY3NyAvKiBXZWJzaXRlU2ltdWxhdGVkTW91c2VFdmVudHNEaXNwYXRjaFBv
bGljeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJzaXRlU2ltdWxhdGVk
TW91c2VFdmVudHNEaXNwYXRjaFBvbGljeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MjU2NDU5RTIzRThGRjA3MDBBMDYzMkQgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyNTY0NTlG
MjNFOEZGMDcwMEEwNjMyRCAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyNTY0NUEwMjNFOEZGMDcwMEEwNjMyRCAv
KiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MjU2NDVBMTIzRThGRjE1MDBBMDYzMkQgLyogUmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzI1NjQ1QTIyM0U4RkYxNTAwQTA2MzJEIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjU2NDVBMzIzRThGRjE1MDBBMDYzMkQg
LyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzI1NjQ1QTQyM0U5MDdEMTAwQTA2MzJEIC8qIEltYWdlQnVmZmVySWRlbnRp
Zmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlcklkZW50
aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI4RTg2RUYxNzk1MTg4QzAw
ODc4NzlFIC8qIFdlYkNvbG9yUGlja2VyTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYkNvbG9yUGlja2VyTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcyOEU4NkYwMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvbG9yUGlja2VyTWFjLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NUE4RDJDNDE4N0NDRjlGMDBDMzlDOUUgLyog
V0tXZWJzaXRlRGF0YVN0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdL
V2Vic2l0ZURhdGFTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjQ4Miw2
ICs2NDg5LDcgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMDc5
MjMxMkYyMzlCM0IwQzAwOTU5OEUyIC8qIG1lZGlhICovLAorCQkJCTcyNTY0NTlDMjNFOEZFNUMw
MEEwNjMyRCAvKiBSZW5kZXJpbmdCYWNrZW5kICovLAogCQkJCTQxNzIxOTg4MjNCNjEyNjEwMEFF
NTY4NiAvKiB3ZWJydGMgKi8sCiAJCQkJMkQ3RTQzQzAyMzc1MkNEOTAwRUE1Q0EwIC8qIEdQVVBy
b2Nlc3NDb25uZWN0aW9uLmNwcCAqLywKIAkJCQkyRDdFNDNDMzIzNzUyQ0Q5MDBFQTVDQTAgLyog
R1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCAqLywKQEAgLTY0OTgsNiArNjUwNiw3IEBACiAJCQkJMkQ5
RkIyMDQyMzc1MjA5RDAwNDlGOTM2IC8qIGlvcyAqLywKIAkJCQkyRDlGQjIwNjIzNzUyMDlEMDA0
OUY5MzYgLyogbWFjICovLAogCQkJCTA3Qzc1QzE3MjM5OUEzREIwMDg4RTY1QiAvKiBtZWRpYSAq
LywKKwkJCQk3MjU2NDU5RDIzRThGRTg3MDBBMDYzMkQgLyogUmVuZGVyaW5nQmFja2VuZCAqLywK
IAkJCQk0MTcyMTk4RTIzQjYzM0NBMDBBRTU2ODYgLyogd2VicnRjICovLAogCQkJCTJEOUZCMjBD
MjM3NTIwOUQwMDQ5RjkzNiAvKiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCAqLywKIAkJ
CQkyRDlGQjIwMDIzNzUyMDlEMDA0OUY5MzYgLyogR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5o
ICovLApAQCAtNzg5OSw2ICs3OTA4LDI3IEBACiAJCQluYW1lID0gbWFjOwogCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJNzI1NjQ1OUMyM0U4RkU1QzAwQTA2MzJEIC8qIFJlbmRl
cmluZ0JhY2tlbmQgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAor
CQkJCTcyNTY0NUE0MjNFOTA3RDEwMEEwNjMyRCAvKiBJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCAq
LywKKwkJCQk3MjU2NDVBMzIzRThGRjE1MDBBMDYzMkQgLyogUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZC5jcHAgKi8sCisJCQkJNzI1NjQ1QTIyM0U4RkYxNTAwQTA2MzJEIC8qIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQuaCAqLywKKwkJCQk3MjU2NDVBMTIzRThGRjE1MDBBMDYzMkQgLyogUmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gUmVuZGVyaW5nQmFja2Vu
ZDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTcyNTY0NTlEMjNFOEZFODcw
MEEwNjMyRCAvKiBSZW5kZXJpbmdCYWNrZW5kICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJ
CQljaGlsZHJlbiA9ICgKKwkJCQk3MjU2NDU5RTIzRThGRjA3MDBBMDYzMkQgLyogUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LmNwcCAqLywKKwkJCQk3MjU2NDU5RjIzRThGRjA3MDBBMDYzMkQg
LyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmggKi8sCisJCQkJNzI1NjQ1QTAyM0U4RkYw
NzAwQTA2MzJEIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbiAqLywK
KwkJCSk7CisJCQlwYXRoID0gUmVuZGVyaW5nQmFja2VuZDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CisJCX07CiAJCTdBODQzQTFEMjFFNDFGRDkwMERFRjY2MyAvKiBDbGFzc2lmaWVyICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHAKaW5kZXgg
OGRmZjUwZjMwODguLjBmOWM3YWNlZjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcApAQCAtNjIsMTAgKzYyLDYgQEAg
dm9pZCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikKIHsK
IH0KIAotdm9pZCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlLCBJUEM6OlN0cmluZ1JlZmVy
ZW5jZSkKLXsKLX0KLQogI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBFTkFCTEUoVklERU9fVFJBQ0sp
ICYmIEVOQUJMRShNRURJQV9TVFJFQU0pCiBTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2Vy
JiBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6c2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlcigp
CiB7CkBAIC03NSwzNCArNzEsNDQgQEAgU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlciYg
R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OnNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck0KIH0KICNlbmRp
ZgogCi12b2lkIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcikKK2Jvb2wgR1BVUHJv
Y2Vzc0Nvbm5lY3Rpb246OmRpc3BhdGNoTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rp
b24sIElQQzo6RGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVj
ZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6Ok1lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZTo6bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnN1cHBs
ZW1lbnQ8UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyPigpLT5kaWRSZWNlaXZlUGxheWVyTWVzc2Fn
ZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9Ci0KICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogICAgIGlmIChkZWNvZGVy
Lm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6VXNlck1lZGlhQ2FwdHVyZU1hbmFn
ZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICBpZiAoYXV0byogY2FwdHVyZU1h
bmFnZXIgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zdXBwbGVtZW50PFVzZXJNZWRpYUNhcHR1
cmVNYW5hZ2VyPigpKQogICAgICAgICAgICAgY2FwdHVyZU1hbmFnZXItPmRpZFJlY2VpdmVNZXNz
YWdlRnJvbUdQVVByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBFTkFC
TEUoVklERU9fVFJBQ0spCiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09
IE1lc3NhZ2VzOjpTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSkgewogICAgICAgICBzYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyKCkuZGlkUmVjZWl2
ZUxheWVyTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpICYmIEVO
QUJMRShWSURFT19UUkFDSykKICNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQogI2lmIFVT
RShMSUJXRUJSVEMpICYmIFBMQVRGT1JNKENPQ09BKQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6TGliV2ViUlRDQ29kZWNzOjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCkpIHsKICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubGliV2ViUlRDQ29k
ZWNzKCkuZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCisgICAgcmV0dXJuIG1l
c3NhZ2VSZWNlaXZlck1hcCgpLmRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsK
IH0KIAorYm9vbCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlx
dWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikKK3sKKyAgICByZXR1cm4gbWVzc2Fn
ZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hTeW5jTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCBy
ZXBseUVuY29kZXIpOworfQorCit2b2lkIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZl
SW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UsIElQ
Qzo6U3RyaW5nUmVmZXJlbmNlKQoreworfQorCisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAj
ZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oCmluZGV4IDQ2MDBlNTNiYjI4Li43YjZm
ODgyMjJjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9j
ZXNzQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJv
Y2Vzc0Nvbm5lY3Rpb24uaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShHUFVfUFJPQ0VT
UykKIAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXJN
YXAuaCIKICNpbmNsdWRlICJTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyLmgiCiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
QEAgLTQ3LDYgKzQ4LDcgQEAgcHVibGljOgogICAgIH5HUFVQcm9jZXNzQ29ubmVjdGlvbigpOwog
ICAgIAogICAgIElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbigpIHsgcmV0dXJuIG1fY29ubmVj
dGlvbi5nZXQoKTsgfQorICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2
ZXJNYXAoKSB7IHJldHVybiBtX21lc3NhZ2VSZWNlaXZlck1hcDsgfQogCiAjaWYgSEFWRShBVURJ
VF9UT0tFTikKICAgICB2b2lkIHNldEF1ZGl0VG9rZW4oT3B0aW9uYWw8YXVkaXRfdG9rZW5fdD4g
YXVkaXRUb2tlbikgeyBtX2F1ZGl0VG9rZW4gPSBhdWRpdFRva2VuOyB9CkBAIC02MiwxMCArNjQs
MTUgQEAgcHJpdmF0ZToKICAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudAogICAgIHZvaWQg
ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRSZWNlaXZl
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBmaW5hbDsKKyAgICB2b2lk
IGRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBz
dGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpIGZpbmFsOwogICAgIHZvaWQgZGlkUmVjZWl2
ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1l
c3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1lKSBvdmVy
cmlkZTsKKyAgICAKKyAgICBib29sIGRpc3BhdGNoTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJ
UEM6OkRlY29kZXImKTsKKyAgICBib29sIGRpc3BhdGNoU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKTsKIAog
ICAgIC8vIFRoZSBjb25uZWN0aW9uIGZyb20gdGhlIHdlYiBwcm9jZXNzIHRvIHRoZSBHUFUgcHJv
Y2Vzcy4KICAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247CisgICAgSVBDOjpN
ZXNzYWdlUmVjZWl2ZXJNYXAgbV9tZXNzYWdlUmVjZWl2ZXJNYXA7CiAKICNpZiBIQVZFKEFVRElU
X1RPS0VOKQogICAgIE9wdGlvbmFsPGF1ZGl0X3Rva2VuX3Q+IG1fYXVkaXRUb2tlbjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24u
bWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25u
ZWN0aW9uLm1lc3NhZ2VzLmluCmluZGV4IGQzNmY4YTA5NWY2Li41N2ZlY2RlOWRmMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5t
ZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3ND
b25uZWN0aW9uLm1lc3NhZ2VzLmluCkBAIC0yMiw3ICsyMiw3IEBACiAKICNpZiBFTkFCTEUoR1BV
X1BST0NFU1MpCiAKLW1lc3NhZ2VzIC0+IEdQVVByb2Nlc3NDb25uZWN0aW9uIHsKK21lc3NhZ2Vz
IC0+IEdQVVByb2Nlc3NDb25uZWN0aW9uIFdhbnRzRGlzcGF0Y2hNZXNzYWdlIHsKIAogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQv
SW1hZ2VCdWZmZXJJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgKaW5kZXggOGIxMzc4OTE3OTEu
LjlhMWJjOWFlODdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVySWRlbnRpZmllci5o
CkBAIC0xICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KIAorI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
R1BVX1BST0NFU1MpCisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworZW51bSBJbWFnZUJ1ZmZlcklkZW50aWZpZXJUeXBlIHsgfTsKK3Vz
aW5nIEltYWdlQnVmZmVySWRlbnRpZmllciA9IE9iamVjdElkZW50aWZpZXI8SW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyVHlwZT47CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5B
QkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmQuY3BwCmluZGV4IDhiMTM3ODkxNzkxLi44MDM1N2IwYTRiMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtMSArMSw4MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CiAKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
LmgiCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFj
a2VuZD4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gc3Rk
Ojp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ+KG5ldyBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kKCkpOworfQorCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kKCkKK3sKKyAgICAvLyBDcmVhdGUgdGhlIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS4KKyAgICBzZW5kKE1lc3NhZ2VzOjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDcmVhdGVS
ZW5kZXJpbmdCYWNrZW5kKG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpLCAwKTsKK30KKwor
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6flJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKQoreworICAg
IC8vIFJlbGVhc2UgdGhlIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS4KKyAgICBzZW5kKE1l
c3NhZ2VzOjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpSZWxlYXNlUmVuZGVyaW5nQmFja2Vu
ZChtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKSwgMCk7Cit9CisKK0lQQzo6Q29ubmVjdGlv
biogUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25z
dAoreworICAgIHJldHVybiAmV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vz
c0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCk7Cit9CisKK3VpbnQ2NF90IFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpOworfQorCitzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdl
QnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2Rl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9z
dFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IGltYWdlQnVmZmVyOworCisgICAgc3dpdGNoIChyZW5kZXJpbmdNb2RlKSB7CisgICAgY2FzZSBS
ZW5kZXJpbmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRlZDoKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6
OlJlbW90ZToKKyAgICAgICAgLy8gRklYTUU6IGNyZWF0ZSB0aGUgcmVtb3RlIEltYWdlQnVmZmVy
LgorICAgIGRlZmF1bHQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gUmVuZGVyaW5nQmFja2VuZDo6
Y3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBj
b2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICB9CisKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9D
RVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdC
YWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKaW5kZXggOGIx
Mzc4OTE3OTEuLjg2YmU5ZGNiZDYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kLmgKQEAgLTEgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLwogCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykK
KworI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIu
aCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvUmVuZGVyaW5nQmFja2VuZC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZAorICAgIDogcHVibGljIFdlYkNvcmU6OlJlbmRlcmluZ0Jh
Y2tlbmQKKyAgICAsIHByaXZhdGUgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgLCBwcml2YXRlIElQ
Qzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PFJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZSgpOworCisgICAgflJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQoKTsKKworICAgIC8vIElQQzo6TWVzc2FnZVNlbmRlci4KKyAgICBJUEM6OkNvbm5lY3Rpb24q
IG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdWludDY0X3Qg
bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIFJl
bmRlcmluZ0JhY2tlbmQKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+
IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIFdlYkNvcmU6OlJl
bmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwg
Y29uc3QgV2ViQ29yZTo6SG9zdFdpbmRvdyopIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQoKTsKKyAgICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBt
X3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHsgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI6
OmdlbmVyYXRlKCkgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
RU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmggYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIuaAppbmRleCA4YjEzNzg5MTc5MS4uZDIzNTQ3MGNjZmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVu
ZGVyaW5nQmFja2VuZC9SZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oCkBAIC0xICsxLDM5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KIAorI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisK
KyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworZW51bSBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllclR5cGUgeyB9OwordXNpbmcgUmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPFJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyVHlwZT47CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5B
QkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAppbmRleCA4ZTRjOTM3NWQ3Yi4u
N2Q3Yjg4NmQ2ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCkBAIC05MCw2ICs5MCwxMCBAQAog
I2luY2x1ZGUgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCIKICNlbmRpZgogCisjaWYgRU5BQkxF
KEdQVV9QUk9DRVNTKQorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCIKKyNlbmRp
ZgorCiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKICNpbmNsdWRlICJSZW1vdGVTY3JvbGxp
bmdDb29yZGluYXRvci5oIgogI2VuZGlmCkBAIC04OTEsNiArODk1LDE1IEBAIFJlZlB0cjxEaXNw
bGF5UmVmcmVzaE1vbml0b3I+IFdlYkNocm9tZUNsaWVudDo6Y3JlYXRlRGlzcGxheVJlZnJlc2hN
b25pdG9yKFBsYXRmCiAKICNlbmRpZgogCitzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2Vu
ZD4gV2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKCkgY29uc3QKK3sKKyNp
ZiBFTkFCTEUoR1BVX1BST0NFU1MpCisgICAgcmV0dXJuIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OmNyZWF0ZSgpOworI2Vsc2UKKyAgICByZXR1cm4gUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCk7
CisjZW5kaWYKK30KKwogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmF0dGFjaFJvb3RHcmFwaGljc0xh
eWVyKEZyYW1lJiwgR3JhcGhpY3NMYXllciogbGF5ZXIpCiB7CiAgICAgaWYgKGxheWVyKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5oCmluZGV4IGE4YTRjY2FjNTdkLi41Njc4N2UwMTcwMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQuaApAQCAtMjMzLDYgKzIzMyw4IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFdlYkNvcmU6
OkRpc3BsYXlSZWZyZXNoTW9uaXRvcj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFdlYkNv
cmU6OlBsYXRmb3JtRGlzcGxheUlEKSBjb25zdCBmaW5hbDsKICNlbmRpZgogCisgICAgc3RkOjp1
bmlxdWVfcHRyPFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZVJlbmRlcmluZ0JhY2tl
bmQoKSBjb25zdCBmaW5hbDsKKwogICAgIENvbXBvc2l0aW5nVHJpZ2dlckZsYWdzIGFsbG93ZWRD
b21wb3NpdGluZ1RyaWdnZXJzKCkgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxDb21wb3NpdGluZ1RyaWdnZXJGbGFncz4oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391802</attachid>
            <date>2020-02-26 16:19:17 -0800</date>
            <delta_ts>2020-02-26 16:38:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207198-20200226161915.patch</filename>
            <type>text/plain</type>
            <size>72250</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1NzM2OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDIwLTAyLTI2ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50
IHRoZSByZW1vdGUgUmVuZGVyaW5nQmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3MTk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlciBjb25zdCk6
CisgICAgICAgIE1ha2UgSFRNTENhbnZhc0VsZW1lbnQgYmUgYWJsZSB0byBjcmVhdGUgYSByZW1v
dGUgSW1hZ2VCdWZmZXIuCisKIDIwMjAtMDItMjUgIERvbiBPbG1zdGVhZCAgPGRvbi5vbG1zdGVh
ZEBzb255LmNvbT4KIAogICAgICAgICBbV2luQ2Fpcm9dIEZpeCBidWlsZCBhZnRlciByZXZpc2lv
bnMgMjU3MzU3IGFuZCAyNTczNTQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZh
c0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZh
c0VsZW1lbnQuY3BwCShyZXZpc2lvbiAyNTczNjkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxDYW52YXNFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODk1LDggKzg5NSwxMyBAQCB2
b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlCiAgICAgLy8gRklYTUU6IEFk
ZCBhIG5ldyBzZXR0aW5nIGZvciBEaXNwbGF5TGlzdCBkcmF3aW5nIG9uIGNhbnZhcy4KICAgICBi
b29sIHVzZXNEaXNwbGF5TGlzdERyYXdpbmcgPSBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcudmFs
dWVPcihkb2N1bWVudCgpLnNldHRpbmdzKCkuZGlzcGxheUxpc3REcmF3aW5nRW5hYmxlZCgpKTsK
IAorICAgIC8vIEZJWE1FOiBBZGQgYSBuZXcgc2V0dGluZyBmb3IgcmVtb3RlIGRyYXdpbmcgb24g
Y2FudmFzLgorICAgIGJvb2wgdXNlc1JlbW90ZURyYXdpbmcgPSBmYWxzZTsKKwogICAgIFJlbmRl
cmluZ01vZGUgcmVuZGVyaW5nTW9kZTsKLSAgICBpZiAodXNlc0Rpc3BsYXlMaXN0RHJhd2luZykK
KyAgICBpZiAodXNlc1JlbW90ZURyYXdpbmcpCisgICAgICAgIHJlbmRlcmluZ01vZGUgPSBzaG91
bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBSZW5kZXJpbmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRlZCA6
IFJlbmRlcmluZ01vZGU6OlJlbW90ZVVuYWNjZWxlcmF0ZWQ7CisgICAgZWxzZSBpZiAodXNlc0Rp
c3BsYXlMaXN0RHJhd2luZykKICAgICAgICAgcmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJh
dGUoc2l6ZSgpKSA/IFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQgOiBSZW5k
ZXJpbmdNb2RlOjpEaXNwbGF5TGlzdFVuYWNjZWxlcmF0ZWQ7CiAgICAgZWxzZQogICAgICAgICBy
ZW5kZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxlcmF0ZShzaXplKCkpID8gUmVuZGVyaW5nTW9kZTo6
QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwpJbmRleDogU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDI1NzUyNCkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTA2IEBACisyMDIwLTAyLTI2ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNh
Ym91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IHRoZSByZW1vdGUgUmVu
ZGVyaW5nQmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjA3MTk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCBhbmQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5IHdpbGwgYmUgcmVzcG9uc2libGUKKyAgICAgICAgZm9yICBjcmVhdGluZyB0aGUgdHdvIHBh
cnRzIG9mIHRoZSBJbWFnZUJ1ZmZlcjogUmVtb3RlSW1hZ2VCdWZmZXIgYW5kCisgICAgICAgIFJl
bW90ZUltYWdlQnVmZmVyUHJveHkuIFRoZXkgd2lsbCBhbHNvIGJlIHJlc3BvbnNpYmxlIGZvciBz
ZW5kaW5nIGFuZAorICAgICAgICByZWNlaXZpbmcgdGhlIG1lc3NhZ2VzIGZvciB0aGUgcmVtb3Rl
IHRoZSBJbWFnZUJ1ZmZlcnMuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBEZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2ZWRTb3Vy
Y2VzLW91dHB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisK
KyAgICAgICAgKiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjcmVhdGVSZW5kZXJpbmdC
YWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cmVs
ZWFzZVJlbmRlcmluZ0JhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjpkaXNwYXRjaE1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpkaXNwYXRjaFN5bmNNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlU3lu
Y01lc3NhZ2UpOiBEZWxldGVkLgorICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5oOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OjptZXNzYWdlUmVjZWl2ZXJNYXApOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjp3ZWJQcm9jZXNzSWRlbnRpZmllciBjb25zdCk6CisgICAgICAgIEdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MgZGlzcGF0Y2hlcyBtZXNzYWdlcyB0byBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkuCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MubWVzc2FnZXMuaW46CisgICAgICAgIEFkZGluZyB0aGUgJ1dhbnRzRGlzcGF0Y2hNZXNz
YWdlJyBhdHRyaWJ1dGUgd2lsbCBmb3JjZSB0aGUgbWVzc2FnZXMucHkKKyAgICAgICAgdG8gZ2Vu
ZXJhdGUgY29kZSB3aGljaCBjYWxscyBkaXNwYXRjaE1lc3NhZ2UoKSBhbmQgZGlkUmVjZWl2ZVN5
bmNNZXNzYWdlKCkKKyAgICAgICAgd2hlbiBtZXNzYWdlcyBhcmUgcmVjZWl2ZWQuCisKKyAgICAg
ICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzOiBBZGRlZC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL2dy
YXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojp+
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVNlbmRlckRl
c3RpbmF0aW9uSUQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHk6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5OjpyZWxlYXNlSW1hZ2VCdWZmZXIpOgorICAgICAgICAqIEdQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lmg6IEFkZGVkLgorICAg
ICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1l
c3NhZ2VzLmluOiBBZGRlZC4KKyAgICAgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5IGlz
IHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0aGUgcmVtb3RlCisgICAgICAgIEltYWdlQnVmZmVy
IHByb3h5IGluIHRoZSBHUFVQcm9jZXNzIHNpZGUuIEl0IGhvbGRzIGl0IGluIGEgSGFzaE1hcCBv
ZgorICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGluZGV4ZWQgYnkgdGhlIElt
YWdlQnVmZmVySWRlbnRpZmllci4KKworICAgICAgICAqIEdQVVByb2Nlc3Mvd2VicnRjL1JlbW90
ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyLmNwcDoKKyAgICAgICAgKiBHUFVQcm9jZXNz
L3dlYnJ0Yy9SZW1vdGVNZWRpYVJlY29yZGVyLmNwcDoKKyAgICAgICAgKiBHUFVQcm9jZXNzL3dl
YnJ0Yy9SZW1vdGVNZWRpYVJlY29yZGVyTWFuYWdlci5jcHA6CisgICAgICAgICogR1BVUHJvY2Vz
cy93ZWJydGMvUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyLmNwcDoKKyAgICAgICAgVW5p
ZmllZCBzb3VyY2VzIGdhcmRlbmluZy4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21lc3Nh
Z2VzLnB5OgorICAgICAgICBIYW5kbGUgJ1dhbnRzRGlzcGF0Y2hNZXNzYWdlJyBhdHRyaWJ1dGUu
CisKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgICog
U291cmNlcy50eHQ6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBXZWJL
aXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKworICAgICAgICAqIFdlYlByb2Nlc3MvR1BV
L0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nv
bm5lY3Rpb246OmRpc3BhdGNoTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3ND
b25uZWN0aW9uOjpkaXNwYXRjaFN5bmNNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6R1BVUHJv
Y2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVNZXNzYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oOgorICAgICAgICAoV2ViS2l0OjpH
UFVQcm9jZXNzQ29ubmVjdGlvbjo6bWVzc2FnZVJlY2VpdmVyTWFwKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbjoKKyAgICAgICAgR1BV
Q29ubmVjdGlvbiBkaXNwYXRjaGVzIG1lc3NhZ2VzIHRvIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQu
CisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljczogQWRkZWQuCisgICAgICAgICog
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmg6IEFkZGVkLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24gY29uc3QpOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUlt
YWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6cmVs
ZWFzZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW46IEFkZGVkLgorICAgICAg
ICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmg6
IEFkZGVkLgorICAgICAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIGlzIHJlc3BvbnNpYmxlIGZv
ciBjcmVhdGluZyB0aGUgcmVtb3RlIEltYWdlQnVmZmVyCisgICAgICAgIGluIHRoZSBXZWJQcm9j
ZXNzIHNpZGUuIEl0IGhvbGRzIGl0IGluIGEgSGFzaE1hcCBvZiBJbWFnZUJ1ZmZlciogaW5kZXhl
ZAorICAgICAgICBieSB0aGUgSW1hZ2VCdWZmZXJJZGVudGlmaWVyLgorCisgICAgICAgICogV2Vi
UHJvY2Vzcy9HUFUvbWVkaWEvVGV4dFRyYWNrUHJpdmF0ZVJlbW90ZS5jcHA6CisgICAgICAgICog
V2ViUHJvY2Vzcy9HUFUvbWVkaWEvVGV4dFRyYWNrUHJpdmF0ZVJlbW90ZS5oOgorICAgICAgICAq
IFdlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9NZWRpYVJlY29yZGVyUHJpdmF0ZS5jcHA6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9HUFUvd2VicnRjL01lZGlhUmVjb3JkZXJQcm92aWRlci5jcHA6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9HUFUvd2VicnRjL1NhbXBsZUJ1ZmZlckRpc3BsYXlMYXllci5jcHA6
CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvd2VicnRjL1NhbXBsZUJ1ZmZlckRpc3BsYXlMYXll
ck1hbmFnZXIuY3BwOgorICAgICAgICBVbmlmaWVkIHNvdXJjZXMgZ2FyZGVuaW5nLgorCisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRv
ciBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6Y3JlYXRlSW1hZ2VC
dWZmZXIgY29uc3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50Lmg6CisgICAgICAgIENyZWF0ZSB0aGUgcmVtb3RlIEltYWdlQnVmZmVyLgorCiAy
MDIwLTAyLTI2ICBEb24gT2xtc3RlYWQgIDxkb24ub2xtc3RlYWRAc29ueS5jb20+CiAKICAgICAg
ICAgQWxsb3cgc2V0dGluZyBvZiBzdGFjayBzaXplcyBmb3IgdGhyZWFkcwpJbmRleDogU291cmNl
L1dlYktpdC9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NNYWtl
TGlzdHMudHh0CShyZXZpc2lvbiAyNTczNjkpCisrKyBTb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC03OSw2ICs3OSw3IEBAIHNldChXZWJLaXRfSU5DTFVERV9E
SVJFQ1RPUklFUwogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvR2FtZXBhZCIKICAgICAi
JHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL0dlb2xvY2F0aW9uIgogICAgICIke1dFQktJVF9ESVJ9
L1dlYlByb2Nlc3MvR1BVIgorICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvR1BVL21lZGlhIgogICAgICIke1dF
QktJVF9ESVJ9L1dlYlByb2Nlc3MvR1BVL3dlYnJ0YyIKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQ
cm9jZXNzL0ljb25EYXRhYmFzZSIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMt
aW5wdXQueGNmaWxlbGlzdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3Vy
Y2VzLWlucHV0LnhjZmlsZWxpc3QJKHJldmlzaW9uIDI1NzM2OSkKKysrIFNvdXJjZS9XZWJLaXQv
RGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAkod29ya2luZyBjb3B5KQpAQCAtMTUsNiAr
MTUsNyBAQCAkKEpBVkFTQ1JJUFRDT1JFX1BSSVZBVEVfSEVBREVSU19ESVIpL21vCiAkKEpBVkFT
Q1JJUFRDT1JFX1BSSVZBVEVfSEVBREVSU19ESVIpL3h4ZC5wbAogJChQUk9KRUNUX0RJUikvR1BV
UHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1Rf
RElSKS9HUFVQcm9jZXNzL0dQVVByb2Nlc3MubWVzc2FnZXMuaW4KKyQoUFJPSkVDVF9ESVIpL0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmlu
CiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL21hYy9jb20uYXBwbGUuV2ViS2l0LkdQVVByb2Nl
c3Muc2IuaW4KICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5
ZXJNYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvbWVk
aWEvUmVtb3RlTWVkaWFQbGF5ZXJQcm94eS5tZXNzYWdlcy5pbgpAQCAtMTA3LDYgKzEwOCw3IEBA
ICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvQ2FjaGUvV2ViQ2FjaGUKICQoUFJPSkVDVF9ESVIp
L1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXIu
bWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvRnVsbFNjcmVlbi9XZWJGdWxs
U2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9HUFUv
R1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4KKyQoUFJPSkVDVF9ESVIpL1dlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KICQoUFJP
SkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL21lZGlhL01lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZS5t
ZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVk
aWFQbGF5ZXJNYW5hZ2VyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dQ
VS9tZWRpYS9UZXh0VHJhY2tQcml2YXRlUmVtb3RlLm1lc3NhZ2VzLmluCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QJKHJldmlzaW9uIDI1
NzM2OSkKKysrIFNvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QJ
KHdvcmtpbmcgY29weSkKQEAgLTE1NCw2ICsxNTQsMTIgQEAgJChCVUlMVF9QUk9EVUNUU19ESVIp
L0Rlcml2ZWRTb3VyY2VzL1dlYgogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2Vz
L1dlYktpdDIvUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxU
X1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVPYmplY3RSZWdpc3Ry
eU1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQy
L1JlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXNSZXBsaWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNf
RElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRNZXNzYWdl
UmVjZWl2ZXIuY3BwCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0
Mi9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kTWVzc2FnZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIp
L0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlUmVuZGVyaW5nQmFja2VuZE1lc3NhZ2VzUmVw
bGllcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiskKEJVSUxUX1BST0RV
Q1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHlNZXNzYWdlcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0
Mi9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlc1JlcGxpZXMuaAogJChCVUlMVF9Q
Uk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlU2FtcGxlQnVmZmVyRGlz
cGxheUxheWVyTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElS
KS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1h
bmFnZXJNZXNzYWdlcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2Vi
S2l0Mi9SZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyTWVzc2FnZXNSZXBsaWVz
LmgKSW5kZXg6IFNvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDI1NzM2OSkKKysr
IFNvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpAQCAtMjMs
NiArMjMsNyBAQAogVlBBVEggPSBcCiAgICAgJChXZWJLaXQyKSBcCiAgICAgJChXZWJLaXQyKS9H
UFVQcm9jZXNzIFwKKyAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3MvZ3JhcGhpY3MgXAogICAgICQo
V2ViS2l0MikvR1BVUHJvY2Vzcy9tYWMgXAogICAgICQoV2ViS2l0MikvR1BVUHJvY2Vzcy9tZWRp
YSBcCiAgICAgJChXZWJLaXQyKS9HUFVQcm9jZXNzL3dlYnJ0YyBcCkBAIC01MSw2ICs1Miw3IEBA
IFZQQVRIID0gXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9GdWxsU2NyZWVuIFwKICAgICAk
KFdlYktpdDIpL1dlYlByb2Nlc3MvR2VvbG9jYXRpb24gXAogICAgICQoV2ViS2l0MikvV2ViUHJv
Y2Vzcy9HUFUgXAorICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MgXAogICAg
ICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUvbWVkaWEgXAogICAgICQoV2ViS2l0MikvV2ViUHJv
Y2Vzcy9HUFUvd2VicnRjIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvSWNvbkRhdGFiYXNl
IFwKQEAgLTE1Myw2ICsxNTUsOCBAQCBNRVNTQUdFX1JFQ0VJVkVSUyA9IFwKICAgICBSZW1vdGVN
ZWRpYVJlY29yZGVyTWFuYWdlciBcCiAgICAgUmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIgXAog
ICAgIFJlbW90ZU9iamVjdFJlZ2lzdHJ5IFwKKyAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIFwK
KyAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgXAogICAgIFJlbW90ZVNhbXBsZUJ1ZmZl
ckRpc3BsYXlMYXllciBcCiAgICAgUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdl
ciBcCiAgICAgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IgXApJbmRleDogU291cmNlL1dlYktp
dC9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CShy
ZXZpc2lvbiAyNTczNjkpCisrKyBTb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0yNCwxMiArMjQsNyBAQAogR1BVUHJvY2Vzcy9HUFVQcm9jZXNzLmNwcAogR1BVUHJv
Y2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAogR1BVUHJvY2Vzcy9HUFVQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzLmNwcAotR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlQXVkaW9NZWRp
YVN0cmVhbVRyYWNrUmVuZGVyZXIuY3BwCi1HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVBdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlck1hbmFnZXIuY3BwCi1HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1v
dGVNZWRpYVJlY29yZGVyLmNwcAotR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlTWVkaWFSZWNvcmRl
ck1hbmFnZXIuY3BwCi1HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5
TGF5ZXIuY3BwCi1HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5
ZXJNYW5hZ2VyLmNwcAorR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkuY3BwCiBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZUF1ZGlvVHJhY2tQcm94eS5jcHAKIEdQ
VVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkuY3BwCiBHUFVQcm9j
ZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyUHJveHkuY3BwCkBAIC0zOCw2ICszMywxMiBAQCBH
UFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2VMb2FkCiBHUFVQcm9jZXNzL21lZGlh
L1JlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyLmNwcAogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVU
ZXh0VHJhY2tQcm94eS5jcHAKIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3RlVmlkZW9UcmFja1Byb3h5
LmNwcAorR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVy
ZXIuY3BwCitHUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5k
ZXJlck1hbmFnZXIuY3BwCitHUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVNZWRpYVJlY29yZGVyLmNw
cAorR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlTWVkaWFSZWNvcmRlck1hbmFnZXIuY3BwCitHUFVQ
cm9jZXNzL3dlYnJ0Yy9SZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIuY3BwCitHUFVQcm9j
ZXNzL3dlYnJ0Yy9SZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyLmNwcAogCiBO
ZXR3b3JrUHJvY2Vzcy9BZENsaWNrQXR0cmlidXRpb25NYW5hZ2VyLmNwcAogTmV0d29ya1Byb2Nl
c3MvTmV0d29ya0FjdGl2aXR5VHJhY2tlci5jcHAKQEAgLTUzMiw2ICs1MzMsNyBAQCBXZWJQcm9j
ZXNzL01lZGlhU3RyZWFtL01lZGlhRGV2aWNlU2FuZGJvCiBXZWJQcm9jZXNzL01lZGlhU3RyZWFt
L1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKIAogV2ViUHJvY2Vzcy9HUFUv
R1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCitXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLmNwcAogV2ViUHJvY2Vzcy9HUFUvbWVkaWEvQXVkaW9UcmFja1ByaXZh
dGVSZW1vdGUuY3BwCiBXZWJQcm9jZXNzL0dQVS9tZWRpYS9NZWRpYVBsYXllclByaXZhdGVSZW1v
dGUuY3BwCiBXZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXIuY3Bw
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CShyZXZpc2lvbiAyNTczNjkpCisrKyBTb3VyY2Uv
V2ViS2l0L1NvdXJjZXNDb2NvYS50eHQJKHdvcmtpbmcgY29weSkKQEAgLTY0Myw2ICs2NDMsNyBA
QCBXZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90CiAvLyBEZXJpdmVkIFNv
dXJjZXMKIEVkaXRhYmxlSW1hZ2VDb250cm9sbGVyTWVzc2FnZVJlY2VpdmVyLmNwcAogR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAKK0dQVVByb2Nlc3NDb25uZWN0
aW9uTWVzc2FnZVJlY2VpdmVyLmNwcAogR1BVUHJvY2Vzc1Byb3h5TWVzc2FnZVJlY2VpdmVyLmNw
cAogR1BVUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAKIExpYldlYlJUQ0NvZGVjc1Byb3h5TWVz
c2FnZVJlY2VpdmVyLmNwcApAQCAtNjUxLDYgKzY1Miw4IEBAIFJlbW90ZUF1ZGlvTWVkaWFTdHJl
YW1UcmFja1JlbmRlcmVyTWFuYWcKIFJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVy
TWVzc2FnZVJlY2VpdmVyLmNwcAogUmVtb3RlTWVkaWFSZWNvcmRlck1lc3NhZ2VSZWNlaXZlci5j
cHAKIFJlbW90ZU1lZGlhUmVjb3JkZXJNYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcAorUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZE1lc3NhZ2VSZWNlaXZlci5jcHAKK1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKIFJlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXll
ck1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiBSZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5
ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiBTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNZXNzYWdlUmVj
ZWl2ZXIuY3BwCkluZGV4OiBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCShyZXZpc2lvbiAyNTczNjkpCisrKyBTb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE4OSw3OSArMTg5LDk0IEBAIExpYldlYlJUQ0NvZGVjc1Byb3h5JiBHUFVDb25u
ZWN0aW9uVG9XZWIKIH0KICNlbmRpZgogCi12b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNv
ZGVyJiBkZWNvZGVyKQordm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjcmVhdGVSZW5k
ZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyKQoreworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9yZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHlNYXAuZW5zdXJlKHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLCBbJl0oKSB7Cisg
ICAgICAgIHJldHVybiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZSgqdGhpcywg
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgIH0pOworICAgIEFTU0VSVF9VTlVTRUQo
YWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Cit9CisKK3ZvaWQgR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzczo6cmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7CisgICAgYm9vbCBmb3VuZCA9
IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWFwLnJlbW92ZShyZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllcik7CisgICAgQVNTRVJUX1VOVVNFRChmb3VuZCwgZm91bmQpOworfQorCitib29s
IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpc3BhdGNoTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBpZiAoZGVjb2Rl
ci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUGxheWVyTWFu
YWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgcmVtb3RlTWVkaWFQ
bGF5ZXJNYW5hZ2VyUHJveHkoKS5kaWRSZWNlaXZlTWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5l
Y3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmIChkZWNvZGVy
Lm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFQbGF5ZXJQcm94
eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90
ZU1lZGlhUGxheWVyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICByZW1v
dGVNZWRpYVBsYXllck1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVQbGF5ZXJNZXNzYWdlKGNvbm5l
Y3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmIChkZWNvZGVy
Lm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFSZXNvdXJjZU1h
bmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpS
ZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAg
ICAgIHJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyKCkuZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVj
dGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJl
Y2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpVc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5Ojpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgdXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQ
cm94eSgpLmRpZFJlY2VpdmVNZXNzYWdlRnJvbUdQVVByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rl
cik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlm
IChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFS
ZWNvcmRlck1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICBtZWRpYVJl
Y29yZGVyTWFuYWdlcigpLmRpZFJlY2VpdmVNZXNzYWdlRnJvbVdlYlByb2Nlc3MoY29ubmVjdGlv
biwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVt
b3RlTWVkaWFSZWNvcmRlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIG1lZGlh
UmVjb3JkZXJNYW5hZ2VyKCkuZGlkUmVjZWl2ZVJlbW90ZU1lZGlhUmVjb3JkZXJNZXNzYWdlKGNv
bm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICNpZiBQTEFURk9STShDT0NPQSkgJiYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAg
IGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlQXVk
aW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkp
IHsKICAgICAgICAgYXVkaW9UcmFja1JlbmRlcmVyTWFuYWdlcigpLmRpZFJlY2VpdmVNZXNzYWdl
RnJvbVdlYlByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXI6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICBhdWRpb1RyYWNrUmVuZGVyZXJNYW5h
Z2VyKCkuZGlkUmVjZWl2ZVJlbmRlcmVyTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYgKGRlY29k
ZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVTYW1wbGVCdWZmZXJE
aXNwbGF5TGF5ZXJNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgc2Ft
cGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlcigpLmRpZFJlY2VpdmVNZXNzYWdlRnJvbVdlYlBy
b2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9
PSBNZXNzYWdlczo6UmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyOjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCkpIHsKICAgICAgICAgc2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlcigpLmRp
ZFJlY2VpdmVMYXllck1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCiAjZW5kaWYKICNpZiBQTEFU
Rk9STShDT0NPQSkgJiYgVVNFKExJQldFQlJUQykKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVj
ZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OkxpYldlYlJUQ0NvZGVjc1Byb3h5OjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgbGliV2ViUlRDQ29kZWNzUHJveHkoKS5kaWRSZWNlaXZl
TWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNlbmRpZgorICAgIHJldHVybiBtZXNz
YWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7CiB9
CiAKLXZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6
OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKQorYm9vbCBHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpkaXNwYXRjaFN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29u
bmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNv
ZGVyPiYgcmVwbHlFbmNvZGVyKQogewogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5h
bWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk6Om1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSkgewogICAgICAgICByZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eSgp
LmRpZFJlY2VpdmVTeW5jTWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIs
IHJlcGx5RW5jb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQotCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdl
UmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICB1c2VyTWVkaWFDYXB0dXJlTWFuYWdl
clByb3h5KCkuZGlkUmVjZWl2ZVN5bmNNZXNzYWdlRnJvbUdQVVByb2Nlc3MoY29ubmVjdGlvbiwg
ZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAjaWYgUExBVEZPUk0oQ09DT0EpICYmIEVOQUJMRShWSURFT19UUkFDSykK
ICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90
ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkg
ewogICAgICAgICBzYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyKCkuZGlkUmVjZWl2ZVN5
bmNNZXNzYWdlRnJvbVdlYlByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVy
KTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYK
ICNlbmRpZgotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG1lc3NhZ2VS
ZWNlaXZlck1hcCgpLmRpc3BhdGNoU3luY01lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVw
bHlFbmNvZGVyKTsKIH0KIAogY29uc3QgU3RyaW5nJiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OjptZWRpYUNhY2hlRGlyZWN0b3J5KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAkocmV2aXNpb24gMjU3
MzY5KQorKysgU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTMgKzI4LDE1IEBACiAjaWYgRU5BQkxFKEdQVV9Q
Uk9DRVNTKQogCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgIkdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3NNZXNzYWdlc1JlcGxpZXMuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Rpc3Bs
YXlMaXN0SXRlbXMuaD4KKyNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2Fn
ZXMuaCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXJNYXAuaCIKKyNpbmNsdWRlICJSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRp
Zmllci5oIgogI2luY2x1ZGUgPFdlYkNvcmUvUHJvY2Vzc0lkZW50aWZpZXIuaD4KICNpbmNsdWRl
IDxwYWwvU2Vzc2lvbklELmg+CiAjaW5jbHVkZSA8d3RmL0xvZ2dlci5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgorI2luY2x1ZGUgPHd0
Zi9XZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFBsYXRmb3JtTWVkaWFT
ZXNzaW9uTWFuYWdlcjsKQEAgLTUzLDE4ICs1NSwyMCBAQCBjbGFzcyBVc2VyTWVkaWFDYXB0dXJl
TWFuYWdlclByb3h5OwogCiBjbGFzcyBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzCiAgICAgOiBw
dWJsaWMgUmVmQ291bnRlZDxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPgorICAgICwgcHVibGlj
IENhbk1ha2VXZWFrUHRyPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+CiAgICAgLCBJUEM6OkNv
bm5lY3Rpb246OkNsaWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxHUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzPiBjcmVhdGUoR1BVUHJvY2VzcyYsIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlm
aWVyLCBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIsIFBBTDo6U2Vzc2lvbklEKTsKICAgICB2
aXJ0dWFsIH5HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKCk7CiAKICAgICBJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24oKSB7IHJldHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7IH0KKyAgICBJUEM6
Ok1lc3NhZ2VSZWNlaXZlck1hcCYgbWVzc2FnZVJlY2VpdmVyTWFwKCkgeyByZXR1cm4gbV9tZXNz
YWdlUmVjZWl2ZXJNYXA7IH0KICAgICBHUFVQcm9jZXNzJiBncHVQcm9jZXNzKCkgeyByZXR1cm4g
bV9ncHVQcm9jZXNzLmdldCgpOyB9CisgICAgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgd2Vi
UHJvY2Vzc0lkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3dlYlByb2Nlc3NJZGVudGlmaWVy
OyB9CiAKICAgICB2b2lkIGNsZWFudXBGb3JTdXNwZW5zaW9uKEZ1bmN0aW9uPHZvaWQoKT4mJik7
CiAgICAgdm9pZCBlbmRTdXNwZW5zaW9uKCk7CiAKLSAgICBXZWJDb3JlOjpQcm9jZXNzSWRlbnRp
ZmllciB3ZWJQcm9jZXNzSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fd2ViUHJvY2Vzc0lk
ZW50aWZpZXI7IH0KICAgICBSZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlciYgcmVtb3RlTWVkaWFS
ZXNvdXJjZU1hbmFnZXIoKTsKIAogICAgIExvZ2dlciYgbG9nZ2VyKCk7CkBAIC05MSw2ICs5NSw4
IEBAIHByaXZhdGU6CiAgICAgUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlciYg
c2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlcigpOwogI2VuZGlmCiAjZW5kaWYKKyAgICB2
b2lkIGNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOwor
ICAgIHZvaWQgcmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIpOwogCiAgICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKICAgICB2b2lkIGRpZENsb3Nl
KElQQzo6Q29ubmVjdGlvbiYpIGZpbmFsOwpAQCAtOTgsOSArMTA0LDEzIEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXIm
KSBmaW5hbDsKICAgICB2b2lkIGRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
LCBJUEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpIGZpbmFsOwog
CisgICAgYm9vbCBkaXNwYXRjaE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVy
Jik7CisgICAgYm9vbCBkaXNwYXRjaFN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6
RGVjb2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+Jik7CisKICAgICBSZWZQdHI8
TG9nZ2VyPiBtX2xvZ2dlcjsKIAogICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IG1fY29ubmVjdGlv
bjsKKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCBtX21lc3NhZ2VSZWNlaXZlck1hcDsKICAg
ICBSZWY8R1BVUHJvY2Vzcz4gbV9ncHVQcm9jZXNzOwogICAgIGNvbnN0IFdlYkNvcmU6OlByb2Nl
c3NJZGVudGlmaWVyIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PFJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyPiBtX3JlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2Vy
OwpAQCAtMTE4LDYgKzEyOCw5IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPExpYldl
YlJUQ0NvZGVjc1Byb3h5PiBtX2xpYldlYlJUQ0NvZGVjc1Byb3h5OwogI2VuZGlmCiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6OlBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlcj4gbV9zZXNz
aW9uTWFuYWdlcjsKKyAgICAKKyAgICB1c2luZyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlN
YXAgPSBIYXNoTWFwPFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Pj47CisgICAgUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5TWFwIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWFwOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgkocmV2aXNp
b24gMjU3MzY5KQorKysgU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDkgQEAKIAog
I2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAotbWVzc2FnZXMgLT4gR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2VzcyB7CittZXNzYWdlcyAtPiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzIFdhbnRzRGlz
cGF0Y2hNZXNzYWdlIHsKKyAgICB2b2lkIENyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoV2ViS2l0OjpS
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKKyAg
ICB2b2lkIFJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKFdlYktpdDo6UmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCiB9CiAKICNlbmRpZiAvLyBFTkFC
TEUoR1BVX1BST0NFU1MpCkluZGV4OiBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkuaCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1
ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgiCisKK25hbWVzcGFjZSBX
ZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0ZDo6dW5pcXVlX3B0cjxSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3Jl
YXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Ms
IFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQor
eworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
PihuZXcgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MsIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKSk7Cit9CisKK1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eTo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KEdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgIDogbV9ncHVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzKG1ha2VXZWFrUHRyKGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpKQorICAg
ICwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcihyZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
cikKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgZ3B1Q29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy0+bWVzc2FnZVJlY2VpdmVyTWFwKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgcmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKSwgKnRoaXMpOworfQorCitSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHk6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoKQoreworICAg
IGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmdldCgpKQorICAgICAgICBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5tZXNz
YWdlUmVjZWl2ZXJNYXAoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3JlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCkpOworfQorCitJUEM6OkNvbm5lY3Rpb24qIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdAor
eworICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAgICByZXR1cm4gJmdwdUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MtPmNvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordWludDY0
X3QgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25J
RCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9V
SW50NjQoKTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZUlt
YWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUgcmVu
ZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IEltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCit7CisgICAgYXV0
byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5nZXQoKTsKKyAgICBpZiAoIWdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChtX2ltYWdlQnVmZmVyTWFwLmNvbnRhaW5zKGltYWdlQnVmZmVySWRl
bnRpZmllcikpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVy
OworCisgICAgc3dpdGNoIChyZW5kZXJpbmdNb2RlKSB7CisgICAgY2FzZSBSZW5kZXJpbmdNb2Rl
OjpSZW1vdGVBY2NlbGVyYXRlZDoKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90ZVVuYWNj
ZWxlcmF0ZWQ6CisgICAgICAgIC8vIEZJWE1FOiBjcmVhdGUgdGhlIHJlbW90ZSBJbWFnZUJ1ZmZl
ciBwcm94eS4KKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9CisKKyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lt
YWdlQnVmZmVyTWFwLmFkZChpbWFnZUJ1ZmZlcklkZW50aWZpZXIsIFdURk1vdmUoaW1hZ2VCdWZm
ZXIpKTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlbGVhc2VJbWFn
ZUJ1ZmZlcihJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorewor
ICAgIC8vIENyZWF0ZUltYWdlQnVmZmVyIG1lc3NhZ2Ugc2hvdWxkIGhhdmUgYmVlbiByZWNlaXZl
ZCBiZWZvcmUgdGhpcyBvbmUuCisgICAgYm9vbCBmb3VuZCA9IG1faW1hZ2VCdWZmZXJNYXAucmVt
b3ZlKGltYWdlQnVmZmVySWRlbnRpZmllcik7CisgICAgQVNTRVJUX1VOVVNFRChmb3VuZCwgZm91
bmQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVf
UFJPQ0VTUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkNv
bm5lY3Rpb24uaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCIKKyNpbmNsdWRl
ICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCisjaW5jbHVk
ZSAiUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NvbG9y
U3BhY2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlQnVmZmVyLmg+CisjaW5jbHVkZSA8d3Rm
L1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3M7CisKK2NsYXNzIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eQorICAgIDog
cHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5kZXIKKyAgICAsIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVj
ZWl2ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5PiBjcmVhdGUoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYsIFJlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICB2aXJ0dWFsIH5SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkoKTsKKworcHJpdmF0ZToKKyAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHko
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsK
KworICAgIC8vIElQQzo6TWVzc2FnZVNlbmRlci4KKyAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3Nh
Z2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdWludDY0X3QgbWVzc2Fn
ZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIElQQzo6TWVz
c2FnZVJlY2VpdmVyCisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
LCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKKworICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIo
Y29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5n
TW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBJbWFnZUJ1
ZmZlcklkZW50aWZpZXIpOworICAgIHZvaWQgcmVsZWFzZUltYWdlQnVmZmVyKEltYWdlQnVmZmVy
SWRlbnRpZmllcik7CisKKyAgICB1c2luZyBJbWFnZUJ1ZmZlck1hcCA9IEhhc2hNYXA8SW1hZ2VC
dWZmZXJJZGVudGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+PjsK
KyAgICBJbWFnZUJ1ZmZlck1hcCBtX2ltYWdlQnVmZmVyTWFwOworICAgIFdlYWtQdHI8R1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcz4gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOworICAgIFJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VT
UykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5p
bgkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMzAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lm
IEVOQUJMRShHUFVfUFJPQ0VTUykKKworbWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5IE5vdFJlZkNvdW50ZWQgeworICAgIHZvaWQgQ3JlYXRlSW1hZ2VCdWZmZXIoV2ViQ29y
ZTo6RmxvYXRTaXplIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNw
YWNlLCBXZWJLaXQ6OkltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIp
CisgICAgdm9pZCBSZWxlYXNlSW1hZ2VCdWZmZXIoV2ViS2l0OjpJbWFnZUJ1ZmZlcklkZW50aWZp
ZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorfQorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9D
RVNTKQpJbmRleDogU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVBdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlci5jcHAJ
KHJldmlzaW9uIDI1NzM2OSkKKysrIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy93ZWJydGMvUmVt
b3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Myw5ICszMyw4IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9DQVJpbmdCdWZmZXIuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1dlYkF1ZGlvQnVmZmVyTGlzdC5oPgogCi11c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKLQogbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogI2lm
ICFSRUxFQVNFX0xPR19ESVNBQkxFRAogc3RhdGljIGNvbnN0IHZvaWQqIG5leHRMb2dJZGVudGlm
aWVyKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlTWVkaWFS
ZWNvcmRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dlYnJ0
Yy9SZW1vdGVNZWRpYVJlY29yZGVyLmNwcAkocmV2aXNpb24gMjU3MzY5KQorKysgU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVNZWRpYVJlY29yZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzUsOSArMzUsOCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvV2ViQXVkaW9CdWZmZXJM
aXN0Lmg+CiAjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAKLXVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwotCiBuYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogCiBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlTWVkaWFSZWNvcmRlcj4gUmVtb3RlTWVkaWFS
ZWNvcmRlcjo6Y3JlYXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MsIE1lZGlhUmVjb3JkZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIGJvb2wgcmVj
b3JkQXVkaW8sIGludCB3aWR0aCwgaW50IGhlaWdodCkKIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlTWVkaWFSZWNvcmRlck1hbmFnZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlTWVkaWFSZWNvcmRl
ck1hbmFnZXIuY3BwCShyZXZpc2lvbiAyNTczNjkpCisrKyBTb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3Mvd2VicnRjL1JlbW90ZU1lZGlhUmVjb3JkZXJNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uRGF0YS5oPgogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBSZW1vdGVNZWRp
YVJlY29yZGVyTWFuYWdlcjo6UmVtb3RlTWVkaWFSZWNvcmRlck1hbmFnZXIoR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcykKICAgICA6IG1fZ3B1Q29u
bmVjdGlvblRvV2ViUHJvY2VzcyhncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKQpJbmRleDogU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy93ZWJydGMvUmVt
b3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyLmNwcAkocmV2aXNpb24gMjU3MzY5KQorKysgU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw5ICszNCw4IEBACiAjaW5jbHVkZSA8V2ViQ29y
ZS9NZWRpYVNhbXBsZUFWRk9iakMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbW90ZVZpZGVvU2Ft
cGxlLmg+CiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCiBuYW1lc3BhY2UgV2ViS2l0IHsK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlU2FtcGxl
QnVmZmVyRGlzcGxheUxheWVyPiBSZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXI6OmNyZWF0
ZShTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIFJlZjxJUEM6
OkNvbm5lY3Rpb24+JiYgY29ubmVjdGlvbiwgYm9vbCBoaWRlUm9vdExheWVyLCBJbnRTaXplIHNp
emUpCiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkJKHJl
dmlzaW9uIDI1NzM2OSkKKysrIFNvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAgaW1wb3J0IHN5cwogZnJvbSB3ZWJr
aXQgaW1wb3J0IHBhcnNlcgogCiBXQU5UU19DT05ORUNUSU9OX0FUVFJJQlVURSA9ICdXYW50c0Nv
bm5lY3Rpb24nCitXQU5UU19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVURSA9ICdXYW50c0Rpc3Bh
dGNoTWVzc2FnZScKIExFR0FDWV9SRUNFSVZFUl9BVFRSSUJVVEUgPSAnTGVnYWN5UmVjZWl2ZXIn
CiBOT1RfUkVGQ09VTlRFRF9SRUNFSVZFUl9BVFRSSUJVVEUgPSAnTm90UmVmQ291bnRlZCcKIFNZ
TkNIUk9OT1VTX0FUVFJJQlVURSA9ICdTeW5jaHJvbm91cycKQEAgLTIwNCw2ICsyMDUsNyBAQCBk
ZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlCiAgICAgcmV0dXJuIGZyb3pl
bnNldChbCiAgICAgICAgICdNYWNoU2VuZFJpZ2h0JywKICAgICAgICAgJ1N0cmluZycsCisgICAg
ICAgICdXZWJDb3JlOjpDb2xvclNwYWNlJywKICAgICAgICAgJ1dlYkNvcmU6OkRvY3VtZW50SWRl
bnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpEb2N1bWVudE9yV29ya2VySWRlbnRpZmllcics
CiAgICAgICAgICdXZWJDb3JlOjpGZXRjaElkZW50aWZpZXInLApAQCAtMjEzLDYgKzIxNSw3IEBA
IGRlZiB0eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2RlY2xhcmUKICAgICAgICAgJ1dlYkNv
cmU6OlBvaW50ZXJJRCcsCiAgICAgICAgICdXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllcicsCiAg
ICAgICAgICdXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNlSWRlbnRpZmllcicsCisgICAgICAg
ICdXZWJDb3JlOjpSZW5kZXJpbmdNb2RlJywKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3Jr
ZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3JrZXJKb2JJZGVudGlm
aWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3JrZXJPckNsaWVudERhdGEnLApAQCAt
MjIyLDEyICsyMjUsMTQgQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFy
ZQogICAgICAgICAnV2ViS2l0OjpBY3Rpdml0eVN0YXRlQ2hhbmdlSUQnLAogICAgICAgICAnV2Vi
S2l0OjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlcklkZW50aWZpZXInLAogICAgICAgICAn
V2ViS2l0OjpDb250ZW50V29ybGRJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYktpdDo6SW1hZ2VC
dWZmZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6TGF5ZXJIb3N0aW5nQ29udGV4dElE
JywKICAgICAgICAgJ1dlYktpdDo6TGliV2ViUlRDUmVzb2x2ZXJJZGVudGlmaWVyJywKICAgICAg
ICAgJ1dlYktpdDo6TUROU1JlZ2lzdGVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6Ok1l
ZGlhUGxheWVyUHJpdmF0ZVJlbW90ZUlkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpNZWRp
YVJlY29yZGVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlJlbW90ZU1lZGlhUmVzb3Vy
Y2VJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYktpdDo6UmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXInLAogICAgICAgICAnV2ViS2l0OjpSVENEZWNvZGVySWRlbnRpZmllcicsCiAgICAgICAgICdX
ZWJLaXQ6OlJUQ0VuY29kZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6U2FtcGxlQnVm
ZmVyRGlzcGxheUxheWVySWRlbnRpZmllcicsCkBAIC03NzksMTMgKzc4NCwxNiBAQCBkZWYgZ2Vu
ZXJhdGVfbWVzc2FnZV9oYW5kbGVyKHJlY2VpdmVyKToKICAgICAgICAgZWxzZToKICAgICAgICAg
ICAgIGFzeW5jX21lc3NhZ2VzLmFwcGVuZChtZXNzYWdlKQogCi0gICAgaWYgYXN5bmNfbWVzc2Fn
ZXM6CisgICAgaWYgYXN5bmNfbWVzc2FnZXMgb3IgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShXQU5U
U19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVURSk6CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3Zv
aWQgJXM6OmRpZFJlY2VpdmUlc01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJ
UEM6OkRlY29kZXImIGRlY29kZXIpXG4nICUgKHJlY2VpdmVyLm5hbWUsIHJlY2VpdmVyLm5hbWUg
aWYgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShMRUdBQ1lfUkVDRUlWRVJfQVRUUklCVVRFKSBlbHNl
ICcnKSkKICAgICAgICAgcmVzdWx0LmFwcGVuZCgne1xuJykKICAgICAgICAgaWYgbm90IHJlY2Vp
dmVyLmhhc19hdHRyaWJ1dGUoTk9UX1JFRkNPVU5URURfUkVDRUlWRVJfQVRUUklCVVRFKToKICAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVm
KCp0aGlzKTtcbicpCiAKICAgICAgICAgcmVzdWx0ICs9IFthc3luY19tZXNzYWdlX3N0YXRlbWVu
dChyZWNlaXZlciwgbWVzc2FnZSkgZm9yIG1lc3NhZ2UgaW4gYXN5bmNfbWVzc2FnZXNdCisgICAg
ICAgIGlmIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRS
SUJVVEUpOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGlmIChkaXNwYXRjaE1lc3Nh
Z2UoY29ubmVjdGlvbiwgZGVjb2RlcikpXG4nKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgn
ICAgICAgICByZXR1cm47XG4nKQogICAgICAgICBpZiAocmVjZWl2ZXIuc3VwZXJjbGFzcyk6CiAg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgJXM6OmRpZFJlY2VpdmVNZXNzYWdlKGNvbm5l
Y3Rpb24sIGRlY29kZXIpO1xuJyAlIChyZWNlaXZlci5zdXBlcmNsYXNzKSkKICAgICAgICAgZWxz
ZToKQEAgLTc5NCwxMyArODAyLDE2IEBAIGRlZiBnZW5lcmF0ZV9tZXNzYWdlX2hhbmRsZXIocmVj
ZWl2ZXIpOgogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpO1xuJykKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnfVxuJykKIAotICAgIGlmIHN5bmNfbWVz
c2FnZXM6CisgICAgaWYgc3luY19tZXNzYWdlcyBvciByZWNlaXZlci5oYXNfYXR0cmlidXRlKFdB
TlRTX0RJU1BBVENIX01FU1NBR0VfQVRUUklCVVRFKToKICAgICAgICAgcmVzdWx0LmFwcGVuZCgn
XG4nKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd2b2lkICVzOjpkaWRSZWNlaXZlU3luYyVzTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwg
c3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcilcbicgJSAocmVjZWl2
ZXIubmFtZSwgcmVjZWl2ZXIubmFtZSBpZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKExFR0FDWV9S
RUNFSVZFUl9BVFRSSUJVVEUpIGVsc2UgJycpKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd7XG4n
KQogICAgICAgICBpZiBub3QgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShOT1RfUkVGQ09VTlRFRF9S
RUNFSVZFUl9BVFRSSUJVVEUpOgogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGF1dG8g
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpO1xuJykKICAgICAgICAgcmVzdWx0ICs9IFtz
eW5jX21lc3NhZ2Vfc3RhdGVtZW50KHJlY2VpdmVyLCBtZXNzYWdlKSBmb3IgbWVzc2FnZSBpbiBz
eW5jX21lc3NhZ2VzXQorICAgICAgICBpZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKFdBTlRTX0RJ
U1BBVENIX01FU1NBR0VfQVRUUklCVVRFKToKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAg
ICBpZiAoZGlzcGF0Y2hTeW5jTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29k
ZXIpKVxuJykKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICAgICAgcmV0dXJuO1xuJykK
ICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTtcbicp
CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBVTlVTRURfUEFSQU0oZGVjb2Rlcik7XG4nKQog
ICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgVU5VU0VEX1BBUkFNKHJlcGx5RW5jb2Rlcik7XG4n
KQpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgJ
KHJldmlzaW9uIDI1NzM2OSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVu
dENvZGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8V2Vi
Q29yZS9OZXR3b3JrTG9hZE1ldHJpY3MuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdGlmaWNhdGlv
bkRpcmVjdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVhbHRpbWVNZWRpYVNvdXJjZS5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyaW5nTW9kZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2Ny
b2xsU25hcE9mZnNldHNJbmZvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZXJpYWxpemVkUGxhdGZv
cm1EYXRhQ3VlVmFsdWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlcnZpY2VXb3JrZXJUeXBlcy5o
PgpAQCAtODQyLDYgKzg0MywxOCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNv
cmU6OkNvCiAgICAgPjsKIH07CiAKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29y
ZTo6UmVuZGVyaW5nTW9kZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAg
V2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpBY2Nl
bGVyYXRlZCwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLAorICAg
IFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQsCisgICAgV2Vi
Q29yZTo6UmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RVbmFjY2VsZXJhdGVkLAorICAgIFdlYkNv
cmU6OlJlbmRlcmluZ01vZGU6OlJlbW90ZUFjY2VsZXJhdGVkLAorICAgIFdlYkNvcmU6OlJlbmRl
cmluZ01vZGU6OlJlbW90ZVVuYWNjZWxlcmF0ZWQKKyAgICA+OworfTsKKwogdGVtcGxhdGU8PiBz
dHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpBdXRvcGxheUV2ZW50PiB7CiAgICAgdXNpbmcgdmFs
dWVzID0gRW51bVZhbHVlczwKICAgICAgICAgV2ViQ29yZTo6QXV0b3BsYXlFdmVudCwKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMjU3MzY5KQorKysgU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzc5OCw2ICszNzk4LDE0IEBACiAJCTUzQ0ZCQkM2
MjIyNEQxQjAwMDI2NjU0NiAvKiBUZXh0Q2hlY2tlckNvbXBsZXRpb24uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dENoZWNrZXJDb21wbGV0aW9uLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNDRkJCQzcyMjI0RDFCMDAwMjY2NTQ2IC8qIFRl
eHRDaGVja2VyQ29tcGxldGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBU
ZXh0Q2hlY2tlckNvbXBsZXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNG
M0NBQTUyMDZDNDQzRTAwODY0OTBFIC8qIE5ldHdvcmtBY3Rpdml0eVRyYWNrZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV0d29ya0FjdGl2aXR5VHJhY2tlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1MDY0MDlEMjQwNzE2MDkwMEFBRTA0
NSAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NTA2
NDA5RTI0MDcxNjA5MDBBQUUwNDUgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTU1MDY0MDlGMjQwNzE5NkEwMEFBRTA0NSAvKiBSZW5kZXJpbmdCYWNrZW5kSWRlbnRp
Zmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NTA2NDBBMDI0MDcxOUUxMDBBQUUwNDUgLyogUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1NTA2NDBBMjI0MDcxQTYxMDBBQUUwNDUgLyogUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1MDY0MEEzMjQwNzFBNjEwMEFB
RTA0NSAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTU1MDY0MEE0MjQwNzFDMjEwMEFBRTA0NSAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHku
bWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NTA2NDBB
NTI0MDcxQ0MwMDBBQUUwNDUgLyogSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEltYWdlQnVmZmVySWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1NzBBQjhGMjIwQUUzQkQ3MDBCOEJFODcgLyogU2VjS2V5UHJveHlTdG9yZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTZWNLZXlQcm94eVN0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTU3MEFCOTAwMjBCMjUxNzQwMEI4QkU4NyAvKiBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5
Q29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVBy
b3h5Q29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MEFCOTAzMjBCMjU0
MUMwMEI4QkU4NyAvKiBTZWNLZXlQcm94eVN0b3JlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gU2VjS2V5UHJveHlTdG9yZS5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTY1NDAsNiArNjU0OCw3IEBACiAJCTJEN0U0M0JGMjM3NTJDRDkwMEVBNUNB
MCAvKiBHUFUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJ
CTU1MDY0MDlDMjQwNzE1QUEwMEFBRTA0NSAvKiBncmFwaGljcyAqLywKIAkJCQkwNzkyMzEyRjIz
OUIzQjBDMDA5NTk4RTIgLyogbWVkaWEgKi8sCiAJCQkJNDE3MjE5ODgyM0I2MTI2MTAwQUU1Njg2
IC8qIHdlYnJ0YyAqLywKIAkJCQkyRDdFNDNDMDIzNzUyQ0Q5MDBFQTVDQTAgLyogR1BVUHJvY2Vz
c0Nvbm5lY3Rpb24uY3BwICovLApAQCAtNjU1NCw2ICs2NTYzLDcgQEAKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMkQ5RkIyMEQyMzc1MjA5RDAwNDlGOTM2IC8qIEVu
dHJ5UG9pbnQgKi8sCisJCQkJNTUwNjQwQTEyNDA3MUEyOTAwQUFFMDQ1IC8qIGdyYXBoaWNzICov
LAogCQkJCTJEOUZCMjA0MjM3NTIwOUQwMDQ5RjkzNiAvKiBpb3MgKi8sCiAJCQkJMkQ5RkIyMDYy
Mzc1MjA5RDAwNDlGOTM2IC8qIG1hYyAqLywKIAkJCQkwN0M3NUMxNzIzOTlBM0RCMDA4OEU2NUIg
LyogbWVkaWEgKi8sCkBAIC03Njg1LDYgKzc2OTUsMjggQEAKIAkJCXBhdGggPSBpb3M7CiAJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk1NTA2NDA5QzI0MDcxNUFBMDBBQUUwNDUg
LyogZ3JhcGhpY3MgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAor
CQkJCTU1MDY0MEE1MjQwNzFDQzAwMEFBRTA0NSAvKiBJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCAq
LywKKwkJCQk1NTA2NDA5RDI0MDcxNjA5MDBBQUUwNDUgLyogUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZC5jcHAgKi8sCisJCQkJNTUwNjQwOUUyNDA3MTYwOTAwQUFFMDQ1IC8qIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQuaCAqLywKKwkJCQk1NTA2NDBBMDI0MDcxOUUxMDBBQUUwNDUgLyogUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbiAqLywKKwkJCQk1NTA2NDA5RjI0MDcxOTZBMDBBQUUw
NDUgLyogUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCAqLywKKwkJCSk7CisJCQlwYXRoID0g
Z3JhcGhpY3M7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQk1NTA2NDBBMTI0
MDcxQTI5MDBBQUUwNDUgLyogZ3JhcGhpY3MgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJ
CWNoaWxkcmVuID0gKAorCQkJCTU1MDY0MEEyMjQwNzFBNjEwMEFBRTA0NSAvKiBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkuY3BwICovLAorCQkJCTU1MDY0MEEzMjQwNzFBNjEwMEFBRTA0NSAv
KiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCAqLywKKwkJCQk1NTA2NDBBNDI0MDcxQzIx
MDBBQUUwNDUgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluICovLAor
CQkJKTsKKwkJCXBhdGggPSBncmFwaGljczsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJ
CX07CiAJCTU3MEFCOEY2MjBBRTgxQUIwMEI4QkU4NyAvKiBjb2NvYSAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcAkocmV2aXNpb24gMjU3
MzY5KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDMyICs3NSwzOCBAQCBTYW1wbGVCdWZmZXJEaXNw
bGF5TGF5ZXJNYW5hZ2VyJiBHUFVQcm9jCiB9CiAjZW5kaWYKIAotdm9pZCBHUFVQcm9jZXNzQ29u
bmVjdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJ
UEM6OkRlY29kZXImIGRlY29kZXIpCitib29sIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRj
aE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29k
ZXIpCiB7CiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2Vz
OjpNZWRpYVBsYXllclByaXZhdGVSZW1vdGU6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAg
ICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zdXBwbGVtZW50PFJlbW90ZU1lZGlhUGxheWVy
TWFuYWdlcj4oKS0+ZGlkUmVjZWl2ZVBsYXllck1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAjaWYgRU5B
QkxFKE1FRElBX1NUUkVBTSkKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkg
PT0gTWVzc2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1l
KCkpIHsKICAgICAgICAgaWYgKGF1dG8qIGNhcHR1cmVNYW5hZ2VyID0gV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkuc3VwcGxlbWVudDxVc2VyTWVkaWFDYXB0dXJlTWFuYWdlcj4oKSkKICAgICAgICAg
ICAgIGNhcHR1cmVNYW5hZ2VyLT5kaWRSZWNlaXZlTWVzc2FnZUZyb21HUFVQcm9jZXNzKGNvbm5l
Y3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICNpZiBQTEFURk9STShDT0NPQSkgJiYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIGlm
IChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6U2FtcGxlQnVmZmVy
RGlzcGxheUxheWVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgc2FtcGxlQnVm
ZmVyRGlzcGxheUxheWVyTWFuYWdlcigpLmRpZFJlY2VpdmVMYXllck1lc3NhZ2UoY29ubmVjdGlv
biwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKSAmJiBFTkFCTEUoVklERU9fVFJBQ0spCiAjZW5k
aWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKICNpZiBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9S
TShDT0NPQSkKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2Fn
ZXM6OkxpYldlYlJUQ0NvZGVjczo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLmxpYldlYlJUQ0NvZGVjcygpLmRpZFJlY2VpdmVNZXNzYWdl
KGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KICNlbmRpZgorICAgIHJldHVybiBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNw
YXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7Cit9CisKK2Jvb2wgR1BVUHJvY2Vzc0Nv
bm5lY3Rpb246OmRpc3BhdGNoU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9u
LCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiBy
ZXBseUVuY29kZXIpCit7CisgICAgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck1hcCgpLmRpc3BhdGNo
U3luY01lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQ
VVByb2Nlc3NDb25uZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oCShyZXZpc2lvbiAyNTczNjkpCisrKyBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKICNpbmNs
dWRlICJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyTWFwLmgiCiAjaW5j
bHVkZSAiU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlci5oIgogI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC00Nyw2ICs0
OCw3IEBAIHB1YmxpYzoKICAgICB+R1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKTsKICAgICAKICAgICBJ
UEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24oKSB7IHJldHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7
IH0KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYgbWVzc2FnZVJlY2VpdmVyTWFwKCkgeyBy
ZXR1cm4gbV9tZXNzYWdlUmVjZWl2ZXJNYXA7IH0KIAogI2lmIEhBVkUoQVVESVRfVE9LRU4pCiAg
ICAgdm9pZCBzZXRBdWRpdFRva2VuKE9wdGlvbmFsPGF1ZGl0X3Rva2VuX3Q+IGF1ZGl0VG9rZW4p
IHsgbV9hdWRpdFRva2VuID0gYXVkaXRUb2tlbjsgfQpAQCAtNjIsMTAgKzY0LDE1IEBAIHByaXZh
dGU6CiAgICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKICAgICB2b2lkIGRpZENsb3NlKElQ
Qzo6Q29ubmVjdGlvbiYpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBD
OjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgZmluYWw7CisgICAgdm9pZCBkaWRSZWNlaXZl
U3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVf
cHRyPElQQzo6RW5jb2Rlcj4mKSBmaW5hbDsKICAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2
ZXJOYW1lLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFtZSkgb3ZlcnJpZGU7CiAKKyAg
ICBib29sIGRpc3BhdGNoTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsK
KyAgICBib29sIGRpc3BhdGNoU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNv
ZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKTsKKwogICAgIC8vIFRoZSBjb25u
ZWN0aW9uIGZyb20gdGhlIHdlYiBwcm9jZXNzIHRvIHRoZSBHUFUgcHJvY2Vzcy4KICAgICBSZWY8
SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247CisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJN
YXAgbV9tZXNzYWdlUmVjZWl2ZXJNYXA7CiAKICNpZiBIQVZFKEFVRElUX1RPS0VOKQogICAgIE9w
dGlvbmFsPGF1ZGl0X3Rva2VuX3Q+IG1fYXVkaXRUb2tlbjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5t
ZXNzYWdlcy5pbgkocmV2aXNpb24gMjU3MzY5KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAt
MjIsNyArMjIsNyBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCi1tZXNzYWdlcyAtPiBH
UFVQcm9jZXNzQ29ubmVjdGlvbiB7CittZXNzYWdlcyAtPiBHUFVQcm9jZXNzQ29ubmVjdGlvbiBX
YW50c0Rpc3BhdGNoTWVzc2FnZSB7CiAKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9JbWFnZUJ1ZmZlcklkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0ltYWdlQnVmZmVySWRlbnRpZmll
ci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQor
CisjaW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2VudW0gSW1hZ2VCdWZmZXJJZGVudGlmaWVyVHlwZSB7IH07Cit1c2luZyBJbWFnZUJ1ZmZl
cklkZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPEltYWdlQnVmZmVySWRlbnRpZmllclR5cGU+
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VT
UykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCIK
KworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkdQVVByb2Nlc3NDb25uZWN0
aW9uLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZE1lc3NhZ2VzLmgiCisjaW5j
bHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXMuaCIKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdGQ6OnVuaXF1ZV9wdHI8
UmVtb3RlUmVuZGVyaW5nQmFja2VuZD4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCkK
K3sKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ+KG5l
dyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCkpOworfQorCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCkKK3sKKyAgICAvLyBSZWdpc3RlciBpdHNlbGYgYXMg
YSBNZXNzYWdlUmVjZWl2ZXIgaW4gdGhlIEdQVVByb2Nlc3NDb25uZWN0aW9uLgorICAgIElQQzo6
TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAgPSBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLm1lc3NhZ2VSZWNlaXZlck1hcCgp
OworICAgIG1lc3NhZ2VSZWNlaXZlck1hcC5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9yZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpLCAqdGhpcyk7CisKKyAgICAvLyBDcmVhdGUgdGhl
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS4KKyAgICBzZW5kKE1lc3NhZ2VzOjpHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpDcmVhdGVSZW5kZXJpbmdCYWNrZW5kKG1fcmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIpLCAwKTsKK30KKworUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6flJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQoKQoreworICAgIC8vIFVuLXJlZ2lzdGVyIGl0c2VsZiBhcyBhIE1l
c3NhZ2VSZWNlaXZlci4KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYgbWVzc2FnZVJlY2Vp
dmVyTWFwID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rp
b24oKS5tZXNzYWdlUmVjZWl2ZXJNYXAoKTsKKyAgICBtZXNzYWdlUmVjZWl2ZXJNYXAucmVtb3Zl
TWVzc2FnZVJlY2VpdmVyKCp0aGlzKTsKKworICAgIC8vIFJlbGVhc2UgdGhlIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS4KKyAgICBzZW5kKE1lc3NhZ2VzOjpHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjpSZWxlYXNlUmVuZGVyaW5nQmFja2VuZChtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyKSwgMCk7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiogUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdAoreworICAgIHJldHVybiAmV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCk7
Cit9CisKK3VpbnQ2NF90IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJEZXN0
aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRp
Zmllci50b1VJbnQ2NCgpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIFJl
bmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQsIENvbG9yU3BhY2UpCit7CisgICAgc3dp
dGNoIChyZW5kZXJpbmdNb2RlKSB7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGVBY2Nl
bGVyYXRlZDoKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90ZVVuYWNjZWxlcmF0ZWQ6Cisg
ICAgICAgIC8vIEZJWE1FOiBDcmVhdGUgdGhlIHJlbW90ZSBJbWFnZUJ1ZmZlcgorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ6OnJlbGVhc2VJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1h
Z2VCdWZmZXJJZGVudGlmaWVyKQoreworICAgIC8vIENyZWF0ZUltYWdlQnVmZmVyIG1lc3NhZ2Ug
c2hvdWxkIGhhdmUgYmVlbiByZWNlaXZlZCBiZWZvcmUgdGhpcyBvbmUuCisgICAgYm9vbCBmb3Vu
ZCA9IG1faW1hZ2VCdWZmZXJNYXAucmVtb3ZlKGltYWdlQnVmZmVySWRlbnRpZmllcik7CisgICAg
QVNTRVJUX1VOVVNFRChmb3VuZCwgZm91bmQpOworCisgICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5OjpSZWxlYXNlSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXJJZGVu
dGlmaWVyKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpJbmRleDogU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVy
LmgiCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJpbmdNb2RlLmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kCisgICAgOiBw
cml2YXRlIElQQzo6TWVzc2FnZVNlbmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNl
aXZlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kPiBjcmVhdGUoKTsKKworICAgIH5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCk7CisK
KyAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIuCisgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdl
U2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIHVpbnQ2NF90IG1lc3NhZ2VT
ZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6
OkZsb2F0U2l6ZSYsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSk7CisgICAgdm9pZCByZWxlYXNlSW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXJJZGVudGlmaWVyKTsKKworcHJpdmF0ZToKKyAgICBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kKCk7CisgICAgICAgIAorICAgIHVzaW5nIEltYWdlQnVmZmVyTWFwID0gSGFzaE1hcDxJbWFn
ZUJ1ZmZlcklkZW50aWZpZXIsIFdlYkNvcmU6OkltYWdlQnVmZmVyKj47CisgICAgSW1hZ2VCdWZm
ZXJNYXAgbV9pbWFnZUJ1ZmZlck1hcDsKKyAgICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBt
X3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHsgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI6
OmdlbmVyYXRlKCkgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
RU5BQkxFKEdQVV9QUk9DRVNTKQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC5tZXNzYWdlcy5pbgkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4JKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyOSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFy
ZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IK
KyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCittZXNzYWdlcyAtPiBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kIE5vdFJlZkNvdW50ZWQgeworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUo
R1BVX1BST0NFU1MpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisK
KyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworZW51bSBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllclR5cGUgeyB9OwordXNpbmcgUmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPFJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyVHlwZT47CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5B
QkxFKEdQVV9QUk9DRVNTKQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRp
YS9UZXh0VHJhY2tQcml2YXRlUmVtb3RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL21lZGlhL1RleHRUcmFja1ByaXZhdGVSZW1vdGUuY3BwCShyZXZpc2lv
biAyNTczNjkpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1RleHRUcmFj
a1ByaXZhdGVSZW1vdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMSArMjksMTMgQEAKIAog
I2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAorI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKICNp
bmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVSZW1vdGUuaCIKICNpbmNsdWRlICJSZW1vdGVNZWRp
YVBsYXllclByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVk
Lmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIFRl
eHRUcmFja1ByaXZhdGVSZW1vdGU6OlRleHRUcmFja1ByaXZhdGVSZW1vdGUoTWVkaWFQbGF5ZXJQ
cml2YXRlUmVtb3RlJiBwbGF5ZXIsIFRyYWNrUHJpdmF0ZVJlbW90ZUlkZW50aWZpZXIgaWRlbmRp
ZmllciwgVGV4dFRyYWNrUHJpdmF0ZVJlbW90ZUNvbmZpZ3VyYXRpb24mJiBjb25maWd1cmF0aW9u
KQogICAgIDogV2ViQ29yZTo6SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZShjb25maWd1cmF0aW9uLmN1
ZUZvcm1hdCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvVGV4dFRy
YWNrUHJpdmF0ZVJlbW90ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvbWVkaWEvVGV4dFRyYWNrUHJpdmF0ZVJlbW90ZS5oCShyZXZpc2lvbiAyNTczNjkpCisr
KyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1RleHRUcmFja1ByaXZhdGVSZW1v
dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsMTAgQEAKICNpbmNsdWRlICJUcmFja1By
aXZhdGVSZW1vdGVJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9JbmJhbmRUZXh0VHJh
Y2tQcml2YXRlLmg+CiAKK25hbWVzcGFjZSBJUEMgeworY2xhc3MgRGF0YVJlZmVyZW5jZTsKK30K
KwogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR2VuZXJpY0N1ZURhdGE7CiBjbGFzcyBJU09X
ZWJWVFRDdWU7CkBAIC01Miw5ICs1Niw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZERhdGFDdWUo
TWVkaWFUaW1lJiYgc3RhcnQsIE1lZGlhVGltZSYmIGVuZCwgSVBDOjpEYXRhUmVmZXJlbmNlJiYp
OwogCiAjaWYgRU5BQkxFKERBVEFDVUVfVkFMVUUpCi0gICAgdm9pZCBhZGREYXRhQ3VlV2l0aFR5
cGUoTWVkaWFUaW1lJiYgc3RhcnQsIE1lZGlhVGltZSYmIGVuZCwgU2VyaWFsaXplZFBsYXRmb3Jt
RGF0YUN1ZVZhbHVlJiYsIFN0cmluZyYmKTsKLSAgICB2b2lkIHVwZGF0ZURhdGFDdWUoTWVkaWFU
aW1lJiYgc3RhcnQsIE1lZGlhVGltZSYmIGVuZCwgU2VyaWFsaXplZFBsYXRmb3JtRGF0YUN1ZVZh
bHVlJiYpOwotICAgIHZvaWQgcmVtb3ZlRGF0YUN1ZShNZWRpYVRpbWUmJiBzdGFydCwgTWVkaWFU
aW1lJiYgZW5kLCBTZXJpYWxpemVkUGxhdGZvcm1EYXRhQ3VlVmFsdWUmJik7CisgICAgdm9pZCBh
ZGREYXRhQ3VlV2l0aFR5cGUoTWVkaWFUaW1lJiYgc3RhcnQsIE1lZGlhVGltZSYmIGVuZCwgV2Vi
Q29yZTo6U2VyaWFsaXplZFBsYXRmb3JtRGF0YUN1ZVZhbHVlJiYsIFN0cmluZyYmKTsKKyAgICB2
b2lkIHVwZGF0ZURhdGFDdWUoTWVkaWFUaW1lJiYgc3RhcnQsIE1lZGlhVGltZSYmIGVuZCwgV2Vi
Q29yZTo6U2VyaWFsaXplZFBsYXRmb3JtRGF0YUN1ZVZhbHVlJiYpOworICAgIHZvaWQgcmVtb3Zl
RGF0YUN1ZShNZWRpYVRpbWUmJiBzdGFydCwgTWVkaWFUaW1lJiYgZW5kLCBXZWJDb3JlOjpTZXJp
YWxpemVkUGxhdGZvcm1EYXRhQ3VlVmFsdWUmJik7CiAjZW5kaWYKIAogICAgIHZvaWQgYWRkR2Vu
ZXJpY0N1ZShXZWJDb3JlOjpHZW5lcmljQ3VlRGF0YSYpOwpJbmRleDogU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS93ZWJydGMvTWVkaWFSZWNvcmRlclByaXZhdGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL01lZGlhUmVjb3JkZXJQcml2
YXRlLmNwcAkocmV2aXNpb24gMjU3MzY5KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS93ZWJydGMvTWVkaWFSZWNvcmRlclByaXZhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw5
ICszOSw4IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1dlYkF1ZGlvQnVmZmVyTGlzdC5oPgogCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
LQogbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogTWVkaWFS
ZWNvcmRlclByaXZhdGU6Ok1lZGlhUmVjb3JkZXJQcml2YXRlKGNvbnN0IE1lZGlhU3RyZWFtUHJp
dmF0ZSYgc3RyZWFtKQogICAgIDogbV9pZGVudGlmaWVyKE1lZGlhUmVjb3JkZXJJZGVudGlmaWVy
OjpnZW5lcmF0ZSgpKQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS93ZWJydGMv
TWVkaWFSZWNvcmRlclByb3ZpZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL3dlYnJ0Yy9NZWRpYVJlY29yZGVyUHJvdmlkZXIuY3BwCShyZXZpc2lvbiAy
NTczNjkpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9NZWRpYVJlY29y
ZGVyUHJvdmlkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw5ICszMSw4IEBACiAjaW5jbHVk
ZSAiTWVkaWFSZWNvcmRlclByaXZhdGUuaCIKICNpbmNsdWRlIDxXZWJDb3JlL01lZGlhUmVjb3Jk
ZXJQcml2YXRlLmg+CiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29y
ZTo6TWVkaWFSZWNvcmRlclByaXZhdGU+IE1lZGlhUmVjb3JkZXJQcm92aWRlcjo6Y3JlYXRlTWVk
aWFSZWNvcmRlclByaXZhdGUoY29uc3QgTWVkaWFTdHJlYW1Qcml2YXRlJiBzdHJlYW0pCiB7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9TYW1wbGVCdWZmZXJEaXNw
bGF5TGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
d2VicnRjL1NhbXBsZUJ1ZmZlckRpc3BsYXlMYXllci5jcHAJKHJldmlzaW9uIDI1NzM2OSkKKysr
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL1NhbXBsZUJ1ZmZlckRpc3BsYXlM
YXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDkgKzM1LDggQEAKICNpbmNsdWRlICJTYW1w
bGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCiBuYW1lc3BhY2UgV2ViS2l0
IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBzdGQ6OnVuaXF1ZV9wdHI8U2FtcGxlQnVm
ZmVyRGlzcGxheUxheWVyPiBTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXI6OmNyZWF0ZShTYW1wbGVC
dWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyJiBtYW5hZ2VyLCBDbGllbnQmIGNsaWVudCwgYm9vbCBo
aWRlUm9vdExheWVyLCBJbnRTaXplIHNpemUpCiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL3dlYnJ0Yy9TYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9TYW1wbGVCdWZm
ZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyLmNwcAkocmV2aXNpb24gMjU3MzY5KQorKysgU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS93ZWJydGMvU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDggQEAKIAogI2lmIFBMQVRGT1JNKENP
Q09BKSAmJiBFTkFCTEUoR1BVX1BST0NFU1MpICYmIEVOQUJMRShWSURFT19UUkFDSykgJiYgRU5B
QkxFKE1FRElBX1NUUkVBTSkKIAotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KIG5hbWVzcGFj
ZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIHZvaWQgU2FtcGxlQnVmZmVy
RGlzcGxheUxheWVyTWFuYWdlcjo6ZGlkUmVjZWl2ZUxheWVyTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcikKIHsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuY3BwCShyZXZpc2lvbiAyNTczNjkpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzksNiArMzksNyBAQAogI2luY2x1ZGUgIk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVz
c2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKICNpbmNsdWRl
ICJQYWdlQmFubmVyLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIgogI2lu
Y2x1ZGUgIlVzZXJEYXRhLmgiCiAjaW5jbHVkZSAiV2ViQ29sb3JDaG9vc2VyLmgiCiAjaW5jbHVk
ZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCkBAIC04ODAsMzAgKzg4MSwyMiBAQCBHcmFwaGlj
c0xheWVyRmFjdG9yeSogV2ViQ2hyb21lQ2xpZW50OjpnCiB9CiAKICNpZiBVU0UoUkVRVUVTVF9B
TklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQotCiBSZWZQdHI8RGlzcGxheVJlZnJlc2hN
b25pdG9yPiBXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihQbGF0
Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQpIGNvbnN0CiB7CiAgICAgaWYgKGF1dG8qIGRyYXdpbmdB
cmVhID0gbV9wYWdlLmRyYXdpbmdBcmVhKCkpCiAgICAgICAgIHJldHVybiBkcmF3aW5nQXJlYS0+
Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKGRpc3BsYXlJRCk7CiAgICAgcmV0dXJuIG51bGxw
dHI7CiB9Ci0KICNlbmRpZgogCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IFdlYkNocm9t
ZUNsaWVudDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlLCBmbG9hdCwgQ29sb3JTcGFjZSkgY29uc3QKKyNpZiBFTkFCTEUoR1BV
X1BST0NFU1MpCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IFdlYkNocm9tZUNsaWVudDo6
Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNl
KSBjb25zdAogewotICAgIHN3aXRjaCAocmVuZGVyaW5nTW9kZSkgewotICAgIGNhc2UgUmVuZGVy
aW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQ6Ci0gICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1v
dGVVbmFjY2VsZXJhdGVkOgotICAgICAgICAvLyBGSVhNRTogQ3JlYXRlIHRoZSByZW1vdGUgSW1h
Z2VCdWZmZXIKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBkZWZhdWx0OgotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICBpZiAoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZCkKKyAgICAgICAgbV9yZW1vdGVSZW5kZXJp
bmdCYWNrZW5kID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCk7CisgICAgcmV0dXJu
IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZC0+Y3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVy
aW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKTsKIH0KKyNlbmRpZgogCiB2b2lk
IFdlYkNocm9tZUNsaWVudDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUmLCBHcmFwaGlj
c0xheWVyKiBsYXllcikKIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHJldmlzaW9uIDI1NzM2
OSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQCBlbnVtIGNsYXNzIFN0b3Jh
Z2VBY2Nlc3NXYXNHcmFudGVkIDogYm9vCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOwogY2xhc3MgV2ViRnJhbWU7CiBjbGFzcyBXZWJQYWdlOwog
CkBAIC0xMjMsOCArMTI0LDYgQEAgcHJpdmF0ZToKICAgICBXZWJDb3JlOjpJbnRQb2ludCBhY2Nl
c3NpYmlsaXR5U2NyZWVuVG9Sb290Vmlldyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0
IGZpbmFsOwogICAgIFdlYkNvcmU6OkludFJlY3Qgcm9vdFZpZXdUb0FjY2Vzc2liaWxpdHlTY3Jl
ZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIGNvbnN0IGZpbmFsOwogCi0gICAgc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBXZWJD
b3JlOjpGbG9hdFNpemUmLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UpIGNvbnN0IGZpbmFsOwotCiAgICAgdm9pZCBkaWRG
aW5pc2hMb2FkaW5nSW1hZ2VGb3JFbGVtZW50KFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQmKSBm
aW5hbDsKIAogICAgIFBsYXRmb3JtUGFnZUNsaWVudCBwbGF0Zm9ybVBhZ2VDbGllbnQoKSBjb25z
dCBmaW5hbDsKQEAgLTIzNSw2ICsyMzQsMTAgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V2ViQ29y
ZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoV2Vi
Q29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpIGNvbnN0IGZpbmFsOwogI2VuZGlmCiAKKyNpZiBFTkFC
TEUoR1BVX1BST0NFU1MpCisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkltYWdlQnVmZmVy
PiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBXZWJDb3JlOjpS
ZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2Up
IGNvbnN0IGZpbmFsOworI2VuZGlmCisKICAgICBDb21wb3NpdGluZ1RyaWdnZXJGbGFncyBhbGxv
d2VkQ29tcG9zaXRpbmdUcmlnZ2VycygpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Q29tcG9zaXRpbmdUcmlnZ2VyRmxhZ3M+KApAQCAtMzkyLDYgKzM5NSw3
IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBSZWZQdHI8V2ViRnJhbWU+IG1fY2FjaGVkRnJhbWVT
ZXRMYXJnZXN0RnJhbWU7CiAgICAgbXV0YWJsZSBib29sIG1fY2FjaGVkTWFpbkZyYW1lSGFzSG9y
aXpvbnRhbFNjcm9sbGJhciB7IGZhbHNlIH07CiAgICAgbXV0YWJsZSBib29sIG1fY2FjaGVkTWFp
bkZyYW1lSGFzVmVydGljYWxTY3JvbGxiYXIgeyBmYWxzZSB9OworICAgIG11dGFibGUgc3RkOjp1
bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ+IG1fcmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDsKIAogICAgIFdlYlBhZ2UmIG1fcGFnZTsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391806</attachid>
            <date>2020-02-26 16:39:01 -0800</date>
            <delta_ts>2020-02-26 17:52:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207198-20200226163859.patch</filename>
            <type>text/plain</type>
            <size>72285</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1NzM2OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDIwLTAyLTI2ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50
IHRoZSByZW1vdGUgUmVuZGVyaW5nQmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3MTk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlciBjb25zdCk6
CisgICAgICAgIE1ha2UgSFRNTENhbnZhc0VsZW1lbnQgYmUgYWJsZSB0byBjcmVhdGUgYSByZW1v
dGUgSW1hZ2VCdWZmZXIuCisKIDIwMjAtMDItMjUgIERvbiBPbG1zdGVhZCAgPGRvbi5vbG1zdGVh
ZEBzb255LmNvbT4KIAogICAgICAgICBbV2luQ2Fpcm9dIEZpeCBidWlsZCBhZnRlciByZXZpc2lv
bnMgMjU3MzU3IGFuZCAyNTczNTQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZh
c0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZh
c0VsZW1lbnQuY3BwCShyZXZpc2lvbiAyNTczNjkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxDYW52YXNFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODk1LDggKzg5NSwxMyBAQCB2
b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlCiAgICAgLy8gRklYTUU6IEFk
ZCBhIG5ldyBzZXR0aW5nIGZvciBEaXNwbGF5TGlzdCBkcmF3aW5nIG9uIGNhbnZhcy4KICAgICBi
b29sIHVzZXNEaXNwbGF5TGlzdERyYXdpbmcgPSBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcudmFs
dWVPcihkb2N1bWVudCgpLnNldHRpbmdzKCkuZGlzcGxheUxpc3REcmF3aW5nRW5hYmxlZCgpKTsK
IAorICAgIC8vIEZJWE1FOiBBZGQgYSBuZXcgc2V0dGluZyBmb3IgcmVtb3RlIGRyYXdpbmcgb24g
Y2FudmFzLgorICAgIGJvb2wgdXNlc1JlbW90ZURyYXdpbmcgPSBmYWxzZTsKKwogICAgIFJlbmRl
cmluZ01vZGUgcmVuZGVyaW5nTW9kZTsKLSAgICBpZiAodXNlc0Rpc3BsYXlMaXN0RHJhd2luZykK
KyAgICBpZiAodXNlc1JlbW90ZURyYXdpbmcpCisgICAgICAgIHJlbmRlcmluZ01vZGUgPSBzaG91
bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBSZW5kZXJpbmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRlZCA6
IFJlbmRlcmluZ01vZGU6OlJlbW90ZVVuYWNjZWxlcmF0ZWQ7CisgICAgZWxzZSBpZiAodXNlc0Rp
c3BsYXlMaXN0RHJhd2luZykKICAgICAgICAgcmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJh
dGUoc2l6ZSgpKSA/IFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQgOiBSZW5k
ZXJpbmdNb2RlOjpEaXNwbGF5TGlzdFVuYWNjZWxlcmF0ZWQ7CiAgICAgZWxzZQogICAgICAgICBy
ZW5kZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxlcmF0ZShzaXplKCkpID8gUmVuZGVyaW5nTW9kZTo6
QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwpJbmRleDogU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDI1NzUyNCkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTA2IEBACisyMDIwLTAyLTI2ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNh
Ym91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IHRoZSByZW1vdGUgUmVu
ZGVyaW5nQmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjA3MTk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCBhbmQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5IHdpbGwgYmUgcmVzcG9uc2libGUKKyAgICAgICAgZm9yICBjcmVhdGluZyB0aGUgdHdvIHBh
cnRzIG9mIHRoZSBJbWFnZUJ1ZmZlcjogUmVtb3RlSW1hZ2VCdWZmZXIgYW5kCisgICAgICAgIFJl
bW90ZUltYWdlQnVmZmVyUHJveHkuIFRoZXkgd2lsbCBhbHNvIGJlIHJlc3BvbnNpYmxlIGZvciBz
ZW5kaW5nIGFuZAorICAgICAgICByZWNlaXZpbmcgdGhlIG1lc3NhZ2VzIGZvciB0aGUgcmVtb3Rl
IHRoZSBJbWFnZUJ1ZmZlcnMuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBEZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2ZWRTb3Vy
Y2VzLW91dHB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisK
KyAgICAgICAgKiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjcmVhdGVSZW5kZXJpbmdC
YWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cmVs
ZWFzZVJlbmRlcmluZ0JhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjpkaXNwYXRjaE1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpkaXNwYXRjaFN5bmNNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlU3lu
Y01lc3NhZ2UpOiBEZWxldGVkLgorICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5oOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OjptZXNzYWdlUmVjZWl2ZXJNYXApOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjp3ZWJQcm9jZXNzSWRlbnRpZmllciBjb25zdCk6CisgICAgICAgIEdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MgZGlzcGF0Y2hlcyBtZXNzYWdlcyB0byBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkuCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MubWVzc2FnZXMuaW46CisgICAgICAgIEFkZGluZyB0aGUgJ1dhbnRzRGlzcGF0Y2hNZXNz
YWdlJyBhdHRyaWJ1dGUgd2lsbCBmb3JjZSB0aGUgbWVzc2FnZXMucHkKKyAgICAgICAgdG8gZ2Vu
ZXJhdGUgY29kZSB3aGljaCBjYWxscyBkaXNwYXRjaE1lc3NhZ2UoKSBhbmQgZGlkUmVjZWl2ZVN5
bmNNZXNzYWdlKCkKKyAgICAgICAgd2hlbiBtZXNzYWdlcyBhcmUgcmVjZWl2ZWQuCisKKyAgICAg
ICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzOiBBZGRlZC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL2dy
YXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojp+
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVNlbmRlckRl
c3RpbmF0aW9uSUQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHk6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5OjpyZWxlYXNlSW1hZ2VCdWZmZXIpOgorICAgICAgICAqIEdQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lmg6IEFkZGVkLgorICAg
ICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1l
c3NhZ2VzLmluOiBBZGRlZC4KKyAgICAgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5IGlz
IHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0aGUgcmVtb3RlCisgICAgICAgIEltYWdlQnVmZmVy
IHByb3h5IGluIHRoZSBHUFVQcm9jZXNzIHNpZGUuIEl0IGhvbGRzIGl0IGluIGEgSGFzaE1hcCBv
ZgorICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGluZGV4ZWQgYnkgdGhlIElt
YWdlQnVmZmVySWRlbnRpZmllci4KKworICAgICAgICAqIEdQVVByb2Nlc3Mvd2VicnRjL1JlbW90
ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyLmNwcDoKKyAgICAgICAgKiBHUFVQcm9jZXNz
L3dlYnJ0Yy9SZW1vdGVNZWRpYVJlY29yZGVyLmNwcDoKKyAgICAgICAgKiBHUFVQcm9jZXNzL3dl
YnJ0Yy9SZW1vdGVNZWRpYVJlY29yZGVyTWFuYWdlci5jcHA6CisgICAgICAgICogR1BVUHJvY2Vz
cy93ZWJydGMvUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyLmNwcDoKKyAgICAgICAgVW5p
ZmllZCBzb3VyY2VzIGdhcmRlbmluZy4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21lc3Nh
Z2VzLnB5OgorICAgICAgICBIYW5kbGUgJ1dhbnRzRGlzcGF0Y2hNZXNzYWdlJyBhdHRyaWJ1dGUu
CisKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgICog
U291cmNlcy50eHQ6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBXZWJL
aXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKworICAgICAgICAqIFdlYlByb2Nlc3MvR1BV
L0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nv
bm5lY3Rpb246OmRpc3BhdGNoTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3ND
b25uZWN0aW9uOjpkaXNwYXRjaFN5bmNNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6R1BVUHJv
Y2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVNZXNzYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oOgorICAgICAgICAoV2ViS2l0OjpH
UFVQcm9jZXNzQ29ubmVjdGlvbjo6bWVzc2FnZVJlY2VpdmVyTWFwKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbjoKKyAgICAgICAgR1BV
Q29ubmVjdGlvbiBkaXNwYXRjaGVzIG1lc3NhZ2VzIHRvIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQu
CisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljczogQWRkZWQuCisgICAgICAgICog
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmg6IEFkZGVkLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24gY29uc3QpOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUlt
YWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6cmVs
ZWFzZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW46IEFkZGVkLgorICAgICAg
ICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmg6
IEFkZGVkLgorICAgICAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIGlzIHJlc3BvbnNpYmxlIGZv
ciBjcmVhdGluZyB0aGUgcmVtb3RlIEltYWdlQnVmZmVyCisgICAgICAgIGluIHRoZSBXZWJQcm9j
ZXNzIHNpZGUuIEl0IGhvbGRzIGl0IGluIGEgSGFzaE1hcCBvZiBJbWFnZUJ1ZmZlciogaW5kZXhl
ZAorICAgICAgICBieSB0aGUgSW1hZ2VCdWZmZXJJZGVudGlmaWVyLgorCisgICAgICAgICogV2Vi
UHJvY2Vzcy9HUFUvbWVkaWEvVGV4dFRyYWNrUHJpdmF0ZVJlbW90ZS5jcHA6CisgICAgICAgICog
V2ViUHJvY2Vzcy9HUFUvbWVkaWEvVGV4dFRyYWNrUHJpdmF0ZVJlbW90ZS5oOgorICAgICAgICAq
IFdlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9NZWRpYVJlY29yZGVyUHJpdmF0ZS5jcHA6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9HUFUvd2VicnRjL01lZGlhUmVjb3JkZXJQcm92aWRlci5jcHA6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9HUFUvd2VicnRjL1NhbXBsZUJ1ZmZlckRpc3BsYXlMYXllci5jcHA6
CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvd2VicnRjL1NhbXBsZUJ1ZmZlckRpc3BsYXlMYXll
ck1hbmFnZXIuY3BwOgorICAgICAgICBVbmlmaWVkIHNvdXJjZXMgZ2FyZGVuaW5nLgorCisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRv
ciBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6Y3JlYXRlSW1hZ2VC
dWZmZXIgY29uc3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50Lmg6CisgICAgICAgIENyZWF0ZSB0aGUgcmVtb3RlIEltYWdlQnVmZmVyLgorCiAy
MDIwLTAyLTI2ICBEb24gT2xtc3RlYWQgIDxkb24ub2xtc3RlYWRAc29ueS5jb20+CiAKICAgICAg
ICAgQWxsb3cgc2V0dGluZyBvZiBzdGFjayBzaXplcyBmb3IgdGhyZWFkcwpJbmRleDogU291cmNl
L1dlYktpdC9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NNYWtl
TGlzdHMudHh0CShyZXZpc2lvbiAyNTczNjkpCisrKyBTb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC03OSw2ICs3OSw3IEBAIHNldChXZWJLaXRfSU5DTFVERV9E
SVJFQ1RPUklFUwogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvR2FtZXBhZCIKICAgICAi
JHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL0dlb2xvY2F0aW9uIgogICAgICIke1dFQktJVF9ESVJ9
L1dlYlByb2Nlc3MvR1BVIgorICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvR1BVL21lZGlhIgogICAgICIke1dF
QktJVF9ESVJ9L1dlYlByb2Nlc3MvR1BVL3dlYnJ0YyIKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQ
cm9jZXNzL0ljb25EYXRhYmFzZSIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMt
aW5wdXQueGNmaWxlbGlzdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3Vy
Y2VzLWlucHV0LnhjZmlsZWxpc3QJKHJldmlzaW9uIDI1NzM2OSkKKysrIFNvdXJjZS9XZWJLaXQv
RGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAkod29ya2luZyBjb3B5KQpAQCAtMTUsNiAr
MTUsNyBAQCAkKEpBVkFTQ1JJUFRDT1JFX1BSSVZBVEVfSEVBREVSU19ESVIpL21vCiAkKEpBVkFT
Q1JJUFRDT1JFX1BSSVZBVEVfSEVBREVSU19ESVIpL3h4ZC5wbAogJChQUk9KRUNUX0RJUikvR1BV
UHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1Rf
RElSKS9HUFVQcm9jZXNzL0dQVVByb2Nlc3MubWVzc2FnZXMuaW4KKyQoUFJPSkVDVF9ESVIpL0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmlu
CiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL21hYy9jb20uYXBwbGUuV2ViS2l0LkdQVVByb2Nl
c3Muc2IuaW4KICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5
ZXJNYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvbWVk
aWEvUmVtb3RlTWVkaWFQbGF5ZXJQcm94eS5tZXNzYWdlcy5pbgpAQCAtMTA3LDYgKzEwOCw3IEBA
ICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvQ2FjaGUvV2ViQ2FjaGUKICQoUFJPSkVDVF9ESVIp
L1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXIu
bWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvRnVsbFNjcmVlbi9XZWJGdWxs
U2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9HUFUv
R1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4KKyQoUFJPSkVDVF9ESVIpL1dlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KICQoUFJP
SkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL21lZGlhL01lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZS5t
ZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVk
aWFQbGF5ZXJNYW5hZ2VyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dQ
VS9tZWRpYS9UZXh0VHJhY2tQcml2YXRlUmVtb3RlLm1lc3NhZ2VzLmluCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QJKHJldmlzaW9uIDI1
NzM2OSkKKysrIFNvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QJ
KHdvcmtpbmcgY29weSkKQEAgLTE1NCw2ICsxNTQsMTIgQEAgJChCVUlMVF9QUk9EVUNUU19ESVIp
L0Rlcml2ZWRTb3VyY2VzL1dlYgogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2Vz
L1dlYktpdDIvUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxU
X1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVPYmplY3RSZWdpc3Ry
eU1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQy
L1JlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXNSZXBsaWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNf
RElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRNZXNzYWdl
UmVjZWl2ZXIuY3BwCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0
Mi9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kTWVzc2FnZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIp
L0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlUmVuZGVyaW5nQmFja2VuZE1lc3NhZ2VzUmVw
bGllcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiskKEJVSUxUX1BST0RV
Q1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHlNZXNzYWdlcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0
Mi9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlc1JlcGxpZXMuaAogJChCVUlMVF9Q
Uk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlU2FtcGxlQnVmZmVyRGlz
cGxheUxheWVyTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElS
KS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1h
bmFnZXJNZXNzYWdlcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2Vi
S2l0Mi9SZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyTWVzc2FnZXNSZXBsaWVz
LmgKSW5kZXg6IFNvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDI1NzM2OSkKKysr
IFNvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpAQCAtMjMs
NiArMjMsNyBAQAogVlBBVEggPSBcCiAgICAgJChXZWJLaXQyKSBcCiAgICAgJChXZWJLaXQyKS9H
UFVQcm9jZXNzIFwKKyAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3MvZ3JhcGhpY3MgXAogICAgICQo
V2ViS2l0MikvR1BVUHJvY2Vzcy9tYWMgXAogICAgICQoV2ViS2l0MikvR1BVUHJvY2Vzcy9tZWRp
YSBcCiAgICAgJChXZWJLaXQyKS9HUFVQcm9jZXNzL3dlYnJ0YyBcCkBAIC01MSw2ICs1Miw3IEBA
IFZQQVRIID0gXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9GdWxsU2NyZWVuIFwKICAgICAk
KFdlYktpdDIpL1dlYlByb2Nlc3MvR2VvbG9jYXRpb24gXAogICAgICQoV2ViS2l0MikvV2ViUHJv
Y2Vzcy9HUFUgXAorICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MgXAogICAg
ICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUvbWVkaWEgXAogICAgICQoV2ViS2l0MikvV2ViUHJv
Y2Vzcy9HUFUvd2VicnRjIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvSWNvbkRhdGFiYXNl
IFwKQEAgLTE1Myw2ICsxNTUsOCBAQCBNRVNTQUdFX1JFQ0VJVkVSUyA9IFwKICAgICBSZW1vdGVN
ZWRpYVJlY29yZGVyTWFuYWdlciBcCiAgICAgUmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIgXAog
ICAgIFJlbW90ZU9iamVjdFJlZ2lzdHJ5IFwKKyAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIFwK
KyAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgXAogICAgIFJlbW90ZVNhbXBsZUJ1ZmZl
ckRpc3BsYXlMYXllciBcCiAgICAgUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdl
ciBcCiAgICAgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IgXApJbmRleDogU291cmNlL1dlYktp
dC9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CShy
ZXZpc2lvbiAyNTczNjkpCisrKyBTb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0yNCwxMiArMjQsNyBAQAogR1BVUHJvY2Vzcy9HUFVQcm9jZXNzLmNwcAogR1BVUHJv
Y2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAogR1BVUHJvY2Vzcy9HUFVQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzLmNwcAotR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlQXVkaW9NZWRp
YVN0cmVhbVRyYWNrUmVuZGVyZXIuY3BwCi1HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVBdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlck1hbmFnZXIuY3BwCi1HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1v
dGVNZWRpYVJlY29yZGVyLmNwcAotR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlTWVkaWFSZWNvcmRl
ck1hbmFnZXIuY3BwCi1HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5
TGF5ZXIuY3BwCi1HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5
ZXJNYW5hZ2VyLmNwcAorR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkuY3BwCiBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZUF1ZGlvVHJhY2tQcm94eS5jcHAKIEdQ
VVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkuY3BwCiBHUFVQcm9j
ZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyUHJveHkuY3BwCkBAIC0zOCw2ICszMywxMiBAQCBH
UFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2VMb2FkCiBHUFVQcm9jZXNzL21lZGlh
L1JlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyLmNwcAogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVU
ZXh0VHJhY2tQcm94eS5jcHAKIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3RlVmlkZW9UcmFja1Byb3h5
LmNwcAorR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVy
ZXIuY3BwCitHUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5k
ZXJlck1hbmFnZXIuY3BwCitHUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVNZWRpYVJlY29yZGVyLmNw
cAorR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlTWVkaWFSZWNvcmRlck1hbmFnZXIuY3BwCitHUFVQ
cm9jZXNzL3dlYnJ0Yy9SZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIuY3BwCitHUFVQcm9j
ZXNzL3dlYnJ0Yy9SZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyLmNwcAogCiBO
ZXR3b3JrUHJvY2Vzcy9BZENsaWNrQXR0cmlidXRpb25NYW5hZ2VyLmNwcAogTmV0d29ya1Byb2Nl
c3MvTmV0d29ya0FjdGl2aXR5VHJhY2tlci5jcHAKQEAgLTUzMiw2ICs1MzMsNyBAQCBXZWJQcm9j
ZXNzL01lZGlhU3RyZWFtL01lZGlhRGV2aWNlU2FuZGJvCiBXZWJQcm9jZXNzL01lZGlhU3RyZWFt
L1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKIAogV2ViUHJvY2Vzcy9HUFUv
R1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCitXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLmNwcAogV2ViUHJvY2Vzcy9HUFUvbWVkaWEvQXVkaW9UcmFja1ByaXZh
dGVSZW1vdGUuY3BwCiBXZWJQcm9jZXNzL0dQVS9tZWRpYS9NZWRpYVBsYXllclByaXZhdGVSZW1v
dGUuY3BwCiBXZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXIuY3Bw
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CShyZXZpc2lvbiAyNTczNjkpCisrKyBTb3VyY2Uv
V2ViS2l0L1NvdXJjZXNDb2NvYS50eHQJKHdvcmtpbmcgY29weSkKQEAgLTY0Myw2ICs2NDMsNyBA
QCBXZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90CiAvLyBEZXJpdmVkIFNv
dXJjZXMKIEVkaXRhYmxlSW1hZ2VDb250cm9sbGVyTWVzc2FnZVJlY2VpdmVyLmNwcAogR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAKK0dQVVByb2Nlc3NDb25uZWN0
aW9uTWVzc2FnZVJlY2VpdmVyLmNwcAogR1BVUHJvY2Vzc1Byb3h5TWVzc2FnZVJlY2VpdmVyLmNw
cAogR1BVUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAKIExpYldlYlJUQ0NvZGVjc1Byb3h5TWVz
c2FnZVJlY2VpdmVyLmNwcApAQCAtNjUxLDYgKzY1Miw4IEBAIFJlbW90ZUF1ZGlvTWVkaWFTdHJl
YW1UcmFja1JlbmRlcmVyTWFuYWcKIFJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVy
TWVzc2FnZVJlY2VpdmVyLmNwcAogUmVtb3RlTWVkaWFSZWNvcmRlck1lc3NhZ2VSZWNlaXZlci5j
cHAKIFJlbW90ZU1lZGlhUmVjb3JkZXJNYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcAorUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZE1lc3NhZ2VSZWNlaXZlci5jcHAKK1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKIFJlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXll
ck1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiBSZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5
ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiBTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNZXNzYWdlUmVj
ZWl2ZXIuY3BwCkluZGV4OiBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCShyZXZpc2lvbiAyNTczNjkpCisrKyBTb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE4OSw3OSArMTg5LDk0IEBAIExpYldlYlJUQ0NvZGVjc1Byb3h5JiBHUFVDb25u
ZWN0aW9uVG9XZWIKIH0KICNlbmRpZgogCi12b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNv
ZGVyJiBkZWNvZGVyKQordm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjcmVhdGVSZW5k
ZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyKQoreworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9yZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHlNYXAuZW5zdXJlKHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLCBbJl0oKSB7Cisg
ICAgICAgIHJldHVybiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZSgqdGhpcywg
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgIH0pOworICAgIEFTU0VSVF9VTlVTRUQo
YWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Cit9CisKK3ZvaWQgR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzczo6cmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7CisgICAgYm9vbCBmb3VuZCA9
IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWFwLnJlbW92ZShyZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllcik7CisgICAgQVNTRVJUX1VOVVNFRChmb3VuZCwgZm91bmQpOworfQorCitib29s
IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpc3BhdGNoTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBpZiAoZGVjb2Rl
ci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUGxheWVyTWFu
YWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgcmVtb3RlTWVkaWFQ
bGF5ZXJNYW5hZ2VyUHJveHkoKS5kaWRSZWNlaXZlTWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5l
Y3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmIChkZWNvZGVy
Lm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFQbGF5ZXJQcm94
eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90
ZU1lZGlhUGxheWVyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICByZW1v
dGVNZWRpYVBsYXllck1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVQbGF5ZXJNZXNzYWdlKGNvbm5l
Y3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmIChkZWNvZGVy
Lm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFSZXNvdXJjZU1h
bmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpS
ZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAg
ICAgIHJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyKCkuZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVj
dGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJl
Y2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpVc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5Ojpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgdXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQ
cm94eSgpLmRpZFJlY2VpdmVNZXNzYWdlRnJvbUdQVVByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rl
cik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlm
IChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFS
ZWNvcmRlck1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICBtZWRpYVJl
Y29yZGVyTWFuYWdlcigpLmRpZFJlY2VpdmVNZXNzYWdlRnJvbVdlYlByb2Nlc3MoY29ubmVjdGlv
biwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVt
b3RlTWVkaWFSZWNvcmRlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIG1lZGlh
UmVjb3JkZXJNYW5hZ2VyKCkuZGlkUmVjZWl2ZVJlbW90ZU1lZGlhUmVjb3JkZXJNZXNzYWdlKGNv
bm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICNpZiBQTEFURk9STShDT0NPQSkgJiYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAg
IGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlQXVk
aW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkp
IHsKICAgICAgICAgYXVkaW9UcmFja1JlbmRlcmVyTWFuYWdlcigpLmRpZFJlY2VpdmVNZXNzYWdl
RnJvbVdlYlByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXI6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICBhdWRpb1RyYWNrUmVuZGVyZXJNYW5h
Z2VyKCkuZGlkUmVjZWl2ZVJlbmRlcmVyTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYgKGRlY29k
ZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVTYW1wbGVCdWZmZXJE
aXNwbGF5TGF5ZXJNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgc2Ft
cGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlcigpLmRpZFJlY2VpdmVNZXNzYWdlRnJvbVdlYlBy
b2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9
PSBNZXNzYWdlczo6UmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyOjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCkpIHsKICAgICAgICAgc2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlcigpLmRp
ZFJlY2VpdmVMYXllck1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCiAjZW5kaWYKICNpZiBQTEFU
Rk9STShDT0NPQSkgJiYgVVNFKExJQldFQlJUQykKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVj
ZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OkxpYldlYlJUQ0NvZGVjc1Byb3h5OjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgbGliV2ViUlRDQ29kZWNzUHJveHkoKS5kaWRSZWNlaXZl
TWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNlbmRpZgorICAgIHJldHVybiBtZXNz
YWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7CiB9
CiAKLXZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6
OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKQorYm9vbCBHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpkaXNwYXRjaFN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29u
bmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNv
ZGVyPiYgcmVwbHlFbmNvZGVyKQogewogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5h
bWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk6Om1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSkgewogICAgICAgICByZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eSgp
LmRpZFJlY2VpdmVTeW5jTWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIs
IHJlcGx5RW5jb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQotCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdl
UmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICB1c2VyTWVkaWFDYXB0dXJlTWFuYWdl
clByb3h5KCkuZGlkUmVjZWl2ZVN5bmNNZXNzYWdlRnJvbUdQVVByb2Nlc3MoY29ubmVjdGlvbiwg
ZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAjaWYgUExBVEZPUk0oQ09DT0EpICYmIEVOQUJMRShWSURFT19UUkFDSykK
ICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90
ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkg
ewogICAgICAgICBzYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyKCkuZGlkUmVjZWl2ZVN5
bmNNZXNzYWdlRnJvbVdlYlByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVy
KTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYK
ICNlbmRpZgotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG1lc3NhZ2VS
ZWNlaXZlck1hcCgpLmRpc3BhdGNoU3luY01lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVw
bHlFbmNvZGVyKTsKIH0KIAogY29uc3QgU3RyaW5nJiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OjptZWRpYUNhY2hlRGlyZWN0b3J5KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAkocmV2aXNpb24gMjU3
MzY5KQorKysgU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTMgKzI4LDE1IEBACiAjaWYgRU5BQkxFKEdQVV9Q
Uk9DRVNTKQogCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgIkdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3NNZXNzYWdlc1JlcGxpZXMuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Rpc3Bs
YXlMaXN0SXRlbXMuaD4KKyNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2Fn
ZXMuaCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXJNYXAuaCIKKyNpbmNsdWRlICJSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRp
Zmllci5oIgogI2luY2x1ZGUgPFdlYkNvcmUvUHJvY2Vzc0lkZW50aWZpZXIuaD4KICNpbmNsdWRl
IDxwYWwvU2Vzc2lvbklELmg+CiAjaW5jbHVkZSA8d3RmL0xvZ2dlci5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgorI2luY2x1ZGUgPHd0
Zi9XZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFBsYXRmb3JtTWVkaWFT
ZXNzaW9uTWFuYWdlcjsKQEAgLTUzLDE4ICs1NSwyMCBAQCBjbGFzcyBVc2VyTWVkaWFDYXB0dXJl
TWFuYWdlclByb3h5OwogCiBjbGFzcyBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzCiAgICAgOiBw
dWJsaWMgUmVmQ291bnRlZDxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPgorICAgICwgcHVibGlj
IENhbk1ha2VXZWFrUHRyPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+CiAgICAgLCBJUEM6OkNv
bm5lY3Rpb246OkNsaWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxHUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzPiBjcmVhdGUoR1BVUHJvY2VzcyYsIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlm
aWVyLCBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIsIFBBTDo6U2Vzc2lvbklEKTsKICAgICB2
aXJ0dWFsIH5HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKCk7CiAKICAgICBJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24oKSB7IHJldHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7IH0KKyAgICBJUEM6
Ok1lc3NhZ2VSZWNlaXZlck1hcCYgbWVzc2FnZVJlY2VpdmVyTWFwKCkgeyByZXR1cm4gbV9tZXNz
YWdlUmVjZWl2ZXJNYXA7IH0KICAgICBHUFVQcm9jZXNzJiBncHVQcm9jZXNzKCkgeyByZXR1cm4g
bV9ncHVQcm9jZXNzLmdldCgpOyB9CisgICAgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgd2Vi
UHJvY2Vzc0lkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3dlYlByb2Nlc3NJZGVudGlmaWVy
OyB9CiAKICAgICB2b2lkIGNsZWFudXBGb3JTdXNwZW5zaW9uKEZ1bmN0aW9uPHZvaWQoKT4mJik7
CiAgICAgdm9pZCBlbmRTdXNwZW5zaW9uKCk7CiAKLSAgICBXZWJDb3JlOjpQcm9jZXNzSWRlbnRp
ZmllciB3ZWJQcm9jZXNzSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fd2ViUHJvY2Vzc0lk
ZW50aWZpZXI7IH0KICAgICBSZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlciYgcmVtb3RlTWVkaWFS
ZXNvdXJjZU1hbmFnZXIoKTsKIAogICAgIExvZ2dlciYgbG9nZ2VyKCk7CkBAIC05MSw2ICs5NSw4
IEBAIHByaXZhdGU6CiAgICAgUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlciYg
c2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlcigpOwogI2VuZGlmCiAjZW5kaWYKKyAgICB2
b2lkIGNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOwor
ICAgIHZvaWQgcmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIpOwogCiAgICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKICAgICB2b2lkIGRpZENsb3Nl
KElQQzo6Q29ubmVjdGlvbiYpIGZpbmFsOwpAQCAtOTgsOSArMTA0LDEzIEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXIm
KSBmaW5hbDsKICAgICB2b2lkIGRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
LCBJUEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpIGZpbmFsOwog
CisgICAgYm9vbCBkaXNwYXRjaE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVy
Jik7CisgICAgYm9vbCBkaXNwYXRjaFN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6
RGVjb2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+Jik7CisKICAgICBSZWZQdHI8
TG9nZ2VyPiBtX2xvZ2dlcjsKIAogICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IG1fY29ubmVjdGlv
bjsKKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCBtX21lc3NhZ2VSZWNlaXZlck1hcDsKICAg
ICBSZWY8R1BVUHJvY2Vzcz4gbV9ncHVQcm9jZXNzOwogICAgIGNvbnN0IFdlYkNvcmU6OlByb2Nl
c3NJZGVudGlmaWVyIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PFJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyPiBtX3JlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2Vy
OwpAQCAtMTE4LDYgKzEyOCw5IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPExpYldl
YlJUQ0NvZGVjc1Byb3h5PiBtX2xpYldlYlJUQ0NvZGVjc1Byb3h5OwogI2VuZGlmCiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6OlBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlcj4gbV9zZXNz
aW9uTWFuYWdlcjsKKyAgICAKKyAgICB1c2luZyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlN
YXAgPSBIYXNoTWFwPFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Pj47CisgICAgUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5TWFwIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWFwOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgkocmV2aXNp
b24gMjU3MzY5KQorKysgU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDkgQEAKIAog
I2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAotbWVzc2FnZXMgLT4gR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2VzcyB7CittZXNzYWdlcyAtPiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzIFdhbnRzRGlz
cGF0Y2hNZXNzYWdlIHsKKyAgICB2b2lkIENyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoV2ViS2l0OjpS
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKKyAg
ICB2b2lkIFJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKFdlYktpdDo6UmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCiB9CiAKICNlbmRpZiAvLyBFTkFC
TEUoR1BVX1BST0NFU1MpCkluZGV4OiBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkuaCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1
ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgiCisKK25hbWVzcGFjZSBX
ZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0ZDo6dW5pcXVlX3B0cjxSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3Jl
YXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Ms
IFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQor
eworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
PihuZXcgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MsIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKSk7Cit9CisKK1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eTo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KEdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgIDogbV9ncHVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzKG1ha2VXZWFrUHRyKGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpKQorICAg
ICwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcihyZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
cikKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgZ3B1Q29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy0+bWVzc2FnZVJlY2VpdmVyTWFwKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgcmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKSwgKnRoaXMpOworfQorCitSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHk6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoKQoreworICAg
IGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmdldCgpKQorICAgICAgICBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5tZXNz
YWdlUmVjZWl2ZXJNYXAoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3JlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCkpOworfQorCitJUEM6OkNvbm5lY3Rpb24qIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdAor
eworICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAgICByZXR1cm4gJmdwdUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MtPmNvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordWludDY0
X3QgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25J
RCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9V
SW50NjQoKTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZUlt
YWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUgcmVu
ZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IEltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCit7CisgICAgYXV0
byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5nZXQoKTsKKyAgICBpZiAoIWdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChtX2ltYWdlQnVmZmVyTWFwLmNvbnRhaW5zKGltYWdlQnVmZmVySWRl
bnRpZmllcikpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVy
OworCisgICAgc3dpdGNoIChyZW5kZXJpbmdNb2RlKSB7CisgICAgY2FzZSBSZW5kZXJpbmdNb2Rl
OjpSZW1vdGVBY2NlbGVyYXRlZDoKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90ZVVuYWNj
ZWxlcmF0ZWQ6CisgICAgICAgIC8vIEZJWE1FOiBjcmVhdGUgdGhlIHJlbW90ZSBJbWFnZUJ1ZmZl
ciBwcm94eS4KKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9CisKKyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lt
YWdlQnVmZmVyTWFwLmFkZChpbWFnZUJ1ZmZlcklkZW50aWZpZXIsIFdURk1vdmUoaW1hZ2VCdWZm
ZXIpKTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlbGVhc2VJbWFn
ZUJ1ZmZlcihJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorewor
ICAgIC8vIENyZWF0ZUltYWdlQnVmZmVyIG1lc3NhZ2Ugc2hvdWxkIGhhdmUgYmVlbiByZWNlaXZl
ZCBiZWZvcmUgdGhpcyBvbmUuCisgICAgYm9vbCBmb3VuZCA9IG1faW1hZ2VCdWZmZXJNYXAucmVt
b3ZlKGltYWdlQnVmZmVySWRlbnRpZmllcik7CisgICAgQVNTRVJUX1VOVVNFRChmb3VuZCwgZm91
bmQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVf
UFJPQ0VTUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkNv
bm5lY3Rpb24uaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCIKKyNpbmNsdWRl
ICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCisjaW5jbHVk
ZSAiUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NvbG9y
U3BhY2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlQnVmZmVyLmg+CisjaW5jbHVkZSA8d3Rm
L1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3M7CisKK2NsYXNzIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eQorICAgIDog
cHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5kZXIKKyAgICAsIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVj
ZWl2ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5PiBjcmVhdGUoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYsIFJlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICB2aXJ0dWFsIH5SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkoKTsKKworcHJpdmF0ZToKKyAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHko
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsK
KworICAgIC8vIElQQzo6TWVzc2FnZVNlbmRlci4KKyAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3Nh
Z2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdWludDY0X3QgbWVzc2Fn
ZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIElQQzo6TWVz
c2FnZVJlY2VpdmVyCisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
LCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKKworICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIo
Y29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5n
TW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBJbWFnZUJ1
ZmZlcklkZW50aWZpZXIpOworICAgIHZvaWQgcmVsZWFzZUltYWdlQnVmZmVyKEltYWdlQnVmZmVy
SWRlbnRpZmllcik7CisKKyAgICB1c2luZyBJbWFnZUJ1ZmZlck1hcCA9IEhhc2hNYXA8SW1hZ2VC
dWZmZXJJZGVudGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+PjsK
KyAgICBJbWFnZUJ1ZmZlck1hcCBtX2ltYWdlQnVmZmVyTWFwOworICAgIFdlYWtQdHI8R1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcz4gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOworICAgIFJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VT
UykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5p
bgkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMzAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lm
IEVOQUJMRShHUFVfUFJPQ0VTUykKKworbWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5IE5vdFJlZkNvdW50ZWQgeworICAgIHZvaWQgQ3JlYXRlSW1hZ2VCdWZmZXIoV2ViQ29y
ZTo6RmxvYXRTaXplIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNw
YWNlLCBXZWJLaXQ6OkltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIp
CisgICAgdm9pZCBSZWxlYXNlSW1hZ2VCdWZmZXIoV2ViS2l0OjpJbWFnZUJ1ZmZlcklkZW50aWZp
ZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorfQorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9D
RVNTKQpJbmRleDogU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVBdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlci5jcHAJ
KHJldmlzaW9uIDI1NzM2OSkKKysrIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy93ZWJydGMvUmVt
b3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Myw5ICszMyw4IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9DQVJpbmdCdWZmZXIuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1dlYkF1ZGlvQnVmZmVyTGlzdC5oPgogCi11c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKLQogbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogI2lm
ICFSRUxFQVNFX0xPR19ESVNBQkxFRAogc3RhdGljIGNvbnN0IHZvaWQqIG5leHRMb2dJZGVudGlm
aWVyKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlTWVkaWFS
ZWNvcmRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dlYnJ0
Yy9SZW1vdGVNZWRpYVJlY29yZGVyLmNwcAkocmV2aXNpb24gMjU3MzY5KQorKysgU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVNZWRpYVJlY29yZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzUsOSArMzUsOCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvV2ViQXVkaW9CdWZmZXJM
aXN0Lmg+CiAjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAKLXVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwotCiBuYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogCiBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlTWVkaWFSZWNvcmRlcj4gUmVtb3RlTWVkaWFS
ZWNvcmRlcjo6Y3JlYXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MsIE1lZGlhUmVjb3JkZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIGJvb2wgcmVj
b3JkQXVkaW8sIGludCB3aWR0aCwgaW50IGhlaWdodCkKIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlTWVkaWFSZWNvcmRlck1hbmFnZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlTWVkaWFSZWNvcmRl
ck1hbmFnZXIuY3BwCShyZXZpc2lvbiAyNTczNjkpCisrKyBTb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3Mvd2VicnRjL1JlbW90ZU1lZGlhUmVjb3JkZXJNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uRGF0YS5oPgogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBSZW1vdGVNZWRp
YVJlY29yZGVyTWFuYWdlcjo6UmVtb3RlTWVkaWFSZWNvcmRlck1hbmFnZXIoR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcykKICAgICA6IG1fZ3B1Q29u
bmVjdGlvblRvV2ViUHJvY2VzcyhncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKQpJbmRleDogU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy93ZWJydGMvUmVt
b3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyLmNwcAkocmV2aXNpb24gMjU3MzY5KQorKysgU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw5ICszNCw4IEBACiAjaW5jbHVkZSA8V2ViQ29y
ZS9NZWRpYVNhbXBsZUFWRk9iakMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbW90ZVZpZGVvU2Ft
cGxlLmg+CiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCiBuYW1lc3BhY2UgV2ViS2l0IHsK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlU2FtcGxl
QnVmZmVyRGlzcGxheUxheWVyPiBSZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXI6OmNyZWF0
ZShTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIFJlZjxJUEM6
OkNvbm5lY3Rpb24+JiYgY29ubmVjdGlvbiwgYm9vbCBoaWRlUm9vdExheWVyLCBJbnRTaXplIHNp
emUpCiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkJKHJl
dmlzaW9uIDI1NzM2OSkKKysrIFNvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAgaW1wb3J0IHN5cwogZnJvbSB3ZWJr
aXQgaW1wb3J0IHBhcnNlcgogCiBXQU5UU19DT05ORUNUSU9OX0FUVFJJQlVURSA9ICdXYW50c0Nv
bm5lY3Rpb24nCitXQU5UU19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVURSA9ICdXYW50c0Rpc3Bh
dGNoTWVzc2FnZScKIExFR0FDWV9SRUNFSVZFUl9BVFRSSUJVVEUgPSAnTGVnYWN5UmVjZWl2ZXIn
CiBOT1RfUkVGQ09VTlRFRF9SRUNFSVZFUl9BVFRSSUJVVEUgPSAnTm90UmVmQ291bnRlZCcKIFNZ
TkNIUk9OT1VTX0FUVFJJQlVURSA9ICdTeW5jaHJvbm91cycKQEAgLTIwNCw2ICsyMDUsNyBAQCBk
ZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlCiAgICAgcmV0dXJuIGZyb3pl
bnNldChbCiAgICAgICAgICdNYWNoU2VuZFJpZ2h0JywKICAgICAgICAgJ1N0cmluZycsCisgICAg
ICAgICdXZWJDb3JlOjpDb2xvclNwYWNlJywKICAgICAgICAgJ1dlYkNvcmU6OkRvY3VtZW50SWRl
bnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpEb2N1bWVudE9yV29ya2VySWRlbnRpZmllcics
CiAgICAgICAgICdXZWJDb3JlOjpGZXRjaElkZW50aWZpZXInLApAQCAtMjEzLDYgKzIxNSw3IEBA
IGRlZiB0eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2RlY2xhcmUKICAgICAgICAgJ1dlYkNv
cmU6OlBvaW50ZXJJRCcsCiAgICAgICAgICdXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllcicsCiAg
ICAgICAgICdXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNlSWRlbnRpZmllcicsCisgICAgICAg
ICdXZWJDb3JlOjpSZW5kZXJpbmdNb2RlJywKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3Jr
ZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3JrZXJKb2JJZGVudGlm
aWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3JrZXJPckNsaWVudERhdGEnLApAQCAt
MjIyLDEyICsyMjUsMTQgQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFy
ZQogICAgICAgICAnV2ViS2l0OjpBY3Rpdml0eVN0YXRlQ2hhbmdlSUQnLAogICAgICAgICAnV2Vi
S2l0OjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlcklkZW50aWZpZXInLAogICAgICAgICAn
V2ViS2l0OjpDb250ZW50V29ybGRJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYktpdDo6SW1hZ2VC
dWZmZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6TGF5ZXJIb3N0aW5nQ29udGV4dElE
JywKICAgICAgICAgJ1dlYktpdDo6TGliV2ViUlRDUmVzb2x2ZXJJZGVudGlmaWVyJywKICAgICAg
ICAgJ1dlYktpdDo6TUROU1JlZ2lzdGVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6Ok1l
ZGlhUGxheWVyUHJpdmF0ZVJlbW90ZUlkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpNZWRp
YVJlY29yZGVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlJlbW90ZU1lZGlhUmVzb3Vy
Y2VJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYktpdDo6UmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXInLAogICAgICAgICAnV2ViS2l0OjpSVENEZWNvZGVySWRlbnRpZmllcicsCiAgICAgICAgICdX
ZWJLaXQ6OlJUQ0VuY29kZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6U2FtcGxlQnVm
ZmVyRGlzcGxheUxheWVySWRlbnRpZmllcicsCkBAIC03NzksMTMgKzc4NCwxNiBAQCBkZWYgZ2Vu
ZXJhdGVfbWVzc2FnZV9oYW5kbGVyKHJlY2VpdmVyKToKICAgICAgICAgZWxzZToKICAgICAgICAg
ICAgIGFzeW5jX21lc3NhZ2VzLmFwcGVuZChtZXNzYWdlKQogCi0gICAgaWYgYXN5bmNfbWVzc2Fn
ZXM6CisgICAgaWYgYXN5bmNfbWVzc2FnZXMgb3IgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShXQU5U
U19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVURSk6CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3Zv
aWQgJXM6OmRpZFJlY2VpdmUlc01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJ
UEM6OkRlY29kZXImIGRlY29kZXIpXG4nICUgKHJlY2VpdmVyLm5hbWUsIHJlY2VpdmVyLm5hbWUg
aWYgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShMRUdBQ1lfUkVDRUlWRVJfQVRUUklCVVRFKSBlbHNl
ICcnKSkKICAgICAgICAgcmVzdWx0LmFwcGVuZCgne1xuJykKICAgICAgICAgaWYgbm90IHJlY2Vp
dmVyLmhhc19hdHRyaWJ1dGUoTk9UX1JFRkNPVU5URURfUkVDRUlWRVJfQVRUUklCVVRFKToKICAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVm
KCp0aGlzKTtcbicpCiAKICAgICAgICAgcmVzdWx0ICs9IFthc3luY19tZXNzYWdlX3N0YXRlbWVu
dChyZWNlaXZlciwgbWVzc2FnZSkgZm9yIG1lc3NhZ2UgaW4gYXN5bmNfbWVzc2FnZXNdCisgICAg
ICAgIGlmIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRS
SUJVVEUpOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGlmIChkaXNwYXRjaE1lc3Nh
Z2UoY29ubmVjdGlvbiwgZGVjb2RlcikpXG4nKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgn
ICAgICAgICByZXR1cm47XG4nKQogICAgICAgICBpZiAocmVjZWl2ZXIuc3VwZXJjbGFzcyk6CiAg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgJXM6OmRpZFJlY2VpdmVNZXNzYWdlKGNvbm5l
Y3Rpb24sIGRlY29kZXIpO1xuJyAlIChyZWNlaXZlci5zdXBlcmNsYXNzKSkKICAgICAgICAgZWxz
ZToKQEAgLTc5NCwxMyArODAyLDE2IEBAIGRlZiBnZW5lcmF0ZV9tZXNzYWdlX2hhbmRsZXIocmVj
ZWl2ZXIpOgogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpO1xuJykKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnfVxuJykKIAotICAgIGlmIHN5bmNfbWVz
c2FnZXM6CisgICAgaWYgc3luY19tZXNzYWdlcyBvciByZWNlaXZlci5oYXNfYXR0cmlidXRlKFdB
TlRTX0RJU1BBVENIX01FU1NBR0VfQVRUUklCVVRFKToKICAgICAgICAgcmVzdWx0LmFwcGVuZCgn
XG4nKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd2b2lkICVzOjpkaWRSZWNlaXZlU3luYyVzTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwg
c3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcilcbicgJSAocmVjZWl2
ZXIubmFtZSwgcmVjZWl2ZXIubmFtZSBpZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKExFR0FDWV9S
RUNFSVZFUl9BVFRSSUJVVEUpIGVsc2UgJycpKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd7XG4n
KQogICAgICAgICBpZiBub3QgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShOT1RfUkVGQ09VTlRFRF9S
RUNFSVZFUl9BVFRSSUJVVEUpOgogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGF1dG8g
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpO1xuJykKICAgICAgICAgcmVzdWx0ICs9IFtz
eW5jX21lc3NhZ2Vfc3RhdGVtZW50KHJlY2VpdmVyLCBtZXNzYWdlKSBmb3IgbWVzc2FnZSBpbiBz
eW5jX21lc3NhZ2VzXQorICAgICAgICBpZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKFdBTlRTX0RJ
U1BBVENIX01FU1NBR0VfQVRUUklCVVRFKToKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAg
ICBpZiAoZGlzcGF0Y2hTeW5jTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29k
ZXIpKVxuJykKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICAgICAgcmV0dXJuO1xuJykK
ICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTtcbicp
CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBVTlVTRURfUEFSQU0oZGVjb2Rlcik7XG4nKQog
ICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgVU5VU0VEX1BBUkFNKHJlcGx5RW5jb2Rlcik7XG4n
KQpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgJ
KHJldmlzaW9uIDI1NzM2OSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVu
dENvZGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8V2Vi
Q29yZS9OZXR3b3JrTG9hZE1ldHJpY3MuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdGlmaWNhdGlv
bkRpcmVjdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVhbHRpbWVNZWRpYVNvdXJjZS5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyaW5nTW9kZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2Ny
b2xsU25hcE9mZnNldHNJbmZvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZXJpYWxpemVkUGxhdGZv
cm1EYXRhQ3VlVmFsdWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlcnZpY2VXb3JrZXJUeXBlcy5o
PgpAQCAtODQyLDYgKzg0MywxOCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNv
cmU6OkNvCiAgICAgPjsKIH07CiAKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29y
ZTo6UmVuZGVyaW5nTW9kZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAg
V2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpBY2Nl
bGVyYXRlZCwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLAorICAg
IFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQsCisgICAgV2Vi
Q29yZTo6UmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RVbmFjY2VsZXJhdGVkLAorICAgIFdlYkNv
cmU6OlJlbmRlcmluZ01vZGU6OlJlbW90ZUFjY2VsZXJhdGVkLAorICAgIFdlYkNvcmU6OlJlbmRl
cmluZ01vZGU6OlJlbW90ZVVuYWNjZWxlcmF0ZWQKKyAgICA+OworfTsKKwogdGVtcGxhdGU8PiBz
dHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpBdXRvcGxheUV2ZW50PiB7CiAgICAgdXNpbmcgdmFs
dWVzID0gRW51bVZhbHVlczwKICAgICAgICAgV2ViQ29yZTo6QXV0b3BsYXlFdmVudCwKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMjU3MzY5KQorKysgU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzc5OCw2ICszNzk4LDE0IEBACiAJCTUzQ0ZCQkM2
MjIyNEQxQjAwMDI2NjU0NiAvKiBUZXh0Q2hlY2tlckNvbXBsZXRpb24uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dENoZWNrZXJDb21wbGV0aW9uLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNDRkJCQzcyMjI0RDFCMDAwMjY2NTQ2IC8qIFRl
eHRDaGVja2VyQ29tcGxldGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBU
ZXh0Q2hlY2tlckNvbXBsZXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNG
M0NBQTUyMDZDNDQzRTAwODY0OTBFIC8qIE5ldHdvcmtBY3Rpdml0eVRyYWNrZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV0d29ya0FjdGl2aXR5VHJhY2tlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1MDY0MDlEMjQwNzE2MDkwMEFBRTA0
NSAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NTA2
NDA5RTI0MDcxNjA5MDBBQUUwNDUgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTU1MDY0MDlGMjQwNzE5NkEwMEFBRTA0NSAvKiBSZW5kZXJpbmdCYWNrZW5kSWRlbnRp
Zmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NTA2NDBBMDI0MDcxOUUxMDBBQUUwNDUgLyogUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1NTA2NDBBMjI0MDcxQTYxMDBBQUUwNDUgLyogUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1MDY0MEEzMjQwNzFBNjEwMEFB
RTA0NSAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTU1MDY0MEE0MjQwNzFDMjEwMEFBRTA0NSAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHku
bWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NTA2NDBB
NTI0MDcxQ0MwMDBBQUUwNDUgLyogSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEltYWdlQnVmZmVySWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1NzBBQjhGMjIwQUUzQkQ3MDBCOEJFODcgLyogU2VjS2V5UHJveHlTdG9yZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTZWNLZXlQcm94eVN0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTU3MEFCOTAwMjBCMjUxNzQwMEI4QkU4NyAvKiBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5
Q29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVBy
b3h5Q29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MEFCOTAzMjBCMjU0
MUMwMEI4QkU4NyAvKiBTZWNLZXlQcm94eVN0b3JlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gU2VjS2V5UHJveHlTdG9yZS5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTY1NDAsNiArNjU0OCw3IEBACiAJCTJEN0U0M0JGMjM3NTJDRDkwMEVBNUNB
MCAvKiBHUFUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJ
CTU1MDY0MDlDMjQwNzE1QUEwMEFBRTA0NSAvKiBncmFwaGljcyAqLywKIAkJCQkwNzkyMzEyRjIz
OUIzQjBDMDA5NTk4RTIgLyogbWVkaWEgKi8sCiAJCQkJNDE3MjE5ODgyM0I2MTI2MTAwQUU1Njg2
IC8qIHdlYnJ0YyAqLywKIAkJCQkyRDdFNDNDMDIzNzUyQ0Q5MDBFQTVDQTAgLyogR1BVUHJvY2Vz
c0Nvbm5lY3Rpb24uY3BwICovLApAQCAtNjU1NCw2ICs2NTYzLDcgQEAKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMkQ5RkIyMEQyMzc1MjA5RDAwNDlGOTM2IC8qIEVu
dHJ5UG9pbnQgKi8sCisJCQkJNTUwNjQwQTEyNDA3MUEyOTAwQUFFMDQ1IC8qIGdyYXBoaWNzICov
LAogCQkJCTJEOUZCMjA0MjM3NTIwOUQwMDQ5RjkzNiAvKiBpb3MgKi8sCiAJCQkJMkQ5RkIyMDYy
Mzc1MjA5RDAwNDlGOTM2IC8qIG1hYyAqLywKIAkJCQkwN0M3NUMxNzIzOTlBM0RCMDA4OEU2NUIg
LyogbWVkaWEgKi8sCkBAIC03Njg1LDYgKzc2OTUsMjggQEAKIAkJCXBhdGggPSBpb3M7CiAJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk1NTA2NDA5QzI0MDcxNUFBMDBBQUUwNDUg
LyogZ3JhcGhpY3MgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAor
CQkJCTU1MDY0MEE1MjQwNzFDQzAwMEFBRTA0NSAvKiBJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCAq
LywKKwkJCQk1NTA2NDA5RDI0MDcxNjA5MDBBQUUwNDUgLyogUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZC5jcHAgKi8sCisJCQkJNTUwNjQwOUUyNDA3MTYwOTAwQUFFMDQ1IC8qIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQuaCAqLywKKwkJCQk1NTA2NDBBMDI0MDcxOUUxMDBBQUUwNDUgLyogUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbiAqLywKKwkJCQk1NTA2NDA5RjI0MDcxOTZBMDBBQUUw
NDUgLyogUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCAqLywKKwkJCSk7CisJCQlwYXRoID0g
Z3JhcGhpY3M7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQk1NTA2NDBBMTI0
MDcxQTI5MDBBQUUwNDUgLyogZ3JhcGhpY3MgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJ
CWNoaWxkcmVuID0gKAorCQkJCTU1MDY0MEEyMjQwNzFBNjEwMEFBRTA0NSAvKiBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkuY3BwICovLAorCQkJCTU1MDY0MEEzMjQwNzFBNjEwMEFBRTA0NSAv
KiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCAqLywKKwkJCQk1NTA2NDBBNDI0MDcxQzIx
MDBBQUUwNDUgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluICovLAor
CQkJKTsKKwkJCXBhdGggPSBncmFwaGljczsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJ
CX07CiAJCTU3MEFCOEY2MjBBRTgxQUIwMEI4QkU4NyAvKiBjb2NvYSAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcAkocmV2aXNpb24gMjU3
MzY5KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDMyICs3NSwzOCBAQCBTYW1wbGVCdWZmZXJEaXNw
bGF5TGF5ZXJNYW5hZ2VyJiBHUFVQcm9jCiB9CiAjZW5kaWYKIAotdm9pZCBHUFVQcm9jZXNzQ29u
bmVjdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJ
UEM6OkRlY29kZXImIGRlY29kZXIpCitib29sIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRj
aE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29k
ZXIpCiB7CiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2Vz
OjpNZWRpYVBsYXllclByaXZhdGVSZW1vdGU6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAg
ICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zdXBwbGVtZW50PFJlbW90ZU1lZGlhUGxheWVy
TWFuYWdlcj4oKS0+ZGlkUmVjZWl2ZVBsYXllck1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAjaWYgRU5B
QkxFKE1FRElBX1NUUkVBTSkKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkg
PT0gTWVzc2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1l
KCkpIHsKICAgICAgICAgaWYgKGF1dG8qIGNhcHR1cmVNYW5hZ2VyID0gV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkuc3VwcGxlbWVudDxVc2VyTWVkaWFDYXB0dXJlTWFuYWdlcj4oKSkKICAgICAgICAg
ICAgIGNhcHR1cmVNYW5hZ2VyLT5kaWRSZWNlaXZlTWVzc2FnZUZyb21HUFVQcm9jZXNzKGNvbm5l
Y3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICNpZiBQTEFURk9STShDT0NPQSkgJiYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIGlm
IChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6U2FtcGxlQnVmZmVy
RGlzcGxheUxheWVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgc2FtcGxlQnVm
ZmVyRGlzcGxheUxheWVyTWFuYWdlcigpLmRpZFJlY2VpdmVMYXllck1lc3NhZ2UoY29ubmVjdGlv
biwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKSAmJiBFTkFCTEUoVklERU9fVFJBQ0spCiAjZW5k
aWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKICNpZiBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9S
TShDT0NPQSkKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2Fn
ZXM6OkxpYldlYlJUQ0NvZGVjczo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLmxpYldlYlJUQ0NvZGVjcygpLmRpZFJlY2VpdmVNZXNzYWdl
KGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KICNlbmRpZgorICAgIHJldHVybiBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNw
YXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7Cit9CisKK2Jvb2wgR1BVUHJvY2Vzc0Nv
bm5lY3Rpb246OmRpc3BhdGNoU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9u
LCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiBy
ZXBseUVuY29kZXIpCit7CisgICAgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck1hcCgpLmRpc3BhdGNo
U3luY01lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQ
VVByb2Nlc3NDb25uZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oCShyZXZpc2lvbiAyNTczNjkpCisrKyBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKICNpbmNs
dWRlICJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyTWFwLmgiCiAjaW5j
bHVkZSAiU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlci5oIgogI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC00Nyw2ICs0
OCw3IEBAIHB1YmxpYzoKICAgICB+R1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKTsKICAgICAKICAgICBJ
UEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24oKSB7IHJldHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7
IH0KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYgbWVzc2FnZVJlY2VpdmVyTWFwKCkgeyBy
ZXR1cm4gbV9tZXNzYWdlUmVjZWl2ZXJNYXA7IH0KIAogI2lmIEhBVkUoQVVESVRfVE9LRU4pCiAg
ICAgdm9pZCBzZXRBdWRpdFRva2VuKE9wdGlvbmFsPGF1ZGl0X3Rva2VuX3Q+IGF1ZGl0VG9rZW4p
IHsgbV9hdWRpdFRva2VuID0gYXVkaXRUb2tlbjsgfQpAQCAtNjIsMTAgKzY0LDE1IEBAIHByaXZh
dGU6CiAgICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKICAgICB2b2lkIGRpZENsb3NlKElQ
Qzo6Q29ubmVjdGlvbiYpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBD
OjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgZmluYWw7CisgICAgdm9pZCBkaWRSZWNlaXZl
U3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVf
cHRyPElQQzo6RW5jb2Rlcj4mKSBmaW5hbDsKICAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2
ZXJOYW1lLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFtZSkgb3ZlcnJpZGU7CiAKKyAg
ICBib29sIGRpc3BhdGNoTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsK
KyAgICBib29sIGRpc3BhdGNoU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNv
ZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKTsKKwogICAgIC8vIFRoZSBjb25u
ZWN0aW9uIGZyb20gdGhlIHdlYiBwcm9jZXNzIHRvIHRoZSBHUFUgcHJvY2Vzcy4KICAgICBSZWY8
SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247CisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJN
YXAgbV9tZXNzYWdlUmVjZWl2ZXJNYXA7CiAKICNpZiBIQVZFKEFVRElUX1RPS0VOKQogICAgIE9w
dGlvbmFsPGF1ZGl0X3Rva2VuX3Q+IG1fYXVkaXRUb2tlbjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5t
ZXNzYWdlcy5pbgkocmV2aXNpb24gMjU3MzY5KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAt
MjIsNyArMjIsNyBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCi1tZXNzYWdlcyAtPiBH
UFVQcm9jZXNzQ29ubmVjdGlvbiB7CittZXNzYWdlcyAtPiBHUFVQcm9jZXNzQ29ubmVjdGlvbiBX
YW50c0Rpc3BhdGNoTWVzc2FnZSB7CiAKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9JbWFnZUJ1ZmZlcklkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0ltYWdlQnVmZmVySWRlbnRpZmll
ci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQor
CisjaW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2VudW0gSW1hZ2VCdWZmZXJJZGVudGlmaWVyVHlwZSB7IH07Cit1c2luZyBJbWFnZUJ1ZmZl
cklkZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPEltYWdlQnVmZmVySWRlbnRpZmllclR5cGU+
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VT
UykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCIK
KworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkdQVVByb2Nlc3NDb25uZWN0
aW9uLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZE1lc3NhZ2VzLmgiCisjaW5j
bHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXMuaCIKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdGQ6OnVuaXF1ZV9wdHI8
UmVtb3RlUmVuZGVyaW5nQmFja2VuZD4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCkK
K3sKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ+KG5l
dyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCkpOworfQorCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCkKK3sKKyAgICAvLyBSZWdpc3RlciBpdHNlbGYgYXMg
YSBNZXNzYWdlUmVjZWl2ZXIgaW4gdGhlIEdQVVByb2Nlc3NDb25uZWN0aW9uLgorICAgIElQQzo6
TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAgPSBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLm1lc3NhZ2VSZWNlaXZlck1hcCgp
OworICAgIG1lc3NhZ2VSZWNlaXZlck1hcC5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9yZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpLCAqdGhpcyk7CisKKyAgICAvLyBDcmVhdGUgdGhl
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS4KKyAgICBzZW5kKE1lc3NhZ2VzOjpHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpDcmVhdGVSZW5kZXJpbmdCYWNrZW5kKG1fcmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIpLCAwKTsKK30KKworUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6flJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQoKQoreworICAgIC8vIFVuLXJlZ2lzdGVyIGl0c2VsZiBhcyBhIE1l
c3NhZ2VSZWNlaXZlci4KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYgbWVzc2FnZVJlY2Vp
dmVyTWFwID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rp
b24oKS5tZXNzYWdlUmVjZWl2ZXJNYXAoKTsKKyAgICBtZXNzYWdlUmVjZWl2ZXJNYXAucmVtb3Zl
TWVzc2FnZVJlY2VpdmVyKCp0aGlzKTsKKworICAgIC8vIFJlbGVhc2UgdGhlIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS4KKyAgICBzZW5kKE1lc3NhZ2VzOjpHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjpSZWxlYXNlUmVuZGVyaW5nQmFja2VuZChtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyKSwgMCk7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiogUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdAoreworICAgIHJldHVybiAmV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCk7
Cit9CisKK3VpbnQ2NF90IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJEZXN0
aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRp
Zmllci50b1VJbnQ2NCgpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIFJl
bmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQsIENvbG9yU3BhY2UpCit7CisgICAgc3dp
dGNoIChyZW5kZXJpbmdNb2RlKSB7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGVBY2Nl
bGVyYXRlZDoKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90ZVVuYWNjZWxlcmF0ZWQ6Cisg
ICAgICAgIC8vIEZJWE1FOiBDcmVhdGUgdGhlIHJlbW90ZSBJbWFnZUJ1ZmZlcgorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ6OnJlbGVhc2VJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1h
Z2VCdWZmZXJJZGVudGlmaWVyKQoreworICAgIC8vIENyZWF0ZUltYWdlQnVmZmVyIG1lc3NhZ2Ug
c2hvdWxkIGhhdmUgYmVlbiByZWNlaXZlZCBiZWZvcmUgdGhpcyBvbmUuCisgICAgYm9vbCBmb3Vu
ZCA9IG1faW1hZ2VCdWZmZXJNYXAucmVtb3ZlKGltYWdlQnVmZmVySWRlbnRpZmllcik7CisgICAg
QVNTRVJUX1VOVVNFRChmb3VuZCwgZm91bmQpOworCisgICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5OjpSZWxlYXNlSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXJJZGVu
dGlmaWVyKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpJbmRleDogU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVy
LmgiCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJpbmdNb2RlLmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kCisgICAgOiBw
cml2YXRlIElQQzo6TWVzc2FnZVNlbmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNl
aXZlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kPiBjcmVhdGUoKTsKKworICAgIH5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCk7CisK
KyAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIuCisgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdl
U2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIHVpbnQ2NF90IG1lc3NhZ2VT
ZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6
OkZsb2F0U2l6ZSYsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSk7CisgICAgdm9pZCByZWxlYXNlSW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXJJZGVudGlmaWVyKTsKKworcHJpdmF0ZToKKyAgICBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kKCk7CisgICAgICAgIAorICAgIHVzaW5nIEltYWdlQnVmZmVyTWFwID0gSGFzaE1hcDxJbWFn
ZUJ1ZmZlcklkZW50aWZpZXIsIFdlYkNvcmU6OkltYWdlQnVmZmVyKj47CisgICAgSW1hZ2VCdWZm
ZXJNYXAgbV9pbWFnZUJ1ZmZlck1hcDsKKyAgICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBt
X3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHsgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI6
OmdlbmVyYXRlKCkgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
RU5BQkxFKEdQVV9QUk9DRVNTKQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC5tZXNzYWdlcy5pbgkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4JKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyOSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFy
ZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IK
KyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCittZXNzYWdlcyAtPiBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kIE5vdFJlZkNvdW50ZWQgeworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUo
R1BVX1BST0NFU1MpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisK
KyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworZW51bSBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllclR5cGUgeyB9OwordXNpbmcgUmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPFJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyVHlwZT47CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5B
QkxFKEdQVV9QUk9DRVNTKQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRp
YS9UZXh0VHJhY2tQcml2YXRlUmVtb3RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL21lZGlhL1RleHRUcmFja1ByaXZhdGVSZW1vdGUuY3BwCShyZXZpc2lv
biAyNTczNjkpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1RleHRUcmFj
a1ByaXZhdGVSZW1vdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMSArMjksMTMgQEAKIAog
I2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAorI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKICNp
bmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVSZW1vdGUuaCIKICNpbmNsdWRlICJSZW1vdGVNZWRp
YVBsYXllclByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVk
Lmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIFRl
eHRUcmFja1ByaXZhdGVSZW1vdGU6OlRleHRUcmFja1ByaXZhdGVSZW1vdGUoTWVkaWFQbGF5ZXJQ
cml2YXRlUmVtb3RlJiBwbGF5ZXIsIFRyYWNrUHJpdmF0ZVJlbW90ZUlkZW50aWZpZXIgaWRlbmRp
ZmllciwgVGV4dFRyYWNrUHJpdmF0ZVJlbW90ZUNvbmZpZ3VyYXRpb24mJiBjb25maWd1cmF0aW9u
KQogICAgIDogV2ViQ29yZTo6SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZShjb25maWd1cmF0aW9uLmN1
ZUZvcm1hdCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvVGV4dFRy
YWNrUHJpdmF0ZVJlbW90ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvbWVkaWEvVGV4dFRyYWNrUHJpdmF0ZVJlbW90ZS5oCShyZXZpc2lvbiAyNTczNjkpCisr
KyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1RleHRUcmFja1ByaXZhdGVSZW1v
dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsMTAgQEAKICNpbmNsdWRlICJUcmFja1By
aXZhdGVSZW1vdGVJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9JbmJhbmRUZXh0VHJh
Y2tQcml2YXRlLmg+CiAKK25hbWVzcGFjZSBJUEMgeworY2xhc3MgRGF0YVJlZmVyZW5jZTsKK30K
KwogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR2VuZXJpY0N1ZURhdGE7CiBjbGFzcyBJU09X
ZWJWVFRDdWU7CkBAIC01Miw5ICs1Niw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZERhdGFDdWUo
TWVkaWFUaW1lJiYgc3RhcnQsIE1lZGlhVGltZSYmIGVuZCwgSVBDOjpEYXRhUmVmZXJlbmNlJiYp
OwogCiAjaWYgRU5BQkxFKERBVEFDVUVfVkFMVUUpCi0gICAgdm9pZCBhZGREYXRhQ3VlV2l0aFR5
cGUoTWVkaWFUaW1lJiYgc3RhcnQsIE1lZGlhVGltZSYmIGVuZCwgU2VyaWFsaXplZFBsYXRmb3Jt
RGF0YUN1ZVZhbHVlJiYsIFN0cmluZyYmKTsKLSAgICB2b2lkIHVwZGF0ZURhdGFDdWUoTWVkaWFU
aW1lJiYgc3RhcnQsIE1lZGlhVGltZSYmIGVuZCwgU2VyaWFsaXplZFBsYXRmb3JtRGF0YUN1ZVZh
bHVlJiYpOwotICAgIHZvaWQgcmVtb3ZlRGF0YUN1ZShNZWRpYVRpbWUmJiBzdGFydCwgTWVkaWFU
aW1lJiYgZW5kLCBTZXJpYWxpemVkUGxhdGZvcm1EYXRhQ3VlVmFsdWUmJik7CisgICAgdm9pZCBh
ZGREYXRhQ3VlV2l0aFR5cGUoTWVkaWFUaW1lJiYgc3RhcnQsIE1lZGlhVGltZSYmIGVuZCwgV2Vi
Q29yZTo6U2VyaWFsaXplZFBsYXRmb3JtRGF0YUN1ZVZhbHVlJiYsIFN0cmluZyYmKTsKKyAgICB2
b2lkIHVwZGF0ZURhdGFDdWUoTWVkaWFUaW1lJiYgc3RhcnQsIE1lZGlhVGltZSYmIGVuZCwgV2Vi
Q29yZTo6U2VyaWFsaXplZFBsYXRmb3JtRGF0YUN1ZVZhbHVlJiYpOworICAgIHZvaWQgcmVtb3Zl
RGF0YUN1ZShNZWRpYVRpbWUmJiBzdGFydCwgTWVkaWFUaW1lJiYgZW5kLCBXZWJDb3JlOjpTZXJp
YWxpemVkUGxhdGZvcm1EYXRhQ3VlVmFsdWUmJik7CiAjZW5kaWYKIAogICAgIHZvaWQgYWRkR2Vu
ZXJpY0N1ZShXZWJDb3JlOjpHZW5lcmljQ3VlRGF0YSYpOwpJbmRleDogU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS93ZWJydGMvTWVkaWFSZWNvcmRlclByaXZhdGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL01lZGlhUmVjb3JkZXJQcml2
YXRlLmNwcAkocmV2aXNpb24gMjU3MzY5KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS93ZWJydGMvTWVkaWFSZWNvcmRlclByaXZhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw5
ICszOSw4IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1dlYkF1ZGlvQnVmZmVyTGlzdC5oPgogCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
LQogbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogTWVkaWFS
ZWNvcmRlclByaXZhdGU6Ok1lZGlhUmVjb3JkZXJQcml2YXRlKGNvbnN0IE1lZGlhU3RyZWFtUHJp
dmF0ZSYgc3RyZWFtKQogICAgIDogbV9pZGVudGlmaWVyKE1lZGlhUmVjb3JkZXJJZGVudGlmaWVy
OjpnZW5lcmF0ZSgpKQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS93ZWJydGMv
TWVkaWFSZWNvcmRlclByb3ZpZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL3dlYnJ0Yy9NZWRpYVJlY29yZGVyUHJvdmlkZXIuY3BwCShyZXZpc2lvbiAy
NTczNjkpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9NZWRpYVJlY29y
ZGVyUHJvdmlkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw5ICszMSw4IEBACiAjaW5jbHVk
ZSAiTWVkaWFSZWNvcmRlclByaXZhdGUuaCIKICNpbmNsdWRlIDxXZWJDb3JlL01lZGlhUmVjb3Jk
ZXJQcml2YXRlLmg+CiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29y
ZTo6TWVkaWFSZWNvcmRlclByaXZhdGU+IE1lZGlhUmVjb3JkZXJQcm92aWRlcjo6Y3JlYXRlTWVk
aWFSZWNvcmRlclByaXZhdGUoY29uc3QgTWVkaWFTdHJlYW1Qcml2YXRlJiBzdHJlYW0pCiB7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9TYW1wbGVCdWZmZXJEaXNw
bGF5TGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
d2VicnRjL1NhbXBsZUJ1ZmZlckRpc3BsYXlMYXllci5jcHAJKHJldmlzaW9uIDI1NzM2OSkKKysr
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL1NhbXBsZUJ1ZmZlckRpc3BsYXlM
YXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDkgKzM1LDggQEAKICNpbmNsdWRlICJTYW1w
bGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCiBuYW1lc3BhY2UgV2ViS2l0
IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBzdGQ6OnVuaXF1ZV9wdHI8U2FtcGxlQnVm
ZmVyRGlzcGxheUxheWVyPiBTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXI6OmNyZWF0ZShTYW1wbGVC
dWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyJiBtYW5hZ2VyLCBDbGllbnQmIGNsaWVudCwgYm9vbCBo
aWRlUm9vdExheWVyLCBJbnRTaXplIHNpemUpCiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL3dlYnJ0Yy9TYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9TYW1wbGVCdWZm
ZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyLmNwcAkocmV2aXNpb24gMjU3MzY5KQorKysgU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS93ZWJydGMvU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDggQEAKIAogI2lmIFBMQVRGT1JNKENP
Q09BKSAmJiBFTkFCTEUoR1BVX1BST0NFU1MpICYmIEVOQUJMRShWSURFT19UUkFDSykgJiYgRU5B
QkxFKE1FRElBX1NUUkVBTSkKIAotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KIG5hbWVzcGFj
ZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIHZvaWQgU2FtcGxlQnVmZmVy
RGlzcGxheUxheWVyTWFuYWdlcjo6ZGlkUmVjZWl2ZUxheWVyTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcikKIHsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuY3BwCShyZXZpc2lvbiAyNTczNjkpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzksNiArMzksNyBAQAogI2luY2x1ZGUgIk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVz
c2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKICNpbmNsdWRl
ICJQYWdlQmFubmVyLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIgogI2lu
Y2x1ZGUgIlVzZXJEYXRhLmgiCiAjaW5jbHVkZSAiV2ViQ29sb3JDaG9vc2VyLmgiCiAjaW5jbHVk
ZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCkBAIC04ODAsMzAgKzg4MSwyMiBAQCBHcmFwaGlj
c0xheWVyRmFjdG9yeSogV2ViQ2hyb21lQ2xpZW50OjpnCiB9CiAKICNpZiBVU0UoUkVRVUVTVF9B
TklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQotCiBSZWZQdHI8RGlzcGxheVJlZnJlc2hN
b25pdG9yPiBXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihQbGF0
Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQpIGNvbnN0CiB7CiAgICAgaWYgKGF1dG8qIGRyYXdpbmdB
cmVhID0gbV9wYWdlLmRyYXdpbmdBcmVhKCkpCiAgICAgICAgIHJldHVybiBkcmF3aW5nQXJlYS0+
Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKGRpc3BsYXlJRCk7CiAgICAgcmV0dXJuIG51bGxw
dHI7CiB9Ci0KICNlbmRpZgogCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IFdlYkNocm9t
ZUNsaWVudDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlLCBmbG9hdCwgQ29sb3JTcGFjZSkgY29uc3QKKyNpZiBFTkFCTEUoR1BV
X1BST0NFU1MpCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IFdlYkNocm9tZUNsaWVudDo6
Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNl
KSBjb25zdAogewotICAgIHN3aXRjaCAocmVuZGVyaW5nTW9kZSkgewotICAgIGNhc2UgUmVuZGVy
aW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQ6Ci0gICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1v
dGVVbmFjY2VsZXJhdGVkOgotICAgICAgICAvLyBGSVhNRTogQ3JlYXRlIHRoZSByZW1vdGUgSW1h
Z2VCdWZmZXIKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBkZWZhdWx0OgotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICBpZiAoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZCkKKyAgICAgICAgbV9yZW1vdGVSZW5kZXJp
bmdCYWNrZW5kID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCk7CisgICAgcmV0dXJu
IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZC0+Y3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVy
aW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKTsKIH0KKyNlbmRpZgogCiB2b2lk
IFdlYkNocm9tZUNsaWVudDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUmLCBHcmFwaGlj
c0xheWVyKiBsYXllcikKIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHJldmlzaW9uIDI1NzM2
OSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQCBlbnVtIGNsYXNzIFN0b3Jh
Z2VBY2Nlc3NXYXNHcmFudGVkIDogYm9vCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOwogY2xhc3MgV2ViRnJhbWU7CiBjbGFzcyBXZWJQYWdlOwog
CkBAIC0xMjMsOCArMTI0LDYgQEAgcHJpdmF0ZToKICAgICBXZWJDb3JlOjpJbnRQb2ludCBhY2Nl
c3NpYmlsaXR5U2NyZWVuVG9Sb290Vmlldyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0
IGZpbmFsOwogICAgIFdlYkNvcmU6OkludFJlY3Qgcm9vdFZpZXdUb0FjY2Vzc2liaWxpdHlTY3Jl
ZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIGNvbnN0IGZpbmFsOwogCi0gICAgc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBXZWJD
b3JlOjpGbG9hdFNpemUmLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UpIGNvbnN0IGZpbmFsOwotCiAgICAgdm9pZCBkaWRG
aW5pc2hMb2FkaW5nSW1hZ2VGb3JFbGVtZW50KFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQmKSBm
aW5hbDsKIAogICAgIFBsYXRmb3JtUGFnZUNsaWVudCBwbGF0Zm9ybVBhZ2VDbGllbnQoKSBjb25z
dCBmaW5hbDsKQEAgLTIzNSw2ICsyMzQsMTAgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V2ViQ29y
ZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoV2Vi
Q29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpIGNvbnN0IGZpbmFsOwogI2VuZGlmCiAKKyNpZiBFTkFC
TEUoR1BVX1BST0NFU1MpCisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkltYWdlQnVmZmVy
PiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBXZWJDb3JlOjpS
ZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2Up
IGNvbnN0IGZpbmFsOworI2VuZGlmCisKICAgICBDb21wb3NpdGluZ1RyaWdnZXJGbGFncyBhbGxv
d2VkQ29tcG9zaXRpbmdUcmlnZ2VycygpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Q29tcG9zaXRpbmdUcmlnZ2VyRmxhZ3M+KApAQCAtMzkyLDcgKzM5NSw5
IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBSZWZQdHI8V2ViRnJhbWU+IG1fY2FjaGVkRnJhbWVT
ZXRMYXJnZXN0RnJhbWU7CiAgICAgbXV0YWJsZSBib29sIG1fY2FjaGVkTWFpbkZyYW1lSGFzSG9y
aXpvbnRhbFNjcm9sbGJhciB7IGZhbHNlIH07CiAgICAgbXV0YWJsZSBib29sIG1fY2FjaGVkTWFp
bkZyYW1lSGFzVmVydGljYWxTY3JvbGxiYXIgeyBmYWxzZSB9OwotCisjaWYgRU5BQkxFKEdQVV9Q
Uk9DRVNTKQorICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ+IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZDsKKyNlbmRpZgogICAgIFdlYlBhZ2UmIG1fcGFn
ZTsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391907</attachid>
            <date>2020-02-27 13:47:42 -0800</date>
            <delta_ts>2020-02-27 13:47:42 -0800</delta_ts>
            <desc>Fix internal bots</desc>
            <filename>bug-207198-20200227134741.patch</filename>
            <type>text/plain</type>
            <size>2089</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3NTgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGYzMWVlYjY3MWQ4YjZjZTJl
N2FkMTQwZjc1NDI1YmU3ZDdjZmZkZWYuLjcxZGViMzllOWE0NzdiOGZlMDM0MGNlNjU3MDVlMjli
ODgwNjBmZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjAtMDItMjcgIFNhaWQgQWJv
dS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBVbnJldmlld2Vk
IHVuaWZpZWQgc291cmNlIGJ1aWxkcyBmaXguCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDcxOTgKKworICAgICAgICBJbmNsdWRlIGhlYWRlciBmaWxl
cyBmb3IgdHlwZXMgcmVmZXJlbmNlZCBpbiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmguCisKKyAg
ICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5o
OgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmQuaDoKKwogMjAyMC0wMi0yNyAgVGltIE1vbnJvZSAgPHRpbW1vbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgQWRkIEdQVSBQcm9jZXNzIHN1cHBvcnQgZm9yIGFjY2Vzc0xvZyBldCBhbC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkuaAppbmRleCBjOWQ5OTQ4Y2I3YjFjNDNkMGM0YmE5MjA5OGVh
Y2ExYjk5MmJjZDY2Li44ZmNlNTc2ZmQyOTllMjdhZTg1NjVjNmRmZTMwMDA2OWZkNzRjYTdiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCkBAIC0zMyw3ICszMywxMCBAQAogI2luY2x1
ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKICNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
ci5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3JTcGFjZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
RmxvYXRTaXplLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbWFnZUJ1ZmZlci5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvUmVuZGVyaW5nTW9kZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5j
bHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5oCmluZGV4IGY0M2FmMDgwYjU1OWY0YjgzMzY2ZWJlNTZhOWExZjA4OGY1MDEw
ODAuLmE4ZDI5ZTgyNmQ1YWZkZjI1ZWFmNjI4NWE1YTU3YTM2NTI3OWVhZDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC5oCkBAIC0zMSw3ICszMSwxMSBAQAogI2luY2x1ZGUgIk1lc3NhZ2VS
ZWNlaXZlci5oIgogI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKICNpbmNsdWRlICJSZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3JTcGFjZS5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRTaXplLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbWFnZUJ1
ZmZlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyaW5nTW9kZS5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>