<?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>191080</bug_id>
          
          <creation_ts>2018-10-30 14:11:53 -0700</creation_ts>
          <short_desc>[LFC] Rename LayoutContext to LayoutState</short_desc>
          <delta_ts>2018-10-31 06:39:29 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1473401</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2018-10-30 14:11:53 -0700</bug_when>
    <thetext>so that LayoutState owns 
1. layout tree
2. formatting states for each formatting context
3. display tree</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1473407</commentid>
    <comment_count>1</comment_count>
      <attachid>353407</attachid>
    <who name="alan">zalan</who>
    <bug_when>2018-10-30 14:23:29 -0700</bug_when>
    <thetext>Created attachment 353407
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1473688</commentid>
    <comment_count>2</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2018-10-31 06:38:06 -0700</bug_when>
    <thetext>Committed r237631: &lt;https://trac.webkit.org/changeset/237631&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1473689</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-10-31 06:39:29 -0700</bug_when>
    <thetext>&lt;rdar://problem/45698854&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>353407</attachid>
            <date>2018-10-30 14:23:29 -0700</date>
            <delta_ts>2018-10-31 05:49:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191080-20181030142328.patch</filename>
            <type>text/plain</type>
            <size>218601</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM3NTg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2M0MWViNmI1ZGI4MzRm
MTBjNDQ5NmZmZTFhNWEzOTEzZWY0ODRmNC4uMzU1YjZiNzI2YmM0ZTNkNTJlZGM0Yjc5YTdjZDEz
MjU1MTY4NzY4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwNiBAQAorMjAxOC0xMC0zMCAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgorCisgICAgICAgIFtMRkNdIFJlbmFtZSBMYXlv
dXRDb250ZXh0IHRvIExheW91dFN0YXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xOTEwODAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBMYXlvdXRDb250ZXh0IG5hbWluZyB3YXMgYSBiaXQgbWlzbGVhZGlu
ZyBzaW5jZSBub25lIG9mIHRoZSBvdGhlciAqRm9ybWF0dGluZ0NvbnRleHQgY2xhc3NlcyAoQmxv
Y2tGb3JtYXR0aW5nQ29udGV4dCBldGMpIGhvbGQgc3RhdGVzLgorICAgICAgICAoTGF5b3V0Q29u
dGV4dC5jcHAgLT4gTGF5b3V0Rm9ybWF0dGluZ1N0YXRlLmNwcCBiZWNhdXNlIExheW91dFN0YXRl
LmNwcCBuYW1lIGlzIGFscmVhZHkgdGFrZW4uKQorICAgICAgICAKKyAgICAgICAgTm93IHRoZSBj
dXJyZW50IHN0YXRlIGlzIGFzIGZvbGxvd3M6CisKKyAgICAgICAgTGF5b3V0U3RhdGUgaGFzCisg
ICAgICAgIDEuIExheW91dCB0cmVlCisgICAgICAgIDIuIFN0YXRlIGNvbnRlbnQgZm9yIGVhY2gg
Zm9ybWF0dGluZyBzdWJ0cmVlcworICAgICAgICAzLiBEaXNwbGF5IHRyZWUKKworICAgICAgICAq
IFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBsYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU91dE9mRmxvd0hvcml6b250
YWxHZW9tZXRyeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdD
b250ZXh0Ojpjb21wdXRlT3V0T2ZGbG93VmVydGljYWxHZW9tZXRyeSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlQm9yZGVyQW5kUGFk
ZGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0
OjpwbGFjZUluRmxvd1Bvc2l0aW9uZWRDaGlsZHJlbiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRPdXRPZkZsb3dEZXNjZW5kYW50cyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjptYXBC
b3hUb0FuY2VzdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRl
eHQ6Om1hcFRvcExlZnRUb0FuY2VzdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9y
bWF0dGluZ0NvbnRleHQ6Om1hcENvb3JkaW5hdGVUb0FuY2VzdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6OnZhbGlkYXRlR2VvbWV0cnlDb25zdHJhaW50
c0FmdGVyTGF5b3V0IGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5
OjpvdXRPZkZsb3dWZXJ0aWNhbEdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dIb3Jpem9udGFsR2VvbWV0cnkp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6
OmZsb2F0aW5nSGVpZ2h0QW5kTWFyZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9y
bWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpmbG9hdGluZ1dpZHRoQW5kTWFyZ2luKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbmxpbmVS
ZXBsYWNlZEhlaWdodEFuZE1hcmdpbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1h
dHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5saW5lUmVwbGFjZWRXaWR0aEFuZE1hcmdpbik6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29t
cGxpY2F0ZWRDYXNlcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250
ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93UmVwbGFjZWRWZXJ0aWNhbEdlb21ldHJ5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZs
b3dSZXBsYWNlZEhvcml6b250YWxHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93Tm9uUmVwbGFjZWRWZXJ0aWNh
bEdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6
Okdlb21ldHJ5OjpvdXRPZkZsb3dOb25SZXBsYWNlZEhvcml6b250YWxHZW9tZXRyeSk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6ZmxvYXRp
bmdSZXBsYWNlZEhlaWdodEFuZE1hcmdpbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZv
cm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6ZmxvYXRpbmdSZXBsYWNlZFdpZHRoQW5kTWFyZ2lu
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5
OjpmbG9hdGluZ05vblJlcGxhY2VkV2lkdGhBbmRNYXJnaW4pOgorICAgICAgICAqIGxheW91dC9G
b3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
Y29udGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRNYXhIZWlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6
OmNvbXB1dGVkTWluSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6c3RhdGljVmVy
dGljYWxQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpzdGF0aWNIb3Jpem9udGFsUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpz
aHJpbmtUb0ZpdFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0Nv
bnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dOb25SZXBsYWNlZFZlcnRpY2FsR2VvbWV0cnkpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91
dE9mRmxvd05vblJlcGxhY2VkSG9yaXpvbnRhbEdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dSZXBsYWNlZFZl
cnRpY2FsR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29u
dGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd1JlcGxhY2VkSG9yaXpvbnRhbEdlb21ldHJ5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21w
bGljYXRlZENhc2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRl
eHQ6Okdlb21ldHJ5OjpmbG9hdGluZ05vblJlcGxhY2VkV2lkdGhBbmRNYXJnaW4pOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmZsb2F0aW5n
UmVwbGFjZWRIZWlnaHRBbmRNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3Jt
YXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmZsb2F0aW5nUmVwbGFjZWRXaWR0aEFuZE1hcmdpbik6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6
b3V0T2ZGbG93VmVydGljYWxHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZv
cm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93SG9yaXpvbnRhbEdlb21ldHJ5KToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpm
bG9hdGluZ0hlaWdodEFuZE1hcmdpbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1h
dHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6ZmxvYXRpbmdXaWR0aEFuZE1hcmdpbik6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5saW5lUmVw
bGFjZWRIZWlnaHRBbmRNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0
aW5nQ29udGV4dDo6R2VvbWV0cnk6OmlubGluZVJlcGxhY2VkV2lkdGhBbmRNYXJnaW4pOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1
dGVkQm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6
Okdlb21ldHJ5Ojpjb21wdXRlZFBhZGRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpG
b3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkTm9uQ29sbGFwc2VkSG9yaXpvbnRh
bE1hcmdpblZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRl
eHQ6Okdlb21ldHJ5Ojpjb21wdXRlZE5vbkNvbGxhcHNlZFZlcnRpY2FsTWFyZ2luVmFsdWUpOgor
ICAgICAgICAqIGxheW91dC9Gb3JtYXR0aW5nU3RhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpGb3JtYXR0aW5nU3RhdGU6OkZvcm1hdHRpbmdTdGF0ZSk6CisgICAgICAgICogbGF5
b3V0L0Zvcm1hdHRpbmdTdGF0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0
aW5nU3RhdGU6OnNldEluc3RyaW5zaWNXaWR0aENvbnN0cmFpbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6Rm9ybWF0dGluZ1N0YXRlOjppbnN0cmluc2ljV2lkdGhDb25zdHJhaW50cyBj
b25zdCk6CisgICAgICAgICogbGF5b3V0L0xheW91dEZvcm1hdHRpbmdTdGF0ZS5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvTGF5b3V0Q29udGV4dC5jcHAuCisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkxheW91dFN0YXRlOjpMYXlvdXRTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkxheW91dFN0YXRlOjppbml0aWFsaXplUm9vdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkxheW91dFN0YXRlOjp1cGRhdGVMYXlvdXQpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpMYXlvdXRTdGF0ZTo6bGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRTdWJ0cmVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGF5b3V0U3RhdGU6OmRpc3BsYXlCb3hGb3JM
YXlvdXRCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMYXlvdXRTdGF0ZTo6
c3R5bGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGF5b3V0U3RhdGU6Om1h
cmtOZWVkc1VwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxheW91dFN0YXRlOjpm
b3JtYXR0aW5nU3RhdGVGb3JCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
YXlvdXRTdGF0ZTo6ZXN0YWJsaXNoZWRGb3JtYXR0aW5nU3RhdGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpMYXlvdXRTdGF0ZTo6Y3JlYXRlRm9ybWF0dGluZ1N0YXRlRm9yRm9y
bWF0dGluZ1Jvb3RJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxheW91dFN0
YXRlOjpmb3JtYXR0aW5nQ29udGV4dCBjb25zdCk6CisgICAgICAgICogbGF5b3V0L0xheW91dEZv
cm1hdHRpbmdTdGF0ZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvbGF5b3V0L0xheW91
dENvbnRleHQuaC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGF5b3V0U3RhdGU6OnNldElu
UXVpcmtzTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxheW91dFN0YXRlOjpoYXNE
aXNwbGF5Qm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGF5b3V0U3RhdGU6
OmluUXVpcmtzTW9kZSBjb25zdCk6CisgICAgICAgICogbGF5b3V0L1ZlcmlmaWNhdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Om91dHB1dE1pc21hdGNoaW5nU2ltcGxlTGluZUlu
Zm9ybWF0aW9uSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpvdXRwdXRNaXNt
YXRjaGluZ0NvbXBsZXhMaW5lSW5mb3JtYXRpb25JZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6Om91dHB1dE1pc21hdGNoaW5nQmxvY2tCb3hJbmZvcm1hdGlvbklmTmVlZGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6dmVyaWZ5QW5kT3V0cHV0U3VidHJlZSk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxheW91dFN0YXRlOjp2ZXJpZnlBbmRPdXRwdXRNaXNtYXRj
aGluZ0xheW91dFRyZWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMYXlvdXRD
b250ZXh0Ojp2ZXJpZnlBbmRPdXRwdXRNaXNtYXRjaGluZ0xheW91dFRyZWUgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIGxheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29u
dGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRl
eHQ6OmxheW91dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0
dGluZ0NvbnRleHQ6OmxheW91dEZvcm1hdHRpbmdDb250ZXh0Um9vdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVTdGF0aWNQ
b3NpdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQ6OmNvbXB1dGVFc3RpbWF0ZWRNYXJnaW5Ub3AgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlRXN0aW1hdGVkTWFy
Z2luVG9wRm9yQW5jZXN0b3JzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qmxv
Y2tGb3JtYXR0aW5nQ29udGV4dDo6cHJlY29tcHV0ZVZlcnRpY2FsUG9zaXRpb25Gb3JGb3JtYXR0
aW5nUm9vdElmTmVlZGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6aGFzUHJl
Y29tcHV0ZWRNYXJnaW5Ub3ApOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1h
dHRpbmdDb250ZXh0Ojpjb21wdXRlRmxvYXRpbmdQb3NpdGlvbiBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVQb3NpdGlvblRv
QXZvaWRGbG9hdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1h
dHRpbmdDb250ZXh0Ojpjb21wdXRlVmVydGljYWxQb3NpdGlvbkZvckZsb2F0Q2xlYXIgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21w
dXRlSW5GbG93UG9zaXRpb25lZFBvc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVdpZHRoQW5kTWFyZ2luIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29t
cHV0ZUhlaWdodEFuZE1hcmdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJs
b2NrRm9ybWF0dGluZ0NvbnRleHQ6Omluc3RyaW5zaWNXaWR0aENvbnN0cmFpbnRzIGNvbnN0KToK
KyAgICAgICAgKiBsYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2Vv
bWV0cnk6OmluRmxvd0hlaWdodEFuZE1hcmdpbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dXaWR0aEFuZE1hcmdpbik6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21l
dHJ5OjppbkZsb3dOb25SZXBsYWNlZEhlaWdodEFuZE1hcmdpbik6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dOb25SZXBs
YWNlZFdpZHRoQW5kTWFyZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3Jt
YXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmluRmxvd1JlcGxhY2VkV2lkdGhBbmRNYXJnaW4pOgor
ICAgICAgICAqIGxheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdl
b21ldHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6aXNTdHJldGNoZWRUb0luaXRp
YWxDb250YWluaW5nQmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1h
dHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5GbG93Tm9uUmVwbGFjZWRIZWlnaHRBbmRNYXJnaW4p
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9t
ZXRyeTo6aW5GbG93Tm9uUmVwbGFjZWRXaWR0aEFuZE1hcmdpbik6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dSZXBsYWNl
ZFdpZHRoQW5kTWFyZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0
aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0YXRpY1Bvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmluRmxvd1Bvc2l0aW9u
ZWRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQ6Okdlb21ldHJ5OjppbkZsb3dIZWlnaHRBbmRNYXJnaW4pOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5GbG93V2lkdGhB
bmRNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250
ZXh0OjpHZW9tZXRyeTo6aW5zdHJpbnNpY1dpZHRoQ29uc3RyYWludHMpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6ZXN0aW1hdGVk
TWFyZ2luVG9wKToKKyAgICAgICAgKiBsYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0
dGluZ1N0YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5n
U3RhdGU6OkJsb2NrRm9ybWF0dGluZ1N0YXRlKToKKyAgICAgICAgKiBsYXlvdXQvYmxvY2tmb3Jt
YXR0aW5nL0Jsb2NrRm9ybWF0dGluZ1N0YXRlLmg6CisgICAgICAgICogbGF5b3V0L2Jsb2NrZm9y
bWF0dGluZy9CbG9ja0ludmFsaWRhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OmNvbXB1dGVVcGRhdGVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Y29tcHV0ZVVw
ZGF0ZVR5cGVGb3JBbmNlc3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrSW52
YWxpZGF0aW9uOjppbnZhbGlkYXRlKToKKyAgICAgICAgKiBsYXlvdXQvYmxvY2tmb3JtYXR0aW5n
L0Jsb2NrSW52YWxpZGF0aW9uLmg6CisgICAgICAgICogbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9C
bG9ja01hcmdpbkNvbGxhcHNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6aXNNYXJn
aW5Ub3BDb2xsYXBzZWRXaXRoUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6aXNN
YXJnaW5Cb3R0b21Db2xsYXBzZWRUaHJvdWdoKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Ok1hcmdpbkNvbGxhcHNlOjpjb2xsYXBz
ZWRNYXJnaW5Ub3BGcm9tRmlyc3RDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJs
b2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpNYXJnaW5Db2xsYXBzZTo6bm9uQ29sbGFw
c2VkTWFyZ2luVG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5n
Q29udGV4dDo6R2VvbWV0cnk6Ok1hcmdpbkNvbGxhcHNlOjpjb21wdXRlZE5vbkNvbGxhcHNlZE1h
cmdpblRvcCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRl
eHQ6Okdlb21ldHJ5OjpNYXJnaW5Db2xsYXBzZTo6Y29tcHV0ZWROb25Db2xsYXBzZWRNYXJnaW5C
b3R0b20pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
OjpHZW9tZXRyeTo6TWFyZ2luQ29sbGFwc2U6Om1hcmdpblRvcCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpNYXJnaW5Db2xsYXBz
ZTo6bWFyZ2luQm90dG9tKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0
aW5nQ29udGV4dDo6R2VvbWV0cnk6Ok1hcmdpbkNvbGxhcHNlOjppc01hcmdpbkJvdHRvbUNvbGxh
cHNlZFdpdGhQYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRp
bmdDb250ZXh0OjpHZW9tZXRyeTo6TWFyZ2luQ29sbGFwc2U6OmNvbGxhcHNlZE1hcmdpbkJvdHRv
bUZyb21MYXN0Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRp
bmdDb250ZXh0OjpHZW9tZXRyeTo6TWFyZ2luQ29sbGFwc2U6Om5vbkNvbGxhcHNlZE1hcmdpbkJv
dHRvbSk6CisgICAgICAgICogbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlCb3guaDoKKyAgICAg
ICAgKiBsYXlvdXQvZmxvYXRzL0Zsb2F0QXZvaWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkZsb2F0QXZvaWRlcjo6RmxvYXRBdm9pZGVyKToKKyAgICAgICAgKiBsYXlvdXQvZmxv
YXRzL0Zsb2F0QXZvaWRlci5oOgorICAgICAgICAqIGxheW91dC9mbG9hdHMvRmxvYXRCb3guY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGbG9hdEJveDo6RmxvYXRCb3gpOgorICAgICAg
ICAqIGxheW91dC9mbG9hdHMvRmxvYXRCb3guaDoKKyAgICAgICAgKiBsYXlvdXQvZmxvYXRzL0Zs
b2F0aW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZsb2F0aW5nQ29u
dGV4dDo6cG9zaXRpb25Gb3JGbG9hdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkZsb2F0aW5nQ29udGV4dDo6cG9zaXRpb25Gb3JGbG9hdEF2b2lkaW5nIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6RmxvYXRpbmdDb250ZXh0Ojp2ZXJ0aWNhbFBvc2l0aW9uV2l0
aENsZWFyYW5jZSBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ0NvbnRl
eHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6RmxvYXRpbmdDb250ZXh0OjpsYXlvdXRT
dGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZsb2F0aW5nQ29udGV4dDo6
bGF5b3V0Q29udGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2Zsb2F0cy9G
bG9hdGluZ1N0YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6RmxvYXRpbmdTdGF0
ZTo6RmxvYXRJdGVtOjpGbG9hdEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGbG9h
dGluZ1N0YXRlOjpGbG9hdGluZ1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rmxv
YXRpbmdTdGF0ZTo6Y29uc3RyYWludHMgY29uc3QpOgorICAgICAgICAqIGxheW91dC9mbG9hdHMv
RmxvYXRpbmdTdGF0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGbG9hdGluZ1N0YXRl
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGbG9hdGluZ1N0YXRlOjpsYXlv
dXRTdGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZsb2F0aW5nU3RhdGU6
OmxheW91dENvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0Ojppbml0aWFsaXplTmV3
TGluZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdD
b250ZXh0OjpsYXlvdXRJbmxpbmVDb250ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dEZvcm1hdHRpbmdDb250ZXh0Um9v
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250
ZXh0Ojpjb21wdXRlV2lkdGhBbmRIZWlnaHRGb3JJbmxpbmVCb3ggY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUZsb2F0UG9z
aXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dDo6Y29tcHV0ZVN0YXRpY1Bvc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVJbkZsb3dQb3NpdGlvbmVk
UG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6aW5zdHJpbnNpY1dpZHRoQ29uc3RyYWludHMgY29uc3QpOgorICAgICAgICAq
IGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0Lmg6CisgICAg
ICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9t
ZXRyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250
ZXh0OjpHZW9tZXRyeTo6aW5saW5lQmxvY2tXaWR0aEFuZE1hcmdpbik6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5saW5lQmxv
Y2tIZWlnaHRBbmRNYXJnaW4pOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lu
bGluZUZvcm1hdHRpbmdTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGlu
ZUZvcm1hdHRpbmdTdGF0ZTo6SW5saW5lRm9ybWF0dGluZ1N0YXRlKToKKyAgICAgICAgKiBsYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nU3RhdGUuaDoKKyAgICAgICAgKiBs
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVJbnZhbGlkYXRpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVJbnZhbGlkYXRpb246OmludmFsaWRhdGUpOgorICAgICAg
ICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUludmFsaWRhdGlvbi5oOgorICAgICAg
ICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lTGluZUJyZWFrZXI6OklubGluZUxpbmVCcmVha2Vy
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lTGluZUJyZWFrZXI6OnJ1bldpZHRo
IGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJl
YWtlci5oOgorICAgICAgICAqIGxheW91dC9sYXlvdXR0cmVlL0xheW91dFRyZWVCdWlsZGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6b3V0cHV0SW5saW5lUnVucyk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6Om91dHB1dExheW91dFRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpzaG93TGF5b3V0VHJlZSk6CisgICAgICAgICogbGF5b3V0L2xheW91dHRyZWUvTGF5
b3V0VHJlZUJ1aWxkZXIuaDoKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlld0xheW91dENvbnRleHQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6bGF5b3V0VXNpbmdGb3JtYXR0aW5nQ29udGV4dCk6CisK
IDIwMTgtMTAtMjkgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBb
TEZDXVtJRkNdIEludHJvZHVjZSBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5IGNsYXNz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0CmluZGV4IDE0YjRiOWYyOGEwYjMwODdmODEyOTFiZjcwY2FhZDYxZjAyNDI2
YTIuLmU1ZDM1ZmU5NmZiNjMxZTYzMWMwN2M4MTU1ZDhlMzQyYmRjOWRkYzMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CkBAIC0xMjQ5LDcgKzEyNDksNyBAQCBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJS
dW50aW1lQWdlbnQuY3BwCiBsYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuY3BwCiBsYXlvdXQvRm9y
bWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKIGxheW91dC9Gb3JtYXR0aW5nU3RhdGUuY3BwCi1s
YXlvdXQvTGF5b3V0Q29udGV4dC5jcHAKK2xheW91dC9MYXlvdXRGb3JtYXR0aW5nU3RhdGUuY3Bw
CiBsYXlvdXQvVmVyaWZpY2F0aW9uLmNwcAogbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zv
cm1hdHRpbmdDb250ZXh0LmNwcAogbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRp
bmdDb250ZXh0R2VvbWV0cnkuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMjFkMjVmZDg1MWE2ZTIxYTgxY2VlM2ZmN2Y2YzYz
M2VhYzZkMjUxNi4uYTgwYTI5MzE3YzZlZmI3MWE1ZWE2YTk0ZjY4OWI5M2EwYjUyYjFhNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtMTk5NCw3ICsxOTk0LDcgQEAKIAkJNkYyMjJCNzYxQUI1MkQ4QTAwOTQ2NTFBIC8qIFdlYkdM
VmVydGV4QXJyYXlPYmplY3RCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZGMjIyQjc1MUFCNTJEOEEwMDk0NjUxQSAvKiBXZWJHTFZlcnRleEFy
cmF5T2JqZWN0QmFzZS5jcHAgKi87IH07CiAJCTZGM0UxRjYyMjEzNjE0MjAwMEE2NUEwOCAvKiBG
bG9hdEJveC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NkYzRTFGNjEyMTM2MTQxNzAwQTY1QTA4IC8qIEZsb2F0Qm94LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkY1MjE3QzcyMTc3RjVBNzAwNjU4M0JC
IC8qIElubGluZVJ1blByb3ZpZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2RjUyMTdDNDIxNzdGNUE2MDA2NTgzQkIgLyogSW5saW5lUnVuUHJvdmlk
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk2
RjdDQTNDNjIwOEMyOTU3MDAyRjI5QUIgLyogTGF5b3V0Q29udGV4dC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkY3Q0EzQzQyMDhDMjk1NjAwMkYyOUFC
IC8qIExheW91dENvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQk2RjdDQTNDNjIwOEMyOTU3MDAyRjI5QUIgLyogTGF5b3V0Rm9ybWF0dGlu
Z1N0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
RjdDQTNDNDIwOEMyOTU2MDAyRjI5QUIgLyogTGF5b3V0Rm9ybWF0dGluZ1N0YXRlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkY3Q0EzQ0EyMDhD
MkIyRTAwMkYyOUFCIC8qIElubGluZUZvcm1hdHRpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjdDQTNDODIwOEMyQjJFMDAyRjI5QUIg
LyogSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk2Rjk5NUExNTFBNzA3NTYyMDBBNzM1RjQgLyogV2ViR0xT
eW5jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZG
OTk1QTEzMUE3MDc1NjIwMEE3MzVGNCAvKiBXZWJHTFN5bmMuY3BwICovOyB9OwogCQk2Rjk5NUEx
NjFBNzA3NTYyMDBBNzM1RjQgLyogV2ViR0xTeW5jLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2Rjk5NUExNDFBNzA3NTYyMDBBNzM1RjQgLyogV2ViR0xT
eW5jLmggKi87IH07CkBAIC05MDgzLDggKzkwODMsOCBAQAogCQk2RjUyMTdDNDIxNzdGNUE2MDA2
NTgzQkIgLyogSW5saW5lUnVuUHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSW5saW5lUnVuUHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NkY1MjE3QzYyMTc3RjVBNjAwNjU4M0JCIC8qIElubGluZVJ1blByb3ZpZGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGluZVJ1blByb3ZpZGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkY3MzkxOEMyMTA2Q0VERDAwNkFGMjYyIC8qIExh
eW91dFVuaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dFVuaXRzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTZGN0NBM0M0MjA4QzI5NTYwMDJGMjlBQiAvKiBMYXlvdXRDb250ZXh0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dENvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNkY3Q0EzQzUyMDhDMjk1NjAwMkYyOUFCIC8qIExheW91dENvbnRleHQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTGF5b3V0Q29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTZGN0NBM0M0MjA4QzI5NTYwMDJGMjlBQiAvKiBMYXlvdXRGb3JtYXR0aW5nU3Rh
dGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0Rm9ybWF0dGluZ1N0YXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTZGN0NBM0M1MjA4QzI5NTYwMDJGMjlBQiAvKiBMYXlvdXRGb3Jt
YXR0aW5nU3RhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGF5b3V0Rm9ybWF0dGluZ1N0YXRl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkY3Q0EzQzgyMDhDMkIyRTAwMkYy
OUFCIC8qIElubGluZUZvcm1hdHRpbmdDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZUZv
cm1hdHRpbmdDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGN0NBM0M5
MjA4QzJCMkUwMDJGMjlBQiAvKiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTZGOTk1QTA5MUE3MDcwRTYwMEE3MzVGNCAvKiBXZWJHTFF1ZXJ5LmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJHTFF1ZXJ5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTE2MDIwLDggKzE2MDIwLDggQEAKIAkJCQkxMTVDRkE3NTIwOEFGRTMwMDAx
RTY5OTEgLyogRm9ybWF0dGluZ1N0YXRlLmNwcCAqLywKIAkJCQkxMTVDRkE3NDIwOEFGRTMwMDAx
RTY5OTEgLyogRm9ybWF0dGluZ1N0YXRlLmggKi8sCiAJCQkJMTE1Rjc4MDUyMDlDQkNCRDAwNzM5
QzEzIC8qIEludmFsaWRhdGlvbi5oICovLAotCQkJCTZGN0NBM0M1MjA4QzI5NTYwMDJGMjlBQiAv
KiBMYXlvdXRDb250ZXh0LmNwcCAqLywKLQkJCQk2RjdDQTNDNDIwOEMyOTU2MDAyRjI5QUIgLyog
TGF5b3V0Q29udGV4dC5oICovLAorCQkJCTZGN0NBM0M1MjA4QzI5NTYwMDJGMjlBQiAvKiBMYXlv
dXRGb3JtYXR0aW5nU3RhdGUuY3BwICovLAorCQkJCTZGN0NBM0M0MjA4QzI5NTYwMDJGMjlBQiAv
KiBMYXlvdXRGb3JtYXR0aW5nU3RhdGUuaCAqLywKIAkJCQk2RjczOTE4QzIxMDZDRUREMDA2QUYy
NjIgLyogTGF5b3V0VW5pdHMuaCAqLywKIAkJCQkxMUZGMDJENTIwQkEzQzgxMDA4M0YyNUIgLyog
VmVyaWZpY2F0aW9uLmNwcCAqLywKIAkJCSk7CkBAIC0yOTgwNSw4ICsyOTgwNSw4IEBACiAJCQkJ
MTE1Q0ZBOTcyMDhCOTUyQjAwMUU2OTkxIC8qIExheW91dEJveC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTEzMTBDRjYyMEJBNEE1NjAwNjVBOEQwIC8qIExheW91dENoaWxkSXRlcmF0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTExOTlGQTQ2MjA4RTM1QTMwMDIzNThDQyAvKiBMYXlvdXRDb250YWlu
ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTZGN0NBM0M2MjA4QzI5NTcwMDJGMjlBQiAvKiBMYXlv
dXRDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxMTMxMENGNTIwQkE0QTRDMDA2NUE4RDAg
LyogTGF5b3V0RGVzY2VuZGFudEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk2RjdDQTND
NjIwOEMyOTU3MDAyRjI5QUIgLyogTGF5b3V0Rm9ybWF0dGluZ1N0YXRlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxMTk5RkE1MzIwOEUzOEQzMDAyMzU4Q0MgLyogTGF5b3V0SW5saW5lQm94LmggaW4g
SGVhZGVycyAqLywKIAkJCQkxMTk5RkE0RjIwOEUzODk5MDAyMzU4Q0MgLyogTGF5b3V0SW5saW5l
Q29udGFpbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxMTMxMENGNDIwQkE0QTNEMDA2NUE4RDAg
LyogTGF5b3V0SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9Gb3JtYXR0aW5nQ29udGV4dC5jcHAKaW5kZXggNzY4MzVmMTUyNDEyMzA4MDM1YzRhNjAxNjQ2
MmJlZTE0OTI4MThmMi4uM2YwMWUwNWY4NjIwNTQ1YjA1OGVmNmQ1YzU1OWRlNWM0MWQ3ZGRlYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuY3BwCkBAIC0zMSw4
ICszMSw4IEBACiAjaW5jbHVkZSAiRGlzcGxheUJveC5oIgogI2luY2x1ZGUgIkxheW91dEJveC5o
IgogI2luY2x1ZGUgIkxheW91dENvbnRhaW5lci5oIgotI2luY2x1ZGUgIkxheW91dENvbnRleHQu
aCIKICNpbmNsdWRlICJMYXlvdXREZXNjZW5kYW50SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJMYXlv
dXRGb3JtYXR0aW5nU3RhdGUuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSA8d3Rm
L0lzb01hbGxvY0lubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBA
IC01MSwxNCArNTEsMTQgQEAgRm9ybWF0dGluZ0NvbnRleHQ6On5Gb3JtYXR0aW5nQ29udGV4dCgp
CiB7CiB9CiAKLXZvaWQgRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVPdXRPZkZsb3dIb3Jpem9u
dGFsR2VvbWV0cnkoTGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4dCwgY29uc3QgQm94JiBsYXlv
dXRCb3gpIGNvbnN0Cit2b2lkIEZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlT3V0T2ZGbG93SG9y
aXpvbnRhbEdlb21ldHJ5KExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgQm94JiBsYXlv
dXRCb3gpIGNvbnN0CiB7CiAgICAgYXV0byBjb21wdXRlID0gWyZdKHN0ZDo6b3B0aW9uYWw8TGF5
b3V0VW5pdD4gdXNlZFdpZHRoKSB7Ci0gICAgICAgIHJldHVybiBHZW9tZXRyeTo6b3V0T2ZGbG93
SG9yaXpvbnRhbEdlb21ldHJ5KGxheW91dENvbnRleHQsICp0aGlzLCBsYXlvdXRCb3gsIHVzZWRX
aWR0aCk7CisgICAgICAgIHJldHVybiBHZW9tZXRyeTo6b3V0T2ZGbG93SG9yaXpvbnRhbEdlb21l
dHJ5KGxheW91dFN0YXRlLCAqdGhpcywgbGF5b3V0Qm94LCB1c2VkV2lkdGgpOwogICAgIH07CiAK
ICAgICBhdXRvIGhvcml6b250YWxHZW9tZXRyeSA9IGNvbXB1dGUoeyB9KTsKLSAgICBhdXRvIGNv
bnRhaW5pbmdCbG9ja1dpZHRoID0gbGF5b3V0Q29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94
KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLmNvbnRlbnRCb3hXaWR0aCgpOworICAgIGF1
dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0
Qm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLmNvbnRlbnRCb3hXaWR0aCgpOwogCiAg
ICAgaWYgKGF1dG8gbWF4V2lkdGggPSBHZW9tZXRyeTo6Y29tcHV0ZWRWYWx1ZUlmTm90QXV0byhs
YXlvdXRCb3guc3R5bGUoKS5sb2dpY2FsTWF4V2lkdGgoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgp
KSB7CiAgICAgICAgIGF1dG8gbWF4SG9yaXpvbnRhbEdlb21ldHJ5ID0gY29tcHV0ZShtYXhXaWR0
aCk7CkBAIC03MiwzMyArNzIsMzMgQEAgdm9pZCBGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU91
dE9mRmxvd0hvcml6b250YWxHZW9tZXRyeShMYXlvdXRDb250ZXh0JiBsYXlvdXQKICAgICAgICAg
ICAgIGhvcml6b250YWxHZW9tZXRyeSA9IG1pbkhvcml6b250YWxHZW9tZXRyeTsKICAgICB9CiAK
LSAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0Q29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0
Qm94KGxheW91dEJveCk7CisgICAgYXV0byYgZGlzcGxheUJveCA9IGxheW91dFN0YXRlLmRpc3Bs
YXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKICAgICBkaXNwbGF5Qm94LnNldExlZnQoaG9y
aXpvbnRhbEdlb21ldHJ5LmxlZnQgKyBob3Jpem9udGFsR2VvbWV0cnkud2lkdGhBbmRNYXJnaW4u
bWFyZ2luLmxlZnQpOwogICAgIGRpc3BsYXlCb3guc2V0Q29udGVudEJveFdpZHRoKGhvcml6b250
YWxHZW9tZXRyeS53aWR0aEFuZE1hcmdpbi53aWR0aCk7CiAgICAgZGlzcGxheUJveC5zZXRIb3Jp
em9udGFsTWFyZ2luKGhvcml6b250YWxHZW9tZXRyeS53aWR0aEFuZE1hcmdpbi5tYXJnaW4pOwog
ICAgIGRpc3BsYXlCb3guc2V0SG9yaXpvbnRhbE5vbkNvbXB1dGVkTWFyZ2luKGhvcml6b250YWxH
ZW9tZXRyeS53aWR0aEFuZE1hcmdpbi5ub25Db21wdXRlZE1hcmdpbik7CiB9CiAKLXZvaWQgRm9y
bWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVPdXRPZkZsb3dWZXJ0aWNhbEdlb21ldHJ5KGNvbnN0IExh
eW91dENvbnRleHQmIGxheW91dENvbnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAor
dm9pZCBGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU91dE9mRmxvd1ZlcnRpY2FsR2VvbWV0cnko
Y29uc3QgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBCb3gmIGxheW91dEJveCkgY29u
c3QKIHsKICAgICBhdXRvIGNvbXB1dGUgPSBbJl0oc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiB1
c2VkSGVpZ2h0KSB7Ci0gICAgICAgIHJldHVybiBHZW9tZXRyeTo6b3V0T2ZGbG93VmVydGljYWxH
ZW9tZXRyeShsYXlvdXRDb250ZXh0LCBsYXlvdXRCb3gsIHVzZWRIZWlnaHQpOworICAgICAgICBy
ZXR1cm4gR2VvbWV0cnk6Om91dE9mRmxvd1ZlcnRpY2FsR2VvbWV0cnkobGF5b3V0U3RhdGUsIGxh
eW91dEJveCwgdXNlZEhlaWdodCk7CiAgICAgfTsKIAogICAgIGF1dG8gdmVydGljYWxHZW9tZXRy
eSA9IGNvbXB1dGUoeyB9KTsKLSAgICBpZiAoYXV0byBtYXhIZWlnaHQgPSBHZW9tZXRyeTo6Y29t
cHV0ZWRNYXhIZWlnaHQobGF5b3V0Q29udGV4dCwgbGF5b3V0Qm94KSkgeworICAgIGlmIChhdXRv
IG1heEhlaWdodCA9IEdlb21ldHJ5Ojpjb21wdXRlZE1heEhlaWdodChsYXlvdXRTdGF0ZSwgbGF5
b3V0Qm94KSkgewogICAgICAgICBhdXRvIG1heFZlcnRpY2FsR2VvbWV0cnkgPSBjb21wdXRlKG1h
eEhlaWdodCk7CiAgICAgICAgIGlmICh2ZXJ0aWNhbEdlb21ldHJ5LmhlaWdodEFuZE1hcmdpbi5o
ZWlnaHQgPiBtYXhWZXJ0aWNhbEdlb21ldHJ5LmhlaWdodEFuZE1hcmdpbi5oZWlnaHQpCiAgICAg
ICAgICAgICB2ZXJ0aWNhbEdlb21ldHJ5ID0gbWF4VmVydGljYWxHZW9tZXRyeTsKICAgICB9CiAK
LSAgICBpZiAoYXV0byBtaW5IZWlnaHQgPSBHZW9tZXRyeTo6Y29tcHV0ZWRNaW5IZWlnaHQobGF5
b3V0Q29udGV4dCwgbGF5b3V0Qm94KSkgeworICAgIGlmIChhdXRvIG1pbkhlaWdodCA9IEdlb21l
dHJ5Ojpjb21wdXRlZE1pbkhlaWdodChsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94KSkgewogICAgICAg
ICBhdXRvIG1pblZlcnRpY2FsR2VvbWV0cnkgPSBjb21wdXRlKG1pbkhlaWdodCk7CiAgICAgICAg
IGlmICh2ZXJ0aWNhbEdlb21ldHJ5LmhlaWdodEFuZE1hcmdpbi5oZWlnaHQgPCBtaW5WZXJ0aWNh
bEdlb21ldHJ5LmhlaWdodEFuZE1hcmdpbi5oZWlnaHQpCiAgICAgICAgICAgICB2ZXJ0aWNhbEdl
b21ldHJ5ID0gbWluVmVydGljYWxHZW9tZXRyeTsKICAgICB9CiAKLSAgICBhdXRvJiBkaXNwbGF5
Qm94ID0gbGF5b3V0Q29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7Cisg
ICAgYXV0byYgZGlzcGxheUJveCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3go
bGF5b3V0Qm94KTsKICAgICBkaXNwbGF5Qm94LnNldFRvcCh2ZXJ0aWNhbEdlb21ldHJ5LnRvcCAr
IHZlcnRpY2FsR2VvbWV0cnkuaGVpZ2h0QW5kTWFyZ2luLm1hcmdpbi50b3ApOwogICAgIGRpc3Bs
YXlCb3guc2V0Q29udGVudEJveEhlaWdodCh2ZXJ0aWNhbEdlb21ldHJ5LmhlaWdodEFuZE1hcmdp
bi5oZWlnaHQpOwogICAgIEFTU0VSVCghdmVydGljYWxHZW9tZXRyeS5oZWlnaHRBbmRNYXJnaW4u
Y29sbGFwc2VkTWFyZ2luKTsKQEAgLTEwNiwyOSArMTA2LDI5IEBAIHZvaWQgRm9ybWF0dGluZ0Nv
bnRleHQ6OmNvbXB1dGVPdXRPZkZsb3dWZXJ0aWNhbEdlb21ldHJ5KGNvbnN0IExheW91dENvbnRl
eHQmIGxhCiAgICAgZGlzcGxheUJveC5zZXRWZXJ0aWNhbE5vbkNvbGxhcHNlZE1hcmdpbih2ZXJ0
aWNhbEdlb21ldHJ5LmhlaWdodEFuZE1hcmdpbi5tYXJnaW4pOwogfQogCi12b2lkIEZvcm1hdHRp
bmdDb250ZXh0Ojpjb21wdXRlQm9yZGVyQW5kUGFkZGluZyhjb25zdCBMYXlvdXRDb250ZXh0JiBs
YXlvdXRDb250ZXh0LCBjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKK3ZvaWQgRm9ybWF0dGlu
Z0NvbnRleHQ6OmNvbXB1dGVCb3JkZXJBbmRQYWRkaW5nKGNvbnN0IExheW91dFN0YXRlJiBsYXlv
dXRTdGF0ZSwgY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0CiB7Ci0gICAgYXV0byYgZGlzcGxh
eUJveCA9IGxheW91dENvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOwot
ICAgIGRpc3BsYXlCb3guc2V0Qm9yZGVyKEdlb21ldHJ5Ojpjb21wdXRlZEJvcmRlcihsYXlvdXRD
b250ZXh0LCBsYXlvdXRCb3gpKTsKLSAgICBkaXNwbGF5Qm94LnNldFBhZGRpbmcoR2VvbWV0cnk6
OmNvbXB1dGVkUGFkZGluZyhsYXlvdXRDb250ZXh0LCBsYXlvdXRCb3gpKTsKKyAgICBhdXRvJiBk
aXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gp
OworICAgIGRpc3BsYXlCb3guc2V0Qm9yZGVyKEdlb21ldHJ5Ojpjb21wdXRlZEJvcmRlcihsYXlv
dXRTdGF0ZSwgbGF5b3V0Qm94KSk7CisgICAgZGlzcGxheUJveC5zZXRQYWRkaW5nKEdlb21ldHJ5
Ojpjb21wdXRlZFBhZGRpbmcobGF5b3V0U3RhdGUsIGxheW91dEJveCkpOwogfQogCi12b2lkIEZv
cm1hdHRpbmdDb250ZXh0OjpwbGFjZUluRmxvd1Bvc2l0aW9uZWRDaGlsZHJlbihjb25zdCBMYXlv
dXRDb250ZXh0JiBsYXlvdXRDb250ZXh0LCBjb25zdCBDb250YWluZXImIGNvbnRhaW5lcikgY29u
c3QKK3ZvaWQgRm9ybWF0dGluZ0NvbnRleHQ6OnBsYWNlSW5GbG93UG9zaXRpb25lZENoaWxkcmVu
KGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgQ29udGFpbmVyJiBjb250YWlu
ZXIpIGNvbnN0CiB7CiAgICAgLy8gSWYgdGhpcyBjb250YWluZXIgYWxzbyBlc3RhYmxpc2hlcyBh
IGZvcm1hdHRpbmcgY29udGV4dCwgdGhlbiBwb3NpdGlvbmluZyBhbHJlYWR5IGhhcyBoYXBwZW5k
IGluIHRoYXQgdGhlIGZvcm1hdHRpbmcgY29udGV4dC4KICAgICBpZiAoY29udGFpbmVyLmVzdGFi
bGlzaGVzRm9ybWF0dGluZ0NvbnRleHQoKSAmJiAmY29udGFpbmVyICE9ICZyb290KCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91
dCwgc3RyZWFtIDw8ICJTdGFydDogbW92ZSBpbi1mbG93IHBvc2l0aW9uZWQgY2hpbGRyZW4gLT4g
Y29udGV4dDogIiA8PCAmbGF5b3V0Q29udGV4dCA8PCAiIHBhcmVudDogIiA8PCAmY29udGFpbmVy
KTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8
PCAiU3RhcnQ6IG1vdmUgaW4tZmxvdyBwb3NpdGlvbmVkIGNoaWxkcmVuIC0+IGNvbnRleHQ6ICIg
PDwgJmxheW91dFN0YXRlIDw8ICIgcGFyZW50OiAiIDw8ICZjb250YWluZXIpOwogICAgIGZvciAo
YXV0byYgbGF5b3V0Qm94IDogY2hpbGRyZW5PZlR5cGU8Qm94Pihjb250YWluZXIpKSB7CiAgICAg
ICAgIGlmICghbGF5b3V0Qm94LmlzSW5GbG93UG9zaXRpb25lZCgpKQogICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIGNvbXB1dGVJbkZsb3dQb3NpdGlvbmVkUG9zaXRpb24obGF5b3V0Q29u
dGV4dCwgbGF5b3V0Qm94KTsKKyAgICAgICAgY29tcHV0ZUluRmxvd1Bvc2l0aW9uZWRQb3NpdGlv
bihsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94KTsKICAgICB9Ci0gICAgTE9HX1dJVEhfU1RSRUFNKEZv
cm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIkVuZDogbW92ZSBpbi1mbG93IHBvc2l0
aW9uZWQgY2hpbGRyZW4gLT4gY29udGV4dDogIiA8PCAmbGF5b3V0Q29udGV4dCA8PCAiIHBhcmVu
dDogIiA8PCAmY29udGFpbmVyKTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRl
eHRMYXlvdXQsIHN0cmVhbSA8PCAiRW5kOiBtb3ZlIGluLWZsb3cgcG9zaXRpb25lZCBjaGlsZHJl
biAtPiBjb250ZXh0OiAiIDw8ICZsYXlvdXRTdGF0ZSA8PCAiIHBhcmVudDogIiA8PCAmY29udGFp
bmVyKTsKIH0KIAotdm9pZCBGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0T3V0T2ZGbG93RGVzY2Vu
ZGFudHMoTGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4dCwgY29uc3QgQm94JiBsYXlvdXRCb3gp
IGNvbnN0Cit2b2lkIEZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRPdXRPZkZsb3dEZXNjZW5kYW50
cyhMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAog
ewogICAgIC8vIEluaXRpYWwgY29udGFpbmluZyBibG9jayBieSBkZWZpbml0aW9uIGlzIGEgY29u
dGFpbmluZyBibG9jay4KICAgICBpZiAoIWxheW91dEJveC5pc1Bvc2l0aW9uZWQoKSAmJiAhbGF5
b3V0Qm94LmlzSW5pdGlhbENvbnRhaW5pbmdCbG9jaygpKQpAQCAtMTQxLDM2ICsxNDEsMzYgQEAg
dm9pZCBGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0T3V0T2ZGbG93RGVzY2VuZGFudHMoTGF5b3V0
Q29udGV4dCYgbGF5b3V0Q29udGV4dCwKICAgICBpZiAoIWNvbnRhaW5lci5oYXNDaGlsZCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRM
YXlvdXQsIHN0cmVhbSA8PCAiU3RhcnQ6IGxheW91dCBvdXQtb2YtZmxvdyBkZXNjZW5kYW50cyAt
PiBjb250ZXh0OiAiIDw8ICZsYXlvdXRDb250ZXh0IDw8ICIgcm9vdDogIiA8PCAmcm9vdCgpKTsK
KyAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAi
U3RhcnQ6IGxheW91dCBvdXQtb2YtZmxvdyBkZXNjZW5kYW50cyAtPiBjb250ZXh0OiAiIDw8ICZs
YXlvdXRTdGF0ZSA8PCAiIHJvb3Q6ICIgPDwgJnJvb3QoKSk7CiAKICAgICBmb3IgKGF1dG8mIG91
dE9mRmxvd0JveCA6IGNvbnRhaW5lci5vdXRPZkZsb3dEZXNjZW5kYW50cygpKSB7CiAgICAgICAg
IGF1dG8mIGxheW91dEJveCA9ICpvdXRPZkZsb3dCb3g7CiAKICAgICAgICAgQVNTRVJUKGxheW91
dEJveC5lc3RhYmxpc2hlc0Zvcm1hdHRpbmdDb250ZXh0KCkpOwotICAgICAgICBhdXRvIGZvcm1h
dHRpbmdDb250ZXh0ID0gbGF5b3V0Q29udGV4dC5mb3JtYXR0aW5nQ29udGV4dChsYXlvdXRCb3gp
OworICAgICAgICBhdXRvIGZvcm1hdHRpbmdDb250ZXh0ID0gbGF5b3V0U3RhdGUuZm9ybWF0dGlu
Z0NvbnRleHQobGF5b3V0Qm94KTsKIAotICAgICAgICBjb21wdXRlQm9yZGVyQW5kUGFkZGluZyhs
YXlvdXRDb250ZXh0LCBsYXlvdXRCb3gpOwotICAgICAgICBjb21wdXRlT3V0T2ZGbG93SG9yaXpv
bnRhbEdlb21ldHJ5KGxheW91dENvbnRleHQsIGxheW91dEJveCk7CisgICAgICAgIGNvbXB1dGVC
b3JkZXJBbmRQYWRkaW5nKGxheW91dFN0YXRlLCBsYXlvdXRCb3gpOworICAgICAgICBjb21wdXRl
T3V0T2ZGbG93SG9yaXpvbnRhbEdlb21ldHJ5KGxheW91dFN0YXRlLCBsYXlvdXRCb3gpOwogCi0g
ICAgICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IGxheW91dENvbnRleHQuY3JlYXRlRm9ybWF0
dGluZ1N0YXRlRm9yRm9ybWF0dGluZ1Jvb3RJZk5lZWRlZChsYXlvdXRCb3gpOwotICAgICAgICBm
b3JtYXR0aW5nQ29udGV4dC0+bGF5b3V0KGxheW91dENvbnRleHQsIGZvcm1hdHRpbmdTdGF0ZSk7
CisgICAgICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IGxheW91dFN0YXRlLmNyZWF0ZUZvcm1h
dHRpbmdTdGF0ZUZvckZvcm1hdHRpbmdSb290SWZOZWVkZWQobGF5b3V0Qm94KTsKKyAgICAgICAg
Zm9ybWF0dGluZ0NvbnRleHQtPmxheW91dChsYXlvdXRTdGF0ZSwgZm9ybWF0dGluZ1N0YXRlKTsK
IAotICAgICAgICBjb21wdXRlT3V0T2ZGbG93VmVydGljYWxHZW9tZXRyeShsYXlvdXRDb250ZXh0
LCBsYXlvdXRCb3gpOwotICAgICAgICBsYXlvdXRPdXRPZkZsb3dEZXNjZW5kYW50cyhsYXlvdXRD
b250ZXh0LCBsYXlvdXRCb3gpOworICAgICAgICBjb21wdXRlT3V0T2ZGbG93VmVydGljYWxHZW9t
ZXRyeShsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94KTsKKyAgICAgICAgbGF5b3V0T3V0T2ZGbG93RGVz
Y2VuZGFudHMobGF5b3V0U3RhdGUsIGxheW91dEJveCk7CiAgICAgfQotICAgIExPR19XSVRIX1NU
UkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJFbmQ6IGxheW91dCBvdXQt
b2YtZmxvdyBkZXNjZW5kYW50cyAtPiBjb250ZXh0OiAiIDw8ICZsYXlvdXRDb250ZXh0IDw8ICIg
cm9vdDogIiA8PCAmcm9vdCgpKTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRl
eHRMYXlvdXQsIHN0cmVhbSA8PCAiRW5kOiBsYXlvdXQgb3V0LW9mLWZsb3cgZGVzY2VuZGFudHMg
LT4gY29udGV4dDogIiA8PCAmbGF5b3V0U3RhdGUgPDwgIiByb290OiAiIDw8ICZyb290KCkpOwog
fQogCi1EaXNwbGF5OjpCb3ggRm9ybWF0dGluZ0NvbnRleHQ6Om1hcEJveFRvQW5jZXN0b3IoY29u
c3QgTGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4dCwgY29uc3QgQm94JiBsYXlvdXRCb3gsIGNv
bnN0IENvbnRhaW5lciYgYW5jZXN0b3IpCitEaXNwbGF5OjpCb3ggRm9ybWF0dGluZ0NvbnRleHQ6
Om1hcEJveFRvQW5jZXN0b3IoY29uc3QgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBC
b3gmIGxheW91dEJveCwgY29uc3QgQ29udGFpbmVyJiBhbmNlc3RvcikKIHsKICAgICBBU1NFUlQo
bGF5b3V0Qm94LmlzRGVzY2VuZGFudE9mKGFuY2VzdG9yKSk7CiAKLSAgICBhdXRvJiBkaXNwbGF5
Qm94ID0gbGF5b3V0Q29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7Cisg
ICAgYXV0byYgZGlzcGxheUJveCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3go
bGF5b3V0Qm94KTsKICAgICBhdXRvIHRvcExlZnQgPSBkaXNwbGF5Qm94LnRvcExlZnQoKTsKIAog
ICAgIGF1dG8qIGNvbnRhaW5pbmdCbG9jayA9IGxheW91dEJveC5jb250YWluaW5nQmxvY2soKTsK
ICAgICBmb3IgKDsgY29udGFpbmluZ0Jsb2NrICYmIGNvbnRhaW5pbmdCbG9jayAhPSAmYW5jZXN0
b3I7IGNvbnRhaW5pbmdCbG9jayA9IGNvbnRhaW5pbmdCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCkp
Ci0gICAgICAgIHRvcExlZnQubW92ZUJ5KGxheW91dENvbnRleHQuZGlzcGxheUJveEZvckxheW91
dEJveCgqY29udGFpbmluZ0Jsb2NrKS50b3BMZWZ0KCkpOworICAgICAgICB0b3BMZWZ0Lm1vdmVC
eShsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpjb250YWluaW5nQmxvY2spLnRv
cExlZnQoKSk7CiAKICAgICBpZiAoIWNvbnRhaW5pbmdCbG9jaykgewogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKQEAgLTE4MiwxOCArMTgyLDE4IEBAIERpc3BsYXk6OkJveCBGb3JtYXR0
aW5nQ29udGV4dDo6bWFwQm94VG9BbmNlc3Rvcihjb25zdCBMYXlvdXRDb250ZXh0JiBsYXlvdXRD
b250CiAgICAgcmV0dXJuIG1hcHBlZERpc3BsYXlCb3g7CiB9CiAKLVBvc2l0aW9uIEZvcm1hdHRp
bmdDb250ZXh0OjptYXBUb3BMZWZ0VG9BbmNlc3Rvcihjb25zdCBMYXlvdXRDb250ZXh0JiBsYXlv
dXRDb250ZXh0LCBjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgQ29udGFpbmVyJiBhbmNlc3Rv
cikKK1Bvc2l0aW9uIEZvcm1hdHRpbmdDb250ZXh0OjptYXBUb3BMZWZ0VG9BbmNlc3Rvcihjb25z
dCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBD
b250YWluZXImIGFuY2VzdG9yKQogewogICAgIEFTU0VSVChsYXlvdXRCb3guaXNEZXNjZW5kYW50
T2YoYW5jZXN0b3IpKTsKLSAgICByZXR1cm4gbWFwQ29vcmRpbmF0ZVRvQW5jZXN0b3IobGF5b3V0
Q29udGV4dCwgbGF5b3V0Q29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCku
dG9wTGVmdCgpLCAqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpLCBhbmNlc3Rvcik7CisgICAg
cmV0dXJuIG1hcENvb3JkaW5hdGVUb0FuY2VzdG9yKGxheW91dFN0YXRlLCBsYXlvdXRTdGF0ZS5k
aXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCkudG9wTGVmdCgpLCAqbGF5b3V0Qm94LmNv
bnRhaW5pbmdCbG9jaygpLCBhbmNlc3Rvcik7CiB9CiAKLVBvc2l0aW9uIEZvcm1hdHRpbmdDb250
ZXh0OjptYXBDb29yZGluYXRlVG9BbmNlc3Rvcihjb25zdCBMYXlvdXRDb250ZXh0JiBsYXlvdXRD
b250ZXh0LCBQb3NpdGlvbiBwb3NpdGlvbiwgY29uc3QgQ29udGFpbmVyJiBjb250YWluaW5nQmxv
Y2ssIGNvbnN0IENvbnRhaW5lciYgYW5jZXN0b3IpCitQb3NpdGlvbiBGb3JtYXR0aW5nQ29udGV4
dDo6bWFwQ29vcmRpbmF0ZVRvQW5jZXN0b3IoY29uc3QgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRl
LCBQb3NpdGlvbiBwb3NpdGlvbiwgY29uc3QgQ29udGFpbmVyJiBjb250YWluaW5nQmxvY2ssIGNv
bnN0IENvbnRhaW5lciYgYW5jZXN0b3IpCiB7CiAgICAgYXV0byBtYXBwZWRQb3NpdGlvbiA9IHBv
c2l0aW9uOwogICAgIGF1dG8qIGNvbnRhaW5lciA9ICZjb250YWluaW5nQmxvY2s7CiAgICAgZm9y
ICg7IGNvbnRhaW5lciAmJiBjb250YWluZXIgIT0gJmFuY2VzdG9yOyBjb250YWluZXIgPSBjb250
YWluZXItPmNvbnRhaW5pbmdCbG9jaygpKQotICAgICAgICBtYXBwZWRQb3NpdGlvbi5tb3ZlQnko
bGF5b3V0Q29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpjb250YWluZXIpLnRvcExlZnQo
KSk7CisgICAgICAgIG1hcHBlZFBvc2l0aW9uLm1vdmVCeShsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94
Rm9yTGF5b3V0Qm94KCpjb250YWluZXIpLnRvcExlZnQoKSk7CiAKICAgICBpZiAoIWNvbnRhaW5l
cikgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTIwNCw3ICsyMDQsNyBAQCBQ
b3NpdGlvbiBGb3JtYXR0aW5nQ29udGV4dDo6bWFwQ29vcmRpbmF0ZVRvQW5jZXN0b3IoY29uc3Qg
TGF5b3V0Q29udGV4dCYgbGF5b3V0QwogfQogCiAjaWZuZGVmIE5ERUJVRwotdm9pZCBGb3JtYXR0
aW5nQ29udGV4dDo6dmFsaWRhdGVHZW9tZXRyeUNvbnN0cmFpbnRzQWZ0ZXJMYXlvdXQoY29uc3Qg
TGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4dCkgY29uc3QKK3ZvaWQgRm9ybWF0dGluZ0NvbnRl
eHQ6OnZhbGlkYXRlR2VvbWV0cnlDb25zdHJhaW50c0FmdGVyTGF5b3V0KGNvbnN0IExheW91dFN0
YXRlJiBsYXlvdXRTdGF0ZSkgY29uc3QKIHsKICAgICBpZiAoIWlzPENvbnRhaW5lcj4ocm9vdCgp
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjEzLDggKzIxMyw4IEBAIHZvaWQgRm9ybWF0dGluZ0Nv
bnRleHQ6OnZhbGlkYXRlR2VvbWV0cnlDb25zdHJhaW50c0FmdGVyTGF5b3V0KGNvbnN0IExheW91
dENvbnRlCiAgICAgZm9yIChhdXRvJiBsYXlvdXRCb3ggOiBkZXNjZW5kYW50c09mVHlwZTxCb3g+
KGZvcm1hdHRpbmdDb250ZXh0Um9vdCkpIHsKICAgICAgICAgaWYgKCZsYXlvdXRCb3guZm9ybWF0
dGluZ0NvbnRleHRSb290KCkgIT0gJmZvcm1hdHRpbmdDb250ZXh0Um9vdCkKICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBhdXRvJiBjb250YWluaW5nQmxvY2tEaXNwbGF5Qm94ID0gbGF5
b3V0Q29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Js
b2NrKCkpOwotICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0Q29udGV4dC5kaXNwbGF5
Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CisgICAgICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9j
a0Rpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRC
b3guY29udGFpbmluZ0Jsb2NrKCkpOworICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0
U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOwogCiAgICAgICAgIC8vIDEw
LjMuMyBCbG9jay1sZXZlbCwgbm9uLXJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93CiAg
ICAgICAgIC8vIDEwLjMuNyBBYnNvbHV0ZWx5IHBvc2l0aW9uZWQsIG5vbi1yZXBsYWNlZCBlbGVt
ZW50cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0
LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuaAppbmRleCAxMzhl
ZjRiZThmM2M2Y2Q4YjcyMzA5ZTU5M2I2Y2ZhYTQyODEwNTUxLi40MTk1YzkzN2VkZGI4M2E5OWVi
NDc0ZDQ2NWU3NWVlODYzZjk1OTIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
Rm9ybWF0dGluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGlu
Z0NvbnRleHQuaApAQCAtNDIsNyArNDIsNyBAQCBuYW1lc3BhY2UgTGF5b3V0IHsKIGNsYXNzIEJv
eDsKIGNsYXNzIENvbnRhaW5lcjsKIGNsYXNzIEZvcm1hdHRpbmdTdGF0ZTsKLWNsYXNzIExheW91
dENvbnRleHQ7CitjbGFzcyBMYXlvdXRTdGF0ZTsKIAogY2xhc3MgRm9ybWF0dGluZ0NvbnRleHQg
ewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoRm9ybWF0dGluZ0NvbnRleHQpOwpAQCAtNTAs
ODAgKzUwLDgwIEBAIHB1YmxpYzoKICAgICBGb3JtYXR0aW5nQ29udGV4dChjb25zdCBCb3gmIGZv
cm1hdHRpbmdDb250ZXh0Um9vdCk7CiAgICAgdmlydHVhbCB+Rm9ybWF0dGluZ0NvbnRleHQoKTsK
IAotICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoTGF5b3V0Q29udGV4dCYsIEZvcm1hdHRpbmdTdGF0
ZSYpIGNvbnN0ID0gMDsKLSAgICB2b2lkIGxheW91dE91dE9mRmxvd0Rlc2NlbmRhbnRzKExheW91
dENvbnRleHQmLCBjb25zdCBCb3gmKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KExh
eW91dFN0YXRlJiwgRm9ybWF0dGluZ1N0YXRlJikgY29uc3QgPSAwOworICAgIHZvaWQgbGF5b3V0
T3V0T2ZGbG93RGVzY2VuZGFudHMoTGF5b3V0U3RhdGUmLCBjb25zdCBCb3gmKSBjb25zdDsKIAog
ICAgIHN0cnVjdCBJbnN0cmluc2ljV2lkdGhDb25zdHJhaW50cyB7CiAgICAgICAgIExheW91dFVu
aXQgbWluaW11bTsKICAgICAgICAgTGF5b3V0VW5pdCBtYXhpbXVtOwogICAgIH07Ci0gICAgdmly
dHVhbCBJbnN0cmluc2ljV2lkdGhDb25zdHJhaW50cyBpbnN0cmluc2ljV2lkdGhDb25zdHJhaW50
cyhMYXlvdXRDb250ZXh0JiwgY29uc3QgQm94JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgSW5z
dHJpbnNpY1dpZHRoQ29uc3RyYWludHMgaW5zdHJpbnNpY1dpZHRoQ29uc3RyYWludHMoTGF5b3V0
U3RhdGUmLCBjb25zdCBCb3gmKSBjb25zdCA9IDA7CiAKLSAgICBzdGF0aWMgRGlzcGxheTo6Qm94
IG1hcEJveFRvQW5jZXN0b3IoY29uc3QgTGF5b3V0Q29udGV4dCYsIGNvbnN0IEJveCYsIGNvbnN0
IENvbnRhaW5lciYgYW5jZXN0b3IpOwotICAgIHN0YXRpYyBQb3NpdGlvbiBtYXBUb3BMZWZ0VG9B
bmNlc3Rvcihjb25zdCBMYXlvdXRDb250ZXh0JiwgY29uc3QgQm94JiwgY29uc3QgQ29udGFpbmVy
JiBhbmNlc3Rvcik7Ci0gICAgc3RhdGljIFBvc2l0aW9uIG1hcENvb3JkaW5hdGVUb0FuY2VzdG9y
KGNvbnN0IExheW91dENvbnRleHQmLCBQb3NpdGlvbiwgY29uc3QgQ29udGFpbmVyJiBjb250YWlu
aW5nQmxvY2ssIGNvbnN0IENvbnRhaW5lciYgYW5jZXN0b3IpOworICAgIHN0YXRpYyBEaXNwbGF5
OjpCb3ggbWFwQm94VG9BbmNlc3Rvcihjb25zdCBMYXlvdXRTdGF0ZSYsIGNvbnN0IEJveCYsIGNv
bnN0IENvbnRhaW5lciYgYW5jZXN0b3IpOworICAgIHN0YXRpYyBQb3NpdGlvbiBtYXBUb3BMZWZ0
VG9BbmNlc3Rvcihjb25zdCBMYXlvdXRTdGF0ZSYsIGNvbnN0IEJveCYsIGNvbnN0IENvbnRhaW5l
ciYgYW5jZXN0b3IpOworICAgIHN0YXRpYyBQb3NpdGlvbiBtYXBDb29yZGluYXRlVG9BbmNlc3Rv
cihjb25zdCBMYXlvdXRTdGF0ZSYsIFBvc2l0aW9uLCBjb25zdCBDb250YWluZXImIGNvbnRhaW5p
bmdCbG9jaywgY29uc3QgQ29udGFpbmVyJiBhbmNlc3Rvcik7CiAKIHByb3RlY3RlZDoKICAgICB1
c2luZyBMYXlvdXRRdWV1ZSA9IFZlY3Rvcjxjb25zdCBCb3gqPjsKIAogICAgIGNvbnN0IEJveCYg
cm9vdCgpIGNvbnN0IHsgcmV0dXJuICptX3Jvb3Q7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBjb21w
dXRlU3RhdGljUG9zaXRpb24oY29uc3QgTGF5b3V0Q29udGV4dCYsIGNvbnN0IEJveCYpIGNvbnN0
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUluRmxvd1Bvc2l0aW9uZWRQb3NpdGlvbihj
b25zdCBMYXlvdXRDb250ZXh0JiwgY29uc3QgQm94JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBjb21wdXRlU3RhdGljUG9zaXRpb24oY29uc3QgTGF5b3V0U3RhdGUmLCBjb25zdCBCb3gm
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVJbkZsb3dQb3NpdGlvbmVkUG9z
aXRpb24oY29uc3QgTGF5b3V0U3RhdGUmLCBjb25zdCBCb3gmKSBjb25zdCA9IDA7CiAKLSAgICB2
b2lkIGNvbXB1dGVCb3JkZXJBbmRQYWRkaW5nKGNvbnN0IExheW91dENvbnRleHQmLCBjb25zdCBC
b3gmKSBjb25zdDsKKyAgICB2b2lkIGNvbXB1dGVCb3JkZXJBbmRQYWRkaW5nKGNvbnN0IExheW91
dFN0YXRlJiwgY29uc3QgQm94JikgY29uc3Q7CiAKLSAgICB2b2lkIHBsYWNlSW5GbG93UG9zaXRp
b25lZENoaWxkcmVuKGNvbnN0IExheW91dENvbnRleHQmLCBjb25zdCBDb250YWluZXImKSBjb25z
dDsKKyAgICB2b2lkIHBsYWNlSW5GbG93UG9zaXRpb25lZENoaWxkcmVuKGNvbnN0IExheW91dFN0
YXRlJiwgY29uc3QgQ29udGFpbmVyJikgY29uc3Q7CiAKICNpZm5kZWYgTkRFQlVHCi0gICAgdmly
dHVhbCB2b2lkIHZhbGlkYXRlR2VvbWV0cnlDb25zdHJhaW50c0FmdGVyTGF5b3V0KGNvbnN0IExh
eW91dENvbnRleHQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgdmFsaWRhdGVHZW9tZXRyeUNv
bnN0cmFpbnRzQWZ0ZXJMYXlvdXQoY29uc3QgTGF5b3V0U3RhdGUmKSBjb25zdDsKICNlbmRpZgog
CiAgICAgLy8gVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGdlbmVyaWMgcG9zaXRpb25pbmcgYW5kIHNp
emluZy4KICAgICBjbGFzcyBHZW9tZXRyeSB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMg
VmVydGljYWxHZW9tZXRyeSBvdXRPZkZsb3dWZXJ0aWNhbEdlb21ldHJ5KGNvbnN0IExheW91dENv
bnRleHQmLCBjb25zdCBCb3gmLCBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IHVzZWRIZWlnaHQg
PSB7IH0pOwotICAgICAgICBzdGF0aWMgSG9yaXpvbnRhbEdlb21ldHJ5IG91dE9mRmxvd0hvcml6
b250YWxHZW9tZXRyeShMYXlvdXRDb250ZXh0JiwgY29uc3QgRm9ybWF0dGluZ0NvbnRleHQmLCBj
b25zdCBCb3gmLCBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IHVzZWRXaWR0aCA9IHsgfSk7Cisg
ICAgICAgIHN0YXRpYyBWZXJ0aWNhbEdlb21ldHJ5IG91dE9mRmxvd1ZlcnRpY2FsR2VvbWV0cnko
Y29uc3QgTGF5b3V0U3RhdGUmLCBjb25zdCBCb3gmLCBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+
IHVzZWRIZWlnaHQgPSB7IH0pOworICAgICAgICBzdGF0aWMgSG9yaXpvbnRhbEdlb21ldHJ5IG91
dE9mRmxvd0hvcml6b250YWxHZW9tZXRyeShMYXlvdXRTdGF0ZSYsIGNvbnN0IEZvcm1hdHRpbmdD
b250ZXh0JiwgY29uc3QgQm94Jiwgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiB1c2VkV2lkdGgg
PSB7IH0pOwogCi0gICAgICAgIHN0YXRpYyBIZWlnaHRBbmRNYXJnaW4gZmxvYXRpbmdIZWlnaHRB
bmRNYXJnaW4oY29uc3QgTGF5b3V0Q29udGV4dCYsIGNvbnN0IEJveCYsIHN0ZDo6b3B0aW9uYWw8
TGF5b3V0VW5pdD4gdXNlZEhlaWdodCA9IHsgfSk7Ci0gICAgICAgIHN0YXRpYyBXaWR0aEFuZE1h
cmdpbiBmbG9hdGluZ1dpZHRoQW5kTWFyZ2luKExheW91dENvbnRleHQmLCBjb25zdCBGb3JtYXR0
aW5nQ29udGV4dCYsIGNvbnN0IEJveCYsIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gdXNlZFdp
ZHRoID0geyB9KTsKKyAgICAgICAgc3RhdGljIEhlaWdodEFuZE1hcmdpbiBmbG9hdGluZ0hlaWdo
dEFuZE1hcmdpbihjb25zdCBMYXlvdXRTdGF0ZSYsIGNvbnN0IEJveCYsIHN0ZDo6b3B0aW9uYWw8
TGF5b3V0VW5pdD4gdXNlZEhlaWdodCA9IHsgfSk7CisgICAgICAgIHN0YXRpYyBXaWR0aEFuZE1h
cmdpbiBmbG9hdGluZ1dpZHRoQW5kTWFyZ2luKExheW91dFN0YXRlJiwgY29uc3QgRm9ybWF0dGlu
Z0NvbnRleHQmLCBjb25zdCBCb3gmLCBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IHVzZWRXaWR0
aCA9IHsgfSk7CiAKLSAgICAgICAgc3RhdGljIEhlaWdodEFuZE1hcmdpbiBpbmxpbmVSZXBsYWNl
ZEhlaWdodEFuZE1hcmdpbihjb25zdCBMYXlvdXRDb250ZXh0JiwgY29uc3QgQm94Jiwgc3RkOjpv
cHRpb25hbDxMYXlvdXRVbml0PiB1c2VkSGVpZ2h0ID0geyB9KTsKLSAgICAgICAgc3RhdGljIFdp
ZHRoQW5kTWFyZ2luIGlubGluZVJlcGxhY2VkV2lkdGhBbmRNYXJnaW4oY29uc3QgTGF5b3V0Q29u
dGV4dCYsIGNvbnN0IEJveCYsIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gdXNlZFdpZHRoID0g
eyB9LCAKKyAgICAgICAgc3RhdGljIEhlaWdodEFuZE1hcmdpbiBpbmxpbmVSZXBsYWNlZEhlaWdo
dEFuZE1hcmdpbihjb25zdCBMYXlvdXRTdGF0ZSYsIGNvbnN0IEJveCYsIHN0ZDo6b3B0aW9uYWw8
TGF5b3V0VW5pdD4gdXNlZEhlaWdodCA9IHsgfSk7CisgICAgICAgIHN0YXRpYyBXaWR0aEFuZE1h
cmdpbiBpbmxpbmVSZXBsYWNlZFdpZHRoQW5kTWFyZ2luKGNvbnN0IExheW91dFN0YXRlJiwgY29u
c3QgQm94Jiwgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiB1c2VkV2lkdGggPSB7IH0sIAogICAg
ICAgICAgICAgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBwcmVjb21wdXRlZE1hcmdpbkxlZnQg
PSB7IH0sIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gcHJlY29tcHV0ZWRNYXJnaW5SaWdodCA9
IHsgfSk7CiAKLSAgICAgICAgc3RhdGljIEhlaWdodEFuZE1hcmdpbiBjb21wbGljYXRlZENhc2Vz
KGNvbnN0IExheW91dENvbnRleHQmLCBjb25zdCBCb3gmLCBzdGQ6Om9wdGlvbmFsPExheW91dFVu
aXQ+IHVzZWRIZWlnaHQgPSB7IH0pOworICAgICAgICBzdGF0aWMgSGVpZ2h0QW5kTWFyZ2luIGNv
bXBsaWNhdGVkQ2FzZXMoY29uc3QgTGF5b3V0U3RhdGUmLCBjb25zdCBCb3gmLCBzdGQ6Om9wdGlv
bmFsPExheW91dFVuaXQ+IHVzZWRIZWlnaHQgPSB7IH0pOwogCi0gICAgICAgIHN0YXRpYyBFZGdl
cyBjb21wdXRlZEJvcmRlcihjb25zdCBMYXlvdXRDb250ZXh0JiwgY29uc3QgQm94Jik7Ci0gICAg
ICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEVkZ2VzPiBjb21wdXRlZFBhZGRpbmcoY29uc3QgTGF5
b3V0Q29udGV4dCYsIGNvbnN0IEJveCYpOworICAgICAgICBzdGF0aWMgRWRnZXMgY29tcHV0ZWRC
b3JkZXIoY29uc3QgTGF5b3V0U3RhdGUmLCBjb25zdCBCb3gmKTsKKyAgICAgICAgc3RhdGljIHN0
ZDo6b3B0aW9uYWw8RWRnZXM+IGNvbXB1dGVkUGFkZGluZyhjb25zdCBMYXlvdXRTdGF0ZSYsIGNv
bnN0IEJveCYpOwogCi0gICAgICAgIHN0YXRpYyBIb3Jpem9udGFsRWRnZXMgY29tcHV0ZWROb25D
b2xsYXBzZWRIb3Jpem9udGFsTWFyZ2luVmFsdWUoY29uc3QgTGF5b3V0Q29udGV4dCYsIGNvbnN0
IEJveCYpOwotICAgICAgICBzdGF0aWMgVmVydGljYWxFZGdlcyBjb21wdXRlZE5vbkNvbGxhcHNl
ZFZlcnRpY2FsTWFyZ2luVmFsdWUoY29uc3QgTGF5b3V0Q29udGV4dCYsIGNvbnN0IEJveCYpOwor
ICAgICAgICBzdGF0aWMgSG9yaXpvbnRhbEVkZ2VzIGNvbXB1dGVkTm9uQ29sbGFwc2VkSG9yaXpv
bnRhbE1hcmdpblZhbHVlKGNvbnN0IExheW91dFN0YXRlJiwgY29uc3QgQm94Jik7CisgICAgICAg
IHN0YXRpYyBWZXJ0aWNhbEVkZ2VzIGNvbXB1dGVkTm9uQ29sbGFwc2VkVmVydGljYWxNYXJnaW5W
YWx1ZShjb25zdCBMYXlvdXRTdGF0ZSYsIGNvbnN0IEJveCYpOwogCiAgICAgICAgIHN0YXRpYyBz
dGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGNvbXB1dGVkVmFsdWVJZk5vdEF1dG8oY29uc3QgTGVu
Z3RoJiBnZW9tZXRyeVByb3BlcnR5LCBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsK
ICAgICAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gZml4ZWRWYWx1ZShjb25z
dCBMZW5ndGgmIGdlb21ldHJ5UHJvcGVydHkpOwogCi0gICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlv
bmFsPExheW91dFVuaXQ+IGNvbXB1dGVkTWluSGVpZ2h0KGNvbnN0IExheW91dENvbnRleHQmLCBj
b25zdCBCb3gmKTsKLSAgICAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gY29t
cHV0ZWRNYXhIZWlnaHQoY29uc3QgTGF5b3V0Q29udGV4dCYsIGNvbnN0IEJveCYpOworICAgICAg
ICBzdGF0aWMgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBjb21wdXRlZE1pbkhlaWdodChjb25z
dCBMYXlvdXRTdGF0ZSYsIGNvbnN0IEJveCYpOworICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25h
bDxMYXlvdXRVbml0PiBjb21wdXRlZE1heEhlaWdodChjb25zdCBMYXlvdXRTdGF0ZSYsIGNvbnN0
IEJveCYpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgc3RhdGljIFZlcnRpY2FsR2VvbWV0cnkg
b3V0T2ZGbG93UmVwbGFjZWRWZXJ0aWNhbEdlb21ldHJ5KGNvbnN0IExheW91dENvbnRleHQmLCBj
b25zdCBCb3gmLCBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IHVzZWRIZWlnaHQgPSB7IH0pOwot
ICAgICAgICBzdGF0aWMgSG9yaXpvbnRhbEdlb21ldHJ5IG91dE9mRmxvd1JlcGxhY2VkSG9yaXpv
bnRhbEdlb21ldHJ5KGNvbnN0IExheW91dENvbnRleHQmLCBjb25zdCBCb3gmLCBzdGQ6Om9wdGlv
bmFsPExheW91dFVuaXQ+IHVzZWRXaWR0aCA9IHsgfSk7CisgICAgICAgIHN0YXRpYyBWZXJ0aWNh
bEdlb21ldHJ5IG91dE9mRmxvd1JlcGxhY2VkVmVydGljYWxHZW9tZXRyeShjb25zdCBMYXlvdXRT
dGF0ZSYsIGNvbnN0IEJveCYsIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gdXNlZEhlaWdodCA9
IHsgfSk7CisgICAgICAgIHN0YXRpYyBIb3Jpem9udGFsR2VvbWV0cnkgb3V0T2ZGbG93UmVwbGFj
ZWRIb3Jpem9udGFsR2VvbWV0cnkoY29uc3QgTGF5b3V0U3RhdGUmLCBjb25zdCBCb3gmLCBzdGQ6
Om9wdGlvbmFsPExheW91dFVuaXQ+IHVzZWRXaWR0aCA9IHsgfSk7CiAKLSAgICAgICAgc3RhdGlj
IFZlcnRpY2FsR2VvbWV0cnkgb3V0T2ZGbG93Tm9uUmVwbGFjZWRWZXJ0aWNhbEdlb21ldHJ5KGNv
bnN0IExheW91dENvbnRleHQmLCBjb25zdCBCb3gmLCBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+
IHVzZWRIZWlnaHQgPSB7IH0pOwotICAgICAgICBzdGF0aWMgSG9yaXpvbnRhbEdlb21ldHJ5IG91
dE9mRmxvd05vblJlcGxhY2VkSG9yaXpvbnRhbEdlb21ldHJ5KExheW91dENvbnRleHQmLCBjb25z
dCBGb3JtYXR0aW5nQ29udGV4dCYsIGNvbnN0IEJveCYsIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5p
dD4gdXNlZFdpZHRoID0geyB9KTsKKyAgICAgICAgc3RhdGljIFZlcnRpY2FsR2VvbWV0cnkgb3V0
T2ZGbG93Tm9uUmVwbGFjZWRWZXJ0aWNhbEdlb21ldHJ5KGNvbnN0IExheW91dFN0YXRlJiwgY29u
c3QgQm94Jiwgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiB1c2VkSGVpZ2h0ID0geyB9KTsKKyAg
ICAgICAgc3RhdGljIEhvcml6b250YWxHZW9tZXRyeSBvdXRPZkZsb3dOb25SZXBsYWNlZEhvcml6
b250YWxHZW9tZXRyeShMYXlvdXRTdGF0ZSYsIGNvbnN0IEZvcm1hdHRpbmdDb250ZXh0JiwgY29u
c3QgQm94Jiwgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiB1c2VkV2lkdGggPSB7IH0pOwogCi0g
ICAgICAgIHN0YXRpYyBIZWlnaHRBbmRNYXJnaW4gZmxvYXRpbmdSZXBsYWNlZEhlaWdodEFuZE1h
cmdpbihjb25zdCBMYXlvdXRDb250ZXh0JiwgY29uc3QgQm94Jiwgc3RkOjpvcHRpb25hbDxMYXlv
dXRVbml0PiB1c2VkSGVpZ2h0ID0geyB9KTsKLSAgICAgICAgc3RhdGljIFdpZHRoQW5kTWFyZ2lu
IGZsb2F0aW5nUmVwbGFjZWRXaWR0aEFuZE1hcmdpbihjb25zdCBMYXlvdXRDb250ZXh0JiwgY29u
c3QgQm94Jiwgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiB1c2VkV2lkdGggPSB7IH0pOworICAg
ICAgICBzdGF0aWMgSGVpZ2h0QW5kTWFyZ2luIGZsb2F0aW5nUmVwbGFjZWRIZWlnaHRBbmRNYXJn
aW4oY29uc3QgTGF5b3V0U3RhdGUmLCBjb25zdCBCb3gmLCBzdGQ6Om9wdGlvbmFsPExheW91dFVu
aXQ+IHVzZWRIZWlnaHQgPSB7IH0pOworICAgICAgICBzdGF0aWMgV2lkdGhBbmRNYXJnaW4gZmxv
YXRpbmdSZXBsYWNlZFdpZHRoQW5kTWFyZ2luKGNvbnN0IExheW91dFN0YXRlJiwgY29uc3QgQm94
Jiwgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiB1c2VkV2lkdGggPSB7IH0pOwogCi0gICAgICAg
IHN0YXRpYyBXaWR0aEFuZE1hcmdpbiBmbG9hdGluZ05vblJlcGxhY2VkV2lkdGhBbmRNYXJnaW4o
TGF5b3V0Q29udGV4dCYsIGNvbnN0IEZvcm1hdHRpbmdDb250ZXh0JiwgY29uc3QgQm94Jiwgc3Rk
OjpvcHRpb25hbDxMYXlvdXRVbml0PiB1c2VkV2lkdGggPSB7IH0pOworICAgICAgICBzdGF0aWMg
V2lkdGhBbmRNYXJnaW4gZmxvYXRpbmdOb25SZXBsYWNlZFdpZHRoQW5kTWFyZ2luKExheW91dFN0
YXRlJiwgY29uc3QgRm9ybWF0dGluZ0NvbnRleHQmLCBjb25zdCBCb3gmLCBzdGQ6Om9wdGlvbmFs
PExheW91dFVuaXQ+IHVzZWRXaWR0aCA9IHsgfSk7CiAKLSAgICAgICAgc3RhdGljIExheW91dFVu
aXQgc2hyaW5rVG9GaXRXaWR0aChMYXlvdXRDb250ZXh0JiwgY29uc3QgRm9ybWF0dGluZ0NvbnRl
eHQmLCBjb25zdCBCb3gmKTsKKyAgICAgICAgc3RhdGljIExheW91dFVuaXQgc2hyaW5rVG9GaXRX
aWR0aChMYXlvdXRTdGF0ZSYsIGNvbnN0IEZvcm1hdHRpbmdDb250ZXh0JiwgY29uc3QgQm94Jik7
CiAgICAgfTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIGNvbXB1dGVPdXRPZkZsb3dWZXJ0aWNhbEdl
b21ldHJ5KGNvbnN0IExheW91dENvbnRleHQmLCBjb25zdCBCb3gmKSBjb25zdDsKLSAgICB2b2lk
IGNvbXB1dGVPdXRPZkZsb3dIb3Jpem9udGFsR2VvbWV0cnkoTGF5b3V0Q29udGV4dCYsIGNvbnN0
IEJveCYpIGNvbnN0OworICAgIHZvaWQgY29tcHV0ZU91dE9mRmxvd1ZlcnRpY2FsR2VvbWV0cnko
Y29uc3QgTGF5b3V0U3RhdGUmLCBjb25zdCBCb3gmKSBjb25zdDsKKyAgICB2b2lkIGNvbXB1dGVP
dXRPZkZsb3dIb3Jpem9udGFsR2VvbWV0cnkoTGF5b3V0U3RhdGUmLCBjb25zdCBCb3gmKSBjb25z
dDsKIAogICAgIFdlYWtQdHI8Y29uc3QgQm94PiBtX3Jvb3Q7CiB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCmluZGV4IGU0OWY3
N2JmODg5NzlkM2FkYjFiZDYxODlkZDgxMWFjM2VmYzllYTguLmMyN2YyYTI2MTYyMzA0MGQ5OGQ3
MzBiN2NhMmZlN2M1Y2ZlZmQxMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9G
b3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
Rm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKQEAgLTM0LDcgKzM0LDcgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlvdXQgewogCi1zdGF0aWMgTGF5b3V0VW5pdCBjb250
ZW50SGVpZ2h0Rm9yRm9ybWF0dGluZ0NvbnRleHRSb290KGNvbnN0IExheW91dENvbnRleHQmIGxh
eW91dENvbnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94KQorc3RhdGljIExheW91dFVuaXQgY29u
dGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdChjb25zdCBMYXlvdXRTdGF0ZSYgbGF5
b3V0U3RhdGUsIGNvbnN0IEJveCYgbGF5b3V0Qm94KQogewogICAgIEFTU0VSVChsYXlvdXRCb3gu
c3R5bGUoKS5sb2dpY2FsSGVpZ2h0KCkuaXNBdXRvKCkgJiYgKGxheW91dEJveC5lc3RhYmxpc2hl
c0Zvcm1hdHRpbmdDb250ZXh0KCkgfHwgbGF5b3V0Qm94LmlzRG9jdW1lbnRCb3goKSkpOwogCkBA
IC01NCw4ICs1NCw4IEBAIHN0YXRpYyBMYXlvdXRVbml0IGNvbnRlbnRIZWlnaHRGb3JGb3JtYXR0
aW5nQ29udGV4dFJvb3QoY29uc3QgTGF5b3V0Q29udGV4dCYgbGF5CiAgICAgaWYgKGZvcm1hdHRp
bmdSb290Q29udGFpbmVyLmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0NvbnRleHQoKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAKLSAgICBhdXRvJiBmaXJzdERpc3BsYXlCb3ggPSBsYXlvdXRDb250
ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmZvcm1hdHRpbmdSb290Q29udGFpbmVyLmZpcnN0
SW5GbG93Q2hpbGQoKSk7Ci0gICAgYXV0byYgbGFzdERpc3BsYXlCb3ggPSBsYXlvdXRDb250ZXh0
LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmZvcm1hdHRpbmdSb290Q29udGFpbmVyLmxhc3RJbkZs
b3dDaGlsZCgpKTsKKyAgICBhdXRvJiBmaXJzdERpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5kaXNw
bGF5Qm94Rm9yTGF5b3V0Qm94KCpmb3JtYXR0aW5nUm9vdENvbnRhaW5lci5maXJzdEluRmxvd0No
aWxkKCkpOworICAgIGF1dG8mIGxhc3REaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJv
eEZvckxheW91dEJveCgqZm9ybWF0dGluZ1Jvb3RDb250YWluZXIubGFzdEluRmxvd0NoaWxkKCkp
OwogICAgIGF1dG8gdG9wID0gZmlyc3REaXNwbGF5Qm94LnJlY3RXaXRoTWFyZ2luKCkudG9wKCk7
CiAgICAgYXV0byBib3R0b20gPSBsYXN0RGlzcGxheUJveC5yZWN0V2l0aE1hcmdpbigpLmJvdHRv
bSgpOwogCkBAIC02Niw3ICs2Niw3IEBAIHN0YXRpYyBMYXlvdXRVbml0IGNvbnRlbnRIZWlnaHRG
b3JGb3JtYXR0aW5nQ29udGV4dFJvb3QoY29uc3QgTGF5b3V0Q29udGV4dCYgbGF5CiAgICAgICAg
IGZvcm1hdHRpbmdDb250ZXh0Um9vdCA9ICZsYXlvdXRCb3guZm9ybWF0dGluZ0NvbnRleHRSb290
KCk7CiAgICAgfQogCi0gICAgYXV0byBmbG9hdHNCb3R0b20gPSBsYXlvdXRDb250ZXh0LmVzdGFi
bGlzaGVkRm9ybWF0dGluZ1N0YXRlKCpmb3JtYXR0aW5nQ29udGV4dFJvb3QpLmZsb2F0aW5nU3Rh
dGUoKS5ib3R0b20oKmZvcm1hdHRpbmdDb250ZXh0Um9vdCk7CisgICAgYXV0byBmbG9hdHNCb3R0
b20gPSBsYXlvdXRTdGF0ZS5lc3RhYmxpc2hlZEZvcm1hdHRpbmdTdGF0ZSgqZm9ybWF0dGluZ0Nv
bnRleHRSb290KS5mbG9hdGluZ1N0YXRlKCkuYm90dG9tKCpmb3JtYXR0aW5nQ29udGV4dFJvb3Qp
OwogICAgIGlmIChmbG9hdHNCb3R0b20pCiAgICAgICAgIGJvdHRvbSA9IHN0ZDo6bWF4KCpmbG9h
dHNCb3R0b20sIGJvdHRvbSk7CiAKQEAgLTk3LDcgKzk3LDcgQEAgc3RkOjpvcHRpb25hbDxMYXlv
dXRVbml0PiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmZpeGVkVmFsdWUoY29uc3QgTGVu
Z3RoJgogLy8gU3BlY2lmaWVzIGEgcGVyY2VudGFnZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIHVzZWQg
dmFsdWUuIFRoZSBwZXJjZW50YWdlIGlzIGNhbGN1bGF0ZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBo
ZWlnaHQgb2YgdGhlIGdlbmVyYXRlZCBib3gncyBjb250YWluaW5nIGJsb2NrLgogLy8gSWYgdGhl
IGhlaWdodCBvZiB0aGUgY29udGFpbmluZyBibG9jayBpcyBub3Qgc3BlY2lmaWVkIGV4cGxpY2l0
bHkgKGkuZS4sIGl0IGRlcGVuZHMgb24gY29udGVudCBoZWlnaHQpLCBhbmQgdGhpcyBlbGVtZW50
IGlzIG5vdCBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQsCiAvLyB0aGUgcGVyY2VudGFnZSB2YWx1ZSBp
cyB0cmVhdGVkIGFzICcwJyAoZm9yICdtaW4taGVpZ2h0Jykgb3IgJ25vbmUnIChmb3IgJ21heC1o
ZWlnaHQnKS4KLXN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gRm9ybWF0dGluZ0NvbnRleHQ6Okdl
b21ldHJ5Ojpjb21wdXRlZE1heEhlaWdodChjb25zdCBMYXlvdXRDb250ZXh0JiBsYXlvdXRDb250
ZXh0LCBjb25zdCBCb3gmIGxheW91dEJveCkKK3N0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gRm9y
bWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlZE1heEhlaWdodChjb25zdCBMYXlvdXRT
dGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IEJveCYgbGF5b3V0Qm94KQogewogICAgIGF1dG8gbWF4
SGVpZ2h0ID0gbGF5b3V0Qm94LnN0eWxlKCkubG9naWNhbE1heEhlaWdodCgpOwogICAgIGlmICht
YXhIZWlnaHQuaXNVbmRlZmluZWQoKSB8fCBtYXhIZWlnaHQuaXNBdXRvKCkpCkBAIC0xMTIsNyAr
MTEyLDcgQEAgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBGb3JtYXR0aW5nQ29udGV4dDo6R2Vv
bWV0cnk6OmNvbXB1dGVkTWF4SGVpZ2h0KGNvbnN0IEwKICAgICAgICAgY29udGFpbmluZ0Jsb2Nr
SGVpZ2h0VmFsdWUgPSB7IGhlaWdodC52YWx1ZSgpIH07CiAgICAgZWxzZSBpZiAobGF5b3V0Qm94
LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKSB7CiAgICAgICAgIC8vIENvbnRhaW5pbmcgYmxvY2sn
cyBoZWlnaHQgaXMgYWxyZWFkeSBjb21wdXRlZC4KLSAgICAgICAgY29udGFpbmluZ0Jsb2NrSGVp
Z2h0VmFsdWUgPSBsYXlvdXRDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxheW91dEJv
eC5jb250YWluaW5nQmxvY2soKSkuaGVpZ2h0KCk7CisgICAgICAgIGNvbnRhaW5pbmdCbG9ja0hl
aWdodFZhbHVlID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94
LmNvbnRhaW5pbmdCbG9jaygpKS5oZWlnaHQoKTsKICAgICB9CiAKICAgICBpZiAoY29udGFpbmlu
Z0Jsb2NrSGVpZ2h0VmFsdWUpCkBAIC0xMjEsNyArMTIxLDcgQEAgc3RkOjpvcHRpb25hbDxMYXlv
dXRVbml0PiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkTWF4SGVpZ2h0KGNv
bnN0IEwKICAgICByZXR1cm4geyB9OwogfQogCi1zdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IEZv
cm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRNaW5IZWlnaHQoY29uc3QgTGF5b3V0
Q29udGV4dCYgbGF5b3V0Q29udGV4dCwgY29uc3QgQm94JiBsYXlvdXRCb3gpCitzdGQ6Om9wdGlv
bmFsPExheW91dFVuaXQ+IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRNaW5I
ZWlnaHQoY29uc3QgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBCb3gmIGxheW91dEJv
eCkKIHsKICAgICBhdXRvIG1pbkhlaWdodCA9IGxheW91dEJveC5zdHlsZSgpLmxvZ2ljYWxNaW5I
ZWlnaHQoKTsKICAgICBpZiAobWluSGVpZ2h0LmlzVW5kZWZpbmVkKCkgfHwgbWluSGVpZ2h0Lmlz
QXV0bygpKQpAQCAtMTM2LDcgKzEzNiw3IEBAIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gRm9y
bWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlZE1pbkhlaWdodChjb25zdCBMCiAgICAg
ICAgIGNvbnRhaW5pbmdCbG9ja0hlaWdodFZhbHVlID0geyBoZWlnaHQudmFsdWUoKSB9OwogICAg
IGVsc2UgaWYgKGxheW91dEJveC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkgewogICAgICAgICAv
LyBDb250YWluaW5nIGJsb2NrJ3MgaGVpZ2h0IGlzIGFscmVhZHkgY29tcHV0ZWQuCi0gICAgICAg
IGNvbnRhaW5pbmdCbG9ja0hlaWdodFZhbHVlID0gbGF5b3V0Q29udGV4dC5kaXNwbGF5Qm94Rm9y
TGF5b3V0Qm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLmhlaWdodCgpOworICAgICAg
ICBjb250YWluaW5nQmxvY2tIZWlnaHRWYWx1ZSA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JM
YXlvdXRCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSkuaGVpZ2h0KCk7CiAgICAgfQog
CiAgICAgaWYgKGNvbnRhaW5pbmdCbG9ja0hlaWdodFZhbHVlKQpAQCAtMTQ1LDcgKzE0NSw3IEBA
IHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpj
b21wdXRlZE1pbkhlaWdodChjb25zdCBMCiAgICAgcmV0dXJuIHsgMCB9OwogfQogCi1zdGF0aWMg
TGF5b3V0VW5pdCBzdGF0aWNWZXJ0aWNhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChj
b25zdCBMYXlvdXRDb250ZXh0JiBsYXlvdXRDb250ZXh0LCBjb25zdCBCb3gmIGxheW91dEJveCkK
K3N0YXRpYyBMYXlvdXRVbml0IHN0YXRpY1ZlcnRpY2FsUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3Np
dGlvbmVkKGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgQm94JiBsYXlvdXRC
b3gpCiB7CiAgICAgQVNTRVJUKGxheW91dEJveC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSk7CiAK
QEAgLTE1OSwxNyArMTU5LDE3IEBAIHN0YXRpYyBMYXlvdXRVbml0IHN0YXRpY1ZlcnRpY2FsUG9z
aXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVkKGNvbnN0IExheW91dENvbnRlCiAgICAgTGF5b3V0
VW5pdCB0b3A7CiAgICAgaWYgKGF1dG8qIHByZXZpb3VzSW5GbG93U2libGluZyA9IGxheW91dEJv
eC5wcmV2aW91c0luRmxvd1NpYmxpbmcoKSkgewogICAgICAgICAvLyBBZGQgc2libGluZyBvZmZz
ZXQKLSAgICAgICAgYXV0byYgcHJldmlvdXNJbkZsb3dEaXNwbGF5Qm94ID0gbGF5b3V0Q29udGV4
dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpwcmV2aW91c0luRmxvd1NpYmxpbmcpOworICAgICAg
ICBhdXRvJiBwcmV2aW91c0luRmxvd0Rpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94
Rm9yTGF5b3V0Qm94KCpwcmV2aW91c0luRmxvd1NpYmxpbmcpOwogICAgICAgICB0b3AgKz0gcHJl
dmlvdXNJbkZsb3dEaXNwbGF5Qm94LmJvdHRvbSgpICsgcHJldmlvdXNJbkZsb3dEaXNwbGF5Qm94
Lm5vbkNvbGxhcHNlZE1hcmdpbkJvdHRvbSgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VS
VChsYXlvdXRCb3gucGFyZW50KCkpOwotICAgICAgICB0b3AgPSBsYXlvdXRDb250ZXh0LmRpc3Bs
YXlCb3hGb3JMYXlvdXRCb3goKmxheW91dEJveC5wYXJlbnQoKSkuY29udGVudEJveFRvcCgpOwor
ICAgICAgICB0b3AgPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRC
b3gucGFyZW50KCkpLmNvbnRlbnRCb3hUb3AoKTsKICAgICB9CiAKICAgICAvLyBSZXNvbHZlIHRv
cCBhbGwgdGhlIHdheSB1cCB0byB0aGUgY29udGFpbmluZyBibG9jay4KICAgICBhdXRvKiBjb250
YWluaW5nQmxvY2sgPSBsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCk7CiAgICAgZm9yIChhdXRv
KiBjb250YWluZXIgPSBsYXlvdXRCb3gucGFyZW50KCk7IGNvbnRhaW5lciAhPSBjb250YWluaW5n
QmxvY2s7IGNvbnRhaW5lciA9IGNvbnRhaW5lci0+Y29udGFpbmluZ0Jsb2NrKCkpIHsKLSAgICAg
ICAgYXV0byYgZGlzcGxheUJveCA9IGxheW91dENvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJv
eCgqY29udGFpbmVyKTsKKyAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGxheW91dFN0YXRlLmRp
c3BsYXlCb3hGb3JMYXlvdXRCb3goKmNvbnRhaW5lcik7CiAgICAgICAgIC8vIERpc3BsYXk6OkJv
eDo6dG9wIGlzIHRoZSBib3JkZXIgYm94IHRvcCBwb3NpdGlvbiBpbiBpdHMgY29udGFpbmluZyBi
bG9jaydzIGNvb3JkaW5hdGUgc3lzdGVtLgogICAgICAgICB0b3AgKz0gZGlzcGxheUJveC50b3Ao
KTsKICAgICAgICAgQVNTRVJUKCFjb250YWluZXItPmlzUG9zaXRpb25lZCgpKTsKQEAgLTE3OCwx
OSArMTc4LDE5IEBAIHN0YXRpYyBMYXlvdXRVbml0IHN0YXRpY1ZlcnRpY2FsUG9zaXRpb25Gb3JP
dXRPZkZsb3dQb3NpdGlvbmVkKGNvbnN0IExheW91dENvbnRlCiAgICAgcmV0dXJuIHRvcDsKIH0K
IAotc3RhdGljIExheW91dFVuaXQgc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uRm9yT3V0T2ZGbG93
UG9zaXRpb25lZChjb25zdCBMYXlvdXRDb250ZXh0JiBsYXlvdXRDb250ZXh0LCBjb25zdCBCb3gm
IGxheW91dEJveCkKK3N0YXRpYyBMYXlvdXRVbml0IHN0YXRpY0hvcml6b250YWxQb3NpdGlvbkZv
ck91dE9mRmxvd1Bvc2l0aW9uZWQoY29uc3QgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25z
dCBCb3gmIGxheW91dEJveCkKIHsKICAgICBBU1NFUlQobGF5b3V0Qm94LmlzT3V0T2ZGbG93UG9z
aXRpb25lZCgpKTsKICAgICAvLyBTZWUgc3RhdGljVmVydGljYWxQb3NpdGlvbkZvck91dE9mRmxv
d1Bvc2l0aW9uZWQgZm9yIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBzdGF0aWMgcG9zaXRpb24uCiAK
ICAgICAvLyBTdGFydCB3aXRoIHRoaXMgYm94J3MgYm9yZGVyIGJveCBvZmZzZXQgZnJvbSB0aGUg
cGFyZW50J3MgYm9yZGVyIGJveC4KICAgICBBU1NFUlQobGF5b3V0Qm94LnBhcmVudCgpKTsKLSAg
ICBhdXRvIGxlZnQgPSBsYXlvdXRDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxheW91
dEJveC5wYXJlbnQoKSkuY29udGVudEJveExlZnQoKTsKKyAgICBhdXRvIGxlZnQgPSBsYXlvdXRT
dGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3gucGFyZW50KCkpLmNvbnRlbnRC
b3hMZWZ0KCk7CiAKICAgICAvLyBSZXNvbHZlIGxlZnQgYWxsIHRoZSB3YXkgdXAgdG8gdGhlIGNv
bnRhaW5pbmcgYmxvY2suCiAgICAgYXV0byogY29udGFpbmluZ0Jsb2NrID0gbGF5b3V0Qm94LmNv
bnRhaW5pbmdCbG9jaygpOwogICAgIGZvciAoYXV0byogY29udGFpbmVyID0gbGF5b3V0Qm94LnBh
cmVudCgpOyBjb250YWluZXIgIT0gY29udGFpbmluZ0Jsb2NrOyBjb250YWluZXIgPSBjb250YWlu
ZXItPmNvbnRhaW5pbmdCbG9jaygpKSB7Ci0gICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlv
dXRDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmNvbnRhaW5lcik7CisgICAgICAgIGF1
dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpjb250
YWluZXIpOwogICAgICAgICAvLyBEaXNwbGF5OjpCb3g6OmxlZnQgaXMgdGhlIGJvcmRlciBib3gg
bGVmdCBwb3NpdGlvbiBpbiBpdHMgY29udGFpbmluZyBibG9jaydzIGNvb3JkaW5hdGUgc3lzdGVt
LgogICAgICAgICBsZWZ0ICs9IGRpc3BsYXlCb3gubGVmdCgpOwogICAgICAgICBBU1NFUlQoIWNv
bnRhaW5lci0+aXNQb3NpdGlvbmVkKCkpOwpAQCAtMTk5LDcgKzE5OSw3IEBAIHN0YXRpYyBMYXlv
dXRVbml0IHN0YXRpY0hvcml6b250YWxQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQoY29u
c3QgTGF5b3V0Q29uCiAgICAgcmV0dXJuIGxlZnQ7CiB9CiAKLUxheW91dFVuaXQgRm9ybWF0dGlu
Z0NvbnRleHQ6Okdlb21ldHJ5OjpzaHJpbmtUb0ZpdFdpZHRoKExheW91dENvbnRleHQmIGxheW91
dENvbnRleHQsIGNvbnN0IEZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCwgY29u
c3QgQm94JiBsYXlvdXRCb3gpCitMYXlvdXRVbml0IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRy
eTo6c2hyaW5rVG9GaXRXaWR0aChMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IEZvcm1h
dHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCwgY29uc3QgQm94JiBsYXlvdXRCb3gpCiB7
CiAgICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwg
IltXaWR0aF0gLT4gc2hyaW5rIHRvIGZpdCAtPiB1bnN1cHBvcnRlZCAtPiB3aWR0aCgiIDw8IExh
eW91dFVuaXQgeyB9IDw8ICJweCkgbGF5b3V0Qm94OiAiIDw8ICZsYXlvdXRCb3ggPDwgIikiKTsK
ICAgICAvLyBDYWxjdWxhdGlvbiBvZiB0aGUgc2hyaW5rLXRvLWZpdCB3aWR0aCBpcyBzaW1pbGFy
IHRvIGNhbGN1bGF0aW5nIHRoZSB3aWR0aCBvZiBhIHRhYmxlIGNlbGwgdXNpbmcgdGhlIGF1dG9t
YXRpYyB0YWJsZSBsYXlvdXQgYWxnb3JpdGhtLgpAQCAtMjA5LDEyICsyMDksMTIgQEAgTGF5b3V0
VW5pdCBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnNocmlua1RvRml0V2lkdGgoTGF5b3V0
Q29udGV4dCYgbGF5b3V0Q28KICAgICAvLyAncGFkZGluZy1sZWZ0JywgJ3BhZGRpbmctcmlnaHQn
LCAnYm9yZGVyLXJpZ2h0LXdpZHRoJywgJ21hcmdpbi1yaWdodCcsIGFuZCB0aGUgd2lkdGhzIG9m
IGFueSByZWxldmFudCBzY3JvbGwgYmFycy4KIAogICAgIC8vIFRoZW4gdGhlIHNocmluay10by1m
aXQgd2lkdGggaXM6IG1pbihtYXgocHJlZmVycmVkIG1pbmltdW0gd2lkdGgsIGF2YWlsYWJsZSB3
aWR0aCksIHByZWZlcnJlZCB3aWR0aCkuCi0gICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IGxheW91
dENvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9j
aygpKS53aWR0aCgpOwotICAgIGF1dG8gaW5zdHJpbnNpY1dpZHRoQ29uc3RyYWludHMgPSBmb3Jt
YXR0aW5nQ29udGV4dC5pbnN0cmluc2ljV2lkdGhDb25zdHJhaW50cyhsYXlvdXRDb250ZXh0LCBs
YXlvdXRCb3gpOworICAgIGF1dG8gYXZhaWxhYmxlV2lkdGggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5
Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLndpZHRoKCk7Cisg
ICAgYXV0byBpbnN0cmluc2ljV2lkdGhDb25zdHJhaW50cyA9IGZvcm1hdHRpbmdDb250ZXh0Lmlu
c3RyaW5zaWNXaWR0aENvbnN0cmFpbnRzKGxheW91dFN0YXRlLCBsYXlvdXRCb3gpOwogICAgIHJl
dHVybiBzdGQ6Om1pbihzdGQ6Om1heChpbnN0cmluc2ljV2lkdGhDb25zdHJhaW50cy5taW5pbXVt
LCBhdmFpbGFibGVXaWR0aCksIGluc3RyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1heGltdW0pOwog
fQogCi1WZXJ0aWNhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZG
bG93Tm9uUmVwbGFjZWRWZXJ0aWNhbEdlb21ldHJ5KGNvbnN0IExheW91dENvbnRleHQmIGxheW91
dENvbnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94LCBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+
IHVzZWRIZWlnaHQpCitWZXJ0aWNhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRy
eTo6b3V0T2ZGbG93Tm9uUmVwbGFjZWRWZXJ0aWNhbEdlb21ldHJ5KGNvbnN0IExheW91dFN0YXRl
JiBsYXlvdXRTdGF0ZSwgY29uc3QgQm94JiBsYXlvdXRCb3gsIHN0ZDo6b3B0aW9uYWw8TGF5b3V0
VW5pdD4gdXNlZEhlaWdodCkKIHsKICAgICBBU1NFUlQobGF5b3V0Qm94LmlzT3V0T2ZGbG93UG9z
aXRpb25lZCgpICYmICFsYXlvdXRCb3gucmVwbGFjZWQoKSk7CiAKQEAgLTI0Myw4ICsyNDMsOCBA
QCBWZXJ0aWNhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93
Tm9uUmVwbGFjZWRWZXJ0aWNhbEdlb21ldAogICAgIC8vIDYuICdib3R0b20nIGlzICdhdXRvJywg
J3RvcCcgYW5kICdoZWlnaHQnIGFyZSBub3QgJ2F1dG8nLCB0aGVuIHNldCAnYXV0bycgdmFsdWVz
IGZvciAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyB0byAwIGFuZCBzb2x2ZSBmb3Ig
J2JvdHRvbScKIAogICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7Ci0gICAgYXV0
byYgZGlzcGxheUJveCA9IGxheW91dENvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveChsYXlv
dXRCb3gpOwotICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9ja0Rpc3BsYXlCb3ggPSBsYXlvdXRDb250
ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSk7
CisgICAgYXV0byYgZGlzcGxheUJveCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRC
b3gobGF5b3V0Qm94KTsKKyAgICBhdXRvJiBjb250YWluaW5nQmxvY2tEaXNwbGF5Qm94ID0gbGF5
b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9j
aygpKTsKICAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja0hlaWdodCA9IGNvbnRhaW5pbmdCbG9ja0Rp
c3BsYXlCb3guaGVpZ2h0KCk7CiAgICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGNvbnRh
aW5pbmdCbG9ja0Rpc3BsYXlCb3gud2lkdGgoKTsKIApAQCAtMjU5LDcgKzI1OSw3IEBAIFZlcnRp
Y2FsR2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dOb25SZXBs
YWNlZFZlcnRpY2FsR2VvbWV0CiAgICAgYXV0byBib3JkZXJCb3R0b20gPSBkaXNwbGF5Qm94LmJv
cmRlckJvdHRvbSgpOwogCiAgICAgaWYgKCF0b3AgJiYgIWhlaWdodCAmJiAhYm90dG9tKQotICAg
ICAgICB0b3AgPSBzdGF0aWNWZXJ0aWNhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChs
YXlvdXRDb250ZXh0LCBsYXlvdXRCb3gpOworICAgICAgICB0b3AgPSBzdGF0aWNWZXJ0aWNhbFBv
c2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94KTsKIAog
ICAgIGlmICh0b3AgJiYgaGVpZ2h0ICYmIGJvdHRvbSkgewogICAgICAgICBpZiAoIW1hcmdpblRv
cCAmJiAhbWFyZ2luQm90dG9tKSB7CkBAIC0yNzcsNyArMjc3LDcgQEAgVmVydGljYWxHZW9tZXRy
eSBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd05vblJlcGxhY2VkVmVydGlj
YWxHZW9tZXQKIAogICAgIGlmICghdG9wICYmICFoZWlnaHQgJiYgYm90dG9tKSB7CiAgICAgICAg
IC8vICMxCi0gICAgICAgIGhlaWdodCA9IGNvbnRlbnRIZWlnaHRGb3JGb3JtYXR0aW5nQ29udGV4
dFJvb3QobGF5b3V0Q29udGV4dCwgbGF5b3V0Qm94KTsKKyAgICAgICAgaGVpZ2h0ID0gY29udGVu
dEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdChsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94KTsK
ICAgICAgICAgbWFyZ2luVG9wID0gbWFyZ2luVG9wLnZhbHVlX29yKDApOwogICAgICAgICBtYXJn
aW5Cb3R0b20gPSBtYXJnaW5Cb3R0b20udmFsdWVfb3IoMCk7CiAgICAgICAgIHRvcCA9IGNvbnRh
aW5pbmdCbG9ja0hlaWdodCAtICgqbWFyZ2luVG9wICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCAr
ICpoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsgKm1hcmdpbkJvdHRvbSAr
ICpib3R0b20pOyAKQEAgLTI4NSw3ICsyODUsNyBAQCBWZXJ0aWNhbEdlb21ldHJ5IEZvcm1hdHRp
bmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93Tm9uUmVwbGFjZWRWZXJ0aWNhbEdlb21ldAog
CiAgICAgaWYgKCF0b3AgJiYgIWJvdHRvbSAmJiBoZWlnaHQpIHsKICAgICAgICAgLy8gIzIKLSAg
ICAgICAgdG9wID0gc3RhdGljVmVydGljYWxQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQo
bGF5b3V0Q29udGV4dCwgbGF5b3V0Qm94KTsKKyAgICAgICAgdG9wID0gc3RhdGljVmVydGljYWxQ
b3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQobGF5b3V0U3RhdGUsIGxheW91dEJveCk7CiAg
ICAgICAgIG1hcmdpblRvcCA9IG1hcmdpblRvcC52YWx1ZV9vcigwKTsKICAgICAgICAgbWFyZ2lu
Qm90dG9tID0gbWFyZ2luQm90dG9tLnZhbHVlX29yKDApOwogICAgICAgICBib3R0b20gPSBjb250
YWluaW5nQmxvY2tIZWlnaHQgLSAoKnRvcCArICptYXJnaW5Ub3AgKyBib3JkZXJUb3AgKyBwYWRk
aW5nVG9wICsgKmhlaWdodCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyAqbWFyZ2lu
Qm90dG9tKTsgCkBAIC0yOTMsNyArMjkzLDcgQEAgVmVydGljYWxHZW9tZXRyeSBGb3JtYXR0aW5n
Q29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd05vblJlcGxhY2VkVmVydGljYWxHZW9tZXQKIAog
ICAgIGlmICghaGVpZ2h0ICYmICFib3R0b20gJiYgdG9wKSB7CiAgICAgICAgIC8vICMzCi0gICAg
ICAgIGhlaWdodCA9IGNvbnRlbnRIZWlnaHRGb3JGb3JtYXR0aW5nQ29udGV4dFJvb3QobGF5b3V0
Q29udGV4dCwgbGF5b3V0Qm94KTsKKyAgICAgICAgaGVpZ2h0ID0gY29udGVudEhlaWdodEZvckZv
cm1hdHRpbmdDb250ZXh0Um9vdChsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94KTsKICAgICAgICAgbWFy
Z2luVG9wID0gbWFyZ2luVG9wLnZhbHVlX29yKDApOwogICAgICAgICBtYXJnaW5Cb3R0b20gPSBt
YXJnaW5Cb3R0b20udmFsdWVfb3IoMCk7CiAgICAgICAgIGJvdHRvbSA9IGNvbnRhaW5pbmdCbG9j
a0hlaWdodCAtICgqdG9wICsgKm1hcmdpblRvcCArIGJvcmRlclRvcCArIHBhZGRpbmdUb3AgKyAq
aGVpZ2h0ICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbSArICptYXJnaW5Cb3R0b20pOyAK
QEAgLTMzMCw3ICszMzAsNyBAQCBWZXJ0aWNhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpH
ZW9tZXRyeTo6b3V0T2ZGbG93Tm9uUmVwbGFjZWRWZXJ0aWNhbEdlb21ldAogICAgIHJldHVybiB7
ICp0b3AsICpib3R0b20sIHsgKmhlaWdodCwgeyAqbWFyZ2luVG9wLCAqbWFyZ2luQm90dG9tIH0s
IHsgfSB9IH07CiB9CiAKLUhvcml6b250YWxHZW9tZXRyeSBGb3JtYXR0aW5nQ29udGV4dDo6R2Vv
bWV0cnk6Om91dE9mRmxvd05vblJlcGxhY2VkSG9yaXpvbnRhbEdlb21ldHJ5KExheW91dENvbnRl
eHQmIGxheW91dENvbnRleHQsIGNvbnN0IEZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29u
dGV4dCwgY29uc3QgQm94JiBsYXlvdXRCb3gsIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gdXNl
ZFdpZHRoKQorSG9yaXpvbnRhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6
b3V0T2ZGbG93Tm9uUmVwbGFjZWRIb3Jpem9udGFsR2VvbWV0cnkoTGF5b3V0U3RhdGUmIGxheW91
dFN0YXRlLCBjb25zdCBGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQsIGNvbnN0
IEJveCYgbGF5b3V0Qm94LCBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IHVzZWRXaWR0aCkKIHsK
ICAgICBBU1NFUlQobGF5b3V0Qm94LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmICFsYXlvdXRC
b3gucmVwbGFjZWQoKSk7CiAgICAgCkBAIC0zNjEsOSArMzYxLDkgQEAgSG9yaXpvbnRhbEdlb21l
dHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93Tm9uUmVwbGFjZWRIb3Jp
em9udGFsR2UKICAgICAvLyA2LiAncmlnaHQnIGlzICdhdXRvJywgJ2xlZnQnIGFuZCAnd2lkdGgn
IGFyZSBub3QgJ2F1dG8nLCB0aGVuIHNvbHZlIGZvciAncmlnaHQnCiAKICAgICBhdXRvJiBzdHls
ZSA9IGxheW91dEJveC5zdHlsZSgpOwotICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRDb250
ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKKyAgICBhdXRvJiBkaXNwbGF5
Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOwogICAg
IGF1dG8mIGNvbnRhaW5pbmdCbG9jayA9ICpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCk7Ci0g
ICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGxheW91dENvbnRleHQuZGlzcGxheUJveEZv
ckxheW91dEJveChjb250YWluaW5nQmxvY2spLmNvbnRlbnRCb3hXaWR0aCgpOworICAgIGF1dG8g
Y29udGFpbmluZ0Jsb2NrV2lkdGggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94
KGNvbnRhaW5pbmdCbG9jaykuY29udGVudEJveFdpZHRoKCk7CiAgICAgYXV0byBpc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uID0gY29udGFpbmluZ0Jsb2NrLnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVj
dGlvbigpOwogICAgIAogICAgIGF1dG8gbGVmdCA9IGNvbXB1dGVkVmFsdWVJZk5vdEF1dG8oc3R5
bGUubG9naWNhbExlZnQoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwpAQCAtMzg1LDcgKzM4NSw3
IEBAIEhvcml6b250YWxHZW9tZXRyeSBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9m
Rmxvd05vblJlcGxhY2VkSG9yaXpvbnRhbEdlCiAgICAgICAgIG1hcmdpbkxlZnQgPSBtYXJnaW5M
ZWZ0LnZhbHVlX29yKDApOwogICAgICAgICBtYXJnaW5SaWdodCA9IG1hcmdpblJpZ2h0LnZhbHVl
X29yKDApOwogCi0gICAgICAgIGF1dG8gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uID0gc3RhdGlj
SG9yaXpvbnRhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChsYXlvdXRDb250ZXh0LCBs
YXlvdXRCb3gpOworICAgICAgICBhdXRvIHN0YXRpY0hvcml6b250YWxQb3NpdGlvbiA9IHN0YXRp
Y0hvcml6b250YWxQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQobGF5b3V0U3RhdGUsIGxh
eW91dEJveCk7CiAgICAgICAgIGlmIChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKQogICAgICAgICAg
ICAgbGVmdCA9IHN0YXRpY0hvcml6b250YWxQb3NpdGlvbjsKICAgICAgICAgZWxzZQpAQCAtNDM5
LDExICs0MzksMTEgQEAgSG9yaXpvbnRhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9t
ZXRyeTo6b3V0T2ZGbG93Tm9uUmVwbGFjZWRIb3Jpem9udGFsR2UKIAogICAgIGlmICghbGVmdCAm
JiAhd2lkdGggJiYgcmlnaHQpIHsKICAgICAgICAgLy8gIzEKLSAgICAgICAgd2lkdGggPSBzaHJp
bmtUb0ZpdFdpZHRoKGxheW91dENvbnRleHQsIGZvcm1hdHRpbmdDb250ZXh0LCBsYXlvdXRCb3gp
OworICAgICAgICB3aWR0aCA9IHNocmlua1RvRml0V2lkdGgobGF5b3V0U3RhdGUsIGZvcm1hdHRp
bmdDb250ZXh0LCBsYXlvdXRCb3gpOwogICAgICAgICBsZWZ0ID0gY29udGFpbmluZ0Jsb2NrV2lk
dGggLSAoKm1hcmdpbkxlZnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyAqd2lkdGggKyBw
YWRkaW5nUmlnaHQgICsgYm9yZGVyUmlnaHQgKyAqbWFyZ2luUmlnaHQgKyAqcmlnaHQpOwogICAg
IH0gZWxzZSBpZiAoIWxlZnQgJiYgIXJpZ2h0ICYmIHdpZHRoKSB7CiAgICAgICAgIC8vICMyCi0g
ICAgICAgIGF1dG8gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uID0gc3RhdGljSG9yaXpvbnRhbFBv
c2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChsYXlvdXRDb250ZXh0LCBsYXlvdXRCb3gpOwor
ICAgICAgICBhdXRvIHN0YXRpY0hvcml6b250YWxQb3NpdGlvbiA9IHN0YXRpY0hvcml6b250YWxQ
b3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQobGF5b3V0U3RhdGUsIGxheW91dEJveCk7CiAg
ICAgICAgIGlmIChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKSB7CiAgICAgICAgICAgICBsZWZ0ID0g
c3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uOwogICAgICAgICAgICAgcmlnaHQgPSBjb250YWluaW5n
QmxvY2tXaWR0aCAtICgqbGVmdCArICptYXJnaW5MZWZ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdM
ZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyAqbWFyZ2luUmlnaHQp
OwpAQCAtNDUzLDcgKzQ1Myw3IEBAIEhvcml6b250YWxHZW9tZXRyeSBGb3JtYXR0aW5nQ29udGV4
dDo6R2VvbWV0cnk6Om91dE9mRmxvd05vblJlcGxhY2VkSG9yaXpvbnRhbEdlCiAgICAgICAgIH0K
ICAgICB9IGVsc2UgaWYgKCF3aWR0aCAmJiAhcmlnaHQgJiYgbGVmdCkgewogICAgICAgICAvLyAj
MwotICAgICAgICB3aWR0aCA9IHNocmlua1RvRml0V2lkdGgobGF5b3V0Q29udGV4dCwgZm9ybWF0
dGluZ0NvbnRleHQsIGxheW91dEJveCk7CisgICAgICAgIHdpZHRoID0gc2hyaW5rVG9GaXRXaWR0
aChsYXlvdXRTdGF0ZSwgZm9ybWF0dGluZ0NvbnRleHQsIGxheW91dEJveCk7CiAgICAgICAgIHJp
Z2h0ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyAqbWFyZ2luTGVmdCArIGJvcmRl
ckxlZnQgKyBwYWRkaW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0
ICsgKm1hcmdpblJpZ2h0KTsKICAgICB9IGVsc2UgaWYgKCFsZWZ0ICYmIHdpZHRoICYmIHJpZ2h0
KSB7CiAgICAgICAgIC8vICM0CkBAIC00NzYsNyArNDc2LDcgQEAgSG9yaXpvbnRhbEdlb21ldHJ5
IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93Tm9uUmVwbGFjZWRIb3Jpem9u
dGFsR2UKICAgICByZXR1cm4geyAqbGVmdCwgKnJpZ2h0LCB7ICp3aWR0aCwgeyAqbWFyZ2luTGVm
dCwgKm1hcmdpblJpZ2h0IH0sIHsgbm9uQ29tcHV0ZWRNYXJnaW5MZWZ0LCBub25Db21wdXRlZE1h
cmdpblJpZ2h0IH0gfSB9OwogfQogCi1WZXJ0aWNhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0
OjpHZW9tZXRyeTo6b3V0T2ZGbG93UmVwbGFjZWRWZXJ0aWNhbEdlb21ldHJ5KGNvbnN0IExheW91
dENvbnRleHQmIGxheW91dENvbnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94LCBzdGQ6Om9wdGlv
bmFsPExheW91dFVuaXQ+IHVzZWRIZWlnaHQpCitWZXJ0aWNhbEdlb21ldHJ5IEZvcm1hdHRpbmdD
b250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93UmVwbGFjZWRWZXJ0aWNhbEdlb21ldHJ5KGNvbnN0
IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgQm94JiBsYXlvdXRCb3gsIHN0ZDo6b3B0
aW9uYWw8TGF5b3V0VW5pdD4gdXNlZEhlaWdodCkKIHsKICAgICBBU1NFUlQobGF5b3V0Qm94Lmlz
T3V0T2ZGbG93UG9zaXRpb25lZCgpICYmIGxheW91dEJveC5yZXBsYWNlZCgpKTsKIApAQCAtNDkx
LDE0ICs0OTEsMTQgQEAgVmVydGljYWxHZW9tZXRyeSBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0
cnk6Om91dE9mRmxvd1JlcGxhY2VkVmVydGljYWxHZW9tZXRyeSgKICAgICAvLyA1LiBJZiBhdCB0
aGlzIHBvaW50IHRoZSB2YWx1ZXMgYXJlIG92ZXItY29uc3RyYWluZWQsIGlnbm9yZSB0aGUgdmFs
dWUgZm9yICdib3R0b20nIGFuZCBzb2x2ZSBmb3IgdGhhdCB2YWx1ZS4KIAogICAgIGF1dG8mIHN0
eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7Ci0gICAgYXV0byYgZGlzcGxheUJveCA9IGxheW91dENv
bnRleHQuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOwotICAgIGF1dG8mIGNvbnRh
aW5pbmdCbG9ja0Rpc3BsYXlCb3ggPSBsYXlvdXRDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRC
b3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSk7CisgICAgYXV0byYgZGlzcGxheUJveCA9
IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKKyAgICBhdXRv
JiBjb250YWluaW5nQmxvY2tEaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxh
eW91dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKTsKICAgICBhdXRvIGNvbnRhaW5p
bmdCbG9ja0hlaWdodCA9IGNvbnRhaW5pbmdCbG9ja0Rpc3BsYXlCb3guaGVpZ2h0KCk7CiAgICAg
YXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja0Rpc3BsYXlCb3gud2lk
dGgoKTsKIAogICAgIGF1dG8gdG9wID0gY29tcHV0ZWRWYWx1ZUlmTm90QXV0byhzdHlsZS5sb2dp
Y2FsVG9wKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKICAgICBhdXRvIGJvdHRvbSA9IGNvbXB1
dGVkVmFsdWVJZk5vdEF1dG8oc3R5bGUubG9naWNhbEJvdHRvbSgpLCBjb250YWluaW5nQmxvY2tX
aWR0aCk7Ci0gICAgYXV0byBoZWlnaHQgPSBpbmxpbmVSZXBsYWNlZEhlaWdodEFuZE1hcmdpbihs
YXlvdXRDb250ZXh0LCBsYXlvdXRCb3gsIHVzZWRIZWlnaHQpLmhlaWdodDsKKyAgICBhdXRvIGhl
aWdodCA9IGlubGluZVJlcGxhY2VkSGVpZ2h0QW5kTWFyZ2luKGxheW91dFN0YXRlLCBsYXlvdXRC
b3gsIHVzZWRIZWlnaHQpLmhlaWdodDsKICAgICBhdXRvIG1hcmdpblRvcCA9IGNvbXB1dGVkVmFs
dWVJZk5vdEF1dG8oc3R5bGUubWFyZ2luVG9wKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKICAg
ICBhdXRvIG1hcmdpbkJvdHRvbSA9IGNvbXB1dGVkVmFsdWVJZk5vdEF1dG8oc3R5bGUubWFyZ2lu
Qm90dG9tKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKICAgICBhdXRvIHBhZGRpbmdUb3AgPSBk
aXNwbGF5Qm94LnBhZGRpbmdUb3AoKS52YWx1ZV9vcigwKTsKQEAgLTUwOCw3ICs1MDgsNyBAQCBW
ZXJ0aWNhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93UmVw
bGFjZWRWZXJ0aWNhbEdlb21ldHJ5KAogCiAgICAgaWYgKCF0b3AgJiYgIWJvdHRvbSkgewogICAg
ICAgICAvLyAjMQotICAgICAgICB0b3AgPSBzdGF0aWNWZXJ0aWNhbFBvc2l0aW9uRm9yT3V0T2ZG
bG93UG9zaXRpb25lZChsYXlvdXRDb250ZXh0LCBsYXlvdXRCb3gpOworICAgICAgICB0b3AgPSBz
dGF0aWNWZXJ0aWNhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChsYXlvdXRTdGF0ZSwg
bGF5b3V0Qm94KTsKICAgICB9CiAKICAgICBpZiAoIWJvdHRvbSkgewpAQCAtNTQ1LDcgKzU0NSw3
IEBAIFZlcnRpY2FsR2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZs
b3dSZXBsYWNlZFZlcnRpY2FsR2VvbWV0cnkoCiAgICAgcmV0dXJuIHsgKnRvcCwgKmJvdHRvbSwg
eyBoZWlnaHQsIHsgKm1hcmdpblRvcCwgKm1hcmdpbkJvdHRvbSB9LCB7IH0gfSB9OwogfQogCi1I
b3Jpem9udGFsR2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dS
ZXBsYWNlZEhvcml6b250YWxHZW9tZXRyeShjb25zdCBMYXlvdXRDb250ZXh0JiBsYXlvdXRDb250
ZXh0LCBjb25zdCBCb3gmIGxheW91dEJveCwgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiB1c2Vk
V2lkdGgpCitIb3Jpem9udGFsR2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpv
dXRPZkZsb3dSZXBsYWNlZEhvcml6b250YWxHZW9tZXRyeShjb25zdCBMYXlvdXRTdGF0ZSYgbGF5
b3V0U3RhdGUsIGNvbnN0IEJveCYgbGF5b3V0Qm94LCBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+
IHVzZWRXaWR0aCkKIHsKICAgICBBU1NFUlQobGF5b3V0Qm94LmlzT3V0T2ZGbG93UG9zaXRpb25l
ZCgpICYmIGxheW91dEJveC5yZXBsYWNlZCgpKTsKIApAQCAtNTY0LDkgKzU2NCw5IEBAIEhvcml6
b250YWxHZW9tZXRyeSBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd1JlcGxh
Y2VkSG9yaXpvbnRhbEdlb21lCiAgICAgLy8gICAncmlnaHQnIChpbiBjYXNlICdkaXJlY3Rpb24n
IGlzICdsdHInKSBhbmQgc29sdmUgZm9yIHRoYXQgdmFsdWUuCiAKICAgICBhdXRvJiBzdHlsZSA9
IGxheW91dEJveC5zdHlsZSgpOwotICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRDb250ZXh0
LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKKyAgICBhdXRvJiBkaXNwbGF5Qm94
ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOwogICAgIGF1
dG8mIGNvbnRhaW5pbmdCbG9jayA9ICpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAg
YXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGxheW91dENvbnRleHQuZGlzcGxheUJveEZvckxh
eW91dEJveChjb250YWluaW5nQmxvY2spLmNvbnRlbnRCb3hXaWR0aCgpOworICAgIGF1dG8gY29u
dGFpbmluZ0Jsb2NrV2lkdGggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGNv
bnRhaW5pbmdCbG9jaykuY29udGVudEJveFdpZHRoKCk7CiAgICAgYXV0byBpc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uID0gY29udGFpbmluZ0Jsb2NrLnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpOwogCiAgICAgYXV0byBsZWZ0ID0gY29tcHV0ZWRWYWx1ZUlmTm90QXV0byhzdHlsZS5sb2dp
Y2FsTGVmdCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7CkBAIC01NzUsNyArNTc1LDcgQEAgSG9y
aXpvbnRhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93UmVw
bGFjZWRIb3Jpem9udGFsR2VvbWUKICAgICBhdXRvIG1hcmdpblJpZ2h0ID0gY29tcHV0ZWRWYWx1
ZUlmTm90QXV0byhzdHlsZS5tYXJnaW5SaWdodCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7CiAg
ICAgYXV0byBub25Db21wdXRlZE1hcmdpbkxlZnQgPSBtYXJnaW5MZWZ0LnZhbHVlX29yKDApOwog
ICAgIGF1dG8gbm9uQ29tcHV0ZWRNYXJnaW5SaWdodCA9IG1hcmdpblJpZ2h0LnZhbHVlX29yKDAp
OwotICAgIGF1dG8gd2lkdGggPSBpbmxpbmVSZXBsYWNlZFdpZHRoQW5kTWFyZ2luKGxheW91dENv
bnRleHQsIGxheW91dEJveCwgdXNlZFdpZHRoKS53aWR0aDsKKyAgICBhdXRvIHdpZHRoID0gaW5s
aW5lUmVwbGFjZWRXaWR0aEFuZE1hcmdpbihsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94LCB1c2VkV2lk
dGgpLndpZHRoOwogICAgIGF1dG8gcGFkZGluZ0xlZnQgPSBkaXNwbGF5Qm94LnBhZGRpbmdMZWZ0
KCkudmFsdWVfb3IoMCk7CiAgICAgYXV0byBwYWRkaW5nUmlnaHQgPSBkaXNwbGF5Qm94LnBhZGRp
bmdSaWdodCgpLnZhbHVlX29yKDApOwogICAgIGF1dG8gYm9yZGVyTGVmdCA9IGRpc3BsYXlCb3gu
Ym9yZGVyTGVmdCgpOwpAQCAtNTgzLDcgKzU4Myw3IEBAIEhvcml6b250YWxHZW9tZXRyeSBGb3Jt
YXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd1JlcGxhY2VkSG9yaXpvbnRhbEdlb21l
CiAKICAgICBpZiAoIWxlZnQgJiYgIXJpZ2h0KSB7CiAgICAgICAgIC8vICMxCi0gICAgICAgIGF1
dG8gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uID0gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uRm9y
T3V0T2ZGbG93UG9zaXRpb25lZChsYXlvdXRDb250ZXh0LCBsYXlvdXRCb3gpOworICAgICAgICBh
dXRvIHN0YXRpY0hvcml6b250YWxQb3NpdGlvbiA9IHN0YXRpY0hvcml6b250YWxQb3NpdGlvbkZv
ck91dE9mRmxvd1Bvc2l0aW9uZWQobGF5b3V0U3RhdGUsIGxheW91dEJveCk7CiAgICAgICAgIGlm
IChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKQogICAgICAgICAgICAgbGVmdCA9IHN0YXRpY0hvcml6
b250YWxQb3NpdGlvbjsKICAgICAgICAgZWxzZQpAQCAtNjQzLDcgKzY0Myw3IEBAIEhvcml6b250
YWxHZW9tZXRyeSBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd1JlcGxhY2Vk
SG9yaXpvbnRhbEdlb21lCiAgICAgcmV0dXJuIHsgKmxlZnQsICpyaWdodCwgeyB3aWR0aCwgeyAq
bWFyZ2luTGVmdCwgKm1hcmdpblJpZ2h0IH0sIHsgbm9uQ29tcHV0ZWRNYXJnaW5MZWZ0LCBub25D
b21wdXRlZE1hcmdpblJpZ2h0IH0gfSB9OwogfQogCi1IZWlnaHRBbmRNYXJnaW4gRm9ybWF0dGlu
Z0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wbGljYXRlZENhc2VzKGNvbnN0IExheW91dENvbnRleHQm
IGxheW91dENvbnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94LCBzdGQ6Om9wdGlvbmFsPExheW91
dFVuaXQ+IHVzZWRIZWlnaHQpCitIZWlnaHRBbmRNYXJnaW4gRm9ybWF0dGluZ0NvbnRleHQ6Okdl
b21ldHJ5Ojpjb21wbGljYXRlZENhc2VzKGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwg
Y29uc3QgQm94JiBsYXlvdXRCb3gsIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gdXNlZEhlaWdo
dCkKIHsKICAgICBBU1NFUlQoIWxheW91dEJveC5yZXBsYWNlZCgpKTsKICAgICAvLyBUT0RPOiBV
c2UgY29tcGxpY2F0ZWQtY2FzZSBmb3IgZG9jdW1lbnQgcmVuZGVyZXIgZm9yIG5vdyAoc2VlIEJs
b2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dIZWlnaHRBbmRNYXJnaW4pLgpA
QCAtNjYwLDcgKzY2MCw3IEBAIEhlaWdodEFuZE1hcmdpbiBGb3JtYXR0aW5nQ29udGV4dDo6R2Vv
bWV0cnk6OmNvbXBsaWNhdGVkQ2FzZXMoY29uc3QgTGF5b3V0Q29udGV4CiAKICAgICBhdXRvJiBz
dHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwogICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9jayA9ICps
YXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgYXV0byYgY29udGFpbmluZ0Jsb2NrRGlz
cGxheUJveCA9IGxheW91dENvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveChjb250YWluaW5n
QmxvY2spOworICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9ja0Rpc3BsYXlCb3ggPSBsYXlvdXRTdGF0
ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGNvbnRhaW5pbmdCbG9jayk7CiAgICAgYXV0byBjb250
YWluaW5nQmxvY2tXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja0Rpc3BsYXlCb3guY29udGVudEJveFdp
ZHRoKCk7CiAKICAgICBhdXRvIGhlaWdodCA9IGZpeGVkVmFsdWUodXNlZEhlaWdodCA/IExlbmd0
aCB7IHVzZWRIZWlnaHQudmFsdWUoKSwgRml4ZWQgfSA6IHN0eWxlLmxvZ2ljYWxIZWlnaHQoKSk7
CkBAIC02NzMsNyArNjczLDcgQEAgSGVpZ2h0QW5kTWFyZ2luIEZvcm1hdHRpbmdDb250ZXh0OjpH
ZW9tZXRyeTo6Y29tcGxpY2F0ZWRDYXNlcyhjb25zdCBMYXlvdXRDb250ZXgKICAgICAvLyAjMgog
ICAgIGlmICghaGVpZ2h0KSB7CiAgICAgICAgIGlmIChzdHlsZS5sb2dpY2FsSGVpZ2h0KCkuaXNB
dXRvKCkpCi0gICAgICAgICAgICBoZWlnaHQgPSBjb250ZW50SGVpZ2h0Rm9yRm9ybWF0dGluZ0Nv
bnRleHRSb290KGxheW91dENvbnRleHQsIGxheW91dEJveCk7CisgICAgICAgICAgICBoZWlnaHQg
PSBjb250ZW50SGVpZ2h0Rm9yRm9ybWF0dGluZ0NvbnRleHRSb290KGxheW91dFN0YXRlLCBsYXlv
dXRCb3gpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVE
X1lFVCgpOwogICAgIH0KQEAgLTY4Niw3ICs2ODYsNyBAQCBIZWlnaHRBbmRNYXJnaW4gRm9ybWF0
dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wbGljYXRlZENhc2VzKGNvbnN0IExheW91dENvbnRl
eAogICAgIHJldHVybiBIZWlnaHRBbmRNYXJnaW4geyAqaGVpZ2h0LCB7ICptYXJnaW5Ub3AsICpt
YXJnaW5Cb3R0b20gfSwgeyB9IH07CiB9CiAKLVdpZHRoQW5kTWFyZ2luIEZvcm1hdHRpbmdDb250
ZXh0OjpHZW9tZXRyeTo6ZmxvYXRpbmdOb25SZXBsYWNlZFdpZHRoQW5kTWFyZ2luKExheW91dENv
bnRleHQmIGxheW91dENvbnRleHQsIGNvbnN0IEZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5n
Q29udGV4dCwgY29uc3QgQm94JiBsYXlvdXRCb3gsIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4g
dXNlZFdpZHRoKQorV2lkdGhBbmRNYXJnaW4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpm
bG9hdGluZ05vblJlcGxhY2VkV2lkdGhBbmRNYXJnaW4oTGF5b3V0U3RhdGUmIGxheW91dFN0YXRl
LCBjb25zdCBGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQsIGNvbnN0IEJveCYg
bGF5b3V0Qm94LCBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IHVzZWRXaWR0aCkKIHsKICAgICBB
U1NFUlQobGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkgJiYgIWxheW91dEJveC5yZXBs
YWNlZCgpKTsKIApAQCAtNjk2LDMwICs2OTYsMzAgQEAgV2lkdGhBbmRNYXJnaW4gRm9ybWF0dGlu
Z0NvbnRleHQ6Okdlb21ldHJ5OjpmbG9hdGluZ05vblJlcGxhY2VkV2lkdGhBbmRNYXJnaW4oTGEK
ICAgICAvLyAyLiBJZiAnd2lkdGgnIGlzIGNvbXB1dGVkIGFzICdhdXRvJywgdGhlIHVzZWQgdmFs
dWUgaXMgdGhlICJzaHJpbmstdG8tZml0IiB3aWR0aC4KIAogICAgIGF1dG8mIGNvbnRhaW5pbmdC
bG9jayA9ICpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgYXV0byBjb250YWluaW5n
QmxvY2tXaWR0aCA9IGxheW91dENvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveChjb250YWlu
aW5nQmxvY2spLmNvbnRlbnRCb3hXaWR0aCgpOworICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lk
dGggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGNvbnRhaW5pbmdCbG9jayku
Y29udGVudEJveFdpZHRoKCk7CiAKICAgICAvLyAjMQotICAgIGF1dG8gbWFyZ2luID0gY29tcHV0
ZWROb25Db2xsYXBzZWRIb3Jpem9udGFsTWFyZ2luVmFsdWUobGF5b3V0Q29udGV4dCwgbGF5b3V0
Qm94KTsKKyAgICBhdXRvIG1hcmdpbiA9IGNvbXB1dGVkTm9uQ29sbGFwc2VkSG9yaXpvbnRhbE1h
cmdpblZhbHVlKGxheW91dFN0YXRlLCBsYXlvdXRCb3gpOwogICAgIC8vICMyCiAgICAgYXV0byB3
aWR0aCA9IGNvbXB1dGVkVmFsdWVJZk5vdEF1dG8odXNlZFdpZHRoID8gTGVuZ3RoIHsgdXNlZFdp
ZHRoLnZhbHVlKCksIEZpeGVkIH0gOiBsYXlvdXRCb3guc3R5bGUoKS5sb2dpY2FsV2lkdGgoKSwg
Y29udGFpbmluZ0Jsb2NrV2lkdGgpOwogICAgIGlmICghd2lkdGgpCi0gICAgICAgIHdpZHRoID0g
c2hyaW5rVG9GaXRXaWR0aChsYXlvdXRDb250ZXh0LCBmb3JtYXR0aW5nQ29udGV4dCwgbGF5b3V0
Qm94KTsKKyAgICAgICAgd2lkdGggPSBzaHJpbmtUb0ZpdFdpZHRoKGxheW91dFN0YXRlLCBmb3Jt
YXR0aW5nQ29udGV4dCwgbGF5b3V0Qm94KTsKIAogICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0
aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbV2lkdGhdW01hcmdpbl0gLT4gZmxvYXRpbmcg
bm9uLXJlcGxhY2VkIC0+IHdpZHRoKCIgPDwgKndpZHRoIDw8ICJweCkgbWFyZ2luKCIgPDwgbWFy
Z2luLmxlZnQgPDwgInB4LCAiIDw8IG1hcmdpbi5yaWdodCA8PCAicHgpIC0+IGxheW91dEJveCgi
IDw8ICZsYXlvdXRCb3ggPDwgIikiKTsKICAgICByZXR1cm4gV2lkdGhBbmRNYXJnaW4geyAqd2lk
dGgsIG1hcmdpbiwgbWFyZ2luIH07CiB9CiAKLUhlaWdodEFuZE1hcmdpbiBGb3JtYXR0aW5nQ29u
dGV4dDo6R2VvbWV0cnk6OmZsb2F0aW5nUmVwbGFjZWRIZWlnaHRBbmRNYXJnaW4oY29uc3QgTGF5
b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4dCwgY29uc3QgQm94JiBsYXlvdXRCb3gsIHN0ZDo6b3B0
aW9uYWw8TGF5b3V0VW5pdD4gdXNlZEhlaWdodCkKK0hlaWdodEFuZE1hcmdpbiBGb3JtYXR0aW5n
Q29udGV4dDo6R2VvbWV0cnk6OmZsb2F0aW5nUmVwbGFjZWRIZWlnaHRBbmRNYXJnaW4oY29uc3Qg
TGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBCb3gmIGxheW91dEJveCwgc3RkOjpvcHRp
b25hbDxMYXlvdXRVbml0PiB1c2VkSGVpZ2h0KQogewogICAgIEFTU0VSVChsYXlvdXRCb3guaXNG
bG9hdGluZ1Bvc2l0aW9uZWQoKSAmJiBsYXlvdXRCb3gucmVwbGFjZWQoKSk7CiAKICAgICAvLyAx
MC42LjIgSW5saW5lIHJlcGxhY2VkIGVsZW1lbnRzLCBibG9jay1sZXZlbCByZXBsYWNlZCBlbGVt
ZW50cyBpbiBub3JtYWwgZmxvdywgJ2lubGluZS1ibG9jaycKICAgICAvLyByZXBsYWNlZCBlbGVt
ZW50cyBpbiBub3JtYWwgZmxvdyBhbmQgZmxvYXRpbmcgcmVwbGFjZWQgZWxlbWVudHMKICAgICBM
T0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW0hlaWdo
dF1bTWFyZ2luXSAtPiBmbG9hdGluZyByZXBsYWNlZCAtPiByZWRpcmVjdGVkIHRvIGlubGluZSBy
ZXBsYWNlZCIpOwotICAgIHJldHVybiBpbmxpbmVSZXBsYWNlZEhlaWdodEFuZE1hcmdpbihsYXlv
dXRDb250ZXh0LCBsYXlvdXRCb3gsIHVzZWRIZWlnaHQpOworICAgIHJldHVybiBpbmxpbmVSZXBs
YWNlZEhlaWdodEFuZE1hcmdpbihsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94LCB1c2VkSGVpZ2h0KTsK
IH0KIAotV2lkdGhBbmRNYXJnaW4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpmbG9hdGlu
Z1JlcGxhY2VkV2lkdGhBbmRNYXJnaW4oY29uc3QgTGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4
dCwgY29uc3QgQm94JiBsYXlvdXRCb3gsIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gdXNlZFdp
ZHRoKQorV2lkdGhBbmRNYXJnaW4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpmbG9hdGlu
Z1JlcGxhY2VkV2lkdGhBbmRNYXJnaW4oY29uc3QgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBj
b25zdCBCb3gmIGxheW91dEJveCwgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiB1c2VkV2lkdGgp
CiB7CiAgICAgQVNTRVJUKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpICYmIGxheW91
dEJveC5yZXBsYWNlZCgpKTsKIApAQCAtNzI3LDQ5ICs3MjcsNDkgQEAgV2lkdGhBbmRNYXJnaW4g
Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpmbG9hdGluZ1JlcGxhY2VkV2lkdGhBbmRNYXJn
aW4oY29uc3QKICAgICAvLwogICAgIC8vIDEuIElmICdtYXJnaW4tbGVmdCcgb3IgJ21hcmdpbi1y
aWdodCcgYXJlIGNvbXB1dGVkIGFzICdhdXRvJywgdGhlaXIgdXNlZCB2YWx1ZSBpcyAnMCcuCiAg
ICAgLy8gMi4gVGhlIHVzZWQgdmFsdWUgb2YgJ3dpZHRoJyBpcyBkZXRlcm1pbmVkIGFzIGZvciBp
bmxpbmUgcmVwbGFjZWQgZWxlbWVudHMuCi0gICAgYXV0byBtYXJnaW4gPSBjb21wdXRlZE5vbkNv
bGxhcHNlZEhvcml6b250YWxNYXJnaW5WYWx1ZShsYXlvdXRDb250ZXh0LCBsYXlvdXRCb3gpOwor
ICAgIGF1dG8gbWFyZ2luID0gY29tcHV0ZWROb25Db2xsYXBzZWRIb3Jpem9udGFsTWFyZ2luVmFs
dWUobGF5b3V0U3RhdGUsIGxheW91dEJveCk7CiAKICAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0
dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW0hlaWdodF1bTWFyZ2luXSAtPiBmbG9hdGlu
ZyByZXBsYWNlZCAtPiByZWRpcmVjdGVkIHRvIGlubGluZSByZXBsYWNlZCIpOwotICAgIHJldHVy
biBpbmxpbmVSZXBsYWNlZFdpZHRoQW5kTWFyZ2luKGxheW91dENvbnRleHQsIGxheW91dEJveCwg
dXNlZFdpZHRoLCBtYXJnaW4ubGVmdCwgbWFyZ2luLnJpZ2h0KTsKKyAgICByZXR1cm4gaW5saW5l
UmVwbGFjZWRXaWR0aEFuZE1hcmdpbihsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94LCB1c2VkV2lkdGgs
IG1hcmdpbi5sZWZ0LCBtYXJnaW4ucmlnaHQpOwogfQogCi1WZXJ0aWNhbEdlb21ldHJ5IEZvcm1h
dHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93VmVydGljYWxHZW9tZXRyeShjb25zdCBM
YXlvdXRDb250ZXh0JiBsYXlvdXRDb250ZXh0LCBjb25zdCBCb3gmIGxheW91dEJveCwgc3RkOjpv
cHRpb25hbDxMYXlvdXRVbml0PiB1c2VkSGVpZ2h0KQorVmVydGljYWxHZW9tZXRyeSBGb3JtYXR0
aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd1ZlcnRpY2FsR2VvbWV0cnkoY29uc3QgTGF5
b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBCb3gmIGxheW91dEJveCwgc3RkOjpvcHRpb25h
bDxMYXlvdXRVbml0PiB1c2VkSGVpZ2h0KQogewogICAgIEFTU0VSVChsYXlvdXRCb3guaXNPdXRP
ZkZsb3dQb3NpdGlvbmVkKCkpOwogCiAgICAgaWYgKCFsYXlvdXRCb3gucmVwbGFjZWQoKSkKLSAg
ICAgICAgcmV0dXJuIG91dE9mRmxvd05vblJlcGxhY2VkVmVydGljYWxHZW9tZXRyeShsYXlvdXRD
b250ZXh0LCBsYXlvdXRCb3gsIHVzZWRIZWlnaHQpOwotICAgIHJldHVybiBvdXRPZkZsb3dSZXBs
YWNlZFZlcnRpY2FsR2VvbWV0cnkobGF5b3V0Q29udGV4dCwgbGF5b3V0Qm94LCB1c2VkSGVpZ2h0
KTsKKyAgICAgICAgcmV0dXJuIG91dE9mRmxvd05vblJlcGxhY2VkVmVydGljYWxHZW9tZXRyeShs
YXlvdXRTdGF0ZSwgbGF5b3V0Qm94LCB1c2VkSGVpZ2h0KTsKKyAgICByZXR1cm4gb3V0T2ZGbG93
UmVwbGFjZWRWZXJ0aWNhbEdlb21ldHJ5KGxheW91dFN0YXRlLCBsYXlvdXRCb3gsIHVzZWRIZWln
aHQpOwogfQogCi1Ib3Jpem9udGFsR2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5
OjpvdXRPZkZsb3dIb3Jpem9udGFsR2VvbWV0cnkoTGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4
dCwgY29uc3QgRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0LCBjb25zdCBCb3gm
IGxheW91dEJveCwgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiB1c2VkV2lkdGgpCitIb3Jpem9u
dGFsR2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dIb3Jpem9u
dGFsR2VvbWV0cnkoTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBGb3JtYXR0aW5nQ29u
dGV4dCYgZm9ybWF0dGluZ0NvbnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94LCBzdGQ6Om9wdGlv
bmFsPExheW91dFVuaXQ+IHVzZWRXaWR0aCkKIHsKICAgICBBU1NFUlQobGF5b3V0Qm94LmlzT3V0
T2ZGbG93UG9zaXRpb25lZCgpKTsKIAogICAgIGlmICghbGF5b3V0Qm94LnJlcGxhY2VkKCkpCi0g
ICAgICAgIHJldHVybiBvdXRPZkZsb3dOb25SZXBsYWNlZEhvcml6b250YWxHZW9tZXRyeShsYXlv
dXRDb250ZXh0LCBmb3JtYXR0aW5nQ29udGV4dCwgbGF5b3V0Qm94LCB1c2VkV2lkdGgpOwotICAg
IHJldHVybiBvdXRPZkZsb3dSZXBsYWNlZEhvcml6b250YWxHZW9tZXRyeShsYXlvdXRDb250ZXh0
LCBsYXlvdXRCb3gsIHVzZWRXaWR0aCk7CisgICAgICAgIHJldHVybiBvdXRPZkZsb3dOb25SZXBs
YWNlZEhvcml6b250YWxHZW9tZXRyeShsYXlvdXRTdGF0ZSwgZm9ybWF0dGluZ0NvbnRleHQsIGxh
eW91dEJveCwgdXNlZFdpZHRoKTsKKyAgICByZXR1cm4gb3V0T2ZGbG93UmVwbGFjZWRIb3Jpem9u
dGFsR2VvbWV0cnkobGF5b3V0U3RhdGUsIGxheW91dEJveCwgdXNlZFdpZHRoKTsKIH0KIAotSGVp
Z2h0QW5kTWFyZ2luIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6ZmxvYXRpbmdIZWlnaHRB
bmRNYXJnaW4oY29uc3QgTGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4dCwgY29uc3QgQm94JiBs
YXlvdXRCb3gsIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gdXNlZEhlaWdodCkKK0hlaWdodEFu
ZE1hcmdpbiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmZsb2F0aW5nSGVpZ2h0QW5kTWFy
Z2luKGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgQm94JiBsYXlvdXRCb3gs
IHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gdXNlZEhlaWdodCkKIHsKICAgICBBU1NFUlQobGF5
b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpOwogCiAgICAgaWYgKCFsYXlvdXRCb3gucmVw
bGFjZWQoKSkKLSAgICAgICAgcmV0dXJuIGNvbXBsaWNhdGVkQ2FzZXMobGF5b3V0Q29udGV4dCwg
bGF5b3V0Qm94LCB1c2VkSGVpZ2h0KTsKLSAgICByZXR1cm4gZmxvYXRpbmdSZXBsYWNlZEhlaWdo
dEFuZE1hcmdpbihsYXlvdXRDb250ZXh0LCBsYXlvdXRCb3gsIHVzZWRIZWlnaHQpOworICAgICAg
ICByZXR1cm4gY29tcGxpY2F0ZWRDYXNlcyhsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94LCB1c2VkSGVp
Z2h0KTsKKyAgICByZXR1cm4gZmxvYXRpbmdSZXBsYWNlZEhlaWdodEFuZE1hcmdpbihsYXlvdXRT
dGF0ZSwgbGF5b3V0Qm94LCB1c2VkSGVpZ2h0KTsKIH0KIAotV2lkdGhBbmRNYXJnaW4gRm9ybWF0
dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpmbG9hdGluZ1dpZHRoQW5kTWFyZ2luKExheW91dENvbnRl
eHQmIGxheW91dENvbnRleHQsIGNvbnN0IEZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29u
dGV4dCwgY29uc3QgQm94JiBsYXlvdXRCb3gsIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gdXNl
ZFdpZHRoKQorV2lkdGhBbmRNYXJnaW4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpmbG9h
dGluZ1dpZHRoQW5kTWFyZ2luKExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgRm9ybWF0
dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0LCBjb25zdCBCb3gmIGxheW91dEJveCwgc3Rk
OjpvcHRpb25hbDxMYXlvdXRVbml0PiB1c2VkV2lkdGgpCiB7CiAgICAgQVNTRVJUKGxheW91dEJv
eC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKTsKIAogICAgIGlmICghbGF5b3V0Qm94LnJlcGxhY2Vk
KCkpCi0gICAgICAgIHJldHVybiBmbG9hdGluZ05vblJlcGxhY2VkV2lkdGhBbmRNYXJnaW4obGF5
b3V0Q29udGV4dCwgZm9ybWF0dGluZ0NvbnRleHQsIGxheW91dEJveCwgdXNlZFdpZHRoKTsKLSAg
ICByZXR1cm4gZmxvYXRpbmdSZXBsYWNlZFdpZHRoQW5kTWFyZ2luKGxheW91dENvbnRleHQsIGxh
eW91dEJveCwgdXNlZFdpZHRoKTsKKyAgICAgICAgcmV0dXJuIGZsb2F0aW5nTm9uUmVwbGFjZWRX
aWR0aEFuZE1hcmdpbihsYXlvdXRTdGF0ZSwgZm9ybWF0dGluZ0NvbnRleHQsIGxheW91dEJveCwg
dXNlZFdpZHRoKTsKKyAgICByZXR1cm4gZmxvYXRpbmdSZXBsYWNlZFdpZHRoQW5kTWFyZ2luKGxh
eW91dFN0YXRlLCBsYXlvdXRCb3gsIHVzZWRXaWR0aCk7CiB9CiAKLUhlaWdodEFuZE1hcmdpbiBG
b3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmlubGluZVJlcGxhY2VkSGVpZ2h0QW5kTWFyZ2lu
KGNvbnN0IExheW91dENvbnRleHQmIGxheW91dENvbnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94
LCBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IHVzZWRIZWlnaHQpCitIZWlnaHRBbmRNYXJnaW4g
Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbmxpbmVSZXBsYWNlZEhlaWdodEFuZE1hcmdp
bihjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IEJveCYgbGF5b3V0Qm94LCBz
dGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IHVzZWRIZWlnaHQpCiB7CiAgICAgQVNTRVJUKChsYXlv
dXRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgfHwgbGF5b3V0Qm94LmlzRmxvYXRpbmdQb3Np
dGlvbmVkKCkgfHwgbGF5b3V0Qm94LmlzSW5GbG93KCkpICYmIGxheW91dEJveC5yZXBsYWNlZCgp
KTsKIApAQCAtNzg0LDcgKzc4NCw3IEBAIEhlaWdodEFuZE1hcmdpbiBGb3JtYXR0aW5nQ29udGV4
dDo6R2VvbWV0cnk6OmlubGluZVJlcGxhY2VkSGVpZ2h0QW5kTWFyZ2luKGNvbnN0CiAgICAgLy8g
ICAgdGhlIGhlaWdodCBvZiB0aGUgbGFyZ2VzdCByZWN0YW5nbGUgdGhhdCBoYXMgYSAyOjEgcmF0
aW8sIGhhcyBhIGhlaWdodCBub3QgZ3JlYXRlciB0aGFuIDE1MHB4LCBhbmQgaGFzIGEgd2lkdGgg
bm90IGdyZWF0ZXIgdGhhbiB0aGUgZGV2aWNlIHdpZHRoLgogCiAgICAgLy8gIzEKLSAgICBhdXRv
IG1hcmdpbiA9IGNvbXB1dGVkTm9uQ29sbGFwc2VkVmVydGljYWxNYXJnaW5WYWx1ZShsYXlvdXRD
b250ZXh0LCBsYXlvdXRCb3gpOworICAgIGF1dG8gbWFyZ2luID0gY29tcHV0ZWROb25Db2xsYXBz
ZWRWZXJ0aWNhbE1hcmdpblZhbHVlKGxheW91dFN0YXRlLCBsYXlvdXRCb3gpOwogCiAgICAgYXV0
byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKICAgICBhdXRvIHJlcGxhY2VkID0gbGF5b3V0
Qm94LnJlcGxhY2VkKCk7CkBAIC04MDEsNyArODAxLDcgQEAgSGVpZ2h0QW5kTWFyZ2luIEZvcm1h
dHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5saW5lUmVwbGFjZWRIZWlnaHRBbmRNYXJnaW4oY29u
c3QKICAgICAgICAgaGVpZ2h0ID0gcmVwbGFjZWQtPmludHJpbnNpY0hlaWdodCgpOwogICAgIH0g
ZWxzZSBpZiAoaGVpZ2h0SXNBdXRvICYmIHJlcGxhY2VkLT5oYXNJbnRyaW5zaWNSYXRpbygpKSB7
CiAgICAgICAgIC8vICMzCi0gICAgICAgIGF1dG8gdXNlZFdpZHRoID0gbGF5b3V0Q29udGV4dC5k
aXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCkud2lkdGgoKTsKKyAgICAgICAgYXV0byB1
c2VkV2lkdGggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCku
d2lkdGgoKTsKICAgICAgICAgaGVpZ2h0ID0gdXNlZFdpZHRoIC8gcmVwbGFjZWQtPmludHJpbnNp
Y1JhdGlvKCk7CiAgICAgfSBlbHNlIGlmIChoZWlnaHRJc0F1dG8gJiYgcmVwbGFjZWQtPmhhc0lu
dHJpbnNpY0hlaWdodCgpKSB7CiAgICAgICAgIC8vICM0CkBAIC04MTcsNyArODE3LDcgQEAgSGVp
Z2h0QW5kTWFyZ2luIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5saW5lUmVwbGFjZWRI
ZWlnaHRBbmRNYXJnaW4oY29uc3QKICAgICByZXR1cm4geyAqaGVpZ2h0LCBtYXJnaW4sIHsgfSB9
OwogfQogCi1XaWR0aEFuZE1hcmdpbiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmlubGlu
ZVJlcGxhY2VkV2lkdGhBbmRNYXJnaW4oY29uc3QgTGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4
dCwgY29uc3QgQm94JiBsYXlvdXRCb3gsCitXaWR0aEFuZE1hcmdpbiBGb3JtYXR0aW5nQ29udGV4
dDo6R2VvbWV0cnk6OmlubGluZVJlcGxhY2VkV2lkdGhBbmRNYXJnaW4oY29uc3QgTGF5b3V0U3Rh
dGUmIGxheW91dFN0YXRlLCBjb25zdCBCb3gmIGxheW91dEJveCwKICAgICBzdGQ6Om9wdGlvbmFs
PExheW91dFVuaXQ+IHVzZWRXaWR0aCwgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBwcmVjb21w
dXRlZE1hcmdpbkxlZnQsIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gcHJlY29tcHV0ZWRNYXJn
aW5SaWdodCkKIHsKICAgICBBU1NFUlQoKGxheW91dEJveC5pc091dE9mRmxvd1Bvc2l0aW9uZWQo
KSB8fCBsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSB8fCBsYXlvdXRCb3guaXNJbkZs
b3coKSkgJiYgbGF5b3V0Qm94LnJlcGxhY2VkKCkpOwpAQCAtODQyLDcgKzg0Miw3IEBAIFdpZHRo
QW5kTWFyZ2luIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5saW5lUmVwbGFjZWRXaWR0
aEFuZE1hcmdpbihjb25zdCBMCiAgICAgLy8gICAgSWYgMzAwcHggaXMgdG9vIHdpZGUgdG8gZml0
IHRoZSBkZXZpY2UsIFVBcyBzaG91bGQgdXNlIHRoZSB3aWR0aCBvZiB0aGUgbGFyZ2VzdCByZWN0
YW5nbGUgdGhhdCBoYXMgYSAyOjEgcmF0aW8gYW5kIGZpdHMgdGhlIGRldmljZSBpbnN0ZWFkLgog
CiAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKLSAgICBhdXRvJiBjb250YWlu
aW5nQmxvY2tEaXNwbGF5Qm94ID0gbGF5b3V0Q29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94
KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpOworICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9j
a0Rpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRC
b3guY29udGFpbmluZ0Jsb2NrKCkpOwogICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBj
b250YWluaW5nQmxvY2tEaXNwbGF5Qm94LndpZHRoKCk7CiAKICAgICBhdXRvIGNvbXB1dGVNYXJn
aW5SaWdodCA9IFsmXSgpIHsKQEAgLTg5OCw3ICs4OTgsNyBAQCBXaWR0aEFuZE1hcmdpbiBGb3Jt
YXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmlubGluZVJlcGxhY2VkV2lkdGhBbmRNYXJnaW4oY29u
c3QgTAogICAgIHJldHVybiB7ICp3aWR0aCwgeyBtYXJnaW5MZWZ0LCBtYXJnaW5SaWdodCB9LCB7
IG5vbkNvbXB1dGVkTWFyZ2luTGVmdCwgbm9uQ29tcHV0ZWRNYXJnaW5SaWdodCB9IH07CiB9CiAK
LUVkZ2VzIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRCb3JkZXIoY29uc3Qg
TGF5b3V0Q29udGV4dCYsIGNvbnN0IEJveCYgbGF5b3V0Qm94KQorRWRnZXMgRm9ybWF0dGluZ0Nv
bnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlZEJvcmRlcihjb25zdCBMYXlvdXRTdGF0ZSYsIGNvbnN0
IEJveCYgbGF5b3V0Qm94KQogewogICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7
CiAgICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwg
IltCb3JkZXJdIC0+IGxheW91dEJveDogIiA8PCAmbGF5b3V0Qm94KTsKQEAgLTkwOCwxMyArOTA4
LDEzIEBAIEVkZ2VzIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRCb3JkZXIo
Y29uc3QgTGF5b3V0Q29udGV4dCYsIGNvbnN0IEJvCiAgICAgfTsKIH0KIAotc3RkOjpvcHRpb25h
bDxFZGdlcz4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlZFBhZGRpbmcoY29u
c3QgTGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4dCwgY29uc3QgQm94JiBsYXlvdXRCb3gpCitz
dGQ6Om9wdGlvbmFsPEVkZ2VzPiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVk
UGFkZGluZyhjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IEJveCYgbGF5b3V0
Qm94KQogewogICAgIGlmICghbGF5b3V0Qm94LmlzUGFkZGluZ0FwcGxpY2FibGUoKSkKICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0
eWxlKCk7Ci0gICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGxheW91dENvbnRleHQuZGlz
cGxheUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKS5jb250ZW50
Qm94V2lkdGgoKTsKKyAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gbGF5b3V0U3RhdGUu
ZGlzcGxheUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKS5jb250
ZW50Qm94V2lkdGgoKTsKICAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlv
dXQsIHN0cmVhbSA8PCAiW1BhZGRpbmddIC0+IGxheW91dEJveDogIiA8PCAmbGF5b3V0Qm94KTsK
ICAgICByZXR1cm4gRWRnZXMgewogICAgICAgICB7IHZhbHVlRm9yTGVuZ3RoKHN0eWxlLnBhZGRp
bmdMZWZ0KCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSwgdmFsdWVGb3JMZW5ndGgoc3R5bGUucGFk
ZGluZ1JpZ2h0KCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSB9LApAQCAtOTIyLDEwICs5MjIsMTAg
QEAgc3RkOjpvcHRpb25hbDxFZGdlcz4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21w
dXRlZFBhZGRpbmcoY29uc3QgTGF5b3V0Q28KICAgICB9OwogfQogCi1Ib3Jpem9udGFsRWRnZXMg
Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlZE5vbkNvbGxhcHNlZEhvcml6b250
YWxNYXJnaW5WYWx1ZShjb25zdCBMYXlvdXRDb250ZXh0JiBsYXlvdXRDb250ZXh0LCBjb25zdCBC
b3gmIGxheW91dEJveCkKK0hvcml6b250YWxFZGdlcyBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0
cnk6OmNvbXB1dGVkTm9uQ29sbGFwc2VkSG9yaXpvbnRhbE1hcmdpblZhbHVlKGNvbnN0IExheW91
dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgQm94JiBsYXlvdXRCb3gpCiB7CiAgICAgYXV0byYg
c3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKLSAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRo
ID0gbGF5b3V0Q29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3guY29udGFp
bmluZ0Jsb2NrKCkpLmNvbnRlbnRCb3hXaWR0aCgpOworICAgIGF1dG8gY29udGFpbmluZ0Jsb2Nr
V2lkdGggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3guY29u
dGFpbmluZ0Jsb2NrKCkpLmNvbnRlbnRCb3hXaWR0aCgpOwogCiAgICAgYXV0byBtYXJnaW5MZWZ0
ID0gY29tcHV0ZWRWYWx1ZUlmTm90QXV0byhzdHlsZS5tYXJnaW5MZWZ0KCksIGNvbnRhaW5pbmdC
bG9ja1dpZHRoKS52YWx1ZV9vcihMYXlvdXRVbml0IHsgMCB9KTsKICAgICBhdXRvIG1hcmdpblJp
Z2h0ID0gY29tcHV0ZWRWYWx1ZUlmTm90QXV0byhzdHlsZS5tYXJnaW5SaWdodCgpLCBjb250YWlu
aW5nQmxvY2tXaWR0aCkudmFsdWVfb3IoTGF5b3V0VW5pdCB7IDAgfSk7CkBAIC05MzQsMTAgKzkz
NCwxMCBAQCBIb3Jpem9udGFsRWRnZXMgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21w
dXRlZE5vbkNvbGxhcHNlZEhvcml6b250YWxNYXJnaQogICAgIHJldHVybiB7IG1hcmdpbkxlZnQs
IG1hcmdpblJpZ2h0IH07CiB9CiAKLVZlcnRpY2FsRWRnZXMgRm9ybWF0dGluZ0NvbnRleHQ6Okdl
b21ldHJ5Ojpjb21wdXRlZE5vbkNvbGxhcHNlZFZlcnRpY2FsTWFyZ2luVmFsdWUoY29uc3QgTGF5
b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4dCwgY29uc3QgQm94JiBsYXlvdXRCb3gpCitWZXJ0aWNh
bEVkZ2VzIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWROb25Db2xsYXBzZWRW
ZXJ0aWNhbE1hcmdpblZhbHVlKGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3Qg
Qm94JiBsYXlvdXRCb3gpCiB7CiAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsK
LSAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gbGF5b3V0Q29udGV4dC5kaXNwbGF5Qm94
Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLmNvbnRlbnRCb3hXaWR0
aCgpOworICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5
Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLmNvbnRlbnRCb3hX
aWR0aCgpOwogCiAgICAgYXV0byBtYXJnaW5Ub3AgPSBjb21wdXRlZFZhbHVlSWZOb3RBdXRvKHN0
eWxlLm1hcmdpblRvcCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCkudmFsdWVfb3IoTGF5b3V0VW5p
dCB7IDAgfSk7CiAgICAgYXV0byBtYXJnaW5Cb3R0b20gPSBjb21wdXRlZFZhbHVlSWZOb3RBdXRv
KHN0eWxlLm1hcmdpbkJvdHRvbSgpLCBjb250YWluaW5nQmxvY2tXaWR0aCkudmFsdWVfb3IoTGF5
b3V0VW5pdCB7IDAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0
dGluZ1N0YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nU3RhdGUuY3Bw
CmluZGV4IGQ0ZTczOGYyMTk5NGFjMGU1MTFmMTEyZTEyM2ZmYzY4NmQ0MzY1ZjQuLjBjZDBhY2Jl
NzgwNjhjZWJhNGUwOWI2YmQ5NWZhYjI5YjZkYmYzY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9Gb3JtYXR0aW5nU3RhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9Gb3JtYXR0aW5nU3RhdGUuY3BwCkBAIC0zNSw4ICszNSw4IEBAIG5hbWVzcGFjZSBMYXlvdXQg
ewogCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoRm9ybWF0dGluZ1N0YXRlKTsKIAotRm9y
bWF0dGluZ1N0YXRlOjpGb3JtYXR0aW5nU3RhdGUoUmVmPEZsb2F0aW5nU3RhdGU+JiYgZmxvYXRp
bmdTdGF0ZSwgVHlwZSB0eXBlLCBjb25zdCBMYXlvdXRDb250ZXh0JiBsYXlvdXRDb250ZXh0KQot
ICAgIDogbV9sYXlvdXRDb250ZXh0KGxheW91dENvbnRleHQpCitGb3JtYXR0aW5nU3RhdGU6OkZv
cm1hdHRpbmdTdGF0ZShSZWY8RmxvYXRpbmdTdGF0ZT4mJiBmbG9hdGluZ1N0YXRlLCBUeXBlIHR5
cGUsIGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSkKKyAgICA6IG1fbGF5b3V0U3RhdGUo
bGF5b3V0U3RhdGUpCiAgICAgLCBtX2Zsb2F0aW5nU3RhdGUoV1RGTW92ZShmbG9hdGluZ1N0YXRl
KSkKICAgICAsIG1fdHlwZSh0eXBlKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L0Zvcm1hdHRpbmdTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdT
dGF0ZS5oCmluZGV4IDg4MGI0NTJhZmI2MmNkOWQzODY2M2M2NGNmNzA5Y2RmMTQyZDA1NGIuLjBh
Mzk3MjMyZGEyZjRmZTFmZWJiYjY3YzBmOWJhOTAyZWJjNGJlYzggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nU3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvRm9ybWF0dGluZ1N0YXRlLmgKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJGbG9h
dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiRm9ybWF0dGluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJM
YXlvdXRCb3guaCIKLSNpbmNsdWRlICJMYXlvdXRDb250ZXh0LmgiCisjaW5jbHVkZSAiTGF5b3V0
Rm9ybWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgogI2luY2x1ZGUgPHd0
Zi9Jc29NYWxsb2MuaD4KIApAQCAtNjAsOSArNjAsOSBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoK
ICAgICBlbnVtIGNsYXNzIFR5cGUgeyBCbG9jaywgSW5saW5lIH07Ci0gICAgRm9ybWF0dGluZ1N0
YXRlKFJlZjxGbG9hdGluZ1N0YXRlPiYmLCBUeXBlLCBjb25zdCBMYXlvdXRDb250ZXh0Jik7Cisg
ICAgRm9ybWF0dGluZ1N0YXRlKFJlZjxGbG9hdGluZ1N0YXRlPiYmLCBUeXBlLCBjb25zdCBMYXlv
dXRTdGF0ZSYpOwogCi0gICAgY29uc3QgTGF5b3V0Q29udGV4dCYgbV9sYXlvdXRDb250ZXh0Owor
ICAgIGNvbnN0IExheW91dFN0YXRlJiBtX2xheW91dFN0YXRlOwogCiBwcml2YXRlOgogICAgIFJl
ZjxGbG9hdGluZ1N0YXRlPiBtX2Zsb2F0aW5nU3RhdGU7CkBAIC03Myw3ICs3Myw3IEBAIHByaXZh
dGU6CiBpbmxpbmUgdm9pZCBGb3JtYXR0aW5nU3RhdGU6OnNldEluc3RyaW5zaWNXaWR0aENvbnN0
cmFpbnRzKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBGb3JtYXR0aW5nQ29udGV4dDo6SW5zdHJpbnNp
Y1dpZHRoQ29uc3RyYWludHMgaW5zdHJpbnNpY1dpZHRoQ29uc3RyYWludHMpCiB7CiAgICAgQVNT
RVJUKCFtX2luc3RyaW5zaWNXaWR0aENvbnN0cmFpbnRzLmNvbnRhaW5zKCZsYXlvdXRCb3gpKTsK
LSAgICBBU1NFUlQoJm1fbGF5b3V0Q29udGV4dC5mb3JtYXR0aW5nU3RhdGVGb3JCb3gobGF5b3V0
Qm94KSA9PSB0aGlzKTsKKyAgICBBU1NFUlQoJm1fbGF5b3V0U3RhdGUuZm9ybWF0dGluZ1N0YXRl
Rm9yQm94KGxheW91dEJveCkgPT0gdGhpcyk7CiAgICAgbV9pbnN0cmluc2ljV2lkdGhDb25zdHJh
aW50cy5zZXQoJmxheW91dEJveCwgaW5zdHJpbnNpY1dpZHRoQ29uc3RyYWludHMpOwogfQogCkBA
IC04NCw3ICs4NCw3IEBAIGlubGluZSB2b2lkIEZvcm1hdHRpbmdTdGF0ZTo6Y2xlYXJJbnN0cmlu
c2ljV2lkdGhDb25zdHJhaW50cyhjb25zdCBCb3gmIGxheW91dEJvCiAKIGlubGluZSBzdGQ6Om9w
dGlvbmFsPEZvcm1hdHRpbmdDb250ZXh0OjpJbnN0cmluc2ljV2lkdGhDb25zdHJhaW50cz4gRm9y
bWF0dGluZ1N0YXRlOjppbnN0cmluc2ljV2lkdGhDb25zdHJhaW50cyhjb25zdCBCb3gmIGxheW91
dEJveCkgY29uc3QKIHsKLSAgICBBU1NFUlQoJm1fbGF5b3V0Q29udGV4dC5mb3JtYXR0aW5nU3Rh
dGVGb3JCb3gobGF5b3V0Qm94KSA9PSB0aGlzKTsKKyAgICBBU1NFUlQoJm1fbGF5b3V0U3RhdGUu
Zm9ybWF0dGluZ1N0YXRlRm9yQm94KGxheW91dEJveCkgPT0gdGhpcyk7CiAgICAgYXV0byBpdGVy
YXRvciA9IG1faW5zdHJpbnNpY1dpZHRoQ29uc3RyYWludHMuZmluZCgmbGF5b3V0Qm94KTsKICAg
ICBpZiAoaXRlcmF0b3IgPT0gbV9pbnN0cmluc2ljV2lkdGhDb25zdHJhaW50cy5lbmQoKSkKICAg
ICAgICAgcmV0dXJuIHsgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9MYXlv
dXRDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9MYXlvdXRDb250ZXh0LmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk5NmE3ZGM3NDZjZTc0ZWYwZmRmZDFjNmEz
OGM2NWIyMGFkZWVlMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvTGF5b3V0Q29udGV4dC5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwxNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJMYXlvdXRDb250ZXh0LmgiCi0KLSNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdf
Q09OVEVYVCkKLQotI2luY2x1ZGUgIkJsb2NrRm9ybWF0dGluZ0NvbnRleHQuaCIKLSNpbmNsdWRl
ICJCbG9ja0Zvcm1hdHRpbmdTdGF0ZS5oIgotI2luY2x1ZGUgIkJsb2NrSW52YWxpZGF0aW9uLmgi
Ci0jaW5jbHVkZSAiRGlzcGxheUJveC5oIgotI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdDb250
ZXh0LmgiCi0jaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ1N0YXRlLmgiCi0jaW5jbHVkZSAiSW5s
aW5lSW52YWxpZGF0aW9uLmgiCi0jaW5jbHVkZSAiSW52YWxpZGF0aW9uLmgiCi0jaW5jbHVkZSAi
TGF5b3V0Qm94LmgiCi0jaW5jbHVkZSAiTGF5b3V0Q29udGFpbmVyLmgiCi0jaW5jbHVkZSA8d3Rm
L0lzb01hbGxvY0lubGluZXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIExh
eW91dCB7Ci0KLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChMYXlvdXRDb250ZXh0KTsKLQot
TGF5b3V0Q29udGV4dDo6TGF5b3V0Q29udGV4dCgpCi17Ci19Ci0KLXZvaWQgTGF5b3V0Q29udGV4
dDo6aW5pdGlhbGl6ZVJvb3QoY29uc3QgQ29udGFpbmVyJiByb290LCBjb25zdCBMYXlvdXRTaXpl
JiBjb250YWluZXJTaXplKQotewotICAgIEFTU0VSVChyb290LmVzdGFibGlzaGVzRm9ybWF0dGlu
Z0NvbnRleHQoKSk7Ci0KLSAgICBtX3Jvb3QgPSBtYWtlV2Vha1B0cihyb290KTsKLSAgICBhdXRv
JiBkaXNwbGF5Qm94ID0gZGlzcGxheUJveEZvckxheW91dEJveChyb290KTsKLQotICAgIC8vIEZJ
WE1FOiBtX3Jvb3QgY291bGQgdmVyeSB3ZWxsIGJlIGEgZm9ybWF0dGluZyBjb250ZXh0IHJvb3Qg
d2l0aCBhbmNlc3RvcnMgYW5kIHJlc29sdmFibGUgYm9yZGVyIGFuZCBwYWRkaW5nIChhcyBvcHBv
c2VkIHRvIHRoZSB0b3Btb3N0IHJvb3QpCi0gICAgZGlzcGxheUJveC5zZXRIb3Jpem9udGFsTWFy
Z2luKHsgfSk7Ci0gICAgZGlzcGxheUJveC5zZXRIb3Jpem9udGFsTm9uQ29tcHV0ZWRNYXJnaW4o
eyB9KTsKLSAgICBkaXNwbGF5Qm94LnNldFZlcnRpY2FsTWFyZ2luKHsgfSk7Ci0gICAgZGlzcGxh
eUJveC5zZXRWZXJ0aWNhbE5vbkNvbGxhcHNlZE1hcmdpbih7IH0pOwotICAgIGRpc3BsYXlCb3gu
c2V0Qm9yZGVyKHsgfSk7Ci0gICAgZGlzcGxheUJveC5zZXRQYWRkaW5nKHsgfSk7Ci0gICAgZGlz
cGxheUJveC5zZXRDb250ZW50Qm94SGVpZ2h0KGNvbnRhaW5lclNpemUuaGVpZ2h0KCkpOwotICAg
IGRpc3BsYXlCb3guc2V0Q29udGVudEJveFdpZHRoKGNvbnRhaW5lclNpemUud2lkdGgoKSk7Ci0g
ICAgZGlzcGxheUJveC5zZXRUb3BMZWZ0KHsgfSk7Ci0KLSAgICBtX2Zvcm1hdHRpbmdDb250ZXh0
Um9vdExpc3RGb3JMYXlvdXQuYWRkKCZyb290KTsKLX0KLQotdm9pZCBMYXlvdXRDb250ZXh0Ojp1
cGRhdGVMYXlvdXQoKQotewotICAgIEFTU0VSVCghbV9mb3JtYXR0aW5nQ29udGV4dFJvb3RMaXN0
Rm9yTGF5b3V0LmlzRW1wdHkoKSk7Ci0gICAgZm9yIChhdXRvKiBsYXlvdXRSb290IDogbV9mb3Jt
YXR0aW5nQ29udGV4dFJvb3RMaXN0Rm9yTGF5b3V0KQotICAgICAgICBsYXlvdXRGb3JtYXR0aW5n
Q29udGV4dFN1YnRyZWUoKmxheW91dFJvb3QpOwotICAgIG1fZm9ybWF0dGluZ0NvbnRleHRSb290
TGlzdEZvckxheW91dC5jbGVhcigpOwotfQotCi12b2lkIExheW91dENvbnRleHQ6OmxheW91dEZv
cm1hdHRpbmdDb250ZXh0U3VidHJlZShjb25zdCBCb3gmIGxheW91dFJvb3QpCi17Ci0gICAgUkVM
RUFTRV9BU1NFUlQobGF5b3V0Um9vdC5lc3RhYmxpc2hlc0Zvcm1hdHRpbmdDb250ZXh0KCkpOwot
ICAgIGF1dG8gZm9ybWF0dGluZ0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29udGV4dChsYXlv
dXRSb290KTsKLSAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSBjcmVhdGVGb3JtYXR0aW5nU3Rh
dGVGb3JGb3JtYXR0aW5nUm9vdElmTmVlZGVkKGxheW91dFJvb3QpOwotICAgIGZvcm1hdHRpbmdD
b250ZXh0LT5sYXlvdXQoKnRoaXMsIGZvcm1hdHRpbmdTdGF0ZSk7Ci0gICAgZm9ybWF0dGluZ0Nv
bnRleHQtPmxheW91dE91dE9mRmxvd0Rlc2NlbmRhbnRzKCp0aGlzLCBsYXlvdXRSb290KTsKLX0K
LQotRGlzcGxheTo6Qm94JiBMYXlvdXRDb250ZXh0OjpkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGNv
bnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAotewotICAgIHJldHVybiAqbV9sYXlvdXRUb0Rpc3Bs
YXlCb3guZW5zdXJlKCZsYXlvdXRCb3gsIFsmbGF5b3V0Qm94XSB7Ci0gICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPERpc3BsYXk6OkJveD4obGF5b3V0Qm94LnN0eWxlKCkpOwotICAgIH0p
Lml0ZXJhdG9yLT52YWx1ZTsKLX0KLQotdm9pZCBMYXlvdXRDb250ZXh0OjpzdHlsZUNoYW5nZWQo
Y29uc3QgQm94JiBsYXlvdXRCb3gsIFN0eWxlRGlmZiBzdHlsZURpZmYpCi17Ci0gICAgYXV0byYg
Zm9ybWF0dGluZ1N0YXRlID0gZm9ybWF0dGluZ1N0YXRlRm9yQm94KGxheW91dEJveCk7Ci0gICAg
Y29uc3QgQ29udGFpbmVyKiBpbnZhbGlkYXRpb25Sb290ID0gbnVsbHB0cjsKLSAgICBpZiAoaXM8
QmxvY2tGb3JtYXR0aW5nU3RhdGU+KGZvcm1hdHRpbmdTdGF0ZSkpCi0gICAgICAgIGludmFsaWRh
dGlvblJvb3QgPSBCbG9ja0ludmFsaWRhdGlvbjo6aW52YWxpZGF0ZShsYXlvdXRCb3gsIHN0eWxl
RGlmZiwgKnRoaXMsIGRvd25jYXN0PEJsb2NrRm9ybWF0dGluZ1N0YXRlPihmb3JtYXR0aW5nU3Rh
dGUpKS5yb290OwotICAgIGVsc2UgaWYgKGlzPElubGluZUZvcm1hdHRpbmdTdGF0ZT4oZm9ybWF0
dGluZ1N0YXRlKSkKLSAgICAgICAgaW52YWxpZGF0aW9uUm9vdCA9IElubGluZUludmFsaWRhdGlv
bjo6aW52YWxpZGF0ZShsYXlvdXRCb3gsIHN0eWxlRGlmZiwgKnRoaXMsIGRvd25jYXN0PElubGlu
ZUZvcm1hdHRpbmdTdGF0ZT4oZm9ybWF0dGluZ1N0YXRlKSkucm9vdDsKLSAgICBlbHNlCi0gICAg
ICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7Ci0gICAgQVNTRVJUKGludmFsaWRhdGlv
blJvb3QpOwotICAgIG1fZm9ybWF0dGluZ0NvbnRleHRSb290TGlzdEZvckxheW91dC5hZGRWb2lk
KGludmFsaWRhdGlvblJvb3QpOwotfQotCi12b2lkIExheW91dENvbnRleHQ6Om1hcmtOZWVkc1Vw
ZGF0ZShjb25zdCBCb3gmLCBPcHRpb25TZXQ8VXBkYXRlVHlwZT4pCi17Ci19Ci0KLUZvcm1hdHRp
bmdTdGF0ZSYgTGF5b3V0Q29udGV4dDo6Zm9ybWF0dGluZ1N0YXRlRm9yQm94KGNvbnN0IEJveCYg
bGF5b3V0Qm94KSBjb25zdAotewotICAgIGF1dG8mIHJvb3QgPSBsYXlvdXRCb3guZm9ybWF0dGlu
Z0NvbnRleHRSb290KCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9mb3JtYXR0aW5nU3RhdGVzLmNv
bnRhaW5zKCZyb290KSk7Ci0gICAgcmV0dXJuICptX2Zvcm1hdHRpbmdTdGF0ZXMuZ2V0KCZyb290
KTsKLX0KLQotRm9ybWF0dGluZ1N0YXRlJiBMYXlvdXRDb250ZXh0Ojplc3RhYmxpc2hlZEZvcm1h
dHRpbmdTdGF0ZShjb25zdCBCb3gmIGZvcm1hdHRpbmdSb290KSBjb25zdAotewotICAgIEFTU0VS
VChmb3JtYXR0aW5nUm9vdC5lc3RhYmxpc2hlc0Zvcm1hdHRpbmdDb250ZXh0KCkpOwotICAgIFJF
TEVBU0VfQVNTRVJUKG1fZm9ybWF0dGluZ1N0YXRlcy5jb250YWlucygmZm9ybWF0dGluZ1Jvb3Qp
KTsKLSAgICByZXR1cm4gKm1fZm9ybWF0dGluZ1N0YXRlcy5nZXQoJmZvcm1hdHRpbmdSb290KTsK
LX0KLQotRm9ybWF0dGluZ1N0YXRlJiBMYXlvdXRDb250ZXh0OjpjcmVhdGVGb3JtYXR0aW5nU3Rh
dGVGb3JGb3JtYXR0aW5nUm9vdElmTmVlZGVkKGNvbnN0IEJveCYgZm9ybWF0dGluZ1Jvb3QpCi17
Ci0gICAgQVNTRVJUKGZvcm1hdHRpbmdSb290LmVzdGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQo
KSk7Ci0KLSAgICBpZiAoZm9ybWF0dGluZ1Jvb3QuZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dCgpKSB7Ci0gICAgICAgIHJldHVybiAqbV9mb3JtYXR0aW5nU3RhdGVzLmVuc3VyZSgm
Zm9ybWF0dGluZ1Jvb3QsIFsmXSB7Ci0KLSAgICAgICAgICAgIC8vIElmIHRoZSBibG9jayBjb250
YWluZXIgYm94IHRoYXQgaW5pdGlhdGVzIHRoaXMgaW5saW5lIGZvcm1hdHRpbmcgY29udGV4dCBh
bHNvIGVzdGFibGlzaGVzIGEgYmxvY2sgY29udGV4dCwgdGhlIGZsb2F0cyBvdXRzaWRlIG9mIHRo
ZSBmb3JtYXR0aW5nIHJvb3QKLSAgICAgICAgICAgIC8vIHNob3VsZCBub3QgaW50ZXJmZXJlIHdp
dGggdGhlIGNvbnRlbnQgaW5zaWRlLgotICAgICAgICAgICAgLy8gPGRpdiBzdHlsZT0iZmxvYXQ6
IGxlZnQiPjwvZGl2PjxkaXYgc3R5bGU9Im92ZXJmbG93OiBoaWRkZW4iPiA8LSBpcyBhIG5vbi1p
bnRydXNpdmUgZmxvYXQsIGJlY2F1c2Ugb3ZlcmZsb3c6IGhpZGRlbiB0cmlnZ2VycyBuZXcgYmxv
Y2sgZm9ybWF0dGluZyBjb250ZXh0LjwvZGl2PgotICAgICAgICAgICAgaWYgKGZvcm1hdHRpbmdS
b290LmVzdGFibGlzaGVzQmxvY2tGb3JtYXR0aW5nQ29udGV4dCgpKQotICAgICAgICAgICAgICAg
IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPElubGluZUZvcm1hdHRpbmdTdGF0ZT4oRmxvYXRpbmdT
dGF0ZTo6Y3JlYXRlKCp0aGlzLCBmb3JtYXR0aW5nUm9vdCksICp0aGlzKTsKLQotICAgICAgICAg
ICAgLy8gT3RoZXJ3aXNlLCB0aGUgZm9ybWF0dGluZyBjb250ZXh0IGluaGVyaXRzIHRoZSBmbG9h
dHMgZnJvbSB0aGUgcGFyZW50IGZvcm1hdHRpbmcgY29udGV4dC4KLSAgICAgICAgICAgIC8vIEZp
bmQgdGhlIGZvcm1hdHRpbmcgc3RhdGUgaW4gd2hpY2ggdGhpcyBmb3JtYXR0aW5nIHJvb3QgbGl2
ZXMsIG5vdCB0aGUgb25lIGl0IGNyZWF0ZXMgYW5kIHVzZSBpdHMgZmxvYXRpbmcgc3RhdGUuCi0g
ICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxJbmxpbmVGb3JtYXR0aW5nU3RhdGU+
KGZvcm1hdHRpbmdTdGF0ZUZvckJveChmb3JtYXR0aW5nUm9vdCkuZmxvYXRpbmdTdGF0ZSgpLCAq
dGhpcyk7Ci0gICAgICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKLSAgICB9Ci0KLSAgICBpZiAoZm9y
bWF0dGluZ1Jvb3QuZXN0YWJsaXNoZXNCbG9ja0Zvcm1hdHRpbmdDb250ZXh0KCkpIHsKLSAgICAg
ICAgcmV0dXJuICptX2Zvcm1hdHRpbmdTdGF0ZXMuZW5zdXJlKCZmb3JtYXR0aW5nUm9vdCwgWyZd
IHsKLQotICAgICAgICAgICAgLy8gQmxvY2sgZm9ybWF0dGluZyBjb250ZXh0IGFsd2F5cyBlc3Rh
Ymxpc2hlcyBhIG5ldyBmbG9hdGluZyBzdGF0ZS4KLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1h
a2VfdW5pcXVlPEJsb2NrRm9ybWF0dGluZ1N0YXRlPihGbG9hdGluZ1N0YXRlOjpjcmVhdGUoKnRo
aXMsIGZvcm1hdHRpbmdSb290KSwgKnRoaXMpOwotICAgICAgICB9KS5pdGVyYXRvci0+dmFsdWU7
Ci0gICAgfQotCi0gICAgQ1JBU0goKTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEZvcm1hdHRpbmdD
b250ZXh0PiBMYXlvdXRDb250ZXh0Ojpmb3JtYXR0aW5nQ29udGV4dChjb25zdCBCb3gmIGZvcm1h
dHRpbmdDb250ZXh0Um9vdCkgY29uc3QKLXsKLSAgICBpZiAoZm9ybWF0dGluZ0NvbnRleHRSb290
LmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0NvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuIHN0
ZDo6bWFrZV91bmlxdWU8SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ+KGZvcm1hdHRpbmdDb250ZXh0
Um9vdCk7Ci0KLSAgICBpZiAoZm9ybWF0dGluZ0NvbnRleHRSb290LmVzdGFibGlzaGVzQmxvY2tG
b3JtYXR0aW5nQ29udGV4dCgpKQotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxCbG9j
a0Zvcm1hdHRpbmdDb250ZXh0Pihmb3JtYXR0aW5nQ29udGV4dFJvb3QpOwotCi0gICAgQVNTRVJU
X05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotfQotfQot
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9MYXlvdXRDb250ZXh0
LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvTGF5b3V0Q29udGV4dC5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBjNTg3NWVjOGExZWJiMDg1ZGQ1Yzk5MTM5YzI4YTdmYmNmYjA3OTk4
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9MYXlvdXRDb250ZXh0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKExBWU9VVF9GT1JN
QVRUSU5HX0NPTlRFWFQpCi0KLSNpbmNsdWRlICJGb3JtYXR0aW5nQ29udGV4dC5oIgotI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3
dGYvSXNvTWFsbG9jLmg+Ci0jaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLSNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKLWNsYXNz
IFJlbmRlclZpZXc7Ci0jZW5kaWYKLQotbmFtZXNwYWNlIERpc3BsYXkgewotY2xhc3MgQm94Owot
fQotCi1uYW1lc3BhY2UgTGF5b3V0IHsKLQotZW51bSBjbGFzcyBTdHlsZURpZmY7Ci1jbGFzcyBC
b3g7Ci1jbGFzcyBDb250YWluZXI7Ci1jbGFzcyBGb3JtYXR0aW5nU3RhdGU7Ci0KLS8vIExheW91
dENvbnRleHQgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBsYXlvdXQuIEl0IHRha2VzIGEgKGZvcm1h
dHRpbmcgcm9vdCljb250YWluZXIgd2hpY2ggYWN0cyBhcyB0aGUgcm9vdCBvZiB0aGUgbGF5b3V0
IGNvbnRleHQuCi0vLyBMYXlvdXRDb250ZXh0OjpsYXlvdXQoKSBnZW5lcmF0ZXMgdGhlIGRpc3Bs
YXkgdHJlZSBmb3IgdGhlIHJvb3QgY29udGFpbmVyJ3Mgc3VidHJlZSAoaXQgZG9lcyBub3QgcnVu
IGxheW91dCBvbiB0aGUgcm9vdCB0aG91Z2gpLgotLy8gTm90ZSwgd2hpbGUgdGhlIHJvb3QgY29u
dGFpbmVyIGlzIHN1cHBwb3NlZCB0byBiZSB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBpbml0aWFs
IGxheW91dCwgaXQgZG9lcyBub3QgbmVjZXNzYXJpbHkgbmVlZCB0byBiZSB0aGUgZW50cnkgcG9p
bnQgb2YgYW55Ci0vLyBzdWJzZXF1ZW50IGxheW91dHMgKHN1YnRyZWUgbGF5b3V0KS4gQSBub24t
aW5pdGlhbCwgc3VidHJlZSBsYXlvdXQgY291bGQgYmUgaW5pdGlhdGVkIG9uIG11bHRpcGxlIGZv
cm1hdHRpbmcgY29udGV4dHMuCi0vLyBFYWNoIGZvcm1hdHRpbmcgY29udGV4dCBoYXMgYW4gZW50
cnkgcG9pbnQgZm9yIGxheW91dCwgd2hpY2ggcG90ZW5pdGFsbHkgbWVhbnMgbXVsdGlwbGUgZW50
cnkgcG9pbnRzIHBlciBsYXlvdXQgZnJhbWUuCi0vLyBMYXlvdXRDb250ZXh0IGFsc28gaG9sZHMg
dGhlIGZvcm1hdHRpbmcgc3RhdGVzLiBUaGV5IGNhY2hlIGZvcm1hdHRpbmcgY29udGV4dCBzcGVj
aWZpYyBkYXRhIHRvIGVuYWJsZSBwZXJmb3JtYW50IGluY3JlbWVudGFsIGxheW91dHMuCi1jbGFz
cyBMYXlvdXRDb250ZXh0IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKExheW91dENvbnRl
eHQpOwotcHVibGljOgotICAgIExheW91dENvbnRleHQoKTsKLQotICAgIHZvaWQgaW5pdGlhbGl6
ZVJvb3QoY29uc3QgQ29udGFpbmVyJiwgY29uc3QgTGF5b3V0U2l6ZSYpOwotICAgIHZvaWQgdXBk
YXRlTGF5b3V0KCk7Ci0gICAgdm9pZCBzdHlsZUNoYW5nZWQoY29uc3QgQm94JiwgU3R5bGVEaWZm
KTsKLSAgICB2b2lkIHNldEluUXVpcmtzTW9kZShib29sIGluUXVpcmtzTW9kZSkgeyBtX2luUXVp
cmtzTW9kZSA9IGluUXVpcmtzTW9kZTsgfQotCi0gICAgZW51bSBjbGFzcyBVcGRhdGVUeXBlIHsK
LSAgICAgICAgT3ZlcmZsb3cgPSAxIDw8IDAsCi0gICAgICAgIFBvc2l0aW9uID0gMSA8PCAxLAot
ICAgICAgICBTaXplICAgICA9IDEgPDwgMiwKLSAgICAgICAgQWxsICAgICAgPSBPdmVyZmxvdyB8
IFBvc2l0aW9uIHwgU2l6ZQotICAgIH07Ci0gICAgdm9pZCBtYXJrTmVlZHNVcGRhdGUoY29uc3Qg
Qm94JiwgT3B0aW9uU2V0PFVwZGF0ZVR5cGU+KTsKLSAgICBib29sIG5lZWRzVXBkYXRlKGNvbnN0
IEJveCYpIGNvbnN0OwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPEZvcm1hdHRpbmdDb250ZXh0PiBm
b3JtYXR0aW5nQ29udGV4dChjb25zdCBCb3gmIGZvcm1hdHRpbmdDb250ZXh0Um9vdCkgY29uc3Q7
Ci0KLSAgICBGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZUZvckJveChjb25zdCBCb3gm
KSBjb25zdDsKLSAgICBGb3JtYXR0aW5nU3RhdGUmIGVzdGFibGlzaGVkRm9ybWF0dGluZ1N0YXRl
KGNvbnN0IEJveCYgZm9ybWF0dGluZ1Jvb3QpIGNvbnN0OwotICAgIEZvcm1hdHRpbmdTdGF0ZSYg
Y3JlYXRlRm9ybWF0dGluZ1N0YXRlRm9yRm9ybWF0dGluZ1Jvb3RJZk5lZWRlZChjb25zdCBCb3gm
IGZvcm1hdHRpbmdSb290KTsKLQotICAgIERpc3BsYXk6OkJveCYgZGlzcGxheUJveEZvckxheW91
dEJveChjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNEaXNwbGF5Qm94
KGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdCB7IHJldHVybiBtX2xheW91dFRvRGlzcGxheUJv
eC5jb250YWlucygmbGF5b3V0Qm94KTsgfQotCi0gICAgYm9vbCBpblF1aXJrc01vZGUoKSBjb25z
dCB7IHJldHVybiBtX2luUXVpcmtzTW9kZTsgfQotICAgIC8vIEZvciB0ZXN0aW5nIHB1cnBvc2Vz
IG9ubHkKLSAgICB2b2lkIHZlcmlmeUFuZE91dHB1dE1pc21hdGNoaW5nTGF5b3V0VHJlZShjb25z
dCBSZW5kZXJWaWV3JikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBsYXlvdXRGb3JtYXR0
aW5nQ29udGV4dFN1YnRyZWUoY29uc3QgQm94Jik7Ci0KLSAgICBXZWFrUHRyPGNvbnN0IENvbnRh
aW5lcj4gbV9yb290OwotICAgIEhhc2hTZXQ8Y29uc3QgQ29udGFpbmVyKj4gbV9mb3JtYXR0aW5n
Q29udGV4dFJvb3RMaXN0Rm9yTGF5b3V0OwotICAgIEhhc2hNYXA8Y29uc3QgQm94Kiwgc3RkOjp1
bmlxdWVfcHRyPEZvcm1hdHRpbmdTdGF0ZT4+IG1fZm9ybWF0dGluZ1N0YXRlczsKLSAgICBtdXRh
YmxlIEhhc2hNYXA8Y29uc3QgQm94Kiwgc3RkOjp1bmlxdWVfcHRyPERpc3BsYXk6OkJveD4+IG1f
bGF5b3V0VG9EaXNwbGF5Qm94OwotICAgIGJvb2wgbV9pblF1aXJrc01vZGUgeyBmYWxzZSB9Owot
fTsKLQotfQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvTGF5
b3V0Rm9ybWF0dGluZ1N0YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9MYXlvdXRGb3Jt
YXR0aW5nU3RhdGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVmYTAxODYyMzhhMjJhMDYwM2UwMmY0ZWQ4YjE1
MDk1OWMwOWE1N2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvTGF5
b3V0Rm9ybWF0dGluZ1N0YXRlLmNwcApAQCAtMCwwICsxLDE3NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMYXlvdXRGb3JtYXR0aW5nU3RhdGUuaCIKKwor
I2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisjaW5jbHVkZSAiQmxvY2tG
b3JtYXR0aW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIkJsb2NrRm9ybWF0dGluZ1N0YXRlLmgiCisj
aW5jbHVkZSAiQmxvY2tJbnZhbGlkYXRpb24uaCIKKyNpbmNsdWRlICJEaXNwbGF5Qm94LmgiCisj
aW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbmxpbmVGb3Jt
YXR0aW5nU3RhdGUuaCIKKyNpbmNsdWRlICJJbmxpbmVJbnZhbGlkYXRpb24uaCIKKyNpbmNsdWRl
ICJJbnZhbGlkYXRpb24uaCIKKyNpbmNsdWRlICJMYXlvdXRCb3guaCIKKyNpbmNsdWRlICJMYXlv
dXRDb250YWluZXIuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTGF5b3V0IHsKKworV1RGX01BS0VfSVNPX0FMTE9D
QVRFRF9JTVBMKExheW91dFN0YXRlKTsKKworTGF5b3V0U3RhdGU6OkxheW91dFN0YXRlKCkKK3sK
K30KKwordm9pZCBMYXlvdXRTdGF0ZTo6aW5pdGlhbGl6ZVJvb3QoY29uc3QgQ29udGFpbmVyJiBy
b290LCBjb25zdCBMYXlvdXRTaXplJiBjb250YWluZXJTaXplKQoreworICAgIEFTU0VSVChyb290
LmVzdGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQoKSk7CisKKyAgICBtX3Jvb3QgPSBtYWtlV2Vh
a1B0cihyb290KTsKKyAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZGlzcGxheUJveEZvckxheW91dEJv
eChyb290KTsKKworICAgIC8vIEZJWE1FOiBtX3Jvb3QgY291bGQgdmVyeSB3ZWxsIGJlIGEgZm9y
bWF0dGluZyBjb250ZXh0IHJvb3Qgd2l0aCBhbmNlc3RvcnMgYW5kIHJlc29sdmFibGUgYm9yZGVy
IGFuZCBwYWRkaW5nIChhcyBvcHBvc2VkIHRvIHRoZSB0b3Btb3N0IHJvb3QpCisgICAgZGlzcGxh
eUJveC5zZXRIb3Jpem9udGFsTWFyZ2luKHsgfSk7CisgICAgZGlzcGxheUJveC5zZXRIb3Jpem9u
dGFsTm9uQ29tcHV0ZWRNYXJnaW4oeyB9KTsKKyAgICBkaXNwbGF5Qm94LnNldFZlcnRpY2FsTWFy
Z2luKHsgfSk7CisgICAgZGlzcGxheUJveC5zZXRWZXJ0aWNhbE5vbkNvbGxhcHNlZE1hcmdpbih7
IH0pOworICAgIGRpc3BsYXlCb3guc2V0Qm9yZGVyKHsgfSk7CisgICAgZGlzcGxheUJveC5zZXRQ
YWRkaW5nKHsgfSk7CisgICAgZGlzcGxheUJveC5zZXRDb250ZW50Qm94SGVpZ2h0KGNvbnRhaW5l
clNpemUuaGVpZ2h0KCkpOworICAgIGRpc3BsYXlCb3guc2V0Q29udGVudEJveFdpZHRoKGNvbnRh
aW5lclNpemUud2lkdGgoKSk7CisgICAgZGlzcGxheUJveC5zZXRUb3BMZWZ0KHsgfSk7CisKKyAg
ICBtX2Zvcm1hdHRpbmdDb250ZXh0Um9vdExpc3RGb3JMYXlvdXQuYWRkKCZyb290KTsKK30KKwor
dm9pZCBMYXlvdXRTdGF0ZTo6dXBkYXRlTGF5b3V0KCkKK3sKKyAgICBBU1NFUlQoIW1fZm9ybWF0
dGluZ0NvbnRleHRSb290TGlzdEZvckxheW91dC5pc0VtcHR5KCkpOworICAgIGZvciAoYXV0byog
bGF5b3V0Um9vdCA6IG1fZm9ybWF0dGluZ0NvbnRleHRSb290TGlzdEZvckxheW91dCkKKyAgICAg
ICAgbGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRTdWJ0cmVlKCpsYXlvdXRSb290KTsKKyAgICBtX2Zv
cm1hdHRpbmdDb250ZXh0Um9vdExpc3RGb3JMYXlvdXQuY2xlYXIoKTsKK30KKwordm9pZCBMYXlv
dXRTdGF0ZTo6bGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRTdWJ0cmVlKGNvbnN0IEJveCYgbGF5b3V0
Um9vdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChsYXlvdXRSb290LmVzdGFibGlzaGVzRm9ybWF0
dGluZ0NvbnRleHQoKSk7CisgICAgYXV0byBmb3JtYXR0aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1h
dHRpbmdDb250ZXh0KGxheW91dFJvb3QpOworICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IGNy
ZWF0ZUZvcm1hdHRpbmdTdGF0ZUZvckZvcm1hdHRpbmdSb290SWZOZWVkZWQobGF5b3V0Um9vdCk7
CisgICAgZm9ybWF0dGluZ0NvbnRleHQtPmxheW91dCgqdGhpcywgZm9ybWF0dGluZ1N0YXRlKTsK
KyAgICBmb3JtYXR0aW5nQ29udGV4dC0+bGF5b3V0T3V0T2ZGbG93RGVzY2VuZGFudHMoKnRoaXMs
IGxheW91dFJvb3QpOworfQorCitEaXNwbGF5OjpCb3gmIExheW91dFN0YXRlOjpkaXNwbGF5Qm94
Rm9yTGF5b3V0Qm94KGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAoreworICAgIHJldHVybiAq
bV9sYXlvdXRUb0Rpc3BsYXlCb3guZW5zdXJlKCZsYXlvdXRCb3gsIFsmbGF5b3V0Qm94XSB7Cisg
ICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPERpc3BsYXk6OkJveD4obGF5b3V0Qm94LnN0
eWxlKCkpOworICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKK30KKwordm9pZCBMYXlvdXRTdGF0ZTo6
c3R5bGVDaGFuZ2VkKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBTdHlsZURpZmYgc3R5bGVEaWZmKQor
eworICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IGZvcm1hdHRpbmdTdGF0ZUZvckJveChsYXlv
dXRCb3gpOworICAgIGNvbnN0IENvbnRhaW5lciogaW52YWxpZGF0aW9uUm9vdCA9IG51bGxwdHI7
CisgICAgaWYgKGlzPEJsb2NrRm9ybWF0dGluZ1N0YXRlPihmb3JtYXR0aW5nU3RhdGUpKQorICAg
ICAgICBpbnZhbGlkYXRpb25Sb290ID0gQmxvY2tJbnZhbGlkYXRpb246OmludmFsaWRhdGUobGF5
b3V0Qm94LCBzdHlsZURpZmYsICp0aGlzLCBkb3duY2FzdDxCbG9ja0Zvcm1hdHRpbmdTdGF0ZT4o
Zm9ybWF0dGluZ1N0YXRlKSkucm9vdDsKKyAgICBlbHNlIGlmIChpczxJbmxpbmVGb3JtYXR0aW5n
U3RhdGU+KGZvcm1hdHRpbmdTdGF0ZSkpCisgICAgICAgIGludmFsaWRhdGlvblJvb3QgPSBJbmxp
bmVJbnZhbGlkYXRpb246OmludmFsaWRhdGUobGF5b3V0Qm94LCBzdHlsZURpZmYsICp0aGlzLCBk
b3duY2FzdDxJbmxpbmVGb3JtYXR0aW5nU3RhdGU+KGZvcm1hdHRpbmdTdGF0ZSkpLnJvb3Q7Cisg
ICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOworICAgIEFTU0VS
VChpbnZhbGlkYXRpb25Sb290KTsKKyAgICBtX2Zvcm1hdHRpbmdDb250ZXh0Um9vdExpc3RGb3JM
YXlvdXQuYWRkVm9pZChpbnZhbGlkYXRpb25Sb290KTsKK30KKwordm9pZCBMYXlvdXRTdGF0ZTo6
bWFya05lZWRzVXBkYXRlKGNvbnN0IEJveCYsIE9wdGlvblNldDxVcGRhdGVUeXBlPikKK3sKK30K
KworRm9ybWF0dGluZ1N0YXRlJiBMYXlvdXRTdGF0ZTo6Zm9ybWF0dGluZ1N0YXRlRm9yQm94KGNv
bnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAoreworICAgIGF1dG8mIHJvb3QgPSBsYXlvdXRCb3gu
Zm9ybWF0dGluZ0NvbnRleHRSb290KCk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9mb3JtYXR0aW5n
U3RhdGVzLmNvbnRhaW5zKCZyb290KSk7CisgICAgcmV0dXJuICptX2Zvcm1hdHRpbmdTdGF0ZXMu
Z2V0KCZyb290KTsKK30KKworRm9ybWF0dGluZ1N0YXRlJiBMYXlvdXRTdGF0ZTo6ZXN0YWJsaXNo
ZWRGb3JtYXR0aW5nU3RhdGUoY29uc3QgQm94JiBmb3JtYXR0aW5nUm9vdCkgY29uc3QKK3sKKyAg
ICBBU1NFUlQoZm9ybWF0dGluZ1Jvb3QuZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4dCgpKTsK
KyAgICBSRUxFQVNFX0FTU0VSVChtX2Zvcm1hdHRpbmdTdGF0ZXMuY29udGFpbnMoJmZvcm1hdHRp
bmdSb290KSk7CisgICAgcmV0dXJuICptX2Zvcm1hdHRpbmdTdGF0ZXMuZ2V0KCZmb3JtYXR0aW5n
Um9vdCk7Cit9CisKK0Zvcm1hdHRpbmdTdGF0ZSYgTGF5b3V0U3RhdGU6OmNyZWF0ZUZvcm1hdHRp
bmdTdGF0ZUZvckZvcm1hdHRpbmdSb290SWZOZWVkZWQoY29uc3QgQm94JiBmb3JtYXR0aW5nUm9v
dCkKK3sKKyAgICBBU1NFUlQoZm9ybWF0dGluZ1Jvb3QuZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29u
dGV4dCgpKTsKKworICAgIGlmIChmb3JtYXR0aW5nUm9vdC5lc3RhYmxpc2hlc0lubGluZUZvcm1h
dHRpbmdDb250ZXh0KCkpIHsKKyAgICAgICAgcmV0dXJuICptX2Zvcm1hdHRpbmdTdGF0ZXMuZW5z
dXJlKCZmb3JtYXR0aW5nUm9vdCwgWyZdIHsKKworICAgICAgICAgICAgLy8gSWYgdGhlIGJsb2Nr
IGNvbnRhaW5lciBib3ggdGhhdCBpbml0aWF0ZXMgdGhpcyBpbmxpbmUgZm9ybWF0dGluZyBjb250
ZXh0IGFsc28gZXN0YWJsaXNoZXMgYSBibG9jayBjb250ZXh0LCB0aGUgZmxvYXRzIG91dHNpZGUg
b2YgdGhlIGZvcm1hdHRpbmcgcm9vdAorICAgICAgICAgICAgLy8gc2hvdWxkIG5vdCBpbnRlcmZl
cmUgd2l0aCB0aGUgY29udGVudCBpbnNpZGUuCisgICAgICAgICAgICAvLyA8ZGl2IHN0eWxlPSJm
bG9hdDogbGVmdCI+PC9kaXY+PGRpdiBzdHlsZT0ib3ZlcmZsb3c6IGhpZGRlbiI+IDwtIGlzIGEg
bm9uLWludHJ1c2l2ZSBmbG9hdCwgYmVjYXVzZSBvdmVyZmxvdzogaGlkZGVuIHRyaWdnZXJzIG5l
dyBibG9jayBmb3JtYXR0aW5nIGNvbnRleHQuPC9kaXY+CisgICAgICAgICAgICBpZiAoZm9ybWF0
dGluZ1Jvb3QuZXN0YWJsaXNoZXNCbG9ja0Zvcm1hdHRpbmdDb250ZXh0KCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8SW5saW5lRm9ybWF0dGluZ1N0YXRlPihGbG9h
dGluZ1N0YXRlOjpjcmVhdGUoKnRoaXMsIGZvcm1hdHRpbmdSb290KSwgKnRoaXMpOworCisgICAg
ICAgICAgICAvLyBPdGhlcndpc2UsIHRoZSBmb3JtYXR0aW5nIGNvbnRleHQgaW5oZXJpdHMgdGhl
IGZsb2F0cyBmcm9tIHRoZSBwYXJlbnQgZm9ybWF0dGluZyBjb250ZXh0LgorICAgICAgICAgICAg
Ly8gRmluZCB0aGUgZm9ybWF0dGluZyBzdGF0ZSBpbiB3aGljaCB0aGlzIGZvcm1hdHRpbmcgcm9v
dCBsaXZlcywgbm90IHRoZSBvbmUgaXQgY3JlYXRlcyBhbmQgdXNlIGl0cyBmbG9hdGluZyBzdGF0
ZS4KKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPElubGluZUZvcm1hdHRpbmdT
dGF0ZT4oZm9ybWF0dGluZ1N0YXRlRm9yQm94KGZvcm1hdHRpbmdSb290KS5mbG9hdGluZ1N0YXRl
KCksICp0aGlzKTsKKyAgICAgICAgfSkuaXRlcmF0b3ItPnZhbHVlOworICAgIH0KKworICAgIGlm
IChmb3JtYXR0aW5nUm9vdC5lc3RhYmxpc2hlc0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQoKSkgewor
ICAgICAgICByZXR1cm4gKm1fZm9ybWF0dGluZ1N0YXRlcy5lbnN1cmUoJmZvcm1hdHRpbmdSb290
LCBbJl0geworCisgICAgICAgICAgICAvLyBCbG9jayBmb3JtYXR0aW5nIGNvbnRleHQgYWx3YXlz
IGVzdGFibGlzaGVzIGEgbmV3IGZsb2F0aW5nIHN0YXRlLgorICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bWFrZV91bmlxdWU8QmxvY2tGb3JtYXR0aW5nU3RhdGU+KEZsb2F0aW5nU3RhdGU6OmNyZWF0
ZSgqdGhpcywgZm9ybWF0dGluZ1Jvb3QpLCAqdGhpcyk7CisgICAgICAgIH0pLml0ZXJhdG9yLT52
YWx1ZTsKKyAgICB9CisKKyAgICBDUkFTSCgpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8Rm9ybWF0
dGluZ0NvbnRleHQ+IExheW91dFN0YXRlOjpmb3JtYXR0aW5nQ29udGV4dChjb25zdCBCb3gmIGZv
cm1hdHRpbmdDb250ZXh0Um9vdCkgY29uc3QKK3sKKyAgICBpZiAoZm9ybWF0dGluZ0NvbnRleHRS
b290LmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0NvbnRleHQoKSkKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bWFrZV91bmlxdWU8SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ+KGZvcm1hdHRpbmdDb250
ZXh0Um9vdCk7CisKKyAgICBpZiAoZm9ybWF0dGluZ0NvbnRleHRSb290LmVzdGFibGlzaGVzQmxv
Y2tGb3JtYXR0aW5nQ29udGV4dCgpKQorICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0Pihmb3JtYXR0aW5nQ29udGV4dFJvb3QpOworCisgICAgQVNT
RVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworfQor
fQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9MYXlvdXRGb3Jt
YXR0aW5nU3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9MYXlvdXRGb3JtYXR0aW5nU3Rh
dGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi40Njc0YjYxOGM5OWYwZTg2MGIzOWJmYTMwNzRhMjAyNzVlNDdkOWRk
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0xheW91dEZvcm1hdHRp
bmdTdGF0ZS5oCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUgIkZvcm1h
dHRpbmdDb250ZXh0LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvT3B0
aW9uU2V0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIEVOQUJMRShMQVlPVVRfRk9S
TUFUVElOR19DT05URVhUKQorY2xhc3MgUmVuZGVyVmlldzsKKyNlbmRpZgorCituYW1lc3BhY2Ug
RGlzcGxheSB7CitjbGFzcyBCb3g7Cit9CisKK25hbWVzcGFjZSBMYXlvdXQgeworCitlbnVtIGNs
YXNzIFN0eWxlRGlmZjsKK2NsYXNzIEJveDsKK2NsYXNzIENvbnRhaW5lcjsKK2NsYXNzIEZvcm1h
dHRpbmdTdGF0ZTsKKworLy8gTGF5b3V0U3RhdGUgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBsYXlv
dXQuIEl0IHRha2VzIGEgKGZvcm1hdHRpbmcgcm9vdCljb250YWluZXIgd2hpY2ggYWN0cyBhcyB0
aGUgcm9vdCBvZiB0aGUgbGF5b3V0IGNvbnRleHQuCisvLyBMYXlvdXRTdGF0ZTo6bGF5b3V0KCkg
Z2VuZXJhdGVzIHRoZSBkaXNwbGF5IHRyZWUgZm9yIHRoZSByb290IGNvbnRhaW5lcidzIHN1YnRy
ZWUgKGl0IGRvZXMgbm90IHJ1biBsYXlvdXQgb24gdGhlIHJvb3QgdGhvdWdoKS4KKy8vIE5vdGUs
IHdoaWxlIHRoZSByb290IGNvbnRhaW5lciBpcyBzdXBwcG9zZWQgdG8gYmUgdGhlIGVudHJ5IHBv
aW50IGZvciB0aGUgaW5pdGlhbCBsYXlvdXQsIGl0IGRvZXMgbm90IG5lY2Vzc2FyaWx5IG5lZWQg
dG8gYmUgdGhlIGVudHJ5IHBvaW50IG9mIGFueQorLy8gc3Vic2VxdWVudCBsYXlvdXRzIChzdWJ0
cmVlIGxheW91dCkuIEEgbm9uLWluaXRpYWwsIHN1YnRyZWUgbGF5b3V0IGNvdWxkIGJlIGluaXRp
YXRlZCBvbiBtdWx0aXBsZSBmb3JtYXR0aW5nIGNvbnRleHRzLgorLy8gRWFjaCBmb3JtYXR0aW5n
IGNvbnRleHQgaGFzIGFuIGVudHJ5IHBvaW50IGZvciBsYXlvdXQsIHdoaWNoIHBvdGVuaXRhbGx5
IG1lYW5zIG11bHRpcGxlIGVudHJ5IHBvaW50cyBwZXIgbGF5b3V0IGZyYW1lLgorLy8gTGF5b3V0
U3RhdGUgYWxzbyBob2xkcyB0aGUgZm9ybWF0dGluZyBzdGF0ZXMuIFRoZXkgY2FjaGUgZm9ybWF0
dGluZyBjb250ZXh0IHNwZWNpZmljIGRhdGEgdG8gZW5hYmxlIHBlcmZvcm1hbnQgaW5jcmVtZW50
YWwgbGF5b3V0cy4KK2NsYXNzIExheW91dFN0YXRlIHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NB
VEVEKExheW91dFN0YXRlKTsKK3B1YmxpYzoKKyAgICBMYXlvdXRTdGF0ZSgpOworCisgICAgdm9p
ZCBpbml0aWFsaXplUm9vdChjb25zdCBDb250YWluZXImLCBjb25zdCBMYXlvdXRTaXplJik7Cisg
ICAgdm9pZCB1cGRhdGVMYXlvdXQoKTsKKyAgICB2b2lkIHN0eWxlQ2hhbmdlZChjb25zdCBCb3gm
LCBTdHlsZURpZmYpOworICAgIHZvaWQgc2V0SW5RdWlya3NNb2RlKGJvb2wgaW5RdWlya3NNb2Rl
KSB7IG1faW5RdWlya3NNb2RlID0gaW5RdWlya3NNb2RlOyB9CisKKyAgICBlbnVtIGNsYXNzIFVw
ZGF0ZVR5cGUgeworICAgICAgICBPdmVyZmxvdyA9IDEgPDwgMCwKKyAgICAgICAgUG9zaXRpb24g
PSAxIDw8IDEsCisgICAgICAgIFNpemUgICAgID0gMSA8PCAyLAorICAgICAgICBBbGwgICAgICA9
IE92ZXJmbG93IHwgUG9zaXRpb24gfCBTaXplCisgICAgfTsKKyAgICB2b2lkIG1hcmtOZWVkc1Vw
ZGF0ZShjb25zdCBCb3gmLCBPcHRpb25TZXQ8VXBkYXRlVHlwZT4pOworICAgIGJvb2wgbmVlZHNV
cGRhdGUoY29uc3QgQm94JikgY29uc3Q7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Rm9ybWF0dGlu
Z0NvbnRleHQ+IGZvcm1hdHRpbmdDb250ZXh0KGNvbnN0IEJveCYgZm9ybWF0dGluZ0NvbnRleHRS
b290KSBjb25zdDsKKworICAgIEZvcm1hdHRpbmdTdGF0ZSYgZm9ybWF0dGluZ1N0YXRlRm9yQm94
KGNvbnN0IEJveCYpIGNvbnN0OworICAgIEZvcm1hdHRpbmdTdGF0ZSYgZXN0YWJsaXNoZWRGb3Jt
YXR0aW5nU3RhdGUoY29uc3QgQm94JiBmb3JtYXR0aW5nUm9vdCkgY29uc3Q7CisgICAgRm9ybWF0
dGluZ1N0YXRlJiBjcmVhdGVGb3JtYXR0aW5nU3RhdGVGb3JGb3JtYXR0aW5nUm9vdElmTmVlZGVk
KGNvbnN0IEJveCYgZm9ybWF0dGluZ1Jvb3QpOworCisgICAgRGlzcGxheTo6Qm94JiBkaXNwbGF5
Qm94Rm9yTGF5b3V0Qm94KGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdDsKKyAgICBib29sIGhh
c0Rpc3BsYXlCb3goY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0
VG9EaXNwbGF5Qm94LmNvbnRhaW5zKCZsYXlvdXRCb3gpOyB9CisKKyAgICBib29sIGluUXVpcmtz
TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5RdWlya3NNb2RlOyB9CisgICAgLy8gRm9yIHRlc3Rp
bmcgcHVycG9zZXMgb25seQorICAgIHZvaWQgdmVyaWZ5QW5kT3V0cHV0TWlzbWF0Y2hpbmdMYXlv
dXRUcmVlKGNvbnN0IFJlbmRlclZpZXcmKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB2b2lkIGxh
eW91dEZvcm1hdHRpbmdDb250ZXh0U3VidHJlZShjb25zdCBCb3gmKTsKKworICAgIFdlYWtQdHI8
Y29uc3QgQ29udGFpbmVyPiBtX3Jvb3Q7CisgICAgSGFzaFNldDxjb25zdCBDb250YWluZXIqPiBt
X2Zvcm1hdHRpbmdDb250ZXh0Um9vdExpc3RGb3JMYXlvdXQ7CisgICAgSGFzaE1hcDxjb25zdCBC
b3gqLCBzdGQ6OnVuaXF1ZV9wdHI8Rm9ybWF0dGluZ1N0YXRlPj4gbV9mb3JtYXR0aW5nU3RhdGVz
OworICAgIG11dGFibGUgSGFzaE1hcDxjb25zdCBCb3gqLCBzdGQ6OnVuaXF1ZV9wdHI8RGlzcGxh
eTo6Qm94Pj4gbV9sYXlvdXRUb0Rpc3BsYXlCb3g7CisgICAgYm9vbCBtX2luUXVpcmtzTW9kZSB7
IGZhbHNlIH07Cit9OworCit9Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9WZXJpZmljYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L1ZlcmlmaWNh
dGlvbi5jcHAKaW5kZXggZWUwZTA5NDM4N2FkYWM0MTAyZmM4MDYxZmRhN2ZlYjcxNmE1ZjMwZS4u
MGJiYTk3YjdjMzlhMTdiMTA2Mjc0MzhiODM5ZGVmZTcwZjRkZTRiZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L1ZlcmlmaWNhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L1ZlcmlmaWNhdGlvbi5jcHAKQEAgLTI0LDcgKzI0LDcgQEAKICAqLwogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTGF5b3V0Q29udGV4dC5oIgorI2luY2x1ZGUgIkxheW91
dEZvcm1hdHRpbmdTdGF0ZS5oIgogCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRF
WFQpCiAKQEAgLTQ4LDcgKzQ4LDcgQEAgc3RhdGljIGJvb2wgYXJlRXNzZW50aWFsbHlFcXVhbChm
bG9hdCBhLCBMYXlvdXRVbml0IGIpCiAgICAgcmV0dXJuIDo6YWJzKGEgLSBiLnRvRmxvYXQoKSkg
PD0gNCAqIExheW91dFVuaXQ6OmVwc2lsb24oKTsKIH0KIAotc3RhdGljIGJvb2wgb3V0cHV0TWlz
bWF0Y2hpbmdTaW1wbGVMaW5lSW5mb3JtYXRpb25JZk5lZWRlZChUZXh0U3RyZWFtJiBzdHJlYW0s
IGNvbnN0IExheW91dENvbnRleHQmIGxheW91dENvbnRleHQsIGNvbnN0IFJlbmRlckJsb2NrRmxv
dyYgYmxvY2tGbG93LCBjb25zdCBDb250YWluZXImIGlubGluZUZvcm1hdHRpbmdSb290KQorc3Rh
dGljIGJvb2wgb3V0cHV0TWlzbWF0Y2hpbmdTaW1wbGVMaW5lSW5mb3JtYXRpb25JZk5lZWRlZChU
ZXh0U3RyZWFtJiBzdHJlYW0sIGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3Qg
UmVuZGVyQmxvY2tGbG93JiBibG9ja0Zsb3csIGNvbnN0IENvbnRhaW5lciYgaW5saW5lRm9ybWF0
dGluZ1Jvb3QpCiB7CiAgICAgYXV0byogbGluZUxheW91dERhdGEgPSBibG9ja0Zsb3cuc2ltcGxl
TGluZUxheW91dCgpOwogICAgIGlmICghbGluZUxheW91dERhdGEpIHsKQEAgLTU2LDcgKzU2LDcg
QEAgc3RhdGljIGJvb2wgb3V0cHV0TWlzbWF0Y2hpbmdTaW1wbGVMaW5lSW5mb3JtYXRpb25JZk5l
ZWRlZChUZXh0U3RyZWFtJiBzdHJlYW0sIGMKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
Ci0gICAgYXV0byYgaW5saW5lRm9ybWF0dGluZ1N0YXRlID0gbGF5b3V0Q29udGV4dC5lc3RhYmxp
c2hlZEZvcm1hdHRpbmdTdGF0ZShpbmxpbmVGb3JtYXR0aW5nUm9vdCk7CisgICAgYXV0byYgaW5s
aW5lRm9ybWF0dGluZ1N0YXRlID0gbGF5b3V0U3RhdGUuZXN0YWJsaXNoZWRGb3JtYXR0aW5nU3Rh
dGUoaW5saW5lRm9ybWF0dGluZ1Jvb3QpOwogICAgIEFTU0VSVChpczxJbmxpbmVGb3JtYXR0aW5n
U3RhdGU+KGlubGluZUZvcm1hdHRpbmdTdGF0ZSkpOwogICAgIGF1dG8mIGlubGluZVJ1bkxpc3Qg
PSBkb3duY2FzdDxJbmxpbmVGb3JtYXR0aW5nU3RhdGU+KGlubGluZUZvcm1hdHRpbmdTdGF0ZSku
aW5saW5lUnVucygpOwogCkBAIC05NCw5ICs5NCw5IEBAIHN0YXRpYyBib29sIGNoZWNrRm9yTWF0
Y2hpbmdUZXh0UnVucyhjb25zdCBJbmxpbmVSdW4mIGlubGluZVJ1biwgZmxvYXQgbG9naWNhbExl
CiAgICAgcmV0dXJuIGFyZUVzc2VudGlhbGx5RXF1YWwobG9naWNhbExlZnQsIGlubGluZVJ1bi5s
b2dpY2FsTGVmdCgpKSAmJiBhcmVFc3NlbnRpYWxseUVxdWFsKGxvZ2ljYWxSaWdodCwgaW5saW5l
UnVuLmxvZ2ljYWxSaWdodCgpKSAmJiBzdGFydCA9PSBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+
c3RhcnQoKSAmJiAoZW5kID09IChpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+c3RhcnQoKSArIGlu
bGluZVJ1bi50ZXh0Q29udGV4dCgpLT5sZW5ndGgoKSkpOwogfQogCi1zdGF0aWMgYm9vbCBvdXRw
dXRNaXNtYXRjaGluZ0NvbXBsZXhMaW5lSW5mb3JtYXRpb25JZk5lZWRlZChUZXh0U3RyZWFtJiBz
dHJlYW0sIGNvbnN0IExheW91dENvbnRleHQmIGxheW91dENvbnRleHQsIGNvbnN0IFJlbmRlckJs
b2NrRmxvdyYgYmxvY2tGbG93LCBjb25zdCBDb250YWluZXImIGlubGluZUZvcm1hdHRpbmdSb290
KQorc3RhdGljIGJvb2wgb3V0cHV0TWlzbWF0Y2hpbmdDb21wbGV4TGluZUluZm9ybWF0aW9uSWZO
ZWVkZWQoVGV4dFN0cmVhbSYgc3RyZWFtLCBjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUs
IGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgYmxvY2tGbG93LCBjb25zdCBDb250YWluZXImIGlubGlu
ZUZvcm1hdHRpbmdSb290KQogewotICAgIGF1dG8mIGlubGluZUZvcm1hdHRpbmdTdGF0ZSA9IGxh
eW91dENvbnRleHQuZXN0YWJsaXNoZWRGb3JtYXR0aW5nU3RhdGUoaW5saW5lRm9ybWF0dGluZ1Jv
b3QpOworICAgIGF1dG8mIGlubGluZUZvcm1hdHRpbmdTdGF0ZSA9IGxheW91dFN0YXRlLmVzdGFi
bGlzaGVkRm9ybWF0dGluZ1N0YXRlKGlubGluZUZvcm1hdHRpbmdSb290KTsKICAgICBBU1NFUlQo
aXM8SW5saW5lRm9ybWF0dGluZ1N0YXRlPihpbmxpbmVGb3JtYXR0aW5nU3RhdGUpKTsKICAgICBh
dXRvJiBpbmxpbmVSdW5MaXN0ID0gZG93bmNhc3Q8SW5saW5lRm9ybWF0dGluZ1N0YXRlPihpbmxp
bmVGb3JtYXR0aW5nU3RhdGUpLmlubGluZVJ1bnMoKTsKIApAQCAtMTc4LDcgKzE3OCw3IEBAIHN0
YXRpYyBib29sIG91dHB1dE1pc21hdGNoaW5nQ29tcGxleExpbmVJbmZvcm1hdGlvbklmTmVlZGVk
KFRleHRTdHJlYW0mIHN0cmVhbSwKICAgICByZXR1cm4gbWlzbWF0Y2hlZDsKIH0KIAotc3RhdGlj
IGJvb2wgb3V0cHV0TWlzbWF0Y2hpbmdCbG9ja0JveEluZm9ybWF0aW9uSWZOZWVkZWQoVGV4dFN0
cmVhbSYgc3RyZWFtLCBjb25zdCBMYXlvdXRDb250ZXh0JiBjb250ZXh0LCBjb25zdCBSZW5kZXJC
b3gmIHJlbmRlcmVyLCBjb25zdCBCb3gmIGxheW91dEJveCkKK3N0YXRpYyBib29sIG91dHB1dE1p
c21hdGNoaW5nQmxvY2tCb3hJbmZvcm1hdGlvbklmTmVlZGVkKFRleHRTdHJlYW0mIHN0cmVhbSwg
Y29uc3QgTGF5b3V0U3RhdGUmIGNvbnRleHQsIGNvbnN0IFJlbmRlckJveCYgcmVuZGVyZXIsIGNv
bnN0IEJveCYgbGF5b3V0Qm94KQogewogICAgIGJvb2wgZmlyc3RNaXNtYXRjaGluZ1JlY3QgPSB0
cnVlOwogICAgIGF1dG8gb3V0cHV0UmVjdCA9IFsmXSAoY29uc3QgU3RyaW5nJiBwcmVmaXgsIGNv
bnN0IExheW91dFJlY3QmIHJlbmRlcmVyUmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgbGF5b3V0UmVj
dCkgewpAQCAtMjQwLDcgKzI0MCw3IEBAIHN0YXRpYyBib29sIG91dHB1dE1pc21hdGNoaW5nQmxv
Y2tCb3hJbmZvcm1hdGlvbklmTmVlZGVkKFRleHRTdHJlYW0mIHN0cmVhbSwgY29uCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgYm9vbCB2ZXJpZnlBbmRPdXRwdXRTdWJ0cmVlKFRleHRT
dHJlYW0mIHN0cmVhbSwgY29uc3QgTGF5b3V0Q29udGV4dCYgY29udGV4dCwgY29uc3QgUmVuZGVy
Qm94JiByZW5kZXJlciwgY29uc3QgQm94JiBsYXlvdXRCb3gpCitzdGF0aWMgYm9vbCB2ZXJpZnlB
bmRPdXRwdXRTdWJ0cmVlKFRleHRTdHJlYW0mIHN0cmVhbSwgY29uc3QgTGF5b3V0U3RhdGUmIGNv
bnRleHQsIGNvbnN0IFJlbmRlckJveCYgcmVuZGVyZXIsIGNvbnN0IEJveCYgbGF5b3V0Qm94KQog
ewogICAgIGF1dG8gbWlzbXRhY2hpbmdHZW9tZXRyeSA9IG91dHB1dE1pc21hdGNoaW5nQmxvY2tC
b3hJbmZvcm1hdGlvbklmTmVlZGVkKHN0cmVhbSwgY29udGV4dCwgcmVuZGVyZXIsIGxheW91dEJv
eCk7CiAKQEAgLTI4MCw3ICsyODAsNyBAQCBzdGF0aWMgYm9vbCB2ZXJpZnlBbmRPdXRwdXRTdWJ0
cmVlKFRleHRTdHJlYW0mIHN0cmVhbSwgY29uc3QgTGF5b3V0Q29udGV4dCYgY29udAogICAgIHJl
dHVybiBtaXNtdGFjaGluZ0dlb21ldHJ5OwogfQogCi12b2lkIExheW91dENvbnRleHQ6OnZlcmlm
eUFuZE91dHB1dE1pc21hdGNoaW5nTGF5b3V0VHJlZShjb25zdCBSZW5kZXJWaWV3JiByZW5kZXJW
aWV3KSBjb25zdAordm9pZCBMYXlvdXRTdGF0ZTo6dmVyaWZ5QW5kT3V0cHV0TWlzbWF0Y2hpbmdM
YXlvdXRUcmVlKGNvbnN0IFJlbmRlclZpZXcmIHJlbmRlclZpZXcpIGNvbnN0CiB7CiAgICAgVGV4
dFN0cmVhbSBzdHJlYW07CiAgICAgYXV0byBtaXNtYXRjaGluZ0dlb21ldHJ5ID0gdmVyaWZ5QW5k
T3V0cHV0U3VidHJlZShzdHJlYW0sICp0aGlzLCByZW5kZXJWaWV3LCAqbV9yb290LmdldCgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tG
b3JtYXR0aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0
aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuY3BwCmluZGV4IDJlOGEwMDdmZDkzZjdlZmJjYTI3
Y2I3MTQ4ZjkwMGZkOTZiMTBhM2QuLjdlYzI0NjdhYWUwYjBjOTkxOWQzNzIxMGRiM2E4NjMzZTEy
N2UwYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcv
QmxvY2tGb3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Js
b2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAtMzQsNyArMzQsNyBA
QAogI2luY2x1ZGUgIkZsb2F0aW5nU3RhdGUuaCIKICNpbmNsdWRlICJMYXlvdXRCb3guaCIKICNp
bmNsdWRlICJMYXlvdXRDb250YWluZXIuaCIKLSNpbmNsdWRlICJMYXlvdXRDb250ZXh0LmgiCisj
aW5jbHVkZSAiTGF5b3V0Rm9ybWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgog
I2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4
dFN0cmVhbS5oPgpAQCAtNDksNyArNDksNyBAQCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpCbG9j
a0Zvcm1hdHRpbmdDb250ZXh0KGNvbnN0IEJveCYgZm9ybWF0dGluZ0NvbnRleHRSb290KQogewog
fQogCi12b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dChMYXlvdXRDb250ZXh0JiBs
YXlvdXRDb250ZXh0LCBGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSkgY29uc3QKK3Zv
aWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0KExheW91dFN0YXRlJiBsYXlvdXRTdGF0
ZSwgRm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUpIGNvbnN0CiB7CiAgICAgLy8gOS40
LjEgQmxvY2sgZm9ybWF0dGluZyBjb250ZXh0cwogICAgIC8vIEluIGEgYmxvY2sgZm9ybWF0dGlu
ZyBjb250ZXh0LCBib3hlcyBhcmUgbGFpZCBvdXQgb25lIGFmdGVyIHRoZSBvdGhlciwgdmVydGlj
YWxseSwgYmVnaW5uaW5nIGF0IHRoZSB0b3Agb2YgYSBjb250YWluaW5nIGJsb2NrLgpAQCAtNTgs
NyArNTgsNyBAQCB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dChMYXlvdXRDb250
ZXh0JiBsYXlvdXRDb250ZXh0LCBGb3JtYXR0aW5nU3RhdAogICAgIGlmICghaXM8Q29udGFpbmVy
Pihyb290KCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0
dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW1N0YXJ0XSAtPiBibG9jayBmb3JtYXR0aW5n
IGNvbnRleHQgLT4gbGF5b3V0IGNvbnRleHQoIiA8PCAmbGF5b3V0Q29udGV4dCA8PCAiKSBmb3Jt
YXR0aW5nIHJvb3QoIiA8PCAmcm9vdCgpIDw8ICIpIik7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZv
cm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltTdGFydF0gLT4gYmxvY2sgZm9ybWF0
dGluZyBjb250ZXh0IC0+IGxheW91dCBjb250ZXh0KCIgPDwgJmxheW91dFN0YXRlIDw8ICIpIGZv
cm1hdHRpbmcgcm9vdCgiIDw8ICZyb290KCkgPDwgIikiKTsKIAogICAgIGF1dG8mIGZvcm1hdHRp
bmdSb290ID0gZG93bmNhc3Q8Q29udGFpbmVyPihyb290KCkpOwogICAgIExheW91dFF1ZXVlIGxh
eW91dFF1ZXVlOwpAQCAtNzcsNyArNzcsNyBAQCB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6
OmxheW91dChMYXlvdXRDb250ZXh0JiBsYXlvdXRDb250ZXh0LCBGb3JtYXR0aW5nU3RhdAogICAg
ICAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gKmxheW91dFF1ZXVlLmxhc3QoKTsKIAogICAgICAg
ICAgICAgaWYgKGxheW91dEJveC5lc3RhYmxpc2hlc0Zvcm1hdHRpbmdDb250ZXh0KCkpIHsKLSAg
ICAgICAgICAgICAgICBsYXlvdXRGb3JtYXR0aW5nQ29udGV4dFJvb3QobGF5b3V0Q29udGV4dCwg
ZmxvYXRpbmdDb250ZXh0LCBmb3JtYXR0aW5nU3RhdGUsIGxheW91dEJveCk7CisgICAgICAgICAg
ICAgICAgbGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRSb290KGxheW91dFN0YXRlLCBmbG9hdGluZ0Nv
bnRleHQsIGZvcm1hdHRpbmdTdGF0ZSwgbGF5b3V0Qm94KTsKICAgICAgICAgICAgICAgICBsYXlv
dXRRdWV1ZS5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAgICAgLy8gU2luY2UgdGhpcyBib3gg
aXMgYSBmb3JtYXR0aW5nIGNvbnRleHQgcm9vdCwgaXQgdGFrZXMgY2FyZSBvZiBpdHMgZW50aXJl
IHN1YnRyZWUuCiAgICAgICAgICAgICAgICAgLy8gQ29udGludWUgd2l0aCBuZXh0IHNpYmxpbmcg
aWYgZXhpc3RzLgpAQCAtODgsOSArODgsOSBAQCB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6
OmxheW91dChMYXlvdXRDb250ZXh0JiBsYXlvdXRDb250ZXh0LCBGb3JtYXR0aW5nU3RhdAogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRl
eHRMYXlvdXQsIHN0cmVhbSA8PCAiW0NvbXB1dGVdIC0+IFtQb3NpdGlvbl1bQm9yZGVyXVtQYWRk
aW5nXVtXaWR0aF1bTWFyZ2luXSAtPiBmb3IgbGF5b3V0Qm94KCIgPDwgJmxheW91dEJveCA8PCAi
KSIpOwotICAgICAgICAgICAgY29tcHV0ZVN0YXRpY1Bvc2l0aW9uKGxheW91dENvbnRleHQsIGxh
eW91dEJveCk7Ci0gICAgICAgICAgICBjb21wdXRlQm9yZGVyQW5kUGFkZGluZyhsYXlvdXRDb250
ZXh0LCBsYXlvdXRCb3gpOwotICAgICAgICAgICAgY29tcHV0ZVdpZHRoQW5kTWFyZ2luKGxheW91
dENvbnRleHQsIGxheW91dEJveCk7CisgICAgICAgICAgICBjb21wdXRlU3RhdGljUG9zaXRpb24o
bGF5b3V0U3RhdGUsIGxheW91dEJveCk7CisgICAgICAgICAgICBjb21wdXRlQm9yZGVyQW5kUGFk
ZGluZyhsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94KTsKKyAgICAgICAgICAgIGNvbXB1dGVXaWR0aEFu
ZE1hcmdpbihsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94KTsKICAgICAgICAgICAgIGlmICghaXM8Q29u
dGFpbmVyPihsYXlvdXRCb3gpIHx8ICFkb3duY2FzdDxDb250YWluZXI+KGxheW91dEJveCkuaGFz
SW5GbG93T3JGbG9hdGluZ0NoaWxkKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICBsYXlvdXRRdWV1ZS5hcHBlbmQoZG93bmNhc3Q8Q29udGFpbmVyPihsYXlvdXRCb3gpLmZp
cnN0SW5GbG93T3JGbG9hdGluZ0NoaWxkKCkpOwpAQCAtMTA0LDE1ICsxMDQsMTUgQEAgdm9pZCBC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXQoTGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4
dCwgRm9ybWF0dGluZ1N0YXQKICAgICAgICAgICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5n
Q29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbQ29tcHV0ZV0gLT4gW0hlaWdodF1bTWFyZ2luXSAt
PiBmb3IgbGF5b3V0Qm94KCIgPDwgJmxheW91dEJveCA8PCAiKSIpOwogICAgICAgICAgICAgLy8g
Rm9ybWF0dGluZyByb290IGJveGVzIGFyZSBzcGVjaWFsLWNhc2VkIGFuZCB0aGV5IGRvbid0IGNv
bWUgaGVyZS4KICAgICAgICAgICAgIEFTU0VSVCghbGF5b3V0Qm94LmVzdGFibGlzaGVzRm9ybWF0
dGluZ0NvbnRleHQoKSk7Ci0gICAgICAgICAgICBjb21wdXRlSGVpZ2h0QW5kTWFyZ2luKGxheW91
dENvbnRleHQsIGxheW91dEJveCk7CisgICAgICAgICAgICBjb21wdXRlSGVpZ2h0QW5kTWFyZ2lu
KGxheW91dFN0YXRlLCBsYXlvdXRCb3gpOwogICAgICAgICAgICAgLy8gRmluYWxpemUgcG9zaXRp
b24gd2l0aCBjbGVhcmFuY2UuCiAgICAgICAgICAgICBpZiAobGF5b3V0Qm94Lmhhc0Zsb2F0Q2xl
YXIoKSkKLSAgICAgICAgICAgICAgICBjb21wdXRlVmVydGljYWxQb3NpdGlvbkZvckZsb2F0Q2xl
YXIobGF5b3V0Q29udGV4dCwgZmxvYXRpbmdDb250ZXh0LCBsYXlvdXRCb3gpOworICAgICAgICAg
ICAgICAgIGNvbXB1dGVWZXJ0aWNhbFBvc2l0aW9uRm9yRmxvYXRDbGVhcihsYXlvdXRTdGF0ZSwg
ZmxvYXRpbmdDb250ZXh0LCBsYXlvdXRCb3gpOwogICAgICAgICAgICAgaWYgKCFpczxDb250YWlu
ZXI+KGxheW91dEJveCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBh
dXRvJiBjb250YWluZXIgPSBkb3duY2FzdDxDb250YWluZXI+KGxheW91dEJveCk7CiAgICAgICAg
ICAgICAvLyBNb3ZlIGluLWZsb3cgcG9zaXRpb25lZCBjaGlsZHJlbiB0byB0aGVpciBmaW5hbCBw
b3NpdGlvbi4KLSAgICAgICAgICAgIHBsYWNlSW5GbG93UG9zaXRpb25lZENoaWxkcmVuKGxheW91
dENvbnRleHQsIGNvbnRhaW5lcik7CisgICAgICAgICAgICBwbGFjZUluRmxvd1Bvc2l0aW9uZWRD
aGlsZHJlbihsYXlvdXRTdGF0ZSwgY29udGFpbmVyKTsKICAgICAgICAgICAgIGlmIChhdXRvKiBu
ZXh0U2libGluZyA9IGNvbnRhaW5lci5uZXh0SW5GbG93T3JGbG9hdGluZ1NpYmxpbmcoKSkgewog
ICAgICAgICAgICAgICAgIGxheW91dFF1ZXVlLmFwcGVuZChuZXh0U2libGluZyk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CkBAIC0xMjAsNTYgKzEyMCw1NiBAQCB2b2lkIEJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQ6OmxheW91dChMYXlvdXRDb250ZXh0JiBsYXlvdXRDb250ZXh0LCBGb3JtYXR0aW5n
U3RhdAogICAgICAgICB9CiAgICAgfQogICAgIC8vIFBsYWNlIHRoZSBpbmZsb3cgcG9zaXRpb25l
ZCBjaGlsZHJlbi4KLSAgICBwbGFjZUluRmxvd1Bvc2l0aW9uZWRDaGlsZHJlbihsYXlvdXRDb250
ZXh0LCBmb3JtYXR0aW5nUm9vdCk7Ci0gICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250
ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltFbmRdIC0+IGJsb2NrIGZvcm1hdHRpbmcgY29udGV4dCAt
PiBsYXlvdXQgY29udGV4dCgiIDw8ICZsYXlvdXRDb250ZXh0IDw8ICIpIGZvcm1hdHRpbmcgcm9v
dCgiIDw8ICZyb290KCkgPDwgIikiKTsKKyAgICBwbGFjZUluRmxvd1Bvc2l0aW9uZWRDaGlsZHJl
bihsYXlvdXRTdGF0ZSwgZm9ybWF0dGluZ1Jvb3QpOworICAgIExPR19XSVRIX1NUUkVBTShGb3Jt
YXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbRW5kXSAtPiBibG9jayBmb3JtYXR0aW5n
IGNvbnRleHQgLT4gbGF5b3V0IGNvbnRleHQoIiA8PCAmbGF5b3V0U3RhdGUgPDwgIikgZm9ybWF0
dGluZyByb290KCIgPDwgJnJvb3QoKSA8PCAiKSIpOwogfQogCi12b2lkIEJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQ6OmxheW91dEZvcm1hdHRpbmdDb250ZXh0Um9vdChMYXlvdXRDb250ZXh0JiBsYXlv
dXRDb250ZXh0LCBGbG9hdGluZ0NvbnRleHQmIGZsb2F0aW5nQ29udGV4dCwgRm9ybWF0dGluZ1N0
YXRlJiwgY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0Cit2b2lkIEJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQ6OmxheW91dEZvcm1hdHRpbmdDb250ZXh0Um9vdChMYXlvdXRTdGF0ZSYgbGF5b3V0U3Rh
dGUsIEZsb2F0aW5nQ29udGV4dCYgZmxvYXRpbmdDb250ZXh0LCBGb3JtYXR0aW5nU3RhdGUmLCBj
b25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKIHsKICAgICAvLyBTdGFydCBsYXlpbmcgb3V0IHRo
aXMgZm9ybWF0dGluZyByb290IGluIHRoZSBmb3JtYXR0aW5nIGNvbnRlbnh0IGl0IGxpdmVzIGlu
LgogICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8
ICJbQ29tcHV0ZV0gLT4gW1Bvc2l0aW9uXVtCb3JkZXJdW1BhZGRpbmddW1dpZHRoXVtNYXJnaW5d
IC0+IGZvciBsYXlvdXRCb3goIiA8PCAmbGF5b3V0Qm94IDw8ICIpIik7Ci0gICAgY29tcHV0ZVN0
YXRpY1Bvc2l0aW9uKGxheW91dENvbnRleHQsIGxheW91dEJveCk7Ci0gICAgY29tcHV0ZUJvcmRl
ckFuZFBhZGRpbmcobGF5b3V0Q29udGV4dCwgbGF5b3V0Qm94KTsKLSAgICBjb21wdXRlV2lkdGhB
bmRNYXJnaW4obGF5b3V0Q29udGV4dCwgbGF5b3V0Qm94KTsKKyAgICBjb21wdXRlU3RhdGljUG9z
aXRpb24obGF5b3V0U3RhdGUsIGxheW91dEJveCk7CisgICAgY29tcHV0ZUJvcmRlckFuZFBhZGRp
bmcobGF5b3V0U3RhdGUsIGxheW91dEJveCk7CisgICAgY29tcHV0ZVdpZHRoQW5kTWFyZ2luKGxh
eW91dFN0YXRlLCBsYXlvdXRCb3gpOwogCi0gICAgcHJlY29tcHV0ZVZlcnRpY2FsUG9zaXRpb25G
b3JGb3JtYXR0aW5nUm9vdElmTmVlZGVkKGxheW91dENvbnRleHQsIGxheW91dEJveCk7CisgICAg
cHJlY29tcHV0ZVZlcnRpY2FsUG9zaXRpb25Gb3JGb3JtYXR0aW5nUm9vdElmTmVlZGVkKGxheW91
dFN0YXRlLCBsYXlvdXRCb3gpOwogICAgIC8vIFN3aWNoIG92ZXIgdG8gdGhlIG5ldyBmb3JtYXR0
aW5nIGNvbnRleHQgKHRoZSBvbmUgdGhhdCB0aGUgcm9vdCBjcmVhdGVzKS4KLSAgICBhdXRvIGZv
cm1hdHRpbmdDb250ZXh0ID0gbGF5b3V0Q29udGV4dC5mb3JtYXR0aW5nQ29udGV4dChsYXlvdXRC
b3gpOwotICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IGxheW91dENvbnRleHQuY3JlYXRlRm9y
bWF0dGluZ1N0YXRlRm9yRm9ybWF0dGluZ1Jvb3RJZk5lZWRlZChsYXlvdXRCb3gpOwotICAgIGZv
cm1hdHRpbmdDb250ZXh0LT5sYXlvdXQobGF5b3V0Q29udGV4dCwgZm9ybWF0dGluZ1N0YXRlKTsK
KyAgICBhdXRvIGZvcm1hdHRpbmdDb250ZXh0ID0gbGF5b3V0U3RhdGUuZm9ybWF0dGluZ0NvbnRl
eHQobGF5b3V0Qm94KTsKKyAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSBsYXlvdXRTdGF0ZS5j
cmVhdGVGb3JtYXR0aW5nU3RhdGVGb3JGb3JtYXR0aW5nUm9vdElmTmVlZGVkKGxheW91dEJveCk7
CisgICAgZm9ybWF0dGluZ0NvbnRleHQtPmxheW91dChsYXlvdXRTdGF0ZSwgZm9ybWF0dGluZ1N0
YXRlKTsKIAogICAgIC8vIENvbWUgYmFjayBhbmQgZmluYWxpemUgdGhlIHJvb3QncyBnZW9tZXRy
eS4KICAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8
PCAiW0NvbXB1dGVdIC0+IFtIZWlnaHRdW01hcmdpbl0gLT4gZm9yIGxheW91dEJveCgiIDw8ICZs
YXlvdXRCb3ggPDwgIikiKTsKLSAgICBjb21wdXRlSGVpZ2h0QW5kTWFyZ2luKGxheW91dENvbnRl
eHQsIGxheW91dEJveCk7CisgICAgY29tcHV0ZUhlaWdodEFuZE1hcmdpbihsYXlvdXRTdGF0ZSwg
bGF5b3V0Qm94KTsKIAogICAgIC8vIEZsb2F0IHJlbGF0ZWQgZmluYWwgcG9zaXRpb25pbmcuCiAg
ICAgaWYgKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKSB7Ci0gICAgICAgIGNvbXB1
dGVGbG9hdGluZ1Bvc2l0aW9uKGxheW91dENvbnRleHQsIGZsb2F0aW5nQ29udGV4dCwgbGF5b3V0
Qm94KTsKKyAgICAgICAgY29tcHV0ZUZsb2F0aW5nUG9zaXRpb24obGF5b3V0U3RhdGUsIGZsb2F0
aW5nQ29udGV4dCwgbGF5b3V0Qm94KTsKICAgICAgICAgZmxvYXRpbmdDb250ZXh0LmZsb2F0aW5n
U3RhdGUoKS5hcHBlbmQobGF5b3V0Qm94KTsKICAgICB9IGVsc2UgaWYgKGxheW91dEJveC5oYXNG
bG9hdENsZWFyKCkpCi0gICAgICAgIGNvbXB1dGVWZXJ0aWNhbFBvc2l0aW9uRm9yRmxvYXRDbGVh
cihsYXlvdXRDb250ZXh0LCBmbG9hdGluZ0NvbnRleHQsIGxheW91dEJveCk7CisgICAgICAgIGNv
bXB1dGVWZXJ0aWNhbFBvc2l0aW9uRm9yRmxvYXRDbGVhcihsYXlvdXRTdGF0ZSwgZmxvYXRpbmdD
b250ZXh0LCBsYXlvdXRCb3gpOwogICAgIGVsc2UgaWYgKGxheW91dEJveC5lc3RhYmxpc2hlc0Js
b2NrRm9ybWF0dGluZ0NvbnRleHQoKSkKLSAgICAgICAgY29tcHV0ZVBvc2l0aW9uVG9Bdm9pZEZs
b2F0cyhsYXlvdXRDb250ZXh0LCBmbG9hdGluZ0NvbnRleHQsIGxheW91dEJveCk7CisgICAgICAg
IGNvbXB1dGVQb3NpdGlvblRvQXZvaWRGbG9hdHMobGF5b3V0U3RhdGUsIGZsb2F0aW5nQ29udGV4
dCwgbGF5b3V0Qm94KTsKIAogICAgIC8vIE5vdyB0aGF0IHdlIGNvbXB1dGVkIHRoZSByb290J3Mg
aGVpZ2h0LCB3ZSBjYW4gZ28gYmFjayBhbmQgbGF5b3V0IHRoZSBvdXQtb2YtZmxvdyBkZXNjZWRh
bnRzIChpZiBhbnkpLgotICAgIGZvcm1hdHRpbmdDb250ZXh0LT5sYXlvdXRPdXRPZkZsb3dEZXNj
ZW5kYW50cyhsYXlvdXRDb250ZXh0LCBsYXlvdXRCb3gpOworICAgIGZvcm1hdHRpbmdDb250ZXh0
LT5sYXlvdXRPdXRPZkZsb3dEZXNjZW5kYW50cyhsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94KTsKIH0K
IAotdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlU3RhdGljUG9zaXRpb24oY29u
c3QgTGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4dCwgY29uc3QgQm94JiBsYXlvdXRCb3gpIGNv
bnN0Cit2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVTdGF0aWNQb3NpdGlvbihj
b25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25z
dAogewotICAgIGxheW91dENvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gp
LnNldFRvcExlZnQoR2VvbWV0cnk6OnN0YXRpY1Bvc2l0aW9uKGxheW91dENvbnRleHQsIGxheW91
dEJveCkpOworICAgIGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94
KS5zZXRUb3BMZWZ0KEdlb21ldHJ5OjpzdGF0aWNQb3NpdGlvbihsYXlvdXRTdGF0ZSwgbGF5b3V0
Qm94KSk7CiB9CiAKLXZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUVzdGltYXRl
ZE1hcmdpblRvcChjb25zdCBMYXlvdXRDb250ZXh0JiBsYXlvdXRDb250ZXh0LCBjb25zdCBCb3gm
IGxheW91dEJveCkgY29uc3QKK3ZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUVz
dGltYXRlZE1hcmdpblRvcChjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IEJv
eCYgbGF5b3V0Qm94KSBjb25zdAogewotICAgIGF1dG8gZXN0aW1hdGVkTWFyZ2luVG9wID0gR2Vv
bWV0cnk6OmVzdGltYXRlZE1hcmdpblRvcChsYXlvdXRDb250ZXh0LCBsYXlvdXRCb3gpOworICAg
IGF1dG8gZXN0aW1hdGVkTWFyZ2luVG9wID0gR2VvbWV0cnk6OmVzdGltYXRlZE1hcmdpblRvcChs
YXlvdXRTdGF0ZSwgbGF5b3V0Qm94KTsKIAotICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRD
b250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKKyAgICBhdXRvJiBkaXNw
bGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOwog
ICAgIGRpc3BsYXlCb3guc2V0RXN0aW1hdGVkTWFyZ2luVG9wKGVzdGltYXRlZE1hcmdpblRvcCk7
CiAgICAgZGlzcGxheUJveC5tb3ZlVmVydGljYWxseShlc3RpbWF0ZWRNYXJnaW5Ub3ApOwogfQog
Ci12b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVFc3RpbWF0ZWRNYXJnaW5Ub3BG
b3JBbmNlc3RvcnMoY29uc3QgTGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4dCwgY29uc3QgQm94
JiBsYXlvdXRCb3gpIGNvbnN0Cit2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVF
c3RpbWF0ZWRNYXJnaW5Ub3BGb3JBbmNlc3RvcnMoY29uc3QgTGF5b3V0U3RhdGUmIGxheW91dFN0
YXRlLCBjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKIHsKICAgICAvLyBXZSBvbmx5IG5lZWQg
dG8gZXN0aW1hdGUgbWFyZ2luIHRvcCBmb3IgZmxvYXQgcmVsYXRlZCBsYXlvdXQgKGZvcm1hdHRp
bmcgY29udGV4dCByb290cyBhdm9pZCBmbG9hdHMpLgogICAgIEFTU0VSVChsYXlvdXRCb3guaXNG
bG9hdGluZ1Bvc2l0aW9uZWQoKSB8fCBsYXlvdXRCb3guaGFzRmxvYXRDbGVhcigpIHx8IGxheW91
dEJveC5lc3RhYmxpc2hlc0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQoKSB8fCBsYXlvdXRCb3guZXN0
YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgpKTsKQEAgLTE4NSwzNyArMTg1LDM3IEBA
IHZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUVzdGltYXRlZE1hcmdpblRvcEZv
ckFuY2VzdG9ycyhjb25zdCBMYXlvdXRDCiAgICAgLy8gVGhlIGlkZWEgaGVyZSBpcyB0aGF0IGFz
IGxvbmcgYXMgd2UgZG9uJ3QgY3Jvc3MgdGhlIGJsb2NrIGZvcm1hdHRpbmcgY29udGV4dCBib3Vu
ZGFyeSwgd2Ugc2hvdWxkIGJlIGFibGUgdG8gcHJlLWNvbXB1dGUgdGhlIGZpbmFsIHRvcCBtYXJn
aW4uCiAKICAgICBmb3IgKGF1dG8qIGFuY2VzdG9yID0gbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9j
aygpOyBhbmNlc3RvciAmJiAhYW5jZXN0b3ItPmVzdGFibGlzaGVzQmxvY2tGb3JtYXR0aW5nQ29u
dGV4dCgpOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5jb250YWluaW5nQmxvY2soKSkgewotICAgICAg
ICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0Q29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94
KCphbmNlc3Rvcik7CisgICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5kaXNw
bGF5Qm94Rm9yTGF5b3V0Qm94KCphbmNlc3Rvcik7CiAgICAgICAgIC8vIEZJWE1FOiB3aXRoIGlu
Y3JlbWVudGFsIGxheW91dCwgd2UgbWlnaHQgYWN0dWFsbHkgaGF2ZSBhIHZhbGlkIChub24tZXN0
aW1hdGVkKSBtYXJnaW4gdG9wIGFzIHdlbGwuCiAgICAgICAgIGlmIChkaXNwbGF5Qm94LmVzdGlt
YXRlZE1hcmdpblRvcCgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGNvbXB1dGVF
c3RpbWF0ZWRNYXJnaW5Ub3AobGF5b3V0Q29udGV4dCwgKmFuY2VzdG9yKTsKKyAgICAgICAgY29t
cHV0ZUVzdGltYXRlZE1hcmdpblRvcChsYXlvdXRTdGF0ZSwgKmFuY2VzdG9yKTsKICAgICB9CiB9
CiAKLXZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6cHJlY29tcHV0ZVZlcnRpY2FsUG9zaXRp
b25Gb3JGb3JtYXR0aW5nUm9vdElmTmVlZGVkKGNvbnN0IExheW91dENvbnRleHQmIGxheW91dENv
bnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAordm9pZCBCbG9ja0Zvcm1hdHRpbmdD
b250ZXh0OjpwcmVjb21wdXRlVmVydGljYWxQb3NpdGlvbkZvckZvcm1hdHRpbmdSb290SWZOZWVk
ZWQoY29uc3QgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBCb3gmIGxheW91dEJveCkg
Y29uc3QKIHsKICAgICBBU1NFUlQobGF5b3V0Qm94LmVzdGFibGlzaGVzRm9ybWF0dGluZ0NvbnRl
eHQoKSk7CiAKICAgICBhdXRvIGF2b2lkc0Zsb2F0cyA9IGxheW91dEJveC5pc0Zsb2F0aW5nUG9z
aXRpb25lZCgpIHx8IGxheW91dEJveC5lc3RhYmxpc2hlc0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQo
KSB8fCBsYXlvdXRCb3guaGFzRmxvYXRDbGVhcigpOwogICAgIGlmIChhdm9pZHNGbG9hdHMpCi0g
ICAgICAgIGNvbXB1dGVFc3RpbWF0ZWRNYXJnaW5Ub3BGb3JBbmNlc3RvcnMobGF5b3V0Q29udGV4
dCwgbGF5b3V0Qm94KTsKKyAgICAgICAgY29tcHV0ZUVzdGltYXRlZE1hcmdpblRvcEZvckFuY2Vz
dG9ycyhsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94KTsKIAogICAgIC8vIElmIHRoZSBpbmxpbmUgZm9y
bWF0dGluZyByb290IGlzIGFsc28gdGhlIHJvb3QgZm9yIHRoZSBmbG9hdHMgKGhhcHBlbnMgd2hl
biB0aGUgcm9vdCBib3ggYWxzbyBlc3RhYmxpc2hlcyBhIGJsb2NrIGZvcm1hdHRpbmcgY29udGV4
dCkKICAgICAvLyB0aGUgZmxvYXRzIGFyZSBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhp
cyByb290LiBObyBuZWVkIHRvIGZpbmQgdGhlIGZpbmFsIHZlcnRpY2FsIHBvc2l0aW9uLgogICAg
IGF1dG8gaW5saW5lQ29udGV4dEluaGVyaXRzRmxvYXRzID0gbGF5b3V0Qm94LmVzdGFibGlzaGVz
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQoKSAmJiAhbGF5b3V0Qm94LmVzdGFibGlzaGVzQmxvY2tG
b3JtYXR0aW5nQ29udGV4dCgpOwogICAgIGlmIChpbmxpbmVDb250ZXh0SW5oZXJpdHNGbG9hdHMp
IHsKLSAgICAgICAgY29tcHV0ZUVzdGltYXRlZE1hcmdpblRvcChsYXlvdXRDb250ZXh0LCBsYXlv
dXRCb3gpOwotICAgICAgICBjb21wdXRlRXN0aW1hdGVkTWFyZ2luVG9wRm9yQW5jZXN0b3JzKGxh
eW91dENvbnRleHQsIGxheW91dEJveCk7CisgICAgICAgIGNvbXB1dGVFc3RpbWF0ZWRNYXJnaW5U
b3AobGF5b3V0U3RhdGUsIGxheW91dEJveCk7CisgICAgICAgIGNvbXB1dGVFc3RpbWF0ZWRNYXJn
aW5Ub3BGb3JBbmNlc3RvcnMobGF5b3V0U3RhdGUsIGxheW91dEJveCk7CiAgICAgfQogfQogCiAj
aWZuZGVmIE5ERUJVRwotc3RhdGljIGJvb2wgaGFzUHJlY29tcHV0ZWRNYXJnaW5Ub3AoY29uc3Qg
TGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4dCwgY29uc3QgQm94JiBsYXlvdXRCb3gpCitzdGF0
aWMgYm9vbCBoYXNQcmVjb21wdXRlZE1hcmdpblRvcChjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0
U3RhdGUsIGNvbnN0IEJveCYgbGF5b3V0Qm94KQogewogICAgIGZvciAoYXV0byogYW5jZXN0b3Ig
PSBsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCk7IGFuY2VzdG9yICYmICFhbmNlc3Rvci0+ZXN0
YWJsaXNoZXNCbG9ja0Zvcm1hdHRpbmdDb250ZXh0KCk7IGFuY2VzdG9yID0gYW5jZXN0b3ItPmNv
bnRhaW5pbmdCbG9jaygpKSB7Ci0gICAgICAgIGlmIChsYXlvdXRDb250ZXh0LmRpc3BsYXlCb3hG
b3JMYXlvdXRCb3goKmFuY2VzdG9yKS5lc3RpbWF0ZWRNYXJnaW5Ub3AoKSkKKyAgICAgICAgaWYg
KGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmFuY2VzdG9yKS5lc3RpbWF0ZWRN
YXJnaW5Ub3AoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQpAQCAtMjIzLDM4ICsyMjMsMzggQEAgc3RhdGljIGJvb2wgaGFzUHJlY29tcHV0ZWRN
YXJnaW5Ub3AoY29uc3QgTGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4dCwgY29uc3QgQm8KIH0K
ICNlbmRpZgogCi12b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVGbG9hdGluZ1Bv
c2l0aW9uKGNvbnN0IExheW91dENvbnRleHQmIGxheW91dENvbnRleHQsIGNvbnN0IEZsb2F0aW5n
Q29udGV4dCYgZmxvYXRpbmdDb250ZXh0LCBjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKK3Zv
aWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUZsb2F0aW5nUG9zaXRpb24oY29uc3Qg
TGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBGbG9hdGluZ0NvbnRleHQmIGZsb2F0aW5n
Q29udGV4dCwgY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGxheW91
dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKTsKLSAgICBBU1NFUlQoaGFzUHJlY29tcHV0ZWRN
YXJnaW5Ub3AobGF5b3V0Q29udGV4dCwgbGF5b3V0Qm94KSk7CisgICAgQVNTRVJUKGhhc1ByZWNv
bXB1dGVkTWFyZ2luVG9wKGxheW91dFN0YXRlLCBsYXlvdXRCb3gpKTsKIAotICAgIGF1dG8mIGRp
c3BsYXlCb3ggPSBsYXlvdXRDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94
KTsKKyAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91
dEJveChsYXlvdXRCb3gpOwogICAgIC8vIDguMy4xIENvbGxhcHNpbmcgbWFyZ2lucwogICAgIC8v
IEluIGJsb2NrIGZvcm1hdHRpbmcgY29udGV4dCBtYXJnaW5zIGJldHdlZW4gYSBmbG9hdGVkIGJv
eCBhbmQgYW55IG90aGVyIGJveCBkbyBub3QgY29sbGFwc2UuCiAgICAgLy8gQWRqdXN0IHRoZSBz
dGF0aWMgcG9zaXRpb24gYnkgdXNpbmcgdGhlIHByZXZpb3VzIGluZmxvdyBib3gncyBub24tY29s
bGFwc2VkIG1hcmdpbi4KICAgICBpZiAoYXV0byogcHJldmlvdXNJbkZsb3dCb3ggPSBsYXlvdXRC
b3gucHJldmlvdXNJbkZsb3dTaWJsaW5nKCkpIHsKLSAgICAgICAgYXV0byYgcHJldmlvdXNEaXNw
bGF5Qm94ID0gbGF5b3V0Q29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpwcmV2aW91c0lu
Rmxvd0JveCk7CisgICAgICAgIGF1dG8mIHByZXZpb3VzRGlzcGxheUJveCA9IGxheW91dFN0YXRl
LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKnByZXZpb3VzSW5GbG93Qm94KTsKICAgICAgICAgZGlz
cGxheUJveC5tb3ZlVmVydGljYWxseShwcmV2aW91c0Rpc3BsYXlCb3gubm9uQ29sbGFwc2VkTWFy
Z2luQm90dG9tKCkgLSBwcmV2aW91c0Rpc3BsYXlCb3gubWFyZ2luQm90dG9tKCkpOwogICAgIH0K
ICAgICBkaXNwbGF5Qm94LnNldFRvcExlZnQoZmxvYXRpbmdDb250ZXh0LnBvc2l0aW9uRm9yRmxv
YXQobGF5b3V0Qm94KSk7CiB9CiAKLXZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0
ZVBvc2l0aW9uVG9Bdm9pZEZsb2F0cyhjb25zdCBMYXlvdXRDb250ZXh0JiBsYXlvdXRDb250ZXh0
LCBjb25zdCBGbG9hdGluZ0NvbnRleHQmIGZsb2F0aW5nQ29udGV4dCwgY29uc3QgQm94JiBsYXlv
dXRCb3gpIGNvbnN0Cit2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVQb3NpdGlv
blRvQXZvaWRGbG9hdHMoY29uc3QgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBGbG9h
dGluZ0NvbnRleHQmIGZsb2F0aW5nQ29udGV4dCwgY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0
CiB7CiAgICAgLy8gRm9ybWF0dGluZyBjb250ZXh0IHJvb3RzIGF2b2lkIGZsb2F0cy4KICAgICBB
U1NFUlQobGF5b3V0Qm94LmVzdGFibGlzaGVzQmxvY2tGb3JtYXR0aW5nQ29udGV4dCgpKTsKICAg
ICBBU1NFUlQoIWxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKTsKICAgICBBU1NFUlQo
IWxheW91dEJveC5oYXNGbG9hdENsZWFyKCkpOwotICAgIEFTU0VSVChoYXNQcmVjb21wdXRlZE1h
cmdpblRvcChsYXlvdXRDb250ZXh0LCBsYXlvdXRCb3gpKTsKKyAgICBBU1NFUlQoaGFzUHJlY29t
cHV0ZWRNYXJnaW5Ub3AobGF5b3V0U3RhdGUsIGxheW91dEJveCkpOwogCiAgICAgaWYgKGZsb2F0
aW5nQ29udGV4dC5mbG9hdGluZ1N0YXRlKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAK
ICAgICBpZiAoYXV0byBhZGp1c3RlZFBvc2l0aW9uID0gZmxvYXRpbmdDb250ZXh0LnBvc2l0aW9u
Rm9yRmxvYXRBdm9pZGluZyhsYXlvdXRCb3gpKQotICAgICAgICBsYXlvdXRDb250ZXh0LmRpc3Bs
YXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KS5zZXRUb3BMZWZ0KCphZGp1c3RlZFBvc2l0aW9u
KTsKKyAgICAgICAgbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gp
LnNldFRvcExlZnQoKmFkanVzdGVkUG9zaXRpb24pOwogfQogCi12b2lkIEJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQ6OmNvbXB1dGVWZXJ0aWNhbFBvc2l0aW9uRm9yRmxvYXRDbGVhcihjb25zdCBMYXlv
dXRDb250ZXh0JiBsYXlvdXRDb250ZXh0LCBjb25zdCBGbG9hdGluZ0NvbnRleHQmIGZsb2F0aW5n
Q29udGV4dCwgY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0Cit2b2lkIEJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQ6OmNvbXB1dGVWZXJ0aWNhbFBvc2l0aW9uRm9yRmxvYXRDbGVhcihjb25zdCBMYXlv
dXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IEZsb2F0aW5nQ29udGV4dCYgZmxvYXRpbmdDb250
ZXh0LCBjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKIHsKICAgICBBU1NFUlQobGF5b3V0Qm94
Lmhhc0Zsb2F0Q2xlYXIoKSk7CiAgICAgaWYgKGZsb2F0aW5nQ29udGV4dC5mbG9hdGluZ1N0YXRl
KCkuaXNFbXB0eSgpKQpAQCAtMjYyLDM0ICsyNjIsMzQgQEAgdm9pZCBCbG9ja0Zvcm1hdHRpbmdD
b250ZXh0Ojpjb21wdXRlVmVydGljYWxQb3NpdGlvbkZvckZsb2F0Q2xlYXIoY29uc3QgTGF5b3V0
Q28KIAogICAgIC8vIEZvciBmb3JtYXR0aW5nIHJvb3RzLCB3ZSBhbHJlYWR5IHByZWNvbXB1dGVk
IGZpbmFsIHBvc2l0aW9uLgogICAgIGlmICghbGF5b3V0Qm94LmVzdGFibGlzaGVzRm9ybWF0dGlu
Z0NvbnRleHQoKSkKLSAgICAgICAgY29tcHV0ZUVzdGltYXRlZE1hcmdpblRvcEZvckFuY2VzdG9y
cyhsYXlvdXRDb250ZXh0LCBsYXlvdXRCb3gpOwotICAgIEFTU0VSVChoYXNQcmVjb21wdXRlZE1h
cmdpblRvcChsYXlvdXRDb250ZXh0LCBsYXlvdXRCb3gpKTsKKyAgICAgICAgY29tcHV0ZUVzdGlt
YXRlZE1hcmdpblRvcEZvckFuY2VzdG9ycyhsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94KTsKKyAgICBB
U1NFUlQoaGFzUHJlY29tcHV0ZWRNYXJnaW5Ub3AobGF5b3V0U3RhdGUsIGxheW91dEJveCkpOwog
CiAgICAgaWYgKGF1dG8gdmVydGljYWxQb3NpdGlvbldpdGhDbGVhcmFuY2UgPSBmbG9hdGluZ0Nv
bnRleHQudmVydGljYWxQb3NpdGlvbldpdGhDbGVhcmFuY2UobGF5b3V0Qm94KSkKLSAgICAgICAg
bGF5b3V0Q29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCkuc2V0VG9wKCp2
ZXJ0aWNhbFBvc2l0aW9uV2l0aENsZWFyYW5jZSk7CisgICAgICAgIGxheW91dFN0YXRlLmRpc3Bs
YXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KS5zZXRUb3AoKnZlcnRpY2FsUG9zaXRpb25XaXRo
Q2xlYXJhbmNlKTsKIH0KIAotdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSW5G
bG93UG9zaXRpb25lZFBvc2l0aW9uKGNvbnN0IExheW91dENvbnRleHQmIGxheW91dENvbnRleHQs
IGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAordm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
Ojpjb21wdXRlSW5GbG93UG9zaXRpb25lZFBvc2l0aW9uKGNvbnN0IExheW91dFN0YXRlJiBsYXlv
dXRTdGF0ZSwgY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0CiB7Ci0gICAgbGF5b3V0Q29udGV4
dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCkuc2V0VG9wTGVmdChHZW9tZXRyeTo6
aW5GbG93UG9zaXRpb25lZFBvc2l0aW9uKGxheW91dENvbnRleHQsIGxheW91dEJveCkpOworICAg
IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KS5zZXRUb3BMZWZ0
KEdlb21ldHJ5OjppbkZsb3dQb3NpdGlvbmVkUG9zaXRpb24obGF5b3V0U3RhdGUsIGxheW91dEJv
eCkpOwogfQogCi12b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVXaWR0aEFuZE1h
cmdpbihMYXlvdXRDb250ZXh0JiBsYXlvdXRDb250ZXh0LCBjb25zdCBCb3gmIGxheW91dEJveCkg
Y29uc3QKK3ZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVdpZHRoQW5kTWFyZ2lu
KExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0CiB7
CiAgICAgYXV0byBjb21wdXRlID0gWyZdKHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gdXNlZFdp
ZHRoKSAtPiBXaWR0aEFuZE1hcmdpbiB7CiAKICAgICAgICAgaWYgKGxheW91dEJveC5pc0luRmxv
dygpKQotICAgICAgICAgICAgcmV0dXJuIEdlb21ldHJ5OjppbkZsb3dXaWR0aEFuZE1hcmdpbihs
YXlvdXRDb250ZXh0LCBsYXlvdXRCb3gsIHVzZWRXaWR0aCk7CisgICAgICAgICAgICByZXR1cm4g
R2VvbWV0cnk6OmluRmxvd1dpZHRoQW5kTWFyZ2luKGxheW91dFN0YXRlLCBsYXlvdXRCb3gsIHVz
ZWRXaWR0aCk7CiAKICAgICAgICAgaWYgKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgp
KQotICAgICAgICAgICAgcmV0dXJuIEdlb21ldHJ5OjpmbG9hdGluZ1dpZHRoQW5kTWFyZ2luKGxh
eW91dENvbnRleHQsICp0aGlzLCBsYXlvdXRCb3gsIHVzZWRXaWR0aCk7CisgICAgICAgICAgICBy
ZXR1cm4gR2VvbWV0cnk6OmZsb2F0aW5nV2lkdGhBbmRNYXJnaW4obGF5b3V0U3RhdGUsICp0aGlz
LCBsYXlvdXRCb3gsIHVzZWRXaWR0aCk7CiAKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfTsKIAogICAgIGF1dG8gd2lkdGhBbmRNYXJnaW4g
PSBjb21wdXRlKHsgfSk7Ci0gICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGxheW91dENv
bnRleHQuZGlzcGxheUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygp
KS5jb250ZW50Qm94V2lkdGgoKTsKKyAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gbGF5
b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9j
aygpKS5jb250ZW50Qm94V2lkdGgoKTsKIAogICAgIGlmIChhdXRvIG1heFdpZHRoID0gR2VvbWV0
cnk6OmNvbXB1dGVkVmFsdWVJZk5vdEF1dG8obGF5b3V0Qm94LnN0eWxlKCkubG9naWNhbE1heFdp
ZHRoKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSkgewogICAgICAgICBhdXRvIG1heFdpZHRoQW5k
TWFyZ2luID0gY29tcHV0ZShtYXhXaWR0aCk7CkBAIC0zMDMsNDEgKzMwMyw0MSBAQCB2b2lkIEJs
b2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVXaWR0aEFuZE1hcmdpbihMYXlvdXRDb250ZXh0
JiBsYXlvdXRDb250ZXh0LAogICAgICAgICAgICAgd2lkdGhBbmRNYXJnaW4gPSBtaW5XaWR0aEFu
ZE1hcmdpbjsKICAgICB9CiAKLSAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0Q29udGV4dC5k
aXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CisgICAgYXV0byYgZGlzcGxheUJveCA9
IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKICAgICBkaXNw
bGF5Qm94LnNldENvbnRlbnRCb3hXaWR0aCh3aWR0aEFuZE1hcmdpbi53aWR0aCk7CiAgICAgZGlz
cGxheUJveC5tb3ZlSG9yaXpvbnRhbGx5KHdpZHRoQW5kTWFyZ2luLm1hcmdpbi5sZWZ0KTsKICAg
ICBkaXNwbGF5Qm94LnNldEhvcml6b250YWxNYXJnaW4od2lkdGhBbmRNYXJnaW4ubWFyZ2luKTsK
ICAgICBkaXNwbGF5Qm94LnNldEhvcml6b250YWxOb25Db21wdXRlZE1hcmdpbih3aWR0aEFuZE1h
cmdpbi5ub25Db21wdXRlZE1hcmdpbik7CiB9CiAKLXZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4
dDo6Y29tcHV0ZUhlaWdodEFuZE1hcmdpbihjb25zdCBMYXlvdXRDb250ZXh0JiBsYXlvdXRDb250
ZXh0LCBjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKK3ZvaWQgQmxvY2tGb3JtYXR0aW5nQ29u
dGV4dDo6Y29tcHV0ZUhlaWdodEFuZE1hcmdpbihjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3Rh
dGUsIGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAogewogICAgIGF1dG8gY29tcHV0ZSA9IFsm
XShzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IHVzZWRIZWlnaHQpIC0+IEhlaWdodEFuZE1hcmdp
biB7CiAKICAgICAgICAgaWYgKGxheW91dEJveC5pc0luRmxvdygpKQotICAgICAgICAgICAgcmV0
dXJuIEdlb21ldHJ5OjppbkZsb3dIZWlnaHRBbmRNYXJnaW4obGF5b3V0Q29udGV4dCwgbGF5b3V0
Qm94LCB1c2VkSGVpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiBHZW9tZXRyeTo6aW5GbG93SGVp
Z2h0QW5kTWFyZ2luKGxheW91dFN0YXRlLCBsYXlvdXRCb3gsIHVzZWRIZWlnaHQpOwogCiAgICAg
ICAgIGlmIChsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgICAgIHJl
dHVybiBHZW9tZXRyeTo6ZmxvYXRpbmdIZWlnaHRBbmRNYXJnaW4obGF5b3V0Q29udGV4dCwgbGF5
b3V0Qm94LCB1c2VkSGVpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiBHZW9tZXRyeTo6ZmxvYXRp
bmdIZWlnaHRBbmRNYXJnaW4obGF5b3V0U3RhdGUsIGxheW91dEJveCwgdXNlZEhlaWdodCk7CiAK
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAg
fTsKIAogICAgIGF1dG8gaGVpZ2h0QW5kTWFyZ2luID0gY29tcHV0ZSh7IH0pOwotICAgIGlmIChh
dXRvIG1heEhlaWdodCA9IEdlb21ldHJ5Ojpjb21wdXRlZE1heEhlaWdodChsYXlvdXRDb250ZXh0
LCBsYXlvdXRCb3gpKSB7CisgICAgaWYgKGF1dG8gbWF4SGVpZ2h0ID0gR2VvbWV0cnk6OmNvbXB1
dGVkTWF4SGVpZ2h0KGxheW91dFN0YXRlLCBsYXlvdXRCb3gpKSB7CiAgICAgICAgIGF1dG8gbWF4
SGVpZ2h0QW5kTWFyZ2luID0gY29tcHV0ZShtYXhIZWlnaHQpOwogICAgICAgICBpZiAoaGVpZ2h0
QW5kTWFyZ2luLmhlaWdodCA+IG1heEhlaWdodEFuZE1hcmdpbi5oZWlnaHQpCiAgICAgICAgICAg
ICBoZWlnaHRBbmRNYXJnaW4gPSBtYXhIZWlnaHRBbmRNYXJnaW47CiAgICAgfQogCi0gICAgaWYg
KGF1dG8gbWluSGVpZ2h0ID0gR2VvbWV0cnk6OmNvbXB1dGVkTWluSGVpZ2h0KGxheW91dENvbnRl
eHQsIGxheW91dEJveCkpIHsKKyAgICBpZiAoYXV0byBtaW5IZWlnaHQgPSBHZW9tZXRyeTo6Y29t
cHV0ZWRNaW5IZWlnaHQobGF5b3V0U3RhdGUsIGxheW91dEJveCkpIHsKICAgICAgICAgYXV0byBt
aW5IZWlnaHRBbmRNYXJnaW4gPSBjb21wdXRlKG1pbkhlaWdodCk7CiAgICAgICAgIGlmIChoZWln
aHRBbmRNYXJnaW4uaGVpZ2h0IDwgbWluSGVpZ2h0QW5kTWFyZ2luLmhlaWdodCkKICAgICAgICAg
ICAgIGhlaWdodEFuZE1hcmdpbiA9IG1pbkhlaWdodEFuZE1hcmdpbjsKICAgICB9CiAKLSAgICBh
dXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0Q29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxh
eW91dEJveCk7CisgICAgYXV0byYgZGlzcGxheUJveCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hG
b3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKICAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hIZWln
aHQoaGVpZ2h0QW5kTWFyZ2luLmhlaWdodCk7CiAgICAgZGlzcGxheUJveC5zZXRWZXJ0aWNhbE5v
bkNvbGxhcHNlZE1hcmdpbihoZWlnaHRBbmRNYXJnaW4ubWFyZ2luKTsKICAgICBkaXNwbGF5Qm94
LnNldFZlcnRpY2FsTWFyZ2luKGhlaWdodEFuZE1hcmdpbi5jb2xsYXBzZWRNYXJnaW4udmFsdWVf
b3IoaGVpZ2h0QW5kTWFyZ2luLm1hcmdpbikpOwpAQCAtMzQ3LDE2ICszNDcsMTYgQEAgdm9pZCBC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSGVpZ2h0QW5kTWFyZ2luKGNvbnN0IExheW91
dENvbnRleHQmIGxheW91dEMKICAgICAgICAgZGlzcGxheUJveC5tb3ZlVmVydGljYWxseShoZWln
aHRBbmRNYXJnaW4uY29sbGFwc2VkTWFyZ2luLnZhbHVlX29yKGhlaWdodEFuZE1hcmdpbi5tYXJn
aW4pLnRvcCk7CiB9CiAKLUZvcm1hdHRpbmdDb250ZXh0OjpJbnN0cmluc2ljV2lkdGhDb25zdHJh
aW50cyBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjppbnN0cmluc2ljV2lkdGhDb25zdHJhaW50cyhM
YXlvdXRDb250ZXh0JiBsYXlvdXRDb250ZXh0LCBjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QK
K0Zvcm1hdHRpbmdDb250ZXh0OjpJbnN0cmluc2ljV2lkdGhDb25zdHJhaW50cyBCbG9ja0Zvcm1h
dHRpbmdDb250ZXh0OjppbnN0cmluc2ljV2lkdGhDb25zdHJhaW50cyhMYXlvdXRTdGF0ZSYgbGF5
b3V0U3RhdGUsIGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAogewotICAgIGF1dG8mIGZvcm1h
dHRpbmdTdGF0ZSA9IGxheW91dENvbnRleHQuZm9ybWF0dGluZ1N0YXRlRm9yQm94KGxheW91dEJv
eCk7CisgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRlID0gbGF5b3V0U3RhdGUuZm9ybWF0dGluZ1N0
YXRlRm9yQm94KGxheW91dEJveCk7CiAgICAgQVNTRVJUKGZvcm1hdHRpbmdTdGF0ZS5pc0Jsb2Nr
Rm9ybWF0dGluZ1N0YXRlKCkpOwogICAgIGlmIChhdXRvIGluc3RyaW5zaWNXaWR0aENvbnN0cmFp
bnRzID0gZm9ybWF0dGluZ1N0YXRlLmluc3RyaW5zaWNXaWR0aENvbnN0cmFpbnRzKGxheW91dEJv
eCkpCiAgICAgICAgIHJldHVybiAqaW5zdHJpbnNpY1dpZHRoQ29uc3RyYWludHM7CiAKICAgICAv
LyBDYW4gd2UganVzdCBjb21wdXRlIHRoZW0gd2l0aG91dCBjaGVja2luZyB0aGUgY2hpbGRyZW4/
CiAgICAgaWYgKCFHZW9tZXRyeTo6aW5zdHJpbnNpY1dpZHRoQ29uc3RyYWludHNOZWVkQ2hpbGRy
ZW5XaWR0aChsYXlvdXRCb3gpKSB7Ci0gICAgICAgIGF1dG8gaW5zdHJpbnNpY1dpZHRoQ29uc3Ry
YWludHMgPSBHZW9tZXRyeTo6aW5zdHJpbnNpY1dpZHRoQ29uc3RyYWludHMobGF5b3V0Q29udGV4
dCwgbGF5b3V0Qm94KTsKKyAgICAgICAgYXV0byBpbnN0cmluc2ljV2lkdGhDb25zdHJhaW50cyA9
IEdlb21ldHJ5OjppbnN0cmluc2ljV2lkdGhDb25zdHJhaW50cyhsYXlvdXRTdGF0ZSwgbGF5b3V0
Qm94KTsKICAgICAgICAgZm9ybWF0dGluZ1N0YXRlLnNldEluc3RyaW5zaWNXaWR0aENvbnN0cmFp
bnRzKGxheW91dEJveCwgaW5zdHJpbnNpY1dpZHRoQ29uc3RyYWludHMpOwogICAgICAgICByZXR1
cm4gaW5zdHJpbnNpY1dpZHRoQ29uc3RyYWludHM7CiAgICAgfQpAQCAtMzcyLDcgKzM3Miw3IEBA
IEZvcm1hdHRpbmdDb250ZXh0OjpJbnN0cmluc2ljV2lkdGhDb25zdHJhaW50cyBCbG9ja0Zvcm1h
dHRpbmdDb250ZXh0OjppbnN0cmluc2ljCiAgICAgaWYgKGF1dG8qIGZpcnN0Q2hpbGQgPSBkb3du
Y2FzdDxDb250YWluZXI+KGxheW91dEJveCkuZmlyc3RJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKSkK
ICAgICAgICAgcXVldWUuYXBwZW5kKGZpcnN0Q2hpbGQpOwogCi0gICAgYXV0byYgZm9ybWF0dGlu
Z1N0YXRlRm9yQ2hpbGRyZW4gPSBsYXlvdXRCb3guZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4
dCgpID8gbGF5b3V0Q29udGV4dC5jcmVhdGVGb3JtYXR0aW5nU3RhdGVGb3JGb3JtYXR0aW5nUm9v
dElmTmVlZGVkKGxheW91dEJveCkgOiBmb3JtYXR0aW5nU3RhdGU7CisgICAgYXV0byYgZm9ybWF0
dGluZ1N0YXRlRm9yQ2hpbGRyZW4gPSBsYXlvdXRCb3guZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29u
dGV4dCgpID8gbGF5b3V0U3RhdGUuY3JlYXRlRm9ybWF0dGluZ1N0YXRlRm9yRm9ybWF0dGluZ1Jv
b3RJZk5lZWRlZChsYXlvdXRCb3gpIDogZm9ybWF0dGluZ1N0YXRlOwogICAgIHdoaWxlICghcXVl
dWUuaXNFbXB0eSgpKSB7CiAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICBhdXRv
JiBjaGlsZEJveCA9ICpxdWV1ZS5sYXN0KCk7IApAQCAtMzgwLDEwICszODAsMTAgQEAgRm9ybWF0
dGluZ0NvbnRleHQ6Okluc3RyaW5zaWNXaWR0aENvbnN0cmFpbnRzIEJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQ6Omluc3RyaW5zaWMKICAgICAgICAgICAgIGF1dG8gaW5zdHJpbnNpY1dpZHRoQ29uc3Ry
YWludHMgPSBmb3JtYXR0aW5nU3RhdGVGb3JDaGlsZHJlbi5pbnN0cmluc2ljV2lkdGhDb25zdHJh
aW50cyhjaGlsZEJveCk7CiAgICAgICAgICAgICAvLyBDYW4gd2UganVzdCBjb21wdXRlIHRoZW0g
d2l0aG91dCBjaGVja2luZyB0aGUgY2hpbGRyZW4/CiAgICAgICAgICAgICBpZiAoIWluc3RyaW5z
aWNXaWR0aENvbnN0cmFpbnRzICYmICFHZW9tZXRyeTo6aW5zdHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHNOZWVkQ2hpbGRyZW5XaWR0aChjaGlsZEJveCkpCi0gICAgICAgICAgICAgICAgaW5zdHJpbnNp
Y1dpZHRoQ29uc3RyYWludHMgPSBHZW9tZXRyeTo6aW5zdHJpbnNpY1dpZHRoQ29uc3RyYWludHMo
bGF5b3V0Q29udGV4dCwgY2hpbGRCb3gpOworICAgICAgICAgICAgICAgIGluc3RyaW5zaWNXaWR0
aENvbnN0cmFpbnRzID0gR2VvbWV0cnk6Omluc3RyaW5zaWNXaWR0aENvbnN0cmFpbnRzKGxheW91
dFN0YXRlLCBjaGlsZEJveCk7CiAgICAgICAgICAgICAvLyBJcyBpdCBhIGZvcm1hdHRpbmcgY29u
dGV4dCByb290PwogICAgICAgICAgICAgaWYgKCFpbnN0cmluc2ljV2lkdGhDb25zdHJhaW50cyAm
JiBjaGlsZEJveC5lc3RhYmxpc2hlc0Zvcm1hdHRpbmdDb250ZXh0KCkpCi0gICAgICAgICAgICAg
ICAgaW5zdHJpbnNpY1dpZHRoQ29uc3RyYWludHMgPSBsYXlvdXRDb250ZXh0LmZvcm1hdHRpbmdD
b250ZXh0KGNoaWxkQm94KS0+aW5zdHJpbnNpY1dpZHRoQ29uc3RyYWludHMobGF5b3V0Q29udGV4
dCwgY2hpbGRCb3gpOworICAgICAgICAgICAgICAgIGluc3RyaW5zaWNXaWR0aENvbnN0cmFpbnRz
ID0gbGF5b3V0U3RhdGUuZm9ybWF0dGluZ0NvbnRleHQoY2hpbGRCb3gpLT5pbnN0cmluc2ljV2lk
dGhDb25zdHJhaW50cyhsYXlvdXRTdGF0ZSwgY2hpbGRCb3gpOwogICAgICAgICAgICAgLy8gR28g
dG8gdGhlIG5leHQgc2libGluZyAoYW5kIHNraXAgdGhlIGRlc2NlbmRhbnRzKSBpZiB0aGlzIGJv
eCdzIG1pbi9tYXggd2lkdGggaXMgY29tcHV0ZWQuCiAgICAgICAgICAgICBpZiAoaW5zdHJpbnNp
Y1dpZHRoQ29uc3RyYWludHMpIHsKICAgICAgICAgICAgICAgICBmb3JtYXR0aW5nU3RhdGVGb3JD
aGlsZHJlbi5zZXRJbnN0cmluc2ljV2lkdGhDb25zdHJhaW50cyhjaGlsZEJveCwgKmluc3RyaW5z
aWNXaWR0aENvbnN0cmFpbnRzKTsgCkBAIC00MDMsNyArNDAzLDcgQEAgRm9ybWF0dGluZ0NvbnRl
eHQ6Okluc3RyaW5zaWNXaWR0aENvbnN0cmFpbnRzIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Omlu
c3RyaW5zaWMKICAgICAgICAgLy8gQ29tcHV0ZSBtaW4vbWF4IGludHJpbnNpYyB3aWR0aCBib3R0
b20gdXAuCiAgICAgICAgIHdoaWxlICghcXVldWUuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBh
dXRvJiBjaGlsZEJveCA9ICpxdWV1ZS50YWtlTGFzdCgpOwotICAgICAgICAgICAgZm9ybWF0dGlu
Z1N0YXRlRm9yQ2hpbGRyZW4uc2V0SW5zdHJpbnNpY1dpZHRoQ29uc3RyYWludHMoY2hpbGRCb3gs
IEdlb21ldHJ5OjppbnN0cmluc2ljV2lkdGhDb25zdHJhaW50cyhsYXlvdXRDb250ZXh0LCBjaGls
ZEJveCkpOyAKKyAgICAgICAgICAgIGZvcm1hdHRpbmdTdGF0ZUZvckNoaWxkcmVuLnNldEluc3Ry
aW5zaWNXaWR0aENvbnN0cmFpbnRzKGNoaWxkQm94LCBHZW9tZXRyeTo6aW5zdHJpbnNpY1dpZHRo
Q29uc3RyYWludHMobGF5b3V0U3RhdGUsIGNoaWxkQm94KSk7IAogICAgICAgICAgICAgLy8gTW92
ZSBvdmVyIHRvIHRoZSBuZXh0IHNpYmxpbmcgb3IgdGFrZSB0aGUgbmV4dCBib3ggaW4gdGhlIHF1
ZXVlLgogICAgICAgICAgICAgaWYgKCFpczxDb250YWluZXI+KGNoaWxkQm94KSB8fCAhZG93bmNh
c3Q8Q29udGFpbmVyPihjaGlsZEJveCkubmV4dEluRmxvd09yRmxvYXRpbmdTaWJsaW5nKCkpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CkBAIC00MTEsNyArNDExLDcgQEAgRm9ybWF0dGluZ0Nv
bnRleHQ6Okluc3RyaW5zaWNXaWR0aENvbnN0cmFpbnRzIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6
Omluc3RyaW5zaWMKICAgICAgICAgfQogICAgIH0KIAotICAgIGF1dG8gaW5zdHJpbnNpY1dpZHRo
Q29uc3RyYWludHMgPSBHZW9tZXRyeTo6aW5zdHJpbnNpY1dpZHRoQ29uc3RyYWludHMobGF5b3V0
Q29udGV4dCwgbGF5b3V0Qm94KTsKKyAgICBhdXRvIGluc3RyaW5zaWNXaWR0aENvbnN0cmFpbnRz
ID0gR2VvbWV0cnk6Omluc3RyaW5zaWNXaWR0aENvbnN0cmFpbnRzKGxheW91dFN0YXRlLCBsYXlv
dXRCb3gpOwogICAgIGZvcm1hdHRpbmdTdGF0ZS5zZXRJbnN0cmluc2ljV2lkdGhDb25zdHJhaW50
cyhsYXlvdXRCb3gsIGluc3RyaW5zaWNXaWR0aENvbnN0cmFpbnRzKTsgCiAgICAgcmV0dXJuIGlu
c3RyaW5zaWNXaWR0aENvbnN0cmFpbnRzOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuaApp
bmRleCA4NGFhZGU4ZTllODE3MWU3MzM5MzYxMWRjN2RiMjZkMGY4YjgzZmY5Li45YmQzNWVjMTZi
Y2FhY2E0NjY1MWRkODA0MmY4NThkM2FjMzAwNjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRl
eHQuaApAQCAtNDcsNjYgKzQ3LDY2IEBAIGNsYXNzIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQgOiBw
dWJsaWMgRm9ybWF0dGluZ0NvbnRleHQgewogcHVibGljOgogICAgIEJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQoY29uc3QgQm94JiBmb3JtYXR0aW5nQ29udGV4dFJvb3QpOwogCi0gICAgdm9pZCBsYXlv
dXQoTGF5b3V0Q29udGV4dCYsIEZvcm1hdHRpbmdTdGF0ZSYpIGNvbnN0IG92ZXJyaWRlOworICAg
IHZvaWQgbGF5b3V0KExheW91dFN0YXRlJiwgRm9ybWF0dGluZ1N0YXRlJikgY29uc3Qgb3ZlcnJp
ZGU7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBsYXlvdXRGb3JtYXR0aW5nQ29udGV4dFJvb3QoTGF5
b3V0Q29udGV4dCYsIEZsb2F0aW5nQ29udGV4dCYsIEZvcm1hdHRpbmdTdGF0ZSYsIGNvbnN0IEJv
eCYpIGNvbnN0OworICAgIHZvaWQgbGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRSb290KExheW91dFN0
YXRlJiwgRmxvYXRpbmdDb250ZXh0JiwgRm9ybWF0dGluZ1N0YXRlJiwgY29uc3QgQm94JikgY29u
c3Q7CiAKLSAgICB2b2lkIGNvbXB1dGVXaWR0aEFuZE1hcmdpbihMYXlvdXRDb250ZXh0JiwgY29u
c3QgQm94JikgY29uc3Q7Ci0gICAgdm9pZCBjb21wdXRlSGVpZ2h0QW5kTWFyZ2luKGNvbnN0IExh
eW91dENvbnRleHQmLCBjb25zdCBCb3gmKSBjb25zdDsKKyAgICB2b2lkIGNvbXB1dGVXaWR0aEFu
ZE1hcmdpbihMYXlvdXRTdGF0ZSYsIGNvbnN0IEJveCYpIGNvbnN0OworICAgIHZvaWQgY29tcHV0
ZUhlaWdodEFuZE1hcmdpbihjb25zdCBMYXlvdXRTdGF0ZSYsIGNvbnN0IEJveCYpIGNvbnN0Owog
Ci0gICAgdm9pZCBjb21wdXRlU3RhdGljUG9zaXRpb24oY29uc3QgTGF5b3V0Q29udGV4dCYsIGNv
bnN0IEJveCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgY29tcHV0ZUZsb2F0aW5nUG9zaXRp
b24oY29uc3QgTGF5b3V0Q29udGV4dCYsIGNvbnN0IEZsb2F0aW5nQ29udGV4dCYsIGNvbnN0IEJv
eCYpIGNvbnN0OwotICAgIHZvaWQgY29tcHV0ZVBvc2l0aW9uVG9Bdm9pZEZsb2F0cyhjb25zdCBM
YXlvdXRDb250ZXh0JiwgY29uc3QgRmxvYXRpbmdDb250ZXh0JiwgY29uc3QgQm94JikgY29uc3Q7
Ci0gICAgdm9pZCBjb21wdXRlVmVydGljYWxQb3NpdGlvbkZvckZsb2F0Q2xlYXIoY29uc3QgTGF5
b3V0Q29udGV4dCYsIGNvbnN0IEZsb2F0aW5nQ29udGV4dCYsIGNvbnN0IEJveCYpIGNvbnN0Owor
ICAgIHZvaWQgY29tcHV0ZVN0YXRpY1Bvc2l0aW9uKGNvbnN0IExheW91dFN0YXRlJiwgY29uc3Qg
Qm94JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBjb21wdXRlRmxvYXRpbmdQb3NpdGlvbihj
b25zdCBMYXlvdXRTdGF0ZSYsIGNvbnN0IEZsb2F0aW5nQ29udGV4dCYsIGNvbnN0IEJveCYpIGNv
bnN0OworICAgIHZvaWQgY29tcHV0ZVBvc2l0aW9uVG9Bdm9pZEZsb2F0cyhjb25zdCBMYXlvdXRT
dGF0ZSYsIGNvbnN0IEZsb2F0aW5nQ29udGV4dCYsIGNvbnN0IEJveCYpIGNvbnN0OworICAgIHZv
aWQgY29tcHV0ZVZlcnRpY2FsUG9zaXRpb25Gb3JGbG9hdENsZWFyKGNvbnN0IExheW91dFN0YXRl
JiwgY29uc3QgRmxvYXRpbmdDb250ZXh0JiwgY29uc3QgQm94JikgY29uc3Q7CiAKLSAgICB2b2lk
IGNvbXB1dGVJbkZsb3dQb3NpdGlvbmVkUG9zaXRpb24oY29uc3QgTGF5b3V0Q29udGV4dCYsIGNv
bnN0IEJveCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgY29tcHV0ZUVzdGltYXRlZE1hcmdp
blRvcEZvckFuY2VzdG9ycyhjb25zdCBMYXlvdXRDb250ZXh0JiwgY29uc3QgQm94JikgY29uc3Q7
Ci0gICAgdm9pZCBjb21wdXRlRXN0aW1hdGVkTWFyZ2luVG9wKGNvbnN0IExheW91dENvbnRleHQm
LCBjb25zdCBCb3gmKSBjb25zdDsKKyAgICB2b2lkIGNvbXB1dGVJbkZsb3dQb3NpdGlvbmVkUG9z
aXRpb24oY29uc3QgTGF5b3V0U3RhdGUmLCBjb25zdCBCb3gmKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2b2lkIGNvbXB1dGVFc3RpbWF0ZWRNYXJnaW5Ub3BGb3JBbmNlc3RvcnMoY29uc3QgTGF5b3V0
U3RhdGUmLCBjb25zdCBCb3gmKSBjb25zdDsKKyAgICB2b2lkIGNvbXB1dGVFc3RpbWF0ZWRNYXJn
aW5Ub3AoY29uc3QgTGF5b3V0U3RhdGUmLCBjb25zdCBCb3gmKSBjb25zdDsKIAotICAgIHZvaWQg
cHJlY29tcHV0ZVZlcnRpY2FsUG9zaXRpb25Gb3JGb3JtYXR0aW5nUm9vdElmTmVlZGVkKGNvbnN0
IExheW91dENvbnRleHQmLCBjb25zdCBCb3gmKSBjb25zdDsKKyAgICB2b2lkIHByZWNvbXB1dGVW
ZXJ0aWNhbFBvc2l0aW9uRm9yRm9ybWF0dGluZ1Jvb3RJZk5lZWRlZChjb25zdCBMYXlvdXRTdGF0
ZSYsIGNvbnN0IEJveCYpIGNvbnN0OwogCi0gICAgSW5zdHJpbnNpY1dpZHRoQ29uc3RyYWludHMg
aW5zdHJpbnNpY1dpZHRoQ29uc3RyYWludHMoTGF5b3V0Q29udGV4dCYsIGNvbnN0IEJveCYpIGNv
bnN0IG92ZXJyaWRlOworICAgIEluc3RyaW5zaWNXaWR0aENvbnN0cmFpbnRzIGluc3RyaW5zaWNX
aWR0aENvbnN0cmFpbnRzKExheW91dFN0YXRlJiwgY29uc3QgQm94JikgY29uc3Qgb3ZlcnJpZGU7
CiAKICAgICAvLyBUaGlzIGNsYXNzIGltcGxlbWVudHMgcG9zaXRpb25pbmcgYW5kIHNpemluZyBm
b3IgYm94ZXMgcGFydGljaXBhdGluZyBpbiBhIGJsb2NrIGZvcm1hdHRpbmcgY29udGV4dC4KICAg
ICBjbGFzcyBHZW9tZXRyeSA6IHB1YmxpYyBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnkgewog
ICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIEhlaWdodEFuZE1hcmdpbiBpbkZsb3dIZWlnaHRB
bmRNYXJnaW4oY29uc3QgTGF5b3V0Q29udGV4dCYsIGNvbnN0IEJveCYsIHN0ZDo6b3B0aW9uYWw8
TGF5b3V0VW5pdD4gdXNlZEhlaWdodCA9IHsgfSk7Ci0gICAgICAgIHN0YXRpYyBXaWR0aEFuZE1h
cmdpbiBpbkZsb3dXaWR0aEFuZE1hcmdpbihjb25zdCBMYXlvdXRDb250ZXh0JiwgY29uc3QgQm94
Jiwgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiB1c2VkV2lkdGggPSB7IH0pOworICAgICAgICBz
dGF0aWMgSGVpZ2h0QW5kTWFyZ2luIGluRmxvd0hlaWdodEFuZE1hcmdpbihjb25zdCBMYXlvdXRT
dGF0ZSYsIGNvbnN0IEJveCYsIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gdXNlZEhlaWdodCA9
IHsgfSk7CisgICAgICAgIHN0YXRpYyBXaWR0aEFuZE1hcmdpbiBpbkZsb3dXaWR0aEFuZE1hcmdp
bihjb25zdCBMYXlvdXRTdGF0ZSYsIGNvbnN0IEJveCYsIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5p
dD4gdXNlZFdpZHRoID0geyB9KTsKIAotICAgICAgICBzdGF0aWMgUG9zaXRpb24gc3RhdGljUG9z
aXRpb24oY29uc3QgTGF5b3V0Q29udGV4dCYsIGNvbnN0IEJveCYpOwotICAgICAgICBzdGF0aWMg
UG9zaXRpb24gaW5GbG93UG9zaXRpb25lZFBvc2l0aW9uKGNvbnN0IExheW91dENvbnRleHQmLCBj
b25zdCBCb3gmKTsKKyAgICAgICAgc3RhdGljIFBvc2l0aW9uIHN0YXRpY1Bvc2l0aW9uKGNvbnN0
IExheW91dFN0YXRlJiwgY29uc3QgQm94Jik7CisgICAgICAgIHN0YXRpYyBQb3NpdGlvbiBpbkZs
b3dQb3NpdGlvbmVkUG9zaXRpb24oY29uc3QgTGF5b3V0U3RhdGUmLCBjb25zdCBCb3gmKTsKIAog
ICAgICAgICBzdGF0aWMgYm9vbCBpbnN0cmluc2ljV2lkdGhDb25zdHJhaW50c05lZWRDaGlsZHJl
bldpZHRoKGNvbnN0IEJveCYpOwotICAgICAgICBzdGF0aWMgSW5zdHJpbnNpY1dpZHRoQ29uc3Ry
YWludHMgaW5zdHJpbnNpY1dpZHRoQ29uc3RyYWludHMoY29uc3QgTGF5b3V0Q29udGV4dCYsIGNv
bnN0IEJveCYpOworICAgICAgICBzdGF0aWMgSW5zdHJpbnNpY1dpZHRoQ29uc3RyYWludHMgaW5z
dHJpbnNpY1dpZHRoQ29uc3RyYWludHMoY29uc3QgTGF5b3V0U3RhdGUmLCBjb25zdCBCb3gmKTsK
IAotICAgICAgICBzdGF0aWMgTGF5b3V0VW5pdCBlc3RpbWF0ZWRNYXJnaW5Ub3AoY29uc3QgTGF5
b3V0Q29udGV4dCYsIGNvbnN0IEJveCYpOworICAgICAgICBzdGF0aWMgTGF5b3V0VW5pdCBlc3Rp
bWF0ZWRNYXJnaW5Ub3AoY29uc3QgTGF5b3V0U3RhdGUmLCBjb25zdCBCb3gmKTsKIAogICAgIHBy
aXZhdGU6CiAgICAgICAgIC8vIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBtYXJnaW4gY29sbGFwc2lu
ZyBmb3IgYmxvY2sgZm9ybWF0dGluZyBjb250ZXh0LgogICAgICAgICBjbGFzcyBNYXJnaW5Db2xs
YXBzZSB7CiAgICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAgIHN0YXRpYyBMYXlvdXRVbml0IG1h
cmdpblRvcChjb25zdCBMYXlvdXRDb250ZXh0JiwgY29uc3QgQm94Jik7Ci0gICAgICAgICAgICBz
dGF0aWMgTGF5b3V0VW5pdCBtYXJnaW5Cb3R0b20oY29uc3QgTGF5b3V0Q29udGV4dCYsIGNvbnN0
IEJveCYpOworICAgICAgICAgICAgc3RhdGljIExheW91dFVuaXQgbWFyZ2luVG9wKGNvbnN0IExh
eW91dFN0YXRlJiwgY29uc3QgQm94Jik7CisgICAgICAgICAgICBzdGF0aWMgTGF5b3V0VW5pdCBt
YXJnaW5Cb3R0b20oY29uc3QgTGF5b3V0U3RhdGUmLCBjb25zdCBCb3gmKTsKIAotICAgICAgICAg
ICAgc3RhdGljIGJvb2wgaXNNYXJnaW5Cb3R0b21Db2xsYXBzZWRXaXRoUGFyZW50KGNvbnN0IExh
eW91dENvbnRleHQmLCBjb25zdCBCb3gmKTsKKyAgICAgICAgICAgIHN0YXRpYyBib29sIGlzTWFy
Z2luQm90dG9tQ29sbGFwc2VkV2l0aFBhcmVudChjb25zdCBMYXlvdXRTdGF0ZSYsIGNvbnN0IEJv
eCYpOwogICAgICAgICAgICAgc3RhdGljIGJvb2wgaXNNYXJnaW5Ub3BDb2xsYXBzZWRXaXRoUGFy
ZW50TWFyZ2luQm90dG9tKGNvbnN0IEJveCYpOwogCiAgICAgICAgIHByaXZhdGU6Ci0gICAgICAg
ICAgICBzdGF0aWMgTGF5b3V0VW5pdCBjb2xsYXBzZWRNYXJnaW5Cb3R0b21Gcm9tTGFzdENoaWxk
KGNvbnN0IExheW91dENvbnRleHQmLCBjb25zdCBCb3gmKTsKLSAgICAgICAgICAgIHN0YXRpYyBM
YXlvdXRVbml0IG5vbkNvbGxhcHNlZE1hcmdpbkJvdHRvbShjb25zdCBMYXlvdXRDb250ZXh0Jiwg
Y29uc3QgQm94Jik7CisgICAgICAgICAgICBzdGF0aWMgTGF5b3V0VW5pdCBjb2xsYXBzZWRNYXJn
aW5Cb3R0b21Gcm9tTGFzdENoaWxkKGNvbnN0IExheW91dFN0YXRlJiwgY29uc3QgQm94Jik7Cisg
ICAgICAgICAgICBzdGF0aWMgTGF5b3V0VW5pdCBub25Db2xsYXBzZWRNYXJnaW5Cb3R0b20oY29u
c3QgTGF5b3V0U3RhdGUmLCBjb25zdCBCb3gmKTsKIAotICAgICAgICAgICAgc3RhdGljIExheW91
dFVuaXQgY29tcHV0ZWROb25Db2xsYXBzZWRNYXJnaW5Ub3AoY29uc3QgTGF5b3V0Q29udGV4dCYs
IGNvbnN0IEJveCYpOwotICAgICAgICAgICAgc3RhdGljIExheW91dFVuaXQgY29tcHV0ZWROb25D
b2xsYXBzZWRNYXJnaW5Cb3R0b20oY29uc3QgTGF5b3V0Q29udGV4dCYsIGNvbnN0IEJveCYpOwor
ICAgICAgICAgICAgc3RhdGljIExheW91dFVuaXQgY29tcHV0ZWROb25Db2xsYXBzZWRNYXJnaW5U
b3AoY29uc3QgTGF5b3V0U3RhdGUmLCBjb25zdCBCb3gmKTsKKyAgICAgICAgICAgIHN0YXRpYyBM
YXlvdXRVbml0IGNvbXB1dGVkTm9uQ29sbGFwc2VkTWFyZ2luQm90dG9tKGNvbnN0IExheW91dFN0
YXRlJiwgY29uc3QgQm94Jik7CiAKLSAgICAgICAgICAgIHN0YXRpYyBMYXlvdXRVbml0IGNvbGxh
cHNlZE1hcmdpblRvcEZyb21GaXJzdENoaWxkKGNvbnN0IExheW91dENvbnRleHQmLCBjb25zdCBC
b3gmKTsKLSAgICAgICAgICAgIHN0YXRpYyBMYXlvdXRVbml0IG5vbkNvbGxhcHNlZE1hcmdpblRv
cChjb25zdCBMYXlvdXRDb250ZXh0JiwgY29uc3QgQm94Jik7CisgICAgICAgICAgICBzdGF0aWMg
TGF5b3V0VW5pdCBjb2xsYXBzZWRNYXJnaW5Ub3BGcm9tRmlyc3RDaGlsZChjb25zdCBMYXlvdXRT
dGF0ZSYsIGNvbnN0IEJveCYpOworICAgICAgICAgICAgc3RhdGljIExheW91dFVuaXQgbm9uQ29s
bGFwc2VkTWFyZ2luVG9wKGNvbnN0IExheW91dFN0YXRlJiwgY29uc3QgQm94Jik7CiAgICAgICAg
IH07CiAKLSAgICAgICAgc3RhdGljIEhlaWdodEFuZE1hcmdpbiBpbkZsb3dOb25SZXBsYWNlZEhl
aWdodEFuZE1hcmdpbihjb25zdCBMYXlvdXRDb250ZXh0JiwgY29uc3QgQm94Jiwgc3RkOjpvcHRp
b25hbDxMYXlvdXRVbml0PiB1c2VkSGVpZ2h0ID0geyB9KTsKLSAgICAgICAgc3RhdGljIFdpZHRo
QW5kTWFyZ2luIGluRmxvd05vblJlcGxhY2VkV2lkdGhBbmRNYXJnaW4oY29uc3QgTGF5b3V0Q29u
dGV4dCYsIGNvbnN0IEJveCYsIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gdXNlZFdpZHRoID0g
eyB9KTsKLSAgICAgICAgc3RhdGljIFdpZHRoQW5kTWFyZ2luIGluRmxvd1JlcGxhY2VkV2lkdGhB
bmRNYXJnaW4oY29uc3QgTGF5b3V0Q29udGV4dCYsIGNvbnN0IEJveCYsIHN0ZDo6b3B0aW9uYWw8
TGF5b3V0VW5pdD4gdXNlZFdpZHRoID0geyB9KTsKLSAgICAgICAgc3RhdGljIFBvc2l0aW9uIHN0
YXRpY1Bvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChjb25zdCBMYXlvdXRDb250ZXh0Jiwg
Y29uc3QgQm94Jik7CisgICAgICAgIHN0YXRpYyBIZWlnaHRBbmRNYXJnaW4gaW5GbG93Tm9uUmVw
bGFjZWRIZWlnaHRBbmRNYXJnaW4oY29uc3QgTGF5b3V0U3RhdGUmLCBjb25zdCBCb3gmLCBzdGQ6
Om9wdGlvbmFsPExheW91dFVuaXQ+IHVzZWRIZWlnaHQgPSB7IH0pOworICAgICAgICBzdGF0aWMg
V2lkdGhBbmRNYXJnaW4gaW5GbG93Tm9uUmVwbGFjZWRXaWR0aEFuZE1hcmdpbihjb25zdCBMYXlv
dXRTdGF0ZSYsIGNvbnN0IEJveCYsIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gdXNlZFdpZHRo
ID0geyB9KTsKKyAgICAgICAgc3RhdGljIFdpZHRoQW5kTWFyZ2luIGluRmxvd1JlcGxhY2VkV2lk
dGhBbmRNYXJnaW4oY29uc3QgTGF5b3V0U3RhdGUmLCBjb25zdCBCb3gmLCBzdGQ6Om9wdGlvbmFs
PExheW91dFVuaXQ+IHVzZWRXaWR0aCA9IHsgfSk7CisgICAgICAgIHN0YXRpYyBQb3NpdGlvbiBz
dGF0aWNQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQoY29uc3QgTGF5b3V0U3RhdGUmLCBj
b25zdCBCb3gmKTsKICAgICB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250
ZXh0R2VvbWV0cnkuY3BwCmluZGV4IGZjNzJmOTA1YTU3MzcyYzQ5OTlmOTY3YWZiZTkyNzJiMGU5
Y2Y5MjguLjZkNjAyYjU2ZDAwNDk2YzJjZTVkMGZmODEwN2RlYjBhNWNhMjdmMWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5n
Q29udGV4dEdlb21ldHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3Jt
YXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKQEAgLTQ1LDExICs0NSwx
MSBAQCBzdGF0aWMgY29uc3QgQ29udGFpbmVyJiBpbml0aWFsQ29udGFpbmluZ0Jsb2NrKGNvbnN0
IEJveCYgbGF5b3V0Qm94KQogICAgIHJldHVybiAqY29udGFpbmluZ0Jsb2NrOwogfQogCi1zdGF0
aWMgYm9vbCBpc1N0cmV0Y2hlZFRvSW5pdGlhbENvbnRhaW5pbmdCbG9jayhjb25zdCBMYXlvdXRD
b250ZXh0JiBsYXlvdXRDb250ZXh0LCBjb25zdCBCb3gmIGxheW91dEJveCkKK3N0YXRpYyBib29s
IGlzU3RyZXRjaGVkVG9Jbml0aWFsQ29udGFpbmluZ0Jsb2NrKGNvbnN0IExheW91dFN0YXRlJiBs
YXlvdXRTdGF0ZSwgY29uc3QgQm94JiBsYXlvdXRCb3gpCiB7CiAgICAgQVNTRVJUKGxheW91dEJv
eC5pc0luRmxvdygpKTsKICAgICAvLyBJbiBxdWlya3MgbW9kZSwgYm9keSBhbmQgaHRtbCBzdHJl
dGNoIHRvIHRoZSB2aWV3cG9ydC4KLSAgICBpZiAoIWxheW91dENvbnRleHQuaW5RdWlya3NNb2Rl
KCkpCisgICAgaWYgKCFsYXlvdXRTdGF0ZS5pblF1aXJrc01vZGUoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgaWYgKCFsYXlvdXRCb3guaXNEb2N1bWVudEJveCgpICYmICFsYXlvdXRC
b3guaXNCb2R5Qm94KCkpCkBAIC03OCw3ICs3OCw3IEBAIHN0YXRpYyBXaWR0aEFuZE1hcmdpbiBz
dHJldGNoV2lkdGhUb0luaXRpYWxDb250YWluaW5nQmxvY2soV2lkdGhBbmRNYXJnaW4gd2lkdGhB
CiAgICAgcmV0dXJuIHdpZHRoQW5kTWFyZ2luOwogfQogCi1IZWlnaHRBbmRNYXJnaW4gQmxvY2tG
b3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmluRmxvd05vblJlcGxhY2VkSGVpZ2h0QW5kTWFy
Z2luKGNvbnN0IExheW91dENvbnRleHQmIGxheW91dENvbnRleHQsIGNvbnN0IEJveCYgbGF5b3V0
Qm94LCBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IHVzZWRIZWlnaHQpCitIZWlnaHRBbmRNYXJn
aW4gQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmluRmxvd05vblJlcGxhY2VkSGVp
Z2h0QW5kTWFyZ2luKGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgQm94JiBs
YXlvdXRCb3gsIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gdXNlZEhlaWdodCkKIHsKICAgICBB
U1NFUlQobGF5b3V0Qm94LmlzSW5GbG93KCkgJiYgIWxheW91dEJveC5yZXBsYWNlZCgpKTsKICAg
ICBBU1NFUlQobGF5b3V0Qm94LmlzT3ZlcmZsb3dWaXNpYmxlKCkpOwpAQCAtOTksMTIgKzk5LDEy
IEBAIEhlaWdodEFuZE1hcmdpbiBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5G
bG93Tm9uUmVwbGFjZWRIZWlnaHRBbmRNYXJnCiAgICAgICAgIC8vIGFuZCByZWxhdGl2ZWx5IHBv
c2l0aW9uZWQgYm94ZXMgYXJlIGNvbnNpZGVyZWQgd2l0aG91dCB0aGVpciBvZmZzZXQpLiBOb3Rl
IHRoYXQgdGhlIGNoaWxkIGJveCBtYXkgYmUgYW4gYW5vbnltb3VzIGJsb2NrIGJveC4KIAogICAg
ICAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwotICAgICAgICBhdXRvIGNvbnRh
aW5pbmdCbG9ja1dpZHRoID0gbGF5b3V0Q29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCps
YXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLmNvbnRlbnRCb3hXaWR0aCgpOwotICAgICAgICBh
dXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0Q29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxh
eW91dEJveCk7CisgICAgICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBsYXlvdXRTdGF0
ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLmNv
bnRlbnRCb3hXaWR0aCgpOworICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUu
ZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOwogCiAgICAgICAgIFZlcnRpY2FsRWRn
ZXMgbm9uQ29sbGFwc2VkTWFyZ2luID0geyBjb21wdXRlZFZhbHVlSWZOb3RBdXRvKHN0eWxlLm1h
cmdpblRvcCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCkudmFsdWVfb3IoMCksCiAgICAgICAgICAg
ICBjb21wdXRlZFZhbHVlSWZOb3RBdXRvKHN0eWxlLm1hcmdpbkJvdHRvbSgpLCBjb250YWluaW5n
QmxvY2tXaWR0aCkudmFsdWVfb3IoMCkgfTsgCi0gICAgICAgIFZlcnRpY2FsRWRnZXMgY29sbGFw
c2VkTWFyZ2luID0geyBNYXJnaW5Db2xsYXBzZTo6bWFyZ2luVG9wKGxheW91dENvbnRleHQsIGxh
eW91dEJveCksIE1hcmdpbkNvbGxhcHNlOjptYXJnaW5Cb3R0b20obGF5b3V0Q29udGV4dCwgbGF5
b3V0Qm94KSB9OworICAgICAgICBWZXJ0aWNhbEVkZ2VzIGNvbGxhcHNlZE1hcmdpbiA9IHsgTWFy
Z2luQ29sbGFwc2U6Om1hcmdpblRvcChsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94KSwgTWFyZ2luQ29s
bGFwc2U6Om1hcmdpbkJvdHRvbShsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94KSB9OwogICAgICAgICBh
dXRvIGJvcmRlckFuZFBhZGRpbmdUb3AgPSBkaXNwbGF5Qm94LmJvcmRlclRvcCgpICsgZGlzcGxh
eUJveC5wYWRkaW5nVG9wKCkudmFsdWVfb3IoMCk7CiAgICAgICAgIAogICAgICAgICBhdXRvIGhl
aWdodCA9IHVzZWRIZWlnaHQgPyBMZW5ndGggeyB1c2VkSGVpZ2h0LnZhbHVlKCksIEZpeGVkIH0g
OiBzdHlsZS5sb2dpY2FsSGVpZ2h0KCk7CkBAIC0xMjIsMTUgKzEyMiwxNSBAQCBIZWlnaHRBbmRN
YXJnaW4gQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmluRmxvd05vblJlcGxhY2Vk
SGVpZ2h0QW5kTWFyZwogICAgICAgICAvLyAxLiB0aGUgYm90dG9tIGVkZ2Ugb2YgdGhlIGxhc3Qg
bGluZSBib3gsIGlmIHRoZSBib3ggZXN0YWJsaXNoZXMgYSBpbmxpbmUgZm9ybWF0dGluZyBjb250
ZXh0IHdpdGggb25lIG9yIG1vcmUgbGluZXMKICAgICAgICAgaWYgKGxheW91dEJveC5lc3RhYmxp
c2hlc0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkpIHsKICAgICAgICAgICAgIC8vIFRoaXMgaXMg
dGVtcCBhbmQgd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgY29ycmVjdCBkaXNwbGF5IGJveCBvbmNl
IGlubGluZSBydW5zIG1vdmUgb3ZlciB0byB0aGUgZGlzcGxheSB0cmVlLgotICAgICAgICAgICAg
YXV0byYgbGFzdElubGluZVJ1biA9IGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdTdGF0ZT4obGF5
b3V0Q29udGV4dC5lc3RhYmxpc2hlZEZvcm1hdHRpbmdTdGF0ZShsYXlvdXRCb3gpKS5pbmxpbmVS
dW5zKCkubGFzdCgpOworICAgICAgICAgICAgYXV0byYgbGFzdElubGluZVJ1biA9IGRvd25jYXN0
PElubGluZUZvcm1hdHRpbmdTdGF0ZT4obGF5b3V0U3RhdGUuZXN0YWJsaXNoZWRGb3JtYXR0aW5n
U3RhdGUobGF5b3V0Qm94KSkuaW5saW5lUnVucygpLmxhc3QoKTsKICAgICAgICAgICAgIHJldHVy
biB7IGxhc3RJbmxpbmVSdW4ubG9naWNhbEJvdHRvbSgpLCBub25Db2xsYXBzZWRNYXJnaW4sIGNv
bGxhcHNlZE1hcmdpbiB9OwogICAgICAgICB9CiAKICAgICAgICAgLy8gMi4gdGhlIGJvdHRvbSBl
ZGdlIG9mIHRoZSBib3R0b20gKHBvc3NpYmx5IGNvbGxhcHNlZCkgbWFyZ2luIG9mIGl0cyBsYXN0
IGluLWZsb3cgY2hpbGQsIGlmIHRoZSBjaGlsZCdzIGJvdHRvbSBtYXJnaW4uLi4KICAgICAgICAg
YXV0byogbGFzdEluRmxvd0NoaWxkID0gZG93bmNhc3Q8Q29udGFpbmVyPihsYXlvdXRCb3gpLmxh
c3RJbkZsb3dDaGlsZCgpOwogICAgICAgICBBU1NFUlQobGFzdEluRmxvd0NoaWxkKTsKLSAgICAg
ICAgaWYgKCFNYXJnaW5Db2xsYXBzZTo6aXNNYXJnaW5Cb3R0b21Db2xsYXBzZWRXaXRoUGFyZW50
KGxheW91dENvbnRleHQsICpsYXN0SW5GbG93Q2hpbGQpKSB7Ci0gICAgICAgICAgICBhdXRvJiBs
YXN0SW5GbG93RGlzcGxheUJveCA9IGxheW91dENvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJv
eCgqbGFzdEluRmxvd0NoaWxkKTsKKyAgICAgICAgaWYgKCFNYXJnaW5Db2xsYXBzZTo6aXNNYXJn
aW5Cb3R0b21Db2xsYXBzZWRXaXRoUGFyZW50KGxheW91dFN0YXRlLCAqbGFzdEluRmxvd0NoaWxk
KSkgeworICAgICAgICAgICAgYXV0byYgbGFzdEluRmxvd0Rpc3BsYXlCb3ggPSBsYXlvdXRTdGF0
ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXN0SW5GbG93Q2hpbGQpOwogICAgICAgICAgICAg
cmV0dXJuIHsgbGFzdEluRmxvd0Rpc3BsYXlCb3guYm90dG9tKCkgKyBsYXN0SW5GbG93RGlzcGxh
eUJveC5tYXJnaW5Cb3R0b20oKSAtIGJvcmRlckFuZFBhZGRpbmdUb3AsIG5vbkNvbGxhcHNlZE1h
cmdpbiwgY29sbGFwc2VkTWFyZ2luIH07CiAgICAgICAgIH0KIApAQCAtMTM5LDcgKzEzOSw3IEBA
IEhlaWdodEFuZE1hcmdpbiBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5GbG93
Tm9uUmVwbGFjZWRIZWlnaHRBbmRNYXJnCiAgICAgICAgIHdoaWxlIChpbkZsb3dDaGlsZCAmJiBN
YXJnaW5Db2xsYXBzZTo6aXNNYXJnaW5Ub3BDb2xsYXBzZWRXaXRoUGFyZW50TWFyZ2luQm90dG9t
KCppbkZsb3dDaGlsZCkpCiAgICAgICAgICAgICBpbkZsb3dDaGlsZCA9IGluRmxvd0NoaWxkLT5w
cmV2aW91c0luRmxvd1NpYmxpbmcoKTsKICAgICAgICAgaWYgKGluRmxvd0NoaWxkKSB7Ci0gICAg
ICAgICAgICBhdXRvJiBpbkZsb3dEaXNwbGF5Qm94ID0gbGF5b3V0Q29udGV4dC5kaXNwbGF5Qm94
Rm9yTGF5b3V0Qm94KCppbkZsb3dDaGlsZCk7CisgICAgICAgICAgICBhdXRvJiBpbkZsb3dEaXNw
bGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveCgqaW5GbG93Q2hpbGQp
OwogICAgICAgICAgICAgcmV0dXJuIHsgaW5GbG93RGlzcGxheUJveC50b3AoKSArIGluRmxvd0Rp
c3BsYXlCb3guYm9yZGVyQm94KCkuaGVpZ2h0KCkgLSBib3JkZXJBbmRQYWRkaW5nVG9wLCBub25D
b2xsYXBzZWRNYXJnaW4sIGNvbGxhcHNlZE1hcmdpbiB9OwogICAgICAgICB9CiAKQEAgLTE1Myw3
ICsxNTMsNyBAQCBIZWlnaHRBbmRNYXJnaW4gQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0
cnk6OmluRmxvd05vblJlcGxhY2VkSGVpZ2h0QW5kTWFyZwogICAgIHJldHVybiBoZWlnaHRBbmRN
YXJnaW47CiB9CiAKLVdpZHRoQW5kTWFyZ2luIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21l
dHJ5OjppbkZsb3dOb25SZXBsYWNlZFdpZHRoQW5kTWFyZ2luKGNvbnN0IExheW91dENvbnRleHQm
IGxheW91dENvbnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94LCBzdGQ6Om9wdGlvbmFsPExheW91
dFVuaXQ+IHVzZWRXaWR0aCkKK1dpZHRoQW5kTWFyZ2luIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6
Okdlb21ldHJ5OjppbkZsb3dOb25SZXBsYWNlZFdpZHRoQW5kTWFyZ2luKGNvbnN0IExheW91dFN0
YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgQm94JiBsYXlvdXRCb3gsIHN0ZDo6b3B0aW9uYWw8TGF5
b3V0VW5pdD4gdXNlZFdpZHRoKQogewogICAgIEFTU0VSVChsYXlvdXRCb3guaXNJbkZsb3coKSAm
JiAhbGF5b3V0Qm94LnJlcGxhY2VkKCkpOwogCkBAIC0xODIsOCArMTgyLDggQEAgV2lkdGhBbmRN
YXJnaW4gQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmluRmxvd05vblJlcGxhY2Vk
V2lkdGhBbmRNYXJnaW4KIAogICAgICAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgp
OwogICAgICAgICBhdXRvKiBjb250YWluaW5nQmxvY2sgPSBsYXlvdXRCb3guY29udGFpbmluZ0Js
b2NrKCk7Ci0gICAgICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBsYXlvdXRDb250ZXh0
LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmNvbnRhaW5pbmdCbG9jaykuY29udGVudEJveFdpZHRo
KCk7Ci0gICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRDb250ZXh0LmRpc3BsYXlCb3hG
b3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKKyAgICAgICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0
aCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmNvbnRhaW5pbmdCbG9jayku
Y29udGVudEJveFdpZHRoKCk7CisgICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRTdGF0
ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CiAKICAgICAgICAgYXV0byB3aWR0
aCA9IGNvbXB1dGVkVmFsdWVJZk5vdEF1dG8odXNlZFdpZHRoID8gTGVuZ3RoIHsgdXNlZFdpZHRo
LnZhbHVlKCksIEZpeGVkIH0gOiBzdHlsZS5sb2dpY2FsV2lkdGgoKSwgY29udGFpbmluZ0Jsb2Nr
V2lkdGgpOwogICAgICAgICBhdXRvIG1hcmdpbkxlZnQgPSBjb21wdXRlZFZhbHVlSWZOb3RBdXRv
KHN0eWxlLm1hcmdpbkxlZnQoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwpAQCAtMjQxLDE5ICsy
NDEsMTkgQEAgV2lkdGhBbmRNYXJnaW4gQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6
OmluRmxvd05vblJlcGxhY2VkV2lkdGhBbmRNYXJnaW4KICAgICB9OwogCiAgICAgYXV0byB3aWR0
aEFuZE1hcmdpbiA9IGNvbXB1dGUoKTsKLSAgICBpZiAoIWlzU3RyZXRjaGVkVG9Jbml0aWFsQ29u
dGFpbmluZ0Jsb2NrKGxheW91dENvbnRleHQsIGxheW91dEJveCkpIHsKKyAgICBpZiAoIWlzU3Ry
ZXRjaGVkVG9Jbml0aWFsQ29udGFpbmluZ0Jsb2NrKGxheW91dFN0YXRlLCBsYXlvdXRCb3gpKSB7
CiAgICAgICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFt
IDw8ICJbV2lkdGhdW01hcmdpbl0gLT4gaW5mbG93IG5vbi1yZXBsYWNlZCAtPiB3aWR0aCgiIDw8
IHdpZHRoQW5kTWFyZ2luLndpZHRoIDw8ICJweCkgbWFyZ2luKCIgPDwgd2lkdGhBbmRNYXJnaW4u
bWFyZ2luLmxlZnQgPDwgInB4LCAiIDw8IHdpZHRoQW5kTWFyZ2luLm1hcmdpbi5yaWdodCA8PCAi
cHgpIC0+IGxheW91dEJveCgiIDw8ICZsYXlvdXRCb3ggPDwgIikiKTsKICAgICAgICAgcmV0dXJu
IHdpZHRoQW5kTWFyZ2luOwogICAgIH0KIAotICAgIGF1dG8gaW5pdGlhbENvbnRhaW5pbmdCbG9j
a1dpZHRoID0gbGF5b3V0Q29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGluaXRpYWxDb250
YWluaW5nQmxvY2sobGF5b3V0Qm94KSkuY29udGVudEJveFdpZHRoKCk7CisgICAgYXV0byBpbml0
aWFsQ29udGFpbmluZ0Jsb2NrV2lkdGggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0
Qm94KGluaXRpYWxDb250YWluaW5nQmxvY2sobGF5b3V0Qm94KSkuY29udGVudEJveFdpZHRoKCk7
CiAgICAgd2lkdGhBbmRNYXJnaW4gPSBzdHJldGNoV2lkdGhUb0luaXRpYWxDb250YWluaW5nQmxv
Y2sod2lkdGhBbmRNYXJnaW4sIGluaXRpYWxDb250YWluaW5nQmxvY2tXaWR0aCk7CiAKICAgICBM
T0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW1dpZHRo
XVtNYXJnaW5dIC0+IGluZmxvdyBub24tcmVwbGFjZWQgLT4gc3RyZWNoZWQgdG8gdmlld3BvcnQt
PiB3aWR0aCgiIDw8IHdpZHRoQW5kTWFyZ2luLndpZHRoIDw8ICJweCkgbWFyZ2luKCIgPDwgd2lk
dGhBbmRNYXJnaW4ubWFyZ2luLmxlZnQgPDwgInB4LCAiIDw8IHdpZHRoQW5kTWFyZ2luLm1hcmdp
bi5yaWdodCA8PCAicHgpIC0+IGxheW91dEJveCgiIDw8ICZsYXlvdXRCb3ggPDwgIikiKTsKICAg
ICByZXR1cm4gd2lkdGhBbmRNYXJnaW47CiB9CiAKLVdpZHRoQW5kTWFyZ2luIEJsb2NrRm9ybWF0
dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dSZXBsYWNlZFdpZHRoQW5kTWFyZ2luKGNvbnN0
IExheW91dENvbnRleHQmIGxheW91dENvbnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94LCBzdGQ6
Om9wdGlvbmFsPExheW91dFVuaXQ+IHVzZWRXaWR0aCkKK1dpZHRoQW5kTWFyZ2luIEJsb2NrRm9y
bWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dSZXBsYWNlZFdpZHRoQW5kTWFyZ2luKGNv
bnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgQm94JiBsYXlvdXRCb3gsIHN0ZDo6
b3B0aW9uYWw8TGF5b3V0VW5pdD4gdXNlZFdpZHRoKQogewogICAgIEFTU0VSVChsYXlvdXRCb3gu
aXNJbkZsb3coKSAmJiBsYXlvdXRCb3gucmVwbGFjZWQoKSk7CiAKQEAgLTI2MywxNSArMjYzLDE1
IEBAIFdpZHRoQW5kTWFyZ2luIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZs
b3dSZXBsYWNlZFdpZHRoQW5kTWFyZ2luKGNvCiAgICAgLy8gMi4gVGhlbiB0aGUgcnVsZXMgZm9y
IG5vbi1yZXBsYWNlZCBibG9jay1sZXZlbCBlbGVtZW50cyBhcmUgYXBwbGllZCB0byBkZXRlcm1p
bmUgdGhlIG1hcmdpbnMuCiAKICAgICAvLyAjMQotICAgIGF1dG8gd2lkdGggPSBpbmxpbmVSZXBs
YWNlZFdpZHRoQW5kTWFyZ2luKGxheW91dENvbnRleHQsIGxheW91dEJveCwgdXNlZFdpZHRoKS53
aWR0aDsKKyAgICBhdXRvIHdpZHRoID0gaW5saW5lUmVwbGFjZWRXaWR0aEFuZE1hcmdpbihsYXlv
dXRTdGF0ZSwgbGF5b3V0Qm94LCB1c2VkV2lkdGgpLndpZHRoOwogICAgIC8vICMyCi0gICAgYXV0
byBub25SZXBsYWNlZFdpZHRoQW5kTWFyZ2luID0gaW5GbG93Tm9uUmVwbGFjZWRXaWR0aEFuZE1h
cmdpbihsYXlvdXRDb250ZXh0LCBsYXlvdXRCb3gsIHdpZHRoKTsKKyAgICBhdXRvIG5vblJlcGxh
Y2VkV2lkdGhBbmRNYXJnaW4gPSBpbkZsb3dOb25SZXBsYWNlZFdpZHRoQW5kTWFyZ2luKGxheW91
dFN0YXRlLCBsYXlvdXRCb3gsIHdpZHRoKTsKIAogICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0
aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbV2lkdGhdW01hcmdpbl0gLT4gaW5mbG93IHJl
cGxhY2VkIC0+IHdpZHRoKCIgPDwgd2lkdGggPDwgInB4KSBtYXJnaW4oIiA8PCBub25SZXBsYWNl
ZFdpZHRoQW5kTWFyZ2luLm1hcmdpbi5sZWZ0IDw8ICJweCwgIiA8PCBub25SZXBsYWNlZFdpZHRo
QW5kTWFyZ2luLm1hcmdpbi5yaWdodCA8PCAicHgpIC0+IGxheW91dEJveCgiIDw8ICZsYXlvdXRC
b3ggPDwgIikiKTsKICAgICByZXR1cm4geyB3aWR0aCwgbm9uUmVwbGFjZWRXaWR0aEFuZE1hcmdp
bi5tYXJnaW4sIG5vblJlcGxhY2VkV2lkdGhBbmRNYXJnaW4ubm9uQ29tcHV0ZWRNYXJnaW4gfTsK
IH0KIAotUG9zaXRpb24gQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0YXRpY1Bv
c2l0aW9uKGNvbnN0IExheW91dENvbnRleHQmIGxheW91dENvbnRleHQsIGNvbnN0IEJveCYgbGF5
b3V0Qm94KQorUG9zaXRpb24gQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0YXRp
Y1Bvc2l0aW9uKGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgQm94JiBsYXlv
dXRCb3gpCiB7CiAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL0NTUzIyL3Zpc3VyZW4uaHRt
bCNibG9jay1mb3JtYXR0aW5nCiAgICAgLy8gSW4gYSBibG9jayBmb3JtYXR0aW5nIGNvbnRleHQs
IGJveGVzIGFyZSBsYWlkIG91dCBvbmUgYWZ0ZXIgdGhlIG90aGVyLCB2ZXJ0aWNhbGx5LCBiZWdp
bm5pbmcgYXQgdGhlIHRvcCBvZiBhIGNvbnRhaW5pbmcgYmxvY2suCkBAIC0yODAsOSArMjgwLDkg
QEAgUG9zaXRpb24gQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0YXRpY1Bvc2l0
aW9uKGNvbnN0IExheW91dENvbnRleHQmIGwKICAgICAvLyBJbiBhIGJsb2NrIGZvcm1hdHRpbmcg
Y29udGV4dCwgZWFjaCBib3gncyBsZWZ0IG91dGVyIGVkZ2UgdG91Y2hlcyB0aGUgbGVmdCBlZGdl
IG9mIHRoZSBjb250YWluaW5nIGJsb2NrIChmb3IgcmlnaHQtdG8tbGVmdCBmb3JtYXR0aW5nLCBy
aWdodCBlZGdlcyB0b3VjaCkuCiAKICAgICBMYXlvdXRVbml0IHRvcDsKLSAgICBhdXRvJiBjb250
YWluaW5nQmxvY2tEaXNwbGF5Qm94ID0gbGF5b3V0Q29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0
Qm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpOworICAgIGF1dG8mIGNvbnRhaW5pbmdC
bG9ja0Rpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlv
dXRCb3guY29udGFpbmluZ0Jsb2NrKCkpOwogICAgIGlmIChhdXRvKiBwcmV2aW91c0luRmxvd1Np
YmxpbmcgPSBsYXlvdXRCb3gucHJldmlvdXNJbkZsb3dTaWJsaW5nKCkpIHsKLSAgICAgICAgYXV0
byYgcHJldmlvdXNJbkZsb3dEaXNwbGF5Qm94ID0gbGF5b3V0Q29udGV4dC5kaXNwbGF5Qm94Rm9y
TGF5b3V0Qm94KCpwcmV2aW91c0luRmxvd1NpYmxpbmcpOworICAgICAgICBhdXRvJiBwcmV2aW91
c0luRmxvd0Rpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpw
cmV2aW91c0luRmxvd1NpYmxpbmcpOwogICAgICAgICB0b3AgPSBwcmV2aW91c0luRmxvd0Rpc3Bs
YXlCb3guYm90dG9tKCkgKyBwcmV2aW91c0luRmxvd0Rpc3BsYXlCb3gubWFyZ2luQm90dG9tKCk7
CiAgICAgfSBlbHNlCiAgICAgICAgIHRvcCA9IGNvbnRhaW5pbmdCbG9ja0Rpc3BsYXlCb3guY29u
dGVudEJveFRvcCgpOwpAQCAtMjkyLDcgKzI5Miw3IEBAIFBvc2l0aW9uIEJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQ6Okdlb21ldHJ5OjpzdGF0aWNQb3NpdGlvbihjb25zdCBMYXlvdXRDb250ZXh0JiBs
CiAgICAgcmV0dXJuIHsgbGVmdCwgdG9wIH07CiB9CiAKLVBvc2l0aW9uIEJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dQb3NpdGlvbmVkUG9zaXRpb24oY29uc3QgTGF5b3V0
Q29udGV4dCYgbGF5b3V0Q29udGV4dCwgY29uc3QgQm94JiBsYXlvdXRCb3gpCitQb3NpdGlvbiBC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5GbG93UG9zaXRpb25lZFBvc2l0aW9u
KGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgQm94JiBsYXlvdXRCb3gpCiB7
CiAgICAgQVNTRVJUKGxheW91dEJveC5pc0luRmxvd1Bvc2l0aW9uZWQoKSk7CiAKQEAgLTMwNiw5
ICszMDYsOSBAQCBQb3NpdGlvbiBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5G
bG93UG9zaXRpb25lZFBvc2l0aW9uKGNvbnN0IExheW91dAogICAgIC8vIDMuIElmIG5laXRoZXIg
aXMgJ2F1dG8nLCAnYm90dG9tJyBpcyBpZ25vcmVkIChpLmUuLCB0aGUgdXNlZCB2YWx1ZSBvZiAn
Ym90dG9tJyB3aWxsIGJlIG1pbnVzIHRoZSB2YWx1ZSBvZiAndG9wJykuCiAKICAgICBhdXRvJiBz
dHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwotICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRD
b250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKKyAgICBhdXRvJiBkaXNw
bGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOwog
ICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9jayA9ICpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCk7
Ci0gICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGxheW91dENvbnRleHQuZGlzcGxheUJv
eEZvckxheW91dEJveChjb250YWluaW5nQmxvY2spLmNvbnRlbnRCb3hXaWR0aCgpOworICAgIGF1
dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0
Qm94KGNvbnRhaW5pbmdCbG9jaykuY29udGVudEJveFdpZHRoKCk7CiAKICAgICBhdXRvIHRvcCA9
IGNvbXB1dGVkVmFsdWVJZk5vdEF1dG8oc3R5bGUubG9naWNhbFRvcCgpLCBjb250YWluaW5nQmxv
Y2tXaWR0aCk7CiAgICAgYXV0byBib3R0b20gPSBjb21wdXRlZFZhbHVlSWZOb3RBdXRvKHN0eWxl
LmxvZ2ljYWxCb3R0b20oKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwpAQCAtMzY5LDQyICszNjks
NDIgQEAgUG9zaXRpb24gQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmluRmxvd1Bv
c2l0aW9uZWRQb3NpdGlvbihjb25zdCBMYXlvdXQKICAgICByZXR1cm4geyBuZXdMZWZ0UG9zaXRp
b24sIG5ld1RvcFBvc2l0aW9uIH07CiB9CiAKLUhlaWdodEFuZE1hcmdpbiBCbG9ja0Zvcm1hdHRp
bmdDb250ZXh0OjpHZW9tZXRyeTo6aW5GbG93SGVpZ2h0QW5kTWFyZ2luKGNvbnN0IExheW91dENv
bnRleHQmIGxheW91dENvbnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94LCBzdGQ6Om9wdGlvbmFs
PExheW91dFVuaXQ+IHVzZWRIZWlnaHQpCitIZWlnaHRBbmRNYXJnaW4gQmxvY2tGb3JtYXR0aW5n
Q29udGV4dDo6R2VvbWV0cnk6OmluRmxvd0hlaWdodEFuZE1hcmdpbihjb25zdCBMYXlvdXRTdGF0
ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IEJveCYgbGF5b3V0Qm94LCBzdGQ6Om9wdGlvbmFsPExheW91
dFVuaXQ+IHVzZWRIZWlnaHQpCiB7CiAgICAgQVNTRVJUKGxheW91dEJveC5pc0luRmxvdygpKTsK
IAogICAgIC8vIDEwLjYuMiBJbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMsIGJsb2NrLWxldmVsIHJl
cGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93LCAnaW5saW5lLWJsb2NrJwogICAgIC8vIHJl
cGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93IGFuZCBmbG9hdGluZyByZXBsYWNlZCBlbGVt
ZW50cwogICAgIGlmIChsYXlvdXRCb3gucmVwbGFjZWQoKSkKLSAgICAgICAgcmV0dXJuIGlubGlu
ZVJlcGxhY2VkSGVpZ2h0QW5kTWFyZ2luKGxheW91dENvbnRleHQsIGxheW91dEJveCwgdXNlZEhl
aWdodCk7CisgICAgICAgIHJldHVybiBpbmxpbmVSZXBsYWNlZEhlaWdodEFuZE1hcmdpbihsYXlv
dXRTdGF0ZSwgbGF5b3V0Qm94LCB1c2VkSGVpZ2h0KTsKIAogICAgIEhlaWdodEFuZE1hcmdpbiBo
ZWlnaHRBbmRNYXJnaW47CiAgICAgLy8gVE9ETzogRmlndXJlIG91dCB0aGUgY2FzZSBmb3IgdGhl
IGRvY3VtZW50IGVsZW1lbnQuIExldCdzIGp1c3QgY29tcGxpY2F0ZWQtY2FzZSBpdCBmb3Igbm93
LgogICAgIGlmIChsYXlvdXRCb3guaXNPdmVyZmxvd1Zpc2libGUoKSAmJiAhbGF5b3V0Qm94Lmlz
RG9jdW1lbnRCb3goKSkKLSAgICAgICAgaGVpZ2h0QW5kTWFyZ2luID0gaW5GbG93Tm9uUmVwbGFj
ZWRIZWlnaHRBbmRNYXJnaW4obGF5b3V0Q29udGV4dCwgbGF5b3V0Qm94LCB1c2VkSGVpZ2h0KTsK
KyAgICAgICAgaGVpZ2h0QW5kTWFyZ2luID0gaW5GbG93Tm9uUmVwbGFjZWRIZWlnaHRBbmRNYXJn
aW4obGF5b3V0U3RhdGUsIGxheW91dEJveCwgdXNlZEhlaWdodCk7CiAgICAgZWxzZSB7CiAgICAg
ICAgIC8vIDEwLjYuNiBDb21wbGljYXRlZCBjYXNlcwogICAgICAgICAvLyBCbG9jay1sZXZlbCwg
bm9uLXJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93IHdoZW4gJ292ZXJmbG93JyBkb2Vz
IG5vdCBjb21wdXRlIHRvICd2aXNpYmxlJyAoZXhjZXB0IGlmIHRoZSAnb3ZlcmZsb3cnIHByb3Bl
cnR5J3MgdmFsdWUgaGFzIGJlZW4gcHJvcGFnYXRlZCB0byB0aGUgdmlld3BvcnQpLgotICAgICAg
ICBoZWlnaHRBbmRNYXJnaW4gPSBjb21wbGljYXRlZENhc2VzKGxheW91dENvbnRleHQsIGxheW91
dEJveCwgdXNlZEhlaWdodCk7CisgICAgICAgIGhlaWdodEFuZE1hcmdpbiA9IGNvbXBsaWNhdGVk
Q2FzZXMobGF5b3V0U3RhdGUsIGxheW91dEJveCwgdXNlZEhlaWdodCk7CiAgICAgfQogCi0gICAg
aWYgKCFpc1N0cmV0Y2hlZFRvSW5pdGlhbENvbnRhaW5pbmdCbG9jayhsYXlvdXRDb250ZXh0LCBs
YXlvdXRCb3gpKQorICAgIGlmICghaXNTdHJldGNoZWRUb0luaXRpYWxDb250YWluaW5nQmxvY2so
bGF5b3V0U3RhdGUsIGxheW91dEJveCkpCiAgICAgICAgIHJldHVybiBoZWlnaHRBbmRNYXJnaW47
CiAKLSAgICBhdXRvIGluaXRpYWxDb250YWluaW5nQmxvY2tIZWlnaHQgPSBsYXlvdXRDb250ZXh0
LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goaW5pdGlhbENvbnRhaW5pbmdCbG9jayhsYXlvdXRCb3gp
KS5jb250ZW50Qm94SGVpZ2h0KCk7CisgICAgYXV0byBpbml0aWFsQ29udGFpbmluZ0Jsb2NrSGVp
Z2h0ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChpbml0aWFsQ29udGFpbmlu
Z0Jsb2NrKGxheW91dEJveCkpLmNvbnRlbnRCb3hIZWlnaHQoKTsKICAgICBoZWlnaHRBbmRNYXJn
aW4gPSBzdHJldGNoSGVpZ2h0VG9Jbml0aWFsQ29udGFpbmluZ0Jsb2NrKGhlaWdodEFuZE1hcmdp
biwgaW5pdGlhbENvbnRhaW5pbmdCbG9ja0hlaWdodCk7CiAKICAgICBMT0dfV0lUSF9TVFJFQU0o
Rm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW0hlaWdodF1bTWFyZ2luXSAtPiBp
bmZsb3cgbm9uLXJlcGxhY2VkIC0+IHN0cmVjaGVkIHRvIHZpZXdwb3J0IC0+IGhlaWdodCgiIDw8
IGhlaWdodEFuZE1hcmdpbi5oZWlnaHQgPDwgInB4KSBtYXJnaW4oIiA8PCBoZWlnaHRBbmRNYXJn
aW4ubWFyZ2luLnRvcCA8PCAicHgsICIgPDwgaGVpZ2h0QW5kTWFyZ2luLm1hcmdpbi5ib3R0b20g
PDwgInB4KSAtPiBsYXlvdXRCb3goIiA8PCAmbGF5b3V0Qm94IDw8ICIpIik7CiAgICAgcmV0dXJu
IGhlaWdodEFuZE1hcmdpbjsKIH0KIAotV2lkdGhBbmRNYXJnaW4gQmxvY2tGb3JtYXR0aW5nQ29u
dGV4dDo6R2VvbWV0cnk6OmluRmxvd1dpZHRoQW5kTWFyZ2luKGNvbnN0IExheW91dENvbnRleHQm
IGxheW91dENvbnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94LCBzdGQ6Om9wdGlvbmFsPExheW91
dFVuaXQ+IHVzZWRXaWR0aCkKK1dpZHRoQW5kTWFyZ2luIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6
Okdlb21ldHJ5OjppbkZsb3dXaWR0aEFuZE1hcmdpbihjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0
U3RhdGUsIGNvbnN0IEJveCYgbGF5b3V0Qm94LCBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IHVz
ZWRXaWR0aCkKIHsKICAgICBBU1NFUlQobGF5b3V0Qm94LmlzSW5GbG93KCkpOwogCiAgICAgaWYg
KCFsYXlvdXRCb3gucmVwbGFjZWQoKSkKLSAgICAgICAgcmV0dXJuIGluRmxvd05vblJlcGxhY2Vk
V2lkdGhBbmRNYXJnaW4obGF5b3V0Q29udGV4dCwgbGF5b3V0Qm94LCB1c2VkV2lkdGgpOwotICAg
IHJldHVybiBpbkZsb3dSZXBsYWNlZFdpZHRoQW5kTWFyZ2luKGxheW91dENvbnRleHQsIGxheW91
dEJveCwgdXNlZFdpZHRoKTsKKyAgICAgICAgcmV0dXJuIGluRmxvd05vblJlcGxhY2VkV2lkdGhB
bmRNYXJnaW4obGF5b3V0U3RhdGUsIGxheW91dEJveCwgdXNlZFdpZHRoKTsKKyAgICByZXR1cm4g
aW5GbG93UmVwbGFjZWRXaWR0aEFuZE1hcmdpbihsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94LCB1c2Vk
V2lkdGgpOwogfQogCiBib29sIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbnN0
cmluc2ljV2lkdGhDb25zdHJhaW50c05lZWRDaGlsZHJlbldpZHRoKGNvbnN0IEJveCYgbGF5b3V0
Qm94KQpAQCAtNDE0LDcgKzQxNCw3IEBAIGJvb2wgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2Vv
bWV0cnk6Omluc3RyaW5zaWNXaWR0aENvbnN0cmFpbnRzTmVlZENoaWxkcmVuV2lkCiAgICAgcmV0
dXJuIGxheW91dEJveC5zdHlsZSgpLndpZHRoKCkuaXNBdXRvKCk7CiB9CiAKLUZvcm1hdHRpbmdD
b250ZXh0OjpJbnN0cmluc2ljV2lkdGhDb25zdHJhaW50cyBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
OjpHZW9tZXRyeTo6aW5zdHJpbnNpY1dpZHRoQ29uc3RyYWludHMoY29uc3QgTGF5b3V0Q29udGV4
dCYgbGF5b3V0Q29udGV4dCwgY29uc3QgQm94JiBsYXlvdXRCb3gpCitGb3JtYXR0aW5nQ29udGV4
dDo6SW5zdHJpbnNpY1dpZHRoQ29uc3RyYWludHMgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2Vv
bWV0cnk6Omluc3RyaW5zaWNXaWR0aENvbnN0cmFpbnRzKGNvbnN0IExheW91dFN0YXRlJiBsYXlv
dXRTdGF0ZSwgY29uc3QgQm94JiBsYXlvdXRCb3gpCiB7CiAgICAgYXV0byYgc3R5bGUgPSBsYXlv
dXRCb3guc3R5bGUoKTsKICAgICBpZiAoYXV0byB3aWR0aCA9IGZpeGVkVmFsdWUoc3R5bGUubG9n
aWNhbFdpZHRoKCkpKQpAQCAtNDMzLDcgKzQzMyw3IEBAIEZvcm1hdHRpbmdDb250ZXh0OjpJbnN0
cmluc2ljV2lkdGhDb25zdHJhaW50cyBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6
CiAgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPEJveD4oZG93bmNhc3Q8Q29u
dGFpbmVyPihsYXlvdXRCb3gpKSkgewogICAgICAgICBpZiAoY2hpbGQuaXNPdXRPZkZsb3dQb3Np
dGlvbmVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgYXV0byYgZm9ybWF0dGlu
Z1N0YXRlID0gbGF5b3V0Q29udGV4dC5mb3JtYXR0aW5nU3RhdGVGb3JCb3goY2hpbGQpOworICAg
ICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSBsYXlvdXRTdGF0ZS5mb3JtYXR0aW5nU3RhdGVG
b3JCb3goY2hpbGQpOwogICAgICAgICBBU1NFUlQoZm9ybWF0dGluZ1N0YXRlLmlzQmxvY2tGb3Jt
YXR0aW5nU3RhdGUoKSk7CiAgICAgICAgIGF1dG8gY2hpbGRJbnN0cmluc2ljV2lkdGhDb25zdHJh
aW50cyA9IGZvcm1hdHRpbmdTdGF0ZS5pbnN0cmluc2ljV2lkdGhDb25zdHJhaW50cyhjaGlsZCk7
CiAgICAgICAgIEFTU0VSVChjaGlsZEluc3RyaW5zaWNXaWR0aENvbnN0cmFpbnRzKTsKQEAgLTQ1
Myw3ICs0NTMsNyBAQCBGb3JtYXR0aW5nQ29udGV4dDo6SW5zdHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHMgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OgogICAgIHJldHVybiB7IG1pbmlt
dW1JbnRyaW5zaWNXaWR0aCwgbWF4aW11bUludHJpbnNpY1dpZHRoIH07CiB9CiAKLUxheW91dFVu
aXQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmVzdGltYXRlZE1hcmdpblRvcChj
b25zdCBMYXlvdXRDb250ZXh0JiBsYXlvdXRDb250ZXh0LCBjb25zdCBCb3gmIGxheW91dEJveCkK
K0xheW91dFVuaXQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmVzdGltYXRlZE1h
cmdpblRvcChjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IEJveCYgbGF5b3V0
Qm94KQogewogICAgIEFTU0VSVChsYXlvdXRCb3guaXNCbG9ja0xldmVsQm94KCkpOwogICAgIC8v
IENhbid0IGVzdGltYXRlIHZlcnRpY2FsIG1hcmdpbnMgZm9yIG91dCBvZiBmbG93IGJveGVzIChh
bmQgd2Ugc2hvdWxkbid0IG5lZWQgdG8gZG8gaXQgZm9yIGZsb2F0IGJveGVzKS4KQEAgLTQ2Miw3
ICs0NjIsNyBAQCBMYXlvdXRVbml0IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpl
c3RpbWF0ZWRNYXJnaW5Ub3AoY29uc3QgTGF5b3V0Q29udAogICAgIEFTU0VSVCghbGF5b3V0Qm94
LmVzdGFibGlzaGVzQmxvY2tGb3JtYXR0aW5nQ29udGV4dCgpKTsKIAogICAgIC8vIExldCdzIGp1
c3QgdXNlIHRoZSBub3JtYWwgcGF0aCBmb3Igbm93LgotICAgIHJldHVybiBNYXJnaW5Db2xsYXBz
ZTo6bWFyZ2luVG9wKGxheW91dENvbnRleHQsIGxheW91dEJveCk7CisgICAgcmV0dXJuIE1hcmdp
bkNvbGxhcHNlOjptYXJnaW5Ub3AobGF5b3V0U3RhdGUsIGxheW91dEJveCk7CiB9CiAKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1h
dHRpbmdTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Js
b2NrRm9ybWF0dGluZ1N0YXRlLmNwcAppbmRleCAwNmNhNmQ5MDRiNDFlY2QzYWI3N2RjMzlhYzVk
NDI4MzRjMDVhY2IyLi4wZDI0OTFlYzY0NmRlMjA4MzdmMWZhMWI4Yjk4MDYwNzg4MGRiYzVjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9y
bWF0dGluZ1N0YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0
aW5nL0Jsb2NrRm9ybWF0dGluZ1N0YXRlLmNwcApAQCAtMzcsOCArMzcsOCBAQCBuYW1lc3BhY2Ug
TGF5b3V0IHsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEJsb2NrRm9ybWF0dGluZ1N0
YXRlKTsKIAotQmxvY2tGb3JtYXR0aW5nU3RhdGU6OkJsb2NrRm9ybWF0dGluZ1N0YXRlKFJlZjxG
bG9hdGluZ1N0YXRlPiYmIGZsb2F0aW5nU3RhdGUsIGNvbnN0IExheW91dENvbnRleHQmIGxheW91
dENvbnRleHQpCi0gICAgOiBGb3JtYXR0aW5nU3RhdGUoV1RGTW92ZShmbG9hdGluZ1N0YXRlKSwg
VHlwZTo6QmxvY2ssIGxheW91dENvbnRleHQpCitCbG9ja0Zvcm1hdHRpbmdTdGF0ZTo6QmxvY2tG
b3JtYXR0aW5nU3RhdGUoUmVmPEZsb2F0aW5nU3RhdGU+JiYgZmxvYXRpbmdTdGF0ZSwgY29uc3Qg
TGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKQorICAgIDogRm9ybWF0dGluZ1N0YXRlKFdURk1vdmUo
ZmxvYXRpbmdTdGF0ZSksIFR5cGU6OkJsb2NrLCBsYXlvdXRTdGF0ZSkKIHsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRp
bmdTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zv
cm1hdHRpbmdTdGF0ZS5oCmluZGV4IGMxOTZmNWQ5YjA3MzBhNzI1YTY3NWQ3ZmVkMDdjZjFmNDA4
N2IwOWMuLmI0NmI4YzlhODUzZjE2NTMxMmQ0ZTllNzVmMDU3Mjc3M2ZlOTE0MzQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5n
U3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2Nr
Rm9ybWF0dGluZ1N0YXRlLmgKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIExheW91dCB7CiBj
bGFzcyBCbG9ja0Zvcm1hdHRpbmdTdGF0ZSA6IHB1YmxpYyBGb3JtYXR0aW5nU3RhdGUgewogICAg
IFdURl9NQUtFX0lTT19BTExPQ0FURUQoQmxvY2tGb3JtYXR0aW5nU3RhdGUpOwogcHVibGljOgot
ICAgIEJsb2NrRm9ybWF0dGluZ1N0YXRlKFJlZjxGbG9hdGluZ1N0YXRlPiYmLCBjb25zdCBMYXlv
dXRDb250ZXh0Jik7CisgICAgQmxvY2tGb3JtYXR0aW5nU3RhdGUoUmVmPEZsb2F0aW5nU3RhdGU+
JiYsIGNvbnN0IExheW91dFN0YXRlJik7CiAgICAgdmlydHVhbCB+QmxvY2tGb3JtYXR0aW5nU3Rh
dGUoKTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1h
dHRpbmcvQmxvY2tJbnZhbGlkYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2Nr
Zm9ybWF0dGluZy9CbG9ja0ludmFsaWRhdGlvbi5jcHAKaW5kZXggYTlmYTE5MmIxMzMxZjQyZDg4
ZGUyOThjZTQ1N2JiYzYzNGU3N2UwNy4uMDA2NGRkMWQ5ZGM3ZTdkMTBmMzJiMzg1M2U1OTBkODVk
ODJmZmVhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGlu
Zy9CbG9ja0ludmFsaWRhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2Nr
Zm9ybWF0dGluZy9CbG9ja0ludmFsaWRhdGlvbi5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNs
dWRlICJJbnZhbGlkYXRpb24uaCIKICNpbmNsdWRlICJMYXlvdXRCb3guaCIKICNpbmNsdWRlICJM
YXlvdXRDb250YWluZXIuaCIKLSNpbmNsdWRlICJMYXlvdXRDb250ZXh0LmgiCisjaW5jbHVkZSAi
TGF5b3V0Rm9ybWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDgsMjUgKzQ4LDI1IEBAIHN0YXRpYyBib29s
IGludmFsaWRhdGlvblN0b3BzQXRGb3JtYXR0aW5nQ29udGV4dEJvdW5kYXJ5KGNvbnN0IENvbnRh
aW5lciYgZm9ybWF0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBMYXlvdXRDb250ZXh0
OjpVcGRhdGVUeXBlIGNvbXB1dGVVcGRhdGVUeXBlKGNvbnN0IEJveCYsIFN0eWxlRGlmZiwgQmxv
Y2tGb3JtYXR0aW5nU3RhdGUmKQorc3RhdGljIExheW91dFN0YXRlOjpVcGRhdGVUeXBlIGNvbXB1
dGVVcGRhdGVUeXBlKGNvbnN0IEJveCYsIFN0eWxlRGlmZiwgQmxvY2tGb3JtYXR0aW5nU3RhdGUm
KQogewotICAgIHJldHVybiBMYXlvdXRDb250ZXh0OjpVcGRhdGVUeXBlOjpBbGw7CisgICAgcmV0
dXJuIExheW91dFN0YXRlOjpVcGRhdGVUeXBlOjpBbGw7CiB9CiAKLXN0YXRpYyBMYXlvdXRDb250
ZXh0OjpVcGRhdGVUeXBlIGNvbXB1dGVVcGRhdGVUeXBlRm9yQW5jZXN0b3IoY29uc3QgQ29udGFp
bmVyJiwgU3R5bGVEaWZmLCBCbG9ja0Zvcm1hdHRpbmdTdGF0ZSYpCitzdGF0aWMgTGF5b3V0U3Rh
dGU6OlVwZGF0ZVR5cGUgY29tcHV0ZVVwZGF0ZVR5cGVGb3JBbmNlc3Rvcihjb25zdCBDb250YWlu
ZXImLCBTdHlsZURpZmYsIEJsb2NrRm9ybWF0dGluZ1N0YXRlJikKIHsKLSAgICByZXR1cm4gTGF5
b3V0Q29udGV4dDo6VXBkYXRlVHlwZTo6QWxsOworICAgIHJldHVybiBMYXlvdXRTdGF0ZTo6VXBk
YXRlVHlwZTo6QWxsOwogfQogCi1JbnZhbGlkYXRpb25SZXN1bHQgQmxvY2tJbnZhbGlkYXRpb246
OmludmFsaWRhdGUoY29uc3QgQm94JiBsYXlvdXRCb3gsIFN0eWxlRGlmZiBzdHlsZURpZmYsIExh
eW91dENvbnRleHQmIGxheW91dENvbnRleHQsCitJbnZhbGlkYXRpb25SZXN1bHQgQmxvY2tJbnZh
bGlkYXRpb246OmludmFsaWRhdGUoY29uc3QgQm94JiBsYXlvdXRCb3gsIFN0eWxlRGlmZiBzdHls
ZURpZmYsIExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwKICAgICBCbG9ja0Zvcm1hdHRpbmdTdGF0
ZSYgZm9ybWF0dGluZ1N0YXRlKQogewogICAgIC8vIEludmFsaWRhdGUgdGhpcyBib3ggYW5kIHRo
ZSBjb250YWluaW5nIGJsb2NrIGNoYWluIGFsbCB0aGUgd2F5IHVwIHRvIHRoZSBmb3JtYXR0aW5n
IGNvbnRleHQgcm9vdCAoYW5kIGJleW9uZCBpZiBuZWVkZWQpLgotICAgIGxheW91dENvbnRleHQu
bWFya05lZWRzVXBkYXRlKGxheW91dEJveCwgY29tcHV0ZVVwZGF0ZVR5cGUobGF5b3V0Qm94LCBz
dHlsZURpZmYsIGZvcm1hdHRpbmdTdGF0ZSkpOworICAgIGxheW91dFN0YXRlLm1hcmtOZWVkc1Vw
ZGF0ZShsYXlvdXRCb3gsIGNvbXB1dGVVcGRhdGVUeXBlKGxheW91dEJveCwgc3R5bGVEaWZmLCBm
b3JtYXR0aW5nU3RhdGUpKTsKICAgICBmb3IgKGF1dG8qIGNvbnRhaW5pbmdCbG9jayA9IGxheW91
dEJveC5jb250YWluaW5nQmxvY2soKTsgY29udGFpbmluZ0Jsb2NrOyBjb250YWluaW5nQmxvY2sg
PSBjb250YWluaW5nQmxvY2stPmNvbnRhaW5pbmdCbG9jaygpKSB7CiAgICAgICAgIGlmIChjb250
YWluaW5nQmxvY2stPmVzdGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQoKSAmJiBpbnZhbGlkYXRp
b25TdG9wc0F0Rm9ybWF0dGluZ0NvbnRleHRCb3VuZGFyeSgqY29udGFpbmluZ0Jsb2NrLCBsYXlv
dXRCb3gsIHN0eWxlRGlmZikpCiAgICAgICAgICAgICByZXR1cm4geyBjb250YWluaW5nQmxvY2sg
fTsKLSAgICAgICAgbGF5b3V0Q29udGV4dC5tYXJrTmVlZHNVcGRhdGUoKmNvbnRhaW5pbmdCbG9j
aywgY29tcHV0ZVVwZGF0ZVR5cGVGb3JBbmNlc3RvcigqY29udGFpbmluZ0Jsb2NrLCBzdHlsZURp
ZmYsIGZvcm1hdHRpbmdTdGF0ZSkpOworICAgICAgICBsYXlvdXRTdGF0ZS5tYXJrTmVlZHNVcGRh
dGUoKmNvbnRhaW5pbmdCbG9jaywgY29tcHV0ZVVwZGF0ZVR5cGVGb3JBbmNlc3RvcigqY29udGFp
bmluZ0Jsb2NrLCBzdHlsZURpZmYsIGZvcm1hdHRpbmdTdGF0ZSkpOwogICAgIH0KICAgICAvLyBJ
bnZhbGlkYXRpb24gYWx3YXlzIHN0b3BzIGF0IHRoZSBpbml0aWFsIGNvbnRhaW5pbmcgYmxvY2su
CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrSW52YWxpZGF0aW9uLmggYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrSW52YWxpZGF0aW9uLmgKaW5kZXggYWVkNDRl
MGExOTYxOTYxOTVlYTFhZDI4ZTY1OTg4MTlmMGI3ZDA5OC4uNTNkZWIzZjdhNzFhYjdjMzUxODc5
ODY3MmUyYzViNGY4ZDcwNjA1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Js
b2NrZm9ybWF0dGluZy9CbG9ja0ludmFsaWRhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tJbnZhbGlkYXRpb24uaApAQCAtMzcsMTQgKzM3LDE0
IEBAIGNsYXNzIEJveDsKIGNsYXNzIEJsb2NrRm9ybWF0dGluZ1N0YXRlOwogY2xhc3MgQ29udGFp
bmVyOwogc3RydWN0IEludmFsaWRhdGlvblJlc3VsdDsKLWNsYXNzIExheW91dENvbnRleHQ7Citj
bGFzcyBMYXlvdXRTdGF0ZTsKIGVudW0gY2xhc3MgU3R5bGVEaWZmOwogCiAvLyBUaGlzIGNsYXNz
IGltcGxlbWVudHMgYm94IGludmFsaWRhdGlvbiBmb3IgYmxvY2sgZm9ybWF0dGluZyBjb250ZXh0
LgogY2xhc3MgQmxvY2tJbnZhbGlkYXRpb24gewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQo
QmxvY2tJbnZhbGlkYXRpb24pOwogcHVibGljOgotICAgIHN0YXRpYyBJbnZhbGlkYXRpb25SZXN1
bHQgaW52YWxpZGF0ZShjb25zdCBCb3gmLCBTdHlsZURpZmYsIExheW91dENvbnRleHQmLCBCbG9j
a0Zvcm1hdHRpbmdTdGF0ZSYpOworICAgIHN0YXRpYyBJbnZhbGlkYXRpb25SZXN1bHQgaW52YWxp
ZGF0ZShjb25zdCBCb3gmLCBTdHlsZURpZmYsIExheW91dFN0YXRlJiwgQmxvY2tGb3JtYXR0aW5n
U3RhdGUmKTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9j
a2Zvcm1hdHRpbmcvQmxvY2tNYXJnaW5Db2xsYXBzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrTWFyZ2luQ29sbGFwc2UuY3BwCmluZGV4IGNjZjZkY2Yz
ZTlhNzNjMjBlZDU3NTI3NDcwZjhkMGVlZmNmZjA0NmMuLjBjMTY2YzE5MjRjN2JiOTA5MWQ0OTdi
MzIwYjZkNjA2N2QzYjJhZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9j
a2Zvcm1hdHRpbmcvQmxvY2tNYXJnaW5Db2xsYXBzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja01hcmdpbkNvbGxhcHNlLmNwcApAQCAtODIsNyAr
ODIsNyBAQCBzdGF0aWMgYm9vbCBpc01hcmdpbkJvdHRvbUNvbGxhcHNlZFdpdGhTaWJsaW5nKGNv
bnN0IEJveCYgbGF5b3V0Qm94KQogICAgIHJldHVybiBsYXlvdXRCb3guc3R5bGUoKS5ib3R0b20o
KS5pc0F1dG8oKTsKIH0KIAotc3RhdGljIGJvb2wgaXNNYXJnaW5Ub3BDb2xsYXBzZWRXaXRoUGFy
ZW50KGNvbnN0IExheW91dENvbnRleHQmIGxheW91dENvbnRleHQsIGNvbnN0IEJveCYgbGF5b3V0
Qm94KQorc3RhdGljIGJvb2wgaXNNYXJnaW5Ub3BDb2xsYXBzZWRXaXRoUGFyZW50KGNvbnN0IExh
eW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgQm94JiBsYXlvdXRCb3gpCiB7CiAgICAgLy8g
VGhlIGZpcnN0IGluZmxvdyBjaGlsZCBjb3VsZCBwcm9wYWdhdGUgaXRzIHRvcCBtYXJnaW4gdG8g
cGFyZW50LgogICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9ib3guaHRtbCNjb2xs
YXBzaW5nLW1hcmdpbnMKQEAgLTEwOCw3ICsxMDgsNyBAQCBzdGF0aWMgYm9vbCBpc01hcmdpblRv
cENvbGxhcHNlZFdpdGhQYXJlbnQoY29uc3QgTGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4dCwg
YwogICAgIGlmIChwYXJlbnQuaXNEb2N1bWVudEJveCgpIHx8IHBhcmVudC5pc0luaXRpYWxDb250
YWluaW5nQmxvY2soKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byYgcGFyZW50
RGlzcGxheUJveCA9IGxheW91dENvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveChwYXJlbnQp
OworICAgIGF1dG8mIHBhcmVudERpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9y
TGF5b3V0Qm94KHBhcmVudCk7CiAgICAgaWYgKHBhcmVudERpc3BsYXlCb3guYm9yZGVyVG9wKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTE4LDEyICsxMTgsMTIgQEAgc3RhdGljIGJv
b2wgaXNNYXJnaW5Ub3BDb2xsYXBzZWRXaXRoUGFyZW50KGNvbnN0IExheW91dENvbnRleHQmIGxh
eW91dENvbnRleHQsIGMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgaXNNYXJn
aW5Cb3R0b21Db2xsYXBzZWRUaHJvdWdoKGNvbnN0IExheW91dENvbnRleHQmIGxheW91dENvbnRl
eHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94KQorc3RhdGljIGJvb2wgaXNNYXJnaW5Cb3R0b21Db2xs
YXBzZWRUaHJvdWdoKGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgQm94JiBs
YXlvdXRCb3gpCiB7CiAgICAgQVNTRVJUKGxheW91dEJveC5pc0Jsb2NrTGV2ZWxCb3goKSk7CiAK
ICAgICAvLyBJZiB0aGUgdG9wIGFuZCBib3R0b20gbWFyZ2lucyBvZiBhIGJveCBhcmUgYWRqb2lu
aW5nLCB0aGVuIGl0IGlzIHBvc3NpYmxlIGZvciBtYXJnaW5zIHRvIGNvbGxhcHNlIHRocm91Z2gg
aXQuCi0gICAgYXV0byYgZGlzcGxheUJveCA9IGxheW91dENvbnRleHQuZGlzcGxheUJveEZvckxh
eW91dEJveChsYXlvdXRCb3gpOworICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5k
aXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CiAKICAgICBpZiAoZGlzcGxheUJveC5i
b3JkZXJUb3AoKSB8fCBkaXNwbGF5Qm94LmJvcmRlckJvdHRvbSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0xNDQsNyArMTQ0LDcgQEAgc3RhdGljIGJvb2wgaXNNYXJnaW5Cb3R0b21Db2xs
YXBzZWRUaHJvdWdoKGNvbnN0IExheW91dENvbnRleHQmIGxheW91dENvbnRleHQsIGMKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotTGF5b3V0VW5pdCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9t
ZXRyeTo6TWFyZ2luQ29sbGFwc2U6OmNvbGxhcHNlZE1hcmdpblRvcEZyb21GaXJzdENoaWxkKGNv
bnN0IExheW91dENvbnRleHQmIGxheW91dENvbnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94KQor
TGF5b3V0VW5pdCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6TWFyZ2luQ29sbGFw
c2U6OmNvbGxhcHNlZE1hcmdpblRvcEZyb21GaXJzdENoaWxkKGNvbnN0IExheW91dFN0YXRlJiBs
YXlvdXRTdGF0ZSwgY29uc3QgQm94JiBsYXlvdXRCb3gpCiB7CiAgICAgQVNTRVJUKGxheW91dEJv
eC5pc0Jsb2NrTGV2ZWxCb3goKSk7CiAKQEAgLTE1OCwxOCArMTU4LDE4IEBAIExheW91dFVuaXQg
QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Ok1hcmdpbkNvbGxhcHNlOjpjb2xsYXBz
ZWRNYXJnaW5Ub3BGCiAKICAgICAvLyBGSVhNRTogVGFrZSBjb2xsYXBzZWQgdGhyb3VnaCBtYXJn
aW4gaW50byBhY2NvdW50LgogICAgIGF1dG8mIGZpcnN0SW5GbG93Q2hpbGQgPSAqZG93bmNhc3Q8
Q29udGFpbmVyPihsYXlvdXRCb3gpLmZpcnN0SW5GbG93Q2hpbGQoKTsKLSAgICBpZiAoIWlzTWFy
Z2luVG9wQ29sbGFwc2VkV2l0aFBhcmVudChsYXlvdXRDb250ZXh0LCBmaXJzdEluRmxvd0NoaWxk
KSkKKyAgICBpZiAoIWlzTWFyZ2luVG9wQ29sbGFwc2VkV2l0aFBhcmVudChsYXlvdXRTdGF0ZSwg
Zmlyc3RJbkZsb3dDaGlsZCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIC8vIENvbGxlY3QgY29s
bGFwc2VkIG1hcmdpbiB0b3AgcmVjdXJzaXZlbHkuCi0gICAgcmV0dXJuIG1hcmdpblZhbHVlKGNv
bXB1dGVkTm9uQ29sbGFwc2VkTWFyZ2luVG9wKGxheW91dENvbnRleHQsIGZpcnN0SW5GbG93Q2hp
bGQpLCBjb2xsYXBzZWRNYXJnaW5Ub3BGcm9tRmlyc3RDaGlsZChsYXlvdXRDb250ZXh0LCBmaXJz
dEluRmxvd0NoaWxkKSk7CisgICAgcmV0dXJuIG1hcmdpblZhbHVlKGNvbXB1dGVkTm9uQ29sbGFw
c2VkTWFyZ2luVG9wKGxheW91dFN0YXRlLCBmaXJzdEluRmxvd0NoaWxkKSwgY29sbGFwc2VkTWFy
Z2luVG9wRnJvbUZpcnN0Q2hpbGQobGF5b3V0U3RhdGUsIGZpcnN0SW5GbG93Q2hpbGQpKTsKIH0K
IAotTGF5b3V0VW5pdCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6TWFyZ2luQ29s
bGFwc2U6Om5vbkNvbGxhcHNlZE1hcmdpblRvcChjb25zdCBMYXlvdXRDb250ZXh0JiBsYXlvdXRD
b250ZXh0LCBjb25zdCBCb3gmIGxheW91dEJveCkKK0xheW91dFVuaXQgQmxvY2tGb3JtYXR0aW5n
Q29udGV4dDo6R2VvbWV0cnk6Ok1hcmdpbkNvbGxhcHNlOjpub25Db2xsYXBzZWRNYXJnaW5Ub3Ao
Y29uc3QgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBCb3gmIGxheW91dEJveCkKIHsK
ICAgICBBU1NFUlQobGF5b3V0Qm94LmlzQmxvY2tMZXZlbEJveCgpKTsKIAogICAgIC8vIE5vbiBj
b2xsYXBzZWQgbWFyZ2luIHRvcCBpbmNsdWRlcyBjb2xsYXBzZWQgbWFyZ2luIGZyb20gaW5mbG93
IGZpcnN0IGNoaWxkLgotICAgIHJldHVybiBtYXJnaW5WYWx1ZShjb21wdXRlZE5vbkNvbGxhcHNl
ZE1hcmdpblRvcChsYXlvdXRDb250ZXh0LCBsYXlvdXRCb3gpLCBjb2xsYXBzZWRNYXJnaW5Ub3BG
cm9tRmlyc3RDaGlsZChsYXlvdXRDb250ZXh0LCBsYXlvdXRCb3gpKTsKKyAgICByZXR1cm4gbWFy
Z2luVmFsdWUoY29tcHV0ZWROb25Db2xsYXBzZWRNYXJnaW5Ub3AobGF5b3V0U3RhdGUsIGxheW91
dEJveCksIGNvbGxhcHNlZE1hcmdpblRvcEZyb21GaXJzdENoaWxkKGxheW91dFN0YXRlLCBsYXlv
dXRCb3gpKTsKIH0KIAogLypzdGF0aWMgYm9vbCBoYXNBZGpvaW5pbmdNYXJnaW5Ub3BBbmRCb3R0
b20oY29uc3QgQm94JikKQEAgLTE4NiwyMSArMTg2LDIxIEBAIExheW91dFVuaXQgQmxvY2tGb3Jt
YXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Ok1hcmdpbkNvbGxhcHNlOjpub25Db2xsYXBzZWRNYXJn
aW5UCiAgICAgLy8gQSBjb2xsYXBzZWQgbWFyZ2luIGlzIGNvbnNpZGVyZWQgYWRqb2luaW5nIHRv
IGFub3RoZXIgbWFyZ2luIGlmIGFueSBvZiBpdHMgY29tcG9uZW50IG1hcmdpbnMgaXMgYWRqb2lu
aW5nIHRvIHRoYXQgbWFyZ2luLgogICAgIHJldHVybiBmYWxzZTsKIH0qLwotTGF5b3V0VW5pdCBC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6TWFyZ2luQ29sbGFwc2U6OmNvbXB1dGVk
Tm9uQ29sbGFwc2VkTWFyZ2luVG9wKGNvbnN0IExheW91dENvbnRleHQmIGxheW91dENvbnRleHQs
IGNvbnN0IEJveCYgbGF5b3V0Qm94KQorTGF5b3V0VW5pdCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
OjpHZW9tZXRyeTo6TWFyZ2luQ29sbGFwc2U6OmNvbXB1dGVkTm9uQ29sbGFwc2VkTWFyZ2luVG9w
KGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgQm94JiBsYXlvdXRCb3gpCiB7
CiAgICAgQVNTRVJUKGxheW91dEJveC5pc0Jsb2NrTGV2ZWxCb3goKSk7CiAKLSAgICByZXR1cm4g
Y29tcHV0ZWROb25Db2xsYXBzZWRWZXJ0aWNhbE1hcmdpblZhbHVlKGxheW91dENvbnRleHQsIGxh
eW91dEJveCkudG9wOworICAgIHJldHVybiBjb21wdXRlZE5vbkNvbGxhcHNlZFZlcnRpY2FsTWFy
Z2luVmFsdWUobGF5b3V0U3RhdGUsIGxheW91dEJveCkudG9wOwogfQogCi1MYXlvdXRVbml0IEJs
b2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpNYXJnaW5Db2xsYXBzZTo6Y29tcHV0ZWRO
b25Db2xsYXBzZWRNYXJnaW5Cb3R0b20oY29uc3QgTGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4
dCwgY29uc3QgQm94JiBsYXlvdXRCb3gpCitMYXlvdXRVbml0IEJsb2NrRm9ybWF0dGluZ0NvbnRl
eHQ6Okdlb21ldHJ5OjpNYXJnaW5Db2xsYXBzZTo6Y29tcHV0ZWROb25Db2xsYXBzZWRNYXJnaW5C
b3R0b20oY29uc3QgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBCb3gmIGxheW91dEJv
eCkKIHsKICAgICBBU1NFUlQobGF5b3V0Qm94LmlzQmxvY2tMZXZlbEJveCgpKTsKIAotICAgIHJl
dHVybiBjb21wdXRlZE5vbkNvbGxhcHNlZFZlcnRpY2FsTWFyZ2luVmFsdWUobGF5b3V0Q29udGV4
dCwgbGF5b3V0Qm94KS5ib3R0b207CisgICAgcmV0dXJuIGNvbXB1dGVkTm9uQ29sbGFwc2VkVmVy
dGljYWxNYXJnaW5WYWx1ZShsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94KS5ib3R0b207CiB9CiAKLUxh
eW91dFVuaXQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Ok1hcmdpbkNvbGxhcHNl
OjptYXJnaW5Ub3AoY29uc3QgTGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4dCwgY29uc3QgQm94
JiBsYXlvdXRCb3gpCitMYXlvdXRVbml0IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5
OjpNYXJnaW5Db2xsYXBzZTo6bWFyZ2luVG9wKGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0
ZSwgY29uc3QgQm94JiBsYXlvdXRCb3gpCiB7CiAgICAgaWYgKGxheW91dEJveC5pc0Fub255bW91
cygpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTIwOCwxNSArMjA4LDE1IEBAIExheW91dFVuaXQg
QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Ok1hcmdpbkNvbGxhcHNlOjptYXJnaW5U
b3AoY29uc3QgTGF5CiAgICAgQVNTRVJUKGxheW91dEJveC5pc0Jsb2NrTGV2ZWxCb3goKSk7CiAK
ICAgICAvLyBUT0RPOiB0YWtlIF9oYXNBZGpvaW5pbmdNYXJnaW5Ub3BBbmRCb3R0b20oKSBpbnRv
IGFjY291bnQuCi0gICAgaWYgKGlzTWFyZ2luVG9wQ29sbGFwc2VkV2l0aFBhcmVudChsYXlvdXRD
b250ZXh0LCBsYXlvdXRCb3gpKQorICAgIGlmIChpc01hcmdpblRvcENvbGxhcHNlZFdpdGhQYXJl
bnQobGF5b3V0U3RhdGUsIGxheW91dEJveCkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYg
KCFpc01hcmdpblRvcENvbGxhcHNlZFdpdGhTaWJsaW5nKGxheW91dEJveCkpIHsKLSAgICAgICAg
aWYgKCFpc01hcmdpbkJvdHRvbUNvbGxhcHNlZFRocm91Z2gobGF5b3V0Q29udGV4dCwgbGF5b3V0
Qm94KSkKLSAgICAgICAgICAgIHJldHVybiBub25Db2xsYXBzZWRNYXJnaW5Ub3AobGF5b3V0Q29u
dGV4dCwgbGF5b3V0Qm94KTsKKyAgICAgICAgaWYgKCFpc01hcmdpbkJvdHRvbUNvbGxhcHNlZFRo
cm91Z2gobGF5b3V0U3RhdGUsIGxheW91dEJveCkpCisgICAgICAgICAgICByZXR1cm4gbm9uQ29s
bGFwc2VkTWFyZ2luVG9wKGxheW91dFN0YXRlLCBsYXlvdXRCb3gpOwogICAgICAgICAvLyBDb21w
dXRlIHRoZSBjb2xsYXBzZWQgdGhyb3VnaCB2YWx1ZS4KLSAgICAgICAgYXV0byBtYXJnaW5Ub3Ag
PSBub25Db2xsYXBzZWRNYXJnaW5Ub3AobGF5b3V0Q29udGV4dCwgbGF5b3V0Qm94KTsKLSAgICAg
ICAgYXV0byBtYXJnaW5Cb3R0b20gPSBub25Db2xsYXBzZWRNYXJnaW5Cb3R0b20obGF5b3V0Q29u
dGV4dCwgbGF5b3V0Qm94KTsgCisgICAgICAgIGF1dG8gbWFyZ2luVG9wID0gbm9uQ29sbGFwc2Vk
TWFyZ2luVG9wKGxheW91dFN0YXRlLCBsYXlvdXRCb3gpOworICAgICAgICBhdXRvIG1hcmdpbkJv
dHRvbSA9IG5vbkNvbGxhcHNlZE1hcmdpbkJvdHRvbShsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94KTsg
CiAgICAgICAgIHJldHVybiBtYXJnaW5WYWx1ZShtYXJnaW5Ub3AsIG1hcmdpbkJvdHRvbSk7CiAg
ICAgfQogCkBAIC0yMjQsMTQgKzIyNCwxNCBAQCBMYXlvdXRVbml0IEJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQ6Okdlb21ldHJ5OjpNYXJnaW5Db2xsYXBzZTo6bWFyZ2luVG9wKGNvbnN0IExheQogICAg
IC8vIHVubGVzcyB0aGF0IHNpYmxpbmcgaGFzIGNsZWFyYW5jZS4KICAgICBhdXRvKiBwcmV2aW91
c0luRmxvd1NpYmxpbmcgPSBsYXlvdXRCb3gucHJldmlvdXNJbkZsb3dTaWJsaW5nKCk7CiAgICAg
aWYgKCFwcmV2aW91c0luRmxvd1NpYmxpbmcpCi0gICAgICAgIHJldHVybiBub25Db2xsYXBzZWRN
YXJnaW5Ub3AobGF5b3V0Q29udGV4dCwgbGF5b3V0Qm94KTsKKyAgICAgICAgcmV0dXJuIG5vbkNv
bGxhcHNlZE1hcmdpblRvcChsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94KTsKIAotICAgIGF1dG8gcHJl
dmlvdXNTaWJsaW5nTWFyZ2luQm90dG9tID0gbm9uQ29sbGFwc2VkTWFyZ2luQm90dG9tKGxheW91
dENvbnRleHQsICpwcmV2aW91c0luRmxvd1NpYmxpbmcpOwotICAgIGF1dG8gbWFyZ2luVG9wID0g
bm9uQ29sbGFwc2VkTWFyZ2luVG9wKGxheW91dENvbnRleHQsIGxheW91dEJveCk7CisgICAgYXV0
byBwcmV2aW91c1NpYmxpbmdNYXJnaW5Cb3R0b20gPSBub25Db2xsYXBzZWRNYXJnaW5Cb3R0b20o
bGF5b3V0U3RhdGUsICpwcmV2aW91c0luRmxvd1NpYmxpbmcpOworICAgIGF1dG8gbWFyZ2luVG9w
ID0gbm9uQ29sbGFwc2VkTWFyZ2luVG9wKGxheW91dFN0YXRlLCBsYXlvdXRCb3gpOwogICAgIHJl
dHVybiBtYXJnaW5WYWx1ZShtYXJnaW5Ub3AsIHByZXZpb3VzU2libGluZ01hcmdpbkJvdHRvbSk7
CiB9CiAKLUxheW91dFVuaXQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Ok1hcmdp
bkNvbGxhcHNlOjptYXJnaW5Cb3R0b20oY29uc3QgTGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4
dCwgY29uc3QgQm94JiBsYXlvdXRCb3gpCitMYXlvdXRVbml0IEJsb2NrRm9ybWF0dGluZ0NvbnRl
eHQ6Okdlb21ldHJ5OjpNYXJnaW5Db2xsYXBzZTo6bWFyZ2luQm90dG9tKGNvbnN0IExheW91dFN0
YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgQm94JiBsYXlvdXRCb3gpCiB7CiAgICAgaWYgKGxheW91
dEJveC5pc0Fub255bW91cygpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTIzOSwyNCArMjM5LDI0
IEBAIExheW91dFVuaXQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Ok1hcmdpbkNv
bGxhcHNlOjptYXJnaW5Cb3R0b20oY29uc3QKICAgICBBU1NFUlQobGF5b3V0Qm94LmlzQmxvY2tM
ZXZlbEJveCgpKTsKIAogICAgIC8vIFRPRE86IHRha2UgX2hhc0Fkam9pbmluZ01hcmdpblRvcEFu
ZEJvdHRvbSgpIGludG8gYWNjb3VudC4KLSAgICBpZiAoaXNNYXJnaW5Cb3R0b21Db2xsYXBzZWRX
aXRoUGFyZW50KGxheW91dENvbnRleHQsIGxheW91dEJveCkpCisgICAgaWYgKGlzTWFyZ2luQm90
dG9tQ29sbGFwc2VkV2l0aFBhcmVudChsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94KSkKICAgICAgICAg
cmV0dXJuIDA7CiAKLSAgICBpZiAoaXNNYXJnaW5Cb3R0b21Db2xsYXBzZWRUaHJvdWdoKGxheW91
dENvbnRleHQsIGxheW91dEJveCkpCisgICAgaWYgKGlzTWFyZ2luQm90dG9tQ29sbGFwc2VkVGhy
b3VnaChsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94KSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAv
LyBGbG9hdHMgYW5kIG91dCBvZiBmbG93IHBvc2l0aW9uZWQgYm94ZXMgZG8gbm90IGNvbGxhcHNl
IHRoZWlyIG1hcmdpbnMuCiAgICAgaWYgKCFpc01hcmdpbkJvdHRvbUNvbGxhcHNlZFdpdGhTaWJs
aW5nKGxheW91dEJveCkpCi0gICAgICAgIHJldHVybiBub25Db2xsYXBzZWRNYXJnaW5Cb3R0b20o
bGF5b3V0Q29udGV4dCwgbGF5b3V0Qm94KTsKKyAgICAgICAgcmV0dXJuIG5vbkNvbGxhcHNlZE1h
cmdpbkJvdHRvbShsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94KTsKIAogICAgIC8vIFRoZSBib3R0b20g
bWFyZ2luIG9mIGFuIGluLWZsb3cgYmxvY2stbGV2ZWwgZWxlbWVudCBhbHdheXMgY29sbGFwc2Vz
IHdpdGggdGhlIHRvcCBtYXJnaW4gb2YgaXRzIG5leHQgaW4tZmxvdyBibG9jay1sZXZlbCBzaWJs
aW5nLAogICAgIC8vIHVubGVzcyB0aGF0IHNpYmxpbmcgaGFzIGNsZWFyYW5jZS4KICAgICBpZiAo
bGF5b3V0Qm94Lm5leHRJbkZsb3dTaWJsaW5nKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJl
dHVybiBub25Db2xsYXBzZWRNYXJnaW5Cb3R0b20obGF5b3V0Q29udGV4dCwgbGF5b3V0Qm94KTsK
KyAgICByZXR1cm4gbm9uQ29sbGFwc2VkTWFyZ2luQm90dG9tKGxheW91dFN0YXRlLCBsYXlvdXRC
b3gpOwogfQogCi1ib29sIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpNYXJnaW5D
b2xsYXBzZTo6aXNNYXJnaW5Cb3R0b21Db2xsYXBzZWRXaXRoUGFyZW50KGNvbnN0IExheW91dENv
bnRleHQmIGxheW91dENvbnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94KQorYm9vbCBCbG9ja0Zv
cm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6TWFyZ2luQ29sbGFwc2U6OmlzTWFyZ2luQm90dG9t
Q29sbGFwc2VkV2l0aFBhcmVudChjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0
IEJveCYgbGF5b3V0Qm94KQogewogICAgIC8vIGxhc3QgaW5mbG93IGJveCB0byBwYXJlbnQuCiAg
ICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL0NTUzIxL2JveC5odG1sI2NvbGxhcHNpbmctbWFy
Z2lucwpAQCAtMjY4LDcgKzI2OCw3IEBAIGJvb2wgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2Vv
bWV0cnk6Ok1hcmdpbkNvbGxhcHNlOjppc01hcmdpbkJvdHRvbUNvbGxhcHNlZFdpCiAgICAgaWYg
KGxheW91dEJveC5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGlmIChpc01hcmdpbkJvdHRvbUNvbGxhcHNlZFRocm91Z2gobGF5
b3V0Q29udGV4dCwgbGF5b3V0Qm94KSkKKyAgICBpZiAoaXNNYXJnaW5Cb3R0b21Db2xsYXBzZWRU
aHJvdWdoKGxheW91dFN0YXRlLCBsYXlvdXRCb3gpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICAvLyBXZSBuZXZlciBtYXJnaW4gY29sbGFwc2UgdGhlIGluaXRpYWwgY29udGFpbmluZyBi
bG9jay4KQEAgLTI4NSw3ICsyODUsNyBAQCBib29sIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdl
b21ldHJ5OjpNYXJnaW5Db2xsYXBzZTo6aXNNYXJnaW5Cb3R0b21Db2xsYXBzZWRXaQogICAgIGlm
IChwYXJlbnQuaXNEb2N1bWVudEJveCgpIHx8IHBhcmVudC5pc0luaXRpYWxDb250YWluaW5nQmxv
Y2soKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byYgcGFyZW50RGlzcGxheUJv
eCA9IGxheW91dENvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveChwYXJlbnQpOworICAgIGF1
dG8mIHBhcmVudERpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94
KHBhcmVudCk7CiAgICAgaWYgKHBhcmVudERpc3BsYXlCb3guYm9yZGVyVG9wKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIApAQCAtMzAzLDcgKzMwMyw3IEBAIGJvb2wgQmxvY2tGb3JtYXR0aW5n
Q29udGV4dDo6R2VvbWV0cnk6Ok1hcmdpbkNvbGxhcHNlOjppc01hcmdpblRvcENvbGxhcHNlZFdp
dGhQCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1MYXlvdXRVbml0IEJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQ6Okdlb21ldHJ5OjpNYXJnaW5Db2xsYXBzZTo6Y29sbGFwc2VkTWFyZ2luQm90dG9tRnJv
bUxhc3RDaGlsZChjb25zdCBMYXlvdXRDb250ZXh0JiBsYXlvdXRDb250ZXh0LCBjb25zdCBCb3gm
IGxheW91dEJveCkKK0xheW91dFVuaXQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6
Ok1hcmdpbkNvbGxhcHNlOjpjb2xsYXBzZWRNYXJnaW5Cb3R0b21Gcm9tTGFzdENoaWxkKGNvbnN0
IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgQm94JiBsYXlvdXRCb3gpCiB7CiAgICAg
QVNTRVJUKGxheW91dEJveC5pc0Jsb2NrTGV2ZWxCb3goKSk7CiAKQEAgLTMxNywxOSArMzE3LDE5
IEBAIExheW91dFVuaXQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Ok1hcmdpbkNv
bGxhcHNlOjpjb2xsYXBzZWRNYXJnaW5Cb3R0CiAKICAgICAvLyBGSVhNRTogQ2hlY2sgZm9yIGNv
bGxhcHNlZCB0aHJvdWdoIG1hcmdpbi4KICAgICBhdXRvJiBsYXN0SW5GbG93Q2hpbGQgPSAqZG93
bmNhc3Q8Q29udGFpbmVyPihsYXlvdXRCb3gpLmxhc3RJbkZsb3dDaGlsZCgpOwotICAgIGlmICgh
aXNNYXJnaW5Cb3R0b21Db2xsYXBzZWRXaXRoUGFyZW50KGxheW91dENvbnRleHQsIGxhc3RJbkZs
b3dDaGlsZCkpCisgICAgaWYgKCFpc01hcmdpbkJvdHRvbUNvbGxhcHNlZFdpdGhQYXJlbnQobGF5
b3V0U3RhdGUsIGxhc3RJbkZsb3dDaGlsZCkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8g
Q29sbGVjdCBjb2xsYXBzZWQgbWFyZ2luIGJvdHRvbSByZWN1cnNpdmVseS4KLSAgICByZXR1cm4g
bWFyZ2luVmFsdWUoY29tcHV0ZWROb25Db2xsYXBzZWRNYXJnaW5Cb3R0b20obGF5b3V0Q29udGV4
dCwgbGFzdEluRmxvd0NoaWxkKSwgY29sbGFwc2VkTWFyZ2luQm90dG9tRnJvbUxhc3RDaGlsZChs
YXlvdXRDb250ZXh0LCBsYXN0SW5GbG93Q2hpbGQpKTsKKyAgICByZXR1cm4gbWFyZ2luVmFsdWUo
Y29tcHV0ZWROb25Db2xsYXBzZWRNYXJnaW5Cb3R0b20obGF5b3V0U3RhdGUsIGxhc3RJbkZsb3dD
aGlsZCksIGNvbGxhcHNlZE1hcmdpbkJvdHRvbUZyb21MYXN0Q2hpbGQobGF5b3V0U3RhdGUsIGxh
c3RJbkZsb3dDaGlsZCkpOwogfQogCi1MYXlvdXRVbml0IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6
Okdlb21ldHJ5OjpNYXJnaW5Db2xsYXBzZTo6bm9uQ29sbGFwc2VkTWFyZ2luQm90dG9tKGNvbnN0
IExheW91dENvbnRleHQmIGxheW91dENvbnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94KQorTGF5
b3V0VW5pdCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6TWFyZ2luQ29sbGFwc2U6
Om5vbkNvbGxhcHNlZE1hcmdpbkJvdHRvbShjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUs
IGNvbnN0IEJveCYgbGF5b3V0Qm94KQogewogICAgIEFTU0VSVChsYXlvdXRCb3guaXNCbG9ja0xl
dmVsQm94KCkpOwogCiAgICAgLy8gTm9uIGNvbGxhcHNlZCBtYXJnaW4gYm90dG9tIGluY2x1ZGVz
IGNvbGxhcHNlZCBtYXJnaW4gZnJvbSBpbmZsb3cgbGFzdCBjaGlsZC4KLSAgICByZXR1cm4gbWFy
Z2luVmFsdWUoY29tcHV0ZWROb25Db2xsYXBzZWRNYXJnaW5Cb3R0b20obGF5b3V0Q29udGV4dCwg
bGF5b3V0Qm94KSwgY29sbGFwc2VkTWFyZ2luQm90dG9tRnJvbUxhc3RDaGlsZChsYXlvdXRDb250
ZXh0LCBsYXlvdXRCb3gpKTsKKyAgICByZXR1cm4gbWFyZ2luVmFsdWUoY29tcHV0ZWROb25Db2xs
YXBzZWRNYXJnaW5Cb3R0b20obGF5b3V0U3RhdGUsIGxheW91dEJveCksIGNvbGxhcHNlZE1hcmdp
bkJvdHRvbUZyb21MYXN0Q2hpbGQobGF5b3V0U3RhdGUsIGxheW91dEJveCkpOwogfQogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUJveC5o
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlCb3guaAppbmRleCA5
MjdlYWRjMGE0N2QwYTlkNmQ2NzY1Y2U3ZTJjOWYzZmIwOTM3NjA0Li42MmEzOTkyY2FkYTNhMDE3
OTU4YzQwYzgzOGU1YTA1NDJlYjNiNDAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvZGlzcGxheXRyZWUvRGlzcGxheUJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9k
aXNwbGF5dHJlZS9EaXNwbGF5Qm94LmgKQEAgLTQyLDcgKzQyLDcgQEAgY2xhc3MgRmxvYXRCb3g7
CiBjbGFzcyBGb3JtYXR0aW5nQ29udGV4dDsKIGNsYXNzIEZsb2F0aW5nQ29udGV4dDsKIGNsYXNz
IElubGluZUZvcm1hdHRpbmdDb250ZXh0OwotY2xhc3MgTGF5b3V0Q29udGV4dDsKK2NsYXNzIExh
eW91dFN0YXRlOwogfQogCiBuYW1lc3BhY2UgRGlzcGxheSB7CkBAIC01Niw3ICs1Niw3IEBAIHB1
YmxpYzoKICAgICBmcmllbmQgY2xhc3MgTGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDsKICAgICBm
cmllbmQgY2xhc3MgTGF5b3V0OjpGbG9hdGluZ0NvbnRleHQ7CiAgICAgZnJpZW5kIGNsYXNzIExh
eW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7Ci0gICAgZnJpZW5kIGNsYXNzIExheW91dDo6
TGF5b3V0Q29udGV4dDsKKyAgICBmcmllbmQgY2xhc3MgTGF5b3V0OjpMYXlvdXRTdGF0ZTsKIAog
ICAgIEJveChjb25zdCBSZW5kZXJTdHlsZSYpOwogICAgIEJveChjb25zdCBCb3gmKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRBdm9pZGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRBdm9pZGVyLmNwcAppbmRleCAzYjEwOGQ3
NjI5NWU4YTJmMzMyYWUxNDI1NDQ4MTZlYmUzMjliMTY5Li4wN2YyMGVjMTcyYzQ2M2RhNmJiMGQz
OWQwNDBhZThhMjY2NDEwMWQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxv
YXRzL0Zsb2F0QXZvaWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9G
bG9hdEF2b2lkZXIuY3BwCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlICJMYXlvdXRCb3gu
aCIKICNpbmNsdWRlICJMYXlvdXRDb250YWluZXIuaCIKLSNpbmNsdWRlICJMYXlvdXRDb250ZXh0
LmgiCisjaW5jbHVkZSAiTGF5b3V0Rm9ybWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL0lz
b01hbGxvY0lubGluZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsMTEgKzM4LDEx
IEBAIG5hbWVzcGFjZSBMYXlvdXQgewogCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoRmxv
YXRBdm9pZGVyKTsKIAotRmxvYXRBdm9pZGVyOjpGbG9hdEF2b2lkZXIoY29uc3QgQm94JiBsYXlv
dXRCb3gsIGNvbnN0IEZsb2F0aW5nU3RhdGUmIGZsb2F0aW5nU3RhdGUsIGNvbnN0IExheW91dENv
bnRleHQmIGxheW91dENvbnRleHQpCitGbG9hdEF2b2lkZXI6OkZsb2F0QXZvaWRlcihjb25zdCBC
b3gmIGxheW91dEJveCwgY29uc3QgRmxvYXRpbmdTdGF0ZSYgZmxvYXRpbmdTdGF0ZSwgY29uc3Qg
TGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKQogICAgIDogbV9sYXlvdXRCb3gobWFrZVdlYWtQdHIo
bGF5b3V0Qm94KSkKICAgICAsIG1fZmxvYXRpbmdTdGF0ZShmbG9hdGluZ1N0YXRlKQotICAgICwg
bV9hYnNvbHV0ZURpc3BsYXlCb3goRm9ybWF0dGluZ0NvbnRleHQ6Om1hcEJveFRvQW5jZXN0b3Io
bGF5b3V0Q29udGV4dCwgbGF5b3V0Qm94LCBkb3duY2FzdDxDb250YWluZXI+KGZsb2F0aW5nU3Rh
dGUucm9vdCgpKSkpCi0gICAgLCBtX2NvbnRhaW5pbmdCbG9ja0Fic29sdXRlRGlzcGxheUJveChs
YXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkgPT0gJmZsb2F0aW5nU3RhdGUucm9vdCgpID8gRGlz
cGxheTo6Qm94KGxheW91dENvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94
LmNvbnRhaW5pbmdCbG9jaygpKSkgOiBGb3JtYXR0aW5nQ29udGV4dDo6bWFwQm94VG9BbmNlc3Rv
cihsYXlvdXRDb250ZXh0LCAqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpLCBkb3duY2FzdDxD
b250YWluZXI+KGZsb2F0aW5nU3RhdGUucm9vdCgpKSkpCisgICAgLCBtX2Fic29sdXRlRGlzcGxh
eUJveChGb3JtYXR0aW5nQ29udGV4dDo6bWFwQm94VG9BbmNlc3RvcihsYXlvdXRTdGF0ZSwgbGF5
b3V0Qm94LCBkb3duY2FzdDxDb250YWluZXI+KGZsb2F0aW5nU3RhdGUucm9vdCgpKSkpCisgICAg
LCBtX2NvbnRhaW5pbmdCbG9ja0Fic29sdXRlRGlzcGxheUJveChsYXlvdXRCb3guY29udGFpbmlu
Z0Jsb2NrKCkgPT0gJmZsb2F0aW5nU3RhdGUucm9vdCgpID8gRGlzcGxheTo6Qm94KGxheW91dFN0
YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSkp
IDogRm9ybWF0dGluZ0NvbnRleHQ6Om1hcEJveFRvQW5jZXN0b3IobGF5b3V0U3RhdGUsICpsYXlv
dXRCb3guY29udGFpbmluZ0Jsb2NrKCksIGRvd25jYXN0PENvbnRhaW5lcj4oZmxvYXRpbmdTdGF0
ZS5yb290KCkpKSkKICAgICAsIG1faW5pdGlhbFZlcnRpY2FsUG9zaXRpb24obV9hYnNvbHV0ZURp
c3BsYXlCb3gudG9wKCkpCiB7CiAgICAgQVNTRVJUKG1fbGF5b3V0Qm94LT5lc3RhYmxpc2hlc0Js
b2NrRm9ybWF0dGluZ0NvbnRleHQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvZmxvYXRzL0Zsb2F0QXZvaWRlci5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9G
bG9hdEF2b2lkZXIuaAppbmRleCBhNThlZWEyNWY1ZTEyYmM1NTM2OGVmNmI2ZDA4YzU2NGVkNTc0
MTM1Li44YzI2ZGRmMmVkNzBjODcyYzhiMzgwOWU4MDc4OWY5MjFkZmNmM2VmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0QXZvaWRlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRBdm9pZGVyLmgKQEAgLTM4LDEyICszOCwxMiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAogY2xhc3MgRmxvYXRp
bmdTdGF0ZTsKLWNsYXNzIExheW91dENvbnRleHQ7CitjbGFzcyBMYXlvdXRTdGF0ZTsKIAogY2xh
c3MgRmxvYXRBdm9pZGVyIHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEZsb2F0QXZvaWRl
cik7CiBwdWJsaWM6Ci0gICAgRmxvYXRBdm9pZGVyKGNvbnN0IEJveCYsIGNvbnN0IEZsb2F0aW5n
U3RhdGUmLCBjb25zdCBMYXlvdXRDb250ZXh0Jik7CisgICAgRmxvYXRBdm9pZGVyKGNvbnN0IEJv
eCYsIGNvbnN0IEZsb2F0aW5nU3RhdGUmLCBjb25zdCBMYXlvdXRTdGF0ZSYpOwogICAgIHZpcnR1
YWwgfkZsb2F0QXZvaWRlcigpID0gZGVmYXVsdDsKIAogICAgIHZpcnR1YWwgRGlzcGxheTo6Qm94
OjpSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX2Fic29sdXRlRGlzcGxheUJveC5yZWN0KCk7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRCb3guY3Bw
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9GbG9hdEJveC5jcHAKaW5kZXggMjdhYjM0
MThhNTZlMmI3N2IyNjdlZDVmMDA3M2I4YjRkNWU4YjhhOS4uNjlkZDAxODFjYzI4ZGE5ODBlNTdj
OWZmNzQ0NDQ2NTE5MmZkZDhjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zs
b2F0cy9GbG9hdEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9GbG9h
dEJveC5jcHAKQEAgLTM1LDggKzM1LDggQEAgbmFtZXNwYWNlIExheW91dCB7CiAKIFdURl9NQUtF
X0lTT19BTExPQ0FURURfSU1QTChGbG9hdEJveCk7CiAKLUZsb2F0Qm94OjpGbG9hdEJveChjb25z
dCBCb3gmIGxheW91dEJveCwgY29uc3QgRmxvYXRpbmdTdGF0ZSYgZmxvYXRpbmdTdGF0ZSwgY29u
c3QgTGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4dCkKLSAgICA6IEZsb2F0QXZvaWRlcihsYXlv
dXRCb3gsIGZsb2F0aW5nU3RhdGUsIGxheW91dENvbnRleHQpCitGbG9hdEJveDo6RmxvYXRCb3go
Y29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEZsb2F0aW5nU3RhdGUmIGZsb2F0aW5nU3RhdGUs
IGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSkKKyAgICA6IEZsb2F0QXZvaWRlcihsYXlv
dXRCb3gsIGZsb2F0aW5nU3RhdGUsIGxheW91dFN0YXRlKQogewogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvZmxvYXRzL0Zsb2F0Qm94LmgKaW5kZXggMzJmYjNjMjAxOGMwMGRmOWY2MWZiMjU5YmQ0
NDE0OTk3YWE1YjBiNS4uODE5YjE0Y2E4Y2ZlZTgwMTZiMDY3NzM4YzQ3MTYzMmFjYzlkNTUxNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9GbG9hdEJveC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRCb3guaApAQCAtMzYsMTIgKzM2LDEy
IEBAIG5hbWVzcGFjZSBMYXlvdXQgewogCiBjbGFzcyBCb3g7CiBjbGFzcyBGbG9hdGluZ1N0YXRl
OwotY2xhc3MgTGF5b3V0Q29udGV4dDsKK2NsYXNzIExheW91dFN0YXRlOwogCiBjbGFzcyBGbG9h
dEJveCA6IHB1YmxpYyBGbG9hdEF2b2lkZXIgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQo
RmxvYXRCb3gpOwogcHVibGljOgotICAgIEZsb2F0Qm94KGNvbnN0IEJveCYsIGNvbnN0IEZsb2F0
aW5nU3RhdGUmLCBjb25zdCBMYXlvdXRDb250ZXh0Jik7CisgICAgRmxvYXRCb3goY29uc3QgQm94
JiwgY29uc3QgRmxvYXRpbmdTdGF0ZSYsIGNvbnN0IExheW91dFN0YXRlJik7CiAKICAgICBEaXNw
bGF5OjpCb3g6OlJlY3QgcmVjdCgpIGNvbnN0IGZpbmFsOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvZmxvYXRzL0Zsb2F0aW5nQ29udGV4dC5jcHAKaW5kZXggMWYwMzVkODFhOTQwNDg5
OTU0MWM0NjgzMGFkZmY0OWM5MjVmMDgxNi4uOTA0N2ZlMGY3ODU0OTNkZjlmZjI0YWFhODUwODc0
ZDI0MGJhNmY3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9GbG9h
dGluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRp
bmdDb250ZXh0LmNwcApAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIkZsb2F0Qm94LmgiCiAj
aW5jbHVkZSAiTGF5b3V0Qm94LmgiCiAjaW5jbHVkZSAiTGF5b3V0Q29udGFpbmVyLmgiCi0jaW5j
bHVkZSAiTGF5b3V0Q29udGV4dC5oIgorI2luY2x1ZGUgIkxheW91dEZvcm1hdHRpbmdTdGF0ZS5o
IgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTEyMSwxMSArMTIxLDExIEBAIFBvaW50SW5Db250YWluaW5nQmxvY2sgRmxvYXRpbmdD
b250ZXh0Ojpwb3NpdGlvbkZvckZsb2F0KGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjCiAgICAgQVNT
RVJUKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKTsKIAogICAgIGlmIChtX2Zsb2F0
aW5nU3RhdGUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRD
b250ZXh0KCkuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOworICAgICAgICBhdXRv
JiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91
dEJveCk7CiAKICAgICAgICAgYXV0byBhbGlnbldpdGhDb250YWluaW5nQmxvY2sgPSBbJl0oKSAt
PiBQb3NpdGlvbkluQ29udGFpbmluZ0Jsb2NrIHsKICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlz
IG5vIGZsb2F0aW5nIHRvIGFsaWduIHdpdGgsIHB1c2ggdGhlIGJveCB0byB0aGUgbGVmdC9yaWdo
dCBlZGdlIG9mIGl0cyBjb250YWluaW5nIGJsb2NrJ3MgY29udGVudCBib3guCi0gICAgICAgICAg
ICBhdXRvJiBjb250YWluaW5nQmxvY2tEaXNwbGF5Qm94ID0gbGF5b3V0Q29udGV4dCgpLmRpc3Bs
YXlCb3hGb3JMYXlvdXRCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSk7CisgICAgICAg
ICAgICBhdXRvJiBjb250YWluaW5nQmxvY2tEaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUoKS5kaXNw
bGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpOwogCiAgICAg
ICAgICAgICBpZiAobGF5b3V0Qm94LmlzTGVmdEZsb2F0aW5nUG9zaXRpb25lZCgpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBjb250YWluaW5nQmxvY2tEaXNwbGF5Qm94LmNvbnRlbnRCb3hMZWZ0
KCkgKyBkaXNwbGF5Qm94Lm1hcmdpbkxlZnQoKTsKQEAgLTEzOCw3ICsxMzgsNyBAQCBQb2ludElu
Q29udGFpbmluZ0Jsb2NrIEZsb2F0aW5nQ29udGV4dDo6cG9zaXRpb25Gb3JGbG9hdChjb25zdCBC
b3gmIGxheW91dEJveCkgYwogICAgIH0KIAogICAgIC8vIEZpbmQgdGhlIHRvcCBtb3N0IHBvc2l0
aW9uIHdoZXJlIHRoZSBmbG9hdCBib3ggZml0cy4KLSAgICBGbG9hdEJveCBmbG9hdEJveCA9IHsg
bGF5b3V0Qm94LCBtX2Zsb2F0aW5nU3RhdGUsIGxheW91dENvbnRleHQoKSB9OworICAgIEZsb2F0
Qm94IGZsb2F0Qm94ID0geyBsYXlvdXRCb3gsIG1fZmxvYXRpbmdTdGF0ZSwgbGF5b3V0U3RhdGUo
KSB9OwogICAgIGZsb2F0aW5nUG9zaXRpb24oZmxvYXRCb3gpOwogICAgIHJldHVybiBmbG9hdEJv
eC5yZWN0SW5Db250YWluaW5nQmxvY2soKS50b3BMZWZ0KCk7CiB9CkBAIC0xNTIsNyArMTUyLDcg
QEAgc3RkOjpvcHRpb25hbDxQb2ludEluQ29udGFpbmluZ0Jsb2NrPiBGbG9hdGluZ0NvbnRleHQ6
OnBvc2l0aW9uRm9yRmxvYXRBdm9pZGluZygKICAgICBpZiAobV9mbG9hdGluZ1N0YXRlLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIEZsb2F0QXZvaWRlciBmbG9hdEF2b2lk
ZXIgPSB7IGxheW91dEJveCwgbV9mbG9hdGluZ1N0YXRlLCBsYXlvdXRDb250ZXh0KCkgfTsKKyAg
ICBGbG9hdEF2b2lkZXIgZmxvYXRBdm9pZGVyID0geyBsYXlvdXRCb3gsIG1fZmxvYXRpbmdTdGF0
ZSwgbGF5b3V0U3RhdGUoKSB9OwogICAgIGZsb2F0aW5nUG9zaXRpb24oZmxvYXRBdm9pZGVyKTsK
ICAgICByZXR1cm4geyBmbG9hdEF2b2lkZXIucmVjdEluQ29udGFpbmluZ0Jsb2NrKCkudG9wTGVm
dCgpIH07CiB9CkBAIC0xNzYsMTYgKzE3NiwxNiBAQCBzdGQ6Om9wdGlvbmFsPFBvc2l0aW9uSW5D
b250YWluaW5nQmxvY2s+IEZsb2F0aW5nQ29udGV4dDo6dmVydGljYWxQb3NpdGlvbldpdGhDbAog
ICAgICAgICAvLyAxLiBUaGUgYW1vdW50IG5lY2Vzc2FyeSB0byBwbGFjZSB0aGUgYm9yZGVyIGVk
Z2Ugb2YgdGhlIGJsb2NrIGV2ZW4gd2l0aCB0aGUgYm90dG9tIG91dGVyIGVkZ2Ugb2YgdGhlIGxv
d2VzdCBmbG9hdCB0aGF0IGlzIHRvIGJlIGNsZWFyZWQuCiAgICAgICAgIC8vIDIuIFRoZSBhbW91
bnQgbmVjZXNzYXJ5IHRvIHBsYWNlIHRoZSB0b3AgYm9yZGVyIGVkZ2Ugb2YgdGhlIGJsb2NrIGF0
IGl0cyBoeXBvdGhldGljYWwgcG9zaXRpb24uCiAKLSAgICAgICAgYXV0byYgbGF5b3V0Q29udGV4
dCA9IHRoaXMtPmxheW91dENvbnRleHQoKTsKLSAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGxh
eW91dENvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOwotICAgICAgICBh
dXRvIHJvb3RSZWxhdGl2ZVRvcCA9IEZvcm1hdHRpbmdDb250ZXh0OjptYXBUb3BMZWZ0VG9BbmNl
c3RvcihsYXlvdXRDb250ZXh0LCBsYXlvdXRCb3gsIGRvd25jYXN0PENvbnRhaW5lcj4obV9mbG9h
dGluZ1N0YXRlLnJvb3QoKSkpLnk7CisgICAgICAgIGF1dG8mIGxheW91dFN0YXRlID0gdGhpcy0+
bGF5b3V0U3RhdGUoKTsKKyAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGxheW91dFN0YXRlLmRp
c3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKKyAgICAgICAgYXV0byByb290UmVsYXRp
dmVUb3AgPSBGb3JtYXR0aW5nQ29udGV4dDo6bWFwVG9wTGVmdFRvQW5jZXN0b3IobGF5b3V0U3Rh
dGUsIGxheW91dEJveCwgZG93bmNhc3Q8Q29udGFpbmVyPihtX2Zsb2F0aW5nU3RhdGUucm9vdCgp
KSkueTsKICAgICAgICAgYXV0byBjbGVhcmFuY2UgPSAqZmxvYXRCb3R0b20gLSByb290UmVsYXRp
dmVUb3A7CiAgICAgICAgIGlmIChjbGVhcmFuY2UgPD0gMCkKICAgICAgICAgICAgIHJldHVybiB7
IH07CiAKICAgICAgICAgLy8gQ2xlYXJhbmNlIGluaGliaXRzIG1hcmdpbiBjb2xsYXBzaW5nLiBM
ZXQncyByZXNldCB0aGUgcmVsZXZhbnQgYWRqb2luaW5nIG1hcmdpbnMuCiAgICAgICAgIGlmIChh
dXRvKiBwcmV2aW91c0luRmxvd1NpYmxpbmcgPSBsYXlvdXRCb3gucHJldmlvdXNJbkZsb3dTaWJs
aW5nKCkpIHsKLSAgICAgICAgICAgIGF1dG8mIHByZXZpb3VzSW5GbG93RGlzcGxheUJveCA9IGxh
eW91dENvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveCgqcHJldmlvdXNJbkZsb3dTaWJsaW5n
KTsKKyAgICAgICAgICAgIGF1dG8mIHByZXZpb3VzSW5GbG93RGlzcGxheUJveCA9IGxheW91dFN0
YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKnByZXZpb3VzSW5GbG93U2libGluZyk7CiAKICAg
ICAgICAgICAgIC8vIFNpbmNlIHRoZSBwcmV2aW91cyBpbmZsb3cgc2libGluZyBoYXMgYWxyZWFk
eSBiZWVuIGxhaWQgb3V0LCBpdHMgbWFyZ2luIGlzIGNvbGxhcHNlZCBieSBub3cuCiAgICAgICAg
ICAgICBBU1NFUlQoIXByZXZpb3VzSW5GbG93RGlzcGxheUJveC5tYXJnaW5Cb3R0b20oKSk7CkBA
IC0yMDgsNyArMjA4LDcgQEAgc3RkOjpvcHRpb25hbDxQb3NpdGlvbkluQ29udGFpbmluZ0Jsb2Nr
PiBGbG9hdGluZ0NvbnRleHQ6OnZlcnRpY2FsUG9zaXRpb25XaXRoQ2wKICAgICAgICAgQVNTRVJU
KCpmbG9hdEJvdHRvbSA9PSByb290UmVsYXRpdmVUb3ApOwogCiAgICAgICAgIC8vIFRoZSByZXR1
cm4gdmVydGljYWwgcG9zaXRpb24gaXMgaW4gdGhlIGNvbnRhaW5pbmcgYmxvY2sncyBjb29yZGlu
YXRlIHN5c3RlbS4KLSAgICAgICAgYXV0byBjb250YWluaW5nQmxvY2tSb290UmVsYXRpdmVUb3Ag
PSBGb3JtYXR0aW5nQ29udGV4dDo6bWFwVG9wTGVmdFRvQW5jZXN0b3IobGF5b3V0Q29udGV4dCwg
KmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSwgZG93bmNhc3Q8Q29udGFpbmVyPihtX2Zsb2F0
aW5nU3RhdGUucm9vdCgpKSkueTsKKyAgICAgICAgYXV0byBjb250YWluaW5nQmxvY2tSb290UmVs
YXRpdmVUb3AgPSBGb3JtYXR0aW5nQ29udGV4dDo6bWFwVG9wTGVmdFRvQW5jZXN0b3IobGF5b3V0
U3RhdGUsICpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCksIGRvd25jYXN0PENvbnRhaW5lcj4o
bV9mbG9hdGluZ1N0YXRlLnJvb3QoKSkpLnk7CiAgICAgICAgIHJldHVybiByb290UmVsYXRpdmVU
b3AgLSBjb250YWluaW5nQmxvY2tSb290UmVsYXRpdmVUb3A7CiAgICAgfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ0NvbnRleHQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRpbmdDb250ZXh0LmgKaW5kZXggYmJmYTFiMmRk
MDY0YThkNDU1NTI0OTNhMmQyMWE1NjE0ZjQxN2ViMi4uZjhkM2Q4YzcwZWZkYTZmZTMzNWRiMzNh
NDMzODYzZGFkNGZhMzAwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0
cy9GbG9hdGluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zs
b2F0aW5nQ29udGV4dC5oCkBAIC0zOSw3ICszOSw3IEBAIGNsYXNzIEZsb2F0QXZvaWRlcjsKIGNs
YXNzIEJveDsKIGNsYXNzIENvbnRhaW5lcjsKIGNsYXNzIEZsb2F0aW5nUGFpcjsKLWNsYXNzIExh
eW91dENvbnRleHQ7CitjbGFzcyBMYXlvdXRTdGF0ZTsKIAogLy8gRmxvYXRpbmdDb250ZXh0IGlz
IHJlc3BvbnNpYmxlIGZvciBhZGp1c3RpbmcgdGhlIHBvc2l0aW9uIG9mIGEgYm94IGluIHRoZSBj
dXJyZW50IGZvcm1hdHRpbmcgY29udGV4dAogLy8gYnkgdGFraW5nIHRoZSBmbG9hdGluZyBib3hl
cyBpbnRvIGFjY291bnQuCkBAIC01NSw3ICs1NSw3IEBAIHB1YmxpYzoKICAgICBzdGQ6Om9wdGlv
bmFsPFBvc2l0aW9uSW5Db250YWluaW5nQmxvY2s+IHZlcnRpY2FsUG9zaXRpb25XaXRoQ2xlYXJh
bmNlKGNvbnN0IEJveCYpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIExheW91dENvbnRleHQmIGxh
eW91dENvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2Zsb2F0aW5nU3RhdGUubGF5b3V0Q29udGV4
dCgpOyB9CisgICAgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9m
bG9hdGluZ1N0YXRlLmxheW91dFN0YXRlKCk7IH0KIAogICAgIHZvaWQgZmxvYXRpbmdQb3NpdGlv
bihGbG9hdEF2b2lkZXImKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Zsb2F0cy9GbG9hdGluZ1N0YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9h
dHMvRmxvYXRpbmdTdGF0ZS5jcHAKaW5kZXggODMxMmI3MTJiYmYwNWE1NmM2NjA0MmEwZGYxN2Vk
NTgxMjk3MjEzZi4uOTBmODExYWRjNjhkOGYyN2VmMzE5Y2FjZTUwNzBhM2U2NjljZmM4MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ1N0YXRlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0aW5nU3RhdGUuY3BwCkBAIC0z
MSw3ICszMSw3IEBACiAjaW5jbHVkZSAiRm9ybWF0dGluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJM
YXlvdXRCb3guaCIKICNpbmNsdWRlICJMYXlvdXRDb250YWluZXIuaCIKLSNpbmNsdWRlICJMYXlv
dXRDb250ZXh0LmgiCisjaW5jbHVkZSAiTGF5b3V0Rm9ybWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVk
ZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDEs
MTIgKzQxLDEyIEBAIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChGbG9hdGluZ1N0YXRlKTsK
IAogRmxvYXRpbmdTdGF0ZTo6RmxvYXRJdGVtOjpGbG9hdEl0ZW0oY29uc3QgQm94JiBsYXlvdXRC
b3gsIGNvbnN0IEZsb2F0aW5nU3RhdGUmIGZsb2F0aW5nU3RhdGUpCiAgICAgOiBtX2xheW91dEJv
eChtYWtlV2Vha1B0cihsYXlvdXRCb3gpKQotICAgICwgbV9hYnNvbHV0ZURpc3BsYXlCb3goRm9y
bWF0dGluZ0NvbnRleHQ6Om1hcEJveFRvQW5jZXN0b3IoZmxvYXRpbmdTdGF0ZS5sYXlvdXRDb250
ZXh0KCksIGxheW91dEJveCwgZG93bmNhc3Q8Q29udGFpbmVyPihmbG9hdGluZ1N0YXRlLnJvb3Qo
KSkpKQorICAgICwgbV9hYnNvbHV0ZURpc3BsYXlCb3goRm9ybWF0dGluZ0NvbnRleHQ6Om1hcEJv
eFRvQW5jZXN0b3IoZmxvYXRpbmdTdGF0ZS5sYXlvdXRTdGF0ZSgpLCBsYXlvdXRCb3gsIGRvd25j
YXN0PENvbnRhaW5lcj4oZmxvYXRpbmdTdGF0ZS5yb290KCkpKSkKIHsKIH0KIAotRmxvYXRpbmdT
dGF0ZTo6RmxvYXRpbmdTdGF0ZShMYXlvdXRDb250ZXh0JiBsYXlvdXRDb250ZXh0LCBjb25zdCBC
b3gmIGZvcm1hdHRpbmdDb250ZXh0Um9vdCkKLSAgICA6IG1fbGF5b3V0Q29udGV4dChsYXlvdXRD
b250ZXh0KQorRmxvYXRpbmdTdGF0ZTo6RmxvYXRpbmdTdGF0ZShMYXlvdXRTdGF0ZSYgbGF5b3V0
U3RhdGUsIGNvbnN0IEJveCYgZm9ybWF0dGluZ0NvbnRleHRSb290KQorICAgIDogbV9sYXlvdXRT
dGF0ZShsYXlvdXRTdGF0ZSkKICAgICAsIG1fZm9ybWF0dGluZ0NvbnRleHRSb290KG1ha2VXZWFr
UHRyKGZvcm1hdHRpbmdDb250ZXh0Um9vdCkpCiB7CiB9CkBAIC05OCw3ICs5OCw3IEBAIEZsb2F0
aW5nU3RhdGU6OkNvbnN0cmFpbnRzIEZsb2F0aW5nU3RhdGU6OmNvbnN0cmFpbnRzKExheW91dFVu
aXQgdmVydGljYWxQb3NpdGlvCiAgICAgYXV0byBhZGp1c3RlZFBvc2l0aW9uID0gUG9zaXRpb24g
eyAwLCB2ZXJ0aWNhbFBvc2l0aW9uIH07CiAKICAgICBpZiAoY29vcmRpbmF0ZU1hcHBpbmdJc1Jl
cXVpcmVkKQotICAgICAgICBhZGp1c3RlZFBvc2l0aW9uID0gRm9ybWF0dGluZ0NvbnRleHQ6Om1h
cENvb3JkaW5hdGVUb0FuY2VzdG9yKG1fbGF5b3V0Q29udGV4dCwgYWRqdXN0ZWRQb3NpdGlvbiwg
ZG93bmNhc3Q8Q29udGFpbmVyPihmb3JtYXR0aW5nQ29udGV4dFJvb3QpLCBkb3duY2FzdDxDb250
YWluZXI+KHJvb3QoKSkpOworICAgICAgICBhZGp1c3RlZFBvc2l0aW9uID0gRm9ybWF0dGluZ0Nv
bnRleHQ6Om1hcENvb3JkaW5hdGVUb0FuY2VzdG9yKG1fbGF5b3V0U3RhdGUsIGFkanVzdGVkUG9z
aXRpb24sIGRvd25jYXN0PENvbnRhaW5lcj4oZm9ybWF0dGluZ0NvbnRleHRSb290KSwgZG93bmNh
c3Q8Q29udGFpbmVyPihyb290KCkpKTsKIAogICAgIENvbnN0cmFpbnRzIGNvbnN0cmFpbnRzOwog
ICAgIGZvciAoaW50IGluZGV4ID0gbV9mbG9hdHMuc2l6ZSgpIC0gMTsgaW5kZXggPj0gMDsgLS1p
bmRleCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9GbG9hdGlu
Z1N0YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0aW5nU3RhdGUuaApp
bmRleCA3NzNkMWU1MjU4OWQzZTFlMmJjN2E2MDMyNWU4ZTUwOTlmZjE0MzA3Li42ZjE2ZWRmZWM5
N2MwOGYyMjQ2NGM4N2E3OGJmZDgwN2NjYWI4MmIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvZmxvYXRzL0Zsb2F0aW5nU3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvZmxvYXRzL0Zsb2F0aW5nU3RhdGUuaApAQCAtMzksMTMgKzM5LDEzIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlvdXQgewogCiBjbGFzcyBGb3JtYXR0aW5nU3RhdGU7Ci1j
bGFzcyBMYXlvdXRDb250ZXh0OworY2xhc3MgTGF5b3V0U3RhdGU7CiAKIC8vIEZsb2F0aW5nU3Rh
dGUgaG9sZHMgdGhlIGZsb2F0aW5nIGJveGVzIHBlciBmb3JtYXR0aW5nIGNvbnRleHQuCiBjbGFz
cyBGbG9hdGluZ1N0YXRlIDogcHVibGljIFJlZkNvdW50ZWQ8RmxvYXRpbmdTdGF0ZT4gewogICAg
IFdURl9NQUtFX0lTT19BTExPQ0FURUQoRmxvYXRpbmdTdGF0ZSk7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxGbG9hdGluZ1N0YXRlPiBjcmVhdGUoTGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4
dCwgY29uc3QgQm94JiBmb3JtYXR0aW5nQ29udGV4dFJvb3QpIHsgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRmxvYXRpbmdTdGF0ZShsYXlvdXRDb250ZXh0LCBmb3JtYXR0aW5nQ29udGV4dFJvb3QpKTsg
fQorICAgIHN0YXRpYyBSZWY8RmxvYXRpbmdTdGF0ZT4gY3JlYXRlKExheW91dFN0YXRlJiBsYXlv
dXRTdGF0ZSwgY29uc3QgQm94JiBmb3JtYXR0aW5nQ29udGV4dFJvb3QpIHsgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgRmxvYXRpbmdTdGF0ZShsYXlvdXRTdGF0ZSwgZm9ybWF0dGluZ0NvbnRleHRSb290
KSk7IH0KIAogICAgIHZvaWQgYXBwZW5kKGNvbnN0IEJveCYgbGF5b3V0Qm94KTsKICAgICB2b2lk
IHJlbW92ZShjb25zdCBCb3gmIGxheW91dEJveCk7CkBAIC04NiwxMyArODYsMTMgQEAgcHVibGlj
OgogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBGbG9hdGluZ0NvbnRleHQ7Ci0gICAgRmxv
YXRpbmdTdGF0ZShMYXlvdXRDb250ZXh0JiwgY29uc3QgQm94JiBmb3JtYXR0aW5nQ29udGV4dFJv
b3QpOworICAgIEZsb2F0aW5nU3RhdGUoTGF5b3V0U3RhdGUmLCBjb25zdCBCb3gmIGZvcm1hdHRp
bmdDb250ZXh0Um9vdCk7CiAKLSAgICBMYXlvdXRDb250ZXh0JiBsYXlvdXRDb250ZXh0KCkgY29u
c3QgeyByZXR1cm4gbV9sYXlvdXRDb250ZXh0OyB9CisgICAgTGF5b3V0U3RhdGUmIGxheW91dFN0
YXRlKCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRTdGF0ZTsgfQogCiAgICAgc3RkOjpvcHRpb25h
bDxMYXlvdXRVbml0PiBib3R0b20oY29uc3QgQm94JiBmb3JtYXR0aW5nQ29udGV4dFJvb3QsIENs
ZWFyKSBjb25zdDsKIAotICAgIExheW91dENvbnRleHQmIG1fbGF5b3V0Q29udGV4dDsKKyAgICBM
YXlvdXRTdGF0ZSYgbV9sYXlvdXRTdGF0ZTsKICAgICBXZWFrUHRyPGNvbnN0IEJveD4gbV9mb3Jt
YXR0aW5nQ29udGV4dFJvb3Q7CiAgICAgRmxvYXRMaXN0IG1fZmxvYXRzOwogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRp
bmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lu
bGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcAppbmRleCAzNDdlNzZlMTBlZmVhYjI5ZmJjZTQxNzlj
NmE5ZGM4YmQ1NzRjMTAwLi41YTg2MjIwMmZlNzQ4NzhjMjE4NTEyZDUzZjAyNzQ1OTAyMzRjODRk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCkBAIC0zNCw3ICszNCw3IEBA
CiAjaW5jbHVkZSAiSW5saW5lUnVuUHJvdmlkZXIuaCIKICNpbmNsdWRlICJMYXlvdXRCb3guaCIK
ICNpbmNsdWRlICJMYXlvdXRDb250YWluZXIuaCIKLSNpbmNsdWRlICJMYXlvdXRDb250ZXh0Lmgi
CisjaW5jbHVkZSAiTGF5b3V0Rm9ybWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiTGF5b3V0SW5s
aW5lQm94LmgiCiAjaW5jbHVkZSAiTGF5b3V0SW5saW5lQ29udGFpbmVyLmgiCiAjaW5jbHVkZSAi
TG9nZ2luZy5oIgpAQCAtNTEsMTIgKzUxLDEyIEBAIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dChjb25zdCBCb3gmIGZvcm1hdHRpbmdDb250ZXh0Um9vCiB7
CiB9CiAKLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dChMYXlvdXRDb250ZXh0
JiBsYXlvdXRDb250ZXh0LCBGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSkgY29uc3QK
K3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dChMYXlvdXRTdGF0ZSYgbGF5b3V0
U3RhdGUsIEZvcm1hdHRpbmdTdGF0ZSYgZm9ybWF0dGluZ1N0YXRlKSBjb25zdAogewogICAgIGlm
ICghaXM8Q29udGFpbmVyPihyb290KCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBMT0dfV0lU
SF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW1N0YXJ0XSAtPiBp
bmxpbmUgZm9ybWF0dGluZyBjb250ZXh0IC0+IGxheW91dCBjb250ZXh0KCIgPDwgJmxheW91dENv
bnRleHQgPDwgIikgZm9ybWF0dGluZyByb290KCIgPDwgJnJvb3QoKSA8PCAiKSIpOworICAgIExP
R19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbU3RhcnRd
IC0+IGlubGluZSBmb3JtYXR0aW5nIGNvbnRleHQgLT4gbGF5b3V0IGNvbnRleHQoIiA8PCAmbGF5
b3V0U3RhdGUgPDwgIikgZm9ybWF0dGluZyByb290KCIgPDwgJnJvb3QoKSA8PCAiKSIpOwogCiAg
ICAgYXV0byYgaW5saW5lRm9ybWF0dGluZ1N0YXRlID0gZG93bmNhc3Q8SW5saW5lRm9ybWF0dGlu
Z1N0YXRlPihmb3JtYXR0aW5nU3RhdGUpOwogICAgIElubGluZVJ1blByb3ZpZGVyIGlubGluZVJ1
blByb3ZpZGVyKGlubGluZUZvcm1hdHRpbmdTdGF0ZSk7CkBAIC02Niw3ICs2Niw3IEBAIHZvaWQg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dChMYXlvdXRDb250ZXh0JiBsYXlvdXRDb250
ZXh0LCBGb3JtYXR0aW5nU3RhCiAgICAgd2hpbGUgKGxheW91dEJveCkgewogCiAgICAgICAgIGlm
IChsYXlvdXRCb3gtPmVzdGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQoKSkgewotICAgICAgICAg
ICAgbGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRSb290KGxheW91dENvbnRleHQsICpsYXlvdXRCb3gp
OworICAgICAgICAgICAgbGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRSb290KGxheW91dFN0YXRlLCAq
bGF5b3V0Qm94KTsKICAgICAgICAgICAgIC8vIEZvcm1hdHRpbmcgY29udGV4dCByb290cyB0YWtl
IGNhcmUgb2YgdGhlaXIgZW50aXJlIHN1YnRyZWUuIENvbnRpbnVlIHdpdGggbmV4dCBzaWJsaW5n
LgogICAgICAgICAgICAgaW5saW5lUnVuUHJvdmlkZXIuYXBwZW5kKCpsYXlvdXRCb3gpOwogICAg
ICAgICAgICAgbGF5b3V0Qm94ID0gbGF5b3V0Qm94LT5uZXh0SW5GbG93T3JGbG9hdGluZ1NpYmxp
bmcoKTsKQEAgLTgwLDcgKzgwLDcgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGF5
b3V0KExheW91dENvbnRleHQmIGxheW91dENvbnRleHQsIEZvcm1hdHRpbmdTdGEKICAgICAgICAg
fQogCiAgICAgICAgIGlubGluZVJ1blByb3ZpZGVyLmFwcGVuZCgqbGF5b3V0Qm94KTsKLSAgICAg
ICAgY29tcHV0ZVdpZHRoQW5kSGVpZ2h0Rm9ySW5saW5lQm94KGxheW91dENvbnRleHQsICpsYXlv
dXRCb3gpOworICAgICAgICBjb21wdXRlV2lkdGhBbmRIZWlnaHRGb3JJbmxpbmVCb3gobGF5b3V0
U3RhdGUsICpsYXlvdXRCb3gpOwogCiAgICAgICAgIGZvciAoOyBsYXlvdXRCb3g7IGxheW91dEJv
eCA9IGxheW91dEJveC0+cGFyZW50KCkpIHsKICAgICAgICAgICAgIGlmIChsYXlvdXRCb3ggPT0g
JmZvcm1hdHRpbmdSb290KSB7CkBAIC05NSw5ICs5NSw5IEBAIHZvaWQgSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQ6OmxheW91dChMYXlvdXRDb250ZXh0JiBsYXlvdXRDb250ZXh0LCBGb3JtYXR0aW5n
U3RhCiAgICAgICAgIEFTU0VSVCghbGF5b3V0Qm94IHx8IGxheW91dEJveC0+aXNEZXNjZW5kYW50
T2YoZm9ybWF0dGluZ1Jvb3QpKTsKICAgICB9CiAKLSAgICBsYXlvdXRJbmxpbmVDb250ZW50KGxh
eW91dENvbnRleHQsIGlubGluZUZvcm1hdHRpbmdTdGF0ZSwgaW5saW5lUnVuUHJvdmlkZXIpOwor
ICAgIGxheW91dElubGluZUNvbnRlbnQobGF5b3V0U3RhdGUsIGlubGluZUZvcm1hdHRpbmdTdGF0
ZSwgaW5saW5lUnVuUHJvdmlkZXIpOwogCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdD
b250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltFbmRdIC0+IGlubGluZSBmb3JtYXR0aW5nIGNvbnRl
eHQgLT4gbGF5b3V0IGNvbnRleHQoIiA8PCAmbGF5b3V0Q29udGV4dCA8PCAiKSBmb3JtYXR0aW5n
IHJvb3QoIiA8PCAmcm9vdCgpIDw8ICIpIik7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRp
bmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltFbmRdIC0+IGlubGluZSBmb3JtYXR0aW5nIGNv
bnRleHQgLT4gbGF5b3V0IGNvbnRleHQoIiA8PCAmbGF5b3V0U3RhdGUgPDwgIikgZm9ybWF0dGlu
ZyByb290KCIgPDwgJnJvb3QoKSA8PCAiKSIpOwogfQogCiBzdGF0aWMgYm9vbCBpc1RyaW1tYWJs
ZUNvbnRlbnQoY29uc3QgSW5saW5lTGluZUJyZWFrZXI6OlJ1biYgcnVuKQpAQCAtMTA1LDEwICsx
MDUsMTAgQEAgc3RhdGljIGJvb2wgaXNUcmltbWFibGVDb250ZW50KGNvbnN0IElubGluZUxpbmVC
cmVha2VyOjpSdW4mIHJ1bikKICAgICByZXR1cm4gcnVuLmNvbnRlbnQuaXNXaGl0ZXNwYWNlKCkg
JiYgcnVuLmNvbnRlbnQuc3R5bGUoKS5jb2xsYXBzZVdoaXRlU3BhY2UoKTsKIH0KIAotdm9pZCBJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6aW5pdGlhbGl6ZU5ld0xpbmUoY29uc3QgTGF5b3V0Q29u
dGV4dCYgbGF5b3V0Q29udGV4dCwgSW5saW5lRm9ybWF0dGluZ1N0YXRlJiBpbmxpbmVGb3JtYXR0
aW5nU3RhdGUsIExpbmUmIGxpbmUpIGNvbnN0Cit2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0
Ojppbml0aWFsaXplTmV3TGluZShjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIElubGlu
ZUZvcm1hdHRpbmdTdGF0ZSYgaW5saW5lRm9ybWF0dGluZ1N0YXRlLCBMaW5lJiBsaW5lKSBjb25z
dAogewogICAgIGF1dG8mIGZvcm1hdHRpbmdSb290ID0gZG93bmNhc3Q8Q29udGFpbmVyPihyb290
KCkpOwotICAgIGF1dG8mIGZvcm1hdHRpbmdSb290RGlzcGxheUJveCA9IGxheW91dENvbnRleHQu
ZGlzcGxheUJveEZvckxheW91dEJveChmb3JtYXR0aW5nUm9vdCk7CisgICAgYXV0byYgZm9ybWF0
dGluZ1Jvb3REaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChm
b3JtYXR0aW5nUm9vdCk7CiAKICAgICBhdXRvIGxpbmVMb2dpY2FsTGVmdCA9IGZvcm1hdHRpbmdS
b290RGlzcGxheUJveC5jb250ZW50Qm94TGVmdCgpOwogICAgIGF1dG8gbGluZUxvZ2ljYWxUb3Ag
PSBsaW5lLmlzRmlyc3RMaW5lKCkgPyBmb3JtYXR0aW5nUm9vdERpc3BsYXlCb3guY29udGVudEJv
eFRvcCgpIDogbGluZS5sb2dpY2FsQm90dG9tKCk7CkBAIC0xNDgsMTQgKzE0OCwxNCBAQCB2b2lk
IElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojppbml0aWFsaXplTmV3TGluZShjb25zdCBMYXlvdXRD
b250ZXh0JiBsYXlvdXRDb250ZQogICAgIGxpbmUuaW5pdChsb2dpY2FsUmVjdCk7CiB9CiAKLXZv
aWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dElubGluZUNvbnRlbnQoY29uc3QgTGF5
b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4dCwgSW5saW5lRm9ybWF0dGluZ1N0YXRlJiBpbmxpbmVG
b3JtYXR0aW5nU3RhdGUsIGNvbnN0IElubGluZVJ1blByb3ZpZGVyJiBpbmxpbmVSdW5Qcm92aWRl
cikgY29uc3QKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dElubGluZUNvbnRl
bnQoY29uc3QgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBJbmxpbmVGb3JtYXR0aW5nU3RhdGUm
IGlubGluZUZvcm1hdHRpbmdTdGF0ZSwgY29uc3QgSW5saW5lUnVuUHJvdmlkZXImIGlubGluZVJ1
blByb3ZpZGVyKSBjb25zdAogewogICAgIGF1dG8gZmxvYXRpbmdDb250ZXh0ID0gRmxvYXRpbmdD
b250ZXh0IHsgaW5saW5lRm9ybWF0dGluZ1N0YXRlLmZsb2F0aW5nU3RhdGUoKSB9OwogCiAgICAg
TGluZSBsaW5lKGlubGluZUZvcm1hdHRpbmdTdGF0ZSwgcm9vdCgpKTsKLSAgICBpbml0aWFsaXpl
TmV3TGluZShsYXlvdXRDb250ZXh0LCBpbmxpbmVGb3JtYXR0aW5nU3RhdGUsIGxpbmUpOworICAg
IGluaXRpYWxpemVOZXdMaW5lKGxheW91dFN0YXRlLCBpbmxpbmVGb3JtYXR0aW5nU3RhdGUsIGxp
bmUpOwogCi0gICAgSW5saW5lTGluZUJyZWFrZXIgbGluZUJyZWFrZXIobGF5b3V0Q29udGV4dCwg
aW5saW5lRm9ybWF0dGluZ1N0YXRlLmlubGluZUNvbnRlbnQoKSwgaW5saW5lUnVuUHJvdmlkZXIu
cnVucygpKTsKKyAgICBJbmxpbmVMaW5lQnJlYWtlciBsaW5lQnJlYWtlcihsYXlvdXRTdGF0ZSwg
aW5saW5lRm9ybWF0dGluZ1N0YXRlLmlubGluZUNvbnRlbnQoKSwgaW5saW5lUnVuUHJvdmlkZXIu
cnVucygpKTsKICAgICB3aGlsZSAoYXV0byBydW4gPSBsaW5lQnJlYWtlci5uZXh0UnVuKGxpbmUu
Y29udGVudExvZ2ljYWxSaWdodCgpLCBsaW5lLmF2YWlsYWJsZVdpZHRoKCksICFsaW5lLmhhc0Nv
bnRlbnQoKSkpIHsKICAgICAgICAgYXV0byBpc0ZpcnN0UnVuID0gcnVuLT5wb3NpdGlvbiA9PSBJ
bmxpbmVMaW5lQnJlYWtlcjo6UnVuOjpQb3NpdGlvbjo6TGluZUJlZ2luOwogICAgICAgICBhdXRv
IGlzTGFzdFJ1biA9IHJ1bi0+cG9zaXRpb24gPT0gSW5saW5lTGluZUJyZWFrZXI6OlJ1bjo6UG9z
aXRpb246OkxpbmVFbmQ7CkBAIC0xNjQsMTAgKzE2NCwxMCBAQCB2b2lkIElubGluZUZvcm1hdHRp
bmdDb250ZXh0OjpsYXlvdXRJbmxpbmVDb250ZW50KGNvbnN0IExheW91dENvbnRleHQmIGxheW91
dENvbgogICAgICAgICAvLyBQb3NpdGlvbiBmbG9hdCBhbmQgYWRqdXN0IHRoZSBydW5zIG9uIGxp
bmUuCiAgICAgICAgIGlmIChydW4tPmNvbnRlbnQuaXNGbG9hdCgpKSB7CiAgICAgICAgICAgICBh
dXRvJiBmbG9hdEJveCA9IHJ1bi0+Y29udGVudC5pbmxpbmVJdGVtKCkubGF5b3V0Qm94KCk7Ci0g
ICAgICAgICAgICBjb21wdXRlRmxvYXRQb3NpdGlvbihsYXlvdXRDb250ZXh0LCBmbG9hdGluZ0Nv
bnRleHQsIGxpbmUsIGZsb2F0Qm94KTsKKyAgICAgICAgICAgIGNvbXB1dGVGbG9hdFBvc2l0aW9u
KGxheW91dFN0YXRlLCBmbG9hdGluZ0NvbnRleHQsIGxpbmUsIGZsb2F0Qm94KTsKICAgICAgICAg
ICAgIGlubGluZUZvcm1hdHRpbmdTdGF0ZS5mbG9hdGluZ1N0YXRlKCkuYXBwZW5kKGZsb2F0Qm94
KTsKIAotICAgICAgICAgICAgYXV0byBmbG9hdEJveFdpZHRoID0gbGF5b3V0Q29udGV4dC5kaXNw
bGF5Qm94Rm9yTGF5b3V0Qm94KGZsb2F0Qm94KS53aWR0aCgpOworICAgICAgICAgICAgYXV0byBm
bG9hdEJveFdpZHRoID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChmbG9hdEJv
eCkud2lkdGgoKTsKICAgICAgICAgICAgIC8vIFNocmluayBhdmFpbGJsZSBzcGFjZSBmb3IgY3Vy
cmVudCBsaW5lIGFuZCBtb3ZlIGV4aXN0aW5nIGlubGluZSBydW5zLgogICAgICAgICAgICAgZmxv
YXRCb3guaXNMZWZ0RmxvYXRpbmdQb3NpdGlvbmVkKCkgPyBsaW5lLmFkanVzdExvZ2ljYWxMZWZ0
KGZsb2F0Qm94V2lkdGgpIDogbGluZS5hZGp1c3RMb2dpY2FsUmlnaHQoZmxvYXRCb3hXaWR0aCk7
CiAKQEAgLTE4OCw3ICsxODgsNyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlv
dXRJbmxpbmVDb250ZW50KGNvbnN0IExheW91dENvbnRleHQmIGxheW91dENvbgogICAgICAgICAg
ICAgICAgIC8vIFByZXZpb3VzIHJ1biBlbmRlZCB1cCBiZWluZyBhdCB0aGUgbGluZSBlbmQuIEFk
anVzdCB0aGUgbGluZSBhY2NvcmRpbmdseS4KICAgICAgICAgICAgICAgICBpZiAoIWxpbmUuaXND
bG9zZWQoKSkKICAgICAgICAgICAgICAgICAgICAgbGluZS5jbG9zZShMaW5lOjpMYXN0TGluZTo6
Tm8pOwotICAgICAgICAgICAgICAgIGluaXRpYWxpemVOZXdMaW5lKGxheW91dENvbnRleHQsIGlu
bGluZUZvcm1hdHRpbmdTdGF0ZSwgbGluZSk7CisgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZU5l
d0xpbmUobGF5b3V0U3RhdGUsIGlubGluZUZvcm1hdHRpbmdTdGF0ZSwgbGluZSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICB9CiAKQEAgLTIwMiwxOCArMjAyLDE4IEBAIHZvaWQgSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OmxheW91dElubGluZUNvbnRlbnQoY29uc3QgTGF5b3V0Q29udGV4dCYg
bGF5b3V0Q29uCiAgICAgbGluZS5jbG9zZShMaW5lOjpMYXN0TGluZTo6WWVzKTsKIH0KIAotdm9p
ZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRSb290KExh
eW91dENvbnRleHQmIGxheW91dENvbnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAor
dm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRSb290
KExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0CiB7
CiAgICAgQVNTRVJUKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpIHx8IGxheW91dEJv
eC5pc0lubGluZUJsb2NrQm94KCkpOwotICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRDb250
ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKKyAgICBhdXRvJiBkaXNwbGF5
Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOwogCiAg
ICAgYXV0byBjb21wdXRlV2lkdGhBbmRNYXJnaW4gPSBbJl0oKSB7CiAgICAgICAgIFdpZHRoQW5k
TWFyZ2luIHdpZHRoQW5kTWFyZ2luOwogCiAgICAgICAgIGlmIChsYXlvdXRCb3guaXNGbG9hdGlu
Z1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgICAgIHdpZHRoQW5kTWFyZ2luID0gR2VvbWV0cnk6OmZs
b2F0aW5nV2lkdGhBbmRNYXJnaW4obGF5b3V0Q29udGV4dCwgKnRoaXMsIGxheW91dEJveCk7Cisg
ICAgICAgICAgICB3aWR0aEFuZE1hcmdpbiA9IEdlb21ldHJ5OjpmbG9hdGluZ1dpZHRoQW5kTWFy
Z2luKGxheW91dFN0YXRlLCAqdGhpcywgbGF5b3V0Qm94KTsKICAgICAgICAgZWxzZSBpZiAobGF5
b3V0Qm94LmlzSW5saW5lQmxvY2tCb3goKSkKLSAgICAgICAgICAgIHdpZHRoQW5kTWFyZ2luID0g
R2VvbWV0cnk6OmlubGluZUJsb2NrV2lkdGhBbmRNYXJnaW4obGF5b3V0Q29udGV4dCwgbGF5b3V0
Qm94KTsKKyAgICAgICAgICAgIHdpZHRoQW5kTWFyZ2luID0gR2VvbWV0cnk6OmlubGluZUJsb2Nr
V2lkdGhBbmRNYXJnaW4obGF5b3V0U3RhdGUsIGxheW91dEJveCk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCkBAIC0yMjYsOSArMjI2LDkgQEAgdm9p
ZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRSb290KExh
eW91dENvbnRleHQmIGxheW91dEMKICAgICAgICAgSGVpZ2h0QW5kTWFyZ2luIGhlaWdodEFuZE1h
cmdpbjsKIAogICAgICAgICBpZiAobGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpCi0g
ICAgICAgICAgICBoZWlnaHRBbmRNYXJnaW4gPSBHZW9tZXRyeTo6ZmxvYXRpbmdIZWlnaHRBbmRN
YXJnaW4obGF5b3V0Q29udGV4dCwgbGF5b3V0Qm94KTsKKyAgICAgICAgICAgIGhlaWdodEFuZE1h
cmdpbiA9IEdlb21ldHJ5OjpmbG9hdGluZ0hlaWdodEFuZE1hcmdpbihsYXlvdXRTdGF0ZSwgbGF5
b3V0Qm94KTsKICAgICAgICAgZWxzZSBpZiAobGF5b3V0Qm94LmlzSW5saW5lQmxvY2tCb3goKSkK
LSAgICAgICAgICAgIGhlaWdodEFuZE1hcmdpbiA9IEdlb21ldHJ5OjppbmxpbmVCbG9ja0hlaWdo
dEFuZE1hcmdpbihsYXlvdXRDb250ZXh0LCBsYXlvdXRCb3gpOworICAgICAgICAgICAgaGVpZ2h0
QW5kTWFyZ2luID0gR2VvbWV0cnk6OmlubGluZUJsb2NrSGVpZ2h0QW5kTWFyZ2luKGxheW91dFN0
YXRlLCBsYXlvdXRCb3gpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKIApAQCAtMjM3LDE3ICsyMzcsMTcgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dDo6bGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRSb290KExheW91dENvbnRleHQmIGxheW91dEMK
ICAgICAgICAgZGlzcGxheUJveC5zZXRWZXJ0aWNhbE1hcmdpbihoZWlnaHRBbmRNYXJnaW4uY29s
bGFwc2VkTWFyZ2luLnZhbHVlX29yKGhlaWdodEFuZE1hcmdpbi5tYXJnaW4pKTsKICAgICB9Owog
Ci0gICAgY29tcHV0ZUJvcmRlckFuZFBhZGRpbmcobGF5b3V0Q29udGV4dCwgbGF5b3V0Qm94KTsK
KyAgICBjb21wdXRlQm9yZGVyQW5kUGFkZGluZyhsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94KTsKICAg
ICBjb21wdXRlV2lkdGhBbmRNYXJnaW4oKTsKIAogICAgIC8vIFN3aWNoIG92ZXIgdG8gdGhlIG5l
dyBmb3JtYXR0aW5nIGNvbnRleHQgKHRoZSBvbmUgdGhhdCB0aGUgcm9vdCBjcmVhdGVzKS4KLSAg
ICBsYXlvdXRDb250ZXh0LmZvcm1hdHRpbmdDb250ZXh0KGxheW91dEJveCktPmxheW91dChsYXlv
dXRDb250ZXh0LCBsYXlvdXRDb250ZXh0LmNyZWF0ZUZvcm1hdHRpbmdTdGF0ZUZvckZvcm1hdHRp
bmdSb290SWZOZWVkZWQobGF5b3V0Qm94KSk7CisgICAgbGF5b3V0U3RhdGUuZm9ybWF0dGluZ0Nv
bnRleHQobGF5b3V0Qm94KS0+bGF5b3V0KGxheW91dFN0YXRlLCBsYXlvdXRTdGF0ZS5jcmVhdGVG
b3JtYXR0aW5nU3RhdGVGb3JGb3JtYXR0aW5nUm9vdElmTmVlZGVkKGxheW91dEJveCkpOwogCiAg
ICAgLy8gQ29tZSBiYWNrIGFuZCBmaW5hbGl6ZSB0aGUgcm9vdCdzIGhlaWdodCBhbmQgbWFyZ2lu
LgogICAgIGNvbXB1dGVIZWlnaHRBbmRNYXJnaW4oKTsKIH0KIAotdm9pZCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6Y29tcHV0ZVdpZHRoQW5kSGVpZ2h0Rm9ySW5saW5lQm94KExheW91dENvbnRl
eHQmIGxheW91dENvbnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAordm9pZCBJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVdpZHRoQW5kSGVpZ2h0Rm9ySW5saW5lQm94KExh
eW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKCFsYXlvdXRCb3guaXNDb250YWluZXIoKSk7CiAgICAgQVNTRVJUKCFsYXlvdXRC
b3guZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4dCgpKTsKQEAgLTI2MCwxMiArMjYwLDEyIEBA
IHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVXaWR0aEFuZEhlaWdodEZvcklu
bGluZUJveChMYXlvdXRDb250ZXh0JiBsCiAKICAgICAvLyBUaGlzIGlzIHByZXR0eSBtdWNoIG9u
bHkgZm9yIHJlcGxhY2VkIGlubGluZSBib3hlcyBhdG0uCiAgICAgQVNTRVJUKGxheW91dEJveC5y
ZXBsYWNlZCgpKTsKLSAgICBjb21wdXRlQm9yZGVyQW5kUGFkZGluZyhsYXlvdXRDb250ZXh0LCBs
YXlvdXRCb3gpOworICAgIGNvbXB1dGVCb3JkZXJBbmRQYWRkaW5nKGxheW91dFN0YXRlLCBsYXlv
dXRCb3gpOwogCi0gICAgYXV0byB3aWR0aEFuZE1hcmdpbiA9IEdlb21ldHJ5OjppbmxpbmVSZXBs
YWNlZFdpZHRoQW5kTWFyZ2luKGxheW91dENvbnRleHQsIGxheW91dEJveCk7Ci0gICAgYXV0byBo
ZWlnaHRBbmRNYXJnaW4gPSBHZW9tZXRyeTo6aW5saW5lUmVwbGFjZWRIZWlnaHRBbmRNYXJnaW4o
bGF5b3V0Q29udGV4dCwgbGF5b3V0Qm94KTsKKyAgICBhdXRvIHdpZHRoQW5kTWFyZ2luID0gR2Vv
bWV0cnk6OmlubGluZVJlcGxhY2VkV2lkdGhBbmRNYXJnaW4obGF5b3V0U3RhdGUsIGxheW91dEJv
eCk7CisgICAgYXV0byBoZWlnaHRBbmRNYXJnaW4gPSBHZW9tZXRyeTo6aW5saW5lUmVwbGFjZWRI
ZWlnaHRBbmRNYXJnaW4obGF5b3V0U3RhdGUsIGxheW91dEJveCk7CiAKLSAgICBhdXRvJiBkaXNw
bGF5Qm94ID0gbGF5b3V0Q29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7
CisgICAgYXV0byYgZGlzcGxheUJveCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRC
b3gobGF5b3V0Qm94KTsKICAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hXaWR0aCh3aWR0aEFu
ZE1hcmdpbi53aWR0aCk7CiAgICAgZGlzcGxheUJveC5zZXRIb3Jpem9udGFsTWFyZ2luKHdpZHRo
QW5kTWFyZ2luLm1hcmdpbik7CiAgICAgZGlzcGxheUJveC5zZXRIb3Jpem9udGFsTm9uQ29tcHV0
ZWRNYXJnaW4od2lkdGhBbmRNYXJnaW4ubm9uQ29tcHV0ZWRNYXJnaW4pOwpAQCAtMjc1LDEwICsy
NzUsMTAgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVdpZHRoQW5kSGVp
Z2h0Rm9ySW5saW5lQm94KExheW91dENvbnRleHQmIGwKICAgICBkaXNwbGF5Qm94LnNldFZlcnRp
Y2FsTWFyZ2luKGhlaWdodEFuZE1hcmdpbi5jb2xsYXBzZWRNYXJnaW4udmFsdWVfb3IoaGVpZ2h0
QW5kTWFyZ2luLm1hcmdpbikpOwogfQogCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpj
b21wdXRlRmxvYXRQb3NpdGlvbihjb25zdCBMYXlvdXRDb250ZXh0JiBsYXlvdXRDb250ZXh0LCBj
b25zdCBGbG9hdGluZ0NvbnRleHQmIGZsb2F0aW5nQ29udGV4dCwgTGluZSYgbGluZSwgY29uc3Qg
Qm94JiBmbG9hdEJveCkgY29uc3QKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1
dGVGbG9hdFBvc2l0aW9uKGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgRmxv
YXRpbmdDb250ZXh0JiBmbG9hdGluZ0NvbnRleHQsIExpbmUmIGxpbmUsIGNvbnN0IEJveCYgZmxv
YXRCb3gpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGxheW91dENvbnRleHQuaGFzRGlzcGxheUJveChm
bG9hdEJveCkpOwotICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRDb250ZXh0LmRpc3BsYXlC
b3hGb3JMYXlvdXRCb3goZmxvYXRCb3gpOworICAgIEFTU0VSVChsYXlvdXRTdGF0ZS5oYXNEaXNw
bGF5Qm94KGZsb2F0Qm94KSk7CisgICAgYXV0byYgZGlzcGxheUJveCA9IGxheW91dFN0YXRlLmRp
c3BsYXlCb3hGb3JMYXlvdXRCb3goZmxvYXRCb3gpOwogCiAgICAgLy8gU2V0IHN0YXRpYyBwb3Np
dGlvbiBmaXJzdC4KICAgICBkaXNwbGF5Qm94LnNldFRvcExlZnQoeyBsaW5lLmNvbnRlbnRMb2dp
Y2FsUmlnaHQoKSwgbGluZS5sb2dpY2FsVG9wKCkgfSk7CkBAIC0yODYsMTUgKzI4NiwxNSBAQCB2
b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlRmxvYXRQb3NpdGlvbihjb25zdCBM
YXlvdXRDb250ZXh0JiBsYXlvdXRDbwogICAgIGRpc3BsYXlCb3guc2V0VG9wTGVmdChmbG9hdGlu
Z0NvbnRleHQucG9zaXRpb25Gb3JGbG9hdChmbG9hdEJveCkpOwogfQogCi12b2lkIElubGluZUZv
cm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlU3RhdGljUG9zaXRpb24oY29uc3QgTGF5b3V0Q29udGV4
dCYsIGNvbnN0IEJveCYpIGNvbnN0Cit2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21w
dXRlU3RhdGljUG9zaXRpb24oY29uc3QgTGF5b3V0U3RhdGUmLCBjb25zdCBCb3gmKSBjb25zdAog
ewogfQogCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSW5GbG93UG9zaXRp
b25lZFBvc2l0aW9uKGNvbnN0IExheW91dENvbnRleHQmLCBjb25zdCBCb3gmKSBjb25zdAordm9p
ZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUluRmxvd1Bvc2l0aW9uZWRQb3NpdGlv
bihjb25zdCBMYXlvdXRTdGF0ZSYsIGNvbnN0IEJveCYpIGNvbnN0CiB7CiB9CiAKLUZvcm1hdHRp
bmdDb250ZXh0OjpJbnN0cmluc2ljV2lkdGhDb25zdHJhaW50cyBJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dDo6aW5zdHJpbnNpY1dpZHRoQ29uc3RyYWludHMoTGF5b3V0Q29udGV4dCYsIGNvbnN0IEJv
eCYpIGNvbnN0CitGb3JtYXR0aW5nQ29udGV4dDo6SW5zdHJpbnNpY1dpZHRoQ29uc3RyYWludHMg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Omluc3RyaW5zaWNXaWR0aENvbnN0cmFpbnRzKExheW91
dFN0YXRlJiwgY29uc3QgQm94JikgY29uc3QKIHsKICAgICByZXR1cm4geyB9OwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lu
bGluZUZvcm1hdHRpbmdDb250ZXh0LmgKaW5kZXggYTRlMDBiMDNiMzhmN2RmNGY4YjMyYjYyNDM2
MDllNjIzMTdkNzA5Ny4uNDI5NzM0ZmI5ZTFhYmQ4ZTAxZTczNDRkYjU5YzI2ZDA2NGFiMTBjOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCkBAIC00NSw3ICs0NSw3IEBAIGNsYXNz
IElubGluZUZvcm1hdHRpbmdDb250ZXh0IDogcHVibGljIEZvcm1hdHRpbmdDb250ZXh0IHsKIHB1
YmxpYzoKICAgICBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dChjb25zdCBCb3gmIGZvcm1hdHRpbmdD
b250ZXh0Um9vdCk7CiAKLSAgICB2b2lkIGxheW91dChMYXlvdXRDb250ZXh0JiwgRm9ybWF0dGlu
Z1N0YXRlJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBsYXlvdXQoTGF5b3V0U3RhdGUmLCBG
b3JtYXR0aW5nU3RhdGUmKSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBjbGFzcyBM
aW5lIHsKQEAgLTk4LDIwICs5OCwyMCBAQCBwcml2YXRlOgogICAgIC8vIFRoaXMgY2xhc3MgaW1w
bGVtZW50cyBwb3NpdGlvbmluZyBhbmQgc2l6aW5nIGZvciBib3hlcyBwYXJ0aWNpcGF0aW5nIGlu
IGEgYmxvY2sgZm9ybWF0dGluZyBjb250ZXh0LgogICAgIGNsYXNzIEdlb21ldHJ5IDogcHVibGlj
IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeSB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0
aWMgSGVpZ2h0QW5kTWFyZ2luIGlubGluZUJsb2NrSGVpZ2h0QW5kTWFyZ2luKGNvbnN0IExheW91
dENvbnRleHQmLCBjb25zdCBCb3gmKTsKLSAgICAgICAgc3RhdGljIFdpZHRoQW5kTWFyZ2luIGlu
bGluZUJsb2NrV2lkdGhBbmRNYXJnaW4oY29uc3QgTGF5b3V0Q29udGV4dCYsIGNvbnN0IEJveCYp
OworICAgICAgICBzdGF0aWMgSGVpZ2h0QW5kTWFyZ2luIGlubGluZUJsb2NrSGVpZ2h0QW5kTWFy
Z2luKGNvbnN0IExheW91dFN0YXRlJiwgY29uc3QgQm94Jik7CisgICAgICAgIHN0YXRpYyBXaWR0
aEFuZE1hcmdpbiBpbmxpbmVCbG9ja1dpZHRoQW5kTWFyZ2luKGNvbnN0IExheW91dFN0YXRlJiwg
Y29uc3QgQm94Jik7CiAgICAgfTsKIAotICAgIHZvaWQgbGF5b3V0SW5saW5lQ29udGVudChjb25z
dCBMYXlvdXRDb250ZXh0JiwgSW5saW5lRm9ybWF0dGluZ1N0YXRlJiwgY29uc3QgSW5saW5lUnVu
UHJvdmlkZXImKSBjb25zdDsKLSAgICB2b2lkIGluaXRpYWxpemVOZXdMaW5lKGNvbnN0IExheW91
dENvbnRleHQmLCBJbmxpbmVGb3JtYXR0aW5nU3RhdGUmLCBMaW5lJikgY29uc3Q7CisgICAgdm9p
ZCBsYXlvdXRJbmxpbmVDb250ZW50KGNvbnN0IExheW91dFN0YXRlJiwgSW5saW5lRm9ybWF0dGlu
Z1N0YXRlJiwgY29uc3QgSW5saW5lUnVuUHJvdmlkZXImKSBjb25zdDsKKyAgICB2b2lkIGluaXRp
YWxpemVOZXdMaW5lKGNvbnN0IExheW91dFN0YXRlJiwgSW5saW5lRm9ybWF0dGluZ1N0YXRlJiwg
TGluZSYpIGNvbnN0OwogCi0gICAgdm9pZCBsYXlvdXRGb3JtYXR0aW5nQ29udGV4dFJvb3QoTGF5
b3V0Q29udGV4dCYsIGNvbnN0IEJveCYpIGNvbnN0OwotICAgIHZvaWQgY29tcHV0ZVdpZHRoQW5k
SGVpZ2h0Rm9ySW5saW5lQm94KExheW91dENvbnRleHQmLCBjb25zdCBCb3gmKSBjb25zdDsKLSAg
ICB2b2lkIGNvbXB1dGVGbG9hdFBvc2l0aW9uKGNvbnN0IExheW91dENvbnRleHQmLCBjb25zdCBG
bG9hdGluZ0NvbnRleHQmLCBMaW5lJiwgY29uc3QgQm94JikgY29uc3Q7Ci0gICAgdm9pZCBjb21w
dXRlU3RhdGljUG9zaXRpb24oY29uc3QgTGF5b3V0Q29udGV4dCYsIGNvbnN0IEJveCYpIGNvbnN0
IG92ZXJyaWRlOwotICAgIHZvaWQgY29tcHV0ZUluRmxvd1Bvc2l0aW9uZWRQb3NpdGlvbihjb25z
dCBMYXlvdXRDb250ZXh0JiwgY29uc3QgQm94JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBs
YXlvdXRGb3JtYXR0aW5nQ29udGV4dFJvb3QoTGF5b3V0U3RhdGUmLCBjb25zdCBCb3gmKSBjb25z
dDsKKyAgICB2b2lkIGNvbXB1dGVXaWR0aEFuZEhlaWdodEZvcklubGluZUJveChMYXlvdXRTdGF0
ZSYsIGNvbnN0IEJveCYpIGNvbnN0OworICAgIHZvaWQgY29tcHV0ZUZsb2F0UG9zaXRpb24oY29u
c3QgTGF5b3V0U3RhdGUmLCBjb25zdCBGbG9hdGluZ0NvbnRleHQmLCBMaW5lJiwgY29uc3QgQm94
JikgY29uc3Q7CisgICAgdm9pZCBjb21wdXRlU3RhdGljUG9zaXRpb24oY29uc3QgTGF5b3V0U3Rh
dGUmLCBjb25zdCBCb3gmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGNvbXB1dGVJbkZsb3dQ
b3NpdGlvbmVkUG9zaXRpb24oY29uc3QgTGF5b3V0U3RhdGUmLCBjb25zdCBCb3gmKSBjb25zdCBv
dmVycmlkZTsKIAotICAgIEluc3RyaW5zaWNXaWR0aENvbnN0cmFpbnRzIGluc3RyaW5zaWNXaWR0
aENvbnN0cmFpbnRzKExheW91dENvbnRleHQmLCBjb25zdCBCb3gmKSBjb25zdCBvdmVycmlkZTsK
KyAgICBJbnN0cmluc2ljV2lkdGhDb25zdHJhaW50cyBpbnN0cmluc2ljV2lkdGhDb25zdHJhaW50
cyhMYXlvdXRTdGF0ZSYsIGNvbnN0IEJveCYpIGNvbnN0IG92ZXJyaWRlOwogfTsKIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9y
bWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAppbmRleCA3OTVj
N2VlMjEzNzA1MzJiMjg1ZmYwZmM0MGIxOGFhYTc0NTMyNWRiLi5kMzg1ZjNkNDJlYjAxMWQyMzcy
NjRiYzMzMzUwZDllZDllM2Q3ODU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5n
Q29udGV4dEdlb21ldHJ5LmNwcApAQCAtMzMsMTIgKzMzLDEyIEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAotV2lkdGhBbmRNYXJnaW4gSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQ6Okdlb21ldHJ5OjppbmxpbmVCbG9ja1dpZHRoQW5kTWFyZ2luKGNvbnN0IExheW91
dENvbnRleHQmLCBjb25zdCBCb3gmKQorV2lkdGhBbmRNYXJnaW4gSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6Okdlb21ldHJ5OjppbmxpbmVCbG9ja1dpZHRoQW5kTWFyZ2luKGNvbnN0IExheW91dFN0
YXRlJiwgY29uc3QgQm94JikKIHsKICAgICByZXR1cm4geyB9OwogfQogCi1IZWlnaHRBbmRNYXJn
aW4gSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbmxpbmVCbG9ja0hlaWdodEFu
ZE1hcmdpbihjb25zdCBMYXlvdXRDb250ZXh0JiwgY29uc3QgQm94JikKK0hlaWdodEFuZE1hcmdp
biBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmlubGluZUJsb2NrSGVpZ2h0QW5k
TWFyZ2luKGNvbnN0IExheW91dFN0YXRlJiwgY29uc3QgQm94JikKIHsKICAgICByZXR1cm4geyB9
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lRm9ybWF0dGluZ1N0YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdTdGF0ZS5jcHAKaW5kZXggZjAyODliODMwZDc0ZWFj
MDU3YjlhODdlN2I5NDllZmQyYWJmZjdhYS4uOTg0YmM2YzI1ZGE4MGIxMTdlYjFjMTBhN2I5ZDI5
YzQ1YjNiZTRkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvSW5saW5lRm9ybWF0dGluZ1N0YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nU3RhdGUuY3BwCkBAIC0zNSw4ICsz
NSw4IEBAIG5hbWVzcGFjZSBMYXlvdXQgewogCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwo
SW5saW5lRm9ybWF0dGluZ1N0YXRlKTsKIAotSW5saW5lRm9ybWF0dGluZ1N0YXRlOjpJbmxpbmVG
b3JtYXR0aW5nU3RhdGUoUmVmPEZsb2F0aW5nU3RhdGU+JiYgZmxvYXRpbmdTdGF0ZSwgY29uc3Qg
TGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4dCkKLSAgICA6IEZvcm1hdHRpbmdTdGF0ZShXVEZN
b3ZlKGZsb2F0aW5nU3RhdGUpLCBUeXBlOjpJbmxpbmUsIGxheW91dENvbnRleHQpCitJbmxpbmVG
b3JtYXR0aW5nU3RhdGU6OklubGluZUZvcm1hdHRpbmdTdGF0ZShSZWY8RmxvYXRpbmdTdGF0ZT4m
JiBmbG9hdGluZ1N0YXRlLCBjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUpCisgICAgOiBG
b3JtYXR0aW5nU3RhdGUoV1RGTW92ZShmbG9hdGluZ1N0YXRlKSwgVHlwZTo6SW5saW5lLCBsYXlv
dXRTdGF0ZSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ1N0YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nU3RhdGUuaAppbmRleCA4NmNjN2Uz
ODg1NzFkZmZhNjQxMjc1OWM1MDAxYjEwZjc0ODdhYzlmLi5jZmRmNDA2NGQ5OTQ4YTU4YzAzNTk4
NjA1YzFhMzdiMmY1ZmEzYzQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nU3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nU3RhdGUuaApAQCAtMzks
NyArMzksNyBAQCBuYW1lc3BhY2UgTGF5b3V0IHsKIGNsYXNzIElubGluZUZvcm1hdHRpbmdTdGF0
ZSA6IHB1YmxpYyBGb3JtYXR0aW5nU3RhdGUgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQo
SW5saW5lRm9ybWF0dGluZ1N0YXRlKTsKIHB1YmxpYzoKLSAgICBJbmxpbmVGb3JtYXR0aW5nU3Rh
dGUoUmVmPEZsb2F0aW5nU3RhdGU+JiYsIGNvbnN0IExheW91dENvbnRleHQmKTsKKyAgICBJbmxp
bmVGb3JtYXR0aW5nU3RhdGUoUmVmPEZsb2F0aW5nU3RhdGU+JiYsIGNvbnN0IExheW91dFN0YXRl
Jik7CiAgICAgdmlydHVhbCB+SW5saW5lRm9ybWF0dGluZ1N0YXRlKCk7CiAKICAgICBJbmxpbmVD
b250ZW50JiBpbmxpbmVDb250ZW50KCkgeyByZXR1cm4gbV9pbmxpbmVDb250ZW50OyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVJbnZh
bGlkYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5s
aW5lSW52YWxpZGF0aW9uLmNwcAppbmRleCA2NDViNTRkZmJhNTYyMGQwYzM1MjA2NjNiNjc2NjU1
ZjI1MjI4YjRlLi43YjU2ZGIzZjU3ZDA5N2E0NjU2NDY0ZDcyYmVhNGU5MjQwZGVkMWRhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVJbnZh
bGlkYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUludmFsaWRhdGlvbi5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJJbmxp
bmVGb3JtYXR0aW5nU3RhdGUuaCIKICNpbmNsdWRlICJJbnZhbGlkYXRpb24uaCIKICNpbmNsdWRl
ICJMYXlvdXRCb3guaCIKLSNpbmNsdWRlICJMYXlvdXRDb250ZXh0LmgiCisjaW5jbHVkZSAiTGF5
b3V0Rm9ybWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzksOSArMzksOSBAQCBuYW1lc3BhY2UgTGF5b3V0
IHsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKElubGluZUludmFsaWRhdGlvbik7CiAK
LUludmFsaWRhdGlvblJlc3VsdCBJbmxpbmVJbnZhbGlkYXRpb246OmludmFsaWRhdGUoY29uc3Qg
Qm94JiBsYXlvdXRCb3gsIFN0eWxlRGlmZiwgTGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4dCwg
SW5saW5lRm9ybWF0dGluZ1N0YXRlJikKK0ludmFsaWRhdGlvblJlc3VsdCBJbmxpbmVJbnZhbGlk
YXRpb246OmludmFsaWRhdGUoY29uc3QgQm94JiBsYXlvdXRCb3gsIFN0eWxlRGlmZiwgTGF5b3V0
U3RhdGUmIGxheW91dFN0YXRlLCBJbmxpbmVGb3JtYXR0aW5nU3RhdGUmKQogewotICAgIGxheW91
dENvbnRleHQubWFya05lZWRzVXBkYXRlKGxheW91dEJveCwgTGF5b3V0Q29udGV4dDo6VXBkYXRl
VHlwZTo6QWxsKTsKKyAgICBsYXlvdXRTdGF0ZS5tYXJrTmVlZHNVcGRhdGUobGF5b3V0Qm94LCBM
YXlvdXRTdGF0ZTo6VXBkYXRlVHlwZTo6QWxsKTsKICAgICByZXR1cm4geyBudWxscHRyIH07CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lu
bGluZUludmFsaWRhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lSW52YWxpZGF0aW9uLmgKaW5kZXggZDc1NTU2NTY3NmIxZjg1MDg2ZDZjYTg5OTU5
M2MxZWI3NWY0NDQzOS4uNWFlODgyMTdkNDJiNWUxMWJhNzUwNWNjNTBjNjViNmJiNTA4NWIxNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
SW52YWxpZGF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lSW52YWxpZGF0aW9uLmgKQEAgLTM3LDE0ICszNywxNCBAQCBjbGFzcyBCb3g7CiBj
bGFzcyBDb250YWluZXI7CiBjbGFzcyBJbmxpbmVGb3JtYXR0aW5nU3RhdGU7CiBzdHJ1Y3QgSW52
YWxpZGF0aW9uUmVzdWx0OwotY2xhc3MgTGF5b3V0Q29udGV4dDsKK2NsYXNzIExheW91dFN0YXRl
OwogZW51bSBjbGFzcyBTdHlsZURpZmY7CiAKIC8vIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBib3gg
aW52YWxpZGF0aW9uIGZvciBpbmxpbmUgZm9ybWF0dGluZyBjb250ZXh0LgogY2xhc3MgSW5saW5l
SW52YWxpZGF0aW9uIHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKElubGluZUludmFsaWRh
dGlvbik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIEludmFsaWRhdGlvblJlc3VsdCBpbnZhbGlkYXRl
KGNvbnN0IEJveCYsIFN0eWxlRGlmZiwgTGF5b3V0Q29udGV4dCYsIElubGluZUZvcm1hdHRpbmdT
dGF0ZSYpOworICAgIHN0YXRpYyBJbnZhbGlkYXRpb25SZXN1bHQgaW52YWxpZGF0ZShjb25zdCBC
b3gmLCBTdHlsZURpZmYsIExheW91dFN0YXRlJiwgSW5saW5lRm9ybWF0dGluZ1N0YXRlJik7CiB9
OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVMaW5lQnJlYWtlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5jcHAKaW5kZXggZmJiMDVjM2IwMzY3MDRjZTZiNzNm
ODE4OGMxMWY3YjM2ZmIxMjU1My4uZjllNDI0NzI2ZjA0MjQ1ZmJjMzgyMzA2MDllOWNlZDM5OGIw
ZjBmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lTGluZUJyZWFrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmNwcApAQCAtMzgsOCArMzgsOCBAQCBuYW1lc3Bh
Y2UgTGF5b3V0IHsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKElubGluZUxpbmVCcmVh
a2VyKTsKIAotSW5saW5lTGluZUJyZWFrZXI6OklubGluZUxpbmVCcmVha2VyKGNvbnN0IExheW91
dENvbnRleHQmIGxheW91dENvbnRleHQsIGNvbnN0IElubGluZUNvbnRlbnQmIGlubGluZUNvbnRl
bnQsIGNvbnN0IFZlY3RvcjxJbmxpbmVSdW5Qcm92aWRlcjo6UnVuPiYgaW5saW5lUnVucykKLSAg
ICA6IG1fbGF5b3V0Q29udGV4dChsYXlvdXRDb250ZXh0KQorSW5saW5lTGluZUJyZWFrZXI6Oklu
bGluZUxpbmVCcmVha2VyKGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgSW5s
aW5lQ29udGVudCYgaW5saW5lQ29udGVudCwgY29uc3QgVmVjdG9yPElubGluZVJ1blByb3ZpZGVy
OjpSdW4+JiBpbmxpbmVSdW5zKQorICAgIDogbV9sYXlvdXRTdGF0ZShsYXlvdXRTdGF0ZSkKICAg
ICAsIG1fdGV4dFV0aWwoaW5saW5lQ29udGVudCkKICAgICAsIG1faW5saW5lUnVucyhpbmxpbmVS
dW5zKQogewpAQCAtMTQ3LDggKzE0Nyw4IEBAIExheW91dFVuaXQgSW5saW5lTGluZUJyZWFrZXI6
OnJ1bldpZHRoKGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4mIGlubGluZVJ1biwKIAogICAg
IEFTU0VSVChpbmxpbmVSdW4uaXNCb3goKSB8fCBpbmxpbmVSdW4uaXNGbG9hdCgpKTsKICAgICBh
dXRvJiBsYXlvdXRCb3ggPSBpbmxpbmVSdW4uaW5saW5lSXRlbSgpLmxheW91dEJveCgpOwotICAg
IEFTU0VSVChtX2xheW91dENvbnRleHQuaGFzRGlzcGxheUJveChsYXlvdXRCb3gpKTsKLSAgICBh
dXRvJiBkaXNwbGF5Qm94ID0gbV9sYXlvdXRDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3go
bGF5b3V0Qm94KTsKKyAgICBBU1NFUlQobV9sYXlvdXRTdGF0ZS5oYXNEaXNwbGF5Qm94KGxheW91
dEJveCkpOworICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBtX2xheW91dFN0YXRlLmRpc3BsYXlCb3hG
b3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKICAgICByZXR1cm4gZGlzcGxheUJveC53aWR0aCgpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVMaW5lQnJlYWtlci5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lTGluZUJyZWFrZXIuaAppbmRleCAxNTNkZGE4NjQ4YTlmYjcwNTI5ZjQ5ODE3ZTNl
MTAzOGQ3YmUzZWRkLi42ZjVmYzVlMDU2OWViNzNiMmFiN2U4Yzk3N2JmZmNmNTAzNDlhODhmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVM
aW5lQnJlYWtlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUxpbmVCcmVha2VyLmgKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIExheW91dCB7
CiBjbGFzcyBJbmxpbmVMaW5lQnJlYWtlciB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJ
bmxpbmVMaW5lQnJlYWtlcik7CiBwdWJsaWM6Ci0gICAgSW5saW5lTGluZUJyZWFrZXIoY29uc3Qg
TGF5b3V0Q29udGV4dCYsIGNvbnN0IElubGluZUNvbnRlbnQmLCBjb25zdCBWZWN0b3I8SW5saW5l
UnVuUHJvdmlkZXI6OlJ1bj4mKTsKKyAgICBJbmxpbmVMaW5lQnJlYWtlcihjb25zdCBMYXlvdXRT
dGF0ZSYsIGNvbnN0IElubGluZUNvbnRlbnQmLCBjb25zdCBWZWN0b3I8SW5saW5lUnVuUHJvdmlk
ZXI6OlJ1bj4mKTsKIAogICAgIHN0cnVjdCBSdW4gewogICAgICAgICBlbnVtIGNsYXNzIFBvc2l0
aW9uIHsgVW5kZXRlcm1pbmVkLCBMaW5lQmVnaW4sIExpbmVFbmQgfTsKQEAgLTU1LDcgKzU1LDcg
QEAgcHJpdmF0ZToKICAgICBMYXlvdXRVbml0IHJ1bldpZHRoKGNvbnN0IElubGluZVJ1blByb3Zp
ZGVyOjpSdW4mLCBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCkgY29uc3Q7CiAgICAgc3Rk
OjpvcHRpb25hbDxJdGVtUG9zaXRpb24+IGFkanVzdFNwbGl0UG9zaXRpb25XaXRoSHlwaGVuYXRp
b24oY29uc3QgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biYsIEl0ZW1Qb3NpdGlvbiBzcGxpdFBvc2l0
aW9uLCBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCwgTGF5b3V0VW5pdCBhdmFpbGFibGVX
aWR0aCwgYm9vbCBpc0xpbmVFbXB0eSkgY29uc3Q7CiAKLSAgICBjb25zdCBMYXlvdXRDb250ZXh0
JiBtX2xheW91dENvbnRleHQ7CisgICAgY29uc3QgTGF5b3V0U3RhdGUmIG1fbGF5b3V0U3RhdGU7
CiAgICAgY29uc3QgVGV4dFV0aWwgbV90ZXh0VXRpbDsKICAgICBjb25zdCBWZWN0b3I8SW5saW5l
UnVuUHJvdmlkZXI6OlJ1bj4mIG1faW5saW5lUnVuczsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0VHJlZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0VHJlZUJ1aWxkZXIuY3BwCmluZGV4IDk1Mzc4
NDhjZGZmODZhMDUzMTAyYTllMzgxYzU5OGZkZDY4Yzk0MjAuLjA4ZmI3NzAxMjgxMTk3ODZhNWU5
Y2NmNDNlNzJlN2FkMmIyZTc4YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9s
YXlvdXR0cmVlL0xheW91dFRyZWVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvbGF5b3V0dHJlZS9MYXlvdXRUcmVlQnVpbGRlci5jcHAKQEAgLTM0LDcgKzM0LDcgQEAKICNp
bmNsdWRlICJMYXlvdXRCb3guaCIKICNpbmNsdWRlICJMYXlvdXRDaGlsZEl0ZXJhdG9yLmgiCiAj
aW5jbHVkZSAiTGF5b3V0Q29udGFpbmVyLmgiCi0jaW5jbHVkZSAiTGF5b3V0Q29udGV4dC5oIgor
I2luY2x1ZGUgIkxheW91dEZvcm1hdHRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIkxheW91dElubGlu
ZUJveC5oIgogI2luY2x1ZGUgIkxheW91dElubGluZUNvbnRhaW5lci5oIgogI2luY2x1ZGUgIlJl
bmRlckJsb2NrLmgiCkBAIC0xMzUsOSArMTM1LDkgQEAgdm9pZCBUcmVlQnVpbGRlcjo6Y3JlYXRl
U3ViVHJlZShjb25zdCBSZW5kZXJFbGVtZW50JiByb290UmVuZGVyZXIsIENvbnRhaW5lciYgcm8K
IH0KIAogI2lmIEVOQUJMRShUUkVFX0RFQlVHR0lORykKLXN0YXRpYyB2b2lkIG91dHB1dElubGlu
ZVJ1bnMoVGV4dFN0cmVhbSYgc3RyZWFtLCBjb25zdCBMYXlvdXRDb250ZXh0JiBsYXlvdXRDb250
ZXh0LCBjb25zdCBDb250YWluZXImIGlubGluZUZvcm1hdHRpbmdSb290LCB1bnNpZ25lZCBkZXB0
aCkKK3N0YXRpYyB2b2lkIG91dHB1dElubGluZVJ1bnMoVGV4dFN0cmVhbSYgc3RyZWFtLCBjb25z
dCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IENvbnRhaW5lciYgaW5saW5lRm9ybWF0
dGluZ1Jvb3QsIHVuc2lnbmVkIGRlcHRoKQogewotICAgIGF1dG8mIGlubGluZUZvcm1hdHRpbmdT
dGF0ZSA9IGxheW91dENvbnRleHQuZXN0YWJsaXNoZWRGb3JtYXR0aW5nU3RhdGUoaW5saW5lRm9y
bWF0dGluZ1Jvb3QpOworICAgIGF1dG8mIGlubGluZUZvcm1hdHRpbmdTdGF0ZSA9IGxheW91dFN0
YXRlLmVzdGFibGlzaGVkRm9ybWF0dGluZ1N0YXRlKGlubGluZUZvcm1hdHRpbmdSb290KTsKICAg
ICBBU1NFUlQoaXM8SW5saW5lRm9ybWF0dGluZ1N0YXRlPihpbmxpbmVGb3JtYXR0aW5nU3RhdGUp
KTsKICAgICBhdXRvJiBpbmxpbmVSdW5zID0gZG93bmNhc3Q8SW5saW5lRm9ybWF0dGluZ1N0YXRl
PihpbmxpbmVGb3JtYXR0aW5nU3RhdGUpLmlubGluZVJ1bnMoKTsKIApAQCAtMTkwLDMwICsxOTAs
MzAgQEAgc3RhdGljIHZvaWQgb3V0cHV0TGF5b3V0Qm94KFRleHRTdHJlYW0mIHN0cmVhbSwgY29u
c3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IERpc3AKICAgICBzdHJlYW0ubmV4dExpbmUoKTsKIH0K
IAotc3RhdGljIHZvaWQgb3V0cHV0TGF5b3V0VHJlZShjb25zdCBMYXlvdXRDb250ZXh0KiBsYXlv
dXRDb250ZXh0LCBUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbnN0IENvbnRhaW5lciYgcm9vdENvbnRh
aW5lciwgdW5zaWduZWQgZGVwdGgpCitzdGF0aWMgdm9pZCBvdXRwdXRMYXlvdXRUcmVlKGNvbnN0
IExheW91dFN0YXRlKiBsYXlvdXRTdGF0ZSwgVGV4dFN0cmVhbSYgc3RyZWFtLCBjb25zdCBDb250
YWluZXImIHJvb3RDb250YWluZXIsIHVuc2lnbmVkIGRlcHRoKQogewogICAgIGZvciAoYXV0byYg
Y2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxCb3g+KHJvb3RDb250YWluZXIpKSB7CiAgICAgICAgIERp
c3BsYXk6OkJveCogZGlzcGxheUJveCA9IG51bGxwdHI7CiAgICAgICAgIC8vIE5vdCBhbGwgYm94
ZXMgZ2VuZXJhdGUgZGlzcGxheSBib3hlcy4KLSAgICAgICAgaWYgKGxheW91dENvbnRleHQgJiYg
bGF5b3V0Q29udGV4dC0+aGFzRGlzcGxheUJveChjaGlsZCkpCi0gICAgICAgICAgICBkaXNwbGF5
Qm94ID0gJmxheW91dENvbnRleHQtPmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goY2hpbGQpOworICAg
ICAgICBpZiAobGF5b3V0U3RhdGUgJiYgbGF5b3V0U3RhdGUtPmhhc0Rpc3BsYXlCb3goY2hpbGQp
KQorICAgICAgICAgICAgZGlzcGxheUJveCA9ICZsYXlvdXRTdGF0ZS0+ZGlzcGxheUJveEZvckxh
eW91dEJveChjaGlsZCk7CiAKICAgICAgICAgb3V0cHV0TGF5b3V0Qm94KHN0cmVhbSwgY2hpbGQs
IGRpc3BsYXlCb3gsIGRlcHRoKTsKLSAgICAgICAgaWYgKGxheW91dENvbnRleHQgJiYgY2hpbGQu
ZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgpKQotICAgICAgICAgICAgb3V0cHV0
SW5saW5lUnVucyhzdHJlYW0sICpsYXlvdXRDb250ZXh0LCBkb3duY2FzdDxDb250YWluZXI+KGNo
aWxkKSwgZGVwdGggKyAxKTsKKyAgICAgICAgaWYgKGxheW91dFN0YXRlICYmIGNoaWxkLmVzdGFi
bGlzaGVzSW5saW5lRm9ybWF0dGluZ0NvbnRleHQoKSkKKyAgICAgICAgICAgIG91dHB1dElubGlu
ZVJ1bnMoc3RyZWFtLCAqbGF5b3V0U3RhdGUsIGRvd25jYXN0PENvbnRhaW5lcj4oY2hpbGQpLCBk
ZXB0aCArIDEpOwogCiAgICAgICAgIGlmIChpczxDb250YWluZXI+KGNoaWxkKSkKLSAgICAgICAg
ICAgIG91dHB1dExheW91dFRyZWUobGF5b3V0Q29udGV4dCwgc3RyZWFtLCBkb3duY2FzdDxDb250
YWluZXI+KGNoaWxkKSwgZGVwdGggKyAxKTsKKyAgICAgICAgICAgIG91dHB1dExheW91dFRyZWUo
bGF5b3V0U3RhdGUsIHN0cmVhbSwgZG93bmNhc3Q8Q29udGFpbmVyPihjaGlsZCksIGRlcHRoICsg
MSk7CiAgICAgfQogfQogCi12b2lkIHNob3dMYXlvdXRUcmVlKGNvbnN0IEJveCYgbGF5b3V0Qm94
LCBjb25zdCBMYXlvdXRDb250ZXh0KiBsYXlvdXRDb250ZXh0KQordm9pZCBzaG93TGF5b3V0VHJl
ZShjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgTGF5b3V0U3RhdGUqIGxheW91dFN0YXRlKQog
ewogICAgIFRleHRTdHJlYW0gc3RyZWFtKFRleHRTdHJlYW06OkxpbmVNb2RlOjpNdWx0aXBsZUxp
bmUsIFRleHRTdHJlYW06OkZvcm1hdHRpbmc6OlNWR1N0eWxlUmVjdCk7CiAKICAgICBhdXRvJiBp
bml0aWFsQ29udGFpbmluZ0Jsb2NrID0gbGF5b3V0Qm94LmluaXRpYWxDb250YWluaW5nQmxvY2so
KTsKLSAgICBvdXRwdXRMYXlvdXRCb3goc3RyZWFtLCBpbml0aWFsQ29udGFpbmluZ0Jsb2NrLCBs
YXlvdXRDb250ZXh0ID8gJmxheW91dENvbnRleHQtPmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goaW5p
dGlhbENvbnRhaW5pbmdCbG9jaykgOiBudWxscHRyLCAwKTsKLSAgICBvdXRwdXRMYXlvdXRUcmVl
KGxheW91dENvbnRleHQsIHN0cmVhbSwgaW5pdGlhbENvbnRhaW5pbmdCbG9jaywgMSk7CisgICAg
b3V0cHV0TGF5b3V0Qm94KHN0cmVhbSwgaW5pdGlhbENvbnRhaW5pbmdCbG9jaywgbGF5b3V0U3Rh
dGUgPyAmbGF5b3V0U3RhdGUtPmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goaW5pdGlhbENvbnRhaW5p
bmdCbG9jaykgOiBudWxscHRyLCAwKTsKKyAgICBvdXRwdXRMYXlvdXRUcmVlKGxheW91dFN0YXRl
LCBzdHJlYW0sIGluaXRpYWxDb250YWluaW5nQmxvY2ssIDEpOwogICAgIFdURkxvZ0Fsd2F5cygi
JXMiLCBzdHJlYW0ucmVsZWFzZSgpLnV0ZjgoKS5kYXRhKCkpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRUcmVlQnVpbGRlci5oIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0VHJlZUJ1aWxkZXIuaAppbmRleCA5
MmQzMzY1NTUyM2QzMWQ2NWVhYjQ1MWI2ZWY3NjE4ZTY1ZmU4ZjM4Li4yM2E3MmFhZjRlMDIxMmFj
MWIyNGRiZmYxMDcyNWU3NjRkNWMzY2YyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvbGF5b3V0dHJlZS9MYXlvdXRUcmVlQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9sYXlvdXR0cmVlL0xheW91dFRyZWVCdWlsZGVyLmgKQEAgLTM2LDcgKzM2LDcgQEAgbmFt
ZXNwYWNlIExheW91dCB7CiAKIGNsYXNzIEJveDsKIGNsYXNzIENvbnRhaW5lcjsKLWNsYXNzIExh
eW91dENvbnRleHQ7CitjbGFzcyBMYXlvdXRTdGF0ZTsKIAogY2xhc3MgVHJlZUJ1aWxkZXIgewog
cHVibGljOgpAQCAtNDcsNyArNDcsNyBAQCBwcml2YXRlOgogfTsKIAogI2lmIEVOQUJMRShUUkVF
X0RFQlVHR0lORykKLXZvaWQgc2hvd0xheW91dFRyZWUoY29uc3QgQm94JiwgY29uc3QgTGF5b3V0
Q29udGV4dCopOwordm9pZCBzaG93TGF5b3V0VHJlZShjb25zdCBCb3gmLCBjb25zdCBMYXlvdXRT
dGF0ZSopOwogdm9pZCBzaG93TGF5b3V0VHJlZShjb25zdCBCb3gmKTsKIHZvaWQgcHJpbnRMYXlv
dXRUcmVlRm9yTGl2ZURvY3VtZW50cygpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlld0xheW91dENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXdMYXlvdXRDb250ZXh0LmNwcAppbmRleCBiM2E4ZTRhMjA0MTRkZThlYmFkZjFk
NmExNmMzN2MyNjhmNGYzOTE3Li5iNjczNDZmZjhhMzU0MDg4MDA4MjgxOGMyZmU5NTkyN2U2MzQy
M2Y4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlld0xheW91dENvbnRl
eHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3TGF5b3V0Q29udGV4dC5j
cHAKQEAgLTQyLDcgKzQyLDcgQEAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVY
VCkKICNpbmNsdWRlICJGb3JtYXR0aW5nU3RhdGUuaCIKICNpbmNsdWRlICJMYXlvdXRDb250YWlu
ZXIuaCIKLSNpbmNsdWRlICJMYXlvdXRDb250ZXh0LmgiCisjaW5jbHVkZSAiTGF5b3V0Rm9ybWF0
dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiTGF5b3V0VHJlZUJ1aWxkZXIuaCIKICNlbmRpZgogCkBA
IC01NiwxMSArNTYsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RhdGljIHZvaWQgbGF5b3V0
VXNpbmdGb3JtYXR0aW5nQ29udGV4dChjb25zdCBSZW5kZXJWaWV3JiByZW5kZXJWaWV3KQogewog
ICAgIGF1dG8gaW5pdGlhbENvbnRhaW5pbmdCbG9jayA9IExheW91dDo6VHJlZUJ1aWxkZXI6OmNy
ZWF0ZUxheW91dFRyZWUocmVuZGVyVmlldyk7Ci0gICAgYXV0byBsYXlvdXRDb250ZXh0ID0gc3Rk
OjptYWtlX3VuaXF1ZTxMYXlvdXQ6OkxheW91dENvbnRleHQ+KCk7Ci0gICAgbGF5b3V0Q29udGV4
dC0+aW5pdGlhbGl6ZVJvb3QoKmluaXRpYWxDb250YWluaW5nQmxvY2ssIHJlbmRlclZpZXcuc2l6
ZSgpKTsKLSAgICBsYXlvdXRDb250ZXh0LT5zZXRJblF1aXJrc01vZGUocmVuZGVyVmlldy5kb2N1
bWVudCgpLmluUXVpcmtzTW9kZSgpKTsKLSAgICBsYXlvdXRDb250ZXh0LT51cGRhdGVMYXlvdXQo
KTsKLSAgICBsYXlvdXRDb250ZXh0LT52ZXJpZnlBbmRPdXRwdXRNaXNtYXRjaGluZ0xheW91dFRy
ZWUocmVuZGVyVmlldyk7CisgICAgYXV0byBsYXlvdXRTdGF0ZSA9IHN0ZDo6bWFrZV91bmlxdWU8
TGF5b3V0OjpMYXlvdXRTdGF0ZT4oKTsKKyAgICBsYXlvdXRTdGF0ZS0+aW5pdGlhbGl6ZVJvb3Qo
KmluaXRpYWxDb250YWluaW5nQmxvY2ssIHJlbmRlclZpZXcuc2l6ZSgpKTsKKyAgICBsYXlvdXRT
dGF0ZS0+c2V0SW5RdWlya3NNb2RlKHJlbmRlclZpZXcuZG9jdW1lbnQoKS5pblF1aXJrc01vZGUo
KSk7CisgICAgbGF5b3V0U3RhdGUtPnVwZGF0ZUxheW91dCgpOworICAgIGxheW91dFN0YXRlLT52
ZXJpZnlBbmRPdXRwdXRNaXNtYXRjaGluZ0xheW91dFRyZWUocmVuZGVyVmlldyk7CiB9IAogI2Vu
ZGlmCiAK
</data>
<flag name="review"
          id="370679"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>